ZGlmZiAtLWdpdCBhL2xpY2Vuc2VzLzJkYm95LUVVTEEgYi9saWNlbnNlcy8yZGJveS1FVUxBCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYTM4OTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy8yZGJveS1FVUxBCkBAIC0wLDAgKzEsNDIgQEAKKzJEIEJPWSwgTExDCitFbmQgVXNlciBMaWNlbnNlIEFncmVlbWVudAorCitUSElTIEVORCBVU0VSIExJQ0VOU0UgQUdSRUVNRU5UICgiRVVMQSIpIElTIEEgQklORElORyBMRUdBTCBBR1JFRU1FTlQgQkVUV0VFTiAyRCBCT1ksIExMQyAoIjJEIEJPWSIpIEFORCBZT1UgQU5ELCBJRiBBUFBMSUNBQkxFLCBUSEUgQ09NUEFOWSBPUiBPVEhFUiBMRUdBTCBFTlRJVFkgWU9VIFJFUFJFU0VOVCAoQ09MTEVDVElWRUxZLCAiWU9VIiBBTkQgIllPVVIiKSBSRUdBUkRJTkcgVEhFIEdBTUUgU09GVFdBUkUgVEhBVCBZT1UgQVJFIElOU1RBTExJTkcsIElOQ0xVRElORyBBTlkgQUNDT01QQU5ZSU5HIE1BTlVBTCBPUiBPVEhFUiBSRUxBVEVEIE1BVEVSSUFMIFBST1ZJREVEIEJZIDJEIEJPWSBBUyBQQVJUIE9GLCBPUiBJTiBDT05ORUNUSU9OLCBUSEVSRVdJVEggKENPTExFQ1RJVkVMWSwgVEhFICJHQU1FIikuCisKK0JZIENMSUNLSU5HIFRIRSAiSSBBR1JFRSIgQlVUVE9OIEJFTE9XLCBPUiBCWSBPVEhFUldJU0UgQ09OVElOVUlORyBUTyBJTlNUQUxMLCBET1dOTE9BRCwgQ09QWSwgQUNDRVNTIE9SIFVTRSBUSEUgR0FNRSwgWU9VIEFDS05PV0xFREdFIFRIQVQgWU9VIFVOREVSU1RBTkQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIEVVTEEuICBJRiBZT1UgRE8gTk9UIEFHUkVFLCBZT1UgTVVTVCBTRUxFQ1QgVEhFICJJIERPTidUIEFHUkVFIiBCVVRUT04gQU5EIFlPVSBNQVkgTk9UIENPTlRJTlVFIFRPIElOU1RBTEwsIERPV05MT0FELCBDT1BZLCBBQ0NFU1MgT1IgVVNFIFRIRSBHQU1FLgorCisxLiAJTElDRU5TRSBHUkFOVCBBTkQgUkVTVFJJQ1RJT05TLgorCisJMS4xCUxpY2Vuc2UgR3JhbnQuIDJEIEJPWSBoZXJlYnkgZ3JhbnRzIHRvIHlvdSBhIG5vbi1leGNsdXNpdmUgbGljZW5zZSB0byB1c2UgYSBzaW5nbGUgY29weSBvZiB0aGUgb2JqZWN0IGNvZGUgdmVyc2lvbiBvZiB0aGUgR2FtZSBmb3IgeW91ciBwZXJzb25hbCwgbm9uLWNvbW1lcmNpYWwgaG9tZSBlbnRlcnRhaW5tZW50IHVzZSBvbiBvbmUgcGVyc29uYWwgY29tcHV0ZXIgb3Igb3RoZXIgY29tcGF0aWJsZSBlbGVjdHJvbmljIGRldmljZS4gIFlvdSBtYXkgc2VsbCBvciB0cmFuc2ZlciB5b3VyIGNvcHkgb2YgdGhlIEdhbWUgdG8gYW5vdGhlciBwZXJzb24gYWxvbmcgd2l0aCwgYW5kIHN1YmplY3QgdG8sIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgRVVMQSwgb25seSBpZiB5b3UgZG8gbm90IHJldGFpbiBhbnkgY29waWVzLgorCisJMS4yCVJlc3RyaWN0aW9ucy4gWW91IG1heSBub3QgKGkpIGRlY29tcGlsZSwgZGlzYXNzZW1ibGUgb3IgcmV2ZXJzZSBlbmdpbmVlciB0aGUgR2FtZSBvciBvdGhlcndpc2UgYXR0ZW1wdCB0byBnYWluIGFjY2VzcyB0byBpdHMgc291cmNlIGNvZGUsIGV4Y2VwdCB0byB0aGUgZXh0ZW50IHRoYXQgc3VjaCByZXN0cmljdGlvbnMgYXJlIGV4cHJlc3NseSBwcm9oaWJpdGVkIGJ5IGxhdzsgKGlpKSBjb3B5LCBvZmZlciBmb3IgcHVibGljIGRpc3BsYXkgb3IgY3JlYXRlIGRlcml2YXRpdmUgd29ya3MgdGhlcmVvZiwgZXhjZXB0IHRvIHRoZSBleHRlbnQgdGhhdCBzdWNoIHJlc3RyaWN0aW9ucyBhcmUgZXhwcmVzc2x5IHByb2hpYml0ZWQgYnkgbGF3OyAoaWlpKSByZW50LCBsZWFzZSwgbG9hbiwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBHYW1lLCBvciBvZmZlciBpdCBvbiBhIHBheS1wZXItcGxheSwgY29pbi1vcCBvciBvdGhlciBmb3IgY2hhcmdlIChvciBmcmVlKSBiYXNpczsgKGl2KSB1c2UgdGhlIEdhbWUgdG8gaW5mcmluZ2UgdGhlIGNvcHlyaWdodHMgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBvdGhlcnMgaW4gYW55IHdheTsgKHYpIG1vZGlmeSBvciBkZWxldGUgdGhlIGNvcHlyaWdodCBhbmQgb3RoZXIgcHJvcHJpZXRhcnkgcmlnaHRzIG5vdGljZXMgb24gb3IgaW4gdGhlIEdhbWUuCisKKwkxLjMgIAlBZGRpdGlvbmFsIFJlc3RyaWN0aW9ucyBmb3IgVHJpYWwgVmVyc2lvbnMuIElmIHRoZSBHYW1lIHdhcyBwcm92aWRlZCB0byB5b3UgZm9yIHRyaWFsIHVzZSBmb3IgYSBsaW1pdGVkIHBlcmlvZCBvZiB0aW1lIGFuZC9vciBudW1iZXIgb2YgdXNlcywgeW91IGFncmVlIG5vdCB0byB1c2UgdGhlIEdhbWUgYmV5b25kIHRoZSBleHBpcmF0aW9uIG9yIHRlcm1pbmF0aW9uIG9mIHRoZSB0cmlhbCBwZXJpb2QuICBZb3UgYWNrbm93bGVkZ2UgYW5kIGFncmVlIHRoYXQgdGhlIEdhbWUgbWF5IGluY2x1ZGUgY29kZSBkZXNpZ25lZCB0byBwcmV2ZW50IHlvdSBmcm9tIGV4Y2VlZGluZyB0aGVzZSBsaW1pdHMsIGFuZCB0aGF0IHN1Y2ggY29kZSBtYXkgcmVtYWluIG9uIHlvdXIgY29tcHV0ZXIgb3IgZGV2aWNlIGFmdGVyIGRlbGV0aW9uIG9mIHRoZSBHYW1lIHRvIHByZXZlbnQgeW91IGZyb20gaW5zdGFsbGluZyBhbm90aGVyIGNvcHkgb2YgdGhlIEdhbWUgYW5kIHJlcGVhdGluZyB0aGUgdHJpYWwuCisKKwkxLjQgIAlHYW1lIFNwZWNpZmljIFRlcm1zIGFuZCBDb25kaXRpb25zLiBGb3IgYWRkaXRpb25hbCB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0IG1heSBhcHBseSB0byB0aGUgR2FtZSwgc3VjaCBhcyB0aGlyZC1wYXJ0eSBjb3B5cmlnaHQgbm90aWNlcyBhbmQgbGljZW5zZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHJldmlldyB0aGUgUmVhZG1lIGZpbGUgaW5jbHVkZWQgd2l0aCB0aGUgR2FtZS4gIFRoZSBSZWFkTWUgZmlsZSBmb3IgdGhlIEdhbWUgaXMgaGVyZWJ5IGluY29ycG9yYXRlZCBpbnRvIHRoaXMgRVVMQSBieSB0aGlzIHJlZmVyZW5jZS4KKworMi4gIAlURVJNSU5BVElPTi4gVGhpcyBFVUxBIGlzIGVmZmVjdGl2ZSB1bnRpbCB0ZXJtaW5hdGVkLiBZb3UgbWF5IHRlcm1pbmF0ZSB0aGlzIEVVTEEgYXQgYW55IHRpbWUgYnkgdW5pbnN0YWxsaW5nIHRoZSBHYW1lIGFuZCBkZXN0cm95aW5nIGFsbCBjb3BpZXMgb2YgdGhlIEdhbWUgaW4geW91ciBwb3NzZXNzaW9uIG9yIGNvbnRyb2wuICAyRCBCT1kgbWF5IHRlcm1pbmF0ZSB0aGlzIEVVTEEgaW1tZWRpYXRlbHkgdXBvbiBub3RpY2UgdG8geW91IGlmIHlvdSBicmVhY2ggYW55IG9mIGl0cyB0ZXJtcyBvciBjb25kaXRpb25zLiAgVXBvbiB0ZXJtaW5hdGlvbiBvZiB0aGlzIEVVTEEsIHlvdSBhZ3JlZSB0byBpbW1lZGlhdGVseSB1bmluc3RhbGwgdGhlIEdhbWUgYW5kIGRlc3Ryb3kgYWxsIGNvcGllcyBvZiB0aGUgR2FtZS4KKworMy4gIAlHQU1FIE9XTkVSU0hJUC4gVGhlIEdhbWUgaXMgdGhlIGNvcHlyaWdodGVkIHByb3ByaWV0YXJ5IG1hdGVyaWFsIG9mIDJEIEJPWSBhbmQvb3IgaXRzIHRoaXJkLXBhcnR5IGxpY2Vuc29ycyBhbmQgaXMgc3ViamVjdCB0byBjb3B5cmlnaHQgcHJvdGVjdGlvbiB1bmRlciBVLlMuIGNvcHlyaWdodCBsYXcgYW5kIGludGVybmF0aW9uYWwgY29weXJpZ2h0IHRyZWF0aWVzLCBhcyB3ZWxsIGFzIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIGFuZCB0cmVhdGllcy4gMkQgQk9ZIGFuZC9vciBpdHMgdGhpcmQtcGFydHkgbGljZW5zb3JzIHJldGFpbiBhbGwgcmlnaHQsIHRpdGxlLCBhbmQgaW50ZXJlc3QgaW4gdGhlIEdhbWUgKGFuZCBhbnkgY29waWVzIHRoZXJlb2YpIGFuZCBzcGVjaWZpY2FsbHkgcmVzZXJ2ZSBhbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCB1bmRlciB0aGlzIEVVTEEuCisKKzQuICBMSU1JVEVEIFdBUlJBTlRJRVMgQlkgMkQgQk9ZLgorCisJNC4xIAlMaW1pdGVkIFdhcnJhbnR5LiAyRCBCT1kgV0FSUkFOVFMgVE8gWU9VLCBUSEUgT1JJR0lOQUwgUFVSQ0hBU0VSIE9GIFRIRSBHQU1FLCBUSEFUIFRIRSBHQU1FIFdJTEwgQkUgRlJFRSBGUk9NIERFRkVDVFMgSU4gTUFURVJJQUxTIEFORCBXT1JLTUFOU0hJUCBGT1IgQSBQRVJJT0QgT0YgTklORVRZICg5MCkgREFZUyBGUk9NIFRIRSBEQVRFIE9GIFBVUkNIQVNFIChUSEUgIldBUlJBTlRZIFBFUklPRCIpLiAgVEhJUyBMSU1JVEVEIFdBUlJBTlRZIElTIFZPSUQgSUYgVEhFIEdBTUUgSEFTIEJFRU4gU1VCSkVDVCBUTyBNSVNVU0UsIERBTUFHRSBPUiBJRiBZT1UgSEFWRSBWSU9MQVRFRCBUSElTIEVVTEEuIFRPIFRIRSBNQVhJTVVNIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcsIEFMTCBPVEhFUiBXQVJSQU5USUVTLCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFRJVExFLCBBTkQgTk9OLUlORlJJTkdFTUVOVCwgT1IgV0FSUkFOVElFUyBUSEFUIFRIRSBHQU1FIFdJTEwgQkUgRVJST1ItRlJFRSwgU0VDVVJFIE9SIFZJUlVTLUZSRUUsIEFSRSBIRVJFQlkgRVhQUkVTU0xZIERJU0NMQUlNRUQuCisKKwk0LjIgCUFkZGl0aW9uYWwgV2FycmFudHkgZm9yIFJldGFpbCBQcm9kdWN0LiBJRiBZT1UgUFVSQ0hBU0VEIFRIRSBHQU1FIE9OIEEgRElTQyBPUiBPVEhFUiBSRUNPUkRJTkcgTUVESVVNLCBUSEVOIFlPVSBNVVNUIE1BS0UgQU5ZIFdBUlJBTlRZIENMQUlNIFRPIFRIRSBSRVRBSUxFUiBGUk9NIFdISUNIIFlPVSBQVVJDSEFTRUQgVEhFIEdBTUUgQlkgUFJPVklESU5HIEEgQ09QWSBPRiBZT1VSIE9SSUdJTkFMIFNBTEVTIFJFQ0VJUFQgQU5EIEFOWSBPVEhFUiBERVRBSUxTIFJFUVVJUkVEIEJZIFRIRSBSRVRBSUxFUi4gVEhFIFJFVEFJTEVSLCBBVCBJVFMgT1BUSU9OLCBNQVkgUkVGVU5EIFlPVVIgUFVSQ0hBU0UgUFJJQ0UsIFJFUEFJUiBPUiBSRVBMQUNFIFRIRSBESVNDIE9SIE9USEVSIE1FRElBIENPTlRBSU5JTkcgVEhFIEdBTUUuIEFOWSBSRVBMQUNFTUVOVCBXSUxMIEJFIFdBUlJBTlRFRCBGT1IgVEhFIFJFTUFJTkRFUiBPRiBUSEUgT1JJR0lOQUwgV0FSUkFOVFkgUEVSSU9EIE9SIFRISVJUWSAoMzApIERBWVMsIFdISUNIRVZFUiBJUyBMT05HRVIuIFlPVVIgRVhDTFVTSVZFIFJFTUVEWSwgQU5EIFRIRSBFTlRJUkUgTElBQklMSVRZIE9GIDJEIEJPWSwgSVRTIEFGRklMSUFURVMsIExJQ0VOU09SUyBBTkQgU1VQUExJRVJTIChDT0xMRUNUSVZFTFksICJUSEUgMkQgQk9ZIFBBUlRJRVMiKSwgRk9SIEJSRUFDSCBPRiBUSElTIFdBUlJBTlRZLCBTSEFMTCBCRSBUSEUgUkVGVU5ELCBSRVBBSVIgT1IgUkVQTEFDRU1FTlQgREVTQ1JJQkVEIEFCT1ZFLgorCis1LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS4gTk8gUFJPVklTSU9OUyBPRiBUSElTIEVVTEEgU0hBTEwgQVBQTFkgVE8gTElNSVQgTElBQklMSVRZIEFSSVNJTkcgRlJPTSBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkgQ0FVU0VEIEJZIE5FR0xJR0VOQ0UgT1IgRk9SIEZSQVVELiBPVEhFUldJU0UsIElOIE5PIEVWRU5UIFdJTEwgVEhFIDJEIEJPWSBQQVJUSUVTJyBUT1RBTCBBR0dSRUdBVEUgTElBQklMSVRZIFRPIFlPVSBGT1IgRElSRUNUIERBTUFHRVMsIExPU1NFUywgQU5EIENBVVNFUyBPRiBBQ1RJT04gQVJJU0lORyBPVVQgT0YgT1IgUkVMQVRJTkcgVE8gVEhJUyBFVUxBIEFORC9PUiBZT1VSIFVTRSBPRiBUSEUgR0FNRSBFWENFRUQgVEhFIEFNT1VOVCBQQUlEIEJZIFlPVSBGT1IgVEhFIEdBTUUuICBJTiBOTyBFVkVOVCBXSUxMIFRIRSAyRCBCT1kgUEFSVElFUyBCRSBMSUFCTEUgRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgT1IgQU5ZIE9USEVSIFRZUEUgT0YgREFNQUdFUyAoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBEQU1BR0VTIFJFTEFUSU5HIFRPIExPU1QgUFJPRklUUywgTE9TUyBPRiBEQVRBLCBQUklWQUNZLCBORUdMSUdFTkNFIE9SIE9USEVSIERVVFkgT0YgQ0FSRSksIEVWRU4gSUYgT05FIE9SIE1PUkUgT0YgVEhFIDJEIEJPWSBQQVJUSUVTIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNi4gQkFTSVMgT0YgVEhFIEJBUkdBSU47IEVYQ0xVU0lPTlMuIFRoZSBkaXNjbGFpbWVycyBvZiB3YXJyYW50aWVzIGFuZCBsaW1pdGF0aW9ucyBvZiBsaWFiaWxpdHkgc2V0IGZvcnRoIGFib3ZlIGFyZSBmdW5kYW1lbnRhbCBlbGVtZW50cyBvZiB0aGUgYmFzaXMgb2YgdGhlIGFncmVlbWVudCBiZXR3ZWVuIHlvdSBhbmQgMkQgQk9ZLiAgWW91IHVuZGVyc3RhbmQgYW5kIGFncmVlIHRoYXQgMkQgQk9ZIHdvdWxkIG5vdCBiZSBhYmxlIHRvIGVjb25vbWljYWxseSBvciByZWFzb25hYmx5IHByb3ZpZGUgdGhlIEdhbWUgdG8geW91IHdpdGhvdXQgdGhlc2UgbGltaXRhdGlvbnMuIEhPV0VWRVIsIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EL09SIFRIRSBMSU1JVEFUSU9OIE9GIElORElSRUNUIERBTUFHRVMgQVMgU0VUIEZPUlRIIElOIFNFQ1RJT05TIDQgQU5EIDUgQUJPVkUsIFNPIFRIRSBBQk9WRSBFWENMVVNJT05TIEFORCBMSU1JVEFUSU9OUyBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNy4gSU5ERU1OSUZJQ0FUSU9OLiAgWW91IGFncmVlIHRvIGluZGVtbmlmeSwgZGVmZW5kIGFuZCBob2xkIGhhcm1sZXNzIHRoZSAyRCBCT1kgUGFydGllcywgaW5jbHVkaW5nIHRoZWlyIHJlc3BlY3RpdmUgZW1wbG95ZWVzLCBvZmZpY2VycywgZGlyZWN0b3JzIGFuZCBwZXJzb25uZWwgZnJvbSBhbnkgY2xhaW1zLCBsb3NzZXMsIGRhbWFnZXMsIGxpYWJpbGl0aWVzLCBpbmNsdWRpbmcgYXR0b3JuZXlzJyBmZWVzLCBhcmlzaW5nIG91dCBvZiB5b3VyIHZpb2xhdGlvbiBvZiB0aGlzIEVVTEEgYW5kL29yIHlvdXIgdXNlIG9yIG1pc3VzZSBvZiB0aGUgR2FtZS4KKworOC4gRVhQT1JUIENPTlRST0wuICBUaGUgR2FtZSBvcmlnaW5hdGVzIGluIHRoZSBVbml0ZWQgU3RhdGVzIGFuZCBpcyBzdWJqZWN0IHRvIFVuaXRlZCBTdGF0ZXMgZXhwb3J0IGxhd3MgYW5kIHJlZ3VsYXRpb25zLiBZb3UgbWF5IG5vdCBleHBvcnQgb3IgcmUtZXhwb3J0LCBpbiB3aG9sZSBvciBpbiBwYXJ0LCB0aGUgR2FtZSB0byBjZXJ0YWluIGNvdW50cmllcywgcGVyc29ucyBvciBlbnRpdGllcyBwcm9oaWJpdGVkIGZyb20gcmVjZWl2aW5nIGV4cG9ydHMgZnJvbSB0aGUgVW5pdGVkIFN0YXRlcy4gIEFkZGl0aW9uYWxseSwgdGhlIEdhbWUgbWF5IGJlIHN1YmplY3QgdG8gdGhlIGltcG9ydCBhbmQgZXhwb3J0IGxhd3Mgb2Ygb3RoZXIgY291bnRyaWVzLCBhbmQgeW91IGFncmVlIHRoYXQgeW91IHdpbGwgY29tcGx5IHdpdGggYW55IHN1Y2ggZm9yZWlnbiBpbXBvcnQgYW5kIGV4cG9ydCBsYXdzLCBhcyBhcHBsaWNhYmxlLgorCis5LiBNSVNDRUxMQU5FT1VTLiAgWW91IGFncmVlIHRvIGNvbXBseSB3aXRoIGFsbCBVbml0ZWQgU3RhdGVzIGFuZCBmb3JlaWduIGxhd3MgcmVsYXRlZCB0byB5b3VyIHVzZSBvZiB0aGUgR2FtZS4gIFRoaXMgaXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB5b3UgYW5kIDJEIEJPWSByZWxhdGluZyB0byB0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZWluIGFuZCByZXBsYWNlcyBhbnkgYW5kIGFsbCBwcmV2aW91cyByZXByZXNlbnRhdGlvbnMsIGFncmVlbWVudHMsIHVuZGVyc3RhbmRpbmdzIG9yIGNvbW11bmljYXRpb25zLCB3aGV0aGVyIHdyaXR0ZW4gb3Igb3JhbC4gIFRoaXMgRVVMQSBtYXkgbm90IGJlIG1vZGlmaWVkIGV4Y2VwdCBpbiB3cml0aW5nLCBzaWduZWQgYnkgYm90aCBwYXJ0aWVzLiBJZiBhIGNvdXJ0IG9mIGNvbXBldGVudCBqdXJpc2RpY3Rpb24gZGVjbGFyZXMgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEVVTEEgdG8gYmUgdm9pZCBvciB1bmVuZm9yY2VhYmxlLCB0aGVuIHN1Y2ggcHJvdmlzaW9uIHdpbGwgYmUgaW50ZXJwcmV0ZWQsIGNvbnN0cnVlZCBvciByZWZvcm1lZCB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgcmVxdWlyZWQgdG8gcmVuZGVyIGl0IHZhbGlkLCBlbmZvcmNlYWJsZSBhbmQgY29uc2lzdGVudCB3aXRoIHRoZSBvcmlnaW5hbCBpbnRlbnQgdW5kZXJseWluZyBzdWNoIHByb3Zpc2lvbiwgYW5kIHN1Y2ggaW52YWxpZGl0eSBvciB1bmVuZm9yY2VhYmlsaXR5IHdpbGwgbm90IGFmZmVjdCBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgRVVMQS4gICBUaGUgRW5nbGlzaCBsYW5ndWFnZSB2ZXJzaW9uIG9mIHRoaXMgRVVMQSB3aWxsIGNvbnRyb2wgaXRzIGludGVycHJldGF0aW9uLgorCisxMC4gIEdPVkVSTklORyBMQVcgQU5EIFZFTlVFLgorCitUaGlzIEVVTEEgd2lsbCBiZSBnb3Zlcm5lZCBieSBhbmQgY29uc3RydWVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgQ2FsaWZvcm5pYSwgVVNBLCBleGNsdWRpbmcgaXRzIGNvbmZsaWN0cyBvZiBsYXcgcnVsZXMgYW5kIHNwZWNpZmljYWxseSBleGNsdWRpbmcgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzLiAgVmVudWUgZm9yIGFueSBhY3Rpb24gaGVyZXVuZGVyIHNoYWxsIGxpZSBleGNsdXNpdmVseSBpbiB0aGUgc3RhdGUgYW5kIGZlZGVyYWwgY291cnRzIGxvY2F0ZWQgaW4gU2FuIEZyYW5jaXNjbyBDb3VudHksIENhbGlmb3JuaWEgVVNBIGFuZCB5b3UgaGVyZWJ5IGNvbnNlbnQgYW5kIHN1Ym1pdCB0byB0aGUgcGVyc29uYWwganVyaXNkaWN0aW9uIG9mIHN1Y2ggY291cnRzLgorCisxMS4gIE5PVElDRVM7IEhPVyBUTyBDT05UQUNUIDJEIEJPWS4gIFRoZSBHYW1lIGlzIG1hZGUgYXZhaWxhYmxlIHRvIHlvdSBieSAyRCBCT1ksIExMQy4gIDJEIEJPWSBtYXkgYmUgY29udGFjdGVkIHZpYSBpdHMgd2Vic2l0ZSAoaHR0cDovLzJkYm95LmNvbSkuCmRpZmYgLS1naXQgYS9saWNlbnNlcy8zcHJveHkgYi9saWNlbnNlcy8zcHJveHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM3NDQ5ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzLzNwcm94eQpAQCAtMCwwICsxLDU5IEBACiszcHJveHkgMC42IFB1YmxpYyBMaWNlbnNlIEFncmVlbWVudAorCisoYykgMjAwMC0yMDA5IGJ5IDNBUEEzQSAoM0FQQTNBQHNlY3VyaXR5Lm5ub3YucnUpCisoYykgMjAwMC0yMDA5IGJ5IFNlY3VyaXR5VnVsbnMuY29tIChodHRwOi8vM3Byb3h5LnJ1LykKKyhjKSAyMDAwLTIwMDkgYnkgVmxhZGltaXIgRHVicm92aW4gKHZsYWRAc2FuZHkucnUpCisKK1RoaXMgc29mdHdhcmUgdXNlczoKKyAgUlNBIERhdGEgU2VjdXJpdHksIEluYy4gTUQ0IE1lc3NhZ2UtRGlnZXN0IEFsZ29yaXRobQorICBSU0EgRGF0YSBTZWN1cml0eSwgSW5jLiBNRDUgTWVzc2FnZS1EaWdlc3QgQWxnb3JpdGhtCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKK0EgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCitDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKK0VYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKK1BST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK1RoaXMgc29mdHdhcmUgaXMgRlJFRVdBUkUuIAorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0IChCU0Qgc3R5bGUgbGljZW5zZSk6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFNlY3VyaXR5VnVsbnMuQ09NIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICAgIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisKK0luc3RlYWQgb2YgdGhpcyBsaWNlbnNlLCB5b3UgY2FuIGFsc28gdXNlIGFuZCByZWRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSB1bmRlcgordGVybXMgb2YgY29tcGF0aWJsZSBsaWNlbnNlLCBpbmNsdWRpbmc6CisKKzEuIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMAorICAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisKKwlodHRwOi8vd3d3LmFwYWNoZS5vcmcvbGljZW5zZXMvTElDRU5TRS0yLjAKKworMi4gR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisJaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC50eHQKKworMy4gR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisJaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xncGwudHh0CmRpZmYgLS1naXQgYS9saWNlbnNlcy8zd2FyZSBiL2xpY2Vuc2VzLzN3YXJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlYWFjNDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy8zd2FyZQpAQCAtMCwwICsxLDEzMCBAQAorRW5kLXVzZXIgU29mdHdhcmUgRG93bmxvYWQgTGljZW5zZSBBZ3JlZW1lbnQKKworUGxlYXNlIHJlYWQgdGhpcyBkb2N1bWVudCBjYXJlZnVsbHkgYmVmb3JlIHByb2NlZWRpbmcuIFRoaXMgU29mdHdhcmUgTGljZW5zZQorQWdyZWVtZW50ICh0aGUgQWdyZWVtZW50KSBsaWNlbnNlcyB0aGUgc29mdHdhcmUgdG8geW91IGFuZCBjb250YWlucyB3YXJyYW50eQorYW5kIGxpYWJpbGl0eSBkaXNjbGFpbWVycy4gQnkgb3BlbmluZyB0aGUgcGFja2FnZSBvciBpbnN0YWxsaW5nIG9yIHVzaW5nIHRoZQorc29mdHdhcmUsIHlvdSBhcmUgY29uZmlybWluZyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlIHNvZnR3YXJlIGFuZCBhZ3JlZWluZyB0bworYmVjb21lIGJvdW5kIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudC4KKworMS4gRGVmaW5pdGlvbnMuCisKKyhhKSBPcGVuIFNvdXJjZSBTb2Z0d2FyZSBpcyBkZWZpbmVkIGluIFNlY3Rpb24gNSBiZWxvdy4KKyhiKSAzd2FyZSBTb2Z0d2FyZSBtZWFucyB0aGUgc29mdHdhcmUgcHJvZ3JhbSBjb3ZlcmVkIGJ5IHRoaXMgQWdyZWVtZW50LCBhbmQKKyAgICBhbGwgcmVsYXRlZCB1cGRhdGVzIHN1cHBsaWVkIGJ5IDN3YXJlLgorKGMpIDN3YXJlIFByb2R1Y3QgbWVhbnMgdGhlIDN3YXJlIFNvZnR3YXJlIGFuZCBhbnkgcmVsYXRlZCBkb2N1bWVudGF0aW9uLAorCW1vZGVscyBhbmQgbXVsdGltZWRpYSBjb250ZW50IChzdWNoIGFzIGFuaW1hdGlvbiwgc291bmQgYW5kIGdyYXBoaWNzKSwgYW5kCisJYWxsIHJlbGF0ZWQgdXBkYXRlcyBzdXBwbGllZCBieSAzd2FyZS4KKworMi4gTGljZW5zZS4gVGhpcyBBZ3JlZW1lbnQgYWxsb3dzIHlvdSB0bzoKKworKGEpIFVzZSB0aGUgM3dhcmUgUHJvZHVjdCBvbiBhIHNpbmdsZSBjb21wdXRlci4KKworKGIpIE1ha2Ugb25lIGNvcHkgb2YgdGhlIDN3YXJlIFByb2R1Y3QgaW4gbWFjaGluZS1yZWFkYWJsZSBmb3JtIHNvbGVseSBmb3IKKwliYWNrdXAgcHVycG9zZXMuIFlvdSBtdXN0IHJlcHJvZHVjZSBvbiBhbnkgc3VjaCBjb3B5IGFsbCBjb3B5cmlnaHQgbm90aWNlcworCWFuZCBhbnkgb3RoZXIgcHJvcHJpZXRhcnkgbGVnZW5kcyBmb3VuZCBvbiB0aGUgb3JpZ2luYWwuCisKKyhjKSBDZXJ0YWluIHJpZ2h0cyBhcmUgbm90IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGJ1dCBtYXkgYmUKKwlhdmFpbGFibGUgdW5kZXIgYSBzZXBhcmF0ZSBhZ3JlZW1lbnQuIElmIHlvdSB3b3VsZCBsaWtlIHRvIGVudGVyIGludG8gYQorCVNpdGUgb3IgTmV0d29yayBMaWNlbnNlLCBwbGVhc2UgY29udGFjdCAzd2FyZS4KKworMy4gUmVzdHJpY3Rpb25zLgorCitZb3UgbWF5IG5vdCBtYWtlIG9yIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSAzd2FyZSBQcm9kdWN0LCBvciBlbGVjdHJvbmljYWxseQordHJhbnNmZXIgdGhlIHNvZnR3YXJlIGZyb20gb25lIGNvbXB1dGVyIHRvIGFub3RoZXIgb3ZlciBhIG5ldHdvcmsuIFlvdSBtYXkgbm90Cit1c2UgdGhlIHNvZnR3YXJlIGZyb20gbXVsdGlwbGUgbG9jYXRpb25zIG9mIGEgbXVsdGktdXNlciBvciBuZXR3b3JrZWQgc3lzdGVtIGF0Cithbnkgb25lIHRpbWUuIFRoZSBzb2Z0d2FyZSBjb250YWlucyB0cmFkZSBzZWNyZXRzIGFuZCBpbiBvcmRlciB0byBwcm90ZWN0IHRoZW0sCit5b3UgbWF5IG5vdCBkZS1jb21waWxlLCByZXZlcnNlIGVuZ2luZWVyLCBkaXNhc3NlbWJsZSwgb3Igb3RoZXJ3aXNlIHJlZHVjZSB0aGUKKzN3YXJlIFNvZnR3YXJlIHRvIGEgaHVtYW4tcGVyY2VpdmFibGUgZm9ybS4gWW91IG1heSBub3QgbW9kaWZ5LCBzZWxsLCByZW50LAordHJhbnNmZXIsIHN1YmxpY2Vuc2UsIHJlc2VsbCBmb3IgcHJvZml0LCBuZXR3b3JrLCBkaXN0cmlidXRlIG9yIGNyZWF0ZQorZGVyaXZhdGl2ZSB3b3JrcyBiYXNlZCB1cG9uIHRoZSAzd2FyZSBQcm9kdWN0IG9yIGFueSBwYXJ0IHRoZXJlb2YuIFlvdSB3aWxsIG5vdAorZXhwb3J0IG9yIHJlLWV4cG9ydCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgdGhlIDN3YXJlIFByb2R1Y3QgaW50byBhbnkgY291bnRyeQorcHJvaGliaXRlZCBieSB0aGUgVW5pdGVkIFN0YXRlcyBFeHBvcnQgQWRtaW5pc3RyYXRpb24gQWN0IGFuZCB0aGUgcmVndWxhdGlvbnMKK3RoZXJldW5kZXIuCisKKzQuIE93bmVyc2hpcC4KKworVGhlIGZvcmVnb2luZyBsaWNlbnNlIGdpdmVzIHlvdSBsaW1pdGVkIHJpZ2h0cyB0byB1c2UgdGhlIDN3YXJlIFByb2R1Y3QuIFlvdSBkbworbm90IGJlY29tZSB0aGUgb3duZXIgb2YsIGFuZCAzd2FyZSBhbmQsIGlmIGFwcGxpY2FibGUsIGFueSBsaWNlbnNvcnMsIHJldGFpbgordGl0bGUgdG8sIHRoZSAzd2FyZSBQcm9kdWN0LCBhbmQgYWxsIGNvcGllcywgcmVnYXJkbGVzcyBvZiBmb3JtIG9yIG1lZGlhLAordGhlcmVvZi4gQWxsIHJpZ2h0cyBub3Qgc3BlY2lmaWNhbGx5IGdyYW50ZWQgaW4gdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZworRmVkZXJhbCBhbmQgSW50ZXJuYXRpb25hbCBDb3B5cmlnaHRzLCBhcmUgcmVzZXJ2ZWQgYnkgM3dhcmUuCisKKzUuIE9wZW4gU291cmNlIFNvZnR3YXJlLgorCitOb3R3aXRoc3RhbmRpbmcgYW55dGhpbmcgdG8gdGhlIGNvbnRyYXJ5LCB0aGUgbGljZW5zZXMgc2V0IGZvcnRoIGluIHRoaXMKK0FncmVlbWVudCBkbyBub3QgZXh0ZW5kIHRvIHNvZnR3YXJlIG9yIG1hdGVyaWFscyB3aGljaCBtYXkgYmUgbWFkZSBhdmFpbGFibGUgYnkKKzN3YXJlLCBvciBvdGhlcndpc2Ugb2J0YWluZWQgb3IgdXNlZCBieSB5b3UsIHN1YmplY3QgdG8gYSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSAoR1BMKSwgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChMR1BMKSAoY29waWVzIG9mIHdoaWNoIGFyZQorYXZhaWxhYmxlIG9uIHRoZSB3b3JsZCB3aWRlIHdlYiBhdCBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWwpIG9yCitvdGhlciBvcGVuIHNvdXJjZSB0ZXJtcyAoY29sbGVjdGl2ZWx5LCBPcGVuIFNvdXJjZSBTb2Z0d2FyZSkuIFlvdSBhZ3JlZSB0aGF0CithbGwgT3BlbiBTb3VyY2UgU29mdHdhcmUgKGlmIGFueSkgc2hhbGwgYmUgYW5kIHNoYWxsIHJlbWFpbiBzdWJqZWN0IHRvIHRoZQordGVybXMgYW5kIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggaXQgaXMgcHJvdmlkZWQuIEl0IGlzIHVuZGVyc3Rvb2QgdGhhdCBzdWNoCit0ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgcmVxdWlyZSB0aGUgc291cmNlIGNvZGUgKGluY2x1ZGluZyBkZXJpdmF0aXZlIHdvcmtzCithbmQgY29sbGVjdGl2ZSB3b3JrcykgdG8gYmUgbWFkZSBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBmb3IgdXNlIGluIGFjY29yZGFuY2UKK3dpdGggdGhlIGFwcGxpY2FibGUgb3BlbiBzb3VyY2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgYWdyZWUgbm90IHRvIHVzZSBvcgorY29tYmluZSB0aGUgT3BlbiBTb3VyY2UgU29mdHdhcmUgd2l0aCB0aGUgM3dhcmUgU29mdHdhcmUgb3IgUHJvZHVjdCBvciBvdGhlcgoraXRlbXMgaW4gYW55IG1hbm5lciB0aGF0IHdvdWxkIHN1YmplY3QgdGhlIDN3YXJlIFNvZnR3YXJlIG9yIFByb2R1Y3Qgb3IgM3dhcmVzCitjb25maWRlbnRpYWwgaW5mb3JtYXRpb24gdG8gb3BlbiBzb3VyY2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuCisKKzYuIFRlcm0uCisKK1RoaXMgbGljZW5zZSBpcyBlZmZlY3RpdmUgdW50aWwgdGVybWluYXRlZC4gWW91IG1heSB0ZXJtaW5hdGUgaXQgYXQgYW55IHRpbWUgYnkKK2Rlc3Ryb3lpbmcgdGhlIFNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIHRvZ2V0aGVyIHdpdGggYWxsIGNvcGllcyBhbmQgbWVyZ2VkCitwb3J0aW9ucyBpbiBhbnkgZm9ybS4gSXQgd2lsbCBhbHNvIHRlcm1pbmF0ZSBpbW1lZGlhdGVseSBpZiB5b3UgZmFpbCB0byBjb21wbHkKK3dpdGggYW55IHRlcm0gb3IgY29uZGl0aW9uIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFVwb24gc3VjaCB0ZXJtaW5hdGlvbiB5b3UKK2FncmVlIHRvIGRlc3Ryb3kgdGhlIFNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uLCB0b2dldGhlciB3aXRoIGFsbCBjb3BpZXMgYW5kCittZXJnZWQgcG9ydGlvbnMgaW4gYW55IGZvcm0uCisKKzcuIERpc2NsYWltZXIgb2Ygd2FycmFudGllcyBhbmQgb2YgdGVjaG5pY2FsIHN1cHBvcnQuCisKK1RIRSAzV0FSRSBQUk9EVUNUIElTIFBST1ZJREVEIFRPIFlPVSBGUkVFIE9GIENIQVJHRSwgQU5EIE9OIEFOICJBUyBJUyIgQkFTSVMsCitXSVRIT1VUIEFOWSBURUNITklDQUwgU1VQUE9SVCBPUiBXQVJSQU5UWSBPRiBBTlkgS0lORCBGUk9NIDNXQVJFIElOQ0xVRElORywKK1dJVEhPVVQgTElNSVRBVElPTiwgQSBXQVJSQU5UWSBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gU09NRSBTVEFURVMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRAorV0FSUkFOVElFUywgU08gVEhFIEFCT1ZFIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4gWU9VIE1BWSBBTFNPIEhBVkUKK09USEVSIExFR0FMIFJJR0hUUyBXSElDSCBWQVJZIEZST00gU1RBVEUgVE8gU1RBVEUuIFRIRVNFIExJTUlUQVRJT05TIE9SCitFWENMVVNJT05TIE9GIFdBUlJBTlRJRVMgQU5EIExJQUJJTElUWSBETyBOT1QgQUZGRUNUIE9SIFBSRUpVRElDRSBUSEUgU1RBVFVUT1JZCitSSUdIVFMgT0YgQSBDT05TVU1FUjsgSS5FLiwgQSBQRVJTT04gQUNRVUlSSU5HIEdPT0RTIE9USEVSV0lTRSBUSEFOIElOIFRIRQorQ09VUlNFIE9GIEEgQlVTSU5FU1MuCisKKzguIExpbWl0YXRpb24gb2YgZGFtYWdlcy4KKworTkVJVEhFUiAzV0FSRSBOT1IgSVRTIFNVUFBMSUVSUyBTSEFMTCBCRSBMSUFCTEUgRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwKK0lOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIExPU1MgKElOQ0xVRElORyBEQU1BR0VTIEZPUiBMT1NTIE9GCitCVVNJTkVTUywgTE9TUyBPRiBQUk9GSVRTLCBPUiBUSEUgTElLRSksIFdIRVRIRVIgQkFTRUQgT04gQlJFQUNIIE9GIENPTlRSQUNULAorVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBQUk9EVUNUIExJQUJJTElUWSBPUiBPVEhFUldJU0UsIEVWRU4gSUYgM1dBUkUgT1IKK0lUUyBSRVBSRVNFTlRBVElWRVMgSEFWRSBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gU09NRQorU1RBVEVTIERPIE5PVCBBTExPVyBUSEUgTElNSVRBVElPTiBPUiBFWENMVVNJT04gT0YgTElBQklMSVRZIEZPUiBJTkNJREVOVEFMIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRISVMgTElNSVRBVElPTiBPUiBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCitUSEUgTElNSVRFRCBXQVJSQU5UWSwgRVhDTFVTSVZFIFJFTUVESUVTIEFORCBMSU1JVEVEIExJQUJJTElUWSBTRVQgRk9SVEggQUJPVkUKK0FSRSBGVU5EQU1FTlRBTCBFTEVNRU5UUyBPRiBUSEUgQkFTSVMgT0YgVEhFIEJBUkdBSU4gQkVUV0VFTiAzV0FSRSBBTkQgWU9VLiBZT1UKK0FHUkVFIFRIQVQgM1dBUkUgV09VTEQgTk9UIEJFIEFCTEUgVE8gUFJPVklERSBUSEUgM1dBUkUgU09GVFdBUkUgT04gQU4gRUNPTk9NSUMKK0JBU0lTIFdJVEhPVVQgU1VDSCBMSU1JVEFUSU9OUy4KKworOS4gRXhwb3J0LgorCitZb3UgYWNrbm93bGVkZ2UgdGhhdCB0aGUgbGF3cyBhbmQgcmVndWxhdGlvbnMgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgcmVzdHJpY3QgdGhlCitleHBvcnQgYW5kIHJlLWV4cG9ydCBvZiBTb2Z0d2FyZS4gWW91IGFncmVlIHRoYXQgeW91IHdpbGwgbm90IGV4cG9ydCBvcgorcmUtZXhwb3J0IHRoZSBTb2Z0d2FyZSBvciBtZWRpYSBpbiBhbnkgZm9ybSB3aXRob3V0IHRoZSBhcHByb3ByaWF0ZSBVbml0ZWQKK1N0YXRlcyBhbmQgZm9yZWlnbiBnb3Zlcm5tZW50IGFwcHJvdmFsLgorCisxMC5Hb3Zlcm5tZW50IGVuZCB1c2VycyAoVVNBIG9ubHkpLgorCitSRVNUUklDVEVEIFJJR0hUUyBMRUdFTkQgVGhlIDN3YXJlIFNvZnR3YXJlIGlzICJSZXN0cmljdGVkIENvbXB1dGVyIFNvZnR3YXJlLiIKK1VzZSwgZHVwbGljYXRpb24sIG9yIGRpc2Nsb3N1cmUgYnkgdGhlIFUuUy4gR292ZXJubWVudCBpcyBzdWJqZWN0IHRvCityZXN0cmljdGlvbnMgYXMgc2V0IGZvcnRoIGluIHRoaXMgQWdyZWVtZW50IGFuZCBhcyBwcm92aWRlZCBpbiBERkFSUworMjI3LjcyMDItMShhKSBhbmQgMjI3LjcyMDItMyhhKSAoMTk5NSksIERGQVJTIDI1Mi4yMjctNzAxMyAoT0NUIDE5ODgpLCBGQVIKKzEyLjIxMihhKSgxOTk1KSwgRkFSIDUyLjIyNy0xOSwgb3IgRkFSIDUyLjIyNy0xNCwgYXMgYXBwbGljYWJsZS4iIE1hbnVmYWN0dXJlcjoKKzN3YXJlLCBJbmMuLCA0NTUgV2VzdCBNYXVkZSBBdmVudWUsIFN1bm55dmFsZSwgQ2FsaWZvcm5pYSA5NDA4NS4KKworMTEuIEdlbmVyYWwuCisKK1RoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBpbnRlcm5hbCBsYXdzIG9mIHRoZSBTdGF0ZSBvZgorQ2FsaWZvcm5pYS4gVGhpcyBBZ3JlZW1lbnQgY29udGFpbnMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzCit3aXRoIHJlc3BlY3QgdG8gdGhlIHN1YmplY3QgbWF0dGVyIGhlcmVvZiwgYW5kIHN1cGVyc2VkZXMgYWxsIHByaW9yIG9yCitjb250ZW1wb3JhbmVvdXMgYWdyZWVtZW50cyBvciB1bmRlcnN0YW5kaW5ncywgd2hldGhlciBvcmFsIG9yIHdyaXR0ZW4uIFRoaXMKK0FncmVlbWVudCBtYXkgYmUgYW1lbmRlZCBvbmx5IGluIHdyaXRpbmcsIHNpZ25lZCBieSBib3RoIHBhcnRpZXMuIEFueSBhdHRlbXB0ZWQKK29yYWwgbW9kaWZpY2F0aW9uIHNoYWxsIGJlIHZvaWQgYW5kIHdpdGhvdXQgYW55IGVmZmVjdC4gQWxsIHF1ZXN0aW9ucworY29uY2VybmluZyB0aGlzIEFncmVlbWVudCBzaGFsbCBiZSBkaXJlY3RlZCB0bzogM3dhcmUsIEluYy4sIDQ1NSBXZXN0IE1hdWRlCitBdmVudWUsIFN1bm55dmFsZSwgQ2FsaWZvcm5pYSA5NDA4NS4gQXR0ZW50aW9uOiBHZW5lcmFsIENvdW5zZWwuICBEaXNrU3dpdGNoCitFbmQtVXNlciBTb2Z0d2FyZSBEb3dubG9hZCBMaWNlbnNlIEFncmVlbWVudCA2LzE0LzAyCmRpZmYgLS1naXQgYS9saWNlbnNlcy83cGx1cyBiL2xpY2Vuc2VzLzdwbHVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFiNTY3ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy83cGx1cwpAQCAtMCwwICsxLDE3IEBACisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqKiogN1BMVVMgQVNDSUktRW5jb2Rlci9EZWNvZGVyLCAoYykgQXhlbCBCYXVkYSwgREcxQkJRICoqKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKioqCisqKiogRmlsZSBjb252ZXJ0ZXIgZm9yIHRyYW5zZmVyIG9mIGFyYml0cmFyeSBiaW5hcnkgZGF0YQorKioqIHZpYSBzdG9yZSAmIGZvcndhcmQuCisqKioKKyoqKiA3UExVUyBpcyBIQU1XQVJFLiBObyBjb21tZXJjaWFsIHVzZS4gTm8gU2FsZS4gUGFzcyBvbiBvbmx5IGluIGl0J3MKKyoqKiBlbnRpcmV0eSEgVGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoZSBwcm9wZXIgZnVuY3Rpb25pbmcuIFVzZSBhdCBvd24KKyoqKiByaXNrLgorKioqCisqKiogVEFCU0laRSB3aGVuIGVkaXRpbmc6IDI7IGRvbid0IGluc2VydCByZWFsIFRBQnMgKF5JKSwgdXNlIHNwYWNlcyBpbnN0ZWFkLgorKioqCisqKiogV2hlbiBwb3J0aW5nIG9yIG1vZGlmeWluZyB0aGlzIHNvdXJjZSwgbWFrZSBTVVJFIGl0IGNhbiBzdGlsbCBiZSBjb21waWxlZAorKioqIG9uIGFsbCBzeXN0ZW1zISBEbyB0aGlzIGJ5IHVzaW5nICNpZmRlZiBkaXJlY3RpdmVzISBQbGVhc2UgbGV0IG1lIGtub3cKKyoqKiBhYm91dCB0aGUgbW9kaWZpY2F0aW9ucyBvciBwb3J0YXRpb25zLCBzbyBJIGNhbiBpbmNsdWRlIHRoZW0gaW4gdGhlIG9yaWdpLQorKioqIG5hbCA3UExVUyBzb3VyY2UuCmRpZmYgLS1naXQgYS9saWNlbnNlcy85YmFzZSBiL2xpY2Vuc2VzLzliYXNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxY2I0YjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy85YmFzZQpAQCAtMCwwICsxLDI4NyBAQAorVGhlIHJhcmUgYml0cyB0b3VjaGVkIGJ5IEFuc2VsbSBSLiBHYXJiZSBhcmUgdW5kZXIgZm9sbG93aW5nIExJQ0VOU0U6CisKK01JVC9YIENvbnNvcnRpdW0gTGljZW5zZQorCivCqSAyMDA1LTIwMTAgQW5zZWxtIFIgR2FyYmUgPGFuc2VsbUBnYXJiZS51cz4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKK2NvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCit0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCit0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKK2FuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSAKK1NvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlIGluY2x1ZGVkIGluIAorYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuIAorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiAKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCAKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCAKK1RIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIAorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgCitGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIAorREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBQbGFuIDkgc29mdHdhcmUgaXMgcHJvdmlkZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorTHVjZW50IFB1YmxpYyBMaWNlbnNlLCBWZXJzaW9uIDEuMDIsIHJlcHJvZHVjZWQgYmVsb3csCit3aXRoIHRoZSBmb2xsb3dpbmcgbm90YWJsZSBleGNlcHRpb25zOgorCisxLiBObyByaWdodCBpcyBncmFudGVkIHRvIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIG9mIG9yCisgICB0byByZWRpc3RyaWJ1dGUgKG90aGVyIHRoYW4gd2l0aCB0aGUgUGxhbiA5IE9wZXJhdGluZyBTeXN0ZW0pCisgICB0aGUgc2NyZWVuIGltcHJpbnRlciBmb250cyBpZGVudGlmaWVkIGluIHN1YmRpcmVjdG9yeQorICAgL2xpYi9mb250L2JpdC9sdWNpZGEgYW5kIHByaW50ZXIgZm9udHMgKEx1Y2lkYSBTYW5zIFVuaWNvZGUsIEx1Y2lkYQorICAgU2FucyBJdGFsaWMsIEx1Y2lkYSBTYW5zIERlbWlib2xkLCBMdWNpZGEgVHlwZXdyaXRlciwgTHVjaWRhIFNhbnMKKyAgIFR5cGV3cml0ZXI4MyksIGlkZW50aWZpZWQgaW4gc3ViZGlyZWN0b3J5IC9zeXMvbGliL3Bvc3RzY3JpcHQvZm9udC4KKyAgIFRoZXNlIGRpcmVjdG9yaWVzIGNvbnRhaW4gbWF0ZXJpYWwgY29weXJpZ2h0cyBieSBCJkggSW5jLiBhbmQgWSZZIEluYy4KKworMi4gVGhlIHByaW50ZXIgZm9udHMgaWRlbnRpZmllZCBpbiBzdWJkaXJlY3RvcnkgL3N5cy9saWIvZ2hvc3RzY3JpcHQvZm9udAorICAgYXJlIHN1YmplY3QgdG8gdGhlIEdOVSBHUEwsIHJlcHJvZHVjZWQgaW4gdGhlIGZpbGUgL0xJQ0VOU0UuZ3BsLgorCiszLiBUaGUgZ2hvc3RzY3JpcHQgcHJvZ3JhbSBpbiB0aGUgc3ViZGlyZWN0b3J5IC9zeXMvc3JjL2NtZC9ncyBpcworICAgY292ZXJlZCBieSB0aGUgQWxhZGRpbiBGcmVlIFB1YmxpYyBMaWNlbnNlLCByZXByb2R1Y2VkIGluIHRoZSBmaWxlCisgICAvTElDRU5TRS5hZnBsLgorCitPdGhlciwgbGVzcyBub3RhYmxlIGV4Y2VwdGlvbnMgYXJlIG1hcmtlZCBpbiB0aGUgZmlsZSB0cmVlIHdpdGgKK0NPUFlJTkcsIENPUFlSSUdIVCwgb3IgTElDRU5TRSBmaWxlcy4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitMdWNlbnQgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAyCisKK1RIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBQVUJMSUMKK0xJQ0VOU0UgKCJBR1JFRU1FTlQiKS4gQU5ZIFVTRSwgUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUKK1BST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRSBPRiBUSElTIEFHUkVFTUVOVC4KKworMS4gREVGSU5JVElPTlMKKworIkNvbnRyaWJ1dGlvbiIgbWVhbnM6CisKKyAgYS4gaW4gdGhlIGNhc2Ugb2YgTHVjZW50IFRlY2hub2xvZ2llcyBJbmMuICgiTFVDRU5UIiksIHRoZSBPcmlnaW5hbAorICAgICBQcm9ncmFtLCBhbmQKKyAgYi4gaW4gdGhlIGNhc2Ugb2YgZWFjaCBDb250cmlidXRvciwKKworICAgICBpLiBjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQKKyAgICBpaS4gYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOworCisgICAgd2hlcmUgc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gd2VyZSBhZGRlZCB0byB0aGUKKyAgICBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24gc3VjaAorICAgIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLCBhbmQgdGhlIENvbnRyaWJ1dG9yIGV4cGxpY2l0bHkgY29uc2VudHMsIGluCisgICAgYWNjb3JkYW5jZSB3aXRoIFNlY3Rpb24gM0MsIHRvIGNoYXJhY3Rlcml6YXRpb24gb2YgdGhlIGNoYW5nZXMgYW5kL29yCisgICAgYWRkaXRpb25zIGFzIENvbnRyaWJ1dGlvbnMuCisKKyJDb250cmlidXRvciIgbWVhbnMgTFVDRU5UIGFuZCBhbnkgb3RoZXIgZW50aXR5IHRoYXQgaGFzIENvbnRyaWJ1dGVkIGEKK0NvbnRyaWJ1dGlvbiB0byB0aGUgUHJvZ3JhbS4KKworIkRpc3RyaWJ1dG9yIiBtZWFucyBhIFJlY2lwaWVudCB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLAorbW9kaWZpY2F0aW9ucyB0byB0aGUgUHJvZ3JhbSwgb3IgYW55IHBhcnQgdGhlcmVvZi4KKworIkxpY2Vuc2VkIFBhdGVudHMiIG1lYW4gcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3IKK3doaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZSBvciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24KK2Fsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4KKworIk9yaWdpbmFsIFByb2dyYW0iIG1lYW5zIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBzb2Z0d2FyZQorYWNjb21wYW55aW5nIHRoaXMgQWdyZWVtZW50IGFzIHJlbGVhc2VkIGJ5IExVQ0VOVCwgaW5jbHVkaW5nIHNvdXJjZQorY29kZSwgb2JqZWN0IGNvZGUgYW5kIGRvY3VtZW50YXRpb24sIGlmIGFueS4KKworIlByb2dyYW0iIG1lYW5zIHRoZSBPcmlnaW5hbCBQcm9ncmFtIGFuZCBDb250cmlidXRpb25zIG9yIGFueSBwYXJ0Cit0aGVyZW9mCisKKyJSZWNpcGllbnQiIG1lYW5zIGFueW9uZSB3aG8gcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcworQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy4KKworMi4gR1JBTlQgT0YgUklHSFRTCisKKyBhLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkKKyAgICBncmFudHMgUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0CisgICAgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkgZGlzcGxheSwKKyAgICBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaAorICAgIENvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZAorICAgIG9iamVjdCBjb2RlIGZvcm0uCisgICAgCisgYi4gU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5CisgICAgZ3JhbnRzIFJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIHBhdGVudAorICAgIGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsCisgICAgaW1wb3J0IGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZgorICAgIGFueSwgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoZSBwYXRlbnQgbGljZW5zZSBncmFudGVkCisgICAgYnkgYSBDb250cmlidXRvciBzaGFsbCBhbHNvIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUKKyAgICBDb250cmlidXRpb24gb2YgdGhhdCBDb250cmlidXRvciBhbmQgdGhlIFByb2dyYW0gaWYsIGF0IHRoZSB0aW1lIHRoZQorICAgIENvbnRyaWJ1dGlvbiBpcyBhZGRlZCBieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlCisgICAgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uIHRvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkCisgICAgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIGdyYW50ZWQgYnkgYSBDb250cmlidXRvciBzaGFsbCBub3QgYXBwbHkKKyAgICB0byAoaSkgYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24sIG5vciB0bworICAgIChpaSkgQ29udHJpYnV0aW9ucyBvZiBvdGhlciBDb250cmlidXRvcnMuIE5vIGhhcmR3YXJlIHBlciBzZSBpcworICAgIGxpY2Vuc2VkIGhlcmV1bmRlci4KKyAgICAKKyBjLiBSZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUKKyAgICBsaWNlbnNlcyB0byBpdHMgQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZQorICAgIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvciB0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZQorICAgIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2gKKyAgICBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQgZm9yIGNsYWltcyBicm91Z2h0IGJ5CisgICAgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cworICAgIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZCBsaWNlbnNlcworICAgIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5CisgICAgdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IKKyAgICBleGFtcGxlLCBpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93CisgICAgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5CisgICAgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS4KKworIGQuIEVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQKKyAgICBjb3B5cmlnaHQgcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodAorICAgIGxpY2Vuc2Ugc2V0IGZvcnRoIGluIHRoaXMgQWdyZWVtZW50LgorCiszLiBSRVFVSVJFTUVOVFMKKworQS4gRGlzdHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGluIGFueSBmb3JtIHVuZGVyCit0aGlzIEFncmVlbWVudCBvciB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0OgorCisgYS4gaXQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7CisKKyBiLiBpZiB0aGUgUHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiBzb3VyY2UgY29kZSBvciBvdGhlciB0YW5naWJsZQorICAgIGZvcm0sIGEgY29weSBvZiB0aGlzIEFncmVlbWVudCBvciBEaXN0cmlidXRvcidzIG93biBsaWNlbnNlIGFncmVlbWVudAorICAgIGlzIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtOyBhbmQKKworIGMuIGlmIGRpc3RyaWJ1dGVkIHVuZGVyIERpc3RyaWJ1dG9yJ3Mgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBzdWNoCisgICAgbGljZW5zZSBhZ3JlZW1lbnQ6CisKKyAgICAgIGkuIGVmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgd2FycmFudGllcworICAgICAgICAgYW5kIGNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yCisgICAgICAgICBjb25kaXRpb25zIG9mIHRpdGxlIGFuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yCisgICAgICAgICBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2U7CisgICAgIGlpLiBlZmZlY3RpdmVseSBleGNsdWRlcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5CisgICAgICAgICBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kCisgICAgICAgICBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2ggYXMgbG9zdCBwcm9maXRzOyBhbmQKKyAgICBpaWkuIHN0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZQorICAgICAgICAgb2ZmZXJlZCBieSB0aGF0IENvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5LgorCitCLiBFYWNoIERpc3RyaWJ1dG9yIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGluIGEgY29uc3BpY3VvdXMKKyAgIGxvY2F0aW9uIGluIHRoZSBQcm9ncmFtOgorCisgICBDb3B5cmlnaHQgKEMpIDIwMDMsIEx1Y2VudCBUZWNobm9sb2dpZXMgSW5jLiBhbmQgb3RoZXJzLiBBbGwgUmlnaHRzCisgICBSZXNlcnZlZC4KKworQy4gSW4gYWRkaXRpb24sIGVhY2ggQ29udHJpYnV0b3IgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlCitvcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24gaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cworc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uCitBbHNvLCBlYWNoIENvbnRyaWJ1dG9yIG11c3QgYWdyZWUgdGhhdCB0aGUgYWRkaXRpb25zIGFuZC9vciBjaGFuZ2VzCithcmUgaW50ZW5kZWQgdG8gYmUgYSBDb250cmlidXRpb24uIE9uY2UgYSBDb250cmlidXRpb24gaXMgY29udHJpYnV0ZWQsCitpdCBtYXkgbm90IHRoZXJlYWZ0ZXIgYmUgcmV2b2tlZC4KKworNC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT04KKworQ29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5IGFjY2VwdCBjZXJ0YWluCityZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzIGFuZCB0aGUKK2xpa2UuIFdoaWxlIHRoaXMgbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZQorb2YgdGhlIFByb2dyYW0sIHRoZSBEaXN0cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYQorY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdAorY3JlYXRlIHBvdGVudGlhbCBsaWFiaWxpdHkgZm9yIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhCitEaXN0cmlidXRvciBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywKK3N1Y2ggRGlzdHJpYnV0b3IgKCJDb21tZXJjaWFsIERpc3RyaWJ1dG9yIikgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQKK2FuZCBpbmRlbW5pZnkgZXZlcnkgQ29udHJpYnV0b3IgKCJJbmRlbW5pZmllZCBDb250cmlidXRvciIpIGFnYWluc3QKK2FueSBsb3NzZXMsIGRhbWFnZXMgYW5kIGNvc3RzIChjb2xsZWN0aXZlbHkiTG9zc2VzIikgYXJpc2luZyBmcm9tCitjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlciBsZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eQorYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8gdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMKK29yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgRGlzdHJpYnV0b3IgaW4gY29ubmVjdGlvbiB3aXRoIGl0cworZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLiBUaGUKK29ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKK3JlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LgorSW4gb3JkZXIgdG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkKK25vdGlmeSB0aGUgQ29tbWVyY2lhbCBEaXN0cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKQorYWxsb3cgdGhlIENvbW1lcmNpYWwgRGlzdHJpYnV0b3IgdG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZQorQ29tbWVyY2lhbCBEaXN0cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kIGFueSByZWxhdGVkIHNldHRsZW1lbnQKK25lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZSBpbiBhbnkgc3VjaAorY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLgorCitGb3IgZXhhbXBsZSwgYSBEaXN0cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAorcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IERpc3RyaWJ1dG9yIGlzIHRoZW4gYSBDb21tZXJjaWFsCitEaXN0cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIERpc3RyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKK2NsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlCitjbGFpbXMgYW5kIHdhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBEaXN0cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5CithbG9uZS4gVW5kZXIgdGhpcyBzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBEaXN0cmlidXRvciB3b3VsZCBoYXZlIHRvCitkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlIHBlcmZvcm1hbmNlCitjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhIGNvdXJ0IHJlcXVpcmVzIGFueSBDb250cmlidXRvciB0byBwYXkKK2FueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUgQ29tbWVyY2lhbCBEaXN0cmlidXRvciBtdXN0IHBheSB0aG9zZQorZGFtYWdlcy4KKworNS4gTk8gV0FSUkFOVFkKKworRVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTCitQUk9WSURFRCBPTiBBTiJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWQorS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZCitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWQorT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseQorcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kCitkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMKK2V4ZXJjaXNlIG9mIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bwordGhlIHJpc2tzIGFuZCBjb3N0cyBvZiBwcm9ncmFtIGVycm9ycywgY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUKK2xhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yIGVxdWlwbWVudCwgYW5kCit1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4KKworNi4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFkKKworRVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBBR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUgorQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORworV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUgorRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQKK0hFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIEVYUE9SVCBDT05UUk9MCisKK1JlY2lwaWVudCBhZ3JlZXMgdGhhdCBSZWNpcGllbnQgYWxvbmUgaXMgcmVzcG9uc2libGUgZm9yIGNvbXBsaWFuY2UKK3dpdGggdGhlIFVuaXRlZCBTdGF0ZXMgZXhwb3J0IGFkbWluaXN0cmF0aW9uIHJlZ3VsYXRpb25zIChhbmQgdGhlCitleHBvcnQgY29udHJvbCBsYXdzIGFuZCByZWd1bGF0aW9uIG9mIGFueSBvdGhlciBjb3VudHJpZXMpLgorCis4LiBHRU5FUkFMCisKK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YKK3RoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dCBmdXJ0aGVyCithY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKK21pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KKworSWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhIENvbnRyaWJ1dG9yIHdpdGgKK3Jlc3BlY3QgdG8gYSBwYXRlbnQgYXBwbGljYWJsZSB0byBzb2Z0d2FyZSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IKK2NvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpLCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMgZ3JhbnRlZCBieSB0aGF0CitDb250cmlidXRvciB0byBzdWNoIFJlY2lwaWVudCB1bmRlciB0aGlzIEFncmVlbWVudCBzaGFsbCB0ZXJtaW5hdGUgYXMKK29mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gSW4gYWRkaXRpb24sIGlmIFJlY2lwaWVudAoraW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhCitjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtCitpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aCBvdGhlciBzb2Z0d2FyZSBvcgoraGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoIFJlY2lwaWVudCdzCityaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlIHN1Y2gKK2xpdGlnYXRpb24gaXMgZmlsZWQuCisKK0FsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgdGVybWluYXRlIGlmIGl0CitmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yIGNvbmRpdGlvbnMgb2YgdGhpcworQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUgcGVyaW9kIG9mCit0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCityaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZQorYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuCitIb3dldmVyLCBSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzCitncmFudGVkIGJ5IFJlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQKK3N1cnZpdmUuCisKK0xVQ0VOVCBtYXkgcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mIHRoaXMKK0FncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCBuZXcgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUKK2dpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtIChpbmNsdWRpbmcKK0NvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZiB0aGUKK0FncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldwordmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvCitkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcKK3ZlcnNpb24uIE5vIG9uZSBvdGhlciB0aGFuIExVQ0VOVCBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzCitBZ3JlZW1lbnQuIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIFNlY3Rpb25zIDIoYSkgYW5kIDIoYikgYWJvdmUsCitSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkKK29mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlciBleHByZXNzbHksIGJ5CitpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdAorZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLgorCitUaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgTmV3IFlvcmsgYW5kCit0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYS4gTm8KK3BhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcyBBZ3JlZW1lbnQKK21vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcworaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLgorCmRpZmYgLS1naXQgYS9saWNlbnNlcy85d20gYi9saWNlbnNlcy85d20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzYyZTU3MgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzLzl3bQpAQCAtMCwwICsxLDE5IEBACis5d20gaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIGlzIENvcHlyaWdodCAoYykgMTk5NC0xOTk2ICBieSAgRGF2aWQgIEhvZ2FuLgorUGVybWlzc2lvbiAgaXMgIGdyYW50ZWQgdG8gYWxsIHNlbnRpZW50IGJlaW5ncyB0byB1c2UgdGhpcyBzb2Z0d2FyZSwgdG8KK21ha2UgY29waWVzIG9mIGl0LCBhbmQgdG8gZGlzdHJpYnV0ZSB0aG9zZSBjb3BpZXMsIHByb3ZpZGVkIHRoYXQ6CisKKygxKSB0aGUgY29weXJpZ2h0IGFuZCBsaWNlbmNlIG5vdGljZXMgYXJlIGxlZnQgaW50YWN0CisKKygyKSB0aGUgcmVjaXBpZW50cyBhcmUgYXdhcmUgdGhhdCBpdCBpcyBmcmVlIHNvZnR3YXJlCisKKygzKSBhbnkgdW5hcHByb3ZlZCBjaGFuZ2VzIGluIGZ1bmN0aW9uYWxpdHkgYXJlIGVpdGhlcgorCisoaSkgb25seSBkaXN0cmlidXRlZCBhcyBwYXRjaGVzCisKK29yIChpaSkgZGlzdHJpYnV0ZWQgYXMgYSBuZXcgcHJvZ3JhbSB3aGljaCBpcyBub3QgY2FsbGVkIDl3bSBhbmQgIHdob3NlCitkb2N1bWVudGF0aW9uIGdpdmVzIGNyZWRpdCB3aGVyZSBpdCBpcyBkdWUKKworKDQpICB0aGUgYXV0aG9yIGlzIG5vdCBoZWxkIHJlc3BvbnNpYmxlIGZvciBhbnkgZGVmZWN0cyBvciBzaG9ydGNvbWluZ3MKK2luIHRoZSBzb2Z0d2FyZSwgb3IgZGFtYWdlcyBjYXVzZWQgYnkgaXQuCisKK1RoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIHNvZnR3YXJlLiAgSGF2ZSBhIG5pY2UgZGF5LgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvQUNNTCBiL2xpY2Vuc2VzL0FDTUwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RjMjE0ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0FDTUwKQEAgLTAsMCArMSwxODYgQEAKK0xJQ0VOU0UgQUdSRUVNRU5UCitBTUQgQ09SRSBNQVRIIExJQlJBUlkKKworSU1QT1JUQU5UOiBUaGlzIGlzIGEgbGVnYWwgYWdyZWVtZW50ICgiQWdyZWVtZW50IikgYmV0d2VlbiB5b3UsIGVpdGhlcgorYXMgYW4gaW5kaXZpZHVhbCBvciBhbiBlbnRpdHksICh0aGUgIlVTRVIiKSBhbmQgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywKK0luYy4gKCJBTUQiKS4gIEJ5IGxvYWRpbmcgdGhlIHNvZnR3YXJlIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YKKygiU29mdHdhcmUiKSwgYW5kIGFueSByZWxhdGVkIGRvY3VtZW50YXRpb24gKCJEb2N1bWVudGF0aW9uIiksIFVTRVIKK2FncmVlcyB0byBhbGwgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LiAgQWRkaXRpb25hbGx5LCBVU0VSCityZW1haW5zIHN1YmplY3QgdG8gdGhlIG9yaWdpbmFsIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIGFueSBvdGhlcgorc29mdHdhcmUgbGljZW5zZSBhZ3JlZW1lbnRzIGVudGVyZWQgaW50byBieSBVU0VSIGFuZCBhIHRoaXJkIHBhcnR5LgorVVNFUiBpcyByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB1c2Ugb2YgdGhlIFNvZnR3YXJlIHByb3ZpZGVkIGJ5CitBTUQgaXMgbm90IGluIHZpb2xhdGlvbiBvZiBhbnkgc3VjaCBhZ3JlZW1lbnQuCisKK0RPIE5PVCBMT0FEIFRISVMgU09GVFdBUkUgVU5USUwgWU9VIEhBVkUgQ0FSRUZVTExZIFJFQUQKK0FORCBBR1JFRUQgVE8gVEhFIEZPTExPV0lORyBURVJNUyBBTkQgQ09ORElUSU9OUy4KK0xPQURJTkcgT1IgT1RIRVJXSVNFIFVTSU5HIFRIRSBTT0ZUV0FSRSBPUiBET0NVTUVOVEFUSU9OCitDT05TVElUVVRFUyBBQ0NFUFRBTkNFIE9GIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBTRVQKK0ZPUlRIIElOIFRISVMgQUdSRUVNRU5ULiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUKK1RFUk1TIE9GIFRISVMgQUdSRUVNRU5ULCBETyBOT1QgSU5TVEFMTCBPUiBVU0UgVEhJUworU09GVFdBUkUsIERPQ1VNRU5UQVRJT04gT1IgQU5ZIFBPUlRJT04gVEhFUkVPRi4KKworTk9XIFRIRVJFRk9SRSwgdGhlIHBhcnRpZXMgaGVyZXRvIGFncmVlIGFzIGZvbGxvd3M6CisKKzEuIERlZmluaXRpb25zLgorICBhLiAiVXBkYXRlcyIgc2hhbGwgbWVhbiB1cGRhdGVkIHZlcnNpb25zIG9mIHRoZSBTb2Z0d2FyZSBvcgorICAgICBEb2N1bWVudGF0aW9uIHRoYXQgQU1EIG1heSBwcm92aWRlLCBpbiBpdHMgc29sZSBkaXNjcmV0aW9uLCB0byBVU0VSCisgICAgIGZyb20gdGltZSB0byB0aW1lIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudC4KKyAgYi4gIkV4ZWN1dGFibGUgQ29kZSIgc2hhbGwgbWVhbiBhbGwgc29mdHdhcmUgaW4gYSBtYWNoaW5lLXJlYWRhYmxlLAorICAgICBiaW5hcnkgb3IgZXhlY3V0YWJsZSBmb3JtLgorICBjLiAiU291cmNlIENvZGUiIHNoYWxsIG1lYW4gYWxsIHNvZnR3YXJlIGluIGh1bWFuLXJlYWRhYmxlIG9yIHNvdXJjZSBmb3JtLgorICBkLiAiTGljZW5zZWQgTWF0ZXJpYWxzIiBzaGFsbCBtZWFuIHRoZSBTb3VyY2UgQ29kZSBhbmQgRXhlY3V0YWJsZSBDb2RlCisgICAgIG9mIHRoZSBTb2Z0d2FyZSBhcyBwcm92aWRlZCB0byBVU0VSIGJ5IEFNRCwgaW5jbHVkaW5nIERvY3VtZW50YXRpb24gYW5kCisgICAgIFVwZGF0ZXMuCisgIGUuICJFZmZlY3RpdmUgRGF0ZSIgc2hhbGwgbWVhbiBhIGRhdGUgdXBvbiB3aGljaCBVU0VSIHVzZXMgdGhlIFNvZnR3YXJlCisgICAgIG9yIGFjY2Vzc2VzIHRoZSBEb2N1bWVudGF0aW9uLgorCisyLiBMaWNlbnNlLgorICBhLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgQU1EIGhlcmVieSBncmFudHMgdG8KKyAgICAgVVNFUiBhIGxpbWl0ZWQsIG5vbi1leGNsdXNpdmUsIG5vbi10cmFuc2ZlcmFibGUsIHJveWFsdHktZnJlZQorICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byBvbmx5IHVzZSB0aGUgTGljZW5zZWQgTWF0ZXJpYWxzIGZvciB0aGUKKyAgICAgcHVycG9zZSBvZiBleGVjdXRpbmcgc29mdHdhcmUgb24gQU1ENjQgcHJvY2Vzc29yLWJhc2VkIGNvbXB1dGVyCisgICAgIHN5c3RlbXMgYW5kIGZvciBldmFsdWF0aW5nIHRoZSBwZXJmb3JtYW5jZSBvZiBzdWNoIHNvZnR3YXJlIG9uCisgICAgIEFNRDY0IHByb2Nlc3Nvci1iYXNlZCBjb21wdXRlciBzeXN0ZW1zLiBFeGNlcHQgZm9yIHRoZSBsaW1pdGVkCisgICAgIGxpY2Vuc2VzIGdyYW50ZWQgaW4gdGhpcyBTZWN0aW9uIDIuYS4sIFVTRVIgc2hhbGwgaGF2ZSBubyBvdGhlcgorICAgICByaWdodHMgaW4gdGhlIExpY2Vuc2VkIE1hdGVyaWFscywgd2hldGhlciBleHByZXNzLCBpbXBsaWVkLAorICAgICBhcmlzaW5nIGJ5IGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gSWYgVVNFUiBkZXNpcmVzIHRvIGRpc3RyaWJ1dGUKKyAgICAgYW55IG9mIHRoZSBMaWNlbnNlZCBNYXRlcmlhbHMsIFVTRVIgc2hhbGwgZW50ZXIgaW50byBhIHNlcGFyYXRlCisgICAgIHdyaXR0ZW4gYWdyZWVtZW50IHdpdGggQU1ELgorICBiLiBXaXRob3V0IGxpbWl0aW5nIFNlY3Rpb24gMi5hLiBhYm92ZSwgVVNFUiBkb2VzIE5PVCBoYXZlIHRoZSByaWdodDoKKyAgICAgIChpKSB0byBtb2RpZnksIGFkYXB0LCB0cmFuc2xhdGUsIG9yIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIGJhc2VkCisgICAgICAgICAgdXBvbiB0aGUgTGljZW5zZWQgTWF0ZXJpYWxzIG9yIGFueSBwYXJ0IHRoZXJlb2Y7IG9yCisgICAgIChpaSkgdG8gbW9kaWZ5LCBkaXNhc3NlbWJsZSwgcmV2ZXJzZSBlbmdpbmVlciwgZGVjb21waWxlLCBvciBvdGhlcndpc2UKKyAgICAgICAgICByZWR1Y2UgdG8gc291cmNlIGNvZGUgb3IgYW55IGh1bWFuIHBlcmNlaXZhYmxlIGZvcm0gYW55IHBhcnQgb2YgdGhlCisgICAgICAgICAgU29mdHdhcmUgb3IgVXBkYXRlcyB0aGVyZXRvIHRoYXQgYXJlIG5vdCBhbHJlYWR5IFNvdXJjZSBDb2RlOyBvcgorICAgIChpaWkpIHRvIHJlbW92ZSBwcm9wcmlldGFyeSBsZWdlbmRzIGluIHRoZSBMaWNlbnNlZCBNYXRlcmlhbHMsIGluY2x1ZGluZworICAgICAgICAgIGJ1dCBub3QgbGltaXRlZCB0byBsZWdlbmRzIHRoYXQgcHJvdGVjdCBBTUQncyBwYXRlbnQsIHRyYWRlIHNlY3JldCwKKyAgICAgICAgICBjb3B5cmlnaHQgYW5kIG90aGVyIHByb3ByaWV0YXJ5IHJpZ2h0cyBpbiB0aGUgTGljZW5zZWQgTWF0ZXJpYWxzLgorCiszLiBPd25lcnNoaXAgYW5kIENvcHlyaWdodCBvZiBNYXRlcmlhbC4KKyAgVGhlIExpY2Vuc2VkIE1hdGVyaWFscyBhcmUgb3duZWQgYnkgQU1EIGFuZCBpdHMgbGljZW5zb3JzIGFuZCBhcmUKKyAgcHJvdGVjdGVkIGJ5IFVuaXRlZCBTdGF0ZXMgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3MgYW5kIGludGVybmF0aW9uYWwKKyAgdHJlYXR5IHByb3Zpc2lvbnMuICBFeGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIGhlcmVpbiwgQU1EIGRvZXMgbm90CisgIGdyYW50IGFueSBleHByZXNzIG9yIGltcGxpZWQgcmlnaHQgdG8gVVNFUiB1bmRlciBBTUQgcGF0ZW50cywKKyAgY29weXJpZ2h0cywgdHJhZGVtYXJrcywgb3IgdHJhZGUgc2VjcmV0IGluZm9ybWF0aW9uLgorCis0LiBPYmxpZ2F0aW9ucyBvZiB0aGUgUGFydGllcy4KKyAgYS4gTGljZW5zZWQgTWF0ZXJpYWxzLgorICAgICBVU0VSIG1heSB1c2UgdGhlIExpY2Vuc2VkIE1hdGVyaWFscyBvbmx5IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMKKyAgICAgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQuCisgIGIuIEZlZWRiYWNrLgorICAgICBEdXJpbmcgdGhlIHRlcm0gb2YgdGhpcyBBZ3JlZW1lbnQsIFVTRVIgbWF5IGluZm9ybSBBTUQgb2YgYWxsIGVycm9ycywKKyAgICAgZGlmZmljdWx0aWVzIG9yIG90aGVyIHByb2JsZW1zIHdpdGggdGhlIExpY2Vuc2VkIE1hdGVyaWFscywgY29sbGVjdGl2ZWx5CisgICAgIHJlZmVycmVkIHRvIGFzICJmZWVkYmFjayIuIEFNRCBtYXkgdXNlIGZvciBhbnkgcHVycG9zZSB3aGF0c29ldmVyLCBhbnkKKyAgICAgZmVlZGJhY2sgVVNFUiBwcm92aWRlcyByZWdhcmRpbmcgdGhlIExpY2Vuc2VkIE1hdGVyaWFscywgaW5jbHVkaW5nLCBidXQKKyAgICAgbm90IGxpbWl0ZWQgdG8sIHVzYWJpbGl0eSwgYnVnIHJlcG9ydHMgYW5kIHRlc3QgcmVwb3J0cy4KKyAgYy4gSXNzdWFuY2Ugb2YgU29mdHdhcmUuCisgICAgIEFNRCBzaGFsbCBub3QgYmUgb2JsaWdhdGVkIHRvIG1ha2UgdGhlIExpY2Vuc2VkIE1hdGVyaWFscyBwdWJsaWNseQorICAgICBhdmFpbGFibGUsIGluIHdob2xlIG9yIGluIHBhcnQuCisgIGQuIFN1cHBvcnQuCisgICAgIEFNRCBtYXksIGluIGl0cyBzb2xlIGRpc2NyZXRpb24sIHByb3ZpZGUgdG8gVVNFUiBVcGRhdGVzIHRvIHRoZSBTb2Z0d2FyZQorICAgICBhbmQgRG9jdW1lbnRhdGlvbiwgYW5kIHN1Y2ggVXBkYXRlcyB3aWxsIGJlIGNvdmVyZWQgdW5kZXIgdGhpcworICAgICBBZ3JlZW1lbnQuICBBTUQgaXMgdW5kZXIgbm8gb2JsaWdhdGlvbiB0byBwcm92aWRlIFVTRVIgd2l0aCBhbnkgVXBkYXRlcywKKyAgICAgc3VwcG9ydCwgb3IgbWFpbnRlbmFuY2Ugb2YgdGhlIFNvZnR3YXJlIG9yIERvY3VtZW50YXRpb24uCisKKzUuIERpc2NsYWltZXIgb2YgV2FycmFudHkuCisgIEFNRCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBBQk9VVCBUSEUKKyAgUEVSRk9STUFOQ0UgT0YgVEhFIExJQ0VOU0VEIE1BVEVSSUFMUyBJTiBBTlkgV0FZLgorICBGVVJUSEVSTU9SRSwgTk8gV0FSUkFOVElFUywgRVhQUkVTUyBPUiBJTVBMSUVELCBBUkUgTUFERQorICBXSVRIIFJFU1BFQ1QgVE8gVEhFIExJQ0VOU0VEIE1BVEVSSUFMUywgSU5DTFVESU5HIEJVVCBOT1QKKyAgTElNSVRFRCBUTywgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICBQVVJQT1NFLCBBTlkgV0FSUkFOVElFUyBUSEFUIE1BWSBBUklTRSBGUk9NIFVTQUdFIE9GCisgIFRSQURFIE9SIENPVVJTRSBPRiBERUFMSU5HLCBBTkQgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBPRgorICBUSVRMRSBPUiBOT04tSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgQU1EIEJFCisgIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBFWFBFTlNFUywgTE9TVAorICBQUk9GSVRTLCBMT1NUIFNBVklOR1MsIEJVU0lORVNTIElOVEVSUlVQVElPTiwgTE9TVAorICBCVVNJTkVTUyBJTkZPUk1BVElPTiwgT1IgQU5ZIE9USEVSIERBTUFHRVMgQVJJU0lORyBPVVQgT0YKKyAgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBTT0ZUV0FSRSwgRVZFTiBJRiBBTUQgSEFTCisgIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiAgVVNFUgorICBhY2tub3dsZWRnZXMgdGhhdCBpdHMgdXNlIG9mIHRoZSBTb2Z0d2FyZSB3aXRob3V0IGNoYXJnZQorICByZWZsZWN0cyB0aGlzIGFsbG9jYXRpb24gb2Ygcmlzay4gIFNvbWUgc3RhdGVzIG9yCisgIGp1cmlzZGljdGlvbnMgZG8gbm90IGFsbG93IHRoZSBleGNsdXNpb24gb3IgbGltaXRhdGlvbiBvZgorICBpbmNpZGVudGFsLCBjb25zZXF1ZW50aWFsIG9yIHNwZWNpYWwgZGFtYWdlcywgb3IgdGhlCisgIGV4Y2x1c2lvbiBvciBpbXBsaWVkIHdhcnJhbnRpZXMsIGFuZCB0aGVyZWZvcmUsIHRoZSBhYm92ZQorICBsaW1pdGF0aW9ucyBtaWdodCBub3QgYXBwbHkgdG8gVVNFUi4gIEluIGFkZGl0aW9uIHRvIHRoZQorICBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMgc2V0IGZvcnRoIGFib3ZlLCBpdCBpcworICB1bmRlcnN0b29kIHRoYXQgQU1EIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBjb25jZXJuaW5nCisgIHRoZSBjb21wbGV0ZW5lc3MsIGFjY3VyYWN5IG9yIG9wZXJhdGlvbiBvZiB0aGUgTGljZW5zZWQKKyAgTWF0ZXJpYWxzLiAgRnVydGhlcm1vcmUsIFVTRVIgc2hhbGwgaGF2ZSB0aGUgc29sZQorICByZXNwb25zaWJpbGl0eSBmb3IgYWRlcXVhdGUgcHJvdGVjdGlvbiBhbmQgYmFja3VwIG9mIGl0cworICBkYXRhIHVzZWQgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBsaWNlbnNlZCBtYXRlcmlhbHMsIGFuZAorICBVU0VSIHNoYWxsIG5vdCBtYWtlIGFueSBjbGFpbSBhZ2FpbnN0IEFNRCBmb3IgbG9zdCBkYXRhLAorICByZS1ydW4gdGltZSwgaW5hY2N1cmF0ZSBpbnB1dCwgd29yayBkZWxheXMgb3IgbG9zdAorICBwcm9maXRzIHJlc3VsdGluZyBmcm9tIHRoZSB1c2Ugb2YgdGhlIExpY2Vuc2VkIE1hdGVyaWFscy4KKworNi4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuCisgIElmLCBub3R3aXRoc3RhbmRpbmcgdGhlIHByb3Zpc2lvbnMgb2YgdGhpcyBBZ3JlZW1lbnQsIEFNRCBzaGFsbCBhdCBhbnkKKyAgdGltZSBoYXZlIGFueSBsaWFiaWxpdHkgYXJpc2luZyBmcm9tIG9yIGJ5IHZpcnR1ZSBvZiB0aGlzIEFncmVlbWVudCwKKyAgd2hldGhlciBkdWUgdG8gQU1EJ3MgZ3Jvc3MgbmVnbGlnZW5jZSwgQU1EJ3MgYnJlYWNoIG9mIGl0cyBvYmxpZ2F0aW9ucworICB1bmRlciB0aGlzIEFncmVlbWVudCwgb3Igb3RoZXJ3aXNlLCBVU0VSIGFncmVlcyB0aGF0IGluIG5vIGV2ZW50IHdpbGwKKyAgdGhlIHRvdGFsIGFnZ3JlZ2F0ZSBsaWFiaWxpdHkgb2YgQU1EIGZvciBhbnkgY2xhaW1zLCBsb3NzZXMsIG9yCisgIGRhbWFnZXMgZXhjZWVkICQxMCwwMDAuICBUaGlzIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IGlzIGNvbXBsZXRlIGFuZAorICBleGNsdXNpdmUsIHNoYWxsIGFwcGx5IGV2ZW4gaWYgQU1EIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5CisgIG9mIHN1Y2ggcG90ZW50aWFsIGNsYWltcywgbG9zc2VzLCBvciBkYW1hZ2VzLCBhbmQgc2hhbGwgYXBwbHkKKyAgcmVnYXJkbGVzcyBvZiB0aGUgc3VjY2VzcyBvciBlZmZlY3RpdmVuZXNzIG9mIGFueSBvdGhlciByZW1lZGllcworICBwb3NzZXNzZWQgYnkgVVNFUiwgVVNFUidzIGN1c3RvbWVycywgb3IgYW55IHRoaXJkIHBhcnRpZXMuICBUaGlzCisgIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHJlZmxlY3RzIGFuIGFncmVlZCB1cG9uIGFsbG9jYXRpb24gb2YgcmlzaworICBiZXR3ZWVuIEFNRCBhbmQgVVNFUiBpbiB2aWV3IG9mIHRoZSBuYXR1cmUgb2YgdGhpcyB0cmFuc2FjdGlvbi4gIEFNRAorICBhc3N1bWVzIG5vIGxpYWJpbGl0eSB0aGF0IG1heSBhcmlzZSBvdXQgb2YgdGhlIHVzZSBvciBwb3NzZXNzaW9uIG9mCisgIHRoZSBMaWNlbnNlZCBNYXRlcmlhbHMuCisKKzcuIFRlcm1pbmF0aW9uLgorICBUaGlzIEFncmVlbWVudCBzaGFsbCBleHBpcmUgaW4gb25lICgxKSB5ZWFyIG9yIHdpdGhpbiBmaXZlICg1KQorICBidXNpbmVzcyBkYXlzIG9mIHdyaXR0ZW4gbm90aWNlIGJ5IEFNRC4gIElmIFVTRVIgZmFpbHMgdG8gY29tcGx5IHdpdGgKKyAgYW55IG9mIGl0cyBvYmxpZ2F0aW9ucyBoZXJldW5kZXIsIEFNRCBzaGFsbCBoYXZlIHRoZSByaWdodCwgYXQgYW55CisgIHRpbWUsIHRvIHRlcm1pbmF0ZSB0aGUgQWdyZWVtZW50LCBhbmQgd2l0aGluIGZpdmUgKDUpIGRheXMgYWZ0ZXIKKyAgdGVybWluYXRpb24gb2YgdGhlIEFncmVlbWVudCBmb3IgYW55IHJlYXNvbiBvdGhlciB0aGFuIHRoZSBMaWNlbnNlZAorICBNYXRlcmlhbHMgYmVpbmcgcmVsZWFzZWQgYXMgYSBzdGFuZGFyZCBBTUQgcHJvZHVjdCwgVVNFUiB3aWxsIHJlbW92ZQorICBvciBjZXJ0aWZ5IHRvIHRoZSBkZXN0cnVjdGlvbiBvZiwgdGhlIExpY2Vuc2VkIE1hdGVyaWFscyBmcm9tIGl0cworICBjb21wdXRlciBzeXN0ZW1zIGFuZCByZXR1cm4gdG8gQU1EIHRoZSBMaWNlbnNlZCBNYXRlcmlhbHMgaW4gdGhlIGZvcm0KKyAgcHJvdmlkZWQgYnkgQU1ELgorCis4LiBHZW5lcmFsCisgIGEuIEVudGlyZSBBZ3JlZW1lbnQuCisgICAgIFRoaXMgQWdyZWVtZW50IGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMKKyAgICAgYW5kIHN1cGVyc2VkZXMgYWxsIHByaW9yIGFncmVlbWVudHMgY29uY2VybmluZyB0aGUgc3ViamVjdCBtYXR0ZXIKKyAgICAgaGVyZWluIGFuZCBtYXkgbm90IGJlIGNoYW5nZWQgb3IgdGVybWluYXRlZCBleGNlcHQgYnkgYSB3cml0dGVuCisgICAgIGNvbW11bmljYXRpb24gc2lnbmVkIGJ5IHRoZSBwYXJ0eSBhZ2FpbnN0IHdob20gdGhlIHNhbWUgaXMgc291Z2h0IHRvCisgICAgIGJlIGVuZm9yY2VkLgorICBiLiBTZXZlcmFiaWxpdHkuCisgICAgIElmIGFueSBvZiB0aGUgcHJvdmlzaW9ucyBvZiB0aGlzIEFncmVlbWVudCBhcmUgaW52YWxpZCB1bmRlciBhbnkKKyAgICAgYXBwbGljYWJsZSBzdGF0dXRlIG9yIHJ1bGUgb2YgbGF3LCBzdWNoIHByb3Zpc2lvbnMgb3IgcG9ydGlvbnMgdGhlcmVvZgorICAgICBhcmUgdG8gdGhhdCBleHRlbnQgZGVlbWVkIHRvIGJlIG9taXR0ZWQuICBUaGUgd2FpdmVyIG9yIGZhaWx1cmUgb2YKKyAgICAgZWl0aGVyIHBhcnR5IHRvIGV4ZXJjaXNlIGluIGFueSByZXNwZWN0IGFueSByaWdodCBwcm92aWRlZCBmb3IgaGVyZWluCisgICAgIHNoYWxsIG5vdCBiZSBkZWVtZWQgYSB3YWl2ZXIgb2YgYW55IGZ1cnRoZXIgcmlnaHQgaGVyZXVuZGVyLiAgVGhlCisgICAgIFVTRVIncyByZW1lZGllcyBpbiB0aGlzIEFncmVlbWVudCBhcmUgZXhjbHVzaXZlLgorICBjLiBHb3Zlcm5pbmcgTGF3LCBWZW51ZS4KKyAgICAgVGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mCisgICAgIENhbGlmb3JuaWEuICBFYWNoIHBhcnR5IGhlcmV0byBzdWJtaXRzIHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlCisgICAgIHN0YXRlIGFuZCBmZWRlcmFsIGNvdXJ0cyBvZiBTYW50YSBDbGFyYSBDb3VudHkgYW5kIHRoZSBOb3J0aGVybgorICAgICBEaXN0cmljdCBvZiBDYWxpZm9ybmlhIGZvciB0aGUgcHVycG9zZXMgb2YgYWxsIGxlZ2FsIHByb2NlZWRpbmdzCisgICAgIGFyaXNpbmcgb3V0IG9mIG9yIHJlbGF0aW5nIHRvIHRoaXMgQWdyZWVtZW50IG9yIHRoZSBzdWJqZWN0IG1hdHRlcgorICAgICBoZXJlb2YuICBFYWNoIHBhcnR5IHdhaXZlcyBhbnkgb2JqZWN0aW9uIHdoaWNoIGl0IG1heSBoYXZlIHRvIGNvbnRlc3QKKyAgICAgc3VjaCBmb3J1bS4KKyAgZC4gRXhwb3J0LgorICAgICBVU0VSIHNoYWxsIGNvbXBseSB3aXRoIGFueSBhcHBsaWNhYmxlIGxhd3MgcmVnYXJkaW5nIHRoZSB1c2UsIGV4cG9ydAorICAgICBvciByZS1leHBvcnQgb2YgdGhlIExpY2Vuc2VkIE1hdGVyaWFscyBhbmQgYW55IG90aGVyIGluZm9ybWF0aW9uCisgICAgIGNvbnRhaW5lZCBoZXJlaW4sIGluY2x1ZGluZyBhbGwgYXBwbGljYWJsZSByZWd1bGF0aW9ucyBvZiB0aGUKKyAgICAgVS5TLiBEZXBhcnRtZW50IG9mIENvbW1lcmNlIGFuZC9vciB0aGUgVS5TLiBTdGF0ZSBEZXBhcnRtZW50LgorICBlLiBHb3Zlcm5tZW50IFVzZXJzLgorICAgICBJZiBVU0VSIGlzIGEgVS5TLiBHb3Zlcm5tZW50IFVTRVIsIHRoZW4gdGhlIFNvZnR3YXJlIGlzIHByb3ZpZGVkIHdpdGgKKyAgICAgIlJFU1RSSUNURUQgUklHSFRTIiBhcyBzZXQgZm9ydGggaW4gc3VicGFyYWdyYXBocyAoYykgKDEpIGFuZCAoMikgb2YKKyAgICAgdGhlIENvbW1lcmNpYWwgQ29tcHV0ZXIgU29mdHdhcmUtUmVzdHJpY3RlZCBSaWdodHMgY2xhdXNlIGF0IEZBUgorICAgICA1Mi4yMjctMTQgb3Igc3VicGFyYWdyYXBoIChjKSAoMSkoaWkpIG9mIHRoZSBSaWdodHMgaW4gVGVjaG5pY2FsIERhdGEKKyAgICAgYW5kIENvbXB1dGVyIFNvZnR3YXJlIGNsYXVzZSBhdCBERkFSUyAyNTIuMjc3LTcwMTMsIGFzIGFwcGxpY2FibGUuCisgIGYuIE5vIHdhaXZlci4KKyAgICAgVGhlIGZhaWx1cmUgb2YgQU1EIHRvIGVuZm9yY2UgYW55IHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciBvciB0byB0YWtlCisgICAgIGFjdGlvbiBhZ2FpbnN0IFVTRVIgaW4gdGhlIGV2ZW50IG9mIGFueSBicmVhY2ggaGVyZXVuZGVyIHNoYWxsIG5vdCBiZQorICAgICBkZWVtZWQgYSB3YWl2ZXIgYnkgQU1EIGFzIHRvIHN1YnNlcXVlbnQgZW5mb3JjZW1lbnQgb2YgcmlnaHRzIG9yCisgICAgIHN1YnNlcXVlbnQgYWN0aW9ucyBpbiB0aGUgZXZlbnQgb2YgZnV0dXJlIGJyZWFjaGVzLgorCitJZiB5b3UgYWdyZWUgdG8gYWJpZGUgYnkgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50LAorcGxlYXNlIGNsaWNrICJBY2NlcHQuIiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBBQklERSBCWSBUSEUgVEVSTVMKK0FORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBDTElDSyAiREVDTElORSwiIFlPVSBNQVkgTk9UCitVU0UgVEhFIExJQ0VOU0VEIE1BVEVSSUFMUyBBTkQgTVVTVCBERVNUUk9ZIFRIRU0gT1IgUkVUVVJOIFRIRU0KK1RPIEFNRCBJTU1FRElBVEVMWS4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0FGTC0yLjEgYi9saWNlbnNlcy9BRkwtMi4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhMWQ3NTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9BRkwtMi4xCkBAIC0wLDAgKzEsNTEgQEAKK1RoZSBBY2FkZW1pYyBGcmVlIExpY2Vuc2UKK3YuIDIuMQorCitUaGlzIEFjYWRlbWljIEZyZWUgTGljZW5zZSAodGhlICJMaWNlbnNlIikgYXBwbGllcyB0byBhbnkgb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwICh0aGUgIk9yaWdpbmFsIFdvcmsiKSB3aG9zZSBvd25lciAodGhlICJMaWNlbnNvciIpIGhhcyBwbGFjZWQgdGhlIGZvbGxvd2luZyBub3RpY2UgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgT3JpZ2luYWwgV29yazoKKworTGljZW5zZWQgdW5kZXIgdGhlIEFjYWRlbWljIEZyZWUgTGljZW5zZSB2ZXJzaW9uIDIuMQorCisxKSBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCwgc3VibGljZW5zZWFibGUgbGljZW5zZSB0byBkbyB0aGUgZm9sbG93aW5nOgorCithKSB0byByZXByb2R1Y2UgdGhlIE9yaWdpbmFsIFdvcmsgaW4gY29waWVzOworCitiKSB0byBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3MgKCJEZXJpdmF0aXZlIFdvcmtzIikgYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yazsKKworYykgdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MgdG8gdGhlIHB1YmxpYzsKKworZCkgdG8gcGVyZm9ybSB0aGUgT3JpZ2luYWwgV29yayBwdWJsaWNseTsgYW5kCisKK2UpIHRvIGRpc3BsYXkgdGhlIE9yaWdpbmFsIFdvcmsgcHVibGljbHkuCisKKzIpIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsLCBzdWJsaWNlbnNlYWJsZSBsaWNlbnNlLCB1bmRlciBwYXRlbnQgY2xhaW1zIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgdGhlIExpY2Vuc29yIHRoYXQgYXJlIGVtYm9kaWVkIGluIHRoZSBPcmlnaW5hbCBXb3JrIGFzIGZ1cm5pc2hlZCBieSB0aGUgTGljZW5zb3IsIHRvIG1ha2UsIHVzZSwgc2VsbCBhbmQgb2ZmZXIgZm9yIHNhbGUgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MuCisKKzMpIEdyYW50IG9mIFNvdXJjZSBDb2RlIExpY2Vuc2UuIFRoZSB0ZXJtICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCBhbmQgYWxsIGF2YWlsYWJsZSBkb2N1bWVudGF0aW9uIGRlc2NyaWJpbmcgaG93IHRvIG1vZGlmeSB0aGUgT3JpZ2luYWwgV29yay4gTGljZW5zb3IgaGVyZWJ5IGFncmVlcyB0byBwcm92aWRlIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgT3JpZ2luYWwgV29yayBhbG9uZyB3aXRoIGVhY2ggY29weSBvZiB0aGUgT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIGRpc3RyaWJ1dGVzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gc2F0aXNmeSB0aGlzIG9ibGlnYXRpb24gYnkgcGxhY2luZyBhIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgaW4gYW4gaW5mb3JtYXRpb24gcmVwb3NpdG9yeSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gcGVybWl0IGluZXhwZW5zaXZlIGFuZCBjb252ZW5pZW50IGFjY2VzcyBieSBZb3UgZm9yIGFzIGxvbmcgYXMgTGljZW5zb3IgY29udGludWVzIHRvIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIFdvcmssIGFuZCBieSBwdWJsaXNoaW5nIHRoZSBhZGRyZXNzIG9mIHRoYXQgaW5mb3JtYXRpb24gcmVwb3NpdG9yeSBpbiBhIG5vdGljZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodCBub3RpY2UgdGhhdCBhcHBsaWVzIHRvIHRoZSBPcmlnaW5hbCBXb3JrLgorCis0KSBFeGNsdXNpb25zIEZyb20gTGljZW5zZSBHcmFudC4gTmVpdGhlciB0aGUgbmFtZXMgb2YgTGljZW5zb3IsIG5vciB0aGUgbmFtZXMgb2YgYW55IGNvbnRyaWJ1dG9ycyB0byB0aGUgT3JpZ2luYWwgV29yaywgbm9yIGFueSBvZiB0aGVpciB0cmFkZW1hcmtzIG9yIHNlcnZpY2UgbWFya3MsIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBPcmlnaW5hbCBXb3JrIHdpdGhvdXQgZXhwcmVzcyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIExpY2Vuc29yLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgdG8gZ3JhbnQgYW55IHJpZ2h0cyB0byB0cmFkZW1hcmtzLCBjb3B5cmlnaHRzLCBwYXRlbnRzLCB0cmFkZSBzZWNyZXRzIG9yIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgTGljZW5zb3IgZXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaGVyZWluLiBObyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkIHRvIG1ha2UsIHVzZSwgc2VsbCBvciBvZmZlciB0byBzZWxsIGVtYm9kaW1lbnRzIG9mIGFueSBwYXRlbnQgY2xhaW1zIG90aGVyIHRoYW4gdGhlIGxpY2Vuc2VkIGNsYWltcyBkZWZpbmVkIGluIFNlY3Rpb24gMi4gTm8gcmlnaHQgaXMgZ3JhbnRlZCB0byB0aGUgdHJhZGVtYXJrcyBvZiBMaWNlbnNvciBldmVuIGlmIHN1Y2ggbWFya3MgYXJlIGluY2x1ZGVkIGluIHRoZSBPcmlnaW5hbCBXb3JrLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBpbnRlcnByZXRlZCB0byBwcm9oaWJpdCBMaWNlbnNvciBmcm9tIGxpY2Vuc2luZyB1bmRlciBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aGlzIExpY2Vuc2UgYW55IE9yaWdpbmFsIFdvcmsgdGhhdCBMaWNlbnNvciBvdGhlcndpc2Ugd291bGQgaGF2ZSBhIHJpZ2h0IHRvIGxpY2Vuc2UuCisKKzUpIFRoaXMgc2VjdGlvbiBpbnRlbnRpb25hbGx5IG9taXR0ZWQuCisKKzYpIEF0dHJpYnV0aW9uIFJpZ2h0cy4gWW91IG11c3QgcmV0YWluLCBpbiB0aGUgU291cmNlIENvZGUgb2YgYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgY3JlYXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQgb3IgdHJhZGVtYXJrIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIENvZGUgb2YgdGhlIE9yaWdpbmFsIFdvcmssIGFzIHdlbGwgYXMgYW55IG5vdGljZXMgb2YgbGljZW5zaW5nIGFuZCBhbnkgZGVzY3JpcHRpdmUgdGV4dCBpZGVudGlmaWVkIHRoZXJlaW4gYXMgYW4gIkF0dHJpYnV0aW9uIE5vdGljZS4iIFlvdSBtdXN0IGNhdXNlIHRoZSBTb3VyY2UgQ29kZSBmb3IgYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgY3JlYXRlIHRvIGNhcnJ5IGEgcHJvbWluZW50IEF0dHJpYnV0aW9uIE5vdGljZSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHJlY2lwaWVudHMgdGhhdCBZb3UgaGF2ZSBtb2RpZmllZCB0aGUgT3JpZ2luYWwgV29yay4KKworNykgV2FycmFudHkgb2YgUHJvdmVuYW5jZSBhbmQgRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gTGljZW5zb3Igd2FycmFudHMgdGhhdCB0aGUgY29weXJpZ2h0IGluIGFuZCB0byB0aGUgT3JpZ2luYWwgV29yayBhbmQgdGhlIHBhdGVudCByaWdodHMgZ3JhbnRlZCBoZXJlaW4gYnkgTGljZW5zb3IgYXJlIG93bmVkIGJ5IHRoZSBMaWNlbnNvciBvciBhcmUgc3VibGljZW5zZWQgdG8gWW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0aGUgcGVybWlzc2lvbiBvZiB0aGUgY29udHJpYnV0b3Iocykgb2YgdGhvc2UgY29weXJpZ2h0cyBhbmQgcGF0ZW50IHJpZ2h0cy4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gdGhlIGltbWVkaWF0ZWx5IHByb2NlZWRpbmcgc2VudGVuY2UsIHRoZSBPcmlnaW5hbCBXb3JrIGlzIHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZSBvbiBhbiAiQVMgSVMiIEJBU0lTIGFuZCBXSVRIT1VUIFdBUlJBTlRZLCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgdGhlIHdhcnJhbnRpZXMgb2YgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgT0YgVEhFIE9SSUdJTkFMIFdPUksgSVMgV0lUSCBZT1UuIFRoaXMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBjb25zdGl0dXRlcyBhbiBlc3NlbnRpYWwgcGFydCBvZiB0aGlzIExpY2Vuc2UuIE5vIGxpY2Vuc2UgdG8gT3JpZ2luYWwgV29yayBpcyBncmFudGVkIGhlcmV1bmRlciBleGNlcHQgdW5kZXIgdGhpcyBkaXNjbGFpbWVyLgorCis4KSBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gVW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LCB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwgc2hhbGwgdGhlIExpY2Vuc29yIGJlIGxpYWJsZSB0byBhbnkgcGVyc29uIGZvciBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHVzZSBvZiB0aGUgT3JpZ2luYWwgV29yayBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3Nlcy4gVGhpcyBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBzaGFsbCBub3QgYXBwbHkgdG8gbGlhYmlsaXR5IGZvciBkZWF0aCBvciBwZXJzb25hbCBpbmp1cnkgcmVzdWx0aW5nIGZyb20gTGljZW5zb3IncyBuZWdsaWdlbmNlIHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcgcHJvaGliaXRzIHN1Y2ggbGltaXRhdGlvbi4gU29tZSBqdXJpc2RpY3Rpb25zIGRvIG5vdCBhbGxvdyB0aGUgZXhjbHVzaW9uIG9yIGxpbWl0YXRpb24gb2YgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHNvIHRoaXMgZXhjbHVzaW9uIGFuZCBsaW1pdGF0aW9uIG1heSBub3QgYXBwbHkgdG8gWW91LgorCis5KSBBY2NlcHRhbmNlIGFuZCBUZXJtaW5hdGlvbi4gSWYgWW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIGEgRGVyaXZhdGl2ZSBXb3JrLCBZb3UgbXVzdCBtYWtlIGEgcmVhc29uYWJsZSBlZmZvcnQgdW5kZXIgdGhlIGNpcmN1bXN0YW5jZXMgdG8gb2J0YWluIHRoZSBleHByZXNzIGFzc2VudCBvZiByZWNpcGllbnRzIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIE5vdGhpbmcgZWxzZSBidXQgdGhpcyBMaWNlbnNlIChvciBhbm90aGVyIHdyaXR0ZW4gYWdyZWVtZW50IGJldHdlZW4gTGljZW5zb3IgYW5kIFlvdSkgZ3JhbnRzIFlvdSBwZXJtaXNzaW9uIHRvIGNyZWF0ZSBEZXJpdmF0aXZlIFdvcmtzIGJhc2VkIHVwb24gdGhlIE9yaWdpbmFsIFdvcmsgb3IgdG8gZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCBpbiBTZWN0aW9uIDEgaGVyZWluLCBhbmQgYW55IGF0dGVtcHQgdG8gZG8gc28gZXhjZXB0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgKG9yIGFub3RoZXIgd3JpdHRlbiBhZ3JlZW1lbnQgYmV0d2VlbiBMaWNlbnNvciBhbmQgWW91KSBpcyBleHByZXNzbHkgcHJvaGliaXRlZCBieSBVLlMuIGNvcHlyaWdodCBsYXcsIHRoZSBlcXVpdmFsZW50IGxhd3Mgb2Ygb3RoZXIgY291bnRyaWVzLCBhbmQgYnkgaW50ZXJuYXRpb25hbCB0cmVhdHkuIFRoZXJlZm9yZSwgYnkgZXhlcmNpc2luZyBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9uIDEgaGVyZWluLCBZb3UgaW5kaWNhdGUgWW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSBhbmQgYWxsIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4KKworMTApIFRlcm1pbmF0aW9uIGZvciBQYXRlbnQgQWN0aW9uLiBUaGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgYW5kIFlvdSBtYXkgbm8gbG9uZ2VyIGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHRoaXMgTGljZW5zZSBhcyBvZiB0aGUgZGF0ZSBZb3UgY29tbWVuY2UgYW4gYWN0aW9uLCBpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0sIGFnYWluc3QgTGljZW5zb3Igb3IgYW55IGxpY2Vuc2VlIGFsbGVnaW5nIHRoYXQgdGhlIE9yaWdpbmFsIFdvcmsgaW5mcmluZ2VzIGEgcGF0ZW50LiBUaGlzIHRlcm1pbmF0aW9uIHByb3Zpc2lvbiBzaGFsbCBub3QgYXBwbHkgZm9yIGFuIGFjdGlvbiBhbGxlZ2luZyBwYXRlbnQgaW5mcmluZ2VtZW50IGJ5IGNvbWJpbmF0aW9ucyBvZiB0aGUgT3JpZ2luYWwgV29yayB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlLgorCisxMSkgSnVyaXNkaWN0aW9uLCBWZW51ZSBhbmQgR292ZXJuaW5nIExhdy4gQW55IGFjdGlvbiBvciBzdWl0IHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBtYXkgYmUgYnJvdWdodCBvbmx5IGluIHRoZSBjb3VydHMgb2YgYSBqdXJpc2RpY3Rpb24gd2hlcmVpbiB0aGUgTGljZW5zb3IgcmVzaWRlcyBvciBpbiB3aGljaCBMaWNlbnNvciBjb25kdWN0cyBpdHMgcHJpbWFyeSBidXNpbmVzcywgYW5kIHVuZGVyIHRoZSBsYXdzIG9mIHRoYXQganVyaXNkaWN0aW9uIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBBbnkgdXNlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZSBvciBhZnRlciBpdHMgdGVybWluYXRpb24gc2hhbGwgYmUgc3ViamVjdCB0byB0aGUgcmVxdWlyZW1lbnRzIGFuZCBwZW5hbHRpZXMgb2YgdGhlIFUuUy4gQ29weXJpZ2h0IEFjdCwgMTcgVS5TLkMuIMKnIDEwMSBldCBzZXEuLCB0aGUgZXF1aXZhbGVudCBsYXdzIG9mIG90aGVyIGNvdW50cmllcywgYW5kIGludGVybmF0aW9uYWwgdHJlYXR5LiBUaGlzIHNlY3Rpb24gc2hhbGwgc3Vydml2ZSB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorCisxMikgQXR0b3JuZXlzIEZlZXMuIEluIGFueSBhY3Rpb24gdG8gZW5mb3JjZSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHNlZWtpbmcgZGFtYWdlcyByZWxhdGluZyB0aGVyZXRvLCB0aGUgcHJldmFpbGluZyBwYXJ0eSBzaGFsbCBiZSBlbnRpdGxlZCB0byByZWNvdmVyIGl0cyBjb3N0cyBhbmQgZXhwZW5zZXMsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCByZWFzb25hYmxlIGF0dG9ybmV5cycgZmVlcyBhbmQgY29zdHMgaW5jdXJyZWQgaW4gY29ubmVjdGlvbiB3aXRoIHN1Y2ggYWN0aW9uLCBpbmNsdWRpbmcgYW55IGFwcGVhbCBvZiBzdWNoIGFjdGlvbi4gVGhpcyBzZWN0aW9uIHNoYWxsIHN1cnZpdmUgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KKworMTMpIE1pc2NlbGxhbmVvdXMuIFRoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyB0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4KKworMTQpIERlZmluaXRpb24gb2YgIllvdSIgaW4gVGhpcyBMaWNlbnNlLiAiWW91IiB0aHJvdWdob3V0IHRoaXMgTGljZW5zZSwgd2hldGhlciBpbiB1cHBlciBvciBsb3dlciBjYXNlLCBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIGluY2x1ZGVzIGFueSBlbnRpdHkgdGhhdCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCB5b3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworMTUpIFJpZ2h0IHRvIFVzZS4gWW91IG1heSB1c2UgdGhlIE9yaWdpbmFsIFdvcmsgaW4gYWxsIHdheXMgbm90IG90aGVyd2lzZSByZXN0cmljdGVkIG9yIGNvbmRpdGlvbmVkIGJ5IHRoaXMgTGljZW5zZSBvciBieSBsYXcsIGFuZCBMaWNlbnNvciBwcm9taXNlcyBub3QgdG8gaW50ZXJmZXJlIHdpdGggb3IgYmUgcmVzcG9uc2libGUgZm9yIHN1Y2ggdXNlcyBieSBZb3UuCisKK1RoaXMgbGljZW5zZSBpcyBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNCBMYXdyZW5jZSBFLiBSb3Nlbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHRoaXMgbGljZW5zZSB3aXRob3V0IG1vZGlmaWNhdGlvbi4gVGhpcyBsaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgZXhwcmVzcyB3cml0dGVuIHBlcm1pc3Npb24gb2YgaXRzIGNvcHlyaWdodCBvd25lci4KKworIAorCmRpZmYgLS1naXQgYS9saWNlbnNlcy9BRkwtMy4wIGIvbGljZW5zZXMvQUZMLTMuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2UyMGFjCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvQUZMLTMuMApAQCAtMCwwICsxLDE3NCBAQAorQWNhZGVtaWMgRnJlZSBMaWNlbnNlICgiQUZMIikgdi4gMy4wCisKK1RoaXMgQWNhZGVtaWMgRnJlZSBMaWNlbnNlICh0aGUgIkxpY2Vuc2UiKSBhcHBsaWVzIHRvIGFueSBvcmlnaW5hbCB3b3JrCitvZiBhdXRob3JzaGlwICh0aGUgIk9yaWdpbmFsIFdvcmsiKSB3aG9zZSBvd25lciAodGhlICJMaWNlbnNvciIpIGhhcworcGxhY2VkIHRoZSBmb2xsb3dpbmcgbGljZW5zaW5nIG5vdGljZSBhZGphY2VudCB0byB0aGUgY29weXJpZ2h0IG5vdGljZQorZm9yIHRoZSBPcmlnaW5hbCBXb3JrOgorCitMaWNlbnNlZCB1bmRlciB0aGUgQWNhZGVtaWMgRnJlZSBMaWNlbnNlIHZlcnNpb24gMy4wCisKKzEpIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBMaWNlbnNvciBncmFudHMgWW91IGEgd29ybGR3aWRlLAorcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBzdWJsaWNlbnNhYmxlIGxpY2Vuc2UsIGZvciB0aGUgZHVyYXRpb24gb2YKK3RoZSBjb3B5cmlnaHQsIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisKK2EpIHRvIHJlcHJvZHVjZSB0aGUgT3JpZ2luYWwgV29yayBpbiBjb3BpZXMsIGVpdGhlciBhbG9uZSBvciBhcyBwYXJ0IG9mCithIGNvbGxlY3RpdmUgd29yazsKKworYikgdG8gdHJhbnNsYXRlLCBhZGFwdCwgYWx0ZXIsIHRyYW5zZm9ybSwgbW9kaWZ5LCBvciBhcnJhbmdlIHRoZSBPcmlnaW5hbAorV29yaywgdGhlcmVieSBjcmVhdGluZyBkZXJpdmF0aXZlIHdvcmtzICgiRGVyaXZhdGl2ZSBXb3JrcyIpIGJhc2VkIHVwb24KK3RoZSBPcmlnaW5hbCBXb3JrOworCitjKSB0byBkaXN0cmlidXRlIG9yIGNvbW11bmljYXRlIGNvcGllcyBvZiB0aGUgT3JpZ2luYWwgV29yayBhbmQgRGVyaXZhdGl2ZQorV29ya3MgdG8gdGhlIHB1YmxpYywgdW5kZXIgYW55IGxpY2Vuc2Ugb2YgeW91ciBjaG9pY2UgdGhhdCBkb2VzIG5vdAorY29udHJhZGljdCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGluY2x1ZGluZyBMaWNlbnNvcidzIHJlc2VydmVkIHJpZ2h0cworYW5kIHJlbWVkaWVzLCBpbiB0aGlzIEFjYWRlbWljIEZyZWUgTGljZW5zZTsKKworZCkgdG8gcGVyZm9ybSB0aGUgT3JpZ2luYWwgV29yayBwdWJsaWNseTsgYW5kCisKK2UpIHRvIGRpc3BsYXkgdGhlIE9yaWdpbmFsIFdvcmsgcHVibGljbHkuCisKKzIpIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBMaWNlbnNvciBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsCitub24tZXhjbHVzaXZlLCBzdWJsaWNlbnNhYmxlIGxpY2Vuc2UsIHVuZGVyIHBhdGVudCBjbGFpbXMgb3duZWQgb3IKK2NvbnRyb2xsZWQgYnkgdGhlIExpY2Vuc29yIHRoYXQgYXJlIGVtYm9kaWVkIGluIHRoZSBPcmlnaW5hbCBXb3JrIGFzCitmdXJuaXNoZWQgYnkgdGhlIExpY2Vuc29yLCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBwYXRlbnRzLCB0byBtYWtlLAordXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBhbmQgaW1wb3J0IHRoZSBPcmlnaW5hbCBXb3JrIGFuZAorRGVyaXZhdGl2ZSBXb3Jrcy4KKworMykgR3JhbnQgb2YgU291cmNlIENvZGUgTGljZW5zZS4gVGhlIHRlcm0gIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUKK3ByZWZlcnJlZCBmb3JtIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdAorYW5kIGFsbCBhdmFpbGFibGUgZG9jdW1lbnRhdGlvbiBkZXNjcmliaW5nIGhvdyB0byBtb2RpZnkgdGhlIE9yaWdpbmFsCitXb3JrLiBMaWNlbnNvciBhZ3JlZXMgdG8gcHJvdmlkZSBhIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlCitDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGFsb25nIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBPcmlnaW5hbCBXb3JrCit0aGF0IExpY2Vuc29yIGRpc3RyaWJ1dGVzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gc2F0aXNmeSB0aGlzCitvYmxpZ2F0aW9uIGJ5IHBsYWNpbmcgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIGluIGFuCitpbmZvcm1hdGlvbiByZXBvc2l0b3J5IHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBwZXJtaXQgaW5leHBlbnNpdmUgYW5kCitjb252ZW5pZW50IGFjY2VzcyBieSBZb3UgZm9yIGFzIGxvbmcgYXMgTGljZW5zb3IgY29udGludWVzIHRvIGRpc3RyaWJ1dGUKK3RoZSBPcmlnaW5hbCBXb3JrLgorCis0KSBFeGNsdXNpb25zIEZyb20gTGljZW5zZSBHcmFudC4gTmVpdGhlciB0aGUgbmFtZXMgb2YgTGljZW5zb3IncwordHJhZGVtYXJrcywgY29weXJpZ2h0cywgcGF0ZW50cywgdHJhZGUgc2VjcmV0cyBvciBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsCitwcm9wZXJ0eS4gTm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvcgorc2FsZSwgaGF2ZSBtYWRlLCBvciBpbXBvcnQgZW1ib2RpbWVudHMgb2YgYW55IHBhdGVudCBjbGFpbXMgb3RoZXIgdGhhbgordGhlIGxpY2Vuc2VkIGNsYWltcyBkZWZpbmVkIGluIFNlY3Rpb24gMi4gTm8gbGljZW5zZSBpcyBncmFudGVkIHRvIHRoZQordHJhZGVtYXJrcyBvZiBMaWNlbnNvciBldmVuIGlmIHN1Y2ggbWFya3MgYXJlIGluY2x1ZGVkIGluIHRoZSBPcmlnaW5hbAorV29yay4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgaW50ZXJwcmV0ZWQgdG8gcHJvaGliaXQgTGljZW5zb3IKK2Zyb20gbGljZW5zaW5nIHVuZGVyIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSBhbnkgT3JpZ2luYWwgV29yawordGhhdCBMaWNlbnNvciBvdGhlcndpc2Ugd291bGQgaGF2ZSBhIHJpZ2h0IHRvIGxpY2Vuc2UuCisKKzUpIEV4dGVybmFsIERlcGxveW1lbnQuIFRoZSB0ZXJtICJFeHRlcm5hbCBEZXBsb3ltZW50IiBtZWFucyB0aGUgdXNlLAorZGlzdHJpYnV0aW9uLCBvciBjb21tdW5pY2F0aW9uIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MKK2luIGFueSB3YXkgc3VjaCB0aGF0IHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgbWF5IGJlIHVzZWQgYnkKK2FueW9uZSBvdGhlciB0aGFuIFlvdSwgd2hldGhlciB0aG9zZSB3b3JrcyBhcmUgZGlzdHJpYnV0ZWQgb3IgY29tbXVuaWNhdGVkCit0byB0aG9zZSBwZXJzb25zIG9yIG1hZGUgYXZhaWxhYmxlIGFzIGFuIGFwcGxpY2F0aW9uIGludGVuZGVkIGZvciB1c2Ugb3ZlcgorYSBuZXR3b3JrLiBBcyBhbiBleHByZXNzIGNvbmRpdGlvbiBmb3IgdGhlIGdyYW50cyBvZiBsaWNlbnNlIGhlcmV1bmRlciwKK1lvdSBtdXN0IHRyZWF0IGFueSBFeHRlcm5hbCBEZXBsb3ltZW50IGJ5IFlvdSBvZiB0aGUgT3JpZ2luYWwgV29yayBvcgorYSBEZXJpdmF0aXZlIFdvcmsgYXMgYSBkaXN0cmlidXRpb24gdW5kZXIgc2VjdGlvbiAxKGMpLgorCis2KSBBdHRyaWJ1dGlvbiBSaWdodHMuIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBDb2RlIG9mIGFueQorRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBjcmVhdGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgb3IgdHJhZGVtYXJrCitub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrLCBhcyB3ZWxsIGFzIGFueQorbm90aWNlcyBvZiBsaWNlbnNpbmcgYW5kIGFueSBkZXNjcmlwdGl2ZSB0ZXh0IGlkZW50aWZpZWQgdGhlcmVpbiBhcyBhbgorIkF0dHJpYnV0aW9uIE5vdGljZS4iIFlvdSBtdXN0IGNhdXNlIHRoZSBTb3VyY2UgQ29kZSBmb3IgYW55IERlcml2YXRpdmUKK1dvcmtzIHRoYXQgWW91IGNyZWF0ZSB0byBjYXJyeSBhIHByb21pbmVudCBBdHRyaWJ1dGlvbiBOb3RpY2UgcmVhc29uYWJseQorY2FsY3VsYXRlZCB0byBpbmZvcm0gcmVjaXBpZW50cyB0aGF0IFlvdSBoYXZlIG1vZGlmaWVkIHRoZSBPcmlnaW5hbCBXb3JrLgorCis3KSBXYXJyYW50eSBvZiBQcm92ZW5hbmNlIGFuZCBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBMaWNlbnNvciB3YXJyYW50cwordGhhdCB0aGUgY29weXJpZ2h0IGluIGFuZCB0byB0aGUgT3JpZ2luYWwgV29yayBhbmQgdGhlIHBhdGVudCByaWdodHMKK2dyYW50ZWQgaGVyZWluIGJ5IExpY2Vuc29yIGFyZSBvd25lZCBieSB0aGUgTGljZW5zb3Igb3IgYXJlIHN1YmxpY2Vuc2VkCit0byBZb3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRoZSBwZXJtaXNzaW9uIG9mIHRoZQorY29udHJpYnV0b3Iocykgb2YgdGhvc2UgY29weXJpZ2h0cyBhbmQgcGF0ZW50IHJpZ2h0cy4gRXhjZXB0IGFzCitleHByZXNzbHkgc3RhdGVkIGluIHRoZSBpbW1lZGlhdGVseSBwcmVjZWRpbmcgc2VudGVuY2UsIHRoZSBPcmlnaW5hbAorV29yayBpcyBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2Ugb24gYW4gIkFTIElTIiBCQVNJUyBhbmQgV0lUSE9VVAorV0FSUkFOVFksIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLAordGhlIHdhcnJhbnRpZXMgb2Ygbm9uLWluZnJpbmdlbWVudCwgbWVyY2hhbnRhYmlsaXR5IG9yIGZpdG5lc3MgZm9yIGEKK3BhcnRpY3VsYXIgcHVycG9zZS4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIE9GIFRIRSBPUklHSU5BTAorV09SSyBJUyBXSVRIIFlPVS4gVGhpcyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIGNvbnN0aXR1dGVzIGFuIGVzc2VudGlhbAorcGFydCBvZiB0aGlzIExpY2Vuc2UuIE5vIGxpY2Vuc2UgdG8gdGhlIE9yaWdpbmFsIFdvcmsgaXMgZ3JhbnRlZCBieSB0aGlzCitMaWNlbnNlIGV4Y2VwdCB1bmRlciB0aGlzIGRpc2NsYWltZXIuCisKKzgpIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBVbmRlciBubyBjaXJjdW1zdGFuY2VzIGFuZCB1bmRlciBubyBsZWdhbAordGhlb3J5LCB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwKK3NoYWxsIHRoZSBMaWNlbnNvciBiZSBsaWFibGUgdG8gYW55b25lIGZvciBhbnkgaW5kaXJlY3QsIHNwZWNpYWwsCitpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nIGFzIGEKK3Jlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHVzZSBvZiB0aGUgT3JpZ2luYWwgV29yayBpbmNsdWRpbmcsIHdpdGhvdXQKK2xpbWl0YXRpb24sIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUKK29yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbCBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzLiBUaGlzCitsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBzaGFsbCBub3QgYXBwbHkgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdworcHJvaGliaXRzIHN1Y2ggbGltaXRhdGlvbi4KKworOSkgQWNjZXB0YW5jZSBhbmQgVGVybWluYXRpb24uIElmLCBhdCBhbnkgdGltZSwgWW91IGV4cHJlc3NseSBhc3NlbnRlZCB0bwordGhpcyBMaWNlbnNlLCB0aGF0IGFzc2VudCBpbmRpY2F0ZXMgeW91ciBjbGVhciBhbmQgaXJyZXZvY2FibGUgYWNjZXB0YW5jZQorb2YgdGhpcyBMaWNlbnNlIGFuZCBhbGwgb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLiBJZiBZb3UgZGlzdHJpYnV0ZSBvcgorY29tbXVuaWNhdGUgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIGEgRGVyaXZhdGl2ZSBXb3JrLCBZb3UgbXVzdAorbWFrZSBhIHJlYXNvbmFibGUgZWZmb3J0IHVuZGVyIHRoZSBjaXJjdW1zdGFuY2VzIHRvIG9idGFpbiB0aGUgZXhwcmVzcworYXNzZW50IG9mIHJlY2lwaWVudHMgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gVGhpcyBMaWNlbnNlIGNvbmRpdGlvbnMKK3lvdXIgcmlnaHRzIHRvIHVuZGVydGFrZSB0aGUgYWN0aXZpdGllcyBsaXN0ZWQgaW4gU2VjdGlvbiAxLCBpbmNsdWRpbmcKK3lvdXIgcmlnaHQgdG8gY3JlYXRlIERlcml2YXRpdmUgV29ya3MgYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yaywKK2FuZCBkb2luZyBzbyB3aXRob3V0IGhvbm9yaW5nIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGlzIHByb2hpYml0ZWQKK2J5IGNvcHlyaWdodCBsYXcgYW5kIGludGVybmF0aW9uYWwgdHJlYXR5LiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZQoraXMgaW50ZW5kZWQgdG8gYWZmZWN0IGNvcHlyaWdodCBleGNlcHRpb25zIGFuZCBsaW1pdGF0aW9ucyAoaW5jbHVkaW5nCisiZmFpciB1c2UiIG9yICJmYWlyIGRlYWxpbmciKS4gIFRoaXMgbGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgaW1tZWRpYXRlbHkKK2FuZCBZb3UgbWF5IG5vIGxvbmdlciBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSB0aGlzCitMaWNlbnNlIHVwb24geW91ciBmYWlsdXJlIHRvIGhvbm9yIHRoZSBjb25kaXRpb25zIGluIFNlY3Rpb24gMShjKS4KKworMTApIFRlcm1pbmF0aW9uIGZvciBQYXRlbnQgQWN0aW9uLiBUaGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlCithdXRvbWF0aWNhbGx5IGFuZCBZb3UgbWF5IG5vIGxvbmdlciBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkCit0byBZb3UgYnkgdGhpcyBMaWNlbnNlIGFzIG9mIHRoZSBkYXRlIFlvdSBjb21tZW5jZSBhbiBhY3Rpb24sIGluY2x1ZGluZworYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0sIGFnYWluc3QgTGljZW5zb3Igb3IgYW55IGxpY2Vuc2VlIGFsbGVnaW5nCit0aGF0IHRoZSBPcmlnaW5hbCBXb3JrIGluZnJpbmdlcyBhIHBhdGVudC4gVGhpcyB0ZXJtaW5hdGlvbiBwcm92aXNpb24KK3NoYWxsIG5vdCBhcHBseSBmb3IgYW4gYWN0aW9uIGFsbGVnaW5nIHBhdGVudCBpbmZyaW5nZW1lbnQgYnkgY29tYmluYXRpb25zCitvZiB0aGUgT3JpZ2luYWwgV29yayB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlLgorCisxMSkgSnVyaXNkaWN0aW9uLCBWZW51ZSBhbmQgR292ZXJuaW5nIExhdy4gQW55IGFjdGlvbiBvciBzdWl0IHJlbGF0aW5nIHRvCit0aGlzIExpY2Vuc2UgbWF5IGJlIGJyb3VnaHQgb25seSBpbiB0aGUgY291cnRzIG9mIGEganVyaXNkaWN0aW9uIHdoZXJlaW4KK3RoZSBMaWNlbnNvciByZXNpZGVzIG9yIGluIHdoaWNoIExpY2Vuc29yIGNvbmR1Y3RzIGl0cyBwcmltYXJ5IGJ1c2luZXNzLAorYW5kIHVuZGVyIHRoZSBsYXdzIG9mIHRoYXQganVyaXNkaWN0aW9uIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3Citwcm92aXNpb25zLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzCitmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuIEFueSB1c2Ugb2YgdGhlCitPcmlnaW5hbCBXb3JrIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZSBvciBhZnRlciBpdHMgdGVybWluYXRpb24KK3NoYWxsIGJlIHN1YmplY3QgdG8gdGhlIHJlcXVpcmVtZW50cyBhbmQgcGVuYWx0aWVzIG9mIGNvcHlyaWdodCBvcgorcGF0ZW50IGxhdyBpbiB0aGUgYXBwcm9wcmlhdGUganVyaXNkaWN0aW9uLiBUaGlzIHNlY3Rpb24gc2hhbGwgc3Vydml2ZQordGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KKworMTIpIEF0dG9ybmV5cycgRmVlcy4gSW4gYW55IGFjdGlvbiB0byBlbmZvcmNlIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IKK3NlZWtpbmcgZGFtYWdlcyByZWxhdGluZyB0aGVyZXRvLCB0aGUgcHJldmFpbGluZyBwYXJ0eSBzaGFsbCBiZSBlbnRpdGxlZAordG8gcmVjb3ZlciBpdHMgY29zdHMgYW5kIGV4cGVuc2VzLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwKK3JlYXNvbmFibGUgYXR0b3JuZXlzJyBmZWVzIGFuZCBjb3N0cyBpbmN1cnJlZCBpbiBjb25uZWN0aW9uIHdpdGggc3VjaAorYWN0aW9uLCBpbmNsdWRpbmcgYW55IGFwcGVhbCBvZiBzdWNoIGFjdGlvbi4gVGhpcyBzZWN0aW9uIHNoYWxsIHN1cnZpdmUKK3RoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCisKKzEzKSBNaXNjZWxsYW5lb3VzLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlCit1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQKK25lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLgorCisxNCkgRGVmaW5pdGlvbiBvZiAiWW91IiBpbiBUaGlzIExpY2Vuc2UuICJZb3UiIHRocm91Z2hvdXQgdGhpcyBMaWNlbnNlLAord2hldGhlciBpbiB1cHBlciBvciBsb3dlciBjYXNlLCBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5CitleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMKK0xpY2Vuc2UuIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgaW5jbHVkZXMgYW55IGVudGl0eSB0aGF0IGNvbnRyb2xzLAoraXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCB5b3UuIEZvciBwdXJwb3NlcyBvZgordGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0bworY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0CitvciBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUKK291dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKzE1KSBSaWdodCB0byBVc2UuIFlvdSBtYXkgdXNlIHRoZSBPcmlnaW5hbCBXb3JrIGluIGFsbCB3YXlzIG5vdCBvdGhlcndpc2UKK3Jlc3RyaWN0ZWQgb3IgY29uZGl0aW9uZWQgYnkgdGhpcyBMaWNlbnNlIG9yIGJ5IGxhdywgYW5kIExpY2Vuc29yIHByb21pc2VzCitub3QgdG8gaW50ZXJmZXJlIHdpdGggb3IgYmUgcmVzcG9uc2libGUgZm9yIHN1Y2ggdXNlcyBieSBZb3UuCisKKzE2KSBNb2RpZmljYXRpb24gb2YgVGhpcyBMaWNlbnNlLiBUaGlzIExpY2Vuc2UgaXMgQ29weXJpZ2h0IMKpCisyMDA1IExhd3JlbmNlIFJvc2VuLiBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSwgZGlzdHJpYnV0ZSwgb3IKK2NvbW11bmljYXRlIHRoaXMgTGljZW5zZSB3aXRob3V0IG1vZGlmaWNhdGlvbi4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UKK3Blcm1pdHMgWW91IHRvIG1vZGlmeSB0aGlzIExpY2Vuc2UgYXMgYXBwbGllZCB0byB0aGUgT3JpZ2luYWwgV29yayBvcgordG8gRGVyaXZhdGl2ZSBXb3Jrcy4gSG93ZXZlciwgWW91IG1heSBtb2RpZnkgdGhlIHRleHQgb2YgdGhpcyBMaWNlbnNlCithbmQgY29weSwgZGlzdHJpYnV0ZSBvciBjb21tdW5pY2F0ZSB5b3VyIG1vZGlmaWVkIHZlcnNpb24gKHRoZSAiTW9kaWZpZWQKK0xpY2Vuc2UiKSBhbmQgYXBwbHkgaXQgdG8gb3RoZXIgb3JpZ2luYWwgd29ya3Mgb2YgYXV0aG9yc2hpcCBzdWJqZWN0IHRvCit0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6IChpKSBZb3UgbWF5IG5vdCBpbmRpY2F0ZSBpbiBhbnkgd2F5IHRoYXQgeW91cgorTW9kaWZpZWQgTGljZW5zZSBpcyB0aGUgIkFjYWRlbWljIEZyZWUgTGljZW5zZSIgb3IgIkFGTCIgYW5kIHlvdSBtYXkKK25vdCB1c2UgdGhvc2UgbmFtZXMgaW4gdGhlIG5hbWUgb2YgeW91ciBNb2RpZmllZCBMaWNlbnNlOyAoaWkpIFlvdSBtdXN0CityZXBsYWNlIHRoZSBub3RpY2Ugc3BlY2lmaWVkIGluIHRoZSBmaXJzdCBwYXJhZ3JhcGggYWJvdmUgd2l0aCB0aGUgbm90aWNlCisiTGljZW5zZWQgdW5kZXIgPGluc2VydCB5b3VyIGxpY2Vuc2UgbmFtZSBoZXJlPiIgb3Igd2l0aCBhIG5vdGljZSBvZiB5b3VyCitvd24gdGhhdCBpcyBub3QgY29uZnVzaW5nbHkgc2ltaWxhciB0byB0aGUgbm90aWNlIGluIHRoaXMgTGljZW5zZTsgYW5kCisoaWlpKSBZb3UgbWF5IG5vdCBjbGFpbSB0aGF0IHlvdXIgb3JpZ2luYWwgd29ya3MgYXJlIG9wZW4gc291cmNlIHNvZnR3YXJlCit1bmxlc3MgeW91ciBNb2RpZmllZCBMaWNlbnNlIGhhcyBiZWVuIGFwcHJvdmVkIGJ5IE9wZW4gU291cmNlIEluaXRpYXRpdmUKKyhPU0kpIGFuZCBZb3UgY29tcGx5IHdpdGggaXRzIGxpY2Vuc2UgcmV2aWV3IGFuZCBjZXJ0aWZpY2F0aW9uIHByb2Nlc3MuCisKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0FHUEwtMyBiL2xpY2Vuc2VzL0FHUEwtMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmExM2VkCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvQUdQTC0zCkBAIC0wLDAgKzEsNjYxIEBACisgICAgICAgICAgICAgICAgICAgIEdOVSBBRkZFUk8gR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDMsIDE5IE5vdmVtYmVyIDIwMDcKKworIENvcHlyaWdodCAoQykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gPGh0dHA6Ly9mc2Yub3JnLz4KKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZWFtYmxlCisKKyAgVGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBhIGZyZWUsIGNvcHlsZWZ0IGxpY2Vuc2UgZm9yCitzb2Z0d2FyZSBhbmQgb3RoZXIga2luZHMgb2Ygd29ya3MsIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBlbnN1cmUKK2Nvb3BlcmF0aW9uIHdpdGggdGhlIGNvbW11bml0eSBpbiB0aGUgY2FzZSBvZiBuZXR3b3JrIHNlcnZlciBzb2Z0d2FyZS4KKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYW5kIG90aGVyIHByYWN0aWNhbCB3b3JrcyBhcmUgZGVzaWduZWQKK3RvIHRha2UgYXdheSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSB0aGUgd29ya3MuICBCeSBjb250cmFzdCwKK291ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0bworc2hhcmUgYW5kIGNoYW5nZSBhbGwgdmVyc2lvbnMgb2YgYSBwcm9ncmFtLS10byBtYWtlIHN1cmUgaXQgcmVtYWlucyBmcmVlCitzb2Z0d2FyZSBmb3IgYWxsIGl0cyB1c2Vycy4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGVtIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0IGlmIHlvdQord2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdCBpbiBuZXcKK2ZyZWUgcHJvZ3JhbXMsIGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIERldmVsb3BlcnMgdGhhdCB1c2Ugb3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIHByb3RlY3QgeW91ciByaWdodHMKK3dpdGggdHdvIHN0ZXBzOiAoMSkgYXNzZXJ0IGNvcHlyaWdodCBvbiB0aGUgc29mdHdhcmUsIGFuZCAoMikgb2ZmZXIKK3lvdSB0aGlzIExpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZQorYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisKKyAgQSBzZWNvbmRhcnkgYmVuZWZpdCBvZiBkZWZlbmRpbmcgYWxsIHVzZXJzJyBmcmVlZG9tIGlzIHRoYXQKK2ltcHJvdmVtZW50cyBtYWRlIGluIGFsdGVybmF0ZSB2ZXJzaW9ucyBvZiB0aGUgcHJvZ3JhbSwgaWYgdGhleQorcmVjZWl2ZSB3aWRlc3ByZWFkIHVzZSwgYmVjb21lIGF2YWlsYWJsZSBmb3Igb3RoZXIgZGV2ZWxvcGVycyB0bworaW5jb3Jwb3JhdGUuICBNYW55IGRldmVsb3BlcnMgb2YgZnJlZSBzb2Z0d2FyZSBhcmUgaGVhcnRlbmVkIGFuZAorZW5jb3VyYWdlZCBieSB0aGUgcmVzdWx0aW5nIGNvb3BlcmF0aW9uLiAgSG93ZXZlciwgaW4gdGhlIGNhc2Ugb2YKK3NvZnR3YXJlIHVzZWQgb24gbmV0d29yayBzZXJ2ZXJzLCB0aGlzIHJlc3VsdCBtYXkgZmFpbCB0byBjb21lIGFib3V0LgorVGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHBlcm1pdHMgbWFraW5nIGEgbW9kaWZpZWQgdmVyc2lvbiBhbmQKK2xldHRpbmcgdGhlIHB1YmxpYyBhY2Nlc3MgaXQgb24gYSBzZXJ2ZXIgd2l0aG91dCBldmVyIHJlbGVhc2luZyBpdHMKK3NvdXJjZSBjb2RlIHRvIHRoZSBwdWJsaWMuCisKKyAgVGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBkZXNpZ25lZCBzcGVjaWZpY2FsbHkgdG8KK2Vuc3VyZSB0aGF0LCBpbiBzdWNoIGNhc2VzLCB0aGUgbW9kaWZpZWQgc291cmNlIGNvZGUgYmVjb21lcyBhdmFpbGFibGUKK3RvIHRoZSBjb21tdW5pdHkuICBJdCByZXF1aXJlcyB0aGUgb3BlcmF0b3Igb2YgYSBuZXR3b3JrIHNlcnZlciB0bworcHJvdmlkZSB0aGUgc291cmNlIGNvZGUgb2YgdGhlIG1vZGlmaWVkIHZlcnNpb24gcnVubmluZyB0aGVyZSB0byB0aGUKK3VzZXJzIG9mIHRoYXQgc2VydmVyLiAgVGhlcmVmb3JlLCBwdWJsaWMgdXNlIG9mIGEgbW9kaWZpZWQgdmVyc2lvbiwgb24KK2EgcHVibGljbHkgYWNjZXNzaWJsZSBzZXJ2ZXIsIGdpdmVzIHRoZSBwdWJsaWMgYWNjZXNzIHRvIHRoZSBzb3VyY2UKK2NvZGUgb2YgdGhlIG1vZGlmaWVkIHZlcnNpb24uCisKKyAgQW4gb2xkZXIgbGljZW5zZSwgY2FsbGVkIHRoZSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKK3B1Ymxpc2hlZCBieSBBZmZlcm8sIHdhcyBkZXNpZ25lZCB0byBhY2NvbXBsaXNoIHNpbWlsYXIgZ29hbHMuICBUaGlzIGlzCithIGRpZmZlcmVudCBsaWNlbnNlLCBub3QgYSB2ZXJzaW9uIG9mIHRoZSBBZmZlcm8gR1BMLCBidXQgQWZmZXJvIGhhcworcmVsZWFzZWQgYSBuZXcgdmVyc2lvbiBvZiB0aGUgQWZmZXJvIEdQTCB3aGljaCBwZXJtaXRzIHJlbGljZW5zaW5nIHVuZGVyCit0aGlzIGxpY2Vuc2UuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisKKyAgICAgICAgICAgICAgICAgICAgICAgVEVSTVMgQU5EIENPTkRJVElPTlMKKworICAwLiBEZWZpbml0aW9ucy4KKworICAiVGhpcyBMaWNlbnNlIiByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKKyAgIkNvcHlyaWdodCIgYWxzbyBtZWFucyBjb3B5cmlnaHQtbGlrZSBsYXdzIHRoYXQgYXBwbHkgdG8gb3RoZXIga2luZHMgb2YKK3dvcmtzLCBzdWNoIGFzIHNlbWljb25kdWN0b3IgbWFza3MuCisKKyAgIlRoZSBQcm9ncmFtIiByZWZlcnMgdG8gYW55IGNvcHlyaWdodGFibGUgd29yayBsaWNlbnNlZCB1bmRlciB0aGlzCitMaWNlbnNlLiAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuICAiTGljZW5zZWVzIiBhbmQKKyJyZWNpcGllbnRzIiBtYXkgYmUgaW5kaXZpZHVhbHMgb3Igb3JnYW5pemF0aW9ucy4KKworICBUbyAibW9kaWZ5IiBhIHdvcmsgbWVhbnMgdG8gY29weSBmcm9tIG9yIGFkYXB0IGFsbCBvciBwYXJ0IG9mIHRoZSB3b3JrCitpbiBhIGZhc2hpb24gcmVxdWlyaW5nIGNvcHlyaWdodCBwZXJtaXNzaW9uLCBvdGhlciB0aGFuIHRoZSBtYWtpbmcgb2YgYW4KK2V4YWN0IGNvcHkuICBUaGUgcmVzdWx0aW5nIHdvcmsgaXMgY2FsbGVkIGEgIm1vZGlmaWVkIHZlcnNpb24iIG9mIHRoZQorZWFybGllciB3b3JrIG9yIGEgd29yayAiYmFzZWQgb24iIHRoZSBlYXJsaWVyIHdvcmsuCisKKyAgQSAiY292ZXJlZCB3b3JrIiBtZWFucyBlaXRoZXIgdGhlIHVubW9kaWZpZWQgUHJvZ3JhbSBvciBhIHdvcmsgYmFzZWQKK29uIHRoZSBQcm9ncmFtLgorCisgIFRvICJwcm9wYWdhdGUiIGEgd29yayBtZWFucyB0byBkbyBhbnl0aGluZyB3aXRoIGl0IHRoYXQsIHdpdGhvdXQKK3Blcm1pc3Npb24sIHdvdWxkIG1ha2UgeW91IGRpcmVjdGx5IG9yIHNlY29uZGFyaWx5IGxpYWJsZSBmb3IKK2luZnJpbmdlbWVudCB1bmRlciBhcHBsaWNhYmxlIGNvcHlyaWdodCBsYXcsIGV4Y2VwdCBleGVjdXRpbmcgaXQgb24gYQorY29tcHV0ZXIgb3IgbW9kaWZ5aW5nIGEgcHJpdmF0ZSBjb3B5LiAgUHJvcGFnYXRpb24gaW5jbHVkZXMgY29weWluZywKK2Rpc3RyaWJ1dGlvbiAod2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiksIG1ha2luZyBhdmFpbGFibGUgdG8gdGhlCitwdWJsaWMsIGFuZCBpbiBzb21lIGNvdW50cmllcyBvdGhlciBhY3Rpdml0aWVzIGFzIHdlbGwuCisKKyAgVG8gImNvbnZleSIgYSB3b3JrIG1lYW5zIGFueSBraW5kIG9mIHByb3BhZ2F0aW9uIHRoYXQgZW5hYmxlcyBvdGhlcgorcGFydGllcyB0byBtYWtlIG9yIHJlY2VpdmUgY29waWVzLiAgTWVyZSBpbnRlcmFjdGlvbiB3aXRoIGEgdXNlciB0aHJvdWdoCithIGNvbXB1dGVyIG5ldHdvcmssIHdpdGggbm8gdHJhbnNmZXIgb2YgYSBjb3B5LCBpcyBub3QgY29udmV5aW5nLgorCisgIEFuIGludGVyYWN0aXZlIHVzZXIgaW50ZXJmYWNlIGRpc3BsYXlzICJBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzIgordG8gdGhlIGV4dGVudCB0aGF0IGl0IGluY2x1ZGVzIGEgY29udmVuaWVudCBhbmQgcHJvbWluZW50bHkgdmlzaWJsZQorZmVhdHVyZSB0aGF0ICgxKSBkaXNwbGF5cyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlLCBhbmQgKDIpCit0ZWxscyB0aGUgdXNlciB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgd29yayAoZXhjZXB0IHRvIHRoZQorZXh0ZW50IHRoYXQgd2FycmFudGllcyBhcmUgcHJvdmlkZWQpLCB0aGF0IGxpY2Vuc2VlcyBtYXkgY29udmV5IHRoZQord29yayB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiAgSWYKK3RoZSBpbnRlcmZhY2UgcHJlc2VudHMgYSBsaXN0IG9mIHVzZXIgY29tbWFuZHMgb3Igb3B0aW9ucywgc3VjaCBhcyBhCittZW51LCBhIHByb21pbmVudCBpdGVtIGluIHRoZSBsaXN0IG1lZXRzIHRoaXMgY3JpdGVyaW9uLgorCisgIDEuIFNvdXJjZSBDb2RlLgorCisgIFRoZSAic291cmNlIGNvZGUiIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrCitmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICAiT2JqZWN0IGNvZGUiIG1lYW5zIGFueSBub24tc291cmNlCitmb3JtIG9mIGEgd29yay4KKworICBBICJTdGFuZGFyZCBJbnRlcmZhY2UiIG1lYW5zIGFuIGludGVyZmFjZSB0aGF0IGVpdGhlciBpcyBhbiBvZmZpY2lhbAorc3RhbmRhcmQgZGVmaW5lZCBieSBhIHJlY29nbml6ZWQgc3RhbmRhcmRzIGJvZHksIG9yLCBpbiB0aGUgY2FzZSBvZgoraW50ZXJmYWNlcyBzcGVjaWZpZWQgZm9yIGEgcGFydGljdWxhciBwcm9ncmFtbWluZyBsYW5ndWFnZSwgb25lIHRoYXQKK2lzIHdpZGVseSB1c2VkIGFtb25nIGRldmVsb3BlcnMgd29ya2luZyBpbiB0aGF0IGxhbmd1YWdlLgorCisgIFRoZSAiU3lzdGVtIExpYnJhcmllcyIgb2YgYW4gZXhlY3V0YWJsZSB3b3JrIGluY2x1ZGUgYW55dGhpbmcsIG90aGVyCit0aGFuIHRoZSB3b3JrIGFzIGEgd2hvbGUsIHRoYXQgKGEpIGlzIGluY2x1ZGVkIGluIHRoZSBub3JtYWwgZm9ybSBvZgorcGFja2FnaW5nIGEgTWFqb3IgQ29tcG9uZW50LCBidXQgd2hpY2ggaXMgbm90IHBhcnQgb2YgdGhhdCBNYWpvcgorQ29tcG9uZW50LCBhbmQgKGIpIHNlcnZlcyBvbmx5IHRvIGVuYWJsZSB1c2Ugb2YgdGhlIHdvcmsgd2l0aCB0aGF0CitNYWpvciBDb21wb25lbnQsIG9yIHRvIGltcGxlbWVudCBhIFN0YW5kYXJkIEludGVyZmFjZSBmb3Igd2hpY2ggYW4KK2ltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluIHNvdXJjZSBjb2RlIGZvcm0uICBBCisiTWFqb3IgQ29tcG9uZW50IiwgaW4gdGhpcyBjb250ZXh0LCBtZWFucyBhIG1ham9yIGVzc2VudGlhbCBjb21wb25lbnQKKyhrZXJuZWwsIHdpbmRvdyBzeXN0ZW0sIGFuZCBzbyBvbikgb2YgdGhlIHNwZWNpZmljIG9wZXJhdGluZyBzeXN0ZW0KKyhpZiBhbnkpIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHdvcmsgcnVucywgb3IgYSBjb21waWxlciB1c2VkIHRvCitwcm9kdWNlIHRoZSB3b3JrLCBvciBhbiBvYmplY3QgY29kZSBpbnRlcnByZXRlciB1c2VkIHRvIHJ1biBpdC4KKworICBUaGUgIkNvcnJlc3BvbmRpbmcgU291cmNlIiBmb3IgYSB3b3JrIGluIG9iamVjdCBjb2RlIGZvcm0gbWVhbnMgYWxsCit0aGUgc291cmNlIGNvZGUgbmVlZGVkIHRvIGdlbmVyYXRlLCBpbnN0YWxsLCBhbmQgKGZvciBhbiBleGVjdXRhYmxlCit3b3JrKSBydW4gdGhlIG9iamVjdCBjb2RlIGFuZCB0byBtb2RpZnkgdGhlIHdvcmssIGluY2x1ZGluZyBzY3JpcHRzIHRvCitjb250cm9sIHRob3NlIGFjdGl2aXRpZXMuICBIb3dldmVyLCBpdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSB3b3JrJ3MKK1N5c3RlbSBMaWJyYXJpZXMsIG9yIGdlbmVyYWwtcHVycG9zZSB0b29scyBvciBnZW5lcmFsbHkgYXZhaWxhYmxlIGZyZWUKK3Byb2dyYW1zIHdoaWNoIGFyZSB1c2VkIHVubW9kaWZpZWQgaW4gcGVyZm9ybWluZyB0aG9zZSBhY3Rpdml0aWVzIGJ1dAord2hpY2ggYXJlIG5vdCBwYXJ0IG9mIHRoZSB3b3JrLiAgRm9yIGV4YW1wbGUsIENvcnJlc3BvbmRpbmcgU291cmNlCitpbmNsdWRlcyBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcyBhc3NvY2lhdGVkIHdpdGggc291cmNlIGZpbGVzIGZvcgordGhlIHdvcmssIGFuZCB0aGUgc291cmNlIGNvZGUgZm9yIHNoYXJlZCBsaWJyYXJpZXMgYW5kIGR5bmFtaWNhbGx5CitsaW5rZWQgc3VicHJvZ3JhbXMgdGhhdCB0aGUgd29yayBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gcmVxdWlyZSwKK3N1Y2ggYXMgYnkgaW50aW1hdGUgZGF0YSBjb21tdW5pY2F0aW9uIG9yIGNvbnRyb2wgZmxvdyBiZXR3ZWVuIHRob3NlCitzdWJwcm9ncmFtcyBhbmQgb3RoZXIgcGFydHMgb2YgdGhlIHdvcmsuCisKKyAgVGhlIENvcnJlc3BvbmRpbmcgU291cmNlIG5lZWQgbm90IGluY2x1ZGUgYW55dGhpbmcgdGhhdCB1c2VycworY2FuIHJlZ2VuZXJhdGUgYXV0b21hdGljYWxseSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBDb3JyZXNwb25kaW5nCitTb3VyY2UuCisKKyAgVGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGZvciBhIHdvcmsgaW4gc291cmNlIGNvZGUgZm9ybSBpcyB0aGF0CitzYW1lIHdvcmsuCisKKyAgMi4gQmFzaWMgUGVybWlzc2lvbnMuCisKKyAgQWxsIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSBhcmUgZ3JhbnRlZCBmb3IgdGhlIHRlcm0gb2YKK2NvcHlyaWdodCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGFyZSBpcnJldm9jYWJsZSBwcm92aWRlZCB0aGUgc3RhdGVkCitjb25kaXRpb25zIGFyZSBtZXQuICBUaGlzIExpY2Vuc2UgZXhwbGljaXRseSBhZmZpcm1zIHlvdXIgdW5saW1pdGVkCitwZXJtaXNzaW9uIHRvIHJ1biB0aGUgdW5tb2RpZmllZCBQcm9ncmFtLiAgVGhlIG91dHB1dCBmcm9tIHJ1bm5pbmcgYQorY292ZXJlZCB3b3JrIGlzIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlIG9ubHkgaWYgdGhlIG91dHB1dCwgZ2l2ZW4gaXRzCitjb250ZW50LCBjb25zdGl0dXRlcyBhIGNvdmVyZWQgd29yay4gIFRoaXMgTGljZW5zZSBhY2tub3dsZWRnZXMgeW91cgorcmlnaHRzIG9mIGZhaXIgdXNlIG9yIG90aGVyIGVxdWl2YWxlbnQsIGFzIHByb3ZpZGVkIGJ5IGNvcHlyaWdodCBsYXcuCisKKyAgWW91IG1heSBtYWtlLCBydW4gYW5kIHByb3BhZ2F0ZSBjb3ZlcmVkIHdvcmtzIHRoYXQgeW91IGRvIG5vdAorY29udmV5LCB3aXRob3V0IGNvbmRpdGlvbnMgc28gbG9uZyBhcyB5b3VyIGxpY2Vuc2Ugb3RoZXJ3aXNlIHJlbWFpbnMKK2luIGZvcmNlLiAgWW91IG1heSBjb252ZXkgY292ZXJlZCB3b3JrcyB0byBvdGhlcnMgZm9yIHRoZSBzb2xlIHB1cnBvc2UKK29mIGhhdmluZyB0aGVtIG1ha2UgbW9kaWZpY2F0aW9ucyBleGNsdXNpdmVseSBmb3IgeW91LCBvciBwcm92aWRlIHlvdQord2l0aCBmYWNpbGl0aWVzIGZvciBydW5uaW5nIHRob3NlIHdvcmtzLCBwcm92aWRlZCB0aGF0IHlvdSBjb21wbHkgd2l0aAordGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBpbiBjb252ZXlpbmcgYWxsIG1hdGVyaWFsIGZvciB3aGljaCB5b3UgZG8KK25vdCBjb250cm9sIGNvcHlyaWdodC4gIFRob3NlIHRodXMgbWFraW5nIG9yIHJ1bm5pbmcgdGhlIGNvdmVyZWQgd29ya3MKK2ZvciB5b3UgbXVzdCBkbyBzbyBleGNsdXNpdmVseSBvbiB5b3VyIGJlaGFsZiwgdW5kZXIgeW91ciBkaXJlY3Rpb24KK2FuZCBjb250cm9sLCBvbiB0ZXJtcyB0aGF0IHByb2hpYml0IHRoZW0gZnJvbSBtYWtpbmcgYW55IGNvcGllcyBvZgoreW91ciBjb3B5cmlnaHRlZCBtYXRlcmlhbCBvdXRzaWRlIHRoZWlyIHJlbGF0aW9uc2hpcCB3aXRoIHlvdS4KKworICBDb252ZXlpbmcgdW5kZXIgYW55IG90aGVyIGNpcmN1bXN0YW5jZXMgaXMgcGVybWl0dGVkIHNvbGVseSB1bmRlcgordGhlIGNvbmRpdGlvbnMgc3RhdGVkIGJlbG93LiAgU3VibGljZW5zaW5nIGlzIG5vdCBhbGxvd2VkOyBzZWN0aW9uIDEwCittYWtlcyBpdCB1bm5lY2Vzc2FyeS4KKworICAzLiBQcm90ZWN0aW5nIFVzZXJzJyBMZWdhbCBSaWdodHMgRnJvbSBBbnRpLUNpcmN1bXZlbnRpb24gTGF3LgorCisgIE5vIGNvdmVyZWQgd29yayBzaGFsbCBiZSBkZWVtZWQgcGFydCBvZiBhbiBlZmZlY3RpdmUgdGVjaG5vbG9naWNhbAorbWVhc3VyZSB1bmRlciBhbnkgYXBwbGljYWJsZSBsYXcgZnVsZmlsbGluZyBvYmxpZ2F0aW9ucyB1bmRlciBhcnRpY2xlCisxMSBvZiB0aGUgV0lQTyBjb3B5cmlnaHQgdHJlYXR5IGFkb3B0ZWQgb24gMjAgRGVjZW1iZXIgMTk5Niwgb3IKK3NpbWlsYXIgbGF3cyBwcm9oaWJpdGluZyBvciByZXN0cmljdGluZyBjaXJjdW12ZW50aW9uIG9mIHN1Y2gKK21lYXN1cmVzLgorCisgIFdoZW4geW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgeW91IHdhaXZlIGFueSBsZWdhbCBwb3dlciB0byBmb3JiaWQKK2NpcmN1bXZlbnRpb24gb2YgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0byB0aGUgZXh0ZW50IHN1Y2ggY2lyY3VtdmVudGlvbgoraXMgZWZmZWN0ZWQgYnkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0bwordGhlIGNvdmVyZWQgd29yaywgYW5kIHlvdSBkaXNjbGFpbSBhbnkgaW50ZW50aW9uIHRvIGxpbWl0IG9wZXJhdGlvbiBvcgorbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGFzIGEgbWVhbnMgb2YgZW5mb3JjaW5nLCBhZ2FpbnN0IHRoZSB3b3JrJ3MKK3VzZXJzLCB5b3VyIG9yIHRoaXJkIHBhcnRpZXMnIGxlZ2FsIHJpZ2h0cyB0byBmb3JiaWQgY2lyY3VtdmVudGlvbiBvZgordGVjaG5vbG9naWNhbCBtZWFzdXJlcy4KKworICA0LiBDb252ZXlpbmcgVmVyYmF0aW0gQ29waWVzLgorCisgIFlvdSBtYXkgY29udmV5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzIHNvdXJjZSBjb2RlIGFzIHlvdQorcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UgY29uc3BpY3VvdXNseSBhbmQKK2FwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZTsKK2tlZXAgaW50YWN0IGFsbCBub3RpY2VzIHN0YXRpbmcgdGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFueQorbm9uLXBlcm1pc3NpdmUgdGVybXMgYWRkZWQgaW4gYWNjb3JkIHdpdGggc2VjdGlvbiA3IGFwcGx5IHRvIHRoZSBjb2RlOwora2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgb2YgdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OyBhbmQgZ2l2ZSBhbGwKK3JlY2lwaWVudHMgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCisgIFlvdSBtYXkgY2hhcmdlIGFueSBwcmljZSBvciBubyBwcmljZSBmb3IgZWFjaCBjb3B5IHRoYXQgeW91IGNvbnZleSwKK2FuZCB5b3UgbWF5IG9mZmVyIHN1cHBvcnQgb3Igd2FycmFudHkgcHJvdGVjdGlvbiBmb3IgYSBmZWUuCisKKyAgNS4gQ29udmV5aW5nIE1vZGlmaWVkIFNvdXJjZSBWZXJzaW9ucy4KKworICBZb3UgbWF5IGNvbnZleSBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIG9yIHRoZSBtb2RpZmljYXRpb25zIHRvCitwcm9kdWNlIGl0IGZyb20gdGhlIFByb2dyYW0sIGluIHRoZSBmb3JtIG9mIHNvdXJjZSBjb2RlIHVuZGVyIHRoZQordGVybXMgb2Ygc2VjdGlvbiA0LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgICBhKSBUaGUgd29yayBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgbW9kaWZpZWQKKyAgICBpdCwgYW5kIGdpdmluZyBhIHJlbGV2YW50IGRhdGUuCisKKyAgICBiKSBUaGUgd29yayBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCBpdCBpcworICAgIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IGNvbmRpdGlvbnMgYWRkZWQgdW5kZXIgc2VjdGlvbgorICAgIDcuICBUaGlzIHJlcXVpcmVtZW50IG1vZGlmaWVzIHRoZSByZXF1aXJlbWVudCBpbiBzZWN0aW9uIDQgdG8KKyAgICAia2VlcCBpbnRhY3QgYWxsIG5vdGljZXMiLgorCisgICAgYykgWW91IG11c3QgbGljZW5zZSB0aGUgZW50aXJlIHdvcmssIGFzIGEgd2hvbGUsIHVuZGVyIHRoaXMKKyAgICBMaWNlbnNlIHRvIGFueW9uZSB3aG8gY29tZXMgaW50byBwb3NzZXNzaW9uIG9mIGEgY29weS4gIFRoaXMKKyAgICBMaWNlbnNlIHdpbGwgdGhlcmVmb3JlIGFwcGx5LCBhbG9uZyB3aXRoIGFueSBhcHBsaWNhYmxlIHNlY3Rpb24gNworICAgIGFkZGl0aW9uYWwgdGVybXMsIHRvIHRoZSB3aG9sZSBvZiB0aGUgd29yaywgYW5kIGFsbCBpdHMgcGFydHMsCisgICAgcmVnYXJkbGVzcyBvZiBob3cgdGhleSBhcmUgcGFja2FnZWQuICBUaGlzIExpY2Vuc2UgZ2l2ZXMgbm8KKyAgICBwZXJtaXNzaW9uIHRvIGxpY2Vuc2UgdGhlIHdvcmsgaW4gYW55IG90aGVyIHdheSwgYnV0IGl0IGRvZXMgbm90CisgICAgaW52YWxpZGF0ZSBzdWNoIHBlcm1pc3Npb24gaWYgeW91IGhhdmUgc2VwYXJhdGVseSByZWNlaXZlZCBpdC4KKworICAgIGQpIElmIHRoZSB3b3JrIGhhcyBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZXMsIGVhY2ggbXVzdCBkaXNwbGF5CisgICAgQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlczsgaG93ZXZlciwgaWYgdGhlIFByb2dyYW0gaGFzIGludGVyYWN0aXZlCisgICAgaW50ZXJmYWNlcyB0aGF0IGRvIG5vdCBkaXNwbGF5IEFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXMsIHlvdXIKKyAgICB3b3JrIG5lZWQgbm90IG1ha2UgdGhlbSBkbyBzby4KKworICBBIGNvbXBpbGF0aW9uIG9mIGEgY292ZXJlZCB3b3JrIHdpdGggb3RoZXIgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50Cit3b3Jrcywgd2hpY2ggYXJlIG5vdCBieSB0aGVpciBuYXR1cmUgZXh0ZW5zaW9ucyBvZiB0aGUgY292ZXJlZCB3b3JrLAorYW5kIHdoaWNoIGFyZSBub3QgY29tYmluZWQgd2l0aCBpdCBzdWNoIGFzIHRvIGZvcm0gYSBsYXJnZXIgcHJvZ3JhbSwKK2luIG9yIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtLCBpcyBjYWxsZWQgYW4KKyJhZ2dyZWdhdGUiIGlmIHRoZSBjb21waWxhdGlvbiBhbmQgaXRzIHJlc3VsdGluZyBjb3B5cmlnaHQgYXJlIG5vdAordXNlZCB0byBsaW1pdCB0aGUgYWNjZXNzIG9yIGxlZ2FsIHJpZ2h0cyBvZiB0aGUgY29tcGlsYXRpb24ncyB1c2VycworYmV5b25kIHdoYXQgdGhlIGluZGl2aWR1YWwgd29ya3MgcGVybWl0LiAgSW5jbHVzaW9uIG9mIGEgY292ZXJlZCB3b3JrCitpbiBhbiBhZ2dyZWdhdGUgZG9lcyBub3QgY2F1c2UgdGhpcyBMaWNlbnNlIHRvIGFwcGx5IHRvIHRoZSBvdGhlcgorcGFydHMgb2YgdGhlIGFnZ3JlZ2F0ZS4KKworICA2LiBDb252ZXlpbmcgTm9uLVNvdXJjZSBGb3Jtcy4KKworICBZb3UgbWF5IGNvbnZleSBhIGNvdmVyZWQgd29yayBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcworb2Ygc2VjdGlvbnMgNCBhbmQgNSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBjb252ZXkgdGhlCittYWNoaW5lLXJlYWRhYmxlIENvcnJlc3BvbmRpbmcgU291cmNlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsCitpbiBvbmUgb2YgdGhlc2Ugd2F5czoKKworICAgIGEpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QKKyAgICAoaW5jbHVkaW5nIGEgcGh5c2ljYWwgZGlzdHJpYnV0aW9uIG1lZGl1bSksIGFjY29tcGFuaWVkIGJ5IHRoZQorICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGZpeGVkIG9uIGEgZHVyYWJsZSBwaHlzaWNhbCBtZWRpdW0KKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KKworICAgIGIpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QKKyAgICAoaW5jbHVkaW5nIGEgcGh5c2ljYWwgZGlzdHJpYnV0aW9uIG1lZGl1bSksIGFjY29tcGFuaWVkIGJ5IGEKKyAgICB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUgeWVhcnMgYW5kIHZhbGlkIGZvciBhcworICAgIGxvbmcgYXMgeW91IG9mZmVyIHNwYXJlIHBhcnRzIG9yIGN1c3RvbWVyIHN1cHBvcnQgZm9yIHRoYXQgcHJvZHVjdAorICAgIG1vZGVsLCB0byBnaXZlIGFueW9uZSB3aG8gcG9zc2Vzc2VzIHRoZSBvYmplY3QgY29kZSBlaXRoZXIgKDEpIGEKKyAgICBjb3B5IG9mIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYWxsIHRoZSBzb2Z0d2FyZSBpbiB0aGUKKyAgICBwcm9kdWN0IHRoYXQgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIG9uIGEgZHVyYWJsZSBwaHlzaWNhbAorICAgIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZSwgZm9yIGEgcHJpY2Ugbm8KKyAgICBtb3JlIHRoYW4geW91ciByZWFzb25hYmxlIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHRoaXMKKyAgICBjb252ZXlpbmcgb2Ygc291cmNlLCBvciAoMikgYWNjZXNzIHRvIGNvcHkgdGhlCisgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UgZnJvbSBhIG5ldHdvcmsgc2VydmVyIGF0IG5vIGNoYXJnZS4KKworICAgIGMpIENvbnZleSBpbmRpdmlkdWFsIGNvcGllcyBvZiB0aGUgb2JqZWN0IGNvZGUgd2l0aCBhIGNvcHkgb2YgdGhlCisgICAgd3JpdHRlbiBvZmZlciB0byBwcm92aWRlIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZS4gIFRoaXMKKyAgICBhbHRlcm5hdGl2ZSBpcyBhbGxvd2VkIG9ubHkgb2NjYXNpb25hbGx5IGFuZCBub25jb21tZXJjaWFsbHksIGFuZAorICAgIG9ubHkgaWYgeW91IHJlY2VpdmVkIHRoZSBvYmplY3QgY29kZSB3aXRoIHN1Y2ggYW4gb2ZmZXIsIGluIGFjY29yZAorICAgIHdpdGggc3Vic2VjdGlvbiA2Yi4KKworICAgIGQpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIGZyb20gYSBkZXNpZ25hdGVkCisgICAgcGxhY2UgKGdyYXRpcyBvciBmb3IgYSBjaGFyZ2UpLCBhbmQgb2ZmZXIgZXF1aXZhbGVudCBhY2Nlc3MgdG8gdGhlCisgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UgaW4gdGhlIHNhbWUgd2F5IHRocm91Z2ggdGhlIHNhbWUgcGxhY2UgYXQgbm8KKyAgICBmdXJ0aGVyIGNoYXJnZS4gIFlvdSBuZWVkIG5vdCByZXF1aXJlIHJlY2lwaWVudHMgdG8gY29weSB0aGUKKyAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4gIElmIHRoZSBwbGFjZSB0bworICAgIGNvcHkgdGhlIG9iamVjdCBjb2RlIGlzIGEgbmV0d29yayBzZXJ2ZXIsIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZQorICAgIG1heSBiZSBvbiBhIGRpZmZlcmVudCBzZXJ2ZXIgKG9wZXJhdGVkIGJ5IHlvdSBvciBhIHRoaXJkIHBhcnR5KQorICAgIHRoYXQgc3VwcG9ydHMgZXF1aXZhbGVudCBjb3B5aW5nIGZhY2lsaXRpZXMsIHByb3ZpZGVkIHlvdSBtYWludGFpbgorICAgIGNsZWFyIGRpcmVjdGlvbnMgbmV4dCB0byB0aGUgb2JqZWN0IGNvZGUgc2F5aW5nIHdoZXJlIHRvIGZpbmQgdGhlCisgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBSZWdhcmRsZXNzIG9mIHdoYXQgc2VydmVyIGhvc3RzIHRoZQorICAgIENvcnJlc3BvbmRpbmcgU291cmNlLCB5b3UgcmVtYWluIG9ibGlnYXRlZCB0byBlbnN1cmUgdGhhdCBpdCBpcworICAgIGF2YWlsYWJsZSBmb3IgYXMgbG9uZyBhcyBuZWVkZWQgdG8gc2F0aXNmeSB0aGVzZSByZXF1aXJlbWVudHMuCisKKyAgICBlKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIHVzaW5nIHBlZXItdG8tcGVlciB0cmFuc21pc3Npb24sIHByb3ZpZGVkCisgICAgeW91IGluZm9ybSBvdGhlciBwZWVycyB3aGVyZSB0aGUgb2JqZWN0IGNvZGUgYW5kIENvcnJlc3BvbmRpbmcKKyAgICBTb3VyY2Ugb2YgdGhlIHdvcmsgYXJlIGJlaW5nIG9mZmVyZWQgdG8gdGhlIGdlbmVyYWwgcHVibGljIGF0IG5vCisgICAgY2hhcmdlIHVuZGVyIHN1YnNlY3Rpb24gNmQuCisKKyAgQSBzZXBhcmFibGUgcG9ydGlvbiBvZiB0aGUgb2JqZWN0IGNvZGUsIHdob3NlIHNvdXJjZSBjb2RlIGlzIGV4Y2x1ZGVkCitmcm9tIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBhcyBhIFN5c3RlbSBMaWJyYXJ5LCBuZWVkIG5vdCBiZQoraW5jbHVkZWQgaW4gY29udmV5aW5nIHRoZSBvYmplY3QgY29kZSB3b3JrLgorCisgIEEgIlVzZXIgUHJvZHVjdCIgaXMgZWl0aGVyICgxKSBhICJjb25zdW1lciBwcm9kdWN0Iiwgd2hpY2ggbWVhbnMgYW55Cit0YW5naWJsZSBwZXJzb25hbCBwcm9wZXJ0eSB3aGljaCBpcyBub3JtYWxseSB1c2VkIGZvciBwZXJzb25hbCwgZmFtaWx5LAorb3IgaG91c2Vob2xkIHB1cnBvc2VzLCBvciAoMikgYW55dGhpbmcgZGVzaWduZWQgb3Igc29sZCBmb3IgaW5jb3Jwb3JhdGlvbgoraW50byBhIGR3ZWxsaW5nLiAgSW4gZGV0ZXJtaW5pbmcgd2hldGhlciBhIHByb2R1Y3QgaXMgYSBjb25zdW1lciBwcm9kdWN0LAorZG91YnRmdWwgY2FzZXMgc2hhbGwgYmUgcmVzb2x2ZWQgaW4gZmF2b3Igb2YgY292ZXJhZ2UuICBGb3IgYSBwYXJ0aWN1bGFyCitwcm9kdWN0IHJlY2VpdmVkIGJ5IGEgcGFydGljdWxhciB1c2VyLCAibm9ybWFsbHkgdXNlZCIgcmVmZXJzIHRvIGEKK3R5cGljYWwgb3IgY29tbW9uIHVzZSBvZiB0aGF0IGNsYXNzIG9mIHByb2R1Y3QsIHJlZ2FyZGxlc3Mgb2YgdGhlIHN0YXR1cworb2YgdGhlIHBhcnRpY3VsYXIgdXNlciBvciBvZiB0aGUgd2F5IGluIHdoaWNoIHRoZSBwYXJ0aWN1bGFyIHVzZXIKK2FjdHVhbGx5IHVzZXMsIG9yIGV4cGVjdHMgb3IgaXMgZXhwZWN0ZWQgdG8gdXNlLCB0aGUgcHJvZHVjdC4gIEEgcHJvZHVjdAoraXMgYSBjb25zdW1lciBwcm9kdWN0IHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgcHJvZHVjdCBoYXMgc3Vic3RhbnRpYWwKK2NvbW1lcmNpYWwsIGluZHVzdHJpYWwgb3Igbm9uLWNvbnN1bWVyIHVzZXMsIHVubGVzcyBzdWNoIHVzZXMgcmVwcmVzZW50Cit0aGUgb25seSBzaWduaWZpY2FudCBtb2RlIG9mIHVzZSBvZiB0aGUgcHJvZHVjdC4KKworICAiSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIiBmb3IgYSBVc2VyIFByb2R1Y3QgbWVhbnMgYW55IG1ldGhvZHMsCitwcm9jZWR1cmVzLCBhdXRob3JpemF0aW9uIGtleXMsIG9yIG90aGVyIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIGluc3RhbGwKK2FuZCBleGVjdXRlIG1vZGlmaWVkIHZlcnNpb25zIG9mIGEgY292ZXJlZCB3b3JrIGluIHRoYXQgVXNlciBQcm9kdWN0IGZyb20KK2EgbW9kaWZpZWQgdmVyc2lvbiBvZiBpdHMgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBUaGUgaW5mb3JtYXRpb24gbXVzdAorc3VmZmljZSB0byBlbnN1cmUgdGhhdCB0aGUgY29udGludWVkIGZ1bmN0aW9uaW5nIG9mIHRoZSBtb2RpZmllZCBvYmplY3QKK2NvZGUgaXMgaW4gbm8gY2FzZSBwcmV2ZW50ZWQgb3IgaW50ZXJmZXJlZCB3aXRoIHNvbGVseSBiZWNhdXNlCittb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZS4KKworICBJZiB5b3UgY29udmV5IGFuIG9iamVjdCBjb2RlIHdvcmsgdW5kZXIgdGhpcyBzZWN0aW9uIGluLCBvciB3aXRoLCBvcgorc3BlY2lmaWNhbGx5IGZvciB1c2UgaW4sIGEgVXNlciBQcm9kdWN0LCBhbmQgdGhlIGNvbnZleWluZyBvY2N1cnMgYXMKK3BhcnQgb2YgYSB0cmFuc2FjdGlvbiBpbiB3aGljaCB0aGUgcmlnaHQgb2YgcG9zc2Vzc2lvbiBhbmQgdXNlIG9mIHRoZQorVXNlciBQcm9kdWN0IGlzIHRyYW5zZmVycmVkIHRvIHRoZSByZWNpcGllbnQgaW4gcGVycGV0dWl0eSBvciBmb3IgYQorZml4ZWQgdGVybSAocmVnYXJkbGVzcyBvZiBob3cgdGhlIHRyYW5zYWN0aW9uIGlzIGNoYXJhY3Rlcml6ZWQpLCB0aGUKK0NvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkIHVuZGVyIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGFjY29tcGFuaWVkCitieSB0aGUgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uLiAgQnV0IHRoaXMgcmVxdWlyZW1lbnQgZG9lcyBub3QgYXBwbHkKK2lmIG5laXRoZXIgeW91IG5vciBhbnkgdGhpcmQgcGFydHkgcmV0YWlucyB0aGUgYWJpbGl0eSB0byBpbnN0YWxsCittb2RpZmllZCBvYmplY3QgY29kZSBvbiB0aGUgVXNlciBQcm9kdWN0IChmb3IgZXhhbXBsZSwgdGhlIHdvcmsgaGFzCitiZWVuIGluc3RhbGxlZCBpbiBST00pLgorCisgIFRoZSByZXF1aXJlbWVudCB0byBwcm92aWRlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBkb2VzIG5vdCBpbmNsdWRlIGEKK3JlcXVpcmVtZW50IHRvIGNvbnRpbnVlIHRvIHByb3ZpZGUgc3VwcG9ydCBzZXJ2aWNlLCB3YXJyYW50eSwgb3IgdXBkYXRlcworZm9yIGEgd29yayB0aGF0IGhhcyBiZWVuIG1vZGlmaWVkIG9yIGluc3RhbGxlZCBieSB0aGUgcmVjaXBpZW50LCBvciBmb3IKK3RoZSBVc2VyIFByb2R1Y3QgaW4gd2hpY2ggaXQgaGFzIGJlZW4gbW9kaWZpZWQgb3IgaW5zdGFsbGVkLiAgQWNjZXNzIHRvIGEKK25ldHdvcmsgbWF5IGJlIGRlbmllZCB3aGVuIHRoZSBtb2RpZmljYXRpb24gaXRzZWxmIG1hdGVyaWFsbHkgYW5kCithZHZlcnNlbHkgYWZmZWN0cyB0aGUgb3BlcmF0aW9uIG9mIHRoZSBuZXR3b3JrIG9yIHZpb2xhdGVzIHRoZSBydWxlcyBhbmQKK3Byb3RvY29scyBmb3IgY29tbXVuaWNhdGlvbiBhY3Jvc3MgdGhlIG5ldHdvcmsuCisKKyAgQ29ycmVzcG9uZGluZyBTb3VyY2UgY29udmV5ZWQsIGFuZCBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24gcHJvdmlkZWQsCitpbiBhY2NvcmQgd2l0aCB0aGlzIHNlY3Rpb24gbXVzdCBiZSBpbiBhIGZvcm1hdCB0aGF0IGlzIHB1YmxpY2x5Citkb2N1bWVudGVkIChhbmQgd2l0aCBhbiBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBpbgorc291cmNlIGNvZGUgZm9ybSksIGFuZCBtdXN0IHJlcXVpcmUgbm8gc3BlY2lhbCBwYXNzd29yZCBvciBrZXkgZm9yCit1bnBhY2tpbmcsIHJlYWRpbmcgb3IgY29weWluZy4KKworICA3LiBBZGRpdGlvbmFsIFRlcm1zLgorCisgICJBZGRpdGlvbmFsIHBlcm1pc3Npb25zIiBhcmUgdGVybXMgdGhhdCBzdXBwbGVtZW50IHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlIGJ5IG1ha2luZyBleGNlcHRpb25zIGZyb20gb25lIG9yIG1vcmUgb2YgaXRzIGNvbmRpdGlvbnMuCitBZGRpdGlvbmFsIHBlcm1pc3Npb25zIHRoYXQgYXJlIGFwcGxpY2FibGUgdG8gdGhlIGVudGlyZSBQcm9ncmFtIHNoYWxsCitiZSB0cmVhdGVkIGFzIHRob3VnaCB0aGV5IHdlcmUgaW5jbHVkZWQgaW4gdGhpcyBMaWNlbnNlLCB0byB0aGUgZXh0ZW50Cit0aGF0IHRoZXkgYXJlIHZhbGlkIHVuZGVyIGFwcGxpY2FibGUgbGF3LiAgSWYgYWRkaXRpb25hbCBwZXJtaXNzaW9ucworYXBwbHkgb25seSB0byBwYXJ0IG9mIHRoZSBQcm9ncmFtLCB0aGF0IHBhcnQgbWF5IGJlIHVzZWQgc2VwYXJhdGVseQordW5kZXIgdGhvc2UgcGVybWlzc2lvbnMsIGJ1dCB0aGUgZW50aXJlIFByb2dyYW0gcmVtYWlucyBnb3Zlcm5lZCBieQordGhpcyBMaWNlbnNlIHdpdGhvdXQgcmVnYXJkIHRvIHRoZSBhZGRpdGlvbmFsIHBlcm1pc3Npb25zLgorCisgIFdoZW4geW91IGNvbnZleSBhIGNvcHkgb2YgYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgYXQgeW91ciBvcHRpb24KK3JlbW92ZSBhbnkgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBmcm9tIHRoYXQgY29weSwgb3IgZnJvbSBhbnkgcGFydCBvZgoraXQuICAoQWRkaXRpb25hbCBwZXJtaXNzaW9ucyBtYXkgYmUgd3JpdHRlbiB0byByZXF1aXJlIHRoZWlyIG93bgorcmVtb3ZhbCBpbiBjZXJ0YWluIGNhc2VzIHdoZW4geW91IG1vZGlmeSB0aGUgd29yay4pICBZb3UgbWF5IHBsYWNlCithZGRpdGlvbmFsIHBlcm1pc3Npb25zIG9uIG1hdGVyaWFsLCBhZGRlZCBieSB5b3UgdG8gYSBjb3ZlcmVkIHdvcmssCitmb3Igd2hpY2ggeW91IGhhdmUgb3IgY2FuIGdpdmUgYXBwcm9wcmlhdGUgY29weXJpZ2h0IHBlcm1pc3Npb24uCisKKyAgTm90d2l0aHN0YW5kaW5nIGFueSBvdGhlciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCBmb3IgbWF0ZXJpYWwgeW91CithZGQgdG8gYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgKGlmIGF1dGhvcml6ZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mCit0aGF0IG1hdGVyaWFsKSBzdXBwbGVtZW50IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0ZXJtczoKKworICAgIGEpIERpc2NsYWltaW5nIHdhcnJhbnR5IG9yIGxpbWl0aW5nIGxpYWJpbGl0eSBkaWZmZXJlbnRseSBmcm9tIHRoZQorICAgIHRlcm1zIG9mIHNlY3Rpb25zIDE1IGFuZCAxNiBvZiB0aGlzIExpY2Vuc2U7IG9yCisKKyAgICBiKSBSZXF1aXJpbmcgcHJlc2VydmF0aW9uIG9mIHNwZWNpZmllZCByZWFzb25hYmxlIGxlZ2FsIG5vdGljZXMgb3IKKyAgICBhdXRob3IgYXR0cmlidXRpb25zIGluIHRoYXQgbWF0ZXJpYWwgb3IgaW4gdGhlIEFwcHJvcHJpYXRlIExlZ2FsCisgICAgTm90aWNlcyBkaXNwbGF5ZWQgYnkgd29ya3MgY29udGFpbmluZyBpdDsgb3IKKworICAgIGMpIFByb2hpYml0aW5nIG1pc3JlcHJlc2VudGF0aW9uIG9mIHRoZSBvcmlnaW4gb2YgdGhhdCBtYXRlcmlhbCwgb3IKKyAgICByZXF1aXJpbmcgdGhhdCBtb2RpZmllZCB2ZXJzaW9ucyBvZiBzdWNoIG1hdGVyaWFsIGJlIG1hcmtlZCBpbgorICAgIHJlYXNvbmFibGUgd2F5cyBhcyBkaWZmZXJlbnQgZnJvbSB0aGUgb3JpZ2luYWwgdmVyc2lvbjsgb3IKKworICAgIGQpIExpbWl0aW5nIHRoZSB1c2UgZm9yIHB1YmxpY2l0eSBwdXJwb3NlcyBvZiBuYW1lcyBvZiBsaWNlbnNvcnMgb3IKKyAgICBhdXRob3JzIG9mIHRoZSBtYXRlcmlhbDsgb3IKKworICAgIGUpIERlY2xpbmluZyB0byBncmFudCByaWdodHMgdW5kZXIgdHJhZGVtYXJrIGxhdyBmb3IgdXNlIG9mIHNvbWUKKyAgICB0cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgb3Igc2VydmljZSBtYXJrczsgb3IKKworICAgIGYpIFJlcXVpcmluZyBpbmRlbW5pZmljYXRpb24gb2YgbGljZW5zb3JzIGFuZCBhdXRob3JzIG9mIHRoYXQKKyAgICBtYXRlcmlhbCBieSBhbnlvbmUgd2hvIGNvbnZleXMgdGhlIG1hdGVyaWFsIChvciBtb2RpZmllZCB2ZXJzaW9ucyBvZgorICAgIGl0KSB3aXRoIGNvbnRyYWN0dWFsIGFzc3VtcHRpb25zIG9mIGxpYWJpbGl0eSB0byB0aGUgcmVjaXBpZW50LCBmb3IKKyAgICBhbnkgbGlhYmlsaXR5IHRoYXQgdGhlc2UgY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgZGlyZWN0bHkgaW1wb3NlIG9uCisgICAgdGhvc2UgbGljZW5zb3JzIGFuZCBhdXRob3JzLgorCisgIEFsbCBvdGhlciBub24tcGVybWlzc2l2ZSBhZGRpdGlvbmFsIHRlcm1zIGFyZSBjb25zaWRlcmVkICJmdXJ0aGVyCityZXN0cmljdGlvbnMiIHdpdGhpbiB0aGUgbWVhbmluZyBvZiBzZWN0aW9uIDEwLiAgSWYgdGhlIFByb2dyYW0gYXMgeW91CityZWNlaXZlZCBpdCwgb3IgYW55IHBhcnQgb2YgaXQsIGNvbnRhaW5zIGEgbm90aWNlIHN0YXRpbmcgdGhhdCBpdCBpcworZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggYSB0ZXJtIHRoYXQgaXMgYSBmdXJ0aGVyCityZXN0cmljdGlvbiwgeW91IG1heSByZW1vdmUgdGhhdCB0ZXJtLiAgSWYgYSBsaWNlbnNlIGRvY3VtZW50IGNvbnRhaW5zCithIGZ1cnRoZXIgcmVzdHJpY3Rpb24gYnV0IHBlcm1pdHMgcmVsaWNlbnNpbmcgb3IgY29udmV5aW5nIHVuZGVyIHRoaXMKK0xpY2Vuc2UsIHlvdSBtYXkgYWRkIHRvIGEgY292ZXJlZCB3b3JrIG1hdGVyaWFsIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcworb2YgdGhhdCBsaWNlbnNlIGRvY3VtZW50LCBwcm92aWRlZCB0aGF0IHRoZSBmdXJ0aGVyIHJlc3RyaWN0aW9uIGRvZXMKK25vdCBzdXJ2aXZlIHN1Y2ggcmVsaWNlbnNpbmcgb3IgY29udmV5aW5nLgorCisgIElmIHlvdSBhZGQgdGVybXMgdG8gYSBjb3ZlcmVkIHdvcmsgaW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uLCB5b3UKK211c3QgcGxhY2UsIGluIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMsIGEgc3RhdGVtZW50IG9mIHRoZQorYWRkaXRpb25hbCB0ZXJtcyB0aGF0IGFwcGx5IHRvIHRob3NlIGZpbGVzLCBvciBhIG5vdGljZSBpbmRpY2F0aW5nCit3aGVyZSB0byBmaW5kIHRoZSBhcHBsaWNhYmxlIHRlcm1zLgorCisgIEFkZGl0aW9uYWwgdGVybXMsIHBlcm1pc3NpdmUgb3Igbm9uLXBlcm1pc3NpdmUsIG1heSBiZSBzdGF0ZWQgaW4gdGhlCitmb3JtIG9mIGEgc2VwYXJhdGVseSB3cml0dGVuIGxpY2Vuc2UsIG9yIHN0YXRlZCBhcyBleGNlcHRpb25zOwordGhlIGFib3ZlIHJlcXVpcmVtZW50cyBhcHBseSBlaXRoZXIgd2F5LgorCisgIDguIFRlcm1pbmF0aW9uLgorCisgIFlvdSBtYXkgbm90IHByb3BhZ2F0ZSBvciBtb2RpZnkgYSBjb3ZlcmVkIHdvcmsgZXhjZXB0IGFzIGV4cHJlc3NseQorcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIHByb3BhZ2F0ZSBvcgorbW9kaWZ5IGl0IGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyCit0aGlzIExpY2Vuc2UgKGluY2x1ZGluZyBhbnkgcGF0ZW50IGxpY2Vuc2VzIGdyYW50ZWQgdW5kZXIgdGhlIHRoaXJkCitwYXJhZ3JhcGggb2Ygc2VjdGlvbiAxMSkuCisKKyAgSG93ZXZlciwgaWYgeW91IGNlYXNlIGFsbCB2aW9sYXRpb24gb2YgdGhpcyBMaWNlbnNlLCB0aGVuIHlvdXIKK2xpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcyByZWluc3RhdGVkIChhKQorcHJvdmlzaW9uYWxseSwgdW5sZXNzIGFuZCB1bnRpbCB0aGUgY29weXJpZ2h0IGhvbGRlciBleHBsaWNpdGx5IGFuZAorZmluYWxseSB0ZXJtaW5hdGVzIHlvdXIgbGljZW5zZSwgYW5kIChiKSBwZXJtYW5lbnRseSwgaWYgdGhlIGNvcHlyaWdodAoraG9sZGVyIGZhaWxzIHRvIG5vdGlmeSB5b3Ugb2YgdGhlIHZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMKK3ByaW9yIHRvIDYwIGRheXMgYWZ0ZXIgdGhlIGNlc3NhdGlvbi4KKworICBNb3Jlb3ZlciwgeW91ciBsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMKK3JlaW5zdGF0ZWQgcGVybWFuZW50bHkgaWYgdGhlIGNvcHlyaWdodCBob2xkZXIgbm90aWZpZXMgeW91IG9mIHRoZQordmlvbGF0aW9uIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucywgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB5b3UgaGF2ZQorcmVjZWl2ZWQgbm90aWNlIG9mIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgKGZvciBhbnkgd29yaykgZnJvbSB0aGF0Citjb3B5cmlnaHQgaG9sZGVyLCBhbmQgeW91IGN1cmUgdGhlIHZpb2xhdGlvbiBwcmlvciB0byAzMCBkYXlzIGFmdGVyCit5b3VyIHJlY2VpcHQgb2YgdGhlIG5vdGljZS4KKworICBUZXJtaW5hdGlvbiBvZiB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIHNlY3Rpb24gZG9lcyBub3QgdGVybWluYXRlIHRoZQorbGljZW5zZXMgb2YgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMgb3IgcmlnaHRzIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2UuICBJZiB5b3VyIHJpZ2h0cyBoYXZlIGJlZW4gdGVybWluYXRlZCBhbmQgbm90IHBlcm1hbmVudGx5CityZWluc3RhdGVkLCB5b3UgZG8gbm90IHF1YWxpZnkgdG8gcmVjZWl2ZSBuZXcgbGljZW5zZXMgZm9yIHRoZSBzYW1lCittYXRlcmlhbCB1bmRlciBzZWN0aW9uIDEwLgorCisgIDkuIEFjY2VwdGFuY2UgTm90IFJlcXVpcmVkIGZvciBIYXZpbmcgQ29waWVzLgorCisgIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gcmVjZWl2ZSBvcgorcnVuIGEgY29weSBvZiB0aGUgUHJvZ3JhbS4gIEFuY2lsbGFyeSBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQgd29yaworb2NjdXJyaW5nIHNvbGVseSBhcyBhIGNvbnNlcXVlbmNlIG9mIHVzaW5nIHBlZXItdG8tcGVlciB0cmFuc21pc3Npb24KK3RvIHJlY2VpdmUgYSBjb3B5IGxpa2V3aXNlIGRvZXMgbm90IHJlcXVpcmUgYWNjZXB0YW5jZS4gIEhvd2V2ZXIsCitub3RoaW5nIG90aGVyIHRoYW4gdGhpcyBMaWNlbnNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBwcm9wYWdhdGUgb3IKK21vZGlmeSBhbnkgY292ZXJlZCB3b3JrLiAgVGhlc2UgYWN0aW9ucyBpbmZyaW5nZSBjb3B5cmlnaHQgaWYgeW91IGRvCitub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yIHByb3BhZ2F0aW5nIGEKK2NvdmVyZWQgd29yaywgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28uCisKKyAgMTAuIEF1dG9tYXRpYyBMaWNlbnNpbmcgb2YgRG93bnN0cmVhbSBSZWNpcGllbnRzLgorCisgIEVhY2ggdGltZSB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkKK3JlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvcnMsIHRvIHJ1biwgbW9kaWZ5IGFuZAorcHJvcGFnYXRlIHRoYXQgd29yaywgc3ViamVjdCB0byB0aGlzIExpY2Vuc2UuICBZb3UgYXJlIG5vdCByZXNwb25zaWJsZQorZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgd2l0aCB0aGlzIExpY2Vuc2UuCisKKyAgQW4gImVudGl0eSB0cmFuc2FjdGlvbiIgaXMgYSB0cmFuc2FjdGlvbiB0cmFuc2ZlcnJpbmcgY29udHJvbCBvZiBhbgorb3JnYW5pemF0aW9uLCBvciBzdWJzdGFudGlhbGx5IGFsbCBhc3NldHMgb2Ygb25lLCBvciBzdWJkaXZpZGluZyBhbgorb3JnYW5pemF0aW9uLCBvciBtZXJnaW5nIG9yZ2FuaXphdGlvbnMuICBJZiBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQKK3dvcmsgcmVzdWx0cyBmcm9tIGFuIGVudGl0eSB0cmFuc2FjdGlvbiwgZWFjaCBwYXJ0eSB0byB0aGF0Cit0cmFuc2FjdGlvbiB3aG8gcmVjZWl2ZXMgYSBjb3B5IG9mIHRoZSB3b3JrIGFsc28gcmVjZWl2ZXMgd2hhdGV2ZXIKK2xpY2Vuc2VzIHRvIHRoZSB3b3JrIHRoZSBwYXJ0eSdzIHByZWRlY2Vzc29yIGluIGludGVyZXN0IGhhZCBvciBjb3VsZAorZ2l2ZSB1bmRlciB0aGUgcHJldmlvdXMgcGFyYWdyYXBoLCBwbHVzIGEgcmlnaHQgdG8gcG9zc2Vzc2lvbiBvZiB0aGUKK0NvcnJlc3BvbmRpbmcgU291cmNlIG9mIHRoZSB3b3JrIGZyb20gdGhlIHByZWRlY2Vzc29yIGluIGludGVyZXN0LCBpZgordGhlIHByZWRlY2Vzc29yIGhhcyBpdCBvciBjYW4gZ2V0IGl0IHdpdGggcmVhc29uYWJsZSBlZmZvcnRzLgorCisgIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlciByZXN0cmljdGlvbnMgb24gdGhlIGV4ZXJjaXNlIG9mIHRoZQorcmlnaHRzIGdyYW50ZWQgb3IgYWZmaXJtZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgRm9yIGV4YW1wbGUsIHlvdSBtYXkKK25vdCBpbXBvc2UgYSBsaWNlbnNlIGZlZSwgcm95YWx0eSwgb3Igb3RoZXIgY2hhcmdlIGZvciBleGVyY2lzZSBvZgorcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgeW91IG1heSBub3QgaW5pdGlhdGUgbGl0aWdhdGlvbgorKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQKK2FueSBwYXRlbnQgY2xhaW0gaXMgaW5mcmluZ2VkIGJ5IG1ha2luZywgdXNpbmcsIHNlbGxpbmcsIG9mZmVyaW5nIGZvcgorc2FsZSwgb3IgaW1wb3J0aW5nIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uIG9mIGl0LgorCisgIDExLiBQYXRlbnRzLgorCisgIEEgImNvbnRyaWJ1dG9yIiBpcyBhIGNvcHlyaWdodCBob2xkZXIgd2hvIGF1dGhvcml6ZXMgdXNlIHVuZGVyIHRoaXMKK0xpY2Vuc2Ugb2YgdGhlIFByb2dyYW0gb3IgYSB3b3JrIG9uIHdoaWNoIHRoZSBQcm9ncmFtIGlzIGJhc2VkLiAgVGhlCit3b3JrIHRodXMgbGljZW5zZWQgaXMgY2FsbGVkIHRoZSBjb250cmlidXRvcidzICJjb250cmlidXRvciB2ZXJzaW9uIi4KKworICBBIGNvbnRyaWJ1dG9yJ3MgImVzc2VudGlhbCBwYXRlbnQgY2xhaW1zIiBhcmUgYWxsIHBhdGVudCBjbGFpbXMKK293bmVkIG9yIGNvbnRyb2xsZWQgYnkgdGhlIGNvbnRyaWJ1dG9yLCB3aGV0aGVyIGFscmVhZHkgYWNxdWlyZWQgb3IKK2hlcmVhZnRlciBhY3F1aXJlZCwgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgYnkgc29tZSBtYW5uZXIsIHBlcm1pdHRlZAorYnkgdGhpcyBMaWNlbnNlLCBvZiBtYWtpbmcsIHVzaW5nLCBvciBzZWxsaW5nIGl0cyBjb250cmlidXRvciB2ZXJzaW9uLAorYnV0IGRvIG5vdCBpbmNsdWRlIGNsYWltcyB0aGF0IHdvdWxkIGJlIGluZnJpbmdlZCBvbmx5IGFzIGEKK2NvbnNlcXVlbmNlIG9mIGZ1cnRoZXIgbW9kaWZpY2F0aW9uIG9mIHRoZSBjb250cmlidXRvciB2ZXJzaW9uLiAgRm9yCitwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBpbmNsdWRlcyB0aGUgcmlnaHQgdG8gZ3JhbnQKK3BhdGVudCBzdWJsaWNlbnNlcyBpbiBhIG1hbm5lciBjb25zaXN0ZW50IHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZgordGhpcyBMaWNlbnNlLgorCisgIEVhY2ggY29udHJpYnV0b3IgZ3JhbnRzIHlvdSBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciB0aGUgY29udHJpYnV0b3IncyBlc3NlbnRpYWwgcGF0ZW50IGNsYWltcywgdG8KK21ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCBhbmQgb3RoZXJ3aXNlIHJ1biwgbW9kaWZ5IGFuZAorcHJvcGFnYXRlIHRoZSBjb250ZW50cyBvZiBpdHMgY29udHJpYnV0b3IgdmVyc2lvbi4KKworICBJbiB0aGUgZm9sbG93aW5nIHRocmVlIHBhcmFncmFwaHMsIGEgInBhdGVudCBsaWNlbnNlIiBpcyBhbnkgZXhwcmVzcworYWdyZWVtZW50IG9yIGNvbW1pdG1lbnQsIGhvd2V2ZXIgZGVub21pbmF0ZWQsIG5vdCB0byBlbmZvcmNlIGEgcGF0ZW50Cisoc3VjaCBhcyBhbiBleHByZXNzIHBlcm1pc3Npb24gdG8gcHJhY3RpY2UgYSBwYXRlbnQgb3IgY292ZW5hbnQgbm90IHRvCitzdWUgZm9yIHBhdGVudCBpbmZyaW5nZW1lbnQpLiAgVG8gImdyYW50IiBzdWNoIGEgcGF0ZW50IGxpY2Vuc2UgdG8gYQorcGFydHkgbWVhbnMgdG8gbWFrZSBzdWNoIGFuIGFncmVlbWVudCBvciBjb21taXRtZW50IG5vdCB0byBlbmZvcmNlIGEKK3BhdGVudCBhZ2FpbnN0IHRoZSBwYXJ0eS4KKworICBJZiB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCBrbm93aW5nbHkgcmVseWluZyBvbiBhIHBhdGVudCBsaWNlbnNlLAorYW5kIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBpcyBub3QgYXZhaWxhYmxlIGZvciBhbnlvbmUKK3RvIGNvcHksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCB0aHJvdWdoIGEKK3B1YmxpY2x5IGF2YWlsYWJsZSBuZXR3b3JrIHNlcnZlciBvciBvdGhlciByZWFkaWx5IGFjY2Vzc2libGUgbWVhbnMsCit0aGVuIHlvdSBtdXN0IGVpdGhlciAoMSkgY2F1c2UgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIHRvIGJlIHNvCithdmFpbGFibGUsIG9yICgyKSBhcnJhbmdlIHRvIGRlcHJpdmUgeW91cnNlbGYgb2YgdGhlIGJlbmVmaXQgb2YgdGhlCitwYXRlbnQgbGljZW5zZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIHdvcmssIG9yICgzKSBhcnJhbmdlLCBpbiBhIG1hbm5lcgorY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlLCB0byBleHRlbmQgdGhlIHBhdGVudAorbGljZW5zZSB0byBkb3duc3RyZWFtIHJlY2lwaWVudHMuICAiS25vd2luZ2x5IHJlbHlpbmciIG1lYW5zIHlvdSBoYXZlCithY3R1YWwga25vd2xlZGdlIHRoYXQsIGJ1dCBmb3IgdGhlIHBhdGVudCBsaWNlbnNlLCB5b3VyIGNvbnZleWluZyB0aGUKK2NvdmVyZWQgd29yayBpbiBhIGNvdW50cnksIG9yIHlvdXIgcmVjaXBpZW50J3MgdXNlIG9mIHRoZSBjb3ZlcmVkIHdvcmsKK2luIGEgY291bnRyeSwgd291bGQgaW5mcmluZ2Ugb25lIG9yIG1vcmUgaWRlbnRpZmlhYmxlIHBhdGVudHMgaW4gdGhhdAorY291bnRyeSB0aGF0IHlvdSBoYXZlIHJlYXNvbiB0byBiZWxpZXZlIGFyZSB2YWxpZC4KKworICBJZiwgcHVyc3VhbnQgdG8gb3IgaW4gY29ubmVjdGlvbiB3aXRoIGEgc2luZ2xlIHRyYW5zYWN0aW9uIG9yCithcnJhbmdlbWVudCwgeW91IGNvbnZleSwgb3IgcHJvcGFnYXRlIGJ5IHByb2N1cmluZyBjb252ZXlhbmNlIG9mLCBhCitjb3ZlcmVkIHdvcmssIGFuZCBncmFudCBhIHBhdGVudCBsaWNlbnNlIHRvIHNvbWUgb2YgdGhlIHBhcnRpZXMKK3JlY2VpdmluZyB0aGUgY292ZXJlZCB3b3JrIGF1dGhvcml6aW5nIHRoZW0gdG8gdXNlLCBwcm9wYWdhdGUsIG1vZGlmeQorb3IgY29udmV5IGEgc3BlY2lmaWMgY29weSBvZiB0aGUgY292ZXJlZCB3b3JrLCB0aGVuIHRoZSBwYXRlbnQgbGljZW5zZQoreW91IGdyYW50IGlzIGF1dG9tYXRpY2FsbHkgZXh0ZW5kZWQgdG8gYWxsIHJlY2lwaWVudHMgb2YgdGhlIGNvdmVyZWQKK3dvcmsgYW5kIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIEEgcGF0ZW50IGxpY2Vuc2UgaXMgImRpc2NyaW1pbmF0b3J5IiBpZiBpdCBkb2VzIG5vdCBpbmNsdWRlIHdpdGhpbgordGhlIHNjb3BlIG9mIGl0cyBjb3ZlcmFnZSwgcHJvaGliaXRzIHRoZSBleGVyY2lzZSBvZiwgb3IgaXMKK2NvbmRpdGlvbmVkIG9uIHRoZSBub24tZXhlcmNpc2Ugb2Ygb25lIG9yIG1vcmUgb2YgdGhlIHJpZ2h0cyB0aGF0IGFyZQorc3BlY2lmaWNhbGx5IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgWW91IG1heSBub3QgY29udmV5IGEgY292ZXJlZAord29yayBpZiB5b3UgYXJlIGEgcGFydHkgdG8gYW4gYXJyYW5nZW1lbnQgd2l0aCBhIHRoaXJkIHBhcnR5IHRoYXQgaXMKK2luIHRoZSBidXNpbmVzcyBvZiBkaXN0cmlidXRpbmcgc29mdHdhcmUsIHVuZGVyIHdoaWNoIHlvdSBtYWtlIHBheW1lbnQKK3RvIHRoZSB0aGlyZCBwYXJ0eSBiYXNlZCBvbiB0aGUgZXh0ZW50IG9mIHlvdXIgYWN0aXZpdHkgb2YgY29udmV5aW5nCit0aGUgd29yaywgYW5kIHVuZGVyIHdoaWNoIHRoZSB0aGlyZCBwYXJ0eSBncmFudHMsIHRvIGFueSBvZiB0aGUKK3BhcnRpZXMgd2hvIHdvdWxkIHJlY2VpdmUgdGhlIGNvdmVyZWQgd29yayBmcm9tIHlvdSwgYSBkaXNjcmltaW5hdG9yeQorcGF0ZW50IGxpY2Vuc2UgKGEpIGluIGNvbm5lY3Rpb24gd2l0aCBjb3BpZXMgb2YgdGhlIGNvdmVyZWQgd29yaworY29udmV5ZWQgYnkgeW91IChvciBjb3BpZXMgbWFkZSBmcm9tIHRob3NlIGNvcGllcyksIG9yIChiKSBwcmltYXJpbHkKK2ZvciBhbmQgaW4gY29ubmVjdGlvbiB3aXRoIHNwZWNpZmljIHByb2R1Y3RzIG9yIGNvbXBpbGF0aW9ucyB0aGF0Citjb250YWluIHRoZSBjb3ZlcmVkIHdvcmssIHVubGVzcyB5b3UgZW50ZXJlZCBpbnRvIHRoYXQgYXJyYW5nZW1lbnQsCitvciB0aGF0IHBhdGVudCBsaWNlbnNlIHdhcyBncmFudGVkLCBwcmlvciB0byAyOCBNYXJjaCAyMDA3LgorCisgIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGNvbnN0cnVlZCBhcyBleGNsdWRpbmcgb3IgbGltaXRpbmcKK2FueSBpbXBsaWVkIGxpY2Vuc2Ugb3Igb3RoZXIgZGVmZW5zZXMgdG8gaW5mcmluZ2VtZW50IHRoYXQgbWF5CitvdGhlcndpc2UgYmUgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhcHBsaWNhYmxlIHBhdGVudCBsYXcuCisKKyAgMTIuIE5vIFN1cnJlbmRlciBvZiBPdGhlcnMnIEZyZWVkb20uCisKKyAgSWYgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QgY29udmV5IGEKK2NvdmVyZWQgd29yayBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdSBtYXkKK25vdCBjb252ZXkgaXQgYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBhZ3JlZSB0byB0ZXJtcyB0aGF0IG9ibGlnYXRlIHlvdQordG8gY29sbGVjdCBhIHJveWFsdHkgZm9yIGZ1cnRoZXIgY29udmV5aW5nIGZyb20gdGhvc2UgdG8gd2hvbSB5b3UgY29udmV5Cit0aGUgUHJvZ3JhbSwgdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggdGhvc2UgdGVybXMgYW5kIHRoaXMKK0xpY2Vuc2Ugd291bGQgYmUgdG8gcmVmcmFpbiBlbnRpcmVseSBmcm9tIGNvbnZleWluZyB0aGUgUHJvZ3JhbS4KKworICAxMy4gUmVtb3RlIE5ldHdvcmsgSW50ZXJhY3Rpb247IFVzZSB3aXRoIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworICBOb3R3aXRoc3RhbmRpbmcgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIGlmIHlvdSBtb2RpZnkgdGhlCitQcm9ncmFtLCB5b3VyIG1vZGlmaWVkIHZlcnNpb24gbXVzdCBwcm9taW5lbnRseSBvZmZlciBhbGwgdXNlcnMKK2ludGVyYWN0aW5nIHdpdGggaXQgcmVtb3RlbHkgdGhyb3VnaCBhIGNvbXB1dGVyIG5ldHdvcmsgKGlmIHlvdXIgdmVyc2lvbgorc3VwcG9ydHMgc3VjaCBpbnRlcmFjdGlvbikgYW4gb3Bwb3J0dW5pdHkgdG8gcmVjZWl2ZSB0aGUgQ29ycmVzcG9uZGluZworU291cmNlIG9mIHlvdXIgdmVyc2lvbiBieSBwcm92aWRpbmcgYWNjZXNzIHRvIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZQorZnJvbSBhIG5ldHdvcmsgc2VydmVyIGF0IG5vIGNoYXJnZSwgdGhyb3VnaCBzb21lIHN0YW5kYXJkIG9yIGN1c3RvbWFyeQorbWVhbnMgb2YgZmFjaWxpdGF0aW5nIGNvcHlpbmcgb2Ygc29mdHdhcmUuICBUaGlzIENvcnJlc3BvbmRpbmcgU291cmNlCitzaGFsbCBpbmNsdWRlIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYW55IHdvcmsgY292ZXJlZCBieSB2ZXJzaW9uIDMKK29mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB0aGF0IGlzIGluY29ycG9yYXRlZCBwdXJzdWFudCB0byB0aGUKK2ZvbGxvd2luZyBwYXJhZ3JhcGguCisKKyAgTm90d2l0aHN0YW5kaW5nIGFueSBvdGhlciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCB5b3UgaGF2ZQorcGVybWlzc2lvbiB0byBsaW5rIG9yIGNvbWJpbmUgYW55IGNvdmVyZWQgd29yayB3aXRoIGEgd29yayBsaWNlbnNlZAordW5kZXIgdmVyc2lvbiAzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnRvIGEgc2luZ2xlCitjb21iaW5lZCB3b3JrLCBhbmQgdG8gY29udmV5IHRoZSByZXN1bHRpbmcgd29yay4gIFRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlIHdpbGwgY29udGludWUgdG8gYXBwbHkgdG8gdGhlIHBhcnQgd2hpY2ggaXMgdGhlIGNvdmVyZWQgd29yaywKK2J1dCB0aGUgd29yayB3aXRoIHdoaWNoIGl0IGlzIGNvbWJpbmVkIHdpbGwgcmVtYWluIGdvdmVybmVkIGJ5IHZlcnNpb24KKzMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCisgIDE0LiBSZXZpc2VkIFZlcnNpb25zIG9mIHRoaXMgTGljZW5zZS4KKworICBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZgordGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zCit3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKKyAgRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUKK1Byb2dyYW0gc3BlY2lmaWVzIHRoYXQgYSBjZXJ0YWluIG51bWJlcmVkIHZlcnNpb24gb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbAorUHVibGljIExpY2Vuc2UgIm9yIGFueSBsYXRlciB2ZXJzaW9uIiBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUKK29wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IG51bWJlcmVkCit2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGUKK0dOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQKK2J5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgSWYgdGhlIFByb2dyYW0gc3BlY2lmaWVzIHRoYXQgYSBwcm94eSBjYW4gZGVjaWRlIHdoaWNoIGZ1dHVyZQordmVyc2lvbnMgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBjYW4gYmUgdXNlZCwgdGhhdCBwcm94eSdzCitwdWJsaWMgc3RhdGVtZW50IG9mIGFjY2VwdGFuY2Ugb2YgYSB2ZXJzaW9uIHBlcm1hbmVudGx5IGF1dGhvcml6ZXMgeW91Cit0byBjaG9vc2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUgUHJvZ3JhbS4KKworICBMYXRlciBsaWNlbnNlIHZlcnNpb25zIG1heSBnaXZlIHlvdSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudAorcGVybWlzc2lvbnMuICBIb3dldmVyLCBubyBhZGRpdGlvbmFsIG9ibGlnYXRpb25zIGFyZSBpbXBvc2VkIG9uIGFueQorYXV0aG9yIG9yIGNvcHlyaWdodCBob2xkZXIgYXMgYSByZXN1bHQgb2YgeW91ciBjaG9vc2luZyB0byBmb2xsb3cgYQorbGF0ZXIgdmVyc2lvbi4KKworICAxNS4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4KKworICBUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZCitBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUCitIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZCitPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKK1RIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNCitJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YKK0FMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxNi4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuCisKKyAgSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1PRElGSUVTIEFORC9PUiBDT05WRVlTCitUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkKK0dFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRQorVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRgorREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQKK1BBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIgUFJPR1JBTVMpLAorRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0VTLgorCisgIDE3LiBJbnRlcnByZXRhdGlvbiBvZiBTZWN0aW9ucyAxNSBhbmQgMTYuCisKKyAgSWYgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudHkgYW5kIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHByb3ZpZGVkCithYm92ZSBjYW5ub3QgYmUgZ2l2ZW4gbG9jYWwgbGVnYWwgZWZmZWN0IGFjY29yZGluZyB0byB0aGVpciB0ZXJtcywKK3Jldmlld2luZyBjb3VydHMgc2hhbGwgYXBwbHkgbG9jYWwgbGF3IHRoYXQgbW9zdCBjbG9zZWx5IGFwcHJveGltYXRlcworYW4gYWJzb2x1dGUgd2FpdmVyIG9mIGFsbCBjaXZpbCBsaWFiaWxpdHkgaW4gY29ubmVjdGlvbiB3aXRoIHRoZQorUHJvZ3JhbSwgdW5sZXNzIGEgd2FycmFudHkgb3IgYXNzdW1wdGlvbiBvZiBsaWFiaWxpdHkgYWNjb21wYW5pZXMgYQorY29weSBvZiB0aGUgUHJvZ3JhbSBpbiByZXR1cm4gZm9yIGEgZmVlLgorCisgICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworICAgICAgICAgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisKKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKK3N0YXRlIHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgQWZmZXJvIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworICBJZiB5b3VyIHNvZnR3YXJlIGNhbiBpbnRlcmFjdCB3aXRoIHVzZXJzIHJlbW90ZWx5IHRocm91Z2ggYSBjb21wdXRlcgorbmV0d29yaywgeW91IHNob3VsZCBhbHNvIG1ha2Ugc3VyZSB0aGF0IGl0IHByb3ZpZGVzIGEgd2F5IGZvciB1c2VycyB0bworZ2V0IGl0cyBzb3VyY2UuICBGb3IgZXhhbXBsZSwgaWYgeW91ciBwcm9ncmFtIGlzIGEgd2ViIGFwcGxpY2F0aW9uLCBpdHMKK2ludGVyZmFjZSBjb3VsZCBkaXNwbGF5IGEgIlNvdXJjZSIgbGluayB0aGF0IGxlYWRzIHVzZXJzIHRvIGFuIGFyY2hpdmUKK29mIHRoZSBjb2RlLiAgVGhlcmUgYXJlIG1hbnkgd2F5cyB5b3UgY291bGQgb2ZmZXIgc291cmNlLCBhbmQgZGlmZmVyZW50Citzb2x1dGlvbnMgd2lsbCBiZSBiZXR0ZXIgZm9yIGRpZmZlcmVudCBwcm9ncmFtczsgc2VlIHNlY3Rpb24gMTMgZm9yIHRoZQorc3BlY2lmaWMgcmVxdWlyZW1lbnRzLgorCisgIFlvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciBzY2hvb2wsCitpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYgbmVjZXNzYXJ5LgorRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcywgYW5kIGhvdyB0byBhcHBseSBhbmQgZm9sbG93IHRoZSBHTlUgQUdQTCwgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCmRpZmYgLS1naXQgYS9saWNlbnNlcy9BR1JFUCBiL2xpY2Vuc2VzL0FHUkVQCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4ZDUyZTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9BR1JFUApAQCAtMCwwICsxLDIyIEBACitUaGlzIG1hdGVyaWFsIHdhcyBkZXZlbG9wZWQgYnkgU3VuIFd1IGFuZCBVZGkgTWFuYmVyCithdCB0aGUgVW5pdmVyc2l0eSBvZiBBcml6b25hLCBEZXBhcnRtZW50IG9mIENvbXB1dGVyIFNjaWVuY2UuCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSB0aGlzIHNvZnR3YXJlLCB0byByZWRpc3RyaWJ1dGUgaXQKK29uIGEgbm9ucHJvZml0IGJhc2lzLCBhbmQgdG8gdXNlIGl0IGZvciBhbnkgcHVycG9zZSwgc3ViamVjdCB0bwordGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnMgYW5kIHVuZGVyc3RhbmRpbmdzLgorCisxLiBBbnkgY29weSBtYWRlIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBpbmNsdWRlIHRoaXMgY29weXJpZ2h0IG5vdGljZQoraW4gZnVsbC4KKworMi4gQWxsIG1hdGVyaWFscyBkZXZlbG9wZWQgYXMgYSBjb25zZXF1ZW5jZSBvZiB0aGUgdXNlIG9mIHRoaXMKK3NvZnR3YXJlIHNoYWxsIGR1bHkgYWNrbm93bGVkZ2Ugc3VjaCB1c2UsIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgdXN1YWwKK3N0YW5kYXJkcyBvZiBhY2tub3dsZWRnaW5nIGNyZWRpdCBpbiBhY2FkZW1pYyByZXNlYXJjaC4KKworMy4gVGhlIGF1dGhvcnMgaGF2ZSBtYWRlIG5vIHdhcnJhbnR5IG9yIHJlcHJlc2VudGF0aW9uIHRoYXQgdGhlCitvcGVyYXRpb24gb2YgdGhpcyBzb2Z0d2FyZSB3aWxsIGJlIGVycm9yLWZyZWUgb3Igc3VpdGFibGUgZm9yIGFueQorYXBwbGljYXRpb24sIGFuZCB0aGV5IGFyZSB1bmRlciB1bmRlciBubyBvYmxpZ2F0aW9uIHRvIHByb3ZpZGUgYW55CitzZXJ2aWNlcywgYnkgd2F5IG9mIG1haW50ZW5hbmNlLCB1cGRhdGUsIG9yIG90aGVyd2lzZS4gIFRoZSBzb2Z0d2FyZQoraXMgYW4gZXhwZXJpbWVudGFsIHByb3RvdHlwZSBvZmZlcmVkIG9uIGFuIGFzLWlzIGJhc2lzLgorCis0LiBSZWRpc3RyaWJ1dGlvbiBmb3IgcHJvZml0IHJlcXVpcmVzIHRoZSBleHByZXNzLCB3cml0dGVuIHBlcm1pc3Npb24KK29mIHRoZSBhdXRob3JzLgorCmRpZmYgLS1naXQgYS9saWNlbnNlcy9BTE1Xb3Jrcy0xLjIgYi9saWNlbnNlcy9BTE1Xb3Jrcy0xLjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODkxOWMzNgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0FMTVdvcmtzLTEuMgpAQCAtMCwwICsxLDE0MSBAQAorIEFMTSBXT1JLUyBMVEQgLS0gRW5kIFVzZXIgTGljZW5zZSBBZ3JlZW1lbnQgLS0gVmVyc2lvbiAxLjIgLS0gMjAwNy0wMS0wMiAKKyAKKyBJTVBPUlRBTlQhIFJFQUQgQ0FSRUZVTExZOiBUSElTIElTIEEgTEVHQUwgQUdSRUVNRU5ULiBCWSBET1dOTE9BRElORywgSU5TVEFMTElORywgQ09QWUlORywgU0FWSU5HIE9OIFlPVVIgQ09NUFVURVIsIE9SIE9USEVSV0lTRSBVU0lORyBBTE0gV09SS1MgU09GVFdBUkUsIFlPVSAoTElDRU5TRUUsIEFTIERFRklORUQgQkVMT1cpIEFSRSBCRUNPTUlORyBBIFBBUlRZIFRPIFRISVMgQUdSRUVNRU5UIEFORCBZT1UgQVJFIENPTlNFTlRJTkcgVE8gQkUgQk9VTkQgQlkgQUxMIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVC4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQsIFlPVSBTSE9VTEQgTk9UIERPV05MT0FELCBJTlNUQUxMIE9SIFVTRSBUSEUgU09GVFdBUkUuIAorIAorIFRoaXMgRW5kIFVzZXIgTGljZW5zZSBBZ3JlZW1lbnQgKCJBZ3JlZW1lbnQiKSBpcyBhIGxlZ2FsbHkgYmluZGluZyBhZ3JlZW1lbnQgYmV0d2VlbiB5b3UsIG9uIGJlaGFsZiBvZiB5b3Vyc2VsZiBhbmQgdGhlIGxlZ2FsIGVudGl0eSBmb3Igd2hvbSB5b3UgYXJlIGRvd25sb2FkaW5nIGFuZCBpbnN0YWxsaW5nIHRoZSBzb2Z0d2FyZSwgb3IgdGhhdCBoYXMgZ2l2ZW4geW91IHRoZSBhdXRob3JpemF0aW9uIHRvIHVzZSB0aGUgc29mdHdhcmUsIHdoZXRoZXIgZXhwbGljaXQgb3IgaW1wbGllZCAoIkxpY2Vuc2VlIiwgIllvdSIpIGFuZCBBTE0gV29ya3MgTHRkLCB0aGUgZGV2ZWxvcGVyIGFuZCB0aGUgb3duZXIgb2YgdGhlIHNvZnR3YXJlICgiTGljZW5zb3IiLCAiQUxNIFdvcmtzIikuIAorIAorIDEuIERFRklOSVRJT05TIAorIAorIDEuMSAiUHJvZHVjdCBTZXQiIG1lYW5zIGFsbCBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiBpdGVtcyB0aGF0IGFyZSBkZWxpdmVyZWQgdG8gZW5kLXVzZXJzIGJ5IEFMTSBXb3JrcyB1bmRlciBhIHNpbmdsZSB0cmFkZSBuYW1lLiAKKyAKKyAxLjIgIlByb2R1Y3QgVmVyc2lvbiIgbWVhbnMgYWxsIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIGZyb20gYSBzaW5nbGUgUHJvZHVjdCBTZXQgdGhhdCBpcyBsYWJlbGVkIHdpdGggdGhlIHNhbWUgbnVtZXJpY2FsIHZlcnNpb24gdGFnLiBWZXJzaW9uIHRhZyBoYXMgdGhlIGZvcm0gb2YgIk0uTiIsIHdoZXJlIE0gaXMgdGhlIG1ham9yIHZlcnNpb24gbnVtYmVyIGFuZCBOIGlzIHRoZSBtaW5vciB2ZXJzaW9uIG51bWJlci4gCisgCisgMS4zICJQcm9kdWN0IiBtZWFucyBhbGwgUHJvZHVjdCBWZXJzaW9ucyB0aGF0IChhKSBiZWxvbmcgdG8gYSBzaW5nbGUgUHJvZHVjdCBTZXQsIHJlZmVycmVkIHRvIGluIExpY2Vuc2UgS2V5cyBhbmQgKGIpIGhhdmUgdGhlIHNhbWUgbWFqb3IgdmVyc2lvbiBudW1iZXIgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUgbGF0ZXN0IHNvZnR3YXJlIHZlcnNpb24gYXQgdGhlIG1vbWVudCBMaWNlbnNlIEtleXMgYXJlIGRlbGl2ZXJlZCB0byB0aGUgTGljZW5zZWUuIAorIAorIDEuNCAiTGljZW5zZSBLZXlzIiBtZWFucyBlbGVjdHJvbmljIGZpbGVzIHRoYXQgaGF2ZSBiZWVuIGRlbGl2ZXJlZCB0byBMaWNlbnNlZSBhcyBhIGNvbnNlcXVlbmNlIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgdGhhdCBwcm92aWRlIHRlY2huaWNhbCBtZWFucyBmb3IgcnVubmluZyB0aGUgUHJvZHVjdCBhbmQgdGhhdCBjb250YWluIGRldGFpbGVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0eXBlIG9mIGxpY2Vuc2UgYW5kIGxpY2Vuc2Ugb3B0aW9ucy4gCisgCisgMS41ICJMaWNlbnNlIEtleSBUeXBlIiBtZWFucyBpZGVudGlmaWFibGUgdHlwZSBvZiBhIExpY2Vuc2UgS2V5ICh3aXRoIHRoZSBoZWxwIG9mIHRoZSBQcm9kdWN0IG9yIG9mIG90aGVyIHNvZnR3YXJlKSwgYW5kIG1heSBiZSBvbmUgb2Y6IHNpbmdsZS11c2VyIGxpY2Vuc2UgKGFsc28ga25vd24gYXMgZnVsbCBsaWNlbnNlKSwgZmxvYXRpbmcgbGljZW5zZSwgcGVyc29uYWwgbGljZW5zZSwgc2l0ZSBsaWNlbnNlLCBldmFsdWF0aW9uIGxpY2Vuc2UsIGFjYWRlbWljIGxpY2Vuc2UsIGxpY2Vuc2UgZm9yIG9wZW4tc291cmNlLiAKKyAKKyAxLjYgIkxpY2Vuc2UgS2V5IENhcGFjaXR5IiBtZWFucyB0aGUgbWF4aW11bSBhbGxvd2VkIGNvbmN1cnJlbnQgdXNlcnMgZm9yIHRoZSBGbG9hdGluZyBhbmQgQWNhZGVtaWMgTGljZW5zZSBLZXkgVHlwZXMuIAorIAorIDEuNyAiQXV0aG9yaXplZCBQZXJzb24iIG1lYW5zIGVpdGhlciAoYSkgc29sZWx5IHlvdSwgdGhlIExpY2Vuc2VlLCBpZiBMaWNlbnNlZSBpcyBhbiBpbmRpdmlkdWFsOyAoYikgaWYgTGljZW5zZWUgaXMgYSBsZWdhbCBlbnRpdHksIGFueSBlbXBsb3llZSwgaW5kZXBlbmRlbnQgY29udHJhY3RvciBhbmQgb3RoZXIgdGVtcG9yYXJ5IHdvcmtlciBhdXRob3JpemVkIGJ5IExpY2Vuc2VlIHRvIHVzZSB0aGUgU29mdHdhcmUgd2hpbGUgcGVyZm9ybWluZyBkdXRpZXMgd2l0aGluIHRoZSBzY29wZSBvZiB0aGVpciBlbXBsb3ltZW50IG9yIGFzc2lnbm1lbnQuIAorIAorIDEuOCAiUHJvZHVjdCBJbnN0YW5jZSIgbWVhbnMgUHJvZHVjdCBzb2Z0d2FyZSBleGVjdXRpbmcgb24gYSBzaW5nbGUgY29tcHV0ZXIgYXMgYSBzaW5nbGUgcHJvY2Vzcy4gCisgCisgMi4gR1JBTlQgT0YgTElDRU5TRSAKKyAKKyBQcm92aWRlZCB0aGF0IFlvdSBhZ3JlZSBhbmQgZnVsbHkgY29tcGx5IHdpdGggdGhpcyBBZ3JlZW1lbnQsIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHNldCBmb3J0aCBpbiB0aGlzIEFncmVlbWVudCwgQUxNIFdvcmtzIGdyYW50cyBZb3UgYSBub24tZXhjbHVzaXZlLCBub24tdHJhbnNmZXJhYmxlICh3aXRoIGEgc2luZ2xlIGV4Y2VwdGlvbiBzZXQgZm9ydGggaW4gcGFyYWdyYXBoIDEyKSwgbGltaXRlZCBsaWNlbnNlIHRvIHVzZSB0aGUgUHJvZHVjdCBhcyBmb2xsb3dzOiAKKyAKKyAyLjEuIFlvdSBtYXk6IAorIAorIDIuMS4xLiBJbnN0YWxsIGFuZCB1c2UgdGhlIFByb2R1Y3Qgb24gbXVsdGlwbGUgY29tcHV0ZXJzLCBvcGVyYXRpbmcgc3lzdGVtcyBhbmQgYWNjb3VudHMsIHN1YmplY3QgdG8gbGltaXRhdGlvbnMgc2V0IGZvcnRoIGluIHBhcmFncmFwaHMgNCAtIDggYWNjb3JkaW5nIHRvIExpY2Vuc2UgS2V5IFR5cGVzIGFuZCBMaWNlbnNlIEtleXMgQ2FwYWNpdHk7IAorIAorIDIuMS4yIE1ha2UgYmFja3VwIGNvcGllcyBvZiB0aGUgUHJvZHVjdCBhbmQgTGljZW5zZSBLZXlzOyAKKyAKKyAyLjIgWW91IG1heSBub3Q6IAorIAorIDIuMi4xIFNlbGwsIHJlZGlzdHJpYnV0ZSAoZXhjZXB0IGZvciByZWRpc3RyaWJ1dGluZyBhbW9uZyBBdXRob3JpemVkIFBlcnNvbnMpLCBlbmN1bWJlciwgZ2l2ZSwgbGVuZCwgcmVudCwgbGVhc2UsIHN1YmxpY2Vuc2UsIG9yIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgUHJvZHVjdCwgb3IgYW55IHBvcnRpb25zIG9mIHRoZSBQcm9kdWN0LCB0byBhbnlvbmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgdGhlIExpY2Vuc29yOyAKKyAyLjIuMiBEZWNvbXBpbGUsIGRpc2Fzc2VtYmxlLCByZXZlcnNlIGVuZ2luZWVyLCBtb2RpZnksIG9yIHRyYW5zbGF0ZSB0aGUgU29mdHdhcmUgb3Igb3RoZXJ3aXNlIGF0dGVtcHQgdG8gZGlzY292ZXIgdGhlIHNvdXJjZSBjb2RlLiBZb3UgYXJlIGdpdmVuIG5vdGljZSB0aGF0IGFueSBhbmQgYWxsIGluZm9ybWF0aW9uIG9idGFpbmVkIGR1cmluZyBzdWNoIGxhd2Z1bCByZXZlcnNlIGVuZ2luZWVyaW5nIGFuZC9vciBkZWNvbXBpbGluZyBhY3Rpdml0aWVzLCBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgdGhlIG9yZ2FuaXphdGlvbiwgbG9naWMsIGFsZ29yaXRobXMsIGFuZCBwcm9jZXNzZXMgb2YgdGhlIFByb2R1Y3QsIGlzIGFuZCBzaGFsbCByZW1haW4gdGhlIGNvbmZpZGVudGlhbCBhbmQgcHJvcHJpZXRhcnkgaW5mb3JtYXRpb24gb2YgQUxNIFdvcmtzIG9yIGl0cyBsaWNlbnNvcnM7IAorIAorIDIuMi4zIE1vZGlmeSB0aGUgUHJvZHVjdCwgY3JlYXRlIGRlcml2YXRpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2R1Y3QsIGF0dGVtcHQgdG8gbW9kaWZ5IHRoZSBTb2Z0d2FyZSwgb3IgYXR0ZW1wdCB0byBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZHVjdC4gCisgCisgMy4gT1dORVJTSElQIAorIAorIFRoZSBQcm9kdWN0IGlzIHRoZSBwcm9wZXJ0eSBvZiB0aGUgTGljZW5zb3IuIFRoZSBQcm9kdWN0IGlzIGxpY2Vuc2VkLCBub3Qgc29sZCBvciBvdGhlcndpc2UgdHJhbnNmZXJyZWQuIFlvdSBhY2tub3dsZWRnZSBhbmQgYWdyZWUgdGhhdDogCisgCisgMy4xIFRoZSBQcm9kdWN0IGlzIHByb3RlY3RlZCB1bmRlciBJbnRlcm5hdGlvbmFsIGFuZCBVLlMuIGNvcHlyaWdodCBsYXdzOyAKKyAKKyAzLjIgQUxNIFdvcmtzIGFuZCBpdHMgbGljZW5zb3JzIHJldGFpbiBhbGwgY29weXJpZ2h0cyBhbmQgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBpbiB0aGUgUHJvZHVjdDsgCisgCisgMy4zIFRoZXJlIGFyZSBubyBpbXBsaWVkIGxpY2Vuc2VzIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQgYW55IHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgdG8geW91IGhlcmV1bmRlciBhcmUgcmVzZXJ2ZWQgYnkgQUxNIFdvcmtzOyAKKyAKKyAzLjQgWW91IGFjcXVpcmUgbm8gb3duZXJzaGlwIG9yIG90aGVyIGludGVyZXN0IChvdGhlciB0aGFuIHlvdXIgbGljZW5zZSByaWdodHMpIGluIG9yIHRvIHRoZSBQcm9kdWN0LCBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgYW55IHJpZ2h0cyBvciBpbnRlcmVzdCBpbiBvciB0byBhbnkgdHJhZGVtYXJrLCBzZXJ2aWNlIG1hcmssIGxvZ28gb3IgdHJhZGUgbmFtZSBvZiBBTE0gV29ya3Mgb3IgaXRzIGxpY2Vuc29ycy4gCisgCisgNC4gU0lOR0xFLVVTRVIgTElDRU5TRSBURVJNUyAKKyAKKyBBIExpY2Vuc2UgS2V5IG9mIHR5cGUgIlNpbmdsZS11c2VyIGxpY2Vuc2UiIG9yICJGdWxsIGxpY2Vuc2UiIG9yICJDb21tZXJjaWFsIGxpY2Vuc2UiIGFsbG93cyBvbmx5IG9uZSBBdXRob3JpemVkIFBlcnNvbiB0byB1c2UgdGhlIFByb2R1Y3Qgb24gbXVsdGlwbGUgY29tcHV0ZXJzLCBwcm92aWRlZCB0aGF0IHRoZSBzb2Z0d2FyZSBpcyBub3QgcnVubmluZyBvbiBtb3JlIHRoYW4gb25lIGNvbXB1dGVyIGF0IGEgdGltZS4gCisgCisgNS4gRkxPQVRJTkcgTElDRU5TRSBURVJNUyAKKyAKKyBBIExpY2Vuc2UgS2V5IG9mIHR5cGUgIkZsb2F0aW5nIGxpY2Vuc2UiIGFsbG93cyBhbnkgbnVtYmVyIG9mIEF1dGhvcml6ZWQgUGVyc29ucyB0byB1c2UgdGhlIFByb2R1Y3Qgb24gbXVsdGlwbGUgY29tcHV0ZXJzLCBwcm92aWRlZCB0aGF0IGF0IGFueSB0aW1lIHRoZSBudW1iZXIgb2YgcnVubmluZyBQcm9kdWN0IEluc3RhbmNlcyBpcyBub3QgZ3JlYXRlciB0aGFuIHRoZSBMaWNlbnNlIENhcGFjaXR5LiAKKyAKKyBBTE0gV29ya3MgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlcXVpcmUgdGVjaG5pY2FsIG1lYW5zIGZvciBjb250cm9sbGluZyBmbG9hdGluZyBsaWNlbnNlcyB1c2UsIHN1Y2ggYXMgYSBsaWNlbnNlIHNlcnZlciwgdG8gYmUgaW5zdGFsbGVkIGF0IHRoZSBMaWNlbnNlZSdzIHNpdGUocykuIAorIAorIDYuIFBFUlNPTkFMIExJQ0VOU0UgVEVSTVMgCisgCisgQSBMaWNlbnNlIEtleSBvZiB0eXBlICJQZXJzb25hbCBsaWNlbnNlIiBhbGxvd3Mgb25seSBvbmUgaW5kaXZpZHVhbCB0byB1c2UgdGhlIFByb2R1Y3Qgb24gbXVsdGlwbGUgY29tcHV0ZXJzLCBwcm92aWRlZCB0aGF0IHRoZSBzb2Z0d2FyZSBpcyBub3QgcnVubmluZyBvbiBtb3JlIHRoYW4gb25lIGNvbXB1dGVyIGF0IGEgdGltZS4gCisgCisgVGhlIGxpY2Vuc2VlIG9mIGEgUGVyc29uYWwgbGljZW5zZSBpcyBhbHdheXMgYSBwZXJzb24gZGVzaWduYXRlZCBpbiB0aGUgbGljZW5zZSBrZXksIG5vdCBhIGxlZ2FsIGVudGl0eSwgcmVnYXJkbGVzcyBvZiBiaWxsaW5nIGFkZHJlc3MuIAorIAorIFRoZSBQcm9kdWN0IG1heSBoYXZlIGZ1bmN0aW9uYWwgbGltaXRhdGlvbnMgd2hlbiB1c2VkIHdpdGggYSBQZXJzb25hbCBsaWNlbnNlLiAKKyAKKyA3LiBTSVRFIExJQ0VOU0UgCisgCisgQSBMaWNlbnNlIEtleSBvZiB0eXBlICJTaXRlIGxpY2Vuc2UiIGFsbG93cyB1bmxpbWl0ZWQgbnVtYmVyIG9mIEF1dGhvcml6ZWQgUGVyc29ucyB0byB1c2UgdGhlIFByb2R1Y3QsIHByb3ZpZGVkIHRoYXQgdGhlIFByb2R1Y3QgaXMgdXNlZCB0byB3b3JrIG9ubHkgd2l0aCBzaXRlKHMpIGRlc2lnbmF0ZWQgaW4gdGhlIExpY2Vuc2UgS2V5LiAKKyAKKyBUaGUgUHJvZHVjdCBtYXkgaGF2ZSBmdW5jdGlvbmFsIGxpbWl0YXRpb25zIHdoZW4gdXNlZCB3aXRoIGEgU2l0ZSBsaWNlbnNlLiAKKyAKKyA4LiBFVkFMVUFUSU9OIExJQ0VOU0UgVEVSTVMgCisgCisgQSBMaWNlbnNlIEtleSBvZiB0eXBlICJFdmFsdWF0aW9uIGxpY2Vuc2UiIGFsbG93cyB1c2luZyB0aGUgUHJvZHVjdCBmb3IgYSB0aW1lLWxpbWl0ZWQgZXZhbHVhdGlvbiBwZXJpb2Qgd2l0aG91dCBleGVjdXRpbmcgYSBwdXJjaGFzZS4gRHVyaW5nIHRoZSBldmFsdWF0aW9uIHBlcmlvZCwgdGhlIFByb2R1Y3QgbWF5IGJlIHVzZWQgZm9yIHRyaWFsIGFuZCB0ZXN0aW5nIHB1cnBvc2VzIG9ubHkgYW5kIG5vdCBmb3IgZ2VuZXJhbCBjb21tZXJjaWFsIHVzZS4gQXQgdGhlIGVuZCBvZiBldmFsdWF0aW9uIHBlcmlvZCBMaWNlbnNlZSBoYXMgdG8gZWl0aGVyIGRpc2NvbnRpbnVlIHVzaW5nIHRoZSBQcm9kdWN0IG9yIHBheSBsaWNlbnNlZSBmZWUgdG8gcmVtb3ZlIGV2YWx1YXRpb24gcmVzdHJpY3Rpb25zLiAKKyAKKyA5LiBBQ0FERU1JQyBMSUNFTlNFIFRFUk1TIAorIAorIEEgTGljZW5zZSBLZXkgb2YgdHlwZSAiQWNhZGVtaWMgTGljZW5zZSIgYWxsb3dzIGFueSBudW1iZXIgb2YgQXV0aG9yaXplZCBQZXJzb25zIHRvIHVzZSB0aGUgUHJvZHVjdCBvbiBtdWx0aXBsZSBjb21wdXRlcnMgZm9yIG5vbi1jb21tZXJjaWFsLCBlZHVjYXRpb25hbCBwdXJwb3NlcyBvbmx5LCBwcm92aWRlZCB0aGF0IGF0IGFueSB0aW1lIHRoZSBudW1iZXIgb2YgcnVubmluZyBQcm9kdWN0IEluc3RhbmNlcyBpcyBub3QgZ3JlYXRlciB0aGFuIHRoZSBMaWNlbnNlIENhcGFjaXR5LiAKKyAKKyBVc2luZyB0aGUgUHJvZHVjdCBmb3IgY29tbWVyY2lhbCBvciBub24tZWR1Y2F0aW9uYWwgcHVycG9zZXMgaXMgbm90IGFsbG93ZWQgYnkgQWNhZGVtaWMgTGljZW5zZS4gCisgCisgQWNhZGVtaWMgTGljZW5zZSBpcyB2YWxpZCBvbmx5IHdoZW4gTGljZW5zZWUgaXMgYW4gYWNjcmVkaXRlZCBlZHVjYXRpb25hbCBpbnN0aXR1dGlvbiBpbmNsdWRpbmcgdm9jYXRpb25hbC90cmFkZSBzY2hvb2xzLCBjb2xsZWdlcyBhbmQgdW5pdmVyc2l0aWVzLiAKKyAKKyAxMC4gU1BFQ0lBTCBMSUNFTlNFIFRFUk1TIAorIAorIEEgTGljZW5zZSBLZXkgb2YgdHlwZSAiTGljZW5zZSBmb3IgT3Blbi1Tb3VyY2UgUHJvamVjdHMiIG9yICJMaWNlbnNlIGZvciBPcGVuLVNvdXJjZSIgYWxsb3dzIG9ubHkgb25lIEF1dGhvcml6ZWQgUGVyc29uIHRvIHVzZSB0aGUgUHJvZHVjdCBvbiBtdWx0aXBsZSBjb21wdXRlcnMsIHByb3ZpZGVkIHRoYXQgdGhlIHNvZnR3YXJlIGlzIG5vdCBydW5uaW5nIG9uIG1vcmUgdGhhbiBvbmUgY29tcHV0ZXIgYXQgYSB0aW1lLCBhbmQgcHJvdmlkZWQgdGhhdCB0aGUgQXV0aG9yaXplZCBQZXJzb24gdXNlcyB0aGUgUHJvZHVjdCB0byB3b3JrIGV4Y2x1c2l2ZWx5IG9uIG5vbi1jb21tZXJjaWFsIG9wZW4tc291cmNlIHByb2plY3RzIHNwZWNpZmllZCBpbiB0aGUgTGljZW5zZSBLZXkuIAorIAorIEFMTSBXb3JrcyByZXNlcnZlcyB0aGUgcmlnaHQgdG8gbGltaXQgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIFByb2R1Y3QgdG8gdGVjaG5pY2FsbHkgZW5mb3JjZSB0aGUgdGVybXMgYW5kIGxpbWl0YXRpb25zIG9mIGEgTGljZW5zZSBmb3IgT3Blbi1Tb3VyY2UgUHJvamVjdHMuIAorIAorIDExLiBERUxJVkVSWSAKKyAKKyBUaGUgUHJvZHVjdCBpcyBkZWxpdmVyZWQgZWxlY3Ryb25pY2FsbHkuIExpY2Vuc2VlIGRvd25sb2FkcyB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24gZnJvbSBMaWNlbnNvcidzIHdlYiBzaXRlLiBMaWNlbnNlIEtleXMgYXJlIGRlbGl2ZXJlZCB0byBMaWNlbnNlZSBieSBlbGVjdHJvbmljIG1haWwgd2l0aGluIDQ4IGhvdXJzIGFmdGVyIHBheW1lbnQgY29uZmlybWF0aW9uIChmb3IgQWNhZGVtaWMsIFNpbmdsZS11c2VyIGFuZCBGbG9hdGluZyBsaWNlbnNlIGtleXMpIG9yIHdpdGhpbiA0OCBob3VycyBhZnRlciBzdWNjZXNzZnVsIGFwcGxpY2F0aW9uIChmb3IgU3BlY2lhbCBhbmQgRXZhbHVhdGlvbiBsaWNlbnNlIGtleXMpIGlzIGNvbmZpcm1lZC4gQUxNIFdvcmtzIGlzIG5vdCB0byBiZSBoZWxkIHJlc3BvbnNpYmxlIGZvciBhbnkgZGVsYXkgaW4gZGVsaXZlcmluZyB0aGUgbGljZW5zZSBrZXkgdG8geW91IHRoYXQgbWF5IGFyaXNlIGR1ZSB0byB0aGUgbmF0dXJlIG9mIGVsZWN0cm9uaWMgbWFpbCBhbmQgdGhlIEludGVybmV0LiAKKyAKKyAxMi4gTk8gV0FSUkFOVFkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZIAorIAorIFRIRSBQUk9EVUNUIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQgVE8gVEhFIEVYVEVOVCBOT1QgUFJPSElCSVRFRCBCWSBMQVcuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBTE0gV09SS1MgT1IgSVRTIExJQ0VOU09SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgCisgMTMuIFRFUk1JTkFUSU9OIAorIAorIFRoaXMgQWdyZWVtZW50IGlzIGVmZmVjdGl2ZSB1bnRpbCB0ZXJtaW5hdGVkLiBZb3UgbWF5IHRlcm1pbmF0ZSB0aGlzIEFncmVlbWVudCBhdCBhbnkgdGltZSBieSBkZXN0cm95aW5nIExpY2Vuc2UgS2V5cy4gVGhpcyBBZ3JlZW1lbnQgd2lsbCB0ZXJtaW5hdGUgaW1tZWRpYXRlbHkgd2l0aG91dCBub3RpY2UgZnJvbSBBTE0gV29ya3MgaWYgeW91IGZhaWwgdG8gY29tcGx5IHdpdGggYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudC4gCisgCisgQWdyZWVtZW50IGlzIHRlcm1pbmF0ZWQgaWYgeW91IHJlY2VpdmUgcmVmdW5kIGZvciByZXR1cm5pbmcgdGhlIFByb2R1Y3QgdG8gQUxNIFdvcmtzLCBhcyBkZXNjcmliZWQgaW4gUmV0dXJuIFBvbGljeSBvbiB0aGUgQUxNIFdvcmtzIHdlYnNpdGUuIAorIAorIFlvdSBtdXN0IHN0b3AgdXNpbmcgdGhlIFByb2R1Y3Qgb25jZSB0aGUgTGljZW5zZSBBZ3JlZW1lbnQgaXMgdGVybWluYXRlZC4gCisgCisgMTQuIFRSQU5TRkVSIAorIAorIFlvdSBtYXkgcGVyZm9ybSBhIG9uZSBmdWxsIHRyYW5zZmVyIG9mIGFsbCByaWdodHMgZ3JhbnRlZCBieSB0aGlzIEFncmVlbWVudCB0byBhbnkgb3RoZXIgcGFydHksIHByb3ZpZGVkIHlvdSBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogCisgCisgMTQuMSBZb3UgZGVzdHJveSBlbGVjdHJvbmljIGxpY2Vuc2Uga2V5IG9uIHlvdXIgY29tcHV0ZXJzIGFuZCBkaXNjb250aW51ZSB1c2luZyB0aGUgUHJvZHVjdDsgCisgCisgMTQuMiBZb3Ugc2VuZCB1cyBhIHdyaXR0ZW4gbm90aWNlIGFib3V0IHRoZSB0cmFuc2ZlciwgaW5jbHVkaW5nIGluZm9ybWF0aW9uIGFib3V0IHRoZSB0cmFuc2ZlciBiZW5lZmljaWFyeSBhbmQgdGhlIG51bWJlciBvZiBsaWNlbnNlcyB0cmFuc2ZlcnJlZCwgc28gdGhhdCB3ZSBjYW4gaXNzdWUgbmV3IGVsZWN0cm9uaWMgbGljZW5zZSBrZXlzIGZvciB0aGUgYmVuZWZpY2lhcnk7IAorIAorIDE0LjMgWW91IHdpbGwgaW5kZW1uaWZ5LCBkZWZlbmQgYW5kIGhvbGQgQUxNIFdvcmtzIGFuZCBpdHMgbGljZW5zb3JzIGFuZCBzdXBwbGllcnMgYW5kIGVhY2ggb2YgdGhlaXIgcmVzcGVjdGl2ZSBlbXBsb3llZXMsIG9mZmljZXJzLCBkaXJlY3RvcnMgYW5kIGFmZmlsaWF0ZXMsIGhhcm1sZXNzIGZyb20gYW5kIGFnYWluc3QgYW55IGNsYWltcyBvciBsaWFiaWxpdGllcyBhcmlzaW5nIG91dCBvZiBQcm9kdWN0IHRyYW5zZmVyIGJ5IHlvdSBvciB0aGlyZCBwYXJ0aWVzIHRoYXQgaGF2ZSByZWNlaXZlZCB0aGUgcHJvZHVjdCBmcm9tIHlvdS4gCisgCisgMTQuNCBZb3UgbWF5IG5vdCByZWRpc3RyaWJ1dGUgZWxlY3Ryb25pYyBsaWNlbnNlIGtleS4gVGhlIG5ldyBQcm9kdWN0IExpY2Vuc2VlIHdpbGwgaGF2ZSB0byBhY3F1aXJlIGhpcyBvd24gbGljZW5zZSBrZXkuIAorIAorIDE1LiBUSElSRC1QQVJUWSBTT0ZUV0FSRSAKKyAKKyBUaGUgUHJvZHVjdCBtYXkgaW5jbHVkZSB0aGUgc29mdHdhcmUgb3Igb3RoZXIgZmlsZXMgcHJvdmlkZWQgYnkgYSB0aGlyZCBwYXJ0eSB2ZW5kb3IsIHdoaWNoIG1heSBiZSBzdWJqZWN0IHRvIGFkZGl0aW9uYWwgbGljZW5zZSByZXN0cmljdGlvbnMuIFlvdSBhZ3JlZSB0byBhYmlkZSBieSB0aGUgY29ycmVzcG9uZGluZyB0aGlyZC1wYXJ0eSBhZ3JlZW1lbnRzLCB3aGljaCBtYXkgYmUgZm91bmQgaW4gImxpY2Vuc2UiIGRpcmVjdG9yeSB3aXRoaW4gdGhlIFByb2R1Y3QgZGlzdHJpYnV0aW9uLCBvciBvbiB0aGUgdGhpcmQtcGFydHkgdmVuZG9yJ3Mgd2Vic2l0ZXMuIAorIAorIDE2LiBNQVJLRVRJTkcgCisgCisgWW91IGFncmVlIHRvIGJlIGlkZW50aWZpZWQgYXMgYSBjdXN0b21lciBvZiBBTE0gV29ya3MgYW5kIHRoYXQgQUxNIFdvcmtzIG1heSByZWZlciB0byBZb3UgYnkgbmFtZSwgdHJhZGUgbmFtZSBhbmQgdHJhZGVtYXJrLCBpZiBhcHBsaWNhYmxlLCBhbmQgbWF5IGJyaWVmbHkgZGVzY3JpYmUgWW91ciBidXNpbmVzcyBpbiBBTE0gV29ya3MgbWFya2V0aW5nIG1hdGVyaWFscyBhbmQgb24gQUxNIFdvcmtzIHdlYiBzaXRlcy4gCisgCisgMTcuIFNVUFBPUlQgU0VSVklDRVMgCisgCisgQUxNIFdvcmtzIHByb3ZpZGVzIHlvdSB3aXRoIHN1cHBvcnQgc2VydmljZXMgcmVsYXRlZCB0byB0aGUgUHJvZHVjdCBhY2NvcmRpbmcgdG8gc3VwcG9ydCBwb2xpY2llcyBkZXNjcmliZWQgb24gQUxNIFdvcmtzIHdlYnNpdGUuIAorIAorIEFueSBzdXBwbGVtZW50YWwgc29mdHdhcmUgY29kZSBvciByZWxhdGVkIG1hdGVyaWFscyB0aGF0IEFMTSBXb3JrcyBwcm92aWRlcyB0byB5b3UgYXMgYSBwYXJ0IG9mIHRoZSBzdXBwb3J0IHNlcnZpY2VzLCBpbiB1cGdyYWRlcyB0byB0aGUgUHJvZHVjdCBvciBvdGhlcndpc2UsIGlzIHRvIGJlIGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgUHJvZHVjdCBhbmQgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQuIAorIAorIC0tIAorIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgYWJvdXQgdGhpcyBBZ3JlZW1lbnQsIHBsZWFzZSBjb250YWN0IEFMTSBXb3JrcyBMdGQgYXQgVGltZXMgQ2VudGVyLCBTdWl0ZSAyMTQ7IFN0LlBldGVyc2J1cmcsIDE5NzM0MjsgUnVzc2lhbiBGZWRlcmF0aW9uOyBlbWFpbDogaW5mb0BhbG13b3Jrcy5jb20gCisgCisgClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvQU1EIGIvbGljZW5zZXMvQU1ECm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxYWIyNWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9BTUQKQEAgLTAsMCArMSwxODggQEAKKworQU1EIFNvZnR3YXJlIEVuZCBVc2VyIExpY2Vuc2UgQWdyZWVtZW50CisKK1BMRUFTRSAgUkVBRCAgVEhJUyAgTElDRU5TRSAgQ0FSRUZVTExZICBCRUZPUkUgIFVTSU5HICAgVEhFICAgU09GVFdBUkUuICAgQlkKK0RPV05MT0FESU5HLCBJTlNUQUxMSU5HLCBDT1BZSU5HIE9SIFVTSU5HIFRIRSBTT0ZUV0FSRSwgWU9VIEFSRSBBR1JFRUlORyAgVE8KK0JFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuICBJRiBZT1UgQVJFICBBQ0NFU1NJTkcgIFRIRSAgU09GVFdBUkUKK0VMRUNUUk9OSUNBTExZLCAgU0lHTklGWSAgWU9VUiAgQUdSRUVNRU5UICBCWSAgQ0xJQ0tJTkcgIFRIRSAgIkFHUkVFL0FDQ0VQVCIKK0JVVFRPTi4gIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRSwgIFBST01QVExZICBSRVRVUk4KK1RIRSBTT0ZUV0FSRSBUTyBUSEUgUExBQ0UgV0hFUkUgWU9VIE9CVEFJTkVEIElUICBBTkQgIChJRiAgQVBQTElDQUJMRSkgIFlPVVIKK01PTkVZIFdJTEwgQkUgUkVGVU5ERUQgT1IgSUYgVEhFIFNPRlRXQVJFIFdBUyBBQ0NFU1NFRCBFTEVDVFJPTklDQUxMWSAgQ0xJQ0sKKyJESVNBR1JFRS9ERUNMSU5FIi4KKworMS4gTGljZW5zZS4gIEFkdmFuY2VkICBNaWNybyAgIERldmljZXMsICBJbmMuLCAgb24gIGJlaGFsZiAgb2YgIGl0c2VsZiwgIGl0cyAgCitzdWJzaWRpYXJpZXMgIGFuZCAgbGljZW5zb3JzIChyZWZlcnJlZCAgY29sbGVjdGl2ZWx5IGFzICJBTUQiKSBncmFudHMgdG8geW91ICAKK3RoZSAgZm9sbG93aW5nICBub24tZXhjbHVzaXZlLCAgcmlnaHQgIHRvICB1c2UgIHRoZSAgc29mdHdhcmUgICBhY2NvbXBhbnlpbmcgICAKK3RoaXMgICBMaWNlbnNlICAoaGVyZWluYWZ0ZXIgICJTb2Z0d2FyZSIpIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgCitsaW1pdGF0aW9uczoKKworCisoYSkgICBSZWdhcmRsZXNzIG9mIHRoZSBtZWRpYSB1cG9uIHdoaWNoIGl0IGlzIGRpc3RyaWJ1dGVkLCB0aGUgU29mdHdhcmUgIGlzCitsaWNlbnNlZCB0byB5b3UgZm9yIHVzZSBzb2xlbHkgaW4gY29uanVuY3Rpb24gd2l0aCBBTUQgaGFyZHdhcmUgcHJvZHVjdHMgIHRvCit3aGljaCB0aGUgU29mdHdhcmUgcmVsYXRlcyAoIkFNRCBIYXJkd2FyZSIpLgorCisoYikgICBZb3Ugb3duIHRoZSBtZWRpdW0gb24gd2hpY2ggdGhlIFNvZnR3YXJlIGlzIHJlY29yZGVkLCBidXQgQU1EIGFuZCwgIGlmCithcHBsaWNhYmxlLCAgaXRzICBsaWNlbnNvcnMgIHJldGFpbiAgdGl0bGUgIHRvICB0aGUgIFNvZnR3YXJlICBhbmQgICByZWxhdGVkCitkb2N1bWVudGF0aW9uLgorCisoYykgICBZb3UgbWF5OgorCisgIGkpIHVzZSB0aGUgU29mdHdhcmUgc29sZWx5IGluICBjb25uZWN0aW9uICB3aXRoICB0aGUgIEFNRCAgSGFyZHdhcmUgIG9uICBhCisgICBzaW5nbGUgY29tcHV0ZXI7CisKKyAgaWkpIG1ha2Ugb25lIGNvcHkgb2YgdGhlIFNvZnR3YXJlICBpbiAgbWFjaGluZS1yZWFkYWJsZSAgZm9ybSAgZm9yICBiYWNrdXAKKyAgIHB1cnBvc2VzIG9ubHkuIFlvdSBtdXN0IHJlcHJvZHVjZSBvbiBzdWNoIGNvcHkgQU1EJ3MgY29weXJpZ2h0IG5vdGljZSBhbmQKKyAgIGFueSBvdGhlciBwcm9wcmlldGFyeSBsZWdlbmRzIHRoYXQgd2VyZSAgb24gIHRoZSAgb3JpZ2luYWwgIGNvcHkgIG9mICB0aGUKKyAgIFNvZnR3YXJlOworCisgIGlpaSkgdHJhbnNmZXIgYWxsIHlvdXIgbGljZW5zZSByaWdodHMgaW4gdGhlIFNvZnR3YXJlICBwcm92aWRlZCAgeW91ICBtdXN0CisgICBhbHNvIHRyYW5zZmVyIGEgY29weSBvZiB0aGlzIExpY2Vuc2UsIHRoZSBiYWNrdXAgY29weSAgb2YgIHRoZSAgU29mdHdhcmUsCisgICB0aGUgQU1EIEhhcmR3YXJlIGFuZCB0aGUgcmVsYXRlZCBkb2N1bWVudGF0aW9uICBhbmQgIHByb3ZpZGVkICB0aGUgIG90aGVyCisgICBwYXJ0eSByZWFkcyBhbmQgYWdyZWVzICB0byAgYWNjZXB0ICB0aGUgIHRlcm1zICBhbmQgIGNvbmRpdGlvbnMgIG9mICB0aGlzCisgICBMaWNlbnNlLiAgVXBvbiBzdWNoIHRyYW5zZmVyIHlvdXIgbGljZW5zZSByaWdodHMgYXJlIHRoZW4gdGVybWluYXRlZC4KKworKGQpICAgSW4gYWRkaXRpb24gdG8gdGhlIGxpY2Vuc2UgdGVybXMgYWJvdmUsIHdpdGggcmVzcGVjdCAgdG8gIHBvcnRpb25zICBvZgordGhlIFNvZnR3YXJlIGluIHNvdXJjZSBjb2RlIG9yIGJpbmFyeSAgZm9ybSAgZGVzaWduZWQgIGV4Y2x1c2l2ZWx5ICBmb3IgIHVzZQord2l0aCB0aGUgTGludXggb3BlcmF0aW5nIHN5c3RlbSAoIkFNRCBMaW51eCBDb2RlIiksIHlvdSAgbWF5ICB1c2UsICBkaXNwbGF5LAorbW9kaWZ5LCBjb3B5LCBkaXN0cmlidXRlLCBhbGxvdyBvdGhlcnMgdG8gIHJlLWRpc3RyaWJ1dGUsICBwYWNrYWdlICBhbmQgIHJlLQorcGFja2FnZSBzdWNoIEFNRCBMaW51eCBDb2RlICBmb3IgIGNvbW1lcmNpYWwgIGFuZCAgbm9uLWNvbW1lcmNpYWwgIHB1cnBvc2VzLAorcHJvdmlkZWQgdGhhdDoKKworICAgaSkgYWxsIGJpbmFyeSBjb21wb25lbnRzIG9mIHRoZSBBTUQgTGludXggQ29kZSBhcmUgbm90ICBtb2RpZmllZCAgaW4gIGFueQorICAgd2F5OworCisgICBpaSkgdGhlIEFNRCBMaW51eCBDb2RlIGlzIG9ubHkgdXNlZCAgYXMgIHBhcnQgIG9mICB0aGUgIFNvZnR3YXJlICBhbmQgIGluCisgICBjb25uZWN0aW9uIHdpdGggQU1EIEhhcmR3YXJlOworCisgICBpaWkpIGFsbCBjb3B5cmlnaHQgbm90aWNlcyBvZiBBTUQgYXJlIHJlcHJvZHVjZWQgYW5kIHlvdSByZWZlciAgdG8gIHRoZXNlCisgICBsaWNlbnNlIHRlcm1zOworCisgICBpdikgeW91ICBtYXkgIG5vdCAgb2ZmZXIgIG9yICBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSB1c2UgIG9mICBBTUQgIExpbnV4CisgICBDb2RlIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhpcyBMaWNlbnNlOyBhbmQKKworICAgdikgaWYgeW91IGhhdmUgbW9kaWZpZWQgdGhlIEFNRCBMaW51eCBDb2RlLCBzdWNoICBtb2RpZmljYXRpb25zICB3aWxsICBiZQorICAgbWFkZSBwdWJsaWNseSBhdmFpbGFibGUgYW5kIGFyZSBsaWNlbnNlZCB1bmRlciB0aGUgIHNhbWUgIHRlcm1zICBwcm92aWRlZAorICAgaGVyZWluIHRvIEFNRCBvciBhbnkgIG90aGVyICB0aGlyZCAgcGFydHkgIHdpdGhvdXQgIGZ1cnRoZXIgIHJlc3RyaWN0aW9uLAorICAgcm95YWx0eSBvciBhbnkgb3RoZXIgbGljZW5zZSByZXF1aXJlbWVudDsKKworICAgdmkpIHRvICB0aGUgIGV4dGVudCAgdGhlcmUgIGlzICBhbnkgQU1EIHNhbXBsZSBvciAgY29udHJvbCAgcGFuZWwgIHNvdXJjZQorICAgY29kZSBpbmNsdWRlZCBpbiB0aGUgQU1EIExpbnV4IENvZGUsIG5vIHJpZ2h0cyBhcmUgZ3JhbnRlZCB0byBtb2RpZnkgc3VjaAorICAgY29kZSBleGNlcHQgZm9yIHBvcnRpb25zIHRoZXJlb2YgdGhhdCAgbWF5ICBiZSAgc3ViamVjdCAgdG8gIHRoaXJkICBwYXJ0eQorICAgbGljZW5zZSB0ZXJtcyB0aGF0IGdyYW50IHN1Y2ggcmlnaHRzOyAKKyAgIAorICAgdmlpKSBubyByaWdodHMgYXJlIGdyYW50ZWQgdG8gZGlzdHJpYnV0ZSB0aGUgYmluYXJ5IGZvcm0gb2YgdGhlIEFNRCBMaW51eAorICAgS2VybmVsIE1vZHVsZSBtYWRlIGJ5IGxpbmtpbmcgdGhlIEFNRCBQcm9wcmlldGFyeSAgS2VybmVsIExpYnJhcnkgYW5kIHRoZSAKKyAgIEFNRCAgS2VybmVsICBDb21wYXRpYmlsaXR5ICBMYXllciAgYmluYXJ5ICBjb21waWxlZCAgdXNpbmcgIExpbnV4ICBrZXJuZWwgCisgICBoZWFkZXJzOworCisgICB2aWlpKSBBTUQgaXMgbm90ICBvYmxpZ2F0ZWQgIHRvICBwcm92aWRlICBhbnkgIG1haW50ZW5hbmNlICBvciAgdGVjaG5pY2FsIAorICAgc3VwcG9ydCBmb3IgYW55IGNvZGUgcmVzdWx0aW5nIGZyb20gQU1EIExpbnV4IENvZGUuCisKKzIuICBSZXN0cmljdGlvbnMuICBUaGUgU29mdHdhcmUgY29udGFpbnMgY29weXJpZ2h0ZWQgYW5kIHBhdGVudGVkICBtYXRlcmlhbCwKK3RyYWRlIHNlY3JldHMgYW5kIG90aGVyIHByb3ByaWV0YXJ5IG1hdGVyaWFsLiAgSW4gIG9yZGVyICB0byAgcHJvdGVjdCAgdGhlbSwKK2FuZCBleGNlcHQgYXMgcGVybWl0dGVkIGJ5IHRoaXMgbGljZW5zZSBvciBhcHBsaWNhYmxlIGxlZ2lzbGF0aW9uLCAgeW91ICBtYXkKK25vdDoKKworICBhKSBkZWNvbXBpbGUsICByZXZlcnNlICBlbmdpbmVlciwgIGRpc2Fzc2VtYmxlICBvciAgb3RoZXJ3aXNlICByZWR1Y2UgIHRoZQorICAgU29mdHdhcmUgdG8gYSBodW1hbi1wZXJjZWl2YWJsZSBmb3JtOworCisgIGIpIG1vZGlmeSwgbmV0d29yaywgcmVudCwgbGVuZCwgIGxvYW4sICBkaXN0cmlidXRlICBvciAgY3JlYXRlICBkZXJpdmF0aXZlCisgICB3b3JrcyBiYXNlZCB1cG9uIHRoZSBTb2Z0d2FyZSBpbiB3aG9sZSBvciBpbiBwYXJ0OyBvcgorCisgIGMpIGVsZWN0cm9uaWNhbGx5IHRyYW5zbWl0IHRoZSBTb2Z0d2FyZSBmcm9tIG9uZSBjb21wdXRlciAgdG8gIGFub3RoZXIgIG9yCisgICBvdmVyIGEgbmV0d29yayBvciBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFNvZnR3YXJlIGV4Y2VwdCBhcyBwZXJtaXR0ZWQgIGJ5CisgICB0aGlzIExpY2Vuc2UuCisKKzMuICBUZXJtaW5hdGlvbi4gIFRoaXMgTGljZW5zZSAgaXMgIGVmZmVjdGl2ZSAgdW50aWwgIHRlcm1pbmF0ZWQuICAgWW91ICBtYXkKK3Rlcm1pbmF0ZSB0aGlzIExpY2Vuc2UgYXQgYW55ICB0aW1lICBieSAgZGVzdHJveWluZyAgdGhlICBTb2Z0d2FyZSwgIHJlbGF0ZWQKK2RvY3VtZW50YXRpb24gIGFuZCAgYWxsICBjb3BpZXMgIHRoZXJlb2YuICAgVGhpcyAgTGljZW5zZSAgIHdpbGwgICB0ZXJtaW5hdGUKK2ltbWVkaWF0ZWx5IHdpdGhvdXQgIG5vdGljZSAgZnJvbSAgQU1EICBpZiAgeW91ICBmYWlsICB0byAgY29tcGx5ICB3aXRoICBhbnkKK3Byb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UuICBVcG9uIHRlcm1pbmF0aW9uIHlvdSBtdXN0IGRlc3Ryb3kgdGhlICBTb2Z0d2FyZSwKK3JlbGF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQgYWxsIGNvcGllcyB0aGVyZW9mLgorCis0LiAgR292ZXJubWVudCBFbmQgVXNlcnMuIElmIHlvdSBhcmUgYWNxdWlyaW5nIHRoZSAgU29mdHdhcmUgIG9uICBiZWhhbGYgIG9mCithbnkgIHVuaXQgIG9yICBhZ2VuY3kgIG9mICB0aGUgIFVuaXRlZCAgU3RhdGVzICBHb3Zlcm5tZW50LCAgdGhlICAgZm9sbG93aW5nCitwcm92aXNpb25zIGFwcGx5LiAgVGhlIEdvdmVybm1lbnQgIGFncmVlcyAgdGhlICBTb2Z0d2FyZSAgYW5kICBkb2N1bWVudGF0aW9uCit3ZXJlICBkZXZlbG9wZWQgIGF0ICBwcml2YXRlICBleHBlbnNlICBhbmQgIGFyZSAgcHJvdmlkZWQgIHdpdGggICJSRVNUUklDVEVECitSSUdIVFMiLiAgVXNlLCBkdXBsaWNhdGlvbiwgb3IgZGlzY2xvc3VyZSBieSB0aGUgR292ZXJubWVudCAgaXMgIHN1YmplY3QgIHRvCityZXN0cmljdGlvbnMgYXMgc2V0IGZvcnRoIGluIERGQVJTIDIyNy43MjAyLTEoYSkgYW5kICAyMjcuNzIwMi0zKGEpICAoMTk5NSksCitERkFSUyAyNTIuMjI3LTcwMTMoYykoMSkoaWkpIChPY3QgMTk4OCksIEZBUiAgMTIuMjEyKGEpKDE5OTUpLCAgRkFSICA1Mi4yMjctCisxOSwgKEp1bmUgMTk4Nykgb3IgRkFSIDUyLjIyNy0xNChBTFQgSUlJKSAoSnVuZSAxOTg3KSxhcyBhbWVuZGVkICBmcm9tICB0aW1lCit0byB0aW1lLiAgSW4gdGhlIGV2ZW50IHRoYXQgdGhpcyBMaWNlbnNlLCBvciBhbnkgIHBhcnQgIHRoZXJlb2YsICBpcyAgZGVlbWVkCitpbmNvbnNpc3RlbnQgd2l0aCB0aGUgbWluaW11bSByaWdodHMgaWRlbnRpZmllZCAgaW4gIHRoZSAgUmVzdHJpY3RlZCAgUmlnaHRzCitwcm92aXNpb25zLCB0aGUgbWluaW11bSByaWdodHMgc2hhbGwgcHJldmFpbC4KKworNS4gIE5vIE90aGVyIExpY2Vuc2UuICBObyByaWdodHMgb3IgbGljZW5zZXMgYXJlIGdyYW50ZWQgYnkgQU1EICB1bmRlciAgdGhpcworTGljZW5zZSwgZXhwcmVzc2x5IG9yICBieSAgaW1wbGljYXRpb24sICB3aXRoICByZXNwZWN0ICB0byAgYW55ICBwcm9wcmlldGFyeQoraW5mb3JtYXRpb24gIG9yICBwYXRlbnQsICBjb3B5cmlnaHQsICB0cmFkZSAgc2VjcmV0ICBvciAgb3RoZXIgIGludGVsbGVjdHVhbAorcHJvcGVydHkgcmlnaHQgb3duZWQgb3IgY29udHJvbGxlZCBieSBBTUQsIGV4Y2VwdCBhcyBleHByZXNzbHkgIHByb3ZpZGVkICBpbgordGhpcyBMaWNlbnNlLgorCis2LiAgQWRkaXRpb25hbCBMaWNlbnNlcy4gIERJU1RSSUJVVElPTiAgT1IgIFVTRSAgT0YgIFRIRSAgU09GVFdBUkUgIFdJVEggIEFOCitPUEVSQVRJTkcgU1lTVEVNIE1BWSBSRVFVSVJFIEFERElUSU9OQUwgTElDRU5TRVMgRlJPTSBUSEUgIE9QRVJBVElORyAgU1lTVEVNCitWRU5ET1IuCisKKzcuICBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5ICBvbiAgU29mdHdhcmUuICAgWW91ICBleHByZXNzbHkgIGFja25vd2xlZGdlICBhbmQKK2FncmVlIHRoYXQgdXNlIG9mIHRoZSBTb2Z0d2FyZSBpcyBhdCAgeW91ciAgc29sZSAgcmlzay4gICBUaGUgIFNvZnR3YXJlICBhbmQKK3JlbGF0ZWQgZG9jdW1lbnRhdGlvbiBhcmUgcHJvdmlkZWQgIkFTIElTIiBhbmQgd2l0aG91dCB3YXJyYW50eSBvZiBhbnkgIGtpbmQKK2FuZCBBTUQgRVhQUkVTU0xZIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUywgRVhQUkVTUyBBTkQgSU1QTElFRCwgIElOQ0xVRElORywKK0JVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiAgTUVSQ0hBTlRBQklMSVRZICBBTkQgIEZJVE5FU1MKK0ZPUkEgUEFSVElDVUxBUiAgUFVSUE9TRSwgIE9GICBRVUFMSVRZLCAgT0YgIFFVSUVUICBFTkpPWU1FTlQgIEFORCAgT0YgIE5PTi0KK0lORlJJTkdFTUVOVCAgT0YgIFRISVJEICBQQVJUWSAgUklHSFRTLiAgIEFNRCAgRE9FUyAgTk9UICBXQVJSQU5UICBUSEFUICBUSEUKK0ZVTkNUSU9OUyBDT05UQUlORUQgSU4gVEhFIFNPRlRXQVJFIFdJTEwgTUVFVCAgWU9VUiAgUkVRVUlSRU1FTlRTLCAgT1IgIFRIQVQKK1RIRSBPUEVSQVRJT04gT0YgVEhFIFNPRlRXQVJFIFdJTEwgQkUgVU5JTlRFUlJVUFRFRCBPUiBFUlJPUi1GUkVFLCAgT1IgIFRIQVQKK0RFRkVDVFMgSU4gVEhFIFNPRlRXQVJFIFdJTEwgQkUgIENPUlJFQ1RFRC4gICBUSEUgIEVOVElSRSAgUklTSyAgQVMgIFRPICBUSEUKK1JFU1VMVFMgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBTT0ZUV0FSRSBJUyAgQVNTVU1FRCAgQlkgIFlPVS4gICBGVVJUSEVSTU9SRSwKK0FNRCBET0VTIE5PVCBXQVJSQU5UIE9SIE1BS0UgQU5ZIFJFUFJFU0VOVEFUSU9OUyAgUkVHQVJESU5HICBUSEUgIFVTRSAgT1JUSEUKK1JFU1VMVFMgT0YgVEhFIFVTRSBPRiBUSEUgU09GVFdBUkUgT1IgIFJFTEFURUQgIERPQ1VNRU5UQVRJT04gIElOICBURVJNUyAgT0YKK1RIRUlSIENPUlJFQ1RORVNTLCBBQ0NVUkFDWSwgIFJFTElBQklMSVRZLCAgQ1VSUkVOVE5FU1MsICBPUiAgT1RIRVJXSVNFLiAgTk8KK09SQUwgT1IgV1JJVFRFTiBJTkZPUk1BVElPTiBPUiBBRFZJQ0UgIEdJVkVOICBCWSAgQU1EICBPUiAgQU1EJ1MgIEFVVEhPUklaRUQKK1JFUFJFU0VOVEFUSVZFIFNIQUxMIENSRUFURSBBIFdBUlJBTlRZIE9SIElOIEFOWSBXQVkgSU5DUkVBU0UgVEhFICBTQ09QRSAgT0YKK1RISVMgV0FSUkFOVFkuICBTSE9VTEQgVEhFIFNPRlRXQVJFIFBST1ZFIERFRkVDVElWRSwgWU9VICAoQU5EICBOT1QgIEFNRCAgT1IKK0FNRCdTIEFVVEhPUklaRUQgUkVQUkVTRU5UQVRJVkUpIEFTU1VNRSBUSEUgRU5USVJFICBDT1NUICBPRiAgQUxMICBORUNFU1NBUlkKK1NFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uICBUSEUgU09GVFdBUkUgSVMgTk9UIElOVEVOREVEICBGT1IgIFVTRSAgSU4KK01FRElDQUwsIExJRkUgU0FWSU5HIE9SIExJRkUgU1VTVEFJTklORyAgQVBQTElDQVRJT05TLiAgIFNPTUUgIEpVUklTRElDVElPTlMKK0RPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgIFNPICBUSEUgIEFCT1ZFICBFWENMVVNJT04KK01BWSBOT1QgQVBQTFkgVE8gWU9VLgorCis4LiAgTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIFRPIFRIRSBNQVhJTVVNIEVYVEVOVCBQRVJNSVRURUQgQlkgIExBVywgIFVOREVSCitOTyAgQ0lSQ1VNU1RBTkNFUyAgSU5DTFVESU5HICBORUdMSUdFTkNFLCAgU0hBTEwgIEFNRCwgIE9SICBJVFMgICBESVJFQ1RPUlMsCitPRkZJQ0VSUywgRU1QTE9ZRUVTICBPUiAgQUdFTlRTLCAgQkUgIExJQUJMRSAgVE8gIFlPVSAgRk9SICBBTlkgIElOQ0lERU5UQUwsCitJTkRJUkVDVCwgU1BFQ0lBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORyBEQU1BR0VTICBGT1IgIExPU1MgIE9GCitCVVNJTkVTUyBQUk9GSVRTLCBCVVNJTkVTUyBJTlRFUlJVUFRJT04sIExPU1MgIE9GICBCVVNJTkVTUyBJTkZPUk1BVElPTiwgQU5ECitUSEUgTElLRSkgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSwgTUlTVVNFIE9SIElOQUJJTElUWSBUTyAgVVNFICBUSEUgIFNPRlRXQVJFCitPUiBSRUxBVEVEIERPQ1VNRU5UQVRJT04sIEJSRUFDSCBPUiBERUZBVUxULCBJTkNMVURJTkcgIFRIT1NFICBBUklTSU5HICBGUk9NCitJTkZSSU5HRU1FTlQgT1IgQUxMRUdFRCBJTkZSSU5HRU1FTlQgT0YgQU5ZIFBBVEVOVCwgVFJBREVNQVJLLCBDT1BZUklHSFQgIE9SCitPVEhFUiBJTlRFTExFQ1RVQUwgUFJPUEVSVFkgUklHSFQsIEJZIEFNRCwgRVZFTiBJRiBBTUQgT1IgIEFNRCdTICBBVVRIT1JJWkVECitSRVBSRVNFTlRBVElWRSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiAgU1VDSCAgREFNQUdFUy4gICBTT01FCitKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgTElNSVRBVElPTiAgT1IgIEVYQ0xVU0lPTiAgT0YgIExJQUJJTElUWSAgRk9SCitJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhFIEFCT1ZFICBMSU1JVEFUSU9OICBPUiAgRVhDTFVTSU9OCitNQVkgTk9UIEFQUExZIFRPIFlPVS4gIEFNRCB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIDEpIGxvc3Mgb2YsIG9yIGRhbWFnZSAgdG8sCit5b3VyIHJlY29yZHMgb3IgZGF0YSBvciAyKSBhbnkgZGFtYWdlcyBjbGFpbWVkIGJ5IHlvdSAgYmFzZWQgIG9uICBhbnkgIHRoaXJkCitwYXJ0eSBjbGFpbS4gICBJbiBubyBldmVudCBzaGFsbCAgQU1EJ3MgIHRvdGFsICBsaWFiaWxpdHkgIHRvICB5b3UgIGZvciAgYWxsCitkYW1hZ2VzLCBsb3NzZXMsIGFuZCBjYXVzZXMgb2YgYWN0aW9uICh3aGV0aGVyIGluIGNvbnRyYWN0LCB0b3J0ICAoaW5jbHVkaW5nCituZWdsaWdlbmNlKSBvciBvdGhlcndpc2UpIGV4Y2VlZCB0aGUgYW1vdW50IHBhaWQgYnkgeW91ICBmb3IgIHRoZSAgU29mdHdhcmUuCitUaGUgZm9yZWdvaW5nIGxpbWl0YXRpb25zIHdpbGwgYXBwbHkgZXZlbiBpZiAgdGhlICBhYm92ZSAgc3RhdGVkICBsaW1pdGF0aW9uCitmYWlscyBvZiBpdHMgZXNzZW50aWFsIHB1cnBvc2UuCisKKzkuICBDb250cm9sbGluZyBMYXcgYW5kIFNldmVyYWJpbGl0eS4gIFRoaXMgTGljZW5zZSAgc2hhbGwgIGJlICBnb3Zlcm5lZCAgYnkKK2FuZCBjb25zdHJ1ZWQgdW5kZXIgdGhlIGxhd3Mgb2YgdGhlICBQcm92aW5jZSAgb2YgIE9udGFyaW8sICBDYW5hZGEgIHdpdGhvdXQKK3JlZmVyZW5jZSB0byBpdHMgY29uZmxpY3Qgb2YgbGF3IHByaW5jaXBsZXMuICAgQW55ICBkaXNwdXRlICByZWxhdGVkICBoZXJldG8KK3dpbGwgYmUgYnJvdWdodCBvbmx5IGluIHRoZSBjb3VydHMgaW4gIFRvcm9udG8sICBPbnRhcmlvLCAgQ2FuYWRhICBhbmQgIHN1Y2gKK2NvdXJ0cyBhcmUgYWdyZWVkICB0byAgYmUgIHRoZSAgY29udmVuaWVudCAgZm9ydW0uICAgSW4gIHRoZSAgZXZlbnQgIG9mICBhbnkKK2NvbmZsaWN0cyBiZXR3ZWVuIGZvcmVpZ24gbGF3LCBydWxlcywgYW5kICByZWd1bGF0aW9ucywgIGFuZCAgQ2FuYWRpYW4gIGxhdywKK3J1bGVzLCBhbmQgcmVndWxhdGlvbnMsIENhbmFkaWFuIGxhdywgcnVsZXMgYW5kICByZWd1bGF0aW9ucyAgc2hhbGwgIHByZXZhaWwKK2FuZCAgZ292ZXJuLiAgIFRoZSAgVW5pdGVkICBOYXRpb25zICBDb252ZW50aW9uICAgb24gICBDb250cmFjdHMgICBmb3IgICB0aGUKK0ludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBzaGFsbCBub3QgYXBwbHkgdG8gdGhpcyAgTGljZW5zZS4gICBJZiAgZm9yICBhbnkKK3JlYXNvbiBhIGNvdXJ0ICBvZiAgY29tcGV0ZW50ICBqdXJpc2RpY3Rpb24gIGZpbmRzICBhbnkgIHByb3Zpc2lvbiAgb2YgIHRoaXMKK0xpY2Vuc2Ugb3IgcG9ydGlvbiB0aGVyZW9mLCB0byAgYmUgIHVuZW5mb3JjZWFibGUsICB0aGF0ICBwcm92aXNpb24gIG9mICB0aGUKK0xpY2Vuc2Ugc2hhbGwgYmUgZW5mb3JjZWQgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pc3NpYmxlIHNvIGFzIHRvICBlZmZlY3QKK3RoZSBpbnRlbnQgb2YgdGhlIHBhcnRpZXMsIGFuZCB0aGUgcmVtYWluZGVyIG9mIHRoaXMgTGljZW5zZSBzaGFsbCAgY29udGludWUKK2luIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdC4KKworMTAuICBDb21wbGV0ZSBBZ3JlZW1lbnQuICBUaGlzICBMaWNlbnNlICBjb25zdGl0dXRlcyAgdGhlICBlbnRpcmUgIGFncmVlbWVudAorYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIHVzZSBvZiB0aGUgU29mdHdhcmUgYW5kIHRoZSAgcmVsYXRlZAorZG9jdW1lbnRhdGlvbiwgYW5kIHN1cGVyc2VkZXMgYWxsIHByaW9yICBvciAgY29udGVtcG9yYW5lb3VzICB1bmRlcnN0YW5kaW5ncworb3IgIGFncmVlbWVudHMsICB3cml0dGVuICBvciAgb3JhbCwgIHJlZ2FyZGluZyAgc3VjaCAgc3ViamVjdCAgbWF0dGVyLiAgICBObworYW1lbmRtZW50IHRvIG9yIG1vZGlmaWNhdGlvbiBvZiB0aGlzICBMaWNlbnNlICB3aWxsICBiZSAgYmluZGluZyAgdW5sZXNzICBpbgord3JpdGluZyBhbmQgc2lnbmVkIGJ5IGEgZHVseSBhdXRob3JpemVkIHJlcHJlc2VudGF0aXZlIG9mIEFNRC4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0FNRC1BREwgYi9saWNlbnNlcy9BTUQtQURMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiYmY0YmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9BTUQtQURMCkBAIC0wLDAgKzEsNjUgQEAKKyAgICAgICAgICAgICAgICAgU09GVFdBUkUgREVWRUxPUE1FTlQgS0lUIExJQ0VOU0UgQUdSRUVNRU5UCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFETCBTREspCisKK0lNUE9SVEFOVOKAlFJFQUQgQ0FSRUZVTExZOiAgVGhpcyBpcyBhIGxlZ2FsIGFncmVlbWVudCAoIkFncmVlbWVudCIpIGJldHdlZW4geW91IGFuZCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuICgiQU1EIikuIFlvdXIgdXNlIG9mIHRoaXMgQU1EIFNvZnR3YXJlIERldmVsb3BtZW50IEtpdCwgKHRoZSAiU0RLIikgYW5kIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiAodGhlICJEb2N1bWVudGF0aW9uIikgdGhlIGNvbnRlbnRzIG9mIHdoaWNoIGFyZSBsaXN0ZWQgaW4gU2NoZWR1bGUgQSwgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gRG8gbm90IHVzZSB0aGlzIFNESyBhbmQgRG9jdW1lbnRhdGlvbiB1bnRpbCB5b3UgaGF2ZSBjYXJlZnVsbHkgcmVhZCBhbmQgYWdyZWVkIHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMuICAgQnkgZG93bmxvYWRpbmcgb3IgdXNpbmcgdGhlIFNESyBvciBEb2N1bWVudGF0aW9uIG9idGFpbmVkIGhlcmV3aXRoLCB5b3UgYXJlIGV4cHJlc3NseSBhZ3JlZWluZyB0byBhbGwgb2YgdGhlIGZvbGxvd2luZyB0ZXJtczogCitXQVJSQU5USUVTLCBTVVBQT1JULCBSSUdIVFMsIEFORCBEQU1BR0VTIEFSRSBESVNDTEFJTUVEIEFORC9PUiBMSU1JVEVEIEJFTE9XLCBQTEVBU0UgUkVBRCBFTlRJUkVMWSBBTkQgQ0FSRUZVTExZLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgT0YgVEhJUyBBR1JFRU1FTlQsIERPIE5PVCBBQ0NFUFQgVEhJUyBBR1JFRU1FTlQgT1IgVVNFIFRISVMgU0RLLCBET0NVTUVOQVRJT04gT1IgQU5ZIFBPUlRJT04gVEhFUkVPRi4KKzEuIERlbGl2ZXJhYmxlcy4gIElmIHlvdSBhY2NlcHQgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIEFNRCB3aWxsIHByb3ZpZGUgeW91IHdpdGggdGhlIFNESyBhbmQgRG9jdW1lbnRhdGlvbi4gIFRoZSBTREsgY29udGFpbnM6IChhKSBtYWNoaW5lIHJlYWRhYmxlIGNvbXB1dGVyIHByb2dyYW1taW5nIGNvZGUgZmlsZXMgKCJPYmplY3QgQ29kZSIpIGFuZDsgKGIpIGh1bWFuIHJlYWRhYmxlIGZvcm0gY29tcHV0ZXIgcHJvZ3JhbW1pbmcgY29kZSBhbmQgcmVsYXRlZCBzeXN0ZW0gbGV2ZWwgZG9jdW1lbnRhdGlvbiwgaW5jbHVkaW5nIGFsbCBjb21tZW50cywgc3ltYm9scyBhbmQgYW55IHByb2NlZHVyYWwgY29kZSBzdWNoIGFzIGpvYiBjb250cm9sIGxhbmd1YWdlICgiU291cmNlIENvZGUiKS4gVGhlIFNESyBhbmQgRG9jdW1lbnRhdGlvbiBpcyBsaWNlbnNlZCwgbm90IHNvbGQsIHRvIHlvdSBieSBBTUQgYW5kIGl0cyBsaWNlbnNvcnMgKGNvbGxlY3RpdmVseSByZWZlcnJlZCB0byBhcyAiQU1EIikgb24gdGhlIHRlcm1zIHNldCBvdXQgaGVyZWluLiAgQU1EIHJldGFpbnMgb3duZXJzaGlwIG9mIHRoZSBTREssIERvY3VtZW50YXRpb24gYW5kIGFueSBkZXJpdmF0aXZlIHdvcmtzIHRoZXJlb2YuICAKKzIuIFB1cnBvc2UuIEFNRCBpcyBhZ3JlZWluZyB0byBwcm92aWRlIHlvdSB3aXRoIHRoZSBTREsgYW5kIERvY3VtZW50YXRpb24gc29sZWx5IGZvciB0aGUgcHVycG9zZSBvZiBkZXZlbG9waW5nIGFuZCBkaXN0cmlidXRpbmcgc29mdHdhcmUgdGhhdCBvcGVyYXRlcyB3aXRoIEFNRCBwcm9kdWN0cyAodGhlICJMaWNlbnNlZCBQdXJwb3NlIikuICBUaGUgc29mdHdhcmUgdGhhdCB5b3UgZGlzdHJpYnV0ZSB0aGF0IGluY2x1ZGVzIGFsbCBvciBhIHBvcnRpb24gb2YgdGhlIFNESyBpcyBoZXJlaW5hZnRlciByZWZlcnJlZCB0byBhcyB0aGUgKCJEaXN0cmlidXRlZCBTb2Z0d2FyZSIpLgorMy4gTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQsIEFNRCBoZXJlYnkgZ3JhbnRzIHlvdSBhIG5vbi1leGNsdXNpdmUsIHJveWFsdHktZnJlZSwgcmV2b2NhYmxlLCBub24tdHJhbnNmZXJhYmxlLCBub24tYXNzaWduYWJsZSwgbGltaXRlZCBsaWNlbnNlIHRvOiAKKyhhKSB1c2UgYW5kIHJlcHJvZHVjZSBjb3BpZXMgb2YgdGhlIFNESyBhbmQgRG9jdW1lbnRhdGlvbiB0aGF0IGFyZSByZWFzb25hYmx5IHJlcXVpcmVkIHNvbGVseSB0byBjYXJyeSBvdXQgdGhlIExpY2Vuc2VkIFB1cnBvc2U7CisoYikgaW5zdGFsbCBhbmQgdXNlIGEgcmVhc29uYWJsZSBudW1iZXIgb2YgY29waWVzIG9mIHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgU0RLIGludGVybmFsbHkgYXQgeW91ciBzaXRlKHMpIHNvbGVseSB0byBjYXJyeSBvdXQgdGhlIExpY2Vuc2VkIFB1cnBvc2U7CisoYykgbW9kaWZ5IGFuZCBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU291cmNlIENvZGUgb2YgdGhlIFNESyBzb2xlbHkgZm9yIHRoZSBMaWNlbnNlZCBQdXJwb3NlOyBhbmQKKyhkKSBkaXN0cmlidXRlLCBpbiBvYmplY3QgY29kZSBmb3JtIHRoZSBEaXN0cmlidXRlZCBTb2Z0d2FyZSwgc29sZWx5IHRvIGNhcnJ5IG91dCB0aGUgbGljZW5zZWQgcHVycG9zZS4gICAKK0V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgaW4gdGhpcyBTZWN0aW9uIDMsIEFNRCBkb2VzIG5vdCBncmFudCwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVscyBvciBvdGhlcndpc2UgdW5kZXIgYW55IHBhdGVudHMsIHRyYWRlbWFya3MsIGNvcHlyaWdodHMsIG1hc2sgd29ya3MsIHRyYWRlIHNlY3JldCBpbmZvcm1hdGlvbiwgaW50ZWxsZWN0dWFsIHByb3BlcnR5LCBsaWNlbnNlIG9yIHNpbWlsYXIgbWF0ZXJpYWwuICBZb3UgYWNrbm93bGVkZ2UgdGhhdCBhbGwgbGljZW5zZXMgZ3JhbnRlZCBoZXJlaW4gYXJlIGNvbmRpdGlvbmVkIHVwb24gdGhlIHVzZSBvZiB0aGUgU0RLIGFuZCBEb2N1bWVudGF0aW9uIGZvciB0aGUgTGljZW5zZWQgUHVycG9zZS4gIFRpdGxlIHRvIGFuZCBvd25lcnNoaXAgb2YgdGhlIE1hdGVyaWFscywgZGVyaXZhdGl2ZXMgb2YgdGhlIE1hdGVyaWFscyAocmVnYXJkbGVzcyBvZiB3aG8gbWFkZSBzdWNoIGRlcml2YXRpdmVzKSwgYW5kIGFsbCBjb3BpZXMgdGhlcmVvZiBzaGFsbCBiZSBhbmQvb3IgYXQgYWxsIHRpbWVzIHJlbWFpbiBpbiBBTUQuCis0LiBSZXF1aXJlbWVudHMuIFdpdGggcmVzcGVjdCB0byBhbGwgRGlzdHJpYnV0ZWQgU29mdHdhcmUsIHlvdSBtdXN0OiAKK2EpIHJlcXVpcmUgYWxsIGRpc3RyaWJ1dG9ycyBhbmQgYW55L29yIHRoaXJkIHBhcnR5IGVuZCB1c2VycyB0byBhZ3JlZSB0byB1c2UgdGhlIERpc3RyaWJ1dGVkIFNvZnR3YXJlIGluIGFjY29yZGFuY2Ugd2l0aCB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0IGFyZSBzdWJzdGFudGlhbGx5IHNpbWlsYXIgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGNvbnRhaW5lZCBpbiBTY2hlZHVsZSBCIGhlcmVvZi4gIFlvdSBtYXkgaW5jbHVkZSB0aGVzZSB0ZXJtcyBpbiB5b3VyIHN0YW5kYXJkIGZvcm0gYWdyZWVtZW50OworYikgcmVwcm9kdWNlIGFsbCBBTUQgdHJhZGVtYXJrIGFuZC9vciBjb3B5cmlnaHQgbm90aWNlcyBvbiBhbnkgY29weSBvZiBEaXN0cmlidXRlZCBTb2Z0d2FyZSB0aGF0IHlvdSBkaXN0cmlidXRlOworNS4gIFJlc3RyaWN0aW9ucy4gIFJlc3RyaWN0aW9ucyByZWdhcmRpbmcgeW91ciB1c2Ugb2YgdGhlIFNESyBhcmUgYXMgZm9sbG93cywgeW91IG1heSBub3Q6IAorYSkgZGVjb21waWxlLCBkaXNhc3NlbWJsZSwgcmV2ZXJzZSBlbmdpbmVlciwgZGlzYXNzZW1ibGUgb3Igb3RoZXJ3aXNlIHJlZHVjZSB0aGUgc29mdHdhcmUgY29udGFpbmVkIGluIHRoZSBTREsgdG8gYSBodW1hbi1wZXJjZWl2YWJsZSBmb3JtLCBleGNlcHQgYXMgb3RoZXJ3aXNlIGNvbnRlbXBsYXRlZCBoZXJlaW47IAorYikgYWx0ZXIgYW55IGNvcHlyaWdodCwgdHJhZGVtYXJrIG9yIHBhdGVudCBub3RpY2UgaW4gdGhlIFNESzsKK2MpIHVzZSBBTUTigJlzIHRyYWRlbWFya3MgaW4geW91ciBwcm9ncmFtc+KAmSBuYW1lcyBvciBpbiBhIHdheSB0aGF0IHN1Z2dlc3RzIHRoZSBEaXN0cmlidXRlZCBTb2Z0d2FyZSBjb21lcyBmcm9tIG9yIGlzIGVuZG9yc2VkIGJ5IEFNRDsKK2QpIGluY2x1ZGUgY29udGVudHMgaW4gbWFsaWNpb3VzLCBkZWNlcHRpdmUgb3IgdW5sYXdmdWwgcHJvZ3JhbXM7IAorZSkgbW9kaWZ5IG9yIGRpc3RyaWJ1dGUgdGhlIFNvdXJjZSBDb2RlIG9mIGFueSBvZiB0aGUgRGlzdHJpYnV0ZWQgU29mdHdhcmUgc28gdGhhdCBhbnkgcGFydCBvZiBpdCBiZWNvbWVzIHN1YmplY3QgdG8gYW4gRXhjbHVkZWQgbGljZW5zZS4gIEFuICJFeGNsdWRlZCBMaWNlbnNlIiBpcyBvbmUgdGhhdCByZXF1aXJlcywgYXMgYSBjb25kaXRpb24gb2YgdXNlLCBtb2RpZmljYXRpb24gb3IgZGlzdHJpYnV0aW9uLCB0aGF0IGNvZGUgYmUgZGlzY2xvc2VkIG9yIGRpc3RyaWJ1dGVkIGluIHNvdXJjZSBjb2RlIGZvcm07IG9yIHRoYXQgb3RoZXJzIGhhdmUgdGhlIHJpZ2h0IHRvIG1vZGlmeSBpdDsKK2YpIHB1Ymxpc2ggdGhlIFNESyBvciBEb2N1bWVudGF0aW9uIGZvciBvdGhlcnMgdG8gdXNlIG9yIGNvcHk7IG9yCitnKSByZW50LCBsZWFzZSBvciBsZW5kIHRoZSBTREsgb3IgRG9jdW1lbnRhdGlvbiBvciB0cmFuc2ZlciB0aGUgU0RLIG9yIERvY3VtZW50YXRpb24gdG8gYW55IHRoaXJkIHBhcnR5LgorNi4gTm8gU3VwcG9ydC4gIEFNRCBpcyB1bmRlciBubyBvYmxpZ2F0aW9uIHRvIHByb3ZpZGUgYW55IGtpbmQgb2YgdGVjaG5pY2FsLCBkZXZlbG9wbWVudCBvciBlbmQtdXNlciBzdXBwb3J0IGZvciB0aGUgU0RLIG9yIGFueSBEaXN0cmlidXRlZCBTb2Z0d2FyZSBtYWRlIGZyb20gb3IgYnkgcmVmZXJlbmNlIHRvIHRoZSBTREsuCis3LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiAgWW91IGV4cHJlc3NseSBhY2tub3dsZWRnZSBhbmQgYWdyZWUgdGhhdCB1c2Ugb2YgdGhlIFNESyBpcyBhdCB5b3VyIHNvbGUgcmlzay4gIFRoZSBTREsgYW5kIERvY3VtZW50YXRpb24gaXMgcHJvdmlkZWQgIkFTIElTIiBBTkQgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCBBTkQgQU1EIEVYUFJFU1NMWSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMsIEVYUFJFU1MgQU5EIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuICBBTUQgRE9FUyBOT1QgV0FSUkFOVCBUSEFUIFRIRSBDT05URU5UUyBPRiBUSEUgU0RLIE9SIERPQ1VNRU5UQVRJT04gV0lMTCBNRUVUIFlPVVIgUkVRVUlSRU1FTlRTLCBPUiBUSEFUIFRIRSBPUEVSQVRJT04gT0YgVEhFIFNESyBPUiBET0NVTUVOVEFUSU9OIFdJTEwgQkUgVU5JTlRFUlJVUFRFRCBPUiBFUlJPUi1GUkVFLiAgVEhFIEVOVElSRSBSSVNLIEFTU09DSUFURUQgV0lUSCBUSEUgVVNFIE9GIFRIRSBTREsgQU5EIERPQ1VNRU5UQVRJT04gSVMgQVNTVU1FRCBCWSBZT1UuICBGVVJUSEVSTU9SRSwgQU1EIERPRVMgTk9UIFdBUlJBTlQgT1IgTUFLRSBBTlkgUkVQUkVTRU5UQVRJT05TIFJFR0FSRElORyBUSEUgVVNFIE9SIFRIRSBSRVNVTFRTIE9GIFRIRSBVU0UgT0YgVEhFIFNESyBPUiBET0NVTUVOVEFUSU9OIElOIFRFUk1TIE9GIElUUyBDT1JSRUNUTkVTUywgQUNDVVJBQ1ksIFJFTElBQklMSVRZLCBDVVJSRU5UTkVTUywgT1IgT1RIRVJXSVNFLiAgU0hPVUxEIFRIRSBDT05URU5UUyBPRiBUSEUgU0RLIE9SIERPQ1VNRU5UQVRJT04gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBFTlRJUkUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFRIRSBBQk9WRSBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuICAKKzguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIElOQ0xVRElORyBORUdMSUdFTkNFLCBTSEFMTCBBTUQsIE9SIElUUyBESVJFQ1RPUlMsIE9GRklDRVJTLCBFTVBMT1lFRVMgT1IgQUdFTlRTLCBCRSBMSUFCTEUgVE8gTElDRU5TRUUgRk9SIEFOWSBJTkNJREVOVEFMLCBJTkRJUkVDVCwgU1BFQ0lBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORyBEQU1BR0VTIEZPUiBMT1NTIE9GIEJVU0lORVNTIFBST0ZJVFMsIEJVU0lORVNTIElOVEVSUlVQVElPTiwgTE9TUyBPRiBCVVNJTkVTUyBJTkZPUk1BVElPTiwgQU5EIFRIRSBMSUtFKSBBUklTSU5HIE9VVCBPRiBUSEUgVVNFLCBNSVNVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgREVMSVZFUkFCTEVTIE9SIFJFTEFURUQgRE9DVU1FTlRBVElPTiwgQlJFQUNIIE9SIERFRkFVTFQsIElOQ0xVRElORyBUSE9TRSBBUklTSU5HIEZST00gSU5GUklOR0VNRU5UIE9SIEFMTEVHRUQgSU5GUklOR0VNRU5UIE9GIEFOWSBQQVRFTlQsIFRSQURFTUFSSywgQ09QWVJJR0hUIE9SIE9USEVSIElOVEVMTEVDVFVBTCBQUk9QRVJUWSBSSUdIVCwgQlkgQU1ELCBFVkVOIElGIEFNRCwgSVRTIEFVVEhPUklaRUQgUkVQUkVTRU5UQVRJVkVTIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gIEFNRCB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGxvc3Mgb2YsIG9yIGRhbWFnZSB0bywgeW91ciBlcXVpcG1lbnQsIHJlY29yZHMgb3IgZGF0YSBvciBhbnkgZGFtYWdlcyBjbGFpbWVkIGJ5IHlvdSBiYXNlZCBvbiBhbnkgdGhpcmQgcGFydHkgY2xhaW0uIEluIG5vIGV2ZW50IHNoYWxsIEFNRCdzIHRvdGFsIGxpYWJpbGl0eSB0byB5b3UgZm9yIGFsbCBkYW1hZ2VzLCBsb3NzZXMsIGFuZCBjYXVzZXMgb2YgYWN0aW9uICh3aGV0aGVyIGluIGNvbnRyYWN0LCB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSkgb3Igb3RoZXJ3aXNlKSBleGNlZWQgdGhlIGFtb3VudCBvZiAkMTAgVVNELgorOS4gSW5kZW1uaWZpY2F0aW9uLiBZb3Ugd2lsbCBpbmRlbW5pZnksIGRlZmVuZCwgYW5kIGhvbGQgQU1ELCBpdHMgc3Vic2lkaWFyaWVzLCBzdWNjZXNzb3JzLCBvZmZpY2Vycywgc3VwcGxpZXJzLCBkaXJlY3RvcnMgYW5kIGVtcGxveWVlcyBoYXJtbGVzcyBmcm9tIGFueSBhbmQgYWxsIGFjdGlvbnMsIGNhdXNlcyBvZiBhY3Rpb24sIGNsYWltcywgZGVtYW5kcywgY29zdHMsIGxpYWJpbGl0aWVzLCBleHBlbnNlcyBhbmQgZGFtYWdlcywgaW5jbHVkaW5nIHJlYXNvbmFibGUgYXR0b3JuZXlzJyBmZWVzLCBhcmlzaW5nIG91dCBvZiBvciBpbiBjb25uZWN0aW9uIHdpdGggeW91ciB1c2Ugb2YgdGhlIFNESywgdGhlIERpc3RyaWJ1dGVkIFNvZnR3YXJlIGFuZC9vciBhbnkgYnJlYWNoIG9mIHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQuCisxMC4gVGVybWluYXRpb24uICBUaGlzIGFncmVlbWVudCBpcyBlZmZlY3RpdmUgdW50aWwgdGVybWluYXRlZC4gIFlvdSBjYW4gdGVybWluYXRlIHRoaXMgYWdyZWVtZW50IGF0IGFueSB0aW1lIGJ5IGRlc3Ryb3lpbmcgdGhlIFNESyBhbmQgRG9jdW1lbnRhdGlvbiwgYW5kIGFsbCBjb3BpZXMgeW91IGhhdmUgbWFkZS4gIFRoaXMgYWdyZWVtZW50IHdpbGwgdGVybWluYXRlIGltbWVkaWF0ZWx5IHdpdGhvdXQgbm90aWNlIGZyb20gQU1EIGlmIHlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIGFueSBwcm92aXNpb24gb2YgdGhpcyBhZ3JlZW1lbnQuICBVcG9uIHRlcm1pbmF0aW9uIHlvdSBtdXN0IGRlc3Ryb3kgdGhlIFNESywgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGFuZCBhbGwgY29waWVzIHlvdSBoYXZlIG1hZGUuCisxMS4gR292ZXJubWVudCBFbmQgVXNlcnMuIElmIHlvdSBhcmUgYWNxdWlyaW5nIHRoZSBTREsgb24gYmVoYWxmIG9mIGFueSB1bml0IG9yIGFnZW5jeSBvZiB0aGUgVW5pdGVkIFN0YXRlcyBHb3Zlcm5tZW50LCB0aGUgZm9sbG93aW5nIHByb3Zpc2lvbnMgYXBwbHkuICBUaGUgR292ZXJubWVudCBhZ3JlZXMgdGhlIFNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIHdlcmUgZGV2ZWxvcGVkIGF0IHByaXZhdGUgZXhwZW5zZSBhbmQgYXJlIHByb3ZpZGVkIHdpdGggIlJFU1RSSUNURUQgUklHSFRTIi4gIFVzZSwgZHVwbGljYXRpb24sIG9yIGRpc2Nsb3N1cmUgYnkgdGhlIEdvdmVybm1lbnQgaXMgc3ViamVjdCB0byByZXN0cmljdGlvbnMgYXMgc2V0IGZvcnRoIGluIERGQVJTIDIyNy43MjAyLTEoYSkgYW5kIDIyNy43MjAyLTMoYSkgKDE5OTUpLCBERkFSUyAyNTIuMjI3LTcwMTMoYykoMSkoaWkpIChPY3QgMTk4OCksIEZBUiAxMi4yMTIoYSkoMTk5NSksIEZBUiA1Mi4yMjctMTksIChKdW5lIDE5ODcpIG9yIEZBUiA1Mi4yMjctMTQoQUxUIElJSSkgKEp1bmUgMTk4NyksYXMgYW1lbmRlZCBmcm9tIHRpbWUgdG8gdGltZS4gIEluIHRoZSBldmVudCB0aGF0IHRoaXMgYWdyZWVtZW50LCBvciBhbnkgcGFydCB0aGVyZW9mLCBpcyBkZWVtZWQgaW5jb25zaXN0ZW50IHdpdGggdGhlIG1pbmltdW0gcmlnaHRzIGlkZW50aWZpZWQgaW4gdGhlIFJlc3RyaWN0ZWQgUmlnaHRzIHByb3Zpc2lvbnMsIHRoZSBtaW5pbXVtIHJpZ2h0cyBzaGFsbCBwcmV2YWlsLgorMTIuIEV4cG9ydCBSZXN0cmljdGlvbnMuICBUaGUgU0RLIGFuZCBEb2N1bWVudGF0aW9uIGlzIHN1YmplY3QgdG8gVW5pdGVkIFN0YXRlcyBleHBvcnQgbGF3cyBhbmQgcmVndWxhdGlvbnMuICBZb3UgYWdyZWUgdG8gY29tcGx5IHdpdGggYWxsIGRvbWVzdGljIGFuZCBpbnRlcm5hdGlvbmFsIGV4cG9ydCBsYXdzIGFuZCByZWd1bGF0aW9ucyB0aGF0IGFwcGx5IHRvIHRoZSBTREsgYW5kIERvY3VtZW50YXRpb24sIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIEV4cG9ydCBBZG1pbmlzdHJhdGlvbiBSZWd1bGF0aW9ucyBhZG1pbmlzdGVyZWQgYnkgdGhlIFUuUy4gRGVwYXJ0bWVudCBvZiBDb21tZXJjZSBhbmQgSW50ZXJuYXRpb25hbCBUcmFmZmljIGluIEFybSBSZWd1bGF0aW9ucyBhZG1pbmlzdGVyZWQgYnkgdGhlIFUuUy4gRGVwYXJ0bWVudCBvZiBTdGF0ZS4gIFRoZXNlIGxhd3MgaW5jbHVkZSByZXN0cmljdGlvbnMgb24gZGVzdGluYXRpb25zLCBlbmQgdXNlcnMgYW5kIGVuZCB1c2UuCisxMy4gQ29udHJvbGxpbmcgTGF3IGFuZCBTZXZlcmFiaWxpdHkuICBUaGlzIGFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSBhbmQgY29uc3RydWVkIHVuZGVyIHRoZSBsYXdzIG9mIHRoZSBzdGF0ZSBvZiBDYWxpZm9ybmlhIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGl0cyBjb25mbGljdCBvZiBsYXcgcHJpbmNpcGxlcy4gIElmIGZvciBhbnkgcmVhc29uIGEgY291cnQgb2YgY29tcGV0ZW50IGp1cmlzZGljdGlvbiBmaW5kcyBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgYWdyZWVtZW50IG9yIHBvcnRpb24gdGhlcmVvZiwgdG8gYmUgdW5lbmZvcmNlYWJsZSwgdGhhdCBwcm92aXNpb24gb2YgdGhlIGFncmVlbWVudCBzaGFsbCBiZSBlbmZvcmNlZCB0byB0aGUgbWF4aW11bSBleHRlbnQgcGVybWlzc2libGUgc28gYXMgdG8gZWZmZWN0IHRoZSBpbnRlbnQgb2YgdGhlIHBhcnRpZXMsIGFuZCB0aGUgcmVtYWluZGVyIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QuCisxNC4gQ29tcGxldGUgQWdyZWVtZW50LiAgTm90aGluZyBpbiBoaXMgYWdyZWVtZW50IHNoYWxsIGJlIGNvbnN0cnVlZCB0byBjb25zdGl0dXRlIGVpdGhlciBwYXJ0eSBhcyB0aGUgYWdlbnQsIGVtcGxveWVlIG9yIHJlcHJlc2VudGF0aXZlIG9mIHRoZSBvdGhlciBwYXJ0eSBUaGlzIGFncmVlbWVudCBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgdXNlIG9mIHRoZSBTREsgYW5kIERvY3VtZW50YXRpb24sIGFuZCBzdXBlcnNlZGVzIGFsbCBwcmlvciBvciBjb250ZW1wb3JhbmVvdXMgdW5kZXJzdGFuZGluZ3Mgb3IgYWdyZWVtZW50cywgd3JpdHRlbiBvciBvcmFsLCByZWdhcmRpbmcgc3VjaCBzdWJqZWN0IG1hdHRlci4gIE5vIGFtZW5kbWVudCB0byBvciBtb2RpZmljYXRpb24gb2YgdGhpcyBhZ3JlZW1lbnQgd2lsbCBiZSBiaW5kaW5nIHVubGVzcyBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgYSBkdWx5IGF1dGhvcml6ZWQgcmVwcmVzZW50YXRpdmUgb2YgQU1ELiBUaGUgd2FpdmVyIGJ5IGVpdGhlciBwYXJ0eSBvZiBhbnkgYnJlYWNoIG9mIGFueSBwcm92aXNpb24gb2YgdGhpcyBhZ3JlZW1lbnQgc2hhbGwgbm90IG9wZXJhdGUgb3IgYmUgY29uc3RydWVkIGFzIGEgd2FpdmVyIG9mIGFueSBvdGhlciBvciBhIHN1YnNlcXVlbnQgYnJlYWNoIG9mIHRoZSBzYW1lIG9yIGRpZmZlcmVudCBwcm92aXNpb24uIE5vIGZhaWx1cmUgb3IgZGVsYXkgYnkgZWl0aGVyIHBhcnR5IGluIGV4ZXJjaXNpbmcgYW55IHJpZ2h0IG9yIHJlbWVkeSB1bmRlciB0aGlzIEFncmVlbWVudCwgZXhjZXB0IGFzIHByb3ZpZGVkIGhlcmVpbiwgd2lsbCBvcGVyYXRlIGFzIGEgd2FpdmVyLgorCitJZiB5b3UgYWdyZWUgdG8gYWJpZGUgYnkgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50LCBwbGVhc2UgcHJlc3MgIkFjY2VwdC4iICBJZiB5b3UgZG8gbm90IGFncmVlIHRvIGFiaWRlIGJ5IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCwgcHJlc3MgIkRlY2xpbmUiIGFuZCB5b3UgbWF5IG5vdCB1c2Ugb3IgYWNjZXNzIHRoZSBNYXRlcmlhbHMuCisgIAorU0NIRURVTEUgQQorRGVzY3JpcHRpb24gb2YgU0RLIGFuZCBEb2N1bWVudGF0aW9uCitBREwgU0RLCisgTGlicmFyaWVzIGFuZCBoZWFkZXIgZmlsZXMgKG1heSBiZSBidWlsdCBpbnRvIHlvdXIgc29mdHdhcmUgYW5kIGRpc3RyaWJ1dGVkIG9ubHkgYXMgb2JqZWN0IGNvZGUpOgorKiBFeGFtcGxlIGFwcGxpY2F0aW9uIHNvdXJjZSBjb2RlCisqIEFQSSBoZWFkZXIgZmlsZXMKK1Rvb2xzIGFuZCBkb2N1bWVudGF0aW9uIChubyByZWRpc3RyaWJ1dGlvbiBvZiBhbnkga2luZCk6CisqIFJFQURNRSBmaWxlCisqIEFQSSBkb2N1bWVudGF0aW9uIGluIEhUTUwgZm9ybWF0CisKK1NjaGVkdWxlIEIKK0VORCBVU0VSIExJQ0VOU0UgQUdSRUVNRU5UCitQTEVBU0UgUkVBRCBUSElTIExJQ0VOU0UgQ0FSRUZVTExZIEJFRk9SRSBVU0lORyBUSEUgU09GVFdBUkUuICBCWSBVU0lORyBUSEUgU09GVFdBUkUsIFlPVSBBUkUgQUdSRUVJTkcgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gCisxLiBMaWNlbnNlLiBUaGUgc29mdHdhcmUgYWNjb21wYW55aW5nIHRoaXMgTGljZW5zZSAoaGVyZWluYWZ0ZXIgIlNvZnR3YXJlIiksIHJlZ2FyZGxlc3Mgb2YgdGhlIG1lZGlhIG9uIHdoaWNoIGl0IGlzIGRpc3RyaWJ1dGVkLCBhcmUgbGljZW5zZWQgdG8geW91IGJ5IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4gKCJBTUQiKSBmb3IgdXNlIHNvbGVseSBpbiBjb25qdW5jdGlvbiB3aXRoIEFNRCBwcm9kdWN0cyAoIkFNRCBQcm9kdWN0cyIpLiAgWW91IG93biB0aGUgbWVkaXVtIG9uIHdoaWNoIHRoZSBTb2Z0d2FyZSBpcyByZWNvcmRlZCwgYnV0IEFNRCBhbmQgQU1EJ3MgTGljZW5zb3JzIChyZWZlcnJlZCB0byBjb2xsZWN0aXZlbHkgYXMgIkFNRCIpIHJldGFpbiB0aXRsZSB0byB0aGUgU29mdHdhcmUgYW5kIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbi4gIFlvdSBtYXk6CithKSAgdXNlIHRoZSBTb2Z0d2FyZSBzb2xlbHkgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgQU1EIFByb2R1Y3RzOworYikgeW91IG11c3QgcmVwcm9kdWNlIG9uIHN1Y2ggY29weSBBTUQncyBjb3B5cmlnaHQgbm90aWNlIGFuZCBhbnkgb3RoZXIgcHJvcHJpZXRhcnkgbGVnZW5kcyB0aGF0IHdlcmUgb24gdGhlIG9yaWdpbmFsIGNvcHkgb2YgdGhlIFNvZnR3YXJlOworYykgdHJhbnNmZXIgYWxsIHlvdXIgbGljZW5zZSByaWdodHMgaW4gdGhlIFNvZnR3YXJlIHByb3ZpZGVkIHlvdSBtdXN0IGFsc28gdHJhbnNmZXIgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSwgdGhlIEFNRCBQcm9kdWN0cyBhbmQgdGhlIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQgcHJvdmlkZWQgdGhlIG90aGVyIHBhcnR5IHJlYWRzIGFuZCBhZ3JlZXMgdG8gYWNjZXB0IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBVcG9uIHN1Y2ggdHJhbnNmZXIgeW91ciBsaWNlbnNlIGlzIHRoZW4gdGVybWluYXRlZC4KKzIuICBSZXN0cmljdGlvbnMuIFRoZSBTb2Z0d2FyZSBjb250YWlucyBjb3B5cmlnaHRlZCBhbmQgcGF0ZW50ZWQgbWF0ZXJpYWwsIHRyYWRlIHNlY3JldHMgYW5kIG90aGVyIHByb3ByaWV0YXJ5IG1hdGVyaWFsLiAgSW4gb3JkZXIgdG8gcHJvdGVjdCB0aGVtLCBhbmQgZXhjZXB0IGFzIHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxlZ2lzbGF0aW9uLCB5b3UgbWF5IG5vdDoKK2EpIGRlY29tcGlsZSwgcmV2ZXJzZSBlbmdpbmVlciwgZGlzYXNzZW1ibGUgb3Igb3RoZXJ3aXNlIHJlZHVjZSB0aGUgU29mdHdhcmUgdG8gYSBodW1hbi1wZXJjZWl2YWJsZSBmb3JtOworYikgbW9kaWZ5LCBuZXR3b3JrLCByZW50LCBsZW5kLCBsb2FuLCBkaXN0cmlidXRlIG9yIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIGJhc2VkIHVwb24gdGhlIFNvZnR3YXJlIGluIHdob2xlIG9yIGluIHBhcnQ7IG9yCiszLiAgVGVybWluYXRpb24uIFRoaXMgTGljZW5zZSBpcyBlZmZlY3RpdmUgdW50aWwgdGVybWluYXRlZC4gIFlvdSBtYXkgdGVybWluYXRlIHRoaXMgTGljZW5zZSBhdCBhbnkgdGltZSBieSBkZXN0cm95aW5nIHRoZSBTb2Z0d2FyZSwgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGFuZCBhbGwgY29waWVzIHRoZXJlb2YuICBUaGlzIExpY2Vuc2Ugd2lsbCB0ZXJtaW5hdGUgaW1tZWRpYXRlbHkgd2l0aG91dCBub3RpY2UgZnJvbSBBTUQgaWYgeW91IGZhaWwgdG8gY29tcGx5IHdpdGggYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UuICBVcG9uIHRlcm1pbmF0aW9uIHlvdSBtdXN0IGRlc3Ryb3kgdGhlIFNvZnR3YXJlLCByZWxhdGVkIGRvY3VtZW50YXRpb24gYW5kIGFsbCBjb3BpZXMgdGhlcmVvZi4KKzQuICBHb3Zlcm5tZW50IEVuZCBVc2Vycy4gSWYgeW91IGFyZSBhY3F1aXJpbmcgdGhlIFNvZnR3YXJlIG9uIGJlaGFsZiBvZiBhbnkgdW5pdCBvciBhZ2VuY3kgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgR292ZXJubWVudCwgdGhlIGZvbGxvd2luZyBwcm92aXNpb25zIGFwcGx5LiAgVGhlIEdvdmVybm1lbnQgYWdyZWVzIHRoZSBTb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiB3ZXJlIGRldmVsb3BlZCBhdCBwcml2YXRlIGV4cGVuc2UgYW5kIGFyZSBwcm92aWRlZCB3aXRoICJSRVNUUklDVEVEIFJJR0hUUyIuICBVc2UsIGR1cGxpY2F0aW9uLCBvciBkaXNjbG9zdXJlIGJ5IHRoZSBHb3Zlcm5tZW50IGlzIHN1YmplY3QgdG8gcmVzdHJpY3Rpb25zIGFzIHNldCBmb3J0aCBpbiBERkFSUyAyMjcuNzIwMi0xKGEpIGFuZCAyMjcuNzIwMi0zKGEpICgxOTk1KSwgREZBUlMgMjUyLjIyNy03MDEzKGMpKDEpKGlpKSAoT2N0IDE5ODgpLCBGQVIgMTIuMjEyKGEpKDE5OTUpLCBGQVIgNTIuMjI3LTE5LCAoSnVuZSAxOTg3KSBvciBGQVIgNTIuMjI3LTE0KEFMVCBJSUkpIChKdW5lIDE5ODcpLCBhcyBhbWVuZGVkIGZyb20gdGltZSB0byB0aW1lLiAgSW4gdGhlIGV2ZW50IHRoYXQgdGhpcyBMaWNlbnNlLCBvciBhbnkgcGFydCB0aGVyZW9mLCBpcyBkZWVtZWQgaW5jb25zaXN0ZW50IHdpdGggdGhlIG1pbmltdW0gcmlnaHRzIGlkZW50aWZpZWQgaW4gdGhlIFJlc3RyaWN0ZWQgUmlnaHRzIHByb3Zpc2lvbnMsIHRoZSBtaW5pbXVtIHJpZ2h0cyBzaGFsbCBwcmV2YWlsLgorNS4gIE5vIE90aGVyIExpY2Vuc2UuICBObyByaWdodHMgb3IgbGljZW5zZXMgYXJlIGdyYW50ZWQgYnkgQU1EIHVuZGVyIHRoaXMgTGljZW5zZSwgZXhwcmVzc2x5IG9yIGJ5IGltcGxpY2F0aW9uLCB3aXRoIHJlc3BlY3QgdG8gYW55IHByb3ByaWV0YXJ5IGluZm9ybWF0aW9uIG9yIHBhdGVudCwgY29weXJpZ2h0LCB0cmFkZSBzZWNyZXQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0IG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgQU1ELCBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIGluIHRoaXMgTGljZW5zZS4KKzYuICBBZGRpdGlvbmFsIExpY2Vuc2VzLiBESVNUUklCVVRJT04gT1IgVVNFIE9GIFRIRSBTT0ZUV0FSRSBXSVRIIEFOIE9QRVJBVElORyBTWVNURU0gTUFZIFJFUVVJUkUgQURESVRJT05BTCBMSUNFTlNFUyBGUk9NIFRIRSBPUEVSQVRJTkcgU1lTVEVNIFZFTkRPUi4gIAorNy4gIERpc2NsYWltZXIgb2YgV2FycmFudHkgb24gU29mdHdhcmUuIFlvdSBleHByZXNzbHkgYWNrbm93bGVkZ2UgYW5kIGFncmVlIHRoYXQgdXNlIG9mIHRoZSBTb2Z0d2FyZSBpcyBhdCB5b3VyIHNvbGUgcmlzay4gIFRoZSBTb2Z0d2FyZSBhbmQgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGFyZSBwcm92aWRlZCAiQVMgSVMiIGFuZCB3aXRob3V0IHdhcnJhbnR5IG9mIGFueSBraW5kIGFuZCBBTUQgRVhQUkVTU0xZIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUywgRVhQUkVTUyBBTkQgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIEFNRCBET0VTIE5PVCBXQVJSQU5UIFRIQVQgVEhFIEZVTkNUSU9OUyBDT05UQUlORUQgSU4gVEhFIFNPRlRXQVJFIFdJTEwgTUVFVCBZT1VSIFJFUVVJUkVNRU5UUywgT1IgVEhBVCBUSEUgT1BFUkFUSU9OIE9GIFRIRSBTT0ZUV0FSRSBXSUxMIEJFIFVOSU5URVJSVVBURUQgT1IgRVJST1ItRlJFRSwgT1IgVEhBVCBERUZFQ1RTIElOIFRIRSBTT0ZUV0FSRSBXSUxMIEJFIENPUlJFQ1RFRC4gIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUkVTVUxUUyBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFNPRlRXQVJFIElTIEFTU1VNRUQgQlkgWU9VLiAgRlVSVEhFUk1PUkUsIEFNRCBET0VTIE5PVCBXQVJSQU5UIE9SIE1BS0UgQU5ZIFJFUFJFU0VOVEFUSU9OUyBSRUdBUkRJTkcgVEhFIFVTRSBPUiBUSEUgUkVTVUxUUyBPRiBUSEUgVVNFIE9GIFRIRSBTT0ZUV0FSRSBPUiBSRUxBVEVEIERPQ1VNRU5UQVRJT04gSU4gVEVSTVMgT0YgVEhFSVIgQ09SUkVDVE5FU1MsIEFDQ1VSQUNZLCBSRUxJQUJJTElUWSwgQ1VSUkVOVE5FU1MsIE9SIE9USEVSV0lTRS4gTk8gT1JBTCBPUiBXUklUVEVOIElORk9STUFUSU9OIE9SIEFEVklDRSBHSVZFTiBCWSBBTUQgT1IgQU1EJ1MgQVVUSE9SSVpFRCBSRVBSRVNFTlRBVElWRSBTSEFMTCBDUkVBVEUgQSBXQVJSQU5UWSBPUiBJTiBBTlkgV0FZIElOQ1JFQVNFIFRIRSBTQ09QRSBPRiBUSElTIFdBUlJBTlRZLiAgU0hPVUxEIFRIRSBTT0ZUV0FSRSBQUk9WRSBERUZFQ1RJVkUsIFlPVSAoQU5EIE5PVCBBTUQgT1IgQU1EJ1MgQVVUSE9SSVpFRCBSRVBSRVNFTlRBVElWRSkgQVNTVU1FIFRIRSBFTlRJUkUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uICBUSEUgU09GVFdBUkUgSVMgTk9UIElOVEVOREVEIEZPUiBVU0UgSU4gTUVESUNBTCwgTElGRSBTQVZJTkcgT1IgTElGRSBTVVNUQUlOSU5HIEFQUExJQ0FUSU9OUy4gIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFRIRSBBQk9WRSBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuICAKKzguICBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBJTkNMVURJTkcgTkVHTElHRU5DRSwgU0hBTEwgQU1ELCBPUiBJVFMgRElSRUNUT1JTLCBPRkZJQ0VSUywgRU1QTE9ZRUVTIE9SIEFHRU5UUywgQkUgTElBQkxFIFRPIFlPVSBGT1IgQU5ZIElOQ0lERU5UQUwsIElORElSRUNULCBTUEVDSUFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HIERBTUFHRVMgRk9SIExPU1MgT0YgQlVTSU5FU1MgUFJPRklUUywgQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBMT1NTIE9GIEJVU0lORVNTIElORk9STUFUSU9OLCBBTkQgVEhFIExJS0UpIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UsIE1JU1VTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBTT0ZUV0FSRSBPUiBSRUxBVEVEIERPQ1VNRU5UQVRJT04sIEJSRUFDSCBPUiBERUZBVUxULCBJTkNMVURJTkcgVEhPU0UgQVJJU0lORyBGUk9NIElORlJJTkdFTUVOVCBPUiBBTExFR0VEIElORlJJTkdFTUVOVCBPRiBBTlkgUEFURU5ULCBUUkFERU1BUkssIENPUFlSSUdIVCBPUiBPVEhFUiBJTlRFTExFQ1RVQUwgUFJPUEVSVFkgUklHSFQsIEJZIEFNRCwgRVZFTiBJRiBBTUQgT1IgQU1EJ1MgQVVUSE9SSVpFRCBSRVBSRVNFTlRBVElWRSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuICBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBMSU1JVEFUSU9OIE9SIEVYQ0xVU0lPTiBPRiBMSUFCSUxJVFkgRk9SIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSEUgQUJPVkUgTElNSVRBVElPTiBPUiBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuICBBTUQgd2lsbCBub3QgYmUgbGlhYmxlIGZvciAxKWxvc3Mgb2YsIG9yIGRhbWFnZSB0bywgeW91ciByZWNvcmRzIG9yIGRhdGEgb3IgMikgYW55IGRhbWFnZXMgY2xhaW1lZCBieSB5b3UgYmFzZWQgb24gYW55IHRoaXJkIHBhcnR5IGNsYWltLiAgIEluIG5vIGV2ZW50IHNoYWxsIEFNRCdzIHRvdGFsIGxpYWJpbGl0eSB0byB5b3UgZm9yIGFsbCBkYW1hZ2VzLCBsb3NzZXMsIGFuZCBjYXVzZXMgb2YgYWN0aW9uICh3aGV0aGVyIGluIGNvbnRyYWN0LCB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSkgb3Igb3RoZXJ3aXNlKSBleGNlZWQgdGhlIGFtb3VudCBwYWlkIGJ5IHlvdSBmb3IgdGhlIFNvZnR3YXJlLgorOS4gRXhwb3J0IFJlc3RyaWN0aW9ucy4gUmVjaXBpZW50IHNoYWxsIGFkaGVyZSB0byBhbGwgVS5TLiBhbmQgb3RoZXIgYXBwbGljYWJsZSBleHBvcnQgbGF3cywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgVS5TLiBFeHBvcnQgQWRtaW5pc3RyYXRpb24gUmVndWxhdGlvbnMgKEVBUiksIGN1cnJlbnRseSBmb3VuZCBhdCAxNSBDLkYuUi4gU2VjdGlvbnMgNzMwIHRocm91Z2ggNzQ0LiBGdXJ0aGVyLCBwdXJzdWFudCB0byAxNSBDLkYuUiBTZWN0aW9uIDc0MC42LCBSZWNpcGllbnQgaGVyZWJ5IGNlcnRpZmllcyB0aGF0LCBleGNlcHQgcHVyc3VhbnQgdG8gYSBsaWNlbnNlIGdyYW50ZWQgYnkgdGhlIFVuaXRlZCBTdGF0ZXMgRGVwYXJ0bWVudCBvZiBDb21tZXJjZSBCdXJlYXUgb2YgSW5kdXN0cnkgYW5kIFNlY3VyaXR5IG9yIGFzIG90aGVyd2lzZSBwZXJtaXR0ZWQgcHVyc3VhbnQgdG8gYSBMaWNlbnNlIEV4Y2VwdGlvbiB1bmRlciB0aGUgVS5TLiBFeHBvcnQgQWRtaW5pc3RyYXRpb24gUmVndWxhdGlvbnMgKCJFQVIiKSwgUmVjaXBpZW50IHdpbGwgbm90ICgxKSBleHBvcnQsIHJlLWV4cG9ydCBvciByZWxlYXNlIHRvIGEgbmF0aW9uYWwgb2YgYSBjb3VudHJ5IGluIENvdW50cnkgR3JvdXBzIEQ6MSBvciBFOjIgYW55IHJlc3RyaWN0ZWQgdGVjaG5vbG9neSwgc29mdHdhcmUsIG9yIHNvdXJjZSBjb2RlIGl0IHJlY2VpdmVzIGZyb20gQU1ELCBvciAoMikgZXhwb3J0IHRvIENvdW50cnkgR3JvdXBzIEQ6MSBvciBFOjIgdGhlIGRpcmVjdCBwcm9kdWN0IG9mIHN1Y2ggdGVjaG5vbG9neSBvciBzb2Z0d2FyZSwgaWYgc3VjaCBmb3JlaWduIHByb2R1Y2VkIGRpcmVjdCBwcm9kdWN0IGlzIHN1YmplY3QgdG8gbmF0aW9uYWwgc2VjdXJpdHkgY29udHJvbHMgYXMgaWRlbnRpZmllZCBvbiB0aGUgQ29tbWVyY2UgQ29udHJvbCBMaXN0IChjdXJyZW50bHkgZm91bmQgaW4gU3VwcGxlbWVudCAxIHRvIFBhcnQgNzc0IG9mIEVBUikuICBGb3IgdGhlIG1vc3QgY3VycmVudCBDb3VudHJ5IEdyb3VwIGxpc3RpbmdzLCBvciBmb3IgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgRUFSIG9yIFJlY2lwaWVudOKAmXMgb2JsaWdhdGlvbnMgdW5kZXIgdGhvc2UgcmVndWxhdGlvbnMsIHBsZWFzZSByZWZlciB0byB0aGUgVS5TLiBCdXJlYXUgb2YgSW5kdXN0cnkgYW5kIFNlY3VyaXR54oCZcyB3ZWJzaXRlIGF0IGh0dHA6Ly93d3cuYmlzLmRvYy5nb3YvLiAgVGhlc2UgZXhwb3J0IHJlcXVpcmVtZW50cyBzaGFsbCBzdXJ2aXZlIGFueSBleHBpcmF0aW9uIG9yIHRlcm1pbmF0aW9uIG9mIHRoaXMgQWdyZWVtZW50LgorMTAuICBDb250cm9sbGluZyBMYXcgYW5kIFNldmVyYWJpbGl0eS4gVGhpcyBBZ3JlZW1lbnQgd2lsbCBiZSBnb3Zlcm5lZCBieSBhbmQgY29uc3RydWVkIHVuZGVyIHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBDYWxpZm9ybmlhIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGl0cyBjb25mbGljdHMgb2YgbGF3IHByaW5jaXBsZXMuIFRoZSByaWdodHMgYW5kIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IHNoYWxsIG5vdCBiZSBnb3Zlcm5lZCBieSB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcywgdGhlIGFwcGxpY2F0aW9uIG9mIHdoaWNoIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gIEVhY2ggcGFydHkgaGVyZXRvIHN1Ym1pdHMgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgc3RhdGUgYW5kIGZlZGVyYWwgY291cnRzIG9mIFNhbnRhIENsYXJhIENvdW50eSBhbmQgdGhlIE5vcnRoZXJuIERpc3RyaWN0IG9mIENhbGlmb3JuaWEgZm9yIHRoZSBwdXJwb3NlIG9mIGFsbCBsZWdhbCBwcm9jZWVkaW5ncyBhcmlzaW5nIG91dCBvZiBvciByZWxhdGluZyB0byB0aGlzIEFncmVlbWVudCBvciB0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiAgRWFjaCBwYXJ0eSB3YWl2ZXMgYW55IG9iamVjdGlvbiB3aGljaCBpdCBtYXkgaGF2ZSB0byBjb250ZXN0IHN1Y2ggZm9ydW0uIAorMTEuICBDb21wbGV0ZSBBZ3JlZW1lbnQuICBUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIHVzZSBvZiB0aGUgU29mdHdhcmUgYW5kIHRoZSByZWxhdGVkIGRvY3VtZW50YXRpb24sIGFuZCBzdXBlcnNlZGVzIGFsbCBwcmlvciBvciBjb250ZW1wb3JhbmVvdXMgdW5kZXJzdGFuZGluZ3Mgb3IgYWdyZWVtZW50cywgd3JpdHRlbiBvciBvcmFsLCByZWdhcmRpbmcgc3VjaCBzdWJqZWN0IG1hdHRlci4gIE5vIGFtZW5kbWVudCB0byBvciBtb2RpZmljYXRpb24gb2YgdGhpcyBMaWNlbnNlIHdpbGwgYmUgYmluZGluZyB1bmxlc3MgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IGEgZHVseSBhdXRob3JpemVkIHJlcHJlc2VudGF0aXZlIG9mIEFNRC4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0FNUEFTIGIvbGljZW5zZXMvQU1QQVMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkwOTVhNwotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0FNUEFTCkBAIC0wLDAgKzEsNDIgQEAKK0NvcHlyaWdodCAoYykgMjAwNiBBY2FkZW15IG9mIE1vdGlvbiBQaWN0dXJlIEFydHMgYW5kIFNjaWVuY2VzCisoIkEuTS5QLkEuUy4iKS4gUG9ydGlvbnMgY29udHJpYnV0ZWQgYnkgb3RoZXJzIGFzIGluZGljYXRlZC4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK0Egd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIHJpZ2h0IHRvIGRpc3RyaWJ1dGUsIGNvcHksCittb2RpZnksIGNyZWF0ZSBkZXJpdmF0aXZlcywgYW5kIHVzZSwgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIGlzCitoZXJlYnkgZ3JhbnRlZCwgc3ViamVjdCB0byBhY2NlcHRhbmNlIG9mIHRoaXMgbGljZW5zZS4gUGVyZm9ybWFuY2Ugb2YKK2FueSBvZiB0aGUgYWZvcmVtZW50aW9uZWQgYWN0cyBpbmRpY2F0ZXMgYWNjZXB0YW5jZSB0byBiZSBib3VuZCBieSB0aGUKK2ZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9uczoKKworICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIERpc2NsYWltZXIgb2YgV2FycmFudHkuCisKKyAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5CisgICAgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICAgIGRpc3RyaWJ1dGlvbi4KKworICAqIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB0byBncmFudCBhbnkgcmlnaHRzIHRvCisgICAgdHJhZGVtYXJrcywgY29weXJpZ2h0cywgcGF0ZW50cywgdHJhZGUgc2VjcmV0cyBvciBhbnkgb3RoZXIKKyAgICBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgQS5NLlAuQS5TLiBvciBhbnkgY29udHJpYnV0b3JzLCBleGNlcHQKKyAgICBhcyBleHByZXNzbHkgc3RhdGVkIGhlcmVpbiwgYW5kIG5laXRoZXIgdGhlIG5hbWUgb2YgQS5NLlAuQS5TLgorICAgIG5vciBvZiBhbnkgb3RoZXIgY29udHJpYnV0b3JzIHRvIHRoaXMgc29mdHdhcmUsIG1heSBiZSB1c2VkIHRvCisgICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgQS5NLlAuQS5TLiBvciBjb250cmlidXRvciwKKyAgICBhcyBhcHByb3ByaWF0ZS4KKworVGhpcyBsaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBDYWxpZm9ybmlhLAorYW5kIHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgY291cnRzIHRoZXJlaW4uCisKK0Rpc2NsYWltZXIgb2YgV2FycmFudHk6IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQS5NLlAuQS5TLiBBTkQKK0NPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywKK0JVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MKK0ZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5EIE5PTi1JTkZSSU5HRU1FTlQgQVJFIERJU0NMQUlNRUQuIElOIE5PCitFVkVOVCBTSEFMTCBBLk0uUC5BLlMuLCBBTlkgQ09OVFJJQlVUT1JTIE9SIERJU1RSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURQorR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIKK0lOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgorT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTgorSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9BTlRMUiBiL2xpY2Vuc2VzL0FOVExSCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5OTNiYmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9BTlRMUgpAQCAtMCwwICsxLDMyIEBACisKK1NPRlRXQVJFIFJJR0hUUworJElkOiBBTlRMUix2IDEuMiAyMDExLzExLzA1IDAyOjI5OjUwIHVsbSBFeHAgJAorCitBTlRMUiAxOTg5LTIwMDAgRGV2ZWxvcGVkIGJ5IGpHdXJ1LmNvbSAoTWFnZUxhbmcgSW5zdGl0dXRlKSwKK2h0dHA6Ly93d3cuQU5UTFIub3JnICBhbmQgaHR0cDovL3d3dy5qR3VydS5jb20KKworV2UgcmVzZXJ2ZSBubyBsZWdhbCByaWdodHMgdG8gdGhlIEFOVExSLS1pdCBpcyBmdWxseSBpbiB0aGUKK3B1YmxpYyBkb21haW4uIEFuIGluZGl2aWR1YWwgb3IgY29tcGFueSBtYXkgZG8gd2hhdGV2ZXIKK3RoZXkgd2lzaCB3aXRoIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIHdpdGggQU5UTFIgb3IgdGhlCitjb2RlIGdlbmVyYXRlZCBieSBBTlRMUiwgaW5jbHVkaW5nIHRoZSBpbmNvcnBvcmF0aW9uIG9mCitBTlRMUiwgb3IgaXRzIG91dHB1dCwgaW50byBjb21tZXJpY2FsIHNvZnR3YXJlLgorCitXZSBlbmNvdXJhZ2UgdXNlcnMgdG8gZGV2ZWxvcCBzb2Z0d2FyZSB3aXRoIEFOVExSLiBIb3dldmVyLAord2UgZG8gYXNrIHRoYXQgY3JlZGl0IGlzIGdpdmVuIHRvIHVzIGZvciBkZXZlbG9waW5nCitBTlRMUi4gQnkgImNyZWRpdCIsIHdlIG1lYW4gdGhhdCBpZiB5b3UgdXNlIEFOVExSIG9yCitpbmNvcnBvcmF0ZSBhbnkgc291cmNlIGNvZGUgaW50byBvbmUgb2YgeW91ciBwcm9ncmFtcworKGNvbW1lcmNpYWwgcHJvZHVjdCwgcmVzZWFyY2ggcHJvamVjdCwgb3Igb3RoZXJ3aXNlKSB0aGF0Cit5b3UgYWNrbm93bGVkZ2UgdGhpcyBmYWN0IHNvbWV3aGVyZSBpbiB0aGUgZG9jdW1lbnRhdGlvbiwKK3Jlc2VhcmNoIHJlcG9ydCwgZXRjLi4uIElmIHlvdSBsaWtlIEFOVExSIGFuZCBoYXZlCitkZXZlbG9wZWQgYSBuaWNlIHRvb2wgd2l0aCB0aGUgb3V0cHV0LCBwbGVhc2UgbWVudGlvbiB0aGF0Cit5b3UgZGV2ZWxvcGVkIGl0IHVzaW5nIEFOVExSLiBJbiBhZGRpdGlvbiwgd2UgYXNrIHRoYXQgdGhlCitoZWFkZXJzIHJlbWFpbiBpbnRhY3QgaW4gb3VyIHNvdXJjZSBjb2RlLiBBcyBsb25nIGFzIHRoZXNlCitndWlkZWxpbmVzIGFyZSBrZXB0LCB3ZSBleHBlY3QgdG8gY29udGludWUgZW5oYW5jaW5nIHRoaXMKK3N5c3RlbSBhbmQgZXhwZWN0IHRvIG1ha2Ugb3RoZXIgdG9vbHMgYXZhaWxhYmxlIGFzIHRoZXkgYXJlCitjb21wbGV0ZWQuCisKK1RoZSBwcmltYXJ5IEFOVExSIGd1eToKKworVGVyZW5jZSBQYXJyCitodHRwOi8vd3d3LmpHdXJ1LmNvbQorcGFycnRAamd1cnUuY29tCmRpZmYgLS1naXQgYS9saWNlbnNlcy9BT0wgYi9saWNlbnNlcy9BT0wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2RkNGZkNgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0FPTApAQCAtMCwwICsxLDI2IEBACitDb3B5cmlnaHQgKGMpIDE5OTggQW1lcmljYSBPbmxpbmUsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworQU9MIGdyYW50cyB5b3UgKCJMaWNlbnNlZSIpIGEgbm9uLWV4Y2x1c2l2ZSwgcm95YWx0eSBmcmVlLCBsaWNlbnNlIHRvCit1c2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgaW4gc291cmNlIGFuZCBiaW5hcnkgY29kZQorZm9ybSwgcHJvdmlkZWQgdGhhdCBpKSB0aGlzIGNvcHlyaWdodCBub3RpY2UgYW5kIGxpY2Vuc2UgYXBwZWFyIG9uIGFsbAorY29waWVzIG9mIHRoZSBzb2Z0d2FyZTsgYW5kIGlpKSBMaWNlbnNlZSBkb2VzIG5vdCB1dGlsaXplIHRoZSBzb2Z0d2FyZQoraW4gYSBtYW5uZXIgd2hpY2ggaXMgZGlzcGFyYWdpbmcgdG8gQU9MLgorCitUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICJBUyBJUywiIHdpdGhvdXQgYSB3YXJyYW50eSBvZiBhbnkga2luZC4KK0FMTCBFWFBSRVNTIE9SIElNUExJRUQgQ09ORElUSU9OUywgUkVQUkVTRU5UQVRJT05TIEFORCBXQVJSQU5USUVTLAorSU5DTFVESU5HIEFOWSBJTVBMSUVEIFdBUlJBTlRZIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQQorUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HRU1FTlQsIEFSRSBIRVJFQlkgRVhDTFVERUQuIEFPTCBBTkQKK0lUUyBMSUNFTlNPUlMgU0hBTEwgTk9UIEJFIExJQUJMRSBGT1IgQU5ZIERBTUFHRVMgU1VGRkVSRUQgQlkgTElDRU5TRUUKK0FTIEEgUkVTVUxUIE9GIFVTSU5HLCBNT0RJRllJTkcgT1IgRElTVFJJQlVUSU5HIFRIRSBTT0ZUV0FSRSBPUiBJVFMKK0RFUklWQVRJVkVTLiBJTiBOTyBFVkVOVCBXSUxMIEFPTCBPUiBJVFMgTElDRU5TT1JTIEJFIExJQUJMRSBGT1IgQU5ZCitMT1NUIFJFVkVOVUUsIFBST0ZJVCBPUiBEQVRBLCBPUiBGT1IgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwKK0NPTlNFUVVFTlRJQUwsIElOQ0lERU5UQUwgT1IgUFVOSVRJVkUgREFNQUdFUywgSE9XRVZFUiBDQVVTRUQgQU5ECitSRUdBUkRMRVNTIE9GIFRIRSBUSEVPUlkgT0YgTElBQklMSVRZLCBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9GIE9SCitJTkFCSUxJVFkgVE8gVVNFIFNPRlRXQVJFLCBFVkVOIElGIEFPTCBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCitUaGlzIHNvZnR3YXJlIGlzIG5vdCBkZXNpZ25lZCBvciBpbnRlbmRlZCBmb3IgdXNlIGluIG9uLWxpbmUgY29udHJvbCBvZgorYWlyY3JhZnQsIGFpciB0cmFmZmljLCBhaXJjcmFmdCBuYXZpZ2F0aW9uIG9yIGFpcmNyYWZ0IGNvbW11bmljYXRpb25zOworb3IgaW4gdGhlIGRlc2lnbiwgY29uc3RydWN0aW9uLCBvcGVyYXRpb24gb3IgbWFpbnRlbmFuY2Ugb2YgYW55IG51Y2xlYXIKK2ZhY2lsaXR5LiBMaWNlbnNlZSByZXByZXNlbnRzIGFuZCB3YXJyYW50cyB0aGF0IGl0IHdpbGwgbm90IHVzZSBvcgorcmVkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBmb3Igc3VjaCBwdXJwb3Nlcy4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0FQTC0xLjAgYi9saWNlbnNlcy9BUEwtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3OGFmZmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9BUEwtMS4wCkBAIC0wLDAgKzEsODI4IEBACitBREFQVElWRSBQVUJMSUMgTElDRU5TRSBWZXJzaW9uIDEuMCAKKworVEhFIExJQ0VOU0VEIFdPUksgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQURBUFRJVkUgCitQVUJMSUMgTElDRU5TRSAoIkxJQ0VOU0UiKS4gQU5ZIFVTRSwgUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiAKK09GIFRIRSBMSUNFTlNFRCBXT1JLIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UgT0YgVEhJUyAKK0xJQ0VOU0UgQU5EIElUUyBURVJNUywgV0hFVEhFUiBPUiBOT1QgU1VDSCBSRUNJUElFTlQgUkVBRFMgVEhFIAorVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiAiTElDRU5TRUQgV09SSyIgQU5EICJSRUNJUElFTlQiIEFSRSAKK0RFRklORUQgQkVMT1cuCisKK0lNUE9SVEFOVCBOT1RFOiBUaGlzIExpY2Vuc2UgaXMgImFkYXB0aXZlIiwgYW5kIHRoZSBnZW5lcmljIHZlcnNpb24gb3IgYW5vdGhlciAKK3ZlcnNpb24gb2YgYW4gQWRhcHRpdmUgUHVibGljIExpY2Vuc2Ugc2hvdWxkIG5vdCBiZSByZWxpZWQgdXBvbiB0byBkZXRlcm1pbmUgeW91ciByaWdodHMgCithbmQgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLiBZb3UgbXVzdCByZWFkIHRoZSBzcGVjaWZpYyBBZGFwdGl2ZSBQdWJsaWMgTGljZW5zZSAKK3RoYXQgeW91IHJlY2VpdmUgd2l0aCB0aGUgTGljZW5zZWQgV29yaywgYXMgY2VydGFpbiB0ZXJtcyBhcmUgZGVmaW5lZCBhdCB0aGUgb3V0c2V0IGJ5IHRoZSAKK0luaXRpYWwgQ29udHJpYnV0b3IuCisKK1NlZSBTZWN0aW9uIDIuMiBiZWxvdywgRXhoaWJpdCBBIGF0dGFjaGVkLCBhbmQgYW55IFN1cHBmaWxlLnR4dCBhY2NvbXBhbnlpbmcgdGhpcyAKK0xpY2Vuc2UgdG8gZGV0ZXJtaW5lIHRoZSBzcGVjaWZpYyBhZGFwdGl2ZSBmZWF0dXJlcyBhcHBsaWNhYmxlIHRvIHRoaXMgTGljZW5zZS4gRm9yIAorZXhhbXBsZSwgd2l0aG91dCBsaW1pdGluZyB0aGUgZm9yZWdvaW5nLCAoYSkgZm9yIHNlbGVjdGVkIGNob2ljZSBvZiBsYXcgYW5kIGp1cmlzZGljdGlvbiAKK3NlZSBQYXJ0IDMgb2YgRXhoaWJpdCBBOyAoYikgZm9yIHRoZSBzZWxlY3RlZCBkZWZpbml0aW9uIG9mIFRoaXJkIFBhcnR5IHNlZSBQYXJ0IDQgb2YgRXhoaWJpdCAKK0E7IGFuZCAoYykgZm9yIHNlbGVjdGVkIHBhdGVudCBsaWNlbnNpbmcgdGVybXMgKGlmIGFueSkgc2VlIFNlY3Rpb24gMi4yIGJlbG93IGFuZCBQYXJ0IDYgb2YgCitFeGhpYml0IEEuCisKKzEuIERFRklOSVRJT05TLgorCisgMS4xLiAiQ09OVFJJQlVUSU9OIiBtZWFuczoKKworIChhKSBJbiB0aGUgY2FzZSBvZiB0aGUgSW5pdGlhbCBDb250cmlidXRvciwgdGhlIEluaXRpYWwgV29yayBkaXN0cmlidXRlZCB1bmRlciB0aGlzIExpY2Vuc2UgCitieSB0aGUgSW5pdGlhbCBDb250cmlidXRvcjsgYW5kCisKKyAoYikgSW4gdGhlIGNhc2Ugb2YgZWFjaCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yLCB0aGUgU3Vic2VxdWVudCBXb3JrIG9yaWdpbmF0aW5nIGZyb20gCithbmQgZGlzdHJpYnV0ZWQgYnkgc3VjaCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yLgorCisgMS4yLiAiREVTSUdOQVRFRCBXRUIgU0lURSIgbWVhbnMgdGhlIHdlYiBzaXRlIGhhdmluZyB0aGUgVVJMIGlkZW50aWZpZWQgaW4gUGFydCAKKzEgb2YgRXhoaWJpdCBBLCB3aGljaCBVUkwgbWF5IGJlIGNoYW5nZWQgYnkgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IgYnkgcG9zdGluZyBvbiB0aGUgCitjdXJyZW50IERlc2lnbmF0ZWQgV2ViIFNpdGUgdGhlIG5ldyBVUkwgZm9yIGF0IGxlYXN0IHNpeHR5ICg2MCkgZGF5cy4KKworIDEuMy4gIkRJU1RSSUJVVE9SIiBtZWFucyBhbnkgUGVyc29uIHRoYXQgZGlzdHJpYnV0ZXMgdGhlIExpY2Vuc2VkIFdvcmsgb3IgYW55IAorcG9ydGlvbiB0aGVyZW9mIHRvIGF0IGxlYXN0IG9uZSBUaGlyZCBQYXJ0eS4KKworIDEuNC4gIkVMRUNUUk9OSUMgRElTVFJJQlVUSU9OIE1FQ0hBTklTTSIgbWVhbnMgYW55IG1lY2hhbmlzbSBnZW5lcmFsbHkgCithY2NlcHRlZCBpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYyB0cmFuc2ZlciBvZiBkYXRhLgorCisgMS41LiAiRVhFQ1VUQUJMRSIgbWVhbnMgdGhlIExpY2Vuc2VkIFdvcmsgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UgQ29kZS4KKworIDEuNi4gIkdPVkVSTklORyBKVVJJU0RJQ1RJT04iIG1lYW5zIHRoZSBzdGF0ZSwgcHJvdmluY2Ugb3Igb3RoZXIgbGVnYWwgCitqdXJpc2RpY3Rpb24gaWRlbnRpZmllZCBpbiBQYXJ0IDMgb2YgRXhoaWJpdCBBLgorCisgMS43LiAiSU5ERVBFTkRFTlQgTU9EVUxFIiBtZWFucyBhIHNlcGFyYXRlIG1vZHVsZSBvZiBzb2Z0d2FyZSBhbmQvb3IgZGF0YSB0aGF0IAoraXMgbm90IGEgZGVyaXZhdGl2ZSB3b3JrIG9mIG9yIGNvcGllZCBmcm9tIHRoZSBMaWNlbnNlZCBXb3JrIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YuIEluIAorYWRkaXRpb24sIGEgbW9kdWxlIGRvZXMgbm90IHF1YWxpZnkgYXMgYW4gSW5kZXBlbmRlbnQgTW9kdWxlIGJ1dCBpbnN0ZWFkIGZvcm1zIHBhcnQgb2YgCit0aGUgTGljZW5zZWQgV29yayBpZiB0aGUgbW9kdWxlOiAoYSkgaXMgZW1iZWRkZWQgaW4gdGhlIExpY2Vuc2VkIFdvcms7IChiKSBpcyBpbmNsdWRlZCAKK2J5IHJlZmVyZW5jZSBpbiB0aGUgTGljZW5zZWQgV29yayBvdGhlciB0aGFuIGJ5IGEgZnVuY3Rpb24gY2FsbCBvciBhIGNsYXNzIHJlZmVyZW5jZTsgb3IgCisoYykgbXVzdCBiZSBpbmNsdWRlZCBvciBjb250YWluZWQsIGluIHdob2xlIG9yIGluIHBhcnQsIHdpdGhpbiBhIGZpbGUgZGlyZWN0b3J5IG9yIAorc3ViZGlyZWN0b3J5IGFjdHVhbGx5IGNvbnRhaW5pbmcgZmlsZXMgbWFraW5nIHVwIHRoZSBMaWNlbnNlZCBXb3JrLgorCisgMS44LiAiSU5JVElBTCBDT05UUklCVVRPUiIgbWVhbnMgdGhlIFBlcnNvbiBvciBlbnRpdHkgaWRlbnRpZmllZCBhcyB0aGUgSW5pdGlhbCAKK0NvbnRyaWJ1dG9yIGluIHRoZSBub3RpY2UgcmVxdWlyZWQgYnkgUGFydCAxIG9mIEV4aGliaXQgQS4KKworIDEuOS4gIklOSVRJQUwgV09SSyIgbWVhbnMgdGhlIGluaXRpYWwgU291cmNlIENvZGUsIG9iamVjdCBjb2RlIChpZiBhbnkpIGFuZCAKK2RvY3VtZW50YXRpb24gZm9yIHRoZSBjb21wdXRlciBwcm9ncmFtIGlkZW50aWZpZWQgaW4gUGFydCAyIG9mIEV4aGliaXQgQSwgYXMgc3VjaCBTb3VyY2UgCitDb2RlLCBvYmplY3QgY29kZSBhbmQgZG9jdW1lbnRhdGlvbiBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGlzIExpY2Vuc2UgYnkgdGhlIEluaXRpYWwgCitDb250cmlidXRvci4KKworIDEuMTAuICJMQVJHRVIgV09SSyIgbWVhbnMgYSB3b3JrIHRoYXQgY29tYmluZXMgdGhlIExpY2Vuc2VkIFdvcmsgb3IgcG9ydGlvbnMgCit0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLgorCisgMS4xMS4gIkxJQ0VOU0VEIFdPUksiIG1lYW5zIHRoZSBJbml0aWFsIFdvcmsgYW5kL29yIGFueSBTdWJzZXF1ZW50IFdvcmssIGluIAorZWFjaCBjYXNlIGluY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLgorCisgMS4xMi4gIkxJQ0VOU0UgTk9USUNFIiBoYXMgdGhlIG1lYW5pbmcgYXNzaWduZWQgaW4gUGFydCA1IG9mIEV4aGliaXQgQS4KKworIDEuMTMuICJNT0RJRklDQVRJT04iIG9yICJNT0RJRklDQVRJT05TIiBtZWFucyBhbnkgY2hhbmdlIHRvIGFuZC9vciBhZGRpdGlvbiAKK3RvIHRoZSBMaWNlbnNlZCBXb3JrLgorCisgMS4xNC4gIlBFUlNPTiIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBvdGhlciBsZWdhbCBlbnRpdHksIGluY2x1ZGluZyBhIGNvcnBvcmF0aW9uLCAKK3BhcnRuZXJzaGlwIG9yIG90aGVyIGJvZHkuCisKKyAxLjE1LiAiUkVDSVBJRU5UIiBtZWFucyBhbnkgUGVyc29uIHdobyByZWNlaXZlcyBvciBvYnRhaW5zIHRoZSBMaWNlbnNlZCBXb3JrIAordW5kZXIgdGhpcyBMaWNlbnNlIChieSB3YXkgb2YgZXhhbXBsZSwgd2l0aG91dCBsaW1pdGluZyB0aGUgZm9yZWdvaW5nLCBhbnkgU3Vic2VxdWVudCAKK0NvbnRyaWJ1dG9yIG9yIERpc3RyaWJ1dG9yKS4KKworIDEuMTYuICJTT1VSQ0UgQ09ERSIgbWVhbnMgdGhlIHNvdXJjZSBjb2RlIGZvciBhIGNvbXB1dGVyIHByb2dyYW0sIGluY2x1ZGluZyB0aGUgCitzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgYW5kIGNvbXBvbmVudHMgb2YgdGhlIGNvbXB1dGVyIHByb2dyYW0sIHBsdXMgYW55IAorYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgYW5kIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCAKK2luc3RhbGxhdGlvbiBvZiBhbiBleGVjdXRhYmxlLgorCisgMS4xNy4gIlNVQlNFUVVFTlQgQ09OVFJJQlVUT1IiIG1lYW5zIGFueSBQZXJzb24gdGhhdCBtYWtlcyBvciBjb250cmlidXRlcyAKK3RvIHRoZSBtYWtpbmcgb2YgYW55IFN1YnNlcXVlbnQgV29yayBhbmQgdGhhdCBkaXN0cmlidXRlcyB0aGF0IFN1YnNlcXVlbnQgV29yayB0byBhdCAKK2xlYXN0IG9uZSBUaGlyZCBQYXJ0eS4KKworIDEuMTguICJTVUJTRVFVRU5UIFdPUksiIG1lYW5zIGEgd29yayB0aGF0IGhhcyByZXN1bHRlZCBvciBhcmlzZXMgZnJvbSBjaGFuZ2VzIHRvIAorYW5kL29yIGFkZGl0aW9ucyB0bzoKKworIChhKSB0aGUgSW5pdGlhbCBXb3JrOworCisgKGIpIGFueSBvdGhlciBTdWJzZXF1ZW50IFdvcms7IG9yCisKKyAoYykgdG8gYW55IGNvbWJpbmF0aW9uIG9mIHRoZSBJbml0aWFsIFdvcmsgYW5kIGFueSBzdWNoIG90aGVyIFN1YnNlcXVlbnQgV29yazsKKworIHdoZXJlIHN1Y2ggY2hhbmdlcyBhbmQvb3IgYWRkaXRpb25zIG9yaWdpbmF0ZSBmcm9tIGEgU3Vic2VxdWVudCBDb250cmlidXRvci4gQSAKK1N1YnNlcXVlbnQgV29yayB3aWxsICJvcmlnaW5hdGUiIGZyb20gYSBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yIGlmIHRoZSBTdWJzZXF1ZW50IFdvcmsgCit3YXMgYSByZXN1bHQgb2YgZWZmb3J0cyBieSBzdWNoIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IgKG9yIGFueW9uZSBhY3Rpbmcgb24gc3VjaCAKK1N1YnNlcXVlbnQgQ29udHJpYnV0b3IncyBiZWhhbGYsIHN1Y2ggYXMsIGEgY29udHJhY3RvciBvciBvdGhlciBlbnRpdHkgdGhhdCBpcyBlbmdhZ2VkIGJ5IAorb3IgdW5kZXIgdGhlIGRpcmVjdGlvbiBvZiB0aGUgU3Vic2VxdWVudCBDb250cmlidXRvcikuIEZvciBncmVhdGVyIGNlcnRhaW50eSwgYSBTdWJzZXF1ZW50IAorV29yayBleHByZXNzbHkgZXhjbHVkZXMgYW5kIHNoYWxsIG5vdCBjYXB0dXJlIHdpdGhpbiBpdHMgbWVhbmluZyBhbnkgSW5kZXBlbmRlbnQgCitNb2R1bGUuCisKKyAxLjE5LiAiU1VQUExFTUVOVCBGSUxFIiBtZWFucyBhIGZpbGUgZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTGljZW5zZWQgV29yayBoYXZpbmcgYSAKK2ZpbGUgbmFtZSAic3VwcGZpbGUudHh0Ii4KKworIDEuMjAuICJUSElSRCBQQVJUWSIgaGFzIHRoZSBtZWFuaW5nIGFzc2lnbmVkIGluIFBhcnQgNCBvZiBFeGhpYml0IEEuCisKKzIuIExJQ0VOU0UuCisKKyAyLjEuIENPUFlSSUdIVCBMSUNFTlNFIEZST00gSU5JVElBTCBBTkQgU1VCU0VRVUVOVCAKK0NPTlRSSUJVVE9SUy4KKworIChhKSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgZWFjaCAKK1JlY2lwaWVudCBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBjb3B5cmlnaHQgbGljZW5zZSB0bzoKKworIChpKSByZXByb2R1Y2UsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZSAKK2FuZCBzdWJsaWNlbnNlIHRoZSBJbml0aWFsIFdvcms7IGFuZAorCisgKGlpKSByZXByb2R1Y2UsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUsIGFuZCBzdWJsaWNlbnNlIGFueSAKK2Rlcml2YXRpdmUgd29ya3MgKGlmIGFueSkgcHJlcGFyZWQgYnkgUmVjaXBpZW50OworCisgaW4gU291cmNlIENvZGUgYW5kIEV4ZWN1dGFibGUgZm9ybSwgZWl0aGVyIHdpdGggb3RoZXIgTW9kaWZpY2F0aW9ucywgb24gYW4gdW5tb2RpZmllZCAKK2Jhc2lzLCBvciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcmsuCisKKyAoYikgU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBlYWNoIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBlYWNoIAorUmVjaXBpZW50IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGNvcHlyaWdodCBsaWNlbnNlIHRvOgorCisgKGkpIHJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIAorYW5kIHN1YmxpY2Vuc2UgdGhlIFN1YnNlcXVlbnQgV29yayBvZiBzdWNoIFN1YnNlcXVlbnQgQ29udHJpYnV0b3I7IGFuZAorCisgKGlpKSByZXByb2R1Y2UsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUsIGFuZCBzdWJsaWNlbnNlIGFueSAKK2Rlcml2YXRpdmUgd29ya3MgKGlmIGFueSkgcHJlcGFyZWQgYnkgUmVjaXBpZW50OworCisgaW4gU291cmNlIENvZGUgYW5kIEV4ZWN1dGFibGUgZm9ybSwgZWl0aGVyIHdpdGggb3RoZXIgTW9kaWZpY2F0aW9ucywgb24gYW4gdW5tb2RpZmllZCAKK2Jhc2lzLCBvciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcmsuCisKKyAyLjIuIFBBVEVOVCBMSUNFTlNFIEZST00gSU5JVElBTCBBTkQgU1VCU0VRVUVOVCBDT05UUklCVVRPUlMuCisKKyAoYSkgVGhpcyBMaWNlbnNlIGRvZXMgbm90IGluY2x1ZGUgb3IgZ3JhbnQgYW55IHBhdGVudCBsaWNlbnNlIHdoYXRzb2V2ZXIgZnJvbSB0aGUgSW5pdGlhbCAKK0NvbnRyaWJ1dG9yLCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yLCBvciBhbnkgRGlzdHJpYnV0b3IgdW5sZXNzLCBhdCB0aGUgdGltZSB0aGUgSW5pdGlhbCAKK1dvcmsgaXMgZmlyc3QgZGlzdHJpYnV0ZWQgb3IgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBMaWNlbnNlIChhcyB0aGUgY2FzZSBtYXkgYmUpLCB0aGUgCitJbml0aWFsIENvbnRyaWJ1dG9yIGhhcyBzZWxlY3RlZCBwdXJzdWFudCB0byBQYXJ0IDYgb2YgRXhoaWJpdCBBIHRoZSBwYXRlbnQgdGVybXMgaW4gCitwYXJhZ3JhcGhzIEEsIEIsIEMsIEQgYW5kIEUgZnJvbSBQYXJ0IDYgb2YgRXhoaWJpdCBBLiBJZiB0aGlzIGlzIG5vdCBkb25lIHRoZW4gdGhlIEluaXRpYWwgCitXb3JrIGFuZCBhbnkgb3RoZXIgU3Vic2VxdWVudCBXb3JrIGlzIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlIHdpdGhvdXQgYW55IAorcGF0ZW50IGxpY2Vuc2UgKHRoZSAiUEFURU5UUy1FWENMVURFRCBMSUNFTlNFIikuCisKKyAoYikgSG93ZXZlciwgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IgbWF5IHN1YnNlcXVlbnRseSBkaXN0cmlidXRlIG9yIG1ha2UgYXZhaWxhYmxlIChhcyAKK3RoZSBjYXNlIG1heSBiZSkgZnV0dXJlIGNvcGllcyBvZjogKDEpIHRoZSBJbml0aWFsIFdvcms7IG9yICgyKSBhbnkgTGljZW5zZWQgV29yayAKK2Rpc3RyaWJ1dGVkIGJ5IHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIHdoaWNoIGluY2x1ZGVzIHRoZSBJbml0aWFsIFdvcmsgKG9yIGFueSBwb3J0aW9uIAordGhlcmVvZikgYW5kL29yIGFueSBNb2RpZmljYXRpb24gbWFkZSBieSB0aGUgSW5pdGlhbCBDb250cmlidXRvcjsgYXZhaWxhYmxlIHVuZGVyIGEgCitMaWNlbnNlIHdoaWNoIGluY2x1ZGVzIGEgcGF0ZW50IGxpY2Vuc2UgKHRoZSAiUEFURU5UUy1JTkNMVURFRCBMSUNFTlNFIikgYnkgCitzZWxlY3RpbmcgcHVyc3VhbnQgdG8gUGFydCA2IG9mIEV4aGliaXQgQSB0aGUgcGF0ZW50IHRlcm1zIGluIHBhcmFncmFwaHMgQSwgQiwgQywgRCBhbmQgRSAKK2Zyb20gUGFydCA2IG9mIEV4aGliaXQgQSwgd2hlbiB0aGUgSW5pdGlhbCBDb250cmlidXRvciBkaXN0cmlidXRlcyBvciBtYWtlcyBhdmFpbGFibGUgKGFzIAordGhlIGNhc2UgbWF5IGJlKSBzdWNoIGZ1dHVyZSBjb3BpZXMgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisgKGMpIElmIGFueSBSZWNpcGllbnQgcmVjZWl2ZXMgb3Igb2J0YWlucyBvbmUgb3IgbW9yZSBjb3BpZXMgb2YgdGhlIEluaXRpYWwgV29yayBvciBhbnkgCitvdGhlciBwb3J0aW9uIG9mIHRoZSBMaWNlbnNlZCBXb3JrIHVuZGVyIHRoZSBQYXRlbnRzLUluY2x1ZGVkIExpY2Vuc2UsIHRoZW4gYWxsIGxpY2Vuc2luZyAKK29mIHN1Y2ggY29waWVzIHVuZGVyIHRoaXMgTGljZW5zZSBzaGFsbCBpbmNsdWRlIHRoZSB0ZXJtcyBpbiBwYXJhZ3JhcGhzIEEsIEIsIEMsIEQgYW5kIEUgCitmcm9tIFBhcnQgNiBvZiBFeGhpYml0IEEgYW5kIHRoYXQgUmVjaXBpZW50IHNoYWxsIG5vdCBiZSBhYmxlIHRvIHJlbHkgdXBvbiB0aGUgUGF0ZW50cy0KK0V4Y2x1ZGVkIExpY2Vuc2UgZm9yIGFueSBzdWNoIGNvcGllcy4gSG93ZXZlciwgYWxsIFJlY2lwaWVudHMgdGhhdCByZWNlaXZlIG9uZSBvciBtb3JlIAorY29waWVzIG9mIHRoZSBJbml0aWFsIFdvcmsgb3IgYW55IG90aGVyIHBvcnRpb24gb2YgdGhlIExpY2Vuc2VkIFdvcmsgdW5kZXIgYSBjb3B5IG9mIHRoZSAKK0xpY2Vuc2Ugd2hpY2ggaW5jbHVkZXMgdGhlIFBhdGVudHMtRXhjbHVkZWQgTGljZW5zZSBzaGFsbCBoYXZlIG5vIHBhdGVudCBsaWNlbnNlIHdpdGggCityZXNwZWN0IHRvIHN1Y2ggY29waWVzIHJlY2VpdmVkIHVuZGVyIHRoZSBQYXRlbnRzLUV4Y2x1ZGVkIExpY2Vuc2UgYW5kIGF2YWlsYWJpbGl0eSBhbmQgCitkaXN0cmlidXRpb24gb2Ygc3VjaCBjb3BpZXMsIGluY2x1ZGluZyBNb2RpZmljYXRpb25zIG1hZGUgYnkgc3VjaCBSZWNpcGllbnQgdG8gc3VjaCAKK2NvcGllcywgc2hhbGwgYmUgdW5kZXIgYSBjb3B5IG9mIHRoZSBMaWNlbnNlIHdpdGhvdXQgYW55IHBhdGVudCBsaWNlbnNlLgorCisgKGQpIFdoZXJlIGEgUmVjaXBpZW50IHVzZXMgaW4gY29tYmluYXRpb24gb3IgY29tYmluZXMgYW55IGNvcHkgb2YgdGhlIExpY2Vuc2VkIFdvcmsgCisob3IgcG9ydGlvbiB0aGVyZW9mKSBsaWNlbnNlZCB1bmRlciBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgaGF2aW5nIGEgUGF0ZW50cy1FeGNsdWRlZCAKK0xpY2Vuc2Ugd2l0aCBhbnkgY29weSBvZiB0aGUgTGljZW5zZWQgV29yayAob3IgcG9ydGlvbiB0aGVyZW9mKSBsaWNlbnNlZCB1bmRlciBhIGNvcHkgb2YgCit0aGUgTGljZW5zZSBoYXZpbmcgYSBQYXRlbnRzLUluY2x1ZGVkIExpY2Vuc2UsIHRoZSBjb21iaW5hdGlvbiAoYW5kIGFueSBwb3J0aW9uIHRoZXJlb2YpIAorc2hhbGwsIGZyb20gdGhlIGZpcnN0IHRpbWUgc3VjaCBSZWNpcGllbnQgdXNlcywgbWFrZXMgYXZhaWxhYmxlIG9yIGRpc3RyaWJ1dGVzIHRoZSAKK2NvbWJpbmF0aW9uIChhcyB0aGUgY2FzZSBtYXkgYmUpLCBiZSBzdWJqZWN0IHRvIG9ubHkgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlIGhhdmluZyB0aGUgCitQYXRlbnRzLUluY2x1ZGVkIExpY2Vuc2Ugd2hpY2ggc2hhbGwgaW5jbHVkZSB0aGUgdGVybXMgaW4gcGFyYWdyYXBocyBBLCBCLCBDLCBEIGFuZCBFIAorZnJvbSBQYXJ0IDYgb2YgRXhoaWJpdCBBLgorCisgMi4zLiBBQ0tOT1dMRURHRU1FTlQgQU5EIERJU0NMQUlNRVIuCisKKyBSZWNpcGllbnQgdW5kZXJzdGFuZHMgYW5kIGFncmVlcyB0aGF0IGFsdGhvdWdoIEluaXRpYWwgQ29udHJpYnV0b3IgYW5kIGVhY2ggU3Vic2VxdWVudCAKK0NvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzIENvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gcmVwcmVzZW50YXRpb24sIAord2FycmFudHksIGd1YXJhbnRlZSBvciBhc3N1cmFuY2UgaXMgcHJvdmlkZWQgYnkgYW55IEluaXRpYWwgQ29udHJpYnV0b3IsIFN1YnNlcXVlbnQgCitDb250cmlidXRvciwgb3IgRGlzdHJpYnV0b3IgdGhhdCB0aGUgTGljZW5zZWQgV29yayBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIAoraW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBJbml0aWFsIENvbnRyaWJ1dG9yLCBTdWJzZXF1ZW50IAorQ29udHJpYnV0b3IsIGFuZCBlYWNoIERpc3RyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudCBmb3IgY2xhaW1zIGJyb3VnaHQgCitieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZSwgaW4gCityZWxhdGlvbiB0byB0aGUgTGljZW5zZWQgV29ya3MuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQgbGljZW5zZXMgCitncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eSB0byBzZWN1cmUgYW55IG90aGVyIAoraW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsIHdpdGhvdXQgbGltaXRpbmcgdGhlIGZvcmVnb2luZyAKK2Rpc2NsYWltZXJzLCBpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlIHRoZSAKK0xpY2Vuc2VkIFdvcmssIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZSBkaXN0cmlidXRpbmcgCit0aGUgTGljZW5zZWQgV29yay4KKworIDIuNC4gUkVTRVJWQVRJT04uCisKKyBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgdG8gZ3JhbnQgYW55IHJpZ2h0cyB0byB0cmFkZW1hcmtzLCBjb3B5cmlnaHRzLCAKK3BhdGVudHMsIHRyYWRlIHNlY3JldHMgb3IgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBJbml0aWFsIENvbnRyaWJ1dG9yLCBTdWJzZXF1ZW50IAorQ29udHJpYnV0b3IsIG9yIERpc3RyaWJ1dG9yIGV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGhlcmVpbi4KKworMy4gRElTVFJJQlVUSU9OIE9CTElHQVRJT05TLgorCisgMy4xLiBESVNUUklCVVRJT04gR0VORVJBTExZLgorCisgKGEpIEEgU3Vic2VxdWVudCBDb250cmlidXRvciBzaGFsbCBtYWtlIHRoYXQgU3Vic2VxdWVudCBDb250cmlidXRvcidzIFN1YnNlcXVlbnQgCitXb3JrKHMpIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIHZpYSBhbiBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gZm9yIGEgcGVyaW9kIG9mIAorYXQgbGVhc3QgdHdlbHZlICgxMikgbW9udGhzLiBUaGUgYWZvcmVzYWlkIHR3ZWx2ZSAoMTIpIG1vbnRoIHBlcmlvZCBzaGFsbCBiZWdpbiB3aXRoaW4gYSAKK3JlYXNvbmFibGUgdGltZSBhZnRlciB0aGUgY3JlYXRpb24gb2YgdGhlIFN1YnNlcXVlbnQgV29yayBhbmQgbm8gbGF0ZXIgdGhhbiBzaXh0eSAoNjApIAorZGF5cyBhZnRlciBmaXJzdCBkaXN0cmlidXRpb24gb2YgdGhhdCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yJ3MgU3Vic2VxdWVudCBXb3JrLgorCisgKGIpIEFsbCBEaXN0cmlidXRvcnMgbXVzdCBkaXN0cmlidXRlIHRoZSBMaWNlbnNlZCBXb3JrIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgCit0aGUgTGljZW5zZSwgYW5kIG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIChpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIEV4aGliaXQgCitBIGFuZCB0aGUgYWNjb21wYW55aW5nIFN1cHBsZW1lbnQgRmlsZSkgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIExpY2Vuc2VkIFdvcmsgCitkaXN0cmlidXRlZC4gSW4gcGFydGljdWxhciwgdGhpcyBMaWNlbnNlIG11c3QgYmUgcHJvbWluZW50bHkgZGlzdHJpYnV0ZWQgd2l0aCB0aGUgTGljZW5zZWQgCitXb3JrIGluIGEgZmlsZSBjYWxsZWQgImxpY2Vuc2UudHh0LiIgSW4gYWRkaXRpb24sIHRoZSBMaWNlbnNlIE5vdGljZSBpbiBQYXJ0IDUgb2YgRXhoaWJpdCBBIAorbXVzdCBiZSBpbmNsdWRlZCBhdCB0aGUgYmVnaW5uaW5nIG9mIGFsbCBTb3VyY2UgQ29kZSBmaWxlcywgYW5kIHZpZXdhYmxlIHRvIGEgdXNlciBpbiBhbnkgCitleGVjdXRhYmxlIHN1Y2ggdGhhdCB0aGUgTGljZW5zZSBOb3RpY2UgaXMgcmVhc29uYWJseSBicm91Z2h0IHRvIHRoZSBhdHRlbnRpb24gb2YgYW55IAorcGFydHkgdXNpbmcgdGhlIExpY2Vuc2VkIFdvcmsuCisKKyAzLjIuIEVYRUNVVEFCTEUgRElTVFJJQlVUSU9OUyBPRiBUSEUgTElDRU5TRUQgV09SSy4KKworIEEgRGlzdHJpYnV0b3IgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIHRoZSBMaWNlbnNlZCBXb3JrLCBvciBhbnkgcG9ydGlvbiB0aGVyZW9mLCBpbiAKK0V4ZWN1dGFibGUgZm9ybSAoYW4gIkVYRUNVVEFCTEUgRElTVFJJQlVUSU9OIikgdG8gYW55IHRoaXJkIHBhcnR5LCB1bmRlciB0aGUgCit0ZXJtcyBvZiBTZWN0aW9uIDIgb2YgdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGUgRXhlY3V0YWJsZSBEaXN0cmlidXRpb24gaXMgbWFkZSBhdmFpbGFibGUgCit1bmRlciBhbmQgYWNjb21wYW5pZWQgYnkgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSwgQU5EIHByb3ZpZGVkIGF0IGxlYXN0IE9ORSBvZiB0aGUgCitmb2xsb3dpbmcgY29uZGl0aW9ucyBpcyBmdWxmaWxsZWQ6CisKKyAoYSkgVGhlIEV4ZWN1dGFibGUgRGlzdHJpYnV0aW9uIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgdGhlIFNvdXJjZSBDb2RlIGZvciB0aGUgCitMaWNlbnNlZCBXb3JrIG1ha2luZyB1cCB0aGUgRXhlY3V0YWJsZSBEaXN0cmlidXRpb24sIGFuZCB0aGUgU291cmNlIENvZGUgbXVzdCBiZSAKK2Rpc3RyaWJ1dGVkIG9uIHRoZSBzYW1lIG1lZGlhIGFzIHRoZSBFeGVjdXRhYmxlIERpc3RyaWJ1dGlvbiBvciB1c2luZyBhbiBFbGVjdHJvbmljIAorRGlzdHJpYnV0aW9uIE1lY2hhbmlzbTsgb3IKKworIChiKSBUaGUgRXhlY3V0YWJsZSBEaXN0cmlidXRpb24gbXVzdCBiZSBhY2NvbXBhbmllZCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IAorbGVhc3QgdGhpcnR5IHNpeCAoMzYpIG1vbnRocywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgZm9yIGEgCitjaGFyZ2Ugbm8gbW9yZSB0aGFuIHRoZSBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlIAorbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBmb3IgdGhlIExpY2Vuc2VkIFdvcmsgbWFraW5nIHVwIHRoZSAKK0V4ZWN1dGFibGUgRGlzdHJpYnV0aW9uLCB0byBiZSBhdmFpbGFibGUgYW5kIGRpc3RyaWJ1dGVkIHVzaW5nIGFuIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIAorTWVjaGFuaXNtLCBhbmQgc3VjaCBFeGVjdXRhYmxlIERpc3RyaWJ1dGlvbiBtdXN0IHJlbWFpbiBhdmFpbGFibGUgaW4gU291cmNlIENvZGUgCitmb3JtIHRvIGFueSB0aGlyZCBwYXJ0eSB2aWEgdGhlIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSAob3IgYW55IHJlcGxhY2VtZW50IAorRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIHRoZSBwYXJ0aWN1bGFyIERpc3RyaWJ1dG9yIG1heSByZWFzb25hYmx5IG5lZWQgdG8gdHVybiAKK3RvIGFzIGEgc3Vic3RpdHV0ZSkgZm9yIHNhaWQgYXQgbGVhc3QgdGhpcnR5IHNpeCAoMzYpIG1vbnRocy4KKworIEZvciBncmVhdGVyIGNlcnRhaW50eSwgdGhlIGFib3ZlLW5vdGVkIHJlcXVpcmVtZW50cyBhcHBseSB0byBhbnkgTGljZW5zZWQgV29yayBvciAKK3BvcnRpb24gdGhlcmVvZiBkaXN0cmlidXRlZCB0byBhbnkgdGhpcmQgcGFydHkgaW4gRXhlY3V0YWJsZSBmb3JtLCB3aGV0aGVyIHN1Y2ggCitkaXN0cmlidXRpb24gaXMgbWFkZSBhbG9uZSwgaW4gY29tYmluYXRpb24gd2l0aCBhIExhcmdlciBXb3JrIG9yIEluZGVwZW5kZW50IE1vZHVsZXMsIAorb3IgaW4gc29tZSBvdGhlciBjb21iaW5hdGlvbi4KKworIDMuMy4gU09VUkNFIENPREUgRElTVFJJQlVUSU9OUy4KKworIFdoZW4gYSBEaXN0cmlidXRvciBtYWtlcyB0aGUgTGljZW5zZWQgV29yaywgb3IgYW55IHBvcnRpb24gdGhlcmVvZiwgYXZhaWxhYmxlIHRvIGFueSAKK1BlcnNvbiBpbiBTb3VyY2UgQ29kZSBmb3JtLCBpdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYSBjb3B5IG9mIAordGhpcyBMaWNlbnNlIG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlLCBzaXR1YXRlZCBzbyB0aGF0IHRoZSAKK2NvcHkgb2YgdGhlIExpY2Vuc2UgaXMgY29uc3BpY3VvdXNseSBicm91Z2h0IHRvIHRoZSBhdHRlbnRpb24gb2YgdGhhdCBQZXJzb24uIEZvciBncmVhdGVyIAorY2xhcmlmaWNhdGlvbiwgdGhpcyBTZWN0aW9uIDMuMyBhcHBsaWVzIHRvIGFsbCBkaXN0cmlidXRpb24gb2YgdGhlIExpY2Vuc2VkIFdvcmsgaW4gYW55IAorU291cmNlIENvZGUgZm9ybS4gQSBEaXN0cmlidXRvciBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIAorY29weSwgd2hpY2ggY2hhcmdlIHNoYWxsIGJlIG5vIG1vcmUgdGhhbiB0aGUgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIAorZGlzdHJpYnV0aW9uLgorCisgMy40LiBSRVFVSVJFRCBOT1RJQ0VTIElOIFNPVVJDRSBDT0RFLgorCisgRWFjaCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yIG11c3QgZW5zdXJlIHRoYXQgdGhlIG5vdGljZSBzZXQgb3V0IGluIFBhcnQgNSBvZiBFeGhpYml0IEEgaXMgCitpbmNsdWRlZCBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlIGZvciBlYWNoIFN1YnNlcXVlbnQgV29yayBvcmlnaW5hdGluZyBmcm9tIHRoYXQgCitwYXJ0aWN1bGFyIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IsIGlmIHN1Y2ggbm90aWNlIGlzIG5vdCBhbHJlYWR5IGluY2x1ZGVkIGluIGVhY2ggc3VjaCBmaWxlLiAKK0lmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvIGl0cyBzdHJ1Y3R1cmUsIAordGhlbiB0aGUgU3Vic2VxdWVudCBDb250cmlidXRvciBtdXN0IGluY2x1ZGUgc3VjaCBub3RpY2UgaW4gYSBsb2NhdGlvbiAoc3VjaCBhcyBhIHJlbGV2YW50IAorZGlyZWN0b3J5IGluIHdoaWNoIHRoZSBmaWxlIGlzIHN0b3JlZCkgd2hlcmUgYSB1c2VyIHdvdWxkIGJlIGxpa2VseSB0byBsb29rIGZvciBzdWNoIGEgCitub3RpY2UuCisKKyAzLjUuIE5PIERJU1RSSUJVVElPTiBSRVFVSVJFTUVOVFMgRk9SIElOVEVSTkFMTFkgVVNFRCAKK01PRElGSUNBVElPTlMuCisKK05vdHdpdGhzdGFuZGluZyBTZWN0aW9ucyAzLjIsIDMuMyBhbmQgMy40LCBSZWNpcGllbnQgbWF5LCBpbnRlcm5hbGx5IHdpdGhpbiBpdHMgb3duIAorY29ycG9yYXRpb24gb3Igb3JnYW5pemF0aW9uIHVzZSB0aGUgTGljZW5zZWQgV29yaywgaW5jbHVkaW5nIHRoZSBJbml0aWFsIFdvcmsgYW5kIAorU3Vic2VxdWVudCBXb3JrcywgYW5kIG1ha2UgTW9kaWZpY2F0aW9ucyBmb3IgaW50ZXJuYWwgdXNlIHdpdGhpbiBSZWNpcGllbnQncyBvd24gCitjb3Jwb3JhdGlvbiBvciBvcmdhbml6YXRpb24gKGNvbGxlY3RpdmVseSwgIklOVEVSTkFMIFVTRSBNT0RJRklDQVRJT05TIikuIFRoZSAKK1JlY2lwaWVudCBzaGFsbCBoYXZlIG5vIG9ibGlnYXRpb24gdG8gZGlzdHJpYnV0ZSwgaW4gZWl0aGVyIFNvdXJjZSBDb2RlIG9yIEV4ZWN1dGFibGUgCitmb3JtLCBhbnkgc3VjaCBJbnRlcm5hbCBVc2UgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IFJlY2lwaWVudCBpbiB0aGUgY291cnNlIG9mIHN1Y2ggCitpbnRlcm5hbCB1c2UsIGV4Y2VwdCB3aGVyZSByZXF1aXJlZCBiZWxvdyBpbiB0aGlzIFNlY3Rpb24gMy41LiBBbGwgSW50ZXJuYWwgVXNlIAorTW9kaWZpY2F0aW9ucyBkaXN0cmlidXRlZCB0byBhbnkgUGVyc29uLCB3aGV0aGVyIG9yIG5vdCBhIFRoaXJkIFBhcnR5LCBzaGFsbCBiZSBkaXN0cmlidXRlZCAKK3B1cnN1YW50IHRvIGFuZCBiZSBhY2NvbXBhbmllZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiB0aGUgUmVjaXBpZW50IGNob29zZXMgdG8gCitkaXN0cmlidXRlIGFueSBzdWNoIEludGVybmFsIFVzZSBNb2RpZmljYXRpb25zIHRvIGFueSBUaGlyZCBQYXJ0eSwgdGhlbiB0aGUgUmVjaXBpZW50IAorc2hhbGwgYmUgZGVlbWVkIGEgU3Vic2VxdWVudCBDb250cmlidXRvciwgYW5kIGFueSBzdWNoIEludGVybmFsIFVzZSBNb2RpZmljYXRpb25zIAorZGlzdHJpYnV0ZWQgdG8gYW55IFRoaXJkIFBhcnR5IHNoYWxsIGJlIGRlZW1lZCBhIFN1YnNlcXVlbnQgV29yayBvcmlnaW5hdGluZyBmcm9tIHRoYXQgCitTdWJzZXF1ZW50IENvbnRyaWJ1dG9yLCBhbmQgc2hhbGwgZnJvbSB0aGUgZmlyc3Qgc3VjaCBpbnN0YW5jZSBiZWNvbWUgcGFydCBvZiB0aGUgCitMaWNlbnNlZCBXb3JrIHRoYXQgbXVzdCB0aGVyZWFmdGVyIGJlIGRpc3RyaWJ1dGVkIGFuZCBtYWRlIGF2YWlsYWJsZSB0byB0aGlyZCBwYXJ0aWVzIGluIAorYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAzLjEgdG8gMy40IGluY2x1c2l2ZS4KKworIDMuNi4gSU5ERVBFTkRFTlQgTU9EVUxFUy4KKworVGhpcyBMaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0byBJbmRlcGVuZGVudCBNb2R1bGVzIG9mIGFueSBJbml0aWFsIENvbnRyaWJ1dG9yLCAKK1N1YnNlcXVlbnQgQ29udHJpYnV0b3IsIERpc3RyaWJ1dG9yIG9yIGFueSBSZWNpcGllbnQsIGFuZCBzdWNoIEluZGVwZW5kZW50IE1vZHVsZXMgCittYXkgYmUgbGljZW5zZWQgb3IgbWFkZSBhdmFpbGFibGUgdW5kZXIgb25lIG9yIG1vcmUgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnRzLgorCisgMy43LiBMQVJHRVIgV09SS1MuCisKK0FueSBEaXN0cmlidXRvciBvciBSZWNpcGllbnQgbWF5IGNyZWF0ZSBvciBjb250cmlidXRlIHRvIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIAorYW55IG9mIHRoZSBMaWNlbnNlZCBXb3JrIHdpdGggb3RoZXIgY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIAorbWF5IGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIG9uZSBvciBtb3JlIHByb2R1Y3RzLiBIb3dldmVyLCBpbiBhbnkgc3VjaCBjYXNlLCAKK0Rpc3RyaWJ1dG9yIG9yIFJlY2lwaWVudCAoYXMgdGhlIGNhc2UgbWF5IGJlKSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyAKK0xpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIExpY2Vuc2VkIFdvcmsgcG9ydGlvbiBvZiB0aGUgTGFyZ2VyIFdvcmsuCisKKyAzLjguIERFU0NSSVBUSU9OIE9GIERJU1RSSUJVVEVEIE1PRElGSUNBVElPTlMuCisKKyAoYSkgRWFjaCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yIChpbmNsdWRpbmcgdGhlIEluaXRpYWwgQ29udHJpYnV0b3Igd2hlcmUgdGhlIEluaXRpYWwgCitDb250cmlidXRvciBhbHNvIHF1YWxpZmllcyBhcyBhIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IpIG11c3QgY2F1c2UgZWFjaCBTdWJzZXF1ZW50IAorV29yayBjcmVhdGVkIG9yIGNvbnRyaWJ1dGVkIHRvIGJ5IHRoYXQgU3Vic2VxdWVudCBDb250cmlidXRvciB0byBjb250YWluIGEgZmlsZSAKK2RvY3VtZW50aW5nIHRoZSBjaGFuZ2VzLCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZiBQYXJ0IDEgb2YgdGhlIAorU3VwcGxlbWVudCBGaWxlLCB0aGF0IHN1Y2ggU3Vic2VxdWVudCBDb250cmlidXRvciBtYWRlIGluIHRoZSBjcmVhdGlvbiBvciBjb250cmlidXRpb24gCit0byB0aGF0IFN1YnNlcXVlbnQgV29yay4gSWYgbm8gU3VwcGxlbWVudCBGaWxlIGV4aXN0cyBvciBubyByZXF1aXJlbWVudHMgYXJlIHNldCBvdXQgaW4gCitQYXJ0IDEgb2YgdGhlIFN1cHBsZW1lbnQgRmlsZSwgdGhlbiB0aGVyZSBhcmUgbm8gcmVxdWlyZW1lbnRzIGZvciBTdWJzZXF1ZW50IENvbnRyaWJ1dG9ycyAKK3RvIGRvY3VtZW50IGNoYW5nZXMgdGhhdCB0aGV5IG1ha2UgcmVzdWx0aW5nIGluIFN1YnNlcXVlbnQgV29ya3MuCisKKyAoYikgVGhlIEluaXRpYWwgQ29udHJpYnV0b3IgbWF5IGF0IGFueSB0aW1lIGludHJvZHVjZSByZXF1aXJlbWVudHMgb3IgYWRkIHRvIG9yIGNoYW5nZSAKK2VhcmxpZXIgcmVxdWlyZW1lbnRzIChpbiBlYWNoIGNhc2UsIHRoZSAiRUFSTElFUiBERVNDUklQVElPTiBSRVFVSVJFTUVOVFMiKSAKK2ZvciBkb2N1bWVudGluZyBjaGFuZ2VzIHJlc3VsdGluZyBpbiBTdWJzZXF1ZW50IFdvcmtzIGJ5IHJldmlzaW5nIFBhcnQgMSBvZiBlYWNoIGNvcHkgCitvZiB0aGUgU3VwcGxlbWVudCBGaWxlIGRpc3RyaWJ1dGVkIGJ5IHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIHdpdGggZnV0dXJlIGNvcGllcyBvZiB0aGUgCitMaWNlbnNlZCBXb3JrIHNvIHRoYXQgUGFydCAxIHRoZW4gY29udGFpbnMgbmV3IHJlcXVpcmVtZW50cyAodGhlICJORVcgCitERVNDUklQVElPTiBSRVFVSVJFTUVOVFMiKSBmb3IgZG9jdW1lbnRpbmcgc3VjaCBjaGFuZ2VzLgorCisgKGMpIEFueSBSZWNpcGllbnQgcmVjZWl2aW5nIGF0IGFueSB0aW1lIGFueSBjb3B5IG9mIGFuIEluaXRpYWwgV29yayBvciBhbnkgU3Vic2VxdWVudCAKK1dvcmsgdW5kZXIgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSAoaW4gZWFjaCBjYXNlLCBhbiAiRWFybGllciBMSUNFTlNFRCBDT1BZIikgaGF2aW5nIAordGhlIEVhcmxpZXIgRGVzY3JpcHRpb24gUmVxdWlyZW1lbnRzIG1heSBjaG9vc2UsIHdpdGggcmVzcGVjdCB0byBlYWNoIHN1Y2ggRWFybGllciAKK0xpY2Vuc2VkIENvcHksIHRvIGNvbXBseSB3aXRoIHRoZSBFYXJsaWVyIERlc2NyaXB0aW9uIFJlcXVpcmVtZW50cyBvciB0aGUgTmV3IAorRGVzY3JpcHRpb24gUmVxdWlyZW1lbnRzLiBXaGVyZSBhIFJlY2lwaWVudCBjaG9vc2VzIHRvIGNvbXBseSB3aXRoIHRoZSBOZXcgCitEZXNjcmlwdGlvbiBSZXF1aXJlbWVudHMsIHRoYXQgUmVjaXBpZW50IHdpbGwsIHdoZW4gdGhlcmVhZnRlciBkaXN0cmlidXRpbmcgYW55IGNvcGllcyBvZiAKK2FueSBzdWNoIEVhcmxpZXIgTGljZW5zZWQgQ29weSwgaW5jbHVkZSBhIFN1cHBsZW1lbnQgRmlsZSBoYXZpbmcgYSBzZWN0aW9uIGVudGl0bGVkIFBhcnQgCisxIHRoYXQgY29udGFpbnMgYSBjb3B5IG9mIHRoZSBOZXcgRGVzY3JpcHRpb24gUmVxdWlyZW1lbnRzLgorCisgKGQpIEZvciBncmVhdGVyIGNlcnRhaW50eSwgdGhlIGludGVudCBvZiBQYXJ0IDEgb2YgdGhlIFN1cHBsZW1lbnQgRmlsZSBpcyB0byBwcm92aWRlIGEgCittZWNoYW5pc20gKGlmIGFueSkgYnkgd2hpY2ggU3Vic2VxdWVudCBDb250cmlidXRvcnMgbXVzdCBkb2N1bWVudCBjaGFuZ2VzIHRoYXQgdGhleSAKK21ha2UgdG8gdGhlIExpY2Vuc2VkIFdvcmsgcmVzdWx0aW5nIGluIFN1YnNlcXVlbnQgV29ya3MuIFBhcnQgMSBvZiBhbnkgU3VwcGxlbWVudCAKK0ZpbGUgc2hhbGwgbm90IGJlIHVzZWQgdG8gaW5jcmVhc2Ugb3IgcmVkdWNlIHRoZSBzY29wZSBvZiB0aGUgbGljZW5zZSBncmFudGVkIGluIEFydGljbGUgMiBvZiAKK3RoaXMgTGljZW5zZSBvciBpbiBhbnkgb3RoZXIgd2F5IGluY3JlYXNlIG9yIGRlY3JlYXNlIHRoZSByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIGFueSAKK1JlY2lwaWVudCwgYW5kIHNoYWxsIGF0IG5vIHRpbWUgc2VydmUgYXMgdGhlIGJhc2lzIGZvciB0ZXJtaW5hdGluZyB0aGUgTGljZW5zZS4gRnVydGhlciwgYSAKK1JlY2lwaWVudCBjYW4gYmUgcmVxdWlyZWQgdG8gY29ycmVjdCBhbmQgY2hhbmdlIGl0cyBkb2N1bWVudGF0aW9uIHByb2NlZHVyZXMgdG8gY29tcGx5IAord2l0aCBQYXJ0IDEgb2YgdGhlIFN1cHBsZW1lbnQgRmlsZSwgYnV0IGNhbm5vdCBiZSBwZW5hbGlzZWQgd2l0aCBkYW1hZ2VzLiBQYXJ0IDEgb2YgYW55IAorU3VwcGxlbWVudCBGaWxlIGlzIG9ubHkgYmluZGluZyBvbiBlYWNoIFJlY2lwaWVudCBvZiBhbnkgTGljZW5zZWQgV29yayB0byB0aGUgZXh0ZW50IAorUGFydCAxIHNldHMgb3V0IHRoZSByZXF1aXJlbWVudHMgZm9yIGRvY3VtZW50aW5nIGNoYW5nZXMgdG8gdGhlIEluaXRpYWwgV29yayBvciBhbnkgCitTdWJzZXF1ZW50IFdvcmsuCisKKyAoZSkgQW4gZXhhbXBsZSBvZiBhIHNldCBvZiByZXF1aXJlbWVudHMgZm9yIGRvY3VtZW50aW5nIGNoYW5nZXMgYW5kIGNvbnRyaWJ1dGlvbnMgCittYWRlIGJ5IFN1YnNlcXVlbnQgQ29udHJpYnV0b3IgaXMgc2V0IG91dCBpbiBQYXJ0IDcgb2YgRXhoaWJpdCBBIG9mIHRoaXMgTGljZW5zZS4gUGFydCA3IGlzIAorYSBzYW1wbGUgb25seSBhbmQgaXMgbm90IGJpbmRpbmcgb24gUmVjaXBpZW50cywgdW5sZXNzIChzdWJqZWN0IHRvIHRoZSBlYXJsaWVyIHBhcmFncmFwaHMgCitvZiB0aGlzIFNlY3Rpb24gMy44KSB0aG9zZSBhcmUgdGhlIHJlcXVpcmVtZW50cyB0aGF0IHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIGluY2x1ZGVzIGluIFBhcnQgCisxIG9mIHRoZSBTdXBwbGVtZW50IEZpbGUgd2l0aCB0aGUgY29waWVzIG9mIHRoZSBJbml0aWFsIFdvcmsgZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyAKK0xpY2Vuc2UuCisKKyAzLjkuIFVTRSBPRiBESVNUUklCVVRPUiBOQU1FLgorCisgVGhlIG5hbWUgb2YgYSBEaXN0cmlidXRvciBtYXkgbm90IGJlIHVzZWQgYnkgYW55IG90aGVyIERpc3RyaWJ1dG9yIHRvIGVuZG9yc2Ugb3IgCitwcm9tb3RlIHRoZSBMaWNlbnNlZCBXb3JrIG9yIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGUgTGljZW5zZWQgV29yaywgd2l0aG91dCBwcmlvciAKK3dyaXR0ZW4gcGVybWlzc2lvbi4KKworIDMuMTAuIExJTUlURUQgUkVDT0dOSVRJT04gT0YgSU5JVElBTCBDT05UUklCVVRPUi4KKworIChhKSBBcyBhIG1vZGVzdCBhdHRyaWJ1dGlvbiB0byB0aGUgSW5pdGlhbCBDb250cmlidXRvciwgaW4gdGhlIGhvcGUgdGhhdCBpdHMgcHJvbW90aW9uYWwgCit2YWx1ZSBtYXkgaGVscCBqdXN0aWZ5IHRoZSB0aW1lLCBtb25leSBhbmQgZWZmb3J0IGludmVzdGVkIGluIHdyaXRpbmcgdGhlIEluaXRpYWwgV29yaywgdGhlIAorSW5pdGlhbCBDb250cmlidXRvciBtYXkgaW5jbHVkZSBpbiBQYXJ0IDIgb2YgdGhlIFN1cHBsZW1lbnQgRmlsZSBhIHJlcXVpcmVtZW50IHRoYXQgZWFjaCAKK3RpbWUgYW4gZXhlY3V0YWJsZSBwcm9ncmFtIHJlc3VsdGluZyBmcm9tIHRoZSBJbml0aWFsIFdvcmsgb3IgYW55IFN1YnNlcXVlbnQgV29yaywgb3IgYSAKK3Byb2dyYW0gZGVwZW5kZW50IHRoZXJlb24sIGlzIGxhdW5jaGVkIG9yIHJ1biwgYSBwcm9taW5lbnQgZGlzcGxheSBvZiB0aGUgSW5pdGlhbCAKK0NvbnRyaWJ1dG9yJ3MgYXR0cmlidXRpb24gaW5mb3JtYXRpb24gbXVzdCBvY2N1ciAodGhlICJBVFRSSUJVVElPTiAKK0lORk9STUFUSU9OIikuIFRoZSBBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvbiBtdXN0IGJlIGluY2x1ZGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgCitlYWNoIFNvdXJjZSBDb2RlIGZpbGUuIEZvciBncmVhdGVyIGNlcnRhaW50eSwgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IgbWF5IHNwZWNpZnkgaW4gdGhlIAorU3VwcGxlbWVudCBGaWxlIHRoYXQgdGhlIGFib3ZlIGF0dHJpYnV0aW9uIHJlcXVpcmVtZW50IG9ubHkgYXBwbGllcyB0byBhbiBleGVjdXRhYmxlIAorcHJvZ3JhbSByZXN1bHRpbmcgZnJvbSB0aGUgSW5pdGlhbCBXb3JrIG9yIGFueSBTdWJzZXF1ZW50IFdvcmssIGJ1dCBub3QgYSBwcm9ncmFtIAorZGVwZW5kZW50IHRoZXJlb24uIFRoZSBpbnRlbnQgaXMgdG8gcHJvdmlkZSBmb3IgcmVhc29uYWJseSBtb2Rlc3QgYXR0cmlidXRpb24sIHRoZXJlZm9yZSAKK3RoZSBJbml0aWFsIENvbnRyaWJ1dG9yIG1heSBub3QgcmVxdWlyZSBSZWNpcGllbnRzIHRvIGRpc3BsYXksIGF0IGFueSB0aW1lLCBtb3JlIHRoYW4gdGhlIAorZm9sbG93aW5nIEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uOiAoYSkgYSBjb3B5cmlnaHQgbm90aWNlIGluY2x1ZGluZyB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCAKK0NvbnRyaWJ1dG9yOyAoYikgYSB3b3JkIG9yIG9uZSBwaHJhc2UgKG5vdCBleGNlZWRpbmcgMTAgd29yZHMpOyAoYykgb25lIGRpZ2l0YWwgaW1hZ2Ugb3IgCitncmFwaGljIHByb3ZpZGVkIHdpdGggdGhlIEluaXRpYWwgV29yazsgYW5kIChkKSBhIFVSTCAoY29sbGVjdGl2ZWx5LCB0aGUgCisiQVRUUklCVVRJT04gTElNSVRTIikuCisKKyAoYikgSWYgbm8gU3VwcGxlbWVudCBGaWxlIGV4aXN0cywgb3Igbm8gQXR0cmlidXRpb24gSW5mb3JtYXRpb24gaXMgc2V0IG91dCBpbiBQYXJ0IDIgb2YgdGhlIAorU3VwcGxlbWVudCBGaWxlLCB0aGVuIHRoZXJlIGFyZSBubyByZXF1aXJlbWVudHMgZm9yIFJlY2lwaWVudHMgdG8gZGlzcGxheSBhbnkgQXR0cmlidXRpb24gCitJbmZvcm1hdGlvbiBvZiB0aGUgSW5pdGlhbCBDb250cmlidXRvci4KKworIChjKSBFYWNoIFJlY2lwaWVudCBhY2tub3dsZWRnZXMgdGhhdCBhbGwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBhbmQvb3IgdHJhZGUgbmFtZXMgCitjb250YWluZWQgd2l0aGluIFBhcnQgMiBvZiB0aGUgU3VwcGxlbWVudCBGaWxlIGRpc3RyaWJ1dGVkIHdpdGggdGhlIExpY2Vuc2VkIFdvcmsgYXJlIAordGhlIGV4Y2x1c2l2ZSBwcm9wZXJ0eSBvZiB0aGUgSW5pdGlhbCBDb250cmlidXRvciBhbmQgbWF5IG9ubHkgYmUgdXNlZCB3aXRoIHRoZSAKK3Blcm1pc3Npb24gb2YgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IsIG9yIHVuZGVyIGNpcmN1bXN0YW5jZXMgb3RoZXJ3aXNlIHBlcm1pdHRlZCBieSBsYXcsIAorb3IgYXMgZXhwcmVzc2x5IHNldCBvdXQgaW4gdGhpcyBMaWNlbnNlLgorCisgMy4xMS4gRm9yIGdyZWF0ZXIgY2VydGFpbnR5LCBhbnkgZGVzY3JpcHRpb24gb3IgYXR0cmlidXRpb24gcHJvdmlzaW9ucyBjb250YWluZWQgd2l0aGluIGEgCitTdXBwbGVtZW50IEZpbGUgbWF5IG9ubHkgYmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBuYXR1cmUgb2YgdGhlIGRlc2NyaXB0aW9uIG9yIGF0dHJpYnV0aW9uIAorcmVxdWlyZW1lbnRzLCBhcyB0aGUgY2FzZSBtYXkgYmUuIEFueSBwcm92aXNpb24gaW4gYSBTdXBwbGVtZW50IEZpbGUgdGhhdCBvdGhlcndpc2UgCitwdXJwb3J0cyB0byBtb2RpZnksIHZhcnksIG51bGxpZnkgb3IgYW1lbmQgYW55IHJpZ2h0LCBvYmxpZ2F0aW9uIG9yIHJlcHJlc2VudGF0aW9uIAorY29udGFpbmVkIGhlcmVpbiBzaGFsbCBiZSBkZWVtZWQgdm9pZCB0byB0aGF0IGV4dGVudCwgYW5kIHNoYWxsIGJlIG9mIG5vIGZvcmNlIG9yIGVmZmVjdC4KKworNC4gQ09NTUVSQ0lBTCBVU0UgQU5EIElOREVNTklUWS4KKworIDQuMS4gQ09NTUVSQ0lBTCBTRVJWSUNFUy4KKworIEEgUmVjaXBpZW50ICgiQ09NTUVSQ0lBTCBSRUNJUElFTlQiKSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIAorZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyAoY29sbGVjdGl2ZWx5LCAiU0VSVklDRVMiKSB0byAKK29uZSBvciBtb3JlIG90aGVyIFJlY2lwaWVudHMgb3IgRGlzdHJpYnV0b3JzLiBIb3dldmVyLCBzdWNoIENvbW1lcmNpYWwgUmVjaXBpZW50IG1heSAKK2RvIHNvIG9ubHkgb24gdGhhdCBDb21tZXJjaWFsIFJlY2lwaWVudCdzIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIGFueSBvdGhlciAKK0Rpc3RyaWJ1dG9yIG9yIFJlY2lwaWVudCwgYW5kIENvbW1lcmNpYWwgUmVjaXBpZW50IG11c3QgbWFrZSBpdCBjbGVhciB0aGFuIGFueSBzdWNoIAord2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbihzKSBpcy9hcmUgb2ZmZXJlZCBieSBDb21tZXJjaWFsIAorUmVjaXBpZW50IGFsb25lLiBBdCBubyB0aW1lIG1heSBDb21tZXJjaWFsIFJlY2lwaWVudCB1c2UgYW55IFNlcnZpY2VzIHRvIGRlbnkgYW55IAorcGFydHkgdGhlIExpY2Vuc2VkIFdvcmsgaW4gU291cmNlIENvZGUgb3IgRXhlY3V0YWJsZSBmb3JtIHdoZW4gc28gcmVxdWlyZWQgdW5kZXIgYW55IAorb2YgdGhlIG90aGVyIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gRm9yIGdyZWF0ZXIgY2VydGFpbnR5LCB0aGlzIFNlY3Rpb24gNC4xIGRvZXMgbm90IGRpbWluaXNoIAorYW55IG9mIHRoZSBvdGhlciB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIG9ibGlnYXRpb24gb2YgdGhlIAorQ29tbWVyY2lhbCBSZWNpcGllbnQgYXMgYSBEaXN0cmlidXRvciwgd2hlbiBkaXN0cmlidXRpbmcgYW55IG9mIHRoZSBMaWNlbnNlZCBXb3JrIGluIAorU291cmNlIENvZGUgb3IgRXhlY3V0YWJsZSBmb3JtLCB0byBtYWtlIHN1Y2ggZGlzdHJpYnV0aW9uIHJveWFsdHktZnJlZSAoc3ViamVjdCB0byB0aGUgCityaWdodCB0byBjaGFyZ2UgYSBmZWUgb2Ygbm8gbW9yZSB0aGFuIHRoZSBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBTb3VyY2UgQ29kZSBvciAKK0V4ZWN1dGFibGUgZGlzdHJpYnV0aW9uIChhcyB0aGUgY2FzZSBtYXkgYmUpKS4KKworIDQuMi4gSU5ERU1OSVRZLgorCisgQ29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5IGFjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIAorZW5kIHVzZXJzLCBidXNpbmVzcyBwYXJ0bmVycyBhbmQgdGhlIGxpa2UuIFdoaWxlIHRoaXMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSAKK2NvbW1lcmNpYWwgdXNlIG9mIHRoZSBMaWNlbnNlZCBXb3JrLCB0aGUgRGlzdHJpYnV0b3Igd2hvIGluY2x1ZGVzIGFueSBvZiB0aGUgTGljZW5zZWQgCitXb3JrIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgCitwb3RlbnRpYWwgbGlhYmlsaXR5IGZvciBvdGhlciBEaXN0cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBEaXN0cmlidXRvciBpbmNsdWRlcyB0aGUgTGljZW5zZWQgCitXb3JrIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nIG9yIG9mZmVycyBhbnkgU2VydmljZXMsIHN1Y2ggRGlzdHJpYnV0b3IgCisoIkNPTU1FUkNJQUwgRElTVFJJQlVUT1IiKSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyIAorRGlzdHJpYnV0b3Igb3IgU3Vic2VxdWVudCBDb250cmlidXRvciAoaW4gZWFjaCBjYXNlIGFuICJJTkRFTU5JRklFRCBQQVJUWSIpIAorYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZCBjb3N0cyAoY29sbGVjdGl2ZWx5ICJMT1NTRVMiKSBhcmlzaW5nIGZyb20gY2xhaW1zLCAKK2xhd3N1aXRzIGFuZCBvdGhlciBsZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBQYXJ0eSB0byAKK3RoZSBleHRlbnQgY2F1c2VkIGJ5IHRoZSBhY3RzIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgRGlzdHJpYnV0b3IgaW4gY29ubmVjdGlvbiAKK3dpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiBhbnkgb2YgdGhlIExpY2Vuc2VkIFdvcmsgaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcgb3IgaW4gCitjb25uZWN0aW9uIHdpdGggYW55IFNlcnZpY2VzLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIAorb3IgTG9zc2VzIHJlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlciB0byAKK3F1YWxpZnksIGFuIEluZGVtbmlmaWVkIFBhcnR5IG11c3Q6IChhKSBwcm9tcHRseSBub3RpZnkgdGhlIENvbW1lcmNpYWwgRGlzdHJpYnV0b3IgaW4gCit3cml0aW5nIG9mIHN1Y2ggY2xhaW07IGFuZCAoYikgYWxsb3cgdGhlIENvbW1lcmNpYWwgRGlzdHJpYnV0b3IgdG8gY29udHJvbCwgYW5kIGNvLQorb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIERpc3RyaWJ1dG9yIGluLCB0aGUgZGVmZW5zZSBhbmQgYW55IHJlbGF0ZWQgc2V0dGxlbWVudCAKK25lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIFBhcnR5IG1heSBwYXJ0aWNpcGF0ZSBpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIAorZXhwZW5zZS4KKworNS4gVkVSU0lPTlMgT0YgVEhFIExJQ0VOU0UuCisKKyA1LjEuIE5FVyBWRVJTSU9OUy4KKworIFRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZSBmcm9tIAordGltZSB0byB0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLgorCisgNS4yLiBFRkZFQ1QgT0YgTkVXIFZFUlNJT05TLgorCisgT25jZSB0aGUgTGljZW5zZWQgV29yayBvciBhbnkgcG9ydGlvbiB0aGVyZW9mIGhhcyBiZWVuIHB1Ymxpc2hlZCBieSBJbml0aWFsIENvbnRyaWJ1dG9yIAordW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsIFJlY2lwaWVudCBtYXkgY2hvb3NlIHRvIGNvbnRpbnVlIHRvIHVzZSBpdCAKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIEhvd2V2ZXIsIGlmIGEgUmVjaXBpZW50IGNob29zZXMgdG8gdXNlIHRoZSBMaWNlbnNlZCAKK1dvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IHRoZSBJbml0aWFsIAorQ29udHJpYnV0b3IsIHRoZW4gZnJvbSB0aGUgZGF0ZSBvZiBtYWtpbmcgdGhpcyBjaG9pY2UsIHRoZSBSZWNpcGllbnQgbXVzdCBjb21wbHkgd2l0aCAKK3RoZSB0ZXJtcyBvZiB0aGF0IHN1YnNlcXVlbnQgdmVyc2lvbiB3aXRoIHJlc3BlY3QgdG8gYWxsIGZ1cnRoZXIgcmVwcm9kdWN0aW9uLCBwcmVwYXJhdGlvbiAKK29mIGRlcml2YXRpdmUgd29ya3MsIHB1YmxpYyBkaXNwbGF5IG9mLCBwdWJsaWMgcGVyZm9ybWFuY2Ugb2YsIGRpc3RyaWJ1dGlvbiBhbmQgCitzdWJsaWNlbnNpbmcgYnkgdGhlIFJlY2lwaWVudCBpbiBjb25uZWN0aW9uIHdpdGggdGhlIExpY2Vuc2VkIFdvcmsuIE5vIG9uZSBvdGhlciB0aGFuIAordGhlIEluaXRpYWwgQ29udHJpYnV0b3IgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gdGhlIExpY2Vuc2VkIFdvcmsKKworNi4gRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS4KKworIDYuMS4gR0VORVJBTCBESVNDTEFJTUVSLgorCisgRVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBMSUNFTlNFLCBUSEUgTElDRU5TRUQgV09SSyAKK0lTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIEFOWSAKK1JFUFJFU0VOVEFUSU9OLCBXQVJSQU5UWSwgR1VBUkFOVEVFLCBBU1NVUkFOQ0UgT1IgQ09ORElUSU9OIAorT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBXSVRIT1VUIAorTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tCitJTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgCitQVVJQT1NFLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIAorVEhFIExJQ0VOU0VEIFdPUksgSVMgV0lUSCBSRUNJUElFTlQuIFNIT1VMRCBBTlkgTElDRU5TRUQgV09SSyAKK1BST1ZFIERFRkVDVElWRSBJTiBBTlkgUkVTUEVDVCwgUkVDSVBJRU5UIChOT1QgVEhFIElOSVRJQUwgCitDT05UUklCVVRPUiBPUiBBTlkgU1VCU0VRVUVOVCBDT05UUklCVVRPUikgQVNTVU1FUyBUSEUgQ09TVCAKK09GIEFOWSBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4gVEhJUyBDTEFVU0UgCitDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRiBBTlkgCitMSUNFTlNFRCBXT1JLIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIAorTElDRU5TRSBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIFRISVMgRElTQ0xBSU1FUi4KKworIDYuMi4gUkVTUE9OU0lCSUxJVFkgT0YgUkVDSVBJRU5UUy4KKworIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgCitkaXN0cmlidXRpbmcgdGhlIExpY2Vuc2VkIFdvcmsgYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIAordW5kZXIgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsIAorY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IgZXF1aXBtZW50LCBhbmQgCit1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2Ygb3BlcmF0aW9ucy4KKworNy4gVEVSTUlOQVRJT04uCisKKyA3LjEuIFRoaXMgTGljZW5zZSBzaGFsbCBjb250aW51ZSB1bnRpbCB0ZXJtaW5hdGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgZXhwcmVzcyB0ZXJtcyAKK2hlcmVpbi4KKworIDcuMi4gUmVjaXBpZW50IG1heSBjaG9vc2UgdG8gdGVybWluYXRlIHRoaXMgTGljZW5zZSBhdXRvbWF0aWNhbGx5IGF0IGFueSB0aW1lLgorCisgNy4zLiBUaGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB0byBhIAorcGFydGljdWxhciBSZWNpcGllbnQsIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYgc3VjaCBSZWNpcGllbnQgaXMgaW4gbWF0ZXJpYWwgYnJlYWNoIAorb2YgYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGZhaWxzIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIHNpeHR5ICg2MCkgZGF5cyBvZiAKK2JlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIFdpdGhvdXQgbGltaXRpbmcgdGhlIGZvcmVnb2luZywgYW55IG1hdGVyaWFsIGJyZWFjaCBieSAKK3N1Y2ggUmVjaXBpZW50IG9mIGFueSB0ZXJtIG9mIGFueSBvdGhlciBMaWNlbnNlIHVuZGVyIHdoaWNoIHN1Y2ggUmVjaXBpZW50IGlzIGdyYW50ZWQgCithbnkgcmlnaHRzIHRvIHRoZSBMaWNlbnNlZCBXb3JrIHNoYWxsIGNvbnN0aXR1dGUgYSBtYXRlcmlhbCBicmVhY2ggb2YgdGhpcyBMaWNlbnNlLgorCisgNy40LiBVcG9uIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBieSBvciB3aXRoIHJlc3BlY3QgdG8gYSBwYXJ0aWN1bGFyIFJlY2lwaWVudCBmb3IgYW55IAorcmVhc29uLCBhbGwgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIGFuZCB1bmRlciBhbnkgb3RoZXIgTGljZW5zZSB0byB0aGF0IFJlY2lwaWVudCBzaGFsbCAKK3Rlcm1pbmF0ZS4gSG93ZXZlciwgYWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBMaWNlbnNlZCBXb3JrIHdoaWNoIHdlcmUgcHJldmlvdXNseSAKK3Byb3Blcmx5IGdyYW50ZWQgYnkgc3VjaCBSZWNpcGllbnQgdW5kZXIgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSAoaW4gZWFjaCBjYXNlLCBhbiAiT3RoZXIgCitMaWNlbnNlIiBhbmQgaW4gcGx1cmFsLCAiT3RoZXIgTGljZW5zZXMiKSBzaGFsbCBzdXJ2aXZlIGFueSBzdWNoIHRlcm1pbmF0aW9uIG9mIHRoaXMgCitMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgYW5kIG9ibGlnYXRpb25zIHVuZGVyIHN1Y2ggT3RoZXIgCitMaWNlbnNlcyBhcyBzZXQgb3V0IGluIHRoZWlyIHJlc3BlY3RpdmUgU2VjdGlvbnMgMiwgMywgNCwgNSwgNiwgNyBhbmQgOCwgbXV0YXRpcyBtdXRhbmRpcywgZm9yIAorc28gbG9uZyBhcyB0aGUgcmVzcGVjdGl2ZSBzdWJsaWNlbnNlZXMgKGkuZS4gb3RoZXIgUmVjaXBpZW50cykgcmVtYWluIGluIGNvbXBsaWFuY2Ugd2l0aCAKK3RoZSB0ZXJtcyBvZiB0aGUgY29weSBvZiB0aGlzIExpY2Vuc2UgdW5kZXIgd2hpY2ggc3VjaCBzdWJsaWNlbnNlZXMgcmVjZWl2ZWQgcmlnaHRzIHRvIHRoZSAKK0xpY2Vuc2VkIFdvcmsuIEFueSB0ZXJtaW5hdGlvbiBvZiBzdWNoIE90aGVyIExpY2Vuc2VzIHNoYWxsIGJlIHB1cnN1YW50IHRvIHRoZWlyIAorcmVzcGVjdGl2ZSBTZWN0aW9uIDcsIG11dGF0aXMgbXV0YW5kaXMuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gCitlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZS4KKworIDcuNS4gVXBvbiBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIGJ5IG9yIHdpdGggcmVzcGVjdCB0byBhIHBhcnRpY3VsYXIgUmVjaXBpZW50LCAKK1NlY3Rpb25zIDQuMSwgNC4yLCA2LjEsIDYuMiwgNy40LCA3LjUsIDguMSwgYW5kIDguMiwgdG9nZXRoZXIgd2l0aCBhbGwgcHJvdmlzaW9ucyBvZiB0aGlzIAorTGljZW5zZSBuZWNlc3NhcnkgZm9yIHRoZSBpbnRlcnByZXRhdGlvbiBhbmQgZW5mb3JjZW1lbnQgb2Ygc2FtZSwgc2hhbGwgZXhwcmVzc2x5IHN1cnZpdmUgCitzdWNoIHRlcm1pbmF0aW9uLgorCis4LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS4KKworIDguMS4gSU4gTk8gRVZFTlQgU0hBTEwgQU5ZIE9GIElOSVRJQUwgQ09OVFJJQlVUT1IsIElUUyAKK1NVQlNJRElBUklFUywgT1IgQUZGSUxJQVRFUywgT1IgQU5ZIE9GIElUUyBPUiBUSEVJUiBSRVNQRUNUSVZFIAorT0ZGSUNFUlMsIERJUkVDVE9SUywgRU1QTE9ZRUVTLCBBTkQvT1IgQUdFTlRTIChBUyBUSEUgQ0FTRSBNQVkgCitCRSksIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IgQU5ZIERJUkVDVCBEQU1BR0VTLCBJTkRJUkVDVCAKK0RBTUFHRVMsIFBVTklUSVZFIERBTUFHRVMsIElOQ0lERU5UQUwgREFNQUdFUywgU1BFQ0lBTCAKK0RBTUFHRVMsIEVYRU1QTEFSWSBEQU1BR0VTLCBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIAorT1RIRVIgREFNQUdFUyBXSEFUU09FVkVSIChJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1MgCitPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgT1IgQU5ZIE9USEVSIExPU1MgQVJJU0lORyBPVVQgT0YgT1IgSU4gCitBTlkgV0FZIFJFTEFURUQgVE8gVEhFIFVTRSwgSU5BQklMSVRZIFRPIFVTRSwgVU5BVVRIT1JJWkVEIFVTRSwgCitQRVJGT1JNQU5DRSwgT1IgTk9OLVBFUkZPUk1BTkNFIE9GIFRIRSBMSUNFTlNFRCBXT1JLIE9SIEFOWSAKK1BBUlQgVEhFUkVPRiBPUiBUSEUgUFJPVklTSU9OIE9GIE9SIEZBSUxVUkUgVE8gUFJPVklERSBTVVBQT1JUIAorU0VSVklDRVMsIE9SIFRIQVQgUkVTVUxUIEZST00gRVJST1JTLCBERUZFQ1RTLCBPTUlTU0lPTlMsIERFTEFZUyAKK0lOIE9QRVJBVElPTiBPUiBUUkFOU01JU1NJT04sIE9SIEFOWSBPVEhFUiBGQUlMVVJFIE9GIAorUEVSRk9STUFOQ0UpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIAorV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIAorTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIElOIFJFTEFUSU9OIFRPIE9SIEFSSVNJTkcgSU4gQU5ZIFdBWSAKK09VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YgVEhFIExJQ0VOU0VEIAorV09SSyBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiAKK0FEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhJUyBMSU1JVEFUSU9OIE9GIAorTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIAorSU5KVVJZIFJFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFknUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgCitBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMgU1VDSCBMSU1JVEFUSU9OLiBUSElTIENMQVVTRSAKK0NPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gVVNFIE9GIEFOWSAKK0xJQ0VOU0VEIFdPUksgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgCitMSUNFTlNFIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gVEhFIExJTUlUQVRJT05TIFNFVCBGT1JUSCAKK0lOIFRISVMgU0VDVElPTiA4LjEuCisKKyA4LjIuIEVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMgTElDRU5TRSwgRUFDSCBSRUNJUElFTlQgCitTSEFMTCBOT1QgSEFWRSBBTlkgTElBQklMSVRZIEZPUiBBTlkgRVhFTVBMQVJZLCBPUiAKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIAorUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgCitXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgCitORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SIAorRElTVFJJQlVUSU9OIE9GIFRIRSBMSUNFTlNFRCBXT1JLIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIAorR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCAKK0RBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIAorTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSCAKK1BBUlRZJ1MgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXIFBST0hJQklUUyBTVUNIIAorTElNSVRBVElPTi4KKworOS4gR09WRVJOSU5HIExBVyBBTkQgTEVHQUwgQUNUSU9OLgorCisgOS4xLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgYW5kIGNvbnN0cnVlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGxhd3Mgb2YgdGhlIAorR292ZXJuaW5nIEp1cmlzZGljdGlvbiBhc3NpZ25lZCBpbiBQYXJ0IDMgb2YgRXhoaWJpdCBBLCB3aXRob3V0IHJlZ2FyZCB0byBpdHMgY29uZmxpY3Qgb2YgCitsYXcgcHJvdmlzaW9ucy4gTm8gcGFydHkgbWF5IGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMgTGljZW5zZSBtb3JlIHRoYW4gb25lIHllYXIgCithZnRlciB0aGUgY2F1c2Ugb2YgdGhlIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMgaXRzIHJpZ2h0cyAoaWYgYW55KSB0byBhIGp1cnkgdHJpYWwgaW4gCithbnkgbGl0aWdhdGlvbiBhcmlzaW5nIHVuZGVyIHRoaXMgTGljZW5zZS4gTm90ZSB0aGF0IGlmIHRoZSBHb3Zlcm5pbmcgSnVyaXNkaWN0aW9uIGlzIG5vdCAKK2Fzc2lnbmVkIGluIFBhcnQgMyBvZiBFeGhpYml0IEEsIHRoZW4gdGhlIEdvdmVybmluZyBKdXJpc2RpY3Rpb24gc2hhbGwgYmUgdGhlIFN0YXRlIG9mIE5ldyAKK1lvcmsuCisKKyA5LjIuIFRoZSBjb3VydHMgb2YgdGhlIEdvdmVybmluZyBKdXJpc2RpY3Rpb24gc2hhbGwgaGF2ZSBqdXJpc2RpY3Rpb24sIGJ1dCBub3QgZXhjbHVzaXZlIAoranVyaXNkaWN0aW9uLCB0byBlbnRlcnRhaW4gYW5kIGRldGVybWluZSBhbGwgZGlzcHV0ZXMgYW5kIGNsYWltcywgd2hldGhlciBmb3Igc3BlY2lmaWMgCitwZXJmb3JtYW5jZSwgaW5qdW5jdGlvbiwgZGFtYWdlcyBvciBvdGhlcndpc2UsIGJvdGggYXQgbGF3IGFuZCBpbiBlcXVpdHksIGFyaXNpbmcgb3V0IG9mIAorb3IgaW4gYW55IHdheSByZWxhdGluZyB0byB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIHRoZSBsZWdhbGl0eSwgdmFsaWRpdHksIAorZXhpc3RlbmNlIGFuZCBlbmZvcmNlYWJpbGl0eSBvZiB0aGlzIExpY2Vuc2UuIEVhY2ggcGFydHkgdG8gdGhpcyBMaWNlbnNlIGhlcmVieSAKK2lycmV2b2NhYmx5IGF0dG9ybnMgdG8gYW5kIGFjY2VwdHMgdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgY291cnRzIG9mIHRoZSBHb3Zlcm5pbmcgCitKdXJpc2RpY3Rpb24gZm9yIHN1Y2ggcHVycG9zZXMuCisKKyA5LjMuIEV4Y2VwdCBhcyBleHByZXNzbHkgc2V0IGZvcnRoIGVsc2V3aGVyZSBoZXJlaW4sIGluIHRoZSBldmVudCBvZiBhbnkgYWN0aW9uIG9yIAorcHJvY2VlZGluZyBicm91Z2h0IGJ5IGFueSBwYXJ0eSBhZ2FpbnN0IGFub3RoZXIgdW5kZXIgdGhpcyBMaWNlbnNlIHRoZSBwcmV2YWlsaW5nIHBhcnR5IAorc2hhbGwgYmUgZW50aXRsZWQgdG8gcmVjb3ZlciBhbGwgY29zdHMgYW5kIGV4cGVuc2VzIGluY2x1ZGluZyB0aGUgZmVlcyBvZiBpdHMgYXR0b3JuZXlzIGluIAorc3VjaCBhY3Rpb24gb3IgcHJvY2VlZGluZyBpbiBzdWNoIGFtb3VudCBhcyB0aGUgY291cnQgbWF5IGFkanVkZ2UgcmVhc29uYWJsZS4KKworMTAuIE1JU0NFTExBTkVPVVMuCisKKyAxMC4xLiBUaGUgb2JsaWdhdGlvbnMgaW1wb3NlZCBieSB0aGlzIExpY2Vuc2UgYXJlIGZvciB0aGUgYmVuZWZpdCBvZiB0aGUgSW5pdGlhbCAKK0NvbnRyaWJ1dG9yIGFuZCBhbnkgUmVjaXBpZW50LCBhbmQgZWFjaCBSZWNpcGllbnQgYWNrbm93bGVkZ2VzIGFuZCBhZ3JlZXMgdGhhdCB0aGUgCitJbml0aWFsIENvbnRyaWJ1dG9yIGFuZC9vciBhbnkgb3RoZXIgUmVjaXBpZW50IG1heSBlbmZvcmNlIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiAKK3RoaXMgTGljZW5zZSBhZ2FpbnN0IGFueSBSZWNpcGllbnQuCisKKyAxMC4yLiBUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLCAKK2FuZCBzdXBlcnNlZGVzIGFuZCBjYW5jZWxzIGFsbCBwcmV2aW91cyBvcmFsIGFuZCB3cml0dGVuIGNvbW11bmljYXRpb25zLCAKK3JlcHJlc2VudGF0aW9ucywgYWdyZWVtZW50cyBhbmQgdW5kZXJzdGFuZGluZ3MgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIAorc3ViamVjdCBtYXR0ZXIgaGVyZW9mLgorCisgMTAuMy4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIAorSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4KKworIDEwLjQuIFRoZSBsYW5ndWFnZSBpbiBhbGwgcGFydHMgb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGluIGFsbCBjYXNlcyBjb25zdHJ1ZWQgc2ltcGx5IAorYWNjb3JkaW5nIHRvIGl0cyBmYWlyIG1lYW5pbmcsIGFuZCBub3Qgc3RyaWN0bHkgZm9yIG9yIGFnYWluc3QgYW55IG9mIHRoZSBwYXJ0aWVzIGhlcmV0by4gQW55IAorbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgCithZ2FpbnN0IHRoZSBkcmFmdGVyIHNoYWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuCisKKyAxMC41LiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgdGhlIGxhd3Mgb2YgdGhlIAorR292ZXJuaW5nIEp1cmlzZGljdGlvbiwgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmRlciAKK29mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCAKK3Byb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gCit2YWxpZCBhbmQgZW5mb3JjZWFibGUuCisKKyAxMC42LiBUaGUgcGFyYWdyYXBoIGhlYWRpbmdzIG9mIHRoaXMgTGljZW5zZSBhcmUgZm9yIHJlZmVyZW5jZSBhbmQgY29udmVuaWVuY2Ugb25seSBhbmQgCithcmUgbm90IGEgcGFydCBvZiB0aGlzIExpY2Vuc2UsIGFuZCB0aGV5IHNoYWxsIGhhdmUgbm8gZWZmZWN0IHVwb24gdGhlIGNvbnN0cnVjdGlvbiBvciAKK2ludGVycHJldGF0aW9uIG9mIGFueSBwYXJ0IGhlcmVvZi4KKworIDEwLjcuIEVhY2ggb2YgdGhlIHRlcm1zICJpbmNsdWRpbmciLCAiaW5jbHVkZSIgYW5kICJpbmNsdWRlcyIsIHdoZW4gdXNlZCBpbiB0aGlzIExpY2Vuc2UsIAoraXMgbm90IGxpbWl0aW5nIHdoZXRoZXIgb3Igbm90IG5vbi1saW1pdGluZyBsYW5ndWFnZSAoc3VjaCBhcyAid2l0aG91dCBsaW1pdGF0aW9uIiBvciAiYnV0IAorbm90IGxpbWl0ZWQgdG8iIG9yIHdvcmRzIG9mIHNpbWlsYXIgaW1wb3J0KSBpcyB1c2VkIHdpdGggcmVmZXJlbmNlIHRoZXJldG8uCisKKyAxMC44LiBUaGUgcGFydGllcyBoZXJldG8gYWNrbm93bGVkZ2UgdGhleSBoYXZlIGV4cHJlc3NseSByZXF1aXJlZCB0aGF0IHRoaXMgTGljZW5zZSBhbmQgCitub3RpY2VzIHJlbGF0aW5nIHRoZXJldG8gYmUgZHJhZnRlZCBpbiB0aGUgRW5nbGlzaCBsYW5ndWFnZS4KKworLy8qKipUSEUgTElDRU5TRSBURVJNUyBFTkQgSEVSRSAoT1RIRVIgVEhBTiBBUyBTRVQgT1VUIElOIEVYSElCSVQgCisvL0EpLioqKi8vCisKK0VYSElCSVQgQSAodG8gdGhlIEFkYXB0aXZlIFB1YmxpYyBMaWNlbnNlKQorCisgUEFSVCAxOiBJTklUSUFMIENPTlRSSUJVVE9SIEFORCBERVNJR05BVEVEIFdFQiBTSVRFIFRoZSBJbml0aWFsIAorQ29udHJpYnV0b3IgaXM6IAlNdXNpY0lQIENvcnBvcmF0aW9uICh3d3cubXVzaWNpcC5jb20pCisKK0FkZHJlc3Mgb2YgSW5pdGlhbCBDb250cmlidXRvcjogCQorCis2MDUgRS4gSHVudGluZ3RvbiBEci4sIFN1aXRlIDIwMSAKK01vbnJvdmlhLCBDYWxpZm9ybmlhLCA5MTAxNiBVU0EgCisrMSAoNjI2KSAzNTktOTcwMgorCisgW0VudGVyIGFkZHJlc3MgYWJvdmVdCisKKyBUaGUgRGVzaWduYXRlZCBXZWIgU2l0ZSBpczogCWh0dHA6Ly93d3cubXVzaWNkbnMub3JnLworCitOT1RFOiBUaGUgSW5pdGlhbCBDb250cmlidXRvciBpcyB0byBjb21wbGV0ZSB0aGlzIFBhcnQgMSwgYWxvbmcgd2l0aCBQYXJ0cyAyLCAzLCBhbmQgNSwgCithbmQsIGlmIGFwcGxpY2FibGUsIFBhcnRzIDQgYW5kIDYuCisKKyBQQVJUIDI6IElOSVRJQUwgV09SSworCisgVGhlIEluaXRpYWwgV29yayBjb21wcmlzZXMgdGhlIGNvbXB1dGVyIHByb2dyYW0ocykgZGlzdHJpYnV0ZWQgYnkgdGhlIEluaXRpYWwgCitDb250cmlidXRvciBoYXZpbmcgdGhlIGZvbGxvd2luZyB0aXRsZShzKTogX19fTElCT0ZBIChPcGVuIEZpbmdlcnByaW50IEFyY2hpdGVjdHVyZSAKK0xpYnJhcnkgMS4wKV9fLgorCisgVGhlIGRhdGUgb24gd2hpY2ggdGhlIEluaXRpYWwgV29yayB3YXMgZmlyc3QgYXZhaWxhYmxlIHVuZGVyIHRoaXMgTGljZW5zZTogX19NYXJjaCAxMXRoLCAKKzIwMDZfX19fCisKKyBQQVJUIDM6IEdPVkVSTklORyBKVVJJU0RJQ1RJT04KKworIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLCB0aGUgR292ZXJuaW5nIEp1cmlzZGljdGlvbiBpcyBTdGF0ZSBvZiBDYWxpZm9ybmlhLCBVU0EuIAorCisKKworIFBBUlQgNDogVEhJUkQgUEFSVElFUworCisgRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UsICJUaGlyZCBQYXJ0eSIgaGFzIHRoZSBkZWZpbml0aW9uIHNldCBmb3J0aCBiZWxvdyBpbiB0aGUgCitPTkUgcGFyYWdyYXBoIHNlbGVjdGVkIGJ5IHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIGZyb20gcGFyYWdyYXBocyBBLCBCLCBDLCBEIGFuZCBFIAord2hlbiB0aGUgSW5pdGlhbCBXb3JrIGlzIGRpc3RyaWJ1dGVkIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgSW5pdGlhbCAKK0NvbnRyaWJ1dG9yLiBUbyBzZWxlY3Qgb25lIG9mIHRoZSBmb2xsb3dpbmcgcGFyYWdyYXBocywgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IgbXVzdCBwbGFjZSAKK2FuICJYIiBvciAieCIgaW4gdGhlIHNlbGVjdGlvbiBib3ggYWxvbmdzaWRlIHRoZSBvbmUgcmVzcGVjdGl2ZSBwYXJhZ3JhcGggc2VsZWN0ZWQuIAorU0VMRUNUSU9OIEJPWCAJUEFSQUdSQVBIIFsgXSAJQS4gIlRISVJEIFBBUlRZIiBtZWFucyBhbnkgdGhpcmQgcGFydHkuCisKKyBbWF0gCUIuICJUSElSRCBQQVJUWSIgbWVhbnMgYW55IHRoaXJkIHBhcnR5IGV4Y2VwdCBmb3IgYW55IG9mIHRoZSBmb2xsb3dpbmc6IChhKSBhIAord2hvbGx5IG93bmVkIHN1YnNpZGlhcnkgb2YgdGhlIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IgaW4gcXVlc3Rpb247IChiKSBhIGxlZ2FsIGVudGl0eSAodGhlIAorIlBBUkVOVCIpIHRoYXQgd2hvbGx5IG93bnMgdGhlIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IgaW4gcXVlc3Rpb247IG9yIChjKSBhIHdob2xseSAKK293bmVkIHN1YnNpZGlhcnkgb2YgdGhlIHdob2xseSBvd25lZCBzdWJzaWRpYXJ5IGluIChhKSBvciBvZiB0aGUgUGFyZW50IGluIChiKS4KKworIFsgXSAJQy4gIlRISVJEIFBBUlRZIiBtZWFucyBhbnkgdGhpcmQgcGFydHkgZXhjZXB0IGZvciBhbnkgb2YgdGhlIGZvbGxvd2luZzogKGEpIAorYW55IFBlcnNvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IG93bmluZyBhIG1ham9yaXR5IG9mIHRoZSB2b3RpbmcgaW50ZXJlc3QgaW4gdGhlIAorU3Vic2VxdWVudCBDb250cmlidXRvciBvciAoYikgYW55IFBlcnNvbiBpbiB3aGljaCB0aGUgU3Vic2VxdWVudCBDb250cmlidXRvciBkaXJlY3RseSAKK29yIGluZGlyZWN0bHkgb3ducyBhIG1ham9yaXR5IHZvdGluZyBpbnRlcmVzdC4KKworIFsgXSAJRC4gIlRISVJEIFBBUlRZIiBtZWFucyBhbnkgdGhpcmQgcGFydHkgZXhjZXB0IGZvciBhbnkgUGVyc29uIGRpcmVjdGx5IG9yIAoraW5kaXJlY3RseSBjb250cm9sbGVkIGJ5IHRoZSBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yLiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAKKyJjb250cm9sIiBzaGFsbCBtZWFuIHRoZSBwb3dlciB0byBkaXJlY3Qgb3IgY2F1c2UgdGhlIGRpcmVjdGlvbiBvZiwgdGhlIG1hbmFnZW1lbnQgYW5kIAorcG9saWNpZXMgb2Ygc3VjaCBQZXJzb24gd2hldGhlciB0aHJvdWdoIHRoZSBvd25lcnNoaXAgb2Ygdm90aW5nIGludGVyZXN0cywgYnkgY29udHJhY3QsIG9yIAorb3RoZXJ3aXNlLgorCisgWyBdIAlFLiAiVEhJUkQgUEFSVFkiIG1lYW5zIGFueSB0aGlyZCBwYXJ0eSBleGNlcHQgZm9yIGFueSBQZXJzb24gZGlyZWN0bHkgb3IgCitpbmRpcmVjdGx5IGNvbnRyb2xsaW5nLCBjb250cm9sbGVkIGJ5LCBvciB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIHRoZSBTdWJzZXF1ZW50IAorQ29udHJpYnV0b3IuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBzaGFsbCBtZWFuIHRoZSBwb3dlciB0byBkaXJlY3Qgb3IgCitjYXVzZSB0aGUgZGlyZWN0aW9uIG9mLCB0aGUgbWFuYWdlbWVudCBhbmQgcG9saWNpZXMgb2Ygc3VjaCBQZXJzb24gd2hldGhlciB0aHJvdWdoIHRoZSAKK293bmVyc2hpcCBvZiB2b3RpbmcgaW50ZXJlc3RzLCBieSBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLgorCisgVGhlIGRlZmF1bHQgZGVmaW5pdGlvbiBvZiAiVEhJUkQgUEFSVFkiIGlzIHRoZSBkZWZpbml0aW9uIHNldCBmb3J0aCBpbiBwYXJhZ3JhcGggQSwgaWYgCitOT05FIE9SIE1PUkUgVEhBTiBPTkUgb2YgcGFyYWdyYXBocyBBLCBCLCBDLCBEIG9yIEUgaW4gdGhpcyBQYXJ0IDQgYXJlIHNlbGVjdGVkIAorYnkgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IuCisKKyBQQVJUIDU6IE5PVElDRQorCisgVEhFIExJQ0VOU0VEIFdPUksgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRIRSBBREFQVElWRSAKK1BVQkxJQyBMSUNFTlNFICgiTElDRU5TRSIpIEFTIEZJUlNUIENPTVBMRVRFRCBCWTogTXVzaWNJUCBDb3Jwb3JhdGlvbiwgCitEb2luZyBCdXNpbmVzcyBBcyBNdXNpY0lQLiBBTlkgVVNFLCBQVUJMSUMgRElTUExBWSwgUFVCTElDIAorUEVSRk9STUFOQ0UsIFJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YsIE9SIFBSRVBBUkFUSU9OIAorT0YgREVSSVZBVElWRSBXT1JLUyBCQVNFRCBPTiwgVEhFIExJQ0VOU0VEIFdPUksgQ09OU1RJVFVURVMgCitSRUNJUElFTlQnUyBBQ0NFUFRBTkNFIE9GIFRISVMgTElDRU5TRSBBTkQgSVRTIFRFUk1TLCBXSEVUSEVSIE9SIAorTk9UIFNVQ0ggUkVDSVBJRU5UIFJFQURTIFRIRSBURVJNUyBPRiBUSEUgTElDRU5TRS4gIkxJQ0VOU0VEIAorV09SSyIgQU5EICJSRUNJUElFTlQiIEFSRSBERUZJTkVEIElOIFRIRSBMSUNFTlNFLiBBIENPUFkgT0YgVEhFIAorTElDRU5TRSBJUyBMT0NBVEVEIElOIFRIRSBURVhUIEZJTEUgRU5USVRMRUQgIkxJQ0VOU0UuVFhUIiAKK0FDQ09NUEFOWUlORyBUSEUgQ09OVEVOVFMgT0YgVEhJUyBGSUxFLiBJRiBBIENPUFkgT0YgVEhFIExJQ0VOU0UgCitET0VTIE5PVCBBQ0NPTVBBTlkgVEhJUyBGSUxFLCBBIENPUFkgT0YgVEhFIExJQ0VOU0UgTUFZIEFMU08gQkUgCitPQlRBSU5FRCBBVCBUSEUgRk9MTE9XSU5HIFdFQiBTSVRFOiAgaHR0cDovL3d3dy5tdXNpY2Rucy5vcmcvCisKKyBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUIAorV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIAorbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyBQQVJUIDY6IFBBVEVOVCBMSUNFTlNJTkcgVEVSTVMKKworIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLCBwYXJhZ3JhcGhzIEEsIEIsIEMsIEQgYW5kIEUgb2YgdGhpcyBQYXJ0IDYgb2YgRXhoaWJpdCBBIAorYXJlIG9ubHkgaW5jb3Jwb3JhdGVkIGFuZCBmb3JtIHBhcnQgb2YgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlIGlmIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yIAorcGxhY2VzIGFuICJYIiBvciAieCIgaW4gdGhlIHNlbGVjdGlvbiBib3ggYWxvbmdzaWRlIHRoZSBZRVMgYW5zd2VyIHRvIHRoZSBxdWVzdGlvbiAKK2ltbWVkaWF0ZWx5IGJlbG93LgorCisgSXMgdGhpcyBhIFBhdGVudHMtSW5jbHVkZWQgTGljZW5zZSBwdXJzdWFudCB0byBTZWN0aW9uIDIuMiBvZiB0aGUgTGljZW5zZT8KKworIFlFUyAJWyBdIE5PIAlbWF0KKworIEJ5IGRlZmF1bHQsIGlmIFlFUyBpcyBub3Qgc2VsZWN0ZWQgYnkgdGhlIEluaXRpYWwgQ29udHJpYnV0b3IsIHRoZSBhbnN3ZXIgaXMgTk8uCisKKyBBLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoZSBwYXJhZ3JhcGhzIGluIHRoaXMgUGFydCA2IG9mIEV4aGliaXQgQSwgIkxJQ0VOU0FCTEUiIAorbWVhbnMgaGF2aW5nIHRoZSByaWdodCB0byBncmFudCwgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlLCB3aGV0aGVyIGF0IHRoZSB0aW1lIG9mIAordGhlIGluaXRpYWwgZ3JhbnQgb3Igc3Vic2VxdWVudGx5IGFjcXVpcmVkLCBhbnkgYW5kIGFsbCBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorCisgQi4gVGhlIEluaXRpYWwgQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBhbGwgUmVjaXBpZW50cyBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLQorZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcywgdW5kZXIgcGF0ZW50IGNsYWltKHMpIAorTGljZW5zYWJsZSBieSB0aGUgSW5pdGlhbCBDb250cmlidXRvciB0aGF0IGFyZSBvciB3b3VsZCBiZSBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcsIAorc2VsbGluZywgb2ZmZXJpbmcgZm9yIHNhbGUsIGhhdmluZyBtYWRlLCBpbXBvcnRpbmcsIGV4cG9ydGluZywgdHJhbnNmZXIgb3IgZGlzcG9zYWwgb2Ygc3VjaCAKK0luaXRpYWwgV29yayBvciBhbnkgcG9ydGlvbiB0aGVyZW9mLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZywgbm8gcGF0ZW50IGxpY2Vuc2UgaXMgCitncmFudGVkIHVuZGVyIHRoaXMgUGFyYWdyYXBoIEIgYnkgdGhlIEluaXRpYWwgQ29udHJpYnV0b3I6ICgxKSBmb3IgYW55IGNvZGUgdGhhdCB0aGUgSW5pdGlhbCAKK0NvbnRyaWJ1dG9yIGRlbGV0ZXMgZnJvbSB0aGUgSW5pdGlhbCBXb3JrIChvciBhbnkgcG9ydGlvbiB0aGVyZW9mKSBkaXN0cmlidXRlZCBieSB0aGUgCitJbml0aWFsIENvbnRyaWJ1dG9yIHByaW9yIHRvIHN1Y2ggZGlzdHJpYnV0aW9uOyAoMikgZm9yIGFueSBNb2RpZmljYXRpb25zIG1hZGUgdG8gdGhlIEluaXRpYWwgCitXb3JrIChvciBhbnkgcG9ydGlvbiB0aGVyZW9mKSBieSBhbnkgb3RoZXIgUGVyc29uOyBvciAoMykgc2VwYXJhdGUgZnJvbSB0aGUgSW5pdGlhbCBXb3JrIAorKG9yIHBvcnRpb25zIHRoZXJlb2YpIGRpc3RyaWJ1dGVkIG9yIG1hZGUgYXZhaWxhYmxlIGJ5IHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yLgorCisgQy4gRWZmZWN0aXZlIHVwb24gZGlzdHJpYnV0aW9uIGJ5IGEgU3Vic2VxdWVudCBDb250cmlidXRvciB0byBhIFRoaXJkIFBhcnR5IG9mIGFueSAKK01vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IFN1YnNlcXVlbnQgQ29udHJpYnV0b3IsIHN1Y2ggU3Vic2VxdWVudCBDb250cmlidXRvciBoZXJlYnkgCitncmFudHMgYWxsIFJlY2lwaWVudHMgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCAKK3BhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIHVuZGVyIHBhdGVudCBjbGFpbShzKSBMaWNlbnNhYmxlIGJ5IHN1Y2ggU3Vic2VxdWVudCAKK0NvbnRyaWJ1dG9yIHRoYXQgYXJlIG9yIHdvdWxkIGJlIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZywgc2VsbGluZywgb2ZmZXJpbmcgZm9yIHNhbGUsIAoraGF2aW5nIG1hZGUsIGltcG9ydGluZywgZXhwb3J0aW5nLCB0cmFuc2ZlciBvciBkaXNwb3NhbCBvZiBhbnkgc3VjaCBNb2RpZmljYXRpb25zIG1hZGUgCitieSB0aGF0IFN1YnNlcXVlbnQgQ29udHJpYnV0b3IgYWxvbmUgYW5kL29yIGluIGNvbWJpbmF0aW9uIHdpdGggaXRzIFN1YnNlcXVlbnQgV29yayAKKyhvciBwb3J0aW9ucyBvZiBzdWNoIGNvbWJpbmF0aW9uKSB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGltcG9ydCwgCitleHBvcnQsIHRyYW5zZmVyIGFuZCBvdGhlcndpc2UgZGlzcG9zZSBvZjoKKworICgxKSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKTsgYW5kCisKKyAoMikgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IFN1YnNlcXVlbnQgQ29udHJpYnV0b3Igd2l0aCBpdHMgCitTdWJzZXF1ZW50IFdvcmsgKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pOworCisgKGNvbGxlY3RpdmVseSBhbmQgaW4gZWFjaCBjYXNlLCB0aGUgIlNVQlNFUVVFTlQgQ09OVFJJQlVUT1IgVkVSU0lPTiIpLgorCisgTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsIG5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQgdW5kZXIgdGhpcyBQYXJhZ3JhcGggQyBieSAKK3N1Y2ggU3Vic2VxdWVudCBDb250cmlidXRvcjogKDEpIGZvciBhbnkgY29kZSB0aGF0IHN1Y2ggU3Vic2VxdWVudCBDb250cmlidXRvciBkZWxldGVzIAorZnJvbSB0aGUgU3Vic2VxdWVudCBDb250cmlidXRvciBWZXJzaW9uIChvciBhbnkgcG9ydGlvbiB0aGVyZW9mKSBkaXN0cmlidXRlZCBieSB0aGUgCitTdWJzZXF1ZW50IENvbnRyaWJ1dG9yIHByaW9yIHRvIHN1Y2ggZGlzdHJpYnV0aW9uOyAoMikgZm9yIGFueSBNb2RpZmljYXRpb25zIG1hZGUgdG8gdGhlIAorU3Vic2VxdWVudCBDb250cmlidXRvciBWZXJzaW9uIChvciBhbnkgcG9ydGlvbiB0aGVyZW9mKSBieSBhbnkgb3RoZXIgUGVyc29uOyBvciAoMykgCitzZXBhcmF0ZSBmcm9tIHRoZSBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIHRoZXJlb2YpIGRpc3RyaWJ1dGVkIG9yIAorbWFkZSBhdmFpbGFibGUgYnkgdGhlIFN1YnNlcXVlbnQgQ29udHJpYnV0b3IuCisKKyBELiBFZmZlY3RpdmUgdXBvbiBkaXN0cmlidXRpb24gb2YgYW55IExpY2Vuc2VkIFdvcmsgYnkgYSBEaXN0cmlidXRvciB0byBhIFRoaXJkIFBhcnR5LCAKK3N1Y2ggRGlzdHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBhbGwgUmVjaXBpZW50cyBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSAKK2xpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcywgdW5kZXIgcGF0ZW50IGNsYWltKHMpIAorTGljZW5zYWJsZSBieSBzdWNoIERpc3RyaWJ1dG9yIHRoYXQgYXJlIG9yIHdvdWxkIGJlIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZywgCitzZWxsaW5nLCBvZmZlcmluZyBmb3Igc2FsZSwgaGF2aW5nIG1hZGUsIGltcG9ydGluZywgZXhwb3J0aW5nLCB0cmFuc2ZlciBvciBkaXNwb3NhbCBvZiBhbnkgCitzdWNoIExpY2Vuc2VkIFdvcmsgZGlzdHJpYnV0ZWQgYnkgc3VjaCBEaXN0cmlidXRvciwgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgCitoYXZlIG1hZGUsIGltcG9ydCwgZXhwb3J0LCB0cmFuc2ZlciBhbmQgb3RoZXJ3aXNlIGRpc3Bvc2Ugb2Ygc3VjaCBMaWNlbnNlZCBXb3JrIG9yIAorcG9ydGlvbnMgdGhlcmVvZiAoY29sbGVjdGl2ZWx5IGFuZCBpbiBlYWNoIGNhc2UsIHRoZSAiRElTVFJJQlVUT1IgVkVSU0lPTiIpLiAKK05vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkIHVuZGVyIHRoaXMgUGFyYWdyYXBoIEQgYnkgCitzdWNoIERpc3RyaWJ1dG9yOiAoMSkgZm9yIGFueSBjb2RlIHRoYXQgc3VjaCBEaXN0cmlidXRvciBkZWxldGVzIGZyb20gdGhlIERpc3RyaWJ1dG9yIAorVmVyc2lvbiAob3IgYW55IHBvcnRpb24gdGhlcmVvZikgZGlzdHJpYnV0ZWQgYnkgdGhlIERpc3RyaWJ1dG9yIHByaW9yIHRvIHN1Y2ggZGlzdHJpYnV0aW9uOyAKKygyKSBmb3IgYW55IE1vZGlmaWNhdGlvbnMgbWFkZSB0byB0aGUgRGlzdHJpYnV0b3IgVmVyc2lvbiAob3IgYW55IHBvcnRpb24gdGhlcmVvZikgYnkgYW55IAorb3RoZXIgUGVyc29uOyBvciAoMykgc2VwYXJhdGUgZnJvbSB0aGUgRGlzdHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgdGhlcmVvZikgZGlzdHJpYnV0ZWQgCitvciBtYWRlIGF2YWlsYWJsZSBieSB0aGUgRGlzdHJpYnV0b3IuCisKKyBFLiBJZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFub3RoZXIgUmVjaXBpZW50IChhICJVU0VSIikgd2l0aCAKK3Jlc3BlY3QgdG8gYSBwYXRlbnQgYXBwbGljYWJsZSB0byBhIGNvbXB1dGVyIHByb2dyYW0gb3Igc29mdHdhcmUgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIAorb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCwgYW5kIHdoZXRoZXIgb3Igbm90IGFueSBvZiB0aGUgcGF0ZW50IGNsYWltcyBhcmUgZGlyZWN0ZWQgdG8gYSAKK3N5c3RlbSwgbWV0aG9kLCBwcm9jZXNzLCBhcHBhcmF0dXMsIGRldmljZSwgcHJvZHVjdCwgYXJ0aWNsZSBvZiBtYW51ZmFjdHVyZSBvciBhbnkgb3RoZXIgCitmb3JtIG9mIHBhdGVudCBjbGFpbSksIHRoZW4gYW55IHBhdGVudCBvciBjb3B5cmlnaHQgbGljZW5zZSBncmFudGVkIGJ5IHRoYXQgVXNlciB0byBzdWNoIAorUmVjaXBpZW50IHVuZGVyIHRoaXMgTGljZW5zZSBvciBhbnkgb3RoZXIgY29weSBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlLiBUaGUgCit0ZXJtaW5hdGlvbiBzaGFsbCBiZSBlZmZlY3RpdmUgbmluZXR5ICg5MCkgZGF5cyBhZnRlciBub3RpY2Ugb2YgdGVybWluYXRpb24gZnJvbSBVc2VyIHRvIAorUmVjaXBpZW50LCB1bmxlc3MgdGhlIFJlY2lwaWVudCB3aXRoZHJhd3MgdGhlIHBhdGVudCBsaXRpZ2F0aW9uIGNsYWltIGJlZm9yZSB0aGUgZW5kIG9mIHRoZSAKK25pbmV0eSAoOTApIGRheSBwZXJpb2QuIFRvIGJlIGVmZmVjdGl2ZSwgYW55IHN1Y2ggbm90aWNlIG9mIGxpY2Vuc2UgdGVybWluYXRpb24gbXVzdCAKK2luY2x1ZGUgYSBzcGVjaWZpYyBsaXN0IG9mIGFwcGxpY2FibGUgcGF0ZW50cyBhbmQvb3IgYSBjb3B5IG9mIHRoZSBjb3B5cmlnaHRlZCB3b3JrIG9mIFVzZXIgCit0aGF0IFVzZXIgYWxsZWdlcyB3aWxsIGJlIGluZnJpbmdlZCBieSBSZWNpcGllbnQgdXBvbiBMaWNlbnNlIHRlcm1pbmF0aW9uLiBMaWNlbnNlIAordGVybWluYXRpb24gaXMgb25seSBlZmZlY3RpdmUgd2l0aCByZXNwZWN0IHRvIHBhdGVudHMgYW5kL29yIGNvcHlyaWdodHMgZm9yIHdoaWNoIHByb3BlciAKK25vdGljZSBoYXMgYmVlbiBnaXZlbi4KKworIFBBUlQgNzogU0FNUExFIFJFUVVJUkVNRU5UUyBGT1IgVEhFIERFU0NSSVBUSU9OIE9GIERJU1RSSUJVVEVEIAorTU9ESUZJQ0FUSU9OUworCisgRWFjaCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yIChpbmNsdWRpbmcgdGhlIEluaXRpYWwgQ29udHJpYnV0b3Igd2hlcmUgdGhlIEluaXRpYWwgCitDb250cmlidXRvciBxdWFsaWZpZXMgYXMgYSBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yKSBpcyBpbnZpdGVkIChidXQgbm90IHJlcXVpcmVkKSB0byBjYXVzZSAKK2VhY2ggU3Vic2VxdWVudCBXb3JrIGNyZWF0ZWQgb3IgY29udHJpYnV0ZWQgdG8gYnkgdGhhdCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yIHRvIAorY29udGFpbiBhIGZpbGUgZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgc3VjaCBTdWJzZXF1ZW50IENvbnRyaWJ1dG9yIG1hZGUgdG8gY3JlYXRlIHRoYXQgCitTdWJzZXF1ZW50IFdvcmsgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKy8vKioqRVhISUJJVCBBIEVORFMgSEVSRS4qKiovLyAKKworLS0gd2l0aCB0aGUgZm9sbG93aW5nIHN1cHBsZW1lbnQgLS0KKworU3VwcGxlbWVudGFsIFRleHQgZmlsZSBmb3IgT3BlbiBGaW5nZXJwcmludCBBcmNoaXRlY3R1cmUgbGlicmFyeSAoTElCT0ZBKSBkaXN0cmlidXRlZCAKK3VuZGVyIEFkYXB0aXZlIFB1YmxpYyBMaWNlbnNlIDEuMAorCitQZXIgU2VjdGlvbiAzLjEwLCBMSU1JVEVEIFJFQ09HTklUSU9OIE9GIElOSVRJQUwgQ09OVFJJQlVUT1IKKworKGEpIEFzIGEgbW9kZXN0IGF0dHJpYnV0aW9uIHRvIHRoZSBJbml0aWFsIENvbnRyaWJ1dG9yLCBpbiB0aGUgaG9wZSB0aGF0IGl0cyBwcm9tb3Rpb25hbCAKK3ZhbHVlIG1heSBoZWxwIGp1c3RpZnkgdGhlIHRpbWUsIG1vbmV5IGFuZCBlZmZvcnQgaW52ZXN0ZWQgaW4gd3JpdGluZyB0aGUgSW5pdGlhbCBXb3JrLCB0aGUgCitJbml0aWFsIENvbnRyaWJ1dG9yIG1heSBpbmNsdWRlIGluIFBhcnQgMiBvZiB0aGUgU3VwcGxlbWVudCBGaWxlIGEgcmVxdWlyZW1lbnQgdGhhdCBlYWNoIAordGltZSBhbiBleGVjdXRhYmxlIHByb2dyYW0gcmVzdWx0aW5nIGZyb20gdGhlIEluaXRpYWwgV29yayBvciBhbnkgU3Vic2VxdWVudCBXb3JrLCBvciBhIAorcHJvZ3JhbSBkZXBlbmRlbnQgdGhlcmVvbiwgaXMgbGF1bmNoZWQgb3IgcnVuLCBhIHByb21pbmVudCBkaXNwbGF5IG9mIHRoZSBJbml0aWFsIAorQ29udHJpYnV0b3IncyBhdHRyaWJ1dGlvbiBpbmZvcm1hdGlvbiBtdXN0IG9jY3VyICh0aGUgIkFUVFJJQlVUSU9OIAorSU5GT1JNQVRJT04iKS4gVGhlIEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uIG11c3QgYmUgaW5jbHVkZWQgYXQgdGhlIGJlZ2lubmluZyBvZiAKK2VhY2ggU291cmNlIENvZGUgZmlsZS4gRm9yIGdyZWF0ZXIgY2VydGFpbnR5LCB0aGUgSW5pdGlhbCBDb250cmlidXRvciBtYXkgc3BlY2lmeSBpbiB0aGUgCitTdXBwbGVtZW50IEZpbGUgdGhhdCB0aGUgYWJvdmUgYXR0cmlidXRpb24gcmVxdWlyZW1lbnQgb25seSBhcHBsaWVzIHRvIGFuIGV4ZWN1dGFibGUgCitwcm9ncmFtIHJlc3VsdGluZyBmcm9tIHRoZSBJbml0aWFsIFdvcmsgb3IgYW55IFN1YnNlcXVlbnQgV29yaywgYnV0IG5vdCBhIHByb2dyYW0gCitkZXBlbmRlbnQgdGhlcmVvbi4gVGhlIGludGVudCBpcyB0byBwcm92aWRlIGZvciByZWFzb25hYmx5IG1vZGVzdCBhdHRyaWJ1dGlvbiwgdGhlcmVmb3JlIAordGhlIEluaXRpYWwgQ29udHJpYnV0b3IgbWF5IG5vdCByZXF1aXJlIFJlY2lwaWVudHMgdG8gZGlzcGxheSwgYXQgYW55IHRpbWUsIG1vcmUgdGhhbiB0aGUgCitmb2xsb3dpbmcgQXR0cmlidXRpb24gSW5mb3JtYXRpb246IChhKSBhIGNvcHlyaWdodCBub3RpY2UgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIAorQ29udHJpYnV0b3I7IChiKSBhIHdvcmQgb3Igb25lIHBocmFzZSAobm90IGV4Y2VlZGluZyAxMCB3b3Jkcyk7IChjKSBvbmUgZGlnaXRhbCBpbWFnZSBvciAKK2dyYXBoaWMgcHJvdmlkZWQgd2l0aCB0aGUgSW5pdGlhbCBXb3JrOyBhbmQgKGQpIGEgVVJMIChjb2xsZWN0aXZlbHksIHRoZSAKKyJBVFRSSUJVVElPTiBMSU1JVFMiKS4KKworVGhlIGF0dHJpYnV0aW9uIHJlcXVlc3RlZCBieSBNdXNpY0lQIGZvciB0aGlzIHNvdXJjZSBjb2RlIGlzOgorKGMpIGEgZGlnaXRhbCBpbWFnZWNvbm5lY3RlZF9ieV9tdXNpY2lwLmdpZiAgb3IgY29ubmVjdGVkX2J5X211c2ljaXAucG5nIGluY2x1ZGVkIAord2l0aCB0aGlzIHNvdXJjZSBjb2RlLCBhbHNvIGF2YWlsYWJsZSBmcm9tIAoraHR0cDovL3d3dy5tdXNpY2lwLmNvbS9jb25uZWN0ZWRfYnlfbXVzaWNpcC5naWYgb3IgCitodHRwOi8vd3d3Lm11c2ljaXAuY29tL2Nvbm5lY3RlZF9ieV9tdXNpY2lwLnBuZworCisoZCkgYSBVUkwuICBUaGUgaW1hZ2Ugc2hvdWxkIGJlIGh5cGVybGlua2VkIHRvIGh0dHA6Ly93d3cubXVzaWNpcC5jb20vCisKK011c2ljSVAgcmVxdWVzdHMgdGhhdCB0aGUgaW1hZ2UgYmUgbGVnaWJseSBwcmVzZW50ZWQgYWdhaW5zdCBhIGNvbnRyYXN0aW5nIChsaWdodCkgCitiYWNrZ3JvdW5kIGNvbG9yIHN1Y2ggYXMgd2hpdGUgb3IgbGlnaHQgZ3JleS4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0FQU0wtMiBiL2xpY2Vuc2VzL0FQU0wtMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTgxYTYwCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvQVBTTC0yCkBAIC0wLDAgKzEsMzY3IEBACitBUFBMRSBQVUJMSUMgU09VUkNFIExJQ0VOU0UKK1ZlcnNpb24gMi4wIC0gQXVndXN0IDYsIDIwMDMKKworUGxlYXNlIHJlYWQgdGhpcyBMaWNlbnNlIGNhcmVmdWxseSBiZWZvcmUgZG93bmxvYWRpbmcgdGhpcyBzb2Z0d2FyZS4KK0J5IGRvd25sb2FkaW5nIG9yIHVzaW5nIHRoaXMgc29mdHdhcmUsIHlvdSBhcmUgYWdyZWVpbmcgdG8gYmUgYm91bmQgYnkKK3RoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIHlvdSBkbyBub3Qgb3IgY2Fubm90IGFncmVlIHRvIHRoZSB0ZXJtcworb2YgdGhpcyBMaWNlbnNlLCBwbGVhc2UgZG8gbm90IGRvd25sb2FkIG9yIHVzZSB0aGUgc29mdHdhcmUuCisKKzEuIEdlbmVyYWw7IERlZmluaXRpb25zLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlcgord29yayB3aGljaCBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbWFrZXMgcHVibGljbHkgYXZhaWxhYmxlIGFuZAord2hpY2ggY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IEFwcGxlIGlkZW50aWZ5aW5nIHN1Y2ggcHJvZ3JhbSBvcgord29yayBhcyAiT3JpZ2luYWwgQ29kZSIgYW5kIHN0YXRpbmcgdGhhdCBpdCBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZgordGhpcyBBcHBsZSBQdWJsaWMgU291cmNlIExpY2Vuc2UgdmVyc2lvbiAyLjAgKCJMaWNlbnNlIikuIEFzIHVzZWQgaW4KK3RoaXMgTGljZW5zZToKKworMS4xICJBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMiIG1lYW46IChhKSBpbiB0aGUgY2FzZSB3aGVyZSBBcHBsZSBpcwordGhlIGdyYW50b3Igb2YgcmlnaHRzLCAoaSkgY2xhaW1zIG9mIHBhdGVudHMgdGhhdCBhcmUgbm93IG9yIGhlcmVhZnRlcgorYWNxdWlyZWQsIG93bmVkIGJ5IG9yIGFzc2lnbmVkIHRvIEFwcGxlIGFuZCAoaWkpIHRoYXQgY292ZXIgc3ViamVjdAorbWF0dGVyIGNvbnRhaW5lZCBpbiB0aGUgT3JpZ2luYWwgQ29kZSwgYnV0IG9ubHkgdG8gdGhlIGV4dGVudAorbmVjZXNzYXJ5IHRvIHVzZSwgcmVwcm9kdWNlIGFuZC9vciBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBDb2RlCit3aXRob3V0IGluZnJpbmdlbWVudDsgYW5kIChiKSBpbiB0aGUgY2FzZSB3aGVyZSBZb3UgYXJlIHRoZSBncmFudG9yIG9mCityaWdodHMsIChpKSBjbGFpbXMgb2YgcGF0ZW50cyB0aGF0IGFyZSBub3cgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLAorb3duZWQgYnkgb3IgYXNzaWduZWQgdG8gWW91IGFuZCAoaWkpIHRoYXQgY292ZXIgc3ViamVjdCBtYXR0ZXIgaW4gWW91cgorTW9kaWZpY2F0aW9ucywgdGFrZW4gYWxvbmUgb3IgaW4gY29tYmluYXRpb24gd2l0aCBPcmlnaW5hbCBDb2RlLgorCisxLjIgIkNvbnRyaWJ1dG9yIiBtZWFucyBhbnkgcGVyc29uIG9yIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IKK2NvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCisxLjMgIkNvdmVyZWQgQ29kZSIgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUsIE1vZGlmaWNhdGlvbnMsIHRoZQorY29tYmluYXRpb24gb2YgT3JpZ2luYWwgQ29kZSBhbmQgYW55IE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhbnkKK3Jlc3BlY3RpdmUgcG9ydGlvbnMgdGhlcmVvZi4KKworMS40ICJFeHRlcm5hbGx5IERlcGxveSIgbWVhbnM6IChhKSB0byBzdWJsaWNlbnNlLCBkaXN0cmlidXRlIG9yCitvdGhlcndpc2UgbWFrZSBDb3ZlcmVkIENvZGUgYXZhaWxhYmxlLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCB0bworYW55b25lIG90aGVyIHRoYW4gWW91OyBhbmQvb3IgKGIpIHRvIHVzZSBDb3ZlcmVkIENvZGUsIGFsb25lIG9yIGFzCitwYXJ0IG9mIGEgTGFyZ2VyIFdvcmssIGluIGFueSB3YXkgdG8gcHJvdmlkZSBhIHNlcnZpY2UsIGluY2x1ZGluZyBidXQKK25vdCBsaW1pdGVkIHRvIGRlbGl2ZXJ5IG9mIGNvbnRlbnQsIHRocm91Z2ggZWxlY3Ryb25pYyBjb21tdW5pY2F0aW9uCit3aXRoIGEgY2xpZW50IG90aGVyIHRoYW4gWW91LgorCisxLjUgIkxhcmdlciBXb3JrIiBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yIHBvcnRpb25zCit0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworMS42ICJNb2RpZmljYXRpb25zIiBtZWFuIGFueSBhZGRpdGlvbiB0bywgZGVsZXRpb24gZnJvbSwgYW5kL29yIGNoYW5nZQordG8sIHRoZSBzdWJzdGFuY2UgYW5kL29yIHN0cnVjdHVyZSBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgYW55IHByZXZpb3VzCitNb2RpZmljYXRpb25zLCB0aGUgY29tYmluYXRpb24gb2YgT3JpZ2luYWwgQ29kZSBhbmQgYW55IHByZXZpb3VzCitNb2RpZmljYXRpb25zLCBhbmQvb3IgYW55IHJlc3BlY3RpdmUgcG9ydGlvbnMgdGhlcmVvZi4gV2hlbiBjb2RlIGlzCityZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywgYSBNb2RpZmljYXRpb24gaXM6IChhKSBhbnkgYWRkaXRpb24gdG8KK29yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIENvdmVyZWQgQ29kZTsKK2FuZC9vciAoYikgYW55IG5ldyBmaWxlIG9yIG90aGVyIHJlcHJlc2VudGF0aW9uIG9mIGNvbXB1dGVyIHByb2dyYW0KK3N0YXRlbWVudHMgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiBDb3ZlcmVkIENvZGUuCisKKzEuNyAiT3JpZ2luYWwgQ29kZSIgbWVhbnMgKGEpIHRoZSBTb3VyY2UgQ29kZSBvZiBhIHByb2dyYW0gb3Igb3RoZXIKK3dvcmsgYXMgb3JpZ2luYWxseSBtYWRlIGF2YWlsYWJsZSBieSBBcHBsZSB1bmRlciB0aGlzIExpY2Vuc2UsCitpbmNsdWRpbmcgdGhlIFNvdXJjZSBDb2RlIG9mIGFueSB1cGRhdGVzIG9yIHVwZ3JhZGVzIHRvIHN1Y2ggcHJvZ3JhbXMKK29yIHdvcmtzIG1hZGUgYXZhaWxhYmxlIGJ5IEFwcGxlIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHRoYXQgaGFzIGJlZW4KK2V4cHJlc3NseSBpZGVudGlmaWVkIGJ5IEFwcGxlIGFzIHN1Y2ggaW4gdGhlIGhlYWRlciBmaWxlKHMpIG9mIHN1Y2gKK3dvcms7IGFuZCAoYikgdGhlIG9iamVjdCBjb2RlIGNvbXBpbGVkIGZyb20gc3VjaCBTb3VyY2UgQ29kZSBhbmQKK29yaWdpbmFsbHkgbWFkZSBhdmFpbGFibGUgYnkgQXBwbGUgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisxLjggIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgaHVtYW4gcmVhZGFibGUgZm9ybSBvZiBhIHByb2dyYW0gb3Igb3RoZXIKK3dvcmsgdGhhdCBpcyBzdWl0YWJsZSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwKK21vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsCitzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIGV4ZWN1dGFibGUKKyhvYmplY3QgY29kZSkuCisKKzEuOSAiWW91IiBvciAiWW91ciIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nCityaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIG9yICJZb3VyIgoraW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIKK2NvbW1vbiBjb250cm9sIHdpdGgsIFlvdSwgd2hlcmUgImNvbnRyb2wiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdAorb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwKK3doZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQKKyg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZgorc3VjaCBlbnRpdHkuCisKKzIuIFBlcm1pdHRlZCBVc2VzOyBDb25kaXRpb25zICYgUmVzdHJpY3Rpb25zLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcworYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBBcHBsZSBoZXJlYnkgZ3JhbnRzIFlvdSwgZWZmZWN0aXZlIG9uCit0aGUgZGF0ZSBZb3UgYWNjZXB0IHRoaXMgTGljZW5zZSBhbmQgZG93bmxvYWQgdGhlIE9yaWdpbmFsIENvZGUsIGEKK3dvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCB0byB0aGUgZXh0ZW50IG9mCitBcHBsZSdzIEFwcGxpY2FibGUgUGF0ZW50IFJpZ2h0cyBhbmQgY29weXJpZ2h0cyBjb3ZlcmluZyB0aGUgT3JpZ2luYWwKK0NvZGUsIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisKKzIuMSBVbm1vZGlmaWVkIENvZGUuIFlvdSBtYXkgdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIHBlcmZvcm0sCitpbnRlcm5hbGx5IGRpc3RyaWJ1dGUgd2l0aGluIFlvdXIgb3JnYW5pemF0aW9uLCBhbmQgRXh0ZXJuYWxseSBEZXBsb3kKK3ZlcmJhdGltLCB1bm1vZGlmaWVkIGNvcGllcyBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgZm9yIGNvbW1lcmNpYWwgb3IKK25vbi1jb21tZXJjaWFsIHB1cnBvc2VzLCBwcm92aWRlZCB0aGF0IGluIGVhY2ggaW5zdGFuY2U6CisKKyhhKSBZb3UgbXVzdCByZXRhaW4gYW5kIHJlcHJvZHVjZSBpbiBhbGwgY29waWVzIG9mIE9yaWdpbmFsIENvZGUgdGhlCitjb3B5cmlnaHQgYW5kIG90aGVyIHByb3ByaWV0YXJ5IG5vdGljZXMgYW5kIGRpc2NsYWltZXJzIG9mIEFwcGxlIGFzCit0aGV5IGFwcGVhciBpbiB0aGUgT3JpZ2luYWwgQ29kZSwgYW5kIGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIGluIHRoZQorT3JpZ2luYWwgQ29kZSB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZTsgYW5kCisKKyhiKSBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIFNvdXJjZQorQ29kZSBvZiBDb3ZlcmVkIENvZGUgYW5kIGRvY3VtZW50YXRpb24gWW91IGRpc3RyaWJ1dGUgb3IgRXh0ZXJuYWxseQorRGVwbG95LCBhbmQgWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBzdWNoIFNvdXJjZSBDb2RlCit0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50cycgcmlnaHRzCitoZXJldW5kZXIsIGV4Y2VwdCBhcyBwZXJtaXR0ZWQgdW5kZXIgU2VjdGlvbiA2LgorCisyLjIgTW9kaWZpZWQgQ29kZS4gWW91IG1heSBtb2RpZnkgQ292ZXJlZCBDb2RlIGFuZCB1c2UsIHJlcHJvZHVjZSwKK2Rpc3BsYXksIHBlcmZvcm0sIGludGVybmFsbHkgZGlzdHJpYnV0ZSB3aXRoaW4gWW91ciBvcmdhbml6YXRpb24sIGFuZAorRXh0ZXJuYWxseSBEZXBsb3kgWW91ciBNb2RpZmljYXRpb25zIGFuZCBDb3ZlcmVkIENvZGUsIGZvciBjb21tZXJjaWFsCitvciBub24tY29tbWVyY2lhbCBwdXJwb3NlcywgcHJvdmlkZWQgdGhhdCBpbiBlYWNoIGluc3RhbmNlIFlvdSBhbHNvCittZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisoYSkgWW91IG11c3Qgc2F0aXNmeSBhbGwgdGhlIGNvbmRpdGlvbnMgb2YgU2VjdGlvbiAyLjEgd2l0aCByZXNwZWN0IHRvCit0aGUgU291cmNlIENvZGUgb2YgdGhlIENvdmVyZWQgQ29kZTsKKworKGIpIFlvdSBtdXN0IGR1cGxpY2F0ZSwgdG8gdGhlIGV4dGVudCBpdCBkb2VzIG5vdCBhbHJlYWR5IGV4aXN0LCB0aGUKK25vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZSBvZiBhbGwgWW91cgorTW9kaWZpY2F0aW9ucywgYW5kIGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZTsgYW5kCisKKyhjKSBJZiBZb3UgRXh0ZXJuYWxseSBEZXBsb3kgWW91ciBNb2RpZmljYXRpb25zLCBZb3UgbXVzdCBtYWtlCitTb3VyY2UgQ29kZSBvZiBhbGwgWW91ciBFeHRlcm5hbGx5IERlcGxveWVkIE1vZGlmaWNhdGlvbnMgZWl0aGVyCithdmFpbGFibGUgdG8gdGhvc2UgdG8gd2hvbSBZb3UgaGF2ZSBFeHRlcm5hbGx5IERlcGxveWVkIFlvdXIKK01vZGlmaWNhdGlvbnMsIG9yIHB1YmxpY2x5IGF2YWlsYWJsZS4gU291cmNlIENvZGUgb2YgWW91ciBFeHRlcm5hbGx5CitEZXBsb3llZCBNb2RpZmljYXRpb25zIG11c3QgYmUgcmVsZWFzZWQgdW5kZXIgdGhlIHRlcm1zIHNldCBmb3J0aCBpbgordGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgdGhlIGxpY2Vuc2UgZ3JhbnRzIHNldCBmb3J0aCBpbiBTZWN0aW9uIDMKK2JlbG93LCBmb3IgYXMgbG9uZyBhcyB5b3UgRXh0ZXJuYWxseSBEZXBsb3kgdGhlIENvdmVyZWQgQ29kZSBvciB0d2VsdmUKKygxMikgbW9udGhzIGZyb20gdGhlIGRhdGUgb2YgaW5pdGlhbCBFeHRlcm5hbCBEZXBsb3ltZW50LCB3aGljaGV2ZXIgaXMKK2xvbmdlci4gWW91IHNob3VsZCBwcmVmZXJhYmx5IGRpc3RyaWJ1dGUgdGhlIFNvdXJjZSBDb2RlIG9mIFlvdXIKK0V4dGVybmFsbHkgRGVwbG95ZWQgTW9kaWZpY2F0aW9ucyBlbGVjdHJvbmljYWxseSAoZS5nLiBkb3dubG9hZCBmcm9tIGEKK3dlYiBzaXRlKS4KKworMi4zIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLiBJbiBhZGRpdGlvbiwgaWYgWW91CitFeHRlcm5hbGx5IERlcGxveSBDb3ZlcmVkIENvZGUgKE9yaWdpbmFsIENvZGUgYW5kL29yIE1vZGlmaWNhdGlvbnMpIGluCitvYmplY3QgY29kZSwgZXhlY3V0YWJsZSBmb3JtIG9ubHksIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQKK25vdGljZSwgaW4gdGhlIGNvZGUgaXRzZWxmIGFzIHdlbGwgYXMgaW4gcmVsYXRlZCBkb2N1bWVudGF0aW9uLAorc3RhdGluZyB0aGF0IFNvdXJjZSBDb2RlIG9mIHRoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZQordGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggaW5mb3JtYXRpb24gb24gaG93IGFuZCB3aGVyZSB0byBvYnRhaW4gc3VjaAorU291cmNlIENvZGUuCisKKzIuNCBUaGlyZCBQYXJ0eSBSaWdodHMuIFlvdSBleHByZXNzbHkgYWNrbm93bGVkZ2UgYW5kIGFncmVlIHRoYXQKK2FsdGhvdWdoIEFwcGxlIGFuZCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gdGhlaXIKK3Jlc3BlY3RpdmUgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgQ29kZSBzZXQgZm9ydGggaGVyZWluLCBubworYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgQXBwbGUgb3IgYW55IENvbnRyaWJ1dG9yIHRoYXQgdGhlIENvdmVyZWQKK0NvZGUgZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKK3JpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBBcHBsZSBhbmQgZWFjaCBDb250cmlidXRvciBkaXNjbGFpbSBhbnkKK2xpYWJpbGl0eSB0byBZb3UgZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24KK2luZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYQorY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQgbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIFlvdQoraGVyZWJ5IGFzc3VtZSBzb2xlIHJlc3BvbnNpYmlsaXR5IHRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsCitwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLCBpZiBhIHRoaXJkIHBhcnR5IHBhdGVudAorbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBZb3UgdG8gZGlzdHJpYnV0ZSB0aGUgQ292ZXJlZCBDb2RlLCBpdCBpcworWW91ciByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUgZGlzdHJpYnV0aW5nIHRoZQorQ292ZXJlZCBDb2RlLgorCiszLiBZb3VyIEdyYW50cy4gSW4gY29uc2lkZXJhdGlvbiBvZiwgYW5kIGFzIGEgY29uZGl0aW9uIHRvLCB0aGUKK2xpY2Vuc2VzIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgWW91IGhlcmVieSBncmFudCB0byBhbnkKK3BlcnNvbiBvciBlbnRpdHkgcmVjZWl2aW5nIG9yIGRpc3RyaWJ1dGluZyBDb3ZlcmVkIENvZGUgdW5kZXIgdGhpcworTGljZW5zZSBhIG5vbi1leGNsdXNpdmUsIHJveWFsdHktZnJlZSwgcGVycGV0dWFsLCBpcnJldm9jYWJsZSBsaWNlbnNlLAordW5kZXIgWW91ciBBcHBsaWNhYmxlIFBhdGVudCBSaWdodHMgYW5kIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQorcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCkgb3duZWQgb3IgY29udHJvbGxlZCBieSBZb3UsIHRvIHVzZSwKK3JlcHJvZHVjZSwgZGlzcGxheSwgcGVyZm9ybSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBkaXN0cmlidXRlIGFuZAorRXh0ZXJuYWxseSBEZXBsb3kgWW91ciBNb2RpZmljYXRpb25zIG9mIHRoZSBzYW1lIHNjb3BlIGFuZCBleHRlbnQgYXMKK0FwcGxlJ3MgbGljZW5zZXMgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZCAyLjIgYWJvdmUuCisKKzQuIExhcmdlciBXb3Jrcy4gWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZAorQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kCitkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBlYWNoIHN1Y2ggaW5zdGFuY2UsCitZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IKK3RoZSBDb3ZlcmVkIENvZGUgb3IgYW55IHBvcnRpb24gdGhlcmVvZi4KKworNS4gTGltaXRhdGlvbnMgb24gUGF0ZW50IExpY2Vuc2UuIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluCitTZWN0aW9uIDIsIG5vIG90aGVyIHBhdGVudCByaWdodHMsIGV4cHJlc3Mgb3IgaW1wbGllZCwgYXJlIGdyYW50ZWQgYnkKK0FwcGxlIGhlcmVpbi4gTW9kaWZpY2F0aW9ucyBhbmQvb3IgTGFyZ2VyIFdvcmtzIG1heSByZXF1aXJlIGFkZGl0aW9uYWwKK3BhdGVudCBsaWNlbnNlcyBmcm9tIEFwcGxlIHdoaWNoIEFwcGxlIG1heSBncmFudCBpbiBpdHMgc29sZQorZGlzY3JldGlvbi4KKworNi4gQWRkaXRpb25hbCBUZXJtcy4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLAord2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIG90aGVyCityaWdodHMgY29uc2lzdGVudCB3aXRoIHRoZSBzY29wZSBvZiB0aGUgbGljZW5zZSBncmFudGVkIGhlcmVpbgorKCJBZGRpdGlvbmFsIFRlcm1zIikgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIENvZGUuCitIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmIGFuZCBhcyBZb3VyIHNvbGUKK3Jlc3BvbnNpYmlsaXR5LCBhbmQgbm90IG9uIGJlaGFsZiBvZiBBcHBsZSBvciBhbnkgQ29udHJpYnV0b3IuIFlvdQorbXVzdCBvYnRhaW4gdGhlIHJlY2lwaWVudCdzIGFncmVlbWVudCB0aGF0IGFueSBzdWNoIEFkZGl0aW9uYWwgVGVybXMKK2FyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5LCBkZWZlbmQKK2FuZCBob2xkIEFwcGxlIGFuZCBldmVyeSBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eQoraW5jdXJyZWQgYnkgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QgQXBwbGUgb3Igc3VjaCBDb250cmlidXRvciBieQorcmVhc29uIG9mIGFueSBzdWNoIEFkZGl0aW9uYWwgVGVybXMuCisKKzcuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLiBBcHBsZSBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcKK3ZlcnNpb25zIG9mIHRoaXMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4KK2EgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIE9uY2UgT3JpZ2luYWwgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQKK3VuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSwgWW91IG1heSBjb250aW51ZSB0byB1c2UgaXQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2gKK09yaWdpbmFsIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhpcworTGljZW5zZSBwdWJsaXNoZWQgYnkgQXBwbGUuIE5vIG9uZSBvdGhlciB0aGFuIEFwcGxlIGhhcyB0aGUgcmlnaHQgdG8KK21vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIENvZGUgY3JlYXRlZCB1bmRlciB0aGlzCitMaWNlbnNlLgorCis4LiBOTyBXQVJSQU5UWSBPUiBTVVBQT1JULiBUaGUgQ292ZXJlZCBDb2RlIG1heSBjb250YWluIGluIHdob2xlIG9yIGluCitwYXJ0IHByZS1yZWxlYXNlLCB1bnRlc3RlZCwgb3Igbm90IGZ1bGx5IHRlc3RlZCB3b3Jrcy4gVGhlIENvdmVyZWQKK0NvZGUgbWF5IGNvbnRhaW4gZXJyb3JzIHRoYXQgY291bGQgY2F1c2UgZmFpbHVyZXMgb3IgbG9zcyBvZiBkYXRhLCBhbmQKK21heSBiZSBpbmNvbXBsZXRlIG9yIGNvbnRhaW4gaW5hY2N1cmFjaWVzLiBZb3UgZXhwcmVzc2x5IGFja25vd2xlZGdlCithbmQgYWdyZWUgdGhhdCB1c2Ugb2YgdGhlIENvdmVyZWQgQ29kZSwgb3IgYW55IHBvcnRpb24gdGhlcmVvZiwgaXMgYXQKK1lvdXIgc29sZSBhbmQgZW50aXJlIHJpc2suIFRIRSBDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQKK1dJVEhPVVQgV0FSUkFOVFksIFVQR1JBREVTIE9SIFNVUFBPUlQgT0YgQU5ZIEtJTkQgQU5EIEFQUExFIEFORAorQVBQTEUnUyBMSUNFTlNPUihTKSAoQ09MTEVDVElWRUxZIFJFRkVSUkVEIFRPIEFTICJBUFBMRSIgRk9SIFRIRQorUFVSUE9TRVMgT0YgU0VDVElPTlMgOCBBTkQgOSkgQU5EIEFMTCBDT05UUklCVVRPUlMgRVhQUkVTU0xZIERJU0NMQUlNCitBTEwgV0FSUkFOVElFUyBBTkQvT1IgQ09ORElUSU9OUywgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVAorTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EL09SIENPTkRJVElPTlMgT0YKK01FUkNIQU5UQUJJTElUWSwgT0YgU0FUSVNGQUNUT1JZIFFVQUxJVFksIE9GIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorUFVSUE9TRSwgT0YgQUNDVVJBQ1ksIE9GIFFVSUVUIEVOSk9ZTUVOVCwgQU5EIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRAorUEFSVFkgUklHSFRTLiBBUFBMRSBBTkQgRUFDSCBDT05UUklCVVRPUiBET0VTIE5PVCBXQVJSQU5UIEFHQUlOU1QKK0lOVEVSRkVSRU5DRSBXSVRIIFlPVVIgRU5KT1lNRU5UIE9GIFRIRSBDT1ZFUkVEIENPREUsIFRIQVQgVEhFCitGVU5DVElPTlMgQ09OVEFJTkVEIElOIFRIRSBDT1ZFUkVEIENPREUgV0lMTCBNRUVUIFlPVVIgUkVRVUlSRU1FTlRTLAorVEhBVCBUSEUgT1BFUkFUSU9OIE9GIFRIRSBDT1ZFUkVEIENPREUgV0lMTCBCRSBVTklOVEVSUlVQVEVEIE9SCitFUlJPUi1GUkVFLCBPUiBUSEFUIERFRkVDVFMgSU4gVEhFIENPVkVSRUQgQ09ERSBXSUxMIEJFIENPUlJFQ1RFRC4gTk8KK09SQUwgT1IgV1JJVFRFTiBJTkZPUk1BVElPTiBPUiBBRFZJQ0UgR0lWRU4gQlkgQVBQTEUsIEFOIEFQUExFCitBVVRIT1JJWkVEIFJFUFJFU0VOVEFUSVZFIE9SIEFOWSBDT05UUklCVVRPUiBTSEFMTCBDUkVBVEUgQSBXQVJSQU5UWS4KK1lvdSBhY2tub3dsZWRnZSB0aGF0IHRoZSBDb3ZlcmVkIENvZGUgaXMgbm90IGludGVuZGVkIGZvciB1c2UgaW4gdGhlCitvcGVyYXRpb24gb2YgbnVjbGVhciBmYWNpbGl0aWVzLCBhaXJjcmFmdCBuYXZpZ2F0aW9uLCBjb21tdW5pY2F0aW9uCitzeXN0ZW1zLCBvciBhaXIgdHJhZmZpYyBjb250cm9sIG1hY2hpbmVzIGluIHdoaWNoIGNhc2UgdGhlIGZhaWx1cmUgb2YKK3RoZSBDb3ZlcmVkIENvZGUgY291bGQgbGVhZCB0byBkZWF0aCwgcGVyc29uYWwgaW5qdXJ5LCBvciBzZXZlcmUKK3BoeXNpY2FsIG9yIGVudmlyb25tZW50YWwgZGFtYWdlLgorCis5LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS4gVE8gVEhFIEVYVEVOVCBOT1QgUFJPSElCSVRFRCBCWSBMQVcsIElOIE5PCitFVkVOVCBTSEFMTCBBUFBMRSBPUiBBTlkgQ09OVFJJQlVUT1IgQkUgTElBQkxFIEZPUiBBTlkgSU5DSURFTlRBTCwKK1NQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBPUiBSRUxBVElORworVE8gVEhJUyBMSUNFTlNFIE9SIFlPVVIgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIENPVkVSRUQgQ09ERSwgT1IKK0FOWSBQT1JUSU9OIFRIRVJFT0YsIFdIRVRIRVIgVU5ERVIgQSBUSEVPUlkgT0YgQ09OVFJBQ1QsIFdBUlJBTlRZLAorVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBQUk9EVUNUUyBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLCBFVkVOIElGCitBUFBMRSBPUiBTVUNIIENPTlRSSUJVVE9SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKK0RBTUFHRVMgQU5EIE5PVFdJVEhTVEFORElORyBUSEUgRkFJTFVSRSBPRiBFU1NFTlRJQUwgUFVSUE9TRSBPRiBBTlkKK1JFTUVEWS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgT0YKK0lOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSElTIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWQorVE8gWU9VLiBJbiBubyBldmVudCBzaGFsbCBBcHBsZSdzIHRvdGFsIGxpYWJpbGl0eSB0byBZb3UgZm9yIGFsbAorZGFtYWdlcyAob3RoZXIgdGhhbiBhcyBtYXkgYmUgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcpIHVuZGVyIHRoaXMKK0xpY2Vuc2UgZXhjZWVkIHRoZSBhbW91bnQgb2YgZmlmdHkgZG9sbGFycyAoJDUwLjAwKS4KKworMTAuIFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBhbnkgcmlnaHRzIHRvIHVzZSB0aGUKK3RyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZXMgIkFwcGxlIiwgIkFwcGxlIENvbXB1dGVyIiwgIk1hYyIsICJNYWMgT1MiLAorIlF1aWNrVGltZSIsICJRdWlja1RpbWUgU3RyZWFtaW5nIFNlcnZlciIgb3IgYW55IG90aGVyIHRyYWRlbWFya3MsCitzZXJ2aWNlIG1hcmtzLCBsb2dvcyBvciB0cmFkZSBuYW1lcyBiZWxvbmdpbmcgdG8gQXBwbGUgKGNvbGxlY3RpdmVseQorIkFwcGxlIE1hcmtzIikgb3IgdG8gYW55IHRyYWRlbWFyaywgc2VydmljZSBtYXJrLCBsb2dvIG9yIHRyYWRlIG5hbWUKK2JlbG9uZ2luZyB0byBhbnkgQ29udHJpYnV0b3IuIFlvdSBhZ3JlZSBub3QgdG8gdXNlIGFueSBBcHBsZSBNYXJrcyBpbgorb3IgYXMgcGFydCBvZiB0aGUgbmFtZSBvZiBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlIE9yaWdpbmFsIENvZGUgb3IKK3RvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlIE9yaWdpbmFsIENvZGUgb3RoZXIKK3RoYW4gYXMgZXhwcmVzc2x5IHBlcm1pdHRlZCBieSBhbmQgaW4gc3RyaWN0IGNvbXBsaWFuY2UgYXQgYWxsIHRpbWVzCit3aXRoIEFwcGxlJ3MgdGhpcmQgcGFydHkgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMgd2hpY2ggYXJlIHBvc3RlZAorYXQgaHR0cDovL3d3dy5hcHBsZS5jb20vbGVnYWwvZ3VpZGVsaW5lc2ZvcjNyZHBhcnRpZXMuaHRtbC4KKworMTEuIE93bmVyc2hpcC4gU3ViamVjdCB0byB0aGUgbGljZW5zZXMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UsCitlYWNoIENvbnRyaWJ1dG9yIHJldGFpbnMgYWxsIHJpZ2h0cywgdGl0bGUgYW5kIGludGVyZXN0IGluIGFuZCB0byBhbnkKK01vZGlmaWNhdGlvbnMgbWFkZSBieSBzdWNoIENvbnRyaWJ1dG9yLiBBcHBsZSByZXRhaW5zIGFsbCByaWdodHMsCit0aXRsZSBhbmQgaW50ZXJlc3QgaW4gYW5kIHRvIHRoZSBPcmlnaW5hbCBDb2RlIGFuZCBhbnkgTW9kaWZpY2F0aW9ucworbWFkZSBieSBvciBvbiBiZWhhbGYgb2YgQXBwbGUgKCJBcHBsZSBNb2RpZmljYXRpb25zIiksIGFuZCBzdWNoIEFwcGxlCitNb2RpZmljYXRpb25zIHdpbGwgbm90IGJlIGF1dG9tYXRpY2FsbHkgc3ViamVjdCB0byB0aGlzIExpY2Vuc2UuIEFwcGxlCittYXksIGF0IGl0cyBzb2xlIGRpc2NyZXRpb24sIGNob29zZSB0byBsaWNlbnNlIHN1Y2ggQXBwbGUKK01vZGlmaWNhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLCBvciBvbiBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aG9zZQorY29udGFpbmVkIGluIHRoaXMgTGljZW5zZSBvciBtYXkgY2hvb3NlIG5vdCB0byBsaWNlbnNlIHRoZW0gYXQgYWxsLgorCisxMi4gVGVybWluYXRpb24uCisKKzEyLjEgVGVybWluYXRpb24uIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsCit0ZXJtaW5hdGU6CisKKyhhKSBhdXRvbWF0aWNhbGx5IHdpdGhvdXQgbm90aWNlIGZyb20gQXBwbGUgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGgKK2FueSB0ZXJtKHMpIG9mIHRoaXMgTGljZW5zZSBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMAorZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIGJyZWFjaDsKKworKGIpIGltbWVkaWF0ZWx5IGluIHRoZSBldmVudCBvZiB0aGUgY2lyY3Vtc3RhbmNlcyBkZXNjcmliZWQgaW4gU2VjdGlvbgorMTMuNShiKTsgb3IKKworKGMpIGF1dG9tYXRpY2FsbHkgd2l0aG91dCBub3RpY2UgZnJvbSBBcHBsZSBpZiBZb3UsIGF0IGFueSB0aW1lIGR1cmluZwordGhlIHRlcm0gb2YgdGhpcyBMaWNlbnNlLCBjb21tZW5jZSBhbiBhY3Rpb24gZm9yIHBhdGVudCBpbmZyaW5nZW1lbnQKK2FnYWluc3QgQXBwbGU7IHByb3ZpZGVkIHRoYXQgQXBwbGUgZGlkIG5vdCBmaXJzdCBjb21tZW5jZQorYW4gYWN0aW9uIGZvciBwYXRlbnQgaW5mcmluZ2VtZW50IGFnYWluc3QgWW91IGluIHRoYXQgaW5zdGFuY2UuCisKKzEyLjIgRWZmZWN0IG9mIFRlcm1pbmF0aW9uLiBVcG9uIHRlcm1pbmF0aW9uLCBZb3UgYWdyZWUgdG8gaW1tZWRpYXRlbHkKK3N0b3AgYW55IGZ1cnRoZXIgdXNlLCByZXByb2R1Y3Rpb24sIG1vZGlmaWNhdGlvbiwgc3VibGljZW5zaW5nIGFuZAorZGlzdHJpYnV0aW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUuIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlCit3aGljaCBoYXZlIGJlZW4gcHJvcGVybHkgZ3JhbnRlZCBwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlCithbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsCitzaG91bGQgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbAorc3Vydml2ZSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBTZWN0aW9ucyAzLCA1LCA4LCA5LCAxMCwgMTEsCisxMi4yIGFuZCAxMy4gTm8gcGFydHkgd2lsbCBiZSBsaWFibGUgdG8gYW55IG90aGVyIGZvciBjb21wZW5zYXRpb24sCitpbmRlbW5pdHkgb3IgZGFtYWdlcyBvZiBhbnkgc29ydCBzb2xlbHkgYXMgYSByZXN1bHQgb2YgdGVybWluYXRpbmcKK3RoaXMgTGljZW5zZSBpbiBhY2NvcmRhbmNlIHdpdGggaXRzIHRlcm1zLCBhbmQgdGVybWluYXRpb24gb2YgdGhpcworTGljZW5zZSB3aWxsIGJlIHdpdGhvdXQgcHJlanVkaWNlIHRvIGFueSBvdGhlciByaWdodCBvciByZW1lZHkgb2YKK2FueSBwYXJ0eS4KKworMTMuIE1pc2NlbGxhbmVvdXMuCisKKzEzLjEgR292ZXJubWVudCBFbmQgVXNlcnMuIFRoZSBDb3ZlcmVkIENvZGUgaXMgYSAiY29tbWVyY2lhbCBpdGVtIiBhcworZGVmaW5lZCBpbiBGQVIgMi4xMDEuIEdvdmVybm1lbnQgc29mdHdhcmUgYW5kIHRlY2huaWNhbCBkYXRhIHJpZ2h0cyBpbgordGhlIENvdmVyZWQgQ29kZSBpbmNsdWRlIG9ubHkgdGhvc2UgcmlnaHRzIGN1c3RvbWFyaWx5IHByb3ZpZGVkIHRvIHRoZQorcHVibGljIGFzIGRlZmluZWQgaW4gdGhpcyBMaWNlbnNlLiBUaGlzIGN1c3RvbWFyeSBjb21tZXJjaWFsIGxpY2Vuc2UKK2luIHRlY2huaWNhbCBkYXRhIGFuZCBzb2Z0d2FyZSBpcyBwcm92aWRlZCBpbiBhY2NvcmRhbmNlIHdpdGggRkFSCisxMi4yMTEgKFRlY2huaWNhbCBEYXRhKSBhbmQgMTIuMjEyIChDb21wdXRlciBTb2Z0d2FyZSkgYW5kLCBmb3IKK0RlcGFydG1lbnQgb2YgRGVmZW5zZSBwdXJjaGFzZXMsIERGQVIgMjUyLjIyNy03MDE1IChUZWNobmljYWwgRGF0YSAtLQorQ29tbWVyY2lhbCBJdGVtcykgYW5kIDIyNy43MjAyLTMgKFJpZ2h0cyBpbiBDb21tZXJjaWFsIENvbXB1dGVyCitTb2Z0d2FyZSBvciBDb21wdXRlciBTb2Z0d2FyZSBEb2N1bWVudGF0aW9uKS4gQWNjb3JkaW5nbHksIGFsbCBVLlMuCitHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIENvdmVyZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIHNldAorZm9ydGggaGVyZWluLgorCisxMy4yIFJlbGF0aW9uc2hpcCBvZiBQYXJ0aWVzLiBUaGlzIExpY2Vuc2Ugd2lsbCBub3QgYmUgY29uc3RydWVkIGFzCitjcmVhdGluZyBhbiBhZ2VuY3ksIHBhcnRuZXJzaGlwLCBqb2ludCB2ZW50dXJlIG9yIGFueSBvdGhlciBmb3JtIG9mCitsZWdhbCBhc3NvY2lhdGlvbiBiZXR3ZWVuIG9yIGFtb25nIFlvdSwgQXBwbGUgb3IgYW55IENvbnRyaWJ1dG9yLCBhbmQKK1lvdSB3aWxsIG5vdCByZXByZXNlbnQgdG8gdGhlIGNvbnRyYXJ5LCB3aGV0aGVyIGV4cHJlc3NseSwgYnkKK2ltcGxpY2F0aW9uLCBhcHBlYXJhbmNlIG9yIG90aGVyd2lzZS4KKworMTMuMyBJbmRlcGVuZGVudCBEZXZlbG9wbWVudC4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugd2lsbCBpbXBhaXIKK0FwcGxlJ3MgcmlnaHQgdG8gYWNxdWlyZSwgbGljZW5zZSwgZGV2ZWxvcCwgaGF2ZSBvdGhlcnMgZGV2ZWxvcCBmb3IKK2l0LCBtYXJrZXQgYW5kL29yIGRpc3RyaWJ1dGUgdGVjaG5vbG9neSBvciBwcm9kdWN0cyB0aGF0IHBlcmZvcm0gdGhlCitzYW1lIG9yIHNpbWlsYXIgZnVuY3Rpb25zIGFzLCBvciBvdGhlcndpc2UgY29tcGV0ZSB3aXRoLAorTW9kaWZpY2F0aW9ucywgTGFyZ2VyIFdvcmtzLCB0ZWNobm9sb2d5IG9yIHByb2R1Y3RzIHRoYXQgWW91IG1heQorZGV2ZWxvcCwgcHJvZHVjZSwgbWFya2V0IG9yIGRpc3RyaWJ1dGUuCisKKzEzLjQgV2FpdmVyOyBDb25zdHJ1Y3Rpb24uIEZhaWx1cmUgYnkgQXBwbGUgb3IgYW55IENvbnRyaWJ1dG9yIHRvCitlbmZvcmNlIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGJlIGRlZW1lZCBhIHdhaXZlciBvZgorZnV0dXJlIGVuZm9yY2VtZW50IG9mIHRoYXQgb3IgYW55IG90aGVyIHByb3Zpc2lvbi4gQW55IGxhdyBvcgorcmVndWxhdGlvbiB3aGljaCBwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlCitjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciB3aWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuCisKKzEzLjUgU2V2ZXJhYmlsaXR5LiAoYSkgSWYgZm9yIGFueSByZWFzb24gYSBjb3VydCBvZiBjb21wZXRlbnQKK2p1cmlzZGljdGlvbiBmaW5kcyBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgb3IgcG9ydGlvbiB0aGVyZW9mLAordG8gYmUgdW5lbmZvcmNlYWJsZSwgdGhhdCBwcm92aXNpb24gb2YgdGhlIExpY2Vuc2Ugd2lsbCBiZSBlbmZvcmNlZCB0bwordGhlIG1heGltdW0gZXh0ZW50IHBlcm1pc3NpYmxlIHNvIGFzIHRvIGVmZmVjdCB0aGUgZWNvbm9taWMgYmVuZWZpdHMKK2FuZCBpbnRlbnQgb2YgdGhlIHBhcnRpZXMsIGFuZCB0aGUgcmVtYWluZGVyIG9mIHRoaXMgTGljZW5zZSB3aWxsCitjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QuIChiKSBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZywKK2lmIGFwcGxpY2FibGUgbGF3IHByb2hpYml0cyBvciByZXN0cmljdHMgWW91IGZyb20gZnVsbHkgYW5kL29yCitzcGVjaWZpY2FsbHkgY29tcGx5aW5nIHdpdGggU2VjdGlvbnMgMiBhbmQvb3IgMyBvciBwcmV2ZW50cyB0aGUKK2VuZm9yY2VhYmlsaXR5IG9mIGVpdGhlciBvZiB0aG9zZSBTZWN0aW9ucywgdGhpcyBMaWNlbnNlIHdpbGwKK2ltbWVkaWF0ZWx5IHRlcm1pbmF0ZSBhbmQgWW91IG11c3QgaW1tZWRpYXRlbHkgZGlzY29udGludWUgYW55IHVzZSBvZgordGhlIENvdmVyZWQgQ29kZSBhbmQgZGVzdHJveSBhbGwgY29waWVzIG9mIGl0IHRoYXQgYXJlIGluIHlvdXIKK3Bvc3Nlc3Npb24gb3IgY29udHJvbC4KKworMTMuNiBEaXNwdXRlIFJlc29sdXRpb24uIEFueSBsaXRpZ2F0aW9uIG9yIG90aGVyIGRpc3B1dGUgcmVzb2x1dGlvbgorYmV0d2VlbiBZb3UgYW5kIEFwcGxlIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBzaGFsbCB0YWtlIHBsYWNlIGluIHRoZQorTm9ydGhlcm4gRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgYW5kIFlvdSBhbmQgQXBwbGUgaGVyZWJ5IGNvbnNlbnQgdG8KK3RoZSBwZXJzb25hbCBqdXJpc2RpY3Rpb24gb2YsIGFuZCB2ZW51ZSBpbiwgdGhlIHN0YXRlIGFuZCBmZWRlcmFsCitjb3VydHMgd2l0aGluIHRoYXQgRGlzdHJpY3Qgd2l0aCByZXNwZWN0IHRvIHRoaXMgTGljZW5zZS4gVGhlCithcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZQorSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4KKworMTMuNyBFbnRpcmUgQWdyZWVtZW50OyBHb3Zlcm5pbmcgTGF3LiBUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlCitlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBzdWJqZWN0CittYXR0ZXIgaGVyZW9mLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlCitVbml0ZWQgU3RhdGVzIGFuZCB0aGUgU3RhdGUgb2YgQ2FsaWZvcm5pYSwgZXhjZXB0IHRoYXQgYm9keSBvZgorQ2FsaWZvcm5pYSBsYXcgY29uY2VybmluZyBjb25mbGljdHMgb2YgbGF3LgorCitXaGVyZSBZb3UgYXJlIGxvY2F0ZWQgaW4gdGhlIHByb3ZpbmNlIG9mIFF1ZWJlYywgQ2FuYWRhLCB0aGUgZm9sbG93aW5nCitjbGF1c2UgYXBwbGllczogVGhlIHBhcnRpZXMgaGVyZWJ5IGNvbmZpcm0gdGhhdCB0aGV5IGhhdmUgcmVxdWVzdGVkCit0aGF0IHRoaXMgTGljZW5zZSBhbmQgYWxsIHJlbGF0ZWQgZG9jdW1lbnRzIGJlIGRyYWZ0ZWQgaW4gRW5nbGlzaC4gTGVzCitwYXJ0aWVzIG9udCBleGlnZSBxdWUgbGUgcHJlc2VudCBjb250cmF0IGV0IHRvdXMgbGVzIGRvY3VtZW50cworY29ubmV4ZXMgc29pZW50IHJlZGlnZXMgZW4gYW5nbGFpcy4KKworRVhISUJJVCBBLgorCisiUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk5LTIwMDMgQXBwbGUgQ29tcHV0ZXIsIEluYy4gQWxsIFJpZ2h0cworUmVzZXJ2ZWQuCisKK1RoaXMgZmlsZSBjb250YWlucyBPcmlnaW5hbCBDb2RlIGFuZC9vciBNb2RpZmljYXRpb25zIG9mIE9yaWdpbmFsIENvZGUKK2FzIGRlZmluZWQgaW4gYW5kIHRoYXQgYXJlIHN1YmplY3QgdG8gdGhlIEFwcGxlIFB1YmxpYyBTb3VyY2UgTGljZW5zZQorVmVyc2lvbiAyLjAgKHRoZSAnTGljZW5zZScpLiBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbgorY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBQbGVhc2Ugb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoraHR0cDovL3d3dy5vcGVuc291cmNlLmFwcGxlLmNvbS9hcHNsLyBhbmQgcmVhZCBpdCBiZWZvcmUgdXNpbmcgdGhpcworZmlsZS4KKworVGhlIE9yaWdpbmFsIENvZGUgYW5kIGFsbCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBhcmUKK2Rpc3RyaWJ1dGVkIG9uIGFuICdBUyBJUycgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUgorRVhQUkVTUyBPUiBJTVBMSUVELCBBTkQgQVBQTEUgSEVSRUJZIERJU0NMQUlNUyBBTEwgU1VDSCBXQVJSQU5USUVTLAorSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFFVSUVUIEVOSk9ZTUVOVCBPUiBOT04tSU5GUklOR0VNRU5ULgorUGxlYXNlIHNlZSB0aGUgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kCitsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4iCmRpZmYgLS1naXQgYS9saWNlbnNlcy9BU1JQIGIvbGljZW5zZXMvQVNSUApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjc1NTg5Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvQVNSUApAQCAtMCwwICsxLDM4IEBACitQeUNJRlJXIENPUFlSSUdIVCBBTkQgTElDRU5TSU5HIFNUQVRFTUVOVAorCisKKzEuVGhpcyBTb2Z0d2FyZSBjb3B5cmlnaHQgwqkgQXVzdHJhbGlhbiBTeW5jaHJvdHJvbiBSZXNlYXJjaCBQcm9ncmFtCitJbmMsICgiQVNSUCIpLgorCisyLlN1YmplY3QgdG8gZW5zdXJpbmcgdGhhdCB0aGlzIGNvcHlyaWdodCBub3RpY2UgYW5kIGxpY2VuY2UgdGVybXMKK2FwcGVhciBvbiBhbGwgY29waWVzIGFuZCBhbGwgbW9kaWZpZWQgdmVyc2lvbnMsIG9mIFB5Q0lGUlcgY29tcHV0ZXIKK2NvZGUgKCJ0aGlzIFNvZnR3YXJlIiksIGEgcm95YWx0eS1mcmVlIG5vbi1leGNsdXNpdmUgbGljZW5jZSBpcyBoZXJlYnkKK2dpdmVuIChpKSB0byB1c2UsIGNvcHkgYW5kIG1vZGlmeSB0aGlzIFNvZnR3YXJlIGluY2x1ZGluZyB0aGUgdXNlIG9mCityZWFzb25hYmxlIHBvcnRpb25zIG9mIGl0IGluIG90aGVyIHNvZnR3YXJlIGFuZCAoaWkpIHRvIHB1Ymxpc2gsCitidW5kbGUgYW5kIG90aGVyd2lzZSByZS1kaXN0cmlidXRlIHRoaXMgU29mdHdhcmUgb3IgbW9kaWZpZWQgdmVyc2lvbnMKK29mIHRoaXMgU29mdHdhcmUgdG8gdGhpcmQgcGFydGllcywgcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBub3RpY2UKK2FuZCB0ZXJtcyBhcmUgY2xlYXJseSBzaG93biBhcyBhcHBseWluZyB0byBhbGwgcGFydHMgb2Ygc29mdHdhcmUKK2Rlcml2ZWQgZnJvbSB0aGlzIFNvZnR3YXJlIG9uIGVhY2ggb2NjYXNpb24gaXQgaXMgcHVibGlzaGVkLCBidW5kbGVkCitvciByZS1kaXN0cmlidXRlZC4gIFlvdSBhcmUgZW5jb3VyYWdlZCB0byBjb21tdW5pY2F0ZSB1c2VmdWwKK21vZGlmaWNhdGlvbnMgdG8gQVNSUCBmb3IgaW5jbHVzaW9uIGZvciBmdXR1cmUgdmVyc2lvbnMuCisKKzMuTm8gcGFydCBvZiB0aGlzIFNvZnR3YXJlIG1heSBiZSBzb2xkIGFzIGEgc3RhbmRhbG9uZSBwYWNrYWdlLgorCis0LklmIGFueSBwYXJ0IG9mIHRoaXMgU29mdHdhcmUgaXMgYnVuZGxlZCB3aXRoIFNvZnR3YXJlIHRoYXQgaXMgc29sZCwKK2EgZnJlZSBjb3B5IG9mIHRoZSByZWxldmFudCB2ZXJzaW9uIG9mIHRoaXMgU29mdHdhcmUgbXVzdCBiZSBtYWRlCithdmFpbGFibGUgdGhyb3VnaCB0aGUgc2FtZSBkaXN0cmlidXRpb24gY2hhbm5lbCAoYmUgdGhhdCB3ZWIgc2VydmVyLAordGFwZSwgQ0Qgb3Igb3RoZXJ3aXNlKS4KKworNS5JdCBpcyBhIHRlcm0gb2YgZXhlcmNpc2Ugb2YgYW55IG9mIHRoZSBhYm92ZSByb3lhbHR5IGZyZWUgbGljZW5jZQorcmlnaHRzIHRoYXQgQVNSUCBnaXZlcyBubyB3YXJyYW50eSwgdW5kZXJ0YWtpbmcgb3IgcmVwcmVzZW50YXRpb24KK3doYXRzb2V2ZXIgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQgYnkgc3RhdHV0ZSwgY29tbW9uIGxhdywgY3VzdG9tCitvciBvdGhlcndpc2UsIGluIHJlc3BlY3Qgb2YgdGhpcyBTb2Z0d2FyZSBvciBhbnkgcGFydCBvZiBpdC4gIFdpdGhvdXQKK2xpbWl0aW5nIHRoZSBnZW5lcmFsaXR5IG9mIHRoZSBwcmVjZWRpbmcgc2VudGVuY2UsIEFTUlAgd2lsbCBub3QgYmUKK2xpYWJsZSBmb3IgYW55IGluanVyeSwgbG9zcyBvciBkYW1hZ2UgKGluY2x1ZGluZyBjb25zZXF1ZW50aWFsIGxvc3Mgb3IKK2RhbWFnZSkgb3Igb3RoZXIgbG9zcywgbG9zcyBvZiBwcm9maXRzLCBjb3N0cywgY2hhcmdlcyBvciBleHBlbnNlcworaG93ZXZlciBjYXVzZWQgd2hpY2ggbWF5IGJlIHN1ZmZlcmVkLCBpbmN1cnJlZCBvciBhcmlzZSBkaXJlY3RseSBvcgoraW5kaXJlY3RseSBpbiByZXNwZWN0IG9mIHRoaXMgU29mdHdhcmUuCisKKzYuIFRoaXMgc29mdHdhcmUgaXMgbm90IGxpY2Vuc2VkIGZvciB1c2UgaW4gbWVkaWNhbCBhcHBsaWNhdGlvbnMuCisKKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvQVRPSyBiL2xpY2Vuc2VzL0FUT0sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JhMzcyNgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0FUT0sKQEAgLTAsMCArMSwzIEBACitBVE9LIGZvciBMaW51eCBpcyBjb3B5cmlnaHRlZCBieSBKdXN0c3lzdGVtIENvcnBvcmF0aW9uLgorUGxlYXNlIHJlYWQgL29wdC9hdG9reDIvZG9jL2luZm9ybWF0aW9uL2xpY2Vuc2UuaHRtbCBiZWZvcmUKK3VzaW5nIGl0LgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvQVZBU1lTIGIvbGljZW5zZXMvQVZBU1lTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhYTQ3MGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9BVkFTWVMKQEAgLTAsMCArMSw3MSBAQAorCisgICAgICAgICAgICAgICAgICAgICAgICBBVkFTWVMgUFVCTElDIExJQ0VOU0UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIwMDgtMDQtMDEKKworICBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIGlkZW50aWZpZWQgYXMgc3VjaAorICBhdCB0aGUgcG9pbnQgb2YgZGlzdHJpYnV0aW9uIGFuZC9vciBpbiBhIHN1aXRhYmxlIGxvY2F0aW9uIGluIHRoZQorICBzb3VyY2VzIGZvciBhIHdvcmsgaW5jbHVkaW5nIGl0LCBmb3IgZXhhbXBsZSBpbiBhIFJFQURNRSBmaWxlLiAgU3VjaAorICBzb3VyY2VzIHNob3VsZCBpbmNsdWRlIGEgdmVyYmF0aW0gY29weSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgVGhlICJQcm9ncmFtIiwgYmVsb3csIHJlZmVycyB0byBhbnkgcHJvZ3JhbSBvciB3b3JrIGNvdmVyZWQgYnkgdGhpcworICBMaWNlbnNlOyBlYWNoICJMaWNlbnNlZSIgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCisgIFlvdSBtYXkgdXNlLCByZXByb2R1Y2UsIG1vZGlmeSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCisgIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBiZWxvdy4KKworCisgICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMS4gQ29weXJpZ2h0IG9mIHRoZSBQcm9ncmFtIGlzIHJlc2VydmVkIGJ5IEFWQVNZUyBDb3Jwb3JhdGlvbiBhbmQKKyAgICAgaXRzIExpY2Vuc29yKHMpLgorCisgIDIuIFlvdSBtYXkgZnJlZWx5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlCisgICAgIFByb2dyYW0gaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCByZWNpcGllbnRzIG9mIHN1Y2ggY29waWVzCisgICAgIGFyZSBnaXZlbiBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiAgVmVyYmF0aW0gY29waWVzIGFyZSBjb3ZlcmVkCisgICAgIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMy4gWW91IG1heSBtb2RpZnkgdGhlIFByb2dyYW0gYW5kIGZyZWVseSBkaXN0cmlidXRlIHlvdXIgbW9kaWZpZWQKKyAgICAgdmVyc2lvbihzKSwgcHJvdmlkZWQgdGhhdCB5b3UgZGlzdHJpYnV0ZSBpdCB1bmRlciB0aGUgdGVybXMgb2YKKyAgICAgdGhpcyBMaWNlbnNlLiAgUmVjaXBpZW50cyBvZiBhbnkgbW9kaWZpZWQgdmVyc2lvbihzKSBzaG91bGQgYmUKKyAgICAgcHJvdmlkZWQgd2l0aCBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDQuIFlvdSBzaGFsbCB0cmVhdCB0aG9zZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSB0aGF0IHdlcmUgcHJvdmlkZWQKKyAgICAgdG8geW91IGluIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgb25seSBhcyB0aGUgcHJvcHJpZXRhcnkKKyAgICAgYW5kIGNvbmZpZGVudGlhbCBpbmZvcm1hdGlvbiBvZiBBVkFTWVMgQ29ycG9yYXRpb24gYW5kIGl0cworICAgICBMaWNlbnNvcihzKS4KKworICA1LiBZb3UgbWF5IG5laXRoZXIgcmV2ZXJzZSBlbmdpbmVlciwgcmV2ZXJzZSBjb21waWxlLCByZXZlcnNlCisgICAgIGFzc2VtYmxlIG5vciBvdGhlcndpc2UgYXR0ZW1wdCB0byBhbmFseXNlIHRob3NlIHBhcnRzIG9mIHRoZQorICAgICBQcm9ncmFtIHRoYXQgd2VyZSBwcm92aWRlZCB0byB5b3UgaW4gZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZQorICAgICBvbmx5LiAgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiBBVkFTWVMgQ29ycG9yYXRpb24gYW5kCisgICAgIGl0cyBMaWNlbnNvcihzKSBnaXZlIHBlcm1pc3Npb24gdG8gcmV2ZXJzZSBlbmdpbmVlciB0aGUKKyAgICAgUHJvZ3JhbSBpbiB0aG9zZSBjYXNlcywgYW5kIG9ubHkgdGhvc2UgY2FzZXMsIHdoZXJlIHRoaXMgaXMKKyAgICAgcmVxdWlyZWQgYnkgdGhlIHRlcm1zIHN0aXB1bGF0ZWQgaW4gdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwKKyAgICAgUHVibGljIExpY2Vuc2Ugb3IgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBib3RoIGFzCisgICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mCisgICAgIHRoZSBmb3JtZXIgbGljZW5zZSwgdmVyc2lvbiAyLjEgb2YgdGhlIGxhdHRlciBsaWNlbnNlLCBvciAoYXQKKyAgICAgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgIDYuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PCisgICAgIFdBUlJBTlRZIEZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRQorICAgICBMQVcuICBFWENFUFQgV0hFTiBPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcsIFRIRSBDT1BZUklHSFQKKyAgICAgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVAorICAgICBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVAorICAgICBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5ECisgICAgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRQorICAgICBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUKKyAgICAgUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWQorICAgICBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDcuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4KKyAgICAgV1JJVElORyBXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWQorICAgICBNT0RJRlkgQU5EL09SIFJFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFCisgICAgIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwKKyAgICAgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUgorICAgICBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MKKyAgICAgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorICAgICBZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRICisgICAgIEFOWSBPVEhFUiBQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4KKyAgICAgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisgICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0FWTS1GQyBiL2xpY2Vuc2VzL0FWTS1GQwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzdmZWMxCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvQVZNLUZDCkBAIC0wLDAgKzEsNzggQEAKK2xpYi9mY2NsYXNzaWMtbGliLm8KK2xpYi9mY3BjaS1saWIubworbGliL2ZjcG5wLWxpYi5vCitsaWIvZmNwY21jaWEtbGliLm8KK2xpYi9mY3VzYi1saWIubyAKK2xpYi9mY3VzYjItbGliLm8KK2xpYi9meHVzYi1saWIubworbGliL2ZjZHNsLWxpYi5vCitsaWIvZmNkc2x1c2ItbGliLm8KK2xpYi9mY2RzbHVzYmEtbGliLm8KK2xpYi9mY2RzbHVzYjItbGliLm8KK2xpYi9mY2RzbHNsLWxpYi5vCitsaWIvZmNkc2wyLWxpYi5vCitsaWIvZmNkc2xzbHVzYi1saWIubworbGliL2RyaXZlci1saWIubworCitDb3B5cmlnaHQgKEMpIDIwMDIsIEFWTSBHbWJILiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitJLiBDb3B5cmlnaHQgTm90aWNlCitUaGlzIFNvZnR3YXJlIGlzIG9iamVjdCBvZiBhIGxpY2Vuc2UgYWdyZWVtZW50LiBZb3UgbWF5IG9ubHkgdXNlIHRoZSBTb2Z0d2FyZSAKK2luIGFjY29yZGFuY2Ugd2l0aCB0aGUgbGljZW5zZSBjb25kaXRpb25zIG1lbnRpb25lZCB0aGVyZWluLiBBcyBsaWNlbnNlZSB5b3UgCitiZWFyIGFsbCByaXNrIGluIHJlZ2FyZCB0byBoYXphcmRzIGFuZCBpbXBhaXJtZW50cyBvZiBxdWFsaXR5IHdoaWNoIG1heSBhcmlzZSAKK2luIGNvbm5lY3Rpb24gd2l0aCB0aGUgdXNlIG9mIHRoaXMgU29mdHdhcmUuCisKK1lvdSBtYXkgbm90IHRyYW5zbWl0LCByZXByb2R1Y2Ugb3IgYWx0ZXIgdGhpcyBTb2Z0d2FyZSBpbiB3aG9sZSBvciBpbiBwYXJ0LCAKK2luIGFueSBmb3JtLCBieSBhbnkgbWVhbnMsIG5vciBtYXkgeW91IHRyYW5zbGF0ZSB0aGUgU29mdHdhcmUgaW50byBhbnkgb3RoZXIgCituYXR1cmFsIG9yIGNvbXB1dGVyIGxhbmd1YWdlLiBUaGUgY3JlYXRpb24gb2YgYSBiYWNrdXAgY29weSBmb3IgcGVyc29uYWwgdXNlIAoraXMgZXhjZXB0ZWQuIFRoZSBpbmZvcm1hdGlvbiBoZXJlYnkgbWFkZSBhdmFpbGFibGUgdG8geW91IG1heSBiZSBjb21tdW5pY2F0ZWQgCit0byB0aGlyZCBwYXJ0aWVzIG9ubHkgd2l0aCB0aGUgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIEFWTSBHbWJILgorCitZb3UgbWF5IG9ubHkgbW9kaWZ5IHRoaXMgU29mdHdhcmUgZm9yIG93biBhbmQgcGVyc29uYWwgdXNlLiBZb3UgbWF5IG9ubHkgCityZXZlcnNlIGVuZ2luZWVyIHRoaXMgU29mdHdhcmUgZm9yIGRlYnVnZ2luZyBzdWNoIHBlcm1pdHRlZCBtb2RpZmljYXRpb25zLiAKKworVGhpcyBTb2Z0d2FyZSBoYXMgYmVlbiBwcm9kdWNlZCB3aXRoIGR1ZSBjYXJlIGFuZCBjaGVja2VkIGZvciBjb3JyZWN0bmVzcyBpbiAKK2FjY29yZGFuY2Ugd2l0aCBhdmFpbGFibGUgdGVjaG5vbG9neS4gVGhlIGluZm9ybWF0aW9uIGluIHRoaXMgU29mdHdhcmUgaXMgCitzdWJqZWN0IHRvIGNoYW5nZSB3aXRob3V0IG5vdGljZSBmb3IgdGhlIHB1cnBvc2Ugb2YgdGVjaG5pY2FsIGltcHJvdmVtZW50LgorCitUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIFNPRlRXQVJFLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIAorTEFXLiBFWENFUFQgV0hFTiBPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiAKK09USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgU09GVFdBUkUgIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCAKK0VJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBUSEUgCitFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFNPRlRXQVJFIElTIFdJVEggWU9VLiAKK1NIT1VMRCBUSEUgU09GVFdBUkUgUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgCitTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiAKKworSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HIFdJTEwgCitBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUiBSRURJU1RSSUJVVEUgCitUSEUgU09GVFdBUkUgQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZIAorR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSAKK09SIElOQUJJTElUWSBUTyBVU0UgVEhFIFNPRlRXQVJFIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSAKK09SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIAorT1IgQSBGQUlMVVJFIE9GIFRIRSBTT0ZUV0FSRSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFNPRlRXQVJFKSwgRVZFTiBJRiBTVUNIIAorSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gCisKK0lJLiAgTEdQTCBOb3RpY2UKK1RoaXMgU29mdHdhcmUgaXMgbGlua2VkIHdpdGggZnJlZSBzb2Z0d2FyZS4gWW91IGNhbiByZWRpc3RyaWJ1dGUgYW5kL29yCittb2RpZnkgc3VjaCBmcmVlIHNvZnR3YXJlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCit2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworVGhlIGZyZWUgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKK2J1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCitNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUgR05VCitMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCitZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBTb2Z0d2FyZTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EsIG9yIHNlZQoraHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9sZ3BsLWxpY2Vuc2UuaHRtbAorCitJSUkuIENvbnRhY3Q6CitBVk0gR21iSAorQWx0LU1vYWJpdCA5NQorMTA1NTkgQmVybGluCitHZXJtYW55CitFbWFpbDogaW5mb0Bhdm0uZGUKKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvQVpBUkEgYi9saWNlbnNlcy9BWkFSQQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjk0YjEyCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvQVpBUkEKQEAgLTAsMCArMSw4NiBAQAorCUF6YXJhLCB2Mi43LCBjb3B5cmlnaHQgKEMpIDE5OTMtMjAwMiBXYXluZSBCb3VjaGVyCisJYW5kIERlcGFydG1lbnQgb2YgQmlvY2hlbWlzdHJ5LCBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KKworVGhpcyBpcyBhIGxpY2Vuc2UgZm9yIEF6YXJhLCB2Mi43LgorCitUaGlzIGxpY2Vuc2UgaXMgdG8gYmUgc2lnbmVkIGJ5IHlvdSBvbiBiZWhhbGYgb2YgeW91ciBpbnN0aXR1dGlvbgorKGhlcmVpbmFmdGVyIHJlZmVycmVkIHRvIGFzIHRoZSAiTElDRU5TRUUiKSwgYW5kIHJldHVybmVkIHRvCitXYXluZSBCb3VjaGVyIChoZXJlaW5hZnRlciByZWZlcnJlZCB0byBhcyB0aGUgIkxJQ0VOU09SIikuCitUaGUgY29tcHV0ZXIgcHJvZ3JhbSwgaW5jbHVkaW5nIHNvdXJjZSBjb2RlIGFuZCBkb2N1bWVudGF0aW9uLAorYXJlIGhlcmVpbmFmdGVyIHJlZmVycmVkIHRvIGFzIHRoZSAiU09GVFdBUkUiLgorCitUZXJtcyBvZiB0aGUgTGljZW5zZQorCisxLiAgQSBub24tZXhjbHVzaXZlLCBub24tdHJhbnNmZXJhYmxlIGxpY2Vuc2UgaXMgZ3JhbnRlZCB0byB0aGUgTElDRU5TRUUKK3RvIGluc3RhbGwgYW5kIHVzZSB0aGUgU09GVFdBUkUgb24gYW4gYXBwcm9wcmlhdGUgY29tcHV0ZXIgc3lzdGVtIG9yIHN5c3RlbXMKK2xvY2F0ZWQgYXQgTElDRU5TRUUncyBpbnN0aXR1dGlvbiB0byB3aGljaCB0aGUgTElDRU5TRUUgaGFzIGF1dGhvcml6ZWQgYWNjZXNzLgorVXNlIG9mIHRoZSBTT0ZUV0FSRSBpcyByZXN0cmljdGVkIHRvIExJQ0VOU0VFIGFuZCBhbnkgY29sbGFib3JhdG9ycyBhdCB0aGlzCitpbnN0aXR1dGlvbiB3aG8gaGF2ZSBhZ3JlZWQgdG8gYWNjZXB0IHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UuCisKKzIuICBUaGUgTElDRU5TT1IgcmV0YWlucyBvd25lcnNoaXAgb2YgYWxsIG1hdGVyaWFscyAoaW5jbHVkaW5nIG1hZ25ldGljIHRhcGUsCit1bmxlc3MgcHJvdmlkZWQgYnkgdGhlIExJQ0VOU0VFKSBhbmQgU09GVFdBUkUgZGVsaXZlcmVkIHRvIExJQ0VOU0VFLiAgQW55Cittb2RpZmljYXRpb25zIG9yIGRlcml2YXRpdmUgd29ya3MgYmFzZWQgb24gdGhlIFNPRlRXQVJFIGFyZSBjb25zaWRlcmVkIHBhcnQKK29mIHRoZSBTT0ZUV0FSRSBhbmQgb3duZXJzaGlwIHRoZXJlb2YgaXMgcmV0YWluZWQgYnkgdGhlIExJQ0VOU09SLCBhbmQgYXJlCit0byBiZSBtYWRlIGF2YWlsYWJsZSB0byBoaW0gdXBvbiByZXF1ZXN0LgorCiszLiAgVGhlIExJQ0VOU0VFIG1heSBtYWtlIGEgcmVhc29uYWJsZSBudW1iZXIgb2YgY29waWVzIG9mIHRoZSBTT0ZUV0FSRSBmb3IKK3RoZSBwdXJwb3NlcyBvZiBiYWNrdXAsIG1haW50ZW5hbmNlIG9mIHRoZSBTT0ZUV0FSRSwgb3IgZGV2ZWxvcG1lbnQgb2YKK2Rlcml2YXRpdmUgd29ya3MgYmFzZWQgb24gdGhlIFNPRlRXQVJFLiAgVGhlc2UgYWRkaXRpb25hbCBjb3BpZXMgd2lsbCBjYXJyeQordGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIHdpbGwgYmUgY29udHJvbGxlZCBieSB0aGlzIGxpY2Vuc2UsIGFuZCB3aWxsIGJlCitkZXN0cm95ZWQgYnkgdGhlIExJQ0VOU0VFIHVwb24gdGVybWluYXRpb24gb2YgdGhpcyBsaWNlbnNlLgorCis0LiAgVGhlIExJQ0VOU0VFIHNoYWxsIG5vdCB1c2UgU09GVFdBUkUgZm9yIGFueSBwdXJwb3NlIChyZXNlYXJjaCBvcgorb3RoZXJ3aXNlKSB0aGF0IGlzIHN1cHBvcnRlZCBieSBhICJmb3IgcHJvZml0IiBvcmdhbml6YXRpb24gd2l0aG91dCBwcmlvcgord3JpdHRlbiBhdXRob3JpemF0aW9uIGZyb20gdGhlIExJQ0VOU09SLgorCis1LiAgVGhlIExJQ0VOU0VFIHNoYWxsIG5vdCBkaXNjbG9zZSBpbiBhbnkgZm9ybSBlaXRoZXIgdGhlIGRlbGl2ZXJlZCBTT0ZUV0FSRQorb3IgYW55IG1vZGlmaWNhdGlvbnMgb3IgZGVyaXZhdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgU09GVFdBUkUgdG8gdGhpcmQKK3BhcnRpZXMgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24gZnJvbSB0aGUgTElDRU5TT1IuCisKKzYuICBJZiB0aGUgTElDRU5TRUUgcmVjZWl2ZXMgYSByZXF1ZXN0IHRvIGZ1cm5pc2ggYWxsIG9yIGFueSBwb3J0aW9uIG9mIHRoZQorU09GVFdBUkUgdG8gYW55IHRoaXJkIHBhcnR5LCBoZSB3aWxsIG5vdCBmdWxmaWxsIHN1Y2ggYSByZXF1ZXN0LCBhbmQgd2lsbAorcmVmZXIgaXQgaW4gd3JpdGluZyB0byB0aGUgTElDRU5TT1IuCisKKzcuICBUaGUgTElDRU5TRUUgYWdyZWVzIHRoYXQgdGhlIFNPRlRXQVJFIGlzIGZ1cm5pc2hlZCBvbiBhbiAiYXMgaXMiIGJhc2lzLAorYW5kIHRoYXQgdGhlIExJQ0VOU09SIGluIG5vIHdheSB3YXJyYW50cyB0aGUgU09GVFdBUkUgb3IgYW55IG9mIGl0cyByZXN1bHRzCithbmQgaXMgaW4gbm8gd2F5IGxpYWJsZSBmb3IgYW55IHVzZSBMSUNFTlNFRSBtYWtlcyBvZiB0aGUgU09GVFdBUkUuCisKKzguICBMSUNFTlNFRSBhZ3JlZXMgdGhhdCBhbnkgcmVwb3J0cyBvciBwdWJsaWNhdGlvbnMgb2YgcmVzdWx0cyBvYnRhaW5lZCB3aXRoCit0aGUgU09GVFdBUkUgd2lsbCBhY2tub3dsZWRnZSBpdHMgdXNlIGJ5IGFuIGFwcHJvcHJpYXRlIGNpdGF0aW9uLCBzdWNoIGFzCisKKwkiRGF0YSB3ZXJlIHByb2Nlc3NlZCBbaW4gcGFydF0gdXNpbmcgdGhlIEF6YXJhIHN1aXRlIG9mIHByb2dyYW1zLAorCXByb3ZpZGVkIGJ5IFdheW5lIEJvdWNoZXIgYW5kIHRoZSBEZXBhcnRtZW50IG9mIEJpb2NoZW1pc3RyeSwKKwlVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4gIFRoZSBjb2RlIG1heSBiZSBvYnRhaW5lZCB2aWEgYW5vbnltb3VzCisJZnRwIHRvIHd3dy5iaW8uY2FtLmFjLnVrIGluIHRoZSBkaXJlY3RvcnkgfmZ0cC9wdWIvYXphcmEuIgorCis5LiAgVGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZSBzaGFsbCBub3QgYmUgbGltaXRlZCBpbiB0aW1lLgorCitUbyBldmlkZW5jZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHNldCBmb3J0aCBhYm92ZSwKK3BsZWFzZSBzaWduIGluIHRoZSBpbmRpY2F0ZWQgc3BhY2UgYW5kIHJldHVybiB0aGlzIGxldHRlciB0byB0aGUgTElDRU5TT1IuCisKKworV2F5bmUgQm91Y2hlcgorCisKKworX19fX19fX19fX19fX19fX19fX19fX19fXyAgRGF0ZQorCisKKworX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18gU2lnbmF0dXJlCisKKworCitfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyBOYW1lCisKKworCitfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyBJbnN0aXR1dGlvbgorCisKKworX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18gQWRkcmVzcworCisKKworX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18gRW1haWwKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0Fkb2JlIGIvbGljZW5zZXMvQWRvYmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmZjNWNiNgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0Fkb2JlCkBAIC0wLDAgKzEsMzQ3IEBACitBRE9CRSBTWVNURU1TIElOQ09SUE9SQVRFRAorRW5kIFVzZXIgTGljZW5zZSBBZ3JlZW1lbnQKK1BsZWFzZSByZXR1cm4gYW55IGFjY29tcGFueWluZyByZWdpc3RyYXRpb24gZm9ybSB0byByZWNlaXZlIHJlZ2lzdHJhdGlvbgorYmVuZWZpdHMuCitOT1RJQ0UgVE8gVVNFUjogIFBMRUFTRSBSRUFEIFRISVMgQ09OVFJBQ1QgQ0FSRUZVTExZLiAgQlkgVVNJTkcgQUxMIE9SIEFOWQorUE9SVElPTiBPRiBUSEUgU09GVFdBUkUgWU9VIEFDQ0VQVCBBTEwgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMKK0FHUkVFTUVOVCwgSU5DTFVESU5HLCBJTiBQQVJUSUNVTEFSIFRIRSBMSU1JVEFUSU9OUyBPTjogVVNFIENPTlRBSU5FRCBJTgorU0VDVElPTiAyOyBUUkFOU0ZFUkFCSUxJVFkgSU4gU0VDVElPTiA0OyBXQVJSQU5UWSBJTiBTRUNUSU9OIDYgQU5EIDc7IEFORAorTElBQklMSVRZIElOIFNFQ1RJT04gOC4gWU9VIEFHUkVFIFRIQVQgVEhJUyBBR1JFRU1FTlQgSVMgRU5GT1JDRUFCTEUgTElLRSBBTlkKK1dSSVRURU4gTkVHT1RJQVRFRCBBR1JFRU1FTlQgU0lHTkVEIEJZIFlPVS4gIElGIFlPVSBETyBOT1QgQUdSRUUsIERPIE5PVCBVU0UKK1RISVMgU09GVFdBUkUuICBJRiBZT1UgQUNRVUlSRUQgVEhFIFNPRlRXQVJFIE9OIFRBTkdJQkxFIE1FRElBIChlLmcuIENEKQorV0lUSE9VVCBBTiBPUFBPUlRVTklUWSBUTyBSRVZJRVcgVEhJUyBMSUNFTlNFIEFORCBZT1UgRE8gTk9UIEFDQ0VQVCBUSElTCitBR1JFRU1FTlQsIFlPVSBNQVkgT0JUQUlOIEEgUkVGVU5EIE9GIFRIRSBBTU9VTlQgWU9VIE9SSUdJTkFMTFkgUEFJRCBJRiBZT1U6CisoQSkgRE8gTk9UIFVTRSBUSEUgU09GVFdBUkUgQU5EIChCKSBSRVRVUk4gSVQsIFdJVEggUFJPT0YgT0YgUEFZTUVOVCwgVE8gVEhFCitMT0NBVElPTiBGUk9NIFdISUNIIElUIFdBUyBPQlRBSU5FRCBXSVRISU4gVEhJUlRZICgzMCkgREFZUyBPRiBUSEUgUFVSQ0hBU0UKK0RBVEUuCisKKworMS4gIERlZmluaXRpb25zLiAgIlNvZnR3YXJlIiBtZWFucyAoYSkgYWxsIG9mIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZXMsCitkaXNrKHMpLCBDRC1ST00ocykgb3Igb3RoZXIgbWVkaWEgd2l0aCB3aGljaCB0aGlzIEFncmVlbWVudCBpcyBwcm92aWRlZCwKK2luY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gKGkpIEFkb2JlIG9yIHRoaXJkIHBhcnR5IGNvbXB1dGVyIGluZm9ybWF0aW9uIG9yCitzb2Z0d2FyZTsgKGlpKSBkaWdpdGFsIGltYWdlcywgc3RvY2sgcGhvdG9ncmFwaHMsIGNsaXAgYXJ0LCBzb3VuZHMgb3Igb3RoZXIKK2FydGlzdGljIHdvcmtzICgiU3RvY2sgRmlsZXMiKTsgKGlpaSkgcmVsYXRlZCBleHBsYW5hdG9yeSB3cml0dGVuIG1hdGVyaWFscyBvcgorZmlsZXMgKCJEb2N1bWVudGF0aW9uIik7IGFuZCAoaXYpIGZvbnRzOyBhbmQgKGIpIHVwZ3JhZGVzLCBtb2RpZmllZCB2ZXJzaW9ucywKK3VwZGF0ZXMsIGFkZGl0aW9ucywgYW5kIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGlmIGFueSwgbGljZW5zZWQgdG8geW91IGJ5CitBZG9iZSAoY29sbGVjdGl2ZWx5LCAiVXBkYXRlcyIpLiAgIlVzZSIgb3IgIlVzaW5nIiBtZWFucyB0byBhY2Nlc3MsIGluc3RhbGwsCitkb3dubG9hZCwgY29weSBvciBvdGhlcndpc2UgYmVuZWZpdCBmcm9tIHVzaW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZQorU29mdHdhcmUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBEb2N1bWVudGF0aW9uLiAgIlBlcm1pdHRlZCBOdW1iZXIiIG1lYW5zIG9uZQorKDEpIHVubGVzcyBvdGhlcndpc2UgaW5kaWNhdGVkIHVuZGVyIGEgdmFsaWQgbGljZW5zZSAoZS5nLiB2b2x1bWUgbGljZW5zZSkKK2dyYW50ZWQgYnkgQWRvYmUuICAiQ29tcHV0ZXIiIG1lYW5zIGFuIGVsZWN0cm9uaWMgZGV2aWNlIHRoYXQgYWNjZXB0cworaW5mb3JtYXRpb24gaW4gZGlnaXRhbCBvciBzaW1pbGFyIGZvcm0gYW5kIG1hbmlwdWxhdGVzIGl0IGZvciBhIHNwZWNpZmljIHJlc3VsdAorYmFzZWQgb24gYSBzZXF1ZW5jZSBvZiBpbnN0cnVjdGlvbnMuICAiQWRvYmUiIG1lYW5zIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkLAorYSBEZWxhd2FyZSBjb3Jwb3JhdGlvbiwgMzQ1IFBhcmsgQXZlbnVlLCBTYW4gSm9zZSwgQ2FsaWZvcm5pYSA5NTExMCwgaWYKK3N1YnNlY3Rpb24gMTAoYSkgb2YgdGhpcyBBZ3JlZW1lbnQgYXBwbGllczsgb3RoZXJ3aXNlIGl0IG1lYW5zIEFkb2JlIFN5c3RlbXMKK0JlbmVsdXggQlYsIEV1cm9wbGF6YSwgSG9vZ29vcmRkcmVlZiA1NGEsIDExMDEgQkUgQW1zdGVyZGFtIFpPLCB0aGUKK05ldGhlcmxhbmRzLCBhIGNvbXBhbnkgb3JnYW5pemVkIHVuZGVyIHRoZSBsYXdzIG9mIHRoZSBOZXRoZXJsYW5kcyBhbmQgYW4KK2FmZmlsaWF0ZSBhbmQgbGljZW5zZWUgb2YgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQuCisKKworMi4gU29mdHdhcmUgTGljZW5zZS4gIEFzIGxvbmcgYXMgeW91IGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIEVuZCBVc2VyCitMaWNlbnNlIEFncmVlbWVudCAodGhlICJBZ3JlZW1lbnQiKSwgQWRvYmUgZ3JhbnRzIHRvIHlvdSBhIG5vbi1leGNsdXNpdmUKK2xpY2Vuc2UgdG8gVXNlIHRoZSBTb2Z0d2FyZSBmb3IgdGhlIHB1cnBvc2VzIGRlc2NyaWJlZCBpbiB0aGUgRG9jdW1lbnRhdGlvbi4KK1NvbWUgdGhpcmQgcGFydHkgbWF0ZXJpYWxzIGluY2x1ZGVkIGluIHRoZSBTb2Z0d2FyZSBtYXkgYmUgc3ViamVjdCB0byBvdGhlcgordGVybXMgYW5kIGNvbmRpdGlvbnMsIHdoaWNoIGFyZSB0eXBpY2FsbHkgZm91bmQgaW4gYSAiUmVhZCBNZSIgZmlsZSBsb2NhdGVkCituZWFyIHN1Y2ggbWF0ZXJpYWxzLgorMi4xLiAgR2VuZXJhbCBVc2UuICBZb3UgbWF5IGluc3RhbGwgYW5kIFVzZSBhIGNvcHkgb2YgdGhlIFNvZnR3YXJlIG9uIHlvdXIKK2NvbXBhdGlibGUgY29tcHV0ZXIsIHVwIHRvIHRoZSBQZXJtaXR0ZWQgTnVtYmVyIG9mIGNvbXB1dGVyczsgb3IKKzIuMi4gIFNlcnZlciBVc2UuICBZb3UgbWF5IGluc3RhbGwgb25lIGNvcHkgb2YgdGhlIFNvZnR3YXJlIG9uIHlvdXIgY29tcHV0ZXIKK2ZpbGUgc2VydmVyIGZvciB0aGUgcHVycG9zZSBvZiBkb3dubG9hZGluZyBhbmQgaW5zdGFsbGluZyB0aGUgU29mdHdhcmUgb250bworb3RoZXIgY29tcHV0ZXJzIHdpdGhpbiB5b3VyIGludGVybmFsIG5ldHdvcmsgdXAgdG8gdGhlIFBlcm1pdHRlZCBOdW1iZXIgb3IgeW91CittYXkgaW5zdGFsbCBvbmUgY29weSBvZiB0aGUgU29mdHdhcmUgb24gYSBjb21wdXRlciBmaWxlIHNlcnZlciB3aXRoaW4geW91cgoraW50ZXJuYWwgbmV0d29yayBmb3IgdGhlIHNvbGUgYW5kIGV4Y2x1c2l2ZSBwdXJwb3NlIG9mIHVzaW5nIHRoZSBTb2Z0d2FyZQordGhyb3VnaCBjb21tYW5kcywgZGF0YSBvciBpbnN0cnVjdGlvbnMgKGUuZy4gc2NyaXB0cykgZnJvbSBhbiB1bmxpbWl0ZWQgbnVtYmVyCitvZiBjb21wdXRlcnMgb24geW91ciBpbnRlcm5hbCBuZXR3b3JrLiAgTm8gb3RoZXIgbmV0d29yayB1c2UgaXMgcGVybWl0dGVkLAoraW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bywgdXNpbmcgdGhlIFNvZnR3YXJlIGVpdGhlciBkaXJlY3RseSBvciB0aHJvdWdoCitjb21tYW5kcywgZGF0YSBvciBpbnN0cnVjdGlvbnMgZnJvbSBvciB0byBhIGNvbXB1dGVyIG5vdCBwYXJ0IG9mIHlvdXIgaW50ZXJuYWwKK25ldHdvcmssIGZvciBpbnRlcm5ldCBvciB3ZWIgaG9zdGluZyBzZXJ2aWNlcyBvciBieSBhbnkgdXNlciBub3QgbGljZW5zZWQgdG8KK3VzZSB0aGlzIGNvcHkgb2YgdGhlIFNvZnR3YXJlIHRocm91Z2ggYSB2YWxpZCBsaWNlbnNlIGZyb20gQWRvYmU7IGFuZAorMi4zLiAgQmFja3VwIENvcHkuICBZb3UgbWF5IG1ha2Ugb25lIGJhY2t1cCBjb3B5IG9mIHRoZSBTb2Z0d2FyZSwgcHJvdmlkZWQgeW91cgorYmFja3VwIGNvcHkgaXMgbm90IGluc3RhbGxlZCBvciB1c2VkIG9uIGFueSBjb21wdXRlci4gWW91IG1heSBub3QgdHJhbnNmZXIgdGhlCityaWdodHMgdG8gYSBiYWNrdXAgY29weSB1bmxlc3MgeW91IHRyYW5zZmVyIGFsbCByaWdodHMgaW4gdGhlIFNvZnR3YXJlIGFzCitwcm92aWRlZCB1bmRlciBTZWN0aW9uIDQuCisyLjQuICBIb21lIFVzZS4gIFlvdSwgYXMgdGhlIHByaW1hcnkgdXNlciBvZiB0aGUgY29tcHV0ZXIgb24gd2hpY2ggdGhlIFNvZnR3YXJlCitpcyBpbnN0YWxsZWQsIG1heSBhbHNvIGluc3RhbGwgdGhlIFNvZnR3YXJlIG9uIG9uZSBvZiB5b3VyIGhvbWUgY29tcHV0ZXJzLgorSG93ZXZlciwgdGhlIFNvZnR3YXJlIG1heSBub3QgYmUgdXNlZCBvbiB5b3VyIGhvbWUgY29tcHV0ZXIgYXQgdGhlIHNhbWUgdGltZQordGhlIFNvZnR3YXJlIG9uIHRoZSBwcmltYXJ5IGNvbXB1dGVyIGlzIGJlaW5nIHVzZWQuCisyLjUuICBTdG9jayBGaWxlcy4gIFVubGVzcyBzdGF0ZWQgb3RoZXJ3aXNlIGluIHRoZSAiUmVhZC1NZSIgZmlsZXMgYXNzb2NpYXRlZAord2l0aCB0aGUgU3RvY2sgRmlsZXMsIHdoaWNoIG1heSBpbmNsdWRlIHNwZWNpZmljIHJpZ2h0cyBhbmQgcmVzdHJpY3Rpb25zIHdpdGgKK3Jlc3BlY3QgdG8gc3VjaCBtYXRlcmlhbHMsIHlvdSBtYXkgZGlzcGxheSwgbW9kaWZ5LCByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUKK2FueSBvZiB0aGUgU3RvY2sgRmlsZXMgaW5jbHVkZWQgd2l0aCB0aGUgU29mdHdhcmUuICBIb3dldmVyLCB5b3UgbWF5IG5vdAorZGlzdHJpYnV0ZSB0aGUgU3RvY2sgRmlsZXMgb24gYSBzdGFuZC1hbG9uZSBiYXNpcywgaS5lLiwgaW4gY2lyY3Vtc3RhbmNlcyBpbgord2hpY2ggdGhlIFN0b2NrIEZpbGVzIGNvbnN0aXR1dGUgdGhlIHByaW1hcnkgdmFsdWUgb2YgdGhlIHByb2R1Y3QgYmVpbmcKK2Rpc3RyaWJ1dGVkLiAgU3RvY2sgRmlsZXMgbWF5IG5vdCBiZSB1c2VkIGluIHRoZSBwcm9kdWN0aW9uIG9mIGxpYmVsb3VzLAorZGVmYW1hdG9yeSwgZnJhdWR1bGVudCwgbGV3ZCwgb2JzY2VuZSBvciBwb3Jub2dyYXBoaWMgbWF0ZXJpYWwgb3IgYW55IG1hdGVyaWFsCit0aGF0IGluZnJpbmdlcyB1cG9uICBhbnkgdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvciBpbiBhbnkKK290aGVyd2lzZSBpbGxlZ2FsIG1hbm5lci4gIFlvdSBtYXkgbm90IGNsYWltIGFueSB0cmFkZW1hcmsgcmlnaHRzIGluIHRoZSBTdG9jaworRmlsZXMgb3IgZGVyaXZhdGl2ZSB3b3JrcyB0aGVyZW9mLgorMi42LiBGb250IFNvZnR3YXJlLiBJZiB0aGUgU29mdHdhcmUgaW5jbHVkZXMgZm9udCBzb2Z0d2FyZSAtCisyLjYuMS4gWW91IG1heSBVc2UgdGhlIGZvbnQgc29mdHdhcmUgYXMgZGVzY3JpYmVkIGFib3ZlIG9uIHRoZSBQZXJtaXR0ZWQgTnVtYmVyCitvZiBjb21wdXRlcnMgYW5kIG91dHB1dCBzdWNoIGZvbnQgc29mdHdhcmUgb24gYW55IG91dHB1dCBkZXZpY2VzIGNvbm5lY3RlZCB0bworc3VjaCBjb21wdXRlcnMuCisyLjYuMi4gSWYgdGhlIFBlcm1pdHRlZCBOdW1iZXIgb2YgY29tcHV0ZXJzIGlzIGZpdmUgb3IgZmV3ZXIsIHlvdSBtYXkgZG93bmxvYWQKK3RoZSBmb250IHNvZnR3YXJlIHRvIHRoZSBtZW1vcnkgKGhhcmQgZGlzayBvciBSQU0pIG9mIG9uZSBvdXRwdXQgZGV2aWNlCitjb25uZWN0ZWQgdG8gYXQgbGVhc3Qgb25lIG9mIHN1Y2ggY29tcHV0ZXJzIGZvciB0aGUgcHVycG9zZSBvZiBoYXZpbmcgc3VjaCBmb250Citzb2Z0d2FyZSByZW1haW4gcmVzaWRlbnQgaW4gdGhlIG91dHB1dCBkZXZpY2UsIGFuZCBvZiBvbmUgYWRkaXRpb25hbCBzdWNoCitvdXRwdXQgZGV2aWNlIGZvciBldmVyeSBtdWx0aXBsZSBvZiBmaXZlIHJlcHJlc2VudGVkIGJ5IHRoZSBQZXJtaXR0ZWQgTnVtYmVyIG9mCitjb21wdXRlcnMuCisyLjYuMy4gWW91IG1heSB0YWtlIGEgY29weSBvZiB0aGUgZm9udChzKSB5b3UgaGF2ZSB1c2VkIGZvciBhIHBhcnRpY3VsYXIgZmlsZQordG8gYSBjb21tZXJjaWFsIHByaW50ZXIgb3Igb3RoZXIgc2VydmljZSBidXJlYXUsIGFuZCBzdWNoIHNlcnZpY2UgYnVyZWF1IG1heQorVXNlIHRoZSBmb250KHMpIHRvIHByb2Nlc3MgeW91ciBmaWxlLCBwcm92aWRlZCBzdWNoIHNlcnZpY2UgYnVyZWF1IGhhcyBhIHZhbGlkCitsaWNlbnNlIHRvIFVzZSB0aGF0IHBhcnRpY3VsYXIgZm9udCBzb2Z0d2FyZS4KKzIuNi40LiBZb3UgbWF5IGNvbnZlcnQgYW5kIGluc3RhbGwgdGhlIGZvbnQgc29mdHdhcmUgaW50byBhbm90aGVyIGZvcm1hdCBmb3IKK3VzZSBpbiBvdGhlciBlbnZpcm9ubWVudHMsIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOiBBIGNvbXB1dGVyIG9uCit3aGljaCB0aGUgY29udmVydGVkIGZvbnQgc29mdHdhcmUgaXMgdXNlZCBvciBpbnN0YWxsZWQgc2hhbGwgYmUgY29uc2lkZXJlZCBhcworb25lIG9mIHlvdXIgUGVybWl0dGVkIE51bWJlciBvZiBjb21wdXRlcnMuIFVzZSBvZiB0aGUgZm9udCBzb2Z0d2FyZSB5b3UgaGF2ZQorY29udmVydGVkIHNoYWxsIGJlIHB1cnN1YW50IHRvIGFsbCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQuCitTdWNoIGNvbnZlcnRlZCBmb250IHNvZnR3YXJlIG1heSBiZSB1c2VkIG9ubHkgZm9yIHlvdXIgb3duIGN1c3RvbWFyeSBpbnRlcm5hbAorYnVzaW5lc3Mgb3IgcGVyc29uYWwgdXNlIGFuZCBtYXkgbm90IGJlIGRpc3RyaWJ1dGVkIG9yIHRyYW5zZmVycmVkIGZvciBhbnkKK3B1cnBvc2UsIGV4Y2VwdCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFRyYW5zZmVyIHNlY3Rpb24gYmVsb3cuCisyLjYuNSBZb3UgbWF5IGVtYmVkIHRoZSBmb250IHNvZnR3YXJlLCBvciBvdXRsaW5lcyBvZiB0aGUgZm9udCBzb2Z0d2FyZSwgaW50bworeW91ciBlbGVjdHJvbmljIGRvY3VtZW50cyB0byB0aGUgZXh0ZW50IHRoYXQgdGhlIGZvbnQgdmVuZG9yIGNvcHlyaWdodCBvd25lcgorYWxsb3dzIGZvciBzdWNoIGVtYmVkZGluZy4gVGhlIGZvbnRzIGNvbnRhaW5lZCBpbiB0aGlzIHBhY2thZ2UgbWF5IGNvbnRhaW4gYm90aAorQWRvYmUgYW5kIG5vbi1BZG9iZSBvd25lZCBmb250cy4gWW91IG1heSBmdWxseSBlbWJlZCBhbnkgZm9udCBvd25lZCBieSBBZG9iZS4KK1JlZmVyIHRvIHRoZSBmb250IHNhbXBsZSBzaGVldCBvciBmb250IGluZm9ybWF0aW9uIGZpbGUgdG8gZGV0ZXJtaW5lIGZvbnQKK293bmVyc2hpcC4gU2VlIHRoZSBEb2N1bWVudGF0aW9uIGZvciBsb2NhdGlvbiBhbmQgaW5mb3JtYXRpb24gb24gaG93IHRvIGFjY2VzcwordGhlc2Ugc2hlZXRzIGFuZCBmaWxlcy4KKzIuNyAgVG8gdGhlIGV4dGVudCB0aGF0IHRoZSBTb2Z0d2FyZSBpbmNsdWRlcyBBZG9iZSBBY3JvYmF0IFJlYWRlciBzb2Z0d2FyZSwKKyhpKSB5b3UgbWF5IGN1c3RvbWl6ZSB0aGUgaW5zdGFsbGVyIGZvciBzdWNoIHNvZnR3YXJlIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUKK3Jlc3RyaWN0aW9ucyBmb3VuZCBhdCB3d3cuYWRvYmUuY29tIChlLmcuLCBpbnN0YWxsYXRpb24gb2YgYWRkaXRpb25hbCBwbHVnLWluCithbmQgaGVscCBmaWxlcyk7IGhvd2V2ZXIsIHlvdSBtYXkgbm90IG90aGVyd2lzZSBhbHRlciBvciBtb2RpZnkgdGhlIGluc3RhbGxlcgorcHJvZ3JhbSBvciBjcmVhdGUgYSBuZXcgaW5zdGFsbGVyIGZvciBhbnkgb2Ygc3VjaCBzb2Z0d2FyZSwgKGlpKSBzdWNoIHNvZnR3YXJlCitpcyBsaWNlbnNlZCBhbmQgZGlzdHJpYnV0ZWQgYnkgQWRvYmUgZm9yIHZpZXdpbmcsIGRpc3RyaWJ1dGluZyBhbmQgc2hhcmluZyBQREYKK2ZpbGVzLCBhbmQgKGlpaSkgeW91IGFyZSBub3QgYXV0aG9yaXplZCB0byB1c2UgYW55IHBsdWctaW4gb3IgZW5oYW5jZW1lbnQgdGhhdAorcGVybWl0cyB5b3UgdG8gc2F2ZSBtb2RpZmljYXRpb25zIHRvIGEgUERGIGZpbGUgd2l0aCBzdWNoIHNvZnR3YXJlOyBob3dldmVyLAorc3VjaCB1c2UgaXMgYXV0aG9yaXplZCB3aXRoIEFkb2JlIEFjcm9iYXQsIEFkb2JlIEFjcm9iYXQgQnVzaW5lc3MgVG9vbHMsIGFuZAorb3RoZXIgY3VycmVudCBhbmQgZnV0dXJlIEFkb2JlIHByb2R1Y3RzIHRoYXQgZmVhdHVyZSB0aGUgY3JlYXRpb24gb3IKK21hbmlwdWxhdGlvbiBvZiBQREYgZmlsZXMuICBGb3IgaW5mb3JtYXRpb24gb24gaG93IHRvIGRpc3RyaWJ1dGUgQWRvYmUgQWNyb2JhdCgKK1JlYWRlciggYW5kIEFkb2JlIFNWRyBWaWV3ZXIgcGxlYXNlIHJlZmVyIHRvIHRoZSBzZWN0aW9ucyBlbnRpdGxlZCAiSG93IHRvCitEaXN0cmlidXRlIEFjcm9iYXQgUmVhZGVyIiBhbmQgIkhvdyB0byBEaXN0cmlidXRlIFNWRyBWaWV3ZXIiIGF0IHd3dy5hZG9iZS5jb20uCisKKworCiszLiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgUmlnaHRzLiBUaGUgU29mdHdhcmUgYW5kIGFueSBjb3BpZXMgdGhhdCB5b3UgYXJlCithdXRob3JpemVkIGJ5IEFkb2JlIHRvIG1ha2UgYXJlIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW5kIGFyZSBvd25lZCBieQorQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQgYW5kIGl0cyBzdXBwbGllcnMuIFRoZSBzdHJ1Y3R1cmUsIG9yZ2FuaXphdGlvbiBhbmQKK2NvZGUgb2YgdGhlIFNvZnR3YXJlIGFyZSB0aGUgdmFsdWFibGUgdHJhZGUgc2VjcmV0cyBhbmQgY29uZmlkZW50aWFsCitpbmZvcm1hdGlvbiBvZiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZCBhbmQgaXRzIHN1cHBsaWVycy4gVGhlIFNvZnR3YXJlIGlzCitwcm90ZWN0ZWQgYnkgY29weXJpZ2h0LCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGJ5IFVuaXRlZCBTdGF0ZXMgQ29weXJpZ2h0CitMYXcsIGludGVybmF0aW9uYWwgdHJlYXR5IHByb3Zpc2lvbnMgYW5kIGFwcGxpY2FibGUgbGF3cyBpbiB0aGUgY291bnRyeSBpbgord2hpY2ggaXQgaXMgYmVpbmcgdXNlZC4gWW91IG1heSBub3QgY29weSB0aGUgU29mdHdhcmUsIGV4Y2VwdCBhcyBzZXQgZm9ydGggaW4KK1NlY3Rpb24gMiAoIlNvZnR3YXJlIExpY2Vuc2UiKS4gQW55IGNvcGllcyB0aGF0IHlvdSBhcmUgcGVybWl0dGVkIHRvIG1ha2UKK3B1cnN1YW50IHRvIHRoaXMgQWdyZWVtZW50IG11c3QgY29udGFpbiB0aGUgc2FtZSBjb3B5cmlnaHQgYW5kIG90aGVyCitwcm9wcmlldGFyeSBub3RpY2VzIHRoYXQgYXBwZWFyIG9uIG9yIGluIHRoZSBTb2Z0d2FyZS4gRXhjZXB0IGZvciBmb250IHNvZnR3YXJlCitjb252ZXJ0ZWQgdG8gb3RoZXIgZm9ybWF0cyBhcyBwZXJtaXR0ZWQgaW4gc2VjdGlvbiAyLjYuNCwgeW91IGFncmVlIG5vdCB0bworbW9kaWZ5LCBhZGFwdCBvciB0cmFuc2xhdGUgdGhlIFNvZnR3YXJlLllvdSBhbHNvIGFncmVlIG5vdCB0byByZXZlcnNlIGVuZ2luZWVyLAorZGVjb21waWxlLCBkaXNhc3NlbWJsZSBvciBvdGhlcndpc2UgYXR0ZW1wdCB0byBkaXNjb3ZlciB0aGUgc291cmNlIGNvZGUgb2YgdGhlCitTb2Z0d2FyZSBleGNlcHQgdG8gdGhlIGV4dGVudCB5b3UgbWF5IGJlIGV4cHJlc3NseSBwZXJtaXR0ZWQgdG8gZGVjb21waWxlIHVuZGVyCithcHBsaWNhYmxlIGxhdywgaXQgaXMgZXNzZW50aWFsIHRvIGRvIHNvIGluIG9yZGVyIHRvIGFjaGlldmUgb3BlcmFiaWxpdHkgb2YgdGhlCitTb2Z0d2FyZSB3aXRoIGFub3RoZXIgc29mdHdhcmUgcHJvZ3JhbSwgYW5kIHlvdSBoYXZlIGZpcnN0IHJlcXVlc3RlZCBBZG9iZSB0bworcHJvdmlkZSB0aGUgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IHRvIGFjaGlldmUgc3VjaCBvcGVyYWJpbGl0eSBhbmQgQWRvYmUgaGFzIG5vdAorbWFkZSBzdWNoIGluZm9ybWF0aW9uIGF2YWlsYWJsZS4gQWRvYmUgaGFzIHRoZSByaWdodCB0byBpbXBvc2UgcmVhc29uYWJsZQorY29uZGl0aW9ucyBhbmQgdG8gcmVxdWVzdCBhIHJlYXNvbmFibGUgZmVlIGJlZm9yZSBwcm92aWRpbmcgc3VjaCBpbmZvcm1hdGlvbi4KK0FueSBpbmZvcm1hdGlvbiBzdXBwbGllZCBieSBBZG9iZSBvciBvYnRhaW5lZCBieSB5b3UsIGFzIHBlcm1pdHRlZCBoZXJldW5kZXIsCittYXkgb25seSBiZSB1c2VkIGJ5IHlvdSBmb3IgdGhlIHB1cnBvc2UgZGVzY3JpYmVkIGhlcmVpbiBhbmQgbWF5IG5vdCBiZQorZGlzY2xvc2VkIHRvIGFueSB0aGlyZCBwYXJ0eSBvciB1c2VkIHRvIGNyZWF0ZSBhbnkgc29mdHdhcmUgd2hpY2ggaXMKK3N1YnN0YW50aWFsbHkgc2ltaWxhciB0byB0aGUgZXhwcmVzc2lvbiBvZiB0aGUgU29mdHdhcmUuIFJlcXVlc3RzIGZvcgoraW5mb3JtYXRpb24gc2hvdWxkIGJlIGRpcmVjdGVkIHRvIHRoZSBBZG9iZSBDdXN0b21lciBTdXBwb3J0IERlcGFydG1lbnQuCitUcmFkZW1hcmtzIHNoYWxsIGJlIHVzZWQgaW4gYWNjb3JkYW5jZSB3aXRoIGFjY2VwdGVkIHRyYWRlbWFyayBwcmFjdGljZSwKK2luY2x1ZGluZyBpZGVudGlmaWNhdGlvbiBvZiB0cmFkZW1hcmtzIG93bmVycycgbmFtZXMuIFRyYWRlbWFya3MgY2FuIG9ubHkgYmUKK3VzZWQgdG8gaWRlbnRpZnkgcHJpbnRlZCBvdXRwdXQgcHJvZHVjZWQgYnkgdGhlIFNvZnR3YXJlIGFuZCBzdWNoIHVzZSBvZiBhbnkKK3RyYWRlbWFyayBkb2VzIG5vdCBnaXZlIHlvdSBhbnkgcmlnaHRzIG9mIG93bmVyc2hpcCBpbiB0aGF0IHRyYWRlbWFyay4gRXhjZXB0CithcyBleHByZXNzbHkgc3RhdGVkIGFib3ZlLCB0aGlzIEFncmVlbWVudCBkb2VzIG5vdCBncmFudCB5b3UgYW55IGludGVsbGVjdHVhbAorcHJvcGVydHkgcmlnaHRzIGluIHRoZSBTb2Z0d2FyZS4KKworCis0LiBUcmFuc2Zlci4gWW91IG1heSBub3QsIHJlbnQsIGxlYXNlLCBzdWJsaWNlbnNlIG9yIGF1dGhvcml6ZSBhbGwgb3IgYW55Citwb3J0aW9uIG9mIHRoZSBTb2Z0d2FyZSB0byBiZSBjb3BpZWQgb250byBhbm90aGVyIHVzZXJzIGNvbXB1dGVyIGV4Y2VwdCBhcyBtYXkKK2JlIGV4cHJlc3NseSBwZXJtaXR0ZWQgaGVyZWluLiBZb3UgbWF5LCBob3dldmVyLCB0cmFuc2ZlciBhbGwgeW91ciByaWdodHMgdG8KK1VzZSB0aGUgU29mdHdhcmUgdG8gYW5vdGhlciBwZXJzb24gb3IgbGVnYWwgZW50aXR5IHByb3ZpZGVkIHRoYXQ6IChhKSB5b3UgYWxzbwordHJhbnNmZXIgZWFjaCB0aGlzIEFncmVlbWVudCwgdGhlIFNvZnR3YXJlIGFuZCBhbGwgb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUKK2J1bmRsZWQgb3IgcHJlLWluc3RhbGxlZCB3aXRoIHRoZSBTb2Z0d2FyZSwgaW5jbHVkaW5nIGFsbCBjb3BpZXMsIFVwZGF0ZXMgYW5kCitwcmlvciB2ZXJzaW9ucywgYW5kIGFsbCBjb3BpZXMgb2YgZm9udCBzb2Z0d2FyZSBjb252ZXJ0ZWQgaW50byBvdGhlciBmb3JtYXRzLAordG8gc3VjaCBwZXJzb24gb3IgZW50aXR5OyAgKGIpIHlvdSByZXRhaW4gbm8gY29waWVzLCBpbmNsdWRpbmcgYmFja3VwcyBhbmQKK2NvcGllcyBzdG9yZWQgb24gYSBjb21wdXRlcjsgYW5kIChjKSB0aGUgcmVjZWl2aW5nIHBhcnR5IGFjY2VwdHMgdGhlIHRlcm1zIGFuZAorY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgYW55IG90aGVyIHRlcm1zIGFuZCBjb25kaXRpb25zIHVwb24gd2hpY2ggeW91CitsZWdhbGx5IHB1cmNoYXNlZCBhIGxpY2Vuc2UgdG8gdGhlIFNvZnR3YXJlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZywgeW91CittYXkgbm90IHRyYW5zZmVyIGVkdWNhdGlvbiwgcHJlLXJlbGVhc2UsIG9yIG5vdCBmb3IgcmVzYWxlIGNvcGllcyBvZiB0aGUKK1NvZnR3YXJlLgorCisKKzUuIE11bHRpcGxlIEVudmlyb25tZW50IFNvZnR3YXJlIC8gTXVsdGlwbGUgTGFuZ3VhZ2UgU29mdHdhcmUgLyBEdWFsIE1lZGlhCitTb2Z0d2FyZSAvIE11bHRpcGxlIENvcGllcy8gQnVuZGxlcyAvIFVwZGF0ZXMuIElmIHRoZSBTb2Z0d2FyZSBzdXBwb3J0cworbXVsdGlwbGUgcGxhdGZvcm1zIG9yIGxhbmd1YWdlcywgaWYgeW91IHJlY2VpdmUgdGhlIFNvZnR3YXJlIG9uIG11bHRpcGxlIG1lZGlhLAoraWYgeW91IG90aGVyd2lzZSByZWNlaXZlIG11bHRpcGxlIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIG9yIGlmIHlvdSByZWNlaXZlZAordGhlIFNvZnR3YXJlIGJ1bmRsZWQgd2l0aCBvdGhlciBzb2Z0d2FyZSwgdGhlIHRvdGFsIG51bWJlciBvZiB5b3VyIGNvbXB1dGVycyBvbgord2hpY2ggYWxsIHZlcnNpb25zIG9mIHRoZSBTb2Z0d2FyZSBhcmUgaW5zdGFsbGVkIG1heSBub3QgZXhjZWVkIHRoZSBQZXJtaXR0ZWQKK051bWJlci4gWW91IG1heSBub3QsIHJlbnQsIGxlYXNlLCBzdWJsaWNlbnNlLCBsZW5kIG9yIHRyYW5zZmVyIGFueSB2ZXJzaW9ucyBvcgorY29waWVzIG9mIHN1Y2ggU29mdHdhcmUgeW91IGRvIG5vdCBVc2UuIElmIHRoZSBTb2Z0d2FyZSBpcyBhbiBVcGRhdGUgdG8gYQorcHJldmlvdXMgdmVyc2lvbiBvZiB0aGUgU29mdHdhcmUsIHlvdSBtdXN0IHBvc3Nlc3MgYSB2YWxpZCBsaWNlbnNlIHRvIHN1Y2gKK3ByZXZpb3VzIHZlcnNpb24gaW4gb3JkZXIgdG8gVXNlIHRoZSBVcGRhdGUuICBZb3UgbWF5IGNvbnRpbnVlIHRvIFVzZSB0aGUKK3ByZXZpb3VzIHZlcnNpb24gb2YgdGhlIFNvZnR3YXJlIG9uIHlvdXIgY29tcHV0ZXIgYWZ0ZXIgeW91IHJlY2VpdmUgdGhlIFVwZGF0ZQordG8gYXNzaXN0IHlvdSBpbiB0aGUgdHJhbnNpdGlvbiB0byB0aGUgVXBkYXRlLCBwcm92aWRlZCB0aGF0OiB0aGUgVXBkYXRlIGFuZAordGhlIHByZXZpb3VzIHZlcnNpb24gYXJlIGluc3RhbGxlZCBvbiB0aGUgc2FtZSBjb21wdXRlcjsgdGhlIHByZXZpb3VzIHZlcnNpb24KK29yIGNvcGllcyB0aGVyZW9mIGFyZSBub3QgdHJhbnNmZXJyZWQgdG8gYW5vdGhlciBwYXJ0eSBvciBjb21wdXRlciB1bmxlc3MgYWxsCitjb3BpZXMgb2YgdGhlIFVwZGF0ZSBhcmUgYWxzbyB0cmFuc2ZlcnJlZCB0byBzdWNoIHBhcnR5IG9yIGNvbXB1dGVyOyBhbmQgeW91CithY2tub3dsZWRnZSB0aGF0IGFueSBvYmxpZ2F0aW9uIEFkb2JlIG1heSBoYXZlIHRvIHN1cHBvcnQgdGhlIHByZXZpb3VzIHZlcnNpb24KK29mIHRoZSBTb2Z0d2FyZSBtYXkgYmUgZW5kZWQgdXBvbiBhdmFpbGFiaWxpdHkgb2YgdGhlIFVwZGF0ZS4KKworCis2LiAgTk8gV0FSUkFOVFkuICBUaGUgU29mdHdhcmUgaXMgYmVpbmcgZGVsaXZlcmVkIHRvIHlvdSAiQVMgSVMiIGFuZCBBZG9iZQorbWFrZXMgbm8gd2FycmFudHkgYXMgdG8gaXRzIHVzZSBvciBwZXJmb3JtYW5jZS4gIEFET0JFIEFORCBJVFMgU1VQUExJRVJTIERPIE5PVAorQU5EIENBTk5PVCBXQVJSQU5UIFRIRSBQRVJGT1JNQU5DRSBPUiBSRVNVTFRTIFlPVSBNQVkgT0JUQUlOIEJZIFVTSU5HIFRIRQorU09GVFdBUkUuICBFWENFUFQgRk9SIEFOWSBXQVJSQU5UWSwgQ09ORElUSU9OLCBSRVBSRVNFTlRBVElPTiBPUiBURVJNIFRPIFRIRQorRVhURU5UIFRPIFdISUNIIFRIRSBTQU1FIENBTk5PVCBPUiBNQVkgTk9UIEJFIEVYQ0xVREVEIE9SIExJTUlURUQgQlkgTEFXCitBUFBMSUNBQkxFIFRPIFlPVSBJTiBZT1VSIEpVUklTRElDVElPTiwgQURPQkUgQU5EIElUUyBTVVBQTElFUlMgTUFLRSBOTworV0FSUkFOVElFUyBDT05ESVRJT05TLCBSRVBSRVNFTlRBVElPTlMsIE9SIFRFUk1TIChFWFBSRVNTIE9SIElNUExJRUQgV0hFVEhFUiBCWQorU1RBVFVURSwgQ09NTU9OIExBVywgQ1VTVE9NLCBVU0FHRSBPUiBPVEhFUldJU0UpIEFTIFRPIEFOWSBNQVRURVIgSU5DTFVESU5HCitXSVRIT1VUIExJTUlUQVRJT04gTk9OSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZIFJJR0hUUywgTUVSQ0hBTlRBQklMSVRZLAorSU5URUdSQVRJT04sIFNBVElTRkFDVE9SWSBRVUFMSVRZLCBPUiBGSVRORVNTIEZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFLgorCisKKzcuICBQcmUtcmVsZWFzZSBQcm9kdWN0IEFkZGl0aW9uYWwgVGVybXMuICBJZiB0aGUgcHJvZHVjdCB5b3UgaGF2ZSByZWNlaXZlZAord2l0aCB0aGlzIGxpY2Vuc2UgaXMgcHJlLWNvbW1lcmNpYWwgcmVsZWFzZSBvciBiZXRhIFNvZnR3YXJlICgiUHJlLXJlbGVhc2UKK1NvZnR3YXJlIiksIHRoZW4gdGhlIGZvbGxvd2luZyBTZWN0aW9uIGFwcGxpZXMuICBUbyB0aGUgZXh0ZW50IHRoYXQgYW55Citwcm92aXNpb24gaW4gdGhpcyBTZWN0aW9uIGlzIGluIGNvbmZsaWN0IHdpdGggYW55IG90aGVyIHRlcm0gb3IgY29uZGl0aW9uIGluCit0aGlzIEFncmVlbWVudCwgdGhpcyBTZWN0aW9uIHNoYWxsIHN1cGVyY2VkZSBzdWNoIG90aGVyIHRlcm0ocykgYW5kCitjb25kaXRpb24ocykgd2l0aCByZXNwZWN0IHRvIHRoZSBQcmUtcmVsZWFzZSBTb2Z0d2FyZSwgYnV0IG9ubHkgdG8gdGhlIGV4dGVudAorbmVjZXNzYXJ5IHRvIHJlc29sdmUgdGhlIGNvbmZsaWN0LiBZb3UgYWNrbm93bGVkZ2UgdGhhdCB0aGUgU29mdHdhcmUgaXMgYQorcHJlLXJlbGVhc2UgdmVyc2lvbiwgZG9lcyBub3QgcmVwcmVzZW50IGZpbmFsIHByb2R1Y3QgZnJvbSBBZG9iZSwgYW5kIG1heQorY29udGFpbiBidWdzLCBlcnJvcnMgYW5kIG90aGVyIHByb2JsZW1zIHRoYXQgY291bGQgY2F1c2Ugc3lzdGVtIG9yIG90aGVyCitmYWlsdXJlcyBhbmQgZGF0YSBsb3NzLiBDb25zZXF1ZW50bHksIHRoZSBQcmUtcmVsZWFzZSBTb2Z0d2FyZSBpcyBwcm92aWRlZCB0bworeW91ICJBUy1JUyIsIGFuZCBBZG9iZSBkaXNjbGFpbXMgYW55IHdhcnJhbnR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byB5b3UKK29mIGFueSBraW5kLiBXSEVSRSBMRUdBTExZIExJQUJJTElUWSBDQU5OT1QgQkUgRVhDTFVERUQgRk9SIFBSRS1SRUxFQVNFCitTT0ZUV0FSRSwgQlVUIElUIE1BWSBCRSBMSU1JVEVELCBBRE9CRSdTIExJQUJJTElUWSBBTkQgVEhBVCBPRiBJVFMgU1VQUExJRVJTCitTSEFMTCBCRSBMSU1JVEVEIFRPIFRIRSBTVU0gT0YgRklGVFkgRE9MTEFSUyAoVS5TLiAkNTApIElOIFRPVEFMLiBZb3UKK2Fja25vd2xlZGdlIHRoYXQgQWRvYmUgaGFzIG5vdCBwcm9taXNlZCBvciBndWFyYW50ZWVkIHRvIHlvdSB0aGF0IFByZS1yZWxlYXNlCitTb2Z0d2FyZSB3aWxsIGJlIGFubm91bmNlZCBvciBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgaW4gdGhlIGZ1dHVyZSwgdGhhdAorQWRvYmUgaGFzIG5vIGV4cHJlc3Mgb3IgaW1wbGllZCBvYmxpZ2F0aW9uIHRvIHlvdSB0byBhbm5vdW5jZSBvciBpbnRyb2R1Y2UgdGhlCitQcmUtcmVsZWFzZSBTb2Z0d2FyZSBhbmQgdGhhdCBBZG9iZSBtYXkgbm90IGludHJvZHVjZSBhIHByb2R1Y3Qgc2ltaWxhciB0byBvcgorY29tcGF0aWJsZSB3aXRoIHRoZSBQcmUtcmVsZWFzZSBTb2Z0d2FyZS4gQWNjb3JkaW5nbHksIHlvdSBhY2tub3dsZWRnZSB0aGF0IGFueQorcmVzZWFyY2ggb3IgZGV2ZWxvcG1lbnQgdGhhdCB5b3UgcGVyZm9ybSByZWdhcmRpbmcgdGhlIFByZS1yZWxlYXNlIFNvZnR3YXJlIG9yCithbnkgcHJvZHVjdCBhc3NvY2lhdGVkIHdpdGggdGhlIFByZS1yZWxlYXNlIFNvZnR3YXJlIGlzIGRvbmUgZW50aXJlbHkgYXQgeW91cgorb3duIHJpc2suIER1cmluZyB0aGUgdGVybSBvZiB0aGlzIEFncmVlbWVudCwgaWYgcmVxdWVzdGVkIGJ5IEFkb2JlLCB5b3Ugd2lsbAorcHJvdmlkZSBmZWVkYmFjayB0byBBZG9iZSByZWdhcmRpbmcgdGVzdGluZyBhbmQgdXNlIG9mIHRoZSBQcmUtcmVsZWFzZQorU29mdHdhcmUsIGluY2x1ZGluZyBlcnJvciBvciBidWcgcmVwb3J0cy4gSWYgeW91IGhhdmUgYmVlbiBwcm92aWRlZCB0aGUKK1ByZS1yZWxlYXNlIFNvZnR3YXJlIHB1cnN1YW50IHRvIGEgc2VwYXJhdGUgd3JpdHRlbiBhZ3JlZW1lbnQsIHN1Y2ggYXMgdGhlCitBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZCBTZXJpYWwgQWdyZWVtZW50IGZvciBVbnJlbGVhc2VkIFByb2R1Y3RzLCB5b3VyIHVzZQorb2YgdGhlIFNvZnR3YXJlIGlzIGFsc28gZ292ZXJuZWQgYnkgc3VjaCBhZ3JlZW1lbnQuIFlvdSBhZ3JlZSB0aGF0IHlvdSBtYXkgbm90CithbmQgY2VydGlmeSB0aGF0IHlvdSB3aWxsIG5vdCBzdWJsaWNlbnNlLCBsZWFzZSwgbG9hbiwgcmVudCwgb3IgdHJhbnNmZXIgdGhlCitQcmUtcmVsZWFzZSBTb2Z0d2FyZS4gVXBvbiByZWNlaXB0IG9mIGEgbGF0ZXIgdW5yZWxlYXNlZCB2ZXJzaW9uIG9mIHRoZQorUHJlLXJlbGVhc2UgU29mdHdhcmUgb3IgcmVsZWFzZSBieSBBZG9iZSBvZiBhIHB1YmxpY2x5IHJlbGVhc2VkIGNvbW1lcmNpYWwKK3ZlcnNpb24gb2YgdGhlIFNvZnR3YXJlLCB3aGV0aGVyIGFzIGEgc3RhbmQtYWxvbmUgcHJvZHVjdCBvciBhcyBwYXJ0IG9mIGEKK2xhcmdlciBwcm9kdWN0LCB5b3UgYWdyZWUgdG8gcmV0dXJuIG9yIGRlc3Ryb3kgYWxsIGVhcmxpZXIgUHJlLXJlbGVhc2UgU29mdHdhcmUKK3JlY2VpdmVkIGZyb20gQWRvYmUgYW5kIHRvIGFiaWRlIGJ5IHRoZSB0ZXJtcyBvZiB0aGUgRW5kIFVzZXIgTGljZW5zZSBBZ3JlZW1lbnQKK2ZvciBhbnkgc3VjaCBsYXRlciB2ZXJzaW9ucyBvZiB0aGUgUHJlLXJlbGVhc2UgU29mdHdhcmUuIE5vdHdpdGhzdGFuZGluZworYW55dGhpbmcgaW4gdGhpcyBTZWN0aW9uIHRvIHRoZSBjb250cmFyeSwgaWYgeW91IGFyZSBsb2NhdGVkIG91dHNpZGUgdGhlIFVuaXRlZAorU3RhdGVzIG9mIEFtZXJpY2EsIHlvdSBhZ3JlZSB0aGF0IHlvdSB3aWxsIHJldHVybiBvciBkZXN0cm95IGFsbCB1bnJlbGVhc2VkCit2ZXJzaW9ucyBvZiB0aGUgUHJlLXJlbGVhc2UgU29mdHdhcmUgd2l0aGluIHRoaXJ0eSAoMzApIGRheXMgb2YgdGhlIGNvbXBsZXRpb24KK29mIHlvdXIgdGVzdGluZyBvZiB0aGUgU29mdHdhcmUgd2hlbiBzdWNoIGRhdGUgaXMgZWFybGllciB0aGFuIHRoZSBkYXRlIGZvcgorQWRvYmUncyBmaXJzdCBjb21tZXJjaWFsIHNoaXBtZW50IG9mIHRoZSBwdWJsaWNseSByZWxlYXNlZCAoY29tbWVyY2lhbCkKK1NvZnR3YXJlLgorCisKKzguIExJTUlUQVRJT04gT0YgTElBQklMSVRZLiBJTiBOTyBFVkVOVCBXSUxMIEFET0JFIE9SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFCitUTyBZT1UgRk9SIEFOWSBEQU1BR0VTLCBDTEFJTVMgT1IgQ09TVFMgV0hBVFNPRVZFUiBPUiBBTlkgQ09OU0VRVUVOVElBTCwKK0lORElSRUNULCBJTkNJREVOVEFMIERBTUFHRVMsIE9SIEFOWSBMT1NUIFBST0ZJVFMgT1IgTE9TVCBTQVZJTkdTLCBFVkVOIElGIEFOCitBRE9CRSBSRVBSRVNFTlRBVElWRSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIExPU1MsIERBTUFHRVMsCitDTEFJTVMgT1IgQ09TVFMgT1IgRk9SIEFOWSBDTEFJTSBCWSBBTlkgVEhJUkQgUEFSVFkuICBUSEUgRk9SRUdPSU5HIExJTUlUQVRJT05TCitBTkQgRVhDTFVTSU9OUyBBUFBMWSBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVyBJTiBZT1VSCitKVVJJU0RJQ1RJT04uICBBRE9CRSdTIEFHR1JFR0FURSAgTElBQklMSVRZIEFORCBUSEFUIE9GIElUUyBTVVBQTElFUlMgIFVOREVSIE9SCitJTiBDT05ORUNUSU9OIFdJVEggVEhJUyBBR1JFRU1FTlQgU0hBTEwgQkUgTElNSVRFRCBUTyBUSEUgQU1PVU5UIFBBSUQgRk9SIFRIRQorU09GVFdBUkUsIElGIEFOWS4gTm90aGluZyBjb250YWluZWQgaW4gdGhpcyBBZ3JlZW1lbnQgbGltaXRzIEFkb2JlJ3MgbGlhYmlsaXR5Cit0byB5b3UgaW4gdGhlIGV2ZW50IG9mIGRlYXRoIG9yIHBlcnNvbmFsIGluanVyeSByZXN1bHRpbmcgZnJvbSBBZG9iZSdzCituZWdsaWdlbmNlIG9yIGZvciB0aGUgdG9ydCBvZiBkZWNlaXQgKGZyYXVkKS4gQWRvYmUgaXMgYWN0aW5nIG9uIGJlaGFsZiBvZiBpdHMKK3N1cHBsaWVycyBmb3IgdGhlIHB1cnBvc2Ugb2YgZGlzY2xhaW1pbmcsIGV4Y2x1ZGluZyBhbmQvb3IgbGltaXRpbmcKK29ibGlnYXRpb25zLCB3YXJyYW50aWVzIGFuZCBsaWFiaWxpdHkgYXMgcHJvdmlkZWQgaW4gdGhpcyBBZ3JlZW1lbnQsIGJ1dCBpbiBubworb3RoZXIgcmVzcGVjdHMgYW5kIGZvciBubyBvdGhlciBwdXJwb3NlLiBGb3IgZnVydGhlciBpbmZvcm1hdGlvbiwgcGxlYXNlIHNlZQordGhlIGp1cmlzZGljdGlvbiBzcGVjaWZpYyBpbmZvcm1hdGlvbiBhdCB0aGUgZW5kIG9mIHRoaXMgQWdyZWVtZW50LCBpZiBhbnksIG9yCitjb250YWN0IEFkb2JlJ3MgQ3VzdG9tZXIgU3VwcG9ydCBEZXBhcnRtZW50LgorCisKKzkuIEV4cG9ydCBSdWxlcy4gWW91IGFncmVlIHRoYXQgdGhlIFNvZnR3YXJlIHdpbGwgbm90IGJlIHNoaXBwZWQsIHRyYW5zZmVycmVkCitvciBleHBvcnRlZCBpbnRvIGFueSBjb3VudHJ5IG9yIHVzZWQgaW4gYW55IG1hbm5lciBwcm9oaWJpdGVkIGJ5IHRoZSBVbml0ZWQKK1N0YXRlcyBFeHBvcnQgQWRtaW5pc3RyYXRpb24gQWN0IG9yIGFueSBvdGhlciBleHBvcnQgbGF3cywgcmVzdHJpY3Rpb25zIG9yCityZWd1bGF0aW9ucyAoY29sbGVjdGl2ZWx5IHRoZSAiRXhwb3J0IExhd3MiKS4gSW4gYWRkaXRpb24sIGlmIHRoZSBTb2Z0d2FyZSBpcworaWRlbnRpZmllZCBhcyBleHBvcnQgY29udHJvbGxlZCBpdGVtcyB1bmRlciB0aGUgRXhwb3J0IExhd3MsIHlvdSByZXByZXNlbnQgYW5kCit3YXJyYW50IHRoYXQgeW91IGFyZSBub3QgYSBjaXRpemVuLCBvciBvdGhlcndpc2UgbG9jYXRlZCB3aXRoaW4sIGFuIGVtYmFyZ29lZAorbmF0aW9uIChpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIElyYW4sIElyYXEsIFN5cmlhLCBTdWRhbiwgTGlieWEsIEN1YmEsCitOb3J0aCBLb3JlYSwgYW5kIFNlcmJpYSkgYW5kIHRoYXQgeW91IGFyZSBub3Qgb3RoZXJ3aXNlIHByb2hpYml0ZWQgdW5kZXIgdGhlCitFeHBvcnQgTGF3cyBmcm9tIHJlY2VpdmluZyB0aGUgU29mdHdhcmUuICAgQWxsIHJpZ2h0cyB0byBVc2UgdGhlIFNvZnR3YXJlIGFyZQorZ3JhbnRlZCBvbiBjb25kaXRpb24gdGhhdCBzdWNoIHJpZ2h0cyBhcmUgZm9yZmVpdGVkIGlmIHlvdSBmYWlsIHRvIGNvbXBseSB3aXRoCit0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQuCisKKworMTAuIEdvdmVybmluZyBMYXcuIFRoaXMgQWdyZWVtZW50IHdpbGwgYmUgZ292ZXJuZWQgYnkgYW5kIGNvbnN0cnVlZCBpbgorYWNjb3JkYW5jZSB3aXRoIHRoZSBzdWJzdGFudGl2ZSBsYXdzIGluIGZvcmNlOiAoYSkgaW4gdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEsCitpZiBhIGxpY2Vuc2UgdG8gdGhlIFNvZnR3YXJlIGlzIHB1cmNoYXNlZCB3aGVuIHlvdSBhcmUgaW4gdGhlIFVuaXRlZCBTdGF0ZXMsCitDYW5hZGEsIG9yIE1leGljbzsgb3IgKGIpIGluIEphcGFuLCBpZiBhIGxpY2Vuc2UgdG8gdGhlIFNvZnR3YXJlIGlzIHB1cmNoYXNlZAord2hlbiB5b3UgYXJlIGluIEphcGFuLCBDaGluYSwgS29yZWEsIG9yIG90aGVyIFNvdXRoZWFzdCBBc2lhbiBjb3VudHJ5IHdoZXJlIGFsbAorb2ZmaWNpYWwgbGFuZ3VhZ2VzIGFyZSB3cml0dGVuIGluIGVpdGhlciBhbiBpZGVvZ3JhcGhpYyBzY3JpcHQgKGUuZy4sIGhhbnppLAora2FuamksIG9yIGhhbmphKSwgYW5kL29yIG90aGVyIHNjcmlwdCBiYXNlZCB1cG9uIG9yIHNpbWlsYXIgaW4gc3RydWN0dXJlIHRvIGFuCitpZGVvZ3JhcGhpYyBzY3JpcHQsIHN1Y2ggYXMgaGFuZ3VsIG9yIGthbmE7IG9yIChjKSB0aGUgTmV0aGVybGFuZHMsIGlmIGEKK2xpY2Vuc2UgdG8gdGhlIFNvZnR3YXJlIGlzIHB1cmNoYXNlZCB3aGVuIHlvdSBhcmUgaW4gYW55IG90aGVyIGp1cmlzZGljdGlvbiBub3QKK2Rlc2NyaWJlZCBhYm92ZS4gVGhlIHJlc3BlY3RpdmUgY291cnRzIG9mIFNhbnRhIENsYXJhIENvdW50eSwgQ2FsaWZvcm5pYSB3aGVuCitDYWxpZm9ybmlhIGxhdyBhcHBsaWVzLCBUb2t5byBEaXN0cmljdCBDb3VydCBpbiBKYXBhbiwgd2hlbiBKYXBhbmVzZSBsYXcKK2FwcGxpZXMsIGFuZCB0aGUgY291cnRzIG9mIEFtc3RlcmRhbSwgdGhlIE5ldGhlcmxhbmRzLCB3aGVuIHRoZSBsYXcgb2YgdGhlCitOZXRoZXJsYW5kcyBhcHBsaWVzLCBzaGFsbCBlYWNoIGhhdmUgbm9uLWV4Y2x1c2l2ZSBqdXJpc2RpY3Rpb24gb3ZlciBhbGwKK2Rpc3B1dGVzIHJlbGF0aW5nIHRvIHRoaXMgQWdyZWVtZW50LiBUaGlzIEFncmVlbWVudCB3aWxsIG5vdCBiZSBnb3Zlcm5lZCBieSB0aGUKK2NvbmZsaWN0IG9mIGxhdyBydWxlcyBvZiBhbnkganVyaXNkaWN0aW9uIG9yIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uCitDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMsIHRoZSBhcHBsaWNhdGlvbiBvZiB3aGljaCBpcworZXhwcmVzc2x5IGV4Y2x1ZGVkLgorCisKKzExLiBHZW5lcmFsIFByb3Zpc2lvbnMuIElmIGFueSBwYXJ0IG9mIHRoaXMgQWdyZWVtZW50IGlzIGZvdW5kIHZvaWQgYW5kCit1bmVuZm9yY2VhYmxlLCBpdCB3aWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9mIHRoZSBiYWxhbmNlIG9mIHRoZSBBZ3JlZW1lbnQsCit3aGljaCBzaGFsbCByZW1haW4gdmFsaWQgYW5kIGVuZm9yY2VhYmxlIGFjY29yZGluZyB0byBpdHMgdGVybXMuICBUaGlzCitBZ3JlZW1lbnQgc2hhbGwgbm90IHByZWp1ZGljZSB0aGUgc3RhdHV0b3J5IHJpZ2h0cyBvZiBhbnkgcGFydHkgZGVhbGluZyBhcyBhCitjb25zdW1lci4gVGhpcyBBZ3JlZW1lbnQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgYnkgYSB3cml0aW5nIHNpZ25lZCBieSBhbgorYXV0aG9yaXplZCBvZmZpY2VyIG9mIEFkb2JlLiBVcGRhdGVzIG1heSBiZSBsaWNlbnNlZCB0byB5b3UgYnkgQWRvYmUgd2l0aAorYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgdGVybXMuIFRoaXMgaXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiBBZG9iZSBhbmQKK3lvdSByZWxhdGluZyB0byB0aGUgU29mdHdhcmUgYW5kIGl0IHN1cGVyc2VkZXMgYW55IHByaW9yIHJlcHJlc2VudGF0aW9ucywKK2Rpc2N1c3Npb25zLCB1bmRlcnRha2luZ3MsIGNvbW11bmljYXRpb25zIG9yIGFkdmVydGlzaW5nIHJlbGF0aW5nIHRvIHRoZQorU29mdHdhcmUuCisKKworMTIuIE5vdGljZSB0byBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzLiBUaGUgU29mdHdhcmUgYW5kIERvY3VtZW50YXRpb24gYXJlCisiQ29tbWVyY2lhbCBJdGVtcywiIGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGF0IDQ4IEMuRi5SLiDCpzIuMTAxLCBjb25zaXN0aW5nIG9mCisiQ29tbWVyY2lhbCBDb21wdXRlciBTb2Z0d2FyZSIgYW5kICJDb21tZXJjaWFsIENvbXB1dGVyIFNvZnR3YXJlCitEb2N1bWVudGF0aW9uLCIgYXMgc3VjaCB0ZXJtcyBhcmUgdXNlZCBpbiA0OCBDLkYuUi4gwqcxMi4yMTIgb3IgNDggQy5GLlIuCivCpzIyNy43MjAyLCBhcyBhcHBsaWNhYmxlLiBDb25zaXN0ZW50IHdpdGggNDggQy5GLlIuIMKnMTIuMjEyIG9yIDQ4IEMuRi5SLgorwqfCpzIyNy43MjAyLTEgdGhyb3VnaCAyMjcuNzIwMi00LCBhcyBhcHBsaWNhYmxlLCB0aGUgQ29tbWVyY2lhbCBDb21wdXRlcgorU29mdHdhcmUgYW5kIENvbW1lcmNpYWwgQ29tcHV0ZXIgU29mdHdhcmUgRG9jdW1lbnRhdGlvbiBhcmUgYmVpbmcgbGljZW5zZWQgdG8KK1UuUy4gR292ZXJubWVudCBlbmQgdXNlcnMgKGEpIG9ubHkgYXMgQ29tbWVyY2lhbCBJdGVtcyBhbmQgKGIpIHdpdGggb25seSB0aG9zZQorcmlnaHRzIGFzIGFyZSBncmFudGVkIHRvIGFsbCBvdGhlciBlbmQgdXNlcnMgcHVyc3VhbnQgdG8gdGhlIHRlcm1zIGFuZAorY29uZGl0aW9ucyBoZXJlaW4uIFVucHVibGlzaGVkLXJpZ2h0cyByZXNlcnZlZCB1bmRlciB0aGUgY29weXJpZ2h0IGxhd3Mgb2YgdGhlCitVbml0ZWQgU3RhdGVzLiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZCwgMzQ1IFBhcmsgQXZlbnVlLCBTYW4gSm9zZSwgQ0EKKzk1MTEwLTI3MDQsIFVTQS4gRm9yIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMsIEFkb2JlIGFncmVlcyB0byBjb21wbHkgd2l0aCBhbGwKK2FwcGxpY2FibGUgZXF1YWwgb3Bwb3J0dW5pdHkgbGF3cyBpbmNsdWRpbmcsIGlmIGFwcHJvcHJpYXRlLCB0aGUgcHJvdmlzaW9ucyBvZgorRXhlY3V0aXZlIE9yZGVyIDExMjQ2LCBhcyBhbWVuZGVkLCBTZWN0aW9uIDQwMiBvZiB0aGUgVmlldG5hbSBFcmEgVmV0ZXJhbnMKK1JlYWRqdXN0bWVudCBBc3Npc3RhbmNlIEFjdCBvZiAxOTc0ICgzOCBVU0MgNDIxMiksIGFuZCBTZWN0aW9uIDUwMyBvZiB0aGUKK1JlaGFiaWxpdGF0aW9uIEFjdCBvZiAxOTczLCBhcyBhbWVuZGVkLCBhbmQgdGhlIHJlZ3VsYXRpb25zIGF0IDQxIENGUiBQYXJ0cworNjAtMSB0aHJvdWdoIDYwLTYwLCA2MC0yNTAsIGFuZCA2MC03NDEuICBUaGUgYWZmaXJtYXRpdmUgYWN0aW9uIGNsYXVzZSBhbmQKK3JlZ3VsYXRpb25zIGNvbnRhaW5lZCBpbiB0aGUgcHJlY2VkaW5nIHNlbnRlbmNlIHNoYWxsIGJlIGluY29ycG9yYXRlZCBieQorcmVmZXJlbmNlIGluIHRoaXMgQWdyZWVtZW50LgorCisKKzEzLiBDb21wbGlhbmNlIHdpdGggTGljZW5zZXMuIElmIHlvdSBhcmUgYSBidXNpbmVzcyBvciBvcmdhbml6YXRpb24sIHlvdSBhZ3JlZQordGhhdCB1cG9uIHJlcXVlc3QgZnJvbSBBZG9iZSBvciBBZG9iZSdzIGF1dGhvcmlzZWQgcmVwcmVzZW50YXRpdmUsIHlvdSB3aWxsCit3aXRoaW4gdGhpcnR5ICgzMCkgZGF5cyBmdWxseSBkb2N1bWVudCBhbmQgY2VydGlmeSB0aGF0IHVzZSBvZiBhbnkgYW5kIGFsbAorQWRvYmUgU29mdHdhcmUgYXQgdGhlIHRpbWUgb2YgdGhlIHJlcXVlc3QgaXMgaW4gY29uZm9ybWl0eSB3aXRoIHlvdXIgdmFsaWQKK2xpY2Vuc2VzIGZyb20gQWRvYmUuCisKKworSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyByZWdhcmRpbmcgdGhpcyBBZ3JlZW1lbnQgb3IgaWYgeW91IHdpc2ggdG8gcmVxdWVzdAorYW55IGluZm9ybWF0aW9uIGZyb20gQWRvYmUgcGxlYXNlIHVzZSB0aGUgYWRkcmVzcyBhbmQgY29udGFjdCBpbmZvcm1hdGlvbgoraW5jbHVkZWQgd2l0aCB0aGlzIHByb2R1Y3QgdG8gY29udGFjdCB0aGUgQWRvYmUgb2ZmaWNlIHNlcnZpbmcgeW91cgoranVyaXNkaWN0aW9uLgorCisKK0Fkb2JlLCBBY3JvYmF0LCBBY3JvYmF0IFJlYWRlciwgYW5kIEFmdGVyIEVmZmVjdHMgYXJlIGVpdGhlciByZWdpc3RlcmVkCit0cmFkZW1hcmtzIG9yIHRyYWRlbWFya3Mgb2YgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQgaW4gdGhlIFVuaXRlZCBTdGF0ZXMKK2FuZC9vciBvdGhlciBjb3VudHJpZXMuCisKKworCisKK1NWR1JlYWRlcl9XV0VVTEFfRW5nbGlzaF8wOC4wOS4wMV8xMToxNQpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvQWRvYmVGbGFzaC0xMC4zIGIvbGljZW5zZXMvQWRvYmVGbGFzaC0xMC4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2OThkZjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9BZG9iZUZsYXNoLTEwLjMKQEAgLTAsMCArMSw0NzggQEAKK2h0dHA6Ly93d3cuYWRvYmUuY29tL3Byb2R1Y3RzL2V1bGFzL3BsYXllcnMvZmxhc2gvCisKK0VuZCBVc2VyIExpY2Vuc2UgQWdyZWVtZW50CisKK0FET0JFwq4gU09GVFdBUkUgTElDRU5TRSBBR1JFRU1FTlQKKworICAgTk9USUNFIFRPIFVTRVI6IFBMRUFTRSBSRUFEIFRISVMgQ09OVFJBQ1QgQ0FSRUZVTExZLiBCWSBVU0lORywgQ09QWUlORyBPUgorICAgRElTVFJJQlVUSU5HIEFMTCBPUiBBTlkgUE9SVElPTiBPRiBUSEUgQURPQkUgU09GVFdBUkUgKCJTT0ZUV0FSRSIpIFlPVQorICAgQUNDRVBUICBBTEwgIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCwgSU5DTFVESU5HLCBJTgorICAgUEFSVElDVUxBUiBUSEUgTElNSVRBVElPTlMgT046IFVTRSBDT05UQUlORUQgSU4gU0VDVElPTiAyOyBUUkFOU0ZFUkFCSUxJVFkKKyAgIElOIFNFQ1RJT04gNDsgV0FSUkFOVFkgSU4gU0VDVElPTiA3OyBBTkQgTElBQklMSVRZIElOIFNFQ1RJT04gOC4gWU9VIEFHUkVFCisgICBUSEFUIFRISVMgQUdSRUVNRU5UIElTIEVORk9SQ0VBQkxFIExJS0UgQU5ZIFdSSVRURU4gTkVHT1RJQVRFRCBBR1JFRU1FTlQKKyAgIFNJR05FRCBCWSBZT1UuIFRISVMgQUdSRUVNRU5UIElTIEVORk9SQ0VBQkxFIEFHQUlOU1QgWU9VIEFORCBBTlkgTEVHQUwKKyAgIEVOVElUWSBUSEFUIE9CVEFJTkVEIFRIRSBTT0ZUV0FSRSBBTkQgT04gV0hPU0UgQkVIQUxGIElUIElTIFVTRUQuIElGIFlPVSBETworICAgTk9UIEFHUkVFLCBETyBOT1QgVVNFIFRISVMgU09GVFdBUkUuCisKKyAgIEFkb2JlIGFuZCBpdHMgc3VwcGxpZXJzIG93biBhbGwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluIHRoZSBTb2Z0d2FyZS4gQWRvYmUKKyAgIHBlcm1pdHMgeW91IHRvIFVzZSB0aGUgU29mdHdhcmUgb25seSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMKKyAgIEFncmVlbWVudC4gVXNlIG9mIHNvbWUgdGhpcmQgcGFydHkgbWF0ZXJpYWxzIGluY2x1ZGVkIGluIHRoZSBTb2Z0d2FyZSBtYXkgYmUKKyAgIHN1YmplY3QgdG8gb3RoZXIgdGVybXMgYW5kIGNvbmRpdGlvbnMgdHlwaWNhbGx5IGZvdW5kIGluIGEgc2VwYXJhdGUgbGljZW5zZQorICAgYWdyZWVtZW50LCBhIOKAnFJlYWQgTWXigJ0gZmlsZSBsb2NhdGVkIG5lYXIgc3VjaCBtYXRlcmlhbHMgb3IgaW4gdGhlIOKAnFRoaXJkCisgICBQYXJ0eSBTb2Z0d2FyZSBOb3RpY2VzIGFuZC9vciBBZGRpdGlvbmFsIFRlcm1zIGFuZCBDb25kaXRpb25z4oCdIGZvdW5kIGF0CisgICBbOTJdd3d3LmFkb2JlLmNvbS9nby90aGlyZHBhcnR5LworICAgIDEuIERlZmluaXRpb25zLiAiU29mdHdhcmUiIG1lYW5zIChhKSBhbGwgb2YgdGhlIGNvbnRlbnRzIG9mIHRoZSBmaWxlcworICAgICAgIChwcm92aWRlZCBlaXRoZXIgYnkgZWxlY3Ryb25pYyBkb3dubG9hZCwgb24gcGh5c2ljYWwgbWVkaWEgb3IgYW55IG90aGVyCisgICAgICAgbWV0aG9kIG9mIGRpc3RyaWJ1dGlvbiksIGRpc2socyksIENELVJPTShzKSBvciBvdGhlciBtZWRpYSB3aXRoIHdoaWNoCisgICAgICAgdGhpcyBBZ3JlZW1lbnQgaXMgcHJvdmlkZWQsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gKGkpIEFkb2JlIG9yCisgICAgICAgdGhpcmQgIHBhcnR5IGNvbXB1dGVyIGluZm9ybWF0aW9uIG9yIHNvZnR3YXJlLCBpbmNsdWRpbmcgdGhlIEFkb2JlCisgICAgICAgUmVhZGVywq4gKCJBZG9iZSBSZWFkZXIiKSwgQWRvYmUgRmxhc2jCriBQbGF5ZXIsIFNob2Nrd2F2ZcKuIFBsYXllciBhbmQKKyAgICAgICBBdXRob3J3YXJlwq4gUGxheWVyIChjb2xsZWN0aXZlbHksIHRoZSBGbGFzaCwgU2hvY2t3YXZlIGFuZCBBdXRob3J3YXJlCisgICAgICAgcGxheWVycywgIGFyZSB0aGUgIldlYiBQbGF5ZXJzIik7IChpaSkgcmVsYXRlZCBleHBsYW5hdG9yeSB3cml0dGVuCisgICAgICAgbWF0ZXJpYWxzIG9yIGZpbGVzICgiRG9jdW1lbnRhdGlvbiIpOyBhbmQgKGlpaSkgZm9udHM7IGFuZCAoYikgdXBncmFkZXMsCisgICAgICAgbW9kaWZpZWQgdmVyc2lvbnMsIHVwZGF0ZXMsIGFkZGl0aW9ucywgYW5kIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGlmCisgICAgICAgYW55LCAgbGljZW5zZWQgdG8geW91IGJ5IEFkb2JlIChjb2xsZWN0aXZlbHksICJVcGRhdGVzIikuICJVc2UiIG9yCisgICAgICAgIlVzaW5nIiBtZWFucyB0byBhY2Nlc3MsIGluc3RhbGwsIGRvd25sb2FkLCBjb3B5LCBvciBvdGhlcndpc2UgYmVuZWZpdAorICAgICAgIGZyb20gdXNpbmcgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIFNvZnR3YXJlIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUKKyAgICAgICBEb2N1bWVudGF0aW9uLiAgIlBlcm1pdHRlZCAgTnVtYmVyIiBtZWFucyBvbmUgKDEpIHVubGVzcyBvdGhlcndpc2UKKyAgICAgICBpbmRpY2F0ZWQgdW5kZXIgYSB2YWxpZCBsaWNlbnNlIChlLmcuLCB2b2x1bWUgbGljZW5zZSkgZ3JhbnRlZCBieSBBZG9iZS4KKyAgICAgICAiQ29tcHV0ZXIiICBtZWFucyBhbiBlbGVjdHJvbmljIGRldmljZSB0aGF0IGFjY2VwdHMgaW5mb3JtYXRpb24gaW4KKyAgICAgICBkaWdpdGFsIG9yIHNpbWlsYXIgZm9ybSBhbmQgbWFuaXB1bGF0ZXMgaXQgZm9yIGEgc3BlY2lmaWMgcmVzdWx0IGJhc2VkCisgICAgICAgb24gYSBzZXF1ZW5jZSBvZiBpbnN0cnVjdGlvbnMuICJBZG9iZSIgbWVhbnMgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQsCisgICAgICAgYSBEZWxhd2FyZSBjb3Jwb3JhdGlvbiwgMzQ1IFBhcmsgQXZlbnVlLCBTYW4gSm9zZSwgQ2FsaWZvcm5pYSA5NTExMCwgaWYKKyAgICAgICBzdWJzZWN0aW9uIDkoYSkgb2YgdGhpcyBBZ3JlZW1lbnQgYXBwbGllczsgb3RoZXJ3aXNlIGl0IG1lYW5zIEFkb2JlCisgICAgICAgU3lzdGVtcyBTb2Z0d2FyZSBJcmVsYW5kIExpbWl0ZWQsIFVuaXQgMzEwMCwgTGFrZSBEcml2ZSwgQ2l0eSBXZXN0CisgICAgICAgQ2FtcHVzLCBTYWdnYXJ0IEQyNCwgUmVwdWJsaWMgb2YgSXJlbGFuZCwgYSBjb21wYW55IG9yZ2FuaXplZCB1bmRlciB0aGUKKyAgICAgICBsYXdzICBvZiAgSXJlbGFuZCAgYW5kICBhbiBhZmZpbGlhdGUgYW5kIGxpY2Vuc2VlIG9mIEFkb2JlIFN5c3RlbXMKKyAgICAgICBJbmNvcnBvcmF0ZWQuCisgICAgMi4gU29mdHdhcmUgTGljZW5zZS4gSWYgeW91IG9idGFpbmVkIHRoZSBTb2Z0d2FyZSBmcm9tIEFkb2JlIG9yIG9uZSBvZiBpdHMKKyAgICAgICBhdXRob3JpemVkIGxpY2Vuc2VlcywgYW5kIHN1YmplY3QgdG8geW91ciBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mCisgICAgICAgdGhpcyBhZ3JlZW1lbnQgKHRoaXMgIkFncmVlbWVudCIpLCBpbmNsdWRpbmcgdGhlIHJlc3RyaWN0aW9ucyBpbiBTZXRpb24KKyAgICAgICAzLCBBZG9iZSBncmFudHMgdG8geW91IGEgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlIHRvIFVzZSB0aGUgU29mdHdhcmUgZm9yCisgICAgICAgdGhlIHB1cnBvc2VzIGRlc2NyaWJlZCBpbiB0aGUgRG9jdW1lbnRhdGlvbiBhcyBmb2xsb3dzLgorICAgICAgIDIuMSAgR2VuZXJhbCBVc2UuIFlvdSBtYXkgaW5zdGFsbCBhbmQgVXNlIGEgY29weSBvZiB0aGUgU29mdHdhcmUgb24geW91cgorICAgICAgIGNvbXBhdGlibGUgIENvbXB1dGVyLCB1cCB0byB0aGUgUGVybWl0dGVkIE51bWJlciBvZiBjb21wdXRlcnMuIFRoZQorICAgICAgIFNvZnR3YXJlIG1heSBub3QgYmUgc2hhcmVkLCBpbnN0YWxsZWQgb3IgdXNlZCBjb25jdXJyZW50bHkgb24gZGlmZmVyZW50CisgICAgICAgY29tcHV0ZXJzLiBTZWUgU2VjdGlvbiAzIGZvciBpbXBvcnRhbnQgcmVzdHJpY3Rpb25zIG9uIHRoZSBVc2Ugb2YgQWRvYmUKKyAgICAgICBSZWFkZXIgYW5kIFdlYiBQbGF5ZXJzLgorICAgICAgIDIuMiAgU2VydmVyIFVzZSBhbmQgRGlzdHJpYnV0aW9uLgorICAgICAgIDIuMi4xICBZb3UgbWF5IGluc3RhbGwgb25lIGNvcHkgb2YgdGhlIEFkb2JlIFJlYWRlciBvbiBhIGNvbXB1dGVyIGZpbGUKKyAgICAgICBzZXJ2ZXIgd2l0aGluIHlvdXIgaW50ZXJuYWwgbmV0d29yayBmb3IgdGhlIHNvbGUgYW5kIGV4Y2x1c2l2ZSBwdXJwb3NlCisgICAgICAgb2YgKGEpIHVzaW5nIHRoZSBTb2Z0d2FyZSAoZnJvbSBhbiB1bmxpbWl0ZWQgbnVtYmVyIG9mIGNsaWVudCBjb21wdXRlcnMKKyAgICAgICBvbiB5b3VyIGludGVybmFsIG5ldHdvcmspIHZpYSAoaSkgdGhlIE5ldHdvcmsgRmlsZSBTeXN0ZW0gKE5GUykgZm9yIFVOSVgKKyAgICAgICB2ZXJzaW9ucyBvZiB0aGUgU29mdHdhcmUgb3IgKGlpKSBXaW5kb3dzIFRlcm1pbmFsIFNlcnZpY2VzIGFuZCAoYikKKyAgICAgICBhbGxvd2luZyBmb3IgcHJpbnRpbmcgd2l0aGluIHlvdXIgaW50ZXJuYWwgbmV0d29yay4gVW5sZXNzIG90aGVyd2lzZQorICAgICAgIGV4cHJlc3NseSBwZXJtaXR0ZWQgaGVyZXVuZGVyLCBubyBvdGhlciBzZXJ2ZXIgb3IgbmV0d29yayB1c2Ugb2YgdGhlCisgICAgICAgU29mdHdhcmUgaXMgcGVybWl0dGVkLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHVzZSBvZiB0aGUgU29mdHdhcmUKKyAgICAgICAoaSkgZWl0aGVyIGRpcmVjdGx5IG9yIHRocm91Z2ggY29tbWFuZHMsIGRhdGEgb3IgaW5zdHJ1Y3Rpb25zIGZyb20gb3IgdG8KKyAgICAgICBhbm90aGVyIGNvbXB1dGVyIG9yIChpaSkgZm9yIGludGVybmFsIG5ldHdvcmssIGludGVybmV0IG9yIHdlYiBob3N0aW5nCisgICAgICAgc2VydmljZXMuCisgICAgICAgMi4yLjIgIEZvciBpbmZvcm1hdGlvbiBvbiBob3cgdG8gZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgb24gdGFuZ2libGUKKyAgICAgICBtZWRpYSAgb3IgdGhyb3VnaCBhbiBpbnRlcm5hbCBuZXR3b3JrIHBsZWFzZSByZWZlciB0byB0aGUgc2VjdGlvbnMKKyAgICAgICBlbnRpdGxlZCAgICAgIkhvdyAgICAgdG8gICAgIERpc3RyaWJ1dGUgICAgIEFkb2JlICAgIFJlYWRlciIgICAgYXQKKyAgICAgICBbOTNdaHR0cDovL3d3dy5hZG9iZS5jb20vcHJvZHVjdHMvYWNyb2JhdC9kaXN0cmlidXRlLmh0bWw7ICAgICAgb3IKKyAgICAgICAiRGlzdHJpYnV0ZSBNYWNyb21lZGlhIFdlYiBQbGF5ZXJzIiBhdAorICAgICAgIFs5NF1odHRwOi8vd3d3LmFkb2JlLmNvbS9saWNlbnNpbmcuCisgICAgICAgMi4zICBCYWNrdXAgQ29weS4gWW91IG1heSBtYWtlIG9uZSBiYWNrdXAgY29weSBvZiB0aGUgU29mdHdhcmUsIHByb3ZpZGVkCisgICAgICAgeW91ciBiYWNrdXAgY29weSBpcyBub3QgaW5zdGFsbGVkIG9yIHVzZWQgb24gYW55IENvbXB1dGVyLiBZb3UgbWF5IG5vdAorICAgICAgIHRyYW5zZmVyIHRoZSByaWdodHMgdG8gYSBiYWNrdXAgY29weSB1bmxlc3MgeW91IHRyYW5zZmVyIGFsbCByaWdodHMgaW4KKyAgICAgICB0aGUgU29mdHdhcmUgYXMgcHJvdmlkZWQgdW5kZXIgU2VjdGlvbiA0LgorICAgICAgIDIuNCAgUG9ydGFibGUgb3IgSG9tZSBDb21wdXRlciBVc2UuIElmIGFuZCBvbmx5IGlmIHRoZSBTb2Z0d2FyZSBpcyBBZG9iZQorICAgICAgIFJlYWRlciwgaW4gYWRkaXRpb24gdG8gdGhlIHNpbmdsZSBjb3B5IHBlcm1pdHRlZCB1bmRlciBTZWN0aW9ucyAyLjEgYW5kCisgICAgICAgMi4yLCB0aGUgcHJpbWFyeSB1c2VyIG9mIHRoZSBDb21wdXRlciBvbiB3aGljaCB0aGUgU29mdHdhcmUgaXMgaW5zdGFsbGVkCisgICAgICAgbWF5IG1ha2UgYSBzZWNvbmQgY29weSBvZiB0aGUgU29mdHdhcmUgZm9yIGhpcyBvciBoZXIgZXhjbHVzaXZlIFVzZSBvbgorICAgICAgIGVpdGhlciBhIHBvcnRhYmxlIENvbXB1dGVyIG9yIGEgQ29tcHV0ZXIgbG9jYXRlZCBhdCBoaXMgb3IgaGVyIGhvbWUsCisgICAgICAgcHJvdmlkZWQgdGhlIFNvZnR3YXJlIG9uIHRoZSBwb3J0YWJsZSBvciBob21lIENvbXB1dGVyIGlzIG5vdCB1c2VkIGF0CisgICAgICAgdGhlIHNhbWUgdGltZSBhcyB0aGUgU29mdHdhcmUgb24gdGhlIHByaW1hcnkgY29tcHV0ZXIuCisgICAgICAgMi41ICBObyBNb2RpZmljYXRpb24uCisgICAgICAgMi41LjEgIFlvdSBtYXkgbm90IG1vZGlmeSwgYWRhcHQsIHRyYW5zbGF0ZSBvciBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcworICAgICAgIGJhc2VkICB1cG9uIHRoZSBTb2Z0d2FyZS4gWW91IG1heSBub3QgcmV2ZXJzZSBlbmdpbmVlciwgZGVjb21waWxlLAorICAgICAgIGRpc2Fzc2VtYmxlIG9yIG90aGVyd2lzZSBhdHRlbXB0IHRvIGRpc2NvdmVyIHRoZSBzb3VyY2UgY29kZSBvZiB0aGUKKyAgICAgICBTb2Z0d2FyZSAgZXhjZXB0ICB0byAgdGhlIGV4dGVudCB5b3UgbWF5IGJlIGV4cHJlc3NseSBwZXJtaXR0ZWQgdG8KKyAgICAgICBkZWNvbXBpbGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IGlzIGVzc2VudGlhbCB0byBkbyBzbyBpbiBvcmRlciB0bworICAgICAgIGFjaGlldmUgb3BlcmFiaWxpdHkgb2YgdGhlIFNvZnR3YXJlIHdpdGggYW5vdGhlciBzb2Z0d2FyZSBwcm9ncmFtLCBhbmQKKyAgICAgICB5b3UgaGF2ZSBmaXJzdCByZXF1ZXN0ZWQgQWRvYmUgdG8gcHJvdmlkZSB0aGUgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IHRvCisgICAgICAgYWNoaWV2ZSAgc3VjaCAgb3BlcmFiaWxpdHkgYW5kIEFkb2JlIGhhcyBub3QgbWFkZSBzdWNoIGluZm9ybWF0aW9uCisgICAgICAgYXZhaWxhYmxlLiBBZG9iZSBoYXMgdGhlIHJpZ2h0IHRvIGltcG9zZSByZWFzb25hYmxlIGNvbmRpdGlvbnMgYW5kIHRvCisgICAgICAgcmVxdWVzdCBhIHJlYXNvbmFibGUgZmVlIGJlZm9yZSBwcm92aWRpbmcgc3VjaCBpbmZvcm1hdGlvbi4gQW55IHN1Y2gKKyAgICAgICBpbmZvcm1hdGlvbiBzdXBwbGllZCBieSBBZG9iZSBhbmQgYW55IGluZm9ybWF0aW9uIG9idGFpbmVkIGJ5IHlvdSBieQorICAgICAgIHN1Y2ggcGVybWl0dGVkIGRlY29tcGlsYXRpb24gbWF5IG9ubHkgYmUgdXNlZCBieSB5b3UgZm9yIHRoZSBwdXJwb3NlCisgICAgICAgZGVzY3JpYmVkIGhlcmVpbiBhbmQgbWF5IG5vdCBiZSBkaXNjbG9zZWQgdG8gYW55IHRoaXJkIHBhcnR5IG9yIHVzZWQgdG8KKyAgICAgICBjcmVhdGUgYW55IHNvZnR3YXJlIHdoaWNoIGlzIHN1YnN0YW50aWFsbHkgc2ltaWxhciB0byB0aGUgZXhwcmVzc2lvbiBvZgorICAgICAgIHRoZSBTb2Z0d2FyZS4gUmVxdWVzdHMgZm9yIGluZm9ybWF0aW9uIHNob3VsZCBiZSBkaXJlY3RlZCB0byB0aGUgQWRvYmUKKyAgICAgICBDdXN0b21lciBTdXBwb3J0IERlcGFydG1lbnQuCisgICAgICAgMi41LjIgIEFzIGFuIGV4Y2VwdGlvbiB0byB0aGUgYWJvdmUsIHlvdSBtYXkgY3VzdG9taXplIG9yIGV4dGVuZCB0aGUKKyAgICAgICBmdW5jdGlvbmFsaXR5IG9mIHRoZSBpbnN0YWxsZXIgZm9yIHRoZSBBZG9iZSBSZWFkZXIgYXMgc3BlY2lmaWNhbGx5CisgICAgICAgYWxsb3dlZCBieSBpbnN0cnVjdGlvbnMgZm91bmQgYXQKKyAgICAgICBbOTVdaHR0cDovL3d3dy5hZG9iZS5jb20vc3VwcG9ydC9tYWluLmh0bWwgICAgICAgICAgICAgICAgICAgICAgb3IKKyAgICAgICBbOTZdaHR0cDovL3BhcnRuZXJzLmFkb2JlLmNvbSAoZS5nLiwgaW5zdGFsbGF0aW9uIG9mIGFkZGl0aW9uYWwgcGx1Zy1pbgorICAgICAgIGFuZCBoZWxwIGZpbGVzKS4gWW91IG1heSBub3Qgb3RoZXJ3aXNlIGFsdGVyIG9yIG1vZGlmeSB0aGUgU29mdHdhcmUgb3IKKyAgICAgICBjcmVhdGUgYSBuZXcgaW5zdGFsbGVyIGZvciB0aGUgU29mdHdhcmUuIFRoZSBBZG9iZSBSZWFkZXIgaXMgbGljZW5zZWQKKyAgICAgICBhbmQgZGlzdHJpYnV0ZWQgYnkgQWRvYmUgZm9yIHZpZXdpbmcsIGRpc3RyaWJ1dGluZyBhbmQgc2hhcmluZyBQREYKKyAgICAgICBmaWxlcy4KKyAgICAgICAyLjYgIFRoaXJkIFBhcnR5IFdlYnNpdGUgQWNjZXNzLiBUaGUgU29mdHdhcmUgbWF5IGFsbG93IHlvdSB0byBhY2Nlc3MKKyAgICAgICB0aGlyZCBwYXJ0eSB3ZWJzaXRlcyAoIlRoaXJkIFBhcnR5IFNpdGVzIikuIFlvdXIgYWNjZXNzIHRvIGFuZCB1c2Ugb2YKKyAgICAgICBhbnkgVGhpcmQgUGFydHkgU2l0ZXMsIGluY2x1ZGluZyBhbnkgZ29vZHMsIHNlcnZpY2VzIG9yIGluZm9ybWF0aW9uIG1hZGUKKyAgICAgICBhdmFpbGFibGUgZnJvbSBzdWNoIHNpdGVzLCBpcyBnb3Zlcm5lZCBieSB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm91bmQKKyAgICAgICBhdCBlYWNoIFRoaXJkIFBhcnR5IFNpdGUsIGlmIGFueS4gVGhpcmQgUGFydHkgU2l0ZXMgYXJlIG5vdCBvd25lZCBvcgorICAgICAgIG9wZXJhdGVkIGJ5IEFkb2JlLiBZT1VSIFVTRSBPRiBUSElSRCBQQVJUWSBTSVRFUyBJUyBBVCBZT1VSIE9XTiBSSVNLLgorICAgICAgIEFET0JFIE1BS0VTIE5PIFdBUlJBTlRJRVMsIENPTkRJVElPTlMsIElOREVNTklUSUVTLCBSRVBSRVNFTlRBVElPTlMgT1IKKyAgICAgICBURVJNUywgRVhQUkVTUyBPUiBJTVBMSUVELCBXSEVUSEVSIEJZIFNUQVRVVEUsIENPTU1PTiBMQVcsIENVU1RPTSwgVVNBR0UKKyAgICAgICBPUiBPVEhFUldJU0UgQVMgVE8gQU5ZIE9USEVSIE1BVFRFUlMsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8KKyAgICAgICBOT04tSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZIFJJR0hUUywgVElUTEUsIElOVEVHUkFUSU9OLCBBQ0NVUkFDWSwKKyAgICAgICBTRUNVUklUWSwgQVZBSUxBQklMSVRZLCBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MKKyAgICAgICBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRSBXSVRIIFJFU1BFQ1QgVE8gVEhFIFRISVJEIFBBUlRZIFNJVEVTLgorICAgICAgIDIuNyAgQ2VydGlmaWVkIERvY3VtZW50cy4KKyAgICAgICAyLjcuMSAgQ2VydGlmaWVkIERvY3VtZW50cyBhbmQgQ0QgU2VydmljZXMuIFRoZSBTb2Z0d2FyZSBtYXkgYWxsb3cgeW91CisgICAgICAgdG8gdmFsaWRhdGUgQ2VydGlmaWVkIERvY3VtZW50cy4gQSAiQ2VydGlmaWVkIERvY3VtZW50IiBvciDigJxDROKAnSBpcyBhIFBERgorICAgICAgIGZpbGUgdGhhdCBoYXMgYmVlbiBkaWdpdGFsbHkgc2lnbmVkIHVzaW5nIChhKSBhIGNlcnRpZmljYXRlIGFuZCAoYikgYQorICAgICAgIOKAnHByaXZhdGXigJ0gZW5jcnlwdGlvbiBrZXkgdGhhdCBjb3JyZXNwb25kcyB0byB0aGUg4oCccHVibGlj4oCdIGtleSBpbiB0aGUKKyAgICAgICBjZXJ0aWZpY2F0ZS4gVmFsaWRhdGlvbiBvZiBhIENEIHJlcXVpcmVzIENEIFNlcnZpY2VzIGZyb20gdGhlIENEIFNlcnZpY2UKKyAgICAgICBQcm92aWRlciAgdGhhdCBpc3N1ZWQgdGhlIGNlcnRpZmljYXRlLiDigJxDRCBTZXJ2aWNlIFByb3ZpZGVy4oCdIGlzIGFuCisgICAgICAgaW5kZXBlbmRlbnQgICAgdGhpcmQgICAgcGFydHkgICAgc2VydmljZSAgICB2ZW5kb3IgICAgbGlzdGVkICAgIGF0CisgICAgICAgWzk3XWh0dHA6Ly93d3cuYWRvYmUuY29tL3NlY3VyaXR5L3BhcnRuZXJzX2Nkcy5odG1sLiDigJxDRCBTZXJ2aWNlc+KAnSBhcmUKKyAgICAgICBzZXJ2aWNlcyBwcm92aWRlZCBieSBDRCBTZXJ2aWNlIFByb3ZpZGVycywgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICAgICAgIChpKSBjZXJ0aWZpY2F0ZXMgaXNzdWVkIGJ5IHN1Y2ggQ0QgU2VydmljZSBQcm92aWRlciBmb3IgdXNlIHdpdGggdGhlCisgICAgICAgU29mdHdhcmUncyAgQ0QgIGZlYXR1cmUgIHNldCwgKGlpKSBzZXJ2aWNlcyByZWxhdGVkIHRvIGlzc3VhbmNlIG9mCisgICAgICAgY2VydGlmaWNhdGVzLCAgYW5kICAoaWlpKSAgb3RoZXIgc2VydmljZXMgcmVsYXRlZCB0byBjZXJ0aWZpY2F0ZXMsCisgICAgICAgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB2ZXJpZmljYXRpb24gc2VydmljZXMuCisgICAgICAgMi43LjIgICBDRCAgU2VydmljZSAgUHJvdmlkZXJzLiAgQWx0aG91Z2ggdGhlIFNvZnR3YXJlIG1heSBwcm92aWRlCisgICAgICAgdmFsaWRhdGlvbiBmZWF0dXJlcywgQWRvYmUgZG9lcyBub3Qgc3VwcGx5IHRoZSBuZWNlc3NhcnkgQ0QgU2VydmljZXMKKyAgICAgICByZXF1aXJlZCAgdG8gIHVzZSAgdGhlc2UgIGZlYXR1cmVzLiAgUHVyY2hhc2luZywgIGF2YWlsYWJpbGl0eSBhbmQKKyAgICAgICByZXNwb25zaWJpbGl0eSBmb3IgdGhlIENEIFNlcnZpY2VzIGFyZSBiZXR3ZWVuIHlvdSBhbmQgdGhlIENEIFNlcnZpY2UKKyAgICAgICBQcm92aWRlci4gQmVmb3JlIHlvdSByZWx5IHVwb24gYW55IENELCBhbnkgZGlnaXRhbCBzaWduYXR1cmUgYXBwbGllZAorICAgICAgIHRoZXJldG8sIGFuZC9vciBhbnkgcmVsYXRlZCBDRCBTZXJ2aWNlcywgeW91IG11c3QgZmlyc3QgcmV2aWV3IGFuZCBhZ3JlZQorICAgICAgIHRvICB0aGUgIGFwcGxpY2FibGUgIElzc3VlciAgU3RhdGVtZW50IGFuZCB0aGlzIEFncmVlbWVudC4g4oCcSXNzdWVyCisgICAgICAgU3RhdGVtZW504oCdIG1lYW5zIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyB1bmRlciB3aGljaCBlYWNoIENEIFNlcnZpY2UKKyAgICAgICBQcm92aWRlciAgICBvZmZlcnMgICAgQ0QgICAgU2VydmljZXMgICAgKHNlZSAgICB0aGUgICAgbGlua3MgICAgb24KKyAgICAgICBbOThdaHR0cDovL3d3dy5hZG9iZS5jb20vc2VjdXJpdHkvcGFydG5lcnNfY2RzLmh0bWwpLCBpbmNsdWRpbmcgZm9yCisgICAgICAgZXhhbXBsZSBhbnkgc3Vic2NyaWJlciBhZ3JlZW1lbnRzLCByZWx5aW5nIHBhcnR5IGFncmVlbWVudHMsIGNlcnRpZmljYXRlCisgICAgICAgcG9saWNpZXMgYW5kIHByYWN0aWNlIHN0YXRlbWVudHMsIGFuZCBTZWN0aW9uIDIuNyBvZiB0aGlzIEFncmVlbWVudC4gQnkKKyAgICAgICB2YWxpZGF0aW5nIGEgQ0QgdXNpbmcgQ0QgU2VydmljZXMsIHlvdSBhY2tub3dsZWRnZSBhbmQgYWdyZWUgdGhhdCAoYSkKKyAgICAgICB0aGUgY2VydGlmaWNhdGUgdXNlZCB0byBkaWdpdGFsbHkgc2lnbiBhIENEIG1heSBiZSByZXZva2VkIGF0IHRoZSB0aW1lCisgICAgICAgb2YgdmVyaWZpY2F0aW9uLCBtYWtpbmcgdGhlIGRpZ2l0YWwgc2lnbmF0dXJlIG9uIHRoZSBDRCBhcHBlYXIgdmFsaWQKKyAgICAgICB3aGVuIGluIGZhY3QgaXQgaXMgbm90LCAoYikgdGhlIHNlY3VyaXR5IG9yIGludGVncml0eSBvZiBhIENEIG1heSBiZQorICAgICAgIGNvbXByb21pc2VkIGR1ZSB0byBhbiBhY3Qgb3Igb21pc3Npb24gYnkgdGhlIHNpZ25lciBvZiB0aGUgQ0QsIHRoZQorICAgICAgIGFwcGxpY2FibGUgQ0QgU2VydmljZSBQcm92aWRlciwgb3IgYW55IG90aGVyIHRoaXJkIHBhcnR5IGFuZCAoYykgeW91CisgICAgICAgbXVzdCByZWFkLCB1bmRlcnN0YW5kLCBhbmQgYmUgYm91bmQgYnkgdGhlIGFwcGxpY2FibGUgSXNzdWVyIFN0YXRlbWVudC4KKyAgICAgICAyLjcuMyAgV2FycmFudHkgRGlzY2xhaW1lci4gQ0QgU2VydmljZSBQcm92aWRlcnMgb2ZmZXIgQ0QgU2VydmljZXMKKyAgICAgICBzb2xlbHkgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBhcHBsaWNhYmxlIElzc3VlciBTdGF0ZW1lbnQuIEFDQ0VTUyBUTyBUSEUKKyAgICAgICBDRCBTRVJWSUNFUyBUSFJPVUdIIFRIRSBVU0UgT0YgVEhFIFNPRlRXQVJFIElTIE1BREUgQVZBSUxBQkxFIE9OIEFOIOKAnEFTCisgICAgICAgSVPigJ0gQkFTSVMgT05MWSBBTkQgV0lUSE9VVCBBTlkgV0FSUkFOVFkgT1IgSU5ERU1OSVRZIE9GIEFOWSBLSU5EIChFWENFUFQKKyAgICAgICBBUyBTVVBQTElFRCBCWSBBIENEIFNFUlZJQ0VTIFBST1ZJREVSIElOIElUUyBJU1NVRVIgU1RBVEVNRU5UKS4gQURPQkUKKyAgICAgICBBTkQgRUFDSCBDRCBTRVJWSUNFIFBST1ZJREVSIChFWENFUFQgQVMgRVhQUkVTU0xZIFBST1ZJREVEIElOIElUUyBJU1NVRVIKKyAgICAgICBTVEFURU1FTlQpIE1BS0UgTk8gV0FSUkFOVElFUywgQ09ORElUSU9OUywgSU5ERU1OSVRJRVMsIFJFUFJFU0VOVEFUSU9OUworICAgICAgIE9SIFRFUk1TLCBFWFBSRVNTIE9SIElNUExJRUQsIFdIRVRIRVIgQlkgU1RBVFVURSwgQ09NTU9OIExBVywgQ1VTVE9NLAorICAgICAgIFVTQUdFIE9SIE9USEVSV0lTRSBBUyBUTyBBTlkgT1RIRVIgTUFUVEVSUywgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTworICAgICAgIE5PTi1JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkgUklHSFRTLCBUSVRMRSwgSU5URUdSQVRJT04sIEFDQ1VSQUNZLAorICAgICAgIFNFQ1VSSVRZLCBBVkFJTEFCSUxJVFksIFNBVElTRkFDVE9SWSBRVUFMSVRZLCBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUworICAgICAgIEZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFIFdJVEggUkVTUEVDVCBUTyBUSEUgQ0QgU0VSVklDRVMuCisgICAgICAgMi43LjQgIEluZGVtbml0eS4gWW91IGFncmVlIHRvIGhvbGQgQWRvYmUgYW5kIGFueSBhcHBsaWNhYmxlIENEIFNlcnZpY2UKKyAgICAgICBQcm92aWRlciAoZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCBpbiBpdHMgSXNzdWVyIFN0YXRlbWVudCkgaGFybWxlc3MKKyAgICAgICBmcm9tICBhbnkgYW5kIGFsbCBsaWFiaWxpdGllcywgbG9zc2VzLCBhY3Rpb25zLCBkYW1hZ2VzLCBvciBjbGFpbXMKKyAgICAgICAoaW5jbHVkaW5nIGFsbCByZWFzb25hYmxlIGV4cGVuc2VzLCBjb3N0cywgYW5kIGF0dG9ybmV5cyBmZWVzKSBhcmlzaW5nCisgICAgICAgb3V0ICBvZiBvciByZWxhdGluZyB0byBhbnkgdXNlIG9mLCBvciByZWxpYW5jZSBvbiwgYW55IENEIFNlcnZpY2UsCisgICAgICAgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24gKGEpIHJlbGlhbmNlIG9uIGFuIGV4cGlyZWQgb3IgcmV2b2tlZAorICAgICAgIGNlcnRpZmljYXRlLCAoYikgaW1wcm9wZXIgdmVyaWZpY2F0aW9uIG9mIGEgY2VydGlmaWNhdGUsIChjKSB1c2Ugb2YgYQorICAgICAgIGNlcnRpZmljYXRlIG90aGVyIHRoYW4gYXMgcGVybWl0dGVkIGJ5IGFueSBhcHBsaWNhYmxlIElzc3VlciBTdGF0ZW1lbnQsCisgICAgICAgdGhpcyBBZ3JlZW1lbnQgb3IgYXBwbGljYWJsZSBsYXc7IChkKSBmYWlsdXJlIHRvIGV4ZXJjaXNlIHJlYXNvbmFibGUKKyAgICAgICBqdWRnbWVudCB1bmRlciB0aGUgY2lyY3Vtc3RhbmNlcyBpbiByZWx5aW5nIG9uIHRoZSBDRCBTZXJ2aWNlcyBvciAoZSkKKyAgICAgICBmYWlsdXJlIHRvIHBlcmZvcm0gYW55IG9mIHRoZSBvYmxpZ2F0aW9ucyBhcyByZXF1aXJlZCBpbiBhbiBhcHBsaWNhYmxlCisgICAgICAgSXNzdWVyIFN0YXRlbWVudC4KKyAgICAgICAyLjcuNSAgTGltaXQgb2YgTGlhYmlsaXR5LiBVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIFdJTEwgQURPQkUgT1IgQU5ZIENECisgICAgICAgU0VSVklDRSBQUk9WSURFUiAoRVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gSVRTIElTU1VFUiBTVEFURU1FTlQpCisgICAgICAgQkUgTElBQkxFIFRPIFlPVSwgT1IgQU5ZIE9USEVSIFBFUlNPTiBPUiBFTlRJVFksIEZPUiBBTlkgTE9TUyBPRiBVU0UsCisgICAgICAgUkVWRU5VRSBPUiBQUk9GSVQsIExPU1QgT1IgREFNQUdFRCBEQVRBLCBPUiBPVEhFUiBDT01NRVJDSUFMIE9SIEVDT05PTUlDCisgICAgICAgTE9TUyAgT1IgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBTVEFUVVRPUlksCisgICAgICAgUFVOSVRJVkUsIEVYRU1QTEFSWSBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgV0hBVFNPRVZFUiBSRUxBVEVEIFRPIFlPVVIKKyAgICAgICBVU0UgT1IgUkVMSUFOQ0UgVVBPTiBDRCBTRVJWSUNFUywgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICAgICAgIFNVQ0ggREFNQUdFUyBPUiBJRiBTVUNIIERBTUFHRVMgQVJFIEZPUkVTRUVBQkxFLiBUSElTIExJTUlUQVRJT04gU0hBTEwKKyAgICAgICBBUFBMWSBFVkVOIElOIFRIRSBFVkVOVCBPRiBBIEZVTkRBTUVOVEFMIE9SIE1BVEVSSUFMIEJSRUFDSCBPUiBBIEJSRUFDSAorICAgICAgIE9GIFRIRSBGVU5EQU1FTlRBTCBPUiBNQVRFUklBTFRFUk1TIE9GIFRISVMgQUdSRUVNRU5ULgorICAgICAgIDIuNy42ICBUaGlyZCBQYXJ0eSBCZW5lZmljaWFyaWVzLiBZb3UgYWdyZWUgdGhhdCBhbnkgQ0QgU2VydmljZSBQcm92aWRlcgorICAgICAgIHlvdSB1dGlsaXplIHNoYWxsIGJlIGEgdGhpcmQgcGFydHkgYmVuZWZpY2lhcnkgd2l0aCByZXNwZWN0IHRvIHRoaXMKKyAgICAgICBTZWN0aW9uIDIuNyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHRoYXQgc3VjaCBDRCBTZXJ2aWNlIFByb3ZpZGVyIHNoYWxsCisgICAgICAgaGF2ZSB0aGUgcmlnaHQgdG8gZW5mb3JjZSBzdWNoIHByb3Zpc2lvbnMgaW4gaXRzIG93biBuYW1lIGFzIGlmIHRoZSBDRAorICAgICAgIFNlcnZpY2UgUHJvdmlkZXIgd2VyZSBBZG9iZS4KKyAgICAzLiBSZXN0cmljdGlvbnMuCisgICAgICAgMy4xICBXZWIgUGxheWVyIFByb2hpYml0ZWQgRGV2aWNlcy4gWW91IG1heSBub3QgVXNlIGFueSBXZWIgUGxheWVyIG9uCisgICAgICAgYW55ICBub24tUEMgIGRldmljZSAgb3Igd2l0aCBhbnkgZW1iZWRkZWQgb3IgZGV2aWNlIHZlcnNpb24gb2YgYW55CisgICAgICAgb3BlcmF0aW5nIHN5c3RlbS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIGFuZCBieSBleGFtcGxlIG9ubHksIHlvdQorICAgICAgIG1heSBub3QgdXNlIGEgV2ViIFBsYXllciBvbiBhbnkgKGEpIG1vYmlsZSBkZXZpY2VzLCBzZXQgdG9wIGJveGVzIChTVEIpLAorICAgICAgIGhhbmRoZWxkcywgcGhvbmVzLCB3ZWIgcGFkcywgdGFibGV0cyBhbmQgVGFibGV0IFBDcyB0aGF0IGFyZSBub3QgcnVubmluZworICAgICAgIFdpbmRvd3MgWFAgVGFibGV0IFBDIEVkaXRpb24sIGdhbWUgY29uc29sZXMsIFRWcywgRFZEIHBsYXllcnMsIG1lZGlhCisgICAgICAgY2VudGVycyAoZXhjbHVkaW5nIFdpbmRvd3MgWFAgTWVkaWEgQ2VudGVyIEVkaXRpb24gYW5kIGl0cyBzdWNjZXNzb3JzKSwKKyAgICAgICBlbGVjdHJvbmljIGJpbGxib2FyZHMgb3Igb3RoZXIgZGlnaXRhbCBzaWduYWdlLCBpbnRlcm5ldCBhcHBsaWFuY2VzIG9yCisgICAgICAgb3RoZXIgaW50ZXJuZXQtY29ubmVjdGVkIGRldmljZXMsIFBEQXMsIG1lZGljYWwgZGV2aWNlcywgQVRNcywgdGVsZW1hdGljCisgICAgICAgZGV2aWNlcywgIGdhbWluZyBtYWNoaW5lcywgaG9tZSBhdXRvbWF0aW9uIHN5c3RlbXMsIGtpb3NrcywgcmVtb3RlCisgICAgICAgY29udHJvbCAgZGV2aWNlcywgIG9yICBhbnkgIG90aGVyIGNvbnN1bWVyIGVsZWN0cm9uaWNzIGRldmljZSwgKGIpCisgICAgICAgb3BlcmF0b3ItYmFzZWQgbW9iaWxlLCBjYWJsZSwgc2F0ZWxsaXRlLCBvciB0ZWxldmlzaW9uIHN5c3RlbXMgb3IgKGMpCisgICAgICAgb3RoZXIgY2xvc2VkIHN5c3RlbSBkZXZpY2VzLgorICAgICAgIDMuMiAgTm90aWNlcy4gWW91IHNoYWxsIG5vdCBjb3B5IHRoZSBTb2Z0d2FyZSBleGNlcHQgYXMgc2V0IGZvcnRoIGluCisgICAgICAgU2VjdGlvbiAyLiBBbnkgY29weSBvZiB0aGUgU29mdHdhcmUgdGhhdCB5b3UgbWFrZSBtdXN0IGNvbnRhaW4gdGhlIHNhbWUKKyAgICAgICBjb3B5cmlnaHQgIGFuZCAgb3RoZXIgcHJvcHJpZXRhcnkgbm90aWNlcyB0aGF0IGFwcGVhciBvbiBvciBpbiB0aGUKKyAgICAgICBTb2Z0d2FyZS4KKyAgICAgICAzLjMgICBEb2N1bWVudCAgRmVhdHVyZXMuICBUaGUgIFNvZnR3YXJlICBtYXkgY29udGFpbiBmZWF0dXJlcyBhbmQKKyAgICAgICBmdW5jdGlvbmFsaXR5ICh0aGUg4oCcRG9jdW1lbnQgRmVhdHVyZXPigJ0pIHRoYXQgYXBwZWFyIGRpc2FibGVkIG9yIOKAnGdyYXllZAorICAgICAgIG91dC7igJ0gVGhlc2UgRG9jdW1lbnQgRmVhdHVyZXMgd2lsbCBvbmx5IGFjdGl2YXRlIHdoZW4gb3BlbmluZyBhIFBERgorICAgICAgIGRvY3VtZW50ICB0aGF0IHdhcyBjcmVhdGVkIHVzaW5nIGNvcnJlc3BvbmRpbmcgZW5hYmxpbmcgdGVjaG5vbG9neQorICAgICAgIGF2YWlsYWJsZSBvbmx5IGZyb20gQWRvYmUgKOKAnEtleXPigJ0pLiBZb3UgYWdyZWUgbm90IHRvIGFjY2Vzcywgb3IgYXR0ZW1wdAorICAgICAgIHRvICBhY2Nlc3MsIGRpc2FibGVkIERvY3VtZW50IEZlYXR1cmVzIG9yIG90aGVyd2lzZSBjaXJjdW12ZW50IHRoZQorICAgICAgIHBlcm1pc3Npb25zIHRoYXQgY29udHJvbCBhY3RpdmF0aW9uIG9mIHN1Y2ggRG9jdW1lbnQgRmVhdHVyZXMuIFlvdSBtYXkKKyAgICAgICBvbmx5IHVzZSB0aGUgRG9jdW1lbnQgRmVhdHVyZXMgd2l0aCBQREYgZG9jdW1lbnRzIHRoYXQgaGF2ZSBiZWVuIGVuYWJsZWQKKyAgICAgICB1c2luZyBLZXlzIG9idGFpbmVkIHVuZGVyIGEgdmFsaWQgbGljZW5zZSBmcm9tIEFkb2JlLiBObyBvdGhlciB1c2UgaXMKKyAgICAgICBwZXJtaXR0ZWQuCisgICAgICAgMy40ICBBZG9iZSBSZWFkZXIgUmVzdHJpY3Rpb25zLiBZb3UgYXJlIG5vdCBhdXRob3JpemVkIHRvIGludGVncmF0ZSBvcgorICAgICAgIHVzZSB0aGUgQWRvYmUgUmVhZGVyIHdpdGggYW55IG90aGVyIHNvZnR3YXJlLCBwbHVnLWluIG9yIGVuaGFuY2VtZW50CisgICAgICAgdGhhdCAgdXNlcyAgb3IgcmVsaWVzIHVwb24gdGhlIHRoZSBBZG9iZSBSZWFkZXIgd2hlbiBjb252ZXJ0aW5nIG9yCisgICAgICAgdHJhbnNmb3JtaW5nIFBERiBmaWxlcyBpbnRvIG90aGVyIGZpbGUgZm9ybWF0cyAoZS5nLiwgYSBQREYgZmlsZSBpbnRvIGEKKyAgICAgICBUSUZGLCBKUEVHLCBvciBTVkcgZmlsZSkuIFlvdSBhcmUgbm90IGF1dGhvcml6ZWQgdG8gaW50ZWdyYXRlIG9yIHVzZSB0aGUKKyAgICAgICBBZG9iZSBSZWFkZXIgd2l0aCBhbnkgcGx1Zy1pbiBzb2Z0d2FyZSBub3QgZGV2ZWxvcGVkIGluIGFjY29yZGFuY2Ugd2l0aAorICAgICAgIHRoZSAgQWRvYmUgSW50ZWdyYXRpb24gS2V5IExpY2Vuc2UgQWdyZWVtZW50LiBGdXJ0aGVyLCB5b3UgYXJlIG5vdAorICAgICAgIHBlcm1pdHRlZCB0byBpbnRlZ3JhdGUgb3IgdXNlIHRoZSBBZG9iZSBSZWFkZXIgd2l0aCBvdGhlciBzb2Z0d2FyZSwgb3IKKyAgICAgICBhY2Nlc3MgUERGIGZpbGVzIHRoYXQgY29udGFpbiBpbnN0cnVjdGlvbnMgKGUuZy4sIEphdmFTY3JpcHQpLCBpbiBvcmRlcgorICAgICAgIHRvIChhKSBzYXZlIGRhdGEgbG9jYWxseSAob24gdGhlIHNhbWUgQ29tcHV0ZXIpLCAoYikgY3JlYXRlIGEgZmlsZSB0aGF0CisgICAgICAgY29udGFpbnMgZGF0YSAoZS5nLiwgYW4gWE1MIG9yIGNvbW1lbnRzIGZpbGUpIG9yIChjKSBzYXZlIG1vZGlmaWNhdGlvbnMKKyAgICAgICB0byBhIFBERiBmaWxlLCBleGNlcHQgd2hlbiBzdWNoIHNhdmluZyBvciBjcmVhdGlvbiBpcyBhbGxvd2VkIHRocm91Z2gKKyAgICAgICB0aGUgdXNlIG9mIERvY3VtZW50IEZlYXR1cmUocykgZW5hYmxlZCBieSBBZG9iZS4KKyAgICA0LiBUcmFuc2Zlci4gWW91IG1heSBub3QgcmVudCwgbGVhc2UsIHN1YmxpY2Vuc2UsIGFzc2lnbiBvciB0cmFuc2ZlciB5b3VyCisgICAgICAgcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgb3IgYXV0aG9yaXplIGFsbCBvciBhbnkgcG9ydGlvbiBvZiB0aGUgU29mdHdhcmUKKyAgICAgICB0byBiZSBjb3BpZWQgb250byBhbm90aGVyIHVzZXIncyBDb21wdXRlciBleGNlcHQgYXMgbWF5IGJlIGV4cHJlc3NseQorICAgICAgIHBlcm1pdHRlZCBoZXJlaW4uIFlvdSBtYXksIGhvd2V2ZXIsIHRyYW5zZmVyIGFsbCB5b3VyIHJpZ2h0cyB0byBVc2UgdGhlCisgICAgICAgU29mdHdhcmUgdG8gYW5vdGhlciBwZXJzb24gb3IgbGVnYWwgZW50aXR5IHByb3ZpZGVkIHRoYXQ6IChhKSB5b3UgYWxzbworICAgICAgIHRyYW5zZmVyICAoaSkgIHRoaXMgQWdyZWVtZW50LCBhbmQgKGlpKSB0aGUgU29mdHdhcmUgYW5kIGFsbCBvdGhlcgorICAgICAgIHNvZnR3YXJlICBvciAgaGFyZHdhcmUgYnVuZGxlZCBvciBwcmUtaW5zdGFsbGVkIHdpdGggdGhlIFNvZnR3YXJlLAorICAgICAgIGluY2x1ZGluZyBhbGwgY29waWVzLCBVcGRhdGVzIGFuZCBwcmlvciB2ZXJzaW9ucywgdG8gc3VjaCBwZXJzb24gb3IKKyAgICAgICBlbnRpdHksIChiKSB5b3UgcmV0YWluIG5vIGNvcGllcywgaW5jbHVkaW5nIGJhY2t1cHMgYW5kIGNvcGllcyBzdG9yZWQgb24KKyAgICAgICBhIENvbXB1dGVyLCBhbmQgKGMpIHRoZSByZWNlaXZpbmcgcGFydHkgYWNjZXB0cyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKKyAgICAgICBvZiB0aGlzIEFncmVlbWVudCBhbmQgYW55IG90aGVyIHRlcm1zIGFuZCBjb25kaXRpb25zIHVwb24gd2hpY2ggeW91CisgICAgICAgbGVnYWxseSAgcHVyY2hhc2VkICBhIGxpY2Vuc2UgdG8gdGhlIFNvZnR3YXJlLiBOb3R3aXRoc3RhbmRpbmcgdGhlCisgICAgICAgZm9yZWdvaW5nLCB5b3UgbWF5IG5vdCB0cmFuc2ZlciBlZHVjYXRpb24sIHByZS1yZWxlYXNlLCBvciBub3QgZm9yCisgICAgICAgcmVzYWxlIGNvcGllcyBvZiB0aGUgU29mdHdhcmUuCisgICAgNS4gSW50ZWxsZWN0dWFsIFByb3BlcnR5IE93bmVyc2hpcCwgQ29weXJpZ2h0IFByb3RlY3Rpb24uIFRoZSBTb2Z0d2FyZSBhbmQKKyAgICAgICBhbnkgYXV0aG9yaXplZCBjb3BpZXMgdGhhdCB5b3UgbWFrZSBhcmUgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbmQKKyAgICAgICBhcmUgIG93bmVkICBieSAgQWRvYmUgIFN5c3RlbXMgSW5jb3Jwb3JhdGVkIGFuZCBpdHMgc3VwcGxpZXJzLiBUaGUKKyAgICAgICBzdHJ1Y3R1cmUsIG9yZ2FuaXphdGlvbiBhbmQgY29kZSBvZiB0aGUgU29mdHdhcmUgYXJlIHRoZSB2YWx1YWJsZSB0cmFkZQorICAgICAgIHNlY3JldHMgYW5kIGNvbmZpZGVudGlhbCBpbmZvcm1hdGlvbiBvZiBBZG9iZSBTeXN0ZW1zIEluY29ycG9yYXRlZCBhbmQKKyAgICAgICBpdHMgc3VwcGxpZXJzLiBUaGUgU29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IGxhdywgaW5jbHVkaW5nIHdpdGhvdXQKKyAgICAgICBsaW1pdGF0aW9uIHRoZSBjb3B5cmlnaHQgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBhbmQgb3RoZXIgY291bnRyaWVzLAorICAgICAgIGFuZCBieSBpbnRlcm5hdGlvbmFsIHRyZWF0eSBwcm92aXNpb25zLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZAorICAgICAgIGhlcmVpbiwgdGhpcyBBZ3JlZW1lbnQgZG9lcyBub3QgZ3JhbnQgeW91IGFueSBpbnRlbGxlY3R1YWwgcHJvcGVydHkKKyAgICAgICByaWdodHMgaW4gdGhlIFNvZnR3YXJlIGFuZCBhbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBhcmUgcmVzZXJ2ZWQKKyAgICAgICBieSBBZG9iZSBhbmQgaXRzIHN1cHBsaWVycy4KKyAgICA2LiBVcGRhdGVzLiBJZiB0aGUgU29mdHdhcmUgaXMgYW4gVXBkYXRlIHRvIGEgcHJldmlvdXMgdmVyc2lvbiBvZiB0aGUKKyAgICAgICBTb2Z0d2FyZSwgeW91IG11c3QgcG9zc2VzcyBhIHZhbGlkIGxpY2Vuc2UgdG8gc3VjaCBwcmV2aW91cyB2ZXJzaW9uIGluCisgICAgICAgb3JkZXIgdG8gVXNlIHN1Y2ggVXBkYXRlLiBBbGwgVXBkYXRlcyBhcmUgcHJvdmlkZWQgdG8geW91IG9uIGEgbGljZW5zZQorICAgICAgIGV4Y2hhbmdlICBiYXNpcy4gWW91IGFncmVlIHRoYXQgYnkgVXNpbmcgYW4gVXBkYXRlIHlvdSB2b2x1bnRhcmlseQorICAgICAgIHRlcm1pbmF0ZSB5b3VyIHJpZ2h0IHRvIHVzZSBhbnkgcHJldmlvdXMgdmVyc2lvbiBvZiB0aGUgU29mdHdhcmUuIEFzIGFuCisgICAgICAgZXhjZXB0aW9uLCB5b3UgbWF5IGNvbnRpbnVlIHRvIFVzZSBwcmV2aW91cyB2ZXJzaW9ucyBvZiB0aGUgU29mdHdhcmUgb24KKyAgICAgICB5b3VyIENvbXB1dGVyIGFmdGVyIHlvdSBVc2UgdGhlIFVwZGF0ZSBidXQgb25seSB0byBhc3Npc3QgeW91IGluIHRoZQorICAgICAgIHRyYW5zaXRpb24gdG8gdGhlIFVwZGF0ZSwgcHJvdmlkZWQgdGhhdDogKGEpIHRoZSBVcGRhdGUgYW5kIHRoZSBwcmV2aW91cworICAgICAgIHZlcnNpb25zIGFyZSBpbnN0YWxsZWQgb24gdGhlIHNhbWUgY29tcHV0ZXI7IChiKSB0aGUgcHJldmlvdXMgdmVyc2lvbnMKKyAgICAgICBvciBjb3BpZXMgdGhlcmVvZiBhcmUgbm90IHRyYW5zZmVycmVkIHRvIGFub3RoZXIgcGFydHkgb3IgQ29tcHV0ZXIKKyAgICAgICB1bmxlc3MgYWxsIGNvcGllcyBvZiB0aGUgVXBkYXRlIGFyZSBhbHNvIHRyYW5zZmVycmVkIHRvIHN1Y2ggcGFydHkgb3IKKyAgICAgICBDb21wdXRlcjsgYW5kIChjKSB5b3UgYWNrbm93bGVkZ2UgdGhhdCBhbnkgb2JsaWdhdGlvbiBBZG9iZSBtYXkgaGF2ZSB0bworICAgICAgIHN1cHBvcnQgIHRoZSAgcHJldmlvdXMgIHZlcnNpb25zIG9mIHRoZSBTb2Z0d2FyZSBtYXkgYmUgZW5kZWQgdXBvbgorICAgICAgIGF2YWlsYWJpbGl0eSBvZiB0aGUgVXBkYXRlLgorICAgIDcuIE5PIFdBUlJBTlRZLiBUaGUgU29mdHdhcmUgaXMgYmVpbmcgZGVsaXZlcmVkIHRvIHlvdSAiQVMgSVMiIGFuZCBBZG9iZQorICAgICAgIG1ha2VzICBubyB3YXJyYW50eSBhcyB0byBpdHMgdXNlIG9yIHBlcmZvcm1hbmNlLiBBZG9iZSBwcm92aWRlcyBubworICAgICAgIHRlY2huaWNhbCBzdXBwb3J0LCB3YXJyYW50aWVzIG9yIHJlbWVkaWVzIGZvciB0aGUgU29mdHdhcmUuIEFET0JFIEFORAorICAgICAgIElUUyBTVVBQTElFUlMgRE8gTk9UIEFORCBDQU5OT1QgV0FSUkFOVCBUSEUgUEVSRk9STUFOQ0UgT1IgUkVTVUxUUyBZT1UKKyAgICAgICBNQVkgT0JUQUlOIEJZIFVTSU5HIFRIRSBTT0ZUV0FSRS4gRVhDRVBUIEZPUiBBTlkgV0FSUkFOVFksIENPTkRJVElPTiwKKyAgICAgICBSRVBSRVNFTlRBVElPTiBPUiBURVJNIFRPIFRIRSBFWFRFTlQgVE8gV0hJQ0ggVEhFIFNBTUUgQ0FOTk9UIE9SIE1BWSBOT1QKKyAgICAgICBCRSBFWENMVURFRCBPUiBMSU1JVEVEIEJZIExBVyBBUFBMSUNBQkxFIFRPIFlPVSBJTiBZT1VSIEpVUklTRElDVElPTiwKKyAgICAgICBBRE9CRSBBTkQgSVRTIFNVUFBMSUVSUyBNQUtFIE5PIFdBUlJBTlRJRVMgQ09ORElUSU9OUywgUkVQUkVTRU5UQVRJT05TLAorICAgICAgIE9SIFRFUk1TIChFWFBSRVNTIE9SIElNUExJRUQgV0hFVEhFUiBCWSBTVEFUVVRFLCBDT01NT04gTEFXLCBDVVNUT00sCisgICAgICAgVVNBR0UgIE9SIE9USEVSV0lTRSkgQVMgVE8gQU5ZIE1BVFRFUiBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OCisgICAgICAgTk9OSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRZIFJJR0hUUywgTUVSQ0hBTlRBQklMSVRZLCBJTlRFR1JBVElPTiwKKyAgICAgICBTQVRJU0ZBQ1RPUlkgIFFVQUxJVFksICBPUiBGSVRORVNTIEZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFLiBUaGUKKyAgICAgICBwcm92aXNpb25zIG9mIFNlY3Rpb24gNyBhbmQgU2VjdGlvbiA4IHNoYWxsIHN1cnZpdmUgdGhlIHRlcm1pbmF0aW9uIG9mCisgICAgICAgdGhpcyBBZ3JlZW1lbnQsIGhvd3NvZXZlciBjYXVzZWQsIGJ1dCB0aGlzIHNoYWxsIG5vdCBpbXBseSBvciBjcmVhdGUgYW55CisgICAgICAgY29udGludWVkIHJpZ2h0IHRvIFVzZSB0aGUgU29mdHdhcmUgYWZ0ZXIgdGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQuCisgICAgOC4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuIElOIE5PIEVWRU5UIFdJTEwgQURPQkUgT1IgSVRTIFNVUFBMSUVSUyBCRQorICAgICAgIExJQUJMRSAgVE8gIFlPVSBGT1IgQU5ZIERBTUFHRVMsIENMQUlNUyBPUiBDT1NUUyBXSEFUU09FVkVSIE9SIEFOWQorICAgICAgIENPTlNFUVVFTlRJQUwsIElORElSRUNULCBJTkNJREVOVEFMIERBTUFHRVMsIE9SIEFOWSBMT1NUIFBST0ZJVFMgT1IgTE9TVAorICAgICAgIFNBVklOR1MsICBFVkVOICBJRiBBTiBBRE9CRSBSRVBSRVNFTlRBVElWRSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorICAgICAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggTE9TUywgREFNQUdFUywgQ0xBSU1TIE9SIENPU1RTIE9SIEZPUiBBTlkgQ0xBSU0gQlkKKyAgICAgICBBTlkgVEhJUkQgUEFSVFkuIFRIRSBGT1JFR09JTkcgTElNSVRBVElPTlMgQU5EIEVYQ0xVU0lPTlMgQVBQTFkgVE8gVEhFCisgICAgICAgRVhURU5UICBQRVJNSVRURUQgIEJZIEFQUExJQ0FCTEUgTEFXIElOIFlPVVIgSlVSSVNESUNUSU9OLiBBRE9CRSdTCisgICAgICAgQUdHUkVHQVRFIExJQUJJTElUWSBBTkQgVEhBVCBPRiBJVFMgU1VQUExJRVJTIFVOREVSIE9SIElOIENPTk5FQ1RJT04KKyAgICAgICBXSVRIICBUSElTICBBR1JFRU1FTlQgIFNIQUxMIEJFIExJTUlURUQgVE8gVEhFIEFNT1VOVCBQQUlEIEZPUiBUSEUKKyAgICAgICBTT0ZUV0FSRSwgSUYgQU5ZLiBOb3RoaW5nIGNvbnRhaW5lZCBpbiB0aGlzIEFncmVlbWVudCBsaW1pdHMgQWRvYmUncworICAgICAgIGxpYWJpbGl0eSB0byB5b3UgaW4gdGhlIGV2ZW50IG9mIGRlYXRoIG9yIHBlcnNvbmFsIGluanVyeSByZXN1bHRpbmcgZnJvbQorICAgICAgIEFkb2JlJ3MgbmVnbGlnZW5jZSBvciBmb3IgdGhlIHRvcnQgb2YgZGVjZWl0IChmcmF1ZCkuIEFkb2JlIGlzIGFjdGluZyBvbgorICAgICAgIGJlaGFsZiBvZiBpdHMgc3VwcGxpZXJzIGZvciB0aGUgcHVycG9zZSBvZiBkaXNjbGFpbWluZywgZXhjbHVkaW5nIGFuZC9vcgorICAgICAgIGxpbWl0aW5nIG9ibGlnYXRpb25zLCB3YXJyYW50aWVzIGFuZCBsaWFiaWxpdHkgYXMgcHJvdmlkZWQgaW4gdGhpcworICAgICAgIEFncmVlbWVudCwgIGJ1dCBpbiBubyBvdGhlciByZXNwZWN0cyBhbmQgZm9yIG5vIG90aGVyIHB1cnBvc2UuIEZvcgorICAgICAgIGZ1cnRoZXIgaW5mb3JtYXRpb24sIHBsZWFzZSBzZWUgdGhlIGp1cmlzZGljdGlvbiBzcGVjaWZpYyBpbmZvcm1hdGlvbiBhdAorICAgICAgIHRoZSBlbmQgb2YgdGhpcyBBZ3JlZW1lbnQsIGlmIGFueSwgb3IgY29udGFjdCBBZG9iZSdzIEN1c3RvbWVyIFN1cHBvcnQKKyAgICAgICBEZXBhcnRtZW50LgorICAgIDkuIEV4cG9ydCAgUnVsZXMuICBZb3UgIGFncmVlICB0aGF0IHRoZSBTb2Z0d2FyZSB3aWxsIG5vdCBiZSBzaGlwcGVkLAorICAgICAgIHRyYW5zZmVycmVkICBvciAgZXhwb3J0ZWQgIGludG8gIGFueSBjb3VudHJ5IG9yIHVzZWQgaW4gYW55IG1hbm5lcgorICAgICAgIHByb2hpYml0ZWQgYnkgdGhlIFVuaXRlZCBTdGF0ZXMgRXhwb3J0IEFkbWluaXN0cmF0aW9uIEFjdCBvciBhbnkgb3RoZXIKKyAgICAgICBleHBvcnQgbGF3cywgcmVzdHJpY3Rpb25zIG9yIHJlZ3VsYXRpb25zIChjb2xsZWN0aXZlbHkgdGhlICJFeHBvcnQKKyAgICAgICBMYXdzIikuIEluIGFkZGl0aW9uLCBpZiB0aGUgU29mdHdhcmUgaXMgaWRlbnRpZmllZCBhcyBleHBvcnQgY29udHJvbGxlZAorICAgICAgIGl0ZW1zIHVuZGVyIHRoZSBFeHBvcnQgTGF3cywgeW91IHJlcHJlc2VudCBhbmQgd2FycmFudCB0aGF0IHlvdSBhcmUgbm90CisgICAgICAgYSBjaXRpemVuLCBvciBvdGhlcndpc2UgbG9jYXRlZCB3aXRoaW4sIGFuIGVtYmFyZ29lZCBuYXRpb24gKGluY2x1ZGluZworICAgICAgIHdpdGhvdXQgbGltaXRhdGlvbiBJcmFuLCBTeXJpYSwgU3VkYW4sIExpYnlhLCBDdWJhLCBhbmQgTm9ydGggS29yZWEpIGFuZAorICAgICAgIHRoYXQgIHlvdSAgYXJlIG5vdCBvdGhlcndpc2UgcHJvaGliaXRlZCB1bmRlciB0aGUgRXhwb3J0IExhd3MgZnJvbQorICAgICAgIHJlY2VpdmluZyB0aGUgU29mdHdhcmUuIEFsbCByaWdodHMgdG8gVXNlIHRoZSBTb2Z0d2FyZSBhcmUgZ3JhbnRlZCBvbgorICAgICAgIGNvbmRpdGlvbiB0aGF0IHN1Y2ggcmlnaHRzIGFyZSBmb3JmZWl0ZWQgaWYgeW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGhlCisgICAgICAgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQuCisgICAxMC4gR292ZXJuaW5nIExhdy4gVGhpcyBBZ3JlZW1lbnQgd2lsbCBiZSBnb3Zlcm5lZCBieSBhbmQgY29uc3RydWVkIGluCisgICAgICAgYWNjb3JkYW5jZSB3aXRoIHRoZSBzdWJzdGFudGl2ZSBsYXdzIGluIGZvcmNlOiAoYSkgaW4gdGhlIFN0YXRlIG9mCisgICAgICAgQ2FsaWZvcm5pYSwgaWYgYSBsaWNlbnNlIHRvIHRoZSBTb2Z0d2FyZSBpcyBvYnRhaW5lZCB3aGVuIHlvdSBhcmUgaW4gdGhlCisgICAgICAgVW5pdGVkIFN0YXRlcywgQ2FuYWRhLCBvciBNZXhpY287IG9yIChiKSBpbiBKYXBhbiwgaWYgYSBsaWNlbnNlIHRvIHRoZQorICAgICAgIFNvZnR3YXJlIGlzIG9idGFpbmVkIHdoZW4geW91IGFyZSBpbiBKYXBhbiwgQ2hpbmEsIEtvcmVhLCBvciBvdGhlcgorICAgICAgIFNvdXRoZWFzdCBBc2lhbiBjb3VudHJ5IHdoZXJlIGFsbCBvZmZpY2lhbCBsYW5ndWFnZXMgYXJlIHdyaXR0ZW4gaW4KKyAgICAgICBlaXRoZXIgYW4gaWRlb2dyYXBoaWMgc2NyaXB0IChlLmcuLCBoYW56aSwga2FuamksIG9yIGhhbmphKSwgYW5kL29yCisgICAgICAgb3RoZXIgIHNjcmlwdCBiYXNlZCB1cG9uIG9yIHNpbWlsYXIgaW4gc3RydWN0dXJlIHRvIGFuIGlkZW9ncmFwaGljCisgICAgICAgc2NyaXB0LCBzdWNoIGFzIGhhbmd1bCBvciBrYW5hOyBvciAoYykgRW5nbGFuZCwgaWYgYSBsaWNlbnNlIHRvIHRoZQorICAgICAgIFNvZnR3YXJlICBpcyAgcHVyY2hhc2VkIHdoZW4geW91IGFyZSBpbiBhbnkgb3RoZXIganVyaXNkaWN0aW9uIG5vdAorICAgICAgIGRlc2NyaWJlZCBhYm92ZS4gVGhlIHJlc3BlY3RpdmUgY291cnRzIG9mIFNhbnRhIENsYXJhIENvdW50eSwgQ2FsaWZvcm5pYQorICAgICAgIHdoZW4gIENhbGlmb3JuaWEgIGxhdyBhcHBsaWVzLCBUb2t5byBEaXN0cmljdCBDb3VydCBpbiBKYXBhbiwgd2hlbgorICAgICAgIEphcGFuZXNlIGxhdyBhcHBsaWVzLCBhbmQgdGhlIGNvbXBldGVudCBjb3VydHMgb2YgRW5nbGFuZCwgd2hlbiB0aGUgbGF3CisgICAgICAgb2YgRW5nbGFuZCBhcHBsaWVzLCBzaGFsbCBlYWNoIGhhdmUgbm9uLWV4Y2x1c2l2ZSBqdXJpc2RpY3Rpb24gb3ZlciBhbGwKKyAgICAgICBkaXNwdXRlcyByZWxhdGluZyB0byB0aGlzIEFncmVlbWVudC4gVGhpcyBBZ3JlZW1lbnQgd2lsbCBub3QgYmUgZ292ZXJuZWQKKyAgICAgICBieSB0aGUgY29uZmxpY3Qgb2YgbGF3IHJ1bGVzIG9mIGFueSBqdXJpc2RpY3Rpb24gb3IgdGhlIFVuaXRlZCBOYXRpb25zCisgICAgICAgQ29udmVudGlvbiAgb24gIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcywgdGhlCisgICAgICAgYXBwbGljYXRpb24gb2Ygd2hpY2ggaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLgorICAgMTEuIEdlbmVyYWwgUHJvdmlzaW9ucy4gSWYgYW55IHBhcnQgb2YgdGhpcyBBZ3JlZW1lbnQgaXMgZm91bmQgdm9pZCBhbmQKKyAgICAgICB1bmVuZm9yY2VhYmxlLCBpdCB3aWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9mIHRoZSBiYWxhbmNlIG9mIHRoaXMKKyAgICAgICBBZ3JlZW1lbnQsIHdoaWNoIHNoYWxsIHJlbWFpbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUgYWNjb3JkaW5nIHRvIGl0cworICAgICAgIHRlcm1zLiBUaGlzIEFncmVlbWVudCBzaGFsbCBub3QgcHJlanVkaWNlIHRoZSBzdGF0dXRvcnkgcmlnaHRzIG9mIGFueQorICAgICAgIHBhcnR5IGRlYWxpbmcgYXMgYSBjb25zdW1lci4gVGhpcyBBZ3JlZW1lbnQgbWF5IG9ubHkgYmUgbW9kaWZpZWQgYnkgYQorICAgICAgIHdyaXRpbmcgIHNpZ25lZCAgYnkgYW4gYXV0aG9yaXplZCBvZmZpY2VyIG9mIEFkb2JlLiBVcGRhdGVzIG1heSBiZQorICAgICAgIGxpY2Vuc2VkIHRvIHlvdSBieSBBZG9iZSB3aXRoIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IHRlcm1zLiBUaGlzIGlzIHRoZQorICAgICAgIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiBBZG9iZSBhbmQgeW91IHJlbGF0aW5nIHRvIHRoZSBTb2Z0d2FyZSBhbmQgaXQKKyAgICAgICBzdXBlcnNlZGVzICBhbnkgIHByaW9yIHJlcHJlc2VudGF0aW9ucywgZGlzY3Vzc2lvbnMsIHVuZGVydGFraW5ncywKKyAgICAgICBjb21tdW5pY2F0aW9ucyBvciBhZHZlcnRpc2luZyByZWxhdGluZyB0byB0aGUgU29mdHdhcmUuCisgICAxMi4gTm90aWNlIHRvIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMuIFRoZSBTb2Z0d2FyZSBhbmQgRG9jdW1lbnRhdGlvbiBhcmUKKyAgICAgICAiQ29tbWVyY2lhbCAgSXRlbXMsIiAgYXMgdGhhdCB0ZXJtIGlzIGRlZmluZWQgYXQgNDggQy5GLlIuIMKnMi4xMDEsCisgICAgICAgY29uc2lzdGluZyBvZiAiQ29tbWVyY2lhbCBDb21wdXRlciBTb2Z0d2FyZSIgYW5kICJDb21tZXJjaWFsIENvbXB1dGVyCisgICAgICAgU29mdHdhcmUgRG9jdW1lbnRhdGlvbiwiIGFzIHN1Y2ggdGVybXMgYXJlIHVzZWQgaW4gNDggQy5GLlIuIMKnMTIuMjEyIG9yCisgICAgICAgNDggQy5GLlIuIMKnMjI3LjcyMDIsIGFzIGFwcGxpY2FibGUuIENvbnNpc3RlbnQgd2l0aCA0OCBDLkYuUi4gwqcxMi4yMTIgb3IKKyAgICAgICA0OCBDLkYuUi4gwqfCpzIyNy43MjAyLTEgdGhyb3VnaCAyMjcuNzIwMi00LCBhcyBhcHBsaWNhYmxlLCB0aGUgQ29tbWVyY2lhbAorICAgICAgIENvbXB1dGVyIFNvZnR3YXJlIGFuZCBDb21tZXJjaWFsIENvbXB1dGVyIFNvZnR3YXJlIERvY3VtZW50YXRpb24gYXJlCisgICAgICAgYmVpbmcgbGljZW5zZWQgdG8gVS5TLiBHb3Zlcm5tZW50IGVuZCB1c2VycyAoYSkgb25seSBhcyBDb21tZXJjaWFsIEl0ZW1zCisgICAgICAgYW5kIChiKSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIGFzIGFyZSBncmFudGVkIHRvIGFsbCBvdGhlciBlbmQgdXNlcnMKKyAgICAgICBwdXJzdWFudCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgaGVyZWluLiBVbnB1Ymxpc2hlZC1yaWdodHMgcmVzZXJ2ZWQKKyAgICAgICB1bmRlciAgdGhlICBjb3B5cmlnaHQgIGxhd3MgIG9mICB0aGUgIFVuaXRlZCBTdGF0ZXMuIEFkb2JlIFN5c3RlbXMKKyAgICAgICBJbmNvcnBvcmF0ZWQsIDM0NSBQYXJrIEF2ZW51ZSwgU2FuIEpvc2UsIENBIDk1MTEwLTI3MDQsIFVTQS4gRm9yIFUuUy4KKyAgICAgICBHb3Zlcm5tZW50IEVuZCBVc2VycywgQWRvYmUgYWdyZWVzIHRvIGNvbXBseSB3aXRoIGFsbCBhcHBsaWNhYmxlIGVxdWFsCisgICAgICAgb3Bwb3J0dW5pdHkgbGF3cyBpbmNsdWRpbmcsIGlmIGFwcHJvcHJpYXRlLCB0aGUgcHJvdmlzaW9ucyBvZiBFeGVjdXRpdmUKKyAgICAgICBPcmRlciAgMTEyNDYsICBhcyBhbWVuZGVkLCBTZWN0aW9uIDQwMiBvZiB0aGUgVmlldG5hbSBFcmEgVmV0ZXJhbnMKKyAgICAgICBSZWFkanVzdG1lbnQgQXNzaXN0YW5jZSBBY3Qgb2YgMTk3NCAoMzggVVNDIDQyMTIpLCBhbmQgU2VjdGlvbiA1MDMgb2YKKyAgICAgICB0aGUgUmVoYWJpbGl0YXRpb24gQWN0IG9mIDE5NzMsIGFzIGFtZW5kZWQsIGFuZCB0aGUgcmVndWxhdGlvbnMgYXQgNDEKKyAgICAgICBDRlIgUGFydHMgNjAtMSB0aHJvdWdoIDYwLTYwLCA2MC0yNTAsIGFuZCA2MC03NDEuIFRoZSBhZmZpcm1hdGl2ZSBhY3Rpb24KKyAgICAgICBjbGF1c2UgYW5kIHJlZ3VsYXRpb25zIGNvbnRhaW5lZCBpbiB0aGUgcHJlY2VkaW5nIHNlbnRlbmNlIHNoYWxsIGJlCisgICAgICAgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZSBpbiB0aGlzIEFncmVlbWVudC4KKyAgIDEzLiBDb21wbGlhbmNlIHdpdGggTGljZW5zZXMuIElmIHlvdSBhcmUgYSBidXNpbmVzcyBvciBvcmdhbml6YXRpb24sIHlvdQorICAgICAgIGFncmVlIHRoYXQgdXBvbiByZXF1ZXN0IGZyb20gQWRvYmUgb3IgQWRvYmUncyBhdXRob3JpemVkIHJlcHJlc2VudGF0aXZlLAorICAgICAgIHlvdSB3aWxsIHdpdGhpbiB0aGlydHkgKDMwKSBkYXlzIGZ1bGx5IGRvY3VtZW50IGFuZCBjZXJ0aWZ5IHRoYXQgdXNlIG9mCisgICAgICAgYW55IGFuZCBhbGwgU29mdHdhcmUgYXQgdGhlIHRpbWUgb2YgdGhlIHJlcXVlc3QgaXMgaW4gY29uZm9ybWl0eSB3aXRoCisgICAgICAgeW91ciB2YWxpZCBsaWNlbnNlcyBmcm9tIEFkb2JlLgorICAgMTQuIFNwZWNpZmljIFByb3Zpc2lvbnMgYW5kIEV4Y2VwdGlvbnMuCisgICAgICAgMTQuMSAgTGltaXRlZCBXYXJyYW50eSBmb3IgVXNlcnMgUmVzaWRpbmcgaW4gR2VybWFueSBvciBBdXN0cmlhLiBJZiB5b3UKKyAgICAgICBvYnRhaW5lZCB0aGUgU29mdHdhcmUgaW4gR2VybWFueSBvciBBdXN0cmlhLCBhbmQgeW91IHVzdWFsbHkgcmVzaWRlIGluCisgICAgICAgc3VjaCBjb3VudHJ5LCB0aGVuIFNlY3Rpb24gNyBkb2VzIG5vdCBhcHBseSwgaW5zdGVhZCwgQWRvYmUgd2FycmFudHMKKyAgICAgICB0aGF0ICB0aGUgIFNvZnR3YXJlICBwcm92aWRlcyB0aGUgZnVuY3Rpb25hbGl0aWVzIHNldCBmb3J0aCBpbiB0aGUKKyAgICAgICBEb2N1bWVudGF0aW9uICAodGhlICJhZ3JlZWQgdXBvbiBmdW5jdGlvbmFsaXRpZXMiKSBmb3IgdGhlIGxpbWl0ZWQKKyAgICAgICB3YXJyYW50eSBwZXJpb2QgZm9sbG93aW5nIHJlY2VpcHQgb2YgdGhlIFNvZnR3YXJlIHdoZW4gdXNlZCBvbiB0aGUKKyAgICAgICByZWNvbW1lbmRlZCBoYXJkd2FyZSBjb25maWd1cmF0aW9uLiBBcyB1c2VkIGluIHRoaXMgU2VjdGlvbiwgImxpbWl0ZWQKKyAgICAgICB3YXJyYW50eSBwZXJpb2QiIG1lYW5zIG9uZSAoMSkgeWVhciBpZiB5b3UgYXJlIGEgYnVzaW5lc3MgdXNlciBhbmQgdHdvCisgICAgICAgKDIpIHllYXJzIGlmIHlvdSBhcmUgbm90IGEgYnVzaW5lc3MgdXNlci4gTm9uLXN1YnN0YW50aWFsIHZhcmlhdGlvbiBmcm9tCisgICAgICAgdGhlIGFncmVlZCB1cG9uIGZ1bmN0aW9uYWxpdGllcyBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCBhbmQgZG9lcyBub3QKKyAgICAgICBlc3RhYmxpc2ggYW55IHdhcnJhbnR5IHJpZ2h0cy4gVEhJUyBMSU1JVEVEIFdBUlJBTlRZIERPRVMgTk9UIEFQUExZIFRPCisgICAgICAgU09GVFdBUkUgIFBST1ZJREVEICBUTyAgWU9VICBGUkVFIE9GIENIQVJHRSwgRk9SIEVYQU1QTEUsIFVQREFURVMsCisgICAgICAgUFJFLVJFTEVBU0UsIFRSWU9VVCwgUFJPRFVDVCBTQU1QTEVSLCBOT1QgRk9SIFJFU0FMRSAoTkZSKSBDT1BJRVMgT0YKKyAgICAgICBTT0ZUV0FSRSwgT1IgU09GVFdBUkUgVEhBVCBIQVMgQkVFTiBBTFRFUkVEIEJZIFlPVSwgVE8gVEhFIEVYVEVOVCBTVUNICisgICAgICAgQUxURVJBVElPTlMgIENBVVNFRCBBIERFRkVDVC4gVG8gbWFrZSBhIHdhcnJhbnR5IGNsYWltLCBkdXJpbmcgdGhlCisgICAgICAgbGltaXRlZCB3YXJyYW50eSBwZXJpb2QgeW91IG11c3QgcmV0dXJuLCBhdCBvdXIgZXhwZW5zZSwgdGhlIFNvZnR3YXJlCisgICAgICAgYW5kIHByb29mIG9mIHB1cmNoYXNlIHRvIHRoZSBsb2NhdGlvbiB3aGVyZSB5b3Ugb2J0YWluZWQgaXQuIElmIHRoZQorICAgICAgIGZ1bmN0aW9uYWxpdGllcyBvZiB0aGUgU29mdHdhcmUgdmFyeSBzdWJzdGFudGlhbGx5IGZyb20gdGhlIGFncmVlZCB1cG9uCisgICAgICAgZnVuY3Rpb25hbGl0aWVzLCBBZG9iZSBpcyBlbnRpdGxlZCAtLSBieSB3YXkgb2YgcmUtcGVyZm9ybWFuY2UgYW5kIGF0CisgICAgICAgaXRzIG93biBkaXNjcmV0aW9uIC0tIHRvIHJlcGFpciBvciByZXBsYWNlIHRoZSBTb2Z0d2FyZS4gSWYgdGhpcyBmYWlscywKKyAgICAgICB5b3UgYXJlIGVudGl0bGVkIHRvIGEgcmVkdWN0aW9uIG9mIHRoZSBwdXJjaGFzZSBwcmljZSAocmVkdWN0aW9uKSBvciB0bworICAgICAgIGNhbmNlbCAgdGhlICBwdXJjaGFzZSBhZ3JlZW1lbnQgKHJlc2Npc3Npb24pLiBGb3IgZnVydGhlciB3YXJyYW50eQorICAgICAgIGluZm9ybWF0aW9uLCBwbGVhc2UgY29udGFjdCBBZG9iZSdzIEN1c3RvbWVyIFN1cHBvcnQgRGVwYXJ0bWVudAorICAgICAgIDE0LjIgIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5IGZvciBVc2VycyBSZXNpZGluZyBpbiBHZXJtYW55IGFuZCBBdXN0cmlhLgorICAgICAgIDE0LjIuMSAgSWYgeW91IG9idGFpbmVkIHRoZSBTb2Z0d2FyZSBpbiBHZXJtYW55IG9yIEF1c3RyaWEsIGFuZCB5b3UKKyAgICAgICB1c3VhbGx5IHJlc2lkZSBpbiBzdWNoIGNvdW50cnksIHRoZW4gU2VjdGlvbiA4IGRvZXMgbm90IGFwcGx5LCBJbnN0ZWFkLAorICAgICAgIHN1YmplY3QgdG8gdGhlIHByb3Zpc2lvbnMgaW4gU2VjdGlvbiAxNC4yLjIsIEFkb2JlJ3Mgc3RhdHV0b3J5IGxpYWJpbGl0eQorICAgICAgIGZvciBkYW1hZ2VzIHNoYWxsIGJlIGxpbWl0ZWQgYXMgZm9sbG93czogKGkpIEFkb2JlIHNoYWxsIGJlIGxpYWJsZSBvbmx5CisgICAgICAgdXAgdG8gdGhlIGFtb3VudCBvZiBkYW1hZ2VzIGFzIHR5cGljYWxseSBmb3Jlc2VlYWJsZSBhdCB0aGUgdGltZSBvZgorICAgICAgIGVudGVyaW5nIGludG8gdGhlIHB1cmNoYXNlIGFncmVlbWVudCBpbiByZXNwZWN0IG9mIGRhbWFnZXMgY2F1c2VkIGJ5IGEKKyAgICAgICBzbGlnaHRseSBuZWdsaWdlbnQgYnJlYWNoIG9mIGEgbWF0ZXJpYWwgY29udHJhY3R1YWwgb2JsaWdhdGlvbiBhbmQgKGlpKQorICAgICAgIEFkb2JlIHNoYWxsIG5vdCBiZSBsaWFibGUgZm9yIGRhbWFnZXMgY2F1c2VkIGJ5IGEgc2xpZ2h0bHkgbmVnbGlnZW50CisgICAgICAgYnJlYWNoIG9mIGEgbm9uLW1hdGVyaWFsIGNvbnRyYWN0dWFsIG9ibGlnYXRpb24uCisgICAgICAgMTQuMi4yICBUaGUgYWZvcmVzYWlkIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHNoYWxsIG5vdCBhcHBseSB0byBhbnkKKyAgICAgICBtYW5kYXRvcnkgc3RhdHV0b3J5IGxpYWJpbGl0eSwgaW4gcGFydGljdWxhciwgdG8gbGlhYmlsaXR5IHVuZGVyIHRoZQorICAgICAgIEdlcm1hbiAgUHJvZHVjdCAgTGlhYmlsaXR5ICBBY3QsIGxpYWJpbGl0eSBmb3IgYXNzdW1pbmcgYSBzcGVjaWZpYworICAgICAgIGd1YXJhbnRlZSBvciBsaWFiaWxpdHkgZm9yIGN1bHBhYmx5IGNhdXNlZCBwZXJzb25hbCBpbmp1cmllcy4KKyAgICAgICAxNC4yLjMgIFlvdSBhcmUgcmVxdWlyZWQgdG8gdGFrZSBhbGwgcmVhc29uYWJsZSBtZWFzdXJlcyB0byBhdm9pZCBhbmQKKyAgICAgICByZWR1Y2UgZGFtYWdlcywgaW4gcGFydGljdWxhciB0byBtYWtlIGJhY2stdXAgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSBhbmQKKyAgICAgICB5b3VyIGNvbXB1dGVyIGRhdGEgc3ViamVjdCB0byB0aGUgcHJvdmlzaW9ucyBvZiB0aGlzIEFncmVlbWVudC4KKyAgICAgICAxNC4zICBQcmUtcmVsZWFzZSBQcm9kdWN0IEFkZGl0aW9uYWwgVGVybXMuIElmIHRoZSBwcm9kdWN0IHlvdSBoYXZlCisgICAgICAgcmVjZWl2ZWQgd2l0aCB0aGlzIGxpY2Vuc2UgaXMgcHJlLWNvbW1lcmNpYWwgcmVsZWFzZSBvciBiZXRhIFNvZnR3YXJlCisgICAgICAgKCJQcmUtcmVsZWFzZSBTb2Z0d2FyZSIpLCB0aGVuIHRoZSBmb2xsb3dpbmcgU2VjdGlvbiBhcHBsaWVzLiBUbyB0aGUKKyAgICAgICBleHRlbnQgdGhhdCBhbnkgcHJvdmlzaW9uIGluIHRoaXMgU2VjdGlvbiBpcyBpbiBjb25mbGljdCB3aXRoIGFueSBvdGhlcgorICAgICAgIHRlcm0gb3IgY29uZGl0aW9uIGluIHRoaXMgQWdyZWVtZW50LCB0aGlzIFNlY3Rpb24gc2hhbGwgc3VwZXJjZWRlIHN1Y2gKKyAgICAgICBvdGhlciB0ZXJtKHMpIGFuZCBjb25kaXRpb24ocykgd2l0aCByZXNwZWN0IHRvIHRoZSBQcmUtcmVsZWFzZSBTb2Z0d2FyZSwKKyAgICAgICBidXQgIG9ubHkgIHRvICB0aGUgIGV4dGVudCAgbmVjZXNzYXJ5IHRvIHJlc29sdmUgdGhlIGNvbmZsaWN0LiBZb3UKKyAgICAgICBhY2tub3dsZWRnZSAgdGhhdCAgdGhlIFNvZnR3YXJlIGlzIGEgcHJlLXJlbGVhc2UgdmVyc2lvbiwgZG9lcyBub3QKKyAgICAgICByZXByZXNlbnQgZmluYWwgcHJvZHVjdCBmcm9tIEFkb2JlLCBhbmQgbWF5IGNvbnRhaW4gYnVncywgZXJyb3JzIGFuZAorICAgICAgIG90aGVyIHByb2JsZW1zIHRoYXQgY291bGQgY2F1c2Ugc3lzdGVtIG9yIG90aGVyIGZhaWx1cmVzIGFuZCBkYXRhIGxvc3MuCisgICAgICAgQ29uc2VxdWVudGx5LCB0aGUgUHJlLXJlbGVhc2UgU29mdHdhcmUgaXMgcHJvdmlkZWQgdG8geW91ICJBUy1JUyIsIGFuZAorICAgICAgIEFkb2JlIGRpc2NsYWltcyBhbnkgd2FycmFudHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIHlvdSBvZiBhbnkKKyAgICAgICBraW5kLiBXSEVSRSBMSUFCSUxJVFkgQ0FOTk9UIEJFIEVYQ0xVREVEIEZPUiBQUkUtUkVMRUFTRSBTT0ZUV0FSRSwgQlVUCisgICAgICAgSVQgTUFZIEJFIExJTUlURUQsIEFET0JFJ1MgTElBQklMSVRZIEFORCBUSEFUIE9GIElUUyBTVVBQTElFUlMgU0hBTEwgQkUKKyAgICAgICBMSU1JVEVEIFRPIFRIRSBTVU0gT0YgRklGVFkgRE9MTEFSUyAoVS5TLiAkNTApIElOIFRPVEFMLiBZb3UgYWNrbm93bGVkZ2UKKyAgICAgICB0aGF0ICBBZG9iZSBoYXMgbm90IHByb21pc2VkIG9yIGd1YXJhbnRlZWQgdG8geW91IHRoYXQgUHJlLXJlbGVhc2UKKyAgICAgICBTb2Z0d2FyZSB3aWxsIGJlIGFubm91bmNlZCBvciBtYWRlIGF2YWlsYWJsZSB0byBhbnlvbmUgaW4gdGhlIGZ1dHVyZSwKKyAgICAgICBBZG9iZSAgaGFzICBubyBleHByZXNzIG9yIGltcGxpZWQgb2JsaWdhdGlvbiB0byB5b3UgdG8gYW5ub3VuY2Ugb3IKKyAgICAgICBpbnRyb2R1Y2UgdGhlIFByZS1yZWxlYXNlIFNvZnR3YXJlIGFuZCB0aGF0IEFkb2JlIG1heSBub3QgaW50cm9kdWNlIGEKKyAgICAgICBwcm9kdWN0ICBzaW1pbGFyICB0byAgb3IgY29tcGF0aWJsZSB3aXRoIHRoZSBQcmUtcmVsZWFzZSBTb2Z0d2FyZS4KKyAgICAgICBBY2NvcmRpbmdseSwgeW91IGFja25vd2xlZGdlIHRoYXQgYW55IHJlc2VhcmNoIG9yIGRldmVsb3BtZW50IHRoYXQgeW91CisgICAgICAgcGVyZm9ybSByZWdhcmRpbmcgdGhlIFByZS1yZWxlYXNlIFNvZnR3YXJlIG9yIGFueSBwcm9kdWN0IGFzc29jaWF0ZWQKKyAgICAgICB3aXRoIHRoZSBQcmUtcmVsZWFzZSBTb2Z0d2FyZSBpcyBkb25lIGVudGlyZWx5IGF0IHlvdXIgb3duIHJpc2suIER1cmluZworICAgICAgIHRoZSB0ZXJtIG9mIHRoaXMgQWdyZWVtZW50LCBpZiByZXF1ZXN0ZWQgYnkgQWRvYmUsIHlvdSB3aWxsIHByb3ZpZGUKKyAgICAgICBmZWVkYmFjayB0byBBZG9iZSByZWdhcmRpbmcgdGVzdGluZyBhbmQgdXNlIG9mIHRoZSBQcmUtcmVsZWFzZSBTb2Z0d2FyZSwKKyAgICAgICBpbmNsdWRpbmcgIGVycm9yICBvciAgYnVnICByZXBvcnRzLiAgSWYgeW91IGhhdmUgYmVlbiBwcm92aWRlZCB0aGUKKyAgICAgICBQcmUtcmVsZWFzZSBTb2Z0d2FyZSBwdXJzdWFudCB0byBhIHNlcGFyYXRlIHdyaXR0ZW4gYWdyZWVtZW50LCBzdWNoIGFzCisgICAgICAgdGhlIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkIFNlcmlhbCBBZ3JlZW1lbnQgZm9yIFVucmVsZWFzZWQgUHJvZHVjdHMsCisgICAgICAgeW91ciB1c2Ugb2YgdGhlIFNvZnR3YXJlIGlzIGFsc28gZ292ZXJuZWQgYnkgc3VjaCBhZ3JlZW1lbnQuIFlvdSBhZ3JlZQorICAgICAgIHRoYXQgeW91IG1heSBub3QgYW5kIGNlcnRpZnkgdGhhdCB5b3Ugd2lsbCBub3Qgc3VibGljZW5zZSwgbGVhc2UsIGxvYW4sCisgICAgICAgcmVudCwgYXNzaWduIG9yIHRyYW5zZmVyIHRoZSBQcmUtcmVsZWFzZSBTb2Z0d2FyZS4gVXBvbiByZWNlaXB0IG9mIGEKKyAgICAgICBsYXRlciB1bnJlbGVhc2VkIHZlcnNpb24gb2YgdGhlIFByZS1yZWxlYXNlIFNvZnR3YXJlIG9yIHJlbGVhc2UgYnkgQWRvYmUKKyAgICAgICBvZiBhIHB1YmxpY2x5IHJlbGVhc2VkIGNvbW1lcmNpYWwgdmVyc2lvbiBvZiB0aGUgU29mdHdhcmUsIHdoZXRoZXIgYXMgYQorICAgICAgIHN0YW5kLWFsb25lIHByb2R1Y3Qgb3IgYXMgcGFydCBvZiBhIGxhcmdlciBwcm9kdWN0LCB5b3UgYWdyZWUgdG8gcmV0dXJuCisgICAgICAgb3IgZGVzdHJveSBhbGwgZWFybGllciBQcmUtcmVsZWFzZSBTb2Z0d2FyZSByZWNlaXZlZCBmcm9tIEFkb2JlIGFuZCB0bworICAgICAgIGFiaWRlIGJ5IHRoZSB0ZXJtcyBvZiB0aGUgbGljZW5zZSBhZ3JlZW1lbnQgZm9yIGFueSBzdWNoIGxhdGVyIHZlcnNpb25zCisgICAgICAgb2YgdGhlIFByZS1yZWxlYXNlIFNvZnR3YXJlLiBOb3R3aXRoc3RhbmRpbmcgYW55dGhpbmcgaW4gdGhpcyBTZWN0aW9uIHRvCisgICAgICAgdGhlIGNvbnRyYXJ5LCBpZiB5b3UgYXJlIGxvY2F0ZWQgb3V0c2lkZSB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLAorICAgICAgIHlvdSBhZ3JlZSB0aGF0IHlvdSB3aWxsIHJldHVybiBvciBkZXN0cm95IGFsbCB1bnJlbGVhc2VkIHZlcnNpb25zIG9mIHRoZQorICAgICAgIFByZS1yZWxlYXNlIFNvZnR3YXJlIHdpdGhpbiB0aGlydHkgKDMwKSBkYXlzIG9mIHRoZSBjb21wbGV0aW9uIG9mIHlvdXIKKyAgICAgICB0ZXN0aW5nIG9mIHRoZSBTb2Z0d2FyZSB3aGVuIHN1Y2ggZGF0ZSBpcyBlYXJsaWVyIHRoYW4gdGhlIGRhdGUgZm9yCisgICAgICAgQWRvYmUncyBmaXJzdCBjb21tZXJjaWFsIHNoaXBtZW50IG9mIHRoZSBwdWJsaWNseSByZWxlYXNlZCAoY29tbWVyY2lhbCkKKyAgICAgICBTb2Z0d2FyZS4KKyAgICAgICAxNC40ICBTZXR0aW5ncyBNYW5hZ2VyLiBVc2Ugb2YgdGhlIFdlYiBQbGF5ZXJzLCBzcGVjaWZpY2FsbHkgdGhlIEZsYXNoCisgICAgICAgUGxheWVyLCB3aWxsIGVuYWJsZSB0aGUgU29mdHdhcmUgdG8gc3RvcmUgY2VydGFpbiB1c2VyIHNldHRpbmdzIGFzIGEKKyAgICAgICBsb2NhbCAgc2hhcmVkICBvYmplY3QgIG9uICBhIHlvdXIgQ29tcHV0ZXIuIFRoZXNlIHNldHRpbmdzIGFyZSBub3QKKyAgICAgICBhc3NvY2lhdGVkIHdpdGggeW91LCBidXQgYWxsb3cgeW91IHRvIGNvbmZpZ3VyZSBjZXJ0YWluIHNldHRpbmdzIHdpdGhpbgorICAgICAgIHRoZSBGbGFzaCBQbGF5ZXIuIFlvdSBjYW4gZmluZCBtb3JlIGluZm9ybWF0aW9uIG9uIGxvY2FsIHNoYXJlZCBvYmplY3RzCisgICAgICAgYXQgWzk5XWh0dHA6Ly93d3cuYWRvYmUuY29tL3NvZnR3YXJlL2ZsYXNocGxheWVyL3NlY3VyaXR5LyBhbmQgbW9yZQorICAgICAgIGluZm9ybWF0aW9uIG9uIHRoZSBTZXR0aW5ncyBNYW5hZ2VyIGF0CisgICAgICAgWzEwMF13d3cuYWRvYmUuY29tL2dvL3NldHRpbmdzbWFuYWdlci4KKworICAgSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyByZWdhcmRpbmcgdGhpcyBBZ3JlZW1lbnQgb3IgaWYgeW91IHdpc2ggdG8gcmVxdWVzdAorICAgYW55IGluZm9ybWF0aW9uIGZyb20gQWRvYmUgcGxlYXNlIHVzZSB0aGUgYWRkcmVzcyBhbmQgY29udGFjdCBpbmZvcm1hdGlvbgorICAgaW5jbHVkZWQgd2l0aCB0aGlzIHByb2R1Y3Qgb3IgdmlhIHRoZSB3ZWIgYXQgd3d3LmFkb2JlLmNvbSB0byBjb250YWN0IHRoZQorICAgQWRvYmUgb2ZmaWNlIHNlcnZpbmcgeW91ciBqdXJpc2RpY3Rpb24KKworICAgQWRvYmUsICBBdXRob3J3YXJlLCBGbGFzaCwgUmVhZGVyLCBhbmQgU2hvY2t3YXZlIGFyZSBlaXRoZXIgcmVnaXN0ZXJlZAorICAgdHJhZGVtYXJrcyBvciB0cmFkZW1hcmtzIG9mIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkIGluIHRoZSBVbml0ZWQgU3RhdGVzCisgICBhbmQvb3Igb3RoZXIgY291bnRyaWVzLgorCisKKyAgIFJlYWRlci1QbGF5ZXJXV0VVTEEtZW5fVVMtMjAwNjA2MDdfMjIzMApkaWZmIC0tZ2l0IGEvbGljZW5zZXMvQWRvYmVQUyBiL2xpY2Vuc2VzL0Fkb2JlUFMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWYzOGE3YQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0Fkb2JlUFMKQEAgLTAsMCArMSw1MSBAQAorQWRvYmUgRW5kLVVzZXIgTGljZW5zZSBBZ3JlZW1lbnQKKworQnkgZG93bmxvYWRpbmcgc29mdHdhcmUgb2YgQWRvYmUgU3lzdGVtcyBJbmNvcnBvcmF0ZWQgb3IgaXRzCitzdWJzaWRpYXJpZXMgKCJBZG9iZSIpIGZyb20gdGhpcyBzaXRlLCB5b3UgYWdyZWUgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcworYW5kIGNvbmRpdGlvbnMuIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCBzdWNoIHRlcm1zIGFuZCBjb25kaXRpb25zIGRvCitub3QgZG93bmxvYWQgdGhlIHNvZnR3YXJlLiBUaGUgdGVybXMgb2YgYW4gZW5kIHVzZXIgbGljZW5zZSBhZ3JlZW1lbnQKK2FjY29tcGFueWluZyBhIHBhcnRpY3VsYXIgc29mdHdhcmUgZmlsZSB1cG9uIGluc3RhbGxhdGlvbiBvciBkb3dubG9hZAorb2YgdGhlIHNvZnR3YXJlIHNoYWxsIHN1cGVyc2VkZSB0aGUgdGVybXMgcHJlc2VudGVkIGJlbG93LgorCitUaGUgZXhwb3J0IGFuZCByZS1leHBvcnQgb2YgQWRvYmUgc29mdHdhcmUgcHJvZHVjdHMgYXJlIGNvbnRyb2xsZWQgYnkKK3RoZSBVbml0ZWQgU3RhdGVzIEV4cG9ydCBBZG1pbmlzdHJhdGlvbiBSZWd1bGF0aW9ucyBhbmQgc3VjaCBzb2Z0d2FyZQorbWF5IG5vdCBiZSBleHBvcnRlZCBvciByZS1leHBvcnRlZCB0byBDdWJhLCBJcmFuLCBJcmFxLCBMaWJ5YSwgTm9ydGgKK0tvcmVhLCBTdWRhbiwgU3lyaWEsIG9yIGFueSBjb3VudHJ5IHRvIHdoaWNoIHRoZSBVbml0ZWQgU3RhdGVzCitlbWJhcmdvZXMgZ29vZHMuIEluIGFkZGl0aW9uLCBBZG9iZSBzb2Z0d2FyZSBtYXkgbm90IGJlIGRpc3RyaWJ1dGVkIHRvCitwZXJzb25zIG9uIHRoZSBUYWJsZSBvZiBEZW5pYWwgT3JkZXJzLCB0aGUgRW50aXR5IExpc3QsIG9yIHRoZSBMaXN0IG9mCitTcGVjaWFsbHkgRGVzaWduYXRlZCBOYXRpb25hbHMuCisKK0J5IGRvd25sb2FkaW5nIG9yIHVzaW5nIGFuIEFkb2JlIHNvZnR3YXJlIHByb2R1Y3QgeW91IGFyZSBjZXJ0aWZ5aW5nCit0aGF0IHlvdSBhcmUgbm90IGEgbmF0aW9uYWwgb2YgQ3ViYSwgSXJhbiwgSXJhcSwgTGlieWEsIE5vcnRoIEtvcmVhLAorU3VkYW4sIFN5cmlhLCBvciBhbnkgY291bnRyeSB0byB3aGljaCB0aGUgVW5pdGVkIFN0YXRlcyBlbWJhcmdvZXMgZ29vZHMKK2FuZCB0aGF0IHlvdSBhcmUgbm90IGEgcGVyc29uIG9uIHRoZSBUYWJsZSBvZiBEZW5pYWwgT3JkZXJzLCB0aGUgRW50aXR5CitMaXN0LCBvciB0aGUgTGlzdCBvZiBTcGVjaWFsbHkgRGVzaWduYXRlZCBOYXRpb25hbHMuCisKK0lmIHRoZSBzb2Z0d2FyZSBpcyBkZXNpZ25lZCBmb3IgdXNlIHdpdGggYW4gYXBwbGljYXRpb24gc29mdHdhcmUKK3Byb2R1Y3QgKHRoZSAiSG9zdCBBcHBsaWNhdGlvbiIpIHB1Ymxpc2hlZCBieSBBZG9iZSwgQWRvYmUgZ3JhbnRzIHlvdSBhCitub25leGNsdXNpdmUgbGljZW5zZSB0byB1c2Ugc3VjaCBzb2Z0d2FyZSB3aXRoIHRoZSBIb3N0IEFwcGxpY2F0aW9uCitvbmx5LCBwcm92aWRlZCB5b3UgcG9zc2VzcyBhIHZhbGlkIGxpY2Vuc2UgZnJvbSBBZG9iZSBmb3IgdGhlIEhvc3QKK0FwcGxpY2F0aW9uLiBFeGNlcHQgYXMgc2V0IGZvcnRoIGJlbG93LCBzdWNoIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHRvCit5b3Ugc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEVuZC1Vc2VyIExpY2Vuc2UKK0FncmVlbWVudCBmcm9tIEFkb2JlIGdvdmVybmluZyB5b3VyIHVzZSBvZiB0aGUgSG9zdCBBcHBsaWNhdGlvbi4KKworRElTQ0xBSU1FUiBPRiBXQVJSQU5USUVTOiBZT1UgQUdSRUUgVEhBVCBBRE9CRSBIQVMgTUFERSBOTyBFWFBSRVNTCitXQVJSQU5USUVTIFRPIFlPVSBSRUdBUkRJTkcgVEhFIFNPRlRXQVJFIEFORCBUSEFUIFRIRSBTT0ZUV0FSRSBJUyBCRUlORworUFJPVklERUQgVE8gWU9VICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORC4gQURPQkUgRElTQ0xBSU1TCitBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSEUgU09GVFdBUkUsIEVYUFJFU1MgT1IgSU1QTElFRCwKK0lOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgSU1QTElFRCBXQVJSQU5USUVTIE9GIEZJVE5FU1MgRk9SIEEKK1BBUlRJQ1VMQVIgUFVSUE9TRSwgTUVSQ0hBTlRBQklMSVRZLCBNRVJDSEFOVEFCTEUgUVVBTElUWSwgT1IKK05PTklORlJJTkdFTUVOVCBPRiBUSElSRC1QQVJUWSBSSUdIVFMuIFNvbWUgc3RhdGVzIG9yIGp1cmlzZGljdGlvbnMgZG8KK25vdCBhbGxvdyB0aGUgZXhjbHVzaW9uIG9mIGltcGxpZWQgd2FycmFudGllcywgc28gdGhlIGFib3ZlIGxpbWl0YXRpb25zCittYXkgbm90IGFwcGx5IHRvIHlvdS4KKworTElNSVQgT0YgTElBQklMSVRZOiBJTiBOTyBFVkVOVCBXSUxMIEFET0JFIEJFIExJQUJMRSBUTyBZT1UgRk9SIEFOWQorTE9TUyBPRiBVU0UsIElOVEVSUlVQVElPTiBPRiBCVVNJTkVTUywgT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCitTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIEtJTkQgKElOQ0xVRElORworTE9TVCBQUk9GSVRTKSBSRUdBUkRMRVNTIE9GIFRIRSBGT1JNIE9GIEFDVElPTiBXSEVUSEVSIElOIENPTlRSQUNULAorVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgUFJPRFVDVCBMSUFCSUxJVFkgT1IgT1RIRVJXSVNFLAorRVZFTiBJRiBBRE9CRSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFNvbWUKK3N0YXRlcyBvciBqdXJpc2RpY3Rpb25zIGRvIG5vdCBhbGxvdyB0aGUgZXhjbHVzaW9uIG9yIGxpbWl0YXRpb24gb2YKK2luY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzbyB0aGUgYWJvdmUgbGltaXRhdGlvbiBvcgorZXhjbHVzaW9uIG1heSBub3QgYXBwbHkgdG8geW91LgorCmRpZmYgLS1naXQgYS9saWNlbnNlcy9BZ2VyZVN5c3RlbXMtV2luTW9kZW0gYi9saWNlbnNlcy9BZ2VyZVN5c3RlbXMtV2luTW9kZW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjdhODM3YwotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0FnZXJlU3lzdGVtcy1XaW5Nb2RlbQpAQCAtMCwwICsxLDEwNCBAQAorQWdlcmUgU3lzdGVtcyBXaW5Nb2RlbSBFbmQgVXNlciBTT0ZUV0FSRSBMSUNFTlNFIEFHUkVFTUVOVAorCitUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgd2lsbCBhcHBseSB0byB0aGUgQWdlcmUgCitTeXN0ZW1zIFdpbk1vZGVtIFNvZnR3YXJlIChoZXJlYWZ0ZXIgIlNvZnR3YXJlIikgc3VwcGxpZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgCithbmQgYW55IGRlcml2YXRpdmVzIG9idGFpbmVkIHRoZXJlZnJvbSwgaW5jbHVkaW5nIGFueSBjb3B5LiAgVGhlIHRlcm0gU29mdHdhcmUgCitpbmNsdWRlcyBwcm9ncmFtcyBhbmQgcmVsYXRlZCBkb2N1bWVudGF0aW9uIHN1cHBsaWVkIGhlcmV3aXRoLgorCitUaGUgZm9sbG93aW5nIGZpbGUgaXMgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHN0YW5kYXJkIExpbnV4IGxpY2Vuc2UsIAorYSBjb3B5IG9mIHdoaWNoIG1heSBiZSBmb3VuZCBhdCAuCitzZXJpYWwuYworc2VyaWFsMjQuYworIAorVGhlc2UgYWRkaXRpb25hbCBmaWxlcyBhcmUgbm90IGRlcml2ZWQgZnJvbSBhbnkgTGludXggb3BlbiBzb3VyY2UgY29udGVudCwgCithbmQgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnMuCitsdG1vZGVtLmMKK2xpbnV4aWYuaAorbHRtZG1vYmoubworTWFrZWZpbGUKK2x0aW5zdAorbHR1bmluc3QKK3JlYWRtZS50eHQKKworMS4wICBUSVRMRSBBTkQgTElDRU5TRSBHUkFOVAorCisJMS4xCVRoZSBTb2Z0d2FyZSBpcyBjb3B5cmlnaHRlZCBhbmQvb3IgY29udGFpbnMgcHJvcHJpZXRhcnkgCisgICAgICAgICAgICAgICAgaW5mb3JtYXRpb24gcHJvdGVjdGVkIGJ5IGxhdy4gIEFsbCBTb2Z0d2FyZSBhbmQgYWxsIGNvcGllcyAKKyAgICAgICAgICAgICAgICB0aGVyZW9mIGFyZSBhbmQgd2lsbCByZW1haW4gdGhlIHNvbGUgcHJvcGVydHkgb2YgQWdlcmUgU3lzdGVtcyBvciAKKyAgICAgICAgICAgICAgICBpdHMgc3VwcGxpZXJzLiAgQWdlcmUgU3lzdGVtcyBoZXJlYnkgZ3JhbnRzIHlvdSBhIG5vbi1leGNsdXNpdmUgcmlnaHQgCisgICAgICAgICAgICAgICAgdG8gdXNlIHRoZSBTb2Z0d2FyZSwgaW4gd2hhdGV2ZXIgZm9ybSByZWNvcmRlZCwgd2hpY2ggaXMgZnVybmlzaGVkIHRvIAorICAgICAgICAgICAgICAgIHlvdSB1bmRlciBvciBpbiBjb250ZW1wbGF0aW9uIG9mIHRoaXMgQWdyZWVtZW50LCBpbiBhbiBBZ2VyZSBTeXN0ZW1zIAorICAgICAgICAgICAgICAgIHdpbm1vZGVtLiAgQW55IG90aGVyIHVzZSBvZiB0aGUgU29mdHdhcmUgb3IgcmVtb3ZhbCBvZiB0aGUgU29mdHdhcmUgZnJvbSAKKyAgICAgICAgICAgICAgICBhIGNvdW50cnkgaW4gd2hpY2ggdXNlIGlzIGxpY2Vuc2VkIHNoYWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHRoaXMgbGljZW5zZS4KKworCTEuMglZb3UgYWdyZWUgdG8gdXNlIHlvdXIgYmVzdCBlZmZvcnRzIHRvIHNlZSB0aGF0IGFueSB1c2VyIG9mIHRoZSBTb2Z0d2FyZSAKKyAgICAgICAgICAgICAgICBsaWNlbnNlZCBoZXJldW5kZXIgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQuCisKKworMi4wICBTT0ZUV0FSRSBVU0UKKworCTIuMQlZb3UgYXJlIHBlcm1pdHRlZCB0byBtYWtlIGNvcGllcyBvZiB0aGUgU29mdHdhcmUgcHJvdmlkZWQgdGhhdCBhbnkgc3VjaCBjb3B5IAorICAgICAgICAgICAgICAgIHNoYWxsIGNvbnRhaW4gdGhlIHNhbWUgY29weXJpZ2h0IG5vdGljZSBhbmQgcHJvcHJpZXRhcnkgbWFya2luZyBpbmNsdWRlZCBvbiAKKyAgICAgICAgICAgICAgICB0aGUgb3JpZ2luYWwgU29mdHdhcmUuCisKKwkyLjIJWW91IGFncmVlIG5vdCB0byBtZXJnZSBvciBjb21iaW5lIGFueSBwb3J0aW9uIG9mIHRoZSBTb2Z0d2FyZSB3aXRoIGFueSBvdGhlciAKKyAgICAgICAgICAgICAgICBzb2Z0d2FyZSwgb3RoZXIgdGhhbiB0aGUgTGludXggb3BlcmF0aW5nIHN5c3RlbSwgdW5sZXNzIGV4cHJlc3NseSBwZXJtaXR0ZWQgYnkgCisgICAgICAgICAgICAgICAgdGhlIGxhd3Mgb2YgdGhlIGp1cmlzZGljdGlvbiB3aGVyZSB5b3UgYXJlIGxvY2F0ZWQuICBBbnkgcG9ydGlvbiBvZiB0aGUgU29mdHdhcmUgCisgICAgICAgICAgICAgICAgbWVyZ2VkIG9yIGNvbWJpbmVkIHdpdGggdGhlIG90aGVyIHNvZnR3YXJlIHdpbGwgY29udGludWUgdG8gYmUgdGhlIHN1YmplY3Qgb2YgdGhlIAorICAgICAgICAgICAgICAgIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCB5b3UgYWdyZWUgdG8gcmVwcm9kdWNlIG9uIHRoZSBtZXJnZWQgCisgICAgICAgICAgICAgICAgb3IgY29tYmluZWQgcG9ydGlvbiBvZiB0aGUgU29mdHdhcmUgdGhlIGNvcHlyaWdodCBhbmQgb3RoZXIgcHJvcHJpZXRhcnkgcmlnaHRzIAorICAgICAgICAgICAgICAgIG5vdGljZXMgaW5jbHVkZWQgaW4gdGhlIG9yaWdpbmFsIFNvZnR3YXJlLgorCisgICAgICAgMi4zICAgICAgUmVkaXN0cmlidXRpb24gYW5kIFVzYWdlCisgICAgICAgICAgICAgICAgQWdlcmUgcGVybWl0cyB1c2UgYW5kIGxpbWl0ZWQgcmVkaXN0cmlidXRpb24gb2YgdGhpcyBMaWNlbnNlZCBTb2Z0d2FyZSBpbiBzb3VyY2UgYW5kIAorICAgICAgICAgICAgICAgIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLCAKKyAgICAgICAgICAgICAgICBpbiBhZGRpdGlvbiB0byB0aGUgdGVybXMgbWVudGlvbmVkIGluIHRoaXMgYWdyZWVtZW50LiAKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAyLjMuMSAJQWdlcmUgU3lzdGVtcyByZXNlcnZlcyB0aGUgcmlnaHQgbm90IHRvIGFsbG93IGEgdGhpcmQgcGFydHkgdG8gcmV1c2Ugb3IgCisgICAgICAgICAgICAgICAgICAgICAgICByZWRpc3RyaWJ1dGUgdGhlIHNvZnR3YXJlLCBhdCBpdHMgc29sZSBkaXNjcmV0aW9uLgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIDIuMy4yCVVzZXIgaGVyZWJ5IGFncmVlcyBub3QgdG8gcmVtb3ZlIG9yIGFsdGVyIGFueSBjb3B5cmlnaHQsIHRyYWRlbWFyaywgY3JlZGl0cyAKKyAgICAgICAgICAgICAgICAgICAgICAgIGFuZCBvdGhlciBwcm9wcmlldGFyeSBub3RpY2VzIGNvbnRhaW5lZCB3aXRoaW4gb3IgYXNzb2NpYXRlZCB3aXRoIHRoZSBMaWNlbnNlZCAKKyAgICAgICAgICAgICAgICAgICAgICAgIFNvZnR3YXJlLCBhbmQgc2hhbGwgaW5jbHVkZSBhbGwgc3VjaCB1bmFsdGVyZWQgY29weXJpZ2h0LCB0cmFkZW1hcmssIGNyZWRpdHMgYW5kIAorICAgICAgICAgICAgICAgICAgICAgICAgb3RoZXIgcHJvcHJpZXRhcnkgbm90aWNlcyBvbiBvciBpbiBldmVyeSBjb3B5IG9mIHRoZSBTb2Z0d2FyZS4KKworICAgICAgICAgICAgICAgIDIuMy4zCU5vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9ucyBpbiB0aGlzIEFncmVlbWVudCB0byB0aGUgY29udHJhcnksIGFueSAKKyAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWNhdGlvbnMgb3IgYWx0ZXJhdGlvbnMgbWFkZSB0byB0aGUgTGljZW5zZWQgU29mdHdhcmUgc2hhbGwgY2F1c2UgYW55IAorICAgICAgICAgICAgICAgICAgICAgICAgd2FycmFudGllcyBhbmQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZGVtbmlmaWNhdGlvbnMgdG8gYmVjb21lIG51bGwgYW5kIAorICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCBhbmQgb2Ygbm8gZnVydGhlciBlZmZlY3QuCisKKzMuMCAgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWQorCisJMy4xICBZb3UgdW5kZXJzdGFuZCBhbmQgYWNrbm93bGVkZ2UgdGhhdCB0aGUgU29mdHdhcmUgbWF5IGNvbnRhaW4gZXJyb3JzLCBidWdzIG9yIG90aGVyIAorICAgICAgICAgICAgIGRlZmVjdHMuICBUaGUgU29mdHdhcmUgaXMgcHJvdmlkZWQgb24gQVMtSVMgYmFzaXMsIHdpdGhvdXQgd2FycmFudHkgb2YgYW55IGtpbmQuCisKKwkzLjIgIEFnZXJlIFN5c3RlbXMgaGFzIHVzZWQgcmVhc29uYWJsZSBlZmZvcnRzIHRvIG1pbmltaXplIGRlZmVjdHMgb3IgZXJyb3JzIGluIHRoZSBTb2Z0d2FyZS4gIAorICAgICAgICAgICAgIEhPV0VWRVIsIFlPVSBBU1NVTUUgVEhFIFJJU0sgT0YgQU5ZIEFORCBBTEwgREFNQUdFIE9SIExPU1MgRlJPTSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSAKKyAgICAgICAgICAgICBUSEUgU09GVFdBUkUuICBTcGVjaWZpY2FsbHksIGJ1dCBub3QgaW4gbGltaXRhdGlvbiBvZiB0aGUgZm9yZWdvaW5nIGRpc2NsYWltZXJzLCBBZ2VyZSAKKyAgICAgICAgICAgICBTeXN0ZW1zIGRvZXMgbm90IHdhcnJhbnQgdGhhdCB0aGUgZnVuY3Rpb25zIG9mIHRoZSBTb2Z0d2FyZSB3aWxsIG1lZXQgeW91ciByZXF1aXJlbWVudHMgCisgICAgICAgICAgICAgb3IgdGhhdCB0aGUgU29mdHdhcmUgb3BlcmF0aW9uIHdpbGwgYmUgZXJyb3ItZnJlZSBvciB1bmludGVycnVwdGVkLgorCisJMy4zICBBZ2VyZSBTeXN0ZW1zIGJlYXJzIG5vIHJlc3BvbnNpYmlsaXR5IGZvciBzdXBwbHlpbmcgYXNzaXN0YW5jZSBmb3IgZml4aW5nIG9yIGZvciAKKyAgICAgICAgICAgICBjb21tdW5pY2F0aW5nIGtub3duIGVycm9ycyB0byB5b3UgcGVydGFpbmluZyB0byB0aGUgU29mdHdhcmUgc3VwcGxpZWQgaGVyZXVuZGVyLgorCisJMy40ICBZT1UgVU5ERVJTVEFORCBUSEFUIEFHRVJFIFNZU1RFTVMsIElUUyBBRkZJTElBVEVTLCBDT05UUkFDVE9SUywgU1VQUExJRVJTLCBBTkQgQUdFTlRTIAorICAgICAgICAgICAgIE1BS0UgTk8gV0FSUkFOVElFUywgRVhQUkVTUyBPUiBJTVBMSUVELCBBTkQgU1BFQ0lGSUNBTExZIERJU0NMQUlNIEFOWSBXQVJSQU5UWSBPRiAKKyAgICAgICAgICAgICBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisKKzQuMCAgRVhDTFVTSVZFIFJFTUVESUVTIEFORCBMSU1JVEFUSU9OIE9GIExJQUJJTElUSUVTCisKKwk0LjEgIFJlZ2FyZGxlc3Mgb2YgYW55IG90aGVyIHByb3Zpc2lvbnMgb2YgdGhpcyBBZ3JlZW1lbnQsIG5laXRoZXIgQWdlcmUgU3lzdGVtcyBub3IgaXRzIAorICAgICAgICAgICAgIGFmZmlsaWF0ZXMsIGNvbnRyYWN0b3JzLCBzdXBwbGllcnMsIG9yIGFnZW50cyBzaGFsbCBiZSBsaWFibGUgZm9yIGFueSBpbmRpcmVjdCwgaW5jaWRlbnRhbCwgCisgICAgICAgICAgICAgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIChpbmNsdWRpbmcgbG9zdCBwcm9maXRzKSBzdXN0YWluZWQgb3IgaW5jdXJyZWQgaW4gY29ubmVjdGlvbiB3aXRoIAorICAgICAgICAgICAgIHRoZSB1c2UsIG9wZXJhdGlvbiwgb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUgU29mdHdhcmUgb3IgZm9yIGRhbWFnZXMgZHVlIHRvIGNhdXNlcyBiZXlvbmQgCisgICAgICAgICAgICAgdGhlIHJlYXNvbmFibGUgY29udHJvbCBvZiBBZ2VyZSBTeXN0ZW1zLCBpdHMgYWZmaWxpYXRlcywgY29udHJhY3RvcnMsIHN1cHBsaWVycywgYW5kIGFnZW50cyAKKyAgICAgICAgICAgICBhdHRyaWJ1dGFibGUgdG8gYW55IHNlcnZpY2UsIHByb2R1Y3RzLCBvciBhY3Rpb24gb2YgYW55IG90aGVyIHBlcnNvbi4KKworCTQuMiAgVGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgY29uc3RydWVkIGluIGFjY29yZGFuY2Ugd2l0aCBhbmQgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlIAorICAgICAgICAgICAgIFN0YXRlIG9mIE5ldyBZb3JrLgorCitZT1UgQUNLTk9XTEVER0UgVEhBVCBZT1UgSEFWRSBSRUFEIFRISVMgQUdSRUVNRU5UIEFORCBVTkRFUlNUQU5EIElULCBBTkQgVEhBVCBCWSBET1dOTE9BRElORyBPUiBVU0lORyAKK1RIRSBTT0ZUV0FSRSwgWU9VIEFHUkVFIFRPIEJFIEJPVU5EIEJZIElUUyBURVJNUyBBTkQgQ09ORElUSU9OUy4gIFlPVSBGVVJUSEVSIEFHUkVFIFRIQVQgVEhJUyBBR1JFRU1FTlQgCitJUyBUSEUgQ09NUExFVEUgQU5EIEVYQ0xVU0lWRSBTVEFURU1FTlQgT0YgVEhFIFJJR0hUUyBBTkQgTElBQklMSVRJRVMgT0YgVEhFIFBBUlRJRVMuICBUSElTIEFHUkVFTUVOVCAKK1NVUEVSQ0VERVMgQUxMIFBSSU9SIE9SQUwgQUdSRUVNRU5UUywgUFJPUE9TQUxTIE9SIFVOREVSU1RBTkRJTkdTLCBBTkQgQU5ZIE9USEVSIENPTU1VTklDQVRJT05TIEJFVFdFRU4gCitVUyBSRUxBVElORyBUTyBUSEUgU1VCSkVDVCBNQVRURVIgT0YgVEhJUyBBR1JFRU1FTlQuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9BbGFkZGluIGIvbGljZW5zZXMvQWxhZGRpbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjZlM2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvQWxhZGRpbgpAQCAtMCwwICsxLDIzOSBAQAorU291cmNlIGNvZGUgYW5kIG90aGVyIHNvZnR3YXJlIGNvbXBvbmVudHMgZXhwbGljaXRseSBpZGVudGlmaWVkIGFzIAorQ29weXJpZ2h0IFRyYW5zR2FtaW5nIFRlY2hub2xvZ2llcyBJbmMuIGlzIGNvdmVyZWQgYnkgdGhlIGxpY2Vuc2UKK2JlbG93LiAgT3RoZXIgc291cmNlIGNvZGUgYW5kIHNvZnR3YXJlIGNvbXBvbmVudHMgYXJlIGNvdmVyZWQgYnkgdGhlCitXaW5lIGxpY2Vuc2UsIGZvdW5kIGluIHRoZSBMSUNFTlNFLndpbmVocSBmaWxlLgorCisgICAgICAgICAgICAgICAgICAgICAgICAgQWxhZGRpbiBGcmVlIFB1YmxpYyBMaWNlbnNlCisgICAgICAgICAgICAgICAgICAgICAgKFZlcnNpb24gOSwgU2VwdGVtYmVyIDE4LCAyMDAwKQorCisgICAgQ29weXJpZ2h0IChDKSAxOTk0LCAxOTk1LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwIEFsYWRkaW4gRW50ZXJwcmlzZXMsCisgICAgICAgICAgICBNZW5sbyBQYXJrLCBDYWxpZm9ybmlhLCBVLlMuQS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworICAgICBOT1RFOiBUaGlzIExpY2Vuc2UgaXMgbm90IHRoZSBzYW1lIGFzIGFueSBvZiB0aGUgR05VIExpY2Vuc2VzCisgICAgIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBJdHMgdGVybXMgYXJlCisgICAgIHN1YnN0YW50aWFsbHkgZGlmZmVyZW50IGZyb20gdGhvc2Ugb2YgdGhlIEdOVSBMaWNlbnNlcy4gSWYgeW91IGFyZQorICAgICBmYW1pbGlhciB3aXRoIHRoZSBHTlUgTGljZW5zZXMsIHBsZWFzZSByZWFkIHRoaXMgbGljZW5zZSB3aXRoCisgICAgIGV4dHJhIGNhcmUuCisKK0FsYWRkaW4gRW50ZXJwcmlzZXMgaGVyZWJ5IGdyYW50cyB0byBhbnlvbmUgdGhlIHBlcm1pc3Npb24gdG8gYXBwbHkgdGhpcworTGljZW5zZSB0byB0aGVpciBvd24gd29yaywgYXMgbG9uZyBhcyB0aGUgZW50aXJlIExpY2Vuc2UgKGluY2x1ZGluZyB0aGUKK2Fib3ZlIG5vdGljZXMgYW5kIHRoaXMgcGFyYWdyYXBoKSBpcyBjb3BpZWQgd2l0aCBubyBjaGFuZ2VzLCBhZGRpdGlvbnMsIG9yCitkZWxldGlvbnMgZXhjZXB0IGZvciBjaGFuZ2luZyB0aGUgZmlyc3QgcGFyYWdyYXBoIG9mIFNlY3Rpb24gMCB0byBpbmNsdWRlIGEKK3N1aXRhYmxlIGRlc2NyaXB0aW9uIG9mIHRoZSB3b3JrIHRvIHdoaWNoIHRoZSBsaWNlbnNlIGlzIGJlaW5nIGFwcGxpZWQgYW5kCitvZiB0aGUgcGVyc29uIG9yIGVudGl0eSB0aGF0IGhvbGRzIHRoZSBjb3B5cmlnaHQgaW4gdGhlIHdvcmssIGFuZCwgaWYgdGhlCitMaWNlbnNlIGlzIGJlaW5nIGFwcGxpZWQgdG8gYSB3b3JrIGNyZWF0ZWQgaW4gYSBjb3VudHJ5IG90aGVyIHRoYW4gdGhlCitVbml0ZWQgU3RhdGVzLCByZXBsYWNpbmcgdGhlIGZpcnN0IHBhcmFncmFwaCBvZiBTZWN0aW9uIDYgd2l0aCBhbgorYXBwcm9wcmlhdGUgcmVmZXJlbmNlIHRvIHRoZSBsYXdzIG9mIHRoZSBhcHByb3ByaWF0ZSBjb3VudHJ5LgorCitUaGlzIExpY2Vuc2UgaXMgbm90IGFuIE9wZW4gU291cmNlIGxpY2Vuc2U6IGFtb25nIG90aGVyIHRoaW5ncywgaXQgcGxhY2VzCityZXN0cmljdGlvbnMgb24gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLCBzcGVjaWZpY2FsbHkgaW5jbHVkaW5nIHNhbGUgb2YKK3RoZSBQcm9ncmFtLiBXaGlsZSBBbGFkZGluIEVudGVycHJpc2VzIHJlc3BlY3RzIGFuZCBzdXBwb3J0cyB0aGUgcGhpbG9zb3BoeQorb2YgdGhlIE9wZW4gU291cmNlIERlZmluaXRpb24sIGFuZCBzaGFyZXMgdGhlIGRlc2lyZSBvZiB0aGUgR05VIHByb2plY3QgdG8KK2tlZXAgbGljZW5zZWQgc29mdHdhcmUgZnJlZWx5IHJlZGlzdHJpYnV0YWJsZSBpbiBib3RoIHNvdXJjZSBhbmQgb2JqZWN0Citmb3JtLCB3ZSBmZWVsIHRoYXQgT3BlbiBTb3VyY2UgbGljZW5zZXMgdW5mYWlybHkgcHJldmVudCBkZXZlbG9wZXJzIG9mCit1c2VmdWwgc29mdHdhcmUgZnJvbSBiZWluZyBjb21wZW5zYXRlZCBwcm9wb3J0aW9uYXRlbHkgd2hlbiBvdGhlcnMgcHJvZml0CitmaW5hbmNpYWxseSBmcm9tIHRoZWlyIHdvcmsuIFRoaXMgTGljZW5zZSBhdHRlbXB0cyB0byBlbnN1cmUgdGhhdCB0aG9zZSB3aG8KK3JlY2VpdmUsIHJlZGlzdHJpYnV0ZSwgYW5kIGNvbnRyaWJ1dGUgdG8gdGhlIGxpY2Vuc2VkIFByb2dyYW0gYWNjb3JkaW5nIHRvCit0aGUgT3BlbiBTb3VyY2UgYW5kIEZyZWUgU29mdHdhcmUgcGhpbG9zb3BoaWVzIGhhdmUgdGhlIHJpZ2h0IHRvIGRvIHNvLAord2hpbGUgcmV0YWluaW5nIGZvciB0aGUgZGV2ZWxvcGVyKHMpIG9mIHRoZSBQcm9ncmFtIHRoZSBwb3dlciB0byBtYWtlIHRob3NlCit3aG8gdXNlIHRoZSBQcm9ncmFtIHRvIGVuaGFuY2UgdGhlIHZhbHVlIG9mIGNvbW1lcmNpYWwgcHJvZHVjdHMgcGF5IGZvciB0aGUKK3ByaXZpbGVnZSBvZiBkb2luZyBzby4KKworMC4gU3ViamVjdCBNYXR0ZXIKKworVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gdGhlIGNvbXB1dGVyIHByb2dyYW0ga25vd24gYXMgIlRyYW5zR2FtaW5nIFdpbmVYIi4gCitUaGUgIlByb2dyYW0iLCBiZWxvdywgcmVmZXJzIHRvIHN1Y2ggcHJvZ3JhbS4gVGhlIFByb2dyYW0gaXMgYSBjb3B5cmlnaHRlZCAKK3dvcmsgd2hvc2UgY29weXJpZ2h0IGlzIGhlbGQgYnkgVHJhbnNHYW1pbmcgVGVjaG5vbG9naWVzIEluYy4sIGxvY2F0ZWQgaW4KK090dGF3YSwgT250YXJpbywgQ2FuYWRhICh0aGUgIkxpY2Vuc29yIikuIFBsZWFzZSBub3RlIHRoYXQgIlRyYW5zR2FtaW5nIAorV2luZVgiIGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgV2luZSBwcm9qZWN0LCBjb25zaXN0aW5nIG9mIG5ldyBjb2RlIGZvcgorc2V2ZXJhbCBXaW5lIGNvbXBvbmVudHMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gcG9ydGlvbnMgb2YgdGhlCitjb250ZW50cyBvZiB0aGUgZm9sbG93aW5nIHN1YmRpcmVjdG9yaWVzOiBkbGxzL2RkcmF3LCBkbGxzL2Rzb3VuZCwgYW5kIAorZGxscy9kaW5wdXQuICAKKworQSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIgbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlCit3b3JrIG9mIHRoZSBQcm9ncmFtLCBhcyBkZWZpbmVkIGluIHRoZSBVbml0ZWQgU3RhdGVzIENvcHlyaWdodCBBY3Qgb2YgMTk3NiwKK3N1Y2ggYXMgYSB0cmFuc2xhdGlvbiBvciBhIG1vZGlmaWNhdGlvbi4KKworQlkgTU9ESUZZSU5HIE9SIERJU1RSSUJVVElORyBUSEUgUFJPR1JBTSAoT1IgQU5ZIFdPUksgQkFTRUQgT04gVEhFIFBST0dSQU0pLAorWU9VIElORElDQVRFIFlPVVIgQUNDRVBUQU5DRSBPRiBUSElTIExJQ0VOU0UgVE8gRE8gU08sIEFORCBBTEwgSVRTIFRFUk1TIEFORAorQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU5HIE9SIE1PRElGWUlORyBUSEUgUFJPR1JBTSBPUiBXT1JLUyBCQVNFRAorT04gSVQuIE5PVEhJTkcgT1RIRVIgVEhBTiBUSElTIExJQ0VOU0UgR1JBTlRTIFlPVSBQRVJNSVNTSU9OIFRPIE1PRElGWSBPUgorRElTVFJJQlVURSBUSEUgUFJPR1JBTSBPUiBJVFMgREVSSVZBVElWRSBXT1JLUy4gVEhFU0UgQUNUSU9OUyBBUkUgUFJPSElCSVRFRAorQlkgTEFXLiBJRiBZT1UgRE8gTk9UIEFDQ0VQVCBUSEVTRSBURVJNUyBBTkQgQ09ORElUSU9OUywgRE8gTk9UIE1PRElGWSBPUgorRElTVFJJQlVURSBUSEUgUFJPR1JBTS4KKworMS4gTGljZW5zZXMuCisKK0xpY2Vuc29yIGhlcmVieSBncmFudHMgeW91IHRoZSBmb2xsb3dpbmcgcmlnaHRzLCBwcm92aWRlZCB0aGF0IHlvdSBjb21wbHkKK3dpdGggYWxsIG9mIHRoZSByZXN0cmljdGlvbnMgc2V0IGZvcnRoIGluIHRoaXMgTGljZW5zZSBhbmQgcHJvdmlkZWQsCitmdXJ0aGVyLCB0aGF0IHlvdSBkaXN0cmlidXRlIGFuIHVubW9kaWZpZWQgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0aGUKK1Byb2dyYW06CisKKyhhKSAgWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIGxpdGVyYWwgKGkuZS4sIHZlcmJhdGltKSBjb3BpZXMgb2YgdGhlCisgICAgIFByb2dyYW0ncyBzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCB0aHJvdWdob3V0IHRoZSB3b3JsZCwgaW4gYW55CisgICAgIG1lZGl1bS4KKyhiKSAgWW91IG1heSBtb2RpZnkgdGhlIFByb2dyYW0sIGNyZWF0ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbSBhbmQKKyAgICAgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCB0aHJvdWdob3V0IHRoZSB3b3JsZCwgaW4gYW55IG1lZGl1bS4KKworMi4gUmVzdHJpY3Rpb25zLgorCitUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworKGEpICBEaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gb3IgYW55IHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0gYnkgYQorICAgICBjb21tZXJjaWFsIG9yZ2FuaXphdGlvbiB0byBhbnkgdGhpcmQgcGFydHkgaXMgcHJvaGliaXRlZCBpZiBhbnkgcGF5bWVudAorICAgICBpcyBtYWRlIGluIGNvbm5lY3Rpb24gd2l0aCBzdWNoIGRpc3RyaWJ1dGlvbiwgd2hldGhlciBkaXJlY3RseSAoYXMgaW4KKyAgICAgcGF5bWVudCBmb3IgYSBjb3B5IG9mIHRoZSBQcm9ncmFtKSBvciBpbmRpcmVjdGx5IChhcyBpbiBwYXltZW50IGZvciAKKyAgICAgc29tZSBzZXJ2aWNlIHJlbGF0ZWQgdG8gdGhlIFByb2dyYW0sIG9yIHBheW1lbnQgZm9yIHNvbWUgcHJvZHVjdCBvciAKKyAgICAgc2VydmljZSB0aGF0IGluY2x1ZGVzIGEgY29weSBvZiB0aGUgUHJvZ3JhbSAid2l0aG91dCBjaGFyZ2UiOyB0aGVzZQorICAgICBhcmUgb25seSBleGFtcGxlcywgYW5kIG5vdCBhbiBleGhhdXN0aXZlIGVudW1lcmF0aW9uIG9mIHByb2hpYml0ZWQgCisgICAgIGFjdGl2aXRpZXMpLiBUaGUgZm9sbG93aW5nIG1ldGhvZHMgb2YgZGlzdHJpYnV0aW9uIGludm9sdmluZyBwYXltZW50IAorICAgICBzaGFsbCBub3QgaW4gYW5kIG9mIHRoZW1zZWx2ZXMgYmUgYSB2aW9sYXRpb24gb2YgdGhpcyByZXN0cmljdGlvbjoKKworICAgICAoaSkgICBQb3N0aW5nIHRoZSBQcm9ncmFtIG9uIGEgcHVibGljIGFjY2VzcyBpbmZvcm1hdGlvbiBzdG9yYWdlIGFuZCAKKyAgICAgICAgICAgcmV0cmlldmFsIHNlcnZpY2UgZm9yIHdoaWNoIGEgZmVlIGlzIHJlY2VpdmVkIGZvciByZXRyaWV2aW5nIAorCSAgIGluZm9ybWF0aW9uIChzdWNoIGFzIGFuIG9uLWxpbmUgc2VydmljZSksIHByb3ZpZGVkIHRoYXQgdGhlIGZlZQorCSAgIGlzIG5vdCBjb250ZW50LWRlcGVuZGVudCAoaS5lLiwgdGhlIGZlZSB3b3VsZCBiZSB0aGUgc2FtZSBmb3IgCisJICAgcmV0cmlldmluZyB0aGUgc2FtZSB2b2x1bWUgb2YgaW5mb3JtYXRpb24gY29uc2lzdGluZyBvZiByYW5kb20gCisJICAgZGF0YSkgYW5kIHRoYXQgYWNjZXNzIHRvIHRoZSBzZXJ2aWNlIGFuZCB0byB0aGUgUHJvZ3JhbSBpcyAKKwkgICBhdmFpbGFibGUgaW5kZXBlbmRlbnQgb2YgYW55IG90aGVyIHByb2R1Y3Qgb3Igc2VydmljZS4gQW4gCisJICAgZXhhbXBsZSBvZiBhIHNlcnZpY2UgdGhhdCBkb2VzIG5vdCBmYWxsIHVuZGVyIHRoaXMgc2VjdGlvbiBpcyAKKwkgICBhbiBvbi1saW5lIHNlcnZpY2UgdGhhdCBpcyBvcGVyYXRlZCBieSBhIGNvbXBhbnkgYW5kIHRoYXQgaXMgb25seQorCSAgIGF2YWlsYWJsZSB0byBjdXN0b21lcnMgb2YgdGhhdCBjb21wYW55LiAoVGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSAKKwkgICBlbnVtZXJhdGlvbi4pIAorCisgICAgIChpaSkgIERpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSBvbiByZW1vdmFibGUgY29tcHV0ZXItcmVhZGFibGUgbWVkaWEsIAorICAgICAgICAgICBwcm92aWRlZCB0aGF0IHRoZSBmaWxlcyBjb250YWluaW5nIHRoZSBQcm9ncmFtIGFyZSByZXByb2R1Y2VkIAorCSAgIGVudGlyZWx5IGFuZCB2ZXJiYXRpbSBvbiBzdWNoIG1lZGlhLCB0aGF0IGFsbCBpbmZvcm1hdGlvbiBvbmEKKwkgICBzdWNoIG1lZGlhIGJlIHJlZGlzdHJpYnV0YWJsZSBmb3Igbm9uLWNvbW1lcmNpYWwgcHVycG9zZXMgd2l0aG91dAorCSAgIGNoYXJnZSwgYW5kIHRoYXQgc3VjaCBtZWRpYSBhcmUgZGlzdHJpYnV0ZWQgYnkgdGhlbXNlbHZlcyAoZXhjZXB0IAorCSAgIGZvciBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbikgaW5kZXBlbmRlbnQgb2YgYW55IG90aGVyIHByb2R1Y3QgCisJICAgb3Igc2VydmljZS4gRXhhbXBsZXMgb2Ygc3VjaCBtZWRpYSBpbmNsdWRlIENELVJPTSwgbWFnbmV0aWMgdGFwZSwgCisJICAgYW5kIG9wdGljYWwgc3RvcmFnZSBtZWRpYS4gKFRoaXMgaXMgbm90IGludGVuZGVkIHRvIGJlIGFuIGV4aGF1c3RpdmUgCisJICAgbGlzdC4pIEFuIGV4YW1wbGUgb2YgYSBkaXN0cmlidXRpb24gdGhhdCBkb2VzIG5vdCBmYWxsIHVuZGVyIHRoaXMgCisJICAgc2VjdGlvbiBpcyBhIENELVJPTSBpbmNsdWRlZCBpbiBhIGJvb2sgb3IgbWFnYXppbmUuIChUaGlzIGlzIG5vdCAKKwkgICBhbiBleGhhdXN0aXZlIGVudW1lcmF0aW9uLikKKwkgICAKKyhiKSAgQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIG9mIHRoZSBQcm9ncmFtIAorICAgICBhcmUgbm90IHN1YmplY3QgdG8gdGhpcyBMaWNlbnNlIGFuZCB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gRnVuY3Rpb25hbCAKKyAgICAgdXNlIChydW5uaW5nKSBvZiB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIGFueSBvdXRwdXQgcHJvZHVjZWQgCisgICAgIHRocm91Z2ggdGhlIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyBzdWJqZWN0IHRvIHRoaXMgbGljZW5zZSBvbmx5IGlmIGl0cyBjb250ZW50cyAKKyAgICAgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgCisgICAgIHJ1bm5pbmcgdGhlIFByb2dyYW0pLiAKKworKGMpICBZb3UgbXVzdCBtZWV0IGFsbCBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgd2l0aCByZXNwZWN0IHRvIGFueSB3b3JrIHRoYXQKKyAgICAgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCB0aGF0IGluIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCAKKyAgICAgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkgcGFydCB0aGVyZW9mICgidGhlIFdvcmsiKToKKworICAgICAoaSkgICBJZiB5b3UgaGF2ZSBtb2RpZmllZCB0aGUgUHJvZ3JhbSwgeW91IG11c3QgY2F1c2UgdGhlIFdvcmsgdG8gY2FycnkgCisgICAgICAgICAgIHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgaGF2ZSBtb2RpZmllZCB0aGUgUHJvZ3JhbSdzIGZpbGVzIAorCSAgIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLiBJbiBlYWNoIHNvdXJjZSBmaWxlIHRoYXQgeW91IGhhdmUgbW9kaWZpZWQsIAorCSAgIHlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgbm90aWNlIHRoYXQgeW91IGhhdmUgbW9kaWZpZWQgdGhlIGZpbGUsIAorCSAgIGluY2x1ZGluZyB5b3VyIG5hbWUsIHlvdXIgZS1tYWlsIGFkZHJlc3MgKGlmIGFueSksIGFuZCB0aGUgZGF0ZSBhbmQgCisJICAgcHVycG9zZSBvZiB0aGUgY2hhbmdlOyAKKwkgICAKKyAgICAgKGlpKSAgWW91IG11c3QgY2F1c2UgdGhlIFdvcmsgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhbmQgYXQgbm8gY2hhcmdlIHRvIAorICAgICAgICAgICBhbGwgdGhpcmQgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlOyAKKworICAgICAoaWlpKSBJZiB0aGUgV29yayBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5IHdoZW4gcnVuLCB5b3UgbXVzdCAKKyAgICAgICAgICAgY2F1c2UgaXQsIGF0IGVhY2ggdGltZSB0aGUgV29yayBjb21tZW5jZXMgb3BlcmF0aW9uLCB0byBwcmludCBvciBkaXNwbGF5IAorCSAgIGFuIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYSBub3RpY2UgCisJICAgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUgYSB3YXJyYW50eSkuIAorCSAgIFN1Y2ggbm90aWNlIG11c3QgYWxzbyBzdGF0ZSB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIFdvcmsgb25seSAKKwkgICB1bmRlciB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UgYW5kIHRlbGwgdGhlIHVzZXIgaG93IHRvIHZpZXcgdGhlIAorCSAgIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGluY2x1ZGVkIHdpdGggdGhlIFdvcmsuIChFeGNlcHRpb25zOiBpZiB0aGUgUHJvZ3JhbSAKKwkgICBpcyBpbnRlcmFjdGl2ZSBidXQgbm9ybWFsbHkgcHJpbnRzIG9yIGRpc3BsYXlzIHN1Y2ggYW4gYW5ub3VuY2VtZW50IG9ubHkgCisJICAgYXQgdGhlIHJlcXVlc3Qgb2YgYSB1c2VyLCBzdWNoIGFzIGluIGFuICJBYm91dCBib3giLCB0aGUgV29yayBpcyByZXF1aXJlZCAKKwkgICB0byBwcmludCBvciBkaXNwbGF5IHRoZSBub3RpY2Ugb25seSB1bmRlciB0aGUgc2FtZSBjaXJjdW1zdGFuY2VzOyBpZiB0aGUgCisJICAgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0IGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gCisJICAgYW5ub3VuY2VtZW50LCB0aGUgV29yayBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50Lik7IAorCisgICAgIChpdikgIFlvdSBtdXN0IGFjY29tcGFueSB0aGUgV29yayB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUgCisgICAgICAgICAgIHNvdXJjZSBjb2RlLCBkZWxpdmVyZWQgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2UuIAorCSAgIFRoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IgbWFraW5nIAorCSAgIG1vZGlmaWNhdGlvbnMgdG8gaXQuIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zIAorCSAgIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIAorCSAgIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiAKKwkgICBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlIGNvZGUuIElmIHlvdSBkaXN0cmlidXRlIHdpdGggdGhlIFdvcmsgCisJICAgYW55IGNvbXBvbmVudCB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeSBmb3JtKSAKKwkgICB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZSBvcGVyYXRpbmcgCisJICAgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHlvdSBtdXN0IGFsc28gZGlzdHJpYnV0ZSB0aGUgc291cmNlIAorCSAgIGNvZGUgb2YgdGhhdCBjb21wb25lbnQgaWYgeW91IGhhdmUgaXQgYW5kIGFyZSBhbGxvd2VkIHRvIGRvIHNvOworCisgICAgICh2KSAgIElmIHlvdSBkaXN0cmlidXRlIGFueSB3cml0dGVuIG9yIHByaW50ZWQgbWF0ZXJpYWwgYXQgYWxsIHdpdGggdGhlIFdvcmssIHN1Y2ggCisgICAgICAgICAgIG1hdGVyaWFsIG11c3QgaW5jbHVkZSBlaXRoZXIgYSB3cml0dGVuIGNvcHkgb2YgdGhpcyBMaWNlbnNlLCBvciBhIHByb21pbmVudCAKKwkgICB3cml0dGVuIGluZGljYXRpb24gdGhhdCB0aGUgV29yayBpcyBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSBhbmQgd3JpdHRlbiAKKwkgICBpbnN0cnVjdGlvbnMgZm9yIHByaW50aW5nIGFuZC9vciBkaXNwbGF5aW5nIHRoZSBjb3B5IG9mIHRoZSBMaWNlbnNlIG9uIAorCSAgIHRoZSBkaXN0cmlidXRpb24gbWVkaXVtOyAKKworICAgICAodmkpICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnQncyBleGVyY2lzZSBvZiAKKyAgICAgICAgICAgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KKworICAgICBJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nIHRoZSBlcXVpdmFsZW50IAorICAgICBhYmlsaXR5IHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhYmlsaXR5IHRvIAorICAgICBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcyBkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSAKKyAgICAgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90IGNvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBhbG9uZyAKKyAgICAgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisgICAgIAorMy4gUmVzZXJ2YXRpb24gb2YgUmlnaHRzLgorCitObyByaWdodHMgYXJlIGdyYW50ZWQgdG8gdGhlIFByb2dyYW0gZXhjZXB0IGFzIGV4cHJlc3NseSBzZXQgZm9ydGggaGVyZWluLiBZb3UgbWF5Citub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQKK3VuZGVyIHRoaXMgTGljZW5zZS4gQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIAordGhlIFByb2dyYW0gaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiAKK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMgTGljZW5zZSAKK3dpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcyByZW1haW4gaW4gZnVsbCAKK2NvbXBsaWFuY2UuCisKKzQuIE90aGVyIFJlc3RyaWN0aW9ucy4KKworSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4gY2VydGFpbiBjb3VudHJpZXMgCitmb3IgYW55IHJlYXNvbiwgTGljZW5zb3IgbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gCitleGNsdWRpbmcgdGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZyAKK2NvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSBsaW1pdGF0aW9uIAorYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisKKzUuIExpbWl0YXRpb25zLgorCitUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBUTyBZT1UgIkFTIElTLCIgV0lUSE9VVCBXQVJSQU5UWS4gVEhFUkUgSVMgTk8gCitXQVJSQU5UWSBGT1IgVEhFIFBST0dSQU0sIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgCitQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBSSUdIVFMuIFRIRSBFTlRJUkUgCitSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gU0hPVUxEIAorVEhFIFBST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCAKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCitJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcgV0lMTAorTElDRU5TT1IsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IgUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNCitBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgR0VORVJBTCwKK1NQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT1IKK0lOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRiBEQVRBIE9SCitEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQgUEFSVElFUworT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIgUFJPR1JBTVMpLCBFVkVOIElGCitTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICitEQU1BR0VTLgorCis2LiBHZW5lcmFsLgorCitUaGlzIExpY2Vuc2UgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlIFByb3ZpbmNlIG9mIE9udGFyaW8sIENhbmFkYSwKK2V4Y2x1ZGluZyBjaG9pY2Ugb2YgbGF3IHJ1bGVzLgorCitJZiBhbnkgcGFydCBvZiB0aGlzIExpY2Vuc2UgaXMgZm91bmQgdG8gYmUgaW4gY29uZmxpY3Qgd2l0aCB0aGUgbGF3LCB0aGF0CitwYXJ0IHNoYWxsIGJlIGludGVycHJldGVkIGluIGl0cyBicm9hZGVzdCBtZWFuaW5nIGNvbnNpc3RlbnQgd2l0aCB0aGUgbGF3LAorYW5kIG5vIG90aGVyIHBhcnRzIG9mIHRoZSBMaWNlbnNlIHNoYWxsIGJlIGFmZmVjdGVkLgorCitGb3IgVW5pdGVkIFN0YXRlcyBHb3Zlcm5tZW50IHVzZXJzLCB0aGUgUHJvZ3JhbSBpcyBwcm92aWRlZCB3aXRoIFJFU1RSSUNURUQKK1JJR0hUUy4gSWYgeW91IGFyZSBhIHVuaXQgb3IgYWdlbmN5IG9mIHRoZSBVbml0ZWQgU3RhdGVzIEdvdmVybm1lbnQgb3IgYXJlCithY3F1aXJpbmcgdGhlIFByb2dyYW0gZm9yIGFueSBzdWNoIHVuaXQgb3IgYWdlbmN5LCB0aGUgZm9sbG93aW5nIGFwcGx5OgorCisgICAgIElmIHRoZSB1bml0IG9yIGFnZW5jeSBpcyB0aGUgRGVwYXJ0bWVudCBvZiBEZWZlbnNlICgiRE9EIiksIHRoZQorICAgICBQcm9ncmFtIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBhcmUgY2xhc3NpZmllZCBhcyAiY29tbWVyY2lhbAorICAgICBjb21wdXRlciBzb2Z0d2FyZSIgYW5kICJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlCisgICAgIGRvY3VtZW50YXRpb24iIHJlc3BlY3RpdmVseSBhbmQsIHB1cnN1YW50IHRvIERGQVIgU2VjdGlvbgorICAgICAyMjcuNzIwMiwgdGhlIEdvdmVybm1lbnQgaXMgYWNxdWlyaW5nIHRoZSBQcm9ncmFtIGFuZCBpdHMKKyAgICAgZG9jdW1lbnRhdGlvbiBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgdGhlCisgICAgIHVuaXQgb3IgYWdlbmN5IGlzIG90aGVyIHRoYW4gRE9ELCB0aGUgUHJvZ3JhbSBhbmQgaXRzCisgICAgIGRvY3VtZW50YXRpb24gYXJlIGNsYXNzaWZpZWQgYXMgImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUiIGFuZAorICAgICAiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBkb2N1bWVudGF0aW9uIiByZXNwZWN0aXZlbHkgYW5kLAorICAgICBwdXJzdWFudCB0byBGQVIgU2VjdGlvbiAxMi4yMTIsIHRoZSBHb3Zlcm5tZW50IGlzIGFjcXVpcmluZyB0aGUKKyAgICAgUHJvZ3JhbSBhbmQgaXRzIGRvY3VtZW50YXRpb24gaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzCisgICAgIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9BbGFzaXIgYi9saWNlbnNlcy9BbGFzaXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTA1ODJiMwotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0FsYXNpcgpAQCAtMCwwICsxLDQ4IEBACisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBBbGFzaXIgTGljZW5jZQorCisKKyAgICBUaGlzIGlzIGEgZnJlZSBzb2Z0d2FyZS4gSXQncyBwcm92aWRlZCBhcy1pcyBhbmQgY2FycmllcyBhYnNvbHV0ZWx5IG5vCit3YXJyYW50eSBvciByZXNwb25zaWJpbGl0eSBieSB0aGUgYXV0aG9yIGFuZCB0aGUgY29udHJpYnV0b3JzLCBuZWl0aGVyIGluCitnZW5lcmFsIG5vciBpbiBwYXJ0aWN1bGFyLiBObyBtYXR0ZXIgaWYgdGhpcyBzb2Z0d2FyZSBpcyBhYmxlIG9yIHVuYWJsZSB0bworY2F1c2UgYW55IGRhbWFnZSB0byB5b3VyIG9yIHRoaXJkIHBhcnR5J3MgY29tcHV0ZXIgaGFyZHdhcmUsIHNvZnR3YXJlLCBvciBhbnkKK290aGVyIGFzc2V0IGF2YWlsYWJsZSwgbmVpdGhlciB0aGUgYXV0aG9yIG5vciBhIHNlcGFyYXRlIGNvbnRyaWJ1dG9yIG1heSBiZQorZm91bmQgbGlhYmxlIGZvciBhbnkgaGFybSBvciBpdHMgY29uc2VxdWVuY2VzIHJlc3VsdGluZyBmcm9tIGVpdGhlciBwcm9wZXIgb3IKK2ltcHJvcGVyIHVzZSBvZiB0aGUgc29mdHdhcmUsIGV2ZW4gaWYgYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YgY2VydGFpbgoraW5qdXJ5IGFzIHN1Y2ggYW5kIHNvIGZvcnRoLgorCisgICAgVGhlIHNvZnR3YXJlIGlzbid0IGEgcHVibGljIGRvbWFpbiwgaXQncyBhIGNvcHlyaWdodGVkIG9uZS4gSW4gbm8gZXZlbnQKK3NoYWxsIHRoZSBhdXRob3IncyBvciBhIHNlcGFyYXRlIGNvbnRyaWJ1dG9yJ3MgY29weXJpZ2h0IGJlIGRlbmllZCBvciB2aW9sYXRlZAorb3RoZXJ3aXNlLiBObyBjb3B5cmlnaHQgbWF5IGJlIHJlbW92ZWQgdW5sZXNzIHRvZ2V0aGVyIHdpdGggdGhlIGNvZGUKK2NvbnRyaWJ1dGVkIHRvIHRoZSBzb2Z0d2FyZSBieSBhIGhvbGRlciBvZiB0aGUgcmVzcGVjdGl2ZSBjb3B5cmlnaHQuIEEKK2NvcHlyaWdodCBpdHNlbGYgaW5kaWNhdGVzIHRoZSByaWdodHMgb2Ygb3duZXJzaGlwIG92ZXIgdGhlIGNvZGUgY29udHJpYnV0ZWQuCitCYWNrIGFuZCBmb3J0aCwgdGhlIGF1dGhvciBpcyBkZWZpbmVkIGFzIHRoZSBvbmUgd2hvIGhvbGRzIHRoZSBvbGRlc3QKK2NvcHlyaWdodCBvdmVyIHRoZSBzb2Z0d2FyZS4gRnVydGhlcm1vcmUsIHRoZSBzb2Z0d2FyZSBpcyBkZWZpbmVkIGFzIGVpdGhlcgorc291cmNlIG9yIGJpbmFyeSBjb21wdXRlciBjb2RlLCB3aGljaCBpcyBvcmdhbmlzZWQgaW4gdGhlIGZvcm0gb2YgYSBzaW5nbGUKK2NvbXB1dGVyIGZpbGUgdXN1YWxseS4KKworICAgIFRoZSBzb2Z0d2FyZSAodGhlIHdob2xlIG9yIGEgcGFydCBvZiBpdCkgaXMgcHJvaGliaXRlZCBmcm9tIGJlaW5nIHNvbGQgb3IKK2xlYXNlZCBpbiBhbnkgZm9ybSBvciBtYW5uZXIgd2l0aCB0aGUgb25seSBwb3NzaWJsZSBleGNlcHRpb25zOgorCithKSBtb25leSBtYXkgYmUgY2hhcmdlZCBmb3IgYSBwaHlzaWNhbCBtZWRpdW0gdXNlZCB0byB0cmFuc2ZlciB0aGUgc29mdHdhcmU7CitiKSBtb25leSBtYXkgYmUgY2hhcmdlZCBmb3Igb3B0aW9uYWwgd2FycmFudHkgb3Igc3VwcG9ydCBzZXJ2aWNlcyByZWxhdGVkIHRvCisgICB0aGUgc29mdHdhcmUuCisKKyAgICBOZXZlcnRoZWxlc3MsIGlmIHRoZSBzb2Z0d2FyZSAodGhlIHdob2xlIG9yIGEgcGFydCBvZiBpdCkgaXMgZGVzaXJlZCB0bworYmVjb21lIGFuIG9iamVjdCBvZiBzYWxlIG9yIGxlYXNlICh0aGUgd2hvbGUgb3IgYSBwYXJ0IG9mIGl0KSwgdGhlbiBhIHNlcGFyYXRlCitub24tZXhjbHVzaXZlIGxpY2VuY2UgYWdyZWVtZW50IG11c3QgYmUgbmVnb3RpYXRlZCBmcm9tIHRoZSBhdXRob3IuIEJlbmVmaXRzCithY2NydWVkIHNob3VsZCBiZSBkaXN0cmlidXRlZCBiZXR3ZWVuIHRoZSBjb250cmlidXRvcnMgb3IgbGlrZXdpc2UgYXQgdGhlCithdXRob3IncyBvcHRpb24uCisKKyAgICBXaGVuZXZlciBhbmQgd2hlcmV2ZXIgdGhlIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkLCBpbiBlaXRoZXIgc291cmNlIG9yCitiaW5hcnkgZm9ybSwgZWl0aGVyIGluIHdob2xlIG9yIGluIHBhcnQsIGl0IG11c3QgaW5jbHVkZSB0aGUgY29tcGxldGUKK3VuY2hhbmdlZCB0ZXh0IG9mIHRoaXMgbGljZW5jZSBhZ3JlZW1lbnQgdW5sZXNzIGRpZmZlcmVudCBjb25kaXRpb25zIGhhdmUgYmVlbgorbmVnb3RpYXRlZC4gSW4gY2FzZSBvZiBhIGJpbmFyeS1vbmx5IGRpc3RyaWJ1dGlvbiwgdGhlIG5hbWVzIG9mIHRoZSBjb3B5cmlnaHQKK2hvbGRlcnMgbXVzdCBiZSBtZW50aW9uZWQgaW4gdGhlIGRvY3VtZW50YXRpb24gc3VwcGxpZWQgd2l0aCB0aGUgc29mdHdhcmUuCitUaGlzIGlzIHN1cHBvc2VkIHRvIHByb3RlY3QgcmlnaHRzIGFuZCBmcmVlZG9tIG9mIHRob3NlIHdobyBoYXZlIGNvbnRyaWJ1dGVkCit0aGVpciB0aW1lIGFuZCBsYWJvdXIgdG8gZnJlZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCwgYmVjYXVzZSBvdGhlcndpc2UgdGhlCitkZXZlbG9wbWVudCBpdHNlbGYgYW5kIHRoaXMgbGljZW5jZSBhZ3JlZW1lbnQgYXJlIG9mIGEgdmVyeSBsaXR0bGUgc2Vuc2UuCisKKyAgICBOb3RoaW5nIGVsc2UgYnV0IHRoaXMgbGljZW5jZSBhZ3JlZW1lbnQgZ3JhbnRzIHlvdSByaWdodHMgdG8gdXNlLCBtb2RpZnkKK2FuZCBkaXN0cmlidXRlIHRoZSBzb2Z0d2FyZS4gQW55IHZpb2xhdGlvbiBvZiB0aGlzIGxpY2VuY2UgYWdyZWVtZW50IGlzCityZWNvZ25pc2VkIGFzIGFuIGFjdGlvbiBwcm9oaWJpdGVkIGJ5IGFuIGFwcGxpY2FibGUgbGVnaXNsYXRpb24uCmRpZmYgLS1naXQgYS9saWNlbnNlcy9BbGxlZ3JvIGIvbGljZW5zZXMvQWxsZWdybwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTlhNmQyCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvQWxsZWdybwpAQCAtMCwwICsxLDE5IEBACitbIGZyb20gaHR0cDovL2FsbGVnLnNvdXJjZWZvcmdlLm5ldC9saWNlbnNlLmh0bWwgLSBta2VubmVkeSBdCisKK1RoZSBnaWZ0d2FyZSBsaWNlbnNlCisKK0FsbGVncm8gaXMgZ2lmdC13YXJlLiBJdCB3YXMgY3JlYXRlZCBieSBhIG51bWJlciBvZiBwZW9wbGUgd29ya2luZyBpbgorY29vcGVyYXRpb24sIGFuZCBpcyBnaXZlbiB0byB5b3UgZnJlZWx5IGFzIGEgZ2lmdC4gWW91IG1heSB1c2UsCittb2RpZnksIHJlZGlzdHJpYnV0ZSwgYW5kIGdlbmVyYWxseSBoYWNrIGl0IGFib3V0IGluIGFueSB3YXkgeW91IGxpa2UsCithbmQgeW91IGRvIG5vdCBoYXZlIHRvIGdpdmUgdXMgYW55dGhpbmcgaW4gcmV0dXJuLgorCitIb3dldmVyLCBpZiB5b3UgbGlrZSB0aGlzIHByb2R1Y3QgeW91IGFyZSBlbmNvdXJhZ2VkIHRvIHRoYW5rIHVzIGJ5CittYWtpbmcgYSByZXR1cm4gZ2lmdCB0byB0aGUgQWxsZWdybyBjb21tdW5pdHkuIFRoaXMgY291bGQgYmUgYnkKK3dyaXRpbmcgYW4gYWRkLW9uIHBhY2thZ2UsIHByb3ZpZGluZyBhIHVzZWZ1bCBidWcgcmVwb3J0LCBtYWtpbmcgYW4KK2ltcHJvdmVtZW50IHRvIHRoZSBsaWJyYXJ5LCBvciBwZXJoYXBzIGp1c3QgcmVsZWFzaW5nIHRoZSBzb3VyY2VzIG9mCit5b3VyIHByb2dyYW0gc28gdGhhdCBvdGhlciBwZW9wbGUgY2FuIGxlYXJuIGZyb20gdGhlbS4gSWYgeW91CityZWRpc3RyaWJ1dGUgcGFydHMgb2YgdGhpcyBjb2RlIG9yIG1ha2UgYSBnYW1lIHVzaW5nIGl0LCBpdCB3b3VsZCBiZQorbmljZSBpZiB5b3UgbWVudGlvbmVkIEFsbGVncm8gc29tZXdoZXJlIGluIHRoZSBjcmVkaXRzLCBidXQgeW91IGFyZQorbm90IHJlcXVpcmVkIHRvIGRvIHRoaXMuIFdlIHRydXN0IHlvdSBub3QgdG8gYWJ1c2Ugb3VyIGdlbmVyb3NpdHkuCisKK0J5IFNoYXduIEhhcmdyZWF2ZXMsIDE4IE9jdG9iZXIgMTk5OC4gCmRpZmYgLS1naXQgYS9saWNlbnNlcy9BbWF6b24gYi9saWNlbnNlcy9BbWF6b24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODFiYzM2MwotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0FtYXpvbgpAQCAtMCwwICsxLDk3IEBACitBbWF6b24gU29mdHdhcmUgTGljZW5zZQorCitUaGlzIEFtYXpvbiBTb2Z0d2FyZSBMaWNlbnNlICgiTGljZW5zZSIpIGdvdmVybnMgeW91ciB1c2UsIHJlcHJvZHVjdGlvbiwgYW5kCitkaXN0cmlidXRpb24gb2YgdGhlIGFjY29tcGFueWluZyBzb2Z0d2FyZSBhcyBzcGVjaWZpZWQgYmVsb3cuCisKKzEuIERlZmluaXRpb25zCisKKyJMaWNlbnNvciIgbWVhbnMgYW55IHBlcnNvbiBvciBlbnRpdHkgdGhhdCBkaXN0cmlidXRlcyBpdHMgV29yay4KKworIlNvZnR3YXJlIiBtZWFucyB0aGUgb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMKK0xpY2Vuc2UuCisKKyJXb3JrIiBtZWFucyB0aGUgU29mdHdhcmUgYW5kIGFueSBhZGRpdGlvbnMgdG8gb3IgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUKK1NvZnR3YXJlIHRoYXQgYXJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgTGljZW5zZS4KKworVGhlIHRlcm1zICJyZXByb2R1Y2UsIiAicmVwcm9kdWN0aW9uLCIgImRlcml2YXRpdmUgd29ya3MsIiBhbmQgImRpc3RyaWJ1dGlvbiIKK2hhdmUgdGhlIG1lYW5pbmcgYXMgcHJvdmlkZWQgdW5kZXIgVS5TLiBjb3B5cmlnaHQgbGF3OyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdAorZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UsIGRlcml2YXRpdmUgd29ya3Mgc2hhbGwgbm90IGluY2x1ZGUgd29ya3MgdGhhdAorcmVtYWluIHNlcGFyYWJsZSBmcm9tLCBvciBtZXJlbHkgbGluayAob3IgYmluZCBieSBuYW1lKSB0byB0aGUgaW50ZXJmYWNlcyBvZiwKK3RoZSBXb3JrLgorCitXb3JrcywgaW5jbHVkaW5nIHRoZSBTb2Z0d2FyZSwgYXJlICJtYWRlIGF2YWlsYWJsZSIgdW5kZXIgdGhpcyBMaWNlbnNlIGJ5CitpbmNsdWRpbmcgaW4gb3Igd2l0aCB0aGUgV29yayBlaXRoZXIgKGEpIGEgY29weXJpZ2h0IG5vdGljZSByZWZlcmVuY2luZyB0aGUKK2FwcGxpY2FiaWxpdHkgb2YgdGhpcyBMaWNlbnNlIHRvIHRoZSBXb3JrLCBvciAoYikgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4KKworMi4gTGljZW5zZSBHcmFudHMKKworMi4xIENvcHlyaWdodCBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBlYWNoCitMaWNlbnNvciBncmFudHMgdG8geW91IGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIHJveWFsdHktZnJlZSwKK2NvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseSBkaXNwbGF5LAorcHVibGljbHkgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSBpdHMgV29yayBhbmQgYW55IHJlc3VsdGluZworZGVyaXZhdGl2ZSB3b3JrcyBpbiBhbnkgZm9ybS4KKworMi4yIFBhdGVudCBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBlYWNoCitMaWNlbnNvciBncmFudHMgdG8geW91IGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIHJveWFsdHktZnJlZQorcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBpbXBvcnQsIGFuZAorb3RoZXJ3aXNlIHRyYW5zZmVyIGl0cyBXb3JrLCBpbiB3aG9sZSBvciBpbiBwYXJ0LiBUaGUgZm9yZWdvaW5nIGxpY2Vuc2UgYXBwbGllcworb25seSB0byB0aGUgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IExpY2Vuc29yIHRoYXQgd291bGQgYmUgaW5mcmluZ2VkIGJ5CitMaWNlbnNvcidzIFdvcmsgKG9yIHBvcnRpb24gdGhlcmVvZikgaW5kaXZpZHVhbGx5IGFuZCBleGNsdWRpbmcgYW55Citjb21iaW5hdGlvbnMgd2l0aCBhbnkgb3RoZXIgbWF0ZXJpYWxzIG9yIHRlY2hub2xvZ3kuCisKKzMuIExpbWl0YXRpb25zCisKKzMuMSBSZWRpc3RyaWJ1dGlvbi4gWW91IG1heSByZXByb2R1Y2Ugb3IgZGlzdHJpYnV0ZSB0aGUgV29yayBvbmx5IGlmIChhKSB5b3UgZG8KK3NvIHVuZGVyIHRoaXMgTGljZW5zZSwgKGIpIHlvdSBpbmNsdWRlIGEgY29tcGxldGUgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aAoreW91ciBkaXN0cmlidXRpb24sIGFuZCAoYykgeW91IHJldGFpbiB3aXRob3V0IG1vZGlmaWNhdGlvbiBhbnkgY29weXJpZ2h0LAorcGF0ZW50LCB0cmFkZW1hcmssIG9yIGF0dHJpYnV0aW9uIG5vdGljZXMgdGhhdCBhcmUgcHJlc2VudCBpbiB0aGUgV29yay4KKworMy4yIERlcml2YXRpdmUgV29ya3MuIFlvdSBtYXkgc3BlY2lmeSB0aGF0IGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IHRlcm1zIGFwcGx5Cit0byB0aGUgdXNlLCByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgeW91ciBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBXb3JrCisoIllvdXIgVGVybXMiKSBvbmx5IGlmIChhKSBZb3VyIFRlcm1zIHByb3ZpZGUgdGhhdCB0aGUgdXNlIGxpbWl0YXRpb24gaW4KK1NlY3Rpb24gMy4zIGFwcGxpZXMgdG8geW91ciBkZXJpdmF0aXZlIHdvcmtzLCBhbmQgKGIpIHlvdSBpZGVudGlmeSB0aGUgc3BlY2lmaWMKK2Rlcml2YXRpdmUgd29ya3MgdGhhdCBhcmUgc3ViamVjdCB0byBZb3VyIFRlcm1zLiBOb3R3aXRoc3RhbmRpbmcgWW91ciBUZXJtcywKK3RoaXMgTGljZW5zZSAoaW5jbHVkaW5nIHRoZSByZWRpc3RyaWJ1dGlvbiByZXF1aXJlbWVudHMgaW4gU2VjdGlvbiAzLjEpIHdpbGwKK2NvbnRpbnVlIHRvIGFwcGx5IHRvIHRoZSBXb3JrIGl0c2VsZi4KKworMy4zIFVzZSBMaW1pdGF0aW9uLiBUaGUgV29yayBhbmQgYW55IGRlcml2YXRpdmUgd29ya3MgdGhlcmVvZiBvbmx5IG1heSBiZSB1c2VkCitvciBpbnRlbmRlZCBmb3IgdXNlIHdpdGggdGhlIHdlYiBzZXJ2aWNlcywgY29tcHV0aW5nIHBsYXRmb3JtcyBvciBhcHBsaWNhdGlvbnMKK3Byb3ZpZGVkIGJ5IEFtYXpvbi5jb20sIEluYy4gb3IgaXRzIGFmZmlsaWF0ZXMsIGluY2x1ZGluZyBBbWF6b24gV2ViIFNlcnZpY2VzCitMTEMuCisKKzMuNCBQYXRlbnQgQ2xhaW1zLiBJZiB5b3UgYnJpbmcgb3IgdGhyZWF0ZW4gdG8gYnJpbmcgYSBwYXRlbnQgY2xhaW0gYWdhaW5zdCBhbnkKK0xpY2Vuc29yIChpbmNsdWRpbmcgYW55IGNsYWltLCBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSB0bworZW5mb3JjZSBhbnkgcGF0ZW50cyB0aGF0IHlvdSBhbGxlZ2UgYXJlIGluZnJpbmdlZCBieSBhbnkgV29yaywgdGhlbiB5b3VyIHJpZ2h0cwordW5kZXIgdGhpcyBMaWNlbnNlIGZyb20gc3VjaCBMaWNlbnNvciAoaW5jbHVkaW5nIHRoZSBncmFudHMgaW4gU2VjdGlvbnMgMi4xIGFuZAorMi4yKSB3aWxsIHRlcm1pbmF0ZSBpbW1lZGlhdGVseS4KKworMy41IFRyYWRlbWFya3MuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBhbnkgcmlnaHRzIHRvIHVzZSBhbnkgTGljZW5zb3IncyBvcgoraXRzIGFmZmlsaWF0ZXMnIG5hbWVzLCBsb2dvcywgb3IgdHJhZGVtYXJrcywgZXhjZXB0IGFzIG5lY2Vzc2FyeSB0byByZXByb2R1Y2UKK3RoZSBub3RpY2VzIGRlc2NyaWJlZCBpbiB0aGlzIExpY2Vuc2UuCisKKzMuNiBUZXJtaW5hdGlvbi4gSWYgeW91IHZpb2xhdGUgYW55IHRlcm0gb2YgdGhpcyBMaWNlbnNlLCB0aGVuIHlvdXIgcmlnaHRzCit1bmRlciB0aGlzIExpY2Vuc2UgKGluY2x1ZGluZyB0aGUgZ3JhbnRzIGluIFNlY3Rpb25zIDIuMSBhbmQgMi4yKSB3aWxsCit0ZXJtaW5hdGUgaW1tZWRpYXRlbHkuCisKKzQuIERpc2NsYWltZXIgb2YgV2FycmFudHkuIFRIRSBXT1JLIElTIFBST1ZJREVEICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5USUVTIE9SCitDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgV0FSUkFOVElFUyBPUgorQ09ORElUSU9OUyBPRiBNIEVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgVElUTEUgT1IKK05PTi1JTkZSSU5HRU1FTlQuIFlPVSBCRUFSIFRIRSBSSVNLIE9GIFVOREVSVEFLSU5HIEFOWSBBQ1RJVklUSUVTIFVOREVSIFRISVMKK0xJQ0VOU0UuIFNPTUUgU1RBVEVTJyBDT05TVU1FUiBMQVdTIERPIE5PVCBBTExPVyBFWENMVVNJT04gT0YgQU4gSU1QTElFRAorV0FSUkFOVFksIFNPIFRISVMgRElTQ0xBSU1FUiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNS4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIEVYQ0VQVCBBUyBQUk9ISUJJVEVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVAorQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBJTiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIENPTlRSQUNULCBPUgorT1RIRVJXSVNFIFNIQUxMIEFOWSBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZCitESVJFQ1QsIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YKK09SIFJFTEFURUQgVE8gVEhJUyBMSUNFTlNFLCBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFdPUksgKElOQ0xVRElORyBCVVQKK05PVCBMSU1JVEVEIFRPIExPU1MgT0YgR09PRFdJTEwsIEJVU0lORVNTIElOVEVSUlVQVElPTiwgTE9TVCBQUk9GSVRTIE9SIERBVEEsCitDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLCBPUiBBTlkgT1RIRVIgQ09NTSBFUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMpLAorRVZFTiBJRiBUSEUgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCitOb3RlOiBPdGhlciBsaWNlbnNlIHRlcm1zIG1heSBhcHBseSB0byBjZXJ0YWluLCBpZGVudGlmaWVkIHNvZnR3YXJlIGZpbGVzCitjb250YWluZWQgd2l0aGluIG9yIGRpc3RyaWJ1dGVkIHdpdGggdGhlIGFjY29tcGFueWluZyBzb2Z0d2FyZSBpZiBzdWNoIHRlcm1zCithcmUgaW5jbHVkZWQgaW4gdGhlIG5vdGljZSBmb2xkZXIgYWNjb21wYW55aW5nIHRoZSBmaWxlLiAgU3VjaCBvdGhlciBsaWNlbnNlCit0ZXJtcyB3aWxsIHRoZW4gYXBwbHkgaW4gbGlldSBvZiB0aGUgdGVybXMgb2YgdGhlIEFtYXpvbiBTb2Z0d2FyZSBMaWNlbnNlCithYm92ZS4KKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvQXBFIGIvbGljZW5zZXMvQXBFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZTJjYzMKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9BcEUKQEAgLTAsMCArMSwxOSBAQAorQ29weXJpZ2h0IGFuZCBEaXNjbGFpbWVyCitUaGlzIHNvZnR3YXJlIGlzIGNvcHlyaWdodCAyMDAzLTIwMDQgYnkgTS4gV2F5bmUgRGF2aXMuCisKK0FsbCBjb3BpZXMgYXJlIG5vdCBmb3IgcmVkaXN0cmlidXRpb24gYW5kIHNob3VsZCBiZSBvYnRhaW5lZCBmcm9tIHRoZSBhdXRob3IuCitUaGUgYXV0aG9yIGhlcmVieSBncmFudHMgcGVybWlzc2lvbiB0byB1c2UsIGNvcHksIGFuZCBtb2RpZnkgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuIE1vZGlmaWNhdGlvbnMgdG8gdGhpcyBzb2Z0d2FyZSBtYXkgb25seSBiZSB1c2VkIGJ5IHRoZWlyIGF1dGhvcnMgYW5kIG1heSBub3QgYmUgcmUtZGlzdHJpYnV0ZWQgaW4gYW55IGZvcm0uIE5vIHdyaXR0ZW4gYWdyZWVtZW50LCBsaWNlbnNlLCBvciByb3lhbHR5IGZlZSBpcyByZXF1aXJlZCBmb3IgYW55IG9mIHRoZSBhdXRob3JpemVkIHVzZXMuCisKKworSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBESVNUUklCVVRPUiBCRSBMSUFCTEUgVE8gQU5ZIFBBUlRZCitGT1IgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCitBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIElUUyBET0NVTUVOVEFUSU9OLCBPUiBBTlkKK0RFUklWQVRJVkVTIFRIRVJFT0YsIEVWRU4gSUYgVEhFIEFVVEhPUlMgSEFWRSBCRUVOIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworVEhFIEFVVEhPUiBBTkQgRElTVFJJQlVUT1IgU1BFQ0lGSUNBTExZIERJU0NMQUlNIEFOWSBXQVJSQU5USUVTLAorSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBOT04tSU5GUklOR0VNRU5ULiAgVEhJUyBTT0ZUV0FSRQorSVMgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgQU5EIFRIRSBBVVRIT1IgQU5EIERJU1RSSUJVVE9SIEhBVkUKK05PIE9CTElHQVRJT04gVE8gUFJPVklERSBNQUlOVEVOQU5DRSwgU1VQUE9SVCwgVVBEQVRFUywgRU5IQU5DRU1FTlRTLCBPUgorTU9ESUZJQ0FUSU9OUy4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0FwYWNoZS0xLjEgYi9saWNlbnNlcy9BcGFjaGUtMS4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzMTQwZDQKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9BcGFjaGUtMS4xCkBAIC0wLDAgKzEsNTIgQEAKK1RoZSBBcGFjaGUgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKKworQ29weXJpZ2h0IChjKSA8eWVhcnM+IDxjb3B5cmlnaHQgaG9sZGVyPi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorCisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgICBkaXN0cmlidXRpb24uCisKKzMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAorICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5CisgICAgICAgPGNvcHlyaWdodCBob2xkZXI+ICg8YWRkcmVzcz4pLiIKKyAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKKyAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCisKKzQuIFRoZSBuYW1lcyAiPHByb2dyYW0+IiBhbmQgIjxjb3B5cmlnaHQgaG9sZGVyPiIgbXVzdCBub3QgYmUgdXNlZAorICAgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAgIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0CisgICA8ZS1tYWlsIGFkZHJlc3M+LgorCis1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiPHByb2dyYW0+IiwKKyAgIG5vciBtYXkgIjxwcm9ncmFtPiIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICAgcGVybWlzc2lvbiBvZiA8Y29weXJpZ2h0IGhvbGRlcj4uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECitXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KK0lOIE5PIEVWRU5UIFNIQUxMIDxjb3B5cmlnaHQgaG9sZGVyPiBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFCitHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUgorSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SCitPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCitBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitbVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKK2luZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiA8Y29weXJpZ2h0IGhvbGRlcj4uICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbgorPGNvcHlyaWdodCBob2xkZXI+LCBwbGVhc2Ugc2VlIDxhZGRyZXNzPi5dCisKK1tQb3J0aW9ucyBvZiB0aGlzIHNvZnR3YXJlIGFyZSBiYXNlZCB1cG9uIHB1YmxpYyBkb21haW4gc29mdHdhcmUKK29yaWdpbmFsbHkgd3JpdHRlbiBhdCB0aGUgTmF0aW9uYWwgQ2VudGVyIGZvciBTdXBlcmNvbXB1dGluZworQXBwbGljYXRpb25zLCBVbml2ZXJzaXR5IG9mIElsbGlub2lzLCBVcmJhbmEtQ2hhbXBhaWduLl0KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0FwYWNoZS0yLjAgYi9saWNlbnNlcy9BcGFjaGUtMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdiNjljNjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9BcGFjaGUtMi4wCkBAIC0wLDAgKzEsNjc4IEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBcGFjaGUgTGljZW5zZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjAsIEphbnVhcnkgMjAwNAorICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzLworCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgVVNFLCBSRVBST0RVQ1RJT04sIEFORCBESVNUUklCVVRJT04KKworICAgMS4gRGVmaW5pdGlvbnMuCisKKyAgICAgICJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgdXNlLCByZXByb2R1Y3Rpb24sCisgICAgICBhbmQgZGlzdHJpYnV0aW9uIGFzIGRlZmluZWQgYnkgU2VjdGlvbnMgMSB0aHJvdWdoIDkgb2YgdGhpcyBkb2N1bWVudC4KKworICAgICAgIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIgdGhhdCBpcyBncmFudGluZyB0aGUgTGljZW5zZS4KKworICAgICAgIkxlZ2FsIEVudGl0eSIgc2hhbGwgbWVhbiB0aGUgdW5pb24gb2YgdGhlIGFjdGluZyBlbnRpdHkgYW5kIGFsbAorICAgICAgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbgorICAgICAgY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKKyAgICAgICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQorICAgICAgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3IKKyAgICAgIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQorICAgICAgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworICAgICAgIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eQorICAgICAgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KKworICAgICAgIlNvdXJjZSIgZm9ybSBzaGFsbCBtZWFuIHRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMsCisgICAgICBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uCisgICAgICBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgorCisgICAgICAiT2JqZWN0IiBmb3JtIHNoYWxsIG1lYW4gYW55IGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbAorICAgICAgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1dAorICAgICAgbm90IGxpbWl0ZWQgdG8gY29tcGlsZWQgb2JqZWN0IGNvZGUsIGdlbmVyYXRlZCBkb2N1bWVudGF0aW9uLAorICAgICAgYW5kIGNvbnZlcnNpb25zIHRvIG90aGVyIG1lZGlhIHR5cGVzLgorCisgICAgICAiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvcgorICAgICAgT2JqZWN0IGZvcm0sIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBMaWNlbnNlLCBhcyBpbmRpY2F0ZWQgYnkgYQorICAgICAgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrCisgICAgICAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgorCisgICAgICAiRGVyaXZhdGl2ZSBXb3JrcyIgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0CisgICAgICBmb3JtLCB0aGF0IGlzIGJhc2VkIG9uIChvciBkZXJpdmVkIGZyb20pIHRoZSBXb3JrIGFuZCBmb3Igd2hpY2ggdGhlCisgICAgICBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zCisgICAgICByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3NlcworICAgICAgb2YgdGhpcyBMaWNlbnNlLCBEZXJpdmF0aXZlIFdvcmtzIHNoYWxsIG5vdCBpbmNsdWRlIHdvcmtzIHRoYXQgcmVtYWluCisgICAgICBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsCisgICAgICB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgorCisgICAgICAiQ29udHJpYnV0aW9uIiBzaGFsbCBtZWFuIGFueSB3b3JrIG9mIGF1dGhvcnNoaXAsIGluY2x1ZGluZworICAgICAgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucworICAgICAgdG8gdGhhdCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiwgdGhhdCBpcyBpbnRlbnRpb25hbGx5CisgICAgICBzdWJtaXR0ZWQgdG8gTGljZW5zb3IgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yayBieSB0aGUgY29weXJpZ2h0IG93bmVyCisgICAgICBvciBieSBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2YKKyAgICAgIHRoZSBjb3B5cmlnaHQgb3duZXIuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAic3VibWl0dGVkIgorICAgICAgbWVhbnMgYW55IGZvcm0gb2YgZWxlY3Ryb25pYywgdmVyYmFsLCBvciB3cml0dGVuIGNvbW11bmljYXRpb24gc2VudAorICAgICAgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KKyAgICAgIGNvbW11bmljYXRpb24gb24gZWxlY3Ryb25pYyBtYWlsaW5nIGxpc3RzLCBzb3VyY2UgY29kZSBjb250cm9sIHN5c3RlbXMsCisgICAgICBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZQorICAgICAgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0CisgICAgICBleGNsdWRpbmcgY29tbXVuaWNhdGlvbiB0aGF0IGlzIGNvbnNwaWN1b3VzbHkgbWFya2VkIG9yIG90aGVyd2lzZQorICAgICAgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iCisKKyAgICAgICJDb250cmlidXRvciIgc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5CisgICAgICBvbiBiZWhhbGYgb2Ygd2hvbSBhIENvbnRyaWJ1dGlvbiBoYXMgYmVlbiByZWNlaXZlZCBieSBMaWNlbnNvciBhbmQKKyAgICAgIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLgorCisgICAyLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwKKyAgICAgIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlCisgICAgICBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwKKyAgICAgIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZQorICAgICAgV29yayBhbmQgc3VjaCBEZXJpdmF0aXZlIFdvcmtzIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybS4KKworICAgMy4gR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCisgICAgICB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsCisgICAgICB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZQorICAgICAgKGV4Y2VwdCBhcyBzdGF0ZWQgaW4gdGhpcyBzZWN0aW9uKSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsCisgICAgICB1c2UsIG9mZmVyIHRvIHNlbGwsIHNlbGwsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgV29yaywKKyAgICAgIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlCisgICAgICBieSBzdWNoIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGVpcgorICAgICAgQ29udHJpYnV0aW9uKHMpIGFsb25lIG9yIGJ5IGNvbWJpbmF0aW9uIG9mIHRoZWlyIENvbnRyaWJ1dGlvbihzKQorICAgICAgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLiBJZiBZb3UKKyAgICAgIGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhCisgICAgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBXb3JrCisgICAgICBvciBhIENvbnRyaWJ1dGlvbiBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrIGNvbnN0aXR1dGVzIGRpcmVjdAorICAgICAgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcworICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlIGZvciB0aGF0IFdvcmsgc2hhbGwgdGVybWluYXRlCisgICAgICBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisKKyAgIDQuIFJlZGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlCisgICAgICBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQKKyAgICAgIG1vZGlmaWNhdGlvbnMsIGFuZCBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHByb3ZpZGVkIHRoYXQgWW91CisgICAgICBtZWV0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworICAgICAgKGEpIFlvdSBtdXN0IGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFdvcmsgb3IKKyAgICAgICAgICBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAorCisgICAgICAoYikgWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgICAgICAgc3RhdGluZyB0aGF0IFlvdSBjaGFuZ2VkIHRoZSBmaWxlczsgYW5kCisKKyAgICAgIChjKSBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcworICAgICAgICAgIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQKKyAgICAgICAgICBhdHRyaWJ1dGlvbiBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBmb3JtIG9mIHRoZSBXb3JrLAorICAgICAgICAgIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YKKyAgICAgICAgICB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCisKKyAgICAgIChkKSBJZiB0aGUgV29yayBpbmNsdWRlcyBhICJOT1RJQ0UiIHRleHQgZmlsZSBhcyBwYXJ0IG9mIGl0cworICAgICAgICAgIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QKKyAgICAgICAgICBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQKKyAgICAgICAgICB3aXRoaW4gc3VjaCBOT1RJQ0UgZmlsZSwgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QKKyAgICAgICAgICBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUKKyAgICAgICAgICBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZAorICAgICAgICAgIGFzIHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IHdpdGhpbiB0aGUgU291cmNlIGZvcm0gb3IKKyAgICAgICAgICBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwKKyAgICAgICAgICB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kCisgICAgICAgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBub3RpY2VzIG5vcm1hbGx5IGFwcGVhci4gVGhlIGNvbnRlbnRzCisgICAgICAgICAgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZAorICAgICAgICAgIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uCisgICAgICAgICAgbm90aWNlcyB3aXRoaW4gRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbG9uZ3NpZGUKKyAgICAgICAgICBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQKKyAgICAgICAgICB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQKKyAgICAgICAgICBhcyBtb2RpZnlpbmcgdGhlIExpY2Vuc2UuCisKKyAgICAgIFlvdSBtYXkgYWRkIFlvdXIgb3duIGNvcHlyaWdodCBzdGF0ZW1lbnQgdG8gWW91ciBtb2RpZmljYXRpb25zIGFuZAorICAgICAgbWF5IHByb3ZpZGUgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworICAgICAgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvcgorICAgICAgZm9yIGFueSBzdWNoIERlcml2YXRpdmUgV29ya3MgYXMgYSB3aG9sZSwgcHJvdmlkZWQgWW91ciB1c2UsCisgICAgICByZXByb2R1Y3Rpb24sIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3RoZXJ3aXNlIGNvbXBsaWVzIHdpdGgKKyAgICAgIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCisKKyAgIDUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwKKyAgICAgIGFueSBDb250cmlidXRpb24gaW50ZW50aW9uYWxseSBzdWJtaXR0ZWQgZm9yIGluY2x1c2lvbiBpbiB0aGUgV29yaworICAgICAgYnkgWW91IHRvIHRoZSBMaWNlbnNvciBzaGFsbCBiZSB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKKyAgICAgIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLgorICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgbm90aGluZyBoZXJlaW4gc2hhbGwgc3VwZXJzZWRlIG9yIG1vZGlmeQorICAgICAgdGhlIHRlcm1zIG9mIGFueSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudCB5b3UgbWF5IGhhdmUgZXhlY3V0ZWQKKyAgICAgIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KKworICAgNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZQorICAgICAgbmFtZXMsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgdGhlIExpY2Vuc29yLAorICAgICAgZXhjZXB0IGFzIHJlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlCisgICAgICBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KKworICAgNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yCisgICAgICBhZ3JlZWQgdG8gaW4gd3JpdGluZywgTGljZW5zb3IgcHJvdmlkZXMgdGhlIFdvcmsgKGFuZCBlYWNoCisgICAgICBDb250cmlidXRvciBwcm92aWRlcyBpdHMgQ29udHJpYnV0aW9ucykgb24gYW4gIkFTIElTIiBCQVNJUywKKyAgICAgIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvcgorICAgICAgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMKKyAgICAgIG9mIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIG9yIEZJVE5FU1MgRk9SIEEKKyAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZQorICAgICAgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55CisgICAgICByaXNrcyBhc3NvY2lhdGVkIHdpdGggWW91ciBleGVyY2lzZSBvZiBwZXJtaXNzaW9ucyB1bmRlciB0aGlzIExpY2Vuc2UuCisKKyAgIDguIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJbiBubyBldmVudCBhbmQgdW5kZXIgbm8gbGVnYWwgdGhlb3J5LAorICAgICAgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsCisgICAgICB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseQorICAgICAgbmVnbGlnZW50IGFjdHMpIG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBzaGFsbCBhbnkgQ29udHJpYnV0b3IgYmUKKyAgICAgIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwKKyAgICAgIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYQorICAgICAgcmVzdWx0IG9mIHRoaXMgTGljZW5zZSBvciBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZQorICAgICAgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLAorICAgICAgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwKKyAgICAgIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMpLCBldmVuIGlmIHN1Y2ggQ29udHJpYnV0b3IKKyAgICAgIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKworICAgOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZworICAgICAgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwKKyAgICAgIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsIHdhcnJhbnR5LCBpbmRlbW5pdHksCisgICAgICBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcworICAgICAgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkKKyAgICAgIG9uIFlvdXIgb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIHJlc3BvbnNpYmlsaXR5LCBub3Qgb24gYmVoYWxmCisgICAgICBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksCisgICAgICBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkKKyAgICAgIGluY3VycmVkIGJ5LCBvciBjbGFpbXMgYXNzZXJ0ZWQgYWdhaW5zdCwgc3VjaCBDb250cmlidXRvciBieSByZWFzb24KKyAgICAgIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgorCisgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworICAgQVBQRU5ESVg6IEhvdyB0byBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLgorCisgICAgICBUbyBhcHBseSB0aGUgQXBhY2hlIExpY2Vuc2UgdG8geW91ciB3b3JrLCBhdHRhY2ggdGhlIGZvbGxvd2luZworICAgICAgYm9pbGVycGxhdGUgbm90aWNlLCB3aXRoIHRoZSBmaWVsZHMgZW5jbG9zZWQgYnkgYnJhY2tldHMgIltdIgorICAgICAgcmVwbGFjZWQgd2l0aCB5b3VyIG93biBpZGVudGlmeWluZyBpbmZvcm1hdGlvbi4gKERvbid0IGluY2x1ZGUKKyAgICAgIHRoZSBicmFja2V0cyEpICBUaGUgdGV4dCBzaG91bGQgYmUgZW5jbG9zZWQgaW4gdGhlIGFwcHJvcHJpYXRlCisgICAgICBjb21tZW50IHN5bnRheCBmb3IgdGhlIGZpbGUgZm9ybWF0LiBXZSBhbHNvIHJlY29tbWVuZCB0aGF0IGEKKyAgICAgIGZpbGUgb3IgY2xhc3MgbmFtZSBhbmQgZGVzY3JpcHRpb24gb2YgcHVycG9zZSBiZSBpbmNsdWRlZCBvbiB0aGUKKyAgICAgIHNhbWUgInByaW50ZWQgcGFnZSIgYXMgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIGVhc2llcgorICAgICAgaWRlbnRpZmljYXRpb24gd2l0aGluIHRoaXJkLXBhcnR5IGFyY2hpdmVzLgorCisgICBDb3B5cmlnaHQgW3l5eXldIFtuYW1lIG9mIGNvcHlyaWdodCBvd25lcl0KKworICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7CisgICB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuCisgICBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKworICAgICAgIGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAorCisgICBVbmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNvZnR3YXJlCisgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIEJBU0lTLAorICAgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgICBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kCisgICBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworCisKK0FQQUNIRSBIVFRQIFNFUlZFUiBTVUJDT01QT05FTlRTOiAKKworVGhlIEFwYWNoZSBIVFRQIFNlcnZlciBpbmNsdWRlcyBhIG51bWJlciBvZiBzdWJjb21wb25lbnRzIHdpdGgKK3NlcGFyYXRlIGNvcHlyaWdodCBub3RpY2VzIGFuZCBsaWNlbnNlIHRlcm1zLiBZb3VyIHVzZSBvZiB0aGUgc291cmNlCitjb2RlIGZvciB0aGUgdGhlc2Ugc3ViY29tcG9uZW50cyBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQKK2NvbmRpdGlvbnMgb2YgdGhlIGZvbGxvd2luZyBsaWNlbnNlcy4gCisKK0ZvciB0aGUgbW9kX21pbWVfbWFnaWMgY29tcG9uZW50OgorCisvKgorICogbW9kX21pbWVfbWFnaWM6IE1JTUUgdHlwZSBsb29rdXAgdmlhIGZpbGUgbWFnaWMgbnVtYmVycworICogQ29weXJpZ2h0IChjKSAxOTk2LTE5OTcgQ2lzY28gU3lzdGVtcywgSW5jLgorICoKKyAqIFRoaXMgc29mdHdhcmUgd2FzIHN1Ym1pdHRlZCBieSBDaXNjbyBTeXN0ZW1zIHRvIHRoZSBBcGFjaGUgR3JvdXAgaW4gSnVseQorICogMTk5Ny4gIEZ1dHVyZSByZXZpc2lvbnMgYW5kIGRlcml2YXRpdmVzIG9mIHRoaXMgc291cmNlIGNvZGUgbXVzdAorICogYWNrbm93bGVkZ2UgQ2lzY28gU3lzdGVtcyBhcyB0aGUgb3JpZ2luYWwgY29udHJpYnV0b3Igb2YgdGhpcyBtb2R1bGUuCisgKiBBbGwgb3RoZXIgbGljZW5zaW5nIGFuZCB1c2FnZSBjb25kaXRpb25zIGFyZSB0aG9zZSBvZiB0aGUgQXBhY2hlIEdyb3VwLgorICoKKyAqIFNvbWUgb2YgdGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSB0aGUgZnJlZSB2ZXJzaW9uIG9mIHRoZSBmaWxlIGNvbW1hbmQKKyAqIG9yaWdpbmFsbHkgcG9zdGVkIHRvIGNvbXAuc291cmNlcy51bml4LiAgQ29weXJpZ2h0IGluZm8gZm9yIHRoYXQgcHJvZ3JhbQorICogaXMgaW5jbHVkZWQgYmVsb3cgYXMgcmVxdWlyZWQuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqIC0gQ29weXJpZ2h0IChjKSBJYW4gRi4gRGFyd2luLCAxOTg3LiBXcml0dGVuIGJ5IElhbiBGLiBEYXJ3aW4uCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBub3Qgc3ViamVjdCB0byBhbnkgbGljZW5zZSBvZiB0aGUgQW1lcmljYW4gVGVsZXBob25lIGFuZAorICogVGVsZWdyYXBoIENvbXBhbnkgb3Igb2YgdGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSBvbiBhbnkKKyAqIGNvbXB1dGVyIHN5c3RlbSwgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXQgZnJlZWx5LCBzdWJqZWN0IHRvCisgKiB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKyAqCisgKiAxLiBUaGUgYXV0aG9yIGlzIG5vdCByZXNwb25zaWJsZSBmb3IgdGhlIGNvbnNlcXVlbmNlcyBvZiB1c2Ugb2YgdGhpcworICogc29mdHdhcmUsIG5vIG1hdHRlciBob3cgYXdmdWwsIGV2ZW4gaWYgdGhleSBhcmlzZSBmcm9tIGZsYXdzIGluIGl0LgorICoKKyAqIDIuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZCwgZWl0aGVyIGJ5CisgKiBleHBsaWNpdCBjbGFpbSBvciBieSBvbWlzc2lvbi4gIFNpbmNlIGZldyB1c2VycyBldmVyIHJlYWQgc291cmNlcywgY3JlZGl0cworICogbXVzdCBhcHBlYXIgaW4gdGhlIGRvY3VtZW50YXRpb24uCisgKgorICogMy4gQWx0ZXJlZCB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZQorICogbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLiAgU2luY2UgZmV3IHVzZXJzIGV2ZXIgcmVhZAorICogc291cmNlcywgY3JlZGl0cyBtdXN0IGFwcGVhciBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKyAqCisgKiA0LiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZC4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKi8KKworCitGb3IgdGhlICBtb2R1bGVzXG1hcHBlcnNcbW9kX2ltYXAuYyBjb21wb25lbnQ6CisKKyAgIm1hY21hcnRpbml6ZWQiIHBvbHlnb24gY29kZSBjb3B5cmlnaHQgMTk5MiBieSBFcmljIEhhaW5lcywgZXJpY2hAZXllLmNvbQorCitGb3IgdGhlICBzZXJ2ZXJcdXRpbF9tZDUuYyBjb21wb25lbnQ6CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIE5DU0EgSFRUUGQgU2VydmVyCisgKiBTb2Z0d2FyZSBEZXZlbG9wbWVudCBHcm91cAorICogTmF0aW9uYWwgQ2VudGVyIGZvciBTdXBlcmNvbXB1dGluZyBBcHBsaWNhdGlvbnMKKyAqIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgYXQgVXJiYW5hLUNoYW1wYWlnbgorICogNjA1IEUuIFNwcmluZ2ZpZWxkLCBDaGFtcGFpZ24sIElMIDYxODIwCisgKiBodHRwZEBuY3NhLnVpdWMuZWR1CisgKgorICogQ29weXJpZ2h0ICAoQykgIDE5OTUsIEJvYXJkIG9mIFRydXN0ZWVzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIG1kNS5jOiBOQ1NBIEhUVFBkIGNvZGUgd2hpY2ggdXNlcyB0aGUgbWQ1Yy5jIFJTQSBDb2RlCisgKgorICogIE9yaWdpbmFsIENvZGUgQ29weXJpZ2h0IChDKSAxOTk0LCBKZWZmIEhvc3RldGxlciwgU3B5Z2xhc3MsIEluYy4KKyAqICBQb3J0aW9ucyBvZiBDb250ZW50LU1ENSBjb2RlIENvcHlyaWdodCAoQykgMTk5MywgMTk5NCBieSBDYXJuZWdpZSBNZWxsb24KKyAqICAgICBVbml2ZXJzaXR5IChzZWUgQ29weXJpZ2h0IGJlbG93KS4KKyAqICBQb3J0aW9ucyBvZiBDb250ZW50LU1ENSBjb2RlIENvcHlyaWdodCAoQykgMTk5MSBCZWxsIENvbW11bmljYXRpb25zIAorICogICAgIFJlc2VhcmNoLCBJbmMuIChCZWxsY29yZSkgKHNlZSBDb3B5cmlnaHQgYmVsb3cpLgorICogIFBvcnRpb25zIGV4dHJhY3RlZCBmcm9tIG1wYWNrLCBKb2huIEcuIE15ZXJzIC0gamdtK0BjbXUuZWR1CisgKiAgQ29udGVudC1NRDUgQ29kZSBjb250cmlidXRlZCBieSBNYXJ0aW4gSGFtaWx0b24gKG1hcnRpbkBuZXQubHV0LmFjLnVrKQorICoKKyAqLworCisKKy8qIHRoZXNlIHBvcnRpb25zIGV4dHJhY3RlZCBmcm9tIG1wYWNrLCBKb2huIEcuIE15ZXJzIC0gamdtK0BjbXUuZWR1ICovCisvKiAoQykgQ29weXJpZ2h0IDE5OTMsMTk5NCBieSBDYXJuZWdpZSBNZWxsb24gVW5pdmVyc2l0eQorICogQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlLCBhbmQgc2VsbCB0aGlzIHNvZnR3YXJlCisgKiBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQKKyAqIGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcworICogYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UKKyAqIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIENhcm5lZ2llCisgKiBNZWxsb24gVW5pdmVyc2l0eSBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkKKyAqIHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLAorICogd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiAgQ2FybmVnaWUgTWVsbG9uIFVuaXZlcnNpdHkgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZAorICogd2FycmFudHkuCisgKgorICogQ0FSTkVHSUUgTUVMTE9OIFVOSVZFUlNJVFkgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPCisgKiBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkKKyAqIEFORCBGSVRORVNTLCBJTiBOTyBFVkVOVCBTSEFMTCBDQVJORUdJRSBNRUxMT04gVU5JVkVSU0lUWSBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4KKyAqIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcKKyAqIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTCisgKiBTT0ZUV0FSRS4KKyAqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTkxIEJlbGwgQ29tbXVuaWNhdGlvbnMgUmVzZWFyY2gsIEluYy4gKEJlbGxjb3JlKQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgbWF0ZXJpYWwKKyAqIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkCisgKiB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlCisgKiBhcHBlYXIgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgdGhlIG5hbWUgb2YgQmVsbGNvcmUgbm90IGJlCisgKiB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIHRoaXMKKyAqIG1hdGVyaWFsIHdpdGhvdXQgdGhlIHNwZWNpZmljLCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24KKyAqIG9mIGFuIGF1dGhvcml6ZWQgcmVwcmVzZW50YXRpdmUgb2YgQmVsbGNvcmUuICBCRUxMQ09SRQorICogTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIEFCT1VUIFRIRSBBQ0NVUkFDWSBPUiBTVUlUQUJJTElUWQorICogT0YgVEhJUyBNQVRFUklBTCBGT1IgQU5ZIFBVUlBPU0UuICBJVCBJUyBQUk9WSURFRCAiQVMgSVMiLAorICogV0lUSE9VVCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMuICAKKyAqLworCitGb3IgdGhlICBzcmNsaWJcYXByXGluY2x1ZGVcYXByX21kNS5oIGNvbXBvbmVudDogCisvKgorICogVGhpcyBpcyB3b3JrIGlzIGRlcml2ZWQgZnJvbSBtYXRlcmlhbCBDb3B5cmlnaHQgUlNBIERhdGEgU2VjdXJpdHksIEluYy4KKyAqCisgKiBUaGUgUlNBIGNvcHlyaWdodCBzdGF0ZW1lbnQgYW5kIExpY2VuY2UgZm9yIHRoYXQgb3JpZ2luYWwgbWF0ZXJpYWwgaXMKKyAqIGluY2x1ZGVkIGJlbG93LiBUaGlzIGlzIGZvbGxvd2VkIGJ5IHRoZSBBcGFjaGUgY29weXJpZ2h0IHN0YXRlbWVudCBhbmQKKyAqIGxpY2VuY2UgZm9yIHRoZSBtb2RpZmljYXRpb25zIG1hZGUgdG8gdGhhdCBtYXRlcmlhbC4KKyAqLworCisvKiBDb3B5cmlnaHQgKEMpIDE5OTEtMiwgUlNBIERhdGEgU2VjdXJpdHksIEluYy4gQ3JlYXRlZCAxOTkxLiBBbGwKKyAgIHJpZ2h0cyByZXNlcnZlZC4KKworICAgTGljZW5zZSB0byBjb3B5IGFuZCB1c2UgdGhpcyBzb2Z0d2FyZSBpcyBncmFudGVkIHByb3ZpZGVkIHRoYXQgaXQKKyAgIGlzIGlkZW50aWZpZWQgYXMgdGhlICJSU0EgRGF0YSBTZWN1cml0eSwgSW5jLiBNRDUgTWVzc2FnZS1EaWdlc3QKKyAgIEFsZ29yaXRobSIgaW4gYWxsIG1hdGVyaWFsIG1lbnRpb25pbmcgb3IgcmVmZXJlbmNpbmcgdGhpcyBzb2Z0d2FyZQorICAgb3IgdGhpcyBmdW5jdGlvbi4KKworICAgTGljZW5zZSBpcyBhbHNvIGdyYW50ZWQgdG8gbWFrZSBhbmQgdXNlIGRlcml2YXRpdmUgd29ya3MgcHJvdmlkZWQKKyAgIHRoYXQgc3VjaCB3b3JrcyBhcmUgaWRlbnRpZmllZCBhcyAiZGVyaXZlZCBmcm9tIHRoZSBSU0EgRGF0YQorICAgU2VjdXJpdHksIEluYy4gTUQ1IE1lc3NhZ2UtRGlnZXN0IEFsZ29yaXRobSIgaW4gYWxsIG1hdGVyaWFsCisgICBtZW50aW9uaW5nIG9yIHJlZmVyZW5jaW5nIHRoZSBkZXJpdmVkIHdvcmsuCisKKyAgIFJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBjb25jZXJuaW5nIGVpdGhlcgorICAgdGhlIG1lcmNoYW50YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIG9yIHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzCisgICBzb2Z0d2FyZSBmb3IgYW55IHBhcnRpY3VsYXIgcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorICAgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkgb2YgYW55IGtpbmQuCisKKyAgIFRoZXNlIG5vdGljZXMgbXVzdCBiZSByZXRhaW5lZCBpbiBhbnkgY29waWVzIG9mIGFueSBwYXJ0IG9mIHRoaXMKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIHNvZnR3YXJlLgorICovCisKK0ZvciB0aGUgIHNyY2xpYlxhcHJccGFzc3dkXGFwcl9tZDUuYyBjb21wb25lbnQ6CisKKy8qCisgKiBUaGlzIGlzIHdvcmsgaXMgZGVyaXZlZCBmcm9tIG1hdGVyaWFsIENvcHlyaWdodCBSU0EgRGF0YSBTZWN1cml0eSwgSW5jLgorICoKKyAqIFRoZSBSU0EgY29weXJpZ2h0IHN0YXRlbWVudCBhbmQgTGljZW5jZSBmb3IgdGhhdCBvcmlnaW5hbCBtYXRlcmlhbCBpcworICogaW5jbHVkZWQgYmVsb3cuIFRoaXMgaXMgZm9sbG93ZWQgYnkgdGhlIEFwYWNoZSBjb3B5cmlnaHQgc3RhdGVtZW50IGFuZAorICogbGljZW5jZSBmb3IgdGhlIG1vZGlmaWNhdGlvbnMgbWFkZSB0byB0aGF0IG1hdGVyaWFsLgorICovCisKKy8qIE1ENUMuQyAtIFJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuLCBNRDUgbWVzc2FnZS1kaWdlc3QgYWxnb3JpdGhtCisgKi8KKworLyogQ29weXJpZ2h0IChDKSAxOTkxLTIsIFJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuIENyZWF0ZWQgMTk5MS4gQWxsCisgICByaWdodHMgcmVzZXJ2ZWQuCisKKyAgIExpY2Vuc2UgdG8gY29weSBhbmQgdXNlIHRoaXMgc29mdHdhcmUgaXMgZ3JhbnRlZCBwcm92aWRlZCB0aGF0IGl0CisgICBpcyBpZGVudGlmaWVkIGFzIHRoZSAiUlNBIERhdGEgU2VjdXJpdHksIEluYy4gTUQ1IE1lc3NhZ2UtRGlnZXN0CisgICBBbGdvcml0aG0iIGluIGFsbCBtYXRlcmlhbCBtZW50aW9uaW5nIG9yIHJlZmVyZW5jaW5nIHRoaXMgc29mdHdhcmUKKyAgIG9yIHRoaXMgZnVuY3Rpb24uCisKKyAgIExpY2Vuc2UgaXMgYWxzbyBncmFudGVkIHRvIG1ha2UgYW5kIHVzZSBkZXJpdmF0aXZlIHdvcmtzIHByb3ZpZGVkCisgICB0aGF0IHN1Y2ggd29ya3MgYXJlIGlkZW50aWZpZWQgYXMgImRlcml2ZWQgZnJvbSB0aGUgUlNBIERhdGEKKyAgIFNlY3VyaXR5LCBJbmMuIE1ENSBNZXNzYWdlLURpZ2VzdCBBbGdvcml0aG0iIGluIGFsbCBtYXRlcmlhbAorICAgbWVudGlvbmluZyBvciByZWZlcmVuY2luZyB0aGUgZGVyaXZlZCB3b3JrLgorCisgICBSU0EgRGF0YSBTZWN1cml0eSwgSW5jLiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgY29uY2VybmluZyBlaXRoZXIKKyAgIHRoZSBtZXJjaGFudGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBvciB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcworICAgc29mdHdhcmUgZm9yIGFueSBwYXJ0aWN1bGFyIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKyAgIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5IG9mIGFueSBraW5kLgorCisgICBUaGVzZSBub3RpY2VzIG11c3QgYmUgcmV0YWluZWQgaW4gYW55IGNvcGllcyBvZiBhbnkgcGFydCBvZiB0aGlzCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBzb2Z0d2FyZS4KKyAqLworLyoKKyAqIFRoZSBhcHJfbWQ1X2VuY29kZSgpIHJvdXRpbmUgdXNlcyBtdWNoIGNvZGUgb2J0YWluZWQgZnJvbSB0aGUgRnJlZUJTRCAzLjAKKyAqIE1ENSBjcnlwdCgpIGZ1bmN0aW9uLCB3aGljaCBpcyBsaWNlbmNlZCBhcyBmb2xsb3dzOgorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogIlRIRSBCRUVSLVdBUkUgTElDRU5TRSIgKFJldmlzaW9uIDQyKToKKyAqIDxwaGtAbG9naW4uZGtuZXQuZGs+IHdyb3RlIHRoaXMgZmlsZS4gIEFzIGxvbmcgYXMgeW91IHJldGFpbiB0aGlzIG5vdGljZSB5b3UKKyAqIGNhbiBkbyB3aGF0ZXZlciB5b3Ugd2FudCB3aXRoIHRoaXMgc3R1ZmYuIElmIHdlIG1lZXQgc29tZSBkYXksIGFuZCB5b3UgdGhpbmsKKyAqIHRoaXMgc3R1ZmYgaXMgd29ydGggaXQsIHlvdSBjYW4gYnV5IG1lIGEgYmVlciBpbiByZXR1cm4uICBQb3VsLUhlbm5pbmcgS2FtcAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKK0ZvciB0aGUgc3JjbGliXGFwci11dGlsXGNyeXB0b1xhcHJfbWQ0LmMgY29tcG9uZW50OgorCisgKiBUaGlzIGlzIGRlcml2ZWQgZnJvbSBtYXRlcmlhbCBjb3B5cmlnaHQgUlNBIERhdGEgU2VjdXJpdHksIEluYy4KKyAqIFRoZWlyIG5vdGljZSBpcyByZXByb2R1Y2VkIGJlbG93IGluIGl0cyBlbnRpcmV0eS4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDE5OTEtMiwgUlNBIERhdGEgU2VjdXJpdHksIEluYy4gQ3JlYXRlZCAxOTkxLiBBbGwKKyAqIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBMaWNlbnNlIHRvIGNvcHkgYW5kIHVzZSB0aGlzIHNvZnR3YXJlIGlzIGdyYW50ZWQgcHJvdmlkZWQgdGhhdCBpdAorICogaXMgaWRlbnRpZmllZCBhcyB0aGUgIlJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuIE1ENCBNZXNzYWdlLURpZ2VzdAorICogQWxnb3JpdGhtIiBpbiBhbGwgbWF0ZXJpYWwgbWVudGlvbmluZyBvciByZWZlcmVuY2luZyB0aGlzIHNvZnR3YXJlCisgKiBvciB0aGlzIGZ1bmN0aW9uLgorICoKKyAqIExpY2Vuc2UgaXMgYWxzbyBncmFudGVkIHRvIG1ha2UgYW5kIHVzZSBkZXJpdmF0aXZlIHdvcmtzIHByb3ZpZGVkCisgKiB0aGF0IHN1Y2ggd29ya3MgYXJlIGlkZW50aWZpZWQgYXMgImRlcml2ZWQgZnJvbSB0aGUgUlNBIERhdGEKKyAqIFNlY3VyaXR5LCBJbmMuIE1ENCBNZXNzYWdlLURpZ2VzdCBBbGdvcml0aG0iIGluIGFsbCBtYXRlcmlhbAorICogbWVudGlvbmluZyBvciByZWZlcmVuY2luZyB0aGUgZGVyaXZlZCB3b3JrLgorICoKKyAqIFJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBjb25jZXJuaW5nIGVpdGhlcgorICogdGhlIG1lcmNoYW50YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIG9yIHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzCisgKiBzb2Z0d2FyZSBmb3IgYW55IHBhcnRpY3VsYXIgcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorICogd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkgb2YgYW55IGtpbmQuCisgKgorICogVGhlc2Ugbm90aWNlcyBtdXN0IGJlIHJldGFpbmVkIGluIGFueSBjb3BpZXMgb2YgYW55IHBhcnQgb2YgdGhpcworICogZG9jdW1lbnRhdGlvbiBhbmQvb3Igc29mdHdhcmUuCisgKi8KKworRm9yIHRoZSBzcmNsaWJcYXByLXV0aWxcaW5jbHVkZVxhcHJfbWQ0LmggY29tcG9uZW50OgorCisgKgorICogVGhpcyBpcyBkZXJpdmVkIGZyb20gbWF0ZXJpYWwgY29weXJpZ2h0IFJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuCisgKiBUaGVpciBub3RpY2UgaXMgcmVwcm9kdWNlZCBiZWxvdyBpbiBpdHMgZW50aXJldHkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkxLTIsIFJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuIENyZWF0ZWQgMTk5MS4gQWxsCisgKiByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogTGljZW5zZSB0byBjb3B5IGFuZCB1c2UgdGhpcyBzb2Z0d2FyZSBpcyBncmFudGVkIHByb3ZpZGVkIHRoYXQgaXQKKyAqIGlzIGlkZW50aWZpZWQgYXMgdGhlICJSU0EgRGF0YSBTZWN1cml0eSwgSW5jLiBNRDQgTWVzc2FnZS1EaWdlc3QKKyAqIEFsZ29yaXRobSIgaW4gYWxsIG1hdGVyaWFsIG1lbnRpb25pbmcgb3IgcmVmZXJlbmNpbmcgdGhpcyBzb2Z0d2FyZQorICogb3IgdGhpcyBmdW5jdGlvbi4KKyAqCisgKiBMaWNlbnNlIGlzIGFsc28gZ3JhbnRlZCB0byBtYWtlIGFuZCB1c2UgZGVyaXZhdGl2ZSB3b3JrcyBwcm92aWRlZAorICogdGhhdCBzdWNoIHdvcmtzIGFyZSBpZGVudGlmaWVkIGFzICJkZXJpdmVkIGZyb20gdGhlIFJTQSBEYXRhCisgKiBTZWN1cml0eSwgSW5jLiBNRDQgTWVzc2FnZS1EaWdlc3QgQWxnb3JpdGhtIiBpbiBhbGwgbWF0ZXJpYWwKKyAqIG1lbnRpb25pbmcgb3IgcmVmZXJlbmNpbmcgdGhlIGRlcml2ZWQgd29yay4KKyAqCisgKiBSU0EgRGF0YSBTZWN1cml0eSwgSW5jLiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgY29uY2VybmluZyBlaXRoZXIKKyAqIHRoZSBtZXJjaGFudGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBvciB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcworICogc29mdHdhcmUgZm9yIGFueSBwYXJ0aWN1bGFyIHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKyAqIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5IG9mIGFueSBraW5kLgorICoKKyAqIFRoZXNlIG5vdGljZXMgbXVzdCBiZSByZXRhaW5lZCBpbiBhbnkgY29waWVzIG9mIGFueSBwYXJ0IG9mIHRoaXMKKyAqIGRvY3VtZW50YXRpb24gYW5kL29yIHNvZnR3YXJlLgorICovCisKKworRm9yIHRoZSBzcmNsaWJcYXByLXV0aWxcdGVzdFx0ZXN0ZGJtLmMgY29tcG9uZW50OgorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogVGhlIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQorICoKKyAqIENvcHlyaWdodCAoYykgMjAwMC0yMDAyIFRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbi4gIEFsbCByaWdodHMKKyAqIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIDMuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAorICogICAgaWYgYW55LCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnbWVudDoKKyAqICAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQorICogICAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4iCisgKiAgICBBbHRlcm5hdGVseSwgdGhpcyBhY2tub3dsZWRnbWVudCBtYXkgYXBwZWFyIGluIHRoZSBzb2Z0d2FyZSBpdHNlbGYsCisgKiAgICBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWRnbWVudHMgbm9ybWFsbHkgYXBwZWFyLgorICoKKyAqIDQuIFRoZSBuYW1lcyAiQXBhY2hlIiBhbmQgIkFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIiBtdXN0CisgKiAgICBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKKyAqICAgIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgYXBhY2hlQGFwYWNoZS5vcmcuCisgKgorICogNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkFwYWNoZSIsCisgKiAgICBub3IgbWF5ICJBcGFjaGUiIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAqICAgIHBlcm1pc3Npb24gb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBUEFDSEUgU09GVFdBUkUgRk9VTkRBVElPTiBPUgorICogSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorICogVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICoKKyAqIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55CisgKiBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgRm9yIG1vcmUKKyAqIGluZm9ybWF0aW9uIG9uIHRoZSBBcGFjaGUgU29mdHdhcmUgRm91bmRhdGlvbiwgcGxlYXNlIHNlZQorICogPGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8+LgorICoKKyAqIFRoaXMgZmlsZSBjYW1lIGZyb20gdGhlIFNEQk0gcGFja2FnZSAod3JpdHRlbiBieSBvekBuZXh1cy55b3JrdS5jYSkuCisgKiBUaGF0IHBhY2thZ2Ugd2FzIHVuZGVyIHB1YmxpYyBkb21haW4uIFRoaXMgZmlsZSBoYXMgYmVlbiBwb3J0ZWQgdG8KKyAqIEFQUiwgdXBkYXRlZCB0byBBTlNJIEMgYW5kIG90aGVyLCBuZXdlciBpZGlvbXMsIGFuZCBhZGRlZCB0byB0aGUgQXBhY2hlCisgKiBjb2RlYmFzZSB1bmRlciB0aGUgYWJvdmUgY29weXJpZ2h0IGFuZCBsaWNlbnNlLgorICovCisKKworRm9yIHRoZSBzcmNsaWJcYXByLXV0aWxcdGVzdFx0ZXN0bWQ0LmMgY29tcG9uZW50OgorCisgKgorICogVGhpcyBpcyBkZXJpdmVkIGZyb20gbWF0ZXJpYWwgY29weXJpZ2h0IFJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuCisgKiBUaGVpciBub3RpY2UgaXMgcmVwcm9kdWNlZCBiZWxvdyBpbiBpdHMgZW50aXJldHkuCisgKgorICogQ29weXJpZ2h0IChDKSAxOTkwLTIsIFJTQSBEYXRhIFNlY3VyaXR5LCBJbmMuIENyZWF0ZWQgMTk5MC4gQWxsCisgKiByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUlNBIERhdGEgU2VjdXJpdHksIEluYy4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGNvbmNlcm5pbmcgZWl0aGVyCisgKiB0aGUgbWVyY2hhbnRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgb3IgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMKKyAqIHNvZnR3YXJlIGZvciBhbnkgcGFydGljdWxhciBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiCisgKiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eSBvZiBhbnkga2luZC4KKyAqCisgKiBUaGVzZSBub3RpY2VzIG11c3QgYmUgcmV0YWluZWQgaW4gYW55IGNvcGllcyBvZiBhbnkgcGFydCBvZiB0aGlzCisgKiBkb2N1bWVudGF0aW9uIGFuZC9vciBzb2Z0d2FyZS4KKyAqLworCitGb3IgdGhlIHNyY2xpYlxhcHItdXRpbFx4bWxcZXhwYXRcY29uZnRvb2xzXGluc3RhbGwtc2ggY29tcG9uZW50OgorCisjCisjIGluc3RhbGwgLSBpbnN0YWxsIGEgcHJvZ3JhbSwgc2NyaXB0LCBvciBkYXRhZmlsZQorIyBUaGlzIGNvbWVzIGZyb20gWDExUjUgKG1pdC91dGlsL3NjcmlwdHMvaW5zdGFsbC5zaCkuCisjCisjIENvcHlyaWdodCAxOTkxIGJ5IHRoZSBNYXNzYWNodXNldHRzIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5CisjCisjIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUsIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUgYW5kIGl0cworIyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdAorIyB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoYXQKKyMgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworIyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKKyMgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLAorIyB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBNLkkuVC4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZQorIyBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKyMgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisjCisKK0ZvciB0aGUgc3JjbGliXHBjcmVcaW5zdGFsbC1zaCBjb21wb25lbnQ6CisKKyMKKyMgQ29weXJpZ2h0IDE5OTEgYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kKKyMKKyMgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSwgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCisjIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0CisjIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdAorIyBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nCisjIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIE0uSS5ULiBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgorIyBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsCisjIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gIE0uSS5ULiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlCisjIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIgorIyB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKworRm9yIHRoZSBwY3JlIGNvbXBvbmVudDoKKworUENSRSBMSUNFTkNFCistLS0tLS0tLS0tLS0KKworUENSRSBpcyBhIGxpYnJhcnkgb2YgZnVuY3Rpb25zIHRvIHN1cHBvcnQgcmVndWxhciBleHByZXNzaW9ucyB3aG9zZSBzeW50YXgKK2FuZCBzZW1hbnRpY3MgYXJlIGFzIGNsb3NlIGFzIHBvc3NpYmxlIHRvIHRob3NlIG9mIHRoZSBQZXJsIDUgbGFuZ3VhZ2UuCisKK1dyaXR0ZW4gYnk6IFBoaWxpcCBIYXplbCA8cGgxMEBjYW0uYWMudWs+CisKK1VuaXZlcnNpdHkgb2YgQ2FtYnJpZGdlIENvbXB1dGluZyBTZXJ2aWNlLAorQ2FtYnJpZGdlLCBFbmdsYW5kLiBQaG9uZTogKzQ0IDEyMjMgMzM0NzE0LgorCitDb3B5cmlnaHQgKGMpIDE5OTctMjAwMSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZQorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSBvbiBhbnkKK2NvbXB1dGVyIHN5c3RlbSwgYW5kIHRvIHJlZGlzdHJpYnV0ZSBpdCBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZworcmVzdHJpY3Rpb25zOgorCisxLiBUaGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCisyLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQsIGVpdGhlciBieQorICAgZXhwbGljaXQgY2xhaW0gb3IgYnkgb21pc3Npb24uIEluIHByYWN0aWNlLCB0aGlzIG1lYW5zIHRoYXQgaWYgeW91IHVzZQorICAgUENSRSBpbiBzb2Z0d2FyZSB3aGljaCB5b3UgZGlzdHJpYnV0ZSB0byBvdGhlcnMsIGNvbW1lcmNpYWxseSBvcgorICAgb3RoZXJ3aXNlLCB5b3UgbXVzdCBwdXQgYSBzZW50ZW5jZSBsaWtlIHRoaXMKKworICAgICBSZWd1bGFyIGV4cHJlc3Npb24gc3VwcG9ydCBpcyBwcm92aWRlZCBieSB0aGUgUENSRSBsaWJyYXJ5IHBhY2thZ2UsCisgICAgIHdoaWNoIGlzIG9wZW4gc291cmNlIHNvZnR3YXJlLCB3cml0dGVuIGJ5IFBoaWxpcCBIYXplbCwgYW5kIGNvcHlyaWdodAorICAgICBieSB0aGUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UsIEVuZ2xhbmQuCisKKyAgIHNvbWV3aGVyZSByZWFzb25hYmx5IHZpc2libGUgaW4geW91ciBkb2N1bWVudGF0aW9uIGFuZCBpbiBhbnkgcmVsZXZhbnQKKyAgIGZpbGVzIG9yIG9ubGluZSBoZWxwIGRhdGEgb3Igc2ltaWxhci4gQSByZWZlcmVuY2UgdG8gdGhlIGZ0cCBzaXRlIGZvcgorICAgdGhlIHNvdXJjZSwgdGhhdCBpcywgdG8KKworICAgICBmdHA6Ly9mdHAuY3N4LmNhbS5hYy51ay9wdWIvc29mdHdhcmUvcHJvZ3JhbW1pbmcvcGNyZS8KKworICAgc2hvdWxkIGFsc28gYmUgZ2l2ZW4gaW4gdGhlIGRvY3VtZW50YXRpb24uCisKKzMuIEFsdGVyZWQgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmUKKyAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4KKworNC4gSWYgUENSRSBpcyBlbWJlZGRlZCBpbiBhbnkgc29mdHdhcmUgdGhhdCBpcyByZWxlYXNlZCB1bmRlciB0aGUgR05VCisgICBHZW5lcmFsIFB1cnBvc2UgTGljZW5jZSAoR1BMKSwgb3IgTGVzc2VyIEdlbmVyYWwgUHVycG9zZSBMaWNlbmNlIChMR1BMKSwKKyAgIHRoZW4gdGhlIHRlcm1zIG9mIHRoYXQgbGljZW5jZSBzaGFsbCBzdXBlcnNlZGUgYW55IGNvbmRpdGlvbiBhYm92ZSB3aXRoCisgICB3aGljaCBpdCBpcyBpbmNvbXBhdGlibGUuCisKK1RoZSBkb2N1bWVudGF0aW9uIGZvciBQQ1JFLCBzdXBwbGllZCBpbiB0aGUgImRvYyIgZGlyZWN0b3J5LCBpcyBkaXN0cmlidXRlZAordW5kZXIgdGhlIHNhbWUgdGVybXMgYXMgdGhlIHNvZnR3YXJlIGl0c2VsZi4KKworRW5kIFBDUkUgTElDRU5DRQorCisKK0ZvciB0aGUgdGVzdFx6Yi5jIGNvbXBvbmVudDoKKworLyogICAgICAgICAgICAgICAgICAgICAgICAgIFpldXNCZW5jaCBWMS4wMQorCQkJICAgID09PT09PT09PT09PT09PQorCitUaGlzIHByb2dyYW0gaXMgQ29weXJpZ2h0IChDKSBaZXVzIFRlY2hub2xvZ3kgTGltaXRlZCAxOTk2LgorCitUaGlzIHByb2dyYW0gbWF5IGJlIHVzZWQgYW5kIGNvcGllZCBmcmVlbHkgcHJvdmlkaW5nIHRoaXMgY29weXJpZ2h0IG5vdGljZQoraXMgbm90IHJlbW92ZWQuCisKK1RoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgImFzIGlzIiBhbmQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJhbnRpZXMsIAoraW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bywgdGhlIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kCitmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZSBhcmUgZGlzY2xhaW1lZC4gIEluIG5vIGV2ZW50IHNoYWxsIAorWmV1cyBUZWNobm9sb2d5IEx0ZC4gYmUgbGlhYmxlIGZvciBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgaW5jaWRlbnRhbCwgc3BlY2lhbCwgCitleGVtcGxhcnksIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlZCAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIAorcHJvY3VyZW1lbnQgb2Ygc3Vic3RpdHV0ZSBnb29kIG9yIHNlcnZpY2VzOyBsb3NzIG9mIHVzZSwgZGF0YSwgb3IgcHJvZml0czsKK29yIGJ1c2luZXNzIGludGVycnVwdGlvbikgaG93ZXZlciBjYXVzZWQgYW5kIG9uIHRoZW9yeSBvZiBsaWFiaWxpdHkuICBXaGV0aGVyCitpbiBjb250cmFjdCwgc3RyaWN0IGxpYWJpbGl0eSBvciB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSBvciBvdGhlcndpc2UpIAorYXJpc2luZyBpbiBhbnkgd2F5IG91dCBvZiB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUsIGV2ZW4gaWYgYWR2aXNlZCBvZiB0aGUKK3Bvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlLgorCisgICAgIFdyaXR0ZW4gYnkgQWRhbSBUd2lzcyAoYWRhbUB6ZXVzLmNvLnVrKS4gIE1hcmNoIDE5OTYKKworVGhhbmtzIHRvIHRoZSBmb2xsb3dpbmcgcGVvcGxlIGZvciB0aGVpciBpbnB1dDoKKyAgTWlrZSBCZWxzaGUgKG1iZWxzaGVAbmV0c2NhcGUuY29tKSAKKyAgTWljaGFlbCBDYW1wYW5lbGxhIChjYW1wYW5lbGxhQHN0ZXZtcy5lbmV0LmRlYy5jb20pCisKKyovCisKK0ZvciB0aGUgZXhwYXQgeG1sIHBhcnNlciBjb21wb25lbnQ6CisKK0NvcHlyaWdodCAoYykgMTk5OCwgMTk5OSwgMjAwMCBUaGFpIE9wZW4gU291cmNlIFNvZnR3YXJlIENlbnRlciBMdGQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbmQgQ2xhcmsgQ29vcGVyCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCit3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCitkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwordGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCQorVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQKK2luIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCQorVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCitFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KK0lOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZCitDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKK1NPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvQXBwbGUgYi9saWNlbnNlcy9BcHBsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jM2Q1NDk2Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvQXBwbGUKQEAgLTAsMCArMSwxNjUgQEAKK0FwcGxlIENvbXB1dGVyLCBJbmMuIFNvZnR3YXJlIExpY2Vuc2UKKworUExFQVNFIFJFQUQgVEhJUyBTT0ZUV0FSRSBMSUNFTlNFIEFHUkVFTUVOVCAiTElDRU5TRSIgQ0FSRUZVTExZIEJFRk9SRQorRE9XTkxPQURJTkcgVEhJUyBTT0ZUV0FSRS4gQlkgRE9XTkxPQURJTkcgVEhJUyBTT0ZUV0FSRSBZT1UgQVJFCitBR1JFRUlORyBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiAgSUYgWU9VIERPIE5PVAorQUdSRUUgVE8gVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRSwgRE8gTk9UIERPV05MT0FELgorCisxLiBMaWNlbnNlLiAgVGhlIHNvZnR3YXJlLCBkb2N1bWVudGF0aW9uIGFuZCBhbnkgZm9udHMgd2hpY2ggeW91IHdpbGwKK3JlY2VpdmUgYnkgZG93bmxvYWRpbmcgdGhpcyBzb2Z0d2FyZSAodGhlICJBcHBsZSBTb2Z0d2FyZSIpIGFyZQorbGljZW5zZWQsIG5vdCBzb2xkLCB0byB5b3UgYnkgQXBwbGUgQ29tcHV0ZXIsIEluYy4gb3IgaXRzIGxvY2FsCitzdWJzaWRpYXJ5LCBpZiBhbnkuICBBcHBsZSBhbmQvb3IgQXBwbGUncyBsaWNlbnNvcihzKSByZXRhaW4gdGl0bGUgdG8KK3RoZSBBcHBsZSBTb2Z0d2FyZSwgYW5kIHRoZSBBcHBsZSBTb2Z0d2FyZSBhbmQgYW55IGNvcGllcyB3aGljaCB0aGlzCitMaWNlbnNlIGF1dGhvcml6ZXMgeW91IHRvIG1ha2UgYXJlIHN1YmplY3QgdG8gdGhpcyBMaWNlbnNlLiAgVGhpcworTGljZW5zZSBncmFudHMgbm8gcmlnaHQgb3IgbGljZW5zZSB1bmRlciBhbnkgdHJhZGVtYXJrcywgc2VydmljZQorbWFya3MsIG9yIHRyYWRlbmFtZXMgb2YgQXBwbGUuCisKKzIuIFBlcm1pdHRlZCBVc2VzIGFuZCBSZXN0cmljdGlvbnMuICBUaGlzIExpY2Vuc2UgYWxsb3dzIHlvdSB0byBjb3B5LAoraW5zdGFsbCBhbmQgdXNlIHRoZSBBcHBsZSBTb2Z0d2FyZSBvbiBhbiB1bmxpbWl0ZWQgbnVtYmVyIG9mIGNvbXB1dGVycwordW5kZXIgeW91ciBkaXJlY3QgY29udHJvbC4gWW91IG1heSBtb2RpZnkgYW5kIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzCitvZiB0aGUgQXBwbGUgU29mdHdhcmUgKCJNb2RpZmllZCBTb2Z0d2FyZSIpLCBob3dldmVyLCB5b3UgbWF5IG5vdAorbW9kaWZ5IG9yIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBmb250cyBwcm92aWRlZCBieSBBcHBsZQorKCJGb250cyIpLiAgWW91IG1heSBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHN1Y2ggTW9kaWZpZWQgU29mdHdhcmUKK29ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIGEgdmFsaWQsIGJpbmRpbmcgbGljZW5zZSB0aGF0IG1ha2VzIG5vCityZXByZXNlbnRhdGlvbnMgb3Igd2FycmFudGllcyBvbiBiZWhhbGYgb2YgQXBwbGUsIGFuZCBpcyBubyBsZXNzCitwcm90ZWN0aXZlIG9mIEFwcGxlIGFuZCBBcHBsZSdzIHJpZ2h0cyB0aGFuIHRoaXMgTGljZW5zZS4gIFlvdSBtYXkKK2Rpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIEZvbnRzIG9ubHkgYXMgYSBwYXJ0IG9mIGFuZCBmb3IgdXNlIHdpdGgKK01vZGlmaWVkIFNvZnR3YXJlLCBhbmQgbm90IGFzIGEgcGFydCBvZiBvciBmb3IgdXNlIHdpdGggTW9kaWZpZWQKK1NvZnR3YXJlIHRoYXQgaXMgZGlzdHJpYnV0ZWQgb3Igc3VibGljZW5zZWQgZm9yIGEgZmVlIG9yIGZvciBvdGhlcgordmFsdWFibGUgY29uc2lkZXJhdGlvbi4gIElmIHRoZSBNb2RpZmllZCBTb2Z0d2FyZSBjb250YWlucworbW9kaWZpY2F0aW9ucywgb3ZlcndyaXRlcywgcmVwbGFjZW1lbnRzLCBkZWxldGlvbnMsIGFkZGl0aW9ucywgb3IKK3BvcnRzIHRvIG5ldyBwbGF0Zm9ybXMgb2Y6ICgxKSB0aGUgbWV0aG9kcyBvZiBleGlzdGluZyBjbGFzcyBvYmplY3RzCitvciB0aGVpciBleGlzdGluZyByZWxhdGlvbnNoaXBzLCBvciAoMikgYW55IHBhcnQgb2YgdGhlIHZpcnR1YWwKK21hY2hpbmUsIHRoZW4gZm9yIHNvIGxvbmcgYXMgdGhlIE1vZGlmaWVkIFNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIG9yCitzdWJsaWNlbnNlZCB0byBvdGhlcnMsIHN1Y2ggbW9kaWZpZWQsIG92ZXJ3cml0dGVuLCByZXBsYWNlZCwgZGVsZXRlZCwKK2FkZGVkIGFuZCBwb3J0ZWQgcG9ydGlvbnMgb2YgdGhlIE1vZGlmaWVkIFNvZnR3YXJlIG11c3QgYmUgbWFkZQorcHVibGljbHkgYXZhaWxhYmxlLCBwcmVmZXJhYmx5IGJ5IG1lYW5zIG9mIGRvd25sb2FkIGZyb20gYSB3ZWJzaXRlLCBhdAorbm8gY2hhcmdlIHVuZGVyIHRoZSB0ZXJtcyBzZXQgZm9ydGggaW4gRXhoaWJpdCBBIGJlbG93LiAgWW91IG1heQordHJhbnNmZXIgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHByb3ZpZGVkIHlvdSB0cmFuc2ZlciB0aGlzCitMaWNlbnNlIGFuZCBhIGNvcHkgb2YgdGhlIEFwcGxlIFNvZnR3YXJlIHRvIGEgcGFydHkgd2hvIGFncmVlcyB0bworYWNjZXB0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRlc3Ryb3kgYW55IG90aGVyIGNvcGllcyBvZiB0aGUKK0FwcGxlIFNvZnR3YXJlIGluIHlvdXIgcG9zc2Vzc2lvbi4gIFlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZQord2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB3aXRob3V0IG5vdGljZSBmcm9tIEFwcGxlIGlmIHlvdSBmYWlsIHRvCitjb21wbHkgd2l0aCBhbnkgdGVybShzKSBvZiB0aGlzIExpY2Vuc2UuCisKKzMuIERpc2NsYWltZXIgT2YgV2FycmFudHkuICBUaGUgQXBwbGUgU29mdHdhcmUgaXMgcHJlLXJlbGVhc2UsIGFuZAordW50ZXN0ZWQsIG9yIG5vdCBmdWxseSB0ZXN0ZWQuICBUaGUgQXBwbGUgU29mdHdhcmUgbWF5IGNvbnRhaW4gZXJyb3JzCit0aGF0IGNvdWxkIGNhdXNlIGZhaWx1cmVzIG9yIGxvc3Mgb2YgZGF0YSwgYW5kIG1heSBiZSBpbmNvbXBsZXRlIG9yCitjb250YWluIGluYWNjdXJhY2llcy4gIFlvdSBleHByZXNzbHkgYWNrbm93bGVkZ2UgYW5kIGFncmVlIHRoYXQgdXNlIG9mCit0aGUgQXBwbGUgU29mdHdhcmUgaXMgYXQgeW91ciBzb2xlIHJpc2suICBZb3UgYWNrbm93bGVkZ2UgdGhhdCBBcHBsZQoraGFzIG5vdCBwdWJsaWNseSBhbm5vdW5jZWQsIG5vciBwcm9taXNlZCBvciBndWFyYW50ZWVkIHRvIHlvdSwgdGhhdAorQXBwbGUgd2lsbCByZWxlYXNlIGEgZmluYWwsIGNvbW1lcmNpYWwgb3IgYW55IGZ1dHVyZSBwcmUtcmVsZWFzZQordmVyc2lvbiBvZiB0aGUgQXBwbGUgU29mdHdhcmUgdG8geW91IG9yIGFueW9uZSBpbiB0aGUgZnV0dXJlLCBhbmQgdGhhdAorQXBwbGUgaGFzIG5vIGV4cHJlc3Mgb3IgaW1wbGllZCBvYmxpZ2F0aW9uIHRvIGFubm91bmNlIG9yIGludHJvZHVjZSBhCitmaW5hbCwgY29tbWVyY2lhbCBvciBhbnkgZnV0dXJlIHByZS1yZWxlYXNlIHZlcnNpb24gb2YgdGhlIEFwcGxlCitTb2Z0d2FyZSBvciBhbnkgc2ltaWxhciBvciBjb21wYXRpYmxlIHByb2R1Y3QsIG9yIHRvIGNvbnRpbnVlIHRvIG9mZmVyCitvciBzdXBwb3J0IHRoZSBBcHBsZSBTb2Z0d2FyZSBpbiB0aGUgZnV0dXJlLiAgVGhlIEFwcGxlIFNvZnR3YXJlIGlzCitwcm92aWRlZCAiQVMtSVMiIGFuZCB3aXRob3V0IHdhcnJhbnR5IG9mIGFueSBraW5kIGFuZCBBcHBsZSBhbmQKK0FwcGxlJ3MgbGljZW5zb3IocykgKGZvciB0aGUgcHVycG9zZXMgb2YgU2VjdGlvbnMgMyBhbmQgNCwgQXBwbGUgYW5kCitBcHBsZSdzIGxpY2Vuc29yKHMpIHNoYWxsIGJlIGNvbGxlY3RpdmVseSByZWZlcnJlZCB0byBhcyAiQXBwbGUiKQorRVhQUkVTU0xZIERJU0NMQUlNIEFMTCBXQVJSQU5USUVTIEFORC9PUiBDT05ESVRJT05TLCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBBTkQvT1IKK0NPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIFNBVElTRkFDVE9SWSBRVUFMSVRZIEFORCBGSVRORVNTIEZPUgorQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBSSUdIVFMuICBBUFBMRQorRE9FUyBOT1QgV0FSUkFOVCBUSEFUIFRIRSBGVU5DVElPTlMgQ09OVEFJTkVEIElOIFRIRSBBUFBMRSBTT0ZUV0FSRQorV0lMTCBNRUVUIFlPVVIgUkVRVUlSRU1FTlRTLCBPUiBUSEFUIFRIRSBPUEVSQVRJT04gT0YgVEhFIEFQUExFCitTT0ZUV0FSRSBXSUxMIEJFIFVOSU5URVJSVVBURUQgT1IgRVJST1ItRlJFRSwgT1IgVEhBVCBERUZFQ1RTIElOIFRIRQorQVBQTEUgU09GVFdBUkUgV0lMTCBCRSBDT1JSRUNURUQuICBGVVJUSEVSTU9SRSwgQVBQTEUgRE9FUyBOT1QgV0FSUkFOVAorT1IgTUFLRSBBTlkgUkVQUkVTRU5UQVRJT05TIFJFR0FSRElORyBUSEUgVVNFIE9SIFRIRSBSRVNVTFRTIE9GIFRIRQorVVNFIE9GIFRIRSBBUFBMRSBTT0ZUV0FSRSBPUiBSRUxBVEVEIERPQ1VNRU5UQVRJT04gSU4gVEVSTVMgT0YgVEhFSVIKK0NPUlJFQ1RORVNTLCBBQ0NVUkFDWSwgUkVMSUFCSUxJVFksIE9SIE9USEVSV0lTRS4gIE5PIE9SQUwgT1IgV1JJVFRFTgorSU5GT1JNQVRJT04gT1IgQURWSUNFIEdJVkVOIEJZIEFQUExFIE9SIEFOIEFQUExFIEFVVEhPUklaRUQKK1JFUFJFU0VOVEFUSVZFIFNIQUxMIENSRUFURSBBIFdBUlJBTlRZIE9SIElOIEFOWSBXQVkgSU5DUkVBU0UgVEhFCitTQ09QRSBPRiBUSElTIFdBUlJBTlRZLiAgU0hPVUxEIFRIRSBBUFBMRSBTT0ZUV0FSRSBQUk9WRSBERUZFQ1RJVkUsCitZT1UgKEFORCBOT1QgQVBQTEUgT1IgQU4gQVBQTEUgQVVUSE9SSVpFRCBSRVBSRVNFTlRBVElWRSkgQVNTVU1FIFRIRQorRU5USVJFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiAgU09NRQorSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFRIRQorQUJPVkUgRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLiAgVEhFIFRFUk1TIE9GIFRISVMgRElTQ0xBSU1FUiBETworTk9UIEFGRkVDVCBPUiBQUkVKVURJQ0UgVEhFIFNUQVRVVE9SWSBSSUdIVFMgT0YgQSBDT05TVU1FUiBBQ1FVSVJJTkcKK0FQUExFIFBST0RVQ1RTIE9USEVSV0lTRSBUSEFOIElOIFRIRSBDT1VSU0UgT0YgQSBCVVNJTkVTUywgTkVJVEhFUiBETworVEhFWSBMSU1JVCBPUiBFWENMVURFIEFOWSBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWQorQ0FVU0VEIEJZIEFQUExFJ1MgTkVHTElHRU5DRS4KKworNC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuICBVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTLCBJTkNMVURJTkcKK05FR0xJR0VOQ0UsIFNIQUxMIEFQUExFIEJFIExJQUJMRSBGT1IgQU5ZIElOQ0lERU5UQUwsIFNQRUNJQUwsCitJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgT1IgUkVMQVRJTkcgVE8gVEhJUworTElDRU5TRS4gIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIExJTUlUQVRJT04gT0YgSU5DSURFTlRBTAorT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIFNPIFRISVMgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4gIEluCitubyBldmVudCBzaGFsbCBBcHBsZSdzIHRvdGFsIGxpYWJpbGl0eSB0byB5b3UgZm9yIGFsbCBkYW1hZ2VzIGV4Y2VlZAordGhlIGFtb3VudCBvZiBmaWZ0eSBkb2xsYXJzICgkNTAuMDApLgorCis1LiBJbmRlbW5pZmljYXRpb24uICBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5IGFuZCBob2xkIEFwcGxlIGhhcm1sZXNzCitmcm9tIGFueSBhbmQgYWxsIGRhbWFnZXMsIGxpYWJpbGl0aWVzLCBjb3N0cyBhbmQgZXhwZW5zZXMgKGluY2x1ZGluZworYnV0IG5vdCBsaW1pdGVkIHRvIGF0dG9ybmV5cycgZmVlcyBhbmQgY29zdHMgb2Ygc3VpdCkgaW5jdXJyZWQgYnkKK0FwcGxlIGFzIGEgcmVzdWx0IG9mIGFueSBjbGFpbSwgcHJvY2VlZGluZywgYW5kL29yIGp1ZGdtZW50IHRvIHRoZQorZXh0ZW50IGl0IGFyaXNlcyBvdXQgb2Ygb3IgaXMgY29ubmVjdGVkIGluIGFueSBtYW5uZXIgd2l0aCB0aGUKK29wZXJhdGlvbiwgdXNlLCBkaXN0cmlidXRpb24gb3IgbW9kaWZpY2F0aW9uIG9mIE1vZGlmaWVkIFNvZnR3YXJlLCBvcgordGhlIGNvbWJpbmF0aW9uIG9mIEFwcGxlIFNvZnR3YXJlIG9yIE1vZGlmaWVkIFNvZnR3YXJlIHdpdGggb3RoZXIKK3Byb2dyYW1zOyBwcm92aWRlZCB0aGF0IEFwcGxlIG5vdGlmaWVzIExpY2Vuc2VlIG9mIGFueSBzdWNoIGNsYWltIG9yCitwcm9jZWVkaW5nIGluIHdyaXRpbmcsIHRlbmRlcnMgdG8gTGljZW5zZWUgdGhlIG9wcG9ydHVuaXR5IHRvIGRlZmVuZAorb3Igc2V0dGxlIHN1Y2ggY2xhaW0gb3IgcHJvY2VlZGluZyBhdCBMaWNlbnNlZSdzIGV4cGVuc2UsIGFuZAorY29vcGVyYXRlcyB3aXRoIExpY2Vuc2VlIGluIGRlZmVuZGluZyBvciBzZXR0bGluZyBzdWNoIGNsYWltIG9yCitwcm9jZWVkaW5nLgorCis2LiBFeHBvcnQgTGF3IEFzc3VyYW5jZXMuICBZb3UgbWF5IG5vdCB1c2Ugb3Igb3RoZXJ3aXNlIGV4cG9ydCBvcgorcmVleHBvcnQgdGhlIEFwcGxlIFNvZnR3YXJlIGV4Y2VwdCBhcyBhdXRob3JpemVkIGJ5IFVuaXRlZCBTdGF0ZXMgbGF3CithbmQgdGhlIGxhd3Mgb2YgdGhlIGp1cmlzZGljdGlvbiBpbiB3aGljaCB0aGUgQXBwbGUgU29mdHdhcmUgd2FzCitvYnRhaW5lZC4gIEluIHBhcnRpY3VsYXIsIGJ1dCB3aXRob3V0IGxpbWl0YXRpb24sIHRoZSBBcHBsZSBTb2Z0d2FyZQorbWF5IG5vdCBiZSBleHBvcnRlZCBvciByZWV4cG9ydGVkIChpKSBpbnRvIChvciB0byBhIG5hdGlvbmFsIG9yCityZXNpZGVudCBvZikgYW55IFUuUy4gZW1iYXJnb2VkIGNvdW50cnkgb3IgKGlpKSB0byBhbnlvbmUgb24gdGhlCitVLlMuIFRyZWFzdXJ5IERlcGFydG1lbnQncyBsaXN0IG9mIFNwZWNpYWxseSBEZXNpZ25hdGVkIE5hdGlvbmFscyBvcgordGhlIFUuUy4gRGVwYXJ0bWVudCBvZiBDb21tZXJjZSdzIFRhYmxlIG9mIERlbmlhbCBPcmRlcnMuICBCeSB1c2luZwordGhlIEFwcGxlIFNvZnR3YXJlLCB5b3UgcmVwcmVzZW50IGFuZCB3YXJyYW50IHRoYXQgeW91IGFyZSBub3QgbG9jYXRlZAoraW4sIHVuZGVyIGNvbnRyb2wgb2YsIG9yIGEgbmF0aW9uYWwgb3IgcmVzaWRlbnQgb2YgYW55IHN1Y2ggY291bnRyeSBvcgorb24gYW55IHN1Y2ggbGlzdC4KKworNy4gR292ZXJubWVudCBFbmQgVXNlcnMuICBJZiB0aGUgQXBwbGUgU29mdHdhcmUgaXMgc3VwcGxpZWQgdG8gdGhlCitVbml0ZWQgU3RhdGVzIEdvdmVybm1lbnQsIHRoZSBBcHBsZSBTb2Z0d2FyZSBpcyBjbGFzc2lmaWVkIGFzCisicmVzdHJpY3RlZCBjb21wdXRlciBzb2Z0d2FyZSIgYXMgZGVmaW5lZCBpbiBjbGF1c2UgNTIuMjI3LTE5IG9mIHRoZQorRkFSLiAgVGhlIFVuaXRlZCBTdGF0ZXMgR292ZXJubWVudCdzIHJpZ2h0cyB0byB0aGUgQXBwbGUgU29mdHdhcmUgYXJlCithcyBwcm92aWRlZCBpbiBjbGF1c2UgNTIuMjI3LTE5IG9mIHRoZSBGQVIuCisKKzguIENvbnRyb2xsaW5nIExhdyBhbmQgU2V2ZXJhYmlsaXR5LiAgSWYgdGhlcmUgaXMgYSBsb2NhbCBzdWJzaWRpYXJ5CitvZiBBcHBsZSBpbiB0aGUgY291bnRyeSBpbiB3aGljaCB0aGUgQXBwbGUgU29mdHdhcmUgTGljZW5zZSB3YXMKK29idGFpbmVkLCB0aGVuIHRoZSBsb2NhbCBsYXcgaW4gd2hpY2ggdGhlIHN1YnNpZGlhcnkgc2l0cyBzaGFsbCBnb3Zlcm4KK3RoaXMgTGljZW5zZS4gIE90aGVyd2lzZSwgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXdzCitvZiB0aGUgVW5pdGVkIFN0YXRlcyBhbmQgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEuICBJZiBmb3IgYW55IHJlYXNvbiBhCitjb3VydCBvZiBjb21wZXRlbnQganVyaXNkaWN0aW9uIGZpbmRzIGFueSBwcm92aXNpb24sIG9yIHBvcnRpb24KK3RoZXJlb2YsIHRvIGJlIHVuZW5mb3JjZWFibGUsIHRoZSByZW1haW5kZXIgb2YgdGhpcyBMaWNlbnNlIHNoYWxsCitjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QuCisKKzkuIENvbXBsZXRlIEFncmVlbWVudC4gIFRoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudAorYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIHVzZSBvZiB0aGUgQXBwbGUgU29mdHdhcmUgYW5kCitzdXBlcnNlZGVzIGFsbCBwcmlvciBvciBjb250ZW1wb3JhbmVvdXMgdW5kZXJzdGFuZGluZ3MgcmVnYXJkaW5nIHN1Y2gKK3N1YmplY3QgbWF0dGVyLiAgTm8gYW1lbmRtZW50IHRvIG9yIG1vZGlmaWNhdGlvbiBvZiB0aGlzIExpY2Vuc2Ugd2lsbAorYmUgYmluZGluZyB1bmxlc3MgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IEFwcGxlLgorCitXaGVyZSB0aGUgTGljZW5zZWUgaXMgbG9jYXRlZCBpbiB0aGUgcHJvdmluY2Ugb2YgUXVlYmVjLCBDYW5hZGEsIHRoZQorZm9sbG93aW5nIGNsYXVzZSBhcHBsaWVzOiBUaGUgcGFydGllcyBoZXJldG8gY29uZmlybSB0aGF0IHRoZXkgaGF2ZQorcmVxdWVzdGVkIHRoYXQgdGhpcyBBZ3JlZW1lbnQgYW5kIGFsbCByZWxhdGVkIGRvY3VtZW50cyBiZSBkcmFmdGVkIGluCitFbmdsaXNoLiAgTGVzIHBhcnRpZXMgb250IGV4aWfDqSBxdWUgbGUgcHLDqXNlbnQgY29udHJhdCBldCB0b3VzIGxlcworZG9jdW1lbnRzIGNvbm5leGVzIHNvaWVudCByw6lkaWfDqXMgZW4gYW5nbGFpcy4KKworCitFWEhJQklUIEEKKworTGljZW5zZS4gIFlvdSBtYXkgY29weSwgaW5zdGFsbCwgdXNlLCBtb2RpZnkgYW5kIGNyZWF0ZSBkZXJpdmF0aXZlCit3b3JrcyBvZiB0aGUgW01vZGlmaWVkIFNvZnR3YXJlXSAiQ2hhbmdlZCBTb2Z0d2FyZSIgKGJ1dCB5b3UgbWF5IG5vdAorbW9kaWZ5IG9yIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBbRm9udHNdKSBhbmQgZGlzdHJpYnV0ZSBhbmQKK3N1YmxpY2Vuc2Ugc3VjaCBDaGFuZ2VkIFNvZnR3YXJlLCBwcm92aWRlZCBob3dldmVyLCB0aGF0IGlmIHRoZQorQ2hhbmdlZCBTb2Z0d2FyZSBjb250YWlucyBtb2RpZmljYXRpb25zLCBvdmVyd3JpdGVzLCByZXBsYWNlbWVudHMsCitkZWxldGlvbnMsIGFkZGl0aW9ucywgb3IgcG9ydHMgdG8gbmV3IHBsYXRmb3JtcyBvZjogKDEpIHRoZSBtZXRob2RzIG9mCitleGlzdGluZyBjbGFzc2VzIG9iamVjdHMgb3IgdGhlaXIgZXhpc3RpbmcgcmVsYXRpb25zaGlwcywgb3IgKDIpIGFueQorcGFydCBvZiB0aGUgdmlydHVhbCBtYWNoaW5lLCB0aGVuIGZvciBzbyBsb25nIGFzIHRoZSBDaGFuZ2VkIFNvZnR3YXJlCitpcyBkaXN0cmlidXRlZCBvciBzdWJsaWNlbnNlZCB0byBvdGhlcnMsIHN1Y2ggbW9kaWZpZWQsIG92ZXJ3cml0dGVuLAorcmVwbGFjZWQsIGRlbGV0ZWQsIGFkZGVkIGFuZCBwb3J0ZWQgcG9ydGlvbnMgb2YgdGhlIENoYW5nZWQgU29mdHdhcmUKK211c3QgYmUgbWFkZSBwdWJsaWNseSBhdmFpbGFibGUsIHByZWZlcmFibHkgYnkgbWVhbnMgb2YgZG93bmxvYWQgZnJvbQorYSB3ZWJzaXRlLCBhdCBubyBjaGFyZ2UgdW5kZXIgdGhlIHRlcm1zIG9mIGEgbGljZW5zZSB0aGF0IG1ha2VzIG5vCityZXByZXNlbnRhdGlvbnMgb3Igd2FycmFudGllcyBvbiBiZWhhbGYgb2YgYW55IHRoaXJkIHBhcnR5LCBpcyBubyBsZXNzCitwcm90ZWN0aXZlIG9mIFt0aGUgbGljZW5zb3JzIG9mIHRoZSBNb2RpZmllZCBTb2Z0d2FyZV0gYW5kIGl0cworbGljZW5zb3JzLCBhbmQgY29udGFpbnMgdGhlIHRlcm1zIHNldCBmb3J0aCBpbiBFeGhpYml0IEEgYmVsb3cgW3doaWNoCitzaG91bGQgY29udGFpbiB0aGUgdGVybXMgb2YgdGhpcyBFeGhpYml0IEFdLiAgWW91IG1heSBkaXN0cmlidXRlIGFuZAorc3VibGljZW5zZSB0aGUgW0ZvbnRzXSBvbmx5IGFzIGEgcGFydCBvZiBhbmQgZm9yIHVzZSB3aXRoIENoYW5nZWQKK1NvZnR3YXJlLCBhbmQgbm90IGFzIGEgcGFydCBvZiBvciBmb3IgdXNlIHdpdGggQ2hhbmdlZCBTb2Z0d2FyZSB0aGF0CitpcyBkaXN0cmlidXRlZCBvciBzdWJsaWNlbnNlZCBmb3IgYSBmZWUgb3IgZm9yIG90aGVyIHZhbHVhYmxlCitjb25zaWRlcmF0aW9uLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvQXJra3JhIGIvbGljZW5zZXMvQXJra3JhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhYTIxNTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9BcmtrcmEKQEAgLTAsMCArMSw4MiBAQAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTXVwIExpY2Vuc2UKKworICAgICAgIEF0IEFya2tyYSBFbnRlcnByaXNlcywgd2UnZCBsaWtlIGFsbCBvdXIgY3VzdG9tZXJzIHRvIGJlCisgICAgICAgZGVsaWdodGVkIHdpdGggb3VyIHByb2R1Y3RzLiBUbyBlbnN1cmUgdGhhdCBNdXAgYW5kIGFueQorICAgICAgIG90aGVyIHByb2R1Y3RzIG9yIHNlcnZpY2VzIHdlIHByb3ZpZGUgYXJlIHJlYWRpbHkgYXZhaWxhYmxlCisgICAgICAgYXQgdGhlIGxvd2VzdCBwb3NzaWJsZSBjb3N0IHRvIHlvdSwgd2UgbmVlZCB0byBlc3RhYmxpc2gKKyAgICAgICBsaWNlbnNpbmcgdGVybXMuCisKKyAgICAgICBXaGlsZSB0aGVyZSBhcmUgb3RoZXIgbXVzaWMgcHVibGljYXRpb24gcHJvZ3JhbXMgb24gdGhlCisgICAgICAgbWFya2V0LCB3ZSBiZWxpZXZlIE11cCBoYXMgdW5pcXVlIGZlYXR1cmVzIHRoYXQgeW91IG1heSBmaW5kCisgICAgICAgdmVyeSB1c2VmdWwuICBTaW5jZSBkaWZmZXJlbnQgcGVvcGxlIG1heSB3YW50IGRpZmZlcmVudAorICAgICAgIHRoaW5ncyBpbiBhIG11c2ljIHB1YmxpY2F0aW9uIHByb2dyYW0sIHlvdSBkbyBub3QgaGF2ZSB0bworICAgICAgIHBheSBmb3IgTXVwIHVudGlsIGFmdGVyIHlvdSd2ZSBoYWQgYSBjaGFuY2UgdG8gdHJ5IGl0IG91dAorICAgICAgIGFuZCBldmFsdWF0ZSBpdCBmb3IgeW91cnNlbGYuICBJZiB5b3UgaGF2ZSBwcm9ibGVtcyB3aXRoCisgICAgICAgTXVwLCBsZXQgdXMga25vdyBhbmQgd2Ugd2lsbCB0cnkgdG8gcmVzb2x2ZSB0aGVtLiAgSWYgeW91CisgICAgICAgaGF2ZSBwYWlkIHlvdXIgcmVnaXN0cmF0aW9uIGZlZSBhbmQgd2UgY2Fubm90IHJlc29sdmUKKyAgICAgICBwcm9ibGVtcyB0byB5b3VyIHNhdGlzZmFjdGlvbiwgd2Ugd2lsbCBnbGFkbHkgcmVmdW5kIHlvdXIKKyAgICAgICBtb25leS4KKworICAgICAgIDEuICBNdXAgTGljZW5zZQorCisgICAgICAgQXJra3JhIEVudGVycHJpc2VzIGRpc2NsYWltcyBhbGwgd2FycmFudGllcyByZWxhdGluZyB0byB0aGlzCisgICAgICAgc29mdHdhcmUsIHdoZXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIGluY2x1ZGluZyBidXQgbm90CisgICAgICAgbGltaXRlZCB0byBhbnkgaW1wbGllZCB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQKKyAgICAgICBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZSwgYW5kIGFsbCBzdWNoIHdhcnJhbnRpZXMKKyAgICAgICBhcmUgZXhwcmVzc2x5IGFuZCBzcGVjaWZpY2FsbHkgZGlzY2xhaW1lZC4gIE5laXRoZXIgQXJra3JhCisgICAgICAgRW50ZXJwcmlzZXMgbm9yIGFueW9uZSBlbHNlIHdobyBoYXMgYmVlbiBpbnZvbHZlZCBpbiB0aGUKKyAgICAgICBjcmVhdGlvbiwgcHJvZHVjdGlvbiwgb3IgZGVsaXZlcnkgb2YgdGhpcyBzb2Z0d2FyZSBzaGFsbCBiZQorICAgICAgIGxpYWJsZSBmb3IgYW55IGluZGlyZWN0LCBjb25zZXF1ZW50aWFsLCBvciBpbmNpZGVudGFsCisgICAgICAgZGFtYWdlcyBhcmlzaW5nIG91dCBvZiB0aGUgdXNlIG9mIG9yIGluYWJpbGl0eSB0byB1c2Ugc3VjaAorICAgICAgIHNvZnR3YXJlIGV2ZW4gaWYgQXJra3JhIEVudGVycHJpc2VzIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlCisgICAgICAgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzIG9mIGNsYWltcy4gIEluIG5vIGV2ZW50IHNoYWxsCisgICAgICAgQXJra3JhIEVudGVycHJpc2VzJyBsaWFiaWxpdHkgZm9yIGFueSBkYW1hZ2VzIGV2ZXIgZXhjZWVkCisgICAgICAgdGhlIHByaWNlIHBhaWQgZm9yIHRoZSBsaWNlbnNlIHRvIHVzZSB0aGUgc29mdHdhcmUsCisgICAgICAgcmVnYXJkbGVzcyBvZiB0aGUgZm9ybSBvZiB0aGUgY2xhaW0uICBUaGUgcGVyc29uIHVzaW5nIHRoZQorICAgICAgIHNvZnR3YXJlIGJlYXJzIGFsbCByaXNrIGFzIHRvIHRoZSBxdWFsaXR5IGFuZCBwZXJmb3JtYW5jZSBvZgorICAgICAgIHRoZSBzb2Z0d2FyZS4KKworICAgICAgIFNvbWUgc3RhdGVzIGRvIG5vdCBhbGxvdyB0aGUgZXhjbHVzaW9uIG9mIHRoZSBsaW1pdCBvZgorICAgICAgIGxpYWJpbGl0eSBmb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzbyB0aGUgYWJvdmUgbGltaXRhdGlvbgorICAgICAgIG1heSBub3QgYXBwbHkgdG8geW91LgorCisgICAgICAgVGhpcyBhZ3JlZW1lbnQgc2hhbGwgYmUgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlIHN0YXRlIG9mCisgICAgICAgSWxsaW5vaXMgYW5kIHNoYWxsIGludXJlIHRvIHRoZSBiZW5lZml0IG9mIEFya2tyYQorICAgICAgIEVudGVycHJpc2VzLCBhbmQgYW55IHN1Y2Nlc3NvcnMsIGFkbWluaXN0cmF0b3JzLCBoZWlycyBhbmQKKyAgICAgICBhc3NpZ25zLiBBbnkgYWN0aW9uIG9yIHByb2NlZWRpbmcgYnJvdWdodCBieSBlaXRoZXIgcGFydHkKKyAgICAgICBhZ2FpbnN0IHRoZSBvdGhlciBhcmlzaW5nIG91dCBvZiBvciByZWxhdGVkIHRvIHRoaXMKKyAgICAgICBhZ3JlZW1lbnQgc2hhbGwgYmUgYnJvdWdodCBvbmx5IGluIHRoZSBzdGF0ZSBvciBmZWRlcmFsCisgICAgICAgY291cnQgb2YgY29tcGV0ZW50IGp1cmlzZGljdGlvbiBsb2NhdGVkIGluIER1UGFnZSBDb3VudHksCisgICAgICAgSWxsaW5vaXMuIFRoZSBwYXJ0aWVzIGhlcmVieSBjb25zZW50IHRvIGluIHBlcnNvbmFtCisgICAgICAganVyaXNkaWN0aW9uIG9mIHNhaWQgY291cnRzLgorCisgICAgICAgVGhpcyBzb2Z0d2FyZSBpcyBsaWNlbnNlZCB0byB5b3UsIGZvciB5b3VyIG93biB1c2UuIFRoaXMgaXMKKyAgICAgICBjb3B5cmlnaHRlZCBzb2Z0d2FyZS4gWW91IGFyZSBub3Qgb2J0YWluaW5nIHRpdGxlIHRvIHRoZQorICAgICAgIHNvZnR3YXJlIG9yIGFueSBjb3B5cmlnaHQgcmlnaHRzLiAgWW91IG1heSBub3Qgc3VibGljZW5zZSwKKyAgICAgICByZW50LCBsZWFzZSwgY29udmV5LCBtb2RpZnksIG9yIHRyYW5zbGF0ZSB0aGlzIHNvZnR3YXJlIGZvcgorICAgICAgIGFueSBwdXJwb3NlLgorCisgICAgICAgWW91IG1heSBtYWtlIGFzIG1hbnkgY29waWVzIGFzIHlvdSBuZWVkIGZvciBiYWNrLXVwCisgICAgICAgcHVycG9zZXMuICBZb3UgbWF5IHVzZSB0aGlzIHNvZnR3YXJlIG9uIG1vcmUgdGhhbiBvbmUKKyAgICAgICBjb21wdXRlciwgcHJvdmlkZWQgdGhlcmUgaXMgbm8gY2hhbmNlIGl0IHdpbGwgYmUgdXNlZAorICAgICAgIHNpbXVsdGFuZW91c2x5IG9uIG1vcmUgdGhhbiBvbmUgY29tcHV0ZXIuICBJZiB5b3UgbmVlZCB0bworICAgICAgIHVzZSB0aGlzIHNvZnR3YXJlIG9uIG1vcmUgdGhhbiBvbmUgY29tcHV0ZXIgc2ltdWx0YW5lb3VzbHksCisgICAgICAgeW91IHdpbGwgbmVlZCB0byBvYnRhaW4gYSBsaWNlbnNlIGZvciBlYWNoIGNvcHkgb3IgYSBzaXRlCisgICAgICAgbGljZW5zZS4KKworICAgICAgIFlvdSBtYXkgbWFrZSBjb3BpZXMgb2YgdGhpcyBzb2Z0d2FyZSBmb3Igb3RoZXIgcGFydGllcyB1bmRlcgorICAgICAgIHRoZSBmb2xsb3dpbmcgdGVybXM6CisKKyAgICAgICAgICAtIFRoZSBjb3B5IG11c3QgYmUgYW4gZXhhY3QgY29weSBhcyB3b3VsZCBiZSBvYnRhaW5lZAorICAgICAgICAgICAgZGlyZWN0bHkgZnJvbSBBcmtrcmEgRW50ZXJwcmlzZXMsIGluY2x1ZGluZyB0aGlzCisgICAgICAgICAgICBsaWNlbnNlLiAgSXQgbXVzdCBjbGVhcmx5IHN0YXRlIHRoYXQgaXQgaXMgYSBjb3B5LCBhbmQKKyAgICAgICAgICAgIG11c3QgZ2l2ZSB0aGUgYWRkcmVzcyBvZiBBcmtrcmEgRW50ZXJwcmlzZXMuCisKKyAgICAgICAgICAtIFRoZSBjb3B5IG11c3QgYmUgdXNlZCBieSB0aGUgb2J0YWluaW5nIHBhcnR5IG9ubHkgZm9yCisgICAgICAgICAgICB0aGUgcHVycG9zZSBvZiB0cmlhbGluZyB0aGUgc29mdHdhcmUuIElmIGFmdGVyIHRyaWFsaW5nCisgICAgICAgICAgICB0aGUgc29mdHdhcmUsIHRoZSByZWNlaXZpbmcgcGFydHkgd2lzaGVzIHRvIGNvbnRpbnVlIHRvCisgICAgICAgICAgICB1c2UgdGhlIHNvZnR3YXJlLCB0aGV5IG11c3Qgc3VibWl0IHRoZWlyIGxpY2Vuc2UgZmVlLgorCisgICAgICAgICAgLSBBbGwgbGltaXRhdGlvbnMgYW5kIGRpc2NsYWltZXJzIG9mIHRoaXMgbGljZW5zZSBhcHBseQorICAgICAgICAgICAgdG8gdGhlIGNvcHkuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9BcnBXYXJwIGIvbGljZW5zZXMvQXJwV2FycApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTgyMjUyCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvQXJwV2FycApAQCAtMCwwICsxLDkyIEBACitBQ0FERU1JQyBTT0ZUV0FSRSBMSUNFTlNFIEFHUkVFTUVOVCBGT1IgRU5ELVVTRVJTIEFUIFBVQkxJQyBGVU5ERUQgQUNBREVNSUMsIEVEVUNBVElPTiBPUiBSRVNFQVJDSCBJTlNUSVRVVElPTlMgRk9SIFRIRSBVU0UgT0YgQVJQL1dBUlAgNy4wCisKK0J5IGNsaWNraW5nIHRoZSBBY2NlcHRhbmNlIGJ1dHRvbiBmb3IgdGhlIEFSUC93QVJQIDcuMCBTb2Z0d2FyZSAoIkxpY2Vuc2VkIFNvZnR3YXJlIiksIHlvdSBhcmUgY29uc2VudGluZyB0byBiZSBib3VuZCBieSBhbmQgYmVjb21lIGEgcGFydHkgdG8gdGhpcyBhZ3JlZW1lbnQgYXMgdGhlICJMaWNlbnNlZSIuIElmIHlvdSBkbyBub3QgYWdyZWUgdG8gYWxsIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIGFncmVlbWVudCwgeW91IG11c3Qgbm90IGNsaWNrIHRoZSBBY2NlcHRhbmNlIGJ1dHRvbiwgbm90IGluc3RhbGwgdGhlIHByb2R1Y3Qgbm9yIHVzZSB0aGUgcHJvZHVjdCwgYW5kIHlvdSBkbyBub3QgYmVjb21lIGEgTElDRU5TRUUgdW5kZXIgdGhpcyBhZ3JlZW1lbnQuCisKK0lmIHlvdSBhcmUgbm90IGEgbWVtYmVyIG9mIGEgcHVibGljIGZ1bmRlZCBhY2FkZW1pYyBhbmQvb3IgZWR1Y2F0aW9uIGFuZC9vciByZXNlYXJjaCBpbnN0aXR1dGlvbiB5b3UgbXVzdCBvYnRhaW4gYSBjb21tZXJjaWFsIGxpY2Vuc2UgZnJvbSBFTUJMRU0gKEluZm9AZW1ibC1lbS5kZSkuCisKK1RoaXMgc29mdHdhcmUgbGljZW5zZSBhZ3JlZW1lbnQgaXMgZW50ZXJlZCBpbnRvIGJ5IGFuZCBiZXR3ZWVuIEVNQkwgRW50ZXJwcmlzZSBNYW5hZ2VtZW50IEdtYkggKGhlcmVpbmFmdGVyICJFTUJMRU0iKSBsb2NhdGVkIGF0IEJveGJlcmdyaW5nIDEwNywgRC02OTEyNiBIZWlkZWxiZXJnLCBHZXJtYW55IGFuZCB0aGUgIkxJQ0VOU0VFIi4KKworV0hFUkVBUyBFTUJMRU0gaGFzIHRoZSByaWdodCB0byBsaWNlbnNlIGFsbCBjb3B5cmlnaHRzIGFuZCBvdGhlciBwcm9wZXJ0eSByaWdodHMgaW4gdGhlIExpY2Vuc2VkIFNvZnR3YXJlIGlkZW50aWZpZWQgYXMgQVJQL3dBUlAgNy4wIGFuZCBkZXZlbG9wZWQgYnkgRU1CTCAoRXVyb3BlYW4gTW9sZWN1bGFyIEJpb2xvZ3kgTGFib3JhdG9yeSwgTWV5ZXJob2ZzdHJhc3NlIDEsIEQtNjkxMTcgSGVpZGVsYmVyZywgR2VybWFueSkgaW4gY29sbGFib3JhdGlvbiB3aXRoIHRoZSBOS0kgKFRoZSBOZXRoZXJsYW5kcyBDYW5jZXIgSW5zdGl0dXRlLCBQbGVzbWFubGFhbiAxMjEsIDEwNjZDWCBBbXN0ZXJkYW0sIFRoZSBOZXRoZXJsYW5kcyksIGFuZCBFTUJMRU0gZGVzaXJlcyB0byBsaWNlbnNlIHRoZSBTb2Z0d2FyZSBzbyB0aGF0IGl0IGJlY29tZXMgYXZhaWxhYmxlIGZvciBwdWJsaWMgdXNlIGFuZCBiZW5lZml0LgorCitXSEVSRUFTIExJQ0VOU0VFIGlzIGEgcHVibGljIGZ1bmRlZCBhY2FkZW1pYyBhbmQvb3IgZWR1Y2F0aW9uIGFuZC9vciByZXNlYXJjaCBpbnN0aXR1dGlvbi4KKworV0hFUkVBUyBMSUNFTlNFRSBkZXNpcmVzIHRvIGFjcXVpcmUgYSBmcmVlIG5vbi1leGNsdXNpdmUgbGljZW5zZSB0byB1c2UgdGhlIFNvZnR3YXJlIGZvciBpbnRlcm5hbCByZXNlYXJjaCBwdXJwb3NlcyBvbmx5LgorCitOT1csIFRIRVJFRk9SRSwgaW4gY29uc2lkZXJhdGlvbiBvZiB0aGUgbXV0dWFsIHByb21pc2VzIGFuZCBjb3ZlbmFudHMgY29udGFpbmVkIGhlcmVpbiwgdGhlIHBhcnRpZXMgYWdyZWUgYXMgZm9sbG93czoKKworMS4gRGVmaW5pdGlvbnMKKyJMaWNlbnNlZCBTb2Z0d2FyZSIsIG1lYW5zIHRoZSBjdXJyZW50IHZlcnNpb24gQVJQL3dBUlAgNy4wIGNvbXB1dGVyIHBhY2thZ2UgZGV2ZWxvcGVkIGJ5IFZpY3RvciBMYW16aW4gYW5kIEFuYXN0YXNzaXMgUGVycmFraXMsIGNvbGxlY3RpdmVseSB0aGUgIkF1dGhvcnMiLCBwdXJzdWFudCB0byB0aGlzIEFncmVlbWVudC4KKworQVJQL3dBUlAgNy4wIGNhbGxzIGZvciB0aGUgdXNlIG9mIHNvbWUgQ0NQNCAoQ29sbGFib3JhdGl2ZSBDb21wdXRlciBQcm9qZWN0IDQsIERhcmVzYnVyeSBMYWJvcmF0b3J5LCBVSykgcHJvZ3JhbXMgYW5kIHNwZWNpYWxpemVkIGxpYnJhcmllcy4gVGhlcmVmb3JlLCBMSUNFTlNFRSBvZiBBUlAvd0FSUCBtdXN0IG9idGFpbiBhIENDUDQgbGljZW5zZSBhbmQgbXVzdCBpbnN0YWxsIENDUDQgcHJpb3IgdG8gaW5zdGFsbGF0aW9uIG9mIEFSUC93QVJQLgorCitBbnkgb3BpbmlvbiwgZmluZGluZ3MsIGNvbmNsdXNpb25zIG9yIHJlY29tbWVuZGF0aW9ucyBleHByZXNzZWQgaW4gdGhlIEFSUC93QVJQIDcuMCBzdWl0ZSBhcmUgdGhvc2Ugb2YgdGhlIGF1dGhvcnMgYW5kIGRvIG5vdCBuZWNlc3NhcmlseSByZWZsZWN0IHRoZSB2aWV3cyBvZiBFTUJMLCBOS0kgYW5kIEVNQkxFTS4KKworMi4gTGljZW5zZQorU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYSBub24tZXhjbHVzaXZlLCBub24tdHJhbnNmZXJhYmxlIExpY2Vuc2UgdG8gdXNlIGFuZCBjb3B5IHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBpcyBtYWRlIGF2YWlsYWJsZSBmcmVlIG9mIGNoYXJnZSBmb3IgdGhlIExJQ0VOU0VFLCB3aGljaCBpcyBhIG5vbi1wcm9maXQgZWR1Y2F0aW9uYWwsIGFjYWRlbWljIGFuZC9vciByZXNlYXJjaCBpbnN0aXR1dGlvbi4gVGhlIExpY2Vuc2UgaXMgb25seSBncmFudGVkIGZvciBwZXJzb25hbCBhbmQgaW50ZXJuYWwgdXNlIGluIHJlc2VhcmNoIG9ubHkgYXQgb25lIFNpdGUsIHdoZXJlIGEgU2l0ZSBpcyBkZWZpbmVkIGFzIGEgc2V0IG9mIGNvbnRpZ3VvdXMgYnVpbGRpbmdzIGluIG9uZSBsb2NhdGlvbi4gVGhlIHNvZnR3YXJlIHdpbGwgYmUgdXNlZCBhdCBvbmx5IG9uZSBsb2NhdGlvbiBvZiBMSUNFTlNFRS4gVGhlIExJQ0VOU0VFIGNhbiB1c2UgdGhlIFNvZnR3YXJlIG9ubHkgZm9yIGFjYWRlbWljIHJlc2VhcmNoIHByb2plY3RzLiBUaGlzIGV4cGxpY2l0bHkgZXhjbHVkZXMgcHJvamVjdHMgd2hpY2ggYXJlIGNvbnRyYWN0ZWQgdG8gdGhlIExJQ0VOU0VFIGJ5IHRoaXJkIHBhcnRpZXMgZm9yIGEgZmVlLCBvciBwcm9qZWN0cyB0aGF0IGFyZSBkb25lIGluIGNvbGxhYm9yYXRpb24gd2l0aCBhIHRoaXJkIHBhcnR5IHRoYXQgaXMgZnVuZGluZyB0aGUgcmVzZWFyY2ggaW4gd2hvbGUgb3IgaW4gcGFydCBpbiBleGNoYW5nZSBmb3IgY29tbWVyY2lhbCByaWdodHMgb24gdGhlIHJlc3VsdHMgYW5kL29yIHBvc3NpYmxlIGRlbGF5IGluIHB1YmxpY2F0aW9uIG9mIGFueSByZWxldmFudCByZXN1bHRzIHRvIHRoZSBhY2FkZW1pYyBjb21tdW5pdHkuCisKK1RoaXMgbGljZW5zZSBkb2VzIG5vdCBlbnRpdGxlIExJQ0VOU0VFIHRvIHJlY2VpdmUgZnJvbSBFTUJMRU0gYW55IGNvcGllcyBvZiB0aGUgTGljZW5zZWQgU29mdHdhcmUgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBMaWNlbnNlZCBTb2Z0d2FyZSBvbiBkaXNrcywgdGFwZXMgb3IgQ0QncywgaGFyZC1jb3B5IGRvY3VtZW50YXRpb24sIHRlY2huaWNhbCBzdXBwb3J0LCB0ZWxlcGhvbmUgYXNzaXN0YW5jZSwgb3IgZW5oYW5jZW1lbnRzIG9yIHVwZGF0ZXMgdG8gdGhlIExpY2Vuc2VkIFNvZnR3YXJlLgorCitUaGUgdXNlciBhbmQgYW55IHJlc2VhcmNoIGFzc2lzdGFudHMsIGNvLXdvcmtlcnMgb3Igb3RoZXIgd29ya2VycyB3aG8gbWF5IHVzZSB0aGUgU29mdHdhcmUgYWdyZWUgdG8gbm90IGdpdmUgdGhlIHNvdXJjZSBjb2RlIHRvIHRoaXJkIHBhcnRpZXMgb3IgZ3JhbnQgbGljZW5zZXMgb24gYW55IHNvZnR3YXJlIHRoYXQgaW5jbHVkZXMgdGhlIExpY2Vuc2VkIFNvZnR3YXJlLCBhbG9uZSBvciBpbnRlZ3JhdGVkIGludG8gb3RoZXIgc29mdHdhcmUsIHRvIHRoaXJkIHBhcnRpZXMuIE1vZGlmaWNhdGlvbiBvZiB0aGUgTGljZW5zZWQgU29mdHdhcmUgY29kZSBpcyBwcm9oaWJpdGVkIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBFTUJMRU0uCisKKzMuIE93bmVyc2hpcAorRXhjZXB0IGFzIGV4cHJlc3NseSBsaWNlbnNlZCBpbiB0aGlzIEFncmVlbWVudCwgRU1CTCBhbmQgTktJIHNoYWxsIHJldGFpbiB0aXRsZSB0byB0aGUgTGljZW5zZWQgU29mdHdhcmUsIGFuZCBhbnkgdXBncmFkZXMgYW5kIG1vZGlmaWNhdGlvbnMgY3JlYXRlZCBieSBFTUJMIGFuZCBOS0kuCisKKzQuIENvbnNpZGVyYXRpb24KK0luIGNvbnNpZGVyYXRpb24gZm9yIHRoZSBsaWNlbnNlIHJpZ2h0cyBncmFudGVkIGJ5IEVNQkxFTSwgTElDRU5TRUUgd2lsbCBvYnRhaW4gdGhpcyBhY2FkZW1pYyBsaWNlbnNlIGZyZWUgb2YgY2hhcmdlLgorCis1LiBDb3BpZXMKK0xJQ0VOU0VFIHNoYWxsIGhhdmUgdGhlIHJpZ2h0IHRvIG1ha2UgY29waWVzIG9mIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBmb3IgaW50ZXJuYWwgdXNlIGF0IHRoZSBTaXRlIGFuZCBmb3IgYmFjay11cCBwdXJwb3NlcyB1bmRlciB0aGlzIEFncmVlbWVudCwgYnV0IGFncmVlcyB0aGF0IGFsbCBzdWNoIGNvcGllcyBzaGFsbCBjb250YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlcyBhbmQgYWxsIG90aGVyIHJlYXNvbmFibGUgYW5kIGFwcHJvcHJpYXRlIHByb3ByaWV0YXJ5IG1hcmtpbmdzIG9yIGNvbmZpZGVudGlhbCBsZWdlbmRzIHRoYXQgYXBwZWFyIG9uIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBwcm92aWRlZCBoZXJldW5kZXIuCisKKzYuIFN1cHBvcnQKK0VNQkxFTSBzaGFsbCBoYXZlIG5vIG9ibGlnYXRpb24gdG8gb2ZmZXIgc3VwcG9ydCBzZXJ2aWNlcyB0byBMSUNFTlNFRSwgYW5kIG5vdGhpbmcgY29udGFpbmVkIGhlcmVpbiBzaGFsbCBiZSBpbnRlcnByZXRlZCBhcyB0byByZXF1aXJlIEVNQkxFTSB0byBwcm92aWRlIG1haW50ZW5hbmNlLCBpbnN0YWxsYXRpb24gc2VydmljZXMsIGRlYnVnZ2luZywgY29uc3VsdGF0aW9uLCBvciBlbmQtdXNlciBzdXBwb3J0IG9mIGFueSBraW5kLgorCis3LiBTb2Z0d2FyZSBQcm90ZWN0aW9uCitMSUNFTlNFRSBhY2tub3dsZWRnZXMgdGhhdCBBUlAvd0FSUCBpcyBwcm9wcmlldGFyeSB0byBFTUJMIGFuZCBOS0kuIFRoZSBzb2Z0d2FyZSBjb2RlIG9mIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBzaGFsbCBiZSB0cmVhdGVkIGFzIHRyYWRlIHNlY3JldHMgYW5kIGNvbmZpZGVudGlhbCBpbmZvcm1hdGlvbiwgYW5kIExJQ0VOU0VFIGFncmVlcyB0byB1c2UgdGhlaXIgYmVzdCBlZmZvcnRzIHRvIGhvbGQgdGhlIHNhbWUgaW4gY29uZmlkZW5jZS4gTElDRU5TRUUncyBvYmxpZ2F0aW9uIGZvciBjb25maWRlbnRpYWxpdHkgc2hhbGwgbm90IGV4dGVuZCB0byBhbnkgaW5mb3JtYXRpb24gd2hpY2ggaXMsIG9yIGJlY29tZXMgZ2VuZXJhbGx5IGF2YWlsYWJsZSB0byB0aGUgcHVibGljLCBpcyBhbHJlYWR5IGtub3duIHRvIG9yIHN1YnNlcXVlbnRseSBkaXNjbG9zZWQgYnkgdGhpcmQgcGFydGllcyB0byBMSUNFTlNFRSBhbmQgaXMgYXQgaXRzIGZyZWUgZGlzcG9zYWwsIG9yIGlzIGluZGVwZW5kZW50bHkgZGV2ZWxvcGVkIGJ5IExJQ0VOU0VFIG9yIGl0cyBhZmZpbGlhdGVzIHdpdGhvdXQgdGhlIHVzZSBvZiB0aGUgY29uZmlkZW50aWFsIGluZm9ybWF0aW9uIGRpc2Nsb3NlZCBieSBFTUJMIG9yIE5LSSwgb3IgaXMgcmVxdWlyZWQgYnkgbGF3IG9yIGxlZ2FsIHByb2Nlc3MuCisKK0V4Y2VwdCBhcyBvdGhlcndpc2UgZXhwcmVzc2x5IHBlcm1pdHRlZCBpbiB0aGlzIEFncmVlbWVudCwgTElDRU5TRUUgbWF5IG5vdCAoaSkgbW9kaWZ5IG9yIGNyZWF0ZSBhbnkgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgTGljZW5zZWQgU29mdHdhcmUgb3IgZG9jdW1lbnRhdGlvbiB0byB0aGUgTGljZW5zZWQgU29mdHdhcmUsIGluY2x1ZGluZyBjdXN0b21pemF0aW9uLCB0cmFuc2xhdGlvbiBvciBsb2NhbGl6YXRpb247IChpaSkgZGVjb21waWxlLCBkaXNhc3NlbWJsZSwgcmV2ZXJzZSBlbmdpbmVlciwgb3Igb3RoZXJ3aXNlIGF0dGVtcHQgdG8gZGVyaXZlIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2R1Y3Q7IChpaWkpIHJlZGlzdHJpYnV0ZSwgZW5jdW1iZXIsIHNlbGwsIHJlbnQsIGxlYXNlLCBzdWJsaWNlbnNlLCBvciBvdGhlcndpc2UgdHJhbnNmZXIgcmlnaHRzIHRvIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZTsgKGl2KSByZW1vdmUgb3IgYWx0ZXIgYW55IHRyYWRlbWFyaywgbG9nbywgY29weXJpZ2h0IG9yIG90aGVyIHByb3ByaWV0YXJ5IG5vdGljZXMsIGxlZ2VuZHMsIHN5bWJvbHMgb3IgbGFiZWxzIGluIHRoZSBQcm9kdWN0OyBvciAodikgcHVibGlzaCBhbnkgcmVzdWx0cyBvZiBiZW5jaG1hcmsgdGVzdHMgcnVuIG9uIHRoZSBQcm9kdWN0IHRvIGEgdGhpcmQgcGFydHkgd2l0aG91dCBFTUJMRU0ncyBwcmlvciB3cml0dGVuIGNvbnNlbnQuCisKK0ZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0IHRoZXJlIGlzIGEgbm90ZSBvbiB0aGUgYWJvdmU6IEN1c3RvbWl6YXRpb25zIG9mIHRoZSBkaXN0cmlidXRlZCBBUlAvd0FSUCBjb2RlIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIG1vZGlmaWNhdGlvbnMgb2YgdGhlIEFSUC93QVJQIGMtc2hlbGwsIHRjbC90ayBhbmQvb3IgcHl0aG9uIHNjcmlwdHMsIGFzIHdlbGwgYXMgd3JpdGluZyBhZGRpdGlvbmFsIHNjcmlwdHMgb3IgYW55IG90aGVyIGtpbmQgb2YgY29tcHV0ZXIgY29kZSB0aGF0IHVzZSBwYXJ0cyBvciB0aGUgd2hvbGUgb2YgdGhlIGxpY2Vuc2VkIHNvZnR3YXJlIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHNvLWNhbGxlZCAic29mdHdhcmUgcGlwZWxpbmVzIikgYXJlIGV4cGxpY2l0bHkgY29uc2lkZXJlZCAnZGVyaXZhdGl2ZSB3b3JrJyBhcyBkZWZpbmVkIGluIChpKS4gTElDRU5TRUUgaXMgbm90IHBlcm1pdHRlZCB0byBjYXJyeSBvdXQgc3VjaCAnZGVyaXZhdGl2ZSB3b3JrJyBmb3IgZWl0aGVyIGxvY2FsIHVzZSBvciByZWRpc3RyaWJ1dGlvbiBvZiBjaGFuZ2VkIGNvZGUgd2l0aG91dCB0aGUgd3JpdHRlbiBjb25zZW50IG9mIHRoZSBhdXRob3JzIGFuZCBFTUJMRU0uCisKKzguIFJlcHJlc2VudGF0aW9ucyBvZiBFTUJMRU0gdG8gTElDRU5TRUUKK0VNQkxFTSByZXByZXNlbnRzIHRvIExJQ0VOU0VFIHRoYXQgKGkpIEVNQkxFTSBoYXMgdGhlIHJpZ2h0IHRvIGdyYW50IHRoZSBMaWNlbnNlIG9uIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBhbmQgdG8gZW50ZXIgaW50byB0aGlzIGFncmVlbWVudCBhbmQgKGlpKSBFTUJMRU0gdW5kZXJ0YWtlcyB0byB1c2UgYmVzdCBlZmZvcnRzIHRvIGNvb3BlcmF0ZSB3aXRoIGFuZCBhc3Npc3QgTElDRU5TRUUsIGF0IExJQ0VOU0VFJ3MgZXhwZW5zZSwgaW4gZGVmZW5kaW5nIGl0c2VsZiBhZ2FpbnN0IGFueSBhY3Rpb24gYmFzZWQgb24gdGhlIGFsbGVnZWQgaW5mcmluZ2VtZW50IG9mIGFueSB0aGlyZCBwYXJ0eSBwYXRlbnQsIGNvcHlyaWdodCBvciB0cmFkZSBzZWNyZXQgcmlnaHRzIHJlc3VsdGluZyBmcm9tIG9yIHJlbGF0aW5nIHRvIHRoZSB1c2Ugb3IgbGljZW5zaW5nIG9mIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBieSBMSUNFTlNFRS4KKworOS4gSW5kZW1uaXR5IGFuZCBEaXNjbGFpbWVyIG9mIFdhcnJhbnRpZXMKK0V4Y2VwdCBhcyBleHByZXNzbHkgc2V0IGZvcnRoIGluIHRoaXMgYWdyZWVtZW50LCBFTUJMRU0gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIG9yIHdhcnJhbnRpZXMsIGV4cHJlc3NlZCBvciBpbXBsaWVkLgorCitUaGUgTGljZW5zZWQgU29mdHdhcmUgaXMgcHJvdmlkZWQgZnJlZSBvZiBjaGFyZ2UsIGFuZCwgdGhlcmVmb3JlLCBvbiBhbiAiYXMgaXMiIGJhc2lzLCB3aXRob3V0IHdhcnJhbnR5IG9mIGFueSBraW5kLCBleHByZXNzZWQgb3IgaW1wbGllZCwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgd2FycmFudGllcyB0aGF0IGl0IGlzIGZyZWUgb2YgZGVmZWN0cywgdmlydXMgZnJlZSwgYWJsZSB0byBvcGVyYXRlIG9uIGFuIHVuaW50ZXJydXB0ZWQgYmFzaXMsIG1lcmNoYW50YWJsZSwgZml0IGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZSBvciBub24taW50ZXJmZXJpbmcuIFRoZSBlbnRpcmUgcmlzayBhcyB0byB0aGUgcXVhbGl0eSBhbmQgcGVyZm9ybWFuY2Ugb2YgdGhlIExpY2Vuc2VkIFNvZnR3YXJlIGlzIGJvcm5lIGJ5IExJQ0VOU0VFLgorCitCeSB3YXkgb2YgZXhhbXBsZSwgYnV0IG5vdCBsaW1pdGF0aW9uLCBFTUJMRU0gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIG9yIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRhYmlsaXR5IG9yIGZpdG5lc3MgZm9yIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBhbmQgYW55IHBhcnRpY3VsYXIgYXBwbGljYXRpb24gb3IgdGhhdCB0aGUgdXNlIG9mIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSB3aWxsIG5vdCBpbmZyaW5nZSBhbnkgcGF0ZW50cywgY29weXJpZ2h0cyBvciB0cmFkZW1hcmtzIG9yIG90aGVyIHJpZ2h0cyBvZiB0aGlyZCBwYXJ0aWVzLiBUaGUgZW50aXJlIHJpc2sgYXMgdG8gdGhlIHF1YWxpdHkgYW5kIHBlcmZvcm1hbmNlIG9mIHRoZSBwcm9kdWN0IGlzIGJvcm5lIGJ5IExJQ0VOU0VFLiBFTUJMRU0gc2hhbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGxpYWJpbGl0eSBvciBkYW1hZ2VzIHdpdGggcmVzcGVjdCB0byBhbnkgY2xhaW0gYnkgTElDRU5TRUUgb3IgYW55IHRoaXJkIHBhcnR5IG9uIGFjY291bnQgb2YsIG9yIGFyaXNpbmcgZnJvbSB0aGUgbGljZW5zZSBvciB1c2Ugb2YgdGhlIFNvZnR3YXJlLgorCitTaG91bGQgdGhlIExpY2Vuc2VkIFNvZnR3YXJlIHByb3ZlIGRlZmVjdGl2ZSBpbiBhbnkgcmVzcGVjdCwgTElDRU5TRUUgYW5kIG5vdCBFTUJMLCBOS0kgb3IgdGhlaXIgYWZmaWxpYXRlcyBzaG91bGQgYXNzdW1lIHRoZSBlbnRpcmUgY29zdCBvZiBhbnkgc2VydmljZSBhbmQgcmVwYWlyLiBUaGlzIGRpc2NsYWltZXIgb2Ygd2FycmFudHkgY29uc3RpdHV0ZXMgYW4gZXNzZW50aWFsIHBhcnQgb2YgdGhpcyBhZ3JlZW1lbnQuIE5vIHVzZSBvZiB0aGUgTGljZW5zZWQgU29mdHdhcmUgaXMgYXV0aG9yaXplZCBoZXJldW5kZXIgZXhjZXB0IHVuZGVyIHRoaXMgZGlzY2xhaW1lci4KKworSW4gbm8gZXZlbnQgd2lsbCBFTUJMLCBOS0kgb3IgdGhlaXIgYWZmaWxpYXRlcyBiZSBsaWFibGUgZm9yIGFueSBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBvdXQgb2YgdGhlIHVzZSBvZiBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZSBwcm9kdWN0LCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgZGFtYWdlcyBmb3IgbG9zdCBwcm9maXRzLCBsb3NzIG9mIGdvb2R3aWxsLCB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbCBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzLCBldmVuIGlmIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IHRoZXJlb2YsIGFuZCByZWdhcmRsZXNzIG9mIHRoZSBsZWdhbCBvciBlcXVpdGFibGUgdGhlb3J5IChjb250cmFjdCwgdG9ydCBvciBvdGhlcndpc2UpIHVwb24gd2hpY2ggdGhlIGNsYWltIGlzIGJhc2VkLgorCitMSUNFTlNFRSBoYXMgbm8gcmlnaHQgdG8gY2xhaW0gYW55IGluZGVtbmlmaWNhdGlvbiBiYXNlZCBvbiBMSUNFTlNFRSdzIHVzZSBvZiBMaWNlbnNlZCBTb2Z0d2FyZS4KKworMTAuIFByb21vdGlvbmFsIEFkdmVydGlzaW5nICYgUmVmZXJlbmNlcworTElDRU5TRUUgbWF5IG5vdCB1c2UgdGhlIG5hbWUgIkFSUC93QVJQIiBpbiBpdHMgcHJvbW90aW9uYWwgYWR2ZXJ0aXNpbmcsIHByb2R1Y3QgbGl0ZXJhdHVyZSwgYW5kIG90aGVyIHNpbWlsYXIgcHJvbW90aW9uYWwgbWF0ZXJpYWxzIHRvIGJlIGRpc3NlbWluYXRlZCB0byB0aGUgcHVibGljIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YuIExJQ0VOU0VFIGFncmVlcyBub3QgdG8gaWRlbnRpZnkgRU1CTCBhbmQvb3IgTktJIGluIGFueSBwcm9tb3Rpb25hbCBhZHZlcnRpc2luZyBvciBvdGhlciBwcm9tb3Rpb25hbCBtYXRlcmlhbHMgdG8gYmUgZGlzc2VtaW5hdGVkIHRvIHRoZSBwdWJsaWMsIG9yIGFueSBwb3J0aW9uIHRoZXJlb2Ygd2l0aG91dCBFTUJMRU0ncyBwcmlvciB3cml0dGVuIGNvbnNlbnQuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBzY2llbnRpZmljIGxpdGVyYXR1cmUgaXMgbm90IGRlZmluZWQgYXMgYWR2ZXJ0aXNpbmcgYW5kIHByb21vdGlvbmFsIG1hdGVyaWFscy4KKworTElDRU5TRUUgYWdyZWVzIHRvIGNpdGUgdGhlIHVzZSBvZiB0aGUgTGljZW5zZWQgU29mdHdhcmUgb24gYWxsIHJlbGF0ZWQgc2NpZW50aWZpYyBwdWJsaWNhdGlvbnMsIHBvc3RlcnMsIGdyYW50IGFwcGxpY2F0aW9ucywgaW5zdGl0dXRpb25hbCByZXBvcnRzIG9yIGJyb2NodXJlcy4gTElDRU5TRUUgYWdyZWVzIGZ1cnRoZXIgdGhhdCBhbnkgcmVmZXJlbmNlIHRvIHRoZSBzb2Z0d2FyZSBmb3IgY3J5c3RhbGxvZ3JhcGhpYyBjb21wdXRhdGlvbnMgd2lsbCBjaXRlIG9uZSBvciBtb3JlIHB1YmxpY2F0aW9ucyBhcyBzZXQgZm9ydGggaW4gdGhlIG1hbnVhbCBhbmQgaW4gYWdyZWVtZW50IHdpdGggY29tbW9uIHNjaWVudGlmaWMgcHJhY3RpY2UuIEVNQkxFTSwgRU1CTCBvciBOS0kgc2hhbGwgbm90IHVzZSBMSUNFTlNFRSdzIG5hbWUgaW4gcHVibGljaXR5IG9yIGFkdmVydGlzaW5nIGludm9sdmluZyB0aGlzIEFncmVlbWVudCBvciBvdGhlcndpc2Ugd2l0aG91dCBMSUNFTlNFRSdzIHByaW9yIHdyaXR0ZW4gY29uc2VudCB3aGljaCBtYXkgYmUgd2l0aGhlbGQgYXQgTElDRU5TRUUncyBzb2xlIGRpc2NyZXRpb24uCisKKzExLiBUZXJtCitUaGlzIEFncmVlbWVudCBhbmQgdGhlIGxpY2Vuc2UgcmlnaHRzIGdyYW50ZWQgaGVyZWluIHNoYWxsIGJlY29tZSBlZmZlY3RpdmUgYXMgb2YgdGhlIGRhdGUgdGhpcyBBZ3JlZW1lbnQgaXMgZXhlY3V0ZWQgYnkgYm90aCBwYXJ0aWVzIGFuZCBzaGFsbCBiZSBwZXJwZXR1YWwgdW5sZXNzIHRlcm1pbmF0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgU2VjdGlvbi4KKworRU1CTEVNIG1heSB0ZXJtaW5hdGUgdGhpcyBBZ3JlZW1lbnQgYXQgYW55IHRpbWUuCisKK0VpdGhlciBwYXJ0eSBtYXkgdGVybWluYXRlIHRoaXMgQWdyZWVtZW50IGF0IGFueSB0aW1lIGVmZmVjdGl2ZSB1cG9uIHRoZSBvdGhlciBwYXJ0eSdzIGJyZWFjaCBvZiBhbnkgYWdyZWVtZW50LCBjb3ZlbmFudCwgb3IgcmVwcmVzZW50YXRpb24gbWFkZSBpbiB0aGlzIEFncmVlbWVudCwgc3VjaCBicmVhY2ggcmVtYWluaW5nIHVuY29ycmVjdGVkIHNpeHR5ICg2MCkgZGF5cyBhZnRlciB3cml0dGVuIG5vdGljZSB0aGVyZW9mLgorCitMSUNFTlNFRSBzaGFsbCBoYXZlIHRoZSByaWdodCwgYXQgYW55IHRpbWUsIHRvIHRlcm1pbmF0ZSB0aGlzIEFncmVlbWVudCB3aXRob3V0IGNhdXNlIGJ5IHdyaXR0ZW4gbm90aWNlIHRvIEVNQkxFTSBzcGVjaWZ5aW5nIHRoZSBkYXRlIG9mIHRlcm1pbmF0aW9uLgorCitVcG9uIHRlcm1pbmF0aW9uLCBMSUNFTlNFRSBzaGFsbCBkZXN0cm95IGFsbCBmdWxsIGFuZCBwYXJ0aWFsIGNvcGllcyBvZiB0aGUgTGljZW5zZWQgU29mdHdhcmUuCisKKzEyLiBHb3Zlcm5pbmcgTGF3CitUaGlzIEFncmVlbWVudCBzaGFsbCBiZSBjb25zdHJ1ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBsYXdzIG9mIEdlcm1hbnkuIFBsYWNlIG9mIEp1cmlzZGljdGlvbiBzaGFsbCBiZSBNYW5uaGVpbS4KKworMTMuIEdlbmVyYWwKK1RoZSBwYXJ0aWVzIGFncmVlIHRoYXQgdGhpcyBBZ3JlZW1lbnQgaXMgdGhlIGNvbXBsZXRlIGFuZCBleGNsdXNpdmUgYWdyZWVtZW50IGFtb25nIHRoZSBwYXJ0aWVzIGFuZCBzdXBlcnNlZGVzIGFsbCBwcm9wb3NhbHMgYW5kIHByaW9yIGFncmVlbWVudHMgd2hldGhlciB3cml0dGVuIG9yIG9yYWwsIGFuZCBhbGwgb3RoZXIgY29tbXVuaWNhdGlvbnMgYW1vbmcgdGhlIHBhcnRpZXMgcmVsYXRpbmcgdG8gdGhlIHN1YmplY3QgbWF0dGVyIG9mIHRoaXMgQWdyZWVtZW50LiBUaGlzIEFncmVlbWVudCBjYW5ub3QgYmUgbW9kaWZpZWQgZXhjZXB0IGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSBib3RoIHBhcnRpZXMuIEZhaWx1cmUgYnkgZWl0aGVyIHBhcnR5IGF0IGFueSB0aW1lIHRvIGVuZm9yY2UgYW55IG9mIHRoZSBwcm92aXNpb25zIG9mIHRoaXMgQWdyZWVtZW50IHNoYWxsIG5vdCBjb25zdGl0dXRlIGEgd2FpdmVyIGJ5IHN1Y2ggcGFydHkgb2Ygc3VjaCBwcm92aXNpb24gbm9yIGluIGFueSB3YXkgYWZmZWN0IHRoZSB2YWxpZGl0eSBvZiB0aGlzIEFncmVlbWVudC4KKworVGhlIGludmFsaWRpdHkgb2Ygc2luZ3VsYXIgcHJvdmlzaW9ucyBkb2VzIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9mIHRoZSBlbnRpcmUgdW5kZXJzdGFuZGluZy4gVGhlIHBhcnRpZXMgYXJlIG9ibGlnYXRlZCwgaG93ZXZlciwgdG8gcmVwbGFjZSB0aGUgaW52YWxpZCBwcm92aXNpb25zIGJ5IGEgcmVndWxhdGlvbiwgd2hpY2ggY29tZXMgY2xvc2VzdCB0byB0aGUgZWNvbm9taWMgaW50ZW50IG9mIHRoZSBpbnZhbGlkIHByb3Zpc2lvbi4gVGhlIHNhbWUgc2hhbGwgYXBwbHkgbXV0YXRpcyBtdXRhbmRpcyBpbiBjYXNlIG9mIGEgZ2FwLgorCitJTiBXSVRORVNTIFdIRVJFT0YsIHRoZSBMSUNFTlNFRSBoZXJldG8gaGFzIGNhdXNlZCB0aGlzIEFncmVlbWVudCB0byBiZSBkdWx5IGV4ZWN1dGVkIG9uIHRoZSBkYXRlIG9mIHRoZSBkb3dubG9hZCBvZiB0aGUgc29mdHdhcmUgYW5kIGJ5IGFjY2VwdGluZyB0aGUgbGljZW5zZSBjb25kaXRpb25zIGJ5IHByZXNzaW5nIHRoZSBBY2NlcHRhbmNlIGJ1dHRvbi4KKworSSBoYXZlIHJlYWQgdGhpcyBMaWNlbnNlIEFncmVlbWVudCBhbmQgSSBhZ3JlZSB0byB1cGhvbGQgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgbGljZW5zZS4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9saWNlbnNlcy9BcnBoaWMgYi9saWNlbnNlcy9BcnBoaWMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzg4OTYzNgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0FycGhpYwpAQCAtMCwwICsxLDU5IEBACitBUlBISUMgUFVCTElDIExJQ0VOU0UKKworQ29weXJpZ2h0IChDKSAxOTk5IEFycGhpYyBUZWNobm9sb2d5IENvLiwgTHRkLgorMTFGbC4gTm8uMTY4LCBZdW5nIENoaSBSZC4sIFRhaXBlaSwgMTEwIFRhaXdhbgorQWxsIHJpZ2h0cyByZXNlcnZlZCBleGNlcHQgYXMgc3BlY2lmaWVkIGJlbG93LgorCitFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgZm9yYmlkZGVuLgorCitQcmVhbWJsZQorCisgICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gQnkgY29udHJhc3QsIHRoZSBBUlBISUMgUFVCTElDIExJQ0VOU0Ugc3BlY2lmaWNhbGx5IHBlcm1pdHMgYW5kIGVuY291cmFnZXMgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlLCBwcm92aWRlZCB0aGF0IHlvdSBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQgd2UgZ2F2ZSB5b3UgYW5kIG1ha2Ugc3VyZSB0aGV5IGNhbiBnZXQgdGhlIG1vZGlmaWNhdGlvbnMgb2YgdGhpcyBzb2Z0d2FyZS4KKworTGVnYWwgVGVybXMKKworMC4gRGVmaW5pdGlvbnM6CisgICBUaHJvdWdob3V0IHRoaXMgTGljZW5zZSwgIkZvbnQiIG1lYW5zIHRoZSBUcnVlVHlwZSBmb250cyAiQVIgUEwgTWluZ3RpMkwgQmlnNSIsICJBUiBQTCBLYWl0aU0gQmlnNSIgKEJJRy01IGNoYXJhY3RlciBzZXQpIGFuZCAiQVIgUEwgU3VuZ3RpTCBHQiIsICJBUiBQTCBLYWl0aU0gR0IiIChHQiBjaGFyYWN0ZXIgc2V0KSB3aGljaCBhcmUgb3JpZ2luYWxseSBkaXN0cmlidXRlZCBieSBBcnBoaWMsIGFuZCB0aGUgZGVyaXZhdGl2ZXMgb2YgdGhvc2UgZm9udHMgY3JlYXRlZCB0aHJvdWdoIGFueSBtb2RpZmljYXRpb24gaW5jbHVkaW5nIG1vZGlmeWluZyBnbHlwaCwgcmVvcmRlcmluZyBnbHlwaCwgY29udmVydGluZyBmb3JtYXQsIGNoYW5naW5nIGZvbnQgbmFtZSwgb3IgYWRkaW5nL2RlbGV0aW5nIHNvbWUgY2hhcmFjdGVycyBpbi9mcm9tIGdseXBoIHRhYmxlLgorCisgICAiUEwiIG1lYW5zICJQdWJsaWMgTGljZW5zZSIuCisKKyAgICJDb3B5cmlnaHQgSG9sZGVyIiBtZWFucyB3aG9ldmVyIGlzIG5hbWVkIGluIHRoZSBjb3B5cmlnaHQgb3IgY29weXJpZ2h0cyBmb3IgdGhlIEZvbnQuCisKKyAgICJZb3UiIG1lYW5zIHRoZSBsaWNlbnNlZSwgb3IgcGVyc29uIGNvcHlpbmcsIHJlZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZyB0aGUgRm9udC4KKworICAgIkZyZWVseSBBdmFpbGFibGUiIG1lYW5zIHRoYXQgeW91IGhhdmUgdGhlIGZyZWVkb20gdG8gY29weSBvciBtb2RpZnkgdGhlIEZvbnQgYXMgd2VsbCBhcyByZWRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBGb250IHVuZGVyIHRoZSBzYW1lIGNvbmRpdGlvbnMgeW91IHJlY2VpdmVkLCBub3QgcHJpY2UuIElmIHlvdSB3aXNoLCB5b3UgY2FuIGNoYXJnZSBmb3IgdGhpcyBzZXJ2aWNlLgorCisxLiBDb3B5aW5nICYgRGlzdHJpYnV0aW9uCisgICBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMgRm9udCBpbiBhbnkgbWVkaXVtLCB3aXRob3V0IHJlc3RyaWN0aW9uLCBwcm92aWRlZCB0aGF0IHlvdSByZXRhaW4gdGhpcyBsaWNlbnNlIGZpbGUgKEFSUEhJQ1BMLlRYVCkgdW5hbHRlcmVkIGluIGFsbCBjb3BpZXMuCisKKzIuIE1vZGlmaWNhdGlvbgorICAgWW91IG1heSBvdGhlcndpc2UgbW9kaWZ5IHlvdXIgY29weSBvZiB0aGlzIEZvbnQgaW4gYW55IHdheSwgaW5jbHVkaW5nIG1vZGlmeWluZyBnbHlwaCwgcmVvcmRlcmluZyBnbHlwaCwgY29udmVydGluZyBmb3JtYXQsIGNoYW5naW5nIGZvbnQgbmFtZSwgb3IgYWRkaW5nL2RlbGV0aW5nIHNvbWUgY2hhcmFjdGVycyBpbi9mcm9tIGdseXBoIHRhYmxlLCBhbmQgY29weSBhbmQgZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMSBhYm92ZSwgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgYSkgWW91IG11c3QgaW5zZXJ0IGEgcHJvbWluZW50IG5vdGljZSBpbiBlYWNoIG1vZGlmaWVkIGZpbGUgc3RhdGluZyBob3cgYW5kIHdoZW4geW91IGNoYW5nZWQgdGhhdCBmaWxlLgorCisgICBiKSBZb3UgbXVzdCBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBGcmVlbHkgQXZhaWxhYmxlIGFzIGEgd2hvbGUgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgc3VjaCBhcyBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weSB0aGUgbW9kaWZpY2F0aW9ucyBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgb3IgZGlzdHJpYnV0aW5nIHRoZSBtb2RpZmljYXRpb25zIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgorCisgICBjKSBJZiB0aGUgbW9kaWZpZWQgZm9udHMgbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseSB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4gYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZSBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBGb250IHVuZGVyIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgIFRoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiBJZiBpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBGb250LCBhbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4gdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlIHNlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gVGhlcmVmb3JlLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIEZvbnQgd2l0aCB0aGUgRm9udCBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlciB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCiszLiBDb25kaXRpb24gU3Vic2VxdWVudAorICAgWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBGb250IGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiBBbnkgYXR0ZW1wdCBvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIEZvbnQgd2lsbCBhdXRvbWF0aWNhbGx5IHJldHJvYWN0aXZlbHkgdm9pZCB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzIG9yIHJpZ2h0cyBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2Ugd2lsbCBrZWVwIHRoZWlyIGxpY2Vuc2VzIHZhbGlkIHNvIGxvbmcgYXMgc3VjaCBwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKzQuIEFjY2VwdGFuY2UKKyAgIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdCBzaWduZWQgaXQuIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIEZvbnQuIFRoZXNlIGFjdGlvbnMgYXJlIHByb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gVGhlcmVmb3JlLCBieSBjb3B5aW5nLCBtb2RpZnlpbmcsIHN1YmxpY2Vuc2luZyBvciBkaXN0cmlidXRpbmcgdGhlIEZvbnQsIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIGFuZCBhbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLgorCis1LiBBdXRvbWF0aWMgUmVjZWlwdAorICAgRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIEZvbnQsIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUgb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIEZvbnQgc3ViamVjdCB0byB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4gWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8gdGhpcyBMaWNlbnNlLiAKKworNi4gQ29udHJhZGljdGlvbgorICAgSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLCBjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yIG90aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QgZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gSWYgeW91IGNhbm5vdCBkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UgbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBGb250IGF0IGFsbC4gRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50IGxpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIEZvbnQgYnkgYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuIHRoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8gcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgRm9udC4KKworICAgSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIgY2lyY3Vtc3RhbmNlcy4gCisKKzcuIE5PIFdBUlJBTlRZCisgICBCRUNBVVNFIFRIRSBGT05UIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIEZPTlQsIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiBFWENFUFQgV0hFTiBPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SIE9USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgRk9OVCAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIEZPTlQgSVMgV0lUSCBZT1UuIFNIT1VMRCBUSEUgRk9OVCBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgorCis4LiBEQU1BR0VTIFdBSVZFUgorICAgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HLCBJTiBOTyBFVkVOVCBXSUxMIEFOWSBDT1BZUklHSFRUIEhPTERFUlMsIE9SIE9USEVSIFBBUlRJRVMgV0hPIE1BWSBDT1BZLCBNT0RJRlkgT1IgUkVESVNUUklCVVRFIFRIRSBGT05UIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIENPTlNFUVVFTlRJQUwsIElOQ0lERU5UQUwsIFNQRUNJQUwgT1IgRVhFTVBMQVJZIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBGT05UIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTiksIEVWRU4gSUYgU1VDSCBIT0xERVJTIE9SIE9USEVSIFBBUlRJRVMgSEFWRSBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvQXJ0aXN0aWMgYi9saWNlbnNlcy9BcnRpc3RpYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjIyMTI0Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvQXJ0aXN0aWMKQEAgLTAsMCArMSwxMzEgQEAKKworCisKKworCQkJIFRoZSAiQXJ0aXN0aWMgTGljZW5zZSIKKworCQkJCVByZWFtYmxlCisKK1RoZSBpbnRlbnQgb2YgdGhpcyBkb2N1bWVudCBpcyB0byBzdGF0ZSB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBhCitQYWNrYWdlIG1heSBiZSBjb3BpZWQsIHN1Y2ggdGhhdCB0aGUgQ29weXJpZ2h0IEhvbGRlciBtYWludGFpbnMgc29tZQorc2VtYmxhbmNlIG9mIGFydGlzdGljIGNvbnRyb2wgb3ZlciB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhlIHBhY2thZ2UsCit3aGlsZSBnaXZpbmcgdGhlIHVzZXJzIG9mIHRoZSBwYWNrYWdlIHRoZSByaWdodCB0byB1c2UgYW5kIGRpc3RyaWJ1dGUKK3RoZSBQYWNrYWdlIGluIGEgbW9yZS1vci1sZXNzIGN1c3RvbWFyeSBmYXNoaW9uLCBwbHVzIHRoZSByaWdodCB0byBtYWtlCityZWFzb25hYmxlIG1vZGlmaWNhdGlvbnMuCisKK0RlZmluaXRpb25zOgorCisJIlBhY2thZ2UiIHJlZmVycyB0byB0aGUgY29sbGVjdGlvbiBvZiBmaWxlcyBkaXN0cmlidXRlZCBieSB0aGUKKwlDb3B5cmlnaHQgSG9sZGVyLCBhbmQgZGVyaXZhdGl2ZXMgb2YgdGhhdCBjb2xsZWN0aW9uIG9mIGZpbGVzCisJY3JlYXRlZCB0aHJvdWdoIHRleHR1YWwgbW9kaWZpY2F0aW9uLgorCisJIlN0YW5kYXJkIFZlcnNpb24iIHJlZmVycyB0byBzdWNoIGEgUGFja2FnZSBpZiBpdCBoYXMgbm90IGJlZW4KKwltb2RpZmllZCwgb3IgaGFzIGJlZW4gbW9kaWZpZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB3aXNoZXMKKwlvZiB0aGUgQ29weXJpZ2h0IEhvbGRlciBhcyBzcGVjaWZpZWQgYmVsb3cuCisKKwkiQ29weXJpZ2h0IEhvbGRlciIgaXMgd2hvZXZlciBpcyBuYW1lZCBpbiB0aGUgY29weXJpZ2h0IG9yCisJY29weXJpZ2h0cyBmb3IgdGhlIHBhY2thZ2UuCisKKwkiWW91IiBpcyB5b3UsIGlmIHlvdSdyZSB0aGlua2luZyBhYm91dCBjb3B5aW5nIG9yIGRpc3RyaWJ1dGluZworCXRoaXMgUGFja2FnZS4KKworCSJSZWFzb25hYmxlIGNvcHlpbmcgZmVlIiBpcyB3aGF0ZXZlciB5b3UgY2FuIGp1c3RpZnkgb24gdGhlCisJYmFzaXMgb2YgbWVkaWEgY29zdCwgZHVwbGljYXRpb24gY2hhcmdlcywgdGltZSBvZiBwZW9wbGUgaW52b2x2ZWQsCisJYW5kIHNvIG9uLiAgKFlvdSB3aWxsIG5vdCBiZSByZXF1aXJlZCB0byBqdXN0aWZ5IGl0IHRvIHRoZQorCUNvcHlyaWdodCBIb2xkZXIsIGJ1dCBvbmx5IHRvIHRoZSBjb21wdXRpbmcgY29tbXVuaXR5IGF0IGxhcmdlCisJYXMgYSBtYXJrZXQgdGhhdCBtdXN0IGJlYXIgdGhlIGZlZS4pCisKKwkiRnJlZWx5IEF2YWlsYWJsZSIgbWVhbnMgdGhhdCBubyBmZWUgaXMgY2hhcmdlZCBmb3IgdGhlIGl0ZW0KKwlpdHNlbGYsIHRob3VnaCB0aGVyZSBtYXkgYmUgZmVlcyBpbnZvbHZlZCBpbiBoYW5kbGluZyB0aGUgaXRlbS4KKwlJdCBhbHNvIG1lYW5zIHRoYXQgcmVjaXBpZW50cyBvZiB0aGUgaXRlbSBtYXkgcmVkaXN0cmlidXRlIGl0CisJdW5kZXIgdGhlIHNhbWUgY29uZGl0aW9ucyB0aGV5IHJlY2VpdmVkIGl0LgorCisxLiBZb3UgbWF5IG1ha2UgYW5kIGdpdmUgYXdheSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIHNvdXJjZSBmb3JtIG9mIHRoZQorU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGlzIFBhY2thZ2Ugd2l0aG91dCByZXN0cmljdGlvbiwgcHJvdmlkZWQgdGhhdCB5b3UKK2R1cGxpY2F0ZSBhbGwgb2YgdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2VzIGFuZCBhc3NvY2lhdGVkIGRpc2NsYWltZXJzLgorCisyLiBZb3UgbWF5IGFwcGx5IGJ1ZyBmaXhlcywgcG9ydGFiaWxpdHkgZml4ZXMgYW5kIG90aGVyIG1vZGlmaWNhdGlvbnMKK2Rlcml2ZWQgZnJvbSB0aGUgUHVibGljIERvbWFpbiBvciBmcm9tIHRoZSBDb3B5cmlnaHQgSG9sZGVyLiAgQSBQYWNrYWdlCittb2RpZmllZCBpbiBzdWNoIGEgd2F5IHNoYWxsIHN0aWxsIGJlIGNvbnNpZGVyZWQgdGhlIFN0YW5kYXJkIFZlcnNpb24uCisKKzMuIFlvdSBtYXkgb3RoZXJ3aXNlIG1vZGlmeSB5b3VyIGNvcHkgb2YgdGhpcyBQYWNrYWdlIGluIGFueSB3YXksIHByb3ZpZGVkCit0aGF0IHlvdSBpbnNlcnQgYSBwcm9taW5lbnQgbm90aWNlIGluIGVhY2ggY2hhbmdlZCBmaWxlIHN0YXRpbmcgaG93IGFuZAord2hlbiB5b3UgY2hhbmdlZCB0aGF0IGZpbGUsIGFuZCBwcm92aWRlZCB0aGF0IHlvdSBkbyBhdCBsZWFzdCBPTkUgb2YgdGhlCitmb2xsb3dpbmc6CisKKyAgICBhKSBwbGFjZSB5b3VyIG1vZGlmaWNhdGlvbnMgaW4gdGhlIFB1YmxpYyBEb21haW4gb3Igb3RoZXJ3aXNlIG1ha2UgdGhlbQorICAgIEZyZWVseSBBdmFpbGFibGUsIHN1Y2ggYXMgYnkgcG9zdGluZyBzYWlkIG1vZGlmaWNhdGlvbnMgdG8gVXNlbmV0IG9yCisgICAgYW4gZXF1aXZhbGVudCBtZWRpdW0sIG9yIHBsYWNpbmcgdGhlIG1vZGlmaWNhdGlvbnMgb24gYSBtYWpvciBhcmNoaXZlCisgICAgc2l0ZSBzdWNoIGFzIHV1bmV0LnV1Lm5ldCwgb3IgYnkgYWxsb3dpbmcgdGhlIENvcHlyaWdodCBIb2xkZXIgdG8gaW5jbHVkZQorICAgIHlvdXIgbW9kaWZpY2F0aW9ucyBpbiB0aGUgU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGUgUGFja2FnZS4KKworICAgIGIpIHVzZSB0aGUgbW9kaWZpZWQgUGFja2FnZSBvbmx5IHdpdGhpbiB5b3VyIGNvcnBvcmF0aW9uIG9yIG9yZ2FuaXphdGlvbi4KKworICAgIGMpIHJlbmFtZSBhbnkgbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGVzIHNvIHRoZSBuYW1lcyBkbyBub3QgY29uZmxpY3QKKyAgICB3aXRoIHN0YW5kYXJkIGV4ZWN1dGFibGVzLCB3aGljaCBtdXN0IGFsc28gYmUgcHJvdmlkZWQsIGFuZCBwcm92aWRlCisgICAgYSBzZXBhcmF0ZSBtYW51YWwgcGFnZSBmb3IgZWFjaCBub24tc3RhbmRhcmQgZXhlY3V0YWJsZSB0aGF0IGNsZWFybHkKKyAgICBkb2N1bWVudHMgaG93IGl0IGRpZmZlcnMgZnJvbSB0aGUgU3RhbmRhcmQgVmVyc2lvbi4KKworICAgIGQpIG1ha2Ugb3RoZXIgZGlzdHJpYnV0aW9uIGFycmFuZ2VtZW50cyB3aXRoIHRoZSBDb3B5cmlnaHQgSG9sZGVyLgorCis0LiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIHByb2dyYW1zIG9mIHRoaXMgUGFja2FnZSBpbiBvYmplY3QgY29kZSBvcgorZXhlY3V0YWJsZSBmb3JtLCBwcm92aWRlZCB0aGF0IHlvdSBkbyBhdCBsZWFzdCBPTkUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIGEpIGRpc3RyaWJ1dGUgYSBTdGFuZGFyZCBWZXJzaW9uIG9mIHRoZSBleGVjdXRhYmxlcyBhbmQgbGlicmFyeSBmaWxlcywKKyAgICB0b2dldGhlciB3aXRoIGluc3RydWN0aW9ucyAoaW4gdGhlIG1hbnVhbCBwYWdlIG9yIGVxdWl2YWxlbnQpIG9uIHdoZXJlCisgICAgdG8gZ2V0IHRoZSBTdGFuZGFyZCBWZXJzaW9uLgorCisgICAgYikgYWNjb21wYW55IHRoZSBkaXN0cmlidXRpb24gd2l0aCB0aGUgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2Ugb2YKKyAgICB0aGUgUGFja2FnZSB3aXRoIHlvdXIgbW9kaWZpY2F0aW9ucy4KKworICAgIGMpIGdpdmUgbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGVzIG5vbi1zdGFuZGFyZCBuYW1lcywgYW5kIGNsZWFybHkKKyAgICBkb2N1bWVudCB0aGUgZGlmZmVyZW5jZXMgaW4gbWFudWFsIHBhZ2VzIChvciBlcXVpdmFsZW50KSwgdG9nZXRoZXIKKyAgICB3aXRoIGluc3RydWN0aW9ucyBvbiB3aGVyZSB0byBnZXQgdGhlIFN0YW5kYXJkIFZlcnNpb24uCisKKyAgICBkKSBtYWtlIG90aGVyIGRpc3RyaWJ1dGlvbiBhcnJhbmdlbWVudHMgd2l0aCB0aGUgQ29weXJpZ2h0IEhvbGRlci4KKworNS4gWW91IG1heSBjaGFyZ2UgYSByZWFzb25hYmxlIGNvcHlpbmcgZmVlIGZvciBhbnkgZGlzdHJpYnV0aW9uIG9mIHRoaXMKK1BhY2thZ2UuICBZb3UgbWF5IGNoYXJnZSBhbnkgZmVlIHlvdSBjaG9vc2UgZm9yIHN1cHBvcnQgb2YgdGhpcworUGFja2FnZS4gIFlvdSBtYXkgbm90IGNoYXJnZSBhIGZlZSBmb3IgdGhpcyBQYWNrYWdlIGl0c2VsZi4gIEhvd2V2ZXIsCit5b3UgbWF5IGRpc3RyaWJ1dGUgdGhpcyBQYWNrYWdlIGluIGFnZ3JlZ2F0ZSB3aXRoIG90aGVyIChwb3NzaWJseQorY29tbWVyY2lhbCkgcHJvZ3JhbXMgYXMgcGFydCBvZiBhIGxhcmdlciAocG9zc2libHkgY29tbWVyY2lhbCkgc29mdHdhcmUKK2Rpc3RyaWJ1dGlvbiBwcm92aWRlZCB0aGF0IHlvdSBkbyBub3QgYWR2ZXJ0aXNlIHRoaXMgUGFja2FnZSBhcyBhCitwcm9kdWN0IG9mIHlvdXIgb3duLiAgWW91IG1heSBlbWJlZCB0aGlzIFBhY2thZ2UncyBpbnRlcnByZXRlciB3aXRoaW4KK2FuIGV4ZWN1dGFibGUgb2YgeW91cnMgKGJ5IGxpbmtpbmcpOyB0aGlzIHNoYWxsIGJlIGNvbnN0cnVlZCBhcyBhIG1lcmUKK2Zvcm0gb2YgYWdncmVnYXRpb24sIHByb3ZpZGVkIHRoYXQgdGhlIGNvbXBsZXRlIFN0YW5kYXJkIFZlcnNpb24gb2YgdGhlCitpbnRlcnByZXRlciBpcyBzbyBlbWJlZGRlZC4KKworNi4gVGhlIHNjcmlwdHMgYW5kIGxpYnJhcnkgZmlsZXMgc3VwcGxpZWQgYXMgaW5wdXQgdG8gb3IgcHJvZHVjZWQgYXMKK291dHB1dCBmcm9tIHRoZSBwcm9ncmFtcyBvZiB0aGlzIFBhY2thZ2UgZG8gbm90IGF1dG9tYXRpY2FsbHkgZmFsbAordW5kZXIgdGhlIGNvcHlyaWdodCBvZiB0aGlzIFBhY2thZ2UsIGJ1dCBiZWxvbmcgdG8gd2hvZXZlciBnZW5lcmF0ZWQKK3RoZW0sIGFuZCBtYXkgYmUgc29sZCBjb21tZXJjaWFsbHksIGFuZCBtYXkgYmUgYWdncmVnYXRlZCB3aXRoIHRoaXMKK1BhY2thZ2UuICBJZiBzdWNoIHNjcmlwdHMgb3IgbGlicmFyeSBmaWxlcyBhcmUgYWdncmVnYXRlZCB3aXRoIHRoaXMKK1BhY2thZ2UgdmlhIHRoZSBzby1jYWxsZWQgInVuZHVtcCIgb3IgInVuZXhlYyIgbWV0aG9kcyBvZiBwcm9kdWNpbmcgYQorYmluYXJ5IGV4ZWN1dGFibGUgaW1hZ2UsIHRoZW4gZGlzdHJpYnV0aW9uIG9mIHN1Y2ggYW4gaW1hZ2Ugc2hhbGwKK25laXRoZXIgYmUgY29uc3RydWVkIGFzIGEgZGlzdHJpYnV0aW9uIG9mIHRoaXMgUGFja2FnZSBub3Igc2hhbGwgaXQKK2ZhbGwgdW5kZXIgdGhlIHJlc3RyaWN0aW9ucyBvZiBQYXJhZ3JhcGhzIDMgYW5kIDQsIHByb3ZpZGVkIHRoYXQgeW91IGRvCitub3QgcmVwcmVzZW50IHN1Y2ggYW4gZXhlY3V0YWJsZSBpbWFnZSBhcyBhIFN0YW5kYXJkIFZlcnNpb24gb2YgdGhpcworUGFja2FnZS4KKworNy4gQyBzdWJyb3V0aW5lcyAob3IgY29tcGFyYWJseSBjb21waWxlZCBzdWJyb3V0aW5lcyBpbiBvdGhlcgorbGFuZ3VhZ2VzKSBzdXBwbGllZCBieSB5b3UgYW5kIGxpbmtlZCBpbnRvIHRoaXMgUGFja2FnZSBpbiBvcmRlciB0bworZW11bGF0ZSBzdWJyb3V0aW5lcyBhbmQgdmFyaWFibGVzIG9mIHRoZSBsYW5ndWFnZSBkZWZpbmVkIGJ5IHRoaXMKK1BhY2thZ2Ugc2hhbGwgbm90IGJlIGNvbnNpZGVyZWQgcGFydCBvZiB0aGlzIFBhY2thZ2UsIGJ1dCBhcmUgdGhlCitlcXVpdmFsZW50IG9mIGlucHV0IGFzIGluIFBhcmFncmFwaCA2LCBwcm92aWRlZCB0aGVzZSBzdWJyb3V0aW5lcyBkbworbm90IGNoYW5nZSB0aGUgbGFuZ3VhZ2UgaW4gYW55IHdheSB0aGF0IHdvdWxkIGNhdXNlIGl0IHRvIGZhaWwgdGhlCityZWdyZXNzaW9uIHRlc3RzIGZvciB0aGUgbGFuZ3VhZ2UuCisKKzguIEFnZ3JlZ2F0aW9uIG9mIHRoaXMgUGFja2FnZSB3aXRoIGEgY29tbWVyY2lhbCBkaXN0cmlidXRpb24gaXMgYWx3YXlzCitwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgdXNlIG9mIHRoaXMgUGFja2FnZSBpcyBlbWJlZGRlZDsgdGhhdCBpcywKK3doZW4gbm8gb3ZlcnQgYXR0ZW1wdCBpcyBtYWRlIHRvIG1ha2UgdGhpcyBQYWNrYWdlJ3MgaW50ZXJmYWNlcyB2aXNpYmxlCit0byB0aGUgZW5kIHVzZXIgb2YgdGhlIGNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uLiAgU3VjaCB1c2Ugc2hhbGwgbm90IGJlCitjb25zdHJ1ZWQgYXMgYSBkaXN0cmlidXRpb24gb2YgdGhpcyBQYWNrYWdlLgorCis5LiBUaGUgbmFtZSBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCitwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworMTAuIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCitJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCisJCQkJVGhlIEVuZApkaWZmIC0tZ2l0IGEvbGljZW5zZXMvQXJ0aXN0aWMtMiBiL2xpY2Vuc2VzL0FydGlzdGljLTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRiOWE0NgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0FydGlzdGljLTIKQEAgLTAsMCArMSwyMDEgQEAKKwkJICAgICAgIFRoZSBBcnRpc3RpYyBMaWNlbnNlIDIuMAorCisJICAgIENvcHlyaWdodCAoYykgMjAwMC0yMDA2LCBUaGUgUGVybCBGb3VuZGF0aW9uLgorCisgICAgIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworICAgICAgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKK1ByZWFtYmxlCisKK1RoaXMgbGljZW5zZSBlc3RhYmxpc2hlcyB0aGUgdGVybXMgdW5kZXIgd2hpY2ggYSBnaXZlbiBmcmVlIHNvZnR3YXJlCitQYWNrYWdlIG1heSBiZSBjb3BpZWQsIG1vZGlmaWVkLCBkaXN0cmlidXRlZCwgYW5kL29yIHJlZGlzdHJpYnV0ZWQuCitUaGUgaW50ZW50IGlzIHRoYXQgdGhlIENvcHlyaWdodCBIb2xkZXIgbWFpbnRhaW5zIHNvbWUgYXJ0aXN0aWMKK2NvbnRyb2wgb3ZlciB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhhdCBQYWNrYWdlIHdoaWxlIHN0aWxsIGtlZXBpbmcgdGhlCitQYWNrYWdlIGF2YWlsYWJsZSBhcyBvcGVuIHNvdXJjZSBhbmQgZnJlZSBzb2Z0d2FyZS4KKworWW91IGFyZSBhbHdheXMgcGVybWl0dGVkIHRvIG1ha2UgYXJyYW5nZW1lbnRzIHdob2xseSBvdXRzaWRlIG9mIHRoaXMKK2xpY2Vuc2UgZGlyZWN0bHkgd2l0aCB0aGUgQ29weXJpZ2h0IEhvbGRlciBvZiBhIGdpdmVuIFBhY2thZ2UuICBJZiB0aGUKK3Rlcm1zIG9mIHRoaXMgbGljZW5zZSBkbyBub3QgcGVybWl0IHRoZSBmdWxsIHVzZSB0aGF0IHlvdSBwcm9wb3NlIHRvCittYWtlIG9mIHRoZSBQYWNrYWdlLCB5b3Ugc2hvdWxkIGNvbnRhY3QgdGhlIENvcHlyaWdodCBIb2xkZXIgYW5kIHNlZWsKK2EgZGlmZmVyZW50IGxpY2Vuc2luZyBhcnJhbmdlbWVudC4gCisKK0RlZmluaXRpb25zCisKKyAgICAiQ29weXJpZ2h0IEhvbGRlciIgbWVhbnMgdGhlIGluZGl2aWR1YWwocykgb3Igb3JnYW5pemF0aW9uKHMpCisgICAgbmFtZWQgaW4gdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBlbnRpcmUgUGFja2FnZS4KKworICAgICJDb250cmlidXRvciIgbWVhbnMgYW55IHBhcnR5IHRoYXQgaGFzIGNvbnRyaWJ1dGVkIGNvZGUgb3Igb3RoZXIKKyAgICBtYXRlcmlhbCB0byB0aGUgUGFja2FnZSwgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBDb3B5cmlnaHQgSG9sZGVyJ3MKKyAgICBwcm9jZWR1cmVzLgorCisgICAgIllvdSIgYW5kICJ5b3VyIiBtZWFucyBhbnkgcGVyc29uIHdobyB3b3VsZCBsaWtlIHRvIGNvcHksCisgICAgZGlzdHJpYnV0ZSwgb3IgbW9kaWZ5IHRoZSBQYWNrYWdlLgorCisgICAgIlBhY2thZ2UiIG1lYW5zIHRoZSBjb2xsZWN0aW9uIG9mIGZpbGVzIGRpc3RyaWJ1dGVkIGJ5IHRoZQorICAgIENvcHlyaWdodCBIb2xkZXIsIGFuZCBkZXJpdmF0aXZlcyBvZiB0aGF0IGNvbGxlY3Rpb24gYW5kL29yIG9mCisgICAgdGhvc2UgZmlsZXMuIEEgZ2l2ZW4gUGFja2FnZSBtYXkgY29uc2lzdCBvZiBlaXRoZXIgdGhlIFN0YW5kYXJkCisgICAgVmVyc2lvbiwgb3IgYSBNb2RpZmllZCBWZXJzaW9uLgorCisgICAgIkRpc3RyaWJ1dGUiIG1lYW5zIHByb3ZpZGluZyBhIGNvcHkgb2YgdGhlIFBhY2thZ2Ugb3IgbWFraW5nIGl0CisgICAgYWNjZXNzaWJsZSB0byBhbnlvbmUgZWxzZSwgb3IgaW4gdGhlIGNhc2Ugb2YgYSBjb21wYW55IG9yCisgICAgb3JnYW5pemF0aW9uLCB0byBvdGhlcnMgb3V0c2lkZSBvZiB5b3VyIGNvbXBhbnkgb3Igb3JnYW5pemF0aW9uLgorCisgICAgIkRpc3RyaWJ1dG9yIEZlZSIgbWVhbnMgYW55IGZlZSB0aGF0IHlvdSBjaGFyZ2UgZm9yIERpc3RyaWJ1dGluZworICAgIHRoaXMgUGFja2FnZSBvciBwcm92aWRpbmcgc3VwcG9ydCBmb3IgdGhpcyBQYWNrYWdlIHRvIGFub3RoZXIKKyAgICBwYXJ0eS4gIEl0IGRvZXMgbm90IG1lYW4gbGljZW5zaW5nIGZlZXMuCisKKyAgICAiU3RhbmRhcmQgVmVyc2lvbiIgcmVmZXJzIHRvIHRoZSBQYWNrYWdlIGlmIGl0IGhhcyBub3QgYmVlbgorICAgIG1vZGlmaWVkLCBvciBoYXMgYmVlbiBtb2RpZmllZCBvbmx5IGluIHdheXMgZXhwbGljaXRseSByZXF1ZXN0ZWQKKyAgICBieSB0aGUgQ29weXJpZ2h0IEhvbGRlci4KKworICAgICJNb2RpZmllZCBWZXJzaW9uIiBtZWFucyB0aGUgUGFja2FnZSwgaWYgaXQgaGFzIGJlZW4gY2hhbmdlZCwgYW5kCisgICAgc3VjaCBjaGFuZ2VzIHdlcmUgbm90IGV4cGxpY2l0bHkgcmVxdWVzdGVkIGJ5IHRoZSBDb3B5cmlnaHQKKyAgICBIb2xkZXIuIAorCisgICAgIk9yaWdpbmFsIExpY2Vuc2UiIG1lYW5zIHRoaXMgQXJ0aXN0aWMgTGljZW5zZSBhcyBEaXN0cmlidXRlZCB3aXRoCisgICAgdGhlIFN0YW5kYXJkIFZlcnNpb24gb2YgdGhlIFBhY2thZ2UsIGluIGl0cyBjdXJyZW50IHZlcnNpb24gb3IgYXMKKyAgICBpdCBtYXkgYmUgbW9kaWZpZWQgYnkgVGhlIFBlcmwgRm91bmRhdGlvbiBpbiB0aGUgZnV0dXJlLgorCisgICAgIlNvdXJjZSIgZm9ybSBtZWFucyB0aGUgc291cmNlIGNvZGUsIGRvY3VtZW50YXRpb24gc291cmNlLCBhbmQKKyAgICBjb25maWd1cmF0aW9uIGZpbGVzIGZvciB0aGUgUGFja2FnZS4KKworICAgICJDb21waWxlZCIgZm9ybSBtZWFucyB0aGUgY29tcGlsZWQgYnl0ZWNvZGUsIG9iamVjdCBjb2RlLCBiaW5hcnksCisgICAgb3IgYW55IG90aGVyIGZvcm0gcmVzdWx0aW5nIGZyb20gbWVjaGFuaWNhbCB0cmFuc2Zvcm1hdGlvbiBvcgorICAgIHRyYW5zbGF0aW9uIG9mIHRoZSBTb3VyY2UgZm9ybS4KKworCitQZXJtaXNzaW9uIGZvciBVc2UgYW5kIE1vZGlmaWNhdGlvbiBXaXRob3V0IERpc3RyaWJ1dGlvbgorCisoMSkgIFlvdSBhcmUgcGVybWl0dGVkIHRvIHVzZSB0aGUgU3RhbmRhcmQgVmVyc2lvbiBhbmQgY3JlYXRlIGFuZCB1c2UKK01vZGlmaWVkIFZlcnNpb25zIGZvciBhbnkgcHVycG9zZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBwcm92aWRlZCB0aGF0Cit5b3UgZG8gbm90IERpc3RyaWJ1dGUgdGhlIE1vZGlmaWVkIFZlcnNpb24uCisKKworUGVybWlzc2lvbnMgZm9yIFJlZGlzdHJpYnV0aW9uIG9mIHRoZSBTdGFuZGFyZCBWZXJzaW9uCisKKygyKSAgWW91IG1heSBEaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgU291cmNlIGZvcm0gb2YgdGhlCitTdGFuZGFyZCBWZXJzaW9uIG9mIHRoaXMgUGFja2FnZSBpbiBhbnkgbWVkaXVtIHdpdGhvdXQgcmVzdHJpY3Rpb24sCitlaXRoZXIgZ3JhdGlzIG9yIGZvciBhIERpc3RyaWJ1dG9yIEZlZSwgcHJvdmlkZWQgdGhhdCB5b3UgZHVwbGljYXRlCithbGwgb2YgdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2VzIGFuZCBhc3NvY2lhdGVkIGRpc2NsYWltZXJzLiAgQXQKK3lvdXIgZGlzY3JldGlvbiwgc3VjaCB2ZXJiYXRpbSBjb3BpZXMgbWF5IG9yIG1heSBub3QgaW5jbHVkZSBhCitDb21waWxlZCBmb3JtIG9mIHRoZSBQYWNrYWdlLgorCisoMykgIFlvdSBtYXkgYXBwbHkgYW55IGJ1ZyBmaXhlcywgcG9ydGFiaWxpdHkgY2hhbmdlcywgYW5kIG90aGVyCittb2RpZmljYXRpb25zIG1hZGUgYXZhaWxhYmxlIGZyb20gdGhlIENvcHlyaWdodCBIb2xkZXIuICBUaGUgcmVzdWx0aW5nCitQYWNrYWdlIHdpbGwgc3RpbGwgYmUgY29uc2lkZXJlZCB0aGUgU3RhbmRhcmQgVmVyc2lvbiwgYW5kIGFzIHN1Y2gKK3dpbGwgYmUgc3ViamVjdCB0byB0aGUgT3JpZ2luYWwgTGljZW5zZS4KKworCitEaXN0cmlidXRpb24gb2YgTW9kaWZpZWQgVmVyc2lvbnMgb2YgdGhlIFBhY2thZ2UgYXMgU291cmNlIAorCisoNCkgIFlvdSBtYXkgRGlzdHJpYnV0ZSB5b3VyIE1vZGlmaWVkIFZlcnNpb24gYXMgU291cmNlIChlaXRoZXIgZ3JhdGlzCitvciBmb3IgYSBEaXN0cmlidXRvciBGZWUsIGFuZCB3aXRoIG9yIHdpdGhvdXQgYSBDb21waWxlZCBmb3JtIG9mIHRoZQorTW9kaWZpZWQgVmVyc2lvbikgcHJvdmlkZWQgdGhhdCB5b3UgY2xlYXJseSBkb2N1bWVudCBob3cgaXQgZGlmZmVycworZnJvbSB0aGUgU3RhbmRhcmQgVmVyc2lvbiwgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIGRvY3VtZW50aW5nCithbnkgbm9uLXN0YW5kYXJkIGZlYXR1cmVzLCBleGVjdXRhYmxlcywgb3IgbW9kdWxlcywgYW5kIHByb3ZpZGVkIHRoYXQKK3lvdSBkbyBhdCBsZWFzdCBPTkUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIChhKSAgbWFrZSB0aGUgTW9kaWZpZWQgVmVyc2lvbiBhdmFpbGFibGUgdG8gdGhlIENvcHlyaWdodCBIb2xkZXIKKyAgICBvZiB0aGUgU3RhbmRhcmQgVmVyc2lvbiwgdW5kZXIgdGhlIE9yaWdpbmFsIExpY2Vuc2UsIHNvIHRoYXQgdGhlCisgICAgQ29weXJpZ2h0IEhvbGRlciBtYXkgaW5jbHVkZSB5b3VyIG1vZGlmaWNhdGlvbnMgaW4gdGhlIFN0YW5kYXJkCisgICAgVmVyc2lvbi4KKworICAgIChiKSAgZW5zdXJlIHRoYXQgaW5zdGFsbGF0aW9uIG9mIHlvdXIgTW9kaWZpZWQgVmVyc2lvbiBkb2VzIG5vdAorICAgIHByZXZlbnQgdGhlIHVzZXIgaW5zdGFsbGluZyBvciBydW5uaW5nIHRoZSBTdGFuZGFyZCBWZXJzaW9uLiBJbgorICAgIGFkZGl0aW9uLCB0aGUgTW9kaWZpZWQgVmVyc2lvbiBtdXN0IGJlYXIgYSBuYW1lIHRoYXQgaXMgZGlmZmVyZW50CisgICAgZnJvbSB0aGUgbmFtZSBvZiB0aGUgU3RhbmRhcmQgVmVyc2lvbi4KKworICAgIChjKSAgYWxsb3cgYW55b25lIHdobyByZWNlaXZlcyBhIGNvcHkgb2YgdGhlIE1vZGlmaWVkIFZlcnNpb24gdG8KKyAgICBtYWtlIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgTW9kaWZpZWQgVmVyc2lvbiBhdmFpbGFibGUgdG8gb3RoZXJzCisgICAgdW5kZXIKKwkJCisJKGkpICB0aGUgT3JpZ2luYWwgTGljZW5zZSBvcgorCisJKGlpKSAgYSBsaWNlbnNlIHRoYXQgcGVybWl0cyB0aGUgbGljZW5zZWUgdG8gZnJlZWx5IGNvcHksCisJbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlIE1vZGlmaWVkIFZlcnNpb24gdXNpbmcgdGhlIHNhbWUKKwlsaWNlbnNpbmcgdGVybXMgdGhhdCBhcHBseSB0byB0aGUgY29weSB0aGF0IHRoZSBsaWNlbnNlZQorCXJlY2VpdmVkLCBhbmQgcmVxdWlyZXMgdGhhdCB0aGUgU291cmNlIGZvcm0gb2YgdGhlIE1vZGlmaWVkCisJVmVyc2lvbiwgYW5kIG9mIGFueSB3b3JrcyBkZXJpdmVkIGZyb20gaXQsIGJlIG1hZGUgZnJlZWx5CisJYXZhaWxhYmxlIGluIHRoYXQgbGljZW5zZSBmZWVzIGFyZSBwcm9oaWJpdGVkIGJ1dCBEaXN0cmlidXRvcgorCUZlZXMgYXJlIGFsbG93ZWQuCisKKworRGlzdHJpYnV0aW9uIG9mIENvbXBpbGVkIEZvcm1zIG9mIHRoZSBTdGFuZGFyZCBWZXJzaW9uIAorb3IgTW9kaWZpZWQgVmVyc2lvbnMgd2l0aG91dCB0aGUgU291cmNlCisKKyg1KSAgWW91IG1heSBEaXN0cmlidXRlIENvbXBpbGVkIGZvcm1zIG9mIHRoZSBTdGFuZGFyZCBWZXJzaW9uIHdpdGhvdXQKK3RoZSBTb3VyY2UsIHByb3ZpZGVkIHRoYXQgeW91IGluY2x1ZGUgY29tcGxldGUgaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0bworZ2V0IHRoZSBTb3VyY2Ugb2YgdGhlIFN0YW5kYXJkIFZlcnNpb24uICBTdWNoIGluc3RydWN0aW9ucyBtdXN0IGJlCit2YWxpZCBhdCB0aGUgdGltZSBvZiB5b3VyIGRpc3RyaWJ1dGlvbi4gIElmIHRoZXNlIGluc3RydWN0aW9ucywgYXQgYW55Cit0aW1lIHdoaWxlIHlvdSBhcmUgY2Fycnlpbmcgb3V0IHN1Y2ggZGlzdHJpYnV0aW9uLCBiZWNvbWUgaW52YWxpZCwgeW91CittdXN0IHByb3ZpZGUgbmV3IGluc3RydWN0aW9ucyBvbiBkZW1hbmQgb3IgY2Vhc2UgZnVydGhlciBkaXN0cmlidXRpb24uCitJZiB5b3UgcHJvdmlkZSB2YWxpZCBpbnN0cnVjdGlvbnMgb3IgY2Vhc2UgZGlzdHJpYnV0aW9uIHdpdGhpbiB0aGlydHkKK2RheXMgYWZ0ZXIgeW91IGJlY29tZSBhd2FyZSB0aGF0IHRoZSBpbnN0cnVjdGlvbnMgYXJlIGludmFsaWQsIHRoZW4KK3lvdSBkbyBub3QgZm9yZmVpdCBhbnkgb2YgeW91ciByaWdodHMgdW5kZXIgdGhpcyBsaWNlbnNlLgorCisoNikgIFlvdSBtYXkgRGlzdHJpYnV0ZSBhIE1vZGlmaWVkIFZlcnNpb24gaW4gQ29tcGlsZWQgZm9ybSB3aXRob3V0Cit0aGUgU291cmNlLCBwcm92aWRlZCB0aGF0IHlvdSBjb21wbHkgd2l0aCBTZWN0aW9uIDQgd2l0aCByZXNwZWN0IHRvCit0aGUgU291cmNlIG9mIHRoZSBNb2RpZmllZCBWZXJzaW9uLgorCisKK0FnZ3JlZ2F0aW5nIG9yIExpbmtpbmcgdGhlIFBhY2thZ2UgCisKKyg3KSAgWW91IG1heSBhZ2dyZWdhdGUgdGhlIFBhY2thZ2UgKGVpdGhlciB0aGUgU3RhbmRhcmQgVmVyc2lvbiBvcgorTW9kaWZpZWQgVmVyc2lvbikgd2l0aCBvdGhlciBwYWNrYWdlcyBhbmQgRGlzdHJpYnV0ZSB0aGUgcmVzdWx0aW5nCithZ2dyZWdhdGlvbiBwcm92aWRlZCB0aGF0IHlvdSBkbyBub3QgY2hhcmdlIGEgbGljZW5zaW5nIGZlZSBmb3IgdGhlCitQYWNrYWdlLiAgRGlzdHJpYnV0b3IgRmVlcyBhcmUgcGVybWl0dGVkLCBhbmQgbGljZW5zaW5nIGZlZXMgZm9yIG90aGVyCitjb21wb25lbnRzIGluIHRoZSBhZ2dyZWdhdGlvbiBhcmUgcGVybWl0dGVkLiBUaGUgdGVybXMgb2YgdGhpcyBsaWNlbnNlCithcHBseSB0byB0aGUgdXNlIGFuZCBEaXN0cmlidXRpb24gb2YgdGhlIFN0YW5kYXJkIG9yIE1vZGlmaWVkIFZlcnNpb25zCithcyBpbmNsdWRlZCBpbiB0aGUgYWdncmVnYXRpb24uCisKKyg4KSBZb3UgYXJlIHBlcm1pdHRlZCB0byBsaW5rIE1vZGlmaWVkIGFuZCBTdGFuZGFyZCBWZXJzaW9ucyB3aXRoCitvdGhlciB3b3JrcywgdG8gZW1iZWQgdGhlIFBhY2thZ2UgaW4gYSBsYXJnZXIgd29yayBvZiB5b3VyIG93biwgb3IgdG8KK2J1aWxkIHN0YW5kLWFsb25lIGJpbmFyeSBvciBieXRlY29kZSB2ZXJzaW9ucyBvZiBhcHBsaWNhdGlvbnMgdGhhdAoraW5jbHVkZSB0aGUgUGFja2FnZSwgYW5kIERpc3RyaWJ1dGUgdGhlIHJlc3VsdCB3aXRob3V0IHJlc3RyaWN0aW9uLAorcHJvdmlkZWQgdGhlIHJlc3VsdCBkb2VzIG5vdCBleHBvc2UgYSBkaXJlY3QgaW50ZXJmYWNlIHRvIHRoZSBQYWNrYWdlLgorCisKK0l0ZW1zIFRoYXQgYXJlIE5vdCBDb25zaWRlcmVkIFBhcnQgb2YgYSBNb2RpZmllZCBWZXJzaW9uIAorCisoOSkgV29ya3MgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCBtb2R1bGVzIGFuZCBzY3JpcHRzKSB0aGF0CittZXJlbHkgZXh0ZW5kIG9yIG1ha2UgdXNlIG9mIHRoZSBQYWNrYWdlLCBkbyBub3QsIGJ5IHRoZW1zZWx2ZXMsIGNhdXNlCit0aGUgUGFja2FnZSB0byBiZSBhIE1vZGlmaWVkIFZlcnNpb24uICBJbiBhZGRpdGlvbiwgc3VjaCB3b3JrcyBhcmUgbm90Citjb25zaWRlcmVkIHBhcnRzIG9mIHRoZSBQYWNrYWdlIGl0c2VsZiwgYW5kIGFyZSBub3Qgc3ViamVjdCB0byB0aGUKK3Rlcm1zIG9mIHRoaXMgbGljZW5zZS4KKworCitHZW5lcmFsIFByb3Zpc2lvbnMKKworKDEwKSAgQW55IHVzZSwgbW9kaWZpY2F0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBTdGFuZGFyZCBvcgorTW9kaWZpZWQgVmVyc2lvbnMgaXMgZ292ZXJuZWQgYnkgdGhpcyBBcnRpc3RpYyBMaWNlbnNlLiBCeSB1c2luZywKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFBhY2thZ2UsIHlvdSBhY2NlcHQgdGhpcyBsaWNlbnNlLiBEbyBub3QKK3VzZSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoZSBQYWNrYWdlLCBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzCitsaWNlbnNlLgorCisoMTEpICBJZiB5b3VyIE1vZGlmaWVkIFZlcnNpb24gaGFzIGJlZW4gZGVyaXZlZCBmcm9tIGEgTW9kaWZpZWQKK1ZlcnNpb24gbWFkZSBieSBzb21lb25lIG90aGVyIHRoYW4geW91LCB5b3UgYXJlIG5ldmVydGhlbGVzcyByZXF1aXJlZAordG8gZW5zdXJlIHRoYXQgeW91ciBNb2RpZmllZCBWZXJzaW9uIGNvbXBsaWVzIHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZgordGhpcyBsaWNlbnNlLgorCisoMTIpICBUaGlzIGxpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgeW91IHRoZSByaWdodCB0byB1c2UgYW55IHRyYWRlbWFyaywKK3NlcnZpY2UgbWFyaywgdHJhZGVuYW1lLCBvciBsb2dvIG9mIHRoZSBDb3B5cmlnaHQgSG9sZGVyLgorCisoMTMpICBUaGlzIGxpY2Vuc2UgaW5jbHVkZXMgdGhlIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwKK2ZyZWUtb2YtY2hhcmdlIHBhdGVudCBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBvZmZlciB0byBzZWxsLAorc2VsbCwgaW1wb3J0IGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFBhY2thZ2Ugd2l0aCByZXNwZWN0IHRvIGFueQorcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IHRoZSBDb3B5cmlnaHQgSG9sZGVyIHRoYXQgYXJlIG5lY2Vzc2FyaWx5CitpbmZyaW5nZWQgYnkgdGhlIFBhY2thZ2UuIElmIHlvdSBpbnN0aXR1dGUgcGF0ZW50IGxpdGlnYXRpb24KKyhpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0pIGFnYWluc3QgYW55IHBhcnR5IGFsbGVnaW5nCit0aGF0IHRoZSBQYWNrYWdlIGNvbnN0aXR1dGVzIGRpcmVjdCBvciBjb250cmlidXRvcnkgcGF0ZW50CitpbmZyaW5nZW1lbnQsIHRoZW4gdGhpcyBBcnRpc3RpYyBMaWNlbnNlIHRvIHlvdSBzaGFsbCB0ZXJtaW5hdGUgb24gdGhlCitkYXRlIHRoYXQgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorCisoMTQpICBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5OgorVEhFIFBBQ0tBR0UgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVIgQU5EIENPTlRSSUJVVE9SUyAiQVMKK0lTJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMuIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SCitOT04tSU5GUklOR0VNRU5UIEFSRSBESVNDTEFJTUVEIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIFlPVVIgTE9DQUwKK0xBVy4gVU5MRVNTIFJFUVVJUkVEIEJZIExBVywgTk8gQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUiBXSUxMCitCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSEUgUEFDS0FHRSwgRVZFTiBJRgorQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9BcnhGYXRhbGlzLUVVTEEtSm9Xb29EIGIvbGljZW5zZXMvQXJ4RmF0YWxpcy1FVUxBLUpvV29vRApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTA3NjFmCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvQXJ4RmF0YWxpcy1FVUxBLUpvV29vRApAQCAtMCwwICsxLDc4IEBACitFTkQtVVNFUiBMSUNFTlNFIEFHUkVFTUVOVCAoRVVMQSkKKworCisKK1RoaXMgb3JpZ2luYWwgc29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IGNvcHlyaWdodCBhbmQgdHJhZGVtYXJrIGxhdy4KK0l0IG1heSBvbmx5IGJlIHNvbGQgYnkgYXV0aG9yaXplZCBkZWFsZXJzIGFuZCBvbmx5IGJlIHVzZWQgZm9yIHByaXZhdGUgcHVycG9zZXMuIAorUGxlYXNlIHJlYWQgdGhpcyBsaWNlbnNlIGNhcmVmdWxseSBiZWZvcmUgdXNpbmcgdGhlIHNvZnR3YXJlLgorQnkgaW5zdGFsbGluZyBvciB1c2luZyB0aGlzIHNvZnR3YXJlIHByb2R1Y3QgeW91IGFncmVlIHRvIGJlIGJvdW5kIGJ5IHRoZSBwcm92aXNpb25zIG9mIHRoaXMgRVVMQS4KKworCitTb2Z0d2FyZSBwcm9kdWN0IGxpY2Vuc2UKKworCitUaGlzIEVuZC1Vc2VyIExpY2Vuc2UgQWdyZWVtZW50IHdpbGwgZ3JhbnQgeW91IHRoZSBmb2xsb3dpbmcgcmlnaHRzOgorCitUaGlzIEVuZC1Vc2VyIExpY2Vuc2UgQWdyZWVtZW50IGlzIGEgbGVnYWxseSB2YWxpZCBhZ3JlZW1lbnQgYmV0d2VlbiB5b3UgKGVpdGhlciBhcyBhICBuYXR1cmFsIG9yIGFzIGEgbGVnYWwgcGVyc29uICkgYW5kIEpvV29vRCBQcm9kdWN0aW9ucyBTb2Z0d2FyZSBBRy4KKworQnkgcHVyY2hhc2luZyB0aGlzIG9yaWdpbmFsIHNvZnR3YXJlIHlvdSBhcmUgZ3JhbnRlZCB0aGUgcmlnaHQgdG8gaW5zdGFsbCBhbmQgdXNlIHRoZSBzb2Z0d2FyZSBvbiBhIHNpbmdsZSBjb21wdXRlci4KK0pvV29vRCBQcm9kdWN0aW9ucyBTb2Z0d2FyZSBBRyBkb2VzIG5vdCBncmFudCB5b3UgYW55IHJpZ2h0IG9mIG93bmVyc2hpcCB0byB0aGUgc29mdHdhcmUsIGFuZCB0aGlzIGxpY2Vuc2UgZG9lcyBub3QgcmVwcmVzZW50ICBhICJzYWxlIiBvZiB0aGUgc29mdHdhcmUuIAorWW91IGFyZSB0aGUgb3duZXIgb2YgdGhlIENELVJPTSBvbiB3aGljaCB0aGUgc29mdHdhcmUgaXMgc3RvcmVkOiBKb1dvb0QgUHJvZHVjdGlvbnMgU29mdHdhcmUgQUcgcmVtYWlucyB0aGUgc29sZSBvd25lciBvZiB0aGUgc29mdHdhcmUgb24gdGhlIENELVJPTSwgYW5kIG9mIHRoZSBwZXJ0aW5lbnQgZG9jdW1lbnRhdGlvbiwgYW5kIHJlbWFpbnMgdGhlIHByb3ByaWV0b3Igb2YgYW55IGFuZCBhbGwgaW50ZWxsZWN0dWFsIGFuZCBpbmR1c3RyaWFsIHByb3BlcnR5IHJpZ2h0cyBjb250YWluZWQgdGhlcmVpbi4KKworVGhpcyBub24tZXhjbHVzaXZlIGFuZCBwZXJzb25hbCBsaWNlbnNlIGdyYW50cyB5b3UgdGhlIHJpZ2h0IHRvIGluc3RhbGwsIHVzZSwgYW5kIGRpc3BsYXkgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgcHJvZHVjdCBvbiBhIHNpbmdsZSBjb21wdXRlciAoZm9yIGV4YW1wbGUsIGEgc2luZ2xlIHdvcmtzdGF0aW9uLCBhIHNpbmdsZSB0ZXJtaW5hbCwgYSBzaW5nbGUgcG9ydGFibGUgUEMsIGEgc2luZ2xlIHBhZ2VyLCBldGMuKS4gCitFdmVyeSBvdGhlciB1c2UsIGVzcGVjaWFsbHkgdGhlIHVuYXV0aG9yaXplZCBsZWFzaW5nLCBwdWJsaWMgZGlzcGxheSBvciBvdGhlciBkZW1vbnN0cmF0aW9uIChlLmcuIGluIHNjaG9vbHMgb3IgdW5pdmVyc2l0aWVzKSwgY29weWluZywgbXVsdGlwbGUgaW5zdGFsbGF0aW9uIG9yIHRyYW5zZmVyLCBhbmQgYW55IG90aGVyIHByb2Nlc3MgYnkgd2hpY2ggdGhpcyBzb2Z0d2FyZSBvciBwYXJ0cyBvZiBpdCBtYXkgYmUgbWFkZSBhdmFpbGFibGUgdG8gdGhlIGdlbmVyYWwgcHVibGljIChpbmNsdWRpbmcgdmlhIEludGVybmV0IG9yIG90aGVyIG9ubGluZSBzeXN0ZW1zKSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gY29uc2VudCBpcyBwcm9oaWJpdGVkLiAKKyAKK0lmIHRoaXMgc29mdHdhcmUgZW5hYmxlcyB5b3UgdG8gcHJpbnQgcGljdHVyZXMgY29udGFpbmluZyBjaGFyYWN0ZXJzIG9mIEpvV29vRCBQcm9kdWN0aW9ucyBTb2Z0d2FyZSBBRyB3aGljaCBhcmUgcHJvdGVjdGVkIGJ5IHRyYWRlbWFyayBsYXcsIHRoaXMgbGljZW5zZSBvbmx5IGFsbG93cyB5b3UgdG8gcHJpbnQgdGhlIHBpY3R1cmVzIG9uIHBhcGVyIGFuZCB0byB1c2UgdGhlbSBhcyBwcmludG91dHMgc29sZWx5IGZvciBwZXJzb25hbCwgbm9uLWNvbW1lcmNpYWwgYW5kIG5vbi1nb3Zlcm5tZW50YWwgcHVycG9zZXMgKGZvciBleGFtcGxlLCB5b3UgbWF5IG5vdCBkaXNwbGF5IG9yIHNlbGwgdGhvc2UgcGljdHVyZXMgaW4gcHVibGljKSwgcHJvdmlkZWQgdGhhdCB5b3UgYWJpZGUgYnkgYWxsIGNvcHlyaWdodCBpbnN0cnVjdGlvbnMgY29udGFpbmVkIGluIHRoZSBwaWN0dXJlcyBnZW5lcmF0ZWQgYnkgdGhlIHNvZnR3YXJlLgorCisKKworCisKKworCitEZXNjcmlwdGlvbiBvZiBvdGhlciByaWdodHMgYW5kIGxpbWl0YXRpb25zIAorCitTYWZldHkgY29weQorCitPbmUgc2luZ2xlIGNvcHkgb2YgdGhlIHNvZnR3YXJlIHByb2R1Y3QgbWF5IGJlIHN0b3JlZCBmb3Igc2FmZXR5IG9yIGFyY2hpdmluZyBwdXJwb3NlcyBvbmx5LgorIAorCitMaW1pdGVkIHdhcnJhbnR5CisKK0pvV29vRCBQcm9kdWN0aW9ucyBTb2Z0d2FyZSBBRyB3YXJyYW50cyBmb3IgYSBwZXJpb2Qgb2YgOTAgZGF5cyBzdGFydGluZyBmcm9tIHRoZSBkYXRlIG9mIHB1cmNoYXNlIHRoYXQgdGhlIHNvZnR3YXJlIHdpbGwgZXNzZW50aWFsbHkgd29yayBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGFjY29tcGFueWluZyBwcmludGVkIG1hdGVyaWFscy4KK1RoZSBjb21wbGV0ZSBsaWFiaWxpdHkgb2YgSm9Xb29EIFByb2R1Y3Rpb25zIFNvZnR3YXJlIEFHIGFuZCB5b3VyIG9ubHkgY2xhaW0gY29uc2lzdHMsIGF0IHRoZSBvcHRpb24gb2YgSm9Xb29EIFByb2R1Y3Rpb25zIFNvZnR3YXJlIEFHLCBvZiBhIHJlaW1idXJzZW1lbnQgb2YgdGhlIHBhaWQgcHVyY2hhc2UgcHJpY2Ugb3Igb2YgcmVwYWlyaW5nIG9yIHN1YnN0aXR1dGluZyB0aGUgc29mdHdhcmUgcHJvZHVjdCB3aGljaCBpcyBub3QgaW4gYWNjb3JkYW5jZSB3aXRoIEpvV29vRCdzIGxpbWl0ZWQgd2FycmFudHksIGluc29mYXIgYXMgaXQgaXMgcmV0dXJuZWQgdG8gSm9Xb29EIFByb2R1Y3Rpb25zIFNvZnR3YXJlIEFHIHRvZ2V0aGVyIHdpdGggYSBjb3B5IG9mIHRoZSBpbnZvaWNlLgorVGhpcyBsaW1pdGVkIHdhcnJhbnR5IHdpbGwgbm90IGFwcGx5IGlmIHRoZSBmYWlsdXJlIG9mIHRoZSBzb2Z0d2FyZSBwcm9kdWN0IGlzIGR1ZSB0byBhbiBhY2NpZGVudCwgbWlzdXNlIG9yIGZhdWx0eSBhcHBsaWNhdGlvbi4KKworCitPdGhlciB3YXJyYW50eSByaWdodHMgd2lsbCByZW1haW4gdW5hZmZlY3RlZAorCitUaGUgYWJvdmUgd2FycmFudHkgaXMgZ2l2ZW4gYnkgSm9Xb29EIFByb2R1Y3Rpb25zIFNvZnR3YXJlIEFHIGFzIG1hbnVmYWN0dXJlciBvZiB0aGUgc29mdHdhcmUgcHJvZHVjdC4KK0FueSBsZWdhbCB3YXJyYW50eSBvciBsaWFiaWxpdHkgY2xhaW1zIHRvIHdoaWNoIHlvdSBhcmUgZW50aXRsZWQgdG93YXJkIHRoZSBkZWFsZXIgZnJvbSB3aG9tIHlvdSBib3VnaHQgeW91ciB2ZXJzaW9uIG9mIHRoZSBzb2Z0d2FyZSBwcm9kdWN0IGFyZSBuZWl0aGVyIHJlcGxhY2VkIG5vciBsaW1pdGVkIGJ5IHRoaXMgd2FycmFudHkuIAorCisKK0xpbWl0YXRpb24gb2YgbGlhYmlsaXR5CisKK1RvIHRoZSBncmVhdGVzdCBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LCBKb1dvb0QgUHJvZHVjdGlvbnMgU29mdHdhcmUgQUcgcmVmdXNlcyB0byBhY2NlcHQgbGlhYmlsaXR5IGZvciBhbnkgc3BlY2lhbCwgYWNjaWRlbnRhbCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIHJlc3VsdGluZyBmcm9tIHRoZSB1dGlsaXphdGlvbiBvZiwgb3IgaW5hYmlsaXR5IHRvIHV0aWxpemUsIHRoZSBzb2Z0d2FyZSBwcm9kdWN0LiBUaGlzIGluY2x1ZGVzIGFueSBpbnN0YW5jZXMgaW4gd2hpY2ggSm9Xb29EIFByb2R1Y3Rpb25zIFNvZnR3YXJlIEFHIGhhcyBwcmV2aW91c2x5IHBvaW50ZWQgb3V0IHRoZSBwb3NzaWJsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKworCitUcmFkZW1hcmtzCisKK1RoaXMgRW5kLVVzZXIgTGljZW5zZSBBZ3JlZW1lbnQgZG9lcyBub3QgZ3JhbnQgeW91IGFueSByaWdodHMgaW4gY29ubmVjdGlvbiB3aXRoIHRyYWRlbWFya3Mgb2YgSm9Xb29EIFByb2R1Y3Rpb25zIFNvZnR3YXJlIEFHLgorCisKK0VuZCBvZiBjb250cmFjdCAvIFRlcm1pbmF0aW9uCisKK1RoaXMgbGljZW5zZSB3aWxsIGFwcGx5IHVudGlsIGl0IGlzIHRlcm1pbmF0ZWQgYnkgZWl0aGVyIG9uZSBvZiB0aGUgcGFydGllcy4gWW91IG1heSB0ZXJtaW5hdGUgdGhpcyBsaWNlbnNlIGF0IGFueSB0aW1lIGJ5IHNlbmRpbmcgdGhlIHNvZnR3YXJlIGJhY2sgdG8gSm9Xb29EIFByb2R1Y3Rpb25zIFNvZnR3YXJlIEFHIG9yIGJ5IGRlc3Ryb3lpbmcgdGhlIHNvZnR3YXJlLCB0aGUgY29tcGxldGUgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gYW5kIGFsbCBjb3BpZXMgYW5kIGluc3RhbGxhdGlvbnMgdGhlcmVvZiwgaXJyZXNwZWN0aXZlIG9mIHdoZXRoZXIgdGhleSB3ZXJlIGRyYXduIHVwIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIGxpY2Vuc2Ugb3Igbm90LiAgVGhpcyBMaWNlbnNlIEFncmVlbWVudCB3aWxsIGJlIHRlcm1pbmF0ZWQgaW1tZWRpYXRlbHkgd2l0aG91dCBhbnkgcHJpb3Igbm90aWZpY2F0aW9uIGJ5IEpvV29vRCBQcm9kdWN0aW9ucyBTb2Z0d2FyZSBpZiB5b3UgYXJlIGluIGJyZWFjaCBvZiBhbnkgb2YgdGhlIHByb3Zpc2lvbnMgb2YgdGhpcyBsaWNlbnNlLCBpbiB3aGljaCBjYXNlIHlvdSB3aWxsIGJlIG9ibGlnYXRlZCB0byBkZXN0cm95IGFsbCBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlIHByb2R1Y3QuCisKKworU2FmZWd1YXJkaW5nIGNsYXVzZQorCitTaG91bGQgYW55IHByb3Zpc2lvbnMgb2YgdGhpcyBhZ3JlZW1lbnQgYmUgb3IgYmVjb21lIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSwgdGhlIHJlbWFpbmRlciBvZiB0aGlzIGFncmVlbWVudCB3aWxsIHJlbWFpbiB1bmFmZmVjdGVkLgorCisKKworQ2hvaWNlIG9mIGxhdworCitUaGUgbGF3cyBvZiBBdXN0cmlhIHdpbGwgYmUgYXBwbGllZCB0byBhbGwgbGVnYWwgaXNzdWVzIGFyaXNpbmcgb3V0IG9mIG9yIGluIGNvbm5lY3Rpb24gd2l0aCB0aGlzIGNvbnRyYWN0LgorCisgCmRpZmYgLS1naXQgYS9saWNlbnNlcy9BcnhGYXRhbGlzRGVtbyBiL2xpY2Vuc2VzL0FyeEZhdGFsaXNEZW1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiMjBjMWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9BcnhGYXRhbGlzRGVtbwpAQCAtMCwwICsxLDExIEBACitEZXZlbG9wZXI6IEFya2FuZSBTdHVkaW9zIC0gaHR0cDovL3d3dy5hcmthbmUtc3R1ZGlvcy5jb20vCitQdWJsaXNoZXI6IEpvV29vZCBQcm9kdWN0aW9ucyAtIGh0dHA6Ly93d3cuam93b29kLmNvbS8KK0dhbWUgYW5kIGRlbW8gcmVsZWFzZWQgaW4gMjAwMgorCitDb3B5cmlnaHQgbm90aWNlIGZyb20gdGhlIGRlbW8gaW5zdGFsbGVyIChubyBFVUxBIGlzIGRpc3BsYXllZCAvIGluc3RhbGxlZCk6CisKK1dBUk5JTkc6IFRoaXMgcHJvZ3JhbSBpcyBwcm90ZWN0ZWQgYnkgY29weXJpZ2h0IGxhdyBhbmQgaW50ZXJuYXRpb25hbCB0cmVhdGllcy4KKworVW5hdXRob3JpemVkIHJlcHJvZHVjdGlvbiBvciBkaXN0cmlidXRpb24gb2YgdGhpcyBwcm9ncmFtLCBvciBhbnkgcG9ydGlvbiBvZiBpdAorbWF5IHJlc3VsdCBpbiBzZXZlcmUgY2l2aWwgYW5kIGNyaW1pbmFsIHBlbmFsdGllcywgYW5kIHdpbGwgYmUgcHJvc2VjdXRlZCB0byB0aGUKK21heGltdW0gZXh0ZW5kIHBvc3NpYmxlIHVuZGVyIHRoZSBsYXcuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9BdG1lbCBiL2xpY2Vuc2VzL0F0bWVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0ZTJiNDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9BdG1lbApAQCAtMCwwICsxLDQ1IEBACitUaGUgYmluIGZpbGVzIGluIHRoZSBpbWFnZXMgd2VyZSBnZW5lcmF0ZWQgZnJvbSBoZWFkZXIgZmlsZXMKK2luY2x1ZGVkIHdpdGggdGhlIDIuMS4xIHJlbGVhc2Ugb2YgdGhlICJBdG1lbCBkcml2ZXJzIiwgcmVsZWFzZWQKK2J5IEF0bWVsIGNvcnAgaW4gRGVjZW1iZXIgMjAwMiBhbmQgc3Vic2VxdWVudCBtb2RpZmljYXRpb25zLAorZG93bmxvYWRlZCBmcm9tIGF0bWVsd2xhbmRyaXZlci5zb3VyY2Vmb3JnZS5uZXQgCisKK1RoZSBjb3B5cmlnaHQgb24gdGhlc2UgZmlsZXMgd2FzIG1vZGlmaWVkIChieSBBdG1lbCBjb3JwKQoraW4gTWF5IDIwMDQgdG8gdGhlIGZvcm0gc2hvd24gYmVsb3cuCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgIENvcHlyaWdodCAoYykgMjAwNC0wNy0wNSBBdG1lbCBDb3Jwb3JhdGlvbi4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCSAgICAgICovCisvKgkJCQkJCQkJCSAgICAgICovCisvKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIG9mIHRoZSBtaWNyb2NvZGUgc29mdHdhcmUgKCJGaXJtd2FyZSIpIGlzICAgICAgICAgICAqLworLyogcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CQkgICAgICAqLworLyogRmlybXdhcmUgaXMgcmVkaXN0cmlidXRlZCBpbiBvYmplY3QgY29kZSBvbmx5LCBzcGVjaWZpY2FsbHksIG9ubHkgCSAgICAgICovCisvKiBpbiB0d28gZmlsZSBmb3JtYXRzOiAoYSkgLmggaGVhZGVyIGZpbGU7IG9yIChiKSAucm9tIGJpbmFyeSBpbWFnZSBmaWxlOyAgICAqLworLyoJCQkJCQkJCQkgICAgICAqLworLyogQW55IHJlcHJvZHVjdGlvbiBvZiBGaXJtd2FyZSBtdXN0IGNvbnRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsICAgICAgKi8KKy8qIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgYmVsb3cgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiAgICAgICovCisvKiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbjsgYW5kCQkgICAgICAqLworLyogVGhlIG5hbWUgb2YgQXRtZWwgQ29ycG9yYXRpb24gbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSAJICAgICAgKi8KKy8qIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIEZpcm13YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBjb25zZW50LiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogIERJU0NMQUlNRVI6ICBBVE1FTCBQUk9WSURFUyBUSElTIEZJUk1XQVJFICJBUyBJUyIgV0lUSCBOTyBXQVJSQU5USUVTICAgICAgKi8KKy8qICBPUiBJTkRFTU5JVElFUyBXSEFUU09FVkVSLiAgQVRNRUwgRVhQUkVTU0xZIERJU0NMQUlNUyBBTlkgRVhQUkVTUywgICAgICAgICovCisvKiAgU1RBVFVUT1JZIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sICAgICAgICAgICAqLworLyogIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgICAgICAgKi8KKy8qICBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgQVRNRUwgQkUgTElBQkxFIEZPUiAgICAgICovCisvKiAgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCUVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCAgICovCisvKiAgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgICAqLworLyogIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSAgICAgKi8KKy8qICBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsICAgICAgICovCisvKiAgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HICAgICAqLworLyogIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBGSVJNV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSAgICAgICAgKi8KKy8qICBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4JCQkJCSAgICAgCSAgICAgICovCisvKiAgIAkJCQkJCQkJICAgICAgICAgICAgICAqLworLyogIFVTRVIgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMgVEhBVCBUSEUgUFVSQ0hBU0UgT1IgVVNFIE9GIFRIRSBGSVJNV0FSRSAgICAgKi8KKy8qICBXSUxMIE5PVCBDUkVBVEUgT1IgR0lWRSBHUk9VTkRTIEZPUiBBIExJQ0VOU0UgQlkgSU1QTElDQVRJT04sIEVTVE9QUEVMLCAgICovCisvKiAgT1IgT1RIRVJXSVNFIElOIEFOWSBJTlRFTExFQ1RVQUwgUFJPUEVSVFkgUklHSFRTIAkJICAgICAgICAgICAgICAqLworLyogIChQQVRFTlQsIENPUFlSSUdIVCwgVFJBREUgU0VDUkVULCBNQVNLIFdPUkssIE9SIE9USEVSIFBST1BSSUVUQVJZIFJJR0hUKSAgKi8KKy8qICBFTUJPRElFRCBJTiBBTlkgT1RIRVIgQVRNRUwgSEFSRFdBUkUgT1IgRklSTVdBUkUgRUlUSEVSIFNPTEVMWQkgICAgICAqLworLyogIE9SIElOIENPTUJJTkFUSU9OIFdJVEggVEhFIEZJUk1XQVJFLgkJCQkgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvQXZQIGIvbGljZW5zZXMvQXZQCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NmZjM2MKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9BdlAKQEAgLTAsMCArMSw1IEBACit4VGhlIHNvdXJjZSBjb2RlIHRvIEFsaWVucyBWcyBQcmVkYXRvciBpcyBjb3B5cmlnaHQgKGMpIDE5OTktMjAwMCBSZWJlbGxpb24gYW5kCitpcyBwcm92aWRlZCBhcyBpcyB3aXRoIG5vIHdhcnJhbnR5IGZvciBpdHMgc3VpdGFiaWxpdHkgZm9yIHVzZS4gWW91IG1heSBub3QKK3VzZSB0aGlzIHNvdXJjZSBjb2RlIGluIGZ1bGwgb3IgaW4gcGFydCBmb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4gQW55IHVzZSBtdXN0CitpbmNsdWRlIGEgY2xlYXJseSB2aXNpYmxlIGNyZWRpdCB0byBSZWJlbGxpb24gYXMgdGhlIGNyZWF0b3JzIGFuZCBvd25lcnMsIGFuZAorcmVpdGVyYXRpb24gb2YgdGhpcyBsaWNlbnNlLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvQkFFS01VSyBiL2xpY2Vuc2VzL0JBRUtNVUsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTFjZGFiNQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0JBRUtNVUsKQEAgLTAsMCArMSwxMyBAQAorKGMpIENvcHlyaWdodCAxOTg2LTIwMDAsIEh3YW4gRGVzaWduIEluYy4KKworWW91IGFyZSBoZXJlYnkgZ3JhbnRlZCBwZXJtaXNzaW9uIHVuZGVyIGFsbCBId2FuIERlc2lnbiBwcm9wcmlldHkgcmlnaHRzCit0byB1c2UsIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgc2VsbCwgYW5kIHJlZGlzdHJpYnV0ZSB0aGUgNCBCYWVrbXVrCit0cnVldHlwZSBvdXRsaW5lIGZvbnRzIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCByZXN0cmljdGlvbjsKK3Byb3ZpZGVkLCB0aGF0IHRoaXMgbm90aWNlIGlzIGxlZnQgaW50YWN0IG9uIGFsbCBjb3BpZXMgb2Ygc3VjaCBmb250cworYW5kIHRoYXQgSHdhbiBEZXNpZ24gSW50LidzIHRyYWRlbWFyayBpcyBhY2tub3dsZWRnZWQgYXMgc2hvd24gYmVsb3cKK29uIGFsbCBjb3BpZXMgb2YgdGhlIDQgQmFla211ayB0cnVldHlwZSBmb250cy4KKworQkFFS01VSyBCQVRBTkcgaXMgYSByZWdpc3RlcmVkIHRyYWRlbWFyayBvZiBId2FuIERlc2lnbiBJbmMuCitCQUVLTVVLIEdVTElNIGlzIGEgcmVnaXN0ZXJlZCB0cmFkZW1hcmsgb2YgSHdhbiBEZXNpZ24gSW5jLgorQkFFS01VSyBET1RVTSBpcyBhIHJlZ2lzdGVyZWQgdHJhZGVtYXJrIG9mIEh3YW4gRGVzaWduIEluYy4KK0JBRUtNVUsgSEVBRExJTkUgaXMgYSByZWdpc3RlcmVkIHRyYWRlbWFyayBvZiBId2FuIERlc2lnbiBJbmMuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9CQ1MgYi9saWNlbnNlcy9CQ1MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ3MGU2NAotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0JDUwpAQCAtMCwwICsxLDM0IEBACisKK1RoaXMgU29mdHdhcmUgTGljZW5zaW5nIEFncmVlbWVudCAoIkFncmVlbWVudCIpIGlzIGEgbGVnYWwgYWdyZWVtZW50IGJldHdlZW4geW91IGFuZCBHYXJhZ2VHYW1lcy5jb20sIEluYy4gKCdHYXJhZ2VHYW1lcycpLiBUaGVzZSBhcmUgdGhlIG9ubHkgdGVybXMgYnkgd2hpY2ggR2FyYWdlR2FtZXMgcGVybWl0cyBhbnkgdXNlIG9mIHRoZSBTb2Z0d2FyZS4KKworR2FyYWdlR2FtZXMgTGljZW5zaW5nIEFncmVlbWVudCBmb3IgQnJpZGdlIENvbnN0cnVjdGlvbiBTZXQgRGVtby4KKworMS4gVGhlIFNvZnR3YXJlLgorVGhlIFNvZnR3YXJlIGxpY2Vuc2VkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGlzIHRoZSBjb21wdXRlciBwcm9ncmFtIGVudGl0bGVkCisnQnJpZGdlIENvbnN0cnVjdGlvbiBTZXQgRGVtbycsIHdoaWNoIGNvbnNpc3RzIG9mIGV4ZWN1dGFibGUgZmlsZXMsIGRhdGEgZmlsZXMsIGFuZCBkb2N1bWVudGF0aW9uLgorCisyLiBHcmFudCBvZiBMaWNlbnNlLgorR2FyYWdlR2FtZXMgZ3JhbnRzIHlvdSB0aGUgbm9udHJhbnNmZXJhYmxlLCBub25leGNsdXNpdmUgcmlnaHQgdG8gdXNlIHRoZSBTb2Z0d2FyZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LgorCitZT1UgTUFZOiAoaSkgbG9hZCB0aGUgc29mdHdhcmUgaW50byBSQU0gYXMgd2VsbCBhcyBpbnN0YWxsIGl0IG9uIGEgaGFyZCBkaXNrIG9yIG90aGVyIHN0b3JhZ2UgZGV2aWNlLCBhbmQgKGlpKSBtYWtlIG9uZSBjb3B5IGZvciBiYWNrdXAgcHVycG9zZXMuCisKK1lPVSBNQVkgTk9UOiBtb2RpZnksIHRyYW5zbGF0ZSwgZGlzYXNzZW1ibGUsIHJldmVyc2UgZW5naW5lZXIsIGRlY29tcGlsZSwgb3IgY3JlYXRlIGRlcml2YXRpdmUgd29ya3MgYmFzZWQgdXBvbiB0aGUgU29mdHdhcmUuCisKK1doZW4geW91IHB1cmNoYXNlIHRoZSBTb2Z0d2FyZSwgeW91IHdpbGwgcmVjZWl2ZSB0aGUgZnVsbCByZWdpc3RlcmVkIHZlcnNpb24uIFlvdSBhZ3JlZSBub3QgdG8gZGlzdHJpYnV0ZSB0aGUgcmVnaXN0ZXJlZCB2ZXJzaW9uIHRvIG90aGVycyBhbmQgdG8gdXNlIGl0IG9ubHkgZm9yIHlvdXIgb3duIHBlcnNvbmFsIHVzZS4gWW91IGFja25vd2xlZGdlIHRoYXQgZGlzdHJpYnV0aW9uIG9mIHRoZSByZWdpc3RlcmVkIHZlcnNpb24gdG8gb3RoZXJzLCB3aGV0aGVyIGludGVudGlvbmFsIG9yIHVuaW50ZW50aW9uYWwsIGNvdWxkIGRhbWFnZSBHYXJhZ2VHYW1lcyBib3RoIGZpbmFuY2lhbGx5IGFuZCBwcm9mZXNzaW9uYWxseS4gQW55IHVuYXV0aG9yaXplZCBkaXN0cmlidXRpb24gb2YgeW91ciByZWdpc3RlcmVkIHZlcnNpb24gd2lsbCByZXN1bHQgaW4gaW1tZWRpYXRlIGFuZCBhdXRvbWF0aWMgdGVybWluYXRpb24gb2YgeW91ciBsaWNlbnNlLCBhbmQgbWF5IHJlc3VsdCBpbiBjaXZpbCBhbmQgY3JpbWluYWwgcGVuYWx0aWVzLgorCiszLiBDb3B5cmlnaHQuCitUaGUgU29mdHdhcmUgaXMgb3duZWQgYnkgR2FyYWdlR2FtZXMgYW5kIGlzIHByb3RlY3RlZCBieSBVbml0ZWQgU3RhdGVzIGNvcHlyaWdodCBsYXdzIGFuZCBpbnRlcm5hdGlvbmFsIHRyZWF0aWVzLiBHYXJhZ2VHYW1lcyByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIGNvcHlyaWdodCBhbmQgYWxsIG90aGVyIHJpZ2h0cywgdGl0bGUgYW5kIGludGVyZXN0IHRvIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlLCBhbmQgdG8gdXNlIFRyYWRlbWFya3MgaW4gY29ubmVjdGlvbiB3aXRoIHRoZW0uICYjODIyMDtUcmFkZW1hcmtzJiM4MjIxOyByZWZlcnMgdG8gdGhlIG5hbWUgb2YgdGhlIFNvZnR3YXJlLCB0aGUgU29mdHdhcmUgbG9nbywgdGhlIG5hbWUgR2FyYWdlR2FtZXMsIGFuZCB0aGUgR2FyYWdlR2FtZXMgbG9nby4KKworCis0LiBOTyBXQVJSQU5UWS4KK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMtSVMiLiBOTyBXQVJSQU5USUVTIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIEFSRSBNQURFIEFTIFRPIElUIE9SIEFOWSBNRURJVU0gSVQgTUFZIEJFIE9OLiBHQVJBR0VHQU1FUyBXSUxMIFBST1ZJREUgTk8gUkVNRURZIEZPUiBJTkRJUkVDVCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgSU5DSURFTlRBTCBEQU1BR0VTIEFSSVNJTkcgRlJPTSBJVCwgSU5DTFVESU5HIFNVQ0ggRlJPTSBORUdMSUdFTkNFLCBTVFJJQ1QgTElBQklMSVRZLCBPUiBCUkVBQ0ggT0YgV0FSUkFOVFkgT1IgQ09OVFJBQ1QsIEVWRU4gQUZURVIgTk9USUNFIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzUuIFRlcm0uCitUaGUgdGVybSBvZiB0aGlzIGxpY2Vuc2UgZ3JhbnQgaXMgcGVycGV0dWFsLiBZb3UgbWF5IHRlcm1pbmF0ZSB0aGlzIEFncmVlbWVudCBhdCBhbnkgdGltZSBieSBkZXN0cm95aW5nIGFsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlIGluIHlvdXIgcG9zc2Vzc2lvbi4gWW91ciBsaWNlbnNlIHRvIHVzZSB0aGUgU29mdHdhcmUgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSBpZiB5b3UgYnJlYWNoIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudC4KKworNi4gR2VuZXJhbCBQcm92aXNpb25zLgorVGhpcyBBZ3JlZW1lbnQgaXMgdGhlIHNvbGUgYW5kIGVudGlyZSBBZ3JlZW1lbnQgcmVsYXRpbmcgdG8gdGhlIFNvZnR3YXJlLCBhbmQgc3VwZXJjZWRlcyBhbGwgcHJpb3IgdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMsIGFuZCBkb2N1bWVudGF0aW9uIHJlbGF0aW5nIHRvIHRoZSBTb2Z0d2FyZS4gSWYgYW55IHByb3Zpc2lvbiBpbiB0aGlzIEFncmVlbWVudCBpcyBoZWxkIGJ5IGEgY291cnQgb2YgY29tcGV0ZW50IGp1cmlzZGljdGlvbiB0byBiZSBpbnZhbGlkLCB2b2lkLCBvciB1bmVuZm9yY2VhYmxlLCB0aGUgcmVtYWluaW5nIHByb3Zpc2lvbnMgd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIHdpdGhvdXQgYmVpbmcgaW1wYWlyZWQgb3IgaW52YWxpZGF0ZWQgaW4gYW55IHdheS4gVGhpcyBBZ3JlZW1lbnQgd2lsbCBiZSBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgT3JlZ29uLCB3aXRob3V0IHJlZ2FyZCBmb3IgaXRzIGNvbmZsaWN0IG9mIGxhd3MgcHJpbmNpcGxlcy4gV2l0aCByZXNwZWN0IHRvIGV2ZXJ5IG1hdHRlciBhcmlzaW5nIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB5b3UgY29uc2VudCB0byB0aGUgZXhjbHVzaXZlIGp1cmlzZGljdGlvbiBhbmQgdmVudWUgb2YgdGhlIHN0YXRlIGFuZCBmZWRlcmFsIGNvdXJ0cyBzaXR0aW5nIGluIExhbmUgQ291bnR5LCBPcmVnb24uIFRoaXMgQWdyZWVtZW50IGRvZXMgbm90IGNyZWF0ZSBhbnkgYWdlbmN5IG9yIHBhcnRuZXIgcmVsYXRpb25zaGlwLiBZb3VyIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcGVyc29uYWwgYW5kIGRvIG5vdCBpbmNsdWRlIGFueSByaWdodCB0byBzdWJsaWNlbnNlIHRoZSBTb2Z0d2FyZS4KKworQlkgQ0xJQ0tJTkcgT04gJ0kgQUdSRUUnIEJFTE9XLCBZT1UgQUNLTk9XTEVER0UgVEhBVCBZT1UgSEFWRSBSRUFEIFRISVMKK0FHUkVFTUVOVCwgVU5ERVJTVEFORCBJVCwgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIElUUyBURVJNUyBBTkQgQ09ORElUSU9OUy4KK0lGIFlPVSBETyBOT1QgQUdSRUUgV0lUSCBUSElTIEFHUkVFTUVOVCwgUExFQVNFIENMSUNLICdDQU5DRUwnLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvQkVFUi1XQVJFIGIvbGljZW5zZXMvQkVFUi1XQVJFCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzOGE4ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9CRUVSLVdBUkUKQEAgLTAsMCArMSw2IEBACisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiAiVEhFIEJFRVItV0FSRSBMSUNFTlNFIiAoUmV2aXNpb24gNDIpOgorICogPHBoa0Bsb2dpbi5ka3V1Zy5kaz4gd3JvdGUgdGhpcyBmaWxlLiAgQXMgbG9uZyBhcyB5b3UgcmV0YWluIHRoaXMgbm90aWNlIHlvdQorICogY2FuIGRvIHdoYXRldmVyIHlvdSB3YW50IHdpdGggdGhpcyBzdHVmZi4gSWYgd2UgbWVldCBzb21lIGRheSwgYW5kIHlvdSB0aGluaworICogdGhpcyBzdHVmZiBpcyB3b3J0aCBpdCwgeW91IGNhbiBidXkgbWUgYSBiZWVyIGluIHJldHVybi4gICBQb3VsLUhlbm5pbmcgS2FtcAorICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvQkwgYi9saWNlbnNlcy9CTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDZkM2VmCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvQkwKQEAgLTAsMCArMSw0OCBAQAorQmxlbmRlciBMaWNlbnNlIDEuMCAodGhlICJCTCIsIHNlZSBodHRwOi8vd3d3LmJsZW5kZXIub3JnL0JMLyApLgorCitDb3B5cmlnaHQgKEMpIDIwMDIgQmxlbmRlciBGb3VuZGF0aW9uLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCitGb3IgdGVhbXMgdGhhdCBkb24ndCB3YW50IHRvIG9wZXJhdGUgdW5kZXIgdGhlIEdQTCwgd2UncmUgYWxzbyBvZmZlcmluZwordGhpcyAibm9uLUdQTCIgQmxlbmRlciBMaWNlbnNlIG9wdGlvbi4gVGhpcyBtZWFucyB0aGF0IHlvdSBjYW4gZG93bmxvYWQKK3RoZSBsYXRlc3Qgc291cmNlcyBhbmQgdG9vbHMgdmlhIEZUUCBvciBDVlMgZnJvbSBvdXIgc2l0ZSBhbmQgc2lnbiBhbgorYWRkaXRpb25hbCBhZ3JlZW1lbnQgd2l0aCB0aGUgQmxlbmRlciBGb3VuZGF0aW9uLCBzbyB5b3UgY2FuIGtlZXAgeW91cgorc291cmNlIG1vZGlmaWNhdGlvbnMgY29uZmlkZW50aWFsLiBDb250YWN0IHRoZSBCbGVuZGVyIEZvdW5kYXRpb24gdmlhCitlbWFpbCBhdCBsaWNlbnNlQGJsZW5kZXIub3JnIHNvIHdlIGNhbiBkaXNjdXNzIGhvdyB3ZSBoYW5kbGUgdGhlCitwcmFjdGljYWwgbWF0dGVycy4KKworQSBzaWduZWQgYWdyZWVtZW50IGFsbG93cyB5b3UgdG8gZG8gYnVzaW5lc3Mgd2l0aCBwcm9wcmlldGFyeSBjb2RlLCBtYWtlCitzcGVjaWFsIGRlcml2ZWQgdmVyc2lvbnMsIHNlbGwgZXhlY3V0YWJsZXMsIHByb2plY3RzIG9yIHNlcnZpY2VzLAorcHJvdmlkZWQgdGhhdDoKKworMS4gVGhlIEJMLWVkIGNvZGUgcmVtYWlucyBjb3B5cmlnaHRlZCBieSB0aGUgb3JpZ2luYWwgb3duZXJzLCBhbmQgY2Fubm90CitiZSB0cmFuc2ZlcnJlZCB0byBvdGhlciBwYXJ0aWVzCisKKzIuIFRoZSBCTC1lZCBjb2RlIGNhbm5vdCBiZSBwdWJsaXNoZWQgb3IgcmUtZGlzdHJpYnV0ZWQgaW4gYW55IHdheSwgYW5kCitvbmx5IGJlIGF2YWlsYWJsZSBmb3IgdGhlIGludGVybmFsIHN0YWZmIHRoYXQgd29ya3MgZGlyZWN0bHkgb24gdGhlCitzb2Z0d2FyZSBpdHNlbGYuIEVtcGxveWVlcyBvZiBwYXJ0bmVycyB3aXRoIHdoaWNoIHlvdSBjby1kZXZlbG9wIG9uIHRoZQorcHJvamVjdHMgdGhhdCBpbmNsdWRlIEJMLWVkIGNvZGUgYXJlIGNvbnNpZGVyZWQgJ2ludGVybmFsIHN0YWZmJyBhbHNvLgorCiszLiBUaGUgQkwtZWQgY29kZSBjYW4gYmUgdXNlZCAoc29sZCwgZGlzdHJpYnV0ZWQpIGluIHBhcnRzIG9yIGluIGl0cword2hvbGUgb25seSBhcyBhbiBleGVjdXRhYmxlIG9yIGFzIGEgY29tcGlsZWQgbGlicmFyeS9tb2R1bGUgYW5kIGl0cworaGVhZGVyIGZpbGVzLgorCis0LiBUaGUgdXNhZ2Ugb2YgdGhlIG5hbWUgQmxlbmRlciBvciB0aGUgQmxlbmRlciBsb2dvIGlzIG5vdCBpbmNsdWRlZCBpbgordGhpcyBsaWNlbnNlLiBJbnN0ZWFkICdpbmNsdWRpbmcgQmxlbmRlciBGb3VuZGF0aW9uIHJlbGVhc2UgWCcgKG9yCitzaW1pbGFyKSBjYW4gYmUgdXNlZCwgd2l0aCAnWCcgdGhlIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBpbml0aWFsIEJsZW5kZXIKK0ZvdW5kYXRpb24gcmVsZWFzZSB3aGljaCB5b3Ugc3RhcnRlZCB3aXRoLgorCis1LiBOb3RlIHRoYXQgdGhpcyBCTCBoYXMgbm8gYXV0aG9yaXR5IG92ZXIgc29tZSBvZiB0aGUgZXh0ZXJuYWwKK2xpYnJhcmllcyBsaWNlbnNlcyB3aGljaCBCbGVuZGVyIGxpbmtzIHdpdGguCisKK0FkZGl0aW9uYWxseSB5b3UgZ2V0IDoKKworMS4gVGhlIHJpZ2h0IHRvIHVzZSBCbGVuZGVyIEZvdW5kYXRpb24gc291cmNlIHVwZGF0ZXMgZm9yIGEgMSB5ZWFyCitwZXJpb2QuCisKKzIuIFN1cHBvcnQuIERldGFpbHMgdG8gYmUgZGV0ZXJtaW5lZCBieSB0aGUgYWRkaXRpb25hbCBhZ3JlZW1lbnQuCisKK1lvdSBhcmUgaW52aXRlZCB0byBkb25hdGUgeW91ciBwcm9wcmlldGFyeSBjaGFuZ2VzIGJhY2sgdG8gdGhlIG9wZW4KK3NvdXJjZSBjb21tdW5pdHkgYWZ0ZXIgYSByZWFzb25hYmxlIHRpbWUgcGVyaW9kLiBZb3UgYXJlIG9mIGNvdXJzZSBmcmVlCit0byBjaG9vc2Ugbm90IHRvIGRvIHRoaXMuCisKK0VuZCBvZiBCTCB0ZXJtcyBhbmQgY29uZGl0aW9ucy4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0JTRCBiL2xpY2Vuc2VzL0JTRApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWY0ZDlhCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvQlNECkBAIC0wLDAgKzEsMjYgQEAKK0NvcHlyaWdodCAoYykgPFlFQVI+LCA8T1dORVI+CitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSA8T1JHQU5JWkFUSU9OPiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQorTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKK1NVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KK0NPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9CU0QtMSBiL2xpY2Vuc2VzL0JTRC0xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4ZWM1YTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9CU0QtMQpAQCAtMCwwICsxLDIwIEBACitDb3B5cmlnaHQgKGMpIDxZRUFSPiwgPE9XTkVSPgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCitBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCitMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKK0FSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0JTRC0yIGIvbGljZW5zZXMvQlNELTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk5NWQ1NAotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0JTRC0yCkBAIC0wLDAgKzEsMjMgQEAKK0NvcHlyaWdodCAoYykgPFlFQVI+LCA8T1dORVI+CitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRQorTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKK1NVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KK0NPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9CU0QtNCBiL2xpY2Vuc2VzL0JTRC00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2Njk0YTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9CU0QtNApAQCAtMCwwICsxLDMwIEBACitDb3B5cmlnaHQgKGMpIDxZRUFSPiwgPE9XTkVSPgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCisgICBDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKzQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIDxPUkdBTklaQVRJT04+IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICAgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCitBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCitMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKK0FSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0JTRC13aXRoLWF0dHJpYnV0aW9uIGIvbGljZW5zZXMvQlNELXdpdGgtYXR0cmlidXRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNiNzJmNgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0JTRC13aXRoLWF0dHJpYnV0aW9uCkBAIC0wLDAgKzEsMzQgQEAKK0NvcHlyaWdodCAoYykgPFlFQVI+LCA8T1dORVI+CitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSA8T1JHQU5JWkFUSU9OPiBub3IgdGhlIG5hbWVzIG9mIGl0cworICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KKyAgIHRoaXMgc29mdHdhcmUgd2l0aG91dCBbc3BlY2lmaWNdIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgIFtGb3IgcGVybWlzc2lvbiBbb3IgYW55IGxlZ2FsIGRldGFpbHNdLCBbcGxlYXNlXSBjb250YWN0IDxBRERSRVNTPi5dCis0LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisgICBhY2tub3dsZWRnbWVudDogIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkKKyAgIDxPUkdBTklaQVRJT04+ICg8QUREUkVTUz4pLiIKKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCitBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCitMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKK0FSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLS0tCisKK05vdGU6IEEgdmFyaWFudCBvZiB0aGlzIGxpY2Vuc2UgaW5jbHVkZXMgdGhlIEhQTkQgZGlzY2xhaW1lciBpbnN0ZWFkLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvQlpJUDIgYi9saWNlbnNlcy9CWklQMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzQ4ZTI1Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvQlpJUDIKQEAgLTAsMCArMSwzMyBAQAorPGNvcHlyaWdodCBub3RpY2U+CitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKworMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworMi4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdAorICAgbm90IGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gIElmIHlvdSB1c2UgdGhpcworICAgc29mdHdhcmUgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpbiB0aGUgcHJvZHVjdAorICAgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZSBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLgorCiszLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0CisgICBub3QgYmUgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLgorCis0LiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbgorICAgcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MKK09SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWQorRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURQorR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCitXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9CYWJ5bG9uIGIvbGljZW5zZXMvQmFieWxvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmY3NjYxCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvQmFieWxvbgpAQCAtMCwwICsxLDM4OSBAQAorCUVORC1VU0VSIExJQ0VOU0UgQUdSRUVNRU5UCisJZm9yIEJhYnlsb24gVHJpYWwgVmVyc2lvbiBhbmQgQmFieWxvbi1Qcm8KKworCisKK0JZIENMSUNLSU5HIE9OIFRIRSAiWUVTIiBCVVRUT04sIFlPVSBBUkUgQ09OU0VOVElORyBUTyBCRQorQk9VTkQgQlkgQU5EIEFSRSBCRUNPTUlORyBBIFBBUlRZIFRPIFRISVMgQUdSRUVNRU5UIEFORAorVEhFIFJFTEFURUQgQUdSRUVNRU5UUyBBUyBTUEVDSUZJRUQgQkVMT1cuICBJRiBZT1UgRE8KK05PVCBBR1JFRSBUTyBBTEwgT0YgVEhFIFRFUk1TIE9GIFRISVMgQUdSRUVNRU5ULCBDTElDSworVEhFICJOTyIgQlVUVE9OLgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0V4Y2VwdCB3aGVuIHN0YXRlZCBvdGhlcndpc2UgYmVsb3csIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UKK0FncmVlbWVudCwgYXBwbHkgdG8gYm90aCBCYWJ5bG9uIFRyaWFsIFZlcnNpb24gYW5kIEJhYnlsb24tUHJvLiAgSW4gR2VuZXJhbCwKK3RoZSBkaWZmZXJlbmNlIGluIGluc3RhbGxhdGlvbiBiZXR3ZWVuIHRoZSBzb2Z0d2FyZSBvZiBCYWJ5bG9uIFRyaWFsIFZlcnNpb24KK2FuZCBCYWJ5bG9uLVBybyBpcyB0aGF0IHRoZSBCYWJ5bG9uLVBybyBpcyBhIHBhaWQgTGljZW5zZSwgYW5kIHRoZXJlZm9yZQoraXMgYWR2ZXJ0aXNpbmcgZnJlZSBhbmQgaGFzIGZ1bGwgZnVuY3Rpb25hbGl0eS4KKworQmFieWxvbiBUcmlhbCBWZXJzaW9uICh0aGUgc3BvbnNvcmVkIHNlcnZpY2UpIFNwZWNpZmljIFRlcm1zIGFuZCBDb25kaXRpb25zCisKK0lmIHlvdSBkZWNpZGVkIHRvIGluc3RhbGwgdGhlIEJhYnlsb24gVHJpYWwgVmVyc2lvbiwgdGhlIHNvZnR3YXJlIHlvdSBhcmUgYWJvdXQKK3RvIGluc3RhbGwgY29udGFpbnMgc2V2ZXJhbCBwYXJ0czogb25lIGlzIHRoZSBCYWJ5bG9uIFRyaWFsIFZlcnNpb24gc29mdHdhcmUsCithbm90aGVyIGlzIHRoZSAiQWRzIG9uIFNvZnR3YXJlIiBzb2Z0d2FyZSAodGhlICJDeWRvb3Igc29mdHdhcmUiKSBieSBDeWRvb3IKK1RlY2hub2xvZ2llcyBJbmMuICgiQ3lkb29yIikuIEluIGFkZGl0aW9uLCBmcm9tIHRpbWUgdG8gdGltZSBCYWJ5bG9uIG1heSByZXF1aXJlCit0aGF0IHlvdSBpbnN0YWxsIGR1cmluZyB0aGUgaW5pdGlhbCBkb3dubG9hZCBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIGJ1bmRsZWQKK3NvZnR3YXJlOiBTQVZFTk9XIGJ5IFdoZW5VLmNvbSAsIGFuZCBOZXcubmV0IGNsaWVudCAodGhlICJCdW5kbGVkIFNvZnR3YXJlIikuCitBcyBwYXJ0IG9mIHRoaXMgbGljZW5zZSBhZ3JlZW1lbnQsIHlvdSBhcmUgcmVxdWlyZWQgdG8gYnJvd3NlIHRvIHRoZXNlIGxpbmtzCithbmQgdG8gcmVhZCB0aGUgbGljZW5zZSBhZ3JlZW1lbnQgYW5kIHByaXZhY3kgcG9saWN5IG9mIGV2ZXJ5IHN1Y2ggQnVuZGxlZAorU29mdHdhcmUsIGFuZCB0byBhZ3JlZSB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgc3BlY2lmaWVkIHRoZXJlaW4uCitTQVZFTk9XIGxpY2Vuc2UgYWdyZWVtZW50OiBodHRwOi8vd3d3LndoZW51LmNvbS9zbmxpY2VuY2UwMS5odG1sCitXaGVuVS5jb20gcHJpdmFjeSBwb2xpY3k6IGh0dHA6Ly93d3cud2hlbnUuY29tL3ByaXZhY3kuaHRtbAorTmV3Lm5ldCB0ZXJtcyBvZiB1c2U6IGh0dHA6Ly93d3cubmV3Lm5ldC9wb2xpY2llc19zb2Z0d2FyZS50cAorTmV3Lm5ldCBwcml2YWN5IHBvbGljeTogaHR0cDovL3d3dy5uZXcubmV0L3BvbGljaWVzX3ByaXZhY3kudHAKKworVGhlIEN5ZG9vciBzb2Z0d2FyZSBhbmQgdGhlIEJ1bmRsZWQgU29mdHdhcmUgZW5hYmxlIHVzIHRvIG9mZmVyIHlvdSB0aGlzCitCYWJ5bG9uIFRyaWFsIFZlcnNpb24gc29mdHdhcmUgZnJlZSBvZiBjaGFyZ2UsIGFuZCB0aGVyZWZvcmUgeW91IGNhbm5vdAoraW5zdGFsbCBhbmQgdXNlIHRoZSBCYWJ5bG9uIFRyaWFsIFZlcnNpb24gc29mdHdhcmUgd2l0aG91dCBpbnN0YWxsaW5nIHRoZQorQ3lkb29yIHNvZnR3YXJlIGFuZCB0aGUgcmVxdWlyZWQgQnVuZGxlZCBTb2Z0d2FyZS4gVXNpbmcgdGhlIEJhYnlsb24gVHJpYWwKK3NvZnR3YXJlIHdpdGhvdXQgdGhlIEN5ZG9vciBzb2Z0d2FyZSBjb25zdGl0dXRlcyBhIGJyZWFjaCBvZiB0aGlzIEFncmVlbWVudC4KKworVGhlIEN5ZG9vciBzb2Z0d2FyZSB3aWxsIGNvbnRpbnVvdXNseSBwcmVzZW50IHRvIHlvdSBhbHRlcm5hdGluZyBhZHZlcnRpc2VtZW50cword2hpbGUgdXNpbmcgdGhlIEJhYnlsb24gVG9vbC4gRm9yIHRoaXMgcHVycG9zZSwgdGhlIEN5ZG9vciBzb2Z0d2FyZSBtYXkgcmVxdWlyZQordGhhdCB5b3UgY29ubmVjdCB0byB0aGUgSW50ZXJuZXQgZnJvbSB0aW1lIHRvIHRpbWUsIGFuZCBpbiBhbnkgZXZlbnQgeW91IGFyZQorcmVxdWlyZWQgdG8gY29ubmVjdCB0byB0aGUgSW50ZXJuZXQgYXQgbGVhc3Qgb25jZSBldmVyeSB0aGlydHkgZGF5cy4KKworCitUaGUgdXNlIG9mIHRoZSBDeWRvb3Igc29mdHdhcmUgaXMgc3ViamVjdCB0byB0aGUgQ3lkb29yIEVuZC1Vc2VyIExpY2Vuc2UgQWdyZWVtZW50LAorYW5kIHRvIHRoZSBwcml2YWN5IHBvbGljeSBvZiBDeWRvb3IsIGJvdGggb2Ygd2hpY2ggbWF5IGJlIGZvdW5kIGF0IHRoZSBib3R0b20gb2YKK3RoaXMgZG9jdW1lbnQgb3IgdGhyb3VnaCBDeWRvb3IncyBjb3Jwb3JhdGUgb2ZmaWNlcy4gWW91IGNvbmZpcm0gdGhhdCB5b3UgaGF2ZQorcmVhZCwgdW5kZXJzdG9vZCBhbmQgYWdyZWVkIHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBzcGVjaWZpZWQgaW4gdGhlIEN5ZG9vcgorRW5kLVVzZXIgTGljZW5zZSBBZ3JlZW1lbnQsIGFuZCB0aGUgcHJpdmFjeSBwb2xpY3kgb2YgQ3lkb29yLgorCitBbHRob3VnaCBCYWJ5bG9uIGRvZXMgaXRzIHZlcnkgYmVzdCB0byBlbnN1cmUgdGhhdCB0aGUgQ3lkb29yIHNvZnR3YXJlIGNvbXBsaWVzCit3aXRoIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSBhbmQgcHJpdmFjeSBwb2xpY3kgYWNjZXB0YWJsZSB0byBCYWJ5bG9uLCB0aGVyZQorY2FuIGJlIG5vIGFzc3VyYW5jZSBvbiBiZWhhbGYgb2YgQmFieWxvbiB0aGF0IHN1Y2ggdGVybXMgYXJlIG1ldCBieSBDeWRvb3IuCisKK1NpbmNlIHRoZSBDeWRvb3Igc29mdHdhcmUgaXMgbm90IGEgQmFieWxvbiBwcm9kdWN0LCBCYWJ5bG9uIHRha2VzIG5vCityZXNwb25zaWJpbGl0eSBhbmQgZ2l2ZXMgbm8gd2FycmFudHkgb2YgYW55IGtpbmQgd2l0aCByZXNwZWN0IHRvIHRoZSBDeWRvb3IKK3NvZnR3YXJlLCBpdHMgZnVuY3Rpb25pbmcsIHF1YWxpdHksIG1lcmNoYW50YWJpbGl0eSBvciBmaXRuZXNzIGZvciBhbnkgdXNlLgorSG93ZXZlciwgaWYgYSBjb21wZXRlbnQganVyaXNkaWN0aW9uIGRldGVybWluZXMgdGhhdCBCYWJ5bG9uIGlzIHJlc3BvbnNpYmxlCitmb3IgdGhlIEN5ZG9vciBzb2Z0d2FyZSBpbiBhbnkgcmVzcGVjdCB3aGF0c29ldmVyLCB0aGVuIEJhYnlsb24ncyB0ZXJtcyBhbmQKK2NvbmRpdGlvbnMgZm9yIHVzZSBvZiB0aGUgR2xvc3NhcnkgU2VydmljZSwgYXMgc3BlY2lmaWVkIGhlcmUsIHNoYWxsIGFwcGx5Cit0byB0aGUgQ3lkb29yIHNvZnR3YXJlLgorCitUaGUgQ3lkb29yIHNvZnR3YXJlIGFuZCB0aGUgQnVuZGxlZCBTb2Z0d2FyZSBtYXkgdXRpbGl6ZSBjZXJ0YWluIHVzZXIgYW5kCit1c2VyLXN1Ym1pdHRlZCBpbmZvcm1hdGlvbi4gRm9yIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGZ1bmN0aW9uaW5nIG9mCit0aGUgQ3lkb29yIHNvZnR3YXJlIGFuZCB0aGUgQnVuZGxlZCBTb2Z0d2FyZSwgYW5kIGFib3V0IHRoZSB1c2Ugb2YgdXNlciBhbmQKK3VzZXItc3VibWl0dGVkIGluZm9ybWF0aW9uIGJ5IHRoZSBDeWRvb3Igc29mdHdhcmUgYW5kIHRoZSBCdW5kbGVkIFNvZnR3YXJlLAorc2VlIEN5ZG9vcidzIGFuZCB0aGUgQnVuZGxlZCBTb2Z0d2FyZScgUHJpdmFjeSBQb2xpY3kgYW5kIEVuZC1Vc2VyIExpY2Vuc2UKK0FncmVlbWVudCwgYW5kIEJhYnlsb24ncyBwcml2YWN5IHBvbGljeS4KKworTGljZW5zZSBHcmFudAorCitCYWJ5bG9uLmNvbSBMdGQuIGhlcmVieSBncmFudHMgdG8geW91IGEgbm9uLWV4Y2x1c2l2ZSwgdGltZSBsaW1pdGVkIHRvCisxMjAgZGF5cyBvbmx5LCByZXZvY2FibGUgbGljZW5zZSB0byB1c2UgQmFieWxvbidzIFRyaWFsIFZlcnNpb24gc29mdHdhcmUKK2luIGNvbm5lY3Rpb24gd2l0aCB0aGUgbGltaXRlZCB2aWV3aW5nIG9mIEJhYnlsb24ncyBwcm9wcmlldGFyeSAiQmFieWxvbgorR2xvc3NhcmllcyIgc3lzdGVtICh0aGUgQmFieWxvbiBUcmlhbCBWZXJzaW9uLCB0aGUgQmFieWxvbi1Qcm8gYW5kIHRoZQorQmFieWxvbiBHbG9zc2FyaWVzIHN5c3RlbSBoZXJlaW5hZnRlciBjb2xsZWN0aXZlbHksICJ0aGUgVG9vbCIpLCBmcmVlIG9mCitjaGFyZ2UgaW4gdGhlIGNhc2Ugb2YgdGhlIEJhYnlsb24gVHJpYWwgVmVyc2lvbiwgd2hpY2ggaXMgdGhlIHNwb25zb3JlZAordmVyc2lvbiBvZiB0aGUgVG9vbCwgYW5kIGFnYWluc3QgdGhlIHBheW1lbnQgb2YgdGhlIGxpY2Vuc2UgZmVlIGluIHRoZQorQmFieWxvbi1Qcm8gdmVyc2lvbiBvZiB0aGUgVG9vbCwgc28gbG9uZyBhcyB5b3UgY29tcGx5IHdpdGggdGhlIHRlcm1zIGFuZAorY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LgorQmFieWxvbiBUcmlhbCBWZXJzaW9uIG1heSBiZSBkaXN0cmlidXRlZCBmcmVlbHkgb24gb25saW5lIHNlcnZpY2VzLCBidWxsZXRpbgorYm9hcmRzLCBvciBvdGhlciBlbGVjdHJvbmljIG1lZGlhIGFzIGxvbmcgYXMgdGhlIGZpbGVzIGFyZSBkaXN0cmlidXRlZCBpbgordGhlaXIgZW50aXJldHkgYW5kIGFyZSBkb3dubG9hZGVkIG9ubHkgYnkgcHJvdmlkaW5nIGEgbGluayB0byBmaWxlcyByZXNpZGluZworb24gQmFieWxvbidzIHNlcnZlcnMuICBUaGlzIHNvZnR3YXJlIG1heSBub3QgYmUgZGlzdHJpYnV0ZWQgb24gQ0QtUk9NLCBkaXNrLAorb3Igb3RoZXIgcGh5c2ljYWwgbWVkaWEgZm9yIGEgZmVlIHdpdGhvdXQgdGhlIHBlcm1pc3Npb24gb2YgQmFieWxvbi5jb20gTHRkLgorCisKK05vdCBhIENvcnBvcmF0ZSBvciBCdXNpbmVzcyBMaWNlbnNlCisKK1RoaXMgTGljZW5zZSBpcyBhIHNpbmdsZS11c2VyIG5vbi1jb3Jwb3JhdGUgbGljZW5zZSBvbmx5LiBUaGUgdXNlIG9mIHRoZQorR2xvc3NhcnkgU2VydmljZSBieSBhbnkgYnVzaW5lc3MsIG9yZ2FuaXphdGlvbiwgYWdlbmN5IGFuZCB0aGUgbGlrZSwgd2hldGhlcgorZm9yIGNvbW1lcmNpYWwsIG5vbi1jb21tZXJjaWFsIG9yIGVkdWNhdGlvbmFsIHVzZSByZXF1aXJlcyBhIHNlcGFyYXRlIGNvcnBvcmF0ZQorbGljZW5zZS4gRm9yIHByaWNlcyBhbmQgZnVydGhlciBpbmZvcm1hdGlvbiBhYm91dCBhIGNvcnBvcmF0ZSBsaWNlbnNlLCBwbGVhc2UKK2NvbnRhY3QgY29ycG9yYXRlQGJhYnlsb24uY29tLgorCitTcGVjaWFsIFRlcm1zIGFuZCBSZXN0cmljdGlvbnMgb2YgVXNlIGZvciB0aGUgQmFieWxvbiBUcmlhbCBWZXJzaW9uCisKK0JhYnlsb24gbWF5LCBhdCBpdHMgc29sZSBkaXNjcmV0aW9uLCBhdCBhbnkgdGltZSwgd2l0aG91dCBwcmlvciBub3RpY2UgYW5kCit0ZW1wb3JhcmlseSBvciBwZXJtYW5lbnRseToKKyhpKSB0ZXJtaW5hdGUsIGxpbWl0IG9yIGRlbnkgdGhlIExpY2Vuc2UKKyhpaSkgY2hhbmdlLCByZWR1Y2Ugb3IgbGltaXQgdGhlIGZ1bmN0aW9uYWxpdHkgYW5kIGZlYXR1cmVzIG9mIHRoZSBUb29sOworKGlpaSkgY3JlYXRlIGRpZmZlcmVudCBwcmlvcml0aWVzIG9yIGdyYWRlcyBmb3IgZGlmZmVyZW50IHVzZXJzCisoaXYpIGludHJvZHVjZSBuZXcgZmVhdHVyZXMgdGhhdCBtYXkgY2F1c2UgZnVuY3Rpb25hbGl0eSBjaGFuZ2UgaW4gZWFybGllciB2ZXJzaW9uczsKKyh2KSBjb25kaXRpb24gdGhlIGNvbnRpbnVhdGlvbiBvZiB0aGUgTGljZW5zZSBvbiB5b3VyIGFjY2VwdGluZyBUb29sIGltcHJvdmVtZW50cywKK2NvcnJlY3Rpb25zLCBhZGFwdGF0aW9ucywgb3IgY2hhbmdlcywgb3IgYWNjZXB0aW5nIHJldmlzZWQgb3IgbmV3IHRlcm1zIG9mIExpY2Vuc2UsCithcyB3aWxsIGJlIG1hZGUgYXZhaWxhYmxlIG9uIG9yIHRocm91Z2ggdGhlIEJhYnlsb24gd2Vic2l0ZSwgQmFieWxvbiBzaGFsbCBub3RpZnkKK2l0cyB1c2VycyB0aHJvdWdoIHRoZSBUb29sLCBieSBlLW1haWwgb3IgdGhyb3VnaCB0aGUgQmFieWxvbiB3ZWJzaXRlIG9mIGNoYW5nZXMgaW4KK3RoaXMgTGljZW5zZSBhZ3JlZW1lbnQuCisKK0V4Y2VwdCBmb3IgQmFieWxvbi1Qcm8gVXNlcnMsIHdobyBhcmUgZW50aXRsZWQgdG8gVklQIGVtYWlsIGN1c3RvbWVyIHNlcnZpY2UgZnJvbQorQmFieWxvbidzIHN1cHBvcnQgdGVhbSwgdGhpcyBsaWNlbnNlIGRvZXMgbm90IGVudGl0bGUgeW91IHRvIGFueSBoYXJkLWNvcHkKK2RvY3VtZW50YXRpb24sIHN1cHBvcnQgb3IgdGVsZXBob25lIGFzc2lzdGFuY2UuCisKK1lvdSBtYXkgbm90IHVzZSBvciByZWx5IG9uIHRoZSBUb29sIG9yIHRoZSBCYWJ5bG9uIFdlYnNpdGUgZm9yIGFwcGxpY2F0aW9ucyBvciB1c2UKK3RoYXQgbWF5IHJlc3VsdCBpbiBkYW1hZ2Ugb3IgZm9yIGFwcGxpY2F0aW9ucyBvciB1c2UgdGhhdCBjb250YWluIGluZm9ybWF0aW9uIG9yCitkYXRhIHlvdSBkbyBub3Qgd2lzaCB0byBiZSBmcmVlbHkgYWNjZXNzaWJsZSBhbmQgZ2VuZXJhbGx5IGF2YWlsYWJsZSB0byBJbnRlcm5ldAordXNlcnMuCisKK1ByaXZhY3kgUG9saWN5CisKK1lvdSBoYXZlIHJlYWQsIHVuZGVyc3Rvb2QgYW5kIGFncmVlIHRvIEJhYnlsb24ncyBQcml2YWN5IFN0YXRlbWVudCBhcHBsaWNhYmxlIHRvCit5b3UsIHdoaWNoIGlzIHBhcnQgb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCBpcyBwb3N0ZWQgYXQ6CitodHRwOi8vd3d3LmJhYnlsb24uY29tL2Fib3V0dXMvcHJpdmFjeS5odG1sCisKKworCitDb21wbGlhbmNlIHdpdGggQXBwbGljYWJsZSBMYXdzCisKK1lvdSBhZ3JlZSB0byBjb21wbHkgd2l0aCBhbnkgYXBwbGljYWJsZSBjb3B5cmlnaHQsIHNlY3JlY3ksIGRlZmFtYXRpb24sIGRlY2VuY3ksCitwcml2YWN5LCBleHBvcnQgb3Igb3RoZXIgbGF3cy4gIEJhYnlsb24gaXMgbm90IHJlc3BvbnNpYmxlIGFuZC9vciBsaWFibGUgZm9yIGFueQoraW5mb3JtYXRpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIHRoZSBkYXRhYmFzZXMgYW5kIHVzZXItcG9zdGVkIHdlYnNpdGUKK21hdGVyaWFsLCBzdWJtaXR0ZWQgdG8gdGhlIEJhYnlsb24gV2Vic2l0ZS4gQmFieWxvbiBtYXkgZXJhc2UsIHJlbW92ZSwgZGVsZXRlLAorZGVsYXksIGphbSBvciBhbHRlciBzdWNoIGluZm9ybWF0aW9uIHdpdGhvdXQgcHJpb3Igbm90aWNlLCBmb3IgZnVuY3Rpb25hbCBvciBhbnkKK290aGVyIHJlYXNvbi4KKworQ29weXJpZ2h0LCBDb25maWRlbnRpYWxpdHksIFByb3ByaWV0YXJ5IEluZm9ybWF0aW9uCisKK1RoaXMgQWdyZWVtZW50IGRvZXMgbm90IGdyYW50IHRvIHlvdSBhbnkgcmlnaHRzIHRvIGFueSBwYXRlbnRzLCBjb3B5cmlnaHRzLAordHJhZGUgc2VjcmV0cywgdHJhZGVtYXJrcyAocmVnaXN0ZXJlZCBvciBub3QpIHRyYWRlIG5hbWVzLCBkb21haW4gbmFtZXMgb3IKK2FueSBvdGhlciBwcm9wcmlldGFyeSBtYXRlcmlhbCBvZiBCYWJ5bG9uLiBZb3UgYWdyZWUgbm90IHRvIHJldmVyc2UgZW5naW5lZXIsCittb2RpZnksIGRlLWNvbXBpbGUsIGRpc2Fzc2VtYmxlLCBhbHRlciwgZHVwbGljYXRlLCBkaXN0cmlidXRlLCByZXBhY2thZ2UsIHNlbGwsCitjb3B5LCBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBmcm9tIG9yIHRyYW5zZmVyIHRoZSBHbG9zc2FyeSBTZXJ2aWNlLiBZb3UgYWxzbwordW5kZXJ0YWtlIG5vdCB0byByZW1vdmUgb3IgYWx0ZXIgYW55IHRyYWRlbWFyaywgbG9nbywgY29weXJpZ2h0LCBhZHZlcnRpc2VtZW50CitvciBvdGhlciBwcm9wcmlldGFyeSBub3RpY2VzLCBsZWdlbmRzLCBvciBsYWJlbHMgb24gb3IgaW4gdGhlIEdsb3NzYXJ5IFNlcnZpY2UuCisKK05PIFdBUlJBTlRZLCBMaWFiaWxpdHkKKworWU9VIEVYUFJFU1NMWSBBR1JFRSBUSEFUIFVTRSBPRiBUSEUgVE9PTCBJUyBBVCBZT1VSIFNPTEUKK1JJU0suIFRIRSBUT09MIElTIFBST1ZJREVEIE9OIEFOICJBUyBJUywgQVMgQVZBSUxBQkxFIgorQkFTSVMuICBCQUJZTE9OIE1BS0VTIE5PIFdBUlJBTlRJRVMsIEVYUFJFU1NFRCBPUiBJTVBMSUVELAorSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIT1NFIE9GIE1FUkNIQU5UQUJJTElUWQorQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBXSVRIIFJFU1BFQ1QgVE8gVEhFCitUT09MLCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBCQUJZTE9OIFNFUlZFUlMsCitBTlkgQkFCWUxPTiBTRVJWSUNFLCBPUiBBTlkgSU5GT1JNQVRJT04gUE9TVEVEIEJZIFVTRVJTCitPTiBUSEUgQkFCWUxPTiBXRUJTSVRFIE9SIFVQTE9BREVEIEJZIFVTRVJTIFRPIFRIRSBUT09MLgorQkFCWUxPTiBET0VTIE5PVCBXQVJSQU5ULCBHVUFSQU5URUUgT1IgTUFLRSBBTlkKK1JFUFJFU0VOVEFUSU9OIFJFR0FSRElORyBUSEUgVVNFIE9SIFRIRSBSRVNVTFRTIE9GIFRIRQorVVNFIE9GIFRIRSBUT09MIElOIFRFUk1TIE9GIFRIRSBBQ0NVUkFDWSwgUkVMSUFCSUxJVFksCitRVUFMSVRZLCBWQUxJRElUWSwgU1RBQklMSVRZLCBDT01QTEVURU5FU1MsIENVUlJFTlRORVNTLAorT1IgT1RIRVJXSVNFIE9GIElUUyBDT05URU5UIE9SIFBST0RVQ1RTLiBUSEUgVVNFUiBBU1NVTUVTCitUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFJFU1VMVFMgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRQorVE9PTCBBTkQgU0VSVkVSUy4KKworQmFieWxvbiBkb2VzIG5vdCB3YXJyYW50IG9yIGd1YXJhbnRlZSB0aGF0IHRoZSBmdW5jdGlvbnMgb3IKK3NlcnZpY2VzIHBlcmZvcm1lZCBieSB0aGUgVG9vbCB3aWxsIGJlIHVuaW50ZXJydXB0ZWQgb3IKK2Vycm9yLWZyZWUgb3IgdGhhdCBkZWZlY3RzIGluIHRoZSBUb29sIHdpbGwgYmUgY29ycmVjdGVkLgorQnkgZG93bmxvYWRpbmcgdGhlIFRvb2wgeW91IG1pZ2h0IGJlIGV4cG9zZWQgdG8gaW5mZWN0aW9uCitieSB2aXJ1c2VzLCB3b3JtcywgVHJvamFuIGhvcnNlcyBvciBhbnl0aGluZyBlbHNlIG1hbmlmZXN0aW5nCitjb250YW1pbmF0aW5nIG9yIGRlc3RydWN0aXZlIHByb3BlcnRpZXMuIEl0IGlzIHlvdXIgc29sZQorcmVzcG9uc2liaWxpdHkgdG8gdGFrZSBzdGVwcyB0byBlbnN1cmUgdGhhdCB0aGUgVG9vbCBvcgoraW5mb3JtYXRpb24sIGlmIGNvbnRhbWluYXRlZCBvciBpbmZlY3RlZCwgd2lsbCBub3QgZGFtYWdlCit5b3VyIHN5c3RlbS4KKworSU4gTk8gRVZFTlQgV0lMTCBCQUJZTE9OIEJFIExJQUJMRSBUTyBZT1UgT1IgQU5ZIE9USEVSCitQQVJUWSAoaSkgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBTUEVDSUFMLCBQVU5JVElWRSwKK0lOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIERBTUFHRVMgRk9SIExPU1MgT0YgQlVTSU5FU1MgUFJPRklUUywgQlVTSU5FU1MKK0lOVEVSUlVQVElPTiwgTE9TUyBPRiBQUk9HUkFNUyBPUiBJTkZPUk1BVElPTiwgQU5EIFRIRQorTElLRSksIE9SIEFOWSBPVEhFUiBEQU1BR0VTIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCitBVkFJTEFCSUxJVFksIFVTRSwgUkVMSUFOQ0UgT04sIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFCitUT09MLCBPUiBBTlkgT1RIRVIgSU5GT1JNQVRJT04gUFJPVklERUQgQlkgQkFCWUxPTiBPUiBJVFMKK1VTRVJTLCBFVkVOIElGIEJBQllMT04gU0hBTEwgSEFWRSBCRUVOIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMsIEFORCBSRUdBUkRMRVNTIE9GIFRIRSBGT1JNIE9GCitBQ1RJT04sIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFRPUlQsIE9SIE9USEVSV0lTRTsgT1IKKyhpaSkgRk9SIEFOWSBDTEFJTSBBVFRSSUJVVEFCTEUgVE8gRVJST1JTLCBPTUlTU0lPTlMsIE9SCitPVEhFUiBJTkFDQ1VSQUNJRVMgSU4sIE9SIERFU1RSVUNUSVZFIFBST1BFUlRJRVMgT0YgQU5ZCitJTkZPUk1BVElPTi4gSU4gTk8gRVZFTlQgV0lMTCBCQUJZTE9OJ1MgTElBQklMSVRZIFdJVEgKK1JFU1BFQ1QgVE8gVEhJUyBBR1JFRU1FTlQgRVhDRUVEIFRIRSBBTU9VTlQgWU9VIFBBSUQgKElGCitZT1UgUEFJRCkgVE8gQkFCWUxPTiBGT1IgVEhFIFRPT0wuCisKKworR2VuZXJhbCBUZXJtcworCitZb3UgYWdyZWUgdGhhdCB0aGlzIGFncmVlbWVudCBpcyBub3QgaW50ZW5kZWQgdG8gY29uZmVyLCBhbmQgZG9lcyBub3QgY29uZmVyLCBhbnkKK3JpZ2h0c29yIHJlbWVkaWVzIHVwb24gYW55IHBlcnNvbiBvdGhlciB0aGFuIHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LiBJZiBhbnkKK3BhcnQgb2YgdGhpcyBhZ3JlZW1lbnQgaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUsIHRoYXQgcG9ydGlvbiBzaGFsbCBiZQorY29uc3RydWVkIGluIGEgbWFubmVyIGNvbnNpc3RlbnQgd2l0aCBhcHBsaWNhYmxlIGxhdyB0byByZWZsZWN0LCBhcyBuZWFybHkgYXMgcG9zc2libGUsCit0aGUgb3JpZ2luYWwgaW50ZW50aW9ucyBvZiB0aGUgcGFydGllcywgYW5kIHRoZSByZW1haW5pbmcgcG9ydGlvbnMgc2hhbGwgcmVtYWluIGluIGZ1bGwKK2ZvcmNlIGFuZCBlZmZlY3QuIEJhYnlsb24gbWF5IHRyYW5zZmVyLCBhc3NpZ24gc3VibGljZW5zZSBvciBwbGVkZ2UgaW4gYW55IG1hbm5lcgord2hhdHNvZXZlciwgYW55IG9mIGl0cyByaWdodHMgYW5kIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IHRvIGEgc3Vic2lkaWFyeSwKK2FmZmlsaWF0ZSwgc3VjY2Vzc29yIHRoZXJlb2YsIG9yIHRvIGFueSB0aGlyZCBwYXJ0eSB3aGF0c29ldmVyLCB3aXRob3V0IG5vdGlmeWluZyB5b3Ugb3IKK3JlY2VpdmluZyB5b3VyIGNvbnNlbnQuCVlvdSBzaGFsbCBub3QgdHJhbnNmZXIsIGFzc2lnbiwgc3VibGljZW5zZSBvciBwbGVkZ2UgaW4gYW55CittYW5uZXIgd2hhdHNvZXZlciwgYW55IG9mIHlvdXIgcmlnaHRzIG9yIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgYWdyZWVtZW50LgorCitHb3Zlcm5pbmcgTGF3IGFuZCBKdXJpc2RpY3Rpb24KKworVGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIElzcmFlbCBzaGFsbCBnb3Zlcm4gdGhpcyBBZ3JlZW1lbnQuIFlvdSBleHByZXNzbHkgYWdyZWUgdGhhdAorZXhjbHVzaXZlIGp1cmlzZGljdGlvbiBmb3IgYW55IGNsYWltIG9yIGRpc3B1dGUgd2l0aCBCYWJ5bG9uIGFyaXNpbmcgb3V0IG9mIG9yIGluCitjb25uZWN0aW9uIHdpdGggdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBpdHMgdmFsaWRpdHksIHJlc2lkZXMgaW4gdGhlIGNvbXBldGVudAorY291cnRzIG9mIFRlbCBBdml2LCBJc3JhZWwuIFRoaXMgc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzCithZ3JlZW1lbnQuCisKKworQ29weXJpZ2h0IMKpMTk5Ny0yMDAxIEJhYnlsb24uY29tIEx0ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZAorCisKKworCisJCUFQUEVORElYIEEgLSBDeWRvb3IgVGVjaG5vbG9naWVzIEx0ZC4KKwkJPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1NpbmNlIHlvdSdyZSBhYm91dCB0byBpbnRhbGwgYSBDeWRvb3IgZW5hYmxlZCBhcHBsaWNhdGlvbiwKK3lvdSBtdXN0IHJlYWQgYW5kIGFjY2VwdCB0aGUgZm9sbG93aW5nIC0KKworQ3lkb29yIFRlY2hub2xvZ2llcyBMdGQuIFNvZnR3YXJlIEVuZCBVc2VyIExpY2Vuc2UgQWdyZWVtZW50CisKK0J5IGNsaWNraW5nIG9uIHRoZSAiWWVzIiBidXR0b24sIHlvdSBhcmUgY29uc2VudGluZyB0byBiZQorYm91bmQgYnkgYW5kIGFyZSBiZWNvbWluZyBhIHBhcnR5IHRvIHRoaXMgYWdyZWVtZW50LiBJZiB5b3UKK2RvIG5vdCBhZ3JlZSB0byBhbGwgb2YgdGhlIHRlcm1zIG9mIHRoaXMgYWdyZWVtZW50LCBjbGljawordGhlICJObyIgYnV0dG9uLgorCisxLiBEZWZpbml0aW9uczoKKworKGEpICJDeWRvb3IgU29mdHdhcmUiIG1lYW5zIHRoZSBzb2Z0d2FyZSBwcm9ncmFtIGNvdmVyZWQgYnkKKyAgICB0aGlzIEFncmVlbWVudCwgYW5kIGFsbCByZWxhdGVkIHVwZGF0ZXMgc3VwcGxpZWQgYnkKKyAgICBDeWRvb3IgVGVjaG5vbG9naWVzLgorCisoYikgIkN5ZG9vciBQcm9kdWN0IiBtZWFucyB0aGUgQ3lkb29yIFNvZnR3YXJlIGFuZCBhbnkKKyAgICByZWxhdGVkIGRvY3VtZW50YXRpb24sIG1vZGVscyBhbmQgbXVsdGltZWRpYSBjb250ZW50CisgICAgKHN1Y2ggYXMgYW5pbWF0aW9uLCBzb3VuZCBhbmQgZ3JhcGhpY3MpLCBhbmQgYWxsIHJlbGF0ZWQKKyAgICB1cGRhdGVzIHN1cHBsaWVkIGJ5IEN5ZG9vciBUZWNobm9sb2dpZXMgTHRkIChmb2xsb3dzOgorICAgICJDeWRvb3IiKS4KKworVXBvbiBhY2NlcHRhbmNlIG9mIHRoaXMgYWdyZWVtZW50LCBDeWRvb3IgVGVjaG5vbG9naWVzIGdyYW50cwordG8geW91IGEgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlIHRvIHVzZSB0aGUgU29mdHdhcmUsIHByb3ZpZGVkCit0aGF0IHlvdSBhZ3JlZSB0byB0aGUgZm9sbG93aW5nOgorCisyLiBMaWNlbnNlIEdyYW50OgorCitZb3UgbWF5IGluc3RhbGwgdGhlIFNvZnR3YXJlIG9uIGEgaGFyZCBkaXNrIG9yIG90aGVyIHN0b3JhZ2UKK2RldmljZTsgaW5zdGFsbCBhbmQgdXNlIHRoZSBTb2Z0d2FyZSBvbiBhIGZpbGUgc2VydmVyIGZvciB1c2UKK29uIGEgbmV0d29yayBmb3IgdGhlIHB1cnBvc2VzIG9mIChpKSBwZXJtYW5lbnQgaW5zdGFsbGF0aW9uCitvbnRvIGhhcmQgZGlza3Mgb3Igb3RoZXIgc3RvcmFnZSBkZXZpY2VzIG9yIChpaSkgdXNlIG9mIHRoZQorU29mdHdhcmUgb3ZlciBzdWNoIG5ldHdvcms7IGFuZCBtYWtlIGJhY2t1cCBjb3BpZXMgb2YgdGhlCitTb2Z0d2FyZS4KKworWW91IG1heSBtYWtlIGFuZCBkaXN0cmlidXRlIHVubGltaXRlZCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLAorZXhjbHVkaW5nIGNvcGllcyBmb3IgY29tbWVyY2lhbCBkaXN0cmlidXRpb24sIGFzIGxvbmcgYXMgZWFjaAorY29weSB0aGF0IHlvdSBtYWtlIGFuZC9vciBkaXN0cmlidXRlIGlzIHN1YmplY3QgdG8gdGhpcworQWdyZWVtZW50LCBhbmQgdGhlIHNhbWUgY29weXJpZ2h0IGFuZCBvdGhlciBwcm9wcmlldGFyeQorbm90aWNlcyBwZXJ0YWluaW5nIHRvIHRoaXMgU29mdHdhcmUgdGhhdCBhcHBlYXIgaW4gdGhlCitTb2Z0d2FyZS4gSWYgeW91IGRvd25sb2FkIHRoZSBTb2Z0d2FyZSBmcm9tIHRoZSBJbnRlcm5ldCBvcgorc2ltaWxhciBvbi1saW5lIHNvdXJjZSwgeW91IG11c3QgaW5jbHVkZSB0aGUgQ3lkb29yCitjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgU29mdHdhcmUgd2l0aCBhbnkgb24tbGluZQorZGlzdHJpYnV0aW9uIGFuZCBvbiBhbnkgbWVkaWEgeW91IGRpc3RyaWJ1dGUgdGhhdCBpbmNsdWRlcwordGhlIFNvZnR3YXJlLgorCitUaGlzIExpY2Vuc2UgZG9lcyBub3QgZW50aXRsZSB5b3UgaGFyZC1jb3B5IGRvY3VtZW50YXRpb24sCitzdXBwb3J0IG9yIHRlbGVwaG9uZSBhc3Npc3RhbmNlLiBDeWRvb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0CithdCBhbnkgdGltZSBub3QgdG8gcmVsZWFzZSBhIGNvbW1lcmNpYWwgcmVsZWFzZSBvZiB0aGUKK1NvZnR3YXJlIG9yLCBpZiByZWxlYXNlZCwgdG8gYWx0ZXIgcHJpY2VzLCBmZWF0dXJlcywKK2xpY2Vuc2luZyB0ZXJtcywgb3Igb3RoZXIgY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBjb21tZXJjaWFsCityZWxlYXNlLgorCiszLiBSZXN0cmljdGlvbnM6CisKK1lvdSBtYXkgbm90IHBlcm1pdCBvdGhlciBpbmRpdmlkdWFscyB0byB1c2UgdGhlIFNvZnR3YXJlCitleGNlcHQgdW5kZXIgdGhlIHRlcm1zIGxpc3RlZCBhYm92ZS4gIFlvdSBtYXkgbm90IGNvcHkgdGhlCitTb2Z0d2FyZSBvdGhlciB0aGFuIGFzIHNwZWNpZmllZCBhYm92ZS4gIFlvdSBhZ3JlZSBub3QgdG8KK21vZGlmeSwgYWRhcHQsIHRyYW5zbGF0ZSwgcmV2ZXJzZSBlbmdpbmVlciwgZGVjb21waWxlLAorZGlzYXNzZW1ibGUgb3Igb3RoZXJ3aXNlIGF0dGVtcHQgdG8gZGlzY292ZXIgdGhlIHNvdXJjZSBjb2RlCitvZiB0aGUgU29mdHdhcmUgKGV4Y2VwdCBhbmQgc29sZWx5IHRvIHRoZSBleHRlbnQgYW4KK2FwcGxpY2FibGUgc3RhdHV0ZSBleHByZXNzbHkgYW5kIHNwZWNpZmljYWxseSBwcm9oaWJpdHMgc3VjaAorcmVzdHJpY3Rpb25zKS4gWW91IG1heSBub3QgbW9kaWZ5LCByZW50LCBsZWFzZSwgcmVzZWxsIGZvcgorcHJvZml0LCBkaXN0cmlidXRlIG9yIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIGJhc2VkIHVwb24gdGhlCitDeWRvb3IgUHJvZHVjdCBvciBhbnkgcGFydCB0aGVyZW9mLiAgWW91IG1heSBub3QgZ3JhbnQgYQorc2VjdXJpdHkgaW50ZXJlc3QgaW4sIG9yIG90aGVyd2lzZSB0cmFuc2ZlciByaWdodHMgdG8gdGhlCitTb2Z0d2FyZS4gIFlvdSBtYXkgbm90IHJlbW92ZSBhbnkgcHJvcHJpZXRhcnkgbm90aWNlcyBvcgorbGFiZWxzIG9uIHRoZSBTb2Z0d2FyZS4KKworNC4gRGlzY2xhaW1lciBvZiBXYXJyYW50eToKKworVGhlIHNvZnR3YXJlIGlzIHByb3ZpZGVkIG9uIGFuICJhcyBpcyIgYmFzaXMsIHdpdGhvdXQKK3dhcnJhbnR5IG9mIGFueSBraW5kIGZyb20gQ3lkb29yLCBleHByZXNzIG9yIGltcGxpZWQsCitpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHdhcnJhbnR5IG9mIG1lcmNoYW50YWJpbGl0eSwKK2ZyZWUgb2YgZGVmZWN0cywgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UgYW5kCitub24taW5mcmluZ2VtZW50IG9mIHRoaXJkIHBhcnR5IHJpZ2h0cy4gVGhlIGVudGlyZSByaXNrIGFzIHRvCit0aGUgcXVhbGl0eSBhbmQgcGVyZm9ybWFuY2Ugb2YgdGhlIHNvZnR3YXJlIGlzIGJvcm5lIGJ5IHlvdS4KK1Nob3VsZCB0aGUgc29mdHdhcmUgcHJvdmUgZGVmZWN0aXZlIGluIGFueSByZXNwZWN0LCB5b3UgYW5kCitub3QgQ3lkb29yIG9yIGl0cyBzdXBwbGllcnMgYXNzdW1lIHRoZSBlbnRpcmUgY29zdCBvZiBhbnkKK3NlcnZpY2UgYW5kIHJlcGFpci4KKworVGhpcyBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGNvbnN0aXR1dGVzIGFuIGVzc2VudGlhbCBwYXJ0IG9mCit0aGUgYWdyZWVtZW50LiBObyB1c2Ugb2YgdGhlIHNvZnR3YXJlIGlzIGF1dGhvcml6ZWQgaGVyZXVuZGVyCitleGNlcHQgdW5kZXIgdGhpcyBkaXNjbGFpbWVyLgorCitJbiBubyBldmVudCB3aWxsIEN5ZG9vciBiZSBsaWFibGUgdG8geW91IGZvciBjb25zZXF1ZW50aWFsLAoraW5jaWRlbnRhbCwgc3BlY2lhbCBvciBleGVtcGxhcnkgZGFtYWdlcyBhcmlzaW5nIG91dCBvZiBhCiticmVhY2ggb2YgdGhpcyBhZ3JlZW1lbnQgb3Igd2FycmFudHkgb3IgeW91ciB1c2Ugb2YgdGhlCitzb2Z0d2FyZSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBsb3N0IHByb2ZpdHMgb3IgbG9zcworb2YgYnVzaW5lc3MsIGV2ZW4gaWYgQ3lkb29yIGhhcyBiZWVuIGFwcHJpc2VkIG9mIHRoZQorbGlrZWxpaG9vZCBvZiBzdWNoIGRhbWFnZXMgb2NjdXJyaW5nLgorCitDeWRvb3Igc2hhbGwgaGF2ZSBubyBvYmxpZ2F0aW9uIHRvIHlvdSB3aXRoIHJlc3BlY3QgdG8gYW55CitjbGFpbSBvZiBpbmZyaW5nZW1lbnQgYmFzZWQgdXBvbiB5b3VyIHVzZSBvZiB0aGUgc29mdHdhcmUgaW4KK2NvbWJpbmF0aW9uLCBvcGVyYXRpb24gb3Igb3RoZXJ3aXNlIHdpdGggdGhlIGRhdGEgb3IKK21hdGVyaWFscyBub3Qgc3VwcGxpZWQgYnkgQ3lkb29yLgorCis1LiBEb3dubG9hZGluZyBBZGRpdGlvbmFsIFNvZnR3YXJlOgorCitJbiB0aGUgZXZlbnQgdGhhdCB5b3VyIGNvbXB1dGVyIGxhY2tzIHNvZnR3YXJlIG5lY2Vzc2FyeSBmb3IKK3RoZSBTb2Z0d2FyZSB0byBvcGVyYXRlLCBhIG1lc3NhZ2Ugd2lsbCBhdXRvbWF0aWNhbGx5IGJlIHNlbnQKK2J5IHRoZSBTb2Z0d2FyZSB0byBDeWRvb3IgdGhhdCBhZGRpdGlvbmFsIHNvZnR3YXJlIGlzIG5lZWRlZC4KK0N5ZG9vciB3aWxsIHRoZW4gc2VuZCB5b3UgdGhlIGFkZGl0aW9uYWwgc29mdHdhcmUgcmVxdWlyZWQKK2ZvciBvcGVyYXRpb24gb2YgdGhlIFNvZnR3YXJlLiAgQnkgYWNjZXB0aW5nIHRoaXMgQWdyZWVtZW50LAoreW91IGFncmVlIHRoYXQgdGhlIFNvZnR3YXJlIGFuZCBhbnkgYWRkaXRpb25hbCBzb2Z0d2FyZQorbmVlZGVkIHdpbGwgYmUgZG93bmxvYWRlZCBpbnRvIHlvdXIgY29tcHV0ZXIuCisKKzYuIFRlcm1pbmF0aW9uOgorCitUaGlzIEFncmVlbWVudCBhbmQgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbAordGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYgeW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGhlCitsaW1pdGF0aW9ucyBkZXNjcmliZWQgaGVyZWluLiBVcG9uIHRlcm1pbmF0aW9uLCB5b3UgbXVzdAorZGVzdHJveSBhbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSBhbmQgRG9jdW1lbnRhdGlvbi4KKworNy4gUHJpdmFjeSBBY3Q6CisKK1RoaXMgQWdyZWVtZW50IGlzIHN1YmplY3QgdG8gdGhlIElzcmFlbGkgUHJpdmFjeSBBY3Qgb2YgMTk4MS4KK0N5ZG9vciBzaGFsbCBuZWl0aGVyIGF0dGFpbiBub3IgdXNlIGFueSBvZiB5b3VyIGlkZW50aWZ5aW5nCitjaGFyYWN0ZXJpc3RpY3MuIEluIGFkZGl0aW9uLCBDeWRvb3Igd2lsbCBub3Qgb2J0YWluIGFueQorcGVyc29uYWwgaW5mb3JtYXRpb24gdGhhdCBjb3VsZCBpZGVudGlmeSB5b3UgaW5jbHVkaW5nIHlvdXIKK25hbWUsIHBpY3R1cmUgb3Igdm9pY2UgaW4gb3JkZXIgdG8gbWF0Y2ggc2FpZCBwZXJzb25hbAorY2hhcmFjdGVyaXN0aWNzIHRvIHRoZSBpbmZvcm1hdGlvbiBpbiB0aGUgcmVnaXN0cmF0aW9uIGZvcm0uCitOZXZlcnRoZWxlc3MsIGJ5IGFjY2VwdGluZyB0aGlzIHNvZnR3YXJlLCB5b3UgaGVyZWJ5CithdXRob3JpemUgQ3lkb29yIHRvIHVzZSB0aGUgaW5mb3JtYXRpb24gaW4geW91cgorcmVnaXN0cmF0aW9uIGZvcm0gd2hlbiBzZWxlY3RpbmcgYWR2ZXJ0aXNlbWVudHMgZm9yIHlvdS4KK0N5ZG9vciB3aWxsIHVzZSB0aGUgaW5mb3JtYXRpb24gaW4gdGhlIHJlZ2lzdHJhdGlvbiBmb3JtCitwcm92aWRlZCBieSB5b3Ugc29sZWx5IGZvciB0aGUgcHVycG9zZSBvZiBzZWxlY3Rpbmcgd2hpY2gKK2NvbW1lcmNpYWxzIG1heSwgaW4gQ3lkb29yIG9waW5pb24sIGludGVyZXN0IHlvdSBtb3N0LgorCitCeSBkb3dubG9hZGluZyB0aGUgQ3lkb29yIFByb2R1Y3QsIHlvdSBhcmUgY29uZmlybWluZyB5b3VyCithY2NlcHRhbmNlIG9mIHRoZSBTb2Z0d2FyZSBhbmQgYWdyZWVpbmcgdG8gYmUgYm91bmQgYnkgdGhlCit0ZXJtcyBvZiB0aGlzIEFncmVlbWVudC4KKworOC4gR2VuZXJhbDoKKworVGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mCitJc3JhZWwuIFRoaXMgQWdyZWVtZW50IGNvbnRhaW5zIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQKK2JldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBsaWNlbnNlIGdyYW50ZWQKK2hlcmV1bmRlciBhbmQgc3VwZXJjZWRlcyBhbGwgcHJpb3Igb3IgY29udGVtcG9yYW5lb3VzCithZ3JlZW1lbnRzIG9yIHVuZGVyc3RhbmRpbmdzLCB3aGV0aGVyIG9yYWwgb3Igd3JpdHRlbi4KK1RoaXMgQWdyZWVtZW50IG1heSBiZSBhbWVuZGVkIG9ubHkgYnkgYSB3cml0aW5nIHNpZ25lZCBieSBhbgorYXV0aG9yaXplZCBvZmZpY2VyIG9mIEN5ZG9vci4KKworVGhpcyBBZ3JlZW1lbnQgd2lsbCBub3QgYmUgZ292ZXJuZWQgYnkgdGhlIFVuaXRlZCBOYXRpb25zCitDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcywKK3RoZSBhcHBsaWNhdGlvbiBvZiB3aGljaCBpcyBleHByZXNzbHkgZXhjbHVkZWQuICBZb3UgYWdyZWUKK3RoYXQgdGhlIFNvZnR3YXJlIHdpbGwgbm90IGJlIHNoaXBwZWQsIHRyYW5zZmVycmVkIG9yCitleHBvcnRlZCBpbnRvIGFueSBjb3VudHJ5IG9yIHVzZWQgaW4gYW55IG1hbm5lciwgZGlyZWN0bHkgb3IKK2luZGlyZWN0bHksIHByb2hpYml0ZWQgYnkgdGhlIFVuaXRlZCBTdGF0ZXMgRXhwb3J0CitBZG1pbmlzdHJhdGlvbiBBY3Qgb3IgYW55IG90aGVyIGV4cG9ydCBsYXdzLCByZXN0cmljdGlvbnMgb3IKK3JlZ3VsYXRpb25zLgorCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGhlbGQgdG8gYmUgdm9pZCBhbmQKK3VuZW5mb3JjZWFibGUsIGl0IHdpbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb2YgdGhlIGJhbGFuY2UKK29mIHRoZSBBZ3JlZW1lbnQuICBTdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvCit0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiBUaGlzIEFncmVlbWVudAorc2hhbGwgYmUgZ292ZXJuZWQgYnkgSXNyYWVsaSBsYXcsIGV4Y2x1ZGluZyBjb25mbGljdCBvZiBsYXcKK3Byb3Zpc2lvbnMgKGV4Y2VwdCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3LCBpZiBhbnksCitwcm92aWRlcyBvdGhlcndpc2UpLgorCitNYW51ZmFjdHVyZXI6CisgICAgICAgIEN5ZG9vciBUZWNobm9sb2dpZXMsIDIyIE1hc2tpdCBTdCBIZXJ0emVsaWEsIElzcmFlbC4KKyAgICAgICAgaHR0cDovL3d3dy5jeWRvb3IuY29tCisKK1lvdXIgYWNjZXB0YW5jZSBvZiB0aGUgZm9yZWdvaW5nIGFncmVlbWVudCB3YXMgaW5kaWNhdGVkCitkdXJpbmcgaW5zdGFsbGF0aW9uLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvQml0VG9ycmVudCBiL2xpY2Vuc2VzL0JpdFRvcnJlbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZhYjMwOQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0JpdFRvcnJlbnQKQEAgLTAsMCArMSwzMzEgQEAKK0JpdFRvcnJlbnQgT3BlbiBTb3VyY2UgTGljZW5zZQorCitWZXJzaW9uIDEuMAorCitUaGlzIEJpdFRvcnJlbnQgT3BlbiBTb3VyY2UgTGljZW5zZSAodGhlICJMaWNlbnNlIikgYXBwbGllcyB0byB0aGUgQml0VG9ycmVudCBjbGllbnQgYW5kIHJlbGF0ZWQgc29mdHdhcmUgcHJvZHVjdHMgYXMKK3dlbGwgYXMgYW55IHVwZGF0ZXMgb3IgbWFpbnRlbmFuY2UgcmVsZWFzZXMgb2YgdGhhdCBzb2Z0d2FyZSAoIkJpdFRvcnJlbnQgUHJvZHVjdHMiKSB0aGF0IGFyZSBkaXN0cmlidXRlZCBieQorQml0VG9ycmVudCwgSW5jLiAoIkxpY2Vuc29yIikuICBBbnkgQml0VG9ycmVudCBQcm9kdWN0IGxpY2Vuc2VkIHB1cnN1YW50IHRvIHRoaXMgTGljZW5zZSBpcyBhIExpY2Vuc2VkIFByb2R1Y3QuCitMaWNlbnNlZCBQcm9kdWN0LCBpbiBpdHMgZW50aXJldHksIGlzIHByb3RlY3RlZCBieSBVLlMuIGNvcHlyaWdodCBsYXcuICBUaGlzIExpY2Vuc2UgaWRlbnRpZmllcyB0aGUgdGVybXMgdW5kZXIgd2hpY2gKK3lvdSBtYXkgdXNlLCBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSBMaWNlbnNlZCBQcm9kdWN0LiAKKworUHJlYW1ibGUKKworVGhpcyBQcmVhbWJsZSBpcyBpbnRlbmRlZCB0byBkZXNjcmliZSwgaW4gcGxhaW4gRW5nbGlzaCwgdGhlIG5hdHVyZSBhbmQgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLiAgSG93ZXZlciwgdGhpcworUHJlYW1ibGUgaXMgbm90IGEgcGFydCBvZiB0aGlzIGxpY2Vuc2UuICBUaGUgbGVnYWwgZWZmZWN0IG9mIHRoaXMgTGljZW5zZSBpcyBkZXBlbmRlbnQgb25seSB1cG9uIHRoZSB0ZXJtcyBvZiB0aGUKK0xpY2Vuc2UgYW5kIG5vdCB0aGlzIFByZWFtYmxlLgorCitUaGlzIExpY2Vuc2UgY29tcGxpZXMgd2l0aCB0aGUgT3BlbiBTb3VyY2UgRGVmaW5pdGlvbiBhbmQgaXMgZGVyaXZlZCBmcm9tIHRoZSBKYWJiZXIgT3BlbiBTb3VyY2UgTGljZW5zZSAxLjAgKHRoZQorIkpPU0wiKSwgd2hpY2ggaGFzIGJlZW4gYXBwcm92ZWQgYnkgT3BlbiBTb3VyY2UgSW5pdGlhdGl2ZS4gU2VjdGlvbnMgNChjKSBhbmQgNChmKShpaWkpIGZyb20gdGhlIEpPU0wgaGF2ZSBiZWVuCitkcm9wcGVkLgorCitUaGlzIExpY2Vuc2UgcHJvdmlkZXMgdGhhdDoKKworMS4gICAgICBZb3UgbWF5IHVzZSwgc2VsbCBvciBnaXZlIGF3YXkgdGhlIExpY2Vuc2VkIFByb2R1Y3QsIGFsb25lIG9yIGFzIGEgY29tcG9uZW50IG9mIGFuIGFnZ3JlZ2F0ZSBzb2Z0d2FyZQorZGlzdHJpYnV0aW9uIGNvbnRhaW5pbmcgcHJvZ3JhbXMgZnJvbSBzZXZlcmFsIGRpZmZlcmVudCBzb3VyY2VzLiAgTm8gcm95YWx0eSBvciBvdGhlciBmZWUgaXMgcmVxdWlyZWQuCisKKzIuICAgICAgQm90aCBTb3VyY2UgQ29kZSBhbmQgZXhlY3V0YWJsZSB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZWQgUHJvZHVjdCwgaW5jbHVkaW5nIE1vZGlmaWNhdGlvbnMgbWFkZSBieSBwcmV2aW91cworQ29udHJpYnV0b3JzLCBhcmUgYXZhaWxhYmxlIGZvciB5b3VyIHVzZS4gIChUaGUgdGVybXMgIkxpY2Vuc2VkIFByb2R1Y3QsIiAiTW9kaWZpY2F0aW9ucywiICJDb250cmlidXRvcnMiIGFuZCAiU291cmNlCitDb2RlIiBhcmUgZGVmaW5lZCBpbiB0aGUgTGljZW5zZS4pCisKKzMuICAgICAgWW91IGFyZSBhbGxvd2VkIHRvIG1ha2UgTW9kaWZpY2F0aW9ucyB0byB0aGUgTGljZW5zZWQgUHJvZHVjdCwgYW5kIHlvdSBjYW4gY3JlYXRlIERlcml2YXRpdmUgV29ya3MgZnJvbSBpdC4KKyhUaGUgdGVybSAiRGVyaXZhdGl2ZSBXb3JrcyIgaXMgZGVmaW5lZCBpbiB0aGUgTGljZW5zZS4pCisKKzQuICAgICAgQnkgYWNjZXB0aW5nIHRoZSBMaWNlbnNlZCBQcm9kdWN0IHVuZGVyIHRoZSBwcm92aXNpb25zIG9mIHRoaXMgTGljZW5zZSwgeW91IGFncmVlIHRoYXQgYW55IE1vZGlmaWNhdGlvbnMgeW91CittYWtlIHRvIHRoZSBMaWNlbnNlZCBQcm9kdWN0IGFuZCB0aGVuIGRpc3RyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5IHRoZSBwcm92aXNpb25zIG9mIHRoaXMgTGljZW5zZS4gIEluIHBhcnRpY3VsYXIsIHlvdQorbXVzdCBtYWtlIHRoZSBTb3VyY2UgQ29kZSBvZiB5b3VyIE1vZGlmaWNhdGlvbnMgYXZhaWxhYmxlIHRvIG90aGVycy4KKworNS4gICAgICBZb3UgbWF5IHVzZSB0aGUgTGljZW5zZWQgUHJvZHVjdCBmb3IgYW55IHB1cnBvc2UsIGJ1dCB0aGUgTGljZW5zb3IgaXMgbm90IHByb3ZpZGluZyB5b3UgYW55IHdhcnJhbnR5Cit3aGF0c29ldmVyLCBub3IgaXMgdGhlIExpY2Vuc29yIGFjY2VwdGluZyBhbnkgbGlhYmlsaXR5IGluIHRoZSBldmVudCB0aGF0IHRoZSBMaWNlbnNlZCBQcm9kdWN0IGRvZXNuJ3Qgd29yayBwcm9wZXJseQorb3IgY2F1c2VzIHlvdSBhbnkgaW5qdXJ5IG9yIGRhbWFnZXMuCisKKzYuICAgICAgSWYgeW91IHN1YmxpY2Vuc2UgdGhlIExpY2Vuc2VkIFByb2R1Y3Qgb3IgRGVyaXZhdGl2ZSBXb3JrcywgeW91IG1heSBjaGFyZ2UgZmVlcyBmb3Igd2FycmFudHkgb3Igc3VwcG9ydCwgb3IKK2ZvciBhY2NlcHRpbmcgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byB5b3VyIGN1c3RvbWVycy4gIFlvdSBjYW5ub3QgY2hhcmdlIGZvciB0aGUgU291cmNlIENvZGUuCisKKzcuICAgICAgSWYgeW91IGFzc2VydCBhbnkgcGF0ZW50IGNsYWltcyBhZ2FpbnN0IHRoZSBMaWNlbnNvciByZWxhdGluZyB0byB0aGUgTGljZW5zZWQgUHJvZHVjdCwgb3IgaWYgeW91IGJyZWFjaCBhbnkKK3Rlcm1zIG9mIHRoZSBMaWNlbnNlLCB5b3VyIHJpZ2h0cyB0byB0aGUgTGljZW5zZWQgUHJvZHVjdCB1bmRlciB0aGlzIExpY2Vuc2UgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUuCisKK1lvdSBtYXkgdXNlIHRoaXMgTGljZW5zZSB0byBkaXN0cmlidXRlIHlvdXIgb3duIERlcml2YXRpdmUgV29ya3MsIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgdGhpcyBMaWNlbnNlIHdpbGwKK2FwcGx5IHRvIHlvdXIgRGVyaXZhdGl2ZSBXb3JrcyBqdXN0IGFzIHRoZXkgZG8gdG8gdGhlIG9yaWdpbmFsIExpY2Vuc2VkIFByb2R1Y3QuCisKK0FsdGVybmF0aXZlbHksIHlvdSBtYXkgZGlzdHJpYnV0ZSB5b3VyIERlcml2YXRpdmUgV29ya3MgdW5kZXIgYW55IG90aGVyIE9TSS1hcHByb3ZlZCBPcGVuIFNvdXJjZSBsaWNlbnNlLCBvciB1bmRlciBhCitwcm9wcmlldGFyeSBsaWNlbnNlIG9mIHlvdXIgY2hvaWNlLiAgSWYgeW91IHVzZSBhbnkgbGljZW5zZSBvdGhlciB0aGFuIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgeW91IG11c3QgY29udGludWUgdG8KK2Z1bGZpbGwgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgKGluY2x1ZGluZyB0aGUgcHJvdmlzaW9ucyByZWxhdGluZyB0byBwdWJsaXNoaW5nIHRoZSBTb3VyY2UgQ29kZSkgZm9yIHRob3NlCitwb3J0aW9ucyBvZiB5b3VyIERlcml2YXRpdmUgV29ya3MgdGhhdCBjb25zaXN0IG9mIHRoZSBMaWNlbnNlZCBQcm9kdWN0LCBpbmNsdWRpbmcgdGhlIGZpbGVzIGNvbnRhaW5pbmcgTW9kaWZpY2F0aW9ucy4KKworTmV3IHZlcnNpb25zIG9mIHRoaXMgTGljZW5zZSBtYXkgYmUgcHVibGlzaGVkIGZyb20gdGltZSB0byB0aW1lLiAgWW91IG1heSBjaG9vc2UgdG8gIGNvbnRpbnVlIHRvIHVzZSB0aGUgbGljZW5zZQordGVybXMgaW4gdGhpcyB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIG9yIHRob3NlIGZyb20gdGhlIG5ldyB2ZXJzaW9uLiAgSG93ZXZlciwgb25seSB0aGUgTGljZW5zb3IgaGFzIHRoZSByaWdodCB0bworY2hhbmdlIHRoZSBMaWNlbnNlIHRlcm1zIGFzIHRoZXkgYXBwbHkgdG8gdGhlIExpY2Vuc2VkIFByb2R1Y3QuIAorCitUaGlzIExpY2Vuc2UgcmVsaWVzIG9uIHByZWNpc2UgZGVmaW5pdGlvbnMgZm9yIGNlcnRhaW4gdGVybXMuICBUaG9zZSB0ZXJtcyBhcmUgZGVmaW5lZCB3aGVuIHRoZXkgYXJlIGZpcnN0IHVzZWQsIGFuZAordGhlIGRlZmluaXRpb25zIGFyZSByZXBlYXRlZCBmb3IgeW91ciBjb252ZW5pZW5jZSBpbiBhIEdsb3NzYXJ5IGF0IHRoZSBlbmQgb2YgdGhlIExpY2Vuc2UuCisKKworTGljZW5zZSBUZXJtcworCisxLiAgICAgIEdyYW50IG9mIExpY2Vuc2UgRnJvbSBMaWNlbnNvci4gIExpY2Vuc29yIGhlcmVieSBncmFudHMgeW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlCitsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisKK2EuICAgICAgIFVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgYW55IE1vZGlmaWNhdGlvbnMgY3JlYXRlZCBieSBzdWNoCitDb250cmlidXRvciBvciBwb3J0aW9ucyB0aGVyZW9mLCBpbiBib3RoIFNvdXJjZSBDb2RlIG9yIGFzIGFuIGV4ZWN1dGFibGUgcHJvZ3JhbSwgZWl0aGVyIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMgb3IgYXMKK3BhcnQgb2YgRGVyaXZhdGl2ZSBXb3Jrcy4KKworYi4gICAgICAgVW5kZXIgY2xhaW1zIG9mIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5IENvbnRyaWJ1dG9yLCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvcgorc2FsZSwgaGF2ZSBtYWRlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgTW9kaWZpY2F0aW9ucyBvciBwb3J0aW9ucyB0aGVyZW9mLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkKK3N1Y2ggY2xhaW0gaXMgbmVjZXNzYXJ5IHRvIGVuYWJsZSB5b3UgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZSBtYWRlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YKK01vZGlmaWNhdGlvbnMgb3IgcG9ydGlvbnMgdGhlcmVvZiBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YuCisKKworMi4gR3JhbnQgb2YgTGljZW5zZSB0byBNb2RpZmljYXRpb25zIEZyb20gQ29udHJpYnV0b3IuICJNb2RpZmljYXRpb25zIiBtZWFucyBhbnkgYWRkaXRpb25zIHRvIG9yIGRlbGV0aW9ucyBmcm9tIHRoZQorc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiAoaSkgYSBmaWxlIGNvbnRhaW5pbmcgTGljZW5zZWQgUHJvZHVjdCwgb3IgKGlpKSBhbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZgorTGljZW5zZWQgUHJvZHVjdC4gSGVyZWluYWZ0ZXIgaW4gdGhpcyBMaWNlbnNlLCB0aGUgdGVybSAiTGljZW5zZWQgUHJvZHVjdCIgc2hhbGwgaW5jbHVkZSBhbGwgcHJldmlvdXMgTW9kaWZpY2F0aW9ucwordGhhdCB5b3UgcmVjZWl2ZSBmcm9tIGFueSBDb250cmlidXRvci4gQnkgYXBwbGljYXRpb24gb2YgdGhlIHByb3Zpc2lvbnMgaW4gU2VjdGlvbiA0KGEpIGJlbG93LCBlYWNoIHBlcnNvbiBvciBlbnRpdHkKK3dobyBjcmVhdGVkIG9yIGNvbnRyaWJ1dGVkIHRvIHRoZSBjcmVhdGlvbiBvZiwgYW5kIGRpc3RyaWJ1dGVkLCBhIE1vZGlmaWNhdGlvbiAoYSAiQ29udHJpYnV0b3IiKSBoZXJlYnkgZ3JhbnRzIHlvdSBhCit3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zLCB0byBkbyB0aGUKK2ZvbGxvd2luZzoKKworICAgMS4gVXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSBhbnkgTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IHN1Y2gKK0NvbnRyaWJ1dG9yIG9yIHBvcnRpb25zIHRoZXJlb2YsIGluIGJvdGggU291cmNlIENvZGUgb3IgYXMgYW4gZXhlY3V0YWJsZSBwcm9ncmFtLCBlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcyBvciBhcworcGFydCBvZiBEZXJpdmF0aXZlIFdvcmtzLgorCisgICAyLiBVbmRlciBjbGFpbXMgb2YgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgQ29udHJpYnV0b3IsIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yCitzYWxlLCBoYXZlIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiBNb2RpZmljYXRpb25zIG9yIHBvcnRpb25zIHRoZXJlb2YsIGJ1dCBzb2xlbHkgdG8gdGhlIGV4dGVudCB0aGF0IGFueQorc3VjaCBjbGFpbSBpcyBuZWNlc3NhcnkgdG8gZW5hYmxlIHlvdSB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZgorTW9kaWZpY2F0aW9ucyBvciBwb3J0aW9ucyB0aGVyZW9mIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZi4gCisKKworMy4gICAgICBFeGNsdXNpb25zIEZyb20gTGljZW5zZSBHcmFudC4gIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB0byBncmFudCBhbnkgcmlnaHRzIHRvIHRyYWRlbWFya3MsCitjb3B5cmlnaHRzLCBwYXRlbnRzLCB0cmFkZSBzZWNyZXRzIG9yIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgTGljZW5zb3Igb3IgYW55IENvbnRyaWJ1dG9yIGV4Y2VwdCBhcworZXhwcmVzc2x5IHN0YXRlZCBoZXJlaW4uIE5vIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQgc2VwYXJhdGUgZnJvbSB0aGUgTGljZW5zZWQgUHJvZHVjdCwgZm9yIGNvZGUgdGhhdCB5b3UgZGVsZXRlCitmcm9tIHRoZSBMaWNlbnNlZCBQcm9kdWN0LCBvciBmb3IgY29tYmluYXRpb25zIG9mIHRoZSBMaWNlbnNlZCBQcm9kdWN0IHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUuICBObyByaWdodCBpcworZ3JhbnRlZCB0byB0aGUgdHJhZGVtYXJrcyBvZiBMaWNlbnNvciBvciBhbnkgQ29udHJpYnV0b3IgZXZlbiBpZiBzdWNoIG1hcmtzIGFyZSBpbmNsdWRlZCBpbiB0aGUgTGljZW5zZWQgUHJvZHVjdC4KK05vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGludGVycHJldGVkIHRvIHByb2hpYml0IExpY2Vuc29yIGZyb20gbGljZW5zaW5nIHVuZGVyIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRoaXMKK0xpY2Vuc2UgYW55IGNvZGUgdGhhdCBMaWNlbnNvciBvdGhlcndpc2Ugd291bGQgaGF2ZSBhIHJpZ2h0IHRvIGxpY2Vuc2UuCisKKworNC4gICAgICBZb3VyIE9ibGlnYXRpb25zIFJlZ2FyZGluZyBEaXN0cmlidXRpb24uIAorCithLiAgICAgICBBcHBsaWNhdGlvbiBvZiBUaGlzIExpY2Vuc2UgdG8gWW91ciBNb2RpZmljYXRpb25zLiAgQXMgYW4gZXhwcmVzcyBjb25kaXRpb24gZm9yIHlvdXIgdXNlIG9mIHRoZSBMaWNlbnNlZAorUHJvZHVjdCwgeW91IGhlcmVieSBhZ3JlZSB0aGF0IGFueSBNb2RpZmljYXRpb25zIHRoYXQgeW91IGNyZWF0ZSBvciB0byB3aGljaCB5b3UgY29udHJpYnV0ZSwgYW5kIHdoaWNoIHlvdQorZGlzdHJpYnV0ZSwgYXJlIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIFNlY3Rpb24gMi4gIEFueSBNb2RpZmljYXRpb25zCit0aGF0IHlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggeW91IGNvbnRyaWJ1dGUgbWF5IGJlIGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZQordmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcmVsZWFzZWQgdW5kZXIgU2VjdGlvbiA3LiAgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUKK01vZGlmaWNhdGlvbnMgeW91IGRpc3RyaWJ1dGUuICBZb3UgYWdyZWUgbm90IHRvIG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gYW55IFNvdXJjZSBDb2RlIG9yIGV4ZWN1dGFibGUgdmVyc2lvbiBvZgordGhlIExpY2Vuc2VkIFByb2R1Y3Qgb3IgTW9kaWZpY2F0aW9ucyB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZQorcmVjaXBpZW50cycgcmlnaHRzIGhlcmV1bmRlci4gSG93ZXZlciwgeW91IG1heSBpbmNsdWRlIGFuIGFkZGl0aW9uYWwgZG9jdW1lbnQgb2ZmZXJpbmcgdGhlIGFkZGl0aW9uYWwgcmlnaHRzCitkZXNjcmliZWQgaW4gU2VjdGlvbiA0KGQpLgorCitiLiAgICAgICBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuICBZb3UgbXVzdCBtYWtlIGF2YWlsYWJsZSwgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgdGhlIFNvdXJjZSBDb2RlIG9mCit0aGUgTGljZW5zZWQgUHJvZHVjdCBhbmQgYW55IE1vZGlmaWNhdGlvbnMgdGhhdCB5b3UgZGlzdHJpYnV0ZSwgZWl0aGVyIG9uIHRoZSBzYW1lIG1lZGlhIGFzIHlvdSBkaXN0cmlidXRlIGFueQorZXhlY3V0YWJsZSBvciBvdGhlciBmb3JtIG9mIHRoZSBMaWNlbnNlZCBQcm9kdWN0LCBvciB2aWEgYSBtZWNoYW5pc20gZ2VuZXJhbGx5IGFjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudAorY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYyB0cmFuc2ZlciBvZiBkYXRhIChhbiAiRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIikuICBUaGUgU291cmNlIENvZGUgZm9yIGFueQordmVyc2lvbiBvZiBMaWNlbnNlZCBQcm9kdWN0IG9yIE1vZGlmaWNhdGlvbnMgdGhhdCB5b3UgZGlzdHJpYnV0ZSBtdXN0IHJlbWFpbiBhdmFpbGFibGUgZm9yIGF0IGxlYXN0IHR3ZWx2ZSAoMTIpCittb250aHMgYWZ0ZXIgdGhlIGRhdGUgaXQgaW5pdGlhbGx5IGJlY2FtZSBhdmFpbGFibGUsIG9yIGF0IGxlYXN0IHNpeCAoNikgbW9udGhzIGFmdGVyIGEgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHNhaWQKK0xpY2Vuc2VkIFByb2R1Y3Qgb3IgTW9kaWZpY2F0aW9ucyBoYXMgYmVlbiBtYWRlIGF2YWlsYWJsZS4gIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlCit2ZXJzaW9uIHJlbWFpbnMgYXZhaWxhYmxlIGV2ZW4gaWYgdGhlIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSBpcyBtYWludGFpbmVkIGJ5IGEgdGhpcmQgcGFydHkuCisKK2MuICAgICAgIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzLiAgCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaS4gICAgICAgICAgICBUaGlyZCBQYXJ0eSBDbGFpbXMuICBJZiB5b3UgaGF2ZSBrbm93bGVkZ2UgdGhhdCBhIGxpY2Vuc2UgdG8gYSB0aGlyZAorcGFydHkncyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHQgaXMgcmVxdWlyZWQgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZSwgeW91IG11c3QgaW5jbHVkZSBhCit0ZXh0IGZpbGUgd2l0aCB0aGUgU291cmNlIENvZGUgZGlzdHJpYnV0aW9uIHRpdGxlZCAiTEVHQUwiIHRoYXQgZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQgdGhlIHBhcnR5IG1ha2luZyB0aGUgY2xhaW0gaW4KK3N1ZmZpY2llbnQgZGV0YWlsIHRoYXQgYSByZWNpcGllbnQgd2lsbCBrbm93IHdob20gdG8gY29udGFjdC4gIElmIHlvdSBvYnRhaW4gc3VjaCBrbm93bGVkZ2UgYWZ0ZXIgeW91IG1ha2UgYW55CitNb2RpZmljYXRpb25zIGF2YWlsYWJsZSBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiA0KGIpLCB5b3Ugc2hhbGwgcHJvbXB0bHkgbW9kaWZ5IHRoZSBMRUdBTCBmaWxlIGluIGFsbCBjb3BpZXMgeW91IG1ha2UKK2F2YWlsYWJsZSB0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlIG90aGVyIHN0ZXBzIChzdWNoIGFzIG5vdGlmeWluZyBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3RzIG9yIG5ld3Nncm91cHMpCityZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobyByZWNlaXZlZCB0aGUgTGljZW5zZWQgUHJvZHVjdCBmcm9tIHlvdSB0aGF0IG5ldyBrbm93bGVkZ2UgaGFzIGJlZW4KK29idGFpbmVkLgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWkuICAgICAgICAgICAgQ29udHJpYnV0b3IgQVBJcy4gIElmIHlvdXIgTW9kaWZpY2F0aW9ucyBpbmNsdWRlIGFuIGFwcGxpY2F0aW9uCitwcm9ncmFtbWluZyBpbnRlcmZhY2UgKCJBUEkiKSBhbmQgeW91IGhhdmUga25vd2xlZGdlIG9mIHBhdGVudCBsaWNlbnNlcyB0aGF0IGFyZSByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBpbXBsZW1lbnQKK3RoYXQgQVBJLCB5b3UgbXVzdCBhbHNvIGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUgTEVHQUwgZmlsZS4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWlpLiAgICAgICAgICAgIFJlcHJlc2VudGF0aW9ucy4gIFlvdSByZXByZXNlbnQgdGhhdCwgZXhjZXB0IGFzIGRpc2Nsb3NlZCBwdXJzdWFudCB0bworNChjKShpKSBhYm92ZSwgeW91IGJlbGlldmUgdGhhdCBhbnkgTW9kaWZpY2F0aW9ucyB5b3UgZGlzdHJpYnV0ZSBhcmUgeW91ciBvcmlnaW5hbCBjcmVhdGlvbnMgYW5kIHRoYXQgeW91IGhhdmUKK3N1ZmZpY2llbnQgcmlnaHRzIHRvIGdyYW50IHRoZSByaWdodHMgY29udmV5ZWQgYnkgdGhpcyBMaWNlbnNlLgorCitkLiAgICAgICBSZXF1aXJlZCBOb3RpY2VzLiAgWW91IG11c3QgZHVwbGljYXRlIHRoaXMgTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbiB5b3UgcHJvdmlkZSBhbG9uZyB3aXRoIHRoZSBTb3VyY2UKK0NvZGUgb2YgYW55IE1vZGlmaWNhdGlvbnMgeW91IGNyZWF0ZSBvciB0byB3aGljaCB5b3UgY29udHJpYnV0ZSwgYW5kIHdoaWNoIHlvdSBkaXN0cmlidXRlLCB3aGVyZXZlciB5b3UgZGVzY3JpYmUKK3JlY2lwaWVudHMnIHJpZ2h0cyByZWxhdGluZyB0byBMaWNlbnNlZCBQcm9kdWN0LiAgWW91IG11c3QgZHVwbGljYXRlIHRoZSBub3RpY2UgY29udGFpbmVkIGluIEV4aGliaXQgQSAodGhlICJOb3RpY2UiKQoraW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZSBvZiBhbnkgY29weSB5b3UgZGlzdHJpYnV0ZSBvZiB0aGUgTGljZW5zZWQgUHJvZHVjdC4gSWYgeW91IGNyZWF0ZWQgYSBNb2RpZmljYXRpb24sCit5b3UgbWF5IGFkZCB5b3VyIG5hbWUgYXMgYSBDb250cmlidXRvciB0byB0aGUgTm90aWNlLiAgSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCB0aGUgTm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UKK0NvZGUgZmlsZSBkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbiB5b3UgbXVzdCBpbmNsdWRlIHN1Y2ggTm90aWNlIGluIGEgbG9jYXRpb24gKHN1Y2ggYXMgYSByZWxldmFudCBkaXJlY3RvcnkgZmlsZSkKK3doZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4gIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksCitzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgTGljZW5zZWQgUHJvZHVjdC4gSG93ZXZlciwgeW91IG1heSBkbyBzbworb25seSBvbiB5b3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZSBMaWNlbnNvciBvciBhbnkgQ29udHJpYnV0b3IuICBZb3UgbXVzdCBtYWtlIGl0IGNsZWFyIHRoYXQgYW55IHN1Y2gKK3dhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMgb2ZmZXJlZCBieSB5b3UgYWxvbmUsIGFuZCB5b3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUKK0xpY2Vuc29yIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgTGljZW5zb3Igb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZgord2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgeW91IG9mZmVyLgorCitlLiAgICAgICAgRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgVmVyc2lvbnMuICBZb3UgbWF5IGRpc3RyaWJ1dGUgTGljZW5zZWQgUHJvZHVjdCBhcyBhbiBleGVjdXRhYmxlIHByb2dyYW0gdW5kZXIgYQorbGljZW5zZSBvZiB5b3VyIGNob2ljZSB0aGF0IG1heSBjb250YWluIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSBwcm92aWRlZCAoaSkgeW91IGhhdmUgc2F0aXNmaWVkIHRoZQorcmVxdWlyZW1lbnRzIG9mIFNlY3Rpb25zIDQoYSkgdGhyb3VnaCA0KGQpIGZvciB0aGF0IGRpc3RyaWJ1dGlvbiwgKGlpKSB5b3UgaW5jbHVkZSBhIGNvbnNwaWN1b3VzIG5vdGljZSBpbiB0aGUKK2V4ZWN1dGFibGUgdmVyc2lvbiwgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGFuZCBjb2xsYXRlcmFsIG1hdGVyaWFscyBzdGF0aW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgdGhlCitMaWNlbnNlZCBQcm9kdWN0IGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgYSBkZXNjcmlwdGlvbiBvZiBob3cgYW5kIHdoZXJlIHlvdSBoYXZlCitmdWxmaWxsZWQgdGhlIG9ibGlnYXRpb25zIG9mIFNlY3Rpb24gNChiKSwgYW5kIChpaWkpIHlvdSBtYWtlIGl0IGNsZWFyIHRoYXQgYW55IHRlcm1zIHRoYXQgZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlCithcmUgb2ZmZXJlZCBieSB5b3UgYWxvbmUsIG5vdCBieSBMaWNlbnNvciBvciBhbnkgQ29udHJpYnV0b3IuICBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgTGljZW5zb3IgYW5kIGV2ZXJ5CitDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSBMaWNlbnNvciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIGFueSB0ZXJtcyB5b3Ugb2ZmZXIuIAorCitmLiAgICAgICBEaXN0cmlidXRpb24gb2YgRGVyaXZhdGl2ZSBXb3Jrcy4gIFlvdSBtYXkgY3JlYXRlIERlcml2YXRpdmUgV29ya3MgKGUuZy4sIGNvbWJpbmF0aW9ucyBvZiBzb21lIG9yIGFsbCBvZiB0aGUKK0xpY2Vuc2VkIFByb2R1Y3Qgd2l0aCBvdGhlciBjb2RlKSBhbmQgZGlzdHJpYnV0ZSB0aGUgRGVyaXZhdGl2ZSBXb3JrcyBhcyBwcm9kdWN0cyB1bmRlciBhbnkgb3RoZXIgbGljZW5zZSB5b3Ugc2VsZWN0LAord2l0aCB0aGUgcHJvdmlzbyB0aGF0IHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRob3NlIHBvcnRpb25zIG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQKK2NvbnNpc3Qgb2YgdGhlIExpY2Vuc2VkIFByb2R1Y3Qgb3IgYW55IE1vZGlmaWNhdGlvbnMgdGhlcmV0by4gCisKKworNS4gICAgICBJbmFiaWxpdHkgdG8gQ29tcGx5IER1ZSB0byBTdGF0dXRlIG9yIFJlZ3VsYXRpb24uICBJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciB5b3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZQordGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgTGljZW5zZWQgUHJvZHVjdCBkdWUgdG8gc3RhdHV0ZSwganVkaWNpYWwgb3JkZXIsIG9yCityZWd1bGF0aW9uLCB0aGVuIHlvdSBtdXN0IChpKSBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZSwgKGlpKSBjaXRlIHRoZQorc3RhdHV0ZSBvciByZWd1bGF0aW9uIHRoYXQgcHJvaGliaXRzIHlvdSBmcm9tIGFkaGVyaW5nIHRvIHRoZSBMaWNlbnNlLCBhbmQgKGlpaSkgZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUKK2NvZGUgdGhleSBhZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgTEVHQUwgZmlsZSBkZXNjcmliZWQgaW4gU2VjdGlvbiA0KGQpLCBhbmQgbXVzdCBiZSBpbmNsdWRlZAord2l0aCBhbGwgZGlzdHJpYnV0aW9ucyBvZiB0aGUgU291cmNlIENvZGUuICBFeGNlcHQgdG8gdGhlIGV4dGVudCBwcm9oaWJpdGVkIGJ5IHN0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaAorZGVzY3JpcHRpb24gbXVzdCBiZSBzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEgcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIGF0IGNvbXB1dGVyIHByb2dyYW1taW5nIHRvIGJlIGFibGUgdG8KK3VuZGVyc3RhbmQgaXQuIAorCisKKzYuICAgICAgQXBwbGljYXRpb24gb2YgVGhpcyBMaWNlbnNlLiAgVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gY29kZSB0byB3aGljaCBMaWNlbnNvciBvciBDb250cmlidXRvciBoYXMgYXR0YWNoZWQgdGhlCitOb3RpY2UgaW4gRXhoaWJpdCBBLCB3aGljaCBpcyBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHRoaXMgcmVmZXJlbmNlLgorCisKKzcuICAgICAgVmVyc2lvbnMgb2YgVGhpcyBMaWNlbnNlLgorCithLiAgICAgICBOZXcgVmVyc2lvbnMuICBMaWNlbnNvciBtYXkgcHVibGlzaCBmcm9tIHRpbWUgdG8gdGltZSByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuIAorCitiLiAgICAgICBFZmZlY3Qgb2YgTmV3IFZlcnNpb25zLiAgT25jZSBMaWNlbnNlZCBQcm9kdWN0IGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSwKK3lvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiAgWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBMaWNlbnNlZCBQcm9kdWN0Cit1bmRlciB0aGUgdGVybXMgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBwdWJsaXNoZWQgYnkgTGljZW5zb3IuICBObyBvbmUgb3RoZXIgdGhhbiBMaWNlbnNvciBoYXMgdGhlCityaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gTGljZW5zZWQgUHJvZHVjdCBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KKworYy4gICAgICAgRGVyaXZhdGl2ZSBXb3JrcyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY3JlYXRlIG9yIHVzZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlLCB3aGljaCB5b3UgbWF5IGRvCitvbmx5IGluIG9yZGVyIHRvIGFwcGx5IGl0IHRvIHNvZnR3YXJlIHRoYXQgaXMgbm90IGFscmVhZHkgYSBMaWNlbnNlZCBQcm9kdWN0IHVuZGVyIHRoaXMgTGljZW5zZSwgeW91IG11c3QgcmVuYW1lIHlvdXIKK2xpY2Vuc2Ugc28gdGhhdCBpdCBpcyBub3QgY29uZnVzaW5nbHkgc2ltaWxhciB0byB0aGlzIExpY2Vuc2UsIGFuZCBtdXN0IG1ha2UgaXQgY2xlYXIgdGhhdCB5b3VyIGxpY2Vuc2UgY29udGFpbnMKK3Rlcm1zIHRoYXQgZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlLiAgSW4gc28gbmFtaW5nIHlvdXIgbGljZW5zZSwgeW91IG1heSBub3QgdXNlIGFueSB0cmFkZW1hcmsgb2YgTGljZW5zb3Igb3IgYW55CitDb250cmlidXRvci4KKworCis4LiAgICAgIERpc2NsYWltZXIgb2YgV2FycmFudHkuICBMSUNFTlNFRCBQUk9EVUNUIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiBBUyBJUyBCQVNJUywgV0lUSE9VVCBXQVJSQU5UWQorT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIExJQ0VOU0VEIFBST0RVQ1QgSVMgRlJFRQorT0YgREVGRUNUUywgTUVSQ0hBTlRBQkxFLCBGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HSU5HLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5ECitQRVJGT1JNQU5DRSBPRiBUSEUgTElDRU5TRUQgUFJPRFVDVCBJUyBXSVRIIFlPVS4gIFNIT1VMRCBMSUNFTlNFRCBQUk9EVUNUIFBST1ZFIERFRkVDVElWRSBJTiBBTlkgUkVTUEVDVCwgWU9VIChBTkQKK05PVCBUSEUgTElDRU5TT1IgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiAgVEhJUworRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRiBMSUNFTlNFRCBQUk9EVUNUIElTIEFVVEhPUklaRUQKK0hFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLgorCisKKzkuICAgICAgVGVybWluYXRpb24uIAorCithLiAgICAgICBBdXRvbWF0aWMgVGVybWluYXRpb24gVXBvbiBCcmVhY2guICBUaGlzIGxpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUKK2F1dG9tYXRpY2FsbHkgaWYgeW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGhlIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiB0aGlydHkgKDMwKSBkYXlzIG9mCitiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiAgQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBMaWNlbnNlZCBQcm9kdWN0IHRoYXQgYXJlIHByb3Blcmx5IGdyYW50ZWQgc2hhbGwgc3Vydml2ZSBhbnkKK3Rlcm1pbmF0aW9uIG9mIHRoaXMgbGljZW5zZS4gIFByb3Zpc2lvbnMgdGhhdCwgYnkgdGhlaXIgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzCitMaWNlbnNlLCBzaGFsbCBzdXJ2aXZlLgorCitiLiAgICAgICBUZXJtaW5hdGlvbiBVcG9uIEFzc2VydGlvbiBvZiBQYXRlbnQgSW5mcmluZ2VtZW50LiAgSWYgeW91IGluaXRpYXRlIGxpdGlnYXRpb24gYnkgYXNzZXJ0aW5nIGEgcGF0ZW50CitpbmZyaW5nZW1lbnQgY2xhaW0gKGV4Y2x1ZGluZyBkZWNsYXJhdG9yeSBqdWRnbWVudCBhY3Rpb25zKSBhZ2FpbnN0IExpY2Vuc29yIG9yIGEgQ29udHJpYnV0b3IgKExpY2Vuc29yIG9yCitDb250cmlidXRvciBhZ2FpbnN0IHdob20geW91IGZpbGUgc3VjaCBhbiBhY3Rpb24gaXMgcmVmZXJyZWQgdG8gaGVyZWluIGFzIFJlc3BvbmRlbnQpIGFsbGVnaW5nIHRoYXQgTGljZW5zZWQgUHJvZHVjdAorZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbiBhbnkgYW5kIGFsbCByaWdodHMgZ3JhbnRlZCBieSBzdWNoIFJlc3BvbmRlbnQgdG8geW91IHVuZGVyIFNlY3Rpb25zCisxIG9yIDIgb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZSBwcm9zcGVjdGl2ZWx5IHVwb24gc2l4dHkgKDYwKSBkYXlzIG5vdGljZSBmcm9tIFJlc3BvbmRlbnQgKHRoZSAiTm90aWNlCitQZXJpb2QiKSB1bmxlc3Mgd2l0aGluIHRoYXQgTm90aWNlIFBlcmlvZCB5b3UgZWl0aGVyIGFncmVlIGluIHdyaXRpbmcgKGkpIHRvIHBheSBSZXNwb25kZW50IGEgbXV0dWFsbHkgYWdyZWVhYmxlCityZWFzb25hYmx5IHJveWFsdHkgZm9yIHlvdXIgcGFzdCBvciBmdXR1cmUgdXNlIG9mIExpY2Vuc2VkIFByb2R1Y3QgbWFkZSBieSBzdWNoIFJlc3BvbmRlbnQsIG9yIChpaSkgd2l0aGRyYXcgeW91cgorbGl0aWdhdGlvbiBjbGFpbSB3aXRoIHJlc3BlY3QgdG8gTGljZW5zZWQgUHJvZHVjdCBhZ2FpbnN0IHN1Y2ggUmVzcG9uZGVudC4gIElmIHdpdGhpbiBzYWlkIE5vdGljZSBQZXJpb2QgYSByZWFzb25hYmxlCityb3lhbHR5IGFuZCBwYXltZW50IGFycmFuZ2VtZW50IGFyZSBub3QgbXV0dWFsbHkgYWdyZWVkIHVwb24gaW4gd3JpdGluZyBieSB0aGUgcGFydGllcyBvciB0aGUgbGl0aWdhdGlvbiBjbGFpbSBpcyBub3QKK3dpdGhkcmF3biwgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IExpY2Vuc29yIHRvIHlvdSB1bmRlciBTZWN0aW9ucyAxIGFuZCAyIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIGF0IHRoZSBleHBpcmF0aW9uIG9mCitzYWlkIE5vdGljZSBQZXJpb2QuCisKK2MuICAgICAgIFJlYXNvbmFibGUgVmFsdWUgb2YgVGhpcyBMaWNlbnNlLiAgSWYgeW91IGFzc2VydCBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gYWdhaW5zdCBSZXNwb25kZW50IGFsbGVnaW5nCit0aGF0IExpY2Vuc2VkIFByb2R1Y3QgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCB3aGVyZSBzdWNoIGNsYWltIGlzIHJlc29sdmVkIChzdWNoIGFzIGJ5IGxpY2Vuc2Ugb3IKK3NldHRsZW1lbnQpIHByaW9yIHRvIHRoZSBpbml0aWF0aW9uIG9mIHBhdGVudCBpbmZyaW5nZW1lbnQgbGl0aWdhdGlvbiwgdGhlbiB0aGUgcmVhc29uYWJsZSB2YWx1ZSBvZiB0aGUgbGljZW5zZXMKK2dyYW50ZWQgYnkgc2FpZCBSZXNwb25kZW50IHVuZGVyIFNlY3Rpb25zIDEgYW5kIDIgc2hhbGwgYmUgdGFrZW4gaW50byBhY2NvdW50IGluIGRldGVybWluaW5nIHRoZSBhbW91bnQgb3IgdmFsdWUgb2YKK2FueSBwYXltZW50IG9yIGxpY2Vuc2UuCisKK2QuICAgICAgIE5vIFJldHJvYWN0aXZlIEVmZmVjdCBvZiBUZXJtaW5hdGlvbi4gIEluIHRoZSBldmVudCBvZiB0ZXJtaW5hdGlvbiB1bmRlciBTZWN0aW9ucyA5KGEpIG9yIDkoYikgYWJvdmUsIGFsbAorZW5kIHVzZXIgbGljZW5zZSBhZ3JlZW1lbnRzIChleGNsdWRpbmcgbGljZW5zZXMgdG8gZGlzdHJpYnV0b3JzIGFuZCByZXNlbGxlcnMpIHRoYXQgaGF2ZSBiZWVuIHZhbGlkbHkgZ3JhbnRlZCBieSB5b3UKK29yIGFueSBkaXN0cmlidXRvciBoZXJldW5kZXIgcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSB0ZXJtaW5hdGlvbi4KKworCisxMC4gIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiAgVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBXSEVUSEVSIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSwKK0NPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFRIRSBMSUNFTlNPUiwgQU5ZIENPTlRSSUJVVE9SLCBPUiBBTlkgRElTVFJJQlVUT1IgT0YgTElDRU5TRUQgUFJPRFVDVCwgT1IgQU5ZIFNVUFBMSUVSCitPRiBBTlkgT0YgU1VDSCBQQVJUSUVTLCBCRSBMSUFCTEUgVE8gQU5ZIFBFUlNPTiBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YKK0FOWSBDSEFSQUNURVIgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IKK01BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwgSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiAgVEhJUyBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkKK1JFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFlTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMgU1VDSCBMSU1JVEFUSU9OLiAgU09NRSBKVVJJU0RJQ1RJT05TIERPCitOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSElTIEVYQ0xVU0lPTiBBTkQgTElNSVRBVElPTiBNQVkKK05PVCBBUFBMWSBUTyBZT1UuIAorCisKKzExLiAgUmVzcG9uc2liaWxpdHkgZm9yIENsYWltcy4gIEFzIGJldHdlZW4gTGljZW5zb3IgYW5kIENvbnRyaWJ1dG9ycywgZWFjaCBwYXJ0eSBpcyByZXNwb25zaWJsZSBmb3IgY2xhaW1zIGFuZAorZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBvdXQgb2YgaXRzIHV0aWxpemF0aW9uIG9mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuICBZb3UgYWdyZWUgdG8gd29yayB3aXRoCitMaWNlbnNvciBhbmQgQ29udHJpYnV0b3JzIHRvIGRpc3RyaWJ1dGUgc3VjaCByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuICBOb3RoaW5nIGhlcmVpbiBpcyBpbnRlbmRlZCBvcgorc2hhbGwgYmUgZGVlbWVkIHRvIGNvbnN0aXR1dGUgYW55IGFkbWlzc2lvbiBvZiBsaWFiaWxpdHkuCisKKworMTIuICBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzLiAgVGhlIExpY2Vuc2VkIFByb2R1Y3QgaXMgYSBjb21tZXJjaWFsIGl0ZW0sIGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluIDQ4IEMuRi5SLgorMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2YgY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBhbmQgY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBkb2N1bWVudGF0aW9uLCBhcyBzdWNoCit0ZXJtcyBhcmUgdXNlZCBpbiA0OCBDLkYuUi4gMTIuMjEyIChTZXB0LiAxOTk1KS4gIENvbnNpc3RlbnQgd2l0aCA0OCBDLkYuUi4gMTIuMjEyIGFuZCA0OCBDLkYuUi4gMjI3LjcyMDItMSB0aHJvdWdoCisyMjcuNzIwMi00IChKdW5lIDE5OTUpLCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIExpY2Vuc2VkIFByb2R1Y3Qgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGgKK2hlcmVpbi4KKworCisxMy4gIE1pc2NlbGxhbmVvdXMuICBUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgdGhlIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gIElmIGFueQorcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkKK3RvIG1ha2UgaXQgZW5mb3JjZWFibGUuICBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgQ2FsaWZvcm5pYSBsYXcgcHJvdmlzaW9ucyAoZXhjZXB0IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZQorbGF3LCBpZiBhbnksIHByb3ZpZGVzIG90aGVyd2lzZSksIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuICBZb3UgZXhwcmVzc2x5IGFncmVlIHRoYXQgYW55IGxpdGlnYXRpb24KK3JlbGF0aW5nIHRvIHRoaXMgbGljZW5zZSBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIEZlZGVyYWwgQ291cnRzIG9mIHRoZSBOb3J0aGVybiBEaXN0cmljdCBvZgorQ2FsaWZvcm5pYSBvciB0aGUgU3VwZXJpb3IgQ291cnQgb2YgdGhlIENvdW50eSBvZiBTYW50YSBDbGFyYSwgQ2FsaWZvcm5pYSAoYXMgYXBwcm9wcmlhdGUpLCB3aXRoIHZlbnVlIGx5aW5nIGluIFNhbnRhCitDbGFyYSBDb3VudHksIENhbGlmb3JuaWEsIHdpdGggdGhlIGxvc2luZyBwYXJ0eSByZXNwb25zaWJsZSBmb3IgY29zdHMgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGNvdXJ0IGNvc3RzIGFuZAorcmVhc29uYWJsZSBhdHRvcm5leXMgZmVlcyBhbmQgZXhwZW5zZXMuICBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUKK0ludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuICBZb3UgYW5kIExpY2Vuc29yIGV4cHJlc3NseSB3YWl2ZSBhbnkgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbgorYW55IGxpdGlnYXRpb24gY29uY2VybmluZyBMaWNlbnNlZCBQcm9kdWN0IG9yIHRoaXMgTGljZW5zZS4gIEFueSBsYXcgb3IgcmVndWxhdGlvbiB0aGF0IHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mCithIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHNoYWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuCisKKworMTQuICBEZWZpbml0aW9uIG9mIFlvdSBpbiBUaGlzIExpY2Vuc2UuIFlvdSB0aHJvdWdob3V0IHRoaXMgTGljZW5zZSwgd2hldGhlciBpbiB1cHBlciBvciBsb3dlciBjYXNlLCBtZWFucyBhbgoraW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMgTGljZW5zZSBvciBhCitmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNy4gIEZvciBsZWdhbCBlbnRpdGllcywgeW91IGluY2x1ZGVzIGFueSBlbnRpdHkgdGhhdCBjb250cm9scywgaXMKK2NvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggeW91LiAgRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgY29udHJvbCBtZWFucyAoaSkgdGhlIHBvd2VyLAorZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoaWkpCitvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisKKzE1LiAgR2xvc3NhcnkuICBBbGwgZGVmaW5lZCB0ZXJtcyBpbiB0aGlzIExpY2Vuc2UgdGhhdCBhcmUgdXNlZCBpbiBtb3JlIHRoYW4gb25lIFNlY3Rpb24gb2YgdGhpcyBMaWNlbnNlIGFyZSByZXBlYXRlZAoraGVyZSwgaW4gYWxwaGFiZXRpY2FsIG9yZGVyLCBmb3IgdGhlIGNvbnZlbmllbmNlIG9mIHRoZSByZWFkZXIuICBUaGUgU2VjdGlvbiBvZiB0aGlzIExpY2Vuc2UgaW4gd2hpY2ggZWFjaCBkZWZpbmVkCit0ZXJtIGlzIGZpcnN0IHVzZWQgaXMgc2hvd24gaW4gcGFyZW50aGVzZXMuIAorCitDb250cmlidXRvcjogIEVhY2ggcGVyc29uIG9yIGVudGl0eSB3aG8gY3JlYXRlZCBvciBjb250cmlidXRlZCB0byB0aGUgY3JlYXRpb24gb2YsIGFuZCBkaXN0cmlidXRlZCwgYSBNb2RpZmljYXRpb24uCisoU2VlIFNlY3Rpb24gMikKKworRGVyaXZhdGl2ZSBXb3JrczogVGhhdCB0ZXJtIGFzIHVzZWQgaW4gdGhpcyBMaWNlbnNlIGlzIGRlZmluZWQgdW5kZXIgVS5TLiBjb3B5cmlnaHQgbGF3LiAgKFNlZSBTZWN0aW9uIDEoYikpCisKK0xpY2Vuc2U6ICBUaGlzIEJpdFRvcnJlbnQgT3BlbiBTb3VyY2UgTGljZW5zZS4gIChTZWUgZmlyc3QgcGFyYWdyYXBoIG9mIExpY2Vuc2UpCisKK0xpY2Vuc2VkIFByb2R1Y3Q6ICBBbnkgQml0VG9ycmVudCBQcm9kdWN0IGxpY2Vuc2VkIHB1cnN1YW50IHRvIHRoaXMgTGljZW5zZS4gIFRoZSB0ZXJtICJMaWNlbnNlZCBQcm9kdWN0IiBpbmNsdWRlcworYWxsIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMgZnJvbSBhbnkgQ29udHJpYnV0b3IgdGhhdCB5b3UgcmVjZWl2ZS4gIChTZWUgZmlyc3QgcGFyYWdyYXBoIG9mIExpY2Vuc2UgYW5kIFNlY3Rpb24gMikKKworTGljZW5zb3I6ICBCaXRUb3JyZW50LCBJbmMuICAoU2VlIGZpcnN0IHBhcmFncmFwaCBvZiBMaWNlbnNlKQorCitNb2RpZmljYXRpb25zOiAgQW55IGFkZGl0aW9ucyB0byBvciBkZWxldGlvbnMgZnJvbSB0aGUgc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiAoaSkgYSBmaWxlIGNvbnRhaW5pbmcgTGljZW5zZWQKK1Byb2R1Y3QsIG9yIChpaSkgYW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgTGljZW5zZWQgUHJvZHVjdC4gIChTZWUgU2VjdGlvbiAyKQorCitOb3RpY2U6ICBUaGUgbm90aWNlIGNvbnRhaW5lZCBpbiBFeGhpYml0IEEuICAoU2VlIFNlY3Rpb24gNChlKSkKKworU291cmNlIENvZGU6IFRoZSBwcmVmZXJyZWQgZm9ybSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gdGhlIExpY2Vuc2VkIFByb2R1Y3QsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBjb250YWluZWQKK3RoZXJlaW4sIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4KK2V4ZWN1dGFibGUgcHJvZ3JhbSwgb3IgYSBsaXN0IG9mIGRpZmZlcmVudGlhbCBjb21wYXJpc29ucyBhZ2FpbnN0IHRoZSBTb3VyY2UgQ29kZSBvZiB0aGUgTGljZW5zZWQgUHJvZHVjdC4gIChTZWUKK1NlY3Rpb24gMShhKSkKKworWW91OiAgVGhpcyB0ZXJtIGlzIGRlZmluZWQgaW4gU2VjdGlvbiAxNCBvZiB0aGlzIExpY2Vuc2UuCisKKworRVhISUJJVCBBCisKK1RoZSBOb3RpY2UgYmVsb3cgbXVzdCBhcHBlYXIgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZSBvZiBhbnkgY29weSB5b3UgZGlzdHJpYnV0ZSBvZiB0aGUgTGljZW5zZWQgUHJvZHVjdCBvcgorYW55IGhlcmV0by4gIENvbnRyaWJ1dG9ycyB0byBhbnkgTW9kaWZpY2F0aW9ucyBtYXkgYWRkIHRoZWlyIG93biBjb3B5cmlnaHQgbm90aWNlcyB0byBpZGVudGlmeSB0aGVpciBvd24KK2NvbnRyaWJ1dGlvbnMuCisKK0xpY2Vuc2U6CisKK1RoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIEJpdFRvcnJlbnQgT3BlbiBTb3VyY2UgTGljZW5zZSBWZXJzaW9uIDEuMCAodGhlIExpY2Vuc2UpLiAgWW91IG1heSBub3QKK2NvcHkgb3IgdXNlIHRoaXMgZmlsZSwgaW4gZWl0aGVyIHNvdXJjZSBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSwgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkKK29idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5iaXR0b3JyZW50LmNvbS9saWNlbnNlLy4KKworU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gQVMgSVMgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzCitvciBpbXBsaWVkLiAgU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0JpdHN0cmVhbUN5YmVyYml0IGIvbGljZW5zZXMvQml0c3RyZWFtQ3liZXJiaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODZmZmY2MQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0JpdHN0cmVhbUN5YmVyYml0CkBAIC0wLDAgKzEsNDkgQEAKK0xpY2Vuc2UgQWdyZWVtZW50CisKK1RoZSBCaXRzdHJlYW0gUHJvZHVjdCBwcm92aWRlZCB0byB5b3UgaGVyZXdpdGggaXMgYSBmcmVlIHByb2R1Y3QgcmVsZWFzZSBvZiBCaXRzdHJlYW0ncyBDeWJlcmJpdCBmb250IGZvciBvbmUgdXNlciBvbmx5LgorCitCeSBpbnN0YWxsaW5nIHRoZSBCaXRzdHJlYW0gUHJvZHVjdCBvbiB5b3VyIHN5c3RlbSwgeW91IChvciB5b3Ugb24gYmVoYWxmIG9mIHlvdXIgZW1wbG95ZXIpIGFyZSBhZ3JlZWluZyB0byBiZSBib3VuZCBieSB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQuCisKK1RoaXMgQWdyZWVtZW50IGNvbnN0aXR1dGVzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgYmV0d2VlbiB5b3UgYW5kIEJpdHN0cmVhbS4gSWYgeW91IGRvIG5vdCBhZ3JlZSB0byBpdHMgdGVybXMsIGRvIG5vdCBpbnN0YWxsIHRoZSBMaWNlbnNlIFByb2R1Y3Qgb24geW91ciBzeXN0ZW0gb3IsIGlmIHlvdSBoYXZlIGFscmVhZHkgaW5zdGFsbGVkIGl0LCBkZWxldGUgaXQgZnJvbSB5b3VyIHN5c3RlbSwgYW5kIHJldHVybiB0aGUgdW5pbnN0YWxsZWQgZGlzayBwYWNrYWdlIHRoYXQgY29tcHJpc2VzIHRoaXMgQml0c3RyZWFtIFByb2R1Y3QgdG9nZXRoZXIgaW1tZWRpYXRlbHkuCisKKzEuIExpY2Vuc2UgR3JhbnQKK09uZSBVc2VyIE9ubHkuIEluIGNvbnNpZGVyYXRpb24gZm9yIHlvdXIgYWdyZWVpbmcgdG8gYWNjZXB0IGEgZnJlZSByZWxlYXNlIG9mIHRoZSBCaXRzdHJlYW0gUHJvZHVjdCwgQklUU1RSRUFNIGdyYW50cyB0byB5b3Ugb25seSwgdGhlIExpY2Vuc2VlLCB0aGUgbm9uLWV4Y2x1c2l2ZSwgbm9udHJhbnNmZXJhYmxlIHJpZ2h0IHRvIHVzZSBhbmQgZGlzcGxheSB0aGUgQml0c3RyZWFtIFByb2R1Y3QgcHJvdmlkZWQgaGVyZXdpdGggb24gYSBzaW5nbGUgc3lzdGVtIG9ubHkuIElmIHlvdSBhcmUgdXNpbmcgdGhpcyBwcm9kdWN0IGZvciB5b3VyIHdvcmssIHRoaXMgYWdyZWVtZW50IGFwcGxpZXMgdG8geW91ciBlbXBsb3llci4gUGxlYXNlIGV4cHJlc3MgYWxsIGNvbW1lbnRzIHJlZ2FyZGluZyB0aGUgQml0c3RyZWFtIFByb2R1Y3QgdG8gQml0c3RyZWFtJ3MgVGVjaG5pY2FsIFN1cHBvcnQgRGVwYXJ0bWVudCAoZS1tYWlsOiBzdXBwb3J0QGJpdHN0cmVhbS5jb20pLgorCitPdGhlciBVc2VzLiBUbyBwdXJjaGFzZSBhIGxpY2Vuc2UgdG8gdXNlIHRoaXMgQml0c3RyZWFtIFByb2R1Y3Qgb24gbW9yZSB0aGFuIG9uZSBzeXN0ZW0sIG9yIGEgcmlnaHQgdG8gZGlzdHJpYnV0ZSB0aGUgQml0c3RyZWFtIFByb2R1Y3QgdG8gb3RoZXIgdXNlcnMsIHBsZWFzZSBjb250YWN0IEJpdHN0cmVhbSdzIFNhbGVzIERlcGFydG1lbnQgKGUtbWFpbDogaW5mb0BiaXRzdHJlYW0uY29tKS4gCisKK1RoaXJkIFBhcnRpZXMuIFlvdSBtYXkgc2VuZCBhIGNvcHkgb2YgdGhlIEJpdHN0cmVhbSBQcm9kdWN0IGFsb25nIHdpdGggeW91ciBkb2N1bWVudHMgdG8gYSBjb21tZXJjaWFsIHByaW50ZXIgb3Igb3RoZXIgc2VydmljZSBidXJlYXUgdG8gZW5hYmxlIHRoZSBlZGl0aW5nIG9yIHByaW50aW5nIG9mIHlvdXIgZG9jdW1lbnQsIHByb3ZpZGVkIHRoYXQgc3VjaCBwYXJ0eSBoYXMgaW5mb3JtZWQgeW91IHRoYXQgaXQgb3ducyBhIHZhbGlkIGxpY2Vuc2UgdG8gdXNlIHRoYXQgcGFydGljdWxhciBmb250IHNvZnR3YXJlLgorCitZb3UgbWF5IGFsc28gZW1iZWQgUEMgVHJ1ZVR5cGUgZm9ybWF0IGZvbnRzIHdpdGhpbiB5b3VyIGRvY3VtZW50cyBmb3IgdGhlIHZpZXdpbmcsIGVkaXRpbmcsIGFuZCBwcmludGluZyBvZiB0aG9zZSBkb2N1bWVudHMuCisKK1BvcnRhYmxlIERvY3VtZW50cy4gWW91IG1heSBzZW5kIGFsb25nIHdpdGggeW91ciBkb2N1bWVudHMgYSBQb3J0YWJsZSBGb250IFJlc291cmNlICjigJxQRlLigJ0pIGNyZWF0ZWQgYnkgQml0c3RyZWFt4oCZcyBUcnVlRG9jwq4gKHBhdGVudGVkKSwgZm9yIHRoZSBwdXJwb3NlIG9mIGFsbG93aW5nIGFueSB0aGlyZCBwYXJ0eSB0byB2aWV3LCBlZGl0IG9yIHByaW50IHRoZSBkb2N1bWVudCByZW1vdGVseSBidXQgd2l0aCB0aGUgZXhwcmVzcyB1bmRlcnN0YW5kaW5nIHRoYXQgc3VjaCBwYXJ0eSBtYXkgbm90IHVzZSBzdWNoIFBGUiB0byBlZGl0IG9yIHByaW50IGFueSBvdGhlciBkb2N1bWVudCB1bmxlc3MgaW5kZXBlbmRlbnRseSBsaWNlbnNlZCB0byBkbyBzby4KKworTm8gTW9kaWZpY2F0aW9ucy4gWW91IG1heSBub3QgbW9kaWZ5LCBhZGFwdCwgdHJhbnNsYXRlLCByZXZlcnNlIGVuZ2luZWVyLCBkZWNvbXBpbGUsIGRpc2Fzc2VtYmxlLCBvciBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgQml0c3RyZWFtIFByb2R1Y3Qgd2l0aG91dCBCSVRTVFJFQU3igJlzIHByaW9yIHdyaXR0ZW4gY29uc2VudC4KKworUmlnaHRzIFJlc2VydmF0aW9uLiBCSVRTVFJFQU0gcmVzZXJ2ZXMgYWxsIHJpZ2h0cyBub3Qgc3BlY2lmaWNhbGx5IGdyYW50ZWQgdG8gTGljZW5zZWUuCisKKzIuIENvcHlyaWdodAorVGhlIEJpdHN0cmVhbSBQcm9kdWN0IGFuZCB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscyBhcmUgY29weXJpZ2h0ZWQgYW5kIGNvbnRhaW4gcHJvcHJpZXRhcnkgaW5mb3JtYXRpb24gYW5kIHRyYWRlIHNlY3JldHMgb2YgQklUU1RSRUFNLiBVbmF1dGhvcml6ZWQgY29weWluZyBvZiB0aGUgQml0c3RyZWFtIHByb2R1Y3QgZXZlbiBpZiBtb2RpZmllZCwgbWVyZ2VkLCBvciBpbmNsdWRlZCB3aXRoIG90aGVyIHNvZnR3YXJlLCBvciBvZiB0aGUgd3JpdHRlbiBtYXRlcmlhbHMsIGlzIGV4cHJlc3NseSBmb3JiaWRkZW4uIFlvdSBtYXkgYmUgaGVsZCBsZWdhbGx5IHJlc3BvbnNpYmxlIGZvciBhbnkgaW5mcmluZ2VtZW50IG9mIEJJVFNUUkVBTeKAmXMgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyB0aGF0IGlzIGNhdXNlZCBvciBlbmNvdXJhZ2VkIGJ5IHlvdXIgZmFpbHVyZSB0byBhYmlkZSBieSB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQuIFlvdSBtYXkgbWFrZSBvbmUgKDEpIGNvcHkgb2YgdGhlIEJpdHN0cmVhbSBQcm9kdWN0IHNvbGVseSBmb3IgYmFja3VwIHB1cnBvc2VzIHByb3ZpZGVkIHRoZSBjb3B5cmlnaHQgYW5kIHRyYWRlbWFyayBub3RpY2VzIGFyZSByZXByb2R1Y2VkIGluIHRoZWlyIGVudGlyZXR5IG9uIHRoZSBiYWNrdXAgY29weS4KKworMy4gVGVybWluYXRpb24KK1RoaXMgQWdyZWVtZW50IGlzIGVmZmVjdGl2ZSB1bnRpbCB0ZXJtaW5hdGVkLiBUaGlzIEFncmVlbWVudCB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHdpdGhvdXQgbm90aWNlIGZyb20gQklUU1RSRUFNIGlmIHlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIGFueSBwcm92aXNpb24gY29udGFpbmVkIGhlcmVpbi4gVXBvbiB0ZXJtaW5hdGlvbiwgeW91IG11c3QgZGVzdHJveSB0aGUgd3JpdHRlbiBtYXRlcmlhbHMsIHRoZSBCaXRzdHJlYW0gUHJvZHVjdCwgYW5kIGFsbCBjb3BpZXMgb2YgdGhlbSwgaW4gcGFydCBhbmQgaW4gd2hvbGUsIGluY2x1ZGluZyBtb2RpZmllZCBjb3BpZXMsIGlmIGFueS4KKworNC4gRGlzY2xhaW1lciBhbmQgTGltaXRlZCBXYXJyYW50eQorTm8gV2FycmFudHkuIEFzIGEgZnJlZSByZWxlYXNlIG9mIHRoZSBCaXRzdHJlYW0gUHJvZHVjdCBpcyBwcm92aWRlZCBoZXJld2l0aCBvbmx5LCBCSVRTVFJFQU0gcHJvdmlkZXMgbm8gd2FycmFudHkgdGhhdCB0aGUgQml0c3RyZWFtIFByb2R1Y3Qgd2lsbCBvcGVyYXRlIGVmZmVjdGl2ZWx5LCB3aWxsIG5vdCBkYW1hZ2UgeW91ciBzeXN0ZW0sIG9yIG90aGVyd2lzZSBiZSBmcmVlIGZyb20gYW55IGRlZmVjdHMgd2hhdHNvZXZlci4gCisKK1RIRSBCSVRTVFJFQU0gUFJPRFVDVCBpcyBQUk9WSURFRCDigJxBUyBJU+KAnS4gQklUU1RSRUFNIERPRVMgTk9UIE1BS0UgQU5ZIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworVGhlIGVudGlyZSByaXNrIGFzIHRvIHRoZSBxdWFsaXR5IGFuZCBwZXJmb3JtYW5jZSBvZiB0aGUgQml0c3RyZWFtIFByb2R1Y3QsIHJlc3RzIHVwb24geW91LiBCSVRTVFJFQU0gZG9lcyBub3Qgd2FycmFudCB0aGF0IHRoZSBmdW5jdGlvbnMgY29udGFpbmVkIGluIHRoZSBCaXRzdHJlYW0gUHJvZHVjdCB3aWxsIG1lZXQgeW91ciByZXF1aXJlbWVudHMgb3IgdGhhdCB0aGUgb3BlcmF0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aWxsIGJlIHVuaW50ZXJydXB0ZWQgb3IgZXJyb3IgZnJlZS4KKworQklUU1RSRUFNIFNIQUxMIE5PVCBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBDT05TRVFVRU5USUFMLCBPUiBJTkNJREVOVEFMIERBTUFHRVMgKElOQ0xVRElORyBEQU1BR0VTIEZST00gTE9TUyBPRiBCVVNJTkVTUyBQUk9GSVRTLCBCVVNJTkVTUyBJTlRFUlJVUFRJT04sIExPU1MgT0YgQlVTSU5FU1MgSU5GT1JNQVRJT04sIEFORCBUSEUgTElLRSkgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPRiBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBCSVRTVFJFQU0gUFJPRFVDVCBFVkVOIElGIEJJVFNUUkVBTSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKK0JlY2F1c2Ugc29tZSBzdGF0ZXMgZG8gbm90IGFsbG93IHRoZSBleGNsdXNpb24gb3IgbGltaXRhdGlvbiBvZiBsaWFiaWxpdHkgZm9yIGNvbnNlcXVlbnRpYWwgb3IgaW5jaWRlbnRhbCBkYW1hZ2VzLCB0aGUgYWJvdmUgbGltaXRhdGlvbiBtYXkgbm90IGFwcGx5IHRvIHlvdS4KKworNS4gVS5TLiBHb3Zlcm5tZW50IFJlc3RyaWN0ZWQgUmlnaHRzCitUaGUgc29mdHdhcmUgcHJvZHVjdCByZWZlcnJlZCB0byBhcyB0aGUgQml0c3RyZWFtIFByb2R1Y3QgYW5kIGl0cyByZWxhdGVkIGRvY3VtZW50YXRpb24gYXJlIHByb3ZpZGVkIHdpdGggUkVTVFJJQ1RFRCBSSUdIVFMuIFVzZSwgZHVwbGljYXRpb24gb3IgZGlzY2xvc3VyZSBieSB0aGUgR292ZXJubWVudCBpcyBzdWJqZWN0IHRvIHJlc3RyaWN0aW9ucyBhcyBzZXQgZm9ydGggaW4gRkFSIDUyLjIyNy0xOShjKSgyKSAoTWF5LCAxOTg3KSB3aGVuIGFwcGxpY2FibGUgb3IgdGhlIGFwcGxpY2FibGUgcHJvdmlzaW9ucyBvZiB0aGUgRE9EIEZBUiBzdXBwbGVtZW50IDI1Mi4yMjctNzAxMyBzdWJkaXZpc2lvbiAoYSkoMTUpKEFwcmlsLCAxOTg4KSBvciBzdWJkaXZpc2lvbiAoYSkoMTcpKEFwcmlsLCAxOTg4KS4gQ29udHJhY3Rvci9tYW51ZmFjdHVyZXIgaXMgQml0c3RyZWFtIEluYy4vMjE1IEZpcnN0IFN0cmVldC9DYW1icmlkZ2UsIE1BIDAyMTQyLgorCitFeHBvcnQgKERvbWVzdGljIFZlcnNpb25zKTogUmVnYXJkbGVzcyBvZiBhbnkgZGlzY2xvc3VyZSBtYWRlIGJ5IExJQ0VOU0VFIHRvIEJJVFNUUkVBTSBvZiBhbiB1bHRpbWF0ZSBkZXN0aW5hdGlvbiBvZiB0aGUgQml0c3RyZWFtIFByb2R1Y3QsIExJQ0VOU0VFIHNoYWxsIG5vdCByZWV4cG9ydCBvciB0cmFuc2Zlciwgd2hldGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCB0aGUgQml0c3RyZWFtIFByb2R1Y3QgdG8gYW55b25lIG91dHNpZGUgdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSB3aXRob3V0IGZpcnN0IG9idGFpbmluZyBhIGxpY2Vuc2UgZnJvbSB0aGUgVW5pdGVkIFN0YXRlcyBEZXBhcnRtZW50IG9mIENvbW1lcmNlIG9yIGFueSBvdGhlciBhZ2VuY3kgb3IgZGVwYXJ0bWVudCBvZiB0aGUgVW5pdGVkIFN0YXRlcyBHb3Zlcm5tZW50LCBhcyByZXF1aXJlZC4KKworU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgY29uY2VybmluZyB0aGlzIEFncmVlbWVudCwgb3IgaWYgeW91IGRlc2lyZSB0byBjb250YWN0IEJJVFNUUkVBTSBmb3IgYW55IHJlYXNvbiwgcGxlYXNlIG1ha2UgY29udGFjdCBpbiB3cml0aW5nLgorCis2LiBHT1ZFUk5JTkcgTGF3ICAKK1RoaXMgYWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EgYW5kIHRoZSBDb21tb253ZWFsdGggb2YgTWFzc2FjaHVzZXR0cy4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9saWNlbnNlcy9CaXRzdHJlYW1WZXJhIGIvbGljZW5zZXMvQml0c3RyZWFtVmVyYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjUxYmUxCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvQml0c3RyZWFtVmVyYQpAQCAtMCwwICsxLDEyNCBAQAorQml0c3RyZWFtIFZlcmEgRm9udHMgQ29weXJpZ2h0CisKK1RoZSBmb250cyBoYXZlIGEgZ2VuZXJvdXMgY29weXJpZ2h0LCBhbGxvd2luZyBkZXJpdmF0aXZlIHdvcmtzIChhcworbG9uZyBhcyAiQml0c3RyZWFtIiBvciAiVmVyYSIgYXJlIG5vdCBpbiB0aGUgbmFtZXMpLCBhbmQgZnVsbAorcmVkaXN0cmlidXRpb24gKHNvIGxvbmcgYXMgdGhleSBhcmUgbm90ICpzb2xkKiBieSB0aGVtc2VsdmVzKS4gVGhleQorY2FuIGJlIGJlIGJ1bmRsZWQsIHJlZGlzdHJpYnV0ZWQgYW5kIHNvbGQgd2l0aCBhbnkgc29mdHdhcmUuCisKK1RoZSBmb250cyBhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQ6CisKK0NvcHlyaWdodAorPT09PT09PT09CisKK0NvcHlyaWdodCAoYykgMjAwMyBieSBCaXRzdHJlYW0sIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gQml0c3RyZWFtCitWZXJhIGlzIGEgdHJhZGVtYXJrIG9mIEJpdHN0cmVhbSwgSW5jLgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKK2EgY29weSBvZiB0aGUgZm9udHMgYWNjb21wYW55aW5nIHRoaXMgbGljZW5zZSAoIkZvbnRzIikgYW5kIGFzc29jaWF0ZWQKK2RvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiRm9udCBTb2Z0d2FyZSIpLCB0byByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUKK3RoZSBGb250IFNvZnR3YXJlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLAorY29weSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgRm9udAorU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBGb250IFNvZnR3YXJlIGlzIGZ1cm5pc2hlZAordG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IGFuZCB0cmFkZW1hcmsgbm90aWNlcyBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZQorc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvZiBvbmUgb3IgbW9yZSBvZiB0aGUgRm9udCBTb2Z0d2FyZQordHlwZWZhY2VzLgorCitUaGUgRm9udCBTb2Z0d2FyZSBtYXkgYmUgbW9kaWZpZWQsIGFsdGVyZWQsIG9yIGFkZGVkIHRvLCBhbmQgaW4KK3BhcnRpY3VsYXIgdGhlIGRlc2lnbnMgb2YgZ2x5cGhzIG9yIGNoYXJhY3RlcnMgaW4gdGhlIEZvbnRzIG1heSBiZQorbW9kaWZpZWQgYW5kIGFkZGl0aW9uYWwgZ2x5cGhzIG9yIGNoYXJhY3RlcnMgbWF5IGJlIGFkZGVkIHRvIHRoZQorRm9udHMsIG9ubHkgaWYgdGhlIGZvbnRzIGFyZSByZW5hbWVkIHRvIG5hbWVzIG5vdCBjb250YWluaW5nIGVpdGhlcgordGhlIHdvcmRzICJCaXRzdHJlYW0iIG9yIHRoZSB3b3JkICJWZXJhIi4KKworVGhpcyBMaWNlbnNlIGJlY29tZXMgbnVsbCBhbmQgdm9pZCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgdG8gRm9udHMKK29yIEZvbnQgU29mdHdhcmUgdGhhdCBoYXMgYmVlbiBtb2RpZmllZCBhbmQgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlCisiQml0c3RyZWFtIFZlcmEiIG5hbWVzLgorCitUaGUgRm9udCBTb2Z0d2FyZSBtYXkgYmUgc29sZCBhcyBwYXJ0IG9mIGEgbGFyZ2VyIHNvZnR3YXJlIHBhY2thZ2UgYnV0CitubyBjb3B5IG9mIG9uZSBvciBtb3JlIG9mIHRoZSBGb250IFNvZnR3YXJlIHR5cGVmYWNlcyBtYXkgYmUgc29sZCBieQoraXRzZWxmLgorCitUSEUgRk9OVCBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIEFOWSBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQKK09GIENPUFlSSUdIVCwgUEFURU5ULCBUUkFERU1BUkssIE9SIE9USEVSIFJJR0hULiBJTiBOTyBFVkVOVCBTSEFMTAorQklUU1RSRUFNIE9SIFRIRSBHTk9NRSBGT1VOREFUSU9OIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SCitPVEhFUiBMSUFCSUxJVFksIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCitPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SCitPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgRk9OVAorU09GVFdBUkUgT1IgRlJPTSBPVEhFUiBERUFMSU5HUyBJTiBUSEUgRk9OVCBTT0ZUV0FSRS4KKworRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWVzIG9mIEdub21lLCB0aGUgR25vbWUKK0ZvdW5kYXRpb24sIGFuZCBCaXRzdHJlYW0gSW5jLiwgc2hhbGwgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKK290aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhpcyBGb250CitTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gYXV0aG9yaXphdGlvbiBmcm9tIHRoZSBHbm9tZSBGb3VuZGF0aW9uCitvciBCaXRzdHJlYW0gSW5jLiwgcmVzcGVjdGl2ZWx5LiBGb3IgZnVydGhlciBpbmZvcm1hdGlvbiwgY29udGFjdDoKK2ZvbnRzIGF0IGdub21lIGRvdCBvcmcuCisKK0NvcHlyaWdodCBGQVEKKz09PT09PT09PT09PT0KKworICAgMS4gSSBkb24ndCB1bmRlcnN0YW5kIHRoZSByZXNhbGUgcmVzdHJpY3Rpb24uLi4gV2hhdCBnaXZlcz8KKworICAgICAgQml0c3RyZWFtIGlzIGdpdmluZyBhd2F5IHRoZXNlIGZvbnRzLCBidXQgd2lzaGVzIHRvIGVuc3VyZSBpdHMKKyAgICAgIGNvbXBldGl0b3JzIGNhbid0IGp1c3QgZHJvcCB0aGUgZm9udHMgYXMgaXMgaW50byBhIGZvbnQgc2FsZSBzeXN0ZW0KKyAgICAgIGFuZCBzZWxsIHRoZW0gYXMgaXMuIEl0IHNlZW1zIGZhaXIgdGhhdCBpZiBCaXRzdHJlYW0gY2FuJ3QgbWFrZSBtb25leQorICAgICAgZnJvbSB0aGUgQml0c3RyZWFtIFZlcmEgZm9udHMsIHRoZWlyIGNvbXBldGl0b3JzIHNob3VsZCBub3QgYmUgYWJsZSB0bworICAgICAgZG8gc28gZWl0aGVyLiBZb3UgY2FuIHNlbGwgdGhlIGZvbnRzIGFzIHBhcnQgb2YgYW55IHNvZnR3YXJlIHBhY2thZ2UsCisgICAgICBob3dldmVyLgorCisgICAyLiBJIHdhbnQgdG8gcGFja2FnZSB0aGVzZSBmb250cyBzZXBhcmF0ZWx5IGZvciBkaXN0cmlidXRpb24gYW5kCisgICAgICBzYWxlIGFzIHBhcnQgb2YgYSBsYXJnZXIgc29mdHdhcmUgcGFja2FnZSBvciBzeXN0ZW0uICBDYW4gSSBkbyBzbz8KKworICAgICAgWWVzLiBBIFJQTSBvciBEZWJpYW4gcGFja2FnZSBpcyBhICJsYXJnZXIgc29mdHdhcmUgcGFja2FnZSIgdG8gYmVnaW4gCisgICAgICB3aXRoLCBhbmQgeW91IGFyZW4ndCBzZWxsaW5nIHRoZW0gaW5kZXBlbmRlbnRseSBieSB0aGVtc2VsdmVzLiAKKyAgICAgIFNlZSAxLiBhYm92ZS4KKworICAgMy4gQXJlIGRlcml2YXRpdmUgd29ya3MgYWxsb3dlZD8KKyAgICAgIFllcyEKKworICAgNC4gQ2FuIEkgY2hhbmdlIG9yIGFkZCB0byB0aGUgZm9udChzKT8KKyAgICAgIFllcywgYnV0IHlvdSBtdXN0IGNoYW5nZSB0aGUgbmFtZShzKSBvZiB0aGUgZm9udChzKS4KKworICAgNS4gVW5kZXIgd2hhdCB0ZXJtcyBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBhbGxvd2VkPworCisgICAgICBZb3UgbXVzdCBjaGFuZ2UgdGhlIG5hbWUocykgb2YgdGhlIGZvbnRzLiBUaGlzIGlzIHRvIGVuc3VyZSB0aGUKKyAgICAgIHF1YWxpdHkgb2YgdGhlIGZvbnRzLCBib3RoIHRvIHByb3RlY3QgQml0c3RyZWFtIGFuZCBHbm9tZS4gV2Ugd2FudCB0bworICAgICAgZW5zdXJlIHRoYXQgaWYgYW4gYXBwbGljYXRpb24gaGFzIG9wZW5lZCBhIGZvbnQgc3BlY2lmaWNhbGx5IG9mIHRoZXNlCisgICAgICBuYW1lcywgaXQgZ2V0cyB3aGF0IGl0IGV4cGVjdHMgKHRob3VnaCBvZiBjb3Vyc2UsIHVzaW5nIGZvbnRjb25maWcsCisgICAgICBzdWJzdGl0dXRpb25zIGNvdWxkIHN0aWxsIGNvdWxkIGhhdmUgb2NjdXJyZWQgZHVyaW5nIGZvbnQKKyAgICAgIG9wZW5pbmcpLiBZb3UgbXVzdCBpbmNsdWRlIHRoZSBCaXRzdHJlYW0gY29weXJpZ2h0LiBBZGRpdGlvbmFsCisgICAgICBjb3B5cmlnaHRzIGNhbiBiZSBhZGRlZCwgYXMgcGVyIGNvcHlyaWdodCBsYXcuIEhhcHB5IEZvbnQgSGFja2luZyEKKworICAgNi4gSWYgSSBoYXZlIGltcHJvdmVtZW50cyBmb3IgQml0c3RyZWFtIFZlcmEsIGlzIGl0IHBvc3NpYmxlIHRoZXkgbWlnaHQgZ2V0IAorICAgICAgIGFkb3B0ZWQgaW4gZnV0dXJlIHZlcnNpb25zPworCisgICAgICBZZXMuIFRoZSBjb250cmFjdCBiZXR3ZWVuIHRoZSBHbm9tZSBGb3VuZGF0aW9uIGFuZCBCaXRzdHJlYW0gaGFzCisgICAgICBwcm92aXNpb25zIGZvciB3b3JraW5nIHdpdGggQml0c3RyZWFtIHRvIGVuc3VyZSBxdWFsaXR5IGFkZGl0aW9ucyB0bworICAgICAgdGhlIEJpdHN0cmVhbSBWZXJhIGZvbnQgZmFtaWx5LiBQbGVhc2UgY29udGFjdCB1cyBpZiB5b3UgaGF2ZSBzdWNoCisgICAgICBhZGRpdGlvbnMuIE5vdGUsIHRoYXQgaW4gZ2VuZXJhbCwgd2Ugd2lsbCB3YW50IHN1Y2ggYWRkaXRpb25zIGZvciB0aGUKKyAgICAgIGVudGlyZSBmYW1pbHksIG5vdCBqdXN0IGEgc2luZ2xlIGZvbnQsIGFuZCB0aGF0IHlvdSdsbCBoYXZlIHRvIGtlZXAKKyAgICAgIGJvdGggR25vbWUgYW5kIEppbSBMeWxlcywgVmVyYSdzIGRlc2lnbmVyLCBoYXBweSEgVG8gbWFrZSBzZW5zZSB0byBhZGQKKyAgICAgIGdseXBocyB0byB0aGUgZm9udCwgdGhleSBtdXN0IGJlIHN0eWxpc3RpY2FsbHkgaW4ga2VlcGluZyB3aXRoIFZlcmEncworICAgICAgZGVzaWduLiBWZXJhIGNhbm5vdCBiZWNvbWUgYSAicmFuc29tIG5vdGUiIGZvbnQuIEppbSBMeWxlcyB3aWxsIGJlCisgICAgICBwcm92aWRpbmcgYSBkb2N1bWVudCBkZXNjcmliaW5nIHRoZSBkZXNpZ24gZWxlbWVudHMgdXNlZCBpbiBWZXJhLCBhcyBhCisgICAgICBndWlkZSBhbmQgYWlkIGZvciBwZW9wbGUgaW50ZXJlc3RlZCBpbiBjb250cmlidXRpbmcgdG8gVmVyYS4KKworICAgNy4gSSB3YW50IHRvIHNlbGwgYSBzb2Z0d2FyZSBwYWNrYWdlIHRoYXQgdXNlcyB0aGVzZSBmb250czogQ2FuIEkgZG8gc28/CisKKyAgICAgIFN1cmUuIEJ1bmRsZSB0aGUgZm9udHMgd2l0aCB5b3VyIHNvZnR3YXJlIGFuZCBzZWxsIHlvdXIgc29mdHdhcmUKKyAgICAgIHdpdGggdGhlIGZvbnRzLiBUaGF0IGlzIHRoZSBpbnRlbnQgb2YgdGhlIGNvcHlyaWdodC4KKworICAgOC4gSWYgYXBwbGljYXRpb25zIGhhdmUgYnVpbHQgdGhlIG5hbWVzICJCaXRzdHJlYW0gVmVyYSIgaW50byB0aGVtLCAKKyAgICAgIGNhbiBJIG92ZXJyaWRlIHRoaXMgc29tZWhvdyB0byB1c2UgZm9udHMgb2YgbXkgY2hvb3Npbmc/CisKKyAgICAgIFRoaXMgZGVwZW5kcyBvbiBleGFjdCBkZXRhaWxzIG9mIHRoZSBzb2Z0d2FyZS4gTW9zdCBvcGVuIHNvdXJjZQorICAgICAgc3lzdGVtcyBhbmQgc29mdHdhcmUgKGUuZy4sIEdub21lLCBLREUsIGV0Yy4pIGFyZSBub3cgY29udmVydGluZyB0bworICAgICAgdXNlIGZvbnRjb25maWcgKHNlZSB3d3cuZm9udGNvbmZpZy5vcmcpIHRvIGhhbmRsZSBmb250IGNvbmZpZ3VyYXRpb24sCisgICAgICBzZWxlY3Rpb24gYW5kIHN1YnN0aXR1dGlvbjsgaXQgaGFzIHByb3Zpc2lvbnMgZm9yIG92ZXJyaWRpbmcgZm9udAorICAgICAgbmFtZXMgYW5kIHN1YnNpdHV0aW5nIGFsdGVybmF0aXZlcy4gQW4gZXhhbXBsZSBpcyBwcm92aWRlZCBieSB0aGUKKyAgICAgIHN1cHBsaWVkIGxvY2FsLmNvbmYgZmlsZSwgd2hpY2ggY2hvb3NlcyB0aGUgZmFtaWx5IEJpdHN0cmVhbSBWZXJhIGZvcgorICAgICAgInNhbnMiLCAic2VyaWYiIGFuZCAibW9ub3NwYWNlIi4gIE90aGVyIHNvZnR3YXJlIChlLmcuLCB0aGUgWEZyZWU4NgorICAgICAgY29yZSBzZXJ2ZXIpIGhhcyBvdGhlciBtZWNoYW5pc21zIGZvciBmb250IHN1YnN0aXR1dGlvbi4KKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvQmxpdHotQXJ0aXN0aWMgYi9saWNlbnNlcy9CbGl0ei1BcnRpc3RpYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzRkYTAyCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvQmxpdHotQXJ0aXN0aWMKQEAgLTAsMCArMSw4MyBAQAorVGhlIGBCbGl0eisrIEFydGlzdGljIExpY2Vuc2UnCisod2l0aCB0aGFua3MgYW5kIGFwb2xvZ2llcyB0byBhdXRob3JzIG9mIHRoZSBQZXJsIEFydGlzdGljIExpY2Vuc2UpCisKK1ByZWFtYmxlCisKK1RoZSBpbnRlbnQgb2YgdGhpcyBkb2N1bWVudCBpcyB0byBzdGF0ZSB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCAKK0JsaXR6KysgbWF5IGJlIGNvcGllZCwgc3VjaCB0aGF0IHRoZSBhdXRob3JzIG1haW50YWlucyBzb21lCitzZW1ibGFuY2Ugb2YgYXJ0aXN0aWMgY29udHJvbCBvdmVyIHRoZSBkZXZlbG9wbWVudCBvZiB0aGUgcGFja2FnZSwKK3doaWxlIGdpdmluZyB0aGUgdXNlcnMgb2YgdGhlIHBhY2thZ2UgdGhlIHJpZ2h0IHRvIHVzZSBhbmQKK2Rpc3RyaWJ1dGUgQmxpdHorKyBpbiBhIG1vcmUtb3ItbGVzcyBjdXN0b21hcnkgZmFzaGlvbiwgcGx1cyB0aGUKK3JpZ2h0IHRvIG1ha2UgcmVhc29uYWJsZSBtb2RpZmljYXRpb25zLgorCitEZWZpbml0aW9ucworCitgTGlicmFyeScgcmVmZXJzIHRvIHRoZSBjb2xsZWN0aW9uIG9mIGZpbGVzIGRpc3RyaWJ1dGVkIGJ5IHRoZQorQ29weXJpZ2h0IEhvbGRlciwgYW5kIGRlcml2YXRpdmVzIG9mIHRoYXQgY29sbGVjdGlvbiBvZiBmaWxlcworY3JlYXRlZCB0aHJvdWdoIHRleHR1YWwgbW9kaWZpY2F0aW9uLgorCitgU3RhbmRhcmQgVmVyc2lvbicgcmVmZXJzIHRvIHN1Y2ggYSBMaWJyYXJ5IGlmIGl0IGhhcyBub3QgYmVlbgorbW9kaWZpZWQsIG9yIGhhcyBiZWVuIG1vZGlmaWVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgd2lzaGVzIG9mIHRoZQorQ29weXJpZ2h0IEhvbGRlciBhcyBzcGVjaWZpZWQgYmVsb3cuCisKK0NvcHlyaWdodCBIb2xkZXInIGlzIHdob2V2ZXIgaXMgbmFtZWQgaW4gdGhlIGNvcHlyaWdodCBvcgorY29weXJpZ2h0cyBmb3IgdGhlIHBhY2thZ2UuCisKK2BZb3UnIGlzIHlvdSwgaWYgeW91J3JlIHRoaW5raW5nIGFib3V0IGNvcHlpbmcsIG1vZGlmeWluZyBvcgorZGlzdHJpYnV0aW5nIHRoaXMgTGlicmFyeS4KKworYEZyZWVseSBBdmFpbGFibGUnIG1lYW5zIHRoYXQgbm8gZmVlIGlzIGNoYXJnZWQgZm9yIHRoZSBpdGVtLgorSXQgYWxzbyBtZWFucyB0aGF0IHJlY2lwaWVudHMgb2YgdGhlIGl0ZW0gbWF5IHJlZGlzdHJpYnV0ZSBpdCAKK3VuZGVyIHRoZSBzYW1lIGNvbmRpdGlvbnMgdGhleSByZWNlaXZlZCBpdC4KKworYGBSZWFzb25hYmxlIGNvcHlpbmcgZmVlJycgaXMgd2hhdGV2ZXIgeW91IGNhbiBqdXN0aWZ5IG9uIHRoZSBiYXNpcworb2YgbWVkaWEgY29zdCwgZHVwbGljYXRpb24gY2hhcmdlcywgdGltZSBvZiBwZW9wbGUgaW52b2x2ZWQsIGFuZCBzbworb24uIChZb3Ugd2lsbCBub3QgYmUgcmVxdWlyZWQgdG8ganVzdGlmeSBpdCB0byB0aGUgQ29weXJpZ2h0IEhvbGRlciwKK2J1dCBvbmx5IHRvIHRoZSBjb21wdXRpbmcgY29tbXVuaXR5IGF0IGxhcmdlIGFzIGEgbWFya2V0IHRoYXQgbXVzdAorYmVhciB0aGUgZmVlLikKKworMS4gWW91IG1heSBtYWtlIGFuZCBnaXZlIGF3YXkgdmVyYmF0aW0gY29waWVzIG9mIHRoZSAKK1N0YW5kYXJkIFZlcnNpb24gb2YgdGhpcyBMaWJyYXJ5IHdpdGhvdXQgcmVzdHJpY3Rpb24sIHByb3ZpZGVkIHRoYXQKK3lvdSBkdXBsaWNhdGUgYWxsIG9mIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlcywgdGhpcyBsaWNlbnNlLAorYW5kIGFzc29jaWF0ZWQgZGlzY2xhaW1lcnMuIAorCisyLiBUaGUgU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGUgTGlicmFyeSBtYXkgYmUgZGlzdHJpYnV0ZWQgYXMgcGFydAorb2YgYSBjb2xsZWN0aW9uIG9mIHNvZnR3YXJlLCBwcm92aWRlZCBubyBtb3JlIHRoYW4gYSByZWFzb25hYmxlCitjb3B5aW5nIGZlZSBpcyBjaGFyZ2VkIGZvciB0aGUgc29mdHdhcmUgY29sbGVjdGlvbi4KKworMy4gWW91IG1heSBhcHBseSBidWcgZml4ZXMsIHBvcnRhYmlsaXR5IGZpeGVzIGFuZCBvdGhlciBtb2RpZmljYXRpb25zCitkZXJpdmVkIGZyb20gdGhlIFB1YmxpYyBEb21haW4gb3IgZnJvbSB0aGUgQ29weXJpZ2h0IEhvbGRlci4gQQorTGlicmFyeSBtb2RpZmllZCBpbiBzdWNoIGEgd2F5IHNoYWxsIHN0aWxsIGJlIGNvbnNpZGVyZWQgdGhlCitTdGFuZGFyZCBWZXJzaW9uLgorCis0LiBZb3UgbWF5IG90aGVyd2lzZSBtb2RpZnkgeW91ciBjb3B5IG9mIHRoaXMgTGlicmFyeSBpbiBhbnkgd2F5LAorcHJvdmlkZWQgdGhhdCB5b3UgaW5zZXJ0IGEgcHJvbWluZW50IG5vdGljZSBpbiBlYWNoIGNoYW5nZWQgZmlsZQorc3RhdGluZyBob3cgYW5kIHdoZW4geW91IGNoYW5nZWQgdGhhdCBmaWxlLCBhbmQgcHJvdmlkZWQgdGhhdCB5b3UgZG8KK2F0IGxlYXN0IE9ORSBvZiB0aGUgZm9sbG93aW5nOgorCithLiBwbGFjZSB5b3VyIG1vZGlmaWNhdGlvbnMgaW4gdGhlIFB1YmxpYyBEb21haW4gb3Igb3RoZXJ3aXNlCittYWtlIHRoZW0gRnJlZWx5IEF2YWlsYWJsZSwgc3VjaCBhcyBieSBwb3N0aW5nIHNhaWQKK21vZGlmaWNhdGlvbnMgdG8gdGhlIEJsaXR6KysgZGV2ZWxvcG1lbnQgbGlzdCwgCithbmQgYWxsb3dpbmcgdGhlIENvcHlyaWdodCBIb2xkZXIgdG8gaW5jbHVkZQoreW91ciBtb2RpZmljYXRpb25zIGluIHRoZSBTdGFuZGFyZCBWZXJzaW9uIG9mIHRoZSBMaWJyYXJ5LgorCitiLiB1c2UgdGhlIG1vZGlmaWVkIExpYnJhcnkgb25seSB3aXRoaW4geW91ciBjb3Jwb3JhdGlvbiBvcgorb3JnYW5pemF0aW9uLiAKKworYy4gbWFrZSBvdGhlciBkaXN0cmlidXRpb24gYXJyYW5nZW1lbnRzIHdpdGggdGhlIENvcHlyaWdodAorSG9sZGVyLgorCis1LiBZb3UgbWF5IGRpc3RyaWJ1dGUgcHJvZ3JhbXMgd2hpY2ggdXNlIHRoaXMgTGlicmFyeQoraW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGhvdXQgcmVzdHJpY3Rpb24uCisKKzYuIEFueSBvYmplY3QgY29kZSBnZW5lcmF0ZWQgYXMgYSByZXN1bHQgb2YgdXNpbmcgdGhpcyBMaWJyYXJ5IAorZG9lcyBub3QgZmFsbCB1bmRlciB0aGUgY29weXJpZ2h0IG9mIHRoaXMgTGlicmFyeSwgYnV0CitiZWxvbmdzIHRvIHdob21ldmVyIGdlbmVyYXRlZCBpdCwgYW5kIG1heSBiZSBzb2xkIGNvbW1lcmNpYWxseS4KKworNy4gVGhlIG5hbWUgb2YgdGhlIENvcHlyaWdodCBIb2xkZXIgb3IgdGhlIExpYnJhcnkgbWF5IG5vdCBiZSB1c2VkIHRvIAorZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgCitzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKzguIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCBgQVMgSVMnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCitJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvQm9vc3QtMS4wIGIvbGljZW5zZXMvQm9vc3QtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2YjdjZDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9Cb29zdC0xLjAKQEAgLTAsMCArMSwyMyBAQAorQm9vc3QgU29mdHdhcmUgTGljZW5zZSAtIFZlcnNpb24gMS4wIC0gQXVndXN0IDE3dGgsIDIwMDMKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb3Igb3JnYW5pemF0aW9uCitvYnRhaW5pbmcgYSBjb3B5IG9mIHRoZSBzb2Z0d2FyZSBhbmQgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gY292ZXJlZCBieQordGhpcyBsaWNlbnNlICh0aGUgIlNvZnR3YXJlIikgdG8gdXNlLCByZXByb2R1Y2UsIGRpc3BsYXksIGRpc3RyaWJ1dGUsCitleGVjdXRlLCBhbmQgdHJhbnNtaXQgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZQorU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgdGhpcmQtcGFydGllcyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8KK2RvIHNvLCBhbGwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nOgorCitUaGUgY29weXJpZ2h0IG5vdGljZXMgaW4gdGhlIFNvZnR3YXJlIGFuZCB0aGlzIGVudGlyZSBzdGF0ZW1lbnQsIGluY2x1ZGluZwordGhlIGFib3ZlIGxpY2Vuc2UgZ3JhbnQsIHRoaXMgcmVzdHJpY3Rpb24gYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwKK211c3QgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGluIHdob2xlIG9yIGluIHBhcnQsIGFuZAorYWxsIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNvZnR3YXJlLCB1bmxlc3Mgc3VjaCBjb3BpZXMgb3IgZGVyaXZhdGl2ZQord29ya3MgYXJlIHNvbGVseSBpbiB0aGUgZm9ybSBvZiBtYWNoaW5lLWV4ZWN1dGFibGUgb2JqZWN0IGNvZGUgZ2VuZXJhdGVkIGJ5CithIHNvdXJjZSBsYW5ndWFnZSBwcm9jZXNzb3IuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBUSVRMRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQKK1NIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBPUiBBTllPTkUgRElTVFJJQlVUSU5HIFRIRSBTT0ZUV0FSRSBCRSBMSUFCTEUKK0ZPUiBBTlkgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCitERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9Ccm9hZGNvbSBiL2xpY2Vuc2VzL0Jyb2FkY29tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3YTMzNDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9Ccm9hZGNvbQpAQCAtMCwwICsxLDY5IEBACisKK1NPRlRXQVJFIExJQ0VOU0UgQUdSRUVNRU5UCisKK1VubGVzcyB5b3UgYW5kIEJyb2FkY29tIENvcnBvcmF0aW9uICjigJxCcm9hZGNvbeKAnSkgZXhlY3V0ZSBhIHNlcGFyYXRlIHdyaXR0ZW4gc29mdHdhcmUgbGljZW5zZSBhZ3JlZW1lbnQgZ292ZXJuaW5nIHVzZSBvZiB0aGUgYWNjb21wYW55aW5nIHNvZnR3YXJlLCB0aGlzIHNvZnR3YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBTb2Z0d2FyZSBMaWNlbnNlIEFncmVlbWVudCAo4oCcQWdyZWVtZW504oCdKS4KKworQU5ZIFVTRSwgUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgU09GVFdBUkUgQ09OU1RJVFVURVMgWU9VUiBBQ0NFUFRBTkNFIE9GIFRISVMgQUdSRUVNRU5ULgorCisxLglERUZJTklUSU9OUy4KKworMS4xLgnigJxCcm9hZGNvbSBQcm9kdWN04oCdIG1lYW5zIGFueSBvZiB0aGUgcHJvcHJpZXRhcnkgaW50ZWdyYXRlZCBjaXJjdWl0IHByb2R1Y3Qocykgc29sZCBieSBCcm9hZGNvbSB3aXRoIHdoaWNoIHRoZSBTb2Z0d2FyZSB3YXMgZGVzaWduZWQgdG8gYmUgdXNlZCwgb3IgdGhlaXIgc3VjY2Vzc29ycy4KKworMS4yLgnigJxMaWNlbnNlZeKAnSBtZWFucyB5b3Ugb3IgaWYgeW91IGFyZSBhY2NlcHRpbmcgb24gYmVoYWxmIG9mIGFuIGVudGl0eSB0aGVuIHRoZSBlbnRpdHkgYW5kIGl0cyBhZmZpbGlhdGVzIGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudC4KKworMS4zLgnigJxTb2Z0d2FyZeKAnSBzaGFsbCBtZWFuIHRoYXQgc29mdHdhcmUgbWFkZSBhdmFpbGFibGUgYnkgQnJvYWRjb20gdG8gTGljZW5zZWUgaW4gYmluYXJ5IGNvZGUgZm9ybSB3aXRoIHRoaXMgQWdyZWVtZW50LgorCisyLglMSUNFTlNFIEdSQU5UOyBPV05FUlNISVAKKworMi4xLglMaWNlbnNlIEdyYW50cy4gIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50LCBCcm9hZGNvbSBoZXJlYnkgZ3JhbnRzIHRvIExpY2Vuc2VlIGEgbm9uLWV4Y2x1c2l2ZSwgbm9uLXRyYW5zZmVyYWJsZSwgcm95YWx0eS1mcmVlIGxpY2Vuc2UgKGkpIHRvIHVzZSBhbmQgaW50ZWdyYXRlIHRoZSBTb2Z0d2FyZSBpbiBjb25qdW5jdGlvbiB3aXRoIGFueSBvdGhlciBzb2Z0d2FyZTsgYW5kIChpaSkgdG8gcmVwcm9kdWNlIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBjb21wbGV0ZSwgdW5tb2RpZmllZCBhbmQgb25seSBmb3IgdXNlIHdpdGggYSBCcm9hZGNvbSBQcm9kdWN0LgorCisyLjIuCVJlc3RyaWN0aW9uIG9uIE1vZGlmaWNhdGlvbi4gIElmIGFuZCB0byB0aGUgZXh0ZW50IHRoYXQgdGhlIFNvZnR3YXJlIGlzIGRlc2lnbmVkIHRvIGJlIGNvbXBsaWFudCB3aXRoIGFueSBwdWJsaXNoZWQgY29tbXVuaWNhdGlvbnMgc3RhbmRhcmQgKGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBET0NTSVMsIEhvbWVQTkEsIElFRUUsIGFuZCBJVFUgc3RhbmRhcmRzKSwgTGljZW5zZWUgbWF5IG5vdCBtYWtlIGFueSBtb2RpZmljYXRpb25zIHRvIHRoZSBTb2Z0d2FyZSB0aGF0IHdvdWxkIGNhdXNlIHRoZSBTb2Z0d2FyZSBvciB0aGUgYWNjb21wYW55aW5nIEJyb2FkY29tIFByb2R1Y3RzIHRvIGJlIGluY29tcGF0aWJsZSB3aXRoIHN1Y2ggc3RhbmRhcmQuCisKKzIuMy4JUmVzdHJpY3Rpb24gb24gRGlzdHJpYnV0aW9uLiAgTGljZW5zZWUgc2hhbGwgb25seSBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSAoYSkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBhIGNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgYWNjb21wYW5pZXMgc3VjaCBkaXN0cmlidXRpb24sIGFuZCAoYikgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IEJyb2FkY29tIGFuZCBpdHMgbGljZW5zb3JzIGZyb20gYW5kIGFnYWluc3QgYW55IGRhbWFnZXMsIGNvc3RzLCBsaWFiaWxpdGllcywgc2V0dGxlbWVudCBhbW91bnRzIGFuZC9vciBleHBlbnNlcyAoaW5jbHVkaW5nIGF0dG9ybmV5cycgZmVlcykgaW5jdXJyZWQgaW4gY29ubmVjdGlvbiB3aXRoIGFueSBjbGFpbSwgbGF3c3VpdCBvciBhY3Rpb24gYnkgYW55IHRoaXJkIHBhcnR5IHRoYXQgYXJpc2VzIG9yIHJlc3VsdHMgZnJvbSB0aGUgdXNlIG9yIGRpc3RyaWJ1dGlvbiBvZiBhbnkgYW5kIGFsbCBTb2Z0d2FyZSBieSB0aGUgTGljZW5zZWUgZXhjZXB0IGFzIGNvbnRlbXBsYXRlZCBoZXJlaW4uCisKKzIuNC4JUHJvcHJpZXRhcnkgTm90aWNlcy4gIExpY2Vuc2VlIHNoYWxsIG5vdCByZW1vdmUsIGVmZmFjZSBvciBvYnNjdXJlIGFueSBjb3B5cmlnaHQgb3IgdHJhZGVtYXJrIG5vdGljZXMgZnJvbSB0aGUgU29mdHdhcmUuICBMaWNlbnNlZSBzaGFsbCBpbmNsdWRlIHJlcHJvZHVjdGlvbnMgb2YgdGhlIEJyb2FkY29tIGNvcHlyaWdodCBub3RpY2Ugd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFNvZnR3YXJlLCBleGNlcHQgd2hlcmUgc3VjaCBTb2Z0d2FyZSBpcyBlbWJlZGRlZCBpbiBhIG1hbm5lciBub3QgcmVhZGlseSBhY2Nlc3NpYmxlIHRvIHRoZSBlbmQgdXNlci4gIExpY2Vuc2VlIGFja25vd2xlZGdlcyB0aGF0IGFueSBzeW1ib2xzLCB0cmFkZW1hcmtzLCB0cmFkZW5hbWVzLCBhbmQgc2VydmljZSBtYXJrcyBhZG9wdGVkIGJ5IEJyb2FkY29tIHRvIGlkZW50aWZ5IHRoZSBTb2Z0d2FyZSBiZWxvbmcgdG8gQnJvYWRjb20gYW5kIHRoYXQgTGljZW5zZWUgc2hhbGwgaGF2ZSBubyByaWdodHMgdGhlcmVpbi4KKworMi41LglPd25lcnNoaXAuICBCcm9hZGNvbSBzaGFsbCByZXRhaW4gYWxsIHJpZ2h0LCB0aXRsZSBhbmQgaW50ZXJlc3QsIGluY2x1ZGluZyBhbGwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cywgaW4gYW5kIHRvIHRoZSBTb2Z0d2FyZS4gIExpY2Vuc2VlIGhlcmVieSBjb3ZlbmFudHMgdGhhdCBpdCB3aWxsIG5vdCBhc3NlcnQgYW55IGNsYWltIHRoYXQgdGhlIFNvZnR3YXJlIGNyZWF0ZWQgYnkgb3IgZm9yIEJyb2FkY29tIGluZnJpbmdlIGFueSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHQgb3duZWQgb3IgY29udHJvbGxlZCBieSBMaWNlbnNlZS4KKworMi42LglObyBPdGhlciBSaWdodHMgR3JhbnRlZDsgUmVzdHJpY3Rpb25zLiAgQXBhcnQgZnJvbSB0aGUgbGljZW5zZSByaWdodHMgZXhwcmVzc2x5IHNldCBmb3J0aCBpbiB0aGlzIEFncmVlbWVudCwgQnJvYWRjb20gZG9lcyBub3QgZ3JhbnQgYW5kIExpY2Vuc2VlIGRvZXMgbm90IHJlY2VpdmUgYW55IG93bmVyc2hpcCByaWdodCwgdGl0bGUgb3IgaW50ZXJlc3Qgbm9yIGFueSBzZWN1cml0eSBpbnRlcmVzdCBvciBvdGhlciBpbnRlcmVzdCBpbiBhbnkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyByZWxhdGluZyB0byB0aGUgU29mdHdhcmUsIG5vciBpbiBhbnkgY29weSBvZiBhbnkgcGFydCBvZiB0aGUgZm9yZWdvaW5nLiAgTGljZW5zZWUgc2hhbGwgbm90IChpKSB1c2UsIGxpY2Vuc2UsIHNlbGwgb3Igb3RoZXJ3aXNlIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGV4Y2VwdCBhcyBwcm92aWRlZCBpbiB0aGlzIEFncmVlbWVudCwgKGlpKSBhdHRlbXB0IHRvIHJldmVyc2UgZW5naW5lZXIsIGRlY29tcGlsZSBvciBkaXNhc3NlbWJsZSBhbnkgcG9ydGlvbiBvZiB0aGUgU29mdHdhcmU7IG9yIChpaWkpIHVzZSB0aGUgU29mdHdhcmUgb3Igb3RoZXIgbWF0ZXJpYWwgaW4gdmlvbGF0aW9uIG9mIGFueSBhcHBsaWNhYmxlIGxhdyBvciByZWd1bGF0aW9uLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGFueSByZWd1bGF0b3J5IGFnZW5jeSwgc3VjaCBhcyBGQ0MsIHJ1bGVzLgorCiszLglOTyBXQVJSQU5UWSBPUiBTVVBQT1JUCisKKzMuMS4JTm8gV2FycmFudHkuIFRIRSBTT0ZUV0FSRSBJUyBPRkZFUkVEIOKAnEFTIElTLOKAnSBBTkQgQlJPQURDT00gR1JBTlRTIEFORCBMSUNFTlNFRSBSRUNFSVZFUyBOTyBXQVJSQU5USUVTIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIEJZIFNUQVRVVEUsIENPTU1VTklDQVRJT04gT1IgQ09ORFVDVCBXSVRIIExJQ0VOU0VFLCBPUiBPVEhFUldJU0UuICBCUk9BRENPTSBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1TIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFNQRUNJRklDIFBVUlBPU0UgT1IgTk9OSU5GUklOR0VNRU5UIENPTkNFUk5JTkcgVEhFIFNPRlRXQVJFIE9SIEFOWSBVUEdSQURFUyBUTyBPUiBET0NVTUVOVEFUSU9OIEZPUiBUSEUgU09GVFdBUkUuICBXSVRIT1VUIExJTUlUQVRJT04gT0YgVEhFIEFCT1ZFLCBCUk9BRENPTSBHUkFOVFMgTk8gV0FSUkFOVFkgVEhBVCBUSEUgU09GVFdBUkUgSVMgRVJST1ItRlJFRSBPUiBXSUxMIE9QRVJBVEUgV0lUSE9VVCBJTlRFUlJVUFRJT04sIEFORCBHUkFOVFMgTk8gV0FSUkFOVFkgUkVHQVJESU5HIElUUyBVU0UgT1IgVEhFIFJFU1VMVFMgVEhFUkVGUk9NIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBJVFMgQ09SUkVDVE5FU1MsIEFDQ1VSQUNZIE9SIFJFTElBQklMSVRZLgorCiszLjIuCU5vIFN1cHBvcnQuICBOb3RoaW5nIGluIHRoaXMgYWdyZWVtZW50IHNoYWxsIG9ibGlnYXRlIEJyb2FkY29tIHRvIHByb3ZpZGUgYW55IHN1cHBvcnQgZm9yIHRoZSBTb2Z0d2FyZS4gQnJvYWRjb20gbWF5LCBidXQgc2hhbGwgYmUgdW5kZXIgbm8gb2JsaWdhdGlvbiB0bywgY29ycmVjdCBhbnkgZGVmZWN0cyBpbiB0aGUgU29mdHdhcmUgYW5kL29yIHByb3ZpZGUgdXBkYXRlcyB0byBsaWNlbnNlZXMgb2YgdGhlIFNvZnR3YXJlLiAgTGljZW5zZWUgc2hhbGwgbWFrZSByZWFzb25hYmxlIGVmZm9ydHMgdG8gcHJvbXB0bHkgcmVwb3J0IHRvIEJyb2FkY29tIGFueSBkZWZlY3RzIGl0IGZpbmRzIGluIHRoZSBTb2Z0d2FyZSwgYXMgYW4gYWlkIHRvIGNyZWF0aW5nIGltcHJvdmVkIHJldmlzaW9ucyBvZiB0aGUgU29mdHdhcmUuCisKKzMuMy4JRGFuZ2Vyb3VzIEFwcGxpY2F0aW9ucy4gIFRoZSBTb2Z0d2FyZSBpcyBub3QgZGVzaWduZWQsIGludGVuZGVkLCBvciBjZXJ0aWZpZWQgZm9yIHVzZSBpbiBjb21wb25lbnRzIG9mIHN5c3RlbXMgaW50ZW5kZWQgZm9yIHRoZSBvcGVyYXRpb24gb2Ygd2VhcG9ucywgd2VhcG9ucyBzeXN0ZW1zLCBudWNsZWFyIGluc3RhbGxhdGlvbnMsIG1lYW5zIG9mIG1hc3MgdHJhbnNwb3J0YXRpb24sIGF2aWF0aW9uLCBsaWZlLXN1cHBvcnQgY29tcHV0ZXJzIG9yIGVxdWlwbWVudCAoaW5jbHVkaW5nIHJlc3VzY2l0YXRpb24gZXF1aXBtZW50IGFuZCBzdXJnaWNhbCBpbXBsYW50cyksIHBvbGx1dGlvbiBjb250cm9sLCBoYXphcmRvdXMgc3Vic3RhbmNlcyBtYW5hZ2VtZW50LCBvciBmb3IgYW55IG90aGVyIGRhbmdlcm91cyBhcHBsaWNhdGlvbiBpbiB3aGljaCB0aGUgZmFpbHVyZSBvZiB0aGUgU29mdHdhcmUgY291bGQgY3JlYXRlIGEgc2l0dWF0aW9uIHdoZXJlIHBlcnNvbmFsIGluanVyeSBvciBkZWF0aCBtYXkgb2NjdXIuICBMaWNlbnNlZSB1bmRlcnN0YW5kcyB0aGF0IHVzZSBvZiB0aGUgU29mdHdhcmUgaW4gc3VjaCBhcHBsaWNhdGlvbnMgaXMgZnVsbHkgYXQgdGhlIHJpc2sgb2YgTGljZW5zZWUuCisKKzQuCVRFUk0gQU5EIFRFUk1JTkFUSU9OCisKKzQuMS4JVGVybWluYXRpb24uICBUaGlzIEFncmVlbWVudCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIGlmIExpY2Vuc2VlIGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgaGVyZW9mLiBJbiBzdWNoIGV2ZW50LCBMaWNlbnNlZSBtdXN0IGRlc3Ryb3kgYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUgYW5kIGFsbCBvZiBpdHMgY29tcG9uZW50IHBhcnRzLgorCis0LjIuCUVmZmVjdCBPZiBUZXJtaW5hdGlvbi4gIFVwb24gYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgQWdyZWVtZW50LCB0aGUgcmlnaHRzIGFuZCBsaWNlbnNlcyBncmFudGVkIHRvIExpY2Vuc2VlIHVuZGVyIHRoaXMgQWdyZWVtZW50IHNoYWxsIGltbWVkaWF0ZWx5IHRlcm1pbmF0ZS4KKworNC4zLglTdXJ2aXZhbC4gIFRoZSByaWdodHMgYW5kIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IHdoaWNoIGJ5IHRoZWlyIG5hdHVyZSBzaG91bGQgc3Vydml2ZSB0ZXJtaW5hdGlvbiB3aWxsIHJlbWFpbiBpbiBlZmZlY3QgYWZ0ZXIgZXhwaXJhdGlvbiBvciB0ZXJtaW5hdGlvbiBvZiB0aGlzIEFncmVlbWVudC4KKworNS4JQ09ORklERU5USUFMSVRZCisKKzUuMS4JT2JsaWdhdGlvbnMuICBMaWNlbnNlZSBhY2tub3dsZWRnZXMgYW5kIGFncmVlcyB0aGF0IGFueSBkb2N1bWVudGF0aW9uIHJlbGF0aW5nIHRvIHRoZSBTb2Z0d2FyZSwgYW5kIGFueSBvdGhlciBpbmZvcm1hdGlvbiAoaWYgc3VjaCBvdGhlciBpbmZvcm1hdGlvbiBpcyBpZGVudGlmaWVkIGFzIGNvbmZpZGVudGlhbCBvciBzaG91bGQgYmUgcmVjb2duaXplZCBhcyBjb25maWRlbnRpYWwgdW5kZXIgdGhlIGNpcmN1bXN0YW5jZXMpIHByb3ZpZGVkIHRvIExpY2Vuc2VlIGJ5IEJyb2FkY29tIGhlcmV1bmRlciAoY29sbGVjdGl2ZWx5LCDigJxDb25maWRlbnRpYWwgSW5mb3JtYXRpb27igJ0pIGNvbnN0aXR1dGUgdGhlIGNvbmZpZGVudGlhbCBhbmQgcHJvcHJpZXRhcnkgaW5mb3JtYXRpb24gb2YgQnJvYWRjb20sIGFuZCB0aGF0IExpY2Vuc2Vl4oCZcyBwcm90ZWN0aW9uIHRoZXJlb2YgaXMgYW4gZXNzZW50aWFsIGNvbmRpdGlvbiB0byBMaWNlbnNlZeKAmXMgdXNlIGFuZCBwb3NzZXNzaW9uIG9mIHRoZSBTb2Z0d2FyZS4gIExpY2Vuc2VlIHNoYWxsIHJldGFpbiBhbGwgQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uIGluIHN0cmljdCBjb25maWRlbmNlIGFuZCBub3QgZGlzY2xvc2UgaXQgdG8gYW55IHRoaXJkIHBhcnR5IG9yIHVzZSBpdCBpbiBhbnkgd2F5IGV4Y2VwdCB1bmRlciBhIHdyaXR0ZW4gYWdyZWVtZW50IHdpdGggdGVybXMgYW5kIGNvbmRpdGlvbnMgYXQgbGVhc3QgYXMgcHJvdGVjdGl2ZSBhcyB0aGUgdGVybXMgb2YgdGhpcyBTZWN0aW9uLiAgTGljZW5zZWUgd2lsbCBleGVyY2lzZSBhdCBsZWFzdCB0aGUgc2FtZSBhbW91bnQgb2YgZGlsaWdlbmNlIGluIHByZXNlcnZpbmcgdGhlIHNlY3JlY3kgb2YgdGhlIENvbmZpZGVudGlhbCBJbmZvcm1hdGlvbiBhcyBpdCB1c2VzIGluIHByZXNlcnZpbmcgdGhlIHNlY3JlY3kgb2YgaXRzIG93biBtb3N0IHZhbHVhYmxlIGNvbmZpZGVudGlhbCBpbmZvcm1hdGlvbiwgYnV0IGluIG5vIGV2ZW50IGxlc3MgdGhhbiByZWFzb25hYmxlIGRpbGlnZW5jZS4gIEluZm9ybWF0aW9uIHNoYWxsIG5vdCBiZSBjb25zaWRlcmVkIENvbmZpZGVudGlhbCBJbmZvcm1hdGlvbiBpZiBhbmQgdG8gdGhlIGV4dGVudCB0aGF0IGl0OiAoaSkgd2FzIGluIHRoZSBwdWJsaWMgZG9tYWluIGF0IHRoZSB0aW1lIGl0IHdhcyBkaXNjbG9zZWQgb3IgaGFzIGVudGVyZWQgdGhlIHB1YmxpYyBkb21haW4gdGhyb3VnaCBubyBmYXVsdCBvZiBMaWNlbnNlZTsgKGlpKSB3YXMga25vd24gdG8gTGljZW5zZWUsIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGF0IHRoZSB0aW1lIG9mIGRpc2Nsb3N1cmUgYXMgcHJvdmVuIGJ5IHRoZSBmaWxlcyBvZiBMaWNlbnNlZSBpbiBleGlzdGVuY2UgYXQgdGhlIHRpbWUgb2YgZGlzY2xvc3VyZTsgb3IgKGlpaSkgYmVjb21lcyBrbm93biB0byBMaWNlbnNlZSwgd2l0aG91dCByZXN0cmljdGlvbiwgZnJvbSBhIHNvdXJjZSBvdGhlciB0aGFuIEJyb2FkY29tIHdpdGhvdXQgYnJlYWNoIG9mIHRoaXMgQWdyZWVtZW50IGJ5IExpY2Vuc2VlIGFuZCBvdGhlcndpc2Ugbm90IGluIHZpb2xhdGlvbiBvZiBCcm9hZGNvbeKAmXMgcmlnaHRzLgorCis1LjIuCVJldHVybiBvZiBDb25maWRlbnRpYWwgSW5mb3JtYXRpb24uICBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZywgYWxsIGRvY3VtZW50cyBhbmQgb3RoZXIgdGFuZ2libGUgb2JqZWN0cyBjb250YWluaW5nIG9yIHJlcHJlc2VudGluZyBCcm9hZGNvbSBDb25maWRlbnRpYWwgSW5mb3JtYXRpb24gYW5kIGFsbCBjb3BpZXMgdGhlcmVvZiB3aGljaCBhcmUgaW4gdGhlIHBvc3Nlc3Npb24gb2YgTGljZW5zZWUgc2hhbGwgYmUgYW5kIHJlbWFpbiB0aGUgcHJvcGVydHkgb2YgQnJvYWRjb20sIGFuZCBzaGFsbCBiZSBwcm9tcHRseSByZXR1cm5lZCB0byBCcm9hZGNvbSB1cG9uIHdyaXR0ZW4gcmVxdWVzdCBieSBCcm9hZGNvbSBvciB1cG9uIHRlcm1pbmF0aW9uIG9mIHRoaXMgQWdyZWVtZW50LgorCis2LglMSU1JVEFUSU9OIE9GIExJQUJJTElUWQorVE8gVEhFIE1BWElNVU0gRVhURU5UIFBFUk1JVFRFRCBCWSBMQVcsIElOIE5PIEVWRU5UIFNIQUxMIEJST0FEQ09NIE9SIEFOWSBPRiBCUk9BRENPTeKAmVMgTElDRU5TT1JTIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IgQU5ZIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBGT1IgQlJFQUNIIE9GIENPTlRSQUNULCBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSkgT1IgT1RIRVJXSVNFLCBBUklTSU5HIE9VVCBPRiBUSElTIEFHUkVFTUVOVCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBMT1NTIE9GIFBST0ZJVFMsIEVWRU4gSUYgU1VDSCBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIEluIG5vIGV2ZW50IHdpbGwgQnJvYWRjb23igJlzIGxpYWJpbGl0eSB3aGV0aGVyIGluIGNvbnRyYWN0LCB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIG9yIG90aGVyd2lzZSwgZXhjZWVkIHRoZSBhbW91bnQgcGFpZCBieSBMaWNlbnNlZSBmb3IgU29mdHdhcmUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQuICBUSEVTRSBMSU1JVEFUSU9OUyBTSEFMTCBBUFBMWSBOT1RXSVRIU1RBTkRJTkcgQU5ZIEZBSUxVUkUgT0YgRVNTRU5USUFMIFBVUlBPU0UgT0YgQU5ZIExJTUlURUQgUkVNRURZLgorCis3LglNSVNDRUxMQU5FT1VTCisKKzcuMS4JQXNzaWdubWVudC4gVGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgYmluZGluZyB1cG9uIGFuZCBpbnVyZSB0byB0aGUgYmVuZWZpdCBvZiB0aGUgcGFydGllcyBhbmQgdGhlaXIgcmVzcGVjdGl2ZSBzdWNjZXNzb3JzIGFuZCBhc3NpZ25zLCBwcm92aWRlZCwgaG93ZXZlciB0aGF0IExpY2Vuc2VlIG1heSBub3QgYXNzaWduIHRoaXMgQWdyZWVtZW50IG9yIGFueSByaWdodHMgb3Igb2JsaWdhdGlvbiBoZXJldW5kZXIsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGJ5IG9wZXJhdGlvbiBvZiBsYXcgb3Igb3RoZXJ3aXNlLCB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQnJvYWRjb20sIGFuZCBhbnkgc3VjaCBhdHRlbXB0ZWQgYXNzaWdubWVudCBzaGFsbCBiZSB2b2lkLiAgTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsIExpY2Vuc2VlIG1heSBhc3NpZ24gdGhpcyBBZ3JlZW1lbnQgdG8gYSBzdWNjZXNzb3IgdG8gYWxsIG9yIHN1YnN0YW50aWFsbHkgYWxsIG9mIGl0cyBidXNpbmVzcyBvciBhc3NldHMgdG8gd2hpY2ggdGhpcyBBZ3JlZW1lbnQgcmVsYXRlcyB0aGF0IGlzIG5vdCBhIGNvbXBldGl0b3Igb2YgQnJvYWRjb20uCisKKzcuMi4JR292ZXJuaW5nIExhdzsgVmVudWUuICBUaGlzIEFncmVlbWVudCBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiBDYWxpZm9ybmlhIHdpdGhvdXQgcmVnYXJkIHRvIGFueSBjb25mbGljdC1vZi1sYXdzIHJ1bGVzLCBhbmQgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGhlcmVieSBleGNsdWRlZC4gIFRoZSBzb2xlIGp1cmlzZGljdGlvbiBhbmQgdmVudWUgZm9yIGFjdGlvbnMgcmVsYXRlZCB0byB0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mIHNoYWxsIGJlIHRoZSBzdGF0ZSBhbmQgZmVkZXJhbCBjb3VydHMgbG9jYXRlZCBpbiB0aGUgQ291bnR5IG9mIE9yYW5nZSwgQ2FsaWZvcm5pYSwgYW5kIGJvdGggcGFydGllcyBoZXJlYnkgY29uc2VudCB0byBzdWNoIGp1cmlzZGljdGlvbiBhbmQgdmVudWUuCisKKzcuMy4JU2V2ZXJhYmlsaXR5LiAgQWxsIHRlcm1zIGFuZCBwcm92aXNpb25zIG9mIHRoaXMgQWdyZWVtZW50IHNoYWxsLCBpZiBwb3NzaWJsZSwgYmUgY29uc3RydWVkIGluIGEgbWFubmVyIHdoaWNoIG1ha2VzIHRoZW0gdmFsaWQsIGJ1dCBpbiB0aGUgZXZlbnQgYW55IHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGZvdW5kIGJ5IGEgY291cnQgb2YgY29tcGV0ZW50IGp1cmlzZGljdGlvbiB0byBiZSBpbGxlZ2FsIG9yIHVuZW5mb3JjZWFibGUsIHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoaXMgQWdyZWVtZW50IHNoYWxsIG5vdCBiZSBhZmZlY3RlZCBpZiB0aGUgaWxsZWdhbCBvciB1bmVuZm9yY2VhYmxlIHByb3Zpc2lvbiBkb2VzIG5vdCBtYXRlcmlhbGx5IGFmZmVjdCB0aGUgaW50ZW50IG9mIHRoaXMgQWdyZWVtZW50LiAgSWYgdGhlIGlsbGVnYWwgb3IgdW5lbmZvcmNlYWJsZSBwcm92aXNpb24gbWF0ZXJpYWxseSBhZmZlY3RzIHRoZSBpbnRlbnQgb2YgdGhlIHBhcnRpZXMgdG8gdGhpcyBBZ3JlZW1lbnQsIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlY29tZSB0ZXJtaW5hdGVkLgorCis3LjQuCUVxdWl0YWJsZSBSZWxpZWYuICBMaWNlbnNlZSBoZXJlYnkgYWNrbm93bGVkZ2VzIHRoYXQgaXRzIGJyZWFjaCBvZiB0aGlzIEFncmVlbWVudCB3b3VsZCBjYXVzZSBpcnJlcGFyYWJsZSBoYXJtIGFuZCBzaWduaWZpY2FudCBpbmp1cnkgdG8gQnJvYWRjb20gdGhhdCBtYXkgYmUgZGlmZmljdWx0IHRvIGFzY2VydGFpbiBhbmQgdGhhdCBhIHJlbWVkeSBhdCBsYXcgd291bGQgYmUgaW5hZGVxdWF0ZS4gIEFjY29yZGluZ2x5LCBMaWNlbnNlZSBhZ3JlZXMgdGhhdCBCcm9hZGNvbSBzaGFsbCBoYXZlIHRoZSByaWdodCB0byBzZWVrIGFuZCBvYnRhaW4gaW1tZWRpYXRlIGluanVuY3RpdmUgcmVsaWVmIHRvIGVuZm9yY2Ugb2JsaWdhdGlvbnMgdW5kZXIgdGhlIEFncmVlbWVudCBpbiBhZGRpdGlvbiB0byBhbnkgb3RoZXIgcmlnaHRzIGFuZCByZW1lZGllcyBpdCBtYXkgaGF2ZS4KKworNy41LglFeHBvcnQgUmVndWxhdGlvbnMuIFRoZSBwYXJ0aWVzIGFncmVlIHRoYXQgdGhleSBzaGFsbCBlYWNoIGNvbXBseSwgYXQgdGhlaXIgb3duIGV4cGVuc2UsIHdpdGggdGhlIFUuUy4gRm9yZWlnbiBDb3JydXB0IFByYWN0aWNlcyBBY3QgYW5kIGFsbCAgaW1wb3J0IGFuZCBleHBvcnQgbGF3cywgcmVzdHJpY3Rpb25zLCBuYXRpb25hbCBzZWN1cml0eSBjb250cm9scyBhbmQgcmVndWxhdGlvbnMgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgYW5kIGFueSBhcHBsaWNhYmxlIGZvcmVpZ24gYWdlbmN5IG9yIGF1dGhvcml0eS4gIFRoZSBwYXJ0aWVzIHNoYWxsIG5vdCBpbXBvcnQsIGV4cG9ydCBvciByZS1leHBvcnQsIG9yIGF1dGhvcml6ZSB0aGUgZXhwb3J0IG9yIHJlLWV4cG9ydCBvZiB0aGUgU29mdHdhcmUgb3IgYW55IG90aGVyIHByb2R1Y3QsIHRlY2hub2xvZ3ksIG9yIGluZm9ybWF0aW9uIHRoYXQgaXQgb2J0YWlucyBvciBsZWFybnMgaGVyZXVuZGVyLCBvciBhbnkgY29weSBvciBkaXJlY3QgcHJvZHVjdCB0aGVyZW9mLCBpbiB2aW9sYXRpb24gb2YgYW55IG9mIHN1Y2ggbGF3cywgcmVzdHJpY3Rpb25zLCBvciByZWd1bGF0aW9ucyBvciB3aXRob3V0IGFueSBsaWNlbnNlIG9yIGFwcHJvdmFsIHJlcXVpcmVkIHRoZXJldW5kZXIuICBBbnkgYW5kIGFsbCBvYmxpZ2F0aW9ucyBvZiB0aGUgcGFydGllcyB0byBwcm92aWRlIHRoZSBTb2Z0d2FyZSBvciBhbnkgb3RoZXIgcHJvZHVjdCwgdGVjaG5vbG9neSwgb3IgaW5mb3JtYXRpb24gaGVyZXVuZGVyIHNoYWxsIGJlIHN1YmplY3QgaW4gYWxsIHJlc3BlY3RzIHRvIHN1Y2ggbGF3cywgcmVzdHJpY3Rpb25zLCBhbmQgcmVndWxhdGlvbnMuCisKKzcuNi4JV2FpdmVyLiAgVGhlIHdhaXZlciBvZiwgb3IgZmFpbHVyZSB0byBlbmZvcmNlLCBhbnkgYnJlYWNoIG9yIGRlZmF1bHQgaGVyZXVuZGVyIHNoYWxsIG5vdCBjb25zdGl0dXRlIHRoZSB3YWl2ZXIgb2YgYW55IG90aGVyIG9yIHN1YnNlcXVlbnQgYnJlYWNoIG9yIGRlZmF1bHQuCisKKzcuNy4JRW50aXJlIEFncmVlbWVudC4gIFRoaXMgQWdyZWVtZW50IHNldHMgZm9ydGggdGhlIGVudGlyZSBBZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyBhbmQgc3VwZXJzZWRlcyBhbnkgYW5kIGFsbCBwcmlvciBwcm9wb3NhbHMsIGFncmVlbWVudHMgYW5kIHJlcHJlc2VudGF0aW9ucyBiZXR3ZWVuIHRoZW0sIHdoZXRoZXIgd3JpdHRlbiBvciBvcmFsIGNvbmNlcm5pbmcgdGhlIFNvZnR3YXJlLiAgVGhpcyBBZ3JlZW1lbnQgbWF5IGJlIGNoYW5nZWQgb25seSBieSBtdXR1YWwgYWdyZWVtZW50IG9mIHRoZSBwYXJ0aWVzIGluIHdyaXRpbmcuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9DMyBiL2xpY2Vuc2VzL0MzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyYjU4MjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9DMwpAQCAtMCwwICsxLDIxIEBACisjICAgICAgICAgQzMgdmVyc2lvbiAzLjEuMjogICBDbHVzdGVyIENvbW1hbmQgJiBDb250cm9sIFN1aXRlCisjICAgICAgICAgICBPYWsgUmlkZ2UgTmF0aW9uYWwgTGFib3JhdG9yeSwgT2FrIFJpZGdlLCBUTiwKKyMgICAgIEF1dGhvcnM6ICBNLkJyaW0sIFIuRmxhbmVyeSwgRy5BLkdlaXN0LCBCLkx1ZXRoa2UsIFMuTC5TY290dAorIyAgICAgICAgICAgICAgICAgKEMpIDIwMDEgQWxsIFJpZ2h0cyBSZXNlcnZlZAorIworIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTk9USUNFCisjCisjIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kCisjIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQKKyMgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyMgdGhhdCBib3RoIHRoZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbgorIyBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uCisjCisjIE5laXRoZXIgdGhlIE9hayBSaWRnZSBOYXRpb25hbCBMYWJvcmF0b3J5IG5vciB0aGUgQXV0aG9ycyBtYWtlIGFueQorIyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorIyBwdXJwb3NlLiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvcgorIyBpbXBsaWVkIHdhcnJhbnR5LgorCisjIFRoZSBDMyB0b29scyB3ZXJlIGZ1bmRlZCBieSB0aGUgVS5TLiBEZXBhcnRtZW50IG9mIEVuZXJneS4KKworCmRpZmYgLS1naXQgYS9saWNlbnNlcy9DQU9TTCBiL2xpY2Vuc2VzL0NBT1NMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2MTJhZjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9DQU9TTApAQCAtMCwwICsxLDMyIEBACitWZXJzaW9uIDEuMAorCitDb3B5cmlnaHQgKGMpIDIwMDIgQ29tcHV0ZXIgQXNzb2NpYXRlcy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IAordGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSAKK2ZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgCitmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sIGlmIGFueSwgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgCithY2tub3dsZWRnbWVudDoKKyJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IENvbXB1dGVyIEFzc29jaWF0ZXMgKGh0dHA6Ly93d3cuY2EuY29tLykuIgorQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLCBpZiBhbmQgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSAKK2Fja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCisKKzQuIFRoZSBuYW1lICJDb21wdXRlciBBc3NvY2lhdGVzIiBtdXN0IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSAKK3dpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCis1LiBQcm9kdWN0cyBtYXkgbm90IGluY2x1ZGUgIkNvbXB1dGVyIEFzc29jaWF0ZXMiIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBDb21wdXRlciAKK0Fzc29jaWF0ZXMuCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgCitDT01QVVRFUiBBU1NPQ0lBVEVTIE9SIENPTlRSSUJVVE9SUyBUTyBUSEUgSlhQTE9SRVIgT1BFTiBTT1VSQ0UgUFJPSkVDVCBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCAKK0lOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgCitTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSAKK0FSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvQ0FQUyBiL2xpY2Vuc2VzL0NBUFMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ZhOTRjZQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0NBUFMKQEAgLTAsMCArMSwzMDAgQEAKK0MuQS5QLlMuIC0gVGhlIENsYXNzaWMgQW1pZ2EgUHJlc2VydmF0aW9uIFNvY2lldHkKK0ZyZWV3YXJlIExpY2Vuc2UgQWdyZWVtZW50IChMaWNlbnNlLCBDb3B5cmlnaHQgYW5kIFRlcm1zIG9mIFVzZSkKKworCitBVFRFTlRJT046IFJFQUQgQ0FSRUZVTExZOiBCeSB1c2luZywgY29weWluZywgb3IgZGlzdHJpYnV0aW5nIHRoZQorYWNjb21wYW55aW5nIHNvZnR3YXJlIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlIGZvbGxvd2luZworQy5BLlAuUy4gRnJlZXdhcmUgTGljZW5zZSBBZ3JlZW1lbnQgKCJBZ3JlZW1lbnQiKS4KKworCitQUkVBTUJMRQorCitUaGUgQy5BLlAuUy4gcGhpbG9zb3BoeSBkaWN0YXRlcyB0aGF0IHRoZSB0ZWNobm9sb2d5IGFzc29jaWF0ZWQgd2l0aAorYWxsb3dpbmcgZmxvcHB5IGRpc2sgYmFzZWQgY29tcHV0ZXIgZ2FtZXMgKEMuQS5QLlMuIGlzIG5vdCBqdXN0IGFuCitBbWlnYSBmb2N1c2VkIG9yZ2FuaXNhdGlvbiwgZXZlbiB0aG91Z2ggaXQgc3RhcnRlZCBvdXQgdGhhdCB3YXkpIHRvIGJlCitjb250YWluZWQgaW4gYSBwcmVzZXJ2YWJsZSBmb3JtIHNob3VsZCBiZSBwcm92aWRlZCBmb3IgZnJlZSAoZnJlZSBhcworaW4gImZyZWUgYmVlciIpLiBObyBwcm9maXQgd2hhdHNvZXZlciBzaG91bGQgYmUgbWFkZSBhcyBhIHJlc3VsdCBvZgordGhpcyB0ZWNobm9sb2d5IHdpdGggZXhjZXB0aW9uIG9mIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVycy4KKworVGhpcyBsaWNlbnNlIGVuZm9yY2VzIHRoaXMgcGhpbG9zb3BoeS4gSXQgcHJvdGVjdHMgYWdhaW5zdCBtaXN1c2Ugb2YKK2EgdGVjaG5vbG9neSB0aGF0IGhhcyBiZWVuIGEgbG9uZyB0aW1lIGluIGRldmVsb3BtZW50IGFuZCBpcyBwcm92aWRlZAordG8gdGhlIEFtaWdhIGNvbW11bml0eSBvciBhbnlvbmUgZWxzZSB3aG8gd291bGQgbGlrZSB0byB1c2UgaXQuIEl0IGFsc28KK2ludGVuZHMgdG8gcHJvdGVjdCBDLkEuUC5TLiBpdHNlbGYgZnJvbSBwb3NzaWJsZSBsZWdhbCBsaWFiaWxpdHkuCisKK1RoZSBDLkEuUC5TLiBzb2Z0d2FyZSBzaG91bGQgYmUgdGhvdWdodCBvZiBhcyBhbiAiZW5hYmxlciIsIGEgZm9ybSBvZgorZGlzdHJpYnV0aW9uLiBJdCBpcyBqdXN0IGFzIGEgWklQIGZpbGUsIGp1c3QgYXMgYW4gQURGIGZpbGUsIGp1c3QgYXMKK3lvdXIgZmF2b3VyaXRlIHdyaXRhYmxlIENEUk9NIGJyYW5kLiBUaGUgZGF0YSBvciBjb250ZW50IGhlbGQgYnkgdGhlc2UKK2ZpbGVzIG9yIG1lZGlhIGlzIGVudGlyZWx5IHRoZSByZXNwb25zaWJpbGl0eSBvZiB5b3UsIHRoZSB1c2VyLiBJZiB5b3UKK2RvIG5vdCBvd24gdGhlIHByb2R1Y3QgY29udGVudCB0aGVuIHlvdSBhcmUgbGlrZWx5IHRvIGJlIGJyZWFraW5nIHRoZQorbGljZW5zZSBvZiB0aGUgY29udGVudCBwcm92aWRlciBvciBjb3B5cmlnaHQgb3duZXIuIFVsdGltYXRlbHksIHRoZQorQy5BLlAuUy4gdGVjaG5vbG9neSBpcyBqdXN0IGFuIGFic3RyYWN0IGRpZ2l0YWwgcmVjb3JkaW5nIG1lZGl1bS4KKworWW91IG1heSBub3RpY2UgdGhhdCB0aGlzIGxpY2Vuc2UgaXMgdmVyeSBzdHJpY3QgaW4gcHVyc3VpdCBvZiBnZXR0aW5nCitpdCBpbnRvIHRoZSBoYW5kcyBvZiBwZW9wbGUgd2hvIHdpc2ggdG8gdXNlIGl0IGZvciBmcmVlLiBZb3UgY2Fubm90CitjaGFyZ2UgdG8gZ2l2ZSBpdCB0byBzb21lYm9keSwgbm90IGV2ZW4gZm9yIG1lZGlhIGNvc3RzLiBZb3UgY2Fubm90CitoYXZlIGl0IG9uIGEgQ0RST00gdGhhdCBpcyBkaXN0cmlidXRlZCBmb3IgcGF5bWVudC4gWW91IGNhbm5vdCB1c2UKK2l0IGFzIHBhcnQgb2YgcHJvdmlkaW5nIGEgc2VydmljZSB0aGF0IHJlY2VpdmVzIHBheW1lbnQgaW4gYW55IGZvcm0uCisKK1RoZSBvbmx5IGV4Y2VwdGlvbiB3aGVyZSB0aGUgQy5BLlAuUy4gdGVjaG5vbG9neSBtYXkgYmUgcG9zc2libHkgdXNlZAord2l0aCBwYXltZW50IGlzIGJ5IGFuIG9yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgKG9yIGFwcG9pbnRlZCBib2R5KS4KK1RoZXkgY2FuIG9mIGNvdXJzZSBjb250YWN0IEMuQS5QLlMuIGZvciBhIHNwZWNpYWwgbGljZW5zZSBmb3IgZ2FtZXMKK3RoZXkgb3duIHNvIGxvbmcgYXMgcHJvb2Ygb2Ygb3duZXJzaGlwIGlzIHByb3ZpZGVkIGFuZCBzdWNoIGEgbGljZW5zZQord2lsbCBiZSByZXN0cmljdGVkIHRvIHRoZXNlIGdhbWVzLiBUaGlzIHNwZWNpYWwgbGljZW5zZSB3aWxsIG9mIGNvdXJzZQorYmUgcHJvdmlkZWQgY29tcGxldGVseSBmb3IgZnJlZS4KKworSW5mcmluZ2VtZW50IG9mIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcyBsaWNlbnNlIGlzIGJyZWFjaGluZworaW50ZXJuYXRpb25hbCBjb3B5cmlnaHQgbGF3cywgYnV0IGl0IGFsc28gaHVydHMgdGhlIGNvbW11bml0aWVzCitiZW5lZml0aW5nIGZyb20gdGhlIHRlY2hub2xvZ3kgYnkgcmlza2luZyBpdHMgZnV0dXJlIGltcHJvdmVtZW50CithbmQgYXZhaWxhYmlsaXR5LiAKKworVGhpcyBsaWNlbnNlIHdhcyBub3QgcHJvZHVjZWQgZm9yIHRoZSBmdW4gb2YgaXQsIHlvdSBzaG91bGQgbm90ZSB0aGF0Citvbmx5IHRob3NlIHdobyBjb3VsZCBwb3NzaWJseSBmaW5hbmNpYWxseSBvciBvdGhlcndpc2UgYmVuZWZpdCBmcm9tIHRoZQorcHJvZHVjdCBhcmUgYmVpbmcgcmVzdHJpY3RlZC4gRnJlZSB1c2UgKGFzIGEgdXNlcikgaXMgbm90IGxpbWl0ZWQsIGl0CitpcyBhYnNvbHV0ZWx5IGZyZWUgYW5kIHdpbGwgc3RheSBmcmVlIGZvcmV2ZXIuCisKK0lmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIGluIHRoaXMgbGljZW5zZSBmb3IgdGhlCitUZWNobm9sb2d5IHRoZW4geW91IGFyZSBvYnZpb3VzbHkgZnJlZSB0byBjaG9vc2Ugbm90IHRvIHVzZSBpdC4KKworVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgbGljZW5zZSBhbmQgbGlicmFyaWVzIGNhbiBiZSBmb3VuZCBvbiBvdXIKK3NpdGU6IGh0dHA6Ly93d3cuY2Fwcy1wcm9qZWN0Lm9yZy4KKworSXQgaXMgdmVyeSBlYXN5IHRvIGNvbXBseSB3aXRoIHRoaXMgbGljZW5zZTogRG8gbm90IHNlbGwsIG1vZGlmeSBvcgorYWJ1c2UgdGhlIHNvZnR3YXJlIG9yIGltYWdlcy4gVGhhdCdzIGl0LiBFdmVyeXRoaW5nIGVsc2UgbWVudGlvbmVkIGlzCitoZXJlIGZvciB0aG9zZSB3aG8gbWF5IG5vdCB1bmRlcnN0YW5kIHRoZXNlIHZlcnkgc2ltcGxlIHJ1bGVzLiA6KQorCisKKzEuIENMQVJJRklDQVRJT04uIFRoZSBzb2Z0d2FyZSBwcm9kdWN0IGFuZCBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbgorICAgKHRoZSBwcm9ncmFtJ3Mgb2JqZWN0IGNvZGUgYW5kIGRvY3VtZW50YXRpb24gYXJlIGNvbGxlY3RpdmVseQorICAgcmVmZXJyZWQgdG8gYXMgdGhlICJUZWNobm9sb2d5IikgaXMgYSB0ZWNobm9sb2d5IGFuZCBkb2VzIG5vdCBpbXBseQorICAgYW55IHJlc3RyaWN0aW9ucywgd2FycmFudHksIGxpY2Vuc2UsIG9ibGlnYXRpb24gb3IgYW55IG90aGVyIGxpbmsgb3IKKyAgIGFzc29jaWF0aW9uIHdpdGggd2hhdCBpdCBtYXkgY29udGFpbiAodGhlIGRhdGEgZW5jYXBzdWxhdGVkIGJ5IHRoZQorICAgVGVjaG5vbG9neSBpcyByZWZlcnJlZCB0byBhcyB0aGUgIkNvbnRlbnQiKS4KKyAgIAorICAgVW5sZXNzIG90aGVyd2lzZSBub3RlZCwgVGhlIENsYXNzaWMgQW1pZ2EgUHJlc2VydmF0aW9uIFNvY2lldHkKKyAgICgiQy5BLlAuUy4iKSBkb2VzIG5vdCBob2xkIHRoZSBjb3B5cmlnaHQgb2YgdGhlICJDb250ZW50IiwgdGhlIGRhdGEKKyAgIGJlaW5nIHJlcHJvZHVjZWQsIHByZXNlcnZlZCwgcmVwcmVzZW50ZWQgdXNpbmcgdGhlIFRlY2hub2xvZ3kuIEFsbAorICAgY29weXJpZ2h0IG9mIENvbnRlbnQgcHJvdmlkZWQgdXNpbmcgdGhlIFRlY2hub2xvZ3kgaXMgaGVsZCBieSBpdHMKKyAgIHJlc3BlY3RpdmUgb3duZXJzLiBUZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYXBwbHkgdG8gdGhlIENvbnRlbnQKKyAgIHRoYXQgZG8gbm90IGFmZmVjdCB3aGF0c29ldmVyIHRoZSBsaWNlbnNlIGFncmVlbWVudCBwcm92aWRlZCB3aXRoCisgICB0aGUgVGVjaG5vbG9neS4gCisKKworMi4gTElDRU5TRS4gQy5BLlAuUy4gaGVyZWJ5IGdyYW50cyB5b3UgKGVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzCisgICAieW91IikgYSBub24tZXhjbHVzaXZlLCB0cmFuc2ZlcmFibGUgbGljZW5zZSB0byB1c2UgdGhlIFRlY2hub2xvZ3kKKyAgIG9uIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIG9ubHkgZm9yIG5vbi1wcm9maXQgcHVycG9zZXMgKHNlZSBTZWN0aW9uCisgICAzIGJlbG93KS4gWW91IG1heToKKworICAgYS4gdXNlIHRoZSBUZWNobm9sb2d5IG9uIGFueSBjb21wdXRlciBpbiB5b3VyIHBvc3Nlc3Npb247CisKKyAgIGIuIG1ha2UgY29waWVzIG9mIHRoZSBUZWNobm9sb2d5OyBhbmQKKworICAgYy4gZGlzdHJpYnV0ZSB0aGUgVGVjaG5vbG9neSAoc3ViamVjdCB0byB0aGUgcmVxdWlyZW1lbnRzIG9mIFNlY3Rpb24KKyAgIDMgYW5kIDQpIG9ubHkgaW4gdGhlIGZvcm0gb3JpZ2luYWxseSBmdXJuaXNoZWQgYnkgQy5BLlAuUy4gd2l0aCBubworICAgbW9kaWZpY2F0aW9ucyB3aGF0c29ldmVyLiBIb3dldmVyLCB0aGUgVGVjaG5vbG9neSBtYXkgYmUgZGlzdHJpYnV0ZWQKKyAgIGFzIHBhcnQgb2YgYW5vdGhlciBzb2Z0d2FyZSBwcm9kdWN0IHByb3ZpZGVkIHRoYXQgdGhlIHBhcnRpY3VsYXIKKyAgIGRpc3RyaWJ1dGlvbiB0aGF0IGNvbnRhaW5zIHRoZSBUZWNobm9sb2d5IGlzIHByb3ZpZGVkIGZvciBub24tcHJvZml0CisgICBwdXJwb3NlcyBhcyBkZWZpbmVkIGluIFNlY3Rpb24gMyBiZWxvdy4gTWFraW5nIG9yIGRpc3RyaWJ1dGluZyBhbnkKKyAgIGZvci1wcm9maXQgZGlzdHJpYnV0aW9ucywgdmVyc2lvbnMsIHJldmlzaW9ucyBvciByZWxlYXNlcyBvZiBzYWlkCisgICBzb2Z0d2FyZSBwcm9kdWN0IHRoYXQgY29udGFpbnMgdGhlIFRlY2hub2xvZ3kgaXMgcHJvaGliaXRlZC4KKyAgIAorCiszLiBMSU1JVEFUSU9OUyBPTiBMSUNFTlNFLiBUaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMiBpcyBzdWJqZWN0CisgICB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworICAgYS4gVGhlIFRlY2hub2xvZ3kgaXMgdG8gYmUgdXNlZCBvbmx5IGZvciBub24tcHJvZml0IHB1cnBvc2VzIHVubGVzcworICAgeW91IG9idGFpbiBwcmlvciB3cml0dGVuIGNvbnNlbnQgZnJvbSBDLkEuUC5TLiBQcm9oaWJpdGVkIGZvci1wcm9maXQKKyAgIGFuZCBjb21tZXJjaWFsIHB1cnBvc2VzIGluY2x1ZGUsIGJ1dCBhcmUgbm90IGxpbWl0ZWQgdG86CisKKyAgICAgKGkpIFNlbGxpbmcsIGxpY2Vuc2luZyBvciByZW50aW5nIHRoZSBUZWNobm9sb2d5IHRvIHRoaXJkIHBhcnRpZXMKKyAgICAgZm9yIGEgZmVlIChieSBwYXltZW50IG9mIG1vbmV5IG9yIG90aGVyd2lzZSwgd2hldGhlciBkaXJlY3Qgb3IKKyAgICAgaW5kaXJlY3QpOworCisgICAgIChpaSkgVXNpbmcgdGhlIFRlY2hub2xvZ3kgdG8gcHJvdmlkZSBzZXJ2aWNlcyBvciBwcm9kdWN0cyB0byBvdGhlcnMKKyAgICAgZm9yIHdoaWNoIHlvdSBhcmUgY29tcGVuc2F0ZWQgaW4gYW55IG1hbm5lciAoYnkgcGF5bWVudCBvZiBtb25leQorICAgICBvciBvdGhlcndpc2UsIHdoZXRoZXIgZGlyZWN0IG9yIGluZGlyZWN0KSwgaW5jbHVkaW5nLCB3aXRob3V0CisgICAgIGxpbWl0YXRpb24sIHByb3ZpZGluZyBzdXBwb3J0IG9yIG1haW50ZW5hbmNlIGZvciB0aGUgVGVjaG5vbG9neTsKKworICAgICAoaWlpKSBEaXN0cmlidXRpb24gb3IgdXNlIGZyb20gd2hpY2ggYW55IGZvcm0gb2YgaW5jb21lIGlzIHJlY2VpdmVkCisgICAgIHJlZ2FyZGxlc3Mgb2YgcHJvZml0cyB0aGVyZWZyb20sIG9yIGZyb20gd2hpY2ggYW55IHJldmVudWUgb3IKKyAgICAgcHJvbW90aW9uYWwgdmFsdWUgaXMgcmVjZWl2ZWQsIGFzIHdlbGwgYXMgYW55IGRpc3RyaWJ1dGlvbiB0byBvcgorICAgICB1c2UgaW4gYSBjb3Jwb3JhdGUgZW52aXJvbm1lbnQuICBVc2Ugb2YgdGhlIFRlY2hub2xvZ3kgdG8gcHJvbW90ZQorICAgICBvciBzdXBwb3J0IGEgY29tbWVyY2lhbCB2ZW50dXJlIGlzIGluY2x1ZGVkIGluIHRoaXMgcmVzdHJpY3Rpb24uCisKKyAgICAgKGl2KSBVc2luZyB0aGUgVGVjaG5vbG9neSB0byBkZXZlbG9wIGEgc2ltaWxhciBhcHBsaWNhdGlvbiBvbiBhbnkKKyAgICAgcGxhdGZvcm0gZm9yIGNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uOyBvcgorICAgICAKKyAgICAgKHYpIFVzaW5nIHRoZSBUZWNobm9sb2d5IGluIGFueSBtYW5uZXIgdGhhdCBpcyBnZW5lcmFsbHkKKyAgICAgY29tcGV0aXRpdmUgd2l0aCBhIEMuQS5QLlMuIHByb2R1Y3QgYXMgZGVmaW5lZCBieSBDLkEuUC5TLgorCisgICBiLiBNZWRpYSBjb3N0cyBhc3NvY2lhdGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgVGVjaG5vbG9neSBtYXkKKyAgIG5vdCBiZSByZWNvdmVyZWQuIFlvdSBzaGFsbCB1c2UgeW91ciBiZXN0IGVmZm9ydHMgdG8gcHJvbXB0bHkgbm90aWZ5CisgICBDLkEuUC5TLiB1cG9uIGxlYXJuaW5nIG9mIGFueSB2aW9sYXRpb24gb2YgdGhlIGFib3ZlIGNvbW1lcmNpYWwKKyAgIHJlc3RyaWN0aW9ucy4KKworICAgYy4gT24gZWFjaCBjb3B5IG9mIHRoZSBUZWNobm9sb2d5IHlvdSBtdXN0IGNvbnNwaWN1b3VzbHkgYW5kCisgICBhcHByb3ByaWF0ZWx5IHJlcHJvZHVjZSB0aGlzIGxpY2Vuc2UsIGNvcHlyaWdodCBub3RpY2UsIGFuZAorICAgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgdGhpcyBBZ3JlZW1lbnQgYW5kIGFsbCBub3RpY2VzCisgICB0aGF0IHJlZmVyIHRvIHRoaXMgQWdyZWVtZW50IG9yIGFueSBhYnNlbmNlIG9mIHdhcnJhbnR5ICh3aGV0aGVyCisgICB3cml0dGVuIG9yIGludGVyYWN0aXZlbHkgZGlzcGxheWVkKTsgYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMKKyAgIG9mIHRoZSBUZWNobm9sb2d5IGEgY29weSBvZiB0aGlzIEFncmVlbWVudC4KKworICAgZC4gWW91IG1heSBub3QgbW9kaWZ5LCBjb21iaW5lIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zIHdpdGgsIG9yCisgICBvdGhlcndpc2UgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBUZWNobm9sb2d5LiBEZXJpdmF0aXZlCisgICB3b3JrcyBhcmUgZGVmaW5lZCBhcyBidXQgbm90IGxpbWl0ZWQgdG86CisgICAKKyAgICAgKGkpIEFsdGVybmF0aXZlIHN1cHBvcnQgbGlicmFyaWVzLiBXZSBhcmUgb3BlbiB0byBwb3J0aW5nIHRvIG90aGVyCisgICAgIHBsYXRmb3JtcywgYW5kIHNvIHRoaXJkIHBhcnRpZXMgZG9pbmcgc3VjaCBpcyB1bm5lY2Vzc2FyeSBhbmQKKyAgICAgdmlvbGF0ZXMgdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZS4KKyAgICAgCisgICAgIChpaSkgQWx0ZXJuYXRpdmUgdG9vbHMgdGhhdCBvcGVyYXRlIG9uIGZpbGVzIG9mIHRoZSBmb3JtYXQgYXMKKyAgICAgZGVmaW5lZCBieSB0aGUgVGVjaG5vbG9neS4gVGhpcyBpbmNsdWRlcyBidXQgaXMgbm90IGxpbWl0ZWQgdG86CisgICAgIG1hc3RlcmluZyB0b29scyAodG9vbHMgdGhhdCBlbmFibGUgQ29udGVudCB0byBiZSB3cml0dGVuIGJhY2sgdG8KKyAgICAgcGh5c2ljYWwgbWVkaWEgbGlrZSBhIGZsb3BweSBkaXNrKS4gUmVwcm9kdWNpbmcgQ29udGVudCBwcm92aWRlZAorICAgICB0aHJvdWdoIG9yIGJ5IHRoZSBUZWNobm9sb2d5IHRvIGFueSBvdGhlciBraW5kIG9mIG1lZGlhLCBzdWNoIGFzCisgICAgIGFsdGVybmF0aXZlIGNvbnRlbnQgcHJvdmlkZXIgdGVjaG5vbG9neSAodGhpcyBhbHNvIGNvdmVycyBhbnkga2luZAorICAgICBvZiBjb252ZXJ0ZXIgd2l0aCB0aGUgaW50ZW50aW9uIG9mIGV4dHJhY3RpbmcgdGhlIENvbnRlbnQgdG8gaGVsZAorICAgICBieSBhbnkgb3RoZXIgYWx0ZXJuYXRlIG1lZGlhIGZvcm1hdCB0aGF0IHJlcHJlc2VudHMgdGhlIHNhbWUKKyAgICAgaW5kZXBlbmRlbnRseSB3b3JraW5nIENvbnRlbnQpLiBBZGRpdGlvbnMsIHJlbW92YWxzIG9yIG90aGVyCisgICAgIG1vZGlmaWNhdGlvbiBvZiBkYXRhIGNvbnRhaW5lZCBieSB0aGUgaW1hZ2VzLgorCisgICBlLiBDLkEuUC5TLiwgaW4gaXRzIHNvbGUgYW5kIGFic29sdXRlIGRpc2NyZXRpb24sIG1heSBoYXZlIGluY2x1ZGVkCisgICBhIHBvcnRpb24gb2YgdGhlIHNvdXJjZSBjb2RlIG9yIG9ubGluZSBkb2N1bWVudGF0aW9uIG9mIHRoZQorICAgVGVjaG5vbG9neS4gRXhjZXB0IGZvciBhbnkgc3VjaCBwb3J0aW9ucywgeW91IHNoYWxsIG5vdCBSRVZFUlNFCisgICBFTkdJTkVFUiwgREVDT01QSUxFLCBESVNBU1NFTUJMRSwgT1IgT1RIRVJXSVNFIFJFRFVDRSBBTlkgUE9SVElPTiBPRgorICAgVEhFIFRFQ0hOT0xPR1kgVE8gQU5ZIEhVTUFOIFBFUkNFSVZBQkxFIEZPUk0sIGV4Y2VwdCB0byB0aGUgZXh0ZW50CisgICB0aGlzIHJlc3RyaWN0aW9uIGlzIHByb2hpYml0ZWQgYnkgYXBwbGljYWJsZSBsYXcuCisgICAKKyAgIGYuIENvbW1lcmNpYWwgc29mdHdhcmUgKGFzIGRlZmluZWQgaW4gdGhpcyBzZWN0aW9uIDMpIG1heSBub3QKKyAgIGNvbnRhaW4gYW55IHBhcnQgb2YgdGhlIFRlY2hub2xvZ3kgZXhjZXB0IGZvciB0aGF0IHBhcnQgdGhhdCBpcworICAgZGVmaW5lZCBhcyB0aGUgImFjY2VzcyBBUEkiICh0aGUgaGVhZGVyIGZpbGVzIHRoYXQgYWxsb3cgaW50ZXJhY3Rpb24KKyAgIHdpdGggdGhlIGxpYnJhcnkgaXRzZWxmLCB0aGlzIGlzIGF2YWlsYWJsZSBzZXBhcmF0ZWx5IGZyb20gb3VyIHNpdGUKKyAgIGFuZCBoYXMgaXRzIG93biBsaWNlbnNlKS4gVGhpcyBpbnRlcmZhY2UgdG8gdGhlIFRlY2hub2xvZ3kgImxpYnJhcnkiCisgICBpcyBwcm92aWRlZCBpcyBieSB1cyB0byBlbmFibGUgdGhlIHVzZXJzIG9mIHRoZSBjb21tZXJjaWFsIHNvZnR3YXJlCisgICB0byBiZW5lZml0IGZyb20gdGhlIFRlY2hub2xvZ3kgYW5kIHN0aWxsIGxldCB0aGUgY29tbWVyY2lhbCBzb2Z0d2FyZQorICAgY29tcGx5IHdpdGggdGhpcyBsaWNlbnNlLiBJbiB0aGlzIHdheSwgdGhlIFRlY2hub2xvZ3kgaXRzZWxmIG5lZWQKKyAgIG5vdCAoYW5kIHNob3VsZCBub3QpIGJlIGRpc3RyaWJ1dGVkIHdpdGggYSBjb21tZXJjaWFsIHByb2R1Y3QuIFRoZQorICAgdXNlciBzaG91bGQgYmUgYWR2aXNlZCB0aGF0IGhlIGNhbiBvYnRhaW4gdGhpcyBtaXNzaW5nICJwbHVnaW4iIGZyb20KKyAgIHRoZSBDLkEuUC5TLiBzaXRlIGFuZCB0aGF0IGl0IGNvbWVzIHdpdGggaXRzIG93biBsaWNlbnNlIHRoYXQgaXMgbm90CisgICBhZmZlY3RlZCBpbiBhbnkgd2F5IGJ5IHRoZSBsaWNlbnNlIGNvdmVyaW5nIHRoZSBjb21tZXJjaWFsIHByb2R1Y3QuCisgICBUaGlzIG90aGVyd2lzZSBkb2VzIG5vdCBlZmZlY3QgdGhlIGFzc2VydGlvbiB0aGF0IHRoZSBUZWNobm9sb2d5IG1heQorICAgbm90IGJlIHVzZWQgYnkgY29tbWVyY2lhbCBzb2Z0d2FyZSBhcyBkZWZpbmVkIGJ5IHRoaXMgc2VjdGlvbiAzLgorICAgCisgICBnLiBObyBkaXN0cmlidXRpb24gbWF5IGluY2x1ZGUgdGhlIHRvdGFsaXR5IG9yIHBhcnQgb2YgdGhlCisgICBUZWNobm9sb2d5IChpbmNsdWRpbmcgdGhlIENvbnRlbnQgZW5jYXBzdWxhdGVkIGJ5IHRoZSB0ZWNobm9sb2d5KSwKKyAgIGNoYW5nZWQsIHVuY2hhbmdlZCwgZW5jcnlwdGVkLCBhcmNoaXZlZCwgaW4gd2hhdGV2ZXIgZm9ybSwgdW5sZXNzCisgICBhY2NvcmRpbmcgdG8gdGhlIExpY2VuY2Ugb3Igc3BlY2lhbCBhZ3JlZW1lbnQgd2l0aCBDLkEuUC5TLiBUaGlzCisgICBUZWNobm9sb2d5LCBpbmNsdWRpbmcgQ29udGVudCBtdXN0IG5ldmVyIGJlIGZvdW5kIG9uIGFueSBwYWlkLWZvcgorICAgbWVkaXVtLgorCisKKzQuIERJU1RSSUJVVElPTjogQXMgdXNlZCBpbiB0aGlzIEFncmVlbWVudCwgdGhlIHRlcm0gImRpc3RyaWJ1dGUiIChhbmQKKyAgIGl0cyB2YXJpYW50cykgaW5jbHVkZXMgbWFraW5nIHRoZSBUZWNobm9sb2d5IGF2YWlsYWJsZSAoZWl0aGVyCisgICBpbnRlbnRpb25hbGx5IG9yIHVuaW50ZW50aW9uYWxseSkgdG8gdGhpcmQgcGFydGllcyBmb3IgY29weWluZyBvcgorICAgdXNlLCBpbmNsdWRpbmcgcHJvdmlkaW5nIHRpbWVzaGFyZSBhY2Nlc3MuIEVhY2ggdGltZSB5b3UgZGlzdHJpYnV0ZQorICAgdGhlIFRlY2hub2xvZ3ksIHRoZSByZWNpcGllbnQgbXVzdCBleHByZXNzbHkgYWdyZWUgdG8gY29tcGx5IHdpdGgKKyAgIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgVGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzCisgICB0aGlzIGxpY2Vuc2UgdG8gdXNlLCBjb3B5LCBvciBkaXN0cmlidXRlIHRoZSBUZWNobm9sb2d5IHN1YmplY3QgdG8KKyAgIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKKyAgIHJlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkCisgICBoZXJlaW4uIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSB3aXRoIHRoaXMKKyAgIEFncmVlbWVudCBieSByZWNpcGllbnRzLgorCisKKzUuIFRJVExFLiBUaXRsZSwgb3duZXJzaGlwIHJpZ2h0cywgYW5kIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaW4KKyAgIGFuZCB0byB0aGUgVGVjaG5vbG9neSwgYW5kIGVhY2ggY29weSB0aGVyZW9mIChpbmNsdWRpbmcgYWxsCisgICBjb3B5cmlnaHRzIHRoZXJlaW4pLCBzaGFsbCByZW1haW4gaW4gQy5BLlAuUy4gVGhlIFRlY2hub2xvZ3kgaXMKKyAgIHByb3RlY3RlZCBieSBpbnRlcm5hdGlvbmFsIGNvcHlyaWdodCB0cmVhdGllcy4KKworCis2LiBOTyBDLkEuUC5TLiBPQkxJR0FUSU9OLiBZb3UgYXJlIHNvbGVseSByZXNwb25zaWJsZSBmb3IgYWxsIG9mIHlvdXIKKyAgIGNvc3RzIGFuZCBleHBlbnNlcyBpbmN1cnJlZCBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGRpc3RyaWJ1dGlvbiBvZgorICAgdGhlIFRlY2hub2xvZ3ksIGFuZCBDLkEuUC5TLiBzaGFsbCBoYXZlIG5vIGxpYWJpbGl0eSwgb2JsaWdhdGlvbiBvcgorICAgcmVzcG9uc2liaWxpdHkgdGhlcmVmb3IuIEMuQS5QLlMuIHNoYWxsIGhhdmUgbm8gb2JsaWdhdGlvbiB0bworICAgcHJvdmlkZSBtYWludGVuYW5jZSwgc3VwcG9ydCwgdXBncmFkZXMgb3IgbmV3IHJlbGVhc2VzIHRvIHlvdSBvcgorICAgdG8gYW55IGRpc3RyaWJ1dGVlIG9mIHRoZSBUZWNobm9sb2d5LgorICAgCisKKzcuIE5PIFdBUlJBTlRZLiBUSEUgU09GVFdBUkUgSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIEFORCBUSEVSRSBJUworICAgTk8gV0FSUkFOVFkgRk9SIFRIRSBURUNITk9MT0dZLiBDLkEuUC5TLiBQUk9WSURFUyBUSEUgVEVDSE5PTE9HWQorICAgIkFTIElTLCIgQU5EIEMuQS5QLlMuLCBBTkQgQUxMIE9USEVSIFBFUlNPTlMgV0hPIEhBVkUgQkVFTiBJTlZPTFZFRAorICAgSU4gVEhFIENSRUFUSU9OLCBQUk9EVUNUSU9OLCBPUiBERUxJVkVSWSBPRiBUSEUgVEVDSE5PTE9HWSwgRElTQ0xBSU0KKyAgIEFMTCBDT05ESVRJT05TIEFORCBXQVJSQU5USUVTIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUywgSU1QTElFRCwKKyAgIFNUQVRVVE9SWSwgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQU5ZCisgICBDT05ESVRJT05TIE9SIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIFNBVElTRkFDVE9SWQorICAgUVVBTElUWSwgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8KKyAgIFRIRSBSRVNVTFRTLCBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgVEVDSE5PTE9HWSBJUyBXSVRIIFlPVQorICAgQU5EIFlPVVIgRElTVFJJQlVURUVTLiBTSE9VTEQgVEhFIFRFQ0hOT0xPR1kgUFJPVkUgREVGRUNUSVZFLCBZT1UKKyAgIEFORCBZT1VSIERJU1RSSUJVVEVFUyAoQU5EIE5PVCBDLkEuUC5TLikgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTAorICAgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIEMuQS5QLlMuIE1BS0VTIE5PCisgICBXQVJSQU5UWSBPRiBOT05JTkZSSU5HRU1FTlQgT0YgVEhFIElOVEVMTEVDVFVBTCBQUk9QRVJUWSBSSUdIVFMgT0YKKyAgIFRISVJEIFBBUlRJRVMuCisKKworOC4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuIFVOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMCisgICBUSEVPUlksIFRPUlQsIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIEMuQS5QLlMuLCBPUiBBTlkgT1RIRVIKKyAgIFBFUlNPTiBXSE8gSEFTIEJFRU4gSU5WT0xWRUQgSU4gVEhFIENSRUFUSU9OLCBQUk9EVUNUSU9OLCBPUgorICAgREVMSVZFUlkgT0YgVEhFIFRFQ0hOT0xPR1kgQkUgTElBQkxFIFRPIFlPVSBPUiBBTlkgT1RIRVIgUEVSU09OIEZPUgorICAgQU5ZIEdFTkVSQUwsIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsCisgICBPUiBPVEhFUiBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgQVJJU0lORyBPVVQgT0YgVEhJUyBBR1JFRU1FTlQgT1IKKyAgIFRIRSBVU0UgT0YgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgVEVDSE5PTE9HWSwgSU5DTFVESU5HIEJVVCBOT1QKKyAgIExJTUlURUQgVE8gUEVSU09OQUwgSU5KVVJZLCBMT1NTIE9GIFBST0ZJVFMsIExPU1MgT0YgREFUQSwgT1VUUFVUCisgICBGUk9NIFRIRSBURUNITk9MT0dZIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSwgRkFJTFVSRSBPRgorICAgVEhFIFRFQ0hOT0xPR1kgVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBQUk9HUkFNUywgREFNQUdFUyBGT1IgTE9TUworICAgT0YgR09PRFdJTEwsIEJVU0lORVNTIElOVEVSUlVQVElPTiwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwKKyAgIE9SIEFOWSBBTkQgQUxMIE9USEVSIERBTUFHRVMgT1IgTE9TU0VTIE9GIFdIQVRFVkVSIE5BVFVSRSwgRVZFTiBJRgorICAgQy5BLlAuUy4gSEFTIEJFRU4gSU5GT1JNRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworCis5LiBJTkRFTU5JRklDQVRJT04uIFlvdSBhbmQgeW91ciBkaXN0cmlidXRlZXMgc2hhbGwgZGVmZW5kLCBpbmRlbW5pZnkKKyAgIGFuZCBob2xkIGhhcm1sZXNzIEMuQS5QLlMuLCBhbmQgYWxsIG90aGVyIHBlcnNvbnMgd2hvIGhhdmUgYmVlbgorICAgaW52b2x2ZWQgaW4gdGhlIGNyZWF0aW9uLCBwcm9kdWN0aW9uLCBvciBkZWxpdmVyeSBvZiB0aGUgVGVjaG5vbG9neSwKKyAgIGZyb20gYW55IGNsYWltLCBkZW1hbmQsIGxpYWJpbGl0eSwgZGFtYWdlIGF3YXJkLCBzdWl0LCBqdWRnZW1lbnQsIG9yCisgICBvdGhlciBsZWdhbCBhY3Rpb24gKGluY2x1ZGluZyByZWFzb25hYmxlIGF0dG9ybmV5J3MgZmVlcykgYXJpc2luZworICAgb3V0IG9mIHlvdXIgdXNlLCBkaXN0cmlidXRpb24sIG1vZGlmaWNhdGlvbiwgb3IgZHVwbGljYXRpb24gb2YgdGhlCisgICBUZWNobm9sb2d5LgorCisKKzEwICBURVJNSU5BVElPTi4gVGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJldW5kZXIgaXMgZWZmZWN0aXZlIHVudGlsCisgICAgdGVybWluYXRlZCBieSBDLkEuUC5TLi4gWW91IG1heSB0ZXJtaW5hdGUgaXQgYXQgYW55IHRpbWUgYnkKKyAgICBkZXN0cm95aW5nIHRoZSBUZWNobm9sb2d5LiBUaGlzIGxpY2Vuc2Ugd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseQorICAgIGlmIHlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRoZSBsaW1pdGF0aW9ucyBkZXNjcmliZWQgYWJvdmUuIE9uCisgICAgdGVybWluYXRpb24sIHlvdSBtdXN0IGRlc3Ryb3kgYWxsIGNvcGllcyBvZiB0aGUgVGVjaG5vbG9neS4gVGhlCisgICAgdGVybWluYXRpb24gb2YgeW91ciBsaWNlbnNlIHdpbGwgbm90IHJlc3VsdCBpbiB0aGUgdGVybWluYXRpb24gb2YKKyAgICB0aGUgbGljZW5zZXMgb2YgYW55IGRpc3RyaWJ1dGVlcyB3aG8gaGF2ZSByZWNlaXZlZCByaWdodHMgdG8gdGhlCisgICAgVGVjaG5vbG9neSB0aHJvdWdoIHlvdSBzbyBsb25nIGFzIHRoZXkgYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUKKyAgICBwcm92aXNpb25zIG9mIHRoaXMgQWdyZWVtZW50LgorCisKKzExLiBNSVNDRUxMQU5FT1VTLiBUaGlzIEFncmVlbWVudCByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQKKyAgICBjb25jZXJuaW5nIHRoaXMgbGljZW5zZSBiZXR3ZWVuIHRoZSBwYXJ0aWVzIGFuZCBzdXBlcnNlZGVzIGFsbAorICAgIHByaW9yIGFncmVlbWVudHMgYW5kIHJlcHJlc2VudGF0aW9ucyBiZXR3ZWVuIHRoZW0uIEl0IG1heSBub3QgYmUKKyAgICBhbWVuZGVkLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGhlbGQgdG8gYmUKKyAgICB1bmVuZm9yY2VhYmxlIGZvciBhbnkgcmVhc29uLCB0aGlzIEFncmVlbWVudCBzaGFsbCB0ZXJtaW5hdGUuCisKKyAgICBUaGUgbW9zdCBjdXJyZW50IHZlcnNpb24gb2YgdGhpcyBsaWNlbnNlIGlzIGtlcHQgb24gdGhlIEMuQS5QLlMuCisgICAgd2ViIHNpdGUuIER1ZSBub3RpY2Ugc2hhbGwgYmUgZ2l2ZW4gaWYgZXZlciB0aGUgbGljZW5zZSBjaGFuZ2VzLAorICAgIHRoZW4gYWxsIHZlcnNpb25zIG9mIHRoZSBUZWNobm9sb2d5IHdpbGwgYmUgY29uc3RyYWluZWQgYnkgdGhlCisgICAgbmV3ZXIgbGljZW5zZS4KKyAgICAKKyAgICBBbnl0aGluZyBlbHNlIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgYWdyZWVtZW50IG11c3QgYmUgYWdyZWVkIHdpdGgKKyAgICB1cyBiZWZvcmUgYW55IGFjdGlvbiBjYW4gYmUgdGFrZW4gYnkgYW55IHBhcnR5LgorCisgICAgQWRkcmVzcyBhbGwgY29ycmVzcG9uZGVuY2UgcmVnYXJkaW5nIHRoaXMgbGljZW5zZSB0bzoKKworICAgIEMuQS5QLlMuCisgICAgbGljZW5zZUBjYXBzLXByb2plY3Qub3JnCisKKworQ29weXJpZ2h0IGFuZCBUcmFkZW1hcmsgTm90aWNlczoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgVGVjaG5vbG9neSBpcyBDb3B5cmlnaHQgKGMpIEMuQS5QLlMuIDIwMDMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCitUaGUgZG9jdW1lbnRhdGlvbiBhbmQgYWxsIGNvbXB1dGVyIGZpbGVzIGFyZSBhbHNvIENvcHlyaWdodAorKGMpIEMuQS5QLlMuIDIwMDMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoZXNlIHJpZ2h0cyBpbmNsdWRlIGJ1dCBhcmUKK25vdCBsaW1pdGVkIHRvIGFueSBmb3JlaWduIGxhbmd1YWdlIHRyYW5zbGF0aW9ucyBvZiB0aGUgZG9jdW1lbnRhdGlvbgorb3IgdGhlIFRlY2hub2xvZ3ksIGFuZCBhbGwgZGVyaXZhdGl2ZSB3b3JrcyBvZiBib3RoLiBBbGwgb3RoZXIKK3RyYWRlbWFya3MgYXJlIHRoZSBwcm9wZXJ0eSBvZiB0aGVpciByZXNwZWN0aXZlIG93bmVycy4KKworCitDLkEuUC5TLgorVGhlIENsYXNzaWMgQW1pZ2EgUHJlc2VydmF0aW9uIFNvY2lldHkKK2h0dHA6Ly93d3cuY2Fwcy1wcm9qZWN0Lm9yZwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvQ0FSQSBiL2xpY2Vuc2VzL0NBUkEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI4YjIxMwotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0NBUkEKQEAgLTAsMCArMSw2IEBACitDQVJBIGlzIGZyZWV3YXJlLCBpLmUuIGl0IGNhbiBiZSB1c2VkIGZvciBmcmVlIGJ5IGFueW9uZS4gVGhlIHVzZXJzIGFyZSBvYmxpZ2F0ZWQgdG8gbWVudGlvbiB0aGUgdXNlIG9mIENBUkEgaW4gdGhlaXIgcmVzdWx0aW5nIHB1YmxpY2F0aW9ucyouCitUaGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24gYXJlIHByb3ZpZGVkIGFzIGlzLCB3aXRob3V0IHdhcnJhbnR5IG9mIGFueSBraW5kLCBleHByZXNzZWQgb3IgaW1wbGllZCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHksIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlIGFuZCBub25pbmZyaW5nZW1lbnQuIEluIG5vIGV2ZW50IHNoYWxsIHRoZSBhdXRob3JzIG9yIGNvcHlyaWdodCBob2xkZXJzIGJlIGxpYWJsZSBmb3IgYW55IGNsYWltLCBkYW1hZ2VzIG9yIG90aGVyIGxpYWJpbGl0eSwgd2hldGhlciBpbiBhbiBhY3Rpb24gb2YgY29udHJhY3QsIHRvcnQgb3Igb3RoZXJ3aXNlLCBhcmlzaW5nIGZyb20sIG91dCBvZiBvciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIHNvZnR3YXJlIG9yIHRoZSB1c2Ugb3Igb3RoZXIgZGVhbGluZ3MgaW4gdGhlIHNvZnR3YXJlLgorIAorCisqCitQbGVhc2UgcmVmZXJlbmNlIHRoZSBib29rIFRoZSBDb21wdXRlciBBaWRlZCBSZXNvbmFuY2UgQXNzaWdubWVudCBUdXRvcmlhbCBieSBSb2NodXMgS2VsbGVyLCBmaXJzdCBlZGl0aW9uIDIwMDQsIElTQk4gMy04NTYwMC0xMTItMywgQ0FOVElOQSBWZXJsYWcuIEFsdGVybmF0aXZlbHkgeW91IGNhbiBjaXRlIFJvY2h1cycgUGhEIHRoZXNpcywgRGlzcy4gRVRIIE5yLiAxNTk0Ny4gSXQgd291bGQgYWxzbyBiZSBoZWxwZnVsIGlmIHlvdSBjb3VsZCBtZW50aW9uIGluIHlvdXIgcHVibGljYXRpb24gdGhhdCBDQVJBIGNhbiBiZSBkb3dubG9hZGVkIGZvciBmcmVlIGZyb20gd3d3Lm5tci5jaC4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9saWNlbnNlcy9DQVZFUiBiL2xpY2Vuc2VzL0NBVkVSCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhMGU3ZDMKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9DQVZFUgpAQCAtMCwwICsxLDgwIEBACitFbmQtVXNlciBTb2Z0d2FyZSBMaWNlbnNlIEFncmVlbWVudCBmb3IgQ2F2ZXIKKworMS4KK05hdGlvbmFsIENlbnRyZSBmb3IgQmlvbW9sZWN1bGFyIFJlc2VhcmNoLCBGYWN1bHR5IG9mIFNjaWVuY2UsCitNYXNhcnlrIFVuaXZlcnNpdHkgQnJubywgVGhlIEN6ZWNoIFJlcHVibGljIChgYExJQ0VOU09SJycpIGdyYW50cwordG8gKGBgTElDRU5TRUUnJykgbm9uLWV4Y2x1c2l2ZSwgYW5kIG5vbi10cmFuc2ZlcmFibGUgbGljZW5zZSB0byB1c2UKK3RoZSBgYENBVkVSJycgY29tcHV0ZXIgc29mdHdhcmUgcHJvZ3JhbS4KK0luc3RpdHV0ZSBvZiBDb21wdXRlciBTY2llbmNlLCBNYXNhcnlrIFVuaXZlcnNpdHkgQnJubywKK1RoZSBDemVjaCBSZXB1YmxpYyAoYGBMSUNFTlNPUicnKSBncmFudHMgdG8gKGBgTElDRU5TRUUnJykgbm9uLWV4Y2x1c2l2ZS4KK1VzaW5nIG9mIHRoZSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZnVybmlzaGVkIGhlcmV1bmRlciAoaGVyZWluYWZ0ZXIKK2NhbGxlZCB0aGUgYGBQUk9HUkFNJycpIGlzIGFsc28gZ3JhbnRlZCB1cG9uIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworaGVyZWluYWZ0ZXIgc2V0IG91dCBhbmQgdW50aWwgdGVybWluYXRpb24gb2YgdGhpcyBsaWNlbnNlIGFzIHNldCBmb3J0aCBiZWxvdy4KK0xJQ0VOU0VFIHdpbGwgYmUgZnVybmlzaGVkIG9ubHkgYnkgYmluYXJpZXMgb2YgdGhlIHByb2dyYW0uCitObyBzb3VyY2UgY29kZSB3aWxsIGJlIHByb3ZpZGVkLgorCisyLgorTElDRU5TRUUgdW5kZXJzdGFuZHMgdGhhdCB0aGlzIEFncmVlbWVudCBpcyBsaWNlbnNlIGZvciB1c2Ugb2YsIG5vdCBzYWxlIG9mLAordGhlIFBST0dSQU0uIENvbnNlcXVlbnRseSwgbm8gUHVyY2hhc2UgT3JkZXJzIGNhbiBiZSBhY2NlcHRlZCBieSBMSUNFTlNPUi4KKworMy4KK0xJQ0VOU0VFIGFja25vd2xlZGdlcyB0aGF0IHRoZSBQUk9HUkFNIGlzIGEgcmVzZWFyY2ggdG9vbCBzdGlsbCBpbiB0aGUKK2RldmVsb3BtZW50IHN0YWdlLCB0aGF0IGlzIGJlaW5nIHN1cHBsaWVkIGBgYXMgaXMnJywgd2l0aG91dCBhbnkgYWNjb21wYW55aW5nCitzZXJ2aWNlcyBvciBpbXByb3ZlbWVudHMgZnJvbSBMSUNFTlNPUiBhbmQgdGhhdCB0aGlzIGxpY2Vuc2UgaXMgZW50ZXJlZAoraW50byBpbiBvcmRlciB0byBlbmFibGUgb3RoZXJzIHRvIHV0aWxpemUgdGhlIFBST0dSQU0gaW4gdGhlaXIgc2Nob2xhcmx5CithY3Rpdml0aWVzLgorCis0LgorTElDRU5TRUUgYWdyZWVzIHRoYXQgUFJPR1JBTSB3aWxsIGJlIHByb3Blcmx5IGNpdGVkIHdoZW5ldmVyIHJlc3VsdHMKK29idGFpbmVkIHVzaW5nIGl0IHdpbGwgYmUgcHVibGlzaGVkIChmb3IgZGV0YWlscyBzZWUgdGhlIG1hbnVhbCkuCisKKzUuCitMSUNFTlNPUiBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUywgRVhQUkVTUyBPUiBJTVBMSUVELgorQnkgd2F5IG9mIGV4YW1wbGUsIGJ1dCBub3QgbGltaXRhdGlvbiwgTElDRU5TT1IgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TCitPUiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFCitPUiBUSEFUIFRIRSBVU0UgT0YgVEhFIFBST0dSQU0gV0lMTCBOT1QgSU5GUklOR0UgQU5ZIFBBVEVOVFMsIENPUFlSSUdIVFMsCitUUkFERU1BUktTIE9SIE9USEVSIFJJR0hUUy4gTElDRU5TT1Igc2hhbGwgaGF2ZSBubyBsaWFiaWxpdHkgbm9yIGJlIGxpYWJsZQorZm9yIGFuIGRpcmVjdCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIHdpdGggcmVzcGVjdCB0byBhbnkgY2xhaW0KK2J5IExJQ0VOU0VFIG9yIGFueSB0aGlyZCBwYXJ0eSBvbiBhY2NvdW50IG9mIG9yIGFyaXNpbmcgZnJvbSB0aGlzIEFncmVlbWVudAorb3IgdXNlIG9mIHRoZSBQUk9HUkFNLgorCis2LgorTElDRU5TRUUgYWdyZWVzIHRoYXQgaXQgd2lsbCB1c2UgdGhlIFBST0dSQU0sIGFuZCBhbnkgbW9kaWZpY2F0aW9ucywKK2ltcHJvdmVtZW50cywgb3IgZGVyaXZhdGl2ZXMgdG8gUFJPR1JBTSB0aGF0IExJQ0VOU0VFIG1heSBjcmVhdGUKKyhjb2xsZWN0aXZlbHksIGBgSU1QUk9WRU1FTlRTJycpIHNvbGVseSBmb3IgaW50ZXJuYWwsIG5vbi1jb21tZXJjaWFsCitwdXJwb3NlcyBhbmQgc2hhbGwgbm90IGRpc3RyaWJ1dGUgb3IgdHJhbnNmZXIgdGhlIFBST0dSQU0gT1IKK0lNUFJPVkVNRU5UUyB0byBhbnkgcGVyc29uIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20KK0xJQ0VOU09SLiBUaGUgdGVybSBgYG5vbi1jb21tZXJjaWFsJycsIGFzIHVzZWQgaW4gdGhpcyBBZ3JlZW1lbnQsCittZWFucyBhY2FkZW1pYyBvciBvdGhlciBzY2hvbGFybHkgcmVzZWFyY2ggd2hpY2ggKGEpIGlzIG5vdCB1bmRlcnRha2VuCitmb3IgcHJvZml0LCBvciAoYikgaXMgbm90IGludGVuZGVkIHRvIHByb2R1Y2Ugd29ya3MsIHNlcnZpY2VzLCBvciBkYXRhIGZvcgorY29tbWVyY2lhbCB1c2UsIG9yIChjKSBpcyBuZWl0aGVyIGNvbmR1Y3RlZCwgbm9yIGZ1bmRlZCwgYnkgYSBwZXJzb24gb3IKK2FuIGVudGl0eSBlbmdhZ2VkIGluIHRoZSBjb21tZXJjaWFsIHVzZSwgYXBwbGljYXRpb24gb3IgZXhwbG9pdGF0aW9uCitvZiB3b3JrcyBzaW1pbGFyIHRvIHRoZSBQUk9HUkFNLgorCis3LgorTElDRU5TRUUgYWdyZWVzIHRvIG5vdGlmeSBMSUNFTlNPUiBvZiBhbnkgSU1QUk9WRU1FTlRTIG1hZGUKK3RvIHRoZSBQUk9HUkFNLCBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiA1LCBhYm92ZSwgYW5kIGhlcmVieSAoYSkKK2FncmVlcyB0byBzdXBwbHkgTElDRU5TT1Igd2l0aCBhIGNvcHkgb2Ygc2FtZSwgYW5kIChiKSBncmFudHMKK0xJQ0VOU09SIGEgd29ybGR3aWRlLCBwZXJwZXR1YWwgbGljZW5zZSwgd2l0aCB0aGUgcmlnaHQgdG8gc3VibGljZW5zZQorKGF0IGFueSB0aWVyKSwgc3VjaCBJTVBST1ZFTUVOVFMgd2l0aG91dCBhbnkgcm95YWx0eSBvciBvdGhlcgorb2JsaWdhdGlvbiB0byBMSUNFTlNFRS4KKworOC4KK093bmVyc2hpcCBvZiBhbGwgcmlnaHRzLCBpbmNsdWRpbmcgY29weXJpZ2h0IGluIHRoZSBQUk9HUkFNIGFuZCBpbiBhbnkKK21hdGVyaWFsIGFzc29jaWF0ZWQgdGhlcmV3aXRoLCBzaGFsbCBhdCBhbGwgdGltZXMgcmVtYWluIHdpdGggTElDRU5TT1IKK2FuZCBMSUNFTlNFRSBhZ3JlZXMgdG8gcHJlc2VydmUgc2FtZS4gTElDRU5TRUUgYWdyZWVzIG5vdCB0byB1c2UKK2FueSBwb3J0aW9uIG9mIHRoZSBQUk9HUkFNIGluIGFueSBtYWNoaW5lLXJlYWRhYmxlIGZvcm0gb3V0c2lkZQordGhlIFBST0dSQU0sIG5vciB0byBtYWtlIGFueSBjb3BpZXMgZXhjZXB0IGZvciBpdHMgaW50ZXJuYWwgdXNlLAord2l0aG91dCBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgTElDRU5TT1IuIExJQ0VOU0VFIGFncmVlcyB0byBwbGFjZQordGhlIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2Ugb24gYW55IHN1Y2ggY29waWVzLgorCis5LgorVGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgY29uc3RydWVkLCBpbnRlcnByZXRlZCBhbmQgYXBwbGllZCBpbiBhY2NvcmRhbmNlCit3aXRoIHRoZSBsYXcgb2YgdGhlIEN6ZWNoIFJlcHVibGljIGFuZCBhbnkgbGVnYWwgYWN0aW9uIGFyaXNpbmcKK291dCBvZiB0aGlzIEFncmVlbWVudCBvciB1c2Ugb2YgdGhlIFBST0dSQU0gc2hhbGwgYmUgZmlsZWQgaW4gYSBjb3VydAoraW4gdGhlIEN6ZWNoIFJlcHVibGljLgorCisxMC4KK1RoaXMgbGljZW5zZSBzaGFsbCBiZSBmb3IgYSB0ZXJtIG9mIDUgeWVhcnMgZXhjZXB0IHRoYXQgdXBvbiBhbnkgYnJlYWNoCitvZiB0aGlzIEFncmVlbWVudCBieSBMSUNFTlNFRSwgTElDRU5TT1Igc2hhbGwgaGF2ZSB0aGUgcmlnaHQgdG8KK3Rlcm1pbmF0ZSB0aGlzIGxpY2Vuc2UgaW1tZWRpYXRlbHkgdXBvbiBub3RpY2UgdG8gTElDRU5TRUUuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9DQy1QRCBiL2xpY2Vuc2VzL0NDLVBECm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhMzhjMTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9DQy1QRApAQCAtMCwwICsxLDI3IEBACitUSElTIFdPUksgSVMgSU4gUFVCTElDIERPTUFJTjoKK1RoZSBwZXJzb24gb3IgcGVyc29ucyB3aG8gaGF2ZSBhc3NvY2lhdGVkIHdvcmsgd2l0aCB0aGlzIGRvY3VtZW50CisodGhlICJEZWRpY2F0b3IiIG9yICJDZXJ0aWZpZXIiKSBoZXJlYnkgZWl0aGVyIChhKSBjZXJ0aWZpZXMgdGhhdCwgdG8gdGhlIGJlc3QKK29mIGhpcyBrbm93bGVkZ2UsIHRoZSB3b3JrIG9mIGF1dGhvcnNoaXAgaWRlbnRpZmllZCBpcyBpbiB0aGUgcHVibGljIGRvbWFpbiBvZgordGhlIGNvdW50cnkgZnJvbSB3aGljaCB0aGUgd29yayBpcyBwdWJsaXNoZWQsIG9yIChiKSBoZXJlYnkgZGVkaWNhdGVzIHdoYXRldmVyCitjb3B5cmlnaHQgdGhlIGRlZGljYXRvcnMgaG9sZHMgaW4gdGhlIHdvcmsgb2YgYXV0aG9yc2hpcCBpZGVudGlmaWVkIGJlbG93CisodGhlICJXb3JrIikgdG8gdGhlIHB1YmxpYyBkb21haW4uIEEgY2VydGlmaWVyLCBtb3Jlb3ZlciwgZGVkaWNhdGVzIGFueQorY29weXJpZ2h0IGludGVyZXN0IGhlIG1heSBoYXZlIGluIHRoZSBhc3NvY2lhdGVkIHdvcmssIGFuZCBmb3IgdGhlc2UgcHVycG9zZXMsCitpcyBkZXNjcmliZWQgYXMgYSAiZGVkaWNhdG9yIiBiZWxvdy4KKworQSBjZXJ0aWZpZXIgaGFzIHRha2VuIHJlYXNvbmFibGUgc3RlcHMgdG8gdmVyaWZ5IHRoZSBjb3B5cmlnaHQgc3RhdHVzIG9mIHRoaXMKK3dvcmsuIENlcnRpZmllciByZWNvZ25pemVzIHRoYXQgaGlzIGdvb2QgZmFpdGggZWZmb3J0cyBtYXkgbm90IHNoaWVsZCBoaW0gZnJvbQorbGlhYmlsaXR5IGlmIGluIGZhY3QgdGhlIHdvcmsgY2VydGlmaWVkIGlzIG5vdCBpbiB0aGUgcHVibGljIGRvbWFpbi4KKworRGVkaWNhdG9yIG1ha2VzIHRoaXMgZGVkaWNhdGlvbiBmb3IgdGhlIGJlbmVmaXQgb2YgdGhlIHB1YmxpYyBhdCBsYXJnZSBhbmQgdG8KK3RoZSBkZXRyaW1lbnQgb2YgdGhlIERlZGljYXRvcidzIGhlaXJzIGFuZCBzdWNjZXNzb3JzLiBEZWRpY2F0b3IgaW50ZW5kcyB0aGlzCitkZWRpY2F0aW9uIHRvIGJlIGFuIG92ZXJ0IGFjdCBvZiByZWxpbnF1aXNobWVudCBpbiBwZXJwZXR1aXR5IG9mIGFsbCBwcmVzZW50CithbmQgZnV0dXJlIHJpZ2h0cyB1bmRlciBjb3B5cmlnaHQgbGF3LCB3aGV0aGVyIHZlc3RlZCBvciBjb250aW5nZW50LCBpbiB0aGUKK1dvcmsuIERlZGljYXRvciB1bmRlcnN0YW5kcyB0aGF0IHN1Y2ggcmVsaW5xdWlzaG1lbnQgb2YgYWxsIHJpZ2h0cyBpbmNsdWRlcyB0aGUKK3JlbGlucXVpc2htZW50IG9mIGFsbCByaWdodHMgdG8gZW5mb3JjZSAoYnkgbGF3c3VpdCBvciBvdGhlcndpc2UpIHRob3NlCitjb3B5cmlnaHRzIGluIHRoZSBXb3JrLgorCitEZWRpY2F0b3IgcmVjb2duaXplcyB0aGF0LCBvbmNlIHBsYWNlZCBpbiB0aGUgcHVibGljIGRvbWFpbiwgdGhlIFdvcmsgbWF5IGJlCitmcmVlbHkgcmVwcm9kdWNlZCwgZGlzdHJpYnV0ZWQsIHRyYW5zbWl0dGVkLCB1c2VkLCBtb2RpZmllZCwgYnVpbHQgdXBvbiwgb3IKK290aGVyd2lzZSBleHBsb2l0ZWQgYnkgYW55b25lIGZvciBhbnkgcHVycG9zZSwgY29tbWVyY2lhbCBvciBub24tY29tbWVyY2lhbCwKK2FuZCBpbiBhbnkgd2F5LCBpbmNsdWRpbmcgYnkgbWV0aG9kcyB0aGF0IGhhdmUgbm90IHlldCBiZWVuIGludmVudGVkIG9yCitjb25jZWl2ZWQuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9DQzAtMS4wLVVuaXZlcnNhbCBiL2xpY2Vuc2VzL0NDMC0xLjAtVW5pdmVyc2FsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1MmM1NGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9DQzAtMS4wLVVuaXZlcnNhbApAQCAtMCwwICsxLDEzOSBAQAorPGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL3B1YmxpY2RvbWFpbi96ZXJvLzEuMC9sZWdhbGNvZGU+CisKK0NDMCAxLjAgVW5pdmVyc2FsCisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwKK1NFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBET0NVTUVOVCBET0VTIE5PVCBDUkVBVEUgQU4gQVRUT1JORVktQ0xJRU5UCitSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLgorQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgVVNFIE9GIFRISVMgRE9DVU1FTlQgT1IgVEhFCitJTkZPUk1BVElPTiBPUiBXT1JLUyBQUk9WSURFRCBIRVJFVU5ERVIsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTCitSRVNVTFRJTkcgRlJPTSBUSEUgVVNFIE9GIFRISVMgRE9DVU1FTlQgT1IgVEhFIElORk9STUFUSU9OIE9SIFdPUktTIFBST1ZJREVECitIRVJFVU5ERVIuCisKKworU3RhdGVtZW50IG9mIFB1cnBvc2UKKworVGhlIGxhd3Mgb2YgbW9zdCBqdXJpc2RpY3Rpb25zIHRocm91Z2hvdXQgdGhlIHdvcmxkIGF1dG9tYXRpY2FsbHkKK2NvbmZlciBleGNsdXNpdmUgQ29weXJpZ2h0IGFuZCBSZWxhdGVkIFJpZ2h0cyAoZGVmaW5lZCBiZWxvdykgdXBvbgordGhlIGNyZWF0b3IgYW5kIHN1YnNlcXVlbnQgb3duZXIocykgKGVhY2ggYW5kIGFsbCwgYW4gIm93bmVyIikgb2YKK2FuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcCBhbmQvb3IgYSBkYXRhYmFzZSAoZWFjaCwgYSAiV29yayIpLgorCitDZXJ0YWluIG93bmVycyB3aXNoIHRvIHBlcm1hbmVudGx5IHJlbGlucXVpc2ggdGhvc2UgcmlnaHRzIHRvIGEKK1dvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIGNvbnRyaWJ1dGluZyB0byBhIGNvbW1vbnMgb2YgY3JlYXRpdmUsCitjdWx0dXJhbCBhbmQgc2NpZW50aWZpYyB3b3JrcyAoIkNvbW1vbnMiKSB0aGF0IHRoZSBwdWJsaWMgY2FuCityZWxpYWJseSBhbmQgd2l0aG91dCBmZWFyIG9mIGxhdGVyIGNsYWltcyBvZiBpbmZyaW5nZW1lbnQgYnVpbGQKK3Vwb24sIG1vZGlmeSwgaW5jb3Jwb3JhdGUgaW4gb3RoZXIgd29ya3MsIHJldXNlIGFuZCByZWRpc3RyaWJ1dGUKK2FzIGZyZWVseSBhcyBwb3NzaWJsZSBpbiBhbnkgZm9ybSB3aGF0c29ldmVyIGFuZCBmb3IgYW55IHB1cnBvc2VzLAoraW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBjb21tZXJjaWFsIHB1cnBvc2VzLiBUaGVzZSBvd25lcnMgbWF5Citjb250cmlidXRlIHRvIHRoZSBDb21tb25zIHRvIHByb21vdGUgdGhlIGlkZWFsIG9mIGEgZnJlZSBjdWx0dXJlCithbmQgdGhlIGZ1cnRoZXIgcHJvZHVjdGlvbiBvZiBjcmVhdGl2ZSwgY3VsdHVyYWwgYW5kIHNjaWVudGlmaWMKK3dvcmtzLCBvciB0byBnYWluIHJlcHV0YXRpb24gb3IgZ3JlYXRlciBkaXN0cmlidXRpb24gZm9yIHRoZWlyCitXb3JrIGluIHBhcnQgdGhyb3VnaCB0aGUgdXNlIGFuZCBlZmZvcnRzIG9mIG90aGVycy4KKworRm9yIHRoZXNlIGFuZC9vciBvdGhlciBwdXJwb3NlcyBhbmQgbW90aXZhdGlvbnMsIGFuZCB3aXRob3V0IGFueQorZXhwZWN0YXRpb24gb2YgYWRkaXRpb25hbCBjb25zaWRlcmF0aW9uIG9yIGNvbXBlbnNhdGlvbiwgdGhlCitwZXJzb24gYXNzb2NpYXRpbmcgQ0MwIHdpdGggYSBXb3JrICh0aGUgIkFmZmlybWVyIiksIHRvIHRoZSBleHRlbnQKK3RoYXQgaGUgb3Igc2hlIGlzIGFuIG93bmVyIG9mIENvcHlyaWdodCBhbmQgUmVsYXRlZCBSaWdodHMgaW4gdGhlCitXb3JrLCB2b2x1bnRhcmlseSBlbGVjdHMgdG8gYXBwbHkgQ0MwIHRvIHRoZSBXb3JrIGFuZCBwdWJsaWNseQorZGlzdHJpYnV0ZSB0aGUgV29yayB1bmRlciBpdHMgdGVybXMsIHdpdGgga25vd2xlZGdlIG9mIGhpcyBvciBoZXIKK0NvcHlyaWdodCBhbmQgUmVsYXRlZCBSaWdodHMgaW4gdGhlIFdvcmsgYW5kIHRoZSBtZWFuaW5nIGFuZAoraW50ZW5kZWQgbGVnYWwgZWZmZWN0IG9mIENDMCBvbiB0aG9zZSByaWdodHMuCisKKzEuIENvcHlyaWdodCBhbmQgUmVsYXRlZCBSaWdodHMuCisgICBBIFdvcmsgbWFkZSBhdmFpbGFibGUgdW5kZXIgQ0MwIG1heSBiZSBwcm90ZWN0ZWQgYnkgY29weXJpZ2h0CisgICBhbmQgcmVsYXRlZCBvciBuZWlnaGJvcmluZyByaWdodHMgKCJDb3B5cmlnaHQgYW5kIFJlbGF0ZWQKKyAgIFJpZ2h0cyIpLiBDb3B5cmlnaHQgYW5kIFJlbGF0ZWQgUmlnaHRzIGluY2x1ZGUsIGJ1dCBhcmUgbm90CisgICBsaW1pdGVkIHRvLCB0aGUgZm9sbG93aW5nOgorCisgICAgIGkuIHRoZSByaWdodCB0byByZXByb2R1Y2UsIGFkYXB0LCBkaXN0cmlidXRlLCBwZXJmb3JtLAorICAgICAgICBkaXNwbGF5LCBjb21tdW5pY2F0ZSwgYW5kIHRyYW5zbGF0ZSBhIFdvcms7CisgICAgaWkuIG1vcmFsIHJpZ2h0cyByZXRhaW5lZCBieSB0aGUgb3JpZ2luYWwgYXV0aG9yKHMpIGFuZC9vcgorICAgICAgICBwZXJmb3JtZXIocyk7CisgICBpaWkuIHB1YmxpY2l0eSBhbmQgcHJpdmFjeSByaWdodHMgcGVydGFpbmluZyB0byBhIHBlcnNvbidzCisgICAgICAgIGltYWdlIG9yIGxpa2VuZXNzIGRlcGljdGVkIGluIGEgV29yazsKKyAgICBpdi4gcmlnaHRzIHByb3RlY3RpbmcgYWdhaW5zdCB1bmZhaXIgY29tcGV0aXRpb24gaW4gcmVnYXJkcyB0bworICAgICAgICBhIFdvcmssIHN1YmplY3QgdG8gdGhlIGxpbWl0YXRpb25zIGluIHBhcmFncmFwaCA0KGEpLAorICAgICAgICBiZWxvdzsKKyAgICAgdi4gcmlnaHRzIHByb3RlY3RpbmcgdGhlIGV4dHJhY3Rpb24sIGRpc3NlbWluYXRpb24sIHVzZSBhbmQKKyAgICAgICAgcmV1c2Ugb2YgZGF0YSBpbiBhIFdvcms7CisgICAgdmkuIGRhdGFiYXNlIHJpZ2h0cyAoc3VjaCBhcyB0aG9zZSBhcmlzaW5nIHVuZGVyIERpcmVjdGl2ZQorICAgICAgICA5Ni85L0VDIG9mIHRoZSBFdXJvcGVhbiBQYXJsaWFtZW50IGFuZCBvZiB0aGUgQ291bmNpbCBvZgorICAgICAgICAxMSBNYXJjaCAxOTk2IG9uIHRoZSBsZWdhbCBwcm90ZWN0aW9uIG9mIGRhdGFiYXNlcywgYW5kCisgICAgICAgIHVuZGVyIGFueSBuYXRpb25hbCBpbXBsZW1lbnRhdGlvbiB0aGVyZW9mLCBpbmNsdWRpbmcgYW55CisgICAgICAgIGFtZW5kZWQgb3Igc3VjY2Vzc29yIHZlcnNpb24gb2Ygc3VjaCBkaXJlY3RpdmUpOyBhbmQKKyAgIHZpaS4gb3RoZXIgc2ltaWxhciwgZXF1aXZhbGVudCBvciBjb3JyZXNwb25kaW5nIHJpZ2h0cworICAgICAgICB0aHJvdWdob3V0IHRoZSB3b3JsZCBiYXNlZCBvbiBhcHBsaWNhYmxlIGxhdyBvciB0cmVhdHksCisgICAgICAgIGFuZCBhbnkgbmF0aW9uYWwgaW1wbGVtZW50YXRpb25zIHRoZXJlb2YuCisKKzIuIFdhaXZlci4KKyAgIFRvIHRoZSBncmVhdGVzdCBleHRlbnQgcGVybWl0dGVkIGJ5LCBidXQgbm90IGluIGNvbnRyYXZlbnRpb24KKyAgIG9mLCBhcHBsaWNhYmxlIGxhdywgQWZmaXJtZXIgaGVyZWJ5IG92ZXJ0bHksIGZ1bGx5LAorICAgcGVybWFuZW50bHksIGlycmV2b2NhYmx5IGFuZCB1bmNvbmRpdGlvbmFsbHkgd2FpdmVzLCBhYmFuZG9ucywKKyAgIGFuZCBzdXJyZW5kZXJzIGFsbCBvZiBBZmZpcm1lcidzIENvcHlyaWdodCBhbmQgUmVsYXRlZCBSaWdodHMKKyAgIGFuZCBhc3NvY2lhdGVkIGNsYWltcyBhbmQgY2F1c2VzIG9mIGFjdGlvbiwgd2hldGhlciBub3cga25vd24KKyAgIG9yIHVua25vd24gKGluY2x1ZGluZyBleGlzdGluZyBhcyB3ZWxsIGFzIGZ1dHVyZSBjbGFpbXMgYW5kCisgICBjYXVzZXMgb2YgYWN0aW9uKSwgaW4gdGhlIFdvcmsgKGkpIGluIGFsbCB0ZXJyaXRvcmllcworICAgd29ybGR3aWRlLCAoaWkpIGZvciB0aGUgbWF4aW11bSBkdXJhdGlvbiBwcm92aWRlZCBieSBhcHBsaWNhYmxlCisgICBsYXcgb3IgdHJlYXR5IChpbmNsdWRpbmcgZnV0dXJlIHRpbWUgZXh0ZW5zaW9ucyksIChpaWkpIGluIGFueQorICAgY3VycmVudCBvciBmdXR1cmUgbWVkaXVtIGFuZCBmb3IgYW55IG51bWJlciBvZiBjb3BpZXMsIGFuZCAoaXYpCisgICBmb3IgYW55IHB1cnBvc2Ugd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICAgY29tbWVyY2lhbCwgYWR2ZXJ0aXNpbmcgb3IgcHJvbW90aW9uYWwgcHVycG9zZXMgKHRoZSAiV2FpdmVyIikuCisgICBBZmZpcm1lciBtYWtlcyB0aGUgV2FpdmVyIGZvciB0aGUgYmVuZWZpdCBvZiBlYWNoIG1lbWJlciBvZiB0aGUKKyAgIHB1YmxpYyBhdCBsYXJnZSBhbmQgdG8gdGhlIGRldHJpbWVudCBvZiBBZmZpcm1lcidzIGhlaXJzIGFuZAorICAgc3VjY2Vzc29ycywgZnVsbHkgaW50ZW5kaW5nIHRoYXQgc3VjaCBXYWl2ZXIgc2hhbGwgbm90IGJlCisgICBzdWJqZWN0IHRvIHJldm9jYXRpb24sIHJlc2Npc3Npb24sIGNhbmNlbGxhdGlvbiwgdGVybWluYXRpb24sCisgICBvciBhbnkgb3RoZXIgbGVnYWwgb3IgZXF1aXRhYmxlIGFjdGlvbiB0byBkaXNydXB0IHRoZSBxdWlldAorICAgZW5qb3ltZW50IG9mIHRoZSBXb3JrIGJ5IHRoZSBwdWJsaWMgYXMgY29udGVtcGxhdGVkIGJ5CisgICBBZmZpcm1lcidzIGV4cHJlc3MgU3RhdGVtZW50IG9mIFB1cnBvc2UuCisKKzMuIFB1YmxpYyBMaWNlbnNlIEZhbGxiYWNrLgorICAgU2hvdWxkIGFueSBwYXJ0IG9mIHRoZSBXYWl2ZXIgZm9yIGFueSByZWFzb24gYmUganVkZ2VkIGxlZ2FsbHkKKyAgIGludmFsaWQgb3IgaW5lZmZlY3RpdmUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIHRoZW4gdGhlIFdhaXZlcgorICAgc2hhbGwgYmUgcHJlc2VydmVkIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgdGFraW5nIGludG8KKyAgIGFjY291bnQgQWZmaXJtZXIncyBleHByZXNzIFN0YXRlbWVudCBvZiBQdXJwb3NlLiBJbiBhZGRpdGlvbiwKKyAgIHRvIHRoZSBleHRlbnQgdGhlIFdhaXZlciBpcyBzbyBqdWRnZWQgQWZmaXJtZXIgaGVyZWJ5IGdyYW50cyB0bworICAgZWFjaCBhZmZlY3RlZCBwZXJzb24gYSByb3lhbHR5LWZyZWUsIG5vbiB0cmFuc2ZlcmFibGUsIG5vbgorICAgc3VibGljZW5zYWJsZSwgbm9uIGV4Y2x1c2l2ZSwgaXJyZXZvY2FibGUgYW5kIHVuY29uZGl0aW9uYWwKKyAgIGxpY2Vuc2UgdG8gZXhlcmNpc2UgQWZmaXJtZXIncyBDb3B5cmlnaHQgYW5kIFJlbGF0ZWQgUmlnaHRzIGluCisgICB0aGUgV29yayAoaSkgaW4gYWxsIHRlcnJpdG9yaWVzIHdvcmxkd2lkZSwgKGlpKSBmb3IgdGhlIG1heGltdW0KKyAgIGR1cmF0aW9uIHByb3ZpZGVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIHRyZWF0eSAoaW5jbHVkaW5nIGZ1dHVyZQorICAgdGltZSBleHRlbnNpb25zKSwgKGlpaSkgaW4gYW55IGN1cnJlbnQgb3IgZnV0dXJlIG1lZGl1bSBhbmQgZm9yCisgICBhbnkgbnVtYmVyIG9mIGNvcGllcywgYW5kIChpdikgZm9yIGFueSBwdXJwb3NlIHdoYXRzb2V2ZXIsCisgICBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGNvbW1lcmNpYWwsIGFkdmVydGlzaW5nIG9yCisgICBwcm9tb3Rpb25hbCBwdXJwb3NlcyAodGhlICJMaWNlbnNlIikuIFRoZSBMaWNlbnNlIHNoYWxsIGJlCisgICBkZWVtZWQgZWZmZWN0aXZlIGFzIG9mIHRoZSBkYXRlIENDMCB3YXMgYXBwbGllZCBieSBBZmZpcm1lciB0bworICAgdGhlIFdvcmsuIFNob3VsZCBhbnkgcGFydCBvZiB0aGUgTGljZW5zZSBmb3IgYW55IHJlYXNvbiBiZQorICAganVkZ2VkIGxlZ2FsbHkgaW52YWxpZCBvciBpbmVmZmVjdGl2ZSB1bmRlciBhcHBsaWNhYmxlIGxhdywKKyAgIHN1Y2ggcGFydGlhbCBpbnZhbGlkaXR5IG9yIGluZWZmZWN0aXZlbmVzcyBzaGFsbCBub3QgaW52YWxpZGF0ZQorICAgdGhlIHJlbWFpbmRlciBvZiB0aGUgTGljZW5zZSwgYW5kIGluIHN1Y2ggY2FzZSBBZmZpcm1lciBoZXJlYnkKKyAgIGFmZmlybXMgdGhhdCBoZSBvciBzaGUgd2lsbCBub3QgKGkpIGV4ZXJjaXNlIGFueSBvZiBoaXMgb3IgaGVyCisgICByZW1haW5pbmcgQ29weXJpZ2h0IGFuZCBSZWxhdGVkIFJpZ2h0cyBpbiB0aGUgV29yayBvciAoaWkpCisgICBhc3NlcnQgYW55IGFzc29jaWF0ZWQgY2xhaW1zIGFuZCBjYXVzZXMgb2YgYWN0aW9uIHdpdGggcmVzcGVjdAorICAgdG8gdGhlIFdvcmssIGluIGVpdGhlciBjYXNlIGNvbnRyYXJ5IHRvIEFmZmlybWVyJ3MgZXhwcmVzcworICAgU3RhdGVtZW50IG9mIFB1cnBvc2UuCisKKzQuIExpbWl0YXRpb25zIGFuZCBEaXNjbGFpbWVycy4KKyAgIGEuIE5vIHRyYWRlbWFyayBvciBwYXRlbnQgcmlnaHRzIGhlbGQgYnkgQWZmaXJtZXIgYXJlIHdhaXZlZCwKKyAgICAgIGFiYW5kb25lZCwgc3VycmVuZGVyZWQsIGxpY2Vuc2VkIG9yIG90aGVyd2lzZSBhZmZlY3RlZCBieQorICAgICAgdGhpcyBkb2N1bWVudC4KKworICAgYi4gQWZmaXJtZXIgb2ZmZXJzIHRoZSBXb3JrIGFzLWlzIGFuZCBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMKKyAgICAgIG9yIHdhcnJhbnRpZXMgb2YgYW55IGtpbmQgY29uY2VybmluZyB0aGUgV29yaywgZXhwcmVzcywKKyAgICAgIGltcGxpZWQsIHN0YXR1dG9yeSBvciBvdGhlcndpc2UsIGluY2x1ZGluZyB3aXRob3V0CisgICAgICBsaW1pdGF0aW9uIHdhcnJhbnRpZXMgb2YgdGl0bGUsIG1lcmNoYW50YWJpbGl0eSwgZml0bmVzcyBmb3IKKyAgICAgIGEgcGFydGljdWxhciBwdXJwb3NlLCBub24gaW5mcmluZ2VtZW50LCBvciB0aGUgYWJzZW5jZSBvZgorICAgICAgbGF0ZW50IG9yIG90aGVyIGRlZmVjdHMsIGFjY3VyYWN5LCBvciB0aGUgcHJlc2VudCBvciBhYnNlbmNlCisgICAgICBvZiBlcnJvcnMsIHdoZXRoZXIgb3Igbm90IGRpc2NvdmVyYWJsZSwgYWxsIHRvIHRoZSBncmVhdGVzdAorICAgICAgZXh0ZW50IHBlcm1pc3NpYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LgorCisgICBjLiBBZmZpcm1lciBkaXNjbGFpbXMgcmVzcG9uc2liaWxpdHkgZm9yIGNsZWFyaW5nIHJpZ2h0cyBvZgorICAgICAgb3RoZXIgcGVyc29ucyB0aGF0IG1heSBhcHBseSB0byB0aGUgV29yayBvciBhbnkgdXNlIHRoZXJlb2YsCisgICAgICBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBwZXJzb24ncyBDb3B5cmlnaHQgYW5kCisgICAgICBSZWxhdGVkIFJpZ2h0cyBpbiB0aGUgV29yay4gRnVydGhlciwgQWZmaXJtZXIgZGlzY2xhaW1zCisgICAgICByZXNwb25zaWJpbGl0eSBmb3Igb2J0YWluaW5nIGFueSBuZWNlc3NhcnkgY29uc2VudHMsCisgICAgICBwZXJtaXNzaW9ucyBvciBvdGhlciByaWdodHMgcmVxdWlyZWQgZm9yIGFueSB1c2Ugb2YgdGhlCisgICAgICBXb3JrLgorCisgICBkLiBBZmZpcm1lciB1bmRlcnN0YW5kcyBhbmQgYWNrbm93bGVkZ2VzIHRoYXQgQ3JlYXRpdmUgQ29tbW9ucworICAgICAgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBkb2N1bWVudCBhbmQgaGFzIG5vIGR1dHkgb3IKKyAgICAgIG9ibGlnYXRpb24gd2l0aCByZXNwZWN0IHRvIHRoaXMgQ0MwIG9yIHVzZSBvZiB0aGUgV29yay4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0NDUEwtQXR0cmlidXRpb24tMi4wIGIvbGljZW5zZXMvQ0NQTC1BdHRyaWJ1dGlvbi0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdiMDFiMQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0NDUEwtQXR0cmlidXRpb24tMi4wCkBAIC0wLDAgKzEsMjQwIEBACisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMV1DcmVhdGl2ZSBDb21tb25zCisKKyAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0aXZlIENvbW1vbnMgTGVnYWwgQ29kZQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGlvbiAyLjAKKyAgIENSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUKKyAgIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTgorICAgQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTCisgICBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMKKyAgIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUgorICAgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorCisgICBMaWNlbnNlCisKKyAgIFRIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUworICAgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTCisgICBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUKKyAgIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTCisgICBQUk9ISUJJVEVELgorCisgICBCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQKKyAgIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMKKyAgIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GCisgICBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisgICAxLiBEZWZpbml0aW9ucworICAgIGEuICJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsCisgICAgICAgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluCisgICAgICAgdW5tb2RpZmllZCBmb3JtLCBhbG9uZyB3aXRoIGEgbnVtYmVyIG9mIG90aGVyIGNvbnRyaWJ1dGlvbnMsCisgICAgICAgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUKKyAgICAgICBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEKKyAgICAgICBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayAoYXMKKyAgICAgICBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyAgICBiLiAiRGVyaXZhdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yayBvciB1cG9uIHRoZQorICAgICAgIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsCisgICAgICAgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlCisgICAgICAgdmVyc2lvbiwgc291bmQgcmVjb3JkaW5nLCBhcnQgcmVwcm9kdWN0aW9uLCBhYnJpZGdtZW50LAorICAgICAgIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwKKyAgICAgICB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYQorICAgICAgIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUKKyAgICAgICBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZQorICAgICAgIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIG9yIHNvdW5kIHJlY29yZGluZywgdGhlCisgICAgICAgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UKKyAgICAgICAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZQorICAgICAgIG9mIHRoaXMgTGljZW5zZS4KKyAgICBjLiAiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yaworICAgICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisgICAgZC4gIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZQorICAgICAgIFdvcmsuCisgICAgZS4gIldvcmsiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyCisgICAgICAgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyAgICBmLiAiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzCisgICAgICAgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UKKyAgICAgICB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uCisgICAgICAgZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEKKyAgICAgICBwcmV2aW91cyB2aW9sYXRpb24uCisKKyAgIDIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLAorICAgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yCisgICBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyCisgICBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworICAgMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLAorICAgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwKKyAgIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8KKyAgIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorICAgIGEuIHRvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZQorICAgICAgIENvbGxlY3RpdmUgV29ya3MsIGFuZCB0byByZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZQorICAgICAgIENvbGxlY3RpdmUgV29ya3M7CisgICAgYi4gdG8gY3JlYXRlIGFuZCByZXByb2R1Y2UgRGVyaXZhdGl2ZSBXb3JrczsKKyAgICBjLiB0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0KKyAgICAgICBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvCisgICAgICAgdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZQorICAgICAgIFdvcmtzOworICAgIGQuIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybQorICAgICAgIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8KKyAgICAgICB0cmFuc21pc3Npb24gRGVyaXZhdGl2ZSBXb3Jrcy4KKyAgICBlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIHdvcmsgaXMgYSBtdXNpY2FsCisgICAgICAgY29tcG9zaXRpb246CisgICAgICAgICBpLiBQZXJmb3JtYW5jZSBSb3lhbHRpZXMgVW5kZXIgQmxhbmtldCBMaWNlbnNlcy4gTGljZW5zb3Igd2FpdmVzCisgICAgICAgICAgICB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhCisgICAgICAgICAgICBwZXJmb3JtYW5jZSByaWdodHMgc29jaWV0eSAoZS5nLiBBU0NBUCwgQk1JLCBTRVNBQyksCisgICAgICAgICAgICByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgcGVyZm9ybWFuY2Ugb3IgcHVibGljIGRpZ2l0YWwKKyAgICAgICAgICAgIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLgorICAgICAgICBpaS4gTWVjaGFuaWNhbCBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIExpY2Vuc29yIHdhaXZlcworICAgICAgICAgICAgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYQorICAgICAgICAgICAgbXVzaWMgcmlnaHRzIGFnZW5jeSBvciBkZXNpZ25hdGVkIGFnZW50IChlLmcuIEhhcnJ5IEZveAorICAgICAgICAgICAgQWdlbmN5KSwgcm95YWx0aWVzIGZvciBhbnkgcGhvbm9yZWNvcmQgWW91IGNyZWF0ZSBmcm9tIHRoZQorICAgICAgICAgICAgV29yayAoImNvdmVyIHZlcnNpb24iKSBhbmQgZGlzdHJpYnV0ZSwgc3ViamVjdCB0byB0aGUKKyAgICAgICAgICAgIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNSBvZiB0aGUgVVMKKyAgICAgICAgICAgIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLgorICAgIGYuIFdlYmNhc3RpbmcgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBGb3IgdGhlIGF2b2lkYW5jZSBvZgorICAgICAgIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIHNvdW5kIHJlY29yZGluZywgTGljZW5zb3Igd2FpdmVzIHRoZQorICAgICAgIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYQorICAgICAgIHBlcmZvcm1hbmNlLXJpZ2h0cyBzb2NpZXR5IChlLmcuIFNvdW5kRXhjaGFuZ2UpLCByb3lhbHRpZXMgZm9yIHRoZQorICAgICAgIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLCBzdWJqZWN0IHRvCisgICAgICAgdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNCBvZiB0aGUgVVMKKyAgICAgICBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKS4KKworICAgVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdworICAga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZQorICAgc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cworICAgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5CisgICBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLgorCisgICA0LiBSZXN0cmljdGlvbnMuVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5CisgICBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisgICAgYS4gWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvcgorICAgICAgIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMKKyAgICAgICBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlCisgICAgICAgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlCisgICAgICAgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IKKyAgICAgICBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcworICAgICAgIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvcgorICAgICAgIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UgbWF5CisgICAgICAgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQKKyAgICAgICByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkKKyAgICAgICBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkKKyAgICAgICBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQKKyAgICAgICBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGgKKyAgICAgICB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIFdvcmsKKyAgICAgICBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUKKyAgICAgICB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdAorICAgICAgIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aXZlIFdvcmssCisgICAgICAgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsCisgICAgICAgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IKKyAgICAgICB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYSBEZXJpdmF0aXZlCisgICAgICAgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQKKyAgICAgICBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIERlcml2YXRpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2gKKyAgICAgICBMaWNlbnNvciBvciB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuCisgICAgYi4gSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5CisgICAgICAgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZQorICAgICAgIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZAorICAgICAgIGdpdmUgdGhlIE9yaWdpbmFsIEF1dGhvciBjcmVkaXQgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zCisgICAgICAgWW91IGFyZSB1dGlsaXppbmcgYnkgY29udmV5aW5nIHRoZSBuYW1lIChvciBwc2V1ZG9ueW0gaWYKKyAgICAgICBhcHBsaWNhYmxlKSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGlmIHN1cHBsaWVkOyB0aGUgdGl0bGUgb2YgdGhlCisgICAgICAgV29yayBpZiBzdXBwbGllZDsgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUKKyAgICAgICBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIsIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUKKyAgICAgICBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUKKyAgICAgICBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcms7IGFuZCBpbiB0aGUKKyAgICAgICBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZQorICAgICAgIFdvcmsgaW4gdGhlIERlcml2YXRpdmUgV29yayAoZS5nLiwgIkZyZW5jaCB0cmFuc2xhdGlvbiBvZiB0aGUgV29yaworICAgICAgIGJ5IE9yaWdpbmFsIEF1dGhvciwiIG9yICJTY3JlZW5wbGF5IGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkKKyAgICAgICBPcmlnaW5hbCBBdXRob3IiKS4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueQorICAgICAgIHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhCisgICAgICAgRGVyaXZhdGl2ZSBXb3JrIG9yIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwKKyAgICAgICBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4KKyAgICAgICBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaCBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAKKyAgICAgICBjcmVkaXQuCisKKyAgIDUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCisgICBVTkxFU1MgT1RIRVJXSVNFIE1VVFVBTExZIEFHUkVFRCBUTyBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HLAorICAgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IKKyAgIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgV09SSywgRVhQUkVTUywgSU1QTElFRCwKKyAgIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GCisgICBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwKKyAgIE5PTklORlJJTkdFTUVOVCwgT1IgVEhFIEFCU0VOQ0UgT0YgTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLAorICAgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuCisgICBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLAorICAgU08gU1VDSCBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKyAgIDYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWQorICAgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkKKyAgIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SCisgICBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywKKyAgIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisgICA3LiBUZXJtaW5hdGlvbgorICAgIGEuIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZQorICAgICAgIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorICAgICAgIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIERlcml2YXRpdmUgV29ya3Mgb3IKKyAgICAgICBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QKKyAgICAgICBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvcgorICAgICAgIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMKKyAgICAgICAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KKyAgICBiLiBTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZAorICAgICAgIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbgorICAgICAgIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0CisgICAgICAgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wCisgICAgICAgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoCisgICAgICAgZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIKKyAgICAgICBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZQorICAgICAgIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsCisgICAgICAgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCisKKyAgIDguIE1pc2NlbGxhbmVvdXMKKyAgICBhLiBFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IKKyAgICAgICBhIENvbGxlY3RpdmUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZQorICAgICAgIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlCisgICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorICAgIGIuIEVhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhCisgICAgICAgRGVyaXZhdGl2ZSBXb3JrLCBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlCisgICAgICAgb3JpZ2luYWwgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZQorICAgICAgIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KKyAgICBjLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKKyAgICAgICBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkKKyAgICAgICBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIKKyAgICAgICBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlCisgICAgICAgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uCisgICAgICAgdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorICAgIGQuIE5vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubworICAgICAgIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4KKyAgICAgICB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvcgorICAgICAgIGNvbnNlbnQuCisgICAgZS4gVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMKKyAgICAgICB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vCisgICAgICAgdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUKKyAgICAgICBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueQorICAgICAgIGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbQorICAgICAgIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4KKyAgICAgICBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCisKKyAgIENyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkKKyAgIHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlCisgICBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcworICAgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwKKyAgIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzCisgICBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUKKyAgIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdAorICAgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworICAgRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZQorICAgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrCisgICAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUKKyAgIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueQorICAgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zJworICAgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cworICAgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLgorCisgICBDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgWzJdaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbM10gQmFjayB0byBDb21tb25zIERlZWQKKworUmVmZXJlbmNlcworCisgICAxLiBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8KKyAgIDIuIGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLworICAgMy4gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnkvMi4wLwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvQ0NQTC1BdHRyaWJ1dGlvbi0yLjUgYi9saWNlbnNlcy9DQ1BMLUF0dHJpYnV0aW9uLTIuNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZWNmZjNjCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvQ0NQTC1BdHRyaWJ1dGlvbi0yLjUKQEAgLTAsMCArMSwyMjYgQEAKKyAgICAgICAgICAgICAgICAgICAgIENyZWF0aXZlIENvbW1vbnMgTGVnYWwgQ29kZQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGlvbiAyLjUKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgCitMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4gCitBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gCitPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSAKK0lORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSAKK0lUUyBVU0UuCisKK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIAorQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSAKK0NPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyAKK0FVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIAorVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIAorUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgCitBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworICAgYS4gIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgCithbnRob2xvZ3kgb3IgZW5jeWNsb3BlZGlhLCBpbiB3aGljaCB0aGUgV29yayBpbiBpdHMgZW50aXJldHkgaW4gCit1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgCitjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgCitpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCAKK25vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIAorb2YgdGhpcyBMaWNlbnNlLgorICAgYi4gIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgCitXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgbXVzaWNhbCAKK2FycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCAKK3NvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgCitvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkLCAKK2V4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIAorY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIAorYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb24gb3Igc291bmQgCityZWNvcmRpbmcsIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIAorbW92aW5nIGltYWdlICgic3luY2hpbmciKSB3aWxsIGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSAKK3B1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLgorICAgYy4gIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorICAgZC4gIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZSAKK1dvcmsuCisgICBlLiAiV29yayIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgCit0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorICAgZi4gIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyAKK0xpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggCityZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSAKK0xpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIAordmlvbGF0aW9uLgorCisyLiBGYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgCitsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgCitsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIAorY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgCitMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCAKK3BlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8gCitleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKworICAgYS4gdG8gcmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIAorQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIAorQ29sbGVjdGl2ZSBXb3JrczsKKyAgIGIuIHRvIGNyZWF0ZSBhbmQgcmVwcm9kdWNlIERlcml2YXRpdmUgV29ya3M7CisgICBjLiB0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gCitwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiAKK3RoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrczsKKyAgIGQuIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSAKK3B1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIAorRGVyaXZhdGl2ZSBXb3Jrcy4KKyAgIGUuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgd29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb246CisgICAgICAgICBpLiBQZXJmb3JtYW5jZSBSb3lhbHRpZXMgVW5kZXIgQmxhbmtldCBMaWNlbnNlcy4gTGljZW5zb3IgCit3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSAKK3BlcmZvcm1hbmNlIHJpZ2h0cyBzb2NpZXR5IChlLmcuIEFTQ0FQLCBCTUksIFNFU0FDKSwgcm95YWx0aWVzIGZvciB0aGUgCitwdWJsaWMgcGVyZm9ybWFuY2Ugb3IgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIAorV29yay4KKyAgICAgICAgaWkuIE1lY2hhbmljYWwgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBMaWNlbnNvciB3YWl2ZXMgCit0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIG11c2ljIAorcmlnaHRzIGFnZW5jeSBvciBkZXNpZ25hdGVkIGFnZW50IChlLmcuIEhhcnJ5IEZveCBBZ2VuY3kpLCByb3lhbHRpZXMgZm9yIAorYW55IHBob25vcmVjb3JkIFlvdSBjcmVhdGUgZnJvbSB0aGUgV29yayAoImNvdmVyIHZlcnNpb24iKSBhbmQgCitkaXN0cmlidXRlLCBzdWJqZWN0IHRvIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAKKzExNSBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucykuCisgICBmLiBXZWJjYXN0aW5nIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgCitkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBzb3VuZCByZWNvcmRpbmcsIExpY2Vuc29yIHdhaXZlcyB0aGUgCitleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgCitwZXJmb3JtYW5jZS1yaWdodHMgc29jaWV0eSAoZS5nLiBTb3VuZEV4Y2hhbmdlKSwgcm95YWx0aWVzIGZvciB0aGUgCitwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yaywgc3ViamVjdCB0byB0aGUgCitjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTQgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgCisob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucykuCisKK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cgCitrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIAorc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyAKK2luIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciAKK2FyZSBoZXJlYnkgcmVzZXJ2ZWQuCisKKzQuIFJlc3RyaWN0aW9ucy5UaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSAKK3N1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKKyAgIGEuIFlvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgCitwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIAorTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSAKK0lkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIAorWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IAorZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgCit0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHMnIAorZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgCitXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gCit0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5IG5vdCBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCAKK3B1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IAordGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIAorbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgCithcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyAKK25vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSAKK3N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUgV29yaywgCit1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgCityZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgY2xhdXNlIDQoYiksIAorYXMgcmVxdWVzdGVkLiBJZiBZb3UgY3JlYXRlIGEgRGVyaXZhdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSAKK0xpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgRGVyaXZhdGl2ZSAKK1dvcmsgYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBjbGF1c2UgNChiKSwgYXMgcmVxdWVzdGVkLgorICAgYi4gSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IAorZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcywgCitZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBwcm92aWRlLCAKK3JlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZzogKGkpIHRoZSBuYW1lIG9mIHRoZSAKK09yaWdpbmFsIEF1dGhvciAob3IgcHNldWRvbnltLCBpZiBhcHBsaWNhYmxlKSBpZiBzdXBwbGllZCwgYW5kL29yIChpaSkgCitpZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGFuZC9vciBMaWNlbnNvciBkZXNpZ25hdGUgYW5vdGhlciBwYXJ0eSBvciAKK3BhcnRpZXMgKGUuZy4gYSBzcG9uc29yIGluc3RpdHV0ZSwgcHVibGlzaGluZyBlbnRpdHksIGpvdXJuYWwpIGZvciAKK2F0dHJpYnV0aW9uIGluIExpY2Vuc29yJ3MgY29weXJpZ2h0IG5vdGljZSwgdGVybXMgb2Ygc2VydmljZSBvciBieSBvdGhlciAKK3JlYXNvbmFibGUgbWVhbnMsIHRoZSBuYW1lIG9mIHN1Y2ggcGFydHkgb3IgcGFydGllczsgdGhlIHRpdGxlIG9mIHRoZSAKK1dvcmsgaWYgc3VwcGxpZWQ7IHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVuaWZvcm0gCitSZXNvdXJjZSBJZGVudGlmaWVyLCBpZiBhbnksIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgCit3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgCitsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrOyBhbmQgaW4gdGhlIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIAorV29yaywgYSBjcmVkaXQgaWRlbnRpZnlpbmcgdGhlIHVzZSBvZiB0aGUgV29yayBpbiB0aGUgRGVyaXZhdGl2ZSBXb3JrIAorKGUuZy4sICJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLCIgb3IgCisiU2NyZWVucGxheSBiYXNlZCBvbiBvcmlnaW5hbCBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciIpLiBTdWNoIGNyZWRpdCBtYXkgCitiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSAKK2Nhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmsgb3IgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgCit3aWxsIGFwcGVhciB3aGVyZSBhbnkgb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbiAKK2EgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyBzdWNoIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCAKK2NyZWRpdC4KKworNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK1VOTEVTUyBPVEhFUldJU0UgTVVUVUFMTFkgQUdSRUVEIFRPIEJZIFRIRSBQQVJUSUVTIElOIFdSSVRJTkcsIExJQ0VOU09SIAorT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgCitLSU5EIENPTkNFUk5JTkcgVEhFIFdPUkssIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIAorSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE1FUkNIQU5USUJJTElUWSwgCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiAKK0xBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCAKK1dIRVRIRVIgT1IgTk9UIERJU0NPVkVSQUJMRS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgCitFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgCitMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiAKK0FOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyAKK0FSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyAKK0JFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCisgICBhLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgCithdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gCitJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgCitXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgCit0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgCitjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgCitzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCisgICBiLiBTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCAKK2hlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgCitXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgCit0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayAKK2F0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIAord2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyAKK3JlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyAKK0xpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgCitzdGF0ZWQgYWJvdmUuCisKKzguIE1pc2NlbGxhbmVvdXMKKworICAgYS4gRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIAorYSBDb2xsZWN0aXZlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIAorV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSAKK3VuZGVyIHRoaXMgTGljZW5zZS4KKyAgIGIuIEVhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIAorRGVyaXZhdGl2ZSBXb3JrLCBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIAorb3JpZ2luYWwgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIAorWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KKyAgIGMuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciAKK2FwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiAKK3RoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gCitieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gCit0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIAorZW5mb3JjZWFibGUuCisgICBkLiBObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gCiticmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgCithbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KKyAgIGUuIFRoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIAord2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgCithZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCAKK2hlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IAorYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCAKK3dpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KKworQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSAKK3doYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIAorbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgCit3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLCAKK2luY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIAorbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIAorQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0IAorc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIAoraXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyayAKKyJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIAord2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIAord2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9ucycgdGhlbi1jdXJyZW50IHRyYWRlbWFyayAKK3VzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgCithdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLgorCitDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvQ0NQTC1BdHRyaWJ1dGlvbi0zLjAgYi9saWNlbnNlcy9DQ1BMLUF0dHJpYnV0aW9uLTMuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGI3YzQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvQ0NQTC1BdHRyaWJ1dGlvbi0zLjAKQEAgLTAsMCArMSwxNzMgQEAKK0NyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24gMy4wIExpY2Vuc2UgQWdyZWVtZW50CisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIAorQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OIE9OIEFOICJBUy1JUyIgQkFTSVMuIENSRUFUSVZFIENPTU1PTlMgTUFLRVMgTk8gV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIAorSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuIAorCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIAorQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRPIFRIRSBFWFRFTlQgVEhJUyBMSUNFTlNFIE1BWSBCRSAKK0NPTlNJREVSRUQgVE8gQkUgQSBDT05UUkFDVCwgVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisgICBhLiAiQWRhcHRhdGlvbiIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmssIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBhZGFwdGF0aW9uLCBkZXJpdmF0aXZlIHdvcmssIAorYXJyYW5nZW1lbnQgb2YgbXVzaWMgb3Igb3RoZXIgYWx0ZXJhdGlvbnMgb2YgYSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrLCBvciBwaG9ub2dyYW0gb3IgcGVyZm9ybWFuY2UgYW5kIGluY2x1ZGVzIGNpbmVtYXRvZ3JhcGhpYyBhZGFwdGF0aW9ucyBvciBhbnkgCitvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkIGluY2x1ZGluZyBpbiBhbnkgZm9ybSByZWNvZ25pemFibHkgZGVyaXZlZCBmcm9tIHRoZSBvcmlnaW5hbCwgZXhjZXB0IHRoYXQgYSB3b3JrIAordGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3Rpb24gd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIAorbXVzaWNhbCB3b3JrLCBwZXJmb3JtYW5jZSBvciBwaG9ub2dyYW0sIHRoZSBzeW5jaHJvbml6YXRpb24gb2YgdGhlIFdvcmsgaW4gdGltZWQtcmVsYXRpb24gd2l0aCBhIG1vdmluZyBpbWFnZSAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGFuIAorQWRhcHRhdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLgorICAgYi4gIkNvbGxlY3Rpb24iIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3Jrcywgc3VjaCBhcyBlbmN5Y2xvcGVkaWFzIGFuZCBhbnRob2xvZ2llcywgb3IgcGVyZm9ybWFuY2VzLCBwaG9ub2dyYW1zIG9yIGJyb2FkY2FzdHMsIAorb3Igb3RoZXIgd29ya3Mgb3Igc3ViamVjdCBtYXR0ZXIgb3RoZXIgdGhhbiB3b3JrcyBsaXN0ZWQgaW4gU2VjdGlvbiAxKGYpIGJlbG93LCB3aGljaCwgYnkgcmVhc29uIG9mIHRoZSBzZWxlY3Rpb24gYW5kIGFycmFuZ2VtZW50IG9mIHRoZWlyIGNvbnRlbnRzLCAKK2NvbnN0aXR1dGUgaW50ZWxsZWN0dWFsIGNyZWF0aW9ucywgaW4gd2hpY2ggdGhlIFdvcmsgaXMgaW5jbHVkZWQgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSBhbG9uZyB3aXRoIG9uZSBvciBtb3JlIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGVhY2ggCitjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIHdoaWNoIHRvZ2V0aGVyIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGlvbiAKK3dpbGwgbm90IGJlIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiAoYXMgZGVmaW5lZCBhYm92ZSkgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisgICBjLiAiRGlzdHJpYnV0ZSIgbWVhbnMgdG8gbWFrZSBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyB0aGUgb3JpZ2luYWwgYW5kIGNvcGllcyBvZiB0aGUgV29yayBvciBBZGFwdGF0aW9uLCBhcyBhcHByb3ByaWF0ZSwgdGhyb3VnaCBzYWxlIG9yIG90aGVyIAordHJhbnNmZXIgb2Ygb3duZXJzaGlwLgorICAgZC4gIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCwgaW5kaXZpZHVhbHMsIGVudGl0eSBvciBlbnRpdGllcyB0aGF0IG9mZmVyKHMpIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisgICBlLiAiT3JpZ2luYWwgQXV0aG9yIiBtZWFucywgaW4gdGhlIGNhc2Ugb2YgYSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrLCB0aGUgaW5kaXZpZHVhbCwgaW5kaXZpZHVhbHMsIGVudGl0eSBvciBlbnRpdGllcyB3aG8gY3JlYXRlZCB0aGUgV29yayBvciBpZiAKK25vIGluZGl2aWR1YWwgb3IgZW50aXR5IGNhbiBiZSBpZGVudGlmaWVkLCB0aGUgcHVibGlzaGVyOyBhbmQgaW4gYWRkaXRpb24gKGkpIGluIHRoZSBjYXNlIG9mIGEgcGVyZm9ybWFuY2UgdGhlIGFjdG9ycywgc2luZ2VycywgbXVzaWNpYW5zLCBkYW5jZXJzLCBhbmQgCitvdGhlciBwZXJzb25zIHdobyBhY3QsIHNpbmcsIGRlbGl2ZXIsIGRlY2xhaW0sIHBsYXkgaW4sIGludGVycHJldCBvciBvdGhlcndpc2UgcGVyZm9ybSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrcyBvciBleHByZXNzaW9ucyBvZiBmb2xrbG9yZTsgKGlpKSBpbiAKK3RoZSBjYXNlIG9mIGEgcGhvbm9ncmFtIHRoZSBwcm9kdWNlciBiZWluZyB0aGUgcGVyc29uIG9yIGxlZ2FsIGVudGl0eSB3aG8gZmlyc3QgZml4ZXMgdGhlIHNvdW5kcyBvZiBhIHBlcmZvcm1hbmNlIG9yIG90aGVyIHNvdW5kczsgYW5kLCAoaWlpKSBpbiB0aGUgCitjYXNlIG9mIGJyb2FkY2FzdHMsIHRoZSBvcmdhbml6YXRpb24gdGhhdCB0cmFuc21pdHMgdGhlIGJyb2FkY2FzdC4KKyAgIGYuICJXb3JrIiBtZWFucyB0aGUgbGl0ZXJhcnkgYW5kL29yIGFydGlzdGljIHdvcmsgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IHByb2R1Y3Rpb24gaW4gdGhlIAorbGl0ZXJhcnksIHNjaWVudGlmaWMgYW5kIGFydGlzdGljIGRvbWFpbiwgd2hhdGV2ZXIgbWF5IGJlIHRoZSBtb2RlIG9yIGZvcm0gb2YgaXRzIGV4cHJlc3Npb24gaW5jbHVkaW5nIGRpZ2l0YWwgZm9ybSwgc3VjaCBhcyBhIGJvb2ssIHBhbXBobGV0IGFuZCBvdGhlciAKK3dyaXRpbmc7IGEgbGVjdHVyZSwgYWRkcmVzcywgc2VybW9uIG9yIG90aGVyIHdvcmsgb2YgdGhlIHNhbWUgbmF0dXJlOyBhIGRyYW1hdGljIG9yIGRyYW1hdGljby1tdXNpY2FsIHdvcms7IGEgY2hvcmVvZ3JhcGhpYyB3b3JrIG9yIGVudGVydGFpbm1lbnQgaW4gCitkdW1iIHNob3c7IGEgbXVzaWNhbCBjb21wb3NpdGlvbiB3aXRoIG9yIHdpdGhvdXQgd29yZHM7IGEgY2luZW1hdG9ncmFwaGljIHdvcmsgdG8gd2hpY2ggYXJlIGFzc2ltaWxhdGVkIHdvcmtzIGV4cHJlc3NlZCBieSBhIHByb2Nlc3MgYW5hbG9nb3VzIHRvIAorY2luZW1hdG9ncmFwaHk7IGEgd29yayBvZiBkcmF3aW5nLCBwYWludGluZywgYXJjaGl0ZWN0dXJlLCBzY3VscHR1cmUsIGVuZ3JhdmluZyBvciBsaXRob2dyYXBoeTsgYSBwaG90b2dyYXBoaWMgd29yayB0byB3aGljaCBhcmUgYXNzaW1pbGF0ZWQgd29ya3MgCitleHByZXNzZWQgYnkgYSBwcm9jZXNzIGFuYWxvZ291cyB0byBwaG90b2dyYXBoeTsgYSB3b3JrIG9mIGFwcGxpZWQgYXJ0OyBhbiBpbGx1c3RyYXRpb24sIG1hcCwgcGxhbiwgc2tldGNoIG9yIHRocmVlLWRpbWVuc2lvbmFsIHdvcmsgcmVsYXRpdmUgdG8gCitnZW9ncmFwaHksIHRvcG9ncmFwaHksIGFyY2hpdGVjdHVyZSBvciBzY2llbmNlOyBhIHBlcmZvcm1hbmNlOyBhIGJyb2FkY2FzdDsgYSBwaG9ub2dyYW07IGEgY29tcGlsYXRpb24gb2YgZGF0YSB0byB0aGUgZXh0ZW50IGl0IGlzIHByb3RlY3RlZCBhcyBhIAorY29weXJpZ2h0YWJsZSB3b3JrOyBvciBhIHdvcmsgcGVyZm9ybWVkIGJ5IGEgdmFyaWV0eSBvciBjaXJjdXMgcGVyZm9ybWVyIHRvIHRoZSBleHRlbnQgaXQgaXMgbm90IG90aGVyd2lzZSBjb25zaWRlcmVkIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yay4KKyAgIGcuICJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IAordG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKyAgIGguICJQdWJsaWNseSBQZXJmb3JtIiBtZWFucyB0byBwZXJmb3JtIHB1YmxpYyByZWNpdGF0aW9ucyBvZiB0aGUgV29yayBhbmQgdG8gY29tbXVuaWNhdGUgdG8gdGhlIHB1YmxpYyB0aG9zZSBwdWJsaWMgcmVjaXRhdGlvbnMsIGJ5IGFueSBtZWFucyBvciAKK3Byb2Nlc3MsIGluY2x1ZGluZyBieSB3aXJlIG9yIHdpcmVsZXNzIG1lYW5zIG9yIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlczsgdG8gbWFrZSBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBXb3JrcyBpbiBzdWNoIGEgd2F5IHRoYXQgbWVtYmVycyBvZiB0aGUgCitwdWJsaWMgbWF5IGFjY2VzcyB0aGVzZSBXb3JrcyBmcm9tIGEgcGxhY2UgYW5kIGF0IGEgcGxhY2UgaW5kaXZpZHVhbGx5IGNob3NlbiBieSB0aGVtOyB0byBwZXJmb3JtIHRoZSBXb3JrIHRvIHRoZSBwdWJsaWMgYnkgYW55IG1lYW5zIG9yIHByb2Nlc3MgYW5kIAordGhlIGNvbW11bmljYXRpb24gdG8gdGhlIHB1YmxpYyBvZiB0aGUgcGVyZm9ybWFuY2VzIG9mIHRoZSBXb3JrLCBpbmNsdWRpbmcgYnkgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2U7IHRvIGJyb2FkY2FzdCBhbmQgcmVicm9hZGNhc3QgdGhlIFdvcmsgYnkgYW55IAorbWVhbnMgaW5jbHVkaW5nIHNpZ25zLCBzb3VuZHMgb3IgaW1hZ2VzLgorICAgaS4gIlJlcHJvZHVjZSIgbWVhbnMgdG8gbWFrZSBjb3BpZXMgb2YgdGhlIFdvcmsgYnkgYW55IG1lYW5zIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYnkgc291bmQgb3IgdmlzdWFsIHJlY29yZGluZ3MgYW5kIHRoZSByaWdodCBvZiBmaXhhdGlvbiAKK2FuZCByZXByb2R1Y2luZyBmaXhhdGlvbnMgb2YgdGhlIFdvcmssIGluY2x1ZGluZyBzdG9yYWdlIG9mIGEgcHJvdGVjdGVkIHBlcmZvcm1hbmNlIG9yIHBob25vZ3JhbSBpbiBkaWdpdGFsIGZvcm0gb3Igb3RoZXIgZWxlY3Ryb25pYyBtZWRpdW0uCisKKzIuIEZhaXIgRGVhbGluZyBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwgbGltaXQsIG9yIHJlc3RyaWN0IGFueSB1c2VzIGZyZWUgZnJvbSBjb3B5cmlnaHQgb3IgcmlnaHRzIGFyaXNpbmcgZnJvbSAKK2xpbWl0YXRpb25zIG9yIGV4Y2VwdGlvbnMgdGhhdCBhcmUgcHJvdmlkZWQgZm9yIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgY29weXJpZ2h0IHByb3RlY3Rpb24gdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsIAorKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCisgICBhLiB0byBSZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGlvbnMsIGFuZCB0byBSZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aW9uczsKKyAgIGIuIHRvIGNyZWF0ZSBhbmQgUmVwcm9kdWNlIEFkYXB0YXRpb25zIHByb3ZpZGVkIHRoYXQgYW55IHN1Y2ggQWRhcHRhdGlvbiwgaW5jbHVkaW5nIGFueSB0cmFuc2xhdGlvbiBpbiBhbnkgbWVkaXVtLCB0YWtlcyByZWFzb25hYmxlIHN0ZXBzIHRvIGNsZWFybHkgCitsYWJlbCwgZGVtYXJjYXRlIG9yIG90aGVyd2lzZSBpZGVudGlmeSB0aGF0IGNoYW5nZXMgd2VyZSBtYWRlIHRvIHRoZSBvcmlnaW5hbCBXb3JrLiBGb3IgZXhhbXBsZSwgYSB0cmFuc2xhdGlvbiBjb3VsZCBiZSBtYXJrZWQgIlRoZSBvcmlnaW5hbCB3b3JrIHdhcyAKK3RyYW5zbGF0ZWQgZnJvbSBFbmdsaXNoIHRvIFNwYW5pc2gsIiBvciBhIG1vZGlmaWNhdGlvbiBjb3VsZCBpbmRpY2F0ZSAiVGhlIG9yaWdpbmFsIHdvcmsgaGFzIGJlZW4gbW9kaWZpZWQuIjsKKyAgIGMuIHRvIERpc3RyaWJ1dGUgYW5kIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aW9uczsgYW5kLAorICAgZC4gdG8gRGlzdHJpYnV0ZSBhbmQgUHVibGljbHkgUGVyZm9ybSBBZGFwdGF0aW9ucy4KKyAgIGQuCisKKyAgICAgIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0OgorICAgICAgICAgaS4gTm9uLXdhaXZhYmxlIENvbXB1bHNvcnkgTGljZW5zZSBTY2hlbWVzLiBJbiB0aG9zZSBqdXJpc2RpY3Rpb25zIGluIHdoaWNoIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSAKK2xpY2Vuc2luZyBzY2hlbWUgY2Fubm90IGJlIHdhaXZlZCwgdGhlIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCBzdWNoIHJveWFsdGllcyBmb3IgYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgCit1bmRlciB0aGlzIExpY2Vuc2U7CisgICAgICAgICBpaS4gV2FpdmFibGUgQ29tcHVsc29yeSBMaWNlbnNlIFNjaGVtZXMuIEluIHRob3NlIGp1cmlzZGljdGlvbnMgaW4gd2hpY2ggdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzIHRocm91Z2ggYW55IHN0YXR1dG9yeSBvciBjb21wdWxzb3J5IAorbGljZW5zaW5nIHNjaGVtZSBjYW4gYmUgd2FpdmVkLCB0aGUgTGljZW5zb3Igd2FpdmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCBzdWNoIHJveWFsdGllcyBmb3IgYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgCit0aGlzIExpY2Vuc2U7IGFuZCwKKyAgICAgICAgIGlpaS4gVm9sdW50YXJ5IExpY2Vuc2UgU2NoZW1lcy4gVGhlIExpY2Vuc29yIHdhaXZlcyB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yLCBpbiB0aGUgZXZlbnQgdGhhdCB0aGUgTGljZW5zb3IgaXMgYSAKK21lbWJlciBvZiBhIGNvbGxlY3Rpbmcgc29jaWV0eSB0aGF0IGFkbWluaXN0ZXJzIHZvbHVudGFyeSBsaWNlbnNpbmcgc2NoZW1lcywgdmlhIHRoYXQgc29jaWV0eSwgZnJvbSBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciAKK3RoaXMgTGljZW5zZS4KKworVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggCittb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cy4gU3ViamVjdCB0byBTZWN0aW9uIDgoZiksIGFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIAorYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZC4KKworNC4gUmVzdHJpY3Rpb25zLiBUaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCisgICBhLiBZb3UgbWF5IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSAKK0lkZW50aWZpZXIgKFVSSSkgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBXb3JrIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgCit0aGF0IHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIGFiaWxpdHkgb2YgdGhlIHJlY2lwaWVudCBvZiB0aGUgV29yayB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gdGhhdCByZWNpcGllbnQgdW5kZXIgdGhlIHRlcm1zIG9mIAordGhlIExpY2Vuc2UuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzIHdpdGggCitldmVyeSBjb3B5IG9mIHRoZSBXb3JrIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0uIFdoZW4gWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yaywgWW91IG1heSBub3QgaW1wb3NlIGFueSBlZmZlY3RpdmUgCit0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIG9uIHRoZSBXb3JrIHRoYXQgcmVzdHJpY3QgdGhlIGFiaWxpdHkgb2YgYSByZWNpcGllbnQgb2YgdGhlIFdvcmsgZnJvbSBZb3UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIAordGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlLiBUaGlzIFNlY3Rpb24gNChhKSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3Rpb24sIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3Rpb24gYXBhcnQgZnJvbSAKK3RoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3Rpb24sIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IAorcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aW9uIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgU2VjdGlvbiA0KGIpLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYW4gQWRhcHRhdGlvbiwgdXBvbiBub3RpY2UgZnJvbSBhbnkgCitMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIEFkYXB0YXRpb24gYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBTZWN0aW9uIDQoYiksIGFzIHJlcXVlc3RlZC4KKyAgIGIuIElmIFlvdSBEaXN0cmlidXRlLCBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBBZGFwdGF0aW9ucyBvciBDb2xsZWN0aW9ucywgWW91IG11c3QsIHVubGVzcyBhIHJlcXVlc3QgaGFzIGJlZW4gbWFkZSBwdXJzdWFudCB0byBTZWN0aW9uIAorNChhKSwga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgcHJvdmlkZSwgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nOiAoaSkgdGhlIG5hbWUgb2YgdGhlIE9yaWdpbmFsIAorQXV0aG9yIChvciBwc2V1ZG9ueW0sIGlmIGFwcGxpY2FibGUpIGlmIHN1cHBsaWVkLCBhbmQvb3IgaWYgdGhlIE9yaWdpbmFsIEF1dGhvciBhbmQvb3IgTGljZW5zb3IgZGVzaWduYXRlIGFub3RoZXIgcGFydHkgb3IgcGFydGllcyAoZS5nLiwgYSBzcG9uc29yIAoraW5zdGl0dXRlLCBwdWJsaXNoaW5nIGVudGl0eSwgam91cm5hbCkgZm9yIGF0dHJpYnV0aW9uICgiQXR0cmlidXRpb24gUGFydGllcyIpIGluIExpY2Vuc29yJ3MgY29weXJpZ2h0IG5vdGljZSwgdGVybXMgb2Ygc2VydmljZSBvciBieSBvdGhlciByZWFzb25hYmxlIAorbWVhbnMsIHRoZSBuYW1lIG9mIHN1Y2ggcGFydHkgb3IgcGFydGllczsgKGlpKSB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IChpaWkpIHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVSSSwgaWYgYW55LCB0aGF0IAorTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yaywgdW5sZXNzIHN1Y2ggVVJJIGRvZXMgbm90IHJlZmVyIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcms7IGFuZCAKKyhpdikgLCBjb25zaXN0ZW50IHdpdGggU2VjdGlvbiAzKGIpLCBpbiB0aGUgY2FzZSBvZiBhbiBBZGFwdGF0aW9uLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBBZGFwdGF0aW9uIChlLmcuLCAiRnJlbmNoIAordHJhbnNsYXRpb24gb2YgdGhlIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yLCIgb3IgIlNjcmVlbnBsYXkgYmFzZWQgb24gb3JpZ2luYWwgV29yayBieSBPcmlnaW5hbCBBdXRob3IiKS4gVGhlIGNyZWRpdCByZXF1aXJlZCBieSB0aGlzIFNlY3Rpb24gNCAoYikgbWF5IAorYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhIEFkYXB0YXRpb24gb3IgQ29sbGVjdGlvbiwgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyLCBpZiBhIAorY3JlZGl0IGZvciBhbGwgY29udHJpYnV0aW5nIGF1dGhvcnMgb2YgdGhlIEFkYXB0YXRpb24gb3IgQ29sbGVjdGlvbiBhcHBlYXJzLCB0aGVuIGFzIHBhcnQgb2YgdGhlc2UgY3JlZGl0cyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHRoZSAKK2NyZWRpdHMgZm9yIHRoZSBvdGhlciBjb250cmlidXRpbmcgYXV0aG9ycy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIFlvdSBtYXkgb25seSB1c2UgdGhlIGNyZWRpdCByZXF1aXJlZCBieSB0aGlzIFNlY3Rpb24gZm9yIHRoZSBwdXJwb3NlIG9mIAorYXR0cmlidXRpb24gaW4gdGhlIG1hbm5lciBzZXQgb3V0IGFib3ZlIGFuZCwgYnkgZXhlcmNpc2luZyBZb3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UsIFlvdSBtYXkgbm90IGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSBhc3NlcnQgb3IgaW1wbHkgYW55IAorY29ubmVjdGlvbiB3aXRoLCBzcG9uc29yc2hpcCBvciBlbmRvcnNlbWVudCBieSB0aGUgT3JpZ2luYWwgQXV0aG9yLCBMaWNlbnNvciBhbmQvb3IgQXR0cmlidXRpb24gUGFydGllcywgYXMgYXBwcm9wcmlhdGUsIG9mIFlvdSBvciBZb3VyIHVzZSBvZiB0aGUgCitXb3JrLCB3aXRob3V0IHRoZSBzZXBhcmF0ZSwgZXhwcmVzcyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIE9yaWdpbmFsIEF1dGhvciwgTGljZW5zb3IgYW5kL29yIEF0dHJpYnV0aW9uIFBhcnRpZXMuCisgICBjLiBFeGNlcHQgYXMgb3RoZXJ3aXNlIGFncmVlZCBpbiB3cml0aW5nIGJ5IHRoZSBMaWNlbnNvciBvciBhcyBtYXkgYmUgb3RoZXJ3aXNlIHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywgaWYgWW91IFJlcHJvZHVjZSwgRGlzdHJpYnV0ZSBvciAKK1B1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgZWl0aGVyIGJ5IGl0c2VsZiBvciBhcyBwYXJ0IG9mIGFueSBBZGFwdGF0aW9ucyBvciBDb2xsZWN0aW9ucywgWW91IG11c3Qgbm90IGRpc3RvcnQsIG11dGlsYXRlLCBtb2RpZnkgb3IgdGFrZSBvdGhlciAKK2Rlcm9nYXRvcnkgYWN0aW9uIGluIHJlbGF0aW9uIHRvIHRoZSBXb3JrIHdoaWNoIHdvdWxkIGJlIHByZWp1ZGljaWFsIHRvIHRoZSBPcmlnaW5hbCBBdXRob3IncyBob25vciBvciByZXB1dGF0aW9uLiBMaWNlbnNvciBhZ3JlZXMgdGhhdCBpbiB0aG9zZSAKK2p1cmlzZGljdGlvbnMgKGUuZy4gSmFwYW4pLCBpbiB3aGljaCBhbnkgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0IGdyYW50ZWQgaW4gU2VjdGlvbiAzKGIpIG9mIHRoaXMgTGljZW5zZSAodGhlIHJpZ2h0IHRvIG1ha2UgQWRhcHRhdGlvbnMpIHdvdWxkIGJlIGRlZW1lZCAKK3RvIGJlIGEgZGlzdG9ydGlvbiwgbXV0aWxhdGlvbiwgbW9kaWZpY2F0aW9uIG9yIG90aGVyIGRlcm9nYXRvcnkgYWN0aW9uIHByZWp1ZGljaWFsIHRvIHRoZSBPcmlnaW5hbCBBdXRob3IncyBob25vciBhbmQgcmVwdXRhdGlvbiwgdGhlIExpY2Vuc29yIHdpbGwgCit3YWl2ZSBvciBub3QgYXNzZXJ0LCBhcyBhcHByb3ByaWF0ZSwgdGhpcyBTZWN0aW9uLCB0byB0aGUgZnVsbGVzdCBleHRlbnQgcGVybWl0dGVkIGJ5IHRoZSBhcHBsaWNhYmxlIG5hdGlvbmFsIGxhdywgdG8gZW5hYmxlIFlvdSB0byByZWFzb25hYmx5IGV4ZXJjaXNlIAorWW91ciByaWdodCB1bmRlciBTZWN0aW9uIDMoYikgb2YgdGhpcyBMaWNlbnNlIChyaWdodCB0byBtYWtlIEFkYXB0YXRpb25zKSBidXQgbm90IG90aGVyd2lzZS4KKworNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK1VOTEVTUyBPVEhFUldJU0UgTVVUVUFMTFkgQUdSRUVEIFRPIEJZIFRIRSBQQVJUSUVTIElOIFdSSVRJTkcsIExJQ0VOU09SIE9GRkVSUyBUSEUgV09SSyBBUy1JUyBBTkQgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgCitDT05DRVJOSU5HIFRIRSBXT1JLLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIAorUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCAKK0RJU0NPVkVSQUJMRS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gU1VDSCBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSAKK1NQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgCitPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBUZXJtaW5hdGlvbgorCisgICBhLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIAorZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgQWRhcHRhdGlvbnMgb3IgQ29sbGVjdGlvbnMgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCAKK2luZGl2aWR1YWxzIG9yIGVudGl0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCisgICBiLiBTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLiAKK05vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyAKK3Byb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCAKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKworOC4gTWlzY2VsbGFuZW91cworCisgICBhLiBFYWNoIHRpbWUgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3Rpb24sIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgCit0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCisgICBiLiBFYWNoIHRpbWUgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSBhbiBBZGFwdGF0aW9uLCBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIG9yaWdpbmFsIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIAorY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCisgICBjLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSAKK3JlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gCitleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorICAgZC4gTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgCitzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorICAgZS4gVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyAKK29yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55IGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IAorY29tbXVuaWNhdGlvbiBmcm9tIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorICAgZi4gVGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyLCBhbmQgdGhlIHN1YmplY3QgbWF0dGVyIHJlZmVyZW5jZWQsIGluIHRoaXMgTGljZW5zZSB3ZXJlIGRyYWZ0ZWQgdXRpbGl6aW5nIHRoZSB0ZXJtaW5vbG9neSBvZiB0aGUgQmVybmUgQ29udmVudGlvbiBmb3IgCit0aGUgUHJvdGVjdGlvbiBvZiBMaXRlcmFyeSBhbmQgQXJ0aXN0aWMgV29ya3MgKGFzIGFtZW5kZWQgb24gU2VwdGVtYmVyIDI4LCAxOTc5KSwgdGhlIFJvbWUgQ29udmVudGlvbiBvZiAxOTYxLCB0aGUgV0lQTyBDb3B5cmlnaHQgVHJlYXR5IG9mIDE5OTYsIHRoZSAKK1dJUE8gUGVyZm9ybWFuY2VzIGFuZCBQaG9ub2dyYW1zIFRyZWF0eSBvZiAxOTk2IGFuZCB0aGUgVW5pdmVyc2FsIENvcHlyaWdodCBDb252ZW50aW9uIChhcyByZXZpc2VkIG9uIEp1bHkgMjQsIDE5NzEpLiBUaGVzZSByaWdodHMgYW5kIHN1YmplY3QgbWF0dGVyIAordGFrZSBlZmZlY3QgaW4gdGhlIHJlbGV2YW50IGp1cmlzZGljdGlvbiBpbiB3aGljaCB0aGUgTGljZW5zZSB0ZXJtcyBhcmUgc291Z2h0IHRvIGJlIGVuZm9yY2VkIGFjY29yZGluZyB0byB0aGUgY29ycmVzcG9uZGluZyBwcm92aXNpb25zIG9mIHRoZSAKK2ltcGxlbWVudGF0aW9uIG9mIHRob3NlIHRyZWF0eSBwcm92aXNpb25zIGluIHRoZSBhcHBsaWNhYmxlIG5hdGlvbmFsIGxhdy4gSWYgdGhlIHN0YW5kYXJkIHN1aXRlIG9mIHJpZ2h0cyBncmFudGVkIHVuZGVyIGFwcGxpY2FibGUgY29weXJpZ2h0IGxhdyAKK2luY2x1ZGVzIGFkZGl0aW9uYWwgcmlnaHRzIG5vdCBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSwgc3VjaCBhZGRpdGlvbmFsIHJpZ2h0cyBhcmUgZGVlbWVkIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBMaWNlbnNlOyB0aGlzIExpY2Vuc2UgaXMgbm90IAoraW50ZW5kZWQgdG8gcmVzdHJpY3QgdGhlIGxpY2Vuc2Ugb2YgYW55IHJpZ2h0cyB1bmRlciBhcHBsaWNhYmxlIGxhdy4KKworICAgIENyZWF0aXZlIENvbW1vbnMgTm90aWNlCisKKyAgICBDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSAKK3RvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIAorZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIAordGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworICAgIEV4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgQ3JlYXRpdmUgQ29tbW9ucyBkb2VzIG5vdCBhdXRob3JpemUgdGhlIHVzZSBieSAKK2VpdGhlciBwYXJ0eSBvZiB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSAKK0NvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnMnIHRoZW4tY3VycmVudCB0cmFkZW1hcmsgdXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciAKK290aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB0aGlzIHRyYWRlbWFyayByZXN0cmljdGlvbiBkb2VzIG5vdCBmb3JtIHBhcnQgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvQ0NQTC1BdHRyaWJ1dGlvbi1Ob0Rlcml2cy0yLjUgYi9saWNlbnNlcy9DQ1BMLUF0dHJpYnV0aW9uLU5vRGVyaXZzLTIuNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTU3ZmYwCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvQ0NQTC1BdHRyaWJ1dGlvbi1Ob0Rlcml2cy0yLjUKQEAgLTAsMCArMSw2MSBAQAorQXR0cmlidXRpb24tTm9EZXJpdnMgMi41CitDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTiBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCisKK0xpY2Vuc2UKKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4gQ09OU0lERVJBVElPTiBPRiBZT1VSIEFDQ0VQVEFOQ0UgT0YgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworMS4gRGVmaW5pdGlvbnMKKworICAgMS4gIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLCBjb25zdGl0dXRpbmcgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzIGRlZmluZWQgYmVsb3cpIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLgorICAgMi4gIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24sIG11c2ljYWwgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIG9yIHNvdW5kIHJlY29yZGluZywgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlICgic3luY2hpbmciKSB3aWxsIGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyAgIDMuICJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisgICA0LiAiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuCisgICA1LiAiV29yayIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyAgIDYuICJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisKKzIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCisgICAxLiB0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3RpdmUgV29ya3M7CisgICAyLiB0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbyB0cmFuc21pc3Npb24gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aXZlIFdvcmtzLgorICAgMy4KKworICAgICAgRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSB3b3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbjoKKyAgICAgICAgIDEuIFBlcmZvcm1hbmNlIFJveWFsdGllcyBVbmRlciBCbGFua2V0IExpY2Vuc2VzLiBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZSByaWdodHMgc29jaWV0eSAoZS5nLiBBU0NBUCwgQk1JLCBTRVNBQyksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBwZXJmb3JtYW5jZSBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yay4KKyAgICAgICAgIDIuIE1lY2hhbmljYWwgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBtdXNpYyByaWdodHMgc29jaWV0eSBvciBkZXNpZ25hdGVkIGFnZW50IChlLmcuIEhhcnJ5IEZveCBBZ2VuY3kpLCByb3lhbHRpZXMgZm9yIGFueSBwaG9ub3JlY29yZCBZb3UgY3JlYXRlIGZyb20gdGhlIFdvcmsgKCJjb3ZlciB2ZXJzaW9uIikgYW5kIGRpc3RyaWJ1dGUsIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNSBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucykuCisgICA0LiBXZWJjYXN0aW5nIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgc291bmQgcmVjb3JkaW5nLCBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZS1yaWdodHMgc29jaWV0eSAoZS5nLiBTb3VuZEV4Y2hhbmdlKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmssIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNCBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucykuCisKK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLCBidXQgb3RoZXJ3aXNlIHlvdSBoYXZlIG5vIHJpZ2h0cyB0byBtYWtlIERlcml2YXRpdmUgV29ya3MuIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQuCisKKzQuIFJlc3RyaWN0aW9ucy5UaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCisgICAxLiBZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiB0aGUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgY2xhdXNlIDQoYiksIGFzIHJlcXVlc3RlZC4KKyAgIDIuIElmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBDb2xsZWN0aXZlIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBwcm92aWRlLCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmc6IChpKSB0aGUgbmFtZSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIChvciBwc2V1ZG9ueW0sIGlmIGFwcGxpY2FibGUpIGlmIHN1cHBsaWVkLCBhbmQvb3IgKGlpKSBpZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGFuZC9vciBMaWNlbnNvciBkZXNpZ25hdGUgYW5vdGhlciBwYXJ0eSBvciBwYXJ0aWVzIChlLmcuIGEgc3BvbnNvciBpbnN0aXR1dGUsIHB1Ymxpc2hpbmcgZW50aXR5LCBqb3VybmFsKSBmb3IgYXR0cmlidXRpb24gaW4gTGljZW5zb3IncyBjb3B5cmlnaHQgbm90aWNlLCB0ZXJtcyBvZiBzZXJ2aWNlIG9yIGJ5IG90aGVyIHJlYXNvbmFibGUgbWVhbnMsIHRoZSBuYW1lIG9mIHN1Y2ggcGFydHkgb3IgcGFydGllczsgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmIHN1cHBsaWVkOyBhbmQgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyLCBpZiBhbnksIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yaywgdW5sZXNzIHN1Y2ggVVJJIGRvZXMgbm90IHJlZmVyIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcmsuIFN1Y2ggY3JlZGl0IG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC4KKworNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK1VOTEVTUyBPVEhFUldJU0UgTVVUVUFMTFkgQUdSRUVEIFRPIEJZIFRIRSBQQVJUSUVTIElOIFdSSVRJTkcsIExJQ0VOU09SIE9GRkVSUyBUSEUgV09SSyBBUy1JUyBBTkQgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgTUFURVJJQUxTLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gVGVybWluYXRpb24KKworICAgMS4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KKyAgIDIuIFN1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorCis4LiBNaXNjZWxsYW5lb3VzCisKKyAgIDEuIEVhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCisgICAyLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCisgICAzLiBObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorICAgNC4gVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCisKK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9ucycgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9saWNlbnNlcy9DQ1BMLUF0dHJpYnV0aW9uLU5vRGVyaXZzLTMuMCBiL2xpY2Vuc2VzL0NDUEwtQXR0cmlidXRpb24tTm9EZXJpdnMtMy4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI5ZDNjZTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9DQ1BMLUF0dHJpYnV0aW9uLU5vRGVyaXZzLTMuMApAQCAtMCwwICsxLDI5MSBAQAorQXR0cmlidXRpb24tTm9EZXJpdnMgMy4wIFVucG9ydGVkCisKKyAgICBDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFCisgICAgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOCisgICAgQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTCisgICAgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTCisgICAgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SCisgICAgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorCitMaWNlbnNlCisKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRQorQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWQorQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUgV09SSyBPVEhFUiBUSEFOIEFTCitBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRQorVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVE8gVEhFIEVYVEVOVCBUSElTIExJQ0VOU0UgTUFZCitCRSBDT05TSURFUkVEIFRPIEJFIEEgQ09OVFJBQ1QsIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMKK0NPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5ECitDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisgYS4gIkFkYXB0YXRpb24iIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrLCBvciB1cG9uIHRoZSBXb3JrIGFuZAorICAgIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBhZGFwdGF0aW9uLAorICAgIGRlcml2YXRpdmUgd29yaywgYXJyYW5nZW1lbnQgb2YgbXVzaWMgb3Igb3RoZXIgYWx0ZXJhdGlvbnMgb2YgYQorICAgIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmssIG9yIHBob25vZ3JhbSBvciBwZXJmb3JtYW5jZSBhbmQgaW5jbHVkZXMKKyAgICBjaW5lbWF0b2dyYXBoaWMgYWRhcHRhdGlvbnMgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlCisgICAgcmVjYXN0LCB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCBpbmNsdWRpbmcgaW4gYW55IGZvcm0gcmVjb2duaXphYmx5CisgICAgZGVyaXZlZCBmcm9tIHRoZSBvcmlnaW5hbCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYQorICAgIENvbGxlY3Rpb24gd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIGZvciB0aGUgcHVycG9zZSBvZgorICAgIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbAorICAgIHdvcmssIHBlcmZvcm1hbmNlIG9yIHBob25vZ3JhbSwgdGhlIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbgorICAgIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKCJzeW5jaGluZyIpIHdpbGwgYmUgY29uc2lkZXJlZCBhbgorICAgIEFkYXB0YXRpb24gZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyBiLiAiQ29sbGVjdGlvbiIgbWVhbnMgYSBjb2xsZWN0aW9uIG9mIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmtzLCBzdWNoIGFzCisgICAgZW5jeWNsb3BlZGlhcyBhbmQgYW50aG9sb2dpZXMsIG9yIHBlcmZvcm1hbmNlcywgcGhvbm9ncmFtcyBvcgorICAgIGJyb2FkY2FzdHMsIG9yIG90aGVyIHdvcmtzIG9yIHN1YmplY3QgbWF0dGVyIG90aGVyIHRoYW4gd29ya3MgbGlzdGVkCisgICAgaW4gU2VjdGlvbiAxKGYpIGJlbG93LCB3aGljaCwgYnkgcmVhc29uIG9mIHRoZSBzZWxlY3Rpb24gYW5kCisgICAgYXJyYW5nZW1lbnQgb2YgdGhlaXIgY29udGVudHMsIGNvbnN0aXR1dGUgaW50ZWxsZWN0dWFsIGNyZWF0aW9ucywgaW4KKyAgICB3aGljaCB0aGUgV29yayBpcyBpbmNsdWRlZCBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtIGFsb25nCisgICAgd2l0aCBvbmUgb3IgbW9yZSBvdGhlciBjb250cmlidXRpb25zLCBlYWNoIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQKKyAgICBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCB3aGljaCB0b2dldGhlciBhcmUgYXNzZW1ibGVkIGludG8gYQorICAgIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGlvbiB3aWxsIG5vdCBiZQorICAgIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiAoYXMgZGVmaW5lZCBhYm92ZSkgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzCisgICAgTGljZW5zZS4KKyBjLiAiRGlzdHJpYnV0ZSIgbWVhbnMgdG8gbWFrZSBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyB0aGUgb3JpZ2luYWwgYW5kCisgICAgY29waWVzIG9mIHRoZSBXb3JrIHRocm91Z2ggc2FsZSBvciBvdGhlciB0cmFuc2ZlciBvZiBvd25lcnNoaXAuCisgZC4gIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCwgaW5kaXZpZHVhbHMsIGVudGl0eSBvciBlbnRpdGllcyB0aGF0CisgICAgb2ZmZXIocykgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyBlLiAiT3JpZ2luYWwgQXV0aG9yIiBtZWFucywgaW4gdGhlIGNhc2Ugb2YgYSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrLAorICAgIHRoZSBpbmRpdmlkdWFsLCBpbmRpdmlkdWFscywgZW50aXR5IG9yIGVudGl0aWVzIHdobyBjcmVhdGVkIHRoZSBXb3JrCisgICAgb3IgaWYgbm8gaW5kaXZpZHVhbCBvciBlbnRpdHkgY2FuIGJlIGlkZW50aWZpZWQsIHRoZSBwdWJsaXNoZXI7IGFuZCBpbgorICAgIGFkZGl0aW9uIChpKSBpbiB0aGUgY2FzZSBvZiBhIHBlcmZvcm1hbmNlIHRoZSBhY3RvcnMsIHNpbmdlcnMsCisgICAgbXVzaWNpYW5zLCBkYW5jZXJzLCBhbmQgb3RoZXIgcGVyc29ucyB3aG8gYWN0LCBzaW5nLCBkZWxpdmVyLCBkZWNsYWltLAorICAgIHBsYXkgaW4sIGludGVycHJldCBvciBvdGhlcndpc2UgcGVyZm9ybSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrcyBvcgorICAgIGV4cHJlc3Npb25zIG9mIGZvbGtsb3JlOyAoaWkpIGluIHRoZSBjYXNlIG9mIGEgcGhvbm9ncmFtIHRoZSBwcm9kdWNlcgorICAgIGJlaW5nIHRoZSBwZXJzb24gb3IgbGVnYWwgZW50aXR5IHdobyBmaXJzdCBmaXhlcyB0aGUgc291bmRzIG9mIGEKKyAgICBwZXJmb3JtYW5jZSBvciBvdGhlciBzb3VuZHM7IGFuZCwgKGlpaSkgaW4gdGhlIGNhc2Ugb2YgYnJvYWRjYXN0cywgdGhlCisgICAgb3JnYW5pemF0aW9uIHRoYXQgdHJhbnNtaXRzIHRoZSBicm9hZGNhc3QuCisgZi4gIldvcmsiIG1lYW5zIHRoZSBsaXRlcmFyeSBhbmQvb3IgYXJ0aXN0aWMgd29yayBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcworICAgIG9mIHRoaXMgTGljZW5zZSBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBwcm9kdWN0aW9uIGluIHRoZQorICAgIGxpdGVyYXJ5LCBzY2llbnRpZmljIGFuZCBhcnRpc3RpYyBkb21haW4sIHdoYXRldmVyIG1heSBiZSB0aGUgbW9kZSBvcgorICAgIGZvcm0gb2YgaXRzIGV4cHJlc3Npb24gaW5jbHVkaW5nIGRpZ2l0YWwgZm9ybSwgc3VjaCBhcyBhIGJvb2ssCisgICAgcGFtcGhsZXQgYW5kIG90aGVyIHdyaXRpbmc7IGEgbGVjdHVyZSwgYWRkcmVzcywgc2VybW9uIG9yIG90aGVyIHdvcmsKKyAgICBvZiB0aGUgc2FtZSBuYXR1cmU7IGEgZHJhbWF0aWMgb3IgZHJhbWF0aWNvLW11c2ljYWwgd29yazsgYQorICAgIGNob3Jlb2dyYXBoaWMgd29yayBvciBlbnRlcnRhaW5tZW50IGluIGR1bWIgc2hvdzsgYSBtdXNpY2FsCisgICAgY29tcG9zaXRpb24gd2l0aCBvciB3aXRob3V0IHdvcmRzOyBhIGNpbmVtYXRvZ3JhcGhpYyB3b3JrIHRvIHdoaWNoIGFyZQorICAgIGFzc2ltaWxhdGVkIHdvcmtzIGV4cHJlc3NlZCBieSBhIHByb2Nlc3MgYW5hbG9nb3VzIHRvIGNpbmVtYXRvZ3JhcGh5OworICAgIGEgd29yayBvZiBkcmF3aW5nLCBwYWludGluZywgYXJjaGl0ZWN0dXJlLCBzY3VscHR1cmUsIGVuZ3JhdmluZyBvcgorICAgIGxpdGhvZ3JhcGh5OyBhIHBob3RvZ3JhcGhpYyB3b3JrIHRvIHdoaWNoIGFyZSBhc3NpbWlsYXRlZCB3b3JrcworICAgIGV4cHJlc3NlZCBieSBhIHByb2Nlc3MgYW5hbG9nb3VzIHRvIHBob3RvZ3JhcGh5OyBhIHdvcmsgb2YgYXBwbGllZAorICAgIGFydDsgYW4gaWxsdXN0cmF0aW9uLCBtYXAsIHBsYW4sIHNrZXRjaCBvciB0aHJlZS1kaW1lbnNpb25hbCB3b3JrCisgICAgcmVsYXRpdmUgdG8gZ2VvZ3JhcGh5LCB0b3BvZ3JhcGh5LCBhcmNoaXRlY3R1cmUgb3Igc2NpZW5jZTsgYQorICAgIHBlcmZvcm1hbmNlOyBhIGJyb2FkY2FzdDsgYSBwaG9ub2dyYW07IGEgY29tcGlsYXRpb24gb2YgZGF0YSB0byB0aGUKKyAgICBleHRlbnQgaXQgaXMgcHJvdGVjdGVkIGFzIGEgY29weXJpZ2h0YWJsZSB3b3JrOyBvciBhIHdvcmsgcGVyZm9ybWVkIGJ5CisgICAgYSB2YXJpZXR5IG9yIGNpcmN1cyBwZXJmb3JtZXIgdG8gdGhlIGV4dGVudCBpdCBpcyBub3Qgb3RoZXJ3aXNlCisgICAgY29uc2lkZXJlZCBhIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmsuCisgZy4gIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcworICAgIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGgKKyAgICByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZQorICAgIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzCisgICAgdmlvbGF0aW9uLgorIGguICJQdWJsaWNseSBQZXJmb3JtIiBtZWFucyB0byBwZXJmb3JtIHB1YmxpYyByZWNpdGF0aW9ucyBvZiB0aGUgV29yayBhbmQKKyAgICB0byBjb21tdW5pY2F0ZSB0byB0aGUgcHVibGljIHRob3NlIHB1YmxpYyByZWNpdGF0aW9ucywgYnkgYW55IG1lYW5zIG9yCisgICAgcHJvY2VzcywgaW5jbHVkaW5nIGJ5IHdpcmUgb3Igd2lyZWxlc3MgbWVhbnMgb3IgcHVibGljIGRpZ2l0YWwKKyAgICBwZXJmb3JtYW5jZXM7IHRvIG1ha2UgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgV29ya3MgaW4gc3VjaCBhIHdheSB0aGF0CisgICAgbWVtYmVycyBvZiB0aGUgcHVibGljIG1heSBhY2Nlc3MgdGhlc2UgV29ya3MgZnJvbSBhIHBsYWNlIGFuZCBhdCBhCisgICAgcGxhY2UgaW5kaXZpZHVhbGx5IGNob3NlbiBieSB0aGVtOyB0byBwZXJmb3JtIHRoZSBXb3JrIHRvIHRoZSBwdWJsaWMKKyAgICBieSBhbnkgbWVhbnMgb3IgcHJvY2VzcyBhbmQgdGhlIGNvbW11bmljYXRpb24gdG8gdGhlIHB1YmxpYyBvZiB0aGUKKyAgICBwZXJmb3JtYW5jZXMgb2YgdGhlIFdvcmssIGluY2x1ZGluZyBieSBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZTsgdG8KKyAgICBicm9hZGNhc3QgYW5kIHJlYnJvYWRjYXN0IHRoZSBXb3JrIGJ5IGFueSBtZWFucyBpbmNsdWRpbmcgc2lnbnMsCisgICAgc291bmRzIG9yIGltYWdlcy4KKyBpLiAiUmVwcm9kdWNlIiBtZWFucyB0byBtYWtlIGNvcGllcyBvZiB0aGUgV29yayBieSBhbnkgbWVhbnMgaW5jbHVkaW5nCisgICAgd2l0aG91dCBsaW1pdGF0aW9uIGJ5IHNvdW5kIG9yIHZpc3VhbCByZWNvcmRpbmdzIGFuZCB0aGUgcmlnaHQgb2YKKyAgICBmaXhhdGlvbiBhbmQgcmVwcm9kdWNpbmcgZml4YXRpb25zIG9mIHRoZSBXb3JrLCBpbmNsdWRpbmcgc3RvcmFnZSBvZiBhCisgICAgcHJvdGVjdGVkIHBlcmZvcm1hbmNlIG9yIHBob25vZ3JhbSBpbiBkaWdpdGFsIGZvcm0gb3Igb3RoZXIgZWxlY3Ryb25pYworICAgIG1lZGl1bS4KKworMi4gRmFpciBEZWFsaW5nIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLAorbGltaXQsIG9yIHJlc3RyaWN0IGFueSB1c2VzIGZyZWUgZnJvbSBjb3B5cmlnaHQgb3IgcmlnaHRzIGFyaXNpbmcgZnJvbQorbGltaXRhdGlvbnMgb3IgZXhjZXB0aW9ucyB0aGF0IGFyZSBwcm92aWRlZCBmb3IgaW4gY29ubmVjdGlvbiB3aXRoIHRoZQorY29weXJpZ2h0IHByb3RlY3Rpb24gdW5kZXIgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKzMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwKK0xpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsCitwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvCitleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKworIGEuIHRvIFJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZQorICAgIENvbGxlY3Rpb25zLCBhbmQgdG8gUmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUKKyAgICBDb2xsZWN0aW9uczsgYW5kLAorIGIuIHRvIERpc3RyaWJ1dGUgYW5kIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZAorICAgIGluIENvbGxlY3Rpb25zLgorIGMuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0OgorCisgICAgIGkuIE5vbi13YWl2YWJsZSBDb21wdWxzb3J5IExpY2Vuc2UgU2NoZW1lcy4gSW4gdGhvc2UganVyaXNkaWN0aW9ucyBpbgorICAgICAgICB3aGljaCB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgdGhyb3VnaCBhbnkgc3RhdHV0b3J5IG9yCisgICAgICAgIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZSBjYW5ub3QgYmUgd2FpdmVkLCB0aGUgTGljZW5zb3IKKyAgICAgICAgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0IHN1Y2ggcm95YWx0aWVzIGZvciBhbnkKKyAgICAgICAgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2U7CisgICAgaWkuIFdhaXZhYmxlIENvbXB1bHNvcnkgTGljZW5zZSBTY2hlbWVzLiBJbiB0aG9zZSBqdXJpc2RpY3Rpb25zIGluCisgICAgICAgIHdoaWNoIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IKKyAgICAgICAgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lIGNhbiBiZSB3YWl2ZWQsIHRoZSBMaWNlbnNvciB3YWl2ZXMgdGhlCisgICAgICAgIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0IHN1Y2ggcm95YWx0aWVzIGZvciBhbnkgZXhlcmNpc2UgYnkgWW91CisgICAgICAgIG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2U7IGFuZCwKKyAgIGlpaS4gVm9sdW50YXJ5IExpY2Vuc2UgU2NoZW1lcy4gVGhlIExpY2Vuc29yIHdhaXZlcyB0aGUgcmlnaHQgdG8KKyAgICAgICAgY29sbGVjdCByb3lhbHRpZXMsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yLCBpbiB0aGUgZXZlbnQgdGhhdCB0aGUKKyAgICAgICAgTGljZW5zb3IgaXMgYSBtZW1iZXIgb2YgYSBjb2xsZWN0aW5nIHNvY2lldHkgdGhhdCBhZG1pbmlzdGVycworICAgICAgICB2b2x1bnRhcnkgbGljZW5zaW5nIHNjaGVtZXMsIHZpYSB0aGF0IHNvY2lldHksIGZyb20gYW55IGV4ZXJjaXNlCisgICAgICAgIGJ5IFlvdSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLgorCitUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93Citrbm93biBvciBoZXJlYWZ0ZXIgZGV2aXNlZC4gVGhlIGFib3ZlIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlCitzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluCitvdGhlciBtZWRpYSBhbmQgZm9ybWF0cywgYnV0IG90aGVyd2lzZSB5b3UgaGF2ZSBubyByaWdodHMgdG8gbWFrZQorQWRhcHRhdGlvbnMuIFN1YmplY3QgdG8gU2VjdGlvbiA4KGYpLCBhbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieQorTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZC4KKworNC4gUmVzdHJpY3Rpb25zLiBUaGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMyBhYm92ZSBpcyBleHByZXNzbHkgbWFkZQorc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworIGEuIFlvdSBtYXkgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zCisgICAgb2YgdGhpcyBMaWNlbnNlLiBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UKKyAgICBJZGVudGlmaWVyIChVUkkpIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgV29yayBZb3UKKyAgICBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMKKyAgICBvbiB0aGUgV29yayB0aGF0IHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIGFiaWxpdHkgb2YKKyAgICB0aGUgcmVjaXBpZW50IG9mIHRoZSBXb3JrIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCB0byB0aGF0CisgICAgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZS4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUKKyAgICBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQKKyAgICB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzIHdpdGggZXZlcnkgY29weSBvZiB0aGUgV29yayBZb3UKKyAgICBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0uIFdoZW4gWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkKKyAgICBQZXJmb3JtIHRoZSBXb3JrLCBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGVmZmVjdGl2ZSB0ZWNobm9sb2dpY2FsCisgICAgbWVhc3VyZXMgb24gdGhlIFdvcmsgdGhhdCByZXN0cmljdCB0aGUgYWJpbGl0eSBvZiBhIHJlY2lwaWVudCBvZiB0aGUKKyAgICBXb3JrIGZyb20gWW91IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCB0byB0aGF0IHJlY2lwaWVudCB1bmRlcgorICAgIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZS4gVGhpcyBTZWN0aW9uIDQoYSkgYXBwbGllcyB0byB0aGUgV29yayBhcworICAgIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3Rpb24sIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3Rpb24KKyAgICBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMKKyAgICBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGlvbiwgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91CisgICAgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3Rpb24gYW55IGNyZWRpdAorICAgIGFzIHJlcXVpcmVkIGJ5IFNlY3Rpb24gNChiKSwgYXMgcmVxdWVzdGVkLgorIGIuIElmIFlvdSBEaXN0cmlidXRlLCBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIG9yIENvbGxlY3Rpb25zLCBZb3UKKyAgICBtdXN0LCB1bmxlc3MgYSByZXF1ZXN0IGhhcyBiZWVuIG1hZGUgcHVyc3VhbnQgdG8gU2VjdGlvbiA0KGEpLCBrZWVwCisgICAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIHByb3ZpZGUsIHJlYXNvbmFibGUgdG8KKyAgICB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nOiAoaSkgdGhlIG5hbWUgb2YgdGhlIE9yaWdpbmFsCisgICAgQXV0aG9yIChvciBwc2V1ZG9ueW0sIGlmIGFwcGxpY2FibGUpIGlmIHN1cHBsaWVkLCBhbmQvb3IgaWYgdGhlCisgICAgT3JpZ2luYWwgQXV0aG9yIGFuZC9vciBMaWNlbnNvciBkZXNpZ25hdGUgYW5vdGhlciBwYXJ0eSBvciBwYXJ0aWVzCisgICAgKGUuZy4sIGEgc3BvbnNvciBpbnN0aXR1dGUsIHB1Ymxpc2hpbmcgZW50aXR5LCBqb3VybmFsKSBmb3IKKyAgICBhdHRyaWJ1dGlvbiAoIkF0dHJpYnV0aW9uIFBhcnRpZXMiKSBpbiBMaWNlbnNvcidzIGNvcHlyaWdodCBub3RpY2UsCisgICAgdGVybXMgb2Ygc2VydmljZSBvciBieSBvdGhlciByZWFzb25hYmxlIG1lYW5zLCB0aGUgbmFtZSBvZiBzdWNoIHBhcnR5CisgICAgb3IgcGFydGllczsgKGlpKSB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IChpaWkpIHRvIHRoZQorICAgIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUgVVJJLCBpZiBhbnksIHRoYXQgTGljZW5zb3IKKyAgICBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QKKyAgICByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrLgorICAgIFRoZSBjcmVkaXQgcmVxdWlyZWQgYnkgdGhpcyBTZWN0aW9uIDQoYikgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueQorICAgIHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhCisgICAgQ29sbGVjdGlvbiwgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyLCBpZiBhIGNyZWRpdCBmb3IgYWxsCisgICAgY29udHJpYnV0aW5nIGF1dGhvcnMgb2YgdGhlIENvbGxlY3Rpb24gYXBwZWFycywgdGhlbiBhcyBwYXJ0IG9mIHRoZXNlCisgICAgY3JlZGl0cyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHRoZSBjcmVkaXRzIGZvciB0aGUKKyAgICBvdGhlciBjb250cmlidXRpbmcgYXV0aG9ycy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIFlvdSBtYXkgb25seQorICAgIHVzZSB0aGUgY3JlZGl0IHJlcXVpcmVkIGJ5IHRoaXMgU2VjdGlvbiBmb3IgdGhlIHB1cnBvc2Ugb2YgYXR0cmlidXRpb24KKyAgICBpbiB0aGUgbWFubmVyIHNldCBvdXQgYWJvdmUgYW5kLCBieSBleGVyY2lzaW5nIFlvdXIgcmlnaHRzIHVuZGVyIHRoaXMKKyAgICBMaWNlbnNlLCBZb3UgbWF5IG5vdCBpbXBsaWNpdGx5IG9yIGV4cGxpY2l0bHkgYXNzZXJ0IG9yIGltcGx5IGFueQorICAgIGNvbm5lY3Rpb24gd2l0aCwgc3BvbnNvcnNoaXAgb3IgZW5kb3JzZW1lbnQgYnkgdGhlIE9yaWdpbmFsIEF1dGhvciwKKyAgICBMaWNlbnNvciBhbmQvb3IgQXR0cmlidXRpb24gUGFydGllcywgYXMgYXBwcm9wcmlhdGUsIG9mIFlvdSBvciBZb3VyCisgICAgdXNlIG9mIHRoZSBXb3JrLCB3aXRob3V0IHRoZSBzZXBhcmF0ZSwgZXhwcmVzcyBwcmlvciB3cml0dGVuCisgICAgcGVybWlzc2lvbiBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yLCBMaWNlbnNvciBhbmQvb3IgQXR0cmlidXRpb24KKyAgICBQYXJ0aWVzLgorIGMuIEV4Y2VwdCBhcyBvdGhlcndpc2UgYWdyZWVkIGluIHdyaXRpbmcgYnkgdGhlIExpY2Vuc29yIG9yIGFzIG1heSBiZQorICAgIG90aGVyd2lzZSBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsIGlmIFlvdSBSZXByb2R1Y2UsIERpc3RyaWJ1dGUgb3IKKyAgICBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIGVpdGhlciBieSBpdHNlbGYgb3IgYXMgcGFydCBvZiBhbnkKKyAgICBDb2xsZWN0aW9ucywgWW91IG11c3Qgbm90IGRpc3RvcnQsIG11dGlsYXRlLCBtb2RpZnkgb3IgdGFrZSBvdGhlcgorICAgIGRlcm9nYXRvcnkgYWN0aW9uIGluIHJlbGF0aW9uIHRvIHRoZSBXb3JrIHdoaWNoIHdvdWxkIGJlIHByZWp1ZGljaWFsCisgICAgdG8gdGhlIE9yaWdpbmFsIEF1dGhvcidzIGhvbm9yIG9yIHJlcHV0YXRpb24uCisKKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitVTkxFU1MgT1RIRVJXSVNFIE1VVFVBTExZIEFHUkVFRCBUTyBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HLCBMSUNFTlNPUgorT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkKK0tJTkQgQ09OQ0VSTklORyBUSEUgV09SSywgRVhQUkVTUywgSU1QTElFRCwgU1RBVFVUT1JZIE9SIE9USEVSV0lTRSwKK0lOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVElCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRgorTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLCBPUiBUSEUgUFJFU0VOQ0UgT0YgQUJTRU5DRSBPRiBFUlJPUlMsCitXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTgorT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUKK0xBVywgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SCitBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgRVhFTVBMQVJZIERBTUFHRVMKK0FSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLCBFVkVOIElGIExJQ0VOU09SIEhBUworQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRlcm1pbmF0aW9uCisKKyBhLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUKKyAgICBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyAgICBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBDb2xsZWN0aW9ucyBmcm9tIFlvdSB1bmRlcgorICAgIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkCisgICAgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGgKKyAgICB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueQorICAgIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KKyBiLiBTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlIGlzCisgICAgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuCisgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlCisgICAgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdAorICAgIGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvCisgICAgd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcworICAgIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcworICAgIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMKKyAgICBzdGF0ZWQgYWJvdmUuCisKKzguIE1pc2NlbGxhbmVvdXMKKworIGEuIEVhY2ggdGltZSBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGlvbiwKKyAgICB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lCisgICAgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorIGIuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorICAgIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZgorICAgIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24KKyAgICBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8KKyAgICB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kCisgICAgZW5mb3JjZWFibGUuCisgYy4gTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vCisgICAgYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nCisgICAgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCisgZC4gVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aAorICAgIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLAorICAgIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkCisgICAgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdAorICAgIG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlCisgICAgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4gYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorIGUuIFRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciwgYW5kIHRoZSBzdWJqZWN0IG1hdHRlciByZWZlcmVuY2VkLCBpbiB0aGlzCisgICAgTGljZW5zZSB3ZXJlIGRyYWZ0ZWQgdXRpbGl6aW5nIHRoZSB0ZXJtaW5vbG9neSBvZiB0aGUgQmVybmUgQ29udmVudGlvbgorICAgIGZvciB0aGUgUHJvdGVjdGlvbiBvZiBMaXRlcmFyeSBhbmQgQXJ0aXN0aWMgV29ya3MgKGFzIGFtZW5kZWQgb24KKyAgICBTZXB0ZW1iZXIgMjgsIDE5NzkpLCB0aGUgUm9tZSBDb252ZW50aW9uIG9mIDE5NjEsIHRoZSBXSVBPIENvcHlyaWdodAorICAgIFRyZWF0eSBvZiAxOTk2LCB0aGUgV0lQTyBQZXJmb3JtYW5jZXMgYW5kIFBob25vZ3JhbXMgVHJlYXR5IG9mIDE5OTYKKyAgICBhbmQgdGhlIFVuaXZlcnNhbCBDb3B5cmlnaHQgQ29udmVudGlvbiAoYXMgcmV2aXNlZCBvbiBKdWx5IDI0LCAxOTcxKS4KKyAgICBUaGVzZSByaWdodHMgYW5kIHN1YmplY3QgbWF0dGVyIHRha2UgZWZmZWN0IGluIHRoZSByZWxldmFudAorICAgIGp1cmlzZGljdGlvbiBpbiB3aGljaCB0aGUgTGljZW5zZSB0ZXJtcyBhcmUgc291Z2h0IHRvIGJlIGVuZm9yY2VkCisgICAgYWNjb3JkaW5nIHRvIHRoZSBjb3JyZXNwb25kaW5nIHByb3Zpc2lvbnMgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mCisgICAgdGhvc2UgdHJlYXR5IHByb3Zpc2lvbnMgaW4gdGhlIGFwcGxpY2FibGUgbmF0aW9uYWwgbGF3LiBJZiB0aGUKKyAgICBzdGFuZGFyZCBzdWl0ZSBvZiByaWdodHMgZ3JhbnRlZCB1bmRlciBhcHBsaWNhYmxlIGNvcHlyaWdodCBsYXcKKyAgICBpbmNsdWRlcyBhZGRpdGlvbmFsIHJpZ2h0cyBub3QgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UsIHN1Y2gKKyAgICBhZGRpdGlvbmFsIHJpZ2h0cyBhcmUgZGVlbWVkIHRvIGJlIGluY2x1ZGVkIGluIHRoZSBMaWNlbnNlOyB0aGlzCisgICAgTGljZW5zZSBpcyBub3QgaW50ZW5kZWQgdG8gcmVzdHJpY3QgdGhlIGxpY2Vuc2Ugb2YgYW55IHJpZ2h0cyB1bmRlcgorICAgIGFwcGxpY2FibGUgbGF3LgorCisKK0NyZWF0aXZlIENvbW1vbnMgTm90aWNlCisKKyAgICBDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5CisgICAgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUKKyAgICBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcworICAgIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsCisgICAgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMKKyAgICBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUKKyAgICBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQKKyAgICBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCisgICAgRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZQorICAgIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIENyZWF0aXZlIENvbW1vbnMgZG9lcyBub3QgYXV0aG9yaXplCisgICAgdGhlIHVzZSBieSBlaXRoZXIgcGFydHkgb2YgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55CisgICAgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yCisgICAgd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueSBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4KKyAgICBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9ucycgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZQorICAgIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUKKyAgICBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwKKyAgICB0aGlzIHRyYWRlbWFyayByZXN0cmljdGlvbiBkb2VzIG5vdCBmb3JtIHBhcnQgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0NDUEwtQXR0cmlidXRpb24tTm9uQ29tbWVyY2lhbC1Ob0Rlcml2cy0yLjAgYi9saWNlbnNlcy9DQ1BMLUF0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwtTm9EZXJpdnMtMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNTU0M2IKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9DQ1BMLUF0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwtTm9EZXJpdnMtMi4wCkBAIC0wLDAgKzEsMjQxIEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzFdQ3JlYXRpdmUgQ29tbW9ucworCisgICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGl2ZSBDb21tb25zIExlZ2FsIENvZGUKKworICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwtTm9EZXJpdnMgMi4wCisgICBDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFCisgICBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgTElDRU5TRSBET0VTIE5PVCBDUkVBVEUgQU4KKyAgIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUworICAgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTCisgICBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IKKyAgIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KKworICAgTGljZW5zZQorCisgICBUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMKKyAgIENSRUFUSVZFIENPTU1PTlMgUFVCTElDIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUworICAgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFCisgICBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgT1IgQ09QWVJJR0hUIExBVyBJUworICAgUFJPSElCSVRFRC4KKworICAgQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5ECisgICBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTCisgICBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRgorICAgU1VDSCBURVJNUyBBTkQgQ09ORElUSU9OUy4KKworICAgMS4gRGVmaW5pdGlvbnMKKyAgICBhLiAiQ29sbGVjdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmssIHN1Y2ggYXMgYSBwZXJpb2RpY2FsIGlzc3VlLAorICAgICAgIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbgorICAgICAgIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLAorICAgICAgIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgYXJlCisgICAgICAgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhCisgICAgICAgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzCisgICAgICAgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisgICAgYi4gIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUKKyAgICAgICBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgbXVzaWNhbAorICAgICAgIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZQorICAgICAgIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwKKyAgICAgICBjb25kZW5zYXRpb24sIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsCisgICAgICAgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEKKyAgICAgICBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlCisgICAgICAgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUKKyAgICAgICBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbiBvciBzb3VuZCByZWNvcmRpbmcsIHRoZQorICAgICAgIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlCisgICAgICAgKCJzeW5jaGluZyIpIHdpbGwgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2UKKyAgICAgICBvZiB0aGlzIExpY2Vuc2UuCisgICAgYy4gIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsKKyAgICAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorICAgIGQuICJPcmlnaW5hbCBBdXRob3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB3aG8gY3JlYXRlZCB0aGUKKyAgICAgICBXb3JrLgorICAgIGUuICJXb3JrIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlcgorICAgICAgIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisgICAgZi4gIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcworICAgICAgIExpY2Vuc2Ugd2hvIGhhcyBub3QgcHJldmlvdXNseSB2aW9sYXRlZCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlCisgICAgICAgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbgorICAgICAgIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhCisgICAgICAgcHJldmlvdXMgdmlvbGF0aW9uLgorCisgICAyLiBGYWlyIFVzZSBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwKKyAgIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmlyc3Qgc2FsZSBvcgorICAgb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlcgorICAgY29weXJpZ2h0IGxhdyBvciBvdGhlciBhcHBsaWNhYmxlIGxhd3MuCisKKyAgIDMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwKKyAgIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsCisgICBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvCisgICBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKyAgICBhLiB0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUKKyAgICAgICBDb2xsZWN0aXZlIFdvcmtzLCBhbmQgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUKKyAgICAgICBDb2xsZWN0aXZlIFdvcmtzOworICAgIGIuIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybQorICAgICAgIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8KKyAgICAgICB0cmFuc21pc3Npb24gdGhlIFdvcmsgaW5jbHVkaW5nIGFzIGluY29ycG9yYXRlZCBpbiBDb2xsZWN0aXZlCisgICAgICAgV29ya3M7CisKKyAgIFRoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cKKyAgIGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2UKKyAgIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMKKyAgIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLCBidXQgb3RoZXJ3aXNlIHlvdSBoYXZlIG5vIHJpZ2h0cyB0byBtYWtlCisgICBEZXJpdmF0aXZlIFdvcmtzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUKKyAgIGhlcmVieSByZXNlcnZlZCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbgorICAgU2VjdGlvbnMgNChkKSBhbmQgNChlKS4KKworICAgNC4gUmVzdHJpY3Rpb25zLlRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseQorICAgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorICAgIGEuIFlvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IKKyAgICAgICBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzCisgICAgICAgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZQorICAgICAgIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZQorICAgICAgIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yCisgICAgICAgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMKKyAgICAgICBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IKKyAgICAgICB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heQorICAgICAgIG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0CisgICAgICAgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5CisgICAgICAgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5CisgICAgICAgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0CisgICAgICAgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoCisgICAgICAgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrCisgICAgICAgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlCisgICAgICAgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QKKyAgICAgICB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLAorICAgICAgIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLAorICAgICAgIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yCisgICAgICAgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLgorICAgIGIuIFlvdSBtYXkgbm90IGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGluIFNlY3Rpb24gMworICAgICAgIGFib3ZlIGluIGFueSBtYW5uZXIgdGhhdCBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkCisgICAgICAgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLiBUaGUKKyAgICAgICBleGNoYW5nZSBvZiB0aGUgV29yayBmb3Igb3RoZXIgY29weXJpZ2h0ZWQgd29ya3MgYnkgbWVhbnMgb2YKKyAgICAgICBkaWdpdGFsIGZpbGUtc2hhcmluZyBvciBvdGhlcndpc2Ugc2hhbGwgbm90IGJlIGNvbnNpZGVyZWQgdG8gYmUKKyAgICAgICBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUKKyAgICAgICBtb25ldGFyeSBjb21wZW5zYXRpb24sIHByb3ZpZGVkIHRoZXJlIGlzIG5vIHBheW1lbnQgb2YgYW55CisgICAgICAgbW9uZXRhcnkgY29tcGVuc2F0aW9uIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgZXhjaGFuZ2Ugb2YKKyAgICAgICBjb3B5cmlnaHRlZCB3b3Jrcy4KKyAgICBjLiBJZiB5b3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkKKyAgICAgICBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yaywgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodAorICAgICAgIG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZCBnaXZlIHRoZSBPcmlnaW5hbCBBdXRob3IgY3JlZGl0CisgICAgICAgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nIGJ5IGNvbnZleWluZworICAgICAgIHRoZSBuYW1lIChvciBwc2V1ZG9ueW0gaWYgYXBwbGljYWJsZSkgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciBpZgorICAgICAgIHN1cHBsaWVkOyB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IGFuZCB0byB0aGUgZXh0ZW50CisgICAgICAgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciwgaWYgYW55LAorICAgICAgIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yaywgdW5sZXNzCisgICAgICAgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nCisgICAgICAgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55CisgICAgICAgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEKKyAgICAgICBDb2xsZWN0aXZlIFdvcmssIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciB3aGVyZSBhbnkKKyAgICAgICBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0IGFwcGVhcnMgYW5kIGluIGEgbWFubmVyIGF0CisgICAgICAgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdC4KKyAgICBkLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsCisgICAgICAgY29tcG9zaXRpb246CisgICAgICAgICBpLiBQZXJmb3JtYW5jZSBSb3lhbHRpZXMgVW5kZXIgQmxhbmtldCBMaWNlbnNlcy4gTGljZW5zb3IKKyAgICAgICAgICAgIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkKKyAgICAgICAgICAgIG9yIHZpYSBhIHBlcmZvcm1hbmNlIHJpZ2h0cyBzb2NpZXR5IChlLmcuIEFTQ0FQLCBCTUksIFNFU0FDKSwKKyAgICAgICAgICAgIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBwZXJmb3JtYW5jZSBvciBwdWJsaWMgZGlnaXRhbAorICAgICAgICAgICAgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmsgaWYgdGhhdCBwZXJmb3JtYW5jZSBpcworICAgICAgICAgICAgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbAorICAgICAgICAgICAgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLgorICAgICAgICBpaS4gTWVjaGFuaWNhbCBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIExpY2Vuc29yIHJlc2VydmVzCisgICAgICAgICAgICB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhCisgICAgICAgICAgICBtdXNpYyByaWdodHMgYWdlbmN5IG9yIGRlc2lnbmF0ZWQgYWdlbnQgKGUuZy4gSGFycnkgRm94CisgICAgICAgICAgICBBZ2VuY3kpLCByb3lhbHRpZXMgZm9yIGFueSBwaG9ub3JlY29yZCBZb3UgY3JlYXRlIGZyb20gdGhlCisgICAgICAgICAgICBXb3JrICgiY292ZXIgdmVyc2lvbiIpIGFuZCBkaXN0cmlidXRlLCBzdWJqZWN0IHRvIHRoZQorICAgICAgICAgICAgY29tcHVsc29yeSBsaWNlbnNlIGNyZWF0ZWQgYnkgMTcgVVNDIFNlY3Rpb24gMTE1IG9mIHRoZSBVUworICAgICAgICAgICAgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucyksIGlmCisgICAgICAgICAgICBZb3VyIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGNvdmVyIHZlcnNpb24gaXMgcHJpbWFyaWx5IGludGVuZGVkCisgICAgICAgICAgICBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUKKyAgICAgICAgICAgIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4KKyAgICBlLiBXZWJjYXN0aW5nIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YKKyAgICAgICBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBzb3VuZCByZWNvcmRpbmcsIExpY2Vuc29yIHJlc2VydmVzIHRoZQorICAgICAgIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYQorICAgICAgIHBlcmZvcm1hbmNlLXJpZ2h0cyBzb2NpZXR5IChlLmcuIFNvdW5kRXhjaGFuZ2UpLCByb3lhbHRpZXMgZm9yIHRoZQorICAgICAgIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLCBzdWJqZWN0IHRvCisgICAgICAgdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNCBvZiB0aGUgVVMKKyAgICAgICBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKSwgaWYgWW91cgorICAgICAgIHB1YmxpYyBkaWdpdGFsIHBlcmZvcm1hbmNlIGlzIHByaW1hcmlseSBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQKKyAgICAgICB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCisKKyAgIDUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCisgICBVTkxFU1MgT1RIRVJXSVNFIE1VVFVBTExZIEFHUkVFRCBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HLCBMSUNFTlNPUgorICAgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRgorICAgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgV09SSywgRVhQUkVTUywgSU1QTElFRCwgU1RBVFVUT1JZIE9SCisgICBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLAorICAgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUgorICAgVEhFIEFCU0VOQ0UgT0YgTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLCBPUiBUSEUgUFJFU0VOQ0UgT0YKKyAgIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETworICAgTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkKKyAgIE5PVCBBUFBMWSBUTyBZT1UuCisKKyAgIDYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWQorICAgQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkKKyAgIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SCisgICBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywKKyAgIEVWRU4gSUYgTElDRU5TT1IgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisgICA3LiBUZXJtaW5hdGlvbgorICAgIGEuIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZQorICAgICAgIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorICAgICAgIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkIENvbGxlY3RpdmUgV29ya3MgZnJvbQorICAgICAgIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMKKyAgICAgICB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwKKyAgICAgICBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwKKyAgICAgICBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCisgICAgYi4gU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQKKyAgICAgICBoZXJlIGlzIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4KKyAgICAgICB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodAorICAgICAgIHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcAorICAgICAgIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaAorICAgICAgIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyCisgICAgICAgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUKKyAgICAgICB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbAorICAgICAgIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorCisgICA4LiBNaXNjZWxsYW5lb3VzCisgICAgYS4gRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yCisgICAgICAgYSBDb2xsZWN0aXZlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UKKyAgICAgICB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZQorICAgICAgIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KKyAgICBiLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKKyAgICAgICBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkKKyAgICAgICBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIKKyAgICAgICBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlCisgICAgICAgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uCisgICAgICAgdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorICAgIGMuIE5vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubworICAgICAgIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4KKyAgICAgICB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvcgorICAgICAgIGNvbnNlbnQuCisgICAgZC4gVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMKKyAgICAgICB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vCisgICAgICAgdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUKKyAgICAgICBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueQorICAgICAgIGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbQorICAgICAgIFlvdS4gVGhpcyBMaWNlbnNlIG1heSBub3QgYmUgbW9kaWZpZWQgd2l0aG91dCB0aGUgbXV0dWFsIHdyaXR0ZW4KKyAgICAgICBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCisKKyAgIENyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkKKyAgIHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlCisgICBsaWFibGUgdG8gWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcworICAgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwKKyAgIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzCisgICBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUKKyAgIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdAorICAgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworICAgRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZQorICAgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgbmVpdGhlciBwYXJ0eSB3aWxsIHVzZSB0aGUgdHJhZGVtYXJrCisgICAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUKKyAgIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueQorICAgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zJworICAgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cworICAgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdXBvbiByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLgorCisgICBDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgWzJdaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbM10gQmFjayB0byBDb21tb25zIERlZWQKKworUmVmZXJlbmNlcworCisgICAxLiBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8KKyAgIDIuIGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLworICAgMy4gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktbmMtbmQvMi4wLwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvQ0NQTC1BdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsLU5vRGVyaXZzLTIuNSBiL2xpY2Vuc2VzL0NDUEwtQXR0cmlidXRpb24tTm9uQ29tbWVyY2lhbC1Ob0Rlcml2cy0yLjUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTA2Y2VkMQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0NDUEwtQXR0cmlidXRpb24tTm9uQ29tbWVyY2lhbC1Ob0Rlcml2cy0yLjUKQEAgLTAsMCArMSwxOTMgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGl2ZSBDb21tb25zCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDcmVhdGl2ZSBDb21tb25zIExlZ2FsIENvZGUKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsLU5vRGVyaXZzIDIuNQorICAgQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4KKyAgIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFCisgICBDT01NT05TIFBST1ZJREVTIFRISVMgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTworICAgV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIElORk9STUFUSU9OIFBST1ZJREVELCBBTkQgRElTQ0xBSU1TIExJQUJJTElUWSBGT1IgREFNQUdFUworICAgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KKworICAgTGljZW5zZQorCisgICBUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMKKyAgIExJQ0VOU0UgKCJDQ1BMIiBPUiAiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFCisgICBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTCisgICBQUk9ISUJJVEVELgorCisgICBCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkKKyAgIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMgQ09OVEFJTkVEIEhFUkUgSU4KKyAgIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKyAgIDEuIERlZmluaXRpb25zCisgICAgYS4gIkNvbGxlY3RpdmUgV29yayIgbWVhbnMgYSB3b3JrLCBzdWNoIGFzIGEgcGVyaW9kaWNhbCBpc3N1ZSwgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwKKyAgICAgICBpbiB3aGljaCB0aGUgV29yayBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtLCBhbG9uZyB3aXRoIGEgbnVtYmVyIG9mIG90aGVyCisgICAgICAgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUKKyAgICAgICBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90CisgICAgICAgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisgICAgYi4gIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIKKyAgICAgICBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgbXVzaWNhbCBhcnJhbmdlbWVudCwgZHJhbWF0aXphdGlvbiwKKyAgICAgICBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sCisgICAgICAgYWJyaWRnbWVudCwgY29uZGVuc2F0aW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCB0aGUgV29yayBtYXkgYmUgcmVjYXN0LAorICAgICAgIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsCisgICAgICAgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2UKKyAgICAgICBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIG9yIHNvdW5kIHJlY29yZGluZywgdGhlCisgICAgICAgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKCJzeW5jaGluZyIpIHdpbGwgYmUKKyAgICAgICBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisgICAgYy4gIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMKKyAgICAgICBMaWNlbnNlLgorICAgIGQuICJPcmlnaW5hbCBBdXRob3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB3aG8gY3JlYXRlZCB0aGUgV29yay4KKyAgICBlLiAiV29yayIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMKKyAgICAgICBMaWNlbnNlLgorICAgIGYuICJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdAorICAgICAgIHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMKKyAgICAgICByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZQorICAgICAgIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisKKyAgIDIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55CisgICByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyIGxpbWl0YXRpb25zIG9uIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mCisgICB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCisgICAzLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieQorICAgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlCisgICBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKyAgICBhLiB0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kCisgICAgICAgdG8gcmVwcm9kdWNlIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsKKyAgICBiLiB0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZAorICAgICAgIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgYXMKKyAgICAgICBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrczsKKworICAgVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdyBrbm93biBvciBoZXJlYWZ0ZXIKKyAgIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5CisgICBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cywgYnV0IG90aGVyd2lzZSB5b3UgaGF2ZSBubworICAgcmlnaHRzIHRvIG1ha2UgRGVyaXZhdGl2ZSBXb3Jrcy4gQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieQorICAgcmVzZXJ2ZWQsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gU2VjdGlvbnMgNChkKSBhbmQgNChlKS4KKworICAgNC4gUmVzdHJpY3Rpb25zLlRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kCisgICBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorICAgIGEuIFlvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0KKyAgICAgICB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlCisgICAgICAgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiB0aGUKKyAgICAgICBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkKKyAgICAgICBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlCisgICAgICAgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UKKyAgICAgICBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFdvcmsuIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcworICAgICAgIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksCisgICAgICAgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbAorICAgICAgIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZQorICAgICAgIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhCisgICAgICAgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsgYXBhcnQgZnJvbSB0aGUgV29yaworICAgICAgIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhIENvbGxlY3RpdmUKKyAgICAgICBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20KKyAgICAgICB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgY2xhdXNlIDQoYyksIGFzIHJlcXVlc3RlZC4KKyAgICBiLiBZb3UgbWF5IG5vdCBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiBTZWN0aW9uIDMgYWJvdmUgaW4gYW55IG1hbm5lcgorICAgICAgIHRoYXQgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZQorICAgICAgIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4gVGhlIGV4Y2hhbmdlIG9mIHRoZSBXb3JrIGZvciBvdGhlciBjb3B5cmlnaHRlZCB3b3JrcyBieSBtZWFucworICAgICAgIG9mIGRpZ2l0YWwgZmlsZS1zaGFyaW5nIG9yIG90aGVyd2lzZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCB0byBiZSBpbnRlbmRlZCBmb3Igb3IKKyAgICAgICBkaXJlY3RlZCB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24sIHByb3ZpZGVkIHRoZXJlCisgICAgICAgaXMgbm8gcGF5bWVudCBvZiBhbnkgbW9uZXRhcnkgY29tcGVuc2F0aW9uIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgZXhjaGFuZ2Ugb2YKKyAgICAgICBjb3B5cmlnaHRlZCB3b3Jrcy4KKyAgICBjLiBJZiB5b3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0KKyAgICAgICB0aGUgV29yaywgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgcHJvdmlkZSwKKyAgICAgICByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmc6IChpKSB0aGUgbmFtZSBvZiB0aGUgT3JpZ2luYWwKKyAgICAgICBBdXRob3IgKG9yIHBzZXVkb255bSwgaWYgYXBwbGljYWJsZSkgaWYgc3VwcGxpZWQsIGFuZC9vciAoaWkpIGlmIHRoZSBPcmlnaW5hbCBBdXRob3IKKyAgICAgICBhbmQvb3IgTGljZW5zb3IgZGVzaWduYXRlIGFub3RoZXIgcGFydHkgb3IgcGFydGllcyAoZS5nLiBhIHNwb25zb3IgaW5zdGl0dXRlLAorICAgICAgIHB1Ymxpc2hpbmcgZW50aXR5LCBqb3VybmFsKSBmb3IgYXR0cmlidXRpb24gaW4gTGljZW5zb3IncyBjb3B5cmlnaHQgbm90aWNlLCB0ZXJtcyBvZgorICAgICAgIHNlcnZpY2Ugb3IgYnkgb3RoZXIgcmVhc29uYWJsZSBtZWFucywgdGhlIG5hbWUgb2Ygc3VjaCBwYXJ0eSBvciBwYXJ0aWVzOyB0aGUgdGl0bGUgb2YKKyAgICAgICB0aGUgV29yayBpZiBzdXBwbGllZDsgYW5kIHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVuaWZvcm0gUmVzb3VyY2UKKyAgICAgICBJZGVudGlmaWVyLCBpZiBhbnksIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yaywgdW5sZXNzCisgICAgICAgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yay4KKyAgICAgICBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbgorICAgICAgIHRoZSBjYXNlIG9mIGEgQ29sbGVjdGl2ZSBXb3JrLCBhdCBhIG1pbmltdW0gc3VjaCBjcmVkaXQgd2lsbCBhcHBlYXIgd2hlcmUgYW55IG90aGVyCisgICAgICAgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaAorICAgICAgIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQuCisgICAgZC4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbjoKKyAgICAgICAgIGkuIFBlcmZvcm1hbmNlIFJveWFsdGllcyBVbmRlciBCbGFua2V0IExpY2Vuc2VzLiBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlCisgICAgICAgICAgICByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZSByaWdodHMgc29jaWV0eSAoZS5nLgorICAgICAgICAgICAgQVNDQVAsIEJNSSwgU0VTQUMpLCByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgcGVyZm9ybWFuY2Ugb3IgcHVibGljIGRpZ2l0YWwKKyAgICAgICAgICAgIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrIGlmIHRoYXQgcGVyZm9ybWFuY2UgaXMgcHJpbWFyaWx5IGludGVuZGVkCisgICAgICAgICAgICBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLgorICAgICAgICBpaS4gTWVjaGFuaWNhbCBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQKKyAgICAgICAgICAgIHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhIG11c2ljIHJpZ2h0cyBhZ2VuY3kgb3IgZGVzaWduYXRlZCBhZ2VudAorICAgICAgICAgICAgKGUuZy4gSGFycnkgRm94IEFnZW5jeSksIHJveWFsdGllcyBmb3IgYW55IHBob25vcmVjb3JkIFlvdSBjcmVhdGUgZnJvbSB0aGUgV29yaworICAgICAgICAgICAgKCJjb3ZlciB2ZXJzaW9uIikgYW5kIGRpc3RyaWJ1dGUsIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3CisgICAgICAgICAgICBVU0MgU2VjdGlvbiAxMTUgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyCisgICAgICAgICAgICBqdXJpc2RpY3Rpb25zKSwgaWYgWW91ciBkaXN0cmlidXRpb24gb2Ygc3VjaCBjb3ZlciB2ZXJzaW9uIGlzIHByaW1hcmlseSBpbnRlbmRlZAorICAgICAgICAgICAgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4KKyAgICBlLiBXZWJjYXN0aW5nIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrCisgICAgICAgaXMgYSBzb3VuZCByZWNvcmRpbmcsIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlcgorICAgICAgIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZS1yaWdodHMgc29jaWV0eSAoZS5nLiBTb3VuZEV4Y2hhbmdlKSwgcm95YWx0aWVzIGZvcgorICAgICAgIHRoZSBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yaywgc3ViamVjdCB0byB0aGUgY29tcHVsc29yeQorICAgICAgIGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTQgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluCisgICAgICAgb3RoZXIganVyaXNkaWN0aW9ucyksIGlmIFlvdXIgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvcgorICAgICAgIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4KKworICAgNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKKyAgIFVOTEVTUyBPVEhFUldJU0UgTVVUVUFMTFkgQUdSRUVEIEJZIFRIRSBQQVJUSUVTIElOIFdSSVRJTkcsIExJQ0VOU09SIE9GRkVSUyBUSEUgV09SSyBBUy1JUworICAgQU5EIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIFdPUkssIEVYUFJFU1MsCisgICBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwKKyAgIE1FUkNIQU5USUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCwgT1IgVEhFIEFCU0VOQ0UgT0YKKyAgIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YgRVJST1JTLCBXSEVUSEVSIE9SIE5PVAorICAgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNICisgICBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKyAgIDYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQKKyAgIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIFRPIFlPVSBPTiBBTlkgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwKKyAgIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRQorICAgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKyAgIDcuIFRlcm1pbmF0aW9uCisgICAgYS4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkKKyAgICAgICBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIEluZGl2aWR1YWxzIG9yIGVudGl0aWVzIHdobyBoYXZlIHJlY2VpdmVkCisgICAgICAgQ29sbGVjdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMKKyAgICAgICB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlCisgICAgICAgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorICAgIGIuIFN1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IKKyAgICAgICB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwKKyAgICAgICBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0bworICAgICAgIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwKKyAgICAgICBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZAorICAgICAgIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4KKyAgICAgICBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorCisgICA4LiBNaXNjZWxsYW5lb3VzCisgICAgYS4gRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGEgQ29sbGVjdGl2ZSBXb3JrLAorICAgICAgIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kCisgICAgICAgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCisgICAgYi4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdAorICAgICAgIHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMKKyAgICAgICBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24KKyAgICAgICBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kCisgICAgICAgZW5mb3JjZWFibGUuCisgICAgYy4gTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8KKyAgICAgICB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlCisgICAgICAgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQuCisgICAgZC4gVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZQorICAgICAgIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoCisgICAgICAgcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbAorICAgICAgIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZQorICAgICAgIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KKworICAgQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluCisgICBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55CisgICBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsCisgICBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcyBsaWNlbnNlLgorICAgTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseQorICAgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZgorICAgTGljZW5zb3IuCisKKyAgIEV4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yayBpcyBsaWNlbnNlZCB1bmRlcgorICAgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrCisgICBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIENyZWF0aXZlIENvbW1vbnMuIEFueQorICAgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zJyB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlCisgICBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QKKyAgIGZyb20gdGltZSB0byB0aW1lLgorCisgICBDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCitSZWZlcmVuY2VzCisKKyAgIDEuIGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLworICAgMi4gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktbmMtbmQvMi41LwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvQ0NQTC1BdHRyaWJ1dGlvbi1TaGFyZUFsaWtlLTIuMCBiL2xpY2Vuc2VzL0NDUEwtQXR0cmlidXRpb24tU2hhcmVBbGlrZS0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTFkMjkwOQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0NDUEwtQXR0cmlidXRpb24tU2hhcmVBbGlrZS0yLjAKQEAgLTAsMCArMSwyNjQgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMV1DcmVhdGl2ZSBDb21tb25zCisKKyAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0aXZlIENvbW1vbnMgTGVnYWwgQ29kZQorCisgICAgICAgICAgICAgICAgICAgICAgICAgQXR0cmlidXRpb24tU2hhcmVBbGlrZSAyLjAKKyAgIENSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUKKyAgIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTgorICAgQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTCisgICBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMKKyAgIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUgorICAgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorCisgICBMaWNlbnNlCisKKyAgIFRIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUworICAgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTCisgICBQUk9URUNURUQgQlkgQ09QWVJJR0hUIEFORC9PUiBPVEhFUiBBUFBMSUNBQkxFIExBVy4gQU5ZIFVTRSBPRiBUSEUKKyAgIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTCisgICBQUk9ISUJJVEVELgorCisgICBCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQKKyAgIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UuIFRIRSBMSUNFTlNPUiBHUkFOVFMKKyAgIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GCisgICBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisgICAxLiBEZWZpbml0aW9ucworICAgIGEuICJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsCisgICAgICAgYW50aG9sb2d5IG9yIGVuY3ljbG9wZWRpYSwgaW4gd2hpY2ggdGhlIFdvcmsgaW4gaXRzIGVudGlyZXR5IGluCisgICAgICAgdW5tb2RpZmllZCBmb3JtLCBhbG9uZyB3aXRoIGEgbnVtYmVyIG9mIG90aGVyIGNvbnRyaWJ1dGlvbnMsCisgICAgICAgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUKKyAgICAgICBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEKKyAgICAgICBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayAoYXMKKyAgICAgICBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyAgICBiLiAiRGVyaXZhdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yayBvciB1cG9uIHRoZQorICAgICAgIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsCisgICAgICAgYXJyYW5nZW1lbnQsIGRyYW1hdGl6YXRpb24sIGZpY3Rpb25hbGl6YXRpb24sIG1vdGlvbiBwaWN0dXJlCisgICAgICAgdmVyc2lvbiwgc291bmQgcmVjb3JkaW5nLCBhcnQgcmVwcm9kdWN0aW9uLCBhYnJpZGdtZW50LAorICAgICAgIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwKKyAgICAgICB0cmFuc2Zvcm1lZCwgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYQorICAgICAgIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUKKyAgICAgICBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZQorICAgICAgIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIG9yIHNvdW5kIHJlY29yZGluZywgdGhlCisgICAgICAgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UKKyAgICAgICAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZQorICAgICAgIG9mIHRoaXMgTGljZW5zZS4KKyAgICBjLiAiTGljZW5zb3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yaworICAgICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisgICAgZC4gIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZQorICAgICAgIFdvcmsuCisgICAgZS4gIldvcmsiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyCisgICAgICAgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyAgICBmLiAiWW91IiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzCisgICAgICAgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UKKyAgICAgICB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uCisgICAgICAgZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEKKyAgICAgICBwcmV2aW91cyB2aW9sYXRpb24uCisgICAgZy4gIkxpY2Vuc2UgRWxlbWVudHMiIG1lYW5zIHRoZSBmb2xsb3dpbmcgaGlnaC1sZXZlbCBsaWNlbnNlCisgICAgICAgYXR0cmlidXRlcyBhcyBzZWxlY3RlZCBieSBMaWNlbnNvciBhbmQgaW5kaWNhdGVkIGluIHRoZSB0aXRsZSBvZgorICAgICAgIHRoaXMgTGljZW5zZTogQXR0cmlidXRpb24sIFNoYXJlQWxpa2UuCisKKyAgIDIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLAorICAgbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yCisgICBvdGhlciBsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyCisgICBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworICAgMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLAorICAgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwKKyAgIHBlcnBldHVhbCAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQpIGxpY2Vuc2UgdG8KKyAgIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorICAgIGEuIHRvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZQorICAgICAgIENvbGxlY3RpdmUgV29ya3MsIGFuZCB0byByZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZQorICAgICAgIENvbGxlY3RpdmUgV29ya3M7CisgICAgYi4gdG8gY3JlYXRlIGFuZCByZXByb2R1Y2UgRGVyaXZhdGl2ZSBXb3JrczsKKyAgICBjLiB0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0KKyAgICAgICBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvCisgICAgICAgdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZQorICAgICAgIFdvcmtzOworICAgIGQuIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybQorICAgICAgIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8KKyAgICAgICB0cmFuc21pc3Npb24gRGVyaXZhdGl2ZSBXb3Jrcy4KKyAgICBlLiBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIHdvcmsgaXMgYSBtdXNpY2FsCisgICAgICAgY29tcG9zaXRpb246CisgICAgICAgICBpLiBQZXJmb3JtYW5jZSBSb3lhbHRpZXMgVW5kZXIgQmxhbmtldCBMaWNlbnNlcy4gTGljZW5zb3Igd2FpdmVzCisgICAgICAgICAgICB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3QsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yIHZpYSBhCisgICAgICAgICAgICBwZXJmb3JtYW5jZSByaWdodHMgc29jaWV0eSAoZS5nLiBBU0NBUCwgQk1JLCBTRVNBQyksCisgICAgICAgICAgICByb3lhbHRpZXMgZm9yIHRoZSBwdWJsaWMgcGVyZm9ybWFuY2Ugb3IgcHVibGljIGRpZ2l0YWwKKyAgICAgICAgICAgIHBlcmZvcm1hbmNlIChlLmcuIHdlYmNhc3QpIG9mIHRoZSBXb3JrLgorICAgICAgICBpaS4gTWVjaGFuaWNhbCBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMuIExpY2Vuc29yIHdhaXZlcworICAgICAgICAgICAgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYQorICAgICAgICAgICAgbXVzaWMgcmlnaHRzIHNvY2lldHkgb3IgZGVzaWduYXRlZCBhZ2VudCAoZS5nLiBIYXJyeSBGb3gKKyAgICAgICAgICAgIEFnZW5jeSksIHJveWFsdGllcyBmb3IgYW55IHBob25vcmVjb3JkIFlvdSBjcmVhdGUgZnJvbSB0aGUKKyAgICAgICAgICAgIFdvcmsgKCJjb3ZlciB2ZXJzaW9uIikgYW5kIGRpc3RyaWJ1dGUsIHN1YmplY3QgdG8gdGhlCisgICAgICAgICAgICBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTUgb2YgdGhlIFVTCisgICAgICAgICAgICBDb3B5cmlnaHQgQWN0IChvciB0aGUgZXF1aXZhbGVudCBpbiBvdGhlciBqdXJpc2RpY3Rpb25zKS4KKyAgICBmLiBXZWJjYXN0aW5nIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YKKyAgICAgICBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBzb3VuZCByZWNvcmRpbmcsIExpY2Vuc29yIHdhaXZlcyB0aGUKKyAgICAgICBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCwgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IgdmlhIGEKKyAgICAgICBwZXJmb3JtYW5jZS1yaWdodHMgc29jaWV0eSAoZS5nLiBTb3VuZEV4Y2hhbmdlKSwgcm95YWx0aWVzIGZvciB0aGUKKyAgICAgICBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yaywgc3ViamVjdCB0bworICAgICAgIHRoZSBjb21wdWxzb3J5IGxpY2Vuc2UgY3JlYXRlZCBieSAxNyBVU0MgU2VjdGlvbiAxMTQgb2YgdGhlIFVTCisgICAgICAgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucykuCisKKyAgIFRoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cKKyAgIGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2UKKyAgIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMKKyAgIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieQorICAgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZC4KKworICAgNC4gUmVzdHJpY3Rpb25zLlRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseQorICAgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorICAgIGEuIFlvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IKKyAgICAgICBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzCisgICAgICAgTGljZW5zZSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVW5pZm9ybSBSZXNvdXJjZQorICAgICAgIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZQorICAgICAgIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yCisgICAgICAgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMKKyAgICAgICBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IKKyAgICAgICB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heQorICAgICAgIG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0CisgICAgICAgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5CisgICAgICAgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5CisgICAgICAgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0CisgICAgICAgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoCisgICAgICAgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrCisgICAgICAgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlCisgICAgICAgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QKKyAgICAgICB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLAorICAgICAgIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLAorICAgICAgIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoIExpY2Vuc29yIG9yCisgICAgICAgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLiBJZiBZb3UgY3JlYXRlIGEgRGVyaXZhdGl2ZQorICAgICAgIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50CisgICAgICAgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgYW55IHJlZmVyZW5jZSB0byBzdWNoCisgICAgICAgTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLgorICAgIGIuIFlvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IKKyAgICAgICBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcworICAgICAgIG9mIHRoaXMgTGljZW5zZSwgYSBsYXRlciB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRoZSBzYW1lCisgICAgICAgTGljZW5zZSBFbGVtZW50cyBhcyB0aGlzIExpY2Vuc2UsIG9yIGEgQ3JlYXRpdmUgQ29tbW9ucyBpQ29tbW9ucworICAgICAgIGxpY2Vuc2UgdGhhdCBjb250YWlucyB0aGUgc2FtZSBMaWNlbnNlIEVsZW1lbnRzIGFzIHRoaXMgTGljZW5zZQorICAgICAgIChlLmcuIEF0dHJpYnV0aW9uLVNoYXJlQWxpa2UgMi4wIEphcGFuKS4gWW91IG11c3QgaW5jbHVkZSBhIGNvcHkKKyAgICAgICBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSBvciBvdGhlcgorICAgICAgIGxpY2Vuc2Ugc3BlY2lmaWVkIGluIHRoZSBwcmV2aW91cyBzZW50ZW5jZSB3aXRoIGV2ZXJ5IGNvcHkgb3IKKyAgICAgICBwaG9ub3JlY29yZCBvZiBlYWNoIERlcml2YXRpdmUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkKKyAgICAgICBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heQorICAgICAgIG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgYWx0ZXIKKyAgICAgICBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZQorICAgICAgIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIsIGFuZCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwKKyAgICAgICBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZgorICAgICAgIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5CisgICAgICAgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIERlcml2YXRpdmUgV29yayB3aXRoCisgICAgICAgYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsKKyAgICAgICBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4KKyAgICAgICBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhCisgICAgICAgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsKKyAgICAgICBhcGFydCBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUKKyAgICAgICB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisgICAgYy4gSWYgeW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5CisgICAgICAgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZQorICAgICAgIFdvcmtzLCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZAorICAgICAgIGdpdmUgdGhlIE9yaWdpbmFsIEF1dGhvciBjcmVkaXQgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zCisgICAgICAgWW91IGFyZSB1dGlsaXppbmcgYnkgY29udmV5aW5nIHRoZSBuYW1lIChvciBwc2V1ZG9ueW0gaWYKKyAgICAgICBhcHBsaWNhYmxlKSBvZiB0aGUgT3JpZ2luYWwgQXV0aG9yIGlmIHN1cHBsaWVkOyB0aGUgdGl0bGUgb2YgdGhlCisgICAgICAgV29yayBpZiBzdXBwbGllZDsgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUKKyAgICAgICBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIsIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUKKyAgICAgICBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUKKyAgICAgICBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcms7IGFuZCBpbiB0aGUKKyAgICAgICBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZQorICAgICAgIFdvcmsgaW4gdGhlIERlcml2YXRpdmUgV29yayAoZS5nLiwgIkZyZW5jaCB0cmFuc2xhdGlvbiBvZiB0aGUgV29yaworICAgICAgIGJ5IE9yaWdpbmFsIEF1dGhvciwiIG9yICJTY3JlZW5wbGF5IGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkKKyAgICAgICBPcmlnaW5hbCBBdXRob3IiKS4gU3VjaCBjcmVkaXQgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueQorICAgICAgIHJlYXNvbmFibGUgbWFubmVyOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpbiB0aGUgY2FzZSBvZiBhCisgICAgICAgRGVyaXZhdGl2ZSBXb3JrIG9yIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwKKyAgICAgICBhcHBlYXIgd2hlcmUgYW55IG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQgYXBwZWFycyBhbmQgaW4KKyAgICAgICBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgc3VjaCBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAKKyAgICAgICBjcmVkaXQuCisKKyAgIDUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCisgICBVTkxFU1MgT1RIRVJXSVNFIEFHUkVFRCBUTyBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HLCBMSUNFTlNPUiBPRkZFUlMKKyAgIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkgS0lORAorICAgQ09OQ0VSTklORyBUSEUgTUFURVJJQUxTLCBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlkgT1IgT1RIRVJXSVNFLAorICAgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE1FUkNIQU5USUJJTElUWSwKKyAgIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQsIE9SIFRIRSBBQlNFTkNFIE9GCisgICBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPRiBBQlNFTkNFIE9GCisgICBFUlJPUlMsIFdIRVRIRVIgT1IgTk9UIERJU0NPVkVSQUJMRS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVworICAgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFNVQ0ggRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkKKyAgIFRPIFlPVS4KKworICAgNi4gTGltaXRhdGlvbiBvbiBMaWFiaWxpdHkuIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFJFUVVJUkVEIEJZCisgICBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWQorICAgTEVHQUwgVEhFT1JZIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IKKyAgIEVYRU1QTEFSWSBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgTElDRU5TRSBPUiBUSEUgVVNFIE9GIFRIRSBXT1JLLAorICAgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKyAgIDcuIFRlcm1pbmF0aW9uCisgICAgYS4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlCisgICAgICAgYXV0b21hdGljYWxseSB1cG9uIGFueSBicmVhY2ggYnkgWW91IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisgICAgICAgSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgRGVyaXZhdGl2ZSBXb3JrcyBvcgorICAgICAgIENvbGxlY3RpdmUgV29ya3MgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdAorICAgICAgIGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yCisgICAgICAgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucworICAgICAgIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorICAgIGIuIFN1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkCisgICAgICAgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluCisgICAgICAgdGhlIFdvcmspLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQKKyAgICAgICB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AKKyAgICAgICBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2gKKyAgICAgICBlbGVjdGlvbiB3aWxsIG5vdCBzZXJ2ZSB0byB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlcgorICAgICAgIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlCisgICAgICAgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwKKyAgICAgICBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKworICAgOC4gTWlzY2VsbGFuZW91cworICAgIGEuIEVhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvcgorICAgICAgIGEgQ29sbGVjdGl2ZSBXb3JrLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlCisgICAgICAgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UKKyAgICAgICBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCisgICAgYi4gRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEKKyAgICAgICBEZXJpdmF0aXZlIFdvcmssIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUKKyAgICAgICBvcmlnaW5hbCBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlCisgICAgICAgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorICAgIGMuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorICAgICAgIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eQorICAgICAgIG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlcgorICAgICAgIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUKKyAgICAgICByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24KKyAgICAgICB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCisgICAgZC4gTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vCisgICAgICAgYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbgorICAgICAgIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGUgcGFydHkgdG8gYmUgY2hhcmdlZCB3aXRoIHN1Y2ggd2FpdmVyIG9yCisgICAgICAgY29uc2VudC4KKyAgICBlLiBUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcworICAgICAgIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8KKyAgICAgICB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZQorICAgICAgIFdvcmsgbm90IHNwZWNpZmllZCBoZXJlLiBMaWNlbnNvciBzaGFsbCBub3QgYmUgYm91bmQgYnkgYW55CisgICAgICAgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQgbWF5IGFwcGVhciBpbiBhbnkgY29tbXVuaWNhdGlvbiBmcm9tCisgICAgICAgWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbgorICAgICAgIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KKworICAgQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eQorICAgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUKKyAgIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzCisgICB3aGF0c29ldmVyLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGFueSBnZW5lcmFsLCBzcGVjaWFsLAorICAgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMKKyAgIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZQorICAgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzIHRoZSBMaWNlbnNvciBoZXJldW5kZXIsIGl0CisgICBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCisgICBFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlCisgICBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBuZWl0aGVyIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsKKyAgICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZQorICAgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55CisgICBwZXJtaXR0ZWQgdXNlIHdpbGwgYmUgaW4gY29tcGxpYW5jZSB3aXRoIENyZWF0aXZlIENvbW1vbnMnCisgICB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzCisgICB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuCisKKyAgIENyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBbMl1odHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFszXSBCYWNrIHRvIENvbW1vbnMgRGVlZAorCitSZWZlcmVuY2VzCisKKyAgIDEuIGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLworICAgMi4gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvCisgICAzLiBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9saWNlbnNlcy9ieS1zYS8yLjAvCmRpZmYgLS1naXQgYS9saWNlbnNlcy9DQ1BMLUF0dHJpYnV0aW9uLVNoYXJlQWxpa2UtMi41IGIvbGljZW5zZXMvQ0NQTC1BdHRyaWJ1dGlvbi1TaGFyZUFsaWtlLTIuNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzA5ZDBjCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvQ0NQTC1BdHRyaWJ1dGlvbi1TaGFyZUFsaWtlLTIuNQpAQCAtMCwwICsxLDY3IEBACitDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLVNoYXJlQWxpa2UgMi41IExpY2Vuc2UgQWdyZWVtZW50CisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KKworTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgT1IgQ09QWVJJR0hUIExBVyBJUyBQUk9ISUJJVEVELgorCitCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisgICAxLiAiQ29sbGVjdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmssIHN1Y2ggYXMgYSBwZXJpb2RpY2FsIGlzc3VlLCBhbnRob2xvZ3kgb3IgZW5jeWNsb3BlZGlhLCBpbiB3aGljaCB0aGUgV29yayBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtLCBhbG9uZyB3aXRoIGEgbnVtYmVyIG9mIG90aGVyIGNvbnRyaWJ1dGlvbnMsIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisgICAyLiAiRGVyaXZhdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yayBvciB1cG9uIHRoZSBXb3JrIGFuZCBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgbXVzaWNhbCBhcnJhbmdlbWVudCwgZHJhbWF0aXphdGlvbiwgZmljdGlvbmFsaXphdGlvbiwgbW90aW9uIHBpY3R1cmUgdmVyc2lvbiwgc291bmQgcmVjb3JkaW5nLCBhcnQgcmVwcm9kdWN0aW9uLCBhYnJpZGdtZW50LCBjb25kZW5zYXRpb24sIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb24gb3Igc291bmQgcmVjb3JkaW5nLCB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKCJzeW5jaGluZyIpIHdpbGwgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlLgorICAgMy4gIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyAgIDQuICJPcmlnaW5hbCBBdXRob3IiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB3aG8gY3JlYXRlZCB0aGUgV29yay4KKyAgIDUuICJXb3JrIiBtZWFucyB0aGUgY29weXJpZ2h0YWJsZSB3b3JrIG9mIGF1dGhvcnNoaXAgb2ZmZXJlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorICAgNi4gIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIG9yIHdobyBoYXMgcmVjZWl2ZWQgZXhwcmVzcyBwZXJtaXNzaW9uIGZyb20gdGhlIExpY2Vuc29yIHRvIGV4ZXJjaXNlIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZGVzcGl0ZSBhIHByZXZpb3VzIHZpb2xhdGlvbi4KKyAgIDcuICJMaWNlbnNlIEVsZW1lbnRzIiBtZWFucyB0aGUgZm9sbG93aW5nIGhpZ2gtbGV2ZWwgbGljZW5zZSBhdHRyaWJ1dGVzIGFzIHNlbGVjdGVkIGJ5IExpY2Vuc29yIGFuZCBpbmRpY2F0ZWQgaW4gdGhlIHRpdGxlIG9mIHRoaXMgTGljZW5zZTogQXR0cmlidXRpb24sIFNoYXJlQWxpa2UuCisKKzIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCisgICAxLiB0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlIENvbGxlY3RpdmUgV29ya3M7CisgICAyLiB0byBjcmVhdGUgYW5kIHJlcHJvZHVjZSBEZXJpdmF0aXZlIFdvcmtzOworICAgMy4gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrczsKKyAgIDQuIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiBEZXJpdmF0aXZlIFdvcmtzLgorICAgNS4KKworICAgICAgRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSB3b3JrIGlzIGEgbXVzaWNhbCBjb21wb3NpdGlvbjoKKyAgICAgICAgIDEuIFBlcmZvcm1hbmNlIFJveWFsdGllcyBVbmRlciBCbGFua2V0IExpY2Vuc2VzLiBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZSByaWdodHMgc29jaWV0eSAoZS5nLiBBU0NBUCwgQk1JLCBTRVNBQyksIHJveWFsdGllcyBmb3IgdGhlIHB1YmxpYyBwZXJmb3JtYW5jZSBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yay4KKyAgICAgICAgIDIuIE1lY2hhbmljYWwgUmlnaHRzIGFuZCBTdGF0dXRvcnkgUm95YWx0aWVzLiBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBtdXNpYyByaWdodHMgc29jaWV0eSBvciBkZXNpZ25hdGVkIGFnZW50IChlLmcuIEhhcnJ5IEZveCBBZ2VuY3kpLCByb3lhbHRpZXMgZm9yIGFueSBwaG9ub3JlY29yZCBZb3UgY3JlYXRlIGZyb20gdGhlIFdvcmsgKCJjb3ZlciB2ZXJzaW9uIikgYW5kIGRpc3RyaWJ1dGUsIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNSBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucykuCisgICA2LiBXZWJjYXN0aW5nIFJpZ2h0cyBhbmQgU3RhdHV0b3J5IFJveWFsdGllcy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgc291bmQgcmVjb3JkaW5nLCBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYSBwZXJmb3JtYW5jZS1yaWdodHMgc29jaWV0eSAoZS5nLiBTb3VuZEV4Y2hhbmdlKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2UgKGUuZy4gd2ViY2FzdCkgb2YgdGhlIFdvcmssIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNCBvZiB0aGUgVVMgQ29weXJpZ2h0IEFjdCAob3IgdGhlIGVxdWl2YWxlbnQgaW4gb3RoZXIganVyaXNkaWN0aW9ucykuCisKK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLgorCis0LiBSZXN0cmljdGlvbnMuVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworICAgMS4gWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb3IgcGhvbm9yZWNvcmQgb2YgdGhlIFdvcmsgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBXb3JrIHRoYXQgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIFRoZSBhYm92ZSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlIENvbGxlY3RpdmUgV29yayBhbnkgY3JlZGl0IGFzIHJlcXVpcmVkIGJ5IGNsYXVzZSA0KGMpLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYSBEZXJpdmF0aXZlIFdvcmssIHVwb24gbm90aWNlIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgY2xhdXNlIDQoYyksIGFzIHJlcXVlc3RlZC4KKyAgIDIuIFlvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhIGxhdGVyIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHdpdGggdGhlIHNhbWUgTGljZW5zZSBFbGVtZW50cyBhcyB0aGlzIExpY2Vuc2UsIG9yIGEgQ3JlYXRpdmUgQ29tbW9ucyBpQ29tbW9ucyBsaWNlbnNlIHRoYXQgY29udGFpbnMgdGhlIHNhbWUgTGljZW5zZSBFbGVtZW50cyBhcyB0aGlzIExpY2Vuc2UgKGUuZy4gQXR0cmlidXRpb24tU2hhcmVBbGlrZSAyLjUgSmFwYW4pLiBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZSBvciBvdGhlciBsaWNlbnNlIHNwZWNpZmllZCBpbiB0aGUgcHJldmlvdXMgc2VudGVuY2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIGVhY2ggRGVyaXZhdGl2ZSBXb3JrIFlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIsIGFuZCBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIERlcml2YXRpdmUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRoYXQgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgRGVyaXZhdGl2ZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIERlcml2YXRpdmUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisgICAzLiBJZiB5b3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZSBXb3JrcywgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgcHJvdmlkZSwgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nOiAoaSkgdGhlIG5hbWUgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciAob3IgcHNldWRvbnltLCBpZiBhcHBsaWNhYmxlKSBpZiBzdXBwbGllZCwgYW5kL29yIChpaSkgaWYgdGhlIE9yaWdpbmFsIEF1dGhvciBhbmQvb3IgTGljZW5zb3IgZGVzaWduYXRlIGFub3RoZXIgcGFydHkgb3IgcGFydGllcyAoZS5nLiBhIHNwb25zb3IgaW5zdGl0dXRlLCBwdWJsaXNoaW5nIGVudGl0eSwgam91cm5hbCkgZm9yIGF0dHJpYnV0aW9uIGluIExpY2Vuc29yJ3MgY29weXJpZ2h0IG5vdGljZSwgdGVybXMgb2Ygc2VydmljZSBvciBieSBvdGhlciByZWFzb25hYmxlIG1lYW5zLCB0aGUgbmFtZSBvZiBzdWNoIHBhcnR5IG9yIHBhcnRpZXM7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUgVW5pZm9ybSBSZXNvdXJjZSBJZGVudGlmaWVyLCBpZiBhbnksIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgV29yaywgdW5sZXNzIHN1Y2ggVVJJIGRvZXMgbm90IHJlZmVyIHRvIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcms7IGFuZCBpbiB0aGUgY2FzZSBvZiBhIERlcml2YXRpdmUgV29yaywgYSBjcmVkaXQgaWRlbnRpZnlpbmcgdGhlIHVzZSBvZiB0aGUgV29yayBpbiB0aGUgRGVyaXZhdGl2ZSBXb3JrIChlLmcuLCAiRnJlbmNoIHRyYW5zbGF0aW9uIG9mIHRoZSBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciwiIG9yICJTY3JlZW5wbGF5IGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yIikuIFN1Y2ggY3JlZGl0IG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrIG9yIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyIHdoZXJlIGFueSBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0IGFwcGVhcnMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyBzdWNoIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQuCisKKzUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCitVTkxFU1MgT1RIRVJXSVNFIEFHUkVFRCBUTyBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HLCBMSUNFTlNPUiBPRkZFUlMgVEhFIFdPUksgQVMtSVMgQU5EIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIE1BVEVSSUFMUywgRVhQUkVTUywgSU1QTElFRCwgU1RBVFVUT1JZIE9SIE9USEVSV0lTRSwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE1FUkNIQU5USUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCwgT1IgVEhFIEFCU0VOQ0UgT0YgTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLCBPUiBUSEUgUFJFU0VOQ0UgT0YgQUJTRU5DRSBPRiBFUlJPUlMsIFdIRVRIRVIgT1IgTk9UIERJU0NPVkVSQUJMRS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gU1VDSCBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRlcm1pbmF0aW9uCisKKyAgIDEuIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KKyAgIDIuIFN1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsIGdyYW50ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorCis4LiBNaXNjZWxsYW5lb3VzCisKKyAgIDEuIEVhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3RpdmUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCisgICAyLiBFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmssIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgb3JpZ2luYWwgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCisgICAzLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCisgICA0LiBObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorICAgNS4gVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCisKK0NyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCitFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55IHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9ucycgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuCisKK0NyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCmRpZmYgLS1naXQgYS9saWNlbnNlcy9DQ1BMLUF0dHJpYnV0aW9uLVNoYXJlQWxpa2UtMy4wIGIvbGljZW5zZXMvQ0NQTC1BdHRyaWJ1dGlvbi1TaGFyZUFsaWtlLTMuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NzE0YWZmCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvQ0NQTC1BdHRyaWJ1dGlvbi1TaGFyZUFsaWtlLTMuMApAQCAtMCwwICsxLDc1IEBACitDcmVhdGl2ZSBDb21tb25zIEF0dHJpYnV0aW9uLVNoYXJlQWxpa2UgMy4wIExpY2Vuc2UgQWdyZWVtZW50CisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUgTEVHQUwgU0VSVklDRVMuIERJU1RSSUJVVElPTiBPRiBUSElTIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBJTkZPUk1BVElPTiBQUk9WSURFRCwgQU5EIERJU0NMQUlNUyBMSUFCSUxJVFkgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gSVRTIFVTRS4KKworTGljZW5zZQorCitUSEUgV09SSyAoQVMgREVGSU5FRCBCRUxPVykgSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ1JFQVRJVkUgQ09NTU9OUyBQVUJMSUMgTElDRU5TRSAoIkNDUEwiIE9SICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMgQVVUSE9SSVpFRCBVTkRFUiBUSElTIExJQ0VOU0UgT1IgQ09QWVJJR0hUIExBVyBJUyBQUk9ISUJJVEVELgorCitCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRSwgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVE8gVEhFIEVYVEVOVCBUSElTIExJQ0VOU0UgTUFZIEJFIENPTlNJREVSRUQgVE8gQkUgQSBDT05UUkFDVCwgVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TLgorCisxLiBEZWZpbml0aW9ucworCisgICBhLiAiQWRhcHRhdGlvbiIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmssIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBhZGFwdGF0aW9uLCBkZXJpdmF0aXZlIHdvcmssIGFycmFuZ2VtZW50IG9mIG11c2ljIG9yIG90aGVyIGFsdGVyYXRpb25zIG9mIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yaywgb3IgcGhvbm9ncmFtIG9yIHBlcmZvcm1hbmNlIGFuZCBpbmNsdWRlcyBjaW5lbWF0b2dyYXBoaWMgYWRhcHRhdGlvbnMgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQgaW5jbHVkaW5nIGluIGFueSBmb3JtIHJlY29nbml6YWJseSBkZXJpdmVkIGZyb20gdGhlIG9yaWdpbmFsLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3Rpb24gd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUgV29yayBpcyBhIG11c2ljYWwgd29yaywgcGVyZm9ybWFuY2Ugb3IgcGhvbm9ncmFtLCB0aGUgc3luY2hyb25pemF0aW9uIG9mIHRoZSBXb3JrIGluIHRpbWVkLXJlbGF0aW9uIHdpdGggYSBtb3ZpbmcgaW1hZ2UgKCJzeW5jaGluZyIpIHdpbGwgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisgICBiLiAiQ29sbGVjdGlvbiIgbWVhbnMgYSBjb2xsZWN0aW9uIG9mIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmtzLCBzdWNoIGFzIGVuY3ljbG9wZWRpYXMgYW5kIGFudGhvbG9naWVzLCBvciBwZXJmb3JtYW5jZXMsIHBob25vZ3JhbXMgb3IgYnJvYWRjYXN0cywgb3Igb3RoZXIgd29ya3Mgb3Igc3ViamVjdCBtYXR0ZXIgb3RoZXIgdGhhbiB3b3JrcyBsaXN0ZWQgaW4gU2VjdGlvbiAxKGYpIGJlbG93LCB3aGljaCwgYnkgcmVhc29uIG9mIHRoZSBzZWxlY3Rpb24gYW5kIGFycmFuZ2VtZW50IG9mIHRoZWlyIGNvbnRlbnRzLCBjb25zdGl0dXRlIGludGVsbGVjdHVhbCBjcmVhdGlvbnMsIGluIHdoaWNoIHRoZSBXb3JrIGlzIGluY2x1ZGVkIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0gYWxvbmcgd2l0aCBvbmUgb3IgbW9yZSBvdGhlciBjb250cmlidXRpb25zLCBlYWNoIGNvbnN0aXR1dGluZyBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQgd29ya3MgaW4gdGhlbXNlbHZlcywgd2hpY2ggdG9nZXRoZXIgYXJlIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aW9uIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisgICBjLiAiQ3JlYXRpdmUgQ29tbW9ucyBDb21wYXRpYmxlIExpY2Vuc2UiIG1lYW5zIGEgbGljZW5zZSB0aGF0IGlzIGxpc3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy9jb21wYXRpYmxlbGljZW5zZXMgdGhhdCBoYXMgYmVlbiBhcHByb3ZlZCBieSBDcmVhdGl2ZSBDb21tb25zIGFzIGJlaW5nIGVzc2VudGlhbGx5IGVxdWl2YWxlbnQgdG8gdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcsIGF0IGEgbWluaW11bSwgYmVjYXVzZSB0aGF0IGxpY2Vuc2U6IChpKSBjb250YWlucyB0ZXJtcyB0aGF0IGhhdmUgdGhlIHNhbWUgcHVycG9zZSwgbWVhbmluZyBhbmQgZWZmZWN0IGFzIHRoZSBMaWNlbnNlIEVsZW1lbnRzIG9mIHRoaXMgTGljZW5zZTsgYW5kLCAoaWkpIGV4cGxpY2l0bHkgcGVybWl0cyB0aGUgcmVsaWNlbnNpbmcgb2YgYWRhcHRhdGlvbnMgb2Ygd29ya3MgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhhdCBsaWNlbnNlIHVuZGVyIHRoaXMgTGljZW5zZSBvciBhIENyZWF0aXZlIENvbW1vbnMganVyaXNkaWN0aW9uIGxpY2Vuc2Ugd2l0aCB0aGUgc2FtZSBMaWNlbnNlIEVsZW1lbnRzIGFzIHRoaXMgTGljZW5zZS4KKyAgIGQuICJEaXN0cmlidXRlIiBtZWFucyB0byBtYWtlIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIHRoZSBvcmlnaW5hbCBhbmQgY29waWVzIG9mIHRoZSBXb3JrIG9yIEFkYXB0YXRpb24sIGFzIGFwcHJvcHJpYXRlLCB0aHJvdWdoIHNhbGUgb3Igb3RoZXIgdHJhbnNmZXIgb2Ygb3duZXJzaGlwLgorICAgZS4gIkxpY2Vuc2UgRWxlbWVudHMiIG1lYW5zIHRoZSBmb2xsb3dpbmcgaGlnaC1sZXZlbCBsaWNlbnNlIGF0dHJpYnV0ZXMgYXMgc2VsZWN0ZWQgYnkgTGljZW5zb3IgYW5kIGluZGljYXRlZCBpbiB0aGUgdGl0bGUgb2YgdGhpcyBMaWNlbnNlOiBBdHRyaWJ1dGlvbiwgU2hhcmVBbGlrZS4KKyAgIGYuICJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwsIGluZGl2aWR1YWxzLCBlbnRpdHkgb3IgZW50aXRpZXMgdGhhdCBvZmZlcihzKSB0aGUgV29yayB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorICAgZy4gIk9yaWdpbmFsIEF1dGhvciIgbWVhbnMsIGluIHRoZSBjYXNlIG9mIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yaywgdGhlIGluZGl2aWR1YWwsIGluZGl2aWR1YWxzLCBlbnRpdHkgb3IgZW50aXRpZXMgd2hvIGNyZWF0ZWQgdGhlIFdvcmsgb3IgaWYgbm8gaW5kaXZpZHVhbCBvciBlbnRpdHkgY2FuIGJlIGlkZW50aWZpZWQsIHRoZSBwdWJsaXNoZXI7IGFuZCBpbiBhZGRpdGlvbiAoaSkgaW4gdGhlIGNhc2Ugb2YgYSBwZXJmb3JtYW5jZSB0aGUgYWN0b3JzLCBzaW5nZXJzLCBtdXNpY2lhbnMsIGRhbmNlcnMsIGFuZCBvdGhlciBwZXJzb25zIHdobyBhY3QsIHNpbmcsIGRlbGl2ZXIsIGRlY2xhaW0sIHBsYXkgaW4sIGludGVycHJldCBvciBvdGhlcndpc2UgcGVyZm9ybSBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrcyBvciBleHByZXNzaW9ucyBvZiBmb2xrbG9yZTsgKGlpKSBpbiB0aGUgY2FzZSBvZiBhIHBob25vZ3JhbSB0aGUgcHJvZHVjZXIgYmVpbmcgdGhlIHBlcnNvbiBvciBsZWdhbCBlbnRpdHkgd2hvIGZpcnN0IGZpeGVzIHRoZSBzb3VuZHMgb2YgYSBwZXJmb3JtYW5jZSBvciBvdGhlciBzb3VuZHM7IGFuZCwgKGlpaSkgaW4gdGhlIGNhc2Ugb2YgYnJvYWRjYXN0cywgdGhlIG9yZ2FuaXphdGlvbiB0aGF0IHRyYW5zbWl0cyB0aGUgYnJvYWRjYXN0LgorICAgaC4gIldvcmsiIG1lYW5zIHRoZSBsaXRlcmFyeSBhbmQvb3IgYXJ0aXN0aWMgd29yayBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgcHJvZHVjdGlvbiBpbiB0aGUgbGl0ZXJhcnksIHNjaWVudGlmaWMgYW5kIGFydGlzdGljIGRvbWFpbiwgd2hhdGV2ZXIgbWF5IGJlIHRoZSBtb2RlIG9yIGZvcm0gb2YgaXRzIGV4cHJlc3Npb24gaW5jbHVkaW5nIGRpZ2l0YWwgZm9ybSwgc3VjaCBhcyBhIGJvb2ssIHBhbXBobGV0IGFuZCBvdGhlciB3cml0aW5nOyBhIGxlY3R1cmUsIGFkZHJlc3MsIHNlcm1vbiBvciBvdGhlciB3b3JrIG9mIHRoZSBzYW1lIG5hdHVyZTsgYSBkcmFtYXRpYyBvciBkcmFtYXRpY28tbXVzaWNhbCB3b3JrOyBhIGNob3Jlb2dyYXBoaWMgd29yayBvciBlbnRlcnRhaW5tZW50IGluIGR1bWIgc2hvdzsgYSBtdXNpY2FsIGNvbXBvc2l0aW9uIHdpdGggb3Igd2l0aG91dCB3b3JkczsgYSBjaW5lbWF0b2dyYXBoaWMgd29yayB0byB3aGljaCBhcmUgYXNzaW1pbGF0ZWQgd29ya3MgZXhwcmVzc2VkIGJ5IGEgcHJvY2VzcyBhbmFsb2dvdXMgdG8gY2luZW1hdG9ncmFwaHk7IGEgd29yayBvZiBkcmF3aW5nLCBwYWludGluZywgYXJjaGl0ZWN0dXJlLCBzY3VscHR1cmUsIGVuZ3JhdmluZyBvciBsaXRob2dyYXBoeTsgYSBwaG90b2dyYXBoaWMgd29yayB0byB3aGljaCBhcmUgYXNzaW1pbGF0ZWQgd29ya3MgZXhwcmVzc2VkIGJ5IGEgcHJvY2VzcyBhbmFsb2dvdXMgdG8gcGhvdG9ncmFwaHk7IGEgd29yayBvZiBhcHBsaWVkIGFydDsgYW4gaWxsdXN0cmF0aW9uLCBtYXAsIHBsYW4sIHNrZXRjaCBvciB0aHJlZS1kaW1lbnNpb25hbCB3b3JrIHJlbGF0aXZlIHRvIGdlb2dyYXBoeSwgdG9wb2dyYXBoeSwgYXJjaGl0ZWN0dXJlIG9yIHNjaWVuY2U7IGEgcGVyZm9ybWFuY2U7IGEgYnJvYWRjYXN0OyBhIHBob25vZ3JhbTsgYSBjb21waWxhdGlvbiBvZiBkYXRhIHRvIHRoZSBleHRlbnQgaXQgaXMgcHJvdGVjdGVkIGFzIGEgY29weXJpZ2h0YWJsZSB3b3JrOyBvciBhIHdvcmsgcGVyZm9ybWVkIGJ5IGEgdmFyaWV0eSBvciBjaXJjdXMgcGVyZm9ybWVyIHRvIHRoZSBleHRlbnQgaXQgaXMgbm90IG90aGVyd2lzZSBjb25zaWRlcmVkIGEgbGl0ZXJhcnkgb3IgYXJ0aXN0aWMgd29yay4KKyAgIGkuICJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisgIGouICJQdWJsaWNseSBQZXJmb3JtIiBtZWFucyB0byBwZXJmb3JtIHB1YmxpYyByZWNpdGF0aW9ucyBvZiB0aGUgV29yayBhbmQgdG8gY29tbXVuaWNhdGUgdG8gdGhlIHB1YmxpYyB0aG9zZSBwdWJsaWMgcmVjaXRhdGlvbnMsIGJ5IGFueSBtZWFucyBvciBwcm9jZXNzLCBpbmNsdWRpbmcgYnkgd2lyZSBvciB3aXJlbGVzcyBtZWFucyBvciBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZXM7IHRvIG1ha2UgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgV29ya3MgaW4gc3VjaCBhIHdheSB0aGF0IG1lbWJlcnMgb2YgdGhlIHB1YmxpYyBtYXkgYWNjZXNzIHRoZXNlIFdvcmtzIGZyb20gYSBwbGFjZSBhbmQgYXQgYSBwbGFjZSBpbmRpdmlkdWFsbHkgY2hvc2VuIGJ5IHRoZW07IHRvIHBlcmZvcm0gdGhlIFdvcmsgdG8gdGhlIHB1YmxpYyBieSBhbnkgbWVhbnMgb3IgcHJvY2VzcyBhbmQgdGhlIGNvbW11bmljYXRpb24gdG8gdGhlIHB1YmxpYyBvZiB0aGUgcGVyZm9ybWFuY2VzIG9mIHRoZSBXb3JrLCBpbmNsdWRpbmcgYnkgcHVibGljIGRpZ2l0YWwgcGVyZm9ybWFuY2U7IHRvIGJyb2FkY2FzdCBhbmQgcmVicm9hZGNhc3QgdGhlIFdvcmsgYnkgYW55IG1lYW5zIGluY2x1ZGluZyBzaWducywgc291bmRzIG9yIGltYWdlcy4KKyAgay4gIlJlcHJvZHVjZSIgbWVhbnMgdG8gbWFrZSBjb3BpZXMgb2YgdGhlIFdvcmsgYnkgYW55IG1lYW5zIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYnkgc291bmQgb3IgdmlzdWFsIHJlY29yZGluZ3MgYW5kIHRoZSByaWdodCBvZiBmaXhhdGlvbiBhbmQgcmVwcm9kdWNpbmcgZml4YXRpb25zIG9mIHRoZSBXb3JrLCBpbmNsdWRpbmcgc3RvcmFnZSBvZiBhIHByb3RlY3RlZCBwZXJmb3JtYW5jZSBvciBwaG9ub2dyYW0gaW4gZGlnaXRhbCBmb3JtIG9yIG90aGVyIGVsZWN0cm9uaWMgbWVkaXVtLgorCisyLiBGYWlyIERlYWxpbmcgUmlnaHRzLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byByZWR1Y2UsIGxpbWl0LCBvciByZXN0cmljdCBhbnkgdXNlcyBmcmVlIGZyb20gY29weXJpZ2h0IG9yIHJpZ2h0cyBhcmlzaW5nIGZyb20gbGltaXRhdGlvbnMgb3IgZXhjZXB0aW9ucyB0aGF0IGFyZSBwcm92aWRlZCBmb3IgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBjb3B5cmlnaHQgcHJvdGVjdGlvbiB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorCisgICBhLiB0byBSZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGlvbnMsIGFuZCB0byBSZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aW9uczsKKyAgIGIuIHRvIGNyZWF0ZSBhbmQgUmVwcm9kdWNlIEFkYXB0YXRpb25zIHByb3ZpZGVkIHRoYXQgYW55IHN1Y2ggQWRhcHRhdGlvbiwgaW5jbHVkaW5nIGFueSB0cmFuc2xhdGlvbiBpbiBhbnkgbWVkaXVtLCB0YWtlcyByZWFzb25hYmxlIHN0ZXBzIHRvIGNsZWFybHkgbGFiZWwsIGRlbWFyY2F0ZSBvciBvdGhlcndpc2UgaWRlbnRpZnkgdGhhdCBjaGFuZ2VzIHdlcmUgbWFkZSB0byB0aGUgb3JpZ2luYWwgV29yay4gRm9yIGV4YW1wbGUsIGEgdHJhbnNsYXRpb24gY291bGQgYmUgbWFya2VkICJUaGUgb3JpZ2luYWwgd29yayB3YXMgdHJhbnNsYXRlZCBmcm9tIEVuZ2xpc2ggdG8gU3BhbmlzaCwiIG9yIGEgbW9kaWZpY2F0aW9uIGNvdWxkIGluZGljYXRlICJUaGUgb3JpZ2luYWwgd29yayBoYXMgYmVlbiBtb2RpZmllZC4iOworICAgYy4gdG8gRGlzdHJpYnV0ZSBhbmQgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBpbmNsdWRpbmcgYXMgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3Rpb25zOyBhbmQsCisgICBkLiB0byBEaXN0cmlidXRlIGFuZCBQdWJsaWNseSBQZXJmb3JtIEFkYXB0YXRpb25zLgorICAgZS4KKworICAgICAgRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQ6CisgICAgICAgICBpLiBOb24td2FpdmFibGUgQ29tcHVsc29yeSBMaWNlbnNlIFNjaGVtZXMuIEluIHRob3NlIGp1cmlzZGljdGlvbnMgaW4gd2hpY2ggdGhlIHJpZ2h0IHRvIGNvbGxlY3Qgcm95YWx0aWVzIHRocm91Z2ggYW55IHN0YXR1dG9yeSBvciBjb21wdWxzb3J5IGxpY2Vuc2luZyBzY2hlbWUgY2Fubm90IGJlIHdhaXZlZCwgdGhlIExpY2Vuc29yIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCBzdWNoIHJveWFsdGllcyBmb3IgYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlOworICAgICAgICAgaWkuIFdhaXZhYmxlIENvbXB1bHNvcnkgTGljZW5zZSBTY2hlbWVzLiBJbiB0aG9zZSBqdXJpc2RpY3Rpb25zIGluIHdoaWNoIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IgY29tcHVsc29yeSBsaWNlbnNpbmcgc2NoZW1lIGNhbiBiZSB3YWl2ZWQsIHRoZSBMaWNlbnNvciB3YWl2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0IHN1Y2ggcm95YWx0aWVzIGZvciBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2U7IGFuZCwKKyAgICAgICAgIGlpaS4gVm9sdW50YXJ5IExpY2Vuc2UgU2NoZW1lcy4gVGhlIExpY2Vuc29yIHdhaXZlcyB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMsIHdoZXRoZXIgaW5kaXZpZHVhbGx5IG9yLCBpbiB0aGUgZXZlbnQgdGhhdCB0aGUgTGljZW5zb3IgaXMgYSBtZW1iZXIgb2YgYSBjb2xsZWN0aW5nIHNvY2lldHkgdGhhdCBhZG1pbmlzdGVycyB2b2x1bnRhcnkgbGljZW5zaW5nIHNjaGVtZXMsIHZpYSB0aGF0IHNvY2lldHksIGZyb20gYW55IGV4ZXJjaXNlIGJ5IFlvdSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLgorCitUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2Ugc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiBvdGhlciBtZWRpYSBhbmQgZm9ybWF0cy4gU3ViamVjdCB0byBTZWN0aW9uIDgoZiksIGFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGJ5IExpY2Vuc29yIGFyZSBoZXJlYnkgcmVzZXJ2ZWQuCisKKzQuIFJlc3RyaWN0aW9ucy4gVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUgc3ViamVjdCB0byBhbmQgbGltaXRlZCBieSB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworICAgYS4gWW91IG1heSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciAoVVJJKSBmb3IsIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFdvcmsgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIGFiaWxpdHkgb2YgdGhlIHJlY2lwaWVudCBvZiB0aGUgV29yayB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gdGhhdCByZWNpcGllbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcyB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFdvcmsgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybS4gV2hlbiBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrLCBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGVmZmVjdGl2ZSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIG9uIHRoZSBXb3JrIHRoYXQgcmVzdHJpY3QgdGhlIGFiaWxpdHkgb2YgYSByZWNpcGllbnQgb2YgdGhlIFdvcmsgZnJvbSBZb3UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZS4gVGhpcyBTZWN0aW9uIDQoYSkgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aW9uLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aW9uIGFwYXJ0IGZyb20gdGhlIFdvcmsgaXRzZWxmIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEgQ29sbGVjdGlvbiwgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aW9uIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgU2VjdGlvbiA0KGMpLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYW4gQWRhcHRhdGlvbiwgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBBZGFwdGF0aW9uIGFueSBjcmVkaXQgYXMgcmVxdWlyZWQgYnkgU2VjdGlvbiA0KGMpLCBhcyByZXF1ZXN0ZWQuCisgICBiLiBZb3UgbWF5IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSBhbiBBZGFwdGF0aW9uIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mOiAoaSkgdGhpcyBMaWNlbnNlOyAoaWkpIGEgbGF0ZXIgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0aGUgc2FtZSBMaWNlbnNlIEVsZW1lbnRzIGFzIHRoaXMgTGljZW5zZTsgKGlpaSkgYSBDcmVhdGl2ZSBDb21tb25zIGp1cmlzZGljdGlvbiBsaWNlbnNlIChlaXRoZXIgdGhpcyBvciBhIGxhdGVyIGxpY2Vuc2UgdmVyc2lvbikgdGhhdCBjb250YWlucyB0aGUgc2FtZSBMaWNlbnNlIEVsZW1lbnRzIGFzIHRoaXMgTGljZW5zZSAoZS5nLiwgQXR0cmlidXRpb24tU2hhcmVBbGlrZSAzLjAgVVMpKTsgKGl2KSBhIENyZWF0aXZlIENvbW1vbnMgQ29tcGF0aWJsZSBMaWNlbnNlLiBJZiB5b3UgbGljZW5zZSB0aGUgQWRhcHRhdGlvbiB1bmRlciBvbmUgb2YgdGhlIGxpY2Vuc2VzIG1lbnRpb25lZCBpbiAoaXYpLCB5b3UgbXVzdCBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhhdCBsaWNlbnNlLiBJZiB5b3UgbGljZW5zZSB0aGUgQWRhcHRhdGlvbiB1bmRlciB0aGUgdGVybXMgb2YgYW55IG9mIHRoZSBsaWNlbnNlcyBtZW50aW9uZWQgaW4gKGkpLCAoaWkpIG9yIChpaWkpICh0aGUgIkFwcGxpY2FibGUgTGljZW5zZSIpLCB5b3UgbXVzdCBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhlIEFwcGxpY2FibGUgTGljZW5zZSBnZW5lcmFsbHkgYW5kIHRoZSBmb2xsb3dpbmcgcHJvdmlzaW9uczogKEkpIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVVJJIGZvciwgdGhlIEFwcGxpY2FibGUgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgZWFjaCBBZGFwdGF0aW9uIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm07IChJSSkgWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgQWRhcHRhdGlvbiB0aGF0IHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGUgQXBwbGljYWJsZSBMaWNlbnNlIG9yIHRoZSBhYmlsaXR5IG9mIHRoZSByZWNpcGllbnQgb2YgdGhlIEFkYXB0YXRpb24gdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQXBwbGljYWJsZSBMaWNlbnNlOyAoSUlJKSBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoZSBBcHBsaWNhYmxlIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMgd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBXb3JrIGFzIGluY2x1ZGVkIGluIHRoZSBBZGFwdGF0aW9uIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm07IChJVikgd2hlbiBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBBZGFwdGF0aW9uLCBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGVmZmVjdGl2ZSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIG9uIHRoZSBBZGFwdGF0aW9uIHRoYXQgcmVzdHJpY3QgdGhlIGFiaWxpdHkgb2YgYSByZWNpcGllbnQgb2YgdGhlIEFkYXB0YXRpb24gZnJvbSBZb3UgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQXBwbGljYWJsZSBMaWNlbnNlLiBUaGlzIFNlY3Rpb24gNChiKSBhcHBsaWVzIHRvIHRoZSBBZGFwdGF0aW9uIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3Rpb24sIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3Rpb24gYXBhcnQgZnJvbSB0aGUgQWRhcHRhdGlvbiBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgQXBwbGljYWJsZSBMaWNlbnNlLgorICAgYy4gSWYgWW91IERpc3RyaWJ1dGUsIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IEFkYXB0YXRpb25zIG9yIENvbGxlY3Rpb25zLCBZb3UgbXVzdCwgdW5sZXNzIGEgcmVxdWVzdCBoYXMgYmVlbiBtYWRlIHB1cnN1YW50IHRvIFNlY3Rpb24gNChhKSwga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCBub3RpY2VzIGZvciB0aGUgV29yayBhbmQgcHJvdmlkZSwgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nOiAoaSkgdGhlIG5hbWUgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciAob3IgcHNldWRvbnltLCBpZiBhcHBsaWNhYmxlKSBpZiBzdXBwbGllZCwgYW5kL29yIGlmIHRoZSBPcmlnaW5hbCBBdXRob3IgYW5kL29yIExpY2Vuc29yIGRlc2lnbmF0ZSBhbm90aGVyIHBhcnR5IG9yIHBhcnRpZXMgKGUuZy4sIGEgc3BvbnNvciBpbnN0aXR1dGUsIHB1Ymxpc2hpbmcgZW50aXR5LCBqb3VybmFsKSBmb3IgYXR0cmlidXRpb24gKCJBdHRyaWJ1dGlvbiBQYXJ0aWVzIikgaW4gTGljZW5zb3IncyBjb3B5cmlnaHQgbm90aWNlLCB0ZXJtcyBvZiBzZXJ2aWNlIG9yIGJ5IG90aGVyIHJlYXNvbmFibGUgbWVhbnMsIHRoZSBuYW1lIG9mIHN1Y2ggcGFydHkgb3IgcGFydGllczsgKGlpKSB0aGUgdGl0bGUgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IChpaWkpIHRvIHRoZSBleHRlbnQgcmVhc29uYWJseSBwcmFjdGljYWJsZSwgdGhlIFVSSSwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmssIHVubGVzcyBzdWNoIFVSSSBkb2VzIG5vdCByZWZlciB0byB0aGUgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrOyBhbmQgKGl2KSAsIGNvbnNpc3RlbnQgd2l0aCBTc2VjdGlvbiAzKGIpLCBpbiB0aGUgY2FzZSBvZiBhbiBBZGFwdGF0aW9uLCBhIGNyZWRpdCBpZGVudGlmeWluZyB0aGUgdXNlIG9mIHRoZSBXb3JrIGluIHRoZSBBZGFwdGF0aW9uIChlLmcuLCAiRnJlbmNoIHRyYW5zbGF0aW9uIG9mIHRoZSBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciwiIG9yICJTY3JlZW5wbGF5IGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yIikuIFRoZSBjcmVkaXQgcmVxdWlyZWQgYnkgdGhpcyBTZWN0aW9uIDQoYykgbWF5IGJlIGltcGxlbWVudGVkIGluIGFueSByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYSBBZGFwdGF0aW9uIG9yIENvbGxlY3Rpb24sIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciwgaWYgYSBjcmVkaXQgZm9yIGFsbCBjb250cmlidXRpbmcgYXV0aG9ycyBvZiB0aGUgQWRhcHRhdGlvbiBvciBDb2xsZWN0aW9uIGFwcGVhcnMsIHRoZW4gYXMgcGFydCBvZiB0aGVzZSBjcmVkaXRzIGFuZCBpbiBhIG1hbm5lciBhdCBsZWFzdCBhcyBwcm9taW5lbnQgYXMgdGhlIGNyZWRpdHMgZm9yIHRoZSBvdGhlciBjb250cmlidXRpbmcgYXV0aG9ycy4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIFlvdSBtYXkgb25seSB1c2UgdGhlIGNyZWRpdCByZXF1aXJlZCBieSB0aGlzIFNlY3Rpb24gZm9yIHRoZSBwdXJwb3NlIG9mIGF0dHJpYnV0aW9uIGluIHRoZSBtYW5uZXIgc2V0IG91dCBhYm92ZSBhbmQsIGJ5IGV4ZXJjaXNpbmcgWW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLCBZb3UgbWF5IG5vdCBpbXBsaWNpdGx5IG9yIGV4cGxpY2l0bHkgYXNzZXJ0IG9yIGltcGx5IGFueSBjb25uZWN0aW9uIHdpdGgsIHNwb25zb3JzaGlwIG9yIGVuZG9yc2VtZW50IGJ5IHRoZSBPcmlnaW5hbCBBdXRob3IsIExpY2Vuc29yIGFuZC9vciBBdHRyaWJ1dGlvbiBQYXJ0aWVzLCBhcyBhcHByb3ByaWF0ZSwgb2YgWW91IG9yIFlvdXIgdXNlIG9mIHRoZSBXb3JrLCB3aXRob3V0IHRoZSBzZXBhcmF0ZSwgZXhwcmVzcyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIE9yaWdpbmFsIEF1dGhvciwgTGljZW5zb3IgYW5kL29yIEF0dHJpYnV0aW9uIFBhcnRpZXMuCisgICBkLiBFeGNlcHQgYXMgb3RoZXJ3aXNlIGFncmVlZCBpbiB3cml0aW5nIGJ5IHRoZSBMaWNlbnNvciBvciBhcyBtYXkgYmUgb3RoZXJ3aXNlIHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywgaWYgWW91IFJlcHJvZHVjZSwgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIGVpdGhlciBieSBpdHNlbGYgb3IgYXMgcGFydCBvZiBhbnkgQWRhcHRhdGlvbnMgb3IgQ29sbGVjdGlvbnMsIFlvdSBtdXN0IG5vdCBkaXN0b3J0LCBtdXRpbGF0ZSwgbW9kaWZ5IG9yIHRha2Ugb3RoZXIgZGVyb2dhdG9yeSBhY3Rpb24gaW4gcmVsYXRpb24gdG8gdGhlIFdvcmsgd2hpY2ggd291bGQgYmUgcHJlanVkaWNpYWwgdG8gdGhlIE9yaWdpbmFsIEF1dGhvcidzIGhvbm9yIG9yIHJlcHV0YXRpb24uIExpY2Vuc29yIGFncmVlcyB0aGF0IGluIHRob3NlIGp1cmlzZGljdGlvbnMgKGUuZy4gSmFwYW4pLCBpbiB3aGljaCBhbnkgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0IGdyYW50ZWQgaW4gU2VjdGlvbiAzKGIpIG9mIHRoaXMgTGljZW5zZSAodGhlIHJpZ2h0IHRvIG1ha2UgQWRhcHRhdGlvbnMpIHdvdWxkIGJlIGRlZW1lZCB0byBiZSBhIGRpc3RvcnRpb24sIG11dGlsYXRpb24sIG1vZGlmaWNhdGlvbiBvciBvdGhlciBkZXJvZ2F0b3J5IGFjdGlvbiBwcmVqdWRpY2lhbCB0byB0aGUgT3JpZ2luYWwgQXV0aG9yJ3MgaG9ub3IgYW5kIHJlcHV0YXRpb24sIHRoZSBMaWNlbnNvciB3aWxsIHdhaXZlIG9yIG5vdCBhc3NlcnQsIGFzIGFwcHJvcHJpYXRlLCB0aGlzIFNlY3Rpb24sIHRvIHRoZSBmdWxsZXN0IGV4dGVudCBwZXJtaXR0ZWQgYnkgdGhlIGFwcGxpY2FibGUgbmF0aW9uYWwgbGF3LCB0byBlbmFibGUgWW91IHRvIHJlYXNvbmFibHkgZXhlcmNpc2UgWW91ciByaWdodCB1bmRlciBTZWN0aW9uIDMoYikgb2YgdGhpcyBMaWNlbnNlIChyaWdodCB0byBtYWtlIEFkYXB0YXRpb25zKSBidXQgbm90IG90aGVyd2lzZS4KKworNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisKK1VOTEVTUyBPVEhFUldJU0UgTVVUVUFMTFkgQUdSRUVEIFRPIEJZIFRIRSBQQVJUSUVTIElOIFdSSVRJTkcsIExJQ0VOU09SIE9GRkVSUyBUSEUgV09SSyBBUy1JUyBBTkQgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgV09SSywgRVhQUkVTUywgSU1QTElFRCwgU1RBVFVUT1JZIE9SIE9USEVSV0lTRSwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT0YgVElUTEUsIE1FUkNIQU5USUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCwgT1IgVEhFIEFCU0VOQ0UgT0YgTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLCBPUiBUSEUgUFJFU0VOQ0UgT0YgQUJTRU5DRSBPRiBFUlJPUlMsIFdIRVRIRVIgT1IgTk9UIERJU0NPVkVSQUJMRS4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gU1VDSCBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuIFRlcm1pbmF0aW9uCisKKyAgIGEuIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgQWRhcHRhdGlvbnMgb3IgQ29sbGVjdGlvbnMgZnJvbSBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhvc2UgbGljZW5zZXMuIFNlY3Rpb25zIDEsIDIsIDUsIDYsIDcsIGFuZCA4IHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorICAgYi4gU3ViamVjdCB0byB0aGUgYWJvdmUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZSBsaWNlbnNlIGdyYW50ZWQgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2ggZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIgbGljZW5zZSB0aGF0IGhhcyBiZWVuLCBvciBpcyByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCisKKzguIE1pc2NlbGxhbmVvdXMKKworICAgYS4gRWFjaCB0aW1lIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aW9uLCB0aGUgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KKyAgIGIuIEVhY2ggdGltZSBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIGFuIEFkYXB0YXRpb24sIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUgb3JpZ2luYWwgV29yayBvbiB0aGUgc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyB0aGUgbGljZW5zZSBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UuCisgICBjLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBhZ3JlZW1lbnQsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCisgICBkLiBObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8gYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvciBjb25zZW50LgorICAgZS4gVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubyB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIG5vdCBzcGVjaWZpZWQgaGVyZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCisgICBmLiBUaGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIsIGFuZCB0aGUgc3ViamVjdCBtYXR0ZXIgcmVmZXJlbmNlZCwgaW4gdGhpcyBMaWNlbnNlIHdlcmUgZHJhZnRlZCB1dGlsaXppbmcgdGhlIHRlcm1pbm9sb2d5IG9mIHRoZSBCZXJuZSBDb252ZW50aW9uIGZvciB0aGUgUHJvdGVjdGlvbiBvZiBMaXRlcmFyeSBhbmQgQXJ0aXN0aWMgV29ya3MgKGFzIGFtZW5kZWQgb24gU2VwdGVtYmVyIDI4LCAxOTc5KSwgdGhlIFJvbWUgQ29udmVudGlvbiBvZiAxOTYxLCB0aGUgV0lQTyBDb3B5cmlnaHQgVHJlYXR5IG9mIDE5OTYsIHRoZSBXSVBPIFBlcmZvcm1hbmNlcyBhbmQgUGhvbm9ncmFtcyBUcmVhdHkgb2YgMTk5NiBhbmQgdGhlIFVuaXZlcnNhbCBDb3B5cmlnaHQgQ29udmVudGlvbiAoYXMgcmV2aXNlZCBvbiBKdWx5IDI0LCAxOTcxKS4gVGhlc2UgcmlnaHRzIGFuZCBzdWJqZWN0IG1hdHRlciB0YWtlIGVmZmVjdCBpbiB0aGUgcmVsZXZhbnQganVyaXNkaWN0aW9uIGluIHdoaWNoIHRoZSBMaWNlbnNlIHRlcm1zIGFyZSBzb3VnaHQgdG8gYmUgZW5mb3JjZWQgYWNjb3JkaW5nIHRvIHRoZSBjb3JyZXNwb25kaW5nIHByb3Zpc2lvbnMgb2YgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRob3NlIHRyZWF0eSBwcm92aXNpb25zIGluIHRoZSBhcHBsaWNhYmxlIG5hdGlvbmFsIGxhdy4gSWYgdGhlIHN0YW5kYXJkIHN1aXRlIG9mIHJpZ2h0cyBncmFudGVkIHVuZGVyIGFwcGxpY2FibGUgY29weXJpZ2h0IGxhdyBpbmNsdWRlcyBhZGRpdGlvbmFsIHJpZ2h0cyBub3QgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UsIHN1Y2ggYWRkaXRpb25hbCByaWdodHMgYXJlIGRlZW1lZCB0byBiZSBpbmNsdWRlZCBpbiB0aGUgTGljZW5zZTsgdGhpcyBMaWNlbnNlIGlzIG5vdCBpbnRlbmRlZCB0byByZXN0cmljdCB0aGUgbGljZW5zZSBvZiBhbnkgcmlnaHRzIHVuZGVyIGFwcGxpY2FibGUgbGF3LgorCitDcmVhdGl2ZSBDb21tb25zIE5vdGljZQorCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrLiBDcmVhdGl2ZSBDb21tb25zIHdpbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgYW55IHBhcnR5IG9uIGFueSBsZWdhbCB0aGVvcnkgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzIGxpY2Vuc2UuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHR3byAoMikgc2VudGVuY2VzLCBpZiBDcmVhdGl2ZSBDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQgc2hhbGwgaGF2ZSBhbGwgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBvZiBMaWNlbnNvci4KKworRXhjZXB0IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdG8gdGhlIHB1YmxpYyB0aGF0IHRoZSBXb3JrIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBDQ1BMLCBDcmVhdGl2ZSBDb21tb25zIGRvZXMgbm90IGF1dGhvcml6ZSB0aGUgdXNlIGJ5IGVpdGhlciBwYXJ0eSBvZiB0aGUgdHJhZGVtYXJrICJDcmVhdGl2ZSBDb21tb25zIiBvciBhbnkgcmVsYXRlZCB0cmFkZW1hcmsgb3IgbG9nbyBvZiBDcmVhdGl2ZSBDb21tb25zIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zJyB0aGVuLWN1cnJlbnQgdHJhZGVtYXJrIHVzYWdlIGd1aWRlbGluZXMsIGFzIG1heSBiZSBwdWJsaXNoZWQgb24gaXRzIHdlYnNpdGUgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHRoaXMgdHJhZGVtYXJrIHJlc3RyaWN0aW9uIGRvZXMgbm90IGZvcm0gcGFydCBvZiB0aGUgTGljZW5zZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLy4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0NDUEwtQXR0cmlidXRpb24tU2hhcmVBbGlrZS1Ob25Db21tZXJjaWFsLTIuNSBiL2xpY2Vuc2VzL0NDUEwtQXR0cmlidXRpb24tU2hhcmVBbGlrZS1Ob25Db21tZXJjaWFsLTIuNQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjEwYTczCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvQ0NQTC1BdHRyaWJ1dGlvbi1TaGFyZUFsaWtlLU5vbkNvbW1lcmNpYWwtMi41CkBAIC0wLDAgKzEsMjgxIEBACitDcmVhdGl2ZSBDb21tb25zIExlZ2FsIENvZGUKKworKkF0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwtU2hhcmVBbGlrZSAyLjUqCisKK0NSRUFUSVZFIENPTU1PTlMgQ09SUE9SQVRJT04gSVMgTk9UIEEgTEFXIEZJUk0gQU5EIERPRVMgTk9UIFBST1ZJREUKK0xFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTgorQVRUT1JORVktQ0xJRU5UIFJFTEFUSU9OU0hJUC4gQ1JFQVRJVkUgQ09NTU9OUyBQUk9WSURFUyBUSElTIElORk9STUFUSU9OCitPTiBBTiAiQVMtSVMiIEJBU0lTLiBDUkVBVElWRSBDT01NT05TIE1BS0VTIE5PIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRQorSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NCitJVFMgVVNFLgorCisvTGljZW5zZS8KKworVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENSRUFUSVZFCitDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZCitDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMKK0FVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMgUFJPSElCSVRFRC4KKworQlkgRVhFUkNJU0lORyBBTlkgUklHSFRTIFRPIFRIRSBXT1JLIFBST1ZJREVEIEhFUkUsIFlPVSBBQ0NFUFQgQU5EIEFHUkVFCitUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUKK1JJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TCitBTkQgQ09ORElUSU9OUy4KKworKjEuIERlZmluaXRpb25zKgorCisgICAxLiAqIkNvbGxlY3RpdmUgV29yayIqIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsCisgICAgICBhbnRob2xvZ3kgb3IgZW5jeWNsb3BlZGlhLCBpbiB3aGljaCB0aGUgV29yayBpbiBpdHMgZW50aXJldHkgaW4KKyAgICAgIHVubW9kaWZpZWQgZm9ybSwgYWxvbmcgd2l0aCBhIG51bWJlciBvZiBvdGhlciBjb250cmlidXRpb25zLAorICAgICAgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUKKyAgICAgIGFzc2VtYmxlZCBpbnRvIGEgY29sbGVjdGl2ZSB3aG9sZS4gQSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYQorICAgICAgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgKGFzCisgICAgICBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyAgIDIuICoiRGVyaXZhdGl2ZSBXb3JrIiogbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUKKyAgICAgIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsCisgICAgICBhcnJhbmdlbWVudCwgZHJhbWF0aXphdGlvbiwgZmljdGlvbmFsaXphdGlvbiwgbW90aW9uIHBpY3R1cmUKKyAgICAgIHZlcnNpb24sIHNvdW5kIHJlY29yZGluZywgYXJ0IHJlcHJvZHVjdGlvbiwgYWJyaWRnbWVudCwKKyAgICAgIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwKKyAgICAgIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkLCBleGNlcHQgdGhhdCBhIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhCisgICAgICBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayBmb3IgdGhlCisgICAgICBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4gRm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIHdoZXJlIHRoZQorICAgICAgV29yayBpcyBhIG11c2ljYWwgY29tcG9zaXRpb24gb3Igc291bmQgcmVjb3JkaW5nLCB0aGUKKyAgICAgIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlCisgICAgICAoInN5bmNoaW5nIikgd2lsbCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIGZvciB0aGUgcHVycG9zZQorICAgICAgb2YgdGhpcyBMaWNlbnNlLgorICAgMy4gKiJMaWNlbnNvciIqIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IG9mZmVycyB0aGUgV29yaworICAgICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyAgIDQuICoiT3JpZ2luYWwgQXV0aG9yIiogbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBjcmVhdGVkIHRoZQorICAgICAgV29yay4KKyAgIDUuICoiV29yayIqIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyCisgICAgICB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorICAgNi4gKiJZb3UiKiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzCisgICAgICBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZQorICAgICAgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbgorICAgICAgZnJvbSB0aGUgTGljZW5zb3IgdG8gZXhlcmNpc2UgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBkZXNwaXRlIGEKKyAgICAgIHByZXZpb3VzIHZpb2xhdGlvbi4KKyAgIDcuICoiTGljZW5zZSBFbGVtZW50cyIqIG1lYW5zIHRoZSBmb2xsb3dpbmcgaGlnaC1sZXZlbCBsaWNlbnNlCisgICAgICBhdHRyaWJ1dGVzIGFzIHNlbGVjdGVkIGJ5IExpY2Vuc29yIGFuZCBpbmRpY2F0ZWQgaW4gdGhlIHRpdGxlIG9mCisgICAgICB0aGlzIExpY2Vuc2U6IEF0dHJpYnV0aW9uLCBOb25jb21tZXJjaWFsLCBTaGFyZUFsaWtlLgorCisqMi4gRmFpciBVc2UgUmlnaHRzLiogTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLAorbGltaXQsIG9yIHJlc3RyaWN0IGFueSByaWdodHMgYXJpc2luZyBmcm9tIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyCitsaW1pdGF0aW9ucyBvbiB0aGUgZXhjbHVzaXZlIHJpZ2h0cyBvZiB0aGUgY29weXJpZ2h0IG93bmVyIHVuZGVyCitjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworKjMuIExpY2Vuc2UgR3JhbnQuKiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsCitMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLAorcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0bworZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisKKyAgIDEuIHRvIHJlcHJvZHVjZSB0aGUgV29yaywgdG8gaW5jb3Jwb3JhdGUgdGhlIFdvcmsgaW50byBvbmUgb3IgbW9yZQorICAgICAgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gdGhlCisgICAgICBDb2xsZWN0aXZlIFdvcmtzOworICAgMi4gdG8gY3JlYXRlIGFuZCByZXByb2R1Y2UgRGVyaXZhdGl2ZSBXb3JrczsKKyAgIDMuIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybQorICAgICAgcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbworICAgICAgdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrczsKKyAgIDQuIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybQorICAgICAgcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mIGEgZGlnaXRhbCBhdWRpbworICAgICAgdHJhbnNtaXNzaW9uIERlcml2YXRpdmUgV29ya3M7CisKK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cKK2tub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUgcmlnaHRzIGluY2x1ZGUgdGhlIHJpZ2h0IHRvIG1ha2UKK3N1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMKK2luIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvcgorYXJlIGhlcmVieSByZXNlcnZlZCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlnaHRzIHNldCBmb3J0aAoraW4gU2VjdGlvbnMgNChlKSBhbmQgNChmKS4KKworKjQuIFJlc3RyaWN0aW9ucy4qVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5CittYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKKyAgIDEuIFlvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IKKyAgICAgIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMKKyAgICAgIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UKKyAgICAgIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZQorICAgICAgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IKKyAgICAgIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zCisgICAgICBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IKKyAgICAgIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UgbWF5CisgICAgICBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdAorICAgICAgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLiBZb3UgbWF5CisgICAgICBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkKKyAgICAgIGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIHdpdGggYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdAorICAgICAgY29udHJvbCBhY2Nlc3Mgb3IgdXNlIG9mIHRoZSBXb3JrIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoCisgICAgICB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIFdvcmsKKyAgICAgIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3RpdmUgV29yaywgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZQorICAgICAgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QKKyAgICAgIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIElmIFlvdSBjcmVhdGUgYSBDb2xsZWN0aXZlIFdvcmssCisgICAgICB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwKKyAgICAgIHJlbW92ZSBmcm9tIHRoZSBDb2xsZWN0aXZlIFdvcmsgYW55IGNyZWRpdCBhcyByZXF1aXJlZCBieSBjbGF1c2UKKyAgICAgIDQoZCksIGFzIHJlcXVlc3RlZC4gSWYgWW91IGNyZWF0ZSBhIERlcml2YXRpdmUgV29yaywgdXBvbiBub3RpY2UKKyAgICAgIGZyb20gYW55IExpY2Vuc29yIFlvdSBtdXN0LCB0byB0aGUgZXh0ZW50IHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbQorICAgICAgdGhlIERlcml2YXRpdmUgV29yayBhbnkgY3JlZGl0IGFzIHJlcXVpcmVkIGJ5IGNsYXVzZSA0KGQpLCBhcworICAgICAgcmVxdWVzdGVkLgorICAgMi4gWW91IG1heSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvcgorICAgICAgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMKKyAgICAgIG9mIHRoaXMgTGljZW5zZSwgYSBsYXRlciB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRoZSBzYW1lCisgICAgICBMaWNlbnNlIEVsZW1lbnRzIGFzIHRoaXMgTGljZW5zZSwgb3IgYSBDcmVhdGl2ZSBDb21tb25zIGlDb21tb25zCisgICAgICBsaWNlbnNlIHRoYXQgY29udGFpbnMgdGhlIHNhbWUgTGljZW5zZSBFbGVtZW50cyBhcyB0aGlzIExpY2Vuc2UKKyAgICAgIChlLmcuIEF0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwtU2hhcmVBbGlrZSAyLjUgSmFwYW4pLiBZb3UgbXVzdAorICAgICAgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzCisgICAgICBMaWNlbnNlIG9yIG90aGVyIGxpY2Vuc2Ugc3BlY2lmaWVkIGluIHRoZSBwcmV2aW91cyBzZW50ZW5jZSB3aXRoCisgICAgICBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIGVhY2ggRGVyaXZhdGl2ZSBXb3JrIFlvdSBkaXN0cmlidXRlLAorICAgICAgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uCisgICAgICBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIHRoZSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQKKyAgICAgIGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHMnCisgICAgICBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLCBhbmQgWW91IG11c3Qga2VlcCBpbnRhY3QKKyAgICAgIGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZgorICAgICAgd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkKKyAgICAgIHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBEZXJpdmF0aXZlIFdvcmsgd2l0aAorICAgICAgYW55IHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsKKyAgICAgIGluIGEgbWFubmVyIGluY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LgorICAgICAgVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIERlcml2YXRpdmUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYQorICAgICAgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aXZlIFdvcmsKKyAgICAgIGFwYXJ0IGZyb20gdGhlIERlcml2YXRpdmUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZQorICAgICAgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorICAgMy4gWW91IG1heSBub3QgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgaW4gU2VjdGlvbiAzCisgICAgICBhYm92ZSBpbiBhbnkgbWFubmVyIHRoYXQgaXMgcHJpbWFyaWx5IGludGVuZGVkIGZvciBvciBkaXJlY3RlZAorICAgICAgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLiBUaGUKKyAgICAgIGV4Y2hhbmdlIG9mIHRoZSBXb3JrIGZvciBvdGhlciBjb3B5cmlnaHRlZCB3b3JrcyBieSBtZWFucyBvZgorICAgICAgZGlnaXRhbCBmaWxlLXNoYXJpbmcgb3Igb3RoZXJ3aXNlIHNoYWxsIG5vdCBiZSBjb25zaWRlcmVkIHRvIGJlCisgICAgICBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUKKyAgICAgIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgcHJvdmlkZWQgdGhlcmUgaXMgbm8gcGF5bWVudCBvZiBhbnkKKyAgICAgIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGV4Y2hhbmdlIG9mCisgICAgICBjb3B5cmlnaHRlZCB3b3Jrcy4KKyAgIDQuIElmIHlvdSBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseQorICAgICAgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYW55IERlcml2YXRpdmUgV29ya3Mgb3IgQ29sbGVjdGl2ZQorICAgICAgV29ya3MsIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kCisgICAgICBwcm92aWRlLCByZWFzb25hYmxlIHRvIHRoZSBtZWRpdW0gb3IgbWVhbnMgWW91IGFyZSB1dGlsaXppbmc6IChpKQorICAgICAgdGhlIG5hbWUgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciAob3IgcHNldWRvbnltLCBpZiBhcHBsaWNhYmxlKSBpZgorICAgICAgc3VwcGxpZWQsIGFuZC9vciAoaWkpIGlmIHRoZSBPcmlnaW5hbCBBdXRob3IgYW5kL29yIExpY2Vuc29yCisgICAgICBkZXNpZ25hdGUgYW5vdGhlciBwYXJ0eSBvciBwYXJ0aWVzIChlLmcuIGEgc3BvbnNvciBpbnN0aXR1dGUsCisgICAgICBwdWJsaXNoaW5nIGVudGl0eSwgam91cm5hbCkgZm9yIGF0dHJpYnV0aW9uIGluIExpY2Vuc29yJ3MKKyAgICAgIGNvcHlyaWdodCBub3RpY2UsIHRlcm1zIG9mIHNlcnZpY2Ugb3IgYnkgb3RoZXIgcmVhc29uYWJsZSBtZWFucywKKyAgICAgIHRoZSBuYW1lIG9mIHN1Y2ggcGFydHkgb3IgcGFydGllczsgdGhlIHRpdGxlIG9mIHRoZSBXb3JrIGlmCisgICAgICBzdXBwbGllZDsgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCB0aGUgVW5pZm9ybQorICAgICAgUmVzb3VyY2UgSWRlbnRpZmllciwgaWYgYW55LCB0aGF0IExpY2Vuc29yIHNwZWNpZmllcyB0byBiZQorICAgICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlCisgICAgICBjb3B5cmlnaHQgbm90aWNlIG9yIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmb3IgdGhlIFdvcms7IGFuZCBpbiB0aGUKKyAgICAgIGNhc2Ugb2YgYSBEZXJpdmF0aXZlIFdvcmssIGEgY3JlZGl0IGlkZW50aWZ5aW5nIHRoZSB1c2Ugb2YgdGhlCisgICAgICBXb3JrIGluIHRoZSBEZXJpdmF0aXZlIFdvcmsgKGUuZy4sICJGcmVuY2ggdHJhbnNsYXRpb24gb2YgdGhlIFdvcmsKKyAgICAgIGJ5IE9yaWdpbmFsIEF1dGhvciwiIG9yICJTY3JlZW5wbGF5IGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkKKyAgICAgIE9yaWdpbmFsIEF1dGhvciIpLiBTdWNoIGNyZWRpdCBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55CisgICAgICByZWFzb25hYmxlIG1hbm5lcjsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgaW4gdGhlIGNhc2Ugb2YgYQorICAgICAgRGVyaXZhdGl2ZSBXb3JrIG9yIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwKKyAgICAgIGFwcGVhciB3aGVyZSBhbnkgb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwIGNyZWRpdCBhcHBlYXJzIGFuZCBpbgorICAgICAgYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzIHN1Y2ggb3RoZXIgY29tcGFyYWJsZSBhdXRob3JzaGlwCisgICAgICBjcmVkaXQuCisgICA1LgorCisgICAgICBGb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgd2hlcmUgdGhlIFdvcmsgaXMgYSBtdXNpY2FsIGNvbXBvc2l0aW9uOgorCisgICAgICAgICAxLiAqUGVyZm9ybWFuY2UgUm95YWx0aWVzIFVuZGVyIEJsYW5rZXQgTGljZW5zZXMqLiBMaWNlbnNvcgorICAgICAgICAgICAgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyCisgICAgICAgICAgICBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgcGVyZm9ybWFuY2UgcmlnaHRzIHNvY2lldHkgKGUuZy4KKyAgICAgICAgICAgIEFTQ0FQLCBCTUksIFNFU0FDKSwgcm95YWx0aWVzIGZvciB0aGUgcHVibGljIHBlcmZvcm1hbmNlIG9yCisgICAgICAgICAgICBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yayBpZgorICAgICAgICAgICAgdGhhdCBwZXJmb3JtYW5jZSBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkCisgICAgICAgICAgICB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCisgICAgICAgICAyLiAqTWVjaGFuaWNhbCBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMqLiBMaWNlbnNvcgorICAgICAgICAgICAgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyCisgICAgICAgICAgICBpbmRpdmlkdWFsbHkgb3IgdmlhIGEgbXVzaWMgcmlnaHRzIGFnZW5jeSBvciBkZXNpZ25hdGVkCisgICAgICAgICAgICBhZ2VudCAoZS5nLiBIYXJyeSBGb3ggQWdlbmN5KSwgcm95YWx0aWVzIGZvciBhbnkgcGhvbm9yZWNvcmQKKyAgICAgICAgICAgIFlvdSBjcmVhdGUgZnJvbSB0aGUgV29yayAoImNvdmVyIHZlcnNpb24iKSBhbmQgZGlzdHJpYnV0ZSwKKyAgICAgICAgICAgIHN1YmplY3QgdG8gdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uCisgICAgICAgICAgICAxMTUgb2YgdGhlIFVTIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyCisgICAgICAgICAgICBqdXJpc2RpY3Rpb25zKSwgaWYgWW91ciBkaXN0cmlidXRpb24gb2Ygc3VjaCBjb3ZlciB2ZXJzaW9uCisgICAgICAgICAgICBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsCisgICAgICAgICAgICBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uCisgICA2LiAqV2ViY2FzdGluZyBSaWdodHMgYW5kIFN0YXR1dG9yeSBSb3lhbHRpZXMqLiBGb3IgdGhlIGF2b2lkYW5jZSBvZgorICAgICAgZG91YnQsIHdoZXJlIHRoZSBXb3JrIGlzIGEgc291bmQgcmVjb3JkaW5nLCBMaWNlbnNvciByZXNlcnZlcyB0aGUKKyAgICAgIGV4Y2x1c2l2ZSByaWdodCB0byBjb2xsZWN0LCB3aGV0aGVyIGluZGl2aWR1YWxseSBvciB2aWEgYQorICAgICAgcGVyZm9ybWFuY2UtcmlnaHRzIHNvY2lldHkgKGUuZy4gU291bmRFeGNoYW5nZSksIHJveWFsdGllcyBmb3IgdGhlCisgICAgICBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSAoZS5nLiB3ZWJjYXN0KSBvZiB0aGUgV29yaywgc3ViamVjdCB0bworICAgICAgdGhlIGNvbXB1bHNvcnkgbGljZW5zZSBjcmVhdGVkIGJ5IDE3IFVTQyBTZWN0aW9uIDExNCBvZiB0aGUgVVMKKyAgICAgIENvcHlyaWdodCBBY3QgKG9yIHRoZSBlcXVpdmFsZW50IGluIG90aGVyIGp1cmlzZGljdGlvbnMpLCBpZiBZb3VyCisgICAgICBwdWJsaWMgZGlnaXRhbCBwZXJmb3JtYW5jZSBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkCisgICAgICB0b3dhcmQgY29tbWVyY2lhbCBhZHZhbnRhZ2Ugb3IgcHJpdmF0ZSBtb25ldGFyeSBjb21wZW5zYXRpb24uIAorCisqNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyKgorCitVTkxFU1MgT1RIRVJXSVNFIE1VVFVBTExZIEFHUkVFRCBUTyBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HLCBMSUNFTlNPUgorT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBBTlkKK0tJTkQgQ09OQ0VSTklORyBUSEUgV09SSywgRVhQUkVTUywgSU1QTElFRCwgU1RBVFVUT1JZIE9SIE9USEVSV0lTRSwKK0lOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9GIFRJVExFLCBNRVJDSEFOVElCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRgorTEFURU5UIE9SIE9USEVSIERFRkVDVFMsIEFDQ1VSQUNZLCBPUiBUSEUgUFJFU0VOQ0UgT0YgQUJTRU5DRSBPRiBFUlJPUlMsCitXSEVUSEVSIE9SIE5PVCBESVNDT1ZFUkFCTEUuIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFCitFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBTVUNIIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworKjYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiogRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkKK0FQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMCitUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkKK0RBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYKK0xJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworKjcuIFRlcm1pbmF0aW9uKgorCisgICAxLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUKKyAgICAgIGF1dG9tYXRpY2FsbHkgdXBvbiBhbnkgYnJlYWNoIGJ5IFlvdSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorICAgICAgSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgRGVyaXZhdGl2ZSBXb3JrcyBvcgorICAgICAgQ29sbGVjdGl2ZSBXb3JrcyBmcm9tIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90CisgICAgICBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvcgorICAgICAgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucworICAgICAgMSwgMiwgNSwgNiwgNywgYW5kIDggd2lsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCisgICAyLiBTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZAorICAgICAgaGVyZSBpcyBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0IGluCisgICAgICB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodAorICAgICAgdG8gcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wCisgICAgICBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQgYW55IHRpbWU7IHByb3ZpZGVkLCBob3dldmVyIHRoYXQgYW55IHN1Y2gKKyAgICAgIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyCisgICAgICBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZQorICAgICAgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwKKyAgICAgIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMgc3RhdGVkIGFib3ZlLgorCisqOC4gTWlzY2VsbGFuZW91cyoKKworICAgMS4gRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yCisgICAgICBhIENvbGxlY3RpdmUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZQorICAgICAgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UKKyAgICAgIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KKyAgIDIuIEVhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhCisgICAgICBEZXJpdmF0aXZlIFdvcmssIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUKKyAgICAgIG9yaWdpbmFsIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UKKyAgICAgIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMgTGljZW5zZS4KKyAgIDMuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorICAgICAgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5CisgICAgICBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIKKyAgICAgIGFjdGlvbiBieSB0aGUgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUKKyAgICAgIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbgorICAgICAgdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorICAgNC4gTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vCisgICAgICBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluCisgICAgICB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHBhcnR5IHRvIGJlIGNoYXJnZWQgd2l0aCBzdWNoIHdhaXZlciBvcgorICAgICAgY29uc2VudC4KKyAgIDUuIFRoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzCisgICAgICB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4gVGhlcmUgYXJlIG5vCisgICAgICB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMgd2l0aCByZXNwZWN0IHRvIHRoZQorICAgICAgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkKKyAgICAgIGFkZGl0aW9uYWwgcHJvdmlzaW9ucyB0aGF0IG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbQorICAgICAgWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbgorICAgICAgYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorCitDcmVhdGl2ZSBDb21tb25zIGlzIG5vdCBhIHBhcnR5IHRvIHRoaXMgTGljZW5zZSwgYW5kIG1ha2VzIG5vIHdhcnJhbnR5Cit3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4gQ3JlYXRpdmUgQ29tbW9ucyB3aWxsIG5vdCBiZQorbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMKK3doYXRzb2V2ZXIsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsCitpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gdG8gdGhpcworbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmIENyZWF0aXZlCitDb21tb25zIGhhcyBleHByZXNzbHkgaWRlbnRpZmllZCBpdHNlbGYgYXMgdGhlIExpY2Vuc29yIGhlcmV1bmRlciwgaXQKK3NoYWxsIGhhdmUgYWxsIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgTGljZW5zb3IuCisKK0V4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUgV29yaworaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIgcGFydHkgd2lsbCB1c2UgdGhlIHRyYWRlbWFyaworIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMKK3dpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZQord2lsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9ucycgdGhlbi1jdXJyZW50IHRyYWRlbWFyawordXNhZ2UgZ3VpZGVsaW5lcywgYXMgbWF5IGJlIHB1Ymxpc2hlZCBvbiBpdHMgd2Vic2l0ZSBvciBvdGhlcndpc2UgbWFkZQorYXZhaWxhYmxlIHVwb24gcmVxdWVzdCBmcm9tIHRpbWUgdG8gdGltZS4KKworQ3JlYXRpdmUgQ29tbW9ucyBtYXkgYmUgY29udGFjdGVkIGF0IGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnLworPGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnPi4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0NDUEwtQXR0cmlidXRpb24tU2hhcmVBbGlrZS1Ob25Db21tZXJjaWFsLTMuMCBiL2xpY2Vuc2VzL0NDUEwtQXR0cmlidXRpb24tU2hhcmVBbGlrZS1Ob25Db21tZXJjaWFsLTMuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTgyZmRmCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvQ0NQTC1BdHRyaWJ1dGlvbi1TaGFyZUFsaWtlLU5vbkNvbW1lcmNpYWwtMy4wCkBAIC0wLDAgKzEsMzcxIEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENyZWF0aXZlIENvbW1vbnMKKworQ3JlYXRpdmUgQ29tbW9ucyBMZWdhbCBDb2RlCisKK0F0dHJpYnV0aW9uLU5vbkNvbW1lcmNpYWwtU2hhcmVBbGlrZSAzLjAgVW5wb3J0ZWQKKworICAgICBDUkVBVElWRSBDT01NT05TIENPUlBPUkFUSU9OIElTIE5PVCBBIExBVyBGSVJNIEFORCBET0VTIE5PVCBQUk9WSURFCisgICAgIExFR0FMIFNFUlZJQ0VTLiBESVNUUklCVVRJT04gT0YgVEhJUyBMSUNFTlNFIERPRVMgTk9UIENSRUFURSBBTgorICAgICBBVFRPUk5FWS1DTElFTlQgUkVMQVRJT05TSElQLiBDUkVBVElWRSBDT01NT05TIFBST1ZJREVTIFRISVMKKyAgICAgSU5GT1JNQVRJT04gT04gQU4gIkFTLUlTIiBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTworICAgICBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMKKyAgICAgTElBQklMSVRZIEZPUiBEQU1BR0VTIFJFU1VMVElORyBGUk9NIElUUyBVU0UuCisKK0xpY2Vuc2UKKworICAgVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTCisgICBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMKKyAgIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLCisgICBPVEhFUiBUSEFOIEFTIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9SIENPUFlSSUdIVCBMQVcgSVMKKyAgIFBST0hJQklURUQuCisKKyAgIEJZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORAorICAgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVE8gVEhFIEVYVEVOVCBUSElTCisgICBMSUNFTlNFIE1BWSBCRSBDT05TSURFUkVEIFRPIEJFIEEgQ09OVFJBQ1QsIFRIRSBMSUNFTlNPUiBHUkFOVFMgWU9VIFRIRQorICAgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMKKyAgIEFORCBDT05ESVRJT05TLgorCisgICAxLiBEZWZpbml0aW9ucworICAgIGEuICJBZGFwdGF0aW9uIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yaywgb3IgdXBvbiB0aGUgV29yayBhbmQKKyAgICAgICBvdGhlciBwcmUtZXhpc3Rpbmcgd29ya3MsIHN1Y2ggYXMgYSB0cmFuc2xhdGlvbiwgYWRhcHRhdGlvbiwKKyAgICAgICBkZXJpdmF0aXZlIHdvcmssIGFycmFuZ2VtZW50IG9mIG11c2ljIG9yIG90aGVyIGFsdGVyYXRpb25zIG9mIGEKKyAgICAgICBsaXRlcmFyeSBvciBhcnRpc3RpYyB3b3JrLCBvciBwaG9ub2dyYW0gb3IgcGVyZm9ybWFuY2UgYW5kIGluY2x1ZGVzCisgICAgICAgY2luZW1hdG9ncmFwaGljIGFkYXB0YXRpb25zIG9yIGFueSBvdGhlciBmb3JtIGluIHdoaWNoIHRoZSBXb3JrIG1heQorICAgICAgIGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQgaW5jbHVkaW5nIGluIGFueSBmb3JtCisgICAgICAgcmVjb2duaXphYmx5IGRlcml2ZWQgZnJvbSB0aGUgb3JpZ2luYWwsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0CisgICAgICAgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aW9uIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiBmb3IKKyAgICAgICB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB3aGVyZSB0aGUKKyAgICAgICBXb3JrIGlzIGEgbXVzaWNhbCB3b3JrLCBwZXJmb3JtYW5jZSBvciBwaG9ub2dyYW0sIHRoZQorICAgICAgIHN5bmNocm9uaXphdGlvbiBvZiB0aGUgV29yayBpbiB0aW1lZC1yZWxhdGlvbiB3aXRoIGEgbW92aW5nIGltYWdlCisgICAgICAgKCJzeW5jaGluZyIpIHdpbGwgYmUgY29uc2lkZXJlZCBhbiBBZGFwdGF0aW9uIGZvciB0aGUgcHVycG9zZSBvZgorICAgICAgIHRoaXMgTGljZW5zZS4KKyAgICBiLiAiQ29sbGVjdGlvbiIgbWVhbnMgYSBjb2xsZWN0aW9uIG9mIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmtzLCBzdWNoCisgICAgICAgYXMgZW5jeWNsb3BlZGlhcyBhbmQgYW50aG9sb2dpZXMsIG9yIHBlcmZvcm1hbmNlcywgcGhvbm9ncmFtcyBvcgorICAgICAgIGJyb2FkY2FzdHMsIG9yIG90aGVyIHdvcmtzIG9yIHN1YmplY3QgbWF0dGVyIG90aGVyIHRoYW4gd29ya3MKKyAgICAgICBsaXN0ZWQgaW4gU2VjdGlvbiAxKGcpIGJlbG93LCB3aGljaCwgYnkgcmVhc29uIG9mIHRoZSBzZWxlY3Rpb24gYW5kCisgICAgICAgYXJyYW5nZW1lbnQgb2YgdGhlaXIgY29udGVudHMsIGNvbnN0aXR1dGUgaW50ZWxsZWN0dWFsIGNyZWF0aW9ucywKKyAgICAgICBpbiB3aGljaCB0aGUgV29yayBpcyBpbmNsdWRlZCBpbiBpdHMgZW50aXJldHkgaW4gdW5tb2RpZmllZCBmb3JtCisgICAgICAgYWxvbmcgd2l0aCBvbmUgb3IgbW9yZSBvdGhlciBjb250cmlidXRpb25zLCBlYWNoIGNvbnN0aXR1dGluZworICAgICAgIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCB3aGljaCB0b2dldGhlciBhcmUKKyAgICAgICBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEKKyAgICAgICBDb2xsZWN0aW9uIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYW4gQWRhcHRhdGlvbiAoYXMgZGVmaW5lZCBhYm92ZSkKKyAgICAgICBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyAgICBjLiAiRGlzdHJpYnV0ZSIgbWVhbnMgdG8gbWFrZSBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyB0aGUgb3JpZ2luYWwgYW5kCisgICAgICAgY29waWVzIG9mIHRoZSBXb3JrIG9yIEFkYXB0YXRpb24sIGFzIGFwcHJvcHJpYXRlLCB0aHJvdWdoIHNhbGUgb3IKKyAgICAgICBvdGhlciB0cmFuc2ZlciBvZiBvd25lcnNoaXAuCisgICAgZC4gIkxpY2Vuc2UgRWxlbWVudHMiIG1lYW5zIHRoZSBmb2xsb3dpbmcgaGlnaC1sZXZlbCBsaWNlbnNlCisgICAgICAgYXR0cmlidXRlcyBhcyBzZWxlY3RlZCBieSBMaWNlbnNvciBhbmQgaW5kaWNhdGVkIGluIHRoZSB0aXRsZSBvZgorICAgICAgIHRoaXMgTGljZW5zZTogQXR0cmlidXRpb24sIE5vbmNvbW1lcmNpYWwsIFNoYXJlQWxpa2UuCisgICAgZS4gIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCwgaW5kaXZpZHVhbHMsIGVudGl0eSBvciBlbnRpdGllcworICAgICAgIHRoYXQgb2ZmZXIocykgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyAgICBmLiAiT3JpZ2luYWwgQXV0aG9yIiBtZWFucywgaW4gdGhlIGNhc2Ugb2YgYSBsaXRlcmFyeSBvciBhcnRpc3RpYworICAgICAgIHdvcmssIHRoZSBpbmRpdmlkdWFsLCBpbmRpdmlkdWFscywgZW50aXR5IG9yIGVudGl0aWVzIHdobyBjcmVhdGVkCisgICAgICAgdGhlIFdvcmsgb3IgaWYgbm8gaW5kaXZpZHVhbCBvciBlbnRpdHkgY2FuIGJlIGlkZW50aWZpZWQsIHRoZQorICAgICAgIHB1Ymxpc2hlcjsgYW5kIGluIGFkZGl0aW9uIChpKSBpbiB0aGUgY2FzZSBvZiBhIHBlcmZvcm1hbmNlIHRoZQorICAgICAgIGFjdG9ycywgc2luZ2VycywgbXVzaWNpYW5zLCBkYW5jZXJzLCBhbmQgb3RoZXIgcGVyc29ucyB3aG8gYWN0LAorICAgICAgIHNpbmcsIGRlbGl2ZXIsIGRlY2xhaW0sIHBsYXkgaW4sIGludGVycHJldCBvciBvdGhlcndpc2UgcGVyZm9ybQorICAgICAgIGxpdGVyYXJ5IG9yIGFydGlzdGljIHdvcmtzIG9yIGV4cHJlc3Npb25zIG9mIGZvbGtsb3JlOyAoaWkpIGluIHRoZQorICAgICAgIGNhc2Ugb2YgYSBwaG9ub2dyYW0gdGhlIHByb2R1Y2VyIGJlaW5nIHRoZSBwZXJzb24gb3IgbGVnYWwgZW50aXR5CisgICAgICAgd2hvIGZpcnN0IGZpeGVzIHRoZSBzb3VuZHMgb2YgYSBwZXJmb3JtYW5jZSBvciBvdGhlciBzb3VuZHM7IGFuZCwKKyAgICAgICAoaWlpKSBpbiB0aGUgY2FzZSBvZiBicm9hZGNhc3RzLCB0aGUgb3JnYW5pemF0aW9uIHRoYXQgdHJhbnNtaXRzCisgICAgICAgdGhlIGJyb2FkY2FzdC4KKyAgICBnLiAiV29yayIgbWVhbnMgdGhlIGxpdGVyYXJ5IGFuZC9vciBhcnRpc3RpYyB3b3JrIG9mZmVyZWQgdW5kZXIgdGhlCisgICAgICAgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IHByb2R1Y3Rpb24KKyAgICAgICBpbiB0aGUgbGl0ZXJhcnksIHNjaWVudGlmaWMgYW5kIGFydGlzdGljIGRvbWFpbiwgd2hhdGV2ZXIgbWF5IGJlCisgICAgICAgdGhlIG1vZGUgb3IgZm9ybSBvZiBpdHMgZXhwcmVzc2lvbiBpbmNsdWRpbmcgZGlnaXRhbCBmb3JtLCBzdWNoIGFzCisgICAgICAgYSBib29rLCBwYW1waGxldCBhbmQgb3RoZXIgd3JpdGluZzsgYSBsZWN0dXJlLCBhZGRyZXNzLCBzZXJtb24gb3IKKyAgICAgICBvdGhlciB3b3JrIG9mIHRoZSBzYW1lIG5hdHVyZTsgYSBkcmFtYXRpYyBvciBkcmFtYXRpY28tbXVzaWNhbAorICAgICAgIHdvcms7IGEgY2hvcmVvZ3JhcGhpYyB3b3JrIG9yIGVudGVydGFpbm1lbnQgaW4gZHVtYiBzaG93OyBhIG11c2ljYWwKKyAgICAgICBjb21wb3NpdGlvbiB3aXRoIG9yIHdpdGhvdXQgd29yZHM7IGEgY2luZW1hdG9ncmFwaGljIHdvcmsgdG8gd2hpY2gKKyAgICAgICBhcmUgYXNzaW1pbGF0ZWQgd29ya3MgZXhwcmVzc2VkIGJ5IGEgcHJvY2VzcyBhbmFsb2dvdXMgdG8KKyAgICAgICBjaW5lbWF0b2dyYXBoeTsgYSB3b3JrIG9mIGRyYXdpbmcsIHBhaW50aW5nLCBhcmNoaXRlY3R1cmUsCisgICAgICAgc2N1bHB0dXJlLCBlbmdyYXZpbmcgb3IgbGl0aG9ncmFwaHk7IGEgcGhvdG9ncmFwaGljIHdvcmsgdG8gd2hpY2gKKyAgICAgICBhcmUgYXNzaW1pbGF0ZWQgd29ya3MgZXhwcmVzc2VkIGJ5IGEgcHJvY2VzcyBhbmFsb2dvdXMgdG8KKyAgICAgICBwaG90b2dyYXBoeTsgYSB3b3JrIG9mIGFwcGxpZWQgYXJ0OyBhbiBpbGx1c3RyYXRpb24sIG1hcCwgcGxhbiwKKyAgICAgICBza2V0Y2ggb3IgdGhyZWUtZGltZW5zaW9uYWwgd29yayByZWxhdGl2ZSB0byBnZW9ncmFwaHksIHRvcG9ncmFwaHksCisgICAgICAgYXJjaGl0ZWN0dXJlIG9yIHNjaWVuY2U7IGEgcGVyZm9ybWFuY2U7IGEgYnJvYWRjYXN0OyBhIHBob25vZ3JhbTsgYQorICAgICAgIGNvbXBpbGF0aW9uIG9mIGRhdGEgdG8gdGhlIGV4dGVudCBpdCBpcyBwcm90ZWN0ZWQgYXMgYQorICAgICAgIGNvcHlyaWdodGFibGUgd29yazsgb3IgYSB3b3JrIHBlcmZvcm1lZCBieSBhIHZhcmlldHkgb3IgY2lyY3VzCisgICAgICAgcGVyZm9ybWVyIHRvIHRoZSBleHRlbnQgaXQgaXMgbm90IG90aGVyd2lzZSBjb25zaWRlcmVkIGEgbGl0ZXJhcnkKKyAgICAgICBvciBhcnRpc3RpYyB3b3JrLgorICAgIGguICJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMKKyAgICAgICBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZQorICAgICAgIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24KKyAgICAgICBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYQorICAgICAgIHByZXZpb3VzIHZpb2xhdGlvbi4KKyAgICBpLiAiUHVibGljbHkgUGVyZm9ybSIgbWVhbnMgdG8gcGVyZm9ybSBwdWJsaWMgcmVjaXRhdGlvbnMgb2YgdGhlIFdvcmsKKyAgICAgICBhbmQgdG8gY29tbXVuaWNhdGUgdG8gdGhlIHB1YmxpYyB0aG9zZSBwdWJsaWMgcmVjaXRhdGlvbnMsIGJ5IGFueQorICAgICAgIG1lYW5zIG9yIHByb2Nlc3MsIGluY2x1ZGluZyBieSB3aXJlIG9yIHdpcmVsZXNzIG1lYW5zIG9yIHB1YmxpYworICAgICAgIGRpZ2l0YWwgcGVyZm9ybWFuY2VzOyB0byBtYWtlIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIFdvcmtzIGluIHN1Y2gKKyAgICAgICBhIHdheSB0aGF0IG1lbWJlcnMgb2YgdGhlIHB1YmxpYyBtYXkgYWNjZXNzIHRoZXNlIFdvcmtzIGZyb20gYQorICAgICAgIHBsYWNlIGFuZCBhdCBhIHBsYWNlIGluZGl2aWR1YWxseSBjaG9zZW4gYnkgdGhlbTsgdG8gcGVyZm9ybSB0aGUKKyAgICAgICBXb3JrIHRvIHRoZSBwdWJsaWMgYnkgYW55IG1lYW5zIG9yIHByb2Nlc3MgYW5kIHRoZSBjb21tdW5pY2F0aW9uIHRvCisgICAgICAgdGhlIHB1YmxpYyBvZiB0aGUgcGVyZm9ybWFuY2VzIG9mIHRoZSBXb3JrLCBpbmNsdWRpbmcgYnkgcHVibGljCisgICAgICAgZGlnaXRhbCBwZXJmb3JtYW5jZTsgdG8gYnJvYWRjYXN0IGFuZCByZWJyb2FkY2FzdCB0aGUgV29yayBieSBhbnkKKyAgICAgICBtZWFucyBpbmNsdWRpbmcgc2lnbnMsIHNvdW5kcyBvciBpbWFnZXMuCisgICAgai4gIlJlcHJvZHVjZSIgbWVhbnMgdG8gbWFrZSBjb3BpZXMgb2YgdGhlIFdvcmsgYnkgYW55IG1lYW5zIGluY2x1ZGluZworICAgICAgIHdpdGhvdXQgbGltaXRhdGlvbiBieSBzb3VuZCBvciB2aXN1YWwgcmVjb3JkaW5ncyBhbmQgdGhlIHJpZ2h0IG9mCisgICAgICAgZml4YXRpb24gYW5kIHJlcHJvZHVjaW5nIGZpeGF0aW9ucyBvZiB0aGUgV29yaywgaW5jbHVkaW5nIHN0b3JhZ2UKKyAgICAgICBvZiBhIHByb3RlY3RlZCBwZXJmb3JtYW5jZSBvciBwaG9ub2dyYW0gaW4gZGlnaXRhbCBmb3JtIG9yIG90aGVyCisgICAgICAgZWxlY3Ryb25pYyBtZWRpdW0uCisKKyAgIDIuIEZhaXIgRGVhbGluZyBSaWdodHMuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIHJlZHVjZSwKKyAgIGxpbWl0LCBvciByZXN0cmljdCBhbnkgdXNlcyBmcmVlIGZyb20gY29weXJpZ2h0IG9yIHJpZ2h0cyBhcmlzaW5nIGZyb20KKyAgIGxpbWl0YXRpb25zIG9yIGV4Y2VwdGlvbnMgdGhhdCBhcmUgcHJvdmlkZWQgZm9yIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUKKyAgIGNvcHlyaWdodCBwcm90ZWN0aW9uIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCisgICAzLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsCisgICBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLAorICAgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0bworICAgZXhlcmNpc2UgdGhlIHJpZ2h0cyBpbiB0aGUgV29yayBhcyBzdGF0ZWQgYmVsb3c6CisgICAgYS4gdG8gUmVwcm9kdWNlIHRoZSBXb3JrLCB0byBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlCisgICAgICAgQ29sbGVjdGlvbnMsIGFuZCB0byBSZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZQorICAgICAgIENvbGxlY3Rpb25zOworICAgIGIuIHRvIGNyZWF0ZSBhbmQgUmVwcm9kdWNlIEFkYXB0YXRpb25zIHByb3ZpZGVkIHRoYXQgYW55IHN1Y2gKKyAgICAgICBBZGFwdGF0aW9uLCBpbmNsdWRpbmcgYW55IHRyYW5zbGF0aW9uIGluIGFueSBtZWRpdW0sIHRha2VzCisgICAgICAgcmVhc29uYWJsZSBzdGVwcyB0byBjbGVhcmx5IGxhYmVsLCBkZW1hcmNhdGUgb3Igb3RoZXJ3aXNlIGlkZW50aWZ5CisgICAgICAgdGhhdCBjaGFuZ2VzIHdlcmUgbWFkZSB0byB0aGUgb3JpZ2luYWwgV29yay4gRm9yIGV4YW1wbGUsIGEKKyAgICAgICB0cmFuc2xhdGlvbiBjb3VsZCBiZSBtYXJrZWQgIlRoZSBvcmlnaW5hbCB3b3JrIHdhcyB0cmFuc2xhdGVkIGZyb20KKyAgICAgICBFbmdsaXNoIHRvIFNwYW5pc2gsIiBvciBhIG1vZGlmaWNhdGlvbiBjb3VsZCBpbmRpY2F0ZSAiVGhlIG9yaWdpbmFsCisgICAgICAgd29yayBoYXMgYmVlbiBtb2RpZmllZC4iOworICAgIGMuIHRvIERpc3RyaWJ1dGUgYW5kIFB1YmxpY2x5IFBlcmZvcm0gdGhlIFdvcmsgaW5jbHVkaW5nIGFzCisgICAgICAgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3Rpb25zOyBhbmQsCisgICAgZC4gdG8gRGlzdHJpYnV0ZSBhbmQgUHVibGljbHkgUGVyZm9ybSBBZGFwdGF0aW9ucy4KKworICAgVGhlIGFib3ZlIHJpZ2h0cyBtYXkgYmUgZXhlcmNpc2VkIGluIGFsbCBtZWRpYSBhbmQgZm9ybWF0cyB3aGV0aGVyIG5vdworICAga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZQorICAgc3VjaCBtb2RpZmljYXRpb25zIGFzIGFyZSB0ZWNobmljYWxseSBuZWNlc3NhcnkgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cworICAgaW4gb3RoZXIgbWVkaWEgYW5kIGZvcm1hdHMuIFN1YmplY3QgdG8gU2VjdGlvbiA4KGYpLCBhbGwgcmlnaHRzIG5vdAorICAgZXhwcmVzc2x5IGdyYW50ZWQgYnkgTGljZW5zb3IgYXJlIGhlcmVieSByZXNlcnZlZCwgaW5jbHVkaW5nIGJ1dCBub3QKKyAgIGxpbWl0ZWQgdG8gdGhlIHJpZ2h0cyBkZXNjcmliZWQgaW4gU2VjdGlvbiA0KGUpLgorCisgICA0LiBSZXN0cmljdGlvbnMuIFRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseQorICAgbWFkZSBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorICAgIGEuIFlvdSBtYXkgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIG9ubHkgdW5kZXIgdGhlCisgICAgICAgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0KKyAgICAgICBSZXNvdXJjZSBJZGVudGlmaWVyIChVUkkpIGZvciwgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUKKyAgICAgICBXb3JrIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yCisgICAgICAgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzCisgICAgICAgTGljZW5zZSBvciB0aGUgYWJpbGl0eSBvZiB0aGUgcmVjaXBpZW50IG9mIHRoZSBXb3JrIHRvIGV4ZXJjaXNlIHRoZQorICAgICAgIHJpZ2h0cyBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZS4KKyAgICAgICBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcworICAgICAgIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzIHdpdGgKKyAgICAgICBldmVyeSBjb3B5IG9mIHRoZSBXb3JrIFlvdSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0uIFdoZW4gWW91CisgICAgICAgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrLCBZb3UgbWF5IG5vdCBpbXBvc2UgYW55CisgICAgICAgZWZmZWN0aXZlIHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgb24gdGhlIFdvcmsgdGhhdCByZXN0cmljdCB0aGUKKyAgICAgICBhYmlsaXR5IG9mIGEgcmVjaXBpZW50IG9mIHRoZSBXb3JrIGZyb20gWW91IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMKKyAgICAgICBncmFudGVkIHRvIHRoYXQgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZS4gVGhpcworICAgICAgIFNlY3Rpb24gNChhKSBhcHBsaWVzIHRvIHRoZSBXb3JrIGFzIGluY29ycG9yYXRlZCBpbiBhIENvbGxlY3Rpb24sCisgICAgICAgYnV0IHRoaXMgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGlvbiBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZgorICAgICAgIHRvIGJlIG1hZGUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJZiBZb3UgY3JlYXRlIGEKKyAgICAgICBDb2xsZWN0aW9uLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudAorICAgICAgIHByYWN0aWNhYmxlLCByZW1vdmUgZnJvbSB0aGUgQ29sbGVjdGlvbiBhbnkgY3JlZGl0IGFzIHJlcXVpcmVkIGJ5CisgICAgICAgU2VjdGlvbiA0KGQpLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYW4gQWRhcHRhdGlvbiwgdXBvbgorICAgICAgIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwKKyAgICAgICByZW1vdmUgZnJvbSB0aGUgQWRhcHRhdGlvbiBhbnkgY3JlZGl0IGFzIHJlcXVpcmVkIGJ5IFNlY3Rpb24gNChkKSwKKyAgICAgICBhcyByZXF1ZXN0ZWQuCisgICAgYi4gWW91IG1heSBEaXN0cmlidXRlIG9yIFB1YmxpY2x5IFBlcmZvcm0gYW4gQWRhcHRhdGlvbiBvbmx5IHVuZGVyOgorICAgICAgIChpKSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlOyAoaWkpIGEgbGF0ZXIgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UKKyAgICAgICB3aXRoIHRoZSBzYW1lIExpY2Vuc2UgRWxlbWVudHMgYXMgdGhpcyBMaWNlbnNlOyAoaWlpKSBhIENyZWF0aXZlCisgICAgICAgQ29tbW9ucyBqdXJpc2RpY3Rpb24gbGljZW5zZSAoZWl0aGVyIHRoaXMgb3IgYSBsYXRlciBsaWNlbnNlCisgICAgICAgdmVyc2lvbikgdGhhdCBjb250YWlucyB0aGUgc2FtZSBMaWNlbnNlIEVsZW1lbnRzIGFzIHRoaXMgTGljZW5zZQorICAgICAgIChlLmcuLCBBdHRyaWJ1dGlvbi1Ob25Db21tZXJjaWFsLVNoYXJlQWxpa2UgMy4wIFVTKSAoIkFwcGxpY2FibGUKKyAgICAgICBMaWNlbnNlIikuIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mLCBvciB0aGUgVVJJLCBmb3IgQXBwbGljYWJsZQorICAgICAgIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIGVhY2ggQWRhcHRhdGlvbiBZb3UgRGlzdHJpYnV0ZSBvcgorICAgICAgIFB1YmxpY2x5IFBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlCisgICAgICAgQWRhcHRhdGlvbiB0aGF0IHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGUgQXBwbGljYWJsZSBMaWNlbnNlIG9yIHRoZQorICAgICAgIGFiaWxpdHkgb2YgdGhlIHJlY2lwaWVudCBvZiB0aGUgQWRhcHRhdGlvbiB0byBleGVyY2lzZSB0aGUgcmlnaHRzCisgICAgICAgZ3JhbnRlZCB0byB0aGF0IHJlY2lwaWVudCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEFwcGxpY2FibGUKKyAgICAgICBMaWNlbnNlLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoZQorICAgICAgIEFwcGxpY2FibGUgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcyB3aXRoIGV2ZXJ5CisgICAgICAgY29weSBvZiB0aGUgV29yayBhcyBpbmNsdWRlZCBpbiB0aGUgQWRhcHRhdGlvbiBZb3UgRGlzdHJpYnV0ZSBvcgorICAgICAgIFB1YmxpY2x5IFBlcmZvcm0uIFdoZW4gWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUKKyAgICAgICBBZGFwdGF0aW9uLCBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGVmZmVjdGl2ZSB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzCisgICAgICAgb24gdGhlIEFkYXB0YXRpb24gdGhhdCByZXN0cmljdCB0aGUgYWJpbGl0eSBvZiBhIHJlY2lwaWVudCBvZiB0aGUKKyAgICAgICBBZGFwdGF0aW9uIGZyb20gWW91IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCB0byB0aGF0CisgICAgICAgcmVjaXBpZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQXBwbGljYWJsZSBMaWNlbnNlLiBUaGlzIFNlY3Rpb24KKyAgICAgICA0KGIpIGFwcGxpZXMgdG8gdGhlIEFkYXB0YXRpb24gYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGlvbiwgYnV0CisgICAgICAgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZSBDb2xsZWN0aW9uIGFwYXJ0IGZyb20gdGhlIEFkYXB0YXRpb24KKyAgICAgICBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgQXBwbGljYWJsZSBMaWNlbnNlLgorICAgIGMuIFlvdSBtYXkgbm90IGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGluIFNlY3Rpb24gMworICAgICAgIGFib3ZlIGluIGFueSBtYW5uZXIgdGhhdCBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkCisgICAgICAgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUgbW9uZXRhcnkgY29tcGVuc2F0aW9uLiBUaGUKKyAgICAgICBleGNoYW5nZSBvZiB0aGUgV29yayBmb3Igb3RoZXIgY29weXJpZ2h0ZWQgd29ya3MgYnkgbWVhbnMgb2YKKyAgICAgICBkaWdpdGFsIGZpbGUtc2hhcmluZyBvciBvdGhlcndpc2Ugc2hhbGwgbm90IGJlIGNvbnNpZGVyZWQgdG8gYmUKKyAgICAgICBpbnRlbmRlZCBmb3Igb3IgZGlyZWN0ZWQgdG93YXJkIGNvbW1lcmNpYWwgYWR2YW50YWdlIG9yIHByaXZhdGUKKyAgICAgICBtb25ldGFyeSBjb21wZW5zYXRpb24sIHByb3ZpZGVkIHRoZXJlIGlzIG5vIHBheW1lbnQgb2YgYW55IG1vbmV0YXJ5CisgICAgICAgY29tcGVuc2F0aW9uIGluIGNvbi1uZWN0aW9uIHdpdGggdGhlIGV4Y2hhbmdlIG9mIGNvcHlyaWdodGVkIHdvcmtzLgorICAgIGQuIElmIFlvdSBEaXN0cmlidXRlLCBvciBQdWJsaWNseSBQZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBBZGFwdGF0aW9ucworICAgICAgIG9yIENvbGxlY3Rpb25zLCBZb3UgbXVzdCwgdW5sZXNzIGEgcmVxdWVzdCBoYXMgYmVlbiBtYWRlIHB1cnN1YW50CisgICAgICAgdG8gU2VjdGlvbiA0KGEpLCBrZWVwIGludGFjdCBhbGwgY29weXJpZ2h0IG5vdGljZXMgZm9yIHRoZSBXb3JrIGFuZAorICAgICAgIHByb3ZpZGUsIHJlYXNvbmFibGUgdG8gdGhlIG1lZGl1bSBvciBtZWFucyBZb3UgYXJlIHV0aWxpemluZzogKGkpCisgICAgICAgdGhlIG5hbWUgb2YgdGhlIE9yaWdpbmFsIEF1dGhvciAob3IgcHNldWRvbnltLCBpZiBhcHBsaWNhYmxlKSBpZgorICAgICAgIHN1cHBsaWVkLCBhbmQvb3IgaWYgdGhlIE9yaWdpbmFsIEF1dGhvciBhbmQvb3IgTGljZW5zb3IgZGVzaWduYXRlCisgICAgICAgYW5vdGhlciBwYXJ0eSBvciBwYXJ0aWVzIChlLmcuLCBhIHNwb25zb3IgaW5zdGl0dXRlLCBwdWJsaXNoaW5nCisgICAgICAgZW50aXR5LCBqb3VybmFsKSBmb3IgYXR0cmlidXRpb24gKCJBdHRyaWJ1dGlvbiBQYXJ0aWVzIikgaW4KKyAgICAgICBMaWNlbnNvcidzIGNvcHlyaWdodCBub3RpY2UsIHRlcm1zIG9mIHNlcnZpY2Ugb3IgYnkgb3RoZXIKKyAgICAgICByZWFzb25hYmxlIG1lYW5zLCB0aGUgbmFtZSBvZiBzdWNoIHBhcnR5IG9yIHBhcnRpZXM7IChpaSkgdGhlIHRpdGxlCisgICAgICAgb2YgdGhlIFdvcmsgaWYgc3VwcGxpZWQ7IChpaWkpIHRvIHRoZSBleHRlbnQgcmVhc29uYWJseQorICAgICAgIHByYWN0aWNhYmxlLCB0aGUgVVJJLCBpZiBhbnksIHRoYXQgTGljZW5zb3Igc3BlY2lmaWVzIHRvIGJlCisgICAgICAgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrLCB1bmxlc3Mgc3VjaCBVUkkgZG9lcyBub3QgcmVmZXIgdG8gdGhlCisgICAgICAgY29weXJpZ2h0IG5vdGljZSBvciBsaWNlbnNpbmcgaW5mb3JtYXRpb24gZm9yIHRoZSBXb3JrOyBhbmQsIChpdikKKyAgICAgICBjb25zaXN0ZW50IHdpdGggU2VjdGlvbiAzKGIpLCBpbiB0aGUgY2FzZSBvZiBhbiBBZGFwdGF0aW9uLCBhCisgICAgICAgY3JlZGl0IGlkZW50aWZ5aW5nIHRoZSB1c2Ugb2YgdGhlIFdvcmsgaW4gdGhlIEFkYXB0YXRpb24gKGUuZy4sCisgICAgICAgIkZyZW5jaCB0cmFuc2xhdGlvbiBvZiB0aGUgV29yayBieSBPcmlnaW5hbCBBdXRob3IsIiBvciAiU2NyZWVucGxheQorICAgICAgIGJhc2VkIG9uIG9yaWdpbmFsIFdvcmsgYnkgT3JpZ2luYWwgQXV0aG9yIikuIFRoZSBjcmVkaXQgcmVxdWlyZWQgYnkKKyAgICAgICB0aGlzIFNlY3Rpb24gNChkKSBtYXkgYmUgaW1wbGVtZW50ZWQgaW4gYW55IHJlYXNvbmFibGUgbWFubmVyOworICAgICAgIHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgQWRhcHRhdGlvbiBvciBDb2xsZWN0aW9uLAorICAgICAgIGF0IGEgbWluaW11bSBzdWNoIGNyZWRpdCB3aWxsIGFwcGVhciwgaWYgYSBjcmVkaXQgZm9yIGFsbAorICAgICAgIGNvbnRyaWJ1dGluZyBhdXRob3JzIG9mIHRoZSBBZGFwdGF0aW9uIG9yIENvbGxlY3Rpb24gYXBwZWFycywgdGhlbgorICAgICAgIGFzIHBhcnQgb2YgdGhlc2UgY3JlZGl0cyBhbmQgaW4gYSBtYW5uZXIgYXQgbGVhc3QgYXMgcHJvbWluZW50IGFzCisgICAgICAgdGhlIGNyZWRpdHMgZm9yIHRoZSBvdGhlciBjb250cmlidXRpbmcgYXV0aG9ycy4gRm9yIHRoZSBhdm9pZGFuY2UKKyAgICAgICBvZiBkb3VidCwgWW91IG1heSBvbmx5IHVzZSB0aGUgY3JlZGl0IHJlcXVpcmVkIGJ5IHRoaXMgU2VjdGlvbiBmb3IKKyAgICAgICB0aGUgcHVycG9zZSBvZiBhdHRyaWJ1dGlvbiBpbiB0aGUgbWFubmVyIHNldCBvdXQgYWJvdmUgYW5kLCBieQorICAgICAgIGV4ZXJjaXNpbmcgWW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLCBZb3UgbWF5IG5vdCBpbXBsaWNpdGx5CisgICAgICAgb3IgZXhwbGljaXRseSBhc3NlcnQgb3IgaW1wbHkgYW55IGNvbm5lY3Rpb24gd2l0aCwgc3BvbnNvcnNoaXAgb3IKKyAgICAgICBlbmRvcnNlbWVudCBieSB0aGUgT3JpZ2luYWwgQXV0aG9yLCBMaWNlbnNvciBhbmQvb3IgQXR0cmlidXRpb24KKyAgICAgICBQYXJ0aWVzLCBhcyBhcHByb3ByaWF0ZSwgb2YgWW91IG9yIFlvdXIgdXNlIG9mIHRoZSBXb3JrLCB3aXRob3V0CisgICAgICAgdGhlIHNlcGFyYXRlLCBleHByZXNzIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgT3JpZ2luYWwKKyAgICAgICBBdXRob3IsIExpY2Vuc29yIGFuZC9vciBBdHRyaWJ1dGlvbiBQYXJ0aWVzLgorICAgIGUuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0OgorICAgICAgICAgaS4gTm9uLXdhaXZhYmxlIENvbXB1bHNvcnkgTGljZW5zZSBTY2hlbWVzLiBJbiB0aG9zZQorICAgICAgICAgICAganVyaXNkaWN0aW9ucyBpbiB3aGljaCB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgdGhyb3VnaAorICAgICAgICAgICAgYW55IHN0YXR1dG9yeSBvciBjb21wdWxzb3J5IGxpY2Vuc2luZyBzY2hlbWUgY2Fubm90IGJlIHdhaXZlZCwKKyAgICAgICAgICAgIHRoZSBMaWNlbnNvciByZXNlcnZlcyB0aGUgZXhjbHVzaXZlIHJpZ2h0IHRvIGNvbGxlY3Qgc3VjaAorICAgICAgICAgICAgcm95YWx0aWVzIGZvciBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlcgorICAgICAgICAgICAgdGhpcyBMaWNlbnNlOworICAgICAgICBpaS4gV2FpdmFibGUgQ29tcHVsc29yeSBMaWNlbnNlIFNjaGVtZXMuIEluIHRob3NlIGp1cmlzZGljdGlvbnMgaW4KKyAgICAgICAgICAgIHdoaWNoIHRoZSByaWdodCB0byBjb2xsZWN0IHJveWFsdGllcyB0aHJvdWdoIGFueSBzdGF0dXRvcnkgb3IKKyAgICAgICAgICAgIGNvbXB1bHNvcnkgbGljZW5zaW5nIHNjaGVtZSBjYW4gYmUgd2FpdmVkLCB0aGUgTGljZW5zb3IKKyAgICAgICAgICAgIHJlc2VydmVzIHRoZSBleGNsdXNpdmUgcmlnaHQgdG8gY29sbGVjdCBzdWNoIHJveWFsdGllcyBmb3IgYW55CisgICAgICAgICAgICBleGVyY2lzZSBieSBZb3Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSBpZgorICAgICAgICAgICAgWW91ciBleGVyY2lzZSBvZiBzdWNoIHJpZ2h0cyBpcyBmb3IgYSBwdXJwb3NlIG9yIHVzZSB3aGljaCBpcworICAgICAgICAgICAgb3RoZXJ3aXNlIHRoYW4gbm9uY29tbWVyY2lhbCBhcyBwZXJtaXR0ZWQgdW5kZXIgU2VjdGlvbiA0KGMpCisgICAgICAgICAgICBhbmQgb3RoZXJ3aXNlIHdhaXZlcyB0aGUgcmlnaHQgdG8gY29sbGVjdCByb3lhbHRpZXMgdGhyb3VnaAorICAgICAgICAgICAgYW55IHN0YXR1dG9yeSBvciBjb21wdWxzb3J5IGxpY2Vuc2luZyBzY2hlbWU7IGFuZCwKKyAgICAgICAgaWlpLiBWb2x1bnRhcnkgTGljZW5zZSBTY2hlbWVzLiBUaGUgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvCisgICAgICAgICAgICBjb2xsZWN0IHJveWFsdGllcywgd2hldGhlciBpbmRpdmlkdWFsbHkgb3IsIGluIHRoZSBldmVudCB0aGF0CisgICAgICAgICAgICB0aGUgTGljZW5zb3IgaXMgYSBtZW1iZXIgb2YgYSBjb2xsZWN0aW5nIHNvY2lldHkgdGhhdAorICAgICAgICAgICAgYWRtaW5pc3RlcnMgdm9sdW50YXJ5IGxpY2Vuc2luZyBzY2hlbWVzLCB2aWEgdGhhdCBzb2NpZXR5LAorICAgICAgICAgICAgZnJvbSBhbnkgZXhlcmNpc2UgYnkgWW91IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzCisgICAgICAgICAgICBMaWNlbnNlIHRoYXQgaXMgZm9yIGEgcHVycG9zZSBvciB1c2Ugd2hpY2ggaXMgb3RoZXJ3aXNlIHRoYW4KKyAgICAgICAgICAgIG5vbmNvbW1lcmNpYWwgYXMgcGVybWl0dGVkIHVuZGVyIFNlY3Rpb24gNChjKS4KKyAgICBmLiBFeGNlcHQgYXMgb3RoZXJ3aXNlIGFncmVlZCBpbiB3cml0aW5nIGJ5IHRoZSBMaWNlbnNvciBvciBhcyBtYXkgYmUKKyAgICAgICBvdGhlcndpc2UgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LCBpZiBZb3UgUmVwcm9kdWNlLCBEaXN0cmlidXRlCisgICAgICAgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBlaXRoZXIgYnkgaXRzZWxmIG9yIGFzIHBhcnQgb2YgYW55CisgICAgICAgQWRhcHRhdGlvbnMgb3IgQ29sbGVjdGlvbnMsIFlvdSBtdXN0IG5vdCBkaXN0b3J0LCBtdXRpbGF0ZSwgbW9kaWZ5CisgICAgICAgb3IgdGFrZSBvdGhlciBkZXJvZ2F0b3J5IGFjdGlvbiBpbiByZWxhdGlvbiB0byB0aGUgV29yayB3aGljaCB3b3VsZAorICAgICAgIGJlIHByZWp1ZGljaWFsIHRvIHRoZSBPcmlnaW5hbCBBdXRob3IncyBob25vciBvciByZXB1dGF0aW9uLgorICAgICAgIExpY2Vuc29yIGFncmVlcyB0aGF0IGluIHRob3NlIGp1cmlzZGljdGlvbnMgKGUuZy4gSmFwYW4pLCBpbiB3aGljaAorICAgICAgIGFueSBleGVyY2lzZSBvZiB0aGUgcmlnaHQgZ3JhbnRlZCBpbiBTZWN0aW9uIDMoYikgb2YgdGhpcyBMaWNlbnNlCisgICAgICAgKHRoZSByaWdodCB0byBtYWtlIEFkYXB0YXRpb25zKSB3b3VsZCBiZSBkZWVtZWQgdG8gYmUgYSBkaXN0b3J0aW9uLAorICAgICAgIG11dGlsYXRpb24sIG1vZGlmaWNhdGlvbiBvciBvdGhlciBkZXJvZ2F0b3J5IGFjdGlvbiBwcmVqdWRpY2lhbCB0bworICAgICAgIHRoZSBPcmlnaW5hbCBBdXRob3IncyBob25vciBhbmQgcmVwdXRhdGlvbiwgdGhlIExpY2Vuc29yIHdpbGwgd2FpdmUKKyAgICAgICBvciBub3QgYXNzZXJ0LCBhcyBhcHByb3ByaWF0ZSwgdGhpcyBTZWN0aW9uLCB0byB0aGUgZnVsbGVzdCBleHRlbnQKKyAgICAgICBwZXJtaXR0ZWQgYnkgdGhlIGFwcGxpY2FibGUgbmF0aW9uYWwgbGF3LCB0byBlbmFibGUgWW91IHRvCisgICAgICAgcmVhc29uYWJseSBleGVyY2lzZSBZb3VyIHJpZ2h0IHVuZGVyIFNlY3Rpb24gMyhiKSBvZiB0aGlzIExpY2Vuc2UKKyAgICAgICAocmlnaHQgdG8gbWFrZSBBZGFwdGF0aW9ucykgYnV0IG5vdCBvdGhlcndpc2UuCisKKyAgIDUuIFJlcHJlc2VudGF0aW9ucywgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcgorCisgICBVTkxFU1MgT1RIRVJXSVNFIE1VVFVBTExZIEFHUkVFRCBUTyBCWSBUSEUgUEFSVElFUyBJTiBXUklUSU5HIEFORCBUTworICAgVEhFIEZVTExFU1QgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVywgTElDRU5TT1IgT0ZGRVJTIFRIRQorICAgV09SSyBBUy1JUyBBTkQgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQKKyAgIENPTkNFUk5JTkcgVEhFIFdPUkssIEVYUFJFU1MsIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsCisgICBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRBQklMSVRZLAorICAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTklORlJJTkdFTUVOVCwgT1IgVEhFIEFCU0VOQ0UgT0YKKyAgIExBVEVOVCBPUiBPVEhFUiBERUZFQ1RTLCBBQ0NVUkFDWSwgT1IgVEhFIFBSRVNFTkNFIE9GIEFCU0VOQ0UgT0YKKyAgIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XCisgICBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gVEhJUyBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTworICAgWU9VLgorCisgICA2LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4gRVhDRVBUIFRPIFRIRSBFWFRFTlQgUkVRVUlSRUQgQlkgQVBQTElDQUJMRQorICAgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIExJQ0VOU09SIEJFIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IKKyAgIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUworICAgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUkssIEVWRU4gSUYgTElDRU5TT1IKKyAgIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworICAgNy4gVGVybWluYXRpb24KKyAgICBhLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUKKyAgICAgICBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyAgICAgICBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBBZGFwdGF0aW9ucyBvcgorICAgICAgIENvbGxlY3Rpb25zIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZQorICAgICAgIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgcHJvdmlkZWQgc3VjaCBpbmRpdmlkdWFscyBvciBlbnRpdGllcworICAgICAgIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2Ugd2l0aCB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNSwgNiwKKyAgICAgICA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KKyAgICBiLiBTdWJqZWN0IHRvIHRoZSBhYm92ZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlCisgICAgICAgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUKKyAgICAgICBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvCisgICAgICAgcmVsZWFzZSB0aGUgV29yayB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wCisgICAgICAgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoCisgICAgICAgZWxlY3Rpb24gd2lsbCBub3Qgc2VydmUgdG8gd2l0aGRyYXcgdGhpcyBMaWNlbnNlIChvciBhbnkgb3RoZXIKKyAgICAgICBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzIHJlcXVpcmVkIHRvIGJlLCBncmFudGVkIHVuZGVyIHRoZQorICAgICAgIHRlcm1zIG9mIHRoaXMgTGljZW5zZSksIGFuZCB0aGlzIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsCisgICAgICAgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZCBhcyBzdGF0ZWQgYWJvdmUuCisKKyAgIDguIE1pc2NlbGxhbmVvdXMKKyAgICBhLiBFYWNoIHRpbWUgWW91IERpc3RyaWJ1dGUgb3IgUHVibGljbHkgUGVyZm9ybSB0aGUgV29yayBvciBhCisgICAgICAgQ29sbGVjdGlvbiwgdGhlIExpY2Vuc29yIG9mZmVycyB0byB0aGUgcmVjaXBpZW50IGEgbGljZW5zZSB0byB0aGUKKyAgICAgICBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91CisgICAgICAgdW5kZXIgdGhpcyBMaWNlbnNlLgorICAgIGIuIEVhY2ggdGltZSBZb3UgRGlzdHJpYnV0ZSBvciBQdWJsaWNseSBQZXJmb3JtIGFuIEFkYXB0YXRpb24sCisgICAgICAgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBvcmlnaW5hbCBXb3JrIG9uCisgICAgICAgdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIKKyAgICAgICB0aGlzIExpY2Vuc2UuCisgICAgYy4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCisgICAgICAgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5CisgICAgICAgb2YgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyCisgICAgICAgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZQorICAgICAgIHJlZm9ybWVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbgorICAgICAgIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KKyAgICBkLiBObyB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCBhbmQgbm8KKyAgICAgICBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvciBjb25zZW50IHNoYWxsIGJlIGluCisgICAgICAgd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IKKyAgICAgICBjb25zZW50LgorICAgIGUuIFRoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzCisgICAgICAgd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrIGxpY2Vuc2VkIGhlcmUuIFRoZXJlIGFyZSBubworICAgICAgIHVuZGVyc3RhbmRpbmdzLCBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlCisgICAgICAgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuIExpY2Vuc29yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkKKyAgICAgICBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20KKyAgICAgICBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuCisgICAgICAgYWdyZWVtZW50IG9mIHRoZSBMaWNlbnNvciBhbmQgWW91LgorICAgIGYuIFRoZSByaWdodHMgZ3JhbnRlZCB1bmRlciwgYW5kIHRoZSBzdWJqZWN0IG1hdHRlciByZWZlcmVuY2VkLCBpbgorICAgICAgIHRoaXMgTGljZW5zZSB3ZXJlIGRyYWZ0ZWQgdXRpbGl6aW5nIHRoZSB0ZXJtaW5vbG9neSBvZiB0aGUgQmVybmUKKyAgICAgICBDb252ZW50aW9uIGZvciB0aGUgUHJvdGVjdGlvbiBvZiBMaXRlcmFyeSBhbmQgQXJ0aXN0aWMgV29ya3MgKGFzCisgICAgICAgYW1lbmRlZCBvbiBTZXB0ZW1iZXIgMjgsIDE5NzkpLCB0aGUgUm9tZSBDb252ZW50aW9uIG9mIDE5NjEsIHRoZQorICAgICAgIFdJUE8gQ29weXJpZ2h0IFRyZWF0eSBvZiAxOTk2LCB0aGUgV0lQTyBQZXJmb3JtYW5jZXMgYW5kIFBob25vZ3JhbXMKKyAgICAgICBUcmVhdHkgb2YgMTk5NiBhbmQgdGhlIFVuaXZlcnNhbCBDb3B5cmlnaHQgQ29udmVudGlvbiAoYXMgcmV2aXNlZAorICAgICAgIG9uIEp1bHkgMjQsIDE5NzEpLiBUaGVzZSByaWdodHMgYW5kIHN1YmplY3QgbWF0dGVyIHRha2UgZWZmZWN0IGluCisgICAgICAgdGhlIHJlbGV2YW50IGp1cmlzZGljdGlvbiBpbiB3aGljaCB0aGUgTGljZW5zZSB0ZXJtcyBhcmUgc291Z2h0IHRvCisgICAgICAgYmUgZW5mb3JjZWQgYWNjb3JkaW5nIHRvIHRoZSBjb3JyZXNwb25kaW5nIHByb3Zpc2lvbnMgb2YgdGhlCisgICAgICAgaW1wbGVtZW50YXRpb24gb2YgdGhvc2UgdHJlYXR5IHByb3Zpc2lvbnMgaW4gdGhlIGFwcGxpY2FibGUKKyAgICAgICBuYXRpb25hbCBsYXcuIElmIHRoZSBzdGFuZGFyZCBzdWl0ZSBvZiByaWdodHMgZ3JhbnRlZCB1bmRlcgorICAgICAgIGFwcGxpY2FibGUgY29weXJpZ2h0IGxhdyBpbmNsdWRlcyBhZGRpdGlvbmFsIHJpZ2h0cyBub3QgZ3JhbnRlZAorICAgICAgIHVuZGVyIHRoaXMgTGljZW5zZSwgc3VjaCBhZGRpdGlvbmFsIHJpZ2h0cyBhcmUgZGVlbWVkIHRvIGJlCisgICAgICAgaW5jbHVkZWQgaW4gdGhlIExpY2Vuc2U7IHRoaXMgTGljZW5zZSBpcyBub3QgaW50ZW5kZWQgdG8gcmVzdHJpY3QKKyAgICAgICB0aGUgbGljZW5zZSBvZiBhbnkgcmlnaHRzIHVuZGVyIGFwcGxpY2FibGUgbGF3LgorCitDcmVhdGl2ZSBDb21tb25zIE5vdGljZQorCisgICAgIENyZWF0aXZlIENvbW1vbnMgaXMgbm90IGEgcGFydHkgdG8gdGhpcyBMaWNlbnNlLCBhbmQgbWFrZXMgbm8KKyAgICAgd2FycmFudHkgd2hhdHNvZXZlciBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFdvcmsuIENyZWF0aXZlIENvbW1vbnMKKyAgICAgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55CisgICAgIGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbnkgZ2VuZXJhbCwKKyAgICAgc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uCisgICAgIHRvIHRoaXMgbGljZW5zZS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgdHdvICgyKSBzZW50ZW5jZXMsIGlmCisgICAgIENyZWF0aXZlIENvbW1vbnMgaGFzIGV4cHJlc3NseSBpZGVudGlmaWVkIGl0c2VsZiBhcyB0aGUgTGljZW5zb3IKKyAgICAgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCisgICAgIEV4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBpbmRpY2F0aW5nIHRvIHRoZSBwdWJsaWMgdGhhdCB0aGUKKyAgICAgV29yayBpcyBsaWNlbnNlZCB1bmRlciB0aGUgQ0NQTCwgQ3JlYXRpdmUgQ29tbW9ucyBkb2VzIG5vdCBhdXRob3JpemUKKyAgICAgdGhlIHVzZSBieSBlaXRoZXIgcGFydHkgb2YgdGhlIHRyYWRlbWFyayAiQ3JlYXRpdmUgQ29tbW9ucyIgb3IgYW55CisgICAgIHJlbGF0ZWQgdHJhZGVtYXJrIG9yIGxvZ28gb2YgQ3JlYXRpdmUgQ29tbW9ucyB3aXRob3V0IHRoZSBwcmlvcgorICAgICB3cml0dGVuIGNvbnNlbnQgb2YgQ3JlYXRpdmUgQ29tbW9ucy4gQW55IHBlcm1pdHRlZCB1c2Ugd2lsbCBiZSBpbgorICAgICBjb21wbGlhbmNlIHdpdGggQ3JlYXRpdmUgQ29tbW9ucycgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZQorICAgICBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlCisgICAgIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3QgZnJvbSB0aW1lIHRvIHRpbWUuIEZvciB0aGUgYXZvaWRhbmNlIG9mCisgICAgIGRvdWJ0LCB0aGlzIHRyYWRlbWFyayByZXN0cmljdGlvbiBkb2VzIG5vdCBmb3JtIHBhcnQgb2YgdGhpcworICAgICBMaWNlbnNlLgorCisgICAgIENyZWF0aXZlIENvbW1vbnMgbWF5IGJlIGNvbnRhY3RlZCBhdCBodHRwOi8vY3JlYXRpdmVjb21tb25zLm9yZy8uCisKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0NDUEwtU2FtcGxpbmctUGx1cy0xLjAgYi9saWNlbnNlcy9DQ1BMLVNhbXBsaW5nLVBsdXMtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwYjZlNmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9DQ1BMLVNhbXBsaW5nLVBsdXMtMS4wCkBAIC0wLDAgKzEsOTcgQEAKK1RIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IgIkxJQ0VOU0UiKS4gVEhFIFdPUksgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVEIFVOREVSIFRISVMgTElDRU5TRSBPUiBDT1BZUklHSFQgTEFXIElTIFBST0hJQklURUQuCisKK0JZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBUSEUgTElDRU5TT1IgR1JBTlRTIFlPVSBUSEUgUklHSFRTIENPTlRBSU5FRCBIRVJFIElOIENPTlNJREVSQVRJT04gT0YgWU9VUiBBQ0NFUFRBTkNFIE9GIFNVQ0ggVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIERlZmluaXRpb25zCisKKyAgIDEuCisKKyAgICAgICJDb2xsZWN0aXZlIFdvcmsiIG1lYW5zIGEgd29yaywgc3VjaCBhcyBhIHBlcmlvZGljYWwgaXNzdWUsIGFudGhvbG9neSBvciBlbmN5Y2xvcGVkaWEsIGluIHdoaWNoIHRoZSBXb3JrIGluIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZCBpbmRlcGVuZGVudCB3b3JrcyBpbiB0aGVtc2VsdmVzLCBhcmUgYXNzZW1ibGVkIGludG8gYSBjb2xsZWN0aXZlIHdob2xlLiBBIHdvcmsgdGhhdCBjb25zdGl0dXRlcyBhIENvbGxlY3RpdmUgV29yayB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGEgRGVyaXZhdGl2ZSBXb3JrIChhcyBkZWZpbmVkIGJlbG93KSBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZS4KKyAgIDIuCisKKyAgICAgICJEZXJpdmF0aXZlIFdvcmsiIG1lYW5zIGEgd29yayBiYXNlZCB1cG9uIHRoZSBXb3JrIG9yIHVwb24gdGhlIFdvcmsgYW5kIG90aGVyIHByZS1leGlzdGluZyB3b3Jrcywgc3VjaCBhcyBhIHRyYW5zbGF0aW9uLCBtdXNpY2FsIGFycmFuZ2VtZW50LCBkcmFtYXRpemF0aW9uLCBmaWN0aW9uYWxpemF0aW9uLCBtb3Rpb24gcGljdHVyZSB2ZXJzaW9uLCBzb3VuZCByZWNvcmRpbmcsIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsIG9yIGFkYXB0ZWQsIGV4Y2VwdCB0aGF0IGEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZSBXb3JrIHdpbGwgbm90IGJlIGNvbnNpZGVyZWQgYSBEZXJpdmF0aXZlIFdvcmsgZm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgTGljZW5zZS4KKyAgIDMuCisKKyAgICAgICJMaWNlbnNvciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgb2ZmZXJzIHRoZSBXb3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisgICA0LgorCisgICAgICAiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuCisgICA1LgorCisgICAgICAiV29yayIgbWVhbnMgdGhlIGNvcHlyaWdodGFibGUgd29yayBvZiBhdXRob3JzaGlwIG9mZmVyZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyAgIDYuCisKKyAgICAgICJZb3UiIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSB3aG8gaGFzIG5vdCBwcmV2aW91c2x5IHZpb2xhdGVkIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHRoZSBXb3JrLCBvciB3aG8gaGFzIHJlY2VpdmVkIGV4cHJlc3MgcGVybWlzc2lvbiBmcm9tIHRoZSBMaWNlbnNvciB0byBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisKKzIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20gZmFpciB1c2UsIGZpcnN0IHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lciB1bmRlciBjb3B5cmlnaHQgbGF3IG9yIG90aGVyIGFwcGxpY2FibGUgbGF3cy4KKworMy4gTGljZW5zZSBHcmFudCAmIFJlc3RyaWN0aW9ucy4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93IG9uIHRoZSBjb25kaXRpb25zIGFzIHN0YXRlZCBiZWxvdzoKKworICAgMS4gUmUtY3JlYXRpdml0eSBwZXJtaXR0ZWQuIFlvdSBtYXkgY3JlYXRlIGFuZCByZXByb2R1Y2UgRGVyaXZhdGl2ZSBXb3JrcywgcHJvdmlkZWQgdGhhdDoKKyAgICAgICAgIDEuCisKKyAgICAgICAgICAgIHRoZSBEZXJpdmF0aXZlIFdvcmsocykgY29uc3RpdHV0ZSBhIGdvb2QtZmFpdGggcGFydGlhbCBvciByZWNvbWJpbmVkIHVzYWdlIGVtcGxveWluZyAic2FtcGxpbmcsIiAiY29sbGFnZSwiICJtYXNoLXVwLCIgb3Igb3RoZXIgY29tcGFyYWJsZSBhcnRpc3RpYyB0ZWNobmlxdWUsIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLCB0aGF0IGlzIGhpZ2hseSB0cmFuc2Zvcm1hdGl2ZSBvZiB0aGUgb3JpZ2luYWwsIGFzIGFwcHJvcHJpYXRlIHRvIHRoZSBtZWRpdW0sIGdlbnJlLCBhbmQgbWFya2V0IG5pY2hlOyBhbmQKKyAgICAgICAgIDIuCisKKyAgICAgICAgICAgIFlvdXIgRGVyaXZhdGl2ZSBXb3JrKHMpIG11c3Qgb25seSBtYWtlIGEgcGFydGlhbCB1c2Ugb2YgdGhlIG9yaWdpbmFsIFdvcmssIG9yIGlmIFlvdSBjaG9vc2UgdG8gdXNlIHRoZSBvcmlnaW5hbCBXb3JrIGFzIGEgd2hvbGUsIFlvdSBtdXN0IGVpdGhlciB1c2UgdGhlIFdvcmsgYXMgYW4gaW5zdWJzdGFudGlhbCBwb3J0aW9uIG9mIFlvdXIgRGVyaXZhdGl2ZSBXb3JrKHMpIG9yIHRyYW5zZm9ybSBpdCBpbnRvIHNvbWV0aGluZyBzdWJzdGFudGlhbGx5IGRpZmZlcmVudCBmcm9tIHRoZSBvcmlnaW5hbCBXb3JrLiBJbiB0aGUgY2FzZSBvZiBhIG11c2ljYWwgV29yayBhbmQvb3IgYXVkaW8gcmVjb3JkaW5nLCB0aGUgbWVyZSBzeW5jaHJvbml6YXRpb24gKCJzeW5jaGluZyIpIG9mIHRoZSBXb3JrIHdpdGggYSBtb3ZpbmcgaW1hZ2Ugc2hhbGwgbm90IGJlIGNvbnNpZGVyZWQgYSB0cmFuc2Zvcm1hdGlvbiBvZiB0aGUgV29yayBpbnRvIHNvbWV0aGluZyBzdWJzdGFudGlhbGx5IGRpZmZlcmVudC4KKyAgIDIuCisKKyAgICAgIFlvdSBtYXkgZGlzdHJpYnV0ZSBjb3BpZXMgb3IgcGhvbm9yZWNvcmRzIG9mLCBkaXNwbGF5IHB1YmxpY2x5LCBwZXJmb3JtIHB1YmxpY2x5LCBhbmQgcGVyZm9ybSBwdWJsaWNseSBieSBtZWFucyBvZiBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uLCBhbnkgRGVyaXZhdGl2ZSBXb3JrKHMpIGF1dGhvcml6ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLgorICAgMy4KKworICAgICAgUHJvaGliaXRpb24gb24gYWR2ZXJ0aXNpbmcuIEFsbCBhZHZlcnRpc2luZyBhbmQgcHJvbW90aW9uYWwgdXNlcyBhcmUgZXhjbHVkZWQgZnJvbSB0aGUgYWJvdmUgcmlnaHRzLCBleGNlcHQgZm9yIGFkdmVydGlzZW1lbnQgYW5kIHByb21vdGlvbiBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrKHMpIHRoYXQgWW91IGFyZSBjcmVhdGluZyBmcm9tIHRoZSBXb3JrIGFuZCBZb3Vyc2VsZiBhcyB0aGUgYXV0aG9yIHRoZXJlb2YuCisgICA0LgorCisgICAgICBOb25jb21tZXJjaWFsIHNoYXJpbmcgb2YgdmVyYmF0aW0gY29waWVzIHBlcm1pdHRlZC4KKyAgICAgICAgIDEuCisKKyAgICAgICAgICAgIFlvdSBtYXkgcmVwcm9kdWNlIHRoZSBXb3JrLCBpbmNvcnBvcmF0ZSB0aGUgV29yayBpbnRvIG9uZSBvciBtb3JlIENvbGxlY3RpdmUgV29ya3MsIGFuZCByZXByb2R1Y2UgdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBDb2xsZWN0aXZlIFdvcmtzLiBZb3UgbWF5IGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiB0aGUgV29yayBpbmNsdWRpbmcgb3IgaW5jb3Jwb3JhdGVkIGluIENvbGxlY3RpdmUgV29ya3MuCisgICAgICAgICAyLgorCisgICAgICAgICAgICBZb3UgbWF5IG5vdCBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiB0aGUgcGFyYWdyYXBoIGltbWVkaWF0ZWx5IGFib3ZlIGluIGFueSBtYW5uZXIgdGhhdCBpcyBwcmltYXJpbHkgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbi4gVGhlIGV4Y2hhbmdlIG9mIHRoZSBXb3JrIGZvciBvdGhlciBjb3B5cmlnaHRlZCB3b3JrcyBieSBtZWFucyBvZiBkaWdpdGFsIGZpbGUtc2hhcmluZyBvciBvdGhlcndpc2Ugc2hhbGwgbm90IGJlIGNvbnNpZGVyZWQgdG8gYmUgaW50ZW5kZWQgZm9yIG9yIGRpcmVjdGVkIHRvd2FyZCBjb21tZXJjaWFsIGFkdmFudGFnZSBvciBwcml2YXRlIG1vbmV0YXJ5IGNvbXBlbnNhdGlvbiwgcHJvdmlkZWQgdGhlcmUgaXMgbm8gcGF5bWVudCBvZiBhbnkgbW9uZXRhcnkgY29tcGVuc2F0aW9uIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgZXhjaGFuZ2Ugb2YgY29weXJpZ2h0ZWQgd29ya3MuCisgICA1LgorCisgICAgICBBdHRyaWJ1dGlvbiBhbmQgTm90aWNlLgorICAgICAgICAgMS4KKworICAgICAgICAgICAgSWYgWW91IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIHRoZSBXb3JrIG9yIGFueSBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MsIFlvdSBtdXN0IGtlZXAgaW50YWN0IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBmb3IgdGhlIFdvcmsgYW5kIGdpdmUgdGhlIE9yaWdpbmFsIEF1dGhvciBjcmVkaXQgcmVhc29uYWJsZSB0byB0aGUgbWVkaXVtIG9yIG1lYW5zIFlvdSBhcmUgdXRpbGl6aW5nIGJ5IGNvbnZleWluZyB0aGUgbmFtZSAob3IgcHNldWRvbnltIGlmIGFwcGxpY2FibGUpIG9mIHRoZSBPcmlnaW5hbCBBdXRob3IgaWYgc3VwcGxpZWQ7IHRoZSB0aXRsZSBvZiB0aGUgV29yayBpZiBzdXBwbGllZDsgdG8gdGhlIGV4dGVudCByZWFzb25hYmx5IHByYWN0aWNhYmxlLCBwcm92aWRlIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIsIGlmIGFueSwgdGhhdCBMaWNlbnNvciBzcGVjaWZpZXMgdG8gYmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrIG9yIGEgRGVyaXZhdGl2ZSBXb3JrLCB1bmxlc3Mgc3VjaCBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZG9lcyBub3QgcmVmZXIgdG8gdGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgbGljZW5zaW5nIGluZm9ybWF0aW9uIGZvciB0aGUgV29yazsgYW5kIGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrLCBwcm92aWRlIGEgY3JlZGl0IGlkZW50aWZ5aW5nIHRoZSB1c2Ugb2YgdGhlIFdvcmsgaW4gdGhlIERlcml2YXRpdmUgV29yayAoZS5nLiwgIlJlbWl4IG9mIHRoZSBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciwiIG9yICJJbmNsdXNpb24gb2YgYSBwb3J0aW9uIG9mIHRoZSBXb3JrIGJ5IE9yaWdpbmFsIEF1dGhvciBpbiBjb2xsYWdlIikuIFN1Y2ggY3JlZGl0IG1heSBiZSBpbXBsZW1lbnRlZCBpbiBhbnkgcmVhc29uYWJsZSBtYW5uZXI7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGluIHRoZSBjYXNlIG9mIGEgRGVyaXZhdGl2ZSBXb3JrIG9yIENvbGxlY3RpdmUgV29yaywgYXQgYSBtaW5pbXVtIHN1Y2ggY3JlZGl0IHdpbGwgYXBwZWFyIHdoZXJlIGFueSBvdGhlciBjb21wYXJhYmxlIGF1dGhvcnNoaXAgY3JlZGl0IGFwcGVhcnMgYW5kIGluIGEgbWFubmVyIGF0IGxlYXN0IGFzIHByb21pbmVudCBhcyBzdWNoIG90aGVyIGNvbXBhcmFibGUgYXV0aG9yc2hpcCBjcmVkaXQuCisgICAgICAgICAyLgorCisgICAgICAgICAgICBZb3UgbWF5IGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0gb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YsIG9yIHRoZSBVbmlmb3JtIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9yIHBob25vcmVjb3JkIG9mIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0uIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gdGhlIFdvcmsgdGhhdCBhbHRlciBvciByZXN0cmljdCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyLiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBXb3JrLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgd2l0aCBhbnkgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9mIHVzZSBvZiB0aGUgV29yayBpbiBhIG1hbm5lciBpbmNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBUaGUgYWJvdmUgYXBwbGllcyB0byB0aGUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzIGRvZXMgbm90IHJlcXVpcmUgdGhlIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gVXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZSBEZXJpdmF0aXZlIFdvcmsgb3IgQ29sbGVjdGl2ZSBXb3JrIGFueSByZWZlcmVuY2UgdG8gc3VjaCBMaWNlbnNvciBvciB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuCisKK1RoZSBhYm92ZSByaWdodHMgbWF5IGJlIGV4ZXJjaXNlZCBpbiBhbGwgbWVkaWEgYW5kIGZvcm1hdHMgd2hldGhlciBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmlzZWQuIFRoZSBhYm92ZSByaWdodHMgaW5jbHVkZSB0aGUgcmlnaHQgdG8gbWFrZSBzdWNoIG1vZGlmaWNhdGlvbnMgYXMgYXJlIHRlY2huaWNhbGx5IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGluIG90aGVyIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLgorCis0LiBEaXNjbGFpbWVyCisKK1VOTEVTUyBTUEVDSUZJRUQgT1RIRVJXSVNFIEJZIFRIRSBQQVJUSUVTIElOIEEgU0VQQVJBVEUgV1JJVElORywgTElDRU5TT1IgT0ZGRVJTIFRIRSBXT1JLIEFTLUlTIEFORCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUywgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBUSVRMRSwgTUVSQ0hBTlRJQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5ULCBPUiBUSEUgQUJTRU5DRSBPRiBMQVRFTlQgT1IgT1RIRVIgREVGRUNUUywgQUNDVVJBQ1ksIE9SIFRIRSBQUkVTRU5DRSBPUiBBQlNFTkNFIE9GIEVSUk9SUywgV0hFVEhFUiBPUiBOT1QgRElTQ09WRVJBQkxFLgorCis1LiBMaW1pdGF0aW9uIG9uIExpYWJpbGl0eS4KKworSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTCBUSEVPUlkgRk9SIEFOWSBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzYuIFRlcm1pbmF0aW9uCisKKyAgIDEuCisKKyAgICAgIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgRGVyaXZhdGl2ZSBXb3JrcyBvciBDb2xsZWN0aXZlIFdvcmtzIGZyb20gWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgaG93ZXZlciwgd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA0LCA1LCA2LCBhbmQgNyB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KKyAgIDIuCisKKyAgICAgIFN1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCBpbiB0aGUgV29yaykuIE5vdHdpdGhzdGFuZGluZyB0aGUgYWJvdmUsIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byByZWxlYXNlIHRoZSBXb3JrIHVuZGVyIGRpZmZlcmVudCBsaWNlbnNlIHRlcm1zIG9yIHRvIHN0b3AgZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGF0IGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiBncmFudGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UpLCBhbmQgdGhpcyBMaWNlbnNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0IHVubGVzcyB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKworNy4gTWlzY2VsbGFuZW91cworCisgICAxLgorCisgICAgICBFYWNoIHRpbWUgWW91IGRpc3RyaWJ1dGUgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb3IgYSBDb2xsZWN0aXZlIFdvcmssIHRoZSBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorICAgMi4KKworICAgICAgRWFjaCB0aW1lIFlvdSBkaXN0cmlidXRlIG9yIHB1YmxpY2x5IGRpZ2l0YWxseSBwZXJmb3JtIGEgRGVyaXZhdGl2ZSBXb3JrLCBMaWNlbnNvciBvZmZlcnMgdG8gdGhlIHJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdGhlIG9yaWdpbmFsIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcyBMaWNlbnNlLgorICAgMy4KKworICAgICAgSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCB3aXRob3V0IGZ1cnRoZXIgYWN0aW9uIGJ5IHRoZSBwYXJ0aWVzIHRvIHRoaXMgYWdyZWVtZW50LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorICAgNC4KKworICAgICAgTm8gdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB3YWl2ZWQgYW5kIG5vIGJyZWFjaCBjb25zZW50ZWQgdG8gdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KKyAgIDUuCisKKyAgICAgIFRoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJlLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMsIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmssIGFuZCB3aXRoIHJlc3BlY3QgdG8gdGhlIHN1YmplY3QgbWF0dGVyIGhlcmVvZiwgbm90IHNwZWNpZmllZCBhYm92ZS4gTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzIExpY2Vuc2UgbWF5IG5vdCBiZSBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIExpY2Vuc29yIGFuZCBZb3UuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9DQ1BMLVNoYXJlQWxpa2UtMS4wIGIvbGljZW5zZXMvQ0NQTC1TaGFyZUFsaWtlLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODEwOWVlCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvQ0NQTC1TaGFyZUFsaWtlLTEuMApAQCAtMCwwICsxLDE0OCBAQAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRpdmUgQ29tbW9ucworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ3JlYXRpdmUgQ29tbW9ucyBMZWdhbCBDb2RlCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTaGFyZUFsaWtlIDEuMAorICAgQ1JFQVRJVkUgQ09NTU9OUyBDT1JQT1JBVElPTiBJUyBOT1QgQSBMQVcgRklSTSBBTkQgRE9FUyBOT1QgUFJPVklERSBMRUdBTCBTRVJWSUNFUy4gRElTVFJJQlVUSU9OIE9GIFRISVMgRFJBRlQKKyAgIExJQ0VOU0UgRE9FUyBOT1QgQ1JFQVRFIEFOIEFUVE9STkVZLUNMSUVOVCBSRUxBVElPTlNISVAuIENSRUFUSVZFIENPTU1PTlMgUFJPVklERVMgVEhJUyBJTkZPUk1BVElPTiBPTiBBTiAiQVMtSVMiCisgICBCQVNJUy4gQ1JFQVRJVkUgQ09NTU9OUyBNQUtFUyBOTyBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgSU5GT1JNQVRJT04gUFJPVklERUQsIEFORCBESVNDTEFJTVMgTElBQklMSVRZIEZPUgorICAgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBJVFMgVVNFLgorCisgICBMaWNlbnNlCisKKyAgIFRIRSBXT1JLIChBUyBERUZJTkVEIEJFTE9XKSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDUkVBVElWRSBDT01NT05TIFBVQkxJQyBMSUNFTlNFICgiQ0NQTCIgT1IKKyAgICJMSUNFTlNFIikuIFRIRSBXT1JLIElTIFBST1RFQ1RFRCBCWSBDT1BZUklHSFQgQU5EL09SIE9USEVSIEFQUExJQ0FCTEUgTEFXLiBBTlkgVVNFIE9GIFRIRSBXT1JLIE9USEVSIFRIQU4gQVMKKyAgIEFVVEhPUklaRUQgVU5ERVIgVEhJUyBMSUNFTlNFIElTIFBST0hJQklURUQuCisKKyAgIEJZIEVYRVJDSVNJTkcgQU5ZIFJJR0hUUyBUTyBUSEUgV09SSyBQUk9WSURFRCBIRVJFLCBZT1UgQUNDRVBUIEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUworICAgTElDRU5TRS4gVEhFIExJQ0VOU09SIEdSQU5UUyBZT1UgVEhFIFJJR0hUUyBDT05UQUlORUQgSEVSRSBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORAorICAgQ09ORElUSU9OUy4KKworICAgMS4gRGVmaW5pdGlvbnMKKyAgICBhLiAiQ29sbGVjdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmssIHN1Y2ggYXMgYSBwZXJpb2RpY2FsIGlzc3VlLCBhbnRob2xvZ3kgb3IgZW5jeWNsb3BlZGlhLCBpbiB3aGljaCB0aGUgV29yayBpbgorICAgICAgIGl0cyBlbnRpcmV0eSBpbiB1bm1vZGlmaWVkIGZvcm0sIGFsb25nIHdpdGggYSBudW1iZXIgb2Ygb3RoZXIgY29udHJpYnV0aW9ucywgY29uc3RpdHV0aW5nIHNlcGFyYXRlIGFuZAorICAgICAgIGluZGVwZW5kZW50IHdvcmtzIGluIHRoZW1zZWx2ZXMsIGFyZSBhc3NlbWJsZWQgaW50byBhIGNvbGxlY3RpdmUgd2hvbGUuIEEgd29yayB0aGF0IGNvbnN0aXR1dGVzIGEgQ29sbGVjdGl2ZQorICAgICAgIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yayAoYXMgZGVmaW5lZCBiZWxvdykgZm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UuCisgICAgYi4gIkRlcml2YXRpdmUgV29yayIgbWVhbnMgYSB3b3JrIGJhc2VkIHVwb24gdGhlIFdvcmsgb3IgdXBvbiB0aGUgV29yayBhbmQgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLCBzdWNoIGFzIGEKKyAgICAgICB0cmFuc2xhdGlvbiwgbXVzaWNhbCBhcnJhbmdlbWVudCwgZHJhbWF0aXphdGlvbiwgZmljdGlvbmFsaXphdGlvbiwgbW90aW9uIHBpY3R1cmUgdmVyc2lvbiwgc291bmQgcmVjb3JkaW5nLAorICAgICAgIGFydCByZXByb2R1Y3Rpb24sIGFicmlkZ21lbnQsIGNvbmRlbnNhdGlvbiwgb3IgYW55IG90aGVyIGZvcm0gaW4gd2hpY2ggdGhlIFdvcmsgbWF5IGJlIHJlY2FzdCwgdHJhbnNmb3JtZWQsCisgICAgICAgb3IgYWRhcHRlZCwgZXhjZXB0IHRoYXQgYSB3b3JrIHRoYXQgY29uc3RpdHV0ZXMgYSBDb2xsZWN0aXZlIFdvcmsgd2lsbCBub3QgYmUgY29uc2lkZXJlZCBhIERlcml2YXRpdmUgV29yaworICAgICAgIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCisgICAgYy4gIkxpY2Vuc29yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyAgICBkLiAiT3JpZ2luYWwgQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgd2hvIGNyZWF0ZWQgdGhlIFdvcmsuCisgICAgZS4gIldvcmsiIG1lYW5zIHRoZSBjb3B5cmlnaHRhYmxlIHdvcmsgb2YgYXV0aG9yc2hpcCBvZmZlcmVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisgICAgZi4gIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdobyBoYXMgbm90IHByZXZpb3VzbHkgdmlvbGF0ZWQgdGhlCisgICAgICAgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgV29yaywgb3Igd2hvIGhhcyByZWNlaXZlZCBleHByZXNzIHBlcm1pc3Npb24gZnJvbSB0aGUgTGljZW5zb3IgdG8KKyAgICAgICBleGVyY2lzZSByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGRlc3BpdGUgYSBwcmV2aW91cyB2aW9sYXRpb24uCisKKyAgIDIuIEZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLCBsaW1pdCwgb3IgcmVzdHJpY3QgYW55IHJpZ2h0cyBhcmlzaW5nIGZyb20KKyAgIGZhaXIgdXNlLCBmaXJzdCBzYWxlIG9yIG90aGVyIGxpbWl0YXRpb25zIG9uIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIgdW5kZXIgY29weXJpZ2h0IGxhdyBvcgorICAgb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorCisgICAzLiBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLAorICAgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwgKGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIGFwcGxpY2FibGUgY29weXJpZ2h0KSBsaWNlbnNlIHRvIGV4ZXJjaXNlIHRoZQorICAgcmlnaHRzIGluIHRoZSBXb3JrIGFzIHN0YXRlZCBiZWxvdzoKKyAgICBhLiB0byByZXByb2R1Y2UgdGhlIFdvcmssIHRvIGluY29ycG9yYXRlIHRoZSBXb3JrIGludG8gb25lIG9yIG1vcmUgQ29sbGVjdGl2ZSBXb3JrcywgYW5kIHRvIHJlcHJvZHVjZSB0aGUgV29yaworICAgICAgIGFzIGluY29ycG9yYXRlZCBpbiB0aGUgQ29sbGVjdGl2ZSBXb3JrczsKKyAgICBiLiB0byBjcmVhdGUgYW5kIHJlcHJvZHVjZSBEZXJpdmF0aXZlIFdvcmtzOworICAgIGMuIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9yIHBob25vcmVjb3JkcyBvZiwgZGlzcGxheSBwdWJsaWNseSwgcGVyZm9ybSBwdWJsaWNseSwgYW5kIHBlcmZvcm0gcHVibGljbHkgYnkgbWVhbnMgb2YKKyAgICAgICBhIGRpZ2l0YWwgYXVkaW8gdHJhbnNtaXNzaW9uIHRoZSBXb3JrIGluY2x1ZGluZyBhcyBpbmNvcnBvcmF0ZWQgaW4gQ29sbGVjdGl2ZSBXb3JrczsKKyAgICBkLiB0byBkaXN0cmlidXRlIGNvcGllcyBvciBwaG9ub3JlY29yZHMgb2YsIGRpc3BsYXkgcHVibGljbHksIHBlcmZvcm0gcHVibGljbHksIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGJ5IG1lYW5zIG9mCisgICAgICAgYSBkaWdpdGFsIGF1ZGlvIHRyYW5zbWlzc2lvbiBEZXJpdmF0aXZlIFdvcmtzOworCisgICBUaGUgYWJvdmUgcmlnaHRzIG1heSBiZSBleGVyY2lzZWQgaW4gYWxsIG1lZGlhIGFuZCBmb3JtYXRzIHdoZXRoZXIgbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZpc2VkLiBUaGUgYWJvdmUKKyAgIHJpZ2h0cyBpbmNsdWRlIHRoZSByaWdodCB0byBtYWtlIHN1Y2ggbW9kaWZpY2F0aW9ucyBhcyBhcmUgdGVjaG5pY2FsbHkgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgaW4gb3RoZXIKKyAgIG1lZGlhIGFuZCBmb3JtYXRzLiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBieSBMaWNlbnNvciBhcmUgaGVyZWJ5IHJlc2VydmVkLgorCisgICA0LiBSZXN0cmljdGlvbnMuIFRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAzIGFib3ZlIGlzIGV4cHJlc3NseSBtYWRlIHN1YmplY3QgdG8gYW5kIGxpbWl0ZWQgYnkgdGhlIGZvbGxvd2luZworICAgcmVzdHJpY3Rpb25zOgorICAgIGEuIFlvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIFdvcmsgb25seSB1bmRlciB0aGUKKyAgICAgICB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMgTGljZW5zZQorICAgICAgIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiB0aGUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkKKyAgICAgICBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcyBvZiB0aGlzCisgICAgICAgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91CisgICAgICAgbXVzdCBrZWVwIGludGFjdCBhbGwgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudGllcy4gWW91IG1heSBub3QKKyAgICAgICBkaXN0cmlidXRlLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayB3aXRoIGFueSB0ZWNobm9sb2dpY2FsCisgICAgICAgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZQorICAgICAgIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIFdvcmsgYXMgaW5jb3Jwb3JhdGVkIGluIGEgQ29sbGVjdGl2ZSBXb3JrLCBidXQgdGhpcyBkb2VzIG5vdCByZXF1aXJlIHRoZQorICAgICAgIENvbGxlY3RpdmUgV29yayBhcGFydCBmcm9tIHRoZSBXb3JrIGl0c2VsZiB0byBiZSBtYWRlIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gSWYgWW91IGNyZWF0ZSBhCisgICAgICAgQ29sbGVjdGl2ZSBXb3JrLCB1cG9uIG5vdGljZSBmcm9tIGFueSBMaWNlbnNvciBZb3UgbXVzdCwgdG8gdGhlIGV4dGVudCBwcmFjdGljYWJsZSwgcmVtb3ZlIGZyb20gdGhlCisgICAgICAgQ29sbGVjdGl2ZSBXb3JrIGFueSByZWZlcmVuY2UgdG8gc3VjaCBMaWNlbnNvciBvciB0aGUgT3JpZ2luYWwgQXV0aG9yLCBhcyByZXF1ZXN0ZWQuIElmIFlvdSBjcmVhdGUgYQorICAgICAgIERlcml2YXRpdmUgV29yaywgdXBvbiBub3RpY2UgZnJvbSBhbnkgTGljZW5zb3IgWW91IG11c3QsIHRvIHRoZSBleHRlbnQgcHJhY3RpY2FibGUsIHJlbW92ZSBmcm9tIHRoZQorICAgICAgIERlcml2YXRpdmUgV29yayBhbnkgcmVmZXJlbmNlIHRvIHN1Y2ggTGljZW5zb3Igb3IgdGhlIE9yaWdpbmFsIEF1dGhvciwgYXMgcmVxdWVzdGVkLgorICAgIGIuIFlvdSBtYXkgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gYSBEZXJpdmF0aXZlIFdvcmsgb25seQorICAgICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0gUmVzb3VyY2UgSWRlbnRpZmllciBmb3IsIHRoaXMKKyAgICAgICBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvciBwaG9ub3JlY29yZCBvZiBlYWNoIERlcml2YXRpdmUgV29yayBZb3UgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkKKyAgICAgICBwZXJmb3JtLCBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0CisgICAgICAgYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciwgYW5kCisgICAgICAgWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuIFlvdSBtYXkgbm90CisgICAgICAgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgb3IgcHVibGljbHkgZGlnaXRhbGx5IHBlcmZvcm0gdGhlIERlcml2YXRpdmUgV29yayB3aXRoIGFueQorICAgICAgIHRlY2hub2xvZ2ljYWwgbWVhc3VyZXMgdGhhdCBjb250cm9sIGFjY2VzcyBvciB1c2Ugb2YgdGhlIFdvcmsgaW4gYSBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMKKyAgICAgICBMaWNlbnNlIEFncmVlbWVudC4gVGhlIGFib3ZlIGFwcGxpZXMgdG8gdGhlIERlcml2YXRpdmUgV29yayBhcyBpbmNvcnBvcmF0ZWQgaW4gYSBDb2xsZWN0aXZlIFdvcmssIGJ1dCB0aGlzCisgICAgICAgZG9lcyBub3QgcmVxdWlyZSB0aGUgQ29sbGVjdGl2ZSBXb3JrIGFwYXJ0IGZyb20gdGhlIERlcml2YXRpdmUgV29yayBpdHNlbGYgdG8gYmUgbWFkZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZgorICAgICAgIHRoaXMgTGljZW5zZS4KKworICAgNS4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyCisgICAgYS4gQnkgb2ZmZXJpbmcgdGhlIFdvcmsgZm9yIHB1YmxpYyByZWxlYXNlIHVuZGVyIHRoaXMgTGljZW5zZSwgTGljZW5zb3IgcmVwcmVzZW50cyBhbmQgd2FycmFudHMgdGhhdCwgdG8gdGhlCisgICAgICAgYmVzdCBvZiBMaWNlbnNvcidzIGtub3dsZWRnZSBhZnRlciByZWFzb25hYmxlIGlucXVpcnk6CisgICAgICAgICBpLiBMaWNlbnNvciBoYXMgc2VjdXJlZCBhbGwgcmlnaHRzIGluIHRoZSBXb3JrIG5lY2Vzc2FyeSB0byBncmFudCB0aGUgbGljZW5zZSByaWdodHMgaGVyZXVuZGVyIGFuZCB0bworICAgICAgICAgICAgcGVybWl0IHRoZSBsYXdmdWwgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aXRob3V0IFlvdSBoYXZpbmcgYW55IG9ibGlnYXRpb24gdG8gcGF5IGFueQorICAgICAgICAgICAgcm95YWx0aWVzLCBjb21wdWxzb3J5IGxpY2Vuc2UgZmVlcywgcmVzaWR1YWxzIG9yIGFueSBvdGhlciBwYXltZW50czsKKyAgICAgICAgaWkuIFRoZSBXb3JrIGRvZXMgbm90IGluZnJpbmdlIHRoZSBjb3B5cmlnaHQsIHRyYWRlbWFyaywgcHVibGljaXR5IHJpZ2h0cywgY29tbW9uIGxhdyByaWdodHMgb3IgYW55IG90aGVyCisgICAgICAgICAgICByaWdodCBvZiBhbnkgdGhpcmQgcGFydHkgb3IgY29uc3RpdHV0ZSBkZWZhbWF0aW9uLCBpbnZhc2lvbiBvZiBwcml2YWN5IG9yIG90aGVyIHRvcnRpb3VzIGluanVyeSB0byBhbnkKKyAgICAgICAgICAgIHRoaXJkIHBhcnR5LgorICAgIGIuIEVYQ0VQVCBBUyBFWFBSRVNTTFkgU1RBVEVEIElOIFRISVMgTElDRU5TRSBPUiBPVEhFUldJU0UgQUdSRUVEIElOIFdSSVRJTkcgT1IgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcsIFRIRQorICAgICAgIFdPUksgSVMgTElDRU5TRUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywKKyAgICAgICBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIFJFR0FSRElORyBUSEUgQ09OVEVOVFMgT1IgQUNDVVJBQ1kgT0YgVEhFIFdPUksuCisKKyAgIDYuIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgQU5EIEVYQ0VQVCBGT1IgREFNQUdFUyBBUklTSU5HIEZST00KKyAgIExJQUJJTElUWSBUTyBBIFRISVJEIFBBUlRZIFJFU1VMVElORyBGUk9NIEJSRUFDSCBPRiBUSEUgV0FSUkFOVElFUyBJTiBTRUNUSU9OIDUsIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUKKyAgIExJQUJMRSBUTyBZT1UgT04gQU5ZIExFR0FMIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWSBEQU1BR0VTCisgICBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBUSEUgV09SSywgRVZFTiBJRiBMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgICBEQU1BR0VTLgorCisgICA3LiBUZXJtaW5hdGlvbgorICAgIGEuIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgdGhlCisgICAgICAgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBJbmRpdmlkdWFscyBvciBlbnRpdGllcyB3aG8gaGF2ZSByZWNlaXZlZCBEZXJpdmF0aXZlIFdvcmtzIG9yIENvbGxlY3RpdmUgV29ya3MgZnJvbQorICAgICAgIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UsIGhvd2V2ZXIsIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBwcm92aWRlZCBzdWNoIGluZGl2aWR1YWxzIG9yCisgICAgICAgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoIHRob3NlIGxpY2Vuc2VzLiBTZWN0aW9ucyAxLCAyLCA1LCA2LCA3LCBhbmQgOCB3aWxsIHN1cnZpdmUgYW55CisgICAgICAgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorICAgIGIuIFN1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgbGljZW5zZSBncmFudGVkIGhlcmUgaXMgcGVycGV0dWFsIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZQorICAgICAgIGFwcGxpY2FibGUgY29weXJpZ2h0IGluIHRoZSBXb3JrKS4gTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlbGVhc2UgdGhlIFdvcmsKKyAgICAgICB1bmRlciBkaWZmZXJlbnQgbGljZW5zZSB0ZXJtcyBvciB0byBzdG9wIGRpc3RyaWJ1dGluZyB0aGUgV29yayBhdCBhbnkgdGltZTsgcHJvdmlkZWQsIGhvd2V2ZXIgdGhhdCBhbnkgc3VjaAorICAgICAgIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvIHdpdGhkcmF3IHRoaXMgTGljZW5zZSAob3IgYW55IG90aGVyIGxpY2Vuc2UgdGhhdCBoYXMgYmVlbiwgb3IgaXMgcmVxdWlyZWQgdG8gYmUsCisgICAgICAgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMgTGljZW5zZSB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCB1bmxlc3MKKyAgICAgICB0ZXJtaW5hdGVkIGFzIHN0YXRlZCBhYm92ZS4KKworICAgOC4gTWlzY2VsbGFuZW91cworICAgIGEuIEVhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSB0aGUgV29yayBvciBhIENvbGxlY3RpdmUgV29yaywgdGhlIExpY2Vuc29yIG9mZmVycyB0bworICAgICAgIHRoZSByZWNpcGllbnQgYSBsaWNlbnNlIHRvIHRoZSBXb3JrIG9uIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gWW91IHVuZGVyIHRoaXMKKyAgICAgICBMaWNlbnNlLgorICAgIGIuIEVhY2ggdGltZSBZb3UgZGlzdHJpYnV0ZSBvciBwdWJsaWNseSBkaWdpdGFsbHkgcGVyZm9ybSBhIERlcml2YXRpdmUgV29yaywgTGljZW5zb3Igb2ZmZXJzIHRvIHRoZSByZWNpcGllbnQgYQorICAgICAgIGxpY2Vuc2UgdG8gdGhlIG9yaWdpbmFsIFdvcmsgb24gdGhlIHNhbWUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byBZb3UgdW5kZXIgdGhpcworICAgICAgIExpY2Vuc2UuCisgICAgYy4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZQorICAgICAgIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlCisgICAgICAgcGFydGllcyB0byB0aGlzIGFncmVlbWVudCwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2gKKyAgICAgICBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorICAgIGQuIE5vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubyBicmVhY2ggY29uc2VudGVkIHRvIHVubGVzcyBzdWNoIHdhaXZlciBvcgorICAgICAgIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KKyAgICBlLiBUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZS4KKyAgICAgICBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgV29yayBub3Qgc3BlY2lmaWVkIGhlcmUuCisgICAgICAgTGljZW5zb3Igc2hhbGwgbm90IGJlIGJvdW5kIGJ5IGFueSBhZGRpdGlvbmFsIHByb3Zpc2lvbnMgdGhhdCBtYXkgYXBwZWFyIGluIGFueSBjb21tdW5pY2F0aW9uIGZyb20gWW91LiBUaGlzCisgICAgICAgTGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIG11dHVhbCB3cml0dGVuIGFncmVlbWVudCBvZiB0aGUgTGljZW5zb3IgYW5kIFlvdS4KKworICAgQ3JlYXRpdmUgQ29tbW9ucyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIExpY2Vuc2UsIGFuZCBtYWtlcyBubyB3YXJyYW50eSB3aGF0c29ldmVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgV29yay4KKyAgIENyZWF0aXZlIENvbW1vbnMgd2lsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSBvciBhbnkgcGFydHkgb24gYW55IGxlZ2FsIHRoZW9yeSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nCisgICB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB0byB0aGlzCisgICBsaWNlbnNlLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0d28gKDIpIHNlbnRlbmNlcywgaWYgQ3JlYXRpdmUgQ29tbW9ucyBoYXMgZXhwcmVzc2x5IGlkZW50aWZpZWQgaXRzZWxmIGFzCisgICB0aGUgTGljZW5zb3IgaGVyZXVuZGVyLCBpdCBzaGFsbCBoYXZlIGFsbCByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIExpY2Vuc29yLgorCisgICBFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgaW5kaWNhdGluZyB0byB0aGUgcHVibGljIHRoYXQgdGhlIFdvcmsgaXMgbGljZW5zZWQgdW5kZXIgdGhlIENDUEwsIG5laXRoZXIKKyAgIHBhcnR5IHdpbGwgdXNlIHRoZSB0cmFkZW1hcmsgIkNyZWF0aXZlIENvbW1vbnMiIG9yIGFueSByZWxhdGVkIHRyYWRlbWFyayBvciBsb2dvIG9mIENyZWF0aXZlIENvbW1vbnMgd2l0aG91dCB0aGUKKyAgIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDcmVhdGl2ZSBDb21tb25zLiBBbnkgcGVybWl0dGVkIHVzZSB3aWxsIGJlIGluIGNvbXBsaWFuY2Ugd2l0aCBDcmVhdGl2ZSBDb21tb25zJworICAgdGhlbi1jdXJyZW50IHRyYWRlbWFyayB1c2FnZSBndWlkZWxpbmVzLCBhcyBtYXkgYmUgcHVibGlzaGVkIG9uIGl0cyB3ZWJzaXRlIG9yIG90aGVyd2lzZSBtYWRlIGF2YWlsYWJsZSB1cG9uCisgICByZXF1ZXN0IGZyb20gdGltZSB0byB0aW1lLgorCisgICBDcmVhdGl2ZSBDb21tb25zIG1heSBiZSBjb250YWN0ZWQgYXQgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvLgorCmRpZmYgLS1naXQgYS9saWNlbnNlcy9DQ1BOIGIvbGljZW5zZXMvQ0NQTgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjI5NTg1Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvQ0NQTgpAQCAtMCwwICsxLDEyIEBACitDQ1BOIHRlbXBvcmFyeSBsaWNlbnNlCisKK1dlIGhhdmUgbm90IHlldCBoYWQgdGltZSB0byBjcmVhdGUgYSBwcm9wZXIgQ0NQTiBsaWNlbnNlIGZvciB0aG9zZQorcGFydHMgb2YgdGhlIHNvZnR3YXJlIHdoaWNoIGFyZSBub3QgTEdQTC4gIFNvIGZvciBub3cgd2UgaGF2ZSB0aGUKK2ZvbGxvd2luZyB0ZW1wb3JhcnkgbGljZW5zZS4KKworVGhlIHByb2dyYW1zIHdoaWNoIGZhbGwgdW5kZXIgdGhpcyBsaWNlbnNlIGNvbnRhaW4gcmVzZXJ2ZWQgYW5kL29yCitwcm9wcmlldGFyeSBpbmZvcm1hdGlvbiBiZWxvbmdpbmcgdG8gdGhlIGF1dGhvciBhbmQvb3Igb3JnYW5pc2F0aW9uCitob2xkaW5nIHRoZSBjb3B5cmlnaHQuICBUaGV5IG1heSBub3QgYmUgdXNlZCwgZGlzdHJpYnV0ZWQsIG1vZGlmaWVkLAordHJhbnNtaXR0ZWQsIHN0b3JlZCwgb3IgaW4gYW55IHdheSBhY2Nlc3NlZCwgZXhjZXB0IGJ5IG1lbWJlcnMgb3IKK2VtcGxveWVlcyBvZiB0aGUgQ0NQTiwgYW5kIGJ5IHRoZXNlIHBlb3BsZSBvbmx5IHVudGlsIDMxIERlY2VtYmVyIDIwMDYKK2FuZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGd1aWRlbGluZXMgb2YgdGhlIENDUE4uCmRpZmYgLS1naXQgYS9saWNlbnNlcy9DRERMIGIvbGljZW5zZXMvQ0RETApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzMyOGMzCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvQ0RETApAQCAtMCwwICsxLDM1OCBAQAorICBDT01NT04gREVWRUxPUE1FTlQgQU5EIERJU1RSSUJVVElPTiBMSUNFTlNFIChDRERMKQorICBWZXJzaW9uIDEuMAorCisgICAgICogMS4gRGVmaW5pdGlvbnMuCisKKyAgICAgICAgICAqIDEuMS4gIkNvbnRyaWJ1dG9yIiBtZWFucyBlYWNoIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgY3JlYXRlcworICAgICAgICAgICAgb3IgY29udHJpYnV0ZXMgdG8gdGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisKKyAgICAgICAgICAqIDEuMi4gIkNvbnRyaWJ1dG9yIFZlcnNpb24iIG1lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwKKyAgICAgICAgICAgIFNvZnR3YXJlLCBwcmlvciBNb2RpZmljYXRpb25zIHVzZWQgYnkgYSBDb250cmlidXRvciAoaWYgYW55KSwgYW5kCisgICAgICAgICAgICB0aGUgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4KKworICAgICAgICAgICogMS4zLiAiQ292ZXJlZCBTb2Z0d2FyZSIgbWVhbnMgKGEpIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSwgb3IgKGIpCisgICAgICAgICAgICBNb2RpZmljYXRpb25zLCBvciAoYykgdGhlIGNvbWJpbmF0aW9uIG9mIGZpbGVzIGNvbnRhaW5pbmcKKyAgICAgICAgICAgIE9yaWdpbmFsIFNvZnR3YXJlIHdpdGggZmlsZXMgY29udGFpbmluZyBNb2RpZmljYXRpb25zLCBpbiBlYWNoCisgICAgICAgICAgICBjYXNlIGluY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLgorCisgICAgICAgICAgKiAxLjQuICJFeGVjdXRhYmxlIiBtZWFucyB0aGUgQ292ZXJlZCBTb2Z0d2FyZSBpbiBhbnkgZm9ybSBvdGhlcgorICAgICAgICAgICAgdGhhbiBTb3VyY2UgQ29kZS4KKworICAgICAgICAgICogMS41LiAiSW5pdGlhbCBEZXZlbG9wZXIiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0CisgICAgICAgICAgICBmaXJzdCBtYWtlcyBPcmlnaW5hbCBTb2Z0d2FyZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisgICAgICAgICAgKiAxLjYuICJMYXJnZXIgV29yayIgbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgU29mdHdhcmUKKyAgICAgICAgICAgIG9yIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcworICAgICAgICAgICAgTGljZW5zZS4KKworICAgICAgICAgICogMS43LiAiTGljZW5zZSIgbWVhbnMgdGhpcyBkb2N1bWVudC4KKworICAgICAgICAgICogMS44LiAiTGljZW5zYWJsZSIgbWVhbnMgaGF2aW5nIHRoZSByaWdodCB0byBncmFudCwgdG8gdGhlIG1heGltdW0KKyAgICAgICAgICAgIGV4dGVudCBwb3NzaWJsZSwgd2hldGhlciBhdCB0aGUgdGltZSBvZiB0aGUgaW5pdGlhbCBncmFudCBvcgorICAgICAgICAgICAgc3Vic2VxdWVudGx5IGFjcXVpcmVkLCBhbnkgYW5kIGFsbCBvZiB0aGUgcmlnaHRzIGNvbnZleWVkIGhlcmVpbi4KKworICAgICAgICAgICogMS45LiAiTW9kaWZpY2F0aW9ucyIgbWVhbnMgdGhlIFNvdXJjZSBDb2RlIGFuZCBFeGVjdXRhYmxlIGZvcm0gb2YKKyAgICAgICAgICAgIGFueSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgICAgICAgICAgICAqIEEuIEFueSBmaWxlIHRoYXQgcmVzdWx0cyBmcm9tIGFuIGFkZGl0aW9uIHRvLCBkZWxldGlvbiBmcm9tCisgICAgICAgICAgICAgICAgIG9yIG1vZGlmaWNhdGlvbiBvZiB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcKKyAgICAgICAgICAgICAgICAgT3JpZ2luYWwgU29mdHdhcmUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9uczsKKworICAgICAgICAgICAgICAgKiBCLiBBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwKKyAgICAgICAgICAgICAgICAgU29mdHdhcmUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9uOyBvcgorCisgICAgICAgICAgICAgICAqIEMuIEFueSBuZXcgZmlsZSB0aGF0IGlzIGNvbnRyaWJ1dGVkIG9yIG90aGVyd2lzZSBtYWRlCisgICAgICAgICAgICAgICAgIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgICAgICAgKiAxLjEwLiAiT3JpZ2luYWwgU29mdHdhcmUiIG1lYW5zIHRoZSBTb3VyY2UgQ29kZSBhbmQgRXhlY3V0YWJsZQorICAgICAgICAgICAgZm9ybSBvZiBjb21wdXRlciBzb2Z0d2FyZSBjb2RlIHRoYXQgaXMgb3JpZ2luYWxseSByZWxlYXNlZCB1bmRlcgorICAgICAgICAgICAgdGhpcyBMaWNlbnNlLgorCisgICAgICAgICAgKiAxLjExLiAiUGF0ZW50IENsYWltcyIgbWVhbnMgYW55IHBhdGVudCBjbGFpbShzKSwgbm93IG93bmVkIG9yCisgICAgICAgICAgICBoZXJlYWZ0ZXIgYWNxdWlyZWQsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIG1ldGhvZCwKKyAgICAgICAgICAgIHByb2Nlc3MsIGFuZCBhcHBhcmF0dXMgY2xhaW1zLCBpbiBhbnkgcGF0ZW50IExpY2Vuc2FibGUgYnkKKyAgICAgICAgICAgIGdyYW50b3IuCisKKyAgICAgICAgICAqIDEuMTIuICJTb3VyY2UgQ29kZSIgbWVhbnMgKGEpIHRoZSBjb21tb24gZm9ybSBvZiBjb21wdXRlcgorICAgICAgICAgICAgc29mdHdhcmUgY29kZSBpbiB3aGljaCBtb2RpZmljYXRpb25zIGFyZSBtYWRlIGFuZCAoYikgYXNzb2NpYXRlZAorICAgICAgICAgICAgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCBpbiBvciB3aXRoIHN1Y2ggY29kZS4KKworICAgICAgICAgICogMS4xMy4gIllvdSIgKG9yICJZb3VyIikgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eQorICAgICAgICAgICAgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLAorICAgICAgICAgICAgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2gKKyAgICAgICAgICAgIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIFlvdS4KKyAgICAgICAgICAgIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBtZWFucyAoYSkgdGhlIHBvd2VyLAorICAgICAgICAgICAgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaAorICAgICAgICAgICAgZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZgorICAgICAgICAgICAgbW9yZSB0aGFuIGZpZnR5IHBlcmNlbnQgKDUwJSkgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvcgorICAgICAgICAgICAgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKyAgICAgKiAyLiBMaWNlbnNlIEdyYW50cy4KKworICAgICAgICAgICogMi4xLiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgR3JhbnQuCisKKyAgICAgICAgICAgIENvbmRpdGlvbmVkIHVwb24gWW91ciBjb21wbGlhbmNlIHdpdGggU2VjdGlvbiAzLjEgYmVsb3cgYW5kCisgICAgICAgICAgICBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIHRoZSBJbml0aWFsCisgICAgICAgICAgICBEZXZlbG9wZXIgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsCisgICAgICAgICAgICBub24tZXhjbHVzaXZlIGxpY2Vuc2U6CisKKyAgICAgICAgICAgICAgICogKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yCisgICAgICAgICAgICAgICAgIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBJbml0aWFsIERldmVsb3BlciwgdG8gdXNlLAorICAgICAgICAgICAgICAgICByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQKKyAgICAgICAgICAgICAgICAgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgU29mdHdhcmUgKG9yIHBvcnRpb25zIHRoZXJlb2YpLCB3aXRoCisgICAgICAgICAgICAgICAgIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsKKyAgICAgICAgICAgICAgICAgYW5kCisKKyAgICAgICAgICAgICAgICogKGIpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nIG9yCisgICAgICAgICAgICAgICAgIHNlbGxpbmcgb2YgT3JpZ2luYWwgU29mdHdhcmUsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLAorICAgICAgICAgICAgICAgICBwcmFjdGljZSwgc2VsbCwgYW5kIG9mZmVyIGZvciBzYWxlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2UKKyAgICAgICAgICAgICAgICAgb2YgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIChvciBwb3J0aW9ucyB0aGVyZW9mKS4KKworICAgICAgICAgICAgICAgKiAoYykgVGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gU2VjdGlvbnMgMi4xKGEpIGFuZCAoYikgYXJlCisgICAgICAgICAgICAgICAgIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBJbml0aWFsIERldmVsb3BlciBmaXJzdCBkaXN0cmlidXRlcyBvcgorICAgICAgICAgICAgICAgICBvdGhlcndpc2UgbWFrZXMgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIGF2YWlsYWJsZSB0byBhIHRoaXJkCisgICAgICAgICAgICAgICAgIHBhcnR5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICAgICAgICAgICAgICogKGQpIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMShiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UKKyAgICAgICAgICAgICAgICAgaXMgZ3JhbnRlZDogKDEpIGZvciBjb2RlIHRoYXQgWW91IGRlbGV0ZSBmcm9tIHRoZSBPcmlnaW5hbAorICAgICAgICAgICAgICAgICBTb2Z0d2FyZSwgb3IgKDIpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogKGkpIHRoZQorICAgICAgICAgICAgICAgICBtb2RpZmljYXRpb24gb2YgdGhlIE9yaWdpbmFsIFNvZnR3YXJlLCBvciAoaWkpIHRoZQorICAgICAgICAgICAgICAgICBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgU29mdHdhcmUgd2l0aCBvdGhlciBzb2Z0d2FyZSBvcgorICAgICAgICAgICAgICAgICBkZXZpY2VzLgorCisgICAgICAgICAgKiAyLjIuIENvbnRyaWJ1dG9yIEdyYW50LgorCisgICAgICAgICAgICBDb25kaXRpb25lZCB1cG9uIFlvdXIgY29tcGxpYW5jZSB3aXRoIFNlY3Rpb24gMy4xIGJlbG93IGFuZAorICAgICAgICAgICAgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zLCBlYWNoCisgICAgICAgICAgICBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwKKyAgICAgICAgICAgIG5vbi1leGNsdXNpdmUgbGljZW5zZToKKworICAgICAgICAgICAgICAgKiAoYSkgdW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IKKyAgICAgICAgICAgICAgICAgdHJhZGVtYXJrKSBMaWNlbnNhYmxlIGJ5IENvbnRyaWJ1dG9yIHRvIHVzZSwgcmVwcm9kdWNlLAorICAgICAgICAgICAgICAgICBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlCisgICAgICAgICAgICAgICAgIE1vZGlmaWNhdGlvbnMgY3JlYXRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucworICAgICAgICAgICAgICAgICB0aGVyZW9mKSwgZWl0aGVyIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMsIHdpdGggb3RoZXIKKyAgICAgICAgICAgICAgICAgTW9kaWZpY2F0aW9ucywgYXMgQ292ZXJlZCBTb2Z0d2FyZSBhbmQvb3IgYXMgcGFydCBvZiBhCisgICAgICAgICAgICAgICAgIExhcmdlciBXb3JrOyBhbmQKKworICAgICAgICAgICAgICAgKiAoYikgdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcsIG9yCisgICAgICAgICAgICAgICAgIHNlbGxpbmcgb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IgZWl0aGVyCisgICAgICAgICAgICAgICAgIGFsb25lIGFuZC9vciBpbiBjb21iaW5hdGlvbiB3aXRoIGl0cyBDb250cmlidXRvciBWZXJzaW9uIChvcgorICAgICAgICAgICAgICAgICBwb3J0aW9ucyBvZiBzdWNoIGNvbWJpbmF0aW9uKSwgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3IKKyAgICAgICAgICAgICAgICAgc2FsZSwgaGF2ZSBtYWRlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2Y6CisgICAgICAgICAgICAgICAgICgxKSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciAob3IgcG9ydGlvbnMKKyAgICAgICAgICAgICAgICAgdGhlcmVvZik7IGFuZCAoMikgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieQorICAgICAgICAgICAgICAgICB0aGF0IENvbnRyaWJ1dG9yIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zCisgICAgICAgICAgICAgICAgIG9mIHN1Y2ggY29tYmluYXRpb24pLgorCisgICAgICAgICAgICAgICAqIChjKSBUaGUgbGljZW5zZXMgZ3JhbnRlZCBpbiBTZWN0aW9ucyAyLjIoYSkgYW5kIDIuMihiKSBhcmUKKyAgICAgICAgICAgICAgICAgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIENvbnRyaWJ1dG9yIGZpcnN0IGRpc3RyaWJ1dGVzIG9yCisgICAgICAgICAgICAgICAgIG90aGVyd2lzZSBtYWtlcyB0aGUgTW9kaWZpY2F0aW9ucyBhdmFpbGFibGUgdG8gYSB0aGlyZAorICAgICAgICAgICAgICAgICBwYXJ0eS4KKworICAgICAgICAgICAgICAgKiAoZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4yKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZQorICAgICAgICAgICAgICAgICBpcyBncmFudGVkOiAoMSkgZm9yIGFueSBjb2RlIHRoYXQgQ29udHJpYnV0b3IgaGFzIGRlbGV0ZWQKKyAgICAgICAgICAgICAgICAgZnJvbSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbjsgKDIpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZAorICAgICAgICAgICAgICAgICBieTogKGkpIHRoaXJkIHBhcnR5IG1vZGlmaWNhdGlvbnMgb2YgQ29udHJpYnV0b3IgVmVyc2lvbiwgb3IKKyAgICAgICAgICAgICAgICAgKGlpKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQKKyAgICAgICAgICAgICAgICAgQ29udHJpYnV0b3Igd2l0aCBvdGhlciBzb2Z0d2FyZSAoZXhjZXB0IGFzIHBhcnQgb2YgdGhlCisgICAgICAgICAgICAgICAgIENvbnRyaWJ1dG9yIFZlcnNpb24pIG9yIG90aGVyIGRldmljZXM7IG9yICgzKSB1bmRlciBQYXRlbnQKKyAgICAgICAgICAgICAgICAgQ2xhaW1zIGluZnJpbmdlZCBieSBDb3ZlcmVkIFNvZnR3YXJlIGluIHRoZSBhYnNlbmNlIG9mCisgICAgICAgICAgICAgICAgIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yLgorCisgICAgICogMy4gRGlzdHJpYnV0aW9uIE9ibGlnYXRpb25zLgorCisgICAgICAgICAgKiAzLjEuIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4KKworICAgICAgICAgICAgQW55IENvdmVyZWQgU29mdHdhcmUgdGhhdCBZb3UgZGlzdHJpYnV0ZSBvciBvdGhlcndpc2UgbWFrZQorICAgICAgICAgICAgYXZhaWxhYmxlIGluIEV4ZWN1dGFibGUgZm9ybSBtdXN0IGFsc28gYmUgbWFkZSBhdmFpbGFibGUgaW4KKyAgICAgICAgICAgIFNvdXJjZSBDb2RlIGZvcm0gYW5kIHRoYXQgU291cmNlIENvZGUgZm9ybSBtdXN0IGJlIGRpc3RyaWJ1dGVkCisgICAgICAgICAgICBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mCisgICAgICAgICAgICB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBmb3JtIG9mIHRoZQorICAgICAgICAgICAgQ292ZXJlZCBTb2Z0d2FyZSBZb3UgZGlzdHJpYnV0ZSBvciBvdGhlcndpc2UgbWFrZSBhdmFpbGFibGUuIFlvdQorICAgICAgICAgICAgbXVzdCBpbmZvcm0gcmVjaXBpZW50cyBvZiBhbnkgc3VjaCBDb3ZlcmVkIFNvZnR3YXJlIGluIEV4ZWN1dGFibGUKKyAgICAgICAgICAgIGZvcm0gYXMgdG8gaG93IHRoZXkgY2FuIG9idGFpbiBzdWNoIENvdmVyZWQgU29mdHdhcmUgaW4gU291cmNlCisgICAgICAgICAgICBDb2RlIGZvcm0gaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEgbWVkaXVtCisgICAgICAgICAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS4KKworICAgICAgICAgICogMy4yLiBNb2RpZmljYXRpb25zLgorCisgICAgICAgICAgICBUaGUgTW9kaWZpY2F0aW9ucyB0aGF0IFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlCisgICAgICAgICAgICBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBZb3UgcmVwcmVzZW50IHRoYXQgWW91CisgICAgICAgICAgICBiZWxpZXZlIFlvdXIgTW9kaWZpY2F0aW9ucyBhcmUgWW91ciBvcmlnaW5hbCBjcmVhdGlvbihzKSBhbmQvb3IKKyAgICAgICAgICAgIFlvdSBoYXZlIHN1ZmZpY2llbnQgcmlnaHRzIHRvIGdyYW50IHRoZSByaWdodHMgY29udmV5ZWQgYnkgdGhpcworICAgICAgICAgICAgTGljZW5zZS4KKworICAgICAgICAgICogMy4zLiBSZXF1aXJlZCBOb3RpY2VzLgorCisgICAgICAgICAgICBZb3UgbXVzdCBpbmNsdWRlIGEgbm90aWNlIGluIGVhY2ggb2YgWW91ciBNb2RpZmljYXRpb25zIHRoYXQKKyAgICAgICAgICAgIGlkZW50aWZpZXMgWW91IGFzIHRoZSBDb250cmlidXRvciBvZiB0aGUgTW9kaWZpY2F0aW9uLiBZb3UgbWF5CisgICAgICAgICAgICBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueSBjb3B5cmlnaHQsIHBhdGVudCBvciB0cmFkZW1hcmsgbm90aWNlcworICAgICAgICAgICAgY29udGFpbmVkIHdpdGhpbiB0aGUgQ292ZXJlZCBTb2Z0d2FyZSwgb3IgYW55IG5vdGljZXMgb2YKKyAgICAgICAgICAgIGxpY2Vuc2luZyBvciBhbnkgZGVzY3JpcHRpdmUgdGV4dCBnaXZpbmcgYXR0cmlidXRpb24gdG8gYW55CisgICAgICAgICAgICBDb250cmlidXRvciBvciB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuCisKKyAgICAgICAgICAqIDMuNC4gQXBwbGljYXRpb24gb2YgQWRkaXRpb25hbCBUZXJtcy4KKworICAgICAgICAgICAgWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgQ292ZXJlZCBTb2Z0d2FyZSBpbgorICAgICAgICAgICAgU291cmNlIENvZGUgZm9ybSB0aGF0IGFsdGVycyBvciByZXN0cmljdHMgdGhlIGFwcGxpY2FibGUgdmVyc2lvbgorICAgICAgICAgICAgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzJyByaWdodHMgaGVyZXVuZGVyLiBZb3UgbWF5CisgICAgICAgICAgICBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwKKyAgICAgICAgICAgIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZgorICAgICAgICAgICAgQ292ZXJlZCBTb2Z0d2FyZS4gSG93ZXZlciwgeW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwKKyAgICAgICAgICAgIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuCisgICAgICAgICAgICBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgc3VjaCB3YXJyYW50eSwKKyAgICAgICAgICAgIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IFlvdQorICAgICAgICAgICAgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIKKyAgICAgICAgICAgIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbAorICAgICAgICAgICAgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsCisgICAgICAgICAgICBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IHRlcm1zIFlvdSBvZmZlci4KKworICAgICAgICAgICogMy41LiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy4KKworICAgICAgICAgICAgWW91IG1heSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIGZvcm0gb2YgdGhlIENvdmVyZWQgU29mdHdhcmUKKyAgICAgICAgICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdW5kZXIgdGhlIHRlcm1zIG9mIGEgbGljZW5zZQorICAgICAgICAgICAgb2YgWW91ciBjaG9pY2UsIHdoaWNoIG1heSBjb250YWluIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMKKyAgICAgICAgICAgIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mCisgICAgICAgICAgICB0aGlzIExpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UgZm9yIHRoZSBFeGVjdXRhYmxlIGZvcm0gZG9lcworICAgICAgICAgICAgbm90IGF0dGVtcHQgdG8gbGltaXQgb3IgYWx0ZXIgdGhlIHJlY2lwaWVudCdzIHJpZ2h0cyBpbiB0aGUKKyAgICAgICAgICAgIFNvdXJjZSBDb2RlIGZvcm0gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuIElmCisgICAgICAgICAgICBZb3UgZGlzdHJpYnV0ZSB0aGUgQ292ZXJlZCBTb2Z0d2FyZSBpbiBFeGVjdXRhYmxlIGZvcm0gdW5kZXIgYQorICAgICAgICAgICAgZGlmZmVyZW50IGxpY2Vuc2UsIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueQorICAgICAgICAgICAgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwKKyAgICAgICAgICAgIG5vdCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgQ29udHJpYnV0b3IuIFlvdSBoZXJlYnkgYWdyZWUgdG8KKyAgICAgICAgICAgIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkKKyAgICAgICAgICAgIGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvcgorICAgICAgICAgICAgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2ggdGVybXMgWW91IG9mZmVyLgorCisgICAgICAgICAgKiAzLjYuIExhcmdlciBXb3Jrcy4KKworICAgICAgICAgICAgWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBTb2Z0d2FyZSB3aXRoCisgICAgICAgICAgICBvdGhlciBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZAorICAgICAgICAgICAgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsCisgICAgICAgICAgICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZAorICAgICAgICAgICAgZm9yIHRoZSBDb3ZlcmVkIFNvZnR3YXJlLgorCisgICAgICogNC4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuCisKKyAgICAgICAgICAqIDQuMS4gTmV3IFZlcnNpb25zLgorCisgICAgICAgICAgICBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGlzIHRoZSBpbml0aWFsIGxpY2Vuc2Ugc3Rld2FyZCBhbmQgbWF5CisgICAgICAgICAgICBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UgZnJvbSB0aW1lIHRvCisgICAgICAgICAgICB0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLgorICAgICAgICAgICAgRXhjZXB0IGFzIHByb3ZpZGVkIGluIFNlY3Rpb24gNC4zLCBubyBvbmUgb3RoZXIgdGhhbiB0aGUgbGljZW5zZQorICAgICAgICAgICAgc3Rld2FyZCBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIExpY2Vuc2UuCisKKyAgICAgICAgICAqIDQuMi4gRWZmZWN0IG9mIE5ldyBWZXJzaW9ucy4KKworICAgICAgICAgICAgWW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlLCBkaXN0cmlidXRlIG9yIG90aGVyd2lzZSBtYWtlIHRoZQorICAgICAgICAgICAgQ292ZXJlZCBTb2Z0d2FyZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSB2ZXJzaW9uIG9mIHRoZQorICAgICAgICAgICAgTGljZW5zZSB1bmRlciB3aGljaCBZb3Ugb3JpZ2luYWxseSByZWNlaXZlZCB0aGUgQ292ZXJlZCBTb2Z0d2FyZS4KKyAgICAgICAgICAgIElmIHRoZSBJbml0aWFsIERldmVsb3BlciBpbmNsdWRlcyBhIG5vdGljZSBpbiB0aGUgT3JpZ2luYWwKKyAgICAgICAgICAgIFNvZnR3YXJlIHByb2hpYml0aW5nIGl0IGZyb20gYmVpbmcgZGlzdHJpYnV0ZWQgb3Igb3RoZXJ3aXNlIG1hZGUKKyAgICAgICAgICAgIGF2YWlsYWJsZSB1bmRlciBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCBZb3UgbXVzdAorICAgICAgICAgICAgZGlzdHJpYnV0ZSBhbmQgbWFrZSB0aGUgQ292ZXJlZCBTb2Z0d2FyZSBhdmFpbGFibGUgdW5kZXIgdGhlCisgICAgICAgICAgICB0ZXJtcyBvZiB0aGUgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSB1bmRlciB3aGljaCBZb3Ugb3JpZ2luYWxseQorICAgICAgICAgICAgcmVjZWl2ZWQgdGhlIENvdmVyZWQgU29mdHdhcmUuIE90aGVyd2lzZSwgWW91IG1heSBhbHNvIGNob29zZSB0bworICAgICAgICAgICAgdXNlLCBkaXN0cmlidXRlIG9yIG90aGVyd2lzZSBtYWtlIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIGF2YWlsYWJsZQorICAgICAgICAgICAgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UKKyAgICAgICAgICAgIHB1Ymxpc2hlZCBieSB0aGUgbGljZW5zZSBzdGV3YXJkLgorCisgICAgICAgICAgKiA0LjMuIE1vZGlmaWVkIFZlcnNpb25zLgorCisgICAgICAgICAgICBXaGVuIFlvdSBhcmUgYW4gSW5pdGlhbCBEZXZlbG9wZXIgYW5kIFlvdSB3YW50IHRvIGNyZWF0ZSBhIG5ldworICAgICAgICAgICAgbGljZW5zZSBmb3IgWW91ciBPcmlnaW5hbCBTb2Z0d2FyZSwgWW91IG1heSBjcmVhdGUgYW5kIHVzZSBhCisgICAgICAgICAgICBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBpZiBZb3U6IChhKSByZW5hbWUgdGhlIGxpY2Vuc2UKKyAgICAgICAgICAgIGFuZCByZW1vdmUgYW55IHJlZmVyZW5jZXMgdG8gdGhlIG5hbWUgb2YgdGhlIGxpY2Vuc2Ugc3Rld2FyZAorICAgICAgICAgICAgKGV4Y2VwdCB0byBub3RlIHRoYXQgdGhlIGxpY2Vuc2UgZGlmZmVycyBmcm9tIHRoaXMgTGljZW5zZSk7IGFuZAorICAgICAgICAgICAgKGIpIG90aGVyd2lzZSBtYWtlIGl0IGNsZWFyIHRoYXQgdGhlIGxpY2Vuc2UgY29udGFpbnMgdGVybXMgd2hpY2gKKyAgICAgICAgICAgIGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZS4KKworICAgICAqIDUuIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkuCisKKyAgICAgICBDT1ZFUkVEIFNPRlRXQVJFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLAorICAgICAgIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLAorICAgICAgIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBDT1ZFUkVEIFNPRlRXQVJFIElTIEZSRUUgT0YKKyAgICAgICBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuCisgICAgICAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgQ09WRVJFRAorICAgICAgIFNPRlRXQVJFIElTIFdJVEggWU9VLiBTSE9VTEQgQU5ZIENPVkVSRUQgU09GVFdBUkUgUFJPVkUgREVGRUNUSVZFIElOCisgICAgICAgQU5ZIFJFU1BFQ1QsIFlPVSAoTk9UIFRIRSBJTklUSUFMIERFVkVMT1BFUiBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1IpCisgICAgICAgQVNTVU1FIFRIRSBDT1NUIE9GIEFOWSBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4gVEhJUworICAgICAgIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLgorICAgICAgIE5PIFVTRSBPRiBBTlkgQ09WRVJFRCBTT0ZUV0FSRSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIKKyAgICAgICBUSElTIERJU0NMQUlNRVIuCisKKyAgICAgKiA2LiBURVJNSU5BVElPTi4KKworICAgICAgICAgICogNi4xLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUKKyAgICAgICAgICAgIGF1dG9tYXRpY2FsbHkgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvCisgICAgICAgICAgICBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guCisgICAgICAgICAgICBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQKKyAgICAgICAgICAgIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZS4KKworICAgICAgICAgICogNi4yLiBJZiBZb3UgYXNzZXJ0IGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSAoZXhjbHVkaW5nCisgICAgICAgICAgICBkZWNsYXJhdG9yeSBqdWRnbWVudCBhY3Rpb25zKSBhZ2FpbnN0IEluaXRpYWwgRGV2ZWxvcGVyIG9yIGEKKyAgICAgICAgICAgIENvbnRyaWJ1dG9yICh0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgQ29udHJpYnV0b3IgYWdhaW5zdCB3aG9tCisgICAgICAgICAgICBZb3UgYXNzZXJ0IHN1Y2ggY2xhaW0gaXMgcmVmZXJyZWQgdG8gYXMgIlBhcnRpY2lwYW50IikgYWxsZWdpbmcKKyAgICAgICAgICAgIHRoYXQgdGhlIFBhcnRpY2lwYW50IFNvZnR3YXJlIChtZWFuaW5nIHRoZSBDb250cmlidXRvciBWZXJzaW9uCisgICAgICAgICAgICB3aGVyZSB0aGUgUGFydGljaXBhbnQgaXMgYSBDb250cmlidXRvciBvciB0aGUgT3JpZ2luYWwgU29mdHdhcmUKKyAgICAgICAgICAgIHdoZXJlIHRoZSBQYXJ0aWNpcGFudCBpcyB0aGUgSW5pdGlhbCBEZXZlbG9wZXIpIGRpcmVjdGx5IG9yCisgICAgICAgICAgICBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuIGFueSBhbmQgYWxsIHJpZ2h0cyBncmFudGVkCisgICAgICAgICAgICBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRvIFlvdSBieSBzdWNoIFBhcnRpY2lwYW50LCB0aGUgSW5pdGlhbAorICAgICAgICAgICAgRGV2ZWxvcGVyIChpZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaXMgbm90IHRoZSBQYXJ0aWNpcGFudCkgYW5kCisgICAgICAgICAgICBhbGwgQ29udHJpYnV0b3JzIHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIG9mIHRoaXMgTGljZW5zZQorICAgICAgICAgICAgc2hhbGwsIHVwb24gNjAgZGF5cyBub3RpY2UgZnJvbSBQYXJ0aWNpcGFudCB0ZXJtaW5hdGUKKyAgICAgICAgICAgIHByb3NwZWN0aXZlbHkgYW5kIGF1dG9tYXRpY2FsbHkgYXQgdGhlIGV4cGlyYXRpb24gb2Ygc3VjaCA2MCBkYXkKKyAgICAgICAgICAgIG5vdGljZSBwZXJpb2QsIHVubGVzcyBpZiB3aXRoaW4gc3VjaCA2MCBkYXkgcGVyaW9kIFlvdSB3aXRoZHJhdworICAgICAgICAgICAgWW91ciBjbGFpbSB3aXRoIHJlc3BlY3QgdG8gdGhlIFBhcnRpY2lwYW50IFNvZnR3YXJlIGFnYWluc3Qgc3VjaAorICAgICAgICAgICAgUGFydGljaXBhbnQgZWl0aGVyIHVuaWxhdGVyYWxseSBvciBwdXJzdWFudCB0byBhIHdyaXR0ZW4KKyAgICAgICAgICAgIGFncmVlbWVudCB3aXRoIFBhcnRpY2lwYW50LgorCisgICAgICAgICAgKiA2LjMuIEluIHRoZSBldmVudCBvZiB0ZXJtaW5hdGlvbiB1bmRlciBTZWN0aW9ucyA2LjEgb3IgNi4yIGFib3ZlLAorICAgICAgICAgICAgYWxsIGVuZCB1c2VyIGxpY2Vuc2VzIHRoYXQgaGF2ZSBiZWVuIHZhbGlkbHkgZ3JhbnRlZCBieSBZb3Ugb3IKKyAgICAgICAgICAgIGFueSBkaXN0cmlidXRvciBoZXJldW5kZXIgcHJpb3IgdG8gdGVybWluYXRpb24gKGV4Y2x1ZGluZworICAgICAgICAgICAgbGljZW5zZXMgZ3JhbnRlZCB0byBZb3UgYnkgYW55IGRpc3RyaWJ1dG9yKSBzaGFsbCBzdXJ2aXZlCisgICAgICAgICAgICB0ZXJtaW5hdGlvbi4KKworICAgICAqIDcuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLgorCisgICAgICAgVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBXSEVUSEVSIFRPUlQKKyAgICAgICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBZT1UsIFRIRSBJTklUSUFMCisgICAgICAgREVWRUxPUEVSLCBBTlkgT1RIRVIgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBDT1ZFUkVECisgICAgICAgU09GVFdBUkUsIE9SIEFOWSBTVVBQTElFUiBPRiBBTlkgT0YgU1VDSCBQQVJUSUVTLCBCRSBMSUFCTEUgVE8gQU5ZCisgICAgICAgUEVSU09OIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICAgICAgIE9GIEFOWSBDSEFSQUNURVIgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1QKKyAgICAgICBQUk9GSVRTLCBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SCisgICAgICAgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4KKyAgICAgICBJRiBTVUNIIFBBUlRZIFNIQUxMIEhBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorICAgICAgIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IKKyAgICAgICBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWSdTIE5FR0xJR0VOQ0UgVE8gVEhFCisgICAgICAgRVhURU5UIEFQUExJQ0FCTEUgTEFXIFBST0hJQklUUyBTVUNIIExJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETworICAgICAgIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMCisgICAgICAgREFNQUdFUywgU08gVEhJUyBFWENMVVNJT04gQU5EIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKyAgICAgKiA4LiBVLlMuIEdPVkVSTk1FTlQgRU5EIFVTRVJTLgorCisgICAgICAgVGhlIENvdmVyZWQgU29mdHdhcmUgaXMgYSAiY29tbWVyY2lhbCBpdGVtLCIgYXMgdGhhdCB0ZXJtIGlzIGRlZmluZWQKKyAgICAgICBpbiA0OCBDLkYuUi4gMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2YgImNvbW1lcmNpYWwgY29tcHV0ZXIKKyAgICAgICBzb2Z0d2FyZSIgKGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGF0IDQ4IEMuRi5SLiBTOiAyNTIuMjI3LTcwMTQoYSkoMSkpCisgICAgICAgYW5kICJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIGRvY3VtZW50YXRpb24iIGFzIHN1Y2ggdGVybXMgYXJlCisgICAgICAgdXNlZCBpbiA0OCBDLkYuUi4gMTIuMjEyIChTZXB0LiAxOTk1KS4gQ29uc2lzdGVudCB3aXRoIDQ4IEMuRi5SLgorICAgICAgIDEyLjIxMiBhbmQgNDggQy5GLlIuIDIyNy43MjAyLTEgdGhyb3VnaCAyMjcuNzIwMi00IChKdW5lIDE5OTUpLCBhbGwKKyAgICAgICBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzIGFjcXVpcmUgQ292ZXJlZCBTb2Z0d2FyZSB3aXRoIG9ubHkgdGhvc2UKKyAgICAgICByaWdodHMgc2V0IGZvcnRoIGhlcmVpbi4gVGhpcyBVLlMuIEdvdmVybm1lbnQgUmlnaHRzIGNsYXVzZSBpcyBpbiBsaWV1CisgICAgICAgb2YsIGFuZCBzdXBlcnNlZGVzLCBhbnkgb3RoZXIgRkFSLCBERkFSLCBvciBvdGhlciBjbGF1c2Ugb3IgcHJvdmlzaW9uCisgICAgICAgdGhhdCBhZGRyZXNzZXMgR292ZXJubWVudCByaWdodHMgaW4gY29tcHV0ZXIgc29mdHdhcmUgdW5kZXIgdGhpcworICAgICAgIExpY2Vuc2UuCisKKyAgICAgKiA5LiBNSVNDRUxMQU5FT1VTLgorCisgICAgICAgVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHN1YmplY3QKKyAgICAgICBtYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlCisgICAgICAgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50CisgICAgICAgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieQorICAgICAgIHRoZSBsYXcgb2YgdGhlIGp1cmlzZGljdGlvbiBzcGVjaWZpZWQgaW4gYSBub3RpY2UgY29udGFpbmVkIHdpdGhpbiB0aGUKKyAgICAgICBPcmlnaW5hbCBTb2Z0d2FyZSAoZXhjZXB0IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcsIGlmIGFueSwKKyAgICAgICBwcm92aWRlcyBvdGhlcndpc2UpLCBleGNsdWRpbmcgc3VjaCBqdXJpc2RpY3Rpb24ncyBjb25mbGljdC1vZi1sYXcKKyAgICAgICBwcm92aXNpb25zLiBBbnkgbGl0aWdhdGlvbiByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgc3ViamVjdAorICAgICAgIHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIGNvdXJ0cyBsb2NhdGVkIGluIHRoZSBqdXJpc2RpY3Rpb24gYW5kCisgICAgICAgdmVudWUgc3BlY2lmaWVkIGluIGEgbm90aWNlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIE9yaWdpbmFsIFNvZnR3YXJlLAorICAgICAgIHdpdGggdGhlIGxvc2luZyBwYXJ0eSByZXNwb25zaWJsZSBmb3IgY29zdHMsIGluY2x1ZGluZywgd2l0aG91dAorICAgICAgIGxpbWl0YXRpb24sIGNvdXJ0IGNvc3RzIGFuZCByZWFzb25hYmxlIGF0dG9ybmV5cycgZmVlcyBhbmQgZXhwZW5zZXMuCisgICAgICAgVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlCisgICAgICAgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IGxhdyBvcgorICAgICAgIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZQorICAgICAgIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHNoYWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuIFlvdQorICAgICAgIGFncmVlIHRoYXQgWW91IGFsb25lIGFyZSByZXNwb25zaWJsZSBmb3IgY29tcGxpYW5jZSB3aXRoIHRoZSBVbml0ZWQKKyAgICAgICBTdGF0ZXMgZXhwb3J0IGFkbWluaXN0cmF0aW9uIHJlZ3VsYXRpb25zIChhbmQgdGhlIGV4cG9ydCBjb250cm9sIGxhd3MKKyAgICAgICBhbmQgcmVndWxhdGlvbiBvZiBhbnkgb3RoZXIgY291bnRyaWVzKSB3aGVuIFlvdSB1c2UsIGRpc3RyaWJ1dGUgb3IKKyAgICAgICBvdGhlcndpc2UgbWFrZSBhdmFpbGFibGUgYW55IENvdmVyZWQgU29mdHdhcmUuCisKKyAgICAgKiAxMC4gUkVTUE9OU0lCSUxJVFkgRk9SIENMQUlNUy4KKworICAgICAgIEFzIGJldHdlZW4gSW5pdGlhbCBEZXZlbG9wZXIgYW5kIHRoZSBDb250cmlidXRvcnMsIGVhY2ggcGFydHkgaXMKKyAgICAgICByZXNwb25zaWJsZSBmb3IgY2xhaW1zIGFuZCBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksCisgICAgICAgb3V0IG9mIGl0cyB1dGlsaXphdGlvbiBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBZb3UgYWdyZWUgdG8KKyAgICAgICB3b3JrIHdpdGggSW5pdGlhbCBEZXZlbG9wZXIgYW5kIENvbnRyaWJ1dG9ycyB0byBkaXN0cmlidXRlIHN1Y2gKKyAgICAgICByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuIE5vdGhpbmcgaGVyZWluIGlzIGludGVuZGVkIG9yCisgICAgICAgc2hhbGwgYmUgZGVlbWVkIHRvIGNvbnN0aXR1dGUgYW55IGFkbWlzc2lvbiBvZiBsaWFiaWxpdHkuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9DRERMLVNjaGlseSBiL2xpY2Vuc2VzL0NEREwtU2NoaWx5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4YWExMjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9DRERMLVNjaGlseQpAQCAtMCwwICsxLDM3NiBAQAorQ09NTU9OIERFVkVMT1BNRU5UIEFORCBESVNUUklCVVRJT04gTElDRU5TRSBWZXJzaW9uIDEuMAorCisxLiBEZWZpbml0aW9ucy4KKworICAgIDEuMS4gIkNvbnRyaWJ1dG9yIiBtZWFucyBlYWNoIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgY3JlYXRlcworICAgICAgICAgb3IgY29udHJpYnV0ZXMgdG8gdGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisKKyAgICAxLjIuICJDb250cmlidXRvciBWZXJzaW9uIiBtZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsCisgICAgICAgICBTb2Z0d2FyZSwgcHJpb3IgTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEgQ29udHJpYnV0b3IgKGlmIGFueSksCisgICAgICAgICBhbmQgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuCisKKyAgICAxLjMuICJDb3ZlcmVkIFNvZnR3YXJlIiBtZWFucyAoYSkgdGhlIE9yaWdpbmFsIFNvZnR3YXJlLCBvciAoYikKKyAgICAgICAgIE1vZGlmaWNhdGlvbnMsIG9yIChjKSB0aGUgY29tYmluYXRpb24gb2YgZmlsZXMgY29udGFpbmluZworICAgICAgICAgT3JpZ2luYWwgU29mdHdhcmUgd2l0aCBmaWxlcyBjb250YWluaW5nIE1vZGlmaWNhdGlvbnMsIGluCisgICAgICAgICBlYWNoIGNhc2UgaW5jbHVkaW5nIHBvcnRpb25zIHRoZXJlb2YuCisKKyAgICAxLjQuICJFeGVjdXRhYmxlIiBtZWFucyB0aGUgQ292ZXJlZCBTb2Z0d2FyZSBpbiBhbnkgZm9ybSBvdGhlcgorICAgICAgICAgdGhhbiBTb3VyY2UgQ29kZS4KKworICAgIDEuNS4gIkluaXRpYWwgRGV2ZWxvcGVyIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBmaXJzdAorICAgICAgICAgbWFrZXMgT3JpZ2luYWwgU29mdHdhcmUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgTGljZW5zZS4KKworICAgIDEuNi4gIkxhcmdlciBXb3JrIiBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBTb2Z0d2FyZSBvcgorICAgICAgICAgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzCisgICAgICAgICBMaWNlbnNlLgorCisgICAgMS43LiAiTGljZW5zZSIgbWVhbnMgdGhpcyBkb2N1bWVudC4KKworICAgIDEuOC4gIkxpY2Vuc2FibGUiIG1lYW5zIGhhdmluZyB0aGUgcmlnaHQgdG8gZ3JhbnQsIHRvIHRoZSBtYXhpbXVtCisgICAgICAgICBleHRlbnQgcG9zc2libGUsIHdoZXRoZXIgYXQgdGhlIHRpbWUgb2YgdGhlIGluaXRpYWwgZ3JhbnQgb3IKKyAgICAgICAgIHN1YnNlcXVlbnRseSBhY3F1aXJlZCwgYW55IGFuZCBhbGwgb2YgdGhlIHJpZ2h0cyBjb252ZXllZAorICAgICAgICAgaGVyZWluLgorCisgICAgMS45LiAiTW9kaWZpY2F0aW9ucyIgbWVhbnMgdGhlIFNvdXJjZSBDb2RlIGFuZCBFeGVjdXRhYmxlIGZvcm0gb2YKKyAgICAgICAgIGFueSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgICAgIEEuIEFueSBmaWxlIHRoYXQgcmVzdWx0cyBmcm9tIGFuIGFkZGl0aW9uIHRvLCBkZWxldGlvbiBmcm9tIG9yCisgICAgICAgICAgIG1vZGlmaWNhdGlvbiBvZiB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgT3JpZ2luYWwKKyAgICAgICAgICAgU29mdHdhcmUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9uczsKKworICAgICAgICBCLiBBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwKKyAgICAgICAgICAgU29mdHdhcmUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9uczsgb3IKKworICAgICAgICBDLiBBbnkgbmV3IGZpbGUgdGhhdCBpcyBjb250cmlidXRlZCBvciBvdGhlcndpc2UgbWFkZQorICAgICAgICAgICBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIDEuMTAuICJPcmlnaW5hbCBTb2Z0d2FyZSIgbWVhbnMgdGhlIFNvdXJjZSBDb2RlIGFuZCBFeGVjdXRhYmxlCisgICAgICAgICAgZm9ybSBvZiBjb21wdXRlciBzb2Z0d2FyZSBjb2RlIHRoYXQgaXMgb3JpZ2luYWxseSByZWxlYXNlZAorICAgICAgICAgIHVuZGVyIHRoaXMgTGljZW5zZS4KKworICAgIDEuMTEuICJQYXRlbnQgQ2xhaW1zIiBtZWFucyBhbnkgcGF0ZW50IGNsYWltKHMpLCBub3cgb3duZWQgb3IKKyAgICAgICAgICBoZXJlYWZ0ZXIgYWNxdWlyZWQsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIG1ldGhvZCwKKyAgICAgICAgICBwcm9jZXNzLCBhbmQgYXBwYXJhdHVzIGNsYWltcywgaW4gYW55IHBhdGVudCBMaWNlbnNhYmxlIGJ5CisgICAgICAgICAgZ3JhbnRvci4KKworICAgIDEuMTIuICJTb3VyY2UgQ29kZSIgbWVhbnMgKGEpIHRoZSBjb21tb24gZm9ybSBvZiBjb21wdXRlciBzb2Z0d2FyZQorICAgICAgICAgIGNvZGUgaW4gd2hpY2ggbW9kaWZpY2F0aW9ucyBhcmUgbWFkZSBhbmQgKGIpIGFzc29jaWF0ZWQKKyAgICAgICAgICBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIGluIG9yIHdpdGggc3VjaCBjb2RlLgorCisgICAgMS4xMy4gIllvdSIgKG9yICJZb3VyIikgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eQorICAgICAgICAgIGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcworICAgICAgICAgIG9mLCB0aGlzIExpY2Vuc2UuICBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIGluY2x1ZGVzIGFueQorICAgICAgICAgIGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uCisgICAgICAgICAgY29udHJvbCB3aXRoIFlvdS4gIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sCisgICAgICAgICAgImNvbnRyb2wiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UKKyAgICAgICAgICB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkKKyAgICAgICAgICBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgbW9yZSB0aGFuIGZpZnR5CisgICAgICAgICAgcGVyY2VudCAoNTAlKSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwKKyAgICAgICAgICBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKzIuIExpY2Vuc2UgR3JhbnRzLgorCisgICAgMi4xLiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgR3JhbnQuCisKKyAgICBDb25kaXRpb25lZCB1cG9uIFlvdXIgY29tcGxpYW5jZSB3aXRoIFNlY3Rpb24gMy4xIGJlbG93IGFuZAorICAgIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcywgdGhlIEluaXRpYWwKKyAgICBEZXZlbG9wZXIgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsCisgICAgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlOgorCisgICAgICAgIChhKSB1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvcgorICAgICAgICAgICAgdHJhZGVtYXJrKSBMaWNlbnNhYmxlIGJ5IEluaXRpYWwgRGV2ZWxvcGVyLCB0byB1c2UsCisgICAgICAgICAgICByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQKKyAgICAgICAgICAgIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIChvciBwb3J0aW9ucyB0aGVyZW9mKSwKKyAgICAgICAgICAgIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlcgorICAgICAgICAgICAgV29yazsgYW5kCisKKyAgICAgICAgKGIpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nIG9yCisgICAgICAgICAgICBzZWxsaW5nIG9mIE9yaWdpbmFsIFNvZnR3YXJlLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwKKyAgICAgICAgICAgIHByYWN0aWNlLCBzZWxsLCBhbmQgb2ZmZXIgZm9yIHNhbGUsIGFuZC9vciBvdGhlcndpc2UKKyAgICAgICAgICAgIGRpc3Bvc2Ugb2YgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIChvciBwb3J0aW9ucyB0aGVyZW9mKS4KKworICAgICAgICAoYykgVGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gU2VjdGlvbnMgMi4xKGEpIGFuZCAoYikgYXJlCisgICAgICAgICAgICBlZmZlY3RpdmUgb24gdGhlIGRhdGUgSW5pdGlhbCBEZXZlbG9wZXIgZmlyc3QgZGlzdHJpYnV0ZXMKKyAgICAgICAgICAgIG9yIG90aGVyd2lzZSBtYWtlcyB0aGUgT3JpZ2luYWwgU29mdHdhcmUgYXZhaWxhYmxlIHRvIGEKKyAgICAgICAgICAgIHRoaXJkIHBhcnR5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICAgICAgKGQpIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMShiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMKKyAgICAgICAgICAgIGdyYW50ZWQ6ICgxKSBmb3IgY29kZSB0aGF0IFlvdSBkZWxldGUgZnJvbSB0aGUgT3JpZ2luYWwKKyAgICAgICAgICAgIFNvZnR3YXJlLCBvciAoMikgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkIGJ5OiAoaSkgdGhlCisgICAgICAgICAgICBtb2RpZmljYXRpb24gb2YgdGhlIE9yaWdpbmFsIFNvZnR3YXJlLCBvciAoaWkpIHRoZQorICAgICAgICAgICAgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIHdpdGggb3RoZXIgc29mdHdhcmUKKyAgICAgICAgICAgIG9yIGRldmljZXMuCisKKyAgICAyLjIuIENvbnRyaWJ1dG9yIEdyYW50LgorCisgICAgQ29uZGl0aW9uZWQgdXBvbiBZb3VyIGNvbXBsaWFuY2Ugd2l0aCBTZWN0aW9uIDMuMSBiZWxvdyBhbmQKKyAgICBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIGVhY2gKKyAgICBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwKKyAgICBub24tZXhjbHVzaXZlIGxpY2Vuc2U6CisKKyAgICAgICAgKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yCisgICAgICAgICAgICB0cmFkZW1hcmspIExpY2Vuc2FibGUgYnkgQ29udHJpYnV0b3IgdG8gdXNlLCByZXByb2R1Y2UsCisgICAgICAgICAgICBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlCisgICAgICAgICAgICBNb2RpZmljYXRpb25zIGNyZWF0ZWQgYnkgc3VjaCBDb250cmlidXRvciAob3IgcG9ydGlvbnMKKyAgICAgICAgICAgIHRoZXJlb2YpLCBlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcywgd2l0aCBvdGhlcgorICAgICAgICAgICAgTW9kaWZpY2F0aW9ucywgYXMgQ292ZXJlZCBTb2Z0d2FyZSBhbmQvb3IgYXMgcGFydCBvZiBhCisgICAgICAgICAgICBMYXJnZXIgV29yazsgYW5kCisKKyAgICAgICAgKGIpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nLCBvcgorICAgICAgICAgICAgc2VsbGluZyBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciBlaXRoZXIKKyAgICAgICAgICAgIGFsb25lIGFuZC9vciBpbiBjb21iaW5hdGlvbiB3aXRoIGl0cyBDb250cmlidXRvciBWZXJzaW9uCisgICAgICAgICAgICAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbiksIHRvIG1ha2UsIHVzZSwgc2VsbCwKKyAgICAgICAgICAgIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZjoKKyAgICAgICAgICAgICgxKSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciAob3IgcG9ydGlvbnMKKyAgICAgICAgICAgIHRoZXJlb2YpOyBhbmQgKDIpIHRoZSBjb21iaW5hdGlvbiBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkKKyAgICAgICAgICAgIHRoYXQgQ29udHJpYnV0b3Igd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMKKyAgICAgICAgICAgIG9mIHN1Y2ggY29tYmluYXRpb24pLgorCisgICAgICAgIChjKSBUaGUgbGljZW5zZXMgZ3JhbnRlZCBpbiBTZWN0aW9ucyAyLjIoYSkgYW5kIDIuMihiKSBhcmUKKyAgICAgICAgICAgIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBDb250cmlidXRvciBmaXJzdCBkaXN0cmlidXRlcyBvcgorICAgICAgICAgICAgb3RoZXJ3aXNlIG1ha2VzIHRoZSBNb2RpZmljYXRpb25zIGF2YWlsYWJsZSB0byBhIHRoaXJkCisgICAgICAgICAgICBwYXJ0eS4KKworICAgICAgICAoZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4yKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcworICAgICAgICAgICAgZ3JhbnRlZDogKDEpIGZvciBhbnkgY29kZSB0aGF0IENvbnRyaWJ1dG9yIGhhcyBkZWxldGVkCisgICAgICAgICAgICBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyAoMikgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkCisgICAgICAgICAgICBieTogKGkpIHRoaXJkIHBhcnR5IG1vZGlmaWNhdGlvbnMgb2YgQ29udHJpYnV0b3IgVmVyc2lvbiwKKyAgICAgICAgICAgIG9yIChpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0CisgICAgICAgICAgICBDb250cmlidXRvciB3aXRoIG90aGVyIHNvZnR3YXJlIChleGNlcHQgYXMgcGFydCBvZiB0aGUKKyAgICAgICAgICAgIENvbnRyaWJ1dG9yIFZlcnNpb24pIG9yIG90aGVyIGRldmljZXM7IG9yICgzKSB1bmRlciBQYXRlbnQKKyAgICAgICAgICAgIENsYWltcyBpbmZyaW5nZWQgYnkgQ292ZXJlZCBTb2Z0d2FyZSBpbiB0aGUgYWJzZW5jZSBvZgorICAgICAgICAgICAgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IuCisKKzMuIERpc3RyaWJ1dGlvbiBPYmxpZ2F0aW9ucy4KKworICAgIDMuMS4gQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLgorCisgICAgQW55IENvdmVyZWQgU29mdHdhcmUgdGhhdCBZb3UgZGlzdHJpYnV0ZSBvciBvdGhlcndpc2UgbWFrZQorICAgIGF2YWlsYWJsZSBpbiBFeGVjdXRhYmxlIGZvcm0gbXVzdCBhbHNvIGJlIG1hZGUgYXZhaWxhYmxlIGluIFNvdXJjZQorICAgIENvZGUgZm9ybSBhbmQgdGhhdCBTb3VyY2UgQ29kZSBmb3JtIG11c3QgYmUgZGlzdHJpYnV0ZWQgb25seSB1bmRlcgorICAgIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuICBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIGZvcm0gb2YgdGhlIENvdmVyZWQKKyAgICBTb2Z0d2FyZSBZb3UgZGlzdHJpYnV0ZSBvciBvdGhlcndpc2UgbWFrZSBhdmFpbGFibGUuICBZb3UgbXVzdAorICAgIGluZm9ybSByZWNpcGllbnRzIG9mIGFueSBzdWNoIENvdmVyZWQgU29mdHdhcmUgaW4gRXhlY3V0YWJsZSBmb3JtCisgICAgYXMgdG8gaG93IHRoZXkgY2FuIG9idGFpbiBzdWNoIENvdmVyZWQgU29mdHdhcmUgaW4gU291cmNlIENvZGUKKyAgICBmb3JtIGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhIG1lZGl1bSBjdXN0b21hcmlseQorICAgIHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLgorCisgICAgMy4yLiBNb2RpZmljYXRpb25zLgorCisgICAgVGhlIE1vZGlmaWNhdGlvbnMgdGhhdCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZQorICAgIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuICBZb3UgcmVwcmVzZW50IHRoYXQgWW91CisgICAgYmVsaWV2ZSBZb3VyIE1vZGlmaWNhdGlvbnMgYXJlIFlvdXIgb3JpZ2luYWwgY3JlYXRpb24ocykgYW5kL29yCisgICAgWW91IGhhdmUgc3VmZmljaWVudCByaWdodHMgdG8gZ3JhbnQgdGhlIHJpZ2h0cyBjb252ZXllZCBieSB0aGlzCisgICAgTGljZW5zZS4KKworICAgIDMuMy4gUmVxdWlyZWQgTm90aWNlcy4KKworICAgIFlvdSBtdXN0IGluY2x1ZGUgYSBub3RpY2UgaW4gZWFjaCBvZiBZb3VyIE1vZGlmaWNhdGlvbnMgdGhhdAorICAgIGlkZW50aWZpZXMgWW91IGFzIHRoZSBDb250cmlidXRvciBvZiB0aGUgTW9kaWZpY2F0aW9uLiAgWW91IG1heQorICAgIG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55IGNvcHlyaWdodCwgcGF0ZW50IG9yIHRyYWRlbWFyayBub3RpY2VzCisgICAgY29udGFpbmVkIHdpdGhpbiB0aGUgQ292ZXJlZCBTb2Z0d2FyZSwgb3IgYW55IG5vdGljZXMgb2YgbGljZW5zaW5nCisgICAgb3IgYW55IGRlc2NyaXB0aXZlIHRleHQgZ2l2aW5nIGF0dHJpYnV0aW9uIHRvIGFueSBDb250cmlidXRvciBvcgorICAgIHRoZSBJbml0aWFsIERldmVsb3Blci4KKworICAgIDMuNC4gQXBwbGljYXRpb24gb2YgQWRkaXRpb25hbCBUZXJtcy4KKworICAgIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gYW55IENvdmVyZWQgU29mdHdhcmUgaW4KKyAgICBTb3VyY2UgQ29kZSBmb3JtIHRoYXQgYWx0ZXJzIG9yIHJlc3RyaWN0cyB0aGUgYXBwbGljYWJsZSB2ZXJzaW9uCisgICAgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzJyByaWdodHMgaGVyZXVuZGVyLiAgWW91IG1heQorICAgIGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LAorICAgIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZgorICAgIENvdmVyZWQgU29mdHdhcmUuICBIb3dldmVyLCB5b3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmLAorICAgIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuCisgICAgWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsCisgICAgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzIG9mZmVyZWQgYnkgWW91IGFsb25lLCBhbmQgWW91CisgICAgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5CisgICAgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yCisgICAgc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yCisgICAgbGlhYmlsaXR5IHRlcm1zIFlvdSBvZmZlci4KKworICAgIDMuNS4gRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgVmVyc2lvbnMuCisKKyAgICBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgZm9ybSBvZiB0aGUgQ292ZXJlZCBTb2Z0d2FyZQorICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgdW5kZXIgdGhlIHRlcm1zIG9mIGEgbGljZW5zZSBvZgorICAgIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsCisgICAgcHJvdmlkZWQgdGhhdCBZb3UgYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlCisgICAgYW5kIHRoYXQgdGhlIGxpY2Vuc2UgZm9yIHRoZSBFeGVjdXRhYmxlIGZvcm0gZG9lcyBub3QgYXR0ZW1wdCB0bworICAgIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnQncyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIGZvcm0gZnJvbQorICAgIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIHRoaXMgTGljZW5zZS4gIElmIFlvdSBkaXN0cmlidXRlIHRoZQorICAgIENvdmVyZWQgU29mdHdhcmUgaW4gRXhlY3V0YWJsZSBmb3JtIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UsIFlvdQorICAgIG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tCisgICAgdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsCisgICAgRGV2ZWxvcGVyIG9yIENvbnRyaWJ1dG9yLiAgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlCisgICAgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkCisgICAgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55CisgICAgc3VjaCB0ZXJtcyBZb3Ugb2ZmZXIuCisKKyAgICAzLjYuIExhcmdlciBXb3Jrcy4KKworICAgIFlvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgU29mdHdhcmUgd2l0aAorICAgIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kCisgICAgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gIEluIHN1Y2ggYSBjYXNlLAorICAgIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkCisgICAgZm9yIHRoZSBDb3ZlcmVkIFNvZnR3YXJlLgorCis0LiBWZXJzaW9ucyBvZiB0aGUgTGljZW5zZS4KKworICAgIDQuMS4gTmV3IFZlcnNpb25zLgorCisgICAgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpcyB0aGUgaW5pdGlhbCBsaWNlbnNlIHN0ZXdhcmQgYW5kIG1heQorICAgIHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoaXMgTGljZW5zZSBmcm9tIHRpbWUgdG8KKyAgICB0aW1lLiAgRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4KKyAgICBFeGNlcHQgYXMgcHJvdmlkZWQgaW4gU2VjdGlvbiA0LjMsIG5vIG9uZSBvdGhlciB0aGFuIHRoZSBsaWNlbnNlCisgICAgc3Rld2FyZCBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIExpY2Vuc2UuCisKKyAgICA0LjIuIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuCisKKyAgICBZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UsIGRpc3RyaWJ1dGUgb3Igb3RoZXJ3aXNlIG1ha2UgdGhlCisgICAgQ292ZXJlZCBTb2Z0d2FyZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSB2ZXJzaW9uIG9mIHRoZQorICAgIExpY2Vuc2UgdW5kZXIgd2hpY2ggWW91IG9yaWdpbmFsbHkgcmVjZWl2ZWQgdGhlIENvdmVyZWQgU29mdHdhcmUuCisgICAgSWYgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluY2x1ZGVzIGEgbm90aWNlIGluIHRoZSBPcmlnaW5hbAorICAgIFNvZnR3YXJlIHByb2hpYml0aW5nIGl0IGZyb20gYmVpbmcgZGlzdHJpYnV0ZWQgb3Igb3RoZXJ3aXNlIG1hZGUKKyAgICBhdmFpbGFibGUgdW5kZXIgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSwgWW91IG11c3QKKyAgICBkaXN0cmlidXRlIGFuZCBtYWtlIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMKKyAgICBvZiB0aGUgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSB1bmRlciB3aGljaCBZb3Ugb3JpZ2luYWxseSByZWNlaXZlZAorICAgIHRoZSBDb3ZlcmVkIFNvZnR3YXJlLiAgT3RoZXJ3aXNlLCBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSwKKyAgICBkaXN0cmlidXRlIG9yIG90aGVyd2lzZSBtYWtlIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIGF2YWlsYWJsZSB1bmRlcgorICAgIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHB1Ymxpc2hlZCBieQorICAgIHRoZSBsaWNlbnNlIHN0ZXdhcmQuCisKKyAgICA0LjMuIE1vZGlmaWVkIFZlcnNpb25zLgorCisgICAgV2hlbiBZb3UgYXJlIGFuIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBZb3Ugd2FudCB0byBjcmVhdGUgYSBuZXcKKyAgICBsaWNlbnNlIGZvciBZb3VyIE9yaWdpbmFsIFNvZnR3YXJlLCBZb3UgbWF5IGNyZWF0ZSBhbmQgdXNlIGEKKyAgICBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBpZiBZb3U6IChhKSByZW5hbWUgdGhlIGxpY2Vuc2UKKyAgICBhbmQgcmVtb3ZlIGFueSByZWZlcmVuY2VzIHRvIHRoZSBuYW1lIG9mIHRoZSBsaWNlbnNlIHN0ZXdhcmQKKyAgICAoZXhjZXB0IHRvIG5vdGUgdGhhdCB0aGUgbGljZW5zZSBkaWZmZXJzIGZyb20gdGhpcyBMaWNlbnNlKTsgYW5kCisgICAgKGIpIG90aGVyd2lzZSBtYWtlIGl0IGNsZWFyIHRoYXQgdGhlIGxpY2Vuc2UgY29udGFpbnMgdGVybXMgd2hpY2gKKyAgICBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UuCisKKzUuIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkuCisKKyAgICBDT1ZFUkVEIFNPRlRXQVJFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiAiQVMgSVMiCisgICAgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwKKyAgICBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBDT1ZFUkVECisgICAgU09GVFdBUkUgSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSCisgICAgUFVSUE9TRSBPUiBOT04tSU5GUklOR0lORy4gIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQKKyAgICBQRVJGT1JNQU5DRSBPRiBUSEUgQ09WRVJFRCBTT0ZUV0FSRSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBBTlkKKyAgICBDT1ZFUkVEIFNPRlRXQVJFIFBST1ZFIERFRkVDVElWRSBJTiBBTlkgUkVTUEVDVCwgWU9VIChOT1QgVEhFCisgICAgSU5JVElBTCBERVZFTE9QRVIgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZCisgICAgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uICBUSElTIERJU0NMQUlNRVIgT0YKKyAgICBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuICBOTyBVU0UgT0YKKyAgICBBTlkgQ09WRVJFRCBTT0ZUV0FSRSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUworICAgIERJU0NMQUlNRVIuCisKKzYuIFRFUk1JTkFUSU9OLgorCisgICAgNi4xLiBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUKKyAgICBhdXRvbWF0aWNhbGx5IGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0bworICAgIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4KKyAgICBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQKKyAgICB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUuCisKKyAgICA2LjIuIElmIFlvdSBhc3NlcnQgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIChleGNsdWRpbmcKKyAgICBkZWNsYXJhdG9yeSBqdWRnbWVudCBhY3Rpb25zKSBhZ2FpbnN0IEluaXRpYWwgRGV2ZWxvcGVyIG9yIGEKKyAgICBDb250cmlidXRvciAodGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIENvbnRyaWJ1dG9yIGFnYWluc3Qgd2hvbSBZb3UKKyAgICBhc3NlcnQgc3VjaCBjbGFpbSBpcyByZWZlcnJlZCB0byBhcyAiUGFydGljaXBhbnQiKSBhbGxlZ2luZyB0aGF0CisgICAgdGhlIFBhcnRpY2lwYW50IFNvZnR3YXJlIChtZWFuaW5nIHRoZSBDb250cmlidXRvciBWZXJzaW9uIHdoZXJlCisgICAgdGhlIFBhcnRpY2lwYW50IGlzIGEgQ29udHJpYnV0b3Igb3IgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIHdoZXJlCisgICAgdGhlIFBhcnRpY2lwYW50IGlzIHRoZSBJbml0aWFsIERldmVsb3BlcikgZGlyZWN0bHkgb3IgaW5kaXJlY3RseQorICAgIGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuIGFueSBhbmQgYWxsIHJpZ2h0cyBncmFudGVkIGRpcmVjdGx5IG9yCisgICAgaW5kaXJlY3RseSB0byBZb3UgYnkgc3VjaCBQYXJ0aWNpcGFudCwgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIChpZgorICAgIHRoZSBJbml0aWFsIERldmVsb3BlciBpcyBub3QgdGhlIFBhcnRpY2lwYW50KSBhbmQgYWxsIENvbnRyaWJ1dG9ycworICAgIHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIG9mIHRoaXMgTGljZW5zZSBzaGFsbCwgdXBvbiA2MCBkYXlzCisgICAgbm90aWNlIGZyb20gUGFydGljaXBhbnQgdGVybWluYXRlIHByb3NwZWN0aXZlbHkgYW5kIGF1dG9tYXRpY2FsbHkKKyAgICBhdCB0aGUgZXhwaXJhdGlvbiBvZiBzdWNoIDYwIGRheSBub3RpY2UgcGVyaW9kLCB1bmxlc3MgaWYgd2l0aGluCisgICAgc3VjaCA2MCBkYXkgcGVyaW9kIFlvdSB3aXRoZHJhdyBZb3VyIGNsYWltIHdpdGggcmVzcGVjdCB0byB0aGUKKyAgICBQYXJ0aWNpcGFudCBTb2Z0d2FyZSBhZ2FpbnN0IHN1Y2ggUGFydGljaXBhbnQgZWl0aGVyIHVuaWxhdGVyYWxseQorICAgIG9yIHB1cnN1YW50IHRvIGEgd3JpdHRlbiBhZ3JlZW1lbnQgd2l0aCBQYXJ0aWNpcGFudC4KKworICAgIDYuMy4gSW4gdGhlIGV2ZW50IG9mIHRlcm1pbmF0aW9uIHVuZGVyIFNlY3Rpb25zIDYuMSBvciA2LjIgYWJvdmUsCisgICAgYWxsIGVuZCB1c2VyIGxpY2Vuc2VzIHRoYXQgaGF2ZSBiZWVuIHZhbGlkbHkgZ3JhbnRlZCBieSBZb3Ugb3IgYW55CisgICAgZGlzdHJpYnV0b3IgaGVyZXVuZGVyIHByaW9yIHRvIHRlcm1pbmF0aW9uIChleGNsdWRpbmcgbGljZW5zZXMKKyAgICBncmFudGVkIHRvIFlvdSBieSBhbnkgZGlzdHJpYnV0b3IpIHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24uCisKKzcuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLgorCisgICAgVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBXSEVUSEVSIFRPUlQKKyAgICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBZT1UsIFRIRQorICAgIElOSVRJQUwgREVWRUxPUEVSLCBBTlkgT1RIRVIgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRgorICAgIENPVkVSRUQgU09GVFdBUkUsIE9SIEFOWSBTVVBQTElFUiBPRiBBTlkgT0YgU1VDSCBQQVJUSUVTLCBCRQorICAgIExJQUJMRSBUTyBBTlkgUEVSU09OIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SCisgICAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgSU5DTFVESU5HLCBXSVRIT1VUCisgICAgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TVCBQUk9GSVRTLCBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLCisgICAgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSCisgICAgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBBUlRZIFNIQUxMIEhBVkUgQkVFTgorICAgIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuICBUSElTIExJTUlUQVRJT04gT0YKKyAgICBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwKKyAgICBJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWSdTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVAorICAgIEFQUExJQ0FCTEUgTEFXIFBST0hJQklUUyBTVUNIIExJTUlUQVRJT04uICBTT01FIEpVUklTRElDVElPTlMgRE8KKyAgICBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IKKyAgICBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRISVMgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QKKyAgICBBUFBMWSBUTyBZT1UuCisKKzguIFUuUy4gR09WRVJOTUVOVCBFTkQgVVNFUlMuCisKKyAgICBUaGUgQ292ZXJlZCBTb2Z0d2FyZSBpcyBhICJjb21tZXJjaWFsIGl0ZW0sIiBhcyB0aGF0IHRlcm0gaXMKKyAgICBkZWZpbmVkIGluIDQ4IEMuRi5SLiAyLjEwMSAoT2N0LiAxOTk1KSwgY29uc2lzdGluZyBvZiAiY29tbWVyY2lhbAorICAgIGNvbXB1dGVyIHNvZnR3YXJlIiAoYXMgdGhhdCB0ZXJtIGlzIGRlZmluZWQgYXQgNDgKKyAgICBDLkYuUi4gMjUyLjIyNy03MDE0KGEpKDEpKSBhbmQgImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUKKyAgICBkb2N1bWVudGF0aW9uIiBhcyBzdWNoIHRlcm1zIGFyZSB1c2VkIGluIDQ4IEMuRi5SLiAxMi4yMTIKKyAgICAoU2VwdC4gMTk5NSkuICBDb25zaXN0ZW50IHdpdGggNDggQy5GLlIuIDEyLjIxMiBhbmQgNDgKKyAgICBDLkYuUi4gMjI3LjcyMDItMSB0aHJvdWdoIDIyNy43MjAyLTQgKEp1bmUgMTk5NSksIGFsbAorICAgIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIFNvZnR3YXJlIHdpdGggb25seSB0aG9zZQorICAgIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLiAgVGhpcyBVLlMuIEdvdmVybm1lbnQgUmlnaHRzIGNsYXVzZSBpcyBpbgorICAgIGxpZXUgb2YsIGFuZCBzdXBlcnNlZGVzLCBhbnkgb3RoZXIgRkFSLCBERkFSLCBvciBvdGhlciBjbGF1c2Ugb3IKKyAgICBwcm92aXNpb24gdGhhdCBhZGRyZXNzZXMgR292ZXJubWVudCByaWdodHMgaW4gY29tcHV0ZXIgc29mdHdhcmUKKyAgICB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzkuIE1JU0NFTExBTkVPVVMuCisKKyAgICBUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgc3ViamVjdAorICAgIG1hdHRlciBoZXJlb2YuICBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlCisgICAgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50CisgICAgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuICBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQKKyAgICBieSB0aGUgbGF3IG9mIHRoZSBqdXJpc2RpY3Rpb24gc3BlY2lmaWVkIGluIGEgbm90aWNlIGNvbnRhaW5lZAorICAgIHdpdGhpbiB0aGUgT3JpZ2luYWwgU29mdHdhcmUgKGV4Y2VwdCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3LAorICAgIGlmIGFueSwgcHJvdmlkZXMgb3RoZXJ3aXNlKSwgZXhjbHVkaW5nIHN1Y2gganVyaXNkaWN0aW9uJ3MKKyAgICBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gIEFueSBsaXRpZ2F0aW9uIHJlbGF0aW5nIHRvIHRoaXMKKyAgICBMaWNlbnNlIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgY291cnRzIGxvY2F0ZWQKKyAgICBpbiB0aGUganVyaXNkaWN0aW9uIGFuZCB2ZW51ZSBzcGVjaWZpZWQgaW4gYSBub3RpY2UgY29udGFpbmVkCisgICAgd2l0aGluIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSwgd2l0aCB0aGUgbG9zaW5nIHBhcnR5IHJlc3BvbnNpYmxlCisgICAgZm9yIGNvc3RzLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgY291cnQgY29zdHMgYW5kCisgICAgcmVhc29uYWJsZSBhdHRvcm5leXMnIGZlZXMgYW5kIGV4cGVuc2VzLiAgVGhlIGFwcGxpY2F0aW9uIG9mIHRoZQorICAgIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlCisgICAgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiAgQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoCisgICAgcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQKKyAgICBhZ2FpbnN0IHRoZSBkcmFmdGVyIHNoYWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuICBZb3UgYWdyZWUKKyAgICB0aGF0IFlvdSBhbG9uZSBhcmUgcmVzcG9uc2libGUgZm9yIGNvbXBsaWFuY2Ugd2l0aCB0aGUgVW5pdGVkCisgICAgU3RhdGVzIGV4cG9ydCBhZG1pbmlzdHJhdGlvbiByZWd1bGF0aW9ucyAoYW5kIHRoZSBleHBvcnQgY29udHJvbAorICAgIGxhd3MgYW5kIHJlZ3VsYXRpb24gb2YgYW55IG90aGVyIGNvdW50cmllcykgd2hlbiBZb3UgdXNlLAorICAgIGRpc3RyaWJ1dGUgb3Igb3RoZXJ3aXNlIG1ha2UgYXZhaWxhYmxlIGFueSBDb3ZlcmVkIFNvZnR3YXJlLgorCisxMC4gUkVTUE9OU0lCSUxJVFkgRk9SIENMQUlNUy4KKworICAgIEFzIGJldHdlZW4gSW5pdGlhbCBEZXZlbG9wZXIgYW5kIHRoZSBDb250cmlidXRvcnMsIGVhY2ggcGFydHkgaXMKKyAgICByZXNwb25zaWJsZSBmb3IgY2xhaW1zIGFuZCBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yCisgICAgaW5kaXJlY3RseSwgb3V0IG9mIGl0cyB1dGlsaXphdGlvbiBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlCisgICAgYW5kIFlvdSBhZ3JlZSB0byB3b3JrIHdpdGggSW5pdGlhbCBEZXZlbG9wZXIgYW5kIENvbnRyaWJ1dG9ycyB0bworICAgIGRpc3RyaWJ1dGUgc3VjaCByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuICBOb3RoaW5nCisgICAgaGVyZWluIGlzIGludGVuZGVkIG9yIHNoYWxsIGJlIGRlZW1lZCB0byBjb25zdGl0dXRlIGFueSBhZG1pc3Npb24KKyAgICBvZiBsaWFiaWxpdHkuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05PVElDRSBQVVJTVUFOVCBUTyBTRUNUSU9OIDkgT0YgVEhFIENPTU1PTiBERVZFTE9QTUVOVCBBTkQKK0RJU1RSSUJVVElPTiBMSUNFTlNFIChDRERMKQorCitGb3IgQ292ZXJlZCBTb2Z0d2FyZSBpbiB0aGlzIGRpc3RyaWJ1dGlvbiwgdGhpcyBMaWNlbnNlIHNoYWxsCitiZSBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiBHZXJtYW55IChleGNsdWRpbmcgY29uZmxpY3Qtb2YtbGF3Citwcm92aXNpb25zKS4KKworQW55IGxpdGlnYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlCitqdXJpc2RpY3Rpb24gYW5kIHRoZSBjb3VydHMgb2YgQmVybGluIEdlcm1hbnksIHdpdGggdmVudWUgbHlpbmcKK2luIEJlcmxpbiBHZXJtYW55LgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvQ0RGIGIvbGljZW5zZXMvQ0RGCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlNWRkMzIKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9DREYKQEAgLTAsMCArMSwxNyBAQAorQ29weXJpZ2h0IDIwMDIKK05hdGlvbmFsIFNwYWNlIFNjaWVuY2UgRGF0YSBDZW50ZXIKK05BU0EvR29kZGFyZCBTcGFjZSBGbGlnaHQgQ2VudGVyCisKK1RoaXMgc29mdHdhcmUgbWF5IGJlIGNvcGllZCBvciByZWRpc3RyaWJ1dGVkIGFzIGxvbmcgYXMgaXQgaXMgbm90IHNvbGQKK2ZvciBwcm9maXQsIGJ1dCBpdCBjYW4gYmUgaW5jb3Jwb3JhdGVkIGludG8gYW55IG90aGVyIHN1YnN0YW50aXZlCitwcm9kdWN0IHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zIGZvciBwcm9maXQgb3Igbm9uLXByb2ZpdC4gIElmIHRoZSAKK3NvZnR3YXJlIGlzIG1vZGlmaWVkLCBpdCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBub3RpY2VzOgorCisgIC0gVGhlIHNvZnR3YXJlIGlzIG5vdCB0aGUgb3JpZ2luYWwgKGZvciBwcm90ZWN0aWlvbiBvZiB0aGUgb3JpZ2luYWwKKyAgICBhdXRob3IncyByZXB1dGF0aW9ucyBmcm9tIGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycykKKworICAtIENoYW5nZSBoaXN0b3J5IChlLmcuIGRhdGUsIGZ1bmN0aW9uYWxpdHksIGV0Yy4pCisKK1RoaXMgY29weXJpZ2h0IG5vdGljZSBtdXN0IGJlIHJlcHJvZHVjZWQgb24gZWFjaCBjb3B5IG1hZGUuIFRoaXMgc29mdHdhcmUgaXMgCitwcm92aWRlZCBhcyBpcyB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudGllcyB3aGF0c29ldmVyLiAKKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvQ0xPTkstdHJhZGVtYXJrIGIvbGljZW5zZXMvQ0xPTkstdHJhZGVtYXJrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyYjE3ODYKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9DTE9OSy10cmFkZW1hcmsKQEAgLTAsMCArMSwxNCBAQAorQ2xvbmsgVHJhZGVtYXJrIExpY2Vuc2UKKworJ0Nsb25rJyBpcyBhIHJlZ2lzdGVyZWQgdHJhZGVtYXJrIG9mIE1hdHRoZXMgQmVuZGVyLiBJdCBtYXkgYmUgdXNlZCB3aXRoaW4KK3NvZnR3YXJlIHByb2R1Y3RzIHdoaWNoIGFyZSB1c2luZyBzb3VyY2UgY29kZSBmcm9tIHRoZSBPcGVuQ2xvbmsgcHJvamVjdAord2l0aCB0aGUgZm9sbG93aW5nIGxpbWl0YXRpb25zOgorCitJZiB0aGUgd29yZCAnQ2xvbmsnIGlzIHVzZWQgYXMgdGhlIG5hbWUgb2YgYW55dGhpbmcgaW4geW91ciBzb2Z0d2FyZSBwcm9kdWN0Cit0aGVuIHlvdSBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBub3RpY2UgaW4gYSBzdWl0YWJsZSBwbGFjZSAoZS5nLiBjcmVkaXRzCitzY3JlZW4pOiAiQ2xvbmsiIGlzIGEgcmVnaXN0ZXJlZCB0cmFkZW1hcmsgb2YgTWF0dGhlcyBCZW5kZXIuCisKK0lmIHRoZSB0aXRsZSBvZiB5b3VyIHNvZnR3YXJlIHByb2R1Y3QgY29udGFpbnMgdGhlIHdvcmQgJ0Nsb25rJyB0aGVuIHlvdSBtdXN0CitwcmVmaXggdGhlIHdvcmQgd2l0aCBhbiBhZGRlZCBuYW1lIG9mIHlvdXIgY2hvb3NpbmcsIGUuZy4gJ015Q2xvbmsnIG9yCisnUG9ydGFibGVDbG9uaycgYW5kIHlvdSBtdXN0IHN1YnRpdGxlIHlvdXIgcHJvamVjdCB3aXRoIHRoZSB0ZXJtICdBbiBPcGVuQ2xvbmsKK3Byb2plY3QnLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0NNYWtlIGIvbGljZW5zZXMvQ01ha2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzg2MzZmNAotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0NNYWtlCkBAIC0wLDAgKzEsNDYgQEAKK0NNYWtlIHdhcyBpbml0aWFsbHkgZGV2ZWxvcGVkIGJ5IEtpdHdhcmUgd2l0aCB0aGUgZm9sbG93aW5nIHNwb25zb3JzaGlwOgorCisgKiBOYXRpb25hbCBMaWJyYXJ5IG9mIE1lZGljaW5lIGF0IHRoZSBOYXRpb25hbCBJbnN0aXR1dGVzIG9mIEhlYWx0aAorICAgYXMgcGFydCBvZiB0aGUgSW5zaWdodCBTZWdtZW50YXRpb24gYW5kIFJlZ2lzdHJhdGlvbiBUb29sa2l0IChJVEspLgorCisgKiBVUyBOYXRpb25hbCBMYWJzIChMb3MgQWxhbW9zLCBMaXZlcm1vcmUsIFNhbmRpYSkgQVNDSSBQYXJhbGxlbCAKKyAgIFZpc3VhbGl6YXRpb24gSW5pdGlhdGl2ZS4KKworICogS2l0d2FyZSwgSW5jLgorCitUaGUgQ01ha2UgY29weXJpZ2h0IGlzIGFzIGZvbGxvd3M6CisKK0NvcHlyaWdodCAoYykgMjAwMiBLaXR3YXJlLCBJbmMuLCBJbnNpZ2h0IENvbnNvcnRpdW0KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorbWV0OgorCisgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICogVGhlIG5hbWVzIG9mIEtpdHdhcmUsIEluYy4sIHRoZSBJbnNpZ2h0IENvbnNvcnRpdW0sIG9yIHRoZSBuYW1lcyBvZgorICAgYW55IGNvbnNvcnRpdW0gbWVtYmVycywgb3Igb2YgYW55IGNvbnRyaWJ1dG9ycywgbWF5IG5vdCBiZSB1c2VkIHRvCisgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgKiBNb2RpZmllZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdAorICAgbm90IGJlIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUgorQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKK1NFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCitDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKK09GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK1NlZSBhbHNvIHRoZSBDTWFrZSB3ZWIgc2l0ZTogaHR0cDovL3d3dy5jbWFrZS5vcmcgZm9yIG1vcmUgaW5mb3JtYXRpb24uCmRpZmYgLS1naXQgYS9saWNlbnNlcy9DTlJJIGIvbGljZW5zZXMvQ05SSQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDVhYWE2Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvQ05SSQpAQCAtMCwwICsxLDk2IEBACitDTlJJIE9QRU4gU09VUkNFIExJQ0VOU0UgQUdSRUVNRU5UCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1B5dGhvbiAxLjYgQ05SSSBPUEVOIFNPVVJDRSBMSUNFTlNFIEFHUkVFTUVOVAorCitJTVBPUlRBTlQ6IFBMRUFTRSBSRUFEIFRIRSBGT0xMT1dJTkcgQUdSRUVNRU5UIENBUkVGVUxMWS4gQlkgQ0xJQ0tJTkcKK09OICJBQ0NFUFQiIFdIRVJFIElORElDQVRFRCBCRUxPVywgT1IgQlkgQ09QWUlORywgSU5TVEFMTElORyBPUgorT1RIRVJXSVNFIFVTSU5HIFBZVEhPTiAxLjYgU09GVFdBUkUsIFlPVSBBUkUgREVFTUVEIFRPIEhBVkUgQUdSRUVEIFRPCitUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBMSUNFTlNFIEFHUkVFTUVOVC4KKworMS4gVGhpcyBMSUNFTlNFIEFHUkVFTUVOVCBpcyBiZXR3ZWVuIHRoZSBDb3Jwb3JhdGlvbiBmb3IgTmF0aW9uYWwKK1Jlc2VhcmNoIEluaXRpYXRpdmVzLCBoYXZpbmcgYW4gb2ZmaWNlIGF0IDE4OTUgUHJlc3RvbiBXaGl0ZSBEcml2ZSwKK1Jlc3RvbiwgVkEgMjAxOTEgKCJDTlJJIiksIGFuZCB0aGUgSW5kaXZpZHVhbCBvciBPcmdhbml6YXRpb24KKygiTGljZW5zZWUiKSBhY2Nlc3NpbmcgYW5kIG90aGVyd2lzZSB1c2luZyBQeXRob24gMS42IHNvZnR3YXJlIGluCitzb3VyY2Ugb3IgYmluYXJ5IGZvcm0gYW5kIGl0cyBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24sIGFzIHJlbGVhc2VkIGF0Cit0aGUgd3d3LnB5dGhvbi5vcmcgSW50ZXJuZXQgc2l0ZSBvbiBTZXB0ZW1iZXIgNSwgMjAwMCAoIlB5dGhvbiAxLjYiKS4KKworMi4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudCwgQ05SSQoraGVyZWJ5IGdyYW50cyBMaWNlbnNlZSBhIG5vbmV4Y2x1c2l2ZSwgcm95YWx0eS1mcmVlLCB3b3JsZC13aWRlCitsaWNlbnNlIHRvIHJlcHJvZHVjZSwgYW5hbHl6ZSwgdGVzdCwgcGVyZm9ybSBhbmQvb3IgZGlzcGxheSBwdWJsaWNseSwKK3ByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcywgZGlzdHJpYnV0ZSwgYW5kIG90aGVyd2lzZSB1c2UgUHl0aG9uIDEuNgorYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUgdmVyc2lvbiwgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgQ05SSSdzCitMaWNlbnNlIEFncmVlbWVudCBhbmQgQ05SSSdzIG5vdGljZSBvZiBjb3B5cmlnaHQsIGkuZS4sICJDb3B5cmlnaHQgKGMpCisxOTk1LTIwMDAgQ29ycG9yYXRpb24gZm9yIE5hdGlvbmFsIFJlc2VhcmNoIEluaXRpYXRpdmVzOyBBbGwgUmlnaHRzCitSZXNlcnZlZCIgYXJlIHJldGFpbmVkIGluIFB5dGhvbiAxLjYgYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUKK3ZlcnNpb24gcHJlcGFyZWQgYnkKKworTGljZW5zZWUuIEFsdGVybmF0ZWx5LCBpbiBsaWV1IG9mIENOUkkncyBMaWNlbnNlIEFncmVlbWVudCwgTGljZW5zZWUKK21heSBzdWJzdGl0dXRlIHRoZSBmb2xsb3dpbmcgdGV4dCAob21pdHRpbmcgdGhlIHF1b3Rlcyk6ICJQeXRob24gMS42CitpcyBtYWRlIGF2YWlsYWJsZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBpbiBDTlJJJ3MKK0xpY2Vuc2UgQWdyZWVtZW50LiBUaGlzIEFncmVlbWVudCB0b2dldGhlciB3aXRoIFB5dGhvbiAxLjYgbWF5IGJlCitsb2NhdGVkIG9uIHRoZSBJbnRlcm5ldCB1c2luZyB0aGUgZm9sbG93aW5nIHVuaXF1ZSwgcGVyc2lzdGVudAoraWRlbnRpZmllciAoa25vd24gYXMgYSBoYW5kbGUpOiAxODk1LjIyLzEwMTIuIFRoaXMgQWdyZWVtZW50IG1heSBhbHNvCitiZSBvYnRhaW5lZCBmcm9tIGEgcHJveHkgc2VydmVyIG9uIHRoZSBJbnRlcm5ldCB1c2luZyB0aGUgZm9sbG93aW5nCitVUkw6IGh0dHA6Ly9oZGwuaGFuZGxlLm5ldC8xODk1LjIyLzEwMTIiLgorCiszLiBJbiB0aGUgZXZlbnQgTGljZW5zZWUgcHJlcGFyZXMgYSBkZXJpdmF0aXZlIHdvcmsgdGhhdCBpcyBiYXNlZCBvbgorb3IgaW5jb3Jwb3JhdGVzIFB5dGhvbiAxLjYgb3IgYW55IHBhcnQgdGhlcmVvZiwgYW5kIHdhbnRzIHRvIG1ha2UgdGhlCitkZXJpdmF0aXZlIHdvcmsgYXZhaWxhYmxlIHRvIG90aGVycyBhcyBwcm92aWRlZCBoZXJlaW4sIHRoZW4gTGljZW5zZWUKK2hlcmVieSBhZ3JlZXMgdG8gaW5jbHVkZSBpbiBhbnkgc3VjaCB3b3JrIGEgYnJpZWYgc3VtbWFyeSBvZiB0aGUKK2NoYW5nZXMgbWFkZSB0byBQeXRob24gMS42LgorCis0LiBDTlJJIGlzIG1ha2luZyBQeXRob24gMS42IGF2YWlsYWJsZSB0byBMaWNlbnNlZSBvbiBhbiAiQVMgSVMiCitiYXNpcy4gQ05SSSBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUywgRVhQUkVTUyBPUgorSU1QTElFRC4gQlkgV0FZIE9GIEVYQU1QTEUsIEJVVCBOT1QgTElNSVRBVElPTiwgQ05SSSBNQUtFUyBOTyBBTkQKK0RJU0NMQUlNUyBBTlkgUkVQUkVTRU5UQVRJT04gT1IgV0FSUkFOVFkgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MKK0ZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFIE9SIFRIQVQgVEhFIFVTRSBPRiBQWVRIT04gMS42IFdJTEwgTk9UCitJTkZSSU5HRSBBTlkgVEhJUkQgUEFSVFkgUklHSFRTLgorCis1LiBDTlJJIFNIQUxMIE5PVCBCRSBMSUFCTEUgVE8gTElDRU5TRUUgT1IgQU5ZIE9USEVSIFVTRVJTIE9GIFBZVEhPTgorMS42IEZPUiBBTlkgSU5DSURFTlRBTCwgU1BFQ0lBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIExPU1MgQVMgQQorUkVTVUxUIE9GIE1PRElGWUlORywgRElTVFJJQlVUSU5HLCBPUiBPVEhFUldJU0UgVVNJTkcgUFlUSE9OIDEuNiwgT1IKK0FOWSBERVJJVkFUSVZFIFRIRVJFT0YsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgVEhFUkVPRi4KKworNi4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHVwb24gYSBtYXRlcmlhbAorYnJlYWNoIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4KKworNy4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBzaGFsbCBiZSBnb3Zlcm5lZCBieSBhbmQgaW50ZXJwcmV0ZWQgaW4gYWxsCityZXNwZWN0cyBieSB0aGUgbGF3IG9mIHRoZSBTdGF0ZSBvZiBWaXJnaW5pYSwgZXhjbHVkaW5nIGNvbmZsaWN0IG9mCitsYXcgcHJvdmlzaW9ucy4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIGJlIGRlZW1lZCB0bworY3JlYXRlIGFueSByZWxhdGlvbnNoaXAgb2YgYWdlbmN5LCBwYXJ0bmVyc2hpcCwgb3Igam9pbnQgdmVudHVyZQorYmV0d2VlbiBDTlJJIGFuZCBMaWNlbnNlZS4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBkb2VzIG5vdCBncmFudAorcGVybWlzc2lvbiB0byB1c2UgQ05SSSB0cmFkZW1hcmtzIG9yIHRyYWRlIG5hbWUgaW4gYSB0cmFkZW1hcmsgc2Vuc2UKK3RvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBvciBzZXJ2aWNlcyBvZiBMaWNlbnNlZSwgb3IgYW55IHRoaXJkCitwYXJ0eS4KKworOC4gQnkgY2xpY2tpbmcgb24gdGhlICJBQ0NFUFQiIGJ1dHRvbiB3aGVyZSBpbmRpY2F0ZWQsIG9yIGJ5IGNvcHlpbmcsCitpbnN0YWxsaW5nIG9yIG90aGVyd2lzZSB1c2luZyBQeXRob24gMS42LCBMaWNlbnNlZSBhZ3JlZXMgdG8gYmUgYm91bmQKK2J5IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LgorCitBQ0NFUFQKKworCitDV0kgUEVSTUlTU0lPTlMgU1RBVEVNRU5UIEFORCBESVNDTEFJTUVSCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0NvcHlyaWdodCAoYykgMTk5MSAtIDE5OTUsIFN0aWNodGluZyBNYXRoZW1hdGlzY2ggQ2VudHJ1bSBBbXN0ZXJkYW0sCitUaGUgTmV0aGVybGFuZHMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKK2RvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKK3Byb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQKK2JvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbgorc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBTdGljaHRpbmcgTWF0aGVtYXRpc2NoCitDZW50cnVtIG9yIENXSSBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0bworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCitwZXJtaXNzaW9uLgorCitTVElDSFRJTkcgTUFUSEVNQVRJU0NIIENFTlRSVU0gRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPCitUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5ECitGSVRORVNTLCBJTiBOTyBFVkVOVCBTSEFMTCBTVElDSFRJTkcgTUFUSEVNQVRJU0NIIENFTlRSVU0gQkUgTElBQkxFCitGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCitBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvQ05SSS1RVUlYT1RFLTIuNCBiL2xpY2Vuc2VzL0NOUkktUVVJWE9URS0yLjQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTExYmE5MAotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0NOUkktUVVJWE9URS0yLjQKQEAgLTAsMCArMSw2NiBAQAorQ05SSSBPUEVOIFNPVVJDRSBMSUNFTlNFIEFHUkVFTUVOVCBGT1IgUVVJWE9URS0yLjQKKworSU1QT1JUQU5UOiBQTEVBU0UgUkVBRCBUSEUgRk9MTE9XSU5HIEFHUkVFTUVOVCBDQVJFRlVMTFkuICBCWSBDT1BZSU5HLAorSU5TVEFMTElORyBPUiBPVEhFUldJU0UgVVNJTkcgUVVJWE9URS0yLjQgU09GVFdBUkUsIFlPVSBBUkUgREVFTUVEIFRPCitIQVZFIEFHUkVFRCBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBMSUNFTlNFCitBR1JFRU1FTlQuCisKKzEuIFRoaXMgTElDRU5TRSBBR1JFRU1FTlQgaXMgYmV0d2VlbiBDb3Jwb3JhdGlvbiBmb3IgTmF0aW9uYWwgUmVzZWFyY2gKK0luaXRpYXRpdmVzLCBoYXZpbmcgYW4gb2ZmaWNlIGF0IDE4OTUgUHJlc3RvbiBXaGl0ZSBEcml2ZSwgUmVzdG9uLCBWQQorMjAxOTEgKCJDTlJJIiksIGFuZCB0aGUgSW5kaXZpZHVhbCBvciBPcmdhbml6YXRpb24gKCJMaWNlbnNlZSIpCitjb3B5aW5nLCBpbnN0YWxsaW5nIG9yIG90aGVyd2lzZSB1c2luZyBRdWl4b3RlLTIuNCBzb2Z0d2FyZSBpbiBzb3VyY2UKK29yIGJpbmFyeSBmb3JtIGFuZCBpdHMgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uICgiUXVpeG90ZS0yLjQiKS4KKworMi4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudCwgQ05SSQoraGVyZWJ5IGdyYW50cyBMaWNlbnNlZSBhIG5vbmV4Y2x1c2l2ZSwgcm95YWx0eS1mcmVlLCB3b3JsZC13aWRlCitsaWNlbnNlIHRvIHJlcHJvZHVjZSwgYW5hbHl6ZSwgdGVzdCwgcGVyZm9ybSBhbmQvb3IgZGlzcGxheSBwdWJsaWNseSwKK3ByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcywgZGlzdHJpYnV0ZSwgYW5kIG90aGVyd2lzZSB1c2UgUXVpeG90ZS0yLjQKK2Fsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlIHZlcnNpb24sIHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IENOUkkncworTGljZW5zZSBBZ3JlZW1lbnQgYW5kIENOUkkncyBub3RpY2Ugb2YgY29weXJpZ2h0LCBpLmUuLCAiQ29weXJpZ2h0IMKpCisyMDA1IENvcnBvcmF0aW9uIGZvciBOYXRpb25hbCBSZXNlYXJjaCBJbml0aWF0aXZlczsgQWxsIFJpZ2h0cworUmVzZXJ2ZWQiIGFyZSByZXRhaW5lZCBpbiBRdWl4b3RlLTIuNCBhbG9uZSBvciBpbiBhbnkgZGVyaXZhdGl2ZQordmVyc2lvbiBwcmVwYXJlZCBieSBMaWNlbnNlZS4KKworCiszLiBJbiB0aGUgZXZlbnQgTGljZW5zZWUgcHJlcGFyZXMgYSBkZXJpdmF0aXZlIHdvcmsgdGhhdCBpcyBiYXNlZCBvbgorb3IgaW5jb3Jwb3JhdGVzIFF1aXhvdGUtMi40LCBvciBhbnkgcGFydCB0aGVyZW9mLCBhbmQgd2FudHMgdG8gbWFrZQordGhlIGRlcml2YXRpdmUgd29yayBhdmFpbGFibGUgdG8gb3RoZXJzIGFzIHByb3ZpZGVkIGhlcmVpbiwgdGhlbgorTGljZW5zZWUgaGVyZWJ5IGFncmVlcyB0byBpbmNsdWRlIGluIGFueSBzdWNoIHdvcmsgYSBicmllZiBzdW1tYXJ5IG9mCit0aGUgY2hhbmdlcyBtYWRlIHRvIFF1aXhvdGUtMi40LgorCis0LiBDTlJJIGlzIG1ha2luZyBRdWl4b3RlLTIuNCBhdmFpbGFibGUgdG8gTGljZW5zZWUgb24gYW4gIkFTIElTIgorYmFzaXMuICBDTlJJIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLCBFWFBSRVNTIE9SCitJTVBMSUVELiAgQlkgV0FZIE9GIEVYQU1QTEUsIEJVVCBOT1QgTElNSVRBVElPTiwgQ05SSSBNQUtFUyBOTyBBTkQKK0RJU0NMQUlNUyBBTlkgUkVQUkVTRU5UQVRJT04gT1IgV0FSUkFOVFkgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MKK0ZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFIE9SIFRIQVQgVEhFIFVTRSBPRiBRVUlYT1RFLTIuNCBXSUxMIE5PVAorSU5GUklOR0UgQU5ZIFRISVJEIFBBUlRZIFJJR0hUUy4KKworNS4gQ05SSSBTSEFMTCBOT1QgQkUgTElBQkxFIFRPIExJQ0VOU0VFIE9SIEFOWSBPVEhFUiBVU0VSUyBPRgorUVVJWE9URS0yLjQgRk9SIEFOWSBJTkNJREVOVEFMLCBTUEVDSUFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IKK0xPU1MgQVMgQSBSRVNVTFQgT0YgTU9ESUZZSU5HLCBESVNUUklCVVRJTkcsIE9SIE9USEVSV0lTRSBVU0lORworUVVJWE9URS0yLjQsIE9SIEFOWSBERVJJVkFUSVZFIFRIRVJFT0YsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIFRIRVJFT0YuCisKKzYuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB1cG9uIGEgbWF0ZXJpYWwKK2JyZWFjaCBvZiBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuCisKKzcuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgc2hhbGwgYmUgZ292ZXJuZWQgYnkgdGhlIGZlZGVyYWwKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXcgb2YgdGhlIFVuaXRlZCBTdGF0ZXMsIGluY2x1ZGluZyB3aXRob3V0CitsaW1pdGF0aW9uIHRoZSBmZWRlcmFsIGNvcHlyaWdodCBsYXcsIGFuZCwgdG8gdGhlIGV4dGVudCBzdWNoCitVLlMuIGZlZGVyYWwgbGF3IGRvZXMgbm90IGFwcGx5LCBieSB0aGUgbGF3IG9mIHRoZSBDb21tb253ZWFsdGggb2YKK1ZpcmdpbmlhLCBleGNsdWRpbmcgVmlyZ2luaWEncyBjb25mbGljdCBvZiBsYXcKK3Byb3Zpc2lvbnMuIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nLCB3aXRoIHJlZ2FyZCB0byBkZXJpdmF0aXZlCit3b3JrcyBiYXNlZCBvbiBRdWl4b3RlLTIuNCB0aGF0IGluY29ycG9yYXRlIG5vbi1zZXBhcmFibGUgbWF0ZXJpYWwKK3RoYXQgd2FzIHByZXZpb3VzbHkgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisoR1BMKSwgdGhlIGxhdyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIFZpcmdpbmlhIHNoYWxsIGdvdmVybiB0aGlzCitMaWNlbnNlIEFncmVlbWVudCBvbmx5IGFzIHRvIGlzc3VlcyBhcmlzaW5nIHVuZGVyIG9yIHdpdGggcmVzcGVjdCB0bworUGFyYWdyYXBocyA0LCA1LCBhbmQgNyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBOb3RoaW5nIGluIHRoaXMKK0xpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIGJlIGRlZW1lZCB0byBjcmVhdGUgYW55IHJlbGF0aW9uc2hpcCBvZgorYWdlbmN5LCBwYXJ0bmVyc2hpcCwgb3Igam9pbnQgdmVudHVyZSBiZXR3ZWVuIENOUkkgYW5kIExpY2Vuc2VlLiAgVGhpcworTGljZW5zZSBBZ3JlZW1lbnQgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UgQ05SSSB0cmFkZW1hcmtzIG9yCit0cmFkZSBuYW1lIGluIGEgdHJhZGVtYXJrIHNlbnNlIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBvcgorc2VydmljZXMgb2YgTGljZW5zZWUsIG9yIGFueSB0aGlyZCBwYXJ0eS4KKworOC4gQnkgY29weWluZywgaW5zdGFsbGluZyBvciBvdGhlcndpc2UgdXNpbmcgUXVpeG90ZS0yLjQsIExpY2Vuc2VlCithZ3JlZXMgdG8gYmUgYm91bmQgYnkgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZQorQWdyZWVtZW50LgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvQ1BBTC0xLjAgYi9saWNlbnNlcy9DUEFMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDY3NDdmCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvQ1BBTC0xLjAKQEAgLTAsMCArMSw0MTUgQEAKK0NvbW1vbiBQdWJsaWMgQXR0cmlidXRpb24gTGljZW5zZSBWZXJzaW9uIDEuMCAoQ1BBTCkKKzEuICJEZWZpbml0aW9ucyIKKzEuMC4xICJDb21tZXJjaWFsIFVzZSIgbWVhbnMgZGlzdHJpYnV0aW9uIG9yIG90aGVyd2lzZSBtYWtpbmcgdGhlIENvdmVyZWQgQ29kZSAKK2F2YWlsYWJsZSB0byBhIHRoaXJkIHBhcnR5LgorMS4xICJDb250cmlidXRvciIgbWVhbnMgZWFjaCBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiAKK29mIE1vZGlmaWNhdGlvbnMuCisxLjIgIkNvbnRyaWJ1dG9yIFZlcnNpb24iIG1lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgcHJpb3IgCitNb2RpZmljYXRpb25zIHVzZWQgYnkgYSBDb250cmlidXRvciwgYW5kIHRoZSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCAKK3BhcnRpY3VsYXIgQ29udHJpYnV0b3IuCisxLjMgIkNvdmVyZWQgQ29kZSIgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucyBvciB0aGUgY29tYmluYXRpb24gCitvZiB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlIGluY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLgorMS40ICJFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20iIG1lYW5zIGEgbWVjaGFuaXNtIGdlbmVyYWxseSBhY2NlcHRlZCBpbiAKK3RoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljIHRyYW5zZmVyIG9mIGRhdGEuCisxLjUgIkV4ZWN1dGFibGUiIG1lYW5zIENvdmVyZWQgQ29kZSBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIFNvdXJjZSBDb2RlLgorMS42ICJJbml0aWFsIERldmVsb3BlciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IGlkZW50aWZpZWQgYXMgdGhlIAorSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEuCisxLjcgIkxhcmdlciBXb3JrIiBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yIHBvcnRpb25zIHRoZXJlb2YgCit3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisxLjggIkxpY2Vuc2UiIG1lYW5zIHRoaXMgZG9jdW1lbnQuCisxLjguMSAiTGljZW5zYWJsZSIgbWVhbnMgaGF2aW5nIHRoZSByaWdodCB0byBncmFudCwgdG8gdGhlIG1heGltdW0gZXh0ZW50IAorcG9zc2libGUsIHdoZXRoZXIgYXQgdGhlIHRpbWUgb2YgdGhlIGluaXRpYWwgZ3JhbnQgb3Igc3Vic2VxdWVudGx5IGFjcXVpcmVkLCAKK2FueSBhbmQgYWxsIG9mIHRoZSByaWdodHMgY29udmV5ZWQgaGVyZWluLgorMS45ICJNb2RpZmljYXRpb25zIiBtZWFucyBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgc3Vic3RhbmNlIG9yIAorc3RydWN0dXJlIG9mIGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4gV2hlbiAKK0NvdmVyZWQgQ29kZSBpcyByZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywgYSBNb2RpZmljYXRpb24gaXM6CitBLiBBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgT3JpZ2luYWwgCitDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCitCLiBBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyAKK01vZGlmaWNhdGlvbnMuCisxLjEwICJPcmlnaW5hbCBDb2RlIiBtZWFucyBTb3VyY2UgQ29kZSBvZiBjb21wdXRlciBzb2Z0d2FyZSBjb2RlIHdoaWNoIGlzIAorZGVzY3JpYmVkIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBIGFzIE9yaWdpbmFsIENvZGUsIGFuZCAKK3doaWNoLCBhdCB0aGUgdGltZSBvZiBpdHMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UgaXMgbm90IGFscmVhZHkgQ292ZXJlZCAKK0NvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLgorMS4xMC4xICJQYXRlbnQgQ2xhaW1zIiBtZWFucyBhbnkgcGF0ZW50IGNsYWltKHMpLCBub3cgb3duZWQgb3IgaGVyZWFmdGVyIAorYWNxdWlyZWQsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIG1ldGhvZCwgcHJvY2VzcywgYW5kIGFwcGFyYXR1cyBjbGFpbXMsIAoraW4gYW55IHBhdGVudCBMaWNlbnNhYmxlIGJ5IGdyYW50b3IuCisxLjExICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBDb3ZlcmVkIENvZGUgZm9yIG1ha2luZyAKK21vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCAKK2ludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgCitpbnN0YWxsYXRpb24gb2YgYW4gRXhlY3V0YWJsZSwgb3Igc291cmNlIGNvZGUgZGlmZmVyZW50aWFsIGNvbXBhcmlzb25zIGFnYWluc3QgCitlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW5vdGhlciB3ZWxsIGtub3duLCBhdmFpbGFibGUgQ292ZXJlZCBDb2RlIG9mIHRoZSAKK0NvbnRyaWJ1dG9y4oCZcyBjaG9pY2UuIFRoZSBTb3VyY2UgQ29kZSBjYW4gYmUgaW4gYSBjb21wcmVzc2VkIG9yIGFyY2hpdmFsIAorZm9ybSwgcHJvdmlkZWQgdGhlIGFwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24gb3IgZGUtYXJjaGl2aW5nIHNvZnR3YXJlIGlzIHdpZGVseSAKK2F2YWlsYWJsZSBmb3Igbm8gY2hhcmdlLgorMS4xMiAiWW91IiAob3IgIllvdXIiKSBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIAordW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiAKK29mIHRoaXMgTGljZW5zZSBpc3N1ZWQgdW5kZXIgU2VjdGlvbiA2LjEuIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgaW5jbHVkZXMgCithbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIAorWW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIAoraW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSAKK2NvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBtb3JlIHRoYW4gZmlmdHkgcGVyY2VudCAoNTAlKSBvZiB0aGUgCitvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisyLiBTb3VyY2UgQ29kZSBMaWNlbnNlLgorMi4xIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4KK1RoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgCitub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczoKKyhhKSB1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvciB0cmFkZW1hcmspIAorTGljZW5zYWJsZSBieSBJbml0aWFsIERldmVsb3BlciB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCAKK3N1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIHdpdGggb3IgCit3aXRob3V0IE1vZGlmaWNhdGlvbnMsIGFuZC9vciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorKGIpIHVuZGVyIFBhdGVudHMgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZyBvciBzZWxsaW5nIG9mIE9yaWdpbmFsIAorQ29kZSwgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIHByYWN0aWNlLCBzZWxsLCBhbmQgb2ZmZXIgZm9yIHNhbGUsIGFuZC9vciAKK290aGVyd2lzZSBkaXNwb3NlIG9mIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKS4KKyhjKSB0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiB0aGlzIFNlY3Rpb24gMi4xKGEpIGFuZCAoYikgYXJlIGVmZmVjdGl2ZSBvbiB0aGUgCitkYXRlIEluaXRpYWwgRGV2ZWxvcGVyIGZpcnN0IGRpc3RyaWJ1dGVzIE9yaWdpbmFsIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgCitMaWNlbnNlLgorKGQpIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMShiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZDogMSkgZm9yIAorY29kZSB0aGF0IFlvdSBkZWxldGUgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZTsgMikgc2VwYXJhdGUgZnJvbSB0aGUgT3JpZ2luYWwgCitDb2RlOyBvciAzKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IGkpIHRoZSBtb2RpZmljYXRpb24gb2YgdGhlIE9yaWdpbmFsIAorQ29kZSBvciBpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgZGV2aWNlcy4KKzIuMiBDb250cmlidXRvciBHcmFudC4KK1N1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcywgZWFjaCBDb250cmlidXRvciBoZXJlYnkgCitncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UKKyhhKSB1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvciB0cmFkZW1hcmspIAorTGljZW5zYWJsZSBieSBDb250cmlidXRvciwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgCitzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBNb2RpZmljYXRpb25zIGNyZWF0ZWQgYnkgc3VjaCBDb250cmlidXRvciAob3IgCitwb3J0aW9ucyB0aGVyZW9mKSBlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcywgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBhcyAKK0NvdmVyZWQgQ29kZSBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKyhiKSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZywgb3Igc2VsbGluZyBvZiAKK01vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIGVpdGhlciBhbG9uZSBhbmQvb3IgaW4gY29tYmluYXRpb24gd2l0aCAKK2l0cyBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyBvZiBzdWNoIGNvbWJpbmF0aW9uKSwgdG8gbWFrZSwgdXNlLCBzZWxsLCAKK29mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZjogMSkgTW9kaWZpY2F0aW9ucyBtYWRlIAorYnkgdGhhdCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZik7IGFuZCAyKSB0aGUgY29tYmluYXRpb24gb2YgCitNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciB3aXRoIGl0cyBDb250cmlidXRvciBWZXJzaW9uIChvciAKK3BvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLgorKGMpIHRoZSBsaWNlbnNlcyBncmFudGVkIGluIFNlY3Rpb25zIDIuMihhKSBhbmQgMi4yKGIpIGFyZSBlZmZlY3RpdmUgb24gdGhlIAorZGF0ZSBDb250cmlidXRvciBmaXJzdCBtYWtlcyBDb21tZXJjaWFsIFVzZSBvZiB0aGUgQ292ZXJlZCBDb2RlLgorKGQpIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMihiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZDogMSkgZm9yIAorYW55IGNvZGUgdGhhdCBDb250cmlidXRvciBoYXMgZGVsZXRlZCBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyAyKSBzZXBhcmF0ZSAKK2Zyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247IDMpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogaSkgdGhpcmQgcGFydHkgCittb2RpZmljYXRpb25zIG9mIENvbnRyaWJ1dG9yIFZlcnNpb24gb3IgaWkpIHRoZSBjb21iaW5hdGlvbiBvZiBNb2RpZmljYXRpb25zIAorbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggb3RoZXIgc29mdHdhcmUgKGV4Y2VwdCBhcyBwYXJ0IG9mIHRoZSBDb250cmlidXRvciAKK1ZlcnNpb24pIG9yIG90aGVyIGRldmljZXM7IG9yIDQpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IENvdmVyZWQgQ29kZSAKK2luIHRoZSBhYnNlbmNlIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yLgorMy4gRGlzdHJpYnV0aW9uIE9ibGlnYXRpb25zLgorMy4xIEFwcGxpY2F0aW9uIG9mIExpY2Vuc2UuCitUaGUgTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZSBnb3Zlcm5lZCBieSAKK3RoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gU2VjdGlvbiAyLjIuIFRoZSBTb3VyY2UgCitDb2RlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG1heSBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIAorTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSByZWxlYXNlZCB1bmRlciBTZWN0aW9uIDYuMSwgYW5kIFlvdSAKK211c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgU291cmNlIENvZGUgWW91IAorZGlzdHJpYnV0ZS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUgdmVyc2lvbiAKK3RoYXQgYWx0ZXJzIG9yIHJlc3RyaWN0cyB0aGUgYXBwbGljYWJsZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgCityZWNpcGllbnRz4oCZIHJpZ2h0cyBoZXJldW5kZXIuIEhvd2V2ZXIsIFlvdSBtYXkgaW5jbHVkZSBhbiBhZGRpdGlvbmFsIGRvY3VtZW50IAorb2ZmZXJpbmcgdGhlIGFkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNS4KKzMuMiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuCitBbnkgTW9kaWZpY2F0aW9uIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgbXVzdCBiZSBtYWRlIAorYXZhaWxhYmxlIGluIFNvdXJjZSBDb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBlaXRoZXIgb24gdGhlIAorc2FtZSBtZWRpYSBhcyBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgdmlhIGFuIGFjY2VwdGVkIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIAorTWVjaGFuaXNtIHRvIGFueW9uZSB0byB3aG9tIHlvdSBtYWRlIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBhdmFpbGFibGU7IGFuZCBpZiAKK21hZGUgYXZhaWxhYmxlIHZpYSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20sIG11c3QgcmVtYWluIGF2YWlsYWJsZSBmb3IgCithdCBsZWFzdCB0d2VsdmUgKDEyKSBtb250aHMgYWZ0ZXIgdGhlIGRhdGUgaXQgaW5pdGlhbGx5IGJlY2FtZSBhdmFpbGFibGUsIG9yIGF0IAorbGVhc3Qgc2l4ICg2KSBtb250aHMgYWZ0ZXIgYSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhhdCBwYXJ0aWN1bGFyIE1vZGlmaWNhdGlvbiAKK2hhcyBiZWVuIG1hZGUgYXZhaWxhYmxlIHRvIHN1Y2ggcmVjaXBpZW50cy4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgCit0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHJlbWFpbnMgYXZhaWxhYmxlIGV2ZW4gaWYgdGhlIEVsZWN0cm9uaWMgCitEaXN0cmlidXRpb24gTWVjaGFuaXNtIGlzIG1haW50YWluZWQgYnkgYSB0aGlyZCBwYXJ0eS4KKzMuMyBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLgorWW91IG11c3QgY2F1c2UgYWxsIENvdmVyZWQgQ29kZSB0byB3aGljaCBZb3UgY29udHJpYnV0ZSB0byBjb250YWluIGEgZmlsZSAKK2RvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIFlvdSBtYWRlIHRvIGNyZWF0ZSB0aGF0IENvdmVyZWQgQ29kZSBhbmQgdGhlIGRhdGUgb2YgCithbnkgY2hhbmdlLiBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0IHRoZSBNb2RpZmljYXRpb24gaXMgCitkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIE9yaWdpbmFsIENvZGUgcHJvdmlkZWQgYnkgdGhlIEluaXRpYWwgCitEZXZlbG9wZXIgYW5kIGluY2x1ZGluZyB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gKGEpIHRoZSBTb3VyY2UgCitDb2RlLCBhbmQgKGIpIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiAKK2luIHdoaWNoIFlvdSBkZXNjcmliZSB0aGUgb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgQ292ZXJlZCBDb2RlLgorMy40IEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzCisoYSkgVGhpcmQgUGFydHkgQ2xhaW1zLgorSWYgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSB0aGF0IGEgbGljZW5zZSB1bmRlciBhIHRoaXJkIHBhcnR54oCZcyAKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaXMgcmVxdWlyZWQgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggCitDb250cmlidXRvciB1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yLCBDb250cmlidXRvciBtdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUgCit3aXRoIHRoZSBTb3VyY2UgQ29kZSBkaXN0cmlidXRpb24gdGl0bGVkICJMRUdBTCIgd2hpY2ggZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQgCit0aGUgcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgcmVjaXBpZW50IHdpbGwga25vdyB3aG9tIAordG8gY29udGFjdC4gSWYgQ29udHJpYnV0b3Igb2J0YWlucyBzdWNoIGtub3dsZWRnZSBhZnRlciB0aGUgTW9kaWZpY2F0aW9uIGlzIAorbWFkZSBhdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4yLCBDb250cmlidXRvciBzaGFsbCBwcm9tcHRseSBtb2RpZnkgCit0aGUgTEVHQUwgZmlsZSBpbiBhbGwgY29waWVzIENvbnRyaWJ1dG9yIG1ha2VzIGF2YWlsYWJsZSB0aGVyZWFmdGVyIGFuZCBzaGFsbCAKK3Rha2Ugb3RoZXIgc3RlcHMgKHN1Y2ggYXMgbm90aWZ5aW5nIGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdHMgb3IgbmV3c2dyb3VwcykgCityZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobyByZWNlaXZlZCB0aGUgQ292ZXJlZCBDb2RlIHRoYXQgbmV3IAora25vd2xlZGdlIGhhcyBiZWVuIG9idGFpbmVkLgorKGIpIENvbnRyaWJ1dG9yIEFQSXMuCitJZiBDb250cmlidXRvcuKAmXMgTW9kaWZpY2F0aW9ucyBpbmNsdWRlIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSAKK2FuZCBDb250cmlidXRvciBoYXMga25vd2xlZGdlIG9mIHBhdGVudCBsaWNlbnNlcyB3aGljaCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgCit0byBpbXBsZW1lbnQgdGhhdCBBUEksIENvbnRyaWJ1dG9yIG11c3QgYWxzbyBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIAorTEVHQUwgZmlsZS4KKyhjKSBSZXByZXNlbnRhdGlvbnMuCitDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQsIGV4Y2VwdCBhcyBkaXNjbG9zZWQgcHVyc3VhbnQgdG8gU2VjdGlvbiAzLjQoYSkgCithYm92ZSwgQ29udHJpYnV0b3IgYmVsaWV2ZXMgdGhhdCBDb250cmlidXRvcuKAmXMgTW9kaWZpY2F0aW9ucyBhcmUgCitDb250cmlidXRvcuKAmXMgb3JpZ2luYWwgY3JlYXRpb24ocykgYW5kL29yIENvbnRyaWJ1dG9yIGhhcyBzdWZmaWNpZW50IHJpZ2h0cyAKK3RvIGdyYW50IHRoZSByaWdodHMgY29udmV5ZWQgYnkgdGhpcyBMaWNlbnNlLgorMy41IFJlcXVpcmVkIE5vdGljZXMuCitZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UgQ29kZS4gSWYgCitpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHN1Y2ggbm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UgQ29kZSBmaWxlIGR1ZSB0byAKK2l0cyBzdHJ1Y3R1cmUsIHRoZW4gWW91IG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEgCityZWxldmFudCBkaXJlY3RvcnkpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4gSWYgCitZb3UgY3JlYXRlZCBvbmUgb3IgbW9yZSBNb2RpZmljYXRpb24ocykgWW91IG1heSBhZGQgeW91ciBuYW1lIGFzIGEgQ29udHJpYnV0b3IgCit0byB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuIFlvdSBtdXN0IGFsc28gZHVwbGljYXRlIHRoaXMgTGljZW5zZSBpbiAKK2FueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgU291cmNlIENvZGUgd2hlcmUgWW91IGRlc2NyaWJlIHJlY2lwaWVudHPigJkgcmlnaHRzIAorb3Igb3duZXJzaGlwIHJpZ2h0cyByZWxhdGluZyB0byBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gCitjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgCitvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBDb2RlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gCitiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IAorbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYW4gYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciAKK2xpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzIG9mZmVyZWQgYnkgWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgCit0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSAKK0luaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsIAoraW5kZW1uaXR5IG9yIGxpYWJpbGl0eSB0ZXJtcyBZb3Ugb2ZmZXIuCiszLjYgRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgVmVyc2lvbnMuCitZb3UgbWF5IGRpc3RyaWJ1dGUgQ292ZXJlZCBDb2RlIGluIEV4ZWN1dGFibGUgZm9ybSBvbmx5IGlmIHRoZSByZXF1aXJlbWVudHMgb2YgCitTZWN0aW9uIDMuMS0zLjUgaGF2ZSBiZWVuIG1ldCBmb3IgdGhhdCBDb3ZlcmVkIENvZGUsIGFuZCBpZiBZb3UgaW5jbHVkZSBhIAorbm90aWNlIHN0YXRpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiB0aGUgQ292ZXJlZCBDb2RlIGlzIGF2YWlsYWJsZSAKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgWW91IAoraGF2ZSBmdWxmaWxsZWQgdGhlIG9ibGlnYXRpb25zIG9mIFNlY3Rpb24gMy4yLiBUaGUgbm90aWNlIG11c3QgYmUgY29uc3BpY3VvdXNseSAKK2luY2x1ZGVkIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uLCByZWxhdGVkIGRvY3VtZW50YXRpb24gb3IgCitjb2xsYXRlcmFsIGluIHdoaWNoIFlvdSBkZXNjcmliZSByZWNpcGllbnRz4oCZIHJpZ2h0cyByZWxhdGluZyB0byB0aGUgQ292ZXJlZCAKK0NvZGUuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBvciBvd25lcnNoaXAgCityaWdodHMgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSAKK3RoaXMgTGljZW5zZSwgcHJvdmlkZWQgdGhhdCBZb3UgYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyAKK0xpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UgZm9yIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gZG9lcyBub3QgYXR0ZW1wdCB0byAKK2xpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnTigJlzIHJpZ2h0cyBpbiB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBmcm9tIHRoZSAKK3JpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLiBJZiBZb3UgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIAordW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgCit3aGljaCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBub3QgYnkgdGhlIEluaXRpYWwgCitEZXZlbG9wZXIsIE9yaWdpbmFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IAordGhlIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgCitsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBEZXZlbG9wZXIgb3Igc3VjaCAKK0NvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIGFueSBzdWNoIHRlcm1zIFlvdSBvZmZlci4KKzMuNyBMYXJnZXIgV29ya3MuCitZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlciBjb2RlIG5vdCAKK2dvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgCitzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgCitMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUuCis0LiBJbmFiaWxpdHkgdG8gQ29tcGx5IER1ZSB0byBTdGF0dXRlIG9yIFJlZ3VsYXRpb24uCitJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciBZb3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgCit3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZSBkdWUgdG8gc3RhdHV0ZSwganVkaWNpYWwgb3JkZXIsIAorb3IgcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUgCittYXhpbXVtIGV4dGVudCBwb3NzaWJsZTsgYW5kIChiKSBkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkgCithZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgTEVHQUwgZmlsZSBkZXNjcmliZWQgaW4gCitTZWN0aW9uIDMuNCBhbmQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBTb3VyY2UgQ29kZS4gCitFeGNlcHQgdG8gdGhlIGV4dGVudCBwcm9oaWJpdGVkIGJ5IHN0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0IAorYmUgc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlIHRvIAordW5kZXJzdGFuZCBpdC4KKzUuIEFwcGxpY2F0aW9uIG9mIHRoaXMgTGljZW5zZS4KK1RoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGNvZGUgdG8gd2hpY2ggdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhhcyBhdHRhY2hlZCB0aGUgCitub3RpY2UgaW4gRXhoaWJpdCBBIGFuZCB0byByZWxhdGVkIENvdmVyZWQgQ29kZS4KKzYuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLgorNi4xIE5ldyBWZXJzaW9ucy4KK1NvY2lhbHRleHQsIEluYy4gKCJTb2NpYWx0ZXh0IikgbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSAKK0xpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiAKK251bWJlci4KKzYuMiBFZmZlY3Qgb2YgTmV3IFZlcnNpb25zLgorT25jZSBDb3ZlcmVkIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCAKK1lvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gCitjaG9vc2UgdG8gdXNlIHN1Y2ggQ292ZXJlZCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIAordGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IFNvY2lhbHRleHQuIE5vIG9uZSBvdGhlciB0aGFuIFNvY2lhbHRleHQgaGFzIHRoZSByaWdodCAKK3RvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIENvZGUgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCis2LjMgRGVyaXZhdGl2ZSBXb3Jrcy4KK0lmIFlvdSBjcmVhdGUgb3IgdXNlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgKHdoaWNoIHlvdSBtYXkgb25seSBkbyAKK2luIG9yZGVyIHRvIGFwcGx5IGl0IHRvIGNvZGUgd2hpY2ggaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgCitMaWNlbnNlKSwgWW91IG11c3QgKGEpIHJlbmFtZSBZb3VyIGxpY2Vuc2Ugc28gdGhhdCB0aGUgcGhyYXNlcyAiU29jaWFsdGV4dCIsIAorIkNQQUwiIG9yIGFueSBjb25mdXNpbmdseSBzaW1pbGFyIHBocmFzZSBkbyBub3QgYXBwZWFyIGluIHlvdXIgbGljZW5zZSAoZXhjZXB0IAordG8gbm90ZSB0aGF0IHlvdXIgbGljZW5zZSBkaWZmZXJzIGZyb20gdGhpcyBMaWNlbnNlKSBhbmQgKGIpIG90aGVyd2lzZSBtYWtlIGl0IAorY2xlYXIgdGhhdCBZb3VyIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UgY29udGFpbnMgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhlIAorQ1BBTC4gKEZpbGxpbmcgaW4gdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBEZXZlbG9wZXIsIAorT3JpZ2luYWwgQ29kZSBvciBDb250cmlidXRvciBpbiB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEgc2hhbGwgbm90IG9mIAordGhlbXNlbHZlcyBiZSBkZWVtZWQgdG8gYmUgbW9kaWZpY2F0aW9ucyBvZiB0aGlzIExpY2Vuc2UuKQorNy4gRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS4KK0NPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCAKK1dBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVCAKK0xJTUlUQVRJT04sIFdBUlJBTlRJRVMgVEhBVCBUSEUgQ09WRVJFRCBDT0RFIElTIEZSRUUgT0YgREVGRUNUUywgTUVSQ0hBTlRBQkxFLCAKK0ZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgCitRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgQ09WRVJFRCBDT0RFIElTIFdJVEggWU9VLiBTSE9VTEQgQU5ZIENPVkVSRUQgCitDT0RFIFBST1ZFIERFRkVDVElWRSBJTiBBTlkgUkVTUEVDVCwgWU9VIChOT1QgVEhFIElOSVRJQUwgREVWRUxPUEVSLCBPUklHSU5BTCAKK0RFVkVMT1BFUiBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUgQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgCitSRVBBSVIgT1IgQ09SUkVDVElPTi4gVEhJUyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIAorT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIENPVkVSRUQgQ09ERSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgCitVTkRFUiBUSElTIERJU0NMQUlNRVIuCis4LiBURVJNSU5BVElPTi4KKzguMSBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSAKK2lmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMCAKK2RheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgd2hpY2ggCithcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgCit3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIAorTGljZW5zZSBzaGFsbCBzdXJ2aXZlLgorOC4yIElmIFlvdSBpbml0aWF0ZSBsaXRpZ2F0aW9uIGJ5IGFzc2VydGluZyBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gCisoZXhjbHVkaW5nIGRlY2xhdG9yeSBqdWRnbWVudCBhY3Rpb25zKSBhZ2FpbnN0IEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCAKK0RldmVsb3BlciBvciBhIENvbnRyaWJ1dG9yICh0aGUgSW5pdGlhbCBEZXZlbG9wZXIsIE9yaWdpbmFsIERldmVsb3BlciBvciAKK0NvbnRyaWJ1dG9yIGFnYWluc3Qgd2hvbSBZb3UgZmlsZSBzdWNoIGFjdGlvbiBpcyByZWZlcnJlZCB0byBhcyAiUGFydGljaXBhbnQiKSAKK2FsbGVnaW5nIHRoYXQ6CisoYSkgc3VjaCBQYXJ0aWNpcGFudOKAmXMgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyAKK2FueSBwYXRlbnQsIHRoZW4gYW55IGFuZCBhbGwgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB0byBZb3UgdW5kZXIgCitTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwsIHVwb24gNjAgZGF5cyBub3RpY2UgZnJvbSAKK1BhcnRpY2lwYW50IHRlcm1pbmF0ZSBwcm9zcGVjdGl2ZWx5LCB1bmxlc3MgaWYgd2l0aGluIDYwIGRheXMgYWZ0ZXIgcmVjZWlwdCBvZiAKK25vdGljZSBZb3UgZWl0aGVyOiAoaSkgYWdyZWUgaW4gd3JpdGluZyB0byBwYXkgUGFydGljaXBhbnQgYSBtdXR1YWxseSBhZ3JlZWFibGUgCityZWFzb25hYmxlIHJveWFsdHkgZm9yIFlvdXIgcGFzdCBhbmQgZnV0dXJlIHVzZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgc3VjaCAKK1BhcnRpY2lwYW50LCBvciAoaWkpIHdpdGhkcmF3IFlvdXIgbGl0aWdhdGlvbiBjbGFpbSB3aXRoIHJlc3BlY3QgdG8gdGhlIAorQ29udHJpYnV0b3IgVmVyc2lvbiBhZ2FpbnN0IHN1Y2ggUGFydGljaXBhbnQuIElmIHdpdGhpbiA2MCBkYXlzIG9mIG5vdGljZSwgYSAKK3JlYXNvbmFibGUgcm95YWx0eSBhbmQgcGF5bWVudCBhcnJhbmdlbWVudCBhcmUgbm90IG11dHVhbGx5IGFncmVlZCB1cG9uIGluIAord3JpdGluZyBieSB0aGUgcGFydGllcyBvciB0aGUgbGl0aWdhdGlvbiBjbGFpbSBpcyBub3Qgd2l0aGRyYXduLCB0aGUgcmlnaHRzIAorZ3JhbnRlZCBieSBQYXJ0aWNpcGFudCB0byBZb3UgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgYXV0b21hdGljYWxseSAKK3Rlcm1pbmF0ZSBhdCB0aGUgZXhwaXJhdGlvbiBvZiB0aGUgNjAgZGF5IG5vdGljZSBwZXJpb2Qgc3BlY2lmaWVkIGFib3ZlLgorKGIpIGFueSBzb2Z0d2FyZSwgaGFyZHdhcmUsIG9yIGRldmljZSwgb3RoZXIgdGhhbiBzdWNoIFBhcnRpY2lwYW504oCZcyAKK0NvbnRyaWJ1dG9yIFZlcnNpb24sIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gYW55IAorcmlnaHRzIGdyYW50ZWQgdG8gWW91IGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xKGIpIGFuZCAyLjIoYikgYXJlIAorcmV2b2tlZCBlZmZlY3RpdmUgYXMgb2YgdGhlIGRhdGUgWW91IGZpcnN0IG1hZGUsIHVzZWQsIHNvbGQsIGRpc3RyaWJ1dGVkLCBvciAKK2hhZCBtYWRlLCBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBQYXJ0aWNpcGFudC4KKzguMyBJZiBZb3UgYXNzZXJ0IGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSBhZ2FpbnN0IFBhcnRpY2lwYW50IGFsbGVnaW5nIHRoYXQgCitzdWNoIFBhcnRpY2lwYW504oCZcyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSAKK3BhdGVudCB3aGVyZSBzdWNoIGNsYWltIGlzIHJlc29sdmVkIChzdWNoIGFzIGJ5IGxpY2Vuc2Ugb3Igc2V0dGxlbWVudCkgcHJpb3IgdG8gCit0aGUgaW5pdGlhdGlvbiBvZiBwYXRlbnQgaW5mcmluZ2VtZW50IGxpdGlnYXRpb24sIHRoZW4gdGhlIHJlYXNvbmFibGUgdmFsdWUgb2YgCit0aGUgbGljZW5zZXMgZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIgc2hhbGwgYmUgCit0YWtlbiBpbnRvIGFjY291bnQgaW4gZGV0ZXJtaW5pbmcgdGhlIGFtb3VudCBvciB2YWx1ZSBvZiBhbnkgcGF5bWVudCBvciBsaWNlbnNlLgorOC40IEluIHRoZSBldmVudCBvZiB0ZXJtaW5hdGlvbiB1bmRlciBTZWN0aW9ucyA4LjEgb3IgOC4yIGFib3ZlLCBhbGwgZW5kIHVzZXIgCitsaWNlbnNlIGFncmVlbWVudHMgKGV4Y2x1ZGluZyBkaXN0cmlidXRvcnMgYW5kIHJlc2VsbGVycykgd2hpY2ggaGF2ZSBiZWVuIAordmFsaWRseSBncmFudGVkIGJ5IFlvdSBvciBhbnkgZGlzdHJpYnV0b3IgaGVyZXVuZGVyIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIAorc3Vydml2ZSB0ZXJtaW5hdGlvbi4KKzkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLgorVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBXSEVUSEVSIFRPUlQgKElOQ0xVRElORyAKK05FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBZT1UsIFRIRSBJTklUSUFMIERFVkVMT1BFUiwgT1JJR0lOQUwgCitERVZFTE9QRVIsIEFOWSBPVEhFUiBDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIENPVkVSRUQgQ09ERSwgT1IgQU5ZIAorU1VQUExJRVIgT0YgQU5ZIE9GIFNVQ0ggUEFSVElFUywgQkUgTElBQkxFIFRPIEFOWSBQRVJTT04gRk9SIEFOWSBJTkRJUkVDVCwgCitTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBJTkNMVURJTkcsIAorV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiAKK0ZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gCitJRiBTVUNIIFBBUlRZIFNIQUxMIEhBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIAorTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgCitJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWeKAmVMgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXIAorUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIAorTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhJUyBFWENMVVNJT04gQU5EIAorTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKzEwLiBVLlMuIEdPVkVSTk1FTlQgRU5EIFVTRVJTLgorVGhlIENvdmVyZWQgQ29kZSBpcyBhICJjb21tZXJjaWFsIGl0ZW0sIiBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbiA0OCBDLkYuUi4gCisyLjEwMSAoT2N0LiAxOTk1KSwgY29uc2lzdGluZyBvZiAiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSIgYW5kICJjb21tZXJjaWFsIAorY29tcHV0ZXIgc29mdHdhcmUgZG9jdW1lbnRhdGlvbiwiIGFzIHN1Y2ggdGVybXMgYXJlIHVzZWQgaW4gNDggQy5GLlIuIDEyLjIxMiAKKyhTZXB0LiAxOTk1KS4gQ29uc2lzdGVudCB3aXRoIDQ4IEMuRi5SLiAxMi4yMTIgYW5kIDQ4IEMuRi5SLiAyMjcuNzIwMi0xIHRocm91Z2ggCisyMjcuNzIwMi00IChKdW5lIDE5OTUpLCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIENvdmVyZWQgQ29kZSB3aXRoIAorb25seSB0aG9zZSByaWdodHMgc2V0IGZvcnRoIGhlcmVpbi4KKzExLiBNSVNDRUxMQU5FT1VTLgorVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHN1YmplY3QgbWF0dGVyIAoraGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggCitwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IAorZW5mb3JjZWFibGUuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSBDYWxpZm9ybmlhIGxhdyBwcm92aXNpb25zIAorKGV4Y2VwdCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3LCBpZiBhbnksIHByb3ZpZGVzIG90aGVyd2lzZSksIGV4Y2x1ZGluZyAKK2l0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gV2l0aCByZXNwZWN0IHRvIGRpc3B1dGVzIGluIHdoaWNoIGF0IGxlYXN0IG9uZSAKK3BhcnR5IGlzIGEgY2l0aXplbiBvZiwgb3IgYW4gZW50aXR5IGNoYXJ0ZXJlZCBvciByZWdpc3RlcmVkIHRvIGRvIGJ1c2luZXNzIGluIAordGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSwgYW55IGxpdGlnYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIAorc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBGZWRlcmFsIENvdXJ0cyBvZiB0aGUgTm9ydGhlcm4gRGlzdHJpY3Qgb2YgCitDYWxpZm9ybmlhLCB3aXRoIHZlbnVlIGx5aW5nIGluIFNhbnRhIENsYXJhIENvdW50eSwgQ2FsaWZvcm5pYSwgd2l0aCB0aGUgbG9zaW5nIAorcGFydHkgcmVzcG9uc2libGUgZm9yIGNvc3RzLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBjb3VydCBjb3N0cyBhbmQgCityZWFzb25hYmxlIGF0dG9ybmV5c+KAmSBmZWVzIGFuZCBleHBlbnNlcy4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgCitOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIAorZXhwcmVzc2x5IGV4Y2x1ZGVkLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSAKK2NvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHNoYWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuCisxMi4gUkVTUE9OU0lCSUxJVFkgRk9SIENMQUlNUy4KK0FzIGJldHdlZW4gSW5pdGlhbCBEZXZlbG9wZXIsIE9yaWdpbmFsIERldmVsb3BlciBhbmQgdGhlIENvbnRyaWJ1dG9ycywgZWFjaCAKK3BhcnR5IGlzIHJlc3BvbnNpYmxlIGZvciBjbGFpbXMgYW5kIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgCitvdXQgb2YgaXRzIHV0aWxpemF0aW9uIG9mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIFlvdSBhZ3JlZSB0byB3b3JrIHdpdGggCitJbml0aWFsIERldmVsb3BlciwgT3JpZ2luYWwgRGV2ZWxvcGVyIGFuZCBDb250cmlidXRvcnMgdG8gZGlzdHJpYnV0ZSBzdWNoIAorcmVzcG9uc2liaWxpdHkgb24gYW4gZXF1aXRhYmxlIGJhc2lzLiBOb3RoaW5nIGhlcmVpbiBpcyBpbnRlbmRlZCBvciBzaGFsbCBiZSAKK2RlZW1lZCB0byBjb25zdGl0dXRlIGFueSBhZG1pc3Npb24gb2YgbGlhYmlsaXR5LgorMTMuIE1VTFRJUExFLUxJQ0VOU0VEIENPREUuCitJbml0aWFsIERldmVsb3BlciBtYXkgZGVzaWduYXRlIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgYXMgCitNdWx0aXBsZS1MaWNlbnNlZC4gTXVsdGlwbGUtTGljZW5zZWQgbWVhbnMgdGhhdCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgcGVybWl0cyAKK3lvdSB0byB1dGlsaXplIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgdW5kZXIgWW91ciBjaG9pY2Ugb2YgdGhlIENQQUwgb3IgCit0aGUgYWx0ZXJuYXRpdmUgbGljZW5zZXMsIGlmIGFueSwgc3BlY2lmaWVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgCitmaWxlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuCisxNC4gQURESVRJT05BTCBURVJNOiBBVFRSSUJVVElPTgorKGEpIEFzIGEgbW9kZXN0IGF0dHJpYnV0aW9uIHRvIHRoZSBvcmdhbml6ZXIgb2YgdGhlIGRldmVsb3BtZW50IG9mIHRoZSBPcmlnaW5hbCAKK0NvZGUgKCJPcmlnaW5hbCBEZXZlbG9wZXIiKSwgaW4gdGhlIGhvcGUgdGhhdCBpdHMgcHJvbW90aW9uYWwgdmFsdWUgbWF5IGhlbHAgCitqdXN0aWZ5IHRoZSB0aW1lLCBtb25leSBhbmQgZWZmb3J0IGludmVzdGVkIGluIHdyaXRpbmcgdGhlIE9yaWdpbmFsIENvZGUsIHRoZSAKK09yaWdpbmFsIERldmVsb3BlciBtYXkgaW5jbHVkZSBpbiBFeGhpYml0IEIgKCJBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvbiIpIGEgCityZXF1aXJlbWVudCB0aGF0IGVhY2ggdGltZSBhbiBFeGVjdXRhYmxlIGFuZCBTb3VyY2UgQ29kZSBvciBhIExhcmdlciBXb3JrIGlzIAorbGF1bmNoZWQgb3IgaW5pdGlhbGx5IHJ1biAod2hpY2ggaW5jbHVkZXMgaW5pdGlhdGluZyBhIHNlc3Npb24pLCBhIHByb21pbmVudCAKK2Rpc3BsYXkgb2YgdGhlIE9yaWdpbmFsIERldmVsb3BlcuKAmXMgQXR0cmlidXRpb24gSW5mb3JtYXRpb24gKGFzIGRlZmluZWQgCitiZWxvdykgbXVzdCBvY2N1ciBvbiB0aGUgZ3JhcGhpYyB1c2VyIGludGVyZmFjZSBlbXBsb3llZCBieSB0aGUgZW5kIHVzZXIgdG8gCithY2Nlc3Mgc3VjaCBDb3ZlcmVkIENvZGUgKHdoaWNoIG1heSBpbmNsdWRlIGRpc3BsYXkgb24gYSBzcGxhc2ggc2NyZWVuKSwgaWYgCithbnkuIFRoZSBzaXplIG9mIHRoZSBncmFwaGljIGltYWdlIHNob3VsZCBiZSBjb25zaXN0ZW50IHdpdGggdGhlIHNpemUgb2YgdGhlIAorb3RoZXIgZWxlbWVudHMgb2YgdGhlIEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uLiBJZiB0aGUgYWNjZXNzIGJ5IHRoZSBlbmQgdXNlciB0byAKK3RoZSBFeGVjdXRhYmxlIGFuZCBTb3VyY2UgQ29kZSBkb2VzIG5vdCBjcmVhdGUgYSBncmFwaGljIHVzZXIgaW50ZXJmYWNlIGZvciAKK2FjY2VzcyB0byB0aGUgQ292ZXJlZCBDb2RlLCB0aGlzIG9ibGlnYXRpb24gc2hhbGwgbm90IGFwcGx5LiBJZiB0aGUgT3JpZ2luYWwgCitDb2RlIGRpc3BsYXlzIHN1Y2ggQXR0cmlidXRpb24gSW5mb3JtYXRpb24gaW4gYSBwYXJ0aWN1bGFyIGZvcm0gKHN1Y2ggYXMgaW4gdGhlIAorZm9ybSBvZiBhIHNwbGFzaCBzY3JlZW4sIG5vdGljZSBhdCBsb2dpbiwgYW4gImFib3V0IiBkaXNwbGF5LCBvciBkZWRpY2F0ZWQgCithdHRyaWJ1dGlvbiBhcmVhIG9uIHVzZXIgaW50ZXJmYWNlIHNjcmVlbnMpLCBjb250aW51ZWQgdXNlIG9mIHN1Y2ggZm9ybSBmb3IgCit0aGF0IEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uIGlzIG9uZSB3YXkgb2YgbWVldGluZyB0aGlzIHJlcXVpcmVtZW50IGZvciBub3RpY2UuCisoYikgQXR0cmlidXRpb24gaW5mb3JtYXRpb24gbWF5IG9ubHkgaW5jbHVkZSBhIGNvcHlyaWdodCBub3RpY2UsIGEgYnJpZWYgCitwaHJhc2UsIGdyYXBoaWMgaW1hZ2UgYW5kIGEgVVJMICgiQXR0cmlidXRpb24gSW5mb3JtYXRpb24iKSBhbmQgaXMgc3ViamVjdCB0byAKK3RoZSBBdHRyaWJ1dGlvbiBMaW1pdHMgYXMgZGVmaW5lZCBiZWxvdy4gRm9yIHRoZXNlIHB1cnBvc2VzLCBwcm9taW5lbnQgc2hhbGwgCittZWFuIGRpc3BsYXkgZm9yIHN1ZmZpY2llbnQgZHVyYXRpb24gdG8gZ2l2ZSByZWFzb25hYmxlIG5vdGljZSB0byB0aGUgdXNlciBvZiAKK3RoZSBpZGVudGl0eSBvZiB0aGUgT3JpZ2luYWwgRGV2ZWxvcGVyIGFuZCB0aGF0IGlmIFlvdSBpbmNsdWRlIEF0dHJpYnV0aW9uIAorSW5mb3JtYXRpb24gb3Igc2ltaWxhciBpbmZvcm1hdGlvbiBmb3Igb3RoZXIgcGFydGllcywgWW91IG11c3QgZW5zdXJlIHRoYXQgdGhlIAorQXR0cmlidXRpb24gSW5mb3JtYXRpb24gZm9yIHRoZSBPcmlnaW5hbCBEZXZlbG9wZXIgc2hhbGwgYmUgbm8gbGVzcyBwcm9taW5lbnQgCit0aGFuIHN1Y2ggQXR0cmlidXRpb24gSW5mb3JtYXRpb24gb3Igc2ltaWxhciBpbmZvcm1hdGlvbiBmb3IgdGhlIG90aGVyIHBhcnR5LiAKK0ZvciBncmVhdGVyIGNlcnRhaW50eSwgdGhlIE9yaWdpbmFsIERldmVsb3BlciBtYXkgY2hvb3NlIHRvIHNwZWNpZnkgaW4gRXhoaWJpdCAKK0IgYmVsb3cgdGhhdCB0aGUgYWJvdmUgYXR0cmlidXRpb24gcmVxdWlyZW1lbnQgb25seSBhcHBsaWVzIHRvIGFuIEV4ZWN1dGFibGUgCithbmQgU291cmNlIENvZGUgcmVzdWx0aW5nIGZyb20gdGhlIE9yaWdpbmFsIENvZGUgb3IgYW55IE1vZGlmaWNhdGlvbiwgYnV0IG5vdCBhIAorTGFyZ2VyIFdvcmsuIFRoZSBpbnRlbnQgaXMgdG8gcHJvdmlkZSBmb3IgcmVhc29uYWJseSBtb2Rlc3QgYXR0cmlidXRpb24sIAordGhlcmVmb3JlIHRoZSBPcmlnaW5hbCBEZXZlbG9wZXIgY2Fubm90IHJlcXVpcmUgdGhhdCBZb3UgZGlzcGxheSwgYXQgYW55IHRpbWUsIAorbW9yZSB0aGFuIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb24gYXMgQXR0cmlidXRpb24gSW5mb3JtYXRpb246IChhKSBhIGNvcHlyaWdodCAKK25vdGljZSBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlIE9yaWdpbmFsIERldmVsb3BlcjsgKGIpIGEgd29yZCBvciBvbmUgcGhyYXNlIAorKG5vdCBleGNlZWRpbmcgMTAgd29yZHMpOyAoYykgb25lIGdyYXBoaWMgaW1hZ2UgcHJvdmlkZWQgYnkgdGhlIE9yaWdpbmFsIAorRGV2ZWxvcGVyOyBhbmQgKGQpIGEgVVJMIChjb2xsZWN0aXZlbHksIHRoZSAiQXR0cmlidXRpb24gTGltaXRzIikuCisoYykgSWYgRXhoaWJpdCBCIGRvZXMgbm90IGluY2x1ZGUgYW55IEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uLCB0aGVuIHRoZXJlIGFyZSAKK25vIHJlcXVpcmVtZW50cyBmb3IgWW91IHRvIGRpc3BsYXkgYW55IEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uIG9mIHRoZSBPcmlnaW5hbCAKK0RldmVsb3Blci4KKyhkKSBZb3UgYWNrbm93bGVkZ2UgdGhhdCBhbGwgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcyBhbmQvb3IgdHJhZGUgbmFtZXMgCitjb250YWluZWQgd2l0aGluIHRoZSBBdHRyaWJ1dGlvbiBJbmZvcm1hdGlvbiBkaXN0cmlidXRlZCB3aXRoIHRoZSBDb3ZlcmVkIENvZGUgCithcmUgdGhlIGV4Y2x1c2l2ZSBwcm9wZXJ0eSBvZiB0aGVpciBvd25lcnMgYW5kIG1heSBvbmx5IGJlIHVzZWQgd2l0aCB0aGUgCitwZXJtaXNzaW9uIG9mIHRoZWlyIG93bmVycywgb3IgdW5kZXIgY2lyY3Vtc3RhbmNlcyBvdGhlcndpc2UgcGVybWl0dGVkIGJ5IGxhdyAKK29yIGFzIGV4cHJlc3NseSBzZXQgb3V0IGluIHRoaXMgTGljZW5zZS4KKzE1LiBBRERJVElPTkFMIFRFUk06IE5FVFdPUksgVVNFLgorVGhlIHRlcm0gIkV4dGVybmFsIERlcGxveW1lbnQiIG1lYW5zIHRoZSB1c2UsIGRpc3RyaWJ1dGlvbiwgb3IgY29tbXVuaWNhdGlvbiBvZiAKK3RoZSBPcmlnaW5hbCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMgaW4gYW55IHdheSBzdWNoIHRoYXQgdGhlIE9yaWdpbmFsIENvZGUgb3IgCitNb2RpZmljYXRpb25zIG1heSBiZSB1c2VkIGJ5IGFueW9uZSBvdGhlciB0aGFuIFlvdSwgd2hldGhlciB0aG9zZSB3b3JrcyBhcmUgCitkaXN0cmlidXRlZCBvciBjb21tdW5pY2F0ZWQgdG8gdGhvc2UgcGVyc29ucyBvciBtYWRlIGF2YWlsYWJsZSBhcyBhbiAKK2FwcGxpY2F0aW9uIGludGVuZGVkIGZvciB1c2Ugb3ZlciBhIG5ldHdvcmsuIEFzIGFuIGV4cHJlc3MgY29uZGl0aW9uIGZvciB0aGUgCitncmFudHMgb2YgbGljZW5zZSBoZXJldW5kZXIsIFlvdSBtdXN0IHRyZWF0IGFueSBFeHRlcm5hbCBEZXBsb3ltZW50IGJ5IFlvdSBvZiAKK3RoZSBPcmlnaW5hbCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMgYXMgYSBkaXN0cmlidXRpb24gdW5kZXIgc2VjdGlvbiAzLjEgYW5kIG1ha2UgCitTb3VyY2UgQ29kZSBhdmFpbGFibGUgdW5kZXIgU2VjdGlvbiAzLjIuCisKK0VYSElCSVQgQS4gQ29tbW9uIFB1YmxpYyBBdHRyaWJ1dGlvbiBMaWNlbnNlIFZlcnNpb24gMS4wLgorIlRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIENvbW1vbiBQdWJsaWMgQXR0cmlidXRpb24gTGljZW5zZSAKK1ZlcnNpb24gMS4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSAKK3dpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCBfX19fX19fX19fX19fLiBUaGUgCitMaWNlbnNlIGlzIGJhc2VkIG9uIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xIGJ1dCBTZWN0aW9ucyAxNCBhbmQgCisxNSBoYXZlIGJlZW4gYWRkZWQgdG8gY292ZXIgdXNlIG9mIHNvZnR3YXJlIG92ZXIgYSBjb21wdXRlciBuZXR3b3JrIGFuZCBwcm92aWRlIAorZm9yIGxpbWl0ZWQgYXR0cmlidXRpb24gZm9yIHRoZSBPcmlnaW5hbCBEZXZlbG9wZXIuIEluIGFkZGl0aW9uLCBFeGhpYml0IEEgaGFzIAorYmVlbiBtb2RpZmllZCB0byBiZSBjb25zaXN0ZW50IHdpdGggRXhoaWJpdCBCLgorU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgCitXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIAordGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorVGhlIE9yaWdpbmFsIENvZGUgaXNfX19fX19fX19fX19fX19fX19fX19fLgorVGhlIE9yaWdpbmFsIERldmVsb3BlciBpcyBub3QgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBpcyBfX19fX19fX19fLiBJZiBsZWZ0IAorYmxhbmssIHRoZSBPcmlnaW5hbCBEZXZlbG9wZXIgaXMgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLgorVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIF9fX19fX19fX19fXy4gQWxsIHBvcnRpb25zIG9mIHRoZSAKK2NvZGUgd3JpdHRlbiBieSBfX19fX19fX19fXyBhcmUgQ29weXJpZ2h0IChjKSBfX19fXy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KK0NvbnRyaWJ1dG9yIF9fX19fX19fX19fX19fX19fX19fX18uCitBbHRlcm5hdGl2ZWx5LCB0aGUgY29udGVudHMgb2YgdGhpcyBmaWxlIG1heSBiZSB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgCitfX19fXyBsaWNlbnNlICh0aGUgW19fX10gTGljZW5zZSksIGluIHdoaWNoIGNhc2UgdGhlIHByb3Zpc2lvbnMgb2YgW19fX19fX10gCitMaWNlbnNlIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhvc2UgYWJvdmUuCitJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiAKK3RoZSBbX19fX10gTGljZW5zZSBhbmQgbm90IHRvIGFsbG93IG90aGVycyB0byB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSAKK3VuZGVyIHRoZSBDUEFMLCBpbmRpY2F0ZSB5b3VyIGRlY2lzaW9uIGJ5IGRlbGV0aW5nIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCAKK3JlcGxhY2UgdGhlbSB3aXRoIHRoZSBub3RpY2UgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIFtfX19dIAorTGljZW5zZS4gSWYgeW91IGRvIG5vdCBkZWxldGUgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciAKK3ZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIGVpdGhlciB0aGUgQ1BBTCBvciB0aGUgW19fX10gTGljZW5zZS4iCitbTk9URTogVGhlIHRleHQgb2YgdGhpcyBFeGhpYml0IEEgbWF5IGRpZmZlciBzbGlnaHRseSBmcm9tIHRoZSB0ZXh0IG9mIHRoZSAKK25vdGljZXMgaW4gdGhlIFNvdXJjZSBDb2RlIGZpbGVzIG9mIHRoZSBPcmlnaW5hbCBDb2RlLiBZb3Ugc2hvdWxkIHVzZSB0aGUgdGV4dCAKK29mIHRoaXMgRXhoaWJpdCBBIHJhdGhlciB0aGFuIHRoZSB0ZXh0IGZvdW5kIGluIHRoZSBPcmlnaW5hbCBDb2RlIFNvdXJjZSBDb2RlIAorZm9yIFlvdXIgTW9kaWZpY2F0aW9ucy5dCisKK0VYSElCSVQgQi4gQXR0cmlidXRpb24gSW5mb3JtYXRpb24KK0F0dHJpYnV0aW9uIENvcHlyaWdodCBOb3RpY2U6IF9fX19fX19fX19fX19fX19fX19fX19fCitBdHRyaWJ1dGlvbiBQaHJhc2UgKG5vdCBleGNlZWRpbmcgMTAgd29yZHMpOiBfX19fX19fX19fX19fX19fX19fX19fXworQXR0cmlidXRpb24gVVJMOiBfX19fX19fX19fX19fX19fX19fX19fXworR3JhcGhpYyBJbWFnZSBhcyBwcm92aWRlZCBpbiB0aGUgQ292ZXJlZCBDb2RlLCBpZiBhbnkuCitEaXNwbGF5IG9mIEF0dHJpYnV0aW9uIEluZm9ybWF0aW9uIGlzIFtyZXF1aXJlZC9ub3QgcmVxdWlyZWRdIGluIExhcmdlciBXb3JrcyAKK3doaWNoIGFyZSBkZWZpbmVkIGluIHRoZSBDUEFMIGFzIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IgcG9ydGlvbnMgCit0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoZSBDUEFMLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvQ1BMLTAuNSBiL2xpY2Vuc2VzL0NQTC0wLjUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU5YjZkMQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0NQTC0wLjUKQEAgLTAsMCArMSwyMzcgQEAKKworQ29tbW9uIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMC41CisKKyAgIFRIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUyBDT01NT04KKyAgIFBVQkxJQyBMSUNFTlNFICgiQUdSRUVNRU5UIikuIEFOWSBVU0UsIFJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YKKyAgIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UgT0YgVEhJUyBBR1JFRU1FTlQuCisKKyAgIDEuIERFRklOSVRJT05TCisKKyAgICJDb250cmlidXRpb24iIG1lYW5zOgorCisgICAgIGEpIGluIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZAorICAgICBkb2N1bWVudGF0aW9uIGRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQKKworICAgICBiKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6CisKKyAgICAgaSkgY2hhbmdlcyB0byB0aGUgUHJvZ3JhbSwgYW5kCisKKyAgICAgaWkpIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTsKKworICAgICB3aGVyZSBzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbQorICAgICBhbmQgYXJlIGRpc3RyaWJ1dGVkIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24KKyAgICAgJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvciBpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkKKyAgICAgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbiBzdWNoIENvbnRyaWJ1dG9yJ3MKKyAgICAgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbQorICAgICB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluCisgICAgIGNvbmp1bmN0aW9uIHdpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQKKyAgICAgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFByb2dyYW0uCisKKyAgICJDb250cmlidXRvciIgbWVhbnMgYW55IHBlcnNvbiBvciBlbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS4KKworICAgIkxpY2Vuc2VkIFBhdGVudHMgIiBtZWFuIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yCisgICB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2Ugb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uCisgICBhbG9uZSBvciB3aGVuIGNvbWJpbmVkIHdpdGggdGhlIFByb2dyYW0uCisKKyAgICJQcm9ncmFtIiBtZWFucyB0aGUgQ29udHJpYnV0aW9ucyBkaXN0cmlidXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcworICAgQWdyZWVtZW50LgorCisgICAiUmVjaXBpZW50IiBtZWFucyBhbnlvbmUgd2hvIHJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMKKyAgIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuCisKKyAgIDIuIEdSQU5UIE9GIFJJR0hUUworCisgICAgIGEpIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieQorICAgICBncmFudHMgUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0CisgICAgIGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5CisgICAgIGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlCisgICAgIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUKKyAgICAgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLgorCisgICAgIGIpIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieQorICAgICBncmFudHMgUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgcGF0ZW50CisgICAgIGxpY2Vuc2UgdW5kZXIgTGljZW5zZWQgUGF0ZW50cyB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIHRvIHNlbGwsCisgICAgIGltcG9ydCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwKKyAgICAgaWYgYW55LCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4gVGhpcyBwYXRlbnQgbGljZW5zZQorICAgICBzaGFsbCBhcHBseSB0byB0aGUgY29tYmluYXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0KKyAgICAgaWYsIGF0IHRoZSB0aW1lIHRoZSBDb250cmlidXRpb24gaXMgYWRkZWQgYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoCisgICAgIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24gdG8gYmUgY292ZXJlZAorICAgICBieSB0aGUgTGljZW5zZWQgUGF0ZW50cy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0byBhbnkKKyAgICAgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyCisgICAgIHNlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4KKworICAgICBjKSBSZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUKKyAgICAgbGljZW5zZXMgdG8gaXRzIENvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUKKyAgICAgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yIHRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlCisgICAgIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuCisgICAgIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50IGZvciBjbGFpbXMKKyAgICAgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwKKyAgICAgcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUKKyAgICAgcmlnaHRzIGFuZCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5CisgICAgIGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eSB0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbAorICAgICBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLCBpZiBhIHRoaXJkIHBhcnR5CisgICAgIHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlIHRoZQorICAgICBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZQorICAgICBiZWZvcmUgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLgorCisgICAgIGQpIEVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzCisgICAgIHN1ZmZpY2llbnQgY29weXJpZ2h0IHJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50CisgICAgIHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4gdGhpcyBBZ3JlZW1lbnQuCisKKyAgIDMuIFJFUVVJUkVNRU5UUworCisgICBBIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtCisgICB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0OgorCisgICAgIGEpIGl0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQKKworICAgICBiKSBpdHMgbGljZW5zZSBhZ3JlZW1lbnQ6CisKKyAgICAgaSkgZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbAorICAgICB3YXJyYW50aWVzIGFuZCBjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcKKyAgICAgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlIGFuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZAorICAgICB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhCisgICAgIHBhcnRpY3VsYXIgcHVycG9zZTsKKworICAgICBpaSkgZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsCisgICAgIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsCisgICAgIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaCBhcyBsb3N0IHByb2ZpdHM7CisKKyAgICAgaWlpKSBzdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudAorICAgICBhcmUgb2ZmZXJlZCBieSB0aGF0IENvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OworICAgICBhbmQKKworICAgICBpdikgc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2gKKyAgICAgQ29udHJpYnV0b3IsIGFuZCBpbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZQorICAgICBtYW5uZXIgb24gb3IgdGhyb3VnaCBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZQorICAgICBleGNoYW5nZS4KKworICAgV2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UgY29kZSBmb3JtOgorCisgICAgIGEpIGl0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZAorCisgICAgIGIpIGEgY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZQorICAgICBQcm9ncmFtLgorCisgICBDb250cmlidXRvcnMgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55IGNvcHlyaWdodCBub3RpY2VzIGNvbnRhaW5lZAorICAgd2l0aGluIHRoZSBQcm9ncmFtLgorCisgICBFYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZSBvcmlnaW5hdG9yIG9mIGl0cworICAgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3Mgc3Vic2VxdWVudAorICAgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLgorCisgICA0LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTgorCisgICBDb21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkgYWNjZXB0IGNlcnRhaW4KKyAgIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMgYW5kIHRoZQorICAgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlCisgICBvZiB0aGUgUHJvZ3JhbSwgdGhlIENvbnRyaWJ1dG9yIHdobyBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhCisgICBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90CisgICBjcmVhdGUgcG90ZW50aWFsIGxpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEKKyAgIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLAorICAgc3VjaCBDb250cmlidXRvciAoIkNvbW1lcmNpYWwgQ29udHJpYnV0b3IiKSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZAorICAgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlciBDb250cmlidXRvciAoIkluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIikKKyAgIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQgY29zdHMgKGNvbGxlY3RpdmVseSAiTG9zc2VzIikgYXJpc2luZworICAgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlciBsZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eQorICAgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8gdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMKKyAgIG9yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4gY29ubmVjdGlvbiB3aXRoIGl0cworICAgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLiBUaGUKKyAgIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMKKyAgIHJlbGF0aW5nIHRvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LgorICAgSW4gb3JkZXIgdG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkKKyAgIG5vdGlmeSB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKQorICAgYWxsb3cgdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZQorICAgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kIGFueSByZWxhdGVkIHNldHRsZW1lbnQKKyAgIG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZSBpbiBhbnkgc3VjaAorICAgY2xhaW0gYXQgaXRzIG93biBleHBlbnNlLgorCisgICBGb3IgZXhhbXBsZSwgYSBDb250cmlidXRvciBtaWdodCBpbmNsdWRlIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbAorICAgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYSBDb21tZXJjaWFsCisgICBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UKKyAgIGNsYWltcywgb3Igb2ZmZXJzIHdhcnJhbnRpZXMgcmVsYXRlZCB0byBQcm9kdWN0IFgsIHRob3NlIHBlcmZvcm1hbmNlCisgICBjbGFpbXMgYW5kIHdhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5CisgICBhbG9uZS4gVW5kZXIgdGhpcyBzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvCisgICBkZWZlbmQgY2xhaW1zIGFnYWluc3QgdGhlIG90aGVyIENvbnRyaWJ1dG9ycyByZWxhdGVkIHRvIHRob3NlCisgICBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhIGNvdXJ0IHJlcXVpcmVzIGFueSBvdGhlcgorICAgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvcgorICAgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy4KKworICAgNS4gTk8gV0FSUkFOVFkKKworICAgRVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTCisgICBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKKyAgIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWQorICAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFkKKyAgIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkKKyAgIHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZAorICAgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbCByaXNrcyBhc3NvY2lhdGVkIHdpdGggaXRzCisgICBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KKyAgIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsIGNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlCisgICBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvciBlcXVpcG1lbnQsIGFuZAorICAgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuCisKKyAgIDYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZCisKKyAgIEVYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMgQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IKKyAgIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAgIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcKKyAgIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKKyAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IKKyAgIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTSBPUiBUSEUgRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVECisgICBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisgICA3LiBHRU5FUkFMCisKKyAgIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCisgICBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YKKyAgIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dCBmdXJ0aGVyCisgICBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKKyAgIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KKworICAgSWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhIENvbnRyaWJ1dG9yIHdpdGgKKyAgIHJlc3BlY3QgdG8gYSBwYXRlbnQgYXBwbGljYWJsZSB0byBzb2Z0d2FyZSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IKKyAgIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpLCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMgZ3JhbnRlZCBieSB0aGF0CisgICBDb250cmlidXRvciB0byBzdWNoIFJlY2lwaWVudCB1bmRlciB0aGlzIEFncmVlbWVudCBzaGFsbCB0ZXJtaW5hdGUgYXMKKyAgIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gSW4gYWRkaXRpb24sIElmIFJlY2lwaWVudAorICAgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhCisgICBjcm9zcy1jbGFpbSBvciBjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtCisgICBpdHNlbGYgKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aCBvdGhlciBzb2Z0d2FyZSBvcgorICAgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoIFJlY2lwaWVudCdzCisgICByaWdodHMgZ3JhbnRlZCB1bmRlciBTZWN0aW9uIDIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlIHN1Y2gKKyAgIGxpdGlnYXRpb24gaXMgZmlsZWQuCisKKyAgIEFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgdGVybWluYXRlIGlmIGl0CisgICBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yIGNvbmRpdGlvbnMgb2YgdGhpcworICAgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2ggZmFpbHVyZSBpbiBhIHJlYXNvbmFibGUgcGVyaW9kIG9mCisgICB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYgYWxsIFJlY2lwaWVudCdzCisgICByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZQorICAgYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuCisgICBIb3dldmVyLCBSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzCisgICBncmFudGVkIGJ5IFJlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQKKyAgIHN1cnZpdmUuCisKKyAgIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGlzIEFncmVlbWVudCwKKyAgIGJ1dCBpbiBvcmRlciB0byBhdm9pZCBpbmNvbnNpc3RlbmN5IHRoZSBBZ3JlZW1lbnQgaXMgY29weXJpZ2h0ZWQgYW5kCisgICBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudCBTdGV3YXJkCisgICByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mCisgICB0aGlzIEFncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gTm8gb25lIG90aGVyIHRoYW4gdGhlIEFncmVlbWVudAorICAgU3Rld2FyZCBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gSUJNIGlzIHRoZSBpbml0aWFsCisgICBBZ3JlZW1lbnQgU3Rld2FyZC4gSUJNIG1heSBhc3NpZ24gdGhlIHJlc3BvbnNpYmlsaXR5IHRvIHNlcnZlIGFzIHRoZQorICAgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24gb2YKKyAgIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUKKyAgIFByb2dyYW0gKGluY2x1ZGluZyBDb250cmlidXRpb25zKSBtYXkgYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8KKyAgIHRoZSB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwKKyAgIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YgdGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heQorICAgZWxlY3QgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAoaW5jbHVkaW5nIGl0cyBDb250cmlidXRpb25zKSB1bmRlcgorICAgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpCisgICBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0byB0aGUgaW50ZWxsZWN0dWFsCisgICBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIgZXhwcmVzc2x5LAorICAgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QKKyAgIGV4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC4KKworICAgVGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIE5ldyBZb3JrIGFuZAorICAgdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EuIE5vCisgICBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMgQWdyZWVtZW50CisgICBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMKKyAgIGl0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0NQTC0xLjAgYi9saWNlbnNlcy9DUEwtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdkOWIyMTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9DUEwtMS4wCkBAIC0wLDAgKzEsODcgQEAKK0NvbW1vbiBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMAorCitUSEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgQ09NTU9OIFBVQkxJQyBMSUNFTlNFICgiQUdSRUVNRU5UIikuIEFOWSBVU0UsIFJFUFJPRFVDVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRSBPRiBUSElTIEFHUkVFTUVOVC4KKworMS4gREVGSU5JVElPTlMKKworIkNvbnRyaWJ1dGlvbiIgbWVhbnM6CisKK2EpIGluIHRoZSBjYXNlIG9mIHRoZSBpbml0aWFsIENvbnRyaWJ1dG9yLCB0aGUgaW5pdGlhbCBjb2RlIGFuZCBkb2N1bWVudGF0aW9uIGRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQKKworYikgaW4gdGhlIGNhc2Ugb2YgZWFjaCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9yOgorCitpKSBjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQKKworaWkpIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTsKKword2hlcmUgc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZSBkaXN0cmlidXRlZCBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuIEEgQ29udHJpYnV0aW9uICdvcmlnaW5hdGVzJyBmcm9tIGEgQ29udHJpYnV0b3IgaWYgaXQgd2FzIGFkZGVkIHRvIHRoZSBQcm9ncmFtIGJ5IHN1Y2ggQ29udHJpYnV0b3IgaXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24gc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gd2hpY2g6IChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBQcm9ncmFtIHVuZGVyIHRoZWlyIG93biBsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBQcm9ncmFtLgorCisiQ29udHJpYnV0b3IiIG1lYW5zIGFueSBwZXJzb24gb3IgZW50aXR5IHRoYXQgZGlzdHJpYnV0ZXMgdGhlIFByb2dyYW0uCisKKyJMaWNlbnNlZCBQYXRlbnRzICIgbWVhbiBwYXRlbnQgY2xhaW1zIGxpY2Vuc2FibGUgYnkgYSBDb250cmlidXRvciB3aGljaCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSB1c2Ugb3Igc2FsZSBvZiBpdHMgQ29udHJpYnV0aW9uIGFsb25lIG9yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4KKworIlByb2dyYW0iIG1lYW5zIHRoZSBDb250cmlidXRpb25zIGRpc3RyaWJ1dGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEFncmVlbWVudC4KKworIlJlY2lwaWVudCIgbWVhbnMgYW55b25lIHdobyByZWNlaXZlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuCisKKzIuIEdSQU5UIE9GIFJJR0hUUworCithKSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIGNvcHlyaWdodCBsaWNlbnNlIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseSBkaXNwbGF5LCBwdWJsaWNseSBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybS4KKworYikgU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBwYXRlbnQgbGljZW5zZSB1bmRlciBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0IGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLiBUaGlzIHBhdGVudCBsaWNlbnNlIHNoYWxsIGFwcGx5IHRvIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcyBhZGRlZCBieSB0aGUgQ29udHJpYnV0b3IsIHN1Y2ggYWRkaXRpb24gb2YgdGhlIENvbnRyaWJ1dGlvbiBjYXVzZXMgc3VjaCBjb21iaW5hdGlvbiB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlZCBQYXRlbnRzLiBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvIGFueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUgQ29udHJpYnV0aW9uLiBObyBoYXJkd2FyZSBwZXIgc2UgaXMgbGljZW5zZWQgaGVyZXVuZGVyLgorCitjKSBSZWNpcGllbnQgdW5kZXJzdGFuZHMgdGhhdCBhbHRob3VnaCBlYWNoIENvbnRyaWJ1dG9yIGdyYW50cyB0aGUgbGljZW5zZXMgdG8gaXRzIENvbnRyaWJ1dGlvbnMgc2V0IGZvcnRoIGhlcmVpbiwgbm8gYXNzdXJhbmNlcyBhcmUgcHJvdmlkZWQgYnkgYW55IENvbnRyaWJ1dG9yIHRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIEVhY2ggQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueSBsaWFiaWxpdHkgdG8gUmVjaXBpZW50IGZvciBjbGFpbXMgYnJvdWdodCBieSBhbnkgb3RoZXIgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9yIG90aGVyd2lzZS4gQXMgYSBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGFuZCBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eSB0byBzZWN1cmUgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLCBpZiBhIHRoaXJkIHBhcnR5IHBhdGVudCBsaWNlbnNlIGlzIHJlcXVpcmVkIHRvIGFsbG93IFJlY2lwaWVudCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtLCBpdCBpcyBSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLgorCitkKSBFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50IGNvcHlyaWdodCByaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluIHRoaXMgQWdyZWVtZW50LgorCiszLiBSRVFVSVJFTUVOVFMKKworQSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybSB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0OgorCithKSBpdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kCisKK2IpIGl0cyBsaWNlbnNlIGFncmVlbWVudDoKKworaSkgZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZCBjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlIGFuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsKKworaWkpIGVmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2ggYXMgbG9zdCBwcm9maXRzOworCitpaWkpIHN0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQgQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZAorCitpdikgc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2ggQ29udHJpYnV0b3IsIGFuZCBpbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBleGNoYW5nZS4KKworV2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UgY29kZSBmb3JtOgorCithKSBpdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQKKworYikgYSBjb3B5IG9mIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgaW5jbHVkZWQgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIFByb2dyYW0uCisKK0NvbnRyaWJ1dG9ycyBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkgY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4KKworRWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUgb3JpZ2luYXRvciBvZiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3Mgc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBDb250cmlidXRpb24uCisKKzQuIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OCisKK0NvbW1lcmNpYWwgZGlzdHJpYnV0b3JzIG9mIHNvZnR3YXJlIG1heSBhY2NlcHQgY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIHdpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzIGFuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlIG9mIHRoZSBQcm9ncmFtLCB0aGUgQ29udHJpYnV0b3Igd2hvIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nIHNob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsIGxpYWJpbGl0eSBmb3Igb3RoZXIgQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIHN1Y2ggQ29udHJpYnV0b3IgKCJDb21tZXJjaWFsIENvbnRyaWJ1dG9yIikgaGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlciBDb250cmlidXRvciAoIkluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIikgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZCBjb3N0cyAoY29sbGVjdGl2ZWx5ICJMb3NzZXMiKSBhcmlzaW5nIGZyb20gY2xhaW1zLCBsYXdzdWl0cyBhbmQgb3RoZXIgbGVnYWwgYWN0aW9ucyBicm91Z2h0IGJ5IGEgdGhpcmQgcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8gdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3Igb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiBjb25uZWN0aW9uIHdpdGggaXRzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZy4gVGhlIG9ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMgcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluIG9yZGVyIHRvIHF1YWxpZnksIGFuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IGEpIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB0byBjb250cm9sLCBhbmQgY29vcGVyYXRlIHdpdGggdGhlIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4sIHRoZSBkZWZlbnNlIGFuZCBhbnkgcmVsYXRlZCBzZXR0bGVtZW50IG5lZ290aWF0aW9ucy4gVGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZSBpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuCisKK0ZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsIFByb2R1Y3QgWC4gVGhhdCBDb250cmlidXRvciBpcyB0aGVuIGEgQ29tbWVyY2lhbCBDb250cmlidXRvci4gSWYgdGhhdCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRoZW4gbWFrZXMgcGVyZm9ybWFuY2UgY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzIGFyZSBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IncyByZXNwb25zaWJpbGl0eSBhbG9uZS4gVW5kZXIgdGhpcyBzZWN0aW9uLCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciB3b3VsZCBoYXZlIHRvIGRlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUgb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZCB3YXJyYW50aWVzLCBhbmQgaWYgYSBjb3VydCByZXF1aXJlcyBhbnkgb3RoZXIgQ29udHJpYnV0b3IgdG8gcGF5IGFueSBkYW1hZ2VzIGFzIGEgcmVzdWx0LCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBtdXN0IHBheSB0aG9zZSBkYW1hZ2VzLgorCis1LiBOTyBXQVJSQU5UWQorCitFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTIEFHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIGFuZCBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsIGNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yIGVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLgorCis2LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWQorCitFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTIEFHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBHRU5FUkFMCisKK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorCitJZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGEgQ29udHJpYnV0b3Igd2l0aCByZXNwZWN0IHRvIGEgcGF0ZW50IGFwcGxpY2FibGUgdG8gc29mdHdhcmUgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpLCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMgZ3JhbnRlZCBieSB0aGF0IENvbnRyaWJ1dG9yIHRvIHN1Y2ggUmVjaXBpZW50IHVuZGVyIHRoaXMgQWdyZWVtZW50IHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuIEluIGFkZGl0aW9uLCBpZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoIFJlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorCitBbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHNoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZSBwZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwgUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5IFJlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4KKworRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzIGNvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudCBTdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YgdGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gSUJNIGlzIHRoZSBpbml0aWFsIEFncmVlbWVudCBTdGV3YXJkLiBJQk0gbWF5IGFzc2lnbiB0aGUgcmVzcG9uc2liaWxpdHkgdG8gc2VydmUgYXMgdGhlIEFncmVlbWVudCBTdGV3YXJkIHRvIGEgc3VpdGFibGUgc2VwYXJhdGUgZW50aXR5LiBFYWNoIG5ldyB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbSAoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50IHVuZGVyIHdoaWNoIGl0IHdhcyByZWNlaXZlZC4gSW4gYWRkaXRpb24sIGFmdGVyIGEgbmV3IHZlcnNpb24gb2YgdGhlIEFncmVlbWVudCBpcyBwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gRXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzIG5vIHJpZ2h0cyBvciBsaWNlbnNlcyB0byB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlciBleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90IGV4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC4KKworVGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIE5ldyBZb3JrIGFuZCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYS4gTm8gcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiB1bmRlciB0aGlzIEFncmVlbWVudCBtb3JlIHRoYW4gb25lIHllYXIgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZS4gRWFjaCBwYXJ0eSB3YWl2ZXMgaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0NQT0wgYi9saWNlbnNlcy9DUE9MCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmYjVjM2QKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9DUE9MCkBAIC0wLDAgKzEsMTkzIEBACisgICAgICAgICAgICAgICAgICAgVGhlIENvZGUgUHJvamVjdCBPcGVuIExpY2Vuc2UgKENQT0wpIDEuMDIKKworUHJlYW1ibGUKKworICAgICBUaGlzIExpY2Vuc2UgZ292ZXJucyBZb3VyIHVzZSBvZiB0aGUgV29yay4gVGhpcyBMaWNlbnNlIGlzIGludGVuZGVkIHRvCisgICAgYWxsb3cgZGV2ZWxvcGVycyB0byB1c2UgdGhlIFNvdXJjZSBDb2RlIGFuZCBFeGVjdXRhYmxlIEZpbGVzIHByb3ZpZGVkIGFzCisgICAgICAgICAgICAgICAgcGFydCBvZiB0aGUgV29yayBpbiBhbnkgYXBwbGljYXRpb24gaW4gYW55IGZvcm0uCisKKyAgICAgICAgICAgIFRoZSBtYWluIHBvaW50cyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZSBhcmU6CisKKyAgKiBTb3VyY2UgQ29kZSBhbmQgRXhlY3V0YWJsZSBGaWxlcyBjYW4gYmUgdXNlZCBpbiBjb21tZXJjaWFsIGFwcGxpY2F0aW9uczsKKyAgKiBTb3VyY2UgQ29kZSBhbmQgRXhlY3V0YWJsZSBGaWxlcyBjYW4gYmUgcmVkaXN0cmlidXRlZDsgYW5kCisgICogU291cmNlIENvZGUgY2FuIGJlIG1vZGlmaWVkIHRvIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzLgorICAqIE5vIGNsYWltIG9mIHN1aXRhYmlsaXR5LCBndWFyYW50ZWUsIG9yIGFueSB3YXJyYW50eSB3aGF0c29ldmVyIGlzIHByb3ZpZGVkLgorICAgIFRoZSBzb2Z0d2FyZSBpcyBwcm92aWRlZCAiYXMtaXMiLgorICAqIFRoZSBBcnRpY2xlIGFjY29tcGFueWluZyB0aGUgV29yayBtYXkgbm90IGJlIGRpc3RyaWJ1dGVkIG9yIHJlcHVibGlzaGVkCisgICAgd2l0aG91dCB0aGUgQXV0aG9yJ3MgY29uc2VudAorCisgICAgICBUaGlzIExpY2Vuc2UgaXMgZW50ZXJlZCBiZXR3ZWVuIFlvdSwgdGhlIGluZGl2aWR1YWwgb3Igb3RoZXIgZW50aXR5CisgICAgIHJlYWRpbmcgb3Igb3RoZXJ3aXNlIG1ha2luZyB1c2Ugb2YgdGhlIFdvcmsgbGljZW5zZWQgcHVyc3VhbnQgdG8gdGhpcworICAgTGljZW5zZSBhbmQgdGhlIGluZGl2aWR1YWwgb3Igb3RoZXIgZW50aXR5IHdoaWNoIG9mZmVycyB0aGUgV29yayB1bmRlciB0aGUKKyAgICAgICAgICAgICAgICAgICAgICAgdGVybXMgb2YgdGhpcyBMaWNlbnNlICgiQXV0aG9yIikuCisKK0xpY2Vuc2UKKworICAgICAgVEhFIFdPUksgKEFTIERFRklORUQgQkVMT1cpIElTIFBST1ZJREVEIFVOREVSIFRIRSBURVJNUyBPRiBUSElTIENPREUKKyAgICAgIFBST0pFQ1QgT1BFTiBMSUNFTlNFICgiTElDRU5TRSIpLiBUSEUgV09SSyBJUyBQUk9URUNURUQgQlkgQ09QWVJJR0hUCisgICBBTkQvT1IgT1RIRVIgQVBQTElDQUJMRSBMQVcuIEFOWSBVU0UgT0YgVEhFIFdPUksgT1RIRVIgVEhBTiBBUyBBVVRIT1JJWkVECisgICAgICAgICAgICAgICBVTkRFUiBUSElTIExJQ0VOU0UgT1IgQ09QWVJJR0hUIExBVyBJUyBQUk9ISUJJVEVELgorCisgICBCWSBFWEVSQ0lTSU5HIEFOWSBSSUdIVFMgVE8gVEhFIFdPUksgUFJPVklERUQgSEVSRUlOLCBZT1UgQUNDRVBUIEFORCBBR1JFRQorICAgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4gVEhFIEFVVEhPUiBHUkFOVFMgWU9VIFRIRSBSSUdIVFMKKyAgICAgQ09OVEFJTkVEIEhFUkVJTiBJTiBDT05TSURFUkFUSU9OIE9GIFlPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORAorICAgICBDT05ESVRJT05TLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIEFDQ0VQVCBBTkQgQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GCisgICAgICAgICAgICAgICBUSElTIExJQ0VOU0UsIFlPVSBDQU5OT1QgTUFLRSBBTlkgVVNFIE9GIFRIRSBXT1JLLgorCisgMS4gRGVmaW5pdGlvbnMuCisgICAgICAxLiAiQXJ0aWNsZXMiIG1lYW5zLCBjb2xsZWN0aXZlbHksIGFsbCBhcnRpY2xlcyB3cml0dGVuIGJ5IEF1dGhvciB3aGljaAorICAgICAgICAgZGVzY3JpYmVzIGhvdyB0aGUgU291cmNlIENvZGUgYW5kIEV4ZWN1dGFibGUgRmlsZXMgZm9yIHRoZSBXb3JrIG1heSBiZQorICAgICAgICAgdXNlZCBieSBhIHVzZXIuCisgICAgICAyLiAiQXV0aG9yIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBvZmZlcnMgdGhlIFdvcmsgdW5kZXIgdGhlCisgICAgICAgICB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisgICAgICAzLiAiRGVyaXZhdGl2ZSBXb3JrIiBtZWFucyBhIHdvcmsgYmFzZWQgdXBvbiB0aGUgV29yayBvciB1cG9uIHRoZSBXb3JrIGFuZAorICAgICAgICAgb3RoZXIgcHJlLWV4aXN0aW5nIHdvcmtzLgorICAgICAgNC4gIkV4ZWN1dGFibGUgRmlsZXMiIHJlZmVyIHRvIHRoZSBleGVjdXRhYmxlcywgYmluYXJ5IGZpbGVzLAorICAgICAgICAgY29uZmlndXJhdGlvbiBhbmQgYW55IHJlcXVpcmVkIGRhdGEgZmlsZXMgaW5jbHVkZWQgaW4gdGhlIFdvcmsuCisgICAgICA1LiAiUHVibGlzaGVyIiBtZWFucyB0aGUgcHJvdmlkZXIgb2YgdGhlIHdlYnNpdGUsIG1hZ2F6aW5lLCBDRC1ST00sIERWRCBvcgorICAgICAgICAgb3RoZXIgbWVkaXVtIGZyb20gb3IgYnkgd2hpY2ggdGhlIFdvcmsgaXMgb2J0YWluZWQgYnkgWW91LgorICAgICAgNi4gIlNvdXJjZSBDb2RlIiByZWZlcnMgdG8gdGhlIGNvbGxlY3Rpb24gb2Ygc291cmNlIGNvZGUgYW5kIGNvbmZpZ3VyYXRpb24KKyAgICAgICAgIGZpbGVzIHVzZWQgdG8gY3JlYXRlIHRoZSBFeGVjdXRhYmxlIEZpbGVzLgorICAgICAgNy4gIlN0YW5kYXJkIFZlcnNpb24iIHJlZmVycyB0byBzdWNoIGEgV29yayBpZiBpdCBoYXMgbm90IGJlZW4gbW9kaWZpZWQsCisgICAgICAgICBvciBoYXMgYmVlbiBtb2RpZmllZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGNvbnNlbnQgb2YgdGhlIEF1dGhvciwgc3VjaAorICAgICAgICAgY29uc2VudCBiZWluZyBpbiB0aGUgZnVsbCBkaXNjcmV0aW9uIG9mIHRoZSBBdXRob3IuCisgICAgICA4LiAiV29yayIgcmVmZXJzIHRvIHRoZSBjb2xsZWN0aW9uIG9mIGZpbGVzIGRpc3RyaWJ1dGVkIGJ5IHRoZSBQdWJsaXNoZXIsCisgICAgICAgICBpbmNsdWRpbmcgdGhlIFNvdXJjZSBDb2RlLCBFeGVjdXRhYmxlIEZpbGVzLCBiaW5hcmllcywgZGF0YSBmaWxlcywKKyAgICAgICAgIGRvY3VtZW50YXRpb24sIHdoaXRlcGFwZXJzIGFuZCB0aGUgQXJ0aWNsZXMuCisgICAgICA5LiAiWW91IiBpcyB5b3UsIGFuIGluZGl2aWR1YWwgb3IgZW50aXR5IHdpc2hpbmcgdG8gdXNlIHRoZSBXb3JrIGFuZAorICAgICAgICAgZXhlcmNpc2UgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorIDIuIEZhaXIgVXNlL0ZhaXIgVXNlIFJpZ2h0cy4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gcmVkdWNlLAorICAgIGxpbWl0LCBvciByZXN0cmljdCBhbnkgcmlnaHRzIGFyaXNpbmcgZnJvbSBmYWlyIHVzZSwgZmFpciBkZWFsaW5nLCBmaXJzdAorICAgIHNhbGUgb3Igb3RoZXIgbGltaXRhdGlvbnMgb24gdGhlIGV4Y2x1c2l2ZSByaWdodHMgb2YgdGhlIGNvcHlyaWdodCBvd25lcgorICAgIHVuZGVyIGNvcHlyaWdodCBsYXcgb3Igb3RoZXIgYXBwbGljYWJsZSBsYXdzLgorIDMuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhlCisgICAgQXV0aG9yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbAorICAgIChmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSBhcHBsaWNhYmxlIGNvcHlyaWdodCkgbGljZW5zZSB0byBleGVyY2lzZSB0aGUKKyAgICByaWdodHMgaW4gdGhlIFdvcmsgYXMgc3RhdGVkIGJlbG93OgorICAgICAgMS4gWW91IG1heSB1c2UgdGhlIHN0YW5kYXJkIHZlcnNpb24gb2YgdGhlIFNvdXJjZSBDb2RlIG9yIEV4ZWN1dGFibGUgRmlsZXMKKyAgICAgICAgIGluIFlvdXIgb3duIGFwcGxpY2F0aW9ucy4KKyAgICAgIDIuIFlvdSBtYXkgYXBwbHkgYnVnIGZpeGVzLCBwb3J0YWJpbGl0eSBmaXhlcyBhbmQgb3RoZXIgbW9kaWZpY2F0aW9ucworICAgICAgICAgb2J0YWluZWQgZnJvbSB0aGUgUHVibGljIERvbWFpbiBvciBmcm9tIHRoZSBBdXRob3IuIEEgV29yayBtb2RpZmllZCBpbgorICAgICAgICAgc3VjaCBhIHdheSBzaGFsbCBzdGlsbCBiZSBjb25zaWRlcmVkIHRoZSBzdGFuZGFyZCB2ZXJzaW9uIGFuZCB3aWxsIGJlCisgICAgICAgICBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4KKyAgICAgIDMuIFlvdSBtYXkgb3RoZXJ3aXNlIG1vZGlmeSBZb3VyIGNvcHkgb2YgdGhpcyBXb3JrIChleGNsdWRpbmcgdGhlCisgICAgICAgICBBcnRpY2xlcykgaW4gYW55IHdheSB0byBjcmVhdGUgYSBEZXJpdmF0aXZlIFdvcmssIHByb3ZpZGVkIHRoYXQgWW91CisgICAgICAgICBpbnNlcnQgYSBwcm9taW5lbnQgbm90aWNlIGluIGVhY2ggY2hhbmdlZCBmaWxlIHN0YXRpbmcgaG93LCB3aGVuIGFuZAorICAgICAgICAgd2hlcmUgWW91IGNoYW5nZWQgdGhhdCBmaWxlLgorICAgICAgNC4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBzdGFuZGFyZCB2ZXJzaW9uIG9mIHRoZSBFeGVjdXRhYmxlIEZpbGVzIGFuZAorICAgICAgICAgU291cmNlIENvZGUgb3IgRGVyaXZhdGl2ZSBXb3JrIGluIGFnZ3JlZ2F0ZSB3aXRoIG90aGVyIChwb3NzaWJseQorICAgICAgICAgY29tbWVyY2lhbCkgcHJvZ3JhbXMgYXMgcGFydCBvZiBhIGxhcmdlciAocG9zc2libHkgY29tbWVyY2lhbCkgc29mdHdhcmUKKyAgICAgICAgIGRpc3RyaWJ1dGlvbi4KKyAgICAgIDUuIFRoZSBBcnRpY2xlcyBkaXNjdXNzaW5nIHRoZSBXb3JrIHB1Ymxpc2hlZCBpbiBhbnkgZm9ybSBieSB0aGUgYXV0aG9yCisgICAgICAgICBtYXkgbm90IGJlIGRpc3RyaWJ1dGVkIG9yIHJlcHVibGlzaGVkIHdpdGhvdXQgdGhlIEF1dGhvcidzIGNvbnNlbnQuIFRoZQorICAgICAgICAgYXV0aG9yIHJldGFpbnMgY29weXJpZ2h0IHRvIGFueSBzdWNoIEFydGljbGVzLiBZb3UgbWF5IHVzZSB0aGUKKyAgICAgICAgIEV4ZWN1dGFibGUgRmlsZXMgYW5kIFNvdXJjZSBDb2RlIHB1cnN1YW50IHRvIHRoaXMgTGljZW5zZSBidXQgeW91IG1heQorICAgICAgICAgbm90IHJlcG9zdCBvciByZXB1Ymxpc2ggb3Igb3RoZXJ3aXNlIGRpc3RyaWJ1dGUgb3IgbWFrZSBhdmFpbGFibGUgdGhlCisgICAgICAgICBBcnRpY2xlcywgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIHRoZSBBdXRob3IuCisgICAgQW55IHN1YnJvdXRpbmVzIG9yIG1vZHVsZXMgc3VwcGxpZWQgYnkgWW91IGFuZCBsaW5rZWQgaW50byB0aGUgU291cmNlIENvZGUKKyAgICBvciBFeGVjdXRhYmxlIEZpbGVzIHRoaXMgV29yayBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCBwYXJ0IG9mIHRoaXMgV29yayBhbmQKKyAgICB3aWxsIG5vdCBiZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisgNC4gUGF0ZW50IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgZWFjaAorICAgIEF1dGhvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLAorICAgIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSAoZXhjZXB0IGFzIHN0YXRlZCBpbiB0aGlzIHNlY3Rpb24pCisgICAgcGF0ZW50IGxpY2Vuc2UgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUKKyAgICBXb3JrLgorIDUuIFJlc3RyaWN0aW9ucy4gVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUgaXMgZXhwcmVzc2x5IG1hZGUKKyAgICBzdWJqZWN0IHRvIGFuZCBsaW1pdGVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorICAgICAgMS4gWW91IGFncmVlIG5vdCB0byByZW1vdmUgYW55IG9mIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQsIHBhdGVudCwKKyAgICAgICAgIHRyYWRlbWFyaywgYW5kIGF0dHJpYnV0aW9uIG5vdGljZXMgYW5kIGFzc29jaWF0ZWQgZGlzY2xhaW1lcnMgdGhhdCBtYXkKKyAgICAgICAgIGFwcGVhciBpbiB0aGUgU291cmNlIENvZGUgb3IgRXhlY3V0YWJsZSBGaWxlcy4KKyAgICAgIDIuIFlvdSBhZ3JlZSBub3QgdG8gYWR2ZXJ0aXNlIG9yIGluIGFueSB3YXkgaW1wbHkgdGhhdCB0aGlzIFdvcmsgaXMgYQorICAgICAgICAgcHJvZHVjdCBvZiBZb3VyIG93bi4KKyAgICAgIDMuIFRoZSBuYW1lIG9mIHRoZSBBdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICAgICAgICAgZGVyaXZlZCBmcm9tIHRoZSBXb3JrIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiB0aGUgQXV0aG9yLgorICAgICAgNC4gWW91IGFncmVlIG5vdCB0byBzZWxsLCBsZWFzZSwgb3IgcmVudCBhbnkgcGFydCBvZiB0aGUgV29yay4gVGhpcyBkb2VzCisgICAgICAgICBub3QgcmVzdHJpY3QgeW91IGZyb20gaW5jbHVkaW5nIHRoZSBXb3JrIG9yIGFueSBwYXJ0IG9mIHRoZSBXb3JrIGluc2lkZQorICAgICAgICAgYSBsYXJnZXIgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHRoYXQgaXRzZWxmIGlzIGJlaW5nIHNvbGQuIFRoZSBXb3JrIGJ5CisgICAgICAgICBpdHNlbGYsIHRob3VnaCwgY2Fubm90IGJlIHNvbGQsIGxlYXNlZCBvciByZW50ZWQuCisgICAgICA1LiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgRmlsZXMgYW5kIFNvdXJjZSBDb2RlIG9ubHkgdW5kZXIgdGhlCisgICAgICAgICB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiwgb3IgdGhlIFVuaWZvcm0KKyAgICAgICAgIFJlc291cmNlIElkZW50aWZpZXIgZm9yLCB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBFeGVjdXRhYmxlCisgICAgICAgICBGaWxlcyBvciBTb3VyY2UgQ29kZSBZb3UgZGlzdHJpYnV0ZSBhbmQgZW5zdXJlIHRoYXQgYW55b25lIHJlY2VpdmluZworICAgICAgICAgc3VjaCBFeGVjdXRhYmxlIEZpbGVzIGFuZCBTb3VyY2UgQ29kZSBhZ3JlZXMgdGhhdCB0aGUgdGVybXMgb2YgdGhpcworICAgICAgICAgTGljZW5zZSBhcHBseSB0byBzdWNoIEV4ZWN1dGFibGUgRmlsZXMgYW5kL29yIFNvdXJjZSBDb2RlLiBZb3UgbWF5IG5vdAorICAgICAgICAgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiB0aGUgV29yayB0aGF0IGFsdGVyIG9yIHJlc3RyaWN0IHRoZSB0ZXJtcworICAgICAgICAgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQKKyAgICAgICAgIGhlcmV1bmRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSB0aGUgV29yay4gWW91IG11c3Qga2VlcCBpbnRhY3QgYWxsCisgICAgICAgICBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50aWVzLgorICAgICAgICAgWW91IG1heSBub3QgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSBGaWxlcyBvciBTb3VyY2UgQ29kZSB3aXRoIGFueQorICAgICAgICAgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0aGF0IGNvbnRyb2wgYWNjZXNzIG9yIHVzZSBvZiB0aGUgV29yayBpbiBhCisgICAgICAgICBtYW5uZXIgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKyAgICAgIDYuIFlvdSBhZ3JlZSBub3QgdG8gdXNlIHRoZSBXb3JrIGZvciBpbGxlZ2FsLCBpbW1vcmFsIG9yIGltcHJvcGVyCisgICAgICAgICBwdXJwb3Nlcywgb3Igb24gcGFnZXMgY29udGFpbmluZyBpbGxlZ2FsLCBpbW1vcmFsIG9yIGltcHJvcGVyIG1hdGVyaWFsLgorICAgICAgICAgVGhlIFdvcmsgaXMgc3ViamVjdCB0byBhcHBsaWNhYmxlIGV4cG9ydCBsYXdzLiBZb3UgYWdyZWUgdG8gY29tcGx5IHdpdGgKKyAgICAgICAgIGFsbCBzdWNoIGxhd3MgYW5kIHJlZ3VsYXRpb25zIHRoYXQgbWF5IGFwcGx5IHRvIHRoZSBXb3JrIGFmdGVyIFlvdXIKKyAgICAgICAgIHJlY2VpcHQgb2YgdGhlIFdvcmsuCisgNi4gUmVwcmVzZW50YXRpb25zLCBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVyLiBUSElTIFdPUksgSVMgUFJPVklERUQgIkFTIElTIiwKKyAgICAiV0hFUkUgSVMiIEFORCAiQVMgQVZBSUxBQkxFIiwgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMgT1IKKyAgICBDT05ESVRJT05TIE9SIEdVQVJBTlRFRVMuIFlPVSwgVEhFIFVTRVIsIEFTU1VNRSBBTEwgUklTSyBJTiBJVFMgVVNFLAorICAgIElOQ0xVRElORyBDT1BZUklHSFQgSU5GUklOR0VNRU5ULCBQQVRFTlQgSU5GUklOR0VNRU5ULCBTVUlUQUJJTElUWSwgRVRDLgorICAgIEFVVEhPUiBFWFBSRVNTTFkgRElTQ0xBSU1TIEFMTCBFWFBSRVNTLCBJTVBMSUVEIE9SIFNUQVRVVE9SWSBXQVJSQU5USUVTIE9SCisgICAgQ09ORElUSU9OUywgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GCisgICAgTUVSQ0hBTlRBQklMSVRZLCBNRVJDSEFOVEFCTEUgUVVBTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwKKyAgICBPUiBBTlkgV0FSUkFOVFkgT0YgVElUTEUgT1IgTk9OLUlORlJJTkdFTUVOVCwgT1IgVEhBVCBUSEUgV09SSyAoT1IgQU5ZCisgICAgUE9SVElPTiBUSEVSRU9GKSBJUyBDT1JSRUNULCBVU0VGVUwsIEJVRy1GUkVFIE9SIEZSRUUgT0YgVklSVVNFUy4gWU9VIE1VU1QKKyAgICBQQVNTIFRISVMgRElTQ0xBSU1FUiBPTiBXSEVORVZFUiBZT1UgRElTVFJJQlVURSBUSEUgV09SSyBPUiBERVJJVkFUSVZFCisgICAgV09SS1MuCisgNy4gSW5kZW1uaXR5LiBZb3UgYWdyZWUgdG8gZGVmZW5kLCBpbmRlbW5pZnkgYW5kIGhvbGQgaGFybWxlc3MgdGhlIEF1dGhvciBhbmQKKyAgICB0aGUgUHVibGlzaGVyIGZyb20gYW5kIGFnYWluc3QgYW55IGNsYWltcywgc3VpdHMsIGxvc3NlcywgZGFtYWdlcywKKyAgICBsaWFiaWxpdGllcywgY29zdHMsIGFuZCBleHBlbnNlcyAoaW5jbHVkaW5nIHJlYXNvbmFibGUgbGVnYWwgb3IgYXR0b3JuZXlzKgorICAgIGZlZXMpIHJlc3VsdGluZyBmcm9tIG9yIHJlbGF0aW5nIHRvIGFueSB1c2Ugb2YgdGhlIFdvcmsgYnkgWW91LgorIDguIExpbWl0YXRpb24gb24gTGlhYmlsaXR5LiBFWENFUFQgVE8gVEhFIEVYVEVOVCBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4KKyAgICBOTyBFVkVOVCBXSUxMIFRIRSBBVVRIT1IgT1IgVEhFIFBVQkxJU0hFUiBCRSBMSUFCTEUgVE8gWU9VIE9OIEFOWSBMRUdBTAorICAgIFRIRU9SWSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFBVTklUSVZFIE9SIEVYRU1QTEFSWQorICAgIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhJUyBMSUNFTlNFIE9SIFRIRSBVU0UgT0YgVEhFIFdPUksgT1IgT1RIRVJXSVNFLAorICAgIEVWRU4gSUYgVEhFIEFVVEhPUiBPUiBUSEUgUFVCTElTSEVSIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgICAgU1VDSCBEQU1BR0VTLgorIDkuIFRlcm1pbmF0aW9uLgorICAgICAgMS4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlCisgICAgICAgICBhdXRvbWF0aWNhbGx5IHVwb24gYW55IGJyZWFjaCBieSBZb3Ugb2YgYW55IHRlcm0gb2YgdGhpcyBMaWNlbnNlLgorICAgICAgICAgSW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgRGVyaXZhdGl2ZSBXb3JrcyBmcm9tIFlvdQorICAgICAgICAgdW5kZXIgdGhpcyBMaWNlbnNlLCBob3dldmVyLCB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQKKyAgICAgICAgIHByb3ZpZGVkIHN1Y2ggaW5kaXZpZHVhbHMgb3IgZW50aXRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZSB3aXRoCisgICAgICAgICB0aG9zZSBsaWNlbnNlcy4gU2VjdGlvbnMgMSwgMiwgNiwgNywgOCwgOSwgMTAgYW5kIDExIHdpbGwgc3Vydml2ZSBhbnkKKyAgICAgICAgIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KKyAgICAgIDIuIElmIFlvdSBicmluZyBhIGNvcHlyaWdodCwgdHJhZGVtYXJrLCBwYXRlbnQgb3IgYW55IG90aGVyIGluZnJpbmdlbWVudAorICAgICAgICAgY2xhaW0gYWdhaW5zdCBhbnkgY29udHJpYnV0b3Igb3ZlciBpbmZyaW5nZW1lbnRzIFlvdSBjbGFpbSBhcmUgbWFkZSBieQorICAgICAgICAgdGhlIFdvcmssIHlvdXIgTGljZW5zZSBmcm9tIHN1Y2ggY29udHJpYnV0b3IgdG8gdGhlIFdvcmsgZW5kcworICAgICAgICAgYXV0b21hdGljYWxseS4KKyAgICAgIDMuIFN1YmplY3QgdG8gdGhlIGFib3ZlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGlzIExpY2Vuc2UgaXMgcGVycGV0dWFsCisgICAgICAgICAoZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgYXBwbGljYWJsZSBjb3B5cmlnaHQgaW4gdGhlIFdvcmspLgorICAgICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBhYm92ZSwgdGhlIEF1dGhvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVsZWFzZSB0aGUKKyAgICAgICAgIFdvcmsgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgb3IgdG8gc3RvcCBkaXN0cmlidXRpbmcgdGhlIFdvcmsgYXQKKyAgICAgICAgIGFueSB0aW1lOyBwcm92aWRlZCwgaG93ZXZlciB0aGF0IGFueSBzdWNoIGVsZWN0aW9uIHdpbGwgbm90IHNlcnZlIHRvCisgICAgICAgICB3aXRoZHJhdyB0aGlzIExpY2Vuc2UgKG9yIGFueSBvdGhlciBsaWNlbnNlIHRoYXQgaGFzIGJlZW4sIG9yIGlzCisgICAgICAgICByZXF1aXJlZCB0byBiZSwgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlKSwgYW5kIHRoaXMKKyAgICAgICAgIExpY2Vuc2Ugd2lsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgYXMKKyAgICAgICAgIHN0YXRlZCBhYm92ZS4KKzEwLiBQdWJsaXNoZXIuIFRoZSBwYXJ0aWVzIGhlcmVieSBjb25maXJtIHRoYXQgdGhlIFB1Ymxpc2hlciBzaGFsbCBub3QsIHVuZGVyCisgICAgYW55IGNpcmN1bXN0YW5jZXMsIGJlIHJlc3BvbnNpYmxlIGZvciBhbmQgc2hhbGwgbm90IGhhdmUgYW55IGxpYWJpbGl0eSBpbgorICAgIHJlc3BlY3Qgb2YgdGhlIHN1YmplY3QgbWF0dGVyIG9mIHRoaXMgTGljZW5zZS4gVGhlIFB1Ymxpc2hlciBtYWtlcyBubworICAgIHdhcnJhbnR5IHdoYXRzb2V2ZXIgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBXb3JrIGFuZCBzaGFsbCBub3QgYmUgbGlhYmxlIHRvCisgICAgWW91IG9yIGFueSBwYXJ0eSBvbiBhbnkgbGVnYWwgdGhlb3J5IGZvciBhbnkgZGFtYWdlcyB3aGF0c29ldmVyLCBpbmNsdWRpbmcKKyAgICB3aXRob3V0IGxpbWl0YXRpb24gYW55IGdlbmVyYWwsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzCisgICAgYXJpc2luZyBpbiBjb25uZWN0aW9uIHRvIHRoaXMgbGljZW5zZS4gVGhlIFB1Ymxpc2hlciByZXNlcnZlcyB0aGUgcmlnaHQgdG8KKyAgICBjZWFzZSBtYWtpbmcgdGhlIFdvcmsgYXZhaWxhYmxlIHRvIFlvdSBhdCBhbnkgdGltZSB3aXRob3V0IG5vdGljZQorMTEuIE1pc2NlbGxhbmVvdXMKKyAgICAgIDEuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUgbG9jYXRpb24gb2YgdGhlIGhlYWQKKyAgICAgICAgIG9mZmljZSBvZiB0aGUgQXV0aG9yIG9yIGlmIHRoZSBBdXRob3IgaXMgYW4gaW5kaXZpZHVhbCwgdGhlIGxhd3Mgb2YKKyAgICAgICAgIGxvY2F0aW9uIG9mIHRoZSBwcmluY2lwYWwgcGxhY2Ugb2YgcmVzaWRlbmNlIG9mIHRoZSBBdXRob3IuCisgICAgICAyLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKKyAgICAgICAgIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZgorICAgICAgICAgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbgorICAgICAgICAgYnkgdGhlIHBhcnRpZXMgdG8gdGhpcyBMaWNlbnNlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUKKyAgICAgICAgIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KKyAgICAgIDMuIE5vIHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgd2FpdmVkIGFuZCBubworICAgICAgICAgYnJlYWNoIGNvbnNlbnRlZCB0byB1bmxlc3Mgc3VjaCB3YWl2ZXIgb3IgY29uc2VudCBzaGFsbCBiZSBpbiB3cml0aW5nCisgICAgICAgICBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSB0byBiZSBjaGFyZ2VkIHdpdGggc3VjaCB3YWl2ZXIgb3IgY29uc2VudC4KKyAgICAgIDQuIFRoaXMgTGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGgKKyAgICAgICAgIHJlc3BlY3QgdG8gdGhlIFdvcmsgbGljZW5zZWQgaGVyZWluLiBUaGVyZSBhcmUgbm8gdW5kZXJzdGFuZGluZ3MsCisgICAgICAgICBhZ3JlZW1lbnRzIG9yIHJlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFdvcmsgbm90IHNwZWNpZmllZAorICAgICAgICAgaGVyZWluLiBUaGUgQXV0aG9yIHNoYWxsIG5vdCBiZSBib3VuZCBieSBhbnkgYWRkaXRpb25hbCBwcm92aXNpb25zIHRoYXQKKyAgICAgICAgIG1heSBhcHBlYXIgaW4gYW55IGNvbW11bmljYXRpb24gZnJvbSBZb3UuIFRoaXMgTGljZW5zZSBtYXkgbm90IGJlCisgICAgICAgICBtb2RpZmllZCB3aXRob3V0IHRoZSBtdXR1YWwgd3JpdHRlbiBhZ3JlZW1lbnQgb2YgdGhlIEF1dGhvciBhbmQgWW91LgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvQ1JBQ0tMSUIgYi9saWNlbnNlcy9DUkFDS0xJQgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTYxYTVhCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvQ1JBQ0tMSUIKQEAgLTAsMCArMSwxMTIgQEAKKygqCitUaGlzIGRvY3VtZW50IGlzIGZyZWVseSBwbGFnaWFyaXNlZCBmcm9tIHRoZSAnQXJ0aXN0aWMgTGljZW5jZScsCitkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIHRoZSBQZXJsIHY0LjAga2l0IGJ5IExhcnJ5IFdhbGwsIHdoaWNoIGlzCithdmFpbGFibGUgZnJvbSBtb3N0IG1ham9yIGFyY2hpdmUgc2l0ZXMKKyopCisKK1RoaXMgZG9jdW1lbnRzIHB1cnBvc2UgaXMgdG8gc3RhdGUgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhlc2UKK1BhY2thZ2VzIChTZWUgZGVmaW5pdGlvbiBiZWxvdykgdml6OiAiQ3JhY2siLCB0aGUgVW5peCBQYXNzd29yZCBDcmFja2VyLAorYW5kICJDcmFja0xpYiIsIHRoZSBVbml4IFBhc3N3b3JkIENoZWNraW5nIGxpYnJhcnksIHdoaWNoIGFyZSBoZWxkIGluCitjb3B5cmlnaHQgYnkgQWxlYyBEYXZpZCBFZHdhcmQgTXVmZmV0dCwgbWF5IGJlIGNvcGllZCwgc3VjaCB0aGF0IHRoZQorY29weXJpZ2h0IGhvbGRlciBtYWludGFpbnMgc29tZSBzZW1ibGFuY2Ugb2YgYXJ0aXN0aWMgY29udHJvbCBvdmVyIHRoZQorZGV2ZWxvcG1lbnQgb2YgdGhlIHBhY2thZ2VzLCB3aGlsZSBnaXZpbmcgdGhlIHVzZXJzIG9mIHRoZSBwYWNrYWdlIHRoZQorcmlnaHQgdG8gdXNlIGFuZCBkaXN0cmlidXRlIHRoZSBQYWNrYWdlIGluIGEgbW9yZS1vci1sZXNzIGN1c3RvbWFyeQorZmFzaGlvbiwgcGx1cyB0aGUgcmlnaHQgdG8gbWFrZSByZWFzb25hYmxlIG1vZGlmaWNhdGlvbnMuIAorCitTbyB0aGVyZS4KKworKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK0RlZmluaXRpb25zOgorCisKK0EgIlBhY2thZ2UiIHJlZmVycyB0byB0aGUgY29sbGVjdGlvbiBvZiBmaWxlcyBkaXN0cmlidXRlZCBieSB0aGUKK0NvcHlyaWdodCBIb2xkZXIsIGFuZCBkZXJpdmF0aXZlcyBvZiB0aGF0IGNvbGxlY3Rpb24gb2YgZmlsZXMgY3JlYXRlZAordGhyb3VnaCB0ZXh0dWFsIG1vZGlmaWNhdGlvbiwgb3Igc2VnbWVudHMgdGhlcmVvZi4gCisKKyJTdGFuZGFyZCBWZXJzaW9uIiByZWZlcnMgdG8gc3VjaCBhIFBhY2thZ2UgaWYgaXQgaGFzIG5vdCBiZWVuIG1vZGlmaWVkLAorb3IgaGFzIGJlZW4gbW9kaWZpZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB3aXNoZXMgb2YgdGhlIENvcHlyaWdodAorSG9sZGVyLgorCisiQ29weXJpZ2h0IEhvbGRlciIgaXMgd2hvZXZlciBpcyBuYW1lZCBpbiB0aGUgY29weXJpZ2h0IG9yIGNvcHlyaWdodHMKK2ZvciB0aGUgcGFja2FnZS4KKworIllvdSIgaXMgeW91LCBpZiB5b3UncmUgdGhpbmtpbmcgYWJvdXQgY29weWluZyBvciBkaXN0cmlidXRpbmcgdGhpcworUGFja2FnZS4KKworIlJlYXNvbmFibGUgY29weWluZyBmZWUiIGlzIHdoYXRldmVyIHlvdSBjYW4ganVzdGlmeSBvbiB0aGUgYmFzaXMgb2YKK21lZGlhIGNvc3QsIGR1cGxpY2F0aW9uIGNoYXJnZXMsIHRpbWUgb2YgcGVvcGxlIGludm9sdmVkLCBhbmQgc28gb24uCisoWW91IHdpbGwgbm90IGJlIHJlcXVpcmVkIHRvIGp1c3RpZnkgaXQgdG8gdGhlIENvcHlyaWdodCBIb2xkZXIsIGJ1dAorb25seSB0byB0aGUgY29tcHV0aW5nIGNvbW11bml0eSBhdCBsYXJnZSBhcyBhIG1hcmtldCB0aGF0IG11c3QgYmVhciB0aGUKK2ZlZS4pCisKKyJGcmVlbHkgQXZhaWxhYmxlIiBtZWFucyB0aGF0IG5vIGZlZSBpcyBjaGFyZ2VkIGZvciB0aGUgaXRlbSBpdHNlbGYsCit0aG91Z2ggdGhlcmUgbWF5IGJlIGZlZXMgaW52b2x2ZWQgaW4gaGFuZGxpbmcgdGhlIGl0ZW0uICBJdCBhbHNvIG1lYW5zCit0aGF0IHJlY2lwaWVudHMgb2YgdGhlIGl0ZW0gbWF5IHJlZGlzdHJpYnV0ZSBpdCB1bmRlciB0aGUgc2FtZQorY29uZGl0aW9ucyB0aGV5IHJlY2VpdmVkIGl0LgorCisKKzEuICBZb3UgbWF5IG1ha2UgYW5kIGdpdmUgYXdheSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIHNvdXJjZSBmb3JtIG9mIHRoZQorU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGlzIFBhY2thZ2Ugd2l0aG91dCByZXN0cmljdGlvbiwgcHJvdmlkZWQgdGhhdCB5b3UKK2R1cGxpY2F0ZSBhbGwgb2YgdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2VzIGFuZCBhc3NvY2lhdGVkCitkaXNjbGFpbWVycy4KKworMi4gIFlvdSBtYXkgYXBwbHkgYnVnIGZpeGVzLCBwb3J0YWJpbGl0eSBmaXhlcyBhbmQgb3RoZXIgbW9kaWZpY2F0aW9ucworZGVyaXZlZCBmcm9tIHRoZSBQdWJsaWMgRG9tYWluIG9yIGZyb20gdGhlIENvcHlyaWdodCBIb2xkZXIuICBBIFBhY2thZ2UKK21vZGlmaWVkIGluIHN1Y2ggYSB3YXkgc2hhbGwgc3RpbGwgYmUgY29uc2lkZXJlZCB0aGUgU3RhbmRhcmQgVmVyc2lvbi4KKworMy4gIFlvdSBtYXkgb3RoZXJ3aXNlIG1vZGlmeSB5b3VyIGNvcHkgb2YgdGhpcyBQYWNrYWdlIGluIGFueSB3YXksCitwcm92aWRlZCB0aGF0IHlvdSBpbnNlcnQgYSBwcm9taW5lbnQgbm90aWNlIGluIGVhY2ggY2hhbmdlZCBmaWxlIHN0YXRpbmcKK2hvdyBhbmQgd2hlbiBBTkQgV0hZIHlvdSBjaGFuZ2VkIHRoYXQgZmlsZSwgYW5kIHByb3ZpZGVkIHRoYXQgeW91IGRvIGF0CitsZWFzdCBPTkUgb2YgdGhlIGZvbGxvd2luZzoKKworYSkgcGxhY2UgeW91ciBtb2RpZmljYXRpb25zIGluIHRoZSBQdWJsaWMgRG9tYWluIG9yIG90aGVyd2lzZSBtYWtlIHRoZW0KK0ZyZWVseSBBdmFpbGFibGUsIHN1Y2ggYXMgYnkgcG9zdGluZyBzYWlkIG1vZGlmaWNhdGlvbnMgdG8gVXNlbmV0IG9yIGFuCitlcXVpdmFsZW50IG1lZGl1bSwgb3IgcGxhY2luZyB0aGUgbW9kaWZpY2F0aW9ucyBvbiBhIG1ham9yIGFyY2hpdmUgc2l0ZQorc3VjaCBhcyB1dW5ldC51dS5uZXQsIG9yIGJ5IGFsbG93aW5nIHRoZSBDb3B5cmlnaHQgSG9sZGVyIHRvIGluY2x1ZGUKK3lvdXIgbW9kaWZpY2F0aW9ucyBpbiB0aGUgU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGUgUGFja2FnZS4KKworYikgdXNlIHRoZSBtb2RpZmllZCBQYWNrYWdlIG9ubHkgd2l0aGluIHlvdXIgY29ycG9yYXRpb24gb3Igb3JnYW5pemF0aW9uLgorCitjKSByZW5hbWUgYW55IG5vbi1zdGFuZGFyZCBleGVjdXRhYmxlcyBzbyB0aGUgbmFtZXMgZG8gbm90IGNvbmZsaWN0IHdpdGgKK3N0YW5kYXJkIGV4ZWN1dGFibGVzLCB3aGljaCBtdXN0IGFsc28gYmUgcHJvdmlkZWQsIGFuZCBwcm92aWRlIHNlcGFyYXRlCitkb2N1bWVudGF0aW9uIGZvciBlYWNoIG5vbi1zdGFuZGFyZCBleGVjdXRhYmxlIHRoYXQgY2xlYXJseSBkb2N1bWVudHMKK2hvdyBpdCBkaWZmZXJzIGZyb20gdGhlIFN0YW5kYXJkIFZlcnNpb24uCisKK2QpIG1ha2Ugb3RoZXIgZGlzdHJpYnV0aW9uIGFycmFuZ2VtZW50cyB3aXRoIHRoZSBDb3B5cmlnaHQgSG9sZGVyLgorCis0LiAgWW91IG1heSBkaXN0cmlidXRlIHRoZSBwcm9ncmFtcyBvZiB0aGlzIFBhY2thZ2UgaW4gb2JqZWN0IGNvZGUgb3IKK2V4ZWN1dGFibGUgZm9ybSwgcHJvdmlkZWQgdGhhdCB5b3UgZG8gYXQgbGVhc3QgT05FIG9mIHRoZSBmb2xsb3dpbmc6CisKK2EpIGRpc3RyaWJ1dGUgYSBTdGFuZGFyZCBWZXJzaW9uIG9mIHRoZSBleGVjdXRhYmxlcyBhbmQgbGlicmFyeSBmaWxlcywKK3RvZ2V0aGVyIHdpdGggaW5zdHJ1Y3Rpb25zIChpbiB0aGUgbWFudWFsIHBhZ2Ugb3IgZXF1aXZhbGVudCkgb24gd2hlcmUKK3RvIGdldCB0aGUgU3RhbmRhcmQgVmVyc2lvbi4KKworYikgYWNjb21wYW55IHRoZSBkaXN0cmlidXRpb24gd2l0aCB0aGUgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2Ugb2YgdGhlCitQYWNrYWdlIHdpdGggeW91ciBtb2RpZmljYXRpb25zLgorCitjKSBhY2NvbXBhbnkgYW55IG5vbi1zdGFuZGFyZCBleGVjdXRhYmxlcyB3aXRoIHRoZWlyIGNvcnJlc3BvbmRpbmcKK1N0YW5kYXJkIFZlcnNpb24gZXhlY3V0YWJsZXMsIGdpdmluZyB0aGUgbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGVzCitub24tc3RhbmRhcmQgbmFtZXMsIGFuZCBjbGVhcmx5IGRvY3VtZW50aW5nIHRoZSBkaWZmZXJlbmNlcyBpbiBtYW51YWwKK3BhZ2VzIChvciBlcXVpdmFsZW50KSwgdG9nZXRoZXIgd2l0aCBpbnN0cnVjdGlvbnMgb24gd2hlcmUgdG8gZ2V0IHRoZQorU3RhbmRhcmQgVmVyc2lvbi4KKworZCkgbWFrZSBvdGhlciBkaXN0cmlidXRpb24gYXJyYW5nZW1lbnRzIHdpdGggdGhlIENvcHlyaWdodCBIb2xkZXIuCisKKzUuICBZb3UgbWF5IGNoYXJnZSBhIHJlYXNvbmFibGUgY29weWluZyBmZWUgZm9yIGFueSBkaXN0cmlidXRpb24gb2YgdGhpcworUGFja2FnZS4gIFlvdSBtYXkgY2hhcmdlIGFueSBmZWUgeW91IGNob29zZSBmb3Igc3VwcG9ydCBvZiB0aGlzIFBhY2thZ2UuIAorWU9VIE1BWSBOT1QgQ0hBUkdFIEEgRkVFIEZPUiBUSElTIFBBQ0tBR0UgSVRTRUxGLiAgSG93ZXZlciwgeW91IG1heQorZGlzdHJpYnV0ZSB0aGlzIFBhY2thZ2UgaW4gYWdncmVnYXRlIHdpdGggb3RoZXIgKHBvc3NpYmx5IGNvbW1lcmNpYWwpCitwcm9ncmFtcyBhcyBwYXJ0IG9mIGEgbGFyZ2VyIChwb3NzaWJseSBjb21tZXJjaWFsKSBzb2Z0d2FyZSBkaXN0cmlidXRpb24KK3Byb3ZpZGVkIHRoYXQgWU9VIERPIE5PVCBBRFZFUlRJU0UgdGhpcyBwYWNrYWdlIGFzIGEgcHJvZHVjdCBvZiB5b3VyCitvd24uIAorCis2LiAgVGhlIG5hbWUgb2YgdGhlIENvcHlyaWdodCBIb2xkZXIgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IKK3Byb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgord3JpdHRlbiBwZXJtaXNzaW9uLgorCis3LiAgVEhJUyBQQUNLQUdFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5USUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisKKwkJCQlUaGUgRW5kCmRpZmYgLS1naXQgYS9saWNlbnNlcy9DUk9TU09WRVIgYi9saWNlbnNlcy9DUk9TU09WRVIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA1NGQ0NAotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0NST1NTT1ZFUgpAQCAtMCwwICsxLDcyMSBAQAorICAgICAgICAgICAgICAgICAgICAgICAgQ3Jvc3NPdmVyIE9mZmljZSBTdGFuZGFyZCBMaWNlbnNlIEdyYW50CisKK1lPVSBSRUFMTFkgV0FOVCBUTyBSRUFEIFRISVMsIEVTUEVDSUFMTFkgVEhFIFBBUlQgQUJPVVQgVEhFIE1BTkRBVE9SWSBDQVIgV0FTSAorRk9SIENPREVXRUFWRVJTIEVNUExPWUVFUy4uLgorCitJZiB5b3UgZG9uJ3QgbGlrZSB0aGlzIGxpY2Vuc2UgZ3JhbnQ6CisKKyAgIGEuIExldCB1cyBrbm93LCB3ZSdkIGFwcHJlY2lhdGUgdGhlIGZlZWRiYWNrLgorCisgICBiLiBTdG9wIHJpZ2h0IG5vdywgYW5kIGFzayBmb3IgYSByZWZ1bmQuIFdlJ2xsIGNoZWVyZnVsbHkgZG8gc28uCisKKworVGhlIG1haW4gdGhpbmcgd2Ugd2FudCB5b3UgdG8ga25vdzoKKyAgICAgVGhpcyBpcyBhIGxpY2Vuc2UgZm9yIG9uZSB1c2VyLiBUaGUgbGljZW5zZSBpcyBub3QgbmVjZXNzYXJpbHkgZm9yIGEKK3NwZWNpZmljIHVzZXIsIG9yIGEgc3BlY2lmaWMgY29tcHV0ZXIsIGJ1dCBpdCBpcyBmb3Igb25lIHBlcnNvbiBhdCBhCit0aW1lLiBJZiB5b3UgbmVlZCB0byBzdXBwb3J0IG1vcmUgdGhhbiBvbmUgcGVyc29uLCBwbGVhc2UgY29udGFjdCB1cworZm9yIHZvbHVtZSBwcmljaW5nIGFuZCBzaXRlIGxpY2Vuc2luZy4gIFdlIGRvIG9mZmVyIGVkdWNhdGlvbmFsCitkaXNjb3VudHMuCisKKwwKKyAgICAtLS0tLS0tLS0tLS0tLS0tPCBTdGFydCBvZiBGb3JtYWwgTGljZW5zZSBHcmFudCA+LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgMS4gTGljZW5zZS4gVGhlIHNvZnR3YXJlIGFjY29tcGFueWluZyB0aGlzIExpY2Vuc2UgKGhlcmVpbmFmdGVyICJTb2Z0d2FyZSIpLAorICAgICAgcmVnYXJkbGVzcyBvZiB0aGUgbWVkaWEgb24gd2hpY2ggaXQgaXMgZGlzdHJpYnV0ZWQsIGFyZSBsaWNlbnNlZCB0byB5b3UKKyAgICAgIGJ5IENvZGVXZWF2ZXJzICgiVkVORE9SIikuIFlvdSBvd24gdGhlIG1lZGl1bSBvbiB3aGljaCB0aGUgU29mdHdhcmUgaXMKKyAgICAgIHJlY29yZGVkLCBidXQgVkVORE9SIGFuZCBWRU5ET1IncyBMaWNlbnNvcnMgKHJlZmVycmVkIHRvIGNvbGxlY3RpdmVseSBhcworICAgICAgIlZFTkRPUiIpIHJldGFpbiB0aXRsZSB0byB0aGUgU29mdHdhcmUgYW5kIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbi4gWW91CisgICAgICBtYXk6CisKKyAgICAgICAgIGEuIHJ1biB0aGUgU29mdHdhcmUgb24gYW55IGNvbXB1dGVyLCBzbyBsb25nIGFzIG5vIG1vcmUgdGhhbiBvbmUKKyAgICAgICAgICAgIHBlcnNvbiBwZXIgbGljZW5zZSBpcyBldmVyIHVzaW5nIHRoZSBTb2Z0d2FyZSBhdCBhbnkgb25lIHRpbWUuCisKKyAgICAgICAgIGIuIHRyYW5zZmVyIGFsbCB5b3VyIGxpY2Vuc2UgcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSwgdGhlIGJhY2t1cCBjb3B5CisgICAgICAgICAgICBvZiB0aGUgU29mdHdhcmUsIHRoZSByZWxhdGVkIGRvY3VtZW50YXRpb24gYW5kIGEgY29weSBvZiB0aGlzCisgICAgICAgICAgICBMaWNlbnNlIHRvIGFub3RoZXIgcGFydHksIHByb3ZpZGVkIHRoZSBvdGhlciBwYXJ0eSByZWFkcyBhbmQgYWdyZWVzCisgICAgICAgICAgICB0byBhY2NlcHQgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4KKworICAgMi4gRnJlZSBTb2Z0d2FyZS4gVGhlIFNvZnR3YXJlIGNvbnRhaW5lZCBpbiB0aGlzIHByb2R1Y3QgaW5jbHVkZXMgc29tZQorICAgICAgY29tcG9uZW50cyBvZiBGcmVlIFNvZnR3YXJlLCBpbmNsdWRpbmcgc29mdHdhcmUgZnJvbSB0aGUgV2luZSBQcm9qZWN0LAorICAgICAgVGNsLCBUaywgaVRjbCwgYW5kIHRoZSBMb2tpIFNvZnR3YXJlIFNldHVwIHNvZnR3YXJlLgorCisgICAgICBUaGUgV2luZSBwcm9qZWN0IGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIFB1YmxpYworICAgICAgTGljZW5zZSwgd2hpY2ggaXMgaW5jbHVkZWQgYmVsb3cgYXMgQXBwZW5kaXggQS4gVGhlIGJlc3Qgc291cmNlIGZvciB0aGUKKyAgICAgIFdpbmUgc291cmNlIGNvZGUgaXMgdGhlIG1haW4gV2luZSB3ZWIgcGFnZSBhdCBodHRwOi8vd3d3LndpbmVocS5jb20uCisKKyAgICAgIFRjbC9Uay9hbmQgaVRjbCBhcmUgbGljZW5zZWQgdW5kZXIgYSAnQlNELXN0eWxlJyBsaWNlbnNlLCB3aGljaCBpcworICAgICAgaW5jbHVkZWQgYmVsb3cgYXMgQXBwZW5kaXggQi4KKworICAgICAgVGhlIExva2kgU2V0dXAgc29mdHdhcmUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbAorICAgICAgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMi4gQSBjb3B5IG9mIHRoaXMgbGljZW5zZSBpcyBwcm92aWRlZCB3aXRoIHRoaXMKKyAgICAgIGRpc3RyaWJ1dGlvbiBhcyB0aGUgZmlsZSBHUExWMi4gQWxsIGNoYW5nZXMgdG8gdGhlIExva2kgU2V0dXAgc29mdHdhcmUKKyAgICAgIGhhdmUgYmVlbiBzdWJtaXR0ZWQgYmFjayB0byBMb2tpICh3d3cubG9raWdhbWVzLmNvbSkuIFdpdGggdGhlIGRlbWlzZSBvZgorICAgICAgTG9raSwgdGhlIGJlc3Qgc291cmNlIGZvciB0aGlzIHNvdXJjZSBjb2RlIGlzIG5vdyB0aGUgZm9sbG93aW5nIHdlYiBzaXRlOgorICAgICAgd3d3LmljY3VsdXMub3JnLgorCisgICAgICBXZSBoYXZlIG1hZGUgbm8gY2hhbmdlcyB0byB0aGUgVGNsL1RrLCBhbmQgaVRjbCBzb2Z0d2FyZSwgYW5kIHdlIHN1Z2dlc3QKKyAgICAgIHRoYXQgaW5kaXZpZHVhbHMgd2lzaGluZyB0byBvYnRhaW4gdGhpcyBzb2Z0d2FyZSBjb250YWN0IHRoZSBzcG9uc29ycyBvZgorICAgICAgdGhvc2Ugc29mdHdhcmUgcHJvamVjdHMgZGlyZWN0bHkuIFRoZSB3ZWIgc2l0ZSBmb3IgdGhpcyBwcm9qZWN0IGlzCisgICAgICB3d3cudGNsLnRrLgorCisgICAgICBXZSBpbmNsdWRlIHNvdXJjZSBjb2RlIHdpdGggZWFjaCBDRCBwdXJjaGFzZSBvZiBDcm9zc092ZXIgT2ZmaWNlLiBDdXJyZW50CisgICAgICBzb3VyY2UgY29kZSBmb3IgRnJlZSBTb2Z0d2FyZSBjb250YWluZWQgd2l0aGluIENyb3NzT3ZlciBwcm9kdWN0cyBpcyBhbHNvCisgICAgICBnZW5lcmFsbHkgYXZhaWxhYmxlIGF0IG91ciB3ZWIgc2l0ZSwgd3d3LmNvZGV3ZWF2ZXJzLmNvbS4gSG93ZXZlciwKKyAgICAgIGluZGl2aWR1YWxzIHdpc2hpbmcgdG8gb2J0YWluIHNvdXJjZSBkaXJlY3RseSBmcm9tIHVzIHdpbGwgYmUgY2hlZXJmdWxseQorICAgICAgcHJvdmlkZWQgd2l0aCBhIGNvcHkgb2YgYW55IEZyZWUgU29mdHdhcmUgc291cmNlIHVwb24gcmVxdWVzdC4gV2UgcmVzZXJ2ZQorICAgICAgdGhlIHJpZ2h0IHRvIGNoYXJnZSBhIG5vbWluYWwgcHJvY2Vzc2luZyBmZWUgZm9yIHRyYW5zbWlzc2lvbiBvZiB0aGUKKyAgICAgIHNvdXJjZSBjb2RlLiBTZW5kIHN1Y2ggcmVxdWVzdHMgdG8gaW5mb0Bjb2Rld2VhdmVycy5jb20uCisKKyAgICAgIENvZGVXZWF2ZXJzIHN0cm9uZ2x5IGJlbGlldmVzIGluIHRoZSBGcmVlIFNvZnR3YXJlIG1vdmVtZW50LiBXZSBiZWxpZXZlCisgICAgICB0aGF0IHRoZSBzcGlyaXQgb2YgdGhpcyBtb3ZlbWVudCBtYWtlcyBpdCBpbXBvcnRhbnQgZm9yIHlvdSB0byBiZSBhYmxlIHRvCisgICAgICBvYnRhaW4gdGhlc2UgY29tcG9uZW50cyBmb3IgeW91cnNlbGYsIG1ha2UgY2hhbmdlcywgYW5kIHRoZW4gdXNlIHRob3NlCisgICAgICBjaGFuZ2VzIHdpdGggb3VyIFNvZnR3YXJlLiBUbyB0aGF0IGVuZCwgeW91IGFyZSBleHBsaWNpdGx5IGdyYW50ZWQKKyAgICAgIGxpY2Vuc2UgdG8gYnVpbGQgYWx0ZXJuYXRlIHZlcnNpb25zIG9mIHRoZSBXaW5lIHNvZnR3YXJlIGZvciB1c2UgaW4KKyAgICAgIGNvbmp1bmN0aW9uIHdpdGggdGhlIFNvZnR3YXJlLgorCisgICAgICBJTiBOTyBXQVkgSVMgVEhJUyBMSUNFTlNFIEdSQU5UIElOVEVOREVEIFRPIFNVUEVSQ0VERSBUSEUgTElDRU5TRQorICAgICAgQUdSRUVNRU5UUyBPRiBBTlkgRlJFRSBTT0ZUV0FSRSBDT01QT05FTlRTIFRIQVQgQVJFIERJU1RSSUJVVEVEIElOCisgICAgICBDT05KVU5DVElPTiBXSVRIIFRIRSBTT0ZUV0FSRS4KKworICAgMy4gUmVzdHJpY3Rpb25zLiBUaGUgU29mdHdhcmUgY29udGFpbnMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwsIHRyYWRlIHNlY3JldHMKKyAgICAgIGFuZCBvdGhlciBwcm9wcmlldGFyeSBtYXRlcmlhbC4gSW4gb3JkZXIgdG8gcHJvdGVjdCB0aGVtLCBhbmQgZXhjZXB0IGFzCisgICAgICBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsZWdpc2xhdGlvbiBvciBieSB0aGUgRnJlZSBTb2Z0d2FyZSBsaWNlbnNlcworICAgICAgZGV0YWlsZWQgaW4gU2VjdGlvbiAyLCB5b3UgbWF5IG5vdDoKKworICAgICAgICAgYS4gZGVjb21waWxlLCByZXZlcnNlIGVuZ2luZWVyLCBkaXNhc3NlbWJsZSBvciBvdGhlcndpc2UgcmVkdWNlIHRoZQorICAgICAgICAgICAgU29mdHdhcmUgdG8gYSBodW1hbi1wZXJjZWl2YWJsZSBmb3JtCisKKyAgICAgICAgIGIuIHJlbnQsIGxlbmQsIGxvYW4sIGRpc3RyaWJ1dGUgb3IgY3JlYXRlIGRlcml2YXRpdmUgd29ya3MgYmFzZWQgdXBvbgorICAgICAgICAgICAgdGhlIFNvZnR3YXJlIGluIHdob2xlIG9yIGluIHBhcnQuCisKKworICAgNC4gVGVybS4gVGhpcyBMaWNlbnNlIGlzIGdyYW50ZWQgdG8geW91IGltbWVkaWF0ZWx5IHVwb24gcHVyY2hhc2Ugb2YgYQorICAgICAgbGljZW5zZSBmcm9tIENvZGVXZWF2ZXJzLCBvciBvdGhlciByZWxhdGVkIHRoaXJkIHBhcnR5LgorCisgICAgICBUaGlzIExpY2Vuc2UgaXMgZWZmZWN0aXZlIHVudGlsIHRlcm1pbmF0ZWQuIFlvdSBtYXkgdGVybWluYXRlIHRoaXMKKyAgICAgIExpY2Vuc2UgYXQgYW55IHRpbWUgYnkgZGVzdHJveWluZyB0aGUgU29mdHdhcmUsIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBhbmQKKyAgICAgIGFsbCBjb3BpZXMgdGhlcmVvZi4KKworICAgICAgVGhpcyBMaWNlbnNlIHdpbGwgdGVybWluYXRlIGltbWVkaWF0ZWx5IHdpdGhvdXQgbm90aWNlIGZyb20gVkVORE9SIGlmOgorCisgICAgICAgICBhLiB5b3UgdXNlIHRoZSBTb2Z0d2FyZSBpbiBhIGZhc2hpb24gdGhhdCBleGNlZWRzIHRoZSByaWdodHMgZ3JhbnRlZAorICAgICAgICAgICAgdG8geW91IGJ5IHRoaXMgbGljZW5zZSwgT1IKKworICAgICAgICAgYi4geW91IGZhaWwgdG8gY29uY2x1ZGUgdGhlIHB1cmNoYXNlIHRyYW5zYWN0aW9uLCBPUgorCisgICAgICAgICBjLiB5b3UgcmVxdWVzdCBhIHJlZnVuZC4KKworCisgICAgICBJZiB0aGUgU29mdHdhcmUgd2FzIGdpdmVuIHRvIHlvdSBmb3IgcHVycG9zZXMgb2YgZXZhbHVhdGlvbiwgdGhlbiB0aGlzCisgICAgICBMaWNlbnNlIHdpbGwgdGVybWluYXRlIGF0IHRoZSBlbmQgb2YgdGhlIHNwZWNpZmllZCBldmFsdWF0aW9uIHBlcmlvZCwKKyAgICAgIHR5cGljYWxseSAzMCBkYXlzLgorCisgICAgICBVcG9uIHRlcm1pbmF0aW9uIHlvdSBtdXN0IGRlc3Ryb3kgdGhlIFNvZnR3YXJlLCByZWxhdGVkIGRvY3VtZW50YXRpb24gYW5kCisgICAgICBhbGwgY29waWVzIHRoZXJlb2YuCisKKyAgIDUuIEV4cG9ydCBMYXcgQXNzdXJhbmNlLiBZb3UgYWdyZWUgYW5kIGNlcnRpZnkgdGhhdCBuZWl0aGVyIHRoZSBTb2Z0d2FyZSBub3IKKyAgICAgIGFueSBvdGhlciB0ZWNobmljYWwgZGF0YSByZWNlaXZlZCBmcm9tIFZFTkRPUiwgbm9yIHRoZSBkaXJlY3QgcHJvZHVjdAorICAgICAgdGhlcmVvZiwgd2lsbCBiZSBleHBvcnRlZCBvdXRzaWRlIHRoZSBVbml0ZWQgU3RhdGVzIGV4Y2VwdCBhcyBhdXRob3JpemVkCisgICAgICBhbmQgYXMgcGVybWl0dGVkIGJ5IHRoZSBsYXdzIGFuZCByZWd1bGF0aW9ucyBvZiB0aGUgVW5pdGVkIFN0YXRlcy4gSWYgdGhlCisgICAgICBTb2Z0d2FyZSBoYXMgYmVlbiByaWdodGZ1bGx5IG9idGFpbmVkIGJ5IHlvdSBvdXRzaWRlIG9mIHRoZSBVbml0ZWQKKyAgICAgIFN0YXRlcywgeW91IGFncmVlIHRoYXQgeW91IHdpbGwgbm90IHJlZXhwb3J0IHRoZSBTb2Z0d2FyZSBub3IgYW55IG90aGVyCisgICAgICB0ZWNobmljYWwgZGF0YSByZWNlaXZlZCBmcm9tIFZFTkRPUiwgbm9yIHRoZSBkaXJlY3QgcHJvZHVjdCB0aGVyZW9mLAorICAgICAgZXhjZXB0IGFzIHBlcm1pdHRlZCBieSB0aGUgbGF3cyBhbmQgcmVndWxhdGlvbnMgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgYW5kCisgICAgICB0aGUgbGF3cyBhbmQgcmVndWxhdGlvbnMgb2YgdGhlIGp1cmlzZGljdGlvbiBpbiB3aGljaCB5b3Ugb2J0YWluZWQgdGhlCisgICAgICBTb2Z0d2FyZS4KKworICAgNi4gR292ZXJubWVudCBFbmQgVXNlcnMuIElmIHlvdSBhcmUgYWNxdWlyaW5nIHRoZSBTb2Z0d2FyZSBvbiBiZWhhbGYgb2YgYW55CisgICAgICB1bml0IG9yIGFnZW5jeSBvZiB0aGUgVW5pdGVkIFN0YXRlcyBHb3Zlcm5tZW50LCB0aGUgZm9sbG93aW5nIHByb3Zpc2lvbnMKKyAgICAgIGFwcGx5LiBUaGUgR292ZXJubWVudCBhZ3JlZXM6CisKKyAgICAgICAgIGEuIGlmIHRoZSBTb2Z0d2FyZSBpcyBzdXBwbGllZCB0byB0aGUgRGVwYXJ0bWVudCBvZiBEZWZlbnNlIChEb0QpLCB0aGUKKyAgICAgICAgICAgIFNvZnR3YXJlIGlzIGNsYXNzaWZpZWQgYXMgIkNvbW1lcmNpYWwgQ29tcHV0ZXIgU29mdHdhcmUiIGFuZCB0aGUKKyAgICAgICAgICAgIEdvdmVybm1lbnQgaXMgYWNxdWlyaW5nIG9ubHkgInJlc3RyaWN0ZWQgcmlnaHRzIiBpbiB0aGUgU29mdHdhcmUKKyAgICAgICAgICAgIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbiBDbGF1c2UgMjUyLjIyNy0KKyAgICAgICAgICAgIDcwMTMoYykoMSkgb2YgdGhlIERGQVJTOyBhbmQKKworICAgICAgICAgYi4gaWYgdGhlIFNvZnR3YXJlIGlzIHN1cHBsaWVkIHRvIGFueSB1bml0IG9yIGFnZW5jeSBvZiB0aGUgVW5pdGVkCisgICAgICAgICAgICBTdGF0ZXMgR292ZXJubWVudCBvdGhlciB0aGFuIERvRCwgdGhlIEdvdmVybm1lbnQncyByaWdodHMgaW4gdGhlCisgICAgICAgICAgICBTb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gd2lsbCBiZSBhcyBkZWZpbmVkIGluIENsYXVzZSA1Mi4yMjctCisgICAgICAgICAgICAxOShjKSgyKSBvZiB0aGUgRkFSIG9yLCBpbiB0aGUgY2FzZSBvZiBOQVNBLCBpbiBDbGF1c2UgMTgtNTIuMjI3LTg2CisgICAgICAgICAgICAoZCkgb2YgdGhlIE5BU0EgU3VwcGxlbWVudCB0byB0aGUgRkFSLgorCisKKyAgIDcuIExpbWl0ZWQgV2FycmFudHkgb24gTWVkaWEuIFZFTkRPUiB3YXJyYW50cyB0aGUgdGFuZ2libGUgbWVkaWEgb24gd2hpY2gKKyAgICAgIHRoZSBTb2Z0d2FyZSBpcyByZWNvcmRlZCB0byBiZSBmcmVlIGZyb20gZGVmZWN0cyBpbiBtYXRlcmlhbHMgYW5kCisgICAgICB3b3JrbWFuc2hpcCB1bmRlciBub3JtYWwgdXNlIGZvciBhIHBlcmlvZCBvZiBuaW5ldHkgKDkwKSBkYXlzIGZyb20gdGhlCisgICAgICBkYXRlIG9mIHB1cmNoYXNlIGFzIGV2aWRlbmNlZCBieSBhIGNvcHkgb2YgdGhlIHJlY2VpcHQuIFZFTkRPUidzIGVudGlyZQorICAgICAgbGlhYmlsaXR5IGFuZCB5b3VyIGV4Y2x1c2l2ZSByZW1lZHkgd2lsbCBiZSByZXBsYWNlbWVudCBvZiB0aGUgbWVkaWEgbm90CisgICAgICBtZWV0aW5nIFZFTkRPUidzIGxpbWl0ZWQgd2FycmFudHkgYW5kIHdoaWNoIGlzIHJldHVybmVkIHRvIFZFTkRPUiBvciBhbgorICAgICAgVkVORE9SIGF1dGhvcml6ZWQgcmVwcmVzZW50YXRpdmUgd2l0aCBhIGNvcHkgb2YgdGhlIHJlY2VpcHQuIFZFTkRPUiB3aWxsCisgICAgICBoYXZlIG5vIHJlc3BvbnNpYmlsaXR5IHRvIHJlcGxhY2UgYW4gbWVkaWEgZGFtYWdlZCBieSBhY2NpZGVudCwgYWJ1c2Ugb3IKKyAgICAgIG1pc2FwcGxpY2F0aW9uLiBBTlkgSU1QTElFRCBXQVJSQU5USUVTIE9OIFRIRSBUQU5HSUJMRSBNRURJQSwgSU5DTFVESU5HCisgICAgICBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgICAgICBQVVJQT1NFLCBBUkUgTElNSVRFRCBJTiBEVVJBVElPTiBUTyBOSU5FVFkgKDkwKSBEQVlTIEZST00gVEhFIERBVEUgT0YKKyAgICAgIERFTElWRVJZLiBUSElTIFdBUlJBTlRZIEdJVkVTIFlPVSBTUEVDSUZJQyBMRUdBTCBSSUdIVFMsIEFORCBZT1UgTUFZIEFMU08KKyAgICAgIEhBVkUgT1RIRVIgUklHSFRTIFdISUNIIFZBUlkgQlkgSlVSSVNESUNUSU9OLgorCisgICA4LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5IG9uIFNvZnR3YXJlLiBZb3UgZXhwcmVzc2x5IGFja25vd2xlZGdlIGFuZCBhZ3JlZQorICAgICAgdGhhdCB1c2Ugb2YgdGhlIFNvZnR3YXJlIGlzIGF0IHlvdXIgc29sZSByaXNrLiBUaGUgU29mdHdhcmUgYW5kIHJlbGF0ZWQKKyAgICAgIGRvY3VtZW50YXRpb24gYXJlIHByb3ZpZGVkICJBUyBJUyIgYW5kIHdpdGhvdXQgd2FycmFudHkgb2YgYW55IGtpbmQgYW5kCisgICAgICBWRU5ET1IgRVhQUkVTU0xZIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUywgRVhQUkVTUyBBTkQgSU1QTElFRCwKKyAgICAgIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQorICAgICAgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBWRU5ET1IgRE9FUyBOT1QgV0FSUkFOVCBUSEFUIFRIRQorICAgICAgRlVOQ1RJT05TIENPTlRBSU5FRCBJTiBUSEUgU09GVFdBUkUgV0lMTCBNRUVUIFlPVVIgUkVRVUlSRU1FTlRTLCBPUiBUSEFUCisgICAgICBUSEUgT1BFUkFUSU9OIE9GIFRIRSBTT0ZUV0FSRSBXSUxMIEJFIFVOSU5URVJSVVBURUQgT1IgRVJST1ItRlJFRSwgT1IKKyAgICAgIFRIQVQgREVGRUNUUyBJTiBUSEUgU09GVFdBUkUgV0lMTCBCRSBDT1JSRUNURUQuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUKKyAgICAgIFJFU1VMVFMgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBTT0ZUV0FSRSBJUyBBU1NVTUVEIEJZIFlPVS4gRlVSVEhFUk1PUkUsCisgICAgICBWRU5ET1IgRE9FUyBOT1QgV0FSUkFOVCBPUiBNQUtFIEFOWSBSRVBSRVNFTlRBVElPTlMgUkVHQVJESU5HIFRIRSBVU0UgT1IKKyAgICAgIFRIRSBSRVNVTFRTIE9GIFRIRSBVU0UgT0YgVEhFIFNPRlRXQVJFIE9SIFJFTEFURUQgRE9DVU1FTlRBVElPTiBJTiBURVJNUworICAgICAgT0YgVEhFSVIgQ09SUkVDVE5FU1MsIEFDQ1VSQUNZLCBSRUxJQUJJTElUWSwgQ1VSUkVOVE5FU1MsIE9SIE9USEVSV0lTRS4KKyAgICAgIE5PIE9SQUwgT1IgV1JJVFRFTiBJTkZPUk1BVElPTiBPUiBBRFZJQ0UgR0lWRU4gQlkgVkVORE9SIE9SIFZFTkRPUidTCisgICAgICBBVVRIT1JJWkVEIFJFUFJFU0VOVEFUSVZFIFNIQUxMIENSRUFURSBBIFdBUlJBTlRZIE9SIElOIEFOWSBXQVkgSU5DUkVBU0UKKyAgICAgIFRIRSBTQ09QRSBPRiBUSElTIFdBUlJBTlRZLiBTSE9VTEQgVEhFIFNPRlRXQVJFIFBST1ZFIERFRkVDVElWRSwgWU9VIChBTkQKKyAgICAgIE5PVCBWRU5ET1IgT1IgVkVORE9SJ1MgQVVUSE9SSVpFRCBSRVBSRVNFTlRBVElWRSkgQVNTVU1FIFRIRSBFTlRJUkUgQ09TVAorICAgICAgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBTT01FIEpVUklTRElDVElPTlMgRE8KKyAgICAgIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gVEhFIEFCT1ZFIEVYQ0xVU0lPTiBNQVkKKyAgICAgIE5PVCBBUFBMWSBUTyBZT1UuCisKKyAgIDkuIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIElOQ0xVRElORyBORUdMSUdFTkNFLAorICAgICAgU0hBTEwgVkVORE9SLCBPUiBJVFMgRElSRUNUT1JTLCBPRkZJQ0VSUywgRU1QTE9ZRUVTIE9SIEFHRU5UUywgQkUgTElBQkxFCisgICAgICBUTyBZT1UgRk9SIEFOWSBJTkNJREVOVEFMLCBJTkRJUkVDVCwgU1BFQ0lBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAgICAgIChJTkNMVURJTkcgREFNQUdFUyBGT1IgTE9TUyBPRiBCVVNJTkVTUyBQUk9GSVRTLCBCVVNJTkVTUyBJTlRFUlJVUFRJT04sCisgICAgICBMT1NTIE9GIEJVU0lORVNTIElORk9STUFUSU9OLCBBTkQgVEhFIExJS0UpIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UsCisgICAgICBNSVNVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgU09GVFdBUkUgT1IgUkVMQVRFRCBET0NVTUVOVEFUSU9OLCBFVkVOIElGCisgICAgICBWRU5ET1IgT1IgVkVORE9SJ1MgQVVUSE9SSVpFRCBSRVBSRVNFTlRBVElWRSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorICAgICAgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRQorICAgICAgTElNSVRBVElPTiBPUiBFWENMVVNJT04gT0YgTElBQklMSVRZIEZPUiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwKKyAgICAgIERBTUFHRVMsIFNPIFRIRSBBQk9WRSBMSU1JVEFUSU9OIE9SIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4gSW4gbm8KKyAgICAgIGV2ZW50IHNoYWxsIFZFTkRPUidzIHRvdGFsIGxpYWJpbGl0eSB0byB5b3UgZm9yIGFsbCBkYW1hZ2VzLCBsb3NzZXMsIGFuZAorICAgICAgY2F1c2VzIG9mIGFjdGlvbiAod2hldGhlciBpbiBjb250cmFjdCwgdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpIG9yCisgICAgICBvdGhlcndpc2UpIGV4Y2VlZCB0aGUgYW1vdW50IHBhaWQgYnkgeW91IGZvciB0aGUgU29mdHdhcmUuCisKKyAgMTAuIENvbnRyb2xsaW5nIExhdyBhbmQgU2V2ZXJhYmlsaXR5LiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgYW5kCisgICAgICBjb25zdHJ1ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIGFuZCB0aGUgU3RhdGUKKyAgICAgIG9mIE1pbm5lc290YSwgYXMgYXBwbGllZCB0byBhZ3JlZW1lbnRzIGVudGVyZWQgaW50byBhbmQgdG8gYmUgcGVyZm9ybWVkCisgICAgICBlbnRpcmVseSB3aXRoaW4gTWlubmVzb3RhIGJldHdlZW4gTWlubmVzb3RhIHJlc2lkZW50cy4gSWYgZm9yIGFueSByZWFzb24KKyAgICAgIGEgY291cnQgb2YgY29tcGV0ZW50IGp1cmlzZGljdGlvbiBmaW5kcyBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBvcgorICAgICAgcG9ydGlvbiB0aGVyZW9mLCB0byBiZSB1bmVuZm9yY2VhYmxlLCB0aGF0IHByb3Zpc2lvbiBvZiB0aGUgTGljZW5zZSBzaGFsbAorICAgICAgYmUgZW5mb3JjZWQgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pc3NpYmxlIHNvIGFzIHRvIGVmZmVjdCB0aGUgaW50ZW50CisgICAgICBvZiB0aGUgcGFydGllcywgYW5kIHRoZSByZW1haW5kZXIgb2YgdGhpcyBMaWNlbnNlIHNoYWxsIGNvbnRpbnVlIGluIGZ1bGwKKyAgICAgIGZvcmNlIGFuZCBlZmZlY3QuCisKKworDAorQXBwZW5kaXggQSAtIFdpbmUgTGljZW5zZQorCQkgIEdOVSBMRVNTRVIgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgICAgVmVyc2lvbiAyLjEsIEZlYnJ1YXJ5IDE5OTkKKworIENvcHlyaWdodCAoQykgMTk5MSwgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICAgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCitbVGhpcyBpcyB0aGUgZmlyc3QgcmVsZWFzZWQgdmVyc2lvbiBvZiB0aGUgTGVzc2VyIEdQTC4gIEl0IGFsc28gY291bnRzCisgYXMgdGhlIHN1Y2Nlc3NvciBvZiB0aGUgR05VIExpYnJhcnkgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgaGVuY2UKKyB0aGUgdmVyc2lvbiBudW1iZXIgMi4xLl0KKworCQkJICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2VzIGFyZSBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UKK2ZyZWUgc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4KKworICBUaGlzIGxpY2Vuc2UsIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXBwbGllcyB0byBzb21lCitzcGVjaWFsbHkgZGVzaWduYXRlZCBzb2Z0d2FyZSBwYWNrYWdlcy0tdHlwaWNhbGx5IGxpYnJhcmllcy0tb2YgdGhlCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIG90aGVyIGF1dGhvcnMgd2hvIGRlY2lkZSB0byB1c2UgaXQuICBZb3UKK2NhbiB1c2UgaXQgdG9vLCBidXQgd2Ugc3VnZ2VzdCB5b3UgZmlyc3QgdGhpbmsgY2FyZWZ1bGx5IGFib3V0IHdoZXRoZXIKK3RoaXMgbGljZW5zZSBvciB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyB0aGUgYmV0dGVyCitzdHJhdGVneSB0byB1c2UgaW4gYW55IHBhcnRpY3VsYXIgY2FzZSwgYmFzZWQgb24gdGhlIGV4cGxhbmF0aW9ucyBiZWxvdy4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSBvZiB1c2UsCitub3QgcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0Cit5b3UgaGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlCitmb3IgdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKTsgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0CitpdCBpZiB5b3Ugd2FudCBpdDsgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgYW5kIHVzZSBwaWVjZXMgb2YKK2l0IGluIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3UgYXJlIGluZm9ybWVkIHRoYXQgeW91IGNhbiBkbwordGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKK2Rpc3RyaWJ1dG9ycyB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlc2UKK3JpZ2h0cy4gIFRoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvcgoreW91IGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnksIHdoZXRoZXIgZ3JhdGlzCitvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdCB3ZSBnYXZlCit5b3UuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlCitjb2RlLiAgSWYgeW91IGxpbmsgb3RoZXIgY29kZSB3aXRoIHRoZSBsaWJyYXJ5LCB5b3UgbXVzdCBwcm92aWRlCitjb21wbGV0ZSBvYmplY3QgZmlsZXMgdG8gdGhlIHJlY2lwaWVudHMsIHNvIHRoYXQgdGhleSBjYW4gcmVsaW5rIHRoZW0KK3dpdGggdGhlIGxpYnJhcnkgYWZ0ZXIgbWFraW5nIGNoYW5nZXMgdG8gdGhlIGxpYnJhcnkgYW5kIHJlY29tcGlsaW5nCitpdC4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyIHJpZ2h0cy4KKworICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggYSB0d28tc3RlcCBtZXRob2Q6ICgxKSB3ZSBjb3B5cmlnaHQgdGhlCitsaWJyYXJ5LCBhbmQgKDIpIHdlIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2UsIHdoaWNoIGdpdmVzIHlvdSBsZWdhbAorcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIGxpYnJhcnkuCisKKyAgVG8gcHJvdGVjdCBlYWNoIGRpc3RyaWJ1dG9yLCB3ZSB3YW50IHRvIG1ha2UgaXQgdmVyeSBjbGVhciB0aGF0Cit0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhlIGZyZWUgbGlicmFyeS4gIEFsc28sIGlmIHRoZSBsaWJyYXJ5IGlzCittb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgdGhlIHJlY2lwaWVudHMgc2hvdWxkIGtub3cKK3RoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCB2ZXJzaW9uLCBzbyB0aGF0IHRoZSBvcmlnaW5hbAorYXV0aG9yJ3MgcmVwdXRhdGlvbiB3aWxsIG5vdCBiZSBhZmZlY3RlZCBieSBwcm9ibGVtcyB0aGF0IG1pZ2h0IGJlCitpbnRyb2R1Y2VkIGJ5IG90aGVycy4KKwwKKyAgRmluYWxseSwgc29mdHdhcmUgcGF0ZW50cyBwb3NlIGEgY29uc3RhbnQgdGhyZWF0IHRvIHRoZSBleGlzdGVuY2Ugb2YKK2FueSBmcmVlIHByb2dyYW0uICBXZSB3aXNoIHRvIG1ha2Ugc3VyZSB0aGF0IGEgY29tcGFueSBjYW5ub3QKK2VmZmVjdGl2ZWx5IHJlc3RyaWN0IHRoZSB1c2VycyBvZiBhIGZyZWUgcHJvZ3JhbSBieSBvYnRhaW5pbmcgYQorcmVzdHJpY3RpdmUgbGljZW5zZSBmcm9tIGEgcGF0ZW50IGhvbGRlci4gIFRoZXJlZm9yZSwgd2UgaW5zaXN0IHRoYXQKK2FueSBwYXRlbnQgbGljZW5zZSBvYnRhaW5lZCBmb3IgYSB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IG11c3QgYmUKK2NvbnNpc3RlbnQgd2l0aCB0aGUgZnVsbCBmcmVlZG9tIG9mIHVzZSBzcGVjaWZpZWQgaW4gdGhpcyBsaWNlbnNlLgorCisgIE1vc3QgR05VIHNvZnR3YXJlLCBpbmNsdWRpbmcgc29tZSBsaWJyYXJpZXMsIGlzIGNvdmVyZWQgYnkgdGhlCitvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgbGljZW5zZSwgdGhlIEdOVSBMZXNzZXIKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFwcGxpZXMgdG8gY2VydGFpbiBkZXNpZ25hdGVkIGxpYnJhcmllcywgYW5kCitpcyBxdWl0ZSBkaWZmZXJlbnQgZnJvbSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFdlIHVzZQordGhpcyBsaWNlbnNlIGZvciBjZXJ0YWluIGxpYnJhcmllcyBpbiBvcmRlciB0byBwZXJtaXQgbGlua2luZyB0aG9zZQorbGlicmFyaWVzIGludG8gbm9uLWZyZWUgcHJvZ3JhbXMuCisKKyAgV2hlbiBhIHByb2dyYW0gaXMgbGlua2VkIHdpdGggYSBsaWJyYXJ5LCB3aGV0aGVyIHN0YXRpY2FsbHkgb3IgdXNpbmcKK2Egc2hhcmVkIGxpYnJhcnksIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgdHdvIGlzIGxlZ2FsbHkgc3BlYWtpbmcgYQorY29tYmluZWQgd29yaywgYSBkZXJpdmF0aXZlIG9mIHRoZSBvcmlnaW5hbCBsaWJyYXJ5LiAgVGhlIG9yZGluYXJ5CitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHRoZXJlZm9yZSBwZXJtaXRzIHN1Y2ggbGlua2luZyBvbmx5IGlmIHRoZQorZW50aXJlIGNvbWJpbmF0aW9uIGZpdHMgaXRzIGNyaXRlcmlhIG9mIGZyZWVkb20uICBUaGUgTGVzc2VyIEdlbmVyYWwKK1B1YmxpYyBMaWNlbnNlIHBlcm1pdHMgbW9yZSBsYXggY3JpdGVyaWEgZm9yIGxpbmtpbmcgb3RoZXIgY29kZSB3aXRoCit0aGUgbGlicmFyeS4KKworICBXZSBjYWxsIHRoaXMgbGljZW5zZSB0aGUgIkxlc3NlciIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBiZWNhdXNlIGl0Citkb2VzIExlc3MgdG8gcHJvdGVjdCB0aGUgdXNlcidzIGZyZWVkb20gdGhhbiB0aGUgb3JkaW5hcnkgR2VuZXJhbAorUHVibGljIExpY2Vuc2UuICBJdCBhbHNvIHByb3ZpZGVzIG90aGVyIGZyZWUgc29mdHdhcmUgZGV2ZWxvcGVycyBMZXNzCitvZiBhbiBhZHZhbnRhZ2Ugb3ZlciBjb21wZXRpbmcgbm9uLWZyZWUgcHJvZ3JhbXMuICBUaGVzZSBkaXNhZHZhbnRhZ2VzCithcmUgdGhlIHJlYXNvbiB3ZSB1c2UgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1hbnkKK2xpYnJhcmllcy4gIEhvd2V2ZXIsIHRoZSBMZXNzZXIgbGljZW5zZSBwcm92aWRlcyBhZHZhbnRhZ2VzIGluIGNlcnRhaW4KK3NwZWNpYWwgY2lyY3Vtc3RhbmNlcy4KKworICBGb3IgZXhhbXBsZSwgb24gcmFyZSBvY2Nhc2lvbnMsIHRoZXJlIG1heSBiZSBhIHNwZWNpYWwgbmVlZCB0bworZW5jb3VyYWdlIHRoZSB3aWRlc3QgcG9zc2libGUgdXNlIG9mIGEgY2VydGFpbiBsaWJyYXJ5LCBzbyB0aGF0IGl0IGJlY29tZXMKK2EgZGUtZmFjdG8gc3RhbmRhcmQuICBUbyBhY2hpZXZlIHRoaXMsIG5vbi1mcmVlIHByb2dyYW1zIG11c3QgYmUKK2FsbG93ZWQgdG8gdXNlIHRoZSBsaWJyYXJ5LiAgQSBtb3JlIGZyZXF1ZW50IGNhc2UgaXMgdGhhdCBhIGZyZWUKK2xpYnJhcnkgZG9lcyB0aGUgc2FtZSBqb2IgYXMgd2lkZWx5IHVzZWQgbm9uLWZyZWUgbGlicmFyaWVzLiAgSW4gdGhpcworY2FzZSwgdGhlcmUgaXMgbGl0dGxlIHRvIGdhaW4gYnkgbGltaXRpbmcgdGhlIGZyZWUgbGlicmFyeSB0byBmcmVlCitzb2Z0d2FyZSBvbmx5LCBzbyB3ZSB1c2UgdGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCisgIEluIG90aGVyIGNhc2VzLCBwZXJtaXNzaW9uIHRvIHVzZSBhIHBhcnRpY3VsYXIgbGlicmFyeSBpbiBub24tZnJlZQorcHJvZ3JhbXMgZW5hYmxlcyBhIGdyZWF0ZXIgbnVtYmVyIG9mIHBlb3BsZSB0byB1c2UgYSBsYXJnZSBib2R5IG9mCitmcmVlIHNvZnR3YXJlLiAgRm9yIGV4YW1wbGUsIHBlcm1pc3Npb24gdG8gdXNlIHRoZSBHTlUgQyBMaWJyYXJ5IGluCitub24tZnJlZSBwcm9ncmFtcyBlbmFibGVzIG1hbnkgbW9yZSBwZW9wbGUgdG8gdXNlIHRoZSB3aG9sZSBHTlUKK29wZXJhdGluZyBzeXN0ZW0sIGFzIHdlbGwgYXMgaXRzIHZhcmlhbnQsIHRoZSBHTlUvTGludXggb3BlcmF0aW5nCitzeXN0ZW0uCisKKyAgQWx0aG91Z2ggdGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIExlc3MgcHJvdGVjdGl2ZSBvZiB0aGUKK3VzZXJzJyBmcmVlZG9tLCBpdCBkb2VzIGVuc3VyZSB0aGF0IHRoZSB1c2VyIG9mIGEgcHJvZ3JhbSB0aGF0IGlzCitsaW5rZWQgd2l0aCB0aGUgTGlicmFyeSBoYXMgdGhlIGZyZWVkb20gYW5kIHRoZSB3aGVyZXdpdGhhbCB0byBydW4KK3RoYXQgcHJvZ3JhbSB1c2luZyBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIExpYnJhcnkuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuICBQYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYQorIndvcmsgYmFzZWQgb24gdGhlIGxpYnJhcnkiIGFuZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgbGlicmFyeSIuICBUaGUKK2Zvcm1lciBjb250YWlucyBjb2RlIGRlcml2ZWQgZnJvbSB0aGUgbGlicmFyeSwgd2hlcmVhcyB0aGUgbGF0dGVyIG11c3QKK2JlIGNvbWJpbmVkIHdpdGggdGhlIGxpYnJhcnkgaW4gb3JkZXIgdG8gcnVuLgorDAorCQkgIEdOVSBMRVNTRVIgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBhcHBsaWVzIHRvIGFueSBzb2Z0d2FyZSBsaWJyYXJ5IG9yIG90aGVyCitwcm9ncmFtIHdoaWNoIGNvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBvcgorb3RoZXIgYXV0aG9yaXplZCBwYXJ0eSBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZgordGhpcyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoYWxzbyBjYWxsZWQgInRoaXMgTGljZW5zZSIpLgorRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKKyAgQSAibGlicmFyeSIgbWVhbnMgYSBjb2xsZWN0aW9uIG9mIHNvZnR3YXJlIGZ1bmN0aW9ucyBhbmQvb3IgZGF0YQorcHJlcGFyZWQgc28gYXMgdG8gYmUgY29udmVuaWVudGx5IGxpbmtlZCB3aXRoIGFwcGxpY2F0aW9uIHByb2dyYW1zCisod2hpY2ggdXNlIHNvbWUgb2YgdGhvc2UgZnVuY3Rpb25zIGFuZCBkYXRhKSB0byBmb3JtIGV4ZWN1dGFibGVzLgorCisgIFRoZSAiTGlicmFyeSIsIGJlbG93LCByZWZlcnMgdG8gYW55IHN1Y2ggc29mdHdhcmUgbGlicmFyeSBvciB3b3JrCit3aGljaCBoYXMgYmVlbiBkaXN0cmlidXRlZCB1bmRlciB0aGVzZSB0ZXJtcy4gIEEgIndvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5IiBtZWFucyBlaXRoZXIgdGhlIExpYnJhcnkgb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlcgorY29weXJpZ2h0IGxhdzogdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBMaWJyYXJ5IG9yIGEKK3BvcnRpb24gb2YgaXQsIGVpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQKK3N0cmFpZ2h0Zm9yd2FyZGx5IGludG8gYW5vdGhlciBsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMKK2luY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbiB0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pCisKKyAgIlNvdXJjZSBjb2RlIiBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGEgbGlicmFyeSwgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMKK2FsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkCitpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24KK2FuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGxpYnJhcnkuCisKKyAgQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKK3J1bm5pbmcgYSBwcm9ncmFtIHVzaW5nIHRoZSBMaWJyYXJ5IGlzIG5vdCByZXN0cmljdGVkLCBhbmQgb3V0cHV0IGZyb20KK3N1Y2ggYSBwcm9ncmFtIGlzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQKK29uIHRoZSBMaWJyYXJ5IChpbmRlcGVuZGVudCBvZiB0aGUgdXNlIG9mIHRoZSBMaWJyYXJ5IGluIGEgdG9vbCBmb3IKK3dyaXRpbmcgaXQpLiAgV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBMaWJyYXJ5IGRvZXMKK2FuZCB3aGF0IHRoZSBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgTGlicmFyeSBkb2VzLgorICAKKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgTGlicmFyeSdzCitjb21wbGV0ZSBzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdAoreW91IGNvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4KK2FwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0CithbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueQord2FycmFudHk7IGFuZCBkaXN0cmlidXRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUKK0xpYnJhcnkuCisKKyAgWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwKK2FuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEKK2ZlZS4KKwwKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgTGlicmFyeSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgVGhlIG1vZGlmaWVkIHdvcmsgbXVzdCBpdHNlbGYgYmUgYSBzb2Z0d2FyZSBsaWJyYXJ5LgorCisgICAgYikgWW91IG11c3QgY2F1c2UgdGhlIGZpbGVzIG1vZGlmaWVkIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGMpIFlvdSBtdXN0IGNhdXNlIHRoZSB3aG9sZSBvZiB0aGUgd29yayB0byBiZSBsaWNlbnNlZCBhdCBubworICAgIGNoYXJnZSB0byBhbGwgdGhpcmQgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgZCkgSWYgYSBmYWNpbGl0eSBpbiB0aGUgbW9kaWZpZWQgTGlicmFyeSByZWZlcnMgdG8gYSBmdW5jdGlvbiBvciBhCisgICAgdGFibGUgb2YgZGF0YSB0byBiZSBzdXBwbGllZCBieSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtIHRoYXQgdXNlcworICAgIHRoZSBmYWNpbGl0eSwgb3RoZXIgdGhhbiBhcyBhbiBhcmd1bWVudCBwYXNzZWQgd2hlbiB0aGUgZmFjaWxpdHkKKyAgICBpcyBpbnZva2VkLCB0aGVuIHlvdSBtdXN0IG1ha2UgYSBnb29kIGZhaXRoIGVmZm9ydCB0byBlbnN1cmUgdGhhdCwKKyAgICBpbiB0aGUgZXZlbnQgYW4gYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IHN1Y2ggZnVuY3Rpb24gb3IKKyAgICB0YWJsZSwgdGhlIGZhY2lsaXR5IHN0aWxsIG9wZXJhdGVzLCBhbmQgcGVyZm9ybXMgd2hhdGV2ZXIgcGFydCBvZgorICAgIGl0cyBwdXJwb3NlIHJlbWFpbnMgbWVhbmluZ2Z1bC4KKworICAgIChGb3IgZXhhbXBsZSwgYSBmdW5jdGlvbiBpbiBhIGxpYnJhcnkgdG8gY29tcHV0ZSBzcXVhcmUgcm9vdHMgaGFzCisgICAgYSBwdXJwb3NlIHRoYXQgaXMgZW50aXJlbHkgd2VsbC1kZWZpbmVkIGluZGVwZW5kZW50IG9mIHRoZQorICAgIGFwcGxpY2F0aW9uLiAgVGhlcmVmb3JlLCBTdWJzZWN0aW9uIDJkIHJlcXVpcmVzIHRoYXQgYW55CisgICAgYXBwbGljYXRpb24tc3VwcGxpZWQgZnVuY3Rpb24gb3IgdGFibGUgdXNlZCBieSB0aGlzIGZ1bmN0aW9uIG11c3QKKyAgICBiZSBvcHRpb25hbDogaWYgdGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBpdCwgdGhlIHNxdWFyZQorICAgIHJvb3QgZnVuY3Rpb24gbXVzdCBzdGlsbCBjb21wdXRlIHNxdWFyZSByb290cy4pCisKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIExpYnJhcnksCithbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCitvbiB0aGUgTGlicmFyeSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCitlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUKK2l0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBMaWJyYXJ5Cit3aXRoIHRoZSBMaWJyYXJ5IChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgb3B0IHRvIGFwcGx5IHRoZSB0ZXJtcyBvZiB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlIHRvIGEgZ2l2ZW4gY29weSBvZiB0aGUgTGlicmFyeS4gIFRvIGRvCit0aGlzLCB5b3UgbXVzdCBhbHRlciBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UsIHNvCit0aGF0IHRoZXkgcmVmZXIgdG8gdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsCitpbnN0ZWFkIG9mIHRvIHRoaXMgTGljZW5zZS4gIChJZiBhIG5ld2VyIHZlcnNpb24gdGhhbiB2ZXJzaW9uIDIgb2YgdGhlCitvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBoYXMgYXBwZWFyZWQsIHRoZW4geW91IGNhbiBzcGVjaWZ5Cit0aGF0IHZlcnNpb24gaW5zdGVhZCBpZiB5b3Ugd2lzaC4pICBEbyBub3QgbWFrZSBhbnkgb3RoZXIgY2hhbmdlIGluCit0aGVzZSBub3RpY2VzLgorDAorICBPbmNlIHRoaXMgY2hhbmdlIGlzIG1hZGUgaW4gYSBnaXZlbiBjb3B5LCBpdCBpcyBpcnJldmVyc2libGUgZm9yCit0aGF0IGNvcHksIHNvIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIGFsbAorc3Vic2VxdWVudCBjb3BpZXMgYW5kIGRlcml2YXRpdmUgd29ya3MgbWFkZSBmcm9tIHRoYXQgY29weS4KKworICBUaGlzIG9wdGlvbiBpcyB1c2VmdWwgd2hlbiB5b3Ugd2lzaCB0byBjb3B5IHBhcnQgb2YgdGhlIGNvZGUgb2YKK3RoZSBMaWJyYXJ5IGludG8gYSBwcm9ncmFtIHRoYXQgaXMgbm90IGEgbGlicmFyeS4KKworICA0LiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgKG9yIGEgcG9ydGlvbiBvcgorZGVyaXZhdGl2ZSBvZiBpdCwgdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0KK3VuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFjY29tcGFueQoraXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlLCB3aGljaAorbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhCittZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2UuCisKKyAgSWYgZGlzdHJpYnV0aW9uIG9mIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkKK2Zyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlCitzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIHNhdGlzZmllcyB0aGUgcmVxdWlyZW1lbnQgdG8KK2Rpc3RyaWJ1dGUgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKK2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisKKyAgNS4gQSBwcm9ncmFtIHRoYXQgY29udGFpbnMgbm8gZGVyaXZhdGl2ZSBvZiBhbnkgcG9ydGlvbiBvZiB0aGUKK0xpYnJhcnksIGJ1dCBpcyBkZXNpZ25lZCB0byB3b3JrIHdpdGggdGhlIExpYnJhcnkgYnkgYmVpbmcgY29tcGlsZWQgb3IKK2xpbmtlZCB3aXRoIGl0LCBpcyBjYWxsZWQgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiLiAgU3VjaCBhCit3b3JrLCBpbiBpc29sYXRpb24sIGlzIG5vdCBhIGRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSwgYW5kCit0aGVyZWZvcmUgZmFsbHMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIEhvd2V2ZXIsIGxpbmtpbmcgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHdpdGggdGhlIExpYnJhcnkKK2NyZWF0ZXMgYW4gZXhlY3V0YWJsZSB0aGF0IGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgTGlicmFyeSAoYmVjYXVzZSBpdAorY29udGFpbnMgcG9ydGlvbnMgb2YgdGhlIExpYnJhcnkpLCByYXRoZXIgdGhhbiBhICJ3b3JrIHRoYXQgdXNlcyB0aGUKK2xpYnJhcnkiLiAgVGhlIGV4ZWN1dGFibGUgaXMgdGhlcmVmb3JlIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLgorU2VjdGlvbiA2IHN0YXRlcyB0ZXJtcyBmb3IgZGlzdHJpYnV0aW9uIG9mIHN1Y2ggZXhlY3V0YWJsZXMuCisKKyAgV2hlbiBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgdXNlcyBtYXRlcmlhbCBmcm9tIGEgaGVhZGVyIGZpbGUKK3RoYXQgaXMgcGFydCBvZiB0aGUgTGlicmFyeSwgdGhlIG9iamVjdCBjb2RlIGZvciB0aGUgd29yayBtYXkgYmUgYQorZGVyaXZhdGl2ZSB3b3JrIG9mIHRoZSBMaWJyYXJ5IGV2ZW4gdGhvdWdoIHRoZSBzb3VyY2UgY29kZSBpcyBub3QuCitXaGV0aGVyIHRoaXMgaXMgdHJ1ZSBpcyBlc3BlY2lhbGx5IHNpZ25pZmljYW50IGlmIHRoZSB3b3JrIGNhbiBiZQorbGlua2VkIHdpdGhvdXQgdGhlIExpYnJhcnksIG9yIGlmIHRoZSB3b3JrIGlzIGl0c2VsZiBhIGxpYnJhcnkuICBUaGUKK3RocmVzaG9sZCBmb3IgdGhpcyB0byBiZSB0cnVlIGlzIG5vdCBwcmVjaXNlbHkgZGVmaW5lZCBieSBsYXcuCisKKyAgSWYgc3VjaCBhbiBvYmplY3QgZmlsZSB1c2VzIG9ubHkgbnVtZXJpY2FsIHBhcmFtZXRlcnMsIGRhdGEKK3N0cnVjdHVyZSBsYXlvdXRzIGFuZCBhY2Nlc3NvcnMsIGFuZCBzbWFsbCBtYWNyb3MgYW5kIHNtYWxsIGlubGluZQorZnVuY3Rpb25zICh0ZW4gbGluZXMgb3IgbGVzcyBpbiBsZW5ndGgpLCB0aGVuIHRoZSB1c2Ugb2YgdGhlIG9iamVjdAorZmlsZSBpcyB1bnJlc3RyaWN0ZWQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBpcyBsZWdhbGx5IGEgZGVyaXZhdGl2ZQord29yay4gIChFeGVjdXRhYmxlcyBjb250YWluaW5nIHRoaXMgb2JqZWN0IGNvZGUgcGx1cyBwb3J0aW9ucyBvZiB0aGUKK0xpYnJhcnkgd2lsbCBzdGlsbCBmYWxsIHVuZGVyIFNlY3Rpb24gNi4pCisKKyAgT3RoZXJ3aXNlLCBpZiB0aGUgd29yayBpcyBhIGRlcml2YXRpdmUgb2YgdGhlIExpYnJhcnksIHlvdSBtYXkKK2Rpc3RyaWJ1dGUgdGhlIG9iamVjdCBjb2RlIGZvciB0aGUgd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiA2LgorQW55IGV4ZWN1dGFibGVzIGNvbnRhaW5pbmcgdGhhdCB3b3JrIGFsc28gZmFsbCB1bmRlciBTZWN0aW9uIDYsCit3aGV0aGVyIG9yIG5vdCB0aGV5IGFyZSBsaW5rZWQgZGlyZWN0bHkgd2l0aCB0aGUgTGlicmFyeSBpdHNlbGYuCisMCisgIDYuIEFzIGFuIGV4Y2VwdGlvbiB0byB0aGUgU2VjdGlvbnMgYWJvdmUsIHlvdSBtYXkgYWxzbyBjb21iaW5lIG9yCitsaW5rIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB3aXRoIHRoZSBMaWJyYXJ5IHRvIHByb2R1Y2UgYQord29yayBjb250YWluaW5nIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5LCBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsKK3VuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBwcm92aWRlZCB0aGF0IHRoZSB0ZXJtcyBwZXJtaXQKK21vZGlmaWNhdGlvbiBvZiB0aGUgd29yayBmb3IgdGhlIGN1c3RvbWVyJ3Mgb3duIHVzZSBhbmQgcmV2ZXJzZQorZW5naW5lZXJpbmcgZm9yIGRlYnVnZ2luZyBzdWNoIG1vZGlmaWNhdGlvbnMuCisKKyAgWW91IG11c3QgZ2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggZWFjaCBjb3B5IG9mIHRoZSB3b3JrIHRoYXQgdGhlCitMaWJyYXJ5IGlzIHVzZWQgaW4gaXQgYW5kIHRoYXQgdGhlIExpYnJhcnkgYW5kIGl0cyB1c2UgYXJlIGNvdmVyZWQgYnkKK3RoaXMgTGljZW5zZS4gIFlvdSBtdXN0IHN1cHBseSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiAgSWYgdGhlIHdvcmsKK2R1cmluZyBleGVjdXRpb24gZGlzcGxheXMgY29weXJpZ2h0IG5vdGljZXMsIHlvdSBtdXN0IGluY2x1ZGUgdGhlCitjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgTGlicmFyeSBhbW9uZyB0aGVtLCBhcyB3ZWxsIGFzIGEgcmVmZXJlbmNlCitkaXJlY3RpbmcgdGhlIHVzZXIgdG8gdGhlIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiAgQWxzbywgeW91IG11c3QgZG8gb25lCitvZiB0aGVzZSB0aGluZ3M6CisKKyAgICBhKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZworICAgIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUgZm9yIHRoZSBMaWJyYXJ5IGluY2x1ZGluZyB3aGF0ZXZlcgorICAgIGNoYW5nZXMgd2VyZSB1c2VkIGluIHRoZSB3b3JrICh3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyCisgICAgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSk7IGFuZCwgaWYgdGhlIHdvcmsgaXMgYW4gZXhlY3V0YWJsZSBsaW5rZWQKKyAgICB3aXRoIHRoZSBMaWJyYXJ5LCB3aXRoIHRoZSBjb21wbGV0ZSBtYWNoaW5lLXJlYWRhYmxlICJ3b3JrIHRoYXQKKyAgICB1c2VzIHRoZSBMaWJyYXJ5IiwgYXMgb2JqZWN0IGNvZGUgYW5kL29yIHNvdXJjZSBjb2RlLCBzbyB0aGF0IHRoZQorICAgIHVzZXIgY2FuIG1vZGlmeSB0aGUgTGlicmFyeSBhbmQgdGhlbiByZWxpbmsgdG8gcHJvZHVjZSBhIG1vZGlmaWVkCisgICAgZXhlY3V0YWJsZSBjb250YWluaW5nIHRoZSBtb2RpZmllZCBMaWJyYXJ5LiAgKEl0IGlzIHVuZGVyc3Rvb2QKKyAgICB0aGF0IHRoZSB1c2VyIHdobyBjaGFuZ2VzIHRoZSBjb250ZW50cyBvZiBkZWZpbml0aW9ucyBmaWxlcyBpbiB0aGUKKyAgICBMaWJyYXJ5IHdpbGwgbm90IG5lY2Vzc2FyaWx5IGJlIGFibGUgdG8gcmVjb21waWxlIHRoZSBhcHBsaWNhdGlvbgorICAgIHRvIHVzZSB0aGUgbW9kaWZpZWQgZGVmaW5pdGlvbnMuKQorCisgICAgYikgVXNlIGEgc3VpdGFibGUgc2hhcmVkIGxpYnJhcnkgbWVjaGFuaXNtIGZvciBsaW5raW5nIHdpdGggdGhlCisgICAgTGlicmFyeS4gIEEgc3VpdGFibGUgbWVjaGFuaXNtIGlzIG9uZSB0aGF0ICgxKSB1c2VzIGF0IHJ1biB0aW1lIGEKKyAgICBjb3B5IG9mIHRoZSBsaWJyYXJ5IGFscmVhZHkgcHJlc2VudCBvbiB0aGUgdXNlcidzIGNvbXB1dGVyIHN5c3RlbSwKKyAgICByYXRoZXIgdGhhbiBjb3B5aW5nIGxpYnJhcnkgZnVuY3Rpb25zIGludG8gdGhlIGV4ZWN1dGFibGUsIGFuZCAoMikKKyAgICB3aWxsIG9wZXJhdGUgcHJvcGVybHkgd2l0aCBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIGlmCisgICAgdGhlIHVzZXIgaW5zdGFsbHMgb25lLCBhcyBsb25nIGFzIHRoZSBtb2RpZmllZCB2ZXJzaW9uIGlzCisgICAgaW50ZXJmYWNlLWNvbXBhdGlibGUgd2l0aCB0aGUgdmVyc2lvbiB0aGF0IHRoZSB3b3JrIHdhcyBtYWRlIHdpdGguCisKKyAgICBjKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdAorICAgIGxlYXN0IHRocmVlIHllYXJzLCB0byBnaXZlIHRoZSBzYW1lIHVzZXIgdGhlIG1hdGVyaWFscworICAgIHNwZWNpZmllZCBpbiBTdWJzZWN0aW9uIDZhLCBhYm92ZSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUKKyAgICB0aGFuIHRoZSBjb3N0IG9mIHBlcmZvcm1pbmcgdGhpcyBkaXN0cmlidXRpb24uCisKKyAgICBkKSBJZiBkaXN0cmlidXRpb24gb2YgdGhlIHdvcmsgaXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weQorICAgIGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZSBhYm92ZQorICAgIHNwZWNpZmllZCBtYXRlcmlhbHMgZnJvbSB0aGUgc2FtZSBwbGFjZS4KKworICAgIGUpIFZlcmlmeSB0aGF0IHRoZSB1c2VyIGhhcyBhbHJlYWR5IHJlY2VpdmVkIGEgY29weSBvZiB0aGVzZQorICAgIG1hdGVyaWFscyBvciB0aGF0IHlvdSBoYXZlIGFscmVhZHkgc2VudCB0aGlzIHVzZXIgYSBjb3B5LgorCisgIEZvciBhbiBleGVjdXRhYmxlLCB0aGUgcmVxdWlyZWQgZm9ybSBvZiB0aGUgIndvcmsgdGhhdCB1c2VzIHRoZQorTGlicmFyeSIgbXVzdCBpbmNsdWRlIGFueSBkYXRhIGFuZCB1dGlsaXR5IHByb2dyYW1zIG5lZWRlZCBmb3IKK3JlcHJvZHVjaW5nIHRoZSBleGVjdXRhYmxlIGZyb20gaXQuICBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uLAordGhlIG1hdGVyaWFscyB0byBiZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgaXMKK25vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeSBmb3JtKSB3aXRoIHRoZSBtYWpvcgorY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvbgord2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50IGl0c2VsZiBhY2NvbXBhbmllcwordGhlIGV4ZWN1dGFibGUuCisKKyAgSXQgbWF5IGhhcHBlbiB0aGF0IHRoaXMgcmVxdWlyZW1lbnQgY29udHJhZGljdHMgdGhlIGxpY2Vuc2UKK3Jlc3RyaWN0aW9ucyBvZiBvdGhlciBwcm9wcmlldGFyeSBsaWJyYXJpZXMgdGhhdCBkbyBub3Qgbm9ybWFsbHkKK2FjY29tcGFueSB0aGUgb3BlcmF0aW5nIHN5c3RlbS4gIFN1Y2ggYSBjb250cmFkaWN0aW9uIG1lYW5zIHlvdSBjYW5ub3QKK3VzZSBib3RoIHRoZW0gYW5kIHRoZSBMaWJyYXJ5IHRvZ2V0aGVyIGluIGFuIGV4ZWN1dGFibGUgdGhhdCB5b3UKK2Rpc3RyaWJ1dGUuCisMCisgIDcuIFlvdSBtYXkgcGxhY2UgbGlicmFyeSBmYWNpbGl0aWVzIHRoYXQgYXJlIGEgd29yayBiYXNlZCBvbiB0aGUKK0xpYnJhcnkgc2lkZS1ieS1zaWRlIGluIGEgc2luZ2xlIGxpYnJhcnkgdG9nZXRoZXIgd2l0aCBvdGhlciBsaWJyYXJ5CitmYWNpbGl0aWVzIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgc3VjaCBhIGNvbWJpbmVkCitsaWJyYXJ5LCBwcm92aWRlZCB0aGF0IHRoZSBzZXBhcmF0ZSBkaXN0cmlidXRpb24gb2YgdGhlIHdvcmsgYmFzZWQgb24KK3RoZSBMaWJyYXJ5IGFuZCBvZiB0aGUgb3RoZXIgbGlicmFyeSBmYWNpbGl0aWVzIGlzIG90aGVyd2lzZQorcGVybWl0dGVkLCBhbmQgcHJvdmlkZWQgdGhhdCB5b3UgZG8gdGhlc2UgdHdvIHRoaW5nczoKKworICAgIGEpIEFjY29tcGFueSB0aGUgY29tYmluZWQgbGlicmFyeSB3aXRoIGEgY29weSBvZiB0aGUgc2FtZSB3b3JrCisgICAgYmFzZWQgb24gdGhlIExpYnJhcnksIHVuY29tYmluZWQgd2l0aCBhbnkgb3RoZXIgbGlicmFyeQorICAgIGZhY2lsaXRpZXMuICBUaGlzIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICAgIFNlY3Rpb25zIGFib3ZlLgorCisgICAgYikgR2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggdGhlIGNvbWJpbmVkIGxpYnJhcnkgb2YgdGhlIGZhY3QKKyAgICB0aGF0IHBhcnQgb2YgaXQgaXMgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgZXhwbGFpbmluZworICAgIHdoZXJlIHRvIGZpbmQgdGhlIGFjY29tcGFueWluZyB1bmNvbWJpbmVkIGZvcm0gb2YgdGhlIHNhbWUgd29yay4KKworICA4LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IgZGlzdHJpYnV0ZQordGhlIExpYnJhcnkgZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkKK2F0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvcgorZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyCityaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiAgSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsCitvciByaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzCit0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaCBwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgOS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK0xpYnJhcnkpLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCit0aGUgTGlicmFyeSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworICAxMC4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorTGlicmFyeSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUsIGxpbmsgd2l0aCBvciBtb2RpZnkgdGhlIExpYnJhcnkKK3N1YmplY3QgdG8gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHdpdGgKK3RoaXMgTGljZW5zZS4KKwwKKyAgMTEuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCitjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgTGlicmFyeSBieQorYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCit0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCityZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5LgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYW55CitwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gYXBwbHksCithbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlciBjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQoraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0gd2hpY2ggaXMKK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAordGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAoraW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorCisgIDEyLiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIExpYnJhcnkgaXMgcmVzdHJpY3RlZCBpbgorY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCitvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIExpYnJhcnkgdW5kZXIgdGhpcyBMaWNlbnNlIG1heSBhZGQKK2FuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcgdGhvc2UgY291bnRyaWVzLAorc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcgY291bnRyaWVzIG5vdCB0aHVzCitleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcyB0aGUgbGltaXRhdGlvbiBhcyBpZgord3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMTMuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3Cit2ZXJzaW9ucyBvZiB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuCitTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sCitidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIExpYnJhcnkKK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZAorImFueSBsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZAorY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBMaWJyYXJ5IGRvZXMgbm90IHNwZWNpZnkgYQorbGljZW5zZSB2ZXJzaW9uIG51bWJlciwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisMCisgIDE0LiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgTGlicmFyeSBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBpbmNvbXBhdGlibGUgd2l0aCB0aGVzZSwKK3dyaXRlIHRvIHRoZSBhdXRob3IgdG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzCitjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzIG1ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91cgorZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscyBvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cworb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZCBvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcKK2FuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKKwkJCSAgICBOTyBXQVJSQU5UWQorCisgIDE1LiBCRUNBVVNFIFRIRSBMSUJSQVJZIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTworV0FSUkFOVFkgRk9SIFRIRSBMSUJSQVJZLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4KK0VYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SCitPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIExJQlJBUlkgIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRQorTElCUkFSWSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgTElCUkFSWSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUKK1RIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxNi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTgorV1JJVElORyBXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkKK0FORC9PUiBSRURJU1RSSUJVVEUgVEhFIExJQlJBUlkgQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VCitGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRQorTElCUkFSWSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORworUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEKK0ZBSUxVUkUgT0YgVEhFIExJQlJBUlkgVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBTT0ZUV0FSRSksIEVWRU4gSUYKK1NVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKK0RBTUFHRVMuCisKKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKwwKK0FwcGVuZGl4IEIgLSBUQ0wgTGljZW5zZQorCitUaGlzIHNvZnR3YXJlIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsCitTdW4gTWljcm9zeXN0ZW1zLCBJbmMuLCBTY3JpcHRpY3MgQ29ycG9yYXRpb24sIGFuZCBvdGhlciBwYXJ0aWVzLiBUaGUgZm9sbG93aW5nCit0ZXJtcyBhcHBseSB0byBhbGwgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzb2Z0d2FyZSB1bmxlc3MgZXhwbGljaXRseQorZGlzY2xhaW1lZCBpbiBpbmRpdmlkdWFsIGZpbGVzLgorCitUaGUgYXV0aG9ycyBoZXJlYnkgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSwgYW5kCitsaWNlbnNlIHRoaXMgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSwgcHJvdmlkZWQgdGhhdAorZXhpc3RpbmcgY29weXJpZ2h0IG5vdGljZXMgYXJlIHJldGFpbmVkIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgdGhpcyBub3RpY2UgaXMKK2luY2x1ZGVkIHZlcmJhdGltIGluIGFueSBkaXN0cmlidXRpb25zLiBObyB3cml0dGVuIGFncmVlbWVudCwgbGljZW5zZSwgb3IKK3JveWFsdHkgZmVlIGlzIHJlcXVpcmVkIGZvciBhbnkgb2YgdGhlIGF1dGhvcml6ZWQgdXNlcy4gTW9kaWZpY2F0aW9ucyB0byB0aGlzCitzb2Z0d2FyZSBtYXkgYmUgY29weXJpZ2h0ZWQgYnkgdGhlaXIgYXV0aG9ycyBhbmQgbmVlZCBub3QgZm9sbG93IHRoZSBsaWNlbnNpbmcKK3Rlcm1zIGRlc2NyaWJlZCBoZXJlLCBwcm92aWRlZCB0aGF0IHRoZSBuZXcgdGVybXMgYXJlIGNsZWFybHkgaW5kaWNhdGVkIG9uIHRoZQorZmlyc3QgcGFnZSBvZiBlYWNoIGZpbGUgd2hlcmUgdGhleSBhcHBseS4KKworSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgRElTVFJJQlVUT1JTIEJFIExJQUJMRSBUTyBBTlkgUEFSVFkgRk9SCitESVJFQ1QsIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YKK1RIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgSVRTIERPQ1VNRU5UQVRJT04sIE9SIEFOWSBERVJJVkFUSVZFUyBUSEVSRU9GLCBFVkVOCitJRiBUSEUgQVVUSE9SUyBIQVZFIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK1RIRSBBVVRIT1JTIEFORCBESVNUUklCVVRPUlMgU1BFQ0lGSUNBTExZIERJU0NMQUlNIEFOWSBXQVJSQU5USUVTLCBJTkNMVURJTkcsCitCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBCitQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBOT04tSU5GUklOR0VNRU5ULiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIE9OIEFOICJBUworSVMiIEJBU0lTLCBBTkQgVEhFIEFVVEhPUlMgQU5EIERJU1RSSUJVVE9SUyBIQVZFIE5PIE9CTElHQVRJT04gVE8gUFJPVklERQorTUFJTlRFTkFOQ0UsIFNVUFBPUlQsIFVQREFURVMsIEVOSEFOQ0VNRU5UUywgT1IgTU9ESUZJQ0FUSU9OUy4KKworR09WRVJOTUVOVCBVU0U6IElmIHlvdSBhcmUgYWNxdWlyaW5nIHRoaXMgc29mdHdhcmUgb24gYmVoYWxmIG9mIHRoZSBVLlMuCitnb3Zlcm5tZW50LCB0aGUgR292ZXJubWVudCBzaGFsbCBoYXZlIG9ubHkgIlJlc3RyaWN0ZWQgUmlnaHRzIiBpbiB0aGUgc29mdHdhcmUKK2FuZCByZWxhdGVkIGRvY3VtZW50YXRpb24gYXMgZGVmaW5lZCBpbiB0aGUgRmVkZXJhbCBBY3F1aXNpdGlvbiBSZWd1bGF0aW9ucworKEZBUnMpIGluIENsYXVzZSA1Mi4yMjcuMTkgKGMpICgyKS4gSWYgeW91IGFyZSBhY3F1aXJpbmcgdGhlIHNvZnR3YXJlIG9uIGJlaGFsZgorb2YgdGhlIERlcGFydG1lbnQgb2YgRGVmZW5zZSwgdGhlIHNvZnR3YXJlIHNoYWxsIGJlIGNsYXNzaWZpZWQgYXMgIkNvbW1lcmNpYWwKK0NvbXB1dGVyIFNvZnR3YXJlIiBhbmQgdGhlIEdvdmVybm1lbnQgc2hhbGwgaGF2ZSBvbmx5ICJSZXN0cmljdGVkIFJpZ2h0cyIgYXMKK2RlZmluZWQgaW4gQ2xhdXNlIDI1Mi4yMjctNzAxMyAoYykgKDEpIG9mIERGQVJzLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZywKK3RoZSBhdXRob3JzIGdyYW50IHRoZSBVLlMuIEdvdmVybm1lbnQgYW5kIG90aGVycyBhY3RpbmcgaW4gaXRzIGJlaGFsZgorcGVybWlzc2lvbiB0byB1c2UgYW5kIGRpc3RyaWJ1dGUgdGhlIHNvZnR3YXJlIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMKK3NwZWNpZmllZCBpbiB0aGlzIGxpY2Vuc2UuCisKKyAgICAtLS0tLS0tLS0tLS0tLS0tPCBFbmQgb2YgRm9ybWFsIExpY2Vuc2UgR3JhbnQgPi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisMCitPS0FZLCBXRSBXRVJFIEpVU1QgS0lERElORy4gVEhFUkUnUyBOT1RISU5HIElOIEhFUkUgQUJPVVQgQ0FSV0FTSEVTLiBCVVQgWU9VCitSRUFMTFkgU0hPVUxEIFJFQUQgVEhFU0UgVEhJTkdTLCBZT1UgS05PVy4gKEl0J3MgdGhlIEJlaWdlIEhvbmRhIG1pbml2YW4sIGlmCit5b3UgcmVhbGx5IGluc2lzdCkuCisKK0ZvciB0aG9zZSBvZiB5b3UgdGhhdCBkbyByZWFsbHkgY2FyZSBhYm91dCBsaWNlbnNlIGFncmVlbWVudHMsIHdlIGNsb3NlIHdpdGgKK29uZSBmaW5hbCBkZXNjcmlwdGlvbiBvZiBvdXIgbW90aXZhdGlvbiBiZWhpbmQgdGhpcyBkb2N1bWVudC4KKworVGhlIGtleSBsZWdhbCBwcmluY2lwYWwgb3BlcmF0aW5nIGhlcmUgaXMgdGhhdCwgdW5kZXIgY29weXJpZ2h0IGxhdywgeW91IGhhdmUKK25vIHJpZ2h0cyB0byB1c2UgdGhpcyBzb2Z0d2FyZS4gSWYgeW91IGFyZSBhIHB1cmNoYXNpbmcgY3VzdG9tZXIgKG9yIGhhdmUgYmVlbgorZ3JhbnRlZCBhIHRlbXBvcmFyeSBldmFsdWF0aW9uIGxpY2Vuc2UpLCB0aGVuIHdlIGdyYW50IHlvdSBhIHJpZ2h0IHRvIHVzZSB0aGUKK3NvZnR3YXJlLiBBbGwgaHVtb3IgYXNpZGUsIHRoaXMgaXMgbm90IGludGVuZGVkIGFzIGEgTGljZW5zZSBBZ3JlZW1lbnQsIGluCit3aGljaCB3ZSBhdHRlbXB0IHRvIGNvZXJjZSBvciBiaW5kIHlvdSB0byB0ZXJtcyB5b3UgYXJlIG5vdCBhd2FyZSBvZi4gSW5zdGVhZCwKK3RoaXMgaXMgYSBMaWNlbnNlIEdyYW50IC0gYSBkb2N1bWVudCB0aGF0IGRldGFpbHMgdGhlIHdheSBpbiB3aGljaCB5b3VyCitwdXJjaGFzZSBlbnRpdGxlcyB5b3UgdG8gdXNlIG91ciBzb2Z0d2FyZS4gVGhlIGtleSBwb2ludCBpcyB0aGF0IHlvdSBoYXZlIG5vCityaWdodHMgb3RoZXIgdGhhbiB0aG9zZSBleHBsaWNpdGx5IGRlc2NyaWJlZCBpbiB0aGlzIGFncmVlbWVudC4gSWYgeW91IGhhdmUKK2Z1cnRoZXIgdGhvdWdodHMgYWJvdXQgdGhpcyBsaWNlbnNlIHBsZWFzZSBlbWFpbCB1cyBhdCBpbmZvQGNvZGV3ZWF2ZXJzLmNvbTsgd2UKK2FyZSBhbHdheXMgb3BlbiB0byBzdWdnZXN0aW9ucy4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0NVRFBQIGIvbGljZW5zZXMvQ1VEUFAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUwNjBlMAotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0NVRFBQCkBAIC0wLDAgKzEsNjYgQEAKK0NVREEgRGF0YS1QYXJhbGxlbCBQcmltaXRpdmVzIExpYnJhcnkgKENVRFBQKSBpcyB0aGUgcHJvcHJpZXRhcnkKK3Byb3BlcnR5IG9mIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEgKCJUaGUKK1JlZ2VudHMiKSBhbmQgTlZJRElBIENvcnBvcmF0aW9uICgiTlZJRElBIikuCisKK0NvcHlyaWdodCAoYykgMjAwNyBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLCBEYXZpcworY2FtcHVzIGFuZCBOVklESUEgQ29ycG9yYXRpb24uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorbWV0OgorCistIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworLSBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKy0gTmVpdGhlciB0aGUgbmFtZSBvZiBUaGUgUmVnZW50cywgTlZJRElBLCBub3IgdGhlIG5hbWVzIG9mIGl0cworICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbQorICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUaGUgZW5kLXVzZXIgdW5kZXJzdGFuZHMgdGhhdCB0aGUgcHJvZ3JhbSB3YXMgZGV2ZWxvcGVkIGZvciByZXNlYXJjaAorcHVycG9zZXMgYW5kIGlzIGFkdmlzZWQgbm90IHRvIHJlbHkgZXhjbHVzaXZlbHkgb24gdGhlIHByb2dyYW0gZm9yIGFueQorcmVhc29uLgorCitUSEUgU09GVFdBUkUgUFJPVklERUQgSVMgT04gQU4gIkFTIElTIiBCQVNJUywgQU5EIFRIRSBSRUdFTlRTLCBOVklESUEKK0FORCBDT05UUklCVVRPUlMgSEFWRSBOTyBPQkxJR0FUSU9OIFRPIFBST1ZJREUgTUFJTlRFTkFOQ0UsIFNVUFBPUlQsCitVUERBVEVTLCBFTkhBTkNFTUVOVFMsIE9SIE1PRElGSUNBVElPTlMuIFRIRSBSRUdFTlRTLCBOVklESUEgQU5ECitDT05UUklCVVRPUlMgU1BFQ0lGSUNBTExZIERJU0NMQUlNIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKK0lOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4KK0lOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTLCBOVklESUEgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBUTyBBTlkKK1BBUlRZIEZPUiBESVJFQ1QsIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBFWEVNUExBUlkgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUywgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBQUk9DVVJFTUVOVCBPRgorU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUywgTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgT1IKK0JVU0lORVNTIElOVEVSUlVQVElPTiwgSE9XRVZFUiBDQVVTRUQgQU5EIFVOREVSIEFOWSBUSEVPUlkgT0YKK0xJQUJJTElUWSBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZIE9SIFRPUlQgKElOQ0xVRElORworTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCitTT0ZUV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT04sIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCitJZiB5b3UgZG8gbm90IGFncmVlIHRvIHRoZXNlIHRlcm1zLCBkbyBub3QgZG93bmxvYWQgb3IgdXNlIHRoZQorc29mdHdhcmUuICBUaGlzIGxpY2Vuc2UgbWF5IGJlIG1vZGlmaWVkIG9ubHkgaW4gYSB3cml0aW5nIHNpZ25lZCBieQorYXV0aG9yaXplZCBzaWduYXRvcnkgb2YgYWxsIHBhcnRpZXMuICBGb3IgVGhlIFJlZ2VudHMgY29udGFjdAorY29weXJpZ2h0QHVjZGF2aXMuZWR1LgorCitSZWxhdGluZyB0byBmdW5kaW5nIHJlY2VpdmVkIGJ5IHRoZSBSZWdlbnRzLQorCitBY2tub3dsZWRnbWVudDogVGhpcyBtYXRlcmlhbCBpcyBiYXNlZCB1cG9uIHdvcmsgc3VwcG9ydGVkIGJ5Cit0aGUgRGVwYXJ0bWVudCBvZiBFbmVyZ3kgdW5kZXIgQXdhcmQgTnVtYmVycyBERS1GRzAyLTA0RVIyNTYwOSBhbmQKK0RFLUZDMDItMDZFUjI1Nzc3LgorCitEaXNjbGFpbWVyOiBUaGlzIHJlcG9ydCB3YXMgcHJlcGFyZWQgYXMgYW4gYWNjb3VudCBvZiB3b3JrIHNwb25zb3JlZAorYnkgYW4gYWdlbmN5IG9mIHRoZSBVbml0ZWQgU3RhdGVzIEdvdmVybm1lbnQuIE5laXRoZXIgdGhlIFVuaXRlZAorU3RhdGVzIEdvdmVybm1lbnQgbm9yIGFueSBhZ2VuY3kgdGhlcmVvZiwgbm9yIGFueSBvZiB0aGVpciBlbXBsb3llZXMsCittYWtlcyBhbnkgd2FycmFudHksIGV4cHJlc3Mgb3IgaW1wbGllZCwgb3IgYXNzdW1lcyBhbnkgbGVnYWwgbGlhYmlsaXR5CitvciByZXNwb25zaWJpbGl0eSBmb3IgdGhlIGFjY3VyYWN5LCBjb21wbGV0ZW5lc3MsIG9yIHVzZWZ1bG5lc3Mgb2YgYW55CitpbmZvcm1hdGlvbiwgYXBwYXJhdHVzLCBwcm9kdWN0LCBvciBwcm9jZXNzIGRpc2Nsb3NlZCwgb3IgcmVwcmVzZW50cwordGhhdCBpdHMgdXNlIHdvdWxkIG5vdCBpbmZyaW5nZSBwcml2YXRlbHkgb3duZWQgcmlnaHRzLiBSZWZlcmVuY2UKK2hlcmVpbiB0byBhbnkgc3BlY2lmaWMgY29tbWVyY2lhbCBwcm9kdWN0LCBwcm9jZXNzLCBvciBzZXJ2aWNlIGJ5Cit0cmFkZSBuYW1lLCB0cmFkZW1hcmssIG1hbnVmYWN0dXJlciwgb3Igb3RoZXJ3aXNlIGRvZXMgbm90IG5lY2Vzc2FyaWx5Citjb25zdGl0dXRlIG9yIGltcGx5IGl0cyBlbmRvcnNlbWVudCwgcmVjb21tZW5kYXRpb24sIG9yIGZhdm9yaW5nIGJ5Cit0aGUgVW5pdGVkIFN0YXRlcyBHb3Zlcm5tZW50IG9yIGFueSBhZ2VuY3kgdGhlcmVvZi4gVGhlIHZpZXdzIGFuZAorb3BpbmlvbnMgb2YgYXV0aG9ycyBleHByZXNzZWQgaGVyZWluIGRvIG5vdCBuZWNlc3NhcmlseSBzdGF0ZSBvcgorcmVmbGVjdCB0aG9zZSBvZiB0aGUgVW5pdGVkIFN0YXRlcyBHb3Zlcm5tZW50IG9yIGFueSBhZ2VuY3kgaGVyZW9mLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvQ2FsZGVyYSBiL2xpY2Vuc2VzL0NhbGRlcmEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjcyMzJhMwotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0NhbGRlcmEKQEAgLTAsMCArMSwxMDkgQEAKK1RoaXMgY29kZSBjb250YWlucyBjaGFuZ2VzIGJ5CisgICAgIEd1bm5hciBSaXR0ZXIsIEZyZWlidXJnIGkuIEJyLiwgR2VybWFueSwgMjAwMi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworQ29uZGl0aW9ucyAxLCAyLCBhbmQgNCBhbmQgdGhlIG5vLXdhcnJhbnR5IG5vdGljZSBiZWxvdyBhcHBseQordG8gdGhlc2UgY2hhbmdlcy4KKworQ29weXJpZ2h0IChjKSAxOTgwLCAxOTkzCisJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgorCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKworQ29weXJpZ2h0KEMpIENhbGRlcmEgSW50ZXJuYXRpb25hbCBJbmMuIDIwMDEtMjAwMi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBhbmQgZG9jdW1lbnRhdGlvbiBtdXN0IHJldGFpbiB0aGUKKyAgIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nCisgICBkaXNjbGFpbWVyLgorICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgb3Igb3duZWQgYnkgQ2FsZGVyYQorICAgICBJbnRlcm5hdGlvbmFsLCBJbmMuCisgIE5laXRoZXIgdGhlIG5hbWUgb2YgQ2FsZGVyYSBJbnRlcm5hdGlvbmFsLCBJbmMuIG5vciB0aGUgbmFtZXMgb2YKKyAgIG90aGVyIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitVU0UgT0YgVEhFIFNPRlRXQVJFIFBST1ZJREVEIEZPUiBVTkRFUiBUSElTIExJQ0VOU0UgQlkgQ0FMREVSQQorSU5URVJOQVRJT05BTCwgSU5DLiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKK0lNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBDQUxERVJBIElOVEVSTkFUSU9OQUwsIElOQy4gQkUKK0xJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKK1NVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCitXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRQorT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwKK0VWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKworVGhlIG1tYXAtYmFzZWQgbWVtb3J5IGFsbG9jYXRpb24gY29kZSBpcyBkZXJpdmVkIGZyb20gbW0tMS4xLjM6CisKK0NvcHlyaWdodCAoYykgMTk5OS0yMDAwIFJhbGYgUy4gRW5nZWxzY2hhbGwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorCisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAKKworMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICAgZGlzdHJpYnV0aW9uLgorCiszLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMKKyAgIHNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkKKyAgICBSYWxmIFMuIEVuZ2Vsc2NoYWxsIDxyc2VAZW5nZWxzY2hhbGwuY29tPi4iCisKKzQuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKyAgIGFja25vd2xlZGdtZW50OgorICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkKKyAgICBSYWxmIFMuIEVuZ2Vsc2NoYWxsIDxyc2VAZW5nZWxzY2hhbGwuY29tPi4iCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgUkFMRiBTLiBFTkdFTFNDSEFMTCBgYEFTIElTJycgQU5EIEFOWQorRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCitQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgUkFMRiBTLiBFTkdFTFNDSEFMTCBPUgorSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCitOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCitTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECitPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9DZUNJTEwtMiBiL2xpY2Vuc2VzL0NlQ0lMTC0yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1OTg1YzAKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9DZUNJTEwtMgpAQCAtMCwwICsxLDUwNiBAQAorCitDZUNJTEwgRlJFRSBTT0ZUV0FSRSBMSUNFTlNFIEFHUkVFTUVOVAorCisKKyAgICBOb3RpY2UKKworVGhpcyBBZ3JlZW1lbnQgaXMgYSBGcmVlIFNvZnR3YXJlIGxpY2Vuc2UgYWdyZWVtZW50IHRoYXQgaXMgdGhlIHJlc3VsdAorb2YgZGlzY3Vzc2lvbnMgYmV0d2VlbiBpdHMgYXV0aG9ycyBpbiBvcmRlciB0byBlbnN1cmUgY29tcGxpYW5jZSB3aXRoCit0aGUgdHdvIG1haW4gcHJpbmNpcGxlcyBndWlkaW5nIGl0cyBkcmFmdGluZzoKKworICAgICogZmlyc3RseSwgY29tcGxpYW5jZSB3aXRoIHRoZSBwcmluY2lwbGVzIGdvdmVybmluZyB0aGUgZGlzdHJpYnV0aW9uCisgICAgICBvZiBGcmVlIFNvZnR3YXJlOiBhY2Nlc3MgdG8gc291cmNlIGNvZGUsIGJyb2FkIHJpZ2h0cyBncmFudGVkIHRvCisgICAgICB1c2VycywKKyAgICAqIHNlY29uZGx5LCB0aGUgZWxlY3Rpb24gb2YgYSBnb3Zlcm5pbmcgbGF3LCBGcmVuY2ggbGF3LCB3aXRoIHdoaWNoCisgICAgICBpdCBpcyBjb25mb3JtYW50LCBib3RoIGFzIHJlZ2FyZHMgdGhlIGxhdyBvZiB0b3J0cyBhbmQKKyAgICAgIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXcsIGFuZCB0aGUgcHJvdGVjdGlvbiB0aGF0IGl0IG9mZmVycyB0bworICAgICAgYm90aCBhdXRob3JzIGFuZCBob2xkZXJzIG9mIHRoZSBlY29ub21pYyByaWdodHMgb3ZlciBzb2Z0d2FyZS4KKworVGhlIGF1dGhvcnMgb2YgdGhlIENlQ0lMTCAoZm9yIENlW2FdIENbbnJzXSBJW25yaWFdIExbb2dpY2llbF0gTFtpYnJlXSkKK2xpY2Vuc2UgYXJlOgorCitDb21taXNzYXJpYXQgw6AgbCdFbmVyZ2llIEF0b21pcXVlIC0gQ0VBLCBhIHB1YmxpYyBzY2llbnRpZmljLCB0ZWNobmljYWwKK2FuZCBpbmR1c3RyaWFsIHJlc2VhcmNoIGVzdGFibGlzaG1lbnQsIGhhdmluZyBpdHMgcHJpbmNpcGFsIHBsYWNlIG9mCitidXNpbmVzcyBhdCAyNSBydWUgTGVibGFuYywgaW1tZXVibGUgTGUgUG9uYW50IEQsIDc1MDE1IFBhcmlzLCBGcmFuY2UuCisKK0NlbnRyZSBOYXRpb25hbCBkZSBsYSBSZWNoZXJjaGUgU2NpZW50aWZpcXVlIC0gQ05SUywgYSBwdWJsaWMgc2NpZW50aWZpYworYW5kIHRlY2hub2xvZ2ljYWwgZXN0YWJsaXNobWVudCwgaGF2aW5nIGl0cyBwcmluY2lwYWwgcGxhY2Ugb2YgYnVzaW5lc3MKK2F0IDMgcnVlIE1pY2hlbC1BbmdlLCA3NTc5NCBQYXJpcyBjZWRleCAxNiwgRnJhbmNlLgorCitJbnN0aXR1dCBOYXRpb25hbCBkZSBSZWNoZXJjaGUgZW4gSW5mb3JtYXRpcXVlIGV0IGVuIEF1dG9tYXRpcXVlIC0KK0lOUklBLCBhIHB1YmxpYyBzY2llbnRpZmljIGFuZCB0ZWNobm9sb2dpY2FsIGVzdGFibGlzaG1lbnQsIGhhdmluZyBpdHMKK3ByaW5jaXBhbCBwbGFjZSBvZiBidXNpbmVzcyBhdCBEb21haW5lIGRlIFZvbHVjZWF1LCBSb2NxdWVuY291cnQsIEJQCisxMDUsIDc4MTUzIExlIENoZXNuYXkgY2VkZXgsIEZyYW5jZS4KKworCisgICAgUHJlYW1ibGUKKworVGhlIHB1cnBvc2Ugb2YgdGhpcyBGcmVlIFNvZnR3YXJlIGxpY2Vuc2UgYWdyZWVtZW50IGlzIHRvIGdyYW50IHVzZXJzCit0aGUgcmlnaHQgdG8gbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgdGhlIHNvZnR3YXJlIGdvdmVybmVkIGJ5IHRoaXMKK2xpY2Vuc2Ugd2l0aGluIHRoZSBmcmFtZXdvcmsgb2YgYW4gb3BlbiBzb3VyY2UgZGlzdHJpYnV0aW9uIG1vZGVsLgorCitUaGUgZXhlcmNpc2luZyBvZiB0aGVzZSByaWdodHMgaXMgY29uZGl0aW9uYWwgdXBvbiBjZXJ0YWluIG9ibGlnYXRpb25zCitmb3IgdXNlcnMgc28gYXMgdG8gcHJlc2VydmUgdGhpcyBzdGF0dXMgZm9yIGFsbCBzdWJzZXF1ZW50IHJlZGlzdHJpYnV0aW9ucy4KKworSW4gY29uc2lkZXJhdGlvbiBvZiBhY2Nlc3MgdG8gdGhlIHNvdXJjZSBjb2RlIGFuZCB0aGUgcmlnaHRzIHRvIGNvcHksCittb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSBncmFudGVkIGJ5IHRoZSBsaWNlbnNlLCB1c2VycyBhcmUgcHJvdmlkZWQgb25seQord2l0aCBhIGxpbWl0ZWQgd2FycmFudHkgYW5kIHRoZSBzb2Z0d2FyZSdzIGF1dGhvciwgdGhlIGhvbGRlciBvZiB0aGUKK2Vjb25vbWljIHJpZ2h0cywgYW5kIHRoZSBzdWNjZXNzaXZlIGxpY2Vuc29ycyBvbmx5IGhhdmUgbGltaXRlZCBsaWFiaWxpdHkuCisKK0luIHRoaXMgcmVzcGVjdCwgdGhlIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBsb2FkaW5nLCB1c2luZywgbW9kaWZ5aW5nCithbmQvb3IgZGV2ZWxvcGluZyBvciByZXByb2R1Y2luZyB0aGUgc29mdHdhcmUgYnkgdGhlIHVzZXIgYXJlIGJyb3VnaHQgdG8KK3RoZSB1c2VyJ3MgYXR0ZW50aW9uLCBnaXZlbiBpdHMgRnJlZSBTb2Z0d2FyZSBzdGF0dXMsIHdoaWNoIG1heSBtYWtlIGl0Citjb21wbGljYXRlZCB0byB1c2UsIHdpdGggdGhlIHJlc3VsdCB0aGF0IGl0cyB1c2UgaXMgcmVzZXJ2ZWQgZm9yCitkZXZlbG9wZXJzIGFuZCBleHBlcmllbmNlZCBwcm9mZXNzaW9uYWxzIGhhdmluZyBpbi1kZXB0aCBjb21wdXRlcgora25vd2xlZGdlLiBVc2VycyBhcmUgdGhlcmVmb3JlIGVuY291cmFnZWQgdG8gbG9hZCBhbmQgdGVzdCB0aGUKK3N1aXRhYmlsaXR5IG9mIHRoZSBzb2Z0d2FyZSBhcyByZWdhcmRzIHRoZWlyIHJlcXVpcmVtZW50cyBpbiBjb25kaXRpb25zCitlbmFibGluZyB0aGUgc2VjdXJpdHkgb2YgdGhlaXIgc3lzdGVtcyBhbmQvb3IgZGF0YSB0byBiZSBlbnN1cmVkIGFuZCwKK21vcmUgZ2VuZXJhbGx5LCB0byB1c2UgYW5kIG9wZXJhdGUgaXQgaW4gdGhlIHNhbWUgY29uZGl0aW9ucyBvZgorc2VjdXJpdHkuIFRoaXMgQWdyZWVtZW50IG1heSBiZSBmcmVlbHkgcmVwcm9kdWNlZCBhbmQgcHVibGlzaGVkLAorcHJvdmlkZWQgaXQgaXMgbm90IGFsdGVyZWQsIGFuZCB0aGF0IG5vIHByb3Zpc2lvbnMgYXJlIGVpdGhlciBhZGRlZCBvcgorcmVtb3ZlZCBoZXJlZnJvbS4KKworVGhpcyBBZ3JlZW1lbnQgbWF5IGFwcGx5IHRvIGFueSBvciBhbGwgc29mdHdhcmUgZm9yIHdoaWNoIHRoZSBob2xkZXIgb2YKK3RoZSBlY29ub21pYyByaWdodHMgZGVjaWRlcyB0byBzdWJtaXQgdGhlIHVzZSB0aGVyZW9mIHRvIGl0cyBwcm92aXNpb25zLgorCisKKyAgICBBcnRpY2xlIDEgLSBERUZJTklUSU9OUworCitGb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBBZ3JlZW1lbnQsIHdoZW4gdGhlIGZvbGxvd2luZyBleHByZXNzaW9ucworY29tbWVuY2Ugd2l0aCBhIGNhcGl0YWwgbGV0dGVyLCB0aGV5IHNoYWxsIGhhdmUgdGhlIGZvbGxvd2luZyBtZWFuaW5nOgorCitBZ3JlZW1lbnQ6IG1lYW5zIHRoaXMgbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCBpdHMgcG9zc2libGUgc3Vic2VxdWVudAordmVyc2lvbnMgYW5kIGFubmV4ZXMuCisKK1NvZnR3YXJlOiBtZWFucyB0aGUgc29mdHdhcmUgaW4gaXRzIE9iamVjdCBDb2RlIGFuZC9vciBTb3VyY2UgQ29kZSBmb3JtCithbmQsIHdoZXJlIGFwcGxpY2FibGUsIGl0cyBkb2N1bWVudGF0aW9uLCAiYXMgaXMiIHdoZW4gdGhlIExpY2Vuc2VlCithY2NlcHRzIHRoZSBBZ3JlZW1lbnQuCisKK0luaXRpYWwgU29mdHdhcmU6IG1lYW5zIHRoZSBTb2Z0d2FyZSBpbiBpdHMgU291cmNlIENvZGUgYW5kIHBvc3NpYmx5IGl0cworT2JqZWN0IENvZGUgZm9ybSBhbmQsIHdoZXJlIGFwcGxpY2FibGUsIGl0cyBkb2N1bWVudGF0aW9uLCAiYXMgaXMiIHdoZW4KK2l0IGlzIGZpcnN0IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQWdyZWVtZW50LgorCitNb2RpZmllZCBTb2Z0d2FyZTogbWVhbnMgdGhlIFNvZnR3YXJlIG1vZGlmaWVkIGJ5IGF0IGxlYXN0IG9uZQorQ29udHJpYnV0aW9uLgorCitTb3VyY2UgQ29kZTogbWVhbnMgYWxsIHRoZSBTb2Z0d2FyZSdzIGluc3RydWN0aW9ucyBhbmQgcHJvZ3JhbSBsaW5lcyB0bword2hpY2ggYWNjZXNzIGlzIHJlcXVpcmVkIHNvIGFzIHRvIG1vZGlmeSB0aGUgU29mdHdhcmUuCisKK09iamVjdCBDb2RlOiBtZWFucyB0aGUgYmluYXJ5IGZpbGVzIG9yaWdpbmF0aW5nIGZyb20gdGhlIGNvbXBpbGF0aW9uIG9mCit0aGUgU291cmNlIENvZGUuCisKK0hvbGRlcjogbWVhbnMgdGhlIGhvbGRlcihzKSBvZiB0aGUgZWNvbm9taWMgcmlnaHRzIG92ZXIgdGhlIEluaXRpYWwKK1NvZnR3YXJlLgorCitMaWNlbnNlZTogbWVhbnMgdGhlIFNvZnR3YXJlIHVzZXIocykgaGF2aW5nIGFjY2VwdGVkIHRoZSBBZ3JlZW1lbnQuCisKK0NvbnRyaWJ1dG9yOiBtZWFucyBhIExpY2Vuc2VlIGhhdmluZyBtYWRlIGF0IGxlYXN0IG9uZSBDb250cmlidXRpb24uCisKK0xpY2Vuc29yOiBtZWFucyB0aGUgSG9sZGVyLCBvciBhbnkgb3RoZXIgaW5kaXZpZHVhbCBvciBsZWdhbCBlbnRpdHksIHdobworZGlzdHJpYnV0ZXMgdGhlIFNvZnR3YXJlIHVuZGVyIHRoZSBBZ3JlZW1lbnQuCisKK0NvbnRyaWJ1dGlvbjogbWVhbnMgYW55IG9yIGFsbCBtb2RpZmljYXRpb25zLCBjb3JyZWN0aW9ucywgdHJhbnNsYXRpb25zLAorYWRhcHRhdGlvbnMgYW5kL29yIG5ldyBmdW5jdGlvbnMgaW50ZWdyYXRlZCBpbnRvIHRoZSBTb2Z0d2FyZSBieSBhbnkgb3IKK2FsbCBDb250cmlidXRvcnMsIGFzIHdlbGwgYXMgYW55IG9yIGFsbCBJbnRlcm5hbCBNb2R1bGVzLgorCitNb2R1bGU6IG1lYW5zIGEgc2V0IG9mIHNvdXJjZXMgZmlsZXMgaW5jbHVkaW5nIHRoZWlyIGRvY3VtZW50YXRpb24gdGhhdAorZW5hYmxlcyBzdXBwbGVtZW50YXJ5IGZ1bmN0aW9ucyBvciBzZXJ2aWNlcyBpbiBhZGRpdGlvbiB0byB0aG9zZSBvZmZlcmVkCitieSB0aGUgU29mdHdhcmUuCisKK0V4dGVybmFsIE1vZHVsZTogbWVhbnMgYW55IG9yIGFsbCBNb2R1bGVzLCBub3QgZGVyaXZlZCBmcm9tIHRoZQorU29mdHdhcmUsIHNvIHRoYXQgdGhpcyBNb2R1bGUgYW5kIHRoZSBTb2Z0d2FyZSBydW4gaW4gc2VwYXJhdGUgYWRkcmVzcworc3BhY2VzLCB3aXRoIG9uZSBjYWxsaW5nIHRoZSBvdGhlciB3aGVuIHRoZXkgYXJlIHJ1bi4KKworSW50ZXJuYWwgTW9kdWxlOiBtZWFucyBhbnkgb3IgYWxsIE1vZHVsZSwgY29ubmVjdGVkIHRvIHRoZSBTb2Z0d2FyZSBzbwordGhhdCB0aGV5IGJvdGggZXhlY3V0ZSBpbiB0aGUgc2FtZSBhZGRyZXNzIHNwYWNlLgorCitHTlUgR1BMOiBtZWFucyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIG9yIGFueQorc3Vic2VxdWVudCB2ZXJzaW9uLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBJbmMuCisKK1BhcnRpZXM6IG1lYW4gYm90aCB0aGUgTGljZW5zZWUgYW5kIHRoZSBMaWNlbnNvci4KKworVGhlc2UgZXhwcmVzc2lvbnMgbWF5IGJlIHVzZWQgYm90aCBpbiBzaW5ndWxhciBhbmQgcGx1cmFsIGZvcm0uCisKKworICAgIEFydGljbGUgMiAtIFBVUlBPU0UKKworVGhlIHB1cnBvc2Ugb2YgdGhlIEFncmVlbWVudCBpcyB0aGUgZ3JhbnQgYnkgdGhlIExpY2Vuc29yIHRvIHRoZQorTGljZW5zZWUgb2YgYSBub24tZXhjbHVzaXZlLCB0cmFuc2ZlcmFibGUgYW5kIHdvcmxkd2lkZSBsaWNlbnNlIGZvciB0aGUKK1NvZnR3YXJlIGFzIHNldCBmb3J0aCBpbiBBcnRpY2xlIDUgaGVyZWluYWZ0ZXIgZm9yIHRoZSB3aG9sZSB0ZXJtIG9mIHRoZQorcHJvdGVjdGlvbiBncmFudGVkIGJ5IHRoZSByaWdodHMgb3ZlciBzYWlkIFNvZnR3YXJlLgorCisKKyAgICBBcnRpY2xlIDMgLSBBQ0NFUFRBTkNFCisKKzMuMSBUaGUgTGljZW5zZWUgc2hhbGwgYmUgZGVlbWVkIGFzIGhhdmluZyBhY2NlcHRlZCB0aGUgdGVybXMgYW5kCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IHVwb24gdGhlIG9jY3VycmVuY2Ugb2YgdGhlIGZpcnN0IG9mIHRoZQorZm9sbG93aW5nIGV2ZW50czoKKworICAgICogKGkpIGxvYWRpbmcgdGhlIFNvZnR3YXJlIGJ5IGFueSBvciBhbGwgbWVhbnMsIG5vdGFibHksIGJ5CisgICAgICBkb3dubG9hZGluZyBmcm9tIGEgcmVtb3RlIHNlcnZlciwgb3IgYnkgbG9hZGluZyBmcm9tIGEgcGh5c2ljYWwKKyAgICAgIG1lZGl1bTsKKyAgICAqIChpaSkgdGhlIGZpcnN0IHRpbWUgdGhlIExpY2Vuc2VlIGV4ZXJjaXNlcyBhbnkgb2YgdGhlIHJpZ2h0cworICAgICAgZ3JhbnRlZCBoZXJldW5kZXIuCisKKzMuMiBPbmUgY29weSBvZiB0aGUgQWdyZWVtZW50LCBjb250YWluaW5nIGEgbm90aWNlIHJlbGF0aW5nIHRvIHRoZQorY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBTb2Z0d2FyZSwgdG8gdGhlIGxpbWl0ZWQgd2FycmFudHksIGFuZCB0byB0aGUKK2ZhY3QgdGhhdCBpdHMgdXNlIGlzIHJlc3RyaWN0ZWQgdG8gZXhwZXJpZW5jZWQgdXNlcnMgaGFzIGJlZW4gcHJvdmlkZWQKK3RvIHRoZSBMaWNlbnNlZSBwcmlvciB0byBpdHMgYWNjZXB0YW5jZSBhcyBzZXQgZm9ydGggaW4gQXJ0aWNsZSAzLjEKK2hlcmVpbmFib3ZlLCBhbmQgdGhlIExpY2Vuc2VlIGhlcmVieSBhY2tub3dsZWRnZXMgdGhhdCBpdCBoYXMgcmVhZCBhbmQKK3VuZGVyc3Rvb2QgaXQuCisKKworICAgIEFydGljbGUgNCAtIEVGRkVDVElWRSBEQVRFIEFORCBURVJNCisKKworICAgICAgNC4xIEVGRkVDVElWRSBEQVRFCisKK1RoZSBBZ3JlZW1lbnQgc2hhbGwgYmVjb21lIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSB3aGVuIGl0IGlzIGFjY2VwdGVkIGJ5Cit0aGUgTGljZW5zZWUgYXMgc2V0IGZvcnRoIGluIEFydGljbGUgMy4xLgorCisKKyAgICAgIDQuMiBURVJNCisKK1RoZSBBZ3JlZW1lbnQgc2hhbGwgcmVtYWluIGluIGZvcmNlIGZvciB0aGUgZW50aXJlIGxlZ2FsIHRlcm0gb2YKK3Byb3RlY3Rpb24gb2YgdGhlIGVjb25vbWljIHJpZ2h0cyBvdmVyIHRoZSBTb2Z0d2FyZS4KKworCisgICAgQXJ0aWNsZSA1IC0gU0NPUEUgT0YgUklHSFRTIEdSQU5URUQKKworVGhlIExpY2Vuc29yIGhlcmVieSBncmFudHMgdG8gdGhlIExpY2Vuc2VlLCB3aG8gYWNjZXB0cywgdGhlIGZvbGxvd2luZworcmlnaHRzIG92ZXIgdGhlIFNvZnR3YXJlIGZvciBhbnkgb3IgYWxsIHVzZSwgYW5kIGZvciB0aGUgdGVybSBvZiB0aGUKK0FncmVlbWVudCwgb24gdGhlIGJhc2lzIG9mIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBzZXQgZm9ydGggaGVyZWluYWZ0ZXIuCisKK0Jlc2lkZXMsIGlmIHRoZSBMaWNlbnNvciBvd25zIG9yIGNvbWVzIHRvIG93biBvbmUgb3IgbW9yZSBwYXRlbnRzCitwcm90ZWN0aW5nIGFsbCBvciBwYXJ0IG9mIHRoZSBmdW5jdGlvbnMgb2YgdGhlIFNvZnR3YXJlIG9yIG9mIGl0cworY29tcG9uZW50cywgdGhlIExpY2Vuc29yIHVuZGVydGFrZXMgbm90IHRvIGVuZm9yY2UgdGhlIHJpZ2h0cyBncmFudGVkIGJ5Cit0aGVzZSBwYXRlbnRzIGFnYWluc3Qgc3VjY2Vzc2l2ZSBMaWNlbnNlZXMgdXNpbmcsIGV4cGxvaXRpbmcgb3IKK21vZGlmeWluZyB0aGUgU29mdHdhcmUuIElmIHRoZXNlIHBhdGVudHMgYXJlIHRyYW5zZmVycmVkLCB0aGUgTGljZW5zb3IKK3VuZGVydGFrZXMgdG8gaGF2ZSB0aGUgdHJhbnNmZXJlZXMgc3Vic2NyaWJlIHRvIHRoZSBvYmxpZ2F0aW9ucyBzZXQKK2ZvcnRoIGluIHRoaXMgcGFyYWdyYXBoLgorCisKKyAgICAgIDUuMSBSSUdIVCBPRiBVU0UKKworVGhlIExpY2Vuc2VlIGlzIGF1dGhvcml6ZWQgdG8gdXNlIHRoZSBTb2Z0d2FyZSwgd2l0aG91dCBhbnkgbGltaXRhdGlvbgorYXMgdG8gaXRzIGZpZWxkcyBvZiBhcHBsaWNhdGlvbiwgd2l0aCBpdCBiZWluZyBoZXJlaW5hZnRlciBzcGVjaWZpZWQKK3RoYXQgdGhpcyBjb21wcmlzZXM6CisKKyAgIDEuIHBlcm1hbmVudCBvciB0ZW1wb3JhcnkgcmVwcm9kdWN0aW9uIG9mIGFsbCBvciBwYXJ0IG9mIHRoZSBTb2Z0d2FyZQorICAgICAgYnkgYW55IG9yIGFsbCBtZWFucyBhbmQgaW4gYW55IG9yIGFsbCBmb3JtLgorCisgICAyLiBsb2FkaW5nLCBkaXNwbGF5aW5nLCBydW5uaW5nLCBvciBzdG9yaW5nIHRoZSBTb2Z0d2FyZSBvbiBhbnkgb3IKKyAgICAgIGFsbCBtZWRpdW0uCisKKyAgIDMuIGVudGl0bGVtZW50IHRvIG9ic2VydmUsIHN0dWR5IG9yIHRlc3QgaXRzIG9wZXJhdGlvbiBzbyBhcyB0bworICAgICAgZGV0ZXJtaW5lIHRoZSBpZGVhcyBhbmQgcHJpbmNpcGxlcyBiZWhpbmQgYW55IG9yIGFsbCBjb25zdGl0dWVudAorICAgICAgZWxlbWVudHMgb2Ygc2FpZCBTb2Z0d2FyZS4gVGhpcyBzaGFsbCBhcHBseSB3aGVuIHRoZSBMaWNlbnNlZQorICAgICAgY2FycmllcyBvdXQgYW55IG9yIGFsbCBsb2FkaW5nLCBkaXNwbGF5aW5nLCBydW5uaW5nLCB0cmFuc21pc3Npb24KKyAgICAgIG9yIHN0b3JhZ2Ugb3BlcmF0aW9uIGFzIHJlZ2FyZHMgdGhlIFNvZnR3YXJlLCB0aGF0IGl0IGlzIGVudGl0bGVkCisgICAgICB0byBjYXJyeSBvdXQgaGVyZXVuZGVyLgorCisKKyAgICAgIDUuMiBFTlRJVExFTUVOVCBUTyBNQUtFIENPTlRSSUJVVElPTlMKKworVGhlIHJpZ2h0IHRvIG1ha2UgQ29udHJpYnV0aW9ucyBpbmNsdWRlcyB0aGUgcmlnaHQgdG8gdHJhbnNsYXRlLCBhZGFwdCwKK2FycmFuZ2UsIG9yIG1ha2UgYW55IG9yIGFsbCBtb2RpZmljYXRpb25zIHRvIHRoZSBTb2Z0d2FyZSwgYW5kIHRoZSByaWdodAordG8gcmVwcm9kdWNlIHRoZSByZXN1bHRpbmcgc29mdHdhcmUuCisKK1RoZSBMaWNlbnNlZSBpcyBhdXRob3JpemVkIHRvIG1ha2UgYW55IG9yIGFsbCBDb250cmlidXRpb25zIHRvIHRoZQorU29mdHdhcmUgcHJvdmlkZWQgdGhhdCBpdCBpbmNsdWRlcyBhbiBleHBsaWNpdCBub3RpY2UgdGhhdCBpdCBpcyB0aGUKK2F1dGhvciBvZiBzYWlkIENvbnRyaWJ1dGlvbiBhbmQgaW5kaWNhdGVzIHRoZSBkYXRlIG9mIHRoZSBjcmVhdGlvbiB0aGVyZW9mLgorCisKKyAgICAgIDUuMyBSSUdIVCBPRiBESVNUUklCVVRJT04KKworSW4gcGFydGljdWxhciwgdGhlIHJpZ2h0IG9mIGRpc3RyaWJ1dGlvbiBpbmNsdWRlcyB0aGUgcmlnaHQgdG8gcHVibGlzaCwKK3RyYW5zbWl0IGFuZCBjb21tdW5pY2F0ZSB0aGUgU29mdHdhcmUgdG8gdGhlIGdlbmVyYWwgcHVibGljIG9uIGFueSBvcgorYWxsIG1lZGl1bSwgYW5kIGJ5IGFueSBvciBhbGwgbWVhbnMsIGFuZCB0aGUgcmlnaHQgdG8gbWFya2V0LCBlaXRoZXIgaW4KK2NvbnNpZGVyYXRpb24gb2YgYSBmZWUsIG9yIGZyZWUgb2YgY2hhcmdlLCBvbmUgb3IgbW9yZSBjb3BpZXMgb2YgdGhlCitTb2Z0d2FyZSBieSBhbnkgbWVhbnMuCisKK1RoZSBMaWNlbnNlZSBpcyBmdXJ0aGVyIGF1dGhvcml6ZWQgdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIG1vZGlmaWVkCitvciB1bm1vZGlmaWVkIFNvZnR3YXJlIHRvIHRoaXJkIHBhcnRpZXMgYWNjb3JkaW5nIHRvIHRoZSB0ZXJtcyBhbmQKK2NvbmRpdGlvbnMgc2V0IGZvcnRoIGhlcmVpbmFmdGVyLgorCisKKyAgICAgICAgNS4zLjEgRElTVFJJQlVUSU9OIE9GIFNPRlRXQVJFIFdJVEhPVVQgTU9ESUZJQ0FUSU9OCisKK1RoZSBMaWNlbnNlZSBpcyBhdXRob3JpemVkIHRvIGRpc3RyaWJ1dGUgdHJ1ZSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlIGluCitTb3VyY2UgQ29kZSBvciBPYmplY3QgQ29kZSBmb3JtLCBwcm92aWRlZCB0aGF0IHNhaWQgZGlzdHJpYnV0aW9uCitjb21wbGllcyB3aXRoIGFsbCB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgQWdyZWVtZW50IGFuZCBpcyBhY2NvbXBhbmllZCBieToKKworICAgMS4gYSBjb3B5IG9mIHRoZSBBZ3JlZW1lbnQsCisKKyAgIDIuIGEgbm90aWNlIHJlbGF0aW5nIHRvIHRoZSBsaW1pdGF0aW9uIG9mIGJvdGggdGhlIExpY2Vuc29yJ3MKKyAgICAgIHdhcnJhbnR5IGFuZCBsaWFiaWxpdHkgYXMgc2V0IGZvcnRoIGluIEFydGljbGVzIDggYW5kIDksCisKK2FuZCB0aGF0LCBpbiB0aGUgZXZlbnQgdGhhdCBvbmx5IHRoZSBPYmplY3QgQ29kZSBvZiB0aGUgU29mdHdhcmUgaXMKK3JlZGlzdHJpYnV0ZWQsIHRoZSBMaWNlbnNlZSBhbGxvd3MgZnV0dXJlIExpY2Vuc2VlcyB1bmhpbmRlcmVkIGFjY2VzcyB0bwordGhlIGZ1bGwgU291cmNlIENvZGUgb2YgdGhlIFNvZnR3YXJlIGJ5IGluZGljYXRpbmcgaG93IHRvIGFjY2VzcyBpdCwgaXQKK2JlaW5nIHVuZGVyc3Rvb2QgdGhhdCB0aGUgYWRkaXRpb25hbCBjb3N0IG9mIGFjcXVpcmluZyB0aGUgU291cmNlIENvZGUKK3NoYWxsIG5vdCBleGNlZWQgdGhlIGNvc3Qgb2YgdHJhbnNmZXJyaW5nIHRoZSBkYXRhLgorCisKKyAgICAgICAgNS4zLjIgRElTVFJJQlVUSU9OIE9GIE1PRElGSUVEIFNPRlRXQVJFCisKK1doZW4gdGhlIExpY2Vuc2VlIG1ha2VzIGEgQ29udHJpYnV0aW9uIHRvIHRoZSBTb2Z0d2FyZSwgdGhlIHRlcm1zIGFuZAorY29uZGl0aW9ucyBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgcmVzdWx0aW5nIE1vZGlmaWVkIFNvZnR3YXJlCitiZWNvbWUgc3ViamVjdCB0byBhbGwgdGhlIHByb3Zpc2lvbnMgb2YgdGhpcyBBZ3JlZW1lbnQuCisKK1RoZSBMaWNlbnNlZSBpcyBhdXRob3JpemVkIHRvIGRpc3RyaWJ1dGUgdGhlIE1vZGlmaWVkIFNvZnR3YXJlLCBpbgorc291cmNlIGNvZGUgb3Igb2JqZWN0IGNvZGUgZm9ybSwgcHJvdmlkZWQgdGhhdCBzYWlkIGRpc3RyaWJ1dGlvbgorY29tcGxpZXMgd2l0aCBhbGwgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEFncmVlbWVudCBhbmQgaXMgYWNjb21wYW5pZWQgYnk6CisKKyAgIDEuIGEgY29weSBvZiB0aGUgQWdyZWVtZW50LAorCisgICAyLiBhIG5vdGljZSByZWxhdGluZyB0byB0aGUgbGltaXRhdGlvbiBvZiBib3RoIHRoZSBMaWNlbnNvcidzCisgICAgICB3YXJyYW50eSBhbmQgbGlhYmlsaXR5IGFzIHNldCBmb3J0aCBpbiBBcnRpY2xlcyA4IGFuZCA5LAorCithbmQgdGhhdCwgaW4gdGhlIGV2ZW50IHRoYXQgb25seSB0aGUgb2JqZWN0IGNvZGUgb2YgdGhlIE1vZGlmaWVkCitTb2Z0d2FyZSBpcyByZWRpc3RyaWJ1dGVkLCB0aGUgTGljZW5zZWUgYWxsb3dzIGZ1dHVyZSBMaWNlbnNlZXMKK3VuaGluZGVyZWQgYWNjZXNzIHRvIHRoZSBmdWxsIHNvdXJjZSBjb2RlIG9mIHRoZSBNb2RpZmllZCBTb2Z0d2FyZSBieQoraW5kaWNhdGluZyBob3cgdG8gYWNjZXNzIGl0LCBpdCBiZWluZyB1bmRlcnN0b29kIHRoYXQgdGhlIGFkZGl0aW9uYWwKK2Nvc3Qgb2YgYWNxdWlyaW5nIHRoZSBzb3VyY2UgY29kZSBzaGFsbCBub3QgZXhjZWVkIHRoZSBjb3N0IG9mCit0cmFuc2ZlcnJpbmcgdGhlIGRhdGEuCisKKworICAgICAgICA1LjMuMyBESVNUUklCVVRJT04gT0YgRVhURVJOQUwgTU9EVUxFUworCitXaGVuIHRoZSBMaWNlbnNlZSBoYXMgZGV2ZWxvcGVkIGFuIEV4dGVybmFsIE1vZHVsZSwgdGhlIHRlcm1zIGFuZAorY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBkbyBub3QgYXBwbHkgdG8gc2FpZCBFeHRlcm5hbCBNb2R1bGUsIHRoYXQKK21heSBiZSBkaXN0cmlidXRlZCB1bmRlciBhIHNlcGFyYXRlIGxpY2Vuc2UgYWdyZWVtZW50LgorCisKKyAgICAgICAgNS4zLjQgQ09NUEFUSUJJTElUWSBXSVRIIFRIRSBHTlUgR1BMCisKK1RoZSBMaWNlbnNlZSBjYW4gaW5jbHVkZSBhIGNvZGUgdGhhdCBpcyBzdWJqZWN0IHRvIHRoZSBwcm92aXNpb25zIG9mIG9uZQorb2YgdGhlIHZlcnNpb25zIG9mIHRoZSBHTlUgR1BMIGluIHRoZSBNb2RpZmllZCBvciB1bm1vZGlmaWVkIFNvZnR3YXJlLAorYW5kIGRpc3RyaWJ1dGUgdGhhdCBlbnRpcmUgY29kZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIHNhbWUgdmVyc2lvbiBvZgordGhlIEdOVSBHUEwuCisKK1RoZSBMaWNlbnNlZSBjYW4gaW5jbHVkZSB0aGUgTW9kaWZpZWQgb3IgdW5tb2RpZmllZCBTb2Z0d2FyZSBpbiBhIGNvZGUKK3RoYXQgaXMgc3ViamVjdCB0byB0aGUgcHJvdmlzaW9ucyBvZiBvbmUgb2YgdGhlIHZlcnNpb25zIG9mIHRoZSBHTlUgR1BMLAorYW5kIGRpc3RyaWJ1dGUgdGhhdCBlbnRpcmUgY29kZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIHNhbWUgdmVyc2lvbiBvZgordGhlIEdOVSBHUEwuCisKKworICAgIEFydGljbGUgNiAtIElOVEVMTEVDVFVBTCBQUk9QRVJUWQorCisKKyAgICAgIDYuMSBPVkVSIFRIRSBJTklUSUFMIFNPRlRXQVJFCisKK1RoZSBIb2xkZXIgb3ducyB0aGUgZWNvbm9taWMgcmlnaHRzIG92ZXIgdGhlIEluaXRpYWwgU29mdHdhcmUuIEFueSBvcgorYWxsIHVzZSBvZiB0aGUgSW5pdGlhbCBTb2Z0d2FyZSBpcyBzdWJqZWN0IHRvIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMKK2FuZCBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZSBIb2xkZXIgaGFzIGVsZWN0ZWQgdG8gZGlzdHJpYnV0ZSBpdHMgd29yaworYW5kIG5vIG9uZSBzaGFsbCBiZSBlbnRpdGxlZCB0byBtb2RpZnkgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB0aGUKK2Rpc3RyaWJ1dGlvbiBvZiBzYWlkIEluaXRpYWwgU29mdHdhcmUuCisKK1RoZSBIb2xkZXIgdW5kZXJ0YWtlcyB0aGF0IHRoZSBJbml0aWFsIFNvZnR3YXJlIHdpbGwgcmVtYWluIHJ1bGVkIGF0CitsZWFzdCBieSB0aGlzIEFncmVlbWVudCwgZm9yIHRoZSBkdXJhdGlvbiBzZXQgZm9ydGggaW4gQXJ0aWNsZSA0LjIuCisKKworICAgICAgNi4yIE9WRVIgVEhFIENPTlRSSUJVVElPTlMKKworVGhlIExpY2Vuc2VlIHdobyBkZXZlbG9wcyBhIENvbnRyaWJ1dGlvbiBpcyB0aGUgb3duZXIgb2YgdGhlCitpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG92ZXIgdGhpcyBDb250cmlidXRpb24gYXMgZGVmaW5lZCBieQorYXBwbGljYWJsZSBsYXcuCisKKworICAgICAgNi4zIE9WRVIgVEhFIEVYVEVSTkFMIE1PRFVMRVMKKworVGhlIExpY2Vuc2VlIHdobyBkZXZlbG9wcyBhbiBFeHRlcm5hbCBNb2R1bGUgaXMgdGhlIG93bmVyIG9mIHRoZQoraW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvdmVyIHRoaXMgRXh0ZXJuYWwgTW9kdWxlIGFzIGRlZmluZWQgYnkKK2FwcGxpY2FibGUgbGF3IGFuZCBpcyBmcmVlIHRvIGNob29zZSB0aGUgdHlwZSBvZiBhZ3JlZW1lbnQgdGhhdCBzaGFsbAorZ292ZXJuIGl0cyBkaXN0cmlidXRpb24uCisKKworICAgICAgNi40IEpPSU5UIFBST1ZJU0lPTlMKKworVGhlIExpY2Vuc2VlIGV4cHJlc3NseSB1bmRlcnRha2VzOgorCisgICAxLiBub3QgdG8gcmVtb3ZlLCBvciBtb2RpZnksIGluIGFueSBtYW5uZXIsIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkKKyAgICAgIG5vdGljZXMgYXR0YWNoZWQgdG8gdGhlIFNvZnR3YXJlOworCisgICAyLiB0byByZXByb2R1Y2Ugc2FpZCBub3RpY2VzLCBpbiBhbiBpZGVudGljYWwgbWFubmVyLCBpbiB0aGUgY29waWVzCisgICAgICBvZiB0aGUgU29mdHdhcmUgbW9kaWZpZWQgb3Igbm90LgorCitUaGUgTGljZW5zZWUgdW5kZXJ0YWtlcyBub3QgdG8gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZSB0aGUKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2YgdGhlIEhvbGRlciBhbmQvb3IgQ29udHJpYnV0b3JzIG9uIHRoZQorU29mdHdhcmUgYW5kIHRvIHRha2UsIHdoZXJlIGFwcGxpY2FibGUsIHZpcy3DoC12aXMgaXRzIHN0YWZmLCBhbnkgYW5kIGFsbAorbWVhc3VyZXMgcmVxdWlyZWQgdG8gZW5zdXJlIHJlc3BlY3Qgb2Ygc2FpZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzCitvZiB0aGUgSG9sZGVyIGFuZC9vciBDb250cmlidXRvcnMuCisKKworICAgIEFydGljbGUgNyAtIFJFTEFURUQgU0VSVklDRVMKKworNy4xIFVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgc2hhbGwgdGhlIEFncmVlbWVudCBvYmxpZ2UgdGhlIExpY2Vuc29yIHRvCitwcm92aWRlIHRlY2huaWNhbCBhc3Npc3RhbmNlIG9yIG1haW50ZW5hbmNlIHNlcnZpY2VzIGZvciB0aGUgU29mdHdhcmUuCisKK0hvd2V2ZXIsIHRoZSBMaWNlbnNvciBpcyBlbnRpdGxlZCB0byBvZmZlciB0aGlzIHR5cGUgb2Ygc2VydmljZXMuIFRoZQordGVybXMgYW5kIGNvbmRpdGlvbnMgb2Ygc3VjaCB0ZWNobmljYWwgYXNzaXN0YW5jZSwgYW5kL29yIHN1Y2gKK21haW50ZW5hbmNlLCBzaGFsbCBiZSBzZXQgZm9ydGggaW4gYSBzZXBhcmF0ZSBpbnN0cnVtZW50LiBPbmx5IHRoZQorTGljZW5zb3Igb2ZmZXJpbmcgc2FpZCBtYWludGVuYW5jZSBhbmQvb3IgdGVjaG5pY2FsIGFzc2lzdGFuY2Ugc2VydmljZXMKK3NoYWxsIGluY3VyIGxpYWJpbGl0eSB0aGVyZWZvci4KKworNy4yIFNpbWlsYXJseSwgYW55IExpY2Vuc29yIGlzIGVudGl0bGVkIHRvIG9mZmVyIHRvIGl0cyBsaWNlbnNlZXMsIHVuZGVyCitpdHMgc29sZSByZXNwb25zaWJpbGl0eSwgYSB3YXJyYW50eSwgdGhhdCBzaGFsbCBvbmx5IGJlIGJpbmRpbmcgdXBvbgoraXRzZWxmLCBmb3IgdGhlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBTb2Z0d2FyZSBhbmQvb3IgdGhlIE1vZGlmaWVkCitTb2Z0d2FyZSwgdW5kZXIgdGVybXMgYW5kIGNvbmRpdGlvbnMgdGhhdCBpdCBpcyBmcmVlIHRvIGRlY2lkZS4gU2FpZAord2FycmFudHksIGFuZCB0aGUgZmluYW5jaWFsIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIGl0cyBhcHBsaWNhdGlvbiwKK3NoYWxsIGJlIHN1YmplY3Qgb2YgYSBzZXBhcmF0ZSBpbnN0cnVtZW50IGV4ZWN1dGVkIGJldHdlZW4gdGhlIExpY2Vuc29yCithbmQgdGhlIExpY2Vuc2VlLgorCisKKyAgICBBcnRpY2xlIDggLSBMSUFCSUxJVFkKKworOC4xIFN1YmplY3QgdG8gdGhlIHByb3Zpc2lvbnMgb2YgQXJ0aWNsZSA4LjIsIHRoZSBMaWNlbnNlZSBzaGFsbCBiZQorZW50aXRsZWQgdG8gY2xhaW0gY29tcGVuc2F0aW9uIGZvciBhbnkgZGlyZWN0IGxvc3MgaXQgbWF5IGhhdmUgc3VmZmVyZWQKK2Zyb20gdGhlIFNvZnR3YXJlIGFzIGEgcmVzdWx0IG9mIGEgZmF1bHQgb24gdGhlIHBhcnQgb2YgdGhlIHJlbGV2YW50CitMaWNlbnNvciwgc3ViamVjdCB0byBwcm92aWRpbmcgZXZpZGVuY2UgdGhlcmVvZi4KKworOC4yIFRoZSBMaWNlbnNvcidzIGxpYWJpbGl0eSBpcyBsaW1pdGVkIHRvIHRoZSBjb21taXRtZW50cyBtYWRlIHVuZGVyCit0aGlzIEFncmVlbWVudCBhbmQgc2hhbGwgbm90IGJlIGluY3VycmVkIGFzIGEgcmVzdWx0IG9mIGluIHBhcnRpY3VsYXI6CisoaSkgbG9zcyBkdWUgdGhlIExpY2Vuc2VlJ3MgdG90YWwgb3IgcGFydGlhbCBmYWlsdXJlIHRvIGZ1bGZpbGwgaXRzCitvYmxpZ2F0aW9ucywgKGlpKSBkaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBsb3NzIHRoYXQgaXMgc3VmZmVyZWQgYnkgdGhlCitMaWNlbnNlZSBkdWUgdG8gdGhlIHVzZSBvciBwZXJmb3JtYW5jZSBvZiB0aGUgU29mdHdhcmUsIGFuZCAoaWlpKSBtb3JlCitnZW5lcmFsbHksIGFueSBjb25zZXF1ZW50aWFsIGxvc3MuIEluIHBhcnRpY3VsYXIgdGhlIFBhcnRpZXMgZXhwcmVzc2x5CithZ3JlZSB0aGF0IGFueSBvciBhbGwgcGVjdW5pYXJ5IG9yIGJ1c2luZXNzIGxvc3MgKGkuZS4gbG9zcyBvZiBkYXRhLAorbG9zcyBvZiBwcm9maXRzLCBvcGVyYXRpbmcgbG9zcywgbG9zcyBvZiBjdXN0b21lcnMgb3Igb3JkZXJzLAorb3Bwb3J0dW5pdHkgY29zdCwgYW55IGRpc3R1cmJhbmNlIHRvIGJ1c2luZXNzIGFjdGl2aXRpZXMpIG9yIGFueSBvciBhbGwKK2xlZ2FsIHByb2NlZWRpbmdzIGluc3RpdHV0ZWQgYWdhaW5zdCB0aGUgTGljZW5zZWUgYnkgYSB0aGlyZCBwYXJ0eSwKK3NoYWxsIGNvbnN0aXR1dGUgY29uc2VxdWVudGlhbCBsb3NzIGFuZCBzaGFsbCBub3QgcHJvdmlkZSBlbnRpdGxlbWVudCB0bworYW55IG9yIGFsbCBjb21wZW5zYXRpb24gZnJvbSB0aGUgTGljZW5zb3IuCisKKworICAgIEFydGljbGUgOSAtIFdBUlJBTlRZCisKKzkuMSBUaGUgTGljZW5zZWUgYWNrbm93bGVkZ2VzIHRoYXQgdGhlIHNjaWVudGlmaWMgYW5kIHRlY2huaWNhbAorc3RhdGUtb2YtdGhlLWFydCB3aGVuIHRoZSBTb2Z0d2FyZSB3YXMgZGlzdHJpYnV0ZWQgZGlkIG5vdCBlbmFibGUgYWxsCitwb3NzaWJsZSB1c2VzIHRvIGJlIHRlc3RlZCBhbmQgdmVyaWZpZWQsIG5vciBmb3IgdGhlIHByZXNlbmNlIG9mCitwb3NzaWJsZSBkZWZlY3RzIHRvIGJlIGRldGVjdGVkLiBJbiB0aGlzIHJlc3BlY3QsIHRoZSBMaWNlbnNlZSdzCithdHRlbnRpb24gaGFzIGJlZW4gZHJhd24gdG8gdGhlIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBsb2FkaW5nLCB1c2luZywKK21vZGlmeWluZyBhbmQvb3IgZGV2ZWxvcGluZyBhbmQgcmVwcm9kdWNpbmcgdGhlIFNvZnR3YXJlIHdoaWNoIGFyZQorcmVzZXJ2ZWQgZm9yIGV4cGVyaWVuY2VkIHVzZXJzLgorCitUaGUgTGljZW5zZWUgc2hhbGwgYmUgcmVzcG9uc2libGUgZm9yIHZlcmlmeWluZywgYnkgYW55IG9yIGFsbCBtZWFucywKK3RoZSBzdWl0YWJpbGl0eSBvZiB0aGUgcHJvZHVjdCBmb3IgaXRzIHJlcXVpcmVtZW50cywgaXRzIGdvb2Qgd29ya2luZworb3JkZXIsIGFuZCBmb3IgZW5zdXJpbmcgdGhhdCBpdCBzaGFsbCBub3QgY2F1c2UgZGFtYWdlIHRvIGVpdGhlciBwZXJzb25zCitvciBwcm9wZXJ0aWVzLgorCis5LjIgVGhlIExpY2Vuc29yIGhlcmVieSByZXByZXNlbnRzLCBpbiBnb29kIGZhaXRoLCB0aGF0IGl0IGlzIGVudGl0bGVkCit0byBncmFudCBhbGwgdGhlIHJpZ2h0cyBvdmVyIHRoZSBTb2Z0d2FyZSAoaW5jbHVkaW5nIGluIHBhcnRpY3VsYXIgdGhlCityaWdodHMgc2V0IGZvcnRoIGluIEFydGljbGUgNSkuCisKKzkuMyBUaGUgTGljZW5zZWUgYWNrbm93bGVkZ2VzIHRoYXQgdGhlIFNvZnR3YXJlIGlzIHN1cHBsaWVkICJhcyBpcyIgYnkKK3RoZSBMaWNlbnNvciB3aXRob3V0IGFueSBvdGhlciBleHByZXNzIG9yIHRhY2l0IHdhcnJhbnR5LCBvdGhlciB0aGFuCit0aGF0IHByb3ZpZGVkIGZvciBpbiBBcnRpY2xlIDkuMiBhbmQsIGluIHBhcnRpY3VsYXIsIHdpdGhvdXQgYW55IHdhcnJhbnR5CithcyB0byBpdHMgY29tbWVyY2lhbCB2YWx1ZSwgaXRzIHNlY3VyZWQsIHNhZmUsIGlubm92YXRpdmUgb3IgcmVsZXZhbnQKK25hdHVyZS4KKworU3BlY2lmaWNhbGx5LCB0aGUgTGljZW5zb3IgZG9lcyBub3Qgd2FycmFudCB0aGF0IHRoZSBTb2Z0d2FyZSBpcyBmcmVlCitmcm9tIGFueSBlcnJvciwgdGhhdCBpdCB3aWxsIG9wZXJhdGUgd2l0aG91dCBpbnRlcnJ1cHRpb24sIHRoYXQgaXQgd2lsbAorYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBMaWNlbnNlZSdzIG93biBlcXVpcG1lbnQgYW5kIHNvZnR3YXJlCitjb25maWd1cmF0aW9uLCBub3IgdGhhdCBpdCB3aWxsIG1lZXQgdGhlIExpY2Vuc2VlJ3MgcmVxdWlyZW1lbnRzLgorCis5LjQgVGhlIExpY2Vuc29yIGRvZXMgbm90IGVpdGhlciBleHByZXNzbHkgb3IgdGFjaXRseSB3YXJyYW50IHRoYXQgdGhlCitTb2Z0d2FyZSBkb2VzIG5vdCBpbmZyaW5nZSBhbnkgdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0CityZWxhdGluZyB0byBhIHBhdGVudCwgc29mdHdhcmUgb3IgYW55IG90aGVyIHByb3BlcnR5IHJpZ2h0LiBUaGVyZWZvcmUsCit0aGUgTGljZW5zb3IgZGlzY2xhaW1zIGFueSBhbmQgYWxsIGxpYWJpbGl0eSB0b3dhcmRzIHRoZSBMaWNlbnNlZQorYXJpc2luZyBvdXQgb2YgYW55IG9yIGFsbCBwcm9jZWVkaW5ncyBmb3IgaW5mcmluZ2VtZW50IHRoYXQgbWF5IGJlCitpbnN0aXR1dGVkIGluIHJlc3BlY3Qgb2YgdGhlIHVzZSwgbW9kaWZpY2F0aW9uIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUKK1NvZnR3YXJlLiBOZXZlcnRoZWxlc3MsIHNob3VsZCBzdWNoIHByb2NlZWRpbmdzIGJlIGluc3RpdHV0ZWQgYWdhaW5zdAordGhlIExpY2Vuc2VlLCB0aGUgTGljZW5zb3Igc2hhbGwgcHJvdmlkZSBpdCB3aXRoIHRlY2huaWNhbCBhbmQgbGVnYWwKK2Fzc2lzdGFuY2UgZm9yIGl0cyBkZWZlbnNlLiBTdWNoIHRlY2huaWNhbCBhbmQgbGVnYWwgYXNzaXN0YW5jZSBzaGFsbCBiZQorZGVjaWRlZCBvbiBhIGNhc2UtYnktY2FzZSBiYXNpcyBiZXR3ZWVuIHRoZSByZWxldmFudCBMaWNlbnNvciBhbmQgdGhlCitMaWNlbnNlZSBwdXJzdWFudCB0byBhIG1lbW9yYW5kdW0gb2YgdW5kZXJzdGFuZGluZy4gVGhlIExpY2Vuc29yCitkaXNjbGFpbXMgYW55IGFuZCBhbGwgbGlhYmlsaXR5IGFzIHJlZ2FyZHMgdGhlIExpY2Vuc2VlJ3MgdXNlIG9mIHRoZQorbmFtZSBvZiB0aGUgU29mdHdhcmUuIE5vIHdhcnJhbnR5IGlzIGdpdmVuIGFzIHJlZ2FyZHMgdGhlIGV4aXN0ZW5jZSBvZgorcHJpb3IgcmlnaHRzIG92ZXIgdGhlIG5hbWUgb2YgdGhlIFNvZnR3YXJlIG9yIGFzIHJlZ2FyZHMgdGhlIGV4aXN0ZW5jZQorb2YgYSB0cmFkZW1hcmsuCisKKworICAgIEFydGljbGUgMTAgLSBURVJNSU5BVElPTgorCisxMC4xIEluIHRoZSBldmVudCBvZiBhIGJyZWFjaCBieSB0aGUgTGljZW5zZWUgb2YgaXRzIG9ibGlnYXRpb25zCitoZXJldW5kZXIsIHRoZSBMaWNlbnNvciBtYXkgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgdGhpcyBBZ3JlZW1lbnQKK3RoaXJ0eSAoMzApIGRheXMgYWZ0ZXIgbm90aWNlIGhhcyBiZWVuIHNlbnQgdG8gdGhlIExpY2Vuc2VlIGFuZCBoYXMKK3JlbWFpbmVkIGluZWZmZWN0aXZlLgorCisxMC4yIEEgTGljZW5zZWUgd2hvc2UgQWdyZWVtZW50IGlzIHRlcm1pbmF0ZWQgc2hhbGwgbm8gbG9uZ2VyIGJlCithdXRob3JpemVkIHRvIHVzZSwgbW9kaWZ5IG9yIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlLiBIb3dldmVyLCBhbnkKK2xpY2Vuc2VzIHRoYXQgaXQgbWF5IGhhdmUgZ3JhbnRlZCBwcmlvciB0byB0ZXJtaW5hdGlvbiBvZiB0aGUgQWdyZWVtZW50CitzaGFsbCByZW1haW4gdmFsaWQgc3ViamVjdCB0byB0aGVpciBoYXZpbmcgYmVlbiBncmFudGVkIGluIGNvbXBsaWFuY2UKK3dpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGhlcmVvZi4KKworCisgICAgQXJ0aWNsZSAxMSAtIE1JU0NFTExBTkVPVVMKKworCisgICAgICAxMS4xIEVYQ1VTQUJMRSBFVkVOVFMKKworTmVpdGhlciBQYXJ0eSBzaGFsbCBiZSBsaWFibGUgZm9yIGFueSBvciBhbGwgZGVsYXksIG9yIGZhaWx1cmUgdG8KK3BlcmZvcm0gdGhlIEFncmVlbWVudCwgdGhhdCBtYXkgYmUgYXR0cmlidXRhYmxlIHRvIGFuIGV2ZW50IG9mIGZvcmNlCittYWpldXJlLCBhbiBhY3Qgb2YgR29kIG9yIGFuIG91dHNpZGUgY2F1c2UsIHN1Y2ggYXMgZGVmZWN0aXZlCitmdW5jdGlvbmluZyBvciBpbnRlcnJ1cHRpb25zIG9mIHRoZSBlbGVjdHJpY2l0eSBvciB0ZWxlY29tbXVuaWNhdGlvbnMKK25ldHdvcmtzLCBuZXR3b3JrIHBhcmFseXNpcyBmb2xsb3dpbmcgYSB2aXJ1cyBhdHRhY2ssIGludGVydmVudGlvbiBieQorZ292ZXJubWVudCBhdXRob3JpdGllcywgbmF0dXJhbCBkaXNhc3RlcnMsIHdhdGVyIGRhbWFnZSwgZWFydGhxdWFrZXMsCitmaXJlLCBleHBsb3Npb25zLCBzdHJpa2VzIGFuZCBsYWJvciB1bnJlc3QsIHdhciwgZXRjLgorCisxMS4yIEFueSBmYWlsdXJlIGJ5IGVpdGhlciBQYXJ0eSwgb24gb25lIG9yIG1vcmUgb2NjYXNpb25zLCB0byBpbnZva2UKK29uZSBvciBtb3JlIG9mIHRoZSBwcm92aXNpb25zIGhlcmVvZiwgc2hhbGwgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBiZQoraW50ZXJwcmV0ZWQgYXMgYmVpbmcgYSB3YWl2ZXIgYnkgdGhlIGludGVyZXN0ZWQgUGFydHkgb2YgaXRzIHJpZ2h0IHRvCitpbnZva2Ugc2FpZCBwcm92aXNpb24ocykgc3Vic2VxdWVudGx5LgorCisxMS4zIFRoZSBBZ3JlZW1lbnQgY2FuY2VscyBhbmQgcmVwbGFjZXMgYW55IG9yIGFsbCBwcmV2aW91cyBhZ3JlZW1lbnRzLAord2hldGhlciB3cml0dGVuIG9yIG9yYWwsIGJldHdlZW4gdGhlIFBhcnRpZXMgYW5kIGhhdmluZyB0aGUgc2FtZQorcHVycG9zZSwgYW5kIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmV0eSBvZiB0aGUgYWdyZWVtZW50IGJldHdlZW4gc2FpZAorUGFydGllcyBjb25jZXJuaW5nIHNhaWQgcHVycG9zZS4gTm8gc3VwcGxlbWVudCBvciBtb2RpZmljYXRpb24gdG8gdGhlCit0ZXJtcyBhbmQgY29uZGl0aW9ucyBoZXJlb2Ygc2hhbGwgYmUgZWZmZWN0aXZlIGFzIGJldHdlZW4gdGhlIFBhcnRpZXMKK3VubGVzcyBpdCBpcyBtYWRlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSB0aGVpciBkdWx5IGF1dGhvcml6ZWQKK3JlcHJlc2VudGF0aXZlcy4KKworMTEuNCBJbiB0aGUgZXZlbnQgdGhhdCBvbmUgb3IgbW9yZSBvZiB0aGUgcHJvdmlzaW9ucyBoZXJlb2Ygd2VyZSB0bworY29uZmxpY3Qgd2l0aCBhIGN1cnJlbnQgb3IgZnV0dXJlIGFwcGxpY2FibGUgYWN0IG9yIGxlZ2lzbGF0aXZlIHRleHQsCitzYWlkIGFjdCBvciBsZWdpc2xhdGl2ZSB0ZXh0IHNoYWxsIHByZXZhaWwsIGFuZCB0aGUgUGFydGllcyBzaGFsbCBtYWtlCit0aGUgbmVjZXNzYXJ5IGFtZW5kbWVudHMgc28gYXMgdG8gY29tcGx5IHdpdGggc2FpZCBhY3Qgb3IgbGVnaXNsYXRpdmUKK3RleHQuIEFsbCBvdGhlciBwcm92aXNpb25zIHNoYWxsIHJlbWFpbiBlZmZlY3RpdmUuIFNpbWlsYXJseSwgaW52YWxpZGl0eQorb2YgYSBwcm92aXNpb24gb2YgdGhlIEFncmVlbWVudCwgZm9yIGFueSByZWFzb24gd2hhdHNvZXZlciwgc2hhbGwgbm90CitjYXVzZSB0aGUgQWdyZWVtZW50IGFzIGEgd2hvbGUgdG8gYmUgaW52YWxpZC4KKworCisgICAgICAxMS41IExBTkdVQUdFCisKK1RoZSBBZ3JlZW1lbnQgaXMgZHJhZnRlZCBpbiBib3RoIEZyZW5jaCBhbmQgRW5nbGlzaCBhbmQgYm90aCB2ZXJzaW9ucworYXJlIGRlZW1lZCBhdXRoZW50aWMuCisKKworICAgIEFydGljbGUgMTIgLSBORVcgVkVSU0lPTlMgT0YgVEhFIEFHUkVFTUVOVAorCisxMi4xIEFueSBwZXJzb24gaXMgYXV0aG9yaXplZCB0byBkdXBsaWNhdGUgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoaXMKK0FncmVlbWVudC4KKworMTIuMiBTbyBhcyB0byBlbnN1cmUgY29oZXJlbmNlLCB0aGUgd29yZGluZyBvZiB0aGlzIEFncmVlbWVudCBpcworcHJvdGVjdGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBieSB0aGUgYXV0aG9ycyBvZiB0aGUgTGljZW5zZSwgd2hvCityZXNlcnZlIHRoZSByaWdodCB0byBwZXJpb2RpY2FsbHkgcHVibGlzaCB1cGRhdGVzIG9yIG5ldyB2ZXJzaW9ucyBvZiB0aGUKK0FncmVlbWVudCwgZWFjaCB3aXRoIGEgc2VwYXJhdGUgbnVtYmVyLiBUaGVzZSBzdWJzZXF1ZW50IHZlcnNpb25zIG1heQorYWRkcmVzcyBuZXcgaXNzdWVzIGVuY291bnRlcmVkIGJ5IEZyZWUgU29mdHdhcmUuCisKKzEyLjMgQW55IFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIGEgZ2l2ZW4gdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50IG1heQorb25seSBiZSBzdWJzZXF1ZW50bHkgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHNhbWUgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50CitvciBhIHN1YnNlcXVlbnQgdmVyc2lvbiwgc3ViamVjdCB0byB0aGUgcHJvdmlzaW9ucyBvZiBBcnRpY2xlIDUuMy40LgorCisKKyAgICBBcnRpY2xlIDEzIC0gR09WRVJOSU5HIExBVyBBTkQgSlVSSVNESUNUSU9OCisKKzEzLjEgVGhlIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSBGcmVuY2ggbGF3LiBUaGUgUGFydGllcyBhZ3JlZSB0bworZW5kZWF2b3IgdG8gc2VlayBhbiBhbWljYWJsZSBzb2x1dGlvbiB0byBhbnkgZGlzYWdyZWVtZW50cyBvciBkaXNwdXRlcwordGhhdCBtYXkgYXJpc2UgZHVyaW5nIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgQWdyZWVtZW50LgorCisxMy4yIEZhaWxpbmcgYW4gYW1pY2FibGUgc29sdXRpb24gd2l0aGluIHR3byAoMikgbW9udGhzIGFzIGZyb20gdGhlaXIKK29jY3VycmVuY2UsIGFuZCB1bmxlc3MgZW1lcmdlbmN5IHByb2NlZWRpbmdzIGFyZSBuZWNlc3NhcnksIHRoZQorZGlzYWdyZWVtZW50cyBvciBkaXNwdXRlcyBzaGFsbCBiZSByZWZlcnJlZCB0byB0aGUgUGFyaXMgQ291cnRzIGhhdmluZworanVyaXNkaWN0aW9uLCBieSB0aGUgbW9yZSBkaWxpZ2VudCBQYXJ0eS4KKworCitWZXJzaW9uIDIuMCBkYXRlZCAyMDA2LTA5LTA1LgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvQ2VDSUxMLUMgYi9saWNlbnNlcy9DZUNJTEwtQwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTUxNTk4Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvQ2VDSUxMLUMKQEAgLTAsMCArMSw1MDggQEAKKworICAgICAgICAgICAgIENlQ0lMTC1DIEZSRUUgU09GVFdBUkUgTElDRU5TRSBBR1JFRU1FTlQKKworCisgICAgTm90aWNlCisKK1RoaXMgQWdyZWVtZW50IGlzIGEgRnJlZSBTb2Z0d2FyZSBsaWNlbnNlIGFncmVlbWVudCB0aGF0IGlzIHRoZSByZXN1bHQKK29mIGRpc2N1c3Npb25zIGJldHdlZW4gaXRzIGF1dGhvcnMgaW4gb3JkZXIgdG8gZW5zdXJlIGNvbXBsaWFuY2Ugd2l0aAordGhlIHR3byBtYWluIHByaW5jaXBsZXMgZ3VpZGluZyBpdHMgZHJhZnRpbmc6CisKKyAgICAqIGZpcnN0bHksIGNvbXBsaWFuY2Ugd2l0aCB0aGUgcHJpbmNpcGxlcyBnb3Zlcm5pbmcgdGhlIGRpc3RyaWJ1dGlvbgorICAgICAgb2YgRnJlZSBTb2Z0d2FyZTogYWNjZXNzIHRvIHNvdXJjZSBjb2RlLCBicm9hZCByaWdodHMgZ3JhbnRlZCB0bworICAgICAgdXNlcnMsCisgICAgKiBzZWNvbmRseSwgdGhlIGVsZWN0aW9uIG9mIGEgZ292ZXJuaW5nIGxhdywgRnJlbmNoIGxhdywgd2l0aCB3aGljaAorICAgICAgaXQgaXMgY29uZm9ybWFudCwgYm90aCBhcyByZWdhcmRzIHRoZSBsYXcgb2YgdG9ydHMgYW5kCisgICAgICBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3LCBhbmQgdGhlIHByb3RlY3Rpb24gdGhhdCBpdCBvZmZlcnMgdG8KKyAgICAgIGJvdGggYXV0aG9ycyBhbmQgaG9sZGVycyBvZiB0aGUgZWNvbm9taWMgcmlnaHRzIG92ZXIgc29mdHdhcmUuCisKK1RoZSBhdXRob3JzIG9mIHRoZSBDZUNJTEwtQyAoZm9yIENlW2FdIENbbnJzXSBJW25yaWFdIExbbG9naWNpZWxdIExbaWJyZV0pCitsaWNlbnNlIGFyZToKKworQ29tbWlzc2FyaWF0IMOgIGwnRW5lcmdpZSBBdG9taXF1ZSAtIENFQSwgYSBwdWJsaWMgc2NpZW50aWZpYywgdGVjaG5pY2FsCithbmQgaW5kdXN0cmlhbCByZXNlYXJjaCBlc3RhYmxpc2htZW50LCBoYXZpbmcgaXRzIHByaW5jaXBhbCBwbGFjZSBvZgorYnVzaW5lc3MgYXQgMjUgcnVlIExlYmxhbmMsIGltbWV1YmxlIExlIFBvbmFudCBELCA3NTAxNSBQYXJpcywgRnJhbmNlLgorCitDZW50cmUgTmF0aW9uYWwgZGUgbGEgUmVjaGVyY2hlIFNjaWVudGlmaXF1ZSAtIENOUlMsIGEgcHVibGljIHNjaWVudGlmaWMKK2FuZCB0ZWNobm9sb2dpY2FsIGVzdGFibGlzaG1lbnQsIGhhdmluZyBpdHMgcHJpbmNpcGFsIHBsYWNlIG9mIGJ1c2luZXNzCithdCAzIHJ1ZSBNaWNoZWwtQW5nZSwgNzU3OTQgUGFyaXMgY2VkZXggMTYsIEZyYW5jZS4KKworSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldCBlbiBBdXRvbWF0aXF1ZSAtCitJTlJJQSwgYSBwdWJsaWMgc2NpZW50aWZpYyBhbmQgdGVjaG5vbG9naWNhbCBlc3RhYmxpc2htZW50LCBoYXZpbmcgaXRzCitwcmluY2lwYWwgcGxhY2Ugb2YgYnVzaW5lc3MgYXQgRG9tYWluZSBkZSBWb2x1Y2VhdSwgUm9jcXVlbmNvdXJ0LCBCUAorMTA1LCA3ODE1MyBMZSBDaGVzbmF5IGNlZGV4LCBGcmFuY2UuCisKKworICAgIFByZWFtYmxlCisKK1RoZSBwdXJwb3NlIG9mIHRoaXMgRnJlZSBTb2Z0d2FyZSBsaWNlbnNlIGFncmVlbWVudCBpcyB0byBncmFudCB1c2VycyB0aGUKK3JpZ2h0IHRvIG1vZGlmeSBhbmQgcmUtdXNlIHRoZSBzb2Z0d2FyZSBnb3Zlcm5lZCBieSB0aGlzIGxpY2Vuc2UuCisKK1RoZSBleGVyY2lzaW5nIG9mIHRoaXMgcmlnaHQgaXMgY29uZGl0aW9uYWwgb24gdGhlIG9ibGlnYXRpb24gdG8gbWFrZQorYXZhaWxhYmxlIHRvIHRoZSBjb21tdW5pdHkgdGhlIG1vZGlmaWNhdGlvbnMgbWFkZSB0byB0aGUgc291cmNlIGNvZGUgb2YgdGhlCitzb2Z0d2FyZSBzbyBhcyB0byBjb250cmlidXRlIHRvIGl0cyBldm9sdXRpb24uCisKK0luIGNvbnNpZGVyYXRpb24gb2YgYWNjZXNzIHRvIHRoZSBzb3VyY2UgY29kZSBhbmQgdGhlIHJpZ2h0cyB0byBjb3B5LAorbW9kaWZ5IGFuZCByZWRpc3RyaWJ1dGUgZ3JhbnRlZCBieSB0aGUgbGljZW5zZSwgdXNlcnMgYXJlIHByb3ZpZGVkIG9ubHkKK3dpdGggYSBsaW1pdGVkIHdhcnJhbnR5IGFuZCB0aGUgc29mdHdhcmUncyBhdXRob3IsIHRoZSBob2xkZXIgb2YgdGhlCitlY29ub21pYyByaWdodHMsIGFuZCB0aGUgc3VjY2Vzc2l2ZSBsaWNlbnNvcnMgb25seSBoYXZlIGxpbWl0ZWQgbGlhYmlsaXR5LgorCitJbiB0aGlzIHJlc3BlY3QsIHRoZSByaXNrcyBhc3NvY2lhdGVkIHdpdGggbG9hZGluZywgdXNpbmcsIG1vZGlmeWluZworYW5kL29yIGRldmVsb3Bpbmcgb3IgcmVwcm9kdWNpbmcgdGhlIHNvZnR3YXJlIGJ5IHRoZSB1c2VyIGFyZSBicm91Z2h0IHRvCit0aGUgdXNlcidzIGF0dGVudGlvbiwgZ2l2ZW4gaXRzIEZyZWUgU29mdHdhcmUgc3RhdHVzLCB3aGljaCBtYXkgbWFrZSBpdAorY29tcGxpY2F0ZWQgdG8gdXNlLCB3aXRoIHRoZSByZXN1bHQgdGhhdCBpdHMgdXNlIGlzIHJlc2VydmVkIGZvcgorZGV2ZWxvcGVycyBhbmQgZXhwZXJpZW5jZWQgcHJvZmVzc2lvbmFscyBoYXZpbmcgaW4tZGVwdGggY29tcHV0ZXIKK2tub3dsZWRnZS4gVXNlcnMgYXJlIHRoZXJlZm9yZSBlbmNvdXJhZ2VkIHRvIGxvYWQgYW5kIHRlc3QgdGhlIHN1aXRhYmlsaXR5CitvZiB0aGUgc29mdHdhcmUgYXMgcmVnYXJkcyB0aGVpciByZXF1aXJlbWVudHMgaW4gY29uZGl0aW9ucyBlbmFibGluZyB0aGUKK3NlY3VyaXR5IG9mIHRoZWlyIHN5c3RlbXMgYW5kL29yIGRhdGEgdG8gYmUgZW5zdXJlZCBhbmQsIG1vcmUgZ2VuZXJhbGx5LCB0bwordXNlIGFuZCBvcGVyYXRlIGl0IGluIHRoZSBzYW1lIGNvbmRpdGlvbnMgb2Ygc2VjdXJpdHkuIFRoaXMgQWdyZWVtZW50IG1heSBiZQorZnJlZWx5IHJlcHJvZHVjZWQgYW5kIHB1Ymxpc2hlZCwgcHJvdmlkZWQgaXQgaXMgbm90IGFsdGVyZWQsIGFuZCB0aGF0IG5vCitwcm92aXNpb25zIGFyZSBlaXRoZXIgYWRkZWQgb3IgcmVtb3ZlZCBoZXJlZnJvbS4KKworVGhpcyBBZ3JlZW1lbnQgbWF5IGFwcGx5IHRvIGFueSBvciBhbGwgc29mdHdhcmUgZm9yIHdoaWNoIHRoZSBob2xkZXIgb2YKK3RoZSBlY29ub21pYyByaWdodHMgZGVjaWRlcyB0byBzdWJtaXQgdGhlIHVzZSB0aGVyZW9mIHRvIGl0cyBwcm92aXNpb25zLgorCisKKyAgICBBcnRpY2xlIDEgLSBERUZJTklUSU9OUworCitGb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBBZ3JlZW1lbnQsIHdoZW4gdGhlIGZvbGxvd2luZyBleHByZXNzaW9ucworY29tbWVuY2Ugd2l0aCBhIGNhcGl0YWwgbGV0dGVyLCB0aGV5IHNoYWxsIGhhdmUgdGhlIGZvbGxvd2luZyBtZWFuaW5nOgorCitBZ3JlZW1lbnQ6IG1lYW5zIHRoaXMgbGljZW5zZSBhZ3JlZW1lbnQsIGFuZCBpdHMgcG9zc2libGUgc3Vic2VxdWVudAordmVyc2lvbnMgYW5kIGFubmV4ZXMuCisKK1NvZnR3YXJlOiBtZWFucyB0aGUgc29mdHdhcmUgaW4gaXRzIE9iamVjdCBDb2RlIGFuZC9vciBTb3VyY2UgQ29kZSBmb3JtCithbmQsIHdoZXJlIGFwcGxpY2FibGUsIGl0cyBkb2N1bWVudGF0aW9uLCAiYXMgaXMiIHdoZW4gdGhlIExpY2Vuc2VlCithY2NlcHRzIHRoZSBBZ3JlZW1lbnQuCisKK0luaXRpYWwgU29mdHdhcmU6IG1lYW5zIHRoZSBTb2Z0d2FyZSBpbiBpdHMgU291cmNlIENvZGUgYW5kIHBvc3NpYmx5IGl0cworT2JqZWN0IENvZGUgZm9ybSBhbmQsIHdoZXJlIGFwcGxpY2FibGUsIGl0cyBkb2N1bWVudGF0aW9uLCAiYXMgaXMiIHdoZW4KK2l0IGlzIGZpcnN0IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQWdyZWVtZW50LgorCitNb2RpZmllZCBTb2Z0d2FyZTogbWVhbnMgdGhlIFNvZnR3YXJlIG1vZGlmaWVkIGJ5IGF0IGxlYXN0IG9uZSBJbnRlZ3JhdGVkCitDb250cmlidXRpb24uCisKK1NvdXJjZSBDb2RlOiBtZWFucyBhbGwgdGhlIFNvZnR3YXJlJ3MgaW5zdHJ1Y3Rpb25zIGFuZCBwcm9ncmFtIGxpbmVzIHRvCit3aGljaCBhY2Nlc3MgaXMgcmVxdWlyZWQgc28gYXMgdG8gbW9kaWZ5IHRoZSBTb2Z0d2FyZS4KKworT2JqZWN0IENvZGU6IG1lYW5zIHRoZSBiaW5hcnkgZmlsZXMgb3JpZ2luYXRpbmcgZnJvbSB0aGUgY29tcGlsYXRpb24gb2YKK3RoZSBTb3VyY2UgQ29kZS4KKworSG9sZGVyOiBtZWFucyB0aGUgaG9sZGVyKHMpIG9mIHRoZSBlY29ub21pYyByaWdodHMgb3ZlciB0aGUgSW5pdGlhbAorU29mdHdhcmUuCisKK0xpY2Vuc2VlOiBtZWFucyB0aGUgU29mdHdhcmUgdXNlcihzKSBoYXZpbmcgYWNjZXB0ZWQgdGhlIEFncmVlbWVudC4KKworQ29udHJpYnV0b3I6IG1lYW5zIGEgTGljZW5zZWUgaGF2aW5nIG1hZGUgYXQgbGVhc3Qgb25lIEludGVncmF0ZWQKK0NvbnRyaWJ1dGlvbi4KKworTGljZW5zb3I6IG1lYW5zIHRoZSBIb2xkZXIsIG9yIGFueSBvdGhlciBpbmRpdmlkdWFsIG9yIGxlZ2FsIGVudGl0eSwgd2hvCitkaXN0cmlidXRlcyB0aGUgU29mdHdhcmUgdW5kZXIgdGhlIEFncmVlbWVudC4KKworSW50ZWdyYXRlZCBDb250cmlidXRpb246IG1lYW5zIGFueSBvciBhbGwgbW9kaWZpY2F0aW9ucywgY29ycmVjdGlvbnMsCit0cmFuc2xhdGlvbnMsIGFkYXB0YXRpb25zIGFuZC9vciBuZXcgZnVuY3Rpb25zIGludGVncmF0ZWQgaW50byB0aGUgU291cmNlCitDb2RlIGJ5IGFueSBvciBhbGwgQ29udHJpYnV0b3JzLgorCitSZWxhdGVkIE1vZHVsZTogbWVhbnMgYSBzZXQgb2Ygc291cmNlcyBmaWxlcyBpbmNsdWRpbmcgdGhlaXIgZG9jdW1lbnRhdGlvbgordGhhdCwgd2l0aG91dCBtb2RpZmljYXRpb24gdG8gdGhlIFNvdXJjZSBDb2RlLCBlbmFibGVzIHN1cHBsZW1lbnRhcnkKK2Z1bmN0aW9ucyBvciBzZXJ2aWNlcyBpbiBhZGRpdGlvbiB0byB0aG9zZSBvZmZlcmVkIGJ5IHRoZSBTb2Z0d2FyZS4KKworRGVyaXZhdGl2ZSBTb2Z0d2FyZTogbWVhbnMgYW55IGNvbWJpbmF0aW9uIG9mIHRoZSBTb2Z0d2FyZSwgbW9kaWZpZWQgb3Igbm90LAorYW5kIG9mIGEgUmVsYXRlZCBNb2R1bGUuCisKK1BhcnRpZXM6IG1lYW4gYm90aCB0aGUgTGljZW5zZWUgYW5kIHRoZSBMaWNlbnNvci4KKworVGhlc2UgZXhwcmVzc2lvbnMgbWF5IGJlIHVzZWQgYm90aCBpbiBzaW5ndWxhciBhbmQgcGx1cmFsIGZvcm0uCisKKworICAgIEFydGljbGUgMiAtIFBVUlBPU0UKKworVGhlIHB1cnBvc2Ugb2YgdGhlIEFncmVlbWVudCBpcyB0aGUgZ3JhbnQgYnkgdGhlIExpY2Vuc29yIHRvIHRoZQorTGljZW5zZWUgb2YgYSBub24tZXhjbHVzaXZlLCB0cmFuc2ZlcmFibGUgYW5kIHdvcmxkd2lkZSBsaWNlbnNlIGZvciB0aGUKK1NvZnR3YXJlIGFzIHNldCBmb3J0aCBpbiBBcnRpY2xlIDUgaGVyZWluYWZ0ZXIgZm9yIHRoZSB3aG9sZSB0ZXJtIG9mIHRoZQorcHJvdGVjdGlvbiBncmFudGVkIGJ5IHRoZSByaWdodHMgb3ZlciBzYWlkIFNvZnR3YXJlLgorCisKKyAgICBBcnRpY2xlIDMgLSBBQ0NFUFRBTkNFCisKKzMuMSBUaGUgTGljZW5zZWUgc2hhbGwgYmUgZGVlbWVkIGFzIGhhdmluZyBhY2NlcHRlZCB0aGUgdGVybXMgYW5kCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IHVwb24gdGhlIG9jY3VycmVuY2Ugb2YgdGhlIGZpcnN0IG9mIHRoZQorZm9sbG93aW5nIGV2ZW50czoKKworICAgICogKGkpIGxvYWRpbmcgdGhlIFNvZnR3YXJlIGJ5IGFueSBvciBhbGwgbWVhbnMsIG5vdGFibHksIGJ5CisgICAgICBkb3dubG9hZGluZyBmcm9tIGEgcmVtb3RlIHNlcnZlciwgb3IgYnkgbG9hZGluZyBmcm9tIGEgcGh5c2ljYWwKKyAgICAgIG1lZGl1bTsKKyAgICAqIChpaSkgdGhlIGZpcnN0IHRpbWUgdGhlIExpY2Vuc2VlIGV4ZXJjaXNlcyBhbnkgb2YgdGhlIHJpZ2h0cworICAgICAgZ3JhbnRlZCBoZXJldW5kZXIuCisKKzMuMiBPbmUgY29weSBvZiB0aGUgQWdyZWVtZW50LCBjb250YWluaW5nIGEgbm90aWNlIHJlbGF0aW5nIHRvIHRoZQorY2hhcmFjdGVyaXN0aWNzIG9mIHRoZSBTb2Z0d2FyZSwgdG8gdGhlIGxpbWl0ZWQgd2FycmFudHksIGFuZCB0byB0aGUKK2ZhY3QgdGhhdCBpdHMgdXNlIGlzIHJlc3RyaWN0ZWQgdG8gZXhwZXJpZW5jZWQgdXNlcnMgaGFzIGJlZW4gcHJvdmlkZWQKK3RvIHRoZSBMaWNlbnNlZSBwcmlvciB0byBpdHMgYWNjZXB0YW5jZSBhcyBzZXQgZm9ydGggaW4gQXJ0aWNsZSAzLjEKK2hlcmVpbmFib3ZlLCBhbmQgdGhlIExpY2Vuc2VlIGhlcmVieSBhY2tub3dsZWRnZXMgdGhhdCBpdCBoYXMgcmVhZCBhbmQKK3VuZGVyc3Rvb2QgaXQuCisKKworICAgIEFydGljbGUgNCAtIEVGRkVDVElWRSBEQVRFIEFORCBURVJNCisKKworICAgICAgNC4xIEVGRkVDVElWRSBEQVRFCisKK1RoZSBBZ3JlZW1lbnQgc2hhbGwgYmVjb21lIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSB3aGVuIGl0IGlzIGFjY2VwdGVkIGJ5Cit0aGUgTGljZW5zZWUgYXMgc2V0IGZvcnRoIGluIEFydGljbGUgMy4xLgorCisKKyAgICAgIDQuMiBURVJNCisKK1RoZSBBZ3JlZW1lbnQgc2hhbGwgcmVtYWluIGluIGZvcmNlIGZvciB0aGUgZW50aXJlIGxlZ2FsIHRlcm0gb2YKK3Byb3RlY3Rpb24gb2YgdGhlIGVjb25vbWljIHJpZ2h0cyBvdmVyIHRoZSBTb2Z0d2FyZS4KKworCisgICAgQXJ0aWNsZSA1IC0gU0NPUEUgT0YgUklHSFRTIEdSQU5URUQKKworVGhlIExpY2Vuc29yIGhlcmVieSBncmFudHMgdG8gdGhlIExpY2Vuc2VlLCB3aG8gYWNjZXB0cywgdGhlIGZvbGxvd2luZworcmlnaHRzIG92ZXIgdGhlIFNvZnR3YXJlIGZvciBhbnkgb3IgYWxsIHVzZSwgYW5kIGZvciB0aGUgdGVybSBvZiB0aGUKK0FncmVlbWVudCwgb24gdGhlIGJhc2lzIG9mIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBzZXQgZm9ydGggaGVyZWluYWZ0ZXIuCisKK0Jlc2lkZXMsIGlmIHRoZSBMaWNlbnNvciBvd25zIG9yIGNvbWVzIHRvIG93biBvbmUgb3IgbW9yZSBwYXRlbnRzCitwcm90ZWN0aW5nIGFsbCBvciBwYXJ0IG9mIHRoZSBmdW5jdGlvbnMgb2YgdGhlIFNvZnR3YXJlIG9yIG9mIGl0cworY29tcG9uZW50cywgdGhlIExpY2Vuc29yIHVuZGVydGFrZXMgbm90IHRvIGVuZm9yY2UgdGhlIHJpZ2h0cyBncmFudGVkIGJ5Cit0aGVzZSBwYXRlbnRzIGFnYWluc3Qgc3VjY2Vzc2l2ZSBMaWNlbnNlZXMgdXNpbmcsIGV4cGxvaXRpbmcgb3IKK21vZGlmeWluZyB0aGUgU29mdHdhcmUuIElmIHRoZXNlIHBhdGVudHMgYXJlIHRyYW5zZmVycmVkLCB0aGUgTGljZW5zb3IKK3VuZGVydGFrZXMgdG8gaGF2ZSB0aGUgdHJhbnNmZXJlZXMgc3Vic2NyaWJlIHRvIHRoZSBvYmxpZ2F0aW9ucyBzZXQKK2ZvcnRoIGluIHRoaXMgcGFyYWdyYXBoLgorCisKKyAgICAgIDUuMSBSSUdIVCBPRiBVU0UKKworVGhlIExpY2Vuc2VlIGlzIGF1dGhvcml6ZWQgdG8gdXNlIHRoZSBTb2Z0d2FyZSwgd2l0aG91dCBhbnkgbGltaXRhdGlvbgorYXMgdG8gaXRzIGZpZWxkcyBvZiBhcHBsaWNhdGlvbiwgd2l0aCBpdCBiZWluZyBoZXJlaW5hZnRlciBzcGVjaWZpZWQKK3RoYXQgdGhpcyBjb21wcmlzZXM6CisKKyAgIDEuIHBlcm1hbmVudCBvciB0ZW1wb3JhcnkgcmVwcm9kdWN0aW9uIG9mIGFsbCBvciBwYXJ0IG9mIHRoZSBTb2Z0d2FyZQorICAgICAgYnkgYW55IG9yIGFsbCBtZWFucyBhbmQgaW4gYW55IG9yIGFsbCBmb3JtLgorICAgMi4gbG9hZGluZywgZGlzcGxheWluZywgcnVubmluZywgb3Igc3RvcmluZyB0aGUgU29mdHdhcmUgb24gYW55IG9yCisgICAgICBhbGwgbWVkaXVtLgorICAgMy4gZW50aXRsZW1lbnQgdG8gb2JzZXJ2ZSwgc3R1ZHkgb3IgdGVzdCBpdHMgb3BlcmF0aW9uIHNvIGFzIHRvCisgICAgICBkZXRlcm1pbmUgdGhlIGlkZWFzIGFuZCBwcmluY2lwbGVzIGJlaGluZCBhbnkgb3IgYWxsIGNvbnN0aXR1ZW50CisgICAgICBlbGVtZW50cyBvZiBzYWlkIFNvZnR3YXJlLiBUaGlzIHNoYWxsIGFwcGx5IHdoZW4gdGhlIExpY2Vuc2VlCisgICAgICBjYXJyaWVzIG91dCBhbnkgb3IgYWxsIGxvYWRpbmcsIGRpc3BsYXlpbmcsIHJ1bm5pbmcsIHRyYW5zbWlzc2lvbgorICAgICAgb3Igc3RvcmFnZSBvcGVyYXRpb24gYXMgcmVnYXJkcyB0aGUgU29mdHdhcmUsIHRoYXQgaXQgaXMgZW50aXRsZWQKKyAgICAgIHRvIGNhcnJ5IG91dCBoZXJldW5kZXIuCisKKworICAgICAgNS4yIFJJR0hUIE9GIE1PRElGSUNBVElPTgorCitUaGUgcmlnaHQgb2YgbW9kaWZpY2F0aW9uIGluY2x1ZGVzIHRoZSByaWdodCB0byB0cmFuc2xhdGUsIGFkYXB0LCBhcnJhbmdlLAorb3IgbWFrZSBhbnkgb3IgYWxsIG1vZGlmaWNhdGlvbnMgdG8gdGhlIFNvZnR3YXJlLCBhbmQgdGhlIHJpZ2h0IHRvCityZXByb2R1Y2UgdGhlIHJlc3VsdGluZyBTb2Z0d2FyZS4gSXQgaW5jbHVkZXMsIGluIHBhcnRpY3VsYXIsIHRoZSByaWdodAordG8gY3JlYXRlIGEgRGVyaXZhdGl2ZSBTb2Z0d2FyZS4KKworVGhlIExpY2Vuc2VlIGlzIGF1dGhvcml6ZWQgdG8gbWFrZSBhbnkgb3IgYWxsIG1vZGlmaWNhdGlvbiB0byB0aGUKK1NvZnR3YXJlIHByb3ZpZGVkIHRoYXQgaXQgaW5jbHVkZXMgYW4gZXhwbGljaXQgbm90aWNlIHRoYXQgaXQgaXMgdGhlCithdXRob3Igb2Ygc2FpZCBtb2RpZmljYXRpb24gYW5kIGluZGljYXRlcyB0aGUgZGF0ZSBvZiB0aGUgY3JlYXRpb24gdGhlcmVvZi4KKworCisgICAgICA1LjMgUklHSFQgT0YgRElTVFJJQlVUSU9OCisKK0luIHBhcnRpY3VsYXIsIHRoZSByaWdodCBvZiBkaXN0cmlidXRpb24gaW5jbHVkZXMgdGhlIHJpZ2h0IHRvIHB1Ymxpc2gsCit0cmFuc21pdCBhbmQgY29tbXVuaWNhdGUgdGhlIFNvZnR3YXJlIHRvIHRoZSBnZW5lcmFsIHB1YmxpYyBvbiBhbnkgb3IKK2FsbCBtZWRpdW0sIGFuZCBieSBhbnkgb3IgYWxsIG1lYW5zLCBhbmQgdGhlIHJpZ2h0IHRvIG1hcmtldCwgZWl0aGVyIGluCitjb25zaWRlcmF0aW9uIG9mIGEgZmVlLCBvciBmcmVlIG9mIGNoYXJnZSwgb25lIG9yIG1vcmUgY29waWVzIG9mIHRoZQorU29mdHdhcmUgYnkgYW55IG1lYW5zLgorCitUaGUgTGljZW5zZWUgaXMgZnVydGhlciBhdXRob3JpemVkIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBtb2RpZmllZAorb3IgdW5tb2RpZmllZCBTb2Z0d2FyZSB0byB0aGlyZCBwYXJ0aWVzIGFjY29yZGluZyB0byB0aGUgdGVybXMgYW5kCitjb25kaXRpb25zIHNldCBmb3J0aCBoZXJlaW5hZnRlci4KKworCisgICAgICAgIDUuMy4xIERJU1RSSUJVVElPTiBPRiBTT0ZUV0FSRSBXSVRIT1VUIE1PRElGSUNBVElPTgorCitUaGUgTGljZW5zZWUgaXMgYXV0aG9yaXplZCB0byBkaXN0cmlidXRlIHRydWUgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSBpbgorU291cmNlIENvZGUgb3IgT2JqZWN0IENvZGUgZm9ybSwgcHJvdmlkZWQgdGhhdCBzYWlkIGRpc3RyaWJ1dGlvbgorY29tcGxpZXMgd2l0aCBhbGwgdGhlIHByb3Zpc2lvbnMgb2YgdGhlIEFncmVlbWVudCBhbmQgaXMgYWNjb21wYW5pZWQgYnk6CisKKyAgIDEuIGEgY29weSBvZiB0aGUgQWdyZWVtZW50LAorCisgICAyLiBhIG5vdGljZSByZWxhdGluZyB0byB0aGUgbGltaXRhdGlvbiBvZiBib3RoIHRoZSBMaWNlbnNvcidzCisgICAgICB3YXJyYW50eSBhbmQgbGlhYmlsaXR5IGFzIHNldCBmb3J0aCBpbiBBcnRpY2xlcyA4IGFuZCA5LAorCithbmQgdGhhdCwgaW4gdGhlIGV2ZW50IHRoYXQgb25seSB0aGUgT2JqZWN0IENvZGUgb2YgdGhlIFNvZnR3YXJlIGlzCityZWRpc3RyaWJ1dGVkLCB0aGUgTGljZW5zZWUgYWxsb3dzIGVmZmVjdGl2ZSBhY2Nlc3MgdG8gdGhlIGZ1bGwgU291cmNlIENvZGUKK29mIHRoZSBTb2Z0d2FyZSBhdCBhIG1pbmltdW0gZHVyaW5nIHRoZSBlbnRpcmUgcGVyaW9kIG9mIGl0cyBkaXN0cmlidXRpb24KK29mIHRoZSBTb2Z0d2FyZSwgaXQgYmVpbmcgdW5kZXJzdG9vZCB0aGF0IHRoZSBhZGRpdGlvbmFsIGNvc3Qgb2YgYWNxdWlyaW5nCit0aGUgU291cmNlIENvZGUgc2hhbGwgbm90IGV4Y2VlZCB0aGUgY29zdCBvZiB0cmFuc2ZlcnJpbmcgdGhlIGRhdGEuCisKKworICAgICAgICA1LjMuMiBESVNUUklCVVRJT04gT0YgTU9ESUZJRUQgU09GVFdBUkUKKworV2hlbiB0aGUgTGljZW5zZWUgbWFrZXMgYW4gSW50ZWdyYXRlZCBDb250cmlidXRpb24gdG8gdGhlIFNvZnR3YXJlLCB0aGUgdGVybXMKK2FuZCBjb25kaXRpb25zIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSByZXN1bHRpbmcgTW9kaWZpZWQgU29mdHdhcmUgYmVjb21lCitzdWJqZWN0IHRvIGFsbCB0aGUgcHJvdmlzaW9ucyBvZiB0aGlzIEFncmVlbWVudC4KKworVGhlIExpY2Vuc2VlIGlzIGF1dGhvcml6ZWQgdG8gZGlzdHJpYnV0ZSB0aGUgTW9kaWZpZWQgU29mdHdhcmUsIGluIHNvdXJjZQorY29kZSBvciBvYmplY3QgY29kZSBmb3JtLCBwcm92aWRlZCB0aGF0IHNhaWQgZGlzdHJpYnV0aW9uIGNvbXBsaWVzIHdpdGggYWxsCit0aGUgcHJvdmlzaW9ucyBvZiB0aGUgQWdyZWVtZW50IGFuZCBpcyBhY2NvbXBhbmllZCBieToKKworICAgMS4gYSBjb3B5IG9mIHRoZSBBZ3JlZW1lbnQsCisgICAyLiBhIG5vdGljZSByZWxhdGluZyB0byB0aGUgbGltaXRhdGlvbiBvZiBib3RoIHRoZSBMaWNlbnNvcidzIHdhcnJhbnR5IGFuZAorICAgICAgbGlhYmlsaXR5IGFzIHNldCBmb3J0aCBpbiBBcnRpY2xlcyA4IGFuZCA5LAorCithbmQgdGhhdCwgaW4gdGhlIGV2ZW50IHRoYXQgb25seSB0aGUgb2JqZWN0IGNvZGUgb2YgdGhlIE1vZGlmaWVkIFNvZnR3YXJlIGlzCityZWRpc3RyaWJ1dGVkLCB0aGUgTGljZW5zZWUgYWxsb3dzIGVmZmVjdGl2ZSBhY2Nlc3MgdG8gdGhlIGZ1bGwgc291cmNlIGNvZGUKK29mIHRoZSBNb2RpZmllZCBTb2Z0d2FyZSBhdCBhIG1pbmltdW0gZHVyaW5nIHRoZSBlbnRpcmUgcGVyaW9kIG9mIGl0cworZGlzdHJpYnV0aW9uIG9mIHRoZSBNb2RpZmllZCBTb2Z0d2FyZSwgaXQgYmVpbmcgdW5kZXJzdG9vZCB0aGF0IHRoZQorYWRkaXRpb25hbCBjb3N0IG9mIGFjcXVpcmluZyB0aGUgc291cmNlIGNvZGUgc2hhbGwgbm90IGV4Y2VlZCB0aGUgY29zdCBvZgordHJhbnNmZXJyaW5nIHRoZSBkYXRhLgorCisgICAgICAgIDUuMy4zIERJU1RSSUJVVElPTiBPRiBERVJJVkFUSVZFIFNPRlRXQVJFCisKK1doZW4gdGhlIExpY2Vuc2VlIGNyZWF0ZXMgRGVyaXZhdGl2ZSBTb2Z0d2FyZSwgdGhpcyBEZXJpdmF0aXZlIFNvZnR3YXJlIG1heQorYmUgZGlzdHJpYnV0ZWQgdW5kZXIgYSBsaWNlbnNlIGFncmVlbWVudCBvdGhlciB0aGFuIHRoaXMgQWdyZWVtZW50LCBzdWJqZWN0Cit0byBjb21wbGlhbmNlIHdpdGggdGhlIHJlcXVpcmVtZW50IHRvIGluY2x1ZGUgYSBub3RpY2UgY29uY2VybmluZyB0aGUgcmlnaHRzCitvdmVyIHRoZSBTb2Z0d2FyZSBhcyBkZWZpbmVkIGluIEFydGljbGUgNi40LiBJbiB0aGUgZXZlbnQgdGhlIGNyZWF0aW9uIG9mIHRoZQorRGVyaXZhdGl2ZSBTb2Z0d2FyZSByZXF1aXJlZCBtb2RpZmljYXRpb24gb2YgdGhlIFNvdXJjZSBDb2RlLCB0aGUgTGljZW5zZWUKK3VuZGVydGFrZXMgdGhhdDoKKworICAgMS4gdGhlIHJlc3VsdGluZyBNb2RpZmllZCBTb2Z0d2FyZSB3aWxsIGJlIGdvdmVybmVkIGJ5IHRoaXMgQWdyZWVtZW50LAorICAgMi4gdGhlIEludGVncmF0ZWQgQ29udHJpYnV0aW9ucyBpbiB0aGUgcmVzdWx0aW5nIE1vZGlmaWVkIFNvZnR3YXJlIHdpbGwgYmUKKyAgICAgIGNsZWFybHkgaWRlbnRpZmllZCBhbmQgZG9jdW1lbnRlZCwKKyAgIDMuIHRoZSBMaWNlbnNlZSB3aWxsIGFsbG93IGVmZmVjdGl2ZSBhY2Nlc3MgdG8gdGhlIHNvdXJjZSBjb2RlIG9mIHRoZQorICAgICAgTW9kaWZpZWQgU29mdHdhcmUsIGF0IGEgbWluaW11bSBkdXJpbmcgdGhlIGVudGlyZSBwZXJpb2Qgb2YKKyAgICAgIGRpc3RyaWJ1dGlvbiBvZiB0aGUgRGVyaXZhdGl2ZSBTb2Z0d2FyZSwgc3VjaCB0aGF0IHN1Y2ggbW9kaWZpY2F0aW9ucworICAgICAgbWF5IGJlIGNhcnJpZWQgb3ZlciBpbiBhIHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgU29mdHdhcmU7IGl0IGJlaW5nCisgICAgICB1bmRlcnN0b29kIHRoYXQgdGhlIGFkZGl0aW9uYWwgY29zdCBvZiBwdXJjaGFzaW5nIHRoZSBzb3VyY2UgY29kZSBvZgorICAgICAgdGhlIE1vZGlmaWVkIFNvZnR3YXJlIHNoYWxsIG5vdCBleGNlZWQgdGhlIGNvc3Qgb2YgdHJhbnNmZXJyaW5nIHRoZQorICAgICAgZGF0YS4KKworCisgICAgICAgIDUuMy40IENPTVBBVElCSUxJVFkgV0lUSCBUSEUgQ2VDSUxMIExJQ0VOU0UKKworV2hlbiBhIE1vZGlmaWVkIFNvZnR3YXJlIGNvbnRhaW5zIGFuIEludGVncmF0ZWQgQ29udHJpYnV0aW9uIHN1YmplY3QgdG8gdGhlCitDZUNpbGwgbGljZW5zZSBhZ3JlZW1lbnQsIG9yIHdoZW4gYSBEZXJpdmF0aXZlIFNvZnR3YXJlIGNvbnRhaW5zIGEgUmVsYXRlZAorTW9kdWxlIHN1YmplY3QgdG8gdGhlIENlQ2lsbCBsaWNlbnNlIGFncmVlbWVudCwgdGhlIHByb3Zpc2lvbnMgc2V0IGZvcnRoIGluCit0aGUgdGhpcmQgaXRlbSBvZiBBcnRpY2xlIDYuNCBhcmUgb3B0aW9uYWwuCisKKworICAgIEFydGljbGUgNiAtIElOVEVMTEVDVFVBTCBQUk9QRVJUWQorCisKKyAgICAgIDYuMSBPVkVSIFRIRSBJTklUSUFMIFNPRlRXQVJFCisKK1RoZSBIb2xkZXIgb3ducyB0aGUgZWNvbm9taWMgcmlnaHRzIG92ZXIgdGhlIEluaXRpYWwgU29mdHdhcmUuIEFueSBvcgorYWxsIHVzZSBvZiB0aGUgSW5pdGlhbCBTb2Z0d2FyZSBpcyBzdWJqZWN0IHRvIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMKK2FuZCBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZSBIb2xkZXIgaGFzIGVsZWN0ZWQgdG8gZGlzdHJpYnV0ZSBpdHMgd29yaworYW5kIG5vIG9uZSBzaGFsbCBiZSBlbnRpdGxlZCB0byBtb2RpZnkgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB0aGUKK2Rpc3RyaWJ1dGlvbiBvZiBzYWlkIEluaXRpYWwgU29mdHdhcmUuCisKK1RoZSBIb2xkZXIgdW5kZXJ0YWtlcyB0aGF0IHRoZSBJbml0aWFsIFNvZnR3YXJlIHdpbGwgcmVtYWluIHJ1bGVkIGF0CitsZWFzdCBieSB0aGUgY3VycmVudCBsaWNlbnNlLCBmb3IgdGhlIGR1cmF0aW9uIHNldCBmb3J0aCBpbiBBcnRpY2xlIDQuMi4KKworCisgICAgICA2LjIgT1ZFUiBUSEUgSU5URUdSQVRFRCBDT05UUklCVVRJT05TCisKK0EgTGljZW5zZWUgd2hvIGRldmVsb3BzIGFuIEludGVncmF0ZWQgQ29udHJpYnV0aW9uIGlzIHRoZSBvd25lciBvZiB0aGUKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3ZlciB0aGlzIENvbnRyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5CithcHBsaWNhYmxlIGxhdy4KKworCisgICAgICA2LjMgT1ZFUiBUSEUgUkVMQVRFRCBNT0RVTEVTCisKK0EgTGljZW5zZWUgd2hvIGRldmVsb3BzIGFuIFJlbGF0ZWQgTW9kdWxlIGlzIHRoZSBvd25lciBvZiB0aGUKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3ZlciB0aGlzIFJlbGF0ZWQgTW9kdWxlIGFzIGRlZmluZWQgYnkKK2FwcGxpY2FibGUgbGF3IGFuZCBpcyBmcmVlIHRvIGNob29zZSB0aGUgdHlwZSBvZiBhZ3JlZW1lbnQgdGhhdCBzaGFsbAorZ292ZXJuIGl0cyBkaXN0cmlidXRpb24gdW5kZXIgdGhlIGNvbmRpdGlvbnMgZGVmaW5lZCBpbiBBcnRpY2xlIDUuMy4zLgorCisKKyAgICAgIDYuNCBOT1RJQ0UgT0YgUklHSFRTCisKK1RoZSBMaWNlbnNlZSBleHByZXNzbHkgdW5kZXJ0YWtlczoKKworICAgMS4gbm90IHRvIHJlbW92ZSwgb3IgbW9kaWZ5LCBpbiBhbnkgbWFubmVyLCB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5CisgICAgICBub3RpY2VzIGF0dGFjaGVkIHRvIHRoZSBTb2Z0d2FyZTsKKyAgIDIuIHRvIHJlcHJvZHVjZSBzYWlkIG5vdGljZXMsIGluIGFuIGlkZW50aWNhbCBtYW5uZXIsIGluIHRoZSBjb3BpZXMKKyAgICAgIG9mIHRoZSBTb2Z0d2FyZSBtb2RpZmllZCBvciBub3Q7CisgICAzLiB0byBlbnN1cmUgdGhhdCB1c2Ugb2YgdGhlIFNvZnR3YXJlLCBpdHMgaW50ZWxsZWN0dWFsIHByb3BlcnR5CisgICAgICBub3RpY2VzIGFuZCB0aGUgZmFjdCB0aGF0IGl0IGlzIGdvdmVybmVkIGJ5IHRoZSBBZ3JlZW1lbnQgaXMKKyAgICAgIGluZGljYXRlZCBpbiBhIHRleHQgdGhhdCBpcyBlYXNpbHkgYWNjZXNzaWJsZSwgc3BlY2lmaWNhbGx5IGZyb20KKyAgICAgIHRoZSBpbnRlcmZhY2Ugb2YgYW55IERlcml2YXRpdmUgU29mdHdhcmUuCisKK1RoZSBMaWNlbnNlZSB1bmRlcnRha2VzIG5vdCB0byBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlIHRoZQoraW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiB0aGUgSG9sZGVyIGFuZC9vciBDb250cmlidXRvcnMgb24gdGhlCitTb2Z0d2FyZSBhbmQgdG8gdGFrZSwgd2hlcmUgYXBwbGljYWJsZSwgdmlzLcOgLXZpcyBpdHMgc3RhZmYsIGFueSBhbmQgYWxsCittZWFzdXJlcyByZXF1aXJlZCB0byBlbnN1cmUgcmVzcGVjdCBvZiBzYWlkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMKK29mIHRoZSBIb2xkZXIgYW5kL29yIENvbnRyaWJ1dG9ycy4KKworCisgICAgQXJ0aWNsZSA3IC0gUkVMQVRFRCBTRVJWSUNFUworCis3LjEgVW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBzaGFsbCB0aGUgQWdyZWVtZW50IG9ibGlnZSB0aGUgTGljZW5zb3IgdG8KK3Byb3ZpZGUgdGVjaG5pY2FsIGFzc2lzdGFuY2Ugb3IgbWFpbnRlbmFuY2Ugc2VydmljZXMgZm9yIHRoZSBTb2Z0d2FyZS4KKworSG93ZXZlciwgdGhlIExpY2Vuc29yIGlzIGVudGl0bGVkIHRvIG9mZmVyIHRoaXMgdHlwZSBvZiBzZXJ2aWNlcy4gVGhlCit0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiBzdWNoIHRlY2huaWNhbCBhc3Npc3RhbmNlLCBhbmQvb3Igc3VjaAorbWFpbnRlbmFuY2UsIHNoYWxsIGJlIHNldCBmb3J0aCBpbiBhIHNlcGFyYXRlIGluc3RydW1lbnQuIE9ubHkgdGhlCitMaWNlbnNvciBvZmZlcmluZyBzYWlkIG1haW50ZW5hbmNlIGFuZC9vciB0ZWNobmljYWwgYXNzaXN0YW5jZSBzZXJ2aWNlcworc2hhbGwgaW5jdXIgbGlhYmlsaXR5IHRoZXJlZm9yLgorCis3LjIgU2ltaWxhcmx5LCBhbnkgTGljZW5zb3IgaXMgZW50aXRsZWQgdG8gb2ZmZXIgdG8gaXRzIGxpY2Vuc2VlcywgdW5kZXIKK2l0cyBzb2xlIHJlc3BvbnNpYmlsaXR5LCBhIHdhcnJhbnR5LCB0aGF0IHNoYWxsIG9ubHkgYmUgYmluZGluZyB1cG9uCitpdHNlbGYsIGZvciB0aGUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFNvZnR3YXJlIGFuZC9vciB0aGUgTW9kaWZpZWQKK1NvZnR3YXJlLCB1bmRlciB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGF0IGl0IGlzIGZyZWUgdG8gZGVjaWRlLiBTYWlkCit3YXJyYW50eSwgYW5kIHRoZSBmaW5hbmNpYWwgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgaXRzIGFwcGxpY2F0aW9uLAorc2hhbGwgYmUgc3ViamVjdCBvZiBhIHNlcGFyYXRlIGluc3RydW1lbnQgZXhlY3V0ZWQgYmV0d2VlbiB0aGUgTGljZW5zb3IKK2FuZCB0aGUgTGljZW5zZWUuCisKKworICAgIEFydGljbGUgOCAtIExJQUJJTElUWQorCis4LjEgU3ViamVjdCB0byB0aGUgcHJvdmlzaW9ucyBvZiBBcnRpY2xlIDguMiwgdGhlIExpY2Vuc2VlIHNoYWxsIGJlCitlbnRpdGxlZCB0byBjbGFpbSBjb21wZW5zYXRpb24gZm9yIGFueSBkaXJlY3QgbG9zcyBpdCBtYXkgaGF2ZSBzdWZmZXJlZAorZnJvbSB0aGUgU29mdHdhcmUgYXMgYSByZXN1bHQgb2YgYSBmYXVsdCBvbiB0aGUgcGFydCBvZiB0aGUgcmVsZXZhbnQKK0xpY2Vuc29yLCBzdWJqZWN0IHRvIHByb3ZpZGluZyBldmlkZW5jZSB0aGVyZW9mLgorCis4LjIgVGhlIExpY2Vuc29yJ3MgbGlhYmlsaXR5IGlzIGxpbWl0ZWQgdG8gdGhlIGNvbW1pdG1lbnRzIG1hZGUgdW5kZXIKK3RoaXMgQWdyZWVtZW50IGFuZCBzaGFsbCBub3QgYmUgaW5jdXJyZWQgYXMgYSByZXN1bHQgb2YgaW4gcGFydGljdWxhcjoKKyhpKSBsb3NzIGR1ZSB0aGUgTGljZW5zZWUncyB0b3RhbCBvciBwYXJ0aWFsIGZhaWx1cmUgdG8gZnVsZmlsbCBpdHMKK29ibGlnYXRpb25zLCAoaWkpIGRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGxvc3MgdGhhdCBpcyBzdWZmZXJlZCBieSB0aGUKK0xpY2Vuc2VlIGR1ZSB0byB0aGUgdXNlIG9yIHBlcmZvcm1hbmNlIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIChpaWkpIG1vcmUKK2dlbmVyYWxseSwgYW55IGNvbnNlcXVlbnRpYWwgbG9zcy4gSW4gcGFydGljdWxhciB0aGUgUGFydGllcyBleHByZXNzbHkKK2FncmVlIHRoYXQgYW55IG9yIGFsbCBwZWN1bmlhcnkgb3IgYnVzaW5lc3MgbG9zcyAoaS5lLiBsb3NzIG9mIGRhdGEsCitsb3NzIG9mIHByb2ZpdHMsIG9wZXJhdGluZyBsb3NzLCBsb3NzIG9mIGN1c3RvbWVycyBvciBvcmRlcnMsCitvcHBvcnR1bml0eSBjb3N0LCBhbnkgZGlzdHVyYmFuY2UgdG8gYnVzaW5lc3MgYWN0aXZpdGllcykgb3IgYW55IG9yIGFsbAorbGVnYWwgcHJvY2VlZGluZ3MgaW5zdGl0dXRlZCBhZ2FpbnN0IHRoZSBMaWNlbnNlZSBieSBhIHRoaXJkIHBhcnR5LAorc2hhbGwgY29uc3RpdHV0ZSBjb25zZXF1ZW50aWFsIGxvc3MgYW5kIHNoYWxsIG5vdCBwcm92aWRlIGVudGl0bGVtZW50IHRvCithbnkgb3IgYWxsIGNvbXBlbnNhdGlvbiBmcm9tIHRoZSBMaWNlbnNvci4KKworCisgICAgQXJ0aWNsZSA5IC0gV0FSUkFOVFkKKworOS4xIFRoZSBMaWNlbnNlZSBhY2tub3dsZWRnZXMgdGhhdCB0aGUgc2NpZW50aWZpYyBhbmQgdGVjaG5pY2FsCitzdGF0ZS1vZi10aGUtYXJ0IHdoZW4gdGhlIFNvZnR3YXJlIHdhcyBkaXN0cmlidXRlZCBkaWQgbm90IGVuYWJsZSBhbGwKK3Bvc3NpYmxlIHVzZXMgdG8gYmUgdGVzdGVkIGFuZCB2ZXJpZmllZCwgbm9yIGZvciB0aGUgcHJlc2VuY2Ugb2YKK3Bvc3NpYmxlIGRlZmVjdHMgdG8gYmUgZGV0ZWN0ZWQuIEluIHRoaXMgcmVzcGVjdCwgdGhlIExpY2Vuc2VlJ3MKK2F0dGVudGlvbiBoYXMgYmVlbiBkcmF3biB0byB0aGUgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGxvYWRpbmcsIHVzaW5nLAorbW9kaWZ5aW5nIGFuZC9vciBkZXZlbG9waW5nIGFuZCByZXByb2R1Y2luZyB0aGUgU29mdHdhcmUgd2hpY2ggYXJlCityZXNlcnZlZCBmb3IgZXhwZXJpZW5jZWQgdXNlcnMuCisKK1RoZSBMaWNlbnNlZSBzaGFsbCBiZSByZXNwb25zaWJsZSBmb3IgdmVyaWZ5aW5nLCBieSBhbnkgb3IgYWxsIG1lYW5zLAordGhlIHN1aXRhYmlsaXR5IG9mIHRoZSBwcm9kdWN0IGZvciBpdHMgcmVxdWlyZW1lbnRzLCBpdHMgZ29vZCB3b3JraW5nIG9yZGVyLAorYW5kIGZvciBlbnN1cmluZyB0aGF0IGl0IHNoYWxsIG5vdCBjYXVzZSBkYW1hZ2UgdG8gZWl0aGVyIHBlcnNvbnMgb3IKK3Byb3BlcnRpZXMuCisKKzkuMiBUaGUgTGljZW5zb3IgaGVyZWJ5IHJlcHJlc2VudHMsIGluIGdvb2QgZmFpdGgsIHRoYXQgaXQgaXMgZW50aXRsZWQKK3RvIGdyYW50IGFsbCB0aGUgcmlnaHRzIG92ZXIgdGhlIFNvZnR3YXJlIChpbmNsdWRpbmcgaW4gcGFydGljdWxhciB0aGUKK3JpZ2h0cyBzZXQgZm9ydGggaW4gQXJ0aWNsZSA1KS4KKworOS4zIFRoZSBMaWNlbnNlZSBhY2tub3dsZWRnZXMgdGhhdCB0aGUgU29mdHdhcmUgaXMgc3VwcGxpZWQgImFzIGlzIiBieQordGhlIExpY2Vuc29yIHdpdGhvdXQgYW55IG90aGVyIGV4cHJlc3Mgb3IgdGFjaXQgd2FycmFudHksIG90aGVyIHRoYW4KK3RoYXQgcHJvdmlkZWQgZm9yIGluIEFydGljbGUgOS4yIGFuZCwgaW4gcGFydGljdWxhciwgd2l0aG91dCBhbnkgd2FycmFudHkKK2FzIHRvIGl0cyBjb21tZXJjaWFsIHZhbHVlLCBpdHMgc2VjdXJlZCwgc2FmZSwgaW5ub3ZhdGl2ZSBvciByZWxldmFudAorbmF0dXJlLgorCitTcGVjaWZpY2FsbHksIHRoZSBMaWNlbnNvciBkb2VzIG5vdCB3YXJyYW50IHRoYXQgdGhlIFNvZnR3YXJlIGlzIGZyZWUKK2Zyb20gYW55IGVycm9yLCB0aGF0IGl0IHdpbGwgb3BlcmF0ZSB3aXRob3V0IGludGVycnVwdGlvbiwgdGhhdCBpdCB3aWxsCitiZSBjb21wYXRpYmxlIHdpdGggdGhlIExpY2Vuc2VlJ3Mgb3duIGVxdWlwbWVudCBhbmQgc29mdHdhcmUKK2NvbmZpZ3VyYXRpb24sIG5vciB0aGF0IGl0IHdpbGwgbWVldCB0aGUgTGljZW5zZWUncyByZXF1aXJlbWVudHMuCisKKzkuNCBUaGUgTGljZW5zb3IgZG9lcyBub3QgZWl0aGVyIGV4cHJlc3NseSBvciB0YWNpdGx5IHdhcnJhbnQgdGhhdCB0aGUKK1NvZnR3YXJlIGRvZXMgbm90IGluZnJpbmdlIGFueSB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHQKK3JlbGF0aW5nIHRvIGEgcGF0ZW50LCBzb2Z0d2FyZSBvciBhbnkgb3RoZXIgcHJvcGVydHkgcmlnaHQuIFRoZXJlZm9yZSwKK3RoZSBMaWNlbnNvciBkaXNjbGFpbXMgYW55IGFuZCBhbGwgbGlhYmlsaXR5IHRvd2FyZHMgdGhlIExpY2Vuc2VlCithcmlzaW5nIG91dCBvZiBhbnkgb3IgYWxsIHByb2NlZWRpbmdzIGZvciBpbmZyaW5nZW1lbnQgdGhhdCBtYXkgYmUKK2luc3RpdHV0ZWQgaW4gcmVzcGVjdCBvZiB0aGUgdXNlLCBtb2RpZmljYXRpb24gYW5kIHJlZGlzdHJpYnV0aW9uIG9mIHRoZQorU29mdHdhcmUuIE5ldmVydGhlbGVzcywgc2hvdWxkIHN1Y2ggcHJvY2VlZGluZ3MgYmUgaW5zdGl0dXRlZCBhZ2FpbnN0Cit0aGUgTGljZW5zZWUsIHRoZSBMaWNlbnNvciBzaGFsbCBwcm92aWRlIGl0IHdpdGggdGVjaG5pY2FsIGFuZCBsZWdhbAorYXNzaXN0YW5jZSBmb3IgaXRzIGRlZmVuc2UuIFN1Y2ggdGVjaG5pY2FsIGFuZCBsZWdhbCBhc3Npc3RhbmNlIHNoYWxsIGJlCitkZWNpZGVkIG9uIGEgY2FzZS1ieS1jYXNlIGJhc2lzIGJldHdlZW4gdGhlIHJlbGV2YW50IExpY2Vuc29yIGFuZCB0aGUKK0xpY2Vuc2VlIHB1cnN1YW50IHRvIGEgbWVtb3JhbmR1bSBvZiB1bmRlcnN0YW5kaW5nLiBUaGUgTGljZW5zb3IKK2Rpc2NsYWltcyBhbnkgYW5kIGFsbCBsaWFiaWxpdHkgYXMgcmVnYXJkcyB0aGUgTGljZW5zZWUncyB1c2Ugb2YgdGhlCituYW1lIG9mIHRoZSBTb2Z0d2FyZS4gTm8gd2FycmFudHkgaXMgZ2l2ZW4gYXMgcmVnYXJkcyB0aGUgZXhpc3RlbmNlIG9mCitwcmlvciByaWdodHMgb3ZlciB0aGUgbmFtZSBvZiB0aGUgU29mdHdhcmUgb3IgYXMgcmVnYXJkcyB0aGUgZXhpc3RlbmNlCitvZiBhIHRyYWRlbWFyay4KKworCisgICAgQXJ0aWNsZSAxMCAtIFRFUk1JTkFUSU9OCisKKzEwLjEgSW4gdGhlIGV2ZW50IG9mIGEgYnJlYWNoIGJ5IHRoZSBMaWNlbnNlZSBvZiBpdHMgb2JsaWdhdGlvbnMKK2hlcmV1bmRlciwgdGhlIExpY2Vuc29yIG1heSBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB0aGlzIEFncmVlbWVudAordGhpcnR5ICgzMCkgZGF5cyBhZnRlciBub3RpY2UgaGFzIGJlZW4gc2VudCB0byB0aGUgTGljZW5zZWUgYW5kIGhhcworcmVtYWluZWQgaW5lZmZlY3RpdmUuCisKKzEwLjIgQSBMaWNlbnNlZSB3aG9zZSBBZ3JlZW1lbnQgaXMgdGVybWluYXRlZCBzaGFsbCBubyBsb25nZXIgYmUKK2F1dGhvcml6ZWQgdG8gdXNlLCBtb2RpZnkgb3IgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUuIEhvd2V2ZXIsIGFueQorbGljZW5zZXMgdGhhdCBpdCBtYXkgaGF2ZSBncmFudGVkIHByaW9yIHRvIHRlcm1pbmF0aW9uIG9mIHRoZSBBZ3JlZW1lbnQKK3NoYWxsIHJlbWFpbiB2YWxpZCBzdWJqZWN0IHRvIHRoZWlyIGhhdmluZyBiZWVuIGdyYW50ZWQgaW4gY29tcGxpYW5jZQord2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgaGVyZW9mLgorCisKKyAgICBBcnRpY2xlIDExIC0gTUlTQ0VMTEFORU9VUworCisKKyAgICAgIDExLjEgRVhDVVNBQkxFIEVWRU5UUworCitOZWl0aGVyIFBhcnR5IHNoYWxsIGJlIGxpYWJsZSBmb3IgYW55IG9yIGFsbCBkZWxheSwgb3IgZmFpbHVyZSB0bworcGVyZm9ybSB0aGUgQWdyZWVtZW50LCB0aGF0IG1heSBiZSBhdHRyaWJ1dGFibGUgdG8gYW4gZXZlbnQgb2YgZm9yY2UKK21hamV1cmUsIGFuIGFjdCBvZiBHb2Qgb3IgYW4gb3V0c2lkZSBjYXVzZSwgc3VjaCBhcyBkZWZlY3RpdmUKK2Z1bmN0aW9uaW5nIG9yIGludGVycnVwdGlvbnMgb2YgdGhlIGVsZWN0cmljaXR5IG9yIHRlbGVjb21tdW5pY2F0aW9ucworbmV0d29ya3MsIG5ldHdvcmsgcGFyYWx5c2lzIGZvbGxvd2luZyBhIHZpcnVzIGF0dGFjaywgaW50ZXJ2ZW50aW9uIGJ5Citnb3Zlcm5tZW50IGF1dGhvcml0aWVzLCBuYXR1cmFsIGRpc2FzdGVycywgd2F0ZXIgZGFtYWdlLCBlYXJ0aHF1YWtlcywKK2ZpcmUsIGV4cGxvc2lvbnMsIHN0cmlrZXMgYW5kIGxhYm9yIHVucmVzdCwgd2FyLCBldGMuCisKKzExLjIgQW55IGZhaWx1cmUgYnkgZWl0aGVyIFBhcnR5LCBvbiBvbmUgb3IgbW9yZSBvY2Nhc2lvbnMsIHRvIGludm9rZQorb25lIG9yIG1vcmUgb2YgdGhlIHByb3Zpc2lvbnMgaGVyZW9mLCBzaGFsbCB1bmRlciBubyBjaXJjdW1zdGFuY2VzIGJlCitpbnRlcnByZXRlZCBhcyBiZWluZyBhIHdhaXZlciBieSB0aGUgaW50ZXJlc3RlZCBQYXJ0eSBvZiBpdHMgcmlnaHQgdG8KK2ludm9rZSBzYWlkIHByb3Zpc2lvbihzKSBzdWJzZXF1ZW50bHkuCisKKzExLjMgVGhlIEFncmVlbWVudCBjYW5jZWxzIGFuZCByZXBsYWNlcyBhbnkgb3IgYWxsIHByZXZpb3VzIGFncmVlbWVudHMsCit3aGV0aGVyIHdyaXR0ZW4gb3Igb3JhbCwgYmV0d2VlbiB0aGUgUGFydGllcyBhbmQgaGF2aW5nIHRoZSBzYW1lCitwdXJwb3NlLCBhbmQgY29uc3RpdHV0ZXMgdGhlIGVudGlyZXR5IG9mIHRoZSBhZ3JlZW1lbnQgYmV0d2VlbiBzYWlkCitQYXJ0aWVzIGNvbmNlcm5pbmcgc2FpZCBwdXJwb3NlLiBObyBzdXBwbGVtZW50IG9yIG1vZGlmaWNhdGlvbiB0byB0aGUKK3Rlcm1zIGFuZCBjb25kaXRpb25zIGhlcmVvZiBzaGFsbCBiZSBlZmZlY3RpdmUgYXMgYmV0d2VlbiB0aGUgUGFydGllcwordW5sZXNzIGl0IGlzIG1hZGUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZWlyIGR1bHkgYXV0aG9yaXplZAorcmVwcmVzZW50YXRpdmVzLgorCisxMS40IEluIHRoZSBldmVudCB0aGF0IG9uZSBvciBtb3JlIG9mIHRoZSBwcm92aXNpb25zIGhlcmVvZiB3ZXJlIHRvCitjb25mbGljdCB3aXRoIGEgY3VycmVudCBvciBmdXR1cmUgYXBwbGljYWJsZSBhY3Qgb3IgbGVnaXNsYXRpdmUgdGV4dCwKK3NhaWQgYWN0IG9yIGxlZ2lzbGF0aXZlIHRleHQgc2hhbGwgcHJldmFpbCwgYW5kIHRoZSBQYXJ0aWVzIHNoYWxsIG1ha2UKK3RoZSBuZWNlc3NhcnkgYW1lbmRtZW50cyBzbyBhcyB0byBjb21wbHkgd2l0aCBzYWlkIGFjdCBvciBsZWdpc2xhdGl2ZQordGV4dC4gQWxsIG90aGVyIHByb3Zpc2lvbnMgc2hhbGwgcmVtYWluIGVmZmVjdGl2ZS4gU2ltaWxhcmx5LCBpbnZhbGlkaXR5CitvZiBhIHByb3Zpc2lvbiBvZiB0aGUgQWdyZWVtZW50LCBmb3IgYW55IHJlYXNvbiB3aGF0c29ldmVyLCBzaGFsbCBub3QKK2NhdXNlIHRoZSBBZ3JlZW1lbnQgYXMgYSB3aG9sZSB0byBiZSBpbnZhbGlkLgorCisKKyAgICAgIDExLjUgTEFOR1VBR0UKKworVGhlIEFncmVlbWVudCBpcyBkcmFmdGVkIGluIGJvdGggRnJlbmNoIGFuZCBFbmdsaXNoIGFuZCBib3RoIHZlcnNpb25zCithcmUgZGVlbWVkIGF1dGhlbnRpYy4KKworCisgICAgQXJ0aWNsZSAxMiAtIE5FVyBWRVJTSU9OUyBPRiBUSEUgQUdSRUVNRU5UCisKKzEyLjEgQW55IHBlcnNvbiBpcyBhdXRob3JpemVkIHRvIGR1cGxpY2F0ZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhpcworQWdyZWVtZW50LgorCisxMi4yIFNvIGFzIHRvIGVuc3VyZSBjb2hlcmVuY2UsIHRoZSB3b3JkaW5nIG9mIHRoaXMgQWdyZWVtZW50IGlzCitwcm90ZWN0ZWQgYW5kIG1heSBvbmx5IGJlIG1vZGlmaWVkIGJ5IHRoZSBhdXRob3JzIG9mIHRoZSBMaWNlbnNlLCB3aG8KK3Jlc2VydmUgdGhlIHJpZ2h0IHRvIHBlcmlvZGljYWxseSBwdWJsaXNoIHVwZGF0ZXMgb3IgbmV3IHZlcnNpb25zIG9mIHRoZQorQWdyZWVtZW50LCBlYWNoIHdpdGggYSBzZXBhcmF0ZSBudW1iZXIuIFRoZXNlIHN1YnNlcXVlbnQgdmVyc2lvbnMgbWF5CithZGRyZXNzIG5ldyBpc3N1ZXMgZW5jb3VudGVyZWQgYnkgRnJlZSBTb2Z0d2FyZS4KKworMTIuMyBBbnkgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgYSBnaXZlbiB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQKK21heSBvbmx5IGJlIHN1YnNlcXVlbnRseSBkaXN0cmlidXRlZCB1bmRlciB0aGUgc2FtZSB2ZXJzaW9uIG9mIHRoZQorQWdyZWVtZW50IG9yIGEgc3Vic2VxdWVudCB2ZXJzaW9uLgorCisKKyAgICBBcnRpY2xlIDEzIC0gR09WRVJOSU5HIExBVyBBTkQgSlVSSVNESUNUSU9OCisKKzEzLjEgVGhlIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSBGcmVuY2ggbGF3LiBUaGUgUGFydGllcyBhZ3JlZSB0bworZW5kZWF2b3IgdG8gc2VlayBhbiBhbWljYWJsZSBzb2x1dGlvbiB0byBhbnkgZGlzYWdyZWVtZW50cyBvciBkaXNwdXRlcwordGhhdCBtYXkgYXJpc2UgZHVyaW5nIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgQWdyZWVtZW50LgorCisxMy4yIEZhaWxpbmcgYW4gYW1pY2FibGUgc29sdXRpb24gd2l0aGluIHR3byAoMikgbW9udGhzIGFzIGZyb20gdGhlaXIKK29jY3VycmVuY2UsIGFuZCB1bmxlc3MgZW1lcmdlbmN5IHByb2NlZWRpbmdzIGFyZSBuZWNlc3NhcnksIHRoZQorZGlzYWdyZWVtZW50cyBvciBkaXNwdXRlcyBzaGFsbCBiZSByZWZlcnJlZCB0byB0aGUgUGFyaXMgQ291cnRzIGhhdmluZworanVyaXNkaWN0aW9uLCBieSB0aGUgbW9yZSBkaWxpZ2VudCBQYXJ0eS4KKworCitWZXJzaW9uIDEuMCBkYXRlZCAyMDA2LTA3LTEyLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvQ2Vub24gYi9saWNlbnNlcy9DZW5vbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDMwMzJiCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvQ2Vub24KQEAgLTAsMCArMSwxMDMgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdmhmIFB1YmxpYyBMaWNlbnNlCisKK0JlbG93IGlzIGEgdmVyc2lvbiBvZiB0aGUgbGljZW5zZSBmb3IgdGhlIHZoZiBGcmVlIFNvZnR3YXJlLiBUaGUgbGljZW5zZSBpcworY2FsbGVkIHRoZSB2aGYgUHVibGljIExpY2Vuc2UgKG9yICJ2aGZQTCIpLCBhbmQgaXMgYW4gT3BlbiBTb3VyY2UgbGljZW5zZS4KK0l0IGlzIHRodXMgYXBwcm9wcmlhdGUgZm9yIHBlb3BsZSB3aXNoaW5nIHRvIHdyaXRlIHNvZnR3YXJlIGFzIE9wZW4gU291cmNlCit3aGVyZSBhbGwgc291cmNlIGNvZGUgdG8gdGhlIHNvZnR3YXJlIGlzIG1hZGUgYXZhaWxhYmxlIHRvIGFsbCB1c2VycyBhbmQgY2FuCitiZSBmcmVlbHkgbW9kaWZpZWQgYW5kIHJlZGlzdHJpYnV0ZWQuCisKK1RvIHVzZSB0aGUgdmhmIHNvZnR3YXJlIG9yIGRldmVsb3Agc29mdHdhcmUgYmFzZWQgb24gdmhmIHNvZnR3YXJlLCB5b3UgaGF2ZQordG8gbWVldCB0aGUgcmVxdWlyZW1lbnRzIGluIHRoZSB2aGZQTC4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgICAgICAgICAgICAgICAgIHZoZiBQVUJMSUMgTElDRU5TRSAodmhmUEwpCisgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMS4xLCBGZWJydWFyeSAyMDA0CisKK0NvcHlyaWdodCAoQykgMjAwMy8yMDA0IHZoZiBpbnRlcnNlcnZpY2UgR21iSCwKKyAgICAgICAgICAgICAgICAgICAgICAgIEltIE1hcnhsZSAzLCA3MjExOSBBbHRpbmdlbiwgR2VybWFueS4KK0V2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKK1RoaXMgbGljZW5zZSBhcHBsaWVzIHRvIGFueSBzb2Z0d2FyZSBjb250YWluaW5nIGEgbm90aWNlIHBsYWNlZCBieSB0aGUKK2NvcHlyaWdodCBob2xkZXIgc2F5aW5nIHRoYXQgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzCit2aGYgUHVibGljIExpY2Vuc2UuIFN1Y2ggc29mdHdhcmUgaXMgaGVyZWluIHJlZmVycmVkIHRvIGFzIHZoZiBTb2Z0d2FyZS4KK1RoaXMgbGljZW5zZSBjb3ZlcnMgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIHZoZiBzb2Z0d2FyZSwgdXNlCitvZiB0aGlyZC1wYXJ0eSBhcHBsaWNhdGlvbiBwcm9ncmFtcyBiYXNlZCBvbiB0aGUgdmhmIHNvZnR3YXJlLCBhbmQKK2RldmVsb3BtZW50IG9mIGZyZWUgc29mdHdhcmUgd2hpY2ggdXNlcyB0aGUgdmhmIHNvZnR3YXJlLgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR3JhbnRlZCBSaWdodHMKKworMS4gWW91IGFyZSBncmFudGVkIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIHRoaXMgbGljZW5zZSBwcm92aWRlZCB5b3UgYWdyZWUKKyAgIHRvIGFueSBhbmQgYWxsIGNvbmRpdGlvbnMgaW4gdGhpcyBsaWNlbnNlLiBXaG9sZSBvciBwYXJ0aWFsIGRpc3RyaWJ1dGlvbgorICAgb2YgdGhlIHZoZiBzb2Z0d2FyZSBpbiBhbnkgZm9ybSBzaWduaWZpZXMgYWNjZXB0YW5jZSBvZiB0aGlzIGxpY2Vuc2UuICAgCisKKzIuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgdmhmIHNvZnR3YXJlIHByb3ZpZGVkIHRoYXQKKyAgIHRoZSBlbnRpcmUgcGFja2FnZSBpcyBkaXN0cmlidXRlZCwgaW5jbHVkaW5nIHRoaXMgTGljZW5zZS4KKworMy4gWW91IG1heSBtYWtlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIHZoZiBzb2Z0d2FyZSBmaWxlcyBhbmQgZGlzdHJpYnV0ZSB5b3VyCisgICBtb2RpZmljYXRpb25zLiBUaGUgZm9sbG93aW5nIHJlc3RyaWN0aW9ucyBhcHBseSB0byBtb2RpZmljYXRpb25zOgorCisgICAgIGEuIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgICAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorCisgICAgIGIuIE1vZGlmaWNhdGlvbnMgbXVzdCBub3QgYWx0ZXIgb3IgcmVtb3ZlIGFueSBjb3B5cmlnaHQgbm90aWNlcyBpbiB0aGUKKyAgICAgICAgdmhmIHNvZnR3YXJlLgorCis0LiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIHZoZiBzb2Z0d2FyZSAob3Igd29yayBiYXNlZCBvbiBpdCkgaW4KKyAgIG9iamVjdGl2ZSBjb2RlIG9yIG1hY2hpbmUtZXhlY3V0YWJsZSBmb3JtcywgcHJvdmlkZWQgdGhhdCB5b3UKKyAgIG1lZXQgdGhlc2UgcmVzdHJpY3Rpb25zOgorCisgICAgIGEuIFlvdSBhY2NvbXBhbnkgdGhlIHZoZiBzb2Z0d2FyZSB3aXRoIHRoaXMgbGljZW5zZS4KKworICAgICBiLiBZb3UgbXVzdCBlbnN1cmUgdGhhdCBhbGwgcmVjaXBpZW50cyBvZiB0aGUgbWFjaGluZS1leGVjdXRhYmxlCisgICAgICAgIGZvcm1zIGFyZSBhbHNvIGFibGUgdG8gcmVjZWl2ZSB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZQorICAgICAgICBzb3VyY2UgY29kZSB0byB0aGUgZGlzdHJpYnV0ZWQgdmhmIHNvZnR3YXJlLCBpbmNsdWRpbmcgYWxsCisgICAgICAgIG1vZGlmaWNhdGlvbnMsIHdpdGhvdXQgYW55IGNoYXJnZSBiZXlvbmQgdGhlIGNvc3RzIG9mIGRhdGEKKyAgICAgICAgdHJhbnNmZXIuCisKKyAgICAgYy4gWW91IGVuc3VyZSB0aGF0IGFsbCBtb2RpZmljYXRpb25zIGluY2x1ZGVkIGluIHRoZQorICAgICAgICBtYWNoaW5lLWV4ZWN1dGFibGUgZm9ybXMgYXJlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcworICAgICAgICBsaWNlbnNlLgorCis1LiBZb3UgbWF5IHVzZSB0aGUgb3JpZ2luYWwgb3IgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhlIHZoZiBzb2Z0d2FyZQorICAgdG8gY29tcGlsZSwgbGluayBhbmQgcnVuIGFwcGxpY2F0aW9uIHByb2dyYW1zIGRldmVsb3BlZCBieSB5b3Ugb3IKKyAgIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhpcyBsaWNlbnNlLgorCis2LiBZb3UgbWF5IGRldmVsb3AgYXBwbGljYXRpb24gcHJvZ3JhbXMsIHJldXNhYmxlIGNvbXBvbmVudHMgKGVnLiBCdW5kbGVzKQorICAgYW5kIG90aGVyIHNvZnR3YXJlIGl0ZW1zIHRoYXQgbGluayB3aXRoIHRoZSBvcmlnaW5hbCBvciBtb2RpZmllZAorICAgdmVyc2lvbnMgb2YgdGhlIHZoZiBzb2Z0d2FyZS4gVGhlc2UgaXRlbXMsIHdoZW4gZGlzdHJpYnV0ZWQgaW4KKyAgIG1hY2hpbmUtZXhlY3V0YWJsZSBmb3JtLCBoYXZlIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCisgICAgIGEuIFlvdSBtdXN0IGVuc3VyZSB0aGF0IGFsbCByZWNpcGllbnRzIG9mIHRoZSBtYWNoaW5lLWV4ZWN1dGFibGUKKyAgICAgICAgZm9ybXMgb2YgdGhlc2UgaXRlbXMgYXJlIGFsc28gYWJsZSB0byByZWNlaXZlIHRoZSBjb21wbGV0ZQorICAgICAgICBzb3VyY2UgY29kZSB0byB0aGUgaXRlbXMgd2l0aG91dCBhbnkgY2hhcmdlIGJleW9uZCB0aGUgY29zdHMgb2YKKyAgICAgICAgZGF0YSB0cmFuc2Zlci4KKworICAgICBiLiBZb3UgbXVzdCBleHBsaWNpdGx5IGxpY2Vuc2UgYWxsIHJlY2lwaWVudHMgb2YgeW91ciBpdGVtcyB0byB1c2UKKyAgICAgICAgYW5kIHJlLWRpc3RyaWJ1dGUgb3JpZ2luYWwgYW5kIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoZSBpdGVtcworICAgICAgICB1bmRlciB0ZXJtcyBpZGVudGljYWwgdG8gdGhvc2UgdW5kZXIgd2hpY2ggdGhleSByZWNlaXZlZCB0aGUgaXRlbXMuCisKKzcuIFRoZSB0cmFkZW1hcmtzIG9yIHNvZnR3YXJlIHRpdGxlcyAndmhmJywgJ0Nlbm9uJyBldGMuIG1heSBiZSB1c2VkIGZvcgorICAgcHJvbW90aW5nIHNvZnR3YXJlLCBwcm9kdWN0cyBvciBzZXJ2aWNlcyB3aGljaCB1c2Ugb3IgY29udGFpbiB0aGUKKyAgIHZoZiBzb2Z0d2FyZS4KKyAgIFRoZSBhc3NvY2lhdGVkIG5hbWVzIG9mIHRoZSBhdXRob3JzIG9mIHRoZSB2aGYgc29mdHdhcmUgbWF5IG5vdCBiZSB1c2VkCisgICB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgb3Igc2VydmljZXMgZGVyaXZlZCBmcm9tIG9yIGxpbmtpbmcgdGhlCisgICB2aGYgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICBMaW1pdGF0aW9ucyBvZiBMaWFiaWxpdHkKKworSW4gbm8gZXZlbnQgc2hhbGwgdGhlIGF1dGhvcnMgb2YgdGhlIHZoZiBzb2Z0d2FyZSBvciB0aGUgY29weXJpZ2h0IGhvbGRlcgorb3IgdGhlaXIgZW1wbG95ZXJzIGJlIGxpYWJsZSBmb3IgYW55IGxvc3QgcmV2ZW51ZSBvciBwcm9maXRzIG9yIG90aGVyCitkaXJlY3QsIGluZGlyZWN0LCBzcGVjaWFsLCBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgZXZlbiBpZgordGhleSBoYXZlIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vIFdhcnJhbnR5CisKK1RoZSB2aGYgc29mdHdhcmUgaXMgcHJvdmlkZWQgQVMgSVMgd2l0aCBOTyBXQVJSQU5UWSBPRiBBTlkgS0lORCwKK0lOQ0xVRElORyBUSEUgV0FSUkFOVFkgT0YgREVTSUdOLCBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEKK1BBUlRJQ1VMQVIgUFVSUE9TRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ29weXJpZ2h0IChDKSAyMDAzIHZoZiBpbnRlcnNlcnZpY2UgR21iSCAgICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlQHZoZi5kZQpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvQ2xhcmlmaWVkLUFydGlzdGljIGIvbGljZW5zZXMvQ2xhcmlmaWVkLUFydGlzdGljCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMTIwNGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9DbGFyaWZpZWQtQXJ0aXN0aWMKQEAgLTAsMCArMSwxMzYgQEAKKwkJICAgICBUaGUgQ2xhcmlmaWVkIEFydGlzdGljIExpY2Vuc2UKKworCQkJCVByZWFtYmxlCisKK1RoZSBpbnRlbnQgb2YgdGhpcyBkb2N1bWVudCBpcyB0byBzdGF0ZSB0aGUgY29uZGl0aW9ucyB1bmRlciB3aGljaCBhCitQYWNrYWdlIG1heSBiZSBjb3BpZWQsIHN1Y2ggdGhhdCB0aGUgQ29weXJpZ2h0IEhvbGRlciBtYWludGFpbnMgc29tZQorc2VtYmxhbmNlIG9mIGFydGlzdGljIGNvbnRyb2wgb3ZlciB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhlIHBhY2thZ2UsCit3aGlsZSBnaXZpbmcgdGhlIHVzZXJzIG9mIHRoZSBwYWNrYWdlIHRoZSByaWdodCB0byB1c2UgYW5kIGRpc3RyaWJ1dGUKK3RoZSBQYWNrYWdlIGluIGEgbW9yZS1vci1sZXNzIGN1c3RvbWFyeSBmYXNoaW9uLCBwbHVzIHRoZSByaWdodCB0byBtYWtlCityZWFzb25hYmxlIG1vZGlmaWNhdGlvbnMuCisKK0RlZmluaXRpb25zOgorCisJIlBhY2thZ2UiIHJlZmVycyB0byB0aGUgY29sbGVjdGlvbiBvZiBmaWxlcyBkaXN0cmlidXRlZCBieSB0aGUKKwlDb3B5cmlnaHQgSG9sZGVyLCBhbmQgZGVyaXZhdGl2ZXMgb2YgdGhhdCBjb2xsZWN0aW9uIG9mIGZpbGVzCisJY3JlYXRlZCB0aHJvdWdoIHRleHR1YWwgbW9kaWZpY2F0aW9uLgorCisJIlN0YW5kYXJkIFZlcnNpb24iIHJlZmVycyB0byBzdWNoIGEgUGFja2FnZSBpZiBpdCBoYXMgbm90IGJlZW4KKwltb2RpZmllZCwgb3IgaGFzIGJlZW4gbW9kaWZpZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB3aXNoZXMKKwlvZiB0aGUgQ29weXJpZ2h0IEhvbGRlciBhcyBzcGVjaWZpZWQgYmVsb3cuCisKKwkiQ29weXJpZ2h0IEhvbGRlciIgaXMgd2hvZXZlciBpcyBuYW1lZCBpbiB0aGUgY29weXJpZ2h0IG9yCisJY29weXJpZ2h0cyBmb3IgdGhlIHBhY2thZ2UuCisKKwkiWW91IiBpcyB5b3UsIGlmIHlvdSdyZSB0aGlua2luZyBhYm91dCBjb3B5aW5nIG9yIGRpc3RyaWJ1dGluZworCXRoaXMgUGFja2FnZS4KKworCSJEaXN0cmlidXRpb24gZmVlIiBpcyBhIGZlZSB5b3UgY2hhcmdlIGZvciBwcm92aWRpbmcgYSBjb3B5CisgICAgICAgIG9mIHRoaXMgUGFja2FnZSB0byBhbm90aGVyIHBhcnR5LgorCisJIkZyZWVseSBBdmFpbGFibGUiIG1lYW5zIHRoYXQgbm8gZmVlIGlzIGNoYXJnZWQgZm9yIHRoZSByaWdodCB0bworICAgICAgICB1c2UgdGhlIGl0ZW0sIHRob3VnaCB0aGVyZSBtYXkgYmUgZmVlcyBpbnZvbHZlZCBpbiBoYW5kbGluZyB0aGUKKyAgICAgICAgaXRlbS4gIEl0IGFsc28gbWVhbnMgdGhhdCByZWNpcGllbnRzIG9mIHRoZSBpdGVtIG1heSByZWRpc3RyaWJ1dGUKKyAgICAgICAgaXQgdW5kZXIgdGhlIHNhbWUgY29uZGl0aW9ucyB0aGV5IHJlY2VpdmVkIGl0LgorCisxLiBZb3UgbWF5IG1ha2UgYW5kIGdpdmUgYXdheSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIHNvdXJjZSBmb3JtIG9mIHRoZQorU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGlzIFBhY2thZ2Ugd2l0aG91dCByZXN0cmljdGlvbiwgcHJvdmlkZWQgdGhhdCB5b3UKK2R1cGxpY2F0ZSBhbGwgb2YgdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2VzIGFuZCBhc3NvY2lhdGVkIGRpc2NsYWltZXJzLgorCisyLiBZb3UgbWF5IGFwcGx5IGJ1ZyBmaXhlcywgcG9ydGFiaWxpdHkgZml4ZXMgYW5kIG90aGVyIG1vZGlmaWNhdGlvbnMKK2Rlcml2ZWQgZnJvbSB0aGUgUHVibGljIERvbWFpbiwgb3IgdGhvc2UgbWFkZSBGcmVlbHkgQXZhaWxhYmxlLCBvciBmcm9tCit0aGUgQ29weXJpZ2h0IEhvbGRlci4gIEEgUGFja2FnZSBtb2RpZmllZCBpbiBzdWNoIGEgd2F5IHNoYWxsIHN0aWxsIGJlCitjb25zaWRlcmVkIHRoZSBTdGFuZGFyZCBWZXJzaW9uLgorCiszLiBZb3UgbWF5IG90aGVyd2lzZSBtb2RpZnkgeW91ciBjb3B5IG9mIHRoaXMgUGFja2FnZSBpbiBhbnkgd2F5LCBwcm92aWRlZAordGhhdCB5b3UgaW5zZXJ0IGEgcHJvbWluZW50IG5vdGljZSBpbiBlYWNoIGNoYW5nZWQgZmlsZSBzdGF0aW5nIGhvdyBhbmQKK3doZW4geW91IGNoYW5nZWQgdGhhdCBmaWxlLCBhbmQgcHJvdmlkZWQgdGhhdCB5b3UgZG8gYXQgbGVhc3QgT05FIG9mIHRoZQorZm9sbG93aW5nOgorCisgICAgYSkgcGxhY2UgeW91ciBtb2RpZmljYXRpb25zIGluIHRoZSBQdWJsaWMgRG9tYWluIG9yIG90aGVyd2lzZSBtYWtlIHRoZW0KKyAgICBGcmVlbHkgQXZhaWxhYmxlLCBzdWNoIGFzIGJ5IHBvc3Rpbmcgc2FpZCBtb2RpZmljYXRpb25zIHRvIFVzZW5ldCBvciBhbgorICAgIGVxdWl2YWxlbnQgbWVkaXVtLCBvciBwbGFjaW5nIHRoZSBtb2RpZmljYXRpb25zIG9uIGEgbWFqb3IgbmV0d29yaworICAgIGFyY2hpdmUgc2l0ZSBhbGxvd2luZyB1bnJlc3RyaWN0ZWQgYWNjZXNzIHRvIHRoZW0sIG9yIGJ5IGFsbG93aW5nIHRoZQorICAgIENvcHlyaWdodCBIb2xkZXIgdG8gaW5jbHVkZSB5b3VyIG1vZGlmaWNhdGlvbnMgaW4gdGhlIFN0YW5kYXJkIFZlcnNpb24KKyAgICBvZiB0aGUgUGFja2FnZS4KKworICAgIGIpIHVzZSB0aGUgbW9kaWZpZWQgUGFja2FnZSBvbmx5IHdpdGhpbiB5b3VyIGNvcnBvcmF0aW9uIG9yIG9yZ2FuaXphdGlvbi4KKworICAgIGMpIHJlbmFtZSBhbnkgbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGVzIHNvIHRoZSBuYW1lcyBkbyBub3QgY29uZmxpY3QKKyAgICB3aXRoIHN0YW5kYXJkIGV4ZWN1dGFibGVzLCB3aGljaCBtdXN0IGFsc28gYmUgcHJvdmlkZWQsIGFuZCBwcm92aWRlCisgICAgYSBzZXBhcmF0ZSBtYW51YWwgcGFnZSBmb3IgZWFjaCBub24tc3RhbmRhcmQgZXhlY3V0YWJsZSB0aGF0IGNsZWFybHkKKyAgICBkb2N1bWVudHMgaG93IGl0IGRpZmZlcnMgZnJvbSB0aGUgU3RhbmRhcmQgVmVyc2lvbi4KKworICAgIGQpIG1ha2Ugb3RoZXIgZGlzdHJpYnV0aW9uIGFycmFuZ2VtZW50cyB3aXRoIHRoZSBDb3B5cmlnaHQgSG9sZGVyLgorCisgICAgZSkgcGVybWl0IGFuZCBlbmNvdXJnZSBhbnlvbmUgd2hvIHJlY2VpdmVzIGEgY29weSBvZiB0aGUgbW9kaWZpZWQgUGFja2FnZQorICAgICAgIHBlcm1pc3Npb24gdG8gbWFrZSB5b3VyIG1vZGlmaWNhdGlvbnMgRnJlZWx5IEF2YWlsYWJsZQorICAgICAgIGluIHNvbWUgc3BlY2lmaWMgd2F5LgorCisKKzQuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbXMgb2YgdGhpcyBQYWNrYWdlIGluIG9iamVjdCBjb2RlIG9yCitleGVjdXRhYmxlIGZvcm0sIHByb3ZpZGVkIHRoYXQgeW91IGRvIGF0IGxlYXN0IE9ORSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgZGlzdHJpYnV0ZSBhIFN0YW5kYXJkIFZlcnNpb24gb2YgdGhlIGV4ZWN1dGFibGVzIGFuZCBsaWJyYXJ5IGZpbGVzLAorICAgIHRvZ2V0aGVyIHdpdGggaW5zdHJ1Y3Rpb25zIChpbiB0aGUgbWFudWFsIHBhZ2Ugb3IgZXF1aXZhbGVudCkgb24gd2hlcmUKKyAgICB0byBnZXQgdGhlIFN0YW5kYXJkIFZlcnNpb24uCisKKyAgICBiKSBhY2NvbXBhbnkgdGhlIGRpc3RyaWJ1dGlvbiB3aXRoIHRoZSBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBvZgorICAgIHRoZSBQYWNrYWdlIHdpdGggeW91ciBtb2RpZmljYXRpb25zLgorCisgICAgYykgZ2l2ZSBub24tc3RhbmRhcmQgZXhlY3V0YWJsZXMgbm9uLXN0YW5kYXJkIG5hbWVzLCBhbmQgY2xlYXJseQorICAgIGRvY3VtZW50IHRoZSBkaWZmZXJlbmNlcyBpbiBtYW51YWwgcGFnZXMgKG9yIGVxdWl2YWxlbnQpLCB0b2dldGhlcgorICAgIHdpdGggaW5zdHJ1Y3Rpb25zIG9uIHdoZXJlIHRvIGdldCB0aGUgU3RhbmRhcmQgVmVyc2lvbi4KKworICAgIGQpIG1ha2Ugb3RoZXIgZGlzdHJpYnV0aW9uIGFycmFuZ2VtZW50cyB3aXRoIHRoZSBDb3B5cmlnaHQgSG9sZGVyLgorCisgICAgZSkgb2ZmZXIgdGhlIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIG9mIHRoZSBQYWNrYWdlLCB3aXRoIHlvdXIKKyAgICAgICBtb2RpZmljYXRpb25zLCBieSBtYWlsIG9yZGVyLgorCis1LiBZb3UgbWF5IGNoYXJnZSBhIGRpc3RyaWJ1dGlvbiBmZWUgZm9yIGFueSBkaXN0cmlidXRpb24gb2YgdGhpcyBQYWNrYWdlLgorSWYgeW91IG9mZmVyIHN1cHBvcnQgZm9yIHRoaXMgUGFja2FnZSwgeW91IG1heSBjaGFyZ2UgYW55IGZlZSB5b3UgY2hvb3NlCitmb3IgdGhhdCBzdXBwb3J0LiAgWW91IG1heSBub3QgY2hhcmdlIGEgbGljZW5zZSBmZWUgZm9yIHRoZSByaWdodCB0byB1c2UKK3RoaXMgUGFja2FnZSBpdHNlbGYuICBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhpcyBQYWNrYWdlIGluIGFnZ3JlZ2F0ZSB3aXRoCitvdGhlciAocG9zc2libHkgY29tbWVyY2lhbCBhbmQgcG9zc2libHkgbm9uZnJlZSkgcHJvZ3JhbXMgYXMgcGFydCBvZiBhCitsYXJnZXIgKHBvc3NpYmx5IGNvbW1lcmNpYWwgYW5kIHBvc3NpYmx5IG5vbmZyZWUpIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiwKK2FuZCBjaGFyZ2UgbGljZW5zZSBmZWVzIGZvciBvdGhlciBwYXJ0cyBvZiB0aGF0IHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiwKK3Byb3ZpZGVkIHRoYXQgeW91IGRvIG5vdCBhZHZlcnRpc2UgdGhpcyBQYWNrYWdlIGFzIGEgcHJvZHVjdCBvZiB5b3VyIG93bi4KK0lmIHRoZSBQYWNrYWdlIGluY2x1ZGVzIGFuIGludGVycHJldGVyLCBZb3UgbWF5IGVtYmVkIHRoaXMgUGFja2FnZSdzCitpbnRlcnByZXRlciB3aXRoaW4gYW4gZXhlY3V0YWJsZSBvZiB5b3VycyAoYnkgbGlua2luZyk7IHRoaXMgc2hhbGwgYmUKK2NvbnN0cnVlZCBhcyBhIG1lcmUgZm9ybSBvZiBhZ2dyZWdhdGlvbiwgcHJvdmlkZWQgdGhhdCB0aGUgY29tcGxldGUKK1N0YW5kYXJkIFZlcnNpb24gb2YgdGhlIGludGVycHJldGVyIGlzIHNvIGVtYmVkZGVkLgorCis2LiBUaGUgc2NyaXB0cyBhbmQgbGlicmFyeSBmaWxlcyBzdXBwbGllZCBhcyBpbnB1dCB0byBvciBwcm9kdWNlZCBhcworb3V0cHV0IGZyb20gdGhlIHByb2dyYW1zIG9mIHRoaXMgUGFja2FnZSBkbyBub3QgYXV0b21hdGljYWxseSBmYWxsCit1bmRlciB0aGUgY29weXJpZ2h0IG9mIHRoaXMgUGFja2FnZSwgYnV0IGJlbG9uZyB0byB3aG9ldmVyIGdlbmVyYXRlZAordGhlbSwgYW5kIG1heSBiZSBzb2xkIGNvbW1lcmNpYWxseSwgYW5kIG1heSBiZSBhZ2dyZWdhdGVkIHdpdGggdGhpcworUGFja2FnZS4gIElmIHN1Y2ggc2NyaXB0cyBvciBsaWJyYXJ5IGZpbGVzIGFyZSBhZ2dyZWdhdGVkIHdpdGggdGhpcworUGFja2FnZSB2aWEgdGhlIHNvLWNhbGxlZCAidW5kdW1wIiBvciAidW5leGVjIiBtZXRob2RzIG9mIHByb2R1Y2luZyBhCitiaW5hcnkgZXhlY3V0YWJsZSBpbWFnZSwgdGhlbiBkaXN0cmlidXRpb24gb2Ygc3VjaCBhbiBpbWFnZSBzaGFsbAorbmVpdGhlciBiZSBjb25zdHJ1ZWQgYXMgYSBkaXN0cmlidXRpb24gb2YgdGhpcyBQYWNrYWdlIG5vciBzaGFsbCBpdAorZmFsbCB1bmRlciB0aGUgcmVzdHJpY3Rpb25zIG9mIFBhcmFncmFwaHMgMyBhbmQgNCwgcHJvdmlkZWQgdGhhdCB5b3UgZG8KK25vdCByZXByZXNlbnQgc3VjaCBhbiBleGVjdXRhYmxlIGltYWdlIGFzIGEgU3RhbmRhcmQgVmVyc2lvbiBvZiB0aGlzCitQYWNrYWdlLgorCis3LiBDIHN1YnJvdXRpbmVzIChvciBjb21wYXJhYmx5IGNvbXBpbGVkIHN1YnJvdXRpbmVzIGluIG90aGVyCitsYW5ndWFnZXMpIHN1cHBsaWVkIGJ5IHlvdSBhbmQgbGlua2VkIGludG8gdGhpcyBQYWNrYWdlIGluIG9yZGVyIHRvCitlbXVsYXRlIHN1YnJvdXRpbmVzIGFuZCB2YXJpYWJsZXMgb2YgdGhlIGxhbmd1YWdlIGRlZmluZWQgYnkgdGhpcworUGFja2FnZSBzaGFsbCBub3QgYmUgY29uc2lkZXJlZCBwYXJ0IG9mIHRoaXMgUGFja2FnZSwgYnV0IGFyZSB0aGUKK2VxdWl2YWxlbnQgb2YgaW5wdXQgYXMgaW4gUGFyYWdyYXBoIDYsIHByb3ZpZGVkIHRoZXNlIHN1YnJvdXRpbmVzIGRvCitub3QgY2hhbmdlIHRoZSBsYW5ndWFnZSBpbiBhbnkgd2F5IHRoYXQgd291bGQgY2F1c2UgaXQgdG8gZmFpbCB0aGUKK3JlZ3Jlc3Npb24gdGVzdHMgZm9yIHRoZSBsYW5ndWFnZS4KKworOC4gQWdncmVnYXRpb24gb2YgdGhlIFN0YW5kYXJkIFZlcnNpb24gb2YgdGhlIFBhY2thZ2Ugd2l0aCBhIGNvbW1lcmNpYWwKK2Rpc3RyaWJ1dGlvbiBpcyBhbHdheXMgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIHVzZSBvZiB0aGlzIFBhY2thZ2UKK2lzIGVtYmVkZGVkOyB0aGF0IGlzLCB3aGVuIG5vIG92ZXJ0IGF0dGVtcHQgaXMgbWFkZSB0byBtYWtlIHRoaXMgUGFja2FnZSdzCitpbnRlcmZhY2VzIHZpc2libGUgdG8gdGhlIGVuZCB1c2VyIG9mIHRoZSBjb21tZXJjaWFsIGRpc3RyaWJ1dGlvbi4KK1N1Y2ggdXNlIHNoYWxsIG5vdCBiZSBjb25zdHJ1ZWQgYXMgYSBkaXN0cmlidXRpb24gb2YgdGhpcyBQYWNrYWdlLgorCis5LiBUaGUgbmFtZSBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCitwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworMTAuIFRISVMgUEFDS0FHRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCitJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCisJCQkJVGhlIEVuZApkaWZmIC0tZ2l0IGEvbGljZW5zZXMvQ29uZXhhbnQgYi9saWNlbnNlcy9Db25leGFudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lN2JiYWNkCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvQ29uZXhhbnQKQEAgLTAsMCArMSw0NyBAQAorQ29weXJpZ2h0IChjKSAyMDAxLTIwMDIgQ29uZXhhbnQgU3lzdGVtcywgSW5jLgorCisxLiAgIFBlcm1pdHRlZCB1c2UuIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsCit3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBzZXQgZm9ydGgKK2hlcmVpbi4KKworMi4gICBEaXNjbGFpbWVyIG9mIFdhcnJhbnRpZXMuIENPTkVYQU5UIEFORCBPVEhFUiBDT05UUklCVVRPUlMgTUFLRSBOTworUkVQUkVTRU5UQVRJT04gQUJPVVQgVEhFIFNVSVRBQklMSVRZIE9GIFRISVMgU09GVFdBUkUgRk9SIEFOWSBQVVJQT1NFLgorSVQgSVMgUFJPVklERUQgIkFTIElTIiBXSVRIT1VUIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTIE9GIEFOWSBLSU5ELgorQ09ORVhBTlQgQU5EIE9USEVSIENPTlRSSUJVVE9SUyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8KK1RISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUworRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBHT09EIFRJVExFIEFORCBBR0FJTlNUIElORlJJTkdFTUVOVC4KKworVGhpcyBzb2Z0d2FyZSBoYXMgbm90IGJlZW4gZm9ybWFsbHkgdGVzdGVkLCBhbmQgdGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQKK2l0IGlzIGZyZWUgb2YgZXJyb3JzIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCBidWdzLCBkZWZlY3RzLAoraW50ZXJydXB0ZWQgb3BlcmF0aW9uLCBvciB1bmV4cGVjdGVkIHJlc3VsdHMuIEFueSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBpcworYXQgdXNlcidzIG93biByaXNrLgorCiszLiAgIE5vIExpYWJpbGl0eS4KKworKGEpIENvbmV4YW50IG9yIGNvbnRyaWJ1dG9ycyBzaGFsbCBub3QgYmUgcmVzcG9uc2libGUgZm9yIGFueSBsb3NzIG9yCitkYW1hZ2UgdG8gQ29tcGFueSwgaXRzIGN1c3RvbWVycywgb3IgYW55IHRoaXJkIHBhcnRpZXMgZm9yIGFueSByZWFzb24KK3doYXRzb2V2ZXIsIGFuZCBDT05FWEFOVCBPUiBDT05UUklCVVRPUlMgU0hBTEwgTk9UIEJFIExJQUJMRSBGT1IgQU5ZCitBQ1RVQUwsIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwsIFBVTklUSVZFLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKK1NFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQsIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBPUiBPVEhFUiBMRUdBTCBUSEVPUlkgT0YKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWQorV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkKK09GIFNVQ0ggREFNQUdFLgorCisoYikgVXNlciBhZ3JlZXMgdG8gaG9sZCBDb25leGFudCBhbmQgY29udHJpYnV0b3JzIGhhcm1sZXNzIGZyb20gYW55CitsaWFiaWxpdHksIGxvc3MsIGNvc3QsIGRhbWFnZSBvciBleHBlbnNlLCBpbmNsdWRpbmcgYXR0b3JuZXkncyBmZWVzLAorYXMgYSByZXN1bHQgb2YgYW55IGNsYWltcyB3aGljaCBtYXkgYmUgbWFkZSBieSBhbnkgcGVyc29uLCBpbmNsdWRpbmcKK2J1dCBub3QgbGltaXRlZCB0byBVc2VyLCBpdHMgYWdlbnRzIGFuZCBlbXBsb3llZXMsIGl0cyBjdXN0b21lcnMsIG9yCithbnkgdGhpcmQgcGFydGllcyB0aGF0IGFyaXNlIG91dCBvZiBvciByZXN1bHQgZnJvbSB0aGUgbWFudWZhY3R1cmUsCitkZWxpdmVyeSwgYWN0dWFsIG9yIGFsbGVnZWQgb3duZXJzaGlwLCBwZXJmb3JtYW5jZSwgdXNlLCBvcGVyYXRpb24KK29yIHBvc3Nlc3Npb24gb2YgdGhlIHNvZnR3YXJlIGZ1cm5pc2hlZCBoZXJldW5kZXIsIHdoZXRoZXIgc3VjaCBjbGFpbXMKK2FyZSBiYXNlZCBvbiBuZWdsaWdlbmNlLCBicmVhY2ggb2YgY29udHJhY3QsIGFic29sdXRlIGxpYWJpbGl0eSBvciBhbnkKK290aGVyIGxlZ2FsIHRoZW9yeS4KKworNC4gICBOb3RpY2VzLiBVc2VyIGhlcmVieSBhZ3JlZXMgbm90IHRvIHJlbW92ZSwgYWx0ZXIgb3IgZGVzdHJveSBhbnkKK2NvcHlyaWdodCwgdHJhZGVtYXJrLCBjcmVkaXRzLCBvdGhlciBwcm9wcmlldGFyeSBub3RpY2VzIG9yIGNvbmZpZGVudGlhbAorbGVnZW5kcyBwbGFjZWQgdXBvbiwgY29udGFpbmVkIHdpdGhpbiBvciBhc3NvY2lhdGVkIHdpdGggdGhlIFNvZnR3YXJlLAorYW5kIHNoYWxsIGluY2x1ZGUgYWxsIHN1Y2ggdW5hbHRlcmVkIGNvcHlyaWdodCwgdHJhZGVtYXJrLCBjcmVkaXRzLAorb3RoZXIgcHJvcHJpZXRhcnkgbm90aWNlcyBvciBjb25maWRlbnRpYWwgbGVnZW5kcyBvbiBvciBpbiBldmVyeSBjb3B5IG9mCit0aGUgU29mdHdhcmUuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9Db25leGFudC1maXJtd2FyZSBiL2xpY2Vuc2VzL0NvbmV4YW50LWZpcm13YXJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyYjA3Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9Db25leGFudC1maXJtd2FyZQpAQCAtMCwwICsxLDQwIEBACitUaGUgZm9sbG93aW5nIGJpbmFyeSBmaXJtd2FyZSBmaWxlcyBhcmUgKGMpIENvbmV4YW50LCBhbmQgZG8gbm90IGZhbGwKK3VuZGVyIHRoZSBHUEwgb3IgTVBMLiAgVGhleSBhcmUgYXNzdW1lZCB0byBoYXZlIHRoZSBzYW1lIGxpY2Vuc2UgYXMKK3RoZWlyIHdpbmRvd3MgY2xpZW50IGRyaXZlcnMsIGllIGV2ZXJ5b25lIHdobyBib3VnaHQgYSBjYXJkIHRoYXQgY2FtZQord2l0aCBhIHdpbmRvd3MgZHJpdmVyIGFscmVhZHkgaGFzIGEgY29weSBvZiBhbmQgbGljZW5zZSB0byB1c2UgdGhlCituZWNlc3NhcnkgZmlybXdhcmUsIGFsYmVpdCBwb3NzaWJseSBhbiBvbGRlciB2ZXJzaW9uLiAgVGhlc2UgYXJlIGJ1bmRsZWQKK3dpdGggbGludXgtd2xhbi1uZyBmb3IgY29udmVuaWVuY2Ugb25seSwgYXMgbWFueSBuZXdlciBhZGFwdGVycyAKKyhlZyBQcmlzbSAzIHcvU1NGKSByZXF1aXJlIGEgZmlybXdhcmUgZG93bmxvYWQgaW4gb3JkZXIgdG8gZnVuY3Rpb24gYXQgCithbGwuCisKK1ByaW1hcnkgKEJhc2ljIGhhcmR3YXJlIGZ1bmN0aW9uYWxpdHkpIGZpcm13YXJlIGltYWdlczoKKworYWYwMTAxMDQuaGV4ICAgUHJpc20gMi41LzMgIEFNRCBGbGFzaAorYWswMTAxMDQuaGV4ICAgUHJpc20gMi41LzMgIFNTVCBGbGFzaAorcG0wMTAxMDIuaGV4ICAgUHJpc20gMyAgICAgIFNob3J0IFNlcmlhbCBGbGFzaAorCitTZWNvbmRhcnkgKFNUQS9BZGhvYy9Ib3N0QVAgbW9kZSkgZmlybXdhcmUgaW1hZ2VzOiAgCisKK3IxMDEwNzAxLmhleCAgIFByaXNtIDIgUENNQ0lBIGFkYXB0ZXJzCityZjAxMDgwNC5oZXggICBQcmlzbSAyLjUvMyBQQ0kvUENNQ0lBIGFkYXB0ZXJzCitydTAxMDgwMy5oZXggICBQcmlzbSAyLzMgVVNCIGFkYXB0ZXJzCisKK1RlcnRpYXJ5IGZpcm13YXJlIGltYWdlcyAoRmlybXdhcmUtYmFzZWQgQVAgbW9kZSkgYXJlIG5vdCBidW5kbGVkLCBhcyAKK3RoYXQgcmVxdWlyZXMgYW4gZXhwbGljaXQgbGljZW5zZSBmcm9tIENvbmV4YW50IHRvIHVzZSwgd2l0aCBleHBsaWNpdCAKK2xpbWl0YXRpb25zIG9uIHJlZGlzdHJpYnV0aW9uLgorCitUaGUgY3gyMzQxOCBmaXJtd2FyZSBmaWxlczoKKwordjRsLWN4MjM0MTgtYXB1LmZ3Cit2NGwtY3gyMzQxOC1jcHUuZncKK3Y0bC1jeDIzNDE4LWRpZy5mdworCithcmUgY292ZXJlZCBieSB0aGUgZm9sbG93aW5nIGxpY2Vuc2U6CisKK0NvbmV4YW50IGdyYW50cyBwZXJtaXNzaW9uIHRvIHVzZSBhbmQgcmVkaXN0cmlidXRlIHRoZXNlIGZpcm13YXJlCitmaWxlcyBmb3IgdXNlIHdpdGggQ29uZXhhbnQgZGV2aWNlcywgYnV0IG5vdCBhcyBhIHBhcnQgb2YgdGhlIExpbnV4CitrZXJuZWwgb3IgaW4gYW55IG90aGVyIGZvcm0gd2hpY2ggd291bGQgcmVxdWlyZSB0aGVzZSBmaWxlcyB0aGVtc2VsdmVzCit0byBiZSBjb3ZlcmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCitUaGVzZSBmaXJtd2FyZSBmaWxlcyBhcmUgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCB0aGV5IHdpbGwgYmUKK3VzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkKK29mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0QxWCBiL2xpY2Vuc2VzL0QxWApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDc2MjkyCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvRDFYCkBAIC0wLDAgKzEsNDUgQEAKK0QxeCBMaWNlbnNlIAorCitQcmVhbWJsZQorLS0tLS0tLS0KKworVGhpcyBMaWNlbnNlIGlzIGRlc2lnbmVkIHRvIGFsbG93IHRoZSBEZXNjZW50IHByb2dyYW1taW5nIGNvbW11bml0eSB0bworY29udGludWUgdG8gaGF2ZSB0aGUgRGVzY2VudCBzb3VyY2Ugb3BlbiBhbmQgYXZhaWxhYmxlIHRvIGFueW9uZS4KKworT3JpZ2luYWwgUGFyYWxsYXggTGljZW5zZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUSEUgQ09NUFVURVIgQ09ERSBDT05UQUlORUQgSEVSRUlOIElTIFRIRSBTT0xFIFBST1BFUlRZIE9GIFBBUkFMTEFYCitTT0ZUV0FSRSBDT1JQT1JBVElPTiAoIlBBUkFMTEFYIikuICBQQVJBTExBWCwgSU4gRElTVFJJQlVUSU5HIFRIRSBDT0RFIFRPCitFTkQtVVNFUlMsIEFORCBTVUJKRUNUIFRPIEFMTCBPRiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgSEVSRUlOLCBHUkFOVFMgQQorUk9ZQUxUWS1GUkVFLCBQRVJQRVRVQUwgTElDRU5TRSBUTyBTVUNIIEVORC1VU0VSUyBGT1IgVVNFIEJZIFNVQ0ggRU5ELVVTRVJTCitJTiBVU0lORywgRElTUExBWUlORywgIEFORCBDUkVBVElORyBERVJJVkFUSVZFIFdPUktTIFRIRVJFT0YsIFNPIExPTkcgQVMKK1NVQ0ggVVNFLCBESVNQTEFZIE9SIENSRUFUSU9OIElTIEZPUiBOT04tQ09NTUVSQ0lBTCwgUk9ZQUxUWSBPUiBSRVZFTlVFCitGUkVFIFBVUlBPU0VTLiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEVORC1VU0VSIFVTRSBUSEUgQ09NUFVURVIgQ09ERQorQ09OVEFJTkVEIEhFUkVJTiBGT1IgUkVWRU5VRS1CRUFSSU5HIFBVUlBPU0VTLiAgVEhFIEVORC1VU0VSIFVOREVSU1RBTkRTCitBTkQgQUdSRUVTIFRPIFRIRSBURVJNUyBIRVJFSU4gQU5EIEFDQ0VQVFMgVEhFIFNBTUUgQlkgVVNFIE9GIFRISVMgRklMRS4gIAorQ09QWVJJR0hUIDE5OTMtMTk5OCBQQVJBTExBWCBTT0ZUV0FSRSBDT1JQT1JBVElPTi4gIEFMTCBSSUdIVFMgUkVTRVJWRUQuCisKK1dlIG1ha2Ugbm8gd2FycmFudGllcyBhcyB0byB0aGUgdXNhYmlsaXR5IG9yIGNvcnJlY3RuZXNzIG9mIHRoaXMgY29kZS4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIEQxeCBwcm9qZWN0IGlzIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgb3JpZ2luYWwgUGFyYWxsYXggY29kZSBhbmQgdGhlIAorbW9kaWZpY2F0aW9ucyBhbmQgYWRkaXRpb25zIG1hZGUgdG8gc291cmNlIGNvZGUuICBXaGlsZSB0aGUgb3JpZ2luYWwgY29kZSBpcyAKK29ubHkgdW5kZXIgdGhlIE9yaWdpbmFsIFBhcmFsbGF4IExpY2Vuc2UgdGhlIEQxeCBwcm9qZWN0IGNvbnRhaW5zIG9yaWdpbmFsIAorY29kZSB0aGF0IHdhcyBub3QgbWFkZSBieSBQYXJhbGxheC4gIFRoaXMgQURERUQgYW5kL29yIENIQU5HRUQgY29kZSBoYXMgdGhlIAorZm9sbG93aW5nIGFkZGVkIHJlc3RyaWN0aW9uczoKKworMSkgQnkgdXNpbmcgdGhpcyBzb3VyY2UgeW91IGFyZSBhZ3JlZWluZyB0byB0aGVzZSB0ZXJtcy4gIAorCisyKSBEMXggYW5kIGRlcml2ZWQgd29ya3MgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaWYgT05FIG9mIHRoZSBmb2xsb3dpbmcgaXMgZG9uZToKKwkKKwlhKSBUaGUgbW9kaWZpZWQgdmVyc2lvbiBpcyBwbGFjZWQgdW5kZXIgdGhpcyBsaWNlbnNlLiAgVGhlIHNvdXJjZSAKKwljb2RlIHVzZWQgdG8gY3JlYXRlIHRoZSBtb2RpZmllZCB2ZXJzaW9uIGlzIGZyZWVseSBhbmQgcHVibGljbHkgCisJYXZhaWxhYmxlIHVuZGVyIHRoaXMgbGljZW5zZS4gIAorCisJYikgVGhlIG1vZGlmaWVkIHZlcnNpb24gaXMgb25seSB1c2VkIGJ5IHRoZSBkZXZlbG9wZXIuCisKKzMpIEQxWCBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCitJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCmRpZmYgLS1naXQgYS9saWNlbnNlcy9EQ0MgYi9saWNlbnNlcy9EQ0MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI2MjQwZgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0RDQwpAQCAtMCwwICsxLDM5IEBACisgKiBEaXN0cmlidXRlZCBDaGVja3N1bSBDbGVhcmluZ2hvdXNlCisgKgorICogQ29weXJpZ2h0IChjKSAyMDA1IGJ5IFJoeW9saXRlIFNvZnR3YXJlLCBMTEMKKyAqCisgKiBUaGlzIGFncmVlbWVudCBpcyBub3QgYXBwbGljYWJsZSB0byBhbnkgZW50aXR5IHdoaWNoIHNlbGxzIGFudGktc3BhbQorICogc29sdXRpb25zIHRvIG90aGVycyBvciBwcm92aWRlcyBhbiBhbnRpLXNwYW0gc29sdXRpb24gYXMgcGFydCBvZiBhCisgKiBzZWN1cml0eSBzb2x1dGlvbiBzb2xkIHRvIG90aGVyIGVudGl0aWVzLCBvciB0byBhIHByaXZhdGUgbmV0d29yaworICogd2hpY2ggZW1wbG95cyB0aGUgRENDIG9yIHVzZXMgZGF0YSBwcm92aWRlZCBieSBvcGVyYXRpb24gb2YgdGhlIERDQworICogYnV0IGRvZXMgbm90IHByb3ZpZGUgY29ycmVzcG9uZGluZyBkYXRhIHRvIG90aGVyIHVzZXJzLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBQYXJ0aWVzIG5vdCBlbGlnaWJsZSB0byByZWNlaXZlIGEgbGljZW5zZSB1bmRlciB0aGlzIGFncmVlbWVudCBjYW4KKyAqIG9idGFpbiBhIGNvbW1lcmNpYWwgbGljZW5zZSB0byB1c2UgRENDIGFuZCBwZXJtaXNzaW9uIHRvIHVzZQorICogVS5TLiBQYXRlbnQgNiwzMzAsNTkwIGJ5IGNvbnRhY3RpbmcgQ29tbXRvdWNoIGF0IGh0dHA6Ly93d3cuY29tbXRvdWNoLmNvbS8KKyAqIG9yIGJ5IGVtYWlsIHRvIG5vc3BhbUBjb21tdG91Y2guY29tLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBSSFlPTElURSBTT0ZUV0FSRSwgTExDIERJU0NMQUlNUyBBTEwKKyAqIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBSSFlPTElURSBTT0ZUV0FSRSwgTExDCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywKKyAqIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwKKyAqIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLgorLS0tCisKKworICogU29tZSBwYXJ0cyBpbmNsdWRpbmcgZGNjbGliL2dldG9wdC5jIGFuZCBpbmNsdWRlL3NlbmRtYWlsLXN5c2V4aXRzLmgKKyAqIENvcHlyaWdodCAoYykgMTk4NywgMTk5MywgMTk5NAorICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAqIFNvbWUgb3RoZXIgcGFydHMgaW5jbHVkaW5nIGRjY2xpYi9pbmV0X250b3AuYworICogQ29weXJpZ2h0IChjKSAxOTk2LTE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKworICogU29tZSBvdGhlciBwYXJ0cyBpbmNsdWRpbmcgYXV0b2NvbmYvaW5zdGFsbC1zaAorICoJQ29weXJpZ2h0IDE5OTEgYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0RFUyBiL2xpY2Vuc2VzL0RFUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZTQ0NDY3Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvREVTCkBAIC0wLDAgKzEsNTEgQEAKK0NvcHlyaWdodCAoQykgMTk5NS0xOTk3IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworVGhpcyBwYWNrYWdlIGlzIGFuIERFUyBpbXBsZW1lbnRhdGlvbiB3cml0dGVuIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKS4KK1RoZSBpbXBsZW1lbnRhdGlvbiB3YXMgd3JpdHRlbiBzbyBhcyB0byBjb25mb3JtIHdpdGggTUlUJ3MgbGliZGVzLgorCitUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24uCisKK0NvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCit0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCitJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCithcyB0aGUgYXV0aG9yIG9mIHRoYXQgdGhlIFNTTCBsaWJyYXJ5LiAgVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsCittZXNzYWdlIGF0IHByb2dyYW0gc3RhcnR1cCBvciBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQKK3dpdGggdGhlIHBhY2thZ2UuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IEVyaWMgWW91bmcgKGVheUBjcnlwdHNvZnQuY29tKQorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEVSSUMgWU9VTkcgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKK1RoZSBsaWNlbnNlIGFuZCBkaXN0cmlidXRpb24gdGVybXMgZm9yIGFueSBwdWJsaWNhbGx5IGF2YWlsYWJsZSB2ZXJzaW9uIG9yCitkZXJpdmF0aXZlIG9mIHRoaXMgY29kZSBjYW5ub3QgYmUgY2hhbmdlZC4gIGkuZS4gdGhpcyBjb2RlIGNhbm5vdCBzaW1wbHkgYmUKK2NvcGllZCBhbmQgcHV0IHVuZGVyIGFub3RoZXIgZGlzdHJ1YnV0aW9uIGxpY2Vuc2UKK1tpbmNsdWRpbmcgdGhlIEdOVSBQdWJsaWMgTGljZW5zZS5dCisKK1RoZSByZWFzb24gYmVoaW5kIHRoaXMgYmVpbmcgc3RhdGVkIGluIHRoaXMgZGlyZWN0IG1hbm5lciBpcyBwYXN0CitleHBlcmllbmNlIGluIGNvZGUgc2ltcGx5IGJlaW5nIGNvcGllZCBhbmQgdGhlIGF0dHJpYnV0aW9uIHJlbW92ZWQKK2Zyb20gaXQgYW5kIHRoZW4gYmVpbmcgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiBvdGhlciBwYWNrYWdlcy4gVGhpcworaW1wbGVtZW50YXRpb24gd2FzIGEgbm9uLXRyaXZpYWwgYW5kIHVucGFpZCBlZmZvcnQuCisKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0RNRCBiL2xpY2Vuc2VzL0RNRApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDg0OTEzCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvRE1ECkBAIC0wLDAgKzEsNDYgQEAKKworVGhlIFNvZnR3YXJlIGlzIG5vdCBnZW5lcmFsbHkgYXZhaWxhYmxlIHNvZnR3YXJlLiBJdCBoYXMgbm90IHVuZGVyZ29uZQordGVzdGluZyBhbmQgbWF5IGNvbnRhaW4gZXJyb3JzLiBUaGUgU29mdHdhcmUgd2FzIG5vdCBkZXNpZ25lZCB0byBvcGVyYXRlCithZnRlciBEZWNlbWJlciAzMSwgMTk5OS4gSXQgbWF5IGJlIGluY29tcGxldGUgYW5kIGl0IG1heSBub3QgZnVuY3Rpb24KK3Byb3Blcmx5LiBObyBzdXBwb3J0IG9yIG1haW50ZW5hbmNlIGlzIHByb3ZpZGVkIHdpdGggdGhpcyBTb2Z0d2FyZS4gRG8KK25vdCBpbnN0YWxsIG9yIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGlmCit5b3UgYXJlIG5vdCBhY2N1c3RvbWVkIHRvIHVzaW5nIG9yIGRpc3RyaWJ1dGluZyBleHBlcmltZW50YWwgc29mdHdhcmUuCitEbyBub3QgdXNlIHRoaXMgc29mdHdhcmUgZm9yIGxpZmUgY3JpdGljYWwgYXBwbGljYXRpb25zLCBvciBhcHBsaWNhdGlvbnMKK3RoYXQgY291bGQgY2F1c2Ugc2lnbmlmaWNhbnQgaGFybSBvciBwcm9wZXJ0eSBkYW1hZ2UuCisKK0RpZ2l0YWwgTWFycyBsaWNlbnNlcyB0aGUgU29mdHdhcmUgdG8geW91IG9uIGFuICJBUyBJUyIgYmFzaXMsIHdpdGhvdXQKK3dhcnJhbnR5IG9mIGFueSBraW5kLiBESUdJVEFMIE1BUlMgQU5EIFNZTUFOVEVDIEhFUkVCWSBFWFBSRVNTTFkgRElTQ0xBSU0KK0FMTCBXQVJSQU5USUVTIEFORCBDT05ESVRJT05TLCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcsCitCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFksCitOT05JTkZSSU5HRU1FTlQgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBZb3UgYXJlIHNvbGVseQorcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgdGhpcyBTb2Z0d2FyZSBhbmQKK2Fzc3VtZSBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIHRoZSB1c2Ugb2YgdGhpcyBTb2Z0d2FyZSwgaW5jbHVkaW5nIGJ1dCBub3QKK2xpbWl0ZWQgdG8gdGhlIHJpc2tzIG9mIHByb2dyYW0gZXJyb3JzLCBkYW1hZ2UKK3RvIG9yIGxvc3Mgb2YgZGF0YSwgcHJvZ3JhbXMgb3IgZXF1aXBtZW50LCB1bmF2YWlsYWJpbGl0eSBvciBpbnRlcnJ1cHRpb24gb2YKK29wZXJhdGlvbnMgYW5kIHRoaXJkIHBhcnR5IGNsYWltcy4gWW91IGFncmVlIHRvIGRlZmVuZCwgaW5kZW1uaWZ5IGFuZCBob2xkCitEaWdpdGFsIE1hcnMgYW5kIFN5bWFudGVjLCBpdHMgc3Vic2lkaWFyaWVzLCBhZmZpbGlhdGVzLCBkaXJlY3RvcnMsIG9mZmljZXJzLAorZW1wbG95ZWVzIGFuZCBhZ2VudHMgaGFybWxlc3MgZnJvbSBhbGwgY2xhaW1zIG9yIGRlbWFuZHMgbWFkZSBhZ2FpbnN0IHRoZW0KKyhhbmQgYW55IHJlbGF0ZWQgbG9zc2VzLCBkYW1hZ2VzLCBleHBlbnNlcworYW5kIGNvc3RzKSBhcmlzaW5nIG91dCBvZiB5b3VyIHVzZSBvZiB0aGUgU29mdHdhcmUuIERJR0lUQUwgTUFSUyBBTkQgU1lNQU5URUMKK1dJTEwgTk9UIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCBEQU1BR0VTIE9SIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IKK0lORElSRUNUIERBTUFHRVMgT1IgRk9SIEFOWSBFQ09OT01JQyBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORworTE9TVCBQUk9GSVRTIE9SIFNBVklOR1MpLCBFVkVOIElGIERJR0lUQUwgTUFSUyBPUiBTWU1BTlRFQyBIQVMgQkVFTiBBRFZJU0VECitPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorRGlnaXRhbCBNYXJzIGFuZCBTeW1hbnRlYyB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIHRoZSBsb3NzIG9mLCBvciBkYW1hZ2UgdG8sCit5b3VyIHJlY29yZHMgb3IgZGF0YSwgdGhlIHJlY29yZHMgb3IKK2RhdGEgb2YgYW55IHRoaXJkIHBhcnR5LCBvciBhbnkgZGFtYWdlcyBjbGFpbWVkIGJ5IHlvdSBiYXNlZCBvbiBhIHRoaXJkIHBhcnR5CitjbGFpbS4KKworSWYgeW91IHNlbmQgYW55IG1lc3NhZ2VzIHRvIERpZ2l0YWwgTWFycywgb24gZWl0aGVyIHRoZSBEaWdpdGFsIE1hcnMKK25ld3Nncm91cHMsIHRoZSBEaWdpdGFsIE1hcnMgbWFpbGluZyBsaXN0LCBvciB2aWEgZW1haWwsIHlvdSBhZ3JlZSBub3QKK3RvIG1ha2UgYW55IGNsYWltcyBvZiBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBvdmVyIHRoZSBjb250ZW50cyBvZiB0aG9zZSBtZXNzYWdlcy4KKworVGhlIFNvZnR3YXJlIGlzIGNvcHlyaWdodGVkIGFuZCBjb21lcyB3aXRoIGEgc2luZ2xlIHVzZXIgbGljZW5zZSwKK2FuZCBtYXkgbm90IGJlIHJlZGlzdHJpYnV0ZWQuIElmIHlvdSB3aXNoIHRvIG9idGFpbiBhIHJlZGlzdHJpYnV0aW9uIGxpY2Vuc2UsCitwbGVhc2UgY29udGFjdCBEaWdpdGFsIE1hcnMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitQaG90byBjcmVkaXRzOiBDb3VydGVzeSBvZiBOQVNBL0pQTC9DYWx0ZWNoCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCmRpZmYgLS1naXQgYS9saWNlbnNlcy9ET09NMyBiL2xpY2Vuc2VzL0RPT00zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzYjVlYmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9ET09NMwpAQCAtMCwwICsxLDgzIEBACitET09NIDMgTElNSVRFRCBVU0UgU09GVFdBUkUgTElDRU5TRSBBR1JFRU1FTlQKKworVGhpcyBET09NIDMgTGltaXRlZCBVc2UgU29mdHdhcmUgTGljZW5zZSBBZ3JlZW1lbnQgKHRoaXMgIkFncmVlbWVudCIpIGlzIGEgbGVnYWwgYWdyZWVtZW50IGFtb25nIHlvdSwgdGhlIGVuZC11c2VyLCBhbmQgSWQgU29mdHdhcmUsIEluYy4gKCJJZCBTb2Z0d2FyZSIpLCBhbmQgQWN0aXZpc2lvbiBQdWJsaXNoaW5nLCBJbmMuICgiQWN0aXZpc2lvbiIpLiAgQlkgQ09OVElOVUlORyBUSEUgSU5TVEFMTEFUSU9OIE9GIFRIRSBGVUxMIFZFUlNJT04gR0FNRSBQUk9HUkFNIEVOVElUTEVEIERPT00gMyAoVEhFICJTT0ZUV0FSRSIpLCBCWSBMT0FESU5HIE9SIFJVTk5JTkcgVEhFIFNPRlRXQVJFLCBPUiBCWSBQTEFDSU5HIE9SIENPUFlJTkcgVEhFIFNPRlRXQVJFIE9OVE8gWU9VUiBDT01QVVRFUiBIQVJEIERSSVZFLCBDT01QVVRFUiBSQU0gT1IgT1RIRVIgU1RPUkFHRSwgWU9VIEFSRSBBR1JFRUlORyBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBBR1JFRU1FTlQuCisKKzEuIEdyYW50IG9mIExpY2Vuc2UuICBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgcHJvdmlzaW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgc28gbG9uZyBhcyB5b3UgZnVsbHkgY29tcGx5IGF0IGFsbCB0aW1lcyB3aXRoIHRoaXMgQWdyZWVtZW50LCBJZCBTb2Z0d2FyZSBncmFudHMgdG8geW91IHRoZSBub24tZXhjbHVzaXZlIGFuZCBsaW1pdGVkIHJpZ2h0IHRvIHVzZSB0aGUgU29mdHdhcmUgb25seSBpbiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGZvcm0uICBUaGUgdGVybSAiU29mdHdhcmUiIGluY2x1ZGVzIGFsbCBlbGVtZW50cyBvZiB0aGUgU29mdHdhcmUsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBkYXRhIGZpbGVzIGFuZCBzY3JlZW4gZGlzcGxheXMuICBZb3UgYXJlIG5vdCByZWNlaXZpbmcgYW55IG93bmVyc2hpcCBvciBwcm9wcmlldGFyeSByaWdodCwgdGl0bGUsIG9yIGludGVyZXN0IGluIG9yIHRvIHRoZSBTb2Z0d2FyZSBvciB0aGUgY29weXJpZ2h0cywgdHJhZGVtYXJrcywgb3Igb3RoZXIgcmlnaHRzIHJlbGF0ZWQgdGhlcmV0by4gIEZvciBwdXJwb3NlcyBvZiB0aGUgZmlyc3Qgc2VudGVuY2Ugb2YgdGhpcyBzZWN0aW9uLCAidXNlIiBtZWFucyBsb2FkaW5nIHRoZSBTb2Z0d2FyZSBpbnRvIFJBTSBhbmQvb3Igb250byBjb21wdXRlciBoYXJkIGRyaXZlLCBhcyB3ZWxsIGFzIGluc3RhbGxhdGlvbiBvZiB0aGUgU29mdHdhcmUgb24gYSBoYXJkIGRpc2sgb3Igb3RoZXIgc3RvcmFnZSBkZXZpY2UsIGFuZCBtZWFucyB0aGUgdXNlcyBwZXJtaXR0ZWQgaW4gc2VjdGlvbnMgMiBhbmQgNCBoZXJlaW5iZWxvdy4gIFlvdSBhZ3JlZSB0aGF0IHRoZSBTb2Z0d2FyZSB3aWxsIG5vdCBiZSBkb3dubG9hZGVkLCBzaGlwcGVkLCB0cmFuc2ZlcnJlZCwgZXhwb3J0ZWQgb3IgcmUgZXhwb3J0ZWQgaW50byBhbnkgY291bnRyeSBpbiB2aW9sYXRpb24gb2YgdGhlIFVuaXRlZCBTdGF0ZXMgRXhwb3J0IEFkbWluaXN0cmF0aW9uIEFjdCAob3IgYW55IG90aGVyIGxhdyBnb3Zlcm5pbmcgc3VjaCBtYXR0ZXJzKSBieSB5b3Ugb3IgYW55b25lIGF0IHlvdXIgZGlyZWN0aW9uLCBhbmQgdGhhdCB5b3Ugd2lsbCBub3QgdXRpbGl6ZSBhbmQgd2lsbCBub3QgYXV0aG9yaXplIGFueW9uZSB0byB1dGlsaXplIHRoZSBTb2Z0d2FyZSBpbiBhbnkgb3RoZXIgbWFubmVyIGluIHZpb2xhdGlvbiBvZiBhbnkgYXBwbGljYWJsZSBsYXcuICBUaGUgU29mdHdhcmUgc2hhbGwgbm90IGJlIGRvd25sb2FkZWQgb3Igb3RoZXJ3aXNlIGV4cG9ydGVkIG9yIHJlIGV4cG9ydGVkIGludG8gKG9yIHRvIGEgbmF0aW9uYWwgb3IgcmVzaWRlbnQgb2YpIGFueSBjb3VudHJ5IHRvIHdoaWNoIHRoZSBVbml0ZWQgU3RhdGVzIGhhcyBlbWJhcmdvZWQgZ29vZHMsIG9yIHRvIGFueW9uZSBvciBpbnRvIGFueSBjb3VudHJ5IHdoby90aGF0IGFyZSBwcm9oaWJpdGVkLCBieSBhcHBsaWNhYmxlIGxhdywgZnJvbSByZWNlaXZpbmcgc3VjaCBwcm9wZXJ0eS4gIEluIGV4ZXJjaXNpbmcgeW91ciBsaW1pdGVkIHJpZ2h0cyBoZXJldW5kZXIsIHlvdSBzaGFsbCBjb21wbHksIGF0IGFsbCB0aW1lcywgd2l0aCBhbGwgYXBwbGljYWJsZSBsYXdzLCByZWd1bGF0aW9ucywgb3JkaW5hbmNlcywgYW5kIHN0YXR1dGVzLiAgSWQgU29mdHdhcmUgcmVzZXJ2ZXMgYWxsIHJpZ2h0cyBub3QgZ3JhbnRlZCBpbiB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFsbCByaWdodHMgdG8gSWQgU29mdHdhcmUncyB0cmFkZW1hcmtzLgorCisyLiBQZXJtaXR0ZWQgTmV3IENyZWF0aW9ucy4gIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBwcm92aXNpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBzbyBsb25nIGFzIHlvdSBmdWxseSBjb21wbHkgYXQgYWxsIHRpbWVzIHdpdGggdGhpcyBBZ3JlZW1lbnQsIElkIFNvZnR3YXJlIGdyYW50cyB0byB5b3UgdGhlIG5vbi1leGNsdXNpdmUgYW5kIGxpbWl0ZWQgcmlnaHQgdG8gY3JlYXRlIGZvciB0aGUgU29mdHdhcmUgKGV4Y2VwdCBhbnkgU29mdHdhcmUgY29kZSkgeW91ciBvd24gbW9kaWZpY2F0aW9ucyAodGhlICJOZXcgQ3JlYXRpb25zIikgdGhhdCBzaGFsbCBvcGVyYXRlIG9ubHkgd2l0aCB0aGUgU29mdHdhcmUgKGJ1dCBub3QgYW55IGRlbW8sIHRlc3QsIG9yIG90aGVyIHZlcnNpb24gb2YgdGhlIFNvZnR3YXJlKS4gIFlvdSBtYXkgaW5jbHVkZSB3aXRoaW4gdGhlIE5ldyBDcmVhdGlvbnMgY2VydGFpbiB0ZXh0dXJlcyBhbmQgb3RoZXIgaW1hZ2VzICh0aGUgIlNvZnR3YXJlIEltYWdlcyIpIGZyb20gdGhlIFNvZnR3YXJlLiAgWW91IHNoYWxsIG5vdCBjcmVhdGUgYW55IE5ldyBDcmVhdGlvbnMgdGhhdCBpbmZyaW5nZSBhZ2FpbnN0IGFueSB0aGlyZC1wYXJ0eSByaWdodCBvciB0aGF0IGFyZSBsaWJlbG91cywgZGVmYW1hdG9yeSwgb2JzY2VuZSwgZmFsc2UsIG1pc2xlYWRpbmcsIG9yIG90aGVyd2lzZSBpbGxlZ2FsIG9yIHVubGF3ZnVsLiAgWW91IGFncmVlIHRoYXQgdGhlIE5ldyBDcmVhdGlvbnMgd2lsbCBub3QgYmUgZG93bmxvYWRlZCwgc2hpcHBlZCwgdHJhbnNmZXJyZWQsIGV4cG9ydGVkLCBvciByZSBleHBvcnRlZCBpbnRvIGFueSBjb3VudHJ5IGluIHZpb2xhdGlvbiBvZiB0aGUgVW5pdGVkIFN0YXRlcyBFeHBvcnQgQWRtaW5pc3RyYXRpb24gQWN0IChvciBhbnkgb3RoZXIgbGF3IGdvdmVybmluZyBzdWNoIG1hdHRlcnMpIGJ5IHlvdSBvciBhbnlvbmUgYXQgeW91ciBkaXJlY3Rpb24sIGFuZCB0aGF0IHlvdSB3aWxsIG5vdCB1dGlsaXplIGFuZCB3aWxsIG5vdCBhdXRob3JpemUgYW55b25lIHRvIHV0aWxpemUgdGhlIE5ldyBDcmVhdGlvbnMgaW4gYW55IG90aGVyIG1hbm5lciBpbiB2aW9sYXRpb24gb2YgYW55IGFwcGxpY2FibGUgbGF3LiAgVGhlIE5ldyBDcmVhdGlvbnMgc2hhbGwgbm90IGJlIGRvd25sb2FkZWQgb3Igb3RoZXJ3aXNlIGV4cG9ydGVkIG9yIHJlIGV4cG9ydGVkIGludG8gKG9yIHRvIGEgbmF0aW9uYWwgb3IgcmVzaWRlbnQgb2YpIGFueSBjb3VudHJ5IHRvIHdoaWNoIHRoZSBVbml0ZWQgU3RhdGVzIGhhcyBlbWJhcmdvZWQgZ29vZHMgb3IgdG8gYW55b25lIG9yIGludG8gYW55IGNvdW50cnkgd2hvL3RoYXQgYXJlIHByb2hpYml0ZWQsIGJ5IGFwcGxpY2FibGUgbGF3LCBmcm9tIHJlY2VpdmluZyBzdWNoIHByb3BlcnR5LiAgWW91IHNoYWxsIG5vdCByZW50LCBzZWxsLCBsZWFzZSwgbGVuZCwgb2ZmZXIgb24gYSBwYXktcGVyLXBsYXkgYmFzaXMsIG9yIG90aGVyd2lzZSBjb21tZXJjaWFsbHkgZXhwbG9pdCBvciBjb21tZXJjaWFsbHkgZGlzdHJpYnV0ZSB0aGUgTmV3IENyZWF0aW9ucy4gIFlvdSBhcmUgcGVybWl0dGVkIHRvIGRpc3RyaWJ1dGUsIHdpdGhvdXQgYW55IGNvc3Qgb3IgY2hhcmdlLCB0aGUgTmV3IENyZWF0aW9ucyBvbmx5IHRvIG90aGVyIGVuZC11c2VycyBzbyBsb25nIGFzIHN1Y2ggZGlzdHJpYnV0aW9uIGlzIG5vdCBpbmZyaW5naW5nIGFnYWluc3QgYW55IHRoaXJkLXBhcnR5IHJpZ2h0IGFuZCBvdGhlcndpc2UgaXMgbm90IGlsbGVnYWwgb3IgdW5sYXdmdWwuICBBcyBub3RlZCBiZWxvdywgaW4gdGhlIGV2ZW50IHlvdSBjb21taXQgYW55IGJyZWFjaCBvZiB0aGlzIEFncmVlbWVudCwgeW91ciBsaWNlbnNlIGFuZCB0aGlzIEFncmVlbWVudCBhdXRvbWF0aWNhbGx5IHNoYWxsIHRlcm1pbmF0ZSwgd2l0aG91dCBub3RpY2UuCisKKzMuIFByb2hpYml0aW9ucyB3aXRoIFJlZ2FyZCB0byB0aGUgU29mdHdhcmUuICBZb3UsIHdoZXRoZXIgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgc2hhbGwgbm90IGRvIGFueSBvZiB0aGUgZm9sbG93aW5nIGFjdHM6CisKK2EuIHJlbnQgdGhlIFNvZnR3YXJlOworCitiLiBzZWxsIHRoZSBTb2Z0d2FyZTsKKworYy4gbGVhc2Ugb3IgbGVuZCB0aGUgU29mdHdhcmU7CisKK2QuIG9mZmVyIHRoZSBTb2Z0d2FyZSBvbiBhIHBheS1wZXItcGxheSBiYXNpczsKKworZS4gZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYnkgYW55IG1lYW5zLCBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgSW50ZXJuZXQgb3Igb3RoZXIgZWxlY3Ryb25pYyBkaXN0cmlidXRpb24sIGRpcmVjdCBtYWlsLCByZXRhaWwsIG1haWwgb3JkZXIsIG9yIG90aGVyIG1lYW5zOworCitmLiBpbiBhbnkgb3RoZXIgbWFubmVyIGFuZCB0aHJvdWdoIGFueSBtZWRpdW0gd2hhdHNvZXZlciBjb21tZXJjaWFsbHkgZXhwbG9pdCB0aGUgU29mdHdhcmUgb3IgdXNlIHRoZSBTb2Z0d2FyZSBmb3IgYW55IGNvbW1lcmNpYWwgcHVycG9zZTsKKworZy4gZGlzYXNzZW1ibGUsIHJldmVyc2UgZW5naW5lZXIsIGRlY29tcGlsZSwgbW9kaWZ5IChleGNlcHQgYXMgcGVybWl0dGVkIGJ5IHNlY3Rpb24gMiBoZXJlaW5hYm92ZSkgb3IgYWx0ZXIgdGhlIFNvZnR3YXJlOworCitoLiB0cmFuc2xhdGUgdGhlIFNvZnR3YXJlOworCitpLiByZXByb2R1Y2Ugb3IgY29weSB0aGUgU29mdHdhcmUgKGV4Y2VwdCBhcyBwZXJtaXR0ZWQgYnkgc2VjdGlvbiA0IGhlcmVpbmJlbG93KTsKKworai4gcHVibGljbHkgZGlzcGxheSB0aGUgU29mdHdhcmU7CisKK2suIHByZXBhcmUgb3IgZGV2ZWxvcCBkZXJpdmF0aXZlIHdvcmtzIGJhc2VkIHVwb24gdGhlIFNvZnR3YXJlOworCitsLiByZW1vdmUgb3IgYWx0ZXIgYW55IG5vdGljZXMgb3Igb3RoZXIgbWFya2luZ3Mgb3IgbGVnZW5kcywgc3VjaCBhcyB0cmFkZW1hcmsgb3IgY29weXJpZ2h0IG5vdGljZXMsIGFmZml4ZWQgb24gb3Igd2l0aGluIHRoZSBTb2Z0d2FyZSBvciB0aGUgUHJpbnRlZCBNYXRlcmlhbHMgKGFzIGRlZmluZWQgaW4gc2VjdGlvbiA1IGhlcmVpbmJlbG93KTsgb3IKKworbS4gcmVtb3ZlLCBhbHRlciwgbW9kaWZ5LCBkaXNhYmxlLCBvciByZWR1Y2UgYW55IG9mIHRoZSBhbnRpLXBpcmFjeSBtZWFzdXJlcyBjb250YWluZWQgaW4gdGhlIFNvZnR3YXJlLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgbWVhc3VyZXMgcmVsYXRpbmcgdG8gbXVsdGlwbGF5ZXIgcGxheS4KKworNC4gUHJvaGliaXRpb24gYWdhaW5zdCBDaGVhdCBQcm9ncmFtcy4gIEFueSBhdHRlbXB0IGJ5IHlvdSwgZWl0aGVyIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIHRvIGNpcmN1bXZlbnQgb3IgYnlwYXNzIGFueSBlbGVtZW50IG9mIHRoZSBTb2Z0d2FyZSB0byBnYWluIGFueSBhZHZhbnRhZ2UgaW4gbXVsdGlwbGF5ZXIgcGxheSBvZiB0aGUgU29mdHdhcmUgaXMgYSBtYXRlcmlhbCBicmVhY2ggb2YgdGhpcyBBZ3JlZW1lbnQuICBJdCBpcyBhIG1hdGVyaWFsIGJyZWFjaCBvZiB0aGlzIEFncmVlbWVudCBmb3IgeW91LCB3aGV0aGVyIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIHRvIGNyZWF0ZSwgZGV2ZWxvcCwgY29weSwgcmVwcm9kdWNlLCBkaXN0cmlidXRlLCBvciBvdGhlcndpc2UgbWFrZSBhbnkgdXNlIG9mIGFueSBzb2Z0d2FyZSBwcm9ncmFtIG9yIGFueSBtb2RpZmljYXRpb24gdG8gdGhlIFNvZnR3YXJlICgiQ2hlYXQgUHJvZ3JhbSIpIGl0c2VsZiB0aGF0IGVuYWJsZXMgb3IgYWxsb3dzIHRoZSB1c2VyIHRoZXJlb2YgdG8gb2J0YWluIGFuIGFkdmFudGFnZSBvciBvdGhlcndpc2UgZXhwbG9pdCBhbm90aGVyIFNvZnR3YXJlIHBsYXllciBvciB1c2VyIHdoZW4gcGxheWluZyB0aGUgU29mdHdhcmUgYWdhaW5zdCBvdGhlciBwbGF5ZXJzIG9yIHVzZXJzIG9uIGEgbG9jYWwgYXJlYSBuZXR3b3JrLCBhbnkgb3RoZXIgbmV0d29yaywgb3Igb24gdGhlIEludGVybmV0LiAgSGFja2luZyBpbnRvIHRoZSBleGVjdXRhYmxlIG9mIHRoZSBTb2Z0d2FyZSwgbW9kaWZpY2F0aW9uIG9mIHRoZSBTb2Z0d2FyZSwgb3IgYW55IG90aGVyIHVzZSBvZiB0aGUgU29mdHdhcmUgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBjcmVhdGlvbiwgZGV2ZWxvcG1lbnQsIG9yIHVzZSBvZiBhbnkgc3VjaCB1bmF1dGhvcml6ZWQgQ2hlYXQgUHJvZ3JhbSBpcyBhIG1hdGVyaWFsIGJyZWFjaCBvZiB0aGlzIEFncmVlbWVudC4gIENoZWF0IFByb2dyYW1zIGluY2x1ZGUsIGJ1dCBhcmUgbm90IGxpbWl0ZWQgdG8sIHByb2dyYW1zIHRoYXQgYWxsb3cgU29mdHdhcmUgcGxheWVycyBvciB1c2VycyB0byBzZWUgdGhyb3VnaCB3YWxscyBvciBvdGhlciBsZXZlbCBnZW9tZXRyeTsgcHJvZ3JhbXMgdGhhdCBhbGxvdyBTb2Z0d2FyZSBwbGF5ZXJzIG9yIHVzZXJzIHRvIGNoYW5nZSB0aGVpciByYXRlIG9mIHNwZWVkIG91dHNpZGUgdGhlIGFsbG93YWJsZSBsaW1pdHMgb2YgdGhlIFNvZnR3YXJlOyBwcm9ncmFtcyB0aGF0IGNyYXNoIGVpdGhlciBhbmQvb3Igb3RoZXIgU29mdHdhcmUgcGxheWVycywgdXNlcnMsIFBDIGNsaWVudHMsIG9yIG5ldHdvcmsgc2VydmVyczsgcHJvZ3JhbXMgdGhhdCBhdXRvbWF0aWNhbGx5IHRhcmdldCBvdGhlciBTb2Z0d2FyZSBwbGF5ZXJzIG9yIHVzZXJzIChjb21tb25seSByZWZlcnJlZCB0byBhcyAiYWltYm90cyIpIHRoYXQgYXV0b21hdGljYWxseSBzaW11bGF0ZSBTb2Z0d2FyZSBwbGF5ZXIgb3IgdXNlciBpbnB1dCBmb3IgdGhlIHB1cnBvc2Ugb2YgZ2FpbmluZyBhbiBhZHZhbnRhZ2Ugb3ZlciBvdGhlciBTb2Z0d2FyZSBwbGF5ZXJzIG9yIHVzZXJzOyBvciBhbnkgb3RoZXIgcHJvZ3JhbSBvciBtb2RpZmljYXRpb24gdGhhdCBmdW5jdGlvbnMgaW4gYSBzaW1pbGFyIGNhcGFjaXR5IG9yIGFsbG93cyBhbnkgcHJvaGliaXRlZCBjb25kdWN0LgorCitJbiB0aGUgZXZlbnQgeW91IGJyZWFjaCB0aGlzIHNlY3Rpb24gb3Igb3RoZXJ3aXNlIGJyZWFjaCB0aGlzIEFncmVlbWVudCwgeW91ciBsaWNlbnNlIGFuZCB0aGlzIEFncmVlbWVudCBhdXRvbWF0aWNhbGx5IHNoYWxsIHRlcm1pbmF0ZSwgd2l0aG91dCBub3RpY2UsIGFuZCB5b3Ugc2hhbGwgaGF2ZSBubyByaWdodCB0byBwbGF5IHRoZSBTb2Z0d2FyZSBhZ2FpbnN0IG90aGVyIHBsYXllcnMgb3IgbWFrZSBhbnkgb3RoZXIgdXNlIG9mIHRoZSBTb2Z0d2FyZS4KKworNS4gUGVybWl0dGVkIENvcHlpbmcuICBZb3UgbWF5IG1ha2Ugb25seSB0aGUgZm9sbG93aW5nIGNvcGllcyBvZiB0aGUgU29mdHdhcmU6ICAoaSkgeW91IG1heSBjb3B5IHRoZSBTb2Z0d2FyZSBmcm9tIHRoZSBDRCBST00gdGhhdCB5b3UgcHVyY2hhc2Ugb250byB5b3VyIGNvbXB1dGVyIGhhcmQgZHJpdmU7IChpaSkgeW91IG1heSBjb3B5IHRoZSBTb2Z0d2FyZSBmcm9tIHlvdXIgY29tcHV0ZXIgaGFyZCBkcml2ZSBpbnRvIHlvdXIgY29tcHV0ZXIgUkFNOyBhbmQgKGlpaSkgeW91IG1heSBtYWtlIG9uZSAoMSkgImJhY2sgdXAiIG9yIGFyY2hpdmFsIGNvcHkgb2YgdGhlIFNvZnR3YXJlIG9uIG9uZSAoMSkgaGFyZCBkaXNrLgorCis2LiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgUmlnaHRzLiAgQ2VydGFpbiBwcmludGVkIG1hdGVyaWFscyAodGhlICJQcmludGVkIE1hdGVyaWFscyIpIGFjY29tcGFueSB0aGUgU29mdHdhcmUuICBUaGUgU29mdHdhcmUsIHRoZSBQcmludGVkIE1hdGVyaWFscywgYW5kIGFsbCBjb3B5cmlnaHRzLCB0cmFkZW1hcmtzLCBhbmQgYWxsIG90aGVyIGNvbmNlaXZhYmxlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgcmVsYXRlZCB0byB0aGUgU29mdHdhcmUgYW5kIHRoZSBQcmludGVkIE1hdGVyaWFscyBhcmUgb3duZWQgYnkgSWQgU29mdHdhcmUgYW5kIGFyZSBwcm90ZWN0ZWQgYnkgVW5pdGVkIFN0YXRlcyBjb3B5cmlnaHQgbGF3cywgaW50ZXJuYXRpb25hbCB0cmVhdHkgcHJvdmlzaW9ucywgYW5kIGFsbCBhcHBsaWNhYmxlIGxhdywgc3VjaCBhcyB0aGUgTGFuaGFtIEFjdC4gIFlvdSBtdXN0IHRyZWF0IHRoZSBTb2Z0d2FyZSBhbmQgdGhlIFByaW50ZWQgTWF0ZXJpYWxzIGxpa2UgYW55IG90aGVyIGNvcHlyaWdodGVkIG1hdGVyaWFsLCBhcyByZXF1aXJlZCBieSAxNyBVLlMuQy4gwqcgMTAxIGV0IHNlcS4gYW5kIG90aGVyIGFwcGxpY2FibGUgbGF3LiAgWW91IGFncmVlIHRvIHVzZSB5b3VyIGJlc3QgZWZmb3J0cyB0byBzZWUgdGhhdCBhbnkgdXNlciBvZiB0aGUgU29mdHdhcmUgbGljZW5zZWQgaGVyZXVuZGVyLCB0aGUgUHJpbnRlZCBNYXRlcmlhbHMgb3IgdGhlIE5ldyBDcmVhdGlvbnMgY29tcGxpZXMgd2l0aCB0aGlzIEFncmVlbWVudC4gIFlvdSBhZ3JlZSB0aGF0IHlvdSBhcmUgcmVjZWl2aW5nIGEgY29weSBvZiB0aGUgU29mdHdhcmUgYW5kIHRoZSBQcmludGVkIE1hdGVyaWFscyBieSBsaW1pdGVkIGxpY2Vuc2Ugb25seSBhbmQgbm90IGJ5IHNhbGUgYW5kIHRoYXQgdGhlICJmaXJzdCBzYWxlIiBkb2N0cmluZSBvZiAxNyBVLlMuQy4gwqcgMTA5IGRvZXMgbm90IGFwcGx5IHRvIHlvdXIgcmVjZWlwdCBvciB1c2Ugb2YgdGhlIFNvZnR3YXJlIG9yIHRoZSBQcmludGVkIE1hdGVyaWFscy4gIFRoaXMgc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSBjYW5jZWxsYXRpb24gb3IgdGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQuCisKKzcuIE5PIElEIFNPRlRXQVJFIFdBUlJBTlRJRVMuICBJRCBTT0ZUV0FSRSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMsIFdIRVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBBTlkgV0FSUkFOVFkgT0YgTk9OLUlORlJJTkdFTUVOVCwgV0lUSCBSRVNQRUNUIFRPIFRIRSBTT0ZUV0FSRSwgVEhFIFBSSU5URUQgTUFURVJJQUxTLCBUSEUgU09GVFdBUkUgSU1BR0VTLCBBTkQgT1RIRVJXSVNFLiAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFdJVEhPVVQgV0FSUkFOVFkuICBJRCBTT0ZUV0FSRSBET0VTIE5PVCBXQVJSQU5UIFRIQVQgVEhFIFNPRlRXQVJFIE9SIFRIRSBPUEVSQVRJT04gT0YgVEhFIFNPRlRXQVJFIFdJTEwgQkUgVU5JTlRFUlJVUFRFRCBPUiBFUlJPUi1GUkVFIE9SIFRIQVQgVEhFIFNPRlRXQVJFIFdJTEwgTUVFVCBZT1VSIFNQRUNJRklDIE9SIFNQRUNJQUwgUkVRVUlSRU1FTlRTLiAgQURESVRJT05BTCBTVEFURU1FTlRTLCBXSEVUSEVSIE9SQUwgT1IgV1JJVFRFTiwgRE8gTk9UIENPTlNUSVRVVEUgV0FSUkFOVElFUyBCWSBJRCBTT0ZUV0FSRSBBTkQgU0hPVUxEIE5PVCBCRSBSRUxJRUQgVVBPTi4gIFRoaXMgc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSBjYW5jZWxsYXRpb24gb3IgdGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQuCisKKzguIExpbWl0ZWQgQWN0aXZpc2lvbiBXYXJyYW50eS4gIEFjdGl2aXNpb24gd2FycmFudHMgdG8gdGhlIG9yaWdpbmFsIGNvbnN1bWVyIHB1cmNoYXNlciBvZiB0aGUgU29mdHdhcmUgdGhhdCB0aGUgcmVjb3JkaW5nIG1lZGl1bSBvbiB3aGljaCB0aGUgU29mdHdhcmUgaXMgcmVjb3JkZWQgd2lsbCBiZSBmcmVlIGZyb20gZGVmZWN0cyBpbiBtYXRlcmlhbCBhbmQgd29ya21hbnNoaXAgZm9yIG5pbmV0eSAoOTApIGRheXMgZnJvbSB0aGUgZGF0ZSBvZiBwdXJjaGFzZS4gIElmIHRoZSByZWNvcmRpbmcgbWVkaXVtIGlzIGZvdW5kIGRlZmVjdGl2ZSB3aXRoaW4gbmluZXR5ICg5MCkgZGF5cyBvZiBvcmlnaW5hbCBwdXJjaGFzZSwgQWN0aXZpc2lvbiBhZ3JlZXMgdG8gcmVwbGFjZSwgZnJlZSBvZiBjaGFyZ2UsIGFueSBTb2Z0d2FyZSBkaXNjb3ZlcmVkIHRvIGJlIGRlZmVjdGl2ZSB3aXRoaW4gc3VjaCBwZXJpb2QgdXBvbiBpdHMgcmVjZWlwdCBvZiB0aGUgU29mdHdhcmUsIHBvc3RhZ2UgcGFpZCwgd2l0aCB0aGUgcHJvb2Ygb2YgdGhlIGRhdGUgb2YgcHVyY2hhc2UsIGFzIGxvbmcgYXMgdGhlIFNvZnR3YXJlIHN0aWxsIGlzIGJlaW5nIG1hbnVmYWN0dXJlZCBieSBBY3RpdmlzaW9uLiAgSW4gdGhlIGV2ZW50IHRoYXQgdGhlIFNvZnR3YXJlIG5vIGxvbmdlciBpcyBhdmFpbGFibGUsIEFjdGl2aXNpb24gcmV0YWlucyB0aGUgcmlnaHQgdG8gc3Vic3RpdHV0ZSBhIHNpbWlsYXIgZ2FtZSBwcm9ncmFtIG9mIGVxdWFsIG9yIGdyZWF0ZXIgdmFsdWUuICBUaGlzIHdhcnJhbnR5IGlzIGxpbWl0ZWQgdG8gdGhlIHJlY29yZGluZyBtZWRpdW0gY29udGFpbmluZyB0aGUgU29mdHdhcmUgYXMgb3JpZ2luYWxseSBwcm92aWRlZCBieSBBY3RpdmlzaW9uIGFuZCBpcyBub3QgYXBwbGljYWJsZSB0byBub3JtYWwgd2VhciBhbmQgdGVhci4gVGhpcyB3YXJyYW50eSBzaGFsbCBub3QgYmUgYXBwbGljYWJsZSBhbmQgc2hhbGwgYmUgdm9pZCBpZiB0aGUgZGVmZWN0IGhhcyBhcmlzZW4gdGhyb3VnaCBhYnVzZSwgbWlzdHJlYXRtZW50LCBvciBuZWdsZWN0LgorCitFWENFUFQgQVMgU0VUIEZPUlRIIEFCT1ZFLCBUSElTIFdBUlJBTlRZIElTIElOIExJRVUgT0YgQUxMIE9USEVSIFdBUlJBTlRJRVMsIFdIRVRIRVIgT1JBTCBPUiBXUklUVEVOLCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBBTlkgV0FSUkFOVFkgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgTk9OLUlORlJJTkdFTUVOVCwgQU5EIE5PIE9USEVSIFJFUFJFU0VOVEFUSU9OUyBPUiBDTEFJTVMgT0YgQU5ZIEtJTkQgU0hBTEwgQkUgQklORElORyBPTiBPUiBPQkxJR0FURSBBQ1RJVklTSU9OLgorCitXaGVuIHJldHVybmluZyB0aGUgU29mdHdhcmUgZm9yIHdhcnJhbnR5IHJlcGxhY2VtZW50LCB0aGUgb3JpZ2luYWwgU29mdHdhcmUgZGlza3MgbXVzdCBiZSBzZW50IG9ubHkgaW4gcHJvdGVjdGl2ZSBwYWNrYWdpbmcgYW5kIGluY2x1ZGU6ICAoMSkgcGhvdG9jb3B5IG9mIHlvdXIgZGF0ZWQgc2FsZXMgcmVjZWlwdDsgKDIpIHlvdXIgbmFtZSBhbmQgcmV0dXJuIGFkZHJlc3MgdHlwZWQgb3IgY2xlYXJseSBwcmludGVkOyAoMykgYSBicmllZiBub3RlIGRlc2NyaWJpbmcgdGhlIGRlZmVjdCwgdGhlIHByb2JsZW0ocykgeW91IGFyZSBlbmNvdW50ZXJpbmcsIGFuZCB0aGUgc3lzdGVtIG9uIHdoaWNoIHlvdSBhcmUgcnVubmluZyB0aGUgU29mdHdhcmU7IGFuZCAoNCkgaWYgeW91IGFyZSByZXR1cm5pbmcgdGhlIFNvZnR3YXJlIGFmdGVyIHRoZSBuaW5ldHkgKDkwKSBkYXkgd2FycmFudHkgcGVyaW9kLCBidXQgd2l0aGluIG9uZSAoMSkgeWVhciBhZnRlciB0aGUgZGF0ZSBvZiBwdXJjaGFzZSwgcGxlYXNlIGluY2x1ZGUgY2hlY2sgb3IgbW9uZXkgb3JkZXIgZm9yICQxMC4wMCBVLlMuIChBJDE5IGZvciBBdXN0cmFsaWEsIG9yIMKjMTAuMDAgZm9yIEV1cm9wZSkgY3VycmVuY3kgcGVyIENEIG9yIGZsb3BweSBkaXNrIHJlcGxhY2VtZW50LiAgTm90ZTogIENlcnRpZmllZCBtYWlsIHJlY29tbWVuZGVkLgorCitJbiB0aGUgVW5pdGVkIFN0YXRlcywgc2VuZCB0bzoKKworV2FycmFudHkgUmVwbGFjZW1lbnRzCitBY3RpdmlzaW9uLCBJbmMuCitQLk8uIEJveCA2NzcxMworTG9zIEFuZ2VsZXMsIENhbGlmb3JuaWEgIDkwMDY3CisKK0luIEV1cm9wZSwgc2VuZCB0bzoKKworV2FycmFudHkgUmVwbGFjZW1lbnRzCitBY3RpdmlzaW9uCitQYXJsaWFtZW50IEhvdXNlCitTdC4gTGF1cmVuY2UgV2F5CitTbG91Z2gsIEJlcmtzaGlyZSBTTDEgMkJXCitVbml0ZWQgS2luZ2RvbQorCitJbiBBdXN0cmFsaWEgYW5kIEFzaWEgUGFjaWZpYyB0ZXJyaXRvcmllcywgc2VuZCB0bzoKKworV2FycmFudHkgUmVwbGFjZW1lbnRzCitBY3RpdmlzaW9uCitMZXZlbCA1LCA1MSBSYXdzb24gc3RyZWV0CitFcHBpbmcsIE5TVyAyMTIxCitBdXN0cmFsaWEKKworOS4gR292ZXJuaW5nIExhdywgVmVudWUsIEluZGVtbml0eSwgYW5kIExpYWJpbGl0eSBMaW1pdGF0aW9uLiAgVGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgY29uc3RydWVkIGluIGFjY29yZGFuY2Ugd2l0aCBhbmQgZ292ZXJuZWQgYnkgdGhlIGFwcGxpY2FibGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgVGV4YXMgKGJ1dCBleGNsdWRpbmcgY29uZmxpY3RzIG9mIGxhd3MgcHJpbmNpcGxlcykgYW5kIGFwcGxpY2FibGUgVW5pdGVkIFN0YXRlcyBmZWRlcmFsIGxhdy4gIEV4Y2VwdCBhcyBzZXQgZm9ydGggYmVsb3csIGV4Y2x1c2l2ZSB2ZW51ZSBmb3IgYWxsIGxpdGlnYXRpb24gcmVnYXJkaW5nIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGluIERhbGxhcyBDb3VudHksIFRleGFzLCBhbmQgeW91IGFncmVlIHRvIHN1Ym1pdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBmZWRlcmFsIGFuZCBzdGF0ZSBjb3VydHMgaW4gRGFsbGFzIENvdW50eSwgVGV4YXMsIGZvciBhbnkgc3VjaCBsaXRpZ2F0aW9uLiAgRXhjbHVzaXZlIHZlbnVlIGZvciBhbGwgbGl0aWdhdGlvbiBpbnZvbHZpbmcgQWN0aXZpc2lvbiwgYnV0IG5vdCBpbnZvbHZpbmcgSWQgU29mdHdhcmUsIHdpdGggcmVnYXJkIHRvIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGluIExvcyBBbmdlbGVzIENvdW50eSwgQ2FsaWZvcm5pYSwgYW5kIHlvdSBhZ3JlZSB0byBzdWJtaXQgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgY291cnRzIGluIExvcyBBbmdlbGVzLCBDYWxpZm9ybmlhLCBmb3IgYW55IHN1Y2ggbGl0aWdhdGlvbi4gIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5LCBkZWZlbmQgYW5kIGhvbGQgaGFybWxlc3MgSWQgU29mdHdhcmUgYW5kIEFjdGl2aXNpb24gYW5kIElkIFNvZnR3YXJlJ3MgYW5kIEFjdGl2aXNpb24ncyByZXNwZWN0aXZlIG9mZmljZXJzLCBlbXBsb3llZXMsIGRpcmVjdG9ycywgYWdlbnRzLCBsaWNlbnNlZXMgKGV4Y2x1ZGluZyB5b3UpLCBzdWItbGljZW5zZWVzIChleGNsdWRpbmcgeW91KSwgc3VjY2Vzc29ycywgYW5kIGFzc2lnbnMgZnJvbSBhbmQgYWdhaW5zdCBhbGwgbG9zc2VzLCBsYXdzdWl0cywgZGFtYWdlcywgY2F1c2VzIG9mIGFjdGlvbiwgYW5kIGNsYWltcyByZWxhdGluZyB0byBhbmQvb3IgYXJpc2luZyBmcm9tIHRoZSBOZXcgQ3JlYXRpb25zIG9yIHRoZSBkaXN0cmlidXRpb24gb3Igb3RoZXIgdXNlIG9mIHRoZSBOZXcgQ3JlYXRpb25zIG9yIHJlbGF0aW5nIHRvIGFuZC9vciBhcmlzaW5nIGZyb20geW91ciBicmVhY2ggb2YgdGhpcyBBZ3JlZW1lbnQuICBZb3UgYWdyZWUgdGhhdCB5b3VyIHVuYXV0aG9yaXplZCB1c2Ugb2YgdGhlIFNvZnR3YXJlIEltYWdlcywgdGhlIFByaW50ZWQgTWF0ZXJpYWxzLCBvciB0aGUgU29mdHdhcmUsIG9yIGFueSBwYXJ0IHRoZXJlb2YsIGltbWVkaWF0ZWx5IGFuZCBpcnJlcGFyYWJseSBtYXkgZGFtYWdlIElkIFNvZnR3YXJlIHN1Y2ggdGhhdCBJZCBTb2Z0d2FyZSBjb3VsZCBub3QgYmUgYWRlcXVhdGVseSBjb21wZW5zYXRlZCBzb2xlbHkgYnkgYSBtb25ldGFyeSBhd2FyZCwgYW5kIGluIHN1Y2ggZXZlbnQsIGF0IElkIFNvZnR3YXJlJ3Mgb3B0aW9uLCB0aGF0IElkIFNvZnR3YXJlIHNoYWxsIGJlIGVudGl0bGVkIHRvIGFuIGluanVuY3RpdmUgb3JkZXIsIGluIGFkZGl0aW9uIHRvIGFsbCBvdGhlciBhdmFpbGFibGUgcmVtZWRpZXMsIGluY2x1ZGluZyBhIG1vbmV0YXJ5IGF3YXJkLCB0byBwcm9oaWJpdCBzdWNoIHVuYXV0aG9yaXplZCB1c2Ugd2l0aG91dCB0aGUgbmVjZXNzaXR5IG9mIElkIFNvZnR3YXJlIHBvc3RpbmcgYm9uZCBvciBvdGhlciBzZWN1cml0eS4gIElOIEFOWSBDQVNFLCBJRCBTT0ZUV0FSRSwgQUNUSVZJU0lPTiwgQU5EIElEIFNPRlRXQVJFIEFORCBBQ1RJVklTSU9OJ1MgUkVTUEVDVElWRSBPRkZJQ0VSUywgRU1QTE9ZRUVTLCBESVJFQ1RPUlMsIFNIQVJFSE9MREVSUywgUkVQUkVTRU5UQVRJVkVTLCBBR0VOVFMsIExJQ0VOU0VFUyAoRVhDTFVESU5HIFlPVSksIFNVQi1MSUNFTlNFRVMgKEVYQ0xVRElORyBZT1UpLCBTVUNDRVNTT1JTLCBBTkQgQVNTSUdOUyBTSEFMTCBOT1QgQkUgTElBQkxFIEZPUiBMT1NTIE9GIERBVEEsIExPU1MgT0YgUFJPRklUUywgTE9TVCBTQVZJTkdTLCBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBJTkRJUkVDVCBPUiBQVU5JVElWRSBEQU1BR0VTLCBPUiBBTlkgT1RIRVIgREFNQUdFUyBBUklTSU5HIEZST00gQU5ZIEFMTEVHRUQgQ0xBSU0gRk9SIEJSRUFDSCBPRiBXQVJSQU5UWSwgQlJFQUNIIE9GIENPTlRSQUNULCBORUdMSUdFTkNFLCBTVFJJQ1QgUFJPRFVDVCBMSUFCSUxJVFksIE9SIE9USEVSIExFR0FMIFRIRU9SWSBFVkVOIElGIElEIFNPRlRXQVJFLCBBQ1RJVklTSU9OLCBPUiBUSEVJUiBSRVNQRUNUSVZFIEFHRU5UKFMpIEhBVkUgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBBTlkgU1VDSCBEQU1BR0VTLCBPUiBFVkVOIElGIFNVQ0ggREFNQUdFUyBBUkUgRk9SRVNFRUFCTEUsIE9SIExJQUJMRSBGT1IgQU5ZIENMQUlNIEJZIEFOWSBPVEhFUiBQQVJUWS4gIFNvbWUganVyaXNkaWN0aW9ucyBkbyBub3QgYWxsb3cgdGhlIGV4Y2x1c2lvbiBvciBsaW1pdGF0aW9uIG9mIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzbyB0aGUgYWJvdmUgbGltaXRhdGlvbiBvciBleGNsdXNpb24gbWF5IG5vdCBhcHBseSB0byB5b3UuICBUaGlzIHNlY3Rpb24gc2hhbGwgc3Vydml2ZSB0aGUgY2FuY2VsbGF0aW9uIG9yIHRlcm1pbmF0aW9uIG9mIHRoaXMgQWdyZWVtZW50LgorCisxMC4gVW5pdGVkIFN0YXRlcyBHb3Zlcm5tZW50IFJlc3RyaWN0ZWQgUmlnaHRzLiAgVG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlLCB0aGUgVW5pdGVkIFN0YXRlcyBHb3Zlcm5tZW50IHNoYWxsIGhhdmUgb25seSB0aG9zZSByaWdodHMgdG8gdXNlIHRoZSBTb2Z0d2FyZSBhbmQgdGhlIFByaW50ZWQgTWF0ZXJpYWxzIGFzIGV4cHJlc3NseSBzdGF0ZWQgYW5kIGV4cHJlc3NseSBsaW1pdGVkIGFuZCByZXN0cmljdGVkIGluIHRoaXMgQWdyZWVtZW50LCBhcyBwcm92aWRlZCBpbiA0OCBDLkYuUi4gwqfCpyAyMjcuNzIwMSB0aHJvdWdoIDIyNy43MjA0LCBpbmNsdXNpdmUuCisKKzExLiBHZW5lcmFsIFByb3Zpc2lvbnMuICBOZWl0aGVyIHRoaXMgQWdyZWVtZW50IG5vciBhbnkgcGFydCBvciBwb3J0aW9uIGhlcmVvZiBzaGFsbCBiZSBhc3NpZ25lZCBvciBzdWJsaWNlbnNlZCBieSB5b3UuICBJZCBTb2Z0d2FyZSBhbmQgQWN0aXZpc2lvbiBlYWNoIG1heSBhc3NpZ24gaXRzIHJlc3BlY3RpdmUgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IGluIHRoZSBhc3NpZ25pbmcgcGFydHkncyBzb2xlIGRpc2NyZXRpb24uICBTaG91bGQgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBiZSBoZWxkIHRvIGJlIHZvaWQsIGludmFsaWQsIHVuZW5mb3JjZWFibGUsIG9yIGlsbGVnYWwgYnkgYSBjb3VydCBvZiBjb21wZXRlbnQganVyaXNkaWN0aW9uLCB0aGUgdmFsaWRpdHkgYW5kIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSBvdGhlciBwcm92aXNpb25zIHNoYWxsIG5vdCBiZSBhZmZlY3RlZCB0aGVyZWJ5LiAgSWYgYW55IHByb3Zpc2lvbiBpcyBkZXRlcm1pbmVkIHRvIGJlIHVuZW5mb3JjZWFibGUgYnkgYSBjb3VydCBvZiBjb21wZXRlbnQganVyaXNkaWN0aW9uLCB5b3UgYWdyZWUgdG8gYSBtb2RpZmljYXRpb24gb2Ygc3VjaCBwcm92aXNpb24gdG8gcHJvdmlkZSBmb3IgZW5mb3JjZW1lbnQgb2YgdGhlIHByb3Zpc2lvbidzIGludGVudCwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcuICBGYWlsdXJlIG9mIElkIFNvZnR3YXJlIG9yIEFjdGl2aXNpb24gdG8gZW5mb3JjZSBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IHNoYWxsIG5vdCBjb25zdGl0dXRlIG9yIGJlIGNvbnN0cnVlZCBhcyBhIHdhaXZlciBvZiBzdWNoIHByb3Zpc2lvbiBvciBvZiB0aGUgcmlnaHQgdG8gZW5mb3JjZSBzdWNoIHByb3Zpc2lvbi4gIElNTUVESUFURUxZIFVQT04gWU9VUiBGQUlMVVJFIFRPIENPTVBMWSBXSVRILCBPUiBZT1VSIEJSRUFDSCBPRiBBTlkgVEVSTSBPUiBQUk9WSVNJT04gT0YgVEhJUyBBR1JFRU1FTlQsIFlPVVIgTElDRU5TRSBHUkFOVEVEIEhFUkVJTiBBTkQgVEhJUyBBR1JFRU1FTlQgQVVUT01BVElDQUxMWSBTSEFMTCBURVJNSU5BVEUsIFdJVEhPVVQgTk9USUNFLCBBTkQgSUQgU09GVFdBUkUgQU5EIEFDVElWSVNJT04gTUFZIFBVUlNVRSBBTEwgUkVMSUVGIEFORCBSRU1FRElFUyBBR0FJTlNUIFlPVSBUSEFUIEFSRSBBVkFJTEFCTEUgVU5ERVIgQVBQTElDQUJMRSBMQVcgQU5EL09SIFRISVMgQUdSRUVNRU5ULiAgSW1tZWRpYXRlbHkgdXBvbiB0ZXJtaW5hdGlvbiBvZiB0aGlzIEFncmVlbWVudCwgYW55IGFuZCBhbGwgcmlnaHRzIHlvdSBhcmUgZ3JhbnRlZCBoZXJldW5kZXIgc2hhbGwgdGVybWluYXRlLCB5b3Ugc2hhbGwgaGF2ZSBubyByaWdodCB0byB1c2UgdGhlIFNvZnR3YXJlLCB0aGUgUHJpbnRlZCBNYXRlcmlhbHMsIG9yIHRoZSBOZXcgQ3JlYXRpb25zLCBpbiBhbnkgbWFubmVyLCB5b3UgaW1tZWRpYXRlbHkgc2hhbGwgZGVzdHJveSBhbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgdGhlIFByaW50ZWQgTWF0ZXJpYWxzLCBhbmQgdGhlIE5ldyBDcmVhdGlvbnMgaW4geW91ciBwb3NzZXNzaW9uLCBjdXN0b2R5LCBvciBjb250cm9sLCBhbmQgYWxsIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciBzaGFsbCByZXZlcnQsIHdpdGhvdXQgbm90aWNlLCB0byBhbmQgYmUgdmVzdGVkIGluIElkIFNvZnR3YXJlLgorCitZT1UgQUNLTk9XTEVER0UgVEhBVCBZT1UgSEFWRSBSRUFEIFRISVMgQUdSRUVNRU5ULCBZT1UgVU5ERVJTVEFORCBUSElTIEFHUkVFTUVOVCwgQU5EIFVOREVSU1RBTkQgVEhBVCBCWSBDT05USU5VSU5HIFRIRSBJTlNUQUxMQVRJT04gT0YgVEhFIFNPRlRXQVJFLCBCWSBMT0FESU5HIE9SIFJVTk5JTkcgVEhFIFNPRlRXQVJFLCBPUiBCWSBQTEFDSU5HIE9SIENPUFlJTkcgVEhFIFNPRlRXQVJFIE9OVE8gWU9VUiBDT01QVVRFUiBIQVJEIERSSVZFIE9SIFJBTSwgWU9VIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVC4gIFlPVSBGVVJUSEVSIEFHUkVFIFRIQVQsIEVYQ0VQVCBGT1IgV1JJVFRFTiBTRVBBUkFURSBBR1JFRU1FTlRTLCBJRiBBTlksIEFNT05HIElEIFNPRlRXQVJFLCBBQ1RJVklTSU9OLCBBTkQgWU9VLCBUSElTIEFHUkVFTUVOVCBJUyBBIENPTVBMRVRFIEFORCBFWENMVVNJVkUgU1RBVEVNRU5UIE9GIFRIRSBSSUdIVFMgQU5EIExJQUJJTElUSUVTIE9GIFRIRSBQQVJUSUVTIEhFUkVUTywgUkVMQVRJTkcgVE8gVEhFIFNVQkpFQ1QgTUFUVEVSIEhFUkVPRi4gIFRISVMgQUdSRUVNRU5UIFNVUEVSU0VERVMgQUxMIFBSSU9SIE9SQUwgQUdSRUVNRU5UUywgUFJPUE9TQUxTLCBPUiBVTkRFUlNUQU5ESU5HUywgQU5EIEFOWSBPVEhFUiBDT01NVU5JQ0FUSU9OUywgSUYgQU5ZLCBBTU9ORyBJRCBTT0ZUV0FSRSwgQUNUSVZJU0lPTiwgQU5EIFlPVSBSRUxBVElORyBUTyBUSEUgU1VCSkVDVCBNQVRURVIgT0YgVEhJUyBBR1JFRU1FTlQuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9EU0wgYi9saWNlbnNlcy9EU0wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkxNThhZgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0RTTApAQCAtMCwwICsxLDE4MSBAQAorREVTSUdOIFNDSUVOQ0UgTElDRU5TRQorCitURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworQ29weXJpZ2h0IMKpIDE5OTktMjAwMSBNaWNoYWVsIFN0dXR6IDxzdHV0ekBkc2wub3JnPgorVmVyYmF0aW0gY29weWluZyBvZiB0aGlzIGRvY3VtZW50IGlzIHBlcm1pdHRlZCwgaW4gYW55IG1lZGl1bS4KKworMC4gUFJFQU1CTEUuCisKK0NvcHlyaWdodCBsYXcgZ2l2ZXMgY2VydGFpbiBleGNsdXNpdmUgcmlnaHRzIHRvIHRoZSBhdXRob3Igb2YgYSB3b3JrLAoraW5jbHVkaW5nIHRoZSByaWdodHMgdG8gY29weSwgbW9kaWZ5IGFuZCBkaXN0cmlidXRlIHRoZSB3b3JrICh0aGUKKyJyZXByb2R1Y3RpdmUsIiAiYWRhcHRhdGl2ZSwiIGFuZCAiZGlzdHJpYnV0aW9uIiByaWdodHMpLgorCitUaGUgaWRlYSBvZiAiY29weWxlZnQiIGlzIHRvIHdpbGxmdWxseSByZXZva2UgdGhlIGV4Y2x1c2l2aXR5IG9mIHRob3NlCityaWdodHMgdW5kZXIgY2VydGFpbiB0ZXJtcyBhbmQgY29uZGl0aW9ucywgc28gdGhhdCBhbnlvbmUgY2FuIGNvcHkgYW5kCitkaXN0cmlidXRlIHRoZSB3b3JrIG9yIHByb3Blcmx5IGF0dHJpYnV0ZWQgZGVyaXZhdGl2ZSB3b3Jrcywgd2hpbGUgYWxsCitjb3BpZXMgcmVtYWluIHVuZGVyIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHRoZSBvcmlnaW5hbC4KKworVGhlIGludGVudCBvZiB0aGlzIGxpY2Vuc2UgaXMgdG8gYmUgYSBnZW5lcmFsICJjb3B5bGVmdCIgdGhhdCBjYW4gYmUKK2FwcGxpZWQgdG8gYW55IGtpbmQgb2Ygd29yayB0aGF0IGhhcyBwcm90ZWN0aW9uIHVuZGVyIGNvcHlyaWdodC4gVGhpcworbGljZW5zZSBzdGF0ZXMgdGhvc2UgY2VydGFpbiBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGEgd29yayBwdWJsaXNoZWQKK3VuZGVyIGl0cyB0ZXJtcyBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgYW5kIG1vZGlmaWVkLgorCitXaGVyZWFzICJkZXNpZ24gc2NpZW5jZSIgaXMgYSBzdHJhdGVneSBmb3IgdGhlIGRldmVsb3BtZW50IG9mCithcnRpZmFjdHMgYXMgYSB3YXkgdG8gcmVmb3JtIHRoZSBlbnZpcm9ubWVudCAobm90IHBlb3BsZSkgYW5kCitzdWJzZXF1ZW50bHkgaW1wcm92ZSB0aGUgdW5pdmVyc2FsIHN0YW5kYXJkIG9mIGxpdmluZywgdGhpcyBEZXNpZ24KK1NjaWVuY2UgTGljZW5zZSB3YXMgd3JpdHRlbiBhbmQgZGVwbG95ZWQgYXMgYSBzdHJhdGVneSBmb3IgcHJvbW90aW5nCit0aGUgcHJvZ3Jlc3Mgb2Ygc2NpZW5jZSBhbmQgYXJ0IHRocm91Z2ggcmVmb3JtIG9mIHRoZSBlbnZpcm9ubWVudC4KKworMS4gREVGSU5JVElPTlMuCisKKyJMaWNlbnNlIiBzaGFsbCBtZWFuIHRoaXMgRGVzaWduIFNjaWVuY2UgTGljZW5zZS4gVGhlIExpY2Vuc2UgYXBwbGllcwordG8gYW55IHdvcmsgd2hpY2ggY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSB3b3JrJ3MgY29weXJpZ2h0Citob2xkZXIgc3RhdGluZyB0aGF0IGl0IGlzIHB1Ymxpc2hlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBEZXNpZ24KK1NjaWVuY2UgTGljZW5zZS4KKworIldvcmsiIHNoYWxsIG1lYW4gc3VjaCBhbiBhZm9yZW1lbnRpb25lZCB3b3JrLiBUaGUgTGljZW5zZSBhbHNvCithcHBsaWVzIHRvIHRoZSBvdXRwdXQgb2YgdGhlIFdvcmssIG9ubHkgaWYgc2FpZCBvdXRwdXQgY29uc3RpdHV0ZXMgYQorImRlcml2YXRpdmUgd29yayIgb2YgdGhlIGxpY2Vuc2VkIFdvcmsgYXMgZGVmaW5lZCBieSBjb3B5cmlnaHQgbGF3LgorCisiT2JqZWN0IEZvcm0iIHNoYWxsIG1lYW4gYW4gZXhlY3V0YWJsZSBvciBwZXJmb3JtYWJsZSBmb3JtIG9mIHRoZQorV29yaywgYmVpbmcgYW4gZW1ib2RpbWVudCBvZiB0aGUgV29yayBpbiBzb21lIHRhbmdpYmxlIG1lZGl1bS4KKworIlNvdXJjZSBEYXRhIiBzaGFsbCBtZWFuIHRoZSBvcmlnaW4gb2YgdGhlIE9iamVjdCBGb3JtLCBiZWluZyB0aGUKK2VudGlyZSwgbWFjaGluZS1yZWFkYWJsZSwgcHJlZmVycmVkIGZvcm0gb2YgdGhlIFdvcmsgZm9yIGNvcHlpbmcgYW5kCitmb3IgaHVtYW4gbW9kaWZpY2F0aW9uICh1c3VhbGx5IHRoZSBsYW5ndWFnZSwgZW5jb2Rpbmcgb3IgZm9ybWF0IGluCit3aGljaCBjb21wb3NlZCBvciByZWNvcmRlZCBieSB0aGUgQXV0aG9yKTsgcGx1cyBhbnkgYWNjb21wYW55aW5nCitmaWxlcywgc2NyaXB0cyBvciBvdGhlciBkYXRhIG5lY2Vzc2FyeSBmb3IgaW5zdGFsbGF0aW9uLCBjb25maWd1cmF0aW9uCitvciBjb21waWxhdGlvbiBvZiB0aGUgV29yay4KKworKEV4YW1wbGVzIG9mICJTb3VyY2UgRGF0YSIgaW5jbHVkZSwgYnV0IGFyZSBub3QgbGltaXRlZCB0bywgdGhlCitmb2xsb3dpbmc6IGlmIHRoZSBXb3JrIGlzIGFuIGltYWdlIGZpbGUgY29tcG9zZWQgYW5kIGVkaXRlZCBpbiBQTkcKK2Zvcm1hdCwgdGhlbiB0aGUgb3JpZ2luYWwgUE5HIHNvdXJjZSBmaWxlIGlzIHRoZSBTb3VyY2UgRGF0YTsgaWYgdGhlCitXb3JrIGlzIGFuIE1QRUcgMS4wIGxheWVyIDMgZGlnaXRhbCBhdWRpbyByZWNvcmRpbmcgbWFkZSBmcm9tIGEgV0FWCitmb3JtYXQgYXVkaW8gZmlsZSByZWNvcmRpbmcgb2YgYW4gYW5hbG9nIHNvdXJjZSwgdGhlbiB0aGUgb3JpZ2luYWwgV0FWCitmaWxlIGlzIHRoZSBTb3VyY2UgRGF0YTsgaWYgdGhlIFdvcmsgd2FzIGNvbXBvc2VkIGFzIGFuIHVuZm9ybWF0dGVkCitwbGFpbnRleHQgZmlsZSwgdGhlbiB0aGF0IGZpbGUgaXMgdGhlIFNvdXJjZSBEYXRhOyBpZiB0aGUgV29yayB3YXMKK2NvbXBvc2VkIGluIExhVGVYLCB0aGUgTGFUZVggZmlsZShzKSBhbmQgYW55IGltYWdlIGZpbGVzIGFuZC9vciBjdXN0b20KK21hY3JvcyBuZWNlc3NhcnkgZm9yIGNvbXBpbGF0aW9uIGNvbnN0aXR1dGUgdGhlIFNvdXJjZSBEYXRhLikKKworIkF1dGhvciIgc2hhbGwgbWVhbiB0aGUgY29weXJpZ2h0IGhvbGRlcihzKSBvZiB0aGUgV29yay4KKworVGhlIGluZGl2aWR1YWwgbGljZW5zZWVzIGFyZSByZWZlcnJlZCB0byBhcyAieW91LiIKKworMi4gUklHSFRTIEFORCBDT1BZUklHSFQuCisKK1RoZSBXb3JrIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBBdXRob3IuIEFsbCByaWdodHMgdG8gdGhlIFdvcmsgYXJlCityZXNlcnZlZCBieSB0aGUgQXV0aG9yLCBleGNlcHQgYXMgc3BlY2lmaWNhbGx5IGRlc2NyaWJlZCBiZWxvdy4gVGhpcworTGljZW5zZSBkZXNjcmliZXMgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZSBBdXRob3IKK3Blcm1pdHMgeW91IHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSBjb3BpZXMgb2YgdGhlIFdvcmsuCisKK0luIGFkZGl0aW9uLCB5b3UgbWF5IHJlZmVyIHRvIHRoZSBXb3JrLCB0YWxrIGFib3V0IGl0LCBhbmQgKGFzCitkaWN0YXRlZCBieSAiZmFpciB1c2UiKSBxdW90ZSBmcm9tIGl0LCBqdXN0IGFzIHlvdSB3b3VsZCBhbnkKK2NvcHlyaWdodGVkIG1hdGVyaWFsIHVuZGVyIGNvcHlyaWdodCBsYXcuCisKK1lvdXIgcmlnaHQgdG8gb3BlcmF0ZSwgcGVyZm9ybSwgcmVhZCBvciBvdGhlcndpc2UgaW50ZXJwcmV0IGFuZC9vcgorZXhlY3V0ZSB0aGUgV29yayBpcyB1bnJlc3RyaWN0ZWQ7IGhvd2V2ZXIsIHlvdSBkbyBzbyBhdCB5b3VyIG93biByaXNrLAorYmVjYXVzZSB0aGUgV29yayBjb21lcyBXSVRIT1VUIEFOWSBXQVJSQU5UWSAtLSBzZWUgU2VjdGlvbiA3ICgiTk8KK1dBUlJBTlRZIikgYmVsb3cuCisKKzMuIENPUFlJTkcgQU5EIERJU1RSSUJVVElPTi4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGRpc3RyaWJ1dGUsIHB1Ymxpc2ggb3Igb3RoZXJ3aXNlIHByZXNlbnQKK3ZlcmJhdGltIGNvcGllcyBvZiB0aGUgZW50aXJlIFNvdXJjZSBEYXRhIG9mIHRoZSBXb3JrLCBpbiBhbnkgbWVkaXVtLAorcHJvdmlkZWQgdGhhdCBmdWxsIGNvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHksIHdoZXJlCithcHBsaWNhYmxlLCBpcyBjb25zcGljdW91c2x5IHB1Ymxpc2hlZCBvbiBhbGwgY29waWVzLCBhbmQgYSBjb3B5IG9mCit0aGlzIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgYWxvbmcgd2l0aCB0aGUgV29yay4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGRpc3RyaWJ1dGUsIHB1Ymxpc2ggb3Igb3RoZXJ3aXNlIHByZXNlbnQKK2NvcGllcyBvZiB0aGUgT2JqZWN0IEZvcm0gb2YgdGhlIFdvcmssIGluIGFueSBtZWRpdW0sIHVuZGVyIHRoZSB0ZXJtcworZm9yIGRpc3RyaWJ1dGlvbiBvZiBTb3VyY2UgRGF0YSBhYm92ZSBhbmQgYWxzbyBwcm92aWRlZCB0aGF0IG9uZSBvZgordGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworKGEpIFRoZSBTb3VyY2UgRGF0YSBpcyBpbmNsdWRlZCBpbiB0aGUgc2FtZSBkaXN0cmlidXRpb24sIGRpc3RyaWJ1dGVkCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlOyBvcgorCisoYikgQSB3cml0dGVuIG9mZmVyIGlzIGluY2x1ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbiwgdmFsaWQgZm9yIGF0CitsZWFzdCB0aHJlZSB5ZWFycyBvciBmb3IgYXMgbG9uZyBhcyB0aGUgZGlzdHJpYnV0aW9uIGlzIGluIHByaW50Cisod2hpY2hldmVyIGlzIGxvbmdlciksIHdpdGggYSBwdWJsaWNseS1hY2Nlc3NpYmxlIGFkZHJlc3MgKHN1Y2ggYXMgYQorVVJMIG9uIHRoZSBJbnRlcm5ldCkgd2hlcmUsIGZvciBhIGNoYXJnZSBub3QgZ3JlYXRlciB0aGFuCit0cmFuc3BvcnRhdGlvbiBhbmQgbWVkaWEgY29zdHMsIGFueW9uZSBtYXkgcmVjZWl2ZSBhIGNvcHkgb2YgdGhlCitTb3VyY2UgRGF0YSBvZiB0aGUgV29yayBkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHNlY3Rpb24gYWJvdmU7IG9yCisKKyhjKSBBIHRoaXJkIHBhcnR5J3Mgd3JpdHRlbiBvZmZlciBmb3Igb2J0YWluaW5nIHRoZSBTb3VyY2UgRGF0YSBhdCBubworY29zdCwgYXMgZGVzY3JpYmVkIGluIHBhcmFncmFwaCAoYikgYWJvdmUsIGlzIGluY2x1ZGVkIHdpdGggdGhlCitkaXN0cmlidXRpb24uIFRoaXMgb3B0aW9uIGlzIHZhbGlkIG9ubHkgaWYgeW91IGFyZSBhIG5vbi1jb21tZXJjaWFsCitwYXJ0eSwgYW5kIG9ubHkgaWYgeW91IHJlY2VpdmVkIHRoZSBPYmplY3QgRm9ybSBvZiB0aGUgV29yayBhbG9uZyB3aXRoCitzdWNoIGFuIG9mZmVyLgorCitZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFdvcmsgZWl0aGVyIGdyYXRpcyBvciBmb3IgYSBmZWUsIGFuZAoraWYgZGVzaXJlZCwgeW91IG1heSBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGZvciB0aGUgV29yay4KKworVGhlIGFnZ3JlZ2F0aW9uIG9mIHRoZSBXb3JrIHdpdGggb3RoZXIgd29ya3MgdGhhdCBhcmUgbm90IGJhc2VkIG9uIHRoZQorV29yayAtLSBzdWNoIGFzIGJ1dCBub3QgbGltaXRlZCB0byBpbmNsdXNpb24gaW4gYSBwdWJsaWNhdGlvbiwKK2Jyb2FkY2FzdCwgY29tcGlsYXRpb24sIG9yIG90aGVyIG1lZGlhIC0tIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlcgord29ya3MgaW4gdGhlIHNjb3BlIG9mIHRoZSBMaWNlbnNlOyBub3IgZG9lcyBzdWNoIGFnZ3JlZ2F0aW9uIHZvaWQgdGhlCit0ZXJtcyBvZiB0aGUgTGljZW5zZSBmb3IgdGhlIFdvcmsuCisKKzQuIE1PRElGSUNBVElPTi4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIG1vZGlmeSBvciBzYW1wbGUgZnJvbSBhIGNvcHkgb2YgdGhlIFdvcmssCitwcm9kdWNpbmcgYSBkZXJpdmF0aXZlIHdvcmssIGFuZCB0byBkaXN0cmlidXRlIHRoZSBkZXJpdmF0aXZlIHdvcmsKK3VuZGVyIHRoZSB0ZXJtcyBkZXNjcmliZWQgaW4gdGhlIHNlY3Rpb24gZm9yIGRpc3RyaWJ1dGlvbiBhYm92ZSwKK3Byb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyB0ZXJtcyBhcmUgbWV0OgorCisoYSkgVGhlIG5ldywgZGVyaXZhdGl2ZSB3b3JrIGlzIHB1Ymxpc2hlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcworTGljZW5zZS4KKworKGIpIFRoZSBkZXJpdmF0aXZlIHdvcmsgaXMgZ2l2ZW4gYSBuZXcgbmFtZSwgc28gdGhhdCBpdHMgbmFtZSBvciB0aXRsZQorY2Fubm90IGJlIGNvbmZ1c2VkIHdpdGggdGhlIFdvcmssIG9yIHdpdGggYSB2ZXJzaW9uIG9mIHRoZSBXb3JrLCBpbgorYW55IHdheS4KKworKGMpIEFwcHJvcHJpYXRlIGF1dGhvcnNoaXAgY3JlZGl0IGlzIGdpdmVuOiBmb3IgdGhlIGRpZmZlcmVuY2VzCitiZXR3ZWVuIHRoZSBXb3JrIGFuZCB0aGUgbmV3IGRlcml2YXRpdmUgd29yaywgYXV0aG9yc2hpcCBpcyBhdHRyaWJ1dGVkCit0byB5b3UsIHdoaWxlIHRoZSBtYXRlcmlhbCBzYW1wbGVkIG9yIHVzZWQgZnJvbSB0aGUgV29yayByZW1haW5zCithdHRyaWJ1dGVkIHRvIHRoZSBvcmlnaW5hbCBBdXRob3I7IGFwcHJvcHJpYXRlIG5vdGljZSBtdXN0IGJlIGluY2x1ZGVkCit3aXRoIHRoZSBuZXcgd29yayBpbmRpY2F0aW5nIHRoZSBuYXR1cmUgYW5kIHRoZSBkYXRlcyBvZiBhbnkKK21vZGlmaWNhdGlvbnMgb2YgdGhlIFdvcmsgbWFkZSBieSB5b3UuCisKKzUuIE5PIFJFU1RSSUNUSU9OUy4KKworWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgV29yayBvciBhbnkgb2YgaXRzCitkZXJpdmF0aXZlIHdvcmtzIGJleW9uZCB0aG9zZSByZXN0cmljdGlvbnMgZGVzY3JpYmVkIGluIHRoaXMgTGljZW5zZS4KKworNi4gQUNDRVBUQU5DRS4KKworQ29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZyB0aGUgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZAordG8gc2FtcGxpbmcgZnJvbSB0aGUgV29yayBpbiBhIG5ldyB3b3JrKSBpbmRpY2F0ZXMgYWNjZXB0YW5jZSBvZiB0aGVzZQordGVybXMuIElmIHlvdSBkbyBub3QgZm9sbG93IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFueSByaWdodHMKK2dyYW50ZWQgdG8geW91IGJ5IHRoZSBMaWNlbnNlIGFyZSBudWxsIGFuZCB2b2lkLiBUaGUgY29weWluZywKK2Rpc3RyaWJ1dGlvbiBvciBtb2RpZmljYXRpb24gb2YgdGhlIFdvcmsgb3V0c2lkZSBvZiB0aGUgdGVybXMKK2Rlc2NyaWJlZCBpbiB0aGlzIExpY2Vuc2UgaXMgZXhwcmVzc2x5IHByb2hpYml0ZWQgYnkgbGF3LgorCitJZiBmb3IgYW55IHJlYXNvbiwgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgdGhhdCBmb3JiaWQgeW91IHRvCitmdWxmaWxsIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgeW91IG1heSBub3QgY29weSwgZGlzdHJpYnV0ZQorb3IgbW9kaWZ5IHRoZSBXb3JrIGF0IGFsbC4KKworSWYgYW55IHBhcnQgb2YgdGhpcyBMaWNlbnNlIGlzIGZvdW5kIHRvIGJlIGluIGNvbmZsaWN0IHdpdGggdGhlIGxhdywKK3RoYXQgcGFydCBzaGFsbCBiZSBpbnRlcnByZXRlZCBpbiBpdHMgYnJvYWRlc3QgbWVhbmluZyBjb25zaXN0ZW50IHdpdGgKK3RoZSBsYXcsIGFuZCBubyBvdGhlciBwYXJ0cyBvZiB0aGUgTGljZW5zZSBzaGFsbCBiZSBhZmZlY3RlZC4KKworNy4gTk8gV0FSUkFOVFkuCisKK1RIRSBXT1JLIElTIFBST1ZJREVEICJBUyBJUywiIEFORCBDT01FUyBXSVRIIEFCU09MVVRFTFkgTk8gV0FSUkFOVFksCitFWFBSRVNTIE9SIElNUExJRUQsIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLAorSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQorT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisKKzguIERJU0NMQUlNRVIgT0YgTElBQklMSVRZLgorCitJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCitJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCitTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcKK0lOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBXT1JLLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0RVS0UzRCBiL2xpY2Vuc2VzL0RVS0UzRApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzFkMjgwCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvRFVLRTNECkBAIC0wLDAgKzEsOTAgQEAKK0RVS0UgTlVLRU0gM0QgKHRtKSwKK2luY2x1ZGluZyBhbGwgdmVyc2lvbnMsIHBhdGNoZXMgYW5kIHVwZ3JhZGVzICh0aGUgIkdhbWUiKQorQ29weXJpZ2h0IDE5OTYgM0QgUmVhbG1zIEVudGVydGFpbm1lbnQgLSBhIGRpdmlzaW9uIG9mIEFwb2dlZSBTb2Z0d2FyZSwgTHRkLgorUC5PLiBCb3ggNDk2NDE5LCBHYXJsYW5kLCBUWCA3NTA0OQorVEVMOiAxKzIxNC0yNzEtMjEzNyAoIjNEIFJlYWxtcyIpLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworQlkgQ09QWUlORyBPUiBVU0lORyBUSElTIFBST0dSQU0sIFlPVSBJTkRJQ0FURSBZT1VSIEFHUkVFTUVOVCBUTyBUSEUgRk9MTE9XSU5HCitURVJNUywgV0hJQ0ggQVJFIFRIRSBPTkxZIE9ORVMgQlkgV0hJQ0ggM0QgUkVBTE1TIFBFUk1JVFMgQ09QWUlORyBPUiBVU0UuIFRISVMKK1BST0dSQU0gSVMgTk9UIFNIQVJFV0FSRS4gRElTVFJJQlVUSU5HIElUIFdJVEhPVVQgM0QgUkVBTE1TJyBQRVJNSVNTSU9OIElTCitJTExFR0FMLgorCitbMV0gT1dORVJTSElQLiAgRXhjZXB0IHRvIHRoZSBleHRlbnQgZXhwcmVzc2x5IGxpY2Vuc2VkIGJ5IHVzLCB3ZSBoYXZlIGFuZAorICAgIHJlc2VydmUgdGhlIGV4Y2x1c2l2ZSBjb3B5cmlnaHQsIHRyYWRlIHNlY3JldCBhbmQgb3RoZXIgcmlnaHRzIHRvIHRoZQorICAgIFByb2dyYW0sIGFuZCB0aGUgcmlnaHQgdG8gdXNlIHRoZSBUcmFkZW1hcmtzICIzRCBSZWFsbXMiLCB0aGUgM0QgUmVhbG1zCisgICAgImxvZ28iLCAiRHVrZSBOdWtlbSIsICJEdWtlIE51a2VtIDNEIiBhbmQgYW55IG9mIHRoZSBjaGFyYWN0ZXJzIGNvbnRhaW5lZAorICAgIHdpdGhpbiB0aGUgR2FtZSBpbiBjb25uZWN0aW9uIHdpdGggaXQuCisKK1syXSBVU0UgQU5EIENPUElFUy4gWW91IG1heSB1c2UgdGhlIFByb2dyYW0gb25seSBmb3IgeW91ciBvd24gcHVycG9zZXMgImp1c3QKKyAgICBsaWtlIGEgYm9vayIuICBUaGlzIHBlcm1pdHMgdXNlIGJ5IGFueSBudW1iZXIgb2YgcGVvcGxlIG9uIGFueSBudW1iZXIgb2YKKyAgICBtYWNoaW5lcyB0byB1c2UgaXQgc28gbG9uZyBhcyAtLSBqdXN0IGxpa2UgYSBib29rIC0tIHRoZXJlIGlzIE5PCisgICAgUE9TU0lCSUxJVFkgdGhhdCBtb3JlIHRoYW4gb25lIGNvcHkgd2lsbCBiZSB1c2VkIGF0IGEgdGltZS4gIFlvdSBoYXZlIG5vCisgICAgcmlnaHQgdG8gY29weSB0aGlzIFByb2dyYW0gZXhjZXB0IGZvciBsZWdhbCBiYWNrdXBzLgorCitbM10gIE5FVyBMRVZFTFMuCisKKyAgICAgIk5ldyBMZXZlbHMiIGFyZSBkYXRhIHRoYXQgbW9kaWZ5IG9yIHN1YnN0aXR1dGUgZm9yIEdhbWUgZGF0YSwgdGh1cworICAgICBtb2RpZnlpbmcgb3IgcmVwbGFjaW5nIG9uZSBvciBtb3JlIEdhbWUgbGV2ZWxzLiAgQ3JlYXRpbmcgb3IgZGlzdHJpYnV0aW5nCisgICAgIGEgTmV3IExldmVsIG9yIGEgc29mdHdhcmUgdG9vbCB0aGF0IGhhcyBubyBzdWJzdGFudGlhbCBwdXJwb3NlIG90aGVyIHRoYW4KKyAgICAgdG8gY29udHJpYnV0ZSB0byB0aGUgY3JlYXRpb24gb2YgYSBOZXcgTGV2ZWwgaW5mcmluZ2VzIHJpZ2h0cyBvZiAzRCBSZWFsbXMKKyAgICAgYW5kIGlzIHByb2hpYml0ZWQgYnkgbGF3IGV4Y2VwdCBhcyBwZXJtaXR0ZWQgYnkgM0QgUmVhbG1zLiAgM0QgUkVBTE1TCisgICAgIFBFUk1JVFMgTkVXIExFVkVMUyBPTkxZIFRIQVQgTUVFVCBBTEwgT0YgVEhFIEZPTExPV0lORyBDT05ESVRJT05TOgorCisgW0FdIFRoZSBMZXZlbCBtdXN0IG9ubHkgd29yayB3aXRoIGEgUkVUQUlMIGVwaXNvZGUgb2YgdGhlIEdhbWUuIEl0IG11c3QgTk9UCisgICAgIHdvcmsgd2l0aCB0aGlzIEVwaXNvZGUgT25lLgorCisgW0JdIFRoZSBsZXZlbCBtdXN0IG5vdCBjb250YWluIG1vZGlmaWNhdGlvbnMgdG8gYW55IENPTSwgRVhFLCBvciBETEwsIG9yIHRvCisgICAgIG90aGVyIGV4ZWN1dGFibGUgZmlsZS4KKworIFtDXSBUaGUgbGV2ZWwgbXVzdCBub3QgY29udGFpbiBhbnkgaWxsZWdhbCBtYXRlcmlhbCwgb3IgKHdpdGhvdXQKKyAgICAgYXBwcm9wcmlhdGUgaXJyZXZvY2FibGUgbGljZW5zZXMpIGFueSB0cmFkZW1hcmtzLCBjb3B5cmlnaHQgcHJvdGVjdGVkCisgICAgIHdvcmssIG9yIG90aGVyIHByb3BlcnR5IG9mIHRoaXJkIHBhcnRpZXMuCisKKyBbRF0gVGhlIGxldmVsIG11c3QgcHJvbWluZW50bHkgaWRlbnRpZnkgYXQgbGVhc3QgaW4gZXZlcnkgb25saW5lIGRlc2NyaXB0aW9uCisgICAgIGFuZCB3aXRoIHJlYXNvbmFibGUgZHVyYXRpb24gb24gYW4gb3BlbmluZyBzY3JlZW4KKyAgICAgKDEpIHRoZSBuYW1lIGFuZCBlbWFpbCBhZGRyZXNzIG9mIHRoZSBsZXZlbCdzIGNyZWF0b3JzLCBhbmQKKyAgICAgKDIpIHRoZSB3b3JkcyAiVEhJUyBMRVZFTCBJUyBOT1QgTUFERSBCWSBPUiBTVVBQT1JURUQgQlkgM0QgUkVBTE1TIi4KKworIFtFXSBUaGUgbGV2ZWwgYW5kIGFueSB1c2Ugb2YgaXQgbXVzdCBiZSBvZmZlcmVkIHNvbGVseSBmb3IgZnJlZSAob3RoZXIgdGhhbgorICAgICBhbnkgaW5jaWRlbnRhbCBvbmxpbmUgY2hhcmdlcykuCisKKyBbRl0gQnkgZGlzdHJpYnV0aW5nIG9yIHBlcm1pdHRpbmcgdGhlIGRpc3RyaWJ1dGlvbiBvZiBhbnkgTmV3IExldmVsLCBhbGwKKyAgICAgb3duZXJzIG9mIGFueSB0cmFkZW1hcmssIGNvcHlyaWdodCBvciBvdGhlciByaWdodCwgdGl0bGUgb3IgaW50ZXJlc3QKKyAgICAgdGhlcmVpbiAodG8gdGhlIGV4dGVudCBkaWZmZXJlbnQgZnJvbSB0aGUgR2FtZSBhcyBvcmlnaW5hbGx5IGRpc3RyaWJ1dGVkCisgICAgIGJ5IDNEIFJlYWxtcykgZ3JhbnQgYmFjayB0byAzRCBSZWFsbXMgYW4gaXJyZXZvY2FibGUgcm95YWx0eSBmcmVlIHJpZ2h0CisgICAgIHRvIGRpc3RyaWJ1dGUgdGhlIGxldmVsLgorCisgW0ddIFRoZSBkaXN0cmlidXRvciBvZiBhbnkgTmV3IExldmVsIG9yIExldmVsIEVkaXRvciBtdXN0IGJlIGF1dGhvcml6ZWQgdG8KKyAgICAgZGlzdHJpYnV0ZSB0aGUgR2FtZSBpdHNlbGYgKGVpdGhlciBpbiB3cml0aW5nLCBvciBieSBiZWluZyB3aXRoaW4gYQorICAgICBjYXRlZ29yeSB3aGVyZSBubyB3cml0aW5nIGlzIG5lZWRlZCB1bmRlciB0aGlzIExJQ0VOU0UuRE9DKS4KKworWzRdIExJTUlURUQgV0FSUkFOVFkgQU5EIExJTUlUQVRJT04gT0YgUkVNRURJRVMKKworICAgIElmIHRoaXMgUHJvZ3JhbSAoaW5jbHVkaW5nIGFueSByZWxhdGVkIHdyaXR0ZW4gbWF0ZXJpYWwpIGNvbnRhaW5lZCBhCisgICAgcGh5c2ljYWwgZGVmZWN0LCB5b3UgbWF5IHJlY2VpdmUgYSByZXBsYWNlbWVudCBpZiB5b3UgcmV0dXJuIGl0IHdpdGhpbgorICAgIDkwIGRheXMgb2YgcmVjZWl2aW5nIGl0IGZyb20gM0QgUmVhbG1zLiAgQXNpZGUgZnJvbSB0aGlzLCBJVCBJUyBQUk9WSURFRAorICAgICJBUy1JUyIsIEFORCBOTyBXQVJSQU5USUVTIE9GIEFOWSBLSU5EIChJTkNMVURJTkcgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFKSwgRVhQUkVTUyBPUiBJTVBMSUVELAorICAgIEFSRSBNQURFIEFTIFRPIElUIE9SIEFOWSBNRURJVU0gSVQgTUFZIEJFIE9OLiAgT1VSIEVOVElSRSBMSUFCSUxJVFkgQU5ECisgICAgWU9VUiBFWENMVVNJVkUgUkVNRURZIElTIFNVQ0ggUkVQTEFDRU1FTlQsIEFORCBVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIFdJTEwKKyAgICBXRSBQUk9WSURFIEFOWSBPVEhFUiBSRU1FRFkgRk9SIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwsIENPTlNFUVVFTlRJQUwsCisgICAgUFVOSVRJVkUsIElOQ0lERU5UQUwgT1IgT1RIRVIgREFNQUdFUyBBUklTSU5HIEZST00gSVQsIElOQ0xVRElORyBTVUNIIEZST00KKyAgICBORUdMSUdFTkNFLCBTVFJJQ1QgTElBQklMSVRZLCBPUiBCUkVBQ0ggT0YgV0FSUkFOVFkgT1IgQ09OVFJBQ1QsIEVWRU4gQUZURVIKKyAgICBOT1RJQ0UgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gIFNvbWUgc3RhdGVzIGRvIG5vdCBhbGxvdyB0aGUKKyAgICBleGNsdXNpb24gb3IgbGltaXRhdGlvbiBvZiBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgbGlhYmlsaXR5IGZvciBpbmNpZGVudGFsCisgICAgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzbyB0aGlzIG1heSBub3QgYXBwbHkgdG8gYnV5ZXJzIG9mIHRoZSBQcm9ncmFtLgorICAgIFRoaXMgZ2l2ZXMgeW91IHNwZWNpZmljIGxlZ2FsIHJpZ2h0cywgYW5kIHlvdSBtYXkgYWxzbyBoYXZlIG90aGVyIHJpZ2h0cworICAgIHdoaWNoIHZhcnkgZnJvbSBzdGF0ZSB0byBzdGF0ZS4KKworWzVdIE1JU0NFTExBTlkKKworICAgIFtBXSBXaXRoIHJlc3BlY3QgdG8gZXZlcnkgbWF0dGVyIGFyaXNpbmcgdW5kZXIgdGhpcywgeW91IGNvbnNlbnQgdG8gdGhlCisgICAgICAgIGV4Y2x1c2l2ZSBqdXJpc2RpY3Rpb24gYW5kIHZlbnVlIG9mIHRoZSBzdGF0ZSBhbmQgZmVkZXJhbCBjb3VydHMKKyAgICAgICAgc2l0dGluZyBpbiBEYWxsYXMsIFRleGFzIGFuZCB0byBzZXJ2aWNlIGJ5IGNlcnRpZmllZCBtYWlsLCByZXR1cm4KKyAgICAgICAgcmVjZWlwdCByZXF1ZXN0ZWQsIG9yIGFzIG90aGVyd2lzZSBwZXJtaXR0ZWQgYnkgbGF3LgorCisgICAgW0JdIFlvdSB3aWxsIG5vdCBtb2RpZnksIHJldmVyc2UgY29tcGlsZSwgZGlzYXNzZW1ibGUsIG9yIHJldmVyc2UgZW5naW5lZXIKKyAgICAgICAgdGhlIFByb2dyYW0sIG9yIHVzZSBvciBkaXNjbG9zZSBhbnkgb2Ygb3VyIHNlY3JldCBpbmZvcm1hdGlvbiB0aGF0IGl0CisgICAgICAgIGNvbnRhaW5zLgorCitbVi4wNC4xOC45Nl0KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0RVTUItMC45LjIgYi9saWNlbnNlcy9EVU1CLTAuOS4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhYzY0NWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9EVU1CLTAuOS4yCkBAIC0wLDAgKzEsNTggQEAKKy8qICBfX19fX19fICAgICAgICAgX19fXyAgICBfXyAgICAgICAgIF9fXyAgICBfX18KKyAqIFwgICAgXyAgXCAgICAgICBcICAgIC8gIFwgIC8gICAgICAgXCAgIFwgIC8gICAvICAgICAgICcgICAnICAnCisgKiAgfCAgfCBcICBcICAgICAgIHwgIHwgICAgfHwgICAgICAgICB8ICAgXC8gICB8ICAgICAgICAgLiAgICAgIC4KKyAqICB8ICB8ICB8ICB8ICAgICAgfCAgfCAgICB8fCAgICAgICAgIHx8XCAgL3wgIHwKKyAqICB8ICB8ICB8ICB8ICAgICAgfCAgfCAgICB8fCAgICAgICAgIHx8IFwvIHwgIHwgICAgICAgICAnICAnICAnCisgKiAgfCAgfCAgfCAgfCAgICAgIHwgIHwgICAgfHwgICAgICAgICB8fCAgICB8ICB8ICAgICAgICAgLiAgICAgIC4KKyAqICB8ICB8Xy8gIC8gICAgICAgIFwgIFxfXy8vICAgICAgICAgIHx8ICAgIHwgIHwKKyAqIC9fX19fX19fL3luYW1pYyAgICBcX19fXy9uaXZlcnNhbCAgL19fXCAgL19fX19cdXNpYyAgIC98ICAuICAuIGlibGlvdGhlcXVlCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gIFwKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvIC4gIFwKKyAqIGxpY2VuY2UudHh0IC0gQ29uZGl0aW9ucyBmb3IgdXNlIG9mIERVTUIuICAgICAgICAgIC8gLyBcICBcCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgPCAgLyAgIFxfCisgKiBJZiB5b3UgZG8gbm90IGFncmVlIHRvIHRoZXNlIHRlcm1zLCBwbGVhc2UgICAgICAgIHwgIFwvIC9cICAgLworICogZG8gbm90IHVzZSBEVU1CLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXF8gIC8gID4gLworICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IFwgLyAvCisgKiBJbmZvcm1hdGlvbiBpbiBbYnJhY2tldHNdIGlzIHByb3ZpZGVkIHRvIGFpZCAgICAgICAgIHwgICcgLworICogaW50ZXJwcmV0YXRpb24gb2YgdGhlIGxpY2VuY2UuICAgICAgICAgICAgICAgICAgICAgICAgXF9fLworICovCisKKworRHluYW1pYyBVbml2ZXJzYWwgTXVzaWMgQmlibGlvdGhlcXVlCisKK0NvcHlyaWdodCAoQykgMjAwMS0yMDAzIEJlbiBEYXZpcywgUm9iZXJ0IEogT2hhbm5lc3NpYW4gYW5kIEp1bGllbiBDdWduaWVyZQorCitUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KK0luIG5vIGV2ZW50IHNoYWxsIHRoZSBhdXRob3JzIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBhcmlzaW5nIGZyb20gdGhlCit1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UsCitpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0CitmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKKzEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90IGNsYWltCisgICB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZSBpbiBhCisgICBwcm9kdWN0LCB5b3UgYXJlIHJlcXVlc3RlZCB0byBhY2tub3dsZWRnZSBpdHMgdXNlIGluIHRoZSBwcm9kdWN0CisgICBkb2N1bWVudGF0aW9uLCBhbG9uZyB3aXRoIGRldGFpbHMgb24gd2hlcmUgdG8gZ2V0IGFuIHVubW9kaWZpZWQgdmVyc2lvbiBvZgorICAgdGhpcyBzb2Z0d2FyZSwgYnV0IHRoaXMgaXMgbm90IGEgc3RyaWN0IHJlcXVpcmVtZW50LgorCisgICBbTm90ZSB0aGF0IHRoZSBhYm92ZSBwb2ludCBhc2tzIGZvciBhIGxpbmsgdG8gRFVNQiwgbm90IGp1c3QgYSBtZW50aW9uLgorICAgR29vZ2xpbmcgZm9yIERVTUIgZG9lc24ndCBoZWxwIG11Y2ghIFRoZSBVUkwgaXMgImh0dHA6Ly9kdW1iLnNmLm5ldC8iLl0KKworICAgW1RoZSBvbmx5IHJlYXNvbiB3aHkgdGhlIGxpbmsgaXMgbm90IHN0cmljdGx5IHJlcXVpcmVkIGlzIHRoYXQgc3VjaCBhCisgICByZXF1aXJlbWVudCBwcmV2ZW50cyBEVU1CIGZyb20gYmVpbmcgdXNlZCBpbiBwcm9qZWN0cyB3aXRoIGNlcnRhaW4gb3RoZXIKKyAgIGxpY2VuY2VzLCBub3RhYmx5IHRoZSBHUEwuIFNlZSBodHRwOi8vd3d3LmdudS5vcmcvcGhpbG9zb3BoeS9ic2QuaHRtbCAuXQorCisyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZQorICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLgorCiszLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgZnJvbSBvciBhbHRlcmVkIGluIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgorCis0LiBJZiB5b3UgYXJlIHVzaW5nIHRoZSBQcm9ncmFtIGluIHNvbWVvbmUgZWxzZSdzIGJlZHJvb20gYXQgYW55IE1vbmRheQorICAgMzowNSBQTSwgeW91IGFyZSBub3QgYWxsb3dlZCB0byBtb2RpZnkgdGhlIFByb2dyYW0gZm9yIHRlbiBtaW51dGVzLiBbVGhpcworICAgY2xhdXNlIHByb3ZpZGVkIGJ5IElucGhlcm5pYzsgZXZlcnkgbGljZW5jZSBzaG91bGQgY29udGFpbiBhdCBsZWFzdCBvbmUKKyAgIGNsYXVzZSwgdGhlIHJlYXNvbmluZyBiZWhpbmQgd2hpY2ggaXMgZmFyIGZyb20gb2J2aW91cy5dCisKKworTm90ZTogcG9pbnQgNCBoYXMgYmVlbiByZW5vdW5jZWQuIFNlZSB0aGUgTGljZW5jZXMgc2VjdGlvbiBvbgoraHR0cDovL2R1bWIuc2YubmV0LyBmb3IgY29uZmlybWF0aW9uIHRoYXQgdGhpcyBpcyB0cnVlLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvRGVsbCBiL2xpY2Vuc2VzL0RlbGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYyODdmZQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0RlbGwKQEAgLTAsMCArMSw1MyBAQAorVGFrZW4gZnJvbSBodHRwOi8vc3VwcG9ydC5kZWxsLmNvbS9zdXBwb3J0L3RvcGljcy9nbG9iYWwuYXNweC9zdXBwb3J0L2Rvd25sb2Fkcy9lbi9kaXNjbGFpbWVyCisKK0V4cG9ydCBDb21wbGlhbmNlIERpc2NsYWltZXIKKworQnkgZG93bmxvYWRpbmcgZnJvbSBEZWxsJ3MgV2ViIHNpdGUsIHlvdSBhcmUgYWdyZWVpbmcgdGhhdCB5b3Ugd2lsbCBub3QgdXNlIG9yCitvdGhlcndpc2UgZXhwb3J0IG9yIHJlZXhwb3J0LCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCB0aGlzIFNvZnR3YXJlIGFuZC9vcgorVGVjaG5vbG9neSBleGNlcHQgYXMgYXV0aG9yaXplZCBieSBVLlMuIGxhdyBhbmQgdGhlIGxhd3Mgb2YgdGhlIGp1cmlzZGljdGlvbiBpbgord2hpY2ggdGhlIFNvZnR3YXJlIGFuZC9vciBUZWNobm9sb2d5IHdhcyBvYnRhaW5lZC4gVGhlIFNvZnR3YXJlIGFuZC9vcgorVGVjaG5vbG9neSBtYXkgbm90IGJlIGV4cG9ydGVkIG9yIHJlZXhwb3J0ZWQgKGkpIHRvIGFueSBVLlMuIGVtYmFyZ29lZCBjb3VudHJ5CisoY3VycmVudGx5IEN1YmEsIElyYW4sIExpYnlhLCBOb3J0aCBLb3JlYSwgU3VkYW4gYW5kIFN5cmlhKSBvciAoaWkpIHRvIGFuCitlbmQtdXNlciBvciBlbmQtdXNlIHByb2hpYml0ZWQgYnkgVS5TLiBsYXcgb3IgdGhlIGxhd3Mgb2YgdGhlIGp1cmlzZGljdGlvbiBpbgord2hpY2ggdGhlIFNvZnR3YXJlIGFuZC9vciBUZWNobm9sb2d5IHdhcyBvYnRhaW5lZC4gQnkgZG93bmxvYWRpbmcgdGhlIFNvZnR3YXJlCithbmQvb3IgVGVjaG5vbG9neSwgeW91IHJlcHJlc2VudCBhbmQgd2FycmFudCB0aGF0IHlvdSBhcmUgbm90IGxvY2F0ZWQgaW4sIHVuZGVyCit0aGUgY29udHJvbCBvZiwgb3IgYSBuYXRpb25hbCBvciByZXNpZGVudCBvZiBhbnkgc3VjaCBjb3VudHJ5IGFuZCBhcmUgbm90IGEKK3Byb2hpYml0ZWQgZW5kLXVzZXIgb3IgZW5nYWdlZCBpbiBhIHByb2hpYml0ZWQgZW5kLXVzZS4KKworRGVsbCBTb2Z0d2FyZSBEaXNjbGFpbWVyCisKK1RPIFVTRVJTIE9GIERFTEwnUyBTRVJWSUNFICYgU1VQUE9SVCBXRUIgU0lURTogREVMTCBJTkMuICgiREVMTCIpIERPRVMgTk9UCitXQVJSQU5UIFRIRSBGSUxFUyAoSU5DTFVESU5HIEFOWSBGSVhFUyBBTkQgVVBEQVRFUykgUFJPVklERUQgSU4gVEhFCitET1dOTE9BREFCTEUgRklMRSBMSUJSQVJZIEFSRUEoUykgT0YgVEhFIERFTEwgU0VSVklDRSAmIFNVUFBPUlQgV0VCIFNJVEUgKFRIRQorIlNJVEUiKS4gQUxMIEZJTEVTIEFWQUlMQUJMRSBGT1IgRE9XTkxPQUQgKFRIRSAiRklMRVMiKSBGUk9NIFRIRSBTSVRFIEFSRQorUFJPVklERUQgIkFTIElTLiIgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBGSUxFUywgREVMTCBNQUtFUyBOTyBXQVJSQU5USUVTIE9GIEFOWQorS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPRiBUSVRMRSwgT1IgT0YKK05PTi1JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkgUklHSFRTLiBVU0UgT0YgVEhFIEZJTEVTIEJZIEEgVVNFUiBJUyBBVCBUSEUKK1VTRVInUyBSSVNLIEFORCBJUyBERUVNRUQgQUNDRVBUQU5DRSBPRiBUSEVTRSBURVJNUy4gSU4gTk8gRVZFTlQgU0hBTEwgREVMTCBCRQorTElBQkxFIFRPIFRIRSBVU0VSIEZPUiBBTlkgREFNQUdFUyBBUklTSU5HIEZST00gVVNFIE9GIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFCitGSUxFUywgSU5DTFVESU5HIEFOWSBEQU1BR0VTIEFTIEEgUkVTVUxUIE9GIFZJUlVTIElORkVDVElPTiBPUiBPVEhFUgorQ09OVEFNSU5BVElPTiwgSU5DTFVESU5HIEFOWSBMT1NUIFBST0ZJVFMsIExPU1QgU0FWSU5HUywgT1IgT1RIRVIgSU5DSURFTlRBTCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBFVkVOIElGIERFTEwgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorREFNQUdFUywgT1IgRk9SIEFOWSBDTEFJTSBCWSBBTk9USEVSIFBBUlRZLgorCitUSEUgRFJJVkVSUyBQUk9WSURFRCBGT1IgRE9XTkxPQUQgT04gREVMTCdTIFdFQlNJVEUgQVJFIFRIRSBMQVRFU1QgT05FUyBUSEFUCitIQVZFIEJFRU4gVkFMSURBVEVEIEJZIERFTEwuIEZPUiBBTlkgR0lWRU4gSEFSRFdBUkUgQ09NUE9ORU5ULCBORVdFUiBEUklWRVJTCitNQVkgRVhJU1QgT04gVEhFIFJFU1BFQ1RJVkUgTUFOVUZBQ1RVUkVSJ1MgU0lURS4gUExFQVNFIE5PVEUgVEhBVCBERUxMIEhBUyBOT1QKK1ZBTElEQVRFRCBBTlkgRFJJVkVSUyBOT1QgRElSRUNUTFkgQVZBSUxBQkxFIEZST00gREVMTCdTIFdFQlNJVEUsIEFORCBDQU4KK1RIRVJFRk9SRSBNQUtFIE5PIFJFUFJFU0VOVEFUSU9OUyBBUyBUTyBUSEVJUiBFRkZFQ1RJVkVORVNTLCBTVEFCSUxJVFksCitBUFBST1BSSUFURU5FU1MgT1IgU0FGRVRZIC4gSUYgWU9VIFdJU0ggVE8gRE9XTkxPQUQgQU5EIElOU1RBTEwgQU5ZCitOT04tVkFMSURBVEVEIERSSVZFUiwgREVMTCBTVFJPTkdMWSBSRUNPTU1FTkRTIFRIQVQgWU9VIE1BS0UgQSBCQUNLVVAgT0YgWU9VUgorQ1VSUkVOVCBXT1JLSU5HIENPTkZJR1VSQVRJT04gU08gVEhBVCBZT1UgSEFWRSBTT01FIEFCSUxJVFkgVE8gUkVUVVJOIFRPIEEKK0tOT1dOIFdPUktJTkcgU1RBVEUgSUYgVEhFIE5FVyBEUklWRVIgRkFJTFMgVE8gRlVOQ1RJT04gUFJPUEVSTFkgT1IgQ0FVU0VTCitTWVNURU0gUFJPQkxFTVMuIEFOWSBQUk9CTEVNUyBFTkNPVU5URVJFRCBXSVRIIE5PTi1WQUxJREFURUQgRFJJVkVSUyBTSE9VTEQgQkUKK0FERFJFU1NFRCBUTyBUSEUgUkVTUEVDVElWRSBNQU5VRkFDVFVSRVIoUykgLS0gREVMTCBXSUxMIE5PVCBIQVZFIElORk9STUFUSU9OCitPTiBBTlkgTk9OLVZBTElEQVRFRCBEUklWRVJTLgorCitEZWxsIFNvZnR3YXJlIENvcHlyaWdodAorCitFQUNIIE9ORSBPRiBUSEUgRklMRVMgKEFTIERFRklORUQgSU4gVEhFICJESVNDTEFJTUVSIiBTVUJTRUNUSU9OIEFCT1ZFKSBJUyBUSEUKK0NPUFlSSUdIVEVEIFdPUksgT0YgRUlUSEVSIERFTEwgT1IgT0YgVEhFIFRISVJELVBBUlRZIFZFTkRPUiBTVVBQTFlJTkcgVEhFCitET1dOTE9BREFCTEUgRklMRS4gVVNFIE9GIFRIRSBGSUxFUyBJUyBTVUJKRUNUIFRPIENPUFlSSUdIVCBMQVdTIE9GIFRIRSBVTklURUQKK1NUQVRFUy4gVVNFIE9GIEFOWSBPRiBUSEUgRklMRVMgSU4gQU5ZIE1BTk5FUiBUSEFUIFdPVUxEIFZJT0xBVEUgVEhFIENPUFlSSUdIVAorTEFXUyBPRiBUSEUgVU5JVEVEIFNUQVRFUyBJUyBFWFBSRVNTTFkgRk9SQklEREVOLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvRGlnaXVtIGIvbGljZW5zZXMvRGlnaXVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ODhkMmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9EaWdpdW0KQEAgLTAsMCArMSwxOTAgQEAKK0lNUE9SVEFOVCAtIFJFQUQgQ0FSRUZVTExZCisKKyAxIEFHUkVFTUVOVAorCisgMS4xIFRoaXMgRGlnaXVtIEVuZC1Vc2VyIFB1cmNoYXNlIGFuZCBMaWNlbnNlIEFncmVlbWVudCAodGhlICJBZ3JlZW1lbnQiKSBpcyBhCisgbGVnYWwgYWdyZWVtZW50IGJldHdlZW4gRGlnaXVtIGFuZCB0aGUgbGljZW5zZWUgYW5kIHB1cmNoYXNlciByZXNwZWN0aXZlbHkKKyAoaGVyZWluYWZ0ZXIsICJ5b3UiLCAiWW91IiBvciAieW91ciIpIG9mIHRoZSBEaWdpdW0gZGlzdHJpYnV0aW9uIG1lZGlhLAorIGVtYmVkZGVkIHNvZnR3YXJlIGFuZCByZWxhdGVkIGRvY3VtZW50YXRpb24gKHRoZSAiU29mdHdhcmUiKSwgRGlnaXVtIHNlcnZpY2VzCisgKHRoZSAiU2VydmljZXMiKSwgIGFuZCByZWxhdGVkIG1hbnVhbHMgKGNvbGxlY3RpdmVseSB0aGUgIlByb2R1Y3RzIikuIEJZCisgSU5TVEFMTElORyBUSEUgU09GVFdBUkUsIFlPVSBBR1JFRSBUTyBBTkQgQUNDRVBUIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRgorIFRISVMgQUdSRUVNRU5ULiBJZiB5b3UgZG8gbm90IGFjY2VwdCwgb3IgYXJlIG5vdCBhdXRob3JpemVkIHRvIGFjY2VwdCB0aGUgdGVybXMKKyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCwgdGhlbiB5b3Ugc2hvdWxkIG5vdCBpbnN0YWxsIHRoZSBTb2Z0d2FyZSBhbmQgCisgc2hvdWxkIHJlbW92ZSBhbnkgaW5zdGFsbGVkIFNvZnR3YXJlIGZyb20geW91ciBjb21wdXRlci4KKworIDIgR1JBTlQgT0YgTElDRU5TRQorCisgMi4xIFN1YmplY3QgdG8geW91ciBjb21wbGlhbmNlIHdpdGggaXRzIG9ibGlnYXRpb25zIGhlcmVpbiwgRGlnaXVtIGhlcmVieQorIGdyYW50cyB5b3UgYSBsaW1pdGVkLCBub24tdHJhbnNmZXJhYmxlLCBub24tZXhjbHVzaXZlLCBub24tc3VibGljZW5zYWJsZQorIGxpY2Vuc2UgdG8gdGhlIFNvZnR3YXJlIGZvciB1c2Ugd2l0aCBaYXB0ZWwgc29mdHdhcmUgZm9yIGludGVybmFsIGJ1c2luZXNzCisgcHVycG9zZXMgYW5kIG5vdCBmb3IgcmVzYWxlLCBzdWJsaWNlbnNlLCBvciBsZWFzaW5nIHRvIHRoaXJkLXBhcnRpZXMuCisgIlNvZnR3YXJlIiBzaGFsbCBpbmNsdWRlIGFueSB1cGdyYWRlcywgdXBkYXRlcywgYnVnIGZpeGVzIG9yIG1vZGlmaWVkIHZlcnNpb24KKyAoIlVwZ3JhZGVzIikgb3IgYmFja3VwIGNvcGllcyBvZiB0aGUgU29mdHdhcmUgc3VwcGxpZWQgdG8geW91IGJ5IERpZ2l1bQorIHByb3ZpZGVkIHlvdSBob2xkIGEgdmFsaWQgbGljZW5zZSBrZXkgdG8gdGhlIG9yaWdpbmFsIFNvZnR3YXJlIGFuZCBoYXZlIHBhaWQKKyBhbnkgYXBwbGljYWJsZSBmZWUgZm9yIFVwZ3JhZGVzLgorCisgMi4yIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nLCB5b3UgYWNrbm93bGVkZ2UgdGhhdCBjZXJ0YWluIGNvbXBvbmVudHMgb2YKKyB0aGUgU29mdHdhcmUgbWF5IGJlIGNvdmVyZWQgYnkgc28tY2FsbGVkICJvcGVuIHNvdXJjZSIgc29mdHdhcmUgbGljZW5zZXMKKyAoIk9wZW4gU291cmNlIENvbXBvbmVudHMiKS4gRGlnaXVtIHdpbGwgcHJvdmlkZSBhIGxpc3Qgb2YgT3BlbiBTb3VyY2UKKyBDb21wb25lbnRzIGZvciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgU29mdHdhcmUgdXBvbiB5b3VyIHJlcXVlc3QuIFRvIHRoZQorIGV4dGVudCByZXF1aXJlZCBieSB0aGUgbGljZW5zZXMgY292ZXJpbmcgT3BlbiBTb3VyY2UgQ29tcG9uZW50cywgdGhlIHRlcm1zIG9mCisgc3VjaCBsaWNlbnNlcyB3aWxsIGFwcGx5IGluIGxpZXUgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgRGlnaXVtCisgaGVyZWJ5IHJlcHJlc2VudHMgYW5kIHdhcnJhbnRzIHRoYXQgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgdG8gc3VjaCBPcGVuIFNvdXJjZQorIENvbXBvbmVudHMgd2lsbCBiZSBubyBsZXNzIGJyb2FkIHRoYW4gdGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiB0aGlzIFNlY3Rpb24gMi4KKyBUbyB0aGUgZXh0ZW50IHRoZSB0ZXJtcyBvZiB0aGUgbGljZW5zZXMgYXBwbGljYWJsZSB0byBPcGVuIFNvdXJjZSBDb21wb25lbnRzCisgcHJvaGliaXQgYW55IG9mIHRoZSByZXN0cmljdGlvbnMgaW4gdGhpcyBBZ3JlZW1lbnQgd2l0aCByZXNwZWN0IHRvIHN1Y2ggT3BlbgorIFNvdXJjZSBDb21wb25lbnQsIHN1Y2ggcmVzdHJpY3Rpb25zIHdpbGwgbm90IGFwcGx5IHRvIHN1Y2ggT3BlbiBTb3VyY2UKKyBDb21wb25lbnQuCisKKyAyLjMgIktleSIgcmVmZXJzIHRvIHRoZSB1bmlxdWUgcmVnaXN0cmF0aW9uIGNvZGUgcHJvdmlkZWQgYnkgRGlnaXVtIHRvIGVuYWJsZQorIHRoZSBMaWNlbnNlZSB0byB1c2UgdGhlIFNvZnR3YXJlLiAgWW91IG1heSB1c2Ugb25lIGNvcHkgb2YgdGhlIFNvZnR3YXJlCisgcmVnaXN0ZXJlZCB3aXRoIGEgcmVnaXN0cmF0aW9uIGtleSwgcHJvdmlkZWQgYnkgRGlnaXVtLCBvbiBhIHNpbmdsZSBjb21wdXRlcgorIG93bmVkLCBsZWFzZWQsIG9yIG90aGVyd2lzZSBjb250cm9sbGVkIGJ5IHlvdSBhdCBhIHNpbmdsZSB0aW1lLiAgSWYgeW91IGhhdmUKKyBtdWx0aXBsZSByZWdpc3RyYXRpb24ga2V5cyBmb3IgdGhlIFNvZnR3YXJlIHlvdSBtYXkgdXNlIHRoZSBTb2Z0d2FyZSBvbiBhcyAKKyBtYW55IGNvbXB1dGVycyBhcyB5b3UgaGF2ZSBrZXlzLiAgVGhlIFNvZnR3YXJlIG1heSBub3QgYmUgdXNlZCBvbiBvcgorIGRpc3RyaWJ1dGVkIHRvIGEgZ3JlYXRlciBudW1iZXIgb2YgY29tcHV0ZXJzIHRoYW4geW91IGhhdmUgcmVnaXN0cmF0aW9uIGtleXMuCisKKyAzIFJFU0VSVkFUSU9OIE9GIFJJR0hUUworCisgMy4xIEV4Y2VwdCBmb3IgdGhlIGxpbWl0ZWQgbGljZW5zZSByaWdodHMgZXhwcmVzc2x5IGdyYW50ZWQgaW4gdGhpcyBBZ3JlZW1lbnQsCisgRGlnaXVtIHJlc2VydmVzIGFsbCByaWdodHMgaW4gYW5kIHRvIHRoZSBTb2Z0d2FyZSBhbmQgYW55IG1vZGlmaWNhdGlvbnMKKyB0aGVyZXRvLCBpbmNsdWRpbmcgdGl0bGUsIG93bmVyc2hpcCwgdHJhZGVtYXJrLCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGUgc2VjcmV0CisgYW5kIGFueSBvdGhlciByaWdodHMgYW5kIGludGVyZXN0cy4gWW91IHdpbGwgb3duIG9ubHkgdGhlIHBoeXNpY2FsIG1lZGlhIG9uCisgd2hpY2ggdGhlIFNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYXJlIHJlcHJvZHVjZWQgYW5kIGRpc3RyaWJ1dGVkLgorCisgNCBMSU1JVEVEIFdBUlJBTlRZIC0gU09GVFdBUkUKKworIDQuMSAuRGlnaXVtIHdhcnJhbnRzIG9ubHkgdGhhdCB0aGUgIG1lZGlhIG9uIHdoaWNoIERpZ2l1bSBkZWxpdmVycyB0aGUgU29mdHdhcmUKKyB3aWxsIGJlIGZyZWUgb2YgcGh5c2ljYWwgZGVmZWN0cyBmb3IgYSBwZXJpb2Qgb2YgbmluZXR5ICg5MCkgZGF5cyBvciB3aWxsIGJlCisgcmVwbGFjZWQgYnkgRGlnaXVtLiBFeGNlcHQgYXMgb3RoZXJ3aXNlIGFncmVlZCBieSBEaWdpdW0gaW4gd3JpdGluZywgIHRoZQorIHJlcGxhY2VtZW50IFNvZnR3YXJlIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50LiAKKyBJZiBEaWdpdW0gZGV0ZXJtaW5lcyBpbiBpdHMgc29sZSBkaXNjcmV0aW9uIHRoYXQgYSBkZWZlY3QgY2Fubm90IGJlIGNvcnJlY3RlZCwgCisgb3IgdGhhdCBpdCBpcyBub3QgcHJhY3RpY2FsIHRvIHJlcGxhY2UgdGhlIFNvZnR3YXJlLCB0aGUgcHJpY2UgcGFpZCBieSB0aGUKKyBvcmlnaW5hbCBsaWNlbnNlZSBmb3IgdGhlIFNvZnR3YXJlIHdpbGwgYmUgcmVmdW5kZWQgYnkgRGlnaXVtIHRvIHlvdSBhbmQgdGhlCisgbGljZW5zZSBncmFudCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZWQsIGluIHdoaWNoIGNhc2UgeW91IHdpbGwgcHJvbXB0bHkgcmV0dXJuIAorIHRvIERpZ2l1bSBvciBkZXN0cm95IHRoZSBTb2Z0d2FyZSBhbmQgYW55IGNvcGllcyBpbiB5b3VyIHBvc3Nlc3Npb24uCisKKyA1IFdBUlJBTlRZIERJU0NMQUlNRVJTCisKKyA1LjEgVGhlIGxpbWl0ZWQgd2FycmFudHkgcHJvdmlkZWQgYnkgRGlnaXVtIGRvZXMgbm90IGNvdmVyIChpKSBQcm9kdWN0cyB0aGF0CisgaGF2ZSBiZWVuIHN1YmplY3RlZCB0byBtaXN1c2UsIHRhbXBlcmluZywgbW9kaWZpY2F0aW9uLCBleHBlcmltZW50YXRpb24sCisgYWx0ZXJhdGlvbiwgbmVnbGlnZW5jZSwgZmF1bHR5IGluc3RhbGxhdGlvbjsgKGlpKSBQcm9kdWN0cyB3aXRoIHRoZSBtb2RlbCBvcgorIHNlcmlhbCBudW1iZXIgYWx0ZXJlZCwgdGFtcGVyZWQgd2l0aCwgb3IgcmVtb3ZlZDsgKGlpaSkgSW5pdGlhbCBpbnN0YWxsYXRpb24sCisgaW5zdGFsbGF0aW9uIGFuZCByZW1vdmFsIG9mIHRoZSBQcm9kdWN0IGZvciByZXBhaXIsIGFuZCBzaGlwcGluZyBjb3N0czsgCisgKGl2KSBDb25maWd1cmF0aW9uIG9mIHRoZSBQcm9kdWN0OyAodikgRGFtYWdlIHRoYXQgb2NjdXJzIGluIHNoaXBtZW50IGR1ZSB0bworIGFjdCBvZiBHb2QsIGZhaWx1cmVzIGR1ZSB0byBwb3dlciBzdXJnZXMsIGFuZCBjb3NtZXRpYyBkYW1hZ2U7ICh2aSkgQW55CisgaGFyZHdhcmUsIHNvZnR3YXJlLCBmaXJtd2FyZSBvciBvdGhlciBtYXRlcmlhbHMgb3Igc2VydmljZXMgcHJvdmlkZWQgYnkgYW55b25lIAorIG90aGVyIHRoYW4gRGlnaXVtOyBvciAodmlpKSBSZXBhaXIgYnkgYW55b25lIG90aGVyIHRoYW4gRGlnaXVtIG9yIERpZ2l1bSdzIAorIGF1dGhvcml6ZWQgcmVwcmVzZW50YXRpdmUuIFVubGVzcyB1bmRlciBhIGN1cnJlbnQgU2VydmljZXMgY29udHJhY3Qgd2l0aCAKKyBEaWdpdW0sIHlvdSBzaGFsbCBub3QgdXBncmFkZSBvciB1cGRhdGUgUHJvZHVjdCB1c2luZyBzb2Z0d2FyZSBvZiBhbnkgb3JpZ2luIAorIGV4Y2VwdCBjb21tZXJjaWFsIHZlcnNpb25zIG9mIHRoZSBTb2Z0d2FyZSByZWxlYXNlZCB0byB5b3UgYnkgRGlnaXVtIG9yIGl0cyAKKyBhdXRob3JpemVkIGRpc3RyaWJ1dG9ycyBmcm9tIHRpbWUgdG8gdGltZS4gVEhFIFBST0RVQ1QgSVMgUFJPVklERUQgV0lUSE9VVCBBTlkKKyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgV0hBVFNPRVZFUiwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWQorIElNUExJRUQgV0FSUkFOVFkgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQKKyBOT04tSU5GUklOR0VNRU5ULiBFWENFUFQgQVMgRVhQUkVTU0xZIENPVkVSRUQgVU5ERVIgVEhFIExJTUlURUQgV0FSUkFOVFkKKyBQUk9WSURFRCBIRVJFSU4sIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSwgU0VMRUNUSU9OIEFORCBQRVJGT1JNQU5DRQorIE9GIFRIRSBQUk9EVUNUIElTIFlPVVJTLgorCisgNiBSRVRVUk4gTUFURVJJQUwgQVVUSE9SSVpBVElPTgorCisgNi4xIElmIHJldHVybmluZyBhIFByb2R1Y3QgdW5kZXIgdGhlIGxpbWl0ZWQgd2FycmFudHksIHlvdSBtdXN0IGluY2x1ZGUgd2l0aAorIHRoZSBQcm9kdWN0IGEgd3JpdHRlbiBkZXNjcmlwdGlvbiBvZiB0aGUgcGh5c2ljYWwgZGVmZWN0IG9yIGluIHN1ZmZpY2llbnQKKyBkZXRhaWwgdG8gYWxsb3cgRGlnaXVtIHRvIGNvbmZpcm0gc3VjaCBkZXRlcm1pbmF0aW9uLiBQcmlvciB0byByZXR1cm5pbmcgYQorIFByb2R1Y3QgdW5kZXIgbGltaXRlZCB3YXJyYW50eSB0byBEaWdpdW0sIHRoZSBvcmlnaW5hbCBwdXJjaGFzZXIgbXVzdCBvYnRhaW4gYQorIFJldHVybiBNYXRlcmlhbCBBdXRob3JpemF0aW9uICgiUk1BIikgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBEaWdpdW0gcG9saWN5IGluCisgZWZmZWN0IGF0IHRoZSB0aW1lIGFzIHB1Ymxpc2hlZCBvbiB0aGUgRGlnaXVtIHdlYiBzaXRlLiAgRGlnaXVtIHdpbGwgbm90IGJlCisgb2JsaWdhdGVkIHRvIGFjY2VwdCByZXR1cm5zIG9mIGFueSBTb2Z0d2FyZSB0aGF0IGhhcyBiZWVuIGFjdGl2YXRlZCBvcgorIG90aGVyd2lzZSB1c2VkLgorCisgNyBMSU1JVEFUSU9OIE9GIExJQUJJTElUWQorCisgNy4xIFRPIFRIRSBNQVhJTVVNIEVYVEVOVCBQRVJNSVRURUQgQlkgTEFXLCBESUdJVU0gSVMgTk9UIExJQUJMRSBVTkRFUiBBTlkKKyBDT05UUkFDVCwgTkVHTElHRU5DRSwgU1RSSUNUIExJQUJJTElUWSBPUiBPVEhFUiBMRUdBTCBPUiBFUVVJVEFCTEUgVEhFT1JZIEZPUgorIEFOWSBMT1NTIE9GIFVTRSBPRiBUSEUgUFJPRFVDVCwgSU5DT05WRU5JRU5DRSBPUiBJTkRJUkVDVCBEQU1BR0VTIE9GIEFOWQorIENIQVJBQ1RFUiwgV0hFVEhFUiBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgKElOQ0xVRElORywgQlVUIE5PVAorIExJTUlURUQgVE8sIExPU1MgT0YgUkVWRU5VRSBPUiBQUk9GSVQsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IKKyBNQUxGVU5DVElPTiwgRkFJTFVSRSBPRiBDT05ORUNURUQgRVFVSVBNRU5UIE9SIFBST0dSQU1TLCBMT1NTIE9GIElORk9STUFUSU9OCisgT1IgREFUQSBPUiBMT1NTIE9GIEdPT0RXSUxMKSBSRVNVTFRJTkcgRlJPTSBUSEUgVVNFIE9GIFRIRSBQUk9EVUNULCBSRUxBVElORworIFRPIFdBUlJBTlRZIFNFUlZJQ0UsIE9SIEFSSVNJTkcgT1VUIE9GIEFOWSBCUkVBQ0ggT0YgVEhJUyBBR1JFRU1FTlQsIEVWRU4gSUYKKyBESUdJVU0gSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSEUgU09MRSBSRU1FRFkgRk9SCisgQSBCUkVBQ0ggT0YgVEhFIEZPUkVHT0lORyBMSU1JVEVEIFdBUlJBTlRZIElTIFJFUEFJUiwgUkVQTEFDRU1FTlQgT1IgUkVGVU5EIE9GCisgVEhFIFRIRSBNQVhJTVVNIExJQUJJTElUWSBPRiBESUdJVU0gVU5ERVIgVEhJUyBERUZFQ1RJVkUgUFJPRFVDVC4gSU4gTk8gRVZFTlQKKyBTSEFMTCBUSEUgUkVNRURZIFJFTEFURUQgVE8gVEhJUyBBR1JFRU1FTlQgRVhDRUVEIFRIRSBQVVJDSEFTRSBQUklDRSBPRiBUSEUKKyBBUFBMSUNBQkxFIFBST0RVQ1QuIFRIRSBGT1JFR09JTkcgRVhQUkVTUyBMSU1JVEVEIFdSSVRURU4gV0FSUkFOVFkgQU5EIFJFTUVESUVTCisgQVJFIEVYQ0xVU0lWRSBBTkQgSU4gTElFVSBPRiBBTlkgT1RIRVIgV0FSUkFOVElFUyBPUiBSRU1FRElFUywgRVhQUkVTUywgSU1QTElFRAorIE9SIFNUQVRVVE9SWS4KKworIDggUFJPUFJJRVRBUlkgV09SS1MKKworIDguMSBUaGUgUHJvZHVjdHMgY29udGFpbiB0cmFkZW1hcmtzLCB0cmFkZSBzZWNyZXRzIGFuZC9vciBjb3B5cmlnaHRlZCBtYXRlcmlhbHMKKyBvZiBEaWdpdW0gb3IgaXRzIHN1cHBsaWVycy4KKworIDguMiBZb3UgYWdyZWUgbm90IHRvIHJldmVyc2UgZW5naW5lZXIsIGRlY29tcGlsZSwgb3IgZGlzYXNzZW1ibGUgdGhlIFNvZnR3YXJlLAorIGV4Y2VwdCB0byB0aGUgZXh0ZW50IHN1Y2ggcmVzdHJpY3Rpb24gaXMgZXhwcmVzc2x5IHByb2hpYml0ZWQgYnkgYXBwbGljYWJsZQorIGxhdy4gWW91IHNoYWxsIG5vdCBkaXNjbG9zZSBvciBtYWtlIGF2YWlsYWJsZSBzdWNoIHRyYWRlIHNlY3JldHMgb3IgY29weXJpZ2h0ZWQKKyBtYXRlcmlhbCBpbiBhbnkgZm9ybSB0byBhbnkgdGhpcmQgcGFydHkgbm9yIHJlbW92ZSBhbnkgdHJhZGVtYXJrIG5vdGljZXMsCisgY29weXJpZ2h0IG5vdGljZXMsIG9yIGxpY2Vuc2luZyB0ZXJtcyBmcm9tIHRoZSBTb2Z0d2FyZSBvciBhbnkgY29tcG9uZW50cworIHRoZXJlaW4uCisKKyA4LjMgWW91IHdpbGwgbm90LCB3aXRob3V0IERpZ2l1bSB3cml0dGVuIGNvbnNlbnQsIHVzZSB0aGUgbmFtZSwgdHJhZGVtYXJrcywKKyB0cmFkZSBuYW1lcyBvciBsb2dvcyBvZiBEaWdpdW0sIG9yIHRoZSBuYW1lIG9mIGFueSBwcm9kdWN0IG9yIHNlcnZpY2Ugb2YKKyBEaWdpdW0sIGluIGFueSBtYW5uZXIuIElmIERpZ2l1bSBncmFudHMgeW91IGEgcmlnaHQgdG8gdXNlIHRoZSBhZm9yZW1lbnRpb25lZCwKKyB5b3Ugd2lsbCBkbyBzbyBvbmx5IGluIHN0cmljdCBjb21wbGlhbmNlIHdpdGggRGlnaXVtJ3MgdXNhZ2UgcG9saWNpZXMuCisKKyA5IFRFUk1JTkFUSU9OCisKKyA5LjEgVGhpcyBBZ3JlZW1lbnQgc2hhbGwgdGVybWluYXRlIHVwb24gcmVtb3ZhbCBvZiB0aGUgUHJvZHVjdHMgZnJvbSB5b3VyCisgc2VydmVyIGFuZCBlaXRoZXIgZGVzdHJ1Y3Rpb24gb2YgdGhlIFByb2R1Y3RzIG9yIHJldHVybiBvZiB0aGUgUHJvZHVjdHMgYnkgeW91CisgdG8gRGlnaXVtLiBJbiB0aGUgZXZlbnQgb2YgYSBicmVhY2ggb2YgdGhlIHNjb3BlIG9mIHVzZSBwZXJtaXR0ZWQgYnkgdGhlIGdyYW50CisgaW4gU2VjdGlvbiAyLCBvciBpZiB5b3UgZG8gbm90IGNvbXBseSB3aXRoIG90aGVyIG1hdGVyaWFscyB0ZXJtcyBhbmQgY29uZGl0aW9ucworIG9mIHRoaXMgQWdyZWVtZW50LCBEaWdpdW0gc2hhbGwgaGF2ZSB0aGUgcmlnaHQgdG8gaW1tZWRpYXRlbHkgdGVybWluYXRlIHRoaXMKKyBBZ3JlZW1lbnQsIGluIHdoaWNoIGNhc2UgeW91IG11c3QgcHJvbXB0bHkgcmVtb3ZlIHRoZSBTb2Z0d2FyZSBmcm9tIHlvdXIKKyBzZXJ2ZXJzIGFuZCBkZXN0cm95IG9yIHJldHVybiBhbGwgY29waWVzIHRvIERpZ2l1bS4gTm90d2l0aHN0YW5kaW5nIHRoZQorIGZvcmVnb2luZywgdGhlIHByb3Zpc2lvbnMgb2YgU2VjdGlvbnMgNSwgNiwgNywgMTAsIDExLCAxMiwgMTMgYW5kIDE0IHNoYWxsCisgc3Vydml2ZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIEFncmVlbWVudC4KKworIDEwIEVYUE9SVCBSRVNUUklDVElPTgorCisgMTAuMSBZb3UgYWNrbm93bGVkZ2UgdGhhdCB0aGUgU29mdHdhcmUsIHdpdGggdGhlIHBvc3NpYmxlIGV4Y2VwdGlvbiBvZiBjZXJ0YWluCisgdGhpcmQtcGFydHkgY29tcG9uZW50cywgaXMgb2YgVS5TLiBvcmlnaW4uIFlvdSBhZ3JlZSB0byBjb21wbHkgd2l0aCBhcHBsaWNhYmxlCisgZG9tZXN0aWMgYW5kIGludGVybmF0aW9uYWwgbGF3cyB0aGF0IGFwcGx5IHRvIHRoZSBTb2Z0d2FyZSwgaW5jbHVkaW5nIHRoZSBVLlMuCisgRXhwb3J0IEFkbWluaXN0cmF0aW9uIFJlZ3VsYXRpb25zIGFuZCBvdGhlciBsaW1pdGF0aW9ucyBpc3N1ZWQgYnkgVS5TLiBhbmQKKyBmb3JlaWduIGdvdmVybm1lbnRzLgorCisgMTEgVFJBTlNGRVIgQU5EIEFTU0lHTk1FTlQKKworIDExLjEgVGhpcyBBZ3JlZW1lbnQgYW5kIHRoZSByaWdodHMgYW5kIG9ibGlnYXRpb25zIHVuZGVyIGl0IGFyZSBub3QgYXNzaWduYWJsZQorIGJ5IHlvdSB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGFwcHJvdmFsIG9mIERpZ2l1bSwgdm9sdW50YXJpbHkgb3IgYnkKKyBvcGVyYXRpb24gb2YgbGF3LiBBbnkgYXR0ZW1wdCBieSB5b3UgdG8gYXNzaWduIHRoaXMgQWdyZWVtZW50IHdpdGhvdXQgc3VjaAorIGFwcHJvdmFsIHNoYWxsIGJlIHZvaWQuIFRoaXMgQWdyZWVtZW50IHNoYWxsIGludXJlIHRvIHRoZSBiZW5lZml0IG9mIHRoZQorIHN1Y2Nlc3NvcnMgYW5kIGFzc2lnbnMgb2YgRGlnaXVtLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZywgeW91IG1heSBtb3ZlCisgdGhlIFNvZnR3YXJlIHRvIGRpZmZlcmVudCBpbnRlcm5hbCBjb21wdXRlcnMgdG8gdGhlIGV4dGVudCBjb25zaXN0ZW50IHdpdGggdGhlCisgc2NvcGUgb2YgbGljZW5zZSB5b3UgaGF2ZSBwdXJjaGFzZWQgdG8gdGhlIFNvZnR3YXJlLgorCisgMTIgVS5TLiBHT1ZFUk5NRU5UIFVTRVJTCisKKyAxMi4xIFRoZSBTb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiBxdWFsaWZ5IGFzICJjb21tZXJjaWFsIGl0ZW1zIiBhcyBkZWZpbmVkIGF0CisgNDggQy5GLlIuIDIuMTAxIGFuZCA0OCBDLkYuUi4gMTIuMjEyLiBBbGwgR292ZXJubWVudCB1c2VycyBhY3F1aXJlIHRoZSBTb2Z0d2FyZQorIGFuZCBkb2N1bWVudGF0aW9uIHdpdGggb25seSB0aG9zZSByaWdodHMgaGVyZWluIHRoYXQgYXBwbHkgdG8gbm9uLWdvdmVybm1lbnRhbAorIGN1c3RvbWVycyBvZiBEaWdpdW0uCisKKyAxMyBHT1ZFUk5JTkcgTEFXIEFORCBKVVJJU0RJQ1RJT04KKworIDEzLjEgVGhpcyBBZ3JlZW1lbnQgaXMgdG8gYmUgY29uc3RydWVkIGluIGFjY29yZGFuY2Ugd2l0aCBhbmQgZ292ZXJuZWQgYnkgbGF3cworIG9mIHRoZSBTdGF0ZSBvZiBBbGFiYW1hLCBleGNsdWRpbmcgaXRzIGNvbmZsaWN0IG9mIGxhdyBwcm92aXNpb25zLiBEaWdpdW0gYW5kCisgeW91IGFncmVlIHRvIHN1Ym1pdCB0byB0aGUgcGVyc29uYWwgYW5kIGV4Y2x1c2l2ZSBqdXJpc2RpY3Rpb24gb2YsIGFuZCBhZ3JlZQorIHRoYXQgdmVudWUgaXMgcHJvcGVyIGluLCB0aGUgQWxhYmFtYSBTdGF0ZSBvciBGZWRlcmFsIENvdXJ0cyBsb2NhdGVkIGluIHRoZQorIENvdW50eSBvZiBKZWZmZXJzb24sIEFsYWJhbWEsIGZvciBhbnkgc3VjaCBsZWdhbCBhY3Rpb24gb3IgcHJvY2VlZGluZy4gVGhlCisgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMsIHRoZSBhcHBsaWNhdGlvbiBvZgorIHdoaWNoIGlzIGV4cHJlc3NseSBleGNsdWRlZCwgZG9lcyBub3QgZ292ZXJuIHRoaXMgQWdyZWVtZW50LgorCisgMTQgRU5USVJFIEFHUkVFTUVOVAorCisgMTQuMSBUaGlzIEFncmVlbWVudCBjb25zdGl0dXRlcyB0aGUgZW50aXJlIHVuZGVyc3RhbmRpbmcgYmV0d2VlbiB0aGUgcGFydGllcworIHJlbGF0aW5nIHRvIHRoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YgYW5kIHN1cGVyc2VkZSBhbGwgcHJpb3Igd3JpdGluZ3MsCisgbmVnb3RpYXRpb25zIG9yIHVuZGVyc3RhbmRpbmdzIHdpdGggcmVzcGVjdCB0aGVyZXRvLiBUaGUgcHJvdmlzaW9ucyBvZiB0aGlzCisgQWdyZWVtZW50IHNoYWxsIHRha2UgcHJlY2VkZW5jZSBvdmVyIGFueSBjb25mbGljdGluZyB0ZXJtcyBpbiBhbnkgc3Vic2VxdWVudAorIHB1cmNoYXNlIG9yZGVyLCBkb2N1bWVudGF0aW9uIG9yIGNvbGxhdGVyYWwuIEFueSBtb2RpZmljYXRpb25zIHRvIHRoaXMKKyBBZ3JlZW1lbnQgc2hhbGwgYmUgcmVmbGVjdGVkIGluIGEgd3JpdHRlbiBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcy4gVGhlCisgcGFydGllcyBhZ3JlZSB0aGF0IHRoaXMgQWdyZWVtZW50IG1heSBiZSBleGVjdXRlZCBlbGVjdHJvbmljYWxseSBhbmQgdGhhdAorIGVsZWN0cm9uaWMgY29waWVzIG9mIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGJpbmRpbmcgdXBvbiB0aGUgcGFydGllcy4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0VBUEwgYi9saWNlbnNlcy9FQVBMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NjM2NDUKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9FQVBMCkBAIC0wLDAgKzEsNzEgQEAKKworICAgICAgICAgICAgICAgICAgICAgRVBTT04gQVZBU1lTIFBVQkxJQyBMSUNFTlNFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyMDA1LTA0LTAxCisKKyAgVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayBpZGVudGlmaWVkIGFzIHN1Y2gKKyAgYXQgdGhlIHBvaW50IG9mIGRpc3RyaWJ1dGlvbiBhbmQvb3IgaW4gYSBzdWl0YWJsZSBsb2NhdGlvbiBpbiB0aGUKKyAgc291cmNlcyBmb3IgYSB3b3JrIGluY2x1ZGluZyBpdCwgZm9yIGV4YW1wbGUgaW4gYSBSRUFETUUgZmlsZS4gIFN1Y2gKKyAgc291cmNlcyBzaG91bGQgaW5jbHVkZSBhIHZlcmJhdGltIGNvcHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIFRoZSAiUHJvZ3JhbSIsIGJlbG93LCByZWZlcnMgdG8gYW55IHByb2dyYW0gb3Igd29yayBjb3ZlcmVkIGJ5IHRoaXMKKyAgTGljZW5zZTsgZWFjaCAiTGljZW5zZWUiIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKworICBZb3UgbWF5IHVzZSwgcmVwcm9kdWNlLCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gc3ViamVjdCB0bworICB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgYmVsb3cuCisKKworICAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDEuIENvcHlyaWdodCBvZiB0aGUgUHJvZ3JhbSBpcyByZXNlcnZlZCBieSBFUFNPTiBBVkFTWVMgQ29ycG9yYXRpb24KKyAgICAgYW5kIGl0cyBMaWNlbnNvcihzKS4KKworICAyLiBZb3UgbWF5IGZyZWVseSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZQorICAgICBQcm9ncmFtIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgcmVjaXBpZW50cyBvZiBzdWNoIGNvcGllcworICAgICBhcmUgZ2l2ZW4gYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gIFZlcmJhdGltIGNvcGllcyBhcmUgY292ZXJlZAorICAgICBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgbW9kaWZ5IHRoZSBQcm9ncmFtIGFuZCBmcmVlbHkgZGlzdHJpYnV0ZSB5b3VyIG1vZGlmaWVkCisgICAgIHZlcnNpb24ocyksIHByb3ZpZGVkIHRoYXQgeW91IGRpc3RyaWJ1dGUgaXQgdW5kZXIgdGhlIHRlcm1zIG9mCisgICAgIHRoaXMgTGljZW5zZS4gIFJlY2lwaWVudHMgb2YgYW55IG1vZGlmaWVkIHZlcnNpb24ocykgc2hvdWxkIGJlCisgICAgIHByb3ZpZGVkIHdpdGggYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4KKworICA0LiBZb3Ugc2hhbGwgdHJlYXQgdGhvc2UgcGFydHMgb2YgdGhlIFByb2dyYW0gdGhhdCB3ZXJlIHByb3ZpZGVkCisgICAgIHRvIHlvdSBpbiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIG9ubHkgYXMgdGhlIHByb3ByaWV0YXJ5CisgICAgIGFuZCBjb25maWRlbnRpYWwgaW5mb3JtYXRpb24gb2YgRVBTT04gQVZBU1lTIENvcnBvcmF0aW9uIGFuZCBpdHMKKyAgICAgTGljZW5zb3IocykuCisKKyAgNS4gWW91IG1heSBuZWl0aGVyIHJldmVyc2UgZW5naW5lZXIsIHJldmVyc2UgY29tcGlsZSwgcmV2ZXJzZQorICAgICBhc3NlbWJsZSBub3Igb3RoZXJ3aXNlIGF0dGVtcHQgdG8gYW5hbHlzZSB0aG9zZSBwYXJ0cyBvZiB0aGUKKyAgICAgUHJvZ3JhbSB0aGF0IHdlcmUgcHJvdmlkZWQgdG8geW91IGluIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUKKyAgICAgb25seS4gIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24gRVBTT04gQVZBU1lTIENvcnBvcmF0aW9uCisgICAgIGFuZCBpdHMgTGljZW5zb3IocykgZ2l2ZSBwZXJtaXNzaW9uIHRvIHJldmVyc2UgZW5naW5lZXIgdGhlCisgICAgIFByb2dyYW0gaW4gdGhvc2UgY2FzZXMsIGFuZCBvbmx5IHRob3NlIGNhc2VzLCB3aGVyZSB0aGlzIGlzCisgICAgIHJlcXVpcmVkIGJ5IHRoZSB0ZXJtcyBzdGlwdWxhdGVkIGluIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsCisgICAgIFB1YmxpYyBMaWNlbnNlIG9yIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYm90aCBhcworICAgICBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZgorICAgICB0aGUgZm9ybWVyIGxpY2Vuc2UsIHZlcnNpb24gMi4xIG9mIHRoZSBsYXR0ZXIgbGljZW5zZSwgb3IgKGF0CisgICAgIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICA2LiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTworICAgICBXQVJSQU5UWSBGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUKKyAgICAgTEFXLiAgRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HLCBUSEUgQ09QWVJJR0hUCisgICAgIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQKKyAgICAgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQKKyAgICAgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORAorICAgICBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUKKyAgICAgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCisgICAgIFBST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkKKyAgICAgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICA3LiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOCisgICAgIFdSSVRJTkcgV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkKKyAgICAgTU9ESUZZIEFORC9PUiBSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRQorICAgICBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsCisgICAgIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT1IKKyAgICAgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBMT1NTCisgICAgIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKKyAgICAgWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSAorICAgICBBTlkgT1RIRVIgUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOCisgICAgIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworICAgICAgICAgICAgICAgICAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCmRpZmYgLS1naXQgYS9saWNlbnNlcy9FQ1dQTCBiL2xpY2Vuc2VzL0VDV1BMCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjgyNTE1M2UKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9FQ1dQTApAQCAtMCwwICsxLDM3IEBACitFQ1cgSlBFRyAyMDAwIFNESyBQVUJMSUMgVVNFIExJQ0VOU0UgQUdSRUVNRU5UCitJTVBPUlRBTlQtUkVBRCBDQVJFRlVMTFk6IFRoaXMgRWFydGggUmVzb3VyY2UgTWFwcGluZyBMaW1pdGVkICgiRVJNIikgRW5kLVVzZXIgTGljZW5zZSBBZ3JlZW1lbnQgKCJFVUxBIikgaXMgYSBsZWdhbCBhZ3JlZW1lbnQgYmV0d2VlbiB5b3UgKGVpdGhlciBhbiBpbmRpdmlkdWFsIG9yIGEgc2luZ2xlIGVudGl0eSkgYW5kIEVSTSBmb3IgdGhlIEVSTSBFQ1cgSlBFRyAyMDAwIFNESyBzb2Z0d2FyZSBwcm9kdWN0IHVuZGVyIHRoaXMgUHVibGljIFVzZSBMaWNlbnNlIEFncmVlbWVudCwgd2hpY2ggaW5jbHVkZXMgY29tcHV0ZXIgc29mdHdhcmUgYW5kIG1heSBpbmNsdWRlIGFzc29jaWF0ZWQgbWVkaWEsICBwcmludGVkIG1hdGVyaWFscywgYW5kICJvbmxpbmUiIG9yIGVsZWN0cm9uaWMgZG9jdW1lbnRhdGlvbiAoIlNPRlRXQVJFIFBST0RVQ1QiKS4gVGhlIFNPRlRXQVJFIFBST0RVQ1QgYWxzbyBpbmNsdWRlcyBhbnkgdXBkYXRlcyBhbmQgc3VwcGxlbWVudHMgdG8gdGhlIG9yaWdpbmFsIFNPRlRXQVJFIFBST0RVQ1QgcHJvdmlkZWQgdG8geW91IGJ5IEVSTS4gIEFueSBzb2Z0d2FyZSBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBTT0ZUV0FSRSBQUk9EVUNUIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgc2VwYXJhdGUgZW5kLXVzZXIgbGljZW5zZSBhZ3JlZW1lbnQgaXMgbGljZW5zZWQgdG8geW91IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IGxpY2Vuc2UgYWdyZWVtZW50LiBCeSBpbnN0YWxsaW5nLCBjb3B5aW5nLCBkb3dubG9hZGluZywgYWNjZXNzaW5nIG9yIG90aGVyd2lzZSB1c2luZyB0aGUgU09GVFdBUkUgUFJPRFVDVCwgeW91IGFncmVlIHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIEVVTEEuIElmIHlvdSBkbyBub3QgYWdyZWUgdG8gdGhlIHRlcm1zIG9mIHRoaXMgRVVMQSwgZG8gbm90IGluc3RhbGwgb3IgdXNlIHRoZSBTT0ZUV0FSRSBQUk9EVUNULgorVGhlIGludGVudCBvZiB0aGlzIGxpY2Vuc2UgaXMgdG8gZXN0YWJsaXNoIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSB0aGUgc29mdHdhcmUgcmVndWxhdGVkIGJ5IHRoaXMgbGljZW5zZSB1bmRlciB0aGUgb3BlbiBzb3VyY2UgbW9kZWwgYW5kIGlzIGFwcGxpY2FibGUgdG8gdGhlIHVzZSBvZiB0aGUgRUNXIEpQRUcgMjAwMCBTREsgd2l0aCBVbmxpbWl0ZWQgRGVjb21wcmVzc2luZyBhbmQgVW5saW1pdGVkIENvbXByZXNzaW9uIGZvciBhcHBsaWNhdGlvbnMgbGljZW5zZWQgdW5kZXIgYSBHTlUgR2VuZXJhbCBQdWJsaWMgc3R5bGUgbGljZW5zZSAoIkdQTCIpIGFzIHNldCBvdXQgYmVsb3cuIAorVGhpcyBsaWNlbnNlIGFwcGxpZXMgdG8gYW55IHVzZSBvZiB0aGUgU29mdHdhcmUgUHJvZHVjdCBzb2xlbHkgaW50ZW5kZWQgdG8gZGV2ZWxvcCBvciBiZSBkaXN0cmlidXRlZCB3aXRoIHByb2R1Y3RzIHRoYXQgYXJlIGxpY2Vuc2VkIHVuZGVyIGEgbGljZW5zZSBzaW1pbGFyIHRvIGEgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIGFuZCBhdCBubyBjaGFyZ2UgdG8gdGhlIHB1YmxpYy4gIFRoaXMgbGljZW5zZSBjb3ZlcnMgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFNvZnR3YXJlLCB1c2Ugb2YgdGhpcmQtcGFydHkgYXBwbGljYXRpb24gcHJvZ3JhbXMgYmFzZWQgb24gdGhlIFNvZnR3YXJlLCBhbmQgZGV2ZWxvcG1lbnQgb2YgZnJlZSBzb2Z0d2FyZSB0aGF0IHVzZXMgdGhlIFNvZnR3YXJlLiAKK1RoZSBTb2Z0d2FyZSBQcm9kdWN0IGlzIHByb3RlY3RlZCBieSBwYXRlbnRzLCBjb3B5cmlnaHQgbGF3cyBhbmQgaW50ZXJuYXRpb25hbCBjb3B5cmlnaHQgdHJlYXRpZXMsIGFzIHdlbGwgYXMgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3MgYW5kIHRyZWF0aWVzLiBUaGUgU29mdHdhcmUgUHJvZHVjdCBpcyBsaWNlbnNlZCwgbm90IHNvbGQuIFJpZ2h0cyB0byB1c2UgcGF0ZW50cywgaW5jbHVkaW5nIEVSTSdzIGxhcmdlIERXVCBhbmQgc3RyZWFtaW5nIGltYWdlcnkgcGF0ZW50cywgYXJlIGdpdmVuIG9ubHkgZm9yIHVzZSB3aXRoIHRoZSBFQ1cgSlBFRyAyMDAwIFNESyBhbmQgbm90IGZvciBvdGhlciB1c2VzLgorR3JhbnRlZCBSaWdodHMKKzEpIEdSQU5UIE9GIExJQ0VOU0UuIFRoaXMgRVVMQSBncmFudHMgeW91IHRoZSBmb2xsb3dpbmcgbGltaXRlZCwgbm9uLWV4Y2x1c2l2ZSByaWdodHMsIHByb3ZpZGVkIHlvdSBhZ3JlZSB0byBhbmQgY29tcGx5IHdpdGggYW55IGFuZCBhbGwgY29uZGl0aW9ucyBpbiB0aGlzIGxpY2Vuc2UuIFdob2xlIG9yIHBhcnRpYWwgZGlzdHJpYnV0aW9uIG9mIHRoZSBTb2Z0d2FyZSwgb3Igc29mdHdhcmUgaXRlbXMgdGhhdCBsaW5rIHdpdGggdGhlIFNvZnR3YXJlLCBpbiBhbnkgZm9ybSBzaWduaWZpZXMgYWNjZXB0YW5jZSBvZiB0aGlzIGxpY2Vuc2UuIAorYSkgWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBpbiB1bm1vZGlmaWVkIGZvcm0gcHJvdmlkZWQgdGhhdCB0aGUgZW50aXJlIHBhY2thZ2UsIGluY2x1ZGluZyAtIGJ1dCBub3QgcmVzdHJpY3RlZCB0byAtIGNvcHlyaWdodCwgdHJhZGVtYXJrIG5vdGljZXMgYW5kIGRpc2NsYWltZXJzLCBhcyByZWxlYXNlZCBieSB0aGUgaW5pdGlhbCBkZXZlbG9wZXIgb2YgdGhlIFNvZnR3YXJlLCBpcyBkaXN0cmlidXRlZC4gCitiKSBZb3UgbWF5IG1ha2UgbW9kaWZpY2F0aW9ucyB0byB0aGUgU29mdHdhcmUgYW5kIGRpc3RyaWJ1dGUgeW91ciBtb2RpZmljYXRpb25zLCBpbiBhIGZvcm0gdGhhdCBpcyBzZXBhcmF0ZSBmcm9tIHRoZSBTb2Z0d2FyZSwgc3VjaCBhcyBwYXRjaGVzLiBUaGUgZm9sbG93aW5nIHJlc3RyaWN0aW9ucyBhcHBseSB0byBtb2RpZmljYXRpb25zOiAKK2kpIE1vZGlmaWNhdGlvbnMgbXVzdCBub3QgYWx0ZXIgb3IgcmVtb3ZlIGFueSBjb3B5cmlnaHQgbm90aWNlcyBpbiB0aGUgU29mdHdhcmUuIAoraWkpIFdoZW4gbW9kaWZpY2F0aW9ucyB0byB0aGUgU29mdHdhcmUgYXJlIHJlbGVhc2VkIHVuZGVyIHRoaXMgbGljZW5zZSwgYSBub24tZXhjbHVzaXZlIHJveWFsdHktZnJlZSByaWdodCBpcyBncmFudGVkIHRvIHRoZSBpbml0aWFsIGRldmVsb3BlciBvZiB0aGUgU29mdHdhcmUgdG8gZGlzdHJpYnV0ZSB5b3VyIG1vZGlmaWNhdGlvbiBpbiBmdXR1cmUgdmVyc2lvbnMgb2YgdGhlIFNvZnR3YXJlIHByb3ZpZGVkIHN1Y2ggdmVyc2lvbnMgcmVtYWluIGF2YWlsYWJsZSB1bmRlciB0aGVzZSB0ZXJtcyBpbiBhZGRpdGlvbiB0byBhbnkgb3RoZXIgbGljZW5zZShzKSBvZiB0aGUgaW5pdGlhbCBkZXZlbG9wZXIuIAoraWlpKSBZb3UgYXJlIG5vdCBwZXJtaXR0ZWQgdG8gY2hhbmdlIHRoZSBFQ1cgZmlsZSBmb3JtYXQuCitjKSBZb3UgbWF5IGRpc3RyaWJ1dGUgbWFjaGluZS1leGVjdXRhYmxlIGZvcm1zIG9mIHRoZSBTb2Z0d2FyZSBvciBtYWNoaW5lLWV4ZWN1dGFibGUgZm9ybXMgb2YgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhlIFNvZnR3YXJlLCBwcm92aWRlZCB0aGF0IHlvdSBtZWV0IHRoZXNlIHJlc3RyaWN0aW9uczogCitpKSBZb3UgbXVzdCBpbmNsdWRlIHRoaXMgbGljZW5zZSBkb2N1bWVudCBpbiB0aGUgZGlzdHJpYnV0aW9uLiAKK2lpKSBZb3UgbXVzdCBlbnN1cmUgdGhhdCBhbGwgcmVjaXBpZW50cyBvZiB0aGUgbWFjaGluZS1leGVjdXRhYmxlIGZvcm1zIGFyZSBhbHNvIGFibGUgdG8gcmVjZWl2ZSB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSB0byB0aGUgZGlzdHJpYnV0ZWQgU29mdHdhcmUsIGluY2x1ZGluZyBhbGwgbW9kaWZpY2F0aW9ucywgd2l0aG91dCBhbnkgY2hhcmdlIGJleW9uZCB0aGUgY29zdHMgb2YgZGF0YSB0cmFuc2ZlciwgYW5kIHBsYWNlIHByb21pbmVudCBub3RpY2VzIGluIHRoZSBkaXN0cmlidXRpb24gZXhwbGFpbmluZyB0aGlzLiAKK2lpaSkgWW91IG11c3QgZW5zdXJlIHRoYXQgYWxsIG1vZGlmaWNhdGlvbnMgaW5jbHVkZWQgaW4gdGhlIG1hY2hpbmUtZXhlY3V0YWJsZSBmb3JtcyBhcmUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UuIAorZCkgWW91IG1heSB1c2UgdGhlIG9yaWdpbmFsIG9yIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoZSBTb2Z0d2FyZSB0byBjb21waWxlLCBsaW5rIGFuZCBydW4gYXBwbGljYXRpb24gcHJvZ3JhbXMgbGVnYWxseSBkZXZlbG9wZWQgYnkgeW91IG9yIGJ5IG90aGVycy4gCitlKSBZb3UgbWF5IGRldmVsb3AgYXBwbGljYXRpb24gcHJvZ3JhbXMsIHJldXNhYmxlIGNvbXBvbmVudHMgYW5kIG90aGVyIHNvZnR3YXJlIGl0ZW1zIHRoYXQgbGluayB3aXRoIHRoZSBvcmlnaW5hbCBvciBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgU29mdHdhcmUuIFRoZXNlIGl0ZW1zLCB3aGVuIGRpc3RyaWJ1dGVkLCBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlcXVpcmVtZW50czogCitpKSBZb3UgbXVzdCBlbnN1cmUgdGhhdCBhbGwgcmVjaXBpZW50cyBvZiBtYWNoaW5lLWV4ZWN1dGFibGUgZm9ybXMgb2YgdGhlc2UgaXRlbXMgYXJlIGFsc28gYWJsZSB0byByZWNlaXZlIGFuZCB1c2UgdGhlIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUgdG8gdGhlIGl0ZW1zIHdpdGhvdXQgYW55IGNoYXJnZSBiZXlvbmQgdGhlIGNvc3RzIG9mIGRhdGEgdHJhbnNmZXIuIAoraWkpIFlvdSBtdXN0IGV4cGxpY2l0bHkgbGljZW5zZSBhbGwgcmVjaXBpZW50cyBvZiB5b3VyIGl0ZW1zIHRvIHVzZSBhbmQgcmUtZGlzdHJpYnV0ZSBvcmlnaW5hbCBhbmQgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhlIGl0ZW1zIGluIGJvdGggbWFjaGluZS1leGVjdXRhYmxlIGFuZCBzb3VyY2UgY29kZSBmb3Jtcy4gVGhlIHJlY2lwaWVudHMgbXVzdCBiZSBhYmxlIHRvIGRvIHNvIHdpdGhvdXQgYW55IGNoYXJnZXMgd2hhdHNvZXZlciwgYW5kIHRoZXkgbXVzdCBiZSBhYmxlIHRvIHJlLWRpc3RyaWJ1dGUgdG8gYW55b25lIHRoZXkgY2hvb3NlLiAKK2lpaSkgSWYgdGhlIGl0ZW1zIGFyZSBub3QgYXZhaWxhYmxlIHRvIHRoZSBnZW5lcmFsIHB1YmxpYywgYW5kIHRoZSBpbml0aWFsIGRldmVsb3BlciBvZiB0aGUgU29mdHdhcmUgcmVxdWVzdHMgYSBjb3B5IG9mIHRoZSBpdGVtcywgdGhlbiB5b3UgbXVzdCBzdXBwbHkgb25lLiAKKworMikgU1VQUE9SVCBBTkQgVVBEQVRFUy4KK0xpY2Vuc2VlIGlzIG9wdGlvbmFsbHkgZW50aXRsZWQgdG8gam9pbiB0aGUgRVJNIERldmVsb3BlciBOZXR3b3JrIGZvciBhIGZlZS4gIE90aGVyIHRoYW4gdGhpcyBzZXJ2aWNlLCBFUk0gcHJvdmlkZXMgbm8gdGVjaG5pY2FsIHN1cHBvcnQgYXMgcGFydCBvZiB0aGlzIGxpY2Vuc2UuCisKKzMpIFUuUy4gR09WRVJOTUVOVCBSRVNUUklDVEVEIFJJR0hUUy4gCitUaGUgU09GVFdBUkUgUFJPRFVDVCBhbmQgZG9jdW1lbnRhdGlvbiBhcmUgcHJvdmlkZWQgd2l0aCBSRVNUUklDVEVEIFJJR0hUUy4gVXNlLCBkdXBsaWNhdGlvbiwgb3IgZGlzY2xvc3VyZSBieSB0aGUgVVMgR292ZXJubWVudCBpcyBzdWJqZWN0IHRvIHJlc3RyaWN0aW9ucyBhcyBzZXQgZm9ydGggaW4gc3VicGFyYWdyYXBoIChjKSgxKShpaSkgb2YgVGhlIFJpZ2h0cyBpbiBUZWNobmljYWwgRGF0YSBhbmQgQ29tcHV0ZXIgU29mdHdhcmUgY2xhdXNlIGF0IERGQVJTIDI1Mi4yMjctNzAxMyBvciBzdWJwYXJhZ3JhcGhzIChjKSgxKSBhbmQgKDIpIG9mIHRoZSBDb21tZXJjaWFsIENvbXB1dGVyIFNvZnR3YXJlIC0gUmVzdHJpY3RlZCBSaWdodHMgYXQgNDggQ0ZSIDUyLjIyNy0xOSwgYXMgYXBwbGljYWJsZS4gTWFudWZhY3R1cmVyIGlzIEVhcnRoIFJlc291cmNlIE1hcHBpbmcgTGltaXRlZC4KKworNCkgREVTQ1JJUFRJT04gT0YgT1RIRVIgUklHSFRTIEFORCBMSU1JVEFUSU9OUy4gCithKSBSZW50YWwuIFlvdSBtYXkgbm90IHJlbnQsIGxlYXNlIG9yIGxlbmQgdGhlIFNPRlRXQVJFIFBST0RVQ1QuIAorYikgU29mdHdhcmUgVHJhbnNmZXIuIFlvdSBtYXkgcGVybWFuZW50bHkgdHJhbnNmZXIgYWxsIG9mIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgRVVMQSwgcHJvdmlkZWQgeW91IHJldGFpbiBubyBjb3BpZXMsIHlvdSB0cmFuc2ZlciBhbGwgb2YgdGhlIFNPRlRXQVJFIFBST0RVQ1QgKGluY2x1ZGluZyBhbGwgY29tcG9uZW50IHBhcnRzLCB0aGUgbWVkaWEgYW5kIHByaW50ZWQgbWF0ZXJpYWxzLCBhbnkgdXBncmFkZXMsIHRoaXMgRVVMQSwgYW5kLCBpZiBhcHBsaWNhYmxlLCB0aGUgQ2VydGlmaWNhdGUgb2YgQXV0aGVudGljaXR5KSwgYW5kIHRoZSByZWNpcGllbnQgYWdyZWVzIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEVVTEEuIElmIHRoZSBTT0ZUV0FSRSBQUk9EVUNUIGlzIGFuIHVwZ3JhZGUsIGFueSB0cmFuc2ZlciBtdXN0IGluY2x1ZGUgYWxsIHByaW9yIHZlcnNpb25zIG9mIHRoZSBTT0ZUV0FSRSBQUk9EVUNULgorYykgVGVybWluYXRpb24uIFdpdGhvdXQgcHJlanVkaWNlIHRvIGFueSBvdGhlciByaWdodHMsIEVSTSBtYXkgdGVybWluYXRlIHRoaXMgRVVMQSBpZiB5b3UgZmFpbCB0byBjb21wbHkgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBFVUxBLiBJbiBzdWNoIGV2ZW50LCB5b3UgbXVzdCBkZXN0cm95IGFsbCBjb3BpZXMgb2YgdGhlIFNPRlRXQVJFIFBST0RVQ1QgYW5kIGFsbCBvZiBpdHMgY29tcG9uZW50IHBhcnRzLiAKK2QpIE5vIFdhcnJhbnRpZXMuIEVSTSBFWFBSRVNTTFkgRElTQ0xBSU1TIEFOWSBXQVJSQU5UWSBGT1IgVEhFIFNPRlRXQVJFICBQUk9EVUNULiBUSEUgU09GVFdBUkUgUFJPRFVDVCBBTkQgQU5ZIFJFTEFURUQgRE9DVU1FTlRBVElPTiBJUyBQUk9WSURFRCAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SIE5PTklORlJJTkdFTUVOVC4gVEhFIEVOVElSRSBSSVNLICBBUklTSU5HIE9VVCBPRiBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhFIFNPRlRXQVJFIFBST0RVQ1QgUkVNQUlOUyBXSVRIIFlPVS4gCitlKSBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gVE8gVEhFIE1BWElNVU0gRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFICBMQVcsIElOIE5PIEVWRU5UIFNIQUxMIEVSTSBPUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgV0hBVFNPRVZFUiAoSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgQlVTSU5FU1MgUFJPRklUUywgQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBMT1NTIE9GIEJVU0lORVNTIElORk9STUFUSU9OLCBPUiBBTlkgT1RIRVIgUEVDVU5JQVJZIExPU1MpIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT0YgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgU09GVFdBUkUgUFJPRFVDVCBPUiBUSEUgUFJPVklTSU9OIE9GIE9SIEZBSUxVUkUgVE8gUFJPVklERSBTVVBQT1JUIFNFUlZJQ0VTLCBFVkVOIElGIEVSTSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIElOIEFOWSBDQVNFLCBFUk0nUyBFTlRJUkUgTElBQklMSVRZIFVOREVSIEFOWSBQUk9WSVNJT04gT0YgVEhJUyBFVUxBIFNIQUxMIEJFIExJTUlURUQgVE8gVEhFIEdSRUFURVIgT0YgVEhFIEFNT1VOVCBBQ1RVQUxMWSBQQUlEIEJZIFlPVSBGT1IgVEhFIFNPRlRXQVJFIFBST0RVQ1QgT1IgVVMkNS4wMDsgUFJPVklERUQgSE9XRVZFUiwgSUYgWU9VIEhBVkUgRU5URVJFRCBJTlRPIEEgRVJNIFNVUFBPUlQgU0VSVklDRVMgQUdSRUVNRU5ULCBFUk0nUyBFTlRJUkUgTElBQklMSVRZIFJFR0FSRElORyBTVVBQT1JUIFNFUlZJQ0VTIFNIQUxMIEJFIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBPRiBUSEFUIEFHUkVFTUVOVC4gQkVDQVVTRSBTT01FIFNUQVRFUyBBTkQgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSwgVEhFIEFCT1ZFIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCitmKSBUaGlzIEFncmVlbWVudCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB3cml0aW5nIHNpZ25lZCBieSBhdXRob3JpemVkIHJlcHJlc2VudGF0aXZlcyBvZiBFUk0uIEFsbCB0ZXJtcyBvZiBhbnkgcHVyY2hhc2Ugb3JkZXIgb3Igb3RoZXIgb3JkZXJpbmcgZG9jdW1lbnQgc2hhbGwgYmUgc3VwZXJzZWRlZCBieSB0aGlzIEFncmVlbWVudC4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGUgQWdyZWVtZW50IGlzIGZvdW5kIHZvaWQgb3IgdW5lbmZvcmNlYWJsZSwgdGhlIHJlbWFpbmRlciB3aWxsIHJlbWFpbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUgYWNjb3JkaW5nIHRvIGl0cyB0ZXJtcy4gSWYgYW55IHJlbWVkeSBwcm92aWRlZCBpcyBkZXRlcm1pbmVkIHRvIGhhdmUgZmFpbGVkIGZvciBpdHMgZXNzZW50aWFsIHB1cnBvc2UsIGFsbCBsaW1pdGF0aW9ucyBvZiBsaWFiaWxpdHkgYW5kIGV4Y2x1c2lvbnMgb2YgZGFtYWdlcyBzZXQgZm9ydGggaW4gdGhpcyBBZ3JlZW1lbnQgc2hhbGwgcmVtYWluIGluIGVmZmVjdC4KK2cpIFRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGNvbnN0cnVlZCwgaW50ZXJwcmV0ZWQgYW5kIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIFdlc3Rlcm4gQXVzdHJhbGlhLiAKK2gpIEVSTSByZXNlcnZlcyBhbGwgcmlnaHRzIG5vdCBzcGVjaWZpY2FsbHkgZ3JhbnRlZCBpbiB0aGlzIEFncmVlbWVudC4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0VQTC0xLjAgYi9saWNlbnNlcy9FUEwtMS4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhNjIyYjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9FUEwtMS4wCkBAIC0wLDAgKzEsODkgQEAKK0VjbGlwc2UgUHVibGljIExpY2Vuc2UgLSB2IDEuMAorCitUSEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgRUNMSVBTRSBQVUJMSUMgTElDRU5TRSAoIkFHUkVFTUVOVCIpLiBBTlkgVVNFLCBSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIENPTlNUSVRVVEVTIFJFQ0lQSUVOVCdTIEFDQ0VQVEFOQ0UgT0YgVEhJUyBBR1JFRU1FTlQuCisKKzEuIERFRklOSVRJT05TCisKKyJDb250cmlidXRpb24iIG1lYW5zOgorCithKSBpbiB0aGUgY2FzZSBvZiB0aGUgaW5pdGlhbCBDb250cmlidXRvciwgdGhlIGluaXRpYWwgY29kZSBhbmQgZG9jdW1lbnRhdGlvbiBkaXN0cmlidXRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgYW5kCitiKSBpbiB0aGUgY2FzZSBvZiBlYWNoIHN1YnNlcXVlbnQgQ29udHJpYnV0b3I6CisKK2kpIGNoYW5nZXMgdG8gdGhlIFByb2dyYW0sIGFuZAorCitpaSkgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOworCit3aGVyZSBzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQgYXJlIGRpc3RyaWJ1dGVkIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24gJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvciBpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbiBzdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLiBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSB3aGljaDogKGkpIGFyZSBzZXBhcmF0ZSBtb2R1bGVzIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBhbmQgKGlpKSBhcmUgbm90IGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFByb2dyYW0uCisKKyJDb250cmlidXRvciIgbWVhbnMgYW55IHBlcnNvbiBvciBlbnRpdHkgdGhhdCBkaXN0cmlidXRlcyB0aGUgUHJvZ3JhbS4KKworIkxpY2Vuc2VkIFBhdGVudHMgIiBtZWFuIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSBhIENvbnRyaWJ1dG9yIHdoaWNoIGFyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZSBvciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBQcm9ncmFtLgorCisiUHJvZ3JhbSIgbWVhbnMgdGhlIENvbnRyaWJ1dGlvbnMgZGlzdHJpYnV0ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50LgorCisiUmVjaXBpZW50IiBtZWFucyBhbnlvbmUgd2hvIHJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy4KKworMi4gR1JBTlQgT0YgUklHSFRTCisKK2EpIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZSBmb3JtLgorCitiKSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIHBhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkIGJ5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoIGNvbWJpbmF0aW9uIHRvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8gYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZSBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuCisKK2MpIFJlY2lwaWVudCB1bmRlcnN0YW5kcyB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byBpdHMgQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IgdGhhdCB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBpbmZyaW5nZSB0aGUgcGF0ZW50IG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2YgYW55IG90aGVyIGVudGl0eS4gRWFjaCBDb250cmlidXRvciBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQgZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBlbnRpdHkgYmFzZWQgb24gaW5mcmluZ2VtZW50IG9mIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3Igb3RoZXJ3aXNlLiBBcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kIGxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5IHRvIHNlY3VyZSBhbnkgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBuZWVkZWQsIGlmIGFueS4gRm9yIGV4YW1wbGUsIGlmIGEgdGhpcmQgcGFydHkgcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlIGJlZm9yZSBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0uCisKK2QpIEVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0IHJpZ2h0cyBpbiBpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIHRvIGdyYW50IHRoZSBjb3B5cmlnaHQgbGljZW5zZSBzZXQgZm9ydGggaW4gdGhpcyBBZ3JlZW1lbnQuCisKKzMuIFJFUVVJUkVNRU5UUworCitBIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIGl0cyBvd24gbGljZW5zZSBhZ3JlZW1lbnQsIHByb3ZpZGVkIHRoYXQ6CisKK2EpIGl0IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OyBhbmQKKworYikgaXRzIGxpY2Vuc2UgYWdyZWVtZW50OgorCitpKSBlZmZlY3RpdmVseSBkaXNjbGFpbXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kIGNvbmRpdGlvbnMsIGV4cHJlc3MgYW5kIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUgYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOworCitpaSkgZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaCBhcyBsb3N0IHByb2ZpdHM7CisKK2lpaSkgc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgdGhhdCBDb250cmlidXRvciBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kCisKK2l2KSBzdGF0ZXMgdGhhdCBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2dyYW0gaXMgYXZhaWxhYmxlIGZyb20gc3VjaCBDb250cmlidXRvciwgYW5kIGluZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlIG1hbm5lciBvbiBvciB0aHJvdWdoIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLgorCitXaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZSBjb2RlIGZvcm06CisKK2EpIGl0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZAorCitiKSBhIGNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4KKworQ29udHJpYnV0b3JzIG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueSBjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBQcm9ncmFtLgorCitFYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZSBvcmlnaW5hdG9yIG9mIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cyBzdWJzZXF1ZW50IFJlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4KKworNC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT04KKworQ29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5IGFjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMgYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzIGxpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZmFjaWxpdGF0ZSB0aGUgY29tbWVyY2lhbCB1c2Ugb2YgdGhlIFByb2dyYW0sIHRoZSBDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcgc2hvdWxkIGRvIHNvIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwgbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuIFRoZXJlZm9yZSwgaWYgYSBDb250cmlidXRvciBpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoIkNvbW1lcmNpYWwgQ29udHJpYnV0b3IiKSBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyIENvbnRyaWJ1dG9yICgiSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IiKSBhZ2FpbnN0IGFueSBsb3NzZXMsIGRhbWFnZXMgYW5kIGNvc3RzIChjb2xsZWN0aXZlbHkgIkxvc3NlcyIpIGFyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlciBsZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0byB0aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluIGNvbm5lY3Rpb24gd2l0aCBpdHMgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLiBUaGUgb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcyByZWxhdGluZyB0byBhbnkgYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudC4gSW4gb3JkZXIgdG8gcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaCBjbGFpbSwgYW5kIGIpIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuc2UgYW5kIGFueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlIGluIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS4KKworRm9yIGV4YW1wbGUsIGEgQ29udHJpYnV0b3IgbWlnaHQgaW5jbHVkZSB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgUHJvZHVjdCBYLiBUaGF0IENvbnRyaWJ1dG9yIGlzIHRoZW4gYSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZSBjbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMgYXJlIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvcidzIHJlc3BvbnNpYmlsaXR5IGFsb25lLiBVbmRlciB0aGlzIHNlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcyBhZ2FpbnN0IHRoZSBvdGhlciBDb250cmlidXRvcnMgcmVsYXRlZCB0byB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMgYW5kIHdhcnJhbnRpZXMsIGFuZCBpZiBhIGNvdXJ0IHJlcXVpcmVzIGFueSBvdGhlciBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuCisKKzUuIE5PIFdBUlJBTlRZCisKK0VYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMgQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFYWNoIFJlY2lwaWVudCBpcyBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSBhbmQgYXNzdW1lcyBhbGwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsIGNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlIGxhd3MsIGRhbWFnZSB0byBvciBsb3NzIG9mIGRhdGEsIHByb2dyYW1zIG9yIGVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLgorCis2LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWQorCitFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTIEFHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SIEFOWSBDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUiBESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBHRU5FUkFMCisKK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCBpdCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2Ugc3VjaCBwcm92aXNpb24gdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorCitJZiBSZWNpcGllbnQgaW5zdGl0dXRlcyBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBQcm9ncmFtIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpIGluZnJpbmdlcyBzdWNoIFJlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoIFJlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorCitBbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHNoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIG1hdGVyaWFsIHRlcm1zIG9yIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGRvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZSBwZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuIElmIGFsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlLCBSZWNpcGllbnQgYWdyZWVzIHRvIGNlYXNlIHVzZSBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwgUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGJ5IFJlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBjb250aW51ZSBhbmQgc3Vydml2ZS4KKworRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gb3JkZXIgdG8gYXZvaWQgaW5jb25zaXN0ZW5jeSB0aGUgQWdyZWVtZW50IGlzIGNvcHlyaWdodGVkIGFuZCBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB0aGUgZm9sbG93aW5nIG1hbm5lci4gVGhlIEFncmVlbWVudCBTdGV3YXJkIHJlc2VydmVzIHRoZSByaWdodCB0byBwdWJsaXNoIG5ldyB2ZXJzaW9ucyAoaW5jbHVkaW5nIHJldmlzaW9ucykgb2YgdGhpcyBBZ3JlZW1lbnQgZnJvbSB0aW1lIHRvIHRpbWUuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBBZ3JlZW1lbnQgU3Rld2FyZCBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBpcyB0aGUgaW5pdGlhbCBBZ3JlZW1lbnQgU3Rld2FyZC4gVGhlIEVjbGlwc2UgRm91bmRhdGlvbiBtYXkgYXNzaWduIHRoZSByZXNwb25zaWJpbGl0eSB0byBzZXJ2ZSBhcyB0aGUgQWdyZWVtZW50IFN0ZXdhcmQgdG8gYSBzdWl0YWJsZSBzZXBhcmF0ZSBlbnRpdHkuIEVhY2ggbmV3IHZlcnNpb24gb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtIChpbmNsdWRpbmcgQ29udHJpYnV0aW9ucykgbWF5IGFsd2F5cyBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQgdW5kZXIgd2hpY2ggaXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKGluY2x1ZGluZyBpdHMgQ29udHJpYnV0aW9ucykgdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiBTZWN0aW9ucyAyKGEpIGFuZCAyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgYW55IENvbnRyaWJ1dG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyIGV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZS4gQWxsIHJpZ2h0cyBpbiB0aGUgUHJvZ3JhbSBub3QgZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLgorCitUaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLiBObyBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMgQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcyBpdHMgcmlnaHRzIHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcmVzdWx0aW5nIGxpdGlnYXRpb24uCisKKyAKKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvRVBTT04gYi9saWNlbnNlcy9FUFNPTgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDk0MjZiCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvRVBTT04KQEAgLTAsMCArMSwxMjAgQEAKK1NFSUtPIEVQU09OIENPUlBPUkFUSU9OCitTT0ZUV0FSRSBMSUNFTlNFIEFHUkVFTUVOVAorCitJTVBPUlRBTlQhIFJFQUQgVEhJUyBTT0ZUV0FSRSBMSUNFTlNFIEFHUkVFTUVOVCBDQVJFRlVMTFkuICBUaGUKK2NvbXB1dGVyIHNvZnR3YXJlIHByb2R1Y3QsIGZvbnR3YXJlLCB0eXBlZmFjZXMgYW5kL29yIGRhdGEsIGluY2x1ZGluZworYW55IGFjY29tcGFueWluZyBleHBsYW5hdG9yeSB3cml0dGVuIG1hdGVyaWFscyAodGhlICJTb2Z0d2FyZSIpIHNob3VsZAorb25seSBiZSBpbnN0YWxsZWQgb3IgdXNlZCBieSB0aGUgTGljZW5zZWUgKCJ5b3UiKSBvbiB0aGUgY29uZGl0aW9uIHlvdQorYWdyZWUgd2l0aCBTRUlLTyBFUFNPTiBDT1JQT1JBVElPTiAoIkVQU09OIikgdG8gdGhlIHRlcm1zIGFuZAorY29uZGl0aW9ucyBzZXQgZm9ydGggaW4gdGhpcyBBZ3JlZW1lbnQuICBCeSBpbnN0YWxsaW5nIG9yIHVzaW5nIHRoZQorU29mdHdhcmUsIHlvdSBhcmUgcmVwcmVzZW50aW5nIHRvIGFncmVlIGFsbCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKK3NldCBmb3J0aCBpbiB0aGlzIEFncmVlbWVudC4gIFlvdSBzaG91bGQgcmVhZCB0aGlzIEFncmVlbWVudCBjYXJlZnVsbHkKK2JlZm9yZSBpbnN0YWxsaW5nIG9yIHVzaW5nIHRoZSBTb2Z0d2FyZS4gIElmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCB0aGUKK3Rlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50LCB5b3UgYXJlIG5vdCBwZXJtaXR0ZWQgdG8KK2luc3RhbGwgb3IgdXNlIHRoZSBTb2Z0d2FyZS4KKworMS4gTGljZW5zZS4gIEVQU09OIGFuZCBpdHMgc3VwcGxpZXJzIGdyYW50IHlvdSBhIHBlcnNvbmFsLAorICAgbm9uZXhjbHVzaXZlLCByb3lhbHR5LWZyZWUgbGltaXRlZCBsaWNlbnNlIHRvIGluc3RhbGwsIGNvcHksIHVzZQorICAgYW5kIHJlZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUsIHByb3ZpZGVkIHRoYXQgdGhlIGNvcHlyaWdodCBub3RpY2UKKyAgIGlzIHJlcHJvZHVjZWQgaW4gaXRzIGVudGlyZXR5IG9uIHRoZSBjb3B5LiAgVGhlIHRlcm0gIlNvZnR3YXJlIgorICAgc2hhbGwgaW5jbHVkZSB0aGUgc29mdHdhcmUgY29tcG9uZW50cywgbWVkaWEsIGFsbCBjb3BpZXMgbWFkZSBieQorICAgeW91IGFuZCBhbnkgdXBncmFkZXMsIG1vZGlmaWVkIHZlcnNpb25zLCB1cGRhdGVzLCBhZGRpdGlvbnMgYW5kCisgICBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlIGxpY2Vuc2VkIHRvIHlvdSBieSBFUFNPTiBvciBpdHMgc3VwcGxpZXJzLgorICAgRVBTT04gYW5kIGl0cyBzdXBwbGllcnMgcmVzZXJ2ZSBhbGwgcmlnaHRzIG5vdCBncmFudGVkIGhlcmVpbi4KKworMi4gT3RoZXIgUmlnaHRzIGFuZCBMaW1pdGF0aW9ucy4gIFlvdSBhZ3JlZSBub3QgdG8gbW9kaWZ5LCBhZGFwdCBvcgorICAgdHJhbnNsYXRlIHRoZSBTb2Z0d2FyZS4gIFlvdSBhbHNvIGFncmVlIG5vdCB0byBhdHRlbXB0IHRvIHJldmVyc2UKKyAgIGVuZ2luZWVyLCBkZWNvbXBpbGUsIGRpc2Fzc2VtYmxlIG9yIG90aGVyd2lzZSBhdHRlbXB0IHRvIGRpc2NvdmVyCisgICB0aGUgc291cmNlIGNvZGUgb2YgdGhlIFNvZnR3YXJlLiAgWW91IG1heSBub3QgcmVudCwgbGVhc2UsIGVuY3VtYmVyCisgICBvciBsZW5kIHRoZSBTb2Z0d2FyZS4gIFlvdSBtYXksIGhvd2V2ZXIsIHRyYW5zZmVyIGFsbCB5b3VyIHJpZ2h0cworICAgdG8gdXNlIHRoZSBTb2Z0d2FyZSB0byBhbm90aGVyIHBlcnNvbiBvciBsZWdhbCBlbnRpdHkgcHJvdmlkZWQgdGhhdAorICAgeW91IHRyYW5zZmVyIHRoaXMgQWdyZWVtZW50LCB0aGUgU29mdHdhcmUsIGluY2x1ZGluZyBhbGwgY29waWVzLAorICAgdXBkYXRlcyBhbmQgcHJpb3IgdmVyc2lvbnMsIHRvIHN1Y2ggcGVyc29uIG9yIGVudGl0eSwgYW5kIHRoYXQgeW91CisgICByZXRhaW4gbm8gY29waWVzLCBpbmNsdWRpbmcgY29waWVzIHN0b3JlZCBvbiBhIGNvbXB1dGVyLiBTb21lCisgICBzdGF0ZXMgb3IganVyaXNkaWN0aW9ucywgaG93ZXZlciwgZG8gbm90IGFsbG93IHRoZSByZXN0cmljdGlvbiBvcgorICAgbGltaXRhdGlvbiBvbiB0cmFuc2ZlciBvZiB0aGUgU29mdHdhcmUsIHNvIHRoZSBhYm92ZSBsaW1pdGF0aW9ucworICAgbWF5IG5vdCBhcHBseSB0byB5b3UuCisKKzMuIE93bmVyc2hpcC4gIFRpdGxlLCBvd25lcnNoaXAgcmlnaHRzLCBhbmQgaW50ZWxsZWN0dWFsIHByb3BlcnR5CisgICByaWdodHMgaW4gYW5kIHRvIHRoZSBTb2Z0d2FyZSBhbmQgYW55IGNvcGllcyB0aGVyZW9mIHNoYWxsIHJlbWFpbgorICAgd2l0aCBFUFNPTiBvciBpdHMgc3VwcGxpZXJzLiAgVGhlcmUgaXMgbm8gdHJhbnNmZXIgdG8geW91IG9mIGFueQorICAgdGl0bGUgdG8gb3Igb3duZXJzaGlwIG9mIHRoZSBTb2Z0d2FyZSBhbmQgdGhpcyBMaWNlbnNlIHNoYWxsIG5vdCBiZQorICAgY29uc3RydWVkIGFzIGEgc2FsZSBvZiBhbnkgcmlnaHRzIGluIHRoZSBTb2Z0d2FyZS4gIFRoZSBTb2Z0d2FyZSBpcworICAgcHJvdGVjdGVkIGJ5IEphcGFuZXNlIENvcHlyaWdodCBMYXcgYW5kIGludGVybmF0aW9uYWwgY29weXJpZ2h0CisgICB0cmVhdGllcywgYXMgd2VsbCBhcyBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBhbmQgdHJlYXRpZXMuCisgICBZb3UgYWxzbyBhZ3JlZSBub3QgdG8gcmVtb3ZlIG9yIGFsdGVyIGFueSBjb3B5cmlnaHQgYW5kIG90aGVyCisgICBwcm9wcmlldGFyeSBub3RpY2VzIG9uIGFueSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLgorCis0LiBQcm90ZWN0aW9uIGFuZCBTZWN1cml0eS4gIFlvdSBhZ3JlZSB0byB1c2UgeW91ciBiZXN0IGVmZm9ydHMgYW5kCisgICB0YWtlIGFsbCByZWFzb25hYmxlIHN0ZXBzIHRvIHNhZmVndWFyZCB0aGUgU29mdHdhcmUgdG8gZW5zdXJlIHRoYXQKKyAgIG5vIHVuYXV0aG9yaXplZCBwZXJzb24gaGFzIGFjY2VzcyB0byB0aGVtIGFuZCB0aGF0IG5vIHVuYXV0aG9yaXplZAorICAgY29weSwgcHVibGljYXRpb24sIGRpc2Nsb3N1cmUgb3IgZGlzdHJpYnV0aW9uIG9mIGFueSBvZiB0aGUKKyAgIFNvZnR3YXJlIGlzIG1hZGUuICBZb3UgYWNrbm93bGVkZ2UgdGhhdCB0aGUgU29mdHdhcmUgY29udGFpbnMKKyAgIHZhbHVhYmxlLCBjb25maWRlbnRpYWwgaW5mb3JtYXRpb24gYW5kIHRyYWRlIHNlY3JldHMsIHRoYXQKKyAgIHVuYXV0aG9yaXplZCB1c2UgYW5kIGNvcHlpbmcgYXJlIGhhcm1mdWwgdG8gRVBTT04gYW5kIGl0cworICAgc3VwcGxpZXJzLCBhbmQgdGhhdCB5b3UgaGF2ZSBhIGNvbmZpZGVudGlhbGl0eSBvYmxpZ2F0aW9uIGFzIHRvCisgICBzdWNoIHZhbHVhYmxlIGluZm9ybWF0aW9uIGFuZCB0cmFkZSBzZWNyZXRzLgorCis1LiBMaW1pdGVkIFdhcnJhbnR5LiAgWW91IGFja25vd2xlZGdlIGFuZCBhZ3JlZSB0aGF0IHRoZSB1c2Ugb2YgdGhlCisgICBTb2Z0d2FyZSBpcyBhdCB5b3VyIHNvbGUgcmlzay4gIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiCisgICBBTkQgV0lUSE9VVCBBTlkgV0FSUkFOVFkgT0YgQU5ZIEtJTkQuICBFUFNPTiBBTkQgSVRTIFNVUFBMSUVSUyBETworICAgTk9UIEFORCBDQU5OT1QgV0FSUkFOVCBUSEUgUEVSRk9STUFOQ0UgT1IgUkVTVUxUUyBZT1UgTUFZIE9CVEFJTiBCWQorICAgVVNJTkcgVEhFIFNPRlRXQVJFLiAgVEhFIEZPUkVHT0lORyBTVEFURVMgVEhFIFNPTEUgQU5EIEVYQ0xVU0lWRQorICAgUkVNRURJRVMgRk9SIEVQU09OJ1MgQU5EIElUUyBTVVBQTElFUlMnIEJSRUFDSCBPRiBXQVJSQU5UWS4gIEVYQ0VQVAorICAgRk9SIFRIRSBGT1JFR09JTkcgTElNSVRFRCBXQVJSQU5UWSwgRVBTT04gQU5EIElUUyBTVVBQTElFUlMgTUFLRSBOTworICAgV0FSUkFOVElFUywgRVhQUkVTUyBPUiBJTVBMSUVELCBBUyBUTyBOT04tSU5GUklOR0VNRU5ULAorICAgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTb21lIHN0YXRlcworICAgb3IganVyaXNkaWN0aW9ucyBkbyBub3QgYWxsb3cgdGhlIGV4Y2x1c2lvbiBvZiBpbXBsaWVkIHdhcnJhbnRpZXMKKyAgIG9yIGxpbWl0YXRpb25zIG9uIGhvdyBsb25nIGFuIGltcGxpZWQgd2FycmFudHkgbWF5IGxhc3QsIHNvIHRoZQorICAgYWJvdmUgbGltaXRhdGlvbnMgbWF5IG5vdCBhcHBseSB0byB5b3UuICBUaGlzIHdhcnJhbnR5IGdpdmVzIHlvdQorICAgc3BlY2lmaWMgbGVnYWwgcmlnaHRzLiAgWW91IG1heSBoYXZlIG90aGVyIHJpZ2h0cyB3aGljaCB2YXJ5IGZyb20KKyAgIHN0YXRlIHRvIHN0YXRlIG9yIGp1cmlzZGljdGlvbiB0byBqdXJpc2RpY3Rpb24uCisKKyAgIElOIE5PIEVWRU5UIFdJTEwgRVBTT04gT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgVE8gWU9VLCBXSEVUSEVSCisgICBBUklTSU5HIFVOREVSIENPTlRSQUNULCBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVAorICAgTElBQklMSVRZLCBCUkVBQ0ggT1IgV0FSUkFOVFksIE1JU1JFUFJFU0VOVEFUSU9OIE9SIE9USEVSV0lTRSwgRk9SCisgICBBTlkgRElSRUNULCBDT05TRVFVRU5USUFMLCBJTkNJREVOVEFMIE9SIFNQRUNJQUwgREFNQUdFUywgSU5DTFVESU5HCisgICBBTlkgTE9TVCBQUk9GSVRTIE9SIExPU1QgU0FWSU5HUywgRVZFTiBJRiBFUFNPTiwgSVRTIFNVUFBMSUVSUyBPUgorICAgQU5ZIFJFUFJFU0VOVEFUSVZFIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKKyAgIERBTUFHRVMsIE9SIEZPUiBBTlkgQ0xBSU0gQlkgQU5ZIFRISVJEIFBBUlRZLiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAgIEVQU09OJ1MgT1IgSVRTIFNVUFBMSUVSUycgTElBQklMSVRZIFVOREVSIFRISVMgQUdSRUVNRU5UIEVYQ0VFRAorICAgVEhFIEFNT1VOVCBUSEFUIEVQU09OIFJFQ0VJVkVEIEZST00gWU9VIFVOREVSIFRISVMgQUdSRUVNRU5ULiAgU29tZQorICAgc3RhdGVzIG9yIGp1cmlzZGljdGlvbnMsIGhvd2V2ZXIsIGRvIG5vdCBhbGxvdyB0aGUgZXhjbHVzaW9uIG9yCisgICBsaW1pdGF0aW9uIG9mIGluY2lkZW50YWwsIGNvbnNlcXVlbnRpYWwgb3Igc3BlY2lhbCBkYW1hZ2VzLCBzbyB0aGUKKyAgIGFib3ZlIGxpbWl0YXRpb25zIG1heSBub3QgYXBwbHkgdG8geW91LgorCis2LiBUZXJtaW5hdGlvbi4gIFdpdGhvdXQgcHJlanVkaWNlIHRvIGFueSBvdGhlciByaWdodHMgRVBTT04gaGFzLCB0aGlzCisgICBBZ3JlZW1lbnQgc2hhbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgdXBvbiBmYWlsdXJlIGJ5IHlvdSB0bworICAgY29tcGx5IHdpdGggaXRzIHRlcm1zLiAgWW91IG1heSBhbHNvIHRlcm1pbmF0ZSB0aGlzIEFncmVlbWVudCBhdAorICAgYW55IHRpbWUgYnkgdW5pbnN0YWxsaW5nIGFuZCBkZXN0cm95aW5nIHRoZSBTb2Z0d2FyZSBhbmQgYWxsIGNvcGllcworICAgdGhlcmVvZi4KKworNy4gR292ZXJuaW5nIExhdyBhbmQgR2VuZXJhbCBQcm92aXNpb25zLiAgVGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUKKyAgIGdvdmVybmVkIGFuZCBjb25zdHJ1ZWQgdW5kZXIgYnkgdGhlIGxhd3Mgb2YgSmFwYW4gd2l0aG91dCByZWdhcmQgdG8KKyAgIGl0cyBjb25mbGljdHMgb2YgbGF3IHJ1bGVzLiAgVGhpcyBBZ3JlZW1lbnQgaXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQKKyAgIGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBTb2Z0d2FyZSwgYW5kIHN1cGVyc2VkZXMKKyAgIGFueSBwdXJjaGFzZSBvcmRlciwgY29tbXVuaWNhdGlvbiwgYWR2ZXJ0aXNlbWVudCwgb3IgcmVwcmVzZW50YXRpb24KKyAgIGNvbmNlcm5pbmcgdGhlIFNvZnR3YXJlLiAgVGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgYmluZGluZyB1cG9uLCBhbmQKKyAgIGludXJlIHRvIHRoZSBiZW5lZml0IG9mLCB0aGUgcGFydGllcyBoZXJldG8gYW5kIHRoZWlyIHJlc3BlY3RpdmUKKyAgIHN1Y2Nlc3NvcnMsIGFzc2lnbnMgYW5kIGxlZ2FsIHJlcHJlc2VudGF0aXZlcy4gIElmIGFueSBwcm92aXNpb24KKyAgIGhlcmVpbiBpcyBmb3VuZCB2b2lkIG9yIHVuZW5mb3JjZWFibGUsIGl0IHdpbGwgbm90IGFmZmVjdCB0aGUKKyAgIHZhbGlkaXR5IG9mIHRoZSBiYWxhbmNlIG9mIHRoZSBBZ3JlZW1lbnQsIHdoaWNoIHNoYWxsIHJlbWFpbiB2YWxpZAorICAgYW5kIGVuZm9yY2VhYmxlIGFjY29yZGluZyB0byBpdHMgdGVybXMuICBUaGlzIEFncmVlbWVudCBtYXkgb25seSBiZQorICAgbW9kaWZpZWQgaW4gd3JpdGluZyBzaWduZWQgYnkgYW4gYXV0aG9yaXplZCBvZmZpY2VyIG9mIEVQU09OLgorCis4LiBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzLiAgSWYgeW91IGFyZSBhY3F1aXJpbmcgdGhlIFNvZnR3YXJlIG9uCisgICBiZWhhbGYgb2YgYW55IHVuaXQgb3IgYWdlbmN5IG9mIHRoZSBVbml0ZWQgU3RhdGVzIEdvdmVybm1lbnQsIHRoZQorICAgZm9sbG93aW5nIHByb3Zpc2lvbnMgYXBwbHkuICBUaGUgR292ZXJubWVudCBhZ3JlZXM6IChpKSBpZiB0aGUKKyAgIFNvZnR3YXJlIGlzIHN1cHBsaWVkIHRvIHRoZSBEZXBhcnRtZW50IG9mIERlZmVuc2UgKERvRCksIHRoZQorICAgU29mdHdhcmUgaXMgY2xhc3NpZmllZCBhcyAiQ29tbWVyY2lhbCBDb21wdXRlciBTb2Z0d2FyZSIgYW5kIHRoZQorICAgR292ZXJubWVudCBpcyBhY3F1aXJpbmcgb25seSAicmVzdHJpY3RlZCByaWdodHMiIGluIHRoZSBTb2Z0d2FyZQorICAgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluIENsYXVzZQorICAgMjUyLjIyNy03MDEzKGMpKDEpIG9mIHRoZSBERkFSUzsgYW5kIChpaSkgaWYgdGhlIFNvZnR3YXJlIGlzCisgICBzdXBwbGllZCB0byBhbnkgdW5pdCBvciBhZ2VuY3kgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgR292ZXJubWVudAorICAgb3RoZXIgdGhhbiBEb0QsIHRoZSBHb3Zlcm5tZW50J3MgcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSBhbmQgaXRzCisgICBkb2N1bWVudGF0aW9uIHdpbGwgYmUgYXMgZGVmaW5lZCBpbiBDbGF1c2UgNTIuMjI3LTE5KGMpKDIpIG9mIHRoZQorICAgRkFSIG9yLCBpbiB0aGUgY2FzZSBvZiBOQVNBLCBpbiBDbGF1c2UgMTgtNTIuMjI3LTg2KGQpIG9mIHRoZSBOQVNBCisgICBTdXBwbGVtZW50IHRvIHRoZSBGQVIuCisKKworRVBTT04gRVVMQSAwNy8wMS8yMDAxCmRpZmYgLS1naXQgYS9saWNlbnNlcy9FVFFXIGIvbGljZW5zZXMvRVRRVwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2Y0M2NkCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvRVRRVwpAQCAtMCwwICsxLDQzIEBACitTT0ZUV0FSRSBMSUNFTlNFIEFHUkVFTUVOVAorCitUaGlzIEVORU1ZIFRFUlJJVE9SWTogUVVBS0UgV0FSUyhUTSkgTGltaXRlZCBVc2UgU29mdHdhcmUgTGljZW5zZSBBZ3JlZW1lbnQgKHRoaXMgIkFncmVlbWVudCIpIGlzIGEgbGVnYWwgYWdyZWVtZW50IGFtb25nIHlvdSwgdGhlIGVuZC11c2VyLCBhbmQgSWQgU29mdHdhcmUsIEluYy4gKCJJZCBTb2Z0d2FyZSIpLCBhbmQgQWN0aXZpc2lvbiBQdWJsaXNoaW5nLCBJbmMuICgiQWN0aXZpc2lvbiIpLiAgQlkgRE9XTkxPQURJTkcgT1IgQ09OVElOVUlORyBUSEUgSU5TVEFMTEFUSU9OIE9GIFRIRSBHQU1FIFBST0dSQU0gRU5USVRMRUQgRU5FTVkgVEVSUklUT1JZOiBRVUFLRSBXQVJTKFRNKSAoVEhFICJTT0ZUV0FSRSIpLCBCWSBMT0FESU5HIE9SIFJVTk5JTkcgVEhFIFNPRlRXQVJFLCBPUiBCWSBQTEFDSU5HIE9SIENPUFlJTkcgVEhFIFNPRlRXQVJFIE9OVE8gWU9VUiBDT01QVVRFUiBIQVJEIERSSVZFLCBDT01QVVRFUiBSQU0gT1IgT1RIRVIgU1RPUkFHRSwgWU9VIEFSRSBBR1JFRUlORyBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQuICAKKworMS4JR3JhbnQgb2YgTGljZW5zZS4gIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBwcm92aXNpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBzbyBsb25nIGFzIHlvdSBmdWxseSBjb21wbHkgYXQgYWxsIHRpbWVzIHdpdGggdGhpcyBBZ3JlZW1lbnQsIElkIFNvZnR3YXJlIGdyYW50cyB0byB5b3UgdGhlIG5vbi1leGNsdXNpdmUgYW5kIGxpbWl0ZWQgcmlnaHQgdG8gdXNlIHRoZSBTb2Z0d2FyZSBvbmx5IGluIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgZm9ybS4gIFRoZSB0ZXJtICJTb2Z0d2FyZSIgaW5jbHVkZXMgYWxsIGVsZW1lbnRzIG9mIHRoZSBTb2Z0d2FyZSwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGRhdGEgZmlsZXMgYW5kIHNjcmVlbiBkaXNwbGF5cy4gIFlvdSBhcmUgbm90IHJlY2VpdmluZyBhbnkgb3duZXJzaGlwIG9yIHByb3ByaWV0YXJ5IHJpZ2h0LCB0aXRsZSwgb3IgaW50ZXJlc3QgaW4gb3IgdG8gdGhlIFNvZnR3YXJlIG9yIHRoZSBjb3B5cmlnaHRzLCB0cmFkZW1hcmtzLCBvciBvdGhlciByaWdodHMgcmVsYXRlZCB0aGVyZXRvLiAgRm9yIHB1cnBvc2VzIG9mIHRoZSBmaXJzdCBzZW50ZW5jZSBvZiB0aGlzIFNlY3Rpb24sICJ1c2UiIG1lYW5zIGxvYWRpbmcgdGhlIFNvZnR3YXJlIGludG8gUkFNIGFuZC9vciBvbnRvIGNvbXB1dGVyIGhhcmQgZHJpdmUsIGFzIHdlbGwgYXMgaW5zdGFsbGF0aW9uIG9mIHRoZSBTb2Z0d2FyZSBvbiBhIGhhcmQgZGlzayBvciBvdGhlciBzdG9yYWdlIGRldmljZSwgYW5kIG1lYW5zIHRoZSB1c2VzIHBlcm1pdHRlZCBpbiBTZWN0aW9uIDUgaGVyZWluIGJlbG93LiAgWW91IGFncmVlIHRoYXQgdGhlIFNvZnR3YXJlIHdpbGwgbm90IGJlIGRvd25sb2FkZWQsIHNoaXBwZWQsIHRyYW5zZmVycmVkLCBleHBvcnRlZCBvciByZS1leHBvcnRlZCBpbnRvIGFueSBjb3VudHJ5IGluIHZpb2xhdGlvbiBvZiB0aGUgVW5pdGVkIFN0YXRlcyBFeHBvcnQgQWRtaW5pc3RyYXRpb24gQWN0IChvciBhbnkgb3RoZXIgbGF3IGdvdmVybmluZyBzdWNoIG1hdHRlcnMpIGJ5IHlvdSBvciBhbnlvbmUgYXQgeW91ciBkaXJlY3Rpb24sIGFuZCB0aGF0IHlvdSB3aWxsIG5vdCB1dGlsaXplIGFuZCB3aWxsIG5vdCBhdXRob3JpemUgYW55b25lIHRvIHV0aWxpemUgdGhlIFNvZnR3YXJlIGluIGFueSBvdGhlciBtYW5uZXIgaW4gdmlvbGF0aW9uIG9mIGFueSBhcHBsaWNhYmxlIGxhdy4gIFRoZSBTb2Z0d2FyZSBzaGFsbCBub3QgYmUgZG93bmxvYWRlZCBvciBvdGhlcndpc2UgZXhwb3J0ZWQgb3IgcmUtZXhwb3J0ZWQgaW50byAob3IgdG8gYSBuYXRpb25hbCBvciByZXNpZGVudCBvZikgYW55IGNvdW50cnkgdG8gd2hpY2ggdGhlIFVuaXRlZCBTdGF0ZXMgaGFzIGVtYmFyZ29lZCBnb29kcywgb3IgdG8gYW55b25lIG9yIGludG8gYW55IGNvdW50cnkgd2hvL3RoYXQgYXJlIHByb2hpYml0ZWQsIGJ5IGFwcGxpY2FibGUgbGF3LCBmcm9tIHJlY2VpdmluZyBzdWNoIHByb3BlcnR5LiAgSW4gZXhlcmNpc2luZyB5b3VyIGxpbWl0ZWQgcmlnaHRzIGhlcmV1bmRlciwgeW91IHNoYWxsIGNvbXBseSwgYXQgYWxsIHRpbWVzLCB3aXRoIGFsbCBhcHBsaWNhYmxlIGxhd3MsIHJlZ3VsYXRpb25zLCBvcmRpbmFuY2VzLCBhbmQgc3RhdHV0ZXMuICBJZCBTb2Z0d2FyZSByZXNlcnZlcyBhbGwgcmlnaHRzIG5vdCBncmFudGVkIGluIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgYWxsIHJpZ2h0cyB0byBJZCBTb2Z0d2FyZSdzIHRyYWRlbWFya3MuCisKKzIuCVByb2hpYml0aW9uIGFnYWluc3QgTW9kaWZpY2F0aW9uIG9mIHRoZSBTb2Z0d2FyZS4gIFlvdSBtYXkgbm90IGFsdGVyIG9yIG1vZGlmeSB0aGUgU29mdHdhcmUgaW4gYW55IG1hbm5lci4KKworMy4JUHJvaGliaXRpb25zIHdpdGggUmVnYXJkIHRvIHRoZSBTb2Z0d2FyZS4gIFlvdSwgd2hldGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBzaGFsbCBub3QgZG8gYW55IG9mIHRoZSBmb2xsb3dpbmcgYWN0czoKK2EuCXJlbnQgdGhlIFNvZnR3YXJlOworYi4Jc2VsbCB0aGUgU29mdHdhcmU7CitjLglsZWFzZSBvciBsZW5kIHRoZSBTb2Z0d2FyZTsKK2QuCW9mZmVyIHRoZSBTb2Z0d2FyZSBvbiBhIHBheS1wZXItcGxheSBiYXNpczsKK2UuCWRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGJ5IGFueSBtZWFucywgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIEludGVybmV0IG9yIG90aGVyIGVsZWN0cm9uaWMgZGlzdHJpYnV0aW9uLCBkaXJlY3QgbWFpbCwgcmV0YWlsLCBtYWlsIG9yZGVyLCBvciBvdGhlciBtZWFuczsKK2YuCWluIGFueSBvdGhlciBtYW5uZXIgYW5kIHRocm91Z2ggYW55IG1lZGl1bSB3aGF0c29ldmVyIGNvbW1lcmNpYWxseSBleHBsb2l0IHRoZSBTb2Z0d2FyZSBvciB1c2UgdGhlIFNvZnR3YXJlIGZvciBhbnkgY29tbWVyY2lhbCBwdXJwb3NlOworZy4JZGlzYXNzZW1ibGUsIHJldmVyc2UgZW5naW5lZXIgb3IgZGVjb21waWxlIHRoZSBTb2Z0d2FyZTsKK2guCXRyYW5zbGF0ZSB0aGUgU29mdHdhcmU7CitpLglyZXByb2R1Y2Ugb3IgY29weSB0aGUgU29mdHdhcmUgKGV4Y2VwdCBhcyBwZXJtaXR0ZWQgdW5kZXIgU2VjdGlvbiA1IGhlcmVpbiBiZWxvdyk7CitqLglwdWJsaWNseSBkaXNwbGF5IHRoZSBTb2Z0d2FyZTsKK2suCXByZXBhcmUgb3IgZGV2ZWxvcCBkZXJpdmF0aXZlIHdvcmtzIGJhc2VkIHVwb24gdGhlIFNvZnR3YXJlOworbC4JcmVtb3ZlIG9yIGFsdGVyIGFueSBub3RpY2VzIG9yIG90aGVyIG1hcmtpbmdzIG9yIGxlZ2VuZHMsIHN1Y2ggYXMgdHJhZGVtYXJrIG9yIGNvcHlyaWdodCBub3RpY2VzLCBhZmZpeGVkIG9uIG9yIHdpdGhpbiB0aGUgU29mdHdhcmU7IG9yCittLglyZW1vdmUsIGFsdGVyLCBtb2RpZnksIGRpc2FibGUsIG9yIHJlZHVjZSBhbnkgb2YgdGhlIGFudGktcGlyYWN5IG1lYXN1cmVzIGNvbnRhaW5lZCBpbiB0aGUgU29mdHdhcmUsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBtZWFzdXJlcyByZWxhdGluZyB0byBtdWx0aXBsYXllciBwbGF5Lgorbi4gIAl1cGxvYWQgYW55IGltYWdlIG9yIGRhdGEgb3IgbWVkaWEgZmlsZSBmcm9tIHRoZSBTb2Z0d2FyZSBvciB3aXRoaW4gYW55IG9mIHRoZSBTb2Z0d2FyZSBmaWxlcyB0byB0aGUgSW50ZXJuZXQuIAorCis0LglQcm9oaWJpdGlvbiBhZ2FpbnN0IENoZWF0IFByb2dyYW1zLiAgQW55IGF0dGVtcHQgYnkgeW91LCBlaXRoZXIgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgdG8gY2lyY3VtdmVudCBvciBieXBhc3MgYW55IGVsZW1lbnQgb2YgdGhlIFNvZnR3YXJlIHRvIGdhaW4gYW55IGFkdmFudGFnZSBpbiBtdWx0aXBsYXllciBwbGF5IG9mIHRoZSBTb2Z0d2FyZSBpcyBhIG1hdGVyaWFsIGJyZWFjaCBvZiB0aGlzIEFncmVlbWVudC4gIEl0IGlzIGEgbWF0ZXJpYWwgYnJlYWNoIG9mIHRoaXMgQWdyZWVtZW50IGZvciB5b3UsIHdoZXRoZXIgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgdG8gY3JlYXRlLCBkZXZlbG9wLCBjb3B5LCByZXByb2R1Y2UsIGRpc3RyaWJ1dGUsIG9yIG90aGVyd2lzZSBtYWtlIGFueSB1c2Ugb2YgYW55IHNvZnR3YXJlIHByb2dyYW0gb3IgYW55IG1vZGlmaWNhdGlvbiB0byB0aGUgU29mdHdhcmUgKCJDaGVhdCBQcm9ncmFtIikgaXRzZWxmIHRoYXQgZW5hYmxlcyBvciBhbGxvd3MgdGhlIHVzZXIgdGhlcmVvZiB0byBvYnRhaW4gYW4gYWR2YW50YWdlIG9yIG90aGVyd2lzZSBleHBsb2l0IGFub3RoZXIgU29mdHdhcmUgcGxheWVyIG9yIHVzZXIgd2hlbiBwbGF5aW5nIHRoZSBTb2Z0d2FyZSBhZ2FpbnN0IG90aGVyIHBsYXllcnMgb3IgdXNlcnMgb24gYSBsb2NhbCBhcmVhIG5ldHdvcmssIGFueSBvdGhlciBuZXR3b3JrLCBvciBvbiB0aGUgSW50ZXJuZXQuICBIYWNraW5nIGludG8gdGhlIGV4ZWN1dGFibGUgb2YgdGhlIFNvZnR3YXJlLCBtb2RpZmljYXRpb24gb2YgdGhlIFNvZnR3YXJlLCBvciBhbnkgb3RoZXIgdXNlIG9mIHRoZSBTb2Z0d2FyZSBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGNyZWF0aW9uLCBkZXZlbG9wbWVudCwgb3IgdXNlIG9mIGFueSBzdWNoIHVuYXV0aG9yaXplZCBDaGVhdCBQcm9ncmFtIGlzIGEgbWF0ZXJpYWwgYnJlYWNoIG9mIHRoaXMgQWdyZWVtZW50LiAgQ2hlYXQgUHJvZ3JhbXMgaW5jbHVkZSwgYnV0IGFyZSBub3QgbGltaXRlZCB0bywgcHJvZ3JhbXMgdGhhdCBhbGxvdyBTb2Z0d2FyZSBwbGF5ZXJzIG9yIHVzZXJzIHRvIHNlZSB0aHJvdWdoIHdhbGxzIG9yIG90aGVyIGxldmVsIGdlb21ldHJ5OyBwcm9ncmFtcyB0aGF0IGFsbG93IFNvZnR3YXJlIHBsYXllcnMgb3IgdXNlcnMgdG8gY2hhbmdlIHRoZWlyIHJhdGUgb2Ygc3BlZWQgb3V0c2lkZSB0aGUgYWxsb3dhYmxlIGxpbWl0cyBvZiB0aGUgU29mdHdhcmU7IHByb2dyYW1zIHRoYXQgY3Jhc2ggZWl0aGVyIGFuZC9vciBvdGhlciBTb2Z0d2FyZSBwbGF5ZXJzLCB1c2VycywgUEMgY2xpZW50cywgb3IgbmV0d29yayBzZXJ2ZXJzOyBwcm9ncmFtcyB0aGF0IGF1dG9tYXRpY2FsbHkgdGFyZ2V0IG90aGVyIFNvZnR3YXJlIHBsYXllcnMgb3IgdXNlcnMgKGNvbW1vbmx5IHJlZmVycmVkIHRvIGFzICJhaW1ib3RzIikgdGhhdCBhdXRvbWF0aWNhbGx5IHNpbXVsYXRlIFNvZnR3YXJlIHBsYXllciBvciB1c2VyIGlucHV0IGZvciB0aGUgcHVycG9zZSBvZiBnYWluaW5nIGFuIGFkdmFudGFnZSBvdmVyIG90aGVyIFNvZnR3YXJlIHBsYXllcnMgb3IgdXNlcnM7IG9yIGFueSBvdGhlciBwcm9ncmFtIG9yIG1vZGlmaWNhdGlvbiB0aGF0IGZ1bmN0aW9ucyBpbiBhIHNpbWlsYXIgY2FwYWNpdHkgb3IgYWxsb3dzIGFueSBwcm9oaWJpdGVkIGNvbmR1Y3QuCisKKwlJbiB0aGUgZXZlbnQgeW91IGJyZWFjaCB0aGlzIFNlY3Rpb24gb3Igb3RoZXJ3aXNlIGJyZWFjaCB0aGlzIEFncmVlbWVudCwgeW91ciBsaWNlbnNlIGFuZCB0aGlzIEFncmVlbWVudCBhdXRvbWF0aWNhbGx5IHNoYWxsIHRlcm1pbmF0ZSwgd2l0aG91dCBub3RpY2UsIGFuZCB5b3Ugc2hhbGwgaGF2ZSBubyByaWdodCB0byBwbGF5IHRoZSBTb2Z0d2FyZSBhZ2FpbnN0IG90aGVyIHBsYXllcnMgb3IgbWFrZSBhbnkgb3RoZXIgdXNlIG9mIHRoZSBTb2Z0d2FyZS4KKworNS4JUGVybWl0dGVkIENvcHlpbmcuICBZb3UgbWF5IG1ha2Ugb25seSB0aGUgZm9sbG93aW5nIGNvcGllcyBvZiB0aGUgU29mdHdhcmU6ICAoaSkgeW91IG1heSBjb3B5IHRoZSBTb2Z0d2FyZSB0aGF0IHlvdSBkb3dubG9hZCBvbnRvIHlvdXIgY29tcHV0ZXIgaGFyZCBkcml2ZTsgKGlpKSB5b3UgbWF5IGNvcHkgdGhlIFNvZnR3YXJlIGZyb20geW91ciBjb21wdXRlciBoYXJkIGRyaXZlIGludG8geW91ciBjb21wdXRlciBSQU07IGFuZCAoaWlpKSB5b3UgbWF5IG1ha2Ugb25lICgxKSAiYmFjayB1cCIgb3IgYXJjaGl2YWwgY29weSBvZiB0aGUgU29mdHdhcmUgb24gb25lICgxKSBoYXJkIGRpc2suCisKKzYuCUludGVsbGVjdHVhbCBQcm9wZXJ0eSBSaWdodHMuICAgIFRoZSBTb2Z0d2FyZSBhbmQgYWxsIGNvcHlyaWdodHMsIHRyYWRlbWFya3MsIGFuZCBhbGwgb3RoZXIgY29uY2VpdmFibGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyByZWxhdGVkIHRvIHRoZSBTb2Z0d2FyZSBhcmUgb3duZWQgYnkgSWQgU29mdHdhcmUgYW5kIGFyZSBwcm90ZWN0ZWQgYnkgVW5pdGVkIFN0YXRlcyBjb3B5cmlnaHQgbGF3cywgaW50ZXJuYXRpb25hbCB0cmVhdHkgcHJvdmlzaW9ucywgYW5kIGFsbCBhcHBsaWNhYmxlIGxhdywgc3VjaCBhcyB0aGUgTGFuaGFtIEFjdC4gIFlvdSBtdXN0IHRyZWF0IHRoZSBTb2Z0d2FyZSBsaWtlIGFueSBvdGhlciBjb3B5cmlnaHRlZCBtYXRlcmlhbCwgYXMgcmVxdWlyZWQgYnkgMTcgVS5TLkMuIFMgMTAxIGV0IHNlcS4gYW5kIG90aGVyIGFwcGxpY2FibGUgbGF3LiAgWW91IGFncmVlIHRvIHVzZSB5b3VyIGJlc3QgZWZmb3J0cyB0byBzZWUgdGhhdCBhbnkgdXNlciBvZiB0aGUgU29mdHdhcmUgbGljZW5zZWQgaGVyZXVuZGVyIGNvbXBsaWVzIHdpdGggdGhpcyBBZ3JlZW1lbnQuICBZb3UgYWdyZWUgdGhhdCB5b3UgYXJlIHJlY2VpdmluZyBhIGNvcHkgb2YgdGhlIFNvZnR3YXJlIGJ5IGxpbWl0ZWQgbGljZW5zZSBvbmx5IGFuZCBub3QgYnkgc2FsZSBhbmQgdGhhdCB0aGUgImZpcnN0IHNhbGUiIGRvY3RyaW5lIG9mIDE3IFUuUy5DLiBTIDEwOSBkb2VzIG5vdCBhcHBseSB0byB5b3VyIHJlY2VpcHQgb3IgdXNlIG9mIHRoZSBTb2Z0d2FyZS4gIFRoaXMgU2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSBjYW5jZWxsYXRpb24gb3IgdGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQuCisKKzcuCUluZm9ybWF0aW9uIENvbGxlY3Rpb24uICBZb3UgY29uc2VudCB0byBBY3RpdmlzaW9uIG9idGFpbmluZyBjZXJ0YWluIGluZm9ybWF0aW9uIGFib3V0IHlvdXIgY29tcHV0ZXIgYW5kIGl0cyBvcGVyYXRpbmcgc3lzdGVtLCBpbmNsdWRpbmcgdGhlIHR5cGUgYW5kIHNwZWVkIG9mIHRoZSBjZW50cmFsIHByb2Nlc3NpbmcgdW5pdCwgdGhlIGFtb3VudCBvZiBSQU0gaW4gdGhlIGNlbnRyYWwgcHJvY2Vzc2luZyB1bml0LCB0aGUgb3BlcmF0aW5nIHN5c3RlbSwgdGhlIHR5cGUgb2YgdmlkZW8gY2FyZCB1c2VkLCB3aGV0aGVyIHlvdXIgY29tcHV0ZXIgdXNlcyBhIENEIG9yIERWRCBkcml2ZSwgYW5kIHdoZXRoZXIgeW91ciBjb21wdXRlciBpcyBlcXVpcHBlZCB3aXRoIGEgam95c3RpY2ssIHdpdGhvdXQgYW55IGZ1cnRoZXIgbm90aWNlIHRvIHlvdS4gIFN1Y2ggaW5mb3JtYXRpb24gaXMgbm90IHBlcnNvbmFsbHkgaWRlbnRpZmlhYmxlLiBUaGUgY29tcHV0ZXIgaW5mb3JtYXRpb24gdGhhdCBpcyBjb2xsZWN0ZWQgc2ltcGx5IGhlbHBzIEFjdGl2aXNpb24gdG8gdW5kZXJzdGFuZCBhbmQgYW5hbHl6ZSBicm9hZCwgYW5vbnltb3VzIG1hcmtldCBpbmZvcm1hdGlvbiBhYm91dCBvdXIgY29uc3VtZXJzLCBzbyB0aGF0IEFjdGl2aXNpb24gY2FuIGJldHRlciBzZXJ2ZSB0aGVpciBuZWVkcyBhbmQgZGVtYW5kcy4gIEFjdGl2aXNpb24gd2lsbCBvbmx5IHNoYXJlIHN1Y2ggaW5mb3JtYXRpb24gd2l0aCBvdGhlcnMsIGlmIGF0IGFsbCwgaW4gdGhlIGFnZ3JlZ2F0ZSwgcmVmbGVjdGluZyBvdmVyYWxsIGNvbXB1dGVyIGZlYXR1cmVzIGFuZCBjYXBhYmlsaXRpZXMuCisKKzguCU5PIElEIFNPRlRXQVJFIFdBUlJBTlRJRVMuICBJRCBTT0ZUV0FSRSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMsIFdIRVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBBTlkgV0FSUkFOVFkgT0YgTk9OLUlORlJJTkdFTUVOVCwgV0lUSCBSRVNQRUNUIFRPIFRIRSBTT0ZUV0FSRSBBTkQgT1RIRVJXSVNFLiAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFdJVEhPVVQgV0FSUkFOVFkuICBJRCBTT0ZUV0FSRSBET0VTIE5PVCBXQVJSQU5UIFRIQVQgVEhFIFNPRlRXQVJFIE9SIFRIRSBPUEVSQVRJT04gT0YgVEhFIFNPRlRXQVJFIFdJTEwgQkUgVU5JTlRFUlJVUFRFRCBPUiBFUlJPUi1GUkVFIE9SIFRIQVQgVEhFIFNPRlRXQVJFIFdJTEwgTUVFVCBZT1VSIFNQRUNJRklDIE9SIFNQRUNJQUwgUkVRVUlSRU1FTlRTLiAgQURESVRJT05BTCBTVEFURU1FTlRTLCBXSEVUSEVSIE9SQUwgT1IgV1JJVFRFTiwgRE8gTk9UIENPTlNUSVRVVEUgV0FSUkFOVElFUyBCWSBJRCBTT0ZUV0FSRSBBTkQgU0hPVUxEIE5PVCBCRSBSRUxJRUQgVVBPTi4gIFRoaXMgU2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSBjYW5jZWxsYXRpb24gb3IgdGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQuCisKKzkuCUdvdmVybmluZyBMYXcsIFZlbnVlLCBJbmRlbW5pdHksIGFuZCBMaWFiaWxpdHkgTGltaXRhdGlvbi4gIFRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGNvbnN0cnVlZCBpbiBhY2NvcmRhbmNlIHdpdGggYW5kIGdvdmVybmVkIGJ5IHRoZSBhcHBsaWNhYmxlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIFRleGFzIChidXQgZXhjbHVkaW5nIGNvbmZsaWN0cyBvZiBsYXdzIHByaW5jaXBsZXMpIGFuZCBhcHBsaWNhYmxlIFVuaXRlZCBTdGF0ZXMgZmVkZXJhbCBsYXcuICBFeGNlcHQgYXMgc2V0IGZvcnRoIGJlbG93LCBleGNsdXNpdmUgdmVudWUgZm9yIGFsbCBsaXRpZ2F0aW9uIHJlZ2FyZGluZyB0aGlzIEFncmVlbWVudCBzaGFsbCBiZSBpbiBEYWxsYXMgQ291bnR5LCBUZXhhcywgYW5kIHlvdSBhZ3JlZSB0byBzdWJtaXQgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgZmVkZXJhbCBhbmQgc3RhdGUgY291cnRzIGluIERhbGxhcyBDb3VudHksIFRleGFzLCBmb3IgYW55IHN1Y2ggbGl0aWdhdGlvbi4gIEV4Y2x1c2l2ZSB2ZW51ZSBmb3IgYWxsIGxpdGlnYXRpb24gaW52b2x2aW5nIEFjdGl2aXNpb24sIGJ1dCBub3QgaW52b2x2aW5nIElkIFNvZnR3YXJlLCB3aXRoIHJlZ2FyZCB0byB0aGlzIEFncmVlbWVudCBzaGFsbCBiZSBpbiBMb3MgQW5nZWxlcyBDb3VudHksIENhbGlmb3JuaWEsIGFuZCB5b3UgYWdyZWUgdG8gc3VibWl0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIGNvdXJ0cyBpbiBMb3MgQW5nZWxlcywgQ2FsaWZvcm5pYSwgZm9yIGFueSBzdWNoIGxpdGlnYXRpb24uICBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSwgZGVmZW5kIGFuZCBob2xkIGhhcm1sZXNzIElkIFNvZnR3YXJlIGFuZCBBY3RpdmlzaW9uIGFuZCBJZCBTb2Z0d2FyZSdzIGFuZCBBY3RpdmlzaW9uJ3MgcmVzcGVjdGl2ZSBvZmZpY2VycywgZW1wbG95ZWVzLCBkaXJlY3RvcnMsIGFnZW50cywgbGljZW5zZWVzIChleGNsdWRpbmcgeW91KSwgc3ViLWxpY2Vuc2VlcyAoZXhjbHVkaW5nIHlvdSksIHN1Y2Nlc3NvcnMsIGFuZCBhc3NpZ25zIGZyb20gYW5kIGFnYWluc3QgYWxsIGxvc3NlcywgbGF3c3VpdHMsIGRhbWFnZXMsIGNhdXNlcyBvZiBhY3Rpb24sIGFuZCBjbGFpbXMgcmVsYXRpbmcgdG8gYW5kL29yIGFyaXNpbmcgZnJvbSB5b3VyIGJyZWFjaCBvZiB0aGlzIEFncmVlbWVudC4gIFlvdSBhZ3JlZSB0aGF0IHlvdXIgdW5hdXRob3JpemVkIHVzZSBvZiB0aGUgU29mdHdhcmUsIG9yIGFueSBwYXJ0IHRoZXJlb2YsIGltbWVkaWF0ZWx5IGFuZCBpcnJlcGFyYWJseSBtYXkgZGFtYWdlIElkIFNvZnR3YXJlIHN1Y2ggdGhhdCBJZCBTb2Z0d2FyZSBjb3VsZCBub3QgYmUgYWRlcXVhdGVseSBjb21wZW5zYXRlZCBzb2xlbHkgYnkgYSBtb25ldGFyeSBhd2FyZCwgYW5kIGluIHN1Y2ggZXZlbnQsIGF0IElkIFNvZnR3YXJlJ3Mgb3B0aW9uLCB0aGF0IElkIFNvZnR3YXJlIHNoYWxsIGJlIGVudGl0bGVkIHRvIGFuIGluanVuY3RpdmUgb3JkZXIsIGluIGFkZGl0aW9uIHRvIGFsbCBvdGhlciBhdmFpbGFibGUgcmVtZWRpZXMsIGluY2x1ZGluZyBhIG1vbmV0YXJ5IGF3YXJkLCB0byBwcm9oaWJpdCBzdWNoIHVuYXV0aG9yaXplZCB1c2Ugd2l0aG91dCB0aGUgbmVjZXNzaXR5IG9mIElkIFNvZnR3YXJlIHBvc3RpbmcgYm9uZCBvciBvdGhlciBzZWN1cml0eS4gIElOIEFOWSBDQVNFLCBJRCBTT0ZUV0FSRSwgQUNUSVZJU0lPTiwgQU5EIElEIFNPRlRXQVJFIEFORCBBQ1RJVklTSU9OJ1MgUkVTUEVDVElWRSBPRkZJQ0VSUywgRU1QTE9ZRUVTLCBESVJFQ1RPUlMsIFNIQVJFSE9MREVSUywgUkVQUkVTRU5UQVRJVkVTLCBBR0VOVFMsIExJQ0VOU0VFUyAoRVhDTFVESU5HIFlPVSksIFNVQi1MSUNFTlNFRVMgKEVYQ0xVRElORyBZT1UpLCBTVUNDRVNTT1JTLCBBTkQgQVNTSUdOUyBTSEFMTCBOT1QgQkUgTElBQkxFIEZPUiBMT1NTIE9GIERBVEEsIExPU1MgT0YgUFJPRklUUywgTE9TVCBTQVZJTkdTLCBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBJTkRJUkVDVCBPUiBQVU5JVElWRSBEQU1BR0VTLCBPUiBBTlkgT1RIRVIgREFNQUdFUyBBUklTSU5HIEZST00gQU5ZIEFMTEVHRUQgQ0xBSU0gRk9SIEJSRUFDSCBPRiBXQVJSQU5UWSwgQlJFQUNIIE9GIENPTlRSQUNULCBORUdMSUdFTkNFLCBTVFJJQ1QgUFJPRFVDVCBMSUFCSUxJVFksIE9SIE9USEVSIExFR0FMIFRIRU9SWSBFVkVOIElGIElEIFNPRlRXQVJFLCBBQ1RJVklTSU9OLCBPUiBUSEVJUiBSRVNQRUNUSVZFIEFHRU5UKFMpIEhBVkUgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBBTlkgU1VDSCBEQU1BR0VTLCBPUiBFVkVOIElGIFNVQ0ggREFNQUdFUyBBUkUgRk9SRVNFRUFCTEUsIE9SIExJQUJMRSBGT1IgQU5ZIENMQUlNIEJZIEFOWSBPVEhFUiBQQVJUWS4gIFNvbWUganVyaXNkaWN0aW9ucyBkbyBub3QgYWxsb3cgdGhlIGV4Y2x1c2lvbiBvciBsaW1pdGF0aW9uIG9mIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzbyB0aGUgYWJvdmUgbGltaXRhdGlvbiBvciBleGNsdXNpb24gbWF5IG5vdCBhcHBseSB0byB5b3UuICBUaGlzIFNlY3Rpb24gc2hhbGwgc3Vydml2ZSB0aGUgY2FuY2VsbGF0aW9uIG9yIHRlcm1pbmF0aW9uIG9mIHRoaXMgQWdyZWVtZW50LgorCisxMC4JVW5pdGVkIFN0YXRlcyBHb3Zlcm5tZW50IFJlc3RyaWN0ZWQgUmlnaHRzLiAgVG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlLCB0aGUgVW5pdGVkIFN0YXRlcyBHb3Zlcm5tZW50IHNoYWxsIGhhdmUgb25seSB0aG9zZSByaWdodHMgdG8gdXNlIHRoZSBTb2Z0d2FyZSBhcyBleHByZXNzbHkgc3RhdGVkIGFuZCBleHByZXNzbHkgbGltaXRlZCBhbmQgcmVzdHJpY3RlZCBpbiB0aGlzIEFncmVlbWVudCwgYXMgcHJvdmlkZWQgaW4gNDggQy5GLlIuIFNTIDIyNy43MjAxIHRocm91Z2ggMjI3LjcyMDQsIGluY2x1c2l2ZS4KKworMTEuCUdlbmVyYWwgUHJvdmlzaW9ucy4gIE5laXRoZXIgdGhpcyBBZ3JlZW1lbnQgbm9yIGFueSBwYXJ0IG9yIHBvcnRpb24gaGVyZW9mIHNoYWxsIGJlIGFzc2lnbmVkIG9yIHN1YmxpY2Vuc2VkIGJ5IHlvdS4gIElkIFNvZnR3YXJlIGFuZCBBY3RpdmlzaW9uIGVhY2ggbWF5IGFzc2lnbiBpdHMgcmVzcGVjdGl2ZSByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgaW4gdGhlIGFzc2lnbmluZyBwYXJ0eSdzIHNvbGUgZGlzY3JldGlvbi4gIFNob3VsZCBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGJlIGhlbGQgdG8gYmUgdm9pZCwgaW52YWxpZCwgdW5lbmZvcmNlYWJsZSwgb3IgaWxsZWdhbCBieSBhIGNvdXJ0IG9mIGNvbXBldGVudCBqdXJpc2RpY3Rpb24sIHRoZSB2YWxpZGl0eSBhbmQgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIG90aGVyIHByb3Zpc2lvbnMgc2hhbGwgbm90IGJlIGFmZmVjdGVkIHRoZXJlYnkuICBJZiBhbnkgcHJvdmlzaW9uIGlzIGRldGVybWluZWQgdG8gYmUgdW5lbmZvcmNlYWJsZSBieSBhIGNvdXJ0IG9mIGNvbXBldGVudCBqdXJpc2RpY3Rpb24sIHlvdSBhZ3JlZSB0byBhIG1vZGlmaWNhdGlvbiBvZiBzdWNoIHByb3Zpc2lvbiB0byBwcm92aWRlIGZvciBlbmZvcmNlbWVudCBvZiB0aGUgcHJvdmlzaW9uJ3MgaW50ZW50LCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdy4gIEZhaWx1cmUgb2YgSWQgU29mdHdhcmUgb3IgQWN0aXZpc2lvbiB0byBlbmZvcmNlIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgbm90IGNvbnN0aXR1dGUgb3IgYmUgY29uc3RydWVkIGFzIGEgd2FpdmVyIG9mIHN1Y2ggcHJvdmlzaW9uIG9yIG9mIHRoZSByaWdodCB0byBlbmZvcmNlIHN1Y2ggcHJvdmlzaW9uLiAgSU1NRURJQVRFTFkgVVBPTiBZT1VSIEZBSUxVUkUgVE8gQ09NUExZIFdJVEgsIE9SIFlPVVIgQlJFQUNIIE9GIEFOWSBURVJNIE9SIFBST1ZJU0lPTiBPRiBUSElTIEFHUkVFTUVOVCwgWU9VUiBMSUNFTlNFIEdSQU5URUQgSEVSRUlOIEFORCBUSElTIEFHUkVFTUVOVCBBVVRPTUFUSUNBTExZIFNIQUxMIFRFUk1JTkFURSwgV0lUSE9VVCBOT1RJQ0UsIEFORCBJRCBTT0ZUV0FSRSBBTkQgQUNUSVZJU0lPTiBNQVkgUFVSU1VFIEFMTCBSRUxJRUYgQU5EIFJFTUVESUVTIEFHQUlOU1QgWU9VIFRIQVQgQVJFIEFWQUlMQUJMRSBVTkRFUiBBUFBMSUNBQkxFIExBVyBBTkQvT1IgVEhJUyBBR1JFRU1FTlQuICBJbW1lZGlhdGVseSB1cG9uIHRlcm1pbmF0aW9uIG9mIHRoaXMgQWdyZWVtZW50LCBhbnkgYW5kIGFsbCByaWdodHMgeW91IGFyZSBncmFudGVkIGhlcmV1bmRlciBzaGFsbCB0ZXJtaW5hdGUsIHlvdSBzaGFsbCBoYXZlIG5vIHJpZ2h0IHRvIHVzZSB0aGUgU29mdHdhcmUgaW4gYW55IG1hbm5lciwgeW91IGltbWVkaWF0ZWx5IHNoYWxsIGRlc3Ryb3kgYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUgaW4geW91ciBwb3NzZXNzaW9uLCBjdXN0b2R5LCBvciBjb250cm9sLCBhbmQgYWxsIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciBzaGFsbCByZXZlcnQsIHdpdGhvdXQgbm90aWNlLCB0byBhbmQgYmUgdmVzdGVkIGluIElkIFNvZnR3YXJlLgorCitZT1UgQUNLTk9XTEVER0UgVEhBVCBZT1UgSEFWRSBSRUFEIFRISVMgQUdSRUVNRU5ULCBZT1UgVU5ERVJTVEFORCBUSElTIEFHUkVFTUVOVCwgQU5EIFVOREVSU1RBTkQgVEhBVCBCWSBET1dOTE9BRElORyBUSEUgU09GVFdBUkUsIEJZIENPTlRJTlVJTkcgVEhFIElOU1RBTExBVElPTiBPRiBUSEUgU09GVFdBUkUsIEJZIExPQURJTkcgT1IgUlVOTklORyBUSEUgU09GVFdBUkUsIE9SIEJZIFBMQUNJTkcgT1IgQ09QWUlORyBUSEUgU09GVFdBUkUgT05UTyBZT1VSIENPTVBVVEVSIEhBUkQgRFJJVkUsIENPTVBVVEVSIFJBTSBPUiBPVEhFUiBTVE9SQUdFLCBZT1UgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5ULiAgWU9VIEZVUlRIRVIgQUdSRUUgVEhBVCwgRVhDRVBUIEZPUiBXUklUVEVOIFNFUEFSQVRFIEFHUkVFTUVOVFMsIElGIEFOWSwgQU1PTkcgSUQgU09GVFdBUkUsIEFDVElWSVNJT04sIEFORCBZT1UsIFRISVMgQUdSRUVNRU5UIElTIEEgQ09NUExFVEUgQU5EIEVYQ0xVU0lWRSBTVEFURU1FTlQgT0YgVEhFIFJJR0hUUyBBTkQgTElBQklMSVRJRVMgT0YgVEhFIFBBUlRJRVMgSEVSRVRPLCBSRUxBVElORyBUTyBUSEUgU1VCSkVDVCBNQVRURVIgSEVSRU9GLiAgVEhJUyBBR1JFRU1FTlQgU1VQRVJTRURFUyBBTEwgUFJJT1IgT1JBTCBBR1JFRU1FTlRTLCBQUk9QT1NBTFMsIE9SIFVOREVSU1RBTkRJTkdTLCBBTkQgQU5ZIE9USEVSIENPTU1VTklDQVRJT05TLCBJRiBBTlksIEFNT05HIElEIFNPRlRXQVJFLCBBQ1RJVklTSU9OLCBBTkQgWU9VIFJFTEFUSU5HIFRPIFRIRSBTVUJKRUNUIE1BVFRFUiBPRiBUSElTIEFHUkVFTUVOVC4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0VVUEwtMS4xIGIvbGljZW5zZXMvRVVQTC0xLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU0YTc2NwotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0VVUEwtMS4xCkBAIC0wLDAgKzEsMjY4IEBACisJCSAgIEV1cm9wZWFuIFVuaW9uIFB1YmxpYyBMaWNlbmNlCisJCSAgICAgICAgICAgIFYuIDEuMQorCQlFVVBMIMKpIHRoZSBFdXJvcGVhbiBDb21tdW5pdHkgMjAwNworCitUaGlzIEV1cm9wZWFuIFVuaW9uIFB1YmxpYyBMaWNlbmNlICh0aGUg4oCcRVVQTOKAnSkgYXBwbGllcyB0byB0aGUgV29yayBvciBTb2Z0d2FyZQorKGFzIGRlZmluZWQgYmVsb3cpIHdoaWNoIGlzIHByb3ZpZGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2VuY2UuIEFueSB1c2Ugb2YgdGhlCitXb3JrLCBvdGhlciB0aGFuIGFzIGF1dGhvcmlzZWQgdW5kZXIgdGhpcyBMaWNlbmNlIGlzIHByb2hpYml0ZWQgKHRvIHRoZSBleHRlbnQgc3VjaCB1c2UKK2lzIGNvdmVyZWQgYnkgYSByaWdodCBvZiB0aGUgY29weXJpZ2h0IGhvbGRlciBvZiB0aGUgV29yaykuCisKK1RoZSBPcmlnaW5hbCBXb3JrIGlzIHByb3ZpZGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2VuY2Ugd2hlbiB0aGUgTGljZW5zb3IgKGFzCitkZWZpbmVkIGJlbG93KSBoYXMgcGxhY2VkIHRoZSBmb2xsb3dpbmcgbm90aWNlIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgY29weXJpZ2h0Citub3RpY2UgZm9yIHRoZSBPcmlnaW5hbCBXb3JrOgorCitMaWNlbnNlZCB1bmRlciB0aGUgRVVQTCBWLjEuMQorCitvciBoYXMgZXhwcmVzc2VkIGJ5IGFueSBvdGhlciBtZWFuIGhpcyB3aWxsaW5nbmVzcyB0byBsaWNlbnNlIHVuZGVyIHRoZSBFVVBMLgorCisxLiBEZWZpbml0aW9ucworCitJbiB0aGlzIExpY2VuY2UsIHRoZSBmb2xsb3dpbmcgdGVybXMgaGF2ZSB0aGUgZm9sbG93aW5nIG1lYW5pbmc6CisKKy0gVGhlIExpY2VuY2U6IHRoaXMgTGljZW5jZS4KKworLSBUaGUgT3JpZ2luYWwgV29yayBvciB0aGUgU29mdHdhcmU6IHRoZSBzb2Z0d2FyZSBkaXN0cmlidXRlZCBhbmQvb3IgY29tbXVuaWNhdGVkCitieSB0aGUgTGljZW5zb3IgdW5kZXIgdGhpcyBMaWNlbmNlLCBhdmFpbGFibGUgYXMgU291cmNlIENvZGUgYW5kIGFsc28gYXMgRXhlY3V0YWJsZQorQ29kZSBhcyB0aGUgY2FzZSBtYXkgYmUuCisKKy0gRGVyaXZhdGl2ZSBXb3JrczogdGhlIHdvcmtzIG9yIHNvZnR3YXJlIHRoYXQgY291bGQgYmUgY3JlYXRlZCBieSB0aGUgTGljZW5zZWUsCitiYXNlZCB1cG9uIHRoZSBPcmlnaW5hbCBXb3JrIG9yIG1vZGlmaWNhdGlvbnMgdGhlcmVvZi4gVGhpcyBMaWNlbmNlIGRvZXMgbm90IGRlZmluZQordGhlIGV4dGVudCBvZiBtb2RpZmljYXRpb24gb3IgZGVwZW5kZW5jZSBvbiB0aGUgT3JpZ2luYWwgV29yayByZXF1aXJlZCBpbiBvcmRlciB0bworY2xhc3NpZnkgYSB3b3JrIGFzIGEgRGVyaXZhdGl2ZSBXb3JrOyB0aGlzIGV4dGVudCBpcyBkZXRlcm1pbmVkIGJ5IGNvcHlyaWdodCBsYXcKK2FwcGxpY2FibGUgaW4gdGhlIGNvdW50cnkgbWVudGlvbmVkIGluIEFydGljbGUgMTUuCisKKy0gVGhlIFdvcms6IHRoZSBPcmlnaW5hbCBXb3JrIGFuZC9vciBpdHMgRGVyaXZhdGl2ZSBXb3Jrcy4KKworLSBUaGUgU291cmNlIENvZGU6IHRoZSBodW1hbi1yZWFkYWJsZSBmb3JtIG9mIHRoZSBXb3JrIHdoaWNoIGlzIHRoZSBtb3N0Citjb252ZW5pZW50IGZvciBwZW9wbGUgdG8gc3R1ZHkgYW5kIG1vZGlmeS4KKworLSBUaGUgRXhlY3V0YWJsZSBDb2RlOiBhbnkgY29kZSB3aGljaCBoYXMgZ2VuZXJhbGx5IGJlZW4gY29tcGlsZWQgYW5kIHdoaWNoIGlzCittZWFudCB0byBiZSBpbnRlcnByZXRlZCBieSBhIGNvbXB1dGVyIGFzIGEgcHJvZ3JhbS4KKworLSBUaGUgTGljZW5zb3I6IHRoZSBuYXR1cmFsIG9yIGxlZ2FsIHBlcnNvbiB0aGF0IGRpc3RyaWJ1dGVzIGFuZC9vciBjb21tdW5pY2F0ZXMgdGhlCitXb3JrIHVuZGVyIHRoZSBMaWNlbmNlLgorCistIENvbnRyaWJ1dG9yKHMpOiBhbnkgbmF0dXJhbCBvciBsZWdhbCBwZXJzb24gd2hvIG1vZGlmaWVzIHRoZSBXb3JrIHVuZGVyIHRoZQorTGljZW5jZSwgb3Igb3RoZXJ3aXNlIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBhIERlcml2YXRpdmUgV29yay4KKworLSBUaGUgTGljZW5zZWUgb3Ig4oCcWW914oCdOiBhbnkgbmF0dXJhbCBvciBsZWdhbCBwZXJzb24gd2hvIG1ha2VzIGFueSB1c2FnZSBvZiB0aGUKK1NvZnR3YXJlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5jZS4KKworLSBEaXN0cmlidXRpb24gYW5kL29yIENvbW11bmljYXRpb246IGFueSBhY3Qgb2Ygc2VsbGluZywgZ2l2aW5nLCBsZW5kaW5nLCByZW50aW5nLAorZGlzdHJpYnV0aW5nLCBjb21tdW5pY2F0aW5nLCB0cmFuc21pdHRpbmcsIG9yIG90aGVyd2lzZSBtYWtpbmcgYXZhaWxhYmxlLCBvbi1saW5lIG9yCitvZmYtbGluZSwgY29waWVzIG9mIHRoZSBXb3JrIG9yIHByb3ZpZGluZyBhY2Nlc3MgdG8gaXRzIGVzc2VudGlhbCBmdW5jdGlvbmFsaXRpZXMgYXQgdGhlCitkaXNwb3NhbCBvZiBhbnkgb3RoZXIgbmF0dXJhbCBvciBsZWdhbCBwZXJzb24uCisKKzIuIFNjb3BlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBieSB0aGUgTGljZW5jZQorCitUaGUgTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHN1YmxpY2Vuc2FibGUKK2xpY2VuY2UgdG8gZG8gdGhlIGZvbGxvd2luZywgZm9yIHRoZSBkdXJhdGlvbiBvZiBjb3B5cmlnaHQgdmVzdGVkIGluIHRoZQorT3JpZ2luYWwgV29yazoKKworLSB1c2UgdGhlIFdvcmsgaW4gYW55IGNpcmN1bXN0YW5jZSBhbmQgZm9yIGFsbCB1c2FnZSwKKy0gcmVwcm9kdWNlIHRoZSBXb3JrLAorLSBtb2RpZnkgdGhlIE9yaWdpbmFsIFdvcmssIGFuZCBtYWtlIERlcml2YXRpdmUgV29ya3MgYmFzZWQgdXBvbiB0aGUgV29yaywKKy0gY29tbXVuaWNhdGUgdG8gdGhlIHB1YmxpYywgaW5jbHVkaW5nIHRoZSByaWdodCB0byBtYWtlIGF2YWlsYWJsZSBvciBkaXNwbGF5IHRoZQorV29yayBvciBjb3BpZXMgdGhlcmVvZiB0byB0aGUgcHVibGljIGFuZCBwZXJmb3JtIHB1YmxpY2x5LCBhcyB0aGUgY2FzZSBtYXkgYmUsCit0aGUgV29yaywKKy0gZGlzdHJpYnV0ZSB0aGUgV29yayBvciBjb3BpZXMgdGhlcmVvZiwKKy0gbGVuZCBhbmQgcmVudCB0aGUgV29yayBvciBjb3BpZXMgdGhlcmVvZiwKKy0gc3ViLWxpY2Vuc2UgcmlnaHRzIGluIHRoZSBXb3JrIG9yIGNvcGllcyB0aGVyZW9mLgorCitUaG9zZSByaWdodHMgY2FuIGJlIGV4ZXJjaXNlZCBvbiBhbnkgbWVkaWEsIHN1cHBvcnRzIGFuZCBmb3JtYXRzLCB3aGV0aGVyIG5vdwora25vd24gb3IgbGF0ZXIgaW52ZW50ZWQsIGFzIGZhciBhcyB0aGUgYXBwbGljYWJsZSBsYXcgcGVybWl0cyBzby4KKworSW4gdGhlIGNvdW50cmllcyB3aGVyZSBtb3JhbCByaWdodHMgYXBwbHksIHRoZSBMaWNlbnNvciB3YWl2ZXMgaGlzIHJpZ2h0IHRvIGV4ZXJjaXNlIGhpcworbW9yYWwgcmlnaHQgdG8gdGhlIGV4dGVudCBhbGxvd2VkIGJ5IGxhdyBpbiBvcmRlciB0byBtYWtlIGVmZmVjdGl2ZSB0aGUgbGljZW5jZSBvZiB0aGUKK2Vjb25vbWljIHJpZ2h0cyBoZXJlIGFib3ZlIGxpc3RlZC4KKworVGhlIExpY2Vuc29yIGdyYW50cyB0byB0aGUgTGljZW5zZWUgcm95YWx0eS1mcmVlLCBub24gZXhjbHVzaXZlIHVzYWdlIHJpZ2h0cyB0byBhbnkKK3BhdGVudHMgaGVsZCBieSB0aGUgTGljZW5zb3IsIHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgdXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZAorb24gdGhlIFdvcmsgdW5kZXIgdGhpcyBMaWNlbmNlLgorCiszLiBDb21tdW5pY2F0aW9uIG9mIHRoZSBTb3VyY2UgQ29kZQorCitUaGUgTGljZW5zb3IgbWF5IHByb3ZpZGUgdGhlIFdvcmsgZWl0aGVyIGluIGl0cyBTb3VyY2UgQ29kZSBmb3JtLCBvciBhcyBFeGVjdXRhYmxlCitDb2RlLiBJZiB0aGUgV29yayBpcyBwcm92aWRlZCBhcyBFeGVjdXRhYmxlIENvZGUsIHRoZSBMaWNlbnNvciBwcm92aWRlcyBpbiBhZGRpdGlvbiBhCittYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBXb3JrIGFsb25nIHdpdGggZWFjaCBjb3B5IG9mIHRoZQorV29yayB0aGF0IHRoZSBMaWNlbnNvciBkaXN0cmlidXRlcyBvciBpbmRpY2F0ZXMsIGluIGEgbm90aWNlIGZvbGxvd2luZyB0aGUgY29weXJpZ2h0Citub3RpY2UgYXR0YWNoZWQgdG8gdGhlIFdvcmssIGEgcmVwb3NpdG9yeSB3aGVyZSB0aGUgU291cmNlIENvZGUgaXMgZWFzaWx5IGFuZCBmcmVlbHkKK2FjY2Vzc2libGUgZm9yIGFzIGxvbmcgYXMgdGhlIExpY2Vuc29yIGNvbnRpbnVlcyB0byBkaXN0cmlidXRlIGFuZC9vciBjb21tdW5pY2F0ZSB0aGUKK1dvcmsuCisKKzQuIExpbWl0YXRpb25zIG9uIGNvcHlyaWdodAorCitOb3RoaW5nIGluIHRoaXMgTGljZW5jZSBpcyBpbnRlbmRlZCB0byBkZXByaXZlIHRoZSBMaWNlbnNlZSBvZiB0aGUgYmVuZWZpdHMgZnJvbSBhbnkKK2V4Y2VwdGlvbiBvciBsaW1pdGF0aW9uIHRvIHRoZSBleGNsdXNpdmUgcmlnaHRzIG9mIHRoZSByaWdodHMgb3duZXJzIGluIHRoZSBPcmlnaW5hbAorV29yayBvciBTb2Z0d2FyZSwgb2YgdGhlIGV4aGF1c3Rpb24gb2YgdGhvc2UgcmlnaHRzIG9yIG9mIG90aGVyIGFwcGxpY2FibGUgbGltaXRhdGlvbnMKK3RoZXJldG8uCisKKzUuIE9ibGlnYXRpb25zIG9mIHRoZSBMaWNlbnNlZQorCitUaGUgZ3JhbnQgb2YgdGhlIHJpZ2h0cyBtZW50aW9uZWQgYWJvdmUgaXMgc3ViamVjdCB0byBzb21lIHJlc3RyaWN0aW9ucyBhbmQgb2JsaWdhdGlvbnMKK2ltcG9zZWQgb24gdGhlIExpY2Vuc2VlLiBUaG9zZSBvYmxpZ2F0aW9ucyBhcmUgdGhlIGZvbGxvd2luZzoKK0F0dHJpYnV0aW9uIHJpZ2h0OiB0aGUgTGljZW5zZWUgc2hhbGwga2VlcCBpbnRhY3QgYWxsIGNvcHlyaWdodCwgcGF0ZW50IG9yIHRyYWRlbWFya3MKK25vdGljZXMgYW5kIGFsbCBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhlIExpY2VuY2UgYW5kIHRvIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMuCisKK1RoZSBMaWNlbnNlZSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHN1Y2ggbm90aWNlcyBhbmQgYSBjb3B5IG9mIHRoZSBMaWNlbmNlIHdpdGgKK2V2ZXJ5IGNvcHkgb2YgdGhlIFdvcmsgaGUvc2hlIGRpc3RyaWJ1dGVzIGFuZC9vciBjb21tdW5pY2F0ZXMuIFRoZSBMaWNlbnNlZSBtdXN0CitjYXVzZSBhbnkgRGVyaXZhdGl2ZSBXb3JrIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB0aGUgV29yayBoYXMgYmVlbgorbW9kaWZpZWQgYW5kIHRoZSBkYXRlIG9mIG1vZGlmaWNhdGlvbi4KKworQ29weWxlZnQgY2xhdXNlOiBJZiB0aGUgTGljZW5zZWUgZGlzdHJpYnV0ZXMgYW5kL29yIGNvbW11bmljYXRlcyBjb3BpZXMgb2YgdGhlCitPcmlnaW5hbCBXb3JrcyBvciBEZXJpdmF0aXZlIFdvcmtzIGJhc2VkIHVwb24gdGhlIE9yaWdpbmFsIFdvcmssIHRoaXMgRGlzdHJpYnV0aW9uCithbmQvb3IgQ29tbXVuaWNhdGlvbiB3aWxsIGJlIGRvbmUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5jZSBvciBvZiBhIGxhdGVyCit2ZXJzaW9uIG9mIHRoaXMgTGljZW5jZSB1bmxlc3MgdGhlIE9yaWdpbmFsIFdvcmsgaXMgZXhwcmVzc2x5IGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIKK3RoaXMgdmVyc2lvbiBvZiB0aGUgTGljZW5jZS4gVGhlIExpY2Vuc2VlIChiZWNvbWluZyBMaWNlbnNvcikgY2Fubm90IG9mZmVyIG9yIGltcG9zZQorYW55IGFkZGl0aW9uYWwgdGVybXMgb3IgY29uZGl0aW9ucyBvbiB0aGUgV29yayBvciBEZXJpdmF0aXZlIFdvcmsgdGhhdCBhbHRlciBvcgorcmVzdHJpY3QgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbmNlLgorCitDb21wYXRpYmlsaXR5IGNsYXVzZTogSWYgdGhlIExpY2Vuc2VlIERpc3RyaWJ1dGVzIGFuZC9vciBDb21tdW5pY2F0ZXMgRGVyaXZhdGl2ZQorV29ya3Mgb3IgY29waWVzIHRoZXJlb2YgYmFzZWQgdXBvbiBib3RoIHRoZSBPcmlnaW5hbCBXb3JrIGFuZCBhbm90aGVyIHdvcmsKK2xpY2Vuc2VkIHVuZGVyIGEgQ29tcGF0aWJsZSBMaWNlbmNlLCB0aGlzIERpc3RyaWJ1dGlvbiBhbmQvb3IgQ29tbXVuaWNhdGlvbiBjYW4gYmUKK2RvbmUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgQ29tcGF0aWJsZSBMaWNlbmNlLiBGb3IgdGhlIHNha2Ugb2YgdGhpcyBjbGF1c2UsCivigJxDb21wYXRpYmxlIExpY2VuY2XigJ0gcmVmZXJzIHRvIHRoZSBsaWNlbmNlcyBsaXN0ZWQgaW4gdGhlIGFwcGVuZGl4IGF0dGFjaGVkIHRvIHRoaXMKK0xpY2VuY2UuIFNob3VsZCB0aGUgTGljZW5zZWXigJlzIG9ibGlnYXRpb25zIHVuZGVyIHRoZSBDb21wYXRpYmxlIExpY2VuY2UgY29uZmxpY3QKK3dpdGggaGlzL2hlciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIExpY2VuY2UsIHRoZSBvYmxpZ2F0aW9ucyBvZiB0aGUgQ29tcGF0aWJsZSBMaWNlbmNlCitzaGFsbCBwcmV2YWlsLgorCitQcm92aXNpb24gb2YgU291cmNlIENvZGU6IFdoZW4gZGlzdHJpYnV0aW5nIGFuZC9vciBjb21tdW5pY2F0aW5nIGNvcGllcyBvZiB0aGUKK1dvcmssIHRoZSBMaWNlbnNlZSB3aWxsIHByb3ZpZGUgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIG9yCitpbmRpY2F0ZSBhIHJlcG9zaXRvcnkgd2hlcmUgdGhpcyBTb3VyY2Ugd2lsbCBiZSBlYXNpbHkgYW5kIGZyZWVseSBhdmFpbGFibGUgZm9yIGFzIGxvbmcKK2FzIHRoZSBMaWNlbnNlZSBjb250aW51ZXMgdG8gZGlzdHJpYnV0ZSBhbmQvb3IgY29tbXVuaWNhdGUgdGhlIFdvcmsuCisKK0xlZ2FsIFByb3RlY3Rpb246IFRoaXMgTGljZW5jZSBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgdHJhZGUgbmFtZXMsCit0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciBuYW1lcyBvZiB0aGUgTGljZW5zb3IsIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IKK3JlYXNvbmFibGUgYW5kIGN1c3RvbWFyeSB1c2UgaW4gZGVzY3JpYmluZyB0aGUgb3JpZ2luIG9mIHRoZSBXb3JrIGFuZCByZXByb2R1Y2luZwordGhlIGNvbnRlbnQgb2YgdGhlIGNvcHlyaWdodCBub3RpY2UuCisKKzYuIENoYWluIG9mIEF1dGhvcnNoaXAKKworVGhlIG9yaWdpbmFsIExpY2Vuc29yIHdhcnJhbnRzIHRoYXQgdGhlIGNvcHlyaWdodCBpbiB0aGUgT3JpZ2luYWwgV29yayBncmFudGVkCitoZXJldW5kZXIgaXMgb3duZWQgYnkgaGltL2hlciBvciBsaWNlbnNlZCB0byBoaW0vaGVyIGFuZCB0aGF0IGhlL3NoZSBoYXMgdGhlIHBvd2VyCithbmQgYXV0aG9yaXR5IHRvIGdyYW50IHRoZSBMaWNlbmNlLgorCitFYWNoIENvbnRyaWJ1dG9yIHdhcnJhbnRzIHRoYXQgdGhlIGNvcHlyaWdodCBpbiB0aGUgbW9kaWZpY2F0aW9ucyBoZS9zaGUgYnJpbmdzIHRvIHRoZQorV29yayBhcmUgb3duZWQgYnkgaGltL2hlciBvciBsaWNlbnNlZCB0byBoaW0vaGVyIGFuZCB0aGF0IGhlL3NoZSBoYXMgdGhlIHBvd2VyIGFuZAorYXV0aG9yaXR5IHRvIGdyYW50IHRoZSBMaWNlbmNlLgorCitFYWNoIHRpbWUgWW91IGFjY2VwdCB0aGUgTGljZW5jZSwgdGhlIG9yaWdpbmFsIExpY2Vuc29yIGFuZCBzdWJzZXF1ZW50IENvbnRyaWJ1dG9ycworZ3JhbnQgWW91IGEgbGljZW5jZSB0byB0aGVpciBjb250cmlidXRpb25zIHRvIHRoZSBXb3JrLCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcworTGljZW5jZS4KKworNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eQorCitUaGUgV29yayBpcyBhIHdvcmsgaW4gcHJvZ3Jlc3MsIHdoaWNoIGlzIGNvbnRpbnVvdXNseSBpbXByb3ZlZCBieSBudW1lcm91cworY29udHJpYnV0b3JzLiBJdCBpcyBub3QgYSBmaW5pc2hlZCB3b3JrIGFuZCBtYXkgdGhlcmVmb3JlIGNvbnRhaW4gZGVmZWN0cyBvciDigJxidWdz4oCdCitpbmhlcmVudCB0byB0aGlzIHR5cGUgb2Ygc29mdHdhcmUgZGV2ZWxvcG1lbnQuCisKK0ZvciB0aGUgYWJvdmUgcmVhc29uLCB0aGUgV29yayBpcyBwcm92aWRlZCB1bmRlciB0aGUgTGljZW5jZSBvbiBhbiDigJxhcyBpc+KAnSBiYXNpcyBhbmQKK3dpdGhvdXQgd2FycmFudGllcyBvZiBhbnkga2luZCBjb25jZXJuaW5nIHRoZSBXb3JrLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCittZXJjaGFudGFiaWxpdHksIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLCBhYnNlbmNlIG9mIGRlZmVjdHMgb3IgZXJyb3JzLAorYWNjdXJhY3ksIG5vbi1pbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvdGhlciB0aGFuIGNvcHlyaWdodCBhcworc3RhdGVkIGluIEFydGljbGUgNiBvZiB0aGlzIExpY2VuY2UuCisKK1RoaXMgZGlzY2xhaW1lciBvZiB3YXJyYW50eSBpcyBhbiBlc3NlbnRpYWwgcGFydCBvZiB0aGUgTGljZW5jZSBhbmQgYSBjb25kaXRpb24gZm9yIHRoZQorZ3JhbnQgb2YgYW55IHJpZ2h0cyB0byB0aGUgV29yay4KKworOC4gRGlzY2xhaW1lciBvZiBMaWFiaWxpdHkKKworRXhjZXB0IGluIHRoZSBjYXNlcyBvZiB3aWxmdWwgbWlzY29uZHVjdCBvciBkYW1hZ2VzIGRpcmVjdGx5IGNhdXNlZCB0byBuYXR1cmFsCitwZXJzb25zLCB0aGUgTGljZW5zb3Igd2lsbCBpbiBubyBldmVudCBiZSBsaWFibGUgZm9yIGFueSBkaXJlY3Qgb3IgaW5kaXJlY3QsIG1hdGVyaWFsIG9yCittb3JhbCwgZGFtYWdlcyBvZiBhbnkga2luZCwgYXJpc2luZyBvdXQgb2YgdGhlIExpY2VuY2Ugb3Igb2YgdGhlIHVzZSBvZiB0aGUgV29yaywKK2luY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyCitmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBsb3NzIG9mIGRhdGEgb3IgYW55IGNvbW1lcmNpYWwgZGFtYWdlLCBldmVuIGlmIHRoZSBMaWNlbnNvcgoraGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2UuIEhvd2V2ZXIsIHRoZSBMaWNlbnNvciB3aWxsIGJlCitsaWFibGUgdW5kZXIgc3RhdHV0b3J5IHByb2R1Y3QgbGlhYmlsaXR5IGxhd3MgYXMgZmFyIHN1Y2ggbGF3cyBhcHBseSB0byB0aGUgV29yay4KKworOS4gQWRkaXRpb25hbCBhZ3JlZW1lbnRzCisKK1doaWxlIGRpc3RyaWJ1dGluZyB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzLCBZb3UgbWF5IGNob29zZSB0bworY29uY2x1ZGUgYW4gYWRkaXRpb25hbCBhZ3JlZW1lbnQgdG8gb2ZmZXIsIGFuZCBjaGFyZ2UgYSBmZWUgZm9yLCBhY2NlcHRhbmNlIG9mIHN1cHBvcnQsCit3YXJyYW50eSwgaW5kZW1uaXR5LCBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHNlcnZpY2VzIGNvbnNpc3RlbnQgd2l0aCB0aGlzCitMaWNlbmNlLiBIb3dldmVyLCBpbiBhY2NlcHRpbmcgc3VjaCBvYmxpZ2F0aW9ucywgWW91IG1heSBhY3Qgb25seSBvbiB5b3VyIG93bgorYmVoYWxmIGFuZCBvbiB5b3VyIHNvbGUgcmVzcG9uc2liaWxpdHksIG5vdCBvbiBiZWhhbGYgb2YgdGhlIG9yaWdpbmFsIExpY2Vuc29yIG9yIGFueQorb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksIGRlZmVuZCwgYW5kIGhvbGQgZWFjaAorQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnksIG9yIGNsYWltcyBhc3NlcnRlZCBhZ2FpbnN0IHN1Y2gKK0NvbnRyaWJ1dG9yIGJ5IHRoZSBmYWN0IFlvdSBoYXZlIGFjY2VwdGVkIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgorCisxMC4gQWNjZXB0YW5jZSBvZiB0aGUgTGljZW5jZQorCitUaGUgcHJvdmlzaW9ucyBvZiB0aGlzIExpY2VuY2UgY2FuIGJlIGFjY2VwdGVkIGJ5IGNsaWNraW5nIG9uIGFuIGljb24g4oCcSSBhZ3JlZeKAnQorcGxhY2VkIHVuZGVyIHRoZSBib3R0b20gb2YgYSB3aW5kb3cgZGlzcGxheWluZyB0aGUgdGV4dCBvZiB0aGlzIExpY2VuY2Ugb3IgYnkKK2FmZmlybWluZyBjb25zZW50IGluIGFueSBvdGhlciBzaW1pbGFyIHdheSwgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBydWxlcyBvZiBhcHBsaWNhYmxlCitsYXcuIENsaWNraW5nIG9uIHRoYXQgaWNvbiBpbmRpY2F0ZXMgeW91ciBjbGVhciBhbmQgaXJyZXZvY2FibGUgYWNjZXB0YW5jZSBvZiB0aGlzCitMaWNlbmNlIGFuZCBhbGwgb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLgorCitTaW1pbGFybHksIHlvdSBpcnJldm9jYWJseSBhY2NlcHQgdGhpcyBMaWNlbmNlIGFuZCBhbGwgb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGJ5CitleGVyY2lzaW5nIGFueSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgQXJ0aWNsZSAyIG9mIHRoaXMgTGljZW5jZSwgc3VjaCBhcyB0aGUgdXNlIG9mCit0aGUgV29yaywgdGhlIGNyZWF0aW9uIGJ5IFlvdSBvZiBhIERlcml2YXRpdmUgV29yayBvciB0aGUgRGlzdHJpYnV0aW9uIGFuZC9vcgorQ29tbXVuaWNhdGlvbiBieSBZb3Ugb2YgdGhlIFdvcmsgb3IgY29waWVzIHRoZXJlb2YuCisKKzExLiBJbmZvcm1hdGlvbiB0byB0aGUgcHVibGljCisKK0luIGNhc2Ugb2YgYW55IERpc3RyaWJ1dGlvbiBhbmQvb3IgQ29tbXVuaWNhdGlvbiBvZiB0aGUgV29yayBieSBtZWFucyBvZiBlbGVjdHJvbmljCitjb21tdW5pY2F0aW9uIGJ5IFlvdSAoZm9yIGV4YW1wbGUsIGJ5IG9mZmVyaW5nIHRvIGRvd25sb2FkIHRoZSBXb3JrIGZyb20gYQorcmVtb3RlIGxvY2F0aW9uKSB0aGUgZGlzdHJpYnV0aW9uIGNoYW5uZWwgb3IgbWVkaWEgKGZvciBleGFtcGxlLCBhIHdlYnNpdGUpIG11c3QgYXQKK2xlYXN0IHByb3ZpZGUgdG8gdGhlIHB1YmxpYyB0aGUgaW5mb3JtYXRpb24gcmVxdWVzdGVkIGJ5IHRoZSBhcHBsaWNhYmxlIGxhdyByZWdhcmRpbmcKK3RoZSBMaWNlbnNvciwgdGhlIExpY2VuY2UgYW5kIHRoZSB3YXkgaXQgbWF5IGJlIGFjY2Vzc2libGUsIGNvbmNsdWRlZCwgc3RvcmVkIGFuZAorcmVwcm9kdWNlZCBieSB0aGUgTGljZW5zZWUuCisKKzEyLiBUZXJtaW5hdGlvbiBvZiB0aGUgTGljZW5jZQorCitUaGUgTGljZW5jZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gYW55CiticmVhY2ggYnkgdGhlIExpY2Vuc2VlIG9mIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5jZS4KK1N1Y2ggYSB0ZXJtaW5hdGlvbiB3aWxsIG5vdCB0ZXJtaW5hdGUgdGhlIGxpY2VuY2VzIG9mIGFueSBwZXJzb24gd2hvIGhhcyByZWNlaXZlZCB0aGUKK1dvcmsgZnJvbSB0aGUgTGljZW5zZWUgdW5kZXIgdGhlIExpY2VuY2UsIHByb3ZpZGVkIHN1Y2ggcGVyc29ucyByZW1haW4gaW4gZnVsbAorY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbmNlLgorCisxMy4gTWlzY2VsbGFuZW91cworCitXaXRob3V0IHByZWp1ZGljZSBvZiBBcnRpY2xlIDkgYWJvdmUsIHRoZSBMaWNlbmNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudAorYmV0d2VlbiB0aGUgUGFydGllcyBhcyB0byB0aGUgV29yayBsaWNlbnNlZCBoZXJldW5kZXIuCisKK0lmIGFueSBwcm92aXNpb24gb2YgdGhlIExpY2VuY2UgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFwcGxpY2FibGUgbGF3LCB0aGlzCit3aWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSBMaWNlbmNlIGFzIGEgd2hvbGUuIFN1Y2ggcHJvdmlzaW9uCit3aWxsIGJlIGNvbnN0cnVlZCBhbmQvb3IgcmVmb3JtZWQgc28gYXMgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorVGhlIEV1cm9wZWFuIENvbW1pc3Npb24gbWF5IHB1Ymxpc2ggb3RoZXIgbGluZ3Vpc3RpYyB2ZXJzaW9ucyBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGlzIExpY2VuY2UsIHNvIGZhciB0aGlzIGlzIHJlcXVpcmVkIGFuZCByZWFzb25hYmxlLCB3aXRob3V0IHJlZHVjaW5nIHRoZSBzY29wZSBvZgordGhlIHJpZ2h0cyBncmFudGVkIGJ5IHRoZSBMaWNlbmNlLiBOZXcgdmVyc2lvbnMgb2YgdGhlIExpY2VuY2Ugd2lsbCBiZSBwdWJsaXNoZWQgd2l0aAorYSB1bmlxdWUgdmVyc2lvbiBudW1iZXIuCisKK0FsbCBsaW5ndWlzdGljIHZlcnNpb25zIG9mIHRoaXMgTGljZW5jZSwgYXBwcm92ZWQgYnkgdGhlIEV1cm9wZWFuIENvbW1pc3Npb24sIGhhdmUKK2lkZW50aWNhbCB2YWx1ZS4gUGFydGllcyBjYW4gdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIGxpbmd1aXN0aWMgdmVyc2lvbiBvZiB0aGVpciBjaG9pY2UuCisKKzE0LiBKdXJpc2RpY3Rpb24KKworQW55IGxpdGlnYXRpb24gcmVzdWx0aW5nIGZyb20gdGhlIGludGVycHJldGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgYXJpc2luZyBiZXR3ZWVuIHRoZQorRXVyb3BlYW4gQ29tbWlzc2lvbiwgYXMgYSBMaWNlbnNvciwgYW5kIGFueSBMaWNlbnNlZSwgd2lsbCBiZSBzdWJqZWN0IHRvIHRoZQoranVyaXNkaWN0aW9uIG9mIHRoZSBDb3VydCBvZiBKdXN0aWNlIG9mIHRoZSBFdXJvcGVhbiBDb21tdW5pdGllcywgYXMgbGFpZCBkb3duIGluCithcnRpY2xlIDIzOCBvZiB0aGUgVHJlYXR5IGVzdGFibGlzaGluZyB0aGUgRXVyb3BlYW4gQ29tbXVuaXR5LgorQW55IGxpdGlnYXRpb24gYXJpc2luZyBiZXR3ZWVuIFBhcnRpZXMsIG90aGVyIHRoYW4gdGhlIEV1cm9wZWFuIENvbW1pc3Npb24sIGFuZAorcmVzdWx0aW5nIGZyb20gdGhlIGludGVycHJldGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgd2lsbCBiZSBzdWJqZWN0IHRvIHRoZSBleGNsdXNpdmUKK2p1cmlzZGljdGlvbiBvZiB0aGUgY29tcGV0ZW50IGNvdXJ0IHdoZXJlIHRoZSBMaWNlbnNvciByZXNpZGVzIG9yIGNvbmR1Y3RzIGl0cyBwcmltYXJ5CitidXNpbmVzcy4KKworMTUuIEFwcGxpY2FibGUgTGF3CisKK1RoaXMgTGljZW5jZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgbGF3IG9mIHRoZSBFdXJvcGVhbiBVbmlvbiBjb3VudHJ5IHdoZXJlIHRoZQorTGljZW5zb3IgcmVzaWRlcyBvciBoYXMgaGlzIHJlZ2lzdGVyZWQgb2ZmaWNlLgorCitUaGlzIGxpY2VuY2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgdGhlIEJlbGdpYW4gbGF3IGlmOgorCistIGEgbGl0aWdhdGlvbiBhcmlzZXMgYmV0d2VlbiB0aGUgRXVyb3BlYW4gQ29tbWlzc2lvbiwgYXMgYSBMaWNlbnNvciwgYW5kIGFueQorTGljZW5zZWU7CistIHRoZSBMaWNlbnNvciwgb3RoZXIgdGhhbiB0aGUgRXVyb3BlYW4gQ29tbWlzc2lvbiwgaGFzIG5vIHJlc2lkZW5jZSBvcgorcmVnaXN0ZXJlZCBvZmZpY2UgaW5zaWRlIGEgRXVyb3BlYW4gVW5pb24gY291bnRyeS4KKworPT09CisKK0FwcGVuZGl4CisKK+KAnENvbXBhdGlibGUgTGljZW5jZXPigJ0gYWNjb3JkaW5nIHRvIGFydGljbGUgNSBFVVBMIGFyZToKKworLSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR05VIEdQTCkgdi4gMgorLSBPcGVuIFNvZnR3YXJlIExpY2Vuc2UgKE9TTCkgdi4gMi4xLCB2LiAzLjAKKy0gQ29tbW9uIFB1YmxpYyBMaWNlbnNlIHYuIDEuMAorLSBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlIHYuIDEuMAorLSBDZWNpbGwgdi4gMi4wClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvRWxlbWVudFRyZWUgYi9saWNlbnNlcy9FbGVtZW50VHJlZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzQ4YTI3Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvRWxlbWVudFRyZWUKQEAgLTAsMCArMSwyNyBAQAorRWxlbWVudFRyZWUgU29mdHdhcmUgTGljZW5zZQorCitUaGUgRWxlbWVudFRyZWUgcGFja2FnZSBhbmQgdGhlIGNFbGVtZW50VHJlZSBhY2NlbGVyYXRvciBhcmUKKworQ29weXJpZ2h0IChjKSAxOTk5LTIwMDUgYnkgU2VjcmV0IExhYnMgQUIKK0NvcHlyaWdodCAoYykgMTk5OS0yMDA1IGJ5IEZyZWRyaWsgTHVuZGgKKworQnkgb2J0YWluaW5nLCB1c2luZywgYW5kL29yIGNvcHlpbmcgdGhpcyBzb2Z0d2FyZSBhbmQvb3IgaXRzCithc3NvY2lhdGVkIGRvY3VtZW50YXRpb24sIHlvdSBhZ3JlZSB0aGF0IHlvdSBoYXZlIHJlYWQsIHVuZGVyc3Rvb2QsCithbmQgd2lsbCBjb21wbHkgd2l0aCB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zOgorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKK2Fzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieQorZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXJzIGluIGFsbAorY29waWVzLCBhbmQgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZQorYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgU2VjcmV0IExhYnMKK0FCIG9yIHRoZSBhdXRob3Igbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8KK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgorcGVybWlzc2lvbi4KKworU0VDUkVUIExBQlMgQUIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPCitUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5ECitGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgU0VDUkVUIExBQlMgQUIgT1IgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCitBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCitXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KK0FDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCitPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvRWxtIGIvbGljZW5zZXMvRWxtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNzk2MDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9FbG0KQEAgLTAsMCArMSw3NCBAQAorCisgICAgICAgICAgICAgICAgVGhlIEVsbSh0bSkgTWFpbCBTeXN0ZW0gR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAJCSAKKworICAgICAgICAgICAgICAgICAgICAoQykgQ29weXJpZ2h0IDE5ODgtMTk5MiwgVVNFTkVUIENvbW11bml0eSBUcnVzdAorCQkgICAgKEMpIENvcHlyaWdodCAxOTg2LDE5ODcsIGJ5IERhdmUgVGF5bG9yCisKKworCQkJICAJQ09QWUlORyBQT0xJQ0lFUworCisgICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgZm9yIGNvcHlpbmcgYW5kIGRpc3RyaWJ1dGlvbiBvZiBjb3BpZXMgb2YKKyAgdGhlIEVsbSBzb3VyY2UgZmlsZXMsIGFuZCB0aGF0IG9mIGFueSBwYXJ0IHRoZXJlb2YsIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyAKKyAgbGljZW5zZSBjb25kaXRpb25zOgorCisgICAgICAgIDEuIFlvdSBtYXksIHdpdGhvdXQgYWRkaXRpb25hbCBwZXJtaXNzaW9uIGZyb20gdGhlIGF1dGhvcnMsIGRpc3RyaWJ1dGUgCisgICAgICAgICAgIEVsbSBvciBjb21wb25lbnRzIG9mIEVsbSwgd2l0aCBvciB3aXRob3V0IGFkZGl0aW9ucyBkZXZlbG9wZWQgYnkgCisgICAgICAgICAgIHlvdSBvciBieSBvdGhlcnMgYXQgbm8gY2hhcmdlLiAgWW91IG1heSBhbHNvIGRpc3RyaWJ1dGUgRWxtIGFsb25nIAorICAgICAgICAgICB3aXRoIGFueSBvdGhlciBwcm9kdWN0IGZvciBzYWxlLCBwcm92aWRlZCB0aGF0IHRoZSBjb3N0IG9mIHRoZSAKKyAgICAgICAgICAgYnVuZGxlZCBwYWNrYWdlIGlzIHRoZSBzYW1lIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBFbG0gaXMgaW5jbHVkZWQsCisgICAgICAgICAgIGFuZCBwcm92aWRlZCB0aGF0IHRob3NlIGludGVyZXN0ZWQgb25seSBpbiBFbG0gbXVzdCBiZSBub3RpZmllZCAKKyAgICAgICAgICAgdGhhdCBpdCBpcyBhIHByb2R1Y3QgZnJlZWx5IGF2YWlsYWJsZSBmcm9tIHRoZSBFbG0gRGV2ZWxvcG1lbnQgR3JvdXAuCisKKyAgICAgICAgMi4gWW91IG1heSwgd2l0aG91dCBhZGRpdGlvbmFsIHBlcm1pc3Npb24gZnJvbSB0aGUgYXV0aG9ycywgZGlzdHJpYnV0ZSAKKwkgICBjb3BpZXMgb2YgdGhlIEVsbSBEb2N1bWVudGF0aW9uLCB3aXRoIG9yIHdpdGhvdXQgYWRkaXRpb25zIGRldmVsb3BlZCBieSAKKyAgICAgICAgICAgeW91IG9yIGJ5IG90aGVycyBhdCBubyBjaGFyZ2Ugb3IgYXQgYSBjaGFyZ2UgdGhhdCBjb3ZlcnMgdGhlIGNvc3Qgb2YKKwkgICByZXByb2R1Y2luZyB0aGUgY29waWVzLCBwcm92aWRlZCB0aGF0IHRoZSBFbG0gY29weXJpZ2h0IG5vdGljZSBpcworCSAgIHJldGFpbmVkLgorCisgICAgICAgIDMuIEZ1cnRoZXJtb3JlLCBpZiB5b3UgZGlzdHJpYnV0ZSBFbG0gc29mdHdhcmUgb3IgcGFydHMgb2YgRWxtLCB3aXRoIAorICAgICAgICAgICBvciB3aXRob3V0IGFkZGl0aW9ucyBkZXZlbG9wZWQgYnkgeW91IG9yIG90aGVycywgdGhlbiB5b3UgbXVzdCAKKyAgICAgICAgICAgZWl0aGVyIG1ha2UgYXZhaWxhYmxlIHRoZSBzb3VyY2UgdG8gYWxsIHBvcnRpb25zIG9mIHRoZSBFbG0gc3lzdGVtIAorICAgICAgICAgICAoZXhjbHVzaXZlIG9mIGFueSBhZGRpdGlvbnMgbWFkZSBieSB5b3Ugb3IgYnkgb3RoZXJzKSB1cG9uIHJlcXVlc3QsIAorICAgICAgICAgICBvciBpbnN0ZWFkIHlvdSBtYXkgbm90aWZ5IGFueW9uZSByZXF1ZXN0aW5nIHNvdXJjZSB0aGF0IGl0IGlzIAorICAgICAgICAgICBmcmVlbHkgYXZhaWxhYmxlIGZyb20gdGhlIEVsbSBEZXZlbG9wbWVudCBHcm91cC4KKworICAgICAgICA0LiBJbiBhZGRpdGlvbiwgeW91IG1heSBub3Qgb21pdCBhbnkgb2YgdGhlIGNvcHlyaWdodCBub3RpY2VzCisgICAgICAgICAgIG9uIGVpdGhlciB0aGUgc291cmNlIGZpbGVzLCB0aGUgZXhlY3V0YWJsZSBmaWxlLCBvciB0aGUgCisgICAgICAgICAgIGRvY3VtZW50YXRpb24sIGFuZAorCisgICAgICAgIDUuIEFsc28sIHlvdSBtYXkgbm90IG9taXQgdHJhbnNtaXNzaW9uIG9mIHRoaXMgTGljZW5zZSBhZ3JlZW1lbnQgd2l0aCAKKyAgICAgICAgICAgd2hhdGV2ZXIgcG9ydGlvbnMgb2YgRWxtIHRoYXQgYXJlIGRpc3RyaWJ1dGVkLgorCisgICAgICAgIDYuIExhc3RseSwgYW55IHVzZXJzIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBiZSBub3RpZmllZCB0aGF0IGl0IGlzCisgICAgICAgICAgIHdpdGhvdXQgd2FycmFudGVlIG9yIGd1YXJhbnRlZSBvZiBhbnkgbmF0dXJlLCBleHByZXNzIG9yIGltcGxpZWQsIAorICAgICAgICAgICBub3IgaXMgdGhlcmUgYW55IGZpdG5lc3MgZm9yIHVzZSByZXByZXNlbnRlZC4KKworU29mdHdhcmUgaXMgYSBtYWxsZWFibGUgdGhpbmcgLSBlc3BlY2lhbGx5IFVOSVggLSBhbmQgdGhlIGF1dGhvcnMgY2FuIGluIG5vCit3YXkgZ3VhcmFudGVlIHRoYXQgdXNpbmcgdGhpcyBwcm9ncmFtIHdpbGwgbm90IGNhdXNlIGdyaWV2b3VzIGRhbWFnZSB0byB5b3VyCitzeXN0ZW0uICBPZiBjb3Vyc2UgdGhpcyBpc24ndCBhbnRpY2lwYXRlZCwgYnV0IGlmIGl0IGRvZXMgaGFwcGVuLCB0aGUgYXV0aG9ycworY2Fubm90IGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBlaXRoZXIgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBjYXVzZWQKK2J5IHRoaXMgZXZlbnQuCisKK01vZGlmaWNhdGlvbiBvZiB0aGUgc3lzdGVtIGlzIGVuY291cmFnZWQsIHByb3ZpZGluZyB0aGF0IHRoZSBwb3J0aW9ucyBvZiAKK3RoZSBzeXN0ZW0gdGhhdCBhcmUgZnJvbSB0aGUgb3JpZ2luYWwgc3RpbGwgY2FycnkgdGhlIGFwcHJvcHJpYXRlIGNvcHlyaWdodAorbm90aWNlcyBhbmQgdGhhdCB0aGUgY2hhbmdlZCBzZWN0aW9ucyBhcmUgY2xlYXJseSBkZWxpbWl0ZWQgYXMgc3VjaC4gIFRoZQorYXV0aG9ycyByZXF1ZXN0cyBjb3BpZXMgb2YgYW55IGNoYW5nZXMgbWFkZSB0byBlbnN1cmUgdGhhdCB0aGUgdmFyaW91cyB2ZXJzaW9ucworc3RheSByZWFzb25hYmx5IGluIHN5bmMgd2l0aCBlYWNoIG90aGVyLiAgUGxlYXNlIHNlbmQgYWxsIHJldmlzaW9ucyB0bworZWxtQERTSS5DT00uCisKK05PVEUgdGhhdCBpdCBpcyBub3QgcGVybWl0dGVkIHRvIGNvcHksIHN1YmxpY2Vuc2UsIGRpc3RyaWJ1dGUgb3IgdHJhbnNmZXIgYW55CitvZiB0aGUgRWxtIHNvZnR3YXJlIGV4Y2VwdCBhcyBleHByZXNzbHkgaW5kaWNhdGVkIGhlcmVpbi4gIEFueSBhdHRlbXB0cyB0bworZG8gb3RoZXJ3aXNlIHdpbGwgYmUgY29uc2lkZXJlZCBhIHZpb2xhdGlvbiBvZiB0aGlzIGxpY2Vuc2UgYW5kIHlvdXIgcmlnaHRzCit0byB0aGUgRWxtIHNvZnR3YXJlIHdpbGwgYmUgdm9pZGVkLgorCisKK0NvbW1lbnRzIG9uIHRoZSBzeXN0ZW0gYW5kL29yIHRoaXMgbGljZW5zaW5nIGFncmVlbWVudCBpcyBlbmNvdXJhZ2VkLiAgU2VuZAorZWxlY3Ryb25pYyBtYWlsIHRvICJ0YXlsb3JAaW50dWl0aXZlLmNvbSIuICBUaGlzIGxpY2Vuc2Ugd2FzIHdyaXR0ZW4gd2l0aAoraGVscCBmcm9tIFNjb3R0IE1jR3JlZ29yLiAgVGhhbmtzIFNjb3R0IQorCistLS0tCitFbG0gaXMgYSB0cmFkZW1hcmsgb2YgRGF2ZSBUYXlsb3IuIAorCitOT1RFOiBFbG0gaXMgbm93IGluIHRoZSBwdWJsaWMgdHJ1c3QuIENvbW1lbnRzLCBzdWdnZXN0aW9ucywgYnVnIHJlcG9ydHMgYW5kIHRoZQorbGlrZSBzaG91bGQgYmUgc2VudCB0byBTeWQgV2VpbnN0ZWluOyBlbG1ARFNJLkNPTSAoZHNpbmMhZWxtKQpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvRW1hY3MgYi9saWNlbnNlcy9FbWFjcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zY2U4ZGE5Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvRW1hY3MKQEAgLTAsMCArMSwxNDYgQEAKKwkJIEdOVSBFTUFDUyBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisJCSAgICAoQ2xhcmlmaWVkIDExIEZlYiAxOTg4KQorCisgQ29weXJpZ2h0IChDKSAxOTg1LCAxOTg3LCAxOTg4IFJpY2hhcmQgTS4gU3RhbGxtYW4KKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4gIFlvdSBjYW4gYWxzbworIHVzZSB0aGlzIHdvcmRpbmcgdG8gbWFrZSB0aGUgdGVybXMgZm9yIG90aGVyIHByb2dyYW1zLgorCisgIFRoZSBsaWNlbnNlIGFncmVlbWVudHMgb2YgbW9zdCBzb2Z0d2FyZSBjb21wYW5pZXMga2VlcCB5b3UgYXQgdGhlCittZXJjeSBvZiB0aG9zZSBjb21wYW5pZXMuICBCeSBjb250cmFzdCwgb3VyIGdlbmVyYWwgcHVibGljIGxpY2Vuc2UgaXMKK2ludGVuZGVkIHRvIGdpdmUgZXZlcnlvbmUgdGhlIHJpZ2h0IHRvIHNoYXJlIEdOVSBFbWFjcy4gIFRvIG1ha2UKK3N1cmUgdGhhdCB5b3UgZ2V0IHRoZSByaWdodHMgd2Ugd2FudCB5b3UgdG8gaGF2ZSwgd2UgbmVlZCB0byBtYWtlCityZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQgYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91Cit0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4gIEhlbmNlIHRoaXMgbGljZW5zZSBhZ3JlZW1lbnQuCisKKyAgU3BlY2lmaWNhbGx5LCB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSByaWdodCB0byBnaXZlCithd2F5IGNvcGllcyBvZiBFbWFjcywgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBlbHNlIGNhbiBnZXQgaXQKK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIEVtYWNzIG9yIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3CitmcmVlIHByb2dyYW1zLCBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBtYWtlIHN1cmUgdGhhdCBldmVyeW9uZSBoYXMgc3VjaCByaWdodHMsIHdlIGhhdmUgdG8gZm9yYmlkIHlvdSB0bworZGVwcml2ZSBhbnlvbmUgZWxzZSBvZiB0aGVzZSByaWdodHMuICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUKK2NvcGllcyBvZiBFbWFjcywgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHlvdQoraGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorc291cmNlIGNvZGUuICBBbmQgeW91IG11c3QgdGVsbCB0aGVtIHRoZWlyIHJpZ2h0cy4KKworICBBbHNvLCBmb3Igb3VyIG93biBwcm90ZWN0aW9uLCB3ZSBtdXN0IG1ha2UgY2VydGFpbiB0aGF0IGV2ZXJ5b25lCitmaW5kcyBvdXQgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgR05VIEVtYWNzLiAgSWYgRW1hY3MgaXMKK21vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZSB3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cKK3RoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHdoYXQgd2UgZGlzdHJpYnV0ZWQsIHNvIHRoYXQgYW55IHByb2JsZW1zCitpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIG91ciByZXB1dGF0aW9uLgorCisgIFRoZXJlZm9yZSB3ZSAoUmljaGFyZCBTdGFsbG1hbiBhbmQgdGhlIEZyZWUgU29mdHdhcmUgRnVuZGF0aW9uLAorSW5jLikgbWFrZSB0aGUgZm9sbG93aW5nIHRlcm1zIHdoaWNoIHNheSB3aGF0IHlvdSBtdXN0IGRvIHRvIGJlCithbGxvd2VkIHRvIGRpc3RyaWJ1dGUgb3IgY2hhbmdlIEdOVSBFbWFjcy4KKworCQkJQ09QWUlORyBQT0xJQ0lFUworCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgR05VIEVtYWNzIHNvdXJjZSBjb2RlCithcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UgY29uc3BpY3VvdXNseSBhbmQKK2FwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYSB2YWxpZCBjb3B5cmlnaHQgbm90aWNlICJDb3B5cmlnaHQKKyhDKSAxOTg4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiIgKG9yIHdpdGggd2hhdGV2ZXIgeWVhciBpcworYXBwcm9wcmlhdGUpOyBrZWVwIGludGFjdCB0aGUgbm90aWNlcyBvbiBhbGwgZmlsZXMgdGhhdCByZWZlciB0byB0aGlzCitMaWNlbnNlIEFncmVlbWVudCBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OyBhbmQgZ2l2ZSBhbnkKK290aGVyIHJlY2lwaWVudHMgb2YgdGhlIEdOVSBFbWFjcyBwcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKK0FncmVlbWVudCBhbG9uZyB3aXRoIHRoZSBwcm9ncmFtLiAgWW91IG1heSBjaGFyZ2UgYSBkaXN0cmlidXRpb24gZmVlCitmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgR05VIEVtYWNzIHNvdXJjZSBjb2RlIG9yCithbnkgcG9ydGlvbiBvZiBpdCwgYW5kIGNvcHkgYW5kIGRpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIHVuZGVyCit0aGUgdGVybXMgb2YgUGFyYWdyYXBoIDEgYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gdGhlIGZvbGxvd2luZzoKKworICAgIGEpIGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nCisgICAgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2U7IGFuZAorCisgICAgYikgY2F1c2UgdGhlIHdob2xlIG9mIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwKKyAgICB0aGF0IGluIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgYSBkZXJpdmF0aXZlIG9mIEdOVSBFbWFjcworICAgIG9yIGFueSBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKKyAgICBwYXJ0aWVzIG9uIHRlcm1zIGlkZW50aWNhbCB0byB0aG9zZSBjb250YWluZWQgaW4gdGhpcyBMaWNlbnNlCisgICAgQWdyZWVtZW50IChleGNlcHQgdGhhdCB5b3UgbWF5IGNob29zZSB0byBncmFudCBtb3JlIGV4dGVuc2l2ZQorICAgIHdhcnJhbnR5IHByb3RlY3Rpb24gdG8gc29tZSBvciBhbGwgdGhpcmQgcGFydGllcywgYXQgeW91ciBvcHRpb24pLgorCisgICAgYykgaWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gc2VydmVzIGFzIGEgdGV4dCBlZGl0b3IsIGNhdXNlIGl0IHdoZW4KKyAgICBzdGFydGVkIHJ1bm5pbmcgaW4gdGhlIHNpbXBsZXN0IGFuZCB1c3VhbCB3YXksIHRvIHByaW50IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhIHZhbGlkIGNvcHlyaWdodCBub3RpY2UgIkNvcHlyaWdodCAoQykKKyAgICAxOTg4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiIgKG9yIHdpdGggdGhlIHllYXIgdGhhdCBpcworICAgIGFwcHJvcHJpYXRlKSwgc2F5aW5nIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZworICAgIHRoYXQgeW91IHByb3ZpZGUgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUKKyAgICBwcm9ncmFtIHVuZGVyIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEKKyAgICBjb3B5IG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuCisKKyAgICBkKSBZb3UgbWF5IGNoYXJnZSBhIGRpc3RyaWJ1dGlvbiBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YKKyAgICB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eQorICAgIHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCitNZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgdW5yZWxhdGVkIHByb2dyYW0gd2l0aCB0aGlzIHByb2dyYW0gKG9yIGl0cworZGVyaXZhdGl2ZSkgb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcKK3RoZSBvdGhlciBwcm9ncmFtIHVuZGVyIHRoZSBzY29wZSBvZiB0aGVzZSB0ZXJtcy4KKworICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgR05VIEVtYWNzIChvciBhIHBvcnRpb24gb3IgZGVyaXZhdGl2ZSBvZiBpdCwKK3VuZGVyIFBhcmFncmFwaCAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitQYXJhZ3JhcGhzIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIGEpIGFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAgICBQYXJhZ3JhcGhzIDEgYW5kIDIgYWJvdmU7IG9yLAorCisgICAgYikgYWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKyAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHkgZnJlZSAoZXhjZXB0IGZvciBhIG5vbWluYWwKKyAgICBzaGlwcGluZyBjaGFyZ2UpIGEgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZQorICAgIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICAgIFBhcmFncmFwaHMgMSBhbmQgMiBhYm92ZTsgb3IsCisKKyAgICBjKSBhY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHdoZXJlIHRoZQorICAgIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSBhbG9uZS4pCisKK0ZvciBhbiBleGVjdXRhYmxlIGZpbGUsIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yCithbGwgbW9kdWxlcyBpdCBjb250YWluczsgYnV0LCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBpdCBuZWVkIG5vdCBpbmNsdWRlCitzb3VyY2UgY29kZSBmb3IgbW9kdWxlcyB3aGljaCBhcmUgc3RhbmRhcmQgbGlicmFyaWVzIHRoYXQgYWNjb21wYW55IHRoZQorb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBmaWxlIHJ1bnMuCisKKyAgNC4gWW91IG1heSBub3QgY29weSwgc3VibGljZW5zZSwgZGlzdHJpYnV0ZSBvciB0cmFuc2ZlciBHTlUgRW1hY3MKK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gIEFueSBhdHRlbXB0CitvdGhlcndpc2UgdG8gY29weSwgc3VibGljZW5zZSwgZGlzdHJpYnV0ZSBvciB0cmFuc2ZlciBHTlUgRW1hY3MgaXMgdm9pZCBhbmQKK3lvdXIgcmlnaHRzIHRvIHVzZSBHTlUgRW1hY3MgdW5kZXIgdGhpcyBMaWNlbnNlIGFncmVlbWVudCBzaGFsbCBiZQorYXV0b21hdGljYWxseSB0ZXJtaW5hdGVkLiAgSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb21wdXRlcgorc29mdHdhcmUgcHJvZ3JhbXMgZnJvbSB5b3Ugd2l0aCB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IHdpbGwgbm90IGhhdmUKK3RoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA1LiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiBHTlUgRW1hY3MgaW50byBvdGhlciBmcmVlIHByb2dyYW1zCit3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4gIFdlIGhhdmUgbm90IHlldCB3b3JrZWQgb3V0IGEgc2ltcGxlIHJ1bGUgdGhhdCBjYW4gYmUgc3RhdGVkCitoZXJlLCBidXQgd2Ugd2lsbCBvZnRlbiBwZXJtaXQgdGhpcy4gIFdlIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMgb2YKK3ByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQgb2YKK3Byb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUuCisKK1lvdXIgY29tbWVudHMgYW5kIHN1Z2dlc3Rpb25zIGFib3V0IG91ciBsaWNlbnNpbmcgcG9saWNpZXMgYW5kIG91cgorc29mdHdhcmUgYXJlIHdlbGNvbWUhICBQbGVhc2UgY29udGFjdCB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBvciBjYWxsICg2MTcpIDg3Ni0zMjk2LgorCisJCQkgICBOTyBXQVJSQU5UWQorCisgIEJFQ0FVU0UgR05VIEVNQUNTIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBXRSBQUk9WSURFIEFCU09MVVRFTFkKK05PIFdBUlJBTlRZLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIFNUQVRFIExBVy4gIEVYQ0VQVAorV0hFTiBPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcsIEZSRUUgU09GVFdBUkUgRk9VTkRBVElPTiwgSU5DLAorUklDSEFSRCBNLiBTVEFMTE1BTiBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIEdOVSBFTUFDUyAiQVMgSVMiCitXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywKK0JVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5ECitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWQorQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRSBHTlUgRU1BQ1MKK1BST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkKK1NFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKyBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgV0lMTCBGUkVFIFNPRlRXQVJFCitGT1VOREFUSU9OLCBJTkMuLCBSSUNIQVJEIE0uIFNUQUxMTUFOLCBBTkQvT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkKK01PRElGWSBBTkQgUkVESVNUUklCVVRFIEdOVSBFTUFDUyBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UKK0ZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZIExPU1QgUFJPRklUUywgTE9TVCBNT05JRVMsIE9SIE9USEVSCitTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SCitJTkFCSUxJVFkgVE8gVVNFIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBCitCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkgVEhJUkQgUEFSVElFUyBPUiBBCitGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBQUk9HUkFNUyBOT1QgRElTVFJJQlVURUQgQlkKK0ZSRUUgU09GVFdBUkUgRk9VTkRBVElPTiwgSU5DLikgVEhFIFBST0dSQU0sIEVWRU4gSUYgWU9VIEhBVkUgQkVFTgorQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLCBPUiBGT1IgQU5ZIENMQUlNIEJZIEFOWQorT1RIRVIgUEFSVFkuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9FcGluaW9ucyBiL2xpY2Vuc2VzL0VwaW5pb25zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMzk1NjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9FcGluaW9ucwpAQCAtMCwwICsxLDIxIEBACitDb3B5cmlnaHQgMjAwMCBFcGluaW9ucywgSW5jLgorCitTdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgMyBjb25kaXRpb25zLCBFcGluaW9ucywgSW5jLiBwZXJtaXRzIHlvdSwgZnJlZQorb2YgY2hhcmdlLCB0byAoYSkgdXNlLCBjb3B5LCBkaXN0cmlidXRlLCBtb2RpZnksIHBlcmZvcm0gYW5kIGRpc3BsYXkKK3RoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCBhbmQKKyhiKSBwZXJtaXQgb3RoZXJzIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbyBhcyB3ZWxsLgorCisxKSBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQoraW5jbHVkZWQgd2l0aG91dCBtb2RpZmljYXRpb24gaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZgordGhlIFNvZnR3YXJlLgorCisyKSBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBBTlkgV0FSUkFOVFkgT1IgQ09ORElUSU9OCitPRiBBTlkgS0lORCwgRVhQUkVTUywgSU1QTElFRCBPUiBTVEFUVVRPUlksIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04KK0FOWSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgQUNDVVJBQ1ksIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQQorUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4KKworMykgSU4gTk8gRVZFTlQgU0hBTEwgRVBJTklPTlMsIElOQy4gQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKK1NQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIExPU1QgUFJPRklUUyBBUklTSU5HIE9VVAorT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSAoSE9XRVZFUiBBUklTSU5HLCBJTkNMVURJTkcKK05FR0xJR0VOQ0UpLCBFVkVOIElGIEVQSU5JT05TLCBJTkMuIElTIEFXQVJFIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICitEQU1BR0VTLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvRXJsUEwtMS4xIGIvbGljZW5zZXMvRXJsUEwtMS4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyOWQxMzkKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9FcmxQTC0xLjEKQEAgLTAsMCArMSwyODYgQEAKK0VSTEFORyBQVUJMSUMgTElDRU5TRQorVmVyc2lvbiAxLjEKKworMS4gRGVmaW5pdGlvbnMuCisKKzEuMS4gYGBDb250cmlidXRvcicnIG1lYW5zIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0bwordGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisKKzEuMi4gYGBDb250cmlidXRvciBWZXJzaW9uJycgbWVhbnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbAorQ29kZSwgcHJpb3IgTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEgQ29udHJpYnV0b3IsIGFuZCB0aGUgTW9kaWZpY2F0aW9ucworbWFkZSBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuCisKKzEuMy4gYGBDb3ZlcmVkIENvZGUnJyBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIG9yIHRoZQorY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgYW5kIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZQoraW5jbHVkaW5nIHBvcnRpb25zIHRoZXJlb2YuCisKKzEuNC4gYGBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20nJyBtZWFucyBhIG1lY2hhbmlzbSBnZW5lcmFsbHkKK2FjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljCit0cmFuc2ZlciBvZiBkYXRhLgorCisxLjUuIGBgRXhlY3V0YWJsZScnIG1lYW5zIENvdmVyZWQgQ29kZSBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIFNvdXJjZQorQ29kZS4KKworMS42LiBgYEluaXRpYWwgRGV2ZWxvcGVyJycgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IGlkZW50aWZpZWQKK2FzIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQKK0EuCisKKzEuNy4gYGBMYXJnZXIgV29yaycnIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IKK3BvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisxLjguIGBgTGljZW5zZScnIG1lYW5zIHRoaXMgZG9jdW1lbnQuCisKKzEuOS4gYGBNb2RpZmljYXRpb25zJycgbWVhbnMgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlCitzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbnkgcHJldmlvdXMKK01vZGlmaWNhdGlvbnMuIFdoZW4gQ292ZXJlZCBDb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhCitNb2RpZmljYXRpb24gaXM6CisKK0EuIEFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZworICAgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLgorCitCLiBBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvcgorICAgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KKworMS4xMC4gYGBPcmlnaW5hbCBDb2RlJycgbWVhbnMgU291cmNlIENvZGUgb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZQord2hpY2ggaXMgZGVzY3JpYmVkIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBIGFzCitPcmlnaW5hbCBDb2RlLCBhbmQgd2hpY2gsIGF0IHRoZSB0aW1lIG9mIGl0cyByZWxlYXNlIHVuZGVyIHRoaXMKK0xpY2Vuc2UgaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS4KKworMS4xMS4gYGBTb3VyY2UgQ29kZScnIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgQ292ZXJlZCBDb2RlIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cworYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sCitjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIEV4ZWN1dGFibGUsIG9yIGEgbGlzdCBvZiBzb3VyY2UKK2NvZGUgZGlmZmVyZW50aWFsIGNvbXBhcmlzb25zIGFnYWluc3QgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yCithbm90aGVyIHdlbGwga25vd24sIGF2YWlsYWJsZSBDb3ZlcmVkIENvZGUgb2YgdGhlIENvbnRyaWJ1dG9yJ3MKK2Nob2ljZS4gVGhlIFNvdXJjZSBDb2RlIGNhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwKK3Byb3ZpZGVkIHRoZSBhcHByb3ByaWF0ZSBkZWNvbXByZXNzaW9uIG9yIGRlLWFyY2hpdmluZyBzb2Z0d2FyZSBpcword2lkZWx5IGF2YWlsYWJsZSBmb3Igbm8gY2hhcmdlLgorCisxLjEyLiBgYFlvdScnIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMKK3VuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwKK2VudGl0aWVzLGBgWW91JycgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwKK29yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLAorYGBjb250cm9sJycgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUKK2RpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCitvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQorb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisyLiBTb3VyY2UgQ29kZSBMaWNlbnNlLgorCisyLjEuIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4KK1RoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwKK25vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkKK2NsYWltczoKKworKGEpIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kCisgICAgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikgd2l0aCBvciB3aXRob3V0CisgICAgTW9kaWZpY2F0aW9ucywgb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKworKGIpIHVuZGVyIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5IEluaXRpYWwKKyAgICBEZXZlbG9wZXIsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlIGFuZCBzZWxsIChgYFV0aWxpemUnJykgdGhlCisgICAgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZiksIGJ1dCBzb2xlbHkgdG8gdGhlIGV4dGVudCB0aGF0CisgICAgYW55IHN1Y2ggcGF0ZW50IGlzIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGVuYWJsZSBZb3UgdG8gVXRpbGl6ZQorICAgIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSBhbmQgbm90IHRvIGFueSBncmVhdGVyCisgICAgZXh0ZW50IHRoYXQgbWF5IGJlIG5lY2Vzc2FyeSB0byBVdGlsaXplIGZ1cnRoZXIgTW9kaWZpY2F0aW9ucyBvcgorICAgIGNvbWJpbmF0aW9ucy4KKworMi4yLiBDb250cmlidXRvciBHcmFudC4KK0VhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsCitub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5CitjbGFpbXM6CisKKyhhKSB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZAorICAgIGRpc3RyaWJ1dGUgdGhlIE1vZGlmaWNhdGlvbnMgY3JlYXRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIChvcgorICAgIHBvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyCisgICAgTW9kaWZpY2F0aW9ucywgYXMgQ292ZXJlZCBDb2RlIG9yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisKKyhiKSB1bmRlciBwYXRlbnRzIG5vdyBvciBoZXJlYWZ0ZXIgb3duZWQgb3IgY29udHJvbGxlZCBieSBDb250cmlidXRvciwKKyAgICB0byBVdGlsaXplIHRoZSBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyB0aGVyZW9mKSwgYnV0CisgICAgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgc3VjaCBwYXRlbnQgaXMgcmVhc29uYWJseSBuZWNlc3NhcnkKKyAgICB0byBlbmFibGUgWW91IHRvIFV0aWxpemUgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zCisgICAgdGhlcmVvZiksIGFuZCBub3QgdG8gYW55IGdyZWF0ZXIgZXh0ZW50IHRoYXQgbWF5IGJlIG5lY2Vzc2FyeSB0bworICAgIFV0aWxpemUgZnVydGhlciBNb2RpZmljYXRpb25zIG9yIGNvbWJpbmF0aW9ucy4KKworMy4gRGlzdHJpYnV0aW9uIE9ibGlnYXRpb25zLgorCiszLjEuIEFwcGxpY2F0aW9uIG9mIExpY2Vuc2UuCitUaGUgTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gU2VjdGlvbiAyLjIuIFRoZSBTb3VyY2UKK0NvZGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgbWF5IGJlIGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zCitvZiB0aGlzIExpY2Vuc2UsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aAorZXZlcnkgY29weSBvZiB0aGUgU291cmNlIENvZGUgWW91IGRpc3RyaWJ1dGUuIFlvdSBtYXkgbm90IG9mZmVyIG9yCitpbXBvc2UgYW55IHRlcm1zIG9uIGFueSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHRoYXQgYWx0ZXJzIG9yIHJlc3RyaWN0cwordGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHMnIHJpZ2h0cworaGVyZXVuZGVyLiBIb3dldmVyLCBZb3UgbWF5IGluY2x1ZGUgYW4gYWRkaXRpb25hbCBkb2N1bWVudCBvZmZlcmluZwordGhlIGFkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNS4KKworMy4yLiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuCitBbnkgTW9kaWZpY2F0aW9uIHdoaWNoIFlvdSBjb250cmlidXRlIG11c3QgYmUgbWFkZSBhdmFpbGFibGUgaW4gU291cmNlCitDb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBlaXRoZXIgb24gdGhlIHNhbWUgbWVkaWEgYXMKK2FuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciB2aWEgYW4gYWNjZXB0ZWQgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24KK01lY2hhbmlzbSB0byBhbnlvbmUgdG8gd2hvbSB5b3UgbWFkZSBhbiBFeGVjdXRhYmxlIHZlcnNpb24gYXZhaWxhYmxlOworYW5kIGlmIG1hZGUgYXZhaWxhYmxlIHZpYSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20sIG11c3QKK3JlbWFpbiBhdmFpbGFibGUgZm9yIGF0IGxlYXN0IHR3ZWx2ZSAoMTIpIG1vbnRocyBhZnRlciB0aGUgZGF0ZSBpdAoraW5pdGlhbGx5IGJlY2FtZSBhdmFpbGFibGUsIG9yIGF0IGxlYXN0IHNpeCAoNikgbW9udGhzIGFmdGVyIGEKK3N1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGF0IHBhcnRpY3VsYXIgTW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUKK2F2YWlsYWJsZSB0byBzdWNoIHJlY2lwaWVudHMuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQKK3RoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHJlbWFpbnMgYXZhaWxhYmxlIGV2ZW4gaWYgdGhlIEVsZWN0cm9uaWMKK0Rpc3RyaWJ1dGlvbiBNZWNoYW5pc20gaXMgbWFpbnRhaW5lZCBieSBhIHRoaXJkIHBhcnR5LgorCiszLjMuIERlc2NyaXB0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCitZb3UgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBDb2RlIHRvIHdoaWNoIHlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4gYQorZmlsZSBkb2N1bWVudGluZyB0aGUgY2hhbmdlcyBZb3UgbWFkZSB0byBjcmVhdGUgdGhhdCBDb3ZlcmVkIENvZGUgYW5kCit0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLiBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0Cit0aGUgTW9kaWZpY2F0aW9uIGlzIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwKK0NvZGUgcHJvdmlkZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlCitJbml0aWFsIERldmVsb3BlciBpbiAoYSkgdGhlIFNvdXJjZSBDb2RlLCBhbmQgKGIpIGluIGFueSBub3RpY2UgaW4gYW4KK0V4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gaW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZQorb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgQ292ZXJlZCBDb2RlLgorCiszLjQuIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzCisKKyhhKSBUaGlyZCBQYXJ0eSBDbGFpbXMuCisgICAgSWYgWW91IGhhdmUga25vd2xlZGdlIHRoYXQgYSBwYXJ0eSBjbGFpbXMgYW4gaW50ZWxsZWN0dWFsIHByb3BlcnR5CisgICAgcmlnaHQgaW4gcGFydGljdWxhciBmdW5jdGlvbmFsaXR5IG9yIGNvZGUgKG9yIGl0cyB1dGlsaXphdGlvbgorICAgIHVuZGVyIHRoaXMgTGljZW5zZSksIHlvdSBtdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgc291cmNlCisgICAgY29kZSBkaXN0cmlidXRpb24gdGl0bGVkIGBgTEVHQUwnJyB3aGljaCBkZXNjcmliZXMgdGhlIGNsYWltIGFuZAorICAgIHRoZSBwYXJ0eSBtYWtpbmcgdGhlIGNsYWltIGluIHN1ZmZpY2llbnQgZGV0YWlsIHRoYXQgYSByZWNpcGllbnQKKyAgICB3aWxsIGtub3cgd2hvbSB0byBjb250YWN0LiBJZiB5b3Ugb2J0YWluIHN1Y2gga25vd2xlZGdlIGFmdGVyIFlvdQorICAgIG1ha2UgWW91ciBNb2RpZmljYXRpb24gYXZhaWxhYmxlIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMiwgWW91CisgICAgc2hhbGwgcHJvbXB0bHkgbW9kaWZ5IHRoZSBMRUdBTCBmaWxlIGluIGFsbCBjb3BpZXMgWW91IG1ha2UKKyAgICBhdmFpbGFibGUgdGhlcmVhZnRlciBhbmQgc2hhbGwgdGFrZSBvdGhlciBzdGVwcyAoc3VjaCBhcyBub3RpZnlpbmcKKyAgICBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3RzIG9yIG5ld3Nncm91cHMpIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0bworICAgIGluZm9ybSB0aG9zZSB3aG8gcmVjZWl2ZWQgdGhlIENvdmVyZWQgQ29kZSB0aGF0IG5ldyBrbm93bGVkZ2UgaGFzCisgICAgYmVlbiBvYnRhaW5lZC4KKworKGIpIENvbnRyaWJ1dG9yIEFQSXMuCisgICAgSWYgWW91ciBNb2RpZmljYXRpb24gaXMgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGFuZAorICAgIFlvdSBvd24gb3IgY29udHJvbCBwYXRlbnRzIHdoaWNoIGFyZSByZWFzb25hYmx5IG5lY2Vzc2FyeSB0bworICAgIGltcGxlbWVudCB0aGF0IEFQSSwgeW91IG11c3QgYWxzbyBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlCisgICAgTEVHQUwgZmlsZS4KKworMy41LiBSZXF1aXJlZCBOb3RpY2VzLgorWW91IG11c3QgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlCitDb2RlLCBhbmQgdGhpcyBMaWNlbnNlIGluIGFueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgU291cmNlIENvZGUsIHdoZXJlCitZb3UgZGVzY3JpYmUgcmVjaXBpZW50cycgcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgQ29kZS4gSWYgWW91CitjcmVhdGVkIG9uZSBvciBtb3JlIE1vZGlmaWNhdGlvbihzKSwgWW91IG1heSBhZGQgeW91ciBuYW1lIGFzIGEKK0NvbnRyaWJ1dG9yIHRvIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4gSWYgaXQgaXMgbm90Citwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvCitpdHMgc3RydWN0dXJlLCB0aGVuIHlvdSBtdXN0IGluY2x1ZGUgc3VjaCBub3RpY2UgaW4gYSBsb2NhdGlvbiAoc3VjaAorYXMgYSByZWxldmFudCBkaXJlY3RvcnkgZmlsZSkgd2hlcmUgYSB1c2VyIHdvdWxkIGJlIGxpa2VseSB0byBsb29rIGZvcgorc3VjaCBhIG5vdGljZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLAord2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUKK3JlY2lwaWVudHMgb2YgQ292ZXJlZCBDb2RlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24KK2JlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueQorQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGFuIGFueSBzdWNoIHdhcnJhbnR5LAorc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzIG9mZmVyZWQgYnkgWW91IGFsb25lLAorYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkKK0NvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvcgorc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yCitsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLgorCiszLjYuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLgorWW91IG1heSBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBpbiBFeGVjdXRhYmxlIGZvcm0gb25seSBpZiB0aGUKK3JlcXVpcmVtZW50cyBvZiBTZWN0aW9uIDMuMS0zLjUgaGF2ZSBiZWVuIG1ldCBmb3IgdGhhdCBDb3ZlcmVkIENvZGUsCithbmQgaWYgWW91IGluY2x1ZGUgYSBub3RpY2Ugc3RhdGluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mCit0aGUgQ292ZXJlZCBDb2RlIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLAoraW5jbHVkaW5nIGEgZGVzY3JpcHRpb24gb2YgaG93IGFuZCB3aGVyZSBZb3UgaGF2ZSBmdWxmaWxsZWQgdGhlCitvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uIDMuMi4gVGhlIG5vdGljZSBtdXN0IGJlIGNvbnNwaWN1b3VzbHkgaW5jbHVkZWQKK2luIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uLCByZWxhdGVkIGRvY3VtZW50YXRpb24gb3IKK2NvbGxhdGVyYWwgaW4gd2hpY2ggWW91IGRlc2NyaWJlIHJlY2lwaWVudHMnIHJpZ2h0cyByZWxhdGluZyB0byB0aGUKK0NvdmVyZWQgQ29kZS4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gb2YgQ292ZXJlZAorQ29kZSB1bmRlciBhIGxpY2Vuc2Ugb2YgWW91ciBjaG9pY2UsIHdoaWNoIG1heSBjb250YWluIHRlcm1zIGRpZmZlcmVudAorZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zCitvZiB0aGlzIExpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UgZm9yIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gZG9lcworbm90IGF0dGVtcHQgdG8gbGltaXQgb3IgYWx0ZXIgdGhlIHJlY2lwaWVudCdzIHJpZ2h0cyBpbiB0aGUgU291cmNlCitDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuIElmIFlvdQorZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgWW91IG11c3QKK21ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UKK2FyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkKK0NvbnRyaWJ1dG9yLiBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kCitldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIKK29yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2ggdGVybXMgWW91IG9mZmVyLgorCiszLjcuIExhcmdlciBXb3Jrcy4KK1lvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUKK25vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIKK1dvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUKK3JlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgQ29kZS4KKworNC4gSW5hYmlsaXR5IHRvIENvbXBseSBEdWUgdG8gU3RhdHV0ZSBvciBSZWd1bGF0aW9uLgorSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcworTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZSBkdWUgdG8gc3RhdHV0ZQorb3IgcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZQordG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlOyBhbmQgKGIpIGRlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQKK3RoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMCitmaWxlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNCBhbmQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGFsbAorZGlzdHJpYnV0aW9ucyBvZiB0aGUgU291cmNlIENvZGUuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkKK3N0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIHN1ZmZpY2llbnRseSBkZXRhaWxlZAorZm9yIGEgcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCBpdC4KKworNS4gQXBwbGljYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorCitUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIHRoZSBJbml0aWFsIERldmVsb3BlciBoYXMKK2F0dGFjaGVkIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBLCBhbmQgdG8gcmVsYXRlZCBDb3ZlcmVkIENvZGUuCisKKzYuIENPTk5FQ1RJT04gVE8gTU9aSUxMQSBQVUJMSUMgTElDRU5TRQorCitUaGlzIEVybGFuZyBMaWNlbnNlIGlzIGEgZGVyaXZhdGl2ZSB3b3JrIG9mIHRoZSBNb3ppbGxhIFB1YmxpYworTGljZW5zZSwgVmVyc2lvbiAxLjAuIEl0IGNvbnRhaW5zIHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoZSBNb3ppbGxhCitQdWJsaWMgTGljZW5zZSwgVmVyc2lvbiAxLjAuCisKKzcuIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkuCisKK0NPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gYGBBUyBJUycnIEJBU0lTLAorV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsCitXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgVEhBVCBUSEUgQ09WRVJFRCBDT0RFIElTIEZSRUUgT0YKK0RFRkVDVFMsIE1FUkNIQU5UQUJMRSwgRklUIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUgorTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YKK1RIRSBDT1ZFUkVEIENPREUgSVMgV0lUSCBZT1UuIFNIT1VMRCBBTlkgQ09WRVJFRCBDT0RFIFBST1ZFIERFRkVDVElWRQorSU4gQU5ZIFJFU1BFQ1QsIFlPVSAoTk9UIFRIRSBJTklUSUFMIERFVkVMT1BFUiBPUiBBTlkgT1RIRVIKK0NPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUgorQ09SUkVDVElPTi4gVEhJUyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUCitPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRiBBTlkgQ09WRVJFRCBDT0RFIElTIEFVVEhPUklaRUQgSEVSRVVOREVSCitFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLgorCis4LiBURVJNSU5BVElPTi4KK1RoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZQorYXV0b21hdGljYWxseSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZQorc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gQWxsCitzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoIGFyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsCitzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyCituYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZQorc2hhbGwgc3Vydml2ZS4KKworOS4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFkKK0FueSB1dGlsaXphdGlvbiBvZiBDb3ZlcmVkIENvZGUgc2hhbGwgbm90IGNhdXNlIHRoZSBJbml0aWFsIERldmVsb3Blcgorb3IgYW55IENvbnRyaWJ1dG9yIHRvIGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgKG5laXRoZXIgZGlyZWN0IG5vcgoraW5kaXJlY3QpLgorCisxMC4gTUlTQ0VMTEFORU9VUworVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHRoZSBzdWJqZWN0CittYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaAorcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdAorZW5mb3JjZWFibGUuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBjb25zdHJ1ZWQgYnkgYW5kIGluIGFjY29yZGFuY2Ugd2l0aAordGhlIHN1YnN0YW50aXZlIGxhd3Mgb2YgU3dlZGVuLiBBbnkgZGlzcHV0ZSwgY29udHJvdmVyc3kgb3IgY2xhaW0KK2FyaXNpbmcgb3V0IG9mIG9yIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSwgb3IgdGhlIGJyZWFjaCwgdGVybWluYXRpb24KK29yIGludmFsaWRpdHkgdGhlcmVvZiwgc2hhbGwgYmUgc3ViamVjdCB0byB0aGUgZXhjbHVzaXZlIGp1cmlzZGljdGlvbgorb2YgU3dlZGlzaCBjb3VydHMsIHdpdGggdGhlIFN0b2NraG9sbSBDaXR5IENvdXJ0IGFzIHRoZSBmaXJzdAoraW5zdGFuY2UuCisKK0VYSElCSVQgQS4KKworYGBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBFcmxhbmcgUHVibGljIExpY2Vuc2UsCitWZXJzaW9uIDEuMSwgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbgorY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZQorRXJsYW5nIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBzb2Z0d2FyZS4gSWYgbm90LCBpdCBjYW4gYmUKK3JldHJpZXZlZCB2aWEgdGhlIHdvcmxkIHdpZGUgd2ViIGF0IGh0dHA6Ly93d3cuZXJsYW5nLm9yZy8uCisKK1NvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIKK2Jhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUKK3RoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMKK3VuZGVyIHRoZSBMaWNlbnNlLgorCitUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMgRXJpY3Nzb24gVXR2ZWNrbGluZ3MgQUIuCitQb3J0aW9ucyBjcmVhdGVkIGJ5IEVyaWNzc29uIGFyZSBDb3B5cmlnaHQgMTk5OSwgRXJpY3Nzb24gVXR2ZWNrbGluZ3MKK0FCLiBBbGwgUmlnaHRzIFJlc2VydmVkLicnCmRpZmYgLS1naXQgYS9saWNlbnNlcy9FeG9sYWIgYi9saWNlbnNlcy9FeG9sYWIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFlZWQ2OQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0V4b2xhYgpAQCAtMCwwICsxLDM4IEBACitDb3B5cmlnaHQgMTk5OS0yMDA0IChDKSBJbnRhbGlvIEluYy4sIGFuZCBvdGhlcnMuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCisoIlNvZnR3YXJlIiksIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQKK3RoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiBjb3B5cmlnaHQgc3RhdGVtZW50cworICAgYW5kIG5vdGljZXMuIFJlZGlzdHJpYnV0aW9ucyBtdXN0IGFsc28gY29udGFpbiBhIGNvcHkgb2YgdGhpcworICAgZG9jdW1lbnQuCisKKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCiszLiBUaGUgbmFtZSAiRXhvTGFiIiBtdXN0IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICAgZGVyaXZlZCBmcm9tIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24gb2YKKyAgIEludGFsaW8gSW5jLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBpbmZvQGV4b2xhYi5vcmcuCisKKzQuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIFNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJDYXN0b3IiCisgICBub3IgbWF5ICJDYXN0b3IiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAgIHBlcm1pc3Npb24gb2YgSW50YWxpbyBJbmMuIEV4b2xhYiwgQ2FzdG9yIGFuZCBJbnRhbGlvIGFyZQorICAgdHJhZGVtYXJrcyBvZiBJbnRhbGlvIEluYy4KKworNS4gRHVlIGNyZWRpdCBzaG91bGQgYmUgZ2l2ZW4gdG8gdGhlIEV4b0xhYiBQcm9qZWN0CisgICAoaHR0cDovL3d3dy5leG9sYWIub3JnLykuCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgSU5UQUxJTyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKK1RIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBCitQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIElOVEFMSU8gT1IgSVRTCitDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKK0VYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKK1BST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRQorVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorREFNQUdFLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvRkRMLTEuMSBiL2xpY2Vuc2VzL0ZETC0xLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQyOTM2YgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0ZETC0xLjEKQEAgLTAsMCArMSwzNTUgQEAKKwkJR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlCisJCSAgIFZlcnNpb24gMS4xLCBNYXJjaCAyMDAwCisKKyBDb3B5cmlnaHQgKEMpIDIwMDAgIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgICA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKworMC4gUFJFQU1CTEUKKworVGhlIHB1cnBvc2Ugb2YgdGhpcyBMaWNlbnNlIGlzIHRvIG1ha2UgYSBtYW51YWwsIHRleHRib29rLCBvciBvdGhlcgord3JpdHRlbiBkb2N1bWVudCAiZnJlZSIgaW4gdGhlIHNlbnNlIG9mIGZyZWVkb206IHRvIGFzc3VyZSBldmVyeW9uZQordGhlIGVmZmVjdGl2ZSBmcmVlZG9tIHRvIGNvcHkgYW5kIHJlZGlzdHJpYnV0ZSBpdCwgd2l0aCBvciB3aXRob3V0Cittb2RpZnlpbmcgaXQsIGVpdGhlciBjb21tZXJjaWFsbHkgb3Igbm9uY29tbWVyY2lhbGx5LiAgU2Vjb25kYXJpbHksCit0aGlzIExpY2Vuc2UgcHJlc2VydmVzIGZvciB0aGUgYXV0aG9yIGFuZCBwdWJsaXNoZXIgYSB3YXkgdG8gZ2V0CitjcmVkaXQgZm9yIHRoZWlyIHdvcmssIHdoaWxlIG5vdCBiZWluZyBjb25zaWRlcmVkIHJlc3BvbnNpYmxlIGZvcgorbW9kaWZpY2F0aW9ucyBtYWRlIGJ5IG90aGVycy4KKworVGhpcyBMaWNlbnNlIGlzIGEga2luZCBvZiAiY29weWxlZnQiLCB3aGljaCBtZWFucyB0aGF0IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBkb2N1bWVudCBtdXN0IHRoZW1zZWx2ZXMgYmUgZnJlZSBpbiB0aGUgc2FtZSBzZW5zZS4gIEl0Citjb21wbGVtZW50cyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHdoaWNoIGlzIGEgY29weWxlZnQKK2xpY2Vuc2UgZGVzaWduZWQgZm9yIGZyZWUgc29mdHdhcmUuCisKK1dlIGhhdmUgZGVzaWduZWQgdGhpcyBMaWNlbnNlIGluIG9yZGVyIHRvIHVzZSBpdCBmb3IgbWFudWFscyBmb3IgZnJlZQorc29mdHdhcmUsIGJlY2F1c2UgZnJlZSBzb2Z0d2FyZSBuZWVkcyBmcmVlIGRvY3VtZW50YXRpb246IGEgZnJlZQorcHJvZ3JhbSBzaG91bGQgY29tZSB3aXRoIG1hbnVhbHMgcHJvdmlkaW5nIHRoZSBzYW1lIGZyZWVkb21zIHRoYXQgdGhlCitzb2Z0d2FyZSBkb2VzLiAgQnV0IHRoaXMgTGljZW5zZSBpcyBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBtYW51YWxzOworaXQgY2FuIGJlIHVzZWQgZm9yIGFueSB0ZXh0dWFsIHdvcmssIHJlZ2FyZGxlc3Mgb2Ygc3ViamVjdCBtYXR0ZXIgb3IKK3doZXRoZXIgaXQgaXMgcHVibGlzaGVkIGFzIGEgcHJpbnRlZCBib29rLiAgV2UgcmVjb21tZW5kIHRoaXMgTGljZW5zZQorcHJpbmNpcGFsbHkgZm9yIHdvcmtzIHdob3NlIHB1cnBvc2UgaXMgaW5zdHJ1Y3Rpb24gb3IgcmVmZXJlbmNlLgorCisKKzEuIEFQUExJQ0FCSUxJVFkgQU5EIERFRklOSVRJT05TCisKK1RoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBtYW51YWwgb3Igb3RoZXIgd29yayB0aGF0IGNvbnRhaW5zIGEKK25vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IGNhbiBiZSBkaXN0cmlidXRlZAordW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gIFRoZSAiRG9jdW1lbnQiLCBiZWxvdywgcmVmZXJzIHRvIGFueQorc3VjaCBtYW51YWwgb3Igd29yay4gIEFueSBtZW1iZXIgb2YgdGhlIHB1YmxpYyBpcyBhIGxpY2Vuc2VlLCBhbmQgaXMKK2FkZHJlc3NlZCBhcyAieW91Ii4KKworQSAiTW9kaWZpZWQgVmVyc2lvbiIgb2YgdGhlIERvY3VtZW50IG1lYW5zIGFueSB3b3JrIGNvbnRhaW5pbmcgdGhlCitEb2N1bWVudCBvciBhIHBvcnRpb24gb2YgaXQsIGVpdGhlciBjb3BpZWQgdmVyYmF0aW0sIG9yIHdpdGgKK21vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyIGxhbmd1YWdlLgorCitBICJTZWNvbmRhcnkgU2VjdGlvbiIgaXMgYSBuYW1lZCBhcHBlbmRpeCBvciBhIGZyb250LW1hdHRlciBzZWN0aW9uIG9mCit0aGUgRG9jdW1lbnQgdGhhdCBkZWFscyBleGNsdXNpdmVseSB3aXRoIHRoZSByZWxhdGlvbnNoaXAgb2YgdGhlCitwdWJsaXNoZXJzIG9yIGF1dGhvcnMgb2YgdGhlIERvY3VtZW50IHRvIHRoZSBEb2N1bWVudCdzIG92ZXJhbGwgc3ViamVjdAorKG9yIHRvIHJlbGF0ZWQgbWF0dGVycykgYW5kIGNvbnRhaW5zIG5vdGhpbmcgdGhhdCBjb3VsZCBmYWxsIGRpcmVjdGx5Cit3aXRoaW4gdGhhdCBvdmVyYWxsIHN1YmplY3QuICAoRm9yIGV4YW1wbGUsIGlmIHRoZSBEb2N1bWVudCBpcyBpbiBwYXJ0IGEKK3RleHRib29rIG9mIG1hdGhlbWF0aWNzLCBhIFNlY29uZGFyeSBTZWN0aW9uIG1heSBub3QgZXhwbGFpbiBhbnkKK21hdGhlbWF0aWNzLikgIFRoZSByZWxhdGlvbnNoaXAgY291bGQgYmUgYSBtYXR0ZXIgb2YgaGlzdG9yaWNhbAorY29ubmVjdGlvbiB3aXRoIHRoZSBzdWJqZWN0IG9yIHdpdGggcmVsYXRlZCBtYXR0ZXJzLCBvciBvZiBsZWdhbCwKK2NvbW1lcmNpYWwsIHBoaWxvc29waGljYWwsIGV0aGljYWwgb3IgcG9saXRpY2FsIHBvc2l0aW9uIHJlZ2FyZGluZwordGhlbS4KKworVGhlICJJbnZhcmlhbnQgU2VjdGlvbnMiIGFyZSBjZXJ0YWluIFNlY29uZGFyeSBTZWN0aW9ucyB3aG9zZSB0aXRsZXMKK2FyZSBkZXNpZ25hdGVkLCBhcyBiZWluZyB0aG9zZSBvZiBJbnZhcmlhbnQgU2VjdGlvbnMsIGluIHRoZSBub3RpY2UKK3RoYXQgc2F5cyB0aGF0IHRoZSBEb2N1bWVudCBpcyByZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKK1RoZSAiQ292ZXIgVGV4dHMiIGFyZSBjZXJ0YWluIHNob3J0IHBhc3NhZ2VzIG9mIHRleHQgdGhhdCBhcmUgbGlzdGVkLAorYXMgRnJvbnQtQ292ZXIgVGV4dHMgb3IgQmFjay1Db3ZlciBUZXh0cywgaW4gdGhlIG5vdGljZSB0aGF0IHNheXMgdGhhdAordGhlIERvY3VtZW50IGlzIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZS4KKworQSAiVHJhbnNwYXJlbnQiIGNvcHkgb2YgdGhlIERvY3VtZW50IG1lYW5zIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5LAorcmVwcmVzZW50ZWQgaW4gYSBmb3JtYXQgd2hvc2Ugc3BlY2lmaWNhdGlvbiBpcyBhdmFpbGFibGUgdG8gdGhlCitnZW5lcmFsIHB1YmxpYywgd2hvc2UgY29udGVudHMgY2FuIGJlIHZpZXdlZCBhbmQgZWRpdGVkIGRpcmVjdGx5IGFuZAorc3RyYWlnaHRmb3J3YXJkbHkgd2l0aCBnZW5lcmljIHRleHQgZWRpdG9ycyBvciAoZm9yIGltYWdlcyBjb21wb3NlZCBvZgorcGl4ZWxzKSBnZW5lcmljIHBhaW50IHByb2dyYW1zIG9yIChmb3IgZHJhd2luZ3MpIHNvbWUgd2lkZWx5IGF2YWlsYWJsZQorZHJhd2luZyBlZGl0b3IsIGFuZCB0aGF0IGlzIHN1aXRhYmxlIGZvciBpbnB1dCB0byB0ZXh0IGZvcm1hdHRlcnMgb3IKK2ZvciBhdXRvbWF0aWMgdHJhbnNsYXRpb24gdG8gYSB2YXJpZXR5IG9mIGZvcm1hdHMgc3VpdGFibGUgZm9yIGlucHV0Cit0byB0ZXh0IGZvcm1hdHRlcnMuICBBIGNvcHkgbWFkZSBpbiBhbiBvdGhlcndpc2UgVHJhbnNwYXJlbnQgZmlsZQorZm9ybWF0IHdob3NlIG1hcmt1cCBoYXMgYmVlbiBkZXNpZ25lZCB0byB0aHdhcnQgb3IgZGlzY291cmFnZQorc3Vic2VxdWVudCBtb2RpZmljYXRpb24gYnkgcmVhZGVycyBpcyBub3QgVHJhbnNwYXJlbnQuICBBIGNvcHkgdGhhdCBpcworbm90ICJUcmFuc3BhcmVudCIgaXMgY2FsbGVkICJPcGFxdWUiLgorCitFeGFtcGxlcyBvZiBzdWl0YWJsZSBmb3JtYXRzIGZvciBUcmFuc3BhcmVudCBjb3BpZXMgaW5jbHVkZSBwbGFpbgorQVNDSUkgd2l0aG91dCBtYXJrdXAsIFRleGluZm8gaW5wdXQgZm9ybWF0LCBMYVRlWCBpbnB1dCBmb3JtYXQsIFNHTUwKK29yIFhNTCB1c2luZyBhIHB1YmxpY2x5IGF2YWlsYWJsZSBEVEQsIGFuZCBzdGFuZGFyZC1jb25mb3JtaW5nIHNpbXBsZQorSFRNTCBkZXNpZ25lZCBmb3IgaHVtYW4gbW9kaWZpY2F0aW9uLiAgT3BhcXVlIGZvcm1hdHMgaW5jbHVkZQorUG9zdFNjcmlwdCwgUERGLCBwcm9wcmlldGFyeSBmb3JtYXRzIHRoYXQgY2FuIGJlIHJlYWQgYW5kIGVkaXRlZCBvbmx5CitieSBwcm9wcmlldGFyeSB3b3JkIHByb2Nlc3NvcnMsIFNHTUwgb3IgWE1MIGZvciB3aGljaCB0aGUgRFREIGFuZC9vcgorcHJvY2Vzc2luZyB0b29scyBhcmUgbm90IGdlbmVyYWxseSBhdmFpbGFibGUsIGFuZCB0aGUKK21hY2hpbmUtZ2VuZXJhdGVkIEhUTUwgcHJvZHVjZWQgYnkgc29tZSB3b3JkIHByb2Nlc3NvcnMgZm9yIG91dHB1dAorcHVycG9zZXMgb25seS4KKworVGhlICJUaXRsZSBQYWdlIiBtZWFucywgZm9yIGEgcHJpbnRlZCBib29rLCB0aGUgdGl0bGUgcGFnZSBpdHNlbGYsCitwbHVzIHN1Y2ggZm9sbG93aW5nIHBhZ2VzIGFzIGFyZSBuZWVkZWQgdG8gaG9sZCwgbGVnaWJseSwgdGhlIG1hdGVyaWFsCit0aGlzIExpY2Vuc2UgcmVxdWlyZXMgdG8gYXBwZWFyIGluIHRoZSB0aXRsZSBwYWdlLiAgRm9yIHdvcmtzIGluCitmb3JtYXRzIHdoaWNoIGRvIG5vdCBoYXZlIGFueSB0aXRsZSBwYWdlIGFzIHN1Y2gsICJUaXRsZSBQYWdlIiBtZWFucwordGhlIHRleHQgbmVhciB0aGUgbW9zdCBwcm9taW5lbnQgYXBwZWFyYW5jZSBvZiB0aGUgd29yaydzIHRpdGxlLAorcHJlY2VkaW5nIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJvZHkgb2YgdGhlIHRleHQuCisKKworMi4gVkVSQkFUSU0gQ09QWUlORworCitZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIERvY3VtZW50IGluIGFueSBtZWRpdW0sIGVpdGhlcgorY29tbWVyY2lhbGx5IG9yIG5vbmNvbW1lcmNpYWxseSwgcHJvdmlkZWQgdGhhdCB0aGlzIExpY2Vuc2UsIHRoZQorY29weXJpZ2h0IG5vdGljZXMsIGFuZCB0aGUgbGljZW5zZSBub3RpY2Ugc2F5aW5nIHRoaXMgTGljZW5zZSBhcHBsaWVzCit0byB0aGUgRG9jdW1lbnQgYXJlIHJlcHJvZHVjZWQgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgeW91IGFkZCBubyBvdGhlcgorY29uZGl0aW9ucyB3aGF0c29ldmVyIHRvIHRob3NlIG9mIHRoaXMgTGljZW5zZS4gIFlvdSBtYXkgbm90IHVzZQordGVjaG5pY2FsIG1lYXN1cmVzIHRvIG9ic3RydWN0IG9yIGNvbnRyb2wgdGhlIHJlYWRpbmcgb3IgZnVydGhlcgorY29weWluZyBvZiB0aGUgY29waWVzIHlvdSBtYWtlIG9yIGRpc3RyaWJ1dGUuICBIb3dldmVyLCB5b3UgbWF5IGFjY2VwdAorY29tcGVuc2F0aW9uIGluIGV4Y2hhbmdlIGZvciBjb3BpZXMuICBJZiB5b3UgZGlzdHJpYnV0ZSBhIGxhcmdlIGVub3VnaAorbnVtYmVyIG9mIGNvcGllcyB5b3UgbXVzdCBhbHNvIGZvbGxvdyB0aGUgY29uZGl0aW9ucyBpbiBzZWN0aW9uIDMuCisKK1lvdSBtYXkgYWxzbyBsZW5kIGNvcGllcywgdW5kZXIgdGhlIHNhbWUgY29uZGl0aW9ucyBzdGF0ZWQgYWJvdmUsIGFuZAoreW91IG1heSBwdWJsaWNseSBkaXNwbGF5IGNvcGllcy4KKworCiszLiBDT1BZSU5HIElOIFFVQU5USVRZCisKK0lmIHlvdSBwdWJsaXNoIHByaW50ZWQgY29waWVzIG9mIHRoZSBEb2N1bWVudCBudW1iZXJpbmcgbW9yZSB0aGFuIDEwMCwKK2FuZCB0aGUgRG9jdW1lbnQncyBsaWNlbnNlIG5vdGljZSByZXF1aXJlcyBDb3ZlciBUZXh0cywgeW91IG11c3QgZW5jbG9zZQordGhlIGNvcGllcyBpbiBjb3ZlcnMgdGhhdCBjYXJyeSwgY2xlYXJseSBhbmQgbGVnaWJseSwgYWxsIHRoZXNlIENvdmVyCitUZXh0czogRnJvbnQtQ292ZXIgVGV4dHMgb24gdGhlIGZyb250IGNvdmVyLCBhbmQgQmFjay1Db3ZlciBUZXh0cyBvbgordGhlIGJhY2sgY292ZXIuICBCb3RoIGNvdmVycyBtdXN0IGFsc28gY2xlYXJseSBhbmQgbGVnaWJseSBpZGVudGlmeQoreW91IGFzIHRoZSBwdWJsaXNoZXIgb2YgdGhlc2UgY29waWVzLiAgVGhlIGZyb250IGNvdmVyIG11c3QgcHJlc2VudAordGhlIGZ1bGwgdGl0bGUgd2l0aCBhbGwgd29yZHMgb2YgdGhlIHRpdGxlIGVxdWFsbHkgcHJvbWluZW50IGFuZAordmlzaWJsZS4gIFlvdSBtYXkgYWRkIG90aGVyIG1hdGVyaWFsIG9uIHRoZSBjb3ZlcnMgaW4gYWRkaXRpb24uCitDb3B5aW5nIHdpdGggY2hhbmdlcyBsaW1pdGVkIHRvIHRoZSBjb3ZlcnMsIGFzIGxvbmcgYXMgdGhleSBwcmVzZXJ2ZQordGhlIHRpdGxlIG9mIHRoZSBEb2N1bWVudCBhbmQgc2F0aXNmeSB0aGVzZSBjb25kaXRpb25zLCBjYW4gYmUgdHJlYXRlZAorYXMgdmVyYmF0aW0gY29weWluZyBpbiBvdGhlciByZXNwZWN0cy4KKworSWYgdGhlIHJlcXVpcmVkIHRleHRzIGZvciBlaXRoZXIgY292ZXIgYXJlIHRvbyB2b2x1bWlub3VzIHRvIGZpdAorbGVnaWJseSwgeW91IHNob3VsZCBwdXQgdGhlIGZpcnN0IG9uZXMgbGlzdGVkIChhcyBtYW55IGFzIGZpdAorcmVhc29uYWJseSkgb24gdGhlIGFjdHVhbCBjb3ZlciwgYW5kIGNvbnRpbnVlIHRoZSByZXN0IG9udG8gYWRqYWNlbnQKK3BhZ2VzLgorCitJZiB5b3UgcHVibGlzaCBvciBkaXN0cmlidXRlIE9wYXF1ZSBjb3BpZXMgb2YgdGhlIERvY3VtZW50IG51bWJlcmluZworbW9yZSB0aGFuIDEwMCwgeW91IG11c3QgZWl0aGVyIGluY2x1ZGUgYSBtYWNoaW5lLXJlYWRhYmxlIFRyYW5zcGFyZW50Citjb3B5IGFsb25nIHdpdGggZWFjaCBPcGFxdWUgY29weSwgb3Igc3RhdGUgaW4gb3Igd2l0aCBlYWNoIE9wYXF1ZSBjb3B5CithIHB1YmxpY2x5LWFjY2Vzc2libGUgY29tcHV0ZXItbmV0d29yayBsb2NhdGlvbiBjb250YWluaW5nIGEgY29tcGxldGUKK1RyYW5zcGFyZW50IGNvcHkgb2YgdGhlIERvY3VtZW50LCBmcmVlIG9mIGFkZGVkIG1hdGVyaWFsLCB3aGljaCB0aGUKK2dlbmVyYWwgbmV0d29yay11c2luZyBwdWJsaWMgaGFzIGFjY2VzcyB0byBkb3dubG9hZCBhbm9ueW1vdXNseSBhdCBubworY2hhcmdlIHVzaW5nIHB1YmxpYy1zdGFuZGFyZCBuZXR3b3JrIHByb3RvY29scy4gIElmIHlvdSB1c2UgdGhlIGxhdHRlcgorb3B0aW9uLCB5b3UgbXVzdCB0YWtlIHJlYXNvbmFibHkgcHJ1ZGVudCBzdGVwcywgd2hlbiB5b3UgYmVnaW4KK2Rpc3RyaWJ1dGlvbiBvZiBPcGFxdWUgY29waWVzIGluIHF1YW50aXR5LCB0byBlbnN1cmUgdGhhdCB0aGlzCitUcmFuc3BhcmVudCBjb3B5IHdpbGwgcmVtYWluIHRodXMgYWNjZXNzaWJsZSBhdCB0aGUgc3RhdGVkIGxvY2F0aW9uCit1bnRpbCBhdCBsZWFzdCBvbmUgeWVhciBhZnRlciB0aGUgbGFzdCB0aW1lIHlvdSBkaXN0cmlidXRlIGFuIE9wYXF1ZQorY29weSAoZGlyZWN0bHkgb3IgdGhyb3VnaCB5b3VyIGFnZW50cyBvciByZXRhaWxlcnMpIG9mIHRoYXQgZWRpdGlvbiB0bwordGhlIHB1YmxpYy4KKworSXQgaXMgcmVxdWVzdGVkLCBidXQgbm90IHJlcXVpcmVkLCB0aGF0IHlvdSBjb250YWN0IHRoZSBhdXRob3JzIG9mIHRoZQorRG9jdW1lbnQgd2VsbCBiZWZvcmUgcmVkaXN0cmlidXRpbmcgYW55IGxhcmdlIG51bWJlciBvZiBjb3BpZXMsIHRvIGdpdmUKK3RoZW0gYSBjaGFuY2UgdG8gcHJvdmlkZSB5b3Ugd2l0aCBhbiB1cGRhdGVkIHZlcnNpb24gb2YgdGhlIERvY3VtZW50LgorCisKKzQuIE1PRElGSUNBVElPTlMKKworWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIGEgTW9kaWZpZWQgVmVyc2lvbiBvZiB0aGUgRG9jdW1lbnQgdW5kZXIKK3RoZSBjb25kaXRpb25zIG9mIHNlY3Rpb25zIDIgYW5kIDMgYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IHJlbGVhc2UKK3RoZSBNb2RpZmllZCBWZXJzaW9uIHVuZGVyIHByZWNpc2VseSB0aGlzIExpY2Vuc2UsIHdpdGggdGhlIE1vZGlmaWVkCitWZXJzaW9uIGZpbGxpbmcgdGhlIHJvbGUgb2YgdGhlIERvY3VtZW50LCB0aHVzIGxpY2Vuc2luZyBkaXN0cmlidXRpb24KK2FuZCBtb2RpZmljYXRpb24gb2YgdGhlIE1vZGlmaWVkIFZlcnNpb24gdG8gd2hvZXZlciBwb3NzZXNzZXMgYSBjb3B5CitvZiBpdC4gIEluIGFkZGl0aW9uLCB5b3UgbXVzdCBkbyB0aGVzZSB0aGluZ3MgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb246CisKK0EuIFVzZSBpbiB0aGUgVGl0bGUgUGFnZSAoYW5kIG9uIHRoZSBjb3ZlcnMsIGlmIGFueSkgYSB0aXRsZSBkaXN0aW5jdAorICAgZnJvbSB0aGF0IG9mIHRoZSBEb2N1bWVudCwgYW5kIGZyb20gdGhvc2Ugb2YgcHJldmlvdXMgdmVyc2lvbnMKKyAgICh3aGljaCBzaG91bGQsIGlmIHRoZXJlIHdlcmUgYW55LCBiZSBsaXN0ZWQgaW4gdGhlIEhpc3Rvcnkgc2VjdGlvbgorICAgb2YgdGhlIERvY3VtZW50KS4gIFlvdSBtYXkgdXNlIHRoZSBzYW1lIHRpdGxlIGFzIGEgcHJldmlvdXMgdmVyc2lvbgorICAgaWYgdGhlIG9yaWdpbmFsIHB1Ymxpc2hlciBvZiB0aGF0IHZlcnNpb24gZ2l2ZXMgcGVybWlzc2lvbi4KK0IuIExpc3Qgb24gdGhlIFRpdGxlIFBhZ2UsIGFzIGF1dGhvcnMsIG9uZSBvciBtb3JlIHBlcnNvbnMgb3IgZW50aXRpZXMKKyAgIHJlc3BvbnNpYmxlIGZvciBhdXRob3JzaGlwIG9mIHRoZSBtb2RpZmljYXRpb25zIGluIHRoZSBNb2RpZmllZAorICAgVmVyc2lvbiwgdG9nZXRoZXIgd2l0aCBhdCBsZWFzdCBmaXZlIG9mIHRoZSBwcmluY2lwYWwgYXV0aG9ycyBvZiB0aGUKKyAgIERvY3VtZW50IChhbGwgb2YgaXRzIHByaW5jaXBhbCBhdXRob3JzLCBpZiBpdCBoYXMgbGVzcyB0aGFuIGZpdmUpLgorQy4gU3RhdGUgb24gdGhlIFRpdGxlIHBhZ2UgdGhlIG5hbWUgb2YgdGhlIHB1Ymxpc2hlciBvZiB0aGUKKyAgIE1vZGlmaWVkIFZlcnNpb24sIGFzIHRoZSBwdWJsaXNoZXIuCitELiBQcmVzZXJ2ZSBhbGwgdGhlIGNvcHlyaWdodCBub3RpY2VzIG9mIHRoZSBEb2N1bWVudC4KK0UuIEFkZCBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGZvciB5b3VyIG1vZGlmaWNhdGlvbnMKKyAgIGFkamFjZW50IHRvIHRoZSBvdGhlciBjb3B5cmlnaHQgbm90aWNlcy4KK0YuIEluY2x1ZGUsIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBjb3B5cmlnaHQgbm90aWNlcywgYSBsaWNlbnNlIG5vdGljZQorICAgZ2l2aW5nIHRoZSBwdWJsaWMgcGVybWlzc2lvbiB0byB1c2UgdGhlIE1vZGlmaWVkIFZlcnNpb24gdW5kZXIgdGhlCisgICB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluIHRoZSBmb3JtIHNob3duIGluIHRoZSBBZGRlbmR1bSBiZWxvdy4KK0cuIFByZXNlcnZlIGluIHRoYXQgbGljZW5zZSBub3RpY2UgdGhlIGZ1bGwgbGlzdHMgb2YgSW52YXJpYW50IFNlY3Rpb25zCisgICBhbmQgcmVxdWlyZWQgQ292ZXIgVGV4dHMgZ2l2ZW4gaW4gdGhlIERvY3VtZW50J3MgbGljZW5zZSBub3RpY2UuCitILiBJbmNsdWRlIGFuIHVuYWx0ZXJlZCBjb3B5IG9mIHRoaXMgTGljZW5zZS4KK0kuIFByZXNlcnZlIHRoZSBzZWN0aW9uIGVudGl0bGVkICJIaXN0b3J5IiwgYW5kIGl0cyB0aXRsZSwgYW5kIGFkZCB0bworICAgaXQgYW4gaXRlbSBzdGF0aW5nIGF0IGxlYXN0IHRoZSB0aXRsZSwgeWVhciwgbmV3IGF1dGhvcnMsIGFuZAorICAgcHVibGlzaGVyIG9mIHRoZSBNb2RpZmllZCBWZXJzaW9uIGFzIGdpdmVuIG9uIHRoZSBUaXRsZSBQYWdlLiAgSWYKKyAgIHRoZXJlIGlzIG5vIHNlY3Rpb24gZW50aXRsZWQgIkhpc3RvcnkiIGluIHRoZSBEb2N1bWVudCwgY3JlYXRlIG9uZQorICAgc3RhdGluZyB0aGUgdGl0bGUsIHllYXIsIGF1dGhvcnMsIGFuZCBwdWJsaXNoZXIgb2YgdGhlIERvY3VtZW50IGFzCisgICBnaXZlbiBvbiBpdHMgVGl0bGUgUGFnZSwgdGhlbiBhZGQgYW4gaXRlbSBkZXNjcmliaW5nIHRoZSBNb2RpZmllZAorICAgVmVyc2lvbiBhcyBzdGF0ZWQgaW4gdGhlIHByZXZpb3VzIHNlbnRlbmNlLgorSi4gUHJlc2VydmUgdGhlIG5ldHdvcmsgbG9jYXRpb24sIGlmIGFueSwgZ2l2ZW4gaW4gdGhlIERvY3VtZW50IGZvcgorICAgcHVibGljIGFjY2VzcyB0byBhIFRyYW5zcGFyZW50IGNvcHkgb2YgdGhlIERvY3VtZW50LCBhbmQgbGlrZXdpc2UKKyAgIHRoZSBuZXR3b3JrIGxvY2F0aW9ucyBnaXZlbiBpbiB0aGUgRG9jdW1lbnQgZm9yIHByZXZpb3VzIHZlcnNpb25zCisgICBpdCB3YXMgYmFzZWQgb24uICBUaGVzZSBtYXkgYmUgcGxhY2VkIGluIHRoZSAiSGlzdG9yeSIgc2VjdGlvbi4KKyAgIFlvdSBtYXkgb21pdCBhIG5ldHdvcmsgbG9jYXRpb24gZm9yIGEgd29yayB0aGF0IHdhcyBwdWJsaXNoZWQgYXQKKyAgIGxlYXN0IGZvdXIgeWVhcnMgYmVmb3JlIHRoZSBEb2N1bWVudCBpdHNlbGYsIG9yIGlmIHRoZSBvcmlnaW5hbAorICAgcHVibGlzaGVyIG9mIHRoZSB2ZXJzaW9uIGl0IHJlZmVycyB0byBnaXZlcyBwZXJtaXNzaW9uLgorSy4gSW4gYW55IHNlY3Rpb24gZW50aXRsZWQgIkFja25vd2xlZGdlbWVudHMiIG9yICJEZWRpY2F0aW9ucyIsCisgICBwcmVzZXJ2ZSB0aGUgc2VjdGlvbidzIHRpdGxlLCBhbmQgcHJlc2VydmUgaW4gdGhlIHNlY3Rpb24gYWxsIHRoZQorICAgc3Vic3RhbmNlIGFuZCB0b25lIG9mIGVhY2ggb2YgdGhlIGNvbnRyaWJ1dG9yIGFja25vd2xlZGdlbWVudHMKKyAgIGFuZC9vciBkZWRpY2F0aW9ucyBnaXZlbiB0aGVyZWluLgorTC4gUHJlc2VydmUgYWxsIHRoZSBJbnZhcmlhbnQgU2VjdGlvbnMgb2YgdGhlIERvY3VtZW50LAorICAgdW5hbHRlcmVkIGluIHRoZWlyIHRleHQgYW5kIGluIHRoZWlyIHRpdGxlcy4gIFNlY3Rpb24gbnVtYmVycworICAgb3IgdGhlIGVxdWl2YWxlbnQgYXJlIG5vdCBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIHNlY3Rpb24gdGl0bGVzLgorTS4gRGVsZXRlIGFueSBzZWN0aW9uIGVudGl0bGVkICJFbmRvcnNlbWVudHMiLiAgU3VjaCBhIHNlY3Rpb24KKyAgIG1heSBub3QgYmUgaW5jbHVkZWQgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb24uCitOLiBEbyBub3QgcmV0aXRsZSBhbnkgZXhpc3Rpbmcgc2VjdGlvbiBhcyAiRW5kb3JzZW1lbnRzIgorICAgb3IgdG8gY29uZmxpY3QgaW4gdGl0bGUgd2l0aCBhbnkgSW52YXJpYW50IFNlY3Rpb24uCisKK0lmIHRoZSBNb2RpZmllZCBWZXJzaW9uIGluY2x1ZGVzIG5ldyBmcm9udC1tYXR0ZXIgc2VjdGlvbnMgb3IKK2FwcGVuZGljZXMgdGhhdCBxdWFsaWZ5IGFzIFNlY29uZGFyeSBTZWN0aW9ucyBhbmQgY29udGFpbiBubyBtYXRlcmlhbAorY29waWVkIGZyb20gdGhlIERvY3VtZW50LCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIGRlc2lnbmF0ZSBzb21lIG9yIGFsbAorb2YgdGhlc2Ugc2VjdGlvbnMgYXMgaW52YXJpYW50LiAgVG8gZG8gdGhpcywgYWRkIHRoZWlyIHRpdGxlcyB0byB0aGUKK2xpc3Qgb2YgSW52YXJpYW50IFNlY3Rpb25zIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uJ3MgbGljZW5zZSBub3RpY2UuCitUaGVzZSB0aXRsZXMgbXVzdCBiZSBkaXN0aW5jdCBmcm9tIGFueSBvdGhlciBzZWN0aW9uIHRpdGxlcy4KKworWW91IG1heSBhZGQgYSBzZWN0aW9uIGVudGl0bGVkICJFbmRvcnNlbWVudHMiLCBwcm92aWRlZCBpdCBjb250YWlucworbm90aGluZyBidXQgZW5kb3JzZW1lbnRzIG9mIHlvdXIgTW9kaWZpZWQgVmVyc2lvbiBieSB2YXJpb3VzCitwYXJ0aWVzLS1mb3IgZXhhbXBsZSwgc3RhdGVtZW50cyBvZiBwZWVyIHJldmlldyBvciB0aGF0IHRoZSB0ZXh0IGhhcworYmVlbiBhcHByb3ZlZCBieSBhbiBvcmdhbml6YXRpb24gYXMgdGhlIGF1dGhvcml0YXRpdmUgZGVmaW5pdGlvbiBvZiBhCitzdGFuZGFyZC4KKworWW91IG1heSBhZGQgYSBwYXNzYWdlIG9mIHVwIHRvIGZpdmUgd29yZHMgYXMgYSBGcm9udC1Db3ZlciBUZXh0LCBhbmQgYQorcGFzc2FnZSBvZiB1cCB0byAyNSB3b3JkcyBhcyBhIEJhY2stQ292ZXIgVGV4dCwgdG8gdGhlIGVuZCBvZiB0aGUgbGlzdAorb2YgQ292ZXIgVGV4dHMgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb24uICBPbmx5IG9uZSBwYXNzYWdlIG9mCitGcm9udC1Db3ZlciBUZXh0IGFuZCBvbmUgb2YgQmFjay1Db3ZlciBUZXh0IG1heSBiZSBhZGRlZCBieSAob3IKK3Rocm91Z2ggYXJyYW5nZW1lbnRzIG1hZGUgYnkpIGFueSBvbmUgZW50aXR5LiAgSWYgdGhlIERvY3VtZW50IGFscmVhZHkKK2luY2x1ZGVzIGEgY292ZXIgdGV4dCBmb3IgdGhlIHNhbWUgY292ZXIsIHByZXZpb3VzbHkgYWRkZWQgYnkgeW91IG9yCitieSBhcnJhbmdlbWVudCBtYWRlIGJ5IHRoZSBzYW1lIGVudGl0eSB5b3UgYXJlIGFjdGluZyBvbiBiZWhhbGYgb2YsCit5b3UgbWF5IG5vdCBhZGQgYW5vdGhlcjsgYnV0IHlvdSBtYXkgcmVwbGFjZSB0aGUgb2xkIG9uZSwgb24gZXhwbGljaXQKK3Blcm1pc3Npb24gZnJvbSB0aGUgcHJldmlvdXMgcHVibGlzaGVyIHRoYXQgYWRkZWQgdGhlIG9sZCBvbmUuCisKK1RoZSBhdXRob3IocykgYW5kIHB1Ymxpc2hlcihzKSBvZiB0aGUgRG9jdW1lbnQgZG8gbm90IGJ5IHRoaXMgTGljZW5zZQorZ2l2ZSBwZXJtaXNzaW9uIHRvIHVzZSB0aGVpciBuYW1lcyBmb3IgcHVibGljaXR5IGZvciBvciB0byBhc3NlcnQgb3IKK2ltcGx5IGVuZG9yc2VtZW50IG9mIGFueSBNb2RpZmllZCBWZXJzaW9uLgorCisKKzUuIENPTUJJTklORyBET0NVTUVOVFMKKworWW91IG1heSBjb21iaW5lIHRoZSBEb2N1bWVudCB3aXRoIG90aGVyIGRvY3VtZW50cyByZWxlYXNlZCB1bmRlciB0aGlzCitMaWNlbnNlLCB1bmRlciB0aGUgdGVybXMgZGVmaW5lZCBpbiBzZWN0aW9uIDQgYWJvdmUgZm9yIG1vZGlmaWVkCit2ZXJzaW9ucywgcHJvdmlkZWQgdGhhdCB5b3UgaW5jbHVkZSBpbiB0aGUgY29tYmluYXRpb24gYWxsIG9mIHRoZQorSW52YXJpYW50IFNlY3Rpb25zIG9mIGFsbCBvZiB0aGUgb3JpZ2luYWwgZG9jdW1lbnRzLCB1bm1vZGlmaWVkLCBhbmQKK2xpc3QgdGhlbSBhbGwgYXMgSW52YXJpYW50IFNlY3Rpb25zIG9mIHlvdXIgY29tYmluZWQgd29yayBpbiBpdHMKK2xpY2Vuc2Ugbm90aWNlLgorCitUaGUgY29tYmluZWQgd29yayBuZWVkIG9ubHkgY29udGFpbiBvbmUgY29weSBvZiB0aGlzIExpY2Vuc2UsIGFuZAorbXVsdGlwbGUgaWRlbnRpY2FsIEludmFyaWFudCBTZWN0aW9ucyBtYXkgYmUgcmVwbGFjZWQgd2l0aCBhIHNpbmdsZQorY29weS4gIElmIHRoZXJlIGFyZSBtdWx0aXBsZSBJbnZhcmlhbnQgU2VjdGlvbnMgd2l0aCB0aGUgc2FtZSBuYW1lIGJ1dAorZGlmZmVyZW50IGNvbnRlbnRzLCBtYWtlIHRoZSB0aXRsZSBvZiBlYWNoIHN1Y2ggc2VjdGlvbiB1bmlxdWUgYnkKK2FkZGluZyBhdCB0aGUgZW5kIG9mIGl0LCBpbiBwYXJlbnRoZXNlcywgdGhlIG5hbWUgb2YgdGhlIG9yaWdpbmFsCithdXRob3Igb3IgcHVibGlzaGVyIG9mIHRoYXQgc2VjdGlvbiBpZiBrbm93biwgb3IgZWxzZSBhIHVuaXF1ZSBudW1iZXIuCitNYWtlIHRoZSBzYW1lIGFkanVzdG1lbnQgdG8gdGhlIHNlY3Rpb24gdGl0bGVzIGluIHRoZSBsaXN0IG9mCitJbnZhcmlhbnQgU2VjdGlvbnMgaW4gdGhlIGxpY2Vuc2Ugbm90aWNlIG9mIHRoZSBjb21iaW5lZCB3b3JrLgorCitJbiB0aGUgY29tYmluYXRpb24sIHlvdSBtdXN0IGNvbWJpbmUgYW55IHNlY3Rpb25zIGVudGl0bGVkICJIaXN0b3J5IgoraW4gdGhlIHZhcmlvdXMgb3JpZ2luYWwgZG9jdW1lbnRzLCBmb3JtaW5nIG9uZSBzZWN0aW9uIGVudGl0bGVkCisiSGlzdG9yeSI7IGxpa2V3aXNlIGNvbWJpbmUgYW55IHNlY3Rpb25zIGVudGl0bGVkICJBY2tub3dsZWRnZW1lbnRzIiwKK2FuZCBhbnkgc2VjdGlvbnMgZW50aXRsZWQgIkRlZGljYXRpb25zIi4gIFlvdSBtdXN0IGRlbGV0ZSBhbGwgc2VjdGlvbnMKK2VudGl0bGVkICJFbmRvcnNlbWVudHMuIgorCisKKzYuIENPTExFQ1RJT05TIE9GIERPQ1VNRU5UUworCitZb3UgbWF5IG1ha2UgYSBjb2xsZWN0aW9uIGNvbnNpc3Rpbmcgb2YgdGhlIERvY3VtZW50IGFuZCBvdGhlciBkb2N1bWVudHMKK3JlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIHJlcGxhY2UgdGhlIGluZGl2aWR1YWwgY29waWVzIG9mIHRoaXMKK0xpY2Vuc2UgaW4gdGhlIHZhcmlvdXMgZG9jdW1lbnRzIHdpdGggYSBzaW5nbGUgY29weSB0aGF0IGlzIGluY2x1ZGVkIGluCit0aGUgY29sbGVjdGlvbiwgcHJvdmlkZWQgdGhhdCB5b3UgZm9sbG93IHRoZSBydWxlcyBvZiB0aGlzIExpY2Vuc2UgZm9yCit2ZXJiYXRpbSBjb3B5aW5nIG9mIGVhY2ggb2YgdGhlIGRvY3VtZW50cyBpbiBhbGwgb3RoZXIgcmVzcGVjdHMuCisKK1lvdSBtYXkgZXh0cmFjdCBhIHNpbmdsZSBkb2N1bWVudCBmcm9tIHN1Y2ggYSBjb2xsZWN0aW9uLCBhbmQgZGlzdHJpYnV0ZQoraXQgaW5kaXZpZHVhbGx5IHVuZGVyIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgeW91IGluc2VydCBhIGNvcHkgb2YgdGhpcworTGljZW5zZSBpbnRvIHRoZSBleHRyYWN0ZWQgZG9jdW1lbnQsIGFuZCBmb2xsb3cgdGhpcyBMaWNlbnNlIGluIGFsbAorb3RoZXIgcmVzcGVjdHMgcmVnYXJkaW5nIHZlcmJhdGltIGNvcHlpbmcgb2YgdGhhdCBkb2N1bWVudC4KKworCis3LiBBR0dSRUdBVElPTiBXSVRIIElOREVQRU5ERU5UIFdPUktTCisKK0EgY29tcGlsYXRpb24gb2YgdGhlIERvY3VtZW50IG9yIGl0cyBkZXJpdmF0aXZlcyB3aXRoIG90aGVyIHNlcGFyYXRlCithbmQgaW5kZXBlbmRlbnQgZG9jdW1lbnRzIG9yIHdvcmtzLCBpbiBvciBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IKK2Rpc3RyaWJ1dGlvbiBtZWRpdW0sIGRvZXMgbm90IGFzIGEgd2hvbGUgY291bnQgYXMgYSBNb2RpZmllZCBWZXJzaW9uCitvZiB0aGUgRG9jdW1lbnQsIHByb3ZpZGVkIG5vIGNvbXBpbGF0aW9uIGNvcHlyaWdodCBpcyBjbGFpbWVkIGZvciB0aGUKK2NvbXBpbGF0aW9uLiAgU3VjaCBhIGNvbXBpbGF0aW9uIGlzIGNhbGxlZCBhbiAiYWdncmVnYXRlIiwgYW5kIHRoaXMKK0xpY2Vuc2UgZG9lcyBub3QgYXBwbHkgdG8gdGhlIG90aGVyIHNlbGYtY29udGFpbmVkIHdvcmtzIHRodXMgY29tcGlsZWQKK3dpdGggdGhlIERvY3VtZW50LCBvbiBhY2NvdW50IG9mIHRoZWlyIGJlaW5nIHRodXMgY29tcGlsZWQsIGlmIHRoZXkKK2FyZSBub3QgdGhlbXNlbHZlcyBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBEb2N1bWVudC4KKworSWYgdGhlIENvdmVyIFRleHQgcmVxdWlyZW1lbnQgb2Ygc2VjdGlvbiAzIGlzIGFwcGxpY2FibGUgdG8gdGhlc2UKK2NvcGllcyBvZiB0aGUgRG9jdW1lbnQsIHRoZW4gaWYgdGhlIERvY3VtZW50IGlzIGxlc3MgdGhhbiBvbmUgcXVhcnRlcgorb2YgdGhlIGVudGlyZSBhZ2dyZWdhdGUsIHRoZSBEb2N1bWVudCdzIENvdmVyIFRleHRzIG1heSBiZSBwbGFjZWQgb24KK2NvdmVycyB0aGF0IHN1cnJvdW5kIG9ubHkgdGhlIERvY3VtZW50IHdpdGhpbiB0aGUgYWdncmVnYXRlLgorT3RoZXJ3aXNlIHRoZXkgbXVzdCBhcHBlYXIgb24gY292ZXJzIGFyb3VuZCB0aGUgd2hvbGUgYWdncmVnYXRlLgorCisKKzguIFRSQU5TTEFUSU9OCisKK1RyYW5zbGF0aW9uIGlzIGNvbnNpZGVyZWQgYSBraW5kIG9mIG1vZGlmaWNhdGlvbiwgc28geW91IG1heQorZGlzdHJpYnV0ZSB0cmFuc2xhdGlvbnMgb2YgdGhlIERvY3VtZW50IHVuZGVyIHRoZSB0ZXJtcyBvZiBzZWN0aW9uIDQuCitSZXBsYWNpbmcgSW52YXJpYW50IFNlY3Rpb25zIHdpdGggdHJhbnNsYXRpb25zIHJlcXVpcmVzIHNwZWNpYWwKK3Blcm1pc3Npb24gZnJvbSB0aGVpciBjb3B5cmlnaHQgaG9sZGVycywgYnV0IHlvdSBtYXkgaW5jbHVkZQordHJhbnNsYXRpb25zIG9mIHNvbWUgb3IgYWxsIEludmFyaWFudCBTZWN0aW9ucyBpbiBhZGRpdGlvbiB0byB0aGUKK29yaWdpbmFsIHZlcnNpb25zIG9mIHRoZXNlIEludmFyaWFudCBTZWN0aW9ucy4gIFlvdSBtYXkgaW5jbHVkZSBhCit0cmFuc2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBpbmNsdWRlIHRoZQorb3JpZ2luYWwgRW5nbGlzaCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZS4gIEluIGNhc2Ugb2YgYSBkaXNhZ3JlZW1lbnQKK2JldHdlZW4gdGhlIHRyYW5zbGF0aW9uIGFuZCB0aGUgb3JpZ2luYWwgRW5nbGlzaCB2ZXJzaW9uIG9mIHRoaXMKK0xpY2Vuc2UsIHRoZSBvcmlnaW5hbCBFbmdsaXNoIHZlcnNpb24gd2lsbCBwcmV2YWlsLgorCisKKzkuIFRFUk1JTkFUSU9OCisKK1lvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgRG9jdW1lbnQgZXhjZXB0CithcyBleHByZXNzbHkgcHJvdmlkZWQgZm9yIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBvdGhlciBhdHRlbXB0IHRvCitjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgRG9jdW1lbnQgaXMgdm9pZCwgYW5kIHdpbGwKK2F1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gIEhvd2V2ZXIsCitwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlciB0aGlzCitMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworCisxMC4gRlVUVVJFIFJFVklTSU9OUyBPRiBUSElTIExJQ0VOU0UKKworVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCBuZXcsIHJldmlzZWQgdmVyc2lvbnMKK29mIHRoZSBHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldwordmVyc2lvbnMgd2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5CitkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLiAgU2VlCitodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvLgorCitFYWNoIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4KK0lmIHRoZSBEb2N1bWVudCBzcGVjaWZpZXMgdGhhdCBhIHBhcnRpY3VsYXIgbnVtYmVyZWQgdmVyc2lvbiBvZiB0aGlzCitMaWNlbnNlICJvciBhbnkgbGF0ZXIgdmVyc2lvbiIgYXBwbGllcyB0byBpdCwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZgorZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCBzcGVjaWZpZWQgdmVyc2lvbiBvcgorb2YgYW55IGxhdGVyIHZlcnNpb24gdGhhdCBoYXMgYmVlbiBwdWJsaXNoZWQgKG5vdCBhcyBhIGRyYWZ0KSBieSB0aGUKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBEb2N1bWVudCBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbgorbnVtYmVyIG9mIHRoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgKG5vdAorYXMgYSBkcmFmdCkgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworCitBRERFTkRVTTogSG93IHRvIHVzZSB0aGlzIExpY2Vuc2UgZm9yIHlvdXIgZG9jdW1lbnRzCisKK1RvIHVzZSB0aGlzIExpY2Vuc2UgaW4gYSBkb2N1bWVudCB5b3UgaGF2ZSB3cml0dGVuLCBpbmNsdWRlIGEgY29weSBvZgordGhlIExpY2Vuc2UgaW4gdGhlIGRvY3VtZW50IGFuZCBwdXQgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgYW5kCitsaWNlbnNlIG5vdGljZXMganVzdCBhZnRlciB0aGUgdGl0bGUgcGFnZToKKworICAgICAgQ29weXJpZ2h0IChjKSAgWUVBUiAgWU9VUiBOQU1FLgorICAgICAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGlzIGRvY3VtZW50CisgICAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSwgVmVyc2lvbiAxLjEKKyAgICAgIG9yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICAgICAgd2l0aCB0aGUgSW52YXJpYW50IFNlY3Rpb25zIGJlaW5nIExJU1QgVEhFSVIgVElUTEVTLCB3aXRoIHRoZQorICAgICAgRnJvbnQtQ292ZXIgVGV4dHMgYmVpbmcgTElTVCwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgTElTVC4KKyAgICAgIEEgY29weSBvZiB0aGUgbGljZW5zZSBpcyBpbmNsdWRlZCBpbiB0aGUgc2VjdGlvbiBlbnRpdGxlZCAiR05VCisgICAgICBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSIuCisKK0lmIHlvdSBoYXZlIG5vIEludmFyaWFudCBTZWN0aW9ucywgd3JpdGUgIndpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zIgoraW5zdGVhZCBvZiBzYXlpbmcgd2hpY2ggb25lcyBhcmUgaW52YXJpYW50LiAgSWYgeW91IGhhdmUgbm8KK0Zyb250LUNvdmVyIFRleHRzLCB3cml0ZSAibm8gRnJvbnQtQ292ZXIgVGV4dHMiIGluc3RlYWQgb2YKKyJGcm9udC1Db3ZlciBUZXh0cyBiZWluZyBMSVNUIjsgbGlrZXdpc2UgZm9yIEJhY2stQ292ZXIgVGV4dHMuCisKK0lmIHlvdXIgZG9jdW1lbnQgY29udGFpbnMgbm9udHJpdmlhbCBleGFtcGxlcyBvZiBwcm9ncmFtIGNvZGUsIHdlCityZWNvbW1lbmQgcmVsZWFzaW5nIHRoZXNlIGV4YW1wbGVzIGluIHBhcmFsbGVsIHVuZGVyIHlvdXIgY2hvaWNlIG9mCitmcmVlIHNvZnR3YXJlIGxpY2Vuc2UsIHN1Y2ggYXMgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAordG8gcGVybWl0IHRoZWlyIHVzZSBpbiBmcmVlIHNvZnR3YXJlLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvRkRMLTEuMSsgYi9saWNlbnNlcy9GREwtMS4xKwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMTY3MGMyCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvRkRMLTEuMSsKQEAgLTAsMCArMSwyIEBACitHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UsIHZlcnNpb24gMS4xIG9yIGFueSBsYXRlciB2ZXJzaW9uLgorU2VlIEZETC0xLjEsIEZETC0xLjIsIG9yIEZETC0xLjMgZm9yIHRoZSBmdWxsIHRleHQgb2YgdGhlc2UgbGljZW5zZXMuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9GREwtMS4yIGIvbGljZW5zZXMvRkRMLTEuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTBmZTFjCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvRkRMLTEuMgpAQCAtMCwwICsxLDM5NyBAQAorCQlHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UKKwkJICBWZXJzaW9uIDEuMiwgTm92ZW1iZXIgMjAwMgorCisKKyBDb3B5cmlnaHQgKEMpIDIwMDAsMjAwMSwyMDAyICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICAgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCiswLiBQUkVBTUJMRQorCitUaGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UgaXMgdG8gbWFrZSBhIG1hbnVhbCwgdGV4dGJvb2ssIG9yIG90aGVyCitmdW5jdGlvbmFsIGFuZCB1c2VmdWwgZG9jdW1lbnQgImZyZWUiIGluIHRoZSBzZW5zZSBvZiBmcmVlZG9tOiB0bworYXNzdXJlIGV2ZXJ5b25lIHRoZSBlZmZlY3RpdmUgZnJlZWRvbSB0byBjb3B5IGFuZCByZWRpc3RyaWJ1dGUgaXQsCit3aXRoIG9yIHdpdGhvdXQgbW9kaWZ5aW5nIGl0LCBlaXRoZXIgY29tbWVyY2lhbGx5IG9yIG5vbmNvbW1lcmNpYWxseS4KK1NlY29uZGFyaWx5LCB0aGlzIExpY2Vuc2UgcHJlc2VydmVzIGZvciB0aGUgYXV0aG9yIGFuZCBwdWJsaXNoZXIgYSB3YXkKK3RvIGdldCBjcmVkaXQgZm9yIHRoZWlyIHdvcmssIHdoaWxlIG5vdCBiZWluZyBjb25zaWRlcmVkIHJlc3BvbnNpYmxlCitmb3IgbW9kaWZpY2F0aW9ucyBtYWRlIGJ5IG90aGVycy4KKworVGhpcyBMaWNlbnNlIGlzIGEga2luZCBvZiAiY29weWxlZnQiLCB3aGljaCBtZWFucyB0aGF0IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBkb2N1bWVudCBtdXN0IHRoZW1zZWx2ZXMgYmUgZnJlZSBpbiB0aGUgc2FtZSBzZW5zZS4gIEl0Citjb21wbGVtZW50cyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHdoaWNoIGlzIGEgY29weWxlZnQKK2xpY2Vuc2UgZGVzaWduZWQgZm9yIGZyZWUgc29mdHdhcmUuCisKK1dlIGhhdmUgZGVzaWduZWQgdGhpcyBMaWNlbnNlIGluIG9yZGVyIHRvIHVzZSBpdCBmb3IgbWFudWFscyBmb3IgZnJlZQorc29mdHdhcmUsIGJlY2F1c2UgZnJlZSBzb2Z0d2FyZSBuZWVkcyBmcmVlIGRvY3VtZW50YXRpb246IGEgZnJlZQorcHJvZ3JhbSBzaG91bGQgY29tZSB3aXRoIG1hbnVhbHMgcHJvdmlkaW5nIHRoZSBzYW1lIGZyZWVkb21zIHRoYXQgdGhlCitzb2Z0d2FyZSBkb2VzLiAgQnV0IHRoaXMgTGljZW5zZSBpcyBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBtYW51YWxzOworaXQgY2FuIGJlIHVzZWQgZm9yIGFueSB0ZXh0dWFsIHdvcmssIHJlZ2FyZGxlc3Mgb2Ygc3ViamVjdCBtYXR0ZXIgb3IKK3doZXRoZXIgaXQgaXMgcHVibGlzaGVkIGFzIGEgcHJpbnRlZCBib29rLiAgV2UgcmVjb21tZW5kIHRoaXMgTGljZW5zZQorcHJpbmNpcGFsbHkgZm9yIHdvcmtzIHdob3NlIHB1cnBvc2UgaXMgaW5zdHJ1Y3Rpb24gb3IgcmVmZXJlbmNlLgorCisKKzEuIEFQUExJQ0FCSUxJVFkgQU5EIERFRklOSVRJT05TCisKK1RoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBtYW51YWwgb3Igb3RoZXIgd29yaywgaW4gYW55IG1lZGl1bSwgdGhhdAorY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBjYW4gYmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuICBTdWNoIGEgbm90aWNlIGdyYW50cyBhCit3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUgbGljZW5zZSwgdW5saW1pdGVkIGluIGR1cmF0aW9uLCB0byB1c2UgdGhhdAord29yayB1bmRlciB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaGVyZWluLiAgVGhlICJEb2N1bWVudCIsIGJlbG93LAorcmVmZXJzIHRvIGFueSBzdWNoIG1hbnVhbCBvciB3b3JrLiAgQW55IG1lbWJlciBvZiB0aGUgcHVibGljIGlzIGEKK2xpY2Vuc2VlLCBhbmQgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLiAgWW91IGFjY2VwdCB0aGUgbGljZW5zZSBpZiB5b3UKK2NvcHksIG1vZGlmeSBvciBkaXN0cmlidXRlIHRoZSB3b3JrIGluIGEgd2F5IHJlcXVpcmluZyBwZXJtaXNzaW9uCit1bmRlciBjb3B5cmlnaHQgbGF3LgorCitBICJNb2RpZmllZCBWZXJzaW9uIiBvZiB0aGUgRG9jdW1lbnQgbWVhbnMgYW55IHdvcmsgY29udGFpbmluZyB0aGUKK0RvY3VtZW50IG9yIGEgcG9ydGlvbiBvZiBpdCwgZWl0aGVyIGNvcGllZCB2ZXJiYXRpbSwgb3Igd2l0aAorbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuCisKK0EgIlNlY29uZGFyeSBTZWN0aW9uIiBpcyBhIG5hbWVkIGFwcGVuZGl4IG9yIGEgZnJvbnQtbWF0dGVyIHNlY3Rpb24gb2YKK3RoZSBEb2N1bWVudCB0aGF0IGRlYWxzIGV4Y2x1c2l2ZWx5IHdpdGggdGhlIHJlbGF0aW9uc2hpcCBvZiB0aGUKK3B1Ymxpc2hlcnMgb3IgYXV0aG9ycyBvZiB0aGUgRG9jdW1lbnQgdG8gdGhlIERvY3VtZW50J3Mgb3ZlcmFsbCBzdWJqZWN0Cisob3IgdG8gcmVsYXRlZCBtYXR0ZXJzKSBhbmQgY29udGFpbnMgbm90aGluZyB0aGF0IGNvdWxkIGZhbGwgZGlyZWN0bHkKK3dpdGhpbiB0aGF0IG92ZXJhbGwgc3ViamVjdC4gIChUaHVzLCBpZiB0aGUgRG9jdW1lbnQgaXMgaW4gcGFydCBhCit0ZXh0Ym9vayBvZiBtYXRoZW1hdGljcywgYSBTZWNvbmRhcnkgU2VjdGlvbiBtYXkgbm90IGV4cGxhaW4gYW55CittYXRoZW1hdGljcy4pICBUaGUgcmVsYXRpb25zaGlwIGNvdWxkIGJlIGEgbWF0dGVyIG9mIGhpc3RvcmljYWwKK2Nvbm5lY3Rpb24gd2l0aCB0aGUgc3ViamVjdCBvciB3aXRoIHJlbGF0ZWQgbWF0dGVycywgb3Igb2YgbGVnYWwsCitjb21tZXJjaWFsLCBwaGlsb3NvcGhpY2FsLCBldGhpY2FsIG9yIHBvbGl0aWNhbCBwb3NpdGlvbiByZWdhcmRpbmcKK3RoZW0uCisKK1RoZSAiSW52YXJpYW50IFNlY3Rpb25zIiBhcmUgY2VydGFpbiBTZWNvbmRhcnkgU2VjdGlvbnMgd2hvc2UgdGl0bGVzCithcmUgZGVzaWduYXRlZCwgYXMgYmVpbmcgdGhvc2Ugb2YgSW52YXJpYW50IFNlY3Rpb25zLCBpbiB0aGUgbm90aWNlCit0aGF0IHNheXMgdGhhdCB0aGUgRG9jdW1lbnQgaXMgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgSWYgYQorc2VjdGlvbiBkb2VzIG5vdCBmaXQgdGhlIGFib3ZlIGRlZmluaXRpb24gb2YgU2Vjb25kYXJ5IHRoZW4gaXQgaXMgbm90CithbGxvd2VkIHRvIGJlIGRlc2lnbmF0ZWQgYXMgSW52YXJpYW50LiAgVGhlIERvY3VtZW50IG1heSBjb250YWluIHplcm8KK0ludmFyaWFudCBTZWN0aW9ucy4gIElmIHRoZSBEb2N1bWVudCBkb2VzIG5vdCBpZGVudGlmeSBhbnkgSW52YXJpYW50CitTZWN0aW9ucyB0aGVuIHRoZXJlIGFyZSBub25lLgorCitUaGUgIkNvdmVyIFRleHRzIiBhcmUgY2VydGFpbiBzaG9ydCBwYXNzYWdlcyBvZiB0ZXh0IHRoYXQgYXJlIGxpc3RlZCwKK2FzIEZyb250LUNvdmVyIFRleHRzIG9yIEJhY2stQ292ZXIgVGV4dHMsIGluIHRoZSBub3RpY2UgdGhhdCBzYXlzIHRoYXQKK3RoZSBEb2N1bWVudCBpcyByZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBIEZyb250LUNvdmVyIFRleHQgbWF5CitiZSBhdCBtb3N0IDUgd29yZHMsIGFuZCBhIEJhY2stQ292ZXIgVGV4dCBtYXkgYmUgYXQgbW9zdCAyNSB3b3Jkcy4KKworQSAiVHJhbnNwYXJlbnQiIGNvcHkgb2YgdGhlIERvY3VtZW50IG1lYW5zIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5LAorcmVwcmVzZW50ZWQgaW4gYSBmb3JtYXQgd2hvc2Ugc3BlY2lmaWNhdGlvbiBpcyBhdmFpbGFibGUgdG8gdGhlCitnZW5lcmFsIHB1YmxpYywgdGhhdCBpcyBzdWl0YWJsZSBmb3IgcmV2aXNpbmcgdGhlIGRvY3VtZW50CitzdHJhaWdodGZvcndhcmRseSB3aXRoIGdlbmVyaWMgdGV4dCBlZGl0b3JzIG9yIChmb3IgaW1hZ2VzIGNvbXBvc2VkIG9mCitwaXhlbHMpIGdlbmVyaWMgcGFpbnQgcHJvZ3JhbXMgb3IgKGZvciBkcmF3aW5ncykgc29tZSB3aWRlbHkgYXZhaWxhYmxlCitkcmF3aW5nIGVkaXRvciwgYW5kIHRoYXQgaXMgc3VpdGFibGUgZm9yIGlucHV0IHRvIHRleHQgZm9ybWF0dGVycyBvcgorZm9yIGF1dG9tYXRpYyB0cmFuc2xhdGlvbiB0byBhIHZhcmlldHkgb2YgZm9ybWF0cyBzdWl0YWJsZSBmb3IgaW5wdXQKK3RvIHRleHQgZm9ybWF0dGVycy4gIEEgY29weSBtYWRlIGluIGFuIG90aGVyd2lzZSBUcmFuc3BhcmVudCBmaWxlCitmb3JtYXQgd2hvc2UgbWFya3VwLCBvciBhYnNlbmNlIG9mIG1hcmt1cCwgaGFzIGJlZW4gYXJyYW5nZWQgdG8gdGh3YXJ0CitvciBkaXNjb3VyYWdlIHN1YnNlcXVlbnQgbW9kaWZpY2F0aW9uIGJ5IHJlYWRlcnMgaXMgbm90IFRyYW5zcGFyZW50LgorQW4gaW1hZ2UgZm9ybWF0IGlzIG5vdCBUcmFuc3BhcmVudCBpZiB1c2VkIGZvciBhbnkgc3Vic3RhbnRpYWwgYW1vdW50CitvZiB0ZXh0LiAgQSBjb3B5IHRoYXQgaXMgbm90ICJUcmFuc3BhcmVudCIgaXMgY2FsbGVkICJPcGFxdWUiLgorCitFeGFtcGxlcyBvZiBzdWl0YWJsZSBmb3JtYXRzIGZvciBUcmFuc3BhcmVudCBjb3BpZXMgaW5jbHVkZSBwbGFpbgorQVNDSUkgd2l0aG91dCBtYXJrdXAsIFRleGluZm8gaW5wdXQgZm9ybWF0LCBMYVRlWCBpbnB1dCBmb3JtYXQsIFNHTUwKK29yIFhNTCB1c2luZyBhIHB1YmxpY2x5IGF2YWlsYWJsZSBEVEQsIGFuZCBzdGFuZGFyZC1jb25mb3JtaW5nIHNpbXBsZQorSFRNTCwgUG9zdFNjcmlwdCBvciBQREYgZGVzaWduZWQgZm9yIGh1bWFuIG1vZGlmaWNhdGlvbi4gIEV4YW1wbGVzIG9mCit0cmFuc3BhcmVudCBpbWFnZSBmb3JtYXRzIGluY2x1ZGUgUE5HLCBYQ0YgYW5kIEpQRy4gIE9wYXF1ZSBmb3JtYXRzCitpbmNsdWRlIHByb3ByaWV0YXJ5IGZvcm1hdHMgdGhhdCBjYW4gYmUgcmVhZCBhbmQgZWRpdGVkIG9ubHkgYnkKK3Byb3ByaWV0YXJ5IHdvcmQgcHJvY2Vzc29ycywgU0dNTCBvciBYTUwgZm9yIHdoaWNoIHRoZSBEVEQgYW5kL29yCitwcm9jZXNzaW5nIHRvb2xzIGFyZSBub3QgZ2VuZXJhbGx5IGF2YWlsYWJsZSwgYW5kIHRoZQorbWFjaGluZS1nZW5lcmF0ZWQgSFRNTCwgUG9zdFNjcmlwdCBvciBQREYgcHJvZHVjZWQgYnkgc29tZSB3b3JkCitwcm9jZXNzb3JzIGZvciBvdXRwdXQgcHVycG9zZXMgb25seS4KKworVGhlICJUaXRsZSBQYWdlIiBtZWFucywgZm9yIGEgcHJpbnRlZCBib29rLCB0aGUgdGl0bGUgcGFnZSBpdHNlbGYsCitwbHVzIHN1Y2ggZm9sbG93aW5nIHBhZ2VzIGFzIGFyZSBuZWVkZWQgdG8gaG9sZCwgbGVnaWJseSwgdGhlIG1hdGVyaWFsCit0aGlzIExpY2Vuc2UgcmVxdWlyZXMgdG8gYXBwZWFyIGluIHRoZSB0aXRsZSBwYWdlLiAgRm9yIHdvcmtzIGluCitmb3JtYXRzIHdoaWNoIGRvIG5vdCBoYXZlIGFueSB0aXRsZSBwYWdlIGFzIHN1Y2gsICJUaXRsZSBQYWdlIiBtZWFucwordGhlIHRleHQgbmVhciB0aGUgbW9zdCBwcm9taW5lbnQgYXBwZWFyYW5jZSBvZiB0aGUgd29yaydzIHRpdGxlLAorcHJlY2VkaW5nIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJvZHkgb2YgdGhlIHRleHQuCisKK0Egc2VjdGlvbiAiRW50aXRsZWQgWFlaIiBtZWFucyBhIG5hbWVkIHN1YnVuaXQgb2YgdGhlIERvY3VtZW50IHdob3NlCit0aXRsZSBlaXRoZXIgaXMgcHJlY2lzZWx5IFhZWiBvciBjb250YWlucyBYWVogaW4gcGFyZW50aGVzZXMgZm9sbG93aW5nCit0ZXh0IHRoYXQgdHJhbnNsYXRlcyBYWVogaW4gYW5vdGhlciBsYW5ndWFnZS4gIChIZXJlIFhZWiBzdGFuZHMgZm9yIGEKK3NwZWNpZmljIHNlY3Rpb24gbmFtZSBtZW50aW9uZWQgYmVsb3csIHN1Y2ggYXMgIkFja25vd2xlZGdlbWVudHMiLAorIkRlZGljYXRpb25zIiwgIkVuZG9yc2VtZW50cyIsIG9yICJIaXN0b3J5Ii4pICBUbyAiUHJlc2VydmUgdGhlIFRpdGxlIgorb2Ygc3VjaCBhIHNlY3Rpb24gd2hlbiB5b3UgbW9kaWZ5IHRoZSBEb2N1bWVudCBtZWFucyB0aGF0IGl0IHJlbWFpbnMgYQorc2VjdGlvbiAiRW50aXRsZWQgWFlaIiBhY2NvcmRpbmcgdG8gdGhpcyBkZWZpbml0aW9uLgorCitUaGUgRG9jdW1lbnQgbWF5IGluY2x1ZGUgV2FycmFudHkgRGlzY2xhaW1lcnMgbmV4dCB0byB0aGUgbm90aWNlIHdoaWNoCitzdGF0ZXMgdGhhdCB0aGlzIExpY2Vuc2UgYXBwbGllcyB0byB0aGUgRG9jdW1lbnQuICBUaGVzZSBXYXJyYW50eQorRGlzY2xhaW1lcnMgYXJlIGNvbnNpZGVyZWQgdG8gYmUgaW5jbHVkZWQgYnkgcmVmZXJlbmNlIGluIHRoaXMKK0xpY2Vuc2UsIGJ1dCBvbmx5IGFzIHJlZ2FyZHMgZGlzY2xhaW1pbmcgd2FycmFudGllczogYW55IG90aGVyCitpbXBsaWNhdGlvbiB0aGF0IHRoZXNlIFdhcnJhbnR5IERpc2NsYWltZXJzIG1heSBoYXZlIGlzIHZvaWQgYW5kIGhhcworbm8gZWZmZWN0IG9uIHRoZSBtZWFuaW5nIG9mIHRoaXMgTGljZW5zZS4KKworCisyLiBWRVJCQVRJTSBDT1BZSU5HCisKK1lvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgRG9jdW1lbnQgaW4gYW55IG1lZGl1bSwgZWl0aGVyCitjb21tZXJjaWFsbHkgb3Igbm9uY29tbWVyY2lhbGx5LCBwcm92aWRlZCB0aGF0IHRoaXMgTGljZW5zZSwgdGhlCitjb3B5cmlnaHQgbm90aWNlcywgYW5kIHRoZSBsaWNlbnNlIG5vdGljZSBzYXlpbmcgdGhpcyBMaWNlbnNlIGFwcGxpZXMKK3RvIHRoZSBEb2N1bWVudCBhcmUgcmVwcm9kdWNlZCBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCB5b3UgYWRkIG5vIG90aGVyCitjb25kaXRpb25zIHdoYXRzb2V2ZXIgdG8gdGhvc2Ugb2YgdGhpcyBMaWNlbnNlLiAgWW91IG1heSBub3QgdXNlCit0ZWNobmljYWwgbWVhc3VyZXMgdG8gb2JzdHJ1Y3Qgb3IgY29udHJvbCB0aGUgcmVhZGluZyBvciBmdXJ0aGVyCitjb3B5aW5nIG9mIHRoZSBjb3BpZXMgeW91IG1ha2Ugb3IgZGlzdHJpYnV0ZS4gIEhvd2V2ZXIsIHlvdSBtYXkgYWNjZXB0Citjb21wZW5zYXRpb24gaW4gZXhjaGFuZ2UgZm9yIGNvcGllcy4gIElmIHlvdSBkaXN0cmlidXRlIGEgbGFyZ2UgZW5vdWdoCitudW1iZXIgb2YgY29waWVzIHlvdSBtdXN0IGFsc28gZm9sbG93IHRoZSBjb25kaXRpb25zIGluIHNlY3Rpb24gMy4KKworWW91IG1heSBhbHNvIGxlbmQgY29waWVzLCB1bmRlciB0aGUgc2FtZSBjb25kaXRpb25zIHN0YXRlZCBhYm92ZSwgYW5kCit5b3UgbWF5IHB1YmxpY2x5IGRpc3BsYXkgY29waWVzLgorCisKKzMuIENPUFlJTkcgSU4gUVVBTlRJVFkKKworSWYgeW91IHB1Ymxpc2ggcHJpbnRlZCBjb3BpZXMgKG9yIGNvcGllcyBpbiBtZWRpYSB0aGF0IGNvbW1vbmx5IGhhdmUKK3ByaW50ZWQgY292ZXJzKSBvZiB0aGUgRG9jdW1lbnQsIG51bWJlcmluZyBtb3JlIHRoYW4gMTAwLCBhbmQgdGhlCitEb2N1bWVudCdzIGxpY2Vuc2Ugbm90aWNlIHJlcXVpcmVzIENvdmVyIFRleHRzLCB5b3UgbXVzdCBlbmNsb3NlIHRoZQorY29waWVzIGluIGNvdmVycyB0aGF0IGNhcnJ5LCBjbGVhcmx5IGFuZCBsZWdpYmx5LCBhbGwgdGhlc2UgQ292ZXIKK1RleHRzOiBGcm9udC1Db3ZlciBUZXh0cyBvbiB0aGUgZnJvbnQgY292ZXIsIGFuZCBCYWNrLUNvdmVyIFRleHRzIG9uCit0aGUgYmFjayBjb3Zlci4gIEJvdGggY292ZXJzIG11c3QgYWxzbyBjbGVhcmx5IGFuZCBsZWdpYmx5IGlkZW50aWZ5Cit5b3UgYXMgdGhlIHB1Ymxpc2hlciBvZiB0aGVzZSBjb3BpZXMuICBUaGUgZnJvbnQgY292ZXIgbXVzdCBwcmVzZW50Cit0aGUgZnVsbCB0aXRsZSB3aXRoIGFsbCB3b3JkcyBvZiB0aGUgdGl0bGUgZXF1YWxseSBwcm9taW5lbnQgYW5kCit2aXNpYmxlLiAgWW91IG1heSBhZGQgb3RoZXIgbWF0ZXJpYWwgb24gdGhlIGNvdmVycyBpbiBhZGRpdGlvbi4KK0NvcHlpbmcgd2l0aCBjaGFuZ2VzIGxpbWl0ZWQgdG8gdGhlIGNvdmVycywgYXMgbG9uZyBhcyB0aGV5IHByZXNlcnZlCit0aGUgdGl0bGUgb2YgdGhlIERvY3VtZW50IGFuZCBzYXRpc2Z5IHRoZXNlIGNvbmRpdGlvbnMsIGNhbiBiZSB0cmVhdGVkCithcyB2ZXJiYXRpbSBjb3B5aW5nIGluIG90aGVyIHJlc3BlY3RzLgorCitJZiB0aGUgcmVxdWlyZWQgdGV4dHMgZm9yIGVpdGhlciBjb3ZlciBhcmUgdG9vIHZvbHVtaW5vdXMgdG8gZml0CitsZWdpYmx5LCB5b3Ugc2hvdWxkIHB1dCB0aGUgZmlyc3Qgb25lcyBsaXN0ZWQgKGFzIG1hbnkgYXMgZml0CityZWFzb25hYmx5KSBvbiB0aGUgYWN0dWFsIGNvdmVyLCBhbmQgY29udGludWUgdGhlIHJlc3Qgb250byBhZGphY2VudAorcGFnZXMuCisKK0lmIHlvdSBwdWJsaXNoIG9yIGRpc3RyaWJ1dGUgT3BhcXVlIGNvcGllcyBvZiB0aGUgRG9jdW1lbnQgbnVtYmVyaW5nCittb3JlIHRoYW4gMTAwLCB5b3UgbXVzdCBlaXRoZXIgaW5jbHVkZSBhIG1hY2hpbmUtcmVhZGFibGUgVHJhbnNwYXJlbnQKK2NvcHkgYWxvbmcgd2l0aCBlYWNoIE9wYXF1ZSBjb3B5LCBvciBzdGF0ZSBpbiBvciB3aXRoIGVhY2ggT3BhcXVlIGNvcHkKK2EgY29tcHV0ZXItbmV0d29yayBsb2NhdGlvbiBmcm9tIHdoaWNoIHRoZSBnZW5lcmFsIG5ldHdvcmstdXNpbmcKK3B1YmxpYyBoYXMgYWNjZXNzIHRvIGRvd25sb2FkIHVzaW5nIHB1YmxpYy1zdGFuZGFyZCBuZXR3b3JrIHByb3RvY29scworYSBjb21wbGV0ZSBUcmFuc3BhcmVudCBjb3B5IG9mIHRoZSBEb2N1bWVudCwgZnJlZSBvZiBhZGRlZCBtYXRlcmlhbC4KK0lmIHlvdSB1c2UgdGhlIGxhdHRlciBvcHRpb24sIHlvdSBtdXN0IHRha2UgcmVhc29uYWJseSBwcnVkZW50IHN0ZXBzLAord2hlbiB5b3UgYmVnaW4gZGlzdHJpYnV0aW9uIG9mIE9wYXF1ZSBjb3BpZXMgaW4gcXVhbnRpdHksIHRvIGVuc3VyZQordGhhdCB0aGlzIFRyYW5zcGFyZW50IGNvcHkgd2lsbCByZW1haW4gdGh1cyBhY2Nlc3NpYmxlIGF0IHRoZSBzdGF0ZWQKK2xvY2F0aW9uIHVudGlsIGF0IGxlYXN0IG9uZSB5ZWFyIGFmdGVyIHRoZSBsYXN0IHRpbWUgeW91IGRpc3RyaWJ1dGUgYW4KK09wYXF1ZSBjb3B5IChkaXJlY3RseSBvciB0aHJvdWdoIHlvdXIgYWdlbnRzIG9yIHJldGFpbGVycykgb2YgdGhhdAorZWRpdGlvbiB0byB0aGUgcHVibGljLgorCitJdCBpcyByZXF1ZXN0ZWQsIGJ1dCBub3QgcmVxdWlyZWQsIHRoYXQgeW91IGNvbnRhY3QgdGhlIGF1dGhvcnMgb2YgdGhlCitEb2N1bWVudCB3ZWxsIGJlZm9yZSByZWRpc3RyaWJ1dGluZyBhbnkgbGFyZ2UgbnVtYmVyIG9mIGNvcGllcywgdG8gZ2l2ZQordGhlbSBhIGNoYW5jZSB0byBwcm92aWRlIHlvdSB3aXRoIGFuIHVwZGF0ZWQgdmVyc2lvbiBvZiB0aGUgRG9jdW1lbnQuCisKKworNC4gTU9ESUZJQ0FUSU9OUworCitZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgYSBNb2RpZmllZCBWZXJzaW9uIG9mIHRoZSBEb2N1bWVudCB1bmRlcgordGhlIGNvbmRpdGlvbnMgb2Ygc2VjdGlvbnMgMiBhbmQgMyBhYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgcmVsZWFzZQordGhlIE1vZGlmaWVkIFZlcnNpb24gdW5kZXIgcHJlY2lzZWx5IHRoaXMgTGljZW5zZSwgd2l0aCB0aGUgTW9kaWZpZWQKK1ZlcnNpb24gZmlsbGluZyB0aGUgcm9sZSBvZiB0aGUgRG9jdW1lbnQsIHRodXMgbGljZW5zaW5nIGRpc3RyaWJ1dGlvbgorYW5kIG1vZGlmaWNhdGlvbiBvZiB0aGUgTW9kaWZpZWQgVmVyc2lvbiB0byB3aG9ldmVyIHBvc3Nlc3NlcyBhIGNvcHkKK29mIGl0LiAgSW4gYWRkaXRpb24sIHlvdSBtdXN0IGRvIHRoZXNlIHRoaW5ncyBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbjoKKworQS4gVXNlIGluIHRoZSBUaXRsZSBQYWdlIChhbmQgb24gdGhlIGNvdmVycywgaWYgYW55KSBhIHRpdGxlIGRpc3RpbmN0CisgICBmcm9tIHRoYXQgb2YgdGhlIERvY3VtZW50LCBhbmQgZnJvbSB0aG9zZSBvZiBwcmV2aW91cyB2ZXJzaW9ucworICAgKHdoaWNoIHNob3VsZCwgaWYgdGhlcmUgd2VyZSBhbnksIGJlIGxpc3RlZCBpbiB0aGUgSGlzdG9yeSBzZWN0aW9uCisgICBvZiB0aGUgRG9jdW1lbnQpLiAgWW91IG1heSB1c2UgdGhlIHNhbWUgdGl0bGUgYXMgYSBwcmV2aW91cyB2ZXJzaW9uCisgICBpZiB0aGUgb3JpZ2luYWwgcHVibGlzaGVyIG9mIHRoYXQgdmVyc2lvbiBnaXZlcyBwZXJtaXNzaW9uLgorQi4gTGlzdCBvbiB0aGUgVGl0bGUgUGFnZSwgYXMgYXV0aG9ycywgb25lIG9yIG1vcmUgcGVyc29ucyBvciBlbnRpdGllcworICAgcmVzcG9uc2libGUgZm9yIGF1dGhvcnNoaXAgb2YgdGhlIG1vZGlmaWNhdGlvbnMgaW4gdGhlIE1vZGlmaWVkCisgICBWZXJzaW9uLCB0b2dldGhlciB3aXRoIGF0IGxlYXN0IGZpdmUgb2YgdGhlIHByaW5jaXBhbCBhdXRob3JzIG9mIHRoZQorICAgRG9jdW1lbnQgKGFsbCBvZiBpdHMgcHJpbmNpcGFsIGF1dGhvcnMsIGlmIGl0IGhhcyBmZXdlciB0aGFuIGZpdmUpLAorICAgdW5sZXNzIHRoZXkgcmVsZWFzZSB5b3UgZnJvbSB0aGlzIHJlcXVpcmVtZW50LgorQy4gU3RhdGUgb24gdGhlIFRpdGxlIHBhZ2UgdGhlIG5hbWUgb2YgdGhlIHB1Ymxpc2hlciBvZiB0aGUKKyAgIE1vZGlmaWVkIFZlcnNpb24sIGFzIHRoZSBwdWJsaXNoZXIuCitELiBQcmVzZXJ2ZSBhbGwgdGhlIGNvcHlyaWdodCBub3RpY2VzIG9mIHRoZSBEb2N1bWVudC4KK0UuIEFkZCBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGZvciB5b3VyIG1vZGlmaWNhdGlvbnMKKyAgIGFkamFjZW50IHRvIHRoZSBvdGhlciBjb3B5cmlnaHQgbm90aWNlcy4KK0YuIEluY2x1ZGUsIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBjb3B5cmlnaHQgbm90aWNlcywgYSBsaWNlbnNlIG5vdGljZQorICAgZ2l2aW5nIHRoZSBwdWJsaWMgcGVybWlzc2lvbiB0byB1c2UgdGhlIE1vZGlmaWVkIFZlcnNpb24gdW5kZXIgdGhlCisgICB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluIHRoZSBmb3JtIHNob3duIGluIHRoZSBBZGRlbmR1bSBiZWxvdy4KK0cuIFByZXNlcnZlIGluIHRoYXQgbGljZW5zZSBub3RpY2UgdGhlIGZ1bGwgbGlzdHMgb2YgSW52YXJpYW50IFNlY3Rpb25zCisgICBhbmQgcmVxdWlyZWQgQ292ZXIgVGV4dHMgZ2l2ZW4gaW4gdGhlIERvY3VtZW50J3MgbGljZW5zZSBub3RpY2UuCitILiBJbmNsdWRlIGFuIHVuYWx0ZXJlZCBjb3B5IG9mIHRoaXMgTGljZW5zZS4KK0kuIFByZXNlcnZlIHRoZSBzZWN0aW9uIEVudGl0bGVkICJIaXN0b3J5IiwgUHJlc2VydmUgaXRzIFRpdGxlLCBhbmQgYWRkCisgICB0byBpdCBhbiBpdGVtIHN0YXRpbmcgYXQgbGVhc3QgdGhlIHRpdGxlLCB5ZWFyLCBuZXcgYXV0aG9ycywgYW5kCisgICBwdWJsaXNoZXIgb2YgdGhlIE1vZGlmaWVkIFZlcnNpb24gYXMgZ2l2ZW4gb24gdGhlIFRpdGxlIFBhZ2UuICBJZgorICAgdGhlcmUgaXMgbm8gc2VjdGlvbiBFbnRpdGxlZCAiSGlzdG9yeSIgaW4gdGhlIERvY3VtZW50LCBjcmVhdGUgb25lCisgICBzdGF0aW5nIHRoZSB0aXRsZSwgeWVhciwgYXV0aG9ycywgYW5kIHB1Ymxpc2hlciBvZiB0aGUgRG9jdW1lbnQgYXMKKyAgIGdpdmVuIG9uIGl0cyBUaXRsZSBQYWdlLCB0aGVuIGFkZCBhbiBpdGVtIGRlc2NyaWJpbmcgdGhlIE1vZGlmaWVkCisgICBWZXJzaW9uIGFzIHN0YXRlZCBpbiB0aGUgcHJldmlvdXMgc2VudGVuY2UuCitKLiBQcmVzZXJ2ZSB0aGUgbmV0d29yayBsb2NhdGlvbiwgaWYgYW55LCBnaXZlbiBpbiB0aGUgRG9jdW1lbnQgZm9yCisgICBwdWJsaWMgYWNjZXNzIHRvIGEgVHJhbnNwYXJlbnQgY29weSBvZiB0aGUgRG9jdW1lbnQsIGFuZCBsaWtld2lzZQorICAgdGhlIG5ldHdvcmsgbG9jYXRpb25zIGdpdmVuIGluIHRoZSBEb2N1bWVudCBmb3IgcHJldmlvdXMgdmVyc2lvbnMKKyAgIGl0IHdhcyBiYXNlZCBvbi4gIFRoZXNlIG1heSBiZSBwbGFjZWQgaW4gdGhlICJIaXN0b3J5IiBzZWN0aW9uLgorICAgWW91IG1heSBvbWl0IGEgbmV0d29yayBsb2NhdGlvbiBmb3IgYSB3b3JrIHRoYXQgd2FzIHB1Ymxpc2hlZCBhdAorICAgbGVhc3QgZm91ciB5ZWFycyBiZWZvcmUgdGhlIERvY3VtZW50IGl0c2VsZiwgb3IgaWYgdGhlIG9yaWdpbmFsCisgICBwdWJsaXNoZXIgb2YgdGhlIHZlcnNpb24gaXQgcmVmZXJzIHRvIGdpdmVzIHBlcm1pc3Npb24uCitLLiBGb3IgYW55IHNlY3Rpb24gRW50aXRsZWQgIkFja25vd2xlZGdlbWVudHMiIG9yICJEZWRpY2F0aW9ucyIsCisgICBQcmVzZXJ2ZSB0aGUgVGl0bGUgb2YgdGhlIHNlY3Rpb24sIGFuZCBwcmVzZXJ2ZSBpbiB0aGUgc2VjdGlvbiBhbGwKKyAgIHRoZSBzdWJzdGFuY2UgYW5kIHRvbmUgb2YgZWFjaCBvZiB0aGUgY29udHJpYnV0b3IgYWNrbm93bGVkZ2VtZW50cworICAgYW5kL29yIGRlZGljYXRpb25zIGdpdmVuIHRoZXJlaW4uCitMLiBQcmVzZXJ2ZSBhbGwgdGhlIEludmFyaWFudCBTZWN0aW9ucyBvZiB0aGUgRG9jdW1lbnQsCisgICB1bmFsdGVyZWQgaW4gdGhlaXIgdGV4dCBhbmQgaW4gdGhlaXIgdGl0bGVzLiAgU2VjdGlvbiBudW1iZXJzCisgICBvciB0aGUgZXF1aXZhbGVudCBhcmUgbm90IGNvbnNpZGVyZWQgcGFydCBvZiB0aGUgc2VjdGlvbiB0aXRsZXMuCitNLiBEZWxldGUgYW55IHNlY3Rpb24gRW50aXRsZWQgIkVuZG9yc2VtZW50cyIuICBTdWNoIGEgc2VjdGlvbgorICAgbWF5IG5vdCBiZSBpbmNsdWRlZCBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbi4KK04uIERvIG5vdCByZXRpdGxlIGFueSBleGlzdGluZyBzZWN0aW9uIHRvIGJlIEVudGl0bGVkICJFbmRvcnNlbWVudHMiCisgICBvciB0byBjb25mbGljdCBpbiB0aXRsZSB3aXRoIGFueSBJbnZhcmlhbnQgU2VjdGlvbi4KK08uIFByZXNlcnZlIGFueSBXYXJyYW50eSBEaXNjbGFpbWVycy4KKworSWYgdGhlIE1vZGlmaWVkIFZlcnNpb24gaW5jbHVkZXMgbmV3IGZyb250LW1hdHRlciBzZWN0aW9ucyBvcgorYXBwZW5kaWNlcyB0aGF0IHF1YWxpZnkgYXMgU2Vjb25kYXJ5IFNlY3Rpb25zIGFuZCBjb250YWluIG5vIG1hdGVyaWFsCitjb3BpZWQgZnJvbSB0aGUgRG9jdW1lbnQsIHlvdSBtYXkgYXQgeW91ciBvcHRpb24gZGVzaWduYXRlIHNvbWUgb3IgYWxsCitvZiB0aGVzZSBzZWN0aW9ucyBhcyBpbnZhcmlhbnQuICBUbyBkbyB0aGlzLCBhZGQgdGhlaXIgdGl0bGVzIHRvIHRoZQorbGlzdCBvZiBJbnZhcmlhbnQgU2VjdGlvbnMgaW4gdGhlIE1vZGlmaWVkIFZlcnNpb24ncyBsaWNlbnNlIG5vdGljZS4KK1RoZXNlIHRpdGxlcyBtdXN0IGJlIGRpc3RpbmN0IGZyb20gYW55IG90aGVyIHNlY3Rpb24gdGl0bGVzLgorCitZb3UgbWF5IGFkZCBhIHNlY3Rpb24gRW50aXRsZWQgIkVuZG9yc2VtZW50cyIsIHByb3ZpZGVkIGl0IGNvbnRhaW5zCitub3RoaW5nIGJ1dCBlbmRvcnNlbWVudHMgb2YgeW91ciBNb2RpZmllZCBWZXJzaW9uIGJ5IHZhcmlvdXMKK3BhcnRpZXMtLWZvciBleGFtcGxlLCBzdGF0ZW1lbnRzIG9mIHBlZXIgcmV2aWV3IG9yIHRoYXQgdGhlIHRleHQgaGFzCitiZWVuIGFwcHJvdmVkIGJ5IGFuIG9yZ2FuaXphdGlvbiBhcyB0aGUgYXV0aG9yaXRhdGl2ZSBkZWZpbml0aW9uIG9mIGEKK3N0YW5kYXJkLgorCitZb3UgbWF5IGFkZCBhIHBhc3NhZ2Ugb2YgdXAgdG8gZml2ZSB3b3JkcyBhcyBhIEZyb250LUNvdmVyIFRleHQsIGFuZCBhCitwYXNzYWdlIG9mIHVwIHRvIDI1IHdvcmRzIGFzIGEgQmFjay1Db3ZlciBUZXh0LCB0byB0aGUgZW5kIG9mIHRoZSBsaXN0CitvZiBDb3ZlciBUZXh0cyBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbi4gIE9ubHkgb25lIHBhc3NhZ2Ugb2YKK0Zyb250LUNvdmVyIFRleHQgYW5kIG9uZSBvZiBCYWNrLUNvdmVyIFRleHQgbWF5IGJlIGFkZGVkIGJ5IChvcgordGhyb3VnaCBhcnJhbmdlbWVudHMgbWFkZSBieSkgYW55IG9uZSBlbnRpdHkuICBJZiB0aGUgRG9jdW1lbnQgYWxyZWFkeQoraW5jbHVkZXMgYSBjb3ZlciB0ZXh0IGZvciB0aGUgc2FtZSBjb3ZlciwgcHJldmlvdXNseSBhZGRlZCBieSB5b3Ugb3IKK2J5IGFycmFuZ2VtZW50IG1hZGUgYnkgdGhlIHNhbWUgZW50aXR5IHlvdSBhcmUgYWN0aW5nIG9uIGJlaGFsZiBvZiwKK3lvdSBtYXkgbm90IGFkZCBhbm90aGVyOyBidXQgeW91IG1heSByZXBsYWNlIHRoZSBvbGQgb25lLCBvbiBleHBsaWNpdAorcGVybWlzc2lvbiBmcm9tIHRoZSBwcmV2aW91cyBwdWJsaXNoZXIgdGhhdCBhZGRlZCB0aGUgb2xkIG9uZS4KKworVGhlIGF1dGhvcihzKSBhbmQgcHVibGlzaGVyKHMpIG9mIHRoZSBEb2N1bWVudCBkbyBub3QgYnkgdGhpcyBMaWNlbnNlCitnaXZlIHBlcm1pc3Npb24gdG8gdXNlIHRoZWlyIG5hbWVzIGZvciBwdWJsaWNpdHkgZm9yIG9yIHRvIGFzc2VydCBvcgoraW1wbHkgZW5kb3JzZW1lbnQgb2YgYW55IE1vZGlmaWVkIFZlcnNpb24uCisKKworNS4gQ09NQklOSU5HIERPQ1VNRU5UUworCitZb3UgbWF5IGNvbWJpbmUgdGhlIERvY3VtZW50IHdpdGggb3RoZXIgZG9jdW1lbnRzIHJlbGVhc2VkIHVuZGVyIHRoaXMKK0xpY2Vuc2UsIHVuZGVyIHRoZSB0ZXJtcyBkZWZpbmVkIGluIHNlY3Rpb24gNCBhYm92ZSBmb3IgbW9kaWZpZWQKK3ZlcnNpb25zLCBwcm92aWRlZCB0aGF0IHlvdSBpbmNsdWRlIGluIHRoZSBjb21iaW5hdGlvbiBhbGwgb2YgdGhlCitJbnZhcmlhbnQgU2VjdGlvbnMgb2YgYWxsIG9mIHRoZSBvcmlnaW5hbCBkb2N1bWVudHMsIHVubW9kaWZpZWQsIGFuZAorbGlzdCB0aGVtIGFsbCBhcyBJbnZhcmlhbnQgU2VjdGlvbnMgb2YgeW91ciBjb21iaW5lZCB3b3JrIGluIGl0cworbGljZW5zZSBub3RpY2UsIGFuZCB0aGF0IHlvdSBwcmVzZXJ2ZSBhbGwgdGhlaXIgV2FycmFudHkgRGlzY2xhaW1lcnMuCisKK1RoZSBjb21iaW5lZCB3b3JrIG5lZWQgb25seSBjb250YWluIG9uZSBjb3B5IG9mIHRoaXMgTGljZW5zZSwgYW5kCittdWx0aXBsZSBpZGVudGljYWwgSW52YXJpYW50IFNlY3Rpb25zIG1heSBiZSByZXBsYWNlZCB3aXRoIGEgc2luZ2xlCitjb3B5LiAgSWYgdGhlcmUgYXJlIG11bHRpcGxlIEludmFyaWFudCBTZWN0aW9ucyB3aXRoIHRoZSBzYW1lIG5hbWUgYnV0CitkaWZmZXJlbnQgY29udGVudHMsIG1ha2UgdGhlIHRpdGxlIG9mIGVhY2ggc3VjaCBzZWN0aW9uIHVuaXF1ZSBieQorYWRkaW5nIGF0IHRoZSBlbmQgb2YgaXQsIGluIHBhcmVudGhlc2VzLCB0aGUgbmFtZSBvZiB0aGUgb3JpZ2luYWwKK2F1dGhvciBvciBwdWJsaXNoZXIgb2YgdGhhdCBzZWN0aW9uIGlmIGtub3duLCBvciBlbHNlIGEgdW5pcXVlIG51bWJlci4KK01ha2UgdGhlIHNhbWUgYWRqdXN0bWVudCB0byB0aGUgc2VjdGlvbiB0aXRsZXMgaW4gdGhlIGxpc3Qgb2YKK0ludmFyaWFudCBTZWN0aW9ucyBpbiB0aGUgbGljZW5zZSBub3RpY2Ugb2YgdGhlIGNvbWJpbmVkIHdvcmsuCisKK0luIHRoZSBjb21iaW5hdGlvbiwgeW91IG11c3QgY29tYmluZSBhbnkgc2VjdGlvbnMgRW50aXRsZWQgIkhpc3RvcnkiCitpbiB0aGUgdmFyaW91cyBvcmlnaW5hbCBkb2N1bWVudHMsIGZvcm1pbmcgb25lIHNlY3Rpb24gRW50aXRsZWQKKyJIaXN0b3J5IjsgbGlrZXdpc2UgY29tYmluZSBhbnkgc2VjdGlvbnMgRW50aXRsZWQgIkFja25vd2xlZGdlbWVudHMiLAorYW5kIGFueSBzZWN0aW9ucyBFbnRpdGxlZCAiRGVkaWNhdGlvbnMiLiAgWW91IG11c3QgZGVsZXRlIGFsbCBzZWN0aW9ucworRW50aXRsZWQgIkVuZG9yc2VtZW50cyIuCisKKworNi4gQ09MTEVDVElPTlMgT0YgRE9DVU1FTlRTCisKK1lvdSBtYXkgbWFrZSBhIGNvbGxlY3Rpb24gY29uc2lzdGluZyBvZiB0aGUgRG9jdW1lbnQgYW5kIG90aGVyIGRvY3VtZW50cworcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgcmVwbGFjZSB0aGUgaW5kaXZpZHVhbCBjb3BpZXMgb2YgdGhpcworTGljZW5zZSBpbiB0aGUgdmFyaW91cyBkb2N1bWVudHMgd2l0aCBhIHNpbmdsZSBjb3B5IHRoYXQgaXMgaW5jbHVkZWQgaW4KK3RoZSBjb2xsZWN0aW9uLCBwcm92aWRlZCB0aGF0IHlvdSBmb2xsb3cgdGhlIHJ1bGVzIG9mIHRoaXMgTGljZW5zZSBmb3IKK3ZlcmJhdGltIGNvcHlpbmcgb2YgZWFjaCBvZiB0aGUgZG9jdW1lbnRzIGluIGFsbCBvdGhlciByZXNwZWN0cy4KKworWW91IG1heSBleHRyYWN0IGEgc2luZ2xlIGRvY3VtZW50IGZyb20gc3VjaCBhIGNvbGxlY3Rpb24sIGFuZCBkaXN0cmlidXRlCitpdCBpbmRpdmlkdWFsbHkgdW5kZXIgdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB5b3UgaW5zZXJ0IGEgY29weSBvZiB0aGlzCitMaWNlbnNlIGludG8gdGhlIGV4dHJhY3RlZCBkb2N1bWVudCwgYW5kIGZvbGxvdyB0aGlzIExpY2Vuc2UgaW4gYWxsCitvdGhlciByZXNwZWN0cyByZWdhcmRpbmcgdmVyYmF0aW0gY29weWluZyBvZiB0aGF0IGRvY3VtZW50LgorCisKKzcuIEFHR1JFR0FUSU9OIFdJVEggSU5ERVBFTkRFTlQgV09SS1MKKworQSBjb21waWxhdGlvbiBvZiB0aGUgRG9jdW1lbnQgb3IgaXRzIGRlcml2YXRpdmVzIHdpdGggb3RoZXIgc2VwYXJhdGUKK2FuZCBpbmRlcGVuZGVudCBkb2N1bWVudHMgb3Igd29ya3MsIGluIG9yIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvcgorZGlzdHJpYnV0aW9uIG1lZGl1bSwgaXMgY2FsbGVkIGFuICJhZ2dyZWdhdGUiIGlmIHRoZSBjb3B5cmlnaHQKK3Jlc3VsdGluZyBmcm9tIHRoZSBjb21waWxhdGlvbiBpcyBub3QgdXNlZCB0byBsaW1pdCB0aGUgbGVnYWwgcmlnaHRzCitvZiB0aGUgY29tcGlsYXRpb24ncyB1c2VycyBiZXlvbmQgd2hhdCB0aGUgaW5kaXZpZHVhbCB3b3JrcyBwZXJtaXQuCitXaGVuIHRoZSBEb2N1bWVudCBpcyBpbmNsdWRlZCBpbiBhbiBhZ2dyZWdhdGUsIHRoaXMgTGljZW5zZSBkb2VzIG5vdAorYXBwbHkgdG8gdGhlIG90aGVyIHdvcmtzIGluIHRoZSBhZ2dyZWdhdGUgd2hpY2ggYXJlIG5vdCB0aGVtc2VsdmVzCitkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBEb2N1bWVudC4KKworSWYgdGhlIENvdmVyIFRleHQgcmVxdWlyZW1lbnQgb2Ygc2VjdGlvbiAzIGlzIGFwcGxpY2FibGUgdG8gdGhlc2UKK2NvcGllcyBvZiB0aGUgRG9jdW1lbnQsIHRoZW4gaWYgdGhlIERvY3VtZW50IGlzIGxlc3MgdGhhbiBvbmUgaGFsZiBvZgordGhlIGVudGlyZSBhZ2dyZWdhdGUsIHRoZSBEb2N1bWVudCdzIENvdmVyIFRleHRzIG1heSBiZSBwbGFjZWQgb24KK2NvdmVycyB0aGF0IGJyYWNrZXQgdGhlIERvY3VtZW50IHdpdGhpbiB0aGUgYWdncmVnYXRlLCBvciB0aGUKK2VsZWN0cm9uaWMgZXF1aXZhbGVudCBvZiBjb3ZlcnMgaWYgdGhlIERvY3VtZW50IGlzIGluIGVsZWN0cm9uaWMgZm9ybS4KK090aGVyd2lzZSB0aGV5IG11c3QgYXBwZWFyIG9uIHByaW50ZWQgY292ZXJzIHRoYXQgYnJhY2tldCB0aGUgd2hvbGUKK2FnZ3JlZ2F0ZS4KKworCis4LiBUUkFOU0xBVElPTgorCitUcmFuc2xhdGlvbiBpcyBjb25zaWRlcmVkIGEga2luZCBvZiBtb2RpZmljYXRpb24sIHNvIHlvdSBtYXkKK2Rpc3RyaWJ1dGUgdHJhbnNsYXRpb25zIG9mIHRoZSBEb2N1bWVudCB1bmRlciB0aGUgdGVybXMgb2Ygc2VjdGlvbiA0LgorUmVwbGFjaW5nIEludmFyaWFudCBTZWN0aW9ucyB3aXRoIHRyYW5zbGF0aW9ucyByZXF1aXJlcyBzcGVjaWFsCitwZXJtaXNzaW9uIGZyb20gdGhlaXIgY29weXJpZ2h0IGhvbGRlcnMsIGJ1dCB5b3UgbWF5IGluY2x1ZGUKK3RyYW5zbGF0aW9ucyBvZiBzb21lIG9yIGFsbCBJbnZhcmlhbnQgU2VjdGlvbnMgaW4gYWRkaXRpb24gdG8gdGhlCitvcmlnaW5hbCB2ZXJzaW9ucyBvZiB0aGVzZSBJbnZhcmlhbnQgU2VjdGlvbnMuICBZb3UgbWF5IGluY2x1ZGUgYQordHJhbnNsYXRpb24gb2YgdGhpcyBMaWNlbnNlLCBhbmQgYWxsIHRoZSBsaWNlbnNlIG5vdGljZXMgaW4gdGhlCitEb2N1bWVudCwgYW5kIGFueSBXYXJyYW50eSBEaXNjbGFpbWVycywgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBpbmNsdWRlCit0aGUgb3JpZ2luYWwgRW5nbGlzaCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhlIG9yaWdpbmFsIHZlcnNpb25zCitvZiB0aG9zZSBub3RpY2VzIGFuZCBkaXNjbGFpbWVycy4gIEluIGNhc2Ugb2YgYSBkaXNhZ3JlZW1lbnQgYmV0d2VlbgordGhlIHRyYW5zbGF0aW9uIGFuZCB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBub3RpY2UKK29yIGRpc2NsYWltZXIsIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIHdpbGwgcHJldmFpbC4KKworSWYgYSBzZWN0aW9uIGluIHRoZSBEb2N1bWVudCBpcyBFbnRpdGxlZCAiQWNrbm93bGVkZ2VtZW50cyIsCisiRGVkaWNhdGlvbnMiLCBvciAiSGlzdG9yeSIsIHRoZSByZXF1aXJlbWVudCAoc2VjdGlvbiA0KSB0byBQcmVzZXJ2ZQoraXRzIFRpdGxlIChzZWN0aW9uIDEpIHdpbGwgdHlwaWNhbGx5IHJlcXVpcmUgY2hhbmdpbmcgdGhlIGFjdHVhbAordGl0bGUuCisKKworOS4gVEVSTUlOQVRJT04KKworWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBEb2N1bWVudCBleGNlcHQKK2FzIGV4cHJlc3NseSBwcm92aWRlZCBmb3IgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IG90aGVyIGF0dGVtcHQgdG8KK2NvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBEb2N1bWVudCBpcyB2b2lkLCBhbmQgd2lsbAorYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiAgSG93ZXZlciwKK3BhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMKK0xpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisKKzEwLiBGVVRVUkUgUkVWSVNJT05TIE9GIFRISVMgTElDRU5TRQorCitUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIG5ldywgcmV2aXNlZCB2ZXJzaW9ucworb2YgdGhlIEdOVSBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3Cit2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkKK2RpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuICBTZWUKK2h0dHA6Ly93d3cuZ251Lm9yZy9jb3B5bGVmdC8uCisKK0VhY2ggdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLgorSWYgdGhlIERvY3VtZW50IHNwZWNpZmllcyB0aGF0IGEgcGFydGljdWxhciBudW1iZXJlZCB2ZXJzaW9uIG9mIHRoaXMKK0xpY2Vuc2UgIm9yIGFueSBsYXRlciB2ZXJzaW9uIiBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mCitmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHNwZWNpZmllZCB2ZXJzaW9uIG9yCitvZiBhbnkgbGF0ZXIgdmVyc2lvbiB0aGF0IGhhcyBiZWVuIHB1Ymxpc2hlZCAobm90IGFzIGEgZHJhZnQpIGJ5IHRoZQorRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIERvY3VtZW50IGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uCitudW1iZXIgb2YgdGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCAobm90CithcyBhIGRyYWZ0KSBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisKK0FEREVORFVNOiBIb3cgdG8gdXNlIHRoaXMgTGljZW5zZSBmb3IgeW91ciBkb2N1bWVudHMKKworVG8gdXNlIHRoaXMgTGljZW5zZSBpbiBhIGRvY3VtZW50IHlvdSBoYXZlIHdyaXR0ZW4sIGluY2x1ZGUgYSBjb3B5IG9mCit0aGUgTGljZW5zZSBpbiB0aGUgZG9jdW1lbnQgYW5kIHB1dCB0aGUgZm9sbG93aW5nIGNvcHlyaWdodCBhbmQKK2xpY2Vuc2Ugbm90aWNlcyBqdXN0IGFmdGVyIHRoZSB0aXRsZSBwYWdlOgorCisgICAgQ29weXJpZ2h0IChjKSAgWUVBUiAgWU9VUiBOQU1FLgorICAgIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAorICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMgorICAgIG9yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICAgIHdpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIG5vIEJhY2stQ292ZXIgVGV4dHMuCisgICAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkICJHTlUKKyAgICBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSIuCisKK0lmIHlvdSBoYXZlIEludmFyaWFudCBTZWN0aW9ucywgRnJvbnQtQ292ZXIgVGV4dHMgYW5kIEJhY2stQ292ZXIgVGV4dHMsCityZXBsYWNlIHRoZSAid2l0aC4uLlRleHRzLiIgbGluZSB3aXRoIHRoaXM6CisKKyAgICB3aXRoIHRoZSBJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgTElTVCBUSEVJUiBUSVRMRVMsIHdpdGggdGhlCisgICAgRnJvbnQtQ292ZXIgVGV4dHMgYmVpbmcgTElTVCwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgTElTVC4KKworSWYgeW91IGhhdmUgSW52YXJpYW50IFNlY3Rpb25zIHdpdGhvdXQgQ292ZXIgVGV4dHMsIG9yIHNvbWUgb3RoZXIKK2NvbWJpbmF0aW9uIG9mIHRoZSB0aHJlZSwgbWVyZ2UgdGhvc2UgdHdvIGFsdGVybmF0aXZlcyB0byBzdWl0IHRoZQorc2l0dWF0aW9uLgorCitJZiB5b3VyIGRvY3VtZW50IGNvbnRhaW5zIG5vbnRyaXZpYWwgZXhhbXBsZXMgb2YgcHJvZ3JhbSBjb2RlLCB3ZQorcmVjb21tZW5kIHJlbGVhc2luZyB0aGVzZSBleGFtcGxlcyBpbiBwYXJhbGxlbCB1bmRlciB5b3VyIGNob2ljZSBvZgorZnJlZSBzb2Z0d2FyZSBsaWNlbnNlLCBzdWNoIGFzIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKK3RvIHBlcm1pdCB0aGVpciB1c2UgaW4gZnJlZSBzb2Z0d2FyZS4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0ZETC0xLjIrIGIvbGljZW5zZXMvRkRMLTEuMisKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzIzYTM1MwotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0ZETC0xLjIrCkBAIC0wLDAgKzEsMiBAQAorR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCB2ZXJzaW9uIDEuMiBvciBhbnkgbGF0ZXIgdmVyc2lvbi4KK1NlZSBGREwtMS4yIG9yIEZETC0xLjMgZm9yIHRoZSBmdWxsIHRleHQgb2YgdGhlc2UgbGljZW5zZXMuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9GREwtMS4zIGIvbGljZW5zZXMvRkRMLTEuMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTg1NGYwCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvRkRMLTEuMwpAQCAtMCwwICsxLDQ1MSBAQAorCisgICAgICAgICAgICAgICAgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlCisgICAgICAgICAgICAgICAgIFZlcnNpb24gMS4zLCAzIE5vdmVtYmVyIDIwMDgKKworCisgQ29weXJpZ2h0IChDKSAyMDAwLCAyMDAxLCAyMDAyLCAyMDA3LCAyMDA4IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgICA8aHR0cDovL2ZzZi5vcmcvPgorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCiswLiBQUkVBTUJMRQorCitUaGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UgaXMgdG8gbWFrZSBhIG1hbnVhbCwgdGV4dGJvb2ssIG9yIG90aGVyCitmdW5jdGlvbmFsIGFuZCB1c2VmdWwgZG9jdW1lbnQgImZyZWUiIGluIHRoZSBzZW5zZSBvZiBmcmVlZG9tOiB0bworYXNzdXJlIGV2ZXJ5b25lIHRoZSBlZmZlY3RpdmUgZnJlZWRvbSB0byBjb3B5IGFuZCByZWRpc3RyaWJ1dGUgaXQsCit3aXRoIG9yIHdpdGhvdXQgbW9kaWZ5aW5nIGl0LCBlaXRoZXIgY29tbWVyY2lhbGx5IG9yIG5vbmNvbW1lcmNpYWxseS4KK1NlY29uZGFyaWx5LCB0aGlzIExpY2Vuc2UgcHJlc2VydmVzIGZvciB0aGUgYXV0aG9yIGFuZCBwdWJsaXNoZXIgYSB3YXkKK3RvIGdldCBjcmVkaXQgZm9yIHRoZWlyIHdvcmssIHdoaWxlIG5vdCBiZWluZyBjb25zaWRlcmVkIHJlc3BvbnNpYmxlCitmb3IgbW9kaWZpY2F0aW9ucyBtYWRlIGJ5IG90aGVycy4KKworVGhpcyBMaWNlbnNlIGlzIGEga2luZCBvZiAiY29weWxlZnQiLCB3aGljaCBtZWFucyB0aGF0IGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSBkb2N1bWVudCBtdXN0IHRoZW1zZWx2ZXMgYmUgZnJlZSBpbiB0aGUgc2FtZSBzZW5zZS4gIEl0Citjb21wbGVtZW50cyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHdoaWNoIGlzIGEgY29weWxlZnQKK2xpY2Vuc2UgZGVzaWduZWQgZm9yIGZyZWUgc29mdHdhcmUuCisKK1dlIGhhdmUgZGVzaWduZWQgdGhpcyBMaWNlbnNlIGluIG9yZGVyIHRvIHVzZSBpdCBmb3IgbWFudWFscyBmb3IgZnJlZQorc29mdHdhcmUsIGJlY2F1c2UgZnJlZSBzb2Z0d2FyZSBuZWVkcyBmcmVlIGRvY3VtZW50YXRpb246IGEgZnJlZQorcHJvZ3JhbSBzaG91bGQgY29tZSB3aXRoIG1hbnVhbHMgcHJvdmlkaW5nIHRoZSBzYW1lIGZyZWVkb21zIHRoYXQgdGhlCitzb2Z0d2FyZSBkb2VzLiAgQnV0IHRoaXMgTGljZW5zZSBpcyBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBtYW51YWxzOworaXQgY2FuIGJlIHVzZWQgZm9yIGFueSB0ZXh0dWFsIHdvcmssIHJlZ2FyZGxlc3Mgb2Ygc3ViamVjdCBtYXR0ZXIgb3IKK3doZXRoZXIgaXQgaXMgcHVibGlzaGVkIGFzIGEgcHJpbnRlZCBib29rLiAgV2UgcmVjb21tZW5kIHRoaXMgTGljZW5zZQorcHJpbmNpcGFsbHkgZm9yIHdvcmtzIHdob3NlIHB1cnBvc2UgaXMgaW5zdHJ1Y3Rpb24gb3IgcmVmZXJlbmNlLgorCisKKzEuIEFQUExJQ0FCSUxJVFkgQU5EIERFRklOSVRJT05TCisKK1RoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBtYW51YWwgb3Igb3RoZXIgd29yaywgaW4gYW55IG1lZGl1bSwgdGhhdAorY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBjYW4gYmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuICBTdWNoIGEgbm90aWNlIGdyYW50cyBhCit3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUgbGljZW5zZSwgdW5saW1pdGVkIGluIGR1cmF0aW9uLCB0byB1c2UgdGhhdAord29yayB1bmRlciB0aGUgY29uZGl0aW9ucyBzdGF0ZWQgaGVyZWluLiAgVGhlICJEb2N1bWVudCIsIGJlbG93LAorcmVmZXJzIHRvIGFueSBzdWNoIG1hbnVhbCBvciB3b3JrLiAgQW55IG1lbWJlciBvZiB0aGUgcHVibGljIGlzIGEKK2xpY2Vuc2VlLCBhbmQgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLiAgWW91IGFjY2VwdCB0aGUgbGljZW5zZSBpZiB5b3UKK2NvcHksIG1vZGlmeSBvciBkaXN0cmlidXRlIHRoZSB3b3JrIGluIGEgd2F5IHJlcXVpcmluZyBwZXJtaXNzaW9uCit1bmRlciBjb3B5cmlnaHQgbGF3LgorCitBICJNb2RpZmllZCBWZXJzaW9uIiBvZiB0aGUgRG9jdW1lbnQgbWVhbnMgYW55IHdvcmsgY29udGFpbmluZyB0aGUKK0RvY3VtZW50IG9yIGEgcG9ydGlvbiBvZiBpdCwgZWl0aGVyIGNvcGllZCB2ZXJiYXRpbSwgb3Igd2l0aAorbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuCisKK0EgIlNlY29uZGFyeSBTZWN0aW9uIiBpcyBhIG5hbWVkIGFwcGVuZGl4IG9yIGEgZnJvbnQtbWF0dGVyIHNlY3Rpb24gb2YKK3RoZSBEb2N1bWVudCB0aGF0IGRlYWxzIGV4Y2x1c2l2ZWx5IHdpdGggdGhlIHJlbGF0aW9uc2hpcCBvZiB0aGUKK3B1Ymxpc2hlcnMgb3IgYXV0aG9ycyBvZiB0aGUgRG9jdW1lbnQgdG8gdGhlIERvY3VtZW50J3Mgb3ZlcmFsbAorc3ViamVjdCAob3IgdG8gcmVsYXRlZCBtYXR0ZXJzKSBhbmQgY29udGFpbnMgbm90aGluZyB0aGF0IGNvdWxkIGZhbGwKK2RpcmVjdGx5IHdpdGhpbiB0aGF0IG92ZXJhbGwgc3ViamVjdC4gIChUaHVzLCBpZiB0aGUgRG9jdW1lbnQgaXMgaW4KK3BhcnQgYSB0ZXh0Ym9vayBvZiBtYXRoZW1hdGljcywgYSBTZWNvbmRhcnkgU2VjdGlvbiBtYXkgbm90IGV4cGxhaW4KK2FueSBtYXRoZW1hdGljcy4pICBUaGUgcmVsYXRpb25zaGlwIGNvdWxkIGJlIGEgbWF0dGVyIG9mIGhpc3RvcmljYWwKK2Nvbm5lY3Rpb24gd2l0aCB0aGUgc3ViamVjdCBvciB3aXRoIHJlbGF0ZWQgbWF0dGVycywgb3Igb2YgbGVnYWwsCitjb21tZXJjaWFsLCBwaGlsb3NvcGhpY2FsLCBldGhpY2FsIG9yIHBvbGl0aWNhbCBwb3NpdGlvbiByZWdhcmRpbmcKK3RoZW0uCisKK1RoZSAiSW52YXJpYW50IFNlY3Rpb25zIiBhcmUgY2VydGFpbiBTZWNvbmRhcnkgU2VjdGlvbnMgd2hvc2UgdGl0bGVzCithcmUgZGVzaWduYXRlZCwgYXMgYmVpbmcgdGhvc2Ugb2YgSW52YXJpYW50IFNlY3Rpb25zLCBpbiB0aGUgbm90aWNlCit0aGF0IHNheXMgdGhhdCB0aGUgRG9jdW1lbnQgaXMgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgSWYgYQorc2VjdGlvbiBkb2VzIG5vdCBmaXQgdGhlIGFib3ZlIGRlZmluaXRpb24gb2YgU2Vjb25kYXJ5IHRoZW4gaXQgaXMgbm90CithbGxvd2VkIHRvIGJlIGRlc2lnbmF0ZWQgYXMgSW52YXJpYW50LiAgVGhlIERvY3VtZW50IG1heSBjb250YWluIHplcm8KK0ludmFyaWFudCBTZWN0aW9ucy4gIElmIHRoZSBEb2N1bWVudCBkb2VzIG5vdCBpZGVudGlmeSBhbnkgSW52YXJpYW50CitTZWN0aW9ucyB0aGVuIHRoZXJlIGFyZSBub25lLgorCitUaGUgIkNvdmVyIFRleHRzIiBhcmUgY2VydGFpbiBzaG9ydCBwYXNzYWdlcyBvZiB0ZXh0IHRoYXQgYXJlIGxpc3RlZCwKK2FzIEZyb250LUNvdmVyIFRleHRzIG9yIEJhY2stQ292ZXIgVGV4dHMsIGluIHRoZSBub3RpY2UgdGhhdCBzYXlzIHRoYXQKK3RoZSBEb2N1bWVudCBpcyByZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBIEZyb250LUNvdmVyIFRleHQgbWF5CitiZSBhdCBtb3N0IDUgd29yZHMsIGFuZCBhIEJhY2stQ292ZXIgVGV4dCBtYXkgYmUgYXQgbW9zdCAyNSB3b3Jkcy4KKworQSAiVHJhbnNwYXJlbnQiIGNvcHkgb2YgdGhlIERvY3VtZW50IG1lYW5zIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5LAorcmVwcmVzZW50ZWQgaW4gYSBmb3JtYXQgd2hvc2Ugc3BlY2lmaWNhdGlvbiBpcyBhdmFpbGFibGUgdG8gdGhlCitnZW5lcmFsIHB1YmxpYywgdGhhdCBpcyBzdWl0YWJsZSBmb3IgcmV2aXNpbmcgdGhlIGRvY3VtZW50CitzdHJhaWdodGZvcndhcmRseSB3aXRoIGdlbmVyaWMgdGV4dCBlZGl0b3JzIG9yIChmb3IgaW1hZ2VzIGNvbXBvc2VkIG9mCitwaXhlbHMpIGdlbmVyaWMgcGFpbnQgcHJvZ3JhbXMgb3IgKGZvciBkcmF3aW5ncykgc29tZSB3aWRlbHkgYXZhaWxhYmxlCitkcmF3aW5nIGVkaXRvciwgYW5kIHRoYXQgaXMgc3VpdGFibGUgZm9yIGlucHV0IHRvIHRleHQgZm9ybWF0dGVycyBvcgorZm9yIGF1dG9tYXRpYyB0cmFuc2xhdGlvbiB0byBhIHZhcmlldHkgb2YgZm9ybWF0cyBzdWl0YWJsZSBmb3IgaW5wdXQKK3RvIHRleHQgZm9ybWF0dGVycy4gIEEgY29weSBtYWRlIGluIGFuIG90aGVyd2lzZSBUcmFuc3BhcmVudCBmaWxlCitmb3JtYXQgd2hvc2UgbWFya3VwLCBvciBhYnNlbmNlIG9mIG1hcmt1cCwgaGFzIGJlZW4gYXJyYW5nZWQgdG8gdGh3YXJ0CitvciBkaXNjb3VyYWdlIHN1YnNlcXVlbnQgbW9kaWZpY2F0aW9uIGJ5IHJlYWRlcnMgaXMgbm90IFRyYW5zcGFyZW50LgorQW4gaW1hZ2UgZm9ybWF0IGlzIG5vdCBUcmFuc3BhcmVudCBpZiB1c2VkIGZvciBhbnkgc3Vic3RhbnRpYWwgYW1vdW50CitvZiB0ZXh0LiAgQSBjb3B5IHRoYXQgaXMgbm90ICJUcmFuc3BhcmVudCIgaXMgY2FsbGVkICJPcGFxdWUiLgorCitFeGFtcGxlcyBvZiBzdWl0YWJsZSBmb3JtYXRzIGZvciBUcmFuc3BhcmVudCBjb3BpZXMgaW5jbHVkZSBwbGFpbgorQVNDSUkgd2l0aG91dCBtYXJrdXAsIFRleGluZm8gaW5wdXQgZm9ybWF0LCBMYVRlWCBpbnB1dCBmb3JtYXQsIFNHTUwKK29yIFhNTCB1c2luZyBhIHB1YmxpY2x5IGF2YWlsYWJsZSBEVEQsIGFuZCBzdGFuZGFyZC1jb25mb3JtaW5nIHNpbXBsZQorSFRNTCwgUG9zdFNjcmlwdCBvciBQREYgZGVzaWduZWQgZm9yIGh1bWFuIG1vZGlmaWNhdGlvbi4gIEV4YW1wbGVzIG9mCit0cmFuc3BhcmVudCBpbWFnZSBmb3JtYXRzIGluY2x1ZGUgUE5HLCBYQ0YgYW5kIEpQRy4gIE9wYXF1ZSBmb3JtYXRzCitpbmNsdWRlIHByb3ByaWV0YXJ5IGZvcm1hdHMgdGhhdCBjYW4gYmUgcmVhZCBhbmQgZWRpdGVkIG9ubHkgYnkKK3Byb3ByaWV0YXJ5IHdvcmQgcHJvY2Vzc29ycywgU0dNTCBvciBYTUwgZm9yIHdoaWNoIHRoZSBEVEQgYW5kL29yCitwcm9jZXNzaW5nIHRvb2xzIGFyZSBub3QgZ2VuZXJhbGx5IGF2YWlsYWJsZSwgYW5kIHRoZQorbWFjaGluZS1nZW5lcmF0ZWQgSFRNTCwgUG9zdFNjcmlwdCBvciBQREYgcHJvZHVjZWQgYnkgc29tZSB3b3JkCitwcm9jZXNzb3JzIGZvciBvdXRwdXQgcHVycG9zZXMgb25seS4KKworVGhlICJUaXRsZSBQYWdlIiBtZWFucywgZm9yIGEgcHJpbnRlZCBib29rLCB0aGUgdGl0bGUgcGFnZSBpdHNlbGYsCitwbHVzIHN1Y2ggZm9sbG93aW5nIHBhZ2VzIGFzIGFyZSBuZWVkZWQgdG8gaG9sZCwgbGVnaWJseSwgdGhlIG1hdGVyaWFsCit0aGlzIExpY2Vuc2UgcmVxdWlyZXMgdG8gYXBwZWFyIGluIHRoZSB0aXRsZSBwYWdlLiAgRm9yIHdvcmtzIGluCitmb3JtYXRzIHdoaWNoIGRvIG5vdCBoYXZlIGFueSB0aXRsZSBwYWdlIGFzIHN1Y2gsICJUaXRsZSBQYWdlIiBtZWFucwordGhlIHRleHQgbmVhciB0aGUgbW9zdCBwcm9taW5lbnQgYXBwZWFyYW5jZSBvZiB0aGUgd29yaydzIHRpdGxlLAorcHJlY2VkaW5nIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGJvZHkgb2YgdGhlIHRleHQuCisKK1RoZSAicHVibGlzaGVyIiBtZWFucyBhbnkgcGVyc29uIG9yIGVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIGNvcGllcyBvZgordGhlIERvY3VtZW50IHRvIHRoZSBwdWJsaWMuCisKK0Egc2VjdGlvbiAiRW50aXRsZWQgWFlaIiBtZWFucyBhIG5hbWVkIHN1YnVuaXQgb2YgdGhlIERvY3VtZW50IHdob3NlCit0aXRsZSBlaXRoZXIgaXMgcHJlY2lzZWx5IFhZWiBvciBjb250YWlucyBYWVogaW4gcGFyZW50aGVzZXMgZm9sbG93aW5nCit0ZXh0IHRoYXQgdHJhbnNsYXRlcyBYWVogaW4gYW5vdGhlciBsYW5ndWFnZS4gIChIZXJlIFhZWiBzdGFuZHMgZm9yIGEKK3NwZWNpZmljIHNlY3Rpb24gbmFtZSBtZW50aW9uZWQgYmVsb3csIHN1Y2ggYXMgIkFja25vd2xlZGdlbWVudHMiLAorIkRlZGljYXRpb25zIiwgIkVuZG9yc2VtZW50cyIsIG9yICJIaXN0b3J5Ii4pICBUbyAiUHJlc2VydmUgdGhlIFRpdGxlIgorb2Ygc3VjaCBhIHNlY3Rpb24gd2hlbiB5b3UgbW9kaWZ5IHRoZSBEb2N1bWVudCBtZWFucyB0aGF0IGl0IHJlbWFpbnMgYQorc2VjdGlvbiAiRW50aXRsZWQgWFlaIiBhY2NvcmRpbmcgdG8gdGhpcyBkZWZpbml0aW9uLgorCitUaGUgRG9jdW1lbnQgbWF5IGluY2x1ZGUgV2FycmFudHkgRGlzY2xhaW1lcnMgbmV4dCB0byB0aGUgbm90aWNlIHdoaWNoCitzdGF0ZXMgdGhhdCB0aGlzIExpY2Vuc2UgYXBwbGllcyB0byB0aGUgRG9jdW1lbnQuICBUaGVzZSBXYXJyYW50eQorRGlzY2xhaW1lcnMgYXJlIGNvbnNpZGVyZWQgdG8gYmUgaW5jbHVkZWQgYnkgcmVmZXJlbmNlIGluIHRoaXMKK0xpY2Vuc2UsIGJ1dCBvbmx5IGFzIHJlZ2FyZHMgZGlzY2xhaW1pbmcgd2FycmFudGllczogYW55IG90aGVyCitpbXBsaWNhdGlvbiB0aGF0IHRoZXNlIFdhcnJhbnR5IERpc2NsYWltZXJzIG1heSBoYXZlIGlzIHZvaWQgYW5kIGhhcworbm8gZWZmZWN0IG9uIHRoZSBtZWFuaW5nIG9mIHRoaXMgTGljZW5zZS4KKworMi4gVkVSQkFUSU0gQ09QWUlORworCitZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIERvY3VtZW50IGluIGFueSBtZWRpdW0sIGVpdGhlcgorY29tbWVyY2lhbGx5IG9yIG5vbmNvbW1lcmNpYWxseSwgcHJvdmlkZWQgdGhhdCB0aGlzIExpY2Vuc2UsIHRoZQorY29weXJpZ2h0IG5vdGljZXMsIGFuZCB0aGUgbGljZW5zZSBub3RpY2Ugc2F5aW5nIHRoaXMgTGljZW5zZSBhcHBsaWVzCit0byB0aGUgRG9jdW1lbnQgYXJlIHJlcHJvZHVjZWQgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQgeW91IGFkZCBubworb3RoZXIgY29uZGl0aW9ucyB3aGF0c29ldmVyIHRvIHRob3NlIG9mIHRoaXMgTGljZW5zZS4gIFlvdSBtYXkgbm90IHVzZQordGVjaG5pY2FsIG1lYXN1cmVzIHRvIG9ic3RydWN0IG9yIGNvbnRyb2wgdGhlIHJlYWRpbmcgb3IgZnVydGhlcgorY29weWluZyBvZiB0aGUgY29waWVzIHlvdSBtYWtlIG9yIGRpc3RyaWJ1dGUuICBIb3dldmVyLCB5b3UgbWF5IGFjY2VwdAorY29tcGVuc2F0aW9uIGluIGV4Y2hhbmdlIGZvciBjb3BpZXMuICBJZiB5b3UgZGlzdHJpYnV0ZSBhIGxhcmdlIGVub3VnaAorbnVtYmVyIG9mIGNvcGllcyB5b3UgbXVzdCBhbHNvIGZvbGxvdyB0aGUgY29uZGl0aW9ucyBpbiBzZWN0aW9uIDMuCisKK1lvdSBtYXkgYWxzbyBsZW5kIGNvcGllcywgdW5kZXIgdGhlIHNhbWUgY29uZGl0aW9ucyBzdGF0ZWQgYWJvdmUsIGFuZAoreW91IG1heSBwdWJsaWNseSBkaXNwbGF5IGNvcGllcy4KKworCiszLiBDT1BZSU5HIElOIFFVQU5USVRZCisKK0lmIHlvdSBwdWJsaXNoIHByaW50ZWQgY29waWVzIChvciBjb3BpZXMgaW4gbWVkaWEgdGhhdCBjb21tb25seSBoYXZlCitwcmludGVkIGNvdmVycykgb2YgdGhlIERvY3VtZW50LCBudW1iZXJpbmcgbW9yZSB0aGFuIDEwMCwgYW5kIHRoZQorRG9jdW1lbnQncyBsaWNlbnNlIG5vdGljZSByZXF1aXJlcyBDb3ZlciBUZXh0cywgeW91IG11c3QgZW5jbG9zZSB0aGUKK2NvcGllcyBpbiBjb3ZlcnMgdGhhdCBjYXJyeSwgY2xlYXJseSBhbmQgbGVnaWJseSwgYWxsIHRoZXNlIENvdmVyCitUZXh0czogRnJvbnQtQ292ZXIgVGV4dHMgb24gdGhlIGZyb250IGNvdmVyLCBhbmQgQmFjay1Db3ZlciBUZXh0cyBvbgordGhlIGJhY2sgY292ZXIuICBCb3RoIGNvdmVycyBtdXN0IGFsc28gY2xlYXJseSBhbmQgbGVnaWJseSBpZGVudGlmeQoreW91IGFzIHRoZSBwdWJsaXNoZXIgb2YgdGhlc2UgY29waWVzLiAgVGhlIGZyb250IGNvdmVyIG11c3QgcHJlc2VudAordGhlIGZ1bGwgdGl0bGUgd2l0aCBhbGwgd29yZHMgb2YgdGhlIHRpdGxlIGVxdWFsbHkgcHJvbWluZW50IGFuZAordmlzaWJsZS4gIFlvdSBtYXkgYWRkIG90aGVyIG1hdGVyaWFsIG9uIHRoZSBjb3ZlcnMgaW4gYWRkaXRpb24uCitDb3B5aW5nIHdpdGggY2hhbmdlcyBsaW1pdGVkIHRvIHRoZSBjb3ZlcnMsIGFzIGxvbmcgYXMgdGhleSBwcmVzZXJ2ZQordGhlIHRpdGxlIG9mIHRoZSBEb2N1bWVudCBhbmQgc2F0aXNmeSB0aGVzZSBjb25kaXRpb25zLCBjYW4gYmUgdHJlYXRlZAorYXMgdmVyYmF0aW0gY29weWluZyBpbiBvdGhlciByZXNwZWN0cy4KKworSWYgdGhlIHJlcXVpcmVkIHRleHRzIGZvciBlaXRoZXIgY292ZXIgYXJlIHRvbyB2b2x1bWlub3VzIHRvIGZpdAorbGVnaWJseSwgeW91IHNob3VsZCBwdXQgdGhlIGZpcnN0IG9uZXMgbGlzdGVkIChhcyBtYW55IGFzIGZpdAorcmVhc29uYWJseSkgb24gdGhlIGFjdHVhbCBjb3ZlciwgYW5kIGNvbnRpbnVlIHRoZSByZXN0IG9udG8gYWRqYWNlbnQKK3BhZ2VzLgorCitJZiB5b3UgcHVibGlzaCBvciBkaXN0cmlidXRlIE9wYXF1ZSBjb3BpZXMgb2YgdGhlIERvY3VtZW50IG51bWJlcmluZworbW9yZSB0aGFuIDEwMCwgeW91IG11c3QgZWl0aGVyIGluY2x1ZGUgYSBtYWNoaW5lLXJlYWRhYmxlIFRyYW5zcGFyZW50Citjb3B5IGFsb25nIHdpdGggZWFjaCBPcGFxdWUgY29weSwgb3Igc3RhdGUgaW4gb3Igd2l0aCBlYWNoIE9wYXF1ZSBjb3B5CithIGNvbXB1dGVyLW5ldHdvcmsgbG9jYXRpb24gZnJvbSB3aGljaCB0aGUgZ2VuZXJhbCBuZXR3b3JrLXVzaW5nCitwdWJsaWMgaGFzIGFjY2VzcyB0byBkb3dubG9hZCB1c2luZyBwdWJsaWMtc3RhbmRhcmQgbmV0d29yayBwcm90b2NvbHMKK2EgY29tcGxldGUgVHJhbnNwYXJlbnQgY29weSBvZiB0aGUgRG9jdW1lbnQsIGZyZWUgb2YgYWRkZWQgbWF0ZXJpYWwuCitJZiB5b3UgdXNlIHRoZSBsYXR0ZXIgb3B0aW9uLCB5b3UgbXVzdCB0YWtlIHJlYXNvbmFibHkgcHJ1ZGVudCBzdGVwcywKK3doZW4geW91IGJlZ2luIGRpc3RyaWJ1dGlvbiBvZiBPcGFxdWUgY29waWVzIGluIHF1YW50aXR5LCB0byBlbnN1cmUKK3RoYXQgdGhpcyBUcmFuc3BhcmVudCBjb3B5IHdpbGwgcmVtYWluIHRodXMgYWNjZXNzaWJsZSBhdCB0aGUgc3RhdGVkCitsb2NhdGlvbiB1bnRpbCBhdCBsZWFzdCBvbmUgeWVhciBhZnRlciB0aGUgbGFzdCB0aW1lIHlvdSBkaXN0cmlidXRlIGFuCitPcGFxdWUgY29weSAoZGlyZWN0bHkgb3IgdGhyb3VnaCB5b3VyIGFnZW50cyBvciByZXRhaWxlcnMpIG9mIHRoYXQKK2VkaXRpb24gdG8gdGhlIHB1YmxpYy4KKworSXQgaXMgcmVxdWVzdGVkLCBidXQgbm90IHJlcXVpcmVkLCB0aGF0IHlvdSBjb250YWN0IHRoZSBhdXRob3JzIG9mIHRoZQorRG9jdW1lbnQgd2VsbCBiZWZvcmUgcmVkaXN0cmlidXRpbmcgYW55IGxhcmdlIG51bWJlciBvZiBjb3BpZXMsIHRvCitnaXZlIHRoZW0gYSBjaGFuY2UgdG8gcHJvdmlkZSB5b3Ugd2l0aCBhbiB1cGRhdGVkIHZlcnNpb24gb2YgdGhlCitEb2N1bWVudC4KKworCis0LiBNT0RJRklDQVRJT05TCisKK1lvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSBhIE1vZGlmaWVkIFZlcnNpb24gb2YgdGhlIERvY3VtZW50IHVuZGVyCit0aGUgY29uZGl0aW9ucyBvZiBzZWN0aW9ucyAyIGFuZCAzIGFib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSByZWxlYXNlCit0aGUgTW9kaWZpZWQgVmVyc2lvbiB1bmRlciBwcmVjaXNlbHkgdGhpcyBMaWNlbnNlLCB3aXRoIHRoZSBNb2RpZmllZAorVmVyc2lvbiBmaWxsaW5nIHRoZSByb2xlIG9mIHRoZSBEb2N1bWVudCwgdGh1cyBsaWNlbnNpbmcgZGlzdHJpYnV0aW9uCithbmQgbW9kaWZpY2F0aW9uIG9mIHRoZSBNb2RpZmllZCBWZXJzaW9uIHRvIHdob2V2ZXIgcG9zc2Vzc2VzIGEgY29weQorb2YgaXQuICBJbiBhZGRpdGlvbiwgeW91IG11c3QgZG8gdGhlc2UgdGhpbmdzIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uOgorCitBLiBVc2UgaW4gdGhlIFRpdGxlIFBhZ2UgKGFuZCBvbiB0aGUgY292ZXJzLCBpZiBhbnkpIGEgdGl0bGUgZGlzdGluY3QKKyAgIGZyb20gdGhhdCBvZiB0aGUgRG9jdW1lbnQsIGFuZCBmcm9tIHRob3NlIG9mIHByZXZpb3VzIHZlcnNpb25zCisgICAod2hpY2ggc2hvdWxkLCBpZiB0aGVyZSB3ZXJlIGFueSwgYmUgbGlzdGVkIGluIHRoZSBIaXN0b3J5IHNlY3Rpb24KKyAgIG9mIHRoZSBEb2N1bWVudCkuICBZb3UgbWF5IHVzZSB0aGUgc2FtZSB0aXRsZSBhcyBhIHByZXZpb3VzIHZlcnNpb24KKyAgIGlmIHRoZSBvcmlnaW5hbCBwdWJsaXNoZXIgb2YgdGhhdCB2ZXJzaW9uIGdpdmVzIHBlcm1pc3Npb24uCitCLiBMaXN0IG9uIHRoZSBUaXRsZSBQYWdlLCBhcyBhdXRob3JzLCBvbmUgb3IgbW9yZSBwZXJzb25zIG9yIGVudGl0aWVzCisgICByZXNwb25zaWJsZSBmb3IgYXV0aG9yc2hpcCBvZiB0aGUgbW9kaWZpY2F0aW9ucyBpbiB0aGUgTW9kaWZpZWQKKyAgIFZlcnNpb24sIHRvZ2V0aGVyIHdpdGggYXQgbGVhc3QgZml2ZSBvZiB0aGUgcHJpbmNpcGFsIGF1dGhvcnMgb2YgdGhlCisgICBEb2N1bWVudCAoYWxsIG9mIGl0cyBwcmluY2lwYWwgYXV0aG9ycywgaWYgaXQgaGFzIGZld2VyIHRoYW4gZml2ZSksCisgICB1bmxlc3MgdGhleSByZWxlYXNlIHlvdSBmcm9tIHRoaXMgcmVxdWlyZW1lbnQuCitDLiBTdGF0ZSBvbiB0aGUgVGl0bGUgcGFnZSB0aGUgbmFtZSBvZiB0aGUgcHVibGlzaGVyIG9mIHRoZQorICAgTW9kaWZpZWQgVmVyc2lvbiwgYXMgdGhlIHB1Ymxpc2hlci4KK0QuIFByZXNlcnZlIGFsbCB0aGUgY29weXJpZ2h0IG5vdGljZXMgb2YgdGhlIERvY3VtZW50LgorRS4gQWRkIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgZm9yIHlvdXIgbW9kaWZpY2F0aW9ucworICAgYWRqYWNlbnQgdG8gdGhlIG90aGVyIGNvcHlyaWdodCBub3RpY2VzLgorRi4gSW5jbHVkZSwgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGNvcHlyaWdodCBub3RpY2VzLCBhIGxpY2Vuc2Ugbm90aWNlCisgICBnaXZpbmcgdGhlIHB1YmxpYyBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgTW9kaWZpZWQgVmVyc2lvbiB1bmRlciB0aGUKKyAgIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW4gdGhlIGZvcm0gc2hvd24gaW4gdGhlIEFkZGVuZHVtIGJlbG93LgorRy4gUHJlc2VydmUgaW4gdGhhdCBsaWNlbnNlIG5vdGljZSB0aGUgZnVsbCBsaXN0cyBvZiBJbnZhcmlhbnQgU2VjdGlvbnMKKyAgIGFuZCByZXF1aXJlZCBDb3ZlciBUZXh0cyBnaXZlbiBpbiB0aGUgRG9jdW1lbnQncyBsaWNlbnNlIG5vdGljZS4KK0guIEluY2x1ZGUgYW4gdW5hbHRlcmVkIGNvcHkgb2YgdGhpcyBMaWNlbnNlLgorSS4gUHJlc2VydmUgdGhlIHNlY3Rpb24gRW50aXRsZWQgIkhpc3RvcnkiLCBQcmVzZXJ2ZSBpdHMgVGl0bGUsIGFuZCBhZGQKKyAgIHRvIGl0IGFuIGl0ZW0gc3RhdGluZyBhdCBsZWFzdCB0aGUgdGl0bGUsIHllYXIsIG5ldyBhdXRob3JzLCBhbmQKKyAgIHB1Ymxpc2hlciBvZiB0aGUgTW9kaWZpZWQgVmVyc2lvbiBhcyBnaXZlbiBvbiB0aGUgVGl0bGUgUGFnZS4gIElmCisgICB0aGVyZSBpcyBubyBzZWN0aW9uIEVudGl0bGVkICJIaXN0b3J5IiBpbiB0aGUgRG9jdW1lbnQsIGNyZWF0ZSBvbmUKKyAgIHN0YXRpbmcgdGhlIHRpdGxlLCB5ZWFyLCBhdXRob3JzLCBhbmQgcHVibGlzaGVyIG9mIHRoZSBEb2N1bWVudCBhcworICAgZ2l2ZW4gb24gaXRzIFRpdGxlIFBhZ2UsIHRoZW4gYWRkIGFuIGl0ZW0gZGVzY3JpYmluZyB0aGUgTW9kaWZpZWQKKyAgIFZlcnNpb24gYXMgc3RhdGVkIGluIHRoZSBwcmV2aW91cyBzZW50ZW5jZS4KK0ouIFByZXNlcnZlIHRoZSBuZXR3b3JrIGxvY2F0aW9uLCBpZiBhbnksIGdpdmVuIGluIHRoZSBEb2N1bWVudCBmb3IKKyAgIHB1YmxpYyBhY2Nlc3MgdG8gYSBUcmFuc3BhcmVudCBjb3B5IG9mIHRoZSBEb2N1bWVudCwgYW5kIGxpa2V3aXNlCisgICB0aGUgbmV0d29yayBsb2NhdGlvbnMgZ2l2ZW4gaW4gdGhlIERvY3VtZW50IGZvciBwcmV2aW91cyB2ZXJzaW9ucworICAgaXQgd2FzIGJhc2VkIG9uLiAgVGhlc2UgbWF5IGJlIHBsYWNlZCBpbiB0aGUgIkhpc3RvcnkiIHNlY3Rpb24uCisgICBZb3UgbWF5IG9taXQgYSBuZXR3b3JrIGxvY2F0aW9uIGZvciBhIHdvcmsgdGhhdCB3YXMgcHVibGlzaGVkIGF0CisgICBsZWFzdCBmb3VyIHllYXJzIGJlZm9yZSB0aGUgRG9jdW1lbnQgaXRzZWxmLCBvciBpZiB0aGUgb3JpZ2luYWwKKyAgIHB1Ymxpc2hlciBvZiB0aGUgdmVyc2lvbiBpdCByZWZlcnMgdG8gZ2l2ZXMgcGVybWlzc2lvbi4KK0suIEZvciBhbnkgc2VjdGlvbiBFbnRpdGxlZCAiQWNrbm93bGVkZ2VtZW50cyIgb3IgIkRlZGljYXRpb25zIiwKKyAgIFByZXNlcnZlIHRoZSBUaXRsZSBvZiB0aGUgc2VjdGlvbiwgYW5kIHByZXNlcnZlIGluIHRoZSBzZWN0aW9uIGFsbAorICAgdGhlIHN1YnN0YW5jZSBhbmQgdG9uZSBvZiBlYWNoIG9mIHRoZSBjb250cmlidXRvciBhY2tub3dsZWRnZW1lbnRzCisgICBhbmQvb3IgZGVkaWNhdGlvbnMgZ2l2ZW4gdGhlcmVpbi4KK0wuIFByZXNlcnZlIGFsbCB0aGUgSW52YXJpYW50IFNlY3Rpb25zIG9mIHRoZSBEb2N1bWVudCwKKyAgIHVuYWx0ZXJlZCBpbiB0aGVpciB0ZXh0IGFuZCBpbiB0aGVpciB0aXRsZXMuICBTZWN0aW9uIG51bWJlcnMKKyAgIG9yIHRoZSBlcXVpdmFsZW50IGFyZSBub3QgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBzZWN0aW9uIHRpdGxlcy4KK00uIERlbGV0ZSBhbnkgc2VjdGlvbiBFbnRpdGxlZCAiRW5kb3JzZW1lbnRzIi4gIFN1Y2ggYSBzZWN0aW9uCisgICBtYXkgbm90IGJlIGluY2x1ZGVkIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uLgorTi4gRG8gbm90IHJldGl0bGUgYW55IGV4aXN0aW5nIHNlY3Rpb24gdG8gYmUgRW50aXRsZWQgIkVuZG9yc2VtZW50cyIKKyAgIG9yIHRvIGNvbmZsaWN0IGluIHRpdGxlIHdpdGggYW55IEludmFyaWFudCBTZWN0aW9uLgorTy4gUHJlc2VydmUgYW55IFdhcnJhbnR5IERpc2NsYWltZXJzLgorCitJZiB0aGUgTW9kaWZpZWQgVmVyc2lvbiBpbmNsdWRlcyBuZXcgZnJvbnQtbWF0dGVyIHNlY3Rpb25zIG9yCithcHBlbmRpY2VzIHRoYXQgcXVhbGlmeSBhcyBTZWNvbmRhcnkgU2VjdGlvbnMgYW5kIGNvbnRhaW4gbm8gbWF0ZXJpYWwKK2NvcGllZCBmcm9tIHRoZSBEb2N1bWVudCwgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBkZXNpZ25hdGUgc29tZSBvciBhbGwKK29mIHRoZXNlIHNlY3Rpb25zIGFzIGludmFyaWFudC4gIFRvIGRvIHRoaXMsIGFkZCB0aGVpciB0aXRsZXMgdG8gdGhlCitsaXN0IG9mIEludmFyaWFudCBTZWN0aW9ucyBpbiB0aGUgTW9kaWZpZWQgVmVyc2lvbidzIGxpY2Vuc2Ugbm90aWNlLgorVGhlc2UgdGl0bGVzIG11c3QgYmUgZGlzdGluY3QgZnJvbSBhbnkgb3RoZXIgc2VjdGlvbiB0aXRsZXMuCisKK1lvdSBtYXkgYWRkIGEgc2VjdGlvbiBFbnRpdGxlZCAiRW5kb3JzZW1lbnRzIiwgcHJvdmlkZWQgaXQgY29udGFpbnMKK25vdGhpbmcgYnV0IGVuZG9yc2VtZW50cyBvZiB5b3VyIE1vZGlmaWVkIFZlcnNpb24gYnkgdmFyaW91cworcGFydGllcy0tZm9yIGV4YW1wbGUsIHN0YXRlbWVudHMgb2YgcGVlciByZXZpZXcgb3IgdGhhdCB0aGUgdGV4dCBoYXMKK2JlZW4gYXBwcm92ZWQgYnkgYW4gb3JnYW5pemF0aW9uIGFzIHRoZSBhdXRob3JpdGF0aXZlIGRlZmluaXRpb24gb2YgYQorc3RhbmRhcmQuCisKK1lvdSBtYXkgYWRkIGEgcGFzc2FnZSBvZiB1cCB0byBmaXZlIHdvcmRzIGFzIGEgRnJvbnQtQ292ZXIgVGV4dCwgYW5kIGEKK3Bhc3NhZ2Ugb2YgdXAgdG8gMjUgd29yZHMgYXMgYSBCYWNrLUNvdmVyIFRleHQsIHRvIHRoZSBlbmQgb2YgdGhlIGxpc3QKK29mIENvdmVyIFRleHRzIGluIHRoZSBNb2RpZmllZCBWZXJzaW9uLiAgT25seSBvbmUgcGFzc2FnZSBvZgorRnJvbnQtQ292ZXIgVGV4dCBhbmQgb25lIG9mIEJhY2stQ292ZXIgVGV4dCBtYXkgYmUgYWRkZWQgYnkgKG9yCit0aHJvdWdoIGFycmFuZ2VtZW50cyBtYWRlIGJ5KSBhbnkgb25lIGVudGl0eS4gIElmIHRoZSBEb2N1bWVudCBhbHJlYWR5CitpbmNsdWRlcyBhIGNvdmVyIHRleHQgZm9yIHRoZSBzYW1lIGNvdmVyLCBwcmV2aW91c2x5IGFkZGVkIGJ5IHlvdSBvcgorYnkgYXJyYW5nZW1lbnQgbWFkZSBieSB0aGUgc2FtZSBlbnRpdHkgeW91IGFyZSBhY3Rpbmcgb24gYmVoYWxmIG9mLAoreW91IG1heSBub3QgYWRkIGFub3RoZXI7IGJ1dCB5b3UgbWF5IHJlcGxhY2UgdGhlIG9sZCBvbmUsIG9uIGV4cGxpY2l0CitwZXJtaXNzaW9uIGZyb20gdGhlIHByZXZpb3VzIHB1Ymxpc2hlciB0aGF0IGFkZGVkIHRoZSBvbGQgb25lLgorCitUaGUgYXV0aG9yKHMpIGFuZCBwdWJsaXNoZXIocykgb2YgdGhlIERvY3VtZW50IGRvIG5vdCBieSB0aGlzIExpY2Vuc2UKK2dpdmUgcGVybWlzc2lvbiB0byB1c2UgdGhlaXIgbmFtZXMgZm9yIHB1YmxpY2l0eSBmb3Igb3IgdG8gYXNzZXJ0IG9yCitpbXBseSBlbmRvcnNlbWVudCBvZiBhbnkgTW9kaWZpZWQgVmVyc2lvbi4KKworCis1LiBDT01CSU5JTkcgRE9DVU1FTlRTCisKK1lvdSBtYXkgY29tYmluZSB0aGUgRG9jdW1lbnQgd2l0aCBvdGhlciBkb2N1bWVudHMgcmVsZWFzZWQgdW5kZXIgdGhpcworTGljZW5zZSwgdW5kZXIgdGhlIHRlcm1zIGRlZmluZWQgaW4gc2VjdGlvbiA0IGFib3ZlIGZvciBtb2RpZmllZAordmVyc2lvbnMsIHByb3ZpZGVkIHRoYXQgeW91IGluY2x1ZGUgaW4gdGhlIGNvbWJpbmF0aW9uIGFsbCBvZiB0aGUKK0ludmFyaWFudCBTZWN0aW9ucyBvZiBhbGwgb2YgdGhlIG9yaWdpbmFsIGRvY3VtZW50cywgdW5tb2RpZmllZCwgYW5kCitsaXN0IHRoZW0gYWxsIGFzIEludmFyaWFudCBTZWN0aW9ucyBvZiB5b3VyIGNvbWJpbmVkIHdvcmsgaW4gaXRzCitsaWNlbnNlIG5vdGljZSwgYW5kIHRoYXQgeW91IHByZXNlcnZlIGFsbCB0aGVpciBXYXJyYW50eSBEaXNjbGFpbWVycy4KKworVGhlIGNvbWJpbmVkIHdvcmsgbmVlZCBvbmx5IGNvbnRhaW4gb25lIGNvcHkgb2YgdGhpcyBMaWNlbnNlLCBhbmQKK211bHRpcGxlIGlkZW50aWNhbCBJbnZhcmlhbnQgU2VjdGlvbnMgbWF5IGJlIHJlcGxhY2VkIHdpdGggYSBzaW5nbGUKK2NvcHkuICBJZiB0aGVyZSBhcmUgbXVsdGlwbGUgSW52YXJpYW50IFNlY3Rpb25zIHdpdGggdGhlIHNhbWUgbmFtZSBidXQKK2RpZmZlcmVudCBjb250ZW50cywgbWFrZSB0aGUgdGl0bGUgb2YgZWFjaCBzdWNoIHNlY3Rpb24gdW5pcXVlIGJ5CithZGRpbmcgYXQgdGhlIGVuZCBvZiBpdCwgaW4gcGFyZW50aGVzZXMsIHRoZSBuYW1lIG9mIHRoZSBvcmlnaW5hbAorYXV0aG9yIG9yIHB1Ymxpc2hlciBvZiB0aGF0IHNlY3Rpb24gaWYga25vd24sIG9yIGVsc2UgYSB1bmlxdWUgbnVtYmVyLgorTWFrZSB0aGUgc2FtZSBhZGp1c3RtZW50IHRvIHRoZSBzZWN0aW9uIHRpdGxlcyBpbiB0aGUgbGlzdCBvZgorSW52YXJpYW50IFNlY3Rpb25zIGluIHRoZSBsaWNlbnNlIG5vdGljZSBvZiB0aGUgY29tYmluZWQgd29yay4KKworSW4gdGhlIGNvbWJpbmF0aW9uLCB5b3UgbXVzdCBjb21iaW5lIGFueSBzZWN0aW9ucyBFbnRpdGxlZCAiSGlzdG9yeSIKK2luIHRoZSB2YXJpb3VzIG9yaWdpbmFsIGRvY3VtZW50cywgZm9ybWluZyBvbmUgc2VjdGlvbiBFbnRpdGxlZAorIkhpc3RvcnkiOyBsaWtld2lzZSBjb21iaW5lIGFueSBzZWN0aW9ucyBFbnRpdGxlZCAiQWNrbm93bGVkZ2VtZW50cyIsCithbmQgYW55IHNlY3Rpb25zIEVudGl0bGVkICJEZWRpY2F0aW9ucyIuICBZb3UgbXVzdCBkZWxldGUgYWxsIHNlY3Rpb25zCitFbnRpdGxlZCAiRW5kb3JzZW1lbnRzIi4KKworCis2LiBDT0xMRUNUSU9OUyBPRiBET0NVTUVOVFMKKworWW91IG1heSBtYWtlIGEgY29sbGVjdGlvbiBjb25zaXN0aW5nIG9mIHRoZSBEb2N1bWVudCBhbmQgb3RoZXIKK2RvY3VtZW50cyByZWxlYXNlZCB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCByZXBsYWNlIHRoZSBpbmRpdmlkdWFsCitjb3BpZXMgb2YgdGhpcyBMaWNlbnNlIGluIHRoZSB2YXJpb3VzIGRvY3VtZW50cyB3aXRoIGEgc2luZ2xlIGNvcHkKK3RoYXQgaXMgaW5jbHVkZWQgaW4gdGhlIGNvbGxlY3Rpb24sIHByb3ZpZGVkIHRoYXQgeW91IGZvbGxvdyB0aGUgcnVsZXMKK29mIHRoaXMgTGljZW5zZSBmb3IgdmVyYmF0aW0gY29weWluZyBvZiBlYWNoIG9mIHRoZSBkb2N1bWVudHMgaW4gYWxsCitvdGhlciByZXNwZWN0cy4KKworWW91IG1heSBleHRyYWN0IGEgc2luZ2xlIGRvY3VtZW50IGZyb20gc3VjaCBhIGNvbGxlY3Rpb24sIGFuZAorZGlzdHJpYnV0ZSBpdCBpbmRpdmlkdWFsbHkgdW5kZXIgdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB5b3UgaW5zZXJ0IGEKK2NvcHkgb2YgdGhpcyBMaWNlbnNlIGludG8gdGhlIGV4dHJhY3RlZCBkb2N1bWVudCwgYW5kIGZvbGxvdyB0aGlzCitMaWNlbnNlIGluIGFsbCBvdGhlciByZXNwZWN0cyByZWdhcmRpbmcgdmVyYmF0aW0gY29weWluZyBvZiB0aGF0Citkb2N1bWVudC4KKworCis3LiBBR0dSRUdBVElPTiBXSVRIIElOREVQRU5ERU5UIFdPUktTCisKK0EgY29tcGlsYXRpb24gb2YgdGhlIERvY3VtZW50IG9yIGl0cyBkZXJpdmF0aXZlcyB3aXRoIG90aGVyIHNlcGFyYXRlCithbmQgaW5kZXBlbmRlbnQgZG9jdW1lbnRzIG9yIHdvcmtzLCBpbiBvciBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IKK2Rpc3RyaWJ1dGlvbiBtZWRpdW0sIGlzIGNhbGxlZCBhbiAiYWdncmVnYXRlIiBpZiB0aGUgY29weXJpZ2h0CityZXN1bHRpbmcgZnJvbSB0aGUgY29tcGlsYXRpb24gaXMgbm90IHVzZWQgdG8gbGltaXQgdGhlIGxlZ2FsIHJpZ2h0cworb2YgdGhlIGNvbXBpbGF0aW9uJ3MgdXNlcnMgYmV5b25kIHdoYXQgdGhlIGluZGl2aWR1YWwgd29ya3MgcGVybWl0LgorV2hlbiB0aGUgRG9jdW1lbnQgaXMgaW5jbHVkZWQgaW4gYW4gYWdncmVnYXRlLCB0aGlzIExpY2Vuc2UgZG9lcyBub3QKK2FwcGx5IHRvIHRoZSBvdGhlciB3b3JrcyBpbiB0aGUgYWdncmVnYXRlIHdoaWNoIGFyZSBub3QgdGhlbXNlbHZlcworZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgRG9jdW1lbnQuCisKK0lmIHRoZSBDb3ZlciBUZXh0IHJlcXVpcmVtZW50IG9mIHNlY3Rpb24gMyBpcyBhcHBsaWNhYmxlIHRvIHRoZXNlCitjb3BpZXMgb2YgdGhlIERvY3VtZW50LCB0aGVuIGlmIHRoZSBEb2N1bWVudCBpcyBsZXNzIHRoYW4gb25lIGhhbGYgb2YKK3RoZSBlbnRpcmUgYWdncmVnYXRlLCB0aGUgRG9jdW1lbnQncyBDb3ZlciBUZXh0cyBtYXkgYmUgcGxhY2VkIG9uCitjb3ZlcnMgdGhhdCBicmFja2V0IHRoZSBEb2N1bWVudCB3aXRoaW4gdGhlIGFnZ3JlZ2F0ZSwgb3IgdGhlCitlbGVjdHJvbmljIGVxdWl2YWxlbnQgb2YgY292ZXJzIGlmIHRoZSBEb2N1bWVudCBpcyBpbiBlbGVjdHJvbmljIGZvcm0uCitPdGhlcndpc2UgdGhleSBtdXN0IGFwcGVhciBvbiBwcmludGVkIGNvdmVycyB0aGF0IGJyYWNrZXQgdGhlIHdob2xlCithZ2dyZWdhdGUuCisKKworOC4gVFJBTlNMQVRJT04KKworVHJhbnNsYXRpb24gaXMgY29uc2lkZXJlZCBhIGtpbmQgb2YgbW9kaWZpY2F0aW9uLCBzbyB5b3UgbWF5CitkaXN0cmlidXRlIHRyYW5zbGF0aW9ucyBvZiB0aGUgRG9jdW1lbnQgdW5kZXIgdGhlIHRlcm1zIG9mIHNlY3Rpb24gNC4KK1JlcGxhY2luZyBJbnZhcmlhbnQgU2VjdGlvbnMgd2l0aCB0cmFuc2xhdGlvbnMgcmVxdWlyZXMgc3BlY2lhbAorcGVybWlzc2lvbiBmcm9tIHRoZWlyIGNvcHlyaWdodCBob2xkZXJzLCBidXQgeW91IG1heSBpbmNsdWRlCit0cmFuc2xhdGlvbnMgb2Ygc29tZSBvciBhbGwgSW52YXJpYW50IFNlY3Rpb25zIGluIGFkZGl0aW9uIHRvIHRoZQorb3JpZ2luYWwgdmVyc2lvbnMgb2YgdGhlc2UgSW52YXJpYW50IFNlY3Rpb25zLiAgWW91IG1heSBpbmNsdWRlIGEKK3RyYW5zbGF0aW9uIG9mIHRoaXMgTGljZW5zZSwgYW5kIGFsbCB0aGUgbGljZW5zZSBub3RpY2VzIGluIHRoZQorRG9jdW1lbnQsIGFuZCBhbnkgV2FycmFudHkgRGlzY2xhaW1lcnMsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gaW5jbHVkZQordGhlIG9yaWdpbmFsIEVuZ2xpc2ggdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoZSBvcmlnaW5hbCB2ZXJzaW9ucworb2YgdGhvc2Ugbm90aWNlcyBhbmQgZGlzY2xhaW1lcnMuICBJbiBjYXNlIG9mIGEgZGlzYWdyZWVtZW50IGJldHdlZW4KK3RoZSB0cmFuc2xhdGlvbiBhbmQgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIGEgbm90aWNlCitvciBkaXNjbGFpbWVyLCB0aGUgb3JpZ2luYWwgdmVyc2lvbiB3aWxsIHByZXZhaWwuCisKK0lmIGEgc2VjdGlvbiBpbiB0aGUgRG9jdW1lbnQgaXMgRW50aXRsZWQgIkFja25vd2xlZGdlbWVudHMiLAorIkRlZGljYXRpb25zIiwgb3IgIkhpc3RvcnkiLCB0aGUgcmVxdWlyZW1lbnQgKHNlY3Rpb24gNCkgdG8gUHJlc2VydmUKK2l0cyBUaXRsZSAoc2VjdGlvbiAxKSB3aWxsIHR5cGljYWxseSByZXF1aXJlIGNoYW5naW5nIHRoZSBhY3R1YWwKK3RpdGxlLgorCisKKzkuIFRFUk1JTkFUSU9OCisKK1lvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgRG9jdW1lbnQKK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgaXQgaXMgdm9pZCwgYW5kCit3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KKworSG93ZXZlciwgaWYgeW91IGNlYXNlIGFsbCB2aW9sYXRpb24gb2YgdGhpcyBMaWNlbnNlLCB0aGVuIHlvdXIgbGljZW5zZQorZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcyByZWluc3RhdGVkIChhKSBwcm92aXNpb25hbGx5LAordW5sZXNzIGFuZCB1bnRpbCB0aGUgY29weXJpZ2h0IGhvbGRlciBleHBsaWNpdGx5IGFuZCBmaW5hbGx5Cit0ZXJtaW5hdGVzIHlvdXIgbGljZW5zZSwgYW5kIChiKSBwZXJtYW5lbnRseSwgaWYgdGhlIGNvcHlyaWdodCBob2xkZXIKK2ZhaWxzIHRvIG5vdGlmeSB5b3Ugb2YgdGhlIHZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMgcHJpb3IgdG8KKzYwIGRheXMgYWZ0ZXIgdGhlIGNlc3NhdGlvbi4KKworTW9yZW92ZXIsIHlvdXIgbGljZW5zZSBmcm9tIGEgcGFydGljdWxhciBjb3B5cmlnaHQgaG9sZGVyIGlzCityZWluc3RhdGVkIHBlcm1hbmVudGx5IGlmIHRoZSBjb3B5cmlnaHQgaG9sZGVyIG5vdGlmaWVzIHlvdSBvZiB0aGUKK3Zpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMsIHRoaXMgaXMgdGhlIGZpcnN0IHRpbWUgeW91IGhhdmUKK3JlY2VpdmVkIG5vdGljZSBvZiB2aW9sYXRpb24gb2YgdGhpcyBMaWNlbnNlIChmb3IgYW55IHdvcmspIGZyb20gdGhhdAorY29weXJpZ2h0IGhvbGRlciwgYW5kIHlvdSBjdXJlIHRoZSB2aW9sYXRpb24gcHJpb3IgdG8gMzAgZGF5cyBhZnRlcgoreW91ciByZWNlaXB0IG9mIHRoZSBub3RpY2UuCisKK1Rlcm1pbmF0aW9uIG9mIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgc2VjdGlvbiBkb2VzIG5vdCB0ZXJtaW5hdGUgdGhlCitsaWNlbnNlcyBvZiBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcyBvciByaWdodHMgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZS4gIElmIHlvdXIgcmlnaHRzIGhhdmUgYmVlbiB0ZXJtaW5hdGVkIGFuZCBub3QgcGVybWFuZW50bHkKK3JlaW5zdGF0ZWQsIHJlY2VpcHQgb2YgYSBjb3B5IG9mIHNvbWUgb3IgYWxsIG9mIHRoZSBzYW1lIG1hdGVyaWFsIGRvZXMKK25vdCBnaXZlIHlvdSBhbnkgcmlnaHRzIHRvIHVzZSBpdC4KKworCisxMC4gRlVUVVJFIFJFVklTSU9OUyBPRiBUSElTIExJQ0VOU0UKKworVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCBuZXcsIHJldmlzZWQgdmVyc2lvbnMgb2YgdGhlCitHTlUgRnJlZSBEb2N1bWVudGF0aW9uIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucword2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbgorZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLiAgU2VlCitodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvLgorCitFYWNoIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4KK0lmIHRoZSBEb2N1bWVudCBzcGVjaWZpZXMgdGhhdCBhIHBhcnRpY3VsYXIgbnVtYmVyZWQgdmVyc2lvbiBvZiB0aGlzCitMaWNlbnNlICJvciBhbnkgbGF0ZXIgdmVyc2lvbiIgYXBwbGllcyB0byBpdCwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZgorZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCBzcGVjaWZpZWQgdmVyc2lvbiBvcgorb2YgYW55IGxhdGVyIHZlcnNpb24gdGhhdCBoYXMgYmVlbiBwdWJsaXNoZWQgKG5vdCBhcyBhIGRyYWZ0KSBieSB0aGUKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBEb2N1bWVudCBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbgorbnVtYmVyIG9mIHRoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgKG5vdAorYXMgYSBkcmFmdCkgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBEb2N1bWVudAorc3BlY2lmaWVzIHRoYXQgYSBwcm94eSBjYW4gZGVjaWRlIHdoaWNoIGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGlzCitMaWNlbnNlIGNhbiBiZSB1c2VkLCB0aGF0IHByb3h5J3MgcHVibGljIHN0YXRlbWVudCBvZiBhY2NlcHRhbmNlIG9mIGEKK3ZlcnNpb24gcGVybWFuZW50bHkgYXV0aG9yaXplcyB5b3UgdG8gY2hvb3NlIHRoYXQgdmVyc2lvbiBmb3IgdGhlCitEb2N1bWVudC4KKworMTEuIFJFTElDRU5TSU5HCisKKyJNYXNzaXZlIE11bHRpYXV0aG9yIENvbGxhYm9yYXRpb24gU2l0ZSIgKG9yICJNTUMgU2l0ZSIpIG1lYW5zIGFueQorV29ybGQgV2lkZSBXZWIgc2VydmVyIHRoYXQgcHVibGlzaGVzIGNvcHlyaWdodGFibGUgd29ya3MgYW5kIGFsc28KK3Byb3ZpZGVzIHByb21pbmVudCBmYWNpbGl0aWVzIGZvciBhbnlib2R5IHRvIGVkaXQgdGhvc2Ugd29ya3MuICBBCitwdWJsaWMgd2lraSB0aGF0IGFueWJvZHkgY2FuIGVkaXQgaXMgYW4gZXhhbXBsZSBvZiBzdWNoIGEgc2VydmVyLiAgQQorIk1hc3NpdmUgTXVsdGlhdXRob3IgQ29sbGFib3JhdGlvbiIgKG9yICJNTUMiKSBjb250YWluZWQgaW4gdGhlIHNpdGUKK21lYW5zIGFueSBzZXQgb2YgY29weXJpZ2h0YWJsZSB3b3JrcyB0aHVzIHB1Ymxpc2hlZCBvbiB0aGUgTU1DIHNpdGUuCisKKyJDQy1CWS1TQSIgbWVhbnMgdGhlIENyZWF0aXZlIENvbW1vbnMgQXR0cmlidXRpb24tU2hhcmUgQWxpa2UgMy4wCitsaWNlbnNlIHB1Ymxpc2hlZCBieSBDcmVhdGl2ZSBDb21tb25zIENvcnBvcmF0aW9uLCBhIG5vdC1mb3ItcHJvZml0Citjb3Jwb3JhdGlvbiB3aXRoIGEgcHJpbmNpcGFsIHBsYWNlIG9mIGJ1c2luZXNzIGluIFNhbiBGcmFuY2lzY28sCitDYWxpZm9ybmlhLCBhcyB3ZWxsIGFzIGZ1dHVyZSBjb3B5bGVmdCB2ZXJzaW9ucyBvZiB0aGF0IGxpY2Vuc2UKK3B1Ymxpc2hlZCBieSB0aGF0IHNhbWUgb3JnYW5pemF0aW9uLgorCisiSW5jb3Jwb3JhdGUiIG1lYW5zIHRvIHB1Ymxpc2ggb3IgcmVwdWJsaXNoIGEgRG9jdW1lbnQsIGluIHdob2xlIG9yIGluCitwYXJ0LCBhcyBwYXJ0IG9mIGFub3RoZXIgRG9jdW1lbnQuCisKK0FuIE1NQyBpcyAiZWxpZ2libGUgZm9yIHJlbGljZW5zaW5nIiBpZiBpdCBpcyBsaWNlbnNlZCB1bmRlciB0aGlzCitMaWNlbnNlLCBhbmQgaWYgYWxsIHdvcmtzIHRoYXQgd2VyZSBmaXJzdCBwdWJsaXNoZWQgdW5kZXIgdGhpcyBMaWNlbnNlCitzb21ld2hlcmUgb3RoZXIgdGhhbiB0aGlzIE1NQywgYW5kIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgaW4gd2hvbGUgb3IKK2luIHBhcnQgaW50byB0aGUgTU1DLCAoMSkgaGFkIG5vIGNvdmVyIHRleHRzIG9yIGludmFyaWFudCBzZWN0aW9ucywgYW5kCisoMikgd2VyZSB0aHVzIGluY29ycG9yYXRlZCBwcmlvciB0byBOb3ZlbWJlciAxLCAyMDA4LgorCitUaGUgb3BlcmF0b3Igb2YgYW4gTU1DIFNpdGUgbWF5IHJlcHVibGlzaCBhbiBNTUMgY29udGFpbmVkIGluIHRoZSBzaXRlCit1bmRlciBDQy1CWS1TQSBvbiB0aGUgc2FtZSBzaXRlIGF0IGFueSB0aW1lIGJlZm9yZSBBdWd1c3QgMSwgMjAwOSwKK3Byb3ZpZGVkIHRoZSBNTUMgaXMgZWxpZ2libGUgZm9yIHJlbGljZW5zaW5nLgorCisKK0FEREVORFVNOiBIb3cgdG8gdXNlIHRoaXMgTGljZW5zZSBmb3IgeW91ciBkb2N1bWVudHMKKworVG8gdXNlIHRoaXMgTGljZW5zZSBpbiBhIGRvY3VtZW50IHlvdSBoYXZlIHdyaXR0ZW4sIGluY2x1ZGUgYSBjb3B5IG9mCit0aGUgTGljZW5zZSBpbiB0aGUgZG9jdW1lbnQgYW5kIHB1dCB0aGUgZm9sbG93aW5nIGNvcHlyaWdodCBhbmQKK2xpY2Vuc2Ugbm90aWNlcyBqdXN0IGFmdGVyIHRoZSB0aXRsZSBwYWdlOgorCisgICAgQ29weXJpZ2h0IChjKSAgWUVBUiAgWU9VUiBOQU1FLgorICAgIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhpcyBkb2N1bWVudAorICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCBWZXJzaW9uIDEuMworICAgIG9yIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOworICAgIHdpdGggbm8gSW52YXJpYW50IFNlY3Rpb25zLCBubyBGcm9udC1Db3ZlciBUZXh0cywgYW5kIG5vIEJhY2stQ292ZXIgVGV4dHMuCisgICAgQSBjb3B5IG9mIHRoZSBsaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoZSBzZWN0aW9uIGVudGl0bGVkICJHTlUKKyAgICBGcmVlIERvY3VtZW50YXRpb24gTGljZW5zZSIuCisKK0lmIHlvdSBoYXZlIEludmFyaWFudCBTZWN0aW9ucywgRnJvbnQtQ292ZXIgVGV4dHMgYW5kIEJhY2stQ292ZXIgVGV4dHMsCityZXBsYWNlIHRoZSAid2l0aC4uLlRleHRzLiIgbGluZSB3aXRoIHRoaXM6CisKKyAgICB3aXRoIHRoZSBJbnZhcmlhbnQgU2VjdGlvbnMgYmVpbmcgTElTVCBUSEVJUiBUSVRMRVMsIHdpdGggdGhlCisgICAgRnJvbnQtQ292ZXIgVGV4dHMgYmVpbmcgTElTVCwgYW5kIHdpdGggdGhlIEJhY2stQ292ZXIgVGV4dHMgYmVpbmcgTElTVC4KKworSWYgeW91IGhhdmUgSW52YXJpYW50IFNlY3Rpb25zIHdpdGhvdXQgQ292ZXIgVGV4dHMsIG9yIHNvbWUgb3RoZXIKK2NvbWJpbmF0aW9uIG9mIHRoZSB0aHJlZSwgbWVyZ2UgdGhvc2UgdHdvIGFsdGVybmF0aXZlcyB0byBzdWl0IHRoZQorc2l0dWF0aW9uLgorCitJZiB5b3VyIGRvY3VtZW50IGNvbnRhaW5zIG5vbnRyaXZpYWwgZXhhbXBsZXMgb2YgcHJvZ3JhbSBjb2RlLCB3ZQorcmVjb21tZW5kIHJlbGVhc2luZyB0aGVzZSBleGFtcGxlcyBpbiBwYXJhbGxlbCB1bmRlciB5b3VyIGNob2ljZSBvZgorZnJlZSBzb2Z0d2FyZSBsaWNlbnNlLCBzdWNoIGFzIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKK3RvIHBlcm1pdCB0aGVpciB1c2UgaW4gZnJlZSBzb2Z0d2FyZS4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0ZETC0xLjMrIGIvbGljZW5zZXMvRkRMLTEuMysKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRkNTQxMwotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0ZETC0xLjMrCkBAIC0wLDAgKzEsMiBAQAorR05VIEZyZWUgRG9jdW1lbnRhdGlvbiBMaWNlbnNlLCB2ZXJzaW9uIDEuMyBvciBhbnkgbGF0ZXIgdmVyc2lvbi4KK1NlZSBGREwtMS4zIGZvciB0aGUgZnVsbCB0ZXh0IG9mIHRoaXMgbGljZW5zZS4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0ZFU1RJVkFMIGIvbGljZW5zZXMvRkVTVElWQUwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzExNWYyYwotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0ZFU1RJVkFMCkBAIC0wLDAgKzEsOTMgQEAKK1RoZSBzeXN0ZW0gYXMgYSB3aG9sZSBhbmQgYWxtb3N0IGFsbCBvZiB0aGUgZmlsZXMgaW4gaXQgYXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgZm9sbG93aW5nIGNvcHlyaWdodCBhbmQgY29uZGl0aW9ucworCisgICAgICAgICAgICAgICAgVGhlIEZlc3RpdmFsIFNwZWVjaCBTeW50aGVzaXMgU3lzdGVtCisgICAgICAgICAgICAgICAgQ2VudHJlIGZvciBTcGVlY2ggVGVjaG5vbG9neSBSZXNlYXJjaCAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICBVbml2ZXJzaXR5IG9mIEVkaW5idXJnaCwgVUsgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgIENvcHlyaWdodCAoYykgMTk5Ni0yMDAxCisgICAgICAgICAgICAgICAgICAgICAgICBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIHVzZSBhbmQgZGlzdHJpYnV0ZSAgCisgIHRoaXMgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyAgIAorICB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsICAKKyAgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoaXMgd29yaywgYW5kIHRvICAgICAgCisgIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhpcyB3b3JrIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byAgIAorICB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgIDEuIFRoZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgICAgCisgICAgICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgMi4gQW55IG1vZGlmaWNhdGlvbnMgbXVzdCBiZSBjbGVhcmx5IG1hcmtlZCBhcyBzdWNoLiAgICAgICAgICAgICAgICAKKyAgIDMuIE9yaWdpbmFsIGF1dGhvcnMnIG5hbWVzIGFyZSBub3QgZGVsZXRlZC4gICAgICAgICAgICAgICAgICAgICAgICAgCisgICA0LiBUaGUgYXV0aG9ycycgbmFtZXMgYXJlIG5vdCB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyAgIAorICAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuICAgICAgICAKKyAgICAgIHBlcm1pc3Npb24uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgIFRIRSBVTklWRVJTSVRZIE9GIEVESU5CVVJHSCBBTkQgVEhFIENPTlRSSUJVVE9SUyBUTyBUSElTIFdPUksgICAgICAgIAorICBESVNDTEFJTSBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgICAgICAKKyAgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MsIElOIE5PIEVWRU5UICAgCisgIFNIQUxMIFRIRSBVTklWRVJTSVRZIE9GIEVESU5CVVJHSCBOT1IgVEhFIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgICAgIAorICBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyAgICAKKyAgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOICAgCisgIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sICAgICAgICAgIAorICBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiAgICAgICAKKyAgVEhJUyBTT0ZUV0FSRS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorU29tZSBmdXJ0aGVyIGNvbW1lbnRzOgorCitFdmVyeSBlZmZvcnQgaGFzIGJlZW4gbWFkZSB0byBlbnN1cmUgdGhhdCBGZXN0aXZhbCBkb2VzIG5vdCBjb250YWluCithbnkgdmlvbGF0aW9uIG9mIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgdGhyb3VnaCBkaXNjbG9zdXJlIG9mCit0cmFkZSBzZWNyZXRzLCBjb3B5cmlnaHQgb3IgcGF0ZW50IHZpb2xhdGlvbi4gIENvbnNpZGVyYWJsZSB0aW1lIGFuZAorZWZmb3J0IGhhcyBiZWVuIHNwZW50IHRvIGVuc3VyZSB0aGF0IHRoaXMgaXMgdGhlIGNhc2UuICBIb3dldmVyLAorZXNwZWNpYWxseSB3aXRoIHBhdGVudCBwcm9ibGVtcywgaXQgaXMgbm90IGFsd2F5cyB3aXRoaW4gb3VyIGNvbnRyb2wKK3RvIGtub3cgd2hhdCBoYXMgb3IgaGFzIG5vdCBiZWVuIHJlc3RyaWN0ZWQuICBJZiB5b3UgZG8gc3VzcGVjdCB0aGF0Citzb21lIHBhcnQgb2YgRmVzdGl2YWwgY2Fubm90IGJlIGxlZ2FsbHkgZGlzdHJpYnV0ZWQgcGxlYXNlIHBsZWFzZQoraW5mb3JtIHVzIHNvIHRoYXQgYW4gYWx0ZXJuYXRpdmUgbWF5IGJlIHNvdWdodC4gIEZlc3RpdmFsIGlzIG9ubHkKK3VzZWZ1bCBpZiBpdCBpcyB0cnVseSBmcmVlIHRvIGRpc3RyaWJ1dGUuCisKK0FzIG9mIDEuNC4wIHRoZSBjb3JlIGRpc3RyaWJ1dGlvbiAoYW5kIHNwZWVjaCB0b29scykgaXMgZnJlZS4gIFVubGlrZQorcHJldmlvdXMgdmVyc2lvbnMgd2hpY2ggaGFkIGEgY29tbWVyY2lhbCByZXN0cmljdGlvbi4gIFlvdSBhcmUgZnJlZSB0bworaW5jb3Jwb3JhdGUgRmVzdGl2YWwgaW4gY29tbWVyY2lhbCAoYW5kIG9mIGNvdXJzZSBub24tY29tbWVyY2lhbAorc3lzdGVtcyksIHdpdGhvdXQgYW55IGZ1cnRoZXIgY29tbXVuaWNhdGlvbiBvciBsaWNlbmNlIGZyb20gdXMuCitIb3dldmVyIGlmIHlvdSBhcmUgc2VyaW91c2x5IHVzaW5nIEZlc3RpdmFsIHdpdGhpbiBhIGNvbW1lcmNpYWwKK2FwcGxpY2F0aW9uIHdlIHdvdWxkIGxpa2UgdG8ga25vdywgYm90aCBzbyB3ZSBrbm93IHdlIGFyZSBjb250cmlidXRpbmcKK2FuZCBzbyB3ZSBjYW4ga2VlcCB5b3UgaW5mb3JtZWQgb2YgZnV0dXJlIGRldmVsb3BtZW50cy4gIEFsc28gaWYgeW91CityZXF1aXJlIG1haW50ZW5hbmNlLCBzdXBwb3J0IG9yIHdpc2ggdXMgdG8gcHJvdmlkZSBjb25zdWx0YW5jeSBmZWVsCitmcmVlIHRvIGNvbnRhY3QgdXMuCisKK1RoZSB2b2ljZXMgaG93ZXZlciBhcmVuJ3QgYWxsIGZyZWUuICBBdCBwcmVzZW50IHRoZSBVUyB2b2ljZXMsIGthbCBhbmQKK2tlZCBhcmUgZnJlZS4gT3VyIEJyaXRpc2ggdm9pY2VzIGFyZSBmcmVlIHRoZW1zZWx2ZXMgYnV0IHRoZXkgdXNlIE9BTEQKK3doaWNoIGlzIHJlc3RyaWN0ZWQgZm9yIG5vbi1jb21tZXJjaWFsIHVzZS4gIE91ciBTcGFuaXNoIHZvaWNlIGlzIGFsc28KK3NvIHJlc3RyaWN0ZWQuCisKK05vdGUgb3RoZXIgbW9kdWxlcyB0aGF0IGZlc3RpdmFsIHN1cHBvcnRzIGUuZyBNQlJPTEEgYW5kIE9HSQorZXh0ZW5zaW9ucywgbWF5IGhhdmUgZGlmZmVyZW50IGxpY2VuY2luZyBwbGVhc2UgdGFrZSBjYXJlIHdoZW4gdXNpbmcKK3RoZSBzeXN0ZW0gdG8gdW5kZXJzdGFuZCB3aGF0IHlvdSBhcmUgYWN0dWFsbHkgdXNpbmcuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0EgbnVtYmVyIG9mIGluZGl2aWR1YWwgZmlsZXMgaW4gdGhlIHN5c3RlbSBmYWxsIHVuZGVyIGEgZGlmZmVyZW50Citjb3B5cmlnaHQgZnJvbSB0aGUgYWJvdmUuICBBbGwgaG93ZXZlciBhcmUgdGVybWVkICJmcmVlIHNvZnR3YXJlIgorYnV0IG1vc3QgcGVvcGxlLiAgCisKKy4vc3JjL2FyY2gvZmVzdGl2YWwvdGNsLmMKKyAqIENvcHlyaWdodCAoQykxOTk3IEphY3F1ZXMgSC4gZGUgVmlsbGllcnMgPGphY3F1ZXNAY3NlLm9naS5lZHU+CisgKiBDb3B5cmlnaHQgKEMpMTk5NyBDZW50ZXIgZm9yIFNwb2tlbiBMYW5ndWFnZSBVbmRlcnN0YW5kaW5nLAorICogICAgICAgICAgICAgICAgICAgT3JlZ29uIEdyYWR1YXRlIEluc3RpdHV0ZSBvZiBTY2llbmNlICYgVGVjaG5vbG9neQorIFNlZSBjb25kaXRpb25zIGluIGZpbGUuICBUaGlzIGlzIHRoZSBzdGFuZGFyZCBUQ0wgbGljZW5jZSBhbmQgaGVuY2UKKyBzaG91bGRuJ3QgY2F1c2UgcHJvYmxlbXMgZnJvbSBtb3N0IHBlb3BsZS4KKworLi9leGFtcGxlcy9mZXN0aXZhbF9jbGllbnQucGwKKyMgQ29weXJpZ2h0IChDKSAxOTk3CisjIEtldmluIEEuIExlbnpvIChsZW56b0Bjcy5jbXUuZWR1KSA3Lzk3CisgU2VlIGNvbmRpdGlvbiBpbiBmaWxlCisKKy4vc3JjL21vZHVsZXMvY2x1bml0cy8qCisgSm9pbnQgY29weXJpZ2h0IFVuaXZlcnNpdHkgb2YgRWRpbmJ1cmdoIGFuZCBDYXJuZWdpZSBNZWxsb24gVW5pdmVyc2l0eQorIENvbmRpdGlvbnMgcmVtYWluIGFzIGZyZWUgc29mdHdhcmUgbGlrZSB0aGUgcmVzdCBvZiBkaXN0cmlidXRpb24KKworLi9saWIvZmVzdGl2YWwuZWwKKzs7OyAgICAgICAgICAgICAgIENvcHlyaWdodCAoQykgQWxhbiBXIEJsYWNrIDE5OTYKK2NvcHlyaWdodCB1bmRlciBGU0YgR2VuZXJhbCBQdWJsaWMgTGljZW5jZQorCitQbGVhc2UgYWxzbyByZWFkIHRoZSBDT1BZSU5HIHNlY3Rpb24gb2Ygc3BlZWNoX3Rvb2xzL1JFQURNRSBmb3IgdGhlCitjb25kaXRpb25zIG9uIHRob3NlIGZpbGVzLgorCmRpZmYgLS1naXQgYS9saWNlbnNlcy9GRlNMIGIvbGljZW5zZXMvRkZTTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGUzYzg1Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvRkZTTApAQCAtMCwwICsxLDI2MSBAQAorICAgICAgICAgICAgICAgICAgICAgICAgIEZsb29kZ2FwIEZyZWUgU29mdHdhcmUgTGljZW5zZQorCisgICBUaGUgYXV0aG9yIG9mIHlvdXIgc29mdHdhcmUgaGFzIGNob3NlbiB0byBkaXN0cmlidXRlIGl0IHVuZGVyIHRoZQorICAgRmxvb2RnYXAgRnJlZSBTb2Z0d2FyZSBMaWNlbnNlLiBBbHRob3VnaCB0aGlzIHNvZnR3YXJlIGlzIHdpdGhvdXQgY29zdCwKKyAgIGl0IGlzIG5vdCByZWxlYXNlZCB1bmRlciBDb3B5bGVmdCBvciBHUEwsIGFuZCB0aGVyZSBhcmUgZGlmZmVyZW5jZXMKKyAgIHdoaWNoIHlvdSBzaG91bGQgcmVhZC4gWW91ciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBwYWNrYWdlIGNvbnN0aXR1dGVzCisgICB5b3VyIGJpbmRpbmcgYWNjZXB0YW5jZSB3aXRob3V0IHJlc3RyaWN0aW9uLgorCisgIFRoaXMgc29mdHdhcmUgaXMgd2l0aG91dCBjb3N0CisKKyAgIFRoZSBGbG9vZGdhcCBGcmVlIFNvZnR3YXJlIExpY2Vuc2UgKEZGU0wpIGhhcyBvbmUgb3ZlcnJpZGluZyBtYW5kYXRlOgorICAgdGhhdCBzb2Z0d2FyZSB1c2luZyBpdCwgb3IgZGVyaXZhdGl2ZSB3b3JrcyBiYXNlZCBvbiBzb2Z0d2FyZSB0aGF0IHVzZXMKKyAgIGl0LCBtdXN0IGJlIGZyZWUuIEJ5IGZyZWUgd2UgbWVhbiBzaW1wbHkgImZyZWUgYXMgaW4gYmVlciIgLS0geW91IG1heQorICAgcHV0IHlvdXIgd29yayBpbnRvIG9wZW4gb3IgY2xvc2VkIHNvdXJjZSBwYWNrYWdlcyBhcyB5b3Ugc2VlIGZpdCwKKyAgIHdoZXRoZXIgb3Igbm90IHlvdSBjaG9vc2UgdG8gcmVsZWFzZSB5b3VyIGNoYW5nZXMgb3IgdXBkYXRlcyBwdWJsaWNseSwKKyAgIGJ1dCB5b3UgbXVzdCBub3QgYXNrIGFueSBmZWUgZm9yIGl0LiAoVGhlcmUgYXJlIGNlcnRhaW4gZXhjZXB0aW9ucyBmb3IKKyAgIGZvci1wcm9maXQgdXNlIHdoaWNoIHdlIHdpbGwgZGlzY3VzcyBiZWxvdy4pCisKKyAgRGVmaW5pdGlvbnMgYW5kIHRlcm1zCisKKyAgIEF1dGhvcgorICAgICAgICAgIFRoZSBkZWNsYXJlZCBjb3B5cmlnaHQgb3duZXIgb2YgdGhpcyBzb2Z0d2FyZSBwYWNrYWdlLgorCisgICBCaW5hcnkKKyAgICAgICAgICBBIHByZS1jb21waWxlZCBvciBwcmUtaW50ZXJwcmV0ZWQgYnl0ZWNvZGUgb3IgbWFjaGluZSBsYW5ndWFnZQorICAgICAgICAgIHJlcHJlc2VudGF0aW9uIG9mIGEgc29mdHdhcmUgcGFja2FnZSBub3QgZGVzaWduZWQgZm9yIGZ1cnRoZXIKKyAgICAgICAgICBtb2RpZmljYXRpb24gYW5kIHRpZWQgdG8gYSBwYXJ0aWN1bGFyIHBsYXRmb3JtIG9yIGFyY2hpdGVjdHVyZS4KKworICAgRGVyaXZhdGl2ZSB3b3JrCisgICAgICAgICAgQW55IGRpc3RyaWJ1dGlvbiAocS52LikgdGhhdCBjb250YWlucyBhbnkgbW9kaWZpY2F0aW9uIHRvIG9yCisgICAgICAgICAgZGV2aWF0aW9uIGZyb20gdGhlIG9mZmljaWFsIHJlZmVyZW5jZSBkaXN0cmlidXRpb24gKHEudi4pOyBvcgorICAgICAgICAgIGFueSBzb2Z0d2FyZSBwYWNrYWdlIHNpZ25pZmljYW50bHkgYmFzZWQgb24gb3IgaW50ZWdyYWxseQorICAgICAgICAgIGluY2x1ZGluZyB0aGUgc291cmNlIGNvZGUgZm9yIGl0cyBmZWF0dXJlcywgaW5jbHVkaW5nIGJ1dCBub3QKKyAgICAgICAgICBsaW1pdGVkIHRvIHN1cGVyc2V0czsgc3Vic2V0cyBvZiBhIHNpZ25pZmljYW50IHByb3BvcnRpb247CisgICAgICAgICAgaW4tcGxhY2UgcGF0Y2hlZCBjaGFuZ2VzIHRvIHNvdXJjZSBvciBiaW5hcnkgZmlsZXM7IGxpbmtpbmcgaW4KKyAgICAgICAgICBhcyBhIGxpYnJhcnk7IGJpbmFyeS1vbmx5IGRpc3RyaWJ1dGlvbnMgaWYgdGhlIG9yaWdpbmFsIHBhY2thZ2UKKyAgICAgICAgICBpbmNsdWRlZCBzb3VyY2UgKGV2ZW4gaWYgdGhlIHNvdXJjZSB3YXMgbm90IG1vZGlmaWVkIHByaW9yIHRvCisgICAgICAgICAgY29tcGlsYXRpb24pOyBvciB0cmFuc2xhdGlvbnMgdG8gYW5vdGhlciBwcm9ncmFtbWluZyBsYW5ndWFnZSwKKyAgICAgICAgICBhcmNoaXRlY3R1cmUgb3Igb3BlcmF0aW5nIHN5c3RlbSBlbnZpcm9ubWVudC4gRGVyaXZhdGl2ZSB3b3JrcworICAgICAgICAgIG9mIHBhY2thZ2VzIHJlbGVhc2VkIHVuZGVyIHRoaXMgbGljZW5zZSBhcmUgYWxzbyBjb25zaWRlcmVkCisgICAgICAgICAgc3ViamVjdCB0byB0aGlzIGxpY2Vuc2UuCisKKyAgICAgICAgICBIb3dldmVyLCBhIHNvZnR3YXJlIHBhY2thZ2UgdGhhdCByZXF1aXJlcyB0aGlzIHBhY2thZ2UgYnV0IGRvZXMKKyAgICAgICAgICBub3QgaW5jbHVkZSBpdCBvciBpcyBub3QgYmFzZWQgdXBvbiBpdCwgZXZlbiBpZiBpdCB3aWxsIG5vdAorICAgICAgICAgIG9wZXJhdGUgd2l0aG91dCBpdCwgaXMgbm90IGNvbnNpZGVyZWQgYSBkZXJpdmF0aXZlIHdvcmsuIEZvcgorICAgICAgICAgIGV4YW1wbGUsIGludGVycHJldGVkIHByb2dyYW1zIHJlcXVpcmluZyBhbiBpbnRlcnByZXRlciBpc3N1ZWQKKyAgICAgICAgICB1bmRlciB0aGlzIGxpY2Vuc2UsIGFzc3VtaW5nIHRoZXkgYXJlIG5vdCBkaXN0cmlidXRlZCB3aXRoIGFueQorICAgICAgICAgIHBvcnRpb24gb2YgdGhlIGludGVycHJldGVyLCBhcmUgbm90IGRlcml2YXRpdmUgd29ya3MuCisKKyAgIERpc3RyaWJ1dGlvbgorICAgICAgICAgIEEgcGFja2FnZWQgcmVsZWFzZSBvZiB0aGlzIHNvZnR3YXJlLCBlaXRoZXIgdGhlIGF1dGhvcidzCisgICAgICAgICAgb3JpZ2luYWwgd29yayAodGhlICJyZWZlcmVuY2UgZGlzdHJpYnV0aW9uIikgb3IgYSBkZXJpdmF0aXZlCisgICAgICAgICAgd29yayBiYXNlZCB1cG9uIGl0LgorCisgICBSZWZlcmVuY2UgZGlzdHJpYnV0aW9uCisgICAgICAgICAgQSBwYWNrYWdlZCByZWxlYXNlIG9mIHRoaXMgc29mdHdhcmUgZXhwbGljaXRseSBkZXNpZ25hdGVkIGFzIHRoZQorICAgICAgICAgIG9mZmljaWFsIHJlbGVhc2UsIHdyaXR0ZW4gYnkgb3Igb24gYmVoYWxmIG9mIHRoZSBBdXRob3Igd2l0aCBoaXMKKyAgICAgICAgICBvciBoZXIgZXhwbGljaXQgZGVzaWduYXRpb24gYXMgb2ZmaWNpYWwuIE9ubHkgZXhhY3QgY29waWVzIG9mCisgICAgICAgICAgdGhlIHJlZmVyZW5jZSBkaXN0cmlidXRpb24gbWF5IGJlIGNhbGxlZCByZWZlcmVuY2UKKyAgICAgICAgICBkaXN0cmlidXRpb25zOyBhbGwgb3RoZXIgZm9ybXMgYXJlIGRlcml2YXRpdmUgd29ya3MuCisKKyAgIFNvdXJjZSBjb2RlCisgICAgICAgICAgVGhlIGh1bWFuLXJlYWRhYmxlIHByb2dyYW1taW5nIGluc3RydWN0aW9ucyBvZiB0aGUgcGFja2FnZSB3aGljaAorICAgICAgICAgIG1pZ2h0IGJlIGVhc2lseSByZWFkIGFzIHRleHQgYW5kIHN1YnNlcXVlbnRseSBlZGl0ZWQsIGJ1dAorICAgICAgICAgIHJlcXVpcmluZyBjb21waWxhdGlvbiBvciBpbnRlcnByZXRhdGlvbiBpbnRvIGJpbmFyeSBiZWZvcmUgYmVpbmcKKyAgICAgICAgICBkaXJlY3RseSB1c2VhYmxlLgorCisgIFdoYXQgeW91IGFyZSBwZXJtaXR0ZWQgdG8gZG8gdW5kZXIgdGhpcyBsaWNlbnNlCisKKyAgIFB1cnN1YW50IHRvIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIGJlbG93LAorICAgICAqIFlvdSBtYXkgZnJlZWx5IHVzZSwgY29weSwgYW5kIGRpc3NlbWluYXRlIHRoaXMgc29mdHdhcmUgcGFja2FnZSBmb3IKKyAgICAgICBhbnkgbm9uLWNvbW1lcmNpYWwgcHVycG9zZSBhcyB3ZWxsIGFzIHRoZSBjb21tZXJjaWFsIHB1cnBvc2VzCisgICAgICAgcGVybWl0dGVkIGJlbG93LgorICAgICAqIFlvdSBtYXkgZnJlZWx5IG1vZGlmeSB0aGlzIHBhY2thZ2UsIGluY2x1ZGluZyBzb3VyY2UgY29kZSBpZgorICAgICAgIGF2YWlsYWJsZS4gWW91ciBtb2RpZmljYXRpb25zIG5lZWQgbm90IGJlIHJlbGVhc2VkLCBhbHRob3VnaCB5b3UKKyAgICAgICBhcmUgZW5jb3VyYWdlZCB0byBkbyBzby4KKyAgICAgKiBZb3UgbWF5IHJlbGVhc2UgeW91ciBkZXJpdmF0aXZlIHdvcmtzIGJhc2VkIHVwb24gdGhpcyBzb2Z0d2FyZSBpbgorICAgICAgIHB1cmVseSBiaW5hcnkgKG5vbi1zb3VyY2UpIGZvcm0gaWYgeW91IGNob29zZS4gWW91IGFyZSBub3QKKyAgICAgICBvYmxpZ2F0ZWQgdG8gcmVsZWFzZSBhbnkgcG9ydGlvbiBvZiB5b3VyIHNvdXJjZSBjb2RlIG9wZW5seSwKKyAgICAgICBhbHRob3VnaCB5b3UgYXJlIGVuY291cmFnZWQgdG8gZG8gc28uCisgICAgICogSWYgdGhpcyBwYWNrYWdlIGlzIGEgdG9vbCB1c2VkIGZvciBnZW5lcmF0aW9uLCBjb21waWxhdGlvbiBvcgorICAgICAgIG1haW50ZW5hbmNlIG9mIHdvcmtzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHJlYWRhYmxlCisgICAgICAgZG9jdW1lbnRzLCBzb2Z0d2FyZSBwYWNrYWdlcyBvciBpbWFnZXMgKGZvciBleGFtcGxlLCBjb21waWxlcnMsCisgICAgICAgaW50ZXJwcmV0ZXJzLCB0cmFuc2xhdG9ycywgbGlua2VycywgZWRpdG9ycywgYXNzZW1ibGVycyBvcgorICAgICAgIHR5cGVzZXR0ZXJzKSwgeW91IG1heSBmcmVlbHkgdXNlIGl0IGZvciB0aGF0IHB1cnBvc2UsIGNvbW1lcmNpYWwgb3IKKyAgICAgICBvdGhlcndpc2UsIGFzIHRoZSB3b3JrcyBtYWRlIGJ5IHRoaXMgcGFja2FnZSBhcmUgbm90IGNvbnNpZGVyZWQKKyAgICAgICBzdWJqZWN0IHRvIHRoaXMgbGljZW5zZSB1bmxlc3Mgc3BlY2lmaWVkIG90aGVyd2lzZSB3aXRoaW4gYW5kIG1heQorICAgICAgIGJlIGRpc3RyaWJ1dGVkIHVuZGVyIGFueSBkZXNpcmVkIGxpY2Vuc2UgYW5kL29yIG9mZmVyZWQgZm9yIHNhbGUgb3IKKyAgICAgICByZW50YWwuIEFueSBydW4tdGltZSBsaWJyYXJ5IG9yIHJ1bi10aW1lIGNvZGUgc2VjdGlvbiBsaW5rZWQgaW50bworICAgICAgIHRoZSBvdXRwdXQgYnkgYSBjb21waWxlciBvciBzaW1pbGFyIGNvZGUtZ2VuZXJhdGluZyB0b29sIGdvdmVybmVkCisgICAgICAgYnkgdGhpcyBsaWNlbnNlIGlzIGNvbnNpZGVyZWQgdG8gYmUgYW4gaW50ZWdyYWwgcGFydCBvZiB0aGUgb3V0cHV0LAorICAgICAgIGFuZCBpdHMgcHJlc2VuY2UgZG9lcyBub3Qgc3ViamVjdCB0aGUgZ2VuZXJhdGVkIHdvcmsgdG8gdGhpcworICAgICAgIGxpY2Vuc2UgZWl0aGVyLiAoVGhpcyBpcywgb2YgY291cnNlLCBhc3N1bWluZyB5b3UgYXJlIG5vdCB1c2luZworICAgICAgIHNhaWQgdG9vbHMgdG8gZ2VuZXJhdGUgYSBkZXJpdmF0aXZlIHdvcmsgYmFzZWQgb24gdGhpcyBwYWNrYWdlIGluCisgICAgICAgdmlvbGF0aW9uIG9mIHRoZSBvdGhlciBsaWNlbnNlIHRlcm1zLikKKyAgICAgICBIb3dldmVyLCBpZiB5b3UgYXJlIGxpbmtpbmcgb3IgaW5jbHVkaW5nIGEgc2VwYXJhdGVseSBkaXN0cmlidXRlZAorICAgICAgIGxpYnJhcnkgdGhhdCBpcyB1bmRlciB0aGlzIGxpY2Vuc2UsIG5vIG1hdHRlciB3aGF0IHRvb2wgeW91IGFyZQorICAgICAgIHVzaW5nIHRvIGRvIHRoZSBsaW5raW5nIG9yIGluY2x1c2lvbiwgeW91IGFyZSB0aGVuIGNvbnNpZGVyZWQgdG8gYmUKKyAgICAgICBtYWtpbmcgYSBkZXJpdmF0aXZlIHdvcmsgYmFzZWQgb24gdGhhdCBsaWJyYXJ5IGFuZCB5b3VyIHdvcmsgZG9lcworICAgICAgIGZhbGwgdW5kZXIgdGhpcyBsaWNlbnNlLiBUbyBhdm9pZCB0aGlzLCBkbyBub3QgaW5jbHVkZSB0aGUgbGlicmFyeQorICAgICAgIHdpdGggeW91ciB3b3JrIChldmVuIHRob3VnaCBpdCBuZWVkcyB0aGUgbGlicmFyeSB0byBmdW5jdGlvbikgYW5kCisgICAgICAgaW5zdGVhZCBvZmZlciB0aGUgbGlicmFyeSBzZXBhcmF0ZWx5IHdpdGhvdXQgY29zdC4KKyAgICAgKiBJbiBhZGRpdGlvbiB0byBub24tY29tbWVyY2lhbCB1c2UgYW5kIHRoZSB1c2VzIHBlcm1pdHRlZCBhYm92ZSwgeW91CisgICAgICAgbWF5IHVzZSB0aGlzIHNvZnR3YXJlIHBhY2thZ2UgaW4gYW55IGZvci1wcm9maXQgZW5kZWF2b3VyIGFzIGxvbmcKKyAgICAgICBhcyBpdCBkb2VzIG5vdCBpbnZvbHZlIHRoZSBzcGVjaWZpYyBzYWxlIG9yIHJlbnRhbCBvZiB0aGlzIHBhY2thZ2UuCisgICAgICAgU29tZSBzcGVjaWZpYyBidXQgYnkgbm8gbWVhbnMgZXhoYXVzdGl2ZSBleGFtcGxlcyBhcmUgbGlzdGVkIGJlbG93LgorICAgICAgIE5vdGUgdGhhdCBzb21lIG9mIHRoZXNlIHNpdHVhdGlvbnMgbWF5IHJlcXVpcmUgYWRkaXRpb25hbCBhY3Rpb24gYmUKKyAgICAgICB0YWtlbiB0byBlbnN1cmUgY29tcGxpYW5jZS4KKyAgICAgICAgICArIElmIHRoaXMgcGFja2FnZSBvciBhIGRlcml2YXRpdmUgd29yayBhbGxvd3MgeW91IHRvIHNlcnZlIGRhdGEKKyAgICAgICAgICAgIG9yIG1ha2UgZGF0YSBhdmFpbGFibGUgdG8gb3RoZXJzIChmb3IgZXhhbXBsZSwgd2ViIHNlcnZlcnMsCisgICAgICAgICAgICBtYWlsIHNlcnZlcnMsIGdvcGhlciBzZXJ2ZXJzLCBldGMuKSwgeW91IG1heSB1c2UgaXQgdG8gc2VydmUKKyAgICAgICAgICAgIGFueSBjb21tZXJjaWFsIGNvbnRlbnQgb3IgaW4gYW55IGNvbW1lcmNpYWwgc2V0dGluZyB3aGV0aGVyCisgICAgICAgICAgICB5b3UgY2hvb3NlIHRvIGNoYXJnZSBhIGZlZSBvciBub3QsIGFzIHlvdSBhcmUgY29uc2lkZXJlZCB0byBiZQorICAgICAgICAgICAgZWFybmluZyBpbmNvbWUgZnJvbSB0aGUgY29udGVudCB5b3Ugc2VydmUgYW5kL29yIHRoZSBzZXJ2aWNlcworICAgICAgICAgICAgZmFjaWxpdGF0ZWQgYnkgeW91ciBidXNpbmVzcyBhbmQgbm90IGZyb20gdGhlIHNhbGUgb2YgdGhpcworICAgICAgICAgICAgcGFja2FnZSBpdHNlbGYuIChUaGlzIGlzLCBvZiBjb3Vyc2UsIGFzc3VtaW5nIHRoYXQgeW91IGFyZSBub3QKKyAgICAgICAgICAgIGNoYXJnaW5nIGEgZmVlIGZvciBzYWxlIG9yIHJlbnRhbCBvZiB0aGlzIHBhY2thZ2Ugb3IgYQorICAgICAgICAgICAgZGVyaXZhdGl2ZSB3b3JrIGJhc2VkIG9uIHRoaXMgcGFja2FnZSBpbiB2aW9sYXRpb24gb2YgdGhlCisgICAgICAgICAgICBvdGhlciBsaWNlbnNlIHRlcm1zLikgU2ltaWxhcmx5LCBhbnkgZGF0YSB5b3UgbWF5IGFjcXVpcmUgZnJvbQorICAgICAgICAgICAgdGhlIHVzZSBvZiB0aGlzIHBhY2thZ2UgaXMgeW91cnMsIGFuZCBub3QgZ292ZXJuZWQgYnkgdGhpcworICAgICAgICAgICAgbGljZW5zZSBpbiBhbnkgd2F5IGV2ZW4gaWYgZm9yLXByb2ZpdC4KKyAgICAgICAgICArIElmIHlvdSBhcmUgc2VsbGluZyBhIHByb2R1Y3QgdGhhdCBpbmNsdWRlcyB0aGlzIHBhY2thZ2Ugb3IgYQorICAgICAgICAgICAgZGVyaXZhdGl2ZSB3b3JrIGVpdGhlciBhcyBwYXJ0IG9mIHlvdXIgcHJvZHVjdCdzIHJlcXVpcmVtZW50cworICAgICAgICAgICAgZm9yIGZ1bmN0aW9uIG9yIGFzIGEgYnVuZGxlZCBleHRyYSwgc3VjaCBhcyBhbiBvcGVyYXRpbmcKKyAgICAgICAgICAgIHN5c3RlbSBkaXN0cmlidXRpb24sIHlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB5b3VyIHByb2R1Y3QgYXMKKyAgICAgICAgICAgIGxvbmcgYXMgeW91IGFsc28gbWFrZSB0aGlzIHBhY2thZ2Ugb3Igc2FpZCBkZXJpdmF0aXZlIHdvcmsKKyAgICAgICAgICAgIGF2YWlsYWJsZSBmb3IgZnJlZSBzZXBhcmF0ZWx5IChzdWNoIGFzIGJ5IGRvd25sb2FkIG9yIGxpbmsKKyAgICAgICAgICAgIGJhY2sgdG8gdGhpcyBwYWNrYWdlJ3Mgc2l0ZSksIGFzIHlvdSBhcmUgY29uc2lkZXJlZCB0byBiZQorICAgICAgICAgICAgcmVxdWVzdGluZyBhIGZlZSBmb3IgeW91ciBvd24gcHJvZHVjdCBhbmQgdGhlIHBhY2thZ2UgaXMKKyAgICAgICAgICAgIG1lcmVseSBpbmNsdWRlZCBhcyBhIGNvbnZlbmllbmNlIHRvIHlvdXIgdXNlcnMuCisgICAgICAgICAgKyBJZiB5b3Ugb2ZmZXIgaW5zdGFsbGF0aW9uIG9mIHRoaXMgcGFja2FnZSBvciBhIGRlcml2YXRpdmUgd29yaworICAgICAgICAgICAgYXMgYSBzZXJ2aWNlLCB5b3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIGFjdCBvZiBpbnN0YWxsYXRpb24KKyAgICAgICAgICAgIGFzIGxvbmcgYXMgeW91IGFsc28gbWFrZSB0aGlzIHBhY2thZ2Ugb3Igc2FpZCBkZXJpdmF0aXZlIHdvcmsKKyAgICAgICAgICAgIGF2YWlsYWJsZSBmb3IgZnJlZSAoc3VjaCBhcyBieSBkb3dubG9hZCBvciBsaW5rIGJhY2sgdG8gdGhpcworICAgICAgICAgICAgcGFja2FnZSdzIHNpdGUpLCBhcyB5b3UgYXJlIGNvbnNpZGVyZWQgdG8gYmUgcmVxdWVzdGluZyBhIGZlZQorICAgICAgICAgICAgZm9yIHRoZSBhY3Qgb2YgaW5zdGFsbGF0aW9uIGFuZCBub3QgZm9yIHRoZSBzb2Z0d2FyZSB5b3UgYXJlCisgICAgICAgICAgICBpbnN0YWxsaW5nLgorICAgICAgICAgICsgVGhlIEF1dGhvciBtYXkgYWxzbyBncmFudCwgaW4gd3JpdGluZywgb3RoZXIgc3BlY2lmaWVkCisgICAgICAgICAgICBleGVtcHRpb25zIGZvciB5b3VyIHBhcnRpY3VsYXIgY29tbWVyY2lhbCBwdXJwb3NlIHRoYXQgZG8gbm90CisgICAgICAgICAgICBjb250cmF2ZW5lIHRoZSBzcGlyaXQgb2YgdGhpcyBsaWNlbnNlIG9yIGFueSBsaWNlbnNlIHRlcm1zCisgICAgICAgICAgICB0aGlzIHBhY2thZ2UgYWRkaXRpb25hbGx5IGNhcnJpZXMuCisgICAgICogSW4geW91ciBkZXJpdmF0aXZlIHdvcmtzIGJhc2VkIG9uIHRoaXMgcGFja2FnZSwgeW91IG1heSBjaG9vc2UgdG8KKyAgICAgICBvZmZlciB3YXJyYW50eSBzdXBwb3J0IG9yIGd1YXJhbnRlZXMgb2YgcGVyZm9ybWFuY2UuIFRoaXMgZG9lcyBub3QKKyAgICAgICBpbiBhbnkgd2F5IG1ha2UgdGhlIG9yaWdpbmFsIEF1dGhvciBsZWdhbGx5LCBmaW5hbmNpYWxseSBvciBpbiBhbnkKKyAgICAgICBvdGhlciByZXNwZWN0IGxpYWJsZSBmb3IgY2xhaW1zIGlzc3VlZCB1bmRlciB5b3VyIHdhcnJhbnR5IG9yCisgICAgICAgZ3VhcmFudGVlLCBhbmQgeW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIHRoZSBmdWxmaWxsbWVudCBvZgorICAgICAgIHlvdXIgdGVybXMgZXZlbiBpZiB0aGUgQXV0aG9yIG9mIHRoZSB3b3JrIHlvdSBoYXZlIGJhc2VkIHlvdXIgd29yaworICAgICAgIHVwb24gb2ZmZXJzIGhpcyBvciBoZXIgb3duLgorICAgICAqIEluIHlvdXIgZGVyaXZhdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGlzIHBhY2thZ2UsIHlvdSBtYXkgZnVydGhlcgorICAgICAgIHJlc3RyaWN0IHRoZSBhY2NlcHRhYmxlIHVzZXMgb2YgeW91ciBwYWNrYWdlIG9yIHNpdHVhdGlvbnMgaW4gd2hpY2gKKyAgICAgICBpdCBtYXkgYmUgZW1wbG95ZWQgYXMgbG9uZyBhcyB5b3UgY2xlYXJseSBzdGF0ZSB0aGF0IHlvdXIgdGVybXMKKyAgICAgICBhcHBseSBvbmx5IHRvIHlvdXIgZGVyaXZhdGl2ZSB3b3JrIGFuZCBub3QgdG8gdGhlIG9yaWdpbmFsCisgICAgICAgcmVmZXJlbmNlIGRpc3RyaWJ1dGlvbi4gSG93ZXZlciwgeW91IG1heSBub3QgY291bnRlcm1hbmQgb3IgaWdub3JlLAorICAgICAgIGRpcmVjdGx5IG9yIG90aGVyd2lzZSwgYW55IHJlc3RyaWN0aW9uIGFscmVhZHkgbWFkZSBpbiB0aGUKKyAgICAgICByZWZlcmVuY2UgZGlzdHJpYnV0aW9uJ3MgbGljZW5zZSwgaW5jbHVkaW5nIGluIHRoaXMgZG9jdW1lbnQKKyAgICAgICBpdHNlbGYsIGluIHNpbWlsYXIgZmFzaGlvbiB0byBvdGhlciBsaWNlbnNlcyBhbGxvd2luZyBjb21wYXRpYmxlCisgICAgICAgbGljZW5zZXMgdG8gY28tZ292ZXJuIGEgcGFydGljdWxhciBwYWNrYWdlJ3MgdXNlLgorCisgIFdoYXQgeW91IG11c3Qgbm90IGRvIHVuZGVyIHRoaXMgbGljZW5zZQorCisgICBSZW1lbWJlciB0aGF0IHRoZXNlIGxpbWl0cyBhcHBseSBvbmx5IHRvIHJlZGlzdHJpYnV0aW9uIG9mIGEgcmVmZXJlbmNlCisgICBkaXN0cmlidXRpb24sIG9yIHRvIGEgdHJ1ZSBkZXJpdmF0aXZlIHdvcmsuIElmIHlvdXIgcHJvamVjdCBkb2VzIG5vdAorICAgaW5jbHVkZSB0aGlzIHBhY2thZ2Ugb3IgY29kZSBiYXNlZCB1cG9uIGl0LCBldmVuIGlmIGl0IHJlcXVpcmVzIHRoaXMKKyAgIHBhY2thZ2UgdG8gZnVuY3Rpb24sIGl0IGlzIG5vdCBjb25zaWRlcmVkIHN1YmplY3QgdG8gdGhpcyBsaWNlbnNlIG9yCisgICB0aGVzZSByZXN0cmljdGlvbnMuCisgICAgICogWW91IG11c3Qgbm90IGNoYXJnZSBhIGZlZSBmb3IgcHVyY2hhc2Ugb3IgcmVudGFsIG9mIHRoaXMgcGFja2FnZSBvcgorICAgICAgIGFueSBkZXJpdmF0aXZlIHdvcmsgYmFzZWQgb24gdGhpcyBwYWNrYWdlLiBJdCBpcyBzdGlsbCBwb3NzaWJsZSB0bworICAgICAgIHVzZSB0aGlzIHBhY2thZ2UgaW4gYSBjb21tZXJjaWFsIGVudmlyb25tZW50LCBob3dldmVyIC0tIHNlZSBXaGF0CisgICAgICAgeW91IGFyZSBwZXJtaXR0ZWQgdG8gZG8gdW5kZXIgdGhpcyBsaWNlbnNlLgorICAgICAqIFlvdSBtdXN0IG5vdCBjb3VudGVybWFuZCBvciBpZ25vcmUsIGRpcmVjdGx5IG9yIG90aGVyd2lzZSwgdGhlCisgICAgICAgcmVzdHJpY3Rpb25zIGFscmVhZHkgZXh0YW50IGluIHRoaXMgcGFja2FnZSdzIGxpY2Vuc2UgaW4geW91cgorICAgICAgIGRlcml2YXRpdmUgd29yayBiYXNlZCBvbiBpdC4gQXMgYSBjb3JvbGxhcnksIHlvdSBtdXN0IG5vdCBwbGFjZQorICAgICAgIHlvdXIgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGEgc2Vjb25kYXJ5IGxpY2Vuc2Ugb3IgZGVzY3JpcHRpb24gb2YKKyAgICAgICB0ZXJtcyB0aGF0IGNvbmZsaWN0cyB3aXRoIGl0IChmb3IgZXhhbXBsZSwgdGhpcyBsaWNlbnNlIGlzIG5vdAorICAgICAgIGNvbXBhdGlibGUgd2l0aCB0aGUgR05VIFB1YmxpYyBMaWNlbnNlKS4KKyAgICAgKiBZb3UgbXVzdCBub3QgbGFiZWwgYW55IG1vZGlmaWVkIGRpc3RyaWJ1dGlvbiBvZiB0aGlzIHBhY2thZ2UgYXMgYQorICAgICAgIHJlZmVyZW5jZSBvciBvdGhlcndpc2Ugb2ZmaWNpYWwgZGlzdHJpYnV0aW9uIHdpdGhvdXQgdGhlIHBlcm1pc3Npb24KKyAgICAgICBvZiB0aGUgb3JpZ2luYWwgQXV0aG9yIG9yIEF1dGhvcnMuIFlvdSBtdXN0IGNsZWFybHkgc3BlY2lmeSB0aGF0CisgICAgICAgeW91ciBtb2RpZmllZCB3b3JrIGlzIGEgZGVyaXZhdGl2ZSB3b3JrLCBpbmNsdWRpbmcgYmluYXJ5LW9ubHkKKyAgICAgICByZWxlYXNlcyBpZiB0aGUgb3JpZ2luYWwgaW5jbHVkZWQgc291cmNlIGNvZGUgYW5kIHlvdSBkbyBub3QgZXZlbgorICAgICAgIGlmIHlvdSBkaWQgbm90IG1vZGlmeSB0aGUgc291cmNlIHByaW9yIHRvIGNvbXBpbGF0aW9uLgorCisgIFdoYXQgeW91IG11c3QgZG8gdW5kZXIgdGhpcyBsaWNlbnNlCisKKyAgICAgKiBZb3UgbXVzdCBhZ3JlZSB0byBhbGwgdGVybXMgc3BlY2lmaWVkIChhZ3JlZW1lbnQgdG8gd2hpY2ggaXMKKyAgICAgICB1bmNvbmRpdGlvbmFsbHkgc2lnbmlmaWVkIGJ5IHlvdXIgdXNhZ2UsIG1vZGlmaWNhdGlvbiBvcgorICAgICAgIHJlcHVycG9zaW5nIG9mIHRoaXMgcGFja2FnZSksIG9yIHRvIHJlbW92ZSB0aGUgcGFja2FnZSBmcm9tIHlvdXIKKyAgICAgICBjb21wdXRlciBhbmQgbm90IHVzZSBpdCBmdXJ0aGVyLgorICAgICAqIEluIHRoZSBhYnNlbmNlIG9mIGFueSBzcGVjaWZpYyBvZmZlciBmb3IgcmVkcmVzcyBvciBhc3Npc3RhbmNlCisgICAgICAgdW5kZXIgd2FycmFudHkgb3IgZ3VhcmFudGVlIG9mIHBlcmZvcm1hbmNlIHRoYXQgdGhlIEF1dGhvciBvZiB0aGlzCisgICAgICAgcGFja2FnZSBtaWdodCBtYWtlLCB5b3UgbXVzdCBhZ3JlZSB0byBhY2NlcHQgYW55IGFuZCBhbGwgbGlhYmlsaXR5CisgICAgICAgdGhhdCBtYXkgY29tZSBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBwYWNrYWdlLCBwcm9wZXIgb3IgaW1wcm9wZXIsCisgICAgICAgcmVhbCBvciBpbWFnaW5lZCwgYW5kIGNlcnRpZnkgd2l0aG91dCBjb25kaXRpb24gdGhhdCB5b3UgdXNlIHRoaXMKKyAgICAgICBwcm9kdWN0IGF0IHlvdXIgb3duIHJpc2sgd2l0aCBubyBndWFyYW50ZWUgb2YgZnVuY3Rpb24sCisgICAgICAgbWVyY2hhbnRhYmlsaXR5IG9yIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiBJZiBzdWNoIG9mZmVyCisgICAgICAgb2YgcmVkcmVzcyBvciBhc3Npc3RhbmNlIGlzIGV4dGVuZGVkLCBpdCBpcyBmdWxmaWxsYWJsZSBvbmx5IGJ5IHRoZQorICAgICAgIEF1dGhvciB3aG8gZXh0ZW5kZWQgdGhlIG9mZmVyLCB3aGljaCBtaWdodCBub3QgbmVjZXNzYXJpbHkgYmUgdGhpcworICAgICAgIEF1dGhvciwgbm9yIG1pZ2h0IGl0IGJlIHRoZSBBdXRob3JzIG9mIGFueSBwYWNrYWdlcyBpdCBtaWdodCBiZQorICAgICAgIGJhc2VkIHVwb24uCisgICAgICogSWYgeW91IGNob29zZSB0byBwdWJsaWNseSByZWRpc3RyaWJ1dGUgdGhpcyBwYWNrYWdlIG9yIGNyZWF0ZSBhCisgICAgICAgZGVyaXZhdGl2ZSB3b3JrIGJhc2VkIG9uIHRoaXMgcGFja2FnZSwgeW91IG11c3QgbWFrZSBpdCBhdmFpbGFibGUKKyAgICAgICB3aXRob3V0IGFueSBwdXJjaGFzZSBvciByZW50YWwgZmVlIG9mIGFueSBraW5kLgorICAgICAqIElmIHlvdSBjaG9vc2UgdG8gY3JlYXRlIGEgZGVyaXZhdGl2ZSB3b3JrIGJhc2VkIG9uIHRoaXMgcGFja2FnZSwKKyAgICAgICB5b3VyIGRlcml2YXRpdmUgd29yayBtdXN0IGJlIGNvcHlyaWdodGVkLCBhbmQgbXVzdCBiZSBnb3Zlcm5lZAorICAgICAgIHVuZGVyIChhdCBhIG1pbmltdW0pIHRoZSBvcmlnaW5hbCBwYWNrYWdlJ3MgbGljZW5zZSwgd2hpY2ggd2lsbAorICAgICAgIG5lY2Vzc2FyaWx5IGluY2x1ZGUgYWxsIHRlcm1zIG5vdGVkIGhlcmUuIEFzIHN1Y2gsIGlmIHlvdSBjaG9vc2UgdG8KKyAgICAgICBkaXN0cmlidXRlIHlvdXIgZGVyaXZhdGl2ZSB3b3JrLCB5b3UgbXVzdCBpbmNsdWRlIGEgaHVtYW4tcmVhZGFibGUKKyAgICAgICBsaWNlbnNlIGluIHlvdXIgZGlzdHJpYnV0aW9uIGNvbnRhaW5pbmcgYWxsIHJlc3RyaWN0aW9ucyBvZiB1c2UsCisgICAgICAgbmVjZXNzYXJpbHkgaW5jbHVkaW5nIHRoaXMgbGljZW5zZSwgYW5kIGFueSBhZGRpdGlvbmFsIHJlc3RyaWN0aW9ucworICAgICAgIHRoZSBBdXRob3IgaGFzIG1hbmRhdGVkIHRoYXQgZG8gbm90IGNvbnRyYXZlbmUgdGhpcyBsaWNlbnNlIHdoaWNoCisgICAgICAgeW91IGFuZCB1c2VycyBvZiB5b3VyIGRlcml2YXRpdmUgd29yayBtdXN0IGFsc28gaG9ub3VyLgorICAgICAqIElmIHlvdSBjaG9vc2UgdG8gY3JlYXRlIGFuZCBkaXN0cmlidXRlIGEgZGVyaXZhdGl2ZSB3b3JrIGJhc2VkIG9uCisgICAgICAgdGhpcyBwYWNrYWdlLCB5b3VyIGRlcml2YXRpdmUgd29yayBtdXN0IGNsZWFybHkgbWFrZSByZWZlcmVuY2UgdG8KKyAgICAgICB0aGlzIHBhY2thZ2UsIGFueSBvdGhlciBwYWNrYWdlcyB5b3VyIHdvcmsgb3IgdGhlIG9yaWdpbmFsIHdvcmsKKyAgICAgICBtaWdodCBiZSBiYXNlZCBvbiwgYW5kIGFsbCBhcHBsaWNhYmxlIGNvcHlyaWdodHMsIGVpdGhlciBpbiB5b3VyCisgICAgICAgZG9jdW1lbnRhdGlvbiwgeW91ciB3b3JrJ3Mgc3RhbmRhcmQgaHVtYW4tcmVhZGFibGUgb3V0cHV0LCBvciBib3RoLgorICAgICAgIEEgc3VnZ2VzdGVkIG1ldGhvZCBtaWdodCBiZQorCisgICAgIENvbnRhaW5zIG9yIGlzIGJhc2VkIG9uIHRoZSBGb28gc29mdHdhcmUgcGFja2FnZS4KKyAgICAgQ29weXJpZ2h0IChDKSAyMTEyIEQuIE9yaWdpbmFsIEF1dGhvci4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgICAgaHR0cDovL3RoZWlyLndlYi5zaXRlLmludmFsaWQvCisKKyAgQWRkaXRpb25hbCBub3RlcworCisgICBFbmZvcmNlbWVudCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIEF1dGhvci4gSG93ZXZlciwgdmlvbGF0aW9uIG9mCisgICB0aGlzIGxpY2Vuc2UgbWF5IHN1YmplY3QgeW91IHRvIGNyaW1pbmFsIGFuZCBjaXZpbCBwZW5hbHRpZXMgZGVwZW5kaW5nCisgICBvbiB5b3VyIGNvdW50cnkuCisKKyAgIFRoaXMgcGFja2FnZSBpcyBib3VuZCBieSB0aGUgdmVyc2lvbiBvZiBsaWNlbnNlIHRoYXQgYWNjb21wYW5pZXMgaXQuCisgICBGdXR1cmUgb2ZmaWNpYWwgdmVyc2lvbnMgb2YgYSBwYXJ0aWN1bGFyIHBhY2thZ2UgbWF5IHVzZSBhIG1vcmUgdXBkYXRlZAorICAgbGljZW5zZSwgYW5kIHlvdSBzaG91bGQgYWx3YXlzIHJldmlldyB0aGUgbGljZW5zZSBiZWZvcmUgdXNlLiBUaGlzCisgICBsaWNlbnNlJ3MgbW9zdCBjdXJyZW50IHZlcnNpb24gaXMgYWx3YXlzIGF2YWlsYWJsZSBmcm9tIHRoZSBmb2xsb3dpbmcKKyAgIGxvY2F0aW9uczoKKworICAgICBbMV1odHRwOi8vd3d3LmZsb29kZ2FwLmNvbS9zb2Z0d2FyZS9mZnNsLworICAgICBbMl1nb3BoZXI6Ly9nb3BoZXIuZmxvb2RnYXAuY29tLzEvZmZzbC8KKworICAgVGhpcyBsaWNlbnNlIGlzIHZlcnNpb24gMSwgZGF0ZWQgMTkgTm92ZW1iZXIgMjAwNi4KKworICAgVGhpcyBsaWNlbnNlIGlzIGNvcHlyaWdodCDCqSAyMDA2IENhbWVyb24gS2Fpc2VyLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICAgVGhlIHRleHQgb2YgdGhpcyBsaWNlbnNlIGlzIGF2YWlsYWJsZSBmb3IgcmUtdXNlIGFuZCByZS1kaXN0cmlidXRpb24KKyAgIHVuZGVyIHRoZSBDcmVhdGl2ZSBDb21tb25zLiBUaGUgdXNlIG9mIHRoZSB0ZXJtICJGbG9vZGdhcCBGcmVlIFNvZnR3YXJlCisgICBMaWNlbnNlIiBkb2VzIG5vdCBpbXBseSBlbmRvcnNlbWVudCBvZiBwYWNrYWdlcyB1c2luZyB0aGlzIGxpY2Vuc2UgYnkKKyAgIEZsb29kZ2FwIFN5c3RlbXMgb3IgYnkgQ2FtZXJvbiBLYWlzZXIuIE1vZGlmaWVkIGxpY2Vuc2VzIHVzaW5nIHBvcnRpb25zCisgICBvZiB0aGVzZSB0ZXJtcyBtYXkgcmVmZXIgdG8gdGhlbXNlbHZlcyBhcyBtb2RpZmllZCBGRlNMLCB3aXRoIHRoZQorICAgcHJvdmlzbyB0aGF0IHRoZWlyIG1vZGlmaWNhdGlvbnMgYmUgY2xlYXJseSBtYXJrZWQsIGFzIHNwZWNpZmllZCBiZWxvdzoKKworICAgICAgICAgICAgICBbM11DcmVhdGl2ZSBDb21tb25zIExpY2Vuc2UtWzRdW3NvbWVyaWdodHMyMC5wbmddCisgICAgICAgICAgICAgIFRoaXMgd29yayBpcyBsaWNlbnNlZCB1bmRlciBhIFs1XUNyZWF0aXZlIENvbW1vbnMKKyAgICAgICAgICAgICAgICAgICAgIEF0dHJpYnV0aW9uLVNoYXJlQWxpa2UgMi41IExpY2Vuc2UuCisKKyAgIE9ubHkgdGhlIHRleHQgb2YgdGhpcyBsaWNlbnNlLCBhbmQgbm90IHByb2dyYW1zIGNvdmVyZWQgYnkgdGhpcworICAgbGljZW5zZSwgaXMgc28gb2ZmZXJlZCB1bmRlciBDcmVhdGl2ZSBDb21tb25zLgorCitSZWZlcmVuY2VzCisKKyAgIDEuIGh0dHA6Ly93d3cuZmxvb2RnYXAuY29tL3NvZnR3YXJlL2Zmc2wvCisgICAyLiBnb3BoZXI6Ly9nb3BoZXIuZmxvb2RnYXAuY29tLzEvZmZzbC8KKyAgIDMuIGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL2J5LXNhLzIuNS8KKyAgIDQuIGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2ltYWdlcy9wdWJsaWMvc29tZXJpZ2h0czIwLnBuZworICAgNS4gaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvYnktc2EvMi41LwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvRklQTC0xLjAgYi9saWNlbnNlcy9GSVBMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzlmYjRkCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvRklQTC0xLjAKQEAgLTAsMCArMSwxNDIgQEAKK0ZyZWVJbWFnZSBQdWJsaWMgTGljZW5zZSAtIFZlcnNpb24gMS4wCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworMS4gRGVmaW5pdGlvbnMuCisKKzEuMS4gIkNvbnRyaWJ1dG9yIiBtZWFucyBlYWNoIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8gdGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisKKzEuMi4gIkNvbnRyaWJ1dG9yIFZlcnNpb24iIG1lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgcHJpb3IgTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEgQ29udHJpYnV0b3IsIGFuZCB0aGUgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4KKworMS4zLiAiQ292ZXJlZCBDb2RlIiBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIG9yIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlIGluY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLgorCisxLjQuICJFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20iIG1lYW5zIGEgbWVjaGFuaXNtIGdlbmVyYWxseSBhY2NlcHRlZCBpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYyB0cmFuc2ZlciBvZiBkYXRhLgorCisxLjUuICJFeGVjdXRhYmxlIiBtZWFucyBDb3ZlcmVkIENvZGUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UgQ29kZS4KKworMS42LiAiSW5pdGlhbCBEZXZlbG9wZXIiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSBpZGVudGlmaWVkIGFzIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQS4KKworMS43LiAiTGFyZ2VyIFdvcmsiIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKzEuOC4gIkxpY2Vuc2UiIG1lYW5zIHRoaXMgZG9jdW1lbnQuCisKKzEuOS4gIk1vZGlmaWNhdGlvbnMiIG1lYW5zIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4gV2hlbiBDb3ZlcmVkIENvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEKK01vZGlmaWNhdGlvbiBpczoKKworQS4gQW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KKworQi4gQW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KKworMS4xMC4gIk9yaWdpbmFsIENvZGUiIG1lYW5zIFNvdXJjZSBDb2RlIG9mIGNvbXB1dGVyIHNvZnR3YXJlIGNvZGUgd2hpY2ggaXMgZGVzY3JpYmVkIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBIGFzIE9yaWdpbmFsIENvZGUsIGFuZCB3aGljaCwgYXQgdGhlIHRpbWUgb2YgaXRzIHJlbGVhc2UgdW5kZXIgdGhpcyBMaWNlbnNlIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UuCisKKzEuMTEuICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBDb3ZlcmVkIENvZGUgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sCitjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIEV4ZWN1dGFibGUsIG9yIGEgbGlzdCBvZiBzb3VyY2UgY29kZSBkaWZmZXJlbnRpYWwgY29tcGFyaXNvbnMgYWdhaW5zdCBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW5vdGhlciB3ZWxsIGtub3duLCBhdmFpbGFibGUgQ292ZXJlZCBDb2RlIG9mIHRoZSBDb250cmlidXRvcidzIGNob2ljZS4gVGhlIFNvdXJjZSBDb2RlIGNhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwgcHJvdmlkZWQgdGhlIGFwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24gb3IgZGUtYXJjaGl2aW5nIHNvZnR3YXJlIGlzIHdpZGVseSBhdmFpbGFibGUgZm9yIG5vIGNoYXJnZS4KKworMS4xMi4gIllvdSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBpc3N1ZWQgdW5kZXIgU2VjdGlvbiA2LjEuIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuIEZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQorZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisyLiBTb3VyY2UgQ29kZSBMaWNlbnNlLgorCisyLjEuIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4KK1RoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXM6CisKKyhhKSB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSB3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKworKGIpIHVuZGVyIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5IEluaXRpYWwgRGV2ZWxvcGVyLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSBhbmQgc2VsbCAoIlV0aWxpemUiKSB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZiksIGJ1dCBzb2xlbHkgdG8gdGhlIGV4dGVudCB0aGF0Cithbnkgc3VjaCBwYXRlbnQgaXMgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gZW5hYmxlIFlvdSB0byBVdGlsaXplIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSBhbmQgbm90IHRvIGFueSBncmVhdGVyIGV4dGVudCB0aGF0IG1heSBiZSBuZWNlc3NhcnkgdG8gVXRpbGl6ZSBmdXJ0aGVyIE1vZGlmaWNhdGlvbnMgb3IKK2NvbWJpbmF0aW9ucy4KKworMi4yLiBDb250cmlidXRvciBHcmFudC4KK0VhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zOgorCisoYSkgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIGFzIENvdmVyZWQgQ29kZSBvciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorCisoYikgdW5kZXIgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgQ29udHJpYnV0b3IsIHRvIFV0aWxpemUgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIHRoZXJlb2YpLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgc3VjaCBwYXRlbnQgaXMgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gZW5hYmxlIFlvdSB0byBVdGlsaXplIHRoZSBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyB0aGVyZW9mKSwgYW5kIG5vdCB0byBhbnkgZ3JlYXRlciBleHRlbnQgdGhhdAorbWF5IGJlIG5lY2Vzc2FyeSB0byBVdGlsaXplIGZ1cnRoZXIgTW9kaWZpY2F0aW9ucyBvciBjb21iaW5hdGlvbnMuCisKKzMuIERpc3RyaWJ1dGlvbiBPYmxpZ2F0aW9ucy4KKworMy4xLiBBcHBsaWNhdGlvbiBvZiBMaWNlbnNlLgorVGhlIE1vZGlmaWNhdGlvbnMgd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBTZWN0aW9uIDIuMi4gVGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG1heSBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcmVsZWFzZWQgdW5kZXIgU2VjdGlvbiA2LjEsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBZb3UgZGlzdHJpYnV0ZS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUgdmVyc2lvbiB0aGF0IGFsdGVycyBvcgorcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzJyByaWdodHMgaGVyZXVuZGVyLiBIb3dldmVyLCBZb3UgbWF5IGluY2x1ZGUgYW4gYWRkaXRpb25hbCBkb2N1bWVudCBvZmZlcmluZyB0aGUgYWRkaXRpb25hbCByaWdodHMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy41LgorCiszLjIuIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4KK0FueSBNb2RpZmljYXRpb24gd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIGluIFNvdXJjZSBDb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBlaXRoZXIgb24gdGhlIHNhbWUgbWVkaWEgYXMgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHZpYSBhbiBhY2NlcHRlZCBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gdG8gYW55b25lIHRvIHdob20geW91IG1hZGUgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIGF2YWlsYWJsZTsgYW5kIGlmIG1hZGUgYXZhaWxhYmxlIHZpYSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20sIG11c3QgcmVtYWluIGF2YWlsYWJsZSBmb3IgYXQgbGVhc3QgdHdlbHZlICgxMikgbW9udGhzIGFmdGVyIHRoZSBkYXRlIGl0IGluaXRpYWxseSBiZWNhbWUgYXZhaWxhYmxlLCBvciBhdCBsZWFzdCBzaXggKDYpIG1vbnRocyBhZnRlciBhIHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGF0IHBhcnRpY3VsYXIgTW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUgYXZhaWxhYmxlIHRvIHN1Y2ggcmVjaXBpZW50cy4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiByZW1haW5zIGF2YWlsYWJsZSBldmVuIGlmIHRoZSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gaXMgbWFpbnRhaW5lZCBieSBhIHRoaXJkIHBhcnR5LgorCiszLjMuIERlc2NyaXB0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCitZb3UgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBDb2RlIHRvIHdoaWNoIHlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4gYSBmaWxlIGRvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIFlvdSBtYWRlIHRvIGNyZWF0ZSB0aGF0IENvdmVyZWQgQ29kZSBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdCB0aGUgTW9kaWZpY2F0aW9uIGlzIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwgQ29kZSBwcm92aWRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGluY2x1ZGluZyB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gKGEpIHRoZSBTb3VyY2UgQ29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gaW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZSBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBDb3ZlcmVkIENvZGUuCisKKzMuNC4gSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnMKKworKGEpIFRoaXJkIFBhcnR5IENsYWltcy4KK0lmIFlvdSBoYXZlIGtub3dsZWRnZSB0aGF0IGEgcGFydHkgY2xhaW1zIGFuIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodCBpbiBwYXJ0aWN1bGFyIGZ1bmN0aW9uYWxpdHkgb3IgY29kZSAob3IgaXRzIHV0aWxpemF0aW9uIHVuZGVyIHRoaXMgTGljZW5zZSksIHlvdSBtdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0aW9uIHRpdGxlZCAiTEVHQUwiIHdoaWNoIGRlc2NyaWJlcyB0aGUgY2xhaW0gYW5kIHRoZSBwYXJ0eSBtYWtpbmcgdGhlIGNsYWltIGluIHN1ZmZpY2llbnQgZGV0YWlsIHRoYXQgYSByZWNpcGllbnQgd2lsbCBrbm93IHdob20gdG8gY29udGFjdC4gSWYgeW91IG9idGFpbiBzdWNoIGtub3dsZWRnZSBhZnRlciBZb3UgbWFrZSBZb3VyIE1vZGlmaWNhdGlvbiBhdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4yLCBZb3Ugc2hhbGwgcHJvbXB0bHkgbW9kaWZ5IHRoZSBMRUdBTCBmaWxlIGluIGFsbCBjb3BpZXMgWW91IG1ha2UKK2F2YWlsYWJsZSB0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlIG90aGVyIHN0ZXBzIChzdWNoIGFzIG5vdGlmeWluZyBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3RzIG9yIG5ld3Nncm91cHMpIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gdGhvc2Ugd2hvIHJlY2VpdmVkIHRoZSBDb3ZlcmVkIENvZGUgdGhhdCBuZXcga25vd2xlZGdlIGhhcyBiZWVuIG9idGFpbmVkLgorCisoYikgQ29udHJpYnV0b3IgQVBJcy4KK0lmIFlvdXIgTW9kaWZpY2F0aW9uIGlzIGFuIGFwcGxpY2F0aW9uIHByb2dyYW1taW5nIGludGVyZmFjZSBhbmQgWW91IG93biBvciBjb250cm9sIHBhdGVudHMgd2hpY2ggYXJlIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCB0aGF0IEFQSSwgeW91IG11c3QgYWxzbyBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIExFR0FMIGZpbGUuCisKKzMuNS4gUmVxdWlyZWQgTm90aWNlcy4KK1lvdSBtdXN0IGR1cGxpY2F0ZSB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlLCBhbmQgdGhpcyBMaWNlbnNlIGluIGFueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgU291cmNlIENvZGUsIHdoZXJlIFlvdSBkZXNjcmliZSByZWNpcGllbnRzJyByaWdodHMgcmVsYXRpbmcgdG8gQ292ZXJlZCBDb2RlLiBJZiBZb3UgY3JlYXRlZCBvbmUgb3IgbW9yZSBNb2RpZmljYXRpb24ocyksIFlvdSBtYXkgYWRkIHlvdXIgbmFtZSBhcyBhIENvbnRyaWJ1dG9yIHRvIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBzdWNoIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgU291cmNlIENvZGUgZmlsZSBkdWUgdG8gaXRzCitzdHJ1Y3R1cmUsIHRoZW4geW91IG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhIGxvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5IGZpbGUpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIG5vdGljZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYW4gYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvcgorbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mCit3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSB0ZXJtcyBZb3Ugb2ZmZXIuCisKKzMuNi4gRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgVmVyc2lvbnMuCitZb3UgbWF5IGRpc3RyaWJ1dGUgQ292ZXJlZCBDb2RlIGluIEV4ZWN1dGFibGUgZm9ybSBvbmx5IGlmIHRoZSByZXF1aXJlbWVudHMgb2YgU2VjdGlvbiAzLjEtMy41IGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgQ292ZXJlZCBDb2RlLCBhbmQgaWYgWW91IGluY2x1ZGUgYSBub3RpY2Ugc3RhdGluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgWW91IGhhdmUgZnVsZmlsbGVkIHRoZSBvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uIDMuMi4gVGhlIG5vdGljZSBtdXN0IGJlIGNvbnNwaWN1b3VzbHkgaW5jbHVkZWQgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24sIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvciBjb2xsYXRlcmFsIGluIHdoaWNoIFlvdQorZGVzY3JpYmUgcmVjaXBpZW50cycgcmlnaHRzIHJlbGF0aW5nIHRvIHRoZSBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSB1bmRlciBhIGxpY2Vuc2Ugb2YgWW91ciBjaG9pY2UsIHdoaWNoIG1heSBjb250YWluIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSwKK3Byb3ZpZGVkIHRoYXQgWW91IGFyZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhhdCB0aGUgbGljZW5zZSBmb3IgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnQncyByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UuIElmIFlvdSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2ggdGVybXMgWW91IG9mZmVyLgorCiszLjcuIExhcmdlciBXb3Jrcy4KK1lvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgQ29kZS4KKworNC4gSW5hYmlsaXR5IHRvIENvbXBseSBEdWUgdG8gU3RhdHV0ZSBvciBSZWd1bGF0aW9uLgorCitJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciBZb3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBDb3ZlcmVkIENvZGUgZHVlIHRvIHN0YXR1dGUgb3IgcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikgZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUgY29kZSB0aGV5IGFmZmVjdC4gU3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBMRUdBTCBmaWxlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNCBhbmQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBTb3VyY2UgQ29kZS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEgcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCBpdC4KKworNS4gQXBwbGljYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorCitUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIHRoZSBJbml0aWFsIERldmVsb3BlciBoYXMgYXR0YWNoZWQgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEsIGFuZCB0byByZWxhdGVkIENvdmVyZWQgQ29kZS4KKworNi4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuCisKKzYuMS4gTmV3IFZlcnNpb25zLgorRmxvcmlzIHZhbiBkZW4gQmVyZyBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuCisKKzYuMi4gRWZmZWN0IG9mIE5ldyBWZXJzaW9ucy4KK09uY2UgQ292ZXJlZCBDb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSwgWW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggQ292ZXJlZCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHB1Ymxpc2hlZCBieSBGbG9yaXMgdmFuIGRlbiBCZXJnCitObyBvbmUgb3RoZXIgdGhhbiBGbG9yaXMgdmFuIGRlbiBCZXJnIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIENvdmVyZWQgQ29kZSBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KKworNi4zLiBEZXJpdmF0aXZlIFdvcmtzLgorSWYgeW91IGNyZWF0ZSBvciB1c2UgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSAod2hpY2ggeW91IG1heSBvbmx5IGRvIGluIG9yZGVyIHRvIGFwcGx5IGl0IHRvIGNvZGUgd2hpY2ggaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSksIHlvdSBtdXN0IChhKSByZW5hbWUgWW91ciBsaWNlbnNlIHNvIHRoYXQgdGhlIHBocmFzZXMgIkZyZWVJbWFnZSIsIGBGcmVlSW1hZ2UgUHVibGljIExpY2Vuc2UiLCAiRklQTCIsIG9yIGFueSBjb25mdXNpbmdseSBzaW1pbGFyIHBocmFzZSBkbyBub3QgYXBwZWFyIGFueXdoZXJlIGluIHlvdXIgbGljZW5zZSBhbmQgKGIpIG90aGVyd2lzZSBtYWtlIGl0IGNsZWFyIHRoYXQgeW91ciB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlIGNvbnRhaW5zIHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoZSBGcmVlSW1hZ2UgUHVibGljIExpY2Vuc2UuIChGaWxsaW5nIGluIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciwgT3JpZ2luYWwgQ29kZSBvciBDb250cmlidXRvciBpbiB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEgc2hhbGwgbm90IG9mIHRoZW1zZWx2ZXMgYmUgZGVlbWVkIHRvIGJlIG1vZGlmaWNhdGlvbnMgb2YgdGhpcyBMaWNlbnNlLikKKworNy4gRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS4KKworQ09WRVJFRCBDT0RFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIENPVkVSRUQgQ09ERSBJUyBGUkVFIE9GIERFRkVDVFMsIE1FUkNIQU5UQUJMRSwgRklUIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tSU5GUklOR0lORy4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgQ09WRVJFRCBDT0RFIElTIFdJVEggWU9VLiBTSE9VTEQgQU5ZIENPVkVSRUQgQ09ERSBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsIFlPVSAoTk9UIFRIRSBJTklUSUFMIERFVkVMT1BFUiBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUgQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRiBBTlkgQ09WRVJFRCBDT0RFIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIERJU0NMQUlNRVIuCisKKzguIFRFUk1JTkFUSU9OLgorCitUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gMzAgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaCBhcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUuCisKKzkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLgorCitVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBUSEUgSU5JVElBTCBERVZFTE9QRVIsIEFOWSBPVEhFUiBDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIENPVkVSRUQgQ09ERSwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBZT1UgT1IgQU5ZIE9USEVSIFBFUlNPTiBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBBUlRZIFNIQUxMIEhBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZJ1MgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXIFBST0hJQklUUyBTVUNIIExJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFCitFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhBVCBFWENMVVNJT04gQU5EIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzEwLiBVLlMuIEdPVkVSTk1FTlQgRU5EIFVTRVJTLgorCitUaGUgQ292ZXJlZCBDb2RlIGlzIGEgImNvbW1lcmNpYWwgaXRlbSwiIGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluIDQ4IEMuRi5SLiAyLjEwMSAoT2N0LiAxOTk1KSwgY29uc2lzdGluZyBvZiAiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSIgYW5kICJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIGRvY3VtZW50YXRpb24sIiBhcyBzdWNoIHRlcm1zIGFyZSB1c2VkIGluIDQ4IEMuRi5SLiAxMi4yMTIgKFNlcHQuIDE5OTUpLiBDb25zaXN0ZW50IHdpdGggNDggQy5GLlIuIDEyLjIxMiBhbmQgNDggQy5GLlIuIDIyNy43MjAyLTEgdGhyb3VnaCAyMjcuNzIwMi00IChKdW5lIDE5OTUpLCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIENvdmVyZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIHNldCBmb3J0aCBoZXJlaW4uCisKKzExLiBNSVNDRUxMQU5FT1VTLgorCitUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IER1dGNoIGxhdyBwcm92aXNpb25zIChleGNlcHQgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdywgaWYgYW55LCBwcm92aWRlcyBvdGhlcndpc2UpLCBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBXaXRoIHJlc3BlY3QgdG8gZGlzcHV0ZXMgaW4gd2hpY2ggYXQgbGVhc3Qgb25lIHBhcnR5IGlzIGEgY2l0aXplbiBvZiwgb3IgYW4gZW50aXR5IGNoYXJ0ZXJlZCBvciByZWdpc3RlcmVkIHRvIGRvIGJ1c2luZXNzIGluLCB0aGUgVGhlIE5ldGhlcmxhbmRzOiAoYSkgdW5sZXNzIG90aGVyd2lzZSBhZ3JlZWQgaW4gd3JpdGluZywgYWxsIGRpc3B1dGVzIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSAoZXhjZXB0aW5nIGFueSBkaXNwdXRlIHJlbGF0aW5nIHRvIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMpIHNoYWxsIGJlIHN1YmplY3QgdG8gZmluYWwgYW5kIGJpbmRpbmcgYXJiaXRyYXRpb24sIHdpdGggdGhlIGxvc2luZyBwYXJ0eSBwYXlpbmcgYWxsIGNvc3RzIG9mIGFyYml0cmF0aW9uOyAoYikgYW55IGFyYml0cmF0aW9uIHJlbGF0aW5nIHRvIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGhlbGQgaW4gQWxtZWxvLCBUaGUgTmV0aGVybGFuZHM7IGFuZCAoYykgYW55IGxpdGlnYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBjb3VydCBvZiBBbG1lbG8sIFRoZSBOZXRoZXJsYW5kcyB3aXRoIHRoZSBsb3NpbmcgcGFydHkgcmVzcG9uc2libGUgZm9yIGNvc3RzLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBjb3VydCBjb3N0cyBhbmQgcmVhc29uYWJsZSBhdHRvcm5leXMgZmVlcyBhbmQgZXhwZW5zZXMuIEFueSBsYXcgb3IgcmVndWxhdGlvbiB3aGljaCBwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHNoYWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuCisKKzEyLiBSRVNQT05TSUJJTElUWSBGT1IgQ0xBSU1TLgorCitFeGNlcHQgaW4gY2FzZXMgd2hlcmUgYW5vdGhlciBDb250cmlidXRvciBoYXMgZmFpbGVkIHRvIGNvbXBseSB3aXRoIFNlY3Rpb24gMy40LCBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIG91dCBvZiBZb3VyIHV0aWxpemF0aW9uIG9mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UsIGJhc2VkCitvbiB0aGUgbnVtYmVyIG9mIGNvcGllcyBvZiBDb3ZlcmVkIENvZGUgeW91IG1hZGUgYXZhaWxhYmxlLCB0aGUgcmV2ZW51ZXMgeW91IHJlY2VpdmVkIGZyb20gdXRpbGl6aW5nIHN1Y2ggcmlnaHRzLCBhbmQgb3RoZXIgcmVsZXZhbnQgZmFjdG9ycy4gWW91IGFncmVlIHRvIHdvcmsgd2l0aCBhZmZlY3RlZCBwYXJ0aWVzIHRvIGRpc3RyaWJ1dGUKK3Jlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcy4KKworRVhISUJJVCBBLgorCisiVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgRnJlZUltYWdlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL2hvbWUud3hzLm5sL35mbHZkYmVyZy9mcmVlaW1hZ2UtbGljZW5zZS50eHQKKworU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuIApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0ZMRVggYi9saWNlbnNlcy9GTEVYCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNDFmMDIKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9GTEVYCkBAIC0wLDAgKzEsMzggQEAKK0ZsZXggY2FycmllcyB0aGUgY29weXJpZ2h0IHVzZWQgZm9yIEJTRCBzb2Z0d2FyZSwgc2xpZ2h0bHkgbW9kaWZpZWQKK2JlY2F1c2UgaXQgb3JpZ2luYXRlZCBhdCB0aGUgTGF3cmVuY2UgQmVya2VsZXkgKG5vdCBMaXZlcm1vcmUhKSBMYWJvcmF0b3J5LAord2hpY2ggb3BlcmF0ZXMgdW5kZXIgYSBjb250cmFjdCB3aXRoIHRoZSBEZXBhcnRtZW50IG9mIEVuZXJneToKKworCUNvcHlyaWdodCAoYykgMTk5MCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorCUFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKwlUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisJVmVybiBQYXhzb24uCisKKwlUaGUgVW5pdGVkIFN0YXRlcyBHb3Zlcm5tZW50IGhhcyByaWdodHMgaW4gdGhpcyB3b3JrIHB1cnN1YW50CisJdG8gY29udHJhY3Qgbm8uIERFLUFDMDMtNzZTRjAwMDk4IGJldHdlZW4gdGhlIFVuaXRlZCBTdGF0ZXMKKwlEZXBhcnRtZW50IG9mIEVuZXJneSBhbmQgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKworCVJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMgd2l0aCBvciB3aXRob3V0CisJbW9kaWZpY2F0aW9uIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdDogKDEpIHNvdXJjZSBkaXN0cmlidXRpb25zCisJcmV0YWluIHRoaXMgZW50aXJlIGNvcHlyaWdodCBub3RpY2UgYW5kIGNvbW1lbnQsIGFuZCAoMikKKwlkaXN0cmlidXRpb25zIGluY2x1ZGluZyBiaW5hcmllcyBkaXNwbGF5IHRoZSBmb2xsb3dpbmcKKwlhY2tub3dsZWRnZW1lbnQ6IGBgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKKwlVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzJycgaW4gdGhlCisJZG9jdW1lbnRhdGlvbiBvciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uIGFuZAorCWluIGFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworCXNvZnR3YXJlLiAgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cworCWNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorCWZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworCVRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisJSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKwlXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisJUFVSUE9TRS4KKworVGhpcyBiYXNpY2FsbHkgc2F5cyAiZG8gd2hhdGV2ZXIgeW91IHBsZWFzZSB3aXRoIHRoaXMgc29mdHdhcmUgZXhjZXB0CityZW1vdmUgdGhpcyBub3RpY2Ugb3IgdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIFVuaXZlcnNpdHkncyAob3IgdGhlIGZsZXgKK2F1dGhvcnMnKSBuYW1lIi4KKworTm90ZSB0aGF0IHRoZSAiZmxleC5za2wiIHNjYW5uZXIgc2tlbGV0b24gY2FycmllcyBubyBjb3B5cmlnaHQgbm90aWNlLgorWW91IGFyZSBmcmVlIHRvIGRvIHdoYXRldmVyIHlvdSBwbGVhc2Ugd2l0aCBzY2FubmVycyBnZW5lcmF0ZWQgdXNpbmcgZmxleDsKK2ZvciB0aGVtLCB5b3UgYXJlIG5vdCBldmVuIGJvdW5kIGJ5IHRoZSBhYm92ZSBjb3B5cmlnaHQuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9GTFRLIGIvbGljZW5zZXMvRkxUSwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOGQxZmEwCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvRkxUSwpAQCAtMCwwICsxLDQ0IEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZMVEsgTGljZW5zZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVjZW1iZXIgMTEsIDIwMDEKKworVGhlIEZMVEsgbGlicmFyeSBhbmQgaW5jbHVkZWQgcHJvZ3JhbXMgYXJlIHByb3ZpZGVkIHVuZGVyIHRoZSB0ZXJtcworb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKExHUEwpIHdpdGggdGhlIGZvbGxvd2luZworZXhjZXB0aW9uczoKKworICAgIDEuIE1vZGlmaWNhdGlvbnMgdG8gdGhlIEZMVEsgY29uZmlndXJlIHNjcmlwdCwgY29uZmlnCisgICAgICAgaGVhZGVyIGZpbGUsIGFuZCBtYWtlZmlsZXMgYnkgdGhlbXNlbHZlcyB0byBzdXBwb3J0CisgICAgICAgYSBzcGVjaWZpYyBwbGF0Zm9ybSBkbyBub3QgY29uc3RpdHV0ZSBhIG1vZGlmaWVkIG9yCisgICAgICAgZGVyaXZhdGl2ZSB3b3JrLgorCisgICAgICAgVGhlIGF1dGhvcnMgZG8gcmVxdWVzdCB0aGF0IHN1Y2ggbW9kaWZpY2F0aW9ucyBiZQorICAgICAgIGNvbnRyaWJ1dGVkIHRvIHRoZSBGTFRLIHByb2plY3QgLSBzZW5kIGFsbAorICAgICAgIGNvbnRyaWJ1dGlvbnMgdG8gImZsdGstYnVnc0BmbHRrLm9yZyIuCisKKyAgICAyLiBXaWRnZXRzIHRoYXQgYXJlIHN1YmNsYXNzZWQgZnJvbSBGTFRLIHdpZGdldHMgZG8gbm90CisgICAgICAgY29uc3RpdHV0ZSBhIGRlcml2YXRpdmUgd29yay4KKworICAgIDMuIFN0YXRpYyBsaW5raW5nIG9mIGFwcGxpY2F0aW9ucyBhbmQgd2lkZ2V0cyB0byB0aGUKKyAgICAgICBGTFRLIGxpYnJhcnkgZG9lcyBub3QgY29uc3RpdHV0ZSBhIGRlcml2YXRpdmUgd29yaworICAgICAgIGFuZCBkb2VzIG5vdCByZXF1aXJlIHRoZSBhdXRob3IgdG8gcHJvdmlkZSBzb3VyY2UKKyAgICAgICBjb2RlIGZvciB0aGUgYXBwbGljYXRpb24gb3Igd2lkZ2V0LCB1c2UgdGhlIHNoYXJlZAorICAgICAgIEZMVEsgbGlicmFyaWVzLCBvciBsaW5rIHRoZWlyIGFwcGxpY2F0aW9ucyBvcgorICAgICAgIHdpZGdldHMgYWdhaW5zdCBhIHVzZXItc3VwcGxpZWQgdmVyc2lvbiBvZiBGTFRLLgorCisgICAgICAgSWYgeW91IGxpbmsgdGhlIGFwcGxpY2F0aW9uIG9yIHdpZGdldCB0byBhIG1vZGlmaWVkCisgICAgICAgdmVyc2lvbiBvZiBGTFRLLCB0aGVuIHRoZSBjaGFuZ2VzIHRvIEZMVEsgbXVzdCBiZQorICAgICAgIHByb3ZpZGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTEdQTCBpbiBzZWN0aW9ucworICAgICAgIDEsIDIsIGFuZCA0LgorCisgICAgNC4gWW91IGRvIG5vdCBoYXZlIHRvIHByb3ZpZGUgYSBjb3B5IG9mIHRoZSBGTFRLIGxpY2Vuc2UKKyAgICAgICB3aXRoIHByb2dyYW1zIHRoYXQgYXJlIGxpbmtlZCB0byB0aGUgRkxUSyBsaWJyYXJ5LCBub3IKKyAgICAgICBkbyB5b3UgaGF2ZSB0byBpZGVudGlmeSB0aGUgRkxUSyBsaWNlbnNlIGluIHlvdXIKKyAgICAgICBwcm9ncmFtIG9yIGRvY3VtZW50YXRpb24gYXMgcmVxdWlyZWQgYnkgc2VjdGlvbiA2CisgICAgICAgb2YgdGhlIExHUEwuCisKKyAgICAgICBIb3dldmVyLCBwcm9ncmFtcyBtdXN0IHN0aWxsIGlkZW50aWZ5IHRoZWlyIHVzZSBvZiBGTFRLLgorICAgICAgIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzdGF0ZW1lbnQgY2FuIGJlIGluY2x1ZGVkIGluIHVzZXIKKyAgICAgICBkb2N1bWVudGF0aW9uIHRvIHNhdGlzZnkgdGhpcyByZXF1aXJlbWVudDoKKworICAgICAgICAgICBbcHJvZ3JhbS93aWRnZXRdIGlzIGJhc2VkIGluIHBhcnQgb24gdGhlIHdvcmsgb2YKKyAgICAgICAgICAgdGhlIEZMVEsgcHJvamVjdCAoaHR0cDovL3d3dy5mbHRrLm9yZykuCisKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0ZNTC0xIGIvbGljZW5zZXMvRk1MLTEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM4NGQzNQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0ZNTC0xCkBAIC0wLDAgKzEsMTU1IEBACisgICAgICAgICAgICAgICAgICAgICAgICBFVEhZTU9OSUNTIEZSRUUgTVVTSUMgTElDRU5TRQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDEsIEF1Z3VzdCAyMDAwCisKKyAgICAgICAgICAgICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMDAsIEV0aHltb25pY3MgTGltaXRlZAorCisgICBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhpcworICAgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUHJlYW1ibGUKKworICAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IG11c2ljYWwgd29ya3MgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCisgICBmcmVlZG9tIHRvIHNoYXJlIHRoZSBtdXNpYy4gQnkgY29udHJhc3QsIHRoaXMgRnJlZSBNdXNpYyBMaWNlbnNlIGlzCisgICBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIG1ha2UgY29waWVzIG9mIGEgcGllY2Ugb2YgbXVzaWMsCisgICBhbmQgY2hhcmdlIGZvciB0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2guIFJlY2lwaWVudHMgb2YgdGhvc2UgY29waWVzCisgICBoYXZlIHRoZSBzYW1lIGZyZWVkb20uIFRoZSB3b3JkICJGcmVlIiBpbiAiRnJlZSBNdXNpYyBMaWNlbnNlIiBtZWFucworICAgdGhlIGZyZWVkb20gdG8gbWFrZSBjb3BpZXMuIEl0IGRvZXMgbm90IG1lYW4gdGhhdCB0aG9zZSBjb3BpZXMgY2Fubm90CisgICB0aGVuIGJlIHNvbGQuCisKKyAgIFRoaXMgbGljZW5zZSBpcyBkZXNpZ25lZCB0byBwcm90ZWN0IGFuZCBwYXNzIG9uIHRoZSByaWdodCB0byBtYWtlCisgICBjb3BpZXMgdG8gd2hvZXZlciByZWNlaXZlcyBhIGNvcHkuIFRoaXMgZW5jb3VyYWdlcyB3aWRlIGRpc3RyaWJ1dGlvbiBvbgorICAgdGhlIGFydGlzdCdzIGJlaGFsZi4gWW91IGNhbiBhcHBseSB0aGlzIGxpY2Vuc2UgdG8geW91ciBvd24gbXVzaWMgdG9vLgorCisgICBUbyBwcm90ZWN0IHRoZSByaWdodCB0byBjb3B5IHRoZSBtdXNpYywgaXQgaXMgbmVjZXNzYXJ5IHRvIHBhc3Mgb24KKyAgIGNlcnRhaW4gcmVxdWlyZW1lbnRzIHRoYXQgbXVzdCBiZSBmb2xsb3dlZCB3aGVuIHRoZSBtdXNpYyBpcyBjb3BpZWQgb3IKKyAgIGRpc3RyaWJ1dGVkLiBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgYSBwaWVjZSBvZiBtdXNpYyBzdWJqZWN0IHRvCisgICB0aGlzIGxpY2Vuc2UsIGV2ZW4gaWYgdGhpcyBpcyBkb25lIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUKKyAgIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdCB5b3UgaGF2ZS4gWW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zCisgICBzbyB0aGF0IHRoZXkga25vdyB0aGVpciByaWdodHMuCisKKyAgIFRoZSBmcmVlZG9tIHRvIGNvcHkgaXMgcHJvdGVjdGVkIGJ5IHR3byB0aGluZ3M6ICgxKSBDb3B5cmlnaHQgb2YgdGhlCisgICBtdXNpYywgYW5kICgyKSBUaGlzIGxpY2Vuc2UgdGhhdCBwcm92aWRlcyBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHkgYW5kCisgICBkaXN0cmlidXRlIHRoZSBtdXNpYy4KKworICAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKKyAgIHBlcmZvcm1hbmNlIGZvbGxvdy4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGUkVFIE1VU0lDIExJQ0VOU0UKKworICAgICAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIFBFUkZPUk1BTkNFCisKKyAgIDEuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBtdXNpY2FsIHdvcmsgb3Igb3RoZXIgdHlwZSBvZiB3b3JrIHdoaWNoCisgICBoYXMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyB0aGF0IGl0IG1heSBiZQorICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgRnJlZSBNdXNpYyBMaWNlbnNlLiBUaGUgIk11c2ljIiwKKyAgIGJlbG93LCByZWZlcnMgdG8gYW55IHN1Y2ggbXVzaWMgb3Igd29yaywgd2hldGhlciBpbiBhIHJlY29yZGluZywKKyAgIHBlcmZvcm1hbmNlIG9yIG90aGVyIGZvcm0gb2YgbXVzaWNhbCByZXByZXNlbnRhdGlvbiwgb3IgYW55IGRlcml2YXRpdmUKKyAgIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzogdGhhdCBpcyB0byBzYXksIGEgd29yaywgaW4gYW55IG1lZGl1bSwKKyAgIGNvbnRhaW5pbmcgdGhlIE11c2ljIG9yIGEgcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHVuYWx0ZXJlZCwgbW9kaWZpZWQgYW5kCisgICBvciByZS1wZXJmb3JtZWQuCisKKyAgIFlvdSBtYXkgcGxheSBvciBwZXJmb3JtIHRoZSBNdXNpYyBwdWJsaWNseSwgZm9yIGV4YW1wbGUgaW4gYSBicm9hZGNhc3QsCisgICBwcm92aWRlZCB0aGF0IHlvdSBtYWtlIGF2YWlsYWJsZSB0byBsaXN0ZW5lcnMgdGhlIHRpdGxlIG9mIHRoZSB3b3JrIGFuZAorICAgdGhlIG5hbWUgb2YgdGhlIEFydGlzdC4gQSByZWNvcmRpbmcgbWFkZSBhcyBhIHJlc3VsdCBvZiB0aGUgTXVzaWMgYmVpbmcKKyAgIHBsYXllZCBvciBwZXJmb3JtZWQgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2Ugd2hlbiBpdHMgY29udGVudHMKKyAgIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZSBNdXNpYy4gSWYgYSBsaXN0ZW5lciB3aXNoZXMgdG8gbWFrZQorICAgY29waWVzIG9mIHN1Y2ggYSByZWNvcmRpbmcsIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UKKyAgIG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdG8gdGhlbSwgYWxvbmcgd2l0aCBhbnkgb3RoZXIgaW5mb3JtYXRpb24KKyAgIHJlcXVpcmVkIHRvIG1ha2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIGFjY29yZGluZyB0byB0aGUgdGVybXMgYW5kCisgICBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4KKworICAgMi4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgTXVzaWMgYXMgeW91IHJlY2VpdmUgaXQsCisgICBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdToKKworICAgKGEpIGNvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUKKyAgIGNvcHlyaWdodCBub3RpY2U7CisKKyAgIChiKSBrZWVwIGludGFjdCBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2U7CisKKyAgIChjKSBzdXBwbHksIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBNdXNpYywgYWxsIHNpZ25pZmljYW50IGluZm9ybWF0aW9uCisgICBhYm91dCB0aGUgTXVzaWMsIGluY2x1ZGluZyB0aGUgdGl0bGUgb2YgdGhlIHdvcmssIHRoZSBuYW1lIG9mIHRoZQorICAgYXJ0aXN0LCBhbmQgdGhlIG5hbWVzIGFuZCByb2xlcyBvZiBhbGwgY3JlZGl0ZWQgcGVyc29ubmVsOworCisgICAoZCkgc3VwcGx5LCB0byBlYWNoIHJlY2lwaWVudCBvZiB0aGUgTXVzaWMsIGFsb25nIHdpdGggdGhlIE11c2ljLAorICAgZWl0aGVyIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBjbGVhcmx5IHZpc2libGUgVVJMIHRoYXQgbGV0cyB0aGUKKyAgIHJlY2lwaWVudCBrbm93IHdoZXJlIHRvIGZpbmQgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBvbiB0aGUgSW50ZXJuZXQuCisKKyAgIElmIHRoZSBpbmZvcm1hdGlvbiByZXF1aXJlZCBieSAoYSkgdG8gKGQpIGFib3ZlIGlzIG5vdCBhdmFpbGFibGUsIGZvcgorICAgZXhhbXBsZSB3aGVuIHRoZSBNdXNpYyBoYXMgYmVlbiByZWNlaXZlZCBieSBtYWtpbmcgYSByZWNvcmRpbmcgb2YgYQorICAgcGVyZm9ybWFuY2UsIHRoZW4gdGhpcyBpbmZvcm1hdGlvbiBtdXN0IGJlIG9idGFpbmVkIGluZGVwZW5kZW50bHkgYW5kCisgICBubyBjb3BpZXMgY2FuIGJlIG1hZGUgb3IgZGlzdHJpYnV0ZWQgd2l0aG91dCB0aGlzIGluZm9ybWF0aW9uIGJlaW5nCisgICBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgTXVzaWMuCisKKyAgIFlvdSBtYXksIGF0IHlvdXIgb3B0aW9uLCBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBhY3Qgb2Ygc3VwcGx5aW5nIGEgY29weQorICAgb2YgdGhlIE11c2ljLgorCisgICAzLiBZb3UgbWF5IG5vdCBjb3B5LCBkaXN0cmlidXRlLCBwZXJmb3JtIG9yIHN1Yi1saWNlbnNlIHRoZSBNdXNpYworICAgZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuIEFueSBhdHRlbXB0IHRvCisgICBvdGhlcndpc2UgZG8gc28gaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMKKyAgIHVuZGVyIHRoaXMgTGljZW5zZS4gSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yCisgICByaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIExpY2Vuc2VzCisgICB0ZXJtaW5hdGVkIGFzIGxvbmcgYXMgc3VjaCBwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgIDQuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorICAgc2lnbmVkIGl0LiBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIGNvcHksCisgICBkaXN0cmlidXRlLCBwbGF5IG9yIHBlcmZvcm0gdGhlIE11c2ljIG9yIGFueSBvZiBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4KKyAgIFRoZXJlZm9yZSwgYnkgY29weWluZywgZGlzdHJpYnV0aW5nLCBwbGF5aW5nIG9yIHBlcmZvcm1pbmcgdGhlIE11c2ljLAorICAgb3IgYW55IG9mIGl0cyBkZXJpdmF0aXZlIHdvcmtzLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMKKyAgIExpY2Vuc2UgdG8gZG8gc28sIGFuZCBhbGwgb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLgorCisgICA1LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTXVzaWMgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5CisgICByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUgb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSwgcGxheQorICAgYW5kIG9yIHBlcmZvcm0gdGhlIE11c2ljIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMKKyAgIExpY2Vuc2UuIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlciByZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudCdzCisgICBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLiBZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IKKyAgIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8gdGhpcyBMaWNlbnNlLgorCisgICA2LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgY29weXJpZ2h0CisgICBpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSByZWFzb24gKG5vdCBsaW1pdGVkIHRvIGNvcHlyaWdodCBpc3N1ZXMpLAorICAgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorICAgb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorICAgZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gSWYgeW91IGNhbm5vdCBzYXRpc2Z5CisgICBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IG90aGVyCisgICBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4geW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGFyZQorICAgdGVybWluYXRlZC4gRm9yIGV4YW1wbGUsIGlmIGFuIGV4aXN0aW5nIGFncmVlbWVudCB3b3VsZCBub3QgcGVybWl0CisgICByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIE11c2ljIGJ5IGFsbCB0aG9zZSB3aG8gcmVjZWl2ZQorICAgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4gdGhlIG9ubHkgd2F5IHRvIHNhdGlzZnkKKyAgIGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0byByZWZyYWluIGVudGlyZWx5IGZyb20KKyAgIHJlZGlzdHJpYnV0aW5nIHRoZSBNdXNpYy4KKworICAgSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCisgICBhbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCisgICBhcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorICAgY2lyY3Vtc3RhbmNlcy4KKworICAgSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorICAgY29weXJpZ2h0IG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorICAgc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQorICAgaW50ZWdyaXR5IG9mIGEgbXVzaWMgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMgaW1wbGVtZW50ZWQgYnkKKyAgIGNvcHlyaWdodCBhbmQgbGljZW5zZSBwcmFjdGljZXMuCisKKyAgIDcuIElmIGFuIGFjdGl2aXR5IHBlcm1pdHRlZCBieSB0aGlzIExpY2Vuc2UgaXMgcmVzdHJpY3RlZCBpbiBjZXJ0YWluCisgICBjb3VudHJpZXMgZWl0aGVyIGZvciBjb3B5cmlnaHQgb3Igb3RoZXIgcmVhc29ucywgdGhlIG9yaWdpbmFsIGNvcHlyaWdodAorICAgaG9sZGVyIHdobyBwbGFjZXMgdGhlIE11c2ljIHVuZGVyIHRoaXMgTGljZW5zZSBtYXkgYWRkIGFuIGV4cGxpY2l0CisgICBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nIHRob3NlIGNvdW50cmllcywgc28gdGhhdAorICAgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nIGNvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4KKyAgIEluIHN1Y2ggY2FzZXMsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMgdGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbgorICAgaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgICA4LiBFdGh5bW9uaWNzIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kIG9yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgRnJlZSBNdXNpYworICAgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gU3VjaCBuZXcgdmVyc2lvbnMgd2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdAorICAgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3CisgICBwcm9ibGVtcyBhcyB0aGV5IGFyaXNlLgorCisgICBFYWNoIExpY2Vuc2UgaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gSWYgdGhlIE11c2ljCisgICBzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCwgYW5kCisgICAiYW55IGxhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kCisgICBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHZlcnNpb24gb3IgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5CisgICBFdGh5bW9uaWNzLiBJZiB0aGUgTXVzaWMgZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMKKyAgIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IEV0aHltb25pY3MuCisKKyAgIDkuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBNdXNpYyBpbnRvIGFub3RoZXIgd29yaworICAgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGNvbXBvc2VyIHRvCisgICBhc2sgZm9yIHBlcm1pc3Npb24uCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRU5EIE9GIEZSRUUgTVVTSUMgTElDRU5TRQpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvRlRMIGIvbGljZW5zZXMvRlRMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkYWU2MDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9GVEwKQEAgLTAsMCArMSwxNTggQEAKKyAgICAgICAgICAgICAgICAgICAgVGhlIEZyZWVUeXBlIFByb2plY3QgTElDRU5TRQorICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgICAgICAgICAgICAgICAgQ29weXJpZ2h0IDE5OTYtMTk5OSBieQorICAgICAgICAgIERhdmlkIFR1cm5lciwgUm9iZXJ0IFdpbGhlbG0sIGFuZCBXZXJuZXIgTGVtYmVyZworCisKKworSW50cm9kdWN0aW9uCis9PT09PT09PT09PT0KKworICBUaGUgRnJlZVR5cGUgIFByb2plY3QgaXMgZGlzdHJpYnV0ZWQgaW4gIHNldmVyYWwgYXJjaGl2ZSBwYWNrYWdlczsKKyAgc29tZSBvZiB0aGVtIG1heSBjb250YWluLCBpbiBhZGRpdGlvbiB0byB0aGUgRnJlZVR5cGUgZm9udCBlbmdpbmUsCisgIHZhcmlvdXMgdG9vbHMgYW5kICBjb250cmlidXRpb25zIHdoaWNoIHJlbHkgb24sIG9yICByZWxhdGUgdG8sIHRoZQorICBGcmVlVHlwZSBQcm9qZWN0LgorCisgIFRoaXMgIGxpY2Vuc2UgYXBwbGllcyAgdG8gYWxsICBmaWxlcyBmb3VuZCAgaW4gc3VjaCAgcGFja2FnZXMsIGFuZAorICB3aGljaCBkbyBub3QgIGZhbGwgdW5kZXIgdGhlaXIgb3duIGV4cGxpY2l0ICBsaWNlbnNlLiAgVGhlIGxpY2Vuc2UKKyAgYWZmZWN0cyAgdGh1cyAgdGhlICBGcmVlVHlwZSAgIGZvbnQgIGVuZ2luZSwgIHRoZSAgdGVzdCAgcHJvZ3JhbXMsCisgIGRvY3VtZW50YXRpb24gYW5kIG1ha2VmaWxlcywgYXQgdGhlIHZlcnkgbGVhc3QuCisKKyAgVGhpcyAgbGljZW5zZSAgIHdhcyAgaW5zcGlyZWQgIGJ5ICB0aGUgIEJTRCwgICBBcnRpc3RpYywgIGFuZCAgSUpHCisgIChJbmRlcGVuZGVudCBKUEVHICBHcm91cCkgbGljZW5zZXMsIHdoaWNoICBhbGwgZW5jb3VyYWdlIGluY2x1c2lvbgorICBhbmQgIHVzZSBvZiAgZnJlZSAgc29mdHdhcmUgaW4gIGNvbW1lcmNpYWwgIGFuZCBmcmVld2FyZSAgcHJvZHVjdHMKKyAgYWxpa2UuICBBcyBhIGNvbnNlcXVlbmNlLCBpdHMgbWFpbiBwb2ludHMgYXJlIHRoYXQ6CisKKyAgICBvIFdlIGRvbid0IHByb21pc2UgdGhhdCB0aGlzIHNvZnR3YXJlIHdvcmtzLiAgSG93ZXZlciwgd2UgYXJlIGJlCisgICAgICBpbnRlcmVzdGVkIGluIGFueSBraW5kIG9mIGJ1ZyByZXBvcnRzLiAoYGFzIGlzJyBkaXN0cmlidXRpb24pCisKKyAgICBvIFlvdSBjYW4gIHVzZSB0aGlzIHNvZnR3YXJlIGZvciB3aGF0ZXZlciB5b3UgIHdhbnQsIGluIHBhcnRzIG9yCisgICAgICBmdWxsIGZvcm0sIHdpdGhvdXQgaGF2aW5nIHRvIHBheSB1cy4gKGByb3lhbHR5LWZyZWUnIHVzYWdlKQorCisgICAgbyBZb3UgbWF5IG5vdCBwcmV0ZW5kIHRoYXQgIHlvdSB3cm90ZSB0aGlzIHNvZnR3YXJlLiAgSWYgeW91IHVzZQorICAgICAgaXQsIG9yICBvbmx5IHBhcnRzIG9mIGl0LCAgaW4gYSBwcm9ncmFtLCAgeW91IG11c3QgYWNrbm93bGVkZ2UKKyAgICAgIHNvbWV3aGVyZSBpbiB5b3VyIGRvY3VtZW50YXRpb24gIHRoYXQgeW91J3ZlIHVzZWQgdGhlIEZyZWVUeXBlCisgICAgICBjb2RlLiAoYGNyZWRpdHMnKQorCisgIFdlICBzcGVjaWZpY2FsbHkgIHBlcm1pdCAgYW5kICBlbmNvdXJhZ2UgIHRoZSAgaW5jbHVzaW9uICBvZiAgdGhpcworICBzb2Z0d2FyZSwgIHdpdGggIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgaW4gY29tbWVyY2lhbCBwcm9kdWN0cywKKyAgcHJvdmlkZWQgdGhhdCBhbGwgd2FycmFudHkgb3IgIGxpYWJpbGl0eSBjbGFpbXMgYXJlIGFzc3VtZWQgYnkgdGhlCisgIHByb2R1Y3QgdmVuZG9yLgorCisKK0xlZ2FsIFRlcm1zCis9PT09PT09PT09PQorCiswLiBEZWZpbml0aW9ucworLS0tLS0tLS0tLS0tLS0KKworICBUaHJvdWdob3V0IHRoaXMgbGljZW5zZSwgIHRoZSB0ZXJtcyBgcGFja2FnZScsIGBGcmVlVHlwZSBQcm9qZWN0JywKKyAgYW5kICBgRnJlZVR5cGUgIGFyY2hpdmUnIHJlZmVyICB0byAgdGhlICBzZXQgIG9mIGZpbGVzICBvcmlnaW5hbGx5CisgIGRpc3RyaWJ1dGVkICBieSB0aGUgIGF1dGhvcnMgIChEYXZpZCBUdXJuZXIsICBSb2JlcnQgV2lsaGVsbSwgIGFuZAorICBXZXJuZXIgTGVtYmVyZykgYXMgdGhlIGBGcmVlVHlwZSBwcm9qZWN0JywgYmUgdGhleSBuYW1lZCBhcyBhbHBoYSwKKyAgYmV0YSBvciBmaW5hbCByZWxlYXNlLgorCisgIGBZb3UnIHJlZmVycyB0byAgdGhlIGxpY2Vuc2VlLCBvciBwZXJzb24gdXNpbmcgIHRoZSBwcm9qZWN0LCB3aGVyZQorICBgdXNpbmcnIGlzIGEgZ2VuZXJpYyB0ZXJtIGluY2x1ZGluZyBjb21waWxpbmcgdGhlIHByb2plY3QncyBzb3VyY2UKKyAgY29kZSBhcyAgd2VsbCBhcyBsaW5raW5nIGl0ICB0byBmb3JtIGEgIGBwcm9ncmFtJyBvciBgZXhlY3V0YWJsZScuCisgIFRoaXMgIHByb2dyYW0gaXMgIHJlZmVycmVkIHRvICBhcyAgYGEgcHJvZ3JhbSAgdXNpbmcgdGhlICBGcmVlVHlwZQorICBlbmdpbmUnLgorCisgIFRoaXMgIGxpY2Vuc2UgYXBwbGllcyAgdG8gYWxsICBmaWxlcyBkaXN0cmlidXRlZCAgaW4gIHRoZSBvcmlnaW5hbAorICBGcmVlVHlwZSAgYXJjaGl2ZSwgICBpbmNsdWRpbmcgIGFsbCAgc291cmNlICAgY29kZSwgIGJpbmFyaWVzICBhbmQKKyAgZG9jdW1lbnRhdGlvbiwgIHVubGVzcyAgb3RoZXJ3aXNlICBzdGF0ZWQgICBpbiAgdGhlICBmaWxlICBpbiAgaXRzCisgIG9yaWdpbmFsLCB1bm1vZGlmaWVkIGZvcm0gYXMgIGRpc3RyaWJ1dGVkIGluIHRoZSBvcmlnaW5hbCBhcmNoaXZlLgorICBJZiB5b3UgYXJlICB1bnN1cmUgd2hldGhlciBvciBub3QgYSBwYXJ0aWN1bGFyICBmaWxlIGlzIGNvdmVyZWQgYnkKKyAgdGhpcyBsaWNlbnNlLCB5b3UgbXVzdCBjb250YWN0IHVzIHRvIHZlcmlmeSB0aGlzLgorCisgIFRoZSBGcmVlVHlwZSAgcHJvamVjdCBpcyBjb3B5cmlnaHQgKEMpIDE5OTYtMTk5OSAgYnkgRGF2aWQgVHVybmVyLAorICBSb2JlcnQgV2lsaGVsbSwgYW5kIFdlcm5lciBMZW1iZXJnLiAgQWxsIHJpZ2h0cyByZXNlcnZlZCBleGNlcHQgYXMKKyAgc3BlY2lmaWVkIGJlbG93LgorCisxLiBObyBXYXJyYW50eQorLS0tLS0tLS0tLS0tLS0KKworICBUSEUgRlJFRVRZUEUgQVJDSElWRSAgSVMgUFJPVklERUQgYEFTIElTJyBXSVRIT1VUICBXQVJSQU5UWSBPRiBBTlkKKyAgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiAgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgIFdBUlJBTlRJRVMgIE9GICBNRVJDSEFOVEFCSUxJVFkgICBBTkQgIEZJVE5FU1MgIEZPUiAgQSAgUEFSVElDVUxBUgorICBQVVJQT1NFLiAgSU4gTk8gRVZFTlQgV0lMTCBBTlkgT0YgVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMKKyAgQkUgTElBQkxFICBGT1IgQU5ZIERBTUFHRVMgQ0FVU0VEICBCWSBUSEUgVVNFIE9SICBUSEUgSU5BQklMSVRZIFRPCisgIFVTRSwgT0YgVEhFIEZSRUVUWVBFIFBST0pFQ1QuCisKKyAgQXMgIHlvdSBoYXZlICBub3Qgc2lnbmVkICB0aGlzIGxpY2Vuc2UsICB5b3UgYXJlICBub3QgIHJlcXVpcmVkIHRvCisgIGFjY2VwdCAgaXQuICAgSG93ZXZlciwgIGFzICB0aGUgRnJlZVR5cGUgIHByb2plY3QgIGlzICBjb3B5cmlnaHRlZAorICBtYXRlcmlhbCwgb25seSAgdGhpcyBsaWNlbnNlLCBvciAgYW5vdGhlciBvbmUgY29udHJhY3RlZCAgd2l0aCB0aGUKKyAgYXV0aG9ycywgZ3JhbnRzIHlvdSAgdGhlIHJpZ2h0IHRvIHVzZSwgZGlzdHJpYnV0ZSwgIGFuZCBtb2RpZnkgaXQuCisgIFRoZXJlZm9yZSwgIGJ5ICB1c2luZywgIGRpc3RyaWJ1dGluZywgIG9yIG1vZGlmeWluZyAgdGhlICBGcmVlVHlwZQorICBwcm9qZWN0LCB5b3UgaW5kaWNhdGUgdGhhdCB5b3UgdW5kZXJzdGFuZCBhbmQgYWNjZXB0IGFsbCB0aGUgdGVybXMKKyAgb2YgdGhpcyBsaWNlbnNlLgorCisyLiBSZWRpc3RyaWJ1dGlvbgorLS0tLS0tLS0tLS0tLS0tLS0KKworICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgIGFyZSBtZXQ6CisKKyAgICBvIFJlZGlzdHJpYnV0aW9uICBvZiBzb3VyY2UgY29kZSAgbXVzdCByZXRhaW4gdGhpcyAgbGljZW5zZSBmaWxlCisgICAgICAoYGxpY2VuY2UudHh0JykgdW5hbHRlcmVkOyBhbnkgYWRkaXRpb25zLCBkZWxldGlvbnMgb3IgY2hhbmdlcworICAgICAgdG8gICB0aGUgIG9yaWdpbmFsICAgZmlsZXMgIG11c3QgICBiZSAgY2xlYXJseSAgIGluZGljYXRlZCAgaW4KKyAgICAgIGFjY29tcGFueWluZyAgZG9jdW1lbnRhdGlvbi4gICBUaGUgIGNvcHlyaWdodCBub3RpY2VzICBvZiAgdGhlCisgICAgICB1bmFsdGVyZWQsIG9yaWdpbmFsICBmaWxlcyBtdXN0IGJlIHByZXNlcnZlZCBpbiAgYWxsIGNvcGllcyBvZgorICAgICAgc291cmNlIGZpbGVzLgorCisgICAgbyBSZWRpc3RyaWJ1dGlvbiBpbiBiaW5hcnkgZm9ybSBtdXN0IHByb3ZpZGUgYSAgZGlzY2xhaW1lciAgdGhhdAorICAgICAgc3RhdGVzICB0aGF0ICB0aGUgc29mdHdhcmUgaXMgYmFzZWQgaW4gcGFydCBvZiB0aGUgd29yayBvZiB0aGUKKyAgICAgIEZyZWVUeXBlIFRlYW0sICBpbiAgdGhlICBkaXN0cmlidXRpb24gIGRvY3VtZW50YXRpb24uICBXZSBhbHNvCisgICAgICBlbmNvdXJhZ2UgeW91IHRvIHB1dCBhbiBVUkwgdG8gdGhlIEZyZWVUeXBlIHdlYiBwYWdlICBpbiAgeW91cgorICAgICAgZG9jdW1lbnRhdGlvbiwgdGhvdWdoIHRoaXMgaXNuJ3QgbWFuZGF0b3J5LgorCisgIFRoZXNlIGNvbmRpdGlvbnMgIGFwcGx5IHRvIGFueSAgc29mdHdhcmUgZGVyaXZlZCBmcm9tIG9yICBiYXNlZCBvbgorICB0aGUgRnJlZVR5cGUgY29kZSwgbm90IGp1c3QgIHRoZSB1bm1vZGlmaWVkIGZpbGVzLiAgSWYgeW91IHVzZSBvdXIKKyAgd29yaywgeW91ICBtdXN0IGFja25vd2xlZGdlIHVzLiAgSG93ZXZlciwgIG5vIGZlZSBuZWVkICBiZSBwYWlkIHRvCisgIHVzLgorCiszLiBBZHZlcnRpc2luZworLS0tLS0tLS0tLS0tLS0KKworICBUaGUgbmFtZXMgb2YgIEZyZWVUeXBlJ3MgYXV0aG9ycyBhbmQgY29udHJpYnV0b3JzIG1heSAgbm90IGJlIHVzZWQKKyAgdG8gZW5kb3JzZSBvciBwcm9tb3RlICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAgCisgIFdlIHN1Z2dlc3QsICBidXQgZG8gbm90IHJlcXVpcmUsIHRoYXQgIHlvdSB1c2Ugb25lIG9yICBtb3JlIG9mIHRoZQorICBmb2xsb3dpbmcgcGhyYXNlcyB0byByZWZlciAgdG8gdGhpcyBzb2Z0d2FyZSBpbiB5b3VyIGRvY3VtZW50YXRpb24KKyAgb3IgYWR2ZXJ0aXNpbmcgIG1hdGVyaWFsczogYEZyZWVUeXBlIFByb2plY3QnLCAgYEZyZWVUeXBlIEVuZ2luZScsCisgIGBGcmVlVHlwZSBsaWJyYXJ5Jywgb3IgYEZyZWVUeXBlIERpc3RyaWJ1dGlvbicuCisKKzQuIENvbnRhY3RzCistLS0tLS0tLS0tLQorCisgIFRoZXJlIGFyZSB0d28gbWFpbGluZyBsaXN0cyByZWxhdGVkIHRvIEZyZWVUeXBlOgorCisgICAgbyBmcmVldHlwZUBmcmVldHlwZS5vcmcKKworICAgICAgRGlzY3Vzc2VzIGdlbmVyYWwgdXNlIGFuZCBhcHBsaWNhdGlvbnMgb2YgRnJlZVR5cGUsIGFzIHdlbGwgYXMKKyAgICAgIGZ1dHVyZSBhbmQgIHdhbnRlZCBhZGRpdGlvbnMgdG8gdGhlICBsaWJyYXJ5IGFuZCBkaXN0cmlidXRpb24uCisgICAgICBJZiAgeW91IGFyZSBsb29raW5nICBmb3Igc3VwcG9ydCwgIHN0YXJ0IGluICB0aGlzIGxpc3QgIGlmIHlvdQorICAgICAgaGF2ZW4ndCBmb3VuZCBhbnl0aGluZyB0byBoZWxwIHlvdSBpbiB0aGUgZG9jdW1lbnRhdGlvbi4KKworICAgIG8gZGV2ZWxAZnJlZXR5cGUub3JnCisKKyAgICAgIERpc2N1c3NlcyBidWdzLCAgYXMgd2VsbCAgYXMgZW5naW5lIGludGVybmFscywgIGRlc2lnbiBpc3N1ZXMsCisgICAgICBzcGVjaWZpYyBsaWNlbnNlcywgcG9ydGluZywgZXRjLgorCisgICAgbyBodHRwOi8vd3d3LmZyZWV0eXBlLm9yZworCisgICAgICBIb2xkcyB0aGUgY3VycmVudCAgRnJlZVR5cGUgd2ViIHBhZ2UsIHdoaWNoIHdpbGwgIGFsbG93IHlvdSB0bworICAgICAgZG93bmxvYWQgIG91ciAgbGF0ZXN0ICBkZXZlbG9wbWVudCAgdmVyc2lvbiAgYW5kICByZWFkICBvbmxpbmUKKyAgICAgIGRvY3VtZW50YXRpb24uCisKKyAgWW91IGNhbiBhbHNvIGNvbnRhY3QgdXMgaW5kaXZpZHVhbGx5IGF0OgorCisgICAgRGF2aWQgVHVybmVyICAgICAgPGRhdmlkLnR1cm5lckBmcmVldHlwZS5vcmc+CisgICAgUm9iZXJ0IFdpbGhlbG0gICAgPHJvYmVydC53aWxoZWxtQGZyZWV0eXBlLm9yZz4KKyAgICBXZXJuZXIgTGVtYmVyZyAgICA8d2VybmVyLmxlbWJlcmdAZnJlZXR5cGUub3JnPgorCisKKy0tLSBlbmQgb2YgbGljZW5zZS50eHQgLS0tCmRpZmYgLS1naXQgYS9saWNlbnNlcy9GVldNIGIvbGljZW5zZXMvRlZXTQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTkwZTY4Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvRlZXTQpAQCAtMCwwICsxLDI1IEBACitBZGRpdGlvbmFsIGNvcHlyaWdodHMgb2YgdGhlIGZ2d20gbWFpbiBtb2R1bGU6CisKK2Z2d20gaXMgY29weXJpZ2h0IDE5ODggYnkgRXZhbnMgYW5kIFN1dGhlcmxhbmQgQ29tcHV0ZXIKK0NvcnBvcmF0aW9uLCBTYWx0IExha2UgQ2l0eSwgVXRhaCwgYW5kIDE5ODkgYnkgdGhlIE1hc3NhY2h1c2V0dHMKK0luc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBDYW1icmlkZ2UsIE1hc3NhY2h1c2V0dHMsIEFsbCByaWdodHMKK3Jlc2VydmVkLiAgSXQgaXMgYWxzbyBjb3B5cmlnaHQgMTk5MyBhbmQgMTk5NCBieSBSb2JlcnQgTmF0aW9uLgorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKK2RvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKK3Byb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQKK2JvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbgorc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgbmFtZXMgb2YgRXZhbnMgJiBTdXRoZXJsYW5kIGFuZAorTS5JLlQuIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIGluIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvCitkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKK3Blcm1pc3Npb24uCisKK1JPQkVSVCBOQVRJT04sIENIQVJMRVMgSElORVMsIEVWQU5TICYgU1VUSEVSTEFORCwgQU5EIE0uSS5ULiBESVNDTEFJTQorQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUywgSU4gTk8gRVZFTlQgU0hBTEwgRVZBTlMgJgorU1VUSEVSTEFORCBPUiBNLkkuVC4gQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YKK1VTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUgorT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUgorUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvRmFzdENHSSBiL2xpY2Vuc2VzL0Zhc3RDR0kKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U2YmRmZAotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0Zhc3RDR0kKQEAgLTAsMCArMSwyOCBAQAorVGhpcyBGYXN0Q0dJIGFwcGxpY2F0aW9uIGxpYnJhcnkgc291cmNlIGFuZCBvYmplY3QgY29kZSAodGhlCisiU29mdHdhcmUiKSBhbmQgaXRzIGRvY3VtZW50YXRpb24gKHRoZSAiRG9jdW1lbnRhdGlvbiIpIGFyZQorY29weXJpZ2h0ZWQgYnkgT3BlbiBNYXJrZXQsIEluYyAoIk9wZW4gTWFya2V0IikuICBUaGUgZm9sbG93aW5nIHRlcm1zCithcHBseSB0byBhbGwgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBTb2Z0d2FyZSBhbmQgRG9jdW1lbnRhdGlvbgordW5sZXNzIGV4cGxpY2l0bHkgZGlzY2xhaW1lZCBpbiBpbmRpdmlkdWFsIGZpbGVzLgorCitPcGVuIE1hcmtldCBwZXJtaXRzIHlvdSB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSwgYW5kIGxpY2Vuc2UKK3RoaXMgU29mdHdhcmUgYW5kIHRoZSBEb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSwgcHJvdmlkZWQgdGhhdAorZXhpc3RpbmcgY29weXJpZ2h0IG5vdGljZXMgYXJlIHJldGFpbmVkIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgdGhpcworbm90aWNlIGlzIGluY2x1ZGVkIHZlcmJhdGltIGluIGFueSBkaXN0cmlidXRpb25zLiAgTm8gd3JpdHRlbgorYWdyZWVtZW50LCBsaWNlbnNlLCBvciByb3lhbHR5IGZlZSBpcyByZXF1aXJlZCBmb3IgYW55IG9mIHRoZQorYXV0aG9yaXplZCB1c2VzLiAgTW9kaWZpY2F0aW9ucyB0byB0aGlzIFNvZnR3YXJlIGFuZCBEb2N1bWVudGF0aW9uIG1heQorYmUgY29weXJpZ2h0ZWQgYnkgdGhlaXIgYXV0aG9ycyBhbmQgbmVlZCBub3QgZm9sbG93IHRoZSBsaWNlbnNpbmcKK3Rlcm1zIGRlc2NyaWJlZCBoZXJlLiAgSWYgbW9kaWZpY2F0aW9ucyB0byB0aGlzIFNvZnR3YXJlIGFuZAorRG9jdW1lbnRhdGlvbiBoYXZlIG5ldyBsaWNlbnNpbmcgdGVybXMsIHRoZSBuZXcgdGVybXMgbXVzdCBiZSBjbGVhcmx5CitpbmRpY2F0ZWQgb24gdGhlIGZpcnN0IHBhZ2Ugb2YgZWFjaCBmaWxlIHdoZXJlIHRoZXkgYXBwbHkuCisKK09QRU4gTUFSS0VUIE1BS0VTIE5PIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5UWSBXSVRIIFJFU1BFQ1QgVE8gVEhFCitTT0ZUV0FSRSBPUiBUSEUgRE9DVU1FTlRBVElPTiwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBBTlkKK1dBUlJBTlRZIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIElOCitOTyBFVkVOVCBTSEFMTCBPUEVOIE1BUktFVCBCRSBMSUFCTEUgVE8gWU9VIE9SIEFOWSBUSElSRCBQQVJUWSBGT1IgQU5ZCitEQU1BR0VTIEFSSVNJTkcgRlJPTSBPUiBSRUxBVElORyBUTyBUSElTIFNPRlRXQVJFIE9SIFRIRQorRE9DVU1FTlRBVElPTiwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIFNJTUlMQVIgREFNQUdFUywgSU5DTFVESU5HIExPU1QgUFJPRklUUyBPUgorTE9TVCBEQVRBLCBFVkVOIElGIE9QRU4gTUFSS0VUIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRVMuICBUSEUgU09GVFdBUkUgQU5EIERPQ1VNRU5UQVRJT04gQVJFIFBST1ZJREVEICJBUyBJUyIuCitPUEVOIE1BUktFVCBIQVMgTk8gTElBQklMSVRZIElOIENPTlRSQUNULCBUT1JULCBORUdMSUdFTkNFIE9SCitPVEhFUldJU0UgQVJJU0lORyBPVVQgT0YgVEhJUyBTT0ZUV0FSRSBPUiBUSEUgRE9DVU1FTlRBVElPTi4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0ZyYXVuaG9mZXJGREsgYi9saWNlbnNlcy9GcmF1bmhvZmVyRkRLCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNDg4Y2MKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9GcmF1bmhvZmVyRkRLCkBAIC0wLDAgKzEsODAgQEAKK1NvZnR3YXJlIExpY2Vuc2UgZm9yIFRoZSBGcmF1bmhvZmVyIEZESyBBQUMgQ29kZWMgTGlicmFyeSBmb3IgQW5kcm9pZAorCivCqSBDb3B5cmlnaHQgIDE5OTUgLSAyMDEyIEZyYXVuaG9mZXItR2VzZWxsc2NoYWZ0IHp1ciBGw7ZyZGVydW5nIGRlciBhbmdld2FuZHRlbiBGb3JzY2h1bmcgZS5WLgorICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisxLiAgICBJTlRST0RVQ1RJT04KK1RoZSBGcmF1bmhvZmVyIEZESyBBQUMgQ29kZWMgTGlicmFyeSBmb3IgQW5kcm9pZCAoIkZESyBBQUMgQ29kZWMiKSBpcyBzb2Z0d2FyZSB0aGF0IGltcGxlbWVudHMKK3RoZSBNUEVHIEFkdmFuY2VkIEF1ZGlvIENvZGluZyAoIkFBQyIpIGVuY29kaW5nIGFuZCBkZWNvZGluZyBzY2hlbWUgZm9yIGRpZ2l0YWwgYXVkaW8uCitUaGlzIEZESyBBQUMgQ29kZWMgc29mdHdhcmUgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBvbiBhIHdpZGUgdmFyaWV0eSBvZiBBbmRyb2lkIGRldmljZXMuCisKK0FBQydzIEhFLUFBQyBhbmQgSEUtQUFDIHYyIHZlcnNpb25zIGFyZSByZWdhcmRlZCBhcyB0b2RheSdzIG1vc3QgZWZmaWNpZW50IGdlbmVyYWwgcGVyY2VwdHVhbAorYXVkaW8gY29kZWNzLiBBQUMtRUxEIGlzIGNvbnNpZGVyZWQgdGhlIGJlc3QtcGVyZm9ybWluZyBmdWxsLWJhbmR3aWR0aCBjb21tdW5pY2F0aW9ucyBjb2RlYyBieQoraW5kZXBlbmRlbnQgc3R1ZGllcyBhbmQgaXMgd2lkZWx5IGRlcGxveWVkLiBBQUMgaGFzIGJlZW4gc3RhbmRhcmRpemVkIGJ5IElTTyBhbmQgSUVDIGFzIHBhcnQKK29mIHRoZSBNUEVHIHNwZWNpZmljYXRpb25zLgorCitQYXRlbnQgbGljZW5zZXMgZm9yIG5lY2Vzc2FyeSBwYXRlbnQgY2xhaW1zIGZvciB0aGUgRkRLIEFBQyBDb2RlYyAoaW5jbHVkaW5nIHRob3NlIG9mIEZyYXVuaG9mZXIpCittYXkgYmUgb2J0YWluZWQgdGhyb3VnaCBWaWEgTGljZW5zaW5nICh3d3cudmlhbGljZW5zaW5nLmNvbSkgb3IgdGhyb3VnaCB0aGUgcmVzcGVjdGl2ZSBwYXRlbnQgb3duZXJzCitpbmRpdmlkdWFsbHkgZm9yIHRoZSBwdXJwb3NlIG9mIGVuY29kaW5nIG9yIGRlY29kaW5nIGJpdCBzdHJlYW1zIGluIHByb2R1Y3RzIHRoYXQgYXJlIGNvbXBsaWFudCB3aXRoCit0aGUgSVNPL0lFQyBNUEVHIGF1ZGlvIHN0YW5kYXJkcy4gUGxlYXNlIG5vdGUgdGhhdCBtb3N0IG1hbnVmYWN0dXJlcnMgb2YgQW5kcm9pZCBkZXZpY2VzIGFscmVhZHkgbGljZW5zZQordGhlc2UgcGF0ZW50IGNsYWltcyB0aHJvdWdoIFZpYSBMaWNlbnNpbmcgb3IgZGlyZWN0bHkgZnJvbSB0aGUgcGF0ZW50IG93bmVycywgYW5kIHRoZXJlZm9yZSBGREsgQUFDIENvZGVjCitzb2Z0d2FyZSBtYXkgYWxyZWFkeSBiZSBjb3ZlcmVkIHVuZGVyIHRob3NlIHBhdGVudCBsaWNlbnNlcyB3aGVuIGl0IGlzIHVzZWQgZm9yIHRob3NlIGxpY2Vuc2VkIHB1cnBvc2VzIG9ubHkuCisKK0NvbW1lcmNpYWxseS1saWNlbnNlZCBBQUMgc29mdHdhcmUgbGlicmFyaWVzLCBpbmNsdWRpbmcgZmxvYXRpbmctcG9pbnQgdmVyc2lvbnMgd2l0aCBlbmhhbmNlZCBzb3VuZCBxdWFsaXR5LAorYXJlIGFsc28gYXZhaWxhYmxlIGZyb20gRnJhdW5ob2Zlci4gVXNlcnMgYXJlIGVuY291cmFnZWQgdG8gY2hlY2sgdGhlIEZyYXVuaG9mZXIgd2Vic2l0ZSBmb3IgYWRkaXRpb25hbAorYXBwbGljYXRpb25zIGluZm9ybWF0aW9uIGFuZCBkb2N1bWVudGF0aW9uLgorCisyLiAgICBDT1BZUklHSFQgTElDRU5TRQorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHdpdGhvdXQKK3BheW1lbnQgb2YgY29weXJpZ2h0IGxpY2Vuc2UgZmVlcyBwcm92aWRlZCB0aGF0IHlvdSBzYXRpc2Z5IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworWW91IG11c3QgcmV0YWluIHRoZSBjb21wbGV0ZSB0ZXh0IG9mIHRoaXMgc29mdHdhcmUgbGljZW5zZSBpbiByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIEZESyBBQUMgQ29kZWMgb3IKK3lvdXIgbW9kaWZpY2F0aW9ucyB0aGVyZXRvIGluIHNvdXJjZSBjb2RlIGZvcm0uCisKK1lvdSBtdXN0IHJldGFpbiB0aGUgY29tcGxldGUgdGV4dCBvZiB0aGlzIHNvZnR3YXJlIGxpY2Vuc2UgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworcHJvdmlkZWQgd2l0aCByZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIEZESyBBQUMgQ29kZWMgb3IgeW91ciBtb2RpZmljYXRpb25zIHRoZXJldG8gaW4gYmluYXJ5IGZvcm0uCitZb3UgbXVzdCBtYWtlIGF2YWlsYWJsZSBmcmVlIG9mIGNoYXJnZSBjb3BpZXMgb2YgdGhlIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG9mIHRoZSBGREsgQUFDIENvZGVjIGFuZCB5b3VyCittb2RpZmljYXRpb25zIHRoZXJldG8gdG8gcmVjaXBpZW50cyBvZiBjb3BpZXMgaW4gYmluYXJ5IGZvcm0uCisKK1RoZSBuYW1lIG9mIEZyYXVuaG9mZXIgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBsaWJyYXJ5IHdpdGhvdXQKK3ByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworWW91IG1heSBub3QgY2hhcmdlIGNvcHlyaWdodCBsaWNlbnNlIGZlZXMgZm9yIGFueW9uZSB0byB1c2UsIGNvcHkgb3IgZGlzdHJpYnV0ZSB0aGUgRkRLIEFBQyBDb2RlYworc29mdHdhcmUgb3IgeW91ciBtb2RpZmljYXRpb25zIHRoZXJldG8uCisKK1lvdXIgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhlIEZESyBBQUMgQ29kZWMgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIHNvZnR3YXJlCithbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4gRm9yIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoZSBGREsgQUFDIENvZGVjLCB0aGUgdGVybQorIkZyYXVuaG9mZXIgRkRLIEFBQyBDb2RlYyBMaWJyYXJ5IGZvciBBbmRyb2lkIiBtdXN0IGJlIHJlcGxhY2VkIGJ5IHRoZSB0ZXJtCisiVGhpcmQtUGFydHkgTW9kaWZpZWQgVmVyc2lvbiBvZiB0aGUgRnJhdW5ob2ZlciBGREsgQUFDIENvZGVjIExpYnJhcnkgZm9yIEFuZHJvaWQuIgorCiszLiAgICBOTyBQQVRFTlQgTElDRU5TRQorCitOTyBFWFBSRVNTIE9SIElNUExJRUQgTElDRU5TRVMgVE8gQU5ZIFBBVEVOVCBDTEFJTVMsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHBhdGVudHMgb2YgRnJhdW5ob2ZlciwKK0FSRSBHUkFOVEVEIEJZIFRISVMgU09GVFdBUkUgTElDRU5TRS4gRnJhdW5ob2ZlciBwcm92aWRlcyBubyB3YXJyYW50eSBvZiBwYXRlbnQgbm9uLWluZnJpbmdlbWVudCB3aXRoCityZXNwZWN0IHRvIHRoaXMgc29mdHdhcmUuCisKK1lvdSBtYXkgdXNlIHRoaXMgRkRLIEFBQyBDb2RlYyBzb2Z0d2FyZSBvciBtb2RpZmljYXRpb25zIHRoZXJldG8gb25seSBmb3IgcHVycG9zZXMgdGhhdCBhcmUgYXV0aG9yaXplZAorYnkgYXBwcm9wcmlhdGUgcGF0ZW50IGxpY2Vuc2VzLgorCis0LiAgICBESVNDTEFJTUVSCisKK1RoaXMgRkRLIEFBQyBDb2RlYyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBieSBGcmF1bmhvZmVyIG9uIGJlaGFsZiBvZiB0aGUgY29weXJpZ2h0IGhvbGRlcnMgYW5kIGNvbnRyaWJ1dG9ycworIkFTIElTIiBhbmQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIGltcGxpZWQgd2FycmFudGllcworb2YgbWVyY2hhbnRhYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IKK0NPTlRSSUJVVE9SUyBCRSBMSUFCTEUgZm9yIGFueSBkaXJlY3QsIGluZGlyZWN0LCBpbmNpZGVudGFsLCBzcGVjaWFsLCBleGVtcGxhcnksIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywKK2luY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gcHJvY3VyZW1lbnQgb2Ygc3Vic3RpdHV0ZSBnb29kcyBvciBzZXJ2aWNlczsgbG9zcyBvZiB1c2UsIGRhdGEsIG9yIHByb2ZpdHMsCitvciBidXNpbmVzcyBpbnRlcnJ1cHRpb24sIGhvd2V2ZXIgY2F1c2VkIGFuZCBvbiBhbnkgdGhlb3J5IG9mIGxpYWJpbGl0eSwgd2hldGhlciBpbiBjb250cmFjdCwgc3RyaWN0CitsaWFiaWxpdHksIG9yIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgYXJpc2luZyBpbiBhbnkgd2F5IG91dCBvZiB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUsIGV2ZW4gaWYKK2FkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlLgorCis1LiAgICBDT05UQUNUIElORk9STUFUSU9OCisKK0ZyYXVuaG9mZXIgSW5zdGl0dXRlIGZvciBJbnRlZ3JhdGVkIENpcmN1aXRzIElJUworQXR0ZW50aW9uOiBBdWRpbyBhbmQgTXVsdGltZWRpYSBEZXBhcnRtZW50cyAtIEZESyBBQUMgTEwKK0FtIFdvbGZzbWFudGVsIDMzCis5MTA1OCBFcmxhbmdlbiwgR2VybWFueQorCit3d3cuaWlzLmZyYXVuaG9mZXIuZGUvYW1tCithbW0taW5mb0BpaXMuZnJhdW5ob2Zlci5kZQorCmRpZmYgLS1naXQgYS9saWNlbnNlcy9GcmVlQXJ0IGIvbGljZW5zZXMvRnJlZUFydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTZkZTIyCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvRnJlZUFydApAQCAtMCwwICsxLDIyMSBAQAorRnJlZSBBcnQgTGljZW5zZQorCisKK1sgQ29weWxlZnQgQXR0aXR1ZGUgXQorCit2ZXJzaW9uIDEuMgorCitQcmVhbWJsZSA6CisKK1dpdGggdGhpcyBGcmVlIEFydCBMaWNlbnNlLCB5b3UgYXJlIGF1dGhvcmlzZWQgdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQgZnJlZWx5Cit0cmFuc2Zvcm0gdGhlIHdvcmsgb2YgYXJ0IHdoaWxlIHJlc3BlY3RpbmcgdGhlIHJpZ2h0cyBvZiB0aGUgb3JpZ2luYXRvci4KKworRmFyIGZyb20gaWdub3JpbmcgdGhlIGF1dGhvcidzIHJpZ2h0cywgdGhpcyBsaWNlbnNlIHJlY29nbmlzZXMgdGhlbSBhbmQKK3Byb3RlY3RzIHRoZW0uIEl0IHJlZm9ybXVsYXRlcyB0aGVpciBwcmluY2lwbGUgd2hpbGUgbWFraW5nIGl0IHBvc3NpYmxlIGZvciB0aGUKK3B1YmxpYyB0byBtYWtlIGNyZWF0aXZlIHVzZSBvZiB0aGUgd29ya3Mgb2YgYXJ0LiBXaGVyZWFzIGN1cnJlbnQgbGl0ZXJhcnkgYW5kCithcnRpc3RpYyBwcm9wZXJ0eSByaWdodHMgcmVzdWx0IGluIHJlc3RyaWN0aW9uIG9mIHRoZSBwdWJsaWMncyBhY2Nlc3MgdG8gd29ya3MKK29mIGFydCwgdGhlIGdvYWwgb2YgdGhlIEZyZWUgQXJ0IExpY2Vuc2UgaXMgdG8gZW5jb3VyYWdlIHN1Y2ggYWNjZXNzLgorCitUaGUgaW50ZW50aW9uIGlzIHRvIG1ha2Ugd29yayBhY2Nlc3NpYmxlIGFuZCB0byBhdXRob3Jpc2UgdGhlIHVzZSBvZiBpdHMKK3Jlc291cmNlcyBieSB0aGUgZ3JlYXRlc3QgbnVtYmVyIG9mIHBlb3BsZTogdG8gdXNlIGl0IGluIG9yZGVyIHRvIGluY3JlYXNlIGl0cwordXNlLCB0byBjcmVhdGUgbmV3IGNvbmRpdGlvbnMgZm9yIGNyZWF0aW9uIGluIG9yZGVyIHRvIG11bHRpcGx5IHRoZQorcG9zc2liaWxpdGllcyBvZiBjcmVhdGlvbiwgd2hpbGUgcmVzcGVjdGluZyB0aGUgb3JpZ2luYXRvcnMgaW4gYWNjb3JkaW5nIHRoZW0KK3JlY29nbml0aW9uIGFuZCBkZWZlbmRpbmcgdGhlaXIgbW9yYWwgcmlnaHRzLgorCitJbiBmYWN0LCB3aXRoIHRoZSBhcnJpdmFsIG9mIHRoZSBkaWdpdGFsIGFnZSwgdGhlIGludmVudGlvbiBvZiB0aGUgSW50ZXJuZXQgYW5kCitmcmVlIHNvZnR3YXJlLCBhIG5ldyBhcHByb2FjaCB0byBjcmVhdGlvbiBhbmQgcHJvZHVjdGlvbiBoYXMgbWFkZSBpdHMKK2FwcGVhcmFuY2UuIEl0IGFsc28gZW5jb3VyYWdlcyBhIGNvbnRpbnVhdGlvbiBvZiB0aGUgcHJvY2VzcyBvZiBleHBlcmltZW50YXRpb24KK3VuZGVydGFrZW4gYnkgbWFueSBjb250ZW1wb3JhcnkgYXJ0aXN0cy4KKworS25vd2xlZGdlIGFuZCBjcmVhdGl2aXR5IGFyZSByZXNvdXJjZXMgd2hpY2gsIHRvIGJlIHRydWUgdG8gdGhlbXNlbHZlcywgbXVzdAorcmVtYWluIGZyZWUsIGkuZS4gcmVtYWluIGEgZnVuZGFtZW50YWwgc2VhcmNoIHdoaWNoIGlzIG5vdCBkaXJlY3RseSByZWxhdGVkIHRvCithIGNvbmNyZXRlIGFwcGxpY2F0aW9uLiBDcmVhdGluZyBtZWFucyBkaXNjb3ZlcmluZyB0aGUgdW5rbm93biwgbWVhbnMgaW52ZW50aW5nCithIHJlYWxpdHkgd2l0aG91dCBhbnkgaGVlZCB0byByZWFsaXNtLiBUaHVzLCB0aGUgb2JqZWN0KGl2ZSkgb2YgYXJ0IGlzIG5vdAorZXF1aXZhbGVudCB0byB0aGUgZmluaXNoZWQgYW5kIGRlZmluZWQgYXJ0IG9iamVjdC4gIFRoaXMgaXMgdGhlIGJhc2ljIGFpbSBvZgordGhpcyBGcmVlIEFydCBMaWNlbnNlOiB0byBwcm9tb3RlIGFuZCBwcm90ZWN0IGFydGlzdGljIHByYWN0aWNlIGZyZWVkIGZyb20gdGhlCitydWxlcyBvZiB0aGUgbWFya2V0IGVjb25vbXkuCisKK+KAlOKAlOKAkyBERUZJTklUSU9OUworCistIFRoZSB3b3JrIG9mIGFydCA6IEEgY29tbXVuYWwgd29yayB3aGljaCBpbmNsdWRlcyB0aGUgaW5pdGlhbCBhcnR3b3JrIGFzIHdlbGwKKyAgYXMgYWxsIHN1YnNlcXVlbnQgY29udHJpYnV0aW9ucyAoc3Vic2VxdWVudCBvcmlnaW5hbHMgYW5kIGNvcGllcykuIEl0IGlzCitjcmVhdGVkIGF0IHRoZSBpbml0aWF0aXZlIG9mIHRoZSBvcmlnaW5hbCBhcnRpc3Qgd2hvLCBieSB0aGlzIGxpY2Vuc2UsIGRlZmluZXMKK3RoZSBjb25kaXRpb25zIGFjY29yZGluZyB0byB3aGljaCB0aGUgY29udHJpYnV0aW9ucyBhcmUgbWFkZS4KKworLSBUaGUgb3JpZ2luYWwgd29yayBvZiBhcnQgOiBUaGlzIGlzIHRoZSBhcnR3b3JrIGNyZWF0ZWQgYnkgdGhlIGluaXRpYXRvciBvZgorICB0aGUgY29tbXVuYWwgd29yaywgb2Ygd2hpY2ggY29waWVzIHdpbGwgYmUgbW9kaWZpZWQgYnkgd2hvc29ldmVyIHdpc2hlcy4KKworLSBTdWJzZXF1ZW50IHdvcmtzIDogVGhlc2UgYXJlIHRoZSBhZGRpdGlvbnMgcHV0IGZvcndhcmQgYnkgdGhlIGFydGlzdHMgd2hvCisgIGNvbnRyaWJ1dGUgdG8gdGhlIGZvcm1hdGlvbiBvZiB0aGUgd29yayBieSB0YWtpbmcgYWR2YW50YWdlIG9mIHRoZSByaWdodCB0bworcmVwcm9kdWN0aW9uLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiB0aGF0IHRoaXMgbGljZW5zZSBjb25mZXJzIG9uIHRoZW0uCisKKy0gVGhlIE9yaWdpbmFsICh0aGUgd29yaydzIHNvdXJjZSBvciByZXNvdXJjZSkgOiBBIGRhdGVkIGV4YW1wbGUgb2YgdGhlIHdvcmssCisgIG9mIGl0cyBkZWZpbml0aW9uLCBvZiBpdHMgcGFydGl0aW9uIG9yIG9mIGl0cyBwcm9ncmFtIHdoaWNoIHRoZSBvcmlnaW5hdG9yCitwcm92aWRlcyBhcyB0aGUgcmVmZXJlbmNlIGZvciBhbGwgZnV0dXJlIHVwZGF0aW5ncywgaW50ZXJwcmV0YXRpb25zLCBjb3BpZXMgb3IKK3JlcHJvZHVjdGlvbnMuCisKKy0gQ29weSA6IEFueSByZXByb2R1Y3Rpb24gb2YgYW4gb3JpZ2luYWwgYXMgZGVmaW5lZCBieSB0aGlzIGxpY2Vuc2UuCisKKy0gVGhlIGF1dGhvciBvciB0aGUgYXJ0aXN0IG9mIHRoZSBvcmlnaW5hbCB3b3JrIG9mIGFydDogVGhpcyBpcyB0aGUgcGVyc29uIHdobworICBjcmVhdGVkIHRoZSB3b3JrIHdoaWNoIGlzIGF0IHRoZSBoZWFydCBvZiB0aGUgcmFtaWZpY2F0aW9ucyBvZiB0aGlzIG1vZGlmaWVkCit3b3JrIG9mIGFydC4gQnkgdGhpcyBsaWNlbnNlLCB0aGUgYXV0aG9yIGRldGVybWluZXMgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2gKK3RoZXNlIG1vZGlmaWNhdGlvbnMgYXJlIG1hZGUuCisKKy0gQ29udHJpYnV0b3I6IEFueSBwZXJzb24gd2hvIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiB0aGUgd29yayBvZiBhcnQuCisgIEhlIGlzIHRoZSBhdXRob3Igb3IgdGhlIGFydGlzdCBvZiBhbiBvcmlnaW5hbCBhcnQgb2JqZWN0IHJlc3VsdGluZyBmcm9tIHRoZQorbW9kaWZpY2F0aW9uIG9mIGEgY29weSBvZiB0aGUgaW5pdGlhbCBhcnR3b3JrIG9yIHRoZSBtb2RpZmljYXRpb24gb2YgYSBjb3B5IG9mCithIHN1YnNlcXVlbnQgd29yayBvZiBhcnQuCisKK+KAlOKAlOKAkworCisxLiBBSU1TCisKK1RoZSBhaW0gb2YgdGhpcyBsaWNlbnNlIGlzIHRvIGRlZmluZSB0aGUgY29uZGl0aW9ucyBhY2NvcmRpbmcgdG8gd2hpY2ggeW91IGNhbgordXNlIHRoaXMgd29yayBmcmVlbHkuCisKKzIuIEVYVEVOVCBPRiBUSEUgVVNBR0UKKworVGhpcyB3b3JrIG9mIGFydCBpcyBzdWJqZWN0IHRvIGNvcHlyaWdodCwgYW5kIHRoZSBhdXRob3IsIGJ5IHRoaXMgbGljZW5zZSwKK3NwZWNpZmllcyB0aGUgZXh0ZW50IHRvIHdoaWNoIHlvdSBjYW4gY29weSwgZGlzdHJpYnV0ZSBhbmQgbW9kaWZ5IGl0LgorCisyLjEgRlJFRURPTSBUTyBDT1BZIChPUiBPRiBSRVBST0RVQ1RJT04pCisKK1lvdSBoYXZlIHRoZSByaWdodCB0byBjb3B5IHRoaXMgd29yayBvZiBhcnQgZm9yIHlvdXIgcGVyc29uYWwgdXNlLCBmb3IgeW91cgorZnJpZW5kcyBvciBmb3IgYW55IG90aGVyIHBlcnNvbiwgYnkgZW1wbG95aW5nIHdoYXRldmVyIHRlY2huaXF1ZSB5b3UgY2hvb3NlLgorCisyLjIgRlJFRURPTSBUTyBESVNUUklCVVRFLCBUTyBJTlRFUlBSRVQgKE9SIE9GIFJFUFJFU0VOVEFUSU9OKQorCitZb3UgY2FuIGZyZWVseSBkaXN0cmlidXRlIHRoZSBjb3BpZXMgb2YgdGhlc2Ugd29ya3MsIG1vZGlmaWVkIG9yIG5vdCwgd2hhdGV2ZXIKK3RoZWlyIG1lZGl1bSwgd2hlcmV2ZXIgeW91IHdpc2gsIGZvciBhIGZlZSBvciBmb3IgZnJlZSwgaWYgeW91IG9ic2VydmUgYWxsIHRoZQorZm9sbG93aW5nIGNvbmRpdGlvbnM6CistIGF0dGFjaCB0aGlzIGxpY2Vuc2UsIGluIGl0cyBlbnRpcmV0eSwgdG8gdGhlIGNvcGllcyBvciBpbmRpY2F0ZSBwcmVjaXNlbHkKKyAgd2hlcmUgdGhlIGxpY2Vuc2UgY2FuIGJlIGZvdW5kLAorLSBzcGVjaWZ5IHRvIHRoZSByZWNpcGllbnQgdGhlIG5hbWUgb2YgdGhlIGF1dGhvciBvZiB0aGUgb3JpZ2luYWxzLAorLSBzcGVjaWZ5IHRvIHRoZSByZWNpcGllbnQgd2hlcmUgaGUgd2lsbCBiZSBhYmxlIHRvIGFjY2VzcyB0aGUgb3JpZ2luYWxzCisgIChvcmlnaW5hbCBhbmQgc3Vic2VxdWVudCkuIFRoZSBhdXRob3Igb2YgdGhlIG9yaWdpbmFsIG1heSwgaWYgaGUgd2lzaGVzLCBnaXZlCit5b3UgdGhlIHJpZ2h0IHRvIGJyb2FkY2FzdC9kaXN0cmlidXRlIHRoZSBvcmlnaW5hbCB1bmRlciB0aGUgc2FtZSBjb25kaXRpb25zIGFzCit0aGUgY29waWVzLgorCisyLjMgRlJFRURPTSBUTyBNT0RJRlkKKworWW91IGhhdmUgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgY29waWVzIG9mIHRoZSBvcmlnaW5hbHMgKG9yaWdpbmFsIGFuZAorc3Vic2VxdWVudCksIHBhcnRpYWxseSBvciBvdGhlcndpc2UsIHJlc3BlY3RpbmcgdGhlIGNvbmRpdGlvbnMgc2V0IG91dCBpbgorYXJ0aWNsZSAyLjIgLCBpbiB0aGUgZXZlbnQgb2YgZGlzdHJpYnV0aW9uIChvciByZXByZXNlbnRhdGlvbikgb2YgdGhlIG1vZGlmaWVkCitjb3B5LiBUaGUgYXV0aG9yIG9mIHRoZSBvcmlnaW5hbCBtYXksIGlmIGhlIHdpc2hlcywgZ2l2ZSB5b3UgdGhlIHJpZ2h0IHRvCittb2RpZnkgdGhlIG9yaWdpbmFsIHVuZGVyIHRoZSBzYW1lIGNvbmRpdGlvbnMgYXMgdGhlIGNvcGllcy4KKworMy4gSU5DT1JQT1JBVElPTiBPRiBBUlRXT1JLCisKK0FsbCB0aGUgZWxlbWVudHMgb2YgdGhpcyB3b3JrIG9mIGFydCBtdXN0IHJlbWFpbiBmcmVlLCB3aGljaCBpcyB3aHkgeW91IGFyZSBub3QKK2FsbG93ZWQgdG8gaW50ZWdyYXRlIHRoZSBvcmlnaW5hbHMgKG9yaWdpbmFscyBhbmQgc3Vic2VxdWVudHMpIGludG8gYW5vdGhlcgord29yayB3aGljaCB3b3VsZCBub3QgYmUgc3ViamVjdCB0byB0aGlzIGxpY2Vuc2UuCisKKzQuIFlPVVIgQVVUSE9SJ1MgUklHSFRTCisKK1RoZSBvYmplY3Qgb2YgdGhpcyBsaWNlbnNlIGlzIG5vdCB0byBkZW55IHlvdXIgYXV0aG9yJ3MgcmlnaHRzIG9uIHlvdXIKK2NvbnRyaWJ1dGlvbi4gQnkgY2hvb3NpbmcgdG8gY29udHJpYnV0ZSB0byB0aGUgZXZvbHV0aW9uIG9mIHRoaXMgd29yayBvZiBhcnQsCit5b3Ugb25seSBhZ3JlZSB0byBnaXZlIHRvIG90aGVycyB0aGUgc2FtZSByaWdodHMgd2l0aCByZWdhcmQgdG8geW91cgorY29udHJpYnV0aW9uIGFzIHRob3NlIHdoaWNoIHdlcmUgZ3JhbnRlZCB0byB5b3UgYnkgdGhpcyBsaWNlbnNlLgorCis1LiBEVVJBVElPTiBPRiBUSEUgTElDRU5DRQorCitUaGlzIGxpY2Vuc2UgdGFrZXMgZWZmZWN0IGFzIG9mIHlvdXIgYWNjZXB0YW5jZSBvZiBpdHMgcHJvdmlzaW9ucy4gVGhlIGZhY3Qgb2YKK2NvcHlpbmcsIGRpc3RyaWJ1dGluZywgb3Igb2YgbW9kaWZ5aW5nIHRoZSB3b3JrIGNvbnN0aXR1dGVzIGEgdGFjaXQgYWdyZWVtZW50LgorVGhpcyBsaWNlbnNlIHdpbGwgcmVtYWluIGluIGZvcmNlIGZvciBhcyBsb25nIGFzIHRoZSBjb3B5cmlnaHQgd2hpY2ggaXMKK2F0dGFjaGVkIHRvIHRoZSB3b3JrIG9mIGFydC4gSWYgeW91IGRvIG5vdCByZXNwZWN0IHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UsCit5b3UgYXV0b21hdGljYWxseSBsb3NlIHRoZSByaWdodHMgdGhhdCBpdCBjb25mZXJzLiBJZiB0aGUgbGVnYWwgc3RhdHVzIHRvIHdoaWNoCit5b3UgYXJlIHN1YmplY3QgbWFrZXMgaXQgaW1wb3NzaWJsZSBmb3IgeW91IHRvIHJlc3BlY3QgdGhlIHRlcm1zIG9mIHRoaXMKK2xpY2Vuc2UsIHlvdSBtYXkgbm90IG1ha2UgdXNlIG9mIHRoZSByaWdodHMgd2hpY2ggaXQgY29uZmVycy4KKworNi4gVkFSSU9VUyBWRVJTSU9OUyBPRiBUSEUgTElDRU5DRQorCitUaGlzIGxpY2Vuc2UgbWF5IHVuZGVyZ28gcGVyaW9kaWMgbW9kaWZpY2F0aW9ucyB0byBpbmNvcnBvcmF0ZSBpbXByb3ZlbWVudHMgYnkKK2l0cyBhdXRob3JzIChpbnN0aWdhdG9ycyBvZiB0aGUgImNvcHlsZWZ0IGF0dGl0dWRlIiBtb3ZlbWVudCkgYnkgd2F5IG9mIG5ldywKK251bWJlcmVkIHZlcnNpb25zLgorCitZb3Ugd2lsbCBoYXZlIHRoZSBjaG9pY2Ugb2YgYWNjZXB0aW5nIHRoZSBwcm92aXNpb25zIGNvbnRhaW5lZCBpbiB0aGUgdmVyc2lvbgordW5kZXIgd2hpY2ggdGhlIGNvcHkgd2FzIGNvbW11bmljYXRlZCB0byB5b3UsIG9yIGFsdGVybmF0aXZlbHksIHRvIHVzZSB0aGUKK3Byb3Zpc2lvbnMgb2Ygb25lIG9mIHRoZSBzdWJzZXF1ZW50IHZlcnNpb25zLgorCis3LiBTVUItTElDRU5TSU5HCisKK1N1Yi1saWNlbnNlcyBhcmUgbm90IGF1dGhvcml6ZWQgYnkgdGhlIHByZXNlbnQgbGljZW5zZS4gQW55IHBlcnNvbiB3aG8gd2lzaGVzCit0byBtYWtlIHVzZSBvZiB0aGUgcmlnaHRzIHRoYXQgaXQgY29uZmVycyB3aWxsIGJlIGRpcmVjdGx5IGJvdW5kIHRvIHRoZSBhdXRob3IKK29mIHRoZSBvcmlnaW5hbCB3b3JrLgorCis4LiBUSEUgTEFXIEFQUExJQ0FCTEUgVE8gVEhJUyBDT05UUkFDVAorCitUaGlzIGxpY2Vuc2UgaXMgc3ViamVjdCB0byBGcmVuY2ggbGF3LgorCivigJTigJTigJMKKworRElSRUNUSU9OUyBGT1IgVVNFIDoKKworLSBIb3cgdG8gdXNlIHRoZSBGcmVlIEFydCBsaWNlbnNlPworCitUbyBiZW5lZml0IGZyb20gdGhlIEZyZWUgQXJ0IExpY2Vuc2UsIGl0IGlzIGVub3VnaCB0byBzcGVjaWZ5IHRoZSBmb2xsb3dpbmcgb24KK3lvdXIgd29yayBvZiBhcnQ6CisKK1stIEEgZmV3IGxpbmVzIHRvIGluZGljYXRlIHRoZSBuYW1lIG9mIHRoZSB3b3JrIGFuZCB0byBnaXZlIGFuIGlkZWEgb2Ygd2hhdCBpdAoraXMuXSBbLSBBIGZldyBsaW5lcyB0byBkZXNjcmliZSwgaWYgbmVjZXNzYXJ5LCB0aGUgbW9kaWZpZWQgd29yayBvZiBhcnQgYW5kCitnaXZlIHRoZSBuYW1lIG9mIHRoZSBhdXRob3IvYXJ0aXN0Ll0gQ29weXJpZ2h0IMKpIFt0aGUgZGF0ZV0gW25hbWUgb2YgdGhlIGF1dGhvcgorb3IgYXJ0aXN0XSAoaWYgYXBwcm9wcmlhdGUsIHNwZWNpZnkgdGhlIG5hbWVzIG9mIHRoZSBwcmV2aW91cyBhdXRob3JzIG9yCithcnRpc3RzKSBDb3B5bGVmdDogdGhpcyB3b3JrIG9mIGFydCBpcyBmcmVlLCB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKK21vZGlmeSBpdCBhY2NvcmRpbmcgdG8gdGVybXMgb2YgdGhlIEZyZWUgQXJ0IGxpY2Vuc2UuICBZb3Ugd2lsbCBmaW5kIGEgc3BlY2ltZW4KK29mIHRoaXMgbGljZW5zZSBvbiB0aGUgc2l0ZSBDb3B5bGVmdCBBdHRpdHVkZSBodHRwOi8vYXJ0bGlicmUub3JnIGFzIHdlbGwgYXMgb24KK290aGVyIHNpdGVzLgorCistIFdoeSB1c2UgdGhlIEZyZWUgQXJ0IGxpY2Vuc2U/CisKKzEgLyB0byBnaXZlIHRoZSBncmVhdGVzdCBudW1iZXIgb2YgcGVvcGxlIGFjY2VzcyB0byB5b3VyIHdvcmsuCisKKzIgLyB0byBhbGxvdyBpdCB0byBiZSBmcmVlbHkgZGlzdHJpYnV0ZWQuCisKKzMgLyB0byBhbGxvdyBpdCB0byBldm9sdmUgYnkgYXV0aG9yaXNpbmcgaXRzIHRyYW5zZm9ybWF0aW9uIGJ5IG90aGVycy4KKworNCAvIHRvIGJlIGFibGUsIHlvdXJzZWxmLCB0byB1c2UgdGhlIHJlc291cmNlcyBvZiBhIHdvcmsgd2hlbiBpdCBpcyB1bmRlciBGcmVlCitBcnQgbGljZW5zZTogdG8gY29weSwgZGlzdHJpYnV0ZSBvciB0cmFuc2Zvcm0gaXQgZnJlZWx5LgorCis1IC8gVGhpcyBpcyBub3QgYWxsOiBiZWNhdXNlIHRoZSB1c2Ugb2YgdGhlIEZyZWUgQXJ0IExpY2Vuc2UgaXMgYWxzbyBhIGdvb2Qgd2F5Cit0byB0YWtlIGxpYmVydGllcyB3aXRoIHRoZSBtYXJrZXRpbmcgc3lzdGVtIGdlbmVyYXRlZCBieSB0aGUgZG9taW5hbnQgZWNvbm9teS4KK1RoZSBGcmVlIEFydCBMaWNlbnNlIG9mZmVycyBhIHVzZWZ1bCBsZWdhbCBwcm90b2NvbCB0byBwcmV2ZW50IGFidXNpdmUKK2FwcHJvcHJpYXRpb24uIEl0IHdpbGwgbm8gbG9uZ2VyIGJlIHBvc3NpYmxlIGZvciBzb21lb25lIHRvIGFwcHJvcHJpYXRlIHlvdXIKK3dvcmssIHNob3J0LWNpcmN1aXRpbmcgdGhlIGNyZWF0aXZlIHByb2Nlc3MgdG8gbWFrZSBwZXJzb25hbCBwcm9maXQgZnJvbSBpdC4KK0hlbHBpbmcgeW91cnNlbGYgdG8gYSBjb2xsZWN0aXZlIHdvcmsgaW4gcHJvZ3Jlc3Mgd2lsbCBiZSBmb3JiaWRkZW4sIGFzIHdpbGwKK21vbm9wb2xpc2luZyB0aGUgcmVzb3VyY2VzIG9mIGFuIGV2b2x2aW5nIGNyZWF0aW9uIGZvciB0aGUgYmVuZWZpdCBvZiBhIGZldy4KKworVGhlIEZyZWUgQXJ0IExpY2Vuc2UgYWR2b2NhdGVzIGFuIGVjb25vbXkgYXBwcm9wcmlhdGUgZm9yIGFydCwgYmFzZWQgb24KK3NoYXJpbmcsIGV4Y2hhbmdlIGFuZCBqb3lmdWwgZ2l2aW5nLiBXaGF0IGNvdW50cyBpbiBhcnQgaXMgYWxzbyBhbmQgbW9zdGx5IHdoYXQKK2lzIG5vdCBjb3VudGVkLgorCistIFdoZW4gdG8gdXNlIHRoZSBGcmVlIEFydCBMaWNlbnNlID8KKworSXQgaXMgbm90IHRoZSBnb2FsIG9mIHRoZSBGcmVlIEFydCBMaWNlbnNlIHRvIGVsaW1pbmF0ZSBjb3B5cmlnaHQgb3IgYXV0aG9yJ3MKK3JpZ2h0cy4gUXVpdGUgdGhlIG9wcG9zaXRlLCBpdCBpcyBhYm91dCByZWZvcm11bGF0aW5nIHRoZSByZWxldmFuY2Ugb2YgdGhlc2UKK3JpZ2h0cyB3aGlsZSB0YWtpbmcgdG9kYXkncyBlbnZpcm9ubWVudCBpbnRvIGFjY291bnQuIEl0IGlzIGFib3V0IHRoZSByaWdodCB0bworZnJlZWRvbSBvZiBtb3ZlbWVudCwgdG8gZnJlZSBjb3B5aW5nIGFuZCB0byBmcmVlIHRyYW5zZm9ybWF0aW9uIG9mIHdvcmtzIG9mCithcnQuIFRoZSByaWdodCB0byB3b3JrIGluIGZyZWVkb20gZm9yIGFydCBhbmQgYXJ0aXN0cy4KKworMSAvIEVhY2ggdGltZSB5b3Ugd2FudCB0byB1c2Ugb3IgcHV0IHRoaXMgcmlnaHQgaW50byBwcmFjdGljZSwgdXNlIHRoZSBGcmVlIEFydAorTGljZW5zZS4KKworMiAvIEVhY2ggdGltZSB5b3Ugd2FudCB0byBjcmVhdGUgd29ya3Mgd2hpY2ggY2FuIGV2b2x2ZSBhbmQgYmUgZnJlZWx5IGNvcGllZCwKK2ZyZWVseSBkaXN0cmlidXRlZCBhbmQgZnJlZWx5IHRyYW5zZm9ybWVkOiB1c2UgdGhlIEZyZWUgQXJ0IExpY2Vuc2UuCisKKzMgLyBFYWNoIHRpbWUgeW91IHdhbnQgdG8gaGF2ZSB0aGUgcG9zc2liaWxpdHkgb2YgY29weWluZywgZGlzdHJpYnV0aW5nIG9yCit0cmFuc2Zvcm1pbmcgYSB3b3JrOiBjaGVjayB0aGF0IGl0IGlzIHVuZGVyIEZyZWUgQXJ0IExpY2Vuc2UuIElmIGl0IGlzIG5vdCwgeW91CithcmUgbGlhYmxlIHRvIGJlIGJyZWFraW5nIHRoZSBsYXcuCisKKy0gVG8gd2hpY2ggdHlwZXMgb2YgYXJ0IGNhbiB0aGUgRnJlZSBBcnQgTGljZW5zZSBiZSBhcHBsaWVkPworCitUaGlzIGxpY2Vuc2UgY2FuIGJlIGFwcGxpZWQgdG8gZGlnaXRhbCBhcyB3ZWxsIGFzIHRvIG5vbi1kaWdpdGFsIGFydC4gSXQgd2FzCitib3JuIG91dCBvZiBvYnNlcnZhdGlvbiBvZiB0aGUgd29ybGQgb2YgZnJlZSBzb2Z0d2FyZSBhbmQgdGhlIEludGVybmV0LCBidXQgaXRzCithcHBsaWNhYmlsaXR5IGlzIG5vdCBsaW1pdGVkIHRvIHRoZSBkaWdpdGFsIG1lZGlhLiBZb3UgY2FuIHB1dCBhIHBhaW50aW5nLCBhCitub3ZlbCwgYSBzY3VscHR1cmUsIGEgZHJhd2luZywgYSBwaWVjZSBvZiBtdXNpYywgYSBwb2VtLCBhbiBpbnN0YWxsYXRpb24sIGEKK3ZpZGVvLCBhIGZpbG0sIGEgcmVjaXBlLCBhIENELXJvbSwgYSBXZWIgc2l0ZSwgb3IgYSBwZXJmb3JtYW5jZSB1bmRlciB0aGUgRnJlZQorQXJ0IExpY2Vuc2UsIGluIHNob3J0IGFueSBjcmVhdGlvbiB3aGljaCBoYXMgc29tZSBjbGFpbSB0byBiZSBhIHdvcmsgb2YgYXJ0LgorCitUaGlzIGxpY2Vuc2UgaGFzIGEgaGlzdG9yeTogaXQgd2FzIGJvcm4gYXQgdGhlIG1lZXRpbmcgIiBDb3B5bGVmdCBBdHRpdHVkZSAiCit3aGljaCB0b29rIHBsYWNlIGF0ICJBY2PDqHMgTG9jYWwiIGFuZCAiUHVibGljIiBpbiBQYXJpcyBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZQoreWVhciAyMDAwLiBGb3IgdGhlIGZpcnN0IHRpbWUsIGl0IGJyb3VnaHQgY29tcHV0ZXIgc3BlY2lhbGlzdHMgYW5kIGZyZWV3YXJlCithY3RpdmlzdHMgdG9nZXRoZXIgd2l0aCBjb250ZW1wb3JhcnkgYXJ0aXN0cyBhbmQgbWVtYmVycyBvZiB0aGUgYXJ0IHdvcmxkLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvR0RMUyBiL2xpY2Vuc2VzL0dETFMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI1NDkwOAotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0dETFMKQEAgLTAsMCArMSwyNDggQEAKKyBNT05BU0ggVU5JVkVSU0lUWQorIFNDSE9PTCBPRiBDT01QVVRFUiBTQ0lFTkNFIEFORCBTT0ZUV0FSRSBFTkdJTkVFUklORworIEVMRUNUUk9OSUMgRElDVElPTkFSWSBSRVNFQVJDSCBBTkQgREVWRUxPUE1FTlQgR1JPVVAKKyAKKyBHRU5FUkFMIERJQ1RJT05BUlkgTElDRU5DRSBTVEFURU1FTlQKKyBDb3B5cmlnaHQgKEMpIDIwMDMgVGhlIEVsZWN0cm9uaWMgRGljdGlvbmFyeSBSZXNlYXJjaCBhbmQgRGV2ZWxvcG1lbnQKK0dyb3VwLCBNb25hc2ggVW5pdmVyc2l0eS4KKworRURSREcgSG9tZSBQYWdlCisKKzEuIEludHJvZHVjdGlvbgorCitJbiBNYXJjaCAyMDAwLCBKYW1lcyBXaWxsaWFtIEJyZWVuIGFzc2lnbmVkIG93bmVyc2hpcCBvZiB0aGUgY29weXJpZ2h0IG9mCit0aGUgZGljdGlvbmFyeSBmaWxlcyBhc3NlbWJsZWQsIGNvb3JkaW5hdGVkIGFuZCBlZGl0ZWQgYnkgaGltIHRvIHRoZSBUaGUKK0VsZWN0cm9uaWMgRGljdGlvbmFyeSBSZXNlYXJjaCBhbmQgRGV2ZWxvcG1lbnQgR3JvdXAgYXQgTW9uYXNoIFVuaXZlcnNpdHkKKyhoZXJlYWZ0ZXIgInRoZSBHcm91cCIpLCBvbiB0aGUgdW5kZXJzdGFuZGluZyB0aGF0IHRoZSBHcm91cCB3aWxsIGZvc3RlciB0aGUKK2RldmVsb3BtZW50IG9mIHRoZSBkaWN0aW9uYXJ5IGZpbGVzLCBhbmQgd2lsbCB1dGlsaXplIGFsbCBtb25pZXMgcmVjZWl2ZWQKK2ZvciB1c2Ugb2YgdGhlIGZpbGVzIGZvciB0aGUgZnVydGhlciBkZXZlbG9wbWVudCBvZiB0aGUgZmlsZXMsIGFuZCBmb3IKK3Jlc2VhcmNoIGludG8gY29tcHV0ZXIgbGV4aWNvZ3JhcGh5IGFuZCBlbGVjdHJvbmljIGRpY3Rpb25hcmllcy4KKworVGhpcyBkb2N1bWVudCBvdXRsaW5lcyB0aGUgbGljZW5jZSBhcnJhbmdlbWVudCBwdXQgaW4gcGxhY2UgYnkgVGhlIEdyb3VwIGZvcgordXNhZ2Ugb2YgdGhlIGZpbGVzLiBJdCByZXBsYWNlcyBhbGwgcHJldmlvdXMgY29weXJpZ2h0IGFuZCBsaWNlbmNlCitzdGF0ZW1lbnRzIGFwcGx5aW5nIHRvIHRoZSBmaWxlcy4KKworMi4gQXBwbGljYXRpb24KKworVGhpcyBsaWNlbmNlIHN0YXRlbWVudCBhbmQgY29weXJpZ2h0IG5vdGljZSBhcHBsaWVzIHRvIHRoZSBmb2xsb3dpbmcKK2RpY3Rpb25hcnkgZmlsZXMsIHRoZSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMsIGFuZCBhbnkgZGF0YSBmaWxlcword2hpY2ggYXJlIGRlcml2ZWQgZnJvbSB0aGVtLgorCisgICAgKgorCQorCSAgICAgIEpNRElDVCAtIEphcGFuZXNlLU11bHRpbGluZ3VhbCBEaWN0aW9uYXJ5IEZpbGUgLSB0aGUgSmFwYW5lc2UgYW5kCitFbmdsaXNoIGNvbXBvbmVudHMgKHRoZSBHZXJtYW4sIEZyZW5jaCBhbmQgUnVzc2lhbiB0cmFuc2xhdGlvbmFsIGVxdWl2YWxlbnRzCithcmUgY292ZXJlZCBieSBzZXBhcmF0ZSBjb3B5cmlnaHQgaGVsZCBieSB0aGUgY29tcGlsZXJzIG9mIHRoYXQgbWF0ZXJpYWwuKQorICAgICoKKwkKKwkgICAgICBFRElDVCAtIEphcGFuZXNlLUVuZ2xpc2ggRWxlY3Ryb25pYyBESUNUaW9uYXJ5IEZpbGUKKwkJICAgICAgKgorCQkJICAKKwkJCSAgICAgICAgRU5BTURJQ1QgLSBKYXBhbmVzZSBOYW1lcyBGaWxlCisJCQkJCSAgICAqCisJCQkJCQkKKwkJCQkJCSAgICAgIENPTVBESUMgLSBKYXBhbmVzZS1FbmdsaXNoIENvbXB1dGluZyBhbmQKK1RlbGVjb21tdW5pY2F0aW9ucyBUZXJtaW5vbG9neSBGaWxlCisgICAgKgorCQorCSAgICAgIEtBTkpJRElDIC0gRmlsZSBvZiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgNiwzNTUgS2FuamkgaW4gdGhlIEpJUyBYCiswMjA4IFN0YW5kYXJkIChzcGVjaWFsIGNvbmRpdGlvbnMgYXBwbHkpCisgICAgKgorCQorCSAgICAgIEtBTkpEMjEyIC0gRmlsZSBvZiBJbmZvcm1hdGlvbiBhYm91dCB0aGUgNSw4MDEgU3VwcGxlbWVudGFyeSBLYW5qaQoraW4gdGhlIEpJUyBYIDAyMTIgU3RhbmRhcmQKKyAgICAqCisJCisJICAgICAgRURJQ1QtUiAtIHJvbWFuaXplZCB2ZXJzaW9uIG9mIHRoZSBFRElDVCBmaWxlLiAoTkI6IHRoaXMgZmlsZSBoYXMKK2JlZW4gd2l0aGRyYXduIGZyb20gY2lyY3VsYXRpb24sIGFuZCBhbGwgc2l0ZXMgY2FycnlpbmcgaXQgYXJlIHJlcXVlc3RlZCB0bworcmVtb3ZlIHRoZWlyIGNvcGllcy4pCisKK0NvcHlyaWdodCBvdmVyIHRoZSBkb2N1bWVudHMgY292ZXJlZCBieSB0aGlzIHN0YXRlbWVudCBpcyBoZWxkIGJ5IEphbWVzCitXaWxsaWFtIEJSRUVOIGFuZCBUaGUgRWxlY3Ryb25pYyBEaWN0aW9uYXJ5IFJlc2VhcmNoIGFuZCBEZXZlbG9wbWVudCBHcm91cAorYXQgTW9uYXNoIFVuaXZlcnNpdHkuCisKKzMuIFVzYWdlLCBDb3B5aW5nIGFuZCBEaXN0cmlidXRpb24gUGVybWlzc2lvbiBhbmQgUmVzdHJpY3Rpb25zCisKK0FueSBwZXJzb24gb3Igb3JnYW5pemF0aW9uIGluIHBvc3Nlc3Npb24gb2YgYSBjb3B5IG9mIGFueSBvZiB0aGUgZmlsZXMKK2NvdmVyZWQgYnkgdGhpcyBzdGF0ZW1lbnQsIHdoZXRoZXIgdGhleSBoYXZlIHJlY2VpdmVkIHRoZSBjb3B5IHZpYSBmcmVlCitkaXN0cmlidXRpb24gb3IgcHVyY2hhc2U6CisKKyAgIDEuCisgICAKKyAgICAgICAgIG11c3QgYXMgcGFydCBvZiB0aGUgcmVjZWl2aW5nIG9mIHRoZSBjb3B5IHVuZGVydGFrZSB0byBiZSBib3VuZCBieQorYWxsIHRoZSBjb25kaXRpb25zIGluIHRoaXMgZG9jdW1lbnQgcmVsYXRpbmcgdG8gdGhlIGRpc3RyaWJ1dGlvbiBvciB1c2FnZSBvZgordGhlIGZpbGVzLgorCisgICAyLgorICAgCisgICAgICAgICBtdXN0IHVuZGVydGFrZSBub3QgdG8gYXNzZXJ0IGNvcHlyaWdodCBvdmVyIGFueSBwb3J0aW9uIG9mIHRoZSBmaWxlcy4KKwkJIAorCQkgICAgMy4KKwkJCQorCQkJICAgICAgbWF5IHVzZSB0aGUgZmlsZSBmb3IgcGVyc29uYWwgcHVycG9zZXMgc3VjaCBhcyB0byBhc3Npc3QKK3dpdGggcmVhZGluZyB0ZXh0cywgcmVzZWFyY2gsIHRyYW5zbGF0aW9uIHNlcnZpY2VzLCBldGMuCisKKyAgIDQuCisgICAKKyAgICAgICAgIG1heSBzdXBwbHkgZXh0cmFjdHMgb3Igc21hbGwgcG9ydGlvbnMgb2YgdGhlIGZpbGVzIHRvIG90aGVyIHBlcnNvbnMKK29yIG9yZ2FuaXphdGlvbnMgaW4gdGhlIGZvcm0gb2Ygd3JpdHRlbiBkb2N1bWVudHMsIGVsZWN0cm9uaWMgbWFpbCwgZXRjLgorCisgICA1LgorICAgCisgICAgICAgICBtYXkgbWFrZSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlc2UgZmlsZXMgcHJvdmlkZWQgdGhlCitmdWxsIGRvY3VtZW50YXRpb24gb2YgdGhlIGZpbGVzIGFuZCB0aGlzIGNvcHlyaWdodCBub3RpY2UgYW5kIHBlcm1pc3Npb24KK25vdGljZSBhcmUgZGlzdHJpYnV0ZWQgd2l0aCBhbGwgY29waWVzLgorCisgICA2LgorICAgCisgICAgICAgICBtYXkgcGxhY2UgY29waWVzIG9mIHRoZXNlIGZpbGVzIG9uIFdXVywgZnRwIGFuZCBlcXVpdmFsZW50IHNlcnZlcnMKK2ZvciBzdWJzZXF1ZW50IGRpc3RyaWJ1dGlvbiBwcm92aWRlZCB0aGUgZnVsbCBkb2N1bWVudGF0aW9uIG9mIHRoZSBmaWxlcyBhbmQKK3RoaXMgY29weXJpZ2h0IG5vdGljZSBhbmQgcGVybWlzc2lvbiBub3RpY2UgYXJlIGFsc28gbWFkZSBhdmFpbGFibGUgb24gdGhlCitzZXJ2ZXJzLCBhbmQgYXJlIGdpdmVuIGVxdWl2YWxlbnQgbm90aWZpY2F0aW9uIHRvIHBvdGVudGlhbCBkb3duLWxvYWRlcnMgb2YKK3RoZSBmaWxlcy4gRm9yIFdXVyBkaXN0cmlidXRpb24sIHRoZXJlIG11c3QgYmUgbGlua3MgdG8gZWl0aGVyIGxvY2FsIGNvcGllcworb2YgdGhlIGRvY3VtZW50YXRpb24gYW5kIGxpY2VuY2UgZmlsZXMgb3IgdG8gdGhlIGxvY2F0aW9ucyBvZiB0aGUgZmlsZXMgYXQKK01vbmFzaCBVbml2ZXJzaXR5LCBhbmQgYWNrbm93bGVkZ2VtZW50IG11c3QgYmUgbWFkZSBvZiB0aGUgc291cmNlIG9mIHRoZQorZmlsZXMuCisKKyAgIDcuCisgICAKKyAgICAgICAgIG1heSBtYWtlIGFuZCBkaXN0cmlidXRlIGV4dHJhY3RzIG9yIHN1YnNldHMgb2YgdGhlIGZpbGVzLCBvciBmaWxlcworaW4gb3RoZXIgZm9ybWF0cyBhbmQgY29kaW5ncyBjb250YWluaW5nIG1hdGVyaWFsIHNlbGVjdGVkIGZyb20gdGhlIGZpbGVzLAordW5kZXIgdGhlIHNhbWUgY29uZGl0aW9ucyBhcHBseWluZyB0byB2ZXJiYXRpbSBjb3BpZXMuIFdoZXJlIGEgc3Vic2V0IG9mIGEKK2ZpbGUgaXMgYmVpbmcgbWFkZSwgZWl0aGVyIGJ5IHJlZHVjaW5nIHRoZSBudW1iZXIgb2YgZW50cmllcyBvciBieSByZWR1Y2luZwordGhlIGFtb3VudCBvZiBpbmZvcm1hdGlvbiBpbiBlbnRyaWVzIG9yIGJvdGgsIHRoZSBuYXR1cmUgb2YgdGhlIHN1YnNldCBtdXN0CitiZSBtYWRlIGNsZWFyIGluIGRvY3VtZW50YXRpb24gYWNjb21wYW55aW5nIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHN1YnNldC4KKworICAgOC4KKyAgIAorICAgICAgICAgbXVzdCBlaXRoZXIgbWFrZSBldmVyeSBlbmRlYXZvdXIgdG8gZW5zdXJlIHRoYXQgdGhlIHZlcnNpb25zIG9mIHRoZQorZmlsZXMgdGhleSBkaXN0cmlidXRlIGFyZSB0aGUgbW9zdCByZWNlbnQgYXZhaWxhYmxlLCBvciBtdXN0IG1ha2UgdGhlCit2ZXJzaW9uIGFuZCBkYXRlIGNsZWFyIGFuZCBwcm9taW5lbnQgaW4gdGhlaXIgZG9jdW1lbnRhdGlvbiwgV1dXIHBhZ2UsIGV0Yy4KK2FuZCBzdXBwbHkgaW5mb3JtYXRpb24gYXMgdG8gd2hlcmUgYW5kIGhvdyB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbiBtYXkgYmUKK29idGFpbmVkLgorCisgICA5LgorICAgCisgICAgICAgICBtYXkgdHJhbnNsYXRlIGVsZW1lbnRzIG9mIHRoZSBmaWxlcyBpbnRvIG90aGVyIGxhbmd1YWdlcywgYW5kIHRvCittYWtlIGFuZCBkaXN0cmlidXRlIGNvcGllcyBvZiB0aG9zZSB0cmFuc2xhdGlvbnMgdW5kZXIgdGhlIHNhbWUgY29uZGl0aW9ucworYXBwbHlpbmcgdG8gdmVyYmF0aW0gY29waWVzLgorCisgIDEwLgorICAKKyAgICAgICAgbWF5IHVzZSB0aGVzZSBmaWxlcyBhcyBwYXJ0IG9mLCBvciBpbiBhc3NvY2lhdGlvbiB3aXRoIGEgc29mdHdhcmUKK3BhY2thZ2Ugb3Igc3lzdGVtLiBGdWxsIGFja25vd2xlZGdlbWVudCBvZiB0aGUgc291cmNlIG9mIHRoZSBmaWxlcyBtdXN0IGJlCittYWRlIGJvdGggaW4gdGhlIHByb21vdGlvbmFsIG1hdGVyaWFsLCBXV1cgcGFnZXMgYW5kIHNvZnR3YXJlIGRvY3VtZW50YXRpb24sCithbmQgd2hlcmUgdGhlIGZpbGVzIHBsYXkgYSBtYWpvciBwYXJ0IGluIHRoZSBwYWNrYWdlLCBlLmcuIGluIHRoZSBjYXNlIG9mCit0aGUgcGFja2FnZSBiZWluZyBhIGRpY3Rpb25hcnkgc3lzdGVtIGJhc2VkIG9uIHRoZSBmaWxlcywgcHJvbWluZW50CityZWZlcmVuY2UgdG8gdGhlIHNvdXJjZSBhbmQgc3RhdHVzIG9mIHRoZSBmaWxlcyBtdXN0IGJlIG1hZGUgb24gYW55IEdVSQorc2NyZWVucywgZXRjLiBhc3NvY2lhdGVkIHdpdGggdXNpbmcgdGhlIGZpbGVzLiBJbiB0aGUgY2FzZSBvZiB0aGUgRURJQ1QsCitKTWRpY3QgYW5kIEtBTkpJRElDIGZpbGVzLCB0aGUgZm9sbG93aW5nIFVSTHMgbXVzdCBiZSB1c2VkIG9yIHF1b3RlZDoKKyAgICAgICAgICAqIGh0dHA6Ly93d3cuY3NzZS5tb25hc2guZWR1LmF1L35qd2IvZWRpY3QuaHRtbAorICAgICAgICAgICogaHR0cDovL3d3dy5jc3NlLm1vbmFzaC5lZHUuYXUvfmp3Yi9qbWRpY3QuaHRtbAorICAgICAgICAgICogaHR0cDovL3d3dy5jc3NlLm1vbmFzaC5lZHUuYXUvfmp3Yi9rYW5qaWRpYy5odG1sCisJCQkJCQkJCQkJCQkJCQkJICAKKyAgIDExLgorCQkJCQkJCQkJCQkJCQkJCQkKKworbWF5IHB1Ymxpc2ggYWxsIG9yIHBhcnQgb2YgdGhlIGZpbGVzIG9uIHBhcGVyIG9yIGRpZ2l0YWwgbWVkaWEgc3VjaCBhcworQ0QtUk9NLCBwcm92aWRlZCBjbGVhciBhbmQgcHJvbWluZW50IGFja25vd2xlZGdlbWVudCBvZiB0aGUgc291cmNlIGlzIG1hZGUKK2luIHRoZSBwdWJsaWNhdGlvbi4KKworTm90ZSB0aGF0IGluIGFsbCBjYXNlcywgdGhlIGFkZGl0aW9uIG9mIG1hdGVyaWFsIHRvIHRoZSBmaWxlcyBvciB0byBleHRyYWN0cworZnJvbSB0aGUgZmlsZXMgZG9lcyBub3QgcmVtb3ZlIG9yIGluIGFueSB3YXkgZGltaW5pc2ggdGhlIEdyb3VwJ3MgY29weXJpZ2h0CitvdmVyIHRoZSBmaWxlcy4KKworTm90ZSBhbHNvIHRoYXQgdGhlcmUgaXMgbm8gcmVzdHJpY3Rpb24gcGxhY2VkIG9uIGNvbW1lcmNpYWwgdXNlIG9mIHRoZQorZmlsZXMuIFdoZXJlIHVzZSBvZiB0aGUgZmlsZXMgcmVzdWx0cyBpbiBhIGZpbmFuY2lhbCByZXR1cm4gdG8gdGhlIHVzZXIsIGl0CitpcyBzdWdnZXN0ZWQgdGhhdCB0aGUgdXNlciBtYWtlIGEgZG9uYXRpb24gdG8gdGhlIEdyb3VwIHRvIGFzc2lzdCB3aXRoIHRoZQorY29udGludWVkIGRldmVsb3BtZW50IG9mIHRoZSBmaWxlcy4KKworNC4gV2FycmFudHkgYW5kIExpYWJpbGl0eQorCitXaGlsZSBldmVyeSBlZmZvcnQgaGFzIGJlZW4gbWFkZSB0byBlbnN1cmUgdGhlIGFjY3VyYWN5IG9mIHRoZSBpbmZvcm1hdGlvbgoraW4gdGhlIGZpbGVzLCBpdCBpcyBwb3NzaWJsZSB0aGF0IGVycm9ycyBtYXkgc3RpbGwgYmUgaW5jbHVkZWQuIFRoZSBmaWxlcworYXJlIG1hZGUgYXZhaWxhYmxlIHdpdGhvdXQgYW55IHdhcnJhbnR5IHdoYXRzb2V2ZXIgYXMgdG8gdGhlaXIgYWNjdXJhY3kgb3IKK3N1aXRhYmlsaXR5IGZvciBhIHBhcnRpY3VsYXIgYXBwbGljYXRpb24uCisKK0FueSBpbmRpdmlkdWFsIG9yIG9yZ2FuaXphdGlvbiBtYWtpbmcgdXNlIG9mIHRoZSBmaWxlcyBtdXN0IGFncmVlOgorCisgICAxLgorICAgCisgICAgICAgICB0byBhc3N1bWUgYWxsIGxpYWJpbGl0eSBmb3IgdGhlIHVzZSBvciBtaXN1c2Ugb2YgdGhlIGZpbGVzLCBhbmQKK211c3QgYWdyZWUgbm90IHRvIGhvbGQgTW9uYXNoIFVuaXZlcnNpdHkgb3IgdGhlIEdyb3VwIGxpYWJsZSBmb3IgYW55IGFjdGlvbnMKK29yIGV2ZW50cyByZXN1bHRpbmcgZnJvbSB1c2Ugb2YgdGhlIGZpbGVzLgorCisgICAyLgorICAgCisgICAgICAgICB0byByZWZyYWluIGZyb20gYnJpbmdpbmcgYWN0aW9uIG9yIHN1aXQgb3IgY2xhaW0gYWdhaW5zdCBNb25hc2gKK1VuaXZlcnNpdHkgb3IgdGhlIEdyb3VwIG9uIHRoZSBiYXNpcyBvZiB0aGUgdXNlIG9mIHRoZSBmaWxlcywgb3IgYW55CitpbmZvcm1hdGlvbiBpbmNsdWRlZCBpbiB0aGUgZmlsZXMuCisKKyAgIDMuCisgICAKKyAgICAgICAgIHRvIGluZGVtbmlmeSBNb25hc2ggVW5pdmVyc2l0eSBvciB0aGUgR3JvdXAgaW4gdGhlIGNhc2Ugb2YgYWN0aW9uCitieSBhIHRoaXJkIHBhcnR5IG9uIHRoZSBiYXNpcyBvZiB0aGUgdXNlIG9mIHRoZSBmaWxlcywgb3IgYW55IGluZm9ybWF0aW9uCitpbmNsdWRlZCBpbiB0aGUgZmlsZXMuCisKKzUuIENvcHlyaWdodAorCitFdmVyeSBlZmZvcnQgaGFzIGJlZW4gbWFkZSBpbiB0aGUgY29tcGlsYXRpb24gb2YgdGhlc2UgZmlsZXMgdG8gZW5zdXJlIHRoYXQKK3RoZSBjb3B5cmlnaHQgb2Ygb3RoZXIgY29tcGlsZXJzIG9mIGRpY3Rpb25hcmllcyBhbmQgbGV4aWNvZ3JhcGhpYyBtYXRlcmlhbAoraGFzIG5vdCBiZWVuIGluZnJpbmdlZC4gVGhlIEdyb3VwIGFzc2VydHMgaXRzIGludGVudGlvbiB0byByZWN0aWZ5CitpbW1lZGlhdGVseSBhbnkgYnJlYWNoIG9mIGNvcHlyaWdodCBicm91Z2h0IHRvIGl0cyBhdHRlbnRpb24uCisKK0FueSBpbmRpdmlkdWFsIG9yIG9yZ2FuaXphdGlvbiBpbiBwb3NzZXNzaW9uIG9mIGNvcGllcyBvZiB0aGUgZmlsZXMsIHVwb24KK2JlY29taW5nIGF3YXJlIHRoYXQgYSBwb3NzaWJsZSBjb3B5cmlnaHQgaW5mcmluZ2VtZW50IG1heSBiZSBwcmVzZW50IGluIHRoZQorZmlsZXMsIG11c3QgdW5kZXJ0YWtlIHRvIGNvbnRhY3QgdGhlIEdyb3VwIGltbWVkaWF0ZWx5IHdpdGggZGV0YWlscyBvZiB0aGUKK3Bvc3NpYmxlIGluZnJpbmdlbWVudC4KKworNi4gUHJpb3IgUGVybWlzc2lvbgorCitBbGwgcGVybWlzc2lvbnMgZm9yIHVzZSBvZiB0aGUgZmlsZXMgZ3JhbnRlZCBieSBKYW1lcyBXaWxsaWFtIEJyZWVuIHByaW9yIHRvCitNYXJjaCAyMDAwIHdpbGwgYmUgaG9ub3VyZWQgYW5kIG1haW50YWluZWQsIGhvd2V2ZXIgdGhlIHBsYWNpbmcgb2YgdGhlCitLQU5KRDIxMiBhbmQgRURJQ1RIIGZpbGVzIHVuZGVyIHRoZSBHTlUgR1BMIGhhcyBiZWVuIHdpdGhkcmF3biBhcyBvZiAyNQorTWFyY2ggMjAwMC4KKworNy4gU3BlY2lhbCBDb25kaXRpb25zIGZvciB0aGUgS0FOSklESUMgRmlsZQorCitJbiBhZGRpdGlvbiB0byBsaWNlbnNpbmcgYXJyYW5nZW1lbnRzIGRlc2NyaWJlZCBhYm92ZSwgdGhlIGZvbGxvd2luZworYWRkaXRpb25hbCBjb25kaXRpb25zIGFwcGx5IHRvIHRoZSBLQU5KSURJQyBmaWxlLgorCitUaGUgZm9sbG93aW5nIHBlb3BsZSBoYXZlIGdyYW50ZWQgcGVybWlzc2lvbiBmb3IgbWF0ZXJpYWwgZm9yIHdoaWNoIHRoZXkKK2hvbGQgY29weXJpZ2h0IHRvIGJlIGluY2x1ZGVkIGluIHRoZSBmaWxlcywgYW5kIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBhYm92ZQorY29uZGl0aW9ucywgd2hpbGUgcmV0YWluaW5nIHRoZWlyIGNvcHlyaWdodCBvdmVyIHRoYXQgbWF0ZXJpYWw6CisKK0phY2sgSEFMUEVSTjogVGhlIFNLSVAgY29kZXMgYW5kIEZyZXF1ZW5jeSBjb2RlcyBpbiB0aGUgS0FOSklESUMgZmlsZS4KKworV2l0aCByZWdhcmQgdG8gdGhlIEZyZXF1ZW5jeSBjb2RlcywgTXIgSGFscGVybiBoYXMgc3RhdGVkIGFzIGZvbGxvd3M6ICJUaGUKK2NvbW1lcmNpYWwgdXRpbGl6YXRpb24gb2YgdGhlIGZyZXF1ZW5jeSBudW1iZXJzIGlzIHByb2hpYml0ZWQgd2l0aG91dAord3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gSmFjayBIYWxwZXJuLiBVc2UgYnkgaW5kaXZpZHVhbHMgYW5kIHNtYWxsIGdyb3VwcworZm9yIHJlZmVyZW5jZSBhbmQgcmVzZWFyY2ggcHVycG9zZXMgaXMgcGVybWl0dGVkLCBvbiBjb25kaXRpb24gdGhhdAorYWNrbm93bGVkZ2VtZW50IG9mIHRoZSBzb3VyY2UgYW5kIHRoaXMgbm90aWNlIGFyZSBpbmNsdWRlZC4iCisKK1dpdGggcmVnYXJkIHRvIHRoZSBTS0lQIGNvZGVzLCBNciBIYWxwZXJuIGRyYXdzIHlvdXIgYXR0ZW50aW9uIHRvIHRoZQorc3RhdGVtZW50IGhlIGhhcyBwcmVwYXJlZCBvbiB0aGUgbWF0dGVyLgorCitDaHJpc3RpYW4gV0lUVEVSTiBhbmQgS29pY2hpIFlBU1VPS0E6IFRoZSBQaW55aW4gaW5mb3JtYXRpb24gaW4gdGhlIEtBTkpJRElDCitmaWxlLgorCitVcnMgQVBQOiB0aGUgRm91ciBDb3JuZXIgY29kZXMgYW5kIHRoZSBNb3JvaGFzaGkgaW5mb3JtYXRpb24gaW4gdGhlIEtBTkpJRElDCitmaWxlLgorCitNYXJrIFNQQUhOIGFuZCBXb2xmZ2FuZyBIQURBTUlUWktZOiB0aGUga2FuamkgZGVzY3JpcHRvcnMgZnJvbSB0aGVpcgorZGljdGlvbmFyeS4KKworQ2hhcmxlcyBNVUxMRVI6IHRoZSBLb3JlYW4gcmVhZGluZ3MuCisKK0pvc2VwaCBERSBST086IHRoZSBEZSBSb28gY29kZXMuCisKKzguIEVucXVpcmllcworCitBbGwgZW5xdWlyaWVzIHRvOgorCitUaGUgRWxlY3Ryb25pYyBEaWN0aW9uYXJ5IFJlc2VhcmNoIGFuZCBEZXZlbG9wbWVudCBHcm91cAorKEF0dG46IEFzc29jLiBQcm9mLiBKaW0gQnJlZW4pCitTY2hvb2wgb2YgQ29tcHV0ZXIgU2NpZW5jZSBhbmQgU29mdHdhcmUgRW5naW5lZXJpbmcKK01vbmFzaCBVbml2ZXJzaXR5CitDTEFZVE9OIFZJQyAzMTY4CitBVVNUUkFMSUEKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0dNR1BMIGIvbGljZW5zZXMvR01HUEwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDBjMzk4ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0dNR1BMCkBAIC0wLDAgKzEsMjEgQEAKK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKK21vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzCitwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUKK0xpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sIE1BCiswMjExMS0xMzA3LCBVU0EuCisKK0FzIGEgc3BlY2lhbCBleGNlcHRpb24sIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlIGdlbmVyaWNzIGZyb20KK3RoaXMgdW5pdCwgb3IgeW91IGxpbmsgdGhpcyB1bml0IHdpdGggb3RoZXIgZmlsZXMgdG8gcHJvZHVjZSBhbgorZXhlY3V0YWJsZSwgdGhpcyB1bml0IGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nCitleGVjdXRhYmxlIHRvIGJlIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBUaGlzCitleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlciBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUKK2V4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgUHVibGljIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9HUEwtMSBiL2xpY2Vuc2VzL0dQTC0xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNjhmMDIKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9HUEwtMQpAQCAtMCwwICsxLDI0OCBAQAorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICBWZXJzaW9uIDEsIEZlYnJ1YXJ5IDE5ODkKKworIENvcHlyaWdodCAoQykgMTk4OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICAgICAgICAgICAgICAgICAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCQkJICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2UgYWdyZWVtZW50cyBvZiBtb3N0IHNvZnR3YXJlIGNvbXBhbmllcyB0cnkgdG8ga2VlcCB1c2VycworYXQgdGhlIG1lcmN5IG9mIHRob3NlIGNvbXBhbmllcy4gIEJ5IGNvbnRyYXN0LCBvdXIgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGUKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uJ3MKK3NvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0byB1c2luZyBpdC4KK1lvdSBjYW4gdXNlIGl0IGZvciB5b3VyIHByb2dyYW1zLCB0b28uCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBTcGVjaWZpY2FsbHksIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGRlc2lnbmVkIHRvIG1ha2UKK3N1cmUgdGhhdCB5b3UgaGF2ZSB0aGUgZnJlZWRvbSB0byBnaXZlIGF3YXkgb3Igc2VsbCBjb3BpZXMgb2YgZnJlZQorc29mdHdhcmUsIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdCBpZiB5b3Ugd2FudCBpdCwKK3RoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3IGZyZWUKK3Byb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgYSBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0Cit5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorc291cmNlIGNvZGUuICBBbmQgeW91IG11c3QgdGVsbCB0aGVtIHRoZWlyIHJpZ2h0cy4KKworICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKworICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCithdXRob3JzJyByZXB1dGF0aW9ucy4KKworICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4KKwwKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworICAwLiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaAorY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUKK2Rpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUKKyJQcm9ncmFtIiwgYmVsb3csIHJlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbSIgbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSB3b3JrIGNvbnRhaW5pbmcgdGhlCitQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucy4gIEVhY2gKK2xpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3Mgc291cmNlCitjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZAorYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZAorZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcworR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OyBhbmQgZ2l2ZSBhbnkKK290aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4gIFlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mCit0cmFuc2ZlcnJpbmcgYSBjb3B5LgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24gb2YKK2l0LCBhbmQgY29weSBhbmQgZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgdW5kZXIgdGhlIHRlcm1zIG9mIFBhcmFncmFwaAorMSBhYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdAorICAgIHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZTsgYW5kCisKKyAgICBiKSBjYXVzZSB0aGUgd2hvbGUgb2YgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0CisgICAgaW4gd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyB0aGUgUHJvZ3JhbSBvciBhbnkgcGFydCB0aGVyZW9mLCBlaXRoZXIKKyAgICB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgdG8gYmUgbGljZW5zZWQgYXQgbm8gY2hhcmdlIHRvIGFsbAorICAgIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoZXhjZXB0CisgICAgdGhhdCB5b3UgbWF5IGNob29zZSB0byBncmFudCB3YXJyYW50eSBwcm90ZWN0aW9uIHRvIHNvbWUgb3IgYWxsCisgICAgdGhpcmQgcGFydGllcywgYXQgeW91ciBvcHRpb24pLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseSB3aGVuCisgICAgcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2ggaW50ZXJhY3RpdmUgdXNlCisgICAgaW4gdGhlIHNpbXBsZXN0IGFuZCBtb3N0IHVzdWFsIHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYSBub3RpY2UKKyAgICB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZSBhCisgICAgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIgdGhlc2UKKyAgICBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcyBHZW5lcmFsCisgICAgUHVibGljIExpY2Vuc2UuCisKKyAgICBkKSBZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYQorICAgIGNvcHksIGFuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4KKyAgICBleGNoYW5nZSBmb3IgYSBmZWUuCisKK01lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciBpbmRlcGVuZGVudCB3b3JrIHdpdGggdGhlIFByb2dyYW0gKG9yIGl0cworZGVyaXZhdGl2ZSkgb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcKK3RoZSBvdGhlciB3b3JrIHVuZGVyIHRoZSBzY29wZSBvZiB0aGVzZSB0ZXJtcy4KKwwKKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHBvcnRpb24gb3IgZGVyaXZhdGl2ZSBvZgoraXQsIHVuZGVyIFBhcmFncmFwaCAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitQYXJhZ3JhcGhzIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIGEpIGFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAgICBQYXJhZ3JhcGhzIDEgYW5kIDIgYWJvdmU7IG9yLAorCisgICAgYikgYWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKyAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHkgZnJlZSAoZXhjZXB0IGZvciBhIG5vbWluYWwgY2hhcmdlCisgICAgZm9yIHRoZSBjb3N0IG9mIGRpc3RyaWJ1dGlvbikgYSBjb21wbGV0ZSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlCisgICAgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgICAgUGFyYWdyYXBocyAxIGFuZCAyIGFib3ZlOyBvciwKKworICAgIGMpIGFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gd2hlcmUgdGhlCisgICAgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIGFsb25lLikKKworU291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yIG1ha2luZworbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIGZpbGUsIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zCithbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWluczsgYnV0LCBhcyBhIHNwZWNpYWwKK2V4Y2VwdGlvbiwgaXQgbmVlZCBub3QgaW5jbHVkZSBzb3VyY2UgY29kZSBmb3IgbW9kdWxlcyB3aGljaCBhcmUgc3RhbmRhcmQKK2xpYnJhcmllcyB0aGF0IGFjY29tcGFueSB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZQorZmlsZSBydW5zLCBvciBmb3Igc3RhbmRhcmQgaGVhZGVyIGZpbGVzIG9yIGRlZmluaXRpb25zIGZpbGVzIHRoYXQKK2FjY29tcGFueSB0aGF0IG9wZXJhdGluZyBzeXN0ZW0uCisKKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBkaXN0cmlidXRlIG9yIHRyYW5zZmVyIHRoZQorUHJvZ3JhbSBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KK0FueSBhdHRlbXB0IG90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGRpc3RyaWJ1dGUgb3IgdHJhbnNmZXIKK3RoZSBQcm9ncmFtIGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHRvIHVzZQordGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlLiAgSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZAorY29waWVzLCBvciByaWdodHMgdG8gdXNlIGNvcGllcywgZnJvbSB5b3UgdW5kZXIgdGhpcyBHZW5lcmFsIFB1YmxpYworTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMKK3JlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgNS4gQnkgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQKK29uIHRoZSBQcm9ncmFtKSB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgbGljZW5zZSB0byBkbyBzbywKK2FuZCBhbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLgorCisgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlIG9yaWdpbmFsCitsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvIHRoZXNlCit0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlciByZXN0cmljdGlvbnMgb24gdGhlCityZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorDAorICA3LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgbGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhlIGxpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLgorCisgIDguIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgordG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCitvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCitvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworCQkJICAgIE5PIFdBUlJBTlRZCisKKyAgOS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEwLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisMCisJQXBwZW5kaXg6IEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byBodW1hbml0eSwgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CitmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZQordGVybXMuCisKKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QgdG8KK2F0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkgY29udmV5Cit0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0IHRoZQorImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSAxOXl5ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMSwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICAgIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIDE5eHggbmFtZSBvZiBhdXRob3IKKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKworVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlCithcHByb3ByaWF0ZSBwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlCitjb21tYW5kcyB5b3UgdXNlIG1heSBiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93CitjJzsgdGhleSBjb3VsZCBldmVuIGJlIG1vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyCitwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZQorICBwcm9ncmFtIGBHbm9tb3Zpc2lvbicgKGEgcHJvZ3JhbSB0byBkaXJlY3QgY29tcGlsZXJzIHRvIG1ha2UgcGFzc2VzCisgIGF0IGFzc2VtYmxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGF0J3MgYWxsIHRoZXJlIGlzIHRvIGl0IQpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvR1BMLTErIGIvbGljZW5zZXMvR1BMLTErCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzZjRmYmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9HUEwtMSsKQEAgLTAsMCArMSwyIEBACitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAxIG9yIGFueSBsYXRlciB2ZXJzaW9uLgorU2VlIEdQTC0xLCBHUEwtMiwgb3IgR1BMLTMgZm9yIHRoZSBmdWxsIHRleHQgb2YgdGhlc2UgbGljZW5zZXMuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9HUEwtMiBiL2xpY2Vuc2VzL0dQTC0yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MTIxMDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9HUEwtMgpAQCAtMCwwICsxLDM0MCBAQAorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgICAgICAgICAgICAgICAgICAgIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKwkJCSAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlCitzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLiAgVGhpcworR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgdG8gYW55IG90aGVyIHByb2dyYW0gd2hvc2UgYXV0aG9ycyBjb21taXQgdG8KK3VzaW5nIGl0LiAgKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkKK3RoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluc3RlYWQuKSAgWW91IGNhbiBhcHBseSBpdCB0bworeW91ciBwcm9ncmFtcywgdG9vLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdQorZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdAoreW91IGhhdmUuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUKK3NvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIKK3JpZ2h0cy4KKworICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0IHRoZSBzb2Z0d2FyZSwgYW5kCisoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LAorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKworICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK3NvZnR3YXJlLiAgSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28KK3RoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gdGhlIG9yaWdpbmFsCithdXRob3JzJyByZXB1dGF0aW9ucy4KKworICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IHJlZGlzdHJpYnV0b3JzIG9mIGEgZnJlZQorcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nIHRoZQorcHJvZ3JhbSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55CitwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncyBmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorDAorCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6Cit0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQoraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCitXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCit5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorDAorVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgoraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwKK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgordGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CitkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKK29uIHRoZSBQcm9ncmFtLCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Cit5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgUHJvZ3JhbQord2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uIGEgdm9sdW1lIG9mCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwKK3VuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZgorU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucworICAgIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKyAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHksIGZvciBhIGNoYXJnZSBubyBtb3JlIHRoYW4geW91cgorICAgIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUKKyAgICBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlCisgICAgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYSBtZWRpdW0KKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBjKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHRoZSBvZmZlcgorICAgIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gIChUaGlzIGFsdGVybmF0aXZlIGlzCisgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoCisgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisKK1RoZSBzb3VyY2UgY29kZSBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGFuIGV4ZWN1dGFibGUgd29yaywgY29tcGxldGUgc291cmNlCitjb2RlIG1lYW5zIGFsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueQorYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvCitjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGV4ZWN1dGFibGUuICBIb3dldmVyLCBhcyBhCitzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUKK2FueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5Citmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZQorb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQKK2l0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKworSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZworYWNjZXNzIHRvIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudAorYWNjZXNzIHRvIGNvcHkgdGhlIHNvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzCitkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKK2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisMCisgIDQuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbQorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdAorb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCit2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCitIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlcgordGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2gKK3BhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCitkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBQcm9ncmFtIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvCit0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgdG8KK3RoaXMgTGljZW5zZS4KKworICA3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithbnkgcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvCithcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlcgorY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtLCB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisMCisgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwordGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uCisKKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgordG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCitvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCitvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworCQkJICAgIE5PIFdBUlJBTlRZCisKKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCitSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCitSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCitPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECitUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCitQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworDAorCSAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgUHJvZ3JhbXMKKworICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Citwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgdGhlIGJlc3Qgd2F5IHRvIGFjaGlldmUgdGhpcyBpcyB0byBtYWtlIGl0CitmcmVlIHNvZnR3YXJlIHdoaWNoIGV2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZSB1bmRlciB0aGVzZSB0ZXJtcy4KKworICBUbyBkbyBzbywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgcHJvZ3JhbS4gIEl0IGlzIHNhZmVzdAordG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKworCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworSWYgdGhlIHByb2dyYW0gaXMgaW50ZXJhY3RpdmUsIG1ha2UgaXQgb3V0cHV0IGEgc2hvcnQgbm90aWNlIGxpa2UgdGhpcword2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKKworICAgIEdub21vdmlzaW9uIHZlcnNpb24gNjksIENvcHlyaWdodCAoQykgeWVhciBuYW1lIG9mIGF1dGhvcgorICAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB0aGUgY29tbWFuZHMgeW91IHVzZSBtYXkKK2JlIGNhbGxlZCBzb21ldGhpbmcgb3RoZXIgdGhhbiBgc2hvdyB3JyBhbmQgYHNob3cgYyc7IHRoZXkgY291bGQgZXZlbiBiZQorbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmCituZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisKKyAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbQorICBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KKworICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5ODkKKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKworVGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbSBpbnRvCitwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91IG1heQorY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGggdGhlCitsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwKK1B1YmxpYyBMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvR1BMLTIrIGIvbGljZW5zZXMvR1BMLTIrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwMWI1ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9HUEwtMisKQEAgLTAsMCArMSwyIEBACitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyIG9yIGFueSBsYXRlciB2ZXJzaW9uLgorU2VlIEdQTC0yIG9yIEdQTC0zIGZvciB0aGUgZnVsbCB0ZXh0IG9mIHRoZXNlIGxpY2Vuc2VzLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvR1BMLTItd2l0aC1NeVNRTC1GTE9TUy1leGNlcHRpb24gYi9saWNlbnNlcy9HUEwtMi13aXRoLU15U1FMLUZMT1NTLWV4Y2VwdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNWUxNjE3Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvR1BMLTItd2l0aC1NeVNRTC1GTE9TUy1leGNlcHRpb24KQEAgLTAsMCArMSw0NDIgQEAKK015U1FMIEZMT1NTIExpY2Vuc2UgRXhjZXB0aW9uCisKK1RoZSBNeVNRTCBBQiBFeGNlcHRpb24gZm9yIEZyZWUvTGlicmUgYW5kIE9wZW4gU291cmNlIFNvZnR3YXJlLW9ubHkKK0FwcGxpY2F0aW9ucyBVc2luZyBNeVNRTCBDbGllbnQgTGlicmFyaWVzICh0aGUgIkZMT1NTIEV4Y2VwdGlvbiIpLgorCisKK0V4Y2VwdGlvbiBJbnRlbnQKK1dlIHdhbnQgc3BlY2lmaWVkIEZyZWUvTGlicmUgYW5kIE9wZW4gU291cmNlIFNvZnR3YXJlICgiRkxPU1MiKSBhcHBsaWNhdGlvbnMKK3RvIGJlIGFibGUgdG8gdXNlIHNwZWNpZmllZCBHUEwtbGljZW5zZWQgTXlTUUwgY2xpZW50IGxpYnJhcmllcyAodGhlCisiUHJvZ3JhbSIpIGRlc3BpdGUgdGhlIGZhY3QgdGhhdCBub3QgYWxsIEZMT1NTIGxpY2Vuc2VzIGFyZSBjb21wYXRpYmxlIHdpdGgKK3ZlcnNpb24gMiBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHRoZSAiR1BMIikuIAorCisKK0xlZ2FsIFRlcm1zIGFuZCBDb25kaXRpb25zCitBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB2ZXJzaW9uIDIuMCBvZiB0aGUKK0dQTDoKKworMC4gWW91IGFyZSBmcmVlIHRvIGRpc3RyaWJ1dGUgYSBEZXJpdmF0aXZlIFdvcmsgdGhhdCBpcyBmb3JtZWQgZW50aXJlbHkgZnJvbQorICAgdGhlIFByb2dyYW0gYW5kIG9uZSBvciBtb3JlIHdvcmtzIChlYWNoLCBhICJGTE9TUyBXb3JrIikgbGljZW5zZWQgdW5kZXIKKyAgIG9uZSBvciBtb3JlIG9mIHRoZSBsaWNlbnNlcyBsaXN0ZWQgYmVsb3cgaW4gc2VjdGlvbiAxLCBhcyBsb25nIGFzOgorCisgICAgYS4gWW91IG9iZXkgdGhlIEdQTCBpbiBhbGwgcmVzcGVjdHMgZm9yIHRoZSBQcm9ncmFtIGFuZCB0aGUgRGVyaXZhdGl2ZQorICAgICAgIFdvcmssIGV4Y2VwdCBmb3IgaWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoZSBEZXJpdmF0aXZlIFdvcmsgd2hpY2gKKyAgICAgICBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwgYW5kIHdoaWNoIGNhbiByZWFzb25hYmx5IGJlCisgICAgICAgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4gdGhlbXNlbHZlcywgCisKKyAgICBiLiBhbGwgaWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoZSBEZXJpdmF0aXZlIFdvcmsgd2hpY2ggYXJlIG5vdAorICAgICAgIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSwgYW5kIHdoaWNoIGNhbiByZWFzb25hYmx5IGJlIGNvbnNpZGVyZWQKKyAgICAgICBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4gdGhlbXNlbHZlcywKKworICAgICAgICAoaSkgYXJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gb25lIG9mIHRoZSBGTE9TUyBsaWNlbnNlcyBsaXN0ZWQKKyAgICAgICAgICAgIGJlbG93LCBhbmQKKyAgICAgICAgICAgCisgICAgICAgKGlpKSB0aGUgb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIG9mIHRob3NlIHNlY3Rpb25zIGFyZQorICAgICAgICAgICAgYWNjb21wYW5pZWQgYnkgdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorICAgICAgICAgICAgc291cmNlIGNvZGUgZm9yIHRob3NlIHNlY3Rpb25zIG9uIHRoZSBzYW1lIG1lZGl1bSBhbmQgdW5kZXIgdGhlCisgICAgICAgICAgICBzYW1lIEZMT1NTIGxpY2Vuc2UgYXMgdGhlIGNvcnJlc3BvbmRpbmcgb2JqZWN0IGNvZGUgb3IKKyAgICAgICAgICAgIGV4ZWN1dGFibGUgZm9ybXMgb2YgdGhvc2Ugc2VjdGlvbnMsIGFuZAorCisgICAgYy4gYW55IHdvcmtzIHdoaWNoIGFyZSBhZ2dyZWdhdGVkIHdpdGggdGhlIFByb2dyYW0gb3Igd2l0aCBhIERlcml2YXRpdmUKKyAgICAgICBXb3JrIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGluIGFjY29yZGFuY2UKKyAgICAgICB3aXRoIHRoZSBHUEwsIGNhbiByZWFzb25hYmx5IGJlIGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlCisgICAgICAgd29ya3MgaW4gdGhlbXNlbHZlcyB3aGljaCBhcmUgbm90IGRlcml2YXRpdmVzIG9mIGVpdGhlciB0aGUgUHJvZ3JhbSwKKyAgICAgICBhIERlcml2YXRpdmUgV29yayBvciBhIEZMT1NTIFdvcmsuCisKK0lmIHRoZSBhYm92ZSBjb25kaXRpb25zIGFyZSBub3QgbWV0LCB0aGVuIHRoZSBQcm9ncmFtIG1heSBvbmx5IGJlIGNvcGllZCwKK21vZGlmaWVkLCBkaXN0cmlidXRlZCBvciB1c2VkIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR1BMIG9yCithbm90aGVyIHZhbGlkIGxpY2Vuc2luZyBvcHRpb24gZnJvbSBNeVNRTCBBQi4KKworMS4gRkxPU1MgTGljZW5zZSBMaXN0CisKK0xpY2Vuc2UgbmFtZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24ocykvQ29weXJpZ2h0IERhdGUKK0FjYWRlbWljIEZyZWUgTGljZW5zZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjAKK0FwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMS4wLzEuMS8yLjAKK0FwcGxlIFB1YmxpYyBTb3VyY2UgTGljZW5zZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjAKK0FydGlzdGljIGxpY2Vuc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGcm9tIFBlcmwgNS44LjAKK0JTRCBsaWNlbnNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkp1bHkgMjIgMTk5OSIKK0NvbW1vbiBQdWJsaWMgTGljZW5zZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLjAKK0dOVSBMaWJyYXJ5IG9yICJMZXNzZXIiIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKExHUEwpICAgICAgICAgICAgICAgIDIuMC8yLjEKK0phYmJlciBPcGVuIFNvdXJjZSBMaWNlbnNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLjAKK01JVCBMaWNlbnNlIChBcyBsaXN0ZWQgaW4gZmlsZSBNSVQtTGljZW5zZS50eHQpICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0KK01vemlsbGEgUHVibGljIExpY2Vuc2UgKE1QTCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEuMC8xLjEKK09wZW4gU29mdHdhcmUgTGljZW5zZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjAKK1BIUCBMaWNlbnNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzLjAKK1B5dGhvbiBsaWNlbnNlIChDTlJJIFB5dGhvbiBMaWNlbnNlKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0KK1B5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uIExpY2Vuc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMi4xLjEKK1NsZWVweWNhdCBMaWNlbnNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMTk5OSIKK1czQyBMaWNlbnNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMSIKK1gxMSBMaWNlbnNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMjAwMSIKK1psaWIvbGlicG5nIExpY2Vuc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0KK1pvcGUgUHVibGljIExpY2Vuc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyLjAKKworRHVlIHRvIHRoZSBtYW55IHZhcmlhbnRzIG9mIHNvbWUgb2YgdGhlIGFib3ZlIGxpY2Vuc2VzLCB3ZSByZXF1aXJlIHRoYXQgYW55Cit2ZXJzaW9uIGZvbGxvdyB0aGUgMjAwMyB2ZXJzaW9uIG9mIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24ncyBGcmVlCitTb2Z0d2FyZSBEZWZpbml0aW9uIChodHRwOi8vd3d3LmdudS5vcmcvcGhpbG9zb3BoeS9mcmVlLXN3Lmh0bWwpIG9yIHZlcnNpb24KKzEuOSBvZiB0aGUgT3BlbiBTb3VyY2UgRGVmaW5pdGlvbiBieSB0aGUgT3BlbiBTb3VyY2UgSW5pdGlhdGl2ZQorKGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvZG9jcy9kZWZpbml0aW9uLnBocCkuCisKKzIuIERlZmluaXRpb25zCisKKyAgIGEuIFRlcm1zIHVzZWQsIGJ1dCBub3QgZGVmaW5lZCwgaGVyZWluIHNoYWxsIGhhdmUgdGhlIG1lYW5pbmcgcHJvdmlkZWQgaW4KKyAgICAgIHRoZSBHUEwuCisKKyAgIGIuIERlcml2YXRpdmUgV29yayBtZWFucyBhIGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3LgorCiszLiBBcHBsaWNhYmlsaXR5CisKK1RoaXMgRkxPU1MgRXhjZXB0aW9uIGFwcGxpZXMgdG8gYWxsIFByb2dyYW1zIHRoYXQgY29udGFpbiBhIG5vdGljZSBwbGFjZWQgYnkKK015U1FMIEFCIHNheWluZyB0aGF0IHRoZSBQcm9ncmFtIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcworRkxPU1MgRXhjZXB0aW9uLiAgSWYgeW91IGNyZWF0ZSBvciBkaXN0cmlidXRlIGEgd29yayB3aGljaCBpcyBhIERlcml2YXRpdmUKK1dvcmsgb2YgYm90aCB0aGUgUHJvZ3JhbSBhbmQgYW55IG90aGVyIHdvcmsgbGljZW5zZWQgdW5kZXIgdGhlIEdQTCwgdGhlbgordGhpcyBGTE9TUyBFeGNlcHRpb24gaXMgbm90IGF2YWlsYWJsZSBmb3IgdGhhdCB3b3JrOyB0aHVzLCB5b3UgbXVzdCByZW1vdmUKK3RoZSBGTE9TUyBFeGNlcHRpb24gbm90aWNlIGZyb20gdGhhdCB3b3JrIGFuZCBjb21wbHkgd2l0aCB0aGUgR1BMIGluIGFsbAorcmVzcGVjdHMsIGluY2x1ZGluZyBieSByZXRhaW5pbmcgYWxsIEdQTCBub3RpY2VzLiAgWW91IG1heSBjaG9vc2UgdG8KK3JlZGlzdHJpYnV0ZSBhIGNvcHkgb2YgdGhlIFByb2dyYW0gZXhjbHVzaXZlbHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHUEwgYnkKK3JlbW92aW5nIHRoZSBGTE9TUyBFeGNlcHRpb24gbm90aWNlIGZyb20gdGhhdCBjb3B5IG9mIHRoZSBQcm9ncmFtLCBwcm92aWRlZAordGhhdCB0aGUgY29weSBoYXMgbmV2ZXIgYmVlbiBtb2RpZmllZCBieSB5b3Ugb3IgYW55IHRoaXJkIHBhcnR5LiAgCisKKyRJZDogR1BMLTItd2l0aC1NeVNRTC1GTE9TUy1leGNlcHRpb24sdiAxLjEgMjAwNy8wNS8wNyAyMTowNTo0OSBiZXRlbGdldXNlIEV4cCAkCisKKwkJCUdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisJCSAgICAgICBWZXJzaW9uIDIsIEp1bmUgMTk5MQorCisgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgICAgICAgICAgICAgICAgICAgICA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisJCQkgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCit1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5Cit0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KK3lvdXIgcHJvZ3JhbXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CitpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCitncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCitzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCityaWdodHMuCisKKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisKKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCitzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCit0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorYXV0aG9ycycgcmVwdXRhdGlvbnMuCisKKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKK3Byb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4KKwwKKwkJICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworICAwLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoIGNvbnRhaW5zCithIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZAordW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoZSAiUHJvZ3JhbSIsIGJlbG93LAorcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iCittZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OgordGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwKK2VpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyCitsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluCit0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKworQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKK3J1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0KK2lzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLgorV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCisKKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzCitzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UKK2NvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUKK2NvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUKK25vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsKK2FuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKK2Fsb25nIHdpdGggdGhlIFByb2dyYW0uCisKK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZAoreW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKworICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uCitvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkgYW5kCitkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgICBhKSBZb3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorCisgICAgYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluCisgICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55CisgICAgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKKyAgICBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5CisgICAgd2hlbiBydW4sIHlvdSBtdXN0IGNhdXNlIGl0LCB3aGVuIHN0YXJ0ZWQgcnVubmluZyBmb3Igc3VjaAorICAgIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4KKyAgICBhbm5vdW5jZW1lbnQgaW5jbHVkaW5nIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGEKKyAgICBub3RpY2UgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSAob3IgZWxzZSwgc2F5aW5nIHRoYXQgeW91IHByb3ZpZGUKKyAgICBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyCisgICAgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMKKyAgICBMaWNlbnNlLiAgKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dAorICAgIGRvZXMgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24KKyAgICB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKKwwKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sCithbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCitvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCitlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCitleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIFByb2dyYW0KK3dpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZgorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCit1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKK1NlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIGEpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMKKyAgICAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKyAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCisgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuICAoVGhpcyBhbHRlcm5hdGl2ZSBpcworICAgIGFsbG93ZWQgb25seSBmb3Igbm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gYW5kIG9ubHkgaWYgeW91CisgICAgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaAorICAgIGFuIG9mZmVyLCBpbiBhY2NvcmQgd2l0aCBTdWJzZWN0aW9uIGIgYWJvdmUuKQorCitUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlIHNvdXJjZQorY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKK2Fzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0bworY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYQorc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlCithbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeQorZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUKK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50CitpdHNlbGYgYWNjb21wYW5pZXMgdGhlIGV4ZWN1dGFibGUuCisKK0lmIGRpc3RyaWJ1dGlvbiBvZiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcKK2FjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKK2FjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcworZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorDAorICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcwordm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCitwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCit0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bwordGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCit0aGlzIExpY2Vuc2UuCisKKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKK2NpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAordGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAoraW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorDAorICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgorY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCitvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlCittYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcKK3Rob3NlIGNvdW50cmllcywgc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcKK2NvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcwordGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMKK29mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbAorYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvCithZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgUHJvZ3JhbQorc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkKK2xhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKK2VpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mCit0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLgorCisgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBkaWZmZXJlbnQsIHdyaXRlIHRvIHRoZSBhdXRob3IKK3RvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzCittYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2Fscworb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMgb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZAorb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKKwkJCSAgICBOTyBXQVJSQU5UWQorCisgIDExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWQorRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOCitPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTCitQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRAorT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMKK1RPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUKK1BST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLAorUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKyAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORworV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorUkVESVNUUklCVVRFIFRIRSBQUk9HUkFNIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywKK0lOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORworT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRAorVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZCitZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUgorUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKwwKKwkgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisKKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Cit0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisKKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgbmFtZSBvZiBhdXRob3IKKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKworVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCitwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5CitiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKK21vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCitzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgorbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCisgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KKyAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisKKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5CisgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bworcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KKworCmRpZmYgLS1naXQgYS9saWNlbnNlcy9HUEwtMi13aXRoLWV4Y2VwdGlvbnMgYi9saWNlbnNlcy9HUEwtMi13aXRoLWV4Y2VwdGlvbnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmY2ODAyNAotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0dQTC0yLXdpdGgtZXhjZXB0aW9ucwpAQCAtMCwwICsxLDM1MyBAQAorTk9URTogVGhpcyBpcyB0aGUgR1BMIHdpdGggc3BlY2lmaWMgZXhjZXB0aW9ucyBhZGRlZCBieSBwYWNrYWdlcyB0byBleHRlbmQgeW91ciByaWdodHMgdW5kZXIgdGhlIEdQTC4gVGhlIHNwZWNpZmljIGV4Y2VwdGlvbihzKSBmb3IgdGhlIHBhY2thZ2UgY2FuIGJlIGZvdW5kIGluIHRoZSBzb3VyY2UgdGFyYmFsbC4KKworRXhjZXB0aW9ucyBmb2xsb3csCisKKy8vIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIGlmIG90aGVyIGZpbGVzIGluc3RhbnRpYXRlIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zCisvLyBvciBpbmxpbmUgZnVuY3Rpb25zIGZyb20gdGhpcyBmaWxlLCBvciB5b3UgY29tcGlsZSB0aGlzIGZpbGUgYW5kIGxpbmsgaXQKKy8vIHdpdGggb3RoZXIgd29ya3MgdG8gcHJvZHVjZSBhIHdvcmsgYmFzZWQgb24gdGhpcyBmaWxlLCB0aGlzIGZpbGUgZG9lcyBub3QKKy8vIGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIHdvcmsgdG8gYmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljCisvLyBMaWNlbnNlLiBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSBhIHdvcmsKKy8vIGJhc2VkIG9uIHRoaXMgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworRW5kIG9mIGV4Y2VwdGlvbnMuIFRoZSByZXN0IG9mIHRoaXMgZmlsZSBpcyB0aGUgR1BMLgorCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICAgICAgICAgICAgICAgICAgICAgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCQkJICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwordXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQordGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCit5b3VyIHByb2dyYW1zLCB0b28uCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CitpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAoraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CitkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0Cit5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCitkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCisgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCit3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwordGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorCisgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCitwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCitwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCitwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisMCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Citjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CithbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisMCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKwwKKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0CitvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwordGhpcyBMaWNlbnNlLgorCisgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCitjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCit0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCityZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCitjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQoraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCitpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0CitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCit0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKK2ltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKwwKKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCit0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCitjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisJCQkgICAgTk8gV0FSUkFOVFkKKworICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisMCisJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAordGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCit3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCisgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yCisgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisKK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCittb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Citjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9HUEwtMi13aXRoLWZvbnQtZXhjZXB0aW9uIGIvbGljZW5zZXMvR1BMLTItd2l0aC1mb250LWV4Y2VwdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYmRkYzExCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvR1BMLTItd2l0aC1mb250LWV4Y2VwdGlvbgpAQCAtMCwwICsxLDM0NiBAQAorQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgaWYgeW91IGNyZWF0ZSBhIGRvY3VtZW50IHdoaWNoIHVzZXMgdGhpcyBmb250LCBhbmQgZW1iZWQgdGhpcyBmb250IG9yIHVuYWx0ZXJlZCBwb3J0aW9ucyBvZiB0aGlzIGZvbnQgaW50byB0aGUgZG9jdW1lbnQsIAordGhpcyBmb250IGRvZXMgbm90IGJ5IGl0c2VsZiBjYXVzZSB0aGUgcmVzdWx0aW5nIGRvY3VtZW50IHRvIGJlIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyIAoraW52YWxpZGF0ZSBhbnkgb3RoZXIgcmVhc29ucyB3aHkgdGhlIGRvY3VtZW50IG1pZ2h0IGJlIGNvdmVyZWQgYnkgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBJZiB5b3UgbW9kaWZ5IHRoaXMgZm9udCwgeW91IG1heSBleHRlbmQgdGhpcyAKK2V4Y2VwdGlvbiB0byB5b3VyIHZlcnNpb24gb2YgdGhlIGZvbnQsIGJ1dCB5b3UgYXJlIG5vdCBvYmxpZ2F0ZWQgdG8gZG8gc28uIElmIHlvdSBkbyBub3Qgd2lzaCB0byBkbyBzbywgZGVsZXRlIHRoaXMgZXhjZXB0aW9uIHN0YXRlbWVudCBmcm9tIHlvdXIgCit2ZXJzaW9uLgorCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICAgICAgICAgICAgICAgICAgICAgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCQkJICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwordXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQordGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCit5b3VyIHByb2dyYW1zLCB0b28uCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CitpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAoraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CitkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0Cit5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCitkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCisgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCit3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwordGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorCisgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCitwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCitwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCitwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisMCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Citjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CithbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisMCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKwwKKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0CitvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwordGhpcyBMaWNlbnNlLgorCisgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCitjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCit0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCityZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCitjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQoraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCitpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0CitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCit0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKK2ltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKwwKKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCit0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCitjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisJCQkgICAgTk8gV0FSUkFOVFkKKworICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisMCisJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAordGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCit3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCisgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSB5ZWFyIG5hbWUgb2YgYXV0aG9yCisgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisKK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCittb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Citjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9HUEwtMi13aXRoLWxpbmtpbmctZXhjZXB0aW9uIGIvbGljZW5zZXMvR1BMLTItd2l0aC1saW5raW5nLWV4Y2VwdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjJmYTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvR1BMLTItd2l0aC1saW5raW5nLWV4Y2VwdGlvbgpAQCAtMCwwICsxLDM1MiBAQAorQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mIHRoaXMgbGlicmFyeSBnaXZlIHlvdQorcGVybWlzc2lvbiB0byBsaW5rIHRoaXMgbGlicmFyeSB3aXRoIGluZGVwZW5kZW50IG1vZHVsZXMgdG8gcHJvZHVjZSBhbgorZXhlY3V0YWJsZSwgcmVnYXJkbGVzcyBvZiB0aGUgbGljZW5zZSB0ZXJtcyBvZiB0aGVzZSBpbmRlcGVuZGVudCBtb2R1bGVzLAorYW5kIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLAorcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0LCBmb3IgZWFjaCBsaW5rZWQgaW5kZXBlbmRlbnQgbW9kdWxlLCB0aGUgdGVybXMgYW5kCitjb25kaXRpb25zIG9mIHRoZSBsaWNlbnNlIG9mIHRoYXQgbW9kdWxlLiBBbiBpbmRlcGVuZGVudCBtb2R1bGUgaXMgYSBtb2R1bGUKK3doaWNoIGlzIG5vdCBkZXJpdmVkIGZyb20gb3IgYmFzZWQgb24gdGhpcyBsaWJyYXJ5LiBJZiB5b3UgbW9kaWZ5IHRoaXMgbGlicmFyeSwKK3lvdSBtYXkgZXh0ZW5kIHRoaXMgZXhjZXB0aW9uIHRvIHlvdXIgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgYnV0IHlvdSBhcmUgbm90CitvYmxpZ2F0ZWQgdG8gZG8gc28uIElmIHlvdSBkbyBub3Qgd2lzaCB0byBkbyBzbywgZGVsZXRlIHRoaXMgZXhjZXB0aW9uCitzdGF0ZW1lbnQgZnJvbSB5b3VyIHZlcnNpb24uCisKKworCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgICAgICAgICAgICAgICAgICAgIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCQkJICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwordXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQordGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCit5b3VyIHByb2dyYW1zLCB0b28uCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CitpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAoraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CitkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0Cit5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCitkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCisgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCit3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwordGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorCisgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCitwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCitwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCitwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisMCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Citjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CithbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisMCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKwwKKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0CitvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwordGhpcyBMaWNlbnNlLgorCisgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCitjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCit0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCityZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCitjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQoraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCitpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0CitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCit0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKK2ltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKwwKKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCit0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCitjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisJCQkgICAgTk8gV0FSUkFOVFkKKworICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisMCisJICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAordGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMKK3doZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKKyAgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgbmFtZSBvZiBhdXRob3IKKyAgICBHbm9tb3Zpc2lvbiBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKworVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCitwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgdGhlIGNvbW1hbmRzIHlvdSB1c2UgbWF5CitiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUKK21vdXNlLWNsaWNrcyBvciBtZW51IGl0ZW1zLS13aGF0ZXZlciBzdWl0cyB5b3VyIHByb2dyYW0uCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCitzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBwcm9ncmFtLCBpZgorbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCisgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlIHByb2dyYW0KKyAgYEdub21vdmlzaW9uJyAod2hpY2ggbWFrZXMgcGFzc2VzIGF0IGNvbXBpbGVycykgd3JpdHRlbiBieSBKYW1lcyBIYWNrZXIuCisKKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTg5CisgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50bworcHJvcHJpZXRhcnkgcHJvZ3JhbXMuICBJZiB5b3VyIHByb2dyYW0gaXMgYSBzdWJyb3V0aW5lIGxpYnJhcnksIHlvdSBtYXkKK2NvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZQorbGlicmFyeS4gIElmIHRoaXMgaXMgd2hhdCB5b3Ugd2FudCB0byBkbywgdXNlIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0dQTC0zIGIvbGljZW5zZXMvR1BMLTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRhOWVkMAotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0dQTC0zCkBAIC0wLDAgKzEsNjc0IEBACisgICAgICAgICAgICAgICAgICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMywgMjkgSnVuZSAyMDA3CisKKyBDb3B5cmlnaHQgKEMpIDIwMDcgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuIDxodHRwOi8vZnNmLm9yZy8+CisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVhbWJsZQorCisgIFRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBhIGZyZWUsIGNvcHlsZWZ0IGxpY2Vuc2UgZm9yCitzb2Z0d2FyZSBhbmQgb3RoZXIga2luZHMgb2Ygd29ya3MuCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFuZCBvdGhlciBwcmFjdGljYWwgd29ya3MgYXJlIGRlc2lnbmVkCit0byB0YWtlIGF3YXkgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgdGhlIHdvcmtzLiAgQnkgY29udHJhc3QsCit0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0bworc2hhcmUgYW5kIGNoYW5nZSBhbGwgdmVyc2lvbnMgb2YgYSBwcm9ncmFtLS10byBtYWtlIHN1cmUgaXQgcmVtYWlucyBmcmVlCitzb2Z0d2FyZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFdlLCB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB1c2UgdGhlCitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9zdCBvZiBvdXIgc29mdHdhcmU7IGl0IGFwcGxpZXMgYWxzbyB0bworYW55IG90aGVyIHdvcmsgcmVsZWFzZWQgdGhpcyB3YXkgYnkgaXRzIGF1dGhvcnMuICBZb3UgY2FuIGFwcGx5IGl0IHRvCit5b3VyIHByb2dyYW1zLCB0b28uCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhlbSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdCBpZiB5b3UKK3dhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3CitmcmVlIHByb2dyYW1zLCBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIHByZXZlbnQgb3RoZXJzIGZyb20gZGVueWluZyB5b3UKK3RoZXNlIHJpZ2h0cyBvciBhc2tpbmcgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLiAgVGhlcmVmb3JlLCB5b3UgaGF2ZQorY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmCit5b3UgbW9kaWZ5IGl0OiByZXNwb25zaWJpbGl0aWVzIHRvIHJlc3BlY3QgdGhlIGZyZWVkb20gb2Ygb3RoZXJzLgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIKK2dyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IHBhc3Mgb24gdG8gdGhlIHJlY2lwaWVudHMgdGhlIHNhbWUKK2ZyZWVkb21zIHRoYXQgeW91IHJlY2VpdmVkLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlCitvciBjYW4gZ2V0IHRoZSBzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleQora25vdyB0aGVpciByaWdodHMuCisKKyAgRGV2ZWxvcGVycyB0aGF0IHVzZSB0aGUgR05VIEdQTCBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOgorKDEpIGFzc2VydCBjb3B5cmlnaHQgb24gdGhlIHNvZnR3YXJlLCBhbmQgKDIpIG9mZmVyIHlvdSB0aGlzIExpY2Vuc2UKK2dpdmluZyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgaXQuCisKKyAgRm9yIHRoZSBkZXZlbG9wZXJzJyBhbmQgYXV0aG9ycycgcHJvdGVjdGlvbiwgdGhlIEdQTCBjbGVhcmx5IGV4cGxhaW5zCit0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUgc29mdHdhcmUuICBGb3IgYm90aCB1c2VycycgYW5kCithdXRob3JzJyBzYWtlLCB0aGUgR1BMIHJlcXVpcmVzIHRoYXQgbW9kaWZpZWQgdmVyc2lvbnMgYmUgbWFya2VkIGFzCitjaGFuZ2VkLCBzbyB0aGF0IHRoZWlyIHByb2JsZW1zIHdpbGwgbm90IGJlIGF0dHJpYnV0ZWQgZXJyb25lb3VzbHkgdG8KK2F1dGhvcnMgb2YgcHJldmlvdXMgdmVyc2lvbnMuCisKKyAgU29tZSBkZXZpY2VzIGFyZSBkZXNpZ25lZCB0byBkZW55IHVzZXJzIGFjY2VzcyB0byBpbnN0YWxsIG9yIHJ1bgorbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhlIHNvZnR3YXJlIGluc2lkZSB0aGVtLCBhbHRob3VnaCB0aGUgbWFudWZhY3R1cmVyCitjYW4gZG8gc28uICBUaGlzIGlzIGZ1bmRhbWVudGFsbHkgaW5jb21wYXRpYmxlIHdpdGggdGhlIGFpbSBvZgorcHJvdGVjdGluZyB1c2VycycgZnJlZWRvbSB0byBjaGFuZ2UgdGhlIHNvZnR3YXJlLiAgVGhlIHN5c3RlbWF0aWMKK3BhdHRlcm4gb2Ygc3VjaCBhYnVzZSBvY2N1cnMgaW4gdGhlIGFyZWEgb2YgcHJvZHVjdHMgZm9yIGluZGl2aWR1YWxzIHRvCit1c2UsIHdoaWNoIGlzIHByZWNpc2VseSB3aGVyZSBpdCBpcyBtb3N0IHVuYWNjZXB0YWJsZS4gIFRoZXJlZm9yZSwgd2UKK2hhdmUgZGVzaWduZWQgdGhpcyB2ZXJzaW9uIG9mIHRoZSBHUEwgdG8gcHJvaGliaXQgdGhlIHByYWN0aWNlIGZvciB0aG9zZQorcHJvZHVjdHMuICBJZiBzdWNoIHByb2JsZW1zIGFyaXNlIHN1YnN0YW50aWFsbHkgaW4gb3RoZXIgZG9tYWlucywgd2UKK3N0YW5kIHJlYWR5IHRvIGV4dGVuZCB0aGlzIHByb3Zpc2lvbiB0byB0aG9zZSBkb21haW5zIGluIGZ1dHVyZSB2ZXJzaW9ucworb2YgdGhlIEdQTCwgYXMgbmVlZGVkIHRvIHByb3RlY3QgdGhlIGZyZWVkb20gb2YgdXNlcnMuCisKKyAgRmluYWxseSwgZXZlcnkgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUgcGF0ZW50cy4KK1N0YXRlcyBzaG91bGQgbm90IGFsbG93IHBhdGVudHMgdG8gcmVzdHJpY3QgZGV2ZWxvcG1lbnQgYW5kIHVzZSBvZgorc29mdHdhcmUgb24gZ2VuZXJhbC1wdXJwb3NlIGNvbXB1dGVycywgYnV0IGluIHRob3NlIHRoYXQgZG8sIHdlIHdpc2ggdG8KK2F2b2lkIHRoZSBzcGVjaWFsIGRhbmdlciB0aGF0IHBhdGVudHMgYXBwbGllZCB0byBhIGZyZWUgcHJvZ3JhbSBjb3VsZAorbWFrZSBpdCBlZmZlY3RpdmVseSBwcm9wcmlldGFyeS4gIFRvIHByZXZlbnQgdGhpcywgdGhlIEdQTCBhc3N1cmVzIHRoYXQKK3BhdGVudHMgY2Fubm90IGJlIHVzZWQgdG8gcmVuZGVyIHRoZSBwcm9ncmFtIG5vbi1mcmVlLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LgorCisgICAgICAgICAgICAgICAgICAgICAgIFRFUk1TIEFORCBDT05ESVRJT05TCisKKyAgMC4gRGVmaW5pdGlvbnMuCisKKyAgIlRoaXMgTGljZW5zZSIgcmVmZXJzIHRvIHZlcnNpb24gMyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKKyAgIkNvcHlyaWdodCIgYWxzbyBtZWFucyBjb3B5cmlnaHQtbGlrZSBsYXdzIHRoYXQgYXBwbHkgdG8gb3RoZXIga2luZHMgb2YKK3dvcmtzLCBzdWNoIGFzIHNlbWljb25kdWN0b3IgbWFza3MuCisKKyAgIlRoZSBQcm9ncmFtIiByZWZlcnMgdG8gYW55IGNvcHlyaWdodGFibGUgd29yayBsaWNlbnNlZCB1bmRlciB0aGlzCitMaWNlbnNlLiAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuICAiTGljZW5zZWVzIiBhbmQKKyJyZWNpcGllbnRzIiBtYXkgYmUgaW5kaXZpZHVhbHMgb3Igb3JnYW5pemF0aW9ucy4KKworICBUbyAibW9kaWZ5IiBhIHdvcmsgbWVhbnMgdG8gY29weSBmcm9tIG9yIGFkYXB0IGFsbCBvciBwYXJ0IG9mIHRoZSB3b3JrCitpbiBhIGZhc2hpb24gcmVxdWlyaW5nIGNvcHlyaWdodCBwZXJtaXNzaW9uLCBvdGhlciB0aGFuIHRoZSBtYWtpbmcgb2YgYW4KK2V4YWN0IGNvcHkuICBUaGUgcmVzdWx0aW5nIHdvcmsgaXMgY2FsbGVkIGEgIm1vZGlmaWVkIHZlcnNpb24iIG9mIHRoZQorZWFybGllciB3b3JrIG9yIGEgd29yayAiYmFzZWQgb24iIHRoZSBlYXJsaWVyIHdvcmsuCisKKyAgQSAiY292ZXJlZCB3b3JrIiBtZWFucyBlaXRoZXIgdGhlIHVubW9kaWZpZWQgUHJvZ3JhbSBvciBhIHdvcmsgYmFzZWQKK29uIHRoZSBQcm9ncmFtLgorCisgIFRvICJwcm9wYWdhdGUiIGEgd29yayBtZWFucyB0byBkbyBhbnl0aGluZyB3aXRoIGl0IHRoYXQsIHdpdGhvdXQKK3Blcm1pc3Npb24sIHdvdWxkIG1ha2UgeW91IGRpcmVjdGx5IG9yIHNlY29uZGFyaWx5IGxpYWJsZSBmb3IKK2luZnJpbmdlbWVudCB1bmRlciBhcHBsaWNhYmxlIGNvcHlyaWdodCBsYXcsIGV4Y2VwdCBleGVjdXRpbmcgaXQgb24gYQorY29tcHV0ZXIgb3IgbW9kaWZ5aW5nIGEgcHJpdmF0ZSBjb3B5LiAgUHJvcGFnYXRpb24gaW5jbHVkZXMgY29weWluZywKK2Rpc3RyaWJ1dGlvbiAod2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiksIG1ha2luZyBhdmFpbGFibGUgdG8gdGhlCitwdWJsaWMsIGFuZCBpbiBzb21lIGNvdW50cmllcyBvdGhlciBhY3Rpdml0aWVzIGFzIHdlbGwuCisKKyAgVG8gImNvbnZleSIgYSB3b3JrIG1lYW5zIGFueSBraW5kIG9mIHByb3BhZ2F0aW9uIHRoYXQgZW5hYmxlcyBvdGhlcgorcGFydGllcyB0byBtYWtlIG9yIHJlY2VpdmUgY29waWVzLiAgTWVyZSBpbnRlcmFjdGlvbiB3aXRoIGEgdXNlciB0aHJvdWdoCithIGNvbXB1dGVyIG5ldHdvcmssIHdpdGggbm8gdHJhbnNmZXIgb2YgYSBjb3B5LCBpcyBub3QgY29udmV5aW5nLgorCisgIEFuIGludGVyYWN0aXZlIHVzZXIgaW50ZXJmYWNlIGRpc3BsYXlzICJBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzIgordG8gdGhlIGV4dGVudCB0aGF0IGl0IGluY2x1ZGVzIGEgY29udmVuaWVudCBhbmQgcHJvbWluZW50bHkgdmlzaWJsZQorZmVhdHVyZSB0aGF0ICgxKSBkaXNwbGF5cyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlLCBhbmQgKDIpCit0ZWxscyB0aGUgdXNlciB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgd29yayAoZXhjZXB0IHRvIHRoZQorZXh0ZW50IHRoYXQgd2FycmFudGllcyBhcmUgcHJvdmlkZWQpLCB0aGF0IGxpY2Vuc2VlcyBtYXkgY29udmV5IHRoZQord29yayB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiAgSWYKK3RoZSBpbnRlcmZhY2UgcHJlc2VudHMgYSBsaXN0IG9mIHVzZXIgY29tbWFuZHMgb3Igb3B0aW9ucywgc3VjaCBhcyBhCittZW51LCBhIHByb21pbmVudCBpdGVtIGluIHRoZSBsaXN0IG1lZXRzIHRoaXMgY3JpdGVyaW9uLgorCisgIDEuIFNvdXJjZSBDb2RlLgorCisgIFRoZSAic291cmNlIGNvZGUiIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrCitmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICAiT2JqZWN0IGNvZGUiIG1lYW5zIGFueSBub24tc291cmNlCitmb3JtIG9mIGEgd29yay4KKworICBBICJTdGFuZGFyZCBJbnRlcmZhY2UiIG1lYW5zIGFuIGludGVyZmFjZSB0aGF0IGVpdGhlciBpcyBhbiBvZmZpY2lhbAorc3RhbmRhcmQgZGVmaW5lZCBieSBhIHJlY29nbml6ZWQgc3RhbmRhcmRzIGJvZHksIG9yLCBpbiB0aGUgY2FzZSBvZgoraW50ZXJmYWNlcyBzcGVjaWZpZWQgZm9yIGEgcGFydGljdWxhciBwcm9ncmFtbWluZyBsYW5ndWFnZSwgb25lIHRoYXQKK2lzIHdpZGVseSB1c2VkIGFtb25nIGRldmVsb3BlcnMgd29ya2luZyBpbiB0aGF0IGxhbmd1YWdlLgorCisgIFRoZSAiU3lzdGVtIExpYnJhcmllcyIgb2YgYW4gZXhlY3V0YWJsZSB3b3JrIGluY2x1ZGUgYW55dGhpbmcsIG90aGVyCit0aGFuIHRoZSB3b3JrIGFzIGEgd2hvbGUsIHRoYXQgKGEpIGlzIGluY2x1ZGVkIGluIHRoZSBub3JtYWwgZm9ybSBvZgorcGFja2FnaW5nIGEgTWFqb3IgQ29tcG9uZW50LCBidXQgd2hpY2ggaXMgbm90IHBhcnQgb2YgdGhhdCBNYWpvcgorQ29tcG9uZW50LCBhbmQgKGIpIHNlcnZlcyBvbmx5IHRvIGVuYWJsZSB1c2Ugb2YgdGhlIHdvcmsgd2l0aCB0aGF0CitNYWpvciBDb21wb25lbnQsIG9yIHRvIGltcGxlbWVudCBhIFN0YW5kYXJkIEludGVyZmFjZSBmb3Igd2hpY2ggYW4KK2ltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluIHNvdXJjZSBjb2RlIGZvcm0uICBBCisiTWFqb3IgQ29tcG9uZW50IiwgaW4gdGhpcyBjb250ZXh0LCBtZWFucyBhIG1ham9yIGVzc2VudGlhbCBjb21wb25lbnQKKyhrZXJuZWwsIHdpbmRvdyBzeXN0ZW0sIGFuZCBzbyBvbikgb2YgdGhlIHNwZWNpZmljIG9wZXJhdGluZyBzeXN0ZW0KKyhpZiBhbnkpIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHdvcmsgcnVucywgb3IgYSBjb21waWxlciB1c2VkIHRvCitwcm9kdWNlIHRoZSB3b3JrLCBvciBhbiBvYmplY3QgY29kZSBpbnRlcnByZXRlciB1c2VkIHRvIHJ1biBpdC4KKworICBUaGUgIkNvcnJlc3BvbmRpbmcgU291cmNlIiBmb3IgYSB3b3JrIGluIG9iamVjdCBjb2RlIGZvcm0gbWVhbnMgYWxsCit0aGUgc291cmNlIGNvZGUgbmVlZGVkIHRvIGdlbmVyYXRlLCBpbnN0YWxsLCBhbmQgKGZvciBhbiBleGVjdXRhYmxlCit3b3JrKSBydW4gdGhlIG9iamVjdCBjb2RlIGFuZCB0byBtb2RpZnkgdGhlIHdvcmssIGluY2x1ZGluZyBzY3JpcHRzIHRvCitjb250cm9sIHRob3NlIGFjdGl2aXRpZXMuICBIb3dldmVyLCBpdCBkb2VzIG5vdCBpbmNsdWRlIHRoZSB3b3JrJ3MKK1N5c3RlbSBMaWJyYXJpZXMsIG9yIGdlbmVyYWwtcHVycG9zZSB0b29scyBvciBnZW5lcmFsbHkgYXZhaWxhYmxlIGZyZWUKK3Byb2dyYW1zIHdoaWNoIGFyZSB1c2VkIHVubW9kaWZpZWQgaW4gcGVyZm9ybWluZyB0aG9zZSBhY3Rpdml0aWVzIGJ1dAord2hpY2ggYXJlIG5vdCBwYXJ0IG9mIHRoZSB3b3JrLiAgRm9yIGV4YW1wbGUsIENvcnJlc3BvbmRpbmcgU291cmNlCitpbmNsdWRlcyBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcyBhc3NvY2lhdGVkIHdpdGggc291cmNlIGZpbGVzIGZvcgordGhlIHdvcmssIGFuZCB0aGUgc291cmNlIGNvZGUgZm9yIHNoYXJlZCBsaWJyYXJpZXMgYW5kIGR5bmFtaWNhbGx5CitsaW5rZWQgc3VicHJvZ3JhbXMgdGhhdCB0aGUgd29yayBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gcmVxdWlyZSwKK3N1Y2ggYXMgYnkgaW50aW1hdGUgZGF0YSBjb21tdW5pY2F0aW9uIG9yIGNvbnRyb2wgZmxvdyBiZXR3ZWVuIHRob3NlCitzdWJwcm9ncmFtcyBhbmQgb3RoZXIgcGFydHMgb2YgdGhlIHdvcmsuCisKKyAgVGhlIENvcnJlc3BvbmRpbmcgU291cmNlIG5lZWQgbm90IGluY2x1ZGUgYW55dGhpbmcgdGhhdCB1c2VycworY2FuIHJlZ2VuZXJhdGUgYXV0b21hdGljYWxseSBmcm9tIG90aGVyIHBhcnRzIG9mIHRoZSBDb3JyZXNwb25kaW5nCitTb3VyY2UuCisKKyAgVGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGZvciBhIHdvcmsgaW4gc291cmNlIGNvZGUgZm9ybSBpcyB0aGF0CitzYW1lIHdvcmsuCisKKyAgMi4gQmFzaWMgUGVybWlzc2lvbnMuCisKKyAgQWxsIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgTGljZW5zZSBhcmUgZ3JhbnRlZCBmb3IgdGhlIHRlcm0gb2YKK2NvcHlyaWdodCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGFyZSBpcnJldm9jYWJsZSBwcm92aWRlZCB0aGUgc3RhdGVkCitjb25kaXRpb25zIGFyZSBtZXQuICBUaGlzIExpY2Vuc2UgZXhwbGljaXRseSBhZmZpcm1zIHlvdXIgdW5saW1pdGVkCitwZXJtaXNzaW9uIHRvIHJ1biB0aGUgdW5tb2RpZmllZCBQcm9ncmFtLiAgVGhlIG91dHB1dCBmcm9tIHJ1bm5pbmcgYQorY292ZXJlZCB3b3JrIGlzIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlIG9ubHkgaWYgdGhlIG91dHB1dCwgZ2l2ZW4gaXRzCitjb250ZW50LCBjb25zdGl0dXRlcyBhIGNvdmVyZWQgd29yay4gIFRoaXMgTGljZW5zZSBhY2tub3dsZWRnZXMgeW91cgorcmlnaHRzIG9mIGZhaXIgdXNlIG9yIG90aGVyIGVxdWl2YWxlbnQsIGFzIHByb3ZpZGVkIGJ5IGNvcHlyaWdodCBsYXcuCisKKyAgWW91IG1heSBtYWtlLCBydW4gYW5kIHByb3BhZ2F0ZSBjb3ZlcmVkIHdvcmtzIHRoYXQgeW91IGRvIG5vdAorY29udmV5LCB3aXRob3V0IGNvbmRpdGlvbnMgc28gbG9uZyBhcyB5b3VyIGxpY2Vuc2Ugb3RoZXJ3aXNlIHJlbWFpbnMKK2luIGZvcmNlLiAgWW91IG1heSBjb252ZXkgY292ZXJlZCB3b3JrcyB0byBvdGhlcnMgZm9yIHRoZSBzb2xlIHB1cnBvc2UKK29mIGhhdmluZyB0aGVtIG1ha2UgbW9kaWZpY2F0aW9ucyBleGNsdXNpdmVseSBmb3IgeW91LCBvciBwcm92aWRlIHlvdQord2l0aCBmYWNpbGl0aWVzIGZvciBydW5uaW5nIHRob3NlIHdvcmtzLCBwcm92aWRlZCB0aGF0IHlvdSBjb21wbHkgd2l0aAordGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBpbiBjb252ZXlpbmcgYWxsIG1hdGVyaWFsIGZvciB3aGljaCB5b3UgZG8KK25vdCBjb250cm9sIGNvcHlyaWdodC4gIFRob3NlIHRodXMgbWFraW5nIG9yIHJ1bm5pbmcgdGhlIGNvdmVyZWQgd29ya3MKK2ZvciB5b3UgbXVzdCBkbyBzbyBleGNsdXNpdmVseSBvbiB5b3VyIGJlaGFsZiwgdW5kZXIgeW91ciBkaXJlY3Rpb24KK2FuZCBjb250cm9sLCBvbiB0ZXJtcyB0aGF0IHByb2hpYml0IHRoZW0gZnJvbSBtYWtpbmcgYW55IGNvcGllcyBvZgoreW91ciBjb3B5cmlnaHRlZCBtYXRlcmlhbCBvdXRzaWRlIHRoZWlyIHJlbGF0aW9uc2hpcCB3aXRoIHlvdS4KKworICBDb252ZXlpbmcgdW5kZXIgYW55IG90aGVyIGNpcmN1bXN0YW5jZXMgaXMgcGVybWl0dGVkIHNvbGVseSB1bmRlcgordGhlIGNvbmRpdGlvbnMgc3RhdGVkIGJlbG93LiAgU3VibGljZW5zaW5nIGlzIG5vdCBhbGxvd2VkOyBzZWN0aW9uIDEwCittYWtlcyBpdCB1bm5lY2Vzc2FyeS4KKworICAzLiBQcm90ZWN0aW5nIFVzZXJzJyBMZWdhbCBSaWdodHMgRnJvbSBBbnRpLUNpcmN1bXZlbnRpb24gTGF3LgorCisgIE5vIGNvdmVyZWQgd29yayBzaGFsbCBiZSBkZWVtZWQgcGFydCBvZiBhbiBlZmZlY3RpdmUgdGVjaG5vbG9naWNhbAorbWVhc3VyZSB1bmRlciBhbnkgYXBwbGljYWJsZSBsYXcgZnVsZmlsbGluZyBvYmxpZ2F0aW9ucyB1bmRlciBhcnRpY2xlCisxMSBvZiB0aGUgV0lQTyBjb3B5cmlnaHQgdHJlYXR5IGFkb3B0ZWQgb24gMjAgRGVjZW1iZXIgMTk5Niwgb3IKK3NpbWlsYXIgbGF3cyBwcm9oaWJpdGluZyBvciByZXN0cmljdGluZyBjaXJjdW12ZW50aW9uIG9mIHN1Y2gKK21lYXN1cmVzLgorCisgIFdoZW4geW91IGNvbnZleSBhIGNvdmVyZWQgd29yaywgeW91IHdhaXZlIGFueSBsZWdhbCBwb3dlciB0byBmb3JiaWQKK2NpcmN1bXZlbnRpb24gb2YgdGVjaG5vbG9naWNhbCBtZWFzdXJlcyB0byB0aGUgZXh0ZW50IHN1Y2ggY2lyY3VtdmVudGlvbgoraXMgZWZmZWN0ZWQgYnkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0bwordGhlIGNvdmVyZWQgd29yaywgYW5kIHlvdSBkaXNjbGFpbSBhbnkgaW50ZW50aW9uIHRvIGxpbWl0IG9wZXJhdGlvbiBvcgorbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGFzIGEgbWVhbnMgb2YgZW5mb3JjaW5nLCBhZ2FpbnN0IHRoZSB3b3JrJ3MKK3VzZXJzLCB5b3VyIG9yIHRoaXJkIHBhcnRpZXMnIGxlZ2FsIHJpZ2h0cyB0byBmb3JiaWQgY2lyY3VtdmVudGlvbiBvZgordGVjaG5vbG9naWNhbCBtZWFzdXJlcy4KKworICA0LiBDb252ZXlpbmcgVmVyYmF0aW0gQ29waWVzLgorCisgIFlvdSBtYXkgY29udmV5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzIHNvdXJjZSBjb2RlIGFzIHlvdQorcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UgY29uc3BpY3VvdXNseSBhbmQKK2FwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZTsKK2tlZXAgaW50YWN0IGFsbCBub3RpY2VzIHN0YXRpbmcgdGhhdCB0aGlzIExpY2Vuc2UgYW5kIGFueQorbm9uLXBlcm1pc3NpdmUgdGVybXMgYWRkZWQgaW4gYWNjb3JkIHdpdGggc2VjdGlvbiA3IGFwcGx5IHRvIHRoZSBjb2RlOwora2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgb2YgdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OyBhbmQgZ2l2ZSBhbGwKK3JlY2lwaWVudHMgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCisgIFlvdSBtYXkgY2hhcmdlIGFueSBwcmljZSBvciBubyBwcmljZSBmb3IgZWFjaCBjb3B5IHRoYXQgeW91IGNvbnZleSwKK2FuZCB5b3UgbWF5IG9mZmVyIHN1cHBvcnQgb3Igd2FycmFudHkgcHJvdGVjdGlvbiBmb3IgYSBmZWUuCisKKyAgNS4gQ29udmV5aW5nIE1vZGlmaWVkIFNvdXJjZSBWZXJzaW9ucy4KKworICBZb3UgbWF5IGNvbnZleSBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIG9yIHRoZSBtb2RpZmljYXRpb25zIHRvCitwcm9kdWNlIGl0IGZyb20gdGhlIFByb2dyYW0sIGluIHRoZSBmb3JtIG9mIHNvdXJjZSBjb2RlIHVuZGVyIHRoZQordGVybXMgb2Ygc2VjdGlvbiA0LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgICBhKSBUaGUgd29yayBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UgbW9kaWZpZWQKKyAgICBpdCwgYW5kIGdpdmluZyBhIHJlbGV2YW50IGRhdGUuCisKKyAgICBiKSBUaGUgd29yayBtdXN0IGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCBpdCBpcworICAgIHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IGNvbmRpdGlvbnMgYWRkZWQgdW5kZXIgc2VjdGlvbgorICAgIDcuICBUaGlzIHJlcXVpcmVtZW50IG1vZGlmaWVzIHRoZSByZXF1aXJlbWVudCBpbiBzZWN0aW9uIDQgdG8KKyAgICAia2VlcCBpbnRhY3QgYWxsIG5vdGljZXMiLgorCisgICAgYykgWW91IG11c3QgbGljZW5zZSB0aGUgZW50aXJlIHdvcmssIGFzIGEgd2hvbGUsIHVuZGVyIHRoaXMKKyAgICBMaWNlbnNlIHRvIGFueW9uZSB3aG8gY29tZXMgaW50byBwb3NzZXNzaW9uIG9mIGEgY29weS4gIFRoaXMKKyAgICBMaWNlbnNlIHdpbGwgdGhlcmVmb3JlIGFwcGx5LCBhbG9uZyB3aXRoIGFueSBhcHBsaWNhYmxlIHNlY3Rpb24gNworICAgIGFkZGl0aW9uYWwgdGVybXMsIHRvIHRoZSB3aG9sZSBvZiB0aGUgd29yaywgYW5kIGFsbCBpdHMgcGFydHMsCisgICAgcmVnYXJkbGVzcyBvZiBob3cgdGhleSBhcmUgcGFja2FnZWQuICBUaGlzIExpY2Vuc2UgZ2l2ZXMgbm8KKyAgICBwZXJtaXNzaW9uIHRvIGxpY2Vuc2UgdGhlIHdvcmsgaW4gYW55IG90aGVyIHdheSwgYnV0IGl0IGRvZXMgbm90CisgICAgaW52YWxpZGF0ZSBzdWNoIHBlcm1pc3Npb24gaWYgeW91IGhhdmUgc2VwYXJhdGVseSByZWNlaXZlZCBpdC4KKworICAgIGQpIElmIHRoZSB3b3JrIGhhcyBpbnRlcmFjdGl2ZSB1c2VyIGludGVyZmFjZXMsIGVhY2ggbXVzdCBkaXNwbGF5CisgICAgQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlczsgaG93ZXZlciwgaWYgdGhlIFByb2dyYW0gaGFzIGludGVyYWN0aXZlCisgICAgaW50ZXJmYWNlcyB0aGF0IGRvIG5vdCBkaXNwbGF5IEFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXMsIHlvdXIKKyAgICB3b3JrIG5lZWQgbm90IG1ha2UgdGhlbSBkbyBzby4KKworICBBIGNvbXBpbGF0aW9uIG9mIGEgY292ZXJlZCB3b3JrIHdpdGggb3RoZXIgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50Cit3b3Jrcywgd2hpY2ggYXJlIG5vdCBieSB0aGVpciBuYXR1cmUgZXh0ZW5zaW9ucyBvZiB0aGUgY292ZXJlZCB3b3JrLAorYW5kIHdoaWNoIGFyZSBub3QgY29tYmluZWQgd2l0aCBpdCBzdWNoIGFzIHRvIGZvcm0gYSBsYXJnZXIgcHJvZ3JhbSwKK2luIG9yIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtLCBpcyBjYWxsZWQgYW4KKyJhZ2dyZWdhdGUiIGlmIHRoZSBjb21waWxhdGlvbiBhbmQgaXRzIHJlc3VsdGluZyBjb3B5cmlnaHQgYXJlIG5vdAordXNlZCB0byBsaW1pdCB0aGUgYWNjZXNzIG9yIGxlZ2FsIHJpZ2h0cyBvZiB0aGUgY29tcGlsYXRpb24ncyB1c2VycworYmV5b25kIHdoYXQgdGhlIGluZGl2aWR1YWwgd29ya3MgcGVybWl0LiAgSW5jbHVzaW9uIG9mIGEgY292ZXJlZCB3b3JrCitpbiBhbiBhZ2dyZWdhdGUgZG9lcyBub3QgY2F1c2UgdGhpcyBMaWNlbnNlIHRvIGFwcGx5IHRvIHRoZSBvdGhlcgorcGFydHMgb2YgdGhlIGFnZ3JlZ2F0ZS4KKworICA2LiBDb252ZXlpbmcgTm9uLVNvdXJjZSBGb3Jtcy4KKworICBZb3UgbWF5IGNvbnZleSBhIGNvdmVyZWQgd29yayBpbiBvYmplY3QgY29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcworb2Ygc2VjdGlvbnMgNCBhbmQgNSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBjb252ZXkgdGhlCittYWNoaW5lLXJlYWRhYmxlIENvcnJlc3BvbmRpbmcgU291cmNlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsCitpbiBvbmUgb2YgdGhlc2Ugd2F5czoKKworICAgIGEpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QKKyAgICAoaW5jbHVkaW5nIGEgcGh5c2ljYWwgZGlzdHJpYnV0aW9uIG1lZGl1bSksIGFjY29tcGFuaWVkIGJ5IHRoZQorICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGZpeGVkIG9uIGEgZHVyYWJsZSBwaHlzaWNhbCBtZWRpdW0KKyAgICBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KKworICAgIGIpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgaW4sIG9yIGVtYm9kaWVkIGluLCBhIHBoeXNpY2FsIHByb2R1Y3QKKyAgICAoaW5jbHVkaW5nIGEgcGh5c2ljYWwgZGlzdHJpYnV0aW9uIG1lZGl1bSksIGFjY29tcGFuaWVkIGJ5IGEKKyAgICB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUgeWVhcnMgYW5kIHZhbGlkIGZvciBhcworICAgIGxvbmcgYXMgeW91IG9mZmVyIHNwYXJlIHBhcnRzIG9yIGN1c3RvbWVyIHN1cHBvcnQgZm9yIHRoYXQgcHJvZHVjdAorICAgIG1vZGVsLCB0byBnaXZlIGFueW9uZSB3aG8gcG9zc2Vzc2VzIHRoZSBvYmplY3QgY29kZSBlaXRoZXIgKDEpIGEKKyAgICBjb3B5IG9mIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBmb3IgYWxsIHRoZSBzb2Z0d2FyZSBpbiB0aGUKKyAgICBwcm9kdWN0IHRoYXQgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIG9uIGEgZHVyYWJsZSBwaHlzaWNhbAorICAgIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZSwgZm9yIGEgcHJpY2Ugbm8KKyAgICBtb3JlIHRoYW4geW91ciByZWFzb25hYmxlIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHRoaXMKKyAgICBjb252ZXlpbmcgb2Ygc291cmNlLCBvciAoMikgYWNjZXNzIHRvIGNvcHkgdGhlCisgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UgZnJvbSBhIG5ldHdvcmsgc2VydmVyIGF0IG5vIGNoYXJnZS4KKworICAgIGMpIENvbnZleSBpbmRpdmlkdWFsIGNvcGllcyBvZiB0aGUgb2JqZWN0IGNvZGUgd2l0aCBhIGNvcHkgb2YgdGhlCisgICAgd3JpdHRlbiBvZmZlciB0byBwcm92aWRlIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZS4gIFRoaXMKKyAgICBhbHRlcm5hdGl2ZSBpcyBhbGxvd2VkIG9ubHkgb2NjYXNpb25hbGx5IGFuZCBub25jb21tZXJjaWFsbHksIGFuZAorICAgIG9ubHkgaWYgeW91IHJlY2VpdmVkIHRoZSBvYmplY3QgY29kZSB3aXRoIHN1Y2ggYW4gb2ZmZXIsIGluIGFjY29yZAorICAgIHdpdGggc3Vic2VjdGlvbiA2Yi4KKworICAgIGQpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIGZyb20gYSBkZXNpZ25hdGVkCisgICAgcGxhY2UgKGdyYXRpcyBvciBmb3IgYSBjaGFyZ2UpLCBhbmQgb2ZmZXIgZXF1aXZhbGVudCBhY2Nlc3MgdG8gdGhlCisgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UgaW4gdGhlIHNhbWUgd2F5IHRocm91Z2ggdGhlIHNhbWUgcGxhY2UgYXQgbm8KKyAgICBmdXJ0aGVyIGNoYXJnZS4gIFlvdSBuZWVkIG5vdCByZXF1aXJlIHJlY2lwaWVudHMgdG8gY29weSB0aGUKKyAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4gIElmIHRoZSBwbGFjZSB0bworICAgIGNvcHkgdGhlIG9iamVjdCBjb2RlIGlzIGEgbmV0d29yayBzZXJ2ZXIsIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZQorICAgIG1heSBiZSBvbiBhIGRpZmZlcmVudCBzZXJ2ZXIgKG9wZXJhdGVkIGJ5IHlvdSBvciBhIHRoaXJkIHBhcnR5KQorICAgIHRoYXQgc3VwcG9ydHMgZXF1aXZhbGVudCBjb3B5aW5nIGZhY2lsaXRpZXMsIHByb3ZpZGVkIHlvdSBtYWludGFpbgorICAgIGNsZWFyIGRpcmVjdGlvbnMgbmV4dCB0byB0aGUgb2JqZWN0IGNvZGUgc2F5aW5nIHdoZXJlIHRvIGZpbmQgdGhlCisgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBSZWdhcmRsZXNzIG9mIHdoYXQgc2VydmVyIGhvc3RzIHRoZQorICAgIENvcnJlc3BvbmRpbmcgU291cmNlLCB5b3UgcmVtYWluIG9ibGlnYXRlZCB0byBlbnN1cmUgdGhhdCBpdCBpcworICAgIGF2YWlsYWJsZSBmb3IgYXMgbG9uZyBhcyBuZWVkZWQgdG8gc2F0aXNmeSB0aGVzZSByZXF1aXJlbWVudHMuCisKKyAgICBlKSBDb252ZXkgdGhlIG9iamVjdCBjb2RlIHVzaW5nIHBlZXItdG8tcGVlciB0cmFuc21pc3Npb24sIHByb3ZpZGVkCisgICAgeW91IGluZm9ybSBvdGhlciBwZWVycyB3aGVyZSB0aGUgb2JqZWN0IGNvZGUgYW5kIENvcnJlc3BvbmRpbmcKKyAgICBTb3VyY2Ugb2YgdGhlIHdvcmsgYXJlIGJlaW5nIG9mZmVyZWQgdG8gdGhlIGdlbmVyYWwgcHVibGljIGF0IG5vCisgICAgY2hhcmdlIHVuZGVyIHN1YnNlY3Rpb24gNmQuCisKKyAgQSBzZXBhcmFibGUgcG9ydGlvbiBvZiB0aGUgb2JqZWN0IGNvZGUsIHdob3NlIHNvdXJjZSBjb2RlIGlzIGV4Y2x1ZGVkCitmcm9tIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBhcyBhIFN5c3RlbSBMaWJyYXJ5LCBuZWVkIG5vdCBiZQoraW5jbHVkZWQgaW4gY29udmV5aW5nIHRoZSBvYmplY3QgY29kZSB3b3JrLgorCisgIEEgIlVzZXIgUHJvZHVjdCIgaXMgZWl0aGVyICgxKSBhICJjb25zdW1lciBwcm9kdWN0Iiwgd2hpY2ggbWVhbnMgYW55Cit0YW5naWJsZSBwZXJzb25hbCBwcm9wZXJ0eSB3aGljaCBpcyBub3JtYWxseSB1c2VkIGZvciBwZXJzb25hbCwgZmFtaWx5LAorb3IgaG91c2Vob2xkIHB1cnBvc2VzLCBvciAoMikgYW55dGhpbmcgZGVzaWduZWQgb3Igc29sZCBmb3IgaW5jb3Jwb3JhdGlvbgoraW50byBhIGR3ZWxsaW5nLiAgSW4gZGV0ZXJtaW5pbmcgd2hldGhlciBhIHByb2R1Y3QgaXMgYSBjb25zdW1lciBwcm9kdWN0LAorZG91YnRmdWwgY2FzZXMgc2hhbGwgYmUgcmVzb2x2ZWQgaW4gZmF2b3Igb2YgY292ZXJhZ2UuICBGb3IgYSBwYXJ0aWN1bGFyCitwcm9kdWN0IHJlY2VpdmVkIGJ5IGEgcGFydGljdWxhciB1c2VyLCAibm9ybWFsbHkgdXNlZCIgcmVmZXJzIHRvIGEKK3R5cGljYWwgb3IgY29tbW9uIHVzZSBvZiB0aGF0IGNsYXNzIG9mIHByb2R1Y3QsIHJlZ2FyZGxlc3Mgb2YgdGhlIHN0YXR1cworb2YgdGhlIHBhcnRpY3VsYXIgdXNlciBvciBvZiB0aGUgd2F5IGluIHdoaWNoIHRoZSBwYXJ0aWN1bGFyIHVzZXIKK2FjdHVhbGx5IHVzZXMsIG9yIGV4cGVjdHMgb3IgaXMgZXhwZWN0ZWQgdG8gdXNlLCB0aGUgcHJvZHVjdC4gIEEgcHJvZHVjdAoraXMgYSBjb25zdW1lciBwcm9kdWN0IHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB0aGUgcHJvZHVjdCBoYXMgc3Vic3RhbnRpYWwKK2NvbW1lcmNpYWwsIGluZHVzdHJpYWwgb3Igbm9uLWNvbnN1bWVyIHVzZXMsIHVubGVzcyBzdWNoIHVzZXMgcmVwcmVzZW50Cit0aGUgb25seSBzaWduaWZpY2FudCBtb2RlIG9mIHVzZSBvZiB0aGUgcHJvZHVjdC4KKworICAiSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIiBmb3IgYSBVc2VyIFByb2R1Y3QgbWVhbnMgYW55IG1ldGhvZHMsCitwcm9jZWR1cmVzLCBhdXRob3JpemF0aW9uIGtleXMsIG9yIG90aGVyIGluZm9ybWF0aW9uIHJlcXVpcmVkIHRvIGluc3RhbGwKK2FuZCBleGVjdXRlIG1vZGlmaWVkIHZlcnNpb25zIG9mIGEgY292ZXJlZCB3b3JrIGluIHRoYXQgVXNlciBQcm9kdWN0IGZyb20KK2EgbW9kaWZpZWQgdmVyc2lvbiBvZiBpdHMgQ29ycmVzcG9uZGluZyBTb3VyY2UuICBUaGUgaW5mb3JtYXRpb24gbXVzdAorc3VmZmljZSB0byBlbnN1cmUgdGhhdCB0aGUgY29udGludWVkIGZ1bmN0aW9uaW5nIG9mIHRoZSBtb2RpZmllZCBvYmplY3QKK2NvZGUgaXMgaW4gbm8gY2FzZSBwcmV2ZW50ZWQgb3IgaW50ZXJmZXJlZCB3aXRoIHNvbGVseSBiZWNhdXNlCittb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZS4KKworICBJZiB5b3UgY29udmV5IGFuIG9iamVjdCBjb2RlIHdvcmsgdW5kZXIgdGhpcyBzZWN0aW9uIGluLCBvciB3aXRoLCBvcgorc3BlY2lmaWNhbGx5IGZvciB1c2UgaW4sIGEgVXNlciBQcm9kdWN0LCBhbmQgdGhlIGNvbnZleWluZyBvY2N1cnMgYXMKK3BhcnQgb2YgYSB0cmFuc2FjdGlvbiBpbiB3aGljaCB0aGUgcmlnaHQgb2YgcG9zc2Vzc2lvbiBhbmQgdXNlIG9mIHRoZQorVXNlciBQcm9kdWN0IGlzIHRyYW5zZmVycmVkIHRvIHRoZSByZWNpcGllbnQgaW4gcGVycGV0dWl0eSBvciBmb3IgYQorZml4ZWQgdGVybSAocmVnYXJkbGVzcyBvZiBob3cgdGhlIHRyYW5zYWN0aW9uIGlzIGNoYXJhY3Rlcml6ZWQpLCB0aGUKK0NvcnJlc3BvbmRpbmcgU291cmNlIGNvbnZleWVkIHVuZGVyIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGFjY29tcGFuaWVkCitieSB0aGUgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uLiAgQnV0IHRoaXMgcmVxdWlyZW1lbnQgZG9lcyBub3QgYXBwbHkKK2lmIG5laXRoZXIgeW91IG5vciBhbnkgdGhpcmQgcGFydHkgcmV0YWlucyB0aGUgYWJpbGl0eSB0byBpbnN0YWxsCittb2RpZmllZCBvYmplY3QgY29kZSBvbiB0aGUgVXNlciBQcm9kdWN0IChmb3IgZXhhbXBsZSwgdGhlIHdvcmsgaGFzCitiZWVuIGluc3RhbGxlZCBpbiBST00pLgorCisgIFRoZSByZXF1aXJlbWVudCB0byBwcm92aWRlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBkb2VzIG5vdCBpbmNsdWRlIGEKK3JlcXVpcmVtZW50IHRvIGNvbnRpbnVlIHRvIHByb3ZpZGUgc3VwcG9ydCBzZXJ2aWNlLCB3YXJyYW50eSwgb3IgdXBkYXRlcworZm9yIGEgd29yayB0aGF0IGhhcyBiZWVuIG1vZGlmaWVkIG9yIGluc3RhbGxlZCBieSB0aGUgcmVjaXBpZW50LCBvciBmb3IKK3RoZSBVc2VyIFByb2R1Y3QgaW4gd2hpY2ggaXQgaGFzIGJlZW4gbW9kaWZpZWQgb3IgaW5zdGFsbGVkLiAgQWNjZXNzIHRvIGEKK25ldHdvcmsgbWF5IGJlIGRlbmllZCB3aGVuIHRoZSBtb2RpZmljYXRpb24gaXRzZWxmIG1hdGVyaWFsbHkgYW5kCithZHZlcnNlbHkgYWZmZWN0cyB0aGUgb3BlcmF0aW9uIG9mIHRoZSBuZXR3b3JrIG9yIHZpb2xhdGVzIHRoZSBydWxlcyBhbmQKK3Byb3RvY29scyBmb3IgY29tbXVuaWNhdGlvbiBhY3Jvc3MgdGhlIG5ldHdvcmsuCisKKyAgQ29ycmVzcG9uZGluZyBTb3VyY2UgY29udmV5ZWQsIGFuZCBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24gcHJvdmlkZWQsCitpbiBhY2NvcmQgd2l0aCB0aGlzIHNlY3Rpb24gbXVzdCBiZSBpbiBhIGZvcm1hdCB0aGF0IGlzIHB1YmxpY2x5Citkb2N1bWVudGVkIChhbmQgd2l0aCBhbiBpbXBsZW1lbnRhdGlvbiBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyBpbgorc291cmNlIGNvZGUgZm9ybSksIGFuZCBtdXN0IHJlcXVpcmUgbm8gc3BlY2lhbCBwYXNzd29yZCBvciBrZXkgZm9yCit1bnBhY2tpbmcsIHJlYWRpbmcgb3IgY29weWluZy4KKworICA3LiBBZGRpdGlvbmFsIFRlcm1zLgorCisgICJBZGRpdGlvbmFsIHBlcm1pc3Npb25zIiBhcmUgdGVybXMgdGhhdCBzdXBwbGVtZW50IHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlIGJ5IG1ha2luZyBleGNlcHRpb25zIGZyb20gb25lIG9yIG1vcmUgb2YgaXRzIGNvbmRpdGlvbnMuCitBZGRpdGlvbmFsIHBlcm1pc3Npb25zIHRoYXQgYXJlIGFwcGxpY2FibGUgdG8gdGhlIGVudGlyZSBQcm9ncmFtIHNoYWxsCitiZSB0cmVhdGVkIGFzIHRob3VnaCB0aGV5IHdlcmUgaW5jbHVkZWQgaW4gdGhpcyBMaWNlbnNlLCB0byB0aGUgZXh0ZW50Cit0aGF0IHRoZXkgYXJlIHZhbGlkIHVuZGVyIGFwcGxpY2FibGUgbGF3LiAgSWYgYWRkaXRpb25hbCBwZXJtaXNzaW9ucworYXBwbHkgb25seSB0byBwYXJ0IG9mIHRoZSBQcm9ncmFtLCB0aGF0IHBhcnQgbWF5IGJlIHVzZWQgc2VwYXJhdGVseQordW5kZXIgdGhvc2UgcGVybWlzc2lvbnMsIGJ1dCB0aGUgZW50aXJlIFByb2dyYW0gcmVtYWlucyBnb3Zlcm5lZCBieQordGhpcyBMaWNlbnNlIHdpdGhvdXQgcmVnYXJkIHRvIHRoZSBhZGRpdGlvbmFsIHBlcm1pc3Npb25zLgorCisgIFdoZW4geW91IGNvbnZleSBhIGNvcHkgb2YgYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgYXQgeW91ciBvcHRpb24KK3JlbW92ZSBhbnkgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBmcm9tIHRoYXQgY29weSwgb3IgZnJvbSBhbnkgcGFydCBvZgoraXQuICAoQWRkaXRpb25hbCBwZXJtaXNzaW9ucyBtYXkgYmUgd3JpdHRlbiB0byByZXF1aXJlIHRoZWlyIG93bgorcmVtb3ZhbCBpbiBjZXJ0YWluIGNhc2VzIHdoZW4geW91IG1vZGlmeSB0aGUgd29yay4pICBZb3UgbWF5IHBsYWNlCithZGRpdGlvbmFsIHBlcm1pc3Npb25zIG9uIG1hdGVyaWFsLCBhZGRlZCBieSB5b3UgdG8gYSBjb3ZlcmVkIHdvcmssCitmb3Igd2hpY2ggeW91IGhhdmUgb3IgY2FuIGdpdmUgYXBwcm9wcmlhdGUgY29weXJpZ2h0IHBlcm1pc3Npb24uCisKKyAgTm90d2l0aHN0YW5kaW5nIGFueSBvdGhlciBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlLCBmb3IgbWF0ZXJpYWwgeW91CithZGQgdG8gYSBjb3ZlcmVkIHdvcmssIHlvdSBtYXkgKGlmIGF1dGhvcml6ZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mCit0aGF0IG1hdGVyaWFsKSBzdXBwbGVtZW50IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0ZXJtczoKKworICAgIGEpIERpc2NsYWltaW5nIHdhcnJhbnR5IG9yIGxpbWl0aW5nIGxpYWJpbGl0eSBkaWZmZXJlbnRseSBmcm9tIHRoZQorICAgIHRlcm1zIG9mIHNlY3Rpb25zIDE1IGFuZCAxNiBvZiB0aGlzIExpY2Vuc2U7IG9yCisKKyAgICBiKSBSZXF1aXJpbmcgcHJlc2VydmF0aW9uIG9mIHNwZWNpZmllZCByZWFzb25hYmxlIGxlZ2FsIG5vdGljZXMgb3IKKyAgICBhdXRob3IgYXR0cmlidXRpb25zIGluIHRoYXQgbWF0ZXJpYWwgb3IgaW4gdGhlIEFwcHJvcHJpYXRlIExlZ2FsCisgICAgTm90aWNlcyBkaXNwbGF5ZWQgYnkgd29ya3MgY29udGFpbmluZyBpdDsgb3IKKworICAgIGMpIFByb2hpYml0aW5nIG1pc3JlcHJlc2VudGF0aW9uIG9mIHRoZSBvcmlnaW4gb2YgdGhhdCBtYXRlcmlhbCwgb3IKKyAgICByZXF1aXJpbmcgdGhhdCBtb2RpZmllZCB2ZXJzaW9ucyBvZiBzdWNoIG1hdGVyaWFsIGJlIG1hcmtlZCBpbgorICAgIHJlYXNvbmFibGUgd2F5cyBhcyBkaWZmZXJlbnQgZnJvbSB0aGUgb3JpZ2luYWwgdmVyc2lvbjsgb3IKKworICAgIGQpIExpbWl0aW5nIHRoZSB1c2UgZm9yIHB1YmxpY2l0eSBwdXJwb3NlcyBvZiBuYW1lcyBvZiBsaWNlbnNvcnMgb3IKKyAgICBhdXRob3JzIG9mIHRoZSBtYXRlcmlhbDsgb3IKKworICAgIGUpIERlY2xpbmluZyB0byBncmFudCByaWdodHMgdW5kZXIgdHJhZGVtYXJrIGxhdyBmb3IgdXNlIG9mIHNvbWUKKyAgICB0cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgb3Igc2VydmljZSBtYXJrczsgb3IKKworICAgIGYpIFJlcXVpcmluZyBpbmRlbW5pZmljYXRpb24gb2YgbGljZW5zb3JzIGFuZCBhdXRob3JzIG9mIHRoYXQKKyAgICBtYXRlcmlhbCBieSBhbnlvbmUgd2hvIGNvbnZleXMgdGhlIG1hdGVyaWFsIChvciBtb2RpZmllZCB2ZXJzaW9ucyBvZgorICAgIGl0KSB3aXRoIGNvbnRyYWN0dWFsIGFzc3VtcHRpb25zIG9mIGxpYWJpbGl0eSB0byB0aGUgcmVjaXBpZW50LCBmb3IKKyAgICBhbnkgbGlhYmlsaXR5IHRoYXQgdGhlc2UgY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgZGlyZWN0bHkgaW1wb3NlIG9uCisgICAgdGhvc2UgbGljZW5zb3JzIGFuZCBhdXRob3JzLgorCisgIEFsbCBvdGhlciBub24tcGVybWlzc2l2ZSBhZGRpdGlvbmFsIHRlcm1zIGFyZSBjb25zaWRlcmVkICJmdXJ0aGVyCityZXN0cmljdGlvbnMiIHdpdGhpbiB0aGUgbWVhbmluZyBvZiBzZWN0aW9uIDEwLiAgSWYgdGhlIFByb2dyYW0gYXMgeW91CityZWNlaXZlZCBpdCwgb3IgYW55IHBhcnQgb2YgaXQsIGNvbnRhaW5zIGEgbm90aWNlIHN0YXRpbmcgdGhhdCBpdCBpcworZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggYSB0ZXJtIHRoYXQgaXMgYSBmdXJ0aGVyCityZXN0cmljdGlvbiwgeW91IG1heSByZW1vdmUgdGhhdCB0ZXJtLiAgSWYgYSBsaWNlbnNlIGRvY3VtZW50IGNvbnRhaW5zCithIGZ1cnRoZXIgcmVzdHJpY3Rpb24gYnV0IHBlcm1pdHMgcmVsaWNlbnNpbmcgb3IgY29udmV5aW5nIHVuZGVyIHRoaXMKK0xpY2Vuc2UsIHlvdSBtYXkgYWRkIHRvIGEgY292ZXJlZCB3b3JrIG1hdGVyaWFsIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcworb2YgdGhhdCBsaWNlbnNlIGRvY3VtZW50LCBwcm92aWRlZCB0aGF0IHRoZSBmdXJ0aGVyIHJlc3RyaWN0aW9uIGRvZXMKK25vdCBzdXJ2aXZlIHN1Y2ggcmVsaWNlbnNpbmcgb3IgY29udmV5aW5nLgorCisgIElmIHlvdSBhZGQgdGVybXMgdG8gYSBjb3ZlcmVkIHdvcmsgaW4gYWNjb3JkIHdpdGggdGhpcyBzZWN0aW9uLCB5b3UKK211c3QgcGxhY2UsIGluIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZXMsIGEgc3RhdGVtZW50IG9mIHRoZQorYWRkaXRpb25hbCB0ZXJtcyB0aGF0IGFwcGx5IHRvIHRob3NlIGZpbGVzLCBvciBhIG5vdGljZSBpbmRpY2F0aW5nCit3aGVyZSB0byBmaW5kIHRoZSBhcHBsaWNhYmxlIHRlcm1zLgorCisgIEFkZGl0aW9uYWwgdGVybXMsIHBlcm1pc3NpdmUgb3Igbm9uLXBlcm1pc3NpdmUsIG1heSBiZSBzdGF0ZWQgaW4gdGhlCitmb3JtIG9mIGEgc2VwYXJhdGVseSB3cml0dGVuIGxpY2Vuc2UsIG9yIHN0YXRlZCBhcyBleGNlcHRpb25zOwordGhlIGFib3ZlIHJlcXVpcmVtZW50cyBhcHBseSBlaXRoZXIgd2F5LgorCisgIDguIFRlcm1pbmF0aW9uLgorCisgIFlvdSBtYXkgbm90IHByb3BhZ2F0ZSBvciBtb2RpZnkgYSBjb3ZlcmVkIHdvcmsgZXhjZXB0IGFzIGV4cHJlc3NseQorcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIHByb3BhZ2F0ZSBvcgorbW9kaWZ5IGl0IGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyCit0aGlzIExpY2Vuc2UgKGluY2x1ZGluZyBhbnkgcGF0ZW50IGxpY2Vuc2VzIGdyYW50ZWQgdW5kZXIgdGhlIHRoaXJkCitwYXJhZ3JhcGggb2Ygc2VjdGlvbiAxMSkuCisKKyAgSG93ZXZlciwgaWYgeW91IGNlYXNlIGFsbCB2aW9sYXRpb24gb2YgdGhpcyBMaWNlbnNlLCB0aGVuIHlvdXIKK2xpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcyByZWluc3RhdGVkIChhKQorcHJvdmlzaW9uYWxseSwgdW5sZXNzIGFuZCB1bnRpbCB0aGUgY29weXJpZ2h0IGhvbGRlciBleHBsaWNpdGx5IGFuZAorZmluYWxseSB0ZXJtaW5hdGVzIHlvdXIgbGljZW5zZSwgYW5kIChiKSBwZXJtYW5lbnRseSwgaWYgdGhlIGNvcHlyaWdodAoraG9sZGVyIGZhaWxzIHRvIG5vdGlmeSB5b3Ugb2YgdGhlIHZpb2xhdGlvbiBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMKK3ByaW9yIHRvIDYwIGRheXMgYWZ0ZXIgdGhlIGNlc3NhdGlvbi4KKworICBNb3Jlb3ZlciwgeW91ciBsaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyIGNvcHlyaWdodCBob2xkZXIgaXMKK3JlaW5zdGF0ZWQgcGVybWFuZW50bHkgaWYgdGhlIGNvcHlyaWdodCBob2xkZXIgbm90aWZpZXMgeW91IG9mIHRoZQordmlvbGF0aW9uIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucywgdGhpcyBpcyB0aGUgZmlyc3QgdGltZSB5b3UgaGF2ZQorcmVjZWl2ZWQgbm90aWNlIG9mIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgKGZvciBhbnkgd29yaykgZnJvbSB0aGF0Citjb3B5cmlnaHQgaG9sZGVyLCBhbmQgeW91IGN1cmUgdGhlIHZpb2xhdGlvbiBwcmlvciB0byAzMCBkYXlzIGFmdGVyCit5b3VyIHJlY2VpcHQgb2YgdGhlIG5vdGljZS4KKworICBUZXJtaW5hdGlvbiBvZiB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIHNlY3Rpb24gZG9lcyBub3QgdGVybWluYXRlIHRoZQorbGljZW5zZXMgb2YgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMgb3IgcmlnaHRzIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2UuICBJZiB5b3VyIHJpZ2h0cyBoYXZlIGJlZW4gdGVybWluYXRlZCBhbmQgbm90IHBlcm1hbmVudGx5CityZWluc3RhdGVkLCB5b3UgZG8gbm90IHF1YWxpZnkgdG8gcmVjZWl2ZSBuZXcgbGljZW5zZXMgZm9yIHRoZSBzYW1lCittYXRlcmlhbCB1bmRlciBzZWN0aW9uIDEwLgorCisgIDkuIEFjY2VwdGFuY2UgTm90IFJlcXVpcmVkIGZvciBIYXZpbmcgQ29waWVzLgorCisgIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UgaW4gb3JkZXIgdG8gcmVjZWl2ZSBvcgorcnVuIGEgY29weSBvZiB0aGUgUHJvZ3JhbS4gIEFuY2lsbGFyeSBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQgd29yaworb2NjdXJyaW5nIHNvbGVseSBhcyBhIGNvbnNlcXVlbmNlIG9mIHVzaW5nIHBlZXItdG8tcGVlciB0cmFuc21pc3Npb24KK3RvIHJlY2VpdmUgYSBjb3B5IGxpa2V3aXNlIGRvZXMgbm90IHJlcXVpcmUgYWNjZXB0YW5jZS4gIEhvd2V2ZXIsCitub3RoaW5nIG90aGVyIHRoYW4gdGhpcyBMaWNlbnNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBwcm9wYWdhdGUgb3IKK21vZGlmeSBhbnkgY292ZXJlZCB3b3JrLiAgVGhlc2UgYWN0aW9ucyBpbmZyaW5nZSBjb3B5cmlnaHQgaWYgeW91IGRvCitub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yIHByb3BhZ2F0aW5nIGEKK2NvdmVyZWQgd29yaywgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28uCisKKyAgMTAuIEF1dG9tYXRpYyBMaWNlbnNpbmcgb2YgRG93bnN0cmVhbSBSZWNpcGllbnRzLgorCisgIEVhY2ggdGltZSB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkKK3JlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvcnMsIHRvIHJ1biwgbW9kaWZ5IGFuZAorcHJvcGFnYXRlIHRoYXQgd29yaywgc3ViamVjdCB0byB0aGlzIExpY2Vuc2UuICBZb3UgYXJlIG5vdCByZXNwb25zaWJsZQorZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgd2l0aCB0aGlzIExpY2Vuc2UuCisKKyAgQW4gImVudGl0eSB0cmFuc2FjdGlvbiIgaXMgYSB0cmFuc2FjdGlvbiB0cmFuc2ZlcnJpbmcgY29udHJvbCBvZiBhbgorb3JnYW5pemF0aW9uLCBvciBzdWJzdGFudGlhbGx5IGFsbCBhc3NldHMgb2Ygb25lLCBvciBzdWJkaXZpZGluZyBhbgorb3JnYW5pemF0aW9uLCBvciBtZXJnaW5nIG9yZ2FuaXphdGlvbnMuICBJZiBwcm9wYWdhdGlvbiBvZiBhIGNvdmVyZWQKK3dvcmsgcmVzdWx0cyBmcm9tIGFuIGVudGl0eSB0cmFuc2FjdGlvbiwgZWFjaCBwYXJ0eSB0byB0aGF0Cit0cmFuc2FjdGlvbiB3aG8gcmVjZWl2ZXMgYSBjb3B5IG9mIHRoZSB3b3JrIGFsc28gcmVjZWl2ZXMgd2hhdGV2ZXIKK2xpY2Vuc2VzIHRvIHRoZSB3b3JrIHRoZSBwYXJ0eSdzIHByZWRlY2Vzc29yIGluIGludGVyZXN0IGhhZCBvciBjb3VsZAorZ2l2ZSB1bmRlciB0aGUgcHJldmlvdXMgcGFyYWdyYXBoLCBwbHVzIGEgcmlnaHQgdG8gcG9zc2Vzc2lvbiBvZiB0aGUKK0NvcnJlc3BvbmRpbmcgU291cmNlIG9mIHRoZSB3b3JrIGZyb20gdGhlIHByZWRlY2Vzc29yIGluIGludGVyZXN0LCBpZgordGhlIHByZWRlY2Vzc29yIGhhcyBpdCBvciBjYW4gZ2V0IGl0IHdpdGggcmVhc29uYWJsZSBlZmZvcnRzLgorCisgIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlciByZXN0cmljdGlvbnMgb24gdGhlIGV4ZXJjaXNlIG9mIHRoZQorcmlnaHRzIGdyYW50ZWQgb3IgYWZmaXJtZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgRm9yIGV4YW1wbGUsIHlvdSBtYXkKK25vdCBpbXBvc2UgYSBsaWNlbnNlIGZlZSwgcm95YWx0eSwgb3Igb3RoZXIgY2hhcmdlIGZvciBleGVyY2lzZSBvZgorcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLCBhbmQgeW91IG1heSBub3QgaW5pdGlhdGUgbGl0aWdhdGlvbgorKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQKK2FueSBwYXRlbnQgY2xhaW0gaXMgaW5mcmluZ2VkIGJ5IG1ha2luZywgdXNpbmcsIHNlbGxpbmcsIG9mZmVyaW5nIGZvcgorc2FsZSwgb3IgaW1wb3J0aW5nIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uIG9mIGl0LgorCisgIDExLiBQYXRlbnRzLgorCisgIEEgImNvbnRyaWJ1dG9yIiBpcyBhIGNvcHlyaWdodCBob2xkZXIgd2hvIGF1dGhvcml6ZXMgdXNlIHVuZGVyIHRoaXMKK0xpY2Vuc2Ugb2YgdGhlIFByb2dyYW0gb3IgYSB3b3JrIG9uIHdoaWNoIHRoZSBQcm9ncmFtIGlzIGJhc2VkLiAgVGhlCit3b3JrIHRodXMgbGljZW5zZWQgaXMgY2FsbGVkIHRoZSBjb250cmlidXRvcidzICJjb250cmlidXRvciB2ZXJzaW9uIi4KKworICBBIGNvbnRyaWJ1dG9yJ3MgImVzc2VudGlhbCBwYXRlbnQgY2xhaW1zIiBhcmUgYWxsIHBhdGVudCBjbGFpbXMKK293bmVkIG9yIGNvbnRyb2xsZWQgYnkgdGhlIGNvbnRyaWJ1dG9yLCB3aGV0aGVyIGFscmVhZHkgYWNxdWlyZWQgb3IKK2hlcmVhZnRlciBhY3F1aXJlZCwgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgYnkgc29tZSBtYW5uZXIsIHBlcm1pdHRlZAorYnkgdGhpcyBMaWNlbnNlLCBvZiBtYWtpbmcsIHVzaW5nLCBvciBzZWxsaW5nIGl0cyBjb250cmlidXRvciB2ZXJzaW9uLAorYnV0IGRvIG5vdCBpbmNsdWRlIGNsYWltcyB0aGF0IHdvdWxkIGJlIGluZnJpbmdlZCBvbmx5IGFzIGEKK2NvbnNlcXVlbmNlIG9mIGZ1cnRoZXIgbW9kaWZpY2F0aW9uIG9mIHRoZSBjb250cmlidXRvciB2ZXJzaW9uLiAgRm9yCitwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBpbmNsdWRlcyB0aGUgcmlnaHQgdG8gZ3JhbnQKK3BhdGVudCBzdWJsaWNlbnNlcyBpbiBhIG1hbm5lciBjb25zaXN0ZW50IHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZgordGhpcyBMaWNlbnNlLgorCisgIEVhY2ggY29udHJpYnV0b3IgZ3JhbnRzIHlvdSBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlCitwYXRlbnQgbGljZW5zZSB1bmRlciB0aGUgY29udHJpYnV0b3IncyBlc3NlbnRpYWwgcGF0ZW50IGNsYWltcywgdG8KK21ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCBhbmQgb3RoZXJ3aXNlIHJ1biwgbW9kaWZ5IGFuZAorcHJvcGFnYXRlIHRoZSBjb250ZW50cyBvZiBpdHMgY29udHJpYnV0b3IgdmVyc2lvbi4KKworICBJbiB0aGUgZm9sbG93aW5nIHRocmVlIHBhcmFncmFwaHMsIGEgInBhdGVudCBsaWNlbnNlIiBpcyBhbnkgZXhwcmVzcworYWdyZWVtZW50IG9yIGNvbW1pdG1lbnQsIGhvd2V2ZXIgZGVub21pbmF0ZWQsIG5vdCB0byBlbmZvcmNlIGEgcGF0ZW50Cisoc3VjaCBhcyBhbiBleHByZXNzIHBlcm1pc3Npb24gdG8gcHJhY3RpY2UgYSBwYXRlbnQgb3IgY292ZW5hbnQgbm90IHRvCitzdWUgZm9yIHBhdGVudCBpbmZyaW5nZW1lbnQpLiAgVG8gImdyYW50IiBzdWNoIGEgcGF0ZW50IGxpY2Vuc2UgdG8gYQorcGFydHkgbWVhbnMgdG8gbWFrZSBzdWNoIGFuIGFncmVlbWVudCBvciBjb21taXRtZW50IG5vdCB0byBlbmZvcmNlIGEKK3BhdGVudCBhZ2FpbnN0IHRoZSBwYXJ0eS4KKworICBJZiB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCBrbm93aW5nbHkgcmVseWluZyBvbiBhIHBhdGVudCBsaWNlbnNlLAorYW5kIHRoZSBDb3JyZXNwb25kaW5nIFNvdXJjZSBvZiB0aGUgd29yayBpcyBub3QgYXZhaWxhYmxlIGZvciBhbnlvbmUKK3RvIGNvcHksIGZyZWUgb2YgY2hhcmdlIGFuZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCB0aHJvdWdoIGEKK3B1YmxpY2x5IGF2YWlsYWJsZSBuZXR3b3JrIHNlcnZlciBvciBvdGhlciByZWFkaWx5IGFjY2Vzc2libGUgbWVhbnMsCit0aGVuIHlvdSBtdXN0IGVpdGhlciAoMSkgY2F1c2UgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIHRvIGJlIHNvCithdmFpbGFibGUsIG9yICgyKSBhcnJhbmdlIHRvIGRlcHJpdmUgeW91cnNlbGYgb2YgdGhlIGJlbmVmaXQgb2YgdGhlCitwYXRlbnQgbGljZW5zZSBmb3IgdGhpcyBwYXJ0aWN1bGFyIHdvcmssIG9yICgzKSBhcnJhbmdlLCBpbiBhIG1hbm5lcgorY29uc2lzdGVudCB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlLCB0byBleHRlbmQgdGhlIHBhdGVudAorbGljZW5zZSB0byBkb3duc3RyZWFtIHJlY2lwaWVudHMuICAiS25vd2luZ2x5IHJlbHlpbmciIG1lYW5zIHlvdSBoYXZlCithY3R1YWwga25vd2xlZGdlIHRoYXQsIGJ1dCBmb3IgdGhlIHBhdGVudCBsaWNlbnNlLCB5b3VyIGNvbnZleWluZyB0aGUKK2NvdmVyZWQgd29yayBpbiBhIGNvdW50cnksIG9yIHlvdXIgcmVjaXBpZW50J3MgdXNlIG9mIHRoZSBjb3ZlcmVkIHdvcmsKK2luIGEgY291bnRyeSwgd291bGQgaW5mcmluZ2Ugb25lIG9yIG1vcmUgaWRlbnRpZmlhYmxlIHBhdGVudHMgaW4gdGhhdAorY291bnRyeSB0aGF0IHlvdSBoYXZlIHJlYXNvbiB0byBiZWxpZXZlIGFyZSB2YWxpZC4KKworICBJZiwgcHVyc3VhbnQgdG8gb3IgaW4gY29ubmVjdGlvbiB3aXRoIGEgc2luZ2xlIHRyYW5zYWN0aW9uIG9yCithcnJhbmdlbWVudCwgeW91IGNvbnZleSwgb3IgcHJvcGFnYXRlIGJ5IHByb2N1cmluZyBjb252ZXlhbmNlIG9mLCBhCitjb3ZlcmVkIHdvcmssIGFuZCBncmFudCBhIHBhdGVudCBsaWNlbnNlIHRvIHNvbWUgb2YgdGhlIHBhcnRpZXMKK3JlY2VpdmluZyB0aGUgY292ZXJlZCB3b3JrIGF1dGhvcml6aW5nIHRoZW0gdG8gdXNlLCBwcm9wYWdhdGUsIG1vZGlmeQorb3IgY29udmV5IGEgc3BlY2lmaWMgY29weSBvZiB0aGUgY292ZXJlZCB3b3JrLCB0aGVuIHRoZSBwYXRlbnQgbGljZW5zZQoreW91IGdyYW50IGlzIGF1dG9tYXRpY2FsbHkgZXh0ZW5kZWQgdG8gYWxsIHJlY2lwaWVudHMgb2YgdGhlIGNvdmVyZWQKK3dvcmsgYW5kIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIEEgcGF0ZW50IGxpY2Vuc2UgaXMgImRpc2NyaW1pbmF0b3J5IiBpZiBpdCBkb2VzIG5vdCBpbmNsdWRlIHdpdGhpbgordGhlIHNjb3BlIG9mIGl0cyBjb3ZlcmFnZSwgcHJvaGliaXRzIHRoZSBleGVyY2lzZSBvZiwgb3IgaXMKK2NvbmRpdGlvbmVkIG9uIHRoZSBub24tZXhlcmNpc2Ugb2Ygb25lIG9yIG1vcmUgb2YgdGhlIHJpZ2h0cyB0aGF0IGFyZQorc3BlY2lmaWNhbGx5IGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgWW91IG1heSBub3QgY29udmV5IGEgY292ZXJlZAord29yayBpZiB5b3UgYXJlIGEgcGFydHkgdG8gYW4gYXJyYW5nZW1lbnQgd2l0aCBhIHRoaXJkIHBhcnR5IHRoYXQgaXMKK2luIHRoZSBidXNpbmVzcyBvZiBkaXN0cmlidXRpbmcgc29mdHdhcmUsIHVuZGVyIHdoaWNoIHlvdSBtYWtlIHBheW1lbnQKK3RvIHRoZSB0aGlyZCBwYXJ0eSBiYXNlZCBvbiB0aGUgZXh0ZW50IG9mIHlvdXIgYWN0aXZpdHkgb2YgY29udmV5aW5nCit0aGUgd29yaywgYW5kIHVuZGVyIHdoaWNoIHRoZSB0aGlyZCBwYXJ0eSBncmFudHMsIHRvIGFueSBvZiB0aGUKK3BhcnRpZXMgd2hvIHdvdWxkIHJlY2VpdmUgdGhlIGNvdmVyZWQgd29yayBmcm9tIHlvdSwgYSBkaXNjcmltaW5hdG9yeQorcGF0ZW50IGxpY2Vuc2UgKGEpIGluIGNvbm5lY3Rpb24gd2l0aCBjb3BpZXMgb2YgdGhlIGNvdmVyZWQgd29yaworY29udmV5ZWQgYnkgeW91IChvciBjb3BpZXMgbWFkZSBmcm9tIHRob3NlIGNvcGllcyksIG9yIChiKSBwcmltYXJpbHkKK2ZvciBhbmQgaW4gY29ubmVjdGlvbiB3aXRoIHNwZWNpZmljIHByb2R1Y3RzIG9yIGNvbXBpbGF0aW9ucyB0aGF0Citjb250YWluIHRoZSBjb3ZlcmVkIHdvcmssIHVubGVzcyB5b3UgZW50ZXJlZCBpbnRvIHRoYXQgYXJyYW5nZW1lbnQsCitvciB0aGF0IHBhdGVudCBsaWNlbnNlIHdhcyBncmFudGVkLCBwcmlvciB0byAyOCBNYXJjaCAyMDA3LgorCisgIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGNvbnN0cnVlZCBhcyBleGNsdWRpbmcgb3IgbGltaXRpbmcKK2FueSBpbXBsaWVkIGxpY2Vuc2Ugb3Igb3RoZXIgZGVmZW5zZXMgdG8gaW5mcmluZ2VtZW50IHRoYXQgbWF5CitvdGhlcndpc2UgYmUgYXZhaWxhYmxlIHRvIHlvdSB1bmRlciBhcHBsaWNhYmxlIHBhdGVudCBsYXcuCisKKyAgMTIuIE5vIFN1cnJlbmRlciBvZiBPdGhlcnMnIEZyZWVkb20uCisKKyAgSWYgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QgY29udmV5IGEKK2NvdmVyZWQgd29yayBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdSBtYXkKK25vdCBjb252ZXkgaXQgYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIHlvdSBhZ3JlZSB0byB0ZXJtcyB0aGF0IG9ibGlnYXRlIHlvdQordG8gY29sbGVjdCBhIHJveWFsdHkgZm9yIGZ1cnRoZXIgY29udmV5aW5nIGZyb20gdGhvc2UgdG8gd2hvbSB5b3UgY29udmV5Cit0aGUgUHJvZ3JhbSwgdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggdGhvc2UgdGVybXMgYW5kIHRoaXMKK0xpY2Vuc2Ugd291bGQgYmUgdG8gcmVmcmFpbiBlbnRpcmVseSBmcm9tIGNvbnZleWluZyB0aGUgUHJvZ3JhbS4KKworICAxMy4gVXNlIHdpdGggdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworICBOb3R3aXRoc3RhbmRpbmcgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIHlvdSBoYXZlCitwZXJtaXNzaW9uIHRvIGxpbmsgb3IgY29tYmluZSBhbnkgY292ZXJlZCB3b3JrIHdpdGggYSB3b3JrIGxpY2Vuc2VkCit1bmRlciB2ZXJzaW9uIDMgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnRvIGEgc2luZ2xlCitjb21iaW5lZCB3b3JrLCBhbmQgdG8gY29udmV5IHRoZSByZXN1bHRpbmcgd29yay4gIFRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlIHdpbGwgY29udGludWUgdG8gYXBwbHkgdG8gdGhlIHBhcnQgd2hpY2ggaXMgdGhlIGNvdmVyZWQgd29yaywKK2J1dCB0aGUgc3BlY2lhbCByZXF1aXJlbWVudHMgb2YgdGhlIEdOVSBBZmZlcm8gR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKK3NlY3Rpb24gMTMsIGNvbmNlcm5pbmcgaW50ZXJhY3Rpb24gdGhyb3VnaCBhIG5ldHdvcmsgd2lsbCBhcHBseSB0byB0aGUKK2NvbWJpbmF0aW9uIGFzIHN1Y2guCisKKyAgMTQuIFJldmlzZWQgVmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlLgorCisgIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mCit0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCisgIEVhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlCitQcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgY2VydGFpbiBudW1iZXJlZCB2ZXJzaW9uIG9mIHRoZSBHTlUgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgIm9yIGFueSBsYXRlciB2ZXJzaW9uIiBhcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUKK29wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IG51bWJlcmVkCit2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZAorYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBJZiB0aGUgUHJvZ3JhbSBzcGVjaWZpZXMgdGhhdCBhIHByb3h5IGNhbiBkZWNpZGUgd2hpY2ggZnV0dXJlCit2ZXJzaW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgY2FuIGJlIHVzZWQsIHRoYXQgcHJveHkncworcHVibGljIHN0YXRlbWVudCBvZiBhY2NlcHRhbmNlIG9mIGEgdmVyc2lvbiBwZXJtYW5lbnRseSBhdXRob3JpemVzIHlvdQordG8gY2hvb3NlIHRoYXQgdmVyc2lvbiBmb3IgdGhlIFByb2dyYW0uCisKKyAgTGF0ZXIgbGljZW5zZSB2ZXJzaW9ucyBtYXkgZ2l2ZSB5b3UgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQKK3Blcm1pc3Npb25zLiAgSG93ZXZlciwgbm8gYWRkaXRpb25hbCBvYmxpZ2F0aW9ucyBhcmUgaW1wb3NlZCBvbiBhbnkKK2F1dGhvciBvciBjb3B5cmlnaHQgaG9sZGVyIGFzIGEgcmVzdWx0IG9mIHlvdXIgY2hvb3NpbmcgdG8gZm9sbG93IGEKK2xhdGVyIHZlcnNpb24uCisKKyAgMTUuIERpc2NsYWltZXIgb2YgV2FycmFudHkuCisKKyAgVEhFUkUgSVMgTk8gV0FSUkFOVFkgRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWQorQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTiBPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVAorSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWQorT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCitUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCitQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTQorSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFIFBST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GCitBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKyAgMTYuIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LgorCisgIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORworV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNT0RJRklFUyBBTkQvT1IgQ09OVkVZUworVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZCitHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUKK1VTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YKK0RBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkgWU9VIE9SIFRISVJECitQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFBST0dSQU1TKSwKK0VWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFUy4KKworICAxNy4gSW50ZXJwcmV0YXRpb24gb2YgU2VjdGlvbnMgMTUgYW5kIDE2LgorCisgIElmIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGFuZCBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBwcm92aWRlZAorYWJvdmUgY2Fubm90IGJlIGdpdmVuIGxvY2FsIGxlZ2FsIGVmZmVjdCBhY2NvcmRpbmcgdG8gdGhlaXIgdGVybXMsCityZXZpZXdpbmcgY291cnRzIHNoYWxsIGFwcGx5IGxvY2FsIGxhdyB0aGF0IG1vc3QgY2xvc2VseSBhcHByb3hpbWF0ZXMKK2FuIGFic29sdXRlIHdhaXZlciBvZiBhbGwgY2l2aWwgbGlhYmlsaXR5IGluIGNvbm5lY3Rpb24gd2l0aCB0aGUKK1Byb2dyYW0sIHVubGVzcyBhIHdhcnJhbnR5IG9yIGFzc3VtcHRpb24gb2YgbGlhYmlsaXR5IGFjY29tcGFuaWVzIGEKK2NvcHkgb2YgdGhlIFByb2dyYW0gaW4gcmV0dXJuIGZvciBhIGZlZS4KKworICAgICAgICAgICAgICAgICAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKyAgICAgICAgICAgIEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5CitzdGF0ZSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0Cit0aGUgImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBwcm9ncmFtJ3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOiB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbS4gIElmIG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKKyAgSWYgdGhlIHByb2dyYW0gZG9lcyB0ZXJtaW5hbCBpbnRlcmFjdGlvbiwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydAorbm90aWNlIGxpa2UgdGhpcyB3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCisgICAgPHByb2dyYW0+ICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorICAgIFRoaXMgcHJvZ3JhbSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFk7IGZvciBkZXRhaWxzIHR5cGUgYHNob3cgdycuCisgICAgVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdAorICAgIHVuZGVyIGNlcnRhaW4gY29uZGl0aW9uczsgdHlwZSBgc2hvdyBjJyBmb3IgZGV0YWlscy4KKworVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlCitwYXJ0cyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIE9mIGNvdXJzZSwgeW91ciBwcm9ncmFtJ3MgY29tbWFuZHMKK21pZ2h0IGJlIGRpZmZlcmVudDsgZm9yIGEgR1VJIGludGVyZmFjZSwgeW91IHdvdWxkIHVzZSBhbiAiYWJvdXQgYm94Ii4KKworICBZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3Igc2Nob29sLAoraWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIHByb2dyYW0sIGlmIG5lY2Vzc2FyeS4KK0ZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoaXMsIGFuZCBob3cgdG8gYXBwbHkgYW5kIGZvbGxvdyB0aGUgR05VIEdQTCwgc2VlCis8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCisKKyAgVGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGRvZXMgbm90IHBlcm1pdCBpbmNvcnBvcmF0aW5nIHlvdXIgcHJvZ3JhbQoraW50byBwcm9wcmlldGFyeSBwcm9ncmFtcy4gIElmIHlvdXIgcHJvZ3JhbSBpcyBhIHN1YnJvdXRpbmUgbGlicmFyeSwgeW91CittYXkgY29uc2lkZXIgaXQgbW9yZSB1c2VmdWwgdG8gcGVybWl0IGxpbmtpbmcgcHJvcHJpZXRhcnkgYXBwbGljYXRpb25zIHdpdGgKK3RoZSBsaWJyYXJ5LiAgSWYgdGhpcyBpcyB3aGF0IHlvdSB3YW50IHRvIGRvLCB1c2UgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuICBCdXQgZmlyc3QsIHBsZWFzZSByZWFkCis8aHR0cDovL3d3dy5nbnUub3JnL3BoaWxvc29waHkvd2h5LW5vdC1sZ3BsLmh0bWw+LgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvR1BMLTMrIGIvbGljZW5zZXMvR1BMLTMrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4Y2JmNGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9HUEwtMysKQEAgLTAsMCArMSwyIEBACitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAzIG9yIGFueSBsYXRlciB2ZXJzaW9uLgorU2VlIEdQTC0zIGZvciB0aGUgZnVsbCB0ZXh0IG9mIHRoaXMgbGljZW5zZS4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0dQTC0zLXdpdGgtZm9udC1leGNlcHRpb24gYi9saWNlbnNlcy9HUEwtMy13aXRoLWZvbnQtZXhjZXB0aW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhZDRjNjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9HUEwtMy13aXRoLWZvbnQtZXhjZXB0aW9uCkBAIC0wLDAgKzEsNjgwIEBACitBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCBpZiB5b3UgY3JlYXRlIGEgZG9jdW1lbnQgd2hpY2ggdXNlcyB0aGlzIGZvbnQsIGFuZCBlbWJlZCB0aGlzIGZvbnQgb3IgdW5hbHRlcmVkIHBvcnRpb25zIG9mIHRoaXMgZm9udCBpbnRvIHRoZSBkb2N1bWVudCwgCit0aGlzIGZvbnQgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZG9jdW1lbnQgdG8gYmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIFRoaXMgZXhjZXB0aW9uIGRvZXMgbm90IGhvd2V2ZXIgCitpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZG9jdW1lbnQgbWlnaHQgYmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIElmIHlvdSBtb2RpZnkgdGhpcyBmb250LCB5b3UgbWF5IGV4dGVuZCB0aGlzIAorZXhjZXB0aW9uIHRvIHlvdXIgdmVyc2lvbiBvZiB0aGUgZm9udCwgYnV0IHlvdSBhcmUgbm90IG9ibGlnYXRlZCB0byBkbyBzby4gSWYgeW91IGRvIG5vdCB3aXNoIHRvIGRvIHNvLCBkZWxldGUgdGhpcyBleGNlcHRpb24gc3RhdGVtZW50IGZyb20geW91ciAKK3ZlcnNpb24uCisKKyAgICAgICAgICAgICAgICAgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAzLCAyOSBKdW5lIDIwMDcKKworIENvcHlyaWdodCAoQykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gPGh0dHA6Ly9mc2Yub3JnLz4KKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZWFtYmxlCisKKyAgVGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGEgZnJlZSwgY29weWxlZnQgbGljZW5zZSBmb3IKK3NvZnR3YXJlIGFuZCBvdGhlciBraW5kcyBvZiB3b3Jrcy4KKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYW5kIG90aGVyIHByYWN0aWNhbCB3b3JrcyBhcmUgZGVzaWduZWQKK3RvIHRha2UgYXdheSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSB0aGUgd29ya3MuICBCeSBjb250cmFzdCwKK3RoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvCitzaGFyZSBhbmQgY2hhbmdlIGFsbCB2ZXJzaW9ucyBvZiBhIHByb2dyYW0tLXRvIG1ha2Ugc3VyZSBpdCByZW1haW5zIGZyZWUKK3NvZnR3YXJlIGZvciBhbGwgaXRzIHVzZXJzLiAgV2UsIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHVzZSB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3N0IG9mIG91ciBzb2Z0d2FyZTsgaXQgYXBwbGllcyBhbHNvIHRvCithbnkgb3RoZXIgd29yayByZWxlYXNlZCB0aGlzIHdheSBieSBpdHMgYXV0aG9ycy4gIFlvdSBjYW4gYXBwbHkgaXQgdG8KK3lvdXIgcHJvZ3JhbXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGVtIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0IGlmIHlvdQord2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdCBpbiBuZXcKK2ZyZWUgcHJvZ3JhbXMsIGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gcHJldmVudCBvdGhlcnMgZnJvbSBkZW55aW5nIHlvdQordGhlc2UgcmlnaHRzIG9yIGFza2luZyB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuICBUaGVyZWZvcmUsIHlvdSBoYXZlCitjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYKK3lvdSBtb2RpZnkgaXQ6IHJlc3BvbnNpYmlsaXRpZXMgdG8gcmVzcGVjdCB0aGUgZnJlZWRvbSBvZiBvdGhlcnMuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgcGFzcyBvbiB0byB0aGUgcmVjaXBpZW50cyB0aGUgc2FtZQorZnJlZWRvbXMgdGhhdCB5b3UgcmVjZWl2ZWQuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUKK29yIGNhbiBnZXQgdGhlIHNvdXJjZSBjb2RlLiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5Citrbm93IHRoZWlyIHJpZ2h0cy4KKworICBEZXZlbG9wZXJzIHRoYXQgdXNlIHRoZSBHTlUgR1BMIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6CisoMSkgYXNzZXJ0IGNvcHlyaWdodCBvbiB0aGUgc29mdHdhcmUsIGFuZCAoMikgb2ZmZXIgeW91IHRoaXMgTGljZW5zZQorZ2l2aW5nIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSBpdC4KKworICBGb3IgdGhlIGRldmVsb3BlcnMnIGFuZCBhdXRob3JzJyBwcm90ZWN0aW9uLCB0aGUgR1BMIGNsZWFybHkgZXhwbGFpbnMKK3RoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBzb2Z0d2FyZS4gIEZvciBib3RoIHVzZXJzJyBhbmQKK2F1dGhvcnMnIHNha2UsIHRoZSBHUEwgcmVxdWlyZXMgdGhhdCBtb2RpZmllZCB2ZXJzaW9ucyBiZSBtYXJrZWQgYXMKK2NoYW5nZWQsIHNvIHRoYXQgdGhlaXIgcHJvYmxlbXMgd2lsbCBub3QgYmUgYXR0cmlidXRlZCBlcnJvbmVvdXNseSB0bworYXV0aG9ycyBvZiBwcmV2aW91cyB2ZXJzaW9ucy4KKworICBTb21lIGRldmljZXMgYXJlIGRlc2lnbmVkIHRvIGRlbnkgdXNlcnMgYWNjZXNzIHRvIGluc3RhbGwgb3IgcnVuCittb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgc29mdHdhcmUgaW5zaWRlIHRoZW0sIGFsdGhvdWdoIHRoZSBtYW51ZmFjdHVyZXIKK2NhbiBkbyBzby4gIFRoaXMgaXMgZnVuZGFtZW50YWxseSBpbmNvbXBhdGlibGUgd2l0aCB0aGUgYWltIG9mCitwcm90ZWN0aW5nIHVzZXJzJyBmcmVlZG9tIHRvIGNoYW5nZSB0aGUgc29mdHdhcmUuICBUaGUgc3lzdGVtYXRpYworcGF0dGVybiBvZiBzdWNoIGFidXNlIG9jY3VycyBpbiB0aGUgYXJlYSBvZiBwcm9kdWN0cyBmb3IgaW5kaXZpZHVhbHMgdG8KK3VzZSwgd2hpY2ggaXMgcHJlY2lzZWx5IHdoZXJlIGl0IGlzIG1vc3QgdW5hY2NlcHRhYmxlLiAgVGhlcmVmb3JlLCB3ZQoraGF2ZSBkZXNpZ25lZCB0aGlzIHZlcnNpb24gb2YgdGhlIEdQTCB0byBwcm9oaWJpdCB0aGUgcHJhY3RpY2UgZm9yIHRob3NlCitwcm9kdWN0cy4gIElmIHN1Y2ggcHJvYmxlbXMgYXJpc2Ugc3Vic3RhbnRpYWxseSBpbiBvdGhlciBkb21haW5zLCB3ZQorc3RhbmQgcmVhZHkgdG8gZXh0ZW5kIHRoaXMgcHJvdmlzaW9uIHRvIHRob3NlIGRvbWFpbnMgaW4gZnV0dXJlIHZlcnNpb25zCitvZiB0aGUgR1BMLCBhcyBuZWVkZWQgdG8gcHJvdGVjdCB0aGUgZnJlZWRvbSBvZiB1c2Vycy4KKworICBGaW5hbGx5LCBldmVyeSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZSBwYXRlbnRzLgorU3RhdGVzIHNob3VsZCBub3QgYWxsb3cgcGF0ZW50cyB0byByZXN0cmljdCBkZXZlbG9wbWVudCBhbmQgdXNlIG9mCitzb2Z0d2FyZSBvbiBnZW5lcmFsLXB1cnBvc2UgY29tcHV0ZXJzLCBidXQgaW4gdGhvc2UgdGhhdCBkbywgd2Ugd2lzaCB0bworYXZvaWQgdGhlIHNwZWNpYWwgZGFuZ2VyIHRoYXQgcGF0ZW50cyBhcHBsaWVkIHRvIGEgZnJlZSBwcm9ncmFtIGNvdWxkCittYWtlIGl0IGVmZmVjdGl2ZWx5IHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB0aGUgR1BMIGFzc3VyZXMgdGhhdAorcGF0ZW50cyBjYW5ub3QgYmUgdXNlZCB0byByZW5kZXIgdGhlIHByb2dyYW0gbm9uLWZyZWUuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisKKyAgICAgICAgICAgICAgICAgICAgICAgVEVSTVMgQU5EIENPTkRJVElPTlMKKworICAwLiBEZWZpbml0aW9ucy4KKworICAiVGhpcyBMaWNlbnNlIiByZWZlcnMgdG8gdmVyc2lvbiAzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworICAiQ29weXJpZ2h0IiBhbHNvIG1lYW5zIGNvcHlyaWdodC1saWtlIGxhd3MgdGhhdCBhcHBseSB0byBvdGhlciBraW5kcyBvZgord29ya3MsIHN1Y2ggYXMgc2VtaWNvbmR1Y3RvciBtYXNrcy4KKworICAiVGhlIFByb2dyYW0iIHJlZmVycyB0byBhbnkgY29weXJpZ2h0YWJsZSB3b3JrIGxpY2Vuc2VkIHVuZGVyIHRoaXMKK0xpY2Vuc2UuICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4gICJMaWNlbnNlZXMiIGFuZAorInJlY2lwaWVudHMiIG1heSBiZSBpbmRpdmlkdWFscyBvciBvcmdhbml6YXRpb25zLgorCisgIFRvICJtb2RpZnkiIGEgd29yayBtZWFucyB0byBjb3B5IGZyb20gb3IgYWRhcHQgYWxsIG9yIHBhcnQgb2YgdGhlIHdvcmsKK2luIGEgZmFzaGlvbiByZXF1aXJpbmcgY29weXJpZ2h0IHBlcm1pc3Npb24sIG90aGVyIHRoYW4gdGhlIG1ha2luZyBvZiBhbgorZXhhY3QgY29weS4gIFRoZSByZXN1bHRpbmcgd29yayBpcyBjYWxsZWQgYSAibW9kaWZpZWQgdmVyc2lvbiIgb2YgdGhlCitlYXJsaWVyIHdvcmsgb3IgYSB3b3JrICJiYXNlZCBvbiIgdGhlIGVhcmxpZXIgd29yay4KKworICBBICJjb3ZlcmVkIHdvcmsiIG1lYW5zIGVpdGhlciB0aGUgdW5tb2RpZmllZCBQcm9ncmFtIG9yIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0uCisKKyAgVG8gInByb3BhZ2F0ZSIgYSB3b3JrIG1lYW5zIHRvIGRvIGFueXRoaW5nIHdpdGggaXQgdGhhdCwgd2l0aG91dAorcGVybWlzc2lvbiwgd291bGQgbWFrZSB5b3UgZGlyZWN0bHkgb3Igc2Vjb25kYXJpbHkgbGlhYmxlIGZvcgoraW5mcmluZ2VtZW50IHVuZGVyIGFwcGxpY2FibGUgY29weXJpZ2h0IGxhdywgZXhjZXB0IGV4ZWN1dGluZyBpdCBvbiBhCitjb21wdXRlciBvciBtb2RpZnlpbmcgYSBwcml2YXRlIGNvcHkuICBQcm9wYWdhdGlvbiBpbmNsdWRlcyBjb3B5aW5nLAorZGlzdHJpYnV0aW9uICh3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uKSwgbWFraW5nIGF2YWlsYWJsZSB0byB0aGUKK3B1YmxpYywgYW5kIGluIHNvbWUgY291bnRyaWVzIG90aGVyIGFjdGl2aXRpZXMgYXMgd2VsbC4KKworICBUbyAiY29udmV5IiBhIHdvcmsgbWVhbnMgYW55IGtpbmQgb2YgcHJvcGFnYXRpb24gdGhhdCBlbmFibGVzIG90aGVyCitwYXJ0aWVzIHRvIG1ha2Ugb3IgcmVjZWl2ZSBjb3BpZXMuICBNZXJlIGludGVyYWN0aW9uIHdpdGggYSB1c2VyIHRocm91Z2gKK2EgY29tcHV0ZXIgbmV0d29yaywgd2l0aCBubyB0cmFuc2ZlciBvZiBhIGNvcHksIGlzIG5vdCBjb252ZXlpbmcuCisKKyAgQW4gaW50ZXJhY3RpdmUgdXNlciBpbnRlcmZhY2UgZGlzcGxheXMgIkFwcHJvcHJpYXRlIExlZ2FsIE5vdGljZXMiCit0byB0aGUgZXh0ZW50IHRoYXQgaXQgaW5jbHVkZXMgYSBjb252ZW5pZW50IGFuZCBwcm9taW5lbnRseSB2aXNpYmxlCitmZWF0dXJlIHRoYXQgKDEpIGRpc3BsYXlzIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UsIGFuZCAoMikKK3RlbGxzIHRoZSB1c2VyIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoZSB3b3JrIChleGNlcHQgdG8gdGhlCitleHRlbnQgdGhhdCB3YXJyYW50aWVzIGFyZSBwcm92aWRlZCksIHRoYXQgbGljZW5zZWVzIG1heSBjb252ZXkgdGhlCit3b3JrIHVuZGVyIHRoaXMgTGljZW5zZSwgYW5kIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZgordGhlIGludGVyZmFjZSBwcmVzZW50cyBhIGxpc3Qgb2YgdXNlciBjb21tYW5kcyBvciBvcHRpb25zLCBzdWNoIGFzIGEKK21lbnUsIGEgcHJvbWluZW50IGl0ZW0gaW4gdGhlIGxpc3QgbWVldHMgdGhpcyBjcml0ZXJpb24uCisKKyAgMS4gU291cmNlIENvZGUuCisKKyAgVGhlICJzb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsKK2ZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gICJPYmplY3QgY29kZSIgbWVhbnMgYW55IG5vbi1zb3VyY2UKK2Zvcm0gb2YgYSB3b3JrLgorCisgIEEgIlN0YW5kYXJkIEludGVyZmFjZSIgbWVhbnMgYW4gaW50ZXJmYWNlIHRoYXQgZWl0aGVyIGlzIGFuIG9mZmljaWFsCitzdGFuZGFyZCBkZWZpbmVkIGJ5IGEgcmVjb2duaXplZCBzdGFuZGFyZHMgYm9keSwgb3IsIGluIHRoZSBjYXNlIG9mCitpbnRlcmZhY2VzIHNwZWNpZmllZCBmb3IgYSBwYXJ0aWN1bGFyIHByb2dyYW1taW5nIGxhbmd1YWdlLCBvbmUgdGhhdAoraXMgd2lkZWx5IHVzZWQgYW1vbmcgZGV2ZWxvcGVycyB3b3JraW5nIGluIHRoYXQgbGFuZ3VhZ2UuCisKKyAgVGhlICJTeXN0ZW0gTGlicmFyaWVzIiBvZiBhbiBleGVjdXRhYmxlIHdvcmsgaW5jbHVkZSBhbnl0aGluZywgb3RoZXIKK3RoYW4gdGhlIHdvcmsgYXMgYSB3aG9sZSwgdGhhdCAoYSkgaXMgaW5jbHVkZWQgaW4gdGhlIG5vcm1hbCBmb3JtIG9mCitwYWNrYWdpbmcgYSBNYWpvciBDb21wb25lbnQsIGJ1dCB3aGljaCBpcyBub3QgcGFydCBvZiB0aGF0IE1ham9yCitDb21wb25lbnQsIGFuZCAoYikgc2VydmVzIG9ubHkgdG8gZW5hYmxlIHVzZSBvZiB0aGUgd29yayB3aXRoIHRoYXQKK01ham9yIENvbXBvbmVudCwgb3IgdG8gaW1wbGVtZW50IGEgU3RhbmRhcmQgSW50ZXJmYWNlIGZvciB3aGljaCBhbgoraW1wbGVtZW50YXRpb24gaXMgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgaW4gc291cmNlIGNvZGUgZm9ybS4gIEEKKyJNYWpvciBDb21wb25lbnQiLCBpbiB0aGlzIGNvbnRleHQsIG1lYW5zIGEgbWFqb3IgZXNzZW50aWFsIGNvbXBvbmVudAorKGtlcm5lbCwgd2luZG93IHN5c3RlbSwgYW5kIHNvIG9uKSBvZiB0aGUgc3BlY2lmaWMgb3BlcmF0aW5nIHN5c3RlbQorKGlmIGFueSkgb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgd29yayBydW5zLCBvciBhIGNvbXBpbGVyIHVzZWQgdG8KK3Byb2R1Y2UgdGhlIHdvcmssIG9yIGFuIG9iamVjdCBjb2RlIGludGVycHJldGVyIHVzZWQgdG8gcnVuIGl0LgorCisgIFRoZSAiQ29ycmVzcG9uZGluZyBTb3VyY2UiIGZvciBhIHdvcmsgaW4gb2JqZWN0IGNvZGUgZm9ybSBtZWFucyBhbGwKK3RoZSBzb3VyY2UgY29kZSBuZWVkZWQgdG8gZ2VuZXJhdGUsIGluc3RhbGwsIGFuZCAoZm9yIGFuIGV4ZWN1dGFibGUKK3dvcmspIHJ1biB0aGUgb2JqZWN0IGNvZGUgYW5kIHRvIG1vZGlmeSB0aGUgd29yaywgaW5jbHVkaW5nIHNjcmlwdHMgdG8KK2NvbnRyb2wgdGhvc2UgYWN0aXZpdGllcy4gIEhvd2V2ZXIsIGl0IGRvZXMgbm90IGluY2x1ZGUgdGhlIHdvcmsncworU3lzdGVtIExpYnJhcmllcywgb3IgZ2VuZXJhbC1wdXJwb3NlIHRvb2xzIG9yIGdlbmVyYWxseSBhdmFpbGFibGUgZnJlZQorcHJvZ3JhbXMgd2hpY2ggYXJlIHVzZWQgdW5tb2RpZmllZCBpbiBwZXJmb3JtaW5nIHRob3NlIGFjdGl2aXRpZXMgYnV0Cit3aGljaCBhcmUgbm90IHBhcnQgb2YgdGhlIHdvcmsuICBGb3IgZXhhbXBsZSwgQ29ycmVzcG9uZGluZyBTb3VyY2UKK2luY2x1ZGVzIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzIGFzc29jaWF0ZWQgd2l0aCBzb3VyY2UgZmlsZXMgZm9yCit0aGUgd29yaywgYW5kIHRoZSBzb3VyY2UgY29kZSBmb3Igc2hhcmVkIGxpYnJhcmllcyBhbmQgZHluYW1pY2FsbHkKK2xpbmtlZCBzdWJwcm9ncmFtcyB0aGF0IHRoZSB3b3JrIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byByZXF1aXJlLAorc3VjaCBhcyBieSBpbnRpbWF0ZSBkYXRhIGNvbW11bmljYXRpb24gb3IgY29udHJvbCBmbG93IGJldHdlZW4gdGhvc2UKK3N1YnByb2dyYW1zIGFuZCBvdGhlciBwYXJ0cyBvZiB0aGUgd29yay4KKworICBUaGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IHVzZXJzCitjYW4gcmVnZW5lcmF0ZSBhdXRvbWF0aWNhbGx5IGZyb20gb3RoZXIgcGFydHMgb2YgdGhlIENvcnJlc3BvbmRpbmcKK1NvdXJjZS4KKworICBUaGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIGEgd29yayBpbiBzb3VyY2UgY29kZSBmb3JtIGlzIHRoYXQKK3NhbWUgd29yay4KKworICAyLiBCYXNpYyBQZXJtaXNzaW9ucy4KKworICBBbGwgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFyZSBncmFudGVkIGZvciB0aGUgdGVybSBvZgorY29weXJpZ2h0IG9uIHRoZSBQcm9ncmFtLCBhbmQgYXJlIGlycmV2b2NhYmxlIHByb3ZpZGVkIHRoZSBzdGF0ZWQKK2NvbmRpdGlvbnMgYXJlIG1ldC4gIFRoaXMgTGljZW5zZSBleHBsaWNpdGx5IGFmZmlybXMgeW91ciB1bmxpbWl0ZWQKK3Blcm1pc3Npb24gdG8gcnVuIHRoZSB1bm1vZGlmaWVkIFByb2dyYW0uICBUaGUgb3V0cHV0IGZyb20gcnVubmluZyBhCitjb3ZlcmVkIHdvcmsgaXMgY292ZXJlZCBieSB0aGlzIExpY2Vuc2Ugb25seSBpZiB0aGUgb3V0cHV0LCBnaXZlbiBpdHMKK2NvbnRlbnQsIGNvbnN0aXR1dGVzIGEgY292ZXJlZCB3b3JrLiAgVGhpcyBMaWNlbnNlIGFja25vd2xlZGdlcyB5b3VyCityaWdodHMgb2YgZmFpciB1c2Ugb3Igb3RoZXIgZXF1aXZhbGVudCwgYXMgcHJvdmlkZWQgYnkgY29weXJpZ2h0IGxhdy4KKworICBZb3UgbWF5IG1ha2UsIHJ1biBhbmQgcHJvcGFnYXRlIGNvdmVyZWQgd29ya3MgdGhhdCB5b3UgZG8gbm90Citjb252ZXksIHdpdGhvdXQgY29uZGl0aW9ucyBzbyBsb25nIGFzIHlvdXIgbGljZW5zZSBvdGhlcndpc2UgcmVtYWlucworaW4gZm9yY2UuICBZb3UgbWF5IGNvbnZleSBjb3ZlcmVkIHdvcmtzIHRvIG90aGVycyBmb3IgdGhlIHNvbGUgcHVycG9zZQorb2YgaGF2aW5nIHRoZW0gbWFrZSBtb2RpZmljYXRpb25zIGV4Y2x1c2l2ZWx5IGZvciB5b3UsIG9yIHByb3ZpZGUgeW91Cit3aXRoIGZhY2lsaXRpZXMgZm9yIHJ1bm5pbmcgdGhvc2Ugd29ya3MsIHByb3ZpZGVkIHRoYXQgeW91IGNvbXBseSB3aXRoCit0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGluIGNvbnZleWluZyBhbGwgbWF0ZXJpYWwgZm9yIHdoaWNoIHlvdSBkbworbm90IGNvbnRyb2wgY29weXJpZ2h0LiAgVGhvc2UgdGh1cyBtYWtpbmcgb3IgcnVubmluZyB0aGUgY292ZXJlZCB3b3JrcworZm9yIHlvdSBtdXN0IGRvIHNvIGV4Y2x1c2l2ZWx5IG9uIHlvdXIgYmVoYWxmLCB1bmRlciB5b3VyIGRpcmVjdGlvbgorYW5kIGNvbnRyb2wsIG9uIHRlcm1zIHRoYXQgcHJvaGliaXQgdGhlbSBmcm9tIG1ha2luZyBhbnkgY29waWVzIG9mCit5b3VyIGNvcHlyaWdodGVkIG1hdGVyaWFsIG91dHNpZGUgdGhlaXIgcmVsYXRpb25zaGlwIHdpdGggeW91LgorCisgIENvbnZleWluZyB1bmRlciBhbnkgb3RoZXIgY2lyY3Vtc3RhbmNlcyBpcyBwZXJtaXR0ZWQgc29sZWx5IHVuZGVyCit0aGUgY29uZGl0aW9ucyBzdGF0ZWQgYmVsb3cuICBTdWJsaWNlbnNpbmcgaXMgbm90IGFsbG93ZWQ7IHNlY3Rpb24gMTAKK21ha2VzIGl0IHVubmVjZXNzYXJ5LgorCisgIDMuIFByb3RlY3RpbmcgVXNlcnMnIExlZ2FsIFJpZ2h0cyBGcm9tIEFudGktQ2lyY3VtdmVudGlvbiBMYXcuCisKKyAgTm8gY292ZXJlZCB3b3JrIHNoYWxsIGJlIGRlZW1lZCBwYXJ0IG9mIGFuIGVmZmVjdGl2ZSB0ZWNobm9sb2dpY2FsCittZWFzdXJlIHVuZGVyIGFueSBhcHBsaWNhYmxlIGxhdyBmdWxmaWxsaW5nIG9ibGlnYXRpb25zIHVuZGVyIGFydGljbGUKKzExIG9mIHRoZSBXSVBPIGNvcHlyaWdodCB0cmVhdHkgYWRvcHRlZCBvbiAyMCBEZWNlbWJlciAxOTk2LCBvcgorc2ltaWxhciBsYXdzIHByb2hpYml0aW5nIG9yIHJlc3RyaWN0aW5nIGNpcmN1bXZlbnRpb24gb2Ygc3VjaAorbWVhc3VyZXMuCisKKyAgV2hlbiB5b3UgY29udmV5IGEgY292ZXJlZCB3b3JrLCB5b3Ugd2FpdmUgYW55IGxlZ2FsIHBvd2VyIHRvIGZvcmJpZAorY2lyY3VtdmVudGlvbiBvZiB0ZWNobm9sb2dpY2FsIG1lYXN1cmVzIHRvIHRoZSBleHRlbnQgc3VjaCBjaXJjdW12ZW50aW9uCitpcyBlZmZlY3RlZCBieSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvCit0aGUgY292ZXJlZCB3b3JrLCBhbmQgeW91IGRpc2NsYWltIGFueSBpbnRlbnRpb24gdG8gbGltaXQgb3BlcmF0aW9uIG9yCittb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgYXMgYSBtZWFucyBvZiBlbmZvcmNpbmcsIGFnYWluc3QgdGhlIHdvcmsncwordXNlcnMsIHlvdXIgb3IgdGhpcmQgcGFydGllcycgbGVnYWwgcmlnaHRzIHRvIGZvcmJpZCBjaXJjdW12ZW50aW9uIG9mCit0ZWNobm9sb2dpY2FsIG1lYXN1cmVzLgorCisgIDQuIENvbnZleWluZyBWZXJiYXRpbSBDb3BpZXMuCisKKyAgWW91IG1heSBjb252ZXkgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3Mgc291cmNlIGNvZGUgYXMgeW91CityZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZAorYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlOwora2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgc3RhdGluZyB0aGF0IHRoaXMgTGljZW5zZSBhbmQgYW55Citub24tcGVybWlzc2l2ZSB0ZXJtcyBhZGRlZCBpbiBhY2NvcmQgd2l0aCBzZWN0aW9uIDcgYXBwbHkgdG8gdGhlIGNvZGU7CitrZWVwIGludGFjdCBhbGwgbm90aWNlcyBvZiB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7IGFuZCBnaXZlIGFsbAorcmVjaXBpZW50cyBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIFByb2dyYW0uCisKKyAgWW91IG1heSBjaGFyZ2UgYW55IHByaWNlIG9yIG5vIHByaWNlIGZvciBlYWNoIGNvcHkgdGhhdCB5b3UgY29udmV5LAorYW5kIHlvdSBtYXkgb2ZmZXIgc3VwcG9ydCBvciB3YXJyYW50eSBwcm90ZWN0aW9uIGZvciBhIGZlZS4KKworICA1LiBDb252ZXlpbmcgTW9kaWZpZWQgU291cmNlIFZlcnNpb25zLgorCisgIFlvdSBtYXkgY29udmV5IGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgb3IgdGhlIG1vZGlmaWNhdGlvbnMgdG8KK3Byb2R1Y2UgaXQgZnJvbSB0aGUgUHJvZ3JhbSwgaW4gdGhlIGZvcm0gb2Ygc291cmNlIGNvZGUgdW5kZXIgdGhlCit0ZXJtcyBvZiBzZWN0aW9uIDQsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFRoZSB3b3JrIG11c3QgY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHlvdSBtb2RpZmllZAorICAgIGl0LCBhbmQgZ2l2aW5nIGEgcmVsZXZhbnQgZGF0ZS4KKworICAgIGIpIFRoZSB3b3JrIG11c3QgY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IGl0IGlzCisgICAgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBhbnkgY29uZGl0aW9ucyBhZGRlZCB1bmRlciBzZWN0aW9uCisgICAgNy4gIFRoaXMgcmVxdWlyZW1lbnQgbW9kaWZpZXMgdGhlIHJlcXVpcmVtZW50IGluIHNlY3Rpb24gNCB0bworICAgICJrZWVwIGludGFjdCBhbGwgbm90aWNlcyIuCisKKyAgICBjKSBZb3UgbXVzdCBsaWNlbnNlIHRoZSBlbnRpcmUgd29yaywgYXMgYSB3aG9sZSwgdW5kZXIgdGhpcworICAgIExpY2Vuc2UgdG8gYW55b25lIHdobyBjb21lcyBpbnRvIHBvc3Nlc3Npb24gb2YgYSBjb3B5LiAgVGhpcworICAgIExpY2Vuc2Ugd2lsbCB0aGVyZWZvcmUgYXBwbHksIGFsb25nIHdpdGggYW55IGFwcGxpY2FibGUgc2VjdGlvbiA3CisgICAgYWRkaXRpb25hbCB0ZXJtcywgdG8gdGhlIHdob2xlIG9mIHRoZSB3b3JrLCBhbmQgYWxsIGl0cyBwYXJ0cywKKyAgICByZWdhcmRsZXNzIG9mIGhvdyB0aGV5IGFyZSBwYWNrYWdlZC4gIFRoaXMgTGljZW5zZSBnaXZlcyBubworICAgIHBlcm1pc3Npb24gdG8gbGljZW5zZSB0aGUgd29yayBpbiBhbnkgb3RoZXIgd2F5LCBidXQgaXQgZG9lcyBub3QKKyAgICBpbnZhbGlkYXRlIHN1Y2ggcGVybWlzc2lvbiBpZiB5b3UgaGF2ZSBzZXBhcmF0ZWx5IHJlY2VpdmVkIGl0LgorCisgICAgZCkgSWYgdGhlIHdvcmsgaGFzIGludGVyYWN0aXZlIHVzZXIgaW50ZXJmYWNlcywgZWFjaCBtdXN0IGRpc3BsYXkKKyAgICBBcHByb3ByaWF0ZSBMZWdhbCBOb3RpY2VzOyBob3dldmVyLCBpZiB0aGUgUHJvZ3JhbSBoYXMgaW50ZXJhY3RpdmUKKyAgICBpbnRlcmZhY2VzIHRoYXQgZG8gbm90IGRpc3BsYXkgQXBwcm9wcmlhdGUgTGVnYWwgTm90aWNlcywgeW91cgorICAgIHdvcmsgbmVlZCBub3QgbWFrZSB0aGVtIGRvIHNvLgorCisgIEEgY29tcGlsYXRpb24gb2YgYSBjb3ZlcmVkIHdvcmsgd2l0aCBvdGhlciBzZXBhcmF0ZSBhbmQgaW5kZXBlbmRlbnQKK3dvcmtzLCB3aGljaCBhcmUgbm90IGJ5IHRoZWlyIG5hdHVyZSBleHRlbnNpb25zIG9mIHRoZSBjb3ZlcmVkIHdvcmssCithbmQgd2hpY2ggYXJlIG5vdCBjb21iaW5lZCB3aXRoIGl0IHN1Y2ggYXMgdG8gZm9ybSBhIGxhcmdlciBwcm9ncmFtLAoraW4gb3Igb24gYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0sIGlzIGNhbGxlZCBhbgorImFnZ3JlZ2F0ZSIgaWYgdGhlIGNvbXBpbGF0aW9uIGFuZCBpdHMgcmVzdWx0aW5nIGNvcHlyaWdodCBhcmUgbm90Cit1c2VkIHRvIGxpbWl0IHRoZSBhY2Nlc3Mgb3IgbGVnYWwgcmlnaHRzIG9mIHRoZSBjb21waWxhdGlvbidzIHVzZXJzCitiZXlvbmQgd2hhdCB0aGUgaW5kaXZpZHVhbCB3b3JrcyBwZXJtaXQuICBJbmNsdXNpb24gb2YgYSBjb3ZlcmVkIHdvcmsKK2luIGFuIGFnZ3JlZ2F0ZSBkb2VzIG5vdCBjYXVzZSB0aGlzIExpY2Vuc2UgdG8gYXBwbHkgdG8gdGhlIG90aGVyCitwYXJ0cyBvZiB0aGUgYWdncmVnYXRlLgorCisgIDYuIENvbnZleWluZyBOb24tU291cmNlIEZvcm1zLgorCisgIFlvdSBtYXkgY29udmV5IGEgY292ZXJlZCB3b3JrIGluIG9iamVjdCBjb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zCitvZiBzZWN0aW9ucyA0IGFuZCA1LCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGNvbnZleSB0aGUKK21hY2hpbmUtcmVhZGFibGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwKK2luIG9uZSBvZiB0aGVzZSB3YXlzOgorCisgICAgYSkgQ29udmV5IHRoZSBvYmplY3QgY29kZSBpbiwgb3IgZW1ib2RpZWQgaW4sIGEgcGh5c2ljYWwgcHJvZHVjdAorICAgIChpbmNsdWRpbmcgYSBwaHlzaWNhbCBkaXN0cmlidXRpb24gbWVkaXVtKSwgYWNjb21wYW5pZWQgYnkgdGhlCisgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UgZml4ZWQgb24gYSBkdXJhYmxlIHBoeXNpY2FsIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgorCisgICAgYikgQ29udmV5IHRoZSBvYmplY3QgY29kZSBpbiwgb3IgZW1ib2RpZWQgaW4sIGEgcGh5c2ljYWwgcHJvZHVjdAorICAgIChpbmNsdWRpbmcgYSBwaHlzaWNhbCBkaXN0cmlidXRpb24gbWVkaXVtKSwgYWNjb21wYW5pZWQgYnkgYQorICAgIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZSB5ZWFycyBhbmQgdmFsaWQgZm9yIGFzCisgICAgbG9uZyBhcyB5b3Ugb2ZmZXIgc3BhcmUgcGFydHMgb3IgY3VzdG9tZXIgc3VwcG9ydCBmb3IgdGhhdCBwcm9kdWN0CisgICAgbW9kZWwsIHRvIGdpdmUgYW55b25lIHdobyBwb3NzZXNzZXMgdGhlIG9iamVjdCBjb2RlIGVpdGhlciAoMSkgYQorICAgIGNvcHkgb2YgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGZvciBhbGwgdGhlIHNvZnR3YXJlIGluIHRoZQorICAgIHByb2R1Y3QgdGhhdCBpcyBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSwgb24gYSBkdXJhYmxlIHBoeXNpY2FsCisgICAgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLCBmb3IgYSBwcmljZSBubworICAgIG1vcmUgdGhhbiB5b3VyIHJlYXNvbmFibGUgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgdGhpcworICAgIGNvbnZleWluZyBvZiBzb3VyY2UsIG9yICgyKSBhY2Nlc3MgdG8gY29weSB0aGUKKyAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBmcm9tIGEgbmV0d29yayBzZXJ2ZXIgYXQgbm8gY2hhcmdlLgorCisgICAgYykgQ29udmV5IGluZGl2aWR1YWwgY29waWVzIG9mIHRoZSBvYmplY3QgY29kZSB3aXRoIGEgY29weSBvZiB0aGUKKyAgICB3cml0dGVuIG9mZmVyIHRvIHByb3ZpZGUgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlLiAgVGhpcworICAgIGFsdGVybmF0aXZlIGlzIGFsbG93ZWQgb25seSBvY2Nhc2lvbmFsbHkgYW5kIG5vbmNvbW1lcmNpYWxseSwgYW5kCisgICAgb25seSBpZiB5b3UgcmVjZWl2ZWQgdGhlIG9iamVjdCBjb2RlIHdpdGggc3VjaCBhbiBvZmZlciwgaW4gYWNjb3JkCisgICAgd2l0aCBzdWJzZWN0aW9uIDZiLgorCisgICAgZCkgQ29udmV5IHRoZSBvYmplY3QgY29kZSBieSBvZmZlcmluZyBhY2Nlc3MgZnJvbSBhIGRlc2lnbmF0ZWQKKyAgICBwbGFjZSAoZ3JhdGlzIG9yIGZvciBhIGNoYXJnZSksIGFuZCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byB0aGUKKyAgICBDb3JyZXNwb25kaW5nIFNvdXJjZSBpbiB0aGUgc2FtZSB3YXkgdGhyb3VnaCB0aGUgc2FtZSBwbGFjZSBhdCBubworICAgIGZ1cnRoZXIgY2hhcmdlLiAgWW91IG5lZWQgbm90IHJlcXVpcmUgcmVjaXBpZW50cyB0byBjb3B5IHRoZQorICAgIENvcnJlc3BvbmRpbmcgU291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLiAgSWYgdGhlIHBsYWNlIHRvCisgICAgY29weSB0aGUgb2JqZWN0IGNvZGUgaXMgYSBuZXR3b3JrIHNlcnZlciwgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlCisgICAgbWF5IGJlIG9uIGEgZGlmZmVyZW50IHNlcnZlciAob3BlcmF0ZWQgYnkgeW91IG9yIGEgdGhpcmQgcGFydHkpCisgICAgdGhhdCBzdXBwb3J0cyBlcXVpdmFsZW50IGNvcHlpbmcgZmFjaWxpdGllcywgcHJvdmlkZWQgeW91IG1haW50YWluCisgICAgY2xlYXIgZGlyZWN0aW9ucyBuZXh0IHRvIHRoZSBvYmplY3QgY29kZSBzYXlpbmcgd2hlcmUgdG8gZmluZCB0aGUKKyAgICBDb3JyZXNwb25kaW5nIFNvdXJjZS4gIFJlZ2FyZGxlc3Mgb2Ygd2hhdCBzZXJ2ZXIgaG9zdHMgdGhlCisgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UsIHlvdSByZW1haW4gb2JsaWdhdGVkIHRvIGVuc3VyZSB0aGF0IGl0IGlzCisgICAgYXZhaWxhYmxlIGZvciBhcyBsb25nIGFzIG5lZWRlZCB0byBzYXRpc2Z5IHRoZXNlIHJlcXVpcmVtZW50cy4KKworICAgIGUpIENvbnZleSB0aGUgb2JqZWN0IGNvZGUgdXNpbmcgcGVlci10by1wZWVyIHRyYW5zbWlzc2lvbiwgcHJvdmlkZWQKKyAgICB5b3UgaW5mb3JtIG90aGVyIHBlZXJzIHdoZXJlIHRoZSBvYmplY3QgY29kZSBhbmQgQ29ycmVzcG9uZGluZworICAgIFNvdXJjZSBvZiB0aGUgd29yayBhcmUgYmVpbmcgb2ZmZXJlZCB0byB0aGUgZ2VuZXJhbCBwdWJsaWMgYXQgbm8KKyAgICBjaGFyZ2UgdW5kZXIgc3Vic2VjdGlvbiA2ZC4KKworICBBIHNlcGFyYWJsZSBwb3J0aW9uIG9mIHRoZSBvYmplY3QgY29kZSwgd2hvc2Ugc291cmNlIGNvZGUgaXMgZXhjbHVkZWQKK2Zyb20gdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIGFzIGEgU3lzdGVtIExpYnJhcnksIG5lZWQgbm90IGJlCitpbmNsdWRlZCBpbiBjb252ZXlpbmcgdGhlIG9iamVjdCBjb2RlIHdvcmsuCisKKyAgQSAiVXNlciBQcm9kdWN0IiBpcyBlaXRoZXIgKDEpIGEgImNvbnN1bWVyIHByb2R1Y3QiLCB3aGljaCBtZWFucyBhbnkKK3RhbmdpYmxlIHBlcnNvbmFsIHByb3BlcnR5IHdoaWNoIGlzIG5vcm1hbGx5IHVzZWQgZm9yIHBlcnNvbmFsLCBmYW1pbHksCitvciBob3VzZWhvbGQgcHVycG9zZXMsIG9yICgyKSBhbnl0aGluZyBkZXNpZ25lZCBvciBzb2xkIGZvciBpbmNvcnBvcmF0aW9uCitpbnRvIGEgZHdlbGxpbmcuICBJbiBkZXRlcm1pbmluZyB3aGV0aGVyIGEgcHJvZHVjdCBpcyBhIGNvbnN1bWVyIHByb2R1Y3QsCitkb3VidGZ1bCBjYXNlcyBzaGFsbCBiZSByZXNvbHZlZCBpbiBmYXZvciBvZiBjb3ZlcmFnZS4gIEZvciBhIHBhcnRpY3VsYXIKK3Byb2R1Y3QgcmVjZWl2ZWQgYnkgYSBwYXJ0aWN1bGFyIHVzZXIsICJub3JtYWxseSB1c2VkIiByZWZlcnMgdG8gYQordHlwaWNhbCBvciBjb21tb24gdXNlIG9mIHRoYXQgY2xhc3Mgb2YgcHJvZHVjdCwgcmVnYXJkbGVzcyBvZiB0aGUgc3RhdHVzCitvZiB0aGUgcGFydGljdWxhciB1c2VyIG9yIG9mIHRoZSB3YXkgaW4gd2hpY2ggdGhlIHBhcnRpY3VsYXIgdXNlcgorYWN0dWFsbHkgdXNlcywgb3IgZXhwZWN0cyBvciBpcyBleHBlY3RlZCB0byB1c2UsIHRoZSBwcm9kdWN0LiAgQSBwcm9kdWN0CitpcyBhIGNvbnN1bWVyIHByb2R1Y3QgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBwcm9kdWN0IGhhcyBzdWJzdGFudGlhbAorY29tbWVyY2lhbCwgaW5kdXN0cmlhbCBvciBub24tY29uc3VtZXIgdXNlcywgdW5sZXNzIHN1Y2ggdXNlcyByZXByZXNlbnQKK3RoZSBvbmx5IHNpZ25pZmljYW50IG1vZGUgb2YgdXNlIG9mIHRoZSBwcm9kdWN0LgorCisgICJJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24iIGZvciBhIFVzZXIgUHJvZHVjdCBtZWFucyBhbnkgbWV0aG9kcywKK3Byb2NlZHVyZXMsIGF1dGhvcml6YXRpb24ga2V5cywgb3Igb3RoZXIgaW5mb3JtYXRpb24gcmVxdWlyZWQgdG8gaW5zdGFsbAorYW5kIGV4ZWN1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgYSBjb3ZlcmVkIHdvcmsgaW4gdGhhdCBVc2VyIFByb2R1Y3QgZnJvbQorYSBtb2RpZmllZCB2ZXJzaW9uIG9mIGl0cyBDb3JyZXNwb25kaW5nIFNvdXJjZS4gIFRoZSBpbmZvcm1hdGlvbiBtdXN0CitzdWZmaWNlIHRvIGVuc3VyZSB0aGF0IHRoZSBjb250aW51ZWQgZnVuY3Rpb25pbmcgb2YgdGhlIG1vZGlmaWVkIG9iamVjdAorY29kZSBpcyBpbiBubyBjYXNlIHByZXZlbnRlZCBvciBpbnRlcmZlcmVkIHdpdGggc29sZWx5IGJlY2F1c2UKK21vZGlmaWNhdGlvbiBoYXMgYmVlbiBtYWRlLgorCisgIElmIHlvdSBjb252ZXkgYW4gb2JqZWN0IGNvZGUgd29yayB1bmRlciB0aGlzIHNlY3Rpb24gaW4sIG9yIHdpdGgsIG9yCitzcGVjaWZpY2FsbHkgZm9yIHVzZSBpbiwgYSBVc2VyIFByb2R1Y3QsIGFuZCB0aGUgY29udmV5aW5nIG9jY3VycyBhcworcGFydCBvZiBhIHRyYW5zYWN0aW9uIGluIHdoaWNoIHRoZSByaWdodCBvZiBwb3NzZXNzaW9uIGFuZCB1c2Ugb2YgdGhlCitVc2VyIFByb2R1Y3QgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIHJlY2lwaWVudCBpbiBwZXJwZXR1aXR5IG9yIGZvciBhCitmaXhlZCB0ZXJtIChyZWdhcmRsZXNzIG9mIGhvdyB0aGUgdHJhbnNhY3Rpb24gaXMgY2hhcmFjdGVyaXplZCksIHRoZQorQ29ycmVzcG9uZGluZyBTb3VyY2UgY29udmV5ZWQgdW5kZXIgdGhpcyBzZWN0aW9uIG11c3QgYmUgYWNjb21wYW5pZWQKK2J5IHRoZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24uICBCdXQgdGhpcyByZXF1aXJlbWVudCBkb2VzIG5vdCBhcHBseQoraWYgbmVpdGhlciB5b3Ugbm9yIGFueSB0aGlyZCBwYXJ0eSByZXRhaW5zIHRoZSBhYmlsaXR5IHRvIGluc3RhbGwKK21vZGlmaWVkIG9iamVjdCBjb2RlIG9uIHRoZSBVc2VyIFByb2R1Y3QgKGZvciBleGFtcGxlLCB0aGUgd29yayBoYXMKK2JlZW4gaW5zdGFsbGVkIGluIFJPTSkuCisKKyAgVGhlIHJlcXVpcmVtZW50IHRvIHByb3ZpZGUgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIGRvZXMgbm90IGluY2x1ZGUgYQorcmVxdWlyZW1lbnQgdG8gY29udGludWUgdG8gcHJvdmlkZSBzdXBwb3J0IHNlcnZpY2UsIHdhcnJhbnR5LCBvciB1cGRhdGVzCitmb3IgYSB3b3JrIHRoYXQgaGFzIGJlZW4gbW9kaWZpZWQgb3IgaW5zdGFsbGVkIGJ5IHRoZSByZWNpcGllbnQsIG9yIGZvcgordGhlIFVzZXIgUHJvZHVjdCBpbiB3aGljaCBpdCBoYXMgYmVlbiBtb2RpZmllZCBvciBpbnN0YWxsZWQuICBBY2Nlc3MgdG8gYQorbmV0d29yayBtYXkgYmUgZGVuaWVkIHdoZW4gdGhlIG1vZGlmaWNhdGlvbiBpdHNlbGYgbWF0ZXJpYWxseSBhbmQKK2FkdmVyc2VseSBhZmZlY3RzIHRoZSBvcGVyYXRpb24gb2YgdGhlIG5ldHdvcmsgb3IgdmlvbGF0ZXMgdGhlIHJ1bGVzIGFuZAorcHJvdG9jb2xzIGZvciBjb21tdW5pY2F0aW9uIGFjcm9zcyB0aGUgbmV0d29yay4KKworICBDb3JyZXNwb25kaW5nIFNvdXJjZSBjb252ZXllZCwgYW5kIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiBwcm92aWRlZCwKK2luIGFjY29yZCB3aXRoIHRoaXMgc2VjdGlvbiBtdXN0IGJlIGluIGEgZm9ybWF0IHRoYXQgaXMgcHVibGljbHkKK2RvY3VtZW50ZWQgKGFuZCB3aXRoIGFuIGltcGxlbWVudGF0aW9uIGF2YWlsYWJsZSB0byB0aGUgcHVibGljIGluCitzb3VyY2UgY29kZSBmb3JtKSwgYW5kIG11c3QgcmVxdWlyZSBubyBzcGVjaWFsIHBhc3N3b3JkIG9yIGtleSBmb3IKK3VucGFja2luZywgcmVhZGluZyBvciBjb3B5aW5nLgorCisgIDcuIEFkZGl0aW9uYWwgVGVybXMuCisKKyAgIkFkZGl0aW9uYWwgcGVybWlzc2lvbnMiIGFyZSB0ZXJtcyB0aGF0IHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMKK0xpY2Vuc2UgYnkgbWFraW5nIGV4Y2VwdGlvbnMgZnJvbSBvbmUgb3IgbW9yZSBvZiBpdHMgY29uZGl0aW9ucy4KK0FkZGl0aW9uYWwgcGVybWlzc2lvbnMgdGhhdCBhcmUgYXBwbGljYWJsZSB0byB0aGUgZW50aXJlIFByb2dyYW0gc2hhbGwKK2JlIHRyZWF0ZWQgYXMgdGhvdWdoIHRoZXkgd2VyZSBpbmNsdWRlZCBpbiB0aGlzIExpY2Vuc2UsIHRvIHRoZSBleHRlbnQKK3RoYXQgdGhleSBhcmUgdmFsaWQgdW5kZXIgYXBwbGljYWJsZSBsYXcuICBJZiBhZGRpdGlvbmFsIHBlcm1pc3Npb25zCithcHBseSBvbmx5IHRvIHBhcnQgb2YgdGhlIFByb2dyYW0sIHRoYXQgcGFydCBtYXkgYmUgdXNlZCBzZXBhcmF0ZWx5Cit1bmRlciB0aG9zZSBwZXJtaXNzaW9ucywgYnV0IHRoZSBlbnRpcmUgUHJvZ3JhbSByZW1haW5zIGdvdmVybmVkIGJ5Cit0aGlzIExpY2Vuc2Ugd2l0aG91dCByZWdhcmQgdG8gdGhlIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMuCisKKyAgV2hlbiB5b3UgY29udmV5IGEgY29weSBvZiBhIGNvdmVyZWQgd29yaywgeW91IG1heSBhdCB5b3VyIG9wdGlvbgorcmVtb3ZlIGFueSBhZGRpdGlvbmFsIHBlcm1pc3Npb25zIGZyb20gdGhhdCBjb3B5LCBvciBmcm9tIGFueSBwYXJ0IG9mCitpdC4gIChBZGRpdGlvbmFsIHBlcm1pc3Npb25zIG1heSBiZSB3cml0dGVuIHRvIHJlcXVpcmUgdGhlaXIgb3duCityZW1vdmFsIGluIGNlcnRhaW4gY2FzZXMgd2hlbiB5b3UgbW9kaWZ5IHRoZSB3b3JrLikgIFlvdSBtYXkgcGxhY2UKK2FkZGl0aW9uYWwgcGVybWlzc2lvbnMgb24gbWF0ZXJpYWwsIGFkZGVkIGJ5IHlvdSB0byBhIGNvdmVyZWQgd29yaywKK2ZvciB3aGljaCB5b3UgaGF2ZSBvciBjYW4gZ2l2ZSBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgcGVybWlzc2lvbi4KKworICBOb3R3aXRoc3RhbmRpbmcgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIGZvciBtYXRlcmlhbCB5b3UKK2FkZCB0byBhIGNvdmVyZWQgd29yaywgeW91IG1heSAoaWYgYXV0aG9yaXplZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlcnMgb2YKK3RoYXQgbWF0ZXJpYWwpIHN1cHBsZW1lbnQgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRlcm1zOgorCisgICAgYSkgRGlzY2xhaW1pbmcgd2FycmFudHkgb3IgbGltaXRpbmcgbGlhYmlsaXR5IGRpZmZlcmVudGx5IGZyb20gdGhlCisgICAgdGVybXMgb2Ygc2VjdGlvbnMgMTUgYW5kIDE2IG9mIHRoaXMgTGljZW5zZTsgb3IKKworICAgIGIpIFJlcXVpcmluZyBwcmVzZXJ2YXRpb24gb2Ygc3BlY2lmaWVkIHJlYXNvbmFibGUgbGVnYWwgbm90aWNlcyBvcgorICAgIGF1dGhvciBhdHRyaWJ1dGlvbnMgaW4gdGhhdCBtYXRlcmlhbCBvciBpbiB0aGUgQXBwcm9wcmlhdGUgTGVnYWwKKyAgICBOb3RpY2VzIGRpc3BsYXllZCBieSB3b3JrcyBjb250YWluaW5nIGl0OyBvcgorCisgICAgYykgUHJvaGliaXRpbmcgbWlzcmVwcmVzZW50YXRpb24gb2YgdGhlIG9yaWdpbiBvZiB0aGF0IG1hdGVyaWFsLCBvcgorICAgIHJlcXVpcmluZyB0aGF0IG1vZGlmaWVkIHZlcnNpb25zIG9mIHN1Y2ggbWF0ZXJpYWwgYmUgbWFya2VkIGluCisgICAgcmVhc29uYWJsZSB3YXlzIGFzIGRpZmZlcmVudCBmcm9tIHRoZSBvcmlnaW5hbCB2ZXJzaW9uOyBvcgorCisgICAgZCkgTGltaXRpbmcgdGhlIHVzZSBmb3IgcHVibGljaXR5IHB1cnBvc2VzIG9mIG5hbWVzIG9mIGxpY2Vuc29ycyBvcgorICAgIGF1dGhvcnMgb2YgdGhlIG1hdGVyaWFsOyBvcgorCisgICAgZSkgRGVjbGluaW5nIHRvIGdyYW50IHJpZ2h0cyB1bmRlciB0cmFkZW1hcmsgbGF3IGZvciB1c2Ugb2Ygc29tZQorICAgIHRyYWRlIG5hbWVzLCB0cmFkZW1hcmtzLCBvciBzZXJ2aWNlIG1hcmtzOyBvcgorCisgICAgZikgUmVxdWlyaW5nIGluZGVtbmlmaWNhdGlvbiBvZiBsaWNlbnNvcnMgYW5kIGF1dGhvcnMgb2YgdGhhdAorICAgIG1hdGVyaWFsIGJ5IGFueW9uZSB3aG8gY29udmV5cyB0aGUgbWF0ZXJpYWwgKG9yIG1vZGlmaWVkIHZlcnNpb25zIG9mCisgICAgaXQpIHdpdGggY29udHJhY3R1YWwgYXNzdW1wdGlvbnMgb2YgbGlhYmlsaXR5IHRvIHRoZSByZWNpcGllbnQsIGZvcgorICAgIGFueSBsaWFiaWxpdHkgdGhhdCB0aGVzZSBjb250cmFjdHVhbCBhc3N1bXB0aW9ucyBkaXJlY3RseSBpbXBvc2Ugb24KKyAgICB0aG9zZSBsaWNlbnNvcnMgYW5kIGF1dGhvcnMuCisKKyAgQWxsIG90aGVyIG5vbi1wZXJtaXNzaXZlIGFkZGl0aW9uYWwgdGVybXMgYXJlIGNvbnNpZGVyZWQgImZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyIgd2l0aGluIHRoZSBtZWFuaW5nIG9mIHNlY3Rpb24gMTAuICBJZiB0aGUgUHJvZ3JhbSBhcyB5b3UKK3JlY2VpdmVkIGl0LCBvciBhbnkgcGFydCBvZiBpdCwgY29udGFpbnMgYSBub3RpY2Ugc3RhdGluZyB0aGF0IGl0IGlzCitnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCBhIHRlcm0gdGhhdCBpcyBhIGZ1cnRoZXIKK3Jlc3RyaWN0aW9uLCB5b3UgbWF5IHJlbW92ZSB0aGF0IHRlcm0uICBJZiBhIGxpY2Vuc2UgZG9jdW1lbnQgY29udGFpbnMKK2EgZnVydGhlciByZXN0cmljdGlvbiBidXQgcGVybWl0cyByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcgdW5kZXIgdGhpcworTGljZW5zZSwgeW91IG1heSBhZGQgdG8gYSBjb3ZlcmVkIHdvcmsgbWF0ZXJpYWwgZ292ZXJuZWQgYnkgdGhlIHRlcm1zCitvZiB0aGF0IGxpY2Vuc2UgZG9jdW1lbnQsIHByb3ZpZGVkIHRoYXQgdGhlIGZ1cnRoZXIgcmVzdHJpY3Rpb24gZG9lcworbm90IHN1cnZpdmUgc3VjaCByZWxpY2Vuc2luZyBvciBjb252ZXlpbmcuCisKKyAgSWYgeW91IGFkZCB0ZXJtcyB0byBhIGNvdmVyZWQgd29yayBpbiBhY2NvcmQgd2l0aCB0aGlzIHNlY3Rpb24sIHlvdQorbXVzdCBwbGFjZSwgaW4gdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcywgYSBzdGF0ZW1lbnQgb2YgdGhlCithZGRpdGlvbmFsIHRlcm1zIHRoYXQgYXBwbHkgdG8gdGhvc2UgZmlsZXMsIG9yIGEgbm90aWNlIGluZGljYXRpbmcKK3doZXJlIHRvIGZpbmQgdGhlIGFwcGxpY2FibGUgdGVybXMuCisKKyAgQWRkaXRpb25hbCB0ZXJtcywgcGVybWlzc2l2ZSBvciBub24tcGVybWlzc2l2ZSwgbWF5IGJlIHN0YXRlZCBpbiB0aGUKK2Zvcm0gb2YgYSBzZXBhcmF0ZWx5IHdyaXR0ZW4gbGljZW5zZSwgb3Igc3RhdGVkIGFzIGV4Y2VwdGlvbnM7Cit0aGUgYWJvdmUgcmVxdWlyZW1lbnRzIGFwcGx5IGVpdGhlciB3YXkuCisKKyAgOC4gVGVybWluYXRpb24uCisKKyAgWW91IG1heSBub3QgcHJvcGFnYXRlIG9yIG1vZGlmeSBhIGNvdmVyZWQgd29yayBleGNlcHQgYXMgZXhwcmVzc2x5Citwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdCBvdGhlcndpc2UgdG8gcHJvcGFnYXRlIG9yCittb2RpZnkgaXQgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIKK3RoaXMgTGljZW5zZSAoaW5jbHVkaW5nIGFueSBwYXRlbnQgbGljZW5zZXMgZ3JhbnRlZCB1bmRlciB0aGUgdGhpcmQKK3BhcmFncmFwaCBvZiBzZWN0aW9uIDExKS4KKworICBIb3dldmVyLCBpZiB5b3UgY2Vhc2UgYWxsIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UsIHRoZW4geW91cgorbGljZW5zZSBmcm9tIGEgcGFydGljdWxhciBjb3B5cmlnaHQgaG9sZGVyIGlzIHJlaW5zdGF0ZWQgKGEpCitwcm92aXNpb25hbGx5LCB1bmxlc3MgYW5kIHVudGlsIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGV4cGxpY2l0bHkgYW5kCitmaW5hbGx5IHRlcm1pbmF0ZXMgeW91ciBsaWNlbnNlLCBhbmQgKGIpIHBlcm1hbmVudGx5LCBpZiB0aGUgY29weXJpZ2h0Citob2xkZXIgZmFpbHMgdG8gbm90aWZ5IHlvdSBvZiB0aGUgdmlvbGF0aW9uIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucworcHJpb3IgdG8gNjAgZGF5cyBhZnRlciB0aGUgY2Vzc2F0aW9uLgorCisgIE1vcmVvdmVyLCB5b3VyIGxpY2Vuc2UgZnJvbSBhIHBhcnRpY3VsYXIgY29weXJpZ2h0IGhvbGRlciBpcworcmVpbnN0YXRlZCBwZXJtYW5lbnRseSBpZiB0aGUgY29weXJpZ2h0IGhvbGRlciBub3RpZmllcyB5b3Ugb2YgdGhlCit2aW9sYXRpb24gYnkgc29tZSByZWFzb25hYmxlIG1lYW5zLCB0aGlzIGlzIHRoZSBmaXJzdCB0aW1lIHlvdSBoYXZlCityZWNlaXZlZCBub3RpY2Ugb2YgdmlvbGF0aW9uIG9mIHRoaXMgTGljZW5zZSAoZm9yIGFueSB3b3JrKSBmcm9tIHRoYXQKK2NvcHlyaWdodCBob2xkZXIsIGFuZCB5b3UgY3VyZSB0aGUgdmlvbGF0aW9uIHByaW9yIHRvIDMwIGRheXMgYWZ0ZXIKK3lvdXIgcmVjZWlwdCBvZiB0aGUgbm90aWNlLgorCisgIFRlcm1pbmF0aW9uIG9mIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgc2VjdGlvbiBkb2VzIG5vdCB0ZXJtaW5hdGUgdGhlCitsaWNlbnNlcyBvZiBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcyBvciByaWdodHMgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZS4gIElmIHlvdXIgcmlnaHRzIGhhdmUgYmVlbiB0ZXJtaW5hdGVkIGFuZCBub3QgcGVybWFuZW50bHkKK3JlaW5zdGF0ZWQsIHlvdSBkbyBub3QgcXVhbGlmeSB0byByZWNlaXZlIG5ldyBsaWNlbnNlcyBmb3IgdGhlIHNhbWUKK21hdGVyaWFsIHVuZGVyIHNlY3Rpb24gMTAuCisKKyAgOS4gQWNjZXB0YW5jZSBOb3QgUmVxdWlyZWQgZm9yIEhhdmluZyBDb3BpZXMuCisKKyAgWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSBpbiBvcmRlciB0byByZWNlaXZlIG9yCitydW4gYSBjb3B5IG9mIHRoZSBQcm9ncmFtLiAgQW5jaWxsYXJ5IHByb3BhZ2F0aW9uIG9mIGEgY292ZXJlZCB3b3JrCitvY2N1cnJpbmcgc29sZWx5IGFzIGEgY29uc2VxdWVuY2Ugb2YgdXNpbmcgcGVlci10by1wZWVyIHRyYW5zbWlzc2lvbgordG8gcmVjZWl2ZSBhIGNvcHkgbGlrZXdpc2UgZG9lcyBub3QgcmVxdWlyZSBhY2NlcHRhbmNlLiAgSG93ZXZlciwKK25vdGhpbmcgb3RoZXIgdGhhbiB0aGlzIExpY2Vuc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIHByb3BhZ2F0ZSBvcgorbW9kaWZ5IGFueSBjb3ZlcmVkIHdvcmsuICBUaGVzZSBhY3Rpb25zIGluZnJpbmdlIGNvcHlyaWdodCBpZiB5b3UgZG8KK25vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieSBtb2RpZnlpbmcgb3IgcHJvcGFnYXRpbmcgYQorY292ZXJlZCB3b3JrLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzby4KKworICAxMC4gQXV0b21hdGljIExpY2Vuc2luZyBvZiBEb3duc3RyZWFtIFJlY2lwaWVudHMuCisKKyAgRWFjaCB0aW1lIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseQorcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlIG9yaWdpbmFsIGxpY2Vuc29ycywgdG8gcnVuLCBtb2RpZnkgYW5kCitwcm9wYWdhdGUgdGhhdCB3b3JrLCBzdWJqZWN0IHRvIHRoaXMgTGljZW5zZS4gIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlCitmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB3aXRoIHRoaXMgTGljZW5zZS4KKworICBBbiAiZW50aXR5IHRyYW5zYWN0aW9uIiBpcyBhIHRyYW5zYWN0aW9uIHRyYW5zZmVycmluZyBjb250cm9sIG9mIGFuCitvcmdhbml6YXRpb24sIG9yIHN1YnN0YW50aWFsbHkgYWxsIGFzc2V0cyBvZiBvbmUsIG9yIHN1YmRpdmlkaW5nIGFuCitvcmdhbml6YXRpb24sIG9yIG1lcmdpbmcgb3JnYW5pemF0aW9ucy4gIElmIHByb3BhZ2F0aW9uIG9mIGEgY292ZXJlZAord29yayByZXN1bHRzIGZyb20gYW4gZW50aXR5IHRyYW5zYWN0aW9uLCBlYWNoIHBhcnR5IHRvIHRoYXQKK3RyYW5zYWN0aW9uIHdobyByZWNlaXZlcyBhIGNvcHkgb2YgdGhlIHdvcmsgYWxzbyByZWNlaXZlcyB3aGF0ZXZlcgorbGljZW5zZXMgdG8gdGhlIHdvcmsgdGhlIHBhcnR5J3MgcHJlZGVjZXNzb3IgaW4gaW50ZXJlc3QgaGFkIG9yIGNvdWxkCitnaXZlIHVuZGVyIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGgsIHBsdXMgYSByaWdodCB0byBwb3NzZXNzaW9uIG9mIHRoZQorQ29ycmVzcG9uZGluZyBTb3VyY2Ugb2YgdGhlIHdvcmsgZnJvbSB0aGUgcHJlZGVjZXNzb3IgaW4gaW50ZXJlc3QsIGlmCit0aGUgcHJlZGVjZXNzb3IgaGFzIGl0IG9yIGNhbiBnZXQgaXQgd2l0aCByZWFzb25hYmxlIGVmZm9ydHMuCisKKyAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgZXhlcmNpc2Ugb2YgdGhlCityaWdodHMgZ3JhbnRlZCBvciBhZmZpcm1lZCB1bmRlciB0aGlzIExpY2Vuc2UuICBGb3IgZXhhbXBsZSwgeW91IG1heQorbm90IGltcG9zZSBhIGxpY2Vuc2UgZmVlLCByb3lhbHR5LCBvciBvdGhlciBjaGFyZ2UgZm9yIGV4ZXJjaXNlIG9mCityaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UsIGFuZCB5b3UgbWF5IG5vdCBpbml0aWF0ZSBsaXRpZ2F0aW9uCisoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCkgYWxsZWdpbmcgdGhhdAorYW55IHBhdGVudCBjbGFpbSBpcyBpbmZyaW5nZWQgYnkgbWFraW5nLCB1c2luZywgc2VsbGluZywgb2ZmZXJpbmcgZm9yCitzYWxlLCBvciBpbXBvcnRpbmcgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24gb2YgaXQuCisKKyAgMTEuIFBhdGVudHMuCisKKyAgQSAiY29udHJpYnV0b3IiIGlzIGEgY29weXJpZ2h0IGhvbGRlciB3aG8gYXV0aG9yaXplcyB1c2UgdW5kZXIgdGhpcworTGljZW5zZSBvZiB0aGUgUHJvZ3JhbSBvciBhIHdvcmsgb24gd2hpY2ggdGhlIFByb2dyYW0gaXMgYmFzZWQuICBUaGUKK3dvcmsgdGh1cyBsaWNlbnNlZCBpcyBjYWxsZWQgdGhlIGNvbnRyaWJ1dG9yJ3MgImNvbnRyaWJ1dG9yIHZlcnNpb24iLgorCisgIEEgY29udHJpYnV0b3IncyAiZXNzZW50aWFsIHBhdGVudCBjbGFpbXMiIGFyZSBhbGwgcGF0ZW50IGNsYWltcworb3duZWQgb3IgY29udHJvbGxlZCBieSB0aGUgY29udHJpYnV0b3IsIHdoZXRoZXIgYWxyZWFkeSBhY3F1aXJlZCBvcgoraGVyZWFmdGVyIGFjcXVpcmVkLCB0aGF0IHdvdWxkIGJlIGluZnJpbmdlZCBieSBzb21lIG1hbm5lciwgcGVybWl0dGVkCitieSB0aGlzIExpY2Vuc2UsIG9mIG1ha2luZywgdXNpbmcsIG9yIHNlbGxpbmcgaXRzIGNvbnRyaWJ1dG9yIHZlcnNpb24sCitidXQgZG8gbm90IGluY2x1ZGUgY2xhaW1zIHRoYXQgd291bGQgYmUgaW5mcmluZ2VkIG9ubHkgYXMgYQorY29uc2VxdWVuY2Ugb2YgZnVydGhlciBtb2RpZmljYXRpb24gb2YgdGhlIGNvbnRyaWJ1dG9yIHZlcnNpb24uICBGb3IKK3B1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIGluY2x1ZGVzIHRoZSByaWdodCB0byBncmFudAorcGF0ZW50IHN1YmxpY2Vuc2VzIGluIGEgbWFubmVyIGNvbnNpc3RlbnQgd2l0aCB0aGUgcmVxdWlyZW1lbnRzIG9mCit0aGlzIExpY2Vuc2UuCisKKyAgRWFjaCBjb250cmlidXRvciBncmFudHMgeW91IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUKK3BhdGVudCBsaWNlbnNlIHVuZGVyIHRoZSBjb250cmlidXRvcidzIGVzc2VudGlhbCBwYXRlbnQgY2xhaW1zLCB0bworbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaW1wb3J0IGFuZCBvdGhlcndpc2UgcnVuLCBtb2RpZnkgYW5kCitwcm9wYWdhdGUgdGhlIGNvbnRlbnRzIG9mIGl0cyBjb250cmlidXRvciB2ZXJzaW9uLgorCisgIEluIHRoZSBmb2xsb3dpbmcgdGhyZWUgcGFyYWdyYXBocywgYSAicGF0ZW50IGxpY2Vuc2UiIGlzIGFueSBleHByZXNzCithZ3JlZW1lbnQgb3IgY29tbWl0bWVudCwgaG93ZXZlciBkZW5vbWluYXRlZCwgbm90IHRvIGVuZm9yY2UgYSBwYXRlbnQKKyhzdWNoIGFzIGFuIGV4cHJlc3MgcGVybWlzc2lvbiB0byBwcmFjdGljZSBhIHBhdGVudCBvciBjb3ZlbmFudCBub3QgdG8KK3N1ZSBmb3IgcGF0ZW50IGluZnJpbmdlbWVudCkuICBUbyAiZ3JhbnQiIHN1Y2ggYSBwYXRlbnQgbGljZW5zZSB0byBhCitwYXJ0eSBtZWFucyB0byBtYWtlIHN1Y2ggYW4gYWdyZWVtZW50IG9yIGNvbW1pdG1lbnQgbm90IHRvIGVuZm9yY2UgYQorcGF0ZW50IGFnYWluc3QgdGhlIHBhcnR5LgorCisgIElmIHlvdSBjb252ZXkgYSBjb3ZlcmVkIHdvcmssIGtub3dpbmdseSByZWx5aW5nIG9uIGEgcGF0ZW50IGxpY2Vuc2UsCithbmQgdGhlIENvcnJlc3BvbmRpbmcgU291cmNlIG9mIHRoZSB3b3JrIGlzIG5vdCBhdmFpbGFibGUgZm9yIGFueW9uZQordG8gY29weSwgZnJlZSBvZiBjaGFyZ2UgYW5kIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIHRocm91Z2ggYQorcHVibGljbHkgYXZhaWxhYmxlIG5ldHdvcmsgc2VydmVyIG9yIG90aGVyIHJlYWRpbHkgYWNjZXNzaWJsZSBtZWFucywKK3RoZW4geW91IG11c3QgZWl0aGVyICgxKSBjYXVzZSB0aGUgQ29ycmVzcG9uZGluZyBTb3VyY2UgdG8gYmUgc28KK2F2YWlsYWJsZSwgb3IgKDIpIGFycmFuZ2UgdG8gZGVwcml2ZSB5b3Vyc2VsZiBvZiB0aGUgYmVuZWZpdCBvZiB0aGUKK3BhdGVudCBsaWNlbnNlIGZvciB0aGlzIHBhcnRpY3VsYXIgd29yaywgb3IgKDMpIGFycmFuZ2UsIGluIGEgbWFubmVyCitjb25zaXN0ZW50IHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UsIHRvIGV4dGVuZCB0aGUgcGF0ZW50CitsaWNlbnNlIHRvIGRvd25zdHJlYW0gcmVjaXBpZW50cy4gICJLbm93aW5nbHkgcmVseWluZyIgbWVhbnMgeW91IGhhdmUKK2FjdHVhbCBrbm93bGVkZ2UgdGhhdCwgYnV0IGZvciB0aGUgcGF0ZW50IGxpY2Vuc2UsIHlvdXIgY29udmV5aW5nIHRoZQorY292ZXJlZCB3b3JrIGluIGEgY291bnRyeSwgb3IgeW91ciByZWNpcGllbnQncyB1c2Ugb2YgdGhlIGNvdmVyZWQgd29yaworaW4gYSBjb3VudHJ5LCB3b3VsZCBpbmZyaW5nZSBvbmUgb3IgbW9yZSBpZGVudGlmaWFibGUgcGF0ZW50cyBpbiB0aGF0Citjb3VudHJ5IHRoYXQgeW91IGhhdmUgcmVhc29uIHRvIGJlbGlldmUgYXJlIHZhbGlkLgorCisgIElmLCBwdXJzdWFudCB0byBvciBpbiBjb25uZWN0aW9uIHdpdGggYSBzaW5nbGUgdHJhbnNhY3Rpb24gb3IKK2FycmFuZ2VtZW50LCB5b3UgY29udmV5LCBvciBwcm9wYWdhdGUgYnkgcHJvY3VyaW5nIGNvbnZleWFuY2Ugb2YsIGEKK2NvdmVyZWQgd29yaywgYW5kIGdyYW50IGEgcGF0ZW50IGxpY2Vuc2UgdG8gc29tZSBvZiB0aGUgcGFydGllcworcmVjZWl2aW5nIHRoZSBjb3ZlcmVkIHdvcmsgYXV0aG9yaXppbmcgdGhlbSB0byB1c2UsIHByb3BhZ2F0ZSwgbW9kaWZ5CitvciBjb252ZXkgYSBzcGVjaWZpYyBjb3B5IG9mIHRoZSBjb3ZlcmVkIHdvcmssIHRoZW4gdGhlIHBhdGVudCBsaWNlbnNlCit5b3UgZ3JhbnQgaXMgYXV0b21hdGljYWxseSBleHRlbmRlZCB0byBhbGwgcmVjaXBpZW50cyBvZiB0aGUgY292ZXJlZAord29yayBhbmQgd29ya3MgYmFzZWQgb24gaXQuCisKKyAgQSBwYXRlbnQgbGljZW5zZSBpcyAiZGlzY3JpbWluYXRvcnkiIGlmIGl0IGRvZXMgbm90IGluY2x1ZGUgd2l0aGluCit0aGUgc2NvcGUgb2YgaXRzIGNvdmVyYWdlLCBwcm9oaWJpdHMgdGhlIGV4ZXJjaXNlIG9mLCBvciBpcworY29uZGl0aW9uZWQgb24gdGhlIG5vbi1leGVyY2lzZSBvZiBvbmUgb3IgbW9yZSBvZiB0aGUgcmlnaHRzIHRoYXQgYXJlCitzcGVjaWZpY2FsbHkgZ3JhbnRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBZb3UgbWF5IG5vdCBjb252ZXkgYSBjb3ZlcmVkCit3b3JrIGlmIHlvdSBhcmUgYSBwYXJ0eSB0byBhbiBhcnJhbmdlbWVudCB3aXRoIGEgdGhpcmQgcGFydHkgdGhhdCBpcworaW4gdGhlIGJ1c2luZXNzIG9mIGRpc3RyaWJ1dGluZyBzb2Z0d2FyZSwgdW5kZXIgd2hpY2ggeW91IG1ha2UgcGF5bWVudAordG8gdGhlIHRoaXJkIHBhcnR5IGJhc2VkIG9uIHRoZSBleHRlbnQgb2YgeW91ciBhY3Rpdml0eSBvZiBjb252ZXlpbmcKK3RoZSB3b3JrLCBhbmQgdW5kZXIgd2hpY2ggdGhlIHRoaXJkIHBhcnR5IGdyYW50cywgdG8gYW55IG9mIHRoZQorcGFydGllcyB3aG8gd291bGQgcmVjZWl2ZSB0aGUgY292ZXJlZCB3b3JrIGZyb20geW91LCBhIGRpc2NyaW1pbmF0b3J5CitwYXRlbnQgbGljZW5zZSAoYSkgaW4gY29ubmVjdGlvbiB3aXRoIGNvcGllcyBvZiB0aGUgY292ZXJlZCB3b3JrCitjb252ZXllZCBieSB5b3UgKG9yIGNvcGllcyBtYWRlIGZyb20gdGhvc2UgY29waWVzKSwgb3IgKGIpIHByaW1hcmlseQorZm9yIGFuZCBpbiBjb25uZWN0aW9uIHdpdGggc3BlY2lmaWMgcHJvZHVjdHMgb3IgY29tcGlsYXRpb25zIHRoYXQKK2NvbnRhaW4gdGhlIGNvdmVyZWQgd29yaywgdW5sZXNzIHlvdSBlbnRlcmVkIGludG8gdGhhdCBhcnJhbmdlbWVudCwKK29yIHRoYXQgcGF0ZW50IGxpY2Vuc2Ugd2FzIGdyYW50ZWQsIHByaW9yIHRvIDI4IE1hcmNoIDIwMDcuCisKKyAgTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgY29uc3RydWVkIGFzIGV4Y2x1ZGluZyBvciBsaW1pdGluZworYW55IGltcGxpZWQgbGljZW5zZSBvciBvdGhlciBkZWZlbnNlcyB0byBpbmZyaW5nZW1lbnQgdGhhdCBtYXkKK290aGVyd2lzZSBiZSBhdmFpbGFibGUgdG8geW91IHVuZGVyIGFwcGxpY2FibGUgcGF0ZW50IGxhdy4KKworICAxMi4gTm8gU3VycmVuZGVyIG9mIE90aGVycycgRnJlZWRvbS4KKworICBJZiBjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdCBjb252ZXkgYQorY292ZXJlZCB3b3JrIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91IG1heQorbm90IGNvbnZleSBpdCBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgeW91IGFncmVlIHRvIHRlcm1zIHRoYXQgb2JsaWdhdGUgeW91Cit0byBjb2xsZWN0IGEgcm95YWx0eSBmb3IgZnVydGhlciBjb252ZXlpbmcgZnJvbSB0aG9zZSB0byB3aG9tIHlvdSBjb252ZXkKK3RoZSBQcm9ncmFtLCB0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCB0aG9zZSB0ZXJtcyBhbmQgdGhpcworTGljZW5zZSB3b3VsZCBiZSB0byByZWZyYWluIGVudGlyZWx5IGZyb20gY29udmV5aW5nIHRoZSBQcm9ncmFtLgorCisgIDEzLiBVc2Ugd2l0aCB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCisgIE5vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSwgeW91IGhhdmUKK3Blcm1pc3Npb24gdG8gbGluayBvciBjb21iaW5lIGFueSBjb3ZlcmVkIHdvcmsgd2l0aCBhIHdvcmsgbGljZW5zZWQKK3VuZGVyIHZlcnNpb24gMyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGludG8gYSBzaW5nbGUKK2NvbWJpbmVkIHdvcmssIGFuZCB0byBjb252ZXkgdGhlIHJlc3VsdGluZyB3b3JrLiAgVGhlIHRlcm1zIG9mIHRoaXMKK0xpY2Vuc2Ugd2lsbCBjb250aW51ZSB0byBhcHBseSB0byB0aGUgcGFydCB3aGljaCBpcyB0aGUgY292ZXJlZCB3b3JrLAorYnV0IHRoZSBzcGVjaWFsIHJlcXVpcmVtZW50cyBvZiB0aGUgR05VIEFmZmVybyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLAorc2VjdGlvbiAxMywgY29uY2VybmluZyBpbnRlcmFjdGlvbiB0aHJvdWdoIGEgbmV0d29yayB3aWxsIGFwcGx5IHRvIHRoZQorY29tYmluYXRpb24gYXMgc3VjaC4KKworICAxNC4gUmV2aXNlZCBWZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YKK3RoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKKyAgRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUKK1Byb2dyYW0gc3BlY2lmaWVzIHRoYXQgYSBjZXJ0YWluIG51bWJlcmVkIHZlcnNpb24gb2YgdGhlIEdOVSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSAib3IgYW55IGxhdGVyIHZlcnNpb24iIGFwcGxpZXMgdG8gaXQsIHlvdSBoYXZlIHRoZQorb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgbnVtYmVyZWQKK3ZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLiAgSWYgdGhlIFByb2dyYW0gZG9lcyBub3Qgc3BlY2lmeSBhIHZlcnNpb24gbnVtYmVyIG9mIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkCitieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCisgIElmIHRoZSBQcm9ncmFtIHNwZWNpZmllcyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZSB3aGljaCBmdXR1cmUKK3ZlcnNpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBjYW4gYmUgdXNlZCwgdGhhdCBwcm94eSdzCitwdWJsaWMgc3RhdGVtZW50IG9mIGFjY2VwdGFuY2Ugb2YgYSB2ZXJzaW9uIHBlcm1hbmVudGx5IGF1dGhvcml6ZXMgeW91Cit0byBjaG9vc2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUgUHJvZ3JhbS4KKworICBMYXRlciBsaWNlbnNlIHZlcnNpb25zIG1heSBnaXZlIHlvdSBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudAorcGVybWlzc2lvbnMuICBIb3dldmVyLCBubyBhZGRpdGlvbmFsIG9ibGlnYXRpb25zIGFyZSBpbXBvc2VkIG9uIGFueQorYXV0aG9yIG9yIGNvcHlyaWdodCBob2xkZXIgYXMgYSByZXN1bHQgb2YgeW91ciBjaG9vc2luZyB0byBmb2xsb3cgYQorbGF0ZXIgdmVyc2lvbi4KKworICAxNS4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4KKworICBUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZCitBUFBMSUNBQkxFIExBVy4gIEVYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUCitIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZCitPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKK1RIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNCitJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YKK0FMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxNi4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuCisKKyAgSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1PRElGSUVTIEFORC9PUiBDT05WRVlTCitUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkKK0dFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRQorVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRgorREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQKK1BBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIgUFJPR1JBTVMpLAorRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0VTLgorCisgIDE3LiBJbnRlcnByZXRhdGlvbiBvZiBTZWN0aW9ucyAxNSBhbmQgMTYuCisKKyAgSWYgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudHkgYW5kIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHByb3ZpZGVkCithYm92ZSBjYW5ub3QgYmUgZ2l2ZW4gbG9jYWwgbGVnYWwgZWZmZWN0IGFjY29yZGluZyB0byB0aGVpciB0ZXJtcywKK3Jldmlld2luZyBjb3VydHMgc2hhbGwgYXBwbHkgbG9jYWwgbGF3IHRoYXQgbW9zdCBjbG9zZWx5IGFwcHJveGltYXRlcworYW4gYWJzb2x1dGUgd2FpdmVyIG9mIGFsbCBjaXZpbCBsaWFiaWxpdHkgaW4gY29ubmVjdGlvbiB3aXRoIHRoZQorUHJvZ3JhbSwgdW5sZXNzIGEgd2FycmFudHkgb3IgYXNzdW1wdGlvbiBvZiBsaWFiaWxpdHkgYWNjb21wYW5pZXMgYQorY29weSBvZiB0aGUgUHJvZ3JhbSBpbiByZXR1cm4gZm9yIGEgZmVlLgorCisgICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKworICAgICAgICAgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IFByb2dyYW1zCisKKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgcHJvZ3JhbSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHRoZSBiZXN0IHdheSB0byBhY2hpZXZlIHRoaXMgaXMgdG8gbWFrZSBpdAorZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCisKKyAgVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uICBJdCBpcyBzYWZlc3QKK3RvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKK3N0YXRlIHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QKK3RoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIHByb2dyYW0ncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU6IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtLiAgSWYgbm90LCBzZWUgPGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworICBJZiB0aGUgcHJvZ3JhbSBkb2VzIHRlcm1pbmFsIGludGVyYWN0aW9uLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0Citub3RpY2UgbGlrZSB0aGlzIHdoZW4gaXQgc3RhcnRzIGluIGFuIGludGVyYWN0aXZlIG1vZGU6CisKKyAgICA8cHJvZ3JhbT4gIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisgICAgVGhpcyBwcm9ncmFtIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4KKyAgICBUaGlzIGlzIGZyZWUgc29mdHdhcmUsIGFuZCB5b3UgYXJlIHdlbGNvbWUgdG8gcmVkaXN0cmlidXRlIGl0CisgICAgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zOyB0eXBlIGBzaG93IGMnIGZvciBkZXRhaWxzLgorCitUaGUgaHlwb3RoZXRpY2FsIGNvbW1hbmRzIGBzaG93IHcnIGFuZCBgc2hvdyBjJyBzaG91bGQgc2hvdyB0aGUgYXBwcm9wcmlhdGUKK3BhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgT2YgY291cnNlLCB5b3VyIHByb2dyYW0ncyBjb21tYW5kcworbWlnaHQgYmUgZGlmZmVyZW50OyBmb3IgYSBHVUkgaW50ZXJmYWNlLCB5b3Ugd291bGQgdXNlIGFuICJhYm91dCBib3giLgorCisgIFlvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciBzY2hvb2wsCitpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYgbmVjZXNzYXJ5LgorRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhpcywgYW5kIGhvdyB0byBhcHBseSBhbmQgZm9sbG93IHRoZSBHTlUgR1BMLCBzZWUKKzxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KKworICBUaGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtCitpbnRvIHByb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UKK21heSBjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aAordGhlIGxpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExlc3NlciBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4gIEJ1dCBmaXJzdCwgcGxlYXNlIHJlYWQKKzxodHRwOi8vd3d3LmdudS5vcmcvcGhpbG9zb3BoeS93aHktbm90LWxncGwuaHRtbD4uCmRpZmYgLS1naXQgYS9saWNlbnNlcy9HbHVseGUgYi9saWNlbnNlcy9HbHVseGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzIwZGRlZQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0dsdWx4ZQpAQCAtMCwwICsxLDEyIEBACitHbHVseGU6IHRoZSBHbHVseCBWTSBpbnRlcnByZXRlcgorCitEZXNpZ25lZCBieSBBbmRyZXcgUGxvdGtpbiA8ZXJreXJhdGhAZWJsb25nLmNvbT4KK2h0dHA6Ly9lYmxvbmcuY29tL3phcmYvZ2x1bHgvaW5kZXguaHRtbAorCitUaGUgc291cmNlIGNvZGUgaW4gdGhpcyBwYWNrYWdlIGlzIGNvcHlyaWdodCAxOTk5LTIwMTAgYnkgQW5kcmV3IFBsb3RraW4uCitZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgaXQgZnJlZWx5LCBieSBhbnkgbWVhbnMgYW5kIHVuZGVyIGFueSBjb25kaXRpb25zLAorYXMgbG9uZyBhcyB0aGUgY29kZSBhbmQgZG9jdW1lbnRhdGlvbiBpcyBub3QgY2hhbmdlZC4gWW91IG1heSBhbHNvCitpbmNvcnBvcmF0ZSB0aGlzIGNvZGUgaW50byB5b3VyIG93biBwcm9ncmFtIGFuZCBkaXN0cmlidXRlIHRoYXQsIG9yIG1vZGlmeQordGhpcyBjb2RlIGFuZCB1c2UgYW5kIGRpc3RyaWJ1dGUgdGhlIG1vZGlmaWVkIHZlcnNpb24sIGFzIGxvbmcgYXMgeW91IHJldGFpbgorYSBub3RpY2UgaW4geW91ciBwcm9ncmFtIG9yIGRvY3VtZW50YXRpb24gd2hpY2ggbWVudGlvbnMgbXkgbmFtZSBhbmQgdGhlCitVUkwgc2hvd24gYWJvdmUuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9Hb29nbGUtVE9TIGIvbGljZW5zZXMvR29vZ2xlLVRPUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGZlNDNlCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvR29vZ2xlLVRPUwpAQCAtMCwwICsxLDI0MyBAQAorIyBmaWxlIGdlbmVyYXRlZCB1c2luZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQgKG9wZW4gdGhlIGxpbmsgaW4gYnJvd3NlciBmb3IgdXAtdG8tZGF0ZSB2ZXJzaW9uIHdpdGggaHRtbCBsaW5rcykKKyMgbHlueCAtZHVtcCBodHRwOi8vd3d3Lmdvb2dsZS5jb20vaW50bC9lbi9wb2xpY2llcy90ZXJtcy8KKworR29vZ2xlIFRlcm1zIG9mIFNlcnZpY2UKKworICAgTGFzdCBtb2RpZmllZDogTWFyY2ggMSwgMjAxMgorCitXZWxjb21lIHRvIEdvb2dsZSEKKworICAgVGhhbmtzIGZvciB1c2luZyBvdXIgcHJvZHVjdHMgYW5kIHNlcnZpY2VzICjigJxTZXJ2aWNlc+KAnSkuIFRoZSBTZXJ2aWNlcworICAgYXJlIHByb3ZpZGVkIGJ5IEdvb2dsZSBJbmMuICjigJxHb29nbGXigJ0pLCBsb2NhdGVkIGF0IDE2MDAgQW1waGl0aGVhdHJlCisgICBQYXJrd2F5LCBNb3VudGFpbiBWaWV3LCBDQSA5NDA0MywgVW5pdGVkIFN0YXRlcy4KKworICAgQnkgdXNpbmcgb3VyIFNlcnZpY2VzLCB5b3UgYXJlIGFncmVlaW5nIHRvIHRoZXNlIHRlcm1zLiBQbGVhc2UgcmVhZAorICAgdGhlbSBjYXJlZnVsbHkuCisKKyAgIE91ciBTZXJ2aWNlcyBhcmUgdmVyeSBkaXZlcnNlLCBzbyBzb21ldGltZXMgYWRkaXRpb25hbCB0ZXJtcyBvciBwcm9kdWN0CisgICByZXF1aXJlbWVudHMgKGluY2x1ZGluZyBhZ2UgcmVxdWlyZW1lbnRzKSBtYXkgYXBwbHkuIEFkZGl0aW9uYWwgdGVybXMKKyAgIHdpbGwgYmUgYXZhaWxhYmxlIHdpdGggdGhlIHJlbGV2YW50IFNlcnZpY2VzLCBhbmQgdGhvc2UgYWRkaXRpb25hbAorICAgdGVybXMgYmVjb21lIHBhcnQgb2YgeW91ciBhZ3JlZW1lbnQgd2l0aCB1cyBpZiB5b3UgdXNlIHRob3NlIFNlcnZpY2VzLgorCitVc2luZyBvdXIgU2VydmljZXMKKworICAgWW91IG11c3QgZm9sbG93IGFueSBwb2xpY2llcyBtYWRlIGF2YWlsYWJsZSB0byB5b3Ugd2l0aGluIHRoZSBTZXJ2aWNlcy4KKworICAgRG9u4oCZdCBtaXN1c2Ugb3VyIFNlcnZpY2VzLiBGb3IgZXhhbXBsZSwgZG9u4oCZdCBpbnRlcmZlcmUgd2l0aCBvdXIKKyAgIFNlcnZpY2VzIG9yIHRyeSB0byBhY2Nlc3MgdGhlbSB1c2luZyBhIG1ldGhvZCBvdGhlciB0aGFuIHRoZSBpbnRlcmZhY2UKKyAgIGFuZCB0aGUgaW5zdHJ1Y3Rpb25zIHRoYXQgd2UgcHJvdmlkZS4gWW91IG1heSB1c2Ugb3VyIFNlcnZpY2VzIG9ubHkgYXMKKyAgIHBlcm1pdHRlZCBieSBsYXcsIGluY2x1ZGluZyBhcHBsaWNhYmxlIGV4cG9ydCBhbmQgcmUtZXhwb3J0IGNvbnRyb2wKKyAgIGxhd3MgYW5kIHJlZ3VsYXRpb25zLiBXZSBtYXkgc3VzcGVuZCBvciBzdG9wIHByb3ZpZGluZyBvdXIgU2VydmljZXMgdG8KKyAgIHlvdSBpZiB5b3UgZG8gbm90IGNvbXBseSB3aXRoIG91ciB0ZXJtcyBvciBwb2xpY2llcyBvciBpZiB3ZSBhcmUKKyAgIGludmVzdGlnYXRpbmcgc3VzcGVjdGVkIG1pc2NvbmR1Y3QuCisKKyAgIFVzaW5nIG91ciBTZXJ2aWNlcyBkb2VzIG5vdCBnaXZlIHlvdSBvd25lcnNoaXAgb2YgYW55IGludGVsbGVjdHVhbAorICAgcHJvcGVydHkgcmlnaHRzIGluIG91ciBTZXJ2aWNlcyBvciB0aGUgY29udGVudCB5b3UgYWNjZXNzLiBZb3UgbWF5IG5vdAorICAgdXNlIGNvbnRlbnQgZnJvbSBvdXIgU2VydmljZXMgdW5sZXNzIHlvdSBvYnRhaW4gcGVybWlzc2lvbiBmcm9tIGl0cworICAgb3duZXIgb3IgYXJlIG90aGVyd2lzZSBwZXJtaXR0ZWQgYnkgbGF3LiBUaGVzZSB0ZXJtcyBkbyBub3QgZ3JhbnQgeW91CisgICB0aGUgcmlnaHQgdG8gdXNlIGFueSBicmFuZGluZyBvciBsb2dvcyB1c2VkIGluIG91ciBTZXJ2aWNlcy4gRG9u4oCZdAorICAgcmVtb3ZlLCBvYnNjdXJlLCBvciBhbHRlciBhbnkgbGVnYWwgbm90aWNlcyBkaXNwbGF5ZWQgaW4gb3IgYWxvbmcgd2l0aAorICAgb3VyIFNlcnZpY2VzLgorCisgICBPdXIgU2VydmljZXMgZGlzcGxheSBzb21lIGNvbnRlbnQgdGhhdCBpcyBub3QgR29vZ2xl4oCZcy4gVGhpcyBjb250ZW50IGlzCisgICB0aGUgc29sZSByZXNwb25zaWJpbGl0eSBvZiB0aGUgZW50aXR5IHRoYXQgbWFrZXMgaXQgYXZhaWxhYmxlLiBXZSBtYXkKKyAgIHJldmlldyBjb250ZW50IHRvIGRldGVybWluZSB3aGV0aGVyIGl0IGlzIGlsbGVnYWwgb3IgdmlvbGF0ZXMgb3VyCisgICBwb2xpY2llcywgYW5kIHdlIG1heSByZW1vdmUgb3IgcmVmdXNlIHRvIGRpc3BsYXkgY29udGVudCB0aGF0IHdlCisgICByZWFzb25hYmx5IGJlbGlldmUgdmlvbGF0ZXMgb3VyIHBvbGljaWVzIG9yIHRoZSBsYXcuIEJ1dCB0aGF0IGRvZXMgbm90CisgICBuZWNlc3NhcmlseSBtZWFuIHRoYXQgd2UgcmV2aWV3IGNvbnRlbnQsIHNvIHBsZWFzZSBkb27igJl0IGFzc3VtZSB0aGF0IHdlCisgICBkby4KKworICAgSW4gY29ubmVjdGlvbiB3aXRoIHlvdXIgdXNlIG9mIHRoZSBTZXJ2aWNlcywgd2UgbWF5IHNlbmQgeW91IHNlcnZpY2UKKyAgIGFubm91bmNlbWVudHMsIGFkbWluaXN0cmF0aXZlIG1lc3NhZ2VzLCBhbmQgb3RoZXIgaW5mb3JtYXRpb24uIFlvdSBtYXkKKyAgIG9wdCBvdXQgb2Ygc29tZSBvZiB0aG9zZSBjb21tdW5pY2F0aW9ucy4KKworWW91ciBHb29nbGUgQWNjb3VudAorCisgICBZb3UgbWF5IG5lZWQgYSBHb29nbGUgQWNjb3VudCBpbiBvcmRlciB0byB1c2Ugc29tZSBvZiBvdXIgU2VydmljZXMuIFlvdQorICAgbWF5IGNyZWF0ZSB5b3VyIG93biBHb29nbGUgQWNjb3VudCwgb3IgeW91ciBHb29nbGUgQWNjb3VudCBtYXkgYmUKKyAgIGFzc2lnbmVkIHRvIHlvdSBieSBhbiBhZG1pbmlzdHJhdG9yLCBzdWNoIGFzIHlvdXIgZW1wbG95ZXIgb3IKKyAgIGVkdWNhdGlvbmFsIGluc3RpdHV0aW9uLiBJZiB5b3UgYXJlIHVzaW5nIGEgR29vZ2xlIEFjY291bnQgYXNzaWduZWQgdG8KKyAgIHlvdSBieSBhbiBhZG1pbmlzdHJhdG9yLCBkaWZmZXJlbnQgb3IgYWRkaXRpb25hbCB0ZXJtcyBtYXkgYXBwbHkgYW5kCisgICB5b3VyIGFkbWluaXN0cmF0b3IgbWF5IGJlIGFibGUgdG8gYWNjZXNzIG9yIGRpc2FibGUgeW91ciBhY2NvdW50LgorCisgICBJZiB5b3UgbGVhcm4gb2YgYW55IHVuYXV0aG9yaXplZCB1c2Ugb2YgeW91ciBwYXNzd29yZCBvciBhY2NvdW50LAorICAgWzZdZm9sbG93IHRoZXNlIGluc3RydWN0aW9ucy4KKworUHJpdmFjeSBhbmQgQ29weXJpZ2h0IFByb3RlY3Rpb24KKworICAgR29vZ2xl4oCZcyBbN11wcml2YWN5IHBvbGljaWVzIGV4cGxhaW4gaG93IHdlIHRyZWF0IHlvdXIgcGVyc29uYWwgZGF0YQorICAgYW5kIHByb3RlY3QgeW91ciBwcml2YWN5IHdoZW4geW91IHVzZSBvdXIgU2VydmljZXMuIEJ5IHVzaW5nIG91cgorICAgU2VydmljZXMsIHlvdSBhZ3JlZSB0aGF0IEdvb2dsZSBjYW4gdXNlIHN1Y2ggZGF0YSBpbiBhY2NvcmRhbmNlIHdpdGgKKyAgIG91ciBwcml2YWN5IHBvbGljaWVzLgorCisgICBXZSByZXNwb25kIHRvIG5vdGljZXMgb2YgYWxsZWdlZCBjb3B5cmlnaHQgaW5mcmluZ2VtZW50IGFuZCB0ZXJtaW5hdGUKKyAgIGFjY291bnRzIG9mIHJlcGVhdCBpbmZyaW5nZXJzIGFjY29yZGluZyB0byB0aGUgcHJvY2VzcyBzZXQgb3V0IGluIHRoZQorICAgVS5TLiBEaWdpdGFsIE1pbGxlbm5pdW0gQ29weXJpZ2h0IEFjdC4KKworICAgV2UgcHJvdmlkZSBpbmZvcm1hdGlvbiB0byBoZWxwIGNvcHlyaWdodCBob2xkZXJzIG1hbmFnZSB0aGVpcgorICAgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9ubGluZS4gSWYgeW91IHRoaW5rIHNvbWVib2R5IGlzIHZpb2xhdGluZyB5b3VyCisgICBjb3B5cmlnaHRzIGFuZCB3YW50IHRvIG5vdGlmeSB1cywgeW91IGNhbiBmaW5kIGluZm9ybWF0aW9uIGFib3V0CisgICBzdWJtaXR0aW5nIG5vdGljZXMgYW5kIEdvb2dsZeKAmXMgcG9saWN5IGFib3V0IHJlc3BvbmRpbmcgdG8gbm90aWNlcworICAgWzhdaW4gb3VyIEhlbHAgQ2VudGVyLgorCitZb3VyIENvbnRlbnQgaW4gb3VyIFNlcnZpY2VzCisKKyAgIFNvbWUgb2Ygb3VyIFNlcnZpY2VzIGFsbG93IHlvdSB0byBzdWJtaXQgY29udGVudC4gWW91IHJldGFpbiBvd25lcnNoaXAKKyAgIG9mIGFueSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIHRoYXQgeW91IGhvbGQgaW4gdGhhdCBjb250ZW50LiBJbgorICAgc2hvcnQsIHdoYXQgYmVsb25ncyB0byB5b3Ugc3RheXMgeW91cnMuCisKKyAgIFdoZW4geW91IHVwbG9hZCBvciBvdGhlcndpc2Ugc3VibWl0IGNvbnRlbnQgdG8gb3VyIFNlcnZpY2VzLCB5b3UgZ2l2ZQorICAgR29vZ2xlIChhbmQgdGhvc2Ugd2Ugd29yayB3aXRoKSBhIHdvcmxkd2lkZSBsaWNlbnNlIHRvIHVzZSwgaG9zdCwKKyAgIHN0b3JlLCByZXByb2R1Y2UsIG1vZGlmeSwgY3JlYXRlIGRlcml2YXRpdmUgd29ya3MgKHN1Y2ggYXMgdGhvc2UKKyAgIHJlc3VsdGluZyBmcm9tIHRyYW5zbGF0aW9ucywgYWRhcHRhdGlvbnMgb3Igb3RoZXIgY2hhbmdlcyB3ZSBtYWtlIHNvCisgICB0aGF0IHlvdXIgY29udGVudCB3b3JrcyBiZXR0ZXIgd2l0aCBvdXIgU2VydmljZXMpLCBjb21tdW5pY2F0ZSwKKyAgIHB1Ymxpc2gsIHB1YmxpY2x5IHBlcmZvcm0sIHB1YmxpY2x5IGRpc3BsYXkgYW5kIGRpc3RyaWJ1dGUgc3VjaAorICAgY29udGVudC4gVGhlIHJpZ2h0cyB5b3UgZ3JhbnQgaW4gdGhpcyBsaWNlbnNlIGFyZSBmb3IgdGhlIGxpbWl0ZWQKKyAgIHB1cnBvc2Ugb2Ygb3BlcmF0aW5nLCBwcm9tb3RpbmcsIGFuZCBpbXByb3Zpbmcgb3VyIFNlcnZpY2VzLCBhbmQgdG8KKyAgIGRldmVsb3AgbmV3IG9uZXMuIFRoaXMgbGljZW5zZSBjb250aW51ZXMgZXZlbiBpZiB5b3Ugc3RvcCB1c2luZyBvdXIKKyAgIFNlcnZpY2VzIChmb3IgZXhhbXBsZSwgZm9yIGEgYnVzaW5lc3MgbGlzdGluZyB5b3UgaGF2ZSBhZGRlZCB0byBHb29nbGUKKyAgIE1hcHMpLiBTb21lIFNlcnZpY2VzIG1heSBvZmZlciB5b3Ugd2F5cyB0byBhY2Nlc3MgYW5kIHJlbW92ZSBjb250ZW50CisgICB0aGF0IGhhcyBiZWVuIHByb3ZpZGVkIHRvIHRoYXQgU2VydmljZS4gQWxzbywgaW4gc29tZSBvZiBvdXIgU2VydmljZXMsCisgICB0aGVyZSBhcmUgdGVybXMgb3Igc2V0dGluZ3MgdGhhdCBuYXJyb3cgdGhlIHNjb3BlIG9mIG91ciB1c2Ugb2YgdGhlCisgICBjb250ZW50IHN1Ym1pdHRlZCBpbiB0aG9zZSBTZXJ2aWNlcy4gTWFrZSBzdXJlIHlvdSBoYXZlIHRoZSBuZWNlc3NhcnkKKyAgIHJpZ2h0cyB0byBncmFudCB1cyB0aGlzIGxpY2Vuc2UgZm9yIGFueSBjb250ZW50IHRoYXQgeW91IHN1Ym1pdCB0byBvdXIKKyAgIFNlcnZpY2VzLgorCisgICBZb3UgY2FuIGZpbmQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBob3cgR29vZ2xlIHVzZXMgYW5kIHN0b3JlcyBjb250ZW50CisgICBpbiB0aGUgcHJpdmFjeSBwb2xpY3kgb3IgYWRkaXRpb25hbCB0ZXJtcyBmb3IgcGFydGljdWxhciBTZXJ2aWNlcy4gSWYKKyAgIHlvdSBzdWJtaXQgZmVlZGJhY2sgb3Igc3VnZ2VzdGlvbnMgYWJvdXQgb3VyIFNlcnZpY2VzLCB3ZSBtYXkgdXNlIHlvdXIKKyAgIGZlZWRiYWNrIG9yIHN1Z2dlc3Rpb25zIHdpdGhvdXQgb2JsaWdhdGlvbiB0byB5b3UuCisKK0Fib3V0IFNvZnR3YXJlIGluIG91ciBTZXJ2aWNlcworCisgICBXaGVuIGEgU2VydmljZSByZXF1aXJlcyBvciBpbmNsdWRlcyBkb3dubG9hZGFibGUgc29mdHdhcmUsIHRoaXMKKyAgIHNvZnR3YXJlIG1heSB1cGRhdGUgYXV0b21hdGljYWxseSBvbiB5b3VyIGRldmljZSBvbmNlIGEgbmV3IHZlcnNpb24gb3IKKyAgIGZlYXR1cmUgaXMgYXZhaWxhYmxlLiBTb21lIFNlcnZpY2VzIG1heSBsZXQgeW91IGFkanVzdCB5b3VyIGF1dG9tYXRpYworICAgdXBkYXRlIHNldHRpbmdzLgorCisgICBHb29nbGUgZ2l2ZXMgeW91IGEgcGVyc29uYWwsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tYXNzaWduYWJsZQorICAgYW5kIG5vbi1leGNsdXNpdmUgbGljZW5zZSB0byB1c2UgdGhlIHNvZnR3YXJlIHByb3ZpZGVkIHRvIHlvdSBieSBHb29nbGUKKyAgIGFzIHBhcnQgb2YgdGhlIFNlcnZpY2VzLiBUaGlzIGxpY2Vuc2UgaXMgZm9yIHRoZSBzb2xlIHB1cnBvc2Ugb2YKKyAgIGVuYWJsaW5nIHlvdSB0byB1c2UgYW5kIGVuam95IHRoZSBiZW5lZml0IG9mIHRoZSBTZXJ2aWNlcyBhcyBwcm92aWRlZAorICAgYnkgR29vZ2xlLCBpbiB0aGUgbWFubmVyIHBlcm1pdHRlZCBieSB0aGVzZSB0ZXJtcy4gWW91IG1heSBub3QgY29weSwKKyAgIG1vZGlmeSwgZGlzdHJpYnV0ZSwgc2VsbCwgb3IgbGVhc2UgYW55IHBhcnQgb2Ygb3VyIFNlcnZpY2VzIG9yIGluY2x1ZGVkCisgICBzb2Z0d2FyZSwgbm9yIG1heSB5b3UgcmV2ZXJzZSBlbmdpbmVlciBvciBhdHRlbXB0IHRvIGV4dHJhY3QgdGhlIHNvdXJjZQorICAgY29kZSBvZiB0aGF0IHNvZnR3YXJlLCB1bmxlc3MgbGF3cyBwcm9oaWJpdCB0aG9zZSByZXN0cmljdGlvbnMgb3IgeW91CisgICBoYXZlIG91ciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyAgIE9wZW4gc291cmNlIHNvZnR3YXJlIGlzIGltcG9ydGFudCB0byB1cy4gU29tZSBzb2Z0d2FyZSB1c2VkIGluIG91cgorICAgU2VydmljZXMgbWF5IGJlIG9mZmVyZWQgdW5kZXIgYW4gb3BlbiBzb3VyY2UgbGljZW5zZSB0aGF0IHdlIHdpbGwgbWFrZQorICAgYXZhaWxhYmxlIHRvIHlvdS4gVGhlcmUgbWF5IGJlIHByb3Zpc2lvbnMgaW4gdGhlIG9wZW4gc291cmNlIGxpY2Vuc2UKKyAgIHRoYXQgZXhwcmVzc2x5IG92ZXJyaWRlIHNvbWUgb2YgdGhlc2UgdGVybXMuCisKK01vZGlmeWluZyBhbmQgVGVybWluYXRpbmcgb3VyIFNlcnZpY2VzCisKKyAgIFdlIGFyZSBjb25zdGFudGx5IGNoYW5naW5nIGFuZCBpbXByb3Zpbmcgb3VyIFNlcnZpY2VzLiBXZSBtYXkgYWRkIG9yCisgICByZW1vdmUgZnVuY3Rpb25hbGl0aWVzIG9yIGZlYXR1cmVzLCBhbmQgd2UgbWF5IHN1c3BlbmQgb3Igc3RvcCBhCisgICBTZXJ2aWNlIGFsdG9nZXRoZXIuCisKKyAgIFlvdSBjYW4gc3RvcCB1c2luZyBvdXIgU2VydmljZXMgYXQgYW55IHRpbWUsIGFsdGhvdWdoIHdl4oCZbGwgYmUgc29ycnkgdG8KKyAgIHNlZSB5b3UgZ28uIEdvb2dsZSBtYXkgYWxzbyBzdG9wIHByb3ZpZGluZyBTZXJ2aWNlcyB0byB5b3UsIG9yIGFkZCBvcgorICAgY3JlYXRlIG5ldyBsaW1pdHMgdG8gb3VyIFNlcnZpY2VzIGF0IGFueSB0aW1lLgorCisgICBXZSBiZWxpZXZlIHRoYXQgeW91IG93biB5b3VyIGRhdGEgYW5kIHByZXNlcnZpbmcgeW91ciBhY2Nlc3MgdG8gc3VjaAorICAgZGF0YSBpcyBpbXBvcnRhbnQuIElmIHdlIGRpc2NvbnRpbnVlIGEgU2VydmljZSwgd2hlcmUgcmVhc29uYWJseQorICAgcG9zc2libGUsIHdlIHdpbGwgZ2l2ZSB5b3UgcmVhc29uYWJsZSBhZHZhbmNlIG5vdGljZSBhbmQgYSBjaGFuY2UgdG8KKyAgIGdldCBpbmZvcm1hdGlvbiBvdXQgb2YgdGhhdCBTZXJ2aWNlLgorCitPdXIgV2FycmFudGllcyBhbmQgRGlzY2xhaW1lcnMKKworICAgV2UgcHJvdmlkZSBvdXIgU2VydmljZXMgdXNpbmcgYSBjb21tZXJjaWFsbHkgcmVhc29uYWJsZSBsZXZlbCBvZiBza2lsbAorICAgYW5kIGNhcmUgYW5kIHdlIGhvcGUgdGhhdCB5b3Ugd2lsbCBlbmpveSB1c2luZyB0aGVtLiBCdXQgdGhlcmUgYXJlCisgICBjZXJ0YWluIHRoaW5ncyB0aGF0IHdlIGRvbuKAmXQgcHJvbWlzZSBhYm91dCBvdXIgU2VydmljZXMuCisKKyAgIE9USEVSIFRIQU4gQVMgRVhQUkVTU0xZIFNFVCBPVVQgSU4gVEhFU0UgVEVSTVMgT1IgQURESVRJT05BTCBURVJNUywKKyAgIE5FSVRIRVIgR09PR0xFIE5PUiBJVFMgU1VQUExJRVJTIE9SIERJU1RSSUJVVE9SUyBNQUtFIEFOWSBTUEVDSUZJQworICAgUFJPTUlTRVMgQUJPVVQgVEhFIFNFUlZJQ0VTLiBGT1IgRVhBTVBMRSwgV0UgRE9O4oCZVCBNQUtFIEFOWSBDT01NSVRNRU5UUworICAgQUJPVVQgVEhFIENPTlRFTlQgV0lUSElOIFRIRSBTRVJWSUNFUywgVEhFIFNQRUNJRklDIEZVTkNUSU9OIE9GIFRIRQorICAgU0VSVklDRVMsIE9SIFRIRUlSIFJFTElBQklMSVRZLCBBVkFJTEFCSUxJVFksIE9SIEFCSUxJVFkgVE8gTUVFVCBZT1VSCisgICBORUVEUy4gV0UgUFJPVklERSBUSEUgU0VSVklDRVMg4oCcQVMgSVPigJ0uCisKKyAgIFNPTUUgSlVSSVNESUNUSU9OUyBQUk9WSURFIEZPUiBDRVJUQUlOIFdBUlJBTlRJRVMsIExJS0UgVEhFIElNUExJRUQKKyAgIFdBUlJBTlRZIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgICBOT04tSU5GUklOR0VNRU5ULiBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBMQVcsIFdFIEVYQ0xVREUgQUxMCisgICBXQVJSQU5USUVTLgorCitMaWFiaWxpdHkgZm9yIG91ciBTZXJ2aWNlcworCisgICBXSEVOIFBFUk1JVFRFRCBCWSBMQVcsIEdPT0dMRSwgQU5EIEdPT0dMReKAmVMgU1VQUExJRVJTIEFORCBESVNUUklCVVRPUlMsCisgICBXSUxMIE5PVCBCRSBSRVNQT05TSUJMRSBGT1IgTE9TVCBQUk9GSVRTLCBSRVZFTlVFUywgT1IgREFUQSwgRklOQU5DSUFMCisgICBMT1NTRVMgT1IgSU5ESVJFQ1QsIFNQRUNJQUwsIENPTlNFUVVFTlRJQUwsIEVYRU1QTEFSWSwgT1IgUFVOSVRJVkUKKyAgIERBTUFHRVMuCisKKyAgIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIExBVywgVEhFIFRPVEFMIExJQUJJTElUWSBPRiBHT09HTEUsIEFORCBJVFMKKyAgIFNVUFBMSUVSUyBBTkQgRElTVFJJQlVUT1JTLCBGT1IgQU5ZIENMQUlNIFVOREVSIFRIRVNFIFRFUk1TLCBJTkNMVURJTkcKKyAgIEZPUiBBTlkgSU1QTElFRCBXQVJSQU5USUVTLCBJUyBMSU1JVEVEIFRPIFRIRSBBTU9VTlQgWU9VIFBBSUQgVVMgVE8gVVNFCisgICBUSEUgU0VSVklDRVMgKE9SLCBJRiBXRSBDSE9PU0UsIFRPIFNVUFBMWUlORyBZT1UgVEhFIFNFUlZJQ0VTIEFHQUlOKS4KKworICAgSU4gQUxMIENBU0VTLCBHT09HTEUsIEFORCBJVFMgU1VQUExJRVJTIEFORCBESVNUUklCVVRPUlMsIFdJTEwgTk9UIEJFCisgICBMSUFCTEUgRk9SIEFOWSBMT1NTIE9SIERBTUFHRSBUSEFUIElTIE5PVCBSRUFTT05BQkxZIEZPUkVTRUVBQkxFLgorCitCdXNpbmVzcyB1c2VzIG9mIG91ciBTZXJ2aWNlcworCisgICBJZiB5b3UgYXJlIHVzaW5nIG91ciBTZXJ2aWNlcyBvbiBiZWhhbGYgb2YgYSBidXNpbmVzcywgdGhhdCBidXNpbmVzcworICAgYWNjZXB0cyB0aGVzZSB0ZXJtcy4gSXQgd2lsbCBob2xkIGhhcm1sZXNzIGFuZCBpbmRlbW5pZnkgR29vZ2xlIGFuZCBpdHMKKyAgIGFmZmlsaWF0ZXMsIG9mZmljZXJzLCBhZ2VudHMsIGFuZCBlbXBsb3llZXMgZnJvbSBhbnkgY2xhaW0sIHN1aXQgb3IKKyAgIGFjdGlvbiBhcmlzaW5nIGZyb20gb3IgcmVsYXRlZCB0byB0aGUgdXNlIG9mIHRoZSBTZXJ2aWNlcyBvciB2aW9sYXRpb24KKyAgIG9mIHRoZXNlIHRlcm1zLCBpbmNsdWRpbmcgYW55IGxpYWJpbGl0eSBvciBleHBlbnNlIGFyaXNpbmcgZnJvbSBjbGFpbXMsCisgICBsb3NzZXMsIGRhbWFnZXMsIHN1aXRzLCBqdWRnbWVudHMsIGxpdGlnYXRpb24gY29zdHMgYW5kIGF0dG9ybmV5c+KAmQorICAgZmVlcy4KKworQWJvdXQgdGhlc2UgVGVybXMKKworICAgV2UgbWF5IG1vZGlmeSB0aGVzZSB0ZXJtcyBvciBhbnkgYWRkaXRpb25hbCB0ZXJtcyB0aGF0IGFwcGx5IHRvIGEKKyAgIFNlcnZpY2UgdG8sIGZvciBleGFtcGxlLCByZWZsZWN0IGNoYW5nZXMgdG8gdGhlIGxhdyBvciBjaGFuZ2VzIHRvIG91cgorICAgU2VydmljZXMuIFlvdSBzaG91bGQgbG9vayBhdCB0aGUgdGVybXMgcmVndWxhcmx5LiBXZeKAmWxsIHBvc3Qgbm90aWNlIG9mCisgICBtb2RpZmljYXRpb25zIHRvIHRoZXNlIHRlcm1zIG9uIHRoaXMgcGFnZS4gV2XigJlsbCBwb3N0IG5vdGljZSBvZgorICAgbW9kaWZpZWQgYWRkaXRpb25hbCB0ZXJtcyBpbiB0aGUgYXBwbGljYWJsZSBTZXJ2aWNlLiBDaGFuZ2VzIHdpbGwgbm90CisgICBhcHBseSByZXRyb2FjdGl2ZWx5IGFuZCB3aWxsIGJlY29tZSBlZmZlY3RpdmUgbm8gc29vbmVyIHRoYW4gZm91cnRlZW4KKyAgIGRheXMgYWZ0ZXIgdGhleSBhcmUgcG9zdGVkLiBIb3dldmVyLCBjaGFuZ2VzIGFkZHJlc3NpbmcgbmV3IGZ1bmN0aW9ucworICAgZm9yIGEgU2VydmljZSBvciBjaGFuZ2VzIG1hZGUgZm9yIGxlZ2FsIHJlYXNvbnMgd2lsbCBiZSBlZmZlY3RpdmUKKyAgIGltbWVkaWF0ZWx5LiBJZiB5b3UgZG8gbm90IGFncmVlIHRvIHRoZSBtb2RpZmllZCB0ZXJtcyBmb3IgYSBTZXJ2aWNlLAorICAgeW91IHNob3VsZCBkaXNjb250aW51ZSB5b3VyIHVzZSBvZiB0aGF0IFNlcnZpY2UuCisKKyAgIElmIHRoZXJlIGlzIGEgY29uZmxpY3QgYmV0d2VlbiB0aGVzZSB0ZXJtcyBhbmQgdGhlIGFkZGl0aW9uYWwgdGVybXMsCisgICB0aGUgYWRkaXRpb25hbCB0ZXJtcyB3aWxsIGNvbnRyb2wgZm9yIHRoYXQgY29uZmxpY3QuCisKKyAgIFRoZXNlIHRlcm1zIGNvbnRyb2wgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIEdvb2dsZSBhbmQgeW91LiBUaGV5IGRvCisgICBub3QgY3JlYXRlIGFueSB0aGlyZCBwYXJ0eSBiZW5lZmljaWFyeSByaWdodHMuCisKKyAgIElmIHlvdSBkbyBub3QgY29tcGx5IHdpdGggdGhlc2UgdGVybXMsIGFuZCB3ZSBkb27igJl0IHRha2UgYWN0aW9uIHJpZ2h0CisgICBhd2F5LCB0aGlzIGRvZXNu4oCZdCBtZWFuIHRoYXQgd2UgYXJlIGdpdmluZyB1cCBhbnkgcmlnaHRzIHRoYXQgd2UgbWF5CisgICBoYXZlIChzdWNoIGFzIHRha2luZyBhY3Rpb24gaW4gdGhlIGZ1dHVyZSkuCisKKyAgIElmIGl0IHR1cm5zIG91dCB0aGF0IGEgcGFydGljdWxhciB0ZXJtIGlzIG5vdCBlbmZvcmNlYWJsZSwgdGhpcyB3aWxsCisgICBub3QgYWZmZWN0IGFueSBvdGhlciB0ZXJtcy4KKworICAgVGhlIGxhd3Mgb2YgQ2FsaWZvcm5pYSwgVS5TLkEuLCBleGNsdWRpbmcgQ2FsaWZvcm5pYeKAmXMgY29uZmxpY3Qgb2YgbGF3cworICAgcnVsZXMsIHdpbGwgYXBwbHkgdG8gYW55IGRpc3B1dGVzIGFyaXNpbmcgb3V0IG9mIG9yIHJlbGF0aW5nIHRvIHRoZXNlCisgICB0ZXJtcyBvciB0aGUgU2VydmljZXMuIEFsbCBjbGFpbXMgYXJpc2luZyBvdXQgb2Ygb3IgcmVsYXRpbmcgdG8gdGhlc2UKKyAgIHRlcm1zIG9yIHRoZSBTZXJ2aWNlcyB3aWxsIGJlIGxpdGlnYXRlZCBleGNsdXNpdmVseSBpbiB0aGUgZmVkZXJhbCBvcgorICAgc3RhdGUgY291cnRzIG9mIFNhbnRhIENsYXJhIENvdW50eSwgQ2FsaWZvcm5pYSwgVVNBLCBhbmQgeW91IGFuZCBHb29nbGUKKyAgIGNvbnNlbnQgdG8gcGVyc29uYWwganVyaXNkaWN0aW9uIGluIHRob3NlIGNvdXJ0cy4KKworICAgRm9yIGluZm9ybWF0aW9uIGFib3V0IGhvdyB0byBjb250YWN0IEdvb2dsZSwgcGxlYXNlIHZpc2l0IG91cgorICAgWzldY29udGFjdCBwYWdlLgorCisgICBbRW5nbGlzaF9fX19fX19fX19fX19fX19fX10KKyAgICAgKiBbMTBdR29vZ2xlCisgICAgICogWzExXVByaXZhY3kgJiBUZXJtcworCitSZWZlcmVuY2VzCisKKyAgIDEuIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbS8KKyAgIDIuIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9pbnRsL2VuL3BvbGljaWVzLworICAgMy4gaHR0cDovL3d3dy5nb29nbGUuY29tL2ludGwvZW4vcG9saWNpZXMvCisgICA0LiBodHRwOi8vd3d3Lmdvb2dsZS5jb20vaW50bC9lbi9wb2xpY2llcy9wcml2YWN5LworICAgNS4gaHR0cDovL3d3dy5nb29nbGUuY29tL2ludGwvZW4vcG9saWNpZXMvdGVybXMvYXJjaGl2ZS8KKyAgIDYuIGh0dHA6Ly9zdXBwb3J0Lmdvb2dsZS5jb20vYWNjb3VudHMvYmluL2Fuc3dlci5weT9obD1lbiZhbnN3ZXI9NTg1ODUKKyAgIDcuIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9pbnRsL2VuL3BvbGljaWVzL3ByaXZhY3kvCisgICA4LiBodHRwOi8vc3VwcG9ydC5nb29nbGUuY29tL2Jpbi9zdGF0aWMucHk/aGw9ZW4mdHM9MTExNDkwNSZwYWdlPXRzLmNzCisgICA5LiBodHRwOi8vd3d3Lmdvb2dsZS5jb20vaW50bC9lbi9jb250YWN0LworICAxMC4gaHR0cDovL3d3dy5nb29nbGUuY29tLworICAxMS4gaHR0cDovL3d3dy5nb29nbGUuY29tL2ludGwvZW4vcG9saWNpZXMvCmRpZmYgLS1naXQgYS9saWNlbnNlcy9IQlJMIGIvbGljZW5zZXMvSEJSTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNThiYWYzCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvSEJSTApAQCAtMCwwICsxLDI3NiBAQAorSGVsaXggRE5BIFRlY2hub2xvZ3kgQmluYXJ5IFJlc2VhcmNoIFVzZSBMaWNlbnNlCisKK1JFRElTVFJJQlVUSU9OIE5PVCBQRVJNSVRURUQKKworVGhpcyBIZWxpeCBETkEgVGVjaG5vbG9neSBCaW5hcnkgUmVzZWFyY2gKK1VzZSBMaWNlbnNlICgiTGljZW5zZSIpIGlzIGEgbGVnYWwgYWdyZWVtZW50CitiZXR3ZWVuIFlvdSBhbmQgUmVhbE5ldHdvcmtzLCBJbmMuIGFuZAoraXRzIHN1cHBsaWVycyBhbmQgbGljZW5zb3JzIChjb2xsZWN0aXZlbHksCisiUmVhbE5ldHdvcmtzIikgZm9yIHRoZSBiaW5hcnkgdmVyc2lvbnMgb2YKK3RoZSBIZWxpeCBETkEgQ29tcGlsZWQgQmluYXJpZXMgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoaXMgTGljZW5zZSAoIlNvZnR3YXJlIiksIHdoaWNoIGFyZQorbWFkZSBhdmFpbGFibGUgZnJvbSB0aGUgIkhlbGl4IEROQSBDb21waWxlZAorQmluYXJpZXMiIHNlY3Rpb24gb2YgdGhlIHd3dy5oZWxpeGNvbW11bml0eS5vcmcKKzxodHRwOi8vd3d3LmhlbGl4Y29tbXVuaXR5Lm9yZy8+IFdlYiBzaXRlLiAgIllvdSIKK21lYW5zIGFuIGluZGl2aWR1YWwsIG9yIGEgbGVnYWwgZW50aXR5IGFjdGluZworYnkgYW5kIHRocm91Z2ggYW4gaW5kaXZpZHVhbCBvciBpbmRpdmlkdWFscywKK2V4ZXJjaXNpbmcgcmlnaHRzIGVpdGhlciB1bmRlciB0aGlzIExpY2Vuc2UuCitGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIGluY2x1ZGVzIGFueSBlbnRpdHkKK3RoYXQgYnkgbWFqb3JpdHkgdm90aW5nIGludGVyZXN0IGNvbnRyb2xzLCBpcworY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aAorWW91LiBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHRoaXMgTGljZW5zZQorYXJlIGFzIGZvbGxvd3M6CisKK0J5IGNsaWNraW5nIG9uIG9yIGFjY2VwdGluZyB0aGUgIkFDQ0VQVCIgb3B0aW9uCitiZWxvdywgb3IgYnkgaW5zdGFsbGluZywgY29weWluZyBvciBvdGhlcndpc2UKK3VzaW5nIHRoZSBTb2Z0d2FyZSwgeW91IGFncmVlIHRvIGJlIGJvdW5kIGJ5IHRoZQordGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gSUYgWU9VIERPIE5PVAorQUdSRUUgVE8gVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRSBBR1JFRU1FTlQsCitDTElDSyBUSEUgIkFDQ0VQVCIgQlVUVE9OIEFORC9PUiBETyBOT1QgSU5TVEFMTAorVEhFIFNPRlRXQVJFLgorCitZT1UgQUdSRUUgVEhBVCBZT1VSIFVTRSBPRiBUSEUgU09GVFdBUkUKK0FDS05PV0xFREdFUyBUSEFUIFlPVSBIQVZFIFJFQUQgVEhJUyBMSUNFTlNFLAorVU5ERVJTVEFORCBJVCwgQU5EIEFHUkVFIFRPIEJFIEJPVU5EIEJZIElUUworVEVSTVMgQU5EIENPTkRJVElPTlMuCisKKzEuIEdSQU5UIE9GIExJQ0VOU0UgRk9SIElOVEVSTkFMIFJFU0VBUkNIIEFORAorREVWRUxPUE1FTlQgV09SSy4gIFN1YmplY3QgdG8gdGhlIHJlc3RyaWN0aW9ucworc2V0IGZvcnRoIGhlcmVpbiwgUmVhbE5ldHdvcmtzIGhlcmVieSBncmFudHMKK3RvIFlvdSBhIG5vbi1leGNsdXNpdmUsIG5vbi1zdWJsaWNlbnNhYmxlLAorcGVyc29uYWwgbGljZW5zZSB0byB1c2UgdGhlIFNvZnR3YXJlIGluCitvYmplY3QgY29kZSBhbmQgYW55IGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uCisoIkRvY3VtZW50YXRpb24iKSBzb2xlbHkgZm9yIFlvdXIgaW50ZXJuYWwsCitub24tY29tbWVyY2lhbCBldmFsdWF0aW9uIGFuZCByZXNlYXJjaCB1c2UsCitwcm92aWRlZCB0aGF0IFlvdSBtYXkgb25seSBpbnN0YWxsIGFuZCB1c2UgYQorcmVhc29uYWJsZSBudW1iZXIgb2YgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSBvbgorY29tcHV0ZXJzIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgWW91IGFuZCBsb2NhdGVkCitvbiBZb3VyIHByZW1pc2VzLiBBcyBwYXJ0IG9mIHN1Y2ggdXNlIFlvdSBtYXkKK2NvbWJpbmUgdGhlIFNvZnR3YXJlIHdpdGggb3RoZXIgSGVsaXggc29mdHdhcmUKK3Byb3Blcmx5IGxpY2Vuc2VkIHRvIFlvdSB1bmRlciB0aGUgdGVybXMgb2YKK3RoZSBSZWFsTmV0d29ya3MgQ29tbXVuaXR5IFNvdXJjZSBMaWNlbnNlCitBZ3JlZW1lbnQgb3IgdGhlIFJlYWxOZXR3b3JrcyBQdWJsaWMgU291cmNlCitMaWNlbnNlIEFncmVlbWVudCwgYnV0IFlvdSBtYXkgbm90IG90aGVyd2lzZQorY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFNvZnR3YXJlIG9yCitEb2N1bWVudGF0aW9uLgorCisyLiBMSUNFTlNFIFJFU1RSSUNUSU9OUy4KKworYSkgWW91IG1heSBub3Q6IChpKSBwZXJtaXQgb3RoZXIgaW5kaXZpZHVhbHMgdG8KK3VzZSB0aGUgU29mdHdhcmUgZXhjZXB0IHVuZGVyIHRoZSB0ZXJtcyBsaXN0ZWQKK2Fib3ZlOyAoaWkpIG1vZGlmeSwgdHJhbnNsYXRlLCByZXZlcnNlIGVuZ2luZWVyLAorZGVjb21waWxlLCBkaXNhc3NlbWJsZSBvciB1c2UgYW55IG90aGVyIG1ldGhvZAorKGluY2x1ZGluZyAiY2xlYW4gcm9vbSIgZGV2ZWxvcG1lbnQpIHRvIGxlYXJuIHRoZQorc291cmNlIGNvZGUgb2YgdGhlIFNvZnR3YXJlIChleGNlcHQgdG8gdGhlIGV4dGVudAordGhhdCB0aGlzIHJlc3RyaWN0aW9uIGlzIGV4cHJlc3NseSBwcm9oaWJpdGVkIGJ5CitsYXcpOyAoaWlpKSByZW50LCBsZWFzZSwgdHJhbnNmZXIsIG9yIG90aGVyd2lzZQordHJhbnNmZXIgcmlnaHRzIHRvIHRoZSBTb2Z0d2FyZSBvciBEb2N1bWVudGF0aW9uOworKGl2KSByZW1vdmUgYW55IHByb3ByaWV0YXJ5IG5vdGljZXMgb3IgbGFiZWxzCitvbiB0aGUgU29mdHdhcmUgb3IgRG9jdW1lbnRhdGlvbjsgKHYpIHVzZQordGhlIFNvZnR3YXJlIHRvIGVuY29kZSwgcmVwcm9kdWNlIG9yIGNvcHkgYW55CittYXRlcmlhbCBvciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgWW91IGRvIG5vdCBoYXZlCit0aGUgcmlnaHQgdG8gZW5jb2RlLCByZXByb2R1Y2UsIG9yIGNvcHk7ICh2aSkKK3VzZSB0aGUgU29mdHdhcmUgdG8gZGV2ZWxvcCBhbnkgYXBwbGljYXRpb24gdGhhdAoraGFzIHRoZSBjYXBhYmlsaXR5IG9mIHRyYW5zY29kaW5nIG9yIGNvbnZlcnRpbmcKK1JlYWxBdWRpbyBvciBSZWFsVmlkZW8gRmlsZXMgaW50byBhbnkgb3RoZXIKK2ZpbGUgZm9ybWF0ICgiVHJhbnNjb2RlIiBtZWFucyB0byBhbHRlciB0aGUKK2N1cnJlbnQgZW5jb2Rpbmcgb3IgZm9ybSBvZiBtZWRpYSBmaWxlcyB0aGF0IHdhcworZGVjb2RlZCBmcm9tIGl0cyBvcmlnaW5hbCBmb3JtLCBpbmNsdWRpbmcgYnkgd2F5CitvZiBleGFtcGxlIGJ1dCBub3QgbGltaXRlZCB0byBieSB3YXkgb2YgZXhhbXBsZQorYnV0IG5vdCBsaW1pdGVkIHRvOiBkZWNvbXByZXNzaW9uIG9mIGFuIGF1ZGlvIG9yCit2aWRlbyBzdHJlYW0gYW5kIHJlY29tcHJlc3Npb24gdXNpbmcgYSBkaWZmZXJlbnQKK2NvbXByZXNzaW9uIGFsZ29yaXRobSk7IG9yICh2aWkpIG1ha2UgYXZhaWxhYmxlCit0byBhbnkgdGhpcmQgcGFydHkgdGhlIHJlc3VsdHMgb2YgYW55IGV2YWx1YXRpb24KK29yIHRlc3Rpbmcgb2YgdGhlIFNvZnR3YXJlIGJ5IFlvdSB1bmRlciB0aGlzCitMaWNlbnNlLiBBbnkgc3VjaCBmb3JiaWRkZW4gdXNlIHNoYWxsIGltbWVkaWF0ZWx5Cit0ZXJtaW5hdGUgWW91ciBsaWNlbnNlIHRvIHRoZSBTb2Z0d2FyZS4KKworYikgWW91IGFncmVlIHRoYXQgWW91IHNoYWxsIG9ubHkgdXNlIHRoZSBTb2Z0d2FyZQorYW5kIERvY3VtZW50YXRpb24gaW4gYSBtYW5uZXIgdGhhdCBjb21wbGllcyB3aXRoCithbGwgYXBwbGljYWJsZSBsYXdzIGluIHRoZSBqdXJpc2RpY3Rpb25zIGluCit3aGljaCBZb3UgdXNlIHRoZSBTb2Z0d2FyZSBhbmQgRG9jdW1lbnRhdGlvbiwKK2luY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCBhcHBsaWNhYmxlCityZXN0cmljdGlvbnMgY29uY2VybmluZyBjb3B5cmlnaHQgYW5kIG90aGVyCitpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzLgorCitjKSBZb3UgbWF5IG5vdCB1c2UgdGhlIFNvZnR3YXJlIGluIGFuIGF0dGVtcHQgdG8sCitvciBpbiBjb25qdW5jdGlvbiB3aXRoLCBhbnkgZGV2aWNlLCBwcm9ncmFtIG9yCitzZXJ2aWNlIGRlc2lnbmVkIHRvIGNpcmN1bXZlbnQgdGVjaG5vbG9naWNhbAorbWVhc3VyZXMgZW1wbG95ZWQgdG8gY29udHJvbCBhY2Nlc3MgdG8sIG9yCit0aGUgcmlnaHRzIGluLCBhIGRpZ2l0YWwgbWVkaWEgY29udGVudCBmaWxlIG9yCitvdGhlciB3b3JrIHByb3RlY3RlZCBieSB0aGUgY29weXJpZ2h0IGxhd3Mgb2YKK2FueSBqdXJpc2RpY3Rpb24uCisKK2QpIENlcnRhaW4gY29tcG9uZW50cyBvZiB0aGUgU29mdHdhcmUgbWF5IGVtYm9keQorYSBzZXJpYWwgY29weWluZyBtYW5hZ2VtZW50IHN5c3RlbSByZXF1aXJlZAorYnkgdGhlIGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMuIFlvdSBtYXkgbm90CitjaXJjdW12ZW50IG9yIGF0dGVtcHQgdG8gY2lyY3VtdmVudCB0aGlzIHN5c3RlbQorYnkgYW55IG1lYW5zLgorCiszLiBDT1BJRVMgT0YgU09GVFdBUkUgQU5EIEVOSEFOQ0VNRU5UUy4gVGhpcworbGljZW5zZSBkb2VzIG5vdCBncmFudCBZb3UgYW55IHJpZ2h0IHRvIGFueQorZW5oYW5jZW1lbnQgb3IgdXBkYXRlLgorCis0LiBUSVRMRS4gVGl0bGUsIG93bmVyc2hpcCwgcmlnaHRzLCBhbmQKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaW4gYW5kIHRvIHRoZQorU29mdHdhcmUgYW5kIERvY3VtZW50YXRpb24gc2hhbGwgcmVtYWluCitpbiBSZWFsTmV0d29ya3MuICBUaGUgU29mdHdhcmUgaXMgcHJvdGVjdGVkCitieSB0aGUgY29weXJpZ2h0IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMKK2FuZCBpbnRlcm5hdGlvbmFsIGNvcHlyaWdodCB0cmVhdGllcy4gVGl0bGUsCitvd25lcnNoaXAgcmlnaHRzIGFuZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkKK3JpZ2h0cyBpbiBhbmQgdG8gdGhlIGNvbnRlbnQgYWNjZXNzZWQgdGhyb3VnaAordGhlIFNvZnR3YXJlIGluY2x1ZGluZyB0aGUgY29udGVudCBjb250YWluZWQgaW4KK3RoZSBTb2Z0d2FyZSBtZWRpYSBkZW1vbnN0cmF0aW9uIGZpbGVzIHNoYWxsCitiZSByZXRhaW5lZCBieSB0aGUgYXBwbGljYWJsZSBjb250ZW50IG93bmVyCithbmQgbWF5IGJlIHByb3RlY3RlZCBieSBhcHBsaWNhYmxlIGNvcHlyaWdodCBvcgorb3RoZXIgbGF3LiBUaGlzIGxpY2Vuc2UgZ2l2ZXMgWW91IG5vIHJpZ2h0cyB0bworc3VjaCBjb250ZW50LgorCis1LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZICYgTElNSVQgT0YKK0xJQUJJTElUWS4gVEhFIFNPRlRXQVJFIEFORCBET0NVTUVOVEFUSU9OCitBUkUgUFJPVklERUQgIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GCitBTlkgS0lORC4gVE8gVEhFIE1BWElNVU0gRVhURU5UIFBFUk1JVFRFRCBCWQorQVBQTElDQUJMRSBMQVcsIFJFQUxORVRXT1JLUyBGVVJUSEVSIERJU0NMQUlNUworQUxMIFdBUlJBTlRJRVMsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04KK0FOWSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEFORAorTk9OSU5GUklOR0VNRU5ULiBUSEUgRU5USVJFIFJJU0sgQVJJU0lORyBPVVQKK09GIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhFIFNPRlRXQVJFIEFORAorRE9DVU1FTlRBVElPTiBSRU1BSU5TIFdJVEggWU9VLiBUTyBUSEUgTUFYSU1VTQorRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQKK1NIQUxMIFJFQUxORVRXT1JLUyBPUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IKK0FOWSBDT05TRVFVRU5USUFMLCBJTkNJREVOVEFMLCBJTkRJUkVDVCwgU1BFQ0lBTCwKK1BVTklUSVZFLCBPUiBPVEhFUiBEQU1BR0VTIFdIQVRTT0VWRVIgKElOQ0xVRElORywKK1dJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBCVVNJTkVTUworUFJPRklUUywgQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBMT1NTIE9GIEJVU0lORVNTCitJTkZPUk1BVElPTiwgT1IgT1RIRVIgUEVDVU5JQVJZIExPU1MpIEFSSVNJTkcKK09VVCBPRiBUSElTIExJQ0VOU0UgT1IgVEhFIFVTRSBPRiBPUiBJTkFCSUxJVFkKK1RPIFVTRSBUSEUgUFJPRFVDVCwgRVZFTiBJRiBSRUFMTkVUV09SS1MKK0hBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKK0RBTUFHRVMuICBSRUFMTkVUV09SS1MnIFRPVEFMIExJQUJMSVRZIEZPUiBBTlkKK0RJUkVDVCBEQU1BR0VTIFNIQUxMIE5PVCBFWENFRUQgRklWRSBET0xMQVJTCisoJDUuMDApLiBCRUNBVVNFIFNPTUUgU1RBVEVTL0pVUklTRElDVElPTlMgRE8gTk9UCitBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgTElBQklMSVRZCitGT1IgQ09OU0VRVUVOVElBTCBPUiBJTkNJREVOVEFMIERBTUFHRVMsIFRIRQorQUJPVkUgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNi4gSU5ERU1OSUZJQ0FUSU9OLiBUaGlzIFNvZnR3YXJlIGlzIGludGVuZGVkCitmb3IgdXNlIG9ubHkgd2l0aCBwcm9wZXJseSBsaWNlbnNlZCBtZWRpYSwKK2NvbnRlbnQgYW5kIGNvbnRlbnQgY3JlYXRpb24gdG9vbHMuIEl0IGlzCitZb3VyIHJlc3BvbnNpYmlsaXR5IHRvIGFzY2VydGFpbiB3aGV0aGVyIGFueQorY29weXJpZ2h0LCBwYXRlbnQgb3Igb3RoZXIgbGljZW5zZXMgYXJlIG5lY2Vzc2FyeQorYW5kIHRvIG9idGFpbiBhbnkgbGljZW5zZXMgdG8gc3VjaCBtZWRpYSBhbmQKK2NvbnRlbnQuIFlvdSBhZ3JlZSB0byB1c2Ugb25seSB0aG9zZSBtYXRlcmlhbHMKK2ZvciB3aGljaCBZb3UgaGF2ZSB0aGUgbmVjZXNzYXJ5IHBhdGVudCwKK2NvcHlyaWdodCBhbmQgb3RoZXIgcGVybWlzc2lvbnMsIGxpY2Vuc2VzLCBhbmQvb3IKK2NsZWFyYW5jZXMuIFlvdSBhZ3JlZSB0byBob2xkIGhhcm1sZXNzLCBpbmRlbW5pZnkKK2FuZCBkZWZlbmQgUmVhbE5ldHdvcmtzLCBpdHMgb2ZmaWNlcnMsIGRpcmVjdG9ycworYW5kIGVtcGxveWVlcywgZnJvbSBhbmQgYWdhaW5zdCBhbnkgbG9zc2VzLAorZGFtYWdlcywgZmluZXMgYW5kIGV4cGVuc2VzIChpbmNsdWRpbmcgYXR0b3JuZXlzJworZmVlcyBhbmQgY29zdHMpIGFyaXNpbmcgb3V0IG9mIG9yIHJlbGF0aW5nIHRvIGFueQorY2xhaW1zIHRoYXQgWW91IGhhdmUgZW5jb2RlZCwgY29waWVkLCBjb21wcmVzc2VkLAorZW5hYmxlZCB0aGUgIkFsbG93IFJlY29yZGluZyIgZmVhdHVyZSwgZW5hYmxlZAordGhlICJBbGxvdyBEb3dubG9hZCIgZmVhdHVyZSwgb3IgY29waWVkLCB1c2VkLAorcHVibGlzaGVkLCBkaXNwbGF5ZWQsIG9yIHRyYW5zbWl0dGVkIGFueSBjb250ZW50CitvciBtYXRlcmlhbHMgKG90aGVyIHRoYW4gbWF0ZXJpYWxzIHByb3ZpZGVkCitieSBSZWFsTmV0d29ya3Mgc3BlY2lmaWNhbGx5IGZvciBZb3VyIHVzZSkKK2luIGNvbm5lY3Rpb24gd2l0aCB0aGUgU29mdHdhcmUgaW4gdmlvbGF0aW9uCitvZiBhbm90aGVyIHBhcnR5J3MgcmlnaHRzIElmIFlvdSBhcmUgaW1wb3J0aW5nCit0aGUgU29mdHdhcmUgZnJvbSB0aGUgVW5pdGVkIFN0YXRlcywgWW91IHNoYWxsCitpbmRlbW5pZnkgYW5kIGhvbGQgUmVhbE5ldHdvcmtzIGhhcm1sZXNzIGZyb20KK2FuZCBhZ2FpbnN0IGFueSBpbXBvcnQgYW5kIGV4cG9ydCBkdXRpZXMgb3IKK290aGVyIGNsYWltcyBhcmlzaW5nIGZyb20gc3VjaCBpbXBvcnRhdGlvbi4KKworNy4gVEVSTUlOQVRJT04uIFRoaXMgTGljZW5zZSBhbmQgWW91ciByaWdodCB0bwordXNlIHRoaXMgU29mdHdhcmUgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgaWYKK1lvdSBmYWlsIHRvIGNvbXBseSB3aXRoIGFueSBtYXRlcmlhbCBwcm92aXNpb24KK29mIHRoaXMgTGljZW5zZS4gUmVhbE5ldHdvcmtzIG1heSB0ZXJtaW5hdGUKK3RoaXMgTGljZW5zZSBhdCBhbnkgdGltZSBieSBkZWxpdmVyaW5nIG5vdGljZQordG8gWW91IGFuZCBZb3UgbWF5IHRlcm1pbmF0ZSB0aGlzIExpY2Vuc2UgYXQKK2FueSB0aW1lIGJ5IGRlc3Ryb3lpbmcgb3IgZXJhc2luZyBZb3VyIGNvcHkgb2YKK3RoZSBTb2Z0d2FyZS4gVXBvbiB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UsCitZb3UgYWdyZWUgdG8gZGVzdHJveSBvciBlcmFzZSB0aGUgU29mdHdhcmUuCisKKzguIE5PIEFTU0lHTk1FTlQuIFRoaXMgTGljZW5zZSBpcyBwZXJzb25hbAordG8gWW91LCBhbmQgbWF5IG5vdCBiZSBhc3NpZ25lZCB3aXRob3V0CitSZWFsTmV0d29ya3MnIGV4cHJlc3Mgd3JpdHRlbiBjb25zZW50LgorCis5LiBVLlMuIEdPVkVSTk1FTlQgUkVTVFJJQ1RFRAorUklHSFRTLiBVLlMuIEdPVkVSTk1FTlQgUkVTVFJJQ1RFRCBSSUdIVFM6CitUaGlzIFNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIGFyZSBwcm92aWRlZAord2l0aCBSRVNUUklDVEVEIFJJR0hUUy4gVXNlLCBkdXBsaWNhdGlvbgorb3IgZGlzY2xvc3VyZSBieSB0aGUgR292ZXJubWVudCBpcyBzdWJqZWN0Cit0byByZXN0cmljdGlvbnMgc2V0IGZvcnRoIGluIHN1YnBhcmFncmFwaHMKKyhhKSB0aHJvdWdoIChkKSBvZiB0aGUgQ29tbWVyY2lhbCBDb21wdXRlcgorU29mdHdhcmUtLVJlc3RyaWN0ZWQgUmlnaHRzIGF0IEZBUiA1Mi4yMjctMTkKK3doZW4gYXBwbGljYWJsZSwgb3IgaW4gc3VicGFyYWdyYXBoIChjKSgxKShpaSkKK29mIHRoZSBSaWdodHMgaW4gVGVjaG5pY2FsIERhdGEgYW5kIENvbXB1dGVyCitTb2Z0d2FyZSBjbGF1c2UgYXQgREZBUlMgMjUyLjIyNy03MDEzLCBhbmQgaW4KK3NpbWlsYXIgY2xhdXNlcyBpbiB0aGUgTkFTQSBGQVIgc3VwcGxlbWVudCwKK2FzIGFwcGxpY2FibGUuIE1hbnVmYWN0dXJlciBpcyBSZWFsTmV0d29ya3MsCitJbmMuLzI2MDEgRWxsaW90dCwgU3VpdGUgMTAwMC9TZWF0dGxlLAorV2FzaGluZ3RvbiA5ODEyMS4gIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yCitjb21wbHlpbmcgd2l0aCBhbGwgdHJhZGUgcmVndWxhdGlvbnMgYW5kIGxhd3MKK2JvdGggZm9yZWlnbiBhbmQgZG9tZXN0aWMuIFlvdSBhY2tub3dsZWRnZSB0aGF0Citub25lIG9mIHRoZSBTb2Z0d2FyZSBvciB1bmRlcmx5aW5nIGluZm9ybWF0aW9uCitvciB0ZWNobm9sb2d5IG1heSBiZSBkb3dubG9hZGVkIG9yIG90aGVyd2lzZQorZXhwb3J0ZWQgb3IgcmUtZXhwb3J0ZWQgKGkpIGludG8gKG9yIHRvIGEKK25hdGlvbmFsIG9yIHJlc2lkZW50IG9mKSBDdWJhLCBJcmFxLCBMaWJ5YSwKK1N1ZGFuLCBOb3J0aCBLb3JlYSwgSXJhbiwgU3lyaWEgb3IgYW55IG90aGVyCitjb3VudHJ5IHN1YmplY3QgdG8gYSBVLlMuIGVtYmFyZ287IG9yIChpaSkKK3RvIGFueW9uZSBvbiB0aGUgVS5TLiBUcmVhc3VyeSBEZXBhcnRtZW50J3MKK2xpc3Qgb2YgU3BlY2lhbGx5IERlc2lnbmF0ZWQgTmF0aW9uYWxzIG9yIHRoZQorVS5TLiBDb21tZXJjZSBEZXBhcnRtZW50J3MgRGVuaWVkIFBhcnRpZXMgTGlzdAorb3IgRW50aXR5IExpc3QuIEJ5IHVzaW5nIHRoZSBTb2Z0d2FyZSBZb3UgYXJlCithZ3JlZWluZyB0byB0aGUgZm9yZWdvaW5nIGFuZCBhcmUgcmVwcmVzZW50aW5nCithbmQgd2FycmFudGluZyB0aGF0IChpKSBubyBVLlMuIGZlZGVyYWwgYWdlbmN5CitoYXMgc3VzcGVuZGVkLCByZXZva2VkLCBvciBkZW5pZWQgWW91IGV4cG9ydAorcHJpdmlsZWdlcywgKGlpKSBZb3UgYXJlIG5vdCBsb2NhdGVkIGluIG9yCit1bmRlciB0aGUgY29udHJvbCBvZiBhIG5hdGlvbmFsIG9yIHJlc2lkZW50IG9mCithbnkgc3VjaCBjb3VudHJ5IG9yIG9uIGFueSBzdWNoIGxpc3QsIGFuZCAoaWlpKQorWW91IHdpbGwgbm90IGV4cG9ydCBvciByZS1leHBvcnQgdGhlIFNvZnR3YXJlCit0byBhbnkgcHJvaGliaXRlZCBjb3VudHksIG9yIHRvIGFueSBwcm9oaWJpdGVkCitwZXJzb24sIGVudGl0eSwgb3IgZW5kLXVzZXIgYXMgc3BlY2lmaWVkIGJ5IFUuUy4KK2V4cG9ydCBjb250cm9scy4KKworMTAuIE1JU0NFTExBTkVPVVMuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQKK3NoYWxsIGNvbnN0aXR1dGUgdGhlIGNvbXBsZXRlIGFuZCBleGNsdXNpdmUKK2FncmVlbWVudCBiZXR3ZWVuIHVzLiBBIHNlcGFyYXRlIHdyaXR0ZW4KK2FncmVlbWVudCB3aXRoIHJlc3BlY3QgdG8gdGhlIHN1YmplY3QgbWF0dGVyCitoZXJlb2Ygc2hhbGwgc3VwZXJzZWRlIHRoaXMgaW5zdHJ1bWVudCB0byB0aGUKK2V4dGVudCBpbmRpY2F0ZWQgaW4gc3VjaCBzZXBhcmF0ZSBhZ3JlZW1lbnQuIFRoaXMKK0xpY2Vuc2UgQWdyZWVtZW50IG1heSBub3QgYmUgbW9kaWZpZWQgZXhjZXB0CitpbiBhIHdyaXRpbmcgZHVseSBzaWduZWQgYnkgYW4gYXV0aG9yaXplZAorcmVwcmVzZW50YXRpdmUgb2YgUmVhbE5ldHdvcmtzIGFuZCBZb3UuIElmIGFueQorcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgaXMgaGVsZCB0bworYmUgdW5lbmZvcmNlYWJsZSBmb3IgYW55IHJlYXNvbiwgc3VjaCBwcm92aXNpb24KK3NoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkKK3RvIG1ha2UgaXQgZW5mb3JjZWFibGUsIGFuZCBzdWNoIGRlY2lzaW9uIHNoYWxsCitub3QgYWZmZWN0IHRoZSBlbmZvcmNlYWJpbGl0eSBvZiBzdWNoIHByb3Zpc2lvbgordW5kZXIgb3RoZXIgY2lyY3Vtc3RhbmNlcywgb3Igb2YgdGhlIHJlbWFpbmluZworcHJvdmlzaW9ucyBoZXJlb2YgdW5kZXIgYWxsIGNpcmN1bXN0YW5jZXMuIFRoaXMKK0xpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXdzCitvZiB0aGUgU3RhdGUgb2YgV2FzaGluZ3RvbiB3aXRob3V0IHJlZ2FyZCB0bworY29uZmxpY3RzIG9mIGxhdyBwcm92aXNpb25zIGFuZCBZb3UgY29uc2VudAordG8gdGhlIGV4Y2x1c2l2ZSBqdXJpc2RpY3Rpb24gb2YgdGhlIHN0YXRlCithbmQgZmVkZXJhbCBjb3VydHMgc2l0dGluZyBpbiB0aGUgU3RhdGUgb2YKK1dhc2hpbmd0b24uIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgd2lsbCBub3QgYmUKK2dvdmVybmVkIGJ5IHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9mCitDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMsCit0aGUgYXBwbGljYXRpb24gb2Ygd2hpY2ggaXMgaGVyZWJ5IGV4cHJlc3NseQorZXhjbHVkZWQuCisKK0NvcHlyaWdodCAoQykxOTk1LTIwMDQgUmVhbE5ldHdvcmtzLCBJbmMuIGFuZC9vcgoraXRzIHN1cHBsaWVycy4gMjYwMSBFbGxpb3R0IEF2ZW51ZSwgU3VpdGUgMTAwMCwKK1NlYXR0bGUsIFdhc2hpbmd0b24gOTgxMjEgVS5TLkEuIFRoZSBTb2Z0d2FyZSBtYXkKK2luY29ycG9yYXRlIG9uZSBvciBtb3JlIG9mIHRoZSBmb2xsb3dpbmcgcGF0ZW50czoKK1UuUy4gIFBhdGVudCAjNSw5MTcsODM1OyBVLlMuIFBhdGVudCAjIDUsODU0LDg1ODsKK1UuUy4gUGF0ZW50ICMgNSw5MTcsOTU0LiAgT3RoZXIgVS5TLiBwYXRlbnRzCitwZW5kaW5nLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBSZWFsTmV0d29ya3MsCitIZWxpeCwgUmVhbEF1ZGlvLCBhbmQgUmVhbFZpZGVvIGFyZSB0cmFkZW1hcmtzCitvciByZWdpc3RlcmVkIHRyYWRlbWFya3Mgb2YgUmVhbE5ldHdvcmtzLCBJbmMuCisKK0J5IENsaWNraW5nIHRoZSAiQUNDRVBUIiBidXR0b24gYmVsb3cgeW91IGFyZQorYWdyZWVpbmcgdG8gdGhlIEhlbGl4IEROQSBUZWNobm9sb2d5IEJpbmFyeQorUmVzZWFyY2ggVXNlIExpY2Vuc2UKKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvSEtTQ1MtMjAwMSBiL2xpY2Vuc2VzL0hLU0NTLTIwMDEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJiMmFmNQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0hLU0NTLTIwMDEKQEAgLTAsMCArMSw4MCBAQAorQmVmb3JlIGRvd25sb2FkaW5nIHRoZSBTb2Z0d2FyZSBvciBEb2N1bWVudCBwcm92aWRlZCBvbiB0aGlzIFdlYiBwYWdlLCB5b3UKK3Nob3VsZCByZWFkIHRoZSBmb2xsb3dpbmcgdGVybXMgKFRlcm1zIG9mIFVzZSkuIEJ5IGRvd25sb2FkaW5nIHRoZSBTb2Z0d2FyZQorYW5kIERvY3VtZW50LCB5b3UgYXJlIGRlZW1lZCB0byBhZ3JlZSB0byB0aGVzZSB0ZXJtcy4KKworMS5UaGUgR292ZXJubWVudCBvZiB0aGUgSG9uZyBLb25nIFNwZWNpYWwgQWRtaW5pc3RyYXRpdmUgUmVnaW9uIChIS1NBUkcpIGhhcwordGhlIHJpZ2h0IHRvIGFtZW5kIG9yIHZhcnkgdGhlIHRlcm1zIHVuZGVyIHRoaXMgVGVybXMgb2YgVXNlIGZyb20gdGltZSB0byB0aW1lCithdCBpdHMgc29sZSBkaXNjcmV0aW9uLgorCisyLkJ5IHVzaW5nIHRoZSBTb2Z0d2FyZSBhbmQgRG9jdW1lbnQsIHlvdSBpcnJldm9jYWJseSBhZ3JlZSB0aGF0IHRoZSBIS1NBUkcKK21heSBmcm9tIHRpbWUgdG8gdGltZSB2YXJ5IHRoaXMgVGVybXMgb2YgVXNlIHdpdGhvdXQgZnVydGhlciBub3RpY2UgdG8geW91IGFuZAoreW91IGFsc28gaXJyZXZvY2FibHkgYWdyZWUgdG8gYmUgYm91bmQgYnkgdGhlIG1vc3QgdXBkYXRlZCB2ZXJzaW9uIG9mIHRoZQorVGVybXMgb2YgVXNlLgorCiszLllvdSBoYXZlIHRoZSBzb2xlIHJlc3BvbnNpYmlsaXR5IG9mIG9idGFpbmluZyB0aGUgbW9zdCB1cGRhdGVkIHZlcnNpb24gb2YKK3RoZSBUZXJtcyBvZiBVc2Ugd2hpY2ggaXMgYXZhaWxhYmxlIGluIHRoZSAiRGlnaXRhbCAyMSIgV2ViIHNpdGUKKyhodHRwOi8vd3d3Lm9nY2lvLmdvdi5oay9lbi9idXNpbmVzcy90ZWNoX3Byb21vdGlvbi9jY2xpL3Rlcm1zL3Rlcm1zLmh0bSkuCisKKzQuQnkgYWNjZXB0aW5nIHRoaXMgVGVybXMgb2YgVXNlLCBIS1NBUkcgc2hhbGwgZ3JhbnQgeW91IGEgbm9uLWV4Y2x1c2l2ZQorbGljZW5zZSB0byB1c2UgdGhlIFNvZnR3YXJlIGFuZCBEb2N1bWVudCBmb3IgYW55IHB1cnBvc2UsIHN1YmplY3QgdG8gY2xhdXNlIDUKK2JlbG93LgorCis1LllvdSBhcmUgbm90IGFsbG93ZWQgdG8gbWFrZSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlIGFuZCBEb2N1bWVudCBleGNlcHQgaXQKK2lzIGluY2lkZW50YWwgdG8gYW5kIG5lY2Vzc2FyeSBmb3IgdGhlIG5vcm1hbCB1c2Ugb2YgdGhlIFNvZnR3YXJlLiBZb3UgYXJlIG5vdAorYWxsb3dlZCB0byBhZGFwdCBvciBtb2RpZnkgdGhlIFNvZnR3YXJlIGFuZCBEb2N1bWVudCBvciB0byBkaXN0cmlidXRlLCBzZWxsLAorcmVudCwgb3IgbWFrZSBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYyB0aGUgU29mdHdhcmUgYW5kIERvY3VtZW50LCBpbmNsdWRpbmcKK2NvcGllcyBvciBhbiBhZGFwdGF0aW9uIG9mIHRoZW0uCisKKzYuVGhlIFNvZnR3YXJlIGFuZCBEb2N1bWVudCBhcmUgcHJvdGVjdGVkIGJ5IGNvcHlyaWdodC4gVGhlIGxpY2Vuc29ycyBvZiB0aGUKK0dvdmVybm1lbnQgb2YgSG9uZyBLb25nIFNwZWNpYWwgQWRtaW5pc3RyYXRpdmUgUmVnaW9uIGFyZSB0aGUgb3duZXJzIG9mIGFsbAorY29weXJpZ2h0IHdvcmtzIGluIHRoZSBTb2Z0d2FyZSBhbmQgRG9jdW1lbnQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKzcuWW91IHVuZGVyc3RhbmQgYW5kIGFncmVlIHRoYXQgdXNlIG9mIHRoZSBTb2Z0d2FyZSBhbmQgRG9jdW1lbnQgYXJlIGF0IHlvdXIKK3NvbGUgcmlzaywgdGhhdCBhbnkgbWF0ZXJpYWwgYW5kL29yIGRhdGEgZG93bmxvYWRlZCBvciBvdGhlcndpc2Ugb2J0YWluZWQgaW4KK3JlbGF0aW9uIHRvIHRoZSBTb2Z0d2FyZSBhbmQgRG9jdW1lbnQgaXMgYXQgeW91ciBkaXNjcmV0aW9uIGFuZCByaXNrIGFuZAordGhhdCB5b3Ugd2lsbCBiZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGFueSBkYW1hZ2UgY2F1c2VkIHRvIHlvdXIgY29tcHV0ZXIKK3N5c3RlbSBvciBsb3NzIG9mIGRhdGEgb3IgYW55IG90aGVyIGxvc3MgdGhhdCByZXN1bHRzIGZyb20gdGhlIGRvd25sb2FkIGFuZAordXNlIG9mIHRoZSBTb2Z0d2FyZSBhbmQgRG9jdW1lbnQgaW4gYW55IG1hbm5lciB3aGF0c29ldmVyLgorCis4LkluIHJlbGF0aW9uIHRvIHRoZSBTb2Z0d2FyZSBhbmQgRG9jdW1lbnQsIEhLU0FSRyBoZXJlYnkgZGlzY2xhaW1zIGFsbAord2FycmFudGllcyBhbmQgY29uZGl0aW9ucywgaW5jbHVkaW5nIGFsbCBpbXBsaWVkIHdhcnJhbnRpZXMgYW5kIGNvbmRpdGlvbnMKK29mIG1lcmNoYW50YWJpbGl0eSwgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UgYW5kIG5vbi1pbmZyaW5nZW1lbnQuCisKKzkuSEtTQVJHIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRpcmVjdCwgaW5kaXJlY3QsIGluY2lkZW50YWwsIHNwZWNpYWwgb3IKK2NvbnNlcXVlbnRpYWwgbG9zcyBvZiBhbnkga2luZCByZXN1bHRpbmcgZnJvbSB0aGUgdXNlIG9mIG9yIHRoZSBpbmFiaWxpdHkKK3RvIHVzZSB0aGUgU29mdHdhcmUgYW5kIERvY3VtZW50IGV2ZW4gaWYgSEtTQVJHIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlCitwb3NzaWJpbGl0eSBvZiBzdWNoIGxvc3MuCisKKzEwLllvdSBhZ3JlZSBub3QgdG8gc3VlIEhLU0FSRyBhbmQgYWdyZWUgdG8gaW5kZW1uaWZ5LCBkZWZlbmQgYW5kIGhvbGQKK2hhcm1sZXNzIEhLU0FSRywgaXRzIG9mZmljZXJzIGFuZCBlbXBsb3llZXMgZnJvbSBhbnkgYW5kIGFsbCB0aGlyZCBwYXJ0eQorY2xhaW1zLCBsaWFiaWxpdHksIGRhbWFnZXMgYW5kL29yIGNvc3RzIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywKK2xlZ2FsIGZlZXMpIGFyaXNpbmcgZnJvbSB5b3VyIHVzZSBvZiB0aGUgU29mdHdhcmUgYW5kIERvY3VtZW50LCB5b3VyCit2aW9sYXRpb24gb2YgdGhlIFRlcm1zIG9mIFVzZSBvciBpbmZyaW5nZW1lbnQgb2YgYW55IGludGVsbGVjdHVhbCBwcm9wZXJ0eQorb3Igb3RoZXIgcmlnaHQgb2YgYW55IHBlcnNvbiBvciBlbnRpdHkuCisKKzExLlRoZSBUZXJtcyBvZiBVc2Ugd2lsbCBiZSBnb3Zlcm5lZCBieSBhbmQgY29uc3RydWVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUKK2xhd3Mgb2YgSG9uZyBLb25nLgorCisxMi5Bbnkgd2FpdmVyIG9mIGFueSBwcm92aXNpb24gb2YgdGhlIFRlcm1zIG9mIFVzZSB3aWxsIGJlIGVmZmVjdGl2ZSBvbmx5IGlmCitpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgSEtTQVJHIG9yIGl0cyByZXByZXNlbnRhdGl2ZS4KKworMTMuSWYgZm9yIGFueSByZWFzb24gYSBjb3VydCBvZiBjb21wZXRlbnQganVyaXNkaWN0aW9uIGZpbmRzIGFueSBwcm92aXNpb24KK29yIHBvcnRpb24gb2YgdGhlIFRlcm1zIG9mIFVzZSB0byBiZSB1bmVuZm9yY2VhYmxlLCB0aGUgcmVtYWluZGVyIG9mIHRoZQorVGVybXMgb2YgVXNlIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0LgorCisxNC5UaGUgVGVybXMgb2YgVXNlIGNvbnN0aXR1dGUgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoCityZXNwZWN0IHRvIHRoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YgYW5kIHN1cGVyc2VkZXMgYW5kIHJlcGxhY2VzIGFsbCBwcmlvcgorb3IgY29udGVtcG9yYW5lb3VzIHVuZGVyc3RhbmRpbmdzIG9yIGFncmVlbWVudHMsIHdyaXR0ZW4gb3Igb3JhbCwgcmVnYXJkaW5nCitzdWNoIHN1YmplY3QgbWF0dGVyLgorCisxNS5JbiBhZGRpdGlvbiB0byB0aGUgbGljZW5jZSBncmFudGVkIGluIENsYXVzZSA0LCBIS1NBUkcgaGVyZWJ5IGdyYW50cyB5b3UKK2Egbm9uLWV4Y2x1c2l2ZSBsaW1pdGVkIGxpY2VuY2UgdG8gcmVwcm9kdWNlIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBhbmQKK0RvY3VtZW50IHdpdGggdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorKGkpICAgICBub3QgZm9yIGZpbmFuY2lhbCBnYWluIHVubGVzcyBpdCBpcyBpbmNpZGVudGFsOworKGlpKSAgICByZXByb2R1Y3Rpb24gYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgU29mdHdhcmUgYW5kIERvY3VtZW50IGluCitjb21wbGV0ZSBhbmQgdW5tb2RpZmllZCBmb3JtOyBhbmQKKyhpaWkpICAgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYW5kIERvY3VtZW50LCB5b3UgYWdyZWUgdG8gYXR0YWNoCit0aGUgVGVybXMgb2YgVXNlIGFuZCBhIHN0YXRlbWVudCB0aGF0IHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgVGVybXMgb2YgVXNlCitpcyBhdmFpbGFibGUgZnJvbSB0aGUgIk9mZmljZSBvZiB0aGUgR292ZXJubWVudCBDaGllZiBJbmZvcm1hdGlvbiBPZmZpY2VyIiBXZWIKK3NpdGUKKyhodHRwOi8vd3d3Lm9nY2lvLmdvdi5oay9lbi9idXNpbmVzcy90ZWNoX3Byb21vdGlvbi9jY2xpL3Rlcm1zL3Rlcm1zLmh0bSkuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9IUC1KREtKUkU2IGIvbGljZW5zZXMvSFAtSkRLSlJFNgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YWExNjM0Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvSFAtSkRLSlJFNgpAQCAtMCwwICsxLDc4IEBACitMaWNlbnNlIEpSRSBvciBKREsgdmVyc2lvbiA2LjAKKworVG8gZG93bmxvYWQgYW5kIGluc3RhbGwgdGhlIHNvZnR3YXJlLCBmb2xsb3cgdGhlIHN0ZXBzIGJlbG93LgorCitMRUdBTCBOT1RJQ0UgLSBSRUFEIEJFRk9SRSBET1dOTE9BRElORyBPUiBPVEhFUldJU0UgVVNJTkcgVEhJUyBTT0ZUV0FSRS4KKworQVRURU5USU9OOiBVU0UgT0YgVEhFIFNPRlRXQVJFIElTIFNVQkpFQ1QgVE8gVEhFIEhQIFNPRlRXQVJFIExJQ0VOU0UgVEVSTVMgQU5EIFNVUFBMRU1FTlRBTCBSRVNUUklDVElPTlMgU0VUIEZPUlRIIEJFTE9XLCBUSElSRCBQQVJUWSBTT0ZUV0FSRSBMSUNFTlNFIFRFUk1TIEZPVU5EIElOIFRIRSBUSElSRFBBUlRZTElDRU5TRVJFQURNRS5UWFQgRklMRSBBTkQgVEhFIFdBUlJBTlRZIERJU0NMQUlNRVIgQVRUQUNIRUQuIElGIFlPVSBETyBOT1QgQUNDRVBUIFRIRVNFIFRFUk1TIEZVTExZLCBZT1UgTUFZIE5PVCBJTlNUQUxMIE9SIE9USEVSV0lTRSBVU0UgVEhFIFNPRlRXQVJFLiBOT1RXSVRIU1RBTkRJTkcgQU5ZVEhJTkcgVE8gVEhFIENPTlRSQVJZIElOIFRISVMgTk9USUNFLCBJTlNUQUxMSU5HIE9SIE9USEVSV0lTRSBVU0lORyBUSEUgU09GVFdBUkUgSU5ESUNBVEVTIFlPVVIgQUNDRVBUQU5DRSBPRiBUSEVTRSBMSUNFTlNFIFRFUk1TLgorCitIUCBzb2Z0d2FyZSBsaWNlbnNlIHRlcm1zIGZvciBib3RoIEpSRSBhbmQgSkRLCisKK1RoZSBmb2xsb3dpbmcgdGVybXMgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBTb2Z0d2FyZS4gIEZvciB0aGUgcHVycG9zZSBvZiB0aGlzIEFncmVlbWVudCwg4oCcU29mdHdhcmXigJ0gbWVhbnMgdGhlIEphdmEgUnVudGltZSBFbnZpcm9ubWVudCAo4oCcSlJF4oCdKSBvciB0aGUgSmF2YSBEZXZlbG9wZXJzIEtpdCAo4oCcSkRL4oCdKSB5b3UgZG93bmxvYWQgaW4gY29ubmVjdGlvbiB3aXRoIHRoaXMgQWdyZWVtZW50LgorCitMaWNlbnNlIGdyYW50CitIUCBncmFudHMgeW91IGEgbGljZW5zZSB0byBVc2Ugb25lIGNvcHkgb2YgdGhlIFNvZnR3YXJlLiAiVXNlIiBtZWFucyBzdG9yaW5nLCBsb2FkaW5nLCBpbnN0YWxsaW5nLCBleGVjdXRpbmcgb3IgZGlzcGxheWluZyB0aGUgU29mdHdhcmUgZm9yIHRoZSBwdXJwb3NlIG9mIGRldmVsb3BpbmcgYW5kIHJ1bm5pbmcgSmF2YSBhcHBsZXRzIGFuZCBhcHBsaWNhdGlvbnMgb24gSmF2YSBTRS1lbmFibGVkIEhQIGNvbXB1dGVycy4gWW91IG1heSBub3QgbW9kaWZ5IHRoZSBTb2Z0d2FyZSBvciBkaXNhYmxlIGFueSBsaWNlbnNpbmcgb3IgY29udHJvbCBmZWF0dXJlcyBvZiB0aGUgU29mdHdhcmUuCisKK093bmVyc2hpcAorVGhlIFNvZnR3YXJlIGlzIG93bmVkIGFuZCBjb3B5cmlnaHRlZCBieSBIUCBvciBpdHMgdGhpcmQgcGFydHkgc3VwcGxpZXJzLiBZb3VyIGxpY2Vuc2UgY29uZmVycyBubyB0aXRsZSBvciBvd25lcnNoaXAgaW4gdGhlIFNvZnR3YXJlIGFuZCBpcyBub3QgYSBzYWxlIG9mIGFueSByaWdodHMgaW4gdGhlIFNvZnR3YXJlLiBIUCdzIHRoaXJkIHBhcnR5IHN1cHBsaWVycyBtYXkgcHJvdGVjdCB0aGVpciByaWdodHMgaW4gdGhlIGV2ZW50IG9mIGFueSB2aW9sYXRpb24gb2YgdGhlc2UgTGljZW5zZSBUZXJtcy4KKworVGhpcmQgUGFydHkgQ29kZQorU29tZSB0aGlyZC1wYXJ0eSBjb2RlIGVtYmVkZGVkIG9yIGJ1bmRsZWQgd2l0aCB0aGUgU29mdHdhcmUgaXMgbGljZW5zZWQgdG8geW91IHVuZGVyIGRpZmZlcmVudCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcyBzZXQgZm9ydGggaW4gdGhlIFRISVJEUEFSVFlMSUNFTlNFUkVBRE1FLnR4dCBmaWxlLiBJbiBhZGRpdGlvbiB0byBhbnkgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgYW55IHRoaXJkIHBhcnR5IGxpY2Vuc2UgaWRlbnRpZmllZCBpbiB0aGUgVEhJUkRQQVJUWUxJQ0VOU0VSRUFETUUudHh0IGZpbGUsIHRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGFuZCBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBwcm92aXNpb25zIGluIHRoaXMgbGljZW5zZSBzaGFsbCBhcHBseSB0byBhbGwgY29kZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIG9yIGJ1bmRsZWQgd2l0aCB0aGUgU29mdHdhcmUuCisKK1NvdXJjZSBDb2RlCitTb2Z0d2FyZSBtYXkgY29udGFpbiBzb3VyY2UgY29kZSB0aGF0LCB1bmxlc3MgZXhwcmVzc2x5IGxpY2Vuc2VkIGZvciBvdGhlciBwdXJwb3NlcywgaXMgcHJvdmlkZWQgc29sZWx5IGZvciByZWZlcmVuY2UgcHVycG9zZXMgcHVyc3VhbnQgdG8gdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZS4gU291cmNlIGNvZGUgbWF5IG5vdCBiZSByZWRpc3RyaWJ1dGVkIHVubGVzcyBleHByZXNzbHkgcHJvdmlkZWQgZm9yIGluIHRoZXNlIExpY2Vuc2UgVGVybXMuCisKK0NvcGllcyBhbmQgQWRhcHRhdGlvbnMKK1lvdSBtYXkgb25seSBtYWtlIGNvcGllcyBvciBhZGFwdGF0aW9ucyBvZiB0aGUgU29mdHdhcmUgZm9yIGFyY2hpdmFsIHB1cnBvc2VzIG9yIHdoZW4gY29weWluZyBvciBhZGFwdGF0aW9uIGlzIGFuIGVzc2VudGlhbCBzdGVwIGluIHRoZSBhdXRob3JpemVkIFVzZSBvZiB0aGUgU29mdHdhcmUuIFlvdSBtdXN0IHJlcHJvZHVjZSBhbGwgY29weXJpZ2h0IG5vdGljZXMgaW4gdGhlIG9yaWdpbmFsIFNvZnR3YXJlIG9uIGFsbCBjb3BpZXMgb3IgYWRhcHRhdGlvbnMuIFlvdSBtYXkgbm90IGNvcHkgdGhlIFNvZnR3YXJlIG9udG8gYW55IGJ1bGxldGluIGJvYXJkIG9yIHNpbWlsYXIgc3lzdGVtLgorCitObyBkaXNhc3NlbWJseSBvciBkZWNyeXB0aW9uCitZb3UgbWF5IG5vdCBkaXNhc3NlbWJsZSBvciBkZWNvbXBpbGUgdGhlIFNvZnR3YXJlIHVubGVzcyBIUCdzIHByaW9yIHdyaXR0ZW4gY29uc2VudCBpcyBvYnRhaW5lZC4gSW4gc29tZSBqdXJpc2RpY3Rpb25zLCBIUCdzIGNvbnNlbnQgbWF5IG5vdCBiZSByZXF1aXJlZCBmb3IgZGlzYXNzZW1ibHkgb3IgZGVjb21waWxhdGlvbi4gVXBvbiByZXF1ZXN0LCB5b3Ugd2lsbCBwcm92aWRlIEhQIHdpdGggcmVhc29uYWJseSBkZXRhaWxlZCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgYW55IGRpc2Fzc2VtYmx5IG9yIGRlY29tcGlsYXRpb24uIFlvdSBtYXkgbm90IGRlY3J5cHQgdGhlIFNvZnR3YXJlIHVubGVzcyBkZWNyeXB0aW9uIGlzIGEgbmVjZXNzYXJ5IHBhcnQgb2YgdGhlIG9wZXJhdGlvbiBvZiB0aGUgU29mdHdhcmUuCisKK1Rlcm1pbmF0aW9uCitIUCBtYXkgdGVybWluYXRlIHlvdXIgbGljZW5zZSB1cG9uIG5vdGljZSBmb3IgZmFpbHVyZSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlc2UgTGljZW5zZSBUZXJtcy4gVXBvbiB0ZXJtaW5hdGlvbiwgeW91IG11c3QgaW1tZWRpYXRlbHkgZGVzdHJveSB0aGUgU29mdHdhcmUsIHRvZ2V0aGVyIHdpdGggYWxsIGNvcGllcywgYWRhcHRhdGlvbnMgYW5kIG1lcmdlZCBwb3J0aW9ucyBpbiBhbnkgZm9ybS4KKworRXhwb3J0IHJlcXVpcmVtZW50cworVGhlIHNvZnR3YXJlIHlvdSBhcmUgYWJvdXQgdG8gZG93bmxvYWQgY29udGFpbnMgY3J5cHRvZ3JhcGh5IHRlY2hub2xvZ3kuIFNvbWUgY291bnRyaWVzIHJlZ3VsYXRlIHRoZSBpbXBvcnQsIHVzZSBhbmQvb3IgZXhwb3J0IG9mIGNlcnRhaW4gcHJvZHVjdHMgd2l0aCBjcnlwdG9ncmFwaHkuIEhQIG1ha2VzIG5vIGNsYWltcyBhcyB0byB0aGUgYXBwbGljYWJpbGl0eSBvZiBsb2NhbCBjb3VudHJ5IGltcG9ydCwgdXNlIGFuZC9vciBleHBvcnQgcmVndWxhdGlvbnMgaW4gcmVsYXRpb24gdG8gdGhlIGRvd25sb2FkIG9mIHRoaXMgcHJvZHVjdC4gSWYgeW91IGFyZSBsb2NhdGVkIG91dHNpZGUgdGhlIFUuUy4gYW5kIENhbmFkYSB5b3UgYXJlIGFkdmlzZWQgdG8gY29uc3VsdCB5b3VyIGxvY2FsIGNvdW50cnkgcmVndWxhdGlvbnMgdG8gaW5zdXJlIGNvbXBsaWFuY2UuCisKK1lvdSBtYXkgbm90IGV4cG9ydCBvciByZS1leHBvcnQgdGhpcyBzb2Z0d2FyZSBvciBhbnkgY29weSBvciBhZGFwdGF0aW9uIGluIHZpb2xhdGlvbiBvZiBhbnkgYXBwbGljYWJsZSBsYXdzIG9yIHJlZ3VsYXRpb25zLgorCitXaXRob3V0IGxpbWl0aW5nIHRoZSBnZW5lcmFsaXR5IG9mIHRoZSBmb3JlZ29pbmcsIGhhcmR3YXJlLCBzb2Z0d2FyZSwgdGVjaG5vbG9neSBvciBzZXJ2aWNlcyBwcm92aWRlZCB1bmRlciB0aGlzIGxpY2Vuc2UgYWdyZWVtZW50IG1heSBub3QgYmUgZXhwb3J0ZWQsIHJlZXhwb3J0ZWQsIHRyYW5zZmVycmVkIG9yIGRvd25sb2FkZWQgdG8gb3Igd2l0aGluIChvciB0byBhIG5hdGlvbmFsIHJlc2lkZW50IG9mKSBjb3VudHJpZXMgdW5kZXIgVS5TLiBlY29ub21pYyBlbWJhcmdvIGluY2x1ZGluZyB0aGUgZm9sbG93aW5nIGNvdW50cmllczoKKworQ3ViYSwgSXJhbiwgSXJhcSwgTGlieWEsIE5vcnRoIEtvcmVhLCBTdWRhbiBhbmQgU3lyaWEuCitUaGlzIGxpc3QgaXMgc3ViamVjdCB0byBjaGFuZ2UuCisKK0hhcmR3YXJlLCBzb2Z0d2FyZSwgdGVjaG5vbG9neSBvciBzZXJ2aWNlcyBtYXkgbm90IGJlIGV4cG9ydGVkLCByZWV4cG9ydGVkLCB0cmFuc2ZlcnJlZCBvciBkb3dubG9hZGVkIHRvIHBlcnNvbnMgb3IgZW50aXRpZXMgbGlzdGVkIG9uIHRoZSBVLlMuIERlcGFydG1lbnQgb2YgQ29tbWVyY2UgRGVuaWVkIFBlcnNvbnMgTGlzdCwgRW50aXR5IExpc3Qgb2YgcHJvbGlmZXJhdGlvbiBjb25jZXJuIG9yIG9uIGFueSBVLlMuIFRyZWFzdXJ5IERlcGFydG1lbnQgRGVzaWduYXRlZCBOYXRpb25hbHMgZXhjbHVzaW9uIGxpc3QsIG9yIHRvIHBhcnRpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbnZvbHZlZCBpbiB0aGUgZGV2ZWxvcG1lbnQgb3IgcHJvZHVjdGlvbiBvZiBudWNsZWFyLCBjaGVtaWNhbCwgYmlvbG9naWNhbCB3ZWFwb25zIG9yIGluIG1pc3NpbGUgdGVjaG5vbG9neSBwcm9ncmFtcyBhcyBzcGVjaWZpZWQgaW4gdGhlIFUuUy4gRXhwb3J0IEFkbWluaXN0cmF0aW9uIFJlZ3VsYXRpb25zICgxNSBDRlIgNzQ0KS4KKworQnkgYWNjZXB0aW5nIHRoaXMgbGljZW5zZSBhZ3JlZW1lbnQgeW91IGNvbmZpcm0gdGhhdCB5b3UgYXJlIG5vdCBsb2NhdGVkIGluIChvciBhIG5hdGlvbmFsIHJlc2lkZW50IG9mKSBhbnkgY291bnRyeSB1bmRlciBVLlMuIGVjb25vbWljIGVtYmFyZ28sIG5vdCBpZGVudGlmaWVkIG9uIGFueSBVLlMuIERlcGFydG1lbnQgb2YgQ29tbWVyY2UgRGVuaWVkIFBlcnNvbnMgTGlzdCwgRW50aXR5IExpc3Qgb3IgVHJlYXN1cnkgRGVwYXJ0bWVudCBEZXNpZ25hdGVkIE5hdGlvbmFscyBleGNsdXNpb24gbGlzdCwgYW5kIG5vdCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGludm9sdmVkIGluIHRoZSBkZXZlbG9wbWVudCBvciBwcm9kdWN0aW9uIG9mIG51Y2xlYXIsIGNoZW1pY2FsLCBiaW9sb2dpY2FsIHdlYXBvbnMgb3IgaW4gbWlzc2lsZSB0ZWNobm9sb2d5IHByb2dyYW1zIGFzIHNwZWNpZmllZCBpbiB0aGUgVS5TLiBFeHBvcnQgQWRtaW5pc3RyYXRpb24gUmVndWxhdGlvbnMuCisKK1UuUy4gZ292ZXJubWVudCByZXN0cmljdGVkIHJpZ2h0cworVGhlIFNvZnR3YXJlIGFuZCBhbnkgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gaGF2ZSBiZWVuIGRldmVsb3BlZCBlbnRpcmVseSBhdCBwcml2YXRlIGV4cGVuc2UuIFRoZXkgYXJlIGRlbGl2ZXJlZCBhbmQgbGljZW5zZWQgYXMgImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUiIGFzIGRlZmluZWQgaW4gREZBUlMgMjUyLjIyNy03MDEzIChPY3QgMTk4OCksIERGQVJTIDI1Mi4yMTEtNzAxNSAoTWF5IDE5OTEpIG9yIERGQVJTIDI1Mi4yMjctNzAxNCAoSnVuIDE5OTUpLCBhcyBhICJjb21tZXJjaWFsIGl0ZW0iIGFzIGRlZmluZWQgaW4gRkFSMi4xMDEoYSksIG9yIGFzICJSZXN0cmljdGVkIGNvbXB1dGVyIHNvZnR3YXJlIiBhcyBkZWZpbmVkIGluIEZBUiA1Mi4yMjctMTkgKEp1biAxOTg3KShvciBhbnkgZXF1aXZhbGVudCBhZ2VuY3kgcmVndWxhdGlvbiBvciBjb250cmFjdCBjbGF1c2UpLCB3aGljaGV2ZXIgaXMgYXBwbGljYWJsZS4gWW91IGhhdmUgb25seSB0aG9zZSByaWdodHMgcHJvdmlkZWQgZm9yIHN1Y2ggU29mdHdhcmUgYW5kIGFueSBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBieSB0aGUgYXBwbGljYWJsZSBGQVIgb3IgREZBUlMgY2xhdXNlIG9yIHRoZSBIUCBzdGFuZGFyZCBzb2Z0d2FyZSBhZ3JlZW1lbnQgZm9yIHRoZSBwcm9kdWN0IGludm9sdmVkLiBUaGUgb3duZXIgaXMgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnksIDMwMDAgSGFub3ZlciBTdHJlZXQsIFBhbG8gQWx0bywgQ2FsaWZvcm5pYSA5NDMwNC4KKworU3VwcGxlbWVudGFsIHJlc3RyaWN0aW9ucworWW91IGFja25vd2xlZGdlIHRoZSBTb2Z0d2FyZSBpcyBub3QgZGVzaWduZWQgb3IgaW50ZW5kZWQgZm9yIHVzZSBpbiBvbi1saW5lIGNvbnRyb2wgb2YgYWlyY3JhZnQsIGFpciB0cmFmZmljLCBhaXJjcmFmdCBuYXZpZ2F0aW9uLCBvciBhaXJjcmFmdCBjb21tdW5pY2F0aW9uczsgb3IgaW4gdGhlIGRlc2lnbiwgY29uc3RydWN0aW9uLCBvcGVyYXRpb24gb3IgbWFpbnRlbmFuY2Ugb2YgYW55IG51Y2xlYXIgZmFjaWxpdHkuIEhQIGRpc2NsYWltcyBhbnkgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5IG9mIGZpdG5lc3MgZm9yIHN1Y2ggdXNlcy4KKworU3VwcGxlbWVudGFsIFRlcm1zIEFwcGxpY2FibGUgdG8gSlJFIG9ubHk6CitMaWNlbnNlIHRvIERpc3RyaWJ1dGUgSlJFLiBZb3UgYXJlIGdyYW50ZWQgYSByb3lhbHR5LWZyZWUgcmlnaHQgdG8gcmVwcm9kdWNlIGFuZCBkaXN0cmlidXRlIHRoZSBKUkUsIHByb3ZpZGVkIHRoYXQgeW91IGRpc3RyaWJ1dGUgdGhlIEpSRSBjb21wbGV0ZSBhbmQgdW5tb2RpZmllZCwgb25seSBhcyBhIHBhcnQgb2YsIGFuZCBmb3IgdGhlIHNvbGUgcHVycG9zZSBvZiBydW5uaW5nIHlvdXIgSmF2YSBjb21wYXRpYmxlIGFwcGxldCBvciBhcHBsaWNhdGlvbiBpbnRvIHdoaWNoIHRoZSBKUkUgaXMgaW5jb3Jwb3JhdGVkLgorCitKYXZhIFBsYXRmb3JtIEludGVyZmFjZS4gWW91IG1heSBub3QgbW9kaWZ5IHRoZSBKYXZhIFBsYXRmb3JtIEludGVyZmFjZSAoIkpQSSIsIGlkZW50aWZpZWQgYXMgY2xhc3NlcyBjb250YWluZWQgd2l0aGluIHRoZSAiamF2YSIgcGFja2FnZSBvciBhbnkgc3VicGFja2FnZXMgb2YgdGhlICJqYXZhIiBwYWNrYWdlKSwgYnkgY3JlYXRpbmcgYWRkaXRpb25hbCBjbGFzc2VzIHdpdGhpbiB0aGUgSlBJIG9yIG90aGVyd2lzZSBjYXVzaW5nIHRoZSBhZGRpdGlvbiB0byBvciBtb2RpZmljYXRpb24gb2YgdGhlIGNsYXNzZXMgaW4gdGhlIEpQSS4gSW4gdGhlIGV2ZW50IHRoYXQgeW91IGNyZWF0ZSBhbnkgSmF2YS1yZWxhdGVkIEFQSSBhbmQgZGlzdHJpYnV0ZSBzdWNoIEFQSSB0byBvdGhlcnMgZm9yIGFwcGxldCBvciBhcHBsaWNhdGlvbiBkZXZlbG9wbWVudCwgeW91IG11c3QgcHJvbXB0bHkgcHVibGlzaCBicm9hZGx5LCBhbiBhY2N1cmF0ZSBzcGVjaWZpY2F0aW9uIGZvciBzdWNoIEFQSSBmb3IgZnJlZSB1c2UgYnkgYWxsIGRldmVsb3BlcnMgb2YgSmF2YS1iYXNlZCBzb2Z0d2FyZS4KKworWW91IG1heSBtYWtlIHRoZSBKUkUgYWNjZXNzaWJsZSB0byBhcHBsaWNhdGlvbiBwcm9ncmFtcyBkZXZlbG9wZWQgYnkgeW91IHByb3ZpZGVkIHRoYXQgdGhlIHByb2dyYW1zIGFsbG93IHN1Y2ggYWNjZXNzIG9ubHkgdGhyb3VnaCB0aGUgaW52b2NhdGlvbiBpbnRlcmZhY2Ugc3BlY2lmaWVkIGFuZCBwcm92aWRlZCB0aGF0IHlvdSBzaGFsbCBub3QgZXhwb3NlIG9yIGRvY3VtZW50IG90aGVyIGludGVyZmFjZXMgdGhhdCBwZXJtaXQgYWNjZXNzIHRvIHRoZSBKUkUuIFlvdSBzaGFsbCBub3QgYmUgcmVzdHJpY3RlZCBoZXJldW5kZXIgZnJvbSBleHBvc2luZyBvciBkb2N1bWVudGluZyBpbnRlcmZhY2VzIHRvIHNvZnR3YXJlIGNvbXBvbmVudHMgdGhhdCB1c2Ugb3IgYWNjZXNzIHRoZSBKUkUuCisKKworSSBBQ0NFUFQgQUxMIE9GIFRIRSBBQk9WRSBURVJNUy4gKgorSSBETyBOT1QgQUNDRVBUIEFMTCBPRiBUSEUgQUJPVkUgVEVSTVMuCisKKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKK0hQIOKAnEFTLUlT4oCdIHdhcnJhbnR5IHN0YXRlbWVudAorCisKK1RPIFRIRSBNQVhJTVVNIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcsIEhQIEFORCBJVFMgU1VQUExJRVJTIFBST1ZJREUgVEhFIFNPRlRXQVJFIOKAnEFTIElT4oCdIEFORCBXSVRIIEFMTCBGQVVMVFMsIEFORCBIRVJFQlkgRElTQ0xBSU0gQUxMIElOREVNTklUSUVTLCBXQVJSQU5USUVTIEFORCBDT05ESVRJT05TLCBXSEVUSEVSIEVYUFJFU1MsIElNUExJRUQsIEJZIFNUQVRVVEUsIENPTU1PTiBMQVcsIENVU1RPTSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBXQVJSQU5USUVTIE9GIFRJVExFIEFORCBOT04tSU5GUklOR0VNRU5ULCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBMQUNLIE9GIFZJUlVTRVMuICBIUCBkb2VzIG5vdCB3YXJyYW50IHRoYXQgdGhlIG9wZXJhdGlvbiBvZiB0aGUgU29mdHdhcmUgd2lsbCBiZSB1bmludGVycnVwdGVkIG9yIGVycm9yLWZyZWUgb3IgdGhhdCB0aGUgU29mdHdhcmUgd2lsbCBtZWV0IHlvdXIgcmVxdWlyZW1lbnRzLiAgU29tZSBzdGF0ZXMvanVyaXNkaWN0aW9ucyBkbyBub3QgYWxsb3cgZXhjbHVzaW9uIG9mIGltcGxpZWQgd2FycmFudGllcyBvciBsaW1pdGF0aW9uIG9uIHRoZSBkdXJhdGlvbiBvZiBpbXBsaWVkIHdhcnJhbnRpZXMsIHNvIHRoZSBhYm92ZSBkaXNjbGFpbWVyIG1heSBub3QgYXBwbHkgdG8geW91IGluIGl0cyBlbnRpcmV0eS4KKworVE8gVEhFIE1BWElNVU0gRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTCBIUCBPUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgV0hBVFNPRVZFUiBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgREFNQUdFUyBGT1IgTE9TUyBPRiBQUk9GSVRTIE9SIFJFVkVOVUVTLCBCVVNJTkVTUyBJTlRFUlJVUFRJT04sIERPV05USU1FIENPU1RTLCBGQUlMVVJFIFRPIFJFQUxJWkUgRVhQRUNURUQgU0FWSU5HUywgTE9TUywgRElTQ0xPU1VSRSwgVU5BVkFJTEFCSUxJVFkgT0YgT1IgREFNQUdFIFRPIERBVEEsIFNPRlRXQVJFIFJFU1RPUkFUSU9OLCBPUiBMT1NTIE9GIFBSSVZBQ1kgQVJJU0lORyBPVVQgT0YgT1IgSU4gQU5ZIFdBWSBSRUxBVEVEIFRPIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgU09GVFdBUkUsIE9SIE9USEVSV0lTRSBJTiBDT05ORUNUSU9OIFdJVEggQU5ZIFBST1ZJU0lPTiBPRiBUSElTIEFHUkVFTUVOVCwgRVZFTiBJRiBIUCBPUiBBTlkgU1VQUExJRVIgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBTb21lIHN0YXRlcy9qdXJpc2RpY3Rpb25zIGRvIG5vdCBhbGxvdyB0aGUgZXhjbHVzaW9uIG9yIGxpbWl0YXRpb24gb2YgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHNvIHRoZSBhYm92ZSBleGNsdXNpb24gbWF5IG5vdCBhcHBseSB0byB5b3UuCisKK0kgQUNDRVBUIEFMTCBPRiBUSEUgQUJPVkUgVEVSTVMuICoKKyBJIERPIE5PVCBBQ0NFUFQgQUxMIE9GIFRIRSBBQk9WRSBURVJNUy4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0hQTCBiL2xpY2Vuc2VzL0hQTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWQ0NGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvSFBMCkBAIC0wLDAgKzEsNDUgQEAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAtLSBIaWdoIFBlcmZvcm1hbmNlIENvbXB1dGluZyBMaW5wYWNrIEJlbmNobWFyayAoSFBMKSAgICAgICAgICAgICAgICAKKyAgICBIUEwgLSAxLjBhIC0gSmFudWFyeSAyMCwgMjAwNCAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgQW50b2luZSBQLiBQZXRpdGV0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgVW5pdmVyc2l0eSBvZiBUZW5uZXNzZWUsIEtub3h2aWxsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgSW5ub3ZhdGl2ZSBDb21wdXRpbmcgTGFib3JhdG9yaWVzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgKEMpIENvcHlyaWdodCAyMDAwLTIwMDQgQWxsIFJpZ2h0cyBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgLS0gQ29weXJpZ2h0IG5vdGljZSBhbmQgTGljZW5zaW5nIHRlcm1zOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgUmVkaXN0cmlidXRpb24gIGFuZCAgdXNlIGluICBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgbW9kaWZpY2F0aW9uLCBhcmUgIHBlcm1pdHRlZCBwcm92aWRlZCAgdGhhdCB0aGUgZm9sbG93aW5nICBjb25kaXRpb25zCisgYXJlIG1ldDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgMS4gUmVkaXN0cmlidXRpb25zICBvZiAgc291cmNlICBjb2RlICBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLiAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlICB0aGUgYWJvdmUgY29weXJpZ2h0Cisgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgMy4gQWxsICBhZHZlcnRpc2luZyAgbWF0ZXJpYWxzICBtZW50aW9uaW5nICBmZWF0dXJlcyAgb3IgIHVzZSBvZiB0aGlzCisgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OiAgICAgICAgICAgICAgICAgCisgVGhpcyAgcHJvZHVjdCAgaW5jbHVkZXMgIHNvZnR3YXJlICBkZXZlbG9wZWQgIGF0ICB0aGUgIFVuaXZlcnNpdHkgIG9mCisgVGVubmVzc2VlLCBLbm94dmlsbGUsIElubm92YXRpdmUgQ29tcHV0aW5nIExhYm9yYXRvcmllcy4gICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgNC4gVGhlIG5hbWUgb2YgdGhlICBVbml2ZXJzaXR5LCAgdGhlIG5hbWUgb2YgdGhlICBMYWJvcmF0b3J5LCAgb3IgdGhlCisgbmFtZXMgIG9mICBpdHMgIGNvbnRyaWJ1dG9ycyAgbWF5ICBub3QgIGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgcHJvZHVjdHMgIGRlcml2ZWQgICBmcm9tICAgdGhpcyAgc29mdHdhcmUgIHdpdGhvdXQgIHNwZWNpZmljICB3cml0dGVuCisgcGVybWlzc2lvbi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgLS0gRGlzY2xhaW1lcjogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgVEhJUyAgU09GVFdBUkUgIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsICBJTkNMVURJTkcsICBCVVQgTk9UCisgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBVTklWRVJTSVRZCisgT1IgIENPTlRSSUJVVE9SUyAgQkUgIExJQUJMRSBGT1IgQU5ZICBESVJFQ1QsICBJTkRJUkVDVCwgIElOQ0lERU5UQUwsCisgU1BFQ0lBTCwgIEVYRU1QTEFSWSwgIE9SICBDT05TRVFVRU5USUFMIERBTUFHRVMgIChJTkNMVURJTkcsICBCVVQgTk9UCisgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgREFUQSBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pICBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgIFNUUklDVCBMSUFCSUxJVFksICBPUiBUT1JUCisgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9saWNlbnNlcy9IUE5EIGIvbGljZW5zZXMvSFBORApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWZhMGQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvSFBORApAQCAtMCwwICsxLDQxIEBACitIaXN0b3JpY2FsIFBlcm1pc3Npb24gTm90aWNlIGFuZCBEaXNjbGFpbWVyCitodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvSFBORAorCistLS0KKworPGNvcHlyaWdodCBub3RpY2U+CisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCitkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCitwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzWyxdCitbYW5kXSB0aGF0IGJvdGggW3RoYXRdIFt0aGVdIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbgorbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb25bLCBhbmQgdGhhdCB0aGUgbmFtZSBbb2ZdCis8Y29weXJpZ2h0IGhvbGRlcj4gW29yIDxyZWxhdGVkIGVudGl0aWVzPl0gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcKK29yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dAorc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbl0uIFs8Y29weXJpZ2h0IGhvbGRlcj4gbWFrZXMKK25vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CitwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5Ll0KKworWzxjb3B5cmlnaHQgaG9sZGVyPiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUworU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQKK0ZJVE5FU1NbLF1bLl0gSU4gTk8gRVZFTlQgU0hBTEwgPGNvcHlyaWdodCBob2xkZXI+IEJFIExJQUJMRSBGT1IgQU5ZCitTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUgorUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YKK0NPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4KK0NPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuXQorCistLS0KKworRXhwbGFuYXRpb246CisKK0FuZ2xlIGJyYWNrZXRzIGhvbGQgImZpZWxkcyIsIGUuZy4gPGNvcHlyaWdodCBob2xkZXI+LgorCitTcXVhcmUgYnJhY2tldHMgaG9sZCBvcHRpb25hbCB0ZXh0LCBlLmcuIFtvciA8cmVsYXRlZCBlbnRpdGllcz5dLgorCitBIGxpY2Vuc2UgY2FuIGhhdmUgdmFyaWF0aW9ucyBpbiBjYXBpdGFsaXphdGlvbiBhbmQgd2hpdGVzcGFjZSwgYW5kCitzdGlsbCBiZSBjb25zaWRlcmVkIGFuIGluc3RhbmNlIG9mIHRoaXMgdGVtcGxhdGUuCisKK0l0IG1heSBiZSBwb3NzaWJsZSB0byBjb25zdHJ1Y3QgYSBncmFtbWF0aWNhbGx5IGluY29ycmVjdCBsaWNlbnNlIGZyb20KK3RoaXMgdGVtcGxhdGUsIG9yIG9uZSB0aGF0IGxhY2tzIGEgZGlzY2xhaW1lciwgb3Igb25lIHRoYXQgaW5jbHVkZXMgYQorZG91YmxlLWRpc2NsYWltZXIuIFRoYXQgaXMgYWNjZXB0YWJsZSwgYXMgbG9uZyBhcyBpdCByZW1haW5zIGltcG9zc2libGUKK3RvIGNvbnN0cnVjdCBhIG5vbi1PU0QtY29tcGxpYW50IGxpY2Vuc2UgdGhhdCBtYXRjaGVzIHRoZSBwYXR0ZXJuLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvSFRNTC1UaWR5IGIvbGljZW5zZXMvSFRNTC1UaWR5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlNzA0ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9IVE1MLVRpZHkKQEAgLTAsMCArMSw1MCBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDQuMDEgVHJhbnNpdGlvbmFsLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorCTx0aXRsZT5IVE1MIFRpZHkgTGljZW5zZTwvdGl0bGU+Cis8L2hlYWQ+CisKKzxib2R5PgorPHByZT4KK0hUTUwgVGlkeQorCitIVE1MIHBhcnNlciBhbmQgcHJldHR5IHByaW50ZXIKKworQ29weXJpZ2h0IChjKSAxOTk4LTIwMDMgV29ybGQgV2lkZSBXZWIgQ29uc29ydGl1bQorKE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIEV1cm9wZWFuIFJlc2VhcmNoIAorQ29uc29ydGl1bSBmb3IgSW5mb3JtYXRpY3MgYW5kIE1hdGhlbWF0aWNzLCBLZWlvIFVuaXZlcnNpdHkpLgorQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworVGhpcyBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiBpcyBwcm92aWRlZCAiYXMgaXMsIiBhbmQKK3RoZSBjb3B5cmlnaHQgaG9sZGVycyBhbmQgY29udHJpYnV0aW5nIGF1dGhvcihzKSBtYWtlIG5vCityZXByZXNlbnRhdGlvbnMgb3Igd2FycmFudGllcywgZXhwcmVzcyBvciBpbXBsaWVkLCBpbmNsdWRpbmcKK2J1dCBub3QgbGltaXRlZCB0bywgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgb3IgZml0bmVzcworZm9yIGFueSBwYXJ0aWN1bGFyIHB1cnBvc2Ugb3IgdGhhdCB0aGUgdXNlIG9mIHRoZSBzb2Z0d2FyZSBvcgorZG9jdW1lbnRhdGlvbiB3aWxsIG5vdCBpbmZyaW5nZSBhbnkgdGhpcmQgcGFydHkgcGF0ZW50cywKK2NvcHlyaWdodHMsIHRyYWRlbWFya3Mgb3Igb3RoZXIgcmlnaHRzLiAKKworVGhlIGNvcHlyaWdodCBob2xkZXJzIGFuZCBjb250cmlidXRpbmcgYXV0aG9yKHMpIHdpbGwgbm90IGJlIGhlbGQKK2xpYWJsZSBmb3IgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzCithcmlzaW5nIG91dCBvZiBhbnkgdXNlIG9mIHRoZSBzb2Z0d2FyZSBvciBkb2N1bWVudGF0aW9uLCBldmVuIGlmCithZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZS4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUKK3RoaXMgc291cmNlIGNvZGUsIG9yIHBvcnRpb25zIGhlcmVvZiwgZG9jdW1lbnRhdGlvbiBhbmQgZXhlY3V0YWJsZXMsCitmb3IgYW55IHB1cnBvc2UsIHdpdGhvdXQgZmVlLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCisxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc291cmNlIGNvZGUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQuCisyLiBBbHRlcmVkIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCBhbmQgbXVzdAorICAgbm90IGJlIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb3VyY2UuCiszLiBUaGlzIENvcHlyaWdodCBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkKKyAgIHNvdXJjZSBvciBhbHRlcmVkIHNvdXJjZSBkaXN0cmlidXRpb24uCisgCitUaGUgY29weXJpZ2h0IGhvbGRlcnMgYW5kIGNvbnRyaWJ1dGluZyBhdXRob3Iocykgc3BlY2lmaWNhbGx5CitwZXJtaXQsIHdpdGhvdXQgZmVlLCBhbmQgZW5jb3VyYWdlIHRoZSB1c2Ugb2YgdGhpcyBzb3VyY2UgY29kZQorYXMgYSBjb21wb25lbnQgZm9yIHN1cHBvcnRpbmcgdGhlIEh5cGVydGV4dCBNYXJrdXAgTGFuZ3VhZ2UgaW4KK2NvbW1lcmNpYWwgcHJvZHVjdHMuIElmIHlvdSB1c2UgdGhpcyBzb3VyY2UgY29kZSBpbiBhIHByb2R1Y3QsCithY2tub3dsZWRnbWVudCBpcyBub3QgcmVxdWlyZWQgYnV0IHdvdWxkIGJlIGFwcHJlY2lhdGVkLgorPC9wcmU+CisKKworPC9ib2R5PgorPC9odG1sPgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvSGF1cHBhdWdlLUZpcm13YXJlIGIvbGljZW5zZXMvSGF1cHBhdWdlLUZpcm13YXJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxMjJmNWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9IYXVwcGF1Z2UtRmlybXdhcmUKQEAgLTAsMCArMSwyODAgQEAKK0VORC1VU0VSIEZJUk1XQVJFIExJQ0VOU0UgQUdSRUVNRU5UCisKK0lNUE9SVEFOVCAtIFBMRUFTRSBSRUFEIEJFRk9SRSBDT1BZSU5HLCBJTlNUQUxMSU5HIE9SIFVTSU5HLgorCitEbyBub3QgdXNlIG9yIGxvYWQgdGhpcyBmaXJtd2FyZSBpbWFnZSAodGhlICJGaXJtd2FyZSIpIHVudGlsIHlvdSBoYXZlCitjYXJlZnVsbHkgcmVhZCB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLiBCeSBsb2FkaW5nIG9yIHVzaW5nCit0aGUgRmlybXdhcmUsIHlvdSBhZ3JlZSB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQuIElmIHlvdSBkbyBub3QKK3dpc2ggdG8gc28gYWdyZWUsIGRvIG5vdCBpbnN0YWxsIG9yIHVzZSB0aGUgRmlybXdhcmUuCisKK0xJQ0VOU0VFUzogUGxlYXNlIG5vdGU6CisKKyogSWYgeW91IGFyZSBhbiBFbmQtVXNlciwgb25seSB0aGUgRU5ELVVTRVIgRklSTVdBUkUgTElDRU5TRSBBR1JFRU1FTlQKKyAgYXBwbGllcyAodGhpcyBsaWNlbnNlKS4KKworKiBJZiB5b3UgYXJlIGFuIE9yaWdpbmFsIEVxdWlwbWVudCBNYW51ZmFjdHVyZXIgKE9FTSksIEluZGVwZW5kZW50CisgIEhhcmR3YXJlIFZlbmRvciAoSUhWKSwgb3IgSW5kZXBlbmRlbnQgRmlybXdhcmUgVmVuZG9yIChJU1YpLCB0aGUKKyAgT0VNL0lIVi9JU1ZGSVJNV0FSRSBMSUNFTlNFIEFHUkVFTUVOVCBhcHBsaWVzLCBhcyB3ZWxsIGFzIHRoZQorICBFTkQtVVNFUiBGSVJNV0FSRSBMSUNFTlNFIEFHUkVFTUVOVCAodGhpcyBsaWNlbnNlKS4KKworTElDRU5TRS4gWW91IG1heSBjb3B5IGFuZCB1c2UgdGhlIEZpcm13YXJlLCBzdWJqZWN0IHRvIHRoZXNlIGNvbmRpdGlvbnM6CisKKzEuIFRoaXMgRmlybXdhcmUgaXMgbGljZW5zZWQgZm9yIHVzZSBvbmx5IGluIGNvbmp1bmN0aW9uIHdpdGgKKyAgIEhhdXBwYXVnZSBjb21wb25lbnQgcHJvZHVjdHMuIFVzZSBvZiB0aGUgRmlybXdhcmUgaW4gY29uanVuY3Rpb24KKyAgIHdpdGggbm9uLUhhdXBwYXVnZSBjb21wb25lbnQgcHJvZHVjdHMgaXMgbm90IGxpY2Vuc2VkIGhlcmV1bmRlci4KKworMi4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCByZW50LCBzZWxsLCBkaXN0cmlidXRlIG9yIHRyYW5zZmVyIGFueQorICAgcGFydCBvZiB0aGUgRmlybXdhcmUgZXhjZXB0IGFzIHByb3ZpZGVkIGluIHRoaXMgQWdyZWVtZW50LCBhbmQgeW91CisgICBhZ3JlZSB0byBwcmV2ZW50IHVuYXV0aG9yaXplZCBjb3B5aW5nIG9mIHRoZSBGaXJtd2FyZS4KKworMy4gWW91IG1heSBub3QgcmV2ZXJzZSBlbmdpbmVlciwgZGVjb21waWxlLCBvciBkaXNhc3NlbWJsZSB0aGUgRmlybXdhcmUuCisKKzQuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIEZpcm13YXJlLgorCis1LiBUaGUgRmlybXdhcmUgbWF5IGNvbnRhaW4gdGhlIGZpcm13YXJlIG9yIG90aGVyIHByb3BlcnR5IG9mIHRoaXJkIHBhcnR5CisgICBzdXBwbGllcnMuCisKK1RSQURFTUFSS1MuIEV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgaGVyZWluLCB5b3Ugc2hhbGwgbm90IHVzZQorSGF1cHBhdWdlJ3MgbmFtZSBpbiBhbnkgcHVibGljYXRpb25zLCBhZHZlcnRpc2VtZW50cywgb3Igb3RoZXIKK2Fubm91bmNlbWVudHMgd2l0aG91dCBIYXVwcGF1Z2UncyBwcmlvciB3cml0dGVuIGNvbnNlbnQuIFlvdSBkbyBub3QKK2hhdmUgYW55IHJpZ2h0cyB0byB1c2UgYW55IEhhdXBwYXVnZSB0cmFkZW1hcmtzIG9yIGxvZ29zLgorCitPV05FUlNISVAgT0YgRklSTVdBUkUgQU5EIENPUFlSSUdIVFMuIFRpdGxlIHRvIGFsbCBjb3BpZXMgb2YgdGhlCitGaXJtd2FyZSByZW1haW5zIHdpdGggSGF1cHBhdWdlIG9yIGl0cyBzdXBwbGllcnMuIFRoZSBGaXJtd2FyZSBpcworY29weXJpZ2h0ZWQgYW5kIHByb3RlY3RlZCBieSB0aGUgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBhbmQgb3RoZXIKK2NvdW50cmllcywgYW5kIGludGVybmF0aW9uYWwgdHJlYXR5IHByb3Zpc2lvbnMuIFlvdSBtYXkgbm90IHJlbW92ZSBhbnkKK2NvcHlyaWdodCBub3RpY2VzIGZyb20gdGhlIEZpcm13YXJlLiBIYXVwcGF1Z2UgbWF5IG1ha2UgY2hhbmdlcyB0byB0aGUKK0Zpcm13YXJlLCBvciBpdGVtcyByZWZlcmVuY2VkIHRoZXJlaW4sIGF0IGFueSB0aW1lIHdpdGhvdXQgbm90aWNlLCBidXQKK2lzIG5vdCBvYmxpZ2F0ZWQgdG8gc3VwcG9ydCBvciB1cGRhdGUgdGhlIEZpcm13YXJlLiBFeGNlcHQgYXMKK290aGVyd2lzZSBleHByZXNzbHkgcHJvdmlkZWQsIEhhdXBwYXVnZSBncmFudHMgbm8gZXhwcmVzcyBvciBpbXBsaWVkCityaWdodCB1bmRlciBIYXVwcGF1Z2UgcGF0ZW50cywgY29weXJpZ2h0cywgdHJhZGVtYXJrcywgb3Igb3RoZXIKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMuIFlvdSBtYXkgdHJhbnNmZXIgdGhlIEZpcm13YXJlIG9ubHkgaWYgYQorY29weSBvZiB0aGlzIGxpY2Vuc2UgYWNjb21wYW5pZXMgdGhlIEZpcm13YXJlIGFuZCB0aGUgcmVjaXBpZW50IGFncmVlcwordG8gYmUgZnVsbHkgYm91bmQgYnkgdGhlc2UgdGVybXMuCisKK0VYQ0xVU0lPTiBPRiBXQVJSQU5USUVTLgorVEhFIEZJUk1XQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFBPU1NJQkxZIFdJVEggRkFVTFRTLiBVTkxFU1MKK0VYUFJFU1NMWSBBR1JFRUQgT1RIRVJXSVNFLCBIQVVQUEFVR0UgQU5EIElUUyBTVVBQTElFUlMgQU5EIExJQ0VOU09SUworRElTQ0xBSU0gQU5ZIEFORCBBTEwgV0FSUkFOVElFUyBBTkQgR1VBUkFOVEVFUywgRVhQUkVTUywgSU1QTElFRCBPUgorT1RIRVJXSVNFLCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFksIE5PTklORlJJTkdFTUVOVCwgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCitIYXVwcGF1Z2UgZG9lcyBub3Qgd2FycmFudCBvciBhc3N1bWUgcmVzcG9uc2liaWxpdHkgZm9yIHRoZSBhY2N1cmFjeQorb3IgY29tcGxldGVuZXNzIG9mIGFueSBpbmZvcm1hdGlvbiwgdGV4dCwgZ3JhcGhpY3MsIGxpbmtzIG9yIG90aGVyCitpdGVtcyBjb250YWluZWQgd2l0aGluIHRoZSBGaXJtd2FyZS4gWW91IGFzc3VtZSBhbGwgbGlhYmlsaXR5LAorZmluYW5jaWFsIG9yIG90aGVyd2lzZSwgYXNzb2NpYXRlZCB3aXRoIFlvdXIgdXNlIG9yIGRpc3Bvc2l0aW9uIG9mIHRoZQorRmlybXdhcmUuCisKK0xJTUlUQVRJT04gT0YgTElBQklMSVRZLiBJTiBOTyBFVkVOVCBTSEFMTCBIQVVQUEFVR0UgT1IgSVRTIFNVUFBMSUVSUworQU5EIExJQ0VOU09SUyBCRSBMSUFCTEUgRk9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgRlJPTSBBTlkgQ0FVU0UgT0YKK0FDVElPTiBPRiBBTlkgS0lORCAoSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIExPU1QgUFJPRklUUywKK0JVU0lORVNTIElOVEVSUlVQVElPTiwgT1IgTE9TVCBJTkZPUk1BVElPTikgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSwKK01PRElGSUNBVElPTiwgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgRklSTVdBUkUsIE9SIE9USEVSV0lTRSwgTk9SIEZPUgorUFVOSVRJVkUsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIE9SIFNQRUNJQUwgREFNQUdFUyBPRiBBTlkgS0lORCwKK0VWRU4gSUYgSEFVUFBBVUdFIE9SIElUUyBTVVBQTElFUlMgQU5EIExJQ0VOU09SUyBIQVZFIEJFRU4gQURWSVNFRCBPRgorVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gU09NRSBKVVJJU0RJQ1RJT05TIFBST0hJQklUIEVYQ0xVU0lPTgorT1IgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgRk9SIElNUExJRUQgV0FSUkFOVElFUyBPUiBDT05TRVFVRU5USUFMIE9SCitJTkNJREVOVEFMIERBTUFHRVMsIFNPIENFUlRBSU4gTElNSVRBVElPTlMgTUFZIE5PVCBBUFBMWS4gWU9VIE1BWSBBTFNPCitIQVZFIE9USEVSIExFR0FMIFJJR0hUUyBUSEFUIFZBUlkgQkVUV0VFTiBKVVJJU0RJQ1RJT05TLgorCitXQUlWRVIgQU5EIEFNRU5ETUVOVC4gTm8gbW9kaWZpY2F0aW9uLCBhbWVuZG1lbnQgb3Igd2FpdmVyIG9mIGFueQorcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGVmZmVjdGl2ZSB1bmxlc3MgaW4gd3JpdGluZyBhbmQKK3NpZ25lZCBieSBhbiBvZmZpY2VyIG9mIEhhdXBwYXVnZS4gTm8gZmFpbHVyZSBvciBkZWxheSBpbiBleGVyY2lzaW5nCithbnkgcmlnaHQsIHBvd2VyLCBvciByZW1lZHkgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgb3BlcmF0ZSBhcyBhCit3YWl2ZXIgb2YgYW55IHN1Y2ggcmlnaHQsIHBvd2VyIG9yIHJlbWVkeS4gV2l0aG91dCBsaW1pdGluZyB0aGUKK2ZvcmVnb2luZywgdGVybXMgYW5kIGNvbmRpdGlvbnMgb24gYW55IHB1cmNoYXNlIG9yZGVycyBvciBzaW1pbGFyCittYXRlcmlhbHMgc3VibWl0dGVkIGJ5IHlvdSB0byBIYXVwcGF1Z2UsIGFuZCBhbnkgdGVybXMgY29udGFpbmVkIGluCitIYXVwcGF1Z2VzIHN0YW5kYXJkIGFja25vd2xlZGdtZW50IGZvcm0gdGhhdCBhcmUgaW4gY29uZmxpY3Qgd2l0aAordGhlc2UgdGVybXMsIHNoYWxsIGJlIG9mIG5vIGZvcmNlIG9yIGVmZmVjdC4KKworU0VWRVJBQklMSVRZLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGhlbGQgYnkgYSBjb3VydCBvZgorY29tcGV0ZW50IGp1cmlzZGljdGlvbiB0byBiZSBjb250cmFyeSB0byBsYXcsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlCitjaGFuZ2VkIGFuZCBpbnRlcnByZXRlZCBzbyBhcyB0byBiZXN0IGFjY29tcGxpc2ggdGhlIG9iamVjdGl2ZXMgb2YgdGhlCitvcmlnaW5hbCBwcm92aXNpb24gdG8gdGhlIGZ1bGxlc3QgZXh0ZW50IGFsbG93ZWQgYnkgbGF3IGFuZCB0aGUKK3JlbWFpbmluZyBwcm92aXNpb25zIG9mIHRoaXMgQWdyZWVtZW50IHNoYWxsIHJlbWFpbiBpbiBmdWxsIGZvcmNlIGFuZAorZWZmZWN0LgorCitFWFBPUlQgUkVTVFJJQ1RJT05TLiBFYWNoIHBhcnR5IGFja25vd2xlZGdlcyB0aGF0IHRoZSBGaXJtd2FyZSBpcworc3ViamVjdCB0byBhcHBsaWNhYmxlIGltcG9ydCBhbmQgZXhwb3J0IHJlZ3VsYXRpb25zIG9mIHRoZSBVbml0ZWQKK1N0YXRlcyBhbmQgb2YgdGhlIGNvdW50cmllcyBpbiB3aGljaCBlYWNoIHBhcnR5IHRyYW5zYWN0cyBidXNpbmVzcywKK3NwZWNpZmljYWxseSBpbmNsdWRpbmcgVS5TLiBFeHBvcnQgQWRtaW5pc3RyYXRpb24gQWN0IGFuZCBFeHBvcnQKK0FkbWluaXN0cmF0aW9uIFJlZ3VsYXRpb25zLiBFYWNoIHBhcnR5IHNoYWxsIGNvbXBseSB3aXRoIHN1Y2ggbGF3cyBhbmQKK3JlZ3VsYXRpb25zLCBhcyB3ZWxsIGFzIGFsbCBvdGhlciBsYXdzIGFuZCByZWd1bGF0aW9ucyBhcHBsaWNhYmxlIHRvCit0aGUgRmlybXdhcmUuIFdpdGhvdXQgbGltaXRpbmcgdGhlIGdlbmVyYWxpdHkgb2YgdGhlIGZvcmVnb2luZywgZWFjaAorcGFydHkgYWdyZWVzIHRoYXQgaXQgd2lsbCBub3QgZXhwb3J0LCByZS1leHBvcnQsIHRyYW5zZmVyIG9yIGRpdmVydAorYW55IG9mIHRoZSBGaXJtd2FyZSBvciB0aGUgZGlyZWN0IHByb2dyYW1zIHRoZXJlb2YgdG8gYW55IHJlc3RyaWN0ZWQKK3BsYWNlIG9yIHBhcnR5IGluIGFjY29yZGFuY2Ugd2l0aCBVLlMuIGV4cG9ydCByZWd1bGF0aW9ucy4gTm90ZSB0aGF0CitGaXJtd2FyZSBjb250YWluaW5nIGVuY3J5cHRpb24gbWF5IGJlIHN1YmplY3QgdG8gYWRkaXRpb25hbAorcmVzdHJpY3Rpb25zLgorCitBUFBMSUNBQkxFIExBV1MuIENsYWltcyBhcmlzaW5nIHVuZGVyIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGdvdmVybmVkCitieSB0aGUgbGF3cyBvZiBOZXcgWW9yaywgZXhjbHVkaW5nIGl0cyBwcmluY2lwbGVzIG9mIGNvbmZsaWN0IG9mIGxhd3MKK2FuZCB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBTYWxlIG9mCitHb29kcy4gWW91IG1heSBub3QgZXhwb3J0IHRoZSBGaXJtd2FyZSBpbiB2aW9sYXRpb24gb2YgYXBwbGljYWJsZQorZXhwb3J0IGxhd3MgYW5kIHJlZ3VsYXRpb25zLiBIYXVwcGF1Z2UgaXMgbm90IG9ibGlnYXRlZCB1bmRlciBhbnkKK290aGVyIGFncmVlbWVudHMgdW5sZXNzIHRoZXkgYXJlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSBhbgorYXV0aG9yaXplZCByZXByZXNlbnRhdGl2ZSBvZiBIYXVwcGF1Z2UuCisKK0dPVkVSTk1FTlQgUkVTVFJJQ1RFRCBSSUdIVFMuIFRoZSBGaXJtd2FyZSBpcyBwcm92aWRlZCB3aXRoCisiUkVTVFJJQ1RFRCBSSUdIVFMuIiBVc2UsIGR1cGxpY2F0aW9uLCBvciBkaXNjbG9zdXJlIGJ5IHRoZSBHb3Zlcm5tZW50CitpcyBzdWJqZWN0IHRvIHJlc3RyaWN0aW9ucyBhcyBzZXQgZm9ydGggaW4gRkFSNTIuMjI3LTE0IGFuZAorREZBUjI1Mi4yMjctNzAxMyBldCBzZXEuIG9yIHRoZWlyIHN1Y2Nlc3NvcnMuIFVzZSBvZiB0aGUgRmlybXdhcmUgYnkKK3RoZSBHb3Zlcm5tZW50IGNvbnN0aXR1dGVzIGFja25vd2xlZGdtZW50IG9mIEhhdXBwYXVnZSdzIHByb3ByaWV0YXJ5CityaWdodHMgdGhlcmVpbi4gQ29udHJhY3RvciBvciBNYW51ZmFjdHVyZXIgaXMgSGF1cHBhdWdlIENvbXB1dGVyCitXb3JrcywgSW5jLiAgOTEgQ2Fib3QgQ291cnQgSGF1cHBhdWdlLCBOWSAxMTc4OAorCitURVJNSU5BVElPTiBPRiBUSElTIEFHUkVFTUVOVC4gSGF1cHBhdWdlIG1heSB0ZXJtaW5hdGUgdGhpcyBBZ3JlZW1lbnQKK2F0IGFueSB0aW1lIGlmIHlvdSB2aW9sYXRlIGl0cyB0ZXJtcy4gVXBvbiB0ZXJtaW5hdGlvbiwgeW91IHdpbGwKK2ltbWVkaWF0ZWx5IGRlc3Ryb3kgdGhlIEZpcm13YXJlIG9yIHJldHVybiBhbGwgY29waWVzIG9mIHRoZSBGaXJtd2FyZQordG8gSGF1cHBhdWdlLgorCisKKworT0VNL0lIVi9JU1YgRklSTVdBUkUgTElDRU5TRSBBR1JFRU1FTlQKKworSU1QT1JUQU5UIC0gUExFQVNFIFJFQUQgQkVGT1JFIElOU1RBTExJTkcgT1IgVVNJTkcgVEhJUyBGSVJNV0FSRQorCitEbyBub3QgdXNlIG9yIGxvYWQgdGhpcyBmaXJtd2FyZSBpbWFnZSAodGhlICJGaXJtd2FyZSIpIHVudGlsIHlvdSBoYXZlCitjYXJlZnVsbHkgcmVhZCB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLiBCeSBsb2FkaW5nIG9yIHVzaW5nCit0aGUgRmlybXdhcmUsIHlvdSBhZ3JlZSB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQuIElmIHlvdSBkbyBub3QKK3dpc2ggdG8gc28gYWdyZWUsIGRvIG5vdCBpbnN0YWxsIG9yIHVzZSB0aGUgRmlybXdhcmUuCisKK0xJQ0VOU0VFUzogUGxlYXNlIG5vdGU6CisKKyogSWYgeW91IGFyZSBhbiBFbmQtVXNlciwgb25seSB0aGUgRU5ELVVTRVIgRklSTVdBUkUgTElDRU5TRSBBR1JFRU1FTlQKKyAgYXBwbGllcy4KKworKiBJZiB5b3UgYXJlIGFuIE9yaWdpbmFsIEVxdWlwbWVudCBNYW51ZmFjdHVyZXIgKE9FTSksIEluZGVwZW5kZW50CisgIEhhcmR3YXJlIFZlbmRvciAoSUhWKSwgb3IgSW5kZXBlbmRlbnQgRmlybXdhcmUgVmVuZG9yIChJU1YpLCB0aGUKKyAgT0VNL0lIVi9JU1YgRklSTVdBUkUgTElDRU5TRSBBR1JFRU1FTlQgYXBwbGllcyAodGhpcyBsaWNlbnNlKSwgYXMKKyAgd2VsbCBhcyB0aGUgRU5ELVVTRVIgRklSTVdBUkUgTElDRU5TRSBBR1JFRU1FTlQuCisKK0xJQ0VOU0UuIFRoaXMgRmlybXdhcmUgaXMgbGljZW5zZWQgZm9yIHVzZSBvbmx5IGluIGNvbmp1bmN0aW9uIHdpdGgKK0hhdXBwYXVnZSBjb21wb25lbnQgcHJvZHVjdHMuIFVzZSBvZiB0aGUgRmlybXdhcmUgaW4gY29uanVuY3Rpb24gd2l0aAorbm9uLUhhdXBwYXVnZSBjb21wb25lbnQgcHJvZHVjdHMgaXMgbm90IGxpY2Vuc2VkIGhlcmV1bmRlci4gU3ViamVjdCB0bwordGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBIYXVwcGF1Z2UgZ3JhbnRzIHRvIHlvdSBhIG5vbmV4Y2x1c2l2ZSwKK25vbnRyYW5zZmVyYWJsZSwgd29ybGR3aWRlLCBmdWxseSBwYWlkLXVwIGxpY2Vuc2UgdW5kZXIgSGF1cHBhdWdlJ3MKK2NvcHlyaWdodHMgdG86IChpKSBjb3B5IHRoZSBGaXJtd2FyZSBpbnRlcm5hbGx5IGZvciB5b3VyIG93bgorZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIHB1cnBvc2VzOyAoaWkpIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlCitGaXJtd2FyZSB0byB5b3VyIGVuZC11c2VycywgYnV0IG9ubHkgdW5kZXIgYSBsaWNlbnNlIGFncmVlbWVudCB3aXRoCit0ZXJtcyBhdCBsZWFzdCBhcyByZXN0cmljdGl2ZSBhcyB0aG9zZSBjb250YWluZWQgaW4gSGF1cHBhdWdlJ3MKK0VORC1VU0VSIEZJUk1XQVJFIExJQ0VOU0UgQUdSRUVNRU5UOyBhbmQgKGlpaSkgbW9kaWZ5LCBjb3B5IGFuZAorZGlzdHJpYnV0ZSB0aGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiB3aGljaCBtYXkgYWNjb21wYW55IHRoZQorRmlybXdhcmUsIGJ1dCBvbmx5IGluIGFzc29jaWF0aW9uIHdpdGggdGhlIEZpcm13YXJlLgorCitJZiB5b3UgYXJlIG5vdCB0aGUgZmluYWwgbWFudWZhY3R1cmVyIG9yIHZlbmRvciBvZiBhIGNvbXB1dGVyIHN5c3RlbQorb3IgZmlybXdhcmUgcHJvZ3JhbSBpbmNvcnBvcmF0aW5nIHRoZSBGaXJtd2FyZSwgdGhlbiB5b3UgbWF5IHRyYW5zZmVyCithIGNvcHkgb2YgdGhlIEZpcm13YXJlLCBpbmNsdWRpbmcgYW55IHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiAobW9kaWZpZWQKK29yIHVubW9kaWZpZWQpIHRvIHlvdXIgcmVjaXBpZW50IGZvciB1c2UgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcworb2YgdGhpcyBBZ3JlZW1lbnQsIHByb3ZpZGVkIHN1Y2ggcmVjaXBpZW50IGFncmVlcyB0byBiZSBmdWxseSBib3VuZCBieQordGhlIHRlcm1zIGhlcmVvZi4gWW91IHNoYWxsIG5vdCBvdGhlcndpc2UgYXNzaWduLCBzdWJsaWNlbnNlLCBsZWFzZSwKK29yIGluIGFueSBvdGhlciB3YXkgdHJhbnNmZXIgb3IgZGlzY2xvc2UgRmlybXdhcmUgdG8gYW55IHRoaXJkCitwYXJ0eS4gWW91IG1heSBub3QsIG5vciBtYXkgeW91IGFzc2lzdCBhbnkgb3RoZXIgcGVyc29uIG9yIGVudGl0eSB0bworbW9kaWZ5LCB0cmFuc2xhdGUsIGNvbnZlcnQgdG8gYW5vdGhlciBwcm9ncmFtbWluZyBsYW5ndWFnZSwgZGVjb21waWxlLAorcmV2ZXJzZSBlbmdpbmVlciwgb3IgZGlzYXNzZW1ibGUgYW55IHBvcnRpb24gb2YgdGhlIEZpcm13YXJlIG9yCitvdGhlcndpc2UgYXR0ZW1wdCB0byBkZXJpdmUgc291cmNlIGNvZGUgZnJvbSBhbnkgb2JqZWN0IGNvZGUgbW9kdWxlcworb2YgdGhlIEZpcm13YXJlIG9yIGFueSBpbnRlcm5hbCBkYXRhIGZpbGVzIGdlbmVyYXRlZCBieSB0aGUKK0Zpcm13YXJlLiBZb3VyIHJpZ2h0cyB0byByZWRpc3RyaWJ1dGUgdGhlIEZpcm13YXJlIHNoYWxsIGJlIGNvbnRpbmdlbnQKK3Vwb24geW91ciBpbnN0YWxsYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaW4gaXRzIGVudGlyZXR5IGluIHRoZSBzYW1lCitkaXJlY3RvcnkgYXMgdGhlIEZpcm13YXJlLgorCitDT05UUkFDVE9SUy4gRm9yIHRoZSBwdXJwb3NlIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgbm90d2l0aHN0YW5kaW5nCithbnl0aGluZyB0byB0aGUgY29udHJhcnkgaGVyZXVuZGVyLCBzb2xlbHkgd2l0aCByZXNwZWN0IHRvIHRoZQorcmVxdWlyZW1lbnRzIGZvciBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIGhlcmV1bmRlciwgYW55IGNvbnRyYWN0b3JzCitvciBjb25zdWx0YW50cyB0aGF0IFlvdSB1c2UgdG8gcGVyZm9ybSB0aGUgd29yayBvciBvdGhlcndpc2UgYXNzaXN0CitZb3UgaW4gdGhlIGRldmVsb3BtZW50IG9yIHByb2R1Y3RzIHVzaW5nIHRoaXMgRmlybXdhcmUgc2hhbGwgYmUgZGVlbWVkCit0byBiZSBFbmQgVXNlcnMgYW5kIGFjY29yZGluZ2x5LCB1cG9uIHJlY2VpcHQgb2YgdGhlIEZpcm13YXJlLCBzaGFsbAorYmUgYm91bmQgYnkgdGhlIHRlcm1zIG9mIHRoZSBFTkQtVVNFUiBGSVJNV0FSRSBMSUNFTlNFIEFHUkVFTUVOVC4gTm8KK2FkZGl0aW9uYWwgYWdyZWVtZW50IGJldHdlZW4gWW91IGFuZCBzdWNoIGNvbnN1bHRhbnRzIG9yIGNvbnRyYWN0b3JzCitpcyByZXF1aXJlZCB1bmRlciB0aGlzIEFncmVlbWVudCB0byBkZXRhaWwgc3VjaCBjb21wbGlhbmNlLgorCitUUkFERU1BUktTLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIGhlcmVpbiwgeW91IHNoYWxsIG5vdCB1c2UKK0hhdXBwYXVnZSdzIG5hbWUgaW4gYW55IHB1YmxpY2F0aW9ucywgYWR2ZXJ0aXNlbWVudHMsIG9yIG90aGVyCithbm5vdW5jZW1lbnRzIHdpdGhvdXQgSGF1cHBhdWdlJ3MgcHJpb3Igd3JpdHRlbiBjb25zZW50LiBZb3UgZG8gbm90CitoYXZlIGFueSByaWdodHMgdG8gdXNlIGFueSBIYXVwcGF1Z2UgdHJhZGVtYXJrcyBvciBsb2dvcy4KKworT1dORVJTSElQIE9GIEZJUk1XQVJFIEFORCBDT1BZUklHSFRTLiBGaXJtd2FyZSBhbmQgYWNjb21wYW55aW5nCittYXRlcmlhbHMsIGlmIGFueSwgYXJlIG93bmVkIGJ5IEhhdXBwYXVnZSBvciBpdHMgc3VwcGxpZXJzIGFuZAorbGljZW5zb3JzIGFuZCBtYXkgYmUgcHJvdGVjdGVkIGJ5IGNvcHlyaWdodCwgdHJhZGVtYXJrLCBwYXRlbnQgYW5kCit0cmFkZSBzZWNyZXQgbGF3IGFuZCBpbnRlcm5hdGlvbmFsIHRyZWF0aWVzLiBBbnkgcmlnaHRzLCBleHByZXNzIG9yCitpbXBsaWVkLCBpbiB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGVtYm9kaWVkIGluIHRoZSBmb3JlZ29pbmcsIG90aGVyCit0aGFuIHRob3NlIHNwZWNpZmllZCBpbiB0aGlzIEFncmVlbWVudCwgYXJlIHJlc2VydmVkIGJ5IEhhdXBwYXVnZSBhbmQKK2l0cyBzdXBwbGllcnMgYW5kIGxpY2Vuc29ycyBvciBvdGhlcndpc2UgYXMgc2V0IGZvcnRoIGluIGFueQorYXBwbGljYWJsZSBvcGVuIHNvdXJjZSBsaWNlbnNlIGFncmVlbWVudC4gWW91IHdpbGwga2VlcCB0aGUgRmlybXdhcmUKK2ZyZWUgb2YgbGllbnMsIGF0dGFjaG1lbnRzLCBhbmQgb3RoZXIgZW5jdW1icmFuY2VzLiBZb3UgYWdyZWUgbm90IHRvCityZW1vdmUgYW55IHByb3ByaWV0YXJ5IG5vdGljZXMgYW5kL29yIGFueSBsYWJlbHMgZnJvbSB0aGUgRmlybXdhcmUgYW5kCithY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhcHByb3ZhbCBieSBIYXVwcGF1Z2UKKworRVhDTFVTSU9OIE9GIFdBUlJBTlRJRVMuCitUSEUgRklSTVdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgUE9TU0lCTFkgV0lUSCBGQVVMVFMuIFVOTEVTUworRVhQUkVTU0xZIEFHUkVFRCBPVEhFUldJU0UsIEhBVVBQQVVHRSBBTkQgSVRTIFNVUFBMSUVSUyBBTkQgTElDRU5TT1JTCitESVNDTEFJTSBBTlkgQU5EIEFMTCBXQVJSQU5USUVTIEFORCBHVUFSQU5URUVTLCBFWFBSRVNTLCBJTVBMSUVEIE9SCitPVEhFUldJU0UsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSwgTk9OSU5GUklOR0VNRU5ULCBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KK0hhdXBwYXVnZSBkb2VzIG5vdCB3YXJyYW50IG9yIGFzc3VtZSByZXNwb25zaWJpbGl0eSBmb3IgdGhlIGFjY3VyYWN5CitvciBjb21wbGV0ZW5lc3Mgb2YgYW55IGluZm9ybWF0aW9uLCB0ZXh0LCBncmFwaGljcywgbGlua3Mgb3Igb3RoZXIKK2l0ZW1zIGNvbnRhaW5lZCB3aXRoaW4gdGhlIEZpcm13YXJlLiBZb3UgYXNzdW1lIGFsbCBsaWFiaWxpdHksCitmaW5hbmNpYWwgb3Igb3RoZXJ3aXNlLCBhc3NvY2lhdGVkIHdpdGggWW91ciB1c2Ugb3IgZGlzcG9zaXRpb24gb2YgdGhlCitGaXJtd2FyZS4KKworTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuIElOIE5PIEVWRU5UIFNIQUxMIEhBVVBQQVVHRSBPUiBJVFMgU1VQUExJRVJTCitBTkQgTElDRU5TT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBGUk9NIEFOWSBDQVVTRSBPRgorQUNUSU9OIE9GIEFOWSBLSU5EIChJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgTE9TVCBQUk9GSVRTLAorQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBPUiBMT1NUIElORk9STUFUSU9OKSBBUklTSU5HIE9VVCBPRiBUSEUgVVNFLAorTU9ESUZJQ0FUSU9OLCBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBGSVJNV0FSRSwgT1IgT1RIRVJXSVNFLCBOT1IgRk9SCitQVU5JVElWRSwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgT1IgU1BFQ0lBTCBEQU1BR0VTIE9GIEFOWSBLSU5ELAorRVZFTiBJRiBIQVVQUEFVR0UgT1IgSVRTIFNVUFBMSUVSUyBBTkQgTElDRU5TT1JTIEhBVkUgQkVFTiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBTT01FIEpVUklTRElDVElPTlMgUFJPSElCSVQgRVhDTFVTSU9OCitPUiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBGT1IgSU1QTElFRCBXQVJSQU5USUVTIE9SIENPTlNFUVVFTlRJQUwgT1IKK0lOQ0lERU5UQUwgREFNQUdFUywgU08gQ0VSVEFJTiBMSU1JVEFUSU9OUyBNQVkgTk9UIEFQUExZLiBZT1UgTUFZIEFMU08KK0hBVkUgT1RIRVIgTEVHQUwgUklHSFRTIFRIQVQgVkFSWSBCRVRXRUVOIEpVUklTRElDVElPTlMuCisKK1dBSVZFUiBBTkQgQU1FTkRNRU5ULiBObyBtb2RpZmljYXRpb24sIGFtZW5kbWVudCBvciB3YWl2ZXIgb2YgYW55Citwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgZWZmZWN0aXZlIHVubGVzcyBpbiB3cml0aW5nIGFuZAorc2lnbmVkIGJ5IGFuIG9mZmljZXIgb2YgSGF1cHBhdWdlLiBObyBmYWlsdXJlIG9yIGRlbGF5IGluIGV4ZXJjaXNpbmcKK2FueSByaWdodCwgcG93ZXIsIG9yIHJlbWVkeSB1bmRlciB0aGlzIEFncmVlbWVudCBzaGFsbCBvcGVyYXRlIGFzIGEKK3dhaXZlciBvZiBhbnkgc3VjaCByaWdodCwgcG93ZXIgb3IgcmVtZWR5LiBXaXRob3V0IGxpbWl0aW5nIHRoZQorZm9yZWdvaW5nLCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvbiBhbnkgcHVyY2hhc2Ugb3JkZXJzIG9yIHNpbWlsYXIKK21hdGVyaWFscyBzdWJtaXR0ZWQgYnkgeW91IHRvIEhhdXBwYXVnZSwgYW5kIGFueSB0ZXJtcyBjb250YWluZWQgaW4KK0hhdXBwYXVnZXMgc3RhbmRhcmQgYWNrbm93bGVkZ21lbnQgZm9ybSB0aGF0IGFyZSBpbiBjb25mbGljdCB3aXRoCit0aGVzZSB0ZXJtcywgc2hhbGwgYmUgb2Ygbm8gZm9yY2Ugb3IgZWZmZWN0LgorCitTRVZFUkFCSUxJVFkuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaGVsZCBieSBhIGNvdXJ0IG9mCitjb21wZXRlbnQganVyaXNkaWN0aW9uIHRvIGJlIGNvbnRyYXJ5IHRvIGxhdywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUKK2NoYW5nZWQgYW5kIGludGVycHJldGVkIHNvIGFzIHRvIGJlc3QgYWNjb21wbGlzaCB0aGUgb2JqZWN0aXZlcyBvZiB0aGUKK29yaWdpbmFsIHByb3Zpc2lvbiB0byB0aGUgZnVsbGVzdCBleHRlbnQgYWxsb3dlZCBieSBsYXcgYW5kIHRoZQorcmVtYWluaW5nIHByb3Zpc2lvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgcmVtYWluIGluIGZ1bGwgZm9yY2UgYW5kCitlZmZlY3QuCisKK0VYUE9SVCBSRVNUUklDVElPTlMuIEVhY2ggcGFydHkgYWNrbm93bGVkZ2VzIHRoYXQgdGhlIEZpcm13YXJlIGlzCitzdWJqZWN0IHRvIGFwcGxpY2FibGUgaW1wb3J0IGFuZCBleHBvcnQgcmVndWxhdGlvbnMgb2YgdGhlIFVuaXRlZAorU3RhdGVzIGFuZCBvZiB0aGUgY291bnRyaWVzIGluIHdoaWNoIGVhY2ggcGFydHkgdHJhbnNhY3RzIGJ1c2luZXNzLAorc3BlY2lmaWNhbGx5IGluY2x1ZGluZyBVLlMuIEV4cG9ydCBBZG1pbmlzdHJhdGlvbiBBY3QgYW5kIEV4cG9ydAorQWRtaW5pc3RyYXRpb24gUmVndWxhdGlvbnMuIEVhY2ggcGFydHkgc2hhbGwgY29tcGx5IHdpdGggc3VjaCBsYXdzIGFuZAorcmVndWxhdGlvbnMsIGFzIHdlbGwgYXMgYWxsIG90aGVyIGxhd3MgYW5kIHJlZ3VsYXRpb25zIGFwcGxpY2FibGUgdG8KK3RoZSBGaXJtd2FyZS4gV2l0aG91dCBsaW1pdGluZyB0aGUgZ2VuZXJhbGl0eSBvZiB0aGUgZm9yZWdvaW5nLCBlYWNoCitwYXJ0eSBhZ3JlZXMgdGhhdCBpdCB3aWxsIG5vdCBleHBvcnQsIHJlLWV4cG9ydCwgdHJhbnNmZXIgb3IgZGl2ZXJ0Cithbnkgb2YgdGhlIEZpcm13YXJlIG9yIHRoZSBkaXJlY3QgcHJvZ3JhbXMgdGhlcmVvZiB0byBhbnkgcmVzdHJpY3RlZAorcGxhY2Ugb3IgcGFydHkgaW4gYWNjb3JkYW5jZSB3aXRoIFUuUy4gZXhwb3J0IHJlZ3VsYXRpb25zLiBOb3RlIHRoYXQKK0Zpcm13YXJlIGNvbnRhaW5pbmcgZW5jcnlwdGlvbiBtYXkgYmUgc3ViamVjdCB0byBhZGRpdGlvbmFsCityZXN0cmljdGlvbnMuCisKK0FQUExJQ0FCTEUgTEFXUy4gQ2xhaW1zIGFyaXNpbmcgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgZ292ZXJuZWQKK2J5IHRoZSBsYXdzIG9mIE5ldyBZb3JrLCBleGNsdWRpbmcgaXRzIHByaW5jaXBsZXMgb2YgY29uZmxpY3Qgb2YgbGF3cworYW5kIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIFNhbGUgb2YKK0dvb2RzLiBZb3UgbWF5IG5vdCBleHBvcnQgdGhlIEZpcm13YXJlIGluIHZpb2xhdGlvbiBvZiBhcHBsaWNhYmxlCitleHBvcnQgbGF3cyBhbmQgcmVndWxhdGlvbnMuIEhhdXBwYXVnZSBpcyBub3Qgb2JsaWdhdGVkIHVuZGVyIGFueQorb3RoZXIgYWdyZWVtZW50cyB1bmxlc3MgdGhleSBhcmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IGFuCithdXRob3JpemVkIHJlcHJlc2VudGF0aXZlIG9mIEhhdXBwYXVnZS4KKworR09WRVJOTUVOVCBSRVNUUklDVEVEIFJJR0hUUy4gVGhlIEZpcm13YXJlIGlzIHByb3ZpZGVkIHdpdGgKKyJSRVNUUklDVEVEIFJJR0hUUy4iIFVzZSwgZHVwbGljYXRpb24sIG9yIGRpc2Nsb3N1cmUgYnkgdGhlIEdvdmVybm1lbnQKK2lzIHN1YmplY3QgdG8gcmVzdHJpY3Rpb25zIGFzIHNldCBmb3J0aCBpbiBGQVI1Mi4yMjctMTQgYW5kCitERkFSMjUyLjIyNy03MDEzIGV0IHNlcS4gb3IgdGhlaXIgc3VjY2Vzc29ycy4gVXNlIG9mIHRoZSBGaXJtd2FyZSBieQordGhlIEdvdmVybm1lbnQgY29uc3RpdHV0ZXMgYWNrbm93bGVkZ21lbnQgb2YgSGF1cHBhdWdlJ3MgcHJvcHJpZXRhcnkKK3JpZ2h0cyB0aGVyZWluLiBDb250cmFjdG9yIG9yIE1hbnVmYWN0dXJlciBpcyBIYXVwcGF1Z2UgQ29tcHV0ZXIKK1dvcmtzLCBJbmMuICA5MSBDYWJvdCBDb3VydCBIYXVwcGF1Z2UsIE5ZIDExNzg4CisKK1RFUk1JTkFUSU9OIE9GIFRISVMgQUdSRUVNRU5ULiBIYXVwcGF1Z2UgbWF5IHRlcm1pbmF0ZSB0aGlzIEFncmVlbWVudAorYXQgYW55IHRpbWUgaWYgeW91IHZpb2xhdGUgaXRzIHRlcm1zLiBVcG9uIHRlcm1pbmF0aW9uLCB5b3Ugd2lsbAoraW1tZWRpYXRlbHkgZGVzdHJveSB0aGUgRmlybXdhcmUgb3IgcmV0dXJuIGFsbCBjb3BpZXMgb2YgdGhlIEZpcm13YXJlCit0byBIYXVwcGF1Z2UuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9IdWdvIGIvbGljZW5zZXMvSHVnbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjRkM2I2Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvSHVnbwpAQCAtMCwwICsxLDg4IEBACitIVUdPIExJQ0VOU0UgLSBEZWNlbWJlciAxOSwgMjAwMworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAyMDAzIGJ5IEtlbnQgVGVzc21hbgorVGhlIEdlbmVyYWwgQ29mZmVlIENvbXBhbnkgRmlsbSBQcm9kdWN0aW9ucworCisKKzEuICAgRGVmaW5pdGlvbnMKKworIkNvcHlyaWdodCBIb2xkZXIiIHJlZmVycyB0byBLZW50IFRlc3NtYW4uCisKKyJFbmQgVXNlciIgcmVmZXJzIHRvIGEgdXNlciBvZiB0aGUgU29mdHdhcmUuCisKKyJFbmQgVXNlciBQcm9ncmFtIiByZWZlcnMgdG8gYSBjb21wdXRlciBwcm9ncmFtIGNyZWF0ZWQgYnkgYW4gRW5kCitVc2VyLCB3cml0dGVuIHVzaW5nIHRoZSBIdWdvIFByb2dyYW1taW5nIExhbmd1YWdlIGFuZCBjb21waWxlZCB1c2luZwordGhlIEh1Z28gQ29tcGlsZXIuCisKKyJIdWdvIiByZWZlcnMgdG8gdGhlIEh1Z28gSW50ZXJhY3RpdmUgRmljdGlvbiBEZXZlbG9wbWVudCBTeXN0ZW0sIGNyZWF0ZWQKK2J5IHRoZSBDb3B5cmlnaHQgSG9sZGVyLgorCisiSHVnbyBQcm9ncmFtbWluZyBMYW5ndWFnZSIgcmVmZXJzIHRvIHRoZSBIdWdvIHByb2dyYW1taW5nIGxhbmd1YWdlIGFuZAoraXRzIGNoYXJhY3RlcmlzdGljIHN5bnRheC4KKworIkh1Z28gU291cmNlIENvZGUiIHJlZmVycyB0byB0aGUgaHVtYW4tcmVhZGFibGUgc291cmNlIGNvZGUgb2YgdGhlCitTb2Z0d2FyZS4KKworIkxpY2Vuc2UiIHJlZmVycyB0byB0aGlzIGxpY2Vuc2UuCisKKyJTb2Z0d2FyZSIgcmVmZXJzIHRvIHRoZSBIdWdvIENvbXBpbGVyLCB0aGUgSHVnbyBFbmdpbmUsIHRoZSBIdWdvCitEZWJ1Z2dlciwgdGhlIEh1Z28gTGlicmFyeSwgYW5kIGFueSBvdGhlciByZWxhdGVkIHByb2dyYW1zIG9yIGZpbGVzLgorCisKKzIuICAgT3duZXJzaGlwIGFuZCBHcmFudCBvZiBSaWdodHMKKworMi4xICBIdWdvIGlzIHRoZSBwcm9wZXJ0eSBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlci4gIFRoZSBDb3B5cmlnaHQgSG9sZGVyCityZXRhaW5zIGl0cyBjb3B5cmlnaHQgaW4gdGhlIFNvZnR3YXJlLCB3aXRob3V0IGxpbWl0YXRpb24uCisKKzIuMiAgVGhlIENvcHlyaWdodCBIb2xkZXIgZ3JhbnRzIHRvIHRoZSBFbmQgVXNlciB0aGUgcmlnaHQgdG8gdXNlIHRoZQorU29mdHdhcmUgc29sZWx5IGZvciB0aGUgcHVycG9zZXMgb2Y6CisKKyAgICAgKGEpIHJ1bm5pbmcgcHJvZ3JhbXMgY3JlYXRlZCB3aXRoIHRoZSBTb2Z0d2FyZTsgYW5kCisKKyAgICAgKGIpIGNyZWF0aW5nIEVuZCBVc2VyIFByb2dyYW1zLgorCisyLjMgIEVuZCBVc2VyIFByb2dyYW1zIGFyZSB0aGUgcHJvcGVydHkgb2YgdGhlIEVuZCBVc2VyLgorCisKKzMuICAgUHJvdmlzaW9uIG9mIHRoZSBIdWdvIFNvdXJjZSBDb2RlCisKKzMuMSAgVGhlIENvcHlyaWdodCBIb2xkZXIgaGFzIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSBFbmQgVXNlciB0aGUgSHVnbworU291cmNlIENvZGUgZm9yIHRoZSBwdXJwb3NlcyBvZjoKKworICAgICAoYSkgcG9ydGluZyB0aGUgU29mdHdhcmUgdG8gb3BlcmF0aW5nIHN5c3RlbXMgZm9yIHdoaWNoIHRoZQorICAgICAgICAgU29mdHdhcmUgaXMgbm90IHlldCBhdmFpbGFibGU7IGFuZAorCisgICAgIChiKSBpbnZlc3RpZ2F0aW5nIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBTb2Z0d2FyZS4KKworMy4yICBJbiBubyB3YXkgZG9lcyB0aGUgQ29weXJpZ2h0IEhvbGRlcidzIGFjdCBvZiBtYWtpbmcgYXZhaWxhYmxlIHRoZQorSHVnbyBTb3VyY2UgY29kZSByZWR1Y2Ugb3Igb3RoZXJ3aXNlIGFmZmVjdCBpbiBhbnkgd2F5IGl0cyByaWdodHMgaW4KK3RoZSBIdWdvIFNvdXJjZSBDb2RlLgorCisKKzQuICAgTW9kaWZpY2F0aW9uIGFuZCBEaXN0cmlidXRpb24KKworNC4xICBEaXN0cmlidXRpb24gb2YgdGhlIFNvZnR3YXJlIG9yIHRoZSBIdWdvIFNvdXJjZSBDb2RlLCBpbiB3aG9sZSBvcgoraW4gcGFydCwgaW4gYSBtb2RpZmllZCBmb3JtIHdpdGhvdXQgdGhlIGV4cHJlc3Mgd3JpdHRlbiBjb25zZW50IG9mIHRoZQorQ29weXJpZ2h0IEhvbGRlciBpcyBwcm9oaWJpdGVkLgorCis0LjIgIERpc3RyaWJ1dGlvbiBvZiB0aGUgU29mdHdhcmUgb3IgdGhlIEh1Z28gU291cmNlIENvZGUsIGluIHdob2xlIG9yCitpbiBwYXJ0LCBmb3IgcHJvZml0IG9yIG90aGVyIGNvbW1lcmNpYWwgaW50ZW50IG9yIG1vbmV0YXJ5IHRyYW5zYWN0aW9uCit3aXRob3V0IHRoZSBleHByZXNzIHdyaXR0ZW4gY29uc2VudCBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlciBpcworcHJvaGliaXRlZC4KKworNC4zICBUaGlzIExpY2Vuc2UgbXVzdCBiZSBkaXN0cmlidXRlZCB3aXRoIGFueSBkaXN0cmlidXRpb24gb2YgdGhlIAorU29mdHdhcmUgb3IgdGhlIEh1Z28gU291cmNlIENvZGUuCisKKworNS4gICBXYXJyYW50eQorCitUaGUgU29mdHdhcmUgYW5kIHRoZSBIdWdvIFNvdXJjZSBDb2RlIGFyZSBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQKK3dhcnJhbnR5IG9mIGFueSBraW5kLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIGluY2x1ZGluZyBidXQgbm90CitsaW1pdGVkIHRvIHRoZSBpbXBsaWVkIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRhYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhCitwYXJ0aWN1bGFyIHB1cnBvc2UuICBJbiBubyBldmVudCBzaGFsbCB0aGUgQ29weXJpZ2h0IEhvbGRlciBvciBUaGUgCitHZW5lcmFsIENvZmZlZSBDb21wYW55IEZpbG0gUHJvZHVjdGlvbnMgb3IgYW55IG90aGVyIHJlbGF0ZWQgb3IKK3VucmVsYXRlZCBwYXJ0eSBiZSBsaWFibGUgdG8gdGhlIEVuZCBVc2VyIG9yIGFueSBvdGhlciBpbmRpdmlkdWFsIG9yCitlbnRpdHkgZm9yIGRhbWFnZXMgYXJpc2luZyBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgdG8gdXNlIHRoZXNlIG9yCitvdGhlciBwcm9ncmFtcy4gIFVzZSBvZiB0aGUgU29mdHdhcmUgaW5kaWNhdGVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UKK3Rlcm1zLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvSHVsdS1FVUxBIGIvbGljZW5zZXMvSHVsdS1FVUxBCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2ODg2MmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9IdWx1LUVVTEEKQEAgLTAsMCArMSw0OSBAQAorVGVybXMgb2YgVXNlOiB3d3cuaHVsdS5jb20vdGVybXMKK1ByaXZhY3kgUG9saWN5OiB3d3cuaHVsdS5jb20vcHJpdmFjeQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0h1bHUsIExMQworCitTT0ZUV0FSRSBMSUNFTlNFIEFHUkVFTUVOVCBGT1IgSFVMVeKAmVMgREVTS1RPUCBBUFBMSUNBVElPTgorCitQTEVBU0UgUkVBRCBUSElTIFNPRlRXQVJFIExJQ0VOU0UgQUdSRUVNRU5UICgiTElDRU5TRSIpIENBUkVGVUxMWSBCRUZPUkUgVVNJTkcgVEhFIEhVTFUgU09GVFdBUkUuICBCWSBVU0lORyBUSEUgSFVMVSBTT0ZUV0FSRSwgWU9VIEFSRSBBR1JFRUlORyBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UsIERPIE5PVCBVU0UgVEhFIFNPRlRXQVJFLiAKKworCisxLiBMaWNlbnNlIC0gSW4gR2VuZXJhbC4gVGhlIHNvZnR3YXJlIGFjY29tcGFueWluZyB0aGlzIExpY2Vuc2UsIHdoZXRoZXIgb24gZGlzaywgaW4gcmVhZCBvbmx5IG1lbW9yeSwgb24gYW55IG90aGVyIG1lZGlhLCBvciBpbiBhbnkgb3RoZXIgZm9ybSAoY29sbGVjdGl2ZWx5LCB0aGUg4oCcSHVsdSBTb2Z0d2FyZSIpLCBpcyBsaWNlbnNlZCwgbm90IHNvbGQsIHRvIHlvdSBieSBIdWx1LCBMTEMgKCJIdWx1IikgZm9yIHVzZSBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBIdWx1IHJlc2VydmVzIGFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIHRvIHlvdS4gVGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbiBhcmUgbGltaXRlZCB0byBIdWx1IGFuZCBpdHMgbGljZW5zb3JzJyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGluIHRoZSBIdWx1IFNvZnR3YXJlIGFuZCBkbyBub3QgaW5jbHVkZSBhbnkgb3RoZXIgcGF0ZW50cyBvciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzLiBZb3Ugb3duIHRoZSBtZWRpYSBvbiB3aGljaCB0aGUgSHVsdSBTb2Z0d2FyZSBpcyByZWNvcmRlZCBidXQgSHVsdSBhbmQvb3IgSHVsdSdzIGxpY2Vuc29yKHMpIHJldGFpbiBvd25lcnNoaXAgb2YgdGhlIEh1bHUgU29mdHdhcmUgaXRzZWxmLiAgCisKKzIuIFBlcm1pdHRlZCBMaWNlbnNlIFVzZXMgYW5kIFJlc3RyaWN0aW9ucy4gSHVsdSBncmFudHMgeW91IGEgbGljZW5zZSB0byBpbnN0YWxsIGFuZCB1c2UgdGhlIEh1bHUgU29mdHdhcmUgb24geW91ciBwZXJzb25hbCBsYXB0b3Agb3IgZGVza3RvcCBjb21wdXRlciAo4oCcUGVyc29uYWwgQ29tcHV0ZXLigJ0pIGZvciB0aGUgc29sZSBwdXJwb3NlIG9mIHN0cmVhbWluZyBjb250ZW50IHRoYXQgaXMgYXZhaWxhYmxlIG9uIEh1bHXigJlzIHNpdGUgbG9jYXRlZCBhdCB3d3cuaHVsdS5jb20gKOKAnEh1bHUgQ29udGVudOKAnSkgb24geW91ciBQZXJzb25hbCBDb21wdXRlci4gIFlvdSBtYXkgbm90IGRvd25sb2FkLCBpbnN0YWxsIG9yIHVzZSB0aGUgSHVsdSBTb2Z0d2FyZSBvbiBhbnkgZGV2aWNlIG90aGVyIHRoYW4gYSBQZXJzb25hbCBDb21wdXRlciBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGRpZ2l0YWwgbWVkaWEgcmVjZWl2ZXIgZGV2aWNlcyAoc3VjaCBhcyBBcHBsZSBUViksIG1vYmlsZSBkZXZpY2VzIChzdWNoIGFzIGEgY2VsbCBwaG9uZSBkZXZpY2UsIG1vYmlsZSBoYW5kaGVsZCBkZXZpY2Ugb3IgYSBQREEpLCBuZXR3b3JrIGRldmljZXMgb3IgQ0UgZGV2aWNlcyAoY29sbGVjdGl2ZWx5IOKAnFByb2hpYml0ZWQgRGV2aWNlc+KAnSkuIFlvdSBtYXkgbm90IHVzZSBhbnkgaGFyZHdhcmUsIHNvZnR3YXJlIG9yIHNlcnZpY2Ugb3RoZXIgdGhhbiB0aGUgSHVsdSBTb2Z0d2FyZSB0byBzdHJlYW0sIHJlLWVuY29kZSwgcHJvamVjdCBvciB0cmFuc21pdCBIdWx1IENvbnRlbnQuICBFeGNlcHQgYXMgbWF5IGJlIHJlcXVpcmVkIGJ5IGxhdywgeW91IG1heSBub3QgdXNlIGhhcmR3YXJlLCBzb2Z0d2FyZSwgYSBkZXZpY2UsIGEgc2VydmljZSBvciBhbnkgb3RoZXIgbWVhbnMgdG8gY2F1c2UgdGhlIEh1bHUgU29mdHdhcmU6ICAoYSkgdG8gc3RyZWFtIG9yIHRyYW5zbWl0IEh1bHUgQ29udGVudCB0byBhbnkgUHJvaGliaXRlZCBEZXZpY2VzOyAoYikgdG8gc3RyZWFtIG9yIHRyYW5zbWl0IG1vZGlmaWVkIG9yIGZyYW1lZCBIdWx1IENvbnRlbnQ7IChjKSBub3QgdG8gc3RyZWFtIG9yIHRyYW5zbWl0IGFueSBIdWx1IG9yIHRoaXJkIHBhcnR5IGFkdmVydGlzaW5nLCBIdWx1IHVzZXIgaW50ZXJmYWNlIG9yIG90aGVyIGNvbnRlbnQgdGhhdCBIdWx1IGRpc3BsYXlzIGluIHRoZSBhcHBsaWNhdGlvbiBhbG9uZyB3aXRoIGEgSHVsdSB2aWRlbzsgb3IgKGQpIHRvIHN0cmVhbSBvciB0cmFuc21pdCBIdWx1IENvbnRlbnQgdG8gYSB0aGlyZCBwYXJ0eSB3ZWJzaXRlLiAgWW91IG1heSBub3QgbWFrZSB0aGUgSHVsdSBTb2Z0d2FyZSBhdmFpbGFibGUgb3ZlciBhIG5ldHdvcmsgd2hlcmUgaXQgY291bGQgYmUgdXNlZCBieSBtdWx0aXBsZSBjb21wdXRlcnMgYXQgdGhlIHNhbWUgdGltZS4gWW91IG1heSBtYWtlIG9uZSBjb3B5IG9mIHRoZSBIdWx1IFNvZnR3YXJlIGluIG1hY2hpbmUtcmVhZGFibGUgZm9ybSBmb3IgYmFja3VwIHB1cnBvc2VzIG9ubHk7IHByb3ZpZGVkIHRoYXQgdGhlIGJhY2t1cCBjb3B5IG11c3QgaW5jbHVkZSBhbGwgY29weXJpZ2h0IG9yIG90aGVyIHByb3ByaWV0YXJ5IG5vdGljZXMgY29udGFpbmVkIG9uIHRoZSBvcmlnaW5hbC4gRXhjZXB0IGFzIGFuZCBvbmx5IHRvIHRoZSBleHRlbnQgZXhwcmVzc2x5IHBlcm1pdHRlZCBpbiB0aGlzIExpY2Vuc2Ugb3IgYnkgYXBwbGljYWJsZSBsYXcsIHlvdSBtYXkgbm90IGNvcHksIGRlY29tcGlsZSwgcmV2ZXJzZSBlbmdpbmVlciwgZGlzYXNzZW1ibGUsIG1vZGlmeSwgb3IgY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIEh1bHUgU29mdHdhcmUgb3IgYW55IHBhcnQgdGhlcmVvZi4gWW91IG1heSBub3QgcmVudCwgbGVhc2UsIGxlbmQsIHNlbGwgb3IgaGF2ZSBzb2xkLCBkaXN0cmlidXRlLCBvciBzdWJsaWNlbnNlIHRoZSBIdWx1IFNvZnR3YXJlIGVpdGhlciBhbG9uZSBvciBpbiBjb21iaW5hdGlvbiB3aXRoIGFueSBvdGhlciBwcm9kdWN0IG9yIHNlcnZpY2UuIFlvdSBzaGFsbCBub3QgdXNlIHRoZSBIdWx1IFNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSBvdGhlciB0aGFuIGlzIHBlcm1pdHRlZCBieSBIdWx1IGhlcmVpbi4gIFRIRSBIVUxVIFNPRlRXQVJFIElTIE5PVCBJTlRFTkRFRCBGT1IgVVNFIElOIFRIRSBPUEVSQVRJT04gT0YgTlVDTEVBUiBGQUNJTElUSUVTLCBBSVJDUkFGVCBOQVZJR0FUSU9OIE9SIENPTU1VTklDQVRJT04gU1lTVEVNUywgQUlSIFRSQUZGSUMgQ09OVFJPTCBTWVNURU1TLCBMSUZFIFNVUFBPUlQgTUFDSElORVMsIE9SIE9USEVSIEVRVUlQTUVOVCBJTiBXSElDSCBUSEUgRkFJTFVSRSBPRiBUSEUgSFVMVSBTT0ZUV0FSRSBDT1VMRCBMRUFEIFRPIERFQVRILCBQRVJTT05BTCBJTkpVUlksIE9SIFNFVkVSRSBQSFlTSUNBTCBPUiBFTlZJUk9OTUVOVEFMIERBTUFHRS4KKworMy4gTm8gRnJhbWluZyBvZiBIdWx1IENvbnRlbnQgLyBObyBVbmF1dGhvcml6ZWQgTGlua2luZyB0byBIdWx1IENvbnRlbnQuICBZb3UgcmVwcmVzZW50IGFuZCB3YXJyYW50IHRoYXQgeW91IHdpbGwgbm90IGVuZ2FnZSBpbiBhbnkgZnJhbWluZyBvZiBvciB1bmF1dGhvcml6ZWQgbGlua2luZyB0byBIdWx1IENvbnRlbnQuICBXaXRob3V0IGxpbWl0aW5nIHRoZSBnZW5lcmFsaXR5IG9mIHRoZSBmb3JlZ29pbmcsIHlvdSB1bmRlcnN0YW5kIGFuZCBhZ3JlZSB0aGF0IHlvdSBtYXkgbm90IGNhdXNlIHRoZSBIdWx1IFNvZnR3YXJlIHRvOiAgKGEpIGRpc3BsYXkgSHVsdSB2aWRlb3MgaW4gZnVsbCBzY3JlZW4gbW9kZSB3aXRob3V0IGFsc28gZGlzcGxheWluZyBhbnkgY29udGVudCB0aGF0IEh1bHUgbWFrZXMgYXZhaWxhYmxlIGFsb25nIHdpdGggdGhlIHZpZGVvIHdoaWxlIGl0IGlzIGluIGZ1bGwgc2NyZWVuIG1vZGUgKGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIEh1bHUgdXNlciBpbnRlcmZhY2UpLCBvciAoYikgcHJldmVudCB1c2VycyBmcm9tIHZpZXdpbmcgb3IgYWNjZXNzaW5nIGFueSBjb250ZW50IChpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSBIdWx1IHVzZXIgaW50ZXJmYWNlKSB0aGF0IEh1bHUgZGlzcGxheXMgaW4gdGhlIGFwcGxpY2F0aW9uIGFsb25nIHdpdGggYSBIdWx1IHZpZGVvLgorCis0LiAgU29mdHdhcmUgVXBncmFkZXMgYW5kIExpY2Vuc2UgUmV2aXNpb25zLiAgSHVsdSBtYXkgbWFrZSBhdmFpbGFibGUgc29mdHdhcmUgdXBncmFkZXMgZnJvbSB0aW1lIHRvIHRpbWUuICBZb3UgbWF5IGVsZWN0IHRvIHJlY2VpdmUgdXBncmFkZXMgYXV0b21hdGljYWxseSBvciBiZSBub3RpZmllZCBvZiB0aGUgYXZhaWxhYmlsaXR5IG9mIGFuIHVwZ3JhZGUgYW5kIGdpdmVuIHRoZSBvcHBvcnR1bml0eSB0byBhY2NlcHQgb3IgZGVjbGluZSB0aGUgdXBncmFkZS4gIElmIHlvdSBkZWNsaW5lIGFuIHVwZ3JhZGUsIHlvdSBtYXkgYmUgdW5hYmxlIHRvIGFjY2VzcyBzb21lIG9yIGFsbCBvZiB0aGUgU2VydmljZXMgdXNpbmcgdGhlIEh1bHUgU29mdHdhcmUgb3IgeW91ciB1c2Ugb2YgdGhlIFNlcnZpY2VzIG90aGVyd2lzZSBtYXkgYmUgYWR2ZXJzZWx5IGFmZmVjdGVkLiAgICAKKworVGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aWxsIGdvdmVybiBhbnkgc29mdHdhcmUgdXBncmFkZXMgcHJvdmlkZWQgYnlIdWx1LCB1bmxlc3MgdGhlIHVwZ3JhZGUgaXMgYWNjb21wYW5pZWQgYnkgYSBzZXBhcmF0ZSBsaWNlbnNlIGluIHdoaWNoIGNhc2UgdGhlIHRlcm1zIG9mIHRoYXQgbGljZW5zZSB3aWxsIGdvdmVybi4gIAorCitFdmVuIGlmIHlvdSBlbGVjdCB0byByZWNlaXZlIHNvZnR3YXJlIHVwZGF0ZXMgYXV0b21hdGljYWxseSB3aXRob3V0IG5vdGljZSB5b3Ugd2lsbCBzdGlsbCBiZSBub3RpZmllZCBvZiBhbnkgY2hhbmdlcyB0byB0aGUgTGljZW5zZSBhbmQgcmVxdWlyZWQgdG8gYWNjZXB0IHRob3NlIGNoYW5nZXMgKG9yLCBhcyBhcHBsaWNhYmxlLCBhIHNlcGFyYXRlIGxpY2Vuc2UpIHRvIGNvbnRpbnVlIHVzaW5nIHRoZSBIdWx1IFNvZnR3YXJlIHRvIGFjY2VzcyB0aGUgU2VydmljZXMuICAKKworNS4gQ29uc2VudCB0byBVc2Ugb2YgRGF0YS4gWW91IGFncmVlIHRoYXQgSHVsdSBhbmQgaXRzIHN1YnNpZGlhcmllcyBtYXkgY29sbGVjdCBhbmQgdXNlIHRlY2huaWNhbCBhbmQgcmVsYXRlZCBpbmZvcm1hdGlvbiBhYm91dCB5b3VyIGNvbXB1dGVyLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHN5c3RlbSBhbmQgYXBwbGljYXRpb24gc29mdHdhcmUgYW5kIHBlcmlwaGVyYWxzIHRoYXQgeW91IHVzZSB0byBhY2Nlc3MgdGhlIFNlcnZpY2VzLiBUaGlzIGluZm9ybWF0aW9uIGlzIGdhdGhlcmVkIHRvIGZhY2lsaXRhdGUgdGhlIHByb3Zpc2lvbiBvZiBzb2Z0d2FyZSB1cGRhdGVzLCBwcm9kdWN0IHN1cHBvcnQsIGFuZCBvdGhlciBzZXJ2aWNlcyB0byB5b3UgKGlmIGFueSkgcmVsYXRlZCB0byB0aGUgSHVsdSBTb2Z0d2FyZS4gSHVsdSBtYXkgdXNlIHRoaXMgaW5mb3JtYXRpb24gdG8gaW1wcm92ZSBvdXIgcHJvZHVjdHMgb3IgdG8gcHJvdmlkZSBzZXJ2aWNlcyBvciB0ZWNobm9sb2dpZXMgdG8geW91LgorCis2LiBIdWx1IFNlcnZpY2UuIFRoZSBIdWx1IFNvZnR3YXJlIGVuYWJsZXMgeW91IHRvIHN0cmVhbSBIdWx1IENvbnRlbnQgb24geW91ciBQZXJzb25hbCBDb21wdXRlciAodGhlICJTZXJ2aWNlcyIpLiBVc2Ugb2YgdGhlIFNlcnZpY2VzIHJlcXVpcmVzIHlvdSB0byBoYXZlIEludGVybmV0IGFjY2VzcyBhbmQgYWNjZXB0IEh1bHXigJlzIFRlcm1zIG9mIFNlcnZpY2UgKHd3dy5odWx1LmNvbS90ZXJtcykgYW5kIFByaXZhY3kgUG9saWN5ICh3d3cuaHVsdS5jb20vcHJpdmFjeSkuCisKK1lvdSBhZ3JlZSB0aGF0IHRoZSBTZXJ2aWNlcyBjb250YWluIGluZm9ybWF0aW9uIGFuZCBtYXRlcmlhbCB0aGF0IGlzIG93bmVkIGJ5IEh1bHUgYW5kL29yIGl0cyBsaWNlbnNvcnMsIGFuZCBpcyBwcm90ZWN0ZWQgYnkgYXBwbGljYWJsZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgYW5kIG90aGVyIGxhd3MsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gY29weXJpZ2h0LCB0cmFkZW1hcmsgYW5kIHBhdGVudCwgYW5kIHRoYXQgeW91IHdpbGwgbm90IHVzZSBzdWNoIHByb3ByaWV0YXJ5IGluZm9ybWF0aW9uIG9yIG1hdGVyaWFscyBpbiBhbnkgd2F5IHdoYXRzb2V2ZXIgZXhjZXB0IGZvciBwZXJtaXR0ZWQgdXNlIG9mIHRoZSBTZXJ2aWNlcy4gTm8gcG9ydGlvbiBvZiB0aGUgU2VydmljZXMgbWF5IGJlIHJlcHJvZHVjZWQgaW4gYW55IGZvcm0gb3IgYnkgYW55IG1lYW5zLiBZb3UgYWdyZWUgbm90IHRvIG1vZGlmeSwgcmVudCwgbGVhc2UsIGxvYW4sIHNlbGwsIGRpc3RyaWJ1dGUsIG9yIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBTZXJ2aWNlcywgaW4gYW55IG1hbm5lciwgYW5kIHlvdSBzaGFsbCBub3QgZXhwbG9pdCB0aGUgU2VydmljZXMgaW4gYW55IHVuYXV0aG9yaXplZCB3YXkgd2hhdHNvZXZlciwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bywgdHJlc3Bhc3Npbmcgb24gdGhlIFNlcnZpY2VzIG9yIGJ1cmRlbmluZyBuZXR3b3JrIGNhcGFjaXR5LiAKKworSHVsdSBhbmQgaXRzIGxpY2Vuc29ycyByZXNlcnZlIHRoZSByaWdodCB0byBjaGFuZ2UsIHN1c3BlbmQsIHJlbW92ZSwgb3IgZGlzYWJsZSBhY2Nlc3MgdG8gdGhlIFNlcnZpY2VzIGF0IGFueSB0aW1lIHdpdGhvdXQgbm90aWNlLiBJbiBubyBldmVudCB3aWxsIEh1bHUgYmUgbGlhYmxlIGZvciB0aGUgcmVtb3ZhbCBvZiBvciBkaXNhYmxpbmcgb2YgYWNjZXNzIHRvIHRoZSBTZXJ2aWNlcy4gSHVsdSBtYXkgYWxzbyBpbXBvc2UgbGltaXRzIG9uIHRoZSB1c2Ugb2Ygb3IgYWNjZXNzIHRvIHRoZSBTZXJ2aWNlcyB3aXRob3V0IG5vdGljZSBvciBsaWFiaWxpdHkuIAorCis3LiBObyBDb21tZXJjaWFsIFVzZS4gIFRoZSBIdWx1IFNvZnR3YXJlIGlzIGxpY2Vuc2VkIHRvIHlvdSBzb2xlbHkgZm9yIHlvdXIgcGVyc29uYWwgdXNlIGFuZCBtYXkgbm90IGJlIHVzZWQgaW4gY29ubmVjdGlvbiB3aXRoIGFueSBjb21tZXJjaWFsIGVuZGVhdm9ycywgZXhjZXB0IHRob3NlIHRoYXQgYXJlIHNwZWNpZmljYWxseSBhdXRob3JpemVkIGluIHdyaXRpbmcgYnkgSHVsdS4gIAorCis4LiBUZXJtaW5hdGlvbi4gVGhpcyBMaWNlbnNlIGlzIGVmZmVjdGl2ZSB1bnRpbCB0ZXJtaW5hdGVkLiBZb3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2Ugd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB3aXRob3V0IG5vdGljZSBmcm9tIEh1bHUgaWYgeW91IGZhaWwgdG8gY29tcGx5IHdpdGggYW55IHRlcm0ocykgb2YgdGhpcyBMaWNlbnNlLiBVcG9uIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UsIHlvdSBzaGFsbCBjZWFzZSBhbGwgdXNlIG9mIHRoZSBTZXJ2aWNlcyBhbmQgZGVsZXRlIHRoZSB2ZXJzaW9uKHMpIG9mIHRoZSBIdWx1IFNvZnR3YXJlIGluc3RhbGxlZCBvbiB5b3VyIFBlcnNvbmFsIENvbXB1dGVyIGFuZCBkZXN0cm95IGFsbCBjb3BpZXMsIGZ1bGwgb3IgcGFydGlhbCwgb2YgdGhlIEh1bHUgU29mdHdhcmUuICBUaGUgZm9sbG93aW5nIFNlY3Rpb25zIG9mIHRoaXMgTGljZW5zZSB3aWxsIHN1cnZpdmUgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZTogU2VjdGlvbiA5IHRocm91Z2ggU2VjdGlvbiAxMC4KKworOS4gRGlzY2xhaW1lciBvZiBXYXJyYW50aWVzLiBZT1UgRVhQUkVTU0xZIEFDS05PV0xFREdFIEFORCBBR1JFRSBUSEFUIFVTRSBPRiBUSEUgSFVMVSBTT0ZUV0FSRSBBTkQgVEhFIFNFUlZJQ0VTIElTIEFUIFlPVVIgU09MRSBSSVNLIEFORCBUSEFUIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBRVUFMSVRZLCBQRVJGT1JNQU5DRSwgQUNDVVJBQ1ksIEFORCBFRkZPUlQgSVMgV0lUSCBZT1UuIFRIRSBIVUxVIFNPRlRXQVJFIEFORCBTRVJWSUNFUyBBUkUgUFJPVklERUQgIkFTIElTIiwgV0lUSCBBTEwgRkFVTFRTIEFORCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBBTkQgSFVMVSBBTkQgSFVMVSdTIExJQ0VOU09SUyAoQ09MTEVDVElWRUxZIFJFRkVSUkVEIFRPIEFTICJIVUxVIiBGT1IgVEhFIFBVUlBPU0VTIE9GIFNFQ1RJT04gOSkgSEVSRUJZIERJU0NMQUlNIEFMTCBXQVJSQU5USUVTIEFORCBDT05ESVRJT05TIFdJVEggUkVTUEVDVCBUTyBUSEUgSFVMVSBTT0ZUV0FSRSBBTkQgVEhFIFNFUlZJQ0VTLCBFSVRIRVIgRVhQUkVTUywgSU1QTElFRCwgT1IgU1RBVFVUT1JZLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBBTkQvT1IgQ09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFksIE9GIFNBVElTRkFDVE9SWSBRVUFMSVRZLCBPRiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT0YgQUNDVVJBQ1ksIE9GIFFVSUVUIEVOSk9ZTUVOVCwgQU5EIE5PTi1JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkgUklHSFRTLiBIVUxVIERPRVMgTk9UIFdBUlJBTlQgQUdBSU5TVCBUSEUgSU5URVJGRVJFTkNFIFdJVEggWU9VUiBFTkpPWU1FTlQgT0YgVEhFIEhVTFUgU09GVFdBUkUgT1IgU0VSVklDRVMgVEhBVCBUSEUgRlVOQ1RJT05TIENPTlRBSU5FRCBJTiBUSEUgSFVMVSBTT0ZUV0FSRSBPUiBTRVJWSUNFUyBXSUxMIE1FRVQgWU9VUiBSRVFVSVJFTUVOVFMsIFRIQVQgVEhFIE9QRVJBVElPTiBPRiBUSEUgSFVMVSBTT0ZUV0FSRSBPUiBUSEUgU0VSVklDRVMgV0lMTCBCRSBVTklOVEVSUlVQVEVEIE9SIEVSUk9SLUZSRUUsIE9SIFRIQVQgREVGRUNUUyBJTiBUSEUgSFVMVSBTT0ZUV0FSRSBPUiBUSEUgU0VSVklDRVMgV0lMTCBCRSBDT1JSRUNURUQuIEhVTFUgQUdFTlRTLCBFTVBMT1lFRVMsIENPTlRSQUNUT1JTLCBMSUNFTlNPUlMgQU5EIFJFUFJFU0VOVEFUSVZFUyBBUkUgTk9UIEFVVEhPUklaRUQgVE8gR0lWRSBPUkFMIE9SIFdSSVRURU4gUkVQUkVTRU5UQVRJT05TLCBJTkZPUk1BVElPTiBPUiBBRFZJQ0UgT04gSFVMVeKAmVMgQkVIQUxGLCBBTkQgSUYgWU9VIEFSRSBHSVZFTiBTVUNIIFJFUFJFU0VOVEFUSU9OUywgSU5GT1JNQVRJT04gT1IgQURWSUNFLCBJVCBTSEFMTCBOT1QgQ1JFQVRFIEEgV0FSUkFOVFkuIFNIT1VMRCBUSEUgSFVMVSBTT0ZUV0FSRSBPUiBUSEUgU0VSVklDRVMgUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBFTlRJUkUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMgT1IgTElNSVRBVElPTlMgT04gQVBQTElDQUJMRSBTVEFUVVRPUlkgUklHSFRTIE9GIEEgQ09OU1VNRVIsIFNPIFRIRSBBQk9WRSBFWENMVVNJT04gQU5EIExJTUlUQVRJT05TIE1BWSBOT1QgQVBQTFkgVE8gWU9VLiAgCisKKzEwLiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gVE8gVEhFIEVYVEVOVCBOT1QgUFJPSElCSVRFRCBCWSBMQVcsIElOIE5PIEVWRU5UIFNIQUxMIEhVTFUgQU5EIElUUyBMSUNFTlNPUlMgQkUgTElBQkxFIEZPUiBQRVJTT05BTCBJTkpVUlksIE9SIEFOWSBJTkNJREVOVEFMLCBTUEVDSUFMLCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIFdIQVRTT0VWRVIsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIFBST0ZJVFMsIExPU1MgT0YgREFUQSwgQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBPUiBBTlkgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgQVJJU0lORyBPVVQgT0YgT1IgUkVMQVRFRCBUTyBZT1VSIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBIVUxVIFNPRlRXQVJFIE9SIFNFUlZJQ0VTIEhPV0VWRVIgQ0FVU0VELCBSRUdBUkRMRVNTIE9GIFRIRSBUSEVPUlkgT0YgTElBQklMSVRZIChDT05UUkFDVCwgVE9SVCwgT1IgT1RIRVJXSVNFKSBFVkVOIElGIEhVTFUgQU5EIElUUyBMSUNFTlNPUlMgSEFWRSBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgRk9SIFBFUlNPTkFMIElOSlVSWSwgT1IgT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRISVMgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4gSW4gbm8gZXZlbnQgc2hhbGwgSHVsdSBhbmQgaXRzIGxpY2Vuc29yc+KAmSB0b3RhbCBsaWFiaWxpdHkgdG8geW91IGZvciBhbGwgZGFtYWdlcyAob3RoZXIgdGhhbiBhcyBtYXkgYmUgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgaW4gY2FzZXMgaW52b2x2aW5nIHBlcnNvbmFsIGluanVyeSBvciBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcykgZXhjZWVkIHRoZSBhbW91bnQgb2YgZmlmdHkgZG9sbGFycyAoJDUwLjAwKS4gVGhlIGZvcmVnb2luZyBsaW1pdGF0aW9ucyB3aWxsIGFwcGx5IGV2ZW4gaWYgdGhlIGFib3ZlIHN0YXRlZCByZW1lZHkgZmFpbHMgb2YgaXRzIGVzc2VudGlhbCBwdXJwb3NlLiAKKworMTEuIEV4cG9ydCBDb250cm9sLiBZb3UgbWF5IG5vdCB1c2Ugb3Igb3RoZXJ3aXNlIGV4cG9ydCBvciByZS1leHBvcnQgdGhlIEh1bHUgU29mdHdhcmUgZXhjZXB0IGFzIGF1dGhvcml6ZWQgYnkgVW5pdGVkIFN0YXRlcyBsYXcgYW5kIHRoZSBsYXdzIG9mIHRoZSBqdXJpc2RpY3Rpb24gaW4gd2hpY2ggdGhlIEh1bHUgU29mdHdhcmUgd2FzIG9idGFpbmVkLiBJbiBwYXJ0aWN1bGFyLCBidXQgd2l0aG91dCBsaW1pdGF0aW9uLCB0aGUgSHVsdSBTb2Z0d2FyZSBtYXkgbm90IGJlIGV4cG9ydGVkIG9yIHJlLWV4cG9ydGVkIChhKSBpbnRvIGFueSBVLlMuIGVtYmFyZ29lZCBjb3VudHJpZXMgb3IgKGIpIHRvIGFueW9uZSBvbiB0aGUgVS5TLiBUcmVhc3VyeSBEZXBhcnRtZW50J3MgbGlzdCBvZiBTcGVjaWFsbHkgRGVzaWduYXRlZCBOYXRpb25hbHMgb3IgdGhlIFUuUy4gRGVwYXJ0bWVudCBvZiBDb21tZXJjZSBEZW5pZWQgUGVyc29u4oCZcyBMaXN0IG9yIEVudGl0eSBMaXN0LiBCeSB1c2luZyB0aGUgSHVsdSBTb2Z0d2FyZSwgeW91IHJlcHJlc2VudCBhbmQgd2FycmFudCB0aGF0IHlvdSBhcmUgbm90IGxvY2F0ZWQgaW4gYW55IHN1Y2ggY291bnRyeSBvciBvbiBhbnkgc3VjaCBsaXN0LiBZb3UgYWxzbyBhZ3JlZSB0aGF0IHlvdSB3aWxsIG5vdCB1c2UgdGhlIEh1bHUgU29mdHdhcmUgZm9yIGFueSBwdXJwb3NlcyBwcm9oaWJpdGVkIGJ5IFVuaXRlZCBTdGF0ZXMgbGF3LCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgdGhlIGRldmVsb3BtZW50LCBkZXNpZ24sIG1hbnVmYWN0dXJlIG9yIHByb2R1Y3Rpb24gb2YgbWlzc2lsZXMsIG9yIG51Y2xlYXIsIGNoZW1pY2FsLCBvciBiaW9sb2dpY2FsIHdlYXBvbnMuCisKKzEyLiBHb3Zlcm5tZW50IEVuZCBVc2Vycy4gVGhlIEh1bHUgU29mdHdhcmUgYW5kIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBhcmUgIkNvbW1lcmNpYWwgSXRlbXMiLCBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBhdCA0OCBDLkYuUi4gwqcyLjEwMSwgY29uc2lzdGluZyBvZiAiQ29tbWVyY2lhbCBDb21wdXRlciBTb2Z0d2FyZSIgYW5kICJDb21tZXJjaWFsIENvbXB1dGVyIFNvZnR3YXJlIERvY3VtZW50YXRpb24iLCBhcyBzdWNoIHRlcm1zIGFyZSB1c2VkIGluIDQ4IEMuRi5SLiDCpzEyLjIxMiBvciA0OCBDLkYuUi4gwqcyMjcuNzIwMiwgYXMgYXBwbGljYWJsZS4gIENvbnNpc3RlbnQgd2l0aCA0OCBDLkYuUi4gwqcxMi4yMTIgb3IgNDggQy5GLlIuIMKnMjI3LjcyMDItMSB0aHJvdWdoIDIyNy43MjAyLTQsIGFzIGFwcGxpY2FibGUsIHRoZSBDb21tZXJjaWFsIENvbXB1dGVyIFNvZnR3YXJlIGFuZCBDb21tZXJjaWFsIENvbXB1dGVyIFNvZnR3YXJlIERvY3VtZW50YXRpb24gYXJlIGJlaW5nIGxpY2Vuc2VkIHRvIFUuUy4gR292ZXJubWVudCBlbmQgdXNlcnMgKGEpIG9ubHkgYXMgQ29tbWVyY2lhbCBJdGVtcyBhbmQgKGIpIHdpdGggb25seSB0aG9zZSByaWdodHMgYXMgYXJlIGdyYW50ZWQgdG8gYWxsIG90aGVyIGVuZCB1c2VycyBwdXJzdWFudCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgaGVyZWluLiBVbnB1Ymxpc2hlZC1yaWdodHMgYXJlIHJlc2VydmVkIGJ5IEh1bHUgdW5kZXIgdGhlIGNvcHlyaWdodCBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzLiAKKworMTMuIENvbnRyb2xsaW5nIExhdyBhbmQgU2V2ZXJhYmlsaXR5LiBUaGlzIExpY2Vuc2Ugd2lsbCBiZSBnb3Zlcm5lZCBieSBhbmQgY29uc3RydWVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgQ2FsaWZvcm5pYSwgYXMgYXBwbGllZCB0byBhZ3JlZW1lbnRzIGVudGVyZWQgaW50byBhbmQgdG8gYmUgcGVyZm9ybWVkIGVudGlyZWx5IHdpdGhpbiBDYWxpZm9ybmlhIGJldHdlZW4gQ2FsaWZvcm5pYSByZXNpZGVudHMuIFRoaXMgTGljZW5zZSBzaGFsbCBub3QgYmUgZ292ZXJuZWQgYnkgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzLCB0aGUgYXBwbGljYXRpb24gb2Ygd2hpY2ggaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBJZiBmb3IgYW55IHJlYXNvbiBhIGNvdXJ0IG9mIGNvbXBldGVudCBqdXJpc2RpY3Rpb24gZmluZHMgYW55IHByb3Zpc2lvbiwgb3IgcG9ydGlvbiB0aGVyZW9mLCB0byBiZSB1bmVuZm9yY2VhYmxlLCB0aGUgcmVtYWluZGVyIG9mIHRoaXMgTGljZW5zZSBzaGFsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QuICAKKworMTQuIENvbXBsZXRlIEFncmVlbWVudDsgR292ZXJuaW5nIExhbmd1YWdlLiBUaGlzIExpY2Vuc2UgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIHVzZSBvZiB0aGUgSHVsdSBTb2Z0d2FyZSBsaWNlbnNlZCBoZXJldW5kZXIgYW5kIHN1cGVyc2VkZXMgYWxsIHByaW9yIG9yIGNvbnRlbXBvcmFuZW91cyB1bmRlcnN0YW5kaW5ncyByZWdhcmRpbmcgc3VjaCBzdWJqZWN0IG1hdHRlciwgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIGFueSBhZGRpdGlvbmFsIHRlcm1zIGFuZCBjb25kaXRpb25zIHlvdSBhcmUgcmVxdWlyZWQgdG8gYWNjZXB0IGlmIHlvdSBjaG9vc2UgdG8gdXNlIHRoZSBTZXJ2aWNlcyAgd2hpY2ggd2lsbCBnb3Zlcm4geW91ciB1c2Ugb2Ygc3VjaCBTZXJ2aWNlcy4gTm8gYW1lbmRtZW50IHRvIG9yIG1vZGlmaWNhdGlvbiBvZiB0aGlzIExpY2Vuc2Ugd2lsbCBiZSBiaW5kaW5nIHVubGVzcyBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgSHVsdS4gCisKK01heSAyMDA5CisKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0h5cGVyU3BlYyBiL2xpY2Vuc2VzL0h5cGVyU3BlYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOTUxOTYyCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvSHlwZXJTcGVjCkBAIC0wLDAgKzEsMTQ4IEBACisoZnJvbSBodHRwOi8vd3d3Lmxpc3B3b3Jrcy5jb20vcmVmZXJlbmNlL0h5cGVyU3BlYy9Gcm9udC9IZWxwLmh0bSNMZWdhbCkKKworQXV0aG9yc2hpcCBJbmZvcm1hdGlvbgorCitUaGUgQ29tbW9uIExpc3AgSHlwZXJTcGVjIGlzIG5vdCB0aGUgQU5TSSBDb21tb24gTGlzcCBzdGFuZGFyZCwgYnV0IGlzCitiYXNlZCBvbiB0aGF0IHN0YW5kYXJkICh3aXRoIHBlcm1pc3Npb24gZnJvbSBBTlNJIGFuZCBYMykuCisKK0FzIGFuIG9mZmljaWFsIHJlZmVyZW5jZSB0byB0aGUgQ29tbW9uIExpc3AgbGFuZ3VhZ2UsIGhhcmRjb3B5Citkb2N1bWVudGF0aW9uIG9mIEFOU0kgQ29tbW9uIExpc3AsIChBbWVyaWNhbiBOYXRpb25hbCBTdGFuZGFyZCBYMy4yMjYpCitmcm9tIEFOU0kgaXMgYWx3YXlzIGRlZmluaXRpdmUuCisKK1RoZSBoeXBlcnRleHQgbWFya3VwIGZvciB0aGlzIGRvY3VtZW50IHdhcyBjcmVhdGVkIGJ5IEtlbnQgUGl0bWFuLAord2l0aCB0aGUgYWlkIG9mIGEgY3VzdG9tIHByb2dyYW0gd3JpdHRlbiBpbiBDb21tb24gTGlzcCBhbmQgY3JlYXRlZAorc3BlY2lmaWNhbGx5IGZvciB0aGlzIHRhc2suIEZ1bmRpbmcgZm9yIHRoZSBtYXJrdXAgdGFzayB3YXMgcHJvdmlkZWQKK2J5IGFuZCBjb3B5cmlnaHQgb2YgdGhlIHJlc3VsdCBpcyBvd25lZCBieSBYYW5hbHlzIEluY29ycG9yYXRlZC4gIFNvbWUKK2FkZGl0aW9uYWwgZGVzaWduIGRvY3VtZW50cyBoYXZlIGJlZW4gaW5jbHVkZWQgaW4gbWFya2VkIHVwIGZvcm0gYW5kCitjcm9zcy1yZWZlcmVuY2VkIHdoaWNoIGFyZSBub3QgcGFydCBvZiB0aGUgc3RhbmRhcmQgYnV0IG1heSBiZSB1c2VmdWwKK2luIHVuZGVyc3RhbmRpbmcgaXQuIFBsYWludGV4dCB2ZXJzaW9ucyBvZiB0aGVzZSBkb2N1bWVudHMsIHdoaWNoCitvZmZlciBhIHVzZWZ1bCBoaXN0b3JpY2FsIHBlcnNwZWN0aXZlLCBhcmUgYXZhaWxhYmxlIHRvIGFueW9uZSBieQorYW5vbnltb3VzIHB1YmxpYyBGVFAgZnJvbSBmdHA6Ly9wYXJjZnRwLnhlcm94LmNvbS9wdWIvY2wvY2xlYW51cC8uCisKK1RoZSBKYXZhIGFwcGxldCB1c2VkIGluIHRoZSBTeW1ib2wgSW5kZXggKHZpc2libGUgb25seSBpbiBzb21lCiticm93c2Vycykgd2FzIHdyaXR0ZW4gYnkgRXZhbiBXaWxsaWFtcy4gSXRzIGNvcHlyaWdodCBpcyBvd25lZCBieQorWGFuYWx5cyBJbmNvcnBvcmF0ZWQuCisKK0ltcG9ydGFudCBMZWdhbCBOb3RpY2VzCisKK0NvcHlyaWdodCBhbmQgQ29uZGl0aW9ucyBvZiBVc2UKK0NvcHlyaWdodCAxOTk2LTIwMDEsIFhhbmFseXMgSW5jb3Jwb3JhdGVkLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCitUaGUgSFRNTCBoeXBlcnRleHQgbWFya3VwIHRoYXQgaW1wbGVtZW50cyB0aGUgaHlwZXJ0ZXh0IGZlYXR1cmVzIG9mCit0aGVzZSBXb3JsZCBXaWRlIFdlYiBwYWdlcyBvZiB0aGUgQ29tbW9uIExpc3Agc3BlY2lmaWNhdGlvbiwKK2NvbGxlY3RpdmVseSB0aGUgQ29tbW9uIExpc3AgSHlwZXJTcGVjLCBpcyB0aGUgcHJvcGVydHkgb2YgWGFuYWx5cworSW5jb3Jwb3JhdGVkLgorCitEaXN0cmlidXRpb24gb2YgdGhlIENvbW1vbiBMaXNwIEh5cGVyU3BlYyBhcyBhIGh5cGVydGV4dCBkb2N1bWVudCBvbgordGhlIEludGVybmV0IGRvZXMgbm90IGNvbnN0aXR1dGUgY29uc2VudCB0byBhbnkgdXNlIG9mIHRoZSB1bmRlcmx5aW5nCitoeXBlcnRleHQgbWFya3VwIGZvciByZWRpc3RyaWJ1dGlvbiBvZiBhbnkga2luZCwgY29tbWVyY2lhbCBvcgorb3RoZXJ3aXNlLCBlaXRoZXIgdmlhIHRoZSBJbnRlcm5ldCBvciB1c2luZyBzb21lIG90aGVyIGZvcm0gb2YKK2Rpc3RyaWJ1dGlvbiwgaW4gaHlwZXJ0ZXh0IG9yIG90aGVyd2lzZS4KKworUGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlLCBkaXNwbGF5LCBhbmQgdHJhbnNtaXQgdGhlIENvbW1vbiBMaXNwCitIeXBlclNwZWMgaXMgZ3JhbnRlZCBwcm92aWRlZCB0aGF0IGNvcGllcyBhcmUgbm90IG1hZGUgb3IgZGlzdHJpYnV0ZWQKK29yIGRpc3BsYXllZCBvciB0cmFuc21pdHRlZCBmb3IgZGlyZWN0IGNvbW1lcmNpYWwgYWR2YW50YWdlLCB0aGF0Citub3RpY2UgaXMgZ2l2ZW4gdGhhdCBjb3B5aW5nLCBkaXN0cmlidXRpb24sIGRpc3BsYXksIGFuZC9vcgordHJhbnNtaXNzaW9uIGlzIGJ5IHBlcm1pc3Npb24gb2YgWGFuYWx5cyBJbmNvcnBvcmF0ZWQsIGFuZCB0aGF0IGFueQorY29weSBtYWRlIGlzIENPTVBMRVRFIGFuZCBVTk1PRElGSUVELiBJTiBQQVJUSUNVTEFSLCB0aGUgbWF0ZXJpYWwgdGhhdAorTVVTVCBhcHBlYXIgaW4gdGhlIGNvcHkgaW5jbHVkZXM6CisKKyAgIDEuIHRoaXMgY29weXJpZ2h0IG5vdGljZSBhbmQgaXRzIGRhdGU7CisKKyAgIDIuIHRoZSBtYWluIGluZGV4IHBhZ2UsIC4uL0Zyb250L2luZGV4Lmh0bTsKKworICAgMy4gYWxsIEhUTUwgcGFnZXMgdG8gd2hpY2ggdGhlIG1haW4gaW5kZXggcGFnZSBsaW5rcyB1c2luZyByZWxhdGl2ZSBsaW5rczsKKworICAgNC4gYWxsIGdyYXBoaWNhbCAoR0lGKSBpbWFnZXMgdG8gd2hpY2ggaXQgbGlua3MgdXNpbmcgcmVsYXRpdmUKKyAgICAgIGxpbmtzLCBzdWNoIGFzIHRoZSBIYXJsZXF1aW4gbG9nbyB0aGF0IGFwcGVhcnMgb24gZWFjaCBwYWdlOyBhbmQKKworICAgNS4gYWxsIGh5cGVydGV4dCBsaW5rcywgcmVsYXRpdmUgb3IgYWJzb2x1dGUsIHN1Y2ggYXMgdGhlIGxpbmsgdG8KKyAgICAgIGh0dHA6Ly93d3cuaGFybGVxdWluLmNvbS8gdGhhdCBhcHBlYXJzIG9uIGVhY2ggcGFnZS4KKworUGVybWlzc2lvbnMgcmVsYXRlZCB0byBwZXJmb3JtYW5jZSBhbmQgdG8gY3JlYXRpb24gb2YgZGVyaXZhdGl2ZSB3b3JrcworYXJlIGV4cHJlc3NseSBOT1QgZ3JhbnRlZC4KKworUGVybWlzc2lvbiB0byBtYWtlIHBhcnRpYWwgY29waWVzIGlzIGV4cHJlc3NseSBOT1QgZ3JhbnRlZCwgRVhDRVBUCit0aGF0IGxpbWl0ZWQgcGVybWlzc2lvbiBpcyBncmFudGVkIHRvIHRyYW5zbWl0IGFuZCBkaXNwbGF5IGEgcGFydGlhbAorY29weSB0aGUgQ29tbW9uIExpc3AgSHlwZXJTcGVjIGZvciB0aGUgb3JkaW5hcnkgcHVycG9zZSBvZiBkaXJlY3QKK3ZpZXdpbmcgYnkgYSBodW1hbiBiZWluZyBpbiB0aGUgdXN1YWwgbWFubmVyIHRoYXQgaHlwZXJ0ZXh0IGJyb3dzZXJzCitwZXJtaXQgdGhlIHZpZXdpbmcgb2Ygc3VjaCBhIGNvbXBsZXRlIGRvY3VtZW50LCBwcm92aWRlZCB0aGF0IG5vCityZWNvcHlpbmcsIHJlZGlzdHJpYnV0aW9uLCByZWRpc3BsYXksIG9yIHJldHJhbnNtaXNzaW9uIGlzIG1hZGUgb2YgYW55CitzdWNoIHBhcnRpYWwgY29weS4KKworUGVybWlzc2lvbiB0byBtYWtlIG1vZGlmaWVkIGNvcGllcyBpcyBleHByZXNzbHkgTk9UIGdyYW50ZWQuCisKK1Blcm1pc3Npb24gdG8gYWRkIG9yIHJlcGxhY2UgYW55IGxpbmtzIG9yIGFueSBncmFwaGljYWwgaW1hZ2VzIHRvIGFueQorb2YgdGhlc2UgcGFnZXMgaXMgZXhwcmVzc2x5IE5PVCBncmFudGVkLgorCitQZXJtaXNzaW9uIHRvIHVzZSBhbnkgb2YgdGhlIGluY2x1ZGVkIGdyYXBoaWNhbCAoR0lGKSBpbWFnZXMgaW4gYW55Citkb2N1bWVudCBvdGhlciB0aGFuIHRoZSBDb21tb24gTGlzcCBIeXBlclNwZWMgaXMgZXhwcmVzc2x5IE5PVAorZ3JhbnRlZC4KKworQWNrbm93bGVkZ21lbnRzCisKK1BhcnRzIG9mIHRoaXMgd29yayBpbmNvcnBvcmF0ZSBtYXRlcmlhbCB0YWtlbiBmcm9tIEFtZXJpY2FuIE5hdGlvbmFsCitTdGFuZGFyZCBYMy4yMjYsIGNvcHlyaWdodCAxOTk0LCBhbmQgaXMgdXNlZCB3aXRoIHBlcm1pc3Npb24gb2YgdGhlIFgzCitTZWNyZXRhcmlhdCwgSVRJLCAxMjUwIEV5ZSBTdC4sIE5XLiwgU3VpdGUgMjAwLCBXYXNoaW5ndG9uLCBEQyAyMDAwNQorYW5kIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyLCBBbWVyaWNhbiBOYXRpb25hbCBTdGFuZGFyZHMKK0luc3RpdHV0ZS4gQU5TSS9YMy4yMjYgd2FzIGRldmVsb3BlZCBieSBUZWNobmljYWwgQ29tbWl0dGVlIFgzSjEzLAorQ29tbW9uIExpc3AuCisKK0NvcGllcyBvZiB0aGUgQU5TSS9YMy4yMjYgc3RhbmRhcmQgbWF5IGJlIHB1cmNoYXNlZCBmcm9tIHRoZSBBbWVyaWNhbgorTmF0aW9uYWwgU3RhbmRhcmRzIEluc3RpdHV0ZSwgMTEgV2VzdCA0Mm5kIFN0cmVldCwgTmV3IFlvcmssIE5ZIDEwMDM2LgorCitSZXN0cmljdGVkIFJpZ2h0cyBMZWdlbmQKKworVGhlIENvbW1vbiBMaXNwIEh5cGVyU3BlYyBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgUmVzdHJpY3RlZCBSaWdodHMgTGVnZW5kOgorCisgICAgYGBVc2UsIGR1cGxpY2F0aW9uLCBvciBkaXNjbG9zdXJlIGJ5IHRoZSBVbml0ZWQgU3RhdGVzIEdvdmVybm1lbnQKKyAgICBpcyBzdWJqZWN0IHRvIHRoZSByZXN0cmljdGlvbnMgc2V0IGZvcnRoIGluIChpKSBGQVIgNTIuMjI3LTE0IEFsdAorICAgIElJSSwgKGlpKSBGQVIgNTIuMjI3LTE5LCAoaWlpKSBERkFSUyAyNTIuNzAxMyhjKSgxKShpaSksIG9yIChpdikKKyAgICB0aGUgYWNjb21wYW55aW5nIGxpY2Vuc2UgQWdyZWVtZW50LCBhcyBhcHBsaWNhYmxlLiBGb3IgcHVycG9zZXMgb2YKKyAgICB0aGUgRkFSLCB0aGUgU29mdHdhcmUgc2hhbGwgYmUgZGVlbWVkIHRvIGJlIGBgdW5wdWJsaXNoZWQnJyBhbmQKKyAgICBsaWNlbnNlZCB3aXRoIGRpc2Nsb3N1cmUgcHJvaGliaXRpb25zLCByaWdodHMgcmVzZXJ2ZWQgdW5kZXIgdGhlCisgICAgY29weXJpZ2h0IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMuIEhhcmxlcXVpbiBJbmNvcnBvcmF0ZWQsIE9uZQorICAgIENhbWJyaWRnZSBDZW50ZXIsIENhbWJyaWRnZSwgTWFzc2FjaHVzZXR0cyAwMjE0Mi4nJworCitXYXJyYW50eSBkaXNjbGFpbWVyCisKK1RISVMgRE9DVU1FTlQgSVMgUFJPVklERUQgIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5ECitOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBXSUxMIEhBUkxFUVVJTiBCRSBMSUFCTEUgRk9SIERJUkVDVCwKK0lORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgUkVTVUxUSU5HIEZST00KK0FOWSBJTkFDQ1VSQUNZIE9SIEVSUk9SIElOIFRISVMgRE9DVU1FTlQsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworQWRkaXRpb25hbCBEaXNjbGFpbWVycworCitOb3QgYWxsIG5vdGF0aW9ucyBpbiB0aGF0IFRlWC1iYXNlZCBkb2N1bWVudCB3ZXJlIHBvc3NpYmxlIHRvCityZXByZXNlbnQgZXhhY3RseSBpbiBIVE1MLCBhbHRob3VnaCBhbiBhdHRlbXB0IGhhcyBiZWVuIG1hZGUgdG8gYmUgYXMKK2FjY3VyYXRlIGFzIHBvc3NpYmxlLiBOZXZlcnRoZWxlc3MsIHRoZSBwcm9jZXNzIG9mIHRyYW5zbGF0aW9uIHdhcworaGV1cmlzdGljLCBhbmQgZGlzY3JlcGFuY2llcyBtaWdodCBoYXZlIHJlc3VsdGVkLiBGb3JtYWxseSwgdGhlCitvZmZpY2lhbCBBTlNJIHByaW50ZWQgZG9jdW1lbnQgaXMgYWx3YXlzIHRoZSBkZWZpbml0aXZlIHJlZmVyZW5jZS4KKworVGhlIFgzSjEzIGlzc3VlIGRvY3VtZW50cyBhcmUgbm90IHBhcnQgb2YgdGhlIHN0YW5kYXJkIGFuZCBhcmUKK3Byb3ZpZGVkIHB1cmVseSBmb3IgaGlzdG9yaWNhbCBwZXJzcGVjdGl2ZS4gSXQgaXMgcG9zc2libGUgdGhhdCBzb21lCitvZiB0aGUgZG9jdW1lbnRzLCBhcyBpbmNsdWRlZCwgYXJlIG5vdCB0aGUgZmluYWwgZm9ybSB0aGF0IFgzSjEzCit2b3RlZCwgb3IgdGhhdCBzb21lIHdoaWNoIHdlcmUgdm90ZWQgd2VyZSBvbWl0dGVkLCBvciB0aGF0IHJlZmVyZW5jZXMKK2Zyb20gdGhlc2UgZG9jdW1lbnRzIGludG8gdGhlIHNvdXJjZSB0ZXh0IGFyZSBub3QgY29tcGxldGUsIG9yIHRoYXQKK3NvbWUgZWRpdHMgcHJlc2NyaWJlZCBieSB0aGVzZSBkb2N1bWVudHMgd2VyZSBpbmNvcnJlY3RseSBpbXBsZW1lbnRlZCwKK29yIHRoYXQgb3RoZXIgZGlzY3JlcGFuY2llcyBleGlzdCBiZXR3ZWVuIHRoZXNlIGRvY3VtZW50cyBhbmQgdGhlCitzcGVjaWZpY2F0aW9uLiBUaGVzZSBkb2N1bWVudHMgaGF2ZSBubyBmb3JtYWwgd2VpZ2h0LCBhbmQgaW4gYWxsCitjYXNlcywgdGhlIGhhcmRjb3B5IHNwZWNpZmljYXRpb24gaXMgZGVmaW5pdGl2ZS4gIFRyYWRlbWFya3MgTGlzcFdvcmtzCitpcyBhIHJlZ2lzdGVyZWQgdHJhZGVtYXJrIG9mIFhhbmFseXMgSW5jb3Jwb3JhdGVkLgorCitQb3N0U2NyaXB0IGlzIGEgcmVnaXN0ZXJlZCB0cmFkZW1hcmsgb2YgQWRvYmUgU3lzdGVtcywgSW5jLgorCitDb21tb24gTGlzcCBIeXBlcnNwZWM7IFRyYW5zZHVjZXI7IExpcXVpZCBDb21tb24gTGlzcDsgV2F0c29uOworS25vd2xlZGdlV29ya3M7IGFuZCBGcmVlTGlzcCBhcmUgdHJhZGVtYXJrcyBvZiBYYW5hbHlzIEluY29ycG9yYXRlZC4KKworSGFycG9vbjsgSGFybGVxdWluIFNjcmVlbmluZyBMaWJyYXJ5OyBIU0w7IEhhcmxlcXVpbiBEaXNwZXJzZWQKK1NjcmVlbmluZzsgSERTOyBIYXJsZXF1aW4gQ2hhaW4gU2NyZWVuaW5nOyBIQ1M7IEhhcmxlcXVpbiBNaWNybworU2NyZWVuaW5nOyBITVM7IEhhcmxlcXVpbiBQcmVjaXNpb24gU2NyZWVuaW5nOyBIUFM7IFNjcmlwdFdvcmtzCitNaWNyb1JJUDsgSGFybGVxdWluIENvbG9yIE1hbmFnZW1lbnQ7IEhDTVM7IGFyZSB0cmFkZW1hcmtzIG9mCitIYXJsZXF1aW4gTGltaXRlZC4KKworQWxsIG90aGVyIGJyYW5kIGFuZCBwcm9kdWN0IG5hbWVzIG1lbnRpb25lZCBoZXJlaW4gYXJlIHRyYWRlbWFya3Mgb3IKK3JlZ2lzdGVyZWQgdHJhZGVtYXJrClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvSUJNIGIvbGljZW5zZXMvSUJNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwN2I1NDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9JQk0KQEAgLTAsMCArMSwyMjIgQEAKK0lCTSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMAorCitUSEUgQUNDT01QQU5ZSU5HIFBST0dSQU0gSVMgUFJPVklERUQgVU5ERVIgVEhFIFRFUk1TIE9GIFRISVMgSUJNIFBVQkxJQworTElDRU5TRSAoIkFHUkVFTUVOVCIpLiBBTlkgVVNFLCBSRVBST0RVQ1RJT04gT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNCitDT05TVElUVVRFUyBSRUNJUElFTlQnUyBBQ0NFUFRBTkNFIE9GIFRISVMgQUdSRUVNRU5ULgorCisxLiBERUZJTklUSU9OUworCisiQ29udHJpYnV0aW9uIiBtZWFuczoKKworYSkgaW4gdGhlIGNhc2Ugb2YgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiAoIklCTSIpLAorICAgdGhlIE9yaWdpbmFsIFByb2dyYW0sIGFuZAorCitiKSBpbiB0aGUgY2FzZSBvZiBlYWNoIENvbnRyaWJ1dG9yLAorCitpKSBjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQKKworaWkpIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbTsKKword2hlcmUgc3VjaCBjaGFuZ2VzIGFuZC9vciBhZGRpdGlvbnMgdG8gdGhlIFByb2dyYW0gb3JpZ2luYXRlIGZyb20gYW5kIGFyZQorZGlzdHJpYnV0ZWQgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLiBBIENvbnRyaWJ1dGlvbiAnb3JpZ2luYXRlcycKK2Zyb20gYSBDb250cmlidXRvciBpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaCBDb250cmlidXRvcgoraXRzZWxmIG9yIGFueW9uZSBhY3Rpbmcgb24gc3VjaCBDb250cmlidXRvcidzIGJlaGFsZi4gQ29udHJpYnV0aW9ucyBkbyBub3QKK2luY2x1ZGUgYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtIHdoaWNoOiAoaSkgYXJlIHNlcGFyYXRlIG1vZHVsZXMgb2YKK3NvZnR3YXJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duCitsaWNlbnNlIGFncmVlbWVudCwgYW5kIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBQcm9ncmFtLgorCisiQ29udHJpYnV0b3IiIG1lYW5zIElCTSBhbmQgYW55IG90aGVyIGVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzIHRoZSBQcm9ncmFtLgorCisiTGljZW5zZWQgUGF0ZW50cyAiIG1lYW4gcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2gKK2FyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZSBvciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUgb3IKK3doZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4KKworIk9yaWdpbmFsIFByb2dyYW0iIG1lYW5zIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBzb2Z0d2FyZSBhY2NvbXBhbnlpbmcKK3RoaXMgQWdyZWVtZW50IGFzIHJlbGVhc2VkIGJ5IElCTSwgaW5jbHVkaW5nIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSBhbmQKK2RvY3VtZW50YXRpb24sIGlmIGFueS4KKworIlByb2dyYW0iIG1lYW5zIHRoZSBPcmlnaW5hbCBQcm9ncmFtIGFuZCBDb250cmlidXRpb25zLgorCisiUmVjaXBpZW50IiBtZWFucyBhbnlvbmUgd2hvIHJlY2VpdmVzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgQWdyZWVtZW50LAoraW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuCisKKzIuIEdSQU5UIE9GIFJJR0hUUworCithKSBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzCisgICBSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bworICAgcmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5CisgICBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwKKyAgIGlmIGFueSwgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uCisKK2IpIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKKyAgIFJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIHBhdGVudCBsaWNlbnNlIHVuZGVyCisgICBMaWNlbnNlZCBQYXRlbnRzIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgdG8gc2VsbCwgaW1wb3J0IGFuZCBvdGhlcndpc2UKKyAgIHRyYW5zZmVyIHRoZSBDb250cmlidXRpb24gb2Ygc3VjaCBDb250cmlidXRvciwgaWYgYW55LCBpbiBzb3VyY2UgY29kZQorICAgYW5kIG9iamVjdCBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCisgICBvZiB0aGUgQ29udHJpYnV0aW9uIGFuZCB0aGUgUHJvZ3JhbSBpZiwgYXQgdGhlIHRpbWUgdGhlIENvbnRyaWJ1dGlvbiBpcworICAgYWRkZWQgYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBDb250cmlidXRpb24gY2F1c2VzIHN1Y2gKKyAgIGNvbWJpbmF0aW9uIHRvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZQorICAgc2hhbGwgbm90IGFwcGx5IHRvIGFueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGUKKyAgIENvbnRyaWJ1dGlvbi4gTm8gaGFyZHdhcmUgcGVyIHNlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4KKworYykgUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlIGxpY2Vuc2VzCisgICB0byBpdHMgQ29udHJpYnV0aW9ucyBzZXQgZm9ydGggaGVyZWluLCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkKKyAgIENvbnRyaWJ1dG9yIHRoYXQgdGhlIFByb2dyYW0gZG9lcyBub3QgaW5mcmluZ2UgdGhlIHBhdGVudCBvciBvdGhlcgorICAgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yCisgICBkaXNjbGFpbXMgYW55IGxpYWJpbGl0eSB0byBSZWNpcGllbnQgZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlcgorICAgZW50aXR5IGJhc2VkIG9uIGluZnJpbmdlbWVudCBvZiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9yCisgICBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQgbGljZW5zZXMgZ3JhbnRlZAorICAgaGVyZXVuZGVyLCBlYWNoIFJlY2lwaWVudCBoZXJlYnkgYXNzdW1lcyBzb2xlIHJlc3BvbnNpYmlsaXR5IHRvIHNlY3VyZQorICAgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLCBpZiBhbnkuIEZvciBleGFtcGxlLCBpZiBhCisgICB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZQorICAgdGhlIFByb2dyYW0sIGl0IGlzIFJlY2lwaWVudCdzIHJlc3BvbnNpYmlsaXR5IHRvIGFjcXVpcmUgdGhhdCBsaWNlbnNlCisgICBiZWZvcmUgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLgorCitkKSBFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50CisgICBjb3B5cmlnaHQgcmlnaHRzIGluIGl0cyBDb250cmlidXRpb24sIGlmIGFueSwgdG8gZ3JhbnQgdGhlIGNvcHlyaWdodAorICAgbGljZW5zZSBzZXQgZm9ydGggaW4gdGhpcyBBZ3JlZW1lbnQuCisKKzMuIFJFUVVJUkVNRU5UUworCitBIENvbnRyaWJ1dG9yIG1heSBjaG9vc2UgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpbiBvYmplY3QgY29kZSBmb3JtCit1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0OgorCithKSBpdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kCisKK2IpIGl0cyBsaWNlbnNlIGFncmVlbWVudDoKKworaSkgZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZAorICAgY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZgorICAgdGl0bGUgYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZgorICAgbWVyY2hhbnRhYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsKKworaWkpIGVmZmVjdGl2ZWx5IGV4Y2x1ZGVzIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yCisgICAgZGFtYWdlcywgaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kCisgICAgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzdWNoIGFzIGxvc3QgcHJvZml0czsKKworaWlpKSBzdGF0ZXMgdGhhdCBhbnkgcHJvdmlzaW9ucyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUKKyAgICAgb2ZmZXJlZCBieSB0aGF0IENvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQKKworaXYpIHN0YXRlcyB0aGF0IHNvdXJjZSBjb2RlIGZvciB0aGUgUHJvZ3JhbSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoCisgICAgQ29udHJpYnV0b3IsIGFuZCBpbmZvcm1zIGxpY2Vuc2VlcyBob3cgdG8gb2J0YWluIGl0IGluIGEgcmVhc29uYWJsZQorICAgIG1hbm5lciBvbiBvciB0aHJvdWdoIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGV4Y2hhbmdlLgorCitXaGVuIHRoZSBQcm9ncmFtIGlzIG1hZGUgYXZhaWxhYmxlIGluIHNvdXJjZSBjb2RlIGZvcm06CisKK2EpIGl0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZAorCitiKSBhIGNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgUHJvZ3JhbS4KKworRWFjaCBDb250cmlidXRvciBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBpbiBhIGNvbnNwaWN1b3VzIGxvY2F0aW9uIGluCit0aGUgUHJvZ3JhbToKKworQ29weXJpZ2h0IMKpIHtkYXRlIGhlcmV9LCBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZAorb3RoZXJzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCitJbiBhZGRpdGlvbiwgZWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUgb3JpZ2luYXRvciBvZiBpdHMKK0NvbnRyaWJ1dGlvbiwgaWYgYW55LCBpbiBhIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzIHN1YnNlcXVlbnQKK1JlY2lwaWVudHMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlIENvbnRyaWJ1dGlvbi4KKworNC4gQ09NTUVSQ0lBTCBESVNUUklCVVRJT04KKworQ29tbWVyY2lhbCBkaXN0cmlidXRvcnMgb2Ygc29mdHdhcmUgbWF5IGFjY2VwdCBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMKK3dpdGggcmVzcGVjdCB0byBlbmQgdXNlcnMsIGJ1c2luZXNzIHBhcnRuZXJzIGFuZCB0aGUgbGlrZS4gV2hpbGUgdGhpcworbGljZW5zZSBpcyBpbnRlbmRlZCB0byBmYWNpbGl0YXRlIHRoZSBjb21tZXJjaWFsIHVzZSBvZiB0aGUgUHJvZ3JhbSwgdGhlCitDb250cmlidXRvciB3aG8gaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcKK3Nob3VsZCBkbyBzbyBpbiBhIG1hbm5lciB3aGljaCBkb2VzIG5vdCBjcmVhdGUgcG90ZW50aWFsIGxpYWJpbGl0eSBmb3IKK290aGVyIENvbnRyaWJ1dG9ycy4gVGhlcmVmb3JlLCBpZiBhIENvbnRyaWJ1dG9yIGluY2x1ZGVzIHRoZSBQcm9ncmFtIGluIGEKK2NvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZywgc3VjaCBDb250cmlidXRvciAoIkNvbW1lcmNpYWwgQ29udHJpYnV0b3IiKQoraGVyZWJ5IGFncmVlcyB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBldmVyeSBvdGhlciBDb250cmlidXRvciAoIkluZGVtbmlmaWVkCitDb250cmlidXRvciIpIGFnYWluc3QgYW55IGxvc3NlcywgZGFtYWdlcyBhbmQgY29zdHMgKGNvbGxlY3RpdmVseSAiTG9zc2VzIikKK2FyaXNpbmcgZnJvbSBjbGFpbXMsIGxhd3N1aXRzIGFuZCBvdGhlciBsZWdhbCBhY3Rpb25zIGJyb3VnaHQgYnkgYSB0aGlyZAorcGFydHkgYWdhaW5zdCB0aGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgdG8gdGhlIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMKK29yIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgaW4gY29ubmVjdGlvbiB3aXRoIGl0cworZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0IG9mZmVyaW5nLiBUaGUKK29ibGlnYXRpb25zIGluIHRoaXMgc2VjdGlvbiBkbyBub3QgYXBwbHkgdG8gYW55IGNsYWltcyBvciBMb3NzZXMgcmVsYXRpbmcKK3RvIGFueSBhY3R1YWwgb3IgYWxsZWdlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50LiBJbiBvcmRlciB0bworcXVhbGlmeSwgYW4gSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbXVzdDogYSkgcHJvbXB0bHkgbm90aWZ5IHRoZSBDb21tZXJjaWFsCitDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2ggY2xhaW0sIGFuZCBiKSBhbGxvdyB0aGUgQ29tbWVyY2lhbAorQ29udHJpYnV0b3IgdG8gY29udHJvbCwgYW5kIGNvb3BlcmF0ZSB3aXRoIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGluLAordGhlIGRlZmVuc2UgYW5kIGFueSByZWxhdGVkIHNldHRsZW1lbnQgbmVnb3RpYXRpb25zLiBUaGUgSW5kZW1uaWZpZWQKK0NvbnRyaWJ1dG9yIG1heSBwYXJ0aWNpcGF0ZSBpbiBhbnkgc3VjaCBjbGFpbSBhdCBpdHMgb3duIGV4cGVuc2UuCisKK0ZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhIENvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZSBjbGFpbXMsCitvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAord2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyCit0aGlzIHNlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8gZGVmZW5kIGNsYWltcworYWdhaW5zdCB0aGUgb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zIGFuZAord2FycmFudGllcywgYW5kIGlmIGEgY291cnQgcmVxdWlyZXMgYW55IG90aGVyIENvbnRyaWJ1dG9yIHRvIHBheSBhbnkKK2RhbWFnZXMgYXMgYSByZXN1bHQsIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIG11c3QgcGF5IHRob3NlIGRhbWFnZXMuCisKKzUuIE5PIFdBUlJBTlRZCisKK0VYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMgQUdSRUVNRU5ULCBUSEUgUFJPR1JBTSBJUyBQUk9WSURFRCBPTgorQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUgorRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUgorQ09ORElUSU9OUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEKK1BBUlRJQ1VMQVIgUFVSUE9TRS4gRWFjaCBSZWNpcGllbnQgaXMgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZwordGhlIGFwcHJvcHJpYXRlbmVzcyBvZiB1c2luZyBhbmQgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIGFuZCBhc3N1bWVzIGFsbAorcmlza3MgYXNzb2NpYXRlZCB3aXRoIGl0cyBleGVyY2lzZSBvZiByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsCitpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSByaXNrcyBhbmQgY29zdHMgb2YgcHJvZ3JhbSBlcnJvcnMsCitjb21wbGlhbmNlIHdpdGggYXBwbGljYWJsZSBsYXdzLCBkYW1hZ2UgdG8gb3IgbG9zcyBvZiBkYXRhLCBwcm9ncmFtcyBvcgorZXF1aXBtZW50LCBhbmQgdW5hdmFpbGFiaWxpdHkgb3IgaW50ZXJydXB0aW9uIG9mIG9wZXJhdGlvbnMuCisKKzYuIERJU0NMQUlNRVIgT0YgTElBQklMSVRZCisKK0VYQ0VQVCBBUyBFWFBSRVNTTFkgU0VUIEZPUlRIIElOIFRISVMgQUdSRUVNRU5ULCBORUlUSEVSIFJFQ0lQSUVOVCBOT1IgQU5ZCitDT05UUklCVVRPUlMgU0hBTEwgSEFWRSBBTlkgTElBQklMSVRZIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKK1NQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OCitMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KK0NPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT1IgRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIE9SIFRIRQorRVhFUkNJU0UgT0YgQU5ZIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBHRU5FUkFMCisKK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyCithcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlCityZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgd2l0aG91dCBmdXJ0aGVyIGFjdGlvbiBieSB0aGUKK3BhcnRpZXMgaGVyZXRvLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCB0byB0aGUgbWluaW11bSBleHRlbnQKK25lY2Vzc2FyeSB0byBtYWtlIHN1Y2ggcHJvdmlzaW9uIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KKworSWYgUmVjaXBpZW50IGluc3RpdHV0ZXMgcGF0ZW50IGxpdGlnYXRpb24gYWdhaW5zdCBhIENvbnRyaWJ1dG9yIHdpdGgKK3Jlc3BlY3QgdG8gYSBwYXRlbnQgYXBwbGljYWJsZSB0byBzb2Z0d2FyZSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IKK2NvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpLCB0aGVuIGFueSBwYXRlbnQgbGljZW5zZXMgZ3JhbnRlZCBieSB0aGF0CitDb250cmlidXRvciB0byBzdWNoIFJlY2lwaWVudCB1bmRlciB0aGlzIEFncmVlbWVudCBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YKK3RoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4gSW4gYWRkaXRpb24sIElmIFJlY2lwaWVudCBpbnN0aXR1dGVzCitwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yCitjb3VudGVyY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZiAoZXhjbHVkaW5nCitjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2gKK1JlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiBzdWNoIFJlY2lwaWVudCdzIHJpZ2h0cyBncmFudGVkIHVuZGVyIFNlY3Rpb24KKzIoYikgc2hhbGwgdGVybWluYXRlIGFzIG9mIHRoZSBkYXRlIHN1Y2ggbGl0aWdhdGlvbiBpcyBmaWxlZC4KKworQWxsIFJlY2lwaWVudCdzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCBzaGFsbCB0ZXJtaW5hdGUgaWYgaXQgZmFpbHMgdG8KK2NvbXBseSB3aXRoIGFueSBvZiB0aGUgbWF0ZXJpYWwgdGVybXMgb3IgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQKK2RvZXMgbm90IGN1cmUgc3VjaCBmYWlsdXJlIGluIGEgcmVhc29uYWJsZSBwZXJpb2Qgb2YgdGltZSBhZnRlciBiZWNvbWluZworYXdhcmUgb2Ygc3VjaCBub25jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50Cit0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYXMKK3Nvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwgUmVjaXBpZW50J3Mgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieSBSZWNpcGllbnQgcmVsYXRpbmcgdG8gdGhlIFByb2dyYW0KK3NoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLgorCitJQk0gbWF5IHB1Ymxpc2ggbmV3IHZlcnNpb25zIChpbmNsdWRpbmcgcmV2aXNpb25zKSBvZiB0aGlzIEFncmVlbWVudCBmcm9tCit0aW1lIHRvIHRpbWUuIEVhY2ggbmV3IHZlcnNpb24gb2YgdGhlIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGEKK2Rpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBUaGUgUHJvZ3JhbSAoaW5jbHVkaW5nIENvbnRyaWJ1dGlvbnMpIG1heQorYWx3YXlzIGJlIGRpc3RyaWJ1dGVkIHN1YmplY3QgdG8gdGhlIHZlcnNpb24gb2YgdGhlIEFncmVlbWVudCB1bmRlciB3aGljaAoraXQgd2FzIHJlY2VpdmVkLiBJbiBhZGRpdGlvbiwgYWZ0ZXIgYSBuZXcgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50IGlzCitwdWJsaXNoZWQsIENvbnRyaWJ1dG9yIG1heSBlbGVjdCB0byBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChpbmNsdWRpbmcgaXRzCitDb250cmlidXRpb25zKSB1bmRlciB0aGUgbmV3IHZlcnNpb24uIE5vIG9uZSBvdGhlciB0aGFuIElCTSBoYXMgdGhlIHJpZ2h0Cit0byBtb2RpZnkgdGhpcyBBZ3JlZW1lbnQuIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIFNlY3Rpb25zIDIoYSkgYW5kCisyKGIpIGFib3ZlLCBSZWNpcGllbnQgcmVjZWl2ZXMgbm8gcmlnaHRzIG9yIGxpY2Vuc2VzIHRvIHRoZSBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzIEFncmVlbWVudCwgd2hldGhlciBleHByZXNzbHksIGJ5CitpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiBBbGwgcmlnaHRzIGluIHRoZSBQcm9ncmFtIG5vdCBleHByZXNzbHkKK2dyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLgorCitUaGlzIEFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgTmV3IFlvcmsgYW5kIHRoZQoraW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYS4gTm8gcGFydHkgdG8KK3RoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcyBBZ3JlZW1lbnQgbW9yZSB0aGFuIG9uZQoreWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5IHdhaXZlcyBpdHMgcmlnaHRzIHRvIGEKK2p1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvSUJNLUlMQVIgYi9saWNlbnNlcy9JQk0tSUxBUgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMmU5N2I0Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvSUJNLUlMQVIKQEAgLTAsMCArMSw3ODkgQEAKK0ludGVybmF0aW9uYWwgTGljZW5zZSBBZ3JlZW1lbnQgZm9yIEVhcmx5IFJlbGVhc2Ugb2YgUHJvZ3JhbXMKKworUGFydCAxIC0gR2VuZXJhbCBUZXJtcworCitCWSBET1dOTE9BRElORywgSU5TVEFMTElORywgQ09QWUlORywgQUNDRVNTSU5HLCBPUiBVU0lORyBUSEUgUFJPR1JBTSBZT1UgQUdSRUUKK1RPIFRIRSBURVJNUyBPRiBUSElTIEFHUkVFTUVOVC4gSUYgWU9VIEFSRSBBQ0NFUFRJTkcgVEhFU0UgVEVSTVMgT04gQkVIQUxGIE9GCitBTk9USEVSIFBFUlNPTiBPUiBBIENPTVBBTlkgT1IgT1RIRVIgTEVHQUwgRU5USVRZLCBZT1UgUkVQUkVTRU5UIEFORCBXQVJSQU5UCitUSEFUIFlPVSBIQVZFIEZVTEwgQVVUSE9SSVRZIFRPIEJJTkQgVEhBVCBQRVJTT04sIENPTVBBTlksIE9SIExFR0FMIEVOVElUWSBUTworVEhFU0UgVEVSTVMuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFU0UgVEVSTVMsCisKKy0gRE8gTk9UIERPV05MT0FELCBJTlNUQUxMLCBDT1BZLCBBQ0NFU1MsIE9SIFVTRSBUSEUgUFJPR1JBTTsgQU5ECisKKy0gUFJPTVBUTFkgUkVUVVJOIFRIRSBQUk9HUkFNIFRPIFRIRSBQQVJUWSBGUk9NIFdIT00gWU9VIEFDUVVJUkVEIElULiBJRiBZT1UKKyAgRE9XTkxPQURFRCBUSEUgUFJPR1JBTSwgQ09OVEFDVCBUSEUgUEFSVFkgRlJPTSBXSE9NIFlPVSBBQ1FVSVJFRCBJVC4KKworIkVhcmx5IFJlbGVhc2UiIG1lYW5zIHRoYXQgdGhlIFByb2dyYW0gaXMgbm90IGZvcm1hbGx5IHJlbGVhc2VkIG9yCitjb21tZXJjaWFsbHkgYXZhaWxhYmxlLiBUaGUgdGVybSBkb2VzIG5vdCBpbXBseSB0aGF0IHRoZSBQcm9ncmFtIHdpbGwgYmUKK2Zvcm1hbGx5IHJlbGVhc2VkIG9yIG1hZGUgY29tbWVyY2lhbGx5IGF2YWlsYWJsZS4gSUJNIGRvZXMgbm90IHdhcnJhbnQgdGhhdAorc2hvdWxkIGEgUHJvZ3JhbSBiZSBmb3JtYWxseSByZWxlYXNlZCBvciBtYWRlIGNvbW1lcmNpYWxseSBhdmFpbGFibGUgdGhhdCBpdAord2lsbCBiZSBzaW1pbGFyIHRvLCBvciBjb21wYXRpYmxlIHdpdGgsIEVhcmx5IFJlbGVhc2UgdmVyc2lvbnMuCisKKyJJQk0iIGlzIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMgQ29ycG9yYXRpb24gb3Igb25lIG9mIGl0cworc3Vic2lkaWFyaWVzLgorCisiTGljZW5zZSBJbmZvcm1hdGlvbiIgKCJMSSIpIGlzIGEgZG9jdW1lbnQgdGhhdCBwcm92aWRlcyBpbmZvcm1hdGlvbiBzcGVjaWZpYwordG8gYSBQcm9ncmFtLiBUaGUgUHJvZ3JhbSdzIExJIGlzIGF2YWlsYWJsZSBpbiBhIGZpbGUgaW4gdGhlIFByb2dyYW0ncworZGlyZWN0b3J5LCBieSB0aGUgdXNlIG9mIGEgc3lzdGVtIGNvbW1hbmQsIG9yIGFzIGEgYm9va2xldCB3aGljaCBhY2NvbXBhbmllcwordGhlIFByb2dyYW0uIFRoZSBMSSBtYXkgYWxzbyBiZSBmb3VuZCBhdCBodHRwOi8vd3d3LmlibS5jb20vc29mdHdhcmUvc2xhLyAuCisKKyJQcm9ncmFtIiBpcyB0aGUgZm9sbG93aW5nLCBpbmNsdWRpbmcgdGhlIG9yaWdpbmFsIGFuZCBhbGwgd2hvbGUgb3IgcGFydGlhbAorY29waWVzOiAxKSBtYWNoaW5lLXJlYWRhYmxlIGluc3RydWN0aW9ucyBhbmQgZGF0YSwgMikgY29tcG9uZW50cywgMykKK2F1ZGlvLXZpc3VhbCBjb250ZW50IChzdWNoIGFzIGltYWdlcywgdGV4dCwgcmVjb3JkaW5ncywgb3IgcGljdHVyZXMpLCA0KQorcmVsYXRlZCBsaWNlbnNlZCBtYXRlcmlhbHMsIGFuZCA1KSBsaWNlbnNlIHVzZSBkb2N1bWVudHMgb3Iga2V5cywgYW5kCitkb2N1bWVudGF0aW9uLgorCisiWW91IiBhbmQgIllvdXIiIHJlZmVyIGVpdGhlciB0byBhbiBpbmRpdmlkdWFsIHBlcnNvbiBvciB0byBhIHNpbmdsZSBsZWdhbAorZW50aXR5LgorCitUaGlzIEFncmVlbWVudCBpbmNsdWRlcyBQYXJ0IDEgLSBHZW5lcmFsIFRlcm1zLCBQYXJ0IDIgLSBDb3VudHJ5LXVuaXF1ZSBUZXJtcworKGlmIGFueSksIGFuZCBMaWNlbnNlIEluZm9ybWF0aW9uIGFuZCBpcyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGJldHdlZW4gWW91CithbmQgSUJNIHJlZ2FyZGluZyB0aGUgdXNlIG9mIHRoZSBQcm9ncmFtLiBJdCByZXBsYWNlcyBhbnkgcHJpb3Igb3JhbCBvcgord3JpdHRlbiBjb21tdW5pY2F0aW9ucyBiZXR3ZWVuIFlvdSBhbmQgSUJNIGNvbmNlcm5pbmcgWW91ciB1c2Ugb2YgdGhlIFByb2dyYW0uCitUaGUgdGVybXMgb2YgUGFydCAyIGFuZCBMaWNlbnNlIEluZm9ybWF0aW9uIG1heSByZXBsYWNlIG9yIG1vZGlmeSB0aG9zZSBvZgorUGFydCAxLgorCisxLiBFbnRpdGxlbWVudAorCitMaWNlbnNlCisKK1RoZSBQcm9ncmFtIGlzIG93bmVkIGJ5IElCTSBvciBhbiBJQk0gc3VwcGxpZXIsIGFuZCBpcyBjb3B5cmlnaHRlZCBhbmQKK2xpY2Vuc2VkLCBub3Qgc29sZC4KKworSUJNIGdyYW50cyBZb3UgYSBub25leGNsdXNpdmUgbGljZW5zZSB0byB1c2UgdGhlIFByb2dyYW0gd2hlbiBZb3UgbGF3ZnVsbHkKK2FjcXVpcmUgaXQuCisKK1lvdSBtYXkgMSkgdXNlIHRoZSBQcm9ncmFtIG9ubHkgZm9yIGludGVybmFsIGV2YWx1YXRpb24gb3IgdGVzdGluZyBwdXJwb3NlcywKK2FuZCAyKSBtYWtlIGFuZCBpbnN0YWxsIGEgcmVhc29uYWJsZSBudW1iZXIgb2YgY29waWVzLCBpbmNsdWRpbmcgYSBiYWNrdXAKK2NvcHksIG9mIHRoZSBQcm9ncmFtIHRvIHN1cHBvcnQgc3VjaCB1c2UuIFRoZSB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UgYXBwbHkgdG8KK2VhY2ggY29weSBZb3UgbWFrZS4gWW91IHdpbGwgcmVwcm9kdWNlIGFsbCBjb3B5cmlnaHQgbm90aWNlcyBhbmQgYWxsIG90aGVyCitsZWdlbmRzIG9mIG93bmVyc2hpcCBvbiBlYWNoIGNvcHksIG9yIHBhcnRpYWwgY29weSwgb2YgdGhlIFByb2dyYW0uCisKK1RIRSBQUk9HUkFNIE1BWSBDT05UQUlOIEEgRElTQUJMSU5HIERFVklDRSBUSEFUIFdJTEwgUFJFVkVOVCBJVCBGUk9NIEJFSU5HCitVU0VEIEFGVEVSIFRIRSBFVkFMVUFUSU9OIFBFUklPRCBFTkRTLiBZT1UgV0lMTCBOT1QgVEFNUEVSIFdJVEggVEhJUyBESVNBQkxJTkcKK0RFVklDRSBPUiBUSEUgUFJPR1JBTS4gWU9VIFNIT1VMRCBUQUtFIFBSRUNBVVRJT05TIFRPIEFWT0lEIEFOWSBMT1NTIE9GIERBVEEKK1RIQVQgTUlHSFQgUkVTVUxUIFdIRU4gVEhFIFBST0dSQU0gQ0FOIE5PIExPTkdFUiBCRSBVU0VELgorCitZb3Ugd2lsbCAxKSBtYWludGFpbiBhIHJlY29yZCBvZiBhbGwgY29waWVzIG9mIHRoZSBQcm9ncmFtIGFuZCAyKSBlbnN1cmUgdGhhdAorYW55b25lIHdobyB1c2VzIHRoZSBQcm9ncmFtIChhY2Nlc3NlZCBlaXRoZXIgbG9jYWxseSBvciByZW1vdGVseSkgZG9lcyBzbyBvbmx5Citmb3IgWW91ciBhdXRob3JpemVkIHVzZSBhbmQgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQuCisKK1lvdSBtYXkgbm90IDEpIHVzZSwgY29weSwgbW9kaWZ5IG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gZXhjZXB0IGFzIHByb3ZpZGVkCitpbiB0aGlzIEFncmVlbWVudDsgMikgcmV2ZXJzZSBhc3NlbWJsZSwgcmV2ZXJzZSBjb21waWxlLCBvciBvdGhlcndpc2UKK3RyYW5zbGF0ZSB0aGUgUHJvZ3JhbSBleGNlcHQgYXMgc3BlY2lmaWNhbGx5IHBlcm1pdHRlZCBieSBsYXcgd2l0aG91dCB0aGUKK3Bvc3NpYmlsaXR5IG9mIGNvbnRyYWN0dWFsIHdhaXZlcjsgb3IgMykgc3VibGljZW5zZSwgcmVudCwgb3IgbGVhc2UgdGhlCitQcm9ncmFtLgorCitUaGUgZXZhbHVhdGlvbiBwZXJpb2QgYmVnaW5zIHdoZW4gWW91IGFncmVlIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCBhbmQKK2VuZHMgMSkgYXMgb2YgdGhlIGR1cmF0aW9uIG9yIGRhdGUgc3BlY2lmaWVkIGluIHRoZSBMaWNlbnNlIEluZm9ybWF0aW9uLCAyKQord2hlbiB0aGUgUHJvZ3JhbSBhdXRvbWF0aWNhbGx5IGRpc2FibGVzIGl0c2VsZiwgb3IgMykgd2hlbiBJQk0gbWFrZXMgdGhlCitwcm9ncmFtIGNvbW1lcmNpYWxseSBhdmFpbGFibGUuIFlvdSB3aWxsIGRlc3Ryb3kgdGhlIFByb2dyYW0gYW5kIGFsbCBjb3BpZXMKK21hZGUgb2YgaXQgd2l0aGluIHRlbiBkYXlzIG9mIHRoZSBlbmQgb2YgdGhlIGV2YWx1YXRpb24gcGVyaW9kLiBUaGVyZSBpcyBubworY2hhcmdlIGZvciB0aGUgdXNlIG9mIFByb2dyYW0gZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgZXZhbHVhdGlvbiBwZXJpb2QuCisKK0lCTSBtYXkgdGVybWluYXRlIFlvdXIgbGljZW5zZSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhpcworQWdyZWVtZW50LiBJZiBJQk0gZG9lcyBzbywgWW91IG11c3QgZGVzdHJveSBhbGwgY29waWVzIG9mIHRoZSBQcm9ncmFtLgorCisyLiBSaWdodHMgSW4gRGF0YQorCitZb3UgYXNzaWduIHRvIElCTSBhbGwgcmlnaHQsIHRpdGxlLCBhbmQgaW50ZXJlc3QgKGluY2x1ZGluZyBvd25lcnNoaXAgb2YKK2NvcHlyaWdodCkgaW4gYW55IGRhdGEsIHN1Z2dlc3Rpb25zLCBhbmQgd3JpdHRlbiBtYXRlcmlhbHMgdGhhdCAxKSBpcyByZWxhdGVkCit0byBZb3VyIHVzZSBvZiB0aGUgUHJvZ3JhbSBhbmQgMikgWW91IHByb3ZpZGUgdG8gSUJNLiBJZiBJQk0gcmVxdWlyZXMgaXQsIFlvdQord2lsbCBzaWduIGFuIGFwcHJvcHJpYXRlIGRvY3VtZW50IHRvIGFzc2lnbiBzdWNoIHJpZ2h0cy4gTmVpdGhlciBwYXJ0eSB3aWxsCitjaGFyZ2UgdGhlIG90aGVyIGZvciByaWdodHMgaW4gZGF0YSBvciBhbnkgd29yayBwZXJmb3JtZWQgYXMgYSByZXN1bHQgb2YgdGhpcworQWdyZWVtZW50LgorCiszLiBObyBXYXJyYW50eQorCitTVUJKRUNUIFRPIEFOWSBTVEFUVVRPUlkgV0FSUkFOVElFUyBXSElDSCBDQU5OT1QgQkUgRVhDTFVERUQsIElCTSBNQUtFUyBOTworV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBCitQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBOT04tSU5GUklOR0VNRU5ULCBSRUdBUkRJTkcgVEhFIFBST0dSQU0gT1IgVEVDSE5JQ0FMCitTVVBQT1JULCBJRiBBTlkuCisKK1RoZSBleGNsdXNpb24gYWxzbyBhcHBsaWVzIHRvIGFueSBvZiBJQk0ncyBQcm9ncmFtIGRldmVsb3BlcnMgYW5kIHN1cHBsaWVycy4KKworTWFudWZhY3R1cmVycywgc3VwcGxpZXJzLCBvciBwdWJsaXNoZXJzIG9mIG5vbi1JQk0gUHJvZ3JhbXMgbWF5IHByb3ZpZGUgdGhlaXIKK293biB3YXJyYW50aWVzLgorCitJQk0gZG9lcyBub3QgcHJvdmlkZSB0ZWNobmljYWwgc3VwcG9ydCwgdW5sZXNzIElCTSBzcGVjaWZpZXMgb3RoZXJ3aXNlLgorCis0LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eQorCitDaXJjdW1zdGFuY2VzIG1heSBhcmlzZSB3aGVyZSwgYmVjYXVzZSBvZiBhIGRlZmF1bHQgb24gSUJNJ3MgcGFydCBvciBvdGhlcgorbGlhYmlsaXR5LCBZb3UgYXJlIGVudGl0bGVkIHRvIHJlY292ZXIgZGFtYWdlcyBmcm9tIElCTS4gSW4gZWFjaCBzdWNoCitpbnN0YW5jZSwgcmVnYXJkbGVzcyBvZiB0aGUgYmFzaXMgb24gd2hpY2ggWW91IG1heSBiZSBlbnRpdGxlZCB0byBjbGFpbQorZGFtYWdlcyBmcm9tIElCTSwgKGluY2x1ZGluZyBmdW5kYW1lbnRhbCBicmVhY2gsIG5lZ2xpZ2VuY2UsCittaXNyZXByZXNlbnRhdGlvbiwgb3Igb3RoZXIgY29udHJhY3Qgb3IgdG9ydCBjbGFpbSksIElCTSBpcyBsaWFibGUgZm9yIG5vIG1vcmUKK3RoYW4gMSkgZGFtYWdlcyBmb3IgYm9kaWx5IGluanVyeSAoaW5jbHVkaW5nIGRlYXRoKSBhbmQgZGFtYWdlIHRvIHJlYWwKK3Byb3BlcnR5IGFuZCB0YW5naWJsZSBwZXJzb25hbCBwcm9wZXJ0eSBhbmQgMikgdGhlIGFtb3VudCBvZiBhbnkgb3RoZXIgYWN0dWFsCitkaXJlY3QgZGFtYWdlcyB1cCB0byB0aGUgY2hhcmdlcyBmb3IgdGhlIFByb2dyYW0gdGhhdCBpcyB0aGUgc3ViamVjdCBvZiB0aGUKK2NsYWltLgorCitUaGlzIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IGFsc28gYXBwbGllcyB0byBJQk0ncyBQcm9ncmFtIGRldmVsb3BlcnMgYW5kCitzdXBwbGllcnMuIEl0IGlzIHRoZSBtYXhpbXVtIGZvciB3aGljaCB0aGV5IGFuZCBJQk0gYXJlIGNvbGxlY3RpdmVseQorcmVzcG9uc2libGUuCisKK1VOREVSIE5PIENJUkNVTVNUQU5DRVMgSVMgSUJNLCBJVFMgUFJPR1JBTSBERVZFTE9QRVJTIE9SIFNVUFBMSUVSUyBMSUFCTEUgRk9SCitBTlkgT0YgVEhFIEZPTExPV0lORywgRVZFTiBJRiBJTkZPUk1FRCBPRiBUSEVJUiBQT1NTSUJJTElUWToKKworMS4gTE9TUyBPRiwgT1IgREFNQUdFIFRPLCBEQVRBOworCisyLiBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBJTkRJUkVDVCBEQU1BR0VTLCBPUiBGT1IgQU5ZIEVDT05PTUlDIENPTlNFUVVFTlRJQUwKK0RBTUFHRVM7IE9SCisKKzMuIExPU1QgUFJPRklUUywgQlVTSU5FU1MsIFJFVkVOVUUsIEdPT0RXSUxMLCBPUiBBTlRJQ0lQQVRFRCBTQVZJTkdTLgorCitTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRIRSBBQk9WRSBMSU1JVEFUSU9OIE9SIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPCitZT1UuCisKKzUuIEdlbmVyYWwKKworMS4gTm90aGluZyBpbiB0aGlzIEFncmVlbWVudCBhZmZlY3RzIGFueSBzdGF0dXRvcnkgcmlnaHRzIG9mIGNvbnN1bWVycyB0aGF0CitjYW5ub3QgYmUgd2FpdmVkIG9yIGxpbWl0ZWQgYnkgY29udHJhY3QuCisKKzIuIEluIHRoZSBldmVudCB0aGF0IGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaGVsZCB0byBiZSBpbnZhbGlkIG9yCit1bmVuZm9yY2VhYmxlLCB0aGUgcmVtYWluaW5nIHByb3Zpc2lvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgcmVtYWluIGluIGZ1bGwgZm9yY2UKK2FuZCBlZmZlY3QuCisKKzMuIFlvdSBtYXkgbm90IGV4cG9ydCB0aGUgUHJvZ3JhbS4KKworNC4gWW91IGFncmVlIHRvIGFsbG93IElCTSB0byBzdG9yZSBhbmQgdXNlIFlvdXIgY29udGFjdCBpbmZvcm1hdGlvbiwgaW5jbHVkaW5nCituYW1lcywgcGhvbmUgbnVtYmVycywgYW5kIGUtbWFpbCBhZGRyZXNzZXMsIGFueXdoZXJlIHRoZXkgZG8gYnVzaW5lc3MuIFN1Y2gKK2luZm9ybWF0aW9uIHdpbGwgYmUgcHJvY2Vzc2VkIGFuZCB1c2VkIGluIGNvbm5lY3Rpb24gd2l0aCBvdXIgYnVzaW5lc3MKK3JlbGF0aW9uc2hpcCwgYW5kIG1heSBiZSBwcm92aWRlZCB0byBjb250cmFjdG9ycywgQnVzaW5lc3MgUGFydG5lcnMsIGFuZAorYXNzaWduZWVzIG9mIElCTSBmb3IgdXNlcyBjb25zaXN0ZW50IHdpdGggdGhlaXIgY29sbGVjdGl2ZSBidXNpbmVzcworYWN0aXZpdGllcywgaW5jbHVkaW5nIGNvbW11bmljYXRpbmcgd2l0aCBZb3UgKGZvciBleGFtcGxlLCBmb3IgcHJvY2Vzc2luZworb3JkZXJzLCBmb3IgcHJvbW90aW9ucywgYW5kIGZvciBtYXJrZXQgcmVzZWFyY2gpLgorCis1LiBOZWl0aGVyIFlvdSBub3IgSUJNIHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcyBBZ3JlZW1lbnQgbW9yZQordGhhbiB0d28geWVhcnMgYWZ0ZXIgdGhlIGNhdXNlIG9mIGFjdGlvbiBhcm9zZSB1bmxlc3Mgb3RoZXJ3aXNlIHByb3ZpZGVkIGJ5Citsb2NhbCBsYXcgd2l0aG91dCB0aGUgcG9zc2liaWxpdHkgb2YgY29udHJhY3R1YWwgd2FpdmVyIG9yIGxpbWl0YXRpb24uCisKKzYuIE5laXRoZXIgWW91IG5vciBJQk0gaXMgcmVzcG9uc2libGUgZm9yIGZhaWx1cmUgdG8gZnVsZmlsbCBhbnkgb2JsaWdhdGlvbnMKK2R1ZSB0byBjYXVzZXMgYmV5b25kIGl0cyBjb250cm9sLgorCis3LiBUaGlzIEFncmVlbWVudCB3aWxsIG5vdCBjcmVhdGUgYW55IHJpZ2h0IG9yIGNhdXNlIG9mIGFjdGlvbiBmb3IgYW55IHRoaXJkCitwYXJ0eSwgbm9yIHdpbGwgSUJNIGJlIHJlc3BvbnNpYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zIGFnYWluc3QgWW91CitleGNlcHQsIGFzIHBlcm1pdHRlZCBieSB0aGUgTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkgc2VjdGlvbiBhYm92ZSwgZm9yIGJvZGlseQoraW5qdXJ5IChpbmNsdWRpbmcgZGVhdGgpIG9yIGRhbWFnZSB0byByZWFsIG9yIHRhbmdpYmxlIHBlcnNvbmFsIHByb3BlcnR5IGZvcgord2hpY2ggSUJNIGlzIGxlZ2FsbHkgbGlhYmxlLgorCis2LiBHb3Zlcm5pbmcgTGF3LCBKdXJpc2RpY3Rpb24sIGFuZCBBcmJpdHJhdGlvbgorCitHb3Zlcm5pbmcgTGF3CisKK0JvdGggWW91IGFuZCBJQk0gY29uc2VudCB0byB0aGUgYXBwbGljYXRpb24gb2YgdGhlIGxhd3Mgb2YgdGhlIGNvdW50cnkgaW4KK3doaWNoIFlvdSBhY3F1aXJlZCB0aGUgUHJvZ3JhbSBsaWNlbnNlIHRvIGdvdmVybiwgaW50ZXJwcmV0LCBhbmQgZW5mb3JjZSBhbGwKK29mIFlvdXIgYW5kIElCTSdzIHJpZ2h0cywgZHV0aWVzLCBhbmQgb2JsaWdhdGlvbnMgYXJpc2luZyBmcm9tLCBvciByZWxhdGluZyBpbgorYW55IG1hbm5lciB0bywgdGhlIHN1YmplY3QgbWF0dGVyIG9mIHRoaXMgQWdyZWVtZW50LCB3aXRob3V0IHJlZ2FyZCB0bworY29uZmxpY3Qgb2YgbGF3IHByaW5jaXBsZXMuCisKK1RoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcworZG9lcyBub3QgYXBwbHkuCisKK0p1cmlzZGljdGlvbgorCitBbGwgb2Ygb3VyIHJpZ2h0cywgZHV0aWVzLCBhbmQgb2JsaWdhdGlvbnMgYXJlIHN1YmplY3QgdG8gdGhlIGNvdXJ0cyBvZiB0aGUKK2NvdW50cnkgaW4gd2hpY2ggWW91IGFjcXVpcmVkIHRoZSBQcm9ncmFtIGxpY2Vuc2UuCisKK1BhcnQgMiAtIENvdW50cnktdW5pcXVlIFRlcm1zCisKK0FNRVJJQ0FTCisKK0FSR0VOVElOQTogR292ZXJuaW5nIExhdywgSnVyaXNkaWN0aW9uLCBhbmQgQXJiaXRyYXRpb24gKFNlY3Rpb24gNik6IFRoZQorZm9sbG93aW5nIGV4Y2VwdGlvbiBpcyBhZGRlZCB0byB0aGlzIHNlY3Rpb246CisKK0FueSBsaXRpZ2F0aW9uIGFyaXNpbmcgZnJvbSB0aGlzIEFncmVlbWVudCB3aWxsIGJlIHNldHRsZWQgZXhjbHVzaXZlbHkgYnkgdGhlCitPcmRpbmFyeSBDb21tZXJjaWFsIENvdXJ0IG9mIHRoZSBjaXR5IG9mIEJ1ZW5vcyBBaXJlcy4KKworQlJBWklMOiBHb3Zlcm5pbmcgTGF3LCBKdXJpc2RpY3Rpb24sIGFuZCBBcmJpdHJhdGlvbiAoU2VjdGlvbiA2KTogVGhlCitmb2xsb3dpbmcgZXhjZXB0aW9uIGlzIGFkZGVkIHRvIHRoaXMgc2VjdGlvbjoKKworQW55IGxpdGlnYXRpb24gYXJpc2luZyBmcm9tIHRoaXMgQWdyZWVtZW50IHdpbGwgYmUgc2V0dGxlZCBleGNsdXNpdmVseSBieSB0aGUKK2NvdXJ0IG9mIFJpbyBkZSBKYW5laXJvLCBSSi4KKworQ0FOQURBOiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eSAoU2VjdGlvbiA0KTogVGhlIGZvbGxvd2luZyByZXBsYWNlcyBpdGVtIDEgaW4KK3RoZSBmaXJzdCBwYXJhZ3JhcGggb2YgdGhpcyBzZWN0aW9uOgorCisxKSBkYW1hZ2VzIGZvciBib2RpbHkgaW5qdXJ5IChpbmNsdWRpbmcgZGVhdGgpIGFuZCBwaHlzaWNhbCBoYXJtIHRvIHJlYWwKK3Byb3BlcnR5IGFuZCB0YW5naWJsZSBwZXJzb25hbCBwcm9wZXJ0eSBjYXVzZWQgYnkgSUJNJ3MgbmVnbGlnZW5jZTsgYW5kCisKK0dlbmVyYWwgKFNlY3Rpb24gNSk6IFRoZSBmb2xsb3dpbmcgcmVwbGFjZXMgdGhlIHRlcm1zIGluIGl0ZW0gNzoKKworNy4gVGhpcyBBZ3JlZW1lbnQgd2lsbCBub3QgY3JlYXRlIGFueSByaWdodCBvciBjYXVzZSBvZiBhY3Rpb24gZm9yIGFueSB0aGlyZAorcGFydHksIG5vciB3aWxsIElCTSBiZSByZXNwb25zaWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IFlvdQorZXhjZXB0IGFzIHBlcm1pdHRlZCBieSB0aGUgTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkgc2VjdGlvbiBhYm92ZSBmb3IgYm9kaWx5Citpbmp1cnkgKGluY2x1ZGluZyBkZWF0aCkgb3IgcGh5c2ljYWwgaGFybSB0byByZWFsIG9yIHRhbmdpYmxlIHBlcnNvbmFsCitwcm9wZXJ0eSBjYXVzZWQgYnkgSUJNJ3MgbmVnbGlnZW5jZSBmb3Igd2hpY2ggSUJNIGlzIGxlZ2FsbHkgbGlhYmxlLgorCitHb3Zlcm5pbmcgTGF3LCBKdXJpc2RpY3Rpb24sIGFuZCBBcmJpdHJhdGlvbiAoU2VjdGlvbiA2KTogVGhlIHBocmFzZSAidGhlIGxhd3MKK29mIHRoZSBjb3VudHJ5IGluIHdoaWNoIFlvdSBhY3F1aXJlZCB0aGUgUHJvZ3JhbSBsaWNlbnNlIiBpbiB0aGUgR292ZXJuaW5nIExhdworc3Vic2VjdGlvbiBpcyByZXBsYWNlZCBieSB0aGUgZm9sbG93aW5nOgorCit0aGUgbGF3cyBpbiB0aGUgUHJvdmluY2Ugb2YgT250YXJpbworCitQRVJVOiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eSAoU2VjdGlvbiA0KTogVGhlIGZvbGxvd2luZyBpcyBhZGRlZCBhdCB0aGUgZW5kCitvZiB0aGlzIHNlY3Rpb246CisKK0luIGFjY29yZGFuY2Ugd2l0aCBBcnRpY2xlIDEzMjggb2YgdGhlIFBlcnV2aWFuIENpdmlsIENvZGUsIHRoZSBsaW1pdGF0aW9ucworYW5kIGV4Y2x1c2lvbnMgc3BlY2lmaWVkIGluIHRoaXMgc2VjdGlvbiB3aWxsIG5vdCBhcHBseSB0byBkYW1hZ2VzIGNhdXNlZCBieQorSUJNJ3Mgd2lsbGZ1bCBtaXNjb25kdWN0ICgiZG9sbyIpIG9yIGdyb3NzIG5lZ2xpZ2VuY2UgKCJjdWxwYSBpbmV4Y3VzYWJsZSIpLgorCitVTklURUQgU1RBVEVTIE9GIEFNRVJJQ0E6IEdlbmVyYWwgKFNlY3Rpb24gNSk6IFRoZSBmb2xsb3dpbmcgaXMgYWRkZWQgdG8gdGhpcworc2VjdGlvbjoKKworVS5TLiBHb3Zlcm5tZW50IFVzZXJzIFJlc3RyaWN0ZWQgUmlnaHRzIC0gVXNlLCBkdXBsaWNhdGlvbiBvciBkaXNjbG9zdXJlCityZXN0cmljdGVkIGJ5IHRoZSBHU0EgQURQIFNjaGVkdWxlIENvbnRyYWN0IHdpdGggdGhlIElCTSBDb3Jwb3JhdGlvbi4KKworR292ZXJuaW5nIExhdywgSnVyaXNkaWN0aW9uLCBhbmQgQXJiaXRyYXRpb24gKFNlY3Rpb24gNik6IFRoZSBwaHJhc2UgInRoZSBsYXdzCitvZiB0aGUgY291bnRyeSBpbiB3aGljaCBZb3UgYWNxdWlyZWQgdGhlIFByb2dyYW0gbGljZW5zZSIgaW4gdGhlIEdvdmVybmluZyBMYXcKK3N1YnNlY3Rpb24gaXMgcmVwbGFjZWQgYnkgdGhlIGZvbGxvd2luZzoKKwordGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIE5ldyBZb3JrLCBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EKKworQVNJQSBQQUNJRklDCisKK0FVU1RSQUxJQTogTm8gV2FycmFudHkgKFNlY3Rpb24gMyk6IFRoZSBmb2xsb3dpbmcgaXMgYWRkZWQ6CisKK0FsdGhvdWdoIElCTSBzcGVjaWZpZXMgdGhhdCB0aGVyZSBhcmUgbm8gd2FycmFudGllcywgWW91IG1heSBoYXZlIGNlcnRhaW4KK3JpZ2h0cyB1bmRlciB0aGUgVHJhZGUgUHJhY3RpY2VzIEFjdCAxOTc0IG9yIG90aGVyIGxlZ2lzbGF0aW9uIGFuZCBhcmUgb25seQorbGltaXRlZCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSB0aGUgYXBwbGljYWJsZSBsZWdpc2xhdGlvbi4KKworTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkgKFNlY3Rpb24gNCk6IFRoZSBmb2xsb3dpbmcgaXMgYWRkZWQ6CisKK1doZXJlIElCTSBpcyBpbiBicmVhY2ggb2YgYSBjb25kaXRpb24gb3Igd2FycmFudHkgaW1wbGllZCBieSB0aGUgVHJhZGUKK1ByYWN0aWNlcyBBY3QgMTk3NCwgSUJNJ3MgbGlhYmlsaXR5IGlzIGxpbWl0ZWQgdG8gdGhlIHJlcGFpciBvciByZXBsYWNlbWVudCBvZgordGhlIGdvb2RzLCBvciB0aGUgc3VwcGx5IG9mIGVxdWl2YWxlbnQgZ29vZHMuIFdoZXJlIHRoYXQgY29uZGl0aW9uIG9yIHdhcnJhbnR5CityZWxhdGVzIHRvIHJpZ2h0IHRvIHNlbGwsIHF1aWV0IHBvc3Nlc3Npb24gb3IgY2xlYXIgdGl0bGUsIG9yIHRoZSBnb29kcyBhcmUgb2YKK2Ega2luZCBvcmRpbmFyaWx5IGFjcXVpcmVkIGZvciBwZXJzb25hbCwgZG9tZXN0aWMgb3IgaG91c2Vob2xkIHVzZSBvcgorY29uc3VtcHRpb24sIHRoZW4gbm9uZSBvZiB0aGUgbGltaXRhdGlvbnMgaW4gdGhpcyBwYXJhZ3JhcGggYXBwbHkuCisKK0dvdmVybmluZyBMYXcsIEp1cmlzZGljdGlvbiwgYW5kIEFyYml0cmF0aW9uIChTZWN0aW9uIDYpOiBUaGUgcGhyYXNlICJ0aGUgbGF3cworb2YgdGhlIGNvdW50cnkgaW4gd2hpY2ggWW91IGFjcXVpcmVkIHRoZSBQcm9ncmFtIGxpY2Vuc2UiIGluIHRoZSBHb3Zlcm5pbmcgTGF3CitzdWJzZWN0aW9uIGlzIHJlcGxhY2VkIGJ5IHRoZSBmb2xsb3dpbmc6CisKK3RoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvciBUZXJyaXRvcnkgaW4gd2hpY2ggWW91IGFjcXVpcmVkIHRoZSBQcm9ncmFtIGxpY2Vuc2UKKworQ0FNQk9ESUEsIExBT1MsIGFuZCBWSUVUTkFNOiBHb3Zlcm5pbmcgTGF3LCBKdXJpc2RpY3Rpb24sIGFuZCBBcmJpdHJhdGlvbgorKFNlY3Rpb24gNik6IFRoZSBwaHJhc2UgInRoZSBsYXdzIG9mIHRoZSBjb3VudHJ5IGluIHdoaWNoIFlvdSBhY3F1aXJlZCB0aGUKK1Byb2dyYW0gbGljZW5zZSIgaW4gdGhlIEdvdmVybmluZyBMYXcgc3Vic2VjdGlvbiBpcyByZXBsYWNlZCBieSB0aGUgZm9sbG93aW5nOgorCit0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgTmV3IFlvcmssIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYQorCitUaGUgZm9sbG93aW5nIGlzIGFkZGVkIHRvIHRoaXMgc2VjdGlvbjoKKworQXJiaXRyYXRpb24KKworRGlzcHV0ZXMgYXJpc2luZyBvdXQgb2Ygb3IgaW4gY29ubmVjdGlvbiB3aXRoIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGZpbmFsbHkKK3NldHRsZWQgYnkgYXJiaXRyYXRpb24gd2hpY2ggc2hhbGwgYmUgaGVsZCBpbiBTaW5nYXBvcmUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZQorQXJiaXRyYXRpb24gUnVsZXMgb2YgU2luZ2Fwb3JlIEludGVybmF0aW9uYWwgQXJiaXRyYXRpb24gQ2VudGVyICgiU0lBQyBSdWxlcyIpCit0aGVuIGluIGVmZmVjdC4gVGhlIGFyYml0cmF0aW9uIGF3YXJkIHNoYWxsIGJlIGZpbmFsIGFuZCBiaW5kaW5nIGZvciB0aGUKK3BhcnRpZXMgd2l0aG91dCBhcHBlYWwgYW5kIHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNldCBmb3J0aCB0aGUgZmluZGluZ3Mgb2YKK2ZhY3QgYW5kIHRoZSBjb25jbHVzaW9ucyBvZiBsYXcuCisKK1RoZSBudW1iZXIgb2YgYXJiaXRyYXRvcnMgc2hhbGwgYmUgdGhyZWUsIHdpdGggZWFjaCBzaWRlIHRvIHRoZSBkaXNwdXRlIGJlaW5nCitlbnRpdGxlZCB0byBhcHBvaW50IG9uZSBhcmJpdHJhdG9yLiBUaGUgdHdvIGFyYml0cmF0b3JzIGFwcG9pbnRlZCBieSB0aGUKK3BhcnRpZXMgc2hhbGwgYXBwb2ludCBhIHRoaXJkIGFyYml0cmF0b3Igd2hvIHNoYWxsIGFjdCBhcyBjaGFpcm1hbiBvZiB0aGUKK3Byb2NlZWRpbmdzLiBWYWNhbmNpZXMgaW4gdGhlIHBvc3Qgb2YgY2hhaXJtYW4gc2hhbGwgYmUgZmlsbGVkIGJ5IHRoZQorcHJlc2lkZW50IG9mIHRoZSBTSUFDLiBPdGhlciB2YWNhbmNpZXMgc2hhbGwgYmUgZmlsbGVkIGJ5IHRoZSByZXNwZWN0aXZlCitub21pbmF0aW5nIHBhcnR5LiBQcm9jZWVkaW5ncyBzaGFsbCBjb250aW51ZSBmcm9tIHRoZSBzdGFnZSB0aGV5IHdlcmUgYXQgd2hlbgordGhlIHZhY2FuY3kgb2NjdXJyZWQuCisKK0lmIG9uZSBvZiB0aGUgcGFydGllcyByZWZ1c2VzIG9yIG90aGVyd2lzZSBmYWlscyB0byBhcHBvaW50IGFuIGFyYml0cmF0b3IKK3dpdGhpbiAzMCBkYXlzIG9mIHRoZSBkYXRlIHRoZSBvdGhlciBwYXJ0eSBhcHBvaW50cyBpdHMsIHRoZSBmaXJzdCBhcHBvaW50ZWQKK2FyYml0cmF0b3Igc2hhbGwgYmUgdGhlIHNvbGUgYXJiaXRyYXRvciwgcHJvdmlkZWQgdGhhdCB0aGUgYXJiaXRyYXRvciB3YXMKK3ZhbGlkbHkgYW5kIHByb3Blcmx5IGFwcG9pbnRlZC4KKworQWxsIHByb2NlZWRpbmdzIHNoYWxsIGJlIGNvbmR1Y3RlZCwgaW5jbHVkaW5nIGFsbCBkb2N1bWVudHMgcHJlc2VudGVkIGluIHN1Y2gKK3Byb2NlZWRpbmdzLCBpbiB0aGUgRW5nbGlzaCBsYW5ndWFnZS4gVGhlIEVuZ2xpc2ggbGFuZ3VhZ2UgdmVyc2lvbiBvZiB0aGlzCitBZ3JlZW1lbnQgcHJldmFpbHMgb3ZlciBhbnkgb3RoZXIgbGFuZ3VhZ2UgdmVyc2lvbi4KKworSE9ORyBLT05HIFMuQS5SLiBhbmQgTUFDQVUgUy5BLlIuIG9mIENoaW5hOiBHb3Zlcm5pbmcgTGF3LCBKdXJpc2RpY3Rpb24sIGFuZAorQXJiaXRyYXRpb24gKFNlY3Rpb24gNik6IFRoZSBwaHJhc2UgInRoZSBsYXdzIG9mIHRoZSBjb3VudHJ5IGluIHdoaWNoIFlvdQorYWNxdWlyZWQgdGhlIFByb2dyYW0gbGljZW5zZSIgaW4gdGhlIEdvdmVybmluZyBMYXcgc3Vic2VjdGlvbiBpcyByZXBsYWNlZCBieQordGhlIGZvbGxvd2luZzoKKwordGhlIGxhd3Mgb2YgSG9uZyBLb25nIFNwZWNpYWwgQWRtaW5pc3RyYXRpdmUgUmVnaW9uIG9mIENoaW5hCisKK0lORElBOiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eSAoU2VjdGlvbiA0KTogVGhlIGZvbGxvd2luZyByZXBsYWNlcyB0aGUgdGVybXMKK29mIGl0ZW1zIDEgYW5kIDIgb2YgdGhlIGZpcnN0IHBhcmFncmFwaDoKKworMSkgbGlhYmlsaXR5IGZvciBib2RpbHkgaW5qdXJ5IChpbmNsdWRpbmcgZGVhdGgpIG9yIGRhbWFnZSB0byByZWFsIHByb3BlcnR5CithbmQgdGFuZ2libGUgcGVyc29uYWwgcHJvcGVydHkgd2lsbCBiZSBsaW1pdGVkIHRvIHRoYXQgY2F1c2VkIGJ5IElCTSdzCituZWdsaWdlbmNlOyBhbmQgMikgYXMgdG8gYW55IG90aGVyIGFjdHVhbCBkYW1hZ2UgYXJpc2luZyBpbiBhbnkgc2l0dWF0aW9uCitpbnZvbHZpbmcgbm9ucGVyZm9ybWFuY2UgYnkgSUJNIHB1cnN1YW50IHRvLCBvciBpbiBhbnkgd2F5IHJlbGF0ZWQgdG8gdGhlCitzdWJqZWN0IG9mIHRoaXMgQWdyZWVtZW50LCBJQk0ncyBsaWFiaWxpdHkgd2lsbCBiZSBsaW1pdGVkIHRvIHRoZSBjaGFyZ2UgcGFpZAorYnkgWW91IGZvciB0aGUgaW5kaXZpZHVhbCBQcm9ncmFtIHRoYXQgaXMgdGhlIHN1YmplY3Qgb2YgdGhlIGNsYWltLgorCitHZW5lcmFsIChTZWN0aW9uIDUpOiBUaGUgZm9sbG93aW5nIHJlcGxhY2VzIHRoZSB0ZXJtcyBvZiBpdGVtIDU6CisKK0lmIG5vIHN1aXQgb3Igb3RoZXIgbGVnYWwgYWN0aW9uIGlzIGJyb3VnaHQsIHdpdGhpbiB0aHJlZSB5ZWFycyBhZnRlciB0aGUKK2NhdXNlIG9mIGFjdGlvbiBhcm9zZSwgaW4gcmVzcGVjdCBvZiBhbnkgY2xhaW0gdGhhdCBlaXRoZXIgcGFydHkgbWF5IGhhdmUKK2FnYWluc3QgdGhlIG90aGVyLCB0aGUgcmlnaHRzIG9mIHRoZSBjb25jZXJuZWQgcGFydHkgaW4gcmVzcGVjdCBvZiBzdWNoIGNsYWltCit3aWxsIGJlIGZvcmZlaXRlZCBhbmQgdGhlIG90aGVyIHBhcnR5IHdpbGwgc3RhbmQgcmVsZWFzZWQgZnJvbSBpdHMgb2JsaWdhdGlvbnMKK2luIHJlc3BlY3Qgb2Ygc3VjaCBjbGFpbS4KKworR292ZXJuaW5nIExhdywgSnVyaXNkaWN0aW9uLCBhbmQgQXJiaXRyYXRpb24gKFNlY3Rpb24gNik6IFRoZSBmb2xsb3dpbmcgaXMKK2FkZGVkIHRvIHRoaXMgc2VjdGlvbjoKKworQXJiaXRyYXRpb24KKworRGlzcHV0ZXMgYXJpc2luZyBvdXQgb2Ygb3IgaW4gY29ubmVjdGlvbiB3aXRoIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGZpbmFsbHkKK3NldHRsZWQgYnkgYXJiaXRyYXRpb24gd2hpY2ggc2hhbGwgYmUgaGVsZCBpbiBCYW5nYWxvcmUsIEluZGlhIGluIGFjY29yZGFuY2UKK3dpdGggdGhlIGxhd3Mgb2YgSW5kaWEgdGhlbiBpbiBlZmZlY3QuIFRoZSBhcmJpdHJhdGlvbiBhd2FyZCBzaGFsbCBiZSBmaW5hbAorYW5kIGJpbmRpbmcgZm9yIHRoZSBwYXJ0aWVzIHdpdGhvdXQgYXBwZWFsIGFuZCBzaGFsbCBiZSBpbiB3cml0aW5nIGFuZCBzZXQKK2ZvcnRoIHRoZSBmaW5kaW5ncyBvZiBmYWN0IGFuZCB0aGUgY29uY2x1c2lvbnMgb2YgbGF3LgorCitUaGUgbnVtYmVyIG9mIGFyYml0cmF0b3JzIHNoYWxsIGJlIHRocmVlLCB3aXRoIGVhY2ggc2lkZSB0byB0aGUgZGlzcHV0ZSBiZWluZworZW50aXRsZWQgdG8gYXBwb2ludCBvbmUgYXJiaXRyYXRvci4gVGhlIHR3byBhcmJpdHJhdG9ycyBhcHBvaW50ZWQgYnkgdGhlCitwYXJ0aWVzIHNoYWxsIGFwcG9pbnQgYSB0aGlyZCBhcmJpdHJhdG9yIHdobyBzaGFsbCBhY3QgYXMgY2hhaXJtYW4gb2YgdGhlCitwcm9jZWVkaW5ncy4gVmFjYW5jaWVzIGluIHRoZSBwb3N0IG9mIGNoYWlybWFuIHNoYWxsIGJlIGZpbGxlZCBieSB0aGUKK3ByZXNpZGVudCBvZiB0aGUgQmFyIENvdW5jaWwgb2YgSW5kaWEuIE90aGVyIHZhY2FuY2llcyBzaGFsbCBiZSBmaWxsZWQgYnkgdGhlCityZXNwZWN0aXZlIG5vbWluYXRpbmcgcGFydHkuIFByb2NlZWRpbmdzIHNoYWxsIGNvbnRpbnVlIGZyb20gdGhlIHN0YWdlIHRoZXkKK3dlcmUgYXQgd2hlbiB0aGUgdmFjYW5jeSBvY2N1cnJlZC4KKworSWYgb25lIG9mIHRoZSBwYXJ0aWVzIHJlZnVzZXMgb3Igb3RoZXJ3aXNlIGZhaWxzIHRvIGFwcG9pbnQgYW4gYXJiaXRyYXRvcgord2l0aGluIDMwIGRheXMgb2YgdGhlIGRhdGUgdGhlIG90aGVyIHBhcnR5IGFwcG9pbnRzIGl0cywgdGhlIGZpcnN0IGFwcG9pbnRlZAorYXJiaXRyYXRvciBzaGFsbCBiZSB0aGUgc29sZSBhcmJpdHJhdG9yLCBwcm92aWRlZCB0aGF0IHRoZSBhcmJpdHJhdG9yIHdhcwordmFsaWRseSBhbmQgcHJvcGVybHkgYXBwb2ludGVkLgorCitBbGwgcHJvY2VlZGluZ3Mgc2hhbGwgYmUgY29uZHVjdGVkLCBpbmNsdWRpbmcgYWxsIGRvY3VtZW50cyBwcmVzZW50ZWQgaW4gc3VjaAorcHJvY2VlZGluZ3MsIGluIHRoZSBFbmdsaXNoIGxhbmd1YWdlLiBUaGUgRW5nbGlzaCBsYW5ndWFnZSB2ZXJzaW9uIG9mIHRoaXMKK0FncmVlbWVudCBwcmV2YWlscyBvdmVyIGFueSBvdGhlciBsYW5ndWFnZSB2ZXJzaW9uLgorCitKQVBBTjogR2VuZXJhbCAoU2VjdGlvbiA1KTogVGhlIGZvbGxvd2luZyBpcyBpbnNlcnRlZCBhZnRlciBpdGVtIDU6CisKK0FueSBkb3VidHMgY29uY2VybmluZyB0aGlzIEFncmVlbWVudCB3aWxsIGJlIGluaXRpYWxseSByZXNvbHZlZCBiZXR3ZWVuIHVzIGluCitnb29kIGZhaXRoIGFuZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHByaW5jaXBsZSBvZiBtdXR1YWwgdHJ1c3QuCisKK01BTEFZU0lBOiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eSAoU2VjdGlvbiA0KTogVGhlIHdvcmQgIlNQRUNJQUwiIGluIGl0ZW0gMiBvZgordGhlIHRoaXJkIHBhcmFncmFwaCBpcyBkZWxldGVkOgorCitORVcgWkVBTEFORDogTm8gV2FycmFudHkgKFNlY3Rpb24gMyk6IFRoZSBmb2xsb3dpbmcgaXMgYWRkZWQ6CisKK0FsdGhvdWdoIElCTSBzcGVjaWZpZXMgdGhhdCB0aGVyZSBhcmUgbm8gd2FycmFudGllcywgWW91IG1heSBoYXZlIGNlcnRhaW4KK3JpZ2h0cyB1bmRlciB0aGUgQ29uc3VtZXIgR3VhcmFudGVlcyBBY3QgMTk5MyBvciBvdGhlciBsZWdpc2xhdGlvbiB3aGljaAorY2Fubm90IGJlIGV4Y2x1ZGVkIG9yIGxpbWl0ZWQuIFRoZSBDb25zdW1lciBHdWFyYW50ZWVzIEFjdCAxOTkzIHdpbGwgbm90IGFwcGx5CitpbiByZXNwZWN0IG9mIGFueSBnb29kcyB3aGljaCBJQk0gcHJvdmlkZXMsIGlmIFlvdSByZXF1aXJlIHRoZSBnb29kcyBmb3IgdGhlCitwdXJwb3NlcyBvZiBhIGJ1c2luZXNzIGFzIGRlZmluZWQgaW4gdGhhdCBBY3QuCisKK0xpbWl0YXRpb24gb2YgTGlhYmlsaXR5IChTZWN0aW9uIDQpOiBUaGUgZm9sbG93aW5nIGlzIGFkZGVkOgorCitXaGVyZSBQcm9ncmFtcyBhcmUgbm90IGFjcXVpcmVkIGZvciB0aGUgcHVycG9zZXMgb2YgYSBidXNpbmVzcyBhcyBkZWZpbmVkIGluCit0aGUgQ29uc3VtZXIgR3VhcmFudGVlcyBBY3QgMTk5MywgdGhlIGxpbWl0YXRpb25zIGluIHRoaXMgU2VjdGlvbiBhcmUgc3ViamVjdAordG8gdGhlIGxpbWl0YXRpb25zIGluIHRoYXQgQWN0LgorCitQRU9QTEUnUyBSRVBVQkxJQyBPRiBDSElOQTogR292ZXJuaW5nIExhdywgSnVyaXNkaWN0aW9uLCBhbmQgQXJiaXRyYXRpb24KKyhTZWN0aW9uIDYpOiBUaGUgcGhyYXNlICJ0aGUgbGF3cyBvZiB0aGUgY291bnRyeSBpbiB3aGljaCBZb3UgYWNxdWlyZWQgdGhlCitQcm9ncmFtIGxpY2Vuc2UiIGluIHRoZSBHb3Zlcm5pbmcgTGF3IHN1YnNlY3Rpb24gaXMgcmVwbGFjZWQgYnkgdGhlIGZvbGxvd2luZzoKKwordGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIE5ldyBZb3JrLCBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EgKGV4Y2VwdCB3aGVuIGxvY2FsCitsYXcgcmVxdWlyZXMgb3RoZXJ3aXNlKQorCitQSElMSVBQSU5FUzogTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkgKFNlY3Rpb24gNCk6IFRoZSBmb2xsb3dpbmcgcmVwbGFjZXMgdGhlCit0ZXJtcyBvZiBpdGVtIDIgb2YgdGhlIHRoaXJkIHBhcmFncmFwaDoKKworMi4gc3BlY2lhbCAoaW5jbHVkaW5nIG5vbWluYWwgYW5kIGV4ZW1wbGFyeSBkYW1hZ2VzKSwgbW9yYWwsIGluY2lkZW50YWwsIG9yCitpbmRpcmVjdCBkYW1hZ2VzIG9yIGZvciBhbnkgZWNvbm9taWMgY29uc2VxdWVudGlhbCBkYW1hZ2VzOyBvcgorCitHb3Zlcm5pbmcgTGF3LCBKdXJpc2RpY3Rpb24sIGFuZCBBcmJpdHJhdGlvbiAoU2VjdGlvbiA2KTogVGhlIGZvbGxvd2luZyBpcworYWRkZWQgdG8gdGhpcyBzZWN0aW9uOgorCitBcmJpdHJhdGlvbgorCitEaXNwdXRlcyBhcmlzaW5nIG91dCBvZiBvciBpbiBjb25uZWN0aW9uIHdpdGggdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgZmluYWxseQorc2V0dGxlZCBieSBhcmJpdHJhdGlvbiB3aGljaCBzaGFsbCBiZSBoZWxkIGluIE1ldHJvIE1hbmlsYSwgUGhpbGlwcGluZXMgaW4KK2FjY29yZGFuY2Ugd2l0aCB0aGUgbGF3cyBvZiB0aGUgUGhpbGlwcGluZXMgdGhlbiBpbiBlZmZlY3QuIFRoZSBhcmJpdHJhdGlvbgorYXdhcmQgc2hhbGwgYmUgZmluYWwgYW5kIGJpbmRpbmcgZm9yIHRoZSBwYXJ0aWVzIHdpdGhvdXQgYXBwZWFsIGFuZCBzaGFsbCBiZQoraW4gd3JpdGluZyBhbmQgc2V0IGZvcnRoIHRoZSBmaW5kaW5ncyBvZiBmYWN0IGFuZCB0aGUgY29uY2x1c2lvbnMgb2YgbGF3LgorCitUaGUgbnVtYmVyIG9mIGFyYml0cmF0b3JzIHNoYWxsIGJlIHRocmVlLCB3aXRoIGVhY2ggc2lkZSB0byB0aGUgZGlzcHV0ZSBiZWluZworZW50aXRsZWQgdG8gYXBwb2ludCBvbmUgYXJiaXRyYXRvci4gVGhlIHR3byBhcmJpdHJhdG9ycyBhcHBvaW50ZWQgYnkgdGhlCitwYXJ0aWVzIHNoYWxsIGFwcG9pbnQgYSB0aGlyZCBhcmJpdHJhdG9yIHdobyBzaGFsbCBhY3QgYXMgY2hhaXJtYW4gb2YgdGhlCitwcm9jZWVkaW5ncy4gVmFjYW5jaWVzIGluIHRoZSBwb3N0IG9mIGNoYWlybWFuIHNoYWxsIGJlIGZpbGxlZCBieSB0aGUKK3ByZXNpZGVudCBvZiB0aGUgUGhpbGlwcGluZSBEaXNwdXRlIFJlc29sdXRpb24gQ2VudGVyLCBJbmMuIE90aGVyIHZhY2FuY2llcworc2hhbGwgYmUgZmlsbGVkIGJ5IHRoZSByZXNwZWN0aXZlIG5vbWluYXRpbmcgcGFydHkuIFByb2NlZWRpbmdzIHNoYWxsIGNvbnRpbnVlCitmcm9tIHRoZSBzdGFnZSB0aGV5IHdlcmUgYXQgd2hlbiB0aGUgdmFjYW5jeSBvY2N1cnJlZC4KKworSWYgb25lIG9mIHRoZSBwYXJ0aWVzIHJlZnVzZXMgb3Igb3RoZXJ3aXNlIGZhaWxzIHRvIGFwcG9pbnQgYW4gYXJiaXRyYXRvcgord2l0aGluIDMwIGRheXMgb2YgdGhlIGRhdGUgdGhlIG90aGVyIHBhcnR5IGFwcG9pbnRzIGl0cywgdGhlIGZpcnN0IGFwcG9pbnRlZAorYXJiaXRyYXRvciBzaGFsbCBiZSB0aGUgc29sZSBhcmJpdHJhdG9yLCBwcm92aWRlZCB0aGF0IHRoZSBhcmJpdHJhdG9yIHdhcwordmFsaWRseSBhbmQgcHJvcGVybHkgYXBwb2ludGVkLgorCitBbGwgcHJvY2VlZGluZ3Mgc2hhbGwgYmUgY29uZHVjdGVkLCBpbmNsdWRpbmcgYWxsIGRvY3VtZW50cyBwcmVzZW50ZWQgaW4gc3VjaAorcHJvY2VlZGluZ3MsIGluIHRoZSBFbmdsaXNoIGxhbmd1YWdlLiBUaGUgRW5nbGlzaCBsYW5ndWFnZSB2ZXJzaW9uIG9mIHRoaXMKK0FncmVlbWVudCBwcmV2YWlscyBvdmVyIGFueSBvdGhlciBsYW5ndWFnZSB2ZXJzaW9uLgorCitTSU5HQVBPUkU6IExpbWl0YXRpb24gb2YgTGlhYmlsaXR5IChTZWN0aW9uIDQpOiBUaGUgd29yZHMgIlNQRUNJQUwiIGFuZAorIkVDT05PTUlDIiBhcmUgZGVsZXRlZCBmcm9tIGl0ZW0gMiBvZiB0aGUgdGhpcmQgcGFyYWdyYXBoLgorCitHZW5lcmFsIChTZWN0aW9uIDUpOiBUaGUgZm9sbG93aW5nIHJlcGxhY2VzIHRoZSB0ZXJtcyBvZiBpdGVtIDc6CisKK1N1YmplY3QgdG8gdGhlIHJpZ2h0cyBwcm92aWRlZCB0byBJQk0ncyBzdXBwbGllcnMgYW5kIFByb2dyYW0gZGV2ZWxvcGVycyBhcworcHJvdmlkZWQgaW4gU2VjdGlvbiA0IGFib3ZlIChMaW1pdGF0aW9uIG9mIExpYWJpbGl0eSksIGEgcGVyc29uIHdobyBpcyBub3QgYQorcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgc2hhbGwgaGF2ZSBubyByaWdodCB1bmRlciB0aGUgQ29udHJhY3RzIChSaWdodCBvZgorVGhpcmQgUGFydGllcykgQWN0IHRvIGVuZm9yY2UgYW55IG9mIGl0cyB0ZXJtcy4KKworRVVST1BFLCBNSURETEUgRUFTVCwgQUZSSUNBIChFTUVBKQorCitSaWdodHMgaW4gRGF0YSAoU2VjdGlvbiAyKTogSW4gRU1FQSwgdGhlIGZvbGxvd2luZyByZXBsYWNlcyB0aGUgdGVybXMgb2YgdGhpcworc2VjdGlvbiBpbiB0aGVpciBlbnRpcmV0eToKKworWW91IGFzc2lnbiB0byBJQk0gYWxsIHJpZ2h0cywgdGl0bGUsIGFuZCBpbnRlcmVzdCB0aHJvdWdob3V0IHRoZSB3b3JsZAorKGluY2x1ZGluZyBvd25lcnNoaXAgb2YgY29weXJpZ2h0KSBpbiBhbnkgZGF0YSwgc3VnZ2VzdGlvbnMsIGFuZCB3cml0dGVuCittYXRlcmlhbHMgdGhhdCAxKSBpcyByZWxhdGVkIHRvIFlvdXIgdXNlIG9mIHRoZSBQcm9ncmFtIGFuZCAyKSBZb3UgcHJvdmlkZSB0bworSUJNLiBTdWNoIGFzc2lnbm1lbnQgb2YgcmlnaHRzIGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIGFzc2lnbm1lbnQgb2YKK3RoZSByaWdodHMgdG8gcHJlcGFyZSBhbmQgaGF2ZSBwcmVwYXJlZCBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSB3cml0dGVuCittYXRlcmlhbHMsIGFuZCB0byB1c2UsIGhhdmUgdXNlZCwgZXhlY3V0ZSwgcmVwcm9kdWNlLCB0cmFuc21pdCwgZGlzcGxheSwKK3BlcmZvcm0sIHRyYW5zZmVyLCBkaXN0cmlidXRlIGFuZCBsaWNlbnNlIHRoZSB3cml0dGVuIG1hdGVyaWFscyBhbmQgc3VjaAorZGVyaXZhdGl2ZSB3b3JrcyBpbiBhbnkgbWVkaXVtIG9yIGRpc3RyaWJ1dGlvbiB0ZWNobm9sb2d5LCBhbmQgdG8gZ3JhbnQgb3RoZXJzCitzb21lIG9yIGFsbCBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLCBmb3IgdGhlIGR1cmF0aW9uIG9mIGFsbCBzdWNoIHJpZ2h0cywKK3RpdGxlIGFuZCBpbnRlcmVzdC4gSWYgSUJNIHJlcXVpcmVzIGl0LCBZb3Ugd2lsbCBzaWduIGFuIGFwcHJvcHJpYXRlIGRvY3VtZW50Cit0byBhc3NpZ24gc3VjaCByaWdodHMuIE5laXRoZXIgcGFydHkgd2lsbCBjaGFyZ2UgdGhlIG90aGVyIGZvciByaWdodHMgaW4gZGF0YQorb3IgYW55IHdvcmsgcGVyZm9ybWVkIGFzIGEgcmVzdWx0IG9mIHRoaXMgQWdyZWVtZW50LgorCitObyBXYXJyYW50eSAoU2VjdGlvbiAzKTogSW4gdGhlIEV1cm9wZWFuIFVuaW9uLCB0aGUgZm9sbG93aW5nIGlzIGFkZGVkIGF0IHRoZQorYmVnaW5uaW5nIG9mIHRoaXMgc2VjdGlvbjoKKworSW4gdGhlIEV1cm9wZWFuIFVuaW9uLCBjb25zdW1lcnMgaGF2ZSBsZWdhbCByaWdodHMgdW5kZXIgYXBwbGljYWJsZSBuYXRpb25hbAorbGVnaXNsYXRpb24gZ292ZXJuaW5nIHRoZSBzYWxlIG9mIGNvbnN1bWVyIGdvb2RzLiBTdWNoIHJpZ2h0cyBhcmUgbm90IGFmZmVjdGVkCitieSB0aGUgcHJvdmlzaW9ucyBvZiB0aGlzIFNlY3Rpb24gMy4KKworTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkgKFNlY3Rpb24gNCk6IEluIEF1c3RyaWEsIERlbm1hcmssIEZpbmxhbmQsIEdyZWVjZSwKK0l0YWx5LCBOZXRoZXJsYW5kcywgTm9yd2F5LCBQb3J0dWdhbCwgU3BhaW4sIFN3ZWRlbiBhbmQgU3dpdHplcmxhbmQsIHRoZQorZm9sbG93aW5nIHJlcGxhY2VzIHRoZSB0ZXJtcyBvZiB0aGlzIHNlY3Rpb24gaW4gaXRzIGVudGlyZXR5OgorCitFeGNlcHQgYXMgb3RoZXJ3aXNlIHByb3ZpZGVkIGJ5IG1hbmRhdG9yeSBsYXc6CisKKzEuIElCTSdzIGxpYWJpbGl0eSBmb3IgYW55IGRhbWFnZXMgYW5kIGxvc3NlcyB0aGF0IG1heSBhcmlzZSBhcyBhIGNvbnNlcXVlbmNlCitvZiB0aGUgZnVsZmlsbG1lbnQgb2YgaXRzIG9ibGlnYXRpb25zIHVuZGVyIG9yIGluIGNvbm5lY3Rpb24gd2l0aCB0aGlzCithZ3JlZW1lbnQgb3IgZHVlIHRvIGFueSBvdGhlciBjYXVzZSByZWxhdGVkIHRvIHRoaXMgYWdyZWVtZW50IGlzIGxpbWl0ZWQgdG8KK3RoZSBjb21wZW5zYXRpb24gb2Ygb25seSB0aG9zZSBkYW1hZ2VzIGFuZCBsb3NzZXMgcHJvdmVkIGFuZCBhY3R1YWxseSBhcmlzaW5nCithcyBhbiBpbW1lZGlhdGUgYW5kIGRpcmVjdCBjb25zZXF1ZW5jZSBvZiB0aGUgbm9uLWZ1bGZpbGxtZW50IG9mIHN1Y2gKK29ibGlnYXRpb25zIChpZiBJQk0gaXMgYXQgZmF1bHQpIG9yIG9mIHN1Y2ggY2F1c2UsIGZvciBhIG1heGltdW0gYW1vdW50IGVxdWFsCit0byB0aGUgY2hhcmdlcyBZb3UgcGFpZCBmb3IgdGhlIFByb2dyYW0uCisKK1RoZSBhYm92ZSBsaW1pdGF0aW9uIHNoYWxsIG5vdCBhcHBseSB0byBkYW1hZ2VzIGZvciBib2RpbHkgaW5qdXJpZXMgKGluY2x1ZGluZworZGVhdGgpIGFuZCBkYW1hZ2VzIHRvIHJlYWwgcHJvcGVydHkgYW5kIHRhbmdpYmxlIHBlcnNvbmFsIHByb3BlcnR5IGZvciB3aGljaAorSUJNIGlzIGxlZ2FsbHkgbGlhYmxlLgorCisyLiBVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIElTIElCTSwgT1IgQU5ZIE9GIElUUyBQUk9HUkFNIERFVkVMT1BFUlMsIExJQUJMRSBGT1IKK0FOWSBPRiBUSEUgRk9MTE9XSU5HLCBFVkVOIElGIElORk9STUVEIE9GIFRIRUlSIFBPU1NJQklMSVRZOiAxKSBMT1NTIE9GLCBPUgorREFNQUdFIFRPLCBEQVRBOyAyKSBJTkNJREVOVEFMIE9SIElORElSRUNUIERBTUFHRVMsIE9SIEZPUiBBTlkgRUNPTk9NSUMKK0NPTlNFUVVFTlRJQUwgREFNQUdFUzsgMykgTE9TVCBQUk9GSVRTLCBFVkVOIElGIFRIRVkgQVJJU0UgQVMgQU4gSU1NRURJQVRFCitDT05TRVFVRU5DRSBPRiBUSEUgRVZFTlQgVEhBVCBHRU5FUkFURUQgVEhFIERBTUFHRVM7IE9SIDQpIExPU1MgT0YgQlVTSU5FU1MsCitSRVZFTlVFLCBHT09EV0lMTCwgT1IgQU5USUNJUEFURUQgU0FWSU5HUy4KKworMy4gVGhlIGxpbWl0YXRpb24gYW5kIGV4Y2x1c2lvbiBvZiBsaWFiaWxpdHkgaGVyZWluIGFncmVlZCBhcHBsaWVzIG5vdCBvbmx5IHRvCit0aGUgYWN0aXZpdGllcyBwZXJmb3JtZWQgYnkgSUJNIGJ1dCBhbHNvIHRvIHRoZSBhY3Rpdml0aWVzIHBlcmZvcm1lZCBieSBpdHMKK3N1cHBsaWVycyBhbmQgUHJvZ3JhbSBkZXZlbG9wZXJzLCBhbmQgcmVwcmVzZW50cyB0aGUgbWF4aW11bSBhbW91bnQgZm9yIHdoaWNoCitJQk0gYXMgd2VsbCBhcyBpdHMgc3VwcGxpZXJzIGFuZCBQcm9ncmFtIGRldmVsb3BlcnMsIGFyZSBjb2xsZWN0aXZlbHkKK3Jlc3BvbnNpYmxlLgorCitMaW1pdGF0aW9uIG9mIExpYWJpbGl0eSAoU2VjdGlvbiA0KTogSW4gRnJhbmNlIGFuZCBCZWxnaXVtLCB0aGUgZm9sbG93aW5nCityZXBsYWNlcyB0aGUgdGVybXMgb2YgdGhpcyBzZWN0aW9uIGluIGl0cyBlbnRpcmV0eToKKworRXhjZXB0IGFzIG90aGVyd2lzZSBwcm92aWRlZCBieSBtYW5kYXRvcnkgbGF3OgorCisxLiBJQk0ncyBsaWFiaWxpdHkgZm9yIGFueSBkYW1hZ2VzIGFuZCBsb3NzZXMgdGhhdCBtYXkgYXJpc2UgYXMgYSBjb25zZXF1ZW5jZQorb2YgdGhlIGZ1bGZpbGxtZW50IG9mIGl0cyBvYmxpZ2F0aW9ucyB1bmRlciBvciBpbiBjb25uZWN0aW9uIHdpdGggdGhpcworYWdyZWVtZW50IGlzIGxpbWl0ZWQgdG8gdGhlIGNvbXBlbnNhdGlvbiBvZiBvbmx5IHRob3NlIGRhbWFnZXMgYW5kIGxvc3NlcworcHJvdmVkIGFuZCBhY3R1YWxseSBhcmlzaW5nIGFzIGFuIGltbWVkaWF0ZSBhbmQgZGlyZWN0IGNvbnNlcXVlbmNlIG9mIHRoZQorbm9uLWZ1bGZpbGxtZW50IG9mIHN1Y2ggb2JsaWdhdGlvbnMgKGlmIElCTSBpcyBhdCBmYXVsdCksIGZvciBhIG1heGltdW0gYW1vdW50CitlcXVhbCB0byB0aGUgY2hhcmdlcyBZb3UgcGFpZCBmb3IgdGhlIFByb2dyYW0gdGhhdCBoYXMgY2F1c2VkIHRoZSBkYW1hZ2VzLgorCitUaGUgYWJvdmUgbGltaXRhdGlvbiBzaGFsbCBub3QgYXBwbHkgdG8gZGFtYWdlcyBmb3IgYm9kaWx5IGluanVyaWVzIChpbmNsdWRpbmcKK2RlYXRoKSBhbmQgZGFtYWdlcyB0byByZWFsIHByb3BlcnR5IGFuZCB0YW5naWJsZSBwZXJzb25hbCBwcm9wZXJ0eSBmb3Igd2hpY2gKK0lCTSBpcyBsZWdhbGx5IGxpYWJsZS4KKworMi4gVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBJUyBJQk0sIE9SIEFOWSBPRiBJVFMgUFJPR1JBTSBERVZFTE9QRVJTLCBMSUFCTEUgRk9SCitBTlkgT0YgVEhFIEZPTExPV0lORywgRVZFTiBJRiBJTkZPUk1FRCBPRiBUSEVJUiBQT1NTSUJJTElUWTogMSkgTE9TUyBPRiwgT1IKK0RBTUFHRSBUTywgREFUQTsgMikgSU5DSURFTlRBTCBPUiBJTkRJUkVDVCBEQU1BR0VTLCBPUiBGT1IgQU5ZIEVDT05PTUlDCitDT05TRVFVRU5USUFMIERBTUFHRVM7IDMpIExPU1QgUFJPRklUUywgRVZFTiBJRiBUSEVZIEFSSVNFIEFTIEFOIElNTUVESUFURQorQ09OU0VRVUVOQ0UgT0YgVEhFIEVWRU5UIFRIQVQgR0VORVJBVEVEIFRIRSBEQU1BR0VTOyBPUiA0KSBMT1NTIE9GIEJVU0lORVNTLAorUkVWRU5VRSwgR09PRFdJTEwsIE9SIEFOVElDSVBBVEVEIFNBVklOR1MuCisKKzMuIFRoZSBsaW1pdGF0aW9uIGFuZCBleGNsdXNpb24gb2YgbGlhYmlsaXR5IGhlcmVpbiBhZ3JlZWQgYXBwbGllcyBub3Qgb25seSB0bwordGhlIGFjdGl2aXRpZXMgcGVyZm9ybWVkIGJ5IElCTSBidXQgYWxzbyB0byB0aGUgYWN0aXZpdGllcyBwZXJmb3JtZWQgYnkgaXRzCitzdXBwbGllcnMgYW5kIFByb2dyYW0gZGV2ZWxvcGVycywgYW5kIHJlcHJlc2VudHMgdGhlIG1heGltdW0gYW1vdW50IGZvciB3aGljaAorSUJNIGFzIHdlbGwgYXMgaXRzIHN1cHBsaWVycyBhbmQgUHJvZ3JhbSBkZXZlbG9wZXJzLCBhcmUgY29sbGVjdGl2ZWx5CityZXNwb25zaWJsZS4KKworR292ZXJuaW5nIExhdywgSnVyaXNkaWN0aW9uLCBhbmQgQXJiaXRyYXRpb24gKFNlY3Rpb24gNikKKworR292ZXJuaW5nIExhdworCitUaGUgcGhyYXNlICJ0aGUgbGF3cyBvZiB0aGUgY291bnRyeSBpbiB3aGljaCBZb3UgYWNxdWlyZWQgdGhlIFByb2dyYW0gbGljZW5zZSIKK2lzIHJlcGxhY2VkIGJ5OgorMSkgInRoZSBsYXdzIG9mIEF1c3RyaWEiIGluIEFsYmFuaWEsIEFybWVuaWEsIEF6ZXJiZWlqYW4sIEJlbGFydXMsCitCb3NuaWEtSGVyemVnb3ZpbmEsIEJ1bGdhcmlhLCBDcm9hdGlhLCBHZW9yZ2lhLCBIdW5nYXJ5LCBLYXpha2hzdGFuLAorS3lyZ3l6c3RhbiwgRllSIE1hY2Vkb25pYSwgTW9sZGF2aWEsIFBvbGFuZCwgUm9tYW5pYSwgUnVzc2lhLCBTbG92YWtpYSwKK1Nsb3ZlbmlhLCBUYWppa2lzdGFuLCBUdXJrbWVuaXN0YW4sIFVrcmFpbmUsIFV6YmVraXN0YW4sIGFuZCBGUiBZdWdvc2xhdmlhOworMikgInRoZSBsYXdzIG9mIEZyYW5jZSIgaW4gQWxnZXJpYSwgQmVuaW4sIEJ1cmtpbmEgRmFzbywgQ2FtZXJvb24sIENhcGUgVmVyZGUsCitDZW50cmFsIEFmcmljYW4gUmVwdWJsaWMsIENoYWQsIENvbW9yb3MsIENvbmdvIFJlcHVibGljLCBEamlib3V0aSwgRGVtb2NyYXRpYworUmVwdWJsaWMgb2YgQ29uZ28sIEVxdWF0b3JpYWwgR3VpbmVhLCBGcmVuY2ggR3VpYW5hLCBGcmVuY2ggUG9seW5lc2lhLCBHYWJvbiwKK0dhbWJpYSwgR3VpbmVhLCBHdWluZWEtQmlzc2F1LCBJdm9yeSBDb2FzdCwgTGViYW5vbiwgTWFkYWdhc2NhciwgTWFsaSwKK01hdXJpdGFuaWEsIE1hdXJpdGl1cywgTWF5b3R0ZSwgTW9yb2NjbywgTmV3IENhbGVkb25pYSwgTmlnZXIsIFJldW5pb24sCitTZW5lZ2FsLCBTZXljaGVsbGVzLCBUb2dvLCBUdW5pc2lhLCBWYW51YXR1LCBhbmQgV2FsbGlzICYgRnV0dW5hOworMykgInRoZSBsYXdzIG9mIEZpbmxhbmQiIGluIEVzdG9uaWEsIExhdHZpYSwgYW5kIExpdGh1YW5pYTsKKzQpICJ0aGUgbGF3cyBvZiBFbmdsYW5kIiBpbiBBbmdvbGEsIEJhaHJhaW4sIEJvdHN3YW5hLCBCdXJ1bmRpLCBFZ3lwdCwKK0VyaXRyZWEsIEV0aGlvcGlhLCBHaGFuYSwgSm9yZGFuLCBLZW55YSwgS3V3YWl0LCBMaWJlcmlhLCBNYWxhd2ksIE1hbHRhLAorTW96YW1iaXF1ZSwgTmlnZXJpYSwgT21hbiwgUGFraXN0YW4sIFFhdGFyLCBSd2FuZGEsIFNhbyBUb21lLCBTYXVkaSBBcmFiaWEsCitTaWVycmEgTGVvbmUsIFNvbWFsaWEsIFRhbnphbmlhLCBVZ2FuZGEsIFVuaXRlZCBBcmFiIEVtaXJhdGVzLCB0aGUgVW5pdGVkCitLaW5nZG9tLCBXZXN0IEJhbmsvR2F6YSwgWWVtZW4sIFphbWJpYSwgYW5kIFppbWJhYndlOyBhbmQKKzUpICJ0aGUgbGF3cyBvZiBTb3V0aCBBZnJpY2EiIGluIFNvdXRoIEFmcmljYSwgTmFtaWJpYSwgTGVzb3RobyBhbmQgU3dhemlsYW5kLgorCitKdXJpc2RpY3Rpb24KKworVGhlIGZvbGxvd2luZyBleGNlcHRpb25zIGFyZSBhZGRlZCB0byB0aGlzIHNlY3Rpb246CisKKzEpIEluIEF1c3RyaWEgdGhlIGNob2ljZSBvZiBqdXJpc2RpY3Rpb24gZm9yIGFsbCBkaXNwdXRlcyBhcmlzaW5nIG91dCBvZiB0aGlzCitBZ3JlZW1lbnQgYW5kIHJlbGF0aW5nIHRoZXJldG8sIGluY2x1ZGluZyBpdHMgZXhpc3RlbmNlLCB3aWxsIGJlIHRoZSBjb21wZXRlbnQKK2NvdXJ0IG9mIGxhdyBpbiBWaWVubmEsIEF1c3RyaWEgKElubmVyLUNpdHkpOworMikgaW4gQW5nb2xhLCBCYWhyYWluLCBCb3Rzd2FuYSwgQnVydW5kaSwgRWd5cHQsIEVyaXRyZWEsIEV0aGlvcGlhLCBHaGFuYSwKK0pvcmRhbiwgS2VueWEsIEt1d2FpdCwgTGliZXJpYSwgTWFsYXdpLCBNYWx0YSwgTW96YW1iaXF1ZSwgTmlnZXJpYSwgT21hbiwKK1Bha2lzdGFuLCBRYXRhciwgUndhbmRhLCBTYW8gVG9tZSwgU2F1ZGkgQXJhYmlhLCBTaWVycmEgTGVvbmUsIFNvbWFsaWEsCitUYW56YW5pYSwgVWdhbmRhLCBVbml0ZWQgQXJhYiBFbWlyYXRlcywgV2VzdCBCYW5rL0dhemEsIFllbWVuLCBaYW1iaWEsIGFuZAorWmltYmFid2UgYWxsIGRpc3B1dGVzIGFyaXNpbmcgb3V0IG9mIHRoaXMgQWdyZWVtZW50IG9yIHJlbGF0ZWQgdG8gaXRzCitleGVjdXRpb24sIGluY2x1ZGluZyBzdW1tYXJ5IHByb2NlZWRpbmdzLCB3aWxsIGJlIHN1Ym1pdHRlZCB0byB0aGUgZXhjbHVzaXZlCitqdXJpc2RpY3Rpb24gb2YgdGhlIEVuZ2xpc2ggY291cnRzOworMykgaW4gQmVsZ2l1bSBhbmQgTHV4ZW1ib3VyZyBhbGwgZGlzcHV0ZXMgYXJpc2luZyBvdXQgb2YgdGhpcyBBZ3JlZW1lbnQgb3IKK3JlbGF0ZWQgdG8gaXRzIGludGVycHJldGF0aW9uIG9yIGl0cyBleGVjdXRpb24sIHRoZSBsYXcsIGFuZCB0aGUgY291cnRzIG9mIHRoZQorY2FwaXRhbCBjaXR5LCBvZiB0aGUgY291bnRyeSBvZiBZb3VyIHJlZ2lzdGVyZWQgb2ZmaWNlIGFuZC9vciBjb21tZXJjaWFsIHNpdGUKK2xvY2F0aW9uIG9ubHkgYXJlIGNvbXBldGVudDsKKzQpIGluIEZyYW5jZSwgQWxnZXJpYSwgQmVuaW4sIEJ1cmtpbmEgRmFzbywgQ2FtZXJvb24sIENhcGUgVmVyZGUsIENlbnRyYWwKK0FmcmljYW4gUmVwdWJsaWMsIENoYWQsIENvbW9yb3MsIENvbmdvIFJlcHVibGljLCBEamlib3V0aSwgRGVtb2NyYXRpYyBSZXB1YmxpYworb2YgQ29uZ28sIEVxdWF0b3JpYWwgR3VpbmVhLCBGcmVuY2ggR3VpYW5hLCBGcmVuY2ggUG9seW5lc2lhLCBHYWJvbiwgR2FtYmlhLAorR3VpbmVhLCBHdWluZWEtQmlzc2F1LCBJdm9yeSBDb2FzdCwgTGViYW5vbiwgTWFkYWdhc2NhciwgTWFsaSwgTWF1cml0YW5pYSwKK01hdXJpdGl1cywgTWF5b3R0ZSwgTW9yb2NjbywgTmV3IENhbGVkb25pYSwgTmlnZXIsIFJldW5pb24sIFNlbmVnYWwsCitTZXljaGVsbGVzLCBUb2dvLCBUdW5pc2lhLCBWYW51YXR1LCBhbmQgV2FsbGlzICYgRnV0dW5hIGFsbCBkaXNwdXRlcyBhcmlzaW5nCitvdXQgb2YgdGhpcyBBZ3JlZW1lbnQgb3IgcmVsYXRlZCB0byBpdHMgdmlvbGF0aW9uIG9yIGV4ZWN1dGlvbiwgaW5jbHVkaW5nCitzdW1tYXJ5IHByb2NlZWRpbmdzLCB3aWxsIGJlIHNldHRsZWQgZXhjbHVzaXZlbHkgYnkgdGhlIENvbW1lcmNpYWwgQ291cnQgb2YKK1BhcmlzOworNSkgaW4gUnVzc2lhIGFsbCBkaXNwdXRlcyBhcmlzaW5nIG91dCBvZiBvciBpbiByZWxhdGlvbiB0byB0aGUgaW50ZXJwcmV0YXRpb24sCit0aGUgdmlvbGF0aW9uLCB0aGUgdGVybWluYXRpb24sIHRoZSBudWxsaXR5IG9mIHRoZSBleGVjdXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIGJlIHNldHRsZWQgYnkgQXJiaXRyYXRpb24gQ291cnQgb2YgTW9zY293OworNikgaW4gU291dGggQWZyaWNhLCBOYW1pYmlhLCBMZXNvdGhvIGFuZCBTd2F6aWxhbmQgYm90aCBvZiB1cyBhZ3JlZSB0byBzdWJtaXQKK2FsbCBkaXNwdXRlcyByZWxhdGluZyB0byB0aGlzIEFncmVlbWVudCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBIaWdoIENvdXJ0CitpbiBKb2hhbm5lc2J1cmc7Cis3KSBpbiBUdXJrZXkgYWxsIGRpc3B1dGVzIGFyaXNpbmcgb3V0IG9mIG9yIGluIGNvbm5lY3Rpb24gd2l0aCB0aGlzIEFncmVlbWVudAorc2hhbGwgYmUgcmVzb2x2ZWQgYnkgdGhlIElzdGFuYnVsIENlbnRyYWwgKFN1bHRhbmFobWV0KSBDb3VydHMgYW5kIEV4ZWN1dGlvbgorRGlyZWN0b3JhdGVzIG9mIElzdGFuYnVsLCB0aGUgUmVwdWJsaWMgb2YgVHVya2V5OworOCkgaW4gZWFjaCBvZiB0aGUgZm9sbG93aW5nIHNwZWNpZmllZCBjb3VudHJpZXMsIGFueSBsZWdhbCBjbGFpbSBhcmlzaW5nIG91dAorb2YgdGhpcyBBZ3JlZW1lbnQgd2lsbCBiZSBicm91Z2h0IGJlZm9yZSwgYW5kIHNldHRsZWQgZXhjbHVzaXZlbHkgYnksIHRoZQorY29tcGV0ZW50IGNvdXJ0IG9mIGEpIEF0aGVucyBmb3IgR3JlZWNlLCBiKSBUZWwgQXZpdi1KYWZmYSBmb3IgSXNyYWVsLCBjKQorTWlsYW4gZm9yIEl0YWx5LCBkKSBMaXNib24gZm9yIFBvcnR1Z2FsLCBhbmQgZSkgTWFkcmlkIGZvciBTcGFpbjsgYW5kCis5KSBpbiB0aGUgVW5pdGVkIEtpbmdkb20gYm90aCBvZiB1cyBhZ3JlZSB0byBzdWJtaXQgYWxsIGRpc3B1dGVzIHJlbGF0aW5nIHRvCit0aGlzIEFncmVlbWVudCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBFbmdsaXNoIGNvdXJ0cy4KKworQXJiaXRyYXRpb24KKworSW4gQWxiYW5pYSwgQXJtZW5pYSwgQXplcmJlaWphbiwgQmVsYXJ1cywgQm9zbmlhLUhlcnplZ292aW5hLCBCdWxnYXJpYSwKK0Nyb2F0aWEsIEdlb3JnaWEsIEh1bmdhcnksIEthemFraHN0YW4sIEt5cmd5enN0YW4sIEZZUiBNYWNlZG9uaWEsIE1vbGRhdmlhLAorUG9sYW5kLCBSb21hbmlhLCBSdXNzaWEsIFNsb3Zha2lhLCBTbG92ZW5pYSwgVGFqaWtpc3RhbiwgVHVya21lbmlzdGFuLAorVWtyYWluZSwgVXpiZWtpc3RhbiwgYW5kIEZSIFl1Z29zbGF2aWEgYWxsIGRpc3B1dGVzIGFyaXNpbmcgb3V0IG9mIHRoaXMKK0FncmVlbWVudCBvciByZWxhdGVkIHRvIGl0cyB2aW9sYXRpb24sIHRlcm1pbmF0aW9uIG9yIG51bGxpdHkgd2lsbCBiZSBmaW5hbGx5CitzZXR0bGVkIHVuZGVyIHRoZSBSdWxlcyBvZiBBcmJpdHJhdGlvbiBhbmQgQ29uY2lsaWF0aW9uIG9mIHRoZSBJbnRlcm5hdGlvbmFsCitBcmJpdHJhbCBDZW50ZXIgb2YgdGhlIEZlZGVyYWwgRWNvbm9taWMgQ2hhbWJlciBpbiBWaWVubmEgKFZpZW5uYSBSdWxlcykgYnkKK3RocmVlIGFyYml0cmF0b3JzIGFwcG9pbnRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlc2UgcnVsZXMuCitUaGUgYXJiaXRyYXRpb24gd2lsbCBiZSBoZWxkIGluIFZpZW5uYSwgQXVzdHJpYSwgYW5kIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBvZgordGhlIHByb2NlZWRpbmdzIHdpbGwgYmUgRW5nbGlzaC4gVGhlIGRlY2lzaW9uIG9mIHRoZSBhcmJpdHJhdG9ycyB3aWxsIGJlIGZpbmFsCithbmQgYmluZGluZyB1cG9uIGJvdGggcGFydGllcy4gVGhlcmVmb3JlLCBwdXJzdWFudCB0byBwYXJhZ3JhcGggNTk4ICgyKSBvZiB0aGUKK0F1c3RyaWFuIENvZGUgb2YgQ2l2aWwgUHJvY2VkdXJlLCB0aGUgcGFydGllcyBleHByZXNzbHkgd2FpdmUgdGhlIGFwcGxpY2F0aW9uCitvZiBwYXJhZ3JhcGggNTk1ICgxKSBmaWd1cmUgNyBvZiB0aGUgQ29kZS4gSUJNIG1heSwgaG93ZXZlciwgaW5zdGl0dXRlCitwcm9jZWVkaW5ncyBpbiBhIGNvbXBldGVudCBjb3VydCBpbiB0aGUgY291bnRyeSBvZiBpbnN0YWxsYXRpb24uCisKK0luIEVzdG9uaWEsIExhdHZpYSBhbmQgTGl0aHVhbmlhIGFsbCBkaXNwdXRlcyBhcmlzaW5nIGluIGNvbm5lY3Rpb24gd2l0aCB0aGlzCitBZ3JlZW1lbnQgd2lsbCBiZSBmaW5hbGx5IHNldHRsZWQgaW4gYXJiaXRyYXRpb24gdGhhdCB3aWxsIGJlIGhlbGQgaW4KK0hlbHNpbmtpLCBGaW5sYW5kIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgYXJiaXRyYXRpb24gbGF3cyBvZiBGaW5sYW5kIHRoZW4gaW4KK2VmZmVjdC4gRWFjaCBwYXJ0eSB3aWxsIGFwcG9pbnQgb25lIGFyYml0cmF0b3IuIFRoZSBhcmJpdHJhdG9ycyB3aWxsIHRoZW4KK2pvaW50bHkgYXBwb2ludCB0aGUgY2hhaXJtYW4uIElmIGFyYml0cmF0b3JzIGNhbm5vdCBhZ3JlZSBvbiB0aGUgY2hhaXJtYW4sCit0aGVuIHRoZSBDZW50cmFsIENoYW1iZXIgb2YgQ29tbWVyY2UgaW4gSGVsc2lua2kgd2lsbCBhcHBvaW50IHRoZSBjaGFpcm1hbi4KKworQVVTVFJJQTogR2VuZXJhbCAoU2VjdGlvbiA1KTogVGhlIGZvbGxvd2luZyBpcyBhZGRlZCB0byBpdGVtIDQ6CisKK0ZvciBwdXJwb3NlcyBvZiB0aGlzIGNsYXVzZSwgY29udGFjdCBpbmZvcm1hdGlvbiB3aWxsIGFsc28gaW5jbHVkZSBpbmZvcm1hdGlvbgorYWJvdXQgWW91IGFzIGEgbGVnYWwgZW50aXR5LCBmb3IgZXhhbXBsZSByZXZlbnVlIGRhdGEgYW5kIG90aGVyIHRyYW5zYWN0aW9uYWwKK2luZm9ybWF0aW9uLgorCitHRVJNQU5ZOiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eSAoU2VjdGlvbiA0KTogVGhlIGZvbGxvd2luZyBwYXJhZ3JhcGggaXMgYWRkZWQKK3RvIHRoaXMgU2VjdGlvbjoKKworVGhlIGxpbWl0YXRpb25zIGFuZCBleGNsdXNpb25zIHNwZWNpZmllZCBpbiB0aGlzIFNlY3Rpb24gd2lsbCBub3QgYXBwbHkgdG8KK2RhbWFnZXMgY2F1c2VkIGJ5IElCTSBpbnRlbnRpb25hbGx5IG9yIGJ5IGdyb3NzIG5lZ2xpZ2VuY2UuCisKK0dlbmVyYWwgKFNlY3Rpb24gNSk6IFRoZSBmb2xsb3dpbmcgcmVwbGFjZXMgdGhlIHRlcm1zIG9mIGl0ZW0gNToKKworQW55IGNsYWltcyByZXN1bHRpbmcgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgc3ViamVjdCB0byBhIHN0YXR1dGUgb2YKK2xpbWl0YXRpb24gb2YgdGhyZWUgeWVhcnMuCisKK0hVTkdBUlk6IExpbWl0YXRpb24gb2YgTGlhYmlsaXR5IChTZWN0aW9uIDQpOiBUaGUgZm9sbG93aW5nIGlzIGFkZGVkIGF0IHRoZQorZW5kIG9mIHRoaXMgc2VjdGlvbjoKKworVGhlIGxpbWl0YXRpb24gYW5kIGV4Y2x1c2lvbiBzcGVjaWZpZWQgaGVyZWluIHNoYWxsIG5vdCBhcHBseSB0byBsaWFiaWxpdHkgZm9yCithIGJyZWFjaCBvZiBjb250cmFjdCBkYW1hZ2luZyBsaWZlLCBwaHlzaWNhbCB3ZWxsLWJlaW5nLCBvciBoZWFsdGggdGhhdCBoYXMKK2JlZW4gY2F1c2VkIGludGVudGlvbmFsbHksIGJ5IGdyb3NzIG5lZ2xpZ2VuY2UsIG9yIGJ5IGEgY3JpbWluYWwgYWN0LgorCitUaGUgcGFydGllcyBhY2NlcHQgdGhlIGxpbWl0YXRpb25zIG9mIGxpYWJpbGl0eSBhcyB2YWxpZCBwcm92aXNpb25zIGFuZCBzdGF0ZQordGhhdCB0aGUgU2VjdGlvbiAzMTQuKDIpIG9mIHRoZSBIdW5nYXJpYW4gQ2l2aWwgQ29kZSBhcHBsaWVzIGFzIHRoZQorYWNxdWlzaXRpb24gcHJpY2UgYXMgd2VsbCBhcyBvdGhlciBhZHZhbnRhZ2VzIGFyaXNpbmcgb3V0IG9mIHRoZSBwcmVzZW50CitBZ3JlZW1lbnQgYmFsYW5jZSB0aGlzIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5LgorCitJUkVMQU5EOiBObyBXYXJyYW50eSAoU2VjdGlvbiAzKTogVGhlIGZvbGxvd2luZyBpcyBhZGRlZCB0byB0aGlzIHNlY3Rpb246CisKK0V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgaW4gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIG9yIHNlY3Rpb24gMTIgb2YKK3RoZSBTYWxlIG9mIEdvb2RzIEFjdCAxODkzIChhcyBhbWVuZGVkIGJ5IHRoZSBTYWxlIG9mIEdvb2RzIGFuZCBTdXBwbHkgb2YKK1NlcnZpY2VzIEFjdCAxOTgwICgidGhlIDE5ODAgQWN0IikpLCBhbGwgY29uZGl0aW9ucyBhbmQgd2FycmFudGllcyAoZXhwcmVzcyBvcgoraW1wbGllZCwgc3RhdHV0b3J5IG9yIG90aGVyd2lzZSkgYXJlIGhlcmVieSBleGNsdWRlZCBpbmNsdWRpbmcsIHdpdGhvdXQKK2xpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIGltcGxpZWQgYnkgdGhlIFNhbGUgb2YgR29vZHMgQWN0IDE4OTMgYXMgYW1lbmRlZCBieQordGhlIDE5ODAgQWN0IChpbmNsdWRpbmcsIGZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBzZWN0aW9uIDM5IG9mIHRoZSAxOTgwCitBY3QpLgorCitMaW1pdGF0aW9uIG9mIExpYWJpbGl0eSAoU2VjdGlvbiA0KTogVGhlIGZvbGxvd2luZyByZXBsYWNlcyB0aGUgdGVybXMgb2YgdGhpcworc2VjdGlvbiBpbiBpdHMgZW50aXJldHk6CisKK0ZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBzZWN0aW9uLCBhICJEZWZhdWx0IiBtZWFucyBhbnkgYWN0LCBzdGF0ZW1lbnQsCitvbWlzc2lvbiwgb3IgbmVnbGlnZW5jZSBvbiB0aGUgcGFydCBvZiBJQk0gaW4gY29ubmVjdGlvbiB3aXRoLCBvciBpbiByZWxhdGlvbgordG8sIHRoZSBzdWJqZWN0IG1hdHRlciBvZiBhbiBBZ3JlZW1lbnQgaW4gcmVzcGVjdCBvZiB3aGljaCBJQk0gaXMgbGVnYWxseQorbGlhYmxlIHRvIFlvdSB3aGV0aGVyIGluIGNvbnRyYWN0IG9yIHRvcnQuIEEgbnVtYmVyIG9mIERlZmF1bHRzIHdoaWNoIHRvZ2V0aGVyCityZXN1bHQgaW4sIG9yIGNvbnRyaWJ1dGUgdG8sIHN1YnN0YW50aWFsbHkgdGhlIHNhbWUgbG9zcyBvciBkYW1hZ2Ugd2lsbCBiZQordHJlYXRlZCBhcyBvbmUgRGVmYXVsdCBvY2N1cnJpbmcgb24gdGhlIGRhdGUgb2Ygb2NjdXJyZW5jZSBvZiB0aGUgbGFzdCBzdWNoCitEZWZhdWx0LgorCitDaXJjdW1zdGFuY2VzIG1heSBhcmlzZSB3aGVyZSwgYmVjYXVzZSBvZiBhIERlZmF1bHQsIFlvdSBhcmUgZW50aXRsZWQgdG8KK3JlY292ZXIgZGFtYWdlcyBmcm9tIElCTS4gVGhpcyBzZWN0aW9uIHNldHMgb3V0IHRoZSBleHRlbnQgb2YgSUJNJ3MgbGlhYmlsaXR5CithbmQgWW91ciBzb2xlIHJlbWVkeS4KKworMS4gSUJNIHdpbGwgYWNjZXB0IHVubGltaXRlZCBsaWFiaWxpdHkgZm9yIChhKSBkZWF0aCBvciBwZXJzb25hbCBpbmp1cnkgY2F1c2VkCitieSB0aGUgbmVnbGlnZW5jZSBvZiBJQk0sIGFuZCAoYikgc3ViamVjdCBhbHdheXMgdG8gdGhlIEl0ZW1zIGZvciBXaGljaCBJQk0gaXMKK05vdCBMaWFibGUgYmVsb3csIGZvciBwaHlzaWNhbCBkYW1hZ2UgdG8gWW91ciB0YW5naWJsZSBwcm9wZXJ0eSByZXN1bHRpbmcgZnJvbQordGhlIG5lZ2xpZ2VuY2Ugb2YgSUJNLgorCisyLiBFeGNlcHQgYXMgcHJvdmlkZWQgaW4gaXRlbSAxIGFib3ZlLCBJQk0ncyBlbnRpcmUgbGlhYmlsaXR5IGZvciBhY3R1YWwKK2RhbWFnZXMgZm9yIGFueSBvbmUgRGVmYXVsdCB3aWxsIG5vdCBpbiBhbnkgZXZlbnQgZXhjZWVkIHRoZSBncmVhdGVyIG9mIDEpIEVVUgorMTI1LDAwMCwgb3IgMikgMTI1JSBvZiB0aGUgYW1vdW50IFlvdSBwYWlkIGZvciB0aGUgUHJvZ3JhbSBkaXJlY3RseSByZWxhdGluZwordG8gdGhlIERlZmF1bHQuIFRoZXNlIGxpbWl0cyBhbHNvIGFwcGx5IHRvIGFueSBvZiBJQk0ncyBzdXBwbGllcnMgYW5kIFByb2dyYW0KK2RldmVsb3BlcnMuIFRoZXkgc3RhdGUgdGhlIG1heGltdW0gZm9yIHdoaWNoIElCTSBhbmQgc3VjaCBzdXBwbGllcnMgYW5kCitQcm9ncmFtIGRldmVsb3BlcnMgYXJlIGNvbGxlY3RpdmVseSByZXNwb25zaWJsZS4KKworSXRlbXMgZm9yIFdoaWNoIElCTSBpcyBOb3QgTGlhYmxlCisKK1NhdmUgd2l0aCByZXNwZWN0IHRvIGFueSBsaWFiaWxpdHkgcmVmZXJyZWQgdG8gaW4gaXRlbSAxIGFib3ZlLCB1bmRlciBubworY2lyY3Vtc3RhbmNlcyBpcyBJQk0gb3IgYW55IG9mIGl0cyBzdXBwbGllcnMgb3IgUHJvZ3JhbSBkZXZlbG9wZXJzIGxpYWJsZSBmb3IKK2FueSBvZiB0aGUgZm9sbG93aW5nLCBldmVuIGlmIElCTSBvciB0aGV5IHdlcmUgaW5mb3JtZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mCitzdWNoIGxvc3NlczoKKworMS4gbG9zcyBvZiwgb3IgZGFtYWdlIHRvLCBkYXRhOworCisyLiBzcGVjaWFsLCBpbmRpcmVjdCwgb3IgY29uc2VxdWVudGlhbCBsb3NzOyBvcgorCiszLiBsb3NzIG9mIHByb2ZpdHMsIGJ1c2luZXNzLCByZXZlbnVlLCBnb29kd2lsbCwgb3IgYW50aWNpcGF0ZWQgc2F2aW5ncy4KKworSVRBTFk6IEdlbmVyYWwgKFNlY3Rpb24gNSk6IFRoZSBmb2xsb3dpbmcgaXMgYWRkZWQgdG8gdGhpcyBzZWN0aW9uOgorCitJQk0gYW5kIEN1c3RvbWVyIChoZXJlaW5hZnRlciwgaW5kaXZpZHVhbGx5LCAiUGFydHkiKSBzaGFsbCBjb21wbHkgd2l0aCBhbGwKK3RoZSBvYmxpZ2F0aW9ucyBvZiB0aGUgYXBwbGljYWJsZSBwcm92aXNpb25zIG9mIGxhdyBhbmQvb3IgcmVndWxhdGlvbiBvbgorcGVyc29uYWwgZGF0YSBwcm90ZWN0aW9uLiBFYWNoIG9mIHRoZSBQYXJ0aWVzIHdpbGwgaW5kZW1uaWZ5IGFuZCBrZWVwIHRoZQorb3RoZXIgUGFydHkgaGFybWxlc3MgZnJvbSBhbnkgZGFtYWdlLCBjbGFpbSwgY29zdCBvciBleHBlbnNlIGluY3VycmVkIGJ5IHRoZQorbGF0dGVyLCBkaXJlY3RseSBhbmQgb3IgaW5kaXJlY3RseSwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhbiBpbmZyaW5nZW1lbnQgb2YgdGhlCitvdGhlciBQYXJ0eSBvZiB0aGUgbWVudGlvbmVkIHByb3Zpc2lvbnMgb2YgbGF3IGFuZC9vciByZWd1bGF0aW9ucy4KKworU0xPVkFLSUE6IExpbWl0YXRpb24gb2YgTGlhYmlsaXR5IChTZWN0aW9uIDQpOiBUaGUgZm9sbG93aW5nIGlzIGFkZGVkIHRvIHRoZQorZW5kIG9mIHRoZSBsYXN0IHBhcmFncmFwaDoKKworVGhlIGxpbWl0YXRpb25zIGFwcGx5IHRvIHRoZSBleHRlbnQgdGhleSBhcmUgbm90IHByb2hpYml0ZWQgdW5kZXIgwqfCpyAzNzMtMzg2CitvZiB0aGUgU2xvdmFrIENvbW1lcmNpYWwgQ29kZS4KKworR2VuZXJhbCAoU2VjdGlvbiA1KTogVGhlIHRlcm1zIG9mIGl0ZW0gNSBhcmUgcmVwbGFjZWQgd2l0aCB0aGUgZm9sbG93aW5nOgorCitUSEUgUEFSVElFUyBBR1JFRSBUSEFULCBBUyBERUZJTkVEIEJZIEFQUExJQ0FCTEUgTE9DQUwgTEFXLCBBTlkgTEVHQUwgT1IgT1RIRVIKK0FDVElPTiBSRUxBVEVEIFRPIEEgQlJFQUNIIE9GIFRISVMgQUdSRUVNRU5UIE1VU1QgQkUgQ09NTUVOQ0VEIE5PIExBVEVSIFRIQU4KK0ZPVVIgWUVBUlMgRlJPTSBUSEUgREFURSBPTiBXSElDSCBUSEUgQ0FVU0UgT0YgQUNUSU9OIEFST1NFLgorCitTV0lUWkVSTEFORDogR2VuZXJhbCAoU2VjdGlvbiA1KTogVGhlIGZvbGxvd2luZyBpcyBhZGRlZCB0byBpdGVtIDQ6CisKK0ZvciBwdXJwb3NlcyBvZiB0aGlzIGNsYXVzZSwgY29udGFjdCBpbmZvcm1hdGlvbiB3aWxsIGFsc28gaW5jbHVkZSBpbmZvcm1hdGlvbgorYWJvdXQgWW91IGFzIGEgbGVnYWwgZW50aXR5LCBmb3IgZXhhbXBsZSByZXZlbnVlIGRhdGEgYW5kIG90aGVyIHRyYW5zYWN0aW9uYWwKK2luZm9ybWF0aW9uLgorCitVTklURUQgS0lOR0RPTTogTm8gV2FycmFudHkgKFNlY3Rpb24gMyk6IFRoZSBmb2xsb3dpbmcgcmVwbGFjZXMgdGhlIGZpcnN0CitzZW50ZW5jZSBpbiB0aGUgZmlyc3QgcGFyYWdyYXBoIG9mIHRoaXMgc2VjdGlvbjoKKworU1VCSkVDVCBUTyBBTlkgU1RBVFVUT1JZIFdBUlJBTlRJRVMgV0hJQ0ggQ0FOTk9UIEJFIEVYQ0xVREVELCBJQk0gTUFLRVMgTk8KK1dBUlJBTlRZIE9SIENPTkRJVElPTiBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgKFdJVEhPVVQKK0xJTUlUQVRJT04pIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgU0FUSVNGQUNUT1JZIFFVQUxJVFksIEZJVE5FU1MgRk9SIEEKK1BBUlRJQ1VMQVIgUFVSUE9TRSwgQU5EIE5PTi1JTkZSSU5HRU1FTlQsIFJFR0FSRElORyBUSEUgUFJPR1JBTS4KKworTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkgKFNlY3Rpb24gNCk6IFRoZSBmb2xsb3dpbmcgcmVwbGFjZXMgdGhlIHRlcm1zIG9mIHRoaXMKK3NlY3Rpb24gaW4gaXRzIGVudGlyZXR5OgorCitGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgc2VjdGlvbiwgYSAiRGVmYXVsdCIgbWVhbnMgYW55IGFjdCwgc3RhdGVtZW50LAorb21pc3Npb24sIG9yIG5lZ2xpZ2VuY2Ugb24gdGhlIHBhcnQgb2YgSUJNIGluIGNvbm5lY3Rpb24gd2l0aCwgb3IgaW4gcmVsYXRpb24KK3RvLCB0aGUgc3ViamVjdCBtYXR0ZXIgb2YgYW4gQWdyZWVtZW50IGluIHJlc3BlY3Qgb2Ygd2hpY2ggSUJNIGlzIGxlZ2FsbHkKK2xpYWJsZSB0byBZb3UsIHdoZXRoZXIgaW4gY29udHJhY3Qgb3IgdG9ydC4gQSBudW1iZXIgb2YgRGVmYXVsdHMgd2hpY2gKK3RvZ2V0aGVyIHJlc3VsdCBpbiwgb3IgY29udHJpYnV0ZSB0bywgc3Vic3RhbnRpYWxseSB0aGUgc2FtZSBsb3NzIG9yIGRhbWFnZQord2lsbCBiZSB0cmVhdGVkIGFzIG9uZSBEZWZhdWx0LgorCitDaXJjdW1zdGFuY2VzIG1heSBhcmlzZSB3aGVyZSwgYmVjYXVzZSBvZiBhIERlZmF1bHQsIFlvdSBhcmUgZW50aXRsZWQgdG8KK3JlY292ZXIgZGFtYWdlcyBmcm9tIElCTS4gVGhpcyBzZWN0aW9uIHNldHMgb3V0IHRoZSBleHRlbnQgb2YgSUJNJ3MgbGlhYmlsaXR5CithbmQgWW91ciBzb2xlIHJlbWVkeS4KKworMS4gSUJNIHdpbGwgYWNjZXB0IHVubGltaXRlZCBsaWFiaWxpdHkgZm9yOgorCithLiBkZWF0aCBvciBwZXJzb25hbCBpbmp1cnkgY2F1c2VkIGJ5IHRoZSBuZWdsaWdlbmNlIG9mIElCTTsKKworYi4gYW55IGJyZWFjaCBvZiBpdHMgb2JsaWdhdGlvbnMgaW1wbGllZCBieSBTZWN0aW9uIDEyIG9mIHRoZSBTYWxlIG9mIEdvb2RzCitBY3QgMTk3OSBvciBTZWN0aW9uIDIgb2YgdGhlIFN1cHBseSBvZiBHb29kcyBhbmQgU2VydmljZXMgQWN0IDE5ODIsIG9yIGFueQorc3RhdHV0b3J5IG1vZGlmaWNhdGlvbiBvciByZS1lbmFjdG1lbnQgb2YgZWl0aGVyIHN1Y2ggU2VjdGlvbjsgYW5kCisKK2MuIHN1YmplY3QgYWx3YXlzIHRvIHRoZSBJdGVtcyBmb3IgV2hpY2ggSUJNIGlzIE5vdCBMaWFibGUgYmVsb3csIGZvciBwaHlzaWNhbAorZGFtYWdlIHRvIFlvdXIgdGFuZ2libGUgcHJvcGVydHkgcmVzdWx0aW5nIGZyb20gdGhlIG5lZ2xpZ2VuY2Ugb2YgSUJNLgorCisyLiBJQk0ncyBlbnRpcmUgbGlhYmlsaXR5IGZvciBhY3R1YWwgZGFtYWdlcyBmb3IgYW55IG9uZSBEZWZhdWx0IHdpbGwgbm90IGluCithbnkgZXZlbnQsIGV4Y2VwdCBhcyBwcm92aWRlZCBpbiBpdGVtIDEgYWJvdmUsIGV4Y2VlZCB0aGUgZ3JlYXRlciBvZiAxKQorwqM3NSwwMDAsIG9yIDIpIDEyNSUgb2YgdGhlIGFtb3VudCBZb3UgcGFpZCBmb3IgdGhlIFByb2dyYW0gZGlyZWN0bHkgcmVsYXRpbmcKK3RvIHRoZSBEZWZhdWx0LiBUaGVzZSBsaW1pdHMgYWxzbyBhcHBseSB0byBJQk0ncyBzdXBwbGllcnMgYW5kIFByb2dyYW0KK2RldmVsb3BlcnMuIFRoZXkgc3RhdGUgdGhlIG1heGltdW0gZm9yIHdoaWNoIElCTSBhbmQgc3VjaCBzdXBwbGllcnMgYW5kCitQcm9ncmFtIGRldmVsb3BlcnMgYXJlIGNvbGxlY3RpdmVseSByZXNwb25zaWJsZS4KKworSXRlbXMgZm9yIFdoaWNoIElCTSBpcyBOb3QgTGlhYmxlCisKK1NhdmUgd2l0aCByZXNwZWN0IHRvIGFueSBsaWFiaWxpdHkgcmVmZXJyZWQgdG8gaW4gaXRlbSAxIGFib3ZlLCB1bmRlciBubworY2lyY3Vtc3RhbmNlcyBpcyBJQk0gb3IgYW55IG9mIGl0cyBzdXBwbGllcnMgb3IgUHJvZ3JhbSBkZXZlbG9wZXJzIGxpYWJsZSBmb3IKK2FueSBvZiB0aGUgZm9sbG93aW5nLCBldmVuIGlmIElCTSBvciB0aGV5IHdlcmUgaW5mb3JtZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mCitzdWNoIGxvc3NlczoKKworMS4gbG9zcyBvZiwgb3IgZGFtYWdlIHRvLCBkYXRhOworCisyLiBzcGVjaWFsLCBpbmRpcmVjdCwgb3IgY29uc2VxdWVudGlhbCBsb3NzOyBvcgorCiszLiBsb3NzIG9mIHByb2ZpdHMsIGJ1c2luZXNzLCByZXZlbnVlLCBnb29kd2lsbCwgb3IgYW50aWNpcGF0ZWQgc2F2aW5ncy4KKworWjEyNS01NTQ0LTAyICgxMS8yMDAyKQorCitMSUNFTlNFIElORk9STUFUSU9OCisKK1RoZSBQcm9ncmFtcyBsaXN0ZWQgYmVsb3cgYXJlIGxpY2Vuc2VkIHVuZGVyIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kCitjb25kaXRpb25zIGluIGFkZGl0aW9uIHRvIHRob3NlIG9mIHRoZSBJbnRlcm5hdGlvbmFsIExpY2Vuc2UgQWdyZWVtZW50IGZvcgorRWFybHkgUmVsZWFzZSBvZiBQcm9ncmFtcy4KKworUHJvZ3JhbSBOYW1lOiBhbHBoYVdvcmtzIEVtZXJnaW5nIFRlY2hub2xvZ3kKK1Byb2dyYW0gTnVtYmVyOiAxMDA2MDgKKworU3BlY2lmaWVkIE9wZXJhdGluZyBFbnZpcm9ubWVudAorCitUaGUgUHJvZ3JhbSdzIHNwZWNpZmljYXRpb25zIGFuZCBzcGVjaWZpZWQgb3BlcmF0aW5nIGVudmlyb25tZW50IGluZm9ybWF0aW9uCittYXkgYmUgZm91bmQgaW4gZG9jdW1lbnRhdGlvbiBhY2NvbXBhbnlpbmcgdGhlIFByb2dyYW0sIGlmIGF2YWlsYWJsZSwgc3VjaCBhcworYSByZWFkLW1lIGZpbGUsIG9yIG90aGVyIGluZm9ybWF0aW9uIHB1Ymxpc2hlZCBieSBJQk0sIHN1Y2ggYXMgYW4gYW5ub3VuY2VtZW50CitsZXR0ZXIuCisKK0V2YWx1YXRpb24gUGVyaW9kCisKK1RoZSBldmFsdWF0aW9uIHBlcmlvZCBiZWdpbnMgb24gdGhlIGRhdGUgdGhhdCB5b3UgYWdyZWUgdG8gdGhlIHRlcm1zIG9mIHRoaXMKK0FncmVlbWVudCBhbmQgZW5kcyBhZnRlciA5MCBkYXlzLgorCisKK0QvTjogTC1BUEFMLTVMMjJYWAorUC9OOiBMLUFQQUwtNUwyMlhYCmRpZmYgLS1naXQgYS9saWNlbnNlcy9JQk0tSjEuNSBiL2xpY2Vuc2VzL0lCTS1KMS41Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiNDg3ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9JQk0tSjEuNQpAQCAtMCwwICsxLDg3MyBAQAorSW50ZXJuYXRpb25hbCBMaWNlbnNlIEFncmVlbWVudCBmb3IgRWFybHkgUmVsZWFzZSBvZiBQcm9ncmFtcworCitQYXJ0IDEgLSBHZW5lcmFsIFRlcm1zCisKK0JZIERPV05MT0FESU5HLCBJTlNUQUxMSU5HLCBDT1BZSU5HLCBBQ0NFU1NJTkcsIE9SIFVTSU5HIFRIRSBQUk9HUkFNIFlPVQorQUdSRUUgVE8gVEhFIFRFUk1TIE9GIFRISVMgQUdSRUVNRU5ULiBJRiBZT1UgQVJFIEFDQ0VQVElORyBUSEVTRSBURVJNUworT04gQkVIQUxGIE9GIEFOT1RIRVIgUEVSU09OIE9SIEEgQ09NUEFOWSBPUiBPVEhFUiBMRUdBTCBFTlRJVFksIFlPVQorUkVQUkVTRU5UIEFORCBXQVJSQU5UIFRIQVQgWU9VIEhBVkUgRlVMTCBBVVRIT1JJVFkgVE8gQklORCBUSEFUIFBFUlNPTiwKK0NPTVBBTlksIE9SIExFR0FMIEVOVElUWSBUTyBUSEVTRSBURVJNUy4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEVTRQorVEVSTVMsCisKKy0gRE8gTk9UIERPV05MT0FELCBJTlNUQUxMLCBDT1BZLCBBQ0NFU1MsIE9SIFVTRSBUSEUgUFJPR1JBTTsgQU5ECisKKy0gUFJPTVBUTFkgUkVUVVJOIFRIRSBQUk9HUkFNIFRPIFRIRSBQQVJUWSBGUk9NIFdIT00gWU9VIEFDUVVJUkVEIElULiBJRgorWU9VIERPV05MT0FERUQgVEhFIFBST0dSQU0sIENPTlRBQ1QgVEhFIFBBUlRZIEZST00gV0hPTSBZT1UgQUNRVUlSRUQgSVQuCisKKyJFYXJseSBSZWxlYXNlIiBtZWFucyB0aGF0IHRoZSBQcm9ncmFtIGlzIG5vdCBmb3JtYWxseSByZWxlYXNlZCBvcgorY29tbWVyY2lhbGx5IGF2YWlsYWJsZS4gVGhlIHRlcm0gZG9lcyBub3QgaW1wbHkgdGhhdCB0aGUgUHJvZ3JhbSB3aWxsIGJlCitmb3JtYWxseSByZWxlYXNlZCBvciBtYWRlIGNvbW1lcmNpYWxseSBhdmFpbGFibGUuIElCTSBkb2VzIG5vdCB3YXJyYW50Cit0aGF0IHNob3VsZCBhIFByb2dyYW0gYmUgZm9ybWFsbHkgcmVsZWFzZWQgb3IgbWFkZSBjb21tZXJjaWFsbHkKK2F2YWlsYWJsZSB0aGF0IGl0IHdpbGwgYmUgc2ltaWxhciB0bywgb3IgY29tcGF0aWJsZSB3aXRoLCBFYXJseSBSZWxlYXNlCit2ZXJzaW9ucy4KKworIklCTSIgaXMgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBvciBvbmUgb2YgaXRzCitzdWJzaWRpYXJpZXMuCisKKyJMaWNlbnNlIEluZm9ybWF0aW9uIiAoIkxJIikgaXMgYSBkb2N1bWVudCB0aGF0IHByb3ZpZGVzIGluZm9ybWF0aW9uCitzcGVjaWZpYyB0byBhIFByb2dyYW0uIFRoZSBQcm9ncmFtJ3MgTEkgaXMgYXZhaWxhYmxlIGluIGEgZmlsZSBpbiB0aGUKK1Byb2dyYW0ncyBkaXJlY3RvcnksIGJ5IHRoZSB1c2Ugb2YgYSBzeXN0ZW0gY29tbWFuZCwgb3IgYXMgYSBib29rbGV0Cit3aGljaCBhY2NvbXBhbmllcyB0aGUgUHJvZ3JhbS4gVGhlIExJIG1heSBhbHNvIGJlIGZvdW5kIGF0CitodHRwOi8vd3d3LmlibS5jb20vc29mdHdhcmUvc2xhLyAuCisKKyJQcm9ncmFtIiBpcyB0aGUgZm9sbG93aW5nLCBpbmNsdWRpbmcgdGhlIG9yaWdpbmFsIGFuZCBhbGwgd2hvbGUgb3IKK3BhcnRpYWwgY29waWVzOiAxKSBtYWNoaW5lLXJlYWRhYmxlIGluc3RydWN0aW9ucyBhbmQgZGF0YSwgMikKK2NvbXBvbmVudHMsIDMpIGF1ZGlvLXZpc3VhbCBjb250ZW50IChzdWNoIGFzIGltYWdlcywgdGV4dCwgcmVjb3JkaW5ncywKK29yIHBpY3R1cmVzKSwgNCkgcmVsYXRlZCBsaWNlbnNlZCBtYXRlcmlhbHMsIGFuZCA1KSBsaWNlbnNlIHVzZQorZG9jdW1lbnRzIG9yIGtleXMsIGFuZCBkb2N1bWVudGF0aW9uLgorCisiWW91IiBhbmQgIllvdXIiIHJlZmVyIGVpdGhlciB0byBhbiBpbmRpdmlkdWFsIHBlcnNvbiBvciB0byBhIHNpbmdsZQorbGVnYWwgZW50aXR5LgorCitUaGlzIEFncmVlbWVudCBpbmNsdWRlcyBQYXJ0IDEgLSBHZW5lcmFsIFRlcm1zLCBQYXJ0IDIgLSBDb3VudHJ5LXVuaXF1ZQorVGVybXMgKGlmIGFueSksIGFuZCBMaWNlbnNlIEluZm9ybWF0aW9uIGFuZCBpcyB0aGUgY29tcGxldGUgYWdyZWVtZW50CitiZXR3ZWVuIFlvdSBhbmQgSUJNIHJlZ2FyZGluZyB0aGUgdXNlIG9mIHRoZSBQcm9ncmFtLiBJdCByZXBsYWNlcyBhbnkKK3ByaW9yIG9yYWwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9ucyBiZXR3ZWVuIFlvdSBhbmQgSUJNIGNvbmNlcm5pbmcgWW91cgordXNlIG9mIHRoZSBQcm9ncmFtLiBUaGUgdGVybXMgb2YgUGFydCAyIGFuZCBMaWNlbnNlIEluZm9ybWF0aW9uIG1heQorcmVwbGFjZSBvciBtb2RpZnkgdGhvc2Ugb2YgUGFydCAxLgorCisxLiBFbnRpdGxlbWVudAorCitMaWNlbnNlCisKK1RoZSBQcm9ncmFtIGlzIG93bmVkIGJ5IElCTSBvciBhbiBJQk0gc3VwcGxpZXIsIGFuZCBpcyBjb3B5cmlnaHRlZCBhbmQKK2xpY2Vuc2VkLCBub3Qgc29sZC4KKworSUJNIGdyYW50cyBZb3UgYSBub25leGNsdXNpdmUgbGljZW5zZSB0byB1c2UgdGhlIFByb2dyYW0gd2hlbiBZb3UKK2xhd2Z1bGx5IGFjcXVpcmUgaXQuCisKK1lvdSBtYXkgMSkgdXNlIHRoZSBQcm9ncmFtIG9ubHkgZm9yIGludGVybmFsIGV2YWx1YXRpb24gb3IgdGVzdGluZworcHVycG9zZXMsIGFuZCAyKSBtYWtlIGFuZCBpbnN0YWxsIGEgcmVhc29uYWJsZSBudW1iZXIgb2YgY29waWVzLAoraW5jbHVkaW5nIGEgYmFja3VwIGNvcHksIG9mIHRoZSBQcm9ncmFtIHRvIHN1cHBvcnQgc3VjaCB1c2UuIFRoZSB0ZXJtcworb2YgdGhpcyBsaWNlbnNlIGFwcGx5IHRvIGVhY2ggY29weSBZb3UgbWFrZS4gWW91IHdpbGwgcmVwcm9kdWNlIGFsbAorY29weXJpZ2h0IG5vdGljZXMgYW5kIGFsbCBvdGhlciBsZWdlbmRzIG9mIG93bmVyc2hpcCBvbiBlYWNoIGNvcHksIG9yCitwYXJ0aWFsIGNvcHksIG9mIHRoZSBQcm9ncmFtLgorCitUSEUgUFJPR1JBTSBNQVkgQ09OVEFJTiBBIERJU0FCTElORyBERVZJQ0UgVEhBVCBXSUxMIFBSRVZFTlQgSVQgRlJPTQorQkVJTkcgVVNFRCBBRlRFUiBUSEUgRVZBTFVBVElPTiBQRVJJT0QgRU5EUy4gWU9VIFdJTEwgTk9UIFRBTVBFUiBXSVRICitUSElTIERJU0FCTElORyBERVZJQ0UgT1IgVEhFIFBST0dSQU0uIFlPVSBTSE9VTEQgVEFLRSBQUkVDQVVUSU9OUyBUTworQVZPSUQgQU5ZIExPU1MgT0YgREFUQSBUSEFUIE1JR0hUIFJFU1VMVCBXSEVOIFRIRSBQUk9HUkFNIENBTiBOTyBMT05HRVIKK0JFIFVTRUQuCisKK1lvdSB3aWxsIDEpIG1haW50YWluIGEgcmVjb3JkIG9mIGFsbCBjb3BpZXMgb2YgdGhlIFByb2dyYW0gYW5kIDIpIGVuc3VyZQordGhhdCBhbnlvbmUgd2hvIHVzZXMgdGhlIFByb2dyYW0gKGFjY2Vzc2VkIGVpdGhlciBsb2NhbGx5IG9yIHJlbW90ZWx5KQorZG9lcyBzbyBvbmx5IGZvciBZb3VyIGF1dGhvcml6ZWQgdXNlIGFuZCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzCitBZ3JlZW1lbnQuCisKK1lvdSBtYXkgbm90IDEpIHVzZSwgY29weSwgbW9kaWZ5IG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gZXhjZXB0IGFzCitwcm92aWRlZCBpbiB0aGlzIEFncmVlbWVudDsgMikgcmV2ZXJzZSBhc3NlbWJsZSwgcmV2ZXJzZSBjb21waWxlLCBvcgorb3RoZXJ3aXNlIHRyYW5zbGF0ZSB0aGUgUHJvZ3JhbSBleGNlcHQgYXMgc3BlY2lmaWNhbGx5IHBlcm1pdHRlZCBieSBsYXcKK3dpdGhvdXQgdGhlIHBvc3NpYmlsaXR5IG9mIGNvbnRyYWN0dWFsIHdhaXZlcjsgb3IgMykgc3VibGljZW5zZSwgcmVudCwKK29yIGxlYXNlIHRoZSBQcm9ncmFtLgorCitUaGUgZXZhbHVhdGlvbiBwZXJpb2QgYmVnaW5zIHdoZW4gWW91IGFncmVlIHRvIHRoZSB0ZXJtcyBvZiB0aGlzCitBZ3JlZW1lbnQgYW5kIGVuZHMgMSkgYXMgb2YgdGhlIGR1cmF0aW9uIG9yIGRhdGUgc3BlY2lmaWVkIGluIHRoZQorTGljZW5zZSBJbmZvcm1hdGlvbiwgMikgd2hlbiB0aGUgUHJvZ3JhbSBhdXRvbWF0aWNhbGx5IGRpc2FibGVzIGl0c2VsZiwKK29yIDMpIHdoZW4gSUJNIG1ha2VzIHRoZSBwcm9ncmFtIGNvbW1lcmNpYWxseSBhdmFpbGFibGUuIFlvdSB3aWxsCitkZXN0cm95IHRoZSBQcm9ncmFtIGFuZCBhbGwgY29waWVzIG1hZGUgb2YgaXQgd2l0aGluIHRlbiBkYXlzIG9mIHRoZSBlbmQKK29mIHRoZSBldmFsdWF0aW9uIHBlcmlvZC4gVGhlcmUgaXMgbm8gY2hhcmdlIGZvciB0aGUgdXNlIG9mIFByb2dyYW0gZm9yCit0aGUgZHVyYXRpb24gb2YgdGhlIGV2YWx1YXRpb24gcGVyaW9kLgorCitJQk0gbWF5IHRlcm1pbmF0ZSBZb3VyIGxpY2Vuc2UgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mCit0aGlzIEFncmVlbWVudC4gSWYgSUJNIGRvZXMgc28sIFlvdSBtdXN0IGRlc3Ryb3kgYWxsIGNvcGllcyBvZiB0aGUgUHJvZ3JhbS4KKworMi4gUmlnaHRzIEluIERhdGEKKworWW91IGFzc2lnbiB0byBJQk0gYWxsIHJpZ2h0LCB0aXRsZSwgYW5kIGludGVyZXN0IChpbmNsdWRpbmcgb3duZXJzaGlwIG9mCitjb3B5cmlnaHQpIGluIGFueSBkYXRhLCBzdWdnZXN0aW9ucywgYW5kIHdyaXR0ZW4gbWF0ZXJpYWxzIHRoYXQgMSkgaXMKK3JlbGF0ZWQgdG8gWW91ciB1c2Ugb2YgdGhlIFByb2dyYW0gYW5kIDIpIFlvdSBwcm92aWRlIHRvIElCTS4gSWYgSUJNCityZXF1aXJlcyBpdCwgWW91IHdpbGwgc2lnbiBhbiBhcHByb3ByaWF0ZSBkb2N1bWVudCB0byBhc3NpZ24gc3VjaAorcmlnaHRzLiBOZWl0aGVyIHBhcnR5IHdpbGwgY2hhcmdlIHRoZSBvdGhlciBmb3IgcmlnaHRzIGluIGRhdGEgb3IgYW55Cit3b3JrIHBlcmZvcm1lZCBhcyBhIHJlc3VsdCBvZiB0aGlzIEFncmVlbWVudC4KKworMy4gTm8gV2FycmFudHkKKworU1VCSkVDVCBUTyBBTlkgU1RBVFVUT1JZIFdBUlJBTlRJRVMgV0hJQ0ggQ0FOTk9UIEJFIEVYQ0xVREVELCBJQk0gTUFLRVMKK05PIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBBTkQgTk9OLUlORlJJTkdFTUVOVCwgUkVHQVJESU5HIFRIRQorUFJPR1JBTSBPUiBURUNITklDQUwgU1VQUE9SVCwgSUYgQU5ZLgorCitUaGUgZXhjbHVzaW9uIGFsc28gYXBwbGllcyB0byBhbnkgb2YgSUJNJ3MgUHJvZ3JhbSBkZXZlbG9wZXJzIGFuZCBzdXBwbGllcnMuCisKK01hbnVmYWN0dXJlcnMsIHN1cHBsaWVycywgb3IgcHVibGlzaGVycyBvZiBub24tSUJNIFByb2dyYW1zIG1heSBwcm92aWRlCit0aGVpciBvd24gd2FycmFudGllcy4KKworSUJNIGRvZXMgbm90IHByb3ZpZGUgdGVjaG5pY2FsIHN1cHBvcnQsIHVubGVzcyBJQk0gc3BlY2lmaWVzIG90aGVyd2lzZS4KKworNC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkKKworQ2lyY3Vtc3RhbmNlcyBtYXkgYXJpc2Ugd2hlcmUsIGJlY2F1c2Ugb2YgYSBkZWZhdWx0IG9uIElCTSdzIHBhcnQgb3IKK290aGVyIGxpYWJpbGl0eSwgWW91IGFyZSBlbnRpdGxlZCB0byByZWNvdmVyIGRhbWFnZXMgZnJvbSBJQk0uIEluIGVhY2gKK3N1Y2ggaW5zdGFuY2UsIHJlZ2FyZGxlc3Mgb2YgdGhlIGJhc2lzIG9uIHdoaWNoIFlvdSBtYXkgYmUgZW50aXRsZWQgdG8KK2NsYWltIGRhbWFnZXMgZnJvbSBJQk0sIChpbmNsdWRpbmcgZnVuZGFtZW50YWwgYnJlYWNoLCBuZWdsaWdlbmNlLAorbWlzcmVwcmVzZW50YXRpb24sIG9yIG90aGVyIGNvbnRyYWN0IG9yIHRvcnQgY2xhaW0pLCBJQk0gaXMgbGlhYmxlIGZvcgorbm8gbW9yZSB0aGFuIDEpIGRhbWFnZXMgZm9yIGJvZGlseSBpbmp1cnkgKGluY2x1ZGluZyBkZWF0aCkgYW5kIGRhbWFnZQordG8gcmVhbCBwcm9wZXJ0eSBhbmQgdGFuZ2libGUgcGVyc29uYWwgcHJvcGVydHkgYW5kIDIpIHRoZSBhbW91bnQgb2YgYW55CitvdGhlciBhY3R1YWwgZGlyZWN0IGRhbWFnZXMgdXAgdG8gdGhlIGNoYXJnZXMgZm9yIHRoZSBQcm9ncmFtIHRoYXQgaXMKK3RoZSBzdWJqZWN0IG9mIHRoZSBjbGFpbS4KKworVGhpcyBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBhbHNvIGFwcGxpZXMgdG8gSUJNJ3MgUHJvZ3JhbSBkZXZlbG9wZXJzCithbmQgc3VwcGxpZXJzLiBJdCBpcyB0aGUgbWF4aW11bSBmb3Igd2hpY2ggdGhleSBhbmQgSUJNIGFyZSBjb2xsZWN0aXZlbHkKK3Jlc3BvbnNpYmxlLgorCitVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIElTIElCTSwgSVRTIFBST0dSQU0gREVWRUxPUEVSUyBPUiBTVVBQTElFUlMKK0xJQUJMRSBGT1IgQU5ZIE9GIFRIRSBGT0xMT1dJTkcsIEVWRU4gSUYgSU5GT1JNRUQgT0YgVEhFSVIgUE9TU0lCSUxJVFk6CisKKzEuIExPU1MgT0YsIE9SIERBTUFHRSBUTywgREFUQTsKKworMi4gU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgSU5ESVJFQ1QgREFNQUdFUywgT1IgRk9SIEFOWSBFQ09OT01JQworQ09OU0VRVUVOVElBTCBEQU1BR0VTOyBPUgorCiszLiBMT1NUIFBST0ZJVFMsIEJVU0lORVNTLCBSRVZFTlVFLCBHT09EV0lMTCwgT1IgQU5USUNJUEFURUQgU0FWSU5HUy4KKworU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YKK0lOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSEUgQUJPVkUgTElNSVRBVElPTiBPUgorRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCis1LiBHZW5lcmFsCisKKzEuIE5vdGhpbmcgaW4gdGhpcyBBZ3JlZW1lbnQgYWZmZWN0cyBhbnkgc3RhdHV0b3J5IHJpZ2h0cyBvZiBjb25zdW1lcnMKK3RoYXQgY2Fubm90IGJlIHdhaXZlZCBvciBsaW1pdGVkIGJ5IGNvbnRyYWN0LgorCisyLiBJbiB0aGUgZXZlbnQgdGhhdCBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGhlbGQgdG8gYmUKK2ludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSwgdGhlIHJlbWFpbmluZyBwcm92aXNpb25zIG9mIHRoaXMgQWdyZWVtZW50CityZW1haW4gaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0LgorCiszLiBZb3UgbWF5IG5vdCBleHBvcnQgdGhlIFByb2dyYW0uCisKKzQuIFlvdSBhZ3JlZSB0byBhbGxvdyBJQk0gdG8gc3RvcmUgYW5kIHVzZSBZb3VyIGNvbnRhY3QgaW5mb3JtYXRpb24sCitpbmNsdWRpbmcgbmFtZXMsIHBob25lIG51bWJlcnMsIGFuZCBlLW1haWwgYWRkcmVzc2VzLCBhbnl3aGVyZSB0aGV5IGRvCitidXNpbmVzcy4gU3VjaCBpbmZvcm1hdGlvbiB3aWxsIGJlIHByb2Nlc3NlZCBhbmQgdXNlZCBpbiBjb25uZWN0aW9uIHdpdGgKK291ciBidXNpbmVzcyByZWxhdGlvbnNoaXAsIGFuZCBtYXkgYmUgcHJvdmlkZWQgdG8gY29udHJhY3RvcnMsIEJ1c2luZXNzCitQYXJ0bmVycywgYW5kIGFzc2lnbmVlcyBvZiBJQk0gZm9yIHVzZXMgY29uc2lzdGVudCB3aXRoIHRoZWlyIGNvbGxlY3RpdmUKK2J1c2luZXNzIGFjdGl2aXRpZXMsIGluY2x1ZGluZyBjb21tdW5pY2F0aW5nIHdpdGggWW91IChmb3IgZXhhbXBsZSwgZm9yCitwcm9jZXNzaW5nIG9yZGVycywgZm9yIHByb21vdGlvbnMsIGFuZCBmb3IgbWFya2V0IHJlc2VhcmNoKS4KKworNS4gTmVpdGhlciBZb3Ugbm9yIElCTSB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMgQWdyZWVtZW50Cittb3JlIHRoYW4gdHdvIHllYXJzIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UgdW5sZXNzIG90aGVyd2lzZQorcHJvdmlkZWQgYnkgbG9jYWwgbGF3IHdpdGhvdXQgdGhlIHBvc3NpYmlsaXR5IG9mIGNvbnRyYWN0dWFsIHdhaXZlciBvcgorbGltaXRhdGlvbi4KKworNi4gTmVpdGhlciBZb3Ugbm9yIElCTSBpcyByZXNwb25zaWJsZSBmb3IgZmFpbHVyZSB0byBmdWxmaWxsIGFueQorb2JsaWdhdGlvbnMgZHVlIHRvIGNhdXNlcyBiZXlvbmQgaXRzIGNvbnRyb2wuCisKKzcuIFRoaXMgQWdyZWVtZW50IHdpbGwgbm90IGNyZWF0ZSBhbnkgcmlnaHQgb3IgY2F1c2Ugb2YgYWN0aW9uIGZvciBhbnkKK3RoaXJkIHBhcnR5LCBub3Igd2lsbCBJQk0gYmUgcmVzcG9uc2libGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMKK2FnYWluc3QgWW91IGV4Y2VwdCwgYXMgcGVybWl0dGVkIGJ5IHRoZSBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eSBzZWN0aW9uCithYm92ZSwgZm9yIGJvZGlseSBpbmp1cnkgKGluY2x1ZGluZyBkZWF0aCkgb3IgZGFtYWdlIHRvIHJlYWwgb3IgdGFuZ2libGUKK3BlcnNvbmFsIHByb3BlcnR5IGZvciB3aGljaCBJQk0gaXMgbGVnYWxseSBsaWFibGUuCisKKzYuIEdvdmVybmluZyBMYXcsIEp1cmlzZGljdGlvbiwgYW5kIEFyYml0cmF0aW9uCisKK0dvdmVybmluZyBMYXcKKworQm90aCBZb3UgYW5kIElCTSBjb25zZW50IHRvIHRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgbGF3cyBvZiB0aGUgY291bnRyeQoraW4gd2hpY2ggWW91IGFjcXVpcmVkIHRoZSBQcm9ncmFtIGxpY2Vuc2UgdG8gZ292ZXJuLCBpbnRlcnByZXQsIGFuZAorZW5mb3JjZSBhbGwgb2YgWW91ciBhbmQgSUJNJ3MgcmlnaHRzLCBkdXRpZXMsIGFuZCBvYmxpZ2F0aW9ucyBhcmlzaW5nCitmcm9tLCBvciByZWxhdGluZyBpbiBhbnkgbWFubmVyIHRvLCB0aGUgc3ViamVjdCBtYXR0ZXIgb2YgdGhpcworQWdyZWVtZW50LCB3aXRob3V0IHJlZ2FyZCB0byBjb25mbGljdCBvZiBsYXcgcHJpbmNpcGxlcy4KKworVGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mCitHb29kcyBkb2VzIG5vdCBhcHBseS4KKworSnVyaXNkaWN0aW9uCisKK0FsbCBvZiBvdXIgcmlnaHRzLCBkdXRpZXMsIGFuZCBvYmxpZ2F0aW9ucyBhcmUgc3ViamVjdCB0byB0aGUgY291cnRzIG9mCit0aGUgY291bnRyeSBpbiB3aGljaCBZb3UgYWNxdWlyZWQgdGhlIFByb2dyYW0gbGljZW5zZS4KKworUGFydCAyIC0gQ291bnRyeS11bmlxdWUgVGVybXMKKworQU1FUklDQVMKKworQVJHRU5USU5BOiBHb3Zlcm5pbmcgTGF3LCBKdXJpc2RpY3Rpb24sIGFuZCBBcmJpdHJhdGlvbiAoU2VjdGlvbiA2KTogVGhlCitmb2xsb3dpbmcgZXhjZXB0aW9uIGlzIGFkZGVkIHRvIHRoaXMgc2VjdGlvbjoKKworQW55IGxpdGlnYXRpb24gYXJpc2luZyBmcm9tIHRoaXMgQWdyZWVtZW50IHdpbGwgYmUgc2V0dGxlZCBleGNsdXNpdmVseQorYnkgdGhlIE9yZGluYXJ5IENvbW1lcmNpYWwgQ291cnQgb2YgdGhlIGNpdHkgb2YgQnVlbm9zIEFpcmVzLgorCitCUkFaSUw6IEdvdmVybmluZyBMYXcsIEp1cmlzZGljdGlvbiwgYW5kIEFyYml0cmF0aW9uIChTZWN0aW9uIDYpOiBUaGUKK2ZvbGxvd2luZyBleGNlcHRpb24gaXMgYWRkZWQgdG8gdGhpcyBzZWN0aW9uOgorCitBbnkgbGl0aWdhdGlvbiBhcmlzaW5nIGZyb20gdGhpcyBBZ3JlZW1lbnQgd2lsbCBiZSBzZXR0bGVkIGV4Y2x1c2l2ZWx5CitieSB0aGUgY291cnQgb2YgUmlvIGRlIEphbmVpcm8sIFJKLgorCitDQU5BREE6IExpbWl0YXRpb24gb2YgTGlhYmlsaXR5IChTZWN0aW9uIDQpOiBUaGUgZm9sbG93aW5nIHJlcGxhY2VzIGl0ZW0KKzEgaW4gdGhlIGZpcnN0IHBhcmFncmFwaCBvZiB0aGlzIHNlY3Rpb246CisKKzEpIGRhbWFnZXMgZm9yIGJvZGlseSBpbmp1cnkgKGluY2x1ZGluZyBkZWF0aCkgYW5kIHBoeXNpY2FsIGhhcm0gdG8gcmVhbAorcHJvcGVydHkgYW5kIHRhbmdpYmxlIHBlcnNvbmFsIHByb3BlcnR5IGNhdXNlZCBieSBJQk0ncyBuZWdsaWdlbmNlOyBhbmQKKworR2VuZXJhbCAoU2VjdGlvbiA1KTogVGhlIGZvbGxvd2luZyByZXBsYWNlcyB0aGUgdGVybXMgaW4gaXRlbSA3OgorCis3LiBUaGlzIEFncmVlbWVudCB3aWxsIG5vdCBjcmVhdGUgYW55IHJpZ2h0IG9yIGNhdXNlIG9mIGFjdGlvbiBmb3IgYW55Cit0aGlyZCBwYXJ0eSwgbm9yIHdpbGwgSUJNIGJlIHJlc3BvbnNpYmxlIGZvciBhbnkgdGhpcmQgcGFydHkgY2xhaW1zCithZ2FpbnN0IFlvdSBleGNlcHQgYXMgcGVybWl0dGVkIGJ5IHRoZSBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eSBzZWN0aW9uCithYm92ZSBmb3IgYm9kaWx5IGluanVyeSAoaW5jbHVkaW5nIGRlYXRoKSBvciBwaHlzaWNhbCBoYXJtIHRvIHJlYWwgb3IKK3RhbmdpYmxlIHBlcnNvbmFsIHByb3BlcnR5IGNhdXNlZCBieSBJQk0ncyBuZWdsaWdlbmNlIGZvciB3aGljaCBJQk0gaXMKK2xlZ2FsbHkgbGlhYmxlLgorCitHb3Zlcm5pbmcgTGF3LCBKdXJpc2RpY3Rpb24sIGFuZCBBcmJpdHJhdGlvbiAoU2VjdGlvbiA2KTogVGhlIHBocmFzZQorInRoZSBsYXdzIG9mIHRoZSBjb3VudHJ5IGluIHdoaWNoIFlvdSBhY3F1aXJlZCB0aGUgUHJvZ3JhbSBsaWNlbnNlIiBpbgordGhlIEdvdmVybmluZyBMYXcgc3Vic2VjdGlvbiBpcyByZXBsYWNlZCBieSB0aGUgZm9sbG93aW5nOgorCit0aGUgbGF3cyBpbiB0aGUgUHJvdmluY2Ugb2YgT250YXJpbworCitQRVJVOiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eSAoU2VjdGlvbiA0KTogVGhlIGZvbGxvd2luZyBpcyBhZGRlZCBhdCB0aGUKK2VuZCBvZiB0aGlzIHNlY3Rpb246CisKK0luIGFjY29yZGFuY2Ugd2l0aCBBcnRpY2xlIDEzMjggb2YgdGhlIFBlcnV2aWFuIENpdmlsIENvZGUsIHRoZQorbGltaXRhdGlvbnMgYW5kIGV4Y2x1c2lvbnMgc3BlY2lmaWVkIGluIHRoaXMgc2VjdGlvbiB3aWxsIG5vdCBhcHBseSB0bworZGFtYWdlcyBjYXVzZWQgYnkgSUJNJ3Mgd2lsbGZ1bCBtaXNjb25kdWN0ICgiZG9sbyIpIG9yIGdyb3NzIG5lZ2xpZ2VuY2UKKygiY3VscGEgaW5leGN1c2FibGUiKS4KKworVU5JVEVEIFNUQVRFUyBPRiBBTUVSSUNBOiBHZW5lcmFsIChTZWN0aW9uIDUpOiBUaGUgZm9sbG93aW5nIGlzIGFkZGVkIHRvCit0aGlzIHNlY3Rpb246CisKK1UuUy4gR292ZXJubWVudCBVc2VycyBSZXN0cmljdGVkIFJpZ2h0cyAtIFVzZSwgZHVwbGljYXRpb24gb3IgZGlzY2xvc3VyZQorcmVzdHJpY3RlZCBieSB0aGUgR1NBIEFEUCBTY2hlZHVsZSBDb250cmFjdCB3aXRoIHRoZSBJQk0gQ29ycG9yYXRpb24uCisKK0dvdmVybmluZyBMYXcsIEp1cmlzZGljdGlvbiwgYW5kIEFyYml0cmF0aW9uIChTZWN0aW9uIDYpOiBUaGUgcGhyYXNlCisidGhlIGxhd3Mgb2YgdGhlIGNvdW50cnkgaW4gd2hpY2ggWW91IGFjcXVpcmVkIHRoZSBQcm9ncmFtIGxpY2Vuc2UiIGluCit0aGUgR292ZXJuaW5nIExhdyBzdWJzZWN0aW9uIGlzIHJlcGxhY2VkIGJ5IHRoZSBmb2xsb3dpbmc6CisKK3RoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBOZXcgWW9yaywgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhCisKK0FTSUEgUEFDSUZJQworCitBVVNUUkFMSUE6IE5vIFdhcnJhbnR5IChTZWN0aW9uIDMpOiBUaGUgZm9sbG93aW5nIGlzIGFkZGVkOgorCitBbHRob3VnaCBJQk0gc3BlY2lmaWVzIHRoYXQgdGhlcmUgYXJlIG5vIHdhcnJhbnRpZXMsIFlvdSBtYXkgaGF2ZQorY2VydGFpbiByaWdodHMgdW5kZXIgdGhlIFRyYWRlIFByYWN0aWNlcyBBY3QgMTk3NCBvciBvdGhlciBsZWdpc2xhdGlvbgorYW5kIGFyZSBvbmx5IGxpbWl0ZWQgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgdGhlIGFwcGxpY2FibGUgbGVnaXNsYXRpb24uCisKK0xpbWl0YXRpb24gb2YgTGlhYmlsaXR5IChTZWN0aW9uIDQpOiBUaGUgZm9sbG93aW5nIGlzIGFkZGVkOgorCitXaGVyZSBJQk0gaXMgaW4gYnJlYWNoIG9mIGEgY29uZGl0aW9uIG9yIHdhcnJhbnR5IGltcGxpZWQgYnkgdGhlIFRyYWRlCitQcmFjdGljZXMgQWN0IDE5NzQsIElCTSdzIGxpYWJpbGl0eSBpcyBsaW1pdGVkIHRvIHRoZSByZXBhaXIgb3IKK3JlcGxhY2VtZW50IG9mIHRoZSBnb29kcywgb3IgdGhlIHN1cHBseSBvZiBlcXVpdmFsZW50IGdvb2RzLiBXaGVyZSB0aGF0Citjb25kaXRpb24gb3Igd2FycmFudHkgcmVsYXRlcyB0byByaWdodCB0byBzZWxsLCBxdWlldCBwb3NzZXNzaW9uIG9yCitjbGVhciB0aXRsZSwgb3IgdGhlIGdvb2RzIGFyZSBvZiBhIGtpbmQgb3JkaW5hcmlseSBhY3F1aXJlZCBmb3IKK3BlcnNvbmFsLCBkb21lc3RpYyBvciBob3VzZWhvbGQgdXNlIG9yIGNvbnN1bXB0aW9uLCB0aGVuIG5vbmUgb2YgdGhlCitsaW1pdGF0aW9ucyBpbiB0aGlzIHBhcmFncmFwaCBhcHBseS4KKworR292ZXJuaW5nIExhdywgSnVyaXNkaWN0aW9uLCBhbmQgQXJiaXRyYXRpb24gKFNlY3Rpb24gNik6IFRoZSBwaHJhc2UKKyJ0aGUgbGF3cyBvZiB0aGUgY291bnRyeSBpbiB3aGljaCBZb3UgYWNxdWlyZWQgdGhlIFByb2dyYW0gbGljZW5zZSIgaW4KK3RoZSBHb3Zlcm5pbmcgTGF3IHN1YnNlY3Rpb24gaXMgcmVwbGFjZWQgYnkgdGhlIGZvbGxvd2luZzoKKwordGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9yIFRlcnJpdG9yeSBpbiB3aGljaCBZb3UgYWNxdWlyZWQgdGhlIFByb2dyYW0gbGljZW5zZQorCitDQU1CT0RJQSwgTEFPUywgYW5kIFZJRVROQU06IEdvdmVybmluZyBMYXcsIEp1cmlzZGljdGlvbiwgYW5kCitBcmJpdHJhdGlvbiAoU2VjdGlvbiA2KTogVGhlIHBocmFzZSAidGhlIGxhd3Mgb2YgdGhlIGNvdW50cnkgaW4gd2hpY2gKK1lvdSBhY3F1aXJlZCB0aGUgUHJvZ3JhbSBsaWNlbnNlIiBpbiB0aGUgR292ZXJuaW5nIExhdyBzdWJzZWN0aW9uIGlzCityZXBsYWNlZCBieSB0aGUgZm9sbG93aW5nOgorCit0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgTmV3IFlvcmssIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYQorCitUaGUgZm9sbG93aW5nIGlzIGFkZGVkIHRvIHRoaXMgc2VjdGlvbjoKKworQXJiaXRyYXRpb24KKworRGlzcHV0ZXMgYXJpc2luZyBvdXQgb2Ygb3IgaW4gY29ubmVjdGlvbiB3aXRoIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlCitmaW5hbGx5IHNldHRsZWQgYnkgYXJiaXRyYXRpb24gd2hpY2ggc2hhbGwgYmUgaGVsZCBpbiBTaW5nYXBvcmUgaW4KK2FjY29yZGFuY2Ugd2l0aCB0aGUgQXJiaXRyYXRpb24gUnVsZXMgb2YgU2luZ2Fwb3JlIEludGVybmF0aW9uYWwKK0FyYml0cmF0aW9uIENlbnRlciAoIlNJQUMgUnVsZXMiKSB0aGVuIGluIGVmZmVjdC4gVGhlIGFyYml0cmF0aW9uIGF3YXJkCitzaGFsbCBiZSBmaW5hbCBhbmQgYmluZGluZyBmb3IgdGhlIHBhcnRpZXMgd2l0aG91dCBhcHBlYWwgYW5kIHNoYWxsIGJlCitpbiB3cml0aW5nIGFuZCBzZXQgZm9ydGggdGhlIGZpbmRpbmdzIG9mIGZhY3QgYW5kIHRoZSBjb25jbHVzaW9ucyBvZiBsYXcuCisKK1RoZSBudW1iZXIgb2YgYXJiaXRyYXRvcnMgc2hhbGwgYmUgdGhyZWUsIHdpdGggZWFjaCBzaWRlIHRvIHRoZSBkaXNwdXRlCitiZWluZyBlbnRpdGxlZCB0byBhcHBvaW50IG9uZSBhcmJpdHJhdG9yLiBUaGUgdHdvIGFyYml0cmF0b3JzIGFwcG9pbnRlZAorYnkgdGhlIHBhcnRpZXMgc2hhbGwgYXBwb2ludCBhIHRoaXJkIGFyYml0cmF0b3Igd2hvIHNoYWxsIGFjdCBhcworY2hhaXJtYW4gb2YgdGhlIHByb2NlZWRpbmdzLiBWYWNhbmNpZXMgaW4gdGhlIHBvc3Qgb2YgY2hhaXJtYW4gc2hhbGwgYmUKK2ZpbGxlZCBieSB0aGUgcHJlc2lkZW50IG9mIHRoZSBTSUFDLiBPdGhlciB2YWNhbmNpZXMgc2hhbGwgYmUgZmlsbGVkIGJ5Cit0aGUgcmVzcGVjdGl2ZSBub21pbmF0aW5nIHBhcnR5LiBQcm9jZWVkaW5ncyBzaGFsbCBjb250aW51ZSBmcm9tIHRoZQorc3RhZ2UgdGhleSB3ZXJlIGF0IHdoZW4gdGhlIHZhY2FuY3kgb2NjdXJyZWQuCisKK0lmIG9uZSBvZiB0aGUgcGFydGllcyByZWZ1c2VzIG9yIG90aGVyd2lzZSBmYWlscyB0byBhcHBvaW50IGFuCithcmJpdHJhdG9yIHdpdGhpbiAzMCBkYXlzIG9mIHRoZSBkYXRlIHRoZSBvdGhlciBwYXJ0eSBhcHBvaW50cyBpdHMsIHRoZQorZmlyc3QgYXBwb2ludGVkIGFyYml0cmF0b3Igc2hhbGwgYmUgdGhlIHNvbGUgYXJiaXRyYXRvciwgcHJvdmlkZWQgdGhhdAordGhlIGFyYml0cmF0b3Igd2FzIHZhbGlkbHkgYW5kIHByb3Blcmx5IGFwcG9pbnRlZC4KKworQWxsIHByb2NlZWRpbmdzIHNoYWxsIGJlIGNvbmR1Y3RlZCwgaW5jbHVkaW5nIGFsbCBkb2N1bWVudHMgcHJlc2VudGVkIGluCitzdWNoIHByb2NlZWRpbmdzLCBpbiB0aGUgRW5nbGlzaCBsYW5ndWFnZS4gVGhlIEVuZ2xpc2ggbGFuZ3VhZ2UgdmVyc2lvbgorb2YgdGhpcyBBZ3JlZW1lbnQgcHJldmFpbHMgb3ZlciBhbnkgb3RoZXIgbGFuZ3VhZ2UgdmVyc2lvbi4KKworSE9ORyBLT05HIFMuQS5SLiBhbmQgTUFDQVUgUy5BLlIuIG9mIENoaW5hOiBHb3Zlcm5pbmcgTGF3LCBKdXJpc2RpY3Rpb24sCithbmQgQXJiaXRyYXRpb24gKFNlY3Rpb24gNik6IFRoZSBwaHJhc2UgInRoZSBsYXdzIG9mIHRoZSBjb3VudHJ5IGluCit3aGljaCBZb3UgYWNxdWlyZWQgdGhlIFByb2dyYW0gbGljZW5zZSIgaW4gdGhlIEdvdmVybmluZyBMYXcgc3Vic2VjdGlvbgoraXMgcmVwbGFjZWQgYnkgdGhlIGZvbGxvd2luZzoKKwordGhlIGxhd3Mgb2YgSG9uZyBLb25nIFNwZWNpYWwgQWRtaW5pc3RyYXRpdmUgUmVnaW9uIG9mIENoaW5hCisKK0lORElBOiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eSAoU2VjdGlvbiA0KTogVGhlIGZvbGxvd2luZyByZXBsYWNlcyB0aGUKK3Rlcm1zIG9mIGl0ZW1zIDEgYW5kIDIgb2YgdGhlIGZpcnN0IHBhcmFncmFwaDoKKworMSkgbGlhYmlsaXR5IGZvciBib2RpbHkgaW5qdXJ5IChpbmNsdWRpbmcgZGVhdGgpIG9yIGRhbWFnZSB0byByZWFsCitwcm9wZXJ0eSBhbmQgdGFuZ2libGUgcGVyc29uYWwgcHJvcGVydHkgd2lsbCBiZSBsaW1pdGVkIHRvIHRoYXQgY2F1c2VkCitieSBJQk0ncyBuZWdsaWdlbmNlOyBhbmQgMikgYXMgdG8gYW55IG90aGVyIGFjdHVhbCBkYW1hZ2UgYXJpc2luZyBpbiBhbnkKK3NpdHVhdGlvbiBpbnZvbHZpbmcgbm9ucGVyZm9ybWFuY2UgYnkgSUJNIHB1cnN1YW50IHRvLCBvciBpbiBhbnkgd2F5CityZWxhdGVkIHRvIHRoZSBzdWJqZWN0IG9mIHRoaXMgQWdyZWVtZW50LCBJQk0ncyBsaWFiaWxpdHkgd2lsbCBiZQorbGltaXRlZCB0byB0aGUgY2hhcmdlIHBhaWQgYnkgWW91IGZvciB0aGUgaW5kaXZpZHVhbCBQcm9ncmFtIHRoYXQgaXMgdGhlCitzdWJqZWN0IG9mIHRoZSBjbGFpbS4KKworR2VuZXJhbCAoU2VjdGlvbiA1KTogVGhlIGZvbGxvd2luZyByZXBsYWNlcyB0aGUgdGVybXMgb2YgaXRlbSA1OgorCitJZiBubyBzdWl0IG9yIG90aGVyIGxlZ2FsIGFjdGlvbiBpcyBicm91Z2h0LCB3aXRoaW4gdGhyZWUgeWVhcnMgYWZ0ZXIKK3RoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UsIGluIHJlc3BlY3Qgb2YgYW55IGNsYWltIHRoYXQgZWl0aGVyIHBhcnR5IG1heQoraGF2ZSBhZ2FpbnN0IHRoZSBvdGhlciwgdGhlIHJpZ2h0cyBvZiB0aGUgY29uY2VybmVkIHBhcnR5IGluIHJlc3BlY3Qgb2YKK3N1Y2ggY2xhaW0gd2lsbCBiZSBmb3JmZWl0ZWQgYW5kIHRoZSBvdGhlciBwYXJ0eSB3aWxsIHN0YW5kIHJlbGVhc2VkCitmcm9tIGl0cyBvYmxpZ2F0aW9ucyBpbiByZXNwZWN0IG9mIHN1Y2ggY2xhaW0uCisKK0dvdmVybmluZyBMYXcsIEp1cmlzZGljdGlvbiwgYW5kIEFyYml0cmF0aW9uIChTZWN0aW9uIDYpOiBUaGUgZm9sbG93aW5nCitpcyBhZGRlZCB0byB0aGlzIHNlY3Rpb246CisKK0FyYml0cmF0aW9uCisKK0Rpc3B1dGVzIGFyaXNpbmcgb3V0IG9mIG9yIGluIGNvbm5lY3Rpb24gd2l0aCB0aGlzIEFncmVlbWVudCBzaGFsbCBiZQorZmluYWxseSBzZXR0bGVkIGJ5IGFyYml0cmF0aW9uIHdoaWNoIHNoYWxsIGJlIGhlbGQgaW4gQmFuZ2Fsb3JlLCBJbmRpYQoraW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBsYXdzIG9mIEluZGlhIHRoZW4gaW4gZWZmZWN0LiBUaGUgYXJiaXRyYXRpb24KK2F3YXJkIHNoYWxsIGJlIGZpbmFsIGFuZCBiaW5kaW5nIGZvciB0aGUgcGFydGllcyB3aXRob3V0IGFwcGVhbCBhbmQKK3NoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNldCBmb3J0aCB0aGUgZmluZGluZ3Mgb2YgZmFjdCBhbmQgdGhlCitjb25jbHVzaW9ucyBvZiBsYXcuCisKK1RoZSBudW1iZXIgb2YgYXJiaXRyYXRvcnMgc2hhbGwgYmUgdGhyZWUsIHdpdGggZWFjaCBzaWRlIHRvIHRoZSBkaXNwdXRlCitiZWluZyBlbnRpdGxlZCB0byBhcHBvaW50IG9uZSBhcmJpdHJhdG9yLiBUaGUgdHdvIGFyYml0cmF0b3JzIGFwcG9pbnRlZAorYnkgdGhlIHBhcnRpZXMgc2hhbGwgYXBwb2ludCBhIHRoaXJkIGFyYml0cmF0b3Igd2hvIHNoYWxsIGFjdCBhcworY2hhaXJtYW4gb2YgdGhlIHByb2NlZWRpbmdzLiBWYWNhbmNpZXMgaW4gdGhlIHBvc3Qgb2YgY2hhaXJtYW4gc2hhbGwgYmUKK2ZpbGxlZCBieSB0aGUgcHJlc2lkZW50IG9mIHRoZSBCYXIgQ291bmNpbCBvZiBJbmRpYS4gT3RoZXIgdmFjYW5jaWVzCitzaGFsbCBiZSBmaWxsZWQgYnkgdGhlIHJlc3BlY3RpdmUgbm9taW5hdGluZyBwYXJ0eS4gUHJvY2VlZGluZ3Mgc2hhbGwKK2NvbnRpbnVlIGZyb20gdGhlIHN0YWdlIHRoZXkgd2VyZSBhdCB3aGVuIHRoZSB2YWNhbmN5IG9jY3VycmVkLgorCitJZiBvbmUgb2YgdGhlIHBhcnRpZXMgcmVmdXNlcyBvciBvdGhlcndpc2UgZmFpbHMgdG8gYXBwb2ludCBhbgorYXJiaXRyYXRvciB3aXRoaW4gMzAgZGF5cyBvZiB0aGUgZGF0ZSB0aGUgb3RoZXIgcGFydHkgYXBwb2ludHMgaXRzLCB0aGUKK2ZpcnN0IGFwcG9pbnRlZCBhcmJpdHJhdG9yIHNoYWxsIGJlIHRoZSBzb2xlIGFyYml0cmF0b3IsIHByb3ZpZGVkIHRoYXQKK3RoZSBhcmJpdHJhdG9yIHdhcyB2YWxpZGx5IGFuZCBwcm9wZXJseSBhcHBvaW50ZWQuCisKK0FsbCBwcm9jZWVkaW5ncyBzaGFsbCBiZSBjb25kdWN0ZWQsIGluY2x1ZGluZyBhbGwgZG9jdW1lbnRzIHByZXNlbnRlZCBpbgorc3VjaCBwcm9jZWVkaW5ncywgaW4gdGhlIEVuZ2xpc2ggbGFuZ3VhZ2UuIFRoZSBFbmdsaXNoIGxhbmd1YWdlIHZlcnNpb24KK29mIHRoaXMgQWdyZWVtZW50IHByZXZhaWxzIG92ZXIgYW55IG90aGVyIGxhbmd1YWdlIHZlcnNpb24uCisKK0pBUEFOOiBHZW5lcmFsIChTZWN0aW9uIDUpOiBUaGUgZm9sbG93aW5nIGlzIGluc2VydGVkIGFmdGVyIGl0ZW0gNToKKworQW55IGRvdWJ0cyBjb25jZXJuaW5nIHRoaXMgQWdyZWVtZW50IHdpbGwgYmUgaW5pdGlhbGx5IHJlc29sdmVkIGJldHdlZW4KK3VzIGluIGdvb2QgZmFpdGggYW5kIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgcHJpbmNpcGxlIG9mIG11dHVhbCB0cnVzdC4KKworTUFMQVlTSUE6IExpbWl0YXRpb24gb2YgTGlhYmlsaXR5IChTZWN0aW9uIDQpOiBUaGUgd29yZCAiU1BFQ0lBTCIgaW4KK2l0ZW0gMiBvZiB0aGUgdGhpcmQgcGFyYWdyYXBoIGlzIGRlbGV0ZWQ6CisKK05FVyBaRUFMQU5EOiBObyBXYXJyYW50eSAoU2VjdGlvbiAzKTogVGhlIGZvbGxvd2luZyBpcyBhZGRlZDoKKworQWx0aG91Z2ggSUJNIHNwZWNpZmllcyB0aGF0IHRoZXJlIGFyZSBubyB3YXJyYW50aWVzLCBZb3UgbWF5IGhhdmUKK2NlcnRhaW4gcmlnaHRzIHVuZGVyIHRoZSBDb25zdW1lciBHdWFyYW50ZWVzIEFjdCAxOTkzIG9yIG90aGVyCitsZWdpc2xhdGlvbiB3aGljaCBjYW5ub3QgYmUgZXhjbHVkZWQgb3IgbGltaXRlZC4gVGhlIENvbnN1bWVyIEd1YXJhbnRlZXMKK0FjdCAxOTkzIHdpbGwgbm90IGFwcGx5IGluIHJlc3BlY3Qgb2YgYW55IGdvb2RzIHdoaWNoIElCTSBwcm92aWRlcywgaWYKK1lvdSByZXF1aXJlIHRoZSBnb29kcyBmb3IgdGhlIHB1cnBvc2VzIG9mIGEgYnVzaW5lc3MgYXMgZGVmaW5lZCBpbiB0aGF0IEFjdC4KKworTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkgKFNlY3Rpb24gNCk6IFRoZSBmb2xsb3dpbmcgaXMgYWRkZWQ6CisKK1doZXJlIFByb2dyYW1zIGFyZSBub3QgYWNxdWlyZWQgZm9yIHRoZSBwdXJwb3NlcyBvZiBhIGJ1c2luZXNzIGFzCitkZWZpbmVkIGluIHRoZSBDb25zdW1lciBHdWFyYW50ZWVzIEFjdCAxOTkzLCB0aGUgbGltaXRhdGlvbnMgaW4gdGhpcworU2VjdGlvbiBhcmUgc3ViamVjdCB0byB0aGUgbGltaXRhdGlvbnMgaW4gdGhhdCBBY3QuCisKK1BFT1BMRSdTIFJFUFVCTElDIE9GIENISU5BOiBHb3Zlcm5pbmcgTGF3LCBKdXJpc2RpY3Rpb24sIGFuZCBBcmJpdHJhdGlvbgorKFNlY3Rpb24gNik6IFRoZSBwaHJhc2UgInRoZSBsYXdzIG9mIHRoZSBjb3VudHJ5IGluIHdoaWNoIFlvdSBhY3F1aXJlZAordGhlIFByb2dyYW0gbGljZW5zZSIgaW4gdGhlIEdvdmVybmluZyBMYXcgc3Vic2VjdGlvbiBpcyByZXBsYWNlZCBieSB0aGUKK2ZvbGxvd2luZzoKKwordGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIE5ldyBZb3JrLCBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EgKGV4Y2VwdCB3aGVuCitsb2NhbCBsYXcgcmVxdWlyZXMgb3RoZXJ3aXNlKQorCitQSElMSVBQSU5FUzogTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkgKFNlY3Rpb24gNCk6IFRoZSBmb2xsb3dpbmcgcmVwbGFjZXMKK3RoZSB0ZXJtcyBvZiBpdGVtIDIgb2YgdGhlIHRoaXJkIHBhcmFncmFwaDoKKworMi4gc3BlY2lhbCAoaW5jbHVkaW5nIG5vbWluYWwgYW5kIGV4ZW1wbGFyeSBkYW1hZ2VzKSwgbW9yYWwsIGluY2lkZW50YWwsCitvciBpbmRpcmVjdCBkYW1hZ2VzIG9yIGZvciBhbnkgZWNvbm9taWMgY29uc2VxdWVudGlhbCBkYW1hZ2VzOyBvcgorCitHb3Zlcm5pbmcgTGF3LCBKdXJpc2RpY3Rpb24sIGFuZCBBcmJpdHJhdGlvbiAoU2VjdGlvbiA2KTogVGhlIGZvbGxvd2luZworaXMgYWRkZWQgdG8gdGhpcyBzZWN0aW9uOgorCitBcmJpdHJhdGlvbgorCitEaXNwdXRlcyBhcmlzaW5nIG91dCBvZiBvciBpbiBjb25uZWN0aW9uIHdpdGggdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUKK2ZpbmFsbHkgc2V0dGxlZCBieSBhcmJpdHJhdGlvbiB3aGljaCBzaGFsbCBiZSBoZWxkIGluIE1ldHJvIE1hbmlsYSwKK1BoaWxpcHBpbmVzIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgbGF3cyBvZiB0aGUgUGhpbGlwcGluZXMgdGhlbiBpbgorZWZmZWN0LiBUaGUgYXJiaXRyYXRpb24gYXdhcmQgc2hhbGwgYmUgZmluYWwgYW5kIGJpbmRpbmcgZm9yIHRoZSBwYXJ0aWVzCit3aXRob3V0IGFwcGVhbCBhbmQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2V0IGZvcnRoIHRoZSBmaW5kaW5ncyBvZgorZmFjdCBhbmQgdGhlIGNvbmNsdXNpb25zIG9mIGxhdy4KKworVGhlIG51bWJlciBvZiBhcmJpdHJhdG9ycyBzaGFsbCBiZSB0aHJlZSwgd2l0aCBlYWNoIHNpZGUgdG8gdGhlIGRpc3B1dGUKK2JlaW5nIGVudGl0bGVkIHRvIGFwcG9pbnQgb25lIGFyYml0cmF0b3IuIFRoZSB0d28gYXJiaXRyYXRvcnMgYXBwb2ludGVkCitieSB0aGUgcGFydGllcyBzaGFsbCBhcHBvaW50IGEgdGhpcmQgYXJiaXRyYXRvciB3aG8gc2hhbGwgYWN0IGFzCitjaGFpcm1hbiBvZiB0aGUgcHJvY2VlZGluZ3MuIFZhY2FuY2llcyBpbiB0aGUgcG9zdCBvZiBjaGFpcm1hbiBzaGFsbCBiZQorZmlsbGVkIGJ5IHRoZSBwcmVzaWRlbnQgb2YgdGhlIFBoaWxpcHBpbmUgRGlzcHV0ZSBSZXNvbHV0aW9uIENlbnRlciwKK0luYy4gT3RoZXIgdmFjYW5jaWVzIHNoYWxsIGJlIGZpbGxlZCBieSB0aGUgcmVzcGVjdGl2ZSBub21pbmF0aW5nIHBhcnR5LgorUHJvY2VlZGluZ3Mgc2hhbGwgY29udGludWUgZnJvbSB0aGUgc3RhZ2UgdGhleSB3ZXJlIGF0IHdoZW4gdGhlIHZhY2FuY3kKK29jY3VycmVkLgorCitJZiBvbmUgb2YgdGhlIHBhcnRpZXMgcmVmdXNlcyBvciBvdGhlcndpc2UgZmFpbHMgdG8gYXBwb2ludCBhbgorYXJiaXRyYXRvciB3aXRoaW4gMzAgZGF5cyBvZiB0aGUgZGF0ZSB0aGUgb3RoZXIgcGFydHkgYXBwb2ludHMgaXRzLCB0aGUKK2ZpcnN0IGFwcG9pbnRlZCBhcmJpdHJhdG9yIHNoYWxsIGJlIHRoZSBzb2xlIGFyYml0cmF0b3IsIHByb3ZpZGVkIHRoYXQKK3RoZSBhcmJpdHJhdG9yIHdhcyB2YWxpZGx5IGFuZCBwcm9wZXJseSBhcHBvaW50ZWQuCisKK0FsbCBwcm9jZWVkaW5ncyBzaGFsbCBiZSBjb25kdWN0ZWQsIGluY2x1ZGluZyBhbGwgZG9jdW1lbnRzIHByZXNlbnRlZCBpbgorc3VjaCBwcm9jZWVkaW5ncywgaW4gdGhlIEVuZ2xpc2ggbGFuZ3VhZ2UuIFRoZSBFbmdsaXNoIGxhbmd1YWdlIHZlcnNpb24KK29mIHRoaXMgQWdyZWVtZW50IHByZXZhaWxzIG92ZXIgYW55IG90aGVyIGxhbmd1YWdlIHZlcnNpb24uCisKK1NJTkdBUE9SRTogTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkgKFNlY3Rpb24gNCk6IFRoZSB3b3JkcyAiU1BFQ0lBTCIgYW5kCisiRUNPTk9NSUMiIGFyZSBkZWxldGVkIGZyb20gaXRlbSAyIG9mIHRoZSB0aGlyZCBwYXJhZ3JhcGguCisKK0dlbmVyYWwgKFNlY3Rpb24gNSk6IFRoZSBmb2xsb3dpbmcgcmVwbGFjZXMgdGhlIHRlcm1zIG9mIGl0ZW0gNzoKKworU3ViamVjdCB0byB0aGUgcmlnaHRzIHByb3ZpZGVkIHRvIElCTSdzIHN1cHBsaWVycyBhbmQgUHJvZ3JhbSBkZXZlbG9wZXJzCithcyBwcm92aWRlZCBpbiBTZWN0aW9uIDQgYWJvdmUgKExpbWl0YXRpb24gb2YgTGlhYmlsaXR5KSwgYSBwZXJzb24gd2hvCitpcyBub3QgYSBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCBzaGFsbCBoYXZlIG5vIHJpZ2h0IHVuZGVyIHRoZSBDb250cmFjdHMKKyhSaWdodCBvZiBUaGlyZCBQYXJ0aWVzKSBBY3QgdG8gZW5mb3JjZSBhbnkgb2YgaXRzIHRlcm1zLgorCitFVVJPUEUsIE1JRERMRSBFQVNULCBBRlJJQ0EgKEVNRUEpCisKK1JpZ2h0cyBpbiBEYXRhIChTZWN0aW9uIDIpOiBJbiBFTUVBLCB0aGUgZm9sbG93aW5nIHJlcGxhY2VzIHRoZSB0ZXJtcyBvZgordGhpcyBzZWN0aW9uIGluIHRoZWlyIGVudGlyZXR5OgorCitZb3UgYXNzaWduIHRvIElCTSBhbGwgcmlnaHRzLCB0aXRsZSwgYW5kIGludGVyZXN0IHRocm91Z2hvdXQgdGhlIHdvcmxkCisoaW5jbHVkaW5nIG93bmVyc2hpcCBvZiBjb3B5cmlnaHQpIGluIGFueSBkYXRhLCBzdWdnZXN0aW9ucywgYW5kIHdyaXR0ZW4KK21hdGVyaWFscyB0aGF0IDEpIGlzIHJlbGF0ZWQgdG8gWW91ciB1c2Ugb2YgdGhlIFByb2dyYW0gYW5kIDIpIFlvdQorcHJvdmlkZSB0byBJQk0uIFN1Y2ggYXNzaWdubWVudCBvZiByaWdodHMgaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZAordG8sIGFzc2lnbm1lbnQgb2YgdGhlIHJpZ2h0cyB0byBwcmVwYXJlIGFuZCBoYXZlIHByZXBhcmVkIGRlcml2YXRpdmUKK3dvcmtzIG9mIHRoZSB3cml0dGVuIG1hdGVyaWFscywgYW5kIHRvIHVzZSwgaGF2ZSB1c2VkLCBleGVjdXRlLAorcmVwcm9kdWNlLCB0cmFuc21pdCwgZGlzcGxheSwgcGVyZm9ybSwgdHJhbnNmZXIsIGRpc3RyaWJ1dGUgYW5kIGxpY2Vuc2UKK3RoZSB3cml0dGVuIG1hdGVyaWFscyBhbmQgc3VjaCBkZXJpdmF0aXZlIHdvcmtzIGluIGFueSBtZWRpdW0gb3IKK2Rpc3RyaWJ1dGlvbiB0ZWNobm9sb2d5LCBhbmQgdG8gZ3JhbnQgb3RoZXJzIHNvbWUgb3IgYWxsIG9mIHRoZSByaWdodHMKK2dyYW50ZWQgaGVyZWluLCBmb3IgdGhlIGR1cmF0aW9uIG9mIGFsbCBzdWNoIHJpZ2h0cywgdGl0bGUgYW5kIGludGVyZXN0LgorSWYgSUJNIHJlcXVpcmVzIGl0LCBZb3Ugd2lsbCBzaWduIGFuIGFwcHJvcHJpYXRlIGRvY3VtZW50IHRvIGFzc2lnbiBzdWNoCityaWdodHMuIE5laXRoZXIgcGFydHkgd2lsbCBjaGFyZ2UgdGhlIG90aGVyIGZvciByaWdodHMgaW4gZGF0YSBvciBhbnkKK3dvcmsgcGVyZm9ybWVkIGFzIGEgcmVzdWx0IG9mIHRoaXMgQWdyZWVtZW50LgorCitObyBXYXJyYW50eSAoU2VjdGlvbiAzKTogSW4gdGhlIEV1cm9wZWFuIFVuaW9uLCB0aGUgZm9sbG93aW5nIGlzIGFkZGVkCithdCB0aGUgYmVnaW5uaW5nIG9mIHRoaXMgc2VjdGlvbjoKKworSW4gdGhlIEV1cm9wZWFuIFVuaW9uLCBjb25zdW1lcnMgaGF2ZSBsZWdhbCByaWdodHMgdW5kZXIgYXBwbGljYWJsZQorbmF0aW9uYWwgbGVnaXNsYXRpb24gZ292ZXJuaW5nIHRoZSBzYWxlIG9mIGNvbnN1bWVyIGdvb2RzLiBTdWNoIHJpZ2h0cworYXJlIG5vdCBhZmZlY3RlZCBieSB0aGUgcHJvdmlzaW9ucyBvZiB0aGlzIFNlY3Rpb24gMy4KKworTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkgKFNlY3Rpb24gNCk6IEluIEF1c3RyaWEsIERlbm1hcmssIEZpbmxhbmQsCitHcmVlY2UsIEl0YWx5LCBOZXRoZXJsYW5kcywgTm9yd2F5LCBQb3J0dWdhbCwgU3BhaW4sIFN3ZWRlbiBhbmQKK1N3aXR6ZXJsYW5kLCB0aGUgZm9sbG93aW5nIHJlcGxhY2VzIHRoZSB0ZXJtcyBvZiB0aGlzIHNlY3Rpb24gaW4gaXRzCitlbnRpcmV0eToKKworRXhjZXB0IGFzIG90aGVyd2lzZSBwcm92aWRlZCBieSBtYW5kYXRvcnkgbGF3OgorCisxLiBJQk0ncyBsaWFiaWxpdHkgZm9yIGFueSBkYW1hZ2VzIGFuZCBsb3NzZXMgdGhhdCBtYXkgYXJpc2UgYXMgYQorY29uc2VxdWVuY2Ugb2YgdGhlIGZ1bGZpbGxtZW50IG9mIGl0cyBvYmxpZ2F0aW9ucyB1bmRlciBvciBpbiBjb25uZWN0aW9uCit3aXRoIHRoaXMgYWdyZWVtZW50IG9yIGR1ZSB0byBhbnkgb3RoZXIgY2F1c2UgcmVsYXRlZCB0byB0aGlzIGFncmVlbWVudAoraXMgbGltaXRlZCB0byB0aGUgY29tcGVuc2F0aW9uIG9mIG9ubHkgdGhvc2UgZGFtYWdlcyBhbmQgbG9zc2VzIHByb3ZlZAorYW5kIGFjdHVhbGx5IGFyaXNpbmcgYXMgYW4gaW1tZWRpYXRlIGFuZCBkaXJlY3QgY29uc2VxdWVuY2Ugb2YgdGhlCitub24tZnVsZmlsbG1lbnQgb2Ygc3VjaCBvYmxpZ2F0aW9ucyAoaWYgSUJNIGlzIGF0IGZhdWx0KSBvciBvZiBzdWNoCitjYXVzZSwgZm9yIGEgbWF4aW11bSBhbW91bnQgZXF1YWwgdG8gdGhlIGNoYXJnZXMgWW91IHBhaWQgZm9yIHRoZSBQcm9ncmFtLgorCitUaGUgYWJvdmUgbGltaXRhdGlvbiBzaGFsbCBub3QgYXBwbHkgdG8gZGFtYWdlcyBmb3IgYm9kaWx5IGluanVyaWVzCisoaW5jbHVkaW5nIGRlYXRoKSBhbmQgZGFtYWdlcyB0byByZWFsIHByb3BlcnR5IGFuZCB0YW5naWJsZSBwZXJzb25hbAorcHJvcGVydHkgZm9yIHdoaWNoIElCTSBpcyBsZWdhbGx5IGxpYWJsZS4KKworMi4gVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBJUyBJQk0sIE9SIEFOWSBPRiBJVFMgUFJPR1JBTSBERVZFTE9QRVJTLAorTElBQkxFIEZPUiBBTlkgT0YgVEhFIEZPTExPV0lORywgRVZFTiBJRiBJTkZPUk1FRCBPRiBUSEVJUiBQT1NTSUJJTElUWToKKzEpIExPU1MgT0YsIE9SIERBTUFHRSBUTywgREFUQTsgMikgSU5DSURFTlRBTCBPUiBJTkRJUkVDVCBEQU1BR0VTLCBPUgorRk9SIEFOWSBFQ09OT01JQyBDT05TRVFVRU5USUFMIERBTUFHRVM7IDMpIExPU1QgUFJPRklUUywgRVZFTiBJRiBUSEVZCitBUklTRSBBUyBBTiBJTU1FRElBVEUgQ09OU0VRVUVOQ0UgT0YgVEhFIEVWRU5UIFRIQVQgR0VORVJBVEVEIFRIRQorREFNQUdFUzsgT1IgNCkgTE9TUyBPRiBCVVNJTkVTUywgUkVWRU5VRSwgR09PRFdJTEwsIE9SIEFOVElDSVBBVEVEIFNBVklOR1MuCisKKzMuIFRoZSBsaW1pdGF0aW9uIGFuZCBleGNsdXNpb24gb2YgbGlhYmlsaXR5IGhlcmVpbiBhZ3JlZWQgYXBwbGllcyBub3QKK29ubHkgdG8gdGhlIGFjdGl2aXRpZXMgcGVyZm9ybWVkIGJ5IElCTSBidXQgYWxzbyB0byB0aGUgYWN0aXZpdGllcworcGVyZm9ybWVkIGJ5IGl0cyBzdXBwbGllcnMgYW5kIFByb2dyYW0gZGV2ZWxvcGVycywgYW5kIHJlcHJlc2VudHMgdGhlCittYXhpbXVtIGFtb3VudCBmb3Igd2hpY2ggSUJNIGFzIHdlbGwgYXMgaXRzIHN1cHBsaWVycyBhbmQgUHJvZ3JhbQorZGV2ZWxvcGVycywgYXJlIGNvbGxlY3RpdmVseSByZXNwb25zaWJsZS4KKworTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkgKFNlY3Rpb24gNCk6IEluIEZyYW5jZSBhbmQgQmVsZ2l1bSwgdGhlCitmb2xsb3dpbmcgcmVwbGFjZXMgdGhlIHRlcm1zIG9mIHRoaXMgc2VjdGlvbiBpbiBpdHMgZW50aXJldHk6CisKK0V4Y2VwdCBhcyBvdGhlcndpc2UgcHJvdmlkZWQgYnkgbWFuZGF0b3J5IGxhdzoKKworMS4gSUJNJ3MgbGlhYmlsaXR5IGZvciBhbnkgZGFtYWdlcyBhbmQgbG9zc2VzIHRoYXQgbWF5IGFyaXNlIGFzIGEKK2NvbnNlcXVlbmNlIG9mIHRoZSBmdWxmaWxsbWVudCBvZiBpdHMgb2JsaWdhdGlvbnMgdW5kZXIgb3IgaW4gY29ubmVjdGlvbgord2l0aCB0aGlzIGFncmVlbWVudCBpcyBsaW1pdGVkIHRvIHRoZSBjb21wZW5zYXRpb24gb2Ygb25seSB0aG9zZSBkYW1hZ2VzCithbmQgbG9zc2VzIHByb3ZlZCBhbmQgYWN0dWFsbHkgYXJpc2luZyBhcyBhbiBpbW1lZGlhdGUgYW5kIGRpcmVjdAorY29uc2VxdWVuY2Ugb2YgdGhlIG5vbi0gZnVsZmlsbG1lbnQgb2Ygc3VjaCBvYmxpZ2F0aW9ucyAoaWYgSUJNIGlzIGF0CitmYXVsdCksIGZvciBhIG1heGltdW0gYW1vdW50IGVxdWFsIHRvIHRoZSBjaGFyZ2VzIFlvdSBwYWlkIGZvciB0aGUKK1Byb2dyYW0gdGhhdCBoYXMgY2F1c2VkIHRoZSBkYW1hZ2VzLgorCitUaGUgYWJvdmUgbGltaXRhdGlvbiBzaGFsbCBub3QgYXBwbHkgdG8gZGFtYWdlcyBmb3IgYm9kaWx5IGluanVyaWVzCisoaW5jbHVkaW5nIGRlYXRoKSBhbmQgZGFtYWdlcyB0byByZWFsIHByb3BlcnR5IGFuZCB0YW5naWJsZSBwZXJzb25hbAorcHJvcGVydHkgZm9yIHdoaWNoIElCTSBpcyBsZWdhbGx5IGxpYWJsZS4KKworMi4gVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBJUyBJQk0sIE9SIEFOWSBPRiBJVFMgUFJPR1JBTSBERVZFTE9QRVJTLAorTElBQkxFIEZPUiBBTlkgT0YgVEhFIEZPTExPV0lORywgRVZFTiBJRiBJTkZPUk1FRCBPRiBUSEVJUiBQT1NTSUJJTElUWToKKzEpIExPU1MgT0YsIE9SIERBTUFHRSBUTywgREFUQTsgMikgSU5DSURFTlRBTCBPUiBJTkRJUkVDVCBEQU1BR0VTLCBPUgorRk9SIEFOWSBFQ09OT01JQyBDT05TRVFVRU5USUFMIERBTUFHRVM7IDMpIExPU1QgUFJPRklUUywgRVZFTiBJRiBUSEVZCitBUklTRSBBUyBBTiBJTU1FRElBVEUgQ09OU0VRVUVOQ0UgT0YgVEhFIEVWRU5UIFRIQVQgR0VORVJBVEVEIFRIRQorREFNQUdFUzsgT1IgNCkgTE9TUyBPRiBCVVNJTkVTUywgUkVWRU5VRSwgR09PRFdJTEwsIE9SIEFOVElDSVBBVEVEIFNBVklOR1MuCisKKzMuIFRoZSBsaW1pdGF0aW9uIGFuZCBleGNsdXNpb24gb2YgbGlhYmlsaXR5IGhlcmVpbiBhZ3JlZWQgYXBwbGllcyBub3QKK29ubHkgdG8gdGhlIGFjdGl2aXRpZXMgcGVyZm9ybWVkIGJ5IElCTSBidXQgYWxzbyB0byB0aGUgYWN0aXZpdGllcworcGVyZm9ybWVkIGJ5IGl0cyBzdXBwbGllcnMgYW5kIFByb2dyYW0gZGV2ZWxvcGVycywgYW5kIHJlcHJlc2VudHMgdGhlCittYXhpbXVtIGFtb3VudCBmb3Igd2hpY2ggSUJNIGFzIHdlbGwgYXMgaXRzIHN1cHBsaWVycyBhbmQgUHJvZ3JhbQorZGV2ZWxvcGVycywgYXJlIGNvbGxlY3RpdmVseSByZXNwb25zaWJsZS4KKworR292ZXJuaW5nIExhdywgSnVyaXNkaWN0aW9uLCBhbmQgQXJiaXRyYXRpb24gKFNlY3Rpb24gNikKKworR292ZXJuaW5nIExhdworCitUaGUgcGhyYXNlICJ0aGUgbGF3cyBvZiB0aGUgY291bnRyeSBpbiB3aGljaCBZb3UgYWNxdWlyZWQgdGhlIFByb2dyYW0KK2xpY2Vuc2UiIGlzIHJlcGxhY2VkIGJ5OgorMSkgInRoZSBsYXdzIG9mIEF1c3RyaWEiIGluIEFsYmFuaWEsIEFybWVuaWEsIEF6ZXJiZWlqYW4sIEJlbGFydXMsCitCb3NuaWEtSGVyemVnb3ZpbmEsIEJ1bGdhcmlhLCBDcm9hdGlhLCBHZW9yZ2lhLCBIdW5nYXJ5LCBLYXpha2hzdGFuLAorS3lyZ3l6c3RhbiwgRllSIE1hY2Vkb25pYSwgTW9sZGF2aWEsIFBvbGFuZCwgUm9tYW5pYSwgUnVzc2lhLCBTbG92YWtpYSwKK1Nsb3ZlbmlhLCBUYWppa2lzdGFuLCBUdXJrbWVuaXN0YW4sIFVrcmFpbmUsIFV6YmVraXN0YW4sIGFuZCBGUiBZdWdvc2xhdmlhOworMikgInRoZSBsYXdzIG9mIEZyYW5jZSIgaW4gQWxnZXJpYSwgQmVuaW4sIEJ1cmtpbmEgRmFzbywgQ2FtZXJvb24sIENhcGUKK1ZlcmRlLCBDZW50cmFsIEFmcmljYW4gUmVwdWJsaWMsIENoYWQsIENvbW9yb3MsIENvbmdvIFJlcHVibGljLAorRGppYm91dGksIERlbW9jcmF0aWMgUmVwdWJsaWMgb2YgQ29uZ28sIEVxdWF0b3JpYWwgR3VpbmVhLCBGcmVuY2gKK0d1aWFuYSwgRnJlbmNoIFBvbHluZXNpYSwgR2Fib24sIEdhbWJpYSwgR3VpbmVhLCBHdWluZWEtIEJpc3NhdSwgSXZvcnkKK0NvYXN0LCBMZWJhbm9uLCBNYWRhZ2FzY2FyLCBNYWxpLCBNYXVyaXRhbmlhLCBNYXVyaXRpdXMsIE1heW90dGUsCitNb3JvY2NvLCBOZXcgQ2FsZWRvbmlhLCBOaWdlciwgUmV1bmlvbiwgU2VuZWdhbCwgU2V5Y2hlbGxlcywgVG9nbywKK1R1bmlzaWEsIFZhbnVhdHUsIGFuZCBXYWxsaXMgJiBGdXR1bmE7CiszKSAidGhlIGxhd3Mgb2YgRmlubGFuZCIgaW4gRXN0b25pYSwgTGF0dmlhLCBhbmQgTGl0aHVhbmlhOworNCkgInRoZSBsYXdzIG9mIEVuZ2xhbmQiIGluIEFuZ29sYSwgQmFocmFpbiwgQm90c3dhbmEsIEJ1cnVuZGksIEVneXB0LAorRXJpdHJlYSwgRXRoaW9waWEsIEdoYW5hLCBKb3JkYW4sIEtlbnlhLCBLdXdhaXQsIExpYmVyaWEsIE1hbGF3aSwgTWFsdGEsCitNb3phbWJpcXVlLCBOaWdlcmlhLCBPbWFuLCBQYWtpc3RhbiwgUWF0YXIsIFJ3YW5kYSwgU2FvIFRvbWUsIFNhdWRpCitBcmFiaWEsIFNpZXJyYSBMZW9uZSwgU29tYWxpYSwgVGFuemFuaWEsIFVnYW5kYSwgVW5pdGVkIEFyYWIgRW1pcmF0ZXMsCit0aGUgVW5pdGVkIEtpbmdkb20sIFdlc3QgQmFuay9HYXphLCBZZW1lbiwgWmFtYmlhLCBhbmQgWmltYmFid2U7IGFuZAorNSkgInRoZSBsYXdzIG9mIFNvdXRoIEFmcmljYSIgaW4gU291dGggQWZyaWNhLCBOYW1pYmlhLCBMZXNvdGhvIGFuZAorU3dhemlsYW5kLgorCitKdXJpc2RpY3Rpb24KKworVGhlIGZvbGxvd2luZyBleGNlcHRpb25zIGFyZSBhZGRlZCB0byB0aGlzIHNlY3Rpb246CisKKzEpIEluIEF1c3RyaWEgdGhlIGNob2ljZSBvZiBqdXJpc2RpY3Rpb24gZm9yIGFsbCBkaXNwdXRlcyBhcmlzaW5nIG91dCBvZgordGhpcyBBZ3JlZW1lbnQgYW5kIHJlbGF0aW5nIHRoZXJldG8sIGluY2x1ZGluZyBpdHMgZXhpc3RlbmNlLCB3aWxsIGJlCit0aGUgY29tcGV0ZW50IGNvdXJ0IG9mIGxhdyBpbiBWaWVubmEsIEF1c3RyaWEgKElubmVyLUNpdHkpOworMikgaW4gQW5nb2xhLCBCYWhyYWluLCBCb3Rzd2FuYSwgQnVydW5kaSwgRWd5cHQsIEVyaXRyZWEsIEV0aGlvcGlhLAorR2hhbmEsIEpvcmRhbiwgS2VueWEsIEt1d2FpdCwgTGliZXJpYSwgTWFsYXdpLCBNYWx0YSwgTW96YW1iaXF1ZSwKK05pZ2VyaWEsIE9tYW4sIFBha2lzdGFuLCBRYXRhciwgUndhbmRhLCBTYW8gVG9tZSwgU2F1ZGkgQXJhYmlhLCBTaWVycmEKK0xlb25lLCBTb21hbGlhLCBUYW56YW5pYSwgVWdhbmRhLCBVbml0ZWQgQXJhYiBFbWlyYXRlcywgV2VzdCBCYW5rL0dhemEsCitZZW1lbiwgWmFtYmlhLCBhbmQgWmltYmFid2UgYWxsIGRpc3B1dGVzIGFyaXNpbmcgb3V0IG9mIHRoaXMgQWdyZWVtZW50CitvciByZWxhdGVkIHRvIGl0cyBleGVjdXRpb24sIGluY2x1ZGluZyBzdW1tYXJ5IHByb2NlZWRpbmdzLCB3aWxsIGJlCitzdWJtaXR0ZWQgdG8gdGhlIGV4Y2x1c2l2ZSBqdXJpc2RpY3Rpb24gb2YgdGhlIEVuZ2xpc2ggY291cnRzOworMykgaW4gQmVsZ2l1bSBhbmQgTHV4ZW1ib3VyZyBhbGwgZGlzcHV0ZXMgYXJpc2luZyBvdXQgb2YgdGhpcyBBZ3JlZW1lbnQKK29yIHJlbGF0ZWQgdG8gaXRzIGludGVycHJldGF0aW9uIG9yIGl0cyBleGVjdXRpb24sIHRoZSBsYXcsIGFuZCB0aGUKK2NvdXJ0cyBvZiB0aGUgY2FwaXRhbCBjaXR5LCBvZiB0aGUgY291bnRyeSBvZiBZb3VyIHJlZ2lzdGVyZWQgb2ZmaWNlCithbmQvb3IgY29tbWVyY2lhbCBzaXRlIGxvY2F0aW9uIG9ubHkgYXJlIGNvbXBldGVudDsKKzQpIGluIEZyYW5jZSwgQWxnZXJpYSwgQmVuaW4sIEJ1cmtpbmEgRmFzbywgQ2FtZXJvb24sIENhcGUgVmVyZGUsCitDZW50cmFsIEFmcmljYW4gUmVwdWJsaWMsIENoYWQsIENvbW9yb3MsIENvbmdvIFJlcHVibGljLCBEamlib3V0aSwKK0RlbW9jcmF0aWMgUmVwdWJsaWMgb2YgQ29uZ28sIEVxdWF0b3JpYWwgR3VpbmVhLCBGcmVuY2ggR3VpYW5hLCBGcmVuY2gKK1BvbHluZXNpYSwgR2Fib24sIEdhbWJpYSwgR3VpbmVhLCBHdWluZWEtQmlzc2F1LCBJdm9yeSBDb2FzdCwgTGViYW5vbiwKK01hZGFnYXNjYXIsIE1hbGksIE1hdXJpdGFuaWEsIE1hdXJpdGl1cywgTWF5b3R0ZSwgTW9yb2NjbywgTmV3CitDYWxlZG9uaWEsIE5pZ2VyLCBSZXVuaW9uLCBTZW5lZ2FsLCBTZXljaGVsbGVzLCBUb2dvLCBUdW5pc2lhLCBWYW51YXR1LAorYW5kIFdhbGxpcyAmIEZ1dHVuYSBhbGwgZGlzcHV0ZXMgYXJpc2luZyBvdXQgb2YgdGhpcyBBZ3JlZW1lbnQgb3IKK3JlbGF0ZWQgdG8gaXRzIHZpb2xhdGlvbiBvciBleGVjdXRpb24sIGluY2x1ZGluZyBzdW1tYXJ5IHByb2NlZWRpbmdzLAord2lsbCBiZSBzZXR0bGVkIGV4Y2x1c2l2ZWx5IGJ5IHRoZSBDb21tZXJjaWFsIENvdXJ0IG9mIFBhcmlzOworNSkgaW4gUnVzc2lhIGFsbCBkaXNwdXRlcyBhcmlzaW5nIG91dCBvZiBvciBpbiByZWxhdGlvbiB0byB0aGUKK2ludGVycHJldGF0aW9uLCB0aGUgdmlvbGF0aW9uLCB0aGUgdGVybWluYXRpb24sIHRoZSBudWxsaXR5IG9mIHRoZQorZXhlY3V0aW9uIG9mIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIHNldHRsZWQgYnkgQXJiaXRyYXRpb24gQ291cnQgb2YKK01vc2NvdzsKKzYpIGluIFNvdXRoIEFmcmljYSwgTmFtaWJpYSwgTGVzb3RobyBhbmQgU3dhemlsYW5kIGJvdGggb2YgdXMgYWdyZWUgdG8KK3N1Ym1pdCBhbGwgZGlzcHV0ZXMgcmVsYXRpbmcgdG8gdGhpcyBBZ3JlZW1lbnQgdG8gdGhlIGp1cmlzZGljdGlvbiBvZgordGhlIEhpZ2ggQ291cnQgaW4gSm9oYW5uZXNidXJnOworNykgaW4gVHVya2V5IGFsbCBkaXNwdXRlcyBhcmlzaW5nIG91dCBvZiBvciBpbiBjb25uZWN0aW9uIHdpdGggdGhpcworQWdyZWVtZW50IHNoYWxsIGJlIHJlc29sdmVkIGJ5IHRoZSBJc3RhbmJ1bCBDZW50cmFsIChTdWx0YW5haG1ldCkgQ291cnRzCithbmQgRXhlY3V0aW9uIERpcmVjdG9yYXRlcyBvZiBJc3RhbmJ1bCwgdGhlIFJlcHVibGljIG9mIFR1cmtleTsKKzgpIGluIGVhY2ggb2YgdGhlIGZvbGxvd2luZyBzcGVjaWZpZWQgY291bnRyaWVzLCBhbnkgbGVnYWwgY2xhaW0gYXJpc2luZworb3V0IG9mIHRoaXMgQWdyZWVtZW50IHdpbGwgYmUgYnJvdWdodCBiZWZvcmUsIGFuZCBzZXR0bGVkIGV4Y2x1c2l2ZWx5CitieSwgdGhlIGNvbXBldGVudCBjb3VydCBvZiBhKSBBdGhlbnMgZm9yIEdyZWVjZSwgYikgVGVsIEF2aXYtSmFmZmEgZm9yCitJc3JhZWwsIGMpIE1pbGFuIGZvciBJdGFseSwgZCkgTGlzYm9uIGZvciBQb3J0dWdhbCwgYW5kIGUpIE1hZHJpZCBmb3IKK1NwYWluOyBhbmQKKzkpIGluIHRoZSBVbml0ZWQgS2luZ2RvbSBib3RoIG9mIHVzIGFncmVlIHRvIHN1Ym1pdCBhbGwgZGlzcHV0ZXMKK3JlbGF0aW5nIHRvIHRoaXMgQWdyZWVtZW50IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIEVuZ2xpc2ggY291cnRzLgorCitBcmJpdHJhdGlvbgorCitJbiBBbGJhbmlhLCBBcm1lbmlhLCBBemVyYmVpamFuLCBCZWxhcnVzLCBCb3NuaWEtIEhlcnplZ292aW5hLCBCdWxnYXJpYSwKK0Nyb2F0aWEsIEdlb3JnaWEsIEh1bmdhcnksIEthemFraHN0YW4sIEt5cmd5enN0YW4sIEZZUiBNYWNlZG9uaWEsCitNb2xkYXZpYSwgUG9sYW5kLCBSb21hbmlhLCBSdXNzaWEsIFNsb3Zha2lhLCBTbG92ZW5pYSwgVGFqaWtpc3RhbiwKK1R1cmttZW5pc3RhbiwgVWtyYWluZSwgVXpiZWtpc3RhbiwgYW5kIEZSIFl1Z29zbGF2aWEgYWxsIGRpc3B1dGVzCithcmlzaW5nIG91dCBvZiB0aGlzIEFncmVlbWVudCBvciByZWxhdGVkIHRvIGl0cyB2aW9sYXRpb24sIHRlcm1pbmF0aW9uCitvciBudWxsaXR5IHdpbGwgYmUgZmluYWxseSBzZXR0bGVkIHVuZGVyIHRoZSBSdWxlcyBvZiBBcmJpdHJhdGlvbiBhbmQKK0NvbmNpbGlhdGlvbiBvZiB0aGUgSW50ZXJuYXRpb25hbCBBcmJpdHJhbCBDZW50ZXIgb2YgdGhlIEZlZGVyYWwKK0Vjb25vbWljIENoYW1iZXIgaW4gVmllbm5hIChWaWVubmEgUnVsZXMpIGJ5IHRocmVlIGFyYml0cmF0b3JzIGFwcG9pbnRlZAoraW4gYWNjb3JkYW5jZSB3aXRoIHRoZXNlIHJ1bGVzLgorVGhlIGFyYml0cmF0aW9uIHdpbGwgYmUgaGVsZCBpbiBWaWVubmEsIEF1c3RyaWEsIGFuZCB0aGUgb2ZmaWNpYWwKK2xhbmd1YWdlIG9mIHRoZSBwcm9jZWVkaW5ncyB3aWxsIGJlIEVuZ2xpc2guIFRoZSBkZWNpc2lvbiBvZiB0aGUKK2FyYml0cmF0b3JzIHdpbGwgYmUgZmluYWwgYW5kIGJpbmRpbmcgdXBvbiBib3RoIHBhcnRpZXMuIFRoZXJlZm9yZSwKK3B1cnN1YW50IHRvIHBhcmFncmFwaCA1OTggKDIpIG9mIHRoZSBBdXN0cmlhbiBDb2RlIG9mIENpdmlsIFByb2NlZHVyZSwKK3RoZSBwYXJ0aWVzIGV4cHJlc3NseSB3YWl2ZSB0aGUgYXBwbGljYXRpb24gb2YgcGFyYWdyYXBoIDU5NSAoMSkgZmlndXJlCis3IG9mIHRoZSBDb2RlLiBJQk0gbWF5LCBob3dldmVyLCBpbnN0aXR1dGUgcHJvY2VlZGluZ3MgaW4gYSBjb21wZXRlbnQKK2NvdXJ0IGluIHRoZSBjb3VudHJ5IG9mIGluc3RhbGxhdGlvbi4KKworSW4gRXN0b25pYSwgTGF0dmlhIGFuZCBMaXRodWFuaWEgYWxsIGRpc3B1dGVzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB3aXRoCit0aGlzIEFncmVlbWVudCB3aWxsIGJlIGZpbmFsbHkgc2V0dGxlZCBpbiBhcmJpdHJhdGlvbiB0aGF0IHdpbGwgYmUgaGVsZAoraW4gSGVsc2lua2ksIEZpbmxhbmQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBhcmJpdHJhdGlvbiBsYXdzIG9mIEZpbmxhbmQKK3RoZW4gaW4gZWZmZWN0LiBFYWNoIHBhcnR5IHdpbGwgYXBwb2ludCBvbmUgYXJiaXRyYXRvci4gVGhlIGFyYml0cmF0b3JzCit3aWxsIHRoZW4gam9pbnRseSBhcHBvaW50IHRoZSBjaGFpcm1hbi4gSWYgYXJiaXRyYXRvcnMgY2Fubm90IGFncmVlIG9uCit0aGUgY2hhaXJtYW4sIHRoZW4gdGhlIENlbnRyYWwgQ2hhbWJlciBvZiBDb21tZXJjZSBpbiBIZWxzaW5raSB3aWxsCithcHBvaW50IHRoZSBjaGFpcm1hbi4KKworQVVTVFJJQTogR2VuZXJhbCAoU2VjdGlvbiA1KTogVGhlIGZvbGxvd2luZyBpcyBhZGRlZCB0byBpdGVtIDQ6CisKK0ZvciBwdXJwb3NlcyBvZiB0aGlzIGNsYXVzZSwgY29udGFjdCBpbmZvcm1hdGlvbiB3aWxsIGFsc28gaW5jbHVkZQoraW5mb3JtYXRpb24gYWJvdXQgWW91IGFzIGEgbGVnYWwgZW50aXR5LCBmb3IgZXhhbXBsZSByZXZlbnVlIGRhdGEgYW5kCitvdGhlciB0cmFuc2FjdGlvbmFsIGluZm9ybWF0aW9uLgorCitHRVJNQU5ZOiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eSAoU2VjdGlvbiA0KTogVGhlIGZvbGxvd2luZyBwYXJhZ3JhcGggaXMKK2FkZGVkIHRvIHRoaXMgU2VjdGlvbjoKKworVGhlIGxpbWl0YXRpb25zIGFuZCBleGNsdXNpb25zIHNwZWNpZmllZCBpbiB0aGlzIFNlY3Rpb24gd2lsbCBub3QgYXBwbHkKK3RvIGRhbWFnZXMgY2F1c2VkIGJ5IElCTSBpbnRlbnRpb25hbGx5IG9yIGJ5IGdyb3NzIG5lZ2xpZ2VuY2UuCisKK0dlbmVyYWwgKFNlY3Rpb24gNSk6IFRoZSBmb2xsb3dpbmcgcmVwbGFjZXMgdGhlIHRlcm1zIG9mIGl0ZW0gNToKKworQW55IGNsYWltcyByZXN1bHRpbmcgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgc3ViamVjdCB0byBhIHN0YXR1dGUgb2YKK2xpbWl0YXRpb24gb2YgdGhyZWUgeWVhcnMuCisKK0hVTkdBUlk6IExpbWl0YXRpb24gb2YgTGlhYmlsaXR5IChTZWN0aW9uIDQpOiBUaGUgZm9sbG93aW5nIGlzIGFkZGVkIGF0Cit0aGUgZW5kIG9mIHRoaXMgc2VjdGlvbjoKKworVGhlIGxpbWl0YXRpb24gYW5kIGV4Y2x1c2lvbiBzcGVjaWZpZWQgaGVyZWluIHNoYWxsIG5vdCBhcHBseSB0bworbGlhYmlsaXR5IGZvciBhIGJyZWFjaCBvZiBjb250cmFjdCBkYW1hZ2luZyBsaWZlLCBwaHlzaWNhbCB3ZWxsLWJlaW5nLAorb3IgaGVhbHRoIHRoYXQgaGFzIGJlZW4gY2F1c2VkIGludGVudGlvbmFsbHksIGJ5IGdyb3NzIG5lZ2xpZ2VuY2UsIG9yIGJ5CithIGNyaW1pbmFsIGFjdC4KKworVGhlIHBhcnRpZXMgYWNjZXB0IHRoZSBsaW1pdGF0aW9ucyBvZiBsaWFiaWxpdHkgYXMgdmFsaWQgcHJvdmlzaW9ucyBhbmQKK3N0YXRlIHRoYXQgdGhlIFNlY3Rpb24gMzE0LigyKSBvZiB0aGUgSHVuZ2FyaWFuIENpdmlsIENvZGUgYXBwbGllcyBhcwordGhlIGFjcXVpc2l0aW9uIHByaWNlIGFzIHdlbGwgYXMgb3RoZXIgYWR2YW50YWdlcyBhcmlzaW5nIG91dCBvZiB0aGUKK3ByZXNlbnQgQWdyZWVtZW50IGJhbGFuY2UgdGhpcyBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eS4KKworSVJFTEFORDogTm8gV2FycmFudHkgKFNlY3Rpb24gMyk6IFRoZSBmb2xsb3dpbmcgaXMgYWRkZWQgdG8gdGhpcyBzZWN0aW9uOgorCitFeGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIGluIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBvciBzZWN0aW9uCisxMiBvZiB0aGUgU2FsZSBvZiBHb29kcyBBY3QgMTg5MyAoYXMgYW1lbmRlZCBieSB0aGUgU2FsZSBvZiBHb29kcyBhbmQKK1N1cHBseSBvZiBTZXJ2aWNlcyBBY3QgMTk4MCAoInRoZSAxOTgwIEFjdCIpKSwgYWxsIGNvbmRpdGlvbnMgYW5kCit3YXJyYW50aWVzIChleHByZXNzIG9yIGltcGxpZWQsIHN0YXR1dG9yeSBvciBvdGhlcndpc2UpIGFyZSBoZXJlYnkKK2V4Y2x1ZGVkIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbnkgd2FycmFudGllcyBpbXBsaWVkIGJ5IHRoZQorU2FsZSBvZiBHb29kcyBBY3QgMTg5MyBhcyBhbWVuZGVkIGJ5IHRoZSAxOTgwIEFjdCAoaW5jbHVkaW5nLCBmb3IgdGhlCithdm9pZGFuY2Ugb2YgZG91YnQsIHNlY3Rpb24gMzkgb2YgdGhlIDE5ODAgQWN0KS4KKworTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkgKFNlY3Rpb24gNCk6IFRoZSBmb2xsb3dpbmcgcmVwbGFjZXMgdGhlIHRlcm1zIG9mCit0aGlzIHNlY3Rpb24gaW4gaXRzIGVudGlyZXR5OgorCitGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgc2VjdGlvbiwgYSAiRGVmYXVsdCIgbWVhbnMgYW55IGFjdCwgc3RhdGVtZW50LAorb21pc3Npb24sIG9yIG5lZ2xpZ2VuY2Ugb24gdGhlIHBhcnQgb2YgSUJNIGluIGNvbm5lY3Rpb24gd2l0aCwgb3IgaW4KK3JlbGF0aW9uIHRvLCB0aGUgc3ViamVjdCBtYXR0ZXIgb2YgYW4gQWdyZWVtZW50IGluIHJlc3BlY3Qgb2Ygd2hpY2ggSUJNCitpcyBsZWdhbGx5IGxpYWJsZSB0byBZb3Ugd2hldGhlciBpbiBjb250cmFjdCBvciB0b3J0LiBBIG51bWJlciBvZgorRGVmYXVsdHMgd2hpY2ggdG9nZXRoZXIgcmVzdWx0IGluLCBvciBjb250cmlidXRlIHRvLCBzdWJzdGFudGlhbGx5IHRoZQorc2FtZSBsb3NzIG9yIGRhbWFnZSB3aWxsIGJlIHRyZWF0ZWQgYXMgb25lIERlZmF1bHQgb2NjdXJyaW5nIG9uIHRoZSBkYXRlCitvZiBvY2N1cnJlbmNlIG9mIHRoZSBsYXN0IHN1Y2ggRGVmYXVsdC4KKworQ2lyY3Vtc3RhbmNlcyBtYXkgYXJpc2Ugd2hlcmUsIGJlY2F1c2Ugb2YgYSBEZWZhdWx0LCBZb3UgYXJlIGVudGl0bGVkIHRvCityZWNvdmVyIGRhbWFnZXMgZnJvbSBJQk0uIFRoaXMgc2VjdGlvbiBzZXRzIG91dCB0aGUgZXh0ZW50IG9mIElCTSdzCitsaWFiaWxpdHkgYW5kIFlvdXIgc29sZSByZW1lZHkuCisKKzEuIElCTSB3aWxsIGFjY2VwdCB1bmxpbWl0ZWQgbGlhYmlsaXR5IGZvciAoYSkgZGVhdGggb3IgcGVyc29uYWwgaW5qdXJ5CitjYXVzZWQgYnkgdGhlIG5lZ2xpZ2VuY2Ugb2YgSUJNLCBhbmQgKGIpIHN1YmplY3QgYWx3YXlzIHRvIHRoZSBJdGVtcyBmb3IKK1doaWNoIElCTSBpcyBOb3QgTGlhYmxlIGJlbG93LCBmb3IgcGh5c2ljYWwgZGFtYWdlIHRvIFlvdXIgdGFuZ2libGUKK3Byb3BlcnR5IHJlc3VsdGluZyBmcm9tIHRoZSBuZWdsaWdlbmNlIG9mIElCTS4KKworMi4gRXhjZXB0IGFzIHByb3ZpZGVkIGluIGl0ZW0gMSBhYm92ZSwgSUJNJ3MgZW50aXJlIGxpYWJpbGl0eSBmb3IgYWN0dWFsCitkYW1hZ2VzIGZvciBhbnkgb25lIERlZmF1bHQgd2lsbCBub3QgaW4gYW55IGV2ZW50IGV4Y2VlZCB0aGUgZ3JlYXRlciBvZgorMSkgRVVSIDEyNSwwMDAsIG9yIDIpIDEyNSUgb2YgdGhlIGFtb3VudCBZb3UgcGFpZCBmb3IgdGhlIFByb2dyYW0KK2RpcmVjdGx5IHJlbGF0aW5nIHRvIHRoZSBEZWZhdWx0LiBUaGVzZSBsaW1pdHMgYWxzbyBhcHBseSB0byBhbnkgb2YKK0lCTSdzIHN1cHBsaWVycyBhbmQgUHJvZ3JhbSBkZXZlbG9wZXJzLiBUaGV5IHN0YXRlIHRoZSBtYXhpbXVtIGZvciB3aGljaAorSUJNIGFuZCBzdWNoIHN1cHBsaWVycyBhbmQgUHJvZ3JhbSBkZXZlbG9wZXJzIGFyZSBjb2xsZWN0aXZlbHkgcmVzcG9uc2libGUuCisKK0l0ZW1zIGZvciBXaGljaCBJQk0gaXMgTm90IExpYWJsZQorCitTYXZlIHdpdGggcmVzcGVjdCB0byBhbnkgbGlhYmlsaXR5IHJlZmVycmVkIHRvIGluIGl0ZW0gMSBhYm92ZSwgdW5kZXIgbm8KK2NpcmN1bXN0YW5jZXMgaXMgSUJNIG9yIGFueSBvZiBpdHMgc3VwcGxpZXJzIG9yIFByb2dyYW0gZGV2ZWxvcGVycworbGlhYmxlIGZvciBhbnkgb2YgdGhlIGZvbGxvd2luZywgZXZlbiBpZiBJQk0gb3IgdGhleSB3ZXJlIGluZm9ybWVkIG9mCit0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBsb3NzZXM6CisKKzEuIGxvc3Mgb2YsIG9yIGRhbWFnZSB0bywgZGF0YTsKKworMi4gc3BlY2lhbCwgaW5kaXJlY3QsIG9yIGNvbnNlcXVlbnRpYWwgbG9zczsgb3IKKworMy4gbG9zcyBvZiBwcm9maXRzLCBidXNpbmVzcywgcmV2ZW51ZSwgZ29vZHdpbGwsIG9yIGFudGljaXBhdGVkIHNhdmluZ3MuCisKK0lUQUxZOiBHZW5lcmFsIChTZWN0aW9uIDUpOiBUaGUgZm9sbG93aW5nIGlzIGFkZGVkIHRvIHRoaXMgc2VjdGlvbjoKKworSUJNIGFuZCBDdXN0b21lciAoaGVyZWluYWZ0ZXIsIGluZGl2aWR1YWxseSwgIlBhcnR5Iikgc2hhbGwgY29tcGx5IHdpdGgKK2FsbCB0aGUgb2JsaWdhdGlvbnMgb2YgdGhlIGFwcGxpY2FibGUgcHJvdmlzaW9ucyBvZiBsYXcgYW5kL29yCityZWd1bGF0aW9uIG9uIHBlcnNvbmFsIGRhdGEgcHJvdGVjdGlvbi4gRWFjaCBvZiB0aGUgUGFydGllcyB3aWxsCitpbmRlbW5pZnkgYW5kIGtlZXAgdGhlIG90aGVyIFBhcnR5IGhhcm1sZXNzIGZyb20gYW55IGRhbWFnZSwgY2xhaW0sIGNvc3QKK29yIGV4cGVuc2UgaW5jdXJyZWQgYnkgdGhlIGxhdHRlciwgZGlyZWN0bHkgYW5kIG9yIGluZGlyZWN0bHksIGFzIGEKK2NvbnNlcXVlbmNlIG9mIGFuIGluZnJpbmdlbWVudCBvZiB0aGUgb3RoZXIgUGFydHkgb2YgdGhlIG1lbnRpb25lZAorcHJvdmlzaW9ucyBvZiBsYXcgYW5kL29yIHJlZ3VsYXRpb25zLgorCitTTE9WQUtJQTogTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkgKFNlY3Rpb24gNCk6IFRoZSBmb2xsb3dpbmcgaXMgYWRkZWQgdG8KK3RoZSBlbmQgb2YgdGhlIGxhc3QgcGFyYWdyYXBoOgorCitUaGUgbGltaXRhdGlvbnMgYXBwbHkgdG8gdGhlIGV4dGVudCB0aGV5IGFyZSBub3QgcHJvaGliaXRlZCB1bmRlciDCp8KnCiszNzMtMzg2IG9mIHRoZSBTbG92YWsgQ29tbWVyY2lhbCBDb2RlLgorCitHZW5lcmFsIChTZWN0aW9uIDUpOiBUaGUgdGVybXMgb2YgaXRlbSA1IGFyZSByZXBsYWNlZCB3aXRoIHRoZSBmb2xsb3dpbmc6CisKK1RIRSBQQVJUSUVTIEFHUkVFIFRIQVQsIEFTIERFRklORUQgQlkgQVBQTElDQUJMRSBMT0NBTCBMQVcsIEFOWSBMRUdBTCBPUgorT1RIRVIgQUNUSU9OIFJFTEFURUQgVE8gQSBCUkVBQ0ggT0YgVEhJUyBBR1JFRU1FTlQgTVVTVCBCRSBDT01NRU5DRUQgTk8KK0xBVEVSIFRIQU4gRk9VUiBZRUFSUyBGUk9NIFRIRSBEQVRFIE9OIFdISUNIIFRIRSBDQVVTRSBPRiBBQ1RJT04gQVJPU0UuCisKK1NXSVRaRVJMQU5EOiBHZW5lcmFsIChTZWN0aW9uIDUpOiBUaGUgZm9sbG93aW5nIGlzIGFkZGVkIHRvIGl0ZW0gNDoKKworRm9yIHB1cnBvc2VzIG9mIHRoaXMgY2xhdXNlLCBjb250YWN0IGluZm9ybWF0aW9uIHdpbGwgYWxzbyBpbmNsdWRlCitpbmZvcm1hdGlvbiBhYm91dCBZb3UgYXMgYSBsZWdhbCBlbnRpdHksIGZvciBleGFtcGxlIHJldmVudWUgZGF0YSBhbmQKK290aGVyIHRyYW5zYWN0aW9uYWwgaW5mb3JtYXRpb24uCisKK1VOSVRFRCBLSU5HRE9NOiBObyBXYXJyYW50eSAoU2VjdGlvbiAzKTogVGhlIGZvbGxvd2luZyByZXBsYWNlcyB0aGUKK2ZpcnN0IHNlbnRlbmNlIGluIHRoZSBmaXJzdCBwYXJhZ3JhcGggb2YgdGhpcyBzZWN0aW9uOgorCitTVUJKRUNUIFRPIEFOWSBTVEFUVVRPUlkgV0FSUkFOVElFUyBXSElDSCBDQU5OT1QgQkUgRVhDTFVERUQsIElCTSBNQUtFUworTk8gV0FSUkFOVFkgT1IgQ09ORElUSU9OIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyAoV0lUSE9VVAorTElNSVRBVElPTikgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgRklUTkVTUyBGT1IKK0EgUEFSVElDVUxBUiBQVVJQT1NFLCBBTkQgTk9OLSBJTkZSSU5HRU1FTlQsIFJFR0FSRElORyBUSEUgUFJPR1JBTS4KKworTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkgKFNlY3Rpb24gNCk6IFRoZSBmb2xsb3dpbmcgcmVwbGFjZXMgdGhlIHRlcm1zIG9mCit0aGlzIHNlY3Rpb24gaW4gaXRzIGVudGlyZXR5OgorCitGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgc2VjdGlvbiwgYSAiRGVmYXVsdCIgbWVhbnMgYW55IGFjdCwgc3RhdGVtZW50LAorb21pc3Npb24sIG9yIG5lZ2xpZ2VuY2Ugb24gdGhlIHBhcnQgb2YgSUJNIGluIGNvbm5lY3Rpb24gd2l0aCwgb3IgaW4KK3JlbGF0aW9uIHRvLCB0aGUgc3ViamVjdCBtYXR0ZXIgb2YgYW4gQWdyZWVtZW50IGluIHJlc3BlY3Qgb2Ygd2hpY2ggSUJNCitpcyBsZWdhbGx5IGxpYWJsZSB0byBZb3UsIHdoZXRoZXIgaW4gY29udHJhY3Qgb3IgdG9ydC4gQSBudW1iZXIgb2YKK0RlZmF1bHRzIHdoaWNoIHRvZ2V0aGVyIHJlc3VsdCBpbiwgb3IgY29udHJpYnV0ZSB0bywgc3Vic3RhbnRpYWxseSB0aGUKK3NhbWUgbG9zcyBvciBkYW1hZ2Ugd2lsbCBiZSB0cmVhdGVkIGFzIG9uZSBEZWZhdWx0LgorCitDaXJjdW1zdGFuY2VzIG1heSBhcmlzZSB3aGVyZSwgYmVjYXVzZSBvZiBhIERlZmF1bHQsIFlvdSBhcmUgZW50aXRsZWQgdG8KK3JlY292ZXIgZGFtYWdlcyBmcm9tIElCTS4gVGhpcyBzZWN0aW9uIHNldHMgb3V0IHRoZSBleHRlbnQgb2YgSUJNJ3MKK2xpYWJpbGl0eSBhbmQgWW91ciBzb2xlIHJlbWVkeS4KKworMS4gSUJNIHdpbGwgYWNjZXB0IHVubGltaXRlZCBsaWFiaWxpdHkgZm9yOgorCithLiBkZWF0aCBvciBwZXJzb25hbCBpbmp1cnkgY2F1c2VkIGJ5IHRoZSBuZWdsaWdlbmNlIG9mIElCTTsKKworYi4gYW55IGJyZWFjaCBvZiBpdHMgb2JsaWdhdGlvbnMgaW1wbGllZCBieSBTZWN0aW9uIDEyIG9mIHRoZSBTYWxlIG9mCitHb29kcyBBY3QgMTk3OSBvciBTZWN0aW9uIDIgb2YgdGhlIFN1cHBseSBvZiBHb29kcyBhbmQgU2VydmljZXMgQWN0CisxOTgyLCBvciBhbnkgc3RhdHV0b3J5IG1vZGlmaWNhdGlvbiBvciByZS0gZW5hY3RtZW50IG9mIGVpdGhlciBzdWNoCitTZWN0aW9uOyBhbmQKKworYy4gc3ViamVjdCBhbHdheXMgdG8gdGhlIEl0ZW1zIGZvciBXaGljaCBJQk0gaXMgTm90IExpYWJsZSBiZWxvdywgZm9yCitwaHlzaWNhbCBkYW1hZ2UgdG8gWW91ciB0YW5naWJsZSBwcm9wZXJ0eSByZXN1bHRpbmcgZnJvbSB0aGUgbmVnbGlnZW5jZQorb2YgSUJNLgorCisyLiBJQk0ncyBlbnRpcmUgbGlhYmlsaXR5IGZvciBhY3R1YWwgZGFtYWdlcyBmb3IgYW55IG9uZSBEZWZhdWx0IHdpbGwKK25vdCBpbiBhbnkgZXZlbnQsIGV4Y2VwdCBhcyBwcm92aWRlZCBpbiBpdGVtIDEgYWJvdmUsIGV4Y2VlZCB0aGUgZ3JlYXRlcgorb2YgMSkgwqM3NSwwMDAsIG9yIDIpIDEyNSUgb2YgdGhlIGFtb3VudCBZb3UgcGFpZCBmb3IgdGhlIFByb2dyYW0KK2RpcmVjdGx5IHJlbGF0aW5nIHRvIHRoZSBEZWZhdWx0LiBUaGVzZSBsaW1pdHMgYWxzbyBhcHBseSB0byBJQk0ncworc3VwcGxpZXJzIGFuZCBQcm9ncmFtIGRldmVsb3BlcnMuIFRoZXkgc3RhdGUgdGhlIG1heGltdW0gZm9yIHdoaWNoIElCTQorYW5kIHN1Y2ggc3VwcGxpZXJzIGFuZCBQcm9ncmFtIGRldmVsb3BlcnMgYXJlIGNvbGxlY3RpdmVseSByZXNwb25zaWJsZS4KKworSXRlbXMgZm9yIFdoaWNoIElCTSBpcyBOb3QgTGlhYmxlCisKK1NhdmUgd2l0aCByZXNwZWN0IHRvIGFueSBsaWFiaWxpdHkgcmVmZXJyZWQgdG8gaW4gaXRlbSAxIGFib3ZlLCB1bmRlciBubworY2lyY3Vtc3RhbmNlcyBpcyBJQk0gb3IgYW55IG9mIGl0cyBzdXBwbGllcnMgb3IgUHJvZ3JhbSBkZXZlbG9wZXJzCitsaWFibGUgZm9yIGFueSBvZiB0aGUgZm9sbG93aW5nLCBldmVuIGlmIElCTSBvciB0aGV5IHdlcmUgaW5mb3JtZWQgb2YKK3RoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGxvc3NlczoKKworMS4gbG9zcyBvZiwgb3IgZGFtYWdlIHRvLCBkYXRhOworCisyLiBzcGVjaWFsLCBpbmRpcmVjdCwgb3IgY29uc2VxdWVudGlhbCBsb3NzOyBvcgorCiszLiBsb3NzIG9mIHByb2ZpdHMsIGJ1c2luZXNzLCByZXZlbnVlLCBnb29kd2lsbCwgb3IgYW50aWNpcGF0ZWQgc2F2aW5ncy4KKworWjEyNS01NTQ0LTAyICgxMS8yMDAyKQorTElDRU5TRSBJTkZPUk1BVElPTgorCitUaGUgUHJvZ3JhbXMgbGlzdGVkIGJlbG93IGFyZSBsaWNlbnNlZCB1bmRlciB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZAorY29uZGl0aW9ucyBpbiBhZGRpdGlvbiB0byB0aG9zZSBvZiB0aGUgSW50ZXJuYXRpb25hbCBMaWNlbnNlIEFncmVlbWVudAorZm9yIEVhcmx5IFJlbGVhc2Ugb2YgUHJvZ3JhbXMuCisKK1Byb2dyYW0gTmFtZTogSUJNKFIpIFNESywgSmF2YShUTSkgMiBUZWNobm9sb2d5IEVkaXRpb24sIFZlcnNpb24gNS4wCitFYXJseSBBY2Nlc3MgUmVsZWFzZQorUHJvZ3JhbSBOdW1iZXI6IDYyMDUtMDAxCisKK1NwZWNpZmllZCBPcGVyYXRpbmcgRW52aXJvbm1lbnQKKworVGhlIFByb2dyYW0ncyBzcGVjaWZpY2F0aW9ucyBhbmQgc3BlY2lmaWVkIG9wZXJhdGluZyBlbnZpcm9ubWVudAoraW5mb3JtYXRpb24gbWF5IGJlIGZvdW5kIGluIGRvY3VtZW50YXRpb24gYWNjb21wYW55aW5nIHRoZSBQcm9ncmFtLCBpZgorYXZhaWxhYmxlLCBzdWNoIGFzIGEgcmVhZC1tZSBmaWxlLCBvciBvdGhlciBpbmZvcm1hdGlvbiBwdWJsaXNoZWQgYnkKK0lCTSwgc3VjaCBhcyBhbiBhbm5vdW5jZW1lbnQgbGV0dGVyLgorCitFdmFsdWF0aW9uIFBlcmlvZAorCitUaGUgZXZhbHVhdGlvbiBwZXJpb2QgYmVnaW5zIG9uIHRoZSBkYXRlIHRoYXQgWW91IGFncmVlIHRvIHRoZSB0ZXJtcyBvZgordGhpcyBBZ3JlZW1lbnQgYW5kIGVuZHMgYWZ0ZXIgOTAgZGF5cy4KKworUHJvZ3JhbS11bmlxdWUgVGVybXMKKworMS4gR0VORVJBTAorCithKSBUbyB0aGUgZXh0ZW50IG9mIGFueSBjb25mbGljdCBiZXR3ZWVuIHRoZSB0ZXJtcyBvZiB0aGUgSW50ZXJuYXRpb25hbAorTGljZW5zZSBBZ3JlZW1lbnQgZm9yIEVhcmx5IFJlbGVhc2Ugb2YgUHJvZ3JhbXMgYW5kIHRoaXMgTGljZW5zZQorSW5mb3JtYXRpb24sIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgSW5mb3JtYXRpb24gc2hhbGwgcHJldmFpbC4KKworYikgV2hlcmUgdGhlIFByb2dyYW0gaGFzIGJlZW4gcHJvdmlkZWQgdG8geW91IHNlcGFyYXRlbHkgYnkgSUJNLCBpdCBpcworcHJvdmlkZWQgYXQgbm8gY2hhcmdlLgorCitjKSBUaGUgUHJvZ3JhbSBjb25zaXN0cyBvZiBiaW5hcnkgY29kZSB0aGF0IGV4ZWN1dGVzIG9uIHRoZSBvcGVyYXRpbmcKK3N5c3RlbShzKSBzcGVjaWZpZWQgaW4gUmVhZG1lIGZpbGVzIHRoYXQgYWNjb21wYW55IHRoZSBQcm9ncmFtLgorCitkKSBZb3UgYXJlIG5vdCBhdXRob3JpemVkIHRvIHVzZSB0aGUgUHJvZ3JhbSBvciBhbnkgY29tcG9uZW50IHRoZXJlb2YKK2ZvciBleGVjdXRpbmcgYW55IHByb2R1Y3Rpb24gd29ya2xvYWQuCisKK2UpIE5vIHJpZ2h0IGlzIGdyYW50ZWQgdG8geW91IHVuZGVyIHRoaXMgbGljZW5zZSB0byByZWRpc3RyaWJ1dGUgYW55CitwYXJ0IG9mIHRoZSBQcm9ncmFtLgorCitmKSBJbiB0aGUgZXZlbnQgb2YgYW55IGRlZmVjdCBpbiB0aGUgUHJvZ3JhbSBiZWluZyByZXBvcnRlZCBieSB5b3UgdG8KK0lCTSwgSUJNIG1ha2VzIG5vIGNvbW1pdG1lbnQgdG8gdXBncmFkZSB0aGUgUHJvZ3JhbSBvciB0byByZW1lZHkgc3VjaAorZGVmZWN0LgorCitnKSBZb3UgYWdyZWUgdG8gY29tcGx5IHdpdGggYWxsIGFwcGxpY2FibGUgZXhwb3J0IGFuZCBpbXBvcnQgbGF3cyBhbmQKK3JlZ3VsYXRpb25zLgorCitoKSBZb3UgbWF5IG5vdCB3aXRob3V0IElCTSdzIHByaW9yIHdyaXR0ZW4gY29uc2VudCAoaSkgdXNlIChvciBhbGxvdyB0aGUKK3VzZSBvZikgdGhlIFByb2dyYW0sIG9yIG9mIGFueSBvZiBpdHMgY29tcG9uZW50cywgZm9yIHRoZSBwdXJwb3NlcyBvZgorYmVuY2htYXJraW5nIGFnYWluc3QgYW55IG90aGVyIHZlcnNpb24gb3IgaW1wbGVtZW50YXRpb24gb2YgSmF2YSA1OyBvcgorKGlpKSBwdWJsaXNoLCBkaXNjbG9zZSBvciBvdGhlcndpc2UgY29tbXVuaWNhdGUgdG8gYW55IHRoaXJkIHBhcnR5IHRoZQorcmVzdWx0cyBvZiBhbnkgYmVuY2htYXJraW5nIG9mIHRoZSBQcm9ncmFtLgorCisyLiBUUkFERU1BUktTIEFORCBDT1BZUklHSFQ6IFlPVVIgUkVTUE9OU0lCSUxJVElFUworCithKSBZb3Ugc2hhbGwgbm90IG1vZGlmeSwgZGVsZXRlLCBzdXBwcmVzcywgb3Igb2JzY3VyZSBhbnkgY29weXJpZ2h0LAordHJhZGVtYXJrIG9yIG90aGVyIGxlZ2FsIG5vdGljZSAod2hldGhlciBmcm9tIElCTSBvciBhbnkgdGhpcmQgcGFydHkpCit3aGljaCBtYXkgYmUgZGlzcGxheWVkIGJ5IG9yIGluY2x1ZGVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4KKworYikgSmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgVHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4KK01pY3Jvc3lzdGVtcywgSW5jLiBpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLgorCitjKSBZb3UgcmVjb2duaXplIElCTSdzIGFuZCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuJ3Mgb3duZXJzaGlwIGFuZCB0aXRsZQordG8gdGhlaXIgcmVzcGVjdGl2ZSB0cmFkZW1hcmtzIGFuZCBvZiBhbnkgZ29vZHdpbGwgYXR0YWNoaW5nIHRoZXJldG8sCitpbmNsdWRpbmcgZ29vZHdpbGwgcmVzdWx0aW5nIGZyb20gdXNlLiBZb3Ugd2lsbCBub3QgdXNlIG9yIGF0dGVtcHQgdG8KK3JlZ2lzdGVyIGFueSB0cmFkZW1hcmsgd2hpY2ggaXMgY29uZnVzaW5nbHkgc2ltaWxhciB0byBzdWNoIElCTSBvciBTdW4KK3RyYWRlbWFya3MuCisKKzMuIFBST09GIE9GIEVOVElUTEVNRU5UCisKK1RoaXMgTGljZW5zZSBBZ3JlZW1lbnQgY29uc3RpdHV0ZXMgeW91ciBQcm9vZiBvZiBFbnRpdGxlbWVudC4KKworCisKK0QvTjogTC1BREFOLTYzS0xEQQorUC9OOiBMLUFEQU4tNjNLTERBCmRpZmYgLS1naXQgYS9saWNlbnNlcy9JQk0tSjEuNiBiL2xpY2Vuc2VzL0lCTS1KMS42Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0MmI4ZjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9JQk0tSjEuNgpAQCAtMCwwICsxLDk4OCBAQAorSW50ZXJuYXRpb25hbCBMaWNlbnNlIEFncmVlbWVudCBmb3IgTm9uLVdhcnJhbnRlZCBQcm9ncmFtcworCitQYXJ0IDEgLSBHZW5lcmFsIFRlcm1zCisKK0JZIERPV05MT0FESU5HLCBJTlNUQUxMSU5HLCBDT1BZSU5HLCBBQ0NFU1NJTkcsIE9SIFVTSU5HIFRIRSBQUk9HUkFNIFlPVSBBR1JFRQorVE8gVEhFIFRFUk1TIE9GIFRISVMgQUdSRUVNRU5ULiBJRiBZT1UgQVJFIEFDQ0VQVElORyBUSEVTRSBURVJNUyBPTiBCRUhBTEYgT0YKK0FOT1RIRVIgUEVSU09OIE9SIEEgQ09NUEFOWSBPUiBPVEhFUiBMRUdBTCBFTlRJVFksIFlPVSBSRVBSRVNFTlQgQU5EIFdBUlJBTlQKK1RIQVQgWU9VIEhBVkUgRlVMTCBBVVRIT1JJVFkgVE8gQklORCBUSEFUIFBFUlNPTiwgQ09NUEFOWSwgT1IgTEVHQUwgRU5USVRZIFRPCitUSEVTRSBURVJNUy4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEVTRSBURVJNUywgCisKKy0gRE8gTk9UIERPV05MT0FELCBJTlNUQUxMLCBDT1BZLCBBQ0NFU1MsIE9SIFVTRSBUSEUgUFJPR1JBTTsgQU5ECisKKy0gUFJPTVBUTFkgUkVUVVJOIFRIRSBQUk9HUkFNIEFORCBQUk9PRiBPRiBFTlRJVExFTUVOVCBUTyBUSEUgUEFSVFkgRlJPTSBXSE9NCitZT1UgQUNRVUlSRUQgSVQgVE8gT0JUQUlOIEEgUkVGVU5EIE9GIFRIRSBBTU9VTlQgWU9VIFBBSUQuIElGIFlPVSBET1dOTE9BREVEIFRIRQorUFJPR1JBTSwgQ09OVEFDVCBUSEUgUEFSVFkgRlJPTSBXSE9NIFlPVSBBQ1FVSVJFRCBJVC4KKworIklCTSIgaXMgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcyBDb3Jwb3JhdGlvbiBvciBvbmUgb2YgaXRzIHN1YnNpZGlhcmllcy4KKworIkxpY2Vuc2UgSW5mb3JtYXRpb24iICgiTEkiKSBpcyBhIGRvY3VtZW50IHRoYXQgcHJvdmlkZXMgaW5mb3JtYXRpb24gc3BlY2lmaWMgdG8KK2EgUHJvZ3JhbS4gVGhlIFByb2dyYW0ncyBMSSBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5pYm0uY29tL3NvZnR3YXJlL3NsYS8gLgorVGhlIExJIG1heSBhbHNvIGJlIGZvdW5kIGluIGEgZmlsZSBpbiB0aGUgUHJvZ3JhbSdzIGRpcmVjdG9yeSwgYnkgdGhlIHVzZSBvZiBhCitzeXN0ZW0gY29tbWFuZCwgb3IgYXMgYSBib29rbGV0IHdoaWNoIGFjY29tcGFuaWVzIHRoZSBQcm9ncmFtLgorCisiUHJvZ3JhbSIgaXMgdGhlIGZvbGxvd2luZywgaW5jbHVkaW5nIHRoZSBvcmlnaW5hbCBhbmQgYWxsIHdob2xlIG9yIHBhcnRpYWwKK2NvcGllczogMSkgbWFjaGluZS1yZWFkYWJsZSBpbnN0cnVjdGlvbnMgYW5kIGRhdGEsIDIpIGNvbXBvbmVudHMsIDMpCithdWRpby12aXN1YWwgY29udGVudCAoc3VjaCBhcyBpbWFnZXMsIHRleHQsIHJlY29yZGluZ3MsIG9yIHBpY3R1cmVzKSwgNCkgcmVsYXRlZAorbGljZW5zZWQgbWF0ZXJpYWxzLCBhbmQgNSkgbGljZW5zZSB1c2UgZG9jdW1lbnRzIG9yIGtleXMsIGFuZCBkb2N1bWVudGF0aW9uLgorCitBICJQcm9vZiBvZiBFbnRpdGxlbWVudCIgKCJQb0UiKSBpcyBldmlkZW5jZSBvZiBZb3VyIGF1dGhvcml6YXRpb24gdG8gdXNlIGEKK1Byb2dyYW0gYXQgYSBzcGVjaWZpZWQgbGV2ZWwuIFRoYXQgbGV2ZWwgbWF5IGJlIG1lYXN1cmVkLCBmb3IgZXhhbXBsZSwgYnkgdGhlCitudW1iZXIgb2YgcHJvY2Vzc29ycyBvciB1c2Vycy4gVGhlIFBvRSBpcyBhbHNvIGV2aWRlbmNlIG9mIFlvdXIgZWxpZ2liaWxpdHkgZm9yIAorZnV0dXJlIHVwZ3JhZGUgcHJpY2VzLCBpZiBhbnksIGFuZCBwb3RlbnRpYWwgc3BlY2lhbCBvciBwcm9tb3Rpb25hbAorb3Bwb3J0dW5pdGllcy4gSWYgSUJNIGRvZXMgbm90IHByb3ZpZGUgWW91IHdpdGggYSBQb0UsIHRoZW4gSUJNIG1heSBhY2NlcHQgdGhlCitvcmlnaW5hbCBwYWlkIHNhbGVzIHJlY2VpcHQgb3Igb3RoZXIgc2FsZXMgcmVjb3JkIGZyb20gdGhlIHBhcnR5IChlaXRoZXIgSUJNIG9yCitpdHMgcmVzZWxsZXIpIGZyb20gd2hvbSBZb3UgYWNxdWlyZWQgdGhlIFByb2dyYW0sIHByb3ZpZGVkIHRoYXQgaXQgc3BlY2lmaWVzIHRoZQorbmFtZSBvZiB0aGUgUHJvZ3JhbSBhbmQgdGhlIHVzYWdlIGxldmVsIGFjcXVpcmVkLiAKKworIllvdSIgYW5kICJZb3VyIiByZWZlciBlaXRoZXIgdG8gYW4gaW5kaXZpZHVhbCBwZXJzb24gb3IgdG8gYSBzaW5nbGUgbGVnYWwKK2VudGl0eS4KKworVGhpcyBBZ3JlZW1lbnQgaW5jbHVkZXMgUGFydCAxIC0gR2VuZXJhbCBUZXJtcywgUGFydCAyIC0gQ291bnRyeS11bmlxdWUgVGVybXMKKyhpZiBhbnkpLCBMaWNlbnNlIEluZm9ybWF0aW9uLCBhbmQgUHJvb2Ygb2YgRW50aXRsZW1lbnQgYW5kIGlzIHRoZSBjb21wbGV0ZQorYWdyZWVtZW50IGJldHdlZW4gWW91IGFuZCBJQk0gcmVnYXJkaW5nIHRoZSB1c2Ugb2YgdGhlIFByb2dyYW0uIEl0IHJlcGxhY2VzIGFueQorcHJpb3Igb3JhbCBvciB3cml0dGVuIGNvbW11bmljYXRpb25zIGJldHdlZW4gWW91IGFuZCBJQk0gY29uY2VybmluZyBZb3VyIHVzZSBvZgordGhlIFByb2dyYW0uIFRoZSB0ZXJtcyBvZiBQYXJ0IDIgYW5kIExpY2Vuc2UgSW5mb3JtYXRpb24gbWF5IHJlcGxhY2Ugb3IgbW9kaWZ5Cit0aG9zZSBvZiBQYXJ0IDEuIFRvIHRoZSBleHRlbnQgdGhlcmUgaXMgYSBjb25mbGljdCBiZXR3ZWVuIHRoZSB0ZXJtcyBvZiB0aGlzCitBZ3JlZW1lbnQgYW5kIHRob3NlIG9mIHRoZSBJQk0gSW50ZXJuYXRpb25hbCBQYXNzcG9ydCBBZHZhbnRhZ2UgQWdyZWVtZW50LCB0aGUKK3Rlcm1zIG9mIHRoZSBsYXR0ZXIgYWdyZWVtZW50IHByZXZhaWwuCisKKzEuIEVudGl0bGVtZW50CisKK0xpY2Vuc2UKKworVGhlIFByb2dyYW0gaXMgb3duZWQgYnkgSUJNIG9yIGFuIElCTSBzdXBwbGllciwgYW5kIGlzIGNvcHlyaWdodGVkIGFuZCBsaWNlbnNlZCwKK25vdCBzb2xkLgorCitJQk0gZ3JhbnRzIFlvdSBhIG5vbmV4Y2x1c2l2ZSBsaWNlbnNlIHRvIHVzZSB0aGUgUHJvZ3JhbSB3aGVuIFlvdSBsYXdmdWxseQorYWNxdWlyZSBpdC4KKworWW91IG1heSAxKSB1c2UgdGhlIFByb2dyYW0gdXAgdG8gdGhlIGxldmVsIG9mIHVzZSBzcGVjaWZpZWQgaW4gdGhlIFBvRSBhbmQgMikKK21ha2UgYW5kIGluc3RhbGwgY29waWVzLCBpbmNsdWRpbmcgYSBiYWNrdXAgY29weSwgdG8gc3VwcG9ydCBzdWNoIHVzZS4gVGhlIHRlcm1zCitvZiB0aGlzIGxpY2Vuc2UgYXBwbHkgdG8gZWFjaCBjb3B5IFlvdSBtYWtlLiBZb3Ugd2lsbCByZXByb2R1Y2UgYWxsIGNvcHlyaWdodAorbm90aWNlcyBhbmQgYWxsIG90aGVyIGxlZ2VuZHMgb2Ygb3duZXJzaGlwIG9uIGVhY2ggY29weSwgb3IgcGFydGlhbCBjb3B5LCBvZiB0aGUKK1Byb2dyYW0uCisKK0lmIFlvdSBhY3F1aXJlIHRoZSBQcm9ncmFtIGFzIGEgcHJvZ3JhbSB1cGdyYWRlLCBhZnRlciBZb3UgaW5zdGFsbCB0aGUgdXBncmFkZQorWW91IG1heSBub3QgdXNlIHRoZSBQcm9ncmFtIGZyb20gd2hpY2ggWW91IHVwZ3JhZGVkIG9yIHRyYW5zZmVyIGl0IHRvIGFub3RoZXIKK3BhcnR5LgorCitZb3Ugd2lsbCBlbnN1cmUgdGhhdCBhbnlvbmUgd2hvIHVzZXMgdGhlIFByb2dyYW0gKGFjY2Vzc2VkIGVpdGhlciBsb2NhbGx5IG9yCityZW1vdGVseSkgZG9lcyBzbyBvbmx5IGZvciBZb3VyIGF1dGhvcml6ZWQgdXNlIGFuZCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBvZgordGhpcyBBZ3JlZW1lbnQuCisKK1lvdSBtYXkgbm90IDEpIHVzZSwgY29weSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGV4Y2VwdCBhcyBwcm92aWRlZAoraW4gdGhpcyBBZ3JlZW1lbnQ7IDIpIHJldmVyc2UgYXNzZW1ibGUsIHJldmVyc2UgY29tcGlsZSwgb3Igb3RoZXJ3aXNlIHRyYW5zbGF0ZQordGhlIFByb2dyYW0gZXhjZXB0IGFzIHNwZWNpZmljYWxseSBwZXJtaXR0ZWQgYnkgbGF3IHdpdGhvdXQgdGhlIHBvc3NpYmlsaXR5IG9mCitjb250cmFjdHVhbCB3YWl2ZXI7IG9yIDMpIHN1YmxpY2Vuc2UsIHJlbnQsIG9yIGxlYXNlIHRoZSBQcm9ncmFtLgorCitJQk0gbWF5IHRlcm1pbmF0ZSBZb3VyIGxpY2Vuc2UgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMKK0FncmVlbWVudC4gSWYgSUJNIGRvZXMgc28sIFlvdSBtdXN0IGRlc3Ryb3kgYWxsIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBhbmQgaXRzCitQb0UuCisKK01vbmV5LWJhY2sgR3VhcmFudGVlCisKK0lmIGZvciBhbnkgcmVhc29uIFlvdSBhcmUgZGlzc2F0aXNmaWVkIHdpdGggdGhlIFByb2dyYW0gYW5kIFlvdSBhcmUgdGhlIG9yaWdpbmFsCitsaWNlbnNlZSwgWW91IG1heSBvYnRhaW4gYSByZWZ1bmQgb2YgdGhlIGFtb3VudCBZb3UgcGFpZCBmb3IgaXQsIGlmIHdpdGhpbiAzMAorZGF5cyBvZiBZb3VyIGludm9pY2UgZGF0ZSBZb3UgcmV0dXJuIHRoZSBQcm9ncmFtIGFuZCBpdHMgUG9FIHRvIHRoZSBwYXJ0eSBmcm9tCit3aG9tIFlvdSBvYnRhaW5lZCBpdC4gSWYgWW91IGRvd25sb2FkZWQgdGhlIFByb2dyYW0sIFlvdSBtYXkgY29udGFjdCB0aGUgcGFydHkKK2Zyb20gd2hvbSBZb3UgYWNxdWlyZWQgaXQgZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gb2J0YWluIHRoZSByZWZ1bmQuCisKK1Byb2dyYW0gVHJhbnNmZXIKKworWW91IG1heSB0cmFuc2ZlciBhIFByb2dyYW0gYW5kIGFsbCBvZiBZb3VyIGxpY2Vuc2UgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyB0bworYW5vdGhlciBwYXJ0eSBvbmx5IGlmIHRoYXQgcGFydHkgYWdyZWVzIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudC4gV2hlbiBZb3UKK3RyYW5zZmVyIHRoZSBQcm9ncmFtLCBZb3UgbXVzdCBhbHNvIHRyYW5zZmVyIGEgY29weSBvZiB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nCit0aGUgUHJvZ3JhbSdzIFBvRS4gQWZ0ZXIgdGhlIHRyYW5zZmVyLCBZb3UgbWF5IG5vdCB1c2UgdGhlIFByb2dyYW0uCisKKzIuIENoYXJnZXMKKworVGhlIGFtb3VudCBwYXlhYmxlIGZvciBhIFByb2dyYW0gbGljZW5zZSBpcyBhIG9uZS10aW1lIGNoYXJnZS4gCisKK09uZS10aW1lIGNoYXJnZXMgYXJlIGJhc2VkIG9uIHRoZSBsZXZlbCBvZiB1c2UgYWNxdWlyZWQgd2hpY2ggaXMgc3BlY2lmaWVkIGluCit0aGUgUG9FLiBJQk0gZG9lcyBub3QgZ2l2ZSBjcmVkaXRzIG9yIHJlZnVuZHMgZm9yIGNoYXJnZXMgYWxyZWFkeSBkdWUgb3IgcGFpZCwKK2V4Y2VwdCBhcyBzcGVjaWZpZWQgZWxzZXdoZXJlIGluIHRoaXMgQWdyZWVtZW50LgorCitJZiBZb3Ugd2lzaCB0byBpbmNyZWFzZSB0aGUgbGV2ZWwgb2YgdXNlLCBub3RpZnkgSUJNIG9yIHRoZSBwYXJ0eSBmcm9tIHdob20gWW91CithY3F1aXJlZCBpdCBhbmQgcGF5IGFueSBhcHBsaWNhYmxlIGNoYXJnZXMuIAorCitJZiBhbnkgYXV0aG9yaXR5IGltcG9zZXMgYSBkdXR5LCB0YXgsIGxldnkgb3IgZmVlLCBleGNsdWRpbmcgdGhvc2UgYmFzZWQgb24KK0lCTSdzIG5ldCBpbmNvbWUsIHVwb24gdGhlIFByb2dyYW0sIHRoZW4gWW91IGFncmVlIHRvIHBheSB0aGUgYW1vdW50IHNwZWNpZmllZAorb3Igc3VwcGx5IGV4ZW1wdGlvbiBkb2N1bWVudGF0aW9uLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBhbnkgcGVyc29uYWwgcHJvcGVydHkKK3RheGVzIGZvciB0aGUgUHJvZ3JhbSBmcm9tIHRoZSBkYXRlIHRoYXQgWW91IGFjcXVpcmUgaXQuCisKKzMuIE5vIFdhcnJhbnR5CisKK1NVQkpFQ1QgVE8gQU5ZIFNUQVRVVE9SWSBXQVJSQU5USUVTIFdISUNIIENBTiBOT1QgQkUgRVhDTFVERUQsIElCTSBNQUtFUyBOTworV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBCitQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBOT04tSU5GUklOR0VNRU5ULCBSRUdBUkRJTkcgVEhFIFBST0dSQU0gT1IgVEVDSE5JQ0FMCitTVVBQT1JULCBJRiBBTlkuCisKK1RoZSBleGNsdXNpb24gYWxzbyBhcHBsaWVzIHRvIGFueSBvZiBJQk0ncyBQcm9ncmFtIGRldmVsb3BlcnMgYW5kIHN1cHBsaWVycy4KKworTWFudWZhY3R1cmVycywgc3VwcGxpZXJzLCBvciBwdWJsaXNoZXJzIG9mIG5vbi1JQk0gUHJvZ3JhbXMgbWF5IHByb3ZpZGUgdGhlaXIKK293biB3YXJyYW50aWVzLgorCitJQk0gZG9lcyBub3QgcHJvdmlkZSB0ZWNobmljYWwgc3VwcG9ydCwgdW5sZXNzIElCTSBzcGVjaWZpZXMgb3RoZXJ3aXNlLgorCis0LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eQorCitDaXJjdW1zdGFuY2VzIG1heSBhcmlzZSB3aGVyZSwgYmVjYXVzZSBvZiBhIGRlZmF1bHQgb24gSUJNJ3MgcGFydCBvciBvdGhlcgorbGlhYmlsaXR5LCBZb3UgYXJlIGVudGl0bGVkIHRvIHJlY292ZXIgZGFtYWdlcyBmcm9tIElCTS4gSW4gZWFjaCBzdWNoIGluc3RhbmNlLAorcmVnYXJkbGVzcyBvZiB0aGUgYmFzaXMgb24gd2hpY2ggWW91IG1heSBiZSBlbnRpdGxlZCB0byBjbGFpbSBkYW1hZ2VzIGZyb20gSUJNLAorKGluY2x1ZGluZyBmdW5kYW1lbnRhbCBicmVhY2gsIG5lZ2xpZ2VuY2UsIG1pc3JlcHJlc2VudGF0aW9uLCBvciBvdGhlciBjb250cmFjdAorb3IgdG9ydCBjbGFpbSksIElCTSBpcyBsaWFibGUgZm9yIG5vIG1vcmUgdGhhbiAxKSBkYW1hZ2VzIGZvciBib2RpbHkgaW5qdXJ5CisoaW5jbHVkaW5nIGRlYXRoKSBhbmQgZGFtYWdlIHRvIHJlYWwgcHJvcGVydHkgYW5kIHRhbmdpYmxlIHBlcnNvbmFsIHByb3BlcnR5IGFuZAorMikgdGhlIGFtb3VudCBvZiBhbnkgb3RoZXIgYWN0dWFsIGRpcmVjdCBkYW1hZ2VzIHVwIHRvIHRoZSBjaGFyZ2VzIGZvciB0aGUKK1Byb2dyYW0gdGhhdCBpcyB0aGUgc3ViamVjdCBvZiB0aGUgY2xhaW0uCisKK1RoaXMgbGltaXRhdGlvbiBvZiBsaWFiaWxpdHkgYWxzbyBhcHBsaWVzIHRvIElCTSdzIFByb2dyYW0gZGV2ZWxvcGVycyBhbmQKK3N1cHBsaWVycy4gSXQgaXMgdGhlIG1heGltdW0gZm9yIHdoaWNoIHRoZXkgYW5kIElCTSBhcmUgY29sbGVjdGl2ZWx5CityZXNwb25zaWJsZS4KKworVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBJUyBJQk0sIElUUyBQUk9HUkFNIERFVkVMT1BFUlMgT1IgU1VQUExJRVJTIExJQUJMRSBGT1IKK0FOWSBPRiBUSEUgRk9MTE9XSU5HLCBFVkVOIElGIElORk9STUVEIE9GIFRIRUlSIFBPU1NJQklMSVRZOiAKKworMS4gTE9TUyBPRiwgT1IgREFNQUdFIFRPLCBEQVRBOworCisyLiBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBJTkRJUkVDVCBEQU1BR0VTLCBPUiBGT1IgQU5ZIEVDT05PTUlDIENPTlNFUVVFTlRJQUwKK0RBTUFHRVM7IE9SCisKKzMuIExPU1QgUFJPRklUUywgQlVTSU5FU1MsIFJFVkVOVUUsIEdPT0RXSUxMLCBPUiBBTlRJQ0lQQVRFRCBTQVZJTkdTLgorCitTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRIRSBBQk9WRSBMSU1JVEFUSU9OIE9SIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPCitZT1UuCisKKzUuIEdlbmVyYWwKKworMS4gTm90aGluZyBpbiB0aGlzIEFncmVlbWVudCBhZmZlY3RzIGFueSBzdGF0dXRvcnkgcmlnaHRzIG9mIGNvbnN1bWVycyB0aGF0CitjYW5ub3QgYmUgd2FpdmVkIG9yIGxpbWl0ZWQgYnkgY29udHJhY3QuCisKKzIuIEluIHRoZSBldmVudCB0aGF0IGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaGVsZCB0byBiZSBpbnZhbGlkIG9yCit1bmVuZm9yY2VhYmxlLCB0aGUgcmVtYWluaW5nIHByb3Zpc2lvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgcmVtYWluIGluIGZ1bGwgZm9yY2UKK2FuZCBlZmZlY3QuCisKKzMuIFlvdSBhZ3JlZSB0byBjb21wbHkgd2l0aCBhbGwgYXBwbGljYWJsZSBleHBvcnQgYW5kIGltcG9ydCBsYXdzIGFuZAorcmVndWxhdGlvbnMuCisKKzQuIFlvdSBhZ3JlZSB0byBhbGxvdyBJQk0gdG8gc3RvcmUgYW5kIHVzZSBZb3VyIGNvbnRhY3QgaW5mb3JtYXRpb24sIGluY2x1ZGluZworbmFtZXMsIHBob25lIG51bWJlcnMsIGFuZCBlLW1haWwgYWRkcmVzc2VzLCBhbnl3aGVyZSB0aGV5IGRvIGJ1c2luZXNzLiBTdWNoCitpbmZvcm1hdGlvbiB3aWxsIGJlIHByb2Nlc3NlZCBhbmQgdXNlZCBpbiBjb25uZWN0aW9uIHdpdGggb3VyIGJ1c2luZXNzCityZWxhdGlvbnNoaXAsIGFuZCBtYXkgYmUgcHJvdmlkZWQgdG8gY29udHJhY3RvcnMsIEJ1c2luZXNzIFBhcnRuZXJzLCBhbmQKK2Fzc2lnbmVlcyBvZiBJQk0gZm9yIHVzZXMgY29uc2lzdGVudCB3aXRoIHRoZWlyIGNvbGxlY3RpdmUgYnVzaW5lc3MgYWN0aXZpdGllcywKK2luY2x1ZGluZyBjb21tdW5pY2F0aW5nIHdpdGggWW91IChmb3IgZXhhbXBsZSwgZm9yIHByb2Nlc3Npbmcgb3JkZXJzLCBmb3IKK3Byb21vdGlvbnMsIGFuZCBmb3IgbWFya2V0IHJlc2VhcmNoKS4KKworNS4gTmVpdGhlciBZb3Ugbm9yIElCTSB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMgQWdyZWVtZW50IG1vcmUgdGhhbgordHdvIHllYXJzIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UgdW5sZXNzIG90aGVyd2lzZSBwcm92aWRlZCBieSBsb2NhbCBsYXcKK3dpdGhvdXQgdGhlIHBvc3NpYmlsaXR5IG9mIGNvbnRyYWN0dWFsIHdhaXZlciBvciBsaW1pdGF0aW9uLgorCis2LiBOZWl0aGVyIFlvdSBub3IgSUJNIGlzIHJlc3BvbnNpYmxlIGZvciBmYWlsdXJlIHRvIGZ1bGZpbGwgYW55IG9ibGlnYXRpb25zIGR1ZQordG8gY2F1c2VzIGJleW9uZCBpdHMgY29udHJvbC4KKworNy4gVGhpcyBBZ3JlZW1lbnQgd2lsbCBub3QgY3JlYXRlIGFueSByaWdodCBvciBjYXVzZSBvZiBhY3Rpb24gZm9yIGFueSB0aGlyZAorcGFydHksIG5vciB3aWxsIElCTSBiZSByZXNwb25zaWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IFlvdQorZXhjZXB0LCBhcyBwZXJtaXR0ZWQgYnkgdGhlIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5IHNlY3Rpb24gYWJvdmUsIGZvciBib2RpbHkKK2luanVyeSAoaW5jbHVkaW5nIGRlYXRoKSBvciBkYW1hZ2UgdG8gcmVhbCBvciB0YW5naWJsZSBwZXJzb25hbCBwcm9wZXJ0eSBmb3IKK3doaWNoIElCTSBpcyBsZWdhbGx5IGxpYWJsZS4KKworNi4gR292ZXJuaW5nIExhdywgSnVyaXNkaWN0aW9uLCBhbmQgQXJiaXRyYXRpb24KKworR292ZXJuaW5nIExhdworCitCb3RoIFlvdSBhbmQgSUJNIGNvbnNlbnQgdG8gdGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBsYXdzIG9mIHRoZSBjb3VudHJ5IGluIHdoaWNoCitZb3UgYWNxdWlyZWQgdGhlIFByb2dyYW0gbGljZW5zZSB0byBnb3Zlcm4sIGludGVycHJldCwgYW5kIGVuZm9yY2UgYWxsIG9mIFlvdXIKK2FuZCBJQk0ncyByaWdodHMsIGR1dGllcywgYW5kIG9ibGlnYXRpb25zIGFyaXNpbmcgZnJvbSwgb3IgcmVsYXRpbmcgaW4gYW55CittYW5uZXIgdG8sIHRoZSBzdWJqZWN0IG1hdHRlciBvZiB0aGlzIEFncmVlbWVudCwgd2l0aG91dCByZWdhcmQgdG8gY29uZmxpY3Qgb2YKK2xhdyBwcmluY2lwbGVzLgorCitUaGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMKK2RvZXMgbm90IGFwcGx5LgorCitKdXJpc2RpY3Rpb24KKworQWxsIG9mIG91ciByaWdodHMsIGR1dGllcywgYW5kIG9ibGlnYXRpb25zIGFyZSBzdWJqZWN0IHRvIHRoZSBjb3VydHMgb2YgdGhlCitjb3VudHJ5IGluIHdoaWNoIFlvdSBhY3F1aXJlZCB0aGUgUHJvZ3JhbSBsaWNlbnNlLgorCitQYXJ0IDIgLSBDb3VudHJ5LXVuaXF1ZSBUZXJtcworCitBTUVSSUNBUworCitBUkdFTlRJTkE6IEdvdmVybmluZyBMYXcsIEp1cmlzZGljdGlvbiwgYW5kIEFyYml0cmF0aW9uIChTZWN0aW9uIDYpOiBUaGUKK2ZvbGxvd2luZyBleGNlcHRpb24gaXMgYWRkZWQgdG8gdGhpcyBzZWN0aW9uOgorCitBbnkgbGl0aWdhdGlvbiBhcmlzaW5nIGZyb20gdGhpcyBBZ3JlZW1lbnQgd2lsbCBiZSBzZXR0bGVkIGV4Y2x1c2l2ZWx5IGJ5IHRoZQorT3JkaW5hcnkgQ29tbWVyY2lhbCBDb3VydCBvZiB0aGUgY2l0eSBvZiBCdWVub3MgQWlyZXMuCisKK0JSQVpJTDogR292ZXJuaW5nIExhdywgSnVyaXNkaWN0aW9uLCBhbmQgQXJiaXRyYXRpb24gKFNlY3Rpb24gNik6IFRoZSBmb2xsb3dpbmcKK2V4Y2VwdGlvbiBpcyBhZGRlZCB0byB0aGlzIHNlY3Rpb246CisKK0FueSBsaXRpZ2F0aW9uIGFyaXNpbmcgZnJvbSB0aGlzIEFncmVlbWVudCB3aWxsIGJlIHNldHRsZWQgZXhjbHVzaXZlbHkgYnkgdGhlCitjb3VydCBvZiBSaW8gZGUgSmFuZWlybywgUkouCisKK0NBTkFEQTogR2VuZXJhbCAoU2VjdGlvbiA1KTogVGhlIGZvbGxvd2luZyByZXBsYWNlcyBpdGVtIDc6CisKKzcuIFRoaXMgQWdyZWVtZW50IHdpbGwgbm90IGNyZWF0ZSBhbnkgcmlnaHQgb3IgY2F1c2Ugb2YgYWN0aW9uIGZvciBhbnkgdGhpcmQKK3BhcnR5LCBub3Igd2lsbCBJQk0gYmUgcmVzcG9uc2libGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCBZb3UgZXhjZXB0CithcyBwZXJtaXR0ZWQgYnkgdGhlIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5IHNlY3Rpb24gYWJvdmUgZm9yIGJvZGlseSBpbmp1cnkKKyhpbmNsdWRpbmcgZGVhdGgpIG9yIHBoeXNpY2FsIGhhcm0gdG8gcmVhbCBvciB0YW5naWJsZSBwZXJzb25hbCBwcm9wZXJ0eSBjYXVzZWQKK2J5IElCTSdzIG5lZ2xpZ2VuY2UgZm9yIHdoaWNoIElCTSBpcyBsZWdhbGx5IGxpYWJsZS4iCisKK0dvdmVybmluZyBMYXcsIEp1cmlzZGljdGlvbiwgYW5kIEFyYml0cmF0aW9uIChTZWN0aW9uIDYpOiBUaGUgcGhyYXNlICJ0aGUgbGF3cworb2YgdGhlIGNvdW50cnkgaW4gd2hpY2ggWW91IGFjcXVpcmVkIHRoZSBQcm9ncmFtIGxpY2Vuc2UiIGluIHRoZSBHb3Zlcm5pbmcgTGF3CitzdWJzZWN0aW9uIGlzIHJlcGxhY2VkIGJ5IHRoZSBmb2xsb3dpbmc6IAorCit0aGUgbGF3cyBpbiB0aGUgUHJvdmluY2Ugb2YgT250YXJpbyIKKworUEVSVTogTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkgKFNlY3Rpb24gNCk6IFRoZSBmb2xsb3dpbmcgaXMgYWRkZWQgYXQgdGhlIGVuZCBvZgordGhpcyBzZWN0aW9uOiAKKworSW4gYWNjb3JkYW5jZSB3aXRoIEFydGljbGUgMTMyOCBvZiB0aGUgUGVydXZpYW4gQ2l2aWwgQ29kZSwgdGhlIGxpbWl0YXRpb25zIGFuZAorZXhjbHVzaW9ucyBzcGVjaWZpZWQgaW4gdGhpcyBzZWN0aW9uIHdpbGwgbm90IGFwcGx5IHRvIGRhbWFnZXMgY2F1c2VkIGJ5IElCTSdzCit3aWxsZnVsIG1pc2NvbmR1Y3QgKCJkb2xvIikgb3IgZ3Jvc3MgbmVnbGlnZW5jZSAoImN1bHBhIGluZXhjdXNhYmxlIikuCisKK1VOSVRFRCBTVEFURVMgT0YgQU1FUklDQTogR2VuZXJhbCAoU2VjdGlvbiA1KTogVGhlIGZvbGxvd2luZyBpcyBhZGRlZCB0byB0aGlzCitzZWN0aW9uOgorCitVLlMuIEdvdmVybm1lbnQgVXNlcnMgUmVzdHJpY3RlZCBSaWdodHMgLSBVc2UsIGR1cGxpY2F0aW9uIG9yIGRpc2Nsb3N1cmUKK3Jlc3RyaWN0ZWQgYnkgdGhlIEdTQSBBRFAgU2NoZWR1bGUgQ29udHJhY3Qgd2l0aCB0aGUgSUJNIENvcnBvcmF0aW9uLgorCitHb3Zlcm5pbmcgTGF3LCBKdXJpc2RpY3Rpb24sIGFuZCBBcmJpdHJhdGlvbiAoU2VjdGlvbiA2KTogVGhlIHBocmFzZSAidGhlIGxhd3MKK29mIHRoZSBjb3VudHJ5IGluIHdoaWNoIFlvdSBhY3F1aXJlZCB0aGUgUHJvZ3JhbSBsaWNlbnNlIiBpbiB0aGUgR292ZXJuaW5nIExhdworc3Vic2VjdGlvbiBpcyByZXBsYWNlZCBieSB0aGUgZm9sbG93aW5nOgorCit0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgTmV3IFlvcmssIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYQorCitBU0lBIFBBQ0lGSUMKKworQVVTVFJBTElBOiBObyBXYXJyYW50eSAoU2VjdGlvbiAzKTogVGhlIGZvbGxvd2luZyBpcyBhZGRlZDoKKworQWx0aG91Z2ggSUJNIHNwZWNpZmllcyB0aGF0IHRoZXJlIGFyZSBubyB3YXJyYW50aWVzLCAgWW91IG1heSBoYXZlIGNlcnRhaW4KK3JpZ2h0cyB1bmRlciB0aGUgVHJhZGUgUHJhY3RpY2VzIEFjdCAxOTc0IG9yIG90aGVyIGxlZ2lzbGF0aW9uIGFuZCBhcmUgb25seQorbGltaXRlZCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSB0aGUgYXBwbGljYWJsZSBsZWdpc2xhdGlvbi4KKworTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkgKFNlY3Rpb24gNCk6IFRoZSBmb2xsb3dpbmcgaXMgYWRkZWQ6CisKK1doZXJlIElCTSBpcyBpbiBicmVhY2ggb2YgYSBjb25kaXRpb24gb3Igd2FycmFudHkgaW1wbGllZCBieSB0aGUgVHJhZGUgUHJhY3RpY2VzCitBY3QgMTk3NCwgSUJNJ3MgbGlhYmlsaXR5IGlzIGxpbWl0ZWQgdG8gdGhlIHJlcGFpciBvciByZXBsYWNlbWVudCBvZiB0aGUgZ29vZHMsCitvciB0aGUgc3VwcGx5IG9mIGVxdWl2YWxlbnQgZ29vZHMuIFdoZXJlIHRoYXQgY29uZGl0aW9uIG9yIHdhcnJhbnR5IHJlbGF0ZXMgdG8KK3JpZ2h0IHRvIHNlbGwsIHF1aWV0IHBvc3Nlc3Npb24gb3IgY2xlYXIgdGl0bGUsIG9yIHRoZSBnb29kcyBhcmUgb2YgYSBraW5kCitvcmRpbmFyaWx5IGFjcXVpcmVkIGZvciBwZXJzb25hbCwgZG9tZXN0aWMgb3IgaG91c2Vob2xkIHVzZSBvciBjb25zdW1wdGlvbiwgdGhlbgorbm9uZSBvZiB0aGUgbGltaXRhdGlvbnMgaW4gdGhpcyBwYXJhZ3JhcGggYXBwbHkuCisKK0dvdmVybmluZyBMYXcsIEp1cmlzZGljdGlvbiwgYW5kIEFyYml0cmF0aW9uIChTZWN0aW9uIDYpOiBUaGUgcGhyYXNlICJ0aGUgbGF3cworb2YgdGhlIGNvdW50cnkgaW4gd2hpY2ggWW91IGFjcXVpcmVkIHRoZSBQcm9ncmFtIGxpY2Vuc2UiIGluIHRoZSBHb3Zlcm5pbmcgTGF3CitzdWJzZWN0aW9uIGlzIHJlcGxhY2VkIGJ5IHRoZSBmb2xsb3dpbmc6CisKK3RoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvciBUZXJyaXRvcnkgaW4gd2hpY2ggWW91IGFjcXVpcmVkIHRoZSBQcm9ncmFtIGxpY2Vuc2UKKworQ0FNQk9ESUEsIExBT1MsIGFuZCBWSUVUTkFNOiBHb3Zlcm5pbmcgTGF3LCBKdXJpc2RpY3Rpb24sIGFuZCBBcmJpdHJhdGlvbgorKFNlY3Rpb24gNik6IFRoZSBwaHJhc2UgInRoZSBsYXdzIG9mIHRoZSBjb3VudHJ5IGluIHdoaWNoIFlvdSBhY3F1aXJlZCB0aGUKK1Byb2dyYW0gbGljZW5zZSIgaW4gdGhlIEdvdmVybmluZyBMYXcgc3Vic2VjdGlvbiBpcyByZXBsYWNlZCBieSB0aGUgZm9sbG93aW5nOgorCit0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgTmV3IFlvcmssIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYQorCitUaGUgZm9sbG93aW5nIGlzIGFkZGVkIHRvIHRoaXMgc2VjdGlvbjoKKworQXJiaXRyYXRpb24KKworRGlzcHV0ZXMgYXJpc2luZyBvdXQgb2Ygb3IgaW4gY29ubmVjdGlvbiB3aXRoIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGZpbmFsbHkKK3NldHRsZWQgYnkgYXJiaXRyYXRpb24gd2hpY2ggc2hhbGwgYmUgaGVsZCBpbiBTaW5nYXBvcmUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZQorQXJiaXRyYXRpb24gUnVsZXMgb2YgU2luZ2Fwb3JlIEludGVybmF0aW9uYWwgQXJiaXRyYXRpb24gQ2VudGVyICgiU0lBQyBSdWxlcyIpCit0aGVuIGluIGVmZmVjdC4gVGhlIGFyYml0cmF0aW9uIGF3YXJkIHNoYWxsIGJlIGZpbmFsIGFuZCBiaW5kaW5nIGZvciB0aGUgcGFydGllcword2l0aG91dCBhcHBlYWwgYW5kIHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNldCBmb3J0aCB0aGUgZmluZGluZ3Mgb2YgZmFjdCBhbmQKK3RoZSBjb25jbHVzaW9ucyBvZiBsYXcuCisKK1RoZSBudW1iZXIgb2YgYXJiaXRyYXRvcnMgc2hhbGwgYmUgdGhyZWUsIHdpdGggZWFjaCBzaWRlIHRvIHRoZSBkaXNwdXRlIGJlaW5nCitlbnRpdGxlZCB0byBhcHBvaW50IG9uZSBhcmJpdHJhdG9yLiBUaGUgdHdvIGFyYml0cmF0b3JzIGFwcG9pbnRlZCBieSB0aGUgcGFydGllcworc2hhbGwgYXBwb2ludCBhIHRoaXJkIGFyYml0cmF0b3Igd2hvIHNoYWxsIGFjdCBhcyBjaGFpcm1hbiBvZiB0aGUgcHJvY2VlZGluZ3MuCitWYWNhbmNpZXMgaW4gdGhlIHBvc3Qgb2YgY2hhaXJtYW4gc2hhbGwgYmUgZmlsbGVkIGJ5IHRoZSBwcmVzaWRlbnQgb2YgdGhlIFNJQUMuCitPdGhlciB2YWNhbmNpZXMgc2hhbGwgYmUgZmlsbGVkIGJ5IHRoZSByZXNwZWN0aXZlIG5vbWluYXRpbmcgcGFydHkuIFByb2NlZWRpbmdzCitzaGFsbCBjb250aW51ZSBmcm9tIHRoZSBzdGFnZSB0aGV5IHdlcmUgYXQgd2hlbiB0aGUgdmFjYW5jeSBvY2N1cnJlZC4KKworSWYgb25lIG9mIHRoZSBwYXJ0aWVzIHJlZnVzZXMgb3Igb3RoZXJ3aXNlIGZhaWxzIHRvIGFwcG9pbnQgYW4gYXJiaXRyYXRvciB3aXRoaW4KKzMwIGRheXMgb2YgdGhlIGRhdGUgdGhlIG90aGVyIHBhcnR5IGFwcG9pbnRzIGl0cywgdGhlIGZpcnN0IGFwcG9pbnRlZCBhcmJpdHJhdG9yCitzaGFsbCBiZSB0aGUgc29sZSBhcmJpdHJhdG9yLCBwcm92aWRlZCB0aGF0IHRoZSBhcmJpdHJhdG9yIHdhcyB2YWxpZGx5IGFuZAorcHJvcGVybHkgYXBwb2ludGVkLgorCitBbGwgcHJvY2VlZGluZ3Mgc2hhbGwgYmUgY29uZHVjdGVkLCBpbmNsdWRpbmcgYWxsIGRvY3VtZW50cyBwcmVzZW50ZWQgaW4gc3VjaAorcHJvY2VlZGluZ3MsIGluIHRoZSBFbmdsaXNoIGxhbmd1YWdlLiBUaGUgRW5nbGlzaCBsYW5ndWFnZSB2ZXJzaW9uIG9mIHRoaXMKK0FncmVlbWVudCBwcmV2YWlscyBvdmVyIGFueSBvdGhlciBsYW5ndWFnZSB2ZXJzaW9uLgorCitIT05HIEtPTkcgUy5BLlIuIGFuZCBNQUNBVSBTLkEuUi4gb2YgQ2hpbmE6IEdvdmVybmluZyBMYXcsIEp1cmlzZGljdGlvbiwgYW5kCitBcmJpdHJhdGlvbiAoU2VjdGlvbiA2KTogVGhlIHBocmFzZSAidGhlIGxhd3Mgb2YgdGhlIGNvdW50cnkgaW4gd2hpY2ggWW91CithY3F1aXJlZCB0aGUgUHJvZ3JhbSBsaWNlbnNlIiBpbiB0aGUgR292ZXJuaW5nIExhdyBzdWJzZWN0aW9uIGlzIHJlcGxhY2VkIGJ5IHRoZQorZm9sbG93aW5nOgorCit0aGUgbGF3cyBvZiBIb25nIEtvbmcgU3BlY2lhbCBBZG1pbmlzdHJhdGl2ZSBSZWdpb24gb2YgQ2hpbmEKKworSU5ESUE6IExpbWl0YXRpb24gb2YgTGlhYmlsaXR5IChTZWN0aW9uIDQpOiBUaGUgZm9sbG93aW5nIHJlcGxhY2VzIHRoZSB0ZXJtcyBvZgoraXRlbXMgMSBhbmQgMiBvZiB0aGUgZmlyc3QgcGFyYWdyYXBoOgorCisxKSBsaWFiaWxpdHkgZm9yIGJvZGlseSBpbmp1cnkgKGluY2x1ZGluZyBkZWF0aCkgb3IgZGFtYWdlIHRvIHJlYWwgcHJvcGVydHkgYW5kCit0YW5naWJsZSBwZXJzb25hbCBwcm9wZXJ0eSB3aWxsIGJlIGxpbWl0ZWQgdG8gdGhhdCBjYXVzZWQgYnkgSUJNJ3MgbmVnbGlnZW5jZTsKK2FuZCAyKSBhcyB0byBhbnkgb3RoZXIgYWN0dWFsIGRhbWFnZSBhcmlzaW5nIGluIGFueSBzaXR1YXRpb24gaW52b2x2aW5nCitub25wZXJmb3JtYW5jZSBieSBJQk0gcHVyc3VhbnQgdG8sIG9yIGluIGFueSB3YXkgcmVsYXRlZCB0byB0aGUgc3ViamVjdCBvZiB0aGlzCitBZ3JlZW1lbnQsIElCTSdzIGxpYWJpbGl0eSB3aWxsIGJlIGxpbWl0ZWQgdG8gdGhlIGNoYXJnZSBwYWlkIGJ5IFlvdSBmb3IgdGhlCitpbmRpdmlkdWFsIFByb2dyYW0gdGhhdCBpcyB0aGUgc3ViamVjdCBvZiB0aGUgY2xhaW0uCisKK0dlbmVyYWwgKFNlY3Rpb24gNSk6IFRoZSBmb2xsb3dpbmcgcmVwbGFjZXMgdGhlIHRlcm1zIG9mIGl0ZW0gNToKKworSWYgbm8gc3VpdCBvciBvdGhlciBsZWdhbCBhY3Rpb24gaXMgYnJvdWdodCwgd2l0aGluIHRocmVlIHllYXJzIGFmdGVyIHRoZSBjYXVzZQorb2YgYWN0aW9uIGFyb3NlLCBpbiByZXNwZWN0IG9mIGFueSBjbGFpbSB0aGF0IGVpdGhlciBwYXJ0eSBtYXkgaGF2ZSBhZ2FpbnN0IHRoZQorb3RoZXIsIHRoZSByaWdodHMgb2YgdGhlIGNvbmNlcm5lZCBwYXJ0eSBpbiByZXNwZWN0IG9mIHN1Y2ggY2xhaW0gd2lsbCBiZQorZm9yZmVpdGVkIGFuZCB0aGUgb3RoZXIgcGFydHkgd2lsbCBzdGFuZCByZWxlYXNlZCBmcm9tIGl0cyBvYmxpZ2F0aW9ucyBpbgorcmVzcGVjdCBvZiBzdWNoIGNsYWltLgorCitHb3Zlcm5pbmcgTGF3LCBKdXJpc2RpY3Rpb24sIGFuZCBBcmJpdHJhdGlvbiAoU2VjdGlvbiA2KTogVGhlIGZvbGxvd2luZyBpcyBhZGRlZAordG8gdGhpcyBzZWN0aW9uOgorCitBcmJpdHJhdGlvbgorCitEaXNwdXRlcyBhcmlzaW5nIG91dCBvZiBvciBpbiBjb25uZWN0aW9uIHdpdGggdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgZmluYWxseQorc2V0dGxlZCBieSBhcmJpdHJhdGlvbiB3aGljaCBzaGFsbCBiZSBoZWxkIGluIEJhbmdhbG9yZSwgSW5kaWEgaW4gYWNjb3JkYW5jZQord2l0aCB0aGUgbGF3cyBvZiBJbmRpYSB0aGVuIGluIGVmZmVjdC4gVGhlIGFyYml0cmF0aW9uIGF3YXJkIHNoYWxsIGJlIGZpbmFsIGFuZAorYmluZGluZyBmb3IgdGhlIHBhcnRpZXMgd2l0aG91dCBhcHBlYWwgYW5kIHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNldCBmb3J0aCB0aGUKK2ZpbmRpbmdzIG9mIGZhY3QgYW5kIHRoZSBjb25jbHVzaW9ucyBvZiBsYXcuCisKK1RoZSBudW1iZXIgb2YgYXJiaXRyYXRvcnMgc2hhbGwgYmUgdGhyZWUsIHdpdGggZWFjaCBzaWRlIHRvIHRoZSBkaXNwdXRlIGJlaW5nCitlbnRpdGxlZCB0byBhcHBvaW50IG9uZSBhcmJpdHJhdG9yLiBUaGUgdHdvIGFyYml0cmF0b3JzIGFwcG9pbnRlZCBieSB0aGUgcGFydGllcworc2hhbGwgYXBwb2ludCBhIHRoaXJkIGFyYml0cmF0b3Igd2hvIHNoYWxsIGFjdCBhcyBjaGFpcm1hbiBvZiB0aGUgcHJvY2VlZGluZ3MuCitWYWNhbmNpZXMgaW4gdGhlIHBvc3Qgb2YgY2hhaXJtYW4gc2hhbGwgYmUgZmlsbGVkIGJ5IHRoZSBwcmVzaWRlbnQgb2YgdGhlIEJhcgorQ291bmNpbCBvZiBJbmRpYS4gT3RoZXIgdmFjYW5jaWVzIHNoYWxsIGJlIGZpbGxlZCBieSB0aGUgcmVzcGVjdGl2ZSBub21pbmF0aW5nCitwYXJ0eS4gUHJvY2VlZGluZ3Mgc2hhbGwgY29udGludWUgZnJvbSB0aGUgc3RhZ2UgdGhleSB3ZXJlIGF0IHdoZW4gdGhlIHZhY2FuY3kKK29jY3VycmVkLgorCitJZiBvbmUgb2YgdGhlIHBhcnRpZXMgcmVmdXNlcyBvciBvdGhlcndpc2UgZmFpbHMgdG8gYXBwb2ludCBhbiBhcmJpdHJhdG9yIHdpdGhpbgorMzAgZGF5cyBvZiB0aGUgZGF0ZSB0aGUgb3RoZXIgcGFydHkgYXBwb2ludHMgaXRzLCB0aGUgZmlyc3QgYXBwb2ludGVkIGFyYml0cmF0b3IKK3NoYWxsIGJlIHRoZSBzb2xlIGFyYml0cmF0b3IsIHByb3ZpZGVkIHRoYXQgdGhlIGFyYml0cmF0b3Igd2FzIHZhbGlkbHkgYW5kCitwcm9wZXJseSBhcHBvaW50ZWQuCisKK0FsbCBwcm9jZWVkaW5ncyBzaGFsbCBiZSBjb25kdWN0ZWQsIGluY2x1ZGluZyBhbGwgZG9jdW1lbnRzIHByZXNlbnRlZCBpbiBzdWNoCitwcm9jZWVkaW5ncywgaW4gdGhlIEVuZ2xpc2ggbGFuZ3VhZ2UuIFRoZSBFbmdsaXNoIGxhbmd1YWdlIHZlcnNpb24gb2YgdGhpcworQWdyZWVtZW50IHByZXZhaWxzIG92ZXIgYW55IG90aGVyIGxhbmd1YWdlIHZlcnNpb24uCisKK0pBUEFOOiBHZW5lcmFsIChTZWN0aW9uIDUpOiBUaGUgZm9sbG93aW5nIGlzIGluc2VydGVkIGFmdGVyIGl0ZW0gNToKKworQW55IGRvdWJ0cyBjb25jZXJuaW5nIHRoaXMgQWdyZWVtZW50IHdpbGwgYmUgaW5pdGlhbGx5IHJlc29sdmVkIGJldHdlZW4gdXMgaW4KK2dvb2QgZmFpdGggYW5kIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgcHJpbmNpcGxlIG9mIG11dHVhbCB0cnVzdC4KKworTUFMQVlTSUE6IExpbWl0YXRpb24gb2YgTGlhYmlsaXR5IChTZWN0aW9uIDQpOiBUaGUgd29yZCAiU1BFQ0lBTCIgaW4gaXRlbSAyIG9mCit0aGUgdGhpcmQgcGFyYWdyYXBoIGlzIGRlbGV0ZWQ6CisKK05FVyBaRUFMQU5EOiBObyBXYXJyYW50eSAoU2VjdGlvbiAzKTogVGhlIGZvbGxvd2luZyBpcyBhZGRlZDoKKworQWx0aG91Z2ggSUJNIHNwZWNpZmllcyB0aGF0IHRoZXJlIGFyZSBubyB3YXJyYW50aWVzLCAgWW91IG1heSBoYXZlIGNlcnRhaW4KK3JpZ2h0cyB1bmRlciB0aGUgQ29uc3VtZXIgR3VhcmFudGVlcyBBY3QgMTk5MyBvciBvdGhlciBsZWdpc2xhdGlvbiB3aGljaCBjYW5ub3QKK2JlIGV4Y2x1ZGVkIG9yIGxpbWl0ZWQuIFRoZSBDb25zdW1lciBHdWFyYW50ZWVzIEFjdCAxOTkzIHdpbGwgbm90IGFwcGx5IGluCityZXNwZWN0IG9mIGFueSBnb29kcyB3aGljaCBJQk0gcHJvdmlkZXMsIGlmIFlvdSByZXF1aXJlIHRoZSBnb29kcyBmb3IgdGhlCitwdXJwb3NlcyBvZiBhIGJ1c2luZXNzIGFzIGRlZmluZWQgaW4gdGhhdCBBY3QuCisKK0xpbWl0YXRpb24gb2YgTGlhYmlsaXR5IChTZWN0aW9uIDQpOiBUaGUgZm9sbG93aW5nIGlzIGFkZGVkOgorCitXaGVyZSBQcm9ncmFtcyBhcmUgbm90IGFjcXVpcmVkIGZvciB0aGUgcHVycG9zZXMgb2YgYSBidXNpbmVzcyBhcyBkZWZpbmVkIGluIHRoZQorQ29uc3VtZXIgR3VhcmFudGVlcyBBY3QgMTk5MywgdGhlIGxpbWl0YXRpb25zIGluIHRoaXMgU2VjdGlvbiBhcmUgc3ViamVjdCB0byB0aGUKK2xpbWl0YXRpb25zIGluIHRoYXQgQWN0LgorCitQRU9QTEUnUyBSRVBVQkxJQyBPRiBDSElOQTogQ2hhcmdlcyAoU2VjdGlvbiAyKTogVGhlIGZvbGxvd2luZyBpcyBhZGRlZDoKKworQWxsIGJhbmtpbmcgY2hhcmdlcyBpbmN1cnJlZCBpbiB0aGUgUGVvcGxlJ3MgUmVwdWJsaWMgb2YgQ2hpbmEgd2lsbCBiZSBib3JuZSBieQorWW91IGFuZCB0aG9zZSBpbmN1cnJlZCBvdXRzaWRlIHRoZSBQZW9wbGUncyBSZXB1YmxpYyBvZiBDaGluYSB3aWxsIGJlIGJvcm5lIGJ5CitJQk0uCisKK0dvdmVybmluZyBMYXcsIEp1cmlzZGljdGlvbiwgYW5kIEFyYml0cmF0aW9uIChTZWN0aW9uIDYpOiBUaGUgcGhyYXNlICJ0aGUgbGF3cworb2YgdGhlIGNvdW50cnkgaW4gd2hpY2ggWW91IGFjcXVpcmVkIHRoZSBQcm9ncmFtIGxpY2Vuc2UiIGluIHRoZSBHb3Zlcm5pbmcgTGF3CitzdWJzZWN0aW9uIGlzIHJlcGxhY2VkIGJ5IHRoZSBmb2xsb3dpbmc6CisKK3RoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBOZXcgWW9yaywgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhIChleGNlcHQgd2hlbiBsb2NhbAorbGF3IHJlcXVpcmVzIG90aGVyd2lzZSkKKworUEhJTElQUElORVM6IExpbWl0YXRpb24gb2YgTGlhYmlsaXR5IChTZWN0aW9uIDQpOiBUaGUgZm9sbG93aW5nIHJlcGxhY2VzIHRoZQordGVybXMgb2YgaXRlbSAyIG9mIHRoZSB0aGlyZCBwYXJhZ3JhcGg6CisKKzIuIHNwZWNpYWwgKGluY2x1ZGluZyBub21pbmFsIGFuZCBleGVtcGxhcnkgZGFtYWdlcyksIG1vcmFsLCBpbmNpZGVudGFsLCBvcgoraW5kaXJlY3QgZGFtYWdlcyBvciBmb3IgYW55IGVjb25vbWljIGNvbnNlcXVlbnRpYWwgZGFtYWdlczsgb3IKKworR292ZXJuaW5nIExhdywgSnVyaXNkaWN0aW9uLCBhbmQgQXJiaXRyYXRpb24gKFNlY3Rpb24gNik6IFRoZSBmb2xsb3dpbmcgaXMgYWRkZWQKK3RvIHRoaXMgc2VjdGlvbjoKKworQXJiaXRyYXRpb24KKworRGlzcHV0ZXMgYXJpc2luZyBvdXQgb2Ygb3IgaW4gY29ubmVjdGlvbiB3aXRoIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGZpbmFsbHkKK3NldHRsZWQgYnkgYXJiaXRyYXRpb24gd2hpY2ggc2hhbGwgYmUgaGVsZCBpbiBNZXRybyBNYW5pbGEsIFBoaWxpcHBpbmVzIGluCithY2NvcmRhbmNlIHdpdGggdGhlIGxhd3Mgb2YgdGhlIFBoaWxpcHBpbmVzIHRoZW4gaW4gZWZmZWN0LiBUaGUgYXJiaXRyYXRpb24KK2F3YXJkIHNoYWxsIGJlIGZpbmFsIGFuZCBiaW5kaW5nIGZvciB0aGUgcGFydGllcyB3aXRob3V0IGFwcGVhbCBhbmQgc2hhbGwgYmUgaW4KK3dyaXRpbmcgYW5kIHNldCBmb3J0aCB0aGUgZmluZGluZ3Mgb2YgZmFjdCBhbmQgdGhlIGNvbmNsdXNpb25zIG9mIGxhdy4KKworVGhlIG51bWJlciBvZiBhcmJpdHJhdG9ycyBzaGFsbCBiZSB0aHJlZSwgd2l0aCBlYWNoIHNpZGUgdG8gdGhlIGRpc3B1dGUgYmVpbmcKK2VudGl0bGVkIHRvIGFwcG9pbnQgb25lIGFyYml0cmF0b3IuIFRoZSB0d28gYXJiaXRyYXRvcnMgYXBwb2ludGVkIGJ5IHRoZSBwYXJ0aWVzCitzaGFsbCBhcHBvaW50IGEgdGhpcmQgYXJiaXRyYXRvciB3aG8gc2hhbGwgYWN0IGFzIGNoYWlybWFuIG9mIHRoZSBwcm9jZWVkaW5ncy4KK1ZhY2FuY2llcyBpbiB0aGUgcG9zdCBvZiBjaGFpcm1hbiBzaGFsbCBiZSBmaWxsZWQgYnkgdGhlIHByZXNpZGVudCBvZiB0aGUKK1BoaWxpcHBpbmUgRGlzcHV0ZSBSZXNvbHV0aW9uIENlbnRlciwgSW5jLiBPdGhlciB2YWNhbmNpZXMgc2hhbGwgYmUgZmlsbGVkIGJ5Cit0aGUgcmVzcGVjdGl2ZSBub21pbmF0aW5nIHBhcnR5LiBQcm9jZWVkaW5ncyBzaGFsbCBjb250aW51ZSBmcm9tIHRoZSBzdGFnZSB0aGV5Cit3ZXJlIGF0IHdoZW4gdGhlIHZhY2FuY3kgb2NjdXJyZWQuCisKK0lmIG9uZSBvZiB0aGUgcGFydGllcyByZWZ1c2VzIG9yIG90aGVyd2lzZSBmYWlscyB0byBhcHBvaW50IGFuIGFyYml0cmF0b3Igd2l0aGluCiszMCBkYXlzIG9mIHRoZSBkYXRlIHRoZSBvdGhlciBwYXJ0eSBhcHBvaW50cyBpdHMsIHRoZSBmaXJzdCBhcHBvaW50ZWQgYXJiaXRyYXRvcgorc2hhbGwgYmUgdGhlIHNvbGUgYXJiaXRyYXRvciwgcHJvdmlkZWQgdGhhdCB0aGUgYXJiaXRyYXRvciB3YXMgdmFsaWRseSBhbmQKK3Byb3Blcmx5IGFwcG9pbnRlZC4KKworQWxsIHByb2NlZWRpbmdzIHNoYWxsIGJlIGNvbmR1Y3RlZCwgaW5jbHVkaW5nIGFsbCBkb2N1bWVudHMgcHJlc2VudGVkIGluIHN1Y2gKK3Byb2NlZWRpbmdzLCBpbiB0aGUgRW5nbGlzaCBsYW5ndWFnZS4gVGhlIEVuZ2xpc2ggbGFuZ3VhZ2UgdmVyc2lvbiBvZiB0aGlzCitBZ3JlZW1lbnQgcHJldmFpbHMgb3ZlciBhbnkgb3RoZXIgbGFuZ3VhZ2UgdmVyc2lvbi4KKworU0lOR0FQT1JFOiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eSAoU2VjdGlvbiA0KTogVGhlIHdvcmRzICJTUEVDSUFMIiBhbmQKKyJFQ09OT01JQyIgYXJlIGRlbGV0ZWQgZnJvbSBpdGVtIDIgb2YgdGhlIHRoaXJkIHBhcmFncmFwaC4KKworR2VuZXJhbCAoU2VjdGlvbiA1KTogVGhlIGZvbGxvd2luZyByZXBsYWNlcyB0aGUgdGVybXMgb2YgaXRlbSA3OgorCitTdWJqZWN0IHRvIHRoZSByaWdodHMgcHJvdmlkZWQgdG8gSUJNJ3Mgc3VwcGxpZXJzIGFuZCBQcm9ncmFtIGRldmVsb3BlcnMgYXMKK3Byb3ZpZGVkIGluIFNlY3Rpb24gNCBhYm92ZSAoTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkpLCBhIHBlcnNvbiB3aG8gaXMgbm90IGEKK3BhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHNoYWxsIGhhdmUgbm8gcmlnaHQgdW5kZXIgdGhlIENvbnRyYWN0cyAoUmlnaHQgb2YgVGhpcmQKK1BhcnRpZXMpIEFjdCB0byBlbmZvcmNlIGFueSBvZiBpdHMgdGVybXMuCisKK0VVUk9QRSwgTUlERExFIEVBU1QsIEFGUklDQSAoRU1FQSkKKworTm8gV2FycmFudHkgKFNlY3Rpb24gMyk6IEluIHRoZSBFdXJvcGVhbiBVbmlvbiwgdGhlIGZvbGxvd2luZyBpcyBhZGRlZCBhdCB0aGUKK2JlZ2lubmluZyBvZiB0aGlzIHNlY3Rpb246CisKK0luIHRoZSBFdXJvcGVhbiBVbmlvbiwgY29uc3VtZXJzIGhhdmUgbGVnYWwgcmlnaHRzIHVuZGVyIGFwcGxpY2FibGUgbmF0aW9uYWwKK2xlZ2lzbGF0aW9uIGdvdmVybmluZyB0aGUgc2FsZSBvZiBjb25zdW1lciBnb29kcy4gU3VjaCByaWdodHMgYXJlIG5vdCBhZmZlY3RlZAorYnkgdGhlICBwcm92aXNpb25zIG9mIHRoaXMgU2VjdGlvbiAzLgorCitMaW1pdGF0aW9uIG9mIExpYWJpbGl0eSAoU2VjdGlvbiA0KTogSW4gQXVzdHJpYSwgRGVubWFyaywgRmlubGFuZCwgR3JlZWNlLAorSXRhbHksIE5ldGhlcmxhbmRzLCBOb3J3YXksIFBvcnR1Z2FsLCBTcGFpbiwgU3dlZGVuIGFuZCBTd2l0emVybGFuZCwgdGhlCitmb2xsb3dpbmcgcmVwbGFjZXMgdGhlIHRlcm1zIG9mIHRoaXMgc2VjdGlvbiBpbiBpdHMgZW50aXJldHk6CisKK0V4Y2VwdCBhcyBvdGhlcndpc2UgcHJvdmlkZWQgYnkgbWFuZGF0b3J5IGxhdzoKKworMS4gSUJNJ3MgbGlhYmlsaXR5IGZvciBhbnkgZGFtYWdlcyBhbmQgbG9zc2VzIHRoYXQgbWF5IGFyaXNlIGFzIGEgY29uc2VxdWVuY2Ugb2YKK3RoZSBmdWxmaWxsbWVudCBvZiBpdHMgb2JsaWdhdGlvbnMgdW5kZXIgb3IgaW4gY29ubmVjdGlvbiB3aXRoIHRoaXMgYWdyZWVtZW50IG9yCitkdWUgdG8gYW55IG90aGVyIGNhdXNlIHJlbGF0ZWQgdG8gdGhpcyBhZ3JlZW1lbnQgaXMgbGltaXRlZCB0byB0aGUgY29tcGVuc2F0aW9uCitvZiBvbmx5IHRob3NlIGRhbWFnZXMgYW5kIGxvc3NlcyBwcm92ZWQgYW5kIGFjdHVhbGx5IGFyaXNpbmcgYXMgYW4gaW1tZWRpYXRlIGFuZAorZGlyZWN0IGNvbnNlcXVlbmNlIG9mIHRoZSBub24tZnVsZmlsbG1lbnQgb2Ygc3VjaCBvYmxpZ2F0aW9ucyAoaWYgSUJNIGlzIGF0CitmYXVsdCkgb3Igb2Ygc3VjaCBjYXVzZSwgZm9yIGEgbWF4aW11bSBhbW91bnQgZXF1YWwgdG8gdGhlIGNoYXJnZXMgWW91IHBhaWQgZm9yCit0aGUgUHJvZ3JhbS4KKworVGhlIGFib3ZlIGxpbWl0YXRpb24gc2hhbGwgbm90IGFwcGx5IHRvIGRhbWFnZXMgZm9yIGJvZGlseSBpbmp1cmllcyAoaW5jbHVkaW5nCitkZWF0aCkgYW5kIGRhbWFnZXMgdG8gcmVhbCBwcm9wZXJ0eSBhbmQgdGFuZ2libGUgcGVyc29uYWwgcHJvcGVydHkgZm9yIHdoaWNoIElCTQoraXMgbGVnYWxseSBsaWFibGUuCisKKzIuIFVOREVSIE5PIENJUkNVTVNUQU5DRVMgSVMgSUJNLCBPUiBBTlkgT0YgSVRTIFBST0dSQU0gREVWRUxPUEVSUywgTElBQkxFIEZPUgorQU5ZIE9GIFRIRSBGT0xMT1dJTkcsIEVWRU4gSUYgSU5GT1JNRUQgT0YgVEhFSVIgUE9TU0lCSUxJVFk6IDEpIExPU1MgT0YsIE9SCitEQU1BR0UgVE8sIERBVEE7IDIpIElOQ0lERU5UQUwgT1IgSU5ESVJFQ1QgREFNQUdFUywgT1IgRk9SIEFOWSBFQ09OT01JQworQ09OU0VRVUVOVElBTCBEQU1BR0VTOyAzKSBMT1NUIFBST0ZJVFMsIEVWRU4gSUYgVEhFWSBBUklTRSBBUyBBTiBJTU1FRElBVEUKK0NPTlNFUVVFTkNFIE9GIFRIRSBFVkVOVCBUSEFUIEdFTkVSQVRFRCBUSEUgREFNQUdFUzsgT1IgNCkgTE9TUyBPRiBCVVNJTkVTUywKK1JFVkVOVUUsIEdPT0RXSUxMLCBPUiBBTlRJQ0lQQVRFRCBTQVZJTkdTLiAKKworMy4gVGhlIGxpbWl0YXRpb24gYW5kIGV4Y2x1c2lvbiBvZiBsaWFiaWxpdHkgaGVyZWluIGFncmVlZCBhcHBsaWVzIG5vdCBvbmx5IHRvCit0aGUgYWN0aXZpdGllcyBwZXJmb3JtZWQgYnkgSUJNIGJ1dCBhbHNvIHRvIHRoZSBhY3Rpdml0aWVzIHBlcmZvcm1lZCBieSBpdHMKK3N1cHBsaWVycyBhbmQgUHJvZ3JhbSBkZXZlbG9wZXJzLCBhbmQgcmVwcmVzZW50cyB0aGUgbWF4aW11bSBhbW91bnQgZm9yIHdoaWNoCitJQk0gYXMgd2VsbCBhcyBpdHMgc3VwcGxpZXJzIGFuZCBQcm9ncmFtIGRldmVsb3BlcnMsIGFyZSBjb2xsZWN0aXZlbHkKK3Jlc3BvbnNpYmxlLiAKKworTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkgKFNlY3Rpb24gNCk6IEluIEZyYW5jZSBhbmQgQmVsZ2l1bSwgdGhlIGZvbGxvd2luZworcmVwbGFjZXMgdGhlIHRlcm1zIG9mIHRoaXMgc2VjdGlvbiBpbiBpdHMgZW50aXJldHk6IAorCitFeGNlcHQgYXMgb3RoZXJ3aXNlIHByb3ZpZGVkIGJ5IG1hbmRhdG9yeSBsYXc6CisKKzEuIElCTSdzIGxpYWJpbGl0eSBmb3IgYW55IGRhbWFnZXMgYW5kIGxvc3NlcyB0aGF0IG1heSBhcmlzZSBhcyBhIGNvbnNlcXVlbmNlIG9mCit0aGUgZnVsZmlsbG1lbnQgb2YgaXRzIG9ibGlnYXRpb25zIHVuZGVyIG9yIGluIGNvbm5lY3Rpb24gd2l0aCB0aGlzIGFncmVlbWVudCBpcworbGltaXRlZCB0byB0aGUgY29tcGVuc2F0aW9uIG9mIG9ubHkgdGhvc2UgZGFtYWdlcyBhbmQgbG9zc2VzIHByb3ZlZCBhbmQgYWN0dWFsbHkKK2FyaXNpbmcgYXMgYW4gaW1tZWRpYXRlIGFuZCBkaXJlY3QgY29uc2VxdWVuY2Ugb2YgdGhlIG5vbi1mdWxmaWxsbWVudCBvZiBzdWNoCitvYmxpZ2F0aW9ucyAoaWYgSUJNIGlzIGF0IGZhdWx0KSwgZm9yIGEgbWF4aW11bSBhbW91bnQgZXF1YWwgdG8gdGhlIGNoYXJnZXMgWW91CitwYWlkIGZvciB0aGUgUHJvZ3JhbSB0aGF0IGhhcyBjYXVzZWQgdGhlIGRhbWFnZXMuCisKK1RoZSBhYm92ZSBsaW1pdGF0aW9uIHNoYWxsIG5vdCBhcHBseSB0byBkYW1hZ2VzIGZvciBib2RpbHkgaW5qdXJpZXMgKGluY2x1ZGluZworZGVhdGgpIGFuZCBkYW1hZ2VzIHRvIHJlYWwgcHJvcGVydHkgYW5kIHRhbmdpYmxlIHBlcnNvbmFsIHByb3BlcnR5IGZvciB3aGljaCBJQk0KK2lzIGxlZ2FsbHkgbGlhYmxlLgorCisyLiBVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIElTIElCTSwgT1IgQU5ZIE9GIElUUyBQUk9HUkFNIERFVkVMT1BFUlMsIExJQUJMRSBGT1IKK0FOWSBPRiBUSEUgRk9MTE9XSU5HLCBFVkVOIElGIElORk9STUVEIE9GIFRIRUlSIFBPU1NJQklMSVRZOiAxKSBMT1NTIE9GLCBPUgorREFNQUdFIFRPLCBEQVRBOyAyKSBJTkNJREVOVEFMIE9SIElORElSRUNUIERBTUFHRVMsIE9SIEZPUiBBTlkgRUNPTk9NSUMKK0NPTlNFUVVFTlRJQUwgREFNQUdFUzsgMykgTE9TVCBQUk9GSVRTLCBFVkVOIElGIFRIRVkgQVJJU0UgQVMgQU4gSU1NRURJQVRFCitDT05TRVFVRU5DRSBPRiBUSEUgRVZFTlQgVEhBVCBHRU5FUkFURUQgVEhFIERBTUFHRVM7IE9SIDQpIExPU1MgT0YgQlVTSU5FU1MsCitSRVZFTlVFLCBHT09EV0lMTCwgT1IgQU5USUNJUEFURUQgU0FWSU5HUy4gCisKKzMuIFRoZSBsaW1pdGF0aW9uIGFuZCBleGNsdXNpb24gb2YgbGlhYmlsaXR5IGhlcmVpbiBhZ3JlZWQgYXBwbGllcyBub3Qgb25seSB0bwordGhlIGFjdGl2aXRpZXMgcGVyZm9ybWVkIGJ5IElCTSBidXQgYWxzbyB0byB0aGUgYWN0aXZpdGllcyBwZXJmb3JtZWQgYnkgaXRzCitzdXBwbGllcnMgYW5kIFByb2dyYW0gZGV2ZWxvcGVycywgYW5kIHJlcHJlc2VudHMgdGhlIG1heGltdW0gYW1vdW50IGZvciB3aGljaAorSUJNIGFzIHdlbGwgYXMgaXRzIHN1cHBsaWVycyBhbmQgUHJvZ3JhbSBkZXZlbG9wZXJzLCBhcmUgY29sbGVjdGl2ZWx5CityZXNwb25zaWJsZS4KKworR292ZXJuaW5nIExhdywgSnVyaXNkaWN0aW9uLCBhbmQgQXJiaXRyYXRpb24gKFNlY3Rpb24gNikKKworR292ZXJuaW5nIExhdworCitUaGUgcGhyYXNlICJ0aGUgbGF3cyBvZiB0aGUgY291bnRyeSBpbiB3aGljaCBZb3UgYWNxdWlyZWQgdGhlIFByb2dyYW0gbGljZW5zZSIKK2lzIHJlcGxhY2VkIGJ5OiAKKzEpICJ0aGUgbGF3cyBvZiBBdXN0cmlhIiBpbiBBbGJhbmlhLCBBcm1lbmlhLCBBemVyYmFpamFuLCBCZWxhcnVzLAorQm9zbmlhLUhlcnplZ292aW5hLCBCdWxnYXJpYSwgQ3JvYXRpYSwgR2VvcmdpYSwgSHVuZ2FyeSwgS2F6YWtoc3RhbiwgS3lyZ3l6c3RhbiwKK0ZZUiBNYWNlZG9uaWEsIE1vbGRhdmlhLCBQb2xhbmQsIFJvbWFuaWEsIFJ1c3NpYSwgU2xvdmFraWEsIFNsb3ZlbmlhLAorVGFqaWtpc3RhbiwgVHVya21lbmlzdGFuLCBVa3JhaW5lLCBVemJla2lzdGFuLCBhbmQgRlIgWXVnb3NsYXZpYTsgCisyKSAidGhlIGxhd3Mgb2YgRnJhbmNlIiBpbiBBbGdlcmlhLCBCZW5pbiwgQnVya2luYSBGYXNvLCBDYW1lcm9vbiwgQ2FwZSBWZXJkZSwKK0NlbnRyYWwgQWZyaWNhbiBSZXB1YmxpYywgQ2hhZCwgQ29tb3JvcywgQ29uZ28gUmVwdWJsaWMsIERqaWJvdXRpLCBEZW1vY3JhdGljCitSZXB1YmxpYyBvZiBDb25nbywgRXF1YXRvcmlhbCBHdWluZWEsIEZyZW5jaCBHdWlhbmEsIEZyZW5jaCBQb2x5bmVzaWEsIEdhYm9uLAorR2FtYmlhLCBHdWluZWEsIEd1aW5lYS1CaXNzYXUsIEl2b3J5IENvYXN0LCBMZWJhbm9uLCBNYWRhZ2FzY2FyLCBNYWxpLAorTWF1cml0YW5pYSwgTWF1cml0aXVzLCBNYXlvdHRlLCBNb3JvY2NvLCBOZXcgQ2FsZWRvbmlhLCBOaWdlciwgUmV1bmlvbiwgU2VuZWdhbCwKK1NleWNoZWxsZXMsIFRvZ28sIFR1bmlzaWEsIFZhbnVhdHUsIGFuZCBXYWxsaXMgJiBGdXR1bmE7IAorMykgInRoZSBsYXdzIG9mIEZpbmxhbmQiIGluIEVzdG9uaWEsIExhdHZpYSwgYW5kIExpdGh1YW5pYTsgCis0KSAidGhlIGxhd3Mgb2YgRW5nbGFuZCIgaW4gQW5nb2xhLCBCYWhyYWluLCBCb3Rzd2FuYSwgQnVydW5kaSwgRWd5cHQsIEVyaXRyZWEsCitFdGhpb3BpYSwgR2hhbmEsIEpvcmRhbiwgS2VueWEsIEt1d2FpdCwgTGliZXJpYSwgTWFsYXdpLCBNYWx0YSwgTW96YW1iaXF1ZSwKK05pZ2VyaWEsIE9tYW4sIFBha2lzdGFuLCBRYXRhciwgUndhbmRhLCBTYW8gVG9tZSwgU2F1ZGkgQXJhYmlhLCBTaWVycmEgTGVvbmUsCitTb21hbGlhLCBUYW56YW5pYSwgVWdhbmRhLCBVbml0ZWQgQXJhYiBFbWlyYXRlcywgdGhlIFVuaXRlZCBLaW5nZG9tLCBXZXN0CitCYW5rL0dhemEsIFllbWVuLCBaYW1iaWEsIGFuZCBaaW1iYWJ3ZTsgYW5kIAorNSkgInRoZSBsYXdzIG9mIFNvdXRoIEFmcmljYSIgaW4gU291dGggQWZyaWNhLCBOYW1pYmlhLCBMZXNvdGhvIGFuZCBTd2F6aWxhbmQuCisKK0p1cmlzZGljdGlvbgorCitUaGUgZm9sbG93aW5nIGV4Y2VwdGlvbnMgYXJlIGFkZGVkIHRvIHRoaXMgc2VjdGlvbjoKKworMSkgSW4gQXVzdHJpYSB0aGUgY2hvaWNlIG9mIGp1cmlzZGljdGlvbiBmb3IgYWxsIGRpc3B1dGVzIGFyaXNpbmcgb3V0IG9mIHRoaXMKK0FncmVlbWVudCBhbmQgcmVsYXRpbmcgdGhlcmV0bywgaW5jbHVkaW5nIGl0cyBleGlzdGVuY2UsIHdpbGwgYmUgdGhlIGNvbXBldGVudAorY291cnQgb2YgbGF3IGluIFZpZW5uYSwgQXVzdHJpYSAoSW5uZXItQ2l0eSk7IAorMikgaW4gQW5nb2xhLCBCYWhyYWluLCBCb3Rzd2FuYSwgQnVydW5kaSwgRWd5cHQsIEVyaXRyZWEsIEV0aGlvcGlhLCBHaGFuYSwKK0pvcmRhbiwgS2VueWEsIEt1d2FpdCwgTGliZXJpYSwgTWFsYXdpLCBNYWx0YSwgTW96YW1iaXF1ZSwgTmlnZXJpYSwgT21hbiwKK1Bha2lzdGFuLCBRYXRhciwgUndhbmRhLCBTYW8gVG9tZSwgU2F1ZGkgQXJhYmlhLCBTaWVycmEgTGVvbmUsIFNvbWFsaWEsCitUYW56YW5pYSwgVWdhbmRhLCBVbml0ZWQgQXJhYiBFbWlyYXRlcywgV2VzdCBCYW5rL0dhemEsIFllbWVuLCBaYW1iaWEsIGFuZAorWmltYmFid2UgYWxsIGRpc3B1dGVzIGFyaXNpbmcgb3V0IG9mIHRoaXMgQWdyZWVtZW50IG9yIHJlbGF0ZWQgdG8gaXRzIGV4ZWN1dGlvbiwKK2luY2x1ZGluZyBzdW1tYXJ5IHByb2NlZWRpbmdzLCB3aWxsIGJlIHN1Ym1pdHRlZCB0byB0aGUgZXhjbHVzaXZlIGp1cmlzZGljdGlvbgorb2YgdGhlIEVuZ2xpc2ggY291cnRzOyAKKzMpIGluIEJlbGdpdW0gYW5kIEx1eGVtYm91cmcsIGZvciBhbGwgZGlzcHV0ZXMgYXJpc2luZyBvdXQgb2YgdGhpcyBBZ3JlZW1lbnQgb3IKK3JlbGF0ZWQgdG8gaXRzIGludGVycHJldGF0aW9uIG9yIGl0cyBleGVjdXRpb24sIG9ubHkgdGhlIGxhdyBhbmQgdGhlIGNvdXJ0cyBvZgordGhlIGNhcGl0YWwgb2YgdGhlIGNvdW50cnkgaW4gd2hpY2ggWW91ciByZWdpc3RlcmVkIG9mZmljZSBhbmQvb3IgY29tbWVyY2lhbAorb2ZmaWNlIGlzIGxvY2F0ZWQgYXJlIGNvbXBldGVudDsgCis0KSBpbiBGcmFuY2UsIEFsZ2VyaWEsIEJlbmluLCBCdXJraW5hIEZhc28sIENhbWVyb29uLCBDYXBlIFZlcmRlLCBDZW50cmFsCitBZnJpY2FuIFJlcHVibGljLCBDaGFkLCBDb21vcm9zLCBDb25nbyBSZXB1YmxpYywgRGppYm91dGksIERlbW9jcmF0aWMgUmVwdWJsaWMKK29mIENvbmdvLCBFcXVhdG9yaWFsIEd1aW5lYSwgRnJlbmNoIEd1aWFuYSwgRnJlbmNoIFBvbHluZXNpYSwgR2Fib24sIEdhbWJpYSwKK0d1aW5lYSwgR3VpbmVhLUJpc3NhdSwgSXZvcnkgQ29hc3QsIExlYmFub24sIE1hZGFnYXNjYXIsIE1hbGksIE1hdXJpdGFuaWEsCitNYXVyaXRpdXMsIE1heW90dGUsIE1vcm9jY28sIE5ldyBDYWxlZG9uaWEsIE5pZ2VyLCBSZXVuaW9uLCBTZW5lZ2FsLCBTZXljaGVsbGVzLAorVG9nbywgVHVuaXNpYSwgVmFudWF0dSwgYW5kIFdhbGxpcyAmIEZ1dHVuYSBhbGwgZGlzcHV0ZXMgYXJpc2luZyBvdXQgb2YgdGhpcworQWdyZWVtZW50IG9yIHJlbGF0ZWQgdG8gaXRzIHZpb2xhdGlvbiBvciBleGVjdXRpb24sIGluY2x1ZGluZyBzdW1tYXJ5Citwcm9jZWVkaW5ncywgd2lsbCBiZSBzZXR0bGVkIGV4Y2x1c2l2ZWx5IGJ5IHRoZSBDb21tZXJjaWFsIENvdXJ0IG9mIFBhcmlzOyAKKzUpIGluIFJ1c3NpYSwgYWxsIGRpc3B1dGVzIGFyaXNpbmcgb3V0IG9mIG9yIGluIHJlbGF0aW9uIHRvIHRoZSBpbnRlcnByZXRhdGlvbiwKK3RoZSB2aW9sYXRpb24sIHRoZSB0ZXJtaW5hdGlvbiwgdGhlIG51bGxpdHkgb2YgdGhlIGV4ZWN1dGlvbiBvZiB0aGlzIEFncmVlbWVudAorc2hhbGwgYmUgc2V0dGxlZCBieSBBcmJpdHJhdGlvbiBDb3VydCBvZiBNb3Njb3c7IAorNikgaW4gU291dGggQWZyaWNhLCBOYW1pYmlhLCBMZXNvdGhvIGFuZCBTd2F6aWxhbmQsIGJvdGggb2YgdXMgYWdyZWUgdG8gc3VibWl0CithbGwgZGlzcHV0ZXMgcmVsYXRpbmcgdG8gdGhpcyBBZ3JlZW1lbnQgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgSGlnaCBDb3VydCBpbgorSm9oYW5uZXNidXJnOyAKKzcpIGluIFR1cmtleSBhbGwgZGlzcHV0ZXMgYXJpc2luZyBvdXQgb2Ygb3IgaW4gY29ubmVjdGlvbiB3aXRoIHRoaXMgQWdyZWVtZW50CitzaGFsbCBiZSByZXNvbHZlZCBieSB0aGUgSXN0YW5idWwgQ2VudHJhbCAoU3VsdGFuYWhtZXQpIENvdXJ0cyBhbmQgRXhlY3V0aW9uCitEaXJlY3RvcmF0ZXMgb2YgSXN0YW5idWwsIHRoZSBSZXB1YmxpYyBvZiBUdXJrZXk7IAorOCkgaW4gZWFjaCBvZiB0aGUgZm9sbG93aW5nIHNwZWNpZmllZCBjb3VudHJpZXMsIGFueSBsZWdhbCBjbGFpbSBhcmlzaW5nIG91dCBvZgordGhpcyBBZ3JlZW1lbnQgd2lsbCBiZSBicm91Z2h0IGJlZm9yZSwgYW5kIHNldHRsZWQgZXhjbHVzaXZlbHkgYnksIHRoZSBjb21wZXRlbnQKK2NvdXJ0IG9mIGEpIEF0aGVucyBmb3IgR3JlZWNlLCBiKSBUZWwgQXZpdi1KYWZmYSBmb3IgSXNyYWVsLCBjKSBNaWxhbiBmb3IgSXRhbHksCitkKSBMaXNib24gZm9yIFBvcnR1Z2FsLCBhbmQgZSkgTWFkcmlkIGZvciBTcGFpbjsgYW5kIAorOSkgaW4gdGhlIFVuaXRlZCBLaW5nZG9tLCBib3RoIG9mIHVzIGFncmVlIHRvIHN1Ym1pdCBhbGwgZGlzcHV0ZXMgcmVsYXRpbmcgdG8KK3RoaXMgQWdyZWVtZW50IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIEVuZ2xpc2ggY291cnRzLiAKKworQXJiaXRyYXRpb24gCisKK0luIEFsYmFuaWEsIEFybWVuaWEsIEF6ZXJiYWlqYW4sIEJlbGFydXMsIEJvc25pYS1IZXJ6ZWdvdmluYSwgQnVsZ2FyaWEsIENyb2F0aWEsCitHZW9yZ2lhLCBIdW5nYXJ5LCBLYXpha2hzdGFuLCBLeXJneXpzdGFuLCBGWVIgTWFjZWRvbmlhLCBNb2xkYXZpYSwgUG9sYW5kLAorUm9tYW5pYSwgUnVzc2lhLCBTbG92YWtpYSwgU2xvdmVuaWEsIFRhamlraXN0YW4sIFR1cmttZW5pc3RhbiwgVWtyYWluZSwKK1V6YmVraXN0YW4sIGFuZCBGUiBZdWdvc2xhdmlhIGFsbCBkaXNwdXRlcyBhcmlzaW5nIG91dCBvZiB0aGlzIEFncmVlbWVudCBvcgorcmVsYXRlZCB0byBpdHMgdmlvbGF0aW9uLCB0ZXJtaW5hdGlvbiBvciBudWxsaXR5IHdpbGwgYmUgZmluYWxseSBzZXR0bGVkIHVuZGVyCit0aGUgUnVsZXMgb2YgQXJiaXRyYXRpb24gYW5kIENvbmNpbGlhdGlvbiBvZiB0aGUgSW50ZXJuYXRpb25hbCBBcmJpdHJhbCBDZW50ZXIKK29mIHRoZSBGZWRlcmFsIEVjb25vbWljIENoYW1iZXIgaW4gVmllbm5hIChWaWVubmEgUnVsZXMpIGJ5IHRocmVlIGFyYml0cmF0b3JzCithcHBvaW50ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZXNlIHJ1bGVzLiAKK1RoZSBhcmJpdHJhdGlvbiB3aWxsIGJlIGhlbGQgaW4gVmllbm5hLCBBdXN0cmlhLCBhbmQgdGhlIG9mZmljaWFsIGxhbmd1YWdlIG9mCit0aGUgcHJvY2VlZGluZ3Mgd2lsbCBiZSBFbmdsaXNoLiBUaGUgZGVjaXNpb24gb2YgdGhlIGFyYml0cmF0b3JzIHdpbGwgYmUgZmluYWwKK2FuZCBiaW5kaW5nIHVwb24gYm90aCBwYXJ0aWVzLiBUaGVyZWZvcmUsIHB1cnN1YW50IHRvIHBhcmFncmFwaCA1OTggKDIpIG9mIHRoZQorQXVzdHJpYW4gQ29kZSBvZiBDaXZpbCBQcm9jZWR1cmUsIHRoZSBwYXJ0aWVzIGV4cHJlc3NseSB3YWl2ZSB0aGUgYXBwbGljYXRpb24gb2YKK3BhcmFncmFwaCA1OTUgKDEpIGZpZ3VyZSA3IG9mIHRoZSBDb2RlLiBJQk0gbWF5LCBob3dldmVyLCBpbnN0aXR1dGUgcHJvY2VlZGluZ3MKK2luIGEgY29tcGV0ZW50IGNvdXJ0IGluIHRoZSBjb3VudHJ5IG9mIGluc3RhbGxhdGlvbi4KKworSW4gRXN0b25pYSwgTGF0dmlhIGFuZCBMaXRodWFuaWEgYWxsIGRpc3B1dGVzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB3aXRoIHRoaXMKK0FncmVlbWVudCB3aWxsIGJlIGZpbmFsbHkgc2V0dGxlZCBpbiBhcmJpdHJhdGlvbiB0aGF0IHdpbGwgYmUgaGVsZCBpbiBIZWxzaW5raSwKK0ZpbmxhbmQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBhcmJpdHJhdGlvbiBsYXdzIG9mIEZpbmxhbmQgdGhlbiBpbiBlZmZlY3QuIEVhY2gKK3BhcnR5IHdpbGwgYXBwb2ludCBvbmUgYXJiaXRyYXRvci4gVGhlIGFyYml0cmF0b3JzIHdpbGwgdGhlbiBqb2ludGx5IGFwcG9pbnQgdGhlCitjaGFpcm1hbi4gSWYgYXJiaXRyYXRvcnMgY2Fubm90IGFncmVlIG9uIHRoZSBjaGFpcm1hbiwgdGhlbiB0aGUgQ2VudHJhbCBDaGFtYmVyCitvZiBDb21tZXJjZSBpbiBIZWxzaW5raSB3aWxsIGFwcG9pbnQgdGhlIGNoYWlybWFuLgorCitBVVNUUklBOiBObyBXYXJyYW50eSAoU2VjdGlvbiAzKTogVGhlIHRlcm1zIG9mIHRoaXMgc2VjdGlvbiBhcmUgY29tcGxldGVseQorcmVwbGFjZWQgYnkgdGhlIGZvbGxvd2luZzoKKworVGhlIGZvbGxvd2luZyBsaW1pdGVkIHdhcnJhbnR5IGFwcGxpZXMgaWYgWW91IGhhdmUgcGFpZCBhIGNoYXJnZSB0byBvYnRhaW4gdGhlCitQcm9ncmFtOgorCitUaGUgd2FycmFudHkgcGVyaW9kIGlzIHR3ZWx2ZSBtb250aHMgZnJvbSB0aGUgZGF0ZSBvZiBkZWxpdmVyeS4gVGhlIGxpbWl0YXRpb24KK3BlcmlvZCBmb3IgY29uc3VtZXJzIGluIGFjdGlvbiBmb3IgYnJlYWNoIG9mIHdhcnJhbnR5IGlzIHRoZSBzdGF0dXRvcnkgcGVyaW9kIGFzCithIG1pbmltdW0uCisKK1RoZSB3YXJyYW50eSBmb3IgYW4gSUJNIFByb2dyYW0gY292ZXJzIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBQcm9ncmFtIGZvciBpdHMKK25vcm1hbCB1c2UgYW5kIHRoZSBQcm9ncmFtJ3MgY29uZm9ybWl0eSB0byBpdHMgc3BlY2lmaWNhdGlvbnMuCisKK0lCTSB3YXJyYW50cyB0aGF0IHdoZW4gdGhlIFByb2dyYW0gaXMgdXNlZCBpbiB0aGUgc3BlY2lmaWVkIG9wZXJhdGluZworZW52aXJvbm1lbnQgaXQgd2lsbCBjb25mb3JtIHRvIGl0cyBzcGVjaWZpY2F0aW9ucy4gSUJNIGRvZXMgbm90IHdhcnJhbnQKK3VuaW50ZXJydXB0ZWQgb3IgZXJyb3ItZnJlZSBvcGVyYXRpb24gb2YgdGhlIFByb2dyYW0gb3IgdGhhdCBJQk0gd2lsbCBjb3JyZWN0CithbGwgUHJvZ3JhbSBkZWZlY3RzLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciB0aGUgcmVzdWx0cyBvYnRhaW5lZCBmcm9tIHRoZSB1c2UKK29mIHRoZSBQcm9ncmFtLgorCitUaGUgd2FycmFudHkgYXBwbGllcyBvbmx5IHRvIHRoZSB1bm1vZGlmaWVkIHBvcnRpb24gb2YgdGhlIFByb2dyYW0uCisKK0lmIHRoZSBQcm9ncmFtIGRvZXMgbm90IGZ1bmN0aW9uIGFzIHdhcnJhbnRlZCBkdXJpbmcgdGhlIHdhcnJhbnR5IHBlcmlvZCBhbmQgdGhlCitwcm9ibGVtIGNhbm5vdCBiZSByZXNvbHZlZCB3aXRoIGluZm9ybWF0aW9uIGF2YWlsYWJsZS4gWW91IG1heSByZXR1cm4gdGhlCitQcm9ncmFtIHRvIHRoZSBwYXJ0eSBmcm9tIHdob20gWW91IGFjcXVpcmVkIGl0IGFuZCByZWNlaXZlIGEgcmVmdW5kIGluIHRoZQorYW1vdW50IFlvdSBwYWlkLiBJZiBZb3UgZG93bmxvYWRlZCB0aGUgUHJvZ3JhbSwgWW91IG1heSBjb250YWN0IHRoZSBwYXJ0eSBmcm9tCit3aG9tIFlvdSBhY3F1aXJlZCBpdCB0byBvYnRhaW4gdGhlIHJlZnVuZC4KKworVGhpcyBpcyBvdXIgc29sZSBvYmxpZ2F0aW9uIHRvIFlvdSwgZXhjZXB0IGFzIG90aGVyd2lzZSByZXF1aXJlZCBieSBhcHBsaWNhYmxlCitzdGF0dXRvcnkgbGF3LgorCitHZW5lcmFsIChTZWN0aW9uIDUpOiBUaGUgZm9sbG93aW5nIGlzIGFkZGVkIHRvIGl0ZW0gNDoKKworRm9yIHB1cnBvc2VzIG9mIHRoaXMgY2xhdXNlLCBjb250YWN0IGluZm9ybWF0aW9uIHdpbGwgYWxzbyBpbmNsdWRlIGluZm9ybWF0aW9uCithYm91dCBZb3UgYXMgYSBsZWdhbCBlbnRpdHksIGZvciBleGFtcGxlIHJldmVudWUgZGF0YSBhbmQgb3RoZXIgdHJhbnNhY3Rpb25hbAoraW5mb3JtYXRpb24uCisKK0dFUk1BTlk6IE5vIFdhcnJhbnR5IChTZWN0aW9uIDMpOiBUaGUgc2FtZSBjaGFuZ2VzIGFwcGx5IGFzIHRob3NlIGluIE5vIFdhcnJhbnR5CisoU2VjdGlvbiAzKSB1bmRlciBBdXN0cmlhIGFib3ZlLgorCitMaW1pdGF0aW9uIG9mIExpYWJpbGl0eSAoU2VjdGlvbiA0KTogVGhlIGZvbGxvd2luZyBwYXJhZ3JhcGggaXMgYWRkZWQgdG8gdGhpcworU2VjdGlvbjoKKworVGhlIGxpbWl0YXRpb25zIGFuZCBleGNsdXNpb25zIHNwZWNpZmllZCBpbiB0aGlzIFNlY3Rpb24gd2lsbCBub3QgYXBwbHkgdG8KK2RhbWFnZXMgY2F1c2VkIGJ5IElCTSBpbnRlbnRpb25hbGx5IG9yIGJ5IGdyb3NzIG5lZ2xpZ2VuY2UuCisKK0dlbmVyYWwgKFNlY3Rpb24gNSk6IFRoZSBmb2xsb3dpbmcgcmVwbGFjZXMgdGhlIHRlcm1zIG9mIGl0ZW0gNToKKworQW55IGNsYWltcyByZXN1bHRpbmcgZnJvbSB0aGlzIEFncmVlbWVudCBhcmUgc3ViamVjdCB0byBhIHN0YXR1dGUgb2YgbGltaXRhdGlvbgorb2YgdGhyZWUgeWVhcnMsIGV4Y2VwdCBhcyBzdGF0ZWQgaW4gU2VjdGlvbiAzIChObyBXYXJyYW50eSkgb2YgdGhpcyBBZ3JlZW1lbnQuCisKK0hVTkdBUlk6IExpbWl0YXRpb24gb2YgTGlhYmlsaXR5IChTZWN0aW9uIDQpOiBUaGUgZm9sbG93aW5nIGlzIGFkZGVkIGF0IHRoZSBlbmQKK29mIHRoaXMgc2VjdGlvbjoKKworVGhlIGxpbWl0YXRpb24gYW5kIGV4Y2x1c2lvbiBzcGVjaWZpZWQgaGVyZWluIHNoYWxsIG5vdCBhcHBseSB0byBsaWFiaWxpdHkgZm9yIGEKK2JyZWFjaCBvZiBjb250cmFjdCBkYW1hZ2luZyBsaWZlLCBwaHlzaWNhbCB3ZWxsLWJlaW5nLCBvciBoZWFsdGggdGhhdCBoYXMgYmVlbgorY2F1c2VkIGludGVudGlvbmFsbHksIGJ5IGdyb3NzIG5lZ2xpZ2VuY2UsIG9yIGJ5IGEgY3JpbWluYWwgYWN0LgorCitUaGUgcGFydGllcyBhY2NlcHQgdGhlIGxpbWl0YXRpb25zIG9mIGxpYWJpbGl0eSBhcyB2YWxpZCBwcm92aXNpb25zIGFuZCBzdGF0ZQordGhhdCB0aGUgU2VjdGlvbiAzMTQuKDIpIG9mIHRoZSBIdW5nYXJpYW4gQ2l2aWwgQ29kZSBhcHBsaWVzIGFzIHRoZSBhY3F1aXNpdGlvbgorcHJpY2UgYXMgd2VsbCBhcyBvdGhlciBhZHZhbnRhZ2VzIGFyaXNpbmcgb3V0IG9mIHRoZSBwcmVzZW50IEFncmVlbWVudCBiYWxhbmNlCit0aGlzIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5LgorCitJUkVMQU5EOiBObyBXYXJyYW50eSAoU2VjdGlvbiAzKTogVGhlIGZvbGxvd2luZyBpcyBhZGRlZCB0byB0aGlzIHNlY3Rpb246CisKK0V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgaW4gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIG9yIHNlY3Rpb24gMTIgb2YgdGhlCitTYWxlIG9mIEdvb2RzIEFjdCAxODkzIChhcyBhbWVuZGVkIGJ5IHRoZSBTYWxlIG9mIEdvb2RzIGFuZCBTdXBwbHkgb2YgU2VydmljZXMKK0FjdCAxOTgwICgidGhlIDE5ODAgQWN0IikpLCBhbGwgY29uZGl0aW9ucyBhbmQgd2FycmFudGllcyAoZXhwcmVzcyBvciBpbXBsaWVkLAorc3RhdHV0b3J5IG9yIG90aGVyd2lzZSkgYXJlIGhlcmVieSBleGNsdWRlZCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55Cit3YXJyYW50aWVzIGltcGxpZWQgYnkgdGhlIFNhbGUgb2YgR29vZHMgQWN0IDE4OTMgYXMgYW1lbmRlZCBieSB0aGUgMTk4MCBBY3QKKyhpbmNsdWRpbmcsIGZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCBzZWN0aW9uIDM5IG9mIHRoZSAxOTgwIEFjdCkuCisKK0xpbWl0YXRpb24gb2YgTGlhYmlsaXR5IChTZWN0aW9uIDQpOiBUaGUgZm9sbG93aW5nIHJlcGxhY2VzIHRoZSB0ZXJtcyBvZiB0aGlzCitzZWN0aW9uIGluIGl0cyBlbnRpcmV0eToKKworRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIHNlY3Rpb24sIGEgIkRlZmF1bHQiIG1lYW5zIGFueSBhY3QsIHN0YXRlbWVudCwKK29taXNzaW9uLCBvciBuZWdsaWdlbmNlIG9uIHRoZSBwYXJ0IG9mIElCTSBpbiBjb25uZWN0aW9uIHdpdGgsIG9yIGluIHJlbGF0aW9uCit0bywgdGhlIHN1YmplY3QgbWF0dGVyIG9mIGFuIEFncmVlbWVudCBpbiByZXNwZWN0IG9mIHdoaWNoIElCTSBpcyBsZWdhbGx5IGxpYWJsZQordG8gWW91IHdoZXRoZXIgaW4gY29udHJhY3Qgb3IgdG9ydC4gQSBudW1iZXIgb2YgRGVmYXVsdHMgd2hpY2ggdG9nZXRoZXIgcmVzdWx0Citpbiwgb3IgY29udHJpYnV0ZSB0bywgc3Vic3RhbnRpYWxseSB0aGUgc2FtZSBsb3NzIG9yIGRhbWFnZSB3aWxsIGJlIHRyZWF0ZWQgYXMKK29uZSBEZWZhdWx0IG9jY3VycmluZyBvbiB0aGUgZGF0ZSBvZiBvY2N1cnJlbmNlIG9mIHRoZSBsYXN0IHN1Y2ggRGVmYXVsdC4KKworQ2lyY3Vtc3RhbmNlcyBtYXkgYXJpc2Ugd2hlcmUsIGJlY2F1c2Ugb2YgYSBEZWZhdWx0LCBZb3UgYXJlIGVudGl0bGVkIHRvIHJlY292ZXIKK2RhbWFnZXMgZnJvbSBJQk0uIFRoaXMgc2VjdGlvbiBzZXRzIG91dCB0aGUgZXh0ZW50IG9mIElCTSdzIGxpYWJpbGl0eSBhbmQgWW91cgorc29sZSByZW1lZHkuCisKKzEuIElCTSB3aWxsIGFjY2VwdCB1bmxpbWl0ZWQgbGlhYmlsaXR5IGZvciAoYSkgZGVhdGggb3IgcGVyc29uYWwgaW5qdXJ5IGNhdXNlZAorYnkgdGhlIG5lZ2xpZ2VuY2Ugb2YgSUJNLCBhbmQgKGIpIHN1YmplY3QgYWx3YXlzIHRvIHRoZSBJdGVtcyBmb3IgV2hpY2ggSUJNIGlzCitOb3QgTGlhYmxlIGJlbG93LCBmb3IgcGh5c2ljYWwgZGFtYWdlIHRvIFlvdXIgdGFuZ2libGUgcHJvcGVydHkgcmVzdWx0aW5nIGZyb20KK3RoZSBuZWdsaWdlbmNlIG9mIElCTS4KKworMi4gRXhjZXB0IGFzIHByb3ZpZGVkIGluIGl0ZW0gMSBhYm92ZSwgSUJNJ3MgZW50aXJlIGxpYWJpbGl0eSBmb3IgYWN0dWFsIGRhbWFnZXMKK2ZvciBhbnkgb25lIERlZmF1bHQgd2lsbCBub3QgaW4gYW55IGV2ZW50IGV4Y2VlZCB0aGUgZ3JlYXRlciBvZiAxKSBFVVIgMTI1LDAwMCwKK29yIDIpIDEyNSUgb2YgdGhlIGFtb3VudCBZb3UgcGFpZCBmb3IgdGhlIFByb2dyYW0gZGlyZWN0bHkgcmVsYXRpbmcgdG8gdGhlCitEZWZhdWx0LiBUaGVzZSBsaW1pdHMgYWxzbyBhcHBseSB0byBhbnkgb2YgSUJNJ3Mgc3VwcGxpZXJzIGFuZCBQcm9ncmFtCitkZXZlbG9wZXJzLiBUaGV5IHN0YXRlIHRoZSBtYXhpbXVtIGZvciB3aGljaCBJQk0gYW5kIHN1Y2ggc3VwcGxpZXJzIGFuZCBQcm9ncmFtCitkZXZlbG9wZXJzIGFyZSBjb2xsZWN0aXZlbHkgcmVzcG9uc2libGUuCisKK0l0ZW1zIGZvciBXaGljaCBJQk0gaXMgTm90IExpYWJsZQorCitTYXZlIHdpdGggcmVzcGVjdCB0byBhbnkgbGlhYmlsaXR5IHJlZmVycmVkIHRvIGluIGl0ZW0gMSBhYm92ZSwgdW5kZXIgbm8KK2NpcmN1bXN0YW5jZXMgaXMgSUJNIG9yIGFueSBvZiBpdHMgc3VwcGxpZXJzIG9yIFByb2dyYW0gZGV2ZWxvcGVycyBsaWFibGUgZm9yCithbnkgb2YgdGhlIGZvbGxvd2luZywgZXZlbiBpZiBJQk0gb3IgdGhleSB3ZXJlIGluZm9ybWVkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZgorc3VjaCBsb3NzZXM6CisKKzEuIGxvc3Mgb2YsIG9yIGRhbWFnZSB0bywgZGF0YTsKKworMi4gc3BlY2lhbCwgaW5kaXJlY3QsIG9yIGNvbnNlcXVlbnRpYWwgbG9zczsgb3IKKworMy4gbG9zcyBvZiBwcm9maXRzLCBidXNpbmVzcywgcmV2ZW51ZSwgZ29vZHdpbGwsIG9yIGFudGljaXBhdGVkIHNhdmluZ3MuCisKK0lUQUxZOiBHZW5lcmFsIChTZWN0aW9uIDUpOiBUaGUgZm9sbG93aW5nIGlzIGFkZGVkIHRvIHRoaXMgc2VjdGlvbjoKKworSUJNIGFuZCBDdXN0b21lciAoaGVyZWluYWZ0ZXIsIGluZGl2aWR1YWxseSwgIlBhcnR5Iikgc2hhbGwgY29tcGx5IHdpdGggYWxsIHRoZQorb2JsaWdhdGlvbnMgb2YgdGhlIGFwcGxpY2FibGUgcHJvdmlzaW9ucyBvZiBsYXcgYW5kL29yIHJlZ3VsYXRpb24gb24gcGVyc29uYWwKK2RhdGEgcHJvdGVjdGlvbi4gRWFjaCBvZiB0aGUgUGFydGllcyB3aWxsIGluZGVtbmlmeSBhbmQga2VlcCB0aGUgb3RoZXIgUGFydHkKK2hhcm1sZXNzIGZyb20gYW55IGRhbWFnZSwgY2xhaW0sIGNvc3Qgb3IgZXhwZW5zZSBpbmN1cnJlZCBieSB0aGUgbGF0dGVyLAorZGlyZWN0bHkgYW5kIG9yIGluZGlyZWN0bHksIGFzIGEgY29uc2VxdWVuY2Ugb2YgYW4gaW5mcmluZ2VtZW50IG9mIHRoZSBvdGhlcgorUGFydHkgb2YgdGhlIG1lbnRpb25lZCBwcm92aXNpb25zIG9mIGxhdyBhbmQvb3IgcmVndWxhdGlvbnMuIAorCitTTE9WQUtJQTogTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkgKFNlY3Rpb24gNCk6IFRoZSBmb2xsb3dpbmcgaXMgYWRkZWQgdG8gdGhlIGVuZAorb2YgdGhlIGxhc3QgcGFyYWdyYXBoOgorCitUaGUgbGltaXRhdGlvbnMgYXBwbHkgdG8gdGhlIGV4dGVudCB0aGV5IGFyZSBub3QgcHJvaGliaXRlZCB1bmRlciDvv73vv70gMzczLTM4NiBvZgordGhlIFNsb3ZhayBDb21tZXJjaWFsIENvZGUuCisKK0dlbmVyYWwgKFNlY3Rpb24gNSk6IFRoZSB0ZXJtcyBvZiBpdGVtIDUgYXJlIHJlcGxhY2VkIHdpdGggdGhlIGZvbGxvd2luZzoKKworVEhFIFBBUlRJRVMgQUdSRUUgVEhBVCwgQVMgREVGSU5FRCBCWSBBUFBMSUNBQkxFIExPQ0FMIExBVywgQU5ZIExFR0FMIE9SIE9USEVSCitBQ1RJT04gUkVMQVRFRCBUTyBBIEJSRUFDSCBPRiBUSElTIEFHUkVFTUVOVCBNVVNUIEJFIENPTU1FTkNFRCBOTyBMQVRFUiAgVEhBTgorRk9VUiBZRUFSUyBGUk9NIFRIRSBEQVRFIE9OIFdISUNIIFRIRSBDQVVTRSBPRiBBQ1RJT04gQVJPU0UuCisKK1NXSVRaRVJMQU5EOiBHZW5lcmFsIChTZWN0aW9uIDUpOiBUaGUgZm9sbG93aW5nIGlzIGFkZGVkIHRvIGl0ZW0gNDoKKworRm9yIHB1cnBvc2VzIG9mIHRoaXMgY2xhdXNlLCBjb250YWN0IGluZm9ybWF0aW9uIHdpbGwgYWxzbyBpbmNsdWRlIGluZm9ybWF0aW9uCithYm91dCBZb3UgYXMgYSBsZWdhbCBlbnRpdHksIGZvciBleGFtcGxlIHJldmVudWUgZGF0YSBhbmQgb3RoZXIgdHJhbnNhY3Rpb25hbAoraW5mb3JtYXRpb24uCisKK1VOSVRFRCBLSU5HRE9NOiBObyBXYXJyYW50eSAoU2VjdGlvbiAzKTogVGhlIGZvbGxvd2luZyByZXBsYWNlcyB0aGUgZmlyc3QKK3NlbnRlbmNlIGluIHRoZSBmaXJzdCBwYXJhZ3JhcGggb2YgdGhpcyBzZWN0aW9uOgorCitTVUJKRUNUIFRPIEFOWSBTVEFUVVRPUlkgV0FSUkFOVElFUyBXSElDSCBDQU5OT1QgQkUgRVhDTFVERUQsIElCTSBNQUtFUyBOTworV0FSUkFOVFkgT1IgQ09ORElUSU9OIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyAoV0lUSE9VVCBMSU1JVEFUSU9OKQorVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCitQVVJQT1NFLCBBTkQgTk9OLUlORlJJTkdFTUVOVCwgUkVHQVJESU5HIFRIRSBQUk9HUkFNLgorCitMaW1pdGF0aW9uIG9mIExpYWJpbGl0eSAoU2VjdGlvbiA0KTogVGhlIGZvbGxvd2luZyByZXBsYWNlcyB0aGUgdGVybXMgb2YgdGhpcworc2VjdGlvbiBpbiBpdHMgZW50aXJldHk6IAorCitGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgc2VjdGlvbiwgYSAiRGVmYXVsdCIgbWVhbnMgYW55IGFjdCwgc3RhdGVtZW50LAorb21pc3Npb24sIG9yIG5lZ2xpZ2VuY2Ugb24gdGhlIHBhcnQgb2YgSUJNIGluIGNvbm5lY3Rpb24gd2l0aCwgb3IgaW4gcmVsYXRpb24KK3RvLCB0aGUgc3ViamVjdCBtYXR0ZXIgb2YgYW4gQWdyZWVtZW50IGluIHJlc3BlY3Qgb2Ygd2hpY2ggSUJNIGlzIGxlZ2FsbHkgbGlhYmxlCit0byBZb3UsIHdoZXRoZXIgaW4gY29udHJhY3Qgb3IgdG9ydC4gQSBudW1iZXIgb2YgRGVmYXVsdHMgd2hpY2ggdG9nZXRoZXIgcmVzdWx0Citpbiwgb3IgY29udHJpYnV0ZSB0bywgc3Vic3RhbnRpYWxseSB0aGUgc2FtZSBsb3NzIG9yIGRhbWFnZSB3aWxsIGJlIHRyZWF0ZWQgYXMKK29uZSBEZWZhdWx0LgorCitDaXJjdW1zdGFuY2VzIG1heSBhcmlzZSB3aGVyZSwgYmVjYXVzZSBvZiBhIERlZmF1bHQsIFlvdSBhcmUgZW50aXRsZWQgdG8gcmVjb3ZlcgorZGFtYWdlcyBmcm9tIElCTS4gVGhpcyBzZWN0aW9uIHNldHMgb3V0IHRoZSBleHRlbnQgb2YgSUJNJ3MgbGlhYmlsaXR5IGFuZCBZb3VyCitzb2xlIHJlbWVkeS4KKworMS4gSUJNIHdpbGwgYWNjZXB0IHVubGltaXRlZCBsaWFiaWxpdHkgZm9yOgorCithLiBkZWF0aCBvciBwZXJzb25hbCBpbmp1cnkgY2F1c2VkIGJ5IHRoZSBuZWdsaWdlbmNlIG9mIElCTTsgCisKK2IuIGFueSBicmVhY2ggb2YgaXRzIG9ibGlnYXRpb25zIGltcGxpZWQgYnkgU2VjdGlvbiAxMiBvZiB0aGUgU2FsZSBvZiBHb29kcyBBY3QKKzE5Nzkgb3IgU2VjdGlvbiAyIG9mIHRoZSBTdXBwbHkgb2YgR29vZHMgYW5kIFNlcnZpY2VzIEFjdCAxOTgyLCBvciBhbnkgc3RhdHV0b3J5Cittb2RpZmljYXRpb24gb3IgcmUtZW5hY3RtZW50IG9mIGVpdGhlciBzdWNoIFNlY3Rpb247IGFuZAorCitjLiBzdWJqZWN0IGFsd2F5cyB0byB0aGUgSXRlbXMgZm9yIFdoaWNoIElCTSBpcyBOb3QgTGlhYmxlIGJlbG93LCBmb3IgcGh5c2ljYWwKK2RhbWFnZSB0byBZb3VyIHRhbmdpYmxlIHByb3BlcnR5IHJlc3VsdGluZyBmcm9tIHRoZSBuZWdsaWdlbmNlIG9mIElCTS4KKworMi4gSUJNJ3MgZW50aXJlIGxpYWJpbGl0eSBmb3IgYWN0dWFsIGRhbWFnZXMgZm9yIGFueSBvbmUgRGVmYXVsdCB3aWxsIG5vdCBpbiBhbnkKK2V2ZW50LCBleGNlcHQgYXMgcHJvdmlkZWQgaW4gaXRlbSAxIGFib3ZlLCBleGNlZWQgdGhlIGdyZWF0ZXIgb2YgMSkg77+9NzUsMDAwLCBvcgorMikgMTI1JSBvZiB0aGUgYW1vdW50IFlvdSBwYWlkIGZvciB0aGUgUHJvZ3JhbSBkaXJlY3RseSByZWxhdGluZyB0byB0aGUgRGVmYXVsdC4KK1RoZXNlIGxpbWl0cyBhbHNvIGFwcGx5IHRvIElCTSdzIHN1cHBsaWVycyBhbmQgUHJvZ3JhbSBkZXZlbG9wZXJzLiBUaGV5IHN0YXRlCit0aGUgbWF4aW11bSBmb3Igd2hpY2ggSUJNIGFuZCBzdWNoIHN1cHBsaWVycyBhbmQgUHJvZ3JhbSBkZXZlbG9wZXJzIGFyZQorY29sbGVjdGl2ZWx5IHJlc3BvbnNpYmxlLgorCitJdGVtcyBmb3IgV2hpY2ggSUJNIGlzIE5vdCBMaWFibGUKKworU2F2ZSB3aXRoIHJlc3BlY3QgdG8gYW55IGxpYWJpbGl0eSByZWZlcnJlZCB0byBpbiBpdGVtIDEgYWJvdmUsIHVuZGVyIG5vCitjaXJjdW1zdGFuY2VzIGlzIElCTSBvciBhbnkgb2YgaXRzIHN1cHBsaWVycyBvciBQcm9ncmFtIGRldmVsb3BlcnMgbGlhYmxlIGZvcgorYW55IG9mIHRoZSBmb2xsb3dpbmcsIGV2ZW4gaWYgSUJNIG9yIHRoZXkgd2VyZSBpbmZvcm1lZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YKK3N1Y2ggbG9zc2VzOgorCisxLiBsb3NzIG9mLCBvciBkYW1hZ2UgdG8sIGRhdGE7CisKKzIuIHNwZWNpYWwsIGluZGlyZWN0LCBvciBjb25zZXF1ZW50aWFsIGxvc3M7IG9yCisKKzMuIGxvc3Mgb2YgcHJvZml0cywgYnVzaW5lc3MsIHJldmVudWUsIGdvb2R3aWxsLCBvciBhbnRpY2lwYXRlZCBzYXZpbmdzLgorCitaMTI1LTU1ODktMDMgKDA2LzIwMDYpCisKKworCitMSUNFTlNFIElORk9STUFUSU9OCisKK1RoZSBQcm9ncmFtcyBsaXN0ZWQgYmVsb3cgYXJlIGxpY2Vuc2VkIHVuZGVyIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMKK2luIGFkZGl0aW9uIHRvIHRob3NlIG9mIHRoZSBJbnRlcm5hdGlvbmFsIExpY2Vuc2UgQWdyZWVtZW50IGZvciBOb24tV2FycmFudGVkCitQcm9ncmFtcy4KKworUHJvZ3JhbSBOYW1lOiBJQk0oUikgMzItYml0IFNESyBmb3IgTGludXgoUikgb24gSW50ZWwoUikgYXJjaGl0ZWN0dXJlLCBKYXZhKFRNKQorVGVjaG5vbG9neSBFZGl0aW9uLCBWZXJzaW9uIDYKK1Byb2dyYW0gTnVtYmVyOiA2MjA3LTAwMQorQXV0aG9yaXphdGlvbiBmb3IgVXNlIG9uIEhvbWUvUG9ydGFibGUgQ29tcHV0ZXI6ICBUaGUgUHJvZ3JhbSBtYXkgYmUgc3RvcmVkIG9uCit0aGUgcHJpbWFyeSBtYWNoaW5lIGFuZCBhbm90aGVyIG1hY2hpbmUsIHByb3ZpZGVkIHRoYXQgdGhlIFByb2dyYW0gaXMgbm90IGluCithY3RpdmUgdXNlIG9uIGJvdGggbWFjaGluZXMgYXQgdGhlIHNhbWUgdGltZS4KKworUHJvZ3JhbSBOYW1lOiBJQk0oUikgNjQtYml0IFNESyBmb3IgTGludXgoUikgb24gQU1ENjQgLyBFTTY0VCBhcmNoaXRlY3R1cmUsCitKYXZhKFRNKSBUZWNobm9sb2d5IEVkaXRpb24sIFZlcnNpb24gNgorUHJvZ3JhbSBOdW1iZXI6IDYyMDctMDAxCitBdXRob3JpemF0aW9uIGZvciBVc2Ugb24gSG9tZS9Qb3J0YWJsZSBDb21wdXRlcjogIFRoZSBQcm9ncmFtIG1heSBiZSBzdG9yZWQgb24KK3RoZSBwcmltYXJ5IG1hY2hpbmUgYW5kIGFub3RoZXIgbWFjaGluZSwgcHJvdmlkZWQgdGhhdCB0aGUgUHJvZ3JhbSBpcyBub3QgaW4KK2FjdGl2ZSB1c2Ugb24gYm90aCBtYWNoaW5lcyBhdCB0aGUgc2FtZSB0aW1lLgorCitQcm9ncmFtIE5hbWU6IElCTShSKSAzMi1iaXQgU0RLIGZvciBMaW51eChSKSBvbiBTeXN0ZW0gaShUTSkgYW5kIFN5c3RlbSBwKFRNKQorYXJjaGl0ZWN0dXJlLCBKYXZhKFRNKSBUZWNobm9sb2d5IEVkaXRpb24sIFZlcnNpb24gNgorUHJvZ3JhbSBOdW1iZXI6IDYyMDctMDAxCitBdXRob3JpemF0aW9uIGZvciBVc2Ugb24gSG9tZS9Qb3J0YWJsZSBDb21wdXRlcjogIFRoZSBQcm9ncmFtIG1heSBiZSBzdG9yZWQgb24KK3RoZSBwcmltYXJ5IG1hY2hpbmUgYW5kIGFub3RoZXIgbWFjaGluZSwgcHJvdmlkZWQgdGhhdCB0aGUgUHJvZ3JhbSBpcyBub3QgaW4KK2FjdGl2ZSB1c2Ugb24gYm90aCBtYWNoaW5lcyBhdCB0aGUgc2FtZSB0aW1lLgorCitQcm9ncmFtIE5hbWU6IElCTShSKSA2NC1iaXQgU0RLIGZvciBMaW51eChSKSBvbiBTeXN0ZW0gaShUTSkgYW5kIFN5c3RlbSBwKFRNKQorYXJjaGl0ZWN0dXJlLCBKYXZhKFRNKSBUZWNobm9sb2d5IEVkaXRpb24sIFZlcnNpb24gNgorUHJvZ3JhbSBOdW1iZXI6IDYyMDctMDAxCitBdXRob3JpemF0aW9uIGZvciBVc2Ugb24gSG9tZS9Qb3J0YWJsZSBDb21wdXRlcjogIFRoZSBQcm9ncmFtIG1heSBiZSBzdG9yZWQgb24KK3RoZSBwcmltYXJ5IG1hY2hpbmUgYW5kIGFub3RoZXIgbWFjaGluZSwgcHJvdmlkZWQgdGhhdCB0aGUgUHJvZ3JhbSBpcyBub3QgaW4KK2FjdGl2ZSB1c2Ugb24gYm90aCBtYWNoaW5lcyBhdCB0aGUgc2FtZSB0aW1lLgorCitQcm9ncmFtIE5hbWU6IElCTShSKSAzMS1iaXQgU0RLIGZvciBMaW51eChSKSBvbiBTeXN0ZW0geihUTSkgYXJjaGl0ZWN0dXJlLAorSmF2YShUTSkgVGVjaG5vbG9neSBFZGl0aW9uLCBWZXJzaW9uIDYKK1Byb2dyYW0gTnVtYmVyOiA2MjA3LTAwMQorQXV0aG9yaXphdGlvbiBmb3IgVXNlIG9uIEhvbWUvUG9ydGFibGUgQ29tcHV0ZXI6ICBUaGUgUHJvZ3JhbSBtYXkgYmUgc3RvcmVkIG9uCit0aGUgcHJpbWFyeSBtYWNoaW5lIGFuZCBhbm90aGVyIG1hY2hpbmUsIHByb3ZpZGVkIHRoYXQgdGhlIFByb2dyYW0gaXMgbm90IGluCithY3RpdmUgdXNlIG9uIGJvdGggbWFjaGluZXMgYXQgdGhlIHNhbWUgdGltZS4KKworUHJvZ3JhbSBOYW1lOiBJQk0oUikgNjQtYml0IFNESyBmb3IgTGludXgoUikgb24gU3lzdGVtIHooVE0pIGFyY2hpdGVjdHVyZSwKK0phdmEoVE0pIFRlY2hub2xvZ3kgRWRpdGlvbiwgVmVyc2lvbiA2CitQcm9ncmFtIE51bWJlcjogNjIwNy0wMDEKK0F1dGhvcml6YXRpb24gZm9yIFVzZSBvbiBIb21lL1BvcnRhYmxlIENvbXB1dGVyOiAgVGhlIFByb2dyYW0gbWF5IGJlIHN0b3JlZCBvbgordGhlIHByaW1hcnkgbWFjaGluZSBhbmQgYW5vdGhlciBtYWNoaW5lLCBwcm92aWRlZCB0aGF0IHRoZSBQcm9ncmFtIGlzIG5vdCBpbgorYWN0aXZlIHVzZSBvbiBib3RoIG1hY2hpbmVzIGF0IHRoZSBzYW1lIHRpbWUuCisKK1Byb2dyYW0gTmFtZTogSUJNKFIpIDMyLWJpdCBSdW50aW1lIEVudmlyb25tZW50IGZvciBMaW51eChSKSBvbiBJbnRlbChSKQorYXJjaGl0ZWN0dXJlLCBKYXZhKFRNKSBUZWNobm9sb2d5IEVkaXRpb24sIFZlcnNpb24gNgorUHJvZ3JhbSBOdW1iZXI6IDYyMDctMDAxCitBdXRob3JpemF0aW9uIGZvciBVc2Ugb24gSG9tZS9Qb3J0YWJsZSBDb21wdXRlcjogIFRoZSBQcm9ncmFtIG1heSBiZSBzdG9yZWQgb24KK3RoZSBwcmltYXJ5IG1hY2hpbmUgYW5kIGFub3RoZXIgbWFjaGluZSwgcHJvdmlkZWQgdGhhdCB0aGUgUHJvZ3JhbSBpcyBub3QgaW4KK2FjdGl2ZSB1c2Ugb24gYm90aCBtYWNoaW5lcyBhdCB0aGUgc2FtZSB0aW1lLgorCitQcm9ncmFtIE5hbWU6IElCTShSKSA2NC1iaXQgUnVudGltZSBFbnZpcm9ubWVudCBmb3IgTGludXgoUikgb24gQU1ENjQgLyBFTTY0VAorYXJjaGl0ZWN0dXJlLCBKYXZhKFRNKSBUZWNobm9sb2d5IEVkaXRpb24sIFZlcnNpb24gNgorUHJvZ3JhbSBOdW1iZXI6IDYyMDctMDAxCitBdXRob3JpemF0aW9uIGZvciBVc2Ugb24gSG9tZS9Qb3J0YWJsZSBDb21wdXRlcjogIFRoZSBQcm9ncmFtIG1heSBiZSBzdG9yZWQgb24KK3RoZSBwcmltYXJ5IG1hY2hpbmUgYW5kIGFub3RoZXIgbWFjaGluZSwgcHJvdmlkZWQgdGhhdCB0aGUgUHJvZ3JhbSBpcyBub3QgaW4KK2FjdGl2ZSB1c2Ugb24gYm90aCBtYWNoaW5lcyBhdCB0aGUgc2FtZSB0aW1lLgorCitQcm9ncmFtIE5hbWU6IElCTShSKSAzMi1iaXQgUnVudGltZSBFbnZpcm9ubWVudCBmb3IgTGludXgoUikgb24gU3lzdGVtIGkoVE0pIGFuZAorU3lzdGVtIHAoVE0pLCBKYXZhKFRNKSBUZWNobm9sb2d5IEVkaXRpb24sIFZlcnNpb24gNgorUHJvZ3JhbSBOdW1iZXI6IDYyMDctMDAxCitBdXRob3JpemF0aW9uIGZvciBVc2Ugb24gSG9tZS9Qb3J0YWJsZSBDb21wdXRlcjogIFRoZSBQcm9ncmFtIG1heSBiZSBzdG9yZWQgb24KK3RoZSBwcmltYXJ5IG1hY2hpbmUgYW5kIGFub3RoZXIgbWFjaGluZSwgcHJvdmlkZWQgdGhhdCB0aGUgUHJvZ3JhbSBpcyBub3QgaW4KK2FjdGl2ZSB1c2Ugb24gYm90aCBtYWNoaW5lcyBhdCB0aGUgc2FtZSB0aW1lLgorCitQcm9ncmFtIE5hbWU6IElCTShSKSA2NC1iaXQgUnVudGltZSBFbnZpcm9ubWVudCBmb3IgTGludXgoUikgb24gU3lzdGVtIGkoVE0pIGFuZAorU3lzdGVtIHAoVE0pLCBKYXZhKFRNKSBUZWNobm9sb2d5IEVkaXRpb24sIFZlcnNpb24gNgorUHJvZ3JhbSBOdW1iZXI6IDYyMDctMDAxCitBdXRob3JpemF0aW9uIGZvciBVc2Ugb24gSG9tZS9Qb3J0YWJsZSBDb21wdXRlcjogIFRoZSBQcm9ncmFtIG1heSBiZSBzdG9yZWQgb24KK3RoZSBwcmltYXJ5IG1hY2hpbmUgYW5kIGFub3RoZXIgbWFjaGluZSwgcHJvdmlkZWQgdGhhdCB0aGUgUHJvZ3JhbSBpcyBub3QgaW4KK2FjdGl2ZSB1c2Ugb24gYm90aCBtYWNoaW5lcyBhdCB0aGUgc2FtZSB0aW1lLgorCitQcm9ncmFtIE5hbWU6IElCTShSKSAzMS1iaXQgUnVudGltZSBFbnZpcm9ubWVudCBmb3IgTGludXgoUikgb24gU3lzdGVtIHooVE0pLAorSmF2YShUTSkgVGVjaG5vbG9neSBFZGl0aW9uLCBWZXJzaW9uIDYKK1Byb2dyYW0gTnVtYmVyOiA2MjA3LTAwMQorQXV0aG9yaXphdGlvbiBmb3IgVXNlIG9uIEhvbWUvUG9ydGFibGUgQ29tcHV0ZXI6ICBUaGUgUHJvZ3JhbSBtYXkgYmUgc3RvcmVkIG9uCit0aGUgcHJpbWFyeSBtYWNoaW5lIGFuZCBhbm90aGVyIG1hY2hpbmUsIHByb3ZpZGVkIHRoYXQgdGhlIFByb2dyYW0gaXMgbm90IGluCithY3RpdmUgdXNlIG9uIGJvdGggbWFjaGluZXMgYXQgdGhlIHNhbWUgdGltZS4KKworUHJvZ3JhbSBOYW1lOiBJQk0oUikgNjQtYml0IFJ1bnRpbWUgRW52aXJvbm1lbnQgZm9yIExpbnV4KFIpIG9uIFN5c3RlbSB6KFRNKSwKK0phdmEoVE0pIFRlY2hub2xvZ3kgRWRpdGlvbiwgVmVyc2lvbiA2CitQcm9ncmFtIE51bWJlcjogNjIwNy0wMDEKK0F1dGhvcml6YXRpb24gZm9yIFVzZSBvbiBIb21lL1BvcnRhYmxlIENvbXB1dGVyOiAgVGhlIFByb2dyYW0gbWF5IGJlIHN0b3JlZCBvbgordGhlIHByaW1hcnkgbWFjaGluZSBhbmQgYW5vdGhlciBtYWNoaW5lLCBwcm92aWRlZCB0aGF0IHRoZSBQcm9ncmFtIGlzIG5vdCBpbgorYWN0aXZlIHVzZSBvbiBib3RoIG1hY2hpbmVzIGF0IHRoZSBzYW1lIHRpbWUuCisKK0xpbWl0ZWQgVXNlIFJpZ2h0cyBmb3IgT3RoZXIgSUJNIFByb2dyYW1zCisKK0lmIFlvdSBhY3F1aXJlZCB0aGlzIFByb2dyYW0gYXMgcGFydCBvZiBhbm90aGVyIElCTSBQcm9ncmFtICgiUHJpbmNpcGFsCitQcm9ncmFtIikgdGhhdCBsaXN0cyB0aGlzIFByb2dyYW0gdW5kZXIgIk90aGVyIElCTSBQcm9ncmFtcyIsIFlvdSByZWNlaXZlZCB0aGlzCitQcm9ncmFtIG9ubHkgaW4gc3VwcG9ydCBvZiB0aGUgUHJpbmNpcGFsIFByb2dyYW0sIGFuZCBZb3VyIHJpZ2h0cyB0byB1c2UgdGhpcworUHJvZ3JhbSB3aWxsIGJlIGxpbWl0ZWQgYnkgdGhlIGxpY2Vuc2Ugb2YgdGhlIFByaW5jaXBhbCBQcm9ncmFtLiBQbGVhc2UgY29udGFjdAorWW91ciBJQk0gU2FsZXMgUmVwcmVzZW50YXRpdmUgaWYgWW91IHdpc2ggdG8gYWNxdWlyZSBhIHNlcGFyYXRlIGxpY2Vuc2UgdG8gdGhpcworUHJvZ3JhbSBub3QgbGltaXRlZCBieSB0aGUgUHJpbmNpcGFsIFByb2dyYW0ncyBsaWNlbnNlIHRlcm1zLgorCitFeGNsdWRlZCBDb21wb25lbnRzCisKK1RoZSBwcm92aXNpb25zIG9mIHRoaXMgcGFyYWdyYXBoIGRvIG5vdCBhcHBseSB0byB0aGUgZXh0ZW50IHRoZXkgYXJlIGhlbGQgdG8gYmUKK2ludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciB0aGUgbGF3IHRoYXQgZ292ZXJucyB0aGlzIGxpY2Vuc2UuIFRoZSBjb21wb25lbnRzCitsaXN0ZWQgYmVsb3cgYXJlICJFeGNsdWRlZCBDb21wb25lbnRzLiIgTm90d2l0aHN0YW5kaW5nIGFueSBvZiB0aGUgdGVybXMgaW4gdGhlCitBZ3JlZW1lbnQgb3IgYW55IG90aGVyIGFncmVlbWVudCBZb3UgbWF5IGhhdmUgd2l0aCBJQk06CisoYSkgdGhlIHRoaXJkIHBhcnR5IHN1cHBsaWVycyBvZiBzdWNoIEV4Y2x1ZGVkIENvbXBvbmVudHMgKCJTdXBwbGllcnMiKSBwcm92aWRlCit0aGUgY29tcG9uZW50cyBXSVRIT1VUIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgYW5kLCBzdWNoIFN1cHBsaWVycyBESVNDTEFJTSBBTlkKK0FORCBBTEwgRVhQUkVTUyBBTkQgSU1QTElFRCBXQVJSQU5USUVTIEFORCBDT05ESVRJT05TIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECitUTywgVEhFIFdBUlJBTlRZIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5UIE9SIElOVEVSRkVSRU5DRSBBTkQgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgQU5EIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UsIFdJVEggUkVTUEVDVCBUTyBUSEUgRVhDTFVERUQgQ09NUE9ORU5UUzsKKyhiKSBpbiBubyBldmVudCBhcmUgdGhlIFN1cHBsaWVycyBsaWFibGUgZm9yIGFueSBkaXJlY3QsIGluZGlyZWN0LCBpbmNpZGVudGFsLAorc3BlY2lhbCwgZXhlbXBsYXJ5LCBwdW5pdGl2ZSBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQKK3RvIGxvc3QgZGF0YSwgbG9zdCBzYXZpbmdzLCBhbmQgbG9zdCBwcm9maXRzLCB3aXRoIHJlc3BlY3QgdG8gdGhlIEV4Y2x1ZGVkCitDb21wb25lbnRzOyBhbmQsCisoYykgSUJNIGFuZCB0aGUgU3VwcGxpZXJzIGFyZSBub3QgbGlhYmxlIHRvIFlvdSwgYW5kIHdpbGwgbm90IGRlZmVuZCwgaW5kZW1uaWZ5LAorb3IgaG9sZCBZb3UgaGFybWxlc3MgZm9yIGFueSBjbGFpbXMgYXJpc2luZyBmcm9tIG9yIHJlbGF0ZWQgdG8gdGhlIEV4Y2x1ZGVkCitDb21wb25lbnRzLgorCitOb3R3aXRoc3RhbmRpbmcgdGhlc2UgZXhjbHVzaW9ucywgaW4gR2VybWFueSBhbmQgQXVzdHJpYSwgSUJNJ3Mgd2FycmFudHkgYW5kCitsaWFiaWxpdHkgZm9yIHRoZSBFeGNsdWRlZCBDb21wb25lbnRzIGlzIGdvdmVybmVkIG9ubHkgYnkgdGhlIHJlc3BlY3RpdmUgdGVybXMKK2FwcGxpY2FibGUgZm9yIEdlcm1hbnkgYW5kIEF1c3RyaWEgaW4gdGhlIElCTSBsaWNlbnNlIGFncmVlbWVudHMuCisKK05vdGljZXMgYW5kIGltcG9ydGFudCBpbmZvcm1hdGlvbiB0aGF0IElCTSBpcyByZXF1aXJlZCB0byBwcm92aWRlIHRvIFlvdSB3aXRoCityZXNwZWN0IHRvIHRoZSBFeGNsdWRlZCBDb21wb25lbnRzLCBpbmNsdWRpbmcgaW5zdHJ1Y3Rpb25zIGZvciBvYnRhaW5pbmcgc291cmNlCitjb2RlIGZvciBjZXJ0YWluIEV4Y2x1ZGVkIENvbXBvbmVudHMsIG1heSBiZSBmb3VuZCBpbiB0aGUgTk9USUNFUyBmaWxlKHMpIHRoYXQKK2FjY29tcGFuaWVzIHRoZSBQcm9ncmFtLgorCitZb3VyIHVzZSBvZiB0aGUgRXhjbHVkZWQgQ29tcG9uZW50cyBpcyBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhlIEFncmVlbWVudAorYW5kIG5vdCBieSBhbnkgdGVybXMgdGhhdCBtYXkgYmUgY29udGFpbmVkIGluIHRoZSBOT1RJQ0VTIGZpbGUocykuIFRoZSB0ZXJtcworY29udGFpbmVkIGluIHRoZSBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkgSUJNIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5LiBGdXR1cmUKK1Byb2dyYW0gdXBkYXRlcyBvciBmaXhwYWNrcyBtYXkgY29udGFpbiBhZGRpdGlvbmFsIEV4Y2x1ZGVkIENvbXBvbmVudHMuIFN1Y2gKK2FkZGl0aW9uYWwgRXhjbHVkZWQgQ29tcG9uZW50cywgYW5kIHJlbGF0ZWQgbm90aWNlcyBhbmQgaW5mb3JtYXRpb24sIGlmIGFueSwKK3dpbGwgYmUgbGlzdGVkIGluIGFub3RoZXIgTk9USUNFUyBmaWxlIHRoYXQgYWNjb21wYW5pZXMgdGhlIFByb2dyYW0gdXBkYXRlIG9yCitmaXhwYWNrLgorCitUaGUgZm9sbG93aW5nIGFyZSBFeGNsdWRlZCBDb21wb25lbnRzOgorQXBhY2hlIEhhcm1vbnkgOi0KKyogQW5ub3RhdGlvbiAgICAoU3VidmVyc2lvbjogcjU3MzQ0MCAyMDA3LTA5LTExIChBcmVuYSBSNDc0NSkpCisqIEJlYW5zICAgICAoU3VidmVyc2lvbjogcjU3MzQ0MCAyMDA3LTA5LTExIChBcmVuYSBSNDc0NSkpCisqIGpuZGkgICAgIChTdWJ2ZXJzaW9uOiByNTczNDQwIDIwMDctMDktMTEgKEFyZW5hIFI0NzQ1KSkKKyogbGFuZy1tYW5hZ2VtZW50ICAgKFN1YnZlcnNpb246IHI1NzM0NDAgMjAwNy0wOS0xMSAoQXJlbmEgUjQ3NDUpKQorKiBsb2dnaW5nICAgIChTdWJ2ZXJzaW9uOiByNTczNDQwIDIwMDctMDktMTEgKEFyZW5hIFI0NzQ1KSkKKyogc2VjdXJpdHkgICAgIChTdWJ2ZXJzaW9uOiByNTczNDQwIDIwMDctMDktMTEgKEFyZW5hIFI0NzQ1KSkKKyogc3FsICAgICAoU3VidmVyc2lvbjogcjU3MzQ0MCAyMDA3LTA5LTExIChBcmVuYSBSNDc0NSkpCisqIGphdmEudXRpbCAocGFydCBvZiBsdW5pKSAgKFN1YnZlcnNpb246IHI1NzM0NDAgMjAwNy0wOS0xMSAoQXJlbmEgUjQ3NDUpKQorCitTcGVjaWZpZWQgT3BlcmF0aW5nIEVudmlyb25tZW50CisKK1RoZSBQcm9ncmFtJ3Mgc3BlY2lmaWNhdGlvbnMgYW5kIHNwZWNpZmllZCBvcGVyYXRpbmcgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24gbWF5CitiZSBmb3VuZCBpbiBkb2N1bWVudGF0aW9uIGFjY29tcGFueWluZyB0aGUgUHJvZ3JhbSwgaWYgYXZhaWxhYmxlLCBzdWNoIGFzIGEKK3JlYWQtbWUgZmlsZSwgb3Igb3RoZXIgaW5mb3JtYXRpb24gcHVibGlzaGVkIGJ5IElCTSwgc3VjaCBhcyBhbiBhbm5vdW5jZW1lbnQKK2xldHRlci4KKworUHJvZ3JhbS11bmlxdWUgVGVybXMKKworMS4gR0VORVJBTAorCitUbyB0aGUgZXh0ZW50IG9mIGFueSBjb25mbGljdCBiZXR3ZWVuIHRoZSB0ZXJtcyBvZiB0aGUgSW50ZXJuYXRpb25hbCBMaWNlbnNlCitBZ3JlZW1lbnQgZm9yIE5vbi1XYXJyYW50ZWQgUHJvZ3JhbXMgYW5kIHRoaXMgTGljZW5zZSBJbmZvcm1hdGlvbiwgdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UgSW5mb3JtYXRpb24gc2hhbGwgcHJldmFpbC4KKworV0hFUkUgVEhFIFBST0dSQU0gSEFTIEJFRU4gUFJPVklERUQgVE8gWU9VIFNFUEFSQVRFTFkgQlkgSUJNLCBJVCBJUyBQUk9WSURFRCBBVAorTk8gQ0hBUkdFLgorCitUaGUgUHJvZ3JhbSBjb25zaXN0cyBvZiBiaW5hcnkgY29kZSB0aGF0IGV4ZWN1dGVzIG9uIHRoZSBvcGVyYXRpbmcgc3lzdGVtKHMpCitzcGVjaWZpZWQgaW4gUmVhZG1lIGZpbGVzIHRoYXQgYWNjb21wYW55IHRoZSBQcm9ncmFtLgorCiszLiBUUkFERU1BUktTIEFORCBDT1BZUklHSFQ6IFlPVVIgUkVTUE9OU0lCSUxJVElFUworCithKSBZb3Ugc2hhbGwgbm90IG1vZGlmeSwgZGVsZXRlLCBzdXBwcmVzcywgb3Igb2JzY3VyZSBhbnkgY29weXJpZ2h0LCB0cmFkZW1hcmsKK29yIG90aGVyIGxlZ2FsIG5vdGljZSAod2hldGhlciBmcm9tIElCTSBvciBhbnkgdGhpcmQgcGFydHkpIHdoaWNoIG1heSBiZQorZGlzcGxheWVkIGJ5IG9yIGluY2x1ZGVkIHdpdGhpbiB0aGUgUHJvZ3JhbS4KKworYikgSmF2YSBhbmQgYWxsIEphdmEtYmFzZWQgVHJhZGVtYXJrcyBhcmUgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCitpbiB0aGUgVW5pdGVkIFN0YXRlcywgb3RoZXIgY291bnRyaWVzLCBvciBib3RoLgorCitjKSBZb3UgcmVjb2duaXplIElCTSdzIGFuZCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuJ3Mgb3duZXJzaGlwIGFuZCB0aXRsZSB0byB0aGVpcgorcmVzcGVjdGl2ZSB0cmFkZW1hcmtzIGFuZCBvZiBhbnkgZ29vZHdpbGwgYXR0YWNoaW5nIHRoZXJldG8sIGluY2x1ZGluZyBnb29kd2lsbAorcmVzdWx0aW5nIGZyb20gdXNlLiBZb3Ugd2lsbCBub3QgdXNlIG9yIGF0dGVtcHQgdG8gcmVnaXN0ZXIgYW55IHRyYWRlbWFyayB3aGljaAoraXMgY29uZnVzaW5nbHkgc2ltaWxhciB0byBzdWNoIElCTSBvciBTdW4gdHJhZGVtYXJrcy4KKworMy4gUFJPT0YgT0YgRU5USVRMRU1FTlQKKworVGhpcyBMaWNlbnNlIEFncmVlbWVudCBjb25zdGl0dXRlcyB5b3VyIFByb29mIG9mIEVudGl0bGVtZW50LgorCisKKworRC9OOiAgTC1SVkVLLTc1R0tZRgorUC9OOiAgTC1SVkVLLTc1R0tZRiAKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0lCUFAtMS4xIGIvbGljZW5zZXMvSUJQUC0xLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTllZjllNgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0lCUFAtMS4xCkBAIC0wLDAgKzEsMjIgQEAKK0lCUFAgTGljZW5zZSB2MS4xCistLS0tLS0tLS0tLS0tLS0tLQorCisoQykgQ29weXJpZ2h0IDIwMDAtMjAwNiBULkkuUC4gR3JvdXAgUy5BLiBhbmQgdGhlIElCUFAgVGVhbSAod3d3LmlicHAub3JnKQorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvciBvcmdhbml6YXRpb24KKygiWW91Iikgb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMKK2NvdmVyZWQgYnkgdGhpcyBsaWNlbnNlICh0aGUgIlNvZnR3YXJlIikgdG8gdXNlIHRoZSBTb2Z0d2FyZSBhcyBwYXJ0IG9mIGFub3RoZXIKK3dvcms7IHRvIG1vZGlmeSBpdCBmb3IgdGhhdCBwdXJwb3NlOyB0byBwdWJsaXNoIG9yIGRpc3RyaWJ1dGUgaXQsIG1vZGlmaWVkIG9yCitub3QsIGZvciB0aGF0IHNhbWUgcHVycG9zZTsgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgb3RoZXIgd29yayB1c2luZyB0aGUKK1NvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbzsgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6IHRoZSBhYm92ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBjb21wbGV0ZSBhbmQgdW5tb2RpZmllZCBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQoraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmU7IFlvdSB3aWxsIG5vdAorbWlzcmVwcmVzZW50IG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoZSBTb2Z0d2FyZSBhcyBiZWluZyB0aGUgb3JpZ2luYWwuCisKK1RoZSBTb2Z0d2FyZSBpcyBwcm92aWRlZCAiYXMgaXMiLCB3aXRob3V0IHdhcnJhbnR5IG9mIGFueSBraW5kLCBleHByZXNzIG9yCitpbXBsaWVkLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSwKK2ZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlIGFuZCBub25pbmZyaW5nZW1lbnQuICBJbiBubyBldmVudCBzaGFsbAordGhlIGF1dGhvcnMgb3IgY29weXJpZ2h0IGhvbGRlcnMgYmUgbGlhYmxlIGZvciBhbnkgY2xhaW0sIGRhbWFnZXMgb3Igb3RoZXIKK2xpYWJpbGl0eSwgd2hldGhlciBpbiBhbiBhY3Rpb24gb2YgY29udHJhY3QsIHRvcnQgb3Igb3RoZXJ3aXNlLCBhcmlzaW5nIGZyb20sCitvdXQgb2Ygb3IgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBzb2Z0d2FyZSBvciB0aGUgdXNlIG9mIG90aGVyIGRlYWxpbmdzIGluCit0aGUgU29mdHdhcmUuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9JRFBMIGIvbGljZW5zZXMvSURQTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmQ1NTc4Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvSURQTApAQCAtMCwwICsxLDQ5NiBAQAorICAgICAgSW5pdGlhbCBEZXZlbG9wZXIncyBQVUJMSUMgTElDRU5TRQorICAgICAgICAgICAgICAgVmVyc2lvbiAxLjAgCisKKyAgIDEuIERlZmluaXRpb25zCisKKyAgICAgIDEuMCAiQ29tbWVyY2lhbCBVc2UiIG1lYW5zIGRpc3RyaWJ1dGlvbiBvciBvdGhlcndpc2UgbWFraW5nIHRoZSBDb3ZlcmVkIAorICAgICAgQ29kZSBhdmFpbGFibGUgdG8gYSB0aGlyZCBwYXJ0eS4gCisKKyAgICAgIDEuMSAnJ0NvbnRyaWJ1dG9yJycgbWVhbnMgZWFjaCBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvIHRoZSAKKyAgICAgIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuIAorCisgICAgICAxLjIgJydDb250cmlidXRvciBWZXJzaW9uJycgbWVhbnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlLCBwcmlvciAKKyAgICAgIE1vZGlmaWNhdGlvbnMgdXNlZCBieSBhIENvbnRyaWJ1dG9yLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IAorICAgICAgcGFydGljdWxhciBDb250cmlidXRvci4gCisKKyAgICAgIDEuMy4gJydDb3ZlcmVkIENvZGUnJyBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIG9yIHRoZSAKKyAgICAgIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGFuZCBNb2RpZmljYXRpb25zLCBpbiBlYWNoIGNhc2UgaW5jbHVkaW5nIAorICAgICAgcG9ydGlvbnMgdGhlcmVvZi4gCisKKyAgICAgIDEuNC4gJydFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20nJyBtZWFucyBhIG1lY2hhbmlzbSBnZW5lcmFsbHkgCisgICAgICBhY2NlcHRlZCBpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYyB0cmFuc2ZlciBvZiAKKyAgICAgIGRhdGEuIAorCisgICAgICAxLjUuICcnRXhlY3V0YWJsZScnIG1lYW5zIENvdmVyZWQgQ29kZSBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIFNvdXJjZSBDb2RlLiAKKworICAgICAgMS42LiAnJ0luaXRpYWwgRGV2ZWxvcGVyJycgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IGlkZW50aWZpZWQgYXMgdGhlIEluaXRpYWwgCisgICAgICBEZXZlbG9wZXIgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEuIAorCisgICAgICAxLjcuICcnTGFyZ2VyIFdvcmsnJyBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yIHBvcnRpb25zIAorICAgICAgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuIAorCisgICAgICAxLjguICcnTGljZW5zZScnIG1lYW5zIHRoaXMgZG9jdW1lbnQuIAorCisgICAgICAgICAxLjguMS4gIkxpY2Vuc2FibGUiIG1lYW5zIGhhdmluZyB0aGUgcmlnaHQgdG8gZ3JhbnQsIHRvIHRoZSBtYXhpbXVtIAorICAgICAgICAgZXh0ZW50IHBvc3NpYmxlLCB3aGV0aGVyIGF0IHRoZSB0aW1lIG9mIHRoZSBpbml0aWFsIGdyYW50IG9yIHN1YnNlcXVlbnRseSAKKyAgICAgICAgIGFjcXVpcmVkLCBhbnkgYW5kIGFsbCBvZiB0aGUgcmlnaHRzIGNvbnZleWVkIGhlcmVpbi4KKworICAgICAgMS45LiAnJ01vZGlmaWNhdGlvbnMnJyBtZWFucyBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgc3Vic3RhbmNlIG9yIAorICAgICAgc3RydWN0dXJlIG9mIGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4gV2hlbiAKKyAgICAgIENvdmVyZWQgQ29kZSBpcyByZWxlYXNlZCBhcyBhIHNlcmllcyBvZiBmaWxlcywgYSBNb2RpZmljYXRpb24gaXM6IAorCisgICAgICAgICBBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgT3JpZ2luYWwgCisgICAgICAgICBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuIAorCisgICAgICAgICBBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyAKKyAgICAgICAgIE1vZGlmaWNhdGlvbnMuIAorCisgICAgICAxLjEwLiAnJ09yaWdpbmFsIENvZGUnJyBtZWFucyBTb3VyY2UgQ29kZSBvZiBjb21wdXRlciBzb2Z0d2FyZSBjb2RlIHdoaWNoIAorICAgICAgaXMgZGVzY3JpYmVkIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBIGFzIE9yaWdpbmFsIENvZGUsIAorICAgICAgYW5kIHdoaWNoLCBhdCB0aGUgdGltZSBvZiBpdHMgcmVsZWFzZSB1bmRlciB0aGlzIExpY2Vuc2UgaXMgbm90IGFscmVhZHkgQ292ZXJlZCAKKyAgICAgIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLiAKKworICAgICAgICAgMS4xMC4xLiAiUGF0ZW50IENsYWltcyIgbWVhbnMgYW55IHBhdGVudCBjbGFpbShzKSwgbm93IG93bmVkIG9yIAorICAgICAgICAgaGVyZWFmdGVyIGFjcXVpcmVkLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBtZXRob2QsIHByb2Nlc3MsIGFuZCAKKyAgICAgICAgIGFwcGFyYXR1cyBjbGFpbXMsIGluIGFueSBwYXRlbnQgTGljZW5zYWJsZSBieSBncmFudG9yLgorCisgICAgICAxLjExLiAnJ1NvdXJjZSBDb2RlJycgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBDb3ZlcmVkIENvZGUgZm9yIAorICAgICAgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCAKKyAgICAgIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIAorICAgICAgYW4gRXhlY3V0YWJsZSwgb3Igc291cmNlIGNvZGUgZGlmZmVyZW50aWFsIGNvbXBhcmlzb25zIGFnYWluc3QgZWl0aGVyIHRoZSAKKyAgICAgIE9yaWdpbmFsIENvZGUgb3IgYW5vdGhlciB3ZWxsIGtub3duLCBhdmFpbGFibGUgQ292ZXJlZCBDb2RlIG9mIHRoZSAKKyAgICAgIENvbnRyaWJ1dG9yJ3MgY2hvaWNlLiBUaGUgU291cmNlIENvZGUgY2FuIGJlIGluIGEgY29tcHJlc3NlZCBvciBhcmNoaXZhbCAKKyAgICAgIGZvcm0sIHByb3ZpZGVkIHRoZSBhcHByb3ByaWF0ZSBkZWNvbXByZXNzaW9uIG9yIGRlLWFyY2hpdmluZyBzb2Z0d2FyZSBpcyAKKyAgICAgIHdpZGVseSBhdmFpbGFibGUgZm9yIG5vIGNoYXJnZS4KKworICAgICAgMS4xMi4gIllvdScnIChvciAiWW91ciIpIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgCisgICAgICB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIAorICAgICAgb2YgdGhpcyBMaWNlbnNlIGlzc3VlZCB1bmRlciBTZWN0aW9uIDYuMS4gRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91JycgaW5jbHVkZXMgYW55IAorICAgICAgZW50aXR5IHcgaGljaCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuIAorICAgICAgRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wnJyBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgCisgICAgICBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IAorICAgICAgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIG1vcmUgdGhhbiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9mIAorICAgICAgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4gCisKKworICAgMi4gU291cmNlIENvZGUgTGljZW5zZS4KKworCisgICAyLjEuIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMgWW91IGEgCisgICB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgCisgICBwcm9wZXJ0eSBjbGFpbXM6IAorCisgICAgICAoYSkgdW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IgdHJhZGVtYXJrKSAKKyAgICAgIExpY2Vuc2FibGUgYnkgSW5pdGlhbCBEZXZlbG9wZXIgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgCisgICAgICBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSB3aXRoIG9yIHdpdGhvdXQgCisgICAgICBNb2RpZmljYXRpb25zLCBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQgCisKKyAgICAgIChiKSB1bmRlciBQYXRlbnRzIENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcgb3Igc2VsbGluZyBvZiBPcmlnaW5hbCAKKyAgICAgIENvZGUsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBwcmFjdGljZSwgc2VsbCwgYW5kIG9mZmVyIGZvciBzYWxlLCBhbmQvb3IgCisgICAgICBvdGhlcndpc2UgZGlzcG9zZSBvZiB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikuIAorICAgICAgKGMpIHRoZSBsaWNlbnNlcyBncmFudGVkIGluIHRoaXMgU2VjdGlvbiAyLjEoYSkgYW5kIChiKSBhcmUgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIAorICAgICAgSW5pdGlhbCBEZXZlbG9wZXIgZmlyc3QgZGlzdHJpYnV0ZXMgT3JpZ2luYWwgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiAKKworICAgICAgZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4xKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOgorCisgICAgICAgICAxKSBmb3IgY29kZSB0aGF0IFlvdSBkZWxldGUgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZTsgCisKKyAgICAgICAgIDIpIHNlcGFyYXRlIGZyb20gdGhlIE9yaWdpbmFsIENvZGU7IG9yIAorCisgICAgICAgICAzKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IAorCisgICAgICAgICAgICBpKSB0aGUgbW9kaWZpY2F0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIAorCisgICAgICAgICAgICBpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgCisgICAgICAgICAgICBkZXZpY2VzLiAKKworICAgMi4yLiBDb250cmlidXRvciBHcmFudC4gU3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zLCBlYWNoIAorICAgQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSAKKworICAgICAgKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgCisgICAgICBMaWNlbnNhYmxlIGJ5IENvbnRyaWJ1dG9yLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCAKKyAgICAgIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE1vZGlmaWNhdGlvbnMgY3JlYXRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIChvciAKKyAgICAgIHBvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIGFzIAorICAgICAgQ292ZXJlZCBDb2RlIGFuZC9vciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZCAKKworICAgICAgKGIpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nLCBvciBzZWxsaW5nIG9mIAorICAgICAgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IgZWl0aGVyIGFsb25lIGFuZC9vciBpbiBjb21iaW5hdGlvbiB3aXRoIAorICAgICAgaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLCB0byBtYWtlLCB1c2UsIHNlbGwsIAorICAgICAgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mOiAxKSBNb2RpZmljYXRpb25zIG1hZGUgCisgICAgICBieSB0aGF0IENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKTsgYW5kIDIpIHRoZSBjb21iaW5hdGlvbiBvZiAKKyAgICAgIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIAorICAgICAgb2Ygc3VjaCBjb21iaW5hdGlvbikuIAorCisgICAgICAoYykgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gU2VjdGlvbnMgMi4yKGEpIGFuZCAyLjIoYikgYXJlIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSAKKyAgICAgIENvbnRyaWJ1dG9yIGZpcnN0IG1ha2VzIENvbW1lcmNpYWwgVXNlIG9mIHRoZSBDb3ZlcmVkIENvZGUuIAorCisgICAgICAoZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4yKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOgorCisgICAgICAgICAxKSBmb3IgYW55IGNvZGUgdGhhdCBDb250cmlidXRvciBoYXMgZGVsZXRlZCBmcm9tIHRoZSBDb250cmlidXRvciAKKyAgICAgICAgIFZlcnNpb247IAorCisgICAgICAgICAyKSBzZXBhcmF0ZSBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyAKKworICAgICAgICAgMykgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkIGJ5OiAKKworICAgICAgICAgaSkgdGhpcmQgcGFydHkgbW9kaWZpY2F0aW9ucyBvZiBDb250cmlidXRvciBWZXJzaW9uIG9yIAorCisgICAgICAgICAgICBpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggCisgICAgICAgICAgICBvdGhlciBzb2Z0d2FyZSAoZXhjZXB0IGFzIHBhcnQgb2YgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24pIG9yIAorICAgICAgICAgICAgb3RoZXIgZGV2aWNlczsgb3IgCisKKyAgICAgICAgIDQpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IENvdmVyZWQgQ29kZSBpbiB0aGUgYWJzZW5jZSBvZiAKKyAgICAgICAgIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yLiAKKworCisgICAzLiBEaXN0cmlidXRpb24gT2JsaWdhdGlvbnMuCisKKworICAgICAgMy4xLiBBcHBsaWNhdGlvbiBvZiBMaWNlbnNlLiBUaGUgTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIAorICAgICAgWW91IGNvbnRyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IAorICAgICAgbGltaXRhdGlvbiBTZWN0aW9uIDIuMi4gVGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG1heSBiZSAKKyAgICAgIGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgCisgICAgICBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNi4xLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyAKKyAgICAgIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBZb3UgZGlzdHJpYnV0ZS4gWW91IG1heSBub3Qgb2ZmZXIgCisgICAgICBvciBpbXBvc2UgYW55IHRlcm1zIG9uIGFueSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHRoYXQgYWx0ZXJzIG9yIHJlc3RyaWN0cyB0aGUgCisgICAgICBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzJyByaWdodHMgaGVyZXVuZGVyLiBIb3dldmVyLCAKKyAgICAgIFlvdSBtYXkgaW5jbHVkZSBhbiBhZGRpdGlvbmFsIGRvY3VtZW50IG9mZmVyaW5nIHRoZSBhZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQgCisgICAgICBpbiBTZWN0aW9uIDMuNS4gCisKKworICAgICAgMy4yLiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuIEFueSBNb2RpZmljYXRpb24gd2hpY2ggWW91IGNyZWF0ZSBvciB0byAKKyAgICAgIHdoaWNoIFlvdSBjb250cmlidXRlIG11c3QgYmUgbWFkZSBhdmFpbGFibGUgaW4gU291cmNlIENvZGUgZm9ybSB1bmRlciB0aGUgCisgICAgICB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgZWl0aGVyIG9uIHRoZSBzYW1lIG1lZGlhIGFzIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciB2aWEgCisgICAgICBhbiBhY2NlcHRlZCBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gdG8gYW55b25lIHRvIHdob20geW91IG1hZGUgCisgICAgICBhbiBFeGVjdXRhYmxlIHZlcnNpb24gYXZhaWxhYmxlOyBhbmQgaWYgbWFkZSBhdmFpbGFibGUgdmlhIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIAorICAgICAgTWVjaGFuaXNtLCBtdXN0IHJlbWFpbiBhdmFpbGFibGUgZm9yIGF0IGxlYXN0IHR3ZWx2ZSAoMTIpIG1vbnRocyBhZnRlciB0aGUgCisgICAgICBkYXRlIGl0IGluaXRpYWxseSBiZWNhbWUgYXZhaWxhYmxlLCBvciBhdCBsZWFzdCBzaXggKDYpIG1vbnRocyBhZnRlciBhIHN1YnNlcXVlbnQgCisgICAgICB2ZXJzaW9uIG9mIHRoYXQgcGFydGljdWxhciBNb2RpZmljYXRpb24gaGFzIGJlZW4gbWFkZSBhdmFpbGFibGUgdG8gc3VjaCAKKyAgICAgIHJlY2lwaWVudHMuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gCisgICAgICByZW1haW5zIGF2YWlsYWJsZSBldmVuIGlmIHRoZSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gaXMgbWFpbnRhaW5lZCBieSAKKyAgICAgIGEgdGhpcmQgcGFydHkuIAorCisKKyAgICAgIDMuMy4gRGVzY3JpcHRpb24gb2YgTW9kaWZpY2F0aW9ucy4gWW91IG11c3QgY2F1c2UgYWxsIENvdmVyZWQgQ29kZSB0byAKKyAgICAgIHdoaWNoIFlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4gYSBmaWxlIGRvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIFlvdSBtYWRlIHRvIAorICAgICAgY3JlYXRlIHRoYXQgQ292ZXJlZCBDb2RlIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLiBZb3UgbXVzdCBpbmNsdWRlIGEgCisgICAgICBwcm9taW5lbnQgc3RhdGVtZW50IHRoYXQgdGhlIE1vZGlmaWNhdGlvbiBpcyBkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIAorICAgICAgT3JpZ2luYWwgQ29kZSBwcm92aWRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGluY2x1ZGluZyB0aGUgbmFtZSBvZiB0aGUgCisgICAgICBJbml0aWFsIERldmVsb3BlciBpbiAKKworICAgICAgICAgKGEpIHRoZSBTb3VyY2UgQ29kZSwgYW5kCisKKyAgICAgICAgIChiKSBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gaW4gCisgICAgICAgICB3aGljaCBZb3UgZGVzY3JpYmUgdGhlIG9yaWdpbiBvciBvd25lcnNoaXAgb2YgdGhlIENvdmVyZWQgQ29kZS4KKworCisgICAgICAzLjQuIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzCisKKyAgICAgICAgIGEpIFRoaXJkIFBhcnR5IENsYWltcy4gSWYgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSB0aGF0IGEgbGljZW5zZSB1bmRlciAKKyAgICAgICAgIGEgdGhpcmQgcGFydHkncyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZSAKKyAgICAgICAgIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiwgCisgICAgICAgICBDb250cmlidXRvciBtdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgU291cmNlIENvZGUgZGlzdHJpYnV0aW9uIAorICAgICAgICAgdGl0bGVkICJMRUdBTCcnIHdoaWNoIGRlc2NyaWJlcyB0aGUgY2xhaW0gYW5kIHRoZSBwYXJ0eSBtYWtpbmcgdGhlIGNsYWltIAorICAgICAgICAgaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudCB3aWxsIGtub3cgd2hvbSB0byBjb250YWN0LiBJZiAKKyAgICAgICAgIENvbnRyaWJ1dG9yIG9idGFpbnMgc3VjaCBrbm93bGVkZ2UgYWZ0ZXIgdGhlIE1vZGlmaWNhdGlvbiBpcyBtYWRlIAorICAgICAgICAgYXZhaWxhYmxlIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMiwgQ29udHJpYnV0b3Igc2hhbGwgcHJvbXB0bHkgbW9kaWZ5IAorICAgICAgICAgdGhlIExFR0FMIGZpbGUgaW4gYWxsIGNvcGllcyBDb250cmlidXRvciBtYWtlcyBhdmFpbGFibGUgdGhlcmVhZnRlciBhbmQgCisgICAgICAgICBzaGFsbCB0YWtlIG90aGVyIHN0ZXBzIChzdWNoIGFzIG5vdGlmeWluZyBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3RzIG9yIAorICAgICAgICAgbmV3c2dyb3VwcykgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSB0aG9zZSB3aG8gcmVjZWl2ZWQgdGhlIAorICAgICAgICAgQ292ZXJlZCBDb2RlIHRoYXQgbmV3IGtub3dsZWRnZSBoYXMgYmVlbiBvYnRhaW5lZC4gCisKKyAgICAgICAgIChiKSBDb250cmlidXRvciBBUElzLiBJZiBDb250cmlidXRvcidzIE1vZGlmaWNhdGlvbnMgaW5jbHVkZSBhbiBhcHBsaWNhdGlvbiAKKyAgICAgICAgIHByb2dyYW1taW5nIGludGVyZmFjZSBhbmQgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSBvZiBwYXRlbnQgCisgICAgICAgICBsaWNlbnNlcyB3aGljaCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCAKKyAgICAgICAgIENvbnRyaWJ1dG9yIG11c3QgYWxzbyBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIExFR0FMIGZpbGUuIAorCisKKyAgICAgICAgIChjKSBSZXByZXNlbnRhdGlvbnMuIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCwgZXhjZXB0IGFzIGRpc2Nsb3NlZCAKKyAgICAgICAgIHB1cnN1YW50IHRvIFNlY3Rpb24gMy40KGEpIGFib3ZlLCBDb250cmlidXRvciBiZWxpZXZlcyB0aGF0IENvbnRyaWJ1dG9yJ3MgCisgICAgICAgICBNb2RpZmljYXRpb25zIGFyZSBDb250cmlidXRvcidzIG9yaWdpbmFsIGNyZWF0aW9uKHMpIGFuZC9vciBDb250cmlidXRvciAKKyAgICAgICAgIGhhcyBzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudCB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5IHRoaXMgTGljZW5zZS4gCisKKworICAgICAgMy41LiBSZXF1aXJlZCBOb3RpY2VzLiBZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIAorICAgICAgb2YgdGhlIFNvdXJjZSBDb2RlLiBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHN1Y2ggbm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UgCisgICAgICBDb2RlIGZpbGUgZHVlIHRvIGl0cyBzdHJ1Y3R1cmUsIHRoZW4gWW91IG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhIGxvY2F0aW9uIAorICAgICAgKHN1Y2ggYXMgYSByZWxldmFudCBkaXJlY3RvcnkpIHdoZXJlIGEgdXNlciB3b3VsZCBiZSBsaWtlbHkgdG8gbG9vayBmb3Igc3VjaCBhIAorICAgICAgbm90aWNlLiBJZiBZb3UgY3JlYXRlZCBvbmUgb3IgbW9yZSBNb2RpZmljYXRpb24ocykgWW91IG1heSBhZGQgeW91ciBuYW1lIGFzIAorICAgICAgYSBDb250cmlidXRvciB0byB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuIFlvdSBtdXN0IGFsc28gZHVwbGljYXRlIHRoaXMgCisgICAgICBMaWNlbnNlIGluIGFueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgU291cmNlIENvZGUgd2hlcmUgWW91IGRlc2NyaWJlIAorICAgICAgcmVjaXBpZW50cycgcmlnaHRzIG9yIG93bmVyc2hpcCByaWdodHMgcmVsYXRpbmcgdG8gQ292ZXJlZCBDb2RlLiBZb3UgbWF5IAorICAgICAgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciAKKyAgICAgIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91IAorICAgICAgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmLCBhbmQgbm90IG9uIGJlaGFsZiBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgCisgICAgICBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGFuIGFueSBzdWNoIHdhcnJhbnR5LCAKKyAgICAgIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kIFlvdSAKKyAgICAgIGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IAorICAgICAgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIAorICAgICAgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLiAKKworCisgICAgICAzLjYuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLiBZb3UgbWF5IGRpc3RyaWJ1dGUgQ292ZXJlZCAKKyAgICAgIENvZGUgaW4gRXhlY3V0YWJsZSBmb3JtIG9ubHkgaWYgdGhlIHJlcXVpcmVtZW50cyBvZiBTZWN0aW9uIDMuMS0zLjUgaGF2ZSBiZWVuIAorICAgICAgbWV0IGZvciB0aGF0IENvdmVyZWQgQ29kZSwgYW5kIGlmIFlvdSBpbmNsdWRlIGEgbm90aWNlIHN0YXRpbmcgdGhhdCB0aGUgU291cmNlIAorICAgICAgQ29kZSB2ZXJzaW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIAorICAgICAgaW5jbHVkaW5nIGEgZGVzY3JpcHRpb24gb2YgaG93IGFuZCB3aGVyZSBZb3UgaGF2ZSBmdWxmaWxsZWQgdGhlIG9ibGlnYXRpb25zIG9mIAorICAgICAgU2VjdGlvbiAzLjIuIFRoZSBub3RpY2UgbXVzdCBiZSBjb25zcGljdW91c2x5IGluY2x1ZGVkIGluIGFueSBub3RpY2UgaW4gYW4gCisgICAgICBFeGVjdXRhYmxlIHZlcnNpb24sIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvciBjb2xsYXRlcmFsIGluIHdoaWNoIFlvdSBkZXNjcmliZSAKKyAgICAgIHJlY2lwaWVudHMnIHJpZ2h0cyByZWxhdGluZyB0byB0aGUgQ292ZXJlZCBDb2RlLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIAorICAgICAgRXhlY3V0YWJsZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBvciBvd25lcnNoaXAgcmlnaHRzIHVuZGVyIGEgbGljZW5zZSBvZiAKKyAgICAgIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIAorICAgICAgdGhhdCBZb3UgYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBoYXQgdGhlIGxpY2Vuc2UgCisgICAgICBmb3IgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnQncyByaWdodHMgCisgICAgICBpbiB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBmcm9tIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIHRoaXMgTGljZW5zZS4gSWYgWW91IAorICAgICAgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgWW91IG11c3QgbWFrZSBpdCAKKyAgICAgIGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IAorICAgICAgWW91IGFsb25lLCBub3QgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IGhlcmVieSBhZ3JlZSB0byAKKyAgICAgIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IAorICAgICAgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2ggdGVybXMgWW91IAorICAgICAgb2ZmZXIuIAorCisKKyAgICAgIDMuNy4gTGFyZ2VyIFdvcmtzLiBZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIAorICAgICAgQ29kZSB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgCisgICAgICB0aGUgTGFyZ2VyIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgCisgICAgICByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUuIAorCisKKyAgIDQuIEluYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIFN0YXR1dGUgb3IgUmVndWxhdGlvbi4KKworICAgIAorCisgICBJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciBZb3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IAorICAgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZSBkdWUgdG8gc3RhdHV0ZSwganVkaWNpYWwgb3JkZXIsIG9yIHJlZ3VsYXRpb24gdGhlbiBZb3UgCisgICBtdXN0OiAKKworICAgICAgKGEpIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlOyBhbmQgCisKKyAgICAgIChiKSBkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgCisgICAgICBpbmNsdWRlZCBpbiB0aGUgTEVHQUwgZmlsZSBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjQgYW5kIG11c3QgYmUgaW5jbHVkZWQgd2l0aCAKKyAgICAgIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBTb3VyY2UgQ29kZS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIAorICAgICAgb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIHN1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSByZWNpcGllbnQgb2YgCisgICAgICBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlIHRvIHVuZGVyc3RhbmQgaXQuIAorCisKKyAgIDUuIEFwcGxpY2F0aW9uIG9mIHRoaXMgTGljZW5zZS4KKworICAgIAorCisgICBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIHRoZSBJbml0aWFsIERldmVsb3BlciBoYXMgYXR0YWNoZWQgdGhlIG5vdGljZSBpbiAKKyAgIEV4aGliaXQgQSBhbmQgdG8gcmVsYXRlZCBDb3ZlcmVkIENvZGUuIAorCisKKyAgIDYuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLgorCisKKyAgICAgIDYuMS4gTmV3IFZlcnNpb25zLiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhpcyBjb2RlIG1heSBwdWJsaXNoIHJldmlzZWQgCisgICAgICBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSAKKyAgICAgIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIAorCisKKyAgICAgIDYuMi4gRWZmZWN0IG9mIE5ldyBWZXJzaW9ucy4gT25jZSBDb3ZlcmVkIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIAorICAgICAgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsIFlvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciAKKyAgICAgIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggQ292ZXJlZCBDb2RlIAorICAgICAgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IHRoZSAKKyAgICAgIEluaXRpYWwgRGV2ZWxvcGVyLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgCisgICAgICB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIENvZGUgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKKworICAgICAgNi4zLiBEZXJpdmF0aXZlIFdvcmtzLiBJZiBZb3UgY3JlYXRlIG9yIHVzZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIAorICAgICAgKHdoaWNoIHlvdSBtYXkgb25seSBkbyBpbiBvcmRlciB0byBhcHBseSBpdCB0byBjb2RlIHdoaWNoIGlzIG5vdCBhbHJlYWR5IAorICAgICAgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSksIFlvdSBtdXN0IAorCisgICAgICAgICAoYSkgcmVuYW1lIFlvdXIgbGljZW5zZSBzbyB0aGF0IHRoZSBwaHJhc2VzICcnTW96aWxsYScnLCAnJ01PWklMTEFQTCcnLCAKKyAgICAgICAgICcnTU9aUEwnJywgJydOZXRzY2FwZScnLCAiTVBMIiwgJydOUEwiLCBvciBhbnkgY29uZnVzaW5nbHkgc2ltaWxhciBwaHJhc2VzIAorICAgICAgICAgZG8gbm90IGFwcGVhciBpbiB5b3VyIGxpY2Vuc2UgKGV4Y2VwdCB0byBub3RlIHRoYXQgeW91ciBsaWNlbnNlIGRpZmZlcnMgCisgICAgICAgICBmcm9tIHRoaXMgTGljZW5zZSkgYW5kIAorCisgICAgICAgICAoYikgb3RoZXJ3aXNlIG1ha2UgaXQgY2xlYXIgdGhhdCBZb3VyIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UgY29udGFpbnMgCisgICAgICAgICB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBhbmQgTmV0c2NhcGUgUHVibGljIAorICAgICAgICAgTGljZW5zZS4gKEZpbGxpbmcgaW4gdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBDb2RlIG9yIAorICAgICAgICAgQ29udHJpYnV0b3IgaW4gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBIHNoYWxsIG5vdCBvZiB0aGVtc2VsdmVzIAorICAgICAgICAgYmUgZGVlbWVkIHRvIGJlIG1vZGlmaWNhdGlvbnMgb2YgdGhpcyBMaWNlbnNlLikgCisKKworICAgICAgNi40IE9yaWdpbiBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIncyBQdWJsaWMgTGljZW5zZS4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyJ3MgCisgICAgICBQdWJsaWMgTGljZW5zZSBpcyBiYXNlZCBvbiB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWIDEuMSB3aXRoIHRoZSBmb2xsb3dpbmcgCisgICAgICBjaGFuZ2VzOiAKKworICAgICAgICAgMSkgVGhlIGxpY2Vuc2UgaXMgcHVibGlzaGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGlzIGNvZGUuIE9ubHkgdGhlIAorICAgICAgICAgSW5pdGlhbCBEZXZlbG9wZXIgY2FuIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIENvZGUuIAorCisgICAgICAgICAyKSBUaGUgbGljZW5zZSBjYW4gYmUgbW9kaWZpZWQgYW5kIHVzZWQgZm9yIGNvZGUgd2hpY2ggaXMgbm90IGFscmVhZHkgCisgICAgICAgICBnb3Zlcm5lZCBieSB0aGlzIGxpY2Vuc2UuIE1vZGlmaWVkIHZlcnNpb25zIG9mIHRoZSBsaWNlbnNlIG11c3QgYmUgCisgICAgICAgICByZW5hbWVkIHRvIGF2b2lkIGNvbmZ1c2lvbiB3aXRoIE5ldHNjYXBlJ3MgbGljZW5zZSBJbml0aWFsIERldmVsb3BlcidzJ3MgCisgICAgICAgICBsaWNlbnNlIGFuZCBtdXN0IGluY2x1ZGUgYSBkZXNjcmlwdGlvbiBvZiBjaGFuZ2VzIGZyb20gdGhlIEluaXRpYWwgCisgICAgICAgICBEZXZlbG9wZXIncyBQdWJsaWMgTGljZW5zZS4gCisKKyAgICAgICAgIDMpIFRoZSBuYW1lIG9mIHRoZSBsaWNlbnNlIGluIEV4aGliaXQgQSBpcyB0aGUgIkluaXRpYWwgRGV2ZWxvcGVyJ3MgUHVibGljIAorICAgICAgICAgTGljZW5zZSIuCisKKyAgICAgICAgIDQpIFRoZSByZWZlcmVuY2UgdG8gYW4gYWx0ZXJuYXRpdmUgbGljZW5zZSBpbiBFeGhpYml0IEEgaGFzIGJlZW4gcmVtb3ZlZAorCisgICAgICAgICAuIAorICAgICAgICAgNSkgQW1lbmRtZW50cyBJLCBJSSwgSUlJLCBWLCBhbmQgVkkgaGF2ZSBiZWVuIGRlbGV0ZWQuCisKKyAgICAgICAgIDYpIEV4aGliaXQgQSwgTmV0c2NhcGUgUHVibGljIExpY2Vuc2UgaGFzIGJlZW4gZGVsZXRlZAorCisKKyAgIDcuIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkuCisKKyAgICAKKworICAgQ09WRVJFRCBDT0RFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiAiQVMgSVMnJyBCQVNJUywgV0lUSE9VVCAKKyAgIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVCAKKyAgIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgVEhBVCBUSEUgQ09WRVJFRCBDT0RFIElTIEZSRUUgT0YgREVGRUNUUywgCisgICBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuIFRIRSAKKyAgIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgQ09WRVJFRCBDT0RFIElTIAorICAgV0lUSCBZT1UuIFNIT1VMRCBBTlkgQ09WRVJFRCBDT0RFIFBST1ZFIERFRkVDVElWRSBJTiBBTlkgUkVTUEVDVCwgCisgICBZT1UgKE5PVCBUSEUgSU5JVElBTCBERVZFTE9QRVIgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIAorICAgQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUiAKKyAgIE9GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gVVNFIE9GIAorICAgQU5ZIENPVkVSRUQgQ09ERSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyAKKyAgIERJU0NMQUlNRVIuIAorCisKKyAgIDguIFRFUk1JTkFUSU9OLgorCisgICAgCisgICAgICA4LjEuIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IAorICAgICAgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwIAorICAgICAgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSAKKyAgICAgIHdoaWNoIGFyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gCisgICAgICBQcm92aXNpb25zIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIAorICAgICAgb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUuIAorCisgICAgICA4LjIuIElmIFlvdSBpbml0aWF0ZSBsaXRpZ2F0aW9uIGJ5IGFzc2VydGluZyBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gKGV4Y2x1ZGluZyAKKyAgICAgIGRlY2xhdG9yeSBqdWRnbWVudCBhY3Rpb25zKSBhZ2FpbnN0IEluaXRpYWwgRGV2ZWxvcGVyIG9yIGEgQ29udHJpYnV0b3IgKHRoZSBJbml0aWFsIAorICAgICAgRGV2ZWxvcGVyIG9yIENvbnRyaWJ1dG9yIGFnYWluc3Qgd2hvbSBZb3UgZmlsZSBzdWNoIGFjdGlvbiBpcyByZWZlcnJlZCB0byBhcyAKKyAgICAgICJQYXJ0aWNpcGFudCIpIGFsbGVnaW5nIHRoYXQ6CisKKyAgICAgICAgIChhKSBzdWNoIFBhcnRpY2lwYW50J3MgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyAKKyAgICAgICAgIGFueSBwYXRlbnQsIHRoZW4gYW55IGFuZCBhbGwgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB0byBZb3UgCisgICAgICAgICB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwsIHVwb24gNjAgZGF5cyBub3RpY2UgCisgICAgICAgICBmcm9tIFBhcnRpY2lwYW50IHRlcm1pbmF0ZSBwcm9zcGVjdGl2ZWx5LCB1bmxlc3MgaWYgd2l0aGluIDYwIGRheXMgYWZ0ZXIgCisgICAgICAgICByZWNlaXB0IG9mIG5vdGljZSBZb3UgZWl0aGVyOgorCisgICAgICAgICAgICAoaSkgYWdyZWUgaW4gd3JpdGluZyB0byBwYXkgUGFydGljaXBhbnQgYSBtdXR1YWxseSBhZ3JlZWFibGUgCisgICAgICAgICAgICByZWFzb25hYmxlIHJveWFsdHkgZm9yIFlvdXIgcGFzdCBhbmQgZnV0dXJlIHVzZSBvZiBNb2RpZmljYXRpb25zIAorICAgICAgICAgICAgbWFkZSBieSBzdWNoIFBhcnRpY2lwYW50LCBvciAKKworICAgICAgICAgICAgKGlpKSB3aXRoZHJhdyBZb3VyIGxpdGlnYXRpb24gY2xhaW0gd2l0aCByZXNwZWN0IHRvIHRoZSBDb250cmlidXRvciAKKyAgICAgICAgICAgIFZlcnNpb24gYWdhaW5zdCBzdWNoIFBhcnRpY2lwYW50LiAKKworCisgICAgICAgICBJZiB3aXRoaW4gNjAgZGF5cyBvZiBub3RpY2UsIGEgcmVhc29uYWJsZSByb3lhbHR5IGFuZCBwYXltZW50IAorICAgICAgICAgYXJyYW5nZW1lbnQgYXJlIG5vdCBtdXR1YWxseSBhZ3JlZWQgdXBvbiBpbiB3cml0aW5nIGJ5IHRoZSBwYXJ0aWVzIG9yIAorICAgICAgICAgdGhlIGxpdGlnYXRpb24gY2xhaW0gaXMgbm90IHdpdGhkcmF3biwgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IFBhcnRpY2lwYW50IHRvIAorICAgICAgICAgWW91IHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIGF0IHRoZSAKKyAgICAgICAgIGV4cGlyYXRpb24gb2YgdGhlIDYwIGRheSBub3RpY2UgcGVyaW9kIHNwZWNpZmllZCBhYm92ZS4gCisKKyAgICAgICAgIChiKSBhbnkgc29mdHdhcmUsIGhhcmR3YXJlLCBvciBkZXZpY2UsIG90aGVyIHRoYW4gc3VjaCBQYXJ0aWNpcGFudCdzIAorICAgICAgICAgQ29udHJpYnV0b3IgVmVyc2lvbiwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbiBhbnkgCisgICAgICAgICByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEoYikgYW5kIAorICAgICAgICAgMi4yKGIpIGFyZSByZXZva2VkIGVmZmVjdGl2ZSBhcyBvZiB0aGUgZGF0ZSBZb3UgZmlyc3QgbWFkZSwgdXNlZCwgc29sZCwgCisgICAgICAgICBkaXN0cmlidXRlZCwgb3IgaGFkIG1hZGUsIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IFBhcnRpY2lwYW50LiAKKworICAgICAgOC4zLiBJZiBZb3UgYXNzZXJ0IGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSBhZ2FpbnN0IFBhcnRpY2lwYW50IGFsbGVnaW5nIHRoYXQgCisgICAgICBzdWNoIFBhcnRpY2lwYW50J3MgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50IAorICAgICAgd2hlcmUgc3VjaCBjbGFpbSBpcyByZXNvbHZlZCAoc3VjaCBhcyBieSBsaWNlbnNlIG9yIHNldHRsZW1lbnQpIHByaW9yIHRvIHRoZSAKKyAgICAgIGluaXRpYXRpb24gb2YgcGF0ZW50IGluZnJpbmdlbWVudCBsaXRpZ2F0aW9uLCB0aGVuIHRoZSByZWFzb25hYmxlIHZhbHVlIG9mIHRoZSAKKyAgICAgIGxpY2Vuc2VzIGdyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yIHNoYWxsIGJlIHRha2VuIAorICAgICAgaW50byBhY2NvdW50IGluIGRldGVybWluaW5nIHRoZSBhbW91bnQgb3IgdmFsdWUgb2YgYW55IHBheW1lbnQgb3IgbGljZW5zZS4gCisKKyAgICAgIDguNC4gSW4gdGhlIGV2ZW50IG9mIHRlcm1pbmF0aW9uIHVuZGVyIFNlY3Rpb25zIDguMSBvciA4LjIgYWJvdmUsIGFsbCBlbmQgdXNlciAKKyAgICAgIGxpY2Vuc2UgYWdyZWVtZW50cyAoZXhjbHVkaW5nIGRpc3RyaWJ1dG9ycyBhbmQgcmVzZWxsZXJzKSB3aGljaCBoYXZlIGJlZW4gCisgICAgICB2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIGFueSBkaXN0cmlidXRvciBoZXJldW5kZXIgcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgCisgICAgICBzdXJ2aXZlIHRlcm1pbmF0aW9uLiAKKworCisgICA5LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS4KKworCisgICBVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVCAKKyAgIChJTkNMVURJTkcgTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFlPVSwgVEhFIElOSVRJQUwgCisgICBERVZFTE9QRVIsIEFOWSBPVEhFUiBDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIENPVkVSRUQgCisgICBDT0RFLCBPUiBBTlkgU1VQUExJRVIgT0YgQU5ZIE9GIFNVQ0ggUEFSVElFUywgQkUgTElBQkxFIFRPIEFOWSBQRVJTT04gCisgICBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIAorICAgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIAorICAgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sIE9SIEFOWSAKKyAgIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBBUlRZIAorICAgU0hBTEwgSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgCisgICBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiAKKyAgIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZJ1MgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIAorICAgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCAKKyAgIEFMTE9XIFRIRSBFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgCisgICBEQU1BR0VTLCBTTyBUSElTIEVYQ0xVU0lPTiBBTkQgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4gCisKKworICAgMTAuIFUuUy4gR09WRVJOTUVOVCBFTkQgVVNFUlMuCisKKworICAgVGhlIENvdmVyZWQgQ29kZSBpcyBhICcnY29tbWVyY2lhbCBpdGVtLCcnIGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluIDQ4IEMuRi5SLiAyLjEwMSAKKyAgIChPY3QuIDE5OTUpLCBjb25zaXN0aW5nIG9mICcnY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZScnIGFuZCAnJ2NvbW1lcmNpYWwgY29tcHV0ZXIgCisgICBzb2Z0d2FyZSBkb2N1bWVudGF0aW9uLCcnIGFzIHN1Y2ggdGVybXMgYXJlIHVzZWQgaW4gNDggQy5GLlIuIDEyLjIxMiAoU2VwdC4gMTk5NSkuIAorICAgQ29uc2lzdGVudCB3aXRoIDQ4IEMuRi5SLiAxMi4yMTIgYW5kIDQ4IEMuRi5SLiAyMjcuNzIwMi0xIHRocm91Z2ggMjI3LjcyMDItNCAoSnVuZSAKKyAgIDE5OTUpLCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIENvdmVyZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIAorICAgc2V0IGZvcnRoIGhlcmVpbi4gCisKKworICAgMTEuIE1JU0NFTExBTkVPVVMuCisKKworICAgVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gSWYgCisgICBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIAorICAgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgCisgICBnb3Zlcm5lZCBieSBDYWxpZm9ybmlhIGxhdyBwcm92aXNpb25zIChleGNlcHQgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdywgaWYgYW55LCAKKyAgIHByb3ZpZGVzIG90aGVyd2lzZSksIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIFdpdGggcmVzcGVjdCB0byBkaXNwdXRlcyAKKyAgIGluIHdoaWNoIGF0IGxlYXN0IG9uZSBwYXJ0eSBpcyBhIGNpdGl6ZW4gb2YsIG9yIGFuIGVudGl0eSBjaGFydGVyZWQgb3IgcmVnaXN0ZXJlZCB0byBkbyAKKyAgIGJ1c2luZXNzIGluIHRoZSBVbml0ZWQgU3RhdGVzIG9mIEFtZXJpY2EsIGFueSBsaXRpZ2F0aW9uIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBzaGFsbCBiZSAKKyAgIHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgRmVkZXJhbCBDb3VydHMgb2YgdGhlIE5vcnRoZXJuIERpc3RyaWN0IG9mIENhbGlmb3JuaWEsIAorICAgd2l0aCB2ZW51ZSBseWluZyBpbiBTYW50YSBDbGFyYSBDb3VudHksIENhbGlmb3JuaWEsIHdpdGggdGhlIGxvc2luZyBwYXJ0eSByZXNwb25zaWJsZSBmb3IgCisgICBjb3N0cywgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgY291cnQgY29zdHMgYW5kIHJlYXNvbmFibGUgYXR0b3JuZXlzJyBmZWVzIGFuZCAKKyAgIGV4cGVuc2VzLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgCisgICBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggCisgICBwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHNoYWxsIAorICAgbm90IGFwcGx5IHRvIHRoaXMgTGljZW5zZS4gCisKKworICAgMTIuIFJFU1BPTlNJQklMSVRZIEZPUiBDTEFJTVMuCisKKworICAgQXMgYmV0d2VlbiBJbml0aWFsIERldmVsb3BlciBhbmQgdGhlIENvbnRyaWJ1dG9ycywgZWFjaCBwYXJ0eSBpcyByZXNwb25zaWJsZSBmb3IgY2xhaW1zIAorICAgYW5kIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgb3V0IG9mIGl0cyB1dGlsaXphdGlvbiBvZiByaWdodHMgdW5kZXIgdGhpcyAKKyAgIExpY2Vuc2UgYW5kIFlvdSBhZ3JlZSB0byB3b3JrIHdpdGggSW5pdGlhbCBEZXZlbG9wZXIgYW5kIENvbnRyaWJ1dG9ycyB0byBkaXN0cmlidXRlIAorICAgc3VjaCByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuIE5vdGhpbmcgaGVyZWluIGlzIGludGVuZGVkIG9yIHNoYWxsIGJlIAorICAgZGVlbWVkIHRvIGNvbnN0aXR1dGUgYW55IGFkbWlzc2lvbiBvZiBsaWFiaWxpdHkuIAorCisKKyAgIDEzLiBNVUxUSVBMRS1MSUNFTlNFRCBDT0RFLgorCisKKyAgIEluaXRpYWwgRGV2ZWxvcGVyIG1heSBkZXNpZ25hdGUgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgQ29kZSBhcyAiTXVsdGlwbGUtTGljZW5zZWQiLiAKKyAgICJNdWx0aXBsZS1MaWNlbnNlZCIgbWVhbnMgdGhhdCB0aGUgSW5pdGlhbCBEZXZwb2Vsb3BlciBwZXJtaXRzIHlvdSB0byB1dGlsaXplIHBvcnRpb25zIG9mIAorICAgdGhlIENvdmVyZWQgQ29kZSB1bmRlciBZb3VyIGNob2ljZSBvZiB0aGUgSURQTCBvciB0aGUgYWx0ZXJuYXRpdmUgbGljZW5zZXMsIGlmIGFueSwgCisgICBzcGVjaWZpZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIHRoZSBmaWxlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEuIAorCisgICBFWEhJQklUIEEgLUluaXRpYWwgRGV2ZWxvcGVyJ3MgUHVibGljIExpY2Vuc2UuCisKKyAgIFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIEluaXRpYWwgRGV2ZWxvcGVyJ3MgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgCisgICAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IAorICAgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5pYnBob2VuaXguY29tL2lkcGwuaHRtbCBTb2Z0d2FyZSAKKyAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgCisgICBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgCisgICBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworICAgVGhlIE9yaWdpbmFsIENvZGUgaXMgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uIAorCisgICBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMgX19fX19fX19fX19fX19fX19fX19fX19fLgorCisgICBQb3J0aW9ucyBjcmVhdGVkIGJ5IF9fX19fX19fX19fX19fX19fX19fX18gYXJlIENvcHlyaWdodCAoQykgX19fX19fIAorICAgX19fX19fX19fX19fX19fX19fX19fX18uCisKKyAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgIENvbnRyaWJ1dG9yKHMpOiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy4gCmRpZmYgLS1naXQgYS9saWNlbnNlcy9JSkcgYi9saWNlbnNlcy9JSkcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWNhNTc5NQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0lKRwpAQCAtMCwwICsxLDczIEBACitJbiBwbGFpbiBFbmdsaXNoOgorCisxLiBXZSBkb24ndCBwcm9taXNlIHRoYXQgdGhpcyBzb2Z0d2FyZSB3b3Jrcy4gIChCdXQgaWYgeW91IGZpbmQgYW55IGJ1Z3MsCisgICBwbGVhc2UgbGV0IHVzIGtub3chKQorMi4gWW91IGNhbiB1c2UgdGhpcyBzb2Z0d2FyZSBmb3Igd2hhdGV2ZXIgeW91IHdhbnQuICBZb3UgZG9uJ3QgaGF2ZSB0byBwYXkgdXMuCiszLiBZb3UgbWF5IG5vdCBwcmV0ZW5kIHRoYXQgeW91IHdyb3RlIHRoaXMgc29mdHdhcmUuICBJZiB5b3UgdXNlIGl0IGluIGEKKyAgIHByb2dyYW0sIHlvdSBtdXN0IGFja25vd2xlZGdlIHNvbWV3aGVyZSBpbiB5b3VyIGRvY3VtZW50YXRpb24gdGhhdAorICAgeW91J3ZlIHVzZWQgdGhlIElKRyBjb2RlLgorCitJbiBsZWdhbGVzZToKKworVGhlIGF1dGhvcnMgbWFrZSBOTyBXQVJSQU5UWSBvciByZXByZXNlbnRhdGlvbiwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZCwKK3dpdGggcmVzcGVjdCB0byB0aGlzIHNvZnR3YXJlLCBpdHMgcXVhbGl0eSwgYWNjdXJhY3ksIG1lcmNoYW50YWJpbGl0eSwgb3IKK2ZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLiAgVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAiQVMgSVMiLCBhbmQgeW91LAoraXRzIHVzZXIsIGFzc3VtZSB0aGUgZW50aXJlIHJpc2sgYXMgdG8gaXRzIHF1YWxpdHkgYW5kIGFjY3VyYWN5LgorCitUaGlzIHNvZnR3YXJlIGlzIGNvcHlyaWdodCAoQykgMTk5MS0yMDEyLCBUaG9tYXMgRy4gTGFuZSwgR3VpZG8gVm9sbGJlZGluZy4KK0FsbCBSaWdodHMgUmVzZXJ2ZWQgZXhjZXB0IGFzIHNwZWNpZmllZCBiZWxvdy4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworc29mdHdhcmUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGZvciBhbnkgcHVycG9zZSwgd2l0aG91dCBmZWUsIHN1YmplY3QgdG8gdGhlc2UKK2NvbmRpdGlvbnM6CisoMSkgSWYgYW55IHBhcnQgb2YgdGhlIHNvdXJjZSBjb2RlIGZvciB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkLCB0aGVuIHRoaXMKK1JFQURNRSBmaWxlIG11c3QgYmUgaW5jbHVkZWQsIHdpdGggdGhpcyBjb3B5cmlnaHQgYW5kIG5vLXdhcnJhbnR5IG5vdGljZQordW5hbHRlcmVkOyBhbmQgYW55IGFkZGl0aW9ucywgZGVsZXRpb25zLCBvciBjaGFuZ2VzIHRvIHRoZSBvcmlnaW5hbCBmaWxlcworbXVzdCBiZSBjbGVhcmx5IGluZGljYXRlZCBpbiBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbi4KKygyKSBJZiBvbmx5IGV4ZWN1dGFibGUgY29kZSBpcyBkaXN0cmlidXRlZCwgdGhlbiB0aGUgYWNjb21wYW55aW5nCitkb2N1bWVudGF0aW9uIG11c3Qgc3RhdGUgdGhhdCAidGhpcyBzb2Z0d2FyZSBpcyBiYXNlZCBpbiBwYXJ0IG9uIHRoZSB3b3JrIG9mCit0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cCIuCisoMykgUGVybWlzc2lvbiBmb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUgaXMgZ3JhbnRlZCBvbmx5IGlmIHRoZSB1c2VyIGFjY2VwdHMKK2Z1bGwgcmVzcG9uc2liaWxpdHkgZm9yIGFueSB1bmRlc2lyYWJsZSBjb25zZXF1ZW5jZXM7IHRoZSBhdXRob3JzIGFjY2VwdAorTk8gTElBQklMSVRZIGZvciBkYW1hZ2VzIG9mIGFueSBraW5kLgorCitUaGVzZSBjb25kaXRpb25zIGFwcGx5IHRvIGFueSBzb2Z0d2FyZSBkZXJpdmVkIGZyb20gb3IgYmFzZWQgb24gdGhlIElKRyBjb2RlLAorbm90IGp1c3QgdG8gdGhlIHVubW9kaWZpZWQgbGlicmFyeS4gIElmIHlvdSB1c2Ugb3VyIHdvcmssIHlvdSBvdWdodCB0bworYWNrbm93bGVkZ2UgdXMuCisKK1Blcm1pc3Npb24gaXMgTk9UIGdyYW50ZWQgZm9yIHRoZSB1c2Ugb2YgYW55IElKRyBhdXRob3IncyBuYW1lIG9yIGNvbXBhbnkgbmFtZQoraW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHJlbGF0aW5nIHRvIHRoaXMgc29mdHdhcmUgb3IgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCitpdC4gIFRoaXMgc29mdHdhcmUgbWF5IGJlIHJlZmVycmVkIHRvIG9ubHkgYXMgInRoZSBJbmRlcGVuZGVudCBKUEVHIEdyb3VwJ3MKK3NvZnR3YXJlIi4KKworV2Ugc3BlY2lmaWNhbGx5IHBlcm1pdCBhbmQgZW5jb3VyYWdlIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBhcyB0aGUgYmFzaXMgb2YKK2NvbW1lcmNpYWwgcHJvZHVjdHMsIHByb3ZpZGVkIHRoYXQgYWxsIHdhcnJhbnR5IG9yIGxpYWJpbGl0eSBjbGFpbXMgYXJlCithc3N1bWVkIGJ5IHRoZSBwcm9kdWN0IHZlbmRvci4KKworCithbnNpMmtuci5jIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGJ5IHBlcm1pc3Npb24gb2YgTC4gUGV0ZXIgRGV1dHNjaCwKK3NvbGUgcHJvcHJpZXRvciBvZiBpdHMgY29weXJpZ2h0IGhvbGRlciwgQWxhZGRpbiBFbnRlcnByaXNlcyBvZiBNZW5sbyBQYXJrLCBDQS4KK2Fuc2kya25yLmMgaXMgTk9UIGNvdmVyZWQgYnkgdGhlIGFib3ZlIGNvcHlyaWdodCBhbmQgY29uZGl0aW9ucywgYnV0IGluc3RlYWQKK2J5IHRoZSB1c3VhbCBkaXN0cmlidXRpb24gdGVybXMgb2YgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgcHJpbmNpcGFsbHksCit0aGF0IHlvdSBtdXN0IGluY2x1ZGUgc291cmNlIGNvZGUgaWYgeW91IHJlZGlzdHJpYnV0ZSBpdC4gIChTZWUgdGhlIGZpbGUKK2Fuc2kya25yLmMgZm9yIGZ1bGwgZGV0YWlscy4pICBIb3dldmVyLCBzaW5jZSBhbnNpMmtuci5jIGlzIG5vdCBuZWVkZWQgYXMgcGFydAorb2YgYW55IHByb2dyYW0gZ2VuZXJhdGVkIGZyb20gdGhlIElKRyBjb2RlLCB0aGlzIGRvZXMgbm90IGxpbWl0IHlvdSBtb3JlIHRoYW4KK3RoZSBmb3JlZ29pbmcgcGFyYWdyYXBocyBkby4KKworVGhlIFVuaXggY29uZmlndXJhdGlvbiBzY3JpcHQgImNvbmZpZ3VyZSIgd2FzIHByb2R1Y2VkIHdpdGggR05VIEF1dG9jb25mLgorSXQgaXMgY29weXJpZ2h0IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gYnV0IGlzIGZyZWVseSBkaXN0cmlidXRhYmxlLgorVGhlIHNhbWUgaG9sZHMgZm9yIGl0cyBzdXBwb3J0aW5nIHNjcmlwdHMgKGNvbmZpZy5ndWVzcywgY29uZmlnLnN1YiwKK2x0bWFpbi5zaCkuICBBbm90aGVyIHN1cHBvcnQgc2NyaXB0LCBpbnN0YWxsLXNoLCBpcyBjb3B5cmlnaHQgYnkgWCBDb25zb3J0aXVtCitidXQgaXMgYWxzbyBmcmVlbHkgZGlzdHJpYnV0YWJsZS4KKworVGhlIElKRyBkaXN0cmlidXRpb24gZm9ybWVybHkgaW5jbHVkZWQgY29kZSB0byByZWFkIGFuZCB3cml0ZSBHSUYgZmlsZXMuCitUbyBhdm9pZCBlbnRhbmdsZW1lbnQgd2l0aCB0aGUgVW5pc3lzIExaVyBwYXRlbnQsIEdJRiByZWFkaW5nIHN1cHBvcnQgaGFzCitiZWVuIHJlbW92ZWQgYWx0b2dldGhlciwgYW5kIHRoZSBHSUYgd3JpdGVyIGhhcyBiZWVuIHNpbXBsaWZpZWQgdG8gcHJvZHVjZQorInVuY29tcHJlc3NlZCBHSUZzIi4gIFRoaXMgdGVjaG5pcXVlIGRvZXMgbm90IHVzZSB0aGUgTFpXIGFsZ29yaXRobTsgdGhlCityZXN1bHRpbmcgR0lGIGZpbGVzIGFyZSBsYXJnZXIgdGhhbiB1c3VhbCwgYnV0IGFyZSByZWFkYWJsZSBieSBhbGwgc3RhbmRhcmQKK0dJRiBkZWNvZGVycy4KKworV2UgYXJlIHJlcXVpcmVkIHRvIHN0YXRlIHRoYXQKKyAgICAiVGhlIEdyYXBoaWNzIEludGVyY2hhbmdlIEZvcm1hdChjKSBpcyB0aGUgQ29weXJpZ2h0IHByb3BlcnR5IG9mCisgICAgQ29tcHVTZXJ2ZSBJbmNvcnBvcmF0ZWQuICBHSUYoc20pIGlzIGEgU2VydmljZSBNYXJrIHByb3BlcnR5IG9mCisgICAgQ29tcHVTZXJ2ZSBJbmNvcnBvcmF0ZWQuIgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvSVBBZm9udCBiL2xpY2Vuc2VzL0lQQWZvbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NiMWU1NAotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0lQQWZvbnQKQEAgLTAsMCArMSwxMTYgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJUEEgRm9udCBMaWNlbnNlIEFncmVlbWVudCB2MS4wIDxKYXBhbmVzZS9FbmdsaXNoPgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSVBB44OV44Kp44Oz44OI44Op44Kk44K744Oz44K5djEuMAorCivoqLHoq77ogIXjga/jgIHjgZPjga7kvb/nlKjoqLHoq77vvIjku6XkuIvjgIzmnKzlpZHntITjgI3jgajjgYTjgYTjgb7jgZnjgILvvInjgavlrprjgoHjgovmnaHku7bjga7kuIvjgafjgIHoqLHoq77jg5fjg63jgrDjg6njg6DvvIgx5p2h44Gr5a6a576p44GZ44KL44Go44GT44KN44Gr44KI44KK44G+44GZ44CC77yJ44KS5o+Q5L6b44GX44G+44GZ44CC5Y+X6aCY6ICF77yIMeadoeOBq+Wumue+qeOBmeOCi+OBqOOBk+OCjeOBq+OCiOOCiuOBvuOBmeOAgu+8ieOBjOOAgeioseirvuODl+ODreOCsOODqeODoOOCkuS9v+eUqOOBl+OAgeikh+ijveOBl+OAgeOBvuOBn+OBr+mgkuW4g+OBmeOCi+ihjOeCuuOAgeOBneOBruS7luOAgeacrOWlkee0hOOBq+WumuOCgeOCi+aoqeWIqeOBruWIqeeUqOOCkuihjOOBo+OBn+WgtOWQiOOAgeWPl+mgmOiAheOBr+acrOWlkee0hOOBq+WQjOaEj+OBl+OBn+OCguOBruOBqOimi+OBquOBl+OBvuOBmeOAggorCisKK+esrDHmnaHjgIDnlKjoqp7jga7lrprnvqkKKwor5pys5aWR57SE44Gr44GK44GE44Gm44CB5qyh44Gu5ZCE5Y+344Gr5o6y44GS44KL55So6Kqe44Gv44CB5b2T6Kmy5ZCE5Y+344Gr5a6a44KB44KL44Go44GT44KN44Gr44KI44KK44G+44GZ44CCCisKKzEu44CM44OH44K444K/44Or772l44OV44Kp44Oz44OI772l44OX44Ot44Kw44Op44Og44CN44Go44Gv44CB44OV44Kp44Oz44OI44KS5ZCr44G/44CB44Os44Oz44OA44Oq44Oz44Kw44GX44G+44Gf44Gv6KGo56S644GZ44KL44Gf44KB44Gr55So44GE44KJ44KM44KL44Kz44Oz44OU44Ol44O844K/44O744OX44Ot44Kw44Op44Og44KS44GE44GE44G+44GZ44CCCisyLuOAjOioseirvuODl+ODreOCsOODqeODoOOAjeOBqOOBr+OAgeioseirvuiAheOBjOacrOWlkee0hOOBruS4i+OBp+ioseirvuOBmeOCi+ODh+OCuOOCv+ODq++9peODleOCqeODs+ODiO+9peODl+ODreOCsOODqeODoOOCkuOBhOOBhOOBvuOBmeOAggorMy7jgIzmtL7nlJ/jg5fjg63jgrDjg6njg6DjgI3jgajjga/jgIHoqLHoq77jg5fjg63jgrDjg6njg6Djga7kuIDpg6jjgb7jgZ/jga/lhajpg6jjgpLjgIHmlLnlpInjgZfjgIHliqDpmaTkv67mraPnrYnjgZfjgIHlhaXjgozmm7/jgYjjgIHjgZ3jga7ku5bnv7vmoYjjgZfjgZ/jg4fjgrjjgr/jg6vvvaXjg5Xjgqnjg7Pjg4jvvaXjg5fjg63jgrDjg6njg6DjgpLjgYTjgYTjgIHoqLHoq77jg5fjg63jgrDjg6njg6Djga7kuIDpg6jjgoLjgZfjgY/jga/lhajpg6jjgYvjgonmloflrZfmg4XloLHjgpLlj5bjgorlh7rjgZfjgIHjgb7jgZ/jga/jg4fjgrjjgr/jg6vvvaXjg4njgq3jg6Xjg6Hjg7Pjg4jvvaXjg5XjgqHjgqTjg6vjgYvjgonjgqjjg7Pjg5njg4Pjg4njgZXjgozjgZ/jg5Xjgqnjg7Pjg4jjgpLlj5bjgorlh7rjgZfjgIHlj5bjgorlh7rjgZXjgozjgZ/mloflrZfmg4XloLHjgpLjgZ3jga7jgb7jgb7jgIHjgb7jgZ/jga/mlLnlpInjgpLjgarjgZfjgabmlrDjgZ/jgarjg4fjgrjjgr/jg6vjg7vjg5Xjgqnjg7Pjg4jjg7vjg5fjg63jgrDjg6njg6DjgajjgZfjgaboo73kvZzjgZXjgozjgZ/jgoLjga7jgpLlkKvjgb/jgb7jgZnjgIIKKzQu44CM44OH44K444K/44Or44O744Kz44Oz44OG44Oz44OE44CN44Go44Gv44CB44OH44K444K/44Or44O744OH44O844K/5b2i5byP44Gr44KI44Gj44Gm44Ko44Oz44OJ44O744Om44O844K244Gr5o+Q5L6b44GV44KM44KL5Yi25L2c54mp44Gu44GT44Go44KS44GE44GE44CB5YuV55S744O76Z2Z5q2i55S7562J44Gu5pig5YOP44Kz44Oz44OG44Oz44OE44GK44KI44Gz44OG44Os44OT55Wq57WE562J44Gu5pS+6YCB44Kz44Oz44OG44Oz44OE44CB44Gq44KJ44Gz44Gr5paH5a2X44OG44Kt44K544OI44CB55S75YOP44CB5Zuz5b2i562J44KS5ZCr44KT44Gn5qeL5oiQ44GV44KM44Gf5Yi25L2c54mp44KS5ZCr44G/44G+44GZ44CCCis1LuOAjOODh+OCuOOCv+ODq+ODu+ODieOCreODpeODoeODs+ODiOODu+ODleOCoeOCpOODq+OAjeOBqOOBr+OAgVBERuODleOCoeOCpOODq+OBneOBruS7luOAgeWQhOeoruOCveODleODiOOCpuOCp+OCou+9peODl+ODreOCsOODqeODoOOBq+OCiOOBo+OBpuijveS9nOOBleOCjOOBn+ODh+OCuOOCv+ODq+ODu+OCs+ODs+ODhuODs+ODhOOBp+OBguOBo+OBpuOAgeOBneOBruS4reOBq+ODleOCqeODs+ODiOOCkuihqOekuuOBmeOCi+OBn+OCgeOBq+ioseirvuODl+ODreOCsOODqeODoOOBruWFqOmDqOOBvuOBn+OBr+S4gOmDqOOBjOWfi+OCgei+vOOBvuOCjOOBn++8iOOCqOODs+ODmeODg+ODieOBleOCjOOBn++8ieOCguOBruOCkuOBhOOBhOOBvuOBmeOAguODleOCqeODs+ODiOOBjOOAjOOCqOODs+ODmeODg+ODieOBleOCjOOBn+OAjeOBqOOBr+OAgeW9k+ipsuODleOCqeODs+ODiOOBjOWfi+OCgei+vOOBvuOCjOOBn+eJueWumuOBruOAjOODh+OCuOOCv+ODq+ODu+ODieOCreODpeODoeODs+ODiOODu+ODleOCoeOCpOODq+OAjeOBq+OBiuOBhOOBpuOBruOBv+ihqOekuuOBleOCjOOCi+OBn+OCgeOBq+S9v+eUqOOBleOCjOOBpuOBhOOCi+eKtuaFi+OCkuaMh+OBl+OAgeOBneOBrueJueWumuOBruOAjOODh+OCuOOCv+ODq+ODu+ODieOCreODpeODoeODs+ODiOODu+ODleOCoeOCpOODq+OAjeS7peWkluOBp+ODleOCqeODs+ODiOOCkuihqOekuuOBmeOCi+OBn+OCgeOBq+S9v+eUqOOBp+OBjeOCi+ODh+OCuOOCv+ODq+ODu+ODleOCqeODs+ODiOODu+ODl+ODreOCsOODqeODoOOBq+WQq+OBvuOCjOOBpuOBhOOCi+WgtOWQiOOBqOWMuuWIpeOBleOCjOOBvuOBmeOAggorNi7jgIzjgrPjg7Pjg5Tjg6Xjg7zjgr/vvaPjgajjga/jgIHmnKzlpZHntITjgavjgYrjgYTjgabjga/jgIHjgrXjg7zjg5DjgpLlkKvjgb/jgb7jgZnjgIIKKzcu44CM6KSH6KO944Gd44Gu5LuW44Gu5Yip55So44CN44Go44Gv44CB6KSH6KO944CB6K2y5rih44CB6aCS5biD44CB6LK45LiO44CB5YWs6KGG6YCB5L+h44CB5LiK5pig44CB5bGV56S644CB57+75qGI44Gd44Gu5LuW44Gu5Yip55So44KS44GE44GE44G+44GZ44CCCis4LuOAjOWPl+mgmOiAheOAjeOBqOOBr+OAgeioseirvuODl+ODreOCsOODqeODoOOCkuacrOWlkee0hOOBruS4i+OBp+WPl+mgmOOBl+OBn+S6uuOCkuOBhOOBhOOAgeWPl+mgmOiAheOBi+OCieioseirvuODl+ODreOCsOODqeODoOOCkuWPl+mgmOOBl+OBn+S6uuOCkuWQq+OBv+OBvuOBmeOAggorCivnrKzvvJLmnaEg5L2/55So6Kix6Ku+44Gu5LuY5LiOCisKK+ioseirvuiAheOBr+WPl+mgmOiAheOBq+WvvuOBl+OAgeacrOWlkee0hOOBruadoemgheOBq+W+k+OBhOOAgeOBmeOBueOBpuOBruWbveOBp+OAgeioseirvuODl+ODreOCsOODqeODoOOCkuS9v+eUqOOBmeOCi+OBk+OBqOOCkuioseirvuOBl+OBvuOBmeOAguOBn+OBoOOBl+OAgeioseirvuODl+ODreOCsOODqeODoOOBq+WtmOWcqOOBmeOCi+S4gOWIh+OBruaoqeWIqeOBr+OBmeOBueOBpuioseirvuiAheOBjOS/neacieOBl+OBpuOBhOOBvuOBmeOAguacrOWlkee0hOOBr+OAgeacrOWlkee0hOOBp+aYjuekuueahOOBq+WumuOCgeOCieOCjOOBpuOBhOOCi+WgtOWQiOOCkumZpOOBjeOAgeOBhOOBi+OBquOCi+aEj+WRs+OBq+OBiuOBhOOBpuOCguOAgeioseirvuiAheOBjOS/neacieOBmeOCi+ioseirvuODl+ODreOCsOODqeODoOOBq+mWouOBmeOCi+S4gOWIh+OBruaoqeWIqeOBiuOCiOOBs+OAgeOBhOOBi+OBquOCi+WVhuaomeOAgeWVhuWPt+OAgeOCguOBl+OBj+OBr+OCteODvOODk+OCueODu+ODnuODvOOCr+OBq+mWouOBmeOCi+aoqeWIqeOCkuOCguWPl+mgmOiAheOBq+enu+i7ouOBmeOCi+OCguOBruOBp+OBr+OBguOCiuOBvuOBm+OCk+OAggorCisxLuWPl+mgmOiAheOBr+acrOWlkee0hOOBq+WumuOCgeOCi+adoeS7tuOBq+W+k+OBhOOAgeioseirvuODl+ODreOCsOODqeODoOOCkuS7u+aEj+OBruaVsOOBruOCs+ODs+ODlOODpeODvOOCv+OBq+OCpOODs+OCueODiOODvOODq+OBl+OAgeW9k+ipsuOCs+ODs+ODlOODpeODvOOCv+OBp+S9v+eUqOOBmeOCi+OBk+OBqOOBjOOBp+OBjeOBvuOBmeOAggorMi7lj5fpoJjogIXjga/jgrPjg7Pjg5Tjg6Xjg7zjgr/jgavjgqTjg7Pjgrnjg4jjg7zjg6vjgZXjgozjgZ/oqLHoq77jg5fjg63jgrDjg6njg6DjgpLjgZ3jga7jgb7jgb7jgIHjgb7jgZ/jga/mlLnlpInjgpLooYzjgaPjgZ/jgYbjgYjjgafjgIHljbDliLfnianjgYrjgojjgbPjg4fjgrjjgr/jg6vjg7vjgrPjg7Pjg4bjg7Pjg4TjgavjgYrjgYTjgabjgIHmloflrZfjg4bjgq3jgrnjg4jooajnj77nrYnjgajjgZfjgabkvb/nlKjjgZnjgovjgZPjgajjgYzjgafjgY3jgb7jgZnjgIIKKzMu5Y+X6aCY6ICF44Gv5YmN6aCF44Gu5a6a44KB44Gr5b6T44GE5L2c5oiQ44GX44Gf5Y2w5Yi354mp44GK44KI44Gz44OH44K444K/44Or44O744Kz44Oz44OG44Oz44OE44Gr44Gk44GN44CB44Gd44Gu5ZWG55So44O76Z2e5ZWG55So44Gu5Yil44CB44GK44KI44Gz5pS+6YCB44CB6YCa5L+h44CB5ZCE56iu6KiY6Yyy44Oh44OH44Kj44Ki44Gq44Gp44Gu5aqS5L2T44Gu5b2i5byP44KS5ZWP44KP44Ga44CB6KSH6KO944Gd44Gu5LuW44Gu5Yip55So44KS44GZ44KL44GT44Go44GM44Gn44GN44G+44GZ44CCCis0LuWPl+mgmOiAheOBjOODh+OCuOOCv+ODq+ODu+ODieOCreODpeODoeODs+ODiOODu+ODleOCoeOCpOODq+OBi+OCieOCqOODs+ODmeODg+ODieOBleOCjOOBn+ODleOCqeODs+ODiOOCkuWPluOCiuWHuuOBl+OBpua0vueUn+ODl+ODreOCsOODqeODoOOCkuS9nOaIkOOBl+OBn+WgtOWQiOOBq+OBr+OAgeOBi+OBi+OCi+a0vueUn+ODl+ODreOCsOODqeODoOOBr+acrOWlkee0hOOBq+WumuOCgeOCi+adoeS7tuOBq+W+k+OBhuW/heimgeOBjOOBguOCiuOBvuOBmeOAggorNS7oqLHoq77jg5fjg63jgrDjg6njg6Djga7jgqjjg7Pjg5njg4Pjg4njgZXjgozjgZ/jg5Xjgqnjg7Pjg4jjgYzjg4fjgrjjgr/jg6vjg7vjg4njgq3jg6Xjg6Hjg7Pjg4jjg7vjg5XjgqHjgqTjg6vlhoXjga7jg4fjgrjjgr/jg6vjg7vjgrPjg7Pjg4bjg7Pjg4TjgpLjg6zjg7Pjg4Djg6rjg7PjgrDjgZnjgovjgZ/jgoHjgavjga7jgb/kvb/nlKjjgZXjgozjgovloLTlkIjjgavjgYrjgYTjgabjgIHlj5fpoJjogIXjgYzlvZPoqbLjg4fjgrjjgr/jg6vjg7vjg4njgq3jg6Xjg6Hjg7Pjg4jjg7vjg5XjgqHjgqTjg6vjgpLopIfoo73jgZ3jga7ku5bjga7liKnnlKjjgpLjgZnjgovloLTlkIjjgavjga/jgIHlj5fpoJjogIXjga/jgYvjgYvjgovooYzngrrjgavplqLjgZfjgabjga/mnKzlpZHntITjga7kuIvjgafjga/jgYTjgYvjgarjgovnvqnli5njgpLjgoLosqDjgYTjgb7jgZvjgpPjgIIKKzYu5Y+X6aCY6ICF44Gv44CBM+adoTLpoIXjga7lrprjgoHjgavlvpPjgYTjgIHllYbnlKjjg7vpnZ7llYbnlKjjgpLllY/jgo/jgZrjgIHoqLHoq77jg5fjg63jgrDjg6njg6DjgpLjgZ3jga7jgb7jgb7jga7nirbmhYvjgafmlLnlpInjgZnjgovjgZPjgajjgarjgY/opIfoo73jgZfjgabnrKzkuInogIXjgbjjga7orbLmuKHjgZfjgIHlhazooYbpgIHkv6HjgZfjgIHjgZ3jga7ku5bjga7mlrnms5Xjgaflho3phY3luIPjgZnjgovjgZPjgajjgYzjgafjgY3jgb7jgZko5Lul5LiL44CB44CM5YaN6YWN5biD44CN44Go44GE44GE44G+44GZ44CCKeOAggorNy7lj5fpoJjogIXjga/jgIHkuIroqJjjga7oqLHoq77jg5fjg63jgrDjg6njg6DjgavjgaTjgYTjgablrprjgoHjgonjgozjgZ/mnaHku7bjgajlkIzmp5jjga7mnaHku7bjgavlvpPjgaPjgabjgIHmtL7nlJ/jg5fjg63jgrDjg6njg6DjgpLkvZzmiJDjgZfjgIHkvb/nlKjjgZfjgIHopIfoo73jgZfjgIHlho3phY3luIPjgZnjgovjgZPjgajjgYzjgafjgY3jgb7jgZnjgILjgZ/jgaDjgZfjgIHlj5fpoJjogIXjgYzmtL7nlJ/jg5fjg63jgrDjg6njg6DjgpLlho3phY3luIPjgZnjgovloLTlkIjjgavjga/jgIEz5p2hMemgheOBruWumuOCgeOBq+W+k+OBhuOCguOBruOBqOOBl+OBvuOBmeOAggorCivnrKzvvJPmnaHjgIDliLbpmZAKKwor5YmN5p2h44Gr44KI44KK5LuY5LiO44GV44KM44Gf5L2/55So6Kix6Ku+44Gv44CB5Lul5LiL44Gu5Yi26ZmQ44Gr5pyN44GX44G+44GZ44CCCisKKzEu5rS+55Sf44OX44Ot44Kw44Op44Og44GM5YmN5p2hNOmgheWPiuOBszfpoIXjgavln7rjgaXjgY3lho3phY3luIPjgZXjgozjgovloLTlkIjjgavjga/jgIHku6XkuIvjga7lhajjgabjga7mnaHku7bjgpLmuoDjgZ/jgZXjgarjgZHjgozjgbDjgarjgorjgb7jgZvjgpPjgIIKK+OAgCgxKea0vueUn+ODl+ODreOCsOODqeODoOOCkuWGjemFjeW4g+OBmeOCi+mam+OBq+OBr+OAgeS4i+iomOOCguOBvuOBn+OAgeW9k+ipsua0vueUn+ODl+ODreOCsOODqeODoOOBqOS4gOe3kuOBq+WGjemFjeW4g+OBleOCjOOAgeOCquODs+ODqeOCpOODs+OBp+aPkOS+m+OBleOCjOOAgeOBvuOBn+OBr+OAgemDtemAgeiyu+ODu+WqkuS9k+WPiuOBs+WPluaJseaJi+aVsOaWmeOBruWQiOioiOOCkui2heOBiOOBquOBhOWun+iyu+OBqOW8leOBjeaPm+OBiOOBq+WqkuS9k+OCkumDtemAgeOBmeOCi+aWueazleOBq+OCiOOCiuaPkOS+m+OBleOCjOOBquOBkeOCjOOBsOOBquOCiuOBvuOBm+OCk+OAggor44CA44CAKGEp5rS+55Sf44OX44Ot44Kw44Op44Og44Gu5YaZ44GXOyDjgYrjgojjgbMKK+OAgOOAgChiKea0vueUn+ODl+ODreOCsOODqeODoOOCkuS9nOaIkOOBmeOCi+mBjueoi+OBp+ODleOCqeODs+ODiOmWi+eZuuODl+ODreOCsOODqeODoOOBq+OCiOOBo+OBpuS9nOaIkOOBleOCjOOBn+i/veWKoOOBruODleOCoeOCpOODq+OBp+OBguOBo+OBpua0vueUn+ODl+ODreOCsOODqeODoOOCkuOBleOCieOBq+WKoOW3peOBmeOCi+OBq+OBguOBn+OBo+OBpuWIqeeUqOOBp+OBjeOCi+ODleOCoeOCpOODq+OBjOWtmOWcqOOBmeOCjOOBsOOAgeW9k+ipsuODleOCoeOCpOODqwor44CAKDIp5rS+55Sf44OX44Ot44Kw44Op44Og44Gu5Y+X6aCY6ICF44GM44CB5rS+55Sf44OX44Ot44Kw44Op44Og44KS44CB44GT44Gu44Op44Kk44K744Oz44K544Gu5LiL44Gn5pyA5Yid44Gr44Oq44Oq44O844K544GV44KM44Gf6Kix6Ku+44OX44Ot44Kw44Op44Og77yI5Lul5LiL44CB44CM44Kq44Oq44K444OK44Or44O744OX44Ot44Kw44Op44Og44CN44Go44GE44GE44G+44GZ44CC77yJ44Gr572u44GN5o+b44GI44KL44GT44Go44GM44Gn44GN44KL5pa55rOV44KS5YaN6YWN5biD44GZ44KL44KC44Gu44Go44GX44G+44GZ44CC44GL44GL44KL5pa55rOV44Gv44CB44Kq44Oq44K444OK44Or44O744OV44Kh44Kk44Or44GL44KJ44Gu5beu5YiG44OV44Kh44Kk44Or44Gu5o+Q5L6b44CB44G+44Gf44Gv44CB5rS+55Sf44OX44Ot44Kw44Op44Og44KS44Kq44Oq44K444OK44Or44O744OX44Ot44Kw44Op44Og44Gr572u44GN5o+b44GI44KL5pa55rOV44KS56S644GZ5oyH56S644Gu5o+Q5L6b44Gq44Gp44GM6ICD44GI44KJ44KM44G+44GZ44CCCivjgIAoMynmtL7nlJ/jg5fjg63jgrDjg6njg6DjgpLjgIHmnKzlpZHntITmm7jjgavlrprjgoHjgonjgozjgZ/mnaHku7bjga7kuIvjgafjg6njgqTjgrvjg7PjgrnjgZfjgarjgZHjgozjgbDjgarjgorjgb7jgZvjgpPjgIIKK+OAgCg0Kea0vueUn+ODl+ODreOCsOODqeODoOOBruODl+ODreOCsOODqeODoOWQjeOAgeODleOCqeODs+ODiOWQjeOBvuOBn+OBr+ODleOCoeOCpOODq+WQjeOBqOOBl+OBpuOAgeioseirvuODl+ODreOCsOODqeODoOOBjOeUqOOBhOOBpuOBhOOCi+OBruOBqOWQjOS4gOOBruWQjeensOOAgeOBvuOBn+OBr+OBk+OCjOOCkuWQq+OCgOWQjeensOOCkuS9v+eUqOOBl+OBpuOBr+OBquOCiuOBvuOBm+OCk+OAggor44CAKDUp5pys6aCF44Gu6KaB5Lu244KS5rqA44Gf44GZ44Gf44KB44Gr44Kq44Oz44Op44Kk44Oz44Gn5o+Q5L6b44GX44CB44G+44Gf44Gv5aqS5L2T44KS6YO16YCB44GZ44KL5pa55rOV44Gn5o+Q5L6b44GV44KM44KL44KC44Gu44Gv44CB44Gd44Gu5o+Q5L6b44KS5biM5pyb44GZ44KL44GE44GL44Gq44KL6ICF44Gr44KI44Gj44Gm44KC5o+Q5L6b44GM5Y+v6IO944Gn44GZ44CCCisyLuWPl+mgmOiAheOBjOWJjeadoTbpoIXjgavln7rjgaXjgY3oqLHoq77jg5fjg63jgrDjg6njg6DjgpLlho3phY3luIPjgZnjgovloLTlkIjjgavjga/jgIHku6XkuIvjga7lhajjgabjga7mnaHku7bjgpLmuoDjgZ/jgZXjgarjgZHjgozjgbDjgarjgorjgb7jgZvjgpPjgIIKK+OAgCgxKeioseirvuODl+ODreOCsOODqeODoOOBruWQjeensOOCkuWkieabtOOBl+OBpuOBr+OBquOCiuOBvuOBm+OCk+OAggor44CAKDIp6Kix6Ku+44OX44Ot44Kw44Op44Og44Gr5Yqg5bel44Gd44Gu5LuW44Gu5pS55aSJ44KS5Yqg44GI44Gm44Gv44Gq44KK44G+44Gb44KT44CCCivjgIAoMynmnKzlpZHntITjga7lhpnjgZfjgpLoqLHoq77jg5fjg63jgrDjg6njg6Djgavmt7vku5jjgZfjgarjgZHjgozjgbDjgarjgorjgb7jgZvjgpPjgIIKKzMu6Kix6Ku+44OX44Ot44Kw44Op44Og44Gv44CB54++54q25pyJ5ae/44Gn5o+Q5L6b44GV44KM44Gm44GK44KK44CB6Kix6Ku+44OX44Ot44Kw44Op44Og44G+44Gf44Gv5rS+55Sf44OX44Ot44Kw44Op44Og44Gr44Gk44GE44Gm44CB6Kix6Ku+6ICF44Gv5LiA5YiH44Gu5piO56S644G+44Gf44Gv6buZ56S644Gu5L+d6Ki877yI5qip5Yip44Gu5omA5Zyo44CB6Z2e5L615a6z44CB5ZWG5ZOB5oCn44CB54m55a6a55uu55qE44G444Gu6YGp5ZCI5oCn44KS5ZCr44KA44GM44GT44KM44Gr6ZmQ44KJ44KM44G+44Gb44KT77yJ44KS6KGM44GE44G+44Gb44KT44CC44GE44GL44Gq44KL5aC05ZCI44Gr44KC44CB44Gd44Gu5Y6f5Zug44KS5ZWP44KP44Ga44CB5aWR57SE5LiK44Gu6LKs5Lu744GL5Y6z5qC86LKs5Lu744GL6YGO5aSx44Gd44Gu5LuW44Gu5LiN5rOV6KGM54K66LKs5Lu744GL44Gr44GL44GL44KP44KJ44Ga44CB44G+44Gf5LqL5YmN44Gr6YCa55+l44GV44KM44Gf44GL5ZCm44GL44Gr44GL44GL44KP44KJ44Ga44CB6Kix6Ku+6ICF44Gv44CB6Kix6Ku+44OX44Ot44Kw44Op44Og44G+44Gf44Gv5rS+55Sf44OX44Ot44Kw44Op44Og44Gu44Kk44Oz44K544OI44O844Or44CB5L2/55So44CB6KSH6KO944Gd44Gu5LuW44Gu5Yip55So44G+44Gf44Gv5pys5aWR57SE5LiK44Gu5qip5Yip44Gu6KGM5L2/44Gr44KI44Gj44Gm55Sf44GY44Gf5LiA5YiH44Gu5pCN5a6z77yI55u05o6l44O76ZaT5o6l44O75LuY6ZqP55qE44O754m55Yil44O75ouh5aSn44O75oey572w55qE44G+44Gf44Gv57WQ5p6c55qE5pCN5a6z77yJ77yI5ZWG5ZOB44G+44Gf44Gv44K144O844OT44K544Gu5Luj5pu/5ZOB44Gu6Kq/6YGU44CB44K344K544OG44Og6Zqc5a6z44GL44KJ55Sf44GY44Gf5pCN5a6z44CB54++5a2Y44GZ44KL44OH44O844K/44G+44Gf44Gv44OX44Ot44Kw44Op44Og44Gu57Sb5aSx44G+44Gf44Gv56C05pCN44CB6YC45aSx5Yip55uK44KS5ZCr44KA44GM44GT44KM44Gr6ZmQ44KJ44KM44G+44Gb44KT77yJ44Gr44Gk44GE44Gm6LKs5Lu744KS6LKg44GE44G+44Gb44KT44CCCis0LuioseirvuODl+ODreOCsOODqeODoOOBvuOBn+OBr+a0vueUn+ODl+ODreOCsOODqeODoOOBruOCpOODs+OCueODiOODvOODq+OAgeS9v+eUqOOAgeikh+ijveOBneOBruS7luOBruWIqeeUqOOBq+mWouOBl+OBpuOAgeioseirvuiAheOBr+aKgOihk+eahOOBquizquWVj+OChOWVj+OBhOWQiOOCj+OBm+etieOBq+WvvuOBmeOCi+WvvuW/nOOBneOBruS7luOAgeOBhOOBi+OBquOCi+ODpuODvOOCtuODu+OCteODneODvOODiOOCkuOCguihjOOBhue+qeWLmeOCkuiyoOOBhOOBvuOBm+OCk+OAggorCivnrKzvvJTmnaHjgIDlpZHntITjga7ntYLkuoYKKworMS7mnKzlpZHntITjga7mnInlirnmnJ/plpPjga/jgIHlj5fpoJjogIXjgYzoqLHoq77jg5fjg63jgrDjg6njg6DjgpLlj5fpoJjjgZfjgZ/mmYLjgavplovlp4vjgZfjgIHlj5fpoJjogIXjgYzoqLHoq77jg5fjg63jgrDjg6njg6DjgpLkvZXjgonjgYvjga7mlrnms5Xjgafkv53mjIHjgZnjgovpmZDjgorntprjgY/jgoLjga7jgajjgZfjgb7jgZnjgIIKKzIu5YmN6aCF44Gu5a6a44KB44Gr44GL44GL44KP44KJ44Ga44CB5Y+X6aCY6ICF44GM5pys5aWR57SE44Gr5a6a44KB44KL5ZCE5p2h6aCF44Gr6YGV5Y+N44GX44Gf44Go44GN44Gv44CB5pys5aWR57SE44Gv44CB5L2V44KJ44Gu5YKs5ZGK44KS6KaB44GZ44KL44GT44Go44Gq44GP44CB6Ieq5YuV55qE44Gr57WC5LqG44GX44CB5b2T6Kmy5Y+X6aCY6ICF44Gv44Gd44KM5Lul5b6M44CB6Kix6Ku+44OX44Ot44Kw44Op44Og44GK44KI44Gz5rS+55Sf44OX44Ot44Kw44Op44Og44KS5LiA5YiH5L2/55So44GX44G+44Gf44Gv6KSH6KO944Gd44Gu5LuW44Gu5Yip55So44KS44GZ44KL44GT44Go44GM44Gn44GN44Gq44GE44KC44Gu44Go44GX44G+44GZ44CC44Gf44Gg44GX44CB44GL44GL44KL5aWR57SE44Gu57WC5LqG44Gv44CB5b2T6Kmy6YGV5Y+N44GX44Gf5Y+X6aCY6ICF44GL44KJ6Kix6Ku+44OX44Ot44Kw44Op44Og44G+44Gf44Gv5rS+55Sf44OX44Ot44Kw44Op44Og44Gu6YWN5biD44KS5Y+X44GR44Gf5Y+X6aCY6ICF44Gu5qip5Yip44Gr5b2x6Z+/44KS5Y+K44G844GZ44KC44Gu44Gn44Gv44GC44KK44G+44Gb44KT44CCCisKK+esrO+8leadoeOAgOa6luaLoOazlQorCisxLklQQeOBr+OAgeacrOWlkee0hOOBruWkieabtOODkOODvOOCuOODp+ODs+OBvuOBn+OBr+aWsOOBl+OBhOODkOODvOOCuOODp+ODs+OCkuWFrOihqOOBmeOCi+OBk+OBqOOBjOOBp+OBjeOBvuOBmeOAguOBneOBruWgtOWQiOOBq+OBr+OAgeWPl+mgmOiAheOBr+OAgeioseirvuODl+ODreOCsOODqeODoOOBvuOBn+OBr+a0vueUn+ODl+ODreOCsOODqeODoOOBruS9v+eUqOOAgeikh+ijveOBneOBruS7luOBruWIqeeUqOOBvuOBn+OBr+WGjemFjeW4g+OBq+OBguOBn+OCiuOAgeacrOWlkee0hOOBvuOBn+OBr+WkieabtOW+jOOBruWlkee0hOOBruOBhOOBmuOCjOOBi+OCkumBuOaKnuOBmeOCi+OBk+OBqOOBjOOBp+OBjeOBvuOBmeOAguOBneOBruS7luOAgeS4iuiomOOBq+iomOi8ieOBleOCjOOBpuOBhOOBquOBhOadoemgheOBq+mWouOBl+OBpuOBr+aXpeacrOOBruiRl+S9nOaoqeazleOBiuOCiOOBs+mWoumAo+azleimj+OBq+W+k+OBhuOCguOBruOBqOOBl+OBvuOBmeOAggorMi7mnKzlpZHntITjga/jgIHml6XmnKzms5Xjgavln7rjgaXjgY3op6Pph4jjgZXjgozjgb7jgZnjgIIKKworCistLS0tLS0tLS0tCisKK0lQQSBGb250IExpY2Vuc2UgQWdyZWVtZW50IHYxLjAKKworVGhlIExpY2Vuc29yIHByb3ZpZGVzIHRoZSBMaWNlbnNlZCBQcm9ncmFtIChhcyBkZWZpbmVkIGluIEFydGljbGUgMSBiZWxvdykgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZSBhZ3JlZW1lbnQgKOKAnEFncmVlbWVudOKAnSkuICBBbnkgdXNlLCByZXByb2R1Y3Rpb24gb3IgZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWNlbnNlZCBQcm9ncmFtLCBvciBhbnkgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IGJ5IGEgUmVjaXBpZW50IChhcyBkZWZpbmVkIGluIEFydGljbGUgMSBiZWxvdykgY29uc3RpdHV0ZXMgdGhlIFJlY2lwaWVudCdzIGFjY2VwdGFuY2Ugb2YgdGhpcyBBZ3JlZW1lbnQuCisKK0FydGljbGUgMSAoRGVmaW5pdGlvbnMpCisxLuKAnERpZ2l0YWwgRm9udCBQcm9ncmFt4oCdIHNoYWxsIG1lYW4gYSBjb21wdXRlciBwcm9ncmFtIGNvbnRhaW5pbmcsIG9yIHVzZWQgdG8gcmVuZGVyIG9yIGRpc3BsYXkgZm9udHMuCisyLuKAnExpY2Vuc2VkIFByb2dyYW3igJ0gc2hhbGwgbWVhbiBhIERpZ2l0YWwgRm9udCBQcm9ncmFtIGxpY2Vuc2VkIGJ5IHRoZSBMaWNlbnNvciB1bmRlciB0aGlzIEFncmVlbWVudC4KKzMu4oCcRGVyaXZlZCBQcm9ncmFt4oCdIHNoYWxsIG1lYW4gYSBEaWdpdGFsIEZvbnQgUHJvZ3JhbSBjcmVhdGVkIGFzIGEgcmVzdWx0IG9mIGEgbW9kaWZpY2F0aW9uLCBhZGRpdGlvbiwgZGVsZXRpb24sIHJlcGxhY2VtZW50IG9yIGFueSBvdGhlciBhZGFwdGF0aW9uIHRvIG9yIG9mIGEgcGFydCBvciBhbGwgb2YgdGhlIExpY2Vuc2VkIFByb2dyYW0sIGFuZCBpbmNsdWRlcyBhIGNhc2Ugd2hlcmUgYSBEaWdpdGFsIEZvbnQgUHJvZ3JhbSBuZXdseSBjcmVhdGVkIGJ5IHJldHJpZXZpbmcgZm9udCBpbmZvcm1hdGlvbiBmcm9tIGEgcGFydCBvciBhbGwgb2YgdGhlIExpY2Vuc2VkIFByb2dyYW0gb3IgRW1iZWRkZWQgRm9udHMgZnJvbSBhIERpZ2l0YWwgRG9jdW1lbnQgRmlsZSB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uIG9mIHRoZSByZXRyaWV2ZWQgZm9udCBpbmZvcm1hdGlvbi4KKzQu4oCcRGlnaXRhbCBDb250ZW504oCdIHNoYWxsIG1lYW4gcHJvZHVjdHMgcHJvdmlkZWQgdG8gZW5kIHVzZXJzIGluIHRoZSBmb3JtIG9mIGRpZ2l0YWwgZGF0YSwgaW5jbHVkaW5nIHZpZGVvIGNvbnRlbnQsIG1vdGlvbiBhbmQvb3Igc3RpbGwgcGljdHVyZXMsIFRWIHByb2dyYW1zIG9yIG90aGVyIGJyb2FkY2FzdGluZyBjb250ZW50IGFuZCBwcm9kdWN0cyBjb25zaXN0aW5nIG9mIGNoYXJhY3RlciB0ZXh0LCBwaWN0dXJlcywgcGhvdG9ncmFwaGljIGltYWdlcywgZ3JhcGhpYyBzeW1ib2xzIGFuZC9vciB0aGUgbGlrZS4KKzUu4oCcRGlnaXRhbCBEb2N1bWVudCBGaWxl4oCdIHNoYWxsIG1lYW4gYSBQREYgZmlsZSBvciBvdGhlciBEaWdpdGFsIENvbnRlbnQgY3JlYXRlZCBieSB2YXJpb3VzIHNvZnR3YXJlIHByb2dyYW1zIGluIHdoaWNoIGEgcGFydCBvciBhbGwgb2YgdGhlIExpY2Vuc2VkIFByb2dyYW0gYmVjb21lcyBlbWJlZGRlZCBvciBjb250YWluZWQgaW4gdGhlIGZpbGUgZm9yIHRoZSBkaXNwbGF5IG9mIHRoZSBmb250ICjigJxFbWJlZGRlZCBGb250c+KAnSkuICBFbWJlZGRlZCBGb250cyBhcmUgdXNlZCBvbmx5IGluIHRoZSBkaXNwbGF5IG9mIGNoYXJhY3RlcnMgaW4gdGhlIHBhcnRpY3VsYXIgRGlnaXRhbCBEb2N1bWVudCBGaWxlIHdpdGhpbiB3aGljaCB0aGV5IGFyZSBlbWJlZGRlZCwgYW5kIHNoYWxsIGJlIGRpc3Rpbmd1aXNoZWQgZnJvbSB0aG9zZSBpbiBhbnkgRGlnaXRhbCBGb250IFByb2dyYW0sIHdoaWNoIG1heSBiZSB1c2VkIGZvciBkaXNwbGF5IG9mIGNoYXJhY3RlcnMgb3V0c2lkZSB0aGF0IHBhcnRpY3VsYXIgRGlnaXRhbCBEb2N1bWVudCBGaWxlLgorNi7igJxDb21wdXRlcuKAnSBzaGFsbCBpbmNsdWRlIGEgc2VydmVyIGluIHRoaXMgQWdyZWVtZW50LgorNy7igJxSZXByb2R1Y3Rpb24gYW5kIE90aGVyIEV4cGxvaXRhdGlvbuKAnSBzaGFsbCBtZWFuIHJlcHJvZHVjdGlvbiwgdHJhbnNmZXIsIGRpc3RyaWJ1dGlvbiwgbGVhc2UsIHB1YmxpYyB0cmFuc21pc3Npb24sIHByZXNlbnRhdGlvbiwgZXhoaWJpdGlvbiwgYWRhcHRhdGlvbiBhbmQgYW55IG90aGVyIGV4cGxvaXRhdGlvbi4KKzgu4oCcUmVjaXBpZW504oCdIHNoYWxsIG1lYW4gYW55b25lIHdobyByZWNlaXZlcyB0aGUgTGljZW5zZWQgUHJvZ3JhbSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIG9uZSB0aGF0IHJlY2VpdmVzIHRoZSBMaWNlbnNlZCBQcm9ncmFtIGZyb20gYSBSZWNpcGllbnQuCisKK0FydGljbGUgMiAoR3JhbnQgb2YgTGljZW5zZSkKK1RoZSBMaWNlbnNvciBncmFudHMgdG8gdGhlIFJlY2lwaWVudCBhIGxpY2Vuc2UgdG8gdXNlIHRoZSBMaWNlbnNlZCBQcm9ncmFtIGluIGFueSBhbmQgYWxsIGNvdW50cmllcyBpbiBhY2NvcmRhbmNlIHdpdGggZWFjaCBvZiB0aGUgcHJvdmlzaW9ucyBzZXQgZm9ydGggaW4gdGhpcyBBZ3JlZW1lbnQuIEhvd2V2ZXIsIGFueSBhbmQgYWxsIHJpZ2h0cyB1bmRlcmx5aW5nIGluIHRoZSBMaWNlbnNlZCBQcm9ncmFtIHNoYWxsIGJlIGhlbGQgYnkgdGhlIExpY2Vuc29yLiBJbiBubyBzZW5zZSBpcyB0aGlzIEFncmVlbWVudCBpbnRlbmRlZCB0byB0cmFuc2ZlciBhbnkgcmlnaHQgcmVsYXRpbmcgdG8gdGhlIExpY2Vuc2VkIFByb2dyYW0gaGVsZCBieSB0aGUgTGljZW5zb3IgZXhjZXB0IGFzIHNwZWNpZmljYWxseSBzZXQgZm9ydGggaGVyZWluIG9yIGFueSByaWdodCByZWxhdGluZyB0byBhbnkgdHJhZGVtYXJrLCB0cmFkZSBuYW1lLCBvciBzZXJ2aWNlIG1hcmsgdG8gdGhlIFJlY2lwaWVudC4KKworMS5UaGUgUmVjaXBpZW50IG1heSBpbnN0YWxsIHRoZSBMaWNlbnNlZCBQcm9ncmFtIG9uIGFueSBudW1iZXIgb2YgQ29tcHV0ZXJzIGFuZCB1c2UgdGhlIHNhbWUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBwcm92aXNpb25zIHNldCBmb3J0aCBpbiB0aGlzIEFncmVlbWVudC4KKzIuVGhlIFJlY2lwaWVudCBtYXkgdXNlIHRoZSBMaWNlbnNlZCBQcm9ncmFtLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uIGluIHByaW50ZWQgbWF0ZXJpYWxzIG9yIGluIERpZ2l0YWwgQ29udGVudCBhcyBhbiBleHByZXNzaW9uIG9mIGNoYXJhY3RlciB0ZXh0cyBvciB0aGUgbGlrZS4KKzMuVGhlIFJlY2lwaWVudCBtYXkgY29uZHVjdCBSZXByb2R1Y3Rpb24gYW5kIE90aGVyIEV4cGxvaXRhdGlvbiBvZiB0aGUgcHJpbnRlZCBtYXRlcmlhbHMgYW5kIERpZ2l0YWwgQ29udGVudCBjcmVhdGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgcHJlY2VkaW5nIFBhcmFncmFwaCwgZm9yIGNvbW1lcmNpYWwgb3Igbm9uLWNvbW1lcmNpYWwgcHVycG9zZXMgYW5kIGluIGFueSBmb3JtIG9mIG1lZGlhIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gYnJvYWRjYXN0aW5nLCBjb21tdW5pY2F0aW9uIGFuZCB2YXJpb3VzIHJlY29yZGluZyBtZWRpYS4KKzQuSWYgYW55IFJlY2lwaWVudCBleHRyYWN0cyBFbWJlZGRlZCBGb250cyBmcm9tIGEgRGlnaXRhbCBEb2N1bWVudCBGaWxlIHRvIGNyZWF0ZSBhIERlcml2ZWQgUHJvZ3JhbSwgc3VjaCBEZXJpdmVkIFByb2dyYW0gc2hhbGwgYmUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBhZ3JlZW1lbnQuCis1LklmIGFueSBSZWNpcGllbnQgcGVyZm9ybXMgUmVwcm9kdWN0aW9uIG9yIE90aGVyIEV4cGxvaXRhdGlvbiBvZiBhIERpZ2l0YWwgRG9jdW1lbnQgRmlsZSBpbiB3aGljaCBFbWJlZGRlZCBGb250cyBvZiB0aGUgTGljZW5zZWQgUHJvZ3JhbSBhcmUgdXNlZCBvbmx5IGZvciByZW5kZXJpbmcgdGhlIERpZ2l0YWwgQ29udGVudCB3aXRoaW4gc3VjaCBEaWdpdGFsIERvY3VtZW50IEZpbGUgdGhlbiBzdWNoIFJlY2lwaWVudCBzaGFsbCBoYXZlIG5vIGZ1cnRoZXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgaW4gcmVsYXRpb24gdG8gc3VjaCBhY3Rpb25zLgorNi5UaGUgUmVjaXBpZW50IG1heSByZXByb2R1Y2UgdGhlIExpY2Vuc2VkIFByb2dyYW0gYXMgaXMgd2l0aG91dCBtb2RpZmljYXRpb24gYW5kIHRyYW5zZmVyIHN1Y2ggY29waWVzLCBwdWJsaWNseSB0cmFuc21pdCBvciBvdGhlcndpc2UgcmVkaXN0cmlidXRlIHRoZSBMaWNlbnNlZCBQcm9ncmFtIHRvIGEgdGhpcmQgcGFydHkgZm9yIGNvbW1lcmNpYWwgb3Igbm9uLWNvbW1lcmNpYWwgcHVycG9zZXMgKOKAnFJlZGlzdHJpYnV0ZeKAnSksIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgcHJvdmlzaW9ucyBzZXQgZm9ydGggaW4gQXJ0aWNsZSAzIFBhcmFncmFwaCAyLgorNy5UaGUgUmVjaXBpZW50IG1heSBjcmVhdGUsIHVzZSwgcmVwcm9kdWNlIGFuZC9vciBSZWRpc3RyaWJ1dGUgYSBEZXJpdmVkIFByb2dyYW0gdW5kZXIgdGhlIHRlcm1zIHN0YXRlZCBhYm92ZSBmb3IgdGhlIExpY2Vuc2VkIFByb2dyYW06IHByb3ZpZGVkLCB0aGF0IHRoZSBSZWNpcGllbnQgc2hhbGwgZm9sbG93IHRoZSBwcm92aXNpb25zIHNldCBmb3J0aCBpbiBBcnRpY2xlIDMgUGFyYWdyYXBoIDEgd2hlbiBSZWRpc3RyaWJ1dGluZyB0aGUgRGVyaXZlZCBQcm9ncmFtLgorCitBcnRpY2xlIDMgKFJlc3RyaWN0aW9uKQorVGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiB0aGUgcHJlY2VkaW5nIEFydGljbGUgc2hhbGwgYmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworMS5JZiBhIERlcml2ZWQgUHJvZ3JhbSBpcyBSZWRpc3RyaWJ1dGVkIHB1cnN1YW50IHRvIFBhcmFncmFwaCA0IGFuZCA3IG9mIHRoZSBwcmVjZWRpbmcgQXJ0aWNsZSwgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIG11c3QgYmUgbWV0IDoKK+OAgCgxKVRoZSBmb2xsb3dpbmcgbXVzdCBiZSBhbHNvIFJlZGlzdHJpYnV0ZWQgdG9nZXRoZXIgd2l0aCB0aGUgRGVyaXZlZCBQcm9ncmFtLCBvciBiZSBtYWRlIGF2YWlsYWJsZSBvbmxpbmUgb3IgYnkgbWVhbnMgb2YgbWFpbGluZyBtZWNoYW5pc21zIGluIGV4Y2hhbmdlIGZvciBhIGNvc3Qgd2hpY2ggZG9lcyBub3QgZXhjZWVkIHRoZSB0b3RhbCBjb3N0cyBvZiBwb3N0YWdlLCBzdG9yYWdlIG1lZGl1bSBhbmQgaGFuZGxpbmcgZmVlczoKK+OAgOOAgChhKWEgY29weSBvZiB0aGUgRGVyaXZlZCBQcm9ncmFtOyBhbmQKK+OAgOOAgChiKWFueSBhZGRpdGlvbmFsIGZpbGUgY3JlYXRlZCBieSB0aGUgZm9udCBkZXZlbG9waW5nIHByb2dyYW0gaW4gdGhlIGNvdXJzZSBvZiBjcmVhdGluZyB0aGUgRGVyaXZlZCBQcm9ncmFtIHRoYXQgY2FuIGJlIHVzZWQgZm9yIGZ1cnRoZXIgbW9kaWZpY2F0aW9uIG9mIHRoZSBEZXJpdmVkIFByb2dyYW0sIGlmIGFueS4KK+OAgCgyKUl0IGlzIHJlcXVpcmVkIHRvIGFsc28gUmVkaXN0cmlidXRlIG1lYW5zIHRvIGVuYWJsZSByZWNpcGllbnRzIG9mIHRoZSBEZXJpdmVkIFByb2dyYW0gdG8gcmVwbGFjZSB0aGUgRGVyaXZlZCBQcm9ncmFtIHdpdGggdGhlIExpY2Vuc2VkIFByb2dyYW0gZmlyc3QgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlICh0aGUg4oCcT3JpZ2luYWwgUHJvZ3JhbeKAnSkuICBTdWNoIG1lYW5zIG1heSBiZSB0byBwcm92aWRlIGEgZGlmZmVyZW5jZSBmaWxlIGZyb20gdGhlIE9yaWdpbmFsIFByb2dyYW0sIG9yIGluc3RydWN0aW9ucyBzZXR0aW5nIG91dCBhIG1ldGhvZCB0byByZXBsYWNlIHRoZSBEZXJpdmVkIFByb2dyYW0gd2l0aCB0aGUgT3JpZ2luYWwgUHJvZ3JhbS4KK+OAgCgzKVRoZSBSZWNpcGllbnQgbXVzdCBsaWNlbnNlIHRoZSBEZXJpdmVkIFByb2dyYW0gdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50Lgor44CAKDQpTm8gb25lIG1heSB1c2Ugb3IgaW5jbHVkZSB0aGUgbmFtZSBvZiB0aGUgTGljZW5zZWQgUHJvZ3JhbSBhcyBhIHByb2dyYW0gbmFtZSwgZm9udCBuYW1lIG9yIGZpbGUgbmFtZSBvZiB0aGUgRGVyaXZlZCBQcm9ncmFtLgor44CAKDUpQW55IG1hdGVyaWFsIHRvIGJlIG1hZGUgYXZhaWxhYmxlIG9ubGluZSBvciBieSBtZWFucyBvZiBtYWlsaW5nIGEgbWVkaXVtIHRvIHNhdGlzZnkgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIHBhcmFncmFwaCBtYXkgYmUgcHJvdmlkZWQsIHZlcmJhdGltLCBieSBhbnkgcGFydHkgd2lzaGluZyB0byBkbyBzby4KKzIuSWYgdGhlIFJlY2lwaWVudCBSZWRpc3RyaWJ1dGVzIHRoZSBMaWNlbnNlZCBQcm9ncmFtIHB1cnN1YW50IHRvIFBhcmFncmFwaCA2IG9mIHRoZSBwcmVjZWRpbmcgQXJ0aWNsZSwgdGhlIFJlY2lwaWVudCBzaGFsbCBtZWV0IGFsbCBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CivjgIAoMSlUaGUgUmVjaXBpZW50IG1heSBub3QgY2hhbmdlIHRoZSBuYW1lIG9mIHRoZSBMaWNlbnNlZCBQcm9ncmFtLgor44CAKDIpVGhlIFJlY2lwaWVudCBtYXkgbm90IGFsdGVyIG9yIG90aGVyd2lzZSBtb2RpZnkgdGhlIExpY2Vuc2VkIFByb2dyYW0uCivjgIAoMylUaGUgUmVjaXBpZW50IG11c3QgYXR0YWNoIGEgY29weSBvZiB0aGlzIEFncmVlbWVudCB0byB0aGUgTGljZW5zZWQgUHJvZ3JhbS4KKzMuVEhJUyBMSUNFTlNFRCBQUk9HUkFNIElTIFBST1ZJREVEIEJZIFRIRSBMSUNFTlNPUiDigJxBUyBJU+KAnSBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRZIEFTIFRPIFRIRSBMSUNFTlNFRCBQUk9HUkFNIE9SIEFOWSBERVJJVkVEIFBST0dSQU0sIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBXQVJSQU5USUVTIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBMSUNFTlNPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWFRFTkRFRCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPOyBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFRCBHT09EUyBPUiBTRVJWSUNFOyBEQU1BR0VTIEFSSVNJTkcgRlJPTSBTWVNURU0gRkFJTFVSRTsgTE9TUyBPUiBDT1JSVVBUSU9OIE9GIEVYSVNUSU5HIERBVEEgT1IgUFJPR1JBTTsgTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgSU5TVEFMTEFUSU9OLCBVU0UsIFRIRSBSRVBST0RVQ1RJT04gT1IgT1RIRVIgRVhQTE9JVEFUSU9OIE9GIFRIRSBMSUNFTlNFRCBQUk9HUkFNIE9SIEFOWSBERVJJVkVEIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRCBIRVJFVU5ERVIsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorNC5UaGUgTGljZW5zb3IgaXMgdW5kZXIgbm8gb2JsaWdhdGlvbiB0byByZXNwb25kIHRvIGFueSB0ZWNobmljYWwgcXVlc3Rpb25zIG9yIGlucXVpcmllcywgb3IgcHJvdmlkZSBhbnkgb3RoZXIgdXNlciBzdXBwb3J0IGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgaW5zdGFsbGF0aW9uLCB1c2Ugb3IgdGhlIFJlcHJvZHVjdGlvbiBhbmQgT3RoZXIgRXhwbG9pdGF0aW9uIG9mIHRoZSBMaWNlbnNlZCBQcm9ncmFtIG9yIERlcml2ZWQgUHJvZ3JhbXMgdGhlcmVvZi4KKworQXJ0aWNsZSA0IChUZXJtaW5hdGlvbiBvZiBBZ3JlZW1lbnQpCisxLlRoZSB0ZXJtIG9mIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlZ2luIGZyb20gdGhlIHRpbWUgb2YgcmVjZWlwdCBvZiB0aGUgTGljZW5zZWQgUHJvZ3JhbSBieSB0aGUgUmVjaXBpZW50IGFuZCBzaGFsbCBjb250aW51ZSBhcyBsb25nIGFzIHRoZSBSZWNpcGllbnQgcmV0YWlucyBhbnkgc3VjaCBMaWNlbnNlZCBQcm9ncmFtIGluIGFueSB3YXkuCisyLk5vdHdpdGhzdGFuZGluZyB0aGUgcHJvdmlzaW9uIHNldCBmb3J0aCBpbiB0aGUgcHJlY2VkaW5nIFBhcmFncmFwaCwgaW4gdGhlIGV2ZW50IG9mIHRoZSBicmVhY2ggb2YgYW55IG9mIHRoZSBwcm92aXNpb25zIHNldCBmb3J0aCBpbiB0aGlzIEFncmVlbWVudCBieSB0aGUgUmVjaXBpZW50LCB0aGlzIEFncmVlbWVudCBzaGFsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB3aXRob3V0IGFueSBub3RpY2UuIEluIHRoZSBjYXNlIG9mIHN1Y2ggdGVybWluYXRpb24sIHRoZSBSZWNpcGllbnQgbWF5IG5vdCB1c2Ugb3IgY29uZHVjdCBSZXByb2R1Y3Rpb24gYW5kIE90aGVyIEV4cGxvaXRhdGlvbiBvZiB0aGUgTGljZW5zZWQgUHJvZ3JhbSBvciBhIERlcml2ZWQgUHJvZ3JhbTogcHJvdmlkZWQgdGhhdCBzdWNoIHRlcm1pbmF0aW9uIHNoYWxsIG5vdCBhZmZlY3QgYW55IHJpZ2h0cyBvZiBhbnkgb3RoZXIgUmVjaXBpZW50IHJlY2VpdmluZyB0aGUgTGljZW5zZWQgUHJvZ3JhbSBvciB0aGUgRGVyaXZlZCBQcm9ncmFtIGZyb20gc3VjaCBSZWNpcGllbnQgd2hvIGJyZWFjaGVkIHRoaXMgQWdyZWVtZW50LgorCitBcnRpY2xlIDUgKEdvdmVybmluZyBMYXcpCisxLklQQSBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSW4gc3VjaCBhbiBldmVudCwgdGhlIFJlY2lwaWVudCBtYXkgc2VsZWN0IGVpdGhlciB0aGlzIEFncmVlbWVudCBvciBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQgaW4gdXNpbmcsIGNvbmR1Y3RpbmcgdGhlIFJlcHJvZHVjdGlvbiBhbmQgT3RoZXIgRXhwbG9pdGF0aW9uIG9mLCBvciBSZWRpc3RyaWJ1dGluZyB0aGUgTGljZW5zZWQgUHJvZ3JhbSBvciBhIERlcml2ZWQgUHJvZ3JhbS4gT3RoZXIgbWF0dGVycyBub3Qgc3BlY2lmaWVkIGFib3ZlIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIENvcHlyaWdodCBMYXcgb2YgSmFwYW4gYW5kIG90aGVyIHJlbGF0ZWQgbGF3cyBhbmQgcmVndWxhdGlvbnMgb2YgSmFwYW4uCisyLlRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGNvbnN0cnVlZCB1bmRlciB0aGUgbGF3cyBvZiBKYXBhbi4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0lTQyBiL2xpY2Vuc2VzL0lTQwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNWY0YjUzCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvSVNDCkBAIC0wLDAgKzEsMTMgQEAKK0NvcHlyaWdodCAoYykgNC1kaWdpdCB5ZWFyLCBDb21wYW55IG9yIFBlcnNvbidzIE5hbWUKKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kL29yIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CitwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCitjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKK1dJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCitBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCitXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KK0FDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCitPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvSVNPQy1yZmMgYi9saWNlbnNlcy9JU09DLXJmYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTRhNjViCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvSVNPQy1yZmMKQEAgLTAsMCArMSwyNSBAQAorQ29weXJpZ2h0IChDKSBUaGUgSW50ZXJuZXQgU29jaWV0eSAoMTk5NykuICBBbGwgUmlnaHRzIFJlc2VydmVkLgorCitUaGlzIGRvY3VtZW50IGFuZCB0cmFuc2xhdGlvbnMgb2YgaXQgbWF5IGJlIGNvcGllZCBhbmQgZnVybmlzaGVkIHRvCitvdGhlcnMsIGFuZCBkZXJpdmF0aXZlIHdvcmtzIHRoYXQgY29tbWVudCBvbiBvciBvdGhlcndpc2UgZXhwbGFpbiBpdAorb3IgYXNzaXN0IGluIGl0cyBpbXBsbWVudGF0aW9uIG1heSBiZSBwcmVwYXJlZCwgY29waWVkLCBwdWJsaXNoZWQKK2FuZGFuZCBkaXN0cmlidXRlZCwgaW4gd2hvbGUgb3IgaW4gcGFydCwgd2l0aG91dCByZXN0cmljdGlvbiBvZiBhbnkKK2tpbmQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGFyYWdyYXBoIGFyZQoraW5jbHVkZWQgb24gYWxsIHN1Y2ggY29waWVzIGFuZCBkZXJpdmF0aXZlIHdvcmtzLiAgSG93ZXZlciwgdGhpcworZG9jdW1lbnQgaXRzZWxmIG1heSBub3QgYmUgbW9kaWZpZWQgaW4gYW55IHdheSwgc3VjaCBhcyBieSByZW1vdmluZwordGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgcmVmZXJlbmNlcyB0byB0aGUgSW50ZXJuZXQgU29jaWV0eSBvciBvdGhlcgorSW50ZXJuZXQgb3JnYW5pemF0aW9ucywgZXhjZXB0IGFzIG5lZWRlZCBmb3IgdGhlIHB1cnBvc2Ugb2YKK2RldmVsb3BpbmcgSW50ZXJuZXQgc3RhbmRhcmRzIGluIHdoaWNoIGNhc2UgdGhlIHByb2NlZHVyZXMgZm9yCitjb3B5cmlnaHRzIGRlZmluZWQgaW4gdGhlIEludGVybmV0IFN0YW5kYXJkcyBwcm9jZXNzIG11c3QgYmUKK2ZvbGxvd2VkLCBvciBhcyByZXF1aXJlZCB0byB0cmFuc2xhdGUgaXQgaW50byBsYW5ndWFnZXMgb3RoZXIgdGhhbgorRW5nbGlzaC4KKworVGhlIGxpbWl0ZWQgcGVybWlzc2lvbnMgZ3JhbnRlZCBhYm92ZSBhcmUgcGVycGV0dWFsIGFuZCB3aWxsIG5vdCBiZQorcmV2b2tlZCBieSB0aGUgSW50ZXJuZXQgU29jaWV0eSBvciBpdHMgc3VjY2Vzc29ycyBvciBhc3NpZ25zLgorCitUaGlzIGRvY3VtZW50IGFuZCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkIGhlcmVpbiBpcyBwcm92aWRlZCBvbiBhbgorIkFTIElTIiBiYXNpcyBhbmQgVEhFIElOVEVSTkVUIFNPQ0lFVFkgQU5EIFRIRSBJTlRFUk5FVCBFTkdJTkVFUklORworVEFTSyBGT1JDRSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HCitCVVQgTk9UIExJTUlURUQgVE8gQU5ZIFdBUlJBTlRZIFRIQVQgVEhFIFVTRSBPRiBUSEUgSU5GT1JNQVRJT04KK0hFUkVJTiBXSUxMIE5PVCBJTkZSSU5HRSBBTlkgUklHSFRTIE9SIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0lUUzQgYi9saWNlbnNlcy9JVFM0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZTNiYWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9JVFM0CkBAIC0wLDAgKzEsNTYgQEAKK0lUUzQgU2VjdXJpdHkgU2Nhbm5lciAKK05PTi1DT01NRVJDSUFMIExJQ0VOU0UgKFZlcnNpb24gMSwgRmViIDE3LCAyMDAwKQorCitDb3B5cmlnaHQgKEMpIDIwMDAsIENpZ2l0YWwsIEluYy4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK0ZvciBjb21tZXJjaWFsIGxpY2Vuc2luZyBwbGVhc2UgY29udGFjdCBDaWdpdGFsLCBJbmMuICBDaWdpdGFsLCBJbmMuIGhhcyBleGNsdXNpdmUgbGljZW5zaW5nIHJpZ2h0cyBmb3IgdGhlIHRlY2hub2xvZ3kgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuICBZb3UgY2FuIGNvbnRhY3QgQ2lnaXRhbCwgSW5jLiBhdCA8aXRzNEBjaWdpdGFsLmNvbT4uCisKK1RoaXMgTGljZW5zZSBhcHBsaWVzIHRvIHRoZSBjb21wdXRlciBwcm9ncmFtKHMpIGtub3duIGFzICJJVFM0IiBUaGUgIlByb2dyYW0iLCBiZWxvdywgcmVmZXJzIHRvIHN1Y2ggcHJvZ3JhbSwgYW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iIG1lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIG9mIHRoZSBQcm9ncmFtLCBzdWNoIGFzIGEgdHJhbnNsYXRpb24gb3IgYSBtb2RpZmljYXRpb24uICBUaGUgUHJvZ3JhbSBpcyBhIGNvcHlyaWdodGVkIHdvcmsgd2hvc2UgY29weXJpZ2h0IGlzIGhlbGQgYnkgQ2lnaXRhbCwgSW5jLiAodGhlICJMaWNlbnNvciIpLgorCitCWSBVU0lORywgTU9ESUZZSU5HIEFORC9PUiBESVNUUklCVVRJTkcgVEhFIFBST0dSQU0gKE9SIEFOWSBXT1JLIEJBU0VEIE9OIFRIRSBQUk9HUkFNKSwgWU9VIElORElDQVRFIFlPVVIgQUNDRVBUQU5DRSBPRiBUSElTIExJQ0VOU0UsIEFORCBBTEwgSVRTIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJTkcgT1IgTU9ESUZZSU5HIFRIRSBQUk9HUkFNIE9SIFdPUktTIEJBU0VEIE9OIElULiAgTk9USElORyBPVEhFUiBUSEFOIFRISVMgTElDRU5TRSBHUkFOVFMgWU9VIFBFUk1JU1NJT04gVE8gVVNFLCBNT0RJRlkgQU5EL09SIERJU1RSSUJVVEUgVEhFIFBST0dSQU0gT1IgSVRTIERFUklWQVRJVkUgV09SS1MuIFRIRVNFIEFDVElPTlMgQVJFIFBST0hJQklURUQgQlkgTEFXLiAgSUYgWU9VIERPIE5PVCBBQ0NFUFQgVEhFU0UgVEVSTVMgQU5EIENPTkRJVElPTlMsIERPIE5PVCBVU0UsIE1PRElGWSBBTkQvT1IgRElTVFJJQlVURSBUSEUgUFJPR1JBTS4gCisKKzEuIExpY2Vuc2VzLiAKKworTGljZW5zb3IgaGVyZWJ5IGdyYW50cyB5b3UgdGhlIGZvbGxvd2luZyByaWdodHMsIHByb3ZpZGVkIHRoYXQgeW91IGNvbXBseSB3aXRoIGFsbCBvZiB0aGUgcmVzdHJpY3Rpb25zIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2UgYW5kIHByb3ZpZGVkLCBmdXJ0aGVyLCB0aGF0IHlvdSBkaXN0cmlidXRlIGFuIHVubW9kaWZpZWQgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCB0aGUgUHJvZ3JhbTogCisKKyhhKSBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgbGl0ZXJhbCAoaS5lLiwgdmVyYmF0aW0pIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzIHNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0IHRocm91Z2hvdXQgdGhlIHdvcmxkLCBpbiBhbnkgbWVkaXVtLiAKKworKGIpIFlvdSBtYXkgbm90IHVzZSB0aGUgcHJvZ3JhbSBmb3IgY29tbWVyY2lhbCBwdXJwb3NlcyB1bmRlciBzb21lIGNpcmN1bXN0YW5jZXMuICBQcmltYXJpbHksIHRoZSBwcm9ncmFtIG11c3Qgbm90IGJlIHNvbGQgY29tbWVyY2lhbGx5IGFzIGEgc2VwYXJhdGUgcHJvZHVjdCwgYXMgcGFydCBvZiBhIGJpZ2dlciBwcm9kdWN0IG9yIHByb2plY3QsIG9yIHVzZWQgaW4gdGhpcmQgcGFydHkgd29yay1mb3ItaGlyZSBzaXR1YXRpb25zLiBQbGVhc2Ugc2VlIFNlY3Rpb24gMiwgUmVzdHJpY3Rpb25zLCBmb3IgbW9yZSBkZXRhaWxzLgorCitVc2UgYnkgaW5kaXZpZHVhbHMgYW5kIG5vbi1wcm9maXQgb3JnYW5pemF0aW9ucyBpcyBhbHdheXMgYWxsb3dlZC4gQ29tcGFuaWVzIGFyZSBwZXJtaXR0ZWQgdG8gdXNlIHRoaXMgcHJvZ3JhbSBhcyBsb25nIGFzIGl0IGlzIG5vdCB1c2VkIGZvciByZXZlbnVlLWdlbmVyYXRpbmcgcHVycG9zZXMuICBJdCBtYXkgYmUgdXNlZCB0byBhdWRpdCByZXZlbnVlLWdlbmVyYXRpbmcgc291cmNlIGNvZGUsIHByb3ZpZGVkIHRoZSBhdWRpdCBpcyBwZXJmb3JtZWQgc29sZWx5IGJ5IHRoZSBjb21wYW55IHRoYXQgb3ducyB0aGUgc291cmNlIGNvZGUuCisKKyhjKSBZb3UgbWF5IGJ1aWxkIGRlcml2ZWQgdmVyc2lvbnMgb2YgdGhpcyBzb2Z0d2FyZSB1bmRlciB0aGUgcmVzdHJpY3Rpb25zIHN0YXRlZCBpbiBTZWN0aW9uIDIsIFJlc3RyaWN0aW9ucywgb2YgdGhpcyBsaWNlbnNlLiBUaGUgZGVyaXZlZCB2ZXJzaW9ucyBtdXN0IGJlIGNsZWFybHkgbWFya2VkIGFzIHN1Y2ggYW5kIG11c3QgYmUgY2FsbGVkIGJ5IGEgbmFtZSBvdGhlciB0aGFuIElUUzQuIElUUzQgaXMgYSAgdHJhZGVtYXJrIG9mIENpZ2l0YWwsIEluYy4KKworQWxsIGRlcml2ZWQgdmVyc2lvbnMgb2YgdGhlIFByb2dyYW0gbXVzdCBiZSBtYWRlIGZyZWVseSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZS4gQ2lnaXRhbCwgSW5jLiBtdXN0IGJlIGdpdmVuIHRoZSByaWdodCB0byB1c2UgdGhlIG1vZGlmaWVkIHNvdXJjZSBjb2RlIGluIHRoZWlyIHByb2R1Y3RzIHdpdGhvdXQgYW55IGNvbXBlbnNhdGlvbiBhbmQgd2l0aG91dCBiZWluZyByZXF1aXJlZCB0byBzZXBhcmF0ZWx5IG5hbWUgdGhlIHBhcnRpZXMgd2hvc2UgbW9kaWZpY2F0aW9ucyBhcmUgYmVpbmcgdXNlZC4KKworMi4gUmVzdHJpY3Rpb25zLiAKKworKGEpIERpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSBieSBhIGNvbW1lcmNpYWwgb3JnYW5pemF0aW9uIHRvIGFueSB0aGlyZCBwYXJ0eSBpcyBwcm9oaWJpdGVkIGlmIGFueSBwYXltZW50IGlzIG1hZGUgaW4gY29ubmVjdGlvbiB3aXRoIHN1Y2ggZGlzdHJpYnV0aW9uLCB3aGV0aGVyIGRpcmVjdGx5IChhcyBpbiBwYXltZW50IGZvciBhIGNvcHkgb2YgdGhlIFByb2dyYW0pIG9yIGluZGlyZWN0bHkgKGFzIGluIHBheW1lbnQgZm9yIHNvbWUgc2VydmljZSByZWxhdGVkIHRvIHRoZSBQcm9ncmFtLCBvciBwYXltZW50IGZvciBzb21lIHByb2R1Y3Qgb3Igc2VydmljZSB0aGF0IGluY2x1ZGVzIGEgY29weSBvZiB0aGUgUHJvZ3JhbSAid2l0aG91dCBjaGFyZ2UiLCBvciBwYXltZW50IGZvciBzb21lIHByb2R1Y3Qgb3Igc2VydmljZSB0aGUgZGVsaXZlcnkgb2Ygd2hpY2ggcmVxdWlyZXMgZm9yIHRoZSByZWNpcGllbnQgdG8gcmV0cmlldmUvZG93bmxvYWQgb3Igb3RoZXJ3aXNlIG9idGFpbiBhIGNvcHkgb2YgdGhlIFByb2dyYW07IHRoZXNlIGFyZSBvbmx5IGV4YW1wbGVzLCBhbmQgbm90IGFuIGV4aGF1c3RpdmUgZW51bWVyYXRpb24gb2YgcHJvaGliaXRlZCBhY3Rpdml0aWVzKS4gCisKK0FzIGFuIGV4Y2VwdGlvbiB0byB0aGUgYWJvdmUgcnVsZSwgcHV0dGluZyB0aGlzIHByb2dyYW0gb24gQ0QtUk9NcyBjb250YWluaW5nIG90aGVyIGZyZWUgc29mdHdhcmUgaXMgZXhwbGljaXRseSBwZXJtaXR0ZWQgZXZlbiB3aGVuIGEgbW9kZXN0IGRpc3RyaWJ1dGlvbiBmZWUgaXMgY2hhcmdlZCBmb3IgdGhlIENELCBhcyBsb25nIGFzIHRoaXMgc29mdHdhcmUgaXMgbm90IGEgcHJpbWFyeSBzZWxsaW5nIGFyZ3VtZW50IGZvciB0aGUgQ0QuIAorCisoYikgWW91IG11c3QgbWVldCBhbGwgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIHdpdGggcmVzcGVjdCB0byB0aGUgZGlzdHJpYnV0aW9uIG9mIGFueSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtOiAKKworKGkpIEFsbCBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgUHJvZ3JhbSwgbXVzdCBjYXJyeSBwcm9taW5lbnQgbm90aWNlIHN0YXRpbmcgdGhhdCB0aGUgUHJvZ3JhbSBoYXMgYmVlbiBtb2RpZmllZC4gVGhlIG5vdGljZSBtdXN0IGluZGljYXRlIHdobyBtYWRlIHRoZSBtb2RpZmljYXRpb25zIGFuZCBob3cgdGhlIFByb2dyYW0ncyBmaWxlcyB3ZXJlIG1vZGlmaWVkIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlOyAKKworKGlpKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4gd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55IHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhbmQgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZCBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2U7IAorCisoaWlpKSBZb3UgbXVzdCBjYXVzZSB0aGUgUHJvZ3JhbSwgYXQgZWFjaCB0aW1lIGl0IGNvbW1lbmNlcyBvcGVyYXRpb24sIHRvIHByaW50IG9yIGRpc3BsYXkgYW4gYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZSBhIHdhcnJhbnR5KS4gIFRoZSBub3RpY2UgbXVzdCBhbHNvIHRlbGwgdGhlIHVzZXIgaG93IHRvIHZpZXcgdGhlIGNvcHkgb2YgdGhlIExpY2Vuc2UgaW5jbHVkZWQgd2l0aCB0aGUgUHJvZ3JhbSwgYW5kIHN0YXRlIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2U7IAorCisoaXYpIFlvdSBtdXN0IGFjY29tcGFueSBhbnkgc3VjaCB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgZGVsaXZlcmVkIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLiBUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0OyAKKworKHYpIElmIHlvdSBkaXN0cmlidXRlIGFueSB3cml0dGVuIG9yIHByaW50ZWQgbWF0ZXJpYWwgYXQgYWxsIHdpdGggdGhlIFByb2dyYW0gb3IgYW55IHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIHN1Y2ggbWF0ZXJpYWwgbXVzdCBpbmNsdWRlIGVpdGhlciBhIHdyaXR0ZW4gY29weSBvZiB0aGlzIExpY2Vuc2UsIG9yIGEgcHJvbWluZW50IHdyaXR0ZW4gaW5kaWNhdGlvbiB0aGF0IHRoZSBQcm9ncmFtIG9yIHRoZSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIGlzIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlIGFuZCB3cml0dGVuIGluc3RydWN0aW9ucyBmb3IgcHJpbnRpbmcgYW5kL29yIGRpc3BsYXlpbmcgdGhlIGNvcHkgb2YgdGhlIExpY2Vuc2Ugb24gdGhlIGRpc3RyaWJ1dGlvbiBtZWRpdW07IAorCisodmkpIFlvdSBtYXkgbm90IGNoYW5nZSB0aGUgdGVybXMgaW4gdGhpcyBMaWNlbnNlIG9yIGltcG9zZSBhbnkgZnVydGhlciByZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudCdzIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uIAorCiszLiBSZXNlcnZhdGlvbiBvZiBSaWdodHMuIAorCitObyByaWdodHMgYXJlIGdyYW50ZWQgdG8gdGhlIFByb2dyYW0gZXhjZXB0IGFzIGV4cHJlc3NseSBzZXQgZm9ydGggaGVyZWluLiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkgYXR0ZW1wdCBvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiAgSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMgdGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLiAKKworNC4gTGltaXRhdGlvbnMuIAorCitCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiAKKworSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIFVTRSwgTU9ESUZZIEFORC9PUiBSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkgWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIgUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gCisKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0lVUEFDLUluQ2hpIGIvbGljZW5zZXMvSVVQQUMtSW5DaGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDMwMDQwNgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0lVUEFDLUluQ2hpCkBAIC0wLDAgKzEsMzIwIEBACitJVVBBQy9JbkNoSS1UcnVzdCBMaWNlbmNlIGZvciB0aGUgSW50ZXJuYXRpb25hbCBDaGVtaWNhbCBJZGVudGlmaWVyIChJbkNoSSkgCitTb2Z0d2FyZSB2ZXJzaW9uIDEuMDQsIFNlcHRlbWJlciAyMDExIAorKCJJVVBBQy9JbkNoSS1UcnVzdCBJbkNoSSBMaWNlbmNlIE5vLiAxLjAiKQorCisKK0NvcHlyaWdodCAoQykgSVVQQUMgYW5kIEluQ2hJIFRydXN0IExpbWl0ZWQKK1RoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyIAordGhlIHRlcm1zIG9mIHRoZSBJVVBBQy9JbkNoSSBUcnVzdCBJbkNoSSBMaWNlbmNlIE5vLiAxLjApLCBvciAoYXQgeW91ciBvcHRpb24pIAorYW55IGxhdGVyIHZlcnNpb24uCisKK1Rlcm1zIGFuZCBDb25kaXRpb25zIGZvciBDb3B5aW5nLCBEaXN0cmlidXRpb24gYW5kIE1vZGlmaWNhdGlvbiBvZiB0aGUgSW5DaEkgCitTb2Z0d2FyZQorCiswLiBUaGlzIExpY2VuY2UgQWdyZWVtZW50IGFwcGxpZXMgdG8gYW55IHNvZnR3YXJlIGxpYnJhcnkgb3Igb3RoZXIgcHJvZ3JhbSAKK3doaWNoIGNvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBvciBvdGhlciBhdXRob3JpemVkIAorcGFydHkgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbmNlLiBUaGUgCitMaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKKyAnSVVQQUMnIG1lYW5zIHRoZSBJbnRlcm5hdGlvbmFsIFVuaW9uIG9mIFB1cmUgYW5kIEFwcGxpZWQgQ2hlbWlzdHJ5LgorCisgIEEgImxpYnJhcnkiIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBzb2Z0d2FyZSBmdW5jdGlvbnMgYW5kL29yIGRhdGEgcHJlcGFyZWQgc28gCithcyB0byBiZSBjb252ZW5pZW50bHkgbGlua2VkIHdpdGggYXBwbGljYXRpb24gcHJvZ3JhbXMgKHdoaWNoIHVzZSBzb21lIG9mIAordGhvc2UgZnVuY3Rpb25zIGFuZCBkYXRhKSB0byBmb3JtIGV4ZWN1dGFibGVzLgorCisgIFRoZSAiTGlicmFyeSIsIGJlbG93LCByZWZlcnMgdG8gYW55IHN1Y2ggc29mdHdhcmUgbGlicmFyeSBvciB3b3JrIHdoaWNoIGhhcyAKK2JlZW4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlc2UgdGVybXMuICBBICJ3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5IiBtZWFucyBlaXRoZXIgCit0aGUgTGlicmFyeSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6IHRoYXQgaXMgdG8gc2F5LCBhIHdvcmsgCitjb250YWluaW5nIHRoZSBMaWJyYXJ5IG9yIGEgcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyAKK2FuZC9vciB0cmFuc2xhdGVkIHN0cmFpZ2h0Zm9yd2FyZGx5IGludG8gYW5vdGhlciBsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgCit0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4gdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKQorCisgICJTb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yIG1ha2luZyAKK21vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYSBsaWJyYXJ5LCBjb21wbGV0ZSBzb3VyY2UgY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSAKK2NvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIAorZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgdGhlIAorbGlicmFyeS4KKworICBBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdCBjb3ZlcmVkIAorYnkgdGhpcyBMaWNlbmNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YgcnVubmluZyBhIHByb2dyYW0gdXNpbmcgCit0aGUgTGlicmFyeSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIG91dHB1dCBmcm9tIHN1Y2ggYSBwcm9ncmFtIGlzIGNvdmVyZWQgb25seSAKK2lmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSAoaW5kZXBlbmRlbnQgb2YgdGhlIHVzZSAKK29mIHRoZSBMaWJyYXJ5IGluIGEgdG9vbCBmb3Igd3JpdGluZyBpdCkuICBXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgCit0aGUgTGlicmFyeSBkb2VzIGFuZCB3aGF0IHRoZSBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgTGlicmFyeSBkb2VzLgorCisxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBMaWJyYXJ5J3MgY29tcGxldGUgc291cmNlIAorY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UgY29uc3BpY3VvdXNseSBhbmQgCithcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIAorZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbmNlIAorYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGRpc3RyaWJ1dGUgYSBjb3B5IG9mIHRoaXMgTGljZW5jZSAKK2Fsb25nIHdpdGggdGhlIExpYnJhcnkuCisKK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZCB5b3UgbWF5IGF0IAoreW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKzIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIExpYnJhcnkgb3IgYW55IHBvcnRpb24gb2YgaXQsIHRodXMgCitmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGNvcHkgYW5kIGRpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIAorb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxIGFib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIAorb2YgdGhlc2UgY29uZGl0aW9uczoKKworYSkgVGhlIG1vZGlmaWVkIHdvcmsgbXVzdCBpdHNlbGYgYmUgYSBzb2Z0d2FyZSBsaWJyYXJ5LgorCitiKSBZb3UgbXVzdCBjYXVzZSB0aGUgZmlsZXMgbW9kaWZpZWQgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHlvdSAKK2NoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorCitjKSBZb3UgbXVzdCBjYXVzZSB0aGUgd2hvbGUgb2YgdGhlIHdvcmsgdG8gYmUgbGljZW5zZWQgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZCAKK3BhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5jZS4gIFRoaXMgcmVxdWlyZW1lbnQgZG9lcyBub3QgZXh0ZW5kIHRvIAorYW55ICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgdGhhdCBtaWdodCBhbHNvIGJlIGNvbXBpbGVkIG9yIGxpbmtlZCBhZ2FpbnN0IAordGhlICJ3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LiIKKworZCkgSWYgYSBmYWNpbGl0eSBpbiB0aGUgbW9kaWZpZWQgTGlicmFyeSByZWZlcnMgdG8gYSBmdW5jdGlvbiBvciBhIHRhYmxlIG9mIGRhdGEgCit0byBiZSBzdXBwbGllZCBieSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgZmFjaWxpdHksIG90aGVyIHRoYW4gYXMgCithbiBhcmd1bWVudCBwYXNzZWQgd2hlbiB0aGUgZmFjaWxpdHkgaXMgaW52b2tlZCwgdGhlbiB5b3UgbXVzdCBtYWtlIGEgZ29vZCBmYWl0aCAKK2VmZm9ydCB0byBlbnN1cmUgdGhhdCwgaW4gdGhlIGV2ZW50IGFuIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBzdWNoIGZ1bmN0aW9uIAorb3IgdGFibGUsIHRoZSBmYWNpbGl0eSBzdGlsbCBvcGVyYXRlcywgYW5kIHBlcmZvcm1zIHdoYXRldmVyIHBhcnQgb2YgaXRzIHB1cnBvc2UgCityZW1haW5zIG1lYW5pbmdmdWwuCisKKyhGb3IgZXhhbXBsZSwgYSBmdW5jdGlvbiBpbiBhIGxpYnJhcnkgdG8gY29tcHV0ZSBzcXVhcmUgcm9vdHMgaGFzIGEgcHVycG9zZSB0aGF0IAoraXMgZW50aXJlbHkgd2VsbC1kZWZpbmVkIGluZGVwZW5kZW50IG9mIHRoZSBhcHBsaWNhdGlvbi4gIFRoZXJlZm9yZSwgU3Vic2VjdGlvbiAKKzJkIHJlcXVpcmVzIHRoYXQgYW55IGFwcGxpY2F0aW9uLXN1cHBsaWVkIGZ1bmN0aW9uIG9yIHRhYmxlIHVzZWQgYnkgdGhpcyAKK2Z1bmN0aW9uIG11c3QgYmUgb3B0aW9uYWw6IGlmIHRoZSBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgaXQsIHRoZSBzcXVhcmUgCityb290IGZ1bmN0aW9uIG11c3Qgc3RpbGwgY29tcHV0ZSBzcXVhcmUgcm9vdHMuKQorCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmIGlkZW50aWZpYWJsZSAKK3NlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgTGlicmFyeSwgYW5kIGNhbiBiZSByZWFzb25hYmx5IAorY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4gdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2VuY2UsIGFuZCAKK2l0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlIHNlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSAKK3dvcmtzLiAgQnV0IHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgCit3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZiAKK3RoaXMgTGljZW5jZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIExpY2Vuc2VlcyBleHRlbmQgdG8gdGhlIGVudGlyZSB3aG9sZSwgCithbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QgeW91ciAKK3JpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8gZXhlcmNpc2UgdGhlIAorcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IgY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiAKK3RoZSBMaWJyYXJ5LgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBMaWJyYXJ5IHdpdGggdGhlIAorTGlicmFyeSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkpIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvciAKK2Rpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIgdGhlIHNjb3BlIG9mIAordGhpcyBMaWNlbmNlLgorCiszLiBZb3UgbWF5IG9wdCB0byBhcHBseSB0aGUgdGVybXMgb2YgdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlIAoraW5zdGVhZCBvZiB0aGlzIExpY2VuY2UgdG8gYSBnaXZlbiBjb3B5IG9mIHRoZSBMaWJyYXJ5LiAgVG8gZG8gdGhpcywgeW91IG11c3QgCithbHRlciBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2VuY2UsIHNvIHRoYXQgdGhleSByZWZlciB0byB0aGUgCitvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5jZSwgdmVyc2lvbiAyLCBpbnN0ZWFkIG9mIHRvIHRoaXMgTGljZW5jZS4gIAorKElmIGEgbmV3ZXIgdmVyc2lvbiB0aGFuIHZlcnNpb24gMiBvZiB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2UgCitoYXMgYXBwZWFyZWQsIHRoZW4geW91IGNhbiBzcGVjaWZ5IHRoYXQgdmVyc2lvbiBpbnN0ZWFkIGlmIHlvdSB3aXNoLikgIAorRG8gbm90IG1ha2UgYW55IG90aGVyIGNoYW5nZSBpbiB0aGVzZSBub3RpY2VzLgorCitPbmNlIHRoaXMgY2hhbmdlIGlzIG1hZGUgaW4gYSBnaXZlbiBjb3B5LCBpdCBpcyBpcnJldmVyc2libGUgZm9yIHRoYXQgY29weSwgc28gCit0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2VuY2UgYXBwbGllcyB0byBhbGwgc3Vic2VxdWVudCBjb3BpZXMgYW5kIAorZGVyaXZhdGl2ZSB3b3JrcyBtYWRlIGZyb20gdGhhdCBjb3B5LgorCitUaGlzIG9wdGlvbiBpcyB1c2VmdWwgd2hlbiB5b3Ugd2lzaCB0byBjb3B5IHBhcnQgb2YgdGhlIGNvZGUgb2YgdGhlIExpYnJhcnkgaW50byAKK2EgcHJvZ3JhbSB0aGF0IGlzIG5vdCBhIGxpYnJhcnkuCisKKzQuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSAob3IgYSBwb3J0aW9uIG9yIGRlcml2YXRpdmUgb2YgaXQsIAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgCithbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyAKK21hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIAorU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KKworSWYgZGlzdHJpYnV0aW9uIG9mIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkgZnJvbSBhIAorZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIAordGhlIHNhbWUgcGxhY2Ugc2F0aXNmaWVzIHRoZSByZXF1aXJlbWVudCB0byBkaXN0cmlidXRlIHRoZSBzb3VyY2UgY29kZSwgZXZlbiAKK3Rob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QgY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgCitjb2RlLgorCis1LiBBIHByb2dyYW0gdGhhdCBjb250YWlucyBubyBkZXJpdmF0aXZlIG9mIGFueSBwb3J0aW9uIG9mIHRoZSBMaWJyYXJ5LCBidXQgaXMgCitkZXNpZ25lZCB0byB3b3JrIHdpdGggdGhlIExpYnJhcnkgYnkgYmVpbmcgY29tcGlsZWQgb3IgbGlua2VkIHdpdGggaXQsIGlzIGNhbGxlZCAKK2EgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5Ii4gIFN1Y2ggYSB3b3JrLCBpbiBpc29sYXRpb24sIGlzIG5vdCBhIGRlcml2YXRpdmUgCit3b3JrIG9mIHRoZSBMaWJyYXJ5LCBhbmQgdGhlcmVmb3JlIGZhbGxzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5jZS4KKworNi4gWW91IG1heSBjb21iaW5lIG9yIGxpbmsgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHdpdGggdGhlIExpYnJhcnkgdG8gCitwcm9kdWNlIGEgd29yayBjb250YWluaW5nIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5LCBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsgCit1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZS4KKworWW91IG11c3QgZ2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggZWFjaCBjb3B5IG9mIHRoZSB3b3JrIHRoYXQgdGhlIExpYnJhcnkgaXMgCit1c2VkIGluIGl0IGFuZCB0aGF0IHRoZSBMaWJyYXJ5IGFuZCBpdHMgdXNlIGFyZSBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5jZS4gIAorWW91IG11c3Qgc3VwcGx5IGEgY29weSBvZiB0aGlzIExpY2VuY2UuICBJZiB0aGUgd29yayBkdXJpbmcgZXhlY3V0aW9uIGRpc3BsYXlzIAorY29weXJpZ2h0IG5vdGljZXMsIHlvdSBtdXN0IGluY2x1ZGUgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBMaWJyYXJ5IGFtb25nIAordGhlbSwgYXMgd2VsbCBhcyBhIHJlZmVyZW5jZSBkaXJlY3RpbmcgdGhlIHVzZXIgdG8gdGhlIGNvcHkgb2YgdGhpcyBMaWNlbmNlLiAgCitBbHNvLCB5b3UgbXVzdCBkbyBvbmUgb2YgdGhlc2UgdGhpbmdzOgorCithKSAgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgCitjb2RlIGZvciB0aGUgTGlicmFyeSBpbmNsdWRpbmcgd2hhdGV2ZXIgY2hhbmdlcyB0byB0aGUgTGlicmFyeSB3ZXJlIHVzZWQgaW4gdGhlIAord29yayAod2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlKS4KKworYikgVXNlIGEgc3VpdGFibGUgc2hhcmVkIGxpYnJhcnkgbWVjaGFuaXNtIGZvciBsaW5raW5nIHdpdGggdGhlIExpYnJhcnkuICAKK0Egc3VpdGFibGUgbWVjaGFuaXNtIGlzIG9uZSB0aGF0ICgxKSB1c2VzIGF0IHJ1biB0aW1lIGEgY29weSBvZiB0aGUgbGlicmFyeSAKK2FscmVhZHkgcHJlc2VudCBvbiB0aGUgdXNlcidzIGNvbXB1dGVyIHN5c3RlbSwgcmF0aGVyIHRoYW4gY29weWluZyBsaWJyYXJ5IAorZnVuY3Rpb25zIGludG8gdGhlIGV4ZWN1dGFibGUsIGFuZCAoMikgd2lsbCBvcGVyYXRlIHByb3Blcmx5IHdpdGggYSBtb2RpZmllZCAKK3ZlcnNpb24gb2YgdGhlIGxpYnJhcnksIGlmIHRoZSB1c2VyIGluc3RhbGxzIG9uZSwgYXMgbG9uZyBhcyB0aGUgbW9kaWZpZWQgCit2ZXJzaW9uIGlzIGludGVyZmFjZS1jb21wYXRpYmxlIHdpdGggdGhlIHZlcnNpb24gdGhhdCB0aGUgd29yayB3YXMgbWFkZSB3aXRoLgorCitjKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZSB5ZWFycywgdG8gCitnaXZlIHRoZSBzYW1lIHVzZXIgdGhlIG1hdGVyaWFscyBzcGVjaWZpZWQgaW4gU3Vic2VjdGlvbiA2YSwgYWJvdmUsIGZvciBhIGNoYXJnZSAKK25vIG1vcmUgdGhhbiB0aGUgY29zdCBvZiBwZXJmb3JtaW5nIHRoaXMgZGlzdHJpYnV0aW9uLgorCitkKSBJZiBkaXN0cmlidXRpb24gb2YgdGhlIHdvcmsgaXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weSBmcm9tIGEgCitkZXNpZ25hdGVkIHBsYWNlLCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZSBhYm92ZSBzcGVjaWZpZWQgbWF0ZXJpYWxzIAorZnJvbSB0aGUgc2FtZSBwbGFjZS4KKworZSkgVmVyaWZ5IHRoYXQgdGhlIHVzZXIgaGFzIGFscmVhZHkgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZXNlIG1hdGVyaWFscyBvciB0aGF0IAoreW91IGhhdmUgYWxyZWFkeSBzZW50IHRoaXMgdXNlciBhIGNvcHkuCisKKzcuIFlvdSBtYXkgcGxhY2UgbGlicmFyeSBmYWNpbGl0aWVzIHRoYXQgYXJlIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSAKK3NpZGUtYnktc2lkZSBpbiBhIHNpbmdsZSBsaWJyYXJ5IHRvZ2V0aGVyIHdpdGggb3RoZXIgbGlicmFyeSBmYWNpbGl0aWVzIG5vdCAKK2NvdmVyZWQgYnkgdGhpcyBMaWNlbmNlLCBhbmQgZGlzdHJpYnV0ZSBzdWNoIGEgY29tYmluZWQgbGlicmFyeSwgcHJvdmlkZWQgdGhhdCAKK3RoZSBzZXBhcmF0ZSBkaXN0cmlidXRpb24gb2YgdGhlIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkgYW5kIG9mIHRoZSBvdGhlciAKK2xpYnJhcnkgZmFjaWxpdGllcyBpcyBvdGhlcndpc2UgcGVybWl0dGVkLCBhbmQgcHJvdmlkZWQgdGhhdCB5b3UgZG8gdGhlc2UgdHdvIAordGhpbmdzOgorCithKSBBY2NvbXBhbnkgdGhlIGNvbWJpbmVkIGxpYnJhcnkgd2l0aCBhIGNvcHkgb2YgdGhlIHNhbWUgd29yayBiYXNlZCBvbiB0aGUgCitMaWJyYXJ5LCB1bmNvbWJpbmVkIHdpdGggYW55IG90aGVyIGxpYnJhcnkgZmFjaWxpdGllcy4gIFRoaXMgbXVzdCBiZSBkaXN0cmlidXRlZCAKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgU2VjdGlvbnMgYWJvdmUuCisKK2IpIEdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIHRoZSBjb21iaW5lZCBsaWJyYXJ5IG9mIHRoZSBmYWN0IHRoYXQgcGFydCBvZiBpdCAKK2lzIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGV4cGxhaW5pbmcgd2hlcmUgdG8gZmluZCB0aGUgYWNjb21wYW55aW5nIAordW5jb21iaW5lZCBmb3JtIG9mIHRoZSBzYW1lIHdvcmsuCisKKzguIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvciBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IAorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2VuY2UuICBBbnkgYXR0ZW1wdCBvdGhlcndpc2UgdG8gY29weSwgCittb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBpcyB2b2lkLCBhbmQgd2lsbCAKK2F1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5jZS4gIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIAoraGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIgdGhpcyBMaWNlbmNlIHdpbGwgbm90IGhhdmUgdGhlaXIgCitMaWNlbmNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaCBwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKzkuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2VuY2UsIHNpbmNlIHlvdSBoYXZlIG5vdCBzaWduZWQgaXQuICAKK0hvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yIGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgCitvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlIHByb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgCithY2NlcHQgdGhpcyBMaWNlbmNlLiAgVGhlcmVmb3JlLCBieSBtb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBMaWJyYXJ5IChvciAKK2FueSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5KSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2VuY2UgdG8gCitkbyBzbywgYW5kIGFsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcgCit0aGUgTGlicmFyeSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworMTAuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSksIAordGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgTGljZW5jZSBmcm9tIHRoZSBvcmlnaW5hbCBsaWNlbnNvciB0byAKK2NvcHksIGRpc3RyaWJ1dGUsIGxpbmsgd2l0aCBvciBtb2RpZnkgdGhlIExpYnJhcnkgc3ViamVjdCB0byB0aGVzZSB0ZXJtcyBhbmQgCitjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyIHJlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgCitleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLiBZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIAorY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHdpdGggdGhpcyBMaWNlbmNlLgorCisxMS4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudCAKK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksIGNvbmRpdGlvbnMgCithcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvciBvdGhlcndpc2UpIHRoYXQgCitjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5jZSwgdGhleSBkbyBub3QgZXhjdXNlIHlvdSBmcm9tIHRoZSAKK2NvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbmNlLiAgSWYgeW91IGNhbm5vdCBkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgCitzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2VuY2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UgbWF5IG5vdCAKK2Rpc3RyaWJ1dGUgdGhlIExpYnJhcnkgYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50IExpY2VuY2Ugd291bGQgbm90IAorcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgTGlicmFyeSBieSBhbGwgdGhvc2Ugd2hvIHJlY2VpdmUgCitjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbiB0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgCitib3RoIGl0IGFuZCB0aGlzIExpY2VuY2Ugd291bGQgYmUgdG8gcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgCitMaWJyYXJ5LgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYW55IAorcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvIGFwcGx5LCBhbmQgCit0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyIGNpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkgcGF0ZW50cyBvciAKK290aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueSBzdWNoIGNsYWltczsgdGhpcyAKK3NlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUgaW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIAorZGlzdHJpYnV0aW9uIHN5c3RlbSB3aGljaCBpcyBpbXBsZW1lbnRlZCBieSBwdWJsaWMgTGljZW5jZSBwcmFjdGljZXMuICBNYW55IAorcGVvcGxlIGhhdmUgbWFkZSBnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIAorZGlzdHJpYnV0ZWQgdGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQgCitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nIHRvIAorZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90IGltcG9zZSB0aGF0IAorY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8gYmUgYSAKK2NvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5jZS4KKworMTIuIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgTGlicmFyeSBpcyByZXN0cmljdGVkIGluIGNlcnRhaW4gCitjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlIG9yaWdpbmFsIGNvcHlyaWdodCAKK2hvbGRlciB3aG8gcGxhY2VzIHRoZSBMaWJyYXJ5IHVuZGVyIHRoaXMgTGljZW5jZSBtYXkgYWRkIGFuIGV4cGxpY2l0IAorZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZyB0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgCitkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcgY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCAKK2Nhc2UsIHRoaXMgTGljZW5jZSBpbmNvcnBvcmF0ZXMgdGhlIGxpbWl0YXRpb24gYXMgaWYgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIAorTGljZW5jZS4KKworMTMuIElVUEFDIGFuZCB0aGUgSW5DaEkgVHJ1c3QgTGltaXRlZCBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgCit0aGUgSVVQQUMvSW5DaEkgVHJ1c3QgTGljZW5jZSBmb3IgdGhlIEludGVybmF0aW9uYWwgQ2hlbWljYWwgSWRlbnRpZmllciAoSW5DaEkpIAorU29mdHdhcmUgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSAKK3ByZXNlbnQgdmVyc2lvbiwgYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBMaWJyYXJ5IHNwZWNpZmllcyAKK2EgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbmNlIHdoaWNoIGFwcGxpZWQgdG8gaXQgYW5kICJhbnkgbGF0ZXIgdmVyc2lvbiIsIAoreW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHZlcnNpb24gCitvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgSVVQQUMgYW5kIHRoZSBJbkNoSSBUcnVzdCBMaW1pdGVkLgorCisxNC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIExpYnJhcnkgaW50byBvdGhlciBmcmVlIHByb2dyYW1zIAord2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZXNlLCB3cml0ZSB0byB0aGUgYXV0aG9yIAordG8gYXNrIGZvciBwZXJtaXNzaW9uLiAKKworMTUuIElmIHlvdSBtb2RpZnkgdGhlIExpYnJhcnkgaW4gYW55IHdheSB3aGF0c29ldmVyLCB0aGUgb3V0cHV0IGZyb20gYW55IHN1Y2ggCittb2RpZmllZCBMaWJyYXJ5IG1heSBub3QgYmUgcmVmZXJyZWQgdG8gYXMgJ0luQ2hJJyBvciBhbnkgc2ltaWxhciBuYW1lLiAgQW55IAorYXR0ZW1wdCB0byByZWZlciB0byBzdWNoIG91dHB1dCBhcyAnSW5DaEknIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciAKK3JpZ2h0cyB1bmRlciB0aGlzIExpY2VuY2UuICAKKworTk8gV0FSUkFOVFkKKworMTUuIEJlY2F1c2UgdGhlIExpYnJhcnkgaXMgbGljZW5zZWQgZnJlZSBvZiBjaGFyZ2UsIHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgCitMaWJyYXJ5LCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdy4gRXhjZXB0IHdoZW4gb3RoZXJ3aXNlIHN0YXRlZCAKK2luIHdyaXRpbmcgdGhlIGNvcHlyaWdodCBob2xkZXJzIGFuZCBvdGhlciBwYXJ0aWVzIHByb3ZpZGUgdGhlIExpYnJhcnkgImFzIGlzIiAKK3dpdGhvdXQgd2FycmFudHkgb2YgYW55IGtpbmQsIGVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCBidXQgbm90IAorbGltaXRlZCB0bywgdGhlIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgCitwYXJ0aWN1bGFyIHB1cnBvc2UuIFRoZSBlbnRpcmUgcmlzayBhcyB0byB0aGUgcXVhbGl0eSBhbmQgcGVyZm9ybWFuY2Ugb2YgdGhlIAorTGlicmFyeSBpcyB3aXRoIHlvdS4gU2hvdWxkIHRoZSBMaWJyYXJ5IHByb3ZlIGRlZmVjdGl2ZSwgeW91IGFzc3VtZSB0aGUgY29zdCBvZiAKK2FsbCBuZWNlc3Nhcnkgc2VydmljaW5nLCByZXBhaXIgb3IgY29ycmVjdGlvbi4KKworMTYuIEluIG5vIGV2ZW50IHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZyB3aWxsIAorYW55IGNvcHlyaWdodCBob2xkZXIsIG9yIGFueSBwYXJ0eSB3aG8gbWF5IG1vZGlmeSBhbmQvb3IgcmVkaXN0cmlidXRlIHRoZSAKK0xpYnJhcnkgYXMgcGVybWl0dGVkIGFib3ZlLCBiZSBsaWFibGUgdG8geW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGdlbmVyYWwsIAorc3BlY2lhbCwgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBvdXQgb2YgdGhlIHVzZSBvciBpbmFiaWxpdHkgCit0byB1c2UgdGhlIExpYnJhcnkgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gbG9zcyBvZiBkYXRhIG9yIGRhdGEgYmVpbmcgCityZW5kZXJlZCBpbmFjY3VyYXRlIG9yIGxvc3NlcyBzdXN0YWluZWQgYnkgeW91IG9yIHRoaXJkIHBhcnRpZXMgb3IgYSBmYWlsdXJlIG9mIAordGhlIExpYnJhcnkgdG8gb3BlcmF0ZSB3aXRoIGFueSBvdGhlciBzb2Z0d2FyZSksIGV2ZW4gaWYgc3VjaCBob2xkZXIgb3Igb3RoZXIgCitwYXJ0eSBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisKK0VORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworCitJbnN0cnVjdGlvbnMgZm9yIFVzZQorCitZb3UgbXVzdCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBsaWJyYXJ5IGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCAKK3NvdXJjZSBmaWxlIC0gYXMgYSBtaW5pbXVtIGVhY2ggZmlsZSBuZWVkcyB0byBjb250YWluIHRoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCAKK2EgbGluayB0byB0aGUgZnVsbCBub3RpY2UuCisKK1tJTlNFUlQgWU9VUiBMSUJSQVJZJ1MgTkFNRSBBTkQgSVRTIFBVUlBPU0VdCitDb3B5cmlnaHQgKEMpIFtZRUFSXVtDT1BZUklHSFQgT1dORVJdCitUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciAKK3RoZSB0ZXJtcyBvZiB0aGUgSVVQQUMvSW5DaEkgVHJ1c3QgSW5DaEkgTGljZW5jZSAxLjAsIG9yIGFueSBsYXRlciB2ZXJzaW9uLgorCitQbGVhc2Ugbm90ZSB0aGF0IHRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBXSVRIT1VUIEFOWSBXQVJSQU5USUVTIHdoYXRzb2V2ZXIsIAord2hldGhlciBleHByZXNzZWQgb3IgaW1wbGllZC4gIFNlZSB0aGUgSVVQQUMvSW5DaEkgVHJ1c3QgTGljZW5jZSBmb3IgdGhlIAorSW50ZXJuYXRpb25hbCBDaGVtaWNhbCBJZGVudGlmaWVyIChJbkNoSSkgU29mdHdhcmUgdmVyc2lvbiAxLjA0LCBPY3RvYmVyIDIwMTEgCisoIklVUEFDL0luQ2hJLVRydXN0IEluQ2hJIExpY2VuY2UgTm8uIDEuMCIpIGZvciBtb3JlIGRldGFpbHMuCisKK1lvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIElVUEFDL0luQ2hJIFRydXN0IEluQ2hJIExpY2VuY2UgTm8uIDEuMCAKK3dpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHBsZWFzZSB3cml0ZSB0bzogCisKK1RoZSBJbkNoSSBUcnVzdAorYy9vIEZJWiBDSEVNSUUgQmVybGluCitGcmFua2xpbnN0cmFzc2UgMTEKKzEwNTg3IEJlcmxpbgorR0VSTUFOWSAKKworb3IgZW1haWwgdG86IHVscmljaEBpbmNoaS10cnVzdC5vcmcuCisKK0luIHRoZSBldmVudCB0aGF0IHlvdSByZXF1aXJlIGFueXRoaW5nIGVsc2Ugb3IgaGF2ZSBhbnkgcXVlc3Rpb25zLCAKK3BsZWFzZSB3cml0ZSB0bzoKKworW0lOU0VSVCBDT1BZUklHSFQgT1dORVJTIERFVEFJTFNdCitbSU5TRVJUIEFERFJFU1NdCisKK29yIGNvbnRhY3QgdXMgdmlhIGVtYWlsIGF0OiBbSU5TRVJUIEVNQUlMIEFERFJFU1NdCisKKworKEMpIDIwMTEgSVVQQUMgYW5kIEluQ2hJIFRydXN0IExpbWl0ZWQKKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvSWthbm9zIGIvbGljZW5zZXMvSWthbm9zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlNTA4ODkKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9Ja2Fub3MKQEAgLTAsMCArMSwzNSBAQAorQ29weXJpZ2h0ICgyMDA2KSBJa2Fub3MgQ29tbXVuaWNhdGlvbnMsIEluYy4gCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCAKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgCitjb25kaXRpb25zIGFyZSBtZXQ6IAorCisqIFJlZGlzdHJpYnV0aW9uIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgCitub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorCisqIFJlZGlzdHJpYnV0aW9uIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSAKK2NvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIAorZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIAord2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKworKiBUaGUgbmFtZSBvZiBJa2Fub3MgQ29ycG9yYXRpb24gbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2UgICAgICAgICAKKyAgb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb3VyY2UgY29kZSB3aXRob3V0IHNwZWNpZmljICAgICAKKyAgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIElrYW5vcyBDb3Jwb3JhdGlvbi4gCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgCisiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCAKK0xJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiAKK0EgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIAorT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIAorU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCAKK0xJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCAKK0RBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSAKK1RIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgCitPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKK1VTRVIgQUNLTk9XTEVER0VTIEFORCBBR1JFRVMgVEhBVCBUSEUgUFVSQ0hBU0UgT1IgVVNFIE9GIFRISVMgU09GVFdBUkUgV0lMTAorTk9UIENSRUFURSBPUiBHSVZFIEdST1VORFMgRk9SIEEgTElDRU5TRSBCWSBJTVBMSUNBVElPTiwgRVNUT1BQRUwsIE9SCitPVEhFUldJU0UgSU4gQU5ZIElOVEVMTEVDVFVBTCBQUk9QRVJUWSBSSUdIVFMgKFBBVEVOVCwgQ09QWVJJR0hULCBUUkFERQorU0VDUkVULCBNQVNLIFdPUkssIE9SIE9USEVSIFBST1BSSUVUQVJZIFJJR0hUKSBFTUJPRElFRCBJTiBBTlkgT1RIRVIgSUtBTk9TCitIQVJEV0FSRSBPUiBTT0ZUV0FSRSBFSVRIRVIgU09MRUxZIE9SIElOIENPTUJJTkFUSU9OIFdJVEggVEhJUyBTT0ZUV0FSRS4gCisKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0luZm8tWklQIGIvbGljZW5zZXMvSW5mby1aSVAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU2NDZiYgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0luZm8tWklQCkBAIC0wLDAgKzEsNDkgQEAKK1RoaXMgaXMgdmVyc2lvbiAyMDAxLUphbi0yNyBvZiB0aGUgSW5mby1aSVAgY29weXJpZ2h0IGFuZCBsaWNlbnNlLgorVGhlIGRlZmluaXRpdmUgdmVyc2lvbiBvZiB0aGlzIGRvY3VtZW50IHNob3VsZCBiZSBhdmFpbGFibGUgYXQKK2Z0cDovL2Z0cC5pbmZvLXppcC5vcmcvcHViL2luZm96aXAvbGljZW5zZS5odG1sIGluZGVmaW5pdGVseS4KKworCitDb3B5cmlnaHQgKGMpIDE5OTAtMjAwMSBJbmZvLVpJUC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK0ZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBjb3B5cmlnaHQgYW5kIGxpY2Vuc2UsICJJbmZvLVpJUCIgaXMgZGVmaW5lZCBhcwordGhlIGZvbGxvd2luZyBzZXQgb2YgaW5kaXZpZHVhbHM6CisKKyAgIE1hcmsgQWRsZXIsIEpvaG4gQnVzaCwgS2FybCBEYXZpcywgSGFyYWxkIERlbmtlciwgSmVhbi1NaWNoZWwgRHVib2lzLAorICAgSmVhbi1sb3VwIEdhaWxseSwgSHVudGVyIEdvYXRsZXksIElhbiBHb3JtYW4sIENocmlzIEhlcmJvcnRoLCBEaXJrIEhhYXNlLAorICAgR3JlZyBIYXJ0d2lnLCBSb2JlcnQgSGVhdGgsIEpvbmF0aGFuIEh1ZHNvbiwgUGF1bCBLaWVuaXR6LCBEYXZpZCBLaXJzY2hiYXVtLAorICAgSm9obm55IExlZSwgT25ubyB2YW4gZGVyIExpbmRlbiwgSWdvciBNYW5kcmljaGVua28sIFN0ZXZlIFAuIE1pbGxlciwKKyAgIFNlcmdpbyBNb25lc2ksIEtlaXRoIE93ZW5zLCBHZW9yZ2UgUGV0cm92LCBHcmVnIFJvZWxvZnMsIEthaSBVd2UgUm9tbWVsLAorICAgU3RldmUgU2FsaXNidXJ5LCBEYXZlIFNtaXRoLCBDaHJpc3RpYW4gU3BpZWxlciwgQW50b2luZSBWZXJoZWlqZW4sCisgICBQYXVsIHZvbiBCZWhyZW4sIFJpY2ggV2FsZXMsIE1pa2UgV2hpdGUKKworVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAiYXMgaXMsIiB3aXRob3V0IHdhcnJhbnR5IG9mIGFueSBraW5kLCBleHByZXNzCitvciBpbXBsaWVkLiAgSW4gbm8gZXZlbnQgc2hhbGwgSW5mby1aSVAgb3IgaXRzIGNvbnRyaWJ1dG9ycyBiZSBoZWxkIGxpYWJsZQorZm9yIGFueSBkaXJlY3QsIGluZGlyZWN0LCBpbmNpZGVudGFsLCBzcGVjaWFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcworYXJpc2luZyBvdXQgb2YgdGhlIHVzZSBvZiBvciBpbmFiaWxpdHkgdG8gdXNlIHRoaXMgc29mdHdhcmUuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLAoraW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdAorZnJlZWx5LCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCisgICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgICAgIGRlZmluaXRpb24sIGRpc2NsYWltZXIsIGFuZCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucy4KKworICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICAgbm90aWNlLCBkZWZpbml0aW9uLCBkaXNjbGFpbWVyLCBhbmQgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgaW4KKyAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgMy4gQWx0ZXJlZCB2ZXJzaW9ucy0taW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIHBvcnRzIHRvIG5ldyBvcGVyYXRpbmcKKyAgICAgICBzeXN0ZW1zLCBleGlzdGluZyBwb3J0cyB3aXRoIG5ldyBncmFwaGljYWwgaW50ZXJmYWNlcywgYW5kIGR5bmFtaWMsCisgICAgICAgc2hhcmVkLCBvciBzdGF0aWMgbGlicmFyeSB2ZXJzaW9ucy0tbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoCisgICAgICAgYW5kIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb3VyY2UuICBTdWNoCisgICAgICAgYWx0ZXJlZCB2ZXJzaW9ucyBhbHNvIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIEluZm8tWklQCisgICAgICAgcmVsZWFzZXMtLWluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCBsYWJlbGluZyBvZiB0aGUgYWx0ZXJlZAorICAgICAgIHZlcnNpb25zIHdpdGggdGhlIG5hbWVzICJJbmZvLVpJUCIgKG9yIGFueSB2YXJpYXRpb24gdGhlcmVvZiwgaW5jbHVkaW5nLAorICAgICAgIGJ1dCBub3QgbGltaXRlZCB0bywgZGlmZmVyZW50IGNhcGl0YWxpemF0aW9ucyksICJQb2NrZXQgVW5aaXAsIiAiV2laIgorICAgICAgIG9yICJNYWNaaXAiIHdpdGhvdXQgdGhlIGV4cGxpY2l0IHBlcm1pc3Npb24gb2YgSW5mby1aSVAuICBTdWNoIGFsdGVyZWQKKyAgICAgICB2ZXJzaW9ucyBhcmUgZnVydGhlciBwcm9oaWJpdGVkIGZyb20gbWlzcmVwcmVzZW50YXRpdmUgdXNlIG9mIHRoZQorICAgICAgIFppcC1CdWdzIG9yIEluZm8tWklQIGUtbWFpbCBhZGRyZXNzZXMgb3Igb2YgdGhlIEluZm8tWklQIFVSTChzKS4KKworICAgIDQuIEluZm8tWklQIHJldGFpbnMgdGhlIHJpZ2h0IHRvIHVzZSB0aGUgbmFtZXMgIkluZm8tWklQLCIgIlppcCwiICJVblppcCwiCisgICAgICAgIldpWiwiICJQb2NrZXQgVW5aaXAsIiAiUG9ja2V0IFppcCwiIGFuZCAiTWFjWmlwIiBmb3IgaXRzIG93biBzb3VyY2UgYW5kCisgICAgICAgYmluYXJ5IHJlbGVhc2VzLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvSW5mb3JtIGIvbGljZW5zZXMvSW5mb3JtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2ZWU2YzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9JbmZvcm0KQEAgLTAsMCArMSwxNSBAQAorRnJvbSB0aGUgSW5mb3JtIERlc2lnbmVyJ3MgTWFudWFsOgorCisgICAgQ29weXJpZ2h0IG9uIEluZm9ybSwgdGhlIHByb2dyYW0gYW5kIGl0cyBzb3VyY2UgY29kZSwgaXRzIGV4YW1wbGUgZ2FtZXMKKyAgICBhbmQgZG9jdW1lbnRhdGlvbiAoaW5jbHVkaW5nIHRoaXMgYm9vaykgaXMgcmV0YWluZWQgYnkgR3JhaGFtIE5lbHNvbiwKKyAgICB3aG8gYXNzZXJ0cyB0aGUgbW9yYWwgcmlnaHQgdG8gYmUgaWRlbnRpZmllZCBhcyB0aGUgYXV0aG9yIHVuZGVyIHRoZQorICAgIENvcHlyaWdodHMsIERlc2lnbnMgYW5kIFBhdGVudHMgQWN0IDE5ODguICBIYXZpbmcgc2FpZCB0aGlzLCBJIGFtIGhhcHB5CisgICAgZm9yIGl0IHRvIGJlIGZyZWVseSBkaXN0cmlidXRlZCB0byBhbnlib2R5IHdobyB3YW50cyBhIGNvcHksIHByb3ZpZGVkCisgICAgdGhhdDogKGEpIGRpc3RyaWJ1dGVkIGNvcGllcyBhcmUgbm90IHN1YnN0YW50aWFsbHkgZGlmZmVyZW50IGZyb20gdGhvc2UKKyAgICBhcmNoaXZlZCBieSB0aGUgYXV0aG9yLCAoYikgdGhpcyBhbmQgb3RoZXIgY29weXJpZ2h0IG1lc3NhZ2VzIGFyZQorICAgIGFsd2F5cyByZXRhaW5lZCBpbiBmdWxsLCBhbmQgKGMpIG5vIHByb2ZpdCBpcyBpbnZvbHZlZC4gIChFeGNlcHRpb25zIHRvCisgICAgdGhlc2UgcnVsZXMgbXVzdCBiZSBuZWdvdGlhdGVkIGRpcmVjdGx5IHdpdGggdGhlIGF1dGhvci4pICBIb3dldmVyLCBhCisgICAgc3RvcnkgZmlsZSBwcm9kdWNlZCB3aXRoIHRoZSBJbmZvcm0gY29tcGlsZXIgKGFuZCBsaWJyYXJpZXMpIHRoZW4KKyAgICBiZWxvbmdzIHRvIGl0cyBhdXRob3IsIGFuZCBtYXkgYmUgc29sZCBmb3IgcHJvZml0IGlmIGRlc2lyZWQsIHByb3ZpZGVkCisgICAgdGhhdCBpdHMgZ2FtZSBiYW5uZXIgY29udGFpbnMgdGhlIGluZm9ybWF0aW9uIHRoYXQgaXQgd2FzIGNvbXBpbGVkIGJ5CisgICAgSW5mb3JtLCBhbmQgdGhlIEluZm9ybSB2ZXJzaW9uIG51bWJlci4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0ludGVsLVNEUCBiL2xpY2Vuc2VzL0ludGVsLVNEUApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWExNzk0Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvSW50ZWwtU0RQCkBAIC0wLDAgKzEsNzQgQEAKK0lNUE9SVEFOVCAtIFJFQUQgQkVGT1JFIENPUFlJTkcsIElOU1RBTExJTkcgT1IgVVNJTkcuCitEbyBub3QgY29weSwgaW5zdGFsbCwgb3IgdXNlIHRoZSBNYXRlcmlhbHMgcHJvdmlkZWQgdW5kZXIgdGhpcyBsaWNlbnNlIGFncmVlbWVudCAoIkFncmVlbWVudCIpLCB1bnRpbCB5b3UgaGF2ZSBjYXJlZnVsbHkgcmVhZCB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLgorCitCeSBjb3B5aW5nLCBpbnN0YWxsaW5nLCBvciBvdGhlcndpc2UgdXNpbmcgdGhlIE1hdGVyaWFscywgeW91IGFncmVlIHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudC4gIElmIHlvdSBkbyBub3QgYWdyZWUgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBkbyBub3QgY29weSwgaW5zdGFsbCwgb3IgdXNlIHRoZSBNYXRlcmlhbHMuCisKK0VuZCBVc2VyIExpY2Vuc2UgQWdyZWVtZW50IGZvciB0aGUgSW50ZWwoUikgU29mdHdhcmUgRGV2ZWxvcG1lbnQgUHJvZHVjdHMKKworMS4gTElDRU5TRSBERUZJTklUSU9OUzogCisKK0EuICJNYXRlcmlhbHMiIGFyZSBkZWZpbmVkIGFzIHRoZSBzb2Z0d2FyZSwgZG9jdW1lbnRhdGlvbiwgbGljZW5zZSBrZXkgY29kZXMgYW5kIG90aGVyIG1hdGVyaWFscywgaW5jbHVkaW5nIGFueSB1cGRhdGVzIGFuZCB1cGdyYWRlIHRoZXJldG8sIGZvciB0aGUgYXBwbGljYWJsZSBJbnRlbCBTb2Z0d2FyZSBEZXZlbG9wbWVudCBQcm9kdWN0ICh3aGljaCBtYXkgYmUgZm91bmQgYXQgaHR0cDovL3d3dy5pbnRlbC5jb20vc29mdHdhcmUvcHJvZHVjdHMvKSwgdGhhdCBhcmUgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoaXMgQWdyZWVtZW50LiAgTWF0ZXJpYWxzIGFsc28gaW5jbHVkZSB0aGUgUmVkaXN0cmlidXRhYmxlcyBhcyBkZWZpbmVkIGJlbG93LgorCitCLiAiUmVkaXN0cmlidXRhYmxlcyIgYXJlIHRoZSBmaWxlcyBsaXN0ZWQgaW4gdGhlIGZvbGxvd2luZyB0ZXh0IGZpbGVzIHRoYXQgbWF5IGJlIGluY2x1ZGVkIGluIHRoZSBNYXRlcmlhbHMgZm9yIHRoZSBhcHBsaWNhYmxlIEludGVsIFNvZnR3YXJlIERldmVsb3BtZW50IFByb2R1Y3Q6IGNscmVkaXN0LnR4dCwgY3JlZGlzdC50eHQsIGZyZWRpc3QudHh0LCByZWRpc3QudHh0OgorCitDLiAgIkNsdXN0ZXIgT3Blbk1QIExpYnJhcnkiLCBpcyBjb21wcmlzZWQgb2YgdGhlIGZpbGVzIGxpc3RlZCBpbiB0aGUgImNscmVkaXN0LnR4dCIgZmlsZSBzcGVjaWZpZWQgYWJvdmUsIGlzIHRoZSBJbnRlbChSKSBDbHVzdGVyIE9wZW5NUCBMaWJyYXJ5IGFkZC1vbiBvcHRpb24gdG8gdGhlIEludGVsKFIpIEMrKyBDb21waWxlciBmb3IgTGludXgqIGFuZCBJbnRlbChSKSBGb3J0cmFuIENvbXBpbGVyIGZvciBMaW51eCogcHJvZHVjdHMgKCJJbnRlbCBDb21waWxlciBmb3IgTGludXgiKS4gIFRoZSB1c2Ugb2YgdGhlIENsdXN0ZXIgT3Blbk1QIExpYnJhcnkgaXMgY29uZGl0aW9uZWQgb24gaGF2aW5nIGEgdmFsaWQgbGljZW5zZSBmcm9tIEludGVsIGZvciB0aGUgQ2x1c3RlciBPcGVuTVAgTGlicmFyeSAgYW5kIGZvciBlaXRoZXIgSW50ZWwgQ29tcGlsZXIgZm9yIExpbnV4LCBhbmQgZnVydGhlciBpcyBnb3Zlcm5lZCBieSB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIGxpY2Vuc2UgYWdyZWVtZW50IGZvciBhcHBsaWNhYmxlIHRoZSBJbnRlbCBDb21waWxlciBmb3IgTGludXguCisKK0QuICJTb3VyY2UgQ29kZSIgaXMgZGVmaW5lZCBhcyB0aGUgTWF0ZXJpYWxzIHByb3ZpZGVkIGluIGh1bWFuIHJlYWRhYmxlIGZvcm1hdCwgd2hldGhlciB1bm1vZGlmaWVkIG9yIG1vZGlmaWVkIGJ5IHlvdS4gIAorCitFLiAiU2FtcGxlIFNvdXJjZSIgaXMgdGhlIFNvdXJjZSBDb2RlIGZpbGUocykgdGhhdDogKGkpIGRlbW9uc3RyYXRlIGNlcnRhaW4gbGltaXRlZCBmdW5jdGlvbnMgaW5jbHVkZWQgaW4gdGhlIGJpbmFyeSBsaWJyYXJpZXMgb2YgdGhlIEludGVsKFIpIEludGVncmF0ZWQgUGVyZm9ybWFuY2UgUHJpbWl0aXZlcyAoIkludGVsKFIpIElQUHMiKTsgKGlpKSBhcmUgaWRlbnRpZmllZCBhcyBJbnRlbCBJUFAgc2FtcGxlIHNvdXJjZSBjb2RlOyBhbmQgKGlpaSkgYXJlIG9idGFpbmVkIHNlcGFyYXRlbHkgZnJvbSBJbnRlbCBhZnRlciB5b3UgcmVnaXN0ZXIgeW91ciBjb3B5IG9mIHRoZSBJbnRlbCBJbnRlZ3JhdGVkIFBlcmZvcm1hbmNlIFByaW1pdGl2ZXMgcHJvZHVjdCB3aXRoIEludGVsLgorCisyLiBMSUNFTlNFIEdSQU5UOgorCitBLiBTdWJqZWN0IHRvIGFsbCBvZiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQsIEludGVsIENvcnBvcmF0aW9uICgiSW50ZWwiKSBncmFudHMgdG8geW91IGEgbm9uLWV4Y2x1c2l2ZSwgbm9uLWFzc2lnbmFibGUsIGNvcHlyaWdodCBsaWNlbnNlIHRvIHVzZSB0aGUgTWF0ZXJpYWxzLiAKKworQi4gU3ViamVjdCB0byBhbGwgb2YgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50LCBJbnRlbCBncmFudHMgdG8geW91IGEgbm9uLWV4Y2x1c2l2ZSwgbm9uLWFzc2lnbmFibGUgY29weXJpZ2h0IGxpY2Vuc2UgdG8gbW9kaWZ5IHRoZSBNYXRlcmlhbHMsIG9yIGFueSBwb3J0aW9ucyB0aGVyZW9mLCB0aGF0IGFyZSAoaSkgcHJvdmlkZWQgaW4gU291cmNlIENvZGUgZm9ybSBvciwgKGlpKSBhcmUgZGVmaW5lZCBhcyBSZWRpc3RyaWJ1dGFibGVzIGFuZCBhcmUgcHJvdmlkZWQgaW4gdGV4dCBmb3JtLgorCitDLiBTdWJqZWN0IHRvIGFsbCBvZiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQsIEludGVsIGdyYW50cyB0byB5b3UgYSBub24tZXhjbHVzaXZlLCBub24tYXNzaWduYWJsZSBjb3B5cmlnaHQgbGljZW5zZSB0byBkaXN0cmlidXRlIChleGNlcHQgdW5kZXIgYW4gRXZhbHVhdGlvbiBMaWNlbnNlIGFzIHNwZWNpZmllZCBiZWxvdykgdGhlIFJlZGlzdHJpYnV0YWJsZXMsIG9yIGFueSBwb3J0aW9ucyB0aGVyZW9mLCBhcyBwYXJ0IG9mIHRoZSBwcm9kdWN0IG9yIGFwcGxpY2F0aW9uIHlvdSBkZXZlbG9wZWQgdXNpbmcgdGhlIE1hdGVyaWFscy4gIElmIHN1Y2ggYXBwbGljYXRpb24gaXMgYSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBsaWJyYXJ5LCB0aGVuIGF0dHJpYnV0aW9uLCBhcyBzcGVjaWZpZWQgaW4gdGhlIHByb2R1Y3QgcmVsZWFzZSBub3RlcyBvZiB0aGUgY29ycmVzcG9uZGluZyBNYXRlcmlhbHMsIHNoYWxsIGJlIGRpc3BsYXllZCBwcm9taW5lbnRseSBpbiB0aGF0IGFwcGxpY2F0aW9uJ3MgcHJvZHVjdCBkb2N1bWVudGF0aW9uIGFuZCBvbiB0aGUgYXBwbGljYXRpb24ncyBwcm9kdWN0IHdlYiBzaXRlLgorCiszLiBMSUNFTlNFIFJFU1RSSUNUSU9OUzoKKworQS4gSWYgeW91IHJlY2VpdmUgeW91ciBmaXJzdCBjb3B5IG9mIHRoZSBNYXRlcmlhbHMgZWxlY3Ryb25pY2FsbHksIGFuZCBhIHNlY29uZCBjb3B5IG9uIG1lZGlhLCB0aGVuIHlvdSBtYXkgdXNlIHRoZSBzZWNvbmQgY29weSBvbmx5IGluIGFjY29yZGFuY2Ugd2l0aCB5b3VyIGFwcGxpY2FibGUgbGljZW5zZSBzdGF0ZWQgaW4gdGhpcyBBZ3JlZW1lbnQsIG9yIGZvciBiYWNrdXAgb3IgYXJjaGl2YWwgcHVycG9zZXMuICBZb3UgbWF5IG5vdCBwcm92aWRlIHRoZSBzZWNvbmQgY29weSB0byBhbm90aGVyIHVzZXIuCisKK0IuIFlvdSBtYXkgTk9UOiAgKGkpIHVzZSBvciBjb3B5IHRoZSBNYXRlcmlhbHMgZXhjZXB0IGFzIHByb3ZpZGVkIGluIHRoaXMgQWdyZWVtZW50OyAoaWkpIHJlbnQgb3IgbGVhc2UgdGhlIE1hdGVyaWFscyB0byBhbnkgdGhpcmQgcGFydHk7IChpaWkpIGFzc2lnbiB0aGlzIEFncmVlbWVudCBvciB0cmFuc2ZlciB0aGUgTWF0ZXJpYWxzIHdpdGhvdXQgdGhlIGV4cHJlc3Mgd3JpdHRlbiBjb25zZW50IG9mIEludGVsOyAoaXYpIG1vZGlmeSwgYWRhcHQsIG9yIHRyYW5zbGF0ZSB0aGUgTWF0ZXJpYWxzIGluIHdob2xlIG9yIGluIHBhcnQgZXhjZXB0IGFzIHByb3ZpZGVkIGluIHRoaXMgQWdyZWVtZW50OyAodikgcmV2ZXJzZSBlbmdpbmVlciwgZGVjb21waWxlLCBvciBkaXNhc3NlbWJsZSB0aGUgTWF0ZXJpYWxzOyAodmkpIGF0dGVtcHQgdG8gbW9kaWZ5IG9yIHRhbXBlciB3aXRoIHRoZSBub3JtYWwgZnVuY3Rpb24gb2YgYSBsaWNlbnNlIG1hbmFnZXIgdGhhdCByZWd1bGF0ZXMgdXNhZ2Ugb2YgdGhlIE1hdGVyaWFsczsgKHZpaSkgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSBvciB0cmFuc2ZlciB0aGUgU291cmNlIENvZGUgZm9ybSBvZiBhbnkgY29tcG9uZW50cyBvZiB0aGUgTWF0ZXJpYWxzLCBSZWRpc3RyaWJ1dGFibGVzIGFuZCBTYW1wbGUgU291cmNlIGFuZCBkZXJpdmF0aXZlcyB0aGVyZW9mIHRvIGFueSB0aGlyZCBwYXJ0eSBleGNlcHQgYXMgcHJvdmlkZWQgaW4gdGhpcyBBZ3JlZW1lbnQ7IG9yICh2aWlpKSBkaXN0cmlidXRlIFJlZGlzdHJpYnV0YWJsZXMgZXhjZXB0IGFzIHBhcnQgb2YgYSBsYXJnZXIgcHJvZ3JhbSB0aGF0IGFkZHMgc2lnbmlmaWNhbnQgcHJpbWFyeSBmdW5jdGlvbmFsaXR5IGRpZmZlcmVudCBmcm9tIHRoYXQgb2YgdGhlIFJlZGlzdHJpYnV0YWJsZXMuCisKK0MuIFRoZSBzY29wZSBhbmQgZHVyYXRpb24gKHRpbWUgcGVyaW9kKSBvZiB5b3VyIGxpY2Vuc2UgZGVwZW5kcyBvbiB0aGUgdHlwZSBvZiBsaWNlbnNlIHlvdSBvYnRhaW5lZCBmcm9tIEludGVsLiAgVGhlIHZhcmlldHkgb2YgbGljZW5zZSB0eXBlcyBhcmUgc2V0IGZvcnRoIGJlbG93LCB3aGljaCBtYXkgbm90IGJlIGF2YWlsYWJsZSBmb3IgYWxsICJJbnRlbChSKSBTb2Z0d2FyZSBEZXZlbG9wbWVudCBQcm9kdWN0cyIgYW5kIHRoZXJlZm9yZSBtYXkgbm90IGFwcGx5IHRvIHRoZSBNYXRlcmlhbHMuICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgdHlwZXMgb2YgbGljZW5zZXMsIHBsZWFzZSBjb250YWN0IEludGVsIG9yIHlvdXIgc2FsZXMgcmVwcmVzZW50YXRpdmUuCisKK2kuIEVWQUxVQVRJT04gTElDRU5TRTogSWYgeW91IGFyZSB1c2luZyB0aGUgTWF0ZXJpYWxzIHVuZGVyIHRoZSBjb250cm9sIG9mIGFuIEV2YWx1YXRpb24gbGljZW5zZSwgeW91IGFzIGFuIGluZGl2aWR1YWwgbWF5IHVzZSB0aGUgTWF0ZXJpYWxzIG9ubHkgZm9yIGludGVybmFsIGV2YWx1YXRpb24gcHVycG9zZXMgYW5kIG9ubHkgZm9yIHRoZSB0ZXJtIG9mIHRoZSBldmFsdWF0aW9uIHRpbWUgcGVyaW9kLCB3aGljaCBpcyBjb250cm9sbGVkIGJ5IHRoZSBsaWNlbnNlIGtleSBjb2RlIGZvciB0aGUgTWF0ZXJpYWxzLiAgTk9UV0lUSFNUQU5ESU5HIEFOWVRISU5HIFRPIFRIRSBDT05UUkFSWSBFTFNFV0hFUkUgSU4gVEhJUyBBR1JFRU1FTlQsIFlPVSBNQVkgTk9UIERJU1RSSUJVVEUgQU5ZIFBPUlRJT04gT0YgVEhFIE1BVEVSSUFMUywgQU5EIFRIRSBBUFBMSUNBVElPTiBBTkQvT1IgUFJPRFVDVCBERVZFTE9QRUQgQlkgWU9VIE1BWSBPTkxZIEJFIFVTRUQgRk9SIEVWQUxVQVRJT04gUFVSUE9TRVMgQU5EIE9OTFkgRk9SIFRIRSBURVJNIE9GIFRIRSBFVkFMVUFUSU9OIFBFUklPRC4gIFlvdSBtYXkgaW5zdGFsbCBjb3BpZXMgb2YgdGhlIE1hdGVyaWFscyBvbiBhbiB1bmxpbWl0ZWQgbnVtYmVyIG9mIGNvbXB1dGVycyBwcm92aWRlZCB0aGF0IHlvdSBhcmUgdGhlIG9ubHkgaW5kaXZpZHVhbCB1c2luZyB0aGUgTWF0ZXJpYWxzIGFuZCBvbmx5IG9uZSBjb3B5IG9mIHRoZSBNYXRlcmlhbHMgaXMgaW4gdXNlIGF0IGFueSBvbmUgdGltZS4gIEEgc2VwYXJhdGUgbGljZW5zZSBpcyByZXF1aXJlZCBmb3IgZWFjaCBhZGRpdGlvbmFsIHVzZSBhbmQvb3IgaW5kaXZpZHVhbCB1c2VyIGluIGFsbCBvdGhlciBjYXNlcy4gIEludGVsIHdpbGwgcHJvdmlkZSB5b3Ugd2l0aCBhIGxpY2Vuc2UgY29kZSBrZXkgdGhhdCBlbmFibGVzIHRoZSBNYXRlcmlhbHMgZm9yIGFuIEV2YWx1YXRpb24gbGljZW5zZS4gIElmIHlvdSBhcmUgYW4gZW50aXR5LCBJbnRlbCBncmFudHMgeW91IHRoZSByaWdodCB0byBkZXNpZ25hdGUgb25lIGluZGl2aWR1YWwgd2l0aGluIHlvdXIgb3JnYW5pemF0aW9uIHRvIGhhdmUgdGhlIHNvbGUgcmlnaHQgdG8gdXNlIHRoZSBNYXRlcmlhbHMgaW4gdGhlIG1hbm5lciBwcm92aWRlZCBhYm92ZS4KKworaWkuIE5PTkNPTU1FUkNJQUwtVVNFIExJQ0VOU0U6ICBJZiB5b3UgYXJlIHVzaW5nIHRoZSBNYXRlcmlhbHMgdW5kZXIgdGhlIGNvbnRyb2wgb2YgYSBOb25jb21tZXJjaWFsLVVzZSBsaWNlbnNlLCB5b3UgYXMgYW4gaW5kaXZpZHVhbCBtYXkgdXNlIHRoZSBNYXRlcmlhbHMgb25seSBmb3Igbm9uLWJ1c2luZXNzIHVzZSB3aGVyZSB5b3UgcmVjZWl2ZSBubyBmZWUsIHNhbGFyeSBvciBhbnkgb3RoZXIgZm9ybSBvZiBjb21wZW5zYXRpb24uICBUaGUgTWF0ZXJpYWxzIG1heSBub3QgYmUgdXNlZCBmb3IgYW55IG90aGVyIHB1cnBvc2UsIHdoZXRoZXIgImZvciBwcm9maXQiIG9yICJub3QgZm9yIHByb2ZpdC4iICBBbnkgd29yayBwZXJmb3JtZWQgb3IgcHJvZHVjZWQgYXMgYSByZXN1bHQgb2YgdXNlIG9mIHRoZSBNYXRlcmlhbHMgY2Fubm90IGJlIHBlcmZvcm1lZCBvciBwcm9kdWNlZCBmb3IgdGhlIGJlbmVmaXQgb2Ygb3RoZXIgcGFydGllcyBmb3IgYSBmZWUsIGNvbXBlbnNhdGlvbiBvciBhbnkgb3RoZXIgcmVpbWJ1cnNlbWVudCBvciByZW11bmVyYXRpb24uICBZb3UgbWF5IGluc3RhbGwgY29waWVzIG9mIHRoZSBNYXRlcmlhbHMgb24gYW4gdW5saW1pdGVkIG51bWJlciBvZiBjb21wdXRlcnMgcHJvdmlkZWQgdGhhdCB5b3UgYXJlIHRoZSBvbmx5IGluZGl2aWR1YWwgdXNpbmcgdGhlIE1hdGVyaWFscyBhbmQgb25seSBvbmUgY29weSBvZiB0aGUgTWF0ZXJpYWxzIGlzIGluIHVzZSBhdCBhbnkgb25lIHRpbWUuICBBIHNlcGFyYXRlIGxpY2Vuc2UgaXMgcmVxdWlyZWQgZm9yIGVhY2ggYWRkaXRpb25hbCB1c2UgYW5kL29yIGluZGl2aWR1YWwgdXNlciBpbiBhbGwgb3RoZXIgY2FzZXMuICBJbnRlbCB3aWxsIHByb3ZpZGUgeW91IHdpdGggYSBsaWNlbnNlIGNvZGUga2V5IHRoYXQgZW5hYmxlcyB0aGUgTWF0ZXJpYWxzIGZvciBhIE5vbmNvbW1lcmNpYWwtVXNlIGxpY2Vuc2UuICBJZiB5b3Ugb2J0YWluZWQgYSB0aW1lLWxpbWl0ZWQgTm9uY29tbWVyY2lhbC1Vc2UgbGljZW5zZSwgdGhlIGR1cmF0aW9uICh0aW1lIHBlcmlvZCkgb2YgeW91ciBsaWNlbnNlIGFuZCB5b3VyIGFiaWxpdHkgdG8gdXNlIHRoZSBNYXRlcmlhbHMgaXMgbGltaXRlZCB0byB0aGUgdGltZSBwZXJpb2Qgb2YgdGhlIG9idGFpbmVkIGxpY2Vuc2UsIHdoaWNoIGlzIGNvbnRyb2xsZWQgYnkgdGhlIGxpY2Vuc2Uga2V5IGNvZGUgZm9yIHRoZSBNYXRlcmlhbHMuICBJZiB5b3UgYXJlIGFuIGVudGl0eSwgSW50ZWwgZ3JhbnRzIHlvdSB0aGUgcmlnaHQgdG8gZGVzaWduYXRlIG9uZSBpbmRpdmlkdWFsIHdpdGhpbiB5b3VyIG9yZ2FuaXphdGlvbiB0byBoYXZlIHRoZSBzb2xlIHJpZ2h0IHRvIHVzZSB0aGUgTWF0ZXJpYWxzIGluIHRoZSBtYW5uZXIgcHJvdmlkZWQgYWJvdmUuCisKK2lpaS4gU0lOR0xFLVVTRVIgTElDRU5TRTogSWYgeW91IGFyZSB1c2luZyB0aGUgTWF0ZXJpYWxzIHVuZGVyIHRoZSBjb250cm9sIG9mIGEgU2luZ2xlLVVzZXIgbGljZW5zZSwgeW91IGFzIGFuIGluZGl2aWR1YWwgbWF5IGluc3RhbGwgYW5kIHVzZSB0aGUgTWF0ZXJpYWxzIG9uIGFuIHVubGltaXRlZCBudW1iZXIgb2YgY29tcHV0ZXJzIHByb3ZpZGVkIHRoYXQgeW91IGFyZSB0aGUgb25seSBpbmRpdmlkdWFsIHVzaW5nIHRoZSBNYXRlcmlhbHMgYW5kIG9ubHkgb25lIGNvcHkgb2YgdGhlIE1hdGVyaWFscyBpcyBpbiB1c2UgYXQgYW55IG9uZSB0aW1lLiAgQSBzZXBhcmF0ZSBsaWNlbnNlIGlzIHJlcXVpcmVkIGZvciBlYWNoIGFkZGl0aW9uYWwgdXNlIGFuZC9vciBpbmRpdmlkdWFsIHVzZXIgaW4gYWxsIG90aGVyIGNhc2VzLiAgSW50ZWwgd2lsbCBwcm92aWRlIHlvdSB3aXRoIGEgbGljZW5zZSBjb2RlIGtleSB0aGF0IGVuYWJsZXMgdGhlIE1hdGVyaWFscyBmb3IgYSBTaW5nbGUtVXNlciBsaWNlbnNlLiAgSWYgeW91IG9idGFpbmVkIGEgdGltZS1saW1pdGVkIFNpbmdsZS1Vc2VyIGxpY2Vuc2UsIHRoZSBkdXJhdGlvbiAodGltZSBwZXJpb2QpIG9mIHlvdXIgbGljZW5zZSBhbmQgeW91ciBhYmlsaXR5IHRvIHVzZSB0aGUgTWF0ZXJpYWxzIGlzIGxpbWl0ZWQgdG8gdGhlIHRpbWUgcGVyaW9kIG9mIHRoZSBvYnRhaW5lZCBsaWNlbnNlLCB3aGljaCBpcyBjb250cm9sbGVkIGJ5IHRoZSBsaWNlbnNlIGtleSBjb2RlIGZvciB0aGUgTWF0ZXJpYWxzLiAgSWYgeW91IGFyZSBhbiBlbnRpdHksIEludGVsIGdyYW50cyB5b3UgdGhlIHJpZ2h0IHRvIGRlc2lnbmF0ZSBvbmUgaW5kaXZpZHVhbCB3aXRoaW4geW91ciBvcmdhbml6YXRpb24gdG8gaGF2ZSB0aGUgc29sZSByaWdodCB0byB1c2UgdGhlIE1hdGVyaWFscyBpbiB0aGUgbWFubmVyIHByb3ZpZGVkIGFib3ZlLgorCitpdi4gTk9ERS1MT0NLRUQgTElDRU5TRTogSWYgeW91IGFyZSB1c2luZyB0aGUgTWF0ZXJpYWxzIHVuZGVyIHRoZSBjb250cm9sIG9mIGEgTm9kZS1Mb2NrZWQgbGljZW5zZSwgeW91IG1heSB1c2UgdGhlIE1hdGVyaWFscyBvbmx5IG9uIGEgc2luZ2xlIGRlc2lnbmF0ZWQgY29tcHV0ZXIgYnkgbm8gbW9yZSB0aGFuIHRoZSBhdXRob3JpemVkIG51bWJlciBvZiBjb25jdXJyZW50IHVzZXJzLiAgQSBzZXBhcmF0ZSBsaWNlbnNlIGlzIHJlcXVpcmVkIGZvciBlYWNoIGFkZGl0aW9uYWwgY29uY3VycmVudCB1c2VyIGFuZC9vciBjb21wdXRlciBpbiBhbGwgb3RoZXIgY2FzZXMuICBJbnRlbCB3aWxsIHByb3ZpZGUgeW91IHdpdGggYSBsaWNlbnNlIGNvZGUga2V5IHRoYXQgZW5hYmxlcyB0aGUgTWF0ZXJpYWxzIGZvciBhIE5vZGUtTG9ja2VkIGxpY2Vuc2UgdXAgdG8gdGhlIGF1dGhvcml6ZWQgbnVtYmVyIG9mIGNvbmN1cnJlbnQgdXNlcnMuICBJZiB5b3Ugb2J0YWluZWQgYSB0aW1lLWxpbWl0ZWQgTm9kZS1Mb2NrZWQgbGljZW5zZSwgdGhlIGR1cmF0aW9uICh0aW1lIHBlcmlvZCkgb2YgeW91ciBsaWNlbnNlIGFuZCB5b3VyIGFiaWxpdHkgdG8gdXNlIHRoZSBNYXRlcmlhbHMgaXMgbGltaXRlZCB0byB0aGUgdGltZSBwZXJpb2Qgb2YgdGhlIG9idGFpbmVkIGxpY2Vuc2UsIHdoaWNoIGlzIGNvbnRyb2xsZWQgYnkgdGhlIGxpY2Vuc2Uga2V5IGNvZGUgZm9yIHRoZSBNYXRlcmlhbHMuCisKK3YuIEZMT0FUSU5HIExJQ0VOU0U6IElmIHlvdSBhcmUgdXNpbmcgdGhlIE1hdGVyaWFscyB1bmRlciB0aGUgY29udHJvbCBvZiBhIEZsb2F0aW5nIGxpY2Vuc2UsIHlvdSBtYXkgKGEpIGluc3RhbGwgdGhlIE1hdGVyaWFscyBvbiBhbiB1bmxpbWl0ZWQgbnVtYmVyIG9mIGNvbXB1dGVycyB0aGF0IGFyZSBjb25uZWN0ZWQgdG8gdGhlIGRlc2lnbmF0ZWQgbmV0d29yayBhbmQgKGIpIHVzZSB0aGUgTWF0ZXJpYWwgYnkgbm8gbW9yZSB0aGFuIHRoZSBhdXRob3JpemVkIG51bWJlciBvZiBjb25jdXJyZW50IHVzZXJzLiAgQSBzZXBhcmF0ZSBsaWNlbnNlIGlzIHJlcXVpcmVkIGZvciBlYWNoIGFkZGl0aW9uYWwgY29uY3VycmVudCB1c2VyIGFuZC9vciBuZXR3b3JrIG9uIHdoaWNoIHRoZSBNYXRlcmlhbHMgYXJlIHVzZWQuICBJbnRlbCB3aWxsIHByb3ZpZGUgeW91IHdpdGggYSBsaWNlbnNlIGNvZGUga2V5IHRoYXQgZW5hYmxlcyB0aGUgTWF0ZXJpYWxzIGZvciBhIEZsb2F0aW5nIGxpY2Vuc2UgdXAgdG8gdGhlIGF1dGhvcml6ZWQgbnVtYmVyIG9mIGNvbmN1cnJlbnQgdXNlcnMuICBJZiB5b3Ugb2J0YWluZWQgYSB0aW1lLWxpbWl0ZWQgRmxvYXRpbmcgbGljZW5zZSwgdGhlIGR1cmF0aW9uICh0aW1lIHBlcmlvZCkgb2YgeW91ciBsaWNlbnNlIGFuZCB5b3VyIGFiaWxpdHkgdG8gdXNlIHRoZSBNYXRlcmlhbHMgaXMgbGltaXRlZCB0byB0aGUgdGltZSBwZXJpb2Qgb2YgdGhlIG9idGFpbmVkIGxpY2Vuc2UsIHdoaWNoIGlzIGNvbnRyb2xsZWQgYnkgdGhlIGxpY2Vuc2Uga2V5IGNvZGUgZm9yIHRoZSBNYXRlcmlhbHMuICBJbnRlbCBMaWJyYXJ5IEZsb2F0aW5nIExpY2Vuc2U6IElmIHRoZSBNYXRlcmlhbHMgYXJlIHRoZSBJbnRlbChSKSBNYXRoIEtlcm5lbCBMaWJyYXJ5IG9yIHRoZSBJbnRlbChSKSBJbnRlZ3JhdGVkIFBlcmZvcm1hbmNlIFByaW1pdGl2ZXMgTGlicmFyeSBvciB0aGUgSW50ZWwoUikgVGhyZWFkaW5nIEJ1aWxkaW5nIEJsb2NrcyAoZWl0aGVyICJJbnRlbCBMaWJyYXJ5IiksIHRoZW4gdGhlIEludGVsIExpYnJhcnkgaXMgcHJvdmlkZWQgdG8geW91IGFzIGFuIGFkZC1vbiBvcHRpb24gdG8gZWl0aGVyIHRoZSBJbnRlbChSKSBDKysgQ29tcGlsZXIgcHJvZHVjdCBvciB0aGUgSW50ZWwoUikgRm9ydHJhbiBDb21waWxlciBwcm9kdWN0IChlaXRoZXIgIkludGVsIENvbXBpbGVyIikgZm9yIHdoaWNoIHlvdSBoYXZlIGEgRmxvYXRpbmcgbGljZW5zZSwgYW5kIGFzIHN1Y2gsIGluIGFkZGl0aW9uIHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhYm92ZSwgdGhlIEludGVsIExpYnJhcnkgbWF5IG9ubHkgYmUgdXNlZCBieSB0aGUgYXV0aG9yaXplZCBjb25jdXJyZW50IHVzZXJzIG9mIHRoYXQgSW50ZWwgQ29tcGlsZXIgRmxvYXRpbmcgbGljZW5zZS4KKwordmkuIENMVVNURVIgU1lTVEVNIExJQ0VOU0U6IElmIHlvdSBhcmUgdXNpbmcgdGhlIE1hdGVyaWFscyB1bmRlciB0aGUgY29udHJvbCBvZiBhIENsdXN0ZXIgU3lzdGVtIGxpY2Vuc2UsIChhKSB5b3UgbWF5IGluc3RhbGwgdGhlIE1hdGVyaWFscyBvbiBhbiB1bmxpbWl0ZWQgbnVtYmVyIG9mIGNvbXB1dGVycyBwcm92aWRlZCB0aGF0IGFsbCBzdWNoIGNvbXB1dGVycyBhcmUgcGFydCBvZiBhIHNpbmdsZSBjbHVzdGVyIHN5c3RlbSBhbmQgKGIpIGlmIHlvdSBhcmUgYW4gZW50aXR5IHlvdSBtdXN0IGRlc2lnbmF0ZSBmcm9tIHdpdGhpbiB5b3VyIG9yZ2FuaXphdGlvbiBpbmRpdmlkdWFscywgdXAgdG8gYW5kIG5vdCBleGNlZWRpbmcgdGhlIGF1dGhvcml6ZWQgbnVtYmVyIG9mIHVzZXJzLCB0byBoYXZlIHRoZSBzb2xlIHJpZ2h0IHRvIHVzZSB0aGUgTWF0ZXJpYWxzLCBhbmQgeW91IG11c3QgbGltaXQgdGhlIHVzZSBvZiB0aGUgTWF0ZXJpYWxzIHRvIG9ubHkgdGhvc2UgZGVzaWduYXRlZCBpbmRpdmlkdWFscy4gIEEgc2VwYXJhdGUgbGljZW5zZSBpcyByZXF1aXJlZCBmb3IgKGMpIGVhY2ggYWRkaXRpb25hbCBjbHVzdGVyIHN5c3RlbSBvbiB3aGljaCB0aGUgTWF0ZXJpYWxzIGFyZSB1c2VkLCBhbmQgKGQpIGVhY2ggYWRkaXRpb25hbCBkZXNpZ25hdGVkIGluZGl2aWR1YWwgdXNlciBleGNlZWRpbmcgdGhlIGF1dGhvcml6ZWQgbnVtYmVyIG9mIHVzZXJzLiAgSW50ZWwgd2lsbCBwcm92aWRlIHlvdSB3aXRoIGEgbGljZW5zZSBjb2RlIGtleSB0aGF0IGVuYWJsZXMgdGhlIE1hdGVyaWFscyBmb3IgYSBDbHVzdGVyIFN5c3RlbSBsaWNlbnNlIHVwIHRvIHRoZSBhdXRob3JpemVkIG51bWJlciBvZiBpbmRpdmlkdWFsIHVzZXMvdXNlcnMuICBJZiB5b3Ugb2J0YWluZWQgYSB0aW1lLWxpbWl0ZWQgQ2x1c3RlciBTeXN0ZW0gbGljZW5zZSwgdGhlIGR1cmF0aW9uICh0aW1lIHBlcmlvZCkgb2YgeW91ciBsaWNlbnNlIGFuZCB5b3VyIGFiaWxpdHkgdG8gdXNlIHRoZSBNYXRlcmlhbHMgaXMgbGltaXRlZCB0byB0aGUgdGltZSBwZXJpb2Qgb2YgdGhlIG9idGFpbmVkIGxpY2Vuc2UsIHdoaWNoIGlzIHNwZWNpZmllZCBpbiB0aGUgTWF0ZXJpYWxzIGFuZC9vciBjb250cm9sbGVkIGJ5IHRoZSBsaWNlbnNlIGtleSBjb2RlIGZvciB0aGUgTWF0ZXJpYWxzLgorCitELiBESVNUUklCVVRJT046ICBEaXN0cmlidXRpb24gb2YgdGhlIE1hdGVyaWFscyBpcyBhbHNvIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBsaW1pdGF0aW9uczogIFlvdSAoaSkgc2hhbGwgYmUgc29sZWx5IHJlc3BvbnNpYmxlIHRvIHlvdXIgY3VzdG9tZXJzIGZvciBhbnkgdXBkYXRlIG9yIHN1cHBvcnQgb2JsaWdhdGlvbiBvciBvdGhlciBsaWFiaWxpdHkgd2hpY2ggbWF5IGFyaXNlIGZyb20gdGhlIGRpc3RyaWJ1dGlvbiwgKGlpKSBzaGFsbCBub3QgbWFrZSBhbnkgc3RhdGVtZW50IHRoYXQgeW91ciBwcm9kdWN0IGlzICJjZXJ0aWZpZWQiLCBvciB0aGF0IGl0cyBwZXJmb3JtYW5jZSBpcyBndWFyYW50ZWVkLCBieSBJbnRlbCwgKGlpaSkgc2hhbGwgbm90IHVzZSBJbnRlbCdzIG5hbWUgb3IgdHJhZGVtYXJrcyB0byBtYXJrZXQgeW91ciBwcm9kdWN0IHdpdGhvdXQgd3JpdHRlbiBwZXJtaXNzaW9uLCAoaXYpIHNoYWxsIHByb2hpYml0IGRpc2Fzc2VtYmx5IGFuZCByZXZlcnNlIGVuZ2luZWVyaW5nLCAodikgc2hhbGwgbm90IHB1Ymxpc2ggcmV2aWV3cyBvZiBNYXRlcmlhbHMgZGVzaWduYXRlZCBhcyBiZXRhIHdpdGhvdXQgd3JpdHRlbiBwZXJtaXNzaW9uIGJ5IEludGVsLCBhbmQgKHZpKSBzaGFsbCBpbmRlbW5pZnksIGhvbGQgaGFybWxlc3MsIGFuZCBkZWZlbmQgSW50ZWwgYW5kIGl0cyBzdXBwbGllcnMgZnJvbSBhbmQgYWdhaW5zdCBhbnkgY2xhaW1zIG9yIGxhd3N1aXRzLCBpbmNsdWRpbmcgYXR0b3JuZXkncyBmZWVzLCB0aGF0IGFyaXNlIG9yIHJlc3VsdCBmcm9tIHlvdXIgZGlzdHJpYnV0aW9uIG9mIGFueSBwcm9kdWN0LgorCitFLiBJbnRlbChSKSBJbnRlZ3JhdGVkIFBlcmZvcm1hbmNlIFByaW1pdGl2ZXMgKEludGVsIElQUCkuIFRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXBwbHkgb25seSB0byB0aGUgSW50ZWwgSVBQLgorCitpLiBMaWNlbnNlZSdzIHVzZSBvciBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgSW50ZWwgSVBQIE1hdGVyaWFscyBtYXkgcmVxdWlyZSBhZGRpdGlvbmFsIGxpY2Vuc2VzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGNvcHlyaWdodCBhbmQgcGF0ZW50IGxpY2Vuc2VzIGZyb20gdmFyaW91cyBlbnRpdGllcy4gIFNob3VsZCBhbnkgc3VjaCBhZGRpdGlvbmFsIGNvcHlyaWdodCwgcGF0ZW50IG9yIG90aGVyIGxpY2Vuc2VzIGJlIHJlcXVpcmVkLCBMaWNlbnNlZSBhZ3JlZXMgdG8gb2J0YWluIGFueSBzdWNoIGxpY2Vuc2VzIGF0IExpY2Vuc2VlJ3Mgb3duIGV4cGVuc2UuICBMaWNlbnNlZSBpcyBzb2xlbHkgcmVzcG9uc2libGUgZm9yIG9idGFpbmluZyBhbnkgc3VjaCBsaWNlbnNlcyBhbmQgdGhlIGNvcHlyaWdodCBsaWNlbnNlcyBncmFudGVkIGluIGhlcmVpbiBhcmUgY29uZGl0aW9uZWQgb24gTGljZW5zZWUgb2J0YWluaW5nIHN1Y2ggYWRkaXRpb25hbCBsaWNlbnNlcy4KKworaWkuIE5vdHdpdGhzdGFuZGluZyBhbnl0aGluZyBoZXJlaW4gdG8gdGhlIGNvbnRyYXJ5LCBhIHZhbGlkIGxpY2Vuc2UgdG8gSW50ZWwgSVBQIGlzIGEgcHJlcmVxdWlzaXRlIHRvIGFueSBsaWNlbnNlIGZvciBTYW1wbGUgU291cmNlLCBhbmQgcG9zc2Vzc2lvbiBvZiBTYW1wbGUgU291cmNlIGRvZXMgbm90IGdyYW50IGFueSBsaWNlbnNlIHRvIEludGVsIElQUCAob3IgYW55IHBvcnRpb24gdGhlcmVvZikuICBUbyBhY2Nlc3MgU2FtcGxlIFNvdXJjZSwgeW91IG11c3QgZmlyc3QgcmVnaXN0ZXIgeW91ciBsaWNlbnNlZCBjb3B5IG9mIHRoZSBJbnRlbCBJUFAgd2l0aCBJbnRlbC4gIEJ5IGRvd25sb2FkaW5nLCBpbnN0YWxsaW5nIG9yIGNvcHlpbmcgYW55IFNhbXBsZSBTb3VyY2UgZmlsZSwgeW91IGFncmVlIHRvIGJlIGJvdW5kIGJ5IHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LgorCitGLiBTT0ZUV0FSRSBUUkFOU0ZFUjogWW91IG1heSBwZXJtYW5lbnRseSB0cmFuc2ZlciBhbGwgb2YgeW91ciByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgb25seSB3aXRoIEludGVsJ3MgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCis0LiBDT1BZUklHSFQ6IFRpdGxlIHRvIHRoZSBNYXRlcmlhbHMgYW5kIGFsbCBjb3BpZXMgdGhlcmVvZiByZW1haW4gd2l0aCBJbnRlbCBvciBpdHMgc3VwcGxpZXJzLiAgVGhlIE1hdGVyaWFscyBhcmUgY29weXJpZ2h0ZWQgYW5kIGFyZSBwcm90ZWN0ZWQgYnkgVW5pdGVkIFN0YXRlcyBjb3B5cmlnaHQgbGF3cyBhbmQgaW50ZXJuYXRpb25hbCB0cmVhdHkgcHJvdmlzaW9ucy4gIFlvdSB3aWxsIG5vdCByZW1vdmUgYW55IGNvcHlyaWdodCBub3RpY2UgZnJvbSB0aGUgTWF0ZXJpYWxzLiAgWW91IGFncmVlIHRvIHByZXZlbnQgYW55IHVuYXV0aG9yaXplZCBjb3B5aW5nIG9mIHRoZSBNYXRlcmlhbHMuICBFeGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIGhlcmVpbiwgbm8gbGljZW5zZSBvciByaWdodCBpcyBncmFudGVkIHRvIHlvdSBkaXJlY3RseSBvciBieSBpbXBsaWNhdGlvbiwgaW5kdWNlbWVudCwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLCBzcGVjaWZpY2FsbHkgSW50ZWwgZG9lcyBub3QgZ3JhbnQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZCByaWdodCB0byB5b3UgdW5kZXIgSW50ZWwgcGF0ZW50cywgY29weXJpZ2h0cywgdHJhZGVtYXJrcywgb3IgdHJhZGUgc2VjcmV0IGluZm9ybWF0aW9uLgorCis1LiBOTyBXQVJSQU5UWSBBTkQgTElNSVRFRCBSRVBMQUNFTUVOVDogIFRIRSBNQVRFUklBTFMgQU5EIElORk9STUFUSU9OIEFSRSBQUk9WSURFRCAiQVMgSVMiIFdJVEggTk8gV0FSUkFOVElFUywgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIEFOWSBJTVBMSUVEIFdBUlJBTlRZIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTi1JTkZSSU5HRU1FTlQgT0YgSU5URUxMRUNUVUFMIFBST1BFUlRZIFJJR0hUUywgT1IgQU5ZIFdBUlJBTlRZIE9USEVSV0lTRSBBUklTSU5HIE9VVCBPRiBBTlkgUFJPUE9TQUwsIFNQRUNJRklDQVRJT04sIE9SIFNBTVBMRS4gIElmIHRoZSBtZWRpYSBvbiB3aGljaCB0aGUgTWF0ZXJpYWxzIGFyZSBmdXJuaXNoZWQgYXJlIGZvdW5kIHRvIGJlIGRlZmVjdGl2ZSBpbiBtYXRlcmlhbCBvciB3b3JrbWFuc2hpcCB1bmRlciBub3JtYWwgdXNlIGZvciBhIHBlcmlvZCBvZiBuaW5ldHkgKDkwKSBkYXlzIGZyb20gdGhlIGRhdGUgb2YgcmVjZWlwdCwgSW50ZWwncyBlbnRpcmUgbGlhYmlsaXR5IGFuZCB5b3VyIGV4Y2x1c2l2ZSByZW1lZHkgc2hhbGwgYmUgdGhlIHJlcGxhY2VtZW50IG9mIHRoZSBtZWRpYS4gIFRoaXMgb2ZmZXIgaXMgdm9pZCBpZiB0aGUgbWVkaWEgZGVmZWN0IHJlc3VsdHMgZnJvbSBhY2NpZGVudCwgYWJ1c2UsIG9yIG1pc2FwcGxpY2F0aW9uLgorCis2LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWTogVEhFIEFCT1ZFIFJFUExBQ0VNRU5UIFBST1ZJU0lPTiBJUyBUSEUgT05MWSBXQVJSQU5UWSBPRiBBTlkgS0lORC4gIElOVEVMIE9GRkVSUyBOTyBPVEhFUiBXQVJSQU5UWSBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIElOQ0xVRElORyBUSE9TRSBPRiBNRVJDSEFOVEFCSUxJVFksIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRC0gUEFSVFkgSU5URUxMRUNUVUFMIFBST1BFUlRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBORUlUSEVSIElOVEVMIE5PUiBJVFMgU1VQUExJRVJTIFNIQUxMIEJFIExJQUJMRSBGT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiAoSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgQlVTSU5FU1MgUFJPRklUUywgQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBMT1NTIE9GIEJVU0lORVNTIElORk9STUFUSU9OLCBPUiBPVEhFUiBMT1NTKSBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9GIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFNPRlRXQVJFLCBFVkVOIElGIElOVEVMIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gIEJFQ0FVU0UgU09NRSBKVVJJU0RJQ1RJT05TIFBST0hJQklUIFRIRSBFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgRk9SIENPTlNFUVVFTlRJQUwgT1IgSU5DSURFTlRBTCBEQU1BR0VTLCBUSEUgQUJPVkUgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNy4gVU5BVVRIT1JJWkVEIFVTRTogIFRIRSBNQVRFUklBTFMgQVJFIE5PVCBERVNJR05FRCwgSU5URU5ERUQsIE9SIEFVVEhPUklaRUQgRk9SIFVTRSBJTiBBTlkgVFlQRSBPRiBTWVNURU0gT1IgQVBQTElDQVRJT04gSU4gV0hJQ0ggVEhFIEZBSUxVUkUgT0YgVEhFIE1BVEVSSUFMUyBDT1VMRCBDUkVBVEUgQSBTSVRVQVRJT04gV0hFUkUgUEVSU09OQUwgSU5KVVJZIE9SIERFQVRIIE1BWSBPQ0NVUiAoRS5HIE1FRElDQUwgU1lTVEVNUywgTElGRSBTVVNUQUlOSU5HIE9SIExJRkUgU0FWSU5HIFNZU1RFTVMpLiAgU2hvdWxkIHRoZSBidXllciBwdXJjaGFzZSBvciB1c2UgdGhlIE1hdGVyaWFscyBmb3IgYW55IHN1Y2ggdW5pbnRlbmRlZCBvciB1bmF1dGhvcml6ZWQgdXNlLCB0aGUgYnV5ZXIgc2hhbGwgaW5kZW1uaWZ5IGFuZCBob2xkIEludGVsIGFuZCBpdHMgb2ZmaWNlcnMsIHN1YnNpZGlhcmllcyBhbmQgYWZmaWxpYXRlcyBoYXJtbGVzcyBhZ2FpbnN0IGFsbCBjbGFpbXMsIGNvc3RzLCBkYW1hZ2VzLCBhbmQgZXhwZW5zZXMsIGFuZCByZWFzb25hYmxlIGF0dG9ybmV5IGZlZXMgYXJpc2luZyBvdXQgb2YsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGFueSBjbGFpbSBvZiBwcm9kdWN0IGxpYWJpbGl0eSwgcGVyc29uYWwgaW5qdXJ5IG9yIGRlYXRoIGFzc29jaWF0ZWQgd2l0aCBzdWNoIHVuaW50ZW5kZWQgb3IgdW5hdXRob3JpemVkIHVzZSwgZXZlbiBpZiBzdWNoIGNsYWltIGFsbGVnZXMgdGhhdCBJbnRlbCB3YXMgbmVnbGlnZW50IHJlZ2FyZGluZyB0aGUgZGVzaWduIG9yIG1hbnVmYWN0dXJlIG9mIHRoZSBwYXJ0LgorCis4LiBVU0VSIFNVQk1JU1NJT05TOiAgWW91IGFncmVlIHRoYXQgYW55IG1hdGVyaWFsLCBpbmZvcm1hdGlvbiBvciBvdGhlciBjb21tdW5pY2F0aW9uIHlvdSB0cmFuc21pdCBvciBwb3N0IHRvIGFuIEludGVsIHdlYnNpdGUgb3IgcHJvdmlkZSB0byBJbnRlbCB1bmRlciB0aGlzIEFncmVlbWVudCB3aWxsIGJlIGNvbnNpZGVyZWQgbm9uLWNvbmZpZGVudGlhbCBhbmQgbm9uLXByb3ByaWV0YXJ5ICgiQ29tbXVuaWNhdGlvbnMiKS4gIEludGVsIHdpbGwgaGF2ZSBubyBvYmxpZ2F0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIENvbW11bmljYXRpb25zLiAgWW91IGFncmVlIHRoYXQgSW50ZWwgYW5kIGl0cyBkZXNpZ25lZXMgd2lsbCBiZSBmcmVlIHRvIGNvcHksIG1vZGlmeSwgY3JlYXRlIGRlcml2YXRpdmUgd29ya3MsIHB1YmxpY2x5IGRpc3BsYXksIGRpc2Nsb3NlLCBkaXN0cmlidXRlLCBsaWNlbnNlIGFuZCBzdWJsaWNlbnNlIHRocm91Z2ggbXVsdGlwbGUgdGllcnMgb2YgZGlzdHJpYnV0aW9uIGFuZCBsaWNlbnNlZXMsIGluY29ycG9yYXRlIGFuZCBvdGhlcndpc2UgdXNlIHRoZSBDb21tdW5pY2F0aW9ucyBhbmQgYWxsIGRhdGEsIGltYWdlcywgc291bmRzLCB0ZXh0LCBhbmQgb3RoZXIgdGhpbmdzIGVtYm9kaWVkIHRoZXJlaW4sIGluY2x1ZGluZyBkZXJpdmF0aXZlIHdvcmtzIHRoZXJldG8sIGZvciBhbnkgYW5kIGFsbCBjb21tZXJjaWFsIG9yIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzLiBZb3UgYXJlIHByb2hpYml0ZWQgZnJvbSBwb3N0aW5nIG9yIHRyYW5zbWl0dGluZyB0byBvciBmcm9tIGFuIEludGVsIHdlYnNpdGUgb3IgcHJvdmlkZSB0byBJbnRlbCBhbnkgdW5sYXdmdWwsIHRocmVhdGVuaW5nLCBsaWJlbG91cywgZGVmYW1hdG9yeSwgb2JzY2VuZSwgcG9ybm9ncmFwaGljLCBvciBvdGhlciBtYXRlcmlhbCB0aGF0IHdvdWxkIHZpb2xhdGUgYW55IGxhdy4KKworOS4gVEVSTUlOQVRJT04gT0YgVEhJUyBMSUNFTlNFOiBUaGlzIEFncmVlbWVudCBiZWNvbWVzIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSB5b3UgYWNjZXB0IHRoaXMgQWdyZWVtZW50IGFuZCB3aWxsIGNvbnRpbnVlIHVudGlsIHRlcm1pbmF0ZWQgYXMgcHJvdmlkZWQgZm9yIGluIHRoaXMgQWdyZWVtZW50LiAgSWYgeW91IGFyZSB1c2luZyB0aGUgTWF0ZXJpYWxzIHVuZGVyIHRoZSBjb250cm9sIG9mIGEgdGltZS1saW1pdGVkIGxpY2Vuc2UsIGZvciBleGFtcGxlIGFuIEV2YWx1YXRpb24gTGljZW5zZSwgdGhpcyBBZ3JlZW1lbnQgdGVybWluYXRlcyB3aXRob3V0IG5vdGljZSBvbiB0aGUgbGFzdCBkYXkgb2YgdGhlIHRpbWUgcGVyaW9kLCB3aGljaCBpcyBjb250cm9sbGVkIGJ5IHRoZSBsaWNlbnNlIGtleSBjb2RlIGZvciB0aGUgTWF0ZXJpYWxzLiAgSW50ZWwgbWF5IHRlcm1pbmF0ZSB0aGlzIGxpY2Vuc2UgYXQgYW55IHRpbWUgaWYgeW91IGFyZSBpbiBicmVhY2ggb2YgYW55IG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFVwb24gdGVybWluYXRpb24sIHlvdSB3aWxsIGltbWVkaWF0ZWx5IHJldHVybiB0byBJbnRlbCBvciBkZXN0cm95IHRoZSBNYXRlcmlhbHMgYW5kIGFsbCBjb3BpZXMgdGhlcmVvZi4KKworMTAuIFUuUy4gR09WRVJOTUVOVCBSRVNUUklDVEVEIFJJR0hUUzogVGhlIE1hdGVyaWFscyBhcmUgcHJvdmlkZWQgd2l0aCAiUkVTVFJJQ1RFRCBSSUdIVFMiLiBVc2UsIGR1cGxpY2F0aW9uIG9yIGRpc2Nsb3N1cmUgYnkgdGhlIEdvdmVybm1lbnQgaXMgc3ViamVjdCB0byByZXN0cmljdGlvbnMgc2V0IGZvcnRoIGluIEZBUjUyLjIyNy0xNCBhbmQgREZBUjI1Mi4yMjctNzAxMyBldCBzZXEuIG9yIGl0cyBzdWNjZXNzb3IuICBVc2Ugb2YgdGhlIE1hdGVyaWFscyBieSB0aGUgR292ZXJubWVudCBjb25zdGl0dXRlcyBhY2tub3dsZWRnbWVudCBvZiBJbnRlbCdzIHJpZ2h0cyBpbiB0aGVtLgorCisxMS4gQVBQTElDQUJMRSBMQVdTOiBBbnkgY2xhaW0gYXJpc2luZyB1bmRlciBvciByZWxhdGluZyB0byB0aGlzIEFncmVlbWVudCBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgaW50ZXJuYWwgc3Vic3RhbnRpdmUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgRGVsYXdhcmUsIHdpdGhvdXQgcmVnYXJkIHRvIHByaW5jaXBsZXMgb2YgY29uZmxpY3Qgb2YgbGF3cy4gIFlvdSBhZ3JlZSB0aGF0IHRoZSB0ZXJtcyBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBTYWxlIG9mIEdvb2RzIGRvIG5vdCBhcHBseSB0byB0aGlzIEFncmVlbWVudC4gWW91IGFncmVlIHRoYXQgeW91ciBkaXN0cmlidXRpb24gYW5kIGV4cG9ydC9yZS1leHBvcnQgb2YgdGhlIFNvZnR3YXJlIGFuZCBwZXJtaXR0ZWQgbW9kaWZpY2F0aW9ucyBzaGFsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIGxhd3MsIHJlZ3VsYXRpb25zLCBvcmRlcnMgb3Igb3RoZXIgcmVzdHJpY3Rpb25zIG9mIGFwcGxpY2FibGUgZXhwb3J0IGxhd3MuCisKKyogT3RoZXIgbmFtZXMgYW5kIGJyYW5kcyBtYXkgYmUgY2xhaW1lZCBhcyB0aGUgcHJvcGVydHkgb2Ygb3RoZXJzCmRpZmYgLS1naXQgYS9saWNlbnNlcy9JbnRlcmJhc2UtMS4wIGIvbGljZW5zZXMvSW50ZXJiYXNlLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWI5NzdhCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvSW50ZXJiYXNlLTEuMApAQCAtMCwwICsxLDEwNCBAQAorSU5URVJCQVNFIFBVQkxJQyBMSUNFTlNFIAorVmVyc2lvbiAxLjAgCisxLiBEZWZpbml0aW9ucy4gCisxLjAuMS4gIkNvbW1lcmNpYWwgVXNlIiBtZWFucyBkaXN0cmlidXRpb24gb3Igb3RoZXJ3aXNlIG1ha2luZyB0aGUgQ292ZXJlZCBDb2RlIGF2YWlsYWJsZSB0byBhIHRoaXJkIHBhcnR5LiAKKzEuMS4gJydDb250cmlidXRvcicnIG1lYW5zIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy4gCisxLjIuICcnQ29udHJpYnV0b3IgVmVyc2lvbicnIG1lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgcHJpb3IgTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEgQ29udHJpYnV0b3IsIGFuZCB0aGUgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gCisxLjMuICcnQ292ZXJlZCBDb2RlJycgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucyBvciB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgYW5kIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZSBpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi4gCisxLjQuICcnRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtJycgbWVhbnMgYSBtZWNoYW5pc20gZ2VuZXJhbGx5IGFjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljIHRyYW5zZmVyIG9mIGRhdGEuIAorMS41LiAnJ0V4ZWN1dGFibGUnJyBtZWFucyBDb3ZlcmVkIENvZGUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UgQ29kZS4gCisxLjYuICcnSW5pdGlhbCBEZXZlbG9wZXInJyBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgaWRlbnRpZmllZCBhcyB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEuIAorMS43LiAnJ0xhcmdlciBXb3JrJycgbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gCisxLjguICcnTGljZW5zZScnIG1lYW5zIHRoaXMgZG9jdW1lbnQuIAorMS44LjEuICJMaWNlbnNhYmxlIiBtZWFucyBoYXZpbmcgdGhlIHJpZ2h0IHRvIGdyYW50LCB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGUsIHdoZXRoZXIgYXQgdGhlIHRpbWUgb2YgdGhlIGluaXRpYWwgZ3JhbnQgb3Igc3Vic2VxdWVudGx5IGFjcXVpcmVkLCBhbnkgYW5kIGFsbCBvZiB0aGUgcmlnaHRzIGNvbnZleWVkIGhlcmVpbi4gCisxLjkuICcnTW9kaWZpY2F0aW9ucycnIG1lYW5zIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4gV2hlbiBDb3ZlcmVkIENvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOiAKK0EuIEFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUgY29udGFpbmluZyBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuIAorQi4gQW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4gCisxLjEwLiAnJ09yaWdpbmFsIENvZGUnJyBtZWFucyBTb3VyY2UgQ29kZSBvZiBjb21wdXRlciBzb2Z0d2FyZSBjb2RlIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQSBhcyBPcmlnaW5hbCBDb2RlLCBhbmQgd2hpY2gsIGF0IHRoZSB0aW1lIG9mIGl0cyByZWxlYXNlIHVuZGVyIHRoaXMgTGljZW5zZSBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLiAKKzEuMTAuMS4gIlBhdGVudCBDbGFpbXMiIG1lYW5zIGFueSBwYXRlbnQgY2xhaW0ocyksIG5vdyBvd25lZCBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIG1ldGhvZCwgcHJvY2VzcywgYW5kIGFwcGFyYXR1cyBjbGFpbXMsIGluIGFueSBwYXRlbnQgTGljZW5zYWJsZSBieSBncmFudG9yLiAKKzEuMTEuICcnU291cmNlIENvZGUnJyBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIENvdmVyZWQgQ29kZSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBFeGVjdXRhYmxlLCBvciBzb3VyY2UgY29kZSBkaWZmZXJlbnRpYWwgY29tcGFyaXNvbnMgYWdhaW5zdCBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW5vdGhlciB3ZWxsIGtub3duLCBhdmFpbGFibGUgQ292ZXJlZCBDb2RlIG9mIHRoZSBDb250cmlidXRvcidzIGNob2ljZS4gVGhlIFNvdXJjZSBDb2RlIGNhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwgcHJvdmlkZWQgdGhlIGFwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24gb3IgZGUtYXJjaGl2aW5nIHNvZnR3YXJlIGlzIHdpZGVseSBhdmFpbGFibGUgZm9yIG5vIGNoYXJnZS4gCisxLjEyLiAiWW91JycgKG9yICJZb3VyIikgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoLCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UnJyBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIFlvdS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wnJyBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgbW9yZSB0aGFuIGZpZnR5IHBlcmNlbnQgKDUwJSkgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKzIuIFNvdXJjZSBDb2RlIExpY2Vuc2UuIAorMi4xLiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgR3JhbnQuIAorVGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczogCisoYSkgdW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IgdHJhZGVtYXJrKSBMaWNlbnNhYmxlIGJ5IEluaXRpYWwgRGV2ZWxvcGVyIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQgCisoYikgdW5kZXIgUGF0ZW50cyBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nIG9yIHNlbGxpbmcgb2YgT3JpZ2luYWwgQ29kZSwgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIHByYWN0aWNlLCBzZWxsLCBhbmQgb2ZmZXIgZm9yIHNhbGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiB0aGUgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikuIAorKGMpIHRoZSBsaWNlbnNlcyBncmFudGVkIGluIHRoaXMgU2VjdGlvbiAyLjEoYSkgYW5kIChiKSBhcmUgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIEluaXRpYWwgRGV2ZWxvcGVyIGZpcnN0IGRpc3RyaWJ1dGVzIE9yaWdpbmFsIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gCisoZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4xKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOiAxKSBmb3IgY29kZSB0aGF0IFlvdSBkZWxldGUgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZTsgMikgc2VwYXJhdGUgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZTsgb3IgMykgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkIGJ5OiBpKSB0aGUgbW9kaWZpY2F0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGlpKSB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBkZXZpY2VzLiAKKzIuMi4gQ29udHJpYnV0b3IgR3JhbnQuIAorU3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UgCisoYSkgdW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IgdHJhZGVtYXJrKSBMaWNlbnNhYmxlIGJ5IENvbnRyaWJ1dG9yLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBNb2RpZmljYXRpb25zIGNyZWF0ZWQgYnkgc3VjaCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZikgZWl0aGVyIG9uIGFuIHVubW9kaWZpZWQgYmFzaXMsIHdpdGggb3RoZXIgTW9kaWZpY2F0aW9ucywgYXMgQ292ZXJlZCBDb2RlIGFuZC9vciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZCAKKyhiKSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZywgb3Igc2VsbGluZyBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciBlaXRoZXIgYWxvbmUgYW5kL29yIGluIGNvbWJpbmF0aW9uIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZjogMSkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpOyBhbmQgMikgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggaXRzIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLiAKKyhjKSB0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiBTZWN0aW9ucyAyLjIoYSkgYW5kIDIuMihiKSBhcmUgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIENvbnRyaWJ1dG9yIGZpcnN0IG1ha2VzIENvbW1lcmNpYWwgVXNlIG9mIHRoZSBDb3ZlcmVkIENvZGUuCisoZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4yKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOiAxKSBmb3IgYW55IGNvZGUgdGhhdCBDb250cmlidXRvciBoYXMgZGVsZXRlZCBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyAyKSBzZXBhcmF0ZSBmcm9tIHRoZSBDb250cmlidXRvciBWZXJzaW9uOyAzKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IGkpIHRoaXJkIHBhcnR5IG1vZGlmaWNhdGlvbnMgb2YgQ29udHJpYnV0b3IgVmVyc2lvbiBvciBpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggb3RoZXIgc29mdHdhcmUgKGV4Y2VwdCBhcyBwYXJ0IG9mIHRoZSBDb250cmlidXRvciBWZXJzaW9uKSBvciBvdGhlciBkZXZpY2VzOyBvciA0KSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSBDb3ZlcmVkIENvZGUgaW4gdGhlIGFic2VuY2Ugb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IuCiszLiBEaXN0cmlidXRpb24gT2JsaWdhdGlvbnMuIAorMy4xLiBBcHBsaWNhdGlvbiBvZiBMaWNlbnNlLiAKK1RoZSBNb2RpZmljYXRpb25zIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gU2VjdGlvbiAyLjIuIFRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBtYXkgYmUgZGlzdHJpYnV0ZWQgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNi4xLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgU291cmNlIENvZGUgWW91IGRpc3RyaWJ1dGUuIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gYW55IFNvdXJjZSBDb2RlIHZlcnNpb24gdGhhdCBhbHRlcnMgb3IgcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzJyByaWdodHMgaGVyZXVuZGVyLiBIb3dldmVyLCBZb3UgbWF5IGluY2x1ZGUgYW4gYWRkaXRpb25hbCBkb2N1bWVudCBvZmZlcmluZyB0aGUgYWRkaXRpb25hbCByaWdodHMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy41LiAKKzMuMi4gQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLiAKK0FueSBNb2RpZmljYXRpb24gd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIGluIFNvdXJjZSBDb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBlaXRoZXIgb24gdGhlIHNhbWUgbWVkaWEgYXMgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHZpYSBhbiBhY2NlcHRlZCBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gdG8gYW55b25lIHRvIHdob20geW91IG1hZGUgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIGF2YWlsYWJsZTsgYW5kIGlmIG1hZGUgYXZhaWxhYmxlIHZpYSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20sIG11c3QgcmVtYWluIGF2YWlsYWJsZSBmb3IgYXQgbGVhc3QgdHdlbHZlICgxMikgbW9udGhzIGFmdGVyIHRoZSBkYXRlIGl0IGluaXRpYWxseSBiZWNhbWUgYXZhaWxhYmxlLCBvciBhdCBsZWFzdCBzaXggKDYpIG1vbnRocyBhZnRlciBhIHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGF0IHBhcnRpY3VsYXIgTW9kaWZpY2F0aW9uIGhhcyBiZWVuIG1hZGUgYXZhaWxhYmxlIHRvIHN1Y2ggcmVjaXBpZW50cy4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZW5zdXJpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiByZW1haW5zIGF2YWlsYWJsZSBldmVuIGlmIHRoZSBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gaXMgbWFpbnRhaW5lZCBieSBhIHRoaXJkIHBhcnR5LiAKKzMuMy4gRGVzY3JpcHRpb24gb2YgTW9kaWZpY2F0aW9ucy4gCitZb3UgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBDb2RlIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4gYSBmaWxlIGRvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIFlvdSBtYWRlIHRvIGNyZWF0ZSB0aGF0IENvdmVyZWQgQ29kZSBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdCB0aGUgTW9kaWZpY2F0aW9uIGlzIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwgQ29kZSBwcm92aWRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGluY2x1ZGluZyB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gKGEpIHRoZSBTb3VyY2UgQ29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gaW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZSBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBDb3ZlcmVkIENvZGUuIAorMy40LiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVycworKGEpIFRoaXJkIFBhcnR5IENsYWltcy4gCitJZiBDb250cmlidXRvciBoYXMga25vd2xlZGdlIHRoYXQgYSBsaWNlbnNlIHVuZGVyIGEgdGhpcmQgcGFydHkncyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIsIENvbnRyaWJ1dG9yIG11c3QgaW5jbHVkZSBhIHRleHQgZmlsZSB3aXRoIHRoZSBTb3VyY2UgQ29kZSBkaXN0cmlidXRpb24gdGl0bGVkICJMRUdBTCcnIHdoaWNoIGRlc2NyaWJlcyB0aGUgY2xhaW0gYW5kIHRoZSBwYXJ0eSBtYWtpbmcgdGhlIGNsYWltIGluIHN1ZmZpY2llbnQgZGV0YWlsIHRoYXQgYSByZWNpcGllbnQgd2lsbCBrbm93IHdob20gdG8gY29udGFjdC4gSWYgQ29udHJpYnV0b3Igb2J0YWlucyBzdWNoIGtub3dsZWRnZSBhZnRlciB0aGUgTW9kaWZpY2F0aW9uIGlzIG1hZGUgYXZhaWxhYmxlIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMiwgQ29udHJpYnV0b3Igc2hhbGwgcHJvbXB0bHkgbW9kaWZ5IHRoZSBMRUdBTCBmaWxlIGluIGFsbCBjb3BpZXMgQ29udHJpYnV0b3IgbWFrZXMgYXZhaWxhYmxlIHRoZXJlYWZ0ZXIgYW5kIHNoYWxsIHRha2Ugb3RoZXIgc3RlcHMgKHN1Y2ggYXMgbm90aWZ5aW5nIGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdHMgb3IgbmV3c2dyb3VwcykgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSB0aG9zZSB3aG8gcmVjZWl2ZWQgdGhlIENvdmVyZWQgQ29kZSB0aGF0IG5ldyBrbm93bGVkZ2UgaGFzIGJlZW4gb2J0YWluZWQuIAorKGIpIENvbnRyaWJ1dG9yIEFQSXMuIAorSWYgQ29udHJpYnV0b3IncyBNb2RpZmljYXRpb25zIGluY2x1ZGUgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGFuZCBDb250cmlidXRvciBoYXMga25vd2xlZGdlIG9mIHBhdGVudCBsaWNlbnNlcyB3aGljaCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCBDb250cmlidXRvciBtdXN0IGFsc28gaW5jbHVkZSB0aGlzIGluZm9ybWF0aW9uIGluIHRoZSBMRUdBTCBmaWxlLiAKKyhjKSBSZXByZXNlbnRhdGlvbnMuIAorQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0LCBleGNlcHQgYXMgZGlzY2xvc2VkIHB1cnN1YW50IHRvIFNlY3Rpb24gMy40KGEpIGFib3ZlLCBDb250cmlidXRvciBiZWxpZXZlcyB0aGF0IENvbnRyaWJ1dG9yJ3MgTW9kaWZpY2F0aW9ucyBhcmUgQ29udHJpYnV0b3IncyBvcmlnaW5hbCBjcmVhdGlvbihzKSBhbmQvb3IgQ29udHJpYnV0b3IgaGFzIHN1ZmZpY2llbnQgcmlnaHRzIHRvIGdyYW50IHRoZSByaWdodHMgY29udmV5ZWQgYnkgdGhpcyBMaWNlbnNlLgorMy41LiBSZXF1aXJlZCBOb3RpY2VzLiAKK1lvdSBtdXN0IGR1cGxpY2F0ZSB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBpbiBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlLiBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHN1Y2ggbm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UgQ29kZSBmaWxlIGR1ZSB0byBpdHMgc3RydWN0dXJlLCB0aGVuIFlvdSBtdXN0IGluY2x1ZGUgc3VjaCBub3RpY2UgaW4gYSBsb2NhdGlvbiAoc3VjaCBhcyBhIHJlbGV2YW50IGRpcmVjdG9yeSkgd2hlcmUgYSB1c2VyIHdvdWxkIGJlIGxpa2VseSB0byBsb29rIGZvciBzdWNoIGEgbm90aWNlLiBJZiBZb3UgY3JlYXRlZCBvbmUgb3IgbW9yZSBNb2RpZmljYXRpb24ocykgWW91IG1heSBhZGQgeW91ciBuYW1lIGFzIGEgQ29udHJpYnV0b3IgdG8gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLiBZb3UgbXVzdCBhbHNvIGR1cGxpY2F0ZSB0aGlzIExpY2Vuc2UgaW4gYW55IGRvY3VtZW50YXRpb24gZm9yIHRoZSBTb3VyY2UgQ29kZSB3aGVyZSBZb3UgZGVzY3JpYmUgcmVjaXBpZW50cycgcmlnaHRzIG9yIG93bmVyc2hpcCByaWdodHMgcmVsYXRpbmcgdG8gQ292ZXJlZCBDb2RlLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBDb2RlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmLCBhbmQgbm90IG9uIGJlaGFsZiBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhbiBhbnkgc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzIG9mZmVyZWQgYnkgWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSB0ZXJtcyBZb3Ugb2ZmZXIuCiszLjYuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLiAKK1lvdSBtYXkgZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUgaW4gRXhlY3V0YWJsZSBmb3JtIG9ubHkgaWYgdGhlIHJlcXVpcmVtZW50cyBvZiBTZWN0aW9uIDMuMS0zLjUgaGF2ZSBiZWVuIG1ldCBmb3IgdGhhdCBDb3ZlcmVkIENvZGUsIGFuZCBpZiBZb3UgaW5jbHVkZSBhIG5vdGljZSBzdGF0aW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgdGhlIENvdmVyZWQgQ29kZSBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIGEgZGVzY3JpcHRpb24gb2YgaG93IGFuZCB3aGVyZSBZb3UgaGF2ZSBmdWxmaWxsZWQgdGhlIG9ibGlnYXRpb25zIG9mIFNlY3Rpb24gMy4yLiBUaGUgbm90aWNlIG11c3QgYmUgY29uc3BpY3VvdXNseSBpbmNsdWRlZCBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiwgcmVsYXRlZCBkb2N1bWVudGF0aW9uIG9yIGNvbGxhdGVyYWwgaW4gd2hpY2ggWW91IGRlc2NyaWJlIHJlY2lwaWVudHMnIHJpZ2h0cyByZWxhdGluZyB0byB0aGUgQ292ZXJlZCBDb2RlLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgb3Igb3duZXJzaGlwIHJpZ2h0cyB1bmRlciBhIGxpY2Vuc2Ugb2YgWW91ciBjaG9pY2UsIHdoaWNoIG1heSBjb250YWluIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgdGhhdCBZb3UgYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGF0IHRoZSBsaWNlbnNlIGZvciB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIGRvZXMgbm90IGF0dGVtcHQgdG8gbGltaXQgb3IgYWx0ZXIgdGhlIHJlY2lwaWVudCdzIHJpZ2h0cyBpbiB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBmcm9tIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIHRoaXMgTGljZW5zZS4gSWYgWW91IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgdmVyc2lvbiB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBub3QgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueSBDb250cmlidXRvci4gWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiBhbnkgc3VjaCB0ZXJtcyBZb3Ugb2ZmZXIuIAorMy43LiBMYXJnZXIgV29ya3MuIAorWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBDb2RlIHdpdGggb3RoZXIgY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlLgorNC4gSW5hYmlsaXR5IHRvIENvbXBseSBEdWUgdG8gU3RhdHV0ZSBvciBSZWd1bGF0aW9uLiAKK0lmIGl0IGlzIGltcG9zc2libGUgZm9yIFlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gc29tZSBvciBhbGwgb2YgdGhlIENvdmVyZWQgQ29kZSBkdWUgdG8gc3RhdHV0ZSwganVkaWNpYWwgb3JkZXIsIG9yIHJlZ3VsYXRpb24gdGhlbiBZb3UgbXVzdDogKGEpIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlOyBhbmQgKGIpIGRlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQgdGhlIGNvZGUgdGhleSBhZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgTEVHQUwgZmlsZSBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjQgYW5kIG11c3QgYmUgaW5jbHVkZWQgd2l0aCBhbGwgZGlzdHJpYnV0aW9ucyBvZiB0aGUgU291cmNlIENvZGUuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlIHRvIHVuZGVyc3RhbmQgaXQuCis1LiBBcHBsaWNhdGlvbiBvZiB0aGlzIExpY2Vuc2UuIAorVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gY29kZSB0byB3aGljaCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaGFzIGF0dGFjaGVkIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGFuZCB0byByZWxhdGVkIENvdmVyZWQgQ29kZS4KKzYuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLiAKKzYuMS4gTmV3IFZlcnNpb25zLiAKK0lucHJpc2UgQ29ycG9yYXRpb24gKCcnSW5wcmlzZScnKSBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIAorNi4yLiBFZmZlY3Qgb2YgTmV3IFZlcnNpb25zLiAKK09uY2UgQ292ZXJlZCBDb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSwgWW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggQ292ZXJlZCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHB1Ymxpc2hlZCBieSBJbnByaXNlLiBObyBvbmUgb3RoZXIgdGhhbiBJbnByaXNlIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIENvdmVyZWQgQ29kZSBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gCis2LjMuIERlcml2YXRpdmUgV29ya3MuIAorSWYgWW91IGNyZWF0ZSBvciB1c2UgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSAod2hpY2ggeW91IG1heSBvbmx5IGRvIGluIG9yZGVyIHRvIGFwcGx5IGl0IHRvIGNvZGUgd2hpY2ggaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSksIFlvdSBtdXN0IChhKSByZW5hbWUgWW91ciBsaWNlbnNlIHNvIHRoYXQgdGhlIHBocmFzZXMgJydNb3ppbGxhJycsICcnTU9aSUxMQVBMJycsICcnTU9aUEwnJywgJydOZXRzY2FwZScnLCAiTVBMIiwgJydOUEwiLCAiSW5wcmlzZSIsICJJU0MiLCAiSW50ZXJCYXNlIiwgIklCJycgb3IgYW55IGNvbmZ1c2luZ2x5IHNpbWlsYXIgcGhyYXNlIGRvIG5vdCBhcHBlYXIgaW4geW91ciBsaWNlbnNlIChleGNlcHQgdG8gbm90ZSB0aGF0IHlvdXIgbGljZW5zZSBkaWZmZXJzIGZyb20gdGhpcyBMaWNlbnNlKSBhbmQgKGIpIG90aGVyd2lzZSBtYWtlIGl0IGNsZWFyIHRoYXQgWW91ciB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlIGNvbnRhaW5zIHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIGFuZCBOZXRzY2FwZSBQdWJsaWMgTGljZW5zZS4gKEZpbGxpbmcgaW4gdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBDb2RlIG9yIENvbnRyaWJ1dG9yIGluIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQSBzaGFsbCBub3Qgb2YgdGhlbXNlbHZlcyBiZSBkZWVtZWQgdG8gYmUgbW9kaWZpY2F0aW9ucyBvZiB0aGlzIExpY2Vuc2UuKQorNi40IE9yaWdpbiBvZiB0aGUgSW50ZXJCYXNlIFB1YmxpYyBMaWNlbnNlLgorVGhlIEludGVyQmFzZSBQdWJsaWMgTGljZW5zZSBWIDEuMCBpcyBiYXNlZCBvbiB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWIDEuMSB3aXRoIHRoZSBmb2xsb3dpbmcgY2hhbmdlczogCisxLiBUaGUgbGljZW5zZSBpcyBwdWJsaXNoZWQgYnkgSW5wcmlzZSBDb3Jwb3JhdGlvbi4gT25seSBJbnByaXNlIENvcnBvcmF0aW9uIGNhbiBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gQ292ZXJlZCBDb2RlLiAKKzIuIFRoZSBsaWNlbnNlIGNhbiBiZSBtb2RpZmllZCBhbmQgdXNlZCBmb3IgY29kZSB3aGljaCBpcyBub3QgYWxyZWFkeSBnb3Zlcm5lZCBieSB0aGlzIGxpY2Vuc2UuIE1vZGlmaWVkIHZlcnNpb25zIG9mIHRoZSBsaWNlbnNlIG11c3QgYmUgcmVuYW1lZCB0byBhdm9pZCBjb25mdXNpb24gd2l0aCBOZXRzY2FwZSdzIG9yIElucHJpc2UgQ29ycG9yYXRpb24ncyBwdWJsaWMgbGljZW5zZSBhbmQgbXVzdCBpbmNsdWRlIGEgZGVzY3JpcHRpb24gb2YgY2hhbmdlcyBmcm9tIHRoZSBJbnRlckJhc2UgUHVibGljIExpY2Vuc2UuCiszLiBUaGUgbmFtZSBvZiB0aGUgbGljZW5zZSBpbiBFeGhpYml0IEEgaXMgdGhlICJJbnRlckJhc2UgUHVibGljIExpY2Vuc2UiLiAKKzQuIFRoZSByZWZlcmVuY2UgdG8gYW4gYWx0ZXJuYXRpdmUgbGljZW5zZSBpbiBFeGhpYml0IEEgaGFzIGJlZW4gcmVtb3ZlZC4KKzUuIEFtZW5kbWVudHMgSSwgSUksIElJSSwgViwgYW5kIFZJIGhhdmUgYmVlbiBkZWxldGVkLgorNi4gRXhoaWJpdCBBLCBOZXRzY2FwZSBQdWJsaWMgTGljZW5zZSBoYXMgYmVlbiBkZWxldGVkCis3LiBBIG5ldyBhbWVuZG1lbnQgKElJKSBoYXMgYmVlbiBhZGRlZCwgZGVzY3JpYmluZyB0aGUgcmVxdWlyZWQgYW5kIHJlc3RyaWN0ZWQgcmlnaHRzIHRvIHVzZSB0aGUgdHJhZGVtYXJrcyBvZiBJbnByaXNlIENvcnBvcmF0aW9uLgorNy4gRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS4gCitDT1ZFUkVEIENPREUgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOICJBUyBJUycnIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIENPVkVSRUQgQ09ERSBJUyBGUkVFIE9GIERFRkVDVFMsIE1FUkNIQU5UQUJMRSwgRklUIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tSU5GUklOR0lORy4gVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgQ09WRVJFRCBDT0RFIElTIFdJVEggWU9VLiBTSE9VTEQgQU5ZIENPVkVSRUQgQ09ERSBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsIFlPVSAoTk9UIFRIRSBJTklUSUFMIERFVkVMT1BFUiBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUgQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRiBBTlkgQ09WRVJFRCBDT0RFIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIERJU0NMQUlNRVIuCis4LiBURVJNSU5BVElPTi4gCis4LjEuIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoIGFyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZS4gCis4LjIuIElmIFlvdSBpbml0aWF0ZSBsaXRpZ2F0aW9uIGJ5IGFzc2VydGluZyBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gKGV4Y2x1ZGluZyBkZWNsYXJhdG9yeSBqdWRnbWVudCBhY3Rpb25zKSBhZ2FpbnN0IEluaXRpYWwgRGV2ZWxvcGVyIG9yIGEgQ29udHJpYnV0b3IgKHRoZSBJbml0aWFsIERldmVsb3BlciBvciBDb250cmlidXRvciBhZ2FpbnN0IHdob20gWW91IGZpbGUgc3VjaCBhY3Rpb24gaXMgcmVmZXJyZWQgdG8gYXMgIlBhcnRpY2lwYW50IikgYWxsZWdpbmcgdGhhdDogCisoYSkgc3VjaCBQYXJ0aWNpcGFudCdzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbiBhbnkgYW5kIGFsbCByaWdodHMgZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwsIHVwb24gNjAgZGF5cyBub3RpY2UgZnJvbSBQYXJ0aWNpcGFudCB0ZXJtaW5hdGUgcHJvc3BlY3RpdmVseSwgdW5sZXNzIGlmIHdpdGhpbiA2MCBkYXlzIGFmdGVyIHJlY2VpcHQgb2Ygbm90aWNlIFlvdSBlaXRoZXI6IChpKSBhZ3JlZSBpbiB3cml0aW5nIHRvIHBheSBQYXJ0aWNpcGFudCBhIG11dHVhbGx5IGFncmVlYWJsZSByZWFzb25hYmxlIHJveWFsdHkgZm9yIFlvdXIgcGFzdCBhbmQgZnV0dXJlIHVzZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgc3VjaCBQYXJ0aWNpcGFudCwgb3IgKGlpKSB3aXRoZHJhdyBZb3VyIGxpdGlnYXRpb24gY2xhaW0gd2l0aCByZXNwZWN0IHRvIHRoZSBDb250cmlidXRvciBWZXJzaW9uIGFnYWluc3Qgc3VjaCBQYXJ0aWNpcGFudC4gSWYgd2l0aGluIDYwIGRheXMgb2Ygbm90aWNlLCBhIHJlYXNvbmFibGUgcm95YWx0eSBhbmQgcGF5bWVudCBhcnJhbmdlbWVudCBhcmUgbm90IG11dHVhbGx5IGFncmVlZCB1cG9uIGluIHdyaXRpbmcgYnkgdGhlIHBhcnRpZXMgb3IgdGhlIGxpdGlnYXRpb24gY2xhaW0gaXMgbm90IHdpdGhkcmF3biwgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlciBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSBhdCB0aGUgZXhwaXJhdGlvbiBvZiB0aGUgNjAgZGF5IG5vdGljZSBwZXJpb2Qgc3BlY2lmaWVkIGFib3ZlLiAKKyhiKSBhbnkgc29mdHdhcmUsIGhhcmR3YXJlLCBvciBkZXZpY2UsIG90aGVyIHRoYW4gc3VjaCBQYXJ0aWNpcGFudCdzIENvbnRyaWJ1dG9yIFZlcnNpb24sIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gYW55IHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMShiKSBhbmQgMi4yKGIpIGFyZSByZXZva2VkIGVmZmVjdGl2ZSBhcyBvZiB0aGUgZGF0ZSBZb3UgZmlyc3QgbWFkZSwgdXNlZCwgc29sZCwgZGlzdHJpYnV0ZWQsIG9yIGhhZCBtYWRlLCBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBQYXJ0aWNpcGFudC4gCis4LjMuIElmIFlvdSBhc3NlcnQgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIGFnYWluc3QgUGFydGljaXBhbnQgYWxsZWdpbmcgdGhhdCBzdWNoIFBhcnRpY2lwYW50J3MgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50IHdoZXJlIHN1Y2ggY2xhaW0gaXMgcmVzb2x2ZWQgKHN1Y2ggYXMgYnkgbGljZW5zZSBvciBzZXR0bGVtZW50KSBwcmlvciB0byB0aGUgaW5pdGlhdGlvbiBvZiBwYXRlbnQgaW5mcmluZ2VtZW50IGxpdGlnYXRpb24sIHRoZW4gdGhlIHJlYXNvbmFibGUgdmFsdWUgb2YgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yIHNoYWxsIGJlIHRha2VuIGludG8gYWNjb3VudCBpbiBkZXRlcm1pbmluZyB0aGUgYW1vdW50IG9yIHZhbHVlIG9mIGFueSBwYXltZW50IG9yIGxpY2Vuc2UuIAorOC40LiBJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgOC4xIG9yIDguMiBhYm92ZSwgYWxsIGVuZCB1c2VyIGxpY2Vuc2UgYWdyZWVtZW50cyAoZXhjbHVkaW5nIGRpc3RyaWJ1dG9ycyBhbmQgcmVzZWxsZXJzKSB3aGljaCBoYXZlIGJlZW4gdmFsaWRseSBncmFudGVkIGJ5IFlvdSBvciBhbnkgZGlzdHJpYnV0b3IgaGVyZXVuZGVyIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24uCis5LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS4KK1VOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFlPVSwgVEhFIElOSVRJQUwgREVWRUxPUEVSLCBBTlkgT1RIRVIgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBDT1ZFUkVEIENPREUsIE9SIEFOWSBTVVBQTElFUiBPRiBBTlkgT0YgU1VDSCBQQVJUSUVTLCBCRSBMSUFCTEUgVE8gQU5ZIFBFUlNPTiBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBBUlRZIFNIQUxMIEhBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZJ1MgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXIFBST0hJQklUUyBTVUNIIExJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSElTIEVYQ0xVU0lPTiBBTkQgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKzEwLiBVLlMuIEdPVkVSTk1FTlQgRU5EIFVTRVJTLiAKK1RoZSBDb3ZlcmVkIENvZGUgaXMgYSAnJ2NvbW1lcmNpYWwgaXRlbSwnJyBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbiA0OCBDLkYuUi4gMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2YgJydjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlJycgYW5kICcnY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBkb2N1bWVudGF0aW9uLCcnIGFzIHN1Y2ggdGVybXMgYXJlIHVzZWQgaW4gNDggQy5GLlIuIDEyLjIxMiAoU2VwdC4gMTk5NSkuIENvbnNpc3RlbnQgd2l0aCA0OCBDLkYuUi4gMTIuMjEyIGFuZCA0OCBDLkYuUi4gMjI3LjcyMDItMSB0aHJvdWdoIDIyNy43MjAyLTQgKEp1bmUgMTk5NSksIGFsbCBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzIGFjcXVpcmUgQ292ZXJlZCBDb2RlIHdpdGggb25seSB0aG9zZSByaWdodHMgc2V0IGZvcnRoIGhlcmVpbi4gCisxMS4gTUlTQ0VMTEFORU9VUy4gCitUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IENhbGlmb3JuaWEgbGF3IHByb3Zpc2lvbnMgKGV4Y2VwdCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3LCBpZiBhbnksIHByb3ZpZGVzIG90aGVyd2lzZSksIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIFdpdGggcmVzcGVjdCB0byBkaXNwdXRlcyBpbiB3aGljaCBhdCBsZWFzdCBvbmUgcGFydHkgaXMgYSBjaXRpemVuIG9mLCBvciBhbiBlbnRpdHkgY2hhcnRlcmVkIG9yIHJlZ2lzdGVyZWQgdG8gZG8gYnVzaW5lc3MgaW4gdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSwgYW55IGxpdGlnYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgRmVkZXJhbCBDb3VydHMgb2YgdGhlIE5vcnRoZXJuIERpc3RyaWN0IG9mIENhbGlmb3JuaWEsIHdpdGggdmVudWUgbHlpbmcgaW4gU2FudGEgQ2xhcmEgQ291bnR5LCBDYWxpZm9ybmlhLCB3aXRoIHRoZSBsb3NpbmcgcGFydHkgcmVzcG9uc2libGUgZm9yIGNvc3RzLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBjb3VydCBjb3N0cyBhbmQgcmVhc29uYWJsZSBhdHRvcm5leXMnIGZlZXMgYW5kIGV4cGVuc2VzLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgc2hhbGwgbm90IGFwcGx5IHRvIHRoaXMgTGljZW5zZS4KKzEyLiBSRVNQT05TSUJJTElUWSBGT1IgQ0xBSU1TLiAKK0FzIGJldHdlZW4gSW5pdGlhbCBEZXZlbG9wZXIgYW5kIHRoZSBDb250cmlidXRvcnMsIGVhY2ggcGFydHkgaXMgcmVzcG9uc2libGUgZm9yIGNsYWltcyBhbmQgZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBvdXQgb2YgaXRzIHV0aWxpemF0aW9uIG9mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIFlvdSBhZ3JlZSB0byB3b3JrIHdpdGggSW5pdGlhbCBEZXZlbG9wZXIgYW5kIENvbnRyaWJ1dG9ycyB0byBkaXN0cmlidXRlIHN1Y2ggcmVzcG9uc2liaWxpdHkgb24gYW4gZXF1aXRhYmxlIGJhc2lzLiBOb3RoaW5nIGhlcmVpbiBpcyBpbnRlbmRlZCBvciBzaGFsbCBiZSBkZWVtZWQgdG8gY29uc3RpdHV0ZSBhbnkgYWRtaXNzaW9uIG9mIGxpYWJpbGl0eS4gCisxMy4gTVVMVElQTEUtTElDRU5TRUQgQ09ERS4gCitJbml0aWFsIERldmVsb3BlciBtYXkgZGVzaWduYXRlIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgYXMgIk11bHRpcGxlLUxpY2Vuc2VkIi4gIk11bHRpcGxlLUxpY2Vuc2VkIiBtZWFucyB0aGF0IHRoZSBJbml0aWFsIERldmVsb3BlciBwZXJtaXRzIHlvdSB0byB1dGlsaXplIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgdW5kZXIgWW91ciBjaG9pY2Ugb2YgdGhlIElQTCBvciB0aGUgYWx0ZXJuYXRpdmUgbGljZW5zZXMsIGlmIGFueSwgc3BlY2lmaWVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgZmlsZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLgorRVhISUJJVCBBIC0gSW50ZXJCYXNlIFB1YmxpYyBMaWNlbnNlLgorYGBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBJbnRlckJhc2UgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3LklucHJpc2UuY29tL0lQTC5odG1sIAorU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuIAorVGhlIE9yaWdpbmFsIENvZGUgd2FzIGNyZWF0ZWQgYnkgSW5wcmlzZSBDb3Jwb3JhdGlvbiBhbmQgaXRzIHByZWRlY2Vzc29ycy4gCitQb3J0aW9ucyBjcmVhdGVkIGJ5IElucHJpc2UgQ29ycG9yYXRpb24gYXJlIENvcHlyaWdodCAoQykgSW5wcmlzZSBDb3Jwb3JhdGlvbi4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4gCitDb250cmlidXRvcihzKTogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uIAorQU1FTkRNRU5UUyAKK0kuIElucHJpc2UgYW5kIGxvZ28uIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBhbnkgcmlnaHRzIHRvIHVzZSB0aGUgdHJhZGVtYXJrcyAiSW5wcmlzZScnLCAiSW50ZXJCYXNlLCIgIkphdmEiIG9yICJKYXZhU2NyaXB0IiBldmVuIGlmIHN1Y2ggbWFya3MgYXJlIGluY2x1ZGVkIGluIHRoZSBPcmlnaW5hbCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMuIAorSUkuIFRyYWRlbWFyayBVc2FnZS4gCitJSS4xLiBBZHZlcnRpc2luZyBNYXRlcmlhbHMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhlIGNvdmVyZWQgQ29kZSBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6ICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IElucHJpc2UgQ29ycG9yYXRpb24uICIKK0lJLjIuIEVuZG9yc2VtZW50cy4gVGhlIG5hbWVzICJJbnByaXNlLCIgIkludGVyQmFzZSwiICJJU0MsIiBhbmQgIklCIiBtdXN0IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBDb250cmlidXRvciBWZXJzaW9ucyBvciBMYXJnZXIgV29ya3Mgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIElucHJpc2UuCitJSS4zLiBQcm9kdWN0IE5hbWVzLiBDb250cmlidXRvciBWZXJzaW9ucyBhbmQgTGFyZ2VyIFdvcmtzIG1heSBub3QgYmUgY2FsbGVkICJJbnByaXNlIiBvciAiSW50ZXJCYXNlIiBub3IgbWF5IHRoZSB3b3JkcyAiSW5wcmlzZSIgb3IgIkludGVyQmFzZSIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiBJbnByaXNlIENvcnBvcmF0aW9uLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvSW50cm92ZXJzaW9uIGIvbGljZW5zZXMvSW50cm92ZXJzaW9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyYWU0ZWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9JbnRyb3ZlcnNpb24KQEAgLTAsMCArMSwxMDUgQEAKKworTElDRU5TRSBBR1JFRU1FTlQgQU5EIExJTUlURUQgV0FSUkFOVFkKK1BMRUFTRSBSRUFEIFRISVMgTElDRU5TRSBDQVJFRlVMTFkgQkVGT1JFIFVTSU5HIFRIRSBTT0ZUV0FSRS4gVEhJUyBET0NVTUVOVAorSVMgQU4gQUdSRUVNRU5UIEJFVFdFRU4gWU9VIEFORCBJTlRST1ZFUlNJT04gU09GVFdBUkUgTElNSVRFRC4gKFRIRQorIkNPTVBBTlkiKS4gVEhFIENPTVBBTlkgSVMgV0lMTElORyBUTyBMSUNFTlNFIFRIRSBFTkNMT1NFRCBTT0ZUV0FSRSBUTyBZT1UKK09OTFkgT04gVEhFIENPTkRJVElPTiBUSEFUIFlPVSBBQ0NFUFQgQUxMIFRIRSBURVJNUyBDT05UQUlORUQgSU4gVEhJUworQUdSRUVNRU5ULiBCWSBVU0lORyBUSEUgU09GVFdBUkUgWU9VIEFSRSBBR1JFRUlORyBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMKK09GIFRISVMgTElDRU5TRS4KKworMS4gT3duZXJzaGlwIEFuZCBMaWNlbnNlLiBUaGlzIGlzIGEgbGljZW5zZSBhZ3JlZW1lbnQgYW5kIE5PVCBhbiBhZ3JlZW1lbnQKK2ZvciBzYWxlLiBUaGUgc29mdHdhcmUgY29udGFpbmVkIGluIHRoaXMgcGFja2FnZSAodGhlICJTb2Z0d2FyZSIpIGlzIHRoZQorcHJvcGVydHkgb2YgdGhlIENvbXBhbnkgYW5kL29yIGl0cyBMaWNlbnNvcnMuIFlvdSBvd24gdGhlIGRpc2svQ0Qgb24gd2hpY2gKK3RoZSBTb2Z0d2FyZSBpcyByZWNvcmRlZCwgYnV0IHRoZSBDb21wYW55IGFuZC9vciBpdHMgTGljZW5zb3JzIHJldGFpbiB0aXRsZQordG8gdGhlIFNvZnR3YXJlIGFuZCByZWxhdGVkIGRvY3VtZW50YXRpb24uIFlvdXIgcmlnaHRzIHRvIHVzZSB0aGUgU29mdHdhcmUKK2FyZSBzcGVjaWZpZWQgaW4gdGhpcyBBZ3JlZW1lbnQsIGFuZCB0aGUgQ29tcGFueSBhbmQvb3IgaXRzIExpY2Vuc29ycworcmV0YWluIGFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIHRvIHlvdSBpbiB0aGlzIEFncmVlbWVudC4KKworMi4gUGVybWl0dGVkIFVzZXMuIFlvdSBhcmUgZ3JhbnRlZCB0aGUgZm9sbG93aW5nIHJpZ2h0IHRvIHRoZSBTb2Z0d2FyZSA6CisoYSkgUmlnaHQgdG8gSW5zdGFsbCBhbmQgVXNlLiBZb3UgbWF5IGluc3RhbGwgYW5kIHVzZSB0aGUgU29mdHdhcmUgb24gYQorc2luZ2xlIGNvbXB1dGVyLiBJZiB5b3Ugd2lzaCB0byB1c2UgdGhlIFNvZnR3YXJlIG9uIG1vcmUgdGhhbiBvbmUgY29tcHV0ZXIsCitwbGVhc2UgY29udGFjdCB0aGUgQ29tcGFueSBmb3IgaW5mb3JtYXRpb24gY29uY2VybmluZyBhbiB1cGdyYWRlZCBsaWNlbnNlCithbGxvd2luZyB1c2Ugb2YgdGhlIFNvZnR3YXJlIHdpdGggYWRkaXRpb25hbCBjb21wdXRlcnMuCisKKzMuIFByb2hpYml0ZWQgVXNlcy4gVGhlIGZvbGxvd2luZyB1c2VzIG9mIHRoZSBTb2Z0d2FyZSBhcmUgcHJvaGliaXRlZC4gWW91CittYXkgTk9UIDoKKyhhKSBNYWtlIG9yIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSBvciBkb2N1bWVudGF0aW9uLCBvciBhbnkKK3BvcnRpb24gdGhlcmVvZiwgZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCBpbiB0aGlzIEFncmVlbWVudC4KKyhiKSBVc2UgYW55IGJhY2t1cCBvciBhcmNoaXZhbCBjb3B5IG9mIHRoZSBTb2Z0d2FyZSAob3IgYWxsb3cgc29tZW9uZSBlbHNlCit0byB1c2Ugc3VjaCBjb3B5KSBmb3IgYW55IHB1cnBvc2Ugb3RoZXIgdGhhbiB0byByZXBsYWNlIHRoZSBvcmlnaW5hbCBjb3B5CitpbiB0aGUgZXZlbnQgaXQgaXMgZGVzdHJveWVkIG9yIGJlY29tZXMgZGVmZWN0aXZlOworKGMpIEFsdGVyLCBkZWNvbXBpbGUsIG1vZGlmeSByZXZlcnNlIGVuZ2luZWVyIG9yIGRpc2Fzc2VtYmxlIHRoZSBTb2Z0d2FyZSwKK2NyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIGJhc2VkIHVwb24gdGhlIFNvZnR3YXJlLCBvciBtYWtlIGFueSBhdHRlbXB0IHRvCitieXBhc3MsIHVubG9jayBvciBkaXNhYmxlIGFueSBwcm90ZWN0aXZlIG9yIGluaXRpYWxpemF0aW9uIHN5c3RlbSBvbiB0aGUKK1NvZnR3YXJlOworKGQpIFJlbnQsIGxlYXNlLCBzdWItbGljZW5zZSwgdGltZS1zaGFyZSwgb3IgdHJhbnNmZXIgdGhlIFNvZnR3YXJlIG9yCitkb2N1bWVudGF0aW9uLCBvciB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudC4KKyhlKSBSZW1vdmUgb3Igb2JzY3VyZSBhbnkgY29weXJpZ2h0IG9yIHRyYWRlbWFyayBub3RpY2Uocykgb24gdGhlIFNvZnR3YXJlCitvciBkb2N1bWVudGF0aW9uOworKGYpIFVwbG9hZCBvciB0cmFuc21pdCB0aGUgU29mdHdhcmUsIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YsIHRvIGFueQorZWxlY3Ryb25pYyBidWxsZXRpbiBib2FyZCwgbmV0d29yaywgb3Igb3RoZXIgdHlwZSBvZiBtdWx0aS11c2UgY29tcHV0ZXIKK3N5c3RlbSByZWdhcmRsZXNzIG9mIHB1cnBvc2U7CisoZykgSW5jbHVkZSB0aGUgU29mdHdhcmUgaW4gYW55IGNvbW1lcmNpYWwgcHJvZHVjdHMgaW50ZW5kZWQgZm9yCittYW51ZmFjdHVyZSwgZGlzdHJpYnV0aW9uLCBvciBzYWxlOyBvcgorKGgpIEluY2x1ZGUgdGhlIFNvZnR3YXJlIGluIGFueSBwcm9kdWN0IGNvbnRhaW5pbmcgaW1tb3JhbCwgc2NhbmRhbG91cywKK2NvbnRyb3ZlcnNpYWwsIGRlcm9nYXRvcnksIG9ic2NlbmUsIG9yIG9mZmVuc2l2ZSB3b3Jrcy4KKworNC4gVGVybWluYXRpb24uIFRoaXMgbGljZW5zZSBpcyBlZmZlY3RpdmUgdXBvbiB0aGUgZmlyc3QgdXNlLCBpbnN0YWxsYXRpb24sCitsb2FkaW5nIG9yIGNvcHlpbmcgb2YgdGhlIFNvZnR3YXJlLiBZb3UgbWF5IHRlcm1pbmF0ZSB0aGlzIEFncmVlbWVudCBhdCBhbnkKK3RpbWUgYnkgZGVzdHJ1Y3Rpb24gYW5kIGRpc3Bvc2FsIG9mIHRoZSBTb2Z0d2FyZSBhbmQgYWxsIHJlbGF0ZWQKK2RvY3VtZW50YXRpb24uIFRoaXMgbGljZW5zZSB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHdpdGhvdXQgbm90aWNlCitmcm9tIHRoZSBDb21wYW55IGlmIHlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIGFueSBwcm92aXNpb25zIG9mIHRoaXMgbGljZW5zZS4KK1Vwb24gdGVybWluYXRpb24sIHlvdSBzaGFsbCBkZXN0cm95IGFsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlIGFuZCBhbnkKK2FjY29tcGFueWluZyBkb2N1bWVudGF0aW9uLgorQWxsIHByb3Zpc2lvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYXMgdG8gd2FycmFudGllcywgbGltaXRhdGlvbiBvZiBsaWFiaWxpdHksCityZW1lZGllcyBvciBkYW1hZ2VzIHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24uCisKKzUuIENvcHlyaWdodCBOb3RpY2UuIFRoZSBDb21wYW55IGFuZC9vciBvdXIgTGljZW5zb3JzIGhvbGQgdmFsaWQgY29weXJpZ2h0CitpbiB0aGUgU29mdHdhcmUuIE5vdGhpbmcgaW4gdGhpcyBBZ3JlZW1lbnQgY29uc3RpdHV0ZXMgYSB3YWl2ZXIgb2YgYW55CityaWdodCB1bmRlciBFbmdsaXNoIENvcHlyaWdodCBsYXcgb3IgYW55IG90aGVyIGZlZGVyYWwgb3IgcHJvdmluY2lhbCBsYXcuCitUaGlzIHByb2dyYW0gaXMgcHJvdGVjdGVkIGJ5IEVuZ2xpc2ggYW5kIGludGVybmF0aW9uYWwgY29weXJpZ2h0IGxhd3MuCisKKzYuIE1pc2NlbGxhbmVvdXMuIFRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIEVuZ2xhbmQuCitJZiBhbnkgcHJvdmlzaW9uLCBvciBhbnkgcG9ydGlvbiwgb2YgdGhpcyBBZ3JlZW1lbnQgaXMgZm91bmQgdG8gYmUKK3VubGF3ZnVsLCB2b2lkLCBvciBmb3IgYW55IHJlYXNvbiB1bmVuZm9yY2VhYmxlLCBpdCBzaGFsbCBiZSBzZXZlcmVkIGZyb20sCithbmQgc2hhbGwgaW4gbm8gd2F5IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmluZworcHJvdmlzaW9ucyBvZiB0aGUgQWdyZWVtZW50LgorCis3LiBMaW1pdGVkICBXYXJyYW50eSBhbmQgRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gRm9yIGEgcGVyaW9kIG9mIDkwIGRheXMKK2Zyb20gdGhlIGRhdGUgb24gd2hpY2ggeW91IHB1cmNoYXNlZCB0aGUgU29mdHdhcmUsIHRoZSBDb21wYW55IHdhcnJhbnRzCit0aGF0IHRoZSBtZWRpYSBvbiB3aGljaCB0aGUgU29mdHdhcmUgaXMgc3VwcGxpZWQgd2lsbCBiZSBmcmVlIGZyb20gZGVmZWN0cworaW4gbWF0ZXJpYWxzIGFuZCB3b3JrbWFuc2hpcCB1bmRlciBub3JtYWwgdXNlLiBJZiB0aGUgU29mdHdhcmUgZmFpbHMgdG8KK2NvbmZvcm0gdG8gdGhpcyB3YXJyYW50eSwgeW91IG1heSwgYXMgeW91ciBzb2xlIGFuZCBleGNsdXNpdmUgcmVtZWR5LAorb2J0YWluIGEgcmVwbGFjZW1lbnQgZnJlZSBvZiBjaGFyZ2UgaWYgeW91IHJldHVybiB0aGUgU29mdHdhcmUgdG8gdXMgd2l0aCBhCitkYXRlZCBwcm9vZiBvZiBwdXJjaGFzZS4gVGhlIENvbXBhbnkgZG9lcyBub3Qgd2FycmFudCB0aGF0IHRoZSBTb2Z0d2FyZSBvcgoraXRzIG9wZXJhdGlvbnMgb3IgZnVuY3Rpb25zIHdpbGwgbWVldCB5b3VyIHJlcXVpcmVtZW50cywgbm9yIHRoYXQgdGhlIHVzZQordGhlcmVvZiB3aWxsIGJlIHdpdGhvdXQgaW50ZXJydXB0aW9uIG9yIGVycm9yLgorCitFWENFUFQgRk9SIFRIRSBFWFBSRVNTIFdBUlJBTlRZIFNFVCBGT1JUSCBBQk9WRSwgVEhFIENPTVBBTlkgRElTQ0xBSU1TIEFMTAorV0FSUkFOVElFUywgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQU5EIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KK0VYQ0VQVCBGT1IgVEhFIEVYUFJFU1MgV0FSUkFOVFkgU0VUIEZPUlRIIEFCT1ZFLCBUSEUgQ09NUEFOWSBET0VTIE5PVAorV0FSUkFOVCwgR1VBUkFOVEVFIE9SIE1BS0UgQU5ZIFJFUFJFU0VOVEFUSU9OIFJFR0FSRElORyBUSEUgVVNFIE9SIFRIRQorUkVTVUxUUyBPRiBUSEUgVVNFIE9GIFRIRSBTT0ZUV0FSRSBJTiBURVJNUyBPRiBJVFMgQ09SUkVDVE5FU1MsIEFDQ1VSQUNZLAorUkVMSUFCSUxJVFksIENVUlJFTlRORVNTIE9SIE9USEVSV0lTRS4KK0lOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT01QQU5ZIE9SIElUUyBFTVBMT1lFRVMgT1IgTElDRU5TT1JTIEJFIExJQUJMRSBGT1IKK0FOWSBJTkNJREVOVEFMLCBJTkRJUkVDVCwgU1BFQ0lBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GCitPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIExJQ0VOU0UgR1JBTlRFRCBVTkRFUiBUSElTIEFHUkVFTUVOVCBJTkNMVURJTkcKK0FORCBXSVRILU9VVCBMSU1JVEFUSU9OLCBMT1NTIE9GIFVTRSwgTE9TUyBPRiBEQVRFLCBMT1NTIE9GIElOQ09NRSBPUgorUFJPRklULCBPUiBPVEhFUiBMT1NTIFNVU1RBSU5FRCBBUyBBIFJFU1VMVCBPRiBJTkpVUlkgVE8gQU5ZIFBFUlNPTiwgT1IKK0xPU1MgT0YgT1IgREFNQUdFIFRPIFBST1BFUlRZLCBPUiBDTEFJTVMgT0YgVEhJUkQgUEFSVElFUywgRVZFTiBJRiBUSEUKK0NPTVBBTlkgT1IgQU4gQVVUSE9SSVpFRCBSRVBSRVNFTlRBVElWRSBPRiBUSEUgQ09NUEFOWSBIQVMgQkVFTiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLCBJTiBOTyBFVkVOVCBTSEFMTCBMSUFCSUxJVFkgT0YgVEhFIENPTVBBTlkKK0ZPUiBEQU1BR0VTIFdJVEggUkVTUEVDVCBUTyBUSEUgU09GVFdBUkUgRVhDRUVEIFRIRSBBTU9VTlRTIEFDVFVBTExZIFBBSUQKK0JZIFlPVSwgSUYgQU5ZLCBGT1IgVEhFIFNPRlRXQVJFLgorU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgTElNSVRBVElPTiBPUiBFWENMVVNJT04gT0YgTElBQklMSVRZCitGT1IgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgU08gVEhFIEFCT1ZFIExJTUlUQVRJT04gT1IKK0VYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KK0FDS05PV0xFREdFTUVOVAorWU9VIEFDS05PV0xFREdFIFRIQVQgWU9VIEhBVkUgUkVBRCBUSElTIEFHUkVFTUVOVCwgVU5ERVJTVEFORCBJVCBBTkQgQUdSRUUKK1RPIEJFIEJPVU5EIEJZIElUUyBURVJNUyBBTkQgQ09ORElUSU9OUy4gWU9VIEFMU08gQUdSRUUgVEhBVCBUSElTIEFHUkVFTUVOVAorSVMgVEhFIENPTVBMRVRFIEFORCBFWENMVVNJVkUgU1RBVEVNRU5UIE9GIFRIRSBBR1JFRU1FTlQgQkVUV0VFTiBZT1UgQU5ECitUSEUgQ09NUEFOWSBBTkQgU1VQRVJDRURFUyBBTEwgUFJPUE9TQUxTIE9SIFBSSU9SIEVORE9SU0VNRU5UUywgT1JBTCBPUgorV1JJVFRFTiwgQU5EIEFOWSBPVEhFUiBDT01NVU5JQ0FUSU9OUyBCRVRXRUVOIFlPVSBBTkQgVEhFIENPTVBBTlkgT1IgQU5ZCitSRVBSRVNFTlRBVElWRSBPRiBUSEUgQ09NUEFOWSBSRUxBVElORyBUTyBUSEUgU1VCSkVDVCBNQVRURVIgT0YgVEhJUworQUdSRUVNRU5ULgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvSXNwZWxsIGIvbGljZW5zZXMvSXNwZWxsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhZjU1ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9Jc3BlbGwKQEAgLTAsMCArMSwzMyBAQAorQ29weXJpZ2h0IDE5OTMsIEdlb2ZmIEt1ZW5uaW5nLCBHcmFuYWRhIEhpbGxzLCBDQQorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIEFsbCBtb2RpZmljYXRpb25zIHRvIHRoZSBzb3VyY2UgY29kZSBtdXN0IGJlIGNsZWFybHkgbWFya2VkIGFzCisgICBzdWNoLiAgQmluYXJ5IHJlZGlzdHJpYnV0aW9ucyBiYXNlZCBvbiBtb2RpZmllZCBzb3VyY2UgY29kZQorICAgbXVzdCBiZSBjbGVhcmx5IG1hcmtlZCBhcyBtb2RpZmllZCB2ZXJzaW9ucyBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisoY2xhdXNlIDQgcmVtb3ZlZCB3aXRoIHBlcm1pc3Npb24gZnJvbSBHZW9mZiBLdWVubmluZykKKzUuIFRoZSBuYW1lIG9mIEdlb2ZmIEt1ZW5uaW5nIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBHRU9GRiBLVUVOTklORyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMKK0lTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgR0VPRkYKK0tVRU5OSU5HIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKK0JVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKK0NBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4KK0FOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9KRE9NIGIvbGljZW5zZXMvSkRPTQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmZiYTMwCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvSkRPTQpAQCAtMCwwICsxLDU2IEBACisvKi0tIAorCisgJElkOiBKRE9NLHYgMS4xIDIwMDIvMDcvMDggMjA6MjE6NDEgYmxpenp5IEV4cCAkCisKKyBDb3B5cmlnaHQgKEMpIDIwMDAtMjAwMiBCcmV0dCBNY0xhdWdobGluICYgSmFzb24gSHVudGVyLgorIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgCisgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgYXJlIG1ldDoKKyAKKyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgCisgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGRpc2NsYWltZXIgdGhhdCBmb2xsb3dzIAorICAgIHRoZXNlIGNvbmRpdGlvbnMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyAKKyAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAzLiBUaGUgbmFtZSAiSkRPTSIgbXVzdCBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gIEZvcgorICAgIHdyaXR0ZW4gcGVybWlzc2lvbiwgcGxlYXNlIGNvbnRhY3QgbGljZW5zZUBqZG9tLm9yZy4KKyAKKyA0LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiSkRPTSIsIG5vcgorICAgIG1heSAiSkRPTSIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uCisgICAgZnJvbSB0aGUgSkRPTSBQcm9qZWN0IE1hbmFnZW1lbnQgKHBtQGpkb20ub3JnKS4KKyAKKyBJbiBhZGRpdGlvbiwgd2UgcmVxdWVzdCAoYnV0IGRvIG5vdCByZXF1aXJlKSB0aGF0IHlvdSBpbmNsdWRlIGluIHRoZSAKKyBlbmQtdXNlciBkb2N1bWVudGF0aW9uIHByb3ZpZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uIGFuZC9vciBpbiB0aGUgCisgc29mdHdhcmUgaXRzZWxmIGFuIGFja25vd2xlZGdlbWVudCBlcXVpdmFsZW50IHRvIHRoZSBmb2xsb3dpbmc6CisgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQorICAgICAgSkRPTSBQcm9qZWN0IChodHRwOi8vd3d3Lmpkb20ub3JnLykuIgorIEFsdGVybmF0aXZlbHksIHRoZSBhY2tub3dsZWRnbWVudCBtYXkgYmUgZ3JhcGhpY2FsIHVzaW5nIHRoZSBsb2dvcyAKKyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5qZG9tLm9yZy9pbWFnZXMvbG9nb3MuCisKKyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECisgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgSkRPTSBBVVRIT1JTIE9SIFRIRSBQUk9KRUNUCisgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgU1VDSCBEQU1BR0UuCisKKyBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueSAKKyBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEpET00gUHJvamVjdCBhbmQgd2FzIG9yaWdpbmFsbHkgCisgY3JlYXRlZCBieSBCcmV0dCBNY0xhdWdobGluIDxicmV0dEBqZG9tLm9yZz4gYW5kIAorIEphc29uIEh1bnRlciA8amh1bnRlckBqZG9tLm9yZz4uICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgCisgSkRPTSBQcm9qZWN0LCBwbGVhc2Ugc2VlIDxodHRwOi8vd3d3Lmpkb20ub3JnLz4uCisgCisgKi8KKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvSk5JQyBiL2xpY2Vuc2VzL0pOSUMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYxZTBhMAotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0pOSUMKQEAgLTAsMCArMSwzOSBAQAorQ29weXJpZ2h0IChjKSAyMDAwLTIwMDIgSmFwYW4gTmV0d29yayBJbmZvcm1hdGlvbiBDZW50ZXIuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorIAorQnkgdXNpbmcgdGhpcyBmaWxlLCB5b3UgYWdyZWUgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHNldCBmb3J0aCBiZWxsb3cuCisKKwkJCUxJQ0VOU0UgVEVSTVMgQU5EIENPTkRJVElPTlMgCisKK1RoZSBmb2xsb3dpbmcgTGljZW5zZSBUZXJtcyBhbmQgQ29uZGl0aW9ucyBhcHBseSwgdW5sZXNzIGEgZGlmZmVyZW50CitsaWNlbnNlIGlzIG9idGFpbmVkIGZyb20gSmFwYW4gTmV0d29yayBJbmZvcm1hdGlvbiBDZW50ZXIgKCJKUE5JQyIpLAorYSBKYXBhbmVzZSBhc3NvY2lhdGlvbiwgS29rdXNhaS1Lb3VneW91LUthbmRhIEJsZGcgNkYsIDItMy00IFVjaGktS2FuZGEsCitDaGl5b2RhLWt1LCBUb2t5byAxMDEtMDA0NywgSmFwYW4uCisKKzEuIFVzZSwgTW9kaWZpY2F0aW9uIGFuZCBSZWRpc3RyaWJ1dGlvbiAoaW5jbHVkaW5nIGRpc3RyaWJ1dGlvbiBvZiBhbnkKKyAgIG1vZGlmaWVkIG9yIGRlcml2ZWQgd29yaykgaW4gc291cmNlIGFuZC9vciBiaW5hcnkgZm9ybXMgaXMgcGVybWl0dGVkCisgICB1bmRlciB0aGlzIExpY2Vuc2UgVGVybXMgYW5kIENvbmRpdGlvbnMuCisKKzIuIFJlZGlzdHJpYnV0aW9uIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlcyBhcyB0aGV5CisgICBhcHBlYXIgaW4gZWFjaCBzb3VyY2UgY29kZSBmaWxlLCB0aGlzIExpY2Vuc2UgVGVybXMgYW5kIENvbmRpdGlvbnMuCisKKzMuIFJlZGlzdHJpYnV0aW9uIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBDb3B5cmlnaHQgTm90aWNlLAorICAgdGhpcyBMaWNlbnNlIFRlcm1zIGFuZCBDb25kaXRpb25zLCBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIKKyAgIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uICBGb3IgdGhlIHB1cnBvc2VzIG9mIGJpbmFyeQorICAgZGlzdHJpYnV0aW9uIHRoZSAiQ29weXJpZ2h0IE5vdGljZSIgcmVmZXJzIHRvIHRoZSBmb2xsb3dpbmcgbGFuZ3VhZ2U6CisgICAiQ29weXJpZ2h0IChjKSAyMDAwLTIwMDIgSmFwYW4gTmV0d29yayBJbmZvcm1hdGlvbiBDZW50ZXIuICBBbGwgcmlnaHRzIHJlc2VydmVkLiIKKworNC4gVGhlIG5hbWUgb2YgSlBOSUMgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICAgZGVyaXZlZCBmcm9tIHRoaXMgU29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIGFwcHJvdmFsIG9mCisgICBKUE5JQy4KKworNS4gRGlzY2xhaW1lci9MaW1pdGF0aW9uIG9mIExpYWJpbGl0eTogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBKUE5JQworICAgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBCisgICBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBKUE5JQyBCRSBMSUFCTEUKKyAgIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAgIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICAgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgICBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgorICAgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorICAgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvSk9WRSBiL2xpY2Vuc2VzL0pPVkUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRjYzMxNgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0pPVkUKQEAgLTAsMCArMSw0IEBACitUaGlzIHByb2dyYW0gaXMgQ29weXJpZ2h0IChDKSAxOTg2LTIwMDIgYnkgSm9uYXRoYW4gUGF5bmUuICBKT1ZFIGlzCitwcm92aWRlZCBieSBKb25hdGhhbiBhbmQgSm92ZWhhY2tzIHdpdGhvdXQgY2hhcmdlIGFuZCB3aXRob3V0Cit3YXJyYW50eS4gIFlvdSBtYXkgY29weSwgbW9kaWZ5LCBhbmQvb3IgZGlzdHJpYnV0ZSBKT1ZFLCBwcm92aWRlZCB0aGF0Cit0aGlzIG5vdGljZSBpcyBpbmNsdWRlZCBpbiBhbGwgdGhlIHNvdXJjZSBmaWxlcyBhbmQgZG9jdW1lbnRhdGlvbi4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0pQeXRob24gYi9saWNlbnNlcy9KUHl0aG9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2ZjZkNGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9KUHl0aG9uCkBAIC0wLDAgKzEsODQgQEAKK0pQeXRob24gU29mdHdhcmUgTGljZW5zZS4KKz09PT09PT09PT09PT09PT09PT09PT09PT0KKworX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworCitJTVBPUlRBTlQ6IFBMRUFTRSBSRUFEIFRIRSBGT0xMT1dJTkcgQUdSRUVNRU5UIENBUkVGVUxMWS4KKworQlkgQ0xJQ0tJTkcgT04gVEhFICJBQ0NFUFQiIEJVVFRPTiBXSEVSRSBJTkRJQ0FURUQsIE9SIEJZIElOU1RBTExJTkcsCitDT1BZSU5HIE9SIE9USEVSV0lTRSBVU0lORyBUSEUgU09GVFdBUkUsIFlPVSBBUkUgREVFTUVEIFRPIEhBVkUgQUdSRUVEIFRPCitUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQuCisKK19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKworSlB5dGhvbiB2ZXJzaW9uIDEuMS54CisKKyAgMS4gVGhpcyBMSUNFTlNFIEFHUkVFTUVOVCBpcyBiZXR3ZWVuIHRoZSBDb3Jwb3JhdGlvbiBmb3IgTmF0aW9uYWwgUmVzZWFyY2gKKyAgICAgSW5pdGlhdGl2ZXMsIGhhdmluZyBhbiBvZmZpY2UgYXQgMTg5NSBQcmVzdG9uIFdoaXRlIERyaXZlLCBSZXN0b24sIFZBCisgICAgIDIwMTkxICgiQ05SSSIpLCBhbmQgdGhlIEluZGl2aWR1YWwgb3IgT3JnYW5pemF0aW9uICgiTGljZW5zZWUiKQorICAgICBhY2Nlc3NpbmcgYW5kIHVzaW5nIEpQeXRob24gdmVyc2lvbiAxLjEueCBpbiBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0gYW5kCisgICAgIGl0cyBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gYXMgcHJvdmlkZWQgaGVyZWluICgiU29mdHdhcmUiKS4KKworICAyLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LCBDTlJJCisgICAgIGhlcmVieSBncmFudHMgTGljZW5zZWUgYSBub24tZXhjbHVzaXZlLCBub24tdHJhbnNmZXJhYmxlLCByb3lhbHR5LWZyZWUsCisgICAgIHdvcmxkLXdpZGUgbGljZW5zZSB0byByZXByb2R1Y2UsIGFuYWx5emUsIHRlc3QsIHBlcmZvcm0gYW5kL29yIGRpc3BsYXkKKyAgICAgcHVibGljbHksIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcywgZGlzdHJpYnV0ZSwgYW5kIG90aGVyd2lzZSB1c2UgdGhlCisgICAgIFNvZnR3YXJlIGFsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlIHZlcnNpb24sIHByb3ZpZGVkLCBob3dldmVyLCB0aGF0CisgICAgIENOUkkncyBMaWNlbnNlIEFncmVlbWVudCBhbmQgQ05SSSdzIG5vdGljZSBvZiBjb3B5cmlnaHQsIGkuZS4sCisgICAgICJDb3B5cmlnaHQgwqkxOTk2LTE5OTkgQ29ycG9yYXRpb24gZm9yIE5hdGlvbmFsIFJlc2VhcmNoIEluaXRpYXRpdmVzOworICAgICBBbGwgUmlnaHRzIFJlc2VydmVkIiBhcmUgYm90aCByZXRhaW5lZCBpbiB0aGUgU29mdHdhcmUsIGFsb25lIG9yIGluIGFueQorICAgICBkZXJpdmF0aXZlIHZlcnNpb24gcHJlcGFyZWQgYnkgTGljZW5zZWUuCisKKyAgICAgQWx0ZXJuYXRpdmVseSwgaW4gbGlldSBvZiBDTlJJJ3MgTGljZW5zZSBBZ3JlZW1lbnQsIExpY2Vuc2VlIG1heQorICAgICBzdWJzdGl0dXRlIHRoZSBmb2xsb3dpbmcgdGV4dCAob21pdHRpbmcgdGhlIHF1b3RlcyksIHByb3ZpZGVkLCBob3dldmVyLAorICAgICB0aGF0IHN1Y2ggdGV4dCBpcyBkaXNwbGF5ZWQgcHJvbWluZW50bHkgaW4gdGhlIFNvZnR3YXJlIGFsb25lIG9yIGluIGFueQorICAgICBkZXJpdmF0aXZlIHZlcnNpb24gcHJlcGFyZWQgYnkgTGljZW5zZWU6ICJKUHl0aG9uIChWZXJzaW9uIDEuMS54KSBpcworICAgICBtYWRlIGF2YWlsYWJsZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBpbiBDTlJJJ3MgTGljZW5zZQorICAgICBBZ3JlZW1lbnQuIFRoaXMgQWdyZWVtZW50IG1heSBiZSBsb2NhdGVkIG9uIHRoZSBJbnRlcm5ldCB1c2luZyB0aGUKKyAgICAgZm9sbG93aW5nIHVuaXF1ZSwgcGVyc2lzdGVudCBpZGVudGlmaWVyIChrbm93biBhcyBhIGhhbmRsZSk6CisgICAgIDE4OTUuMjIvMTAwNi4gVGhlIExpY2Vuc2UgbWF5IGFsc28gYmUgb2J0YWluZWQgZnJvbSBhIHByb3h5IHNlcnZlciBvbgorICAgICB0aGUgV2ViIHVzaW5nIHRoZSBmb2xsb3dpbmcgVVJMOiBodHRwOi8vaGRsLmhhbmRsZS5uZXQvMTg5NS4yMi8xMDA2LiIKKworICAzLiBJbiB0aGUgZXZlbnQgTGljZW5zZWUgcHJlcGFyZXMgYSBkZXJpdmF0aXZlIHdvcmsgdGhhdCBpcyBiYXNlZCBvbiBvcgorICAgICBpbmNvcnBvcmF0ZXMgdGhlIFNvZnR3YXJlIG9yIGFueSBwYXJ0IHRoZXJlb2YsIGFuZCB3YW50cyB0byBtYWtlIHRoZQorICAgICBkZXJpdmF0aXZlIHdvcmsgYXZhaWxhYmxlIHRvIHRoZSBwdWJsaWMgYXMgcHJvdmlkZWQgaGVyZWluLCB0aGVuCisgICAgIExpY2Vuc2VlIGhlcmVieSBhZ3JlZXMgdG8gaW5kaWNhdGUgaW4gYW55IHN1Y2ggd29yaywgaW4gYSBwcm9taW5lbnRseQorICAgICB2aXNpYmxlIHdheSwgdGhlIG5hdHVyZSBvZiB0aGUgbW9kaWZpY2F0aW9ucyBtYWRlIHRvIENOUkkncyBTb2Z0d2FyZS4KKworICA0LiBMaWNlbnNlZSBtYXkgbm90IHVzZSBDTlJJIHRyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZSwgaW5jbHVkaW5nIEpQeXRob24KKyAgICAgb3IgQ05SSSwgaW4gYSB0cmFkZW1hcmsgc2Vuc2UgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIG9yCisgICAgIHNlcnZpY2VzIG9mIExpY2Vuc2VlLCBvciBhbnkgdGhpcmQgcGFydHkuIExpY2Vuc2VlIG1heSB1c2UgdGhlIG1hcmsKKyAgICAgSlB5dGhvbiBpbiBjb25uZWN0aW9uIHdpdGggTGljZW5zZWUncyBkZXJpdmF0aXZlIHZlcnNpb25zIHRoYXQgYXJlCisgICAgIGJhc2VkIG9uIG9yIGluY29ycG9yYXRlIHRoZSBTb2Z0d2FyZSwgYnV0IG9ubHkgaW4gdGhlIGZvcm0KKyAgICAgIkpQeXRob24tYmFzZWQgX19fX19fX19fX19fX19fX19fXywiIG9yIGVxdWl2YWxlbnQuCisKKyAgNS4gQ05SSSBpcyBtYWtpbmcgdGhlIFNvZnR3YXJlIGF2YWlsYWJsZSB0byBMaWNlbnNlZSBvbiBhbiAiQVMgSVMiIGJhc2lzLgorICAgICBDTlJJIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLCBFWFBSRVNTIE9SIElNUExJRUQuIEJZIFdBWQorICAgICBPRiBFWEFNUExFLCBCVVQgTk9UIExJTUlUQVRJT04sIENOUkkgTUFLRVMgTk8gQU5EIERJU0NMQUlNUyBBTlkKKyAgICAgUkVQUkVTRU5UQVRJT04gT1IgV0FSUkFOVFkgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEFOWQorICAgICBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgVEhBVCBUSEUgVVNFIE9GIFRIRSBTT0ZUV0FSRSBXSUxMIE5PVCBJTkZSSU5HRQorICAgICBBTlkgVEhJUkQgUEFSVFkgUklHSFRTLgorCisgIDYuIENOUkkgU0hBTEwgTk9UIEJFIExJQUJMRSBUTyBMSUNFTlNFRSBPUiBPVEhFUiBVU0VSUyBPRiBUSEUgU09GVFdBUkUgRk9SCisgICAgIEFOWSBJTkNJREVOVEFMLCBTUEVDSUFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBMT1NTIEFTIEEgUkVTVUxUIE9GCisgICAgIFVTSU5HLCBNT0RJRllJTkcgT1IgRElTVFJJQlVUSU5HIFRIRSBTT0ZUV0FSRSwgT1IgQU5ZIERFUklWQVRJVkUKKyAgICAgVEhFUkVPRiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBUSEVSRU9GLiBTT01FIFNUQVRFUyBETyBOT1QKKyAgICAgQUxMT1cgVEhFIExJTUlUQVRJT04gT1IgRVhDTFVTSU9OIE9GIExJQUJJTElUWSBTTyBUSEUgQUJPVkUgRElTQ0xBSU1FUgorICAgICBNQVkgTk9UIEFQUExZIFRPIExJQ0VOU0VFLgorCisgIDcuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgbWF5IGJlIHRlcm1pbmF0ZWQgYnkgQ05SSSAoaSkgaW1tZWRpYXRlbHkgdXBvbgorICAgICB3cml0dGVuIG5vdGljZSBmcm9tIENOUkkgb2YgYW55IG1hdGVyaWFsIGJyZWFjaCBieSB0aGUgTGljZW5zZWUsIGlmIHRoZQorICAgICBuYXR1cmUgb2YgdGhlIGJyZWFjaCBpcyBzdWNoIHRoYXQgaXQgY2Fubm90IGJlIHByb21wdGx5IHJlbWVkaWVkOyBvcgorICAgICAoaWkpIHNpeHR5ICg2MCkgZGF5cyBmb2xsb3dpbmcgbm90aWNlIGZyb20gQ05SSSB0byBMaWNlbnNlZSBvZiBhCisgICAgIG1hdGVyaWFsIHJlbWVkaWFibGUgYnJlYWNoLCBpZiBMaWNlbnNlZSBoYXMgbm90IHJlbWVkaWVkIHN1Y2ggYnJlYWNoCisgICAgIHdpdGhpbiB0aGF0IHNpeHR5LWRheSBwZXJpb2QuCisKKyAgOC4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBzaGFsbCBiZSBnb3Zlcm5lZCBieSBhbmQgaW50ZXJwcmV0ZWQgaW4gYWxsCisgICAgIHJlc3BlY3RzIGJ5IHRoZSBsYXcgb2YgdGhlIFN0YXRlIG9mIFZpcmdpbmlhLCBleGNsdWRpbmcgY29uZmxpY3Qgb2YgbGF3CisgICAgIHByb3Zpc2lvbnMuIE5vdGhpbmcgaW4gdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgZGVlbWVkIHRvIGNyZWF0ZSBhbnkKKyAgICAgcmVsYXRpb25zaGlwIG9mIGFnZW5jeSwgcGFydG5lcnNoaXAsIG9yIGpvaW50IHZlbnR1cmUgYmV0d2VlbiBDTlJJIGFuZAorICAgICBMaWNlbnNlZS4KKworICA5LiBCeSBjbGlja2luZyBvbiB0aGUgIkFDQ0VQVCIgYnV0dG9uIHdoZXJlIGluZGljYXRlZCwgb3IgYnkgaW5zdGFsbGluZywKKyAgICAgY29weWluZyBvciBvdGhlcndpc2UgdXNpbmcgdGhlIFNvZnR3YXJlLCBMaWNlbnNlZSBhZ3JlZXMgdG8gYmUgYm91bmQgYnkKKyAgICAgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9KYXNQZXIyLjAgYi9saWNlbnNlcy9KYXNQZXIyLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjgxN2VmNAotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0phc1BlcjIuMApAQCAtMCwwICsxLDUxIEBACitKYXNQZXIgTGljZW5zZSBWZXJzaW9uIDIuMAorCitDb3B5cmlnaHQgKGMpIDIwMDEtMjAwNiBNaWNoYWVsIERhdmlkIEFkYW1zCitDb3B5cmlnaHQgKGMpIDE5OTktMjAwMCBJbWFnZSBQb3dlciwgSW5jLgorQ29weXJpZ2h0IChjKSAxOTk5LTIwMDAgVGhlIFVuaXZlcnNpdHkgb2YgQnJpdGlzaCBDb2x1bWJpYQorCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiAodGhlCisiVXNlciIpIG9idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCitmaWxlcyAodGhlICJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLAoraW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwKK3B1Ymxpc2gsIGRpc3RyaWJ1dGUsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQKK3BlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZQorZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKzEuICBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZXMgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKHdoaWNoCitpbmNsdWRlcyB0aGUgZGlzY2xhaW1lciBiZWxvdykgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvcgorc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCisyLiAgVGhlIG5hbWUgb2YgYSBjb3B5cmlnaHQgaG9sZGVyIHNoYWxsIG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IKK3Byb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCit3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTCitMSUNFTlNFLiAgTk8gVVNFIE9GIFRIRSBTT0ZUV0FSRSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIKK1RISVMgRElTQ0xBSU1FUi4gIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMKKyJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HCitCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBCitQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBSSUdIVFMuICBJTiBOTworRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBPUiBBTlkgU1BFQ0lBTAorSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORworRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKK05FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCitXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4gIE5PIEFTU1VSQU5DRVMgQVJFCitQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgVEhBVCBUSEUgU09GVFdBUkUgRE9FUyBOT1QgSU5GUklOR0UKK1RIRSBQQVRFTlQgT1IgT1RIRVIgSU5URUxMRUNUVUFMIFBST1BFUlRZIFJJR0hUUyBPRiBBTlkgT1RIRVIgRU5USVRZLgorRUFDSCBDT1BZUklHSFQgSE9MREVSIERJU0NMQUlNUyBBTlkgTElBQklMSVRZIFRPIFRIRSBVU0VSIEZPUiBDTEFJTVMKK0JST1VHSFQgQlkgQU5ZIE9USEVSIEVOVElUWSBCQVNFRCBPTiBJTkZSSU5HRU1FTlQgT0YgSU5URUxMRUNUVUFMCitQUk9QRVJUWSBSSUdIVFMgT1IgT1RIRVJXSVNFLiAgQVMgQSBDT05ESVRJT04gVE8gRVhFUkNJU0lORyBUSEUgUklHSFRTCitHUkFOVEVEIEhFUkVVTkRFUiwgRUFDSCBVU0VSIEhFUkVCWSBBU1NVTUVTIFNPTEUgUkVTUE9OU0lCSUxJVFkgVE8gU0VDVVJFCitBTlkgT1RIRVIgSU5URUxMRUNUVUFMIFBST1BFUlRZIFJJR0hUUyBORUVERUQsIElGIEFOWS4gIFRIRSBTT0ZUV0FSRQorSVMgTk9UIEZBVUxULVRPTEVSQU5UIEFORCBJUyBOT1QgSU5URU5ERUQgRk9SIFVTRSBJTiBNSVNTSU9OLUNSSVRJQ0FMCitTWVNURU1TLCBTVUNIIEFTIFRIT1NFIFVTRUQgSU4gVEhFIE9QRVJBVElPTiBPRiBOVUNMRUFSIEZBQ0lMSVRJRVMsCitBSVJDUkFGVCBOQVZJR0FUSU9OIE9SIENPTU1VTklDQVRJT04gU1lTVEVNUywgQUlSIFRSQUZGSUMgQ09OVFJPTAorU1lTVEVNUywgRElSRUNUIExJRkUgU1VQUE9SVCBNQUNISU5FUywgT1IgV0VBUE9OUyBTWVNURU1TLCBJTiBXSElDSAorVEhFIEZBSUxVUkUgT0YgVEhFIFNPRlRXQVJFIE9SIFNZU1RFTSBDT1VMRCBMRUFEIERJUkVDVExZIFRPIERFQVRILAorUEVSU09OQUwgSU5KVVJZLCBPUiBTRVZFUkUgUEhZU0lDQUwgT1IgRU5WSVJPTk1FTlRBTCBEQU1BR0UgKCJISUdICitSSVNLIEFDVElWSVRJRVMiKS4gIFRIRSBDT1BZUklHSFQgSE9MREVSUyBTUEVDSUZJQ0FMTFkgRElTQ0xBSU0gQU5ZCitFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVFkgT0YgRklUTkVTUyBGT1IgSElHSCBSSVNLIEFDVElWSVRJRVMuCisKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0tRRU1VIGIvbGljZW5zZXMvS1FFTVUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg2YjJjZgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0tRRU1VCkBAIC0wLDAgKzEsMTYgQEAKKzEpIFRoZSBRRU1VIEFjY2VsZXJhdG9yIE1vZHVsZSAoYWthIEtRRU1VKSBpcyBhIHByb3ByaWV0YXJ5CisgICBwcm9kdWN0LiBJdCBpcyBhdmFpbGFibGUgd2l0aG91dCBjaGFyZ2UuIENvbW1lcmNpYWwgdXNlIG9mIHRoZSBRRU1VCisgICBBY2NlbGVyYXRvciBNb2R1bGUgaXMgYWxsb3dlZC4KKyAgIAorICAgUmVkaXN0cmlidXRpb24gb2YgdGhlIFFFTVUgQWNjZWxlcmF0b3IgTW9kdWxlOiBhbnkgcGVyc29uIG9yCisgICBvcmdhbmlzYXRpb24gd2lzaGluZyB0byBkaXN0cmlidXRlIGl0LCBmb3IgZXhhbXBsZSBvbiBhIENEIG9yIGFzIGEKKyAgIGJpbmFyeSBvciBzb3VyY2UgcGFja2FnZSwgbXVzdCBoYXZlIGFuIGV4cGxpY2l0IGF1dGhvcml6YXRpb24gZnJvbQorICAgdGhlIGF1dGhvci4KKworICAgVGhlIFFFTVUgQWNjZWxlcmF0b3IgTW9kdWxlIGlzIGF2YWlsYWJsZSB3aXRob3V0IGFueSBleHByZXNzIG9yCisgICBpbXBsaWVkIHdhcnJhbnR5LiBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3IgYmUgaGVsZCBsaWFibGUgZm9yCisgICBhbnkgZGFtYWdlcyBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLgorCisyKSBRRU1VIGlzIGEgdHJhZGVtYXJrIG9mIEZhYnJpY2UgQmVsbGFyZC4KKworRmFicmljZSBCZWxsYXJkLgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0tlcm1pdCBiL2xpY2Vuc2VzL0tlcm1pdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjQ2NmFlCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvS2VybWl0CkBAIC0wLDAgKzEsMTA2IEBACitUSEUgQy1LRVJNSVQgNy4wIEFORCA4LjAgTElDRU5TRQorCisgIExhc3QgdXBkYXRlOiBUaHUgRmViICA4IDE3OjQxOjA3IDIwMDIKKworVGhpcyBpcyB0aGUgbmV3IEMtS2VybWl0IDcuMCBhbmQgOC4wIGxpY2Vuc2UuICBUaGUgaW50ZW50aW9uIGlzIHRvIGFsbG93CitDLUtlcm1pdCB0byBiZSBkaXN0cmlidXRlZCB3aXRoICJmcmVlIiBvcGVyYXRpbmcgc3lzdGVtcyBzdWNoIGFzIEdOVS9MaW51eCwKK0ZyZWVCU0QsIE5ldEJTRCwgT3BlbkJTRCwgVGhlIEh1cmQsIGV0YywgZXZlbiB3aGVuIHRoZSBkaXN0cmlidXRpb25zCit0aGVtc2VsdmVzIChzdWNoIGFzIFJlZCBIYXQgb3IgQ2FsZGVyYSkgbWlnaHQgYmUgc29sZCBhbmQvb3IgbWlnaHQgaW5jbHVkZQorYXBwbGljYXRpb25zIHRoYXQgYXJlIG5vdCBmcmVlLCBhbmQgeWV0IHN0aWxsIHJlcXVpcmUgYSBsaWNlbnNlIHRvIGluY2x1ZGUKK0MtS2VybWl0IGluIG9yIHdpdGggIm5vbi1mcmVlIiBwcm9kdWN0cyBzdWNoIGFzIGNvbW1lcmNpYWwgT1MncywgY29tbWVyY2lhbAorc29mdHdhcmUgcGFja2FnZXMsIGVtYmVkZGVkIHN5c3RlbXMsIGFuZCBoYXJkd2FyZSAob3RoZXIgdGhhbiBnZW5lcmFsLXB1cnBvc2UKK2NvbXB1dGVycyBwcmVsb2FkZWQgd2l0aCAiZnJlZSIgb3BlcmF0aW5nIHN5c3RlbXMpLCBzaW5jZSB0aGVzZSBsaWNlbnNlcworZnVybmlzaCBhIGxhcmdlIHBvcnRpb24gb2YgdGhlIEtlcm1pdCBQcm9qZWN0J3MgZnVuZGluZy4KKworVGhlcmUgaGF2ZSBiZWVuIHNvbWUgcXVlc3Rpb25zIGFib3V0IHRoZSBwcm92aXNpb24gaW4gQ2xhdXNlIChBKSB0aGF0OgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGUKKyAgICBDLUtlcm1pdCBzb3VyY2UgY29kZSBtYXkgbm90IGJlIGNoYW5nZWQgd2l0aG91dCB0aGUgY29uc2VudCBvZiB0aGUKKyAgICBLZXJtaXQgUHJvamVjdCwgd2hpY2ggd2lsbCBub3QgYmUgdW5yZWFzb25hYmx5IHdpdGhoZWxkICh0aGlzIGlzCisgICAgc2ltcGx5IGEgbWF0dGVyIG9mIGtlZXBpbmcgYSBjb25zaXN0ZW50IGFuZCBzdXBwb3J0YWJsZSBjb2RlIGJhc2UpLgorCitUaGUgaW50ZW50aW9uIG9mIHRoaXMgY2xhdXNlIGlzIHByaW1hcmlseSB0byBtYWtlIHN1cmUgdGhhdCBhbnlib2R5IHdobworbWFrZXMgbW9kaWZpY2F0aW9ucyBzZW5kcyB0aGVtIGJhY2sgdG8gdXMsIHNpbmNlIHdlIGFyZSB0aGUgb25lcyBoYXZlIHRvCitzdXBwb3J0IEMtS2VybWl0LCBhbmQgc28gd2UgY2FuIGNhcnJ5IHRoZW0gdGhyb3VnaCB0byBmdXR1cmUgcmVsZWFzZXMgKHNvCit5b3UgZG9uJ3QgaGF2ZSB0byBtYWtlIHRoZSBzYW1lIGNoYW5nZXMgYWdhaW4gYW5kIGFnYWluKS4KKworU2Vjb25kYXJpbHkgaXQgaXMgdG8gcHJvdGVjdCBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSB1bmxpa2VseSBldmVudCBvZgorbW9kaWZpY2F0aW9ucyBtYWRlIHdpdGggZGVsaWJlcmF0ZSBpbnRlbnQgdG8gb2ZmZW5kIG9yIGNhdXNlIGRhbWFnZS4KKworQW55IHJlZGlzdHJpYnV0b3Igb2YgQy1LZXJtaXQgdW5kZXIgQ2xhdXNlIChBKSBiZWxvdyBzaG91bGQgcmVzdCBhc3N1cmVkCit0aGVyZSBpcyBubyBpbnRlbnRpb24gb2YgcHJldmVudGluZyB0aGVtIGZyb20gY29uc3RydWN0aW5nIGEgZGlzdHJpYnV0aW9uIGluCit0aGUgYXBwcm9wcmlhdGUgZm9ybWF0IChSUE0gb3Igd2hhdGV2ZXIpIGZvciB0aGVpciBwcm9kdWN0IG9yIGZyb20gaXNzdWluZworYW55IHBhdGNoZXMgcmVxdWlyZWQgZm9yIHRoZWlyIHByb2R1Y3RzOyB3ZSBzaW1wbHkgd2FudCB0byBiZSBpbmZvcm1lZCBzbyB3ZQorY2FuIG1haW50YWluIGEgY29uc2lzdGVudCBjb2RlIGJhc2UgYW5kIGEgc29saWQsIHN1cHBvcnRhYmxlIHNvZnR3YXJlCitwYWNrYWdlLiAgV2UgYXJlIGhhcHB5IHRvIHdvcmsgd2l0aCBhbnkgcmVkaXN0cmlidXRvciBhbiBhbnkgaXNzdWVzIHRoYXQKK2NvbmNlcm4gdGhlbS4gIElmIHlvdSBoYXZlIHF1ZXN0aW9ucywgc2VuZCB0aGVtIHRvIGtlcm1pdEBjb2x1bWJpYS5lZHUuCisKK05vdGU6IEFsbCBjaGFuZ2VzIHRvIHRoaXMgZmlsZSBzaW5jZSAxIEphbnVhcnkgMjAwMCAodGhlIEMtS2VybWl0IDcuMAorcmVsZWFzZSBkYXRlKSBhcmUgYWJvdmU7IHRoZSBsaWNlbnNlIGl0c2VsZiBoYXMgbm90IGNoYW5nZWQsIGV4Y2VwdCB0bwordXBkYXRlIHRoZSBtb3N0IHJlY2VudCBjb3B5cmlnaHQgZGF0ZS4KKworKEJlZ2luKQorCitDb3B5cmlnaHQgKEMpIDE5ODUsIDIwMDIsCisgIFRoZSBUcnVzdGVlcyBvZiBDb2x1bWJpYSBVbml2ZXJzaXR5IGluIHRoZSBDaXR5IG9mIE5ldyBZb3JrLgorICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitQRVJNSVNTSU9OUzoKKworVGhlIEMtS2VybWl0IHNvZnR3YXJlIG1heSBiZSBvYnRhaW5lZCBkaXJlY3RseSBmcm9tIHRoZSBLZXJtaXQgUHJvamVjdCBhdAorQ29sdW1iaWEgVW5pdmVyc2l0eSAob3IgZnJvbSBhbnkgc291cmNlIGV4cGxpY2l0bHkgbGljZW5zZWQgYnkgdGhlIEtlcm1pdAorUHJvamVjdCBvciBpbXBsaWNpdGx5IGxpY2Vuc2VkIGJ5IENsYXVzZSAoQSkgYmVsb3cpIGJ5IGFueSBpbmRpdmlkdWFsIGZvcgoraGlzIG9yIGhlciBPV04gVVNFLCBhbmQgYnkgYW55IGNvbXBhbnkgb3Igb3RoZXIgb3JnYW5pemF0aW9uIGZvciBpdHMgb3duCitJTlRFUk5BTCBESVNUUklCVVRJT04gYW5kIHVzZSwgaW5jbHVkaW5nIGluc3RhbGxhdGlvbiBvbiBzZXJ2ZXJzIHRoYXQgYXJlCithY2Nlc3NlZCBieSBjdXN0b21lcnMgb3IgY2xpZW50cywgV0lUSE9VVCBFWFBMSUNJVCBMSUNFTlNFLgorCitDb25kaXRpb25zIGZvciBSRURJU1RSSUJVVElPTiBhcmUgYXMgZm9sbG93czoKKworKEEpIFRoZSBDLUtlcm1pdCBzb2Z0d2FyZSwgaW4gc291cmNlIGFuZC9vciBiaW5hcnkgZm9ybSwgbWF5IGJlCisgICAgaW5jbHVkZWQgV0lUSE9VVCBFWFBMSUNJVCBMSUNFTlNFIGluIGRpc3RyaWJ1dGlvbnMgb2YgT1BFUkFUSU5HCisgICAgU1lTVEVNUyB0aGF0IGhhdmUgT1NJIChPcGVuIFNvdXJjZSBJbml0aWF0aXZlLCB3d3cub3BlbnNvdXJjZS5vcmcpCisgICAgYXBwcm92ZWQgbGljZW5zZXMsIGV2ZW4gaWYgbm9uLU9wZW4tU291cmNlIGFwcGxpY2F0aW9ucyAoYnV0IG5vdAorICAgIG9wZXJhdGluZyBzeXN0ZW1zKSBhcmUgaW5jbHVkZWQgaW4gdGhlIHNhbWUgZGlzdHJpYnV0aW9uLiAgU3VjaAorICAgIGRpc3RyaWJ1dGlvbnMgaW5jbHVkZSwgYnV0IGFyZSBub3QgbGltaXRlZCB0bywgQ0QtUk9NLCBGVFAgc2l0ZSwKKyAgICBXZWIgc2l0ZSwgb3IgcHJlaW5zdGFsbGVkIHNvZnR3YXJlIG9uIGEgbmV3IEdFTkVSQUwtUFVSUE9TRQorICAgIGNvbXB1dGVyLCBhcyBsb25nIGFzIHRoZSBwcmltYXJ5IGNoYXJhY3RlciBvZiB0aGUgZGlzdHJpYnV0aW9uIGlzCisgICAgYW4gT3BlbiBTb3VyY2Ugb3BlcmF0aW5nIHN5c3RlbSB3aXRoIGFjY29tcGFueWluZyB1dGlsaXRpZXMuICBUaGUKKyAgICBDLUtlcm1pdCBzb3VyY2UgY29kZSBtYXkgbm90IGJlIGNoYW5nZWQgd2l0aG91dCB0aGUgY29uc2VudCBvZiB0aGUKKyAgICBLZXJtaXQgUHJvamVjdCwgd2hpY2ggd2lsbCBub3QgYmUgdW5yZWFzb25hYmx5IHdpdGhoZWxkICh0aGlzIGlzCisgICAgc2ltcGx5IGEgbWF0dGVyIG9mIGtlZXBpbmcgYSBjb25zaXN0ZW50IGFuZCBzdXBwb3J0YWJsZSBjb2RlIGJhc2UpLgorCisoQikgSW5jbHVzaW9uIG9mIEMtS2VybWl0IHNvZnR3YXJlIGluIHdob2xlIG9yIGluIHBhcnQsIGluIGFueSBmb3JtLCBpbgorICAgIG9yIHdpdGggYW55IHByb2R1Y3Qgbm90IGNvdmVyZWQgYnkgQ2xhdXNlIChBKSwgb3IgaXRzIGRpc3RyaWJ1dGlvbgorICAgIGJ5IGFueSBjb21tZXJjaWFsIGVudGVycHJpc2UgdG8gaXRzIGFjdHVhbCBvciBwb3RlbnRpYWwgY3VzdG9tZXJzCisgICAgb3IgY2xpZW50cyBleGNlcHQgYXMgaW4gQ2xhdXNlIChBKSwgcmVxdWlyZXMgYSBsaWNlbnNlIGZyb20gdGhlCisgICAgS2VybWl0IFByb2plY3QsIENvbHVtYmlhIFVuaXZlcnNpdHk7IGNvbnRhY3Qga2VybWl0QGNvbHVtYmlhLmVkdS4KKworVGhlIG5hbWUgb2YgQ29sdW1iaWEgVW5pdmVyc2l0eSBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCitwcm9kdWN0cyBkZXJpdmVkIGZyb20gb3IgaW5jbHVkaW5nIHRoZSBDLUtlcm1pdCBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljCitwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK0RJU0NMQUlNRVI6CisKKyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBBUyBJUywgV0lUSE9VVCBSRVBSRVNFTlRBVElPTiBGUk9NIFRIRQorICBUUlVTVEVFUyBPRiBDT0xVTUJJQSBVTklWRVJTSVRZIElOIFRIRSBDSVRZIE9GIE5FVyBZT1JLIEFTIFRPIElUUworICBGSVRORVNTIEZPUiBBTlkgUFVSUE9TRSwgQU5EIFdJVEhPVVQgV0FSUkFOVFkgQlkgVEhFIFRSVVNURUVTIE9GCisgIENPTFVNQklBIFVOSVZFUlNJVFkgSU4gVEhFIENJVFkgT0YgTkVXIFlPUksgT0YgQU5ZIEtJTkQsIEVJVEhFUgorICBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gVEhFIElNUExJRUQKKyAgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICBUSEUgVFJVU1RFRVMgT0YgQ09MVU1CSUEgVU5JVkVSU0lUWSBJTiBUSEUgQ0lUWSBPRiBORVcgWU9SSyBTSEFMTCBOT1QKKyAgQkUgTElBQkxFIEZPUiBBTlkgREFNQUdFUywgSU5DTFVESU5HIFNQRUNJQUwsIElORElSRUNULCBJTkNJREVOVEFMLAorICBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFdJVEggUkVTUEVDVCBUTyBBTlkgQ0xBSU0gQVJJU0lORyBPVVQgT0YgT1IKKyAgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT0YgVEhFIFNPRlRXQVJFLCBFVkVOIElGIElUIEhBUyBCRUVOIE9SIElTCisgIEhFUkVBRlRFUiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuICBZT1UgU0hBTEwKKyAgSU5ERU1OSUZZIEFORCBIT0xEIEhBUk1MRVNTIFRIRSBUUlVTVEVFUyBPRiBDT0xVTUJJQSBVTklWRVJTSVRZIElOCisgIFRIRSBDSVRZIE9GIE5FVyBZT1JLLCBJVFMgRU1QTE9ZRUVTIEFORCBBR0VOVFMgRlJPTSBBTkQgQUdBSU5TVCBBTlkKKyAgQU5EIEFMTCBDTEFJTVMsIERFTUFORFMsIExPU1MsIERBTUFHRSBPUiBFWFBFTlNFIChJTkNMVURJTkcKKyAgQVRUT1JORVlTJyBGRUVTKSBBUklTSU5HIE9VVCBPRiBZT1VSIFVTRSBPRiBUSElTIFNPRlRXQVJFLgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgcGVybWlzc2lvbnMgbm90aWNlLCBhbmQgZGlzY2xhaW1lciBtYXkgbm90IGJlCityZW1vdmVkLCBhbHRlcmVkLCBvciBvYnNjdXJlZCBhbmQgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvZiB0aGUKK0MtS2VybWl0IHNvZnR3YXJlLiAgVGhlIFRydXN0ZWVzIG9mIENvbHVtYmlhIFVuaXZlcnNpdHkgaW4gdGhlIENpdHkgb2YKK05ldyBZb3JrIHJlc2VydmUgdGhlIHJpZ2h0IHRvIHJldm9rZSB0aGlzIHBlcm1pc3Npb24gaWYgYW55IG9mIHRoZSB0ZXJtcworb2YgdXNlIHNldCBmb3J0aCBhYm92ZSBhcmUgYnJlYWNoZWQuCisKKyhFbmQpCmRpZmYgLS1naXQgYS9saWNlbnNlcy9MRFAtMSBiL2xpY2Vuc2VzL0xEUC0xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3MDFiM2IKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9MRFAtMQpAQCAtMCwwICsxLDYyIEBACisJCSAgICBMRFAgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgIFZlcnNpb24gMSwgU2VwdGVtYmVyIDE5OTgKKworICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IGRvY3VtZW50IHdoaWNoIGNvbnRhaW5zIGEgbm90aWNlCitwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZAordW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTERQIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCitUaGUgIkRvY3VtZW50IiBiZWxvdyByZWZlcnMgdG8gYW55IHN1Y2ggZG9jdW1lbnQsIGFuZAorIndvcmsgYmFzZWQgb24gdGhlIERvY3VtZW50IiBtZWFucyBlaXRoZXIgdGhlIERvY3VtZW50CitvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6IHRoYXQgaXMgdG8gc2F5LAorYSB3b3JrIGNvbnRhaW5pbmcgdGhlIERvY3VtZW50IG9yIHBhcnQgb2YgaXQsIGVpdGhlciB2ZXJiYXRpbQorb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlciBsYW5ndWFnZS4KKyhIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMgaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluCit0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKworQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBEb2N1bWVudCdzCitzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UKK2FwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZQorYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyCit0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIGdpdmUgYW55CitvdGhlciByZWNpcGllbnRzIG9mIHRoZSBEb2N1bWVudCBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGgKK3RoZSBEb2N1bWVudC4KKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgcHJvZHVjaW5nIG9yIHRyYW5zZmVycmluZworYSBjb3B5LgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIERvY3VtZW50IG9yIGFueSBwb3J0aW9uCitvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgRG9jdW1lbnQsIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IG5vdGljZXMKKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorCisgICAgYikgWW91IG11c3QgY2F1c2UgYW55IHdvcmsgdGhhdCB5b3UgZGlzdHJpYnV0ZSBvciBwdWJsaXNoLCB0aGF0IGluCisgICAgd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIERvY3VtZW50IG9yIGFueQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgYykgWW91IG11c3Qgbm90IGFkZCBub3RlcyB0byB0aGUgRG9jdW1lbnQgaW1wbHlpbmcgdGhhdCB0aGUKKyAgICByZWFkZXIgaGFkIGJldHRlciByZWFkIHNvbWV0aGluZyBwcm9kdWNlZCB1c2luZyBUZXhpbmZvLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgRG9jdW1lbnQgKG9yIGEgd29yayBiYXNlZCBvbiBpdCwKK3VuZGVyIFNlY3Rpb24gMikgaW4gYW55IGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUKK3Byb3ZpZGVkIHRoYXQgeW91IGFsc28gZWl0aGVyIGFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nCittYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlLCBvciBwcm92aWRlIGFuIFVSTCwgdmFsaWQgZm9yIGF0IGxlYXN0Cit0aHJlZSBtb250aHMsIHdoZXJlIHRoaXMgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlCitpcyBhdmFpbGFibGUsIGFuZCBjYW4gYmUgcmV0cmlldmVkIGJ5IGFueSBhbm9ueW1vdXMgdXNlci4KKworICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIERvY3VtZW50CitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KKworICA1LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgRG9jdW1lbnQgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorRG9jdW1lbnQpLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgRG9jdW1lbnQgc3ViamVjdCB0bwordGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvTERQLTFhIGIvbGljZW5zZXMvTERQLTFhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1OTI5NTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9MRFAtMWEKQEAgLTAsMCArMSw1OSBAQAorCQkgICAgTERQIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICBWZXJzaW9uIDFhLCBOb3ZlbWJlciAxOTk4CisKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBkb2N1bWVudCB3aGljaCBjb250YWlucyBhIG5vdGljZQorcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExEUCBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorVGhlICJEb2N1bWVudCIgYmVsb3cgcmVmZXJzIHRvIGFueSBzdWNoIGRvY3VtZW50LCBhbmQKKyJ3b3JrIGJhc2VkIG9uIHRoZSBEb2N1bWVudCIgbWVhbnMgZWl0aGVyIHRoZSBEb2N1bWVudAorb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlciBjb3B5cmlnaHQgbGF3OiB0aGF0IGlzIHRvIHNheSwKK2Egd29yayBjb250YWluaW5nIHRoZSBEb2N1bWVudCBvciBwYXJ0IG9mIGl0LCBlaXRoZXIgdmVyYmF0aW0KK29yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuCisoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuCisKKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgRG9jdW1lbnQncworc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91CithcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UKK2FuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlcgordG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7IGFuZCBnaXZlIGFueQorb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgRG9jdW1lbnQgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoCit0aGUgRG9jdW1lbnQuCisKK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHByb2R1Y2luZyBvciB0cmFuc2ZlcnJpbmcKK2EgY29weS4KKworICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBEb2N1bWVudCBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIERvY3VtZW50LCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBEb2N1bWVudCBvciBhbnkKKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIERvY3VtZW50IChvciBhIHdvcmsgYmFzZWQgb24gaXQsCit1bmRlciBTZWN0aW9uIDIpIGluIGFueSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlCitwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGVpdGhlciBhY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZworbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgb3IgcHJvdmlkZSBhbiBVUkwsIHZhbGlkIGZvciBhdCBsZWFzdAordGhyZWUgbW9udGhzLCB3aGVyZSB0aGlzIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZQoraXMgYXZhaWxhYmxlLCBhbmQgY2FuIGJlIHJldHJpZXZlZCBieSBhbnkgYW5vbnltb3VzIHVzZXIuCisKKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBEb2N1bWVudAorZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKKyAgNS4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIERvY3VtZW50IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK0RvY3VtZW50KSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIERvY3VtZW50IHN1YmplY3QgdG8KK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCisKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0xHUEwtMiBiL2xpY2Vuc2VzL0xHUEwtMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNjFhM2QxCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvTEdQTC0yCkBAIC0wLDAgKzEsNDgyIEBACisJCSAgR05VIExJQlJBUlkgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworIENvcHlyaWdodCAoQykgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKK1tUaGlzIGlzIHRoZSBmaXJzdCByZWxlYXNlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IEdQTC4gIEl0IGlzCisgbnVtYmVyZWQgMiBiZWNhdXNlIGl0IGdvZXMgd2l0aCB2ZXJzaW9uIDIgb2YgdGhlIG9yZGluYXJ5IEdQTC5dCisKKwkJCSAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlcyBhcmUgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlCitmcmVlIHNvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuCisKKyAgVGhpcyBsaWNlbnNlLCB0aGUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIHNvbWUKK3NwZWNpYWxseSBkZXNpZ25hdGVkIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSwgYW5kIHRvIGFueQorb3RoZXIgbGlicmFyaWVzIHdob3NlIGF1dGhvcnMgZGVjaWRlIHRvIHVzZSBpdC4gIFlvdSBjYW4gdXNlIGl0IGZvcgoreW91ciBsaWJyYXJpZXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CitpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZgoreW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBsaWJyYXJ5LCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnksIHdoZXRoZXIgZ3JhdGlzCitvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdCB3ZSBnYXZlCit5b3UuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlCitjb2RlLiAgSWYgeW91IGxpbmsgYSBwcm9ncmFtIHdpdGggdGhlIGxpYnJhcnksIHlvdSBtdXN0IHByb3ZpZGUKK2NvbXBsZXRlIG9iamVjdCBmaWxlcyB0byB0aGUgcmVjaXBpZW50cyBzbyB0aGF0IHRoZXkgY2FuIHJlbGluayB0aGVtCit3aXRoIHRoZSBsaWJyYXJ5LCBhZnRlciBtYWtpbmcgY2hhbmdlcyB0byB0aGUgbGlicmFyeSBhbmQgcmVjb21waWxpbmcKK2l0LiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgorCisgIE91ciBtZXRob2Qgb2YgcHJvdGVjdGluZyB5b3VyIHJpZ2h0cyBoYXMgdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0Cit0aGUgbGlicmFyeSwgYW5kICgyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbAorcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIGxpYnJhcnkuCisKKyAgQWxzbywgZm9yIGVhY2ggZGlzdHJpYnV0b3IncyBwcm90ZWN0aW9uLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK2xpYnJhcnkuICBJZiB0aGUgbGlicmFyeSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwKK3ZlcnNpb24sIHNvIHRoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24KK3RoZSBvcmlnaW5hbCBhdXRob3JzJyByZXB1dGF0aW9ucy4KKwwKKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCBjb21wYW5pZXMgZGlzdHJpYnV0aW5nIGZyZWUKK3NvZnR3YXJlIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIHRodXMgaW4gZWZmZWN0Cit0cmFuc2Zvcm1pbmcgdGhlIHByb2dyYW0gaW50byBwcm9wcmlldGFyeSBzb2Z0d2FyZS4gIFRvIHByZXZlbnQgdGhpcywKK3dlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueSBwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncworZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworICBNb3N0IEdOVSBzb2Z0d2FyZSwgaW5jbHVkaW5nIHNvbWUgbGlicmFyaWVzLCBpcyBjb3ZlcmVkIGJ5IHRoZSBvcmRpbmFyeQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHdoaWNoIHdhcyBkZXNpZ25lZCBmb3IgdXRpbGl0eSBwcm9ncmFtcy4gIFRoaXMKK2xpY2Vuc2UsIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIGNlcnRhaW4KK2Rlc2lnbmF0ZWQgbGlicmFyaWVzLiAgVGhpcyBsaWNlbnNlIGlzIHF1aXRlIGRpZmZlcmVudCBmcm9tIHRoZSBvcmRpbmFyeQorb25lOyBiZSBzdXJlIHRvIHJlYWQgaXQgaW4gZnVsbCwgYW5kIGRvbid0IGFzc3VtZSB0aGF0IGFueXRoaW5nIGluIGl0IGlzCit0aGUgc2FtZSBhcyBpbiB0aGUgb3JkaW5hcnkgbGljZW5zZS4KKworICBUaGUgcmVhc29uIHdlIGhhdmUgYSBzZXBhcmF0ZSBwdWJsaWMgbGljZW5zZSBmb3Igc29tZSBsaWJyYXJpZXMgaXMgdGhhdAordGhleSBibHVyIHRoZSBkaXN0aW5jdGlvbiB3ZSB1c3VhbGx5IG1ha2UgYmV0d2VlbiBtb2RpZnlpbmcgb3IgYWRkaW5nIHRvIGEKK3Byb2dyYW0gYW5kIHNpbXBseSB1c2luZyBpdC4gIExpbmtpbmcgYSBwcm9ncmFtIHdpdGggYSBsaWJyYXJ5LCB3aXRob3V0CitjaGFuZ2luZyB0aGUgbGlicmFyeSwgaXMgaW4gc29tZSBzZW5zZSBzaW1wbHkgdXNpbmcgdGhlIGxpYnJhcnksIGFuZCBpcworYW5hbG9nb3VzIHRvIHJ1bm5pbmcgYSB1dGlsaXR5IHByb2dyYW0gb3IgYXBwbGljYXRpb24gcHJvZ3JhbS4gIEhvd2V2ZXIsIGluCithIHRleHR1YWwgYW5kIGxlZ2FsIHNlbnNlLCB0aGUgbGlua2VkIGV4ZWN1dGFibGUgaXMgYSBjb21iaW5lZCB3b3JrLCBhCitkZXJpdmF0aXZlIG9mIHRoZSBvcmlnaW5hbCBsaWJyYXJ5LCBhbmQgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK3RyZWF0cyBpdCBhcyBzdWNoLgorCisgIEJlY2F1c2Ugb2YgdGhpcyBibHVycmVkIGRpc3RpbmN0aW9uLCB1c2luZyB0aGUgb3JkaW5hcnkgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgZm9yIGxpYnJhcmllcyBkaWQgbm90IGVmZmVjdGl2ZWx5IHByb21vdGUgc29mdHdhcmUKK3NoYXJpbmcsIGJlY2F1c2UgbW9zdCBkZXZlbG9wZXJzIGRpZCBub3QgdXNlIHRoZSBsaWJyYXJpZXMuICBXZQorY29uY2x1ZGVkIHRoYXQgd2Vha2VyIGNvbmRpdGlvbnMgbWlnaHQgcHJvbW90ZSBzaGFyaW5nIGJldHRlci4KKworICBIb3dldmVyLCB1bnJlc3RyaWN0ZWQgbGlua2luZyBvZiBub24tZnJlZSBwcm9ncmFtcyB3b3VsZCBkZXByaXZlIHRoZQordXNlcnMgb2YgdGhvc2UgcHJvZ3JhbXMgb2YgYWxsIGJlbmVmaXQgZnJvbSB0aGUgZnJlZSBzdGF0dXMgb2YgdGhlCitsaWJyYXJpZXMgdGhlbXNlbHZlcy4gIFRoaXMgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGludGVuZGVkIHRvCitwZXJtaXQgZGV2ZWxvcGVycyBvZiBub24tZnJlZSBwcm9ncmFtcyB0byB1c2UgZnJlZSBsaWJyYXJpZXMsIHdoaWxlCitwcmVzZXJ2aW5nIHlvdXIgZnJlZWRvbSBhcyBhIHVzZXIgb2Ygc3VjaCBwcm9ncmFtcyB0byBjaGFuZ2UgdGhlIGZyZWUKK2xpYnJhcmllcyB0aGF0IGFyZSBpbmNvcnBvcmF0ZWQgaW4gdGhlbS4gIChXZSBoYXZlIG5vdCBzZWVuIGhvdyB0byBhY2hpZXZlCit0aGlzIGFzIHJlZ2FyZHMgY2hhbmdlcyBpbiBoZWFkZXIgZmlsZXMsIGJ1dCB3ZSBoYXZlIGFjaGlldmVkIGl0IGFzIHJlZ2FyZHMKK2NoYW5nZXMgaW4gdGhlIGFjdHVhbCBmdW5jdGlvbnMgb2YgdGhlIExpYnJhcnkuKSAgVGhlIGhvcGUgaXMgdGhhdCB0aGlzCit3aWxsIGxlYWQgdG8gZmFzdGVyIGRldmVsb3BtZW50IG9mIGZyZWUgbGlicmFyaWVzLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LiAgUGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEKKyJ3b3JrIGJhc2VkIG9uIHRoZSBsaWJyYXJ5IiBhbmQgYSAid29yayB0aGF0IHVzZXMgdGhlIGxpYnJhcnkiLiAgVGhlCitmb3JtZXIgY29udGFpbnMgY29kZSBkZXJpdmVkIGZyb20gdGhlIGxpYnJhcnksIHdoaWxlIHRoZSBsYXR0ZXIgb25seQord29ya3MgdG9nZXRoZXIgd2l0aCB0aGUgbGlicmFyeS4KKworICBOb3RlIHRoYXQgaXQgaXMgcG9zc2libGUgZm9yIGEgbGlicmFyeSB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBvcmRpbmFyeQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSByYXRoZXIgdGhhbiBieSB0aGlzIHNwZWNpYWwgb25lLgorDAorCQkgIEdOVSBMSUJSQVJZIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgYXBwbGllcyB0byBhbnkgc29mdHdhcmUgbGlicmFyeSB3aGljaAorY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9yIG90aGVyIGF1dGhvcml6ZWQKK3BhcnR5IHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGlicmFyeQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoYWxzbyBjYWxsZWQgInRoaXMgTGljZW5zZSIpLiAgRWFjaCBsaWNlbnNlZSBpcworYWRkcmVzc2VkIGFzICJ5b3UiLgorCisgIEEgImxpYnJhcnkiIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBzb2Z0d2FyZSBmdW5jdGlvbnMgYW5kL29yIGRhdGEKK3ByZXBhcmVkIHNvIGFzIHRvIGJlIGNvbnZlbmllbnRseSBsaW5rZWQgd2l0aCBhcHBsaWNhdGlvbiBwcm9ncmFtcworKHdoaWNoIHVzZSBzb21lIG9mIHRob3NlIGZ1bmN0aW9ucyBhbmQgZGF0YSkgdG8gZm9ybSBleGVjdXRhYmxlcy4KKworICBUaGUgIkxpYnJhcnkiLCBiZWxvdywgcmVmZXJzIHRvIGFueSBzdWNoIHNvZnR3YXJlIGxpYnJhcnkgb3Igd29yaword2hpY2ggaGFzIGJlZW4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlc2UgdGVybXMuICBBICJ3b3JrIGJhc2VkIG9uIHRoZQorTGlicmFyeSIgbWVhbnMgZWl0aGVyIHRoZSBMaWJyYXJ5IG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIKK2NvcHlyaWdodCBsYXc6IHRoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgTGlicmFyeSBvciBhCitwb3J0aW9uIG9mIGl0LCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkCitzdHJhaWdodGZvcndhcmRseSBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzCitpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4gdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKQorCisgICJTb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhIGxpYnJhcnksIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zCithbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZAoraW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uCithbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCisgIEFjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIGEgcHJvZ3JhbSB1c2luZyB0aGUgTGlicmFyeSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIG91dHB1dCBmcm9tCitzdWNoIGEgcHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkCitvbiB0aGUgTGlicmFyeSAoaW5kZXBlbmRlbnQgb2YgdGhlIHVzZSBvZiB0aGUgTGlicmFyeSBpbiBhIHRvb2wgZm9yCit3cml0aW5nIGl0KS4gIFdoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgTGlicmFyeSBkb2VzCithbmQgd2hhdCB0aGUgcHJvZ3JhbSB0aGF0IHVzZXMgdGhlIExpYnJhcnkgZG9lcy4KKyAgCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIExpYnJhcnkncworY29tcGxldGUgc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQKK3lvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuCithcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdAorYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkKK3dhcnJhbnR5OyBhbmQgZGlzdHJpYnV0ZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlCitMaWJyYXJ5LgorCisgIFlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksCithbmQgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhCitmZWUuCisMCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIExpYnJhcnkgb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFRoZSBtb2RpZmllZCB3b3JrIG11c3QgaXRzZWxmIGJlIGEgc29mdHdhcmUgbGlicmFyeS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIHRoZSBmaWxlcyBtb2RpZmllZCB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBjKSBZb3UgbXVzdCBjYXVzZSB0aGUgd2hvbGUgb2YgdGhlIHdvcmsgdG8gYmUgbGljZW5zZWQgYXQgbm8KKyAgICBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGQpIElmIGEgZmFjaWxpdHkgaW4gdGhlIG1vZGlmaWVkIExpYnJhcnkgcmVmZXJzIHRvIGEgZnVuY3Rpb24gb3IgYQorICAgIHRhYmxlIG9mIGRhdGEgdG8gYmUgc3VwcGxpZWQgYnkgYW4gYXBwbGljYXRpb24gcHJvZ3JhbSB0aGF0IHVzZXMKKyAgICB0aGUgZmFjaWxpdHksIG90aGVyIHRoYW4gYXMgYW4gYXJndW1lbnQgcGFzc2VkIHdoZW4gdGhlIGZhY2lsaXR5CisgICAgaXMgaW52b2tlZCwgdGhlbiB5b3UgbXVzdCBtYWtlIGEgZ29vZCBmYWl0aCBlZmZvcnQgdG8gZW5zdXJlIHRoYXQsCisgICAgaW4gdGhlIGV2ZW50IGFuIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBzdWNoIGZ1bmN0aW9uIG9yCisgICAgdGFibGUsIHRoZSBmYWNpbGl0eSBzdGlsbCBvcGVyYXRlcywgYW5kIHBlcmZvcm1zIHdoYXRldmVyIHBhcnQgb2YKKyAgICBpdHMgcHVycG9zZSByZW1haW5zIG1lYW5pbmdmdWwuCisKKyAgICAoRm9yIGV4YW1wbGUsIGEgZnVuY3Rpb24gaW4gYSBsaWJyYXJ5IHRvIGNvbXB1dGUgc3F1YXJlIHJvb3RzIGhhcworICAgIGEgcHVycG9zZSB0aGF0IGlzIGVudGlyZWx5IHdlbGwtZGVmaW5lZCBpbmRlcGVuZGVudCBvZiB0aGUKKyAgICBhcHBsaWNhdGlvbi4gIFRoZXJlZm9yZSwgU3Vic2VjdGlvbiAyZCByZXF1aXJlcyB0aGF0IGFueQorICAgIGFwcGxpY2F0aW9uLXN1cHBsaWVkIGZ1bmN0aW9uIG9yIHRhYmxlIHVzZWQgYnkgdGhpcyBmdW5jdGlvbiBtdXN0CisgICAgYmUgb3B0aW9uYWw6IGlmIHRoZSBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgaXQsIHRoZSBzcXVhcmUKKyAgICByb290IGZ1bmN0aW9uIG11c3Qgc3RpbGwgY29tcHV0ZSBzcXVhcmUgcm9vdHMuKQorCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBMaWJyYXJ5LAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIExpYnJhcnksIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlCitpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Cit5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgTGlicmFyeS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgTGlicmFyeQord2l0aCB0aGUgTGlicmFyeSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkpIG9uIGEgdm9sdW1lIG9mCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICAzLiBZb3UgbWF5IG9wdCB0byBhcHBseSB0aGUgdGVybXMgb2YgdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZSB0byBhIGdpdmVuIGNvcHkgb2YgdGhlIExpYnJhcnkuICBUbyBkbwordGhpcywgeW91IG11c3QgYWx0ZXIgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlLCBzbwordGhhdCB0aGV5IHJlZmVyIHRvIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLAoraW5zdGVhZCBvZiB0byB0aGlzIExpY2Vuc2UuICAoSWYgYSBuZXdlciB2ZXJzaW9uIHRoYW4gdmVyc2lvbiAyIG9mIHRoZQorb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaGFzIGFwcGVhcmVkLCB0aGVuIHlvdSBjYW4gc3BlY2lmeQordGhhdCB2ZXJzaW9uIGluc3RlYWQgaWYgeW91IHdpc2guKSAgRG8gbm90IG1ha2UgYW55IG90aGVyIGNoYW5nZSBpbgordGhlc2Ugbm90aWNlcy4KKwwKKyAgT25jZSB0aGlzIGNoYW5nZSBpcyBtYWRlIGluIGEgZ2l2ZW4gY29weSwgaXQgaXMgaXJyZXZlcnNpYmxlIGZvcgordGhhdCBjb3B5LCBzbyB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBhbGwKK3N1YnNlcXVlbnQgY29waWVzIGFuZCBkZXJpdmF0aXZlIHdvcmtzIG1hZGUgZnJvbSB0aGF0IGNvcHkuCisKKyAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIHdoZW4geW91IHdpc2ggdG8gY29weSBwYXJ0IG9mIHRoZSBjb2RlIG9mCit0aGUgTGlicmFyeSBpbnRvIGEgcHJvZ3JhbSB0aGF0IGlzIG5vdCBhIGxpYnJhcnkuCisKKyAgNC4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhIHBvcnRpb24gb3IKK2Rlcml2YXRpdmUgb2YgaXQsIHVuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtCit1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhY2NvbXBhbnkKK2l0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2gKK211c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYQorbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgorCisgIElmIGRpc3RyaWJ1dGlvbiBvZiBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5Citmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZQorc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50IHRvCitkaXN0cmlidXRlIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCisgIDUuIEEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIG5vIGRlcml2YXRpdmUgb2YgYW55IHBvcnRpb24gb2YgdGhlCitMaWJyYXJ5LCBidXQgaXMgZGVzaWduZWQgdG8gd29yayB3aXRoIHRoZSBMaWJyYXJ5IGJ5IGJlaW5nIGNvbXBpbGVkIG9yCitsaW5rZWQgd2l0aCBpdCwgaXMgY2FsbGVkIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5Ii4gIFN1Y2ggYQord29yaywgaW4gaXNvbGF0aW9uLCBpcyBub3QgYSBkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnksIGFuZAordGhlcmVmb3JlIGZhbGxzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICBIb3dldmVyLCBsaW5raW5nIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB3aXRoIHRoZSBMaWJyYXJ5CitjcmVhdGVzIGFuIGV4ZWN1dGFibGUgdGhhdCBpcyBhIGRlcml2YXRpdmUgb2YgdGhlIExpYnJhcnkgKGJlY2F1c2UgaXQKK2NvbnRhaW5zIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5KSwgcmF0aGVyIHRoYW4gYSAid29yayB0aGF0IHVzZXMgdGhlCitsaWJyYXJ5Ii4gIFRoZSBleGVjdXRhYmxlIGlzIHRoZXJlZm9yZSBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4KK1NlY3Rpb24gNiBzdGF0ZXMgdGVybXMgZm9yIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGV4ZWN1dGFibGVzLgorCisgIFdoZW4gYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHVzZXMgbWF0ZXJpYWwgZnJvbSBhIGhlYWRlciBmaWxlCit0aGF0IGlzIHBhcnQgb2YgdGhlIExpYnJhcnksIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgbWF5IGJlIGEKK2Rlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSBldmVuIHRob3VnaCB0aGUgc291cmNlIGNvZGUgaXMgbm90LgorV2hldGhlciB0aGlzIGlzIHRydWUgaXMgZXNwZWNpYWxseSBzaWduaWZpY2FudCBpZiB0aGUgd29yayBjYW4gYmUKK2xpbmtlZCB3aXRob3V0IHRoZSBMaWJyYXJ5LCBvciBpZiB0aGUgd29yayBpcyBpdHNlbGYgYSBsaWJyYXJ5LiAgVGhlCit0aHJlc2hvbGQgZm9yIHRoaXMgdG8gYmUgdHJ1ZSBpcyBub3QgcHJlY2lzZWx5IGRlZmluZWQgYnkgbGF3LgorCisgIElmIHN1Y2ggYW4gb2JqZWN0IGZpbGUgdXNlcyBvbmx5IG51bWVyaWNhbCBwYXJhbWV0ZXJzLCBkYXRhCitzdHJ1Y3R1cmUgbGF5b3V0cyBhbmQgYWNjZXNzb3JzLCBhbmQgc21hbGwgbWFjcm9zIGFuZCBzbWFsbCBpbmxpbmUKK2Z1bmN0aW9ucyAodGVuIGxpbmVzIG9yIGxlc3MgaW4gbGVuZ3RoKSwgdGhlbiB0aGUgdXNlIG9mIHRoZSBvYmplY3QKK2ZpbGUgaXMgdW5yZXN0cmljdGVkLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaXMgbGVnYWxseSBhIGRlcml2YXRpdmUKK3dvcmsuICAoRXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGlzIG9iamVjdCBjb2RlIHBsdXMgcG9ydGlvbnMgb2YgdGhlCitMaWJyYXJ5IHdpbGwgc3RpbGwgZmFsbCB1bmRlciBTZWN0aW9uIDYuKQorCisgIE90aGVyd2lzZSwgaWYgdGhlIHdvcmsgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5LCB5b3UgbWF5CitkaXN0cmlidXRlIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gNi4KK0FueSBleGVjdXRhYmxlcyBjb250YWluaW5nIHRoYXQgd29yayBhbHNvIGZhbGwgdW5kZXIgU2VjdGlvbiA2LAord2hldGhlciBvciBub3QgdGhleSBhcmUgbGlua2VkIGRpcmVjdGx5IHdpdGggdGhlIExpYnJhcnkgaXRzZWxmLgorDAorICA2LiBBcyBhbiBleGNlcHRpb24gdG8gdGhlIFNlY3Rpb25zIGFib3ZlLCB5b3UgbWF5IGFsc28gY29tcGlsZSBvcgorbGluayBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeSB0byBwcm9kdWNlIGEKK3dvcmsgY29udGFpbmluZyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSwgYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCit1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCB0aGUgdGVybXMgcGVybWl0Cittb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgZm9yIHRoZSBjdXN0b21lcidzIG93biB1c2UgYW5kIHJldmVyc2UKK2VuZ2luZWVyaW5nIGZvciBkZWJ1Z2dpbmcgc3VjaCBtb2RpZmljYXRpb25zLgorCisgIFlvdSBtdXN0IGdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgd29yayB0aGF0IHRoZQorTGlicmFyeSBpcyB1c2VkIGluIGl0IGFuZCB0aGF0IHRoZSBMaWJyYXJ5IGFuZCBpdHMgdXNlIGFyZSBjb3ZlcmVkIGJ5Cit0aGlzIExpY2Vuc2UuICBZb3UgbXVzdCBzdXBwbHkgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gIElmIHRoZSB3b3JrCitkdXJpbmcgZXhlY3V0aW9uIGRpc3BsYXlzIGNvcHlyaWdodCBub3RpY2VzLCB5b3UgbXVzdCBpbmNsdWRlIHRoZQorY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIExpYnJhcnkgYW1vbmcgdGhlbSwgYXMgd2VsbCBhcyBhIHJlZmVyZW5jZQorZGlyZWN0aW5nIHRoZSB1c2VyIHRvIHRoZSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gIEFsc28sIHlvdSBtdXN0IGRvIG9uZQorb2YgdGhlc2UgdGhpbmdzOgorCisgICAgYSkgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcKKyAgICBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIGZvciB0aGUgTGlicmFyeSBpbmNsdWRpbmcgd2hhdGV2ZXIKKyAgICBjaGFuZ2VzIHdlcmUgdXNlZCBpbiB0aGUgd29yayAod2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlcgorICAgIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUpOyBhbmQsIGlmIHRoZSB3b3JrIGlzIGFuIGV4ZWN1dGFibGUgbGlua2VkCisgICAgd2l0aCB0aGUgTGlicmFyeSwgd2l0aCB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSAid29yayB0aGF0CisgICAgdXNlcyB0aGUgTGlicmFyeSIsIGFzIG9iamVjdCBjb2RlIGFuZC9vciBzb3VyY2UgY29kZSwgc28gdGhhdCB0aGUKKyAgICB1c2VyIGNhbiBtb2RpZnkgdGhlIExpYnJhcnkgYW5kIHRoZW4gcmVsaW5rIHRvIHByb2R1Y2UgYSBtb2RpZmllZAorICAgIGV4ZWN1dGFibGUgY29udGFpbmluZyB0aGUgbW9kaWZpZWQgTGlicmFyeS4gIChJdCBpcyB1bmRlcnN0b29kCisgICAgdGhhdCB0aGUgdXNlciB3aG8gY2hhbmdlcyB0aGUgY29udGVudHMgb2YgZGVmaW5pdGlvbnMgZmlsZXMgaW4gdGhlCisgICAgTGlicmFyeSB3aWxsIG5vdCBuZWNlc3NhcmlseSBiZSBhYmxlIHRvIHJlY29tcGlsZSB0aGUgYXBwbGljYXRpb24KKyAgICB0byB1c2UgdGhlIG1vZGlmaWVkIGRlZmluaXRpb25zLikKKworICAgIGIpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0CisgICAgbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgdGhlIHNhbWUgdXNlciB0aGUgbWF0ZXJpYWxzCisgICAgc3BlY2lmaWVkIGluIFN1YnNlY3Rpb24gNmEsIGFib3ZlLCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZQorICAgIHRoYW4gdGhlIGNvc3Qgb2YgcGVyZm9ybWluZyB0aGlzIGRpc3RyaWJ1dGlvbi4KKworICAgIGMpIElmIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd29yayBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5CisgICAgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIG9mZmVyIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlIGFib3ZlCisgICAgc3BlY2lmaWVkIG1hdGVyaWFscyBmcm9tIHRoZSBzYW1lIHBsYWNlLgorCisgICAgZCkgVmVyaWZ5IHRoYXQgdGhlIHVzZXIgaGFzIGFscmVhZHkgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZXNlCisgICAgbWF0ZXJpYWxzIG9yIHRoYXQgeW91IGhhdmUgYWxyZWFkeSBzZW50IHRoaXMgdXNlciBhIGNvcHkuCisKKyAgRm9yIGFuIGV4ZWN1dGFibGUsIHRoZSByZXF1aXJlZCBmb3JtIG9mIHRoZSAid29yayB0aGF0IHVzZXMgdGhlCitMaWJyYXJ5IiBtdXN0IGluY2x1ZGUgYW55IGRhdGEgYW5kIHV0aWxpdHkgcHJvZ3JhbXMgbmVlZGVkIGZvcgorcmVwcm9kdWNpbmcgdGhlIGV4ZWN1dGFibGUgZnJvbSBpdC4gIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24sCit0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5CitkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkgZm9ybSkgd2l0aCB0aGUgbWFqb3IKK2NvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24KK3doaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudCBpdHNlbGYgYWNjb21wYW5pZXMKK3RoZSBleGVjdXRhYmxlLgorCisgIEl0IG1heSBoYXBwZW4gdGhhdCB0aGlzIHJlcXVpcmVtZW50IGNvbnRyYWRpY3RzIHRoZSBsaWNlbnNlCityZXN0cmljdGlvbnMgb2Ygb3RoZXIgcHJvcHJpZXRhcnkgbGlicmFyaWVzIHRoYXQgZG8gbm90IG5vcm1hbGx5CithY2NvbXBhbnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uICBTdWNoIGEgY29udHJhZGljdGlvbiBtZWFucyB5b3UgY2Fubm90Cit1c2UgYm90aCB0aGVtIGFuZCB0aGUgTGlicmFyeSB0b2dldGhlciBpbiBhbiBleGVjdXRhYmxlIHRoYXQgeW91CitkaXN0cmlidXRlLgorDAorICA3LiBZb3UgbWF5IHBsYWNlIGxpYnJhcnkgZmFjaWxpdGllcyB0aGF0IGFyZSBhIHdvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5IHNpZGUtYnktc2lkZSBpbiBhIHNpbmdsZSBsaWJyYXJ5IHRvZ2V0aGVyIHdpdGggb3RoZXIgbGlicmFyeQorZmFjaWxpdGllcyBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHN1Y2ggYSBjb21iaW5lZAorbGlicmFyeSwgcHJvdmlkZWQgdGhhdCB0aGUgc2VwYXJhdGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGJhc2VkIG9uCit0aGUgTGlicmFyeSBhbmQgb2YgdGhlIG90aGVyIGxpYnJhcnkgZmFjaWxpdGllcyBpcyBvdGhlcndpc2UKK3Blcm1pdHRlZCwgYW5kIHByb3ZpZGVkIHRoYXQgeW91IGRvIHRoZXNlIHR3byB0aGluZ3M6CisKKyAgICBhKSBBY2NvbXBhbnkgdGhlIGNvbWJpbmVkIGxpYnJhcnkgd2l0aCBhIGNvcHkgb2YgdGhlIHNhbWUgd29yaworICAgIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCB1bmNvbWJpbmVkIHdpdGggYW55IG90aGVyIGxpYnJhcnkKKyAgICBmYWNpbGl0aWVzLiAgVGhpcyBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAgICBTZWN0aW9ucyBhYm92ZS4KKworICAgIGIpIEdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIHRoZSBjb21iaW5lZCBsaWJyYXJ5IG9mIHRoZSBmYWN0CisgICAgdGhhdCBwYXJ0IG9mIGl0IGlzIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGV4cGxhaW5pbmcKKyAgICB3aGVyZSB0byBmaW5kIHRoZSBhY2NvbXBhbnlpbmcgdW5jb21iaW5lZCBmb3JtIG9mIHRoZSBzYW1lIHdvcmsuCisKKyAgOC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBsaW5rIHdpdGgsIG9yIGRpc3RyaWJ1dGUKK3RoZSBMaWJyYXJ5IGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55CithdHRlbXB0IG90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IKK2Rpc3RyaWJ1dGUgdGhlIExpYnJhcnkgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91cgorcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLAorb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcwordGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDkuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIExpYnJhcnkgb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgTGlicmFyeSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5KSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIExpYnJhcnkgb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgMTAuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK0xpYnJhcnkpLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlLCBsaW5rIHdpdGggb3IgbW9kaWZ5IHRoZSBMaWJyYXJ5CitzdWJqZWN0IHRvIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwordGhpcyBMaWNlbnNlLgorDAorICAxMS4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5IGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkuCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhbnkKK3BhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBhcHBseSwKK2FuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyIGNpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMTIuIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgTGlicmFyeSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgTGlicmFyeSB1bmRlciB0aGlzIExpY2Vuc2UgbWF5IGFkZAorYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZyB0aG9zZSBjb3VudHJpZXMsCitzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZyBjb3VudHJpZXMgbm90IHRodXMKK2V4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSBsaW1pdGF0aW9uIGFzIGlmCit3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICAxMy4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcKK3ZlcnNpb25zIG9mIHRoZSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuCitTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sCitidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIExpYnJhcnkKK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZAorImFueSBsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZAorY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBMaWJyYXJ5IGRvZXMgbm90IHNwZWNpZnkgYQorbGljZW5zZSB2ZXJzaW9uIG51bWJlciwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisMCisgIDE0LiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgTGlicmFyeSBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBpbmNvbXBhdGlibGUgd2l0aCB0aGVzZSwKK3dyaXRlIHRvIHRoZSBhdXRob3IgdG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzCitjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzIG1ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91cgorZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscyBvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cworb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZCBvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcKK2FuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKKwkJCSAgICBOTyBXQVJSQU5UWQorCisgIDE1LiBCRUNBVVNFIFRIRSBMSUJSQVJZIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTworV0FSUkFOVFkgRk9SIFRIRSBMSUJSQVJZLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4KK0VYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SCitPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIExJQlJBUlkgIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRQorTElCUkFSWSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgTElCUkFSWSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUKK1RIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxNi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTgorV1JJVElORyBXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkKK0FORC9PUiBSRURJU1RSSUJVVEUgVEhFIExJQlJBUlkgQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VCitGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRQorTElCUkFSWSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORworUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEKK0ZBSUxVUkUgT0YgVEhFIExJQlJBUlkgVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBTT0ZUV0FSRSksIEVWRU4gSUYKK1NVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKK0RBTUFHRVMuCisKKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKwwKKyAgICAgQXBwZW5kaXg6IEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBMaWJyYXJpZXMKKworICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBsaWJyYXJ5LCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Citwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgd2UgcmVjb21tZW5kIG1ha2luZyBpdCBmcmVlIHNvZnR3YXJlIHRoYXQKK2V2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZS4gIFlvdSBjYW4gZG8gc28gYnkgcGVybWl0dGluZworcmVkaXN0cmlidXRpb24gdW5kZXIgdGhlc2UgdGVybXMgKG9yLCBhbHRlcm5hdGl2ZWx5LCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCitvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlKS4KKworICBUbyBhcHBseSB0aGVzZSB0ZXJtcywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgbGlicmFyeS4gIEl0IGlzCitzYWZlc3QgdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QgdGhlCisiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIGxpYnJhcnkncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sCisgICAgTUEgMDIxMTEtMTMwNywgVVNBCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgbGlicmFyeSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZQorICBsaWJyYXJ5IGBGcm9iJyAoYSBsaWJyYXJ5IGZvciB0d2Vha2luZyBrbm9icykgd3JpdHRlbiBieSBKYW1lcyBSYW5kb20gSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk5MAorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGF0J3MgYWxsIHRoZXJlIGlzIHRvIGl0IQpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvTEdQTC0yKyBiL2xpY2Vuc2VzL0xHUEwtMisKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDkxNWU0NAotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0xHUEwtMisKQEAgLTAsMCArMSwyIEBACitHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIgb3IgYW55IGxhdGVyIHZlcnNpb24uCitTZWUgTEdQTC0yLCBMR1BMLTIuMSwgb3IgTEdQTC0zIGZvciB0aGUgZnVsbCB0ZXh0IG9mIHRoZXNlIGxpY2Vuc2VzLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvTEdQTC0yLXdpdGgtbGlua2luZy1leGNlcHRpb24gYi9saWNlbnNlcy9MR1BMLTItd2l0aC1saW5raW5nLWV4Y2VwdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzU1NDNmCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvTEdQTC0yLXdpdGgtbGlua2luZy1leGNlcHRpb24KQEAgLTAsMCArMSw0OTggQEAKK0FzIGEgc3BlY2lhbCBleGNlcHRpb24gdG8gdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHlvdQorbWF5IGxpbmssIHN0YXRpY2FsbHkgb3IgZHluYW1pY2FsbHksIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5Igord2l0aCBhIHB1YmxpY2x5IGRpc3RyaWJ1dGVkIHZlcnNpb24gb2YgdGhlIExpYnJhcnkgdG8gcHJvZHVjZSBhbgorZXhlY3V0YWJsZSBmaWxlIGNvbnRhaW5pbmcgcG9ydGlvbnMgb2YgdGhlIExpYnJhcnksIGFuZCBkaXN0cmlidXRlCit0aGF0IGV4ZWN1dGFibGUgZmlsZSB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgd2l0aG91dCBhbnkgb2YgdGhlCithZGRpdGlvbmFsIHJlcXVpcmVtZW50cyBsaXN0ZWQgaW4gY2xhdXNlIDYgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwKK1B1YmxpYyBMaWNlbnNlLiAgQnkgImEgcHVibGljbHkgZGlzdHJpYnV0ZWQgdmVyc2lvbiBvZiB0aGUgTGlicmFyeSIsCit3ZSBtZWFuIGVpdGhlciB0aGUgdW5tb2RpZmllZCBMaWJyYXJ5IGFzIGRpc3RyaWJ1dGVkIGJ5IElOUklBLCBvciBhCittb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBMaWJyYXJ5IHRoYXQgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlCitjb25kaXRpb25zIGRlZmluZWQgaW4gY2xhdXNlIDMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCitMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlciBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zCit3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJCSAgR05VIExJQlJBUlkgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworIENvcHlyaWdodCAoQykgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgMDIxMTEtMTMwNywgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKK1tUaGlzIGlzIHRoZSBmaXJzdCByZWxlYXNlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IEdQTC4gIEl0IGlzCisgbnVtYmVyZWQgMiBiZWNhdXNlIGl0IGdvZXMgd2l0aCB2ZXJzaW9uIDIgb2YgdGhlIG9yZGluYXJ5IEdQTC5dCisKKwkJCSAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlcyBhcmUgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlCitmcmVlIHNvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuCisKKyAgVGhpcyBsaWNlbnNlLCB0aGUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIHNvbWUKK3NwZWNpYWxseSBkZXNpZ25hdGVkIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSwgYW5kIHRvIGFueQorb3RoZXIgbGlicmFyaWVzIHdob3NlIGF1dGhvcnMgZGVjaWRlIHRvIHVzZSBpdC4gIFlvdSBjYW4gdXNlIGl0IGZvcgoreW91ciBsaWJyYXJpZXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CitpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZgoreW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBsaWJyYXJ5LCBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnksIHdoZXRoZXIgZ3JhdGlzCitvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdCB3ZSBnYXZlCit5b3UuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlCitjb2RlLiAgSWYgeW91IGxpbmsgYSBwcm9ncmFtIHdpdGggdGhlIGxpYnJhcnksIHlvdSBtdXN0IHByb3ZpZGUKK2NvbXBsZXRlIG9iamVjdCBmaWxlcyB0byB0aGUgcmVjaXBpZW50cyBzbyB0aGF0IHRoZXkgY2FuIHJlbGluayB0aGVtCit3aXRoIHRoZSBsaWJyYXJ5LCBhZnRlciBtYWtpbmcgY2hhbmdlcyB0byB0aGUgbGlicmFyeSBhbmQgcmVjb21waWxpbmcKK2l0LiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgorCisgIE91ciBtZXRob2Qgb2YgcHJvdGVjdGluZyB5b3VyIHJpZ2h0cyBoYXMgdHdvIHN0ZXBzOiAoMSkgY29weXJpZ2h0Cit0aGUgbGlicmFyeSwgYW5kICgyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbAorcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIGxpYnJhcnkuCisKKyAgQWxzbywgZm9yIGVhY2ggZGlzdHJpYnV0b3IncyBwcm90ZWN0aW9uLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbgordGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGlzIGZyZWUKK2xpYnJhcnkuICBJZiB0aGUgbGlicmFyeSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwKK3ZlcnNpb24sIHNvIHRoYXQgYW55IHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24KK3RoZSBvcmlnaW5hbCBhdXRob3JzJyByZXB1dGF0aW9ucy4KKwwKKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCBjb21wYW5pZXMgZGlzdHJpYnV0aW5nIGZyZWUKK3NvZnR3YXJlIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIHRodXMgaW4gZWZmZWN0Cit0cmFuc2Zvcm1pbmcgdGhlIHByb2dyYW0gaW50byBwcm9wcmlldGFyeSBzb2Z0d2FyZS4gIFRvIHByZXZlbnQgdGhpcywKK3dlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueSBwYXRlbnQgbXVzdCBiZSBsaWNlbnNlZCBmb3IgZXZlcnlvbmUncworZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworICBNb3N0IEdOVSBzb2Z0d2FyZSwgaW5jbHVkaW5nIHNvbWUgbGlicmFyaWVzLCBpcyBjb3ZlcmVkIGJ5IHRoZSBvcmRpbmFyeQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHdoaWNoIHdhcyBkZXNpZ25lZCBmb3IgdXRpbGl0eSBwcm9ncmFtcy4gIFRoaXMKK2xpY2Vuc2UsIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIGNlcnRhaW4KK2Rlc2lnbmF0ZWQgbGlicmFyaWVzLiAgVGhpcyBsaWNlbnNlIGlzIHF1aXRlIGRpZmZlcmVudCBmcm9tIHRoZSBvcmRpbmFyeQorb25lOyBiZSBzdXJlIHRvIHJlYWQgaXQgaW4gZnVsbCwgYW5kIGRvbid0IGFzc3VtZSB0aGF0IGFueXRoaW5nIGluIGl0IGlzCit0aGUgc2FtZSBhcyBpbiB0aGUgb3JkaW5hcnkgbGljZW5zZS4KKworICBUaGUgcmVhc29uIHdlIGhhdmUgYSBzZXBhcmF0ZSBwdWJsaWMgbGljZW5zZSBmb3Igc29tZSBsaWJyYXJpZXMgaXMgdGhhdAordGhleSBibHVyIHRoZSBkaXN0aW5jdGlvbiB3ZSB1c3VhbGx5IG1ha2UgYmV0d2VlbiBtb2RpZnlpbmcgb3IgYWRkaW5nIHRvIGEKK3Byb2dyYW0gYW5kIHNpbXBseSB1c2luZyBpdC4gIExpbmtpbmcgYSBwcm9ncmFtIHdpdGggYSBsaWJyYXJ5LCB3aXRob3V0CitjaGFuZ2luZyB0aGUgbGlicmFyeSwgaXMgaW4gc29tZSBzZW5zZSBzaW1wbHkgdXNpbmcgdGhlIGxpYnJhcnksIGFuZCBpcworYW5hbG9nb3VzIHRvIHJ1bm5pbmcgYSB1dGlsaXR5IHByb2dyYW0gb3IgYXBwbGljYXRpb24gcHJvZ3JhbS4gIEhvd2V2ZXIsIGluCithIHRleHR1YWwgYW5kIGxlZ2FsIHNlbnNlLCB0aGUgbGlua2VkIGV4ZWN1dGFibGUgaXMgYSBjb21iaW5lZCB3b3JrLCBhCitkZXJpdmF0aXZlIG9mIHRoZSBvcmlnaW5hbCBsaWJyYXJ5LCBhbmQgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK3RyZWF0cyBpdCBhcyBzdWNoLgorCisgIEJlY2F1c2Ugb2YgdGhpcyBibHVycmVkIGRpc3RpbmN0aW9uLCB1c2luZyB0aGUgb3JkaW5hcnkgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgZm9yIGxpYnJhcmllcyBkaWQgbm90IGVmZmVjdGl2ZWx5IHByb21vdGUgc29mdHdhcmUKK3NoYXJpbmcsIGJlY2F1c2UgbW9zdCBkZXZlbG9wZXJzIGRpZCBub3QgdXNlIHRoZSBsaWJyYXJpZXMuICBXZQorY29uY2x1ZGVkIHRoYXQgd2Vha2VyIGNvbmRpdGlvbnMgbWlnaHQgcHJvbW90ZSBzaGFyaW5nIGJldHRlci4KKworICBIb3dldmVyLCB1bnJlc3RyaWN0ZWQgbGlua2luZyBvZiBub24tZnJlZSBwcm9ncmFtcyB3b3VsZCBkZXByaXZlIHRoZQordXNlcnMgb2YgdGhvc2UgcHJvZ3JhbXMgb2YgYWxsIGJlbmVmaXQgZnJvbSB0aGUgZnJlZSBzdGF0dXMgb2YgdGhlCitsaWJyYXJpZXMgdGhlbXNlbHZlcy4gIFRoaXMgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGludGVuZGVkIHRvCitwZXJtaXQgZGV2ZWxvcGVycyBvZiBub24tZnJlZSBwcm9ncmFtcyB0byB1c2UgZnJlZSBsaWJyYXJpZXMsIHdoaWxlCitwcmVzZXJ2aW5nIHlvdXIgZnJlZWRvbSBhcyBhIHVzZXIgb2Ygc3VjaCBwcm9ncmFtcyB0byBjaGFuZ2UgdGhlIGZyZWUKK2xpYnJhcmllcyB0aGF0IGFyZSBpbmNvcnBvcmF0ZWQgaW4gdGhlbS4gIChXZSBoYXZlIG5vdCBzZWVuIGhvdyB0byBhY2hpZXZlCit0aGlzIGFzIHJlZ2FyZHMgY2hhbmdlcyBpbiBoZWFkZXIgZmlsZXMsIGJ1dCB3ZSBoYXZlIGFjaGlldmVkIGl0IGFzIHJlZ2FyZHMKK2NoYW5nZXMgaW4gdGhlIGFjdHVhbCBmdW5jdGlvbnMgb2YgdGhlIExpYnJhcnkuKSAgVGhlIGhvcGUgaXMgdGhhdCB0aGlzCit3aWxsIGxlYWQgdG8gZmFzdGVyIGRldmVsb3BtZW50IG9mIGZyZWUgbGlicmFyaWVzLgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LiAgUGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEKKyJ3b3JrIGJhc2VkIG9uIHRoZSBsaWJyYXJ5IiBhbmQgYSAid29yayB0aGF0IHVzZXMgdGhlIGxpYnJhcnkiLiAgVGhlCitmb3JtZXIgY29udGFpbnMgY29kZSBkZXJpdmVkIGZyb20gdGhlIGxpYnJhcnksIHdoaWxlIHRoZSBsYXR0ZXIgb25seQord29ya3MgdG9nZXRoZXIgd2l0aCB0aGUgbGlicmFyeS4KKworICBOb3RlIHRoYXQgaXQgaXMgcG9zc2libGUgZm9yIGEgbGlicmFyeSB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBvcmRpbmFyeQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSByYXRoZXIgdGhhbiBieSB0aGlzIHNwZWNpYWwgb25lLgorDAorCQkgIEdOVSBMSUJSQVJZIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgYXBwbGllcyB0byBhbnkgc29mdHdhcmUgbGlicmFyeSB3aGljaAorY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9yIG90aGVyIGF1dGhvcml6ZWQKK3BhcnR5IHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGlicmFyeQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoYWxzbyBjYWxsZWQgInRoaXMgTGljZW5zZSIpLiAgRWFjaCBsaWNlbnNlZSBpcworYWRkcmVzc2VkIGFzICJ5b3UiLgorCisgIEEgImxpYnJhcnkiIG1lYW5zIGEgY29sbGVjdGlvbiBvZiBzb2Z0d2FyZSBmdW5jdGlvbnMgYW5kL29yIGRhdGEKK3ByZXBhcmVkIHNvIGFzIHRvIGJlIGNvbnZlbmllbnRseSBsaW5rZWQgd2l0aCBhcHBsaWNhdGlvbiBwcm9ncmFtcworKHdoaWNoIHVzZSBzb21lIG9mIHRob3NlIGZ1bmN0aW9ucyBhbmQgZGF0YSkgdG8gZm9ybSBleGVjdXRhYmxlcy4KKworICBUaGUgIkxpYnJhcnkiLCBiZWxvdywgcmVmZXJzIHRvIGFueSBzdWNoIHNvZnR3YXJlIGxpYnJhcnkgb3Igd29yaword2hpY2ggaGFzIGJlZW4gZGlzdHJpYnV0ZWQgdW5kZXIgdGhlc2UgdGVybXMuICBBICJ3b3JrIGJhc2VkIG9uIHRoZQorTGlicmFyeSIgbWVhbnMgZWl0aGVyIHRoZSBMaWJyYXJ5IG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIKK2NvcHlyaWdodCBsYXc6IHRoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgTGlicmFyeSBvciBhCitwb3J0aW9uIG9mIGl0LCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkCitzdHJhaWdodGZvcndhcmRseSBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzCitpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4gdGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKQorCisgICJTb3VyY2UgY29kZSIgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yCittYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdC4gIEZvciBhIGxpYnJhcnksIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zCithbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZAoraW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uCithbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBsaWJyYXJ5LgorCisgIEFjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIGEgcHJvZ3JhbSB1c2luZyB0aGUgTGlicmFyeSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIG91dHB1dCBmcm9tCitzdWNoIGEgcHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkCitvbiB0aGUgTGlicmFyeSAoaW5kZXBlbmRlbnQgb2YgdGhlIHVzZSBvZiB0aGUgTGlicmFyeSBpbiBhIHRvb2wgZm9yCit3cml0aW5nIGl0KS4gIFdoZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgTGlicmFyeSBkb2VzCithbmQgd2hhdCB0aGUgcHJvZ3JhbSB0aGF0IHVzZXMgdGhlIExpYnJhcnkgZG9lcy4KKyAgCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIExpYnJhcnkncworY29tcGxldGUgc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQKK3lvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuCithcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdAorYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkKK3dhcnJhbnR5OyBhbmQgZGlzdHJpYnV0ZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlCitMaWJyYXJ5LgorCisgIFlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksCithbmQgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhCitmZWUuCisMCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIExpYnJhcnkgb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFRoZSBtb2RpZmllZCB3b3JrIG11c3QgaXRzZWxmIGJlIGEgc29mdHdhcmUgbGlicmFyeS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIHRoZSBmaWxlcyBtb2RpZmllZCB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBjKSBZb3UgbXVzdCBjYXVzZSB0aGUgd2hvbGUgb2YgdGhlIHdvcmsgdG8gYmUgbGljZW5zZWQgYXQgbm8KKyAgICBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGQpIElmIGEgZmFjaWxpdHkgaW4gdGhlIG1vZGlmaWVkIExpYnJhcnkgcmVmZXJzIHRvIGEgZnVuY3Rpb24gb3IgYQorICAgIHRhYmxlIG9mIGRhdGEgdG8gYmUgc3VwcGxpZWQgYnkgYW4gYXBwbGljYXRpb24gcHJvZ3JhbSB0aGF0IHVzZXMKKyAgICB0aGUgZmFjaWxpdHksIG90aGVyIHRoYW4gYXMgYW4gYXJndW1lbnQgcGFzc2VkIHdoZW4gdGhlIGZhY2lsaXR5CisgICAgaXMgaW52b2tlZCwgdGhlbiB5b3UgbXVzdCBtYWtlIGEgZ29vZCBmYWl0aCBlZmZvcnQgdG8gZW5zdXJlIHRoYXQsCisgICAgaW4gdGhlIGV2ZW50IGFuIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBzdWNoIGZ1bmN0aW9uIG9yCisgICAgdGFibGUsIHRoZSBmYWNpbGl0eSBzdGlsbCBvcGVyYXRlcywgYW5kIHBlcmZvcm1zIHdoYXRldmVyIHBhcnQgb2YKKyAgICBpdHMgcHVycG9zZSByZW1haW5zIG1lYW5pbmdmdWwuCisKKyAgICAoRm9yIGV4YW1wbGUsIGEgZnVuY3Rpb24gaW4gYSBsaWJyYXJ5IHRvIGNvbXB1dGUgc3F1YXJlIHJvb3RzIGhhcworICAgIGEgcHVycG9zZSB0aGF0IGlzIGVudGlyZWx5IHdlbGwtZGVmaW5lZCBpbmRlcGVuZGVudCBvZiB0aGUKKyAgICBhcHBsaWNhdGlvbi4gIFRoZXJlZm9yZSwgU3Vic2VjdGlvbiAyZCByZXF1aXJlcyB0aGF0IGFueQorICAgIGFwcGxpY2F0aW9uLXN1cHBsaWVkIGZ1bmN0aW9uIG9yIHRhYmxlIHVzZWQgYnkgdGhpcyBmdW5jdGlvbiBtdXN0CisgICAgYmUgb3B0aW9uYWw6IGlmIHRoZSBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgaXQsIHRoZSBzcXVhcmUKKyAgICByb290IGZ1bmN0aW9uIG11c3Qgc3RpbGwgY29tcHV0ZSBzcXVhcmUgcm9vdHMuKQorCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBMaWJyYXJ5LAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIExpYnJhcnksIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlCitpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Cit5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgTGlicmFyeS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgTGlicmFyeQord2l0aCB0aGUgTGlicmFyeSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkpIG9uIGEgdm9sdW1lIG9mCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICAzLiBZb3UgbWF5IG9wdCB0byBhcHBseSB0aGUgdGVybXMgb2YgdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZSB0byBhIGdpdmVuIGNvcHkgb2YgdGhlIExpYnJhcnkuICBUbyBkbwordGhpcywgeW91IG11c3QgYWx0ZXIgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlLCBzbwordGhhdCB0aGV5IHJlZmVyIHRvIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLAoraW5zdGVhZCBvZiB0byB0aGlzIExpY2Vuc2UuICAoSWYgYSBuZXdlciB2ZXJzaW9uIHRoYW4gdmVyc2lvbiAyIG9mIHRoZQorb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaGFzIGFwcGVhcmVkLCB0aGVuIHlvdSBjYW4gc3BlY2lmeQordGhhdCB2ZXJzaW9uIGluc3RlYWQgaWYgeW91IHdpc2guKSAgRG8gbm90IG1ha2UgYW55IG90aGVyIGNoYW5nZSBpbgordGhlc2Ugbm90aWNlcy4KKwwKKyAgT25jZSB0aGlzIGNoYW5nZSBpcyBtYWRlIGluIGEgZ2l2ZW4gY29weSwgaXQgaXMgaXJyZXZlcnNpYmxlIGZvcgordGhhdCBjb3B5LCBzbyB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBhbGwKK3N1YnNlcXVlbnQgY29waWVzIGFuZCBkZXJpdmF0aXZlIHdvcmtzIG1hZGUgZnJvbSB0aGF0IGNvcHkuCisKKyAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIHdoZW4geW91IHdpc2ggdG8gY29weSBwYXJ0IG9mIHRoZSBjb2RlIG9mCit0aGUgTGlicmFyeSBpbnRvIGEgcHJvZ3JhbSB0aGF0IGlzIG5vdCBhIGxpYnJhcnkuCisKKyAgNC4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhIHBvcnRpb24gb3IKK2Rlcml2YXRpdmUgb2YgaXQsIHVuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtCit1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhY2NvbXBhbnkKK2l0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2gKK211c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYQorbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgorCisgIElmIGRpc3RyaWJ1dGlvbiBvZiBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5Citmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZQorc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50IHRvCitkaXN0cmlidXRlIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCisgIDUuIEEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIG5vIGRlcml2YXRpdmUgb2YgYW55IHBvcnRpb24gb2YgdGhlCitMaWJyYXJ5LCBidXQgaXMgZGVzaWduZWQgdG8gd29yayB3aXRoIHRoZSBMaWJyYXJ5IGJ5IGJlaW5nIGNvbXBpbGVkIG9yCitsaW5rZWQgd2l0aCBpdCwgaXMgY2FsbGVkIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5Ii4gIFN1Y2ggYQord29yaywgaW4gaXNvbGF0aW9uLCBpcyBub3QgYSBkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnksIGFuZAordGhlcmVmb3JlIGZhbGxzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICBIb3dldmVyLCBsaW5raW5nIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB3aXRoIHRoZSBMaWJyYXJ5CitjcmVhdGVzIGFuIGV4ZWN1dGFibGUgdGhhdCBpcyBhIGRlcml2YXRpdmUgb2YgdGhlIExpYnJhcnkgKGJlY2F1c2UgaXQKK2NvbnRhaW5zIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5KSwgcmF0aGVyIHRoYW4gYSAid29yayB0aGF0IHVzZXMgdGhlCitsaWJyYXJ5Ii4gIFRoZSBleGVjdXRhYmxlIGlzIHRoZXJlZm9yZSBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4KK1NlY3Rpb24gNiBzdGF0ZXMgdGVybXMgZm9yIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGV4ZWN1dGFibGVzLgorCisgIFdoZW4gYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHVzZXMgbWF0ZXJpYWwgZnJvbSBhIGhlYWRlciBmaWxlCit0aGF0IGlzIHBhcnQgb2YgdGhlIExpYnJhcnksIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgbWF5IGJlIGEKK2Rlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSBldmVuIHRob3VnaCB0aGUgc291cmNlIGNvZGUgaXMgbm90LgorV2hldGhlciB0aGlzIGlzIHRydWUgaXMgZXNwZWNpYWxseSBzaWduaWZpY2FudCBpZiB0aGUgd29yayBjYW4gYmUKK2xpbmtlZCB3aXRob3V0IHRoZSBMaWJyYXJ5LCBvciBpZiB0aGUgd29yayBpcyBpdHNlbGYgYSBsaWJyYXJ5LiAgVGhlCit0aHJlc2hvbGQgZm9yIHRoaXMgdG8gYmUgdHJ1ZSBpcyBub3QgcHJlY2lzZWx5IGRlZmluZWQgYnkgbGF3LgorCisgIElmIHN1Y2ggYW4gb2JqZWN0IGZpbGUgdXNlcyBvbmx5IG51bWVyaWNhbCBwYXJhbWV0ZXJzLCBkYXRhCitzdHJ1Y3R1cmUgbGF5b3V0cyBhbmQgYWNjZXNzb3JzLCBhbmQgc21hbGwgbWFjcm9zIGFuZCBzbWFsbCBpbmxpbmUKK2Z1bmN0aW9ucyAodGVuIGxpbmVzIG9yIGxlc3MgaW4gbGVuZ3RoKSwgdGhlbiB0aGUgdXNlIG9mIHRoZSBvYmplY3QKK2ZpbGUgaXMgdW5yZXN0cmljdGVkLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaXMgbGVnYWxseSBhIGRlcml2YXRpdmUKK3dvcmsuICAoRXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGlzIG9iamVjdCBjb2RlIHBsdXMgcG9ydGlvbnMgb2YgdGhlCitMaWJyYXJ5IHdpbGwgc3RpbGwgZmFsbCB1bmRlciBTZWN0aW9uIDYuKQorCisgIE90aGVyd2lzZSwgaWYgdGhlIHdvcmsgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5LCB5b3UgbWF5CitkaXN0cmlidXRlIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gNi4KK0FueSBleGVjdXRhYmxlcyBjb250YWluaW5nIHRoYXQgd29yayBhbHNvIGZhbGwgdW5kZXIgU2VjdGlvbiA2LAord2hldGhlciBvciBub3QgdGhleSBhcmUgbGlua2VkIGRpcmVjdGx5IHdpdGggdGhlIExpYnJhcnkgaXRzZWxmLgorDAorICA2LiBBcyBhbiBleGNlcHRpb24gdG8gdGhlIFNlY3Rpb25zIGFib3ZlLCB5b3UgbWF5IGFsc28gY29tcGlsZSBvcgorbGluayBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeSB0byBwcm9kdWNlIGEKK3dvcmsgY29udGFpbmluZyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSwgYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCit1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCB0aGUgdGVybXMgcGVybWl0Cittb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgZm9yIHRoZSBjdXN0b21lcidzIG93biB1c2UgYW5kIHJldmVyc2UKK2VuZ2luZWVyaW5nIGZvciBkZWJ1Z2dpbmcgc3VjaCBtb2RpZmljYXRpb25zLgorCisgIFlvdSBtdXN0IGdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgd29yayB0aGF0IHRoZQorTGlicmFyeSBpcyB1c2VkIGluIGl0IGFuZCB0aGF0IHRoZSBMaWJyYXJ5IGFuZCBpdHMgdXNlIGFyZSBjb3ZlcmVkIGJ5Cit0aGlzIExpY2Vuc2UuICBZb3UgbXVzdCBzdXBwbHkgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gIElmIHRoZSB3b3JrCitkdXJpbmcgZXhlY3V0aW9uIGRpc3BsYXlzIGNvcHlyaWdodCBub3RpY2VzLCB5b3UgbXVzdCBpbmNsdWRlIHRoZQorY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIExpYnJhcnkgYW1vbmcgdGhlbSwgYXMgd2VsbCBhcyBhIHJlZmVyZW5jZQorZGlyZWN0aW5nIHRoZSB1c2VyIHRvIHRoZSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gIEFsc28sIHlvdSBtdXN0IGRvIG9uZQorb2YgdGhlc2UgdGhpbmdzOgorCisgICAgYSkgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcKKyAgICBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIGZvciB0aGUgTGlicmFyeSBpbmNsdWRpbmcgd2hhdGV2ZXIKKyAgICBjaGFuZ2VzIHdlcmUgdXNlZCBpbiB0aGUgd29yayAod2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlcgorICAgIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUpOyBhbmQsIGlmIHRoZSB3b3JrIGlzIGFuIGV4ZWN1dGFibGUgbGlua2VkCisgICAgd2l0aCB0aGUgTGlicmFyeSwgd2l0aCB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSAid29yayB0aGF0CisgICAgdXNlcyB0aGUgTGlicmFyeSIsIGFzIG9iamVjdCBjb2RlIGFuZC9vciBzb3VyY2UgY29kZSwgc28gdGhhdCB0aGUKKyAgICB1c2VyIGNhbiBtb2RpZnkgdGhlIExpYnJhcnkgYW5kIHRoZW4gcmVsaW5rIHRvIHByb2R1Y2UgYSBtb2RpZmllZAorICAgIGV4ZWN1dGFibGUgY29udGFpbmluZyB0aGUgbW9kaWZpZWQgTGlicmFyeS4gIChJdCBpcyB1bmRlcnN0b29kCisgICAgdGhhdCB0aGUgdXNlciB3aG8gY2hhbmdlcyB0aGUgY29udGVudHMgb2YgZGVmaW5pdGlvbnMgZmlsZXMgaW4gdGhlCisgICAgTGlicmFyeSB3aWxsIG5vdCBuZWNlc3NhcmlseSBiZSBhYmxlIHRvIHJlY29tcGlsZSB0aGUgYXBwbGljYXRpb24KKyAgICB0byB1c2UgdGhlIG1vZGlmaWVkIGRlZmluaXRpb25zLikKKworICAgIGIpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0CisgICAgbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgdGhlIHNhbWUgdXNlciB0aGUgbWF0ZXJpYWxzCisgICAgc3BlY2lmaWVkIGluIFN1YnNlY3Rpb24gNmEsIGFib3ZlLCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZQorICAgIHRoYW4gdGhlIGNvc3Qgb2YgcGVyZm9ybWluZyB0aGlzIGRpc3RyaWJ1dGlvbi4KKworICAgIGMpIElmIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd29yayBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5CisgICAgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIG9mZmVyIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlIGFib3ZlCisgICAgc3BlY2lmaWVkIG1hdGVyaWFscyBmcm9tIHRoZSBzYW1lIHBsYWNlLgorCisgICAgZCkgVmVyaWZ5IHRoYXQgdGhlIHVzZXIgaGFzIGFscmVhZHkgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZXNlCisgICAgbWF0ZXJpYWxzIG9yIHRoYXQgeW91IGhhdmUgYWxyZWFkeSBzZW50IHRoaXMgdXNlciBhIGNvcHkuCisKKyAgRm9yIGFuIGV4ZWN1dGFibGUsIHRoZSByZXF1aXJlZCBmb3JtIG9mIHRoZSAid29yayB0aGF0IHVzZXMgdGhlCitMaWJyYXJ5IiBtdXN0IGluY2x1ZGUgYW55IGRhdGEgYW5kIHV0aWxpdHkgcHJvZ3JhbXMgbmVlZGVkIGZvcgorcmVwcm9kdWNpbmcgdGhlIGV4ZWN1dGFibGUgZnJvbSBpdC4gIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24sCit0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5CitkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkgZm9ybSkgd2l0aCB0aGUgbWFqb3IKK2NvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24KK3doaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudCBpdHNlbGYgYWNjb21wYW5pZXMKK3RoZSBleGVjdXRhYmxlLgorCisgIEl0IG1heSBoYXBwZW4gdGhhdCB0aGlzIHJlcXVpcmVtZW50IGNvbnRyYWRpY3RzIHRoZSBsaWNlbnNlCityZXN0cmljdGlvbnMgb2Ygb3RoZXIgcHJvcHJpZXRhcnkgbGlicmFyaWVzIHRoYXQgZG8gbm90IG5vcm1hbGx5CithY2NvbXBhbnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uICBTdWNoIGEgY29udHJhZGljdGlvbiBtZWFucyB5b3UgY2Fubm90Cit1c2UgYm90aCB0aGVtIGFuZCB0aGUgTGlicmFyeSB0b2dldGhlciBpbiBhbiBleGVjdXRhYmxlIHRoYXQgeW91CitkaXN0cmlidXRlLgorDAorICA3LiBZb3UgbWF5IHBsYWNlIGxpYnJhcnkgZmFjaWxpdGllcyB0aGF0IGFyZSBhIHdvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5IHNpZGUtYnktc2lkZSBpbiBhIHNpbmdsZSBsaWJyYXJ5IHRvZ2V0aGVyIHdpdGggb3RoZXIgbGlicmFyeQorZmFjaWxpdGllcyBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHN1Y2ggYSBjb21iaW5lZAorbGlicmFyeSwgcHJvdmlkZWQgdGhhdCB0aGUgc2VwYXJhdGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGJhc2VkIG9uCit0aGUgTGlicmFyeSBhbmQgb2YgdGhlIG90aGVyIGxpYnJhcnkgZmFjaWxpdGllcyBpcyBvdGhlcndpc2UKK3Blcm1pdHRlZCwgYW5kIHByb3ZpZGVkIHRoYXQgeW91IGRvIHRoZXNlIHR3byB0aGluZ3M6CisKKyAgICBhKSBBY2NvbXBhbnkgdGhlIGNvbWJpbmVkIGxpYnJhcnkgd2l0aCBhIGNvcHkgb2YgdGhlIHNhbWUgd29yaworICAgIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCB1bmNvbWJpbmVkIHdpdGggYW55IG90aGVyIGxpYnJhcnkKKyAgICBmYWNpbGl0aWVzLiAgVGhpcyBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAgICBTZWN0aW9ucyBhYm92ZS4KKworICAgIGIpIEdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIHRoZSBjb21iaW5lZCBsaWJyYXJ5IG9mIHRoZSBmYWN0CisgICAgdGhhdCBwYXJ0IG9mIGl0IGlzIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGV4cGxhaW5pbmcKKyAgICB3aGVyZSB0byBmaW5kIHRoZSBhY2NvbXBhbnlpbmcgdW5jb21iaW5lZCBmb3JtIG9mIHRoZSBzYW1lIHdvcmsuCisKKyAgOC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBsaW5rIHdpdGgsIG9yIGRpc3RyaWJ1dGUKK3RoZSBMaWJyYXJ5IGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55CithdHRlbXB0IG90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IKK2Rpc3RyaWJ1dGUgdGhlIExpYnJhcnkgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91cgorcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLAorb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcwordGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDkuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIExpYnJhcnkgb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgTGlicmFyeSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5KSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIExpYnJhcnkgb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgMTAuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK0xpYnJhcnkpLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlLCBsaW5rIHdpdGggb3IgbW9kaWZ5IHRoZSBMaWJyYXJ5CitzdWJqZWN0IHRvIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwordGhpcyBMaWNlbnNlLgorDAorICAxMS4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5IGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkuCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhbnkKK3BhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBhcHBseSwKK2FuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyIGNpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMTIuIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgTGlicmFyeSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgTGlicmFyeSB1bmRlciB0aGlzIExpY2Vuc2UgbWF5IGFkZAorYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZyB0aG9zZSBjb3VudHJpZXMsCitzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZyBjb3VudHJpZXMgbm90IHRodXMKK2V4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSBsaW1pdGF0aW9uIGFzIGlmCit3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICAxMy4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcKK3ZlcnNpb25zIG9mIHRoZSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuCitTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sCitidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIExpYnJhcnkKK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZAorImFueSBsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZAorY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBMaWJyYXJ5IGRvZXMgbm90IHNwZWNpZnkgYQorbGljZW5zZSB2ZXJzaW9uIG51bWJlciwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisMCisgIDE0LiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgTGlicmFyeSBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBpbmNvbXBhdGlibGUgd2l0aCB0aGVzZSwKK3dyaXRlIHRvIHRoZSBhdXRob3IgdG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzCitjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzIG1ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91cgorZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscyBvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cworb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZCBvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcKK2FuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKKwkJCSAgICBOTyBXQVJSQU5UWQorCisgIDE1LiBCRUNBVVNFIFRIRSBMSUJSQVJZIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTworV0FSUkFOVFkgRk9SIFRIRSBMSUJSQVJZLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4KK0VYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SCitPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIExJQlJBUlkgIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRQorTElCUkFSWSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgTElCUkFSWSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUKK1RIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxNi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTgorV1JJVElORyBXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkKK0FORC9PUiBSRURJU1RSSUJVVEUgVEhFIExJQlJBUlkgQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VCitGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRQorTElCUkFSWSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORworUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEKK0ZBSUxVUkUgT0YgVEhFIExJQlJBUlkgVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBTT0ZUV0FSRSksIEVWRU4gSUYKK1NVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKK0RBTUFHRVMuCisKKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKwwKKyAgICAgQXBwZW5kaXg6IEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBMaWJyYXJpZXMKKworICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBsaWJyYXJ5LCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Citwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgd2UgcmVjb21tZW5kIG1ha2luZyBpdCBmcmVlIHNvZnR3YXJlIHRoYXQKK2V2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZS4gIFlvdSBjYW4gZG8gc28gYnkgcGVybWl0dGluZworcmVkaXN0cmlidXRpb24gdW5kZXIgdGhlc2UgdGVybXMgKG9yLCBhbHRlcm5hdGl2ZWx5LCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCitvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlKS4KKworICBUbyBhcHBseSB0aGVzZSB0ZXJtcywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgbGlicmFyeS4gIEl0IGlzCitzYWZlc3QgdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QgdGhlCisiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIGxpYnJhcnkncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlIC0gU3VpdGUgMzMwLCBCb3N0b24sCisgICAgTUEgMDIxMTEtMTMwNywgVVNBCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgbGlicmFyeSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZQorICBsaWJyYXJ5IGBGcm9iJyAoYSBsaWJyYXJ5IGZvciB0d2Vha2luZyBrbm9icykgd3JpdHRlbiBieSBKYW1lcyBSYW5kb20gSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk5MAorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGF0J3MgYWxsIHRoZXJlIGlzIHRvIGl0IQpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvTEdQTC0yLjEgYi9saWNlbnNlcy9MR1BMLTIuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YWRkMzBhCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvTEdQTC0yLjEKQEAgLTAsMCArMSw1MDQgQEAKKwkJICBHTlUgTEVTU0VSIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIFZlcnNpb24gMi4xLCBGZWJydWFyeSAxOTk5CisKKyBDb3B5cmlnaHQgKEMpIDE5OTEsIDE5OTkgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgICAgIDUxIEZyYW5rbGluIFN0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKK1tUaGlzIGlzIHRoZSBmaXJzdCByZWxlYXNlZCB2ZXJzaW9uIG9mIHRoZSBMZXNzZXIgR1BMLiAgSXQgYWxzbyBjb3VudHMKKyBhcyB0aGUgc3VjY2Vzc29yIG9mIHRoZSBHTlUgTGlicmFyeSBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLCBoZW5jZQorIHRoZSB2ZXJzaW9uIG51bWJlciAyLjEuXQorCisJCQkgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZXMgYXJlIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZQorZnJlZSBzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwgaXRzIHVzZXJzLgorCisgIFRoaXMgbGljZW5zZSwgdGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIHNvbWUKK3NwZWNpYWxseSBkZXNpZ25hdGVkIHNvZnR3YXJlIHBhY2thZ2VzLS10eXBpY2FsbHkgbGlicmFyaWVzLS1vZiB0aGUKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBhbmQgb3RoZXIgYXV0aG9ycyB3aG8gZGVjaWRlIHRvIHVzZSBpdC4gIFlvdQorY2FuIHVzZSBpdCB0b28sIGJ1dCB3ZSBzdWdnZXN0IHlvdSBmaXJzdCB0aGluayBjYXJlZnVsbHkgYWJvdXQgd2hldGhlcgordGhpcyBsaWNlbnNlIG9yIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIHRoZSBiZXR0ZXIKK3N0cmF0ZWd5IHRvIHVzZSBpbiBhbnkgcGFydGljdWxhciBjYXNlLCBiYXNlZCBvbiB0aGUgZXhwbGFuYXRpb25zIGJlbG93LgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tIG9mIHVzZSwKK25vdCBwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQKK3lvdSBoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UKK2ZvciB0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpOyB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQKK2l0IGlmIHlvdSB3YW50IGl0OyB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBhbmQgdXNlIHBpZWNlcyBvZgoraXQgaW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBhcmUgaW5mb3JtZWQgdGhhdCB5b3UgY2FuIGRvCit0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorZGlzdHJpYnV0b3JzIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGVzZQorcmlnaHRzLiAgVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yCit5b3UgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBsaWJyYXJ5IG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSwgd2hldGhlciBncmF0aXMKK29yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHdlIGdhdmUKK3lvdS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZSBzb3VyY2UKK2NvZGUuICBJZiB5b3UgbGluayBvdGhlciBjb2RlIHdpdGggdGhlIGxpYnJhcnksIHlvdSBtdXN0IHByb3ZpZGUKK2NvbXBsZXRlIG9iamVjdCBmaWxlcyB0byB0aGUgcmVjaXBpZW50cywgc28gdGhhdCB0aGV5IGNhbiByZWxpbmsgdGhlbQord2l0aCB0aGUgbGlicmFyeSBhZnRlciBtYWtpbmcgY2hhbmdlcyB0byB0aGUgbGlicmFyeSBhbmQgcmVjb21waWxpbmcKK2l0LiAgQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCBhIHR3by1zdGVwIG1ldGhvZDogKDEpIHdlIGNvcHlyaWdodCB0aGUKK2xpYnJhcnksIGFuZCAoMikgd2Ugb2ZmZXIgeW91IHRoaXMgbGljZW5zZSwgd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsCitwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgbGlicmFyeS4KKworICBUbyBwcm90ZWN0IGVhY2ggZGlzdHJpYnV0b3IsIHdlIHdhbnQgdG8gbWFrZSBpdCB2ZXJ5IGNsZWFyIHRoYXQKK3RoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgZnJlZSBsaWJyYXJ5LiAgQWxzbywgaWYgdGhlIGxpYnJhcnkgaXMKK21vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB0aGUgcmVjaXBpZW50cyBzaG91bGQga25vdwordGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsIHZlcnNpb24sIHNvIHRoYXQgdGhlIG9yaWdpbmFsCithdXRob3IncyByZXB1dGF0aW9uIHdpbGwgbm90IGJlIGFmZmVjdGVkIGJ5IHByb2JsZW1zIHRoYXQgbWlnaHQgYmUKK2ludHJvZHVjZWQgYnkgb3RoZXJzLgorDAorICBGaW5hbGx5LCBzb2Z0d2FyZSBwYXRlbnRzIHBvc2UgYSBjb25zdGFudCB0aHJlYXQgdG8gdGhlIGV4aXN0ZW5jZSBvZgorYW55IGZyZWUgcHJvZ3JhbS4gIFdlIHdpc2ggdG8gbWFrZSBzdXJlIHRoYXQgYSBjb21wYW55IGNhbm5vdAorZWZmZWN0aXZlbHkgcmVzdHJpY3QgdGhlIHVzZXJzIG9mIGEgZnJlZSBwcm9ncmFtIGJ5IG9idGFpbmluZyBhCityZXN0cmljdGl2ZSBsaWNlbnNlIGZyb20gYSBwYXRlbnQgaG9sZGVyLiAgVGhlcmVmb3JlLCB3ZSBpbnNpc3QgdGhhdAorYW55IHBhdGVudCBsaWNlbnNlIG9idGFpbmVkIGZvciBhIHZlcnNpb24gb2YgdGhlIGxpYnJhcnkgbXVzdCBiZQorY29uc2lzdGVudCB3aXRoIHRoZSBmdWxsIGZyZWVkb20gb2YgdXNlIHNwZWNpZmllZCBpbiB0aGlzIGxpY2Vuc2UuCisKKyAgTW9zdCBHTlUgc29mdHdhcmUsIGluY2x1ZGluZyBzb21lIGxpYnJhcmllcywgaXMgY292ZXJlZCBieSB0aGUKK29yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhpcyBsaWNlbnNlLCB0aGUgR05VIExlc3NlcgorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXBwbGllcyB0byBjZXJ0YWluIGRlc2lnbmF0ZWQgbGlicmFyaWVzLCBhbmQKK2lzIHF1aXRlIGRpZmZlcmVudCBmcm9tIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgV2UgdXNlCit0aGlzIGxpY2Vuc2UgZm9yIGNlcnRhaW4gbGlicmFyaWVzIGluIG9yZGVyIHRvIHBlcm1pdCBsaW5raW5nIHRob3NlCitsaWJyYXJpZXMgaW50byBub24tZnJlZSBwcm9ncmFtcy4KKworICBXaGVuIGEgcHJvZ3JhbSBpcyBsaW5rZWQgd2l0aCBhIGxpYnJhcnksIHdoZXRoZXIgc3RhdGljYWxseSBvciB1c2luZworYSBzaGFyZWQgbGlicmFyeSwgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSB0d28gaXMgbGVnYWxseSBzcGVha2luZyBhCitjb21iaW5lZCB3b3JrLCBhIGRlcml2YXRpdmUgb2YgdGhlIG9yaWdpbmFsIGxpYnJhcnkuICBUaGUgb3JkaW5hcnkKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgdGhlcmVmb3JlIHBlcm1pdHMgc3VjaCBsaW5raW5nIG9ubHkgaWYgdGhlCitlbnRpcmUgY29tYmluYXRpb24gZml0cyBpdHMgY3JpdGVyaWEgb2YgZnJlZWRvbS4gIFRoZSBMZXNzZXIgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgcGVybWl0cyBtb3JlIGxheCBjcml0ZXJpYSBmb3IgbGlua2luZyBvdGhlciBjb2RlIHdpdGgKK3RoZSBsaWJyYXJ5LgorCisgIFdlIGNhbGwgdGhpcyBsaWNlbnNlIHRoZSAiTGVzc2VyIiBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGJlY2F1c2UgaXQKK2RvZXMgTGVzcyB0byBwcm90ZWN0IHRoZSB1c2VyJ3MgZnJlZWRvbSB0aGFuIHRoZSBvcmRpbmFyeSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZS4gIEl0IGFsc28gcHJvdmlkZXMgb3RoZXIgZnJlZSBzb2Z0d2FyZSBkZXZlbG9wZXJzIExlc3MKK29mIGFuIGFkdmFudGFnZSBvdmVyIGNvbXBldGluZyBub24tZnJlZSBwcm9ncmFtcy4gIFRoZXNlIGRpc2FkdmFudGFnZXMKK2FyZSB0aGUgcmVhc29uIHdlIHVzZSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbWFueQorbGlicmFyaWVzLiAgSG93ZXZlciwgdGhlIExlc3NlciBsaWNlbnNlIHByb3ZpZGVzIGFkdmFudGFnZXMgaW4gY2VydGFpbgorc3BlY2lhbCBjaXJjdW1zdGFuY2VzLgorCisgIEZvciBleGFtcGxlLCBvbiByYXJlIG9jY2FzaW9ucywgdGhlcmUgbWF5IGJlIGEgc3BlY2lhbCBuZWVkIHRvCitlbmNvdXJhZ2UgdGhlIHdpZGVzdCBwb3NzaWJsZSB1c2Ugb2YgYSBjZXJ0YWluIGxpYnJhcnksIHNvIHRoYXQgaXQgYmVjb21lcworYSBkZS1mYWN0byBzdGFuZGFyZC4gIFRvIGFjaGlldmUgdGhpcywgbm9uLWZyZWUgcHJvZ3JhbXMgbXVzdCBiZQorYWxsb3dlZCB0byB1c2UgdGhlIGxpYnJhcnkuICBBIG1vcmUgZnJlcXVlbnQgY2FzZSBpcyB0aGF0IGEgZnJlZQorbGlicmFyeSBkb2VzIHRoZSBzYW1lIGpvYiBhcyB3aWRlbHkgdXNlZCBub24tZnJlZSBsaWJyYXJpZXMuICBJbiB0aGlzCitjYXNlLCB0aGVyZSBpcyBsaXR0bGUgdG8gZ2FpbiBieSBsaW1pdGluZyB0aGUgZnJlZSBsaWJyYXJ5IHRvIGZyZWUKK3NvZnR3YXJlIG9ubHksIHNvIHdlIHVzZSB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCisKKyAgSW4gb3RoZXIgY2FzZXMsIHBlcm1pc3Npb24gdG8gdXNlIGEgcGFydGljdWxhciBsaWJyYXJ5IGluIG5vbi1mcmVlCitwcm9ncmFtcyBlbmFibGVzIGEgZ3JlYXRlciBudW1iZXIgb2YgcGVvcGxlIHRvIHVzZSBhIGxhcmdlIGJvZHkgb2YKK2ZyZWUgc29mdHdhcmUuICBGb3IgZXhhbXBsZSwgcGVybWlzc2lvbiB0byB1c2UgdGhlIEdOVSBDIExpYnJhcnkgaW4KK25vbi1mcmVlIHByb2dyYW1zIGVuYWJsZXMgbWFueSBtb3JlIHBlb3BsZSB0byB1c2UgdGhlIHdob2xlIEdOVQorb3BlcmF0aW5nIHN5c3RlbSwgYXMgd2VsbCBhcyBpdHMgdmFyaWFudCwgdGhlIEdOVS9MaW51eCBvcGVyYXRpbmcKK3N5c3RlbS4KKworICBBbHRob3VnaCB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgTGVzcyBwcm90ZWN0aXZlIG9mIHRoZQordXNlcnMnIGZyZWVkb20sIGl0IGRvZXMgZW5zdXJlIHRoYXQgdGhlIHVzZXIgb2YgYSBwcm9ncmFtIHRoYXQgaXMKK2xpbmtlZCB3aXRoIHRoZSBMaWJyYXJ5IGhhcyB0aGUgZnJlZWRvbSBhbmQgdGhlIHdoZXJld2l0aGFsIHRvIHJ1bgordGhhdCBwcm9ncmFtIHVzaW5nIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgTGlicmFyeS4KKworICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4gIFBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGRpZmZlcmVuY2UgYmV0d2VlbiBhCisid29yayBiYXNlZCBvbiB0aGUgbGlicmFyeSIgYW5kIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBsaWJyYXJ5Ii4gIFRoZQorZm9ybWVyIGNvbnRhaW5zIGNvZGUgZGVyaXZlZCBmcm9tIHRoZSBsaWJyYXJ5LCB3aGVyZWFzIHRoZSBsYXR0ZXIgbXVzdAorYmUgY29tYmluZWQgd2l0aCB0aGUgbGlicmFyeSBpbiBvcmRlciB0byBydW4uCisMCisJCSAgR05VIExFU1NFUiBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworICAwLiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IGFwcGxpZXMgdG8gYW55IHNvZnR3YXJlIGxpYnJhcnkgb3Igb3RoZXIKK3Byb2dyYW0gd2hpY2ggY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9yCitvdGhlciBhdXRob3JpemVkIHBhcnR5IHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mCit0aGlzIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChhbHNvIGNhbGxlZCAidGhpcyBMaWNlbnNlIikuCitFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyAieW91Ii4KKworICBBICJsaWJyYXJ5IiBtZWFucyBhIGNvbGxlY3Rpb24gb2Ygc29mdHdhcmUgZnVuY3Rpb25zIGFuZC9vciBkYXRhCitwcmVwYXJlZCBzbyBhcyB0byBiZSBjb252ZW5pZW50bHkgbGlua2VkIHdpdGggYXBwbGljYXRpb24gcHJvZ3JhbXMKKyh3aGljaCB1c2Ugc29tZSBvZiB0aG9zZSBmdW5jdGlvbnMgYW5kIGRhdGEpIHRvIGZvcm0gZXhlY3V0YWJsZXMuCisKKyAgVGhlICJMaWJyYXJ5IiwgYmVsb3csIHJlZmVycyB0byBhbnkgc3VjaCBzb2Z0d2FyZSBsaWJyYXJ5IG9yIHdvcmsKK3doaWNoIGhhcyBiZWVuIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZXNlIHRlcm1zLiAgQSAid29yayBiYXNlZCBvbiB0aGUKK0xpYnJhcnkiIG1lYW5zIGVpdGhlciB0aGUgTGlicmFyeSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyCitjb3B5cmlnaHQgbGF3OiB0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIExpYnJhcnkgb3IgYQorcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZAorc3RyYWlnaHRmb3J3YXJkbHkgaW50byBhbm90aGVyIGxhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcworaW5jbHVkZWQgd2l0aG91dCBsaW1pdGF0aW9uIGluIHRoZSB0ZXJtICJtb2RpZmljYXRpb24iLikKKworICAiU291cmNlIGNvZGUiIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYSBsaWJyYXJ5LCBjb21wbGV0ZSBzb3VyY2UgY29kZSBtZWFucworYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55IGFzc29jaWF0ZWQKK2ludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbgorYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgbGlicmFyeS4KKworICBBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyBhIHByb2dyYW0gdXNpbmcgdGhlIExpYnJhcnkgaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCBvdXRwdXQgZnJvbQorc3VjaCBhIHByb2dyYW0gaXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZAorb24gdGhlIExpYnJhcnkgKGluZGVwZW5kZW50IG9mIHRoZSB1c2Ugb2YgdGhlIExpYnJhcnkgaW4gYSB0b29sIGZvcgord3JpdGluZyBpdCkuICBXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIExpYnJhcnkgZG9lcworYW5kIHdoYXQgdGhlIHByb2dyYW0gdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IGRvZXMuCisgIAorICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBMaWJyYXJ5J3MKK2NvbXBsZXRlIHNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0Cit5b3UgY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbgorYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QKK2FsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55Cit3YXJyYW50eTsgYW5kIGRpc3RyaWJ1dGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSBhbG9uZyB3aXRoIHRoZQorTGlicmFyeS4KKworICBZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LAorYW5kIHlvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYQorZmVlLgorDAorICAyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBMaWJyYXJ5IG9yIGFueSBwb3J0aW9uCitvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGNvcHkgYW5kCitkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEKK2Fib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgICBhKSBUaGUgbW9kaWZpZWQgd29yayBtdXN0IGl0c2VsZiBiZSBhIHNvZnR3YXJlIGxpYnJhcnkuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSB0aGUgZmlsZXMgbW9kaWZpZWQgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMKKyAgICBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorCisgICAgYykgWW91IG11c3QgY2F1c2UgdGhlIHdob2xlIG9mIHRoZSB3b3JrIHRvIGJlIGxpY2Vuc2VkIGF0IG5vCisgICAgY2hhcmdlIHRvIGFsbCB0aGlyZCBwYXJ0aWVzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICBkKSBJZiBhIGZhY2lsaXR5IGluIHRoZSBtb2RpZmllZCBMaWJyYXJ5IHJlZmVycyB0byBhIGZ1bmN0aW9uIG9yIGEKKyAgICB0YWJsZSBvZiBkYXRhIHRvIGJlIHN1cHBsaWVkIGJ5IGFuIGFwcGxpY2F0aW9uIHByb2dyYW0gdGhhdCB1c2VzCisgICAgdGhlIGZhY2lsaXR5LCBvdGhlciB0aGFuIGFzIGFuIGFyZ3VtZW50IHBhc3NlZCB3aGVuIHRoZSBmYWNpbGl0eQorICAgIGlzIGludm9rZWQsIHRoZW4geW91IG11c3QgbWFrZSBhIGdvb2QgZmFpdGggZWZmb3J0IHRvIGVuc3VyZSB0aGF0LAorICAgIGluIHRoZSBldmVudCBhbiBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgc3VjaCBmdW5jdGlvbiBvcgorICAgIHRhYmxlLCB0aGUgZmFjaWxpdHkgc3RpbGwgb3BlcmF0ZXMsIGFuZCBwZXJmb3JtcyB3aGF0ZXZlciBwYXJ0IG9mCisgICAgaXRzIHB1cnBvc2UgcmVtYWlucyBtZWFuaW5nZnVsLgorCisgICAgKEZvciBleGFtcGxlLCBhIGZ1bmN0aW9uIGluIGEgbGlicmFyeSB0byBjb21wdXRlIHNxdWFyZSByb290cyBoYXMKKyAgICBhIHB1cnBvc2UgdGhhdCBpcyBlbnRpcmVseSB3ZWxsLWRlZmluZWQgaW5kZXBlbmRlbnQgb2YgdGhlCisgICAgYXBwbGljYXRpb24uICBUaGVyZWZvcmUsIFN1YnNlY3Rpb24gMmQgcmVxdWlyZXMgdGhhdCBhbnkKKyAgICBhcHBsaWNhdGlvbi1zdXBwbGllZCBmdW5jdGlvbiBvciB0YWJsZSB1c2VkIGJ5IHRoaXMgZnVuY3Rpb24gbXVzdAorICAgIGJlIG9wdGlvbmFsOiBpZiB0aGUgYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IGl0LCB0aGUgc3F1YXJlCisgICAgcm9vdCBmdW5jdGlvbiBtdXN0IHN0aWxsIGNvbXB1dGUgc3F1YXJlIHJvb3RzLikKKworVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuICBJZgoraWRlbnRpZmlhYmxlIHNlY3Rpb25zIG9mIHRoYXQgd29yayBhcmUgbm90IGRlcml2ZWQgZnJvbSB0aGUgTGlicmFyeSwKK2FuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbgordGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdCBhcHBseSB0byB0aG9zZQorc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiAgQnV0IHdoZW4geW91CitkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSB3aG9sZSB3aGljaCBpcyBhIHdvcmsgYmFzZWQKK29uIHRoZSBMaWJyYXJ5LCB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3aG9sZSBtdXN0IGJlIG9uIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUKK2VudGlyZSB3aG9sZSwgYW5kIHRodXMgdG8gZWFjaCBhbmQgZXZlcnkgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZQoraXQuCisKK1RodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdAoreW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvCitleGVyY2lzZSB0aGUgcmlnaHQgdG8gY29udHJvbCB0aGUgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgb3IKK2NvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIExpYnJhcnkuCisKK0luIGFkZGl0aW9uLCBtZXJlIGFnZ3JlZ2F0aW9uIG9mIGFub3RoZXIgd29yayBub3QgYmFzZWQgb24gdGhlIExpYnJhcnkKK3dpdGggdGhlIExpYnJhcnkgKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5KSBvbiBhIHZvbHVtZSBvZgorYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlIG90aGVyIHdvcmsgdW5kZXIKK3RoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMy4gWW91IG1heSBvcHQgdG8gYXBwbHkgdGhlIHRlcm1zIG9mIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UgdG8gYSBnaXZlbiBjb3B5IG9mIHRoZSBMaWJyYXJ5LiAgVG8gZG8KK3RoaXMsIHlvdSBtdXN0IGFsdGVyIGFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSwgc28KK3RoYXQgdGhleSByZWZlciB0byB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwKK2luc3RlYWQgb2YgdG8gdGhpcyBMaWNlbnNlLiAgKElmIGEgbmV3ZXIgdmVyc2lvbiB0aGFuIHZlcnNpb24gMiBvZiB0aGUKK29yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGhhcyBhcHBlYXJlZCwgdGhlbiB5b3UgY2FuIHNwZWNpZnkKK3RoYXQgdmVyc2lvbiBpbnN0ZWFkIGlmIHlvdSB3aXNoLikgIERvIG5vdCBtYWtlIGFueSBvdGhlciBjaGFuZ2UgaW4KK3RoZXNlIG5vdGljZXMuCisMCisgIE9uY2UgdGhpcyBjaGFuZ2UgaXMgbWFkZSBpbiBhIGdpdmVuIGNvcHksIGl0IGlzIGlycmV2ZXJzaWJsZSBmb3IKK3RoYXQgY29weSwgc28gdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gYWxsCitzdWJzZXF1ZW50IGNvcGllcyBhbmQgZGVyaXZhdGl2ZSB3b3JrcyBtYWRlIGZyb20gdGhhdCBjb3B5LgorCisgIFRoaXMgb3B0aW9uIGlzIHVzZWZ1bCB3aGVuIHlvdSB3aXNoIHRvIGNvcHkgcGFydCBvZiB0aGUgY29kZSBvZgordGhlIExpYnJhcnkgaW50byBhIHByb2dyYW0gdGhhdCBpcyBub3QgYSBsaWJyYXJ5LgorCisgIDQuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSAob3IgYSBwb3J0aW9uIG9yCitkZXJpdmF0aXZlIG9mIGl0LCB1bmRlciBTZWN0aW9uIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybQordW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWNjb21wYW55CitpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUsIHdoaWNoCittdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEKK21lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZS4KKworICBJZiBkaXN0cmlidXRpb24gb2Ygb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weQorZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUKK3NvdXJjZSBjb2RlIGZyb20gdGhlIHNhbWUgcGxhY2Ugc2F0aXNmaWVzIHRoZSByZXF1aXJlbWVudCB0bworZGlzdHJpYnV0ZSB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKworICA1LiBBIHByb2dyYW0gdGhhdCBjb250YWlucyBubyBkZXJpdmF0aXZlIG9mIGFueSBwb3J0aW9uIG9mIHRoZQorTGlicmFyeSwgYnV0IGlzIGRlc2lnbmVkIHRvIHdvcmsgd2l0aCB0aGUgTGlicmFyeSBieSBiZWluZyBjb21waWxlZCBvcgorbGlua2VkIHdpdGggaXQsIGlzIGNhbGxlZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIuICBTdWNoIGEKK3dvcmssIGluIGlzb2xhdGlvbiwgaXMgbm90IGEgZGVyaXZhdGl2ZSB3b3JrIG9mIHRoZSBMaWJyYXJ5LCBhbmQKK3RoZXJlZm9yZSBmYWxscyBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgSG93ZXZlciwgbGlua2luZyBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeQorY3JlYXRlcyBhbiBleGVjdXRhYmxlIHRoYXQgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5IChiZWNhdXNlIGl0Citjb250YWlucyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSksIHJhdGhlciB0aGFuIGEgIndvcmsgdGhhdCB1c2VzIHRoZQorbGlicmFyeSIuICBUaGUgZXhlY3V0YWJsZSBpcyB0aGVyZWZvcmUgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UuCitTZWN0aW9uIDYgc3RhdGVzIHRlcm1zIGZvciBkaXN0cmlidXRpb24gb2Ygc3VjaCBleGVjdXRhYmxlcy4KKworICBXaGVuIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB1c2VzIG1hdGVyaWFsIGZyb20gYSBoZWFkZXIgZmlsZQordGhhdCBpcyBwYXJ0IG9mIHRoZSBMaWJyYXJ5LCB0aGUgb2JqZWN0IGNvZGUgZm9yIHRoZSB3b3JrIG1heSBiZSBhCitkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnkgZXZlbiB0aG91Z2ggdGhlIHNvdXJjZSBjb2RlIGlzIG5vdC4KK1doZXRoZXIgdGhpcyBpcyB0cnVlIGlzIGVzcGVjaWFsbHkgc2lnbmlmaWNhbnQgaWYgdGhlIHdvcmsgY2FuIGJlCitsaW5rZWQgd2l0aG91dCB0aGUgTGlicmFyeSwgb3IgaWYgdGhlIHdvcmsgaXMgaXRzZWxmIGEgbGlicmFyeS4gIFRoZQordGhyZXNob2xkIGZvciB0aGlzIHRvIGJlIHRydWUgaXMgbm90IHByZWNpc2VseSBkZWZpbmVkIGJ5IGxhdy4KKworICBJZiBzdWNoIGFuIG9iamVjdCBmaWxlIHVzZXMgb25seSBudW1lcmljYWwgcGFyYW1ldGVycywgZGF0YQorc3RydWN0dXJlIGxheW91dHMgYW5kIGFjY2Vzc29ycywgYW5kIHNtYWxsIG1hY3JvcyBhbmQgc21hbGwgaW5saW5lCitmdW5jdGlvbnMgKHRlbiBsaW5lcyBvciBsZXNzIGluIGxlbmd0aCksIHRoZW4gdGhlIHVzZSBvZiB0aGUgb2JqZWN0CitmaWxlIGlzIHVucmVzdHJpY3RlZCwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGlzIGxlZ2FsbHkgYSBkZXJpdmF0aXZlCit3b3JrLiAgKEV4ZWN1dGFibGVzIGNvbnRhaW5pbmcgdGhpcyBvYmplY3QgY29kZSBwbHVzIHBvcnRpb25zIG9mIHRoZQorTGlicmFyeSB3aWxsIHN0aWxsIGZhbGwgdW5kZXIgU2VjdGlvbiA2LikKKworICBPdGhlcndpc2UsIGlmIHRoZSB3b3JrIGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgTGlicmFyeSwgeW91IG1heQorZGlzdHJpYnV0ZSB0aGUgb2JqZWN0IGNvZGUgZm9yIHRoZSB3b3JrIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDYuCitBbnkgZXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGF0IHdvcmsgYWxzbyBmYWxsIHVuZGVyIFNlY3Rpb24gNiwKK3doZXRoZXIgb3Igbm90IHRoZXkgYXJlIGxpbmtlZCBkaXJlY3RseSB3aXRoIHRoZSBMaWJyYXJ5IGl0c2VsZi4KKwwKKyAgNi4gQXMgYW4gZXhjZXB0aW9uIHRvIHRoZSBTZWN0aW9ucyBhYm92ZSwgeW91IG1heSBhbHNvIGNvbWJpbmUgb3IKK2xpbmsgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHdpdGggdGhlIExpYnJhcnkgdG8gcHJvZHVjZSBhCit3b3JrIGNvbnRhaW5pbmcgcG9ydGlvbnMgb2YgdGhlIExpYnJhcnksIGFuZCBkaXN0cmlidXRlIHRoYXQgd29yawordW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQgdGhlIHRlcm1zIHBlcm1pdAorbW9kaWZpY2F0aW9uIG9mIHRoZSB3b3JrIGZvciB0aGUgY3VzdG9tZXIncyBvd24gdXNlIGFuZCByZXZlcnNlCitlbmdpbmVlcmluZyBmb3IgZGVidWdnaW5nIHN1Y2ggbW9kaWZpY2F0aW9ucy4KKworICBZb3UgbXVzdCBnaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCBlYWNoIGNvcHkgb2YgdGhlIHdvcmsgdGhhdCB0aGUKK0xpYnJhcnkgaXMgdXNlZCBpbiBpdCBhbmQgdGhhdCB0aGUgTGlicmFyeSBhbmQgaXRzIHVzZSBhcmUgY292ZXJlZCBieQordGhpcyBMaWNlbnNlLiAgWW91IG11c3Qgc3VwcGx5IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuICBJZiB0aGUgd29yaworZHVyaW5nIGV4ZWN1dGlvbiBkaXNwbGF5cyBjb3B5cmlnaHQgbm90aWNlcywgeW91IG11c3QgaW5jbHVkZSB0aGUKK2NvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBMaWJyYXJ5IGFtb25nIHRoZW0sIGFzIHdlbGwgYXMgYSByZWZlcmVuY2UKK2RpcmVjdGluZyB0aGUgdXNlciB0byB0aGUgY29weSBvZiB0aGlzIExpY2Vuc2UuICBBbHNvLCB5b3UgbXVzdCBkbyBvbmUKK29mIHRoZXNlIHRoaW5nczoKKworICAgIGEpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nCisgICAgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSBmb3IgdGhlIExpYnJhcnkgaW5jbHVkaW5nIHdoYXRldmVyCisgICAgY2hhbmdlcyB3ZXJlIHVzZWQgaW4gdGhlIHdvcmsgKHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIKKyAgICBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlKTsgYW5kLCBpZiB0aGUgd29yayBpcyBhbiBleGVjdXRhYmxlIGxpbmtlZAorICAgIHdpdGggdGhlIExpYnJhcnksIHdpdGggdGhlIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgIndvcmsgdGhhdAorICAgIHVzZXMgdGhlIExpYnJhcnkiLCBhcyBvYmplY3QgY29kZSBhbmQvb3Igc291cmNlIGNvZGUsIHNvIHRoYXQgdGhlCisgICAgdXNlciBjYW4gbW9kaWZ5IHRoZSBMaWJyYXJ5IGFuZCB0aGVuIHJlbGluayB0byBwcm9kdWNlIGEgbW9kaWZpZWQKKyAgICBleGVjdXRhYmxlIGNvbnRhaW5pbmcgdGhlIG1vZGlmaWVkIExpYnJhcnkuICAoSXQgaXMgdW5kZXJzdG9vZAorICAgIHRoYXQgdGhlIHVzZXIgd2hvIGNoYW5nZXMgdGhlIGNvbnRlbnRzIG9mIGRlZmluaXRpb25zIGZpbGVzIGluIHRoZQorICAgIExpYnJhcnkgd2lsbCBub3QgbmVjZXNzYXJpbHkgYmUgYWJsZSB0byByZWNvbXBpbGUgdGhlIGFwcGxpY2F0aW9uCisgICAgdG8gdXNlIHRoZSBtb2RpZmllZCBkZWZpbml0aW9ucy4pCisKKyAgICBiKSBVc2UgYSBzdWl0YWJsZSBzaGFyZWQgbGlicmFyeSBtZWNoYW5pc20gZm9yIGxpbmtpbmcgd2l0aCB0aGUKKyAgICBMaWJyYXJ5LiAgQSBzdWl0YWJsZSBtZWNoYW5pc20gaXMgb25lIHRoYXQgKDEpIHVzZXMgYXQgcnVuIHRpbWUgYQorICAgIGNvcHkgb2YgdGhlIGxpYnJhcnkgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSB1c2VyJ3MgY29tcHV0ZXIgc3lzdGVtLAorICAgIHJhdGhlciB0aGFuIGNvcHlpbmcgbGlicmFyeSBmdW5jdGlvbnMgaW50byB0aGUgZXhlY3V0YWJsZSwgYW5kICgyKQorICAgIHdpbGwgb3BlcmF0ZSBwcm9wZXJseSB3aXRoIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgaWYKKyAgICB0aGUgdXNlciBpbnN0YWxscyBvbmUsIGFzIGxvbmcgYXMgdGhlIG1vZGlmaWVkIHZlcnNpb24gaXMKKyAgICBpbnRlcmZhY2UtY29tcGF0aWJsZSB3aXRoIHRoZSB2ZXJzaW9uIHRoYXQgdGhlIHdvcmsgd2FzIG1hZGUgd2l0aC4KKworICAgIGMpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0CisgICAgbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgdGhlIHNhbWUgdXNlciB0aGUgbWF0ZXJpYWxzCisgICAgc3BlY2lmaWVkIGluIFN1YnNlY3Rpb24gNmEsIGFib3ZlLCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZQorICAgIHRoYW4gdGhlIGNvc3Qgb2YgcGVyZm9ybWluZyB0aGlzIGRpc3RyaWJ1dGlvbi4KKworICAgIGQpIElmIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd29yayBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5CisgICAgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIG9mZmVyIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlIGFib3ZlCisgICAgc3BlY2lmaWVkIG1hdGVyaWFscyBmcm9tIHRoZSBzYW1lIHBsYWNlLgorCisgICAgZSkgVmVyaWZ5IHRoYXQgdGhlIHVzZXIgaGFzIGFscmVhZHkgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZXNlCisgICAgbWF0ZXJpYWxzIG9yIHRoYXQgeW91IGhhdmUgYWxyZWFkeSBzZW50IHRoaXMgdXNlciBhIGNvcHkuCisKKyAgRm9yIGFuIGV4ZWN1dGFibGUsIHRoZSByZXF1aXJlZCBmb3JtIG9mIHRoZSAid29yayB0aGF0IHVzZXMgdGhlCitMaWJyYXJ5IiBtdXN0IGluY2x1ZGUgYW55IGRhdGEgYW5kIHV0aWxpdHkgcHJvZ3JhbXMgbmVlZGVkIGZvcgorcmVwcm9kdWNpbmcgdGhlIGV4ZWN1dGFibGUgZnJvbSBpdC4gIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24sCit0aGUgbWF0ZXJpYWxzIHRvIGJlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUgYW55dGhpbmcgdGhhdCBpcworbm9ybWFsbHkgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2Ugb3IgYmluYXJ5IGZvcm0pIHdpdGggdGhlIG1ham9yCitjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLCBhbmQgc28gb24pIG9mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIG9uCit3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQgaXRzZWxmIGFjY29tcGFuaWVzCit0aGUgZXhlY3V0YWJsZS4KKworICBJdCBtYXkgaGFwcGVuIHRoYXQgdGhpcyByZXF1aXJlbWVudCBjb250cmFkaWN0cyB0aGUgbGljZW5zZQorcmVzdHJpY3Rpb25zIG9mIG90aGVyIHByb3ByaWV0YXJ5IGxpYnJhcmllcyB0aGF0IGRvIG5vdCBub3JtYWxseQorYWNjb21wYW55IHRoZSBvcGVyYXRpbmcgc3lzdGVtLiAgU3VjaCBhIGNvbnRyYWRpY3Rpb24gbWVhbnMgeW91IGNhbm5vdAordXNlIGJvdGggdGhlbSBhbmQgdGhlIExpYnJhcnkgdG9nZXRoZXIgaW4gYW4gZXhlY3V0YWJsZSB0aGF0IHlvdQorZGlzdHJpYnV0ZS4KKwwKKyAgNy4gWW91IG1heSBwbGFjZSBsaWJyYXJ5IGZhY2lsaXRpZXMgdGhhdCBhcmUgYSB3b3JrIGJhc2VkIG9uIHRoZQorTGlicmFyeSBzaWRlLWJ5LXNpZGUgaW4gYSBzaW5nbGUgbGlicmFyeSB0b2dldGhlciB3aXRoIG90aGVyIGxpYnJhcnkKK2ZhY2lsaXRpZXMgbm90IGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLCBhbmQgZGlzdHJpYnV0ZSBzdWNoIGEgY29tYmluZWQKK2xpYnJhcnksIHByb3ZpZGVkIHRoYXQgdGhlIHNlcGFyYXRlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd29yayBiYXNlZCBvbgordGhlIExpYnJhcnkgYW5kIG9mIHRoZSBvdGhlciBsaWJyYXJ5IGZhY2lsaXRpZXMgaXMgb3RoZXJ3aXNlCitwZXJtaXR0ZWQsIGFuZCBwcm92aWRlZCB0aGF0IHlvdSBkbyB0aGVzZSB0d28gdGhpbmdzOgorCisgICAgYSkgQWNjb21wYW55IHRoZSBjb21iaW5lZCBsaWJyYXJ5IHdpdGggYSBjb3B5IG9mIHRoZSBzYW1lIHdvcmsKKyAgICBiYXNlZCBvbiB0aGUgTGlicmFyeSwgdW5jb21iaW5lZCB3aXRoIGFueSBvdGhlciBsaWJyYXJ5CisgICAgZmFjaWxpdGllcy4gIFRoaXMgbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCisgICAgU2VjdGlvbnMgYWJvdmUuCisKKyAgICBiKSBHaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCB0aGUgY29tYmluZWQgbGlicmFyeSBvZiB0aGUgZmFjdAorICAgIHRoYXQgcGFydCBvZiBpdCBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBleHBsYWluaW5nCisgICAgd2hlcmUgdG8gZmluZCB0aGUgYWNjb21wYW55aW5nIHVuY29tYmluZWQgZm9ybSBvZiB0aGUgc2FtZSB3b3JrLgorCisgIDguIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvciBkaXN0cmlidXRlCit0aGUgTGlicmFyeSBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueQorYXR0ZW1wdCBvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBsaW5rIHdpdGgsIG9yCitkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGlzIHZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIKK3JpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuICBIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywKK29yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMKK3Rlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworICA5LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKK3NpZ25lZCBpdC4gIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yCitkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUKK3Byb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4gIFRoZXJlZm9yZSwgYnkKK21vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorTGlicmFyeSksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQKK2FsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcKK3RoZSBMaWJyYXJ5IG9yIHdvcmtzIGJhc2VkIG9uIGl0LgorCisgIDEwLiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5KSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSwgbGluayB3aXRoIG9yIG1vZGlmeSB0aGUgTGlicmFyeQorc3ViamVjdCB0byB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlcgorcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIGVuZm9yY2luZyBjb21wbGlhbmNlIGJ5IHRoaXJkIHBhcnRpZXMgd2l0aAordGhpcyBMaWNlbnNlLgorDAorICAxMS4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5IGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkuCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhbnkKK3BhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBhcHBseSwKK2FuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyIGNpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMTIuIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgTGlicmFyeSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgTGlicmFyeSB1bmRlciB0aGlzIExpY2Vuc2UgbWF5IGFkZAorYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZyB0aG9zZSBjb3VudHJpZXMsCitzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZyBjb3VudHJpZXMgbm90IHRodXMKK2V4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSBsaW1pdGF0aW9uIGFzIGlmCit3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICAxMy4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcKK3ZlcnNpb25zIG9mIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4KK1N1Y2ggbmV3IHZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwKK2J1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBJZiB0aGUgTGlicmFyeQorc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kCisiYW55IGxhdGVyIHZlcnNpb24iLCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kCitjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24gcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgSWYgdGhlIExpYnJhcnkgZG9lcyBub3Qgc3BlY2lmeSBhCitsaWNlbnNlIHZlcnNpb24gbnVtYmVyLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKwwKKyAgMTQuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBMaWJyYXJ5IGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZXNlLAord3JpdGUgdG8gdGhlIGF1dGhvciB0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMKK2NvcHlyaWdodGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMgbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyCitkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzIG9mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzCitvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kIG9mIHByb21vdGluZyB0aGUgc2hhcmluZworYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworCQkJICAgIE5PIFdBUlJBTlRZCisKKyAgMTUuIEJFQ0FVU0UgVEhFIExJQlJBUlkgSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PCitXQVJSQU5UWSBGT1IgVEhFIExJQlJBUlksIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLgorRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IKK09USEVSIFBBUlRJRVMgUFJPVklERSBUSEUgTElCUkFSWSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZCitLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFCitMSUJSQVJZIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRSBMSUJSQVJZIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRQorVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDE2LiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOCitXUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWQorQU5EL09SIFJFRElTVFJJQlVURSBUSEUgTElCUkFSWSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UKK0ZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFCitMSUJSQVJZIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HCitSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkgWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQQorRkFJTFVSRSBPRiBUSEUgTElCUkFSWSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFNPRlRXQVJFKSwgRVZFTiBJRgorU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorREFNQUdFUy4KKworCQkgICAgIEVORCBPRiBURVJNUyBBTkQgQ09ORElUSU9OUworDAorICAgICAgICAgICBIb3cgdG8gQXBwbHkgVGhlc2UgVGVybXMgdG8gWW91ciBOZXcgTGlicmFyaWVzCisKKyAgSWYgeW91IGRldmVsb3AgYSBuZXcgbGlicmFyeSwgYW5kIHlvdSB3YW50IGl0IHRvIGJlIG9mIHRoZSBncmVhdGVzdAorcG9zc2libGUgdXNlIHRvIHRoZSBwdWJsaWMsIHdlIHJlY29tbWVuZCBtYWtpbmcgaXQgZnJlZSBzb2Z0d2FyZSB0aGF0CitldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UuICBZb3UgY2FuIGRvIHNvIGJ5IHBlcm1pdHRpbmcKK3JlZGlzdHJpYnV0aW9uIHVuZGVyIHRoZXNlIHRlcm1zIChvciwgYWx0ZXJuYXRpdmVseSwgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSkuCisKKyAgVG8gYXBwbHkgdGhlc2UgdGVybXMsIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIGxpYnJhcnkuICBJdCBpcworc2FmZXN0IHRvIGF0dGFjaCB0aGVtIHRvIHRoZSBzdGFydCBvZiBlYWNoIHNvdXJjZSBmaWxlIHRvIG1vc3QgZWZmZWN0aXZlbHkKK2NvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0IHRoZQorImNvcHlyaWdodCIgbGluZSBhbmQgYSBwb2ludGVyIHRvIHdoZXJlIHRoZSBmdWxsIG5vdGljZSBpcyBmb3VuZC4KKworICAgIDxvbmUgbGluZSB0byBnaXZlIHRoZSBsaWJyYXJ5J3MgbmFtZSBhbmQgYSBicmllZiBpZGVhIG9mIHdoYXQgaXQgZG9lcy4+CisgICAgQ29weXJpZ2h0IChDKSA8eWVhcj4gIDxuYW1lIG9mIGF1dGhvcj4KKworICAgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3QsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCitzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBsaWJyYXJ5LCBpZgorbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCisgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlCisgIGxpYnJhcnkgYEZyb2InIChhIGxpYnJhcnkgZm9yIHR3ZWFraW5nIGtub2JzKSB3cml0dGVuIGJ5IEphbWVzIFJhbmRvbSBIYWNrZXIuCisKKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTkwCisgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKK1RoYXQncyBhbGwgdGhlcmUgaXMgdG8gaXQhCisKKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvTEdQTC0yLjErIGIvbGljZW5zZXMvTEdQTC0yLjErCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwMDVkNTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9MR1BMLTIuMSsKQEAgLTAsMCArMSwyIEBACitHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIuMSBvciBhbnkgbGF0ZXIgdmVyc2lvbi4KK1NlZSBMR1BMLTIuMSBvciBMR1BMLTMgZm9yIHRoZSBmdWxsIHRleHQgb2YgdGhlc2UgbGljZW5zZXMuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9MR1BMLTIuMS13aXRoLWxpbmtpbmctZXhjZXB0aW9uIGIvbGljZW5zZXMvTEdQTC0yLjEtd2l0aC1saW5raW5nLWV4Y2VwdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmFhZGYwCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvTEdQTC0yLjEtd2l0aC1saW5raW5nLWV4Y2VwdGlvbgpAQCAtMCwwICsxLDUxNCBAQAorQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIGNvcHlyaWdodCBob2xkZXJzIG9mIHRoaXMgbGlicmFyeSBnaXZlIHlvdQorcGVybWlzc2lvbiB0byBsaW5rIHRoaXMgbGlicmFyeSB3aXRoIGluZGVwZW5kZW50IG1vZHVsZXMgdG8gcHJvZHVjZSBhbgorZXhlY3V0YWJsZSwgcmVnYXJkbGVzcyBvZiB0aGUgbGljZW5zZSB0ZXJtcyBvZiB0aGVzZSBpbmRlcGVuZGVudCBtb2R1bGVzLAorYW5kIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlIHVuZGVyIHRlcm1zIG9mIHlvdXIKK2Nob2ljZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0LCBmb3IgZWFjaCBsaW5rZWQgaW5kZXBlbmRlbnQgbW9kdWxlLAordGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBsaWNlbnNlIG9mIHRoYXQgbW9kdWxlLiAgQW4gaW5kZXBlbmRlbnQKK21vZHVsZSBpcyBhIG1vZHVsZSB3aGljaCBpcyBub3QgZGVyaXZlZCBmcm9tIG9yIGJhc2VkIG9uIHRoaXMgbGlicmFyeS4KK0lmIHlvdSBtb2RpZnkgdGhpcyBsaWJyYXJ5LCB5b3UgbWF5IGV4dGVuZCB0aGlzIGV4Y2VwdGlvbiB0byB5b3VyIHZlcnNpb24KK29mIHRoZSBsaWJyYXJ5LCBidXQgeW91IGFyZSBub3Qgb2JsaWdhdGVkIHRvIGRvIHNvLiAgSWYgeW91IGRvIG5vdCB3aXNoCit0byBkbyBzbywgZGVsZXRlIHRoaXMgZXhjZXB0aW9uIHN0YXRlbWVudCBmcm9tIHlvdXIgdmVyc2lvbi4KKworCisgICAgICAgICAgICAgICAgICBHTlUgTEVTU0VSIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLjEsIEZlYnJ1YXJ5IDE5OTkKKworIENvcHlyaWdodCAoQykgMTk5MSwgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworW1RoaXMgaXMgdGhlIGZpcnN0IHJlbGVhc2VkIHZlcnNpb24gb2YgdGhlIExlc3NlciBHUEwuICBJdCBhbHNvIGNvdW50cworIGFzIHRoZSBzdWNjZXNzb3Igb2YgdGhlIEdOVSBMaWJyYXJ5IFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsIGhlbmNlCisgdGhlIHZlcnNpb24gbnVtYmVyIDIuMS5dCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcmVhbWJsZQorCisgIFRoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIKK2ZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBpdC4gIEJ5IGNvbnRyYXN0LCB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlcyBhcmUgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlCitmcmVlIHNvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuCisKKyAgVGhpcyBsaWNlbnNlLCB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFwcGxpZXMgdG8gc29tZQorc3BlY2lhbGx5IGRlc2lnbmF0ZWQgc29mdHdhcmUgcGFja2FnZXMtLXR5cGljYWxseSBsaWJyYXJpZXMtLW9mIHRoZQorRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGFuZCBvdGhlciBhdXRob3JzIHdobyBkZWNpZGUgdG8gdXNlIGl0LiAgWW91CitjYW4gdXNlIGl0IHRvbywgYnV0IHdlIHN1Z2dlc3QgeW91IGZpcnN0IHRoaW5rIGNhcmVmdWxseSBhYm91dCB3aGV0aGVyCit0aGlzIGxpY2Vuc2Ugb3IgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgdGhlIGJldHRlcgorc3RyYXRlZ3kgdG8gdXNlIGluIGFueSBwYXJ0aWN1bGFyIGNhc2UsIGJhc2VkIG9uIHRoZSBleHBsYW5hdGlvbnMgYmVsb3cuCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20gb2YgdXNlLAorbm90IHByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdAoreW91IGhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZQorZm9yIHRoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCk7IHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldAoraXQgaWYgeW91IHdhbnQgaXQ7IHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIGFuZCB1c2UgcGllY2VzIG9mCitpdCBpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGFyZSBpbmZvcm1lZCB0aGF0IHlvdSBjYW4gZG8KK3RoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCitkaXN0cmlidXRvcnMgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZXNlCityaWdodHMuICBUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IKK3lvdSBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnkgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBsaWJyYXJ5LCB3aGV0aGVyIGdyYXRpcworb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQgd2UgZ2F2ZQoreW91LiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlIHNvdXJjZQorY29kZS4gIElmIHlvdSBsaW5rIG90aGVyIGNvZGUgd2l0aCB0aGUgbGlicmFyeSwgeW91IG11c3QgcHJvdmlkZQorY29tcGxldGUgb2JqZWN0IGZpbGVzIHRvIHRoZSByZWNpcGllbnRzLCBzbyB0aGF0IHRoZXkgY2FuIHJlbGluayB0aGVtCit3aXRoIHRoZSBsaWJyYXJ5IGFmdGVyIG1ha2luZyBjaGFuZ2VzIHRvIHRoZSBsaWJyYXJ5IGFuZCByZWNvbXBpbGluZworaXQuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpciByaWdodHMuCisKKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIGEgdHdvLXN0ZXAgbWV0aG9kOiAoMSkgd2UgY29weXJpZ2h0IHRoZQorbGlicmFyeSwgYW5kICgyKSB3ZSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlLCB3aGljaCBnaXZlcyB5b3UgbGVnYWwKK3Blcm1pc3Npb24gdG8gY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBsaWJyYXJ5LgorCisgIFRvIHByb3RlY3QgZWFjaCBkaXN0cmlidXRvciwgd2Ugd2FudCB0byBtYWtlIGl0IHZlcnkgY2xlYXIgdGhhdAordGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoZSBmcmVlIGxpYnJhcnkuICBBbHNvLCBpZiB0aGUgbGlicmFyeSBpcworbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHRoZSByZWNpcGllbnRzIHNob3VsZCBrbm93Cit0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwgdmVyc2lvbiwgc28gdGhhdCB0aGUgb3JpZ2luYWwKK2F1dGhvcidzIHJlcHV0YXRpb24gd2lsbCBub3QgYmUgYWZmZWN0ZWQgYnkgcHJvYmxlbXMgdGhhdCBtaWdodCBiZQoraW50cm9kdWNlZCBieSBvdGhlcnMuCisMCisgIEZpbmFsbHksIHNvZnR3YXJlIHBhdGVudHMgcG9zZSBhIGNvbnN0YW50IHRocmVhdCB0byB0aGUgZXhpc3RlbmNlIG9mCithbnkgZnJlZSBwcm9ncmFtLiAgV2Ugd2lzaCB0byBtYWtlIHN1cmUgdGhhdCBhIGNvbXBhbnkgY2Fubm90CitlZmZlY3RpdmVseSByZXN0cmljdCB0aGUgdXNlcnMgb2YgYSBmcmVlIHByb2dyYW0gYnkgb2J0YWluaW5nIGEKK3Jlc3RyaWN0aXZlIGxpY2Vuc2UgZnJvbSBhIHBhdGVudCBob2xkZXIuICBUaGVyZWZvcmUsIHdlIGluc2lzdCB0aGF0CithbnkgcGF0ZW50IGxpY2Vuc2Ugb2J0YWluZWQgZm9yIGEgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSBtdXN0IGJlCitjb25zaXN0ZW50IHdpdGggdGhlIGZ1bGwgZnJlZWRvbSBvZiB1c2Ugc3BlY2lmaWVkIGluIHRoaXMgbGljZW5zZS4KKworICBNb3N0IEdOVSBzb2Z0d2FyZSwgaW5jbHVkaW5nIHNvbWUgbGlicmFyaWVzLCBpcyBjb3ZlcmVkIGJ5IHRoZQorb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGxpY2Vuc2UsIHRoZSBHTlUgTGVzc2VyCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhcHBsaWVzIHRvIGNlcnRhaW4gZGVzaWduYXRlZCBsaWJyYXJpZXMsIGFuZAoraXMgcXVpdGUgZGlmZmVyZW50IGZyb20gdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBXZSB1c2UKK3RoaXMgbGljZW5zZSBmb3IgY2VydGFpbiBsaWJyYXJpZXMgaW4gb3JkZXIgdG8gcGVybWl0IGxpbmtpbmcgdGhvc2UKK2xpYnJhcmllcyBpbnRvIG5vbi1mcmVlIHByb2dyYW1zLgorCisgIFdoZW4gYSBwcm9ncmFtIGlzIGxpbmtlZCB3aXRoIGEgbGlicmFyeSwgd2hldGhlciBzdGF0aWNhbGx5IG9yIHVzaW5nCithIHNoYXJlZCBsaWJyYXJ5LCB0aGUgY29tYmluYXRpb24gb2YgdGhlIHR3byBpcyBsZWdhbGx5IHNwZWFraW5nIGEKK2NvbWJpbmVkIHdvcmssIGEgZGVyaXZhdGl2ZSBvZiB0aGUgb3JpZ2luYWwgbGlicmFyeS4gIFRoZSBvcmRpbmFyeQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB0aGVyZWZvcmUgcGVybWl0cyBzdWNoIGxpbmtpbmcgb25seSBpZiB0aGUKK2VudGlyZSBjb21iaW5hdGlvbiBmaXRzIGl0cyBjcml0ZXJpYSBvZiBmcmVlZG9tLiAgVGhlIExlc3NlciBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBwZXJtaXRzIG1vcmUgbGF4IGNyaXRlcmlhIGZvciBsaW5raW5nIG90aGVyIGNvZGUgd2l0aAordGhlIGxpYnJhcnkuCisKKyAgV2UgY2FsbCB0aGlzIGxpY2Vuc2UgdGhlICJMZXNzZXIiIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYmVjYXVzZSBpdAorZG9lcyBMZXNzIHRvIHByb3RlY3QgdGhlIHVzZXIncyBmcmVlZG9tIHRoYW4gdGhlIG9yZGluYXJ5IEdlbmVyYWwKK1B1YmxpYyBMaWNlbnNlLiAgSXQgYWxzbyBwcm92aWRlcyBvdGhlciBmcmVlIHNvZnR3YXJlIGRldmVsb3BlcnMgTGVzcworb2YgYW4gYWR2YW50YWdlIG92ZXIgY29tcGV0aW5nIG5vbi1mcmVlIHByb2dyYW1zLiAgVGhlc2UgZGlzYWR2YW50YWdlcworYXJlIHRoZSByZWFzb24gd2UgdXNlIHRoZSBvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtYW55CitsaWJyYXJpZXMuICBIb3dldmVyLCB0aGUgTGVzc2VyIGxpY2Vuc2UgcHJvdmlkZXMgYWR2YW50YWdlcyBpbiBjZXJ0YWluCitzcGVjaWFsIGNpcmN1bXN0YW5jZXMuCisKKyAgRm9yIGV4YW1wbGUsIG9uIHJhcmUgb2NjYXNpb25zLCB0aGVyZSBtYXkgYmUgYSBzcGVjaWFsIG5lZWQgdG8KK2VuY291cmFnZSB0aGUgd2lkZXN0IHBvc3NpYmxlIHVzZSBvZiBhIGNlcnRhaW4gbGlicmFyeSwgc28gdGhhdCBpdCBiZWNvbWVzCithIGRlLWZhY3RvIHN0YW5kYXJkLiAgVG8gYWNoaWV2ZSB0aGlzLCBub24tZnJlZSBwcm9ncmFtcyBtdXN0IGJlCithbGxvd2VkIHRvIHVzZSB0aGUgbGlicmFyeS4gIEEgbW9yZSBmcmVxdWVudCBjYXNlIGlzIHRoYXQgYSBmcmVlCitsaWJyYXJ5IGRvZXMgdGhlIHNhbWUgam9iIGFzIHdpZGVseSB1c2VkIG5vbi1mcmVlIGxpYnJhcmllcy4gIEluIHRoaXMKK2Nhc2UsIHRoZXJlIGlzIGxpdHRsZSB0byBnYWluIGJ5IGxpbWl0aW5nIHRoZSBmcmVlIGxpYnJhcnkgdG8gZnJlZQorc29mdHdhcmUgb25seSwgc28gd2UgdXNlIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworICBJbiBvdGhlciBjYXNlcywgcGVybWlzc2lvbiB0byB1c2UgYSBwYXJ0aWN1bGFyIGxpYnJhcnkgaW4gbm9uLWZyZWUKK3Byb2dyYW1zIGVuYWJsZXMgYSBncmVhdGVyIG51bWJlciBvZiBwZW9wbGUgdG8gdXNlIGEgbGFyZ2UgYm9keSBvZgorZnJlZSBzb2Z0d2FyZS4gIEZvciBleGFtcGxlLCBwZXJtaXNzaW9uIHRvIHVzZSB0aGUgR05VIEMgTGlicmFyeSBpbgorbm9uLWZyZWUgcHJvZ3JhbXMgZW5hYmxlcyBtYW55IG1vcmUgcGVvcGxlIHRvIHVzZSB0aGUgd2hvbGUgR05VCitvcGVyYXRpbmcgc3lzdGVtLCBhcyB3ZWxsIGFzIGl0cyB2YXJpYW50LCB0aGUgR05VL0xpbnV4IG9wZXJhdGluZworc3lzdGVtLgorCisgIEFsdGhvdWdoIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyBMZXNzIHByb3RlY3RpdmUgb2YgdGhlCit1c2VycycgZnJlZWRvbSwgaXQgZG9lcyBlbnN1cmUgdGhhdCB0aGUgdXNlciBvZiBhIHByb2dyYW0gdGhhdCBpcworbGlua2VkIHdpdGggdGhlIExpYnJhcnkgaGFzIHRoZSBmcmVlZG9tIGFuZCB0aGUgd2hlcmV3aXRoYWwgdG8gcnVuCit0aGF0IHByb2dyYW0gdXNpbmcgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBMaWJyYXJ5LgorCisgIFRoZSBwcmVjaXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kCittb2RpZmljYXRpb24gZm9sbG93LiAgUGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGEKKyJ3b3JrIGJhc2VkIG9uIHRoZSBsaWJyYXJ5IiBhbmQgYSAid29yayB0aGF0IHVzZXMgdGhlIGxpYnJhcnkiLiAgVGhlCitmb3JtZXIgY29udGFpbnMgY29kZSBkZXJpdmVkIGZyb20gdGhlIGxpYnJhcnksIHdoZXJlYXMgdGhlIGxhdHRlciBtdXN0CitiZSBjb21iaW5lZCB3aXRoIHRoZSBsaWJyYXJ5IGluIG9yZGVyIHRvIHJ1bi4KKwwKKyAgICAgICAgICAgICAgICAgIEdOVSBMRVNTRVIgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBhcHBsaWVzIHRvIGFueSBzb2Z0d2FyZSBsaWJyYXJ5IG9yIG90aGVyCitwcm9ncmFtIHdoaWNoIGNvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBvcgorb3RoZXIgYXV0aG9yaXplZCBwYXJ0eSBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZgordGhpcyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoYWxzbyBjYWxsZWQgInRoaXMgTGljZW5zZSIpLgorRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKKyAgQSAibGlicmFyeSIgbWVhbnMgYSBjb2xsZWN0aW9uIG9mIHNvZnR3YXJlIGZ1bmN0aW9ucyBhbmQvb3IgZGF0YQorcHJlcGFyZWQgc28gYXMgdG8gYmUgY29udmVuaWVudGx5IGxpbmtlZCB3aXRoIGFwcGxpY2F0aW9uIHByb2dyYW1zCisod2hpY2ggdXNlIHNvbWUgb2YgdGhvc2UgZnVuY3Rpb25zIGFuZCBkYXRhKSB0byBmb3JtIGV4ZWN1dGFibGVzLgorCisgIFRoZSAiTGlicmFyeSIsIGJlbG93LCByZWZlcnMgdG8gYW55IHN1Y2ggc29mdHdhcmUgbGlicmFyeSBvciB3b3JrCit3aGljaCBoYXMgYmVlbiBkaXN0cmlidXRlZCB1bmRlciB0aGVzZSB0ZXJtcy4gIEEgIndvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5IiBtZWFucyBlaXRoZXIgdGhlIExpYnJhcnkgb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlcgorY29weXJpZ2h0IGxhdzogdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBMaWJyYXJ5IG9yIGEKK3BvcnRpb24gb2YgaXQsIGVpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQKK3N0cmFpZ2h0Zm9yd2FyZGx5IGludG8gYW5vdGhlciBsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMKK2luY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbiB0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pCisKKyAgIlNvdXJjZSBjb2RlIiBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGEgbGlicmFyeSwgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMKK2FsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkCitpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24KK2FuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGxpYnJhcnkuCisKKyAgQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKK3J1bm5pbmcgYSBwcm9ncmFtIHVzaW5nIHRoZSBMaWJyYXJ5IGlzIG5vdCByZXN0cmljdGVkLCBhbmQgb3V0cHV0IGZyb20KK3N1Y2ggYSBwcm9ncmFtIGlzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQKK29uIHRoZSBMaWJyYXJ5IChpbmRlcGVuZGVudCBvZiB0aGUgdXNlIG9mIHRoZSBMaWJyYXJ5IGluIGEgdG9vbCBmb3IKK3dyaXRpbmcgaXQpLiAgV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBMaWJyYXJ5IGRvZXMKK2FuZCB3aGF0IHRoZSBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgTGlicmFyeSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIExpYnJhcnkncworY29tcGxldGUgc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQKK3lvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuCithcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdAorYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkKK3dhcnJhbnR5OyBhbmQgZGlzdHJpYnV0ZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlCitMaWJyYXJ5LgorCisgIFlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksCithbmQgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhCitmZWUuCisMCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIExpYnJhcnkgb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFRoZSBtb2RpZmllZCB3b3JrIG11c3QgaXRzZWxmIGJlIGEgc29mdHdhcmUgbGlicmFyeS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIHRoZSBmaWxlcyBtb2RpZmllZCB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBjKSBZb3UgbXVzdCBjYXVzZSB0aGUgd2hvbGUgb2YgdGhlIHdvcmsgdG8gYmUgbGljZW5zZWQgYXQgbm8KKyAgICBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGQpIElmIGEgZmFjaWxpdHkgaW4gdGhlIG1vZGlmaWVkIExpYnJhcnkgcmVmZXJzIHRvIGEgZnVuY3Rpb24gb3IgYQorICAgIHRhYmxlIG9mIGRhdGEgdG8gYmUgc3VwcGxpZWQgYnkgYW4gYXBwbGljYXRpb24gcHJvZ3JhbSB0aGF0IHVzZXMKKyAgICB0aGUgZmFjaWxpdHksIG90aGVyIHRoYW4gYXMgYW4gYXJndW1lbnQgcGFzc2VkIHdoZW4gdGhlIGZhY2lsaXR5CisgICAgaXMgaW52b2tlZCwgdGhlbiB5b3UgbXVzdCBtYWtlIGEgZ29vZCBmYWl0aCBlZmZvcnQgdG8gZW5zdXJlIHRoYXQsCisgICAgaW4gdGhlIGV2ZW50IGFuIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBzdWNoIGZ1bmN0aW9uIG9yCisgICAgdGFibGUsIHRoZSBmYWNpbGl0eSBzdGlsbCBvcGVyYXRlcywgYW5kIHBlcmZvcm1zIHdoYXRldmVyIHBhcnQgb2YKKyAgICBpdHMgcHVycG9zZSByZW1haW5zIG1lYW5pbmdmdWwuCisKKyAgICAoRm9yIGV4YW1wbGUsIGEgZnVuY3Rpb24gaW4gYSBsaWJyYXJ5IHRvIGNvbXB1dGUgc3F1YXJlIHJvb3RzIGhhcworICAgIGEgcHVycG9zZSB0aGF0IGlzIGVudGlyZWx5IHdlbGwtZGVmaW5lZCBpbmRlcGVuZGVudCBvZiB0aGUKKyAgICBhcHBsaWNhdGlvbi4gIFRoZXJlZm9yZSwgU3Vic2VjdGlvbiAyZCByZXF1aXJlcyB0aGF0IGFueQorICAgIGFwcGxpY2F0aW9uLXN1cHBsaWVkIGZ1bmN0aW9uIG9yIHRhYmxlIHVzZWQgYnkgdGhpcyBmdW5jdGlvbiBtdXN0CisgICAgYmUgb3B0aW9uYWw6IGlmIHRoZSBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgaXQsIHRoZSBzcXVhcmUKKyAgICByb290IGZ1bmN0aW9uIG11c3Qgc3RpbGwgY29tcHV0ZSBzcXVhcmUgcm9vdHMuKQorCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBMaWJyYXJ5LAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIExpYnJhcnksIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlCitpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Cit5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgTGlicmFyeS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgTGlicmFyeQord2l0aCB0aGUgTGlicmFyeSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkpIG9uIGEgdm9sdW1lIG9mCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICAzLiBZb3UgbWF5IG9wdCB0byBhcHBseSB0aGUgdGVybXMgb2YgdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZSB0byBhIGdpdmVuIGNvcHkgb2YgdGhlIExpYnJhcnkuICBUbyBkbwordGhpcywgeW91IG11c3QgYWx0ZXIgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlLCBzbwordGhhdCB0aGV5IHJlZmVyIHRvIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLAoraW5zdGVhZCBvZiB0byB0aGlzIExpY2Vuc2UuICAoSWYgYSBuZXdlciB2ZXJzaW9uIHRoYW4gdmVyc2lvbiAyIG9mIHRoZQorb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaGFzIGFwcGVhcmVkLCB0aGVuIHlvdSBjYW4gc3BlY2lmeQordGhhdCB2ZXJzaW9uIGluc3RlYWQgaWYgeW91IHdpc2guKSAgRG8gbm90IG1ha2UgYW55IG90aGVyIGNoYW5nZSBpbgordGhlc2Ugbm90aWNlcy4KKwwKKyAgT25jZSB0aGlzIGNoYW5nZSBpcyBtYWRlIGluIGEgZ2l2ZW4gY29weSwgaXQgaXMgaXJyZXZlcnNpYmxlIGZvcgordGhhdCBjb3B5LCBzbyB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBhbGwKK3N1YnNlcXVlbnQgY29waWVzIGFuZCBkZXJpdmF0aXZlIHdvcmtzIG1hZGUgZnJvbSB0aGF0IGNvcHkuCisKKyAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIHdoZW4geW91IHdpc2ggdG8gY29weSBwYXJ0IG9mIHRoZSBjb2RlIG9mCit0aGUgTGlicmFyeSBpbnRvIGEgcHJvZ3JhbSB0aGF0IGlzIG5vdCBhIGxpYnJhcnkuCisKKyAgNC4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhIHBvcnRpb24gb3IKK2Rlcml2YXRpdmUgb2YgaXQsIHVuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtCit1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhY2NvbXBhbnkKK2l0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2gKK211c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYQorbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgorCisgIElmIGRpc3RyaWJ1dGlvbiBvZiBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5Citmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZQorc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50IHRvCitkaXN0cmlidXRlIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCisgIDUuIEEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIG5vIGRlcml2YXRpdmUgb2YgYW55IHBvcnRpb24gb2YgdGhlCitMaWJyYXJ5LCBidXQgaXMgZGVzaWduZWQgdG8gd29yayB3aXRoIHRoZSBMaWJyYXJ5IGJ5IGJlaW5nIGNvbXBpbGVkIG9yCitsaW5rZWQgd2l0aCBpdCwgaXMgY2FsbGVkIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5Ii4gIFN1Y2ggYQord29yaywgaW4gaXNvbGF0aW9uLCBpcyBub3QgYSBkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnksIGFuZAordGhlcmVmb3JlIGZhbGxzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICBIb3dldmVyLCBsaW5raW5nIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB3aXRoIHRoZSBMaWJyYXJ5CitjcmVhdGVzIGFuIGV4ZWN1dGFibGUgdGhhdCBpcyBhIGRlcml2YXRpdmUgb2YgdGhlIExpYnJhcnkgKGJlY2F1c2UgaXQKK2NvbnRhaW5zIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5KSwgcmF0aGVyIHRoYW4gYSAid29yayB0aGF0IHVzZXMgdGhlCitsaWJyYXJ5Ii4gIFRoZSBleGVjdXRhYmxlIGlzIHRoZXJlZm9yZSBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4KK1NlY3Rpb24gNiBzdGF0ZXMgdGVybXMgZm9yIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGV4ZWN1dGFibGVzLgorCisgIFdoZW4gYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHVzZXMgbWF0ZXJpYWwgZnJvbSBhIGhlYWRlciBmaWxlCit0aGF0IGlzIHBhcnQgb2YgdGhlIExpYnJhcnksIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgbWF5IGJlIGEKK2Rlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSBldmVuIHRob3VnaCB0aGUgc291cmNlIGNvZGUgaXMgbm90LgorV2hldGhlciB0aGlzIGlzIHRydWUgaXMgZXNwZWNpYWxseSBzaWduaWZpY2FudCBpZiB0aGUgd29yayBjYW4gYmUKK2xpbmtlZCB3aXRob3V0IHRoZSBMaWJyYXJ5LCBvciBpZiB0aGUgd29yayBpcyBpdHNlbGYgYSBsaWJyYXJ5LiAgVGhlCit0aHJlc2hvbGQgZm9yIHRoaXMgdG8gYmUgdHJ1ZSBpcyBub3QgcHJlY2lzZWx5IGRlZmluZWQgYnkgbGF3LgorCisgIElmIHN1Y2ggYW4gb2JqZWN0IGZpbGUgdXNlcyBvbmx5IG51bWVyaWNhbCBwYXJhbWV0ZXJzLCBkYXRhCitzdHJ1Y3R1cmUgbGF5b3V0cyBhbmQgYWNjZXNzb3JzLCBhbmQgc21hbGwgbWFjcm9zIGFuZCBzbWFsbCBpbmxpbmUKK2Z1bmN0aW9ucyAodGVuIGxpbmVzIG9yIGxlc3MgaW4gbGVuZ3RoKSwgdGhlbiB0aGUgdXNlIG9mIHRoZSBvYmplY3QKK2ZpbGUgaXMgdW5yZXN0cmljdGVkLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaXMgbGVnYWxseSBhIGRlcml2YXRpdmUKK3dvcmsuICAoRXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGlzIG9iamVjdCBjb2RlIHBsdXMgcG9ydGlvbnMgb2YgdGhlCitMaWJyYXJ5IHdpbGwgc3RpbGwgZmFsbCB1bmRlciBTZWN0aW9uIDYuKQorCisgIE90aGVyd2lzZSwgaWYgdGhlIHdvcmsgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5LCB5b3UgbWF5CitkaXN0cmlidXRlIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gNi4KK0FueSBleGVjdXRhYmxlcyBjb250YWluaW5nIHRoYXQgd29yayBhbHNvIGZhbGwgdW5kZXIgU2VjdGlvbiA2LAord2hldGhlciBvciBub3QgdGhleSBhcmUgbGlua2VkIGRpcmVjdGx5IHdpdGggdGhlIExpYnJhcnkgaXRzZWxmLgorDAorICA2LiBBcyBhbiBleGNlcHRpb24gdG8gdGhlIFNlY3Rpb25zIGFib3ZlLCB5b3UgbWF5IGFsc28gY29tYmluZSBvcgorbGluayBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeSB0byBwcm9kdWNlIGEKK3dvcmsgY29udGFpbmluZyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSwgYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCit1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCB0aGUgdGVybXMgcGVybWl0Cittb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgZm9yIHRoZSBjdXN0b21lcidzIG93biB1c2UgYW5kIHJldmVyc2UKK2VuZ2luZWVyaW5nIGZvciBkZWJ1Z2dpbmcgc3VjaCBtb2RpZmljYXRpb25zLgorCisgIFlvdSBtdXN0IGdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgd29yayB0aGF0IHRoZQorTGlicmFyeSBpcyB1c2VkIGluIGl0IGFuZCB0aGF0IHRoZSBMaWJyYXJ5IGFuZCBpdHMgdXNlIGFyZSBjb3ZlcmVkIGJ5Cit0aGlzIExpY2Vuc2UuICBZb3UgbXVzdCBzdXBwbHkgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gIElmIHRoZSB3b3JrCitkdXJpbmcgZXhlY3V0aW9uIGRpc3BsYXlzIGNvcHlyaWdodCBub3RpY2VzLCB5b3UgbXVzdCBpbmNsdWRlIHRoZQorY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIExpYnJhcnkgYW1vbmcgdGhlbSwgYXMgd2VsbCBhcyBhIHJlZmVyZW5jZQorZGlyZWN0aW5nIHRoZSB1c2VyIHRvIHRoZSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gIEFsc28sIHlvdSBtdXN0IGRvIG9uZQorb2YgdGhlc2UgdGhpbmdzOgorCisgICAgYSkgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcKKyAgICBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIGZvciB0aGUgTGlicmFyeSBpbmNsdWRpbmcgd2hhdGV2ZXIKKyAgICBjaGFuZ2VzIHdlcmUgdXNlZCBpbiB0aGUgd29yayAod2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlcgorICAgIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUpOyBhbmQsIGlmIHRoZSB3b3JrIGlzIGFuIGV4ZWN1dGFibGUgbGlua2VkCisgICAgd2l0aCB0aGUgTGlicmFyeSwgd2l0aCB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSAid29yayB0aGF0CisgICAgdXNlcyB0aGUgTGlicmFyeSIsIGFzIG9iamVjdCBjb2RlIGFuZC9vciBzb3VyY2UgY29kZSwgc28gdGhhdCB0aGUKKyAgICB1c2VyIGNhbiBtb2RpZnkgdGhlIExpYnJhcnkgYW5kIHRoZW4gcmVsaW5rIHRvIHByb2R1Y2UgYSBtb2RpZmllZAorICAgIGV4ZWN1dGFibGUgY29udGFpbmluZyB0aGUgbW9kaWZpZWQgTGlicmFyeS4gIChJdCBpcyB1bmRlcnN0b29kCisgICAgdGhhdCB0aGUgdXNlciB3aG8gY2hhbmdlcyB0aGUgY29udGVudHMgb2YgZGVmaW5pdGlvbnMgZmlsZXMgaW4gdGhlCisgICAgTGlicmFyeSB3aWxsIG5vdCBuZWNlc3NhcmlseSBiZSBhYmxlIHRvIHJlY29tcGlsZSB0aGUgYXBwbGljYXRpb24KKyAgICB0byB1c2UgdGhlIG1vZGlmaWVkIGRlZmluaXRpb25zLikKKworICAgIGIpIFVzZSBhIHN1aXRhYmxlIHNoYXJlZCBsaWJyYXJ5IG1lY2hhbmlzbSBmb3IgbGlua2luZyB3aXRoIHRoZQorICAgIExpYnJhcnkuICBBIHN1aXRhYmxlIG1lY2hhbmlzbSBpcyBvbmUgdGhhdCAoMSkgdXNlcyBhdCBydW4gdGltZSBhCisgICAgY29weSBvZiB0aGUgbGlicmFyeSBhbHJlYWR5IHByZXNlbnQgb24gdGhlIHVzZXIncyBjb21wdXRlciBzeXN0ZW0sCisgICAgcmF0aGVyIHRoYW4gY29weWluZyBsaWJyYXJ5IGZ1bmN0aW9ucyBpbnRvIHRoZSBleGVjdXRhYmxlLCBhbmQgKDIpCisgICAgd2lsbCBvcGVyYXRlIHByb3Blcmx5IHdpdGggYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5LCBpZgorICAgIHRoZSB1c2VyIGluc3RhbGxzIG9uZSwgYXMgbG9uZyBhcyB0aGUgbW9kaWZpZWQgdmVyc2lvbiBpcworICAgIGludGVyZmFjZS1jb21wYXRpYmxlIHdpdGggdGhlIHZlcnNpb24gdGhhdCB0aGUgd29yayB3YXMgbWFkZSB3aXRoLgorCisgICAgYykgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQKKyAgICBsZWFzdCB0aHJlZSB5ZWFycywgdG8gZ2l2ZSB0aGUgc2FtZSB1c2VyIHRoZSBtYXRlcmlhbHMKKyAgICBzcGVjaWZpZWQgaW4gU3Vic2VjdGlvbiA2YSwgYWJvdmUsIGZvciBhIGNoYXJnZSBubyBtb3JlCisgICAgdGhhbiB0aGUgY29zdCBvZiBwZXJmb3JtaW5nIHRoaXMgZGlzdHJpYnV0aW9uLgorCisgICAgZCkgSWYgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkKKyAgICBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgb2ZmZXIgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSB0aGUgYWJvdmUKKyAgICBzcGVjaWZpZWQgbWF0ZXJpYWxzIGZyb20gdGhlIHNhbWUgcGxhY2UuCisKKyAgICBlKSBWZXJpZnkgdGhhdCB0aGUgdXNlciBoYXMgYWxyZWFkeSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlc2UKKyAgICBtYXRlcmlhbHMgb3IgdGhhdCB5b3UgaGF2ZSBhbHJlYWR5IHNlbnQgdGhpcyB1c2VyIGEgY29weS4KKworICBGb3IgYW4gZXhlY3V0YWJsZSwgdGhlIHJlcXVpcmVkIGZvcm0gb2YgdGhlICJ3b3JrIHRoYXQgdXNlcyB0aGUKK0xpYnJhcnkiIG11c3QgaW5jbHVkZSBhbnkgZGF0YSBhbmQgdXRpbGl0eSBwcm9ncmFtcyBuZWVkZWQgZm9yCityZXByb2R1Y2luZyB0aGUgZXhlY3V0YWJsZSBmcm9tIGl0LiAgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwKK3RoZSBtYXRlcmlhbHMgdG8gYmUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IGlzCitub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkgZm9ybSkgd2l0aCB0aGUgbWFqb3IKK2NvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24KK3doaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudCBpdHNlbGYgYWNjb21wYW5pZXMKK3RoZSBleGVjdXRhYmxlLgorCisgIEl0IG1heSBoYXBwZW4gdGhhdCB0aGlzIHJlcXVpcmVtZW50IGNvbnRyYWRpY3RzIHRoZSBsaWNlbnNlCityZXN0cmljdGlvbnMgb2Ygb3RoZXIgcHJvcHJpZXRhcnkgbGlicmFyaWVzIHRoYXQgZG8gbm90IG5vcm1hbGx5CithY2NvbXBhbnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uICBTdWNoIGEgY29udHJhZGljdGlvbiBtZWFucyB5b3UgY2Fubm90Cit1c2UgYm90aCB0aGVtIGFuZCB0aGUgTGlicmFyeSB0b2dldGhlciBpbiBhbiBleGVjdXRhYmxlIHRoYXQgeW91CitkaXN0cmlidXRlLgorDAorICA3LiBZb3UgbWF5IHBsYWNlIGxpYnJhcnkgZmFjaWxpdGllcyB0aGF0IGFyZSBhIHdvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5IHNpZGUtYnktc2lkZSBpbiBhIHNpbmdsZSBsaWJyYXJ5IHRvZ2V0aGVyIHdpdGggb3RoZXIgbGlicmFyeQorZmFjaWxpdGllcyBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHN1Y2ggYSBjb21iaW5lZAorbGlicmFyeSwgcHJvdmlkZWQgdGhhdCB0aGUgc2VwYXJhdGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGJhc2VkIG9uCit0aGUgTGlicmFyeSBhbmQgb2YgdGhlIG90aGVyIGxpYnJhcnkgZmFjaWxpdGllcyBpcyBvdGhlcndpc2UKK3Blcm1pdHRlZCwgYW5kIHByb3ZpZGVkIHRoYXQgeW91IGRvIHRoZXNlIHR3byB0aGluZ3M6CisKKyAgICBhKSBBY2NvbXBhbnkgdGhlIGNvbWJpbmVkIGxpYnJhcnkgd2l0aCBhIGNvcHkgb2YgdGhlIHNhbWUgd29yaworICAgIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCB1bmNvbWJpbmVkIHdpdGggYW55IG90aGVyIGxpYnJhcnkKKyAgICBmYWNpbGl0aWVzLiAgVGhpcyBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAgICBTZWN0aW9ucyBhYm92ZS4KKworICAgIGIpIEdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIHRoZSBjb21iaW5lZCBsaWJyYXJ5IG9mIHRoZSBmYWN0CisgICAgdGhhdCBwYXJ0IG9mIGl0IGlzIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGV4cGxhaW5pbmcKKyAgICB3aGVyZSB0byBmaW5kIHRoZSBhY2NvbXBhbnlpbmcgdW5jb21iaW5lZCBmb3JtIG9mIHRoZSBzYW1lIHdvcmsuCisKKyAgOC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBsaW5rIHdpdGgsIG9yIGRpc3RyaWJ1dGUKK3RoZSBMaWJyYXJ5IGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55CithdHRlbXB0IG90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IKK2Rpc3RyaWJ1dGUgdGhlIExpYnJhcnkgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91cgorcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLAorb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcwordGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDkuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIExpYnJhcnkgb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgTGlicmFyeSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5KSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIExpYnJhcnkgb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgMTAuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK0xpYnJhcnkpLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlLCBsaW5rIHdpdGggb3IgbW9kaWZ5IHRoZSBMaWJyYXJ5CitzdWJqZWN0IHRvIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB3aXRoCit0aGlzIExpY2Vuc2UuCisMCisgIDExLiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50CitpbmZyaW5nZW1lbnQgb3IgZm9yIGFueSBvdGhlciByZWFzb24gKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQgb3JkZXIsIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlIHlvdSBmcm9tIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4gIElmIHlvdSBjYW5ub3QKK2Rpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQgb2JsaWdhdGlvbnMsIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UKK21heSBub3QgZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBhdCBhbGwuICBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQKK2xpY2Vuc2Ugd291bGQgbm90IHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkgYnkKK2FsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgTGlicmFyeS4KKworSWYgYW55IHBvcnRpb24gb2YgdGhpcyBzZWN0aW9uIGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIHVuZGVyIGFueQorcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBzZWN0aW9uIGlzIGludGVuZGVkIHRvIGFwcGx5LAorYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIgY2lyY3Vtc3RhbmNlcy4KKworSXQgaXMgbm90IHRoZSBwdXJwb3NlIG9mIHRoaXMgc2VjdGlvbiB0byBpbmR1Y2UgeW91IHRvIGluZnJpbmdlIGFueQorcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkKK3N1Y2ggY2xhaW1zOyB0aGlzIHNlY3Rpb24gaGFzIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUKK2ludGVncml0eSBvZiB0aGUgZnJlZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gc3lzdGVtIHdoaWNoIGlzCitpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0CitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCit0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKK2ltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKworICAxMi4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBMaWJyYXJ5IGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBMaWJyYXJ5IHVuZGVyIHRoaXMgTGljZW5zZSBtYXkgYWRkCithbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nIHRob3NlIGNvdW50cmllcywKK3NvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nIGNvdW50cmllcyBub3QgdGh1cworZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMgdGhlIGxpbWl0YXRpb24gYXMgaWYKK3dyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDEzLiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldwordmVyc2lvbnMgb2YgdGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLgorU3VjaCBuZXcgdmVyc2lvbnMgd2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLAorYnV0IG1heSBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBMaWJyYXJ5CitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQKKyJhbnkgbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQKK2NvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgTGlicmFyeSBkb2VzIG5vdCBzcGVjaWZ5IGEKK2xpY2Vuc2UgdmVyc2lvbiBudW1iZXIsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIGV2ZXIgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorDAorICAxNC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIExpYnJhcnkgaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgaW5jb21wYXRpYmxlIHdpdGggdGhlc2UsCit3cml0ZSB0byB0aGUgYXV0aG9yIHRvIGFzayBmb3IgcGVybWlzc2lvbi4gIEZvciBzb2Z0d2FyZSB3aGljaCBpcworY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcyBtYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuICBPdXIKK2RlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMgb2YgcHJlc2VydmluZyB0aGUgZnJlZSBzdGF0dXMKK29mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQgb2YgcHJvbW90aW5nIHRoZSBzaGFyaW5nCithbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTk8gV0FSUkFOVFkKKworICAxNS4gQkVDQVVTRSBUSEUgTElCUkFSWSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8KK1dBUlJBTlRZIEZPUiBUSEUgTElCUkFSWSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuCitFWENFUFQgV0hFTiBPVEhFUldJU0UgU1RBVEVEIElOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUgorT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBMSUJSQVJZICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkKK0tJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCitQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUKK0xJQlJBUlkgSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFIExJQlJBUlkgUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FCitUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKKyAgMTYuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4KK1dSSVRJTkcgV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZCitBTkQvT1IgUkVESVNUUklCVVRFIFRIRSBMSUJSQVJZIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVQorRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUKK0xJQlJBUlkgKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRiBEQVRBIE9SIERBVEEgQkVJTkcKK1JFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBCitGQUlMVVJFIE9GIFRIRSBMSUJSQVJZIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIgU09GVFdBUkUpLCBFVkVOIElGCitTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICitEQU1BR0VTLgorCisgICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKwwKKyAgICAgICAgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IExpYnJhcmllcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IGxpYnJhcnksIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB3ZSByZWNvbW1lbmQgbWFraW5nIGl0IGZyZWUgc29mdHdhcmUgdGhhdAorZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlLiAgWW91IGNhbiBkbyBzbyBieSBwZXJtaXR0aW5nCityZWRpc3RyaWJ1dGlvbiB1bmRlciB0aGVzZSB0ZXJtcyAob3IsIGFsdGVybmF0aXZlbHksIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKK29yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UpLgorCisgIFRvIGFwcGx5IHRoZXNlIHRlcm1zLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBsaWJyYXJ5LiAgSXQgaXMKK3NhZmVzdCB0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCB0aGUKKyJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgbGlicmFyeSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KKworWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIKK3NjaG9vbCwgaWYgYW55LCB0byBzaWduIGEgImNvcHlyaWdodCBkaXNjbGFpbWVyIiBmb3IgdGhlIGxpYnJhcnksIGlmCituZWNlc3NhcnkuICBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CisKKyAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUKKyAgbGlicmFyeSBgRnJvYicgKGEgbGlicmFyeSBmb3IgdHdlYWtpbmcga25vYnMpIHdyaXR0ZW4gYnkgSmFtZXMgUmFuZG9tIEhhY2tlci4KKworICA8c2lnbmF0dXJlIG9mIFR5IENvb24+LCAxIEFwcmlsIDE5OTAKKyAgVHkgQ29vbiwgUHJlc2lkZW50IG9mIFZpY2UKKworVGhhdCdzIGFsbCB0aGVyZSBpcyB0byBpdCEKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0xHUEwtMyBiL2xpY2Vuc2VzL0xHUEwtMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYzhhNWRlCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvTEdQTC0zCkBAIC0wLDAgKzEsMTY1IEBACisJCSAgIEdOVSBMRVNTRVIgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDMsIDI5IEp1bmUgMjAwNworCisgQ29weXJpZ2h0IChDKSAyMDA3IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiA8aHR0cDovL2ZzZi5vcmcvPgorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisKKyAgVGhpcyB2ZXJzaW9uIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdmVyc2lvbiAzIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UsIHN1cHBsZW1lbnRlZCBieSB0aGUgYWRkaXRpb25hbCBwZXJtaXNzaW9ucyBsaXN0ZWQgYmVsb3cuCisKKyAgMC4gQWRkaXRpb25hbCBEZWZpbml0aW9ucy4gCisKKyAgQXMgdXNlZCBoZXJlaW4sICJ0aGlzIExpY2Vuc2UiIHJlZmVycyB0byB2ZXJzaW9uIDMgb2YgdGhlIEdOVSBMZXNzZXIKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgIkdOVSBHUEwiIHJlZmVycyB0byB2ZXJzaW9uIDMgb2YgdGhlIEdOVQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworICAiVGhlIExpYnJhcnkiIHJlZmVycyB0byBhIGNvdmVyZWQgd29yayBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UsCitvdGhlciB0aGFuIGFuIEFwcGxpY2F0aW9uIG9yIGEgQ29tYmluZWQgV29yayBhcyBkZWZpbmVkIGJlbG93LgorCisgIEFuICJBcHBsaWNhdGlvbiIgaXMgYW55IHdvcmsgdGhhdCBtYWtlcyB1c2Ugb2YgYW4gaW50ZXJmYWNlIHByb3ZpZGVkCitieSB0aGUgTGlicmFyeSwgYnV0IHdoaWNoIGlzIG5vdCBvdGhlcndpc2UgYmFzZWQgb24gdGhlIExpYnJhcnkuCitEZWZpbmluZyBhIHN1YmNsYXNzIG9mIGEgY2xhc3MgZGVmaW5lZCBieSB0aGUgTGlicmFyeSBpcyBkZWVtZWQgYSBtb2RlCitvZiB1c2luZyBhbiBpbnRlcmZhY2UgcHJvdmlkZWQgYnkgdGhlIExpYnJhcnkuCisKKyAgQSAiQ29tYmluZWQgV29yayIgaXMgYSB3b3JrIHByb2R1Y2VkIGJ5IGNvbWJpbmluZyBvciBsaW5raW5nIGFuCitBcHBsaWNhdGlvbiB3aXRoIHRoZSBMaWJyYXJ5LiAgVGhlIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgTGlicmFyeQord2l0aCB3aGljaCB0aGUgQ29tYmluZWQgV29yayB3YXMgbWFkZSBpcyBhbHNvIGNhbGxlZCB0aGUgIkxpbmtlZAorVmVyc2lvbiIuCisKKyAgVGhlICJNaW5pbWFsIENvcnJlc3BvbmRpbmcgU291cmNlIiBmb3IgYSBDb21iaW5lZCBXb3JrIG1lYW5zIHRoZQorQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIHRoZSBDb21iaW5lZCBXb3JrLCBleGNsdWRpbmcgYW55IHNvdXJjZSBjb2RlCitmb3IgcG9ydGlvbnMgb2YgdGhlIENvbWJpbmVkIFdvcmsgdGhhdCwgY29uc2lkZXJlZCBpbiBpc29sYXRpb24sIGFyZQorYmFzZWQgb24gdGhlIEFwcGxpY2F0aW9uLCBhbmQgbm90IG9uIHRoZSBMaW5rZWQgVmVyc2lvbi4KKworICBUaGUgIkNvcnJlc3BvbmRpbmcgQXBwbGljYXRpb24gQ29kZSIgZm9yIGEgQ29tYmluZWQgV29yayBtZWFucyB0aGUKK29iamVjdCBjb2RlIGFuZC9vciBzb3VyY2UgY29kZSBmb3IgdGhlIEFwcGxpY2F0aW9uLCBpbmNsdWRpbmcgYW55IGRhdGEKK2FuZCB1dGlsaXR5IHByb2dyYW1zIG5lZWRlZCBmb3IgcmVwcm9kdWNpbmcgdGhlIENvbWJpbmVkIFdvcmsgZnJvbSB0aGUKK0FwcGxpY2F0aW9uLCBidXQgZXhjbHVkaW5nIHRoZSBTeXN0ZW0gTGlicmFyaWVzIG9mIHRoZSBDb21iaW5lZCBXb3JrLgorCisgIDEuIEV4Y2VwdGlvbiB0byBTZWN0aW9uIDMgb2YgdGhlIEdOVSBHUEwuCisKKyAgWW91IG1heSBjb252ZXkgYSBjb3ZlcmVkIHdvcmsgdW5kZXIgc2VjdGlvbnMgMyBhbmQgNCBvZiB0aGlzIExpY2Vuc2UKK3dpdGhvdXQgYmVpbmcgYm91bmQgYnkgc2VjdGlvbiAzIG9mIHRoZSBHTlUgR1BMLgorCisgIDIuIENvbnZleWluZyBNb2RpZmllZCBWZXJzaW9ucy4KKworICBJZiB5b3UgbW9kaWZ5IGEgY29weSBvZiB0aGUgTGlicmFyeSwgYW5kLCBpbiB5b3VyIG1vZGlmaWNhdGlvbnMsIGEKK2ZhY2lsaXR5IHJlZmVycyB0byBhIGZ1bmN0aW9uIG9yIGRhdGEgdG8gYmUgc3VwcGxpZWQgYnkgYW4gQXBwbGljYXRpb24KK3RoYXQgdXNlcyB0aGUgZmFjaWxpdHkgKG90aGVyIHRoYW4gYXMgYW4gYXJndW1lbnQgcGFzc2VkIHdoZW4gdGhlCitmYWNpbGl0eSBpcyBpbnZva2VkKSwgdGhlbiB5b3UgbWF5IGNvbnZleSBhIGNvcHkgb2YgdGhlIG1vZGlmaWVkCit2ZXJzaW9uOgorCisgICBhKSB1bmRlciB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgeW91IG1ha2UgYSBnb29kIGZhaXRoIGVmZm9ydCB0bworICAgZW5zdXJlIHRoYXQsIGluIHRoZSBldmVudCBhbiBBcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgdGhlCisgICBmdW5jdGlvbiBvciBkYXRhLCB0aGUgZmFjaWxpdHkgc3RpbGwgb3BlcmF0ZXMsIGFuZCBwZXJmb3JtcworICAgd2hhdGV2ZXIgcGFydCBvZiBpdHMgcHVycG9zZSByZW1haW5zIG1lYW5pbmdmdWwsIG9yCisKKyAgIGIpIHVuZGVyIHRoZSBHTlUgR1BMLCB3aXRoIG5vbmUgb2YgdGhlIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgb2YKKyAgIHRoaXMgTGljZW5zZSBhcHBsaWNhYmxlIHRvIHRoYXQgY29weS4KKworICAzLiBPYmplY3QgQ29kZSBJbmNvcnBvcmF0aW5nIE1hdGVyaWFsIGZyb20gTGlicmFyeSBIZWFkZXIgRmlsZXMuCisKKyAgVGhlIG9iamVjdCBjb2RlIGZvcm0gb2YgYW4gQXBwbGljYXRpb24gbWF5IGluY29ycG9yYXRlIG1hdGVyaWFsIGZyb20KK2EgaGVhZGVyIGZpbGUgdGhhdCBpcyBwYXJ0IG9mIHRoZSBMaWJyYXJ5LiAgWW91IG1heSBjb252ZXkgc3VjaCBvYmplY3QKK2NvZGUgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQsIGlmIHRoZSBpbmNvcnBvcmF0ZWQKK21hdGVyaWFsIGlzIG5vdCBsaW1pdGVkIHRvIG51bWVyaWNhbCBwYXJhbWV0ZXJzLCBkYXRhIHN0cnVjdHVyZQorbGF5b3V0cyBhbmQgYWNjZXNzb3JzLCBvciBzbWFsbCBtYWNyb3MsIGlubGluZSBmdW5jdGlvbnMgYW5kIHRlbXBsYXRlcworKHRlbiBvciBmZXdlciBsaW5lcyBpbiBsZW5ndGgpLCB5b3UgZG8gYm90aCBvZiB0aGUgZm9sbG93aW5nOgorCisgICBhKSBHaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCBlYWNoIGNvcHkgb2YgdGhlIG9iamVjdCBjb2RlIHRoYXQgdGhlCisgICBMaWJyYXJ5IGlzIHVzZWQgaW4gaXQgYW5kIHRoYXQgdGhlIExpYnJhcnkgYW5kIGl0cyB1c2UgYXJlCisgICBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4KKworICAgYikgQWNjb21wYW55IHRoZSBvYmplY3QgY29kZSB3aXRoIGEgY29weSBvZiB0aGUgR05VIEdQTCBhbmQgdGhpcyBsaWNlbnNlCisgICBkb2N1bWVudC4KKworICA0LiBDb21iaW5lZCBXb3Jrcy4KKworICBZb3UgbWF5IGNvbnZleSBhIENvbWJpbmVkIFdvcmsgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UgdGhhdCwKK3Rha2VuIHRvZ2V0aGVyLCBlZmZlY3RpdmVseSBkbyBub3QgcmVzdHJpY3QgbW9kaWZpY2F0aW9uIG9mIHRoZQorcG9ydGlvbnMgb2YgdGhlIExpYnJhcnkgY29udGFpbmVkIGluIHRoZSBDb21iaW5lZCBXb3JrIGFuZCByZXZlcnNlCitlbmdpbmVlcmluZyBmb3IgZGVidWdnaW5nIHN1Y2ggbW9kaWZpY2F0aW9ucywgaWYgeW91IGFsc28gZG8gZWFjaCBvZgordGhlIGZvbGxvd2luZzoKKworICAgYSkgR2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBDb21iaW5lZCBXb3JrIHRoYXQKKyAgIHRoZSBMaWJyYXJ5IGlzIHVzZWQgaW4gaXQgYW5kIHRoYXQgdGhlIExpYnJhcnkgYW5kIGl0cyB1c2UgYXJlCisgICBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4KKworICAgYikgQWNjb21wYW55IHRoZSBDb21iaW5lZCBXb3JrIHdpdGggYSBjb3B5IG9mIHRoZSBHTlUgR1BMIGFuZCB0aGlzIGxpY2Vuc2UKKyAgIGRvY3VtZW50LgorCisgICBjKSBGb3IgYSBDb21iaW5lZCBXb3JrIHRoYXQgZGlzcGxheXMgY29weXJpZ2h0IG5vdGljZXMgZHVyaW5nCisgICBleGVjdXRpb24sIGluY2x1ZGUgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBMaWJyYXJ5IGFtb25nCisgICB0aGVzZSBub3RpY2VzLCBhcyB3ZWxsIGFzIGEgcmVmZXJlbmNlIGRpcmVjdGluZyB0aGUgdXNlciB0byB0aGUKKyAgIGNvcGllcyBvZiB0aGUgR05VIEdQTCBhbmQgdGhpcyBsaWNlbnNlIGRvY3VtZW50LgorCisgICBkKSBEbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgICAgIDApIENvbnZleSB0aGUgTWluaW1hbCBDb3JyZXNwb25kaW5nIFNvdXJjZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcworICAgICAgIExpY2Vuc2UsIGFuZCB0aGUgQ29ycmVzcG9uZGluZyBBcHBsaWNhdGlvbiBDb2RlIGluIGEgZm9ybQorICAgICAgIHN1aXRhYmxlIGZvciwgYW5kIHVuZGVyIHRlcm1zIHRoYXQgcGVybWl0LCB0aGUgdXNlciB0bworICAgICAgIHJlY29tYmluZSBvciByZWxpbmsgdGhlIEFwcGxpY2F0aW9uIHdpdGggYSBtb2RpZmllZCB2ZXJzaW9uIG9mCisgICAgICAgdGhlIExpbmtlZCBWZXJzaW9uIHRvIHByb2R1Y2UgYSBtb2RpZmllZCBDb21iaW5lZCBXb3JrLCBpbiB0aGUKKyAgICAgICBtYW5uZXIgc3BlY2lmaWVkIGJ5IHNlY3Rpb24gNiBvZiB0aGUgR05VIEdQTCBmb3IgY29udmV5aW5nCisgICAgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UuCisKKyAgICAgICAxKSBVc2UgYSBzdWl0YWJsZSBzaGFyZWQgbGlicmFyeSBtZWNoYW5pc20gZm9yIGxpbmtpbmcgd2l0aCB0aGUKKyAgICAgICBMaWJyYXJ5LiAgQSBzdWl0YWJsZSBtZWNoYW5pc20gaXMgb25lIHRoYXQgKGEpIHVzZXMgYXQgcnVuIHRpbWUKKyAgICAgICBhIGNvcHkgb2YgdGhlIExpYnJhcnkgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSB1c2VyJ3MgY29tcHV0ZXIKKyAgICAgICBzeXN0ZW0sIGFuZCAoYikgd2lsbCBvcGVyYXRlIHByb3Blcmx5IHdpdGggYSBtb2RpZmllZCB2ZXJzaW9uCisgICAgICAgb2YgdGhlIExpYnJhcnkgdGhhdCBpcyBpbnRlcmZhY2UtY29tcGF0aWJsZSB3aXRoIHRoZSBMaW5rZWQKKyAgICAgICBWZXJzaW9uLiAKKworICAgZSkgUHJvdmlkZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24sIGJ1dCBvbmx5IGlmIHlvdSB3b3VsZCBvdGhlcndpc2UKKyAgIGJlIHJlcXVpcmVkIHRvIHByb3ZpZGUgc3VjaCBpbmZvcm1hdGlvbiB1bmRlciBzZWN0aW9uIDYgb2YgdGhlCisgICBHTlUgR1BMLCBhbmQgb25seSB0byB0aGUgZXh0ZW50IHRoYXQgc3VjaCBpbmZvcm1hdGlvbiBpcworICAgbmVjZXNzYXJ5IHRvIGluc3RhbGwgYW5kIGV4ZWN1dGUgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZQorICAgQ29tYmluZWQgV29yayBwcm9kdWNlZCBieSByZWNvbWJpbmluZyBvciByZWxpbmtpbmcgdGhlCisgICBBcHBsaWNhdGlvbiB3aXRoIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgTGlua2VkIFZlcnNpb24uIChJZgorICAgeW91IHVzZSBvcHRpb24gNGQwLCB0aGUgSW5zdGFsbGF0aW9uIEluZm9ybWF0aW9uIG11c3QgYWNjb21wYW55CisgICB0aGUgTWluaW1hbCBDb3JyZXNwb25kaW5nIFNvdXJjZSBhbmQgQ29ycmVzcG9uZGluZyBBcHBsaWNhdGlvbgorICAgQ29kZS4gSWYgeW91IHVzZSBvcHRpb24gNGQxLCB5b3UgbXVzdCBwcm92aWRlIHRoZSBJbnN0YWxsYXRpb24KKyAgIEluZm9ybWF0aW9uIGluIHRoZSBtYW5uZXIgc3BlY2lmaWVkIGJ5IHNlY3Rpb24gNiBvZiB0aGUgR05VIEdQTAorICAgZm9yIGNvbnZleWluZyBDb3JyZXNwb25kaW5nIFNvdXJjZS4pCisKKyAgNS4gQ29tYmluZWQgTGlicmFyaWVzLgorCisgIFlvdSBtYXkgcGxhY2UgbGlicmFyeSBmYWNpbGl0aWVzIHRoYXQgYXJlIGEgd29yayBiYXNlZCBvbiB0aGUKK0xpYnJhcnkgc2lkZSBieSBzaWRlIGluIGEgc2luZ2xlIGxpYnJhcnkgdG9nZXRoZXIgd2l0aCBvdGhlciBsaWJyYXJ5CitmYWNpbGl0aWVzIHRoYXQgYXJlIG5vdCBBcHBsaWNhdGlvbnMgYW5kIGFyZSBub3QgY292ZXJlZCBieSB0aGlzCitMaWNlbnNlLCBhbmQgY29udmV5IHN1Y2ggYSBjb21iaW5lZCBsaWJyYXJ5IHVuZGVyIHRlcm1zIG9mIHlvdXIKK2Nob2ljZSwgaWYgeW91IGRvIGJvdGggb2YgdGhlIGZvbGxvd2luZzoKKworICAgYSkgQWNjb21wYW55IHRoZSBjb21iaW5lZCBsaWJyYXJ5IHdpdGggYSBjb3B5IG9mIHRoZSBzYW1lIHdvcmsgYmFzZWQKKyAgIG9uIHRoZSBMaWJyYXJ5LCB1bmNvbWJpbmVkIHdpdGggYW55IG90aGVyIGxpYnJhcnkgZmFjaWxpdGllcywKKyAgIGNvbnZleWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgIGIpIEdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIHRoZSBjb21iaW5lZCBsaWJyYXJ5IHRoYXQgcGFydCBvZiBpdAorICAgaXMgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgZXhwbGFpbmluZyB3aGVyZSB0byBmaW5kIHRoZQorICAgYWNjb21wYW55aW5nIHVuY29tYmluZWQgZm9ybSBvZiB0aGUgc2FtZSB3b3JrLgorCisgIDYuIFJldmlzZWQgVmVyc2lvbnMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworICBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gU3VjaCBuZXcKK3ZlcnNpb25zIHdpbGwgYmUgc2ltaWxhciBpbiBzcGlyaXQgdG8gdGhlIHByZXNlbnQgdmVyc2lvbiwgYnV0IG1heQorZGlmZmVyIGluIGRldGFpbCB0byBhZGRyZXNzIG5ldyBwcm9ibGVtcyBvciBjb25jZXJucy4KKworICBFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gSWYgdGhlCitMaWJyYXJ5IGFzIHlvdSByZWNlaXZlZCBpdCBzcGVjaWZpZXMgdGhhdCBhIGNlcnRhaW4gbnVtYmVyZWQgdmVyc2lvbgorb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAib3IgYW55IGxhdGVyIHZlcnNpb24iCithcHBsaWVzIHRvIGl0LCB5b3UgaGF2ZSB0aGUgb3B0aW9uIG9mIGZvbGxvd2luZyB0aGUgdGVybXMgYW5kCitjb25kaXRpb25zIGVpdGhlciBvZiB0aGF0IHB1Ymxpc2hlZCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uCitwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gSWYgdGhlIExpYnJhcnkgYXMgeW91CityZWNlaXZlZCBpdCBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YgdGhlIEdOVSBMZXNzZXIKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlIGFueSB2ZXJzaW9uIG9mIHRoZSBHTlUgTGVzc2VyCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGV2ZXIgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisKKyAgSWYgdGhlIExpYnJhcnkgYXMgeW91IHJlY2VpdmVkIGl0IHNwZWNpZmllcyB0aGF0IGEgcHJveHkgY2FuIGRlY2lkZQord2hldGhlciBmdXR1cmUgdmVyc2lvbnMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBzaGFsbAorYXBwbHksIHRoYXQgcHJveHkncyBwdWJsaWMgc3RhdGVtZW50IG9mIGFjY2VwdGFuY2Ugb2YgYW55IHZlcnNpb24gaXMKK3Blcm1hbmVudCBhdXRob3JpemF0aW9uIGZvciB5b3UgdG8gY2hvb3NlIHRoYXQgdmVyc2lvbiBmb3IgdGhlCitMaWJyYXJ5LgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvTEdQTC0zKyBiL2xpY2Vuc2VzL0xHUEwtMysKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDIxYTQ3OQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0xHUEwtMysKQEAgLTAsMCArMSwyIEBACitHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDMgb3IgYW55IGxhdGVyIHZlcnNpb24uCitTZWUgTEdQTC0zIGZvciB0aGUgZnVsbCB0ZXh0IG9mIHRoaXMgbGljZW5zZS4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0xHUEwtMy13aXRoLWxpbmtpbmctZXhjZXB0aW9uIGIvbGljZW5zZXMvTEdQTC0zLXdpdGgtbGlua2luZy1leGNlcHRpb24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNkZGQ5MQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0xHUEwtMy13aXRoLWxpbmtpbmctZXhjZXB0aW9uCkBAIC0wLDAgKzEsMTgwIEBACitBcyBhIHNwZWNpYWwgZXhjZXB0aW9uIHRvIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHlvdQorbWF5IGxpbmssIHN0YXRpY2FsbHkgb3IgZHluYW1pY2FsbHksIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5Igord2l0aCBhIHB1YmxpY2x5IGRpc3RyaWJ1dGVkIHZlcnNpb24gb2YgdGhlIExpYnJhcnkgdG8gcHJvZHVjZSBhbgorZXhlY3V0YWJsZSBmaWxlIGNvbnRhaW5pbmcgcG9ydGlvbnMgb2YgdGhlIExpYnJhcnksIGFuZCBkaXN0cmlidXRlCit0aGF0IGV4ZWN1dGFibGUgZmlsZSB1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgd2l0aG91dCBhbnkgb2YgdGhlCithZGRpdGlvbmFsIHJlcXVpcmVtZW50cyBsaXN0ZWQgaW4gY2xhdXNlIDYgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwKK1B1YmxpYyBMaWNlbnNlLiAgQnkgImEgcHVibGljbHkgZGlzdHJpYnV0ZWQgdmVyc2lvbiBvZiB0aGUgTGlicmFyeSIsCit3ZSBtZWFuIGVpdGhlciB0aGUgdW5tb2RpZmllZCBMaWJyYXJ5IGFzIGRpc3RyaWJ1dGVkIGJ5IHRoZSBjb3B5cmlnaHQKK2hvbGRlciwgb3IgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBMaWJyYXJ5IHRoYXQgaXMgZGlzdHJpYnV0ZWQgdW5kZXIKK3RoZSBjb25kaXRpb25zIGRlZmluZWQgaW4gY2xhdXNlIDMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCitMaWNlbnNlLiAgVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlciBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zCit3aHkgdGhlIGV4ZWN1dGFibGUgZmlsZSBtaWdodCBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwKK1B1YmxpYyBMaWNlbnNlLgorCisKKyAgICAgICAgICAgICAgICAgICBHTlUgTEVTU0VSIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAzLCAyOSBKdW5lIDIwMDcKKworIENvcHlyaWdodCAoQykgMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4gPGh0dHA6Ly9mc2Yub3JnLz4KKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCisgIFRoaXMgdmVyc2lvbiBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGluY29ycG9yYXRlcwordGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHZlcnNpb24gMyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlLCBzdXBwbGVtZW50ZWQgYnkgdGhlIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgbGlzdGVkIGJlbG93LgorCisgIDAuIEFkZGl0aW9uYWwgRGVmaW5pdGlvbnMuCisKKyAgQXMgdXNlZCBoZXJlaW4sICJ0aGlzIExpY2Vuc2UiIHJlZmVycyB0byB2ZXJzaW9uIDMgb2YgdGhlIEdOVSBMZXNzZXIKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFuZCB0aGUgIkdOVSBHUEwiIHJlZmVycyB0byB2ZXJzaW9uIDMgb2YgdGhlIEdOVQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKworICAiVGhlIExpYnJhcnkiIHJlZmVycyB0byBhIGNvdmVyZWQgd29yayBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UsCitvdGhlciB0aGFuIGFuIEFwcGxpY2F0aW9uIG9yIGEgQ29tYmluZWQgV29yayBhcyBkZWZpbmVkIGJlbG93LgorCisgIEFuICJBcHBsaWNhdGlvbiIgaXMgYW55IHdvcmsgdGhhdCBtYWtlcyB1c2Ugb2YgYW4gaW50ZXJmYWNlIHByb3ZpZGVkCitieSB0aGUgTGlicmFyeSwgYnV0IHdoaWNoIGlzIG5vdCBvdGhlcndpc2UgYmFzZWQgb24gdGhlIExpYnJhcnkuCitEZWZpbmluZyBhIHN1YmNsYXNzIG9mIGEgY2xhc3MgZGVmaW5lZCBieSB0aGUgTGlicmFyeSBpcyBkZWVtZWQgYSBtb2RlCitvZiB1c2luZyBhbiBpbnRlcmZhY2UgcHJvdmlkZWQgYnkgdGhlIExpYnJhcnkuCisKKyAgQSAiQ29tYmluZWQgV29yayIgaXMgYSB3b3JrIHByb2R1Y2VkIGJ5IGNvbWJpbmluZyBvciBsaW5raW5nIGFuCitBcHBsaWNhdGlvbiB3aXRoIHRoZSBMaWJyYXJ5LiAgVGhlIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgTGlicmFyeQord2l0aCB3aGljaCB0aGUgQ29tYmluZWQgV29yayB3YXMgbWFkZSBpcyBhbHNvIGNhbGxlZCB0aGUgIkxpbmtlZAorVmVyc2lvbiIuCisKKyAgVGhlICJNaW5pbWFsIENvcnJlc3BvbmRpbmcgU291cmNlIiBmb3IgYSBDb21iaW5lZCBXb3JrIG1lYW5zIHRoZQorQ29ycmVzcG9uZGluZyBTb3VyY2UgZm9yIHRoZSBDb21iaW5lZCBXb3JrLCBleGNsdWRpbmcgYW55IHNvdXJjZSBjb2RlCitmb3IgcG9ydGlvbnMgb2YgdGhlIENvbWJpbmVkIFdvcmsgdGhhdCwgY29uc2lkZXJlZCBpbiBpc29sYXRpb24sIGFyZQorYmFzZWQgb24gdGhlIEFwcGxpY2F0aW9uLCBhbmQgbm90IG9uIHRoZSBMaW5rZWQgVmVyc2lvbi4KKworICBUaGUgIkNvcnJlc3BvbmRpbmcgQXBwbGljYXRpb24gQ29kZSIgZm9yIGEgQ29tYmluZWQgV29yayBtZWFucyB0aGUKK29iamVjdCBjb2RlIGFuZC9vciBzb3VyY2UgY29kZSBmb3IgdGhlIEFwcGxpY2F0aW9uLCBpbmNsdWRpbmcgYW55IGRhdGEKK2FuZCB1dGlsaXR5IHByb2dyYW1zIG5lZWRlZCBmb3IgcmVwcm9kdWNpbmcgdGhlIENvbWJpbmVkIFdvcmsgZnJvbSB0aGUKK0FwcGxpY2F0aW9uLCBidXQgZXhjbHVkaW5nIHRoZSBTeXN0ZW0gTGlicmFyaWVzIG9mIHRoZSBDb21iaW5lZCBXb3JrLgorCisgIDEuIEV4Y2VwdGlvbiB0byBTZWN0aW9uIDMgb2YgdGhlIEdOVSBHUEwuCisKKyAgWW91IG1heSBjb252ZXkgYSBjb3ZlcmVkIHdvcmsgdW5kZXIgc2VjdGlvbnMgMyBhbmQgNCBvZiB0aGlzIExpY2Vuc2UKK3dpdGhvdXQgYmVpbmcgYm91bmQgYnkgc2VjdGlvbiAzIG9mIHRoZSBHTlUgR1BMLgorCisgIDIuIENvbnZleWluZyBNb2RpZmllZCBWZXJzaW9ucy4KKworICBJZiB5b3UgbW9kaWZ5IGEgY29weSBvZiB0aGUgTGlicmFyeSwgYW5kLCBpbiB5b3VyIG1vZGlmaWNhdGlvbnMsIGEKK2ZhY2lsaXR5IHJlZmVycyB0byBhIGZ1bmN0aW9uIG9yIGRhdGEgdG8gYmUgc3VwcGxpZWQgYnkgYW4gQXBwbGljYXRpb24KK3RoYXQgdXNlcyB0aGUgZmFjaWxpdHkgKG90aGVyIHRoYW4gYXMgYW4gYXJndW1lbnQgcGFzc2VkIHdoZW4gdGhlCitmYWNpbGl0eSBpcyBpbnZva2VkKSwgdGhlbiB5b3UgbWF5IGNvbnZleSBhIGNvcHkgb2YgdGhlIG1vZGlmaWVkCit2ZXJzaW9uOgorCisgICBhKSB1bmRlciB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgeW91IG1ha2UgYSBnb29kIGZhaXRoIGVmZm9ydCB0bworICAgZW5zdXJlIHRoYXQsIGluIHRoZSBldmVudCBhbiBBcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgdGhlCisgICBmdW5jdGlvbiBvciBkYXRhLCB0aGUgZmFjaWxpdHkgc3RpbGwgb3BlcmF0ZXMsIGFuZCBwZXJmb3JtcworICAgd2hhdGV2ZXIgcGFydCBvZiBpdHMgcHVycG9zZSByZW1haW5zIG1lYW5pbmdmdWwsIG9yCisKKyAgIGIpIHVuZGVyIHRoZSBHTlUgR1BMLCB3aXRoIG5vbmUgb2YgdGhlIGFkZGl0aW9uYWwgcGVybWlzc2lvbnMgb2YKKyAgIHRoaXMgTGljZW5zZSBhcHBsaWNhYmxlIHRvIHRoYXQgY29weS4KKworICAzLiBPYmplY3QgQ29kZSBJbmNvcnBvcmF0aW5nIE1hdGVyaWFsIGZyb20gTGlicmFyeSBIZWFkZXIgRmlsZXMuCisKKyAgVGhlIG9iamVjdCBjb2RlIGZvcm0gb2YgYW4gQXBwbGljYXRpb24gbWF5IGluY29ycG9yYXRlIG1hdGVyaWFsIGZyb20KK2EgaGVhZGVyIGZpbGUgdGhhdCBpcyBwYXJ0IG9mIHRoZSBMaWJyYXJ5LiAgWW91IG1heSBjb252ZXkgc3VjaCBvYmplY3QKK2NvZGUgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQsIGlmIHRoZSBpbmNvcnBvcmF0ZWQKK21hdGVyaWFsIGlzIG5vdCBsaW1pdGVkIHRvIG51bWVyaWNhbCBwYXJhbWV0ZXJzLCBkYXRhIHN0cnVjdHVyZQorbGF5b3V0cyBhbmQgYWNjZXNzb3JzLCBvciBzbWFsbCBtYWNyb3MsIGlubGluZSBmdW5jdGlvbnMgYW5kIHRlbXBsYXRlcworKHRlbiBvciBmZXdlciBsaW5lcyBpbiBsZW5ndGgpLCB5b3UgZG8gYm90aCBvZiB0aGUgZm9sbG93aW5nOgorCisgICBhKSBHaXZlIHByb21pbmVudCBub3RpY2Ugd2l0aCBlYWNoIGNvcHkgb2YgdGhlIG9iamVjdCBjb2RlIHRoYXQgdGhlCisgICBMaWJyYXJ5IGlzIHVzZWQgaW4gaXQgYW5kIHRoYXQgdGhlIExpYnJhcnkgYW5kIGl0cyB1c2UgYXJlCisgICBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4KKworICAgYikgQWNjb21wYW55IHRoZSBvYmplY3QgY29kZSB3aXRoIGEgY29weSBvZiB0aGUgR05VIEdQTCBhbmQgdGhpcyBsaWNlbnNlCisgICBkb2N1bWVudC4KKworICA0LiBDb21iaW5lZCBXb3Jrcy4KKworICBZb3UgbWF5IGNvbnZleSBhIENvbWJpbmVkIFdvcmsgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UgdGhhdCwKK3Rha2VuIHRvZ2V0aGVyLCBlZmZlY3RpdmVseSBkbyBub3QgcmVzdHJpY3QgbW9kaWZpY2F0aW9uIG9mIHRoZQorcG9ydGlvbnMgb2YgdGhlIExpYnJhcnkgY29udGFpbmVkIGluIHRoZSBDb21iaW5lZCBXb3JrIGFuZCByZXZlcnNlCitlbmdpbmVlcmluZyBmb3IgZGVidWdnaW5nIHN1Y2ggbW9kaWZpY2F0aW9ucywgaWYgeW91IGFsc28gZG8gZWFjaCBvZgordGhlIGZvbGxvd2luZzoKKworICAgYSkgR2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBDb21iaW5lZCBXb3JrIHRoYXQKKyAgIHRoZSBMaWJyYXJ5IGlzIHVzZWQgaW4gaXQgYW5kIHRoYXQgdGhlIExpYnJhcnkgYW5kIGl0cyB1c2UgYXJlCisgICBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4KKworICAgYikgQWNjb21wYW55IHRoZSBDb21iaW5lZCBXb3JrIHdpdGggYSBjb3B5IG9mIHRoZSBHTlUgR1BMIGFuZCB0aGlzIGxpY2Vuc2UKKyAgIGRvY3VtZW50LgorCisgICBjKSBGb3IgYSBDb21iaW5lZCBXb3JrIHRoYXQgZGlzcGxheXMgY29weXJpZ2h0IG5vdGljZXMgZHVyaW5nCisgICBleGVjdXRpb24sIGluY2x1ZGUgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBMaWJyYXJ5IGFtb25nCisgICB0aGVzZSBub3RpY2VzLCBhcyB3ZWxsIGFzIGEgcmVmZXJlbmNlIGRpcmVjdGluZyB0aGUgdXNlciB0byB0aGUKKyAgIGNvcGllcyBvZiB0aGUgR05VIEdQTCBhbmQgdGhpcyBsaWNlbnNlIGRvY3VtZW50LgorCisgICBkKSBEbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgICAgIDApIENvbnZleSB0aGUgTWluaW1hbCBDb3JyZXNwb25kaW5nIFNvdXJjZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcworICAgICAgIExpY2Vuc2UsIGFuZCB0aGUgQ29ycmVzcG9uZGluZyBBcHBsaWNhdGlvbiBDb2RlIGluIGEgZm9ybQorICAgICAgIHN1aXRhYmxlIGZvciwgYW5kIHVuZGVyIHRlcm1zIHRoYXQgcGVybWl0LCB0aGUgdXNlciB0bworICAgICAgIHJlY29tYmluZSBvciByZWxpbmsgdGhlIEFwcGxpY2F0aW9uIHdpdGggYSBtb2RpZmllZCB2ZXJzaW9uIG9mCisgICAgICAgdGhlIExpbmtlZCBWZXJzaW9uIHRvIHByb2R1Y2UgYSBtb2RpZmllZCBDb21iaW5lZCBXb3JrLCBpbiB0aGUKKyAgICAgICBtYW5uZXIgc3BlY2lmaWVkIGJ5IHNlY3Rpb24gNiBvZiB0aGUgR05VIEdQTCBmb3IgY29udmV5aW5nCisgICAgICAgQ29ycmVzcG9uZGluZyBTb3VyY2UuCisKKyAgICAgICAxKSBVc2UgYSBzdWl0YWJsZSBzaGFyZWQgbGlicmFyeSBtZWNoYW5pc20gZm9yIGxpbmtpbmcgd2l0aCB0aGUKKyAgICAgICBMaWJyYXJ5LiAgQSBzdWl0YWJsZSBtZWNoYW5pc20gaXMgb25lIHRoYXQgKGEpIHVzZXMgYXQgcnVuIHRpbWUKKyAgICAgICBhIGNvcHkgb2YgdGhlIExpYnJhcnkgYWxyZWFkeSBwcmVzZW50IG9uIHRoZSB1c2VyJ3MgY29tcHV0ZXIKKyAgICAgICBzeXN0ZW0sIGFuZCAoYikgd2lsbCBvcGVyYXRlIHByb3Blcmx5IHdpdGggYSBtb2RpZmllZCB2ZXJzaW9uCisgICAgICAgb2YgdGhlIExpYnJhcnkgdGhhdCBpcyBpbnRlcmZhY2UtY29tcGF0aWJsZSB3aXRoIHRoZSBMaW5rZWQKKyAgICAgICBWZXJzaW9uLgorCisgICBlKSBQcm92aWRlIEluc3RhbGxhdGlvbiBJbmZvcm1hdGlvbiwgYnV0IG9ubHkgaWYgeW91IHdvdWxkIG90aGVyd2lzZQorICAgYmUgcmVxdWlyZWQgdG8gcHJvdmlkZSBzdWNoIGluZm9ybWF0aW9uIHVuZGVyIHNlY3Rpb24gNiBvZiB0aGUKKyAgIEdOVSBHUEwsIGFuZCBvbmx5IHRvIHRoZSBleHRlbnQgdGhhdCBzdWNoIGluZm9ybWF0aW9uIGlzCisgICBuZWNlc3NhcnkgdG8gaW5zdGFsbCBhbmQgZXhlY3V0ZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlCisgICBDb21iaW5lZCBXb3JrIHByb2R1Y2VkIGJ5IHJlY29tYmluaW5nIG9yIHJlbGlua2luZyB0aGUKKyAgIEFwcGxpY2F0aW9uIHdpdGggYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBMaW5rZWQgVmVyc2lvbi4gKElmCisgICB5b3UgdXNlIG9wdGlvbiA0ZDAsIHRoZSBJbnN0YWxsYXRpb24gSW5mb3JtYXRpb24gbXVzdCBhY2NvbXBhbnkKKyAgIHRoZSBNaW5pbWFsIENvcnJlc3BvbmRpbmcgU291cmNlIGFuZCBDb3JyZXNwb25kaW5nIEFwcGxpY2F0aW9uCisgICBDb2RlLiBJZiB5b3UgdXNlIG9wdGlvbiA0ZDEsIHlvdSBtdXN0IHByb3ZpZGUgdGhlIEluc3RhbGxhdGlvbgorICAgSW5mb3JtYXRpb24gaW4gdGhlIG1hbm5lciBzcGVjaWZpZWQgYnkgc2VjdGlvbiA2IG9mIHRoZSBHTlUgR1BMCisgICBmb3IgY29udmV5aW5nIENvcnJlc3BvbmRpbmcgU291cmNlLikKKworICA1LiBDb21iaW5lZCBMaWJyYXJpZXMuCisKKyAgWW91IG1heSBwbGFjZSBsaWJyYXJ5IGZhY2lsaXRpZXMgdGhhdCBhcmUgYSB3b3JrIGJhc2VkIG9uIHRoZQorTGlicmFyeSBzaWRlIGJ5IHNpZGUgaW4gYSBzaW5nbGUgbGlicmFyeSB0b2dldGhlciB3aXRoIG90aGVyIGxpYnJhcnkKK2ZhY2lsaXRpZXMgdGhhdCBhcmUgbm90IEFwcGxpY2F0aW9ucyBhbmQgYXJlIG5vdCBjb3ZlcmVkIGJ5IHRoaXMKK0xpY2Vuc2UsIGFuZCBjb252ZXkgc3VjaCBhIGNvbWJpbmVkIGxpYnJhcnkgdW5kZXIgdGVybXMgb2YgeW91cgorY2hvaWNlLCBpZiB5b3UgZG8gYm90aCBvZiB0aGUgZm9sbG93aW5nOgorCisgICBhKSBBY2NvbXBhbnkgdGhlIGNvbWJpbmVkIGxpYnJhcnkgd2l0aCBhIGNvcHkgb2YgdGhlIHNhbWUgd29yayBiYXNlZAorICAgb24gdGhlIExpYnJhcnksIHVuY29tYmluZWQgd2l0aCBhbnkgb3RoZXIgbGlicmFyeSBmYWNpbGl0aWVzLAorICAgY29udmV5ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgYikgR2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggdGhlIGNvbWJpbmVkIGxpYnJhcnkgdGhhdCBwYXJ0IG9mIGl0CisgICBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBleHBsYWluaW5nIHdoZXJlIHRvIGZpbmQgdGhlCisgICBhY2NvbXBhbnlpbmcgdW5jb21iaW5lZCBmb3JtIG9mIHRoZSBzYW1lIHdvcmsuCisKKyAgNi4gUmV2aXNlZCBWZXJzaW9ucyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCisgIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBTdWNoIG5ldwordmVyc2lvbnMgd2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5CitkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCisgIEVhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiBJZiB0aGUKK0xpYnJhcnkgYXMgeW91IHJlY2VpdmVkIGl0IHNwZWNpZmllcyB0aGF0IGEgY2VydGFpbiBudW1iZXJlZCB2ZXJzaW9uCitvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICJvciBhbnkgbGF0ZXIgdmVyc2lvbiIKK2FwcGxpZXMgdG8gaXQsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQKK2NvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgcHVibGlzaGVkIHZlcnNpb24gb3Igb2YgYW55IGxhdGVyIHZlcnNpb24KK3B1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBJZiB0aGUgTGlicmFyeSBhcyB5b3UKK3JlY2VpdmVkIGl0IGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGUgR05VIExlc3NlcgorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gb2YgdGhlIEdOVSBMZXNzZXIKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICBJZiB0aGUgTGlicmFyeSBhcyB5b3UgcmVjZWl2ZWQgaXQgc3BlY2lmaWVzIHRoYXQgYSBwcm94eSBjYW4gZGVjaWRlCit3aGV0aGVyIGZ1dHVyZSB2ZXJzaW9ucyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHNoYWxsCithcHBseSwgdGhhdCBwcm94eSdzIHB1YmxpYyBzdGF0ZW1lbnQgb2YgYWNjZXB0YW5jZSBvZiBhbnkgdmVyc2lvbiBpcworcGVybWFuZW50IGF1dGhvcml6YXRpb24gZm9yIHlvdSB0byBjaG9vc2UgdGhhdCB2ZXJzaW9uIGZvciB0aGUKK0xpYnJhcnkuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9MSUJHTE9TUyBiL2xpY2Vuc2VzL0xJQkdMT1NTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2Zjk5ZTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9MSUJHTE9TUwpAQCAtMCwwICsxLDI5NyBAQAorVGhlIGxpYmdsb3NzIHN1YmRpcmVjdG9yeSBpcyBhIGNvbGxlY3Rpb24gb2Ygc29mdHdhcmUgZnJvbSBzZXZlcmFsIHNvdXJjZXMuCitFYWNoIGhhdmUgdGhlaXIgb3duIGNvcHlyaWdodHMgZW1iZWRkZWQgaW4gZWFjaCBmaWxlIHRoYXQgdGhleSBjb25jZXJuLgorCisoMSkgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLCBCZXJrZWxleQorCitbMWFdCisKK0NvcHlyaWdodCAoYykgMTk5MCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3JtcyBhcmUgcGVybWl0dGVkCitwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBhcmFncmFwaCBhcmUKK2R1cGxpY2F0ZWQgaW4gYWxsIHN1Y2ggZm9ybXMgYW5kIHRoYXQgYW55IGRvY3VtZW50YXRpb24sCithbmQgb3RoZXIgbWF0ZXJpYWxzIHJlbGF0ZWQgdG8gc3VjaCBkaXN0cmlidXRpb24gYW5kIHVzZSAKK2Fja25vd2xlZGdlIHRoYXQgdGhlIHNvZnR3YXJlIHdhcyBkZXZlbG9wZWQKK2J5IHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsIEJlcmtlbGV5LiAgVGhlIG5hbWUgb2YgdGhlCitVbml2ZXJzaXR5IG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKK0lNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisKK1sxYl0KKworQ29weXJpZ2h0IChjKSAxOTkxLCAyMDAwIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCisgICAgIENhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKK1sxY10KKworQ29weXJpZ2h0IChjKSAxOTkxLCAxOTk4LCAyMDAxIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIFtyZXNjaW5kZWQgMjIgSnVseSAxOTk5XQorNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBQbGVhc2Ugbm90ZSB0aGF0IGluIHNvbWUgb2YgdGhlIGFib3ZlIGFsdGVybmF0ZSBsaWNlbnNlcywgdGhlcmUgaXMgYQorIHN0YXRlbWVudCByZWdhcmRpbmcgdGhhdCBhY2tub3dsZWRnZW1lbnQgbXVzdCBiZSBtYWRlIGluIGFueQorIGFkdmVydGlzaW5nIG1hdGVyaWFscyBmb3IgcHJvZHVjdHMgdXNpbmcgdGhlIGNvZGUuICBUaGlzIHJlc3RyaWN0aW9uCisgbm8gbG9uZ2VyIGFwcGxpZXMgZHVlIHRvIHRoZSBmb2xsb3dpbmcgbGljZW5zZSBjaGFuZ2U6CisKKyAgZnRwOi8vZnRwLmNzLmJlcmtlbGV5LmVkdS9wdWIvNGJzZC9SRUFETUUuSW1wdC5MaWNlbnNlLkNoYW5nZQorCisgSW4gc29tZSBjYXNlcyB0aGUgZGVmdW5jdCBjbGF1c2UgaGFzIGJlZW4gcmVtb3ZlZCBpbiBtb2RpZmllZCBuZXdsaWIgY29kZSBhbmQKKyBpbiBzb21lIGNhc2VzLCB0aGUgY2xhdXNlIGhhcyBiZWVuIGxlZnQgYXMtaXMuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKygyKSBESiBEZWxvcmllCisKK0NvcHlyaWdodCAoQykgMTk5MyBESiBEZWxvcmllCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zIGlzIHBlcm1pdHRlZAorcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgZm9sbG93aW5nIHBhcmFncmFwaCBhcmUKK2R1cGxpY2F0ZWQgaW4gYWxsIHN1Y2ggZm9ybXMuCisKK1RoaXMgZmlsZSBpcyBkaXN0cmlidXRlZCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkCit3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisKKygzKSBHUEwgKGZyMzAgZGlyZWN0b3J5IG9ubHkpCisKK0NvcHlyaWdodCAoQykgMTk5OCBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KK0NvbnRyaWJ1dGVkIGJ5IEN5Z251cyBTb2x1dGlvbnMuCisKK1RoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBDQy4KKworR05VIENDIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKK2l0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Cit0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyLCBvciAoYXQgeW91ciBvcHRpb24pCithbnkgbGF0ZXIgdmVyc2lvbi4KKworR05VIENDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR05VIENDOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8KK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCitCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKworKDQpIEFkdmFuY2VkIE1pY3JvIERldmljZXMKKworQ29weXJpZ2h0IDE5ODksIDE5OTAgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorCitUaGlzIHNvZnR3YXJlIGlzIHRoZSBwcm9wZXJ0eSBvZiBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMgIChBTUQpICB3aGljaAorc3BlY2lmaWNhbGx5ICBncmFudHMgdGhlIHVzZXIgdGhlIHJpZ2h0IHRvIG1vZGlmeSwgdXNlIGFuZCBkaXN0cmlidXRlIHRoaXMKK3NvZnR3YXJlIHByb3ZpZGVkIHRoaXMgbm90aWNlIGlzIG5vdCByZW1vdmVkIG9yIGFsdGVyZWQuICBBbGwgb3RoZXIgcmlnaHRzCithcmUgcmVzZXJ2ZWQgYnkgQU1ELgorCitBTUQgTUFLRVMgTk8gV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgV0lUSCBSRUdBUkQgVE8gVEhJUworU09GVFdBUkUuICBJTiBOTyBFVkVOVCBTSEFMTCBBTUQgQkUgTElBQkxFIEZPUiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgSU4gQ09OTkVDVElPTiBXSVRIIE9SIEFSSVNJTkcgRlJPTSBUSEUgRlVSTklTSElORywgUEVSRk9STUFOQ0UsIE9SCitVU0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworU28gdGhhdCBhbGwgbWF5IGJlbmVmaXQgZnJvbSB5b3VyIGV4cGVyaWVuY2UsIHBsZWFzZSByZXBvcnQgIGFueSAgcHJvYmxlbXMKK29yICBzdWdnZXN0aW9ucyBhYm91dCB0aGlzIHNvZnR3YXJlIHRvIHRoZSAyOUsgVGVjaG5pY2FsIFN1cHBvcnQgQ2VudGVyIGF0Cis4MDAtMjktMjktQU1EICg4MDAtMjkyLTkyNjMpIGluIHRoZSBVU0EsIG9yIDA4MDAtODktMTEzMSAgaW4gIHRoZSAgVUssICBvcgorMDAzMS0xMS0xMTI5IGluIEphcGFuLCB0b2xsIGZyZWUuICBUaGUgZGlyZWN0IGRpYWwgbnVtYmVyIGlzIDUxMi00NjItNDExOC4KKworQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorMjlLIFN1cHBvcnQgUHJvZHVjdHMKK01haWwgU3RvcCA1NzMKKzU5MDAgRS4gQmVuIFdoaXRlIEJsdmQuCitBdXN0aW4sIFRYIDc4NzQxCis4MDAtMjkyLTkyNjMKKworKDUpIEFycmF5IFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gYW5kIE1JUFMgKG1pcHMvbHNpMzNrLXN0dWIuaCkKKyAKK0NPUFlSSUdIVCAoQykgMTk5MSwgMTk5MiBBUlJBWSBURUNITk9MT0dZIENPUlBPUkFUSU9OCisgICAgICAgICAgICAgIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKworVGhpcyBzb2Z0d2FyZSBpcyBjb25maWRlbnRpYWwgaW5mb3JtYXRpb24gd2hpY2ggaXMgcHJvcHJpZXRhcnkgdG8gYW5kCithIHRyYWRlIHNlY3JldCBvZiBBUlJBWSBUZWNobm9sb2d5IENvcnBvcmF0aW9uLiAgVXNlLCBkdXBsaWNhdGlvbiwgb3IKK2Rpc2Nsb3N1cmUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgYSBzZXBhcmF0ZSBsaWNlbnNlIGFncmVlbWVudC4KKworQ29weXJpZ2h0IDE5ODUgYnkgTUlQUyBDb21wdXRlciBTeXN0ZW1zLCBJbmMuCisgCisoNikgVW5pdmVyc2l0eSBvZiBVdGFoIGFuZCB0aGUgQ29tcHV0ZXIgU3lzdGVtcyBMYWJvcmF0b3J5IChDU0wpCisgICAgW2FwcGxpZXMgb25seSB0byBocHBhKi0qLXBybyogdGFyZ2V0c10gCisKK0NvcHlyaWdodCAoYykgMTk5MCwxOTk0IFRoZSBVbml2ZXJzaXR5IG9mIFV0YWggYW5kCit0aGUgQ29tcHV0ZXIgU3lzdGVtcyBMYWJvcmF0b3J5IChDU0wpLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGlzIGhlcmVieQorZ3JhbnRlZCBwcm92aWRlZCB0aGF0ICgxKSBzb3VyY2UgY29kZSByZXRhaW5zIHRoZXNlIGNvcHlyaWdodCwgcGVybWlzc2lvbiwKK2FuZCBkaXNjbGFpbWVyIG5vdGljZXMsIGFuZCAoMikgcmVkaXN0cmlidXRpb25zIGluY2x1ZGluZyBiaW5hcmllcworcmVwcm9kdWNlIHRoZSBub3RpY2VzIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kICgzKSBhbGwgYWR2ZXJ0aXNpbmcKK21hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGRpc3BsYXkgdGhlIGZvbGxvd2luZworYWNrbm93bGVkZ2VtZW50OiBgYFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCitDb21wdXRlciBTeXN0ZW1zIExhYm9yYXRvcnkgYXQgdGhlIFVuaXZlcnNpdHkgb2YgVXRhaC4nJworCitUSEUgVU5JVkVSU0lUWSBPRiBVVEFIIEFORCBDU0wgQUxMT1cgRlJFRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSBJTiBJVFMgIkFTCitJUyIgQ09ORElUSU9OLiAgVEhFIFVOSVZFUlNJVFkgT0YgVVRBSCBBTkQgQ1NMIERJU0NMQUlNIEFOWSBMSUFCSUxJVFkgT0YKK0FOWSBLSU5EIEZPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworQ1NMIHJlcXVlc3RzIHVzZXJzIG9mIHRoaXMgc29mdHdhcmUgdG8gcmV0dXJuIHRvIGNzbC1kaXN0QGNzLnV0YWguZWR1IGFueQoraW1wcm92ZW1lbnRzIHRoYXQgdGhleSBtYWtlIGFuZCBncmFudCBDU0wgcmVkaXN0cmlidXRpb24gcmlnaHRzLgorCisoNykgU3VuIE1pY3Jvc3lzdGVtcworCitDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCitzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZSAKK2lzIHByZXNlcnZlZC4KKworKDgpIEhld2xldHQgUGFja2FyZAorCisoYykgQ29weXJpZ2h0IDE5ODYgSEVXTEVUVC1QQUNLQVJEIENPTVBBTlkKKworVG8gYW55b25lIHdobyBhY2tub3dsZWRnZXMgdGhhdCB0aGlzIGZpbGUgaXMgcHJvdmlkZWQgIkFTIElTIgord2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5OgorICAgIHBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgZmlsZQorZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0Cit0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBub3RpY2UgYXBwZWFycyBpbiBhbGwKK2NvcGllcywgYW5kIHRoYXQgdGhlIG5hbWUgb2YgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkgbm90IGJlCit1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbgorb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KK0hld2xldHQtUGFja2FyZCBDb21wYW55IG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUKK3N1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLgorCisoOSkgSGFucy1QZXRlciBOaWxzc29uCisKK0NvcHlyaWdodCAoQykgMjAwMSBIYW5zLVBldGVyIE5pbHNzb24KKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBpcworZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbm90aWNlCithbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGFyZSBwcmVzZXJ2ZWQgd2l0aCBubyBjaGFuZ2VzLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UuCisKKygxMCkgTm8gQ29weXJpZ2h0CisKK1RISVMgU09GVFdBUkUgSVMgTk9UIENPUFlSSUdIVEVECisKKygxMSkgQ3lnbnVzIFN1cHBvcnQgLyBDeWdudXMgU29sdXRpb25zCisKK0NvcHlyaWdodCAoYykgMTk5NSwgMTk5NiwgMTk5NywgMTk5OCwgMTk5OSBDeWdudXMgU3VwcG9ydAorCitUaGUgYXV0aG9ycyBoZXJlYnkgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSwKK2FuZCBsaWNlbnNlIHRoaXMgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSwgcHJvdmlkZWQKK3RoYXQgZXhpc3RpbmcgY29weXJpZ2h0IG5vdGljZXMgYXJlIHJldGFpbmVkIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgdGhpcworbm90aWNlIGlzIGluY2x1ZGVkIHZlcmJhdGltIGluIGFueSBkaXN0cmlidXRpb25zLiBObyB3cml0dGVuIGFncmVlbWVudCwKK2xpY2Vuc2UsIG9yIHJveWFsdHkgZmVlIGlzIHJlcXVpcmVkIGZvciBhbnkgb2YgdGhlIGF1dGhvcml6ZWQgdXNlcy4KK01vZGlmaWNhdGlvbnMgdG8gdGhpcyBzb2Z0d2FyZSBtYXkgYmUgY29weXJpZ2h0ZWQgYnkgdGhlaXIgYXV0aG9ycworYW5kIG5lZWQgbm90IGZvbGxvdyB0aGUgbGljZW5zaW5nIHRlcm1zIGRlc2NyaWJlZCBoZXJlLCBwcm92aWRlZCB0aGF0Cit0aGUgbmV3IHRlcm1zIGFyZSBjbGVhcmx5IGluZGljYXRlZCBvbiB0aGUgZmlyc3QgcGFnZSBvZiBlYWNoIGZpbGUgd2hlcmUKK3RoZXkgYXBwbHkuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFBsZWFzZSBub3RlIHRoYXQgdGhlIGNvcHlyaWdodCBhYm92ZSBtYXkgYmUgdXNlZCB3aXRoIHRoZSBuYW1lCisgQ3lnbnVzIFNvbHV0aW9ucyBpbnN0ZWFkIG9mIEN5Z251cyBTdXBwb3J0LiAgQm90aCBuYW1lcyBzaG91bGQKKyBiZSBjb25zaWRlcmVkIGludGVyY2hhbmdlYWJsZS4gIFRoZXNlIGNvcHlyaWdodHMgYXJlIG5vdyBvd25lZAorIGJ5IFJlZCBIYXQgSW5jb3Jwb3JhdGVkLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKygxMikgUmVkIEhhdCBJbmNvcnBvcmF0ZWQKKworQ29weXJpZ2h0IChjKSAxOTk1LCAxOTk2LCAxOTk3LCAxOTk4LCAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyIFJlZCBIYXQsIEluYy4KKworVGhlIGF1dGhvcnMgaGVyZWJ5IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUsCithbmQgbGljZW5zZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UsIHByb3ZpZGVkCit0aGF0IGV4aXN0aW5nIGNvcHlyaWdodCBub3RpY2VzIGFyZSByZXRhaW5lZCBpbiBhbGwgY29waWVzIGFuZCB0aGF0IHRoaXMKK25vdGljZSBpcyBpbmNsdWRlZCB2ZXJiYXRpbSBpbiBhbnkgZGlzdHJpYnV0aW9ucy4gTm8gd3JpdHRlbiBhZ3JlZW1lbnQsCitsaWNlbnNlLCBvciByb3lhbHR5IGZlZSBpcyByZXF1aXJlZCBmb3IgYW55IG9mIHRoZSBhdXRob3JpemVkIHVzZXMuCitNb2RpZmljYXRpb25zIHRvIHRoaXMgc29mdHdhcmUgbWF5IGJlIGNvcHlyaWdodGVkIGJ5IHRoZWlyIGF1dGhvcnMKK2FuZCBuZWVkIG5vdCBmb2xsb3cgdGhlIGxpY2Vuc2luZyB0ZXJtcyBkZXNjcmliZWQgaGVyZSwgcHJvdmlkZWQgdGhhdAordGhlIG5ldyB0ZXJtcyBhcmUgY2xlYXJseSBpbmRpY2F0ZWQgb24gdGhlIGZpcnN0IHBhZ2Ugb2YgZWFjaCBmaWxlIHdoZXJlCit0aGV5IGFwcGx5LgorCisoMTMpIERlZmF1bHQgY29weXJpZ2h0IAorCitVbmxlc3Mgb3RoZXJ3aXNlIHN0YXRlZCBpbiBlYWNoIHJlbWFpbmluZyBsaWJnbG9zcyBmaWxlLCB0aGUgcmVtYWluaW5nCitmaWxlcyBpbiB0aGUgbGliZ2xvc3Mgc3ViZGlyZWN0b3J5IGFyZSBnb3Zlcm5lZCBieSB0aGUgZm9sbG93aW5nIGNvcHlyaWdodC4KKworQ29weXJpZ2h0IChjKSAxOTk0LCAxOTk3LCAyMDAxLCAyMDAyIFJlZCBIYXQgSW5jb3Jwb3JhdGVkLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6IAorCisgICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgCisgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgIFRoZSBuYW1lIG9mIFJlZCBIYXQgSW5jb3Jwb3JhdGVkIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIAorICAgIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyAKKyAgICBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiAKK0FORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBSRUQgSEFUIElOQ09SUE9SQVRFRCBCRSBMSUFCTEUgRk9SIEFOWQorRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKK0xPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCAKK09OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIApkaWZmIC0tZ2l0IGEvbGljZW5zZXMvTElDRU5TRS1CSVRTVFJFQU0gYi9saWNlbnNlcy9MSUNFTlNFLUJJVFNUUkVBTQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzc0OTAwCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvTElDRU5TRS1CSVRTVFJFQU0KQEAgLTAsMCArMSwxMSBAQAorKGMpIENvcHlyaWdodCAxOTg5LTE5OTIsIEJpdHN0cmVhbSBJbmMuLCBDYW1icmlkZ2UsIE1BLgorCitZb3UgYXJlIGhlcmVieSBncmFudGVkIHBlcm1pc3Npb24gdW5kZXIgYWxsIEJpdHN0cmVhbSBwcm9wcmlldHkgcmlnaHRzCit0byB1c2UsIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgc2VsbCwgYW5kIHJlZGlzdHJpYnV0ZSB0aGUgNCBCaXRzdHJlYW0KK0NoYXJ0ZXIgKHIpIFR5cGUgMSBvdXRsaW5lIGZvbnRzIGFuZCB0aGUgNCBDb3VyaWVyIFR5cGUgMSBvdXRsaW5lIGZvbnRzCitmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgcmVzdHJpY3Rpb247IHByb3ZpZGVkLCB0aGF0IHRoaXMgbm90aWNlIGlzCitsZWZ0IGludGFjdCBvbiBhbGwgY29waWVzIG9mIHN1Y2ggZm9udHMgYW5kIHRoYXQgQml0c3RyZWFtJ3MgdHJhZGVtYXJrCitpcyBhY2tub3dsZWRnZWQgYXMgc2hvd24gYmVsb3cgb24gYWxsIHVubW9kaWZpZWQgY29waWVzIG9mIHRoZSA0IENoYXJ0ZXIKK1R5cGUgMSBmb250cy4KKworQklUU1RSRUFNIENIQVJURVIgaXMgYSByZWdpc3RlcmVkIHRyYWRlbWFyayBvZiBCaXRzdHJlYW0gSW5jLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvTExHUEwtMi4xIGIvbGljZW5zZXMvTExHUEwtMi4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExODk0NjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9MTEdQTC0yLjEKQEAgLTAsMCArMSw2NiBAQAoraHR0cDovL29wZW5zb3VyY2UuZnJhbnouY29tL3ByZWFtYmxlLmh0bWwKKworUHJlYW1ibGUgdG8gdGhlIEdudSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorCitDb3B5cmlnaHQgKGMpIDIwMDAgRnJhbnogSW5jb3Jwb3JhdGVkLCBCZXJrZWxleSwgQ0EgOTQ3MDQKKworVGhlIGNvbmNlcHQgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuMQorKCJMR1BMIikgaGFzIGJlZW4gYWRvcHRlZCB0byBnb3Zlcm4gdGhlIHVzZSBhbmQgZGlzdHJpYnV0aW9uIG9mCithYm92ZS1tZW50aW9uZWQgYXBwbGljYXRpb24uIEhvd2V2ZXIsIHRoZSBMR1BMIHVzZXMgdGVybWlub2xvZ3kgdGhhdAoraXMgbW9yZSBhcHByb3ByaWF0ZSBmb3IgYSBwcm9ncmFtIHdyaXR0ZW4gaW4gQyB0aGFuIG9uZSB3cml0dGVuIGluCitMaXNwLiBOZXZlcnRoZWxlc3MsIHRoZSBMR1BMIGNhbiBzdGlsbCBiZSBhcHBsaWVkIHRvIGEgTGlzcCBwcm9ncmFtIGlmCitjZXJ0YWluIGNsYXJpZmljYXRpb25zIGFyZSBtYWRlLiBUaGlzIGRvY3VtZW50IGRldGFpbHMgdGhvc2UKK2NsYXJpZmljYXRpb25zLiBBY2NvcmRpbmdseSwgdGhlIGxpY2Vuc2UgZm9yIHRoZSBvcGVuLXNvdXJjZSBMaXNwCithcHBsaWNhdGlvbnMgY29uc2lzdHMgb2YgdGhpcyBkb2N1bWVudCBwbHVzIHRoZSBMR1BMLiBXaGVyZXZlciB0aGVyZQoraXMgYSBjb25mbGljdCBiZXR3ZWVuIHRoaXMgZG9jdW1lbnQgYW5kIHRoZSBMR1BMLCB0aGlzIGRvY3VtZW50IHRha2VzCitwcmVjZWRlbmNlIG92ZXIgdGhlIExHUEwuCisKK0EgIkxpYnJhcnkiIGluIExpc3AgaXMgYSBjb2xsZWN0aW9uIG9mIExpc3AgZnVuY3Rpb25zLCBkYXRhIGFuZAorZm9yZWlnbiBtb2R1bGVzLiBUaGUgZm9ybSBvZiB0aGUgTGlicmFyeSBjYW4gYmUgTGlzcCBzb3VyY2UgY29kZSAoZm9yCitwcm9jZXNzaW5nIGJ5IGFuIGludGVycHJldGVyKSBvciBvYmplY3QgY29kZSAodXN1YWxseSB0aGUgcmVzdWx0IG9mCitjb21waWxhdGlvbiBvZiBzb3VyY2UgY29kZSBvciBidWlsdCB3aXRoIHNvbWUgb3RoZXIKK21lY2hhbmlzbXMpLiBGb3JlaWduIG1vZHVsZXMgYXJlIG9iamVjdCBjb2RlIGluIGEgZm9ybSB0aGF0IGNhbiBiZQorbGlua2VkIGludG8gYSBMaXNwIGV4ZWN1dGFibGUuIFdoZW4gd2Ugc3BlYWsgb2YgZnVuY3Rpb25zIHdlIGRvIHNvIGluCit0aGUgbW9zdCBnZW5lcmFsIHdheSB0byBpbmNsdWRlLCBpbiBhZGRpdGlvbiwgbWV0aG9kcyBhbmQgdW5uYW1lZAorZnVuY3Rpb25zLiBMaXNwICJkYXRhIiBpcyBhbHNvIGEgZ2VuZXJhbCB0ZXJtIHRoYXQgaW5jbHVkZXMgdGhlIGRhdGEKK3N0cnVjdHVyZXMgcmVzdWx0aW5nIGZyb20gZGVmaW5pbmcgTGlzcCBjbGFzc2VzLiBBIExpc3AgYXBwbGljYXRpb24KK21heSBpbmNsdWRlIHRoZSBzYW1lIHNldCBvZiBMaXNwIG9iamVjdHMgYXMgZG9lcyBhIExpYnJhcnksIGJ1dCB0aGlzCitkb2VzIG5vdCBtZWFuIHRoYXQgdGhlIGFwcGxpY2F0aW9uIGlzIG5lY2Vzc2FyaWx5IGEgIndvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5IiBpdCBjb250YWlucy4KKworVGhlIExpYnJhcnkgY29uc2lzdHMgb2YgZXZlcnl0aGluZyBpbiB0aGUgZGlzdHJpYnV0aW9uIGZpbGUgc2V0IGJlZm9yZQorYW55IG1vZGlmaWNhdGlvbnMgYXJlIG1hZGUgdG8gdGhlIGZpbGVzLiBJZiBhbnkgb2YgdGhlIGZ1bmN0aW9ucyBvcgorY2xhc3NlcyBpbiB0aGUgTGlicmFyeSBhcmUgcmVkZWZpbmVkIGluIG90aGVyIGZpbGVzLCB0aGVuIHRob3NlCityZWRlZmluaXRpb25zIEFSRSBjb25zaWRlcmVkIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeS4gSWYKK2FkZGl0aW9uYWwgbWV0aG9kcyBhcmUgYWRkZWQgdG8gZ2VuZXJpYyBmdW5jdGlvbnMgaW4gdGhlIExpYnJhcnksCit0aG9zZSBhZGRpdGlvbmFsIG1ldGhvZHMgYXJlIE5PVCBjb25zaWRlcmVkIGEgd29yayBiYXNlZCBvbiB0aGUKK0xpYnJhcnkuIElmIExpYnJhcnkgY2xhc3NlcyBhcmUgc3ViY2xhc3NlZCwgdGhlc2Ugc3ViY2xhc3NlcyBhcmUgTk9UCitjb25zaWRlcmVkIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeS4gSWYgdGhlIExpYnJhcnkgaXMgbW9kaWZpZWQgdG8KK2V4cGxpY2l0bHkgY2FsbCBvdGhlciBmdW5jdGlvbnMgdGhhdCBhcmUgbmVpdGhlciBwYXJ0IG9mIExpc3AgaXRzZWxmCitub3IgYW4gYXZhaWxhYmxlIGFkZC1vbiBtb2R1bGUgdG8gTGlzcCwgdGhlbiB0aGUgZnVuY3Rpb25zIGNhbGxlZCBieQordGhlIG1vZGlmaWVkIExpYnJhcnkgQVJFIGNvbnNpZGVyZWQgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LiBUaGUKK2dvYWwgaXMgdG8gZW5zdXJlIHRoYXQgdGhlIExpYnJhcnkgd2lsbCBjb21waWxlIGFuZCBydW4gd2l0aG91dAorZ2V0dGluZyB1bmRlZmluZWQgZnVuY3Rpb24gZXJyb3JzLgorCitJdCBpcyBwZXJtaXR0ZWQgdG8gYWRkIHByb3ByaWV0YXJ5IHNvdXJjZSBjb2RlIHRvIHRoZSBMaWJyYXJ5LCBidXQgaXQKK211c3QgYmUgZG9uZSBpbiBhIHdheSBzdWNoIHRoYXQgdGhlIExpYnJhcnkgd2lsbCBzdGlsbCBydW4gd2l0aG91dAordGhhdCBwcm9wcmlldGFyeSBjb2RlIHByZXNlbnQuIFNlY3Rpb24gNSBvZiB0aGUgTEdQTCBkaXN0aW5ndWlzaGVzCitiZXR3ZWVuIHRoZSBjYXNlIG9mIGEgbGlicmFyeSBiZWluZyBkeW5hbWljYWxseSBsaW5rZWQgYXQgcnVudGltZSBhbmQKK29uZSBiZWluZyBzdGF0aWNhbGx5IGxpbmtlZCBhdCBidWlsZCB0aW1lLiBTZWN0aW9uIDUgb2YgdGhlIExHUEwKK3N0YXRlcyB0aGF0IHRoZSBmb3JtZXIgcmVzdWx0cyBpbiBhbiBleGVjdXRhYmxlIHRoYXQgaXMgYSAid29yayB0aGF0Cit1c2VzIHRoZSBMaWJyYXJ5LiIgU2VjdGlvbiA1IG9mIHRoZSBMR1BMIHN0YXRlcyB0aGF0IHRoZSBsYXR0ZXIKK3Jlc3VsdHMgaW4gb25lIHRoYXQgaXMgYSAiZGVyaXZhdGl2ZSBvZiB0aGUgTGlicmFyeSIsIHdoaWNoIGlzCit0aGVyZWZvcmUgY292ZXJlZCBieSB0aGUgTEdQTC4gU2luY2UgTGlzcCBvbmx5IG9mZmVycyBvbmUgY2hvaWNlLAord2hpY2ggaXMgdG8gbGluayB0aGUgTGlicmFyeSBpbnRvIGFuIGV4ZWN1dGFibGUgYXQgYnVpbGQgdGltZSwgd2UKK2RlY2xhcmUgdGhhdCwgZm9yIHRoZSBwdXJwb3NlIGFwcGx5aW5nIHRoZSBMR1BMIHRvIHRoZSBMaWJyYXJ5LCBhbgorZXhlY3V0YWJsZSB0aGF0IHJlc3VsdHMgZnJvbSBsaW5raW5nIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5Igord2l0aCB0aGUgTGlicmFyeSBpcyBjb25zaWRlcmVkIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiBhbmQgaXMKK3RoZXJlZm9yZSBOT1QgY292ZXJlZCBieSB0aGUgTEdQTC4KKworQmVjYXVzZSBvZiB0aGlzIGRlY2xhcmF0aW9uLCBzZWN0aW9uIDYgb2YgTEdQTCBpcyBub3QgYXBwbGljYWJsZSB0bwordGhlIExpYnJhcnkuIEhvd2V2ZXIsIGluIGNvbm5lY3Rpb24gd2l0aCBlYWNoIGRpc3RyaWJ1dGlvbiBvZiB0aGlzCitleGVjdXRhYmxlLCB5b3UgbXVzdCBhbHNvIGRlbGl2ZXIsIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kCitjb25kaXRpb25zIG9mIHRoZSBMR1BMLCB0aGUgc291cmNlIGNvZGUgb2YgTGlicmFyeSAob3IgeW91ciBkZXJpdmF0aXZlCit0aGVyZW9mKSB0aGF0IGlzIGluY29ycG9yYXRlZCBpbnRvIHRoaXMgZXhlY3V0YWJsZS4KKworRW5kIG9mIERvY3VtZW50IApkaWZmIC0tZ2l0IGEvbGljZW5zZXMvTE9LSS1FVUxBIGIvbGljZW5zZXMvTE9LSS1FVUxBCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzOGFmZmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9MT0tJLUVVTEEKQEAgLTAsMCArMSwyMzQgQEAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitMSU1JVEVEIFNPRlRXQVJFIFdBUlJBTlRZIEFORCBMSUNFTlNFIEFHUkVFTUVOVAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCisKK1BMRUFTRSBSRUFEIENBUkVGVUxMWS4gQlkgVVNJTkcgT1IgSU5TVEFMTElORyBUSElTIFNPRlRXQVJFLCBPUiBCWSBQTEFDSU5HIE9SCitDT1BZSU5HIFRISVMgU09GVFdBUkUgT04gWU9VUiBDT01QVVRFUiBIQVJEV0FSRSwgQ09NUFVURVIgUkFNIE9SIE9USEVSIFNUT1JBR0UKK01FRElVTSwgWU9VIEFSRSBBR1JFRUlORyBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLiBJRiBZT1UgRE8KK05PVCBBR1JFRSBUTyBUSEVTRSBURVJNUywgUFJPTVBUTFkgUkVUVVJOIFRIRSBQUk9EVUNUIElOIElUUyBQQUNLQUdJTkcgVE8gVEhFCitQTEFDRSBXSEVSRSBZT1UgT0JUQUlORUQgSVQuCisKKworCitUaGlzIExJTUlURUQgU09GVFdBUkUgV0FSUkFOVFkgQU5EIExJQ0VOU0UgQUdSRUVNRU5UICh0aGlzICJBZ3JlZW1lbnQiKSwKK2luY2x1ZGluZyB0aGUgTGltaXRlZCBXYXJyYW50eSBhbmQgb3RoZXIgc3BlY2lhbCBwcm92aXNpb25zLCBpcyBhIGxlZ2FsCithZ3JlZW1lbnQgYmV0d2VlbiBZb3UgKGVpdGhlciBhbiBpbmRpdmlkdWFsIG9yIGFuIGVudGl0eSkgYW5kIExva2kgU29mdHdhcmUsCitJbmMuIGFuZCBpdHMgbGljZW5zb3JzLCAoY29sbGVjdGl2ZWx5LCB0aGUgIk93bmVyIikgcmVnYXJkaW5nIHRoaXMgc29mdHdhcmUKK3Byb2R1Y3QgYW5kIHRoZSBtYXRlcmlhbHMgY29udGFpbmVkIHRoZXJlaW4gYW5kIHJlbGF0ZWQgdGhlcmV0by4gWW91ciBhY3Qgb2YKK2luc3RhbGxpbmcgYW5kL29yIG90aGVyd2lzZSB1c2luZyB0aGUgc29mdHdhcmUgY29uc3RpdHV0ZXMgWW91ciBhZ3JlZW1lbnQgdG8gYmUKK2JvdW5kIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudC4gSWYgWW91IGRvIG5vdCBhZ3JlZSB0byB0aGUgdGVybXMgb2YgdGhpcworQWdyZWVtZW50LCBwcm9tcHRseSByZXR1cm4gdGhlIHNvZnR3YXJlIHBhY2thZ2luZyBhbmQgdGhlIGFjY29tcGFueWluZworbWF0ZXJpYWxzIChpbmNsdWRpbmcgYW55IGhhcmR3YXJlLCBtYW51YWxzLCBvdGhlciB3cml0dGVuIG1hdGVyaWFscyBhbmQKK3BhY2thZ2luZykgdG8gdGhlIHBsYWNlIFlvdSBvYnRhaW5lZCB0aGVtLCBhbG9uZyB3aXRoIHlvdXIgcmVjZWlwdCwgZm9yIGEgZnVsbAorcmVmdW5kLgorCitHcmFudCBvZiBMaW1pdGVkIE5vbi1FeGNsdXNpdmUgTGljZW5zZS4gVGhpcyBBZ3JlZW1lbnQgcGVybWl0cyBZb3UgdG8gdXNlIG9uZQorKDEpIGNvcHkgb2YgdGhlIHNvZnR3YXJlIHByb2dyYW0ocykgKHRoZSAiU09GVFdBUkUiKSBpbmNsdWRlZCBpbiB0aGlzIHBhY2thZ2UKK2ZvciB5b3VyIHBlcnNvbmFsIHVzZSBvbiBhIHNpbmdsZSBob21lIG9yIHBvcnRhYmxlIGNvbXB1dGVyLiBUaGUgU09GVFdBUkUgaXMgaW4KKyJ1c2UiIG9uIGEgY29tcHV0ZXIgd2hlbiBpdCBpcyBsb2FkZWQgaW50byB0ZW1wb3JhcnkgbWVtb3J5IChpLmUuLCBSQU0pIG9yCitpbnN0YWxsZWQgaW50byB0aGUgcGVybWFuZW50IG1lbW9yeSAoZS5nLiwgaGFyZCBkaXNrLCBDRC1ST00sIG9yIG90aGVyIHN0b3JhZ2UKK2RldmljZSkgb2YgdGhhdCBjb21wdXRlci4gSW5zdGFsbGF0aW9uIG9uIGEgbmV0d29yayBzZXJ2ZXIgaXMgc3RyaWN0bHkKK3Byb2hpYml0ZWQsIGV4Y2VwdCB1bmRlciBhIHNwZWNpYWwgYW5kIHNlcGFyYXRlIG5ldHdvcmsgbGljZW5zZSBvYnRhaW5lZCBmcm9tCitPd25lcjsgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgbm90IHNlcnZlIGFzIHN1Y2ggbmVjZXNzYXJ5IHNwZWNpYWwgbmV0d29yaworbGljZW5zZS4gSW5zdGFsbGF0aW9uIG9uIGEgbmV0d29yayBzZXJ2ZXIgY29uc3RpdHV0ZXMgInVzZSIgdGhhdCBtdXN0IGNvbXBseQord2l0aCB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQuIFRoaXMgbGljZW5zZSBpcyBub3QgYSBzYWxlIG9mIHRoZSBvcmlnaW5hbAorU09GVFdBUkUgb3IgYW55IGNvcHkgdGhlcmVvZi4KKworSW50ZWxsZWN0dWFsIFByb3BlcnR5IE93bmVyc2hpcC4gT3duZXIgcmV0YWlucyBhbGwgcmlnaHQsIHRpdGxlIGFuZCBpbnRlcmVzdCB0bwordGhpcyBTT0ZUV0FSRSBhbmQgdGhlIGFjY29tcGFueWluZyBtYW51YWwocyksIHBhY2thZ2luZyBhbmQgb3RoZXIgd3JpdHRlbgorbWF0ZXJpYWxzIChjb2xsZWN0aXZlbHksIHRoZSAiQUNDT01QQU5ZSU5HIE1BVEVSSUFMUyIpLCBpbmNsdWRpbmcsIGJ1dCBub3QKK2xpbWl0ZWQgdG8sIGFsbCBjb3B5cmlnaHRzLCB0cmFkZW1hcmtzLCB0cmFkZSBzZWNyZXRzLCB0cmFkZSBuYW1lcywgcHJvcHJpZXRhcnkKK3JpZ2h0cywgcGF0ZW50cywgdGl0bGVzLCBjb21wdXRlciBjb2RlcywgYXVkaW92aXN1YWwgZWZmZWN0cywgdGhlbWVzLAorY2hhcmFjdGVycywgY2hhcmFjdGVyIG5hbWVzLCBzdG9yaWVzLCBkaWFsb2csIHNldHRpbmdzLCBhcnR3b3JrLCBzb3VuZHMKK2VmZmVjdHMsIG11c2ljYWwgd29ya3MsIGFuZCBtb3JhbCByaWdodHMuIFRoZSBTT0ZUV0FSRSBhbmQgQUNDT01QQU5ZSU5HCitNQVRFUklBTFMgYXJlIHByb3RlY3RlZCBieSBVbml0ZWQgU3RhdGVzIGNvcHlyaWdodCBsYXcgYW5kIGFwcGxpY2FibGUgY29weXJpZ2h0CitsYXdzIGFuZCB0cmVhdGllcyB0aHJvdWdob3V0IHRoZSBXb3JsZC4gQWxsIHJpZ2h0cyBhcmUgcmVzZXJ2ZWQuIFRoZSBTT0ZUV0FSRQorYW5kIEFDQ09NUEFOWUlORyBNQVRFUklBTFMgbWF5IG5vdCBiZSBjb3BpZWQgb3IgcmVwcm9kdWNlZCBpbiBhbnkgbWFubmVyIG9yCittZWRpdW0sIGluIHdob2xlIG9yIGluIHBhcnQsIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBjb25zZW50IGZyb20gT3duZXIuIEFueQorcGVyc29ucyBjb3B5aW5nIG9yIHJlcHJvZHVjaW5nIGFsbCBvciBhbnkgcG9ydGlvbiBvZiB0aGUgU09GVFdBUkUgb3IKK0FDQ09NUEFOWUlORyBNQVRFUklBTFMsIGluIGFueSBtYW5uZXIgb3IgbWVkaXVtLCB3aWxsIGJlIHdpbGxmdWxseSB2aW9sYXRpbmcKK3RoZSBjb3B5cmlnaHQgbGF3cyBhbmQgbWF5IGJlIHN1YmplY3QgdG8gY2l2aWwgb3IgY3JpbWluYWwgcGVuYWx0aWVzLgorCitTT0ZUV0FSRSBCYWNrdXAgb3IgQXJjaGl2aW5nLiBBZnRlciBZb3UgaW5zdGFsbCB0aGUgU09GVFdBUkUgaW50byB0aGUgcGVybWFuZW50CittZW1vcnkgb2YgYSBjb21wdXRlciwgWW91IG1heSBrZWVwIGFuZCB1c2UgdGhlIG9yaWdpbmFsIGRpc2socykgYW5kL29yIENELVJPTQorKHRoZSAiU3RvcmFnZSBNZWRpYSIpIG9ubHkgZm9yIGJhY2t1cCBvciBhcmNoaXZhbCBwdXJwb3Nlcy4KKworUmVzdHJpY3Rpb25zLiBPdGhlciB0aGFuIGFzIHByb3ZpZGVkIHNwZWNpZmljYWxseSBpbiB0aGlzIEFncmVlbWVudCwgWW91IGFyZQorbm90IHBlcm1pdHRlZCB0byBjb3B5IG9yIG90aGVyd2lzZSByZXByb2R1Y2UgdGhlIFNPRlRXQVJFIG9yIEFDQ09NUEFOWUlORworTUFURVJJQUxTOyBtb2RpZnkgb3IgcHJlcGFyZSBkZXJpdmF0aXZlIGNvcGllcyBiYXNlZCBvbiB0aGUgU09GVFdBUkUgb3IKK0FDQ09NUEFOWUlORyBNQVRFUklBTFM7IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBTT0ZUV0FSRSBvciBBQ0NPTVBBTllJTkcKK01BVEVSSUFMUyBieSBzYWxlIG9yIG90aGVyIHRyYW5zZmVyIG9mIG93bmVyc2hpcDsgcmVudCwgbGVhc2UsIG9yIGxlbmQgdGhlCitTT0ZUV0FSRSBvciBBQ0NPTVBBTllJTkcgTUFURVJJQUxTOyBvciB0byBkaXNwbGF5IHRoZSBTT0ZUV0FSRSBvciBBQ0NPTVBBTllJTkcKK01BVEVSSUFMUyBwdWJsaWNseS4gWW91IGFyZSBleHByZXNzbHkgcHJvaGliaXRlZCBmcm9tIHRyYW5zbWl0dGluZyB0aGUgU09GVFdBUkUKK29yIEFDQ09NUEFOWUlORyBNQVRFUklBTFMgZWxlY3Ryb25pY2FsbHkgb3Igb3RoZXJ3aXNlIG92ZXIgdGhlIEludGVybmV0IG9yCit0aHJvdWdoIGFueSBvdGhlciBtZWRpYSBvciB0byBhbnkgb3RoZXIgcGFydHkuIFlvdSBhcmUgZXhwcmVzc2x5IHByb2hpYml0ZWQKK2Zyb20gdXNpbmcgb3Igc2VsbGluZyBhbnkgdW5hdXRob3JpemVkIGxldmVsIHBhY2tzLCBhZGQtb24gcGFja3Mgb3Igc2VxdWVscworYmFzZWQgdXBvbiBvciByZWxhdGVkIHRvIHRoZSBTT0ZUV0FSRSBvciBBQ0NPTVBBTllJTkcgTUFURVJJQUxTLiBZb3UgYXJlCitleHByZXNzbHkgcHJvaGliaXRlZCBmcm9tIHNlbGxpbmcgb3IgdXNpbmcgYW55IGNoYXJhY3RlcnMgb3Igb3RoZXIgY29tcG9uZW50cworb2YgdGhlIGdhbWUgZm9yIGFueSBwdXJwb3NlLiBZb3UgYXJlIGV4cHJlc3NseSBwcm9oaWJpdGVkIGZyb20gc2VsbGluZyBvcgorb3RoZXJ3aXNlIHByb2ZpdGluZyBmcm9tIGFueSBsZXZlbHMsIGFkZC1vbiBwYWNrcywgc2VxdWVscyBvciBvdGhlciBpdGVtcworY3JlYXRlZCBieSB1dGlsaXphdGlvbiBvZiB0aGUgU09GVFdBUkUncyBsZXZlbCBlZGl0b3IuIFlPVSBBUkUgTk9UIFBFUk1JVFRFRCBUTworUkVWRVJTRSBFTkdJTkVFUiwgREVDT01QSUxFIE9SIERJU0FTU0VNQkxFIFRIRSBTT0ZUV0FSRSBJTiBBTlkgV0FZLiBBbnkgY29weWluZworb2YgdGhlIFNPRlRXQVJFIG9yIEFDQ09NUEFOWUlORyBNQVRFUklBTFMgbm90IHNwZWNpZmljYWxseSBhbGxvd2VkIGluIHRoaXMKK0FncmVlbWVudCBpcyBhIHZpb2xhdGlvbiBvZiB0aGlzIEFncmVlbWVudC4KKworTGltaXRlZCBXYXJyYW50eSBhbmQgV2FycmFudHkgRGlzY2xhaW1lcnMuCisKK0xJTUlURUQgV0FSUkFOVFkuIExva2kgU29mdHdhcmUsIEluYy4gKCJMb2tpIikgd2FycmFudHMgdG8gdGhlIG9yaWdpbmFsCitwdXJjaGFzZXIgb2YgdGhlIGNvbXB1dGVyIHNvZnR3YXJlIHByb2R1Y3QsIGZvciBhIHBlcmlvZCBvZiBuaW5ldHkgKDkwKSBkYXlzCitmcm9tIHRoZSBkYXRlIG9mIG9yaWdpbmFsIHB1cmNoYXNlLCB0aGF0IHVuZGVyIG5vcm1hbCB1c2UsIHRoZSBtZWRpYSBhbmQgdGhlCit1c2VyIGRvY3VtZW50YXRpb24gYXJlIGZyZWUgZnJvbSBkZWZlY3RzIGluIG1hdGVyaWFscyBhbmQgd29ya21hbnNoaXAuCisKK1dBUlJBTlRZIENMQUlNUy4gVG8gbWFrZSBhIHdhcnJhbnR5IGNsYWltIHVuZGVyIHRoaXMgbGltaXRlZCB3YXJyYW50eSwgcmV0dXJuCit0aGUgcHJvZHVjdCB0byB1cyBhdCB0aGUgYWRkcmVzcyBiZWxvdyB3aXRoaW4gOTAgZGF5cyBvZiBwdXJjaGFzZS4gSW5jbHVkZSBhCitjb3B5IG9mIHRoZSBkYXRlZCBwdXJjaGFzZSByZWNlaXB0LCB5b3VyIG5hbWUsIHlvdXIgcmV0dXJuIGFkZHJlc3MsIGFuZCBhCitzdGF0ZW1lbnQgb2YgdGhlIGRlZmVjdC4gTG9raSB3aWxsIHJlcGxhY2UgdGhlIHByb2R1Y3QgYW5kIHJldHVybiBpdCB0byB5b3UKKyhwb3N0YWdlIHByZXBhaWQpIG9yIGlzc3VlIHlvdSB3aXRoIGEgY3JlZGl0IGVxdWFsIHRvIHRoZSBwdXJjaGFzZSBwcmljZS4gSWYKK3RoZSBwcm9kdWN0IHdhcyBkYW1hZ2VkIHRocm91Z2ggbWlzdXNlIG9yIGFjY2lkZW50LCB5b3Ugd2lsbCBuZWVkIHRvIGZvbGxvdyB0aGUKK3JldHVybnMgYWZ0ZXIgd2FycmFudHkgcG9saWN5IGRldGFpbGVkIGJlbG93LgorCitSRVRVUk5TIEFGVEVSIFdBUlJBTlRZLiBUbyByZXBsYWNlIGRlZmVjdGl2ZSBtZWRpYSBhZnRlciB0aGUgOTAtZGF5IHdhcnJhbnR5CitwZXJpb2QgaGFzIGV4cGlyZWQsIHNlbmQgdGhlIG9yaWdpbmFsIGRpc2MocykgdG8gdGhlIGFkZHJlc3MgYmVsb3cuIEVuY2xvc2UgYQorc3RhdGVtZW50IG9mIHRoZSBkZWZlY3QsIHlvdXIgbmFtZSwgeW91ciByZXR1cm4gYWRkcmVzcywgYW5kIGEgY2hlY2sgb3IgbW9uZXkKK29yZGVyIGZvciAkMTAuMDAgdG86CisKKwlMb2tpIFNvZnR3YXJlLCBJbmMuCisJQ3VzdG9tZXIgV2FycmFudHkKKwkyNTAgRWwgQ2FtaW5vIFJlYWwsIFN1aXRlIDEwMAorCVR1c3RpbiwgQ0EgOTI3ODAKKworTk9URTogV2Ugc3VnZ2VzdCB5b3Ugc2VuZCB5b3VyIHBhY2thZ2UgaW4gYSBtYW5uZXIgdGhhdCBpcyB0cmFjZWFibGUuCisKK0NVU1RPTUVSJ1MgUkVNRURZLiBUaGUgTElNSVRFRCBXQVJSQU5UWSBpcyBZb3VyIGV4Y2x1c2l2ZSByZW1lZHksIGFuZCB0aGUKK2VudGlyZSBsaWFiaWxpdHkgb2YgT3duZXIuIEJ5IG9wZW5pbmcgdGhlIHNlYWxlZCBzb2Z0d2FyZSBwYWNrYWdpbmcsIGluc3RhbGxpbmcKK2FuZC9vciBvdGhlcndpc2UgdXNpbmcgdGhlIFNPRlRXQVJFIG9yIEFDQ09NUEFOWUlORyBNQVRFUklBTFMsIHlvdSBoZXJlYnkgYWdyZWUKK3RvIHdhaXZlIGFueSBhbmQgYWxsIG90aGVyIHJlbWVkaWVzIHlvdSBtYXkgaGF2ZSBhdCBsYXcgb3IgaW4gZXF1aXR5LiBBbnkgc3VjaAorcmVtZWRpZXMgeW91IG1heSBub3Qgd2FpdmUgYXMgYSBtYXR0ZXIgb2YgcHVibGljIHBvbGljeSwgeW91IGhlcmVieSBhc3NpZ24sIG9yCitzaGFsbCBhc3NpZ24gYXMgdGhleSBiZWNvbWUgYXZhaWxhYmxlLCBvdmVyIHRvIE93bmVyLgorCitXQVJSQU5UWSBESVNDTEFJTUVSUy4gRVhDRVBUIEZPUiBUSEUgRVhQUkVTUyBMSU1JVEVEIFdBUlJBTlRZIFNFVCBGT1JUSCBBQk9WRSwKK09XTkVSIE1BS0VTIE5PIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IgSU1QTElFRCwgT1JBTCBPUiBXUklUVEVOLCBDT05DRVJOSU5HIFRIRQorUFJPRFVDVFMgT1IgQU5ZIENPTVBPTkVOVCBQQVJUIFRIRVJFT0YuIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgVEhBVCBNQVkgQkUKK0lNUE9TRUQgQlkgQVBQTElDQUJMRSBMQVcgQVJFIExJTUlURUQgSU4gQUxMIFJFU1BFQ1RTIFRPIFRIRSBGVUxMRVNUIEVYVEVOVAorQUxMT1dFRCBBTkQgVE8gVEhFIERVUkFUSU9OIE9GIFRIRSBMSU1JVEVEIFdBUlJBTlRZLiBPV05FUiBET0VTIE5PVCBSRVBSRVNFTlQsCitXQVJSQU5UIE9SIEdVQVJBTlRFRSBUSEUgUVVBTElUWSBPUiBUSEUgUEVSRk9STUFOQ0UgT0YgVEhFIFNPRlRXQVJFIE9SCitBQ0NPTVBBTllJTkcgTUFURVJJQUxTIE9USEVSIFRIQU4gQVMgU0VUIEZPUlRIIElOIFRIRSBBQk9WRSBMSU1JVEVEIFdBUlJBTlRZLgorT1dORVIgQUxTTyBET0VTIE5PVCBSRVBSRVNFTlQsIFdBUlJBTlQgT1IgR1VBUkFOVEVFIFRIQVQgVEhFIFNPRlRXQVJFIE9SCitBQ0NPTVBBTllJTkcgTUFURVJJQUxTJyBDQVBBQklMSVRJRVMgV0lMTCBNRUVUIFlPVVIgTkVFRFMgT1IgVEhBVCBUSEUgU09GVFdBUkUKK1dJTEwgQ09OVElOVU9VU0xZIE9QRVJBVEUsIEJFIEVSUk9SIEZSRUUsIE9SIFRIQVQgUFJPQkxFTVMgV0lMTCBCRSBDT1JSRUNURUQuCisKK05PIE9SQUwgT1IgV1JJVFRFTiBJTkZPUk1BVElPTiBPUiBBRFZJQ0UgR0lWRU4gQlkgT1dORVIsIElUUyBERUFMRVJTLAorRElTVFJJQlVUT1JTLCBESVJFQ1RPUlMsIE9GRklDRVJTLCBFTVBMT1lFRVMsIEFHRU5UUywgQ09OVFJBQ1RPUlMgT1IgQUZGSUxJQVRFUworU0hBTEwgQ1JFQVRFIEFOWSBPVEhFUiBXQVJSQU5UWSBPUiBFWFRFTkQgT1IgRVhQQU5EIFRIRSBTQ09QRSBPRiBUSElTIFdBUlJBTlRZLgorWU9VIE1BWSBOT1QgUkVMWSBPTiBBTlkgU1VDSCBJTkZPUk1BVElPTiBPUiBBRFZJQ0UuCisKK1NPTUUgU1RBVEVTIERPIE5PVCBBTExPVyBMSU1JVEFUSU9OUyBPTiBIT1cgTE9ORyBBTiBJTVBMSUVEIFdBUlJBTlRZIExBU1RTLCBTTworVEhFIEFCT1ZFIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuIFRISVMgTElNSVRFRCBXQVJSQU5UWSBHSVZFUyBZT1UKK1NQRUNJRklDIExFR0FMIFJJR0hUUyBBTkQgWU9VIE1BWSBBTFNPIEhBVkUgT1RIRVIgUklHSFRTIFdISUNIIE1BWSBWQVJZIEZST00KK1NUQVRFIFRPIFNUQVRFLgorCitMSUFCSUxJVFkgTElNSVRBVElPTi4gVG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywgYW5kCityZWdhcmRsZXNzIG9mIHdoZXRoZXIgYW55IHJlbWVkeSBzZXQgZm9ydGggaGVyZWluIGZhaWxzIG9mIGl0cyBlc3NlbnRpYWwKK3B1cnBvc2UsIElOIE5PIEVWRU5UIFdJTEwgT1dORVIsIElUUyBESVJFQ1RPUlMsIE9GRklDRVJTLCBFTVBMT1lFRVMsIEFHRU5UUyBPUgorQUZGSUxJQVRFUyBOT1IgQU5ZT05FIEVMU0UgSU5WT0xWRUQgSU4gVEhFIERFVkVMT1BNRU5ULCBNQU5VRkFDVFVSRSBPUgorRElTVFJJQlVUSU9OIE9GIFRIRSBTT0ZUV0FSRSBPUiBUSEUgQUNDT01QQU5ZSU5HIE1BVEVSSUFMUyBCRSBMSUFCTEUgRk9SIEFOWQorREFNQUdFUyBXSEFUU09FVkVSLCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBESVJFQ1QgT1IgSU5ESVJFQ1Q7CitJTkNJREVOVEFMOyBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgRk9SIFBFUlNPTkFMIElOSlVSWSwgUEVSU09OQUwgUFJPUEVSVFksCitMT1NTIE9GIEJVU0lORVNTIFBST0ZJVFMsIEJVU0lORVNTIElOVEVSUlVQVElPTiwgTE9TUyBPRiBCVVNJTkVTUyBJTkZPUk1BVElPTiwKK0xPU1MgT0YgVEVYVCBPUiBEQVRBIFNUT1JFRCBJTiBPUiBVU0VEIFdJVEggVEhFIFNPRlRXQVJFIElOQ0xVRElORyBUSEUgQ09TVCBPRgorUkVDT1ZFUklORyBPUiBSRVBST0RVQ0lORyBUSEUgVEVYVCBPUiBEQVRBLCBPUiBBTlkgT1RIRVIgUEVDVU5JQVJZIExPU1MsCitBUklTSU5HIEZST00gT1IgT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSElTIFNPRlRXQVJFLiBUSElTCitMSUFCSUxJVFkgTElNSVRBVElPTiBBUFBMSUVTIEVWRU4gSUYgWU9VIE9SIEFOWU9ORSBFTFNFIEhBUyBBRFZJU0VEIE9XTkVSIE9SCitBTlkgT0YgSVRTIEFVVEhPUklaRUQgUkVQUkVTRU5UQVRJVkVTIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIEVWRU4KK0lGIFNVQ0ggSVMgQ0FVU0VEIEJZLCBBUklTRVMgT1VUIE9GIE9SIFJFU1VMVFMgRlJPTSBUSEUgT1JESU5BUlksIFNUUklDVCwgU09MRQorT1IgQ09OVFJJQlVUT1JZIE5FR0xJR0VOQ0UgT0YgT1dORVIgT1IgSVRTIERJUkVDVE9SUywgT0ZGSUNFUlMsIEVNUExPWUVFUywKK0FHRU5UUywgQ09OVFJBQ1RPUlMgT1IgQUZGSUxJQVRFUy4gU09NRSBTVEFURVMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT1IKK0xJTUlUQVRJT04gT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRIRSBBQk9WRSBMSU1JVEFUSU9OIE9SCitFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKK1Byb2R1Y3QgU3VwcG9ydCBhbmQgVXBkYXRlcy4gVGhpcyBTT0ZUV0FSRSBpcyBpbnRlbmRlZCB0byBiZSB1c2VyLWZyaWVuZGx5IGFuZAorbGltaXRlZCBwcm9kdWN0IHN1cHBvcnQgaXMgcHJvdmlkZWQgYnkgT3duZXIgYXMgc3BlY2lmaWVkIGluIHRoZSBBQ0NPTVBBTllJTkcKK01BVEVSSUFMUy4KKworSnVyaXNkaWN0aW9uLiBDQUxJRk9STklBIExBV1MgR09WRVJOIFRISVMgQUdSRUVNRU5ULCBSRUdBUkRMRVNTIE9GIEVBQ0ggU1RBVEUnUworQ0hPSUNFIE9GIExBVyBQUklOQ0lQTEVTLCBXSVRIIEEgRk9SVU0gQU5EIFZFTlVFIE9GIE9SQU5HRSBDT1VOVFksIENBTElGT1JOSUEuCitUaGlzIEFncmVlbWVudCBtYXkgYmUgbW9kaWZpZWQgb25seSBieSBhIHdyaXR0ZW4gaW5zdHJ1bWVudCBzcGVjaWZ5aW5nIHRoZQorbW9kaWZpY2F0aW9uIGFuZCBleGVjdXRlZCBieSBib3RoIHBhcnRpZXMuIEluIHRoZSBldmVudCB0aGF0IGFueSBwcm92aXNpb24gb2YKK3RoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUKK2VuZm9yY2VkIHRvIHRoZSBncmVhdGVzdCBwb3NzaWJsZSBleHRlbnQsIHdpdGggdGhlIG90aGVyIHByb3Zpc2lvbnMgb2YgdGhpcworQWdyZWVtZW50IHRvIHJlbWFpbiBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QuCisKK0VudGlyZSBBZ3JlZW1lbnQuIFRoaXMgQWdyZWVtZW50IHJlcHJlc2VudHMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUKK3BhcnRpZXMsIGFuZCBzdXBlcnNlZGVzIGFueSBvcmFsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbnMsIHByb3Bvc2FscyBvciBwcmlvcgorYWdyZWVtZW50cyBiZXR3ZWVuIHRoZSBwYXJ0aWVzIG9yIGFueSBkZWFsZXJzLCBkaXN0cmlidXRvcnMsIGFnZW50cyBvcgorZW1wbG95ZWVzLgorCitVLlMuIEdvdmVybm1lbnQgUmVzdHJpY3RlZCBSaWdodHMuIFRoZSBTT0ZUV0FSRSBhbmQgdGhlIEFDQ09NUEFOWUlORyBNQVRFUklBTFMKK2lzIHByb3ZpZGVkIHdpdGggUkVTVFJJQ1RFRCBSSUdIVFMgKGFzIGZvdW5kIGluIDQ4IEMuRi5SLiDCpzUyLjIyNy03MDEzKS4gVGhpcworcHJvdmlzaW9uIG9ubHkgYXBwbGllcyBpZiB0aGUgVS5TLiBHb3Zlcm5tZW50IG9yIGFueSBvZiBpdHMgZW50aXRpZXMgb2J0YWlucwordGhpcyBTT0ZUV0FSRSBlaXRoZXIgZGlyZWN0bHkgb3IgaW5kaXJlY3RseS4gT3duZXIgY3JlYXRlZCB0aGlzIFNPRlRXQVJFIGFuZAordGhlIEFDQ09NUEFOWUlORyBNQVRFUklBTFMgZXhjbHVzaXZlbHkgd2l0aCBwcml2YXRlIGZ1bmRzLiBBZGRpdGlvbmFsbHksCitpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gdGhpcyBTT0ZUV0FSRSBhbmQgdGhlIEFDQ09NUEFOWUlORyBNQVRFUklBTFMgaXMgYQordHJhZGUgc2VjcmV0IG9mIE93bmVyIGZvciBhbGwgcHVycG9zZXMgb2YgdGhlIEZyZWVkb20gb2YgSW5mb3JtYXRpb24gQWN0IG9yCitvdGhlcndpc2UuIEZ1cnRoZXJtb3JlLCB0aGlzIFNPRlRXQVJFIGlzICJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIiBzdWJqZWN0Cit0byBsaW1pdGVkIHVzZSBhcyBzZXQgZm9ydGggaW4gYW55IGNvbnRyYWN0IHRoYXQgbWF5IGJlIGVudGVyZWQgaW50byBiZXR3ZWVuCit0aGUgc2VsbGVyIGFuZCB0aGUgZ292ZXJubWVudGFsIGVudGl0eS4gT3duZXIgb3ducywgaW4gYWxsIHJlc3BlY3RzLCB0aGUKK3Byb3ByaWV0YXJ5IGluZm9ybWF0aW9uIGFuZCBwcm9wcmlldGFyeSBkYXRhIGZvdW5kIGluIHRoZSBTT0ZUV0FSRSBhbmQgdGhlCitBQ0NPTVBBTllJTkcgTUFURVJJQUxTLgorCitVLlMuIERFUEFSVE1FTlQgT0YgREVGRU5TRSBQRVJTT05ORUwuIE93bmVyIG9ubHkgc2VsbHMgdGhpcyBTT0ZUV0FSRSBhbmQgdGhlCitBQ0NPTVBBTllJTkcgTUFURVJJQUxTIHdpdGggIlJlc3RyaWN0ZWQgUmlnaHRzIiBhcyBkZWZpbmVkIGluIERGQVJTIDUyLjIyNy03MDEzCisoYWxzbyBmb3VuZCBhdCA0OCBDLkYuUi4gwqcyNTIuMjI3LTcwMTMpLiBBbnkgVS5TLiBHb3Zlcm5tZW50IHVzZSwgZHVwbGljYXRpb24sCitvciBkaXNjbG9zdXJlIGlzIHN1YmplY3QgdG8gdGhlIHJlc3RyaWN0aW9ucyBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bwordGhvc2UgZm91bmQgaW4gdGhlIFJpZ2h0cyBpbiBUZWNobm9sb2dpY2FsIERhdGEgY2xhdXNlIGF0IERGQVJTIDUyLjIyNy03MDEzICg0OAorQy5GLlIuIMKnMjUyLjIyNy03MDEzKSB0aGF0IG1heSBiZSBhbWVuZGVkIGZyb20gdGltZSB0byB0aW1lLgorCitOT04tREVQQVJUTUVOVCBPRiBERUZFTlNFIFBFUlNPTk5FTC4gT3RoZXIgZ292ZXJubWVudGFsIHBlcnNvbm5lbCBhcmUgb24gbm90aWNlCit0aHJvdWdoIHRoaXMgQWdyZWVtZW50IHRoYXQgYW55IHVzZSBvZiB0aGlzIFNPRlRXQVJFIGFuZCB0aGUgQUNDT01QQU5ZSU5HCitNQVRFUklBTFMgaXMgc3ViamVjdCB0byBzaW1pbGFyIGxpbWl0YXRpb25zIGFzIHRob3NlIHN0YXRlZCBhYm92ZSwgaW5jbHVkaW5nCitidXQgbm90IGxpbWl0ZWQgdG8sIHRob3NlIHN0YXRlZCBpbiBDb21tZXJjaWFsIENvbXB1dGVyIFNPRlRXQVJFIC0gUmVzdHJpY3RlZAorUmlnaHRzIGZvdW5kIGluIDQ4IEMuRi5SLiDCpzUyLjIyNy0xOSwgdGhhdCBtYXkgYWxzbyBiZSBhbWVuZGVkIGZyb20gdGltZSB0bwordGltZS4gTWFudWZhY3R1cmVyIGlzIE93bmVyIGF0IHRoZSBsb2NhdGlvbiBsaXN0ZWQgYmVsb3cuCisKK1UuUy4gRXhwb3J0IExhd3MgUHJvaGliaXRpb25zLiBCeSBvcGVuaW5nIHRoZSBzZWFsZWQgc29mdHdhcmUgcGFja2FnaW5nIGFuZC9vcgoraW5zdGFsbGluZyBvciBvdGhlcndpc2UgdXNpbmcgdGhlIFNPRlRXQVJFIGFuZCBBQ0NPTVBBTllJTkcgTUFURVJJQUxTLCBZb3UgYWxzbworYWdyZWUgYW5kIGNvbmZpcm0gdGhhdCB0aGUgU09GVFdBUkUgb3IgQUNDT01QQU5ZSU5HIE1BVEVSSUFMUyBhbmQgYW55IG9mIHRoZQorU09GVFdBUkUncyBkaXJlY3QgcHJvZHVjdHMgYXJlIG5vdCBiZWluZyBhbmQgd2lsbCBub3QgYmUgdHJhbnNwb3J0ZWQsIGV4cG9ydGVkCitvciByZS1leHBvcnRlZCAoZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHRoZSBJbnRlcm5ldCBvciBvdGhlcndpc2UpIGludG8KKyhvciB0byBhIG5hdGlvbmFsIG9yIHJlc2lkZW50IG9mKSBhbnkgY291bnRyeSBmb3JiaWRkZW4gdG8gcmVjZWl2ZSBzdWNoCitTT0ZUV0FSRSBvciBBQ0NPTVBBTllJTkcgTUFURVJJQUxTIGJ5IGFueSBVLlMuIGV4cG9ydCBsYXdzIG9yIGFjY29tcGFueWluZworcmVndWxhdGlvbnMgb3Igb3RoZXJ3aXNlIHZpb2xhdGUgc3VjaCBsYXdzIG9yIHJlZ3VsYXRpb25zLCB0aGF0IG1heSBiZSBhbWVuZGVkCitmcm9tIHRpbWUgdG8gdGltZS4gWW91IGFsc28gYWdyZWUgYW5kIGNvbmZpcm0gdGhhdCB0aGUgU09GVFdBUkUgYW5kCitBQ0NPTVBBTllJTkcgTUFURVJJQUxTIHdpbGwgbm90IGJlIHVzZWQgZm9yIGFueSBwdXJwb3NlIHRoYXQgbWF5IGJlIHJlc3RyaWN0ZWQKK2J5IHRoZSBzYW1lIGxhd3MgYW5kIHJlZ3VsYXRpb25zLgorCitUZXJtaW5hdGlvbi4gVGhpcyBBZ3JlZW1lbnQgaXMgdmFsaWQgdW50aWwgdGVybWluYXRlZC4gVGhpcyBBZ3JlZW1lbnQgY2Vhc2VzCithdXRvbWF0aWNhbGx5ICh3aXRob3V0IGFueSBmb3JtIG9mIG5vdGljZSkgaWYgWW91IGRvIG5vdCBjb21wbHkgd2l0aCBhbnkKK0FncmVlbWVudCBwcm92aXNpb24uIFlvdSBjYW4gYWxzbyBlbmQgdGhpcyBBZ3JlZW1lbnQgYnkgZGVzdHJveWluZyB0aGUgU09GVFdBUkUKK2FuZCBBQ0NPTVBBTllJTkcgTUFURVJJQUxTIGFuZCBhbGwgY29waWVzIGFuZCByZXByb2R1Y3Rpb25zIG9mIHRoZSBTT0ZUV0FSRSBhbmQKK0FDQ09NUEFOWUlORyBNQVRFUklBTFMgYW5kIGRlbGV0aW5nIGFuZCBwZXJtYW5lbnRseSBwdXJnaW5nIHRoZSBTT0ZUV0FSRSBmcm9tCithbnkgY2xpZW50IHNlcnZlciBvciBjb21wdXRlciBvbiB3aGljaCBpdCBoYXMgYmVlbiBpbnN0YWxsZWQuCisKK1Byb2dyYW0gVHJhbnNmZXIuIFlvdSBtYXkgcGVybWFuZW50bHkgdHJhbnNmZXIgYWxsIG9mIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMKK0FncmVlbWVudCwgcHJvdmlkZWQgdGhhdCB0aGUgcmVjaXBpZW50IGFncmVlcyB0byBhbGwgb2YgdGhlIHRlcm1zIG9mIHRoaXMKK0FncmVlbWVudCwgYW5kIFlvdSBhZ3JlZSB0byB0cmFuc2ZlciBhbGwgQUNDT01QQU5ZSU5HIE1BVEVSSUFMUyBhbmQgcmVsYXRlZAorZG9jdW1lbnRzIGFuZCBjb21wb25lbnRzIGFuZCByZW1vdmUgdGhlIFNPRlRXQVJFIGZyb20gWW91ciBjb21wdXRlciBwcmlvci4KK1RyYW5zZmVycmluZyB0aGUgU09GVFdBUkUgYXV0b21hdGljYWxseSB0ZXJtaW5hdGVzIFlvdXIgbGljZW5zZSB1bmRlciB0aGlzCitBZ3JlZW1lbnQuCisKK0VxdWl0YWJsZSBSZW1lZGllcy4gWW91IGhlcmVieSBhZ3JlZSB0aGF0IGlmIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCBhcmUKK25vdCBzcGVjaWZpY2FsbHkgZW5mb3JjZWQsIE93bmVyIHdpbGwgYmUgaXJyZXBhcmFibHkgZGFtYWdlZCwgYW5kIHRoZXJlZm9yZSB5b3UKK2FncmVlIHRoYXQgT3duZXIgc2hhbGwgYmUgZW50aXRsZWQsIHdpdGhvdXQgYm9uZCwgb3RoZXIgc2VjdXJpdHksIHByb29mIG9mCitkYW1hZ2VzLCB0byBhcHByb3ByaWF0ZSBlcXVpdGFibGUgcmVtZWRpZXMgd2l0aCByZXNwZWN0IGFueSBvZiB0aGlzIEFncmVlbWVudCwKK2luIGFkZGl0aW9uIHRvIGFueSBvdGhlciBhdmFpbGFibGUgcmVtZWRpZXMuIElmIFlvdSBoYXZlIGFueSBxdWVzdGlvbnMKK3JlZ2FyZGluZyB0aGlzIEFncmVlbWVudCwgdGhlIGVuY2xvc2VkIG1hdGVyaWFscywgb3Igb3RoZXJ3aXNlLCBwbGVhc2UgY29udGFjdAoraW4gd3JpdGluZzoKKworTG9raSBTb2Z0d2FyZQorMjUwIEVsIENhbWlubyBSZWFsICMxMDAKK1R1c3RpbiwgQ0EgOTI3ODAKK0F0dG46IEN1c3RvbWVyIFNlcnZpY2UKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0xQUEwtMS4yIGIvbGljZW5zZXMvTFBQTC0xLjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWIwNWZlOAotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0xQUEwtMS4yCkBAIC0wLDAgKzEsMzE4IEBACisKK1RoZSBMYVRlWCBQcm9qZWN0IFB1YmxpYyBMaWNlbnNlCis9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LQorCitMUFBMIFZlcnNpb24gMS4yICAxOTk5LTA5LTAzCisKK0NvcHlyaWdodCAxOTk5IExhVGVYMyBQcm9qZWN0CisgICAgRXZlcnlvbmUgaXMgYWxsb3dlZCB0byBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGlzCisgICAgbGljZW5zZSBkb2N1bWVudCwgYnV0IG1vZGlmaWNhdGlvbiBvZiBpdCBpcyBub3QgYWxsb3dlZC4KKworCitQUkVBTUJMRQorPT09PT09PT0KKworVGhlIExhVGVYIFByb2plY3QgUHVibGljIExpY2Vuc2UgKExQUEwpIGlzIHRoZSBsaWNlbnNlIHVuZGVyIHdoaWNoIHRoZQorYmFzZSBMYVRlWCBkaXN0cmlidXRpb24gaXMgZGlzdHJpYnV0ZWQuCisKK1lvdSBtYXkgdXNlIHRoaXMgbGljZW5zZSBmb3IgYW55IHByb2dyYW0gdGhhdCB5b3UgaGF2ZSB3cml0dGVuIGFuZCB3aXNoCit0byBkaXN0cmlidXRlLiAgVGhpcyBsaWNlbnNlIG1heSBiZSBwYXJ0aWN1bGFybHkgc3VpdGFibGUgaWYgeW91cgorcHJvZ3JhbSBpcyBUZVgtcmVsYXRlZCAoc3VjaCBhcyBhIExhVGVYIHBhY2thZ2UpLCBidXQgeW91IG1heSB1c2UgaXQKK2V2ZW4gaWYgeW91ciBwcm9ncmFtIGlzIHVucmVsYXRlZCB0byBUZVguICBUaGUgc2VjdGlvbiBgV0hFVEhFUiBBTkQgSE9XCitUTyBESVNUUklCVVRFIFBST0dSQU1TIFVOREVSIFRISVMgTElDRU5TRScsIGJlbG93LCBnaXZlcyBpbnN0cnVjdGlvbnMsCitleGFtcGxlcywgYW5kIHJlY29tbWVuZGF0aW9ucyBmb3IgYXV0aG9ycyB3aG8gYXJlIGNvbnNpZGVyaW5nCitkaXN0cmlidXRpbmcgdGhlaXIgcHJvZ3JhbXMgdW5kZXIgdGhpcyBsaWNlbnNlLgorCitJbiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGBUaGUgUHJvZ3JhbScgcmVmZXJzIHRvIGFueSBwcm9ncmFtCitkaXN0cmlidXRlZCB1bmRlciB0aGlzIGxpY2Vuc2UuCisKK1RoaXMgbGljZW5zZSBnaXZlcyBjb25kaXRpb25zIHVuZGVyIHdoaWNoIFRoZSBQcm9ncmFtIG1heSBiZSBkaXN0cmlidXRlZAorYW5kIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggbW9kaWZpZWQgdmVyc2lvbnMgb2YgVGhlIFByb2dyYW0gbWF5IGJlCitkaXN0cmlidXRlZC4gIEluZGl2aWR1YWwgZmlsZXMgb2YgVGhlIFByb2dyYW0gbWF5IGJlYXIgc3VwcGxlbWVudGFyeQorYW5kL29yIHN1cGVyc2VkaW5nIGNvbmRpdGlvbnMgb24gbW9kaWZpY2F0aW9uIG9mIHRoZW1zZWx2ZXMgYW5kIG9uIHRoZQorZGlzdHJpYnV0aW9uIG9mIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoZW1zZWx2ZXMsIGJ1dCAqbm8qIGZpbGUgb2YgVGhlCitQcm9ncmFtIG1heSBiZWFyIHN1cHBsZW1lbnRhcnkgb3Igc3VwZXJzZWRpbmcgY29uZGl0aW9ucyBvbiB0aGUKK2Rpc3RyaWJ1dGlvbiBvZiBhbiB1bm1vZGlmaWVkIGNvcHkgb2YgdGhlIGZpbGUuICBBIGRpc3RyaWJ1dG9yIHdpc2hpbmcKK3RvIGRpc3RyaWJ1dGUgYSBjb21wbGV0ZSwgdW5tb2RpZmllZCBjb3B5IG9mIFRoZSBQcm9ncmFtIHRoZXJlZm9yZQorbmVlZHMgdG8gY2hlY2sgdGhlIGNvbmRpdGlvbnMgb25seSBpbiB0aGlzIGxpY2Vuc2UgYW5kIG5vd2hlcmUgZWxzZS4KKworQWN0aXZpdGllcyBvdGhlciB0aGFuIGRpc3RyaWJ1dGlvbiBhbmQvb3IgbW9kaWZpY2F0aW9uIG9mIFRoZSBQcm9ncmFtCithcmUgbm90IGNvdmVyZWQgYnkgdGhpcyBsaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIEluCitwYXJ0aWN1bGFyLCB0aGUgYWN0IG9mIHJ1bm5pbmcgVGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQuCisKK1dlLCB0aGUgTGFUZVgzIFByb2plY3QsIGJlbGlldmUgdGhhdCB0aGUgY29uZGl0aW9ucyBiZWxvdyBnaXZlIHlvdQordGhlIGZyZWVkb20gdG8gbWFrZSBhbmQgZGlzdHJpYnV0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiBUaGUgUHJvZ3JhbQordGhhdCBjb25mb3JtIHdpdGggd2hhdGV2ZXIgdGVjaG5pY2FsIHNwZWNpZmljYXRpb25zIHlvdSB3aXNoIHdoaWxlCittYWludGFpbmluZyB0aGUgYXZhaWxhYmlsaXR5LCBpbnRlZ3JpdHksIGFuZCByZWxpYWJpbGl0eSBvZgorVGhlIFByb2dyYW0uICBJZiB5b3UgZG8gbm90IHNlZSBob3cgdG8gYWNoaWV2ZSB5b3VyIGdvYWwgd2hpbGUgCittZWV0aW5nIHRoZXNlIGNvbmRpdGlvbnMsIHRoZW4gcmVhZCB0aGUgZG9jdW1lbnQgYGNmZ2d1aWRlLnRleCcKK2luIHRoZSBiYXNlIExhVGVYIGRpc3RyaWJ1dGlvbiBmb3Igc3VnZ2VzdGlvbnMuCisKKworQ09ORElUSU9OUyBPTiBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitZb3UgbWF5IGRpc3RyaWJ1dGUgYSBjb21wbGV0ZSwgdW5tb2RpZmllZCBjb3B5IG9mIFRoZSBQcm9ncmFtLgorRGlzdHJpYnV0aW9uIG9mIG9ubHkgcGFydCBvZiBUaGUgUHJvZ3JhbSBpcyBub3QgYWxsb3dlZC4KKworWW91IG1heSBub3QgbW9kaWZ5IGluIGFueSB3YXkgYSBmaWxlIG9mIFRoZSBQcm9ncmFtIHRoYXQgYmVhcnMgYSBsZWdhbAorbm90aWNlIGZvcmJpZGRpbmcgbW9kaWZpY2F0aW9uIG9mIHRoYXQgZmlsZS4KKworWW91IG1heSBkaXN0cmlidXRlIGEgbW9kaWZpZWQgZmlsZSBvZiBUaGUgUHJvZ3JhbSBpZiwgYW5kIG9ubHkgaWYsIHRoZQorZm9sbG93aW5nIGVpZ2h0IGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAxLiBZb3UgbXVzdCBtZWV0IGFueSBhZGRpdGlvbmFsIGNvbmRpdGlvbnMgYm9ybmUgYnkgdGhlIGZpbGUgb24gdGhlCisgICAgIGRpc3RyaWJ1dGlvbiBvZiBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIGZpbGUgYXMgZGVzY3JpYmVkIGJlbG93CisgICAgIGluIHRoZSBzdWJzZWN0aW9uIGBBZGRpdGlvbmFsIENvbmRpdGlvbnMgb24gSW5kaXZpZHVhbCBGaWxlcyBvZgorICAgICBUaGUgUHJvZ3JhbScuCisgCisgIDIuIElmIHRoZSBmaWxlIGlzIGEgTGFUZVggc29mdHdhcmUgZmlsZSwgdGhlbiB5b3UgbXVzdCBtZWV0IGFueQorICAgICBhcHBsaWNhYmxlIGFkZGl0aW9uYWwgY29uZGl0aW9ucyBvbiB0aGUgZGlzdHJpYnV0aW9uIG9mIGEgbW9kaWZpZWQKKyAgICAgdmVyc2lvbiBvZiB0aGUgZmlsZSB0aGF0IGFyZSBkZXNjcmliZWQgYmVsb3cgaW4gdGhlIHN1YnNlY3Rpb24KKyAgICAgYEFkZGl0aW9uYWwgQ29uZGl0aW9ucyBvbiBMYVRlWCBTb2Z0d2FyZSBGaWxlcycuCisgCisgIDMuIFlvdSBtdXN0IG5vdCBkaXN0cmlidXRlIHRoZSBtb2RpZmllZCBmaWxlIHdpdGggdGhlIGZpbGVuYW1lIG9mIHRoZQorICAgICBvcmlnaW5hbCBmaWxlLgorIAorICA0LiBJbiB0aGUgbW9kaWZpZWQgZmlsZSwgeW91IG11c3QgYWNrbm93bGVkZ2UgdGhlIGF1dGhvcnNoaXAgYW5kCisgICAgIG5hbWUgb2YgdGhlIG9yaWdpbmFsIGZpbGUsIGFuZCB0aGUgbmFtZSAoaWYgYW55KSBvZiB0aGUgcHJvZ3JhbQorICAgICB3aGljaCBjb250YWlucyBpdC4KKyAKKyAgNS4gWW91IG11c3QgY2hhbmdlIGFueSBpZGVudGlmaWNhdGlvbiBzdHJpbmcgaW4gdGhlIGZpbGUgdG8gaW5kaWNhdGUKKyAgICAgY2xlYXJseSB0aGF0IHRoZSBtb2RpZmllZCBmaWxlIGlzIG5vdCBwYXJ0IG9mIFRoZSBQcm9ncmFtLgorIAorICA2LiBZb3UgbXVzdCBjaGFuZ2UgYW55IGFkZHJlc3NlcyBpbiB0aGUgbW9kaWZpZWQgZmlsZSBmb3IgdGhlCisgICAgIHJlcG9ydGluZyBvZiBlcnJvcnMgaW4gdGhlIGZpbGUgb3IgaW4gVGhlIFByb2dyYW0gZ2VuZXJhbGx5IHRvCisgICAgIGVuc3VyZSB0aGF0IHJlcG9ydHMgZm9yIGZpbGVzIG5vIGxvbmdlciBtYWludGFpbmVkIGJ5IHRoZSBvcmlnaW5hbAorICAgICBtYWludGFpbmVycyB3aWxsIGJlIGRpcmVjdGVkIHRvIHRoZSBtYWludGFpbmVycyBvZiB0aGUgbW9kaWZpZWQKKyAgICAgZmlsZXMuCisgCisgIDcuIFlvdSBtdXN0IGRpc3RyaWJ1dGUgdGhlIG1vZGlmaWVkIGZpbGUgdW5kZXIgYSBsaWNlbnNlIHRoYXQgZm9yYmlkcworICAgICBkaXN0cmlidXRpb24gYm90aCBvZiB0aGUgbW9kaWZpZWQgZmlsZSBhbmQgb2YgYW55IGZpbGVzIGRlcml2ZWQKKyAgICAgZnJvbSB0aGUgbW9kaWZpZWQgZmlsZSB3aXRoIHRoZSBmaWxlbmFtZSBvZiB0aGUgb3JpZ2luYWwgZmlsZS4KKyAKKyAgOC4gWW91IG11c3QgZG8gZWl0aGVyIChBKSBvciAoQik6CisKKyAgICAgICAoQSkgZGlzdHJpYnV0ZSBhIGNvcHkgb2YgVGhlIFByb2dyYW0gKHRoYXQgaXMsIGEgY29tcGxldGUsCisgICAgICAgICAgIHVubW9kaWZpZWQgY29weSBvZiBUaGUgUHJvZ3JhbSkgdG9nZXRoZXIgd2l0aCB0aGUgbW9kaWZpZWQKKyAgICAgICAgICAgZmlsZTsgaWYgeW91ciBkaXN0cmlidXRpb24gb2YgdGhlIG1vZGlmaWVkIGZpbGUgaXMgbWFkZSBieQorICAgICAgICAgICBvZmZlcmluZyBhY2Nlc3MgdG8gY29weSB0aGUgbW9kaWZpZWQgZmlsZSBmcm9tIGEgZGVzaWduYXRlZAorICAgICAgICAgICBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IFRoZSBQcm9ncmFtCisgICAgICAgICAgIGZyb20gdGhlIHNhbWUgcGxhY2UgbWVldHMgdGhpcyBjb25kaXRpb24sIGV2ZW4gdGhvdWdoIHRoaXJkCisgICAgICAgICAgIHBhcnRpZXMgYXJlIG5vdCBjb21wZWxsZWQgdG8gY29weSBUaGUgUHJvZ3JhbSBhbG9uZyB3aXRoIHRoZQorICAgICAgICAgICBtb2RpZmllZCBmaWxlOworCisgICAgICAgKEIpIHByb3ZpZGUgdG8gdGhvc2Ugd2hvIHJlY2VpdmUgdGhlIG1vZGlmaWVkIGZpbGUgaW5mb3JtYXRpb24KKyAgICAgICAgICAgdGhhdCBpcyBzdWZmaWNpZW50IGZvciB0aGVtIHRvIG9idGFpbiBhIGNvcHkgb2YgVGhlIFByb2dyYW07CisgICAgICAgICAgIGZvciBleGFtcGxlLCB5b3UgbWF5IHByb3ZpZGUgYSBVbmlmb3JtIFJlc291cmNlIExvY2F0b3IgKFVSTCkKKyAgICAgICAgICAgZm9yIGEgc2l0ZSB0aGF0IHlvdSBleHBlY3Qgd2lsbCBwcm92aWRlIHRoZW0gd2l0aCBhIGNvcHkgb2YgCisgICAgICAgICAgIFRoZSBQcm9ncmFtIGZyZWUgb2YgY2hhcmdlIChlaXRoZXIgdGhlIHZlcnNpb24gZnJvbSB3aGljaAorICAgICAgICAgICB5b3VyIG1vZGlmaWNhdGlvbiBpcyBkZXJpdmVkLCBvciBwZXJoYXBzIGEgbGF0ZXIgdmVyc2lvbikuCisKK05vdGUgdGhhdCBpbiB0aGUgYWJvdmUsIGBkaXN0cmlidXRpb24nIG9mIGEgZmlsZSBtZWFucyBtYWtpbmcgdGhlCitmaWxlIGF2YWlsYWJsZSB0byBvdGhlcnMgYnkgYW55IG1lYW5zLiAgVGhpcyBpbmNsdWRlcywgZm9yIGluc3RhbmNlLAoraW5zdGFsbGluZyB0aGUgZmlsZSBvbiBhbnkgbWFjaGluZSBpbiBzdWNoIGEgd2F5IHRoYXQgdGhlIGZpbGUgaXMKK2FjY2Vzc2libGUgYnkgdXNlcnMgb3RoZXIgdGhhbiB5b3Vyc2VsZi4gIGBNb2RpZmljYXRpb24nIG9mIGEgZmlsZQorbWVhbnMgYW55IHByb2NlZHVyZSB0aGF0IHByb2R1Y2VzIGEgZGVyaXZhdGl2ZSBmaWxlIHVuZGVyIGFueQorYXBwbGljYWJsZSBsYXcgLS0gdGhhdCBpcywgYSBmaWxlIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsIGZpbGUgb3IKK2Egc2lnbmlmaWNhbnQgcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucworYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyIGxhbmd1YWdlLgorCitDaGFuZ2luZyB0aGUgbmFtZSBvZiBhIGZpbGUgKG90aGVyIHRoYW4gYXMgbmVjZXNzaXRhdGVkIGJ5IHRoZSBmaWxlCitjb252ZW50aW9ucyBvZiB0aGUgdGFyZ2V0IGZpbGUgc3lzdGVtcykgaXMgY29uc2lkZXJlZCB0byBiZSBhCittb2RpZmljYXRpb24gb2YgdGhlIGZpbGUuCisKK1RoZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBpbiB0aGlzIGxpY2Vuc2UgZG8gbm90IGhhdmUgdG8gYmUKK2FwcGxpZWQgdG8gZmlsZXMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZQorYWJvdmUgY29uZGl0aW9ucy4gIE5vdGUsIGhvd2V2ZXIsIHRoYXQgQ29uZGl0aW9uIDcuIGRvZXMgYXBwbHkgdG8KK2FueSBzdWNoIG1vZGlmaWVkIGZpbGUuCisKK1RoZSBjb25kaXRpb25zIGFib3ZlIGFyZSBub3QgaW50ZW5kZWQgdG8gcHJvaGliaXQsIGFuZCBoZW5jZSBkbyBub3QKK2FwcGx5IHRvLCB0aGUgdXBkYXRpbmcsIGJ5IGFueSBtZXRob2QsIG9mIGEgZmlsZSBzbyB0aGF0IGl0IGJlY29tZXMKK2lkZW50aWNhbCB0byB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhhdCBmaWxlIG9mIFRoZSBQcm9ncmFtLgorCisgCisKK0EgUmVjb21tZW5kYXRpb24gb24gTW9kaWZpY2F0aW9uIFdpdGhvdXQgRGlzdHJpYnV0aW9uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJdCBpcyB3aXNlIG5ldmVyIHRvIG1vZGlmeSBhIGZpbGUgb2YgVGhlIFByb2dyYW0sIGV2ZW4gZm9yIHlvdXIgb3duCitwZXJzb25hbCB1c2UsIHdpdGhvdXQgYWxzbyBtZWV0aW5nIHRoZSBhYm92ZSBlaWdodCBjb25kaXRpb25zIGZvcgorZGlzdHJpYnV0aW5nIHRoZSBtb2RpZmllZCBmaWxlLiAgV2hpbGUgeW91IG1pZ2h0IGludGVuZCB0aGF0IHN1Y2gKK21vZGlmaWVkIGZpbGVzIHdpbGwgbmV2ZXIgYmUgZGlzdHJpYnV0ZWQsIG9mdGVuIHRoaXMgd2lsbCBoYXBwZW4gYnkKK2FjY2lkZW50IC0tIHlvdSBtYXkgZm9yZ2V0IHRoYXQgeW91IGhhdmUgbW9kaWZpZWQgdGhlIGZpbGU7IG9yIGl0IG1heQorbm90IG9jY3VyIHRvIHlvdSB3aGVuIGFsbG93aW5nIG90aGVycyB0byBhY2Nlc3MgdGhlIG1vZGlmaWVkIGZpbGUKK3RoYXQgeW91IGFyZSB0aHVzIGRpc3RyaWJ1dGluZyBpdCBhbmQgdmlvbGF0aW5nIHRoZSBjb25kaXRpb25zIG9mCit0aGlzIGxpY2Vuc2UuICBJdCBpcyB1c3VhbGx5IGluIHlvdXIgYmVzdCBpbnRlcmVzdCB0byBrZWVwIHlvdXIgY29weQorb2YgVGhlIFByb2dyYW0gaWRlbnRpY2FsIHdpdGggdGhlIHB1YmxpYyBvbmUuICBNYW55IHByb2dyYW1zIHByb3ZpZGUKK3dheXMgdG8gY29udHJvbCB0aGUgYmVoYXZpb3Igb2YgdGhhdCBwcm9ncmFtIHdpdGhvdXQgYWx0ZXJpbmcgaXRzCitsaWNlbnNlZCBmaWxlcy4KKworCitBZGRpdGlvbmFsIENvbmRpdGlvbnMgb24gSW5kaXZpZHVhbCBGaWxlcyBvZiBUaGUgUHJvZ3JhbQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQW4gaW5kaXZpZHVhbCBmaWxlIG9mIFRoZSBQcm9ncmFtIG1heSBiZWFyIGFkZGl0aW9uYWwgY29uZGl0aW9ucyB0aGF0CitzdXBwbGVtZW50IGFuZC9vciBzdXBlcnNlZGUgdGhlIGNvbmRpdGlvbnMgaW4gdGhpcyBsaWNlbnNlIGlmLCBhbmQgb25seQoraWYsIHN1Y2ggYWRkaXRpb25hbCBjb25kaXRpb25zIGV4Y2x1c2l2ZWx5IGNvbmNlcm4gbW9kaWZpY2F0aW9uIG9mIHRoZQorZmlsZSBvciBkaXN0cmlidXRpb24gb2YgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBmaWxlLiAgVGhlIGNvbmRpdGlvbnMKK29uIGluZGl2aWR1YWwgZmlsZXMgb2YgVGhlIFByb2dyYW0gdGhlcmVmb3JlIG1heSBkaWZmZXIgb25seSB3aXRoCityZXNwZWN0IHRvIHRoZSBraW5kIGFuZCBleHRlbnQgb2YgbW9kaWZpY2F0aW9uIG9mIHRob3NlIGZpbGVzIHRoYXQKK2lzIGFsbG93ZWQsIGFuZCB3aXRoIHJlc3BlY3QgdG8gdGhlIGRpc3RyaWJ1dGlvbiBvZiBtb2RpZmllZCB2ZXJzaW9ucworb2YgdGhvc2UgZmlsZXMuCisKKworQWRkaXRpb25hbCBDb25kaXRpb25zIG9uIExhVGVYIFNvZnR3YXJlIEZpbGVzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSWYgYSBmaWxlIG9mIFRoZSBQcm9ncmFtIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgd2l0aCBMYVRlWCAodGhhdCBpcywKK2lmIGl0IGlzIGEgTGFUZVggc29mdHdhcmUgZmlsZSksIHRoZW4gdGhlIGZvbGxvd2luZyBhZGRpdGlvbmFsCitjb25kaXRpb25zLCB3aGljaCBzdXBwbGVtZW50IGFuZC9vciBzdXBlcnNlZGUgdGhlIGNvbmRpdGlvbnMKK2Fib3ZlLCBhcHBseSB0byB0aGUgZmlsZSBhY2NvcmRpbmcgdG8gaXRzIGZpbGVuYW1lIGV4dGVuc2lvbjoKKworICAtIFlvdSBtYXkgbm90IG1vZGlmeSBhbnkgZmlsZSB3aXRoIGZpbGVuYW1lIGV4dGVuc2lvbiBgLmlucycgc2luY2UKKyAgICB0aGVzZSBhcmUgaW5zdGFsbGF0aW9uIGZpbGVzIGNvbnRhaW5pbmcgdGhlIGxlZ2FsIG5vdGljZXMgdGhhdCBhcmUKKyAgICBwbGFjZWQgaW4gdGhlIGZpbGVzIHRoZXkgZ2VuZXJhdGUuCisgCisgIC0gWW91IG1heSBkaXN0cmlidXRlIG1vZGlmaWVkIHZlcnNpb25zIG9mIGZpbGVzIHdpdGggZmlsZW5hbWUKKyAgICBleHRlbnNpb24gYC5mZCcgKExhVGVYIGZvbnQgZGVmaW5pdGlvbiBmaWxlcykgdW5kZXIgdGhlIHN0YW5kYXJkCisgICAgY29uZGl0aW9ucyBvZiB0aGUgTFBQTCBhcyBkZXNjcmliZWQgYWJvdmUuICBZb3UgbWF5IGFsc28gZGlzdHJpYnV0ZQorICAgIHN1Y2ggbW9kaWZpZWQgTGFUZVggZm9udCBkZWZpbml0aW9uIGZpbGVzIHdpdGggdGhlaXIgb3JpZ2luYWwgbmFtZXMKKyAgICBwcm92aWRlZCB0aGF0OgorICAgICgxKSB0aGUgb25seSBjaGFuZ2VzIHRvIHRoZSBvcmlnaW5hbCBmaWxlcyBlaXRoZXIgZW5hYmxlIHVzZSBvZgorICAgICAgICBhdmFpbGFibGUgZm9udHMgb3IgcHJldmVudCBhdHRlbXB0cyB0byBhY2Nlc3MgdW5hdmFpbGFibGUgZm9udHM7CisgICAgKDIpIHlvdSBhbHNvIGRpc3RyaWJ1dGUgdGhlIG9yaWdpbmFsLCB1bm1vZGlmaWVkIGZpbGVzIChUZVggaW5wdXQKKyAgICAgICAgcGF0aHMgY2FuIGJlIHVzZWQgdG8gY29udHJvbCB3aGljaCBzZXQgb2YgTGFUZVggZm9udCBkZWZpbml0aW9uCisgICAgICAgIGZpbGVzIGlzIGFjdHVhbGx5IHVzZWQgYnkgVGVYKS4KKworICAtIFlvdSBtYXkgZGlzdHJpYnV0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiBmaWxlcyB3aXRoIGZpbGVuYW1lCisgICAgZXh0ZW5zaW9uIGAuY2ZnJyAoY29uZmlndXJhdGlvbiBmaWxlcykgd2l0aCB0aGVpciBvcmlnaW5hbCBuYW1lcy4KKyAgICBUaGUgUHJvZ3JhbSBtYXkgKGFuZCB1c3VhbGx5IHdpbGwpIHNwZWNpZnkgdGhlIHJhbmdlIG9mIGNvbW1hbmRzCisgICAgdGhhdCBhcmUgYWxsb3dlZCBpbiBhIHBhcnRpY3VsYXIgY29uZmlndXJhdGlvbiBmaWxlLgorIAorQmVjYXVzZSBvZiBwb3J0YWJpbGl0eSBhbmQgZXhjaGFuZ2VhYmlsaXR5IGlzc3VlcyBpbiBMYVRlWCBzb2Z0d2FyZSwKK1RoZSBMYVRlWDMgUHJvamVjdCBkZXByZWNhdGVzIHRoZSBkaXN0cmlidXRpb24gb2YgbW9kaWZpZWQgdmVyc2lvbnMgb2YKK2NvbXBvbmVudHMgb2YgTGFUZVggb3Igb2YgZ2VuZXJhbGx5IGF2YWlsYWJsZSBjb250cmlidXRlZCBjb2RlIGZvciB0aGVtLAorYnV0IHN1Y2ggZGlzdHJpYnV0aW9uIGNhbiBtZWV0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgbGljZW5zZS4KKworCitOTyBXQVJSQU5UWQorPT09PT09PT09PT0KKworVGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIFRoZSBQcm9ncmFtLiAgRXhjZXB0IHdoZW4gb3RoZXJ3aXNlIHN0YXRlZCBpbgord3JpdGluZywgVGhlIENvcHlyaWdodCBIb2xkZXIgcHJvdmlkZXMgVGhlIFByb2dyYW0gYGFzIGlzJywgd2l0aG91dAord2FycmFudHkgb2YgYW55IGtpbmQsIGVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCBidXQgbm90CitsaW1pdGVkIHRvLCB0aGUgaW1wbGllZCB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcyBmb3IKK2EgcGFydGljdWxhciBwdXJwb3NlLiAgVGhlIGVudGlyZSByaXNrIGFzIHRvIHRoZSBxdWFsaXR5IGFuZCBwZXJmb3JtYW5jZQorb2YgVGhlIFByb2dyYW0gaXMgd2l0aCB5b3UuICBTaG91bGQgVGhlIFByb2dyYW0gcHJvdmUgZGVmZWN0aXZlLCB5b3UKK2Fzc3VtZSB0aGUgY29zdCBvZiBhbGwgbmVjZXNzYXJ5IHNlcnZpY2luZywgcmVwYWlyLCBvciBjb3JyZWN0aW9uLgorCitJbiBubyBldmVudCB1bmxlc3MgYWdyZWVkIHRvIGluIHdyaXRpbmcgd2lsbCBUaGUgQ29weXJpZ2h0IEhvbGRlciwgb3IKK2FueSBhdXRob3IgbmFtZWQgaW4gdGhlIGZpbGVzIG9mIFRoZSBQcm9ncmFtLCBvciBhbnkgb3RoZXIgcGFydHkgd2hvIG1heQorZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IFRoZSBQcm9ncmFtIGFzIHBlcm1pdHRlZCBhYm92ZSwgYmUgbGlhYmxlIHRvCit5b3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvcgorY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgb3V0IG9mIGFueSB1c2Ugb2YgVGhlIFByb2dyYW0gb3Igb3V0IG9mCitpbmFiaWxpdHkgdG8gdXNlIFRoZSBQcm9ncmFtIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgbG9zcyBvZgorZGF0YSwgZGF0YSBiZWluZyByZW5kZXJlZCBpbmFjY3VyYXRlLCBvciBsb3NzZXMgc3VzdGFpbmVkIGJ5IGFueW9uZSBhcworYSByZXN1bHQgb2YgYW55IGZhaWx1cmUgb2YgVGhlIFByb2dyYW0gdG8gb3BlcmF0ZSB3aXRoIGFueSBvdGhlcgorcHJvZ3JhbXMpLCBldmVuIGlmIFRoZSBDb3B5cmlnaHQgSG9sZGVyIG9yIHNhaWQgYXV0aG9yIG9yIHNhaWQgb3RoZXIKK3BhcnR5IGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKworCitXSEVUSEVSIEFORCBIT1cgVE8gRElTVFJJQlVURSBQUk9HUkFNUyBVTkRFUiBUSElTIExJQ0VOU0UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIHNlY3Rpb24gY29udGFpbnMgaW1wb3J0YW50IGluc3RydWN0aW9ucywgZXhhbXBsZXMsIGFuZAorcmVjb21tZW5kYXRpb25zIGZvciBhdXRob3JzIHdobyBhcmUgY29uc2lkZXJpbmcgZGlzdHJpYnV0aW5nIHRoZWlyCitwcm9ncmFtcyB1bmRlciB0aGlzIGxpY2Vuc2UuICBUaGVzZSBhdXRob3JzIGFyZSBhZGRyZXNzZWQgYXMgYHlvdScgaW4KK3RoaXMgc2VjdGlvbi4KKworCitDaG9vc2luZyBUaGlzIExpY2Vuc2Ugb3IgQW5vdGhlciBMaWNlbnNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIGZvciBhbnkgcGFydCBvZiB5b3VyIHByb2dyYW0geW91IHdhbnQgb3IgbmVlZCB0byB1c2UgKmRpc3RyaWJ1dGlvbioKK2NvbmRpdGlvbnMgdGhhdCBkaWZmZXIgZnJvbSB0aG9zZSBpbiB0aGlzIGxpY2Vuc2UsIHRoZW4gZG8gbm90IHJlZmVyIHRvCit0aGlzIGxpY2Vuc2UgYW55d2hlcmUgaW4geW91ciBwcm9ncmFtIGJ1dCBpbnN0ZWFkIGRpc3RyaWJ1dGUgeW91cgorcHJvZ3JhbSB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlLiAgWW91IG1heSB1c2UgdGhlIHRleHQgb2YgdGhpcyBsaWNlbnNlCithcyBhIG1vZGVsIGZvciB5b3VyIG93biBsaWNlbnNlLCBidXQgeW91ciBsaWNlbnNlIHNob3VsZCBub3QgcmVmZXIgdG8KK3RoZSBMUFBMIG9yIG90aGVyd2lzZSBnaXZlIHRoZSBpbXByZXNzaW9uIHRoYXQgeW91ciBwcm9ncmFtIGlzCitkaXN0cmlidXRlZCB1bmRlciB0aGUgTFBQTC4KKworVGhlIGRvY3VtZW50IGBtb2RndWlkZS50ZXgnIGluIHRoZSBiYXNlIExhVGVYIGRpc3RyaWJ1dGlvbiBleHBsYWlucwordGhlIG1vdGl2YXRpb24gYmVoaW5kIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgbGljZW5zZS4gIEl0IGV4cGxhaW5zLAorZm9yIGV4YW1wbGUsIHdoeSBkaXN0cmlidXRpbmcgTGFUZVggdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSAoR1BMKSB3YXMgY29uc2lkZXJlZCBpbmFwcHJvcHJpYXRlLiAgRXZlbiBpZiB5b3VyIHByb2dyYW0gaXMKK3VucmVsYXRlZCB0byBMYVRlWCwgdGhlIGRpc2N1c3Npb24gaW4gYG1vZGd1aWRlLnRleCcgbWF5IHN0aWxsIGJlCityZWxldmFudCwgYW5kIGF1dGhvcnMgaW50ZW5kaW5nIHRvIGRpc3RyaWJ1dGUgdGhlaXIgcHJvZ3JhbXMgdW5kZXIgYW55CitsaWNlbnNlIGFyZSBlbmNvdXJhZ2VkIHRvIHJlYWQgaXQuCisKKworSG93IHRvIFVzZSBUaGlzIExpY2Vuc2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RvIHVzZSB0aGlzIGxpY2Vuc2UsIHBsYWNlIGluIGVhY2ggb2YgdGhlIGZpbGVzIG9mIHlvdXIgcHJvZ3JhbSBib3RoCithbiBleHBsaWNpdCBjb3B5cmlnaHQgbm90aWNlIGluY2x1ZGluZyB5b3VyIG5hbWUgYW5kIHRoZSB5ZWFyIGFuZCBhbHNvCithIHN0YXRlbWVudCB0aGF0IHRoZSBkaXN0cmlidXRpb24gYW5kL29yIG1vZGlmaWNhdGlvbiBvZiB0aGUgZmlsZSBpcworY29uc3RyYWluZWQgYnkgdGhlIGNvbmRpdGlvbnMgaW4gdGhpcyBsaWNlbnNlLgorCitIZXJlIGlzIGFuIGV4YW1wbGUgb2Ygc3VjaCBhIG5vdGljZSBhbmQgc3RhdGVtZW50OgorCisgICUlIHBpZy5kdHgKKyAgJSUgQ29weXJpZ2h0IDIwMDEgTS4gWS4gTmFtZQorICAlCisgICUgVGhpcyBwcm9ncmFtIG1heSBiZSBkaXN0cmlidXRlZCBhbmQvb3IgbW9kaWZpZWQgdW5kZXIgdGhlCisgICUgY29uZGl0aW9ucyBvZiB0aGUgTGFUZVggUHJvamVjdCBQdWJsaWMgTGljZW5zZSwgZWl0aGVyIHZlcnNpb24gMS4yCisgICUgb2YgdGhpcyBsaWNlbnNlIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgICUgVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoaXMgbGljZW5zZSBpcyBpbgorICAlICAgaHR0cDovL3d3dy5sYXRleC1wcm9qZWN0Lm9yZy9scHBsLnR4dAorICAlIGFuZCB2ZXJzaW9uIDEuMiBvciBsYXRlciBpcyBwYXJ0IG9mIGFsbCBkaXN0cmlidXRpb25zIG9mIExhVGVYIAorICAlIHZlcnNpb24gMTk5OS8xMi8wMSBvciBsYXRlci4KKyAgJQorICAlIFRoaXMgcHJvZ3JhbSBjb25zaXN0cyBvZiB0aGUgZmlsZXMgcGlnLmR0eCBhbmQgcGlnLmlucworCitHaXZlbiBzdWNoIGEgbm90aWNlIGFuZCBzdGF0ZW1lbnQgaW4gYSBmaWxlLCB0aGUgY29uZGl0aW9ucyBnaXZlbiBpbgordGhpcyBsaWNlbnNlIGRvY3VtZW50IHdvdWxkIGFwcGx5LCB3aXRoIGBUaGUgUHJvZ3JhbScgcmVmZXJyaW5nIHRvIHRoZQordHdvIGZpbGVzIGBwaWcuZHR4JyBhbmQgYHBpZy5pbnMnLCBhbmQgYFRoZSBDb3B5cmlnaHQgSG9sZGVyJyByZWZlcnJpbmcKK3RvIHRoZSBwZXJzb24gYE0uIFkuIE5hbWUnLgorCisKK0ltcG9ydGFudCBSZWNvbW1lbmRhdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworIERlZmluaW5nIFdoYXQgQ29uc3RpdHV0ZXMgVGhlIFByb2dyYW0KKworICAgVGhlIExQUEwgcmVxdWlyZXMgdGhhdCBkaXN0cmlidXRpb25zIG9mIFRoZSBQcm9ncmFtIGNvbnRhaW4gYWxsIHRoZQorICAgZmlsZXMgb2YgVGhlIFByb2dyYW0uICBJdCBpcyB0aGVyZWZvcmUgaW1wb3J0YW50IHRoYXQgeW91IHByb3ZpZGUgYQorICAgd2F5IGZvciB0aGUgbGljZW5zZWUgdG8gZGV0ZXJtaW5lIHdoaWNoIGZpbGVzIGNvbnN0aXR1dGUgVGhlIFByb2dyYW0uCisgICBUaGlzIGNvdWxkLCBmb3IgZXhhbXBsZSwgYmUgYWNoaWV2ZWQgYnkgZXhwbGljaXRseSBsaXN0aW5nIGFsbCB0aGUKKyAgIGZpbGVzIG9mIFRoZSBQcm9ncmFtIG5lYXIgdGhlIGNvcHlyaWdodCBub3RpY2Ugb2YgZWFjaCBmaWxlIG9yIGJ5CisgICB1c2luZyBhIGxpbmUgbGlrZQorCisgICAgJSBUaGlzIHByb2dyYW0gY29uc2lzdHMgb2YgYWxsIGZpbGVzIGxpc3RlZCBpbiBtYW5pZmVzdC50eHQuCisKKyAgIGluIHRoYXQgcGxhY2UuICBJbiB0aGUgYWJzZW5jZSBvZiBhbiB1bmVxdWl2b2NhbCBsaXN0IGl0IG1pZ2h0IGJlCisgICBpbXBvc3NpYmxlIGZvciB0aGUgbGljZW5zZWUgdG8gZGV0ZXJtaW5lIHdoYXQgaXMgY29uc2lkZXJlZCBieSB5b3UKKyAgIHRvIGNvbXByaXNlIFRoZSBQcm9ncmFtLgorCisgTm90aW5nIEV4Y2VwdGlvbmFsIEZpbGVzCisgIAorICAgSWYgVGhlIFByb2dyYW0gY29udGFpbnMgYW55IGZpbGVzIGJlYXJpbmcgYWRkaXRpb25hbCBjb25kaXRpb25zIG9uCisgICBtb2RpZmljYXRpb24sIG9yIG9uIGRpc3RyaWJ1dGlvbiBvZiBtb2RpZmllZCB2ZXJzaW9ucywgb2YgdGhvc2UKKyAgIGZpbGVzIChvdGhlciB0aGFuIHRob3NlIGxpc3RlZCBpbiBgQWRkaXRpb25hbCBDb25kaXRpb25zIG9uIExhVGVYCisgICBTb2Z0d2FyZSBGaWxlcycpLCB0aGVuIGl0IGlzIHJlY29tbWVuZGVkIHRoYXQgVGhlIFByb2dyYW0gY29udGFpbiBhCisgICBwcm9taW5lbnQgZmlsZSB0aGF0IGRlZmluZXMgdGhlIGV4Y2VwdGlvbmFsIGNvbmRpdGlvbnMsIGFuZCBlaXRoZXIKKyAgIGxpc3RzIHRoZSBleGNlcHRpb25hbCBmaWxlcyBvciBkZWZpbmVzIG9uZSBvciBtb3JlIGNhdGVnb3JpZXMgb2YKKyAgIGV4Y2VwdGlvbmFsIGZpbGVzLgorCisgICBGaWxlcyBjb250YWluaW5nIHRoZSB0ZXh0IG9mIGEgbGljZW5zZSAoc3VjaCBhcyB0aGlzIGZpbGUpIGFyZQorICAgb2Z0ZW4gZXhhbXBsZXMgb2YgZmlsZXMgYmVhcmluZyBtb3JlIHJlc3RyaWN0aXZlIGNvbmRpdGlvbnMgb24KKyAgIG1vZGlmaWNhdGlvbi4gIExhVGVYIGNvbmZpZ3VyYXRpb24gZmlsZXMgKHdpdGggZmlsZW5hbWUgZXh0ZW5zaW9uCisgICBgLmNmZycpIGFyZSBleGFtcGxlcyBvZiBmaWxlcyBiZWFyaW5nIGxlc3MgcmVzdHJpY3RpdmUgY29uZGl0aW9ucworICAgb24gdGhlIGRpc3RyaWJ1dGlvbiBvZiBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIGZpbGUuICBUaGUKKyAgIGFkZGl0aW9uYWwgY29uZGl0aW9ucyBvbiBMYVRlWCBzb2Z0d2FyZSBnaXZlbiBhYm92ZSBhcmUgZXhhbXBsZXMgCisgICBvZiBkZWNsYXJpbmcgYSBjYXRlZ29yeSBvZiBmaWxlcyBiZWFyaW5nIGV4Y2VwdGlvbmFsIGFkZGl0aW9uYWwKKyAgIGNvbmRpdGlvbnMuCisKKworCmRpZmYgLS1naXQgYS9saWNlbnNlcy9MUFBMLTEuMyBiL2xpY2Vuc2VzL0xQUEwtMS4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZGIwYjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9MUFBMLTEuMwpAQCAtMCwwICsxLDQwMSBAQAorCitUaGUgTGFUZVggUHJvamVjdCBQdWJsaWMgTGljZW5zZQorPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS0KKworTFBQTCBWZXJzaW9uIDEuMyAgMjAwMy0xMi0wMQorCitDb3B5cmlnaHQgMTk5OSAyMDAyLTAzIExhVGVYMyBQcm9qZWN0CisgICAgRXZlcnlvbmUgaXMgYWxsb3dlZCB0byBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGlzCisgICAgbGljZW5zZSBkb2N1bWVudCwgYnV0IG1vZGlmaWNhdGlvbiBvZiBpdCBpcyBub3QgYWxsb3dlZC4KKworCitQUkVBTUJMRQorPT09PT09PT0KKworVGhlIExhVGVYIFByb2plY3QgUHVibGljIExpY2Vuc2UgKExQUEwpIGlzIHRoZSBwcmltYXJ5IGxpY2Vuc2UgdW5kZXIKK3doaWNoIHRoZSB0aGUgTGFUZVgga2VybmVsIGFuZCB0aGUgYmFzZSBMYVRlWCBwYWNrYWdlcyBhcmUgZGlzdHJpYnV0ZWQuCisKK1lvdSBtYXkgdXNlIHRoaXMgbGljZW5zZSBmb3IgYW55IHdvcmsgb2Ygd2hpY2ggeW91IGhvbGQgdGhlIGNvcHlyaWdodAorYW5kIHdoaWNoIHlvdSB3aXNoIHRvIGRpc3RyaWJ1dGUuICBUaGlzIGxpY2Vuc2UgbWF5IGJlIHBhcnRpY3VsYXJseQorc3VpdGFibGUgaWYgeW91ciB3b3JrIGlzIFRlWC1yZWxhdGVkIChzdWNoIGFzIGEgTGFUZVggcGFja2FnZSksIGJ1dAoreW91IG1heSB1c2UgaXQgd2l0aCBzbWFsbCBtb2RpZmljYXRpb25zIGV2ZW4gaWYgeW91ciB3b3JrIGlzIHVucmVsYXRlZAordG8gVGVYLgorCitUaGUgc2VjdGlvbiBgV0hFVEhFUiBBTkQgSE9XIFRPIERJU1RSSUJVVEUgV09SS1MgVU5ERVIgVEhJUyBMSUNFTlNFJywKK2JlbG93LCBnaXZlcyBpbnN0cnVjdGlvbnMsIGV4YW1wbGVzLCBhbmQgcmVjb21tZW5kYXRpb25zIGZvciBhdXRob3JzCit3aG8gYXJlIGNvbnNpZGVyaW5nIGRpc3RyaWJ1dGluZyB0aGVpciB3b3JrcyB1bmRlciB0aGlzIGxpY2Vuc2UuCisKK1RoaXMgbGljZW5zZSBnaXZlcyBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGEgd29yayBtYXkgYmUgZGlzdHJpYnV0ZWQKK2FuZCBtb2RpZmllZCwgYXMgd2VsbCBhcyBjb25kaXRpb25zIHVuZGVyIHdoaWNoIG1vZGlmaWVkIHZlcnNpb25zIG9mCit0aGF0IHdvcmsgbWF5IGJlIGRpc3RyaWJ1dGVkLgorCitXZSwgdGhlIExhVGVYMyBQcm9qZWN0LCBiZWxpZXZlIHRoYXQgdGhlIGNvbmRpdGlvbnMgYmVsb3cgZ2l2ZSB5b3UKK3RoZSBmcmVlZG9tIHRvIG1ha2UgYW5kIGRpc3RyaWJ1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgeW91ciB3b3JrCit0aGF0IGNvbmZvcm0gd2l0aCB3aGF0ZXZlciB0ZWNobmljYWwgc3BlY2lmaWNhdGlvbnMgeW91IHdpc2ggd2hpbGUKK21haW50YWluaW5nIHRoZSBhdmFpbGFiaWxpdHksIGludGVncml0eSwgYW5kIHJlbGlhYmlsaXR5IG9mCit0aGF0IHdvcmsuICBJZiB5b3UgZG8gbm90IHNlZSBob3cgdG8gYWNoaWV2ZSB5b3VyIGdvYWwgd2hpbGUKK21lZXRpbmcgdGhlc2UgY29uZGl0aW9ucywgdGhlbiByZWFkIHRoZSBkb2N1bWVudCBgY2ZnZ3VpZGUudGV4JworYW5kIGBtb2RndWlkZS50ZXgnIGluIHRoZSBiYXNlIExhVGVYIGRpc3RyaWJ1dGlvbiBmb3Igc3VnZ2VzdGlvbnMuCisKKworREVGSU5JVElPTlMKKz09PT09PT09PT09CisKK0luIHRoaXMgbGljZW5zZSBkb2N1bWVudCB0aGUgZm9sbG93aW5nIHRlcm1zIGFyZSB1c2VkOgorCisgICBgV29yaycKKyAgICBBbnkgd29yayBiZWluZyBkaXN0cmlidXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisgICAgCisgICBgRGVyaXZlZCBXb3JrJworICAgIEFueSB3b3JrIHRoYXQgdW5kZXIgYW55IGFwcGxpY2FibGUgbGF3IGlzIGRlcml2ZWQgZnJvbSB0aGUgV29yay4KKworICAgYE1vZGlmaWNhdGlvbicgCisgICAgQW55IHByb2NlZHVyZSB0aGF0IHByb2R1Y2VzIGEgRGVyaXZlZCBXb3JrIHVuZGVyIGFueSBhcHBsaWNhYmxlCisgICAgbGF3IC0tIGZvciBleGFtcGxlLCB0aGUgcHJvZHVjdGlvbiBvZiBhIGZpbGUgY29udGFpbmluZyBhbgorICAgIG9yaWdpbmFsIGZpbGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBXb3JrIG9yIGEgc2lnbmlmaWNhbnQgcG9ydGlvbiBvZgorICAgIHN1Y2ggYSBmaWxlLCBlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vcgorICAgIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyIGxhbmd1YWdlLgorCisgICBgTW9kaWZ5JworICAgIFRvIGFwcGx5IGFueSBwcm9jZWR1cmUgdGhhdCBwcm9kdWNlcyBhIERlcml2ZWQgV29yayB1bmRlciBhbnkKKyAgICBhcHBsaWNhYmxlIGxhdy4KKyAgICAKKyAgIGBEaXN0cmlidXRpb24nCisgICAgTWFraW5nIGNvcGllcyBvZiB0aGUgV29yayBhdmFpbGFibGUgZnJvbSBvbmUgcGVyc29uIHRvIGFub3RoZXIsIGluCisgICAgd2hvbGUgb3IgaW4gcGFydC4gIERpc3RyaWJ1dGlvbiBpbmNsdWRlcyAoYnV0IGlzIG5vdCBsaW1pdGVkIHRvKQorICAgIG1ha2luZyBhbnkgZWxlY3Ryb25pYyBjb21wb25lbnRzIG9mIHRoZSBXb3JrIGFjY2Vzc2libGUgYnkKKyAgICBmaWxlIHRyYW5zZmVyIHByb3RvY29scyBzdWNoIGFzIEZUUCBvciBIVFRQIG9yIGJ5IHNoYXJlZCBmaWxlCisgICAgc3lzdGVtcyBzdWNoIGFzIFN1bidzIE5ldHdvcmsgRmlsZSBTeXN0ZW0gKE5GUykuCisKKyAgIGBDb21waWxlZCBXb3JrJworICAgIEEgdmVyc2lvbiBvZiB0aGUgV29yayB0aGF0IGhhcyBiZWVuIHByb2Nlc3NlZCBpbnRvIGEgZm9ybSB3aGVyZSBpdAorICAgIGlzIGRpcmVjdGx5IHVzYWJsZSBvbiBhIGNvbXB1dGVyIHN5c3RlbS4gIFRoaXMgcHJvY2Vzc2luZyBtYXkKKyAgICBpbmNsdWRlIHVzaW5nIGluc3RhbGxhdGlvbiBmYWNpbGl0aWVzIHByb3ZpZGVkIGJ5IHRoZSBXb3JrLAorICAgIHRyYW5zZm9ybWF0aW9ucyBvZiB0aGUgV29yaywgY29weWluZyBvZiBjb21wb25lbnRzIG9mIHRoZSBXb3JrLCBvcgorICAgIG90aGVyIGFjdGl2aXRpZXMuICBOb3RlIHRoYXQgbW9kaWZpY2F0aW9uIG9mIGFueSBpbnN0YWxsYXRpb24KKyAgICBmYWNpbGl0aWVzIHByb3ZpZGVkIGJ5IHRoZSBXb3JrIGNvbnN0aXR1dGVzIG1vZGlmaWNhdGlvbiBvZiB0aGUgV29yay4KKworICAgYEN1cnJlbnQgTWFpbnRhaW5lcicKKyAgICBBIHBlcnNvbiBvciBwZXJzb25zIG5vbWluYXRlZCBhcyBzdWNoIHdpdGhpbiB0aGUgV29yay4gIElmIHRoZXJlIGlzCisgICAgbm8gc3VjaCBleHBsaWNpdCBub21pbmF0aW9uIHRoZW4gaXQgaXMgdGhlIGBDb3B5cmlnaHQgSG9sZGVyJyB1bmRlcgorICAgIGFueSBhcHBsaWNhYmxlIGxhdy4KKworICAgYEJhc2UgSW50ZXJwcmV0ZXInIAorICAgIEEgcHJvZ3JhbSBvciBwcm9jZXNzIHRoYXQgaXMgbm9ybWFsbHkgbmVlZGVkIGZvciBydW5uaW5nIG9yCisgICAgaW50ZXJwcmV0aW5nIGEgcGFydCBvciB0aGUgd2hvbGUgb2YgdGhlIFdvcmsuICAgIAorICAgIEEgQmFzZSBJbnRlcnByZXRlciBtYXkgZGVwZW5kIG9uIGV4dGVybmFsIGNvbXBvbmVudHMgYnV0IHRoZXNlCisgICAgYXJlIG5vdCBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIEJhc2UgSW50ZXJwcmV0ZXIgcHJvdmlkZWQgdGhhdCBlYWNoCisgICAgZXh0ZXJuYWwgY29tcG9uZW50IGNsZWFybHkgaWRlbnRpZmllcyBpdHNlbGYgd2hlbmV2ZXIgaXQgaXMgdXNlZAorICAgIGludGVyYWN0aXZlbHkuICBVbmxlc3MgZXhwbGljaXRseSBzcGVjaWZpZWQgd2hlbiBhcHBseWluZyB0aGUKKyAgICBsaWNlbnNlIHRvIHRoZSBXb3JrLCB0aGUgb25seSBhcHBsaWNhYmxlIEJhc2UgSW50ZXJwcmV0ZXIgaXMgYQorICAgICJMYVRlWC1Gb3JtYXQiLgorCisKKworQ09ORElUSU9OUyBPTiBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisxLiAgQWN0aXZpdGllcyBvdGhlciB0aGFuIGRpc3RyaWJ1dGlvbiBhbmQvb3IgbW9kaWZpY2F0aW9uIG9mIHRoZSBXb3JrCithcmUgbm90IGNvdmVyZWQgYnkgdGhpcyBsaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIEluCitwYXJ0aWN1bGFyLCB0aGUgYWN0IG9mIHJ1bm5pbmcgdGhlIFdvcmsgaXMgbm90IHJlc3RyaWN0ZWQgYW5kIG5vCityZXF1aXJlbWVudHMgYXJlIG1hZGUgY29uY2VybmluZyBhbnkgb2ZmZXJzIG9mIHN1cHBvcnQgZm9yIHRoZSBXb3JrLgorCisyLiAgWW91IG1heSBkaXN0cmlidXRlIGEgY29tcGxldGUsIHVubW9kaWZpZWQgY29weSBvZiB0aGUgV29yayBhcyB5b3UKK3JlY2VpdmVkIGl0LiAgRGlzdHJpYnV0aW9uIG9mIG9ubHkgcGFydCBvZiB0aGUgV29yayBpcyBjb25zaWRlcmVkCittb2RpZmljYXRpb24gb2YgdGhlIFdvcmssIGFuZCBubyByaWdodCB0byBkaXN0cmlidXRlIHN1Y2ggYSBEZXJpdmVkCitXb3JrIG1heSBiZSBhc3N1bWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIGNsYXVzZS4KKworMy4gIFlvdSBtYXkgZGlzdHJpYnV0ZSBhIENvbXBpbGVkIFdvcmsgdGhhdCBoYXMgYmVlbiBnZW5lcmF0ZWQgZnJvbSBhCitjb21wbGV0ZSwgdW5tb2RpZmllZCBjb3B5IG9mIHRoZSBXb3JrIGFzIGRpc3RyaWJ1dGVkIHVuZGVyIENsYXVzZSAyCithYm92ZSwgYXMgbG9uZyBhcyB0aGF0IENvbXBpbGVkIFdvcmsgaXMgZGlzdHJpYnV0ZWQgaW4gc3VjaCBhIHdheSB0aGF0Cit0aGUgcmVjaXBpZW50cyBtYXkgaW5zdGFsbCB0aGUgQ29tcGlsZWQgV29yayBvbiB0aGVpciBzeXN0ZW0gZXhhY3RseQorYXMgaXQgd291bGQgaGF2ZSBiZWVuIGluc3RhbGxlZCBpZiB0aGV5IGdlbmVyYXRlZCBhIENvbXBpbGVkIFdvcmsKK2RpcmVjdGx5IGZyb20gdGhlIFdvcmsuCisKKzQuICBJZiB5b3UgYXJlIHRoZSBDdXJyZW50IE1haW50YWluZXIgb2YgdGhlIFdvcmssIHlvdSBtYXksIHdpdGhvdXQKK3Jlc3RyaWN0aW9uLCBtb2RpZnkgdGhlIFdvcmssIHRodXMgY3JlYXRpbmcgYSBEZXJpdmVkIFdvcmsuICBZb3UgbWF5CithbHNvIGRpc3RyaWJ1dGUgdGhlIERlcml2ZWQgV29yayB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKK0NvbXBpbGVkIFdvcmtzIGdlbmVyYXRlZCBmcm9tIHRoZSBEZXJpdmVkIFdvcmsuICBEZXJpdmVkIFdvcmtzCitkaXN0cmlidXRlZCBpbiB0aGlzIG1hbm5lciBieSB0aGUgQ3VycmVudCBNYWludGFpbmVyIGFyZSBjb25zaWRlcmVkIHRvCitiZSB1cGRhdGVkIHZlcnNpb25zIG9mIHRoZSBXb3JrLgorCis1LiAgSWYgeW91IGFyZSBub3QgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBvZiB0aGUgV29yaywgeW91IG1heSBtb2RpZnkKK3lvdXIgY29weSBvZiB0aGUgV29yaywgdGh1cyBjcmVhdGluZyBhIERlcml2ZWQgV29yayBiYXNlZCBvbiB0aGUgV29yaywKK2FuZCBjb21waWxlIHRoaXMgRGVyaXZlZCBXb3JrLCB0aHVzIGNyZWF0aW5nIGEgQ29tcGlsZWQgV29yayBiYXNlZCBvbgordGhlIERlcml2ZWQgV29yay4KKworNi4gIElmIHlvdSBhcmUgbm90IHRoZSBDdXJyZW50IE1haW50YWluZXIgb2YgdGhlIFdvcmssIHlvdSBtYXkKK2Rpc3RyaWJ1dGUgYSBEZXJpdmVkIFdvcmsgcHJvdmlkZWQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQKK2ZvciBldmVyeSBjb21wb25lbnQgb2YgdGhlIFdvcmsgdW5sZXNzIHRoYXQgY29tcG9uZW50IGNsZWFybHkgc3RhdGVzCitpbiB0aGUgY29weXJpZ2h0IG5vdGljZSB0aGF0IGl0IGlzIGV4ZW1wdCBmcm9tIHRoYXQgY29uZGl0aW9uLiAgT25seQordGhlIEN1cnJlbnQgTWFpbnRhaW5lciBpcyBhbGxvd2VkIHRvIGFkZCBzdWNoIHN0YXRlbWVudHMgb2YgZXhlbXB0aW9uIAordG8gYSBjb21wb25lbnQgb2YgdGhlIFdvcmsuIAorCisgIGEuIElmIGEgY29tcG9uZW50IG9mIHRoaXMgRGVyaXZlZCBXb3JrIGNhbiBiZSBhIGRpcmVjdCByZXBsYWNlbWVudAorICAgICBmb3IgYSBjb21wb25lbnQgb2YgdGhlIFdvcmsgd2hlbiB0aGF0IGNvbXBvbmVudCBpcyB1c2VkIHdpdGggdGhlCisgICAgIEJhc2UgSW50ZXJwcmV0ZXIsIHRoZW4sIHdoZXJldmVyIHRoaXMgY29tcG9uZW50IG9mIHRoZSBXb3JrCisgICAgIGlkZW50aWZpZXMgaXRzZWxmIHRvIHRoZSB1c2VyIHdoZW4gdXNlZCBpbnRlcmFjdGl2ZWx5IHdpdGggdGhhdAorICAgICBCYXNlIEludGVycHJldGVyLCB0aGUgcmVwbGFjZW1lbnQgY29tcG9uZW50IG9mIHRoaXMgRGVyaXZlZCBXb3JrCisgICAgIGNsZWFybHkgYW5kIHVuYW1iaWd1b3VzbHkgaWRlbnRpZmllcyBpdHNlbGYgYXMgYSBtb2RpZmllZCB2ZXJzaW9uCisgICAgIG9mIHRoaXMgY29tcG9uZW50IHRvIHRoZSB1c2VyIHdoZW4gdXNlZCBpbnRlcmFjdGl2ZWx5IHdpdGggdGhhdAorICAgICBCYXNlIEludGVycHJldGVyLgorICAgICAKKyAgYi4gRXZlcnkgY29tcG9uZW50IG9mIHRoZSBEZXJpdmVkIFdvcmsgY29udGFpbnMgcHJvbWluZW50IG5vdGljZXMKKyAgICAgZGV0YWlsaW5nIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZXMgdG8gdGhhdCBjb21wb25lbnQsIG9yIGEKKyAgICAgcHJvbWluZW50IHJlZmVyZW5jZSB0byBhbm90aGVyIGZpbGUgdGhhdCBpcyBkaXN0cmlidXRlZCBhcyBwYXJ0CisgICAgIG9mIHRoZSBEZXJpdmVkIFdvcmsgYW5kIHRoYXQgY29udGFpbnMgYSBjb21wbGV0ZSBhbmQgYWNjdXJhdGUgbG9nCisgICAgIG9mIHRoZSBjaGFuZ2VzLgorICAKKyAgYy4gTm8gaW5mb3JtYXRpb24gaW4gdGhlIERlcml2ZWQgV29yayBpbXBsaWVzIHRoYXQgYW55IHBlcnNvbnMsCisgICAgIGluY2x1ZGluZyAoYnV0IG5vdCBsaW1pdGVkIHRvKSB0aGUgYXV0aG9ycyBvZiB0aGUgb3JpZ2luYWwgdmVyc2lvbgorICAgICBvZiB0aGUgV29yaywgcHJvdmlkZSBhbnkgc3VwcG9ydCwgaW5jbHVkaW5nIChidXQgbm90IGxpbWl0ZWQgdG8pCisgICAgIHRoZSByZXBvcnRpbmcgYW5kIGhhbmRsaW5nIG9mIGVycm9ycywgdG8gcmVjaXBpZW50cyBvZiB0aGUKKyAgICAgRGVyaXZlZCBXb3JrIHVubGVzcyB0aG9zZSBwZXJzb25zIGhhdmUgc3RhdGVkIGV4cGxpY2l0bHkgdGhhdAorICAgICB0aGV5IGRvIHByb3ZpZGUgc3VjaCBzdXBwb3J0IGZvciB0aGUgRGVyaXZlZCBXb3JrLgorCisgIGQuIFlvdSBkaXN0cmlidXRlIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nIHdpdGggdGhlIERlcml2ZWQgV29yazoKKworICAgICAgIDEuIEEgY29tcGxldGUsIHVubW9kaWZpZWQgY29weSBvZiB0aGUgV29yazsgCisgICAgICAgICAgaWYgeW91ciBkaXN0cmlidXRpb24gb2YgYSBtb2RpZmllZCBjb21wb25lbnQgaXMgbWFkZSBieQorICAgICAgICAgIG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5IHRoZSBtb2RpZmllZCBjb21wb25lbnQgZnJvbSBhCisgICAgICAgICAgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5CisgICAgICAgICAgdGhlIFdvcmsgZnJvbSB0aGUgc2FtZSBvciBzb21lIHNpbWlsYXIgcGxhY2UgbWVldHMgdGhpcworICAgICAgICAgIGNvbmRpdGlvbiwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90IGNvbXBlbGxlZCB0bworICAgICAgICAgIGNvcHkgdGhlIFdvcmsgYWxvbmcgd2l0aCB0aGUgbW9kaWZpZWQgY29tcG9uZW50OworCisgICAgICAgMi4gSW5mb3JtYXRpb24gdGhhdCBpcyBzdWZmaWNpZW50IHRvIG9idGFpbiBhIGNvbXBsZXRlLCB1bm1vZGlmaWVkCisgICAgICAgICAgY29weSBvZiB0aGUgV29yay4KKworNy4gIElmIHlvdSBhcmUgbm90IHRoZSBDdXJyZW50IE1haW50YWluZXIgb2YgdGhlIFdvcmssIHlvdSBtYXkKK2Rpc3RyaWJ1dGUgYSBDb21waWxlZCBXb3JrIGdlbmVyYXRlZCBmcm9tIGEgRGVyaXZlZCBXb3JrLCBhcyBsb25nIGFzCit0aGUgRGVyaXZlZCBXb3JrIGlzIGRpc3RyaWJ1dGVkIHRvIGFsbCByZWNpcGllbnRzIG9mIHRoZSBDb21waWxlZAorV29yaywgYW5kIGFzIGxvbmcgYXMgdGhlIGNvbmRpdGlvbnMgb2YgQ2xhdXNlIDYsIGFib3ZlLCBhcmUgbWV0IHdpdGgKK3JlZ2FyZCB0byB0aGUgRGVyaXZlZCBXb3JrLgorCis4LiAgVGhlIGNvbmRpdGlvbnMgYWJvdmUgYXJlIG5vdCBpbnRlbmRlZCB0byBwcm9oaWJpdCwgYW5kIGhlbmNlIGRvCitub3QgYXBwbHkgdG8sIHRoZSBtb2RpZmljYXRpb24sIGJ5IGFueSBtZXRob2QsIG9mIGFueSBjb21wb25lbnQgc28gdGhhdCBpdAorYmVjb21lcyBpZGVudGljYWwgdG8gYW4gIHVwZGF0ZWQgdmVyc2lvbiBvZiB0aGF0IGNvbXBvbmVudCBvZiB0aGUgV29yayBhcworaXQgaXMgZGlzdHJpYnV0ZWQgYnkgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciB1bmRlciBDbGF1c2UgNCwgYWJvdmUuCisKKzkuICBEaXN0cmlidXRpb24gb2YgdGhlIFdvcmsgb3IgYW55IERlcml2ZWQgV29yayBpbiBhbiBhbHRlcm5hdGl2ZQorZm9ybWF0LCB3aGVyZSB0aGUgV29yayBvciB0aGF0IERlcml2ZWQgV29yayAoaW4gd2hvbGUgb3IgaW4gcGFydCkgaXMKK3RoZW4gcHJvZHVjZWQgYnkgYXBwbHlpbmcgc29tZSBwcm9jZXNzIHRvIHRoYXQgZm9ybWF0LCBkb2VzIG5vdCByZWxheCBvcgorbnVsbGlmeSBhbnkgc2VjdGlvbnMgb2YgdGhpcyBsaWNlbnNlIGFzIHRoZXkgcGVydGFpbiB0byB0aGUgcmVzdWx0cyBvZgorYXBwbHlpbmcgdGhhdCBwcm9jZXNzLgorICAgICAKKzEwLiBhLiBBIERlcml2ZWQgV29yayBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZQorICAgICAgIHByb3ZpZGVkIHRoYXQgbGljZW5zZSBpdHNlbGYgaG9ub3JzIHRoZSBjb25kaXRpb25zIGxpc3RlZCBpbgorICAgICAgIENsYXVzZSA2IGFib3ZlLCBpbiByZWdhcmQgdG8gdGhlIFdvcmssIHRob3VnaCBpdCBkb2VzIG5vdCBoYXZlCisgICAgICAgdG8gaG9ub3IgdGhlIHJlc3Qgb2YgdGhlIGNvbmRpdGlvbnMgaW4gdGhpcyBsaWNlbnNlLgorICAgICAgCisgICAgYi4gSWYgYSBEZXJpdmVkIFdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBsaWNlbnNlLCB0aGF0CisgICAgICAgRGVyaXZlZCBXb3JrIG11c3QgcHJvdmlkZSBzdWZmaWNpZW50IGRvY3VtZW50YXRpb24gYXMgcGFydCBvZgorICAgICAgIGl0c2VsZiB0byBhbGxvdyBlYWNoIHJlY2lwaWVudCBvZiB0aGF0IERlcml2ZWQgV29yayB0byBob25vciB0aGUgCisgICAgICAgcmVzdHJpY3Rpb25zIGluIENsYXVzZSA2IGFib3ZlLCBjb25jZXJuaW5nIGNoYW5nZXMgZnJvbSB0aGUgV29yay4KKworMTEuIFRoaXMgbGljZW5zZSBwbGFjZXMgbm8gcmVzdHJpY3Rpb25zIG9uIHdvcmtzIHRoYXQgYXJlIHVucmVsYXRlZCB0bwordGhlIFdvcmssIG5vciBkb2VzIHRoaXMgbGljZW5zZSBwbGFjZSBhbnkgcmVzdHJpY3Rpb25zIG9uIGFnZ3JlZ2F0aW5nCitzdWNoIHdvcmtzIHdpdGggdGhlIFdvcmsgYnkgYW55IG1lYW5zLgorCisxMi4gIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvLCBvciBtYXkgYmUgdXNlZCB0bywgcHJldmVudAorY29tcGxldGUgY29tcGxpYW5jZSBieSBhbGwgcGFydGllcyB3aXRoIGFsbCBhcHBsaWNhYmxlIGxhd3MuCisKKworTk8gV0FSUkFOVFkKKz09PT09PT09PT09CisKK1RoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgV29yay4gIEV4Y2VwdCB3aGVuIG90aGVyd2lzZSBzdGF0ZWQgaW4KK3dyaXRpbmcsIHRoZSBDb3B5cmlnaHQgSG9sZGVyIHByb3ZpZGVzIHRoZSBXb3JrIGBhcyBpcycsIHdpdGhvdXQKK3dhcnJhbnR5IG9mIGFueSBraW5kLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIGluY2x1ZGluZywgYnV0IG5vdAorbGltaXRlZCB0bywgdGhlIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yCithIHBhcnRpY3VsYXIgcHVycG9zZS4gIFRoZSBlbnRpcmUgcmlzayBhcyB0byB0aGUgcXVhbGl0eSBhbmQgcGVyZm9ybWFuY2UKK29mIHRoZSBXb3JrIGlzIHdpdGggeW91LiAgU2hvdWxkIHRoZSBXb3JrIHByb3ZlIGRlZmVjdGl2ZSwgeW91Cithc3N1bWUgdGhlIGNvc3Qgb2YgYWxsIG5lY2Vzc2FyeSBzZXJ2aWNpbmcsIHJlcGFpciwgb3IgY29ycmVjdGlvbi4KKworSW4gbm8gZXZlbnQgdW5sZXNzIGFncmVlZCB0byBpbiB3cml0aW5nIHdpbGwgdGhlIENvcHlyaWdodCBIb2xkZXIsIG9yCithbnkgYXV0aG9yIG5hbWVkIGluIHRoZSBjb21wb25lbnRzIG9mIHRoZSBXb3JrLCBvciBhbnkgb3RoZXIgcGFydHkgd2hvCittYXkgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBXb3JrIGFzIHBlcm1pdHRlZCBhYm92ZSwgYmUgbGlhYmxlIHRvCit5b3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBvcgorY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgb3V0IG9mIGFueSB1c2Ugb2YgdGhlIFdvcmsgb3Igb3V0IG9mCitpbmFiaWxpdHkgdG8gdXNlIHRoZSBXb3JrIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgbG9zcyBvZgorZGF0YSwgZGF0YSBiZWluZyByZW5kZXJlZCBpbmFjY3VyYXRlLCBvciBsb3NzZXMgc3VzdGFpbmVkIGJ5IGFueW9uZSBhcworYSByZXN1bHQgb2YgYW55IGZhaWx1cmUgb2YgdGhlIFdvcmsgdG8gb3BlcmF0ZSB3aXRoIGFueSBvdGhlcgorcHJvZ3JhbXMpLCBldmVuIGlmIHRoZSBDb3B5cmlnaHQgSG9sZGVyIG9yIHNhaWQgYXV0aG9yIG9yIHNhaWQgb3RoZXIKK3BhcnR5IGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKworCitNQUlOVEVOQU5DRSBPRiBUSEUgV09SSworPT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIFdvcmsgaGFzIHRoZSBzdGF0dXMgYGF1dGhvci1tYWludGFpbmVkJyBpZiB0aGUgQ29weXJpZ2h0IEhvbGRlcgorZXhwbGljaXRseSBhbmQgcHJvbWluZW50bHkgc3RhdGVzIG5lYXIgdGhlIHByaW1hcnkgY29weXJpZ2h0IG5vdGljZSBpbgordGhlIFdvcmsgdGhhdCB0aGUgV29yayBjYW4gb25seSBiZSBtYWludGFpbmVkIGJ5IHRoZSBDb3B5cmlnaHQgSG9sZGVyCitvciBzaW1wbHkgdGhhdCBpcyBgYXV0aG9yLW1haW50YWluZWQnLgorCitUaGUgV29yayBoYXMgdGhlIHN0YXR1cyBgbWFpbnRhaW5lZCcgaWYgdGhlcmUgaXMgYSBDdXJyZW50IE1haW50YWluZXIKK3dobyBoYXMgaW5kaWNhdGVkIGluIHRoZSBXb3JrIHRoYXQgdGhleSBhcmUgd2lsbGluZyB0byByZWNlaXZlIGVycm9yCityZXBvcnRzIGZvciB0aGUgV29yayAoZm9yIGV4YW1wbGUsIGJ5IHN1cHBseWluZyBhIHZhbGlkIGUtbWFpbAorYWRkcmVzcykuIEl0IGlzIG5vdCByZXF1aXJlZCBmb3IgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciB0byBhY2tub3dsZWRnZQorb3IgYWN0IHVwb24gdGhlc2UgZXJyb3IgcmVwb3J0cy4KKworVGhlIFdvcmsgY2hhbmdlcyBmcm9tIHN0YXR1cyBgbWFpbnRhaW5lZCcgdG8gYHVubWFpbnRhaW5lZCcgaWYgdGhlcmUKK2lzIG5vIEN1cnJlbnQgTWFpbnRhaW5lciwgb3IgdGhlIHBlcnNvbiBzdGF0ZWQgdG8gYmUgQ3VycmVudAorTWFpbnRhaW5lciBvZiB0aGUgd29yayBjYW5ub3QgYmUgcmVhY2hlZCB0aHJvdWdoIHRoZSBpbmRpY2F0ZWQgbWVhbnMKK29mIGNvbW11bmljYXRpb24gZm9yIGEgcGVyaW9kIG9mIHNpeCBtb250aHMsIGFuZCB0aGVyZSBhcmUgbm8gb3RoZXIKK3NpZ25pZmljYW50IHNpZ25zIG9mIGFjdGl2ZSBtYWludGVuYW5jZS4KKworWW91IGNhbiBiZWNvbWUgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBvZiB0aGUgV29yayBieSBhZ3JlZW1lbnQgd2l0aAorYW55IGV4aXN0aW5nIEN1cnJlbnQgTWFpbnRhaW5lciB0byB0YWtlIG92ZXIgdGhpcyByb2xlLgorCitJZiB0aGUgV29yayBpcyB1bm1haW50YWluZWQsIHlvdSBjYW4gYmVjb21lIHRoZSBDdXJyZW50IE1haW50YWluZXIgb2YKK3RoZSBXb3JrIHRocm91Z2ggdGhlIGZvbGxvd2luZyBzdGVwczoKKworIDEuICBNYWtlIGEgcmVhc29uYWJsZSBhdHRlbXB0IHRvIHRyYWNlIHRoZSBDdXJyZW50IE1haW50YWluZXIgKGFuZAorICAgICB0aGUgQ29weXJpZ2h0IEhvbGRlciwgaWYgdGhlIHR3byBkaWZmZXIpIHRocm91Z2ggdGhlIG1lYW5zIG9mCisgICAgIGFuIEludGVybmV0IG9yIHNpbWlsYXIgc2VhcmNoLgorCisgMi4gIElmIHRoaXMgc2VhcmNoIGlzIHN1Y2Nlc3NmdWwsIHRoZW4gZW5xdWlyZSB3aGV0aGVyIHRoZSBXb3JrCisgICAgIGlzIHN0aWxsIG1haW50YWluZWQuCisKKyAgYS4gSWYgaXQgaXMgYmVpbmcgbWFpbnRhaW5lZCwgdGhlbiBhc2sgdGhlIEN1cnJlbnQgTWFpbnRhaW5lcgorICAgICB0byB1cGRhdGUgdGhlaXIgY29tbXVuaWNhdGlvbiBkYXRhIHdpdGhpbiBvbmUgbW9udGguCisgICAgIAorICBiLiBJZiB0aGUgc2VhcmNoIGlzIHVuc3VjY2Vzc2Z1bCBvciBubyBhY3Rpb24gdG8gcmVzdW1lIGFjdGl2ZQorICAgICBtYWludGVuYW5jZSBpcyB0YWtlbiBieSB0aGUgQ3VycmVudCBNYWludGFpbmVyLCB0aGVuIGFubm91bmNlCisgICAgIHdpdGhpbiB0aGUgcGVydGluZW50IGNvbW11bml0eSB5b3VyIGludGVudGlvbiB0byB0YWtlIG92ZXIKKyAgICAgbWFpbnRlbmFuY2UuICAoSWYgdGhlIFdvcmsgaXMgYSBMYVRlWCB3b3JrLCB0aGlzIGNvdWxkIGJlCisgICAgIGRvbmUsIGZvciBleGFtcGxlLCBieSBwb3N0aW5nIHRvIGNvbXAudGV4dC50ZXguKQorCisgM2EuIElmIHRoZSBDdXJyZW50IE1haW50YWluZXIgaXMgcmVhY2hhYmxlIGFuZCBhZ3JlZXMgdG8gcGFzcworICAgICBtYWludGVuYW5jZSBvZiB0aGUgV29yayB0byB5b3UsIHRoZW4gdGhpcyB0YWtlcyBlZmZlY3QKKyAgICAgaW1tZWRpYXRlbHkgdXBvbiBhbm5vdW5jZW1lbnQuCisgICAgIAorICBiLiBJZiB0aGUgQ3VycmVudCBNYWludGFpbmVyIGlzIG5vdCByZWFjaGFibGUgYW5kIHRoZSBDb3B5cmlnaHQKKyAgICAgSG9sZGVyIGFncmVlcyB0aGF0IG1haW50ZW5hbmNlIG9mIHRoZSBXb3JrIGJlIHBhc3NlZCB0byB5b3UsCisgICAgIHRoZW4gdGhpcyB0YWtlcyBlZmZlY3QgaW1tZWRpYXRlbHkgdXBvbiBhbm5vdW5jZW1lbnQuICAKKyAgICAKKyA0LiAgSWYgeW91IG1ha2UgYW4gYGludGVudGlvbiBhbm5vdW5jZW1lbnQnIGFzIGRlc2NyaWJlZCBpbiAyYi4gYWJvdmUKKyAgICAgYW5kIGFmdGVyIHRocmVlIG1vbnRocyB5b3VyIGludGVudGlvbiBpcyBjaGFsbGVuZ2VkIG5laXRoZXIgYnkKKyAgICAgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBub3IgYnkgdGhlIENvcHlyaWdodCBIb2xkZXIgbm9yIGJ5IG90aGVyCisgICAgIHBlb3BsZSwgdGhlbiB5b3UgbWF5IGFycmFuZ2UgZm9yIHRoZSBXb3JrIHRvIGJlIGNoYW5nZWQgc28gYXMKKyAgICAgdG8gbmFtZSB5b3UgYXMgdGhlIChuZXcpIEN1cnJlbnQgTWFpbnRhaW5lci4KKyAgICAgCisgNS4gIElmIHRoZSBwcmV2aW91c2x5IHVucmVhY2hhYmxlIEN1cnJlbnQgTWFpbnRhaW5lciBiZWNvbWVzCisgICAgIHJlYWNoYWJsZSBvbmNlIG1vcmUgd2l0aGluIHRocmVlIG1vbnRocyBvZiBhIGNoYW5nZSBjb21wbGV0ZWQKKyAgICAgdW5kZXIgdGhlIHRlcm1zIG9mIDNiKSBvciA0KSwgdGhlbiB0aGF0IEN1cnJlbnQgTWFpbnRhaW5lciBtdXN0CisgICAgIGJlY29tZSBvciByZW1haW4gdGhlIEN1cnJlbnQgTWFpbnRhaW5lciB1cG9uIHJlcXVlc3QgcHJvdmlkZWQKKyAgICAgdGhleSB0aGVuIHVwZGF0ZSB0aGVpciBjb21tdW5pY2F0aW9uIGRhdGEgd2l0aGluIG9uZSBtb250aC4KKworQSBjaGFuZ2UgaW4gdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBkb2VzIG5vdCwgb2YgaXRzZWxmLCBhbHRlciB0aGUgZmFjdAordGhhdCB0aGUgV29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTFBQTCBsaWNlbnNlLgorCitJZiB5b3UgYmVjb21lIHRoZSBDdXJyZW50IE1haW50YWluZXIgb2YgdGhlIFdvcmssIHlvdSBzaG91bGQKK2ltbWVkaWF0ZWx5IHByb3ZpZGUsIHdpdGhpbiB0aGUgV29yaywgYSBwcm9taW5lbnQgYW5kIHVuYW1iaWd1b3VzCitzdGF0ZW1lbnQgb2YgeW91ciBzdGF0dXMgYXMgQ3VycmVudCBNYWludGFpbmVyLiAgWW91IHNob3VsZCBhbHNvCithbm5vdW5jZSB5b3VyIG5ldyBzdGF0dXMgdG8gdGhlIHNhbWUgcGVydGluZW50IGNvbW11bml0eSBhcworaW4gMmIpIGFib3ZlLgorCisKK1dIRVRIRVIgQU5EIEhPVyBUTyBESVNUUklCVVRFIFdPUktTIFVOREVSIFRISVMgTElDRU5TRQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgc2VjdGlvbiBjb250YWlucyBpbXBvcnRhbnQgaW5zdHJ1Y3Rpb25zLCBleGFtcGxlcywgYW5kCityZWNvbW1lbmRhdGlvbnMgZm9yIGF1dGhvcnMgd2hvIGFyZSBjb25zaWRlcmluZyBkaXN0cmlidXRpbmcgdGhlaXIKK3dvcmtzIHVuZGVyIHRoaXMgbGljZW5zZS4gIFRoZXNlIGF1dGhvcnMgYXJlIGFkZHJlc3NlZCBhcyBgeW91JyBpbgordGhpcyBzZWN0aW9uLgorCitDaG9vc2luZyBUaGlzIExpY2Vuc2Ugb3IgQW5vdGhlciBMaWNlbnNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIGZvciBhbnkgcGFydCBvZiB5b3VyIHdvcmsgeW91IHdhbnQgb3IgbmVlZCB0byB1c2UgKmRpc3RyaWJ1dGlvbioKK2NvbmRpdGlvbnMgdGhhdCBkaWZmZXIgc2lnbmlmaWNhbnRseSBmcm9tIHRob3NlIGluIHRoaXMgbGljZW5zZSwgdGhlbgorZG8gbm90IHJlZmVyIHRvIHRoaXMgbGljZW5zZSBhbnl3aGVyZSBpbiB5b3VyIHdvcmsgYnV0LCBpbnN0ZWFkLAorZGlzdHJpYnV0ZSB5b3VyIHdvcmsgdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZS4gIFlvdSBtYXkgdXNlIHRoZSB0ZXh0CitvZiB0aGlzIGxpY2Vuc2UgYXMgYSBtb2RlbCBmb3IgeW91ciBvd24gbGljZW5zZSwgYnV0IHlvdXIgbGljZW5zZQorc2hvdWxkIG5vdCByZWZlciB0byB0aGUgTFBQTCBvciBvdGhlcndpc2UgZ2l2ZSB0aGUgaW1wcmVzc2lvbiB0aGF0Cit5b3VyIHdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExQUEwuCisKK1RoZSBkb2N1bWVudCBgbW9kZ3VpZGUudGV4JyBpbiB0aGUgYmFzZSBMYVRlWCBkaXN0cmlidXRpb24gZXhwbGFpbnMKK3RoZSBtb3RpdmF0aW9uIGJlaGluZCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIGxpY2Vuc2UuICBJdCBleHBsYWlucywKK2ZvciBleGFtcGxlLCB3aHkgZGlzdHJpYnV0aW5nIExhVGVYIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgKEdQTCkgd2FzIGNvbnNpZGVyZWQgaW5hcHByb3ByaWF0ZS4gIEV2ZW4gaWYgeW91ciB3b3JrIGlzCit1bnJlbGF0ZWQgdG8gTGFUZVgsIHRoZSBkaXNjdXNzaW9uIGluIGBtb2RndWlkZS50ZXgnIG1heSBzdGlsbCBiZQorcmVsZXZhbnQsIGFuZCBhdXRob3JzIGludGVuZGluZyB0byBkaXN0cmlidXRlIHRoZWlyIHdvcmtzIHVuZGVyIGFueQorbGljZW5zZSBhcmUgZW5jb3VyYWdlZCB0byByZWFkIGl0LgorCitBIFJlY29tbWVuZGF0aW9uIG9uIE1vZGlmaWNhdGlvbiBXaXRob3V0IERpc3RyaWJ1dGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSXQgaXMgd2lzZSBuZXZlciB0byBtb2RpZnkgYSBjb21wb25lbnQgb2YgdGhlIFdvcmssIGV2ZW4gZm9yIHlvdXIgb3duCitwZXJzb25hbCB1c2UsIHdpdGhvdXQgYWxzbyBtZWV0aW5nIHRoZSBhYm92ZSBjb25kaXRpb25zIGZvcgorZGlzdHJpYnV0aW5nIHRoZSBtb2RpZmllZCBjb21wb25lbnQuICBXaGlsZSB5b3UgbWlnaHQgaW50ZW5kIHRoYXQgc3VjaAorbW9kaWZpY2F0aW9ucyB3aWxsIG5ldmVyIGJlIGRpc3RyaWJ1dGVkLCBvZnRlbiB0aGlzIHdpbGwgaGFwcGVuIGJ5CithY2NpZGVudCAtLSB5b3UgbWF5IGZvcmdldCB0aGF0IHlvdSBoYXZlIG1vZGlmaWVkIHRoYXQgY29tcG9uZW50OyBvcgoraXQgbWF5IG5vdCBvY2N1ciB0byB5b3Ugd2hlbiBhbGxvd2luZyBvdGhlcnMgdG8gYWNjZXNzIHRoZSBtb2RpZmllZAordmVyc2lvbiB0aGF0IHlvdSBhcmUgdGh1cyBkaXN0cmlidXRpbmcgaXQgYW5kIHZpb2xhdGluZyB0aGUgY29uZGl0aW9ucworb2YgdGhpcyBsaWNlbnNlIGluIHdheXMgdGhhdCBjb3VsZCBoYXZlIGxlZ2FsIGltcGxpY2F0aW9ucyBhbmQsIHdvcnNlLAorY2F1c2UgcHJvYmxlbXMgZm9yIHRoZSBjb21tdW5pdHkuICBJdCBpcyB0aGVyZWZvcmUgdXN1YWxseSBpbiB5b3VyCitiZXN0IGludGVyZXN0IHRvIGtlZXAgeW91ciBjb3B5IG9mIHRoZSBXb3JrIGlkZW50aWNhbCB3aXRoIHRoZSBwdWJsaWMKK29uZS4gIE1hbnkgd29ya3MgcHJvdmlkZSB3YXlzIHRvIGNvbnRyb2wgdGhlIGJlaGF2aW9yIG9mIHRoYXQgd29yaword2l0aG91dCBhbHRlcmluZyBhbnkgb2YgaXRzIGxpY2Vuc2VkIGNvbXBvbmVudHMuCisKK0hvdyB0byBVc2UgVGhpcyBMaWNlbnNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyB1c2UgdGhpcyBsaWNlbnNlLCBwbGFjZSBpbiBlYWNoIG9mIHRoZSBjb21wb25lbnRzIG9mIHlvdXIgd29yayBib3RoCithbiBleHBsaWNpdCBjb3B5cmlnaHQgbm90aWNlIGluY2x1ZGluZyB5b3VyIG5hbWUgYW5kIHRoZSB5ZWFyIHRoZSB3b3JrCit3YXMgYXV0aG9yZWQgYW5kL29yIGxhc3Qgc3Vic3RhbnRpYWxseSBtb2RpZmllZC4gIEluY2x1ZGUgYWxzbyBhCitzdGF0ZW1lbnQgdGhhdCB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciBtb2RpZmljYXRpb24gb2YgdGhhdAorY29tcG9uZW50IGlzIGNvbnN0cmFpbmVkIGJ5IHRoZSBjb25kaXRpb25zIGluIHRoaXMgbGljZW5zZS4KKworSGVyZSBpcyBhbiBleGFtcGxlIG9mIHN1Y2ggYSBub3RpY2UgYW5kIHN0YXRlbWVudDoKKworICAlJSBwaWcuZHR4CisgICUlIENvcHlyaWdodCAyMDAzIE0uIFkuIE5hbWUKKyAgJQorICAlIFRoaXMgd29yayBtYXkgYmUgZGlzdHJpYnV0ZWQgYW5kL29yIG1vZGlmaWVkIHVuZGVyIHRoZQorICAlIGNvbmRpdGlvbnMgb2YgdGhlIExhVGVYIFByb2plY3QgUHVibGljIExpY2Vuc2UsIGVpdGhlciB2ZXJzaW9uIDEuMworICAlIG9mIHRoaXMgbGljZW5zZSBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAlIFRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIGxpY2Vuc2UgaXMgaW4KKyAgJSAgIGh0dHA6Ly93d3cubGF0ZXgtcHJvamVjdC5vcmcvbHBwbC50eHQKKyAgJSBhbmQgdmVyc2lvbiAxLjMgb3IgbGF0ZXIgaXMgcGFydCBvZiBhbGwgZGlzdHJpYnV0aW9ucyBvZiBMYVRlWAorICAlIHZlcnNpb24gMjAwMy8xMi8wMSBvciBsYXRlci4KKyAgJQorICAlIFRoaXMgd29yayBoYXMgdGhlIExQUEwgbWFpbnRlbmFuY2Ugc3RhdHVzICJtYWludGFpbmVkIi4KKyAgJSAKKyAgJSBUaGlzIEN1cnJlbnQgTWFpbnRhaW5lciBvZiB0aGlzIHdvcmsgaXMgTS4gWS4gTmFtZS4KKyAgJQorICAlIFRoaXMgd29yayBjb25zaXN0cyBvZiB0aGUgZmlsZXMgcGlnLmR0eCBhbmQgcGlnLmlucworICAlIGFuZCB0aGUgZGVyaXZlZCBmaWxlIHBpZy5zdHkuCisKK0dpdmVuIHN1Y2ggYSBub3RpY2UgYW5kIHN0YXRlbWVudCBpbiBhIGZpbGUsIHRoZSBjb25kaXRpb25zCitnaXZlbiBpbiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQgd291bGQgYXBwbHksIHdpdGggdGhlIGBXb3JrJyByZWZlcnJpbmcKK3RvIHRoZSB0aHJlZSBmaWxlcyBgcGlnLmR0eCcsIGBwaWcuaW5zJywgYW5kIGBwaWcuc3R5JyAodGhlIGxhc3QgYmVpbmcKK2dlbmVyYXRlZCBmcm9tIGBwaWcuZHR4JyB1c2luZyBgcGlnLmlucycpLCB0aGUgYEJhc2UgSW50ZXJwcmV0ZXInCityZWZlcnJpbmcgdG8gYW55ICJMYVRlWC1Gb3JtYXQiLCBhbmQgYm90aCBgQ29weXJpZ2h0IEhvbGRlcicgYW5kCitgQ3VycmVudCBNYWludGFpbmVyJyByZWZlcnJpbmcgdG8gdGhlIHBlcnNvbiBgTS4gWS4gTmFtZScuCisKK1RvIHByZXZlbnQgdGhlIE1haW50ZW5hbmNlIHNlY3Rpb24gb2YgTFBQTCBmcm9tIGFsbG93aW5nIHNvbWVvbmUgZWxzZQordG8gYmVjb21lIHRoZSBDdXJyZW50IE1haW50YWluZXIgd2l0aG91dCB5b3VyIGFncmVlbWVudCwgeW91IGNvdWxkCitjaGFuZ2UgIm1haW50YWluZWQiIGFib3ZlIGludG8gImF1dGhvci1tYWludGFpbmVkIi4KKworCitJbXBvcnRhbnQgUmVjb21tZW5kYXRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyBEZWZpbmluZyBXaGF0IENvbnN0aXR1dGVzIHRoZSBXb3JrCisKKyAgIFRoZSBMUFBMIHJlcXVpcmVzIHRoYXQgZGlzdHJpYnV0aW9ucyBvZiB0aGUgV29yayBjb250YWluIGFsbCB0aGUKKyAgIGZpbGVzIG9mIHRoZSBXb3JrLiAgSXQgaXMgdGhlcmVmb3JlIGltcG9ydGFudCB0aGF0IHlvdSBwcm92aWRlIGEKKyAgIHdheSBmb3IgdGhlIGxpY2Vuc2VlIHRvIGRldGVybWluZSB3aGljaCBmaWxlcyBjb25zdGl0dXRlIHRoZSBXb3JrLgorICAgVGhpcyBjb3VsZCwgZm9yIGV4YW1wbGUsIGJlIGFjaGlldmVkIGJ5IGV4cGxpY2l0bHkgbGlzdGluZyBhbGwgdGhlCisgICBmaWxlcyBvZiB0aGUgV29yayBuZWFyIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIGVhY2ggZmlsZSBvciBieQorICAgdXNpbmcgYSBsaW5lIHN1Y2ggYXM6CisKKyAgICAlIFRoaXMgd29yayBjb25zaXN0cyBvZiBhbGwgZmlsZXMgbGlzdGVkIGluIG1hbmlmZXN0LnR4dC4KKyAgIAorICAgaW4gdGhhdCBwbGFjZS4gIEluIHRoZSBhYnNlbmNlIG9mIGFuIHVuZXF1aXZvY2FsIGxpc3QgaXQgbWlnaHQgYmUKKyAgIGltcG9zc2libGUgZm9yIHRoZSBsaWNlbnNlZSB0byBkZXRlcm1pbmUgd2hhdCBpcyBjb25zaWRlcmVkIGJ5IHlvdQorICAgdG8gY29tcHJpc2UgdGhlIFdvcmsgYW5kLCBpbiBzdWNoIGEgY2FzZSwgdGhlIGxpY2Vuc2VlIHdvdWxkIGJlCisgICBlbnRpdGxlZCB0byBtYWtlIHJlYXNvbmFibGUgY29uamVjdHVyZXMgYXMgdG8gd2hpY2ggZmlsZXMgY29tcHJpc2UKKyAgIHRoZSBXb3JrLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvTFBQTC0xLjNiIGIvbGljZW5zZXMvTFBQTC0xLjNiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzZDk5YjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9MUFBMLTEuM2IKQEAgLTAsMCArMSw0MTYgQEAKK1RoZSBMYVRlWCBQcm9qZWN0IFB1YmxpYyBMaWNlbnNlCis9LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LQorCitMUFBMIFZlcnNpb24gMS4zYiAgMjAwNi0wMS0wNworCitDb3B5cmlnaHQgMTk5OSAyMDAyLTIwMDYgTGFUZVgzIFByb2plY3QKKyAgICBFdmVyeW9uZSBpcyBhbGxvd2VkIHRvIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMKKyAgICBsaWNlbnNlIGRvY3VtZW50LCBidXQgbW9kaWZpY2F0aW9uIG9mIGl0IGlzIG5vdCBhbGxvd2VkLgorCisKK1BSRUFNQkxFCis9PT09PT09PQorCitUaGUgTGFUZVggUHJvamVjdCBQdWJsaWMgTGljZW5zZSAoTFBQTCkgaXMgdGhlIHByaW1hcnkgbGljZW5zZSB1bmRlcgord2hpY2ggdGhlIHRoZSBMYVRlWCBrZXJuZWwgYW5kIHRoZSBiYXNlIExhVGVYIHBhY2thZ2VzIGFyZSBkaXN0cmlidXRlZC4KKworWW91IG1heSB1c2UgdGhpcyBsaWNlbnNlIGZvciBhbnkgd29yayBvZiB3aGljaCB5b3UgaG9sZCB0aGUgY29weXJpZ2h0CithbmQgd2hpY2ggeW91IHdpc2ggdG8gZGlzdHJpYnV0ZS4gIFRoaXMgbGljZW5zZSBtYXkgYmUgcGFydGljdWxhcmx5CitzdWl0YWJsZSBpZiB5b3VyIHdvcmsgaXMgVGVYLXJlbGF0ZWQgKHN1Y2ggYXMgYSBMYVRlWCBwYWNrYWdlKSwgYnV0Cit5b3UgbWF5IHVzZSBpdCB3aXRoIHNtYWxsIG1vZGlmaWNhdGlvbnMgZXZlbiBpZiB5b3VyIHdvcmsgaXMgdW5yZWxhdGVkCit0byBUZVguCisKK1RoZSBzZWN0aW9uIGBXSEVUSEVSIEFORCBIT1cgVE8gRElTVFJJQlVURSBXT1JLUyBVTkRFUiBUSElTIExJQ0VOU0UnLAorYmVsb3csIGdpdmVzIGluc3RydWN0aW9ucywgZXhhbXBsZXMsIGFuZCByZWNvbW1lbmRhdGlvbnMgZm9yIGF1dGhvcnMKK3dobyBhcmUgY29uc2lkZXJpbmcgZGlzdHJpYnV0aW5nIHRoZWlyIHdvcmtzIHVuZGVyIHRoaXMgbGljZW5zZS4KKworVGhpcyBsaWNlbnNlIGdpdmVzIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggYSB3b3JrIG1heSBiZSBkaXN0cmlidXRlZAorYW5kIG1vZGlmaWVkLCBhcyB3ZWxsIGFzIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggbW9kaWZpZWQgdmVyc2lvbnMgb2YKK3RoYXQgd29yayBtYXkgYmUgZGlzdHJpYnV0ZWQuCisKK1dlLCB0aGUgTGFUZVgzIFByb2plY3QsIGJlbGlldmUgdGhhdCB0aGUgY29uZGl0aW9ucyBiZWxvdyBnaXZlIHlvdQordGhlIGZyZWVkb20gdG8gbWFrZSBhbmQgZGlzdHJpYnV0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiB5b3VyIHdvcmsKK3RoYXQgY29uZm9ybSB3aXRoIHdoYXRldmVyIHRlY2huaWNhbCBzcGVjaWZpY2F0aW9ucyB5b3Ugd2lzaCB3aGlsZQorbWFpbnRhaW5pbmcgdGhlIGF2YWlsYWJpbGl0eSwgaW50ZWdyaXR5LCBhbmQgcmVsaWFiaWxpdHkgb2YKK3RoYXQgd29yay4gIElmIHlvdSBkbyBub3Qgc2VlIGhvdyB0byBhY2hpZXZlIHlvdXIgZ29hbCB3aGlsZQorbWVldGluZyB0aGVzZSBjb25kaXRpb25zLCB0aGVuIHJlYWQgdGhlIGRvY3VtZW50IGBjZmdndWlkZS50ZXgnCithbmQgYG1vZGd1aWRlLnRleCcgaW4gdGhlIGJhc2UgTGFUZVggZGlzdHJpYnV0aW9uIGZvciBzdWdnZXN0aW9ucy4KKworCitERUZJTklUSU9OUworPT09PT09PT09PT0KKworSW4gdGhpcyBsaWNlbnNlIGRvY3VtZW50IHRoZSBmb2xsb3dpbmcgdGVybXMgYXJlIHVzZWQ6CisKKyAgIGBXb3JrJworICAgIEFueSB3b3JrIGJlaW5nIGRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KKyAgICAKKyAgIGBEZXJpdmVkIFdvcmsnCisgICAgQW55IHdvcmsgdGhhdCB1bmRlciBhbnkgYXBwbGljYWJsZSBsYXcgaXMgZGVyaXZlZCBmcm9tIHRoZSBXb3JrLgorCisgICBgTW9kaWZpY2F0aW9uJyAKKyAgICBBbnkgcHJvY2VkdXJlIHRoYXQgcHJvZHVjZXMgYSBEZXJpdmVkIFdvcmsgdW5kZXIgYW55IGFwcGxpY2FibGUKKyAgICBsYXcgLS0gZm9yIGV4YW1wbGUsIHRoZSBwcm9kdWN0aW9uIG9mIGEgZmlsZSBjb250YWluaW5nIGFuCisgICAgb3JpZ2luYWwgZmlsZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmsgb3IgYSBzaWduaWZpY2FudCBwb3J0aW9uIG9mCisgICAgc3VjaCBhIGZpbGUsIGVpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yCisgICAgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuCisKKyAgIGBNb2RpZnknCisgICAgVG8gYXBwbHkgYW55IHByb2NlZHVyZSB0aGF0IHByb2R1Y2VzIGEgRGVyaXZlZCBXb3JrIHVuZGVyIGFueQorICAgIGFwcGxpY2FibGUgbGF3LgorICAgIAorICAgYERpc3RyaWJ1dGlvbicKKyAgICBNYWtpbmcgY29waWVzIG9mIHRoZSBXb3JrIGF2YWlsYWJsZSBmcm9tIG9uZSBwZXJzb24gdG8gYW5vdGhlciwgaW4KKyAgICB3aG9sZSBvciBpbiBwYXJ0LiAgRGlzdHJpYnV0aW9uIGluY2x1ZGVzIChidXQgaXMgbm90IGxpbWl0ZWQgdG8pCisgICAgbWFraW5nIGFueSBlbGVjdHJvbmljIGNvbXBvbmVudHMgb2YgdGhlIFdvcmsgYWNjZXNzaWJsZSBieQorICAgIGZpbGUgdHJhbnNmZXIgcHJvdG9jb2xzIHN1Y2ggYXMgRlRQIG9yIEhUVFAgb3IgYnkgc2hhcmVkIGZpbGUKKyAgICBzeXN0ZW1zIHN1Y2ggYXMgU3VuJ3MgTmV0d29yayBGaWxlIFN5c3RlbSAoTkZTKS4KKworICAgYENvbXBpbGVkIFdvcmsnCisgICAgQSB2ZXJzaW9uIG9mIHRoZSBXb3JrIHRoYXQgaGFzIGJlZW4gcHJvY2Vzc2VkIGludG8gYSBmb3JtIHdoZXJlIGl0CisgICAgaXMgZGlyZWN0bHkgdXNhYmxlIG9uIGEgY29tcHV0ZXIgc3lzdGVtLiAgVGhpcyBwcm9jZXNzaW5nIG1heQorICAgIGluY2x1ZGUgdXNpbmcgaW5zdGFsbGF0aW9uIGZhY2lsaXRpZXMgcHJvdmlkZWQgYnkgdGhlIFdvcmssCisgICAgdHJhbnNmb3JtYXRpb25zIG9mIHRoZSBXb3JrLCBjb3B5aW5nIG9mIGNvbXBvbmVudHMgb2YgdGhlIFdvcmssIG9yCisgICAgb3RoZXIgYWN0aXZpdGllcy4gIE5vdGUgdGhhdCBtb2RpZmljYXRpb24gb2YgYW55IGluc3RhbGxhdGlvbgorICAgIGZhY2lsaXRpZXMgcHJvdmlkZWQgYnkgdGhlIFdvcmsgY29uc3RpdHV0ZXMgbW9kaWZpY2F0aW9uIG9mIHRoZSBXb3JrLgorCisgICBgQ3VycmVudCBNYWludGFpbmVyJworICAgIEEgcGVyc29uIG9yIHBlcnNvbnMgbm9taW5hdGVkIGFzIHN1Y2ggd2l0aGluIHRoZSBXb3JrLiAgSWYgdGhlcmUgaXMKKyAgICBubyBzdWNoIGV4cGxpY2l0IG5vbWluYXRpb24gdGhlbiBpdCBpcyB0aGUgYENvcHlyaWdodCBIb2xkZXInIHVuZGVyCisgICAgYW55IGFwcGxpY2FibGUgbGF3LgorCisgICBgQmFzZSBJbnRlcnByZXRlcicgCisgICAgQSBwcm9ncmFtIG9yIHByb2Nlc3MgdGhhdCBpcyBub3JtYWxseSBuZWVkZWQgZm9yIHJ1bm5pbmcgb3IKKyAgICBpbnRlcnByZXRpbmcgYSBwYXJ0IG9yIHRoZSB3aG9sZSBvZiB0aGUgV29yay4gICAgCisKKyAgICBBIEJhc2UgSW50ZXJwcmV0ZXIgbWF5IGRlcGVuZCBvbiBleHRlcm5hbCBjb21wb25lbnRzIGJ1dCB0aGVzZQorICAgIGFyZSBub3QgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBCYXNlIEludGVycHJldGVyIHByb3ZpZGVkIHRoYXQgZWFjaAorICAgIGV4dGVybmFsIGNvbXBvbmVudCBjbGVhcmx5IGlkZW50aWZpZXMgaXRzZWxmIHdoZW5ldmVyIGl0IGlzIHVzZWQKKyAgICBpbnRlcmFjdGl2ZWx5LiAgVW5sZXNzIGV4cGxpY2l0bHkgc3BlY2lmaWVkIHdoZW4gYXBwbHlpbmcgdGhlCisgICAgbGljZW5zZSB0byB0aGUgV29yaywgdGhlIG9ubHkgYXBwbGljYWJsZSBCYXNlIEludGVycHJldGVyIGlzIGEKKyAgICBgTGFUZVgtRm9ybWF0JyBvciBpbiB0aGUgY2FzZSBvZiBmaWxlcyBiZWxvbmdpbmcgdG8gdGhlIAorICAgIGBMYVRlWC1mb3JtYXQnIGEgcHJvZ3JhbSBpbXBsZW1lbnRpbmcgdGhlIGBUZVggbGFuZ3VhZ2UnLgorCisKKworQ09ORElUSU9OUyBPTiBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisxLiAgQWN0aXZpdGllcyBvdGhlciB0aGFuIGRpc3RyaWJ1dGlvbiBhbmQvb3IgbW9kaWZpY2F0aW9uIG9mIHRoZSBXb3JrCithcmUgbm90IGNvdmVyZWQgYnkgdGhpcyBsaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIEluCitwYXJ0aWN1bGFyLCB0aGUgYWN0IG9mIHJ1bm5pbmcgdGhlIFdvcmsgaXMgbm90IHJlc3RyaWN0ZWQgYW5kIG5vCityZXF1aXJlbWVudHMgYXJlIG1hZGUgY29uY2VybmluZyBhbnkgb2ZmZXJzIG9mIHN1cHBvcnQgZm9yIHRoZSBXb3JrLgorCisyLiAgWW91IG1heSBkaXN0cmlidXRlIGEgY29tcGxldGUsIHVubW9kaWZpZWQgY29weSBvZiB0aGUgV29yayBhcyB5b3UKK3JlY2VpdmVkIGl0LiAgRGlzdHJpYnV0aW9uIG9mIG9ubHkgcGFydCBvZiB0aGUgV29yayBpcyBjb25zaWRlcmVkCittb2RpZmljYXRpb24gb2YgdGhlIFdvcmssIGFuZCBubyByaWdodCB0byBkaXN0cmlidXRlIHN1Y2ggYSBEZXJpdmVkCitXb3JrIG1heSBiZSBhc3N1bWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIGNsYXVzZS4KKworMy4gIFlvdSBtYXkgZGlzdHJpYnV0ZSBhIENvbXBpbGVkIFdvcmsgdGhhdCBoYXMgYmVlbiBnZW5lcmF0ZWQgZnJvbSBhCitjb21wbGV0ZSwgdW5tb2RpZmllZCBjb3B5IG9mIHRoZSBXb3JrIGFzIGRpc3RyaWJ1dGVkIHVuZGVyIENsYXVzZSAyCithYm92ZSwgYXMgbG9uZyBhcyB0aGF0IENvbXBpbGVkIFdvcmsgaXMgZGlzdHJpYnV0ZWQgaW4gc3VjaCBhIHdheSB0aGF0Cit0aGUgcmVjaXBpZW50cyBtYXkgaW5zdGFsbCB0aGUgQ29tcGlsZWQgV29yayBvbiB0aGVpciBzeXN0ZW0gZXhhY3RseQorYXMgaXQgd291bGQgaGF2ZSBiZWVuIGluc3RhbGxlZCBpZiB0aGV5IGdlbmVyYXRlZCBhIENvbXBpbGVkIFdvcmsKK2RpcmVjdGx5IGZyb20gdGhlIFdvcmsuCisKKzQuICBJZiB5b3UgYXJlIHRoZSBDdXJyZW50IE1haW50YWluZXIgb2YgdGhlIFdvcmssIHlvdSBtYXksIHdpdGhvdXQKK3Jlc3RyaWN0aW9uLCBtb2RpZnkgdGhlIFdvcmssIHRodXMgY3JlYXRpbmcgYSBEZXJpdmVkIFdvcmsuICBZb3UgbWF5CithbHNvIGRpc3RyaWJ1dGUgdGhlIERlcml2ZWQgV29yayB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKK0NvbXBpbGVkIFdvcmtzIGdlbmVyYXRlZCBmcm9tIHRoZSBEZXJpdmVkIFdvcmsuICBEZXJpdmVkIFdvcmtzCitkaXN0cmlidXRlZCBpbiB0aGlzIG1hbm5lciBieSB0aGUgQ3VycmVudCBNYWludGFpbmVyIGFyZSBjb25zaWRlcmVkIHRvCitiZSB1cGRhdGVkIHZlcnNpb25zIG9mIHRoZSBXb3JrLgorCis1LiAgSWYgeW91IGFyZSBub3QgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBvZiB0aGUgV29yaywgeW91IG1heSBtb2RpZnkKK3lvdXIgY29weSBvZiB0aGUgV29yaywgdGh1cyBjcmVhdGluZyBhIERlcml2ZWQgV29yayBiYXNlZCBvbiB0aGUgV29yaywKK2FuZCBjb21waWxlIHRoaXMgRGVyaXZlZCBXb3JrLCB0aHVzIGNyZWF0aW5nIGEgQ29tcGlsZWQgV29yayBiYXNlZCBvbgordGhlIERlcml2ZWQgV29yay4KKworNi4gIElmIHlvdSBhcmUgbm90IHRoZSBDdXJyZW50IE1haW50YWluZXIgb2YgdGhlIFdvcmssIHlvdSBtYXkKK2Rpc3RyaWJ1dGUgYSBEZXJpdmVkIFdvcmsgcHJvdmlkZWQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQKK2ZvciBldmVyeSBjb21wb25lbnQgb2YgdGhlIFdvcmsgdW5sZXNzIHRoYXQgY29tcG9uZW50IGNsZWFybHkgc3RhdGVzCitpbiB0aGUgY29weXJpZ2h0IG5vdGljZSB0aGF0IGl0IGlzIGV4ZW1wdCBmcm9tIHRoYXQgY29uZGl0aW9uLiAgT25seQordGhlIEN1cnJlbnQgTWFpbnRhaW5lciBpcyBhbGxvd2VkIHRvIGFkZCBzdWNoIHN0YXRlbWVudHMgb2YgZXhlbXB0aW9uIAordG8gYSBjb21wb25lbnQgb2YgdGhlIFdvcmsuIAorCisgIGEuIElmIGEgY29tcG9uZW50IG9mIHRoaXMgRGVyaXZlZCBXb3JrIGNhbiBiZSBhIGRpcmVjdCByZXBsYWNlbWVudAorICAgICBmb3IgYSBjb21wb25lbnQgb2YgdGhlIFdvcmsgd2hlbiB0aGF0IGNvbXBvbmVudCBpcyB1c2VkIHdpdGggdGhlCisgICAgIEJhc2UgSW50ZXJwcmV0ZXIsIHRoZW4sIHdoZXJldmVyIHRoaXMgY29tcG9uZW50IG9mIHRoZSBXb3JrCisgICAgIGlkZW50aWZpZXMgaXRzZWxmIHRvIHRoZSB1c2VyIHdoZW4gdXNlZCBpbnRlcmFjdGl2ZWx5IHdpdGggdGhhdAorICAgICBCYXNlIEludGVycHJldGVyLCB0aGUgcmVwbGFjZW1lbnQgY29tcG9uZW50IG9mIHRoaXMgRGVyaXZlZCBXb3JrCisgICAgIGNsZWFybHkgYW5kIHVuYW1iaWd1b3VzbHkgaWRlbnRpZmllcyBpdHNlbGYgYXMgYSBtb2RpZmllZCB2ZXJzaW9uCisgICAgIG9mIHRoaXMgY29tcG9uZW50IHRvIHRoZSB1c2VyIHdoZW4gdXNlZCBpbnRlcmFjdGl2ZWx5IHdpdGggdGhhdAorICAgICBCYXNlIEludGVycHJldGVyLgorICAgICAKKyAgYi4gRXZlcnkgY29tcG9uZW50IG9mIHRoZSBEZXJpdmVkIFdvcmsgY29udGFpbnMgcHJvbWluZW50IG5vdGljZXMKKyAgICAgZGV0YWlsaW5nIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZXMgdG8gdGhhdCBjb21wb25lbnQsIG9yIGEKKyAgICAgcHJvbWluZW50IHJlZmVyZW5jZSB0byBhbm90aGVyIGZpbGUgdGhhdCBpcyBkaXN0cmlidXRlZCBhcyBwYXJ0CisgICAgIG9mIHRoZSBEZXJpdmVkIFdvcmsgYW5kIHRoYXQgY29udGFpbnMgYSBjb21wbGV0ZSBhbmQgYWNjdXJhdGUgbG9nCisgICAgIG9mIHRoZSBjaGFuZ2VzLgorICAKKyAgYy4gTm8gaW5mb3JtYXRpb24gaW4gdGhlIERlcml2ZWQgV29yayBpbXBsaWVzIHRoYXQgYW55IHBlcnNvbnMsCisgICAgIGluY2x1ZGluZyAoYnV0IG5vdCBsaW1pdGVkIHRvKSB0aGUgYXV0aG9ycyBvZiB0aGUgb3JpZ2luYWwgdmVyc2lvbgorICAgICBvZiB0aGUgV29yaywgcHJvdmlkZSBhbnkgc3VwcG9ydCwgaW5jbHVkaW5nIChidXQgbm90IGxpbWl0ZWQgdG8pCisgICAgIHRoZSByZXBvcnRpbmcgYW5kIGhhbmRsaW5nIG9mIGVycm9ycywgdG8gcmVjaXBpZW50cyBvZiB0aGUKKyAgICAgRGVyaXZlZCBXb3JrIHVubGVzcyB0aG9zZSBwZXJzb25zIGhhdmUgc3RhdGVkIGV4cGxpY2l0bHkgdGhhdAorICAgICB0aGV5IGRvIHByb3ZpZGUgc3VjaCBzdXBwb3J0IGZvciB0aGUgRGVyaXZlZCBXb3JrLgorCisgIGQuIFlvdSBkaXN0cmlidXRlIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nIHdpdGggdGhlIERlcml2ZWQgV29yazoKKworICAgICAgIDEuIEEgY29tcGxldGUsIHVubW9kaWZpZWQgY29weSBvZiB0aGUgV29yazsgCisgICAgICAgICAgaWYgeW91ciBkaXN0cmlidXRpb24gb2YgYSBtb2RpZmllZCBjb21wb25lbnQgaXMgbWFkZSBieQorICAgICAgICAgIG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5IHRoZSBtb2RpZmllZCBjb21wb25lbnQgZnJvbSBhCisgICAgICAgICAgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5CisgICAgICAgICAgdGhlIFdvcmsgZnJvbSB0aGUgc2FtZSBvciBzb21lIHNpbWlsYXIgcGxhY2UgbWVldHMgdGhpcworICAgICAgICAgIGNvbmRpdGlvbiwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90IGNvbXBlbGxlZCB0bworICAgICAgICAgIGNvcHkgdGhlIFdvcmsgYWxvbmcgd2l0aCB0aGUgbW9kaWZpZWQgY29tcG9uZW50OworCisgICAgICAgMi4gSW5mb3JtYXRpb24gdGhhdCBpcyBzdWZmaWNpZW50IHRvIG9idGFpbiBhIGNvbXBsZXRlLAorICAgICAgICAgIHVubW9kaWZpZWQgY29weSBvZiB0aGUgV29yay4KKworNy4gIElmIHlvdSBhcmUgbm90IHRoZSBDdXJyZW50IE1haW50YWluZXIgb2YgdGhlIFdvcmssIHlvdSBtYXkKK2Rpc3RyaWJ1dGUgYSBDb21waWxlZCBXb3JrIGdlbmVyYXRlZCBmcm9tIGEgRGVyaXZlZCBXb3JrLCBhcyBsb25nIGFzCit0aGUgRGVyaXZlZCBXb3JrIGlzIGRpc3RyaWJ1dGVkIHRvIGFsbCByZWNpcGllbnRzIG9mIHRoZSBDb21waWxlZAorV29yaywgYW5kIGFzIGxvbmcgYXMgdGhlIGNvbmRpdGlvbnMgb2YgQ2xhdXNlIDYsIGFib3ZlLCBhcmUgbWV0IHdpdGgKK3JlZ2FyZCB0byB0aGUgRGVyaXZlZCBXb3JrLgorCis4LiAgVGhlIGNvbmRpdGlvbnMgYWJvdmUgYXJlIG5vdCBpbnRlbmRlZCB0byBwcm9oaWJpdCwgYW5kIGhlbmNlIGRvIG5vdAorYXBwbHkgdG8sIHRoZSBtb2RpZmljYXRpb24sIGJ5IGFueSBtZXRob2QsIG9mIGFueSBjb21wb25lbnQgc28gdGhhdCBpdAorYmVjb21lcyBpZGVudGljYWwgdG8gYW4gdXBkYXRlZCB2ZXJzaW9uIG9mIHRoYXQgY29tcG9uZW50IG9mIHRoZSBXb3JrIGFzCitpdCBpcyBkaXN0cmlidXRlZCBieSB0aGUgQ3VycmVudCBNYWludGFpbmVyIHVuZGVyIENsYXVzZSA0LCBhYm92ZS4KKworOS4gIERpc3RyaWJ1dGlvbiBvZiB0aGUgV29yayBvciBhbnkgRGVyaXZlZCBXb3JrIGluIGFuIGFsdGVybmF0aXZlCitmb3JtYXQsIHdoZXJlIHRoZSBXb3JrIG9yIHRoYXQgRGVyaXZlZCBXb3JrIChpbiB3aG9sZSBvciBpbiBwYXJ0KSBpcwordGhlbiBwcm9kdWNlZCBieSBhcHBseWluZyBzb21lIHByb2Nlc3MgdG8gdGhhdCBmb3JtYXQsIGRvZXMgbm90IHJlbGF4IG9yCitudWxsaWZ5IGFueSBzZWN0aW9ucyBvZiB0aGlzIGxpY2Vuc2UgYXMgdGhleSBwZXJ0YWluIHRvIHRoZSByZXN1bHRzIG9mCithcHBseWluZyB0aGF0IHByb2Nlc3MuCisgICAgIAorMTAuIGEuIEEgRGVyaXZlZCBXb3JrIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlCisgICAgICAgcHJvdmlkZWQgdGhhdCBsaWNlbnNlIGl0c2VsZiBob25vcnMgdGhlIGNvbmRpdGlvbnMgbGlzdGVkIGluCisgICAgICAgQ2xhdXNlIDYgYWJvdmUsIGluIHJlZ2FyZCB0byB0aGUgV29yaywgdGhvdWdoIGl0IGRvZXMgbm90IGhhdmUKKyAgICAgICB0byBob25vciB0aGUgcmVzdCBvZiB0aGUgY29uZGl0aW9ucyBpbiB0aGlzIGxpY2Vuc2UuCisgICAgICAKKyAgICBiLiBJZiBhIERlcml2ZWQgV29yayBpcyBkaXN0cmlidXRlZCB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlLCB0aGF0CisgICAgICAgRGVyaXZlZCBXb3JrIG11c3QgcHJvdmlkZSBzdWZmaWNpZW50IGRvY3VtZW50YXRpb24gYXMgcGFydCBvZgorICAgICAgIGl0c2VsZiB0byBhbGxvdyBlYWNoIHJlY2lwaWVudCBvZiB0aGF0IERlcml2ZWQgV29yayB0byBob25vciB0aGUgCisgICAgICAgcmVzdHJpY3Rpb25zIGluIENsYXVzZSA2IGFib3ZlLCBjb25jZXJuaW5nIGNoYW5nZXMgZnJvbSB0aGUgV29yay4KKworMTEuIFRoaXMgbGljZW5zZSBwbGFjZXMgbm8gcmVzdHJpY3Rpb25zIG9uIHdvcmtzIHRoYXQgYXJlIHVucmVsYXRlZCB0bwordGhlIFdvcmssIG5vciBkb2VzIHRoaXMgbGljZW5zZSBwbGFjZSBhbnkgcmVzdHJpY3Rpb25zIG9uIGFnZ3JlZ2F0aW5nCitzdWNoIHdvcmtzIHdpdGggdGhlIFdvcmsgYnkgYW55IG1lYW5zLgorCisxMi4gIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvLCBvciBtYXkgYmUgdXNlZCB0bywgcHJldmVudAorY29tcGxldGUgY29tcGxpYW5jZSBieSBhbGwgcGFydGllcyB3aXRoIGFsbCBhcHBsaWNhYmxlIGxhd3MuCisKKworTk8gV0FSUkFOVFkKKz09PT09PT09PT09CisKK1RoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgV29yay4gIEV4Y2VwdCB3aGVuIG90aGVyd2lzZSBzdGF0ZWQgaW4KK3dyaXRpbmcsIHRoZSBDb3B5cmlnaHQgSG9sZGVyIHByb3ZpZGVzIHRoZSBXb3JrIGBhcyBpcycsIHdpdGhvdXQKK3dhcnJhbnR5IG9mIGFueSBraW5kLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIGluY2x1ZGluZywgYnV0IG5vdAorbGltaXRlZCB0bywgdGhlIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEKK3BhcnRpY3VsYXIgcHVycG9zZS4gIFRoZSBlbnRpcmUgcmlzayBhcyB0byB0aGUgcXVhbGl0eSBhbmQgcGVyZm9ybWFuY2UKK29mIHRoZSBXb3JrIGlzIHdpdGggeW91LiAgU2hvdWxkIHRoZSBXb3JrIHByb3ZlIGRlZmVjdGl2ZSwgeW91IGFzc3VtZQordGhlIGNvc3Qgb2YgYWxsIG5lY2Vzc2FyeSBzZXJ2aWNpbmcsIHJlcGFpciwgb3IgY29ycmVjdGlvbi4KKworSW4gbm8gZXZlbnQgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nCit3aWxsIFRoZSBDb3B5cmlnaHQgSG9sZGVyLCBvciBhbnkgYXV0aG9yIG5hbWVkIGluIHRoZSBjb21wb25lbnRzIG9mIHRoZQorV29yaywgb3IgYW55IG90aGVyIHBhcnR5IHdobyBtYXkgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBXb3JrIGFzCitwZXJtaXR0ZWQgYWJvdmUsIGJlIGxpYWJsZSB0byB5b3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZ2VuZXJhbCwKK3NwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgb3V0IG9mIGFueSB1c2Ugb2YKK3RoZSBXb3JrIG9yIG91dCBvZiBpbmFiaWxpdHkgdG8gdXNlIHRoZSBXb3JrIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZAordG8sIGxvc3Mgb2YgZGF0YSwgZGF0YSBiZWluZyByZW5kZXJlZCBpbmFjY3VyYXRlLCBvciBsb3NzZXMgc3VzdGFpbmVkIGJ5CithbnlvbmUgYXMgYSByZXN1bHQgb2YgYW55IGZhaWx1cmUgb2YgdGhlIFdvcmsgdG8gb3BlcmF0ZSB3aXRoIGFueSBvdGhlcgorcHJvZ3JhbXMpLCBldmVuIGlmIHRoZSBDb3B5cmlnaHQgSG9sZGVyIG9yIHNhaWQgYXV0aG9yIG9yIHNhaWQgb3RoZXIKK3BhcnR5IGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKworCitNQUlOVEVOQU5DRSBPRiBUSEUgV09SSworPT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIFdvcmsgaGFzIHRoZSBzdGF0dXMgYGF1dGhvci1tYWludGFpbmVkJyBpZiB0aGUgQ29weXJpZ2h0IEhvbGRlcgorZXhwbGljaXRseSBhbmQgcHJvbWluZW50bHkgc3RhdGVzIG5lYXIgdGhlIHByaW1hcnkgY29weXJpZ2h0IG5vdGljZSBpbgordGhlIFdvcmsgdGhhdCB0aGUgV29yayBjYW4gb25seSBiZSBtYWludGFpbmVkIGJ5IHRoZSBDb3B5cmlnaHQgSG9sZGVyCitvciBzaW1wbHkgdGhhdCBpdCBpcyBgYXV0aG9yLW1haW50YWluZWQnLgorCitUaGUgV29yayBoYXMgdGhlIHN0YXR1cyBgbWFpbnRhaW5lZCcgaWYgdGhlcmUgaXMgYSBDdXJyZW50IE1haW50YWluZXIKK3dobyBoYXMgaW5kaWNhdGVkIGluIHRoZSBXb3JrIHRoYXQgdGhleSBhcmUgd2lsbGluZyB0byByZWNlaXZlIGVycm9yCityZXBvcnRzIGZvciB0aGUgV29yayAoZm9yIGV4YW1wbGUsIGJ5IHN1cHBseWluZyBhIHZhbGlkIGUtbWFpbAorYWRkcmVzcykuIEl0IGlzIG5vdCByZXF1aXJlZCBmb3IgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciB0byBhY2tub3dsZWRnZQorb3IgYWN0IHVwb24gdGhlc2UgZXJyb3IgcmVwb3J0cy4KKworVGhlIFdvcmsgY2hhbmdlcyBmcm9tIHN0YXR1cyBgbWFpbnRhaW5lZCcgdG8gYHVubWFpbnRhaW5lZCcgaWYgdGhlcmUKK2lzIG5vIEN1cnJlbnQgTWFpbnRhaW5lciwgb3IgdGhlIHBlcnNvbiBzdGF0ZWQgdG8gYmUgQ3VycmVudAorTWFpbnRhaW5lciBvZiB0aGUgd29yayBjYW5ub3QgYmUgcmVhY2hlZCB0aHJvdWdoIHRoZSBpbmRpY2F0ZWQgbWVhbnMKK29mIGNvbW11bmljYXRpb24gZm9yIGEgcGVyaW9kIG9mIHNpeCBtb250aHMsIGFuZCB0aGVyZSBhcmUgbm8gb3RoZXIKK3NpZ25pZmljYW50IHNpZ25zIG9mIGFjdGl2ZSBtYWludGVuYW5jZS4KKworWW91IGNhbiBiZWNvbWUgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBvZiB0aGUgV29yayBieSBhZ3JlZW1lbnQgd2l0aAorYW55IGV4aXN0aW5nIEN1cnJlbnQgTWFpbnRhaW5lciB0byB0YWtlIG92ZXIgdGhpcyByb2xlLgorCitJZiB0aGUgV29yayBpcyB1bm1haW50YWluZWQsIHlvdSBjYW4gYmVjb21lIHRoZSBDdXJyZW50IE1haW50YWluZXIgb2YKK3RoZSBXb3JrIHRocm91Z2ggdGhlIGZvbGxvd2luZyBzdGVwczoKKworIDEuICBNYWtlIGEgcmVhc29uYWJsZSBhdHRlbXB0IHRvIHRyYWNlIHRoZSBDdXJyZW50IE1haW50YWluZXIgKGFuZAorICAgICB0aGUgQ29weXJpZ2h0IEhvbGRlciwgaWYgdGhlIHR3byBkaWZmZXIpIHRocm91Z2ggdGhlIG1lYW5zIG9mCisgICAgIGFuIEludGVybmV0IG9yIHNpbWlsYXIgc2VhcmNoLgorCisgMi4gIElmIHRoaXMgc2VhcmNoIGlzIHN1Y2Nlc3NmdWwsIHRoZW4gZW5xdWlyZSB3aGV0aGVyIHRoZSBXb3JrCisgICAgIGlzIHN0aWxsIG1haW50YWluZWQuCisKKyAgYS4gSWYgaXQgaXMgYmVpbmcgbWFpbnRhaW5lZCwgdGhlbiBhc2sgdGhlIEN1cnJlbnQgTWFpbnRhaW5lcgorICAgICB0byB1cGRhdGUgdGhlaXIgY29tbXVuaWNhdGlvbiBkYXRhIHdpdGhpbiBvbmUgbW9udGguCisgICAgIAorICBiLiBJZiB0aGUgc2VhcmNoIGlzIHVuc3VjY2Vzc2Z1bCBvciBubyBhY3Rpb24gdG8gcmVzdW1lIGFjdGl2ZQorICAgICBtYWludGVuYW5jZSBpcyB0YWtlbiBieSB0aGUgQ3VycmVudCBNYWludGFpbmVyLCB0aGVuIGFubm91bmNlCisgICAgIHdpdGhpbiB0aGUgcGVydGluZW50IGNvbW11bml0eSB5b3VyIGludGVudGlvbiB0byB0YWtlIG92ZXIKKyAgICAgbWFpbnRlbmFuY2UuICAoSWYgdGhlIFdvcmsgaXMgYSBMYVRlWCB3b3JrLCB0aGlzIGNvdWxkIGJlCisgICAgIGRvbmUsIGZvciBleGFtcGxlLCBieSBwb3N0aW5nIHRvIGNvbXAudGV4dC50ZXguKQorCisgM2EuIElmIHRoZSBDdXJyZW50IE1haW50YWluZXIgaXMgcmVhY2hhYmxlIGFuZCBhZ3JlZXMgdG8gcGFzcworICAgICBtYWludGVuYW5jZSBvZiB0aGUgV29yayB0byB5b3UsIHRoZW4gdGhpcyB0YWtlcyBlZmZlY3QKKyAgICAgaW1tZWRpYXRlbHkgdXBvbiBhbm5vdW5jZW1lbnQuCisgICAgIAorICBiLiBJZiB0aGUgQ3VycmVudCBNYWludGFpbmVyIGlzIG5vdCByZWFjaGFibGUgYW5kIHRoZSBDb3B5cmlnaHQKKyAgICAgSG9sZGVyIGFncmVlcyB0aGF0IG1haW50ZW5hbmNlIG9mIHRoZSBXb3JrIGJlIHBhc3NlZCB0byB5b3UsCisgICAgIHRoZW4gdGhpcyB0YWtlcyBlZmZlY3QgaW1tZWRpYXRlbHkgdXBvbiBhbm5vdW5jZW1lbnQuICAKKyAgICAKKyA0LiAgSWYgeW91IG1ha2UgYW4gYGludGVudGlvbiBhbm5vdW5jZW1lbnQnIGFzIGRlc2NyaWJlZCBpbiAyYi4gYWJvdmUKKyAgICAgYW5kIGFmdGVyIHRocmVlIG1vbnRocyB5b3VyIGludGVudGlvbiBpcyBjaGFsbGVuZ2VkIG5laXRoZXIgYnkKKyAgICAgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBub3IgYnkgdGhlIENvcHlyaWdodCBIb2xkZXIgbm9yIGJ5IG90aGVyCisgICAgIHBlb3BsZSwgdGhlbiB5b3UgbWF5IGFycmFuZ2UgZm9yIHRoZSBXb3JrIHRvIGJlIGNoYW5nZWQgc28gYXMKKyAgICAgdG8gbmFtZSB5b3UgYXMgdGhlIChuZXcpIEN1cnJlbnQgTWFpbnRhaW5lci4KKyAgICAgCisgNS4gIElmIHRoZSBwcmV2aW91c2x5IHVucmVhY2hhYmxlIEN1cnJlbnQgTWFpbnRhaW5lciBiZWNvbWVzCisgICAgIHJlYWNoYWJsZSBvbmNlIG1vcmUgd2l0aGluIHRocmVlIG1vbnRocyBvZiBhIGNoYW5nZSBjb21wbGV0ZWQKKyAgICAgdW5kZXIgdGhlIHRlcm1zIG9mIDNiKSBvciA0KSwgdGhlbiB0aGF0IEN1cnJlbnQgTWFpbnRhaW5lciBtdXN0CisgICAgIGJlY29tZSBvciByZW1haW4gdGhlIEN1cnJlbnQgTWFpbnRhaW5lciB1cG9uIHJlcXVlc3QgcHJvdmlkZWQKKyAgICAgdGhleSB0aGVuIHVwZGF0ZSB0aGVpciBjb21tdW5pY2F0aW9uIGRhdGEgd2l0aGluIG9uZSBtb250aC4KKworQSBjaGFuZ2UgaW4gdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBkb2VzIG5vdCwgb2YgaXRzZWxmLCBhbHRlciB0aGUgZmFjdAordGhhdCB0aGUgV29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTFBQTCBsaWNlbnNlLgorCitJZiB5b3UgYmVjb21lIHRoZSBDdXJyZW50IE1haW50YWluZXIgb2YgdGhlIFdvcmssIHlvdSBzaG91bGQKK2ltbWVkaWF0ZWx5IHByb3ZpZGUsIHdpdGhpbiB0aGUgV29yaywgYSBwcm9taW5lbnQgYW5kIHVuYW1iaWd1b3VzCitzdGF0ZW1lbnQgb2YgeW91ciBzdGF0dXMgYXMgQ3VycmVudCBNYWludGFpbmVyLiAgWW91IHNob3VsZCBhbHNvCithbm5vdW5jZSB5b3VyIG5ldyBzdGF0dXMgdG8gdGhlIHNhbWUgcGVydGluZW50IGNvbW11bml0eSBhcworaW4gMmIpIGFib3ZlLgorCisKK1dIRVRIRVIgQU5EIEhPVyBUTyBESVNUUklCVVRFIFdPUktTIFVOREVSIFRISVMgTElDRU5TRQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgc2VjdGlvbiBjb250YWlucyBpbXBvcnRhbnQgaW5zdHJ1Y3Rpb25zLCBleGFtcGxlcywgYW5kCityZWNvbW1lbmRhdGlvbnMgZm9yIGF1dGhvcnMgd2hvIGFyZSBjb25zaWRlcmluZyBkaXN0cmlidXRpbmcgdGhlaXIKK3dvcmtzIHVuZGVyIHRoaXMgbGljZW5zZS4gIFRoZXNlIGF1dGhvcnMgYXJlIGFkZHJlc3NlZCBhcyBgeW91JyBpbgordGhpcyBzZWN0aW9uLgorCitDaG9vc2luZyBUaGlzIExpY2Vuc2Ugb3IgQW5vdGhlciBMaWNlbnNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIGZvciBhbnkgcGFydCBvZiB5b3VyIHdvcmsgeW91IHdhbnQgb3IgbmVlZCB0byB1c2UgKmRpc3RyaWJ1dGlvbioKK2NvbmRpdGlvbnMgdGhhdCBkaWZmZXIgc2lnbmlmaWNhbnRseSBmcm9tIHRob3NlIGluIHRoaXMgbGljZW5zZSwgdGhlbgorZG8gbm90IHJlZmVyIHRvIHRoaXMgbGljZW5zZSBhbnl3aGVyZSBpbiB5b3VyIHdvcmsgYnV0LCBpbnN0ZWFkLAorZGlzdHJpYnV0ZSB5b3VyIHdvcmsgdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZS4gIFlvdSBtYXkgdXNlIHRoZSB0ZXh0CitvZiB0aGlzIGxpY2Vuc2UgYXMgYSBtb2RlbCBmb3IgeW91ciBvd24gbGljZW5zZSwgYnV0IHlvdXIgbGljZW5zZQorc2hvdWxkIG5vdCByZWZlciB0byB0aGUgTFBQTCBvciBvdGhlcndpc2UgZ2l2ZSB0aGUgaW1wcmVzc2lvbiB0aGF0Cit5b3VyIHdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExQUEwuCisKK1RoZSBkb2N1bWVudCBgbW9kZ3VpZGUudGV4JyBpbiB0aGUgYmFzZSBMYVRlWCBkaXN0cmlidXRpb24gZXhwbGFpbnMKK3RoZSBtb3RpdmF0aW9uIGJlaGluZCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIGxpY2Vuc2UuICBJdCBleHBsYWlucywKK2ZvciBleGFtcGxlLCB3aHkgZGlzdHJpYnV0aW5nIExhVGVYIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgKEdQTCkgd2FzIGNvbnNpZGVyZWQgaW5hcHByb3ByaWF0ZS4gIEV2ZW4gaWYgeW91ciB3b3JrIGlzCit1bnJlbGF0ZWQgdG8gTGFUZVgsIHRoZSBkaXNjdXNzaW9uIGluIGBtb2RndWlkZS50ZXgnIG1heSBzdGlsbCBiZQorcmVsZXZhbnQsIGFuZCBhdXRob3JzIGludGVuZGluZyB0byBkaXN0cmlidXRlIHRoZWlyIHdvcmtzIHVuZGVyIGFueQorbGljZW5zZSBhcmUgZW5jb3VyYWdlZCB0byByZWFkIGl0LgorCitBIFJlY29tbWVuZGF0aW9uIG9uIE1vZGlmaWNhdGlvbiBXaXRob3V0IERpc3RyaWJ1dGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSXQgaXMgd2lzZSBuZXZlciB0byBtb2RpZnkgYSBjb21wb25lbnQgb2YgdGhlIFdvcmssIGV2ZW4gZm9yIHlvdXIgb3duCitwZXJzb25hbCB1c2UsIHdpdGhvdXQgYWxzbyBtZWV0aW5nIHRoZSBhYm92ZSBjb25kaXRpb25zIGZvcgorZGlzdHJpYnV0aW5nIHRoZSBtb2RpZmllZCBjb21wb25lbnQuICBXaGlsZSB5b3UgbWlnaHQgaW50ZW5kIHRoYXQgc3VjaAorbW9kaWZpY2F0aW9ucyB3aWxsIG5ldmVyIGJlIGRpc3RyaWJ1dGVkLCBvZnRlbiB0aGlzIHdpbGwgaGFwcGVuIGJ5CithY2NpZGVudCAtLSB5b3UgbWF5IGZvcmdldCB0aGF0IHlvdSBoYXZlIG1vZGlmaWVkIHRoYXQgY29tcG9uZW50OyBvcgoraXQgbWF5IG5vdCBvY2N1ciB0byB5b3Ugd2hlbiBhbGxvd2luZyBvdGhlcnMgdG8gYWNjZXNzIHRoZSBtb2RpZmllZAordmVyc2lvbiB0aGF0IHlvdSBhcmUgdGh1cyBkaXN0cmlidXRpbmcgaXQgYW5kIHZpb2xhdGluZyB0aGUgY29uZGl0aW9ucworb2YgdGhpcyBsaWNlbnNlIGluIHdheXMgdGhhdCBjb3VsZCBoYXZlIGxlZ2FsIGltcGxpY2F0aW9ucyBhbmQsIHdvcnNlLAorY2F1c2UgcHJvYmxlbXMgZm9yIHRoZSBjb21tdW5pdHkuICBJdCBpcyB0aGVyZWZvcmUgdXN1YWxseSBpbiB5b3VyCitiZXN0IGludGVyZXN0IHRvIGtlZXAgeW91ciBjb3B5IG9mIHRoZSBXb3JrIGlkZW50aWNhbCB3aXRoIHRoZSBwdWJsaWMKK29uZS4gIE1hbnkgd29ya3MgcHJvdmlkZSB3YXlzIHRvIGNvbnRyb2wgdGhlIGJlaGF2aW9yIG9mIHRoYXQgd29yaword2l0aG91dCBhbHRlcmluZyBhbnkgb2YgaXRzIGxpY2Vuc2VkIGNvbXBvbmVudHMuCisKK0hvdyB0byBVc2UgVGhpcyBMaWNlbnNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyB1c2UgdGhpcyBsaWNlbnNlLCBwbGFjZSBpbiBlYWNoIG9mIHRoZSBjb21wb25lbnRzIG9mIHlvdXIgd29yayBib3RoCithbiBleHBsaWNpdCBjb3B5cmlnaHQgbm90aWNlIGluY2x1ZGluZyB5b3VyIG5hbWUgYW5kIHRoZSB5ZWFyIHRoZSB3b3JrCit3YXMgYXV0aG9yZWQgYW5kL29yIGxhc3Qgc3Vic3RhbnRpYWxseSBtb2RpZmllZC4gIEluY2x1ZGUgYWxzbyBhCitzdGF0ZW1lbnQgdGhhdCB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciBtb2RpZmljYXRpb24gb2YgdGhhdAorY29tcG9uZW50IGlzIGNvbnN0cmFpbmVkIGJ5IHRoZSBjb25kaXRpb25zIGluIHRoaXMgbGljZW5zZS4KKworSGVyZSBpcyBhbiBleGFtcGxlIG9mIHN1Y2ggYSBub3RpY2UgYW5kIHN0YXRlbWVudDoKKworICAlJSBwaWcuZHR4CisgICUlIENvcHlyaWdodCAyMDA1IE0uIFkuIE5hbWUKKyAgJQorICAlIFRoaXMgd29yayBtYXkgYmUgZGlzdHJpYnV0ZWQgYW5kL29yIG1vZGlmaWVkIHVuZGVyIHRoZQorICAlIGNvbmRpdGlvbnMgb2YgdGhlIExhVGVYIFByb2plY3QgUHVibGljIExpY2Vuc2UsIGVpdGhlciB2ZXJzaW9uIDEuMworICAlIG9mIHRoaXMgbGljZW5zZSBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAlIFRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIGxpY2Vuc2UgaXMgaW4KKyAgJSAgIGh0dHA6Ly93d3cubGF0ZXgtcHJvamVjdC5vcmcvbHBwbC50eHQKKyAgJSBhbmQgdmVyc2lvbiAxLjMgb3IgbGF0ZXIgaXMgcGFydCBvZiBhbGwgZGlzdHJpYnV0aW9ucyBvZiBMYVRlWAorICAlIHZlcnNpb24gMjAwNS8xMi8wMSBvciBsYXRlci4KKyAgJQorICAlIFRoaXMgd29yayBoYXMgdGhlIExQUEwgbWFpbnRlbmFuY2Ugc3RhdHVzIGBtYWludGFpbmVkJy4KKyAgJSAKKyAgJSBUaGUgQ3VycmVudCBNYWludGFpbmVyIG9mIHRoaXMgd29yayBpcyBNLiBZLiBOYW1lLgorICAlCisgICUgVGhpcyB3b3JrIGNvbnNpc3RzIG9mIHRoZSBmaWxlcyBwaWcuZHR4IGFuZCBwaWcuaW5zCisgICUgYW5kIHRoZSBkZXJpdmVkIGZpbGUgcGlnLnN0eS4KKworR2l2ZW4gc3VjaCBhIG5vdGljZSBhbmQgc3RhdGVtZW50IGluIGEgZmlsZSwgdGhlIGNvbmRpdGlvbnMKK2dpdmVuIGluIHRoaXMgbGljZW5zZSBkb2N1bWVudCB3b3VsZCBhcHBseSwgd2l0aCB0aGUgYFdvcmsnIHJlZmVycmluZwordG8gdGhlIHRocmVlIGZpbGVzIGBwaWcuZHR4JywgYHBpZy5pbnMnLCBhbmQgYHBpZy5zdHknICh0aGUgbGFzdCBiZWluZworZ2VuZXJhdGVkIGZyb20gYHBpZy5kdHgnIHVzaW5nIGBwaWcuaW5zJyksIHRoZSBgQmFzZSBJbnRlcnByZXRlcicKK3JlZmVycmluZyB0byBhbnkgYExhVGVYLUZvcm1hdCcsIGFuZCBib3RoIGBDb3B5cmlnaHQgSG9sZGVyJyBhbmQKK2BDdXJyZW50IE1haW50YWluZXInIHJlZmVycmluZyB0byB0aGUgcGVyc29uIGBNLiBZLiBOYW1lJy4KKworSWYgeW91IGRvIG5vdCB3YW50IHRoZSBNYWludGVuYW5jZSBzZWN0aW9uIG9mIExQUEwgdG8gYXBwbHkgdG8geW91cgorV29yaywgY2hhbmdlIGBtYWludGFpbmVkJyBhYm92ZSBpbnRvIGBhdXRob3ItbWFpbnRhaW5lZCcuICAKK0hvd2V2ZXIsIHdlIHJlY29tbWVuZCB0aGF0IHlvdSB1c2UgYG1haW50YWluZWQnLCBhcyB0aGUgTWFpbnRlbmFuY2UKK3NlY3Rpb24gd2FzIGFkZGVkIGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IHlvdXIgV29yayByZW1haW5zIHVzZWZ1bCB0bwordGhlIGNvbW11bml0eSBldmVuIHdoZW4geW91IGNhbiBubyBsb25nZXIgbWFpbnRhaW4gYW5kIHN1cHBvcnQgaXQKK3lvdXJzZWxmLgorCitEZXJpdmVkIFdvcmtzIFRoYXQgQXJlIE5vdCBSZXBsYWNlbWVudHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTZXZlcmFsIGNsYXVzZXMgb2YgdGhlIExQUEwgc3BlY2lmeSBtZWFucyB0byBwcm92aWRlIHJlbGlhYmlsaXR5IGFuZAorc3RhYmlsaXR5IGZvciB0aGUgdXNlciBjb21tdW5pdHkuIFRoZXkgdGhlcmVmb3JlIGNvbmNlcm4gdGhlbXNlbHZlcword2l0aCB0aGUgY2FzZSB0aGF0IGEgRGVyaXZlZCBXb3JrIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgYXMgYQorKGNvbXBhdGlibGUgb3IgaW5jb21wYXRpYmxlKSByZXBsYWNlbWVudCBvZiB0aGUgb3JpZ2luYWwgV29yay4gSWYKK3RoaXMgaXMgbm90IHRoZSBjYXNlIChlLmcuLCBpZiBhIGZldyBsaW5lcyBvZiBjb2RlIGFyZSByZXVzZWQgZm9yIGEKK2NvbXBsZXRlbHkgZGlmZmVyZW50IHRhc2spLCB0aGVuIGNsYXVzZXMgNmIgYW5kIDZkIHNoYWxsIG5vdCBhcHBseS4KKworCitJbXBvcnRhbnQgUmVjb21tZW5kYXRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyBEZWZpbmluZyBXaGF0IENvbnN0aXR1dGVzIHRoZSBXb3JrCisKKyAgIFRoZSBMUFBMIHJlcXVpcmVzIHRoYXQgZGlzdHJpYnV0aW9ucyBvZiB0aGUgV29yayBjb250YWluIGFsbCB0aGUKKyAgIGZpbGVzIG9mIHRoZSBXb3JrLiAgSXQgaXMgdGhlcmVmb3JlIGltcG9ydGFudCB0aGF0IHlvdSBwcm92aWRlIGEKKyAgIHdheSBmb3IgdGhlIGxpY2Vuc2VlIHRvIGRldGVybWluZSB3aGljaCBmaWxlcyBjb25zdGl0dXRlIHRoZSBXb3JrLgorICAgVGhpcyBjb3VsZCwgZm9yIGV4YW1wbGUsIGJlIGFjaGlldmVkIGJ5IGV4cGxpY2l0bHkgbGlzdGluZyBhbGwgdGhlCisgICBmaWxlcyBvZiB0aGUgV29yayBuZWFyIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIGVhY2ggZmlsZSBvciBieQorICAgdXNpbmcgYSBsaW5lIHN1Y2ggYXM6CisKKyAgICAlIFRoaXMgd29yayBjb25zaXN0cyBvZiBhbGwgZmlsZXMgbGlzdGVkIGluIG1hbmlmZXN0LnR4dC4KKyAgIAorICAgaW4gdGhhdCBwbGFjZS4gIEluIHRoZSBhYnNlbmNlIG9mIGFuIHVuZXF1aXZvY2FsIGxpc3QgaXQgbWlnaHQgYmUKKyAgIGltcG9zc2libGUgZm9yIHRoZSBsaWNlbnNlZSB0byBkZXRlcm1pbmUgd2hhdCBpcyBjb25zaWRlcmVkIGJ5IHlvdQorICAgdG8gY29tcHJpc2UgdGhlIFdvcmsgYW5kLCBpbiBzdWNoIGEgY2FzZSwgdGhlIGxpY2Vuc2VlIHdvdWxkIGJlCisgICBlbnRpdGxlZCB0byBtYWtlIHJlYXNvbmFibGUgY29uamVjdHVyZXMgYXMgdG8gd2hpY2ggZmlsZXMgY29tcHJpc2UKKyAgIHRoZSBXb3JrLgorCmRpZmYgLS1naXQgYS9saWNlbnNlcy9MUFBMLTEuM2MgYi9saWNlbnNlcy9MUFBMLTEuM2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBlNWUzYQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL0xQUEwtMS4zYwpAQCAtMCwwICsxLDQxNiBAQAorVGhlIExhVGVYIFByb2plY3QgUHVibGljIExpY2Vuc2UKKz0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tPS09LT0tCisKK0xQUEwgVmVyc2lvbiAxLjNjICAyMDA2LTA1LTIwCisKK0NvcHlyaWdodCAxOTk5IDIwMDItMjAwNiBMYVRlWDMgUHJvamVjdAorICAgIEV2ZXJ5b25lIGlzIGFsbG93ZWQgdG8gZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhpcworICAgIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBtb2RpZmljYXRpb24gb2YgaXQgaXMgbm90IGFsbG93ZWQuCisKKworUFJFQU1CTEUKKz09PT09PT09CisKK1RoZSBMYVRlWCBQcm9qZWN0IFB1YmxpYyBMaWNlbnNlIChMUFBMKSBpcyB0aGUgcHJpbWFyeSBsaWNlbnNlIHVuZGVyCit3aGljaCB0aGUgdGhlIExhVGVYIGtlcm5lbCBhbmQgdGhlIGJhc2UgTGFUZVggcGFja2FnZXMgYXJlIGRpc3RyaWJ1dGVkLgorCitZb3UgbWF5IHVzZSB0aGlzIGxpY2Vuc2UgZm9yIGFueSB3b3JrIG9mIHdoaWNoIHlvdSBob2xkIHRoZSBjb3B5cmlnaHQKK2FuZCB3aGljaCB5b3Ugd2lzaCB0byBkaXN0cmlidXRlLiAgVGhpcyBsaWNlbnNlIG1heSBiZSBwYXJ0aWN1bGFybHkKK3N1aXRhYmxlIGlmIHlvdXIgd29yayBpcyBUZVgtcmVsYXRlZCAoc3VjaCBhcyBhIExhVGVYIHBhY2thZ2UpLCBidXQgCitpdCBpcyB3cml0dGVuIGluIHN1Y2ggYSB3YXkgdGhhdCB5b3UgY2FuIHVzZSBpdCBldmVuIGlmIHlvdXIgd29yayBpcyAKK3VucmVsYXRlZCB0byBUZVguCisKK1RoZSBzZWN0aW9uIGBXSEVUSEVSIEFORCBIT1cgVE8gRElTVFJJQlVURSBXT1JLUyBVTkRFUiBUSElTIExJQ0VOU0UnLAorYmVsb3csIGdpdmVzIGluc3RydWN0aW9ucywgZXhhbXBsZXMsIGFuZCByZWNvbW1lbmRhdGlvbnMgZm9yIGF1dGhvcnMKK3dobyBhcmUgY29uc2lkZXJpbmcgZGlzdHJpYnV0aW5nIHRoZWlyIHdvcmtzIHVuZGVyIHRoaXMgbGljZW5zZS4KKworVGhpcyBsaWNlbnNlIGdpdmVzIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggYSB3b3JrIG1heSBiZSBkaXN0cmlidXRlZAorYW5kIG1vZGlmaWVkLCBhcyB3ZWxsIGFzIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggbW9kaWZpZWQgdmVyc2lvbnMgb2YKK3RoYXQgd29yayBtYXkgYmUgZGlzdHJpYnV0ZWQuCisKK1dlLCB0aGUgTGFUZVgzIFByb2plY3QsIGJlbGlldmUgdGhhdCB0aGUgY29uZGl0aW9ucyBiZWxvdyBnaXZlIHlvdQordGhlIGZyZWVkb20gdG8gbWFrZSBhbmQgZGlzdHJpYnV0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiB5b3VyIHdvcmsKK3RoYXQgY29uZm9ybSB3aXRoIHdoYXRldmVyIHRlY2huaWNhbCBzcGVjaWZpY2F0aW9ucyB5b3Ugd2lzaCB3aGlsZQorbWFpbnRhaW5pbmcgdGhlIGF2YWlsYWJpbGl0eSwgaW50ZWdyaXR5LCBhbmQgcmVsaWFiaWxpdHkgb2YKK3RoYXQgd29yay4gIElmIHlvdSBkbyBub3Qgc2VlIGhvdyB0byBhY2hpZXZlIHlvdXIgZ29hbCB3aGlsZQorbWVldGluZyB0aGVzZSBjb25kaXRpb25zLCB0aGVuIHJlYWQgdGhlIGRvY3VtZW50IGBjZmdndWlkZS50ZXgnCithbmQgYG1vZGd1aWRlLnRleCcgaW4gdGhlIGJhc2UgTGFUZVggZGlzdHJpYnV0aW9uIGZvciBzdWdnZXN0aW9ucy4KKworCitERUZJTklUSU9OUworPT09PT09PT09PT0KKworSW4gdGhpcyBsaWNlbnNlIGRvY3VtZW50IHRoZSBmb2xsb3dpbmcgdGVybXMgYXJlIHVzZWQ6CisKKyAgIGBXb3JrJworICAgIEFueSB3b3JrIGJlaW5nIGRpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KKyAgICAKKyAgIGBEZXJpdmVkIFdvcmsnCisgICAgQW55IHdvcmsgdGhhdCB1bmRlciBhbnkgYXBwbGljYWJsZSBsYXcgaXMgZGVyaXZlZCBmcm9tIHRoZSBXb3JrLgorCisgICBgTW9kaWZpY2F0aW9uJyAKKyAgICBBbnkgcHJvY2VkdXJlIHRoYXQgcHJvZHVjZXMgYSBEZXJpdmVkIFdvcmsgdW5kZXIgYW55IGFwcGxpY2FibGUKKyAgICBsYXcgLS0gZm9yIGV4YW1wbGUsIHRoZSBwcm9kdWN0aW9uIG9mIGEgZmlsZSBjb250YWluaW5nIGFuCisgICAgb3JpZ2luYWwgZmlsZSBhc3NvY2lhdGVkIHdpdGggdGhlIFdvcmsgb3IgYSBzaWduaWZpY2FudCBwb3J0aW9uIG9mCisgICAgc3VjaCBhIGZpbGUsIGVpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yCisgICAgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UuCisKKyAgIGBNb2RpZnknCisgICAgVG8gYXBwbHkgYW55IHByb2NlZHVyZSB0aGF0IHByb2R1Y2VzIGEgRGVyaXZlZCBXb3JrIHVuZGVyIGFueQorICAgIGFwcGxpY2FibGUgbGF3LgorICAgIAorICAgYERpc3RyaWJ1dGlvbicKKyAgICBNYWtpbmcgY29waWVzIG9mIHRoZSBXb3JrIGF2YWlsYWJsZSBmcm9tIG9uZSBwZXJzb24gdG8gYW5vdGhlciwgaW4KKyAgICB3aG9sZSBvciBpbiBwYXJ0LiAgRGlzdHJpYnV0aW9uIGluY2x1ZGVzIChidXQgaXMgbm90IGxpbWl0ZWQgdG8pCisgICAgbWFraW5nIGFueSBlbGVjdHJvbmljIGNvbXBvbmVudHMgb2YgdGhlIFdvcmsgYWNjZXNzaWJsZSBieQorICAgIGZpbGUgdHJhbnNmZXIgcHJvdG9jb2xzIHN1Y2ggYXMgRlRQIG9yIEhUVFAgb3IgYnkgc2hhcmVkIGZpbGUKKyAgICBzeXN0ZW1zIHN1Y2ggYXMgU3VuJ3MgTmV0d29yayBGaWxlIFN5c3RlbSAoTkZTKS4KKworICAgYENvbXBpbGVkIFdvcmsnCisgICAgQSB2ZXJzaW9uIG9mIHRoZSBXb3JrIHRoYXQgaGFzIGJlZW4gcHJvY2Vzc2VkIGludG8gYSBmb3JtIHdoZXJlIGl0CisgICAgaXMgZGlyZWN0bHkgdXNhYmxlIG9uIGEgY29tcHV0ZXIgc3lzdGVtLiAgVGhpcyBwcm9jZXNzaW5nIG1heQorICAgIGluY2x1ZGUgdXNpbmcgaW5zdGFsbGF0aW9uIGZhY2lsaXRpZXMgcHJvdmlkZWQgYnkgdGhlIFdvcmssCisgICAgdHJhbnNmb3JtYXRpb25zIG9mIHRoZSBXb3JrLCBjb3B5aW5nIG9mIGNvbXBvbmVudHMgb2YgdGhlIFdvcmssIG9yCisgICAgb3RoZXIgYWN0aXZpdGllcy4gIE5vdGUgdGhhdCBtb2RpZmljYXRpb24gb2YgYW55IGluc3RhbGxhdGlvbgorICAgIGZhY2lsaXRpZXMgcHJvdmlkZWQgYnkgdGhlIFdvcmsgY29uc3RpdHV0ZXMgbW9kaWZpY2F0aW9uIG9mIHRoZSBXb3JrLgorCisgICBgQ3VycmVudCBNYWludGFpbmVyJworICAgIEEgcGVyc29uIG9yIHBlcnNvbnMgbm9taW5hdGVkIGFzIHN1Y2ggd2l0aGluIHRoZSBXb3JrLiAgSWYgdGhlcmUgaXMKKyAgICBubyBzdWNoIGV4cGxpY2l0IG5vbWluYXRpb24gdGhlbiBpdCBpcyB0aGUgYENvcHlyaWdodCBIb2xkZXInIHVuZGVyCisgICAgYW55IGFwcGxpY2FibGUgbGF3LgorCisgICBgQmFzZSBJbnRlcnByZXRlcicgCisgICAgQSBwcm9ncmFtIG9yIHByb2Nlc3MgdGhhdCBpcyBub3JtYWxseSBuZWVkZWQgZm9yIHJ1bm5pbmcgb3IKKyAgICBpbnRlcnByZXRpbmcgYSBwYXJ0IG9yIHRoZSB3aG9sZSBvZiB0aGUgV29yay4gICAgCisKKyAgICBBIEJhc2UgSW50ZXJwcmV0ZXIgbWF5IGRlcGVuZCBvbiBleHRlcm5hbCBjb21wb25lbnRzIGJ1dCB0aGVzZQorICAgIGFyZSBub3QgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBCYXNlIEludGVycHJldGVyIHByb3ZpZGVkIHRoYXQgZWFjaAorICAgIGV4dGVybmFsIGNvbXBvbmVudCBjbGVhcmx5IGlkZW50aWZpZXMgaXRzZWxmIHdoZW5ldmVyIGl0IGlzIHVzZWQKKyAgICBpbnRlcmFjdGl2ZWx5LiAgVW5sZXNzIGV4cGxpY2l0bHkgc3BlY2lmaWVkIHdoZW4gYXBwbHlpbmcgdGhlCisgICAgbGljZW5zZSB0byB0aGUgV29yaywgdGhlIG9ubHkgYXBwbGljYWJsZSBCYXNlIEludGVycHJldGVyIGlzIGEKKyAgICBgTGFUZVgtRm9ybWF0JyBvciBpbiB0aGUgY2FzZSBvZiBmaWxlcyBiZWxvbmdpbmcgdG8gdGhlIAorICAgIGBMYVRlWC1mb3JtYXQnIGEgcHJvZ3JhbSBpbXBsZW1lbnRpbmcgdGhlIGBUZVggbGFuZ3VhZ2UnLgorCisKKworQ09ORElUSU9OUyBPTiBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisxLiAgQWN0aXZpdGllcyBvdGhlciB0aGFuIGRpc3RyaWJ1dGlvbiBhbmQvb3IgbW9kaWZpY2F0aW9uIG9mIHRoZSBXb3JrCithcmUgbm90IGNvdmVyZWQgYnkgdGhpcyBsaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIEluCitwYXJ0aWN1bGFyLCB0aGUgYWN0IG9mIHJ1bm5pbmcgdGhlIFdvcmsgaXMgbm90IHJlc3RyaWN0ZWQgYW5kIG5vCityZXF1aXJlbWVudHMgYXJlIG1hZGUgY29uY2VybmluZyBhbnkgb2ZmZXJzIG9mIHN1cHBvcnQgZm9yIHRoZSBXb3JrLgorCisyLiAgWW91IG1heSBkaXN0cmlidXRlIGEgY29tcGxldGUsIHVubW9kaWZpZWQgY29weSBvZiB0aGUgV29yayBhcyB5b3UKK3JlY2VpdmVkIGl0LiAgRGlzdHJpYnV0aW9uIG9mIG9ubHkgcGFydCBvZiB0aGUgV29yayBpcyBjb25zaWRlcmVkCittb2RpZmljYXRpb24gb2YgdGhlIFdvcmssIGFuZCBubyByaWdodCB0byBkaXN0cmlidXRlIHN1Y2ggYSBEZXJpdmVkCitXb3JrIG1heSBiZSBhc3N1bWVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIGNsYXVzZS4KKworMy4gIFlvdSBtYXkgZGlzdHJpYnV0ZSBhIENvbXBpbGVkIFdvcmsgdGhhdCBoYXMgYmVlbiBnZW5lcmF0ZWQgZnJvbSBhCitjb21wbGV0ZSwgdW5tb2RpZmllZCBjb3B5IG9mIHRoZSBXb3JrIGFzIGRpc3RyaWJ1dGVkIHVuZGVyIENsYXVzZSAyCithYm92ZSwgYXMgbG9uZyBhcyB0aGF0IENvbXBpbGVkIFdvcmsgaXMgZGlzdHJpYnV0ZWQgaW4gc3VjaCBhIHdheSB0aGF0Cit0aGUgcmVjaXBpZW50cyBtYXkgaW5zdGFsbCB0aGUgQ29tcGlsZWQgV29yayBvbiB0aGVpciBzeXN0ZW0gZXhhY3RseQorYXMgaXQgd291bGQgaGF2ZSBiZWVuIGluc3RhbGxlZCBpZiB0aGV5IGdlbmVyYXRlZCBhIENvbXBpbGVkIFdvcmsKK2RpcmVjdGx5IGZyb20gdGhlIFdvcmsuCisKKzQuICBJZiB5b3UgYXJlIHRoZSBDdXJyZW50IE1haW50YWluZXIgb2YgdGhlIFdvcmssIHlvdSBtYXksIHdpdGhvdXQKK3Jlc3RyaWN0aW9uLCBtb2RpZnkgdGhlIFdvcmssIHRodXMgY3JlYXRpbmcgYSBEZXJpdmVkIFdvcmsuICBZb3UgbWF5CithbHNvIGRpc3RyaWJ1dGUgdGhlIERlcml2ZWQgV29yayB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKK0NvbXBpbGVkIFdvcmtzIGdlbmVyYXRlZCBmcm9tIHRoZSBEZXJpdmVkIFdvcmsuICBEZXJpdmVkIFdvcmtzCitkaXN0cmlidXRlZCBpbiB0aGlzIG1hbm5lciBieSB0aGUgQ3VycmVudCBNYWludGFpbmVyIGFyZSBjb25zaWRlcmVkIHRvCitiZSB1cGRhdGVkIHZlcnNpb25zIG9mIHRoZSBXb3JrLgorCis1LiAgSWYgeW91IGFyZSBub3QgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBvZiB0aGUgV29yaywgeW91IG1heSBtb2RpZnkKK3lvdXIgY29weSBvZiB0aGUgV29yaywgdGh1cyBjcmVhdGluZyBhIERlcml2ZWQgV29yayBiYXNlZCBvbiB0aGUgV29yaywKK2FuZCBjb21waWxlIHRoaXMgRGVyaXZlZCBXb3JrLCB0aHVzIGNyZWF0aW5nIGEgQ29tcGlsZWQgV29yayBiYXNlZCBvbgordGhlIERlcml2ZWQgV29yay4KKworNi4gIElmIHlvdSBhcmUgbm90IHRoZSBDdXJyZW50IE1haW50YWluZXIgb2YgdGhlIFdvcmssIHlvdSBtYXkKK2Rpc3RyaWJ1dGUgYSBEZXJpdmVkIFdvcmsgcHJvdmlkZWQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQKK2ZvciBldmVyeSBjb21wb25lbnQgb2YgdGhlIFdvcmsgdW5sZXNzIHRoYXQgY29tcG9uZW50IGNsZWFybHkgc3RhdGVzCitpbiB0aGUgY29weXJpZ2h0IG5vdGljZSB0aGF0IGl0IGlzIGV4ZW1wdCBmcm9tIHRoYXQgY29uZGl0aW9uLiAgT25seQordGhlIEN1cnJlbnQgTWFpbnRhaW5lciBpcyBhbGxvd2VkIHRvIGFkZCBzdWNoIHN0YXRlbWVudHMgb2YgZXhlbXB0aW9uIAordG8gYSBjb21wb25lbnQgb2YgdGhlIFdvcmsuIAorCisgIGEuIElmIGEgY29tcG9uZW50IG9mIHRoaXMgRGVyaXZlZCBXb3JrIGNhbiBiZSBhIGRpcmVjdCByZXBsYWNlbWVudAorICAgICBmb3IgYSBjb21wb25lbnQgb2YgdGhlIFdvcmsgd2hlbiB0aGF0IGNvbXBvbmVudCBpcyB1c2VkIHdpdGggdGhlCisgICAgIEJhc2UgSW50ZXJwcmV0ZXIsIHRoZW4sIHdoZXJldmVyIHRoaXMgY29tcG9uZW50IG9mIHRoZSBXb3JrCisgICAgIGlkZW50aWZpZXMgaXRzZWxmIHRvIHRoZSB1c2VyIHdoZW4gdXNlZCBpbnRlcmFjdGl2ZWx5IHdpdGggdGhhdAorICAgICBCYXNlIEludGVycHJldGVyLCB0aGUgcmVwbGFjZW1lbnQgY29tcG9uZW50IG9mIHRoaXMgRGVyaXZlZCBXb3JrCisgICAgIGNsZWFybHkgYW5kIHVuYW1iaWd1b3VzbHkgaWRlbnRpZmllcyBpdHNlbGYgYXMgYSBtb2RpZmllZCB2ZXJzaW9uCisgICAgIG9mIHRoaXMgY29tcG9uZW50IHRvIHRoZSB1c2VyIHdoZW4gdXNlZCBpbnRlcmFjdGl2ZWx5IHdpdGggdGhhdAorICAgICBCYXNlIEludGVycHJldGVyLgorICAgICAKKyAgYi4gRXZlcnkgY29tcG9uZW50IG9mIHRoZSBEZXJpdmVkIFdvcmsgY29udGFpbnMgcHJvbWluZW50IG5vdGljZXMKKyAgICAgZGV0YWlsaW5nIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZXMgdG8gdGhhdCBjb21wb25lbnQsIG9yIGEKKyAgICAgcHJvbWluZW50IHJlZmVyZW5jZSB0byBhbm90aGVyIGZpbGUgdGhhdCBpcyBkaXN0cmlidXRlZCBhcyBwYXJ0CisgICAgIG9mIHRoZSBEZXJpdmVkIFdvcmsgYW5kIHRoYXQgY29udGFpbnMgYSBjb21wbGV0ZSBhbmQgYWNjdXJhdGUgbG9nCisgICAgIG9mIHRoZSBjaGFuZ2VzLgorICAKKyAgYy4gTm8gaW5mb3JtYXRpb24gaW4gdGhlIERlcml2ZWQgV29yayBpbXBsaWVzIHRoYXQgYW55IHBlcnNvbnMsCisgICAgIGluY2x1ZGluZyAoYnV0IG5vdCBsaW1pdGVkIHRvKSB0aGUgYXV0aG9ycyBvZiB0aGUgb3JpZ2luYWwgdmVyc2lvbgorICAgICBvZiB0aGUgV29yaywgcHJvdmlkZSBhbnkgc3VwcG9ydCwgaW5jbHVkaW5nIChidXQgbm90IGxpbWl0ZWQgdG8pCisgICAgIHRoZSByZXBvcnRpbmcgYW5kIGhhbmRsaW5nIG9mIGVycm9ycywgdG8gcmVjaXBpZW50cyBvZiB0aGUKKyAgICAgRGVyaXZlZCBXb3JrIHVubGVzcyB0aG9zZSBwZXJzb25zIGhhdmUgc3RhdGVkIGV4cGxpY2l0bHkgdGhhdAorICAgICB0aGV5IGRvIHByb3ZpZGUgc3VjaCBzdXBwb3J0IGZvciB0aGUgRGVyaXZlZCBXb3JrLgorCisgIGQuIFlvdSBkaXN0cmlidXRlIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nIHdpdGggdGhlIERlcml2ZWQgV29yazoKKworICAgICAgIDEuIEEgY29tcGxldGUsIHVubW9kaWZpZWQgY29weSBvZiB0aGUgV29yazsgCisgICAgICAgICAgaWYgeW91ciBkaXN0cmlidXRpb24gb2YgYSBtb2RpZmllZCBjb21wb25lbnQgaXMgbWFkZSBieQorICAgICAgICAgIG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5IHRoZSBtb2RpZmllZCBjb21wb25lbnQgZnJvbSBhCisgICAgICAgICAgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5CisgICAgICAgICAgdGhlIFdvcmsgZnJvbSB0aGUgc2FtZSBvciBzb21lIHNpbWlsYXIgcGxhY2UgbWVldHMgdGhpcworICAgICAgICAgIGNvbmRpdGlvbiwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90IGNvbXBlbGxlZCB0bworICAgICAgICAgIGNvcHkgdGhlIFdvcmsgYWxvbmcgd2l0aCB0aGUgbW9kaWZpZWQgY29tcG9uZW50OworCisgICAgICAgMi4gSW5mb3JtYXRpb24gdGhhdCBpcyBzdWZmaWNpZW50IHRvIG9idGFpbiBhIGNvbXBsZXRlLAorICAgICAgICAgIHVubW9kaWZpZWQgY29weSBvZiB0aGUgV29yay4KKworNy4gIElmIHlvdSBhcmUgbm90IHRoZSBDdXJyZW50IE1haW50YWluZXIgb2YgdGhlIFdvcmssIHlvdSBtYXkKK2Rpc3RyaWJ1dGUgYSBDb21waWxlZCBXb3JrIGdlbmVyYXRlZCBmcm9tIGEgRGVyaXZlZCBXb3JrLCBhcyBsb25nIGFzCit0aGUgRGVyaXZlZCBXb3JrIGlzIGRpc3RyaWJ1dGVkIHRvIGFsbCByZWNpcGllbnRzIG9mIHRoZSBDb21waWxlZAorV29yaywgYW5kIGFzIGxvbmcgYXMgdGhlIGNvbmRpdGlvbnMgb2YgQ2xhdXNlIDYsIGFib3ZlLCBhcmUgbWV0IHdpdGgKK3JlZ2FyZCB0byB0aGUgRGVyaXZlZCBXb3JrLgorCis4LiAgVGhlIGNvbmRpdGlvbnMgYWJvdmUgYXJlIG5vdCBpbnRlbmRlZCB0byBwcm9oaWJpdCwgYW5kIGhlbmNlIGRvIG5vdAorYXBwbHkgdG8sIHRoZSBtb2RpZmljYXRpb24sIGJ5IGFueSBtZXRob2QsIG9mIGFueSBjb21wb25lbnQgc28gdGhhdCBpdAorYmVjb21lcyBpZGVudGljYWwgdG8gYW4gdXBkYXRlZCB2ZXJzaW9uIG9mIHRoYXQgY29tcG9uZW50IG9mIHRoZSBXb3JrIGFzCitpdCBpcyBkaXN0cmlidXRlZCBieSB0aGUgQ3VycmVudCBNYWludGFpbmVyIHVuZGVyIENsYXVzZSA0LCBhYm92ZS4KKworOS4gIERpc3RyaWJ1dGlvbiBvZiB0aGUgV29yayBvciBhbnkgRGVyaXZlZCBXb3JrIGluIGFuIGFsdGVybmF0aXZlCitmb3JtYXQsIHdoZXJlIHRoZSBXb3JrIG9yIHRoYXQgRGVyaXZlZCBXb3JrIChpbiB3aG9sZSBvciBpbiBwYXJ0KSBpcwordGhlbiBwcm9kdWNlZCBieSBhcHBseWluZyBzb21lIHByb2Nlc3MgdG8gdGhhdCBmb3JtYXQsIGRvZXMgbm90IHJlbGF4IG9yCitudWxsaWZ5IGFueSBzZWN0aW9ucyBvZiB0aGlzIGxpY2Vuc2UgYXMgdGhleSBwZXJ0YWluIHRvIHRoZSByZXN1bHRzIG9mCithcHBseWluZyB0aGF0IHByb2Nlc3MuCisgICAgIAorMTAuIGEuIEEgRGVyaXZlZCBXb3JrIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlCisgICAgICAgcHJvdmlkZWQgdGhhdCBsaWNlbnNlIGl0c2VsZiBob25vcnMgdGhlIGNvbmRpdGlvbnMgbGlzdGVkIGluCisgICAgICAgQ2xhdXNlIDYgYWJvdmUsIGluIHJlZ2FyZCB0byB0aGUgV29yaywgdGhvdWdoIGl0IGRvZXMgbm90IGhhdmUKKyAgICAgICB0byBob25vciB0aGUgcmVzdCBvZiB0aGUgY29uZGl0aW9ucyBpbiB0aGlzIGxpY2Vuc2UuCisgICAgICAKKyAgICBiLiBJZiBhIERlcml2ZWQgV29yayBpcyBkaXN0cmlidXRlZCB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlLCB0aGF0CisgICAgICAgRGVyaXZlZCBXb3JrIG11c3QgcHJvdmlkZSBzdWZmaWNpZW50IGRvY3VtZW50YXRpb24gYXMgcGFydCBvZgorICAgICAgIGl0c2VsZiB0byBhbGxvdyBlYWNoIHJlY2lwaWVudCBvZiB0aGF0IERlcml2ZWQgV29yayB0byBob25vciB0aGUgCisgICAgICAgcmVzdHJpY3Rpb25zIGluIENsYXVzZSA2IGFib3ZlLCBjb25jZXJuaW5nIGNoYW5nZXMgZnJvbSB0aGUgV29yay4KKworMTEuIFRoaXMgbGljZW5zZSBwbGFjZXMgbm8gcmVzdHJpY3Rpb25zIG9uIHdvcmtzIHRoYXQgYXJlIHVucmVsYXRlZCB0bwordGhlIFdvcmssIG5vciBkb2VzIHRoaXMgbGljZW5zZSBwbGFjZSBhbnkgcmVzdHJpY3Rpb25zIG9uIGFnZ3JlZ2F0aW5nCitzdWNoIHdvcmtzIHdpdGggdGhlIFdvcmsgYnkgYW55IG1lYW5zLgorCisxMi4gIE5vdGhpbmcgaW4gdGhpcyBsaWNlbnNlIGlzIGludGVuZGVkIHRvLCBvciBtYXkgYmUgdXNlZCB0bywgcHJldmVudAorY29tcGxldGUgY29tcGxpYW5jZSBieSBhbGwgcGFydGllcyB3aXRoIGFsbCBhcHBsaWNhYmxlIGxhd3MuCisKKworTk8gV0FSUkFOVFkKKz09PT09PT09PT09CisKK1RoZXJlIGlzIG5vIHdhcnJhbnR5IGZvciB0aGUgV29yay4gIEV4Y2VwdCB3aGVuIG90aGVyd2lzZSBzdGF0ZWQgaW4KK3dyaXRpbmcsIHRoZSBDb3B5cmlnaHQgSG9sZGVyIHByb3ZpZGVzIHRoZSBXb3JrIGBhcyBpcycsIHdpdGhvdXQKK3dhcnJhbnR5IG9mIGFueSBraW5kLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQsIGluY2x1ZGluZywgYnV0IG5vdAorbGltaXRlZCB0bywgdGhlIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEKK3BhcnRpY3VsYXIgcHVycG9zZS4gIFRoZSBlbnRpcmUgcmlzayBhcyB0byB0aGUgcXVhbGl0eSBhbmQgcGVyZm9ybWFuY2UKK29mIHRoZSBXb3JrIGlzIHdpdGggeW91LiAgU2hvdWxkIHRoZSBXb3JrIHByb3ZlIGRlZmVjdGl2ZSwgeW91IGFzc3VtZQordGhlIGNvc3Qgb2YgYWxsIG5lY2Vzc2FyeSBzZXJ2aWNpbmcsIHJlcGFpciwgb3IgY29ycmVjdGlvbi4KKworSW4gbm8gZXZlbnQgdW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nCit3aWxsIFRoZSBDb3B5cmlnaHQgSG9sZGVyLCBvciBhbnkgYXV0aG9yIG5hbWVkIGluIHRoZSBjb21wb25lbnRzIG9mIHRoZQorV29yaywgb3IgYW55IG90aGVyIHBhcnR5IHdobyBtYXkgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBXb3JrIGFzCitwZXJtaXR0ZWQgYWJvdmUsIGJlIGxpYWJsZSB0byB5b3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZ2VuZXJhbCwKK3NwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgb3V0IG9mIGFueSB1c2Ugb2YKK3RoZSBXb3JrIG9yIG91dCBvZiBpbmFiaWxpdHkgdG8gdXNlIHRoZSBXb3JrIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZAordG8sIGxvc3Mgb2YgZGF0YSwgZGF0YSBiZWluZyByZW5kZXJlZCBpbmFjY3VyYXRlLCBvciBsb3NzZXMgc3VzdGFpbmVkIGJ5CithbnlvbmUgYXMgYSByZXN1bHQgb2YgYW55IGZhaWx1cmUgb2YgdGhlIFdvcmsgdG8gb3BlcmF0ZSB3aXRoIGFueSBvdGhlcgorcHJvZ3JhbXMpLCBldmVuIGlmIHRoZSBDb3B5cmlnaHQgSG9sZGVyIG9yIHNhaWQgYXV0aG9yIG9yIHNhaWQgb3RoZXIKK3BhcnR5IGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKworCitNQUlOVEVOQU5DRSBPRiBUSEUgV09SSworPT09PT09PT09PT09PT09PT09PT09PT0KKworVGhlIFdvcmsgaGFzIHRoZSBzdGF0dXMgYGF1dGhvci1tYWludGFpbmVkJyBpZiB0aGUgQ29weXJpZ2h0IEhvbGRlcgorZXhwbGljaXRseSBhbmQgcHJvbWluZW50bHkgc3RhdGVzIG5lYXIgdGhlIHByaW1hcnkgY29weXJpZ2h0IG5vdGljZSBpbgordGhlIFdvcmsgdGhhdCB0aGUgV29yayBjYW4gb25seSBiZSBtYWludGFpbmVkIGJ5IHRoZSBDb3B5cmlnaHQgSG9sZGVyCitvciBzaW1wbHkgdGhhdCBpdCBpcyBgYXV0aG9yLW1haW50YWluZWQnLgorCitUaGUgV29yayBoYXMgdGhlIHN0YXR1cyBgbWFpbnRhaW5lZCcgaWYgdGhlcmUgaXMgYSBDdXJyZW50IE1haW50YWluZXIKK3dobyBoYXMgaW5kaWNhdGVkIGluIHRoZSBXb3JrIHRoYXQgdGhleSBhcmUgd2lsbGluZyB0byByZWNlaXZlIGVycm9yCityZXBvcnRzIGZvciB0aGUgV29yayAoZm9yIGV4YW1wbGUsIGJ5IHN1cHBseWluZyBhIHZhbGlkIGUtbWFpbAorYWRkcmVzcykuIEl0IGlzIG5vdCByZXF1aXJlZCBmb3IgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciB0byBhY2tub3dsZWRnZQorb3IgYWN0IHVwb24gdGhlc2UgZXJyb3IgcmVwb3J0cy4KKworVGhlIFdvcmsgY2hhbmdlcyBmcm9tIHN0YXR1cyBgbWFpbnRhaW5lZCcgdG8gYHVubWFpbnRhaW5lZCcgaWYgdGhlcmUKK2lzIG5vIEN1cnJlbnQgTWFpbnRhaW5lciwgb3IgdGhlIHBlcnNvbiBzdGF0ZWQgdG8gYmUgQ3VycmVudAorTWFpbnRhaW5lciBvZiB0aGUgd29yayBjYW5ub3QgYmUgcmVhY2hlZCB0aHJvdWdoIHRoZSBpbmRpY2F0ZWQgbWVhbnMKK29mIGNvbW11bmljYXRpb24gZm9yIGEgcGVyaW9kIG9mIHNpeCBtb250aHMsIGFuZCB0aGVyZSBhcmUgbm8gb3RoZXIKK3NpZ25pZmljYW50IHNpZ25zIG9mIGFjdGl2ZSBtYWludGVuYW5jZS4KKworWW91IGNhbiBiZWNvbWUgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBvZiB0aGUgV29yayBieSBhZ3JlZW1lbnQgd2l0aAorYW55IGV4aXN0aW5nIEN1cnJlbnQgTWFpbnRhaW5lciB0byB0YWtlIG92ZXIgdGhpcyByb2xlLgorCitJZiB0aGUgV29yayBpcyB1bm1haW50YWluZWQsIHlvdSBjYW4gYmVjb21lIHRoZSBDdXJyZW50IE1haW50YWluZXIgb2YKK3RoZSBXb3JrIHRocm91Z2ggdGhlIGZvbGxvd2luZyBzdGVwczoKKworIDEuICBNYWtlIGEgcmVhc29uYWJsZSBhdHRlbXB0IHRvIHRyYWNlIHRoZSBDdXJyZW50IE1haW50YWluZXIgKGFuZAorICAgICB0aGUgQ29weXJpZ2h0IEhvbGRlciwgaWYgdGhlIHR3byBkaWZmZXIpIHRocm91Z2ggdGhlIG1lYW5zIG9mCisgICAgIGFuIEludGVybmV0IG9yIHNpbWlsYXIgc2VhcmNoLgorCisgMi4gIElmIHRoaXMgc2VhcmNoIGlzIHN1Y2Nlc3NmdWwsIHRoZW4gZW5xdWlyZSB3aGV0aGVyIHRoZSBXb3JrCisgICAgIGlzIHN0aWxsIG1haW50YWluZWQuCisKKyAgYS4gSWYgaXQgaXMgYmVpbmcgbWFpbnRhaW5lZCwgdGhlbiBhc2sgdGhlIEN1cnJlbnQgTWFpbnRhaW5lcgorICAgICB0byB1cGRhdGUgdGhlaXIgY29tbXVuaWNhdGlvbiBkYXRhIHdpdGhpbiBvbmUgbW9udGguCisgICAgIAorICBiLiBJZiB0aGUgc2VhcmNoIGlzIHVuc3VjY2Vzc2Z1bCBvciBubyBhY3Rpb24gdG8gcmVzdW1lIGFjdGl2ZQorICAgICBtYWludGVuYW5jZSBpcyB0YWtlbiBieSB0aGUgQ3VycmVudCBNYWludGFpbmVyLCB0aGVuIGFubm91bmNlCisgICAgIHdpdGhpbiB0aGUgcGVydGluZW50IGNvbW11bml0eSB5b3VyIGludGVudGlvbiB0byB0YWtlIG92ZXIKKyAgICAgbWFpbnRlbmFuY2UuICAoSWYgdGhlIFdvcmsgaXMgYSBMYVRlWCB3b3JrLCB0aGlzIGNvdWxkIGJlCisgICAgIGRvbmUsIGZvciBleGFtcGxlLCBieSBwb3N0aW5nIHRvIGNvbXAudGV4dC50ZXguKQorCisgM2EuIElmIHRoZSBDdXJyZW50IE1haW50YWluZXIgaXMgcmVhY2hhYmxlIGFuZCBhZ3JlZXMgdG8gcGFzcworICAgICBtYWludGVuYW5jZSBvZiB0aGUgV29yayB0byB5b3UsIHRoZW4gdGhpcyB0YWtlcyBlZmZlY3QKKyAgICAgaW1tZWRpYXRlbHkgdXBvbiBhbm5vdW5jZW1lbnQuCisgICAgIAorICBiLiBJZiB0aGUgQ3VycmVudCBNYWludGFpbmVyIGlzIG5vdCByZWFjaGFibGUgYW5kIHRoZSBDb3B5cmlnaHQKKyAgICAgSG9sZGVyIGFncmVlcyB0aGF0IG1haW50ZW5hbmNlIG9mIHRoZSBXb3JrIGJlIHBhc3NlZCB0byB5b3UsCisgICAgIHRoZW4gdGhpcyB0YWtlcyBlZmZlY3QgaW1tZWRpYXRlbHkgdXBvbiBhbm5vdW5jZW1lbnQuICAKKyAgICAKKyA0LiAgSWYgeW91IG1ha2UgYW4gYGludGVudGlvbiBhbm5vdW5jZW1lbnQnIGFzIGRlc2NyaWJlZCBpbiAyYi4gYWJvdmUKKyAgICAgYW5kIGFmdGVyIHRocmVlIG1vbnRocyB5b3VyIGludGVudGlvbiBpcyBjaGFsbGVuZ2VkIG5laXRoZXIgYnkKKyAgICAgdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBub3IgYnkgdGhlIENvcHlyaWdodCBIb2xkZXIgbm9yIGJ5IG90aGVyCisgICAgIHBlb3BsZSwgdGhlbiB5b3UgbWF5IGFycmFuZ2UgZm9yIHRoZSBXb3JrIHRvIGJlIGNoYW5nZWQgc28gYXMKKyAgICAgdG8gbmFtZSB5b3UgYXMgdGhlIChuZXcpIEN1cnJlbnQgTWFpbnRhaW5lci4KKyAgICAgCisgNS4gIElmIHRoZSBwcmV2aW91c2x5IHVucmVhY2hhYmxlIEN1cnJlbnQgTWFpbnRhaW5lciBiZWNvbWVzCisgICAgIHJlYWNoYWJsZSBvbmNlIG1vcmUgd2l0aGluIHRocmVlIG1vbnRocyBvZiBhIGNoYW5nZSBjb21wbGV0ZWQKKyAgICAgdW5kZXIgdGhlIHRlcm1zIG9mIDNiKSBvciA0KSwgdGhlbiB0aGF0IEN1cnJlbnQgTWFpbnRhaW5lciBtdXN0CisgICAgIGJlY29tZSBvciByZW1haW4gdGhlIEN1cnJlbnQgTWFpbnRhaW5lciB1cG9uIHJlcXVlc3QgcHJvdmlkZWQKKyAgICAgdGhleSB0aGVuIHVwZGF0ZSB0aGVpciBjb21tdW5pY2F0aW9uIGRhdGEgd2l0aGluIG9uZSBtb250aC4KKworQSBjaGFuZ2UgaW4gdGhlIEN1cnJlbnQgTWFpbnRhaW5lciBkb2VzIG5vdCwgb2YgaXRzZWxmLCBhbHRlciB0aGUgZmFjdAordGhhdCB0aGUgV29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgTFBQTCBsaWNlbnNlLgorCitJZiB5b3UgYmVjb21lIHRoZSBDdXJyZW50IE1haW50YWluZXIgb2YgdGhlIFdvcmssIHlvdSBzaG91bGQKK2ltbWVkaWF0ZWx5IHByb3ZpZGUsIHdpdGhpbiB0aGUgV29yaywgYSBwcm9taW5lbnQgYW5kIHVuYW1iaWd1b3VzCitzdGF0ZW1lbnQgb2YgeW91ciBzdGF0dXMgYXMgQ3VycmVudCBNYWludGFpbmVyLiAgWW91IHNob3VsZCBhbHNvCithbm5vdW5jZSB5b3VyIG5ldyBzdGF0dXMgdG8gdGhlIHNhbWUgcGVydGluZW50IGNvbW11bml0eSBhcworaW4gMmIpIGFib3ZlLgorCisKK1dIRVRIRVIgQU5EIEhPVyBUTyBESVNUUklCVVRFIFdPUktTIFVOREVSIFRISVMgTElDRU5TRQorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoaXMgc2VjdGlvbiBjb250YWlucyBpbXBvcnRhbnQgaW5zdHJ1Y3Rpb25zLCBleGFtcGxlcywgYW5kCityZWNvbW1lbmRhdGlvbnMgZm9yIGF1dGhvcnMgd2hvIGFyZSBjb25zaWRlcmluZyBkaXN0cmlidXRpbmcgdGhlaXIKK3dvcmtzIHVuZGVyIHRoaXMgbGljZW5zZS4gIFRoZXNlIGF1dGhvcnMgYXJlIGFkZHJlc3NlZCBhcyBgeW91JyBpbgordGhpcyBzZWN0aW9uLgorCitDaG9vc2luZyBUaGlzIExpY2Vuc2Ugb3IgQW5vdGhlciBMaWNlbnNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lmIGZvciBhbnkgcGFydCBvZiB5b3VyIHdvcmsgeW91IHdhbnQgb3IgbmVlZCB0byB1c2UgKmRpc3RyaWJ1dGlvbioKK2NvbmRpdGlvbnMgdGhhdCBkaWZmZXIgc2lnbmlmaWNhbnRseSBmcm9tIHRob3NlIGluIHRoaXMgbGljZW5zZSwgdGhlbgorZG8gbm90IHJlZmVyIHRvIHRoaXMgbGljZW5zZSBhbnl3aGVyZSBpbiB5b3VyIHdvcmsgYnV0LCBpbnN0ZWFkLAorZGlzdHJpYnV0ZSB5b3VyIHdvcmsgdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZS4gIFlvdSBtYXkgdXNlIHRoZSB0ZXh0CitvZiB0aGlzIGxpY2Vuc2UgYXMgYSBtb2RlbCBmb3IgeW91ciBvd24gbGljZW5zZSwgYnV0IHlvdXIgbGljZW5zZQorc2hvdWxkIG5vdCByZWZlciB0byB0aGUgTFBQTCBvciBvdGhlcndpc2UgZ2l2ZSB0aGUgaW1wcmVzc2lvbiB0aGF0Cit5b3VyIHdvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExQUEwuCisKK1RoZSBkb2N1bWVudCBgbW9kZ3VpZGUudGV4JyBpbiB0aGUgYmFzZSBMYVRlWCBkaXN0cmlidXRpb24gZXhwbGFpbnMKK3RoZSBtb3RpdmF0aW9uIGJlaGluZCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIGxpY2Vuc2UuICBJdCBleHBsYWlucywKK2ZvciBleGFtcGxlLCB3aHkgZGlzdHJpYnV0aW5nIExhVGVYIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgKEdQTCkgd2FzIGNvbnNpZGVyZWQgaW5hcHByb3ByaWF0ZS4gIEV2ZW4gaWYgeW91ciB3b3JrIGlzCit1bnJlbGF0ZWQgdG8gTGFUZVgsIHRoZSBkaXNjdXNzaW9uIGluIGBtb2RndWlkZS50ZXgnIG1heSBzdGlsbCBiZQorcmVsZXZhbnQsIGFuZCBhdXRob3JzIGludGVuZGluZyB0byBkaXN0cmlidXRlIHRoZWlyIHdvcmtzIHVuZGVyIGFueQorbGljZW5zZSBhcmUgZW5jb3VyYWdlZCB0byByZWFkIGl0LgorCitBIFJlY29tbWVuZGF0aW9uIG9uIE1vZGlmaWNhdGlvbiBXaXRob3V0IERpc3RyaWJ1dGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworSXQgaXMgd2lzZSBuZXZlciB0byBtb2RpZnkgYSBjb21wb25lbnQgb2YgdGhlIFdvcmssIGV2ZW4gZm9yIHlvdXIgb3duCitwZXJzb25hbCB1c2UsIHdpdGhvdXQgYWxzbyBtZWV0aW5nIHRoZSBhYm92ZSBjb25kaXRpb25zIGZvcgorZGlzdHJpYnV0aW5nIHRoZSBtb2RpZmllZCBjb21wb25lbnQuICBXaGlsZSB5b3UgbWlnaHQgaW50ZW5kIHRoYXQgc3VjaAorbW9kaWZpY2F0aW9ucyB3aWxsIG5ldmVyIGJlIGRpc3RyaWJ1dGVkLCBvZnRlbiB0aGlzIHdpbGwgaGFwcGVuIGJ5CithY2NpZGVudCAtLSB5b3UgbWF5IGZvcmdldCB0aGF0IHlvdSBoYXZlIG1vZGlmaWVkIHRoYXQgY29tcG9uZW50OyBvcgoraXQgbWF5IG5vdCBvY2N1ciB0byB5b3Ugd2hlbiBhbGxvd2luZyBvdGhlcnMgdG8gYWNjZXNzIHRoZSBtb2RpZmllZAordmVyc2lvbiB0aGF0IHlvdSBhcmUgdGh1cyBkaXN0cmlidXRpbmcgaXQgYW5kIHZpb2xhdGluZyB0aGUgY29uZGl0aW9ucworb2YgdGhpcyBsaWNlbnNlIGluIHdheXMgdGhhdCBjb3VsZCBoYXZlIGxlZ2FsIGltcGxpY2F0aW9ucyBhbmQsIHdvcnNlLAorY2F1c2UgcHJvYmxlbXMgZm9yIHRoZSBjb21tdW5pdHkuICBJdCBpcyB0aGVyZWZvcmUgdXN1YWxseSBpbiB5b3VyCitiZXN0IGludGVyZXN0IHRvIGtlZXAgeW91ciBjb3B5IG9mIHRoZSBXb3JrIGlkZW50aWNhbCB3aXRoIHRoZSBwdWJsaWMKK29uZS4gIE1hbnkgd29ya3MgcHJvdmlkZSB3YXlzIHRvIGNvbnRyb2wgdGhlIGJlaGF2aW9yIG9mIHRoYXQgd29yaword2l0aG91dCBhbHRlcmluZyBhbnkgb2YgaXRzIGxpY2Vuc2VkIGNvbXBvbmVudHMuCisKK0hvdyB0byBVc2UgVGhpcyBMaWNlbnNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUbyB1c2UgdGhpcyBsaWNlbnNlLCBwbGFjZSBpbiBlYWNoIG9mIHRoZSBjb21wb25lbnRzIG9mIHlvdXIgd29yayBib3RoCithbiBleHBsaWNpdCBjb3B5cmlnaHQgbm90aWNlIGluY2x1ZGluZyB5b3VyIG5hbWUgYW5kIHRoZSB5ZWFyIHRoZSB3b3JrCit3YXMgYXV0aG9yZWQgYW5kL29yIGxhc3Qgc3Vic3RhbnRpYWxseSBtb2RpZmllZC4gIEluY2x1ZGUgYWxzbyBhCitzdGF0ZW1lbnQgdGhhdCB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciBtb2RpZmljYXRpb24gb2YgdGhhdAorY29tcG9uZW50IGlzIGNvbnN0cmFpbmVkIGJ5IHRoZSBjb25kaXRpb25zIGluIHRoaXMgbGljZW5zZS4KKworSGVyZSBpcyBhbiBleGFtcGxlIG9mIHN1Y2ggYSBub3RpY2UgYW5kIHN0YXRlbWVudDoKKworICAlJSBwaWcuZHR4CisgICUlIENvcHlyaWdodCAyMDA1IE0uIFkuIE5hbWUKKyAgJQorICAlIFRoaXMgd29yayBtYXkgYmUgZGlzdHJpYnV0ZWQgYW5kL29yIG1vZGlmaWVkIHVuZGVyIHRoZQorICAlIGNvbmRpdGlvbnMgb2YgdGhlIExhVGVYIFByb2plY3QgUHVibGljIExpY2Vuc2UsIGVpdGhlciB2ZXJzaW9uIDEuMworICAlIG9mIHRoaXMgbGljZW5zZSBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAlIFRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIGxpY2Vuc2UgaXMgaW4KKyAgJSAgIGh0dHA6Ly93d3cubGF0ZXgtcHJvamVjdC5vcmcvbHBwbC50eHQKKyAgJSBhbmQgdmVyc2lvbiAxLjMgb3IgbGF0ZXIgaXMgcGFydCBvZiBhbGwgZGlzdHJpYnV0aW9ucyBvZiBMYVRlWAorICAlIHZlcnNpb24gMjAwNS8xMi8wMSBvciBsYXRlci4KKyAgJQorICAlIFRoaXMgd29yayBoYXMgdGhlIExQUEwgbWFpbnRlbmFuY2Ugc3RhdHVzIGBtYWludGFpbmVkJy4KKyAgJSAKKyAgJSBUaGUgQ3VycmVudCBNYWludGFpbmVyIG9mIHRoaXMgd29yayBpcyBNLiBZLiBOYW1lLgorICAlCisgICUgVGhpcyB3b3JrIGNvbnNpc3RzIG9mIHRoZSBmaWxlcyBwaWcuZHR4IGFuZCBwaWcuaW5zCisgICUgYW5kIHRoZSBkZXJpdmVkIGZpbGUgcGlnLnN0eS4KKworR2l2ZW4gc3VjaCBhIG5vdGljZSBhbmQgc3RhdGVtZW50IGluIGEgZmlsZSwgdGhlIGNvbmRpdGlvbnMKK2dpdmVuIGluIHRoaXMgbGljZW5zZSBkb2N1bWVudCB3b3VsZCBhcHBseSwgd2l0aCB0aGUgYFdvcmsnIHJlZmVycmluZwordG8gdGhlIHRocmVlIGZpbGVzIGBwaWcuZHR4JywgYHBpZy5pbnMnLCBhbmQgYHBpZy5zdHknICh0aGUgbGFzdCBiZWluZworZ2VuZXJhdGVkIGZyb20gYHBpZy5kdHgnIHVzaW5nIGBwaWcuaW5zJyksIHRoZSBgQmFzZSBJbnRlcnByZXRlcicKK3JlZmVycmluZyB0byBhbnkgYExhVGVYLUZvcm1hdCcsIGFuZCBib3RoIGBDb3B5cmlnaHQgSG9sZGVyJyBhbmQKK2BDdXJyZW50IE1haW50YWluZXInIHJlZmVycmluZyB0byB0aGUgcGVyc29uIGBNLiBZLiBOYW1lJy4KKworSWYgeW91IGRvIG5vdCB3YW50IHRoZSBNYWludGVuYW5jZSBzZWN0aW9uIG9mIExQUEwgdG8gYXBwbHkgdG8geW91cgorV29yaywgY2hhbmdlIGBtYWludGFpbmVkJyBhYm92ZSBpbnRvIGBhdXRob3ItbWFpbnRhaW5lZCcuICAKK0hvd2V2ZXIsIHdlIHJlY29tbWVuZCB0aGF0IHlvdSB1c2UgYG1haW50YWluZWQnLCBhcyB0aGUgTWFpbnRlbmFuY2UKK3NlY3Rpb24gd2FzIGFkZGVkIGluIG9yZGVyIHRvIGVuc3VyZSB0aGF0IHlvdXIgV29yayByZW1haW5zIHVzZWZ1bCB0bwordGhlIGNvbW11bml0eSBldmVuIHdoZW4geW91IGNhbiBubyBsb25nZXIgbWFpbnRhaW4gYW5kIHN1cHBvcnQgaXQKK3lvdXJzZWxmLgorCitEZXJpdmVkIFdvcmtzIFRoYXQgQXJlIE5vdCBSZXBsYWNlbWVudHMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTZXZlcmFsIGNsYXVzZXMgb2YgdGhlIExQUEwgc3BlY2lmeSBtZWFucyB0byBwcm92aWRlIHJlbGlhYmlsaXR5IGFuZAorc3RhYmlsaXR5IGZvciB0aGUgdXNlciBjb21tdW5pdHkuIFRoZXkgdGhlcmVmb3JlIGNvbmNlcm4gdGhlbXNlbHZlcword2l0aCB0aGUgY2FzZSB0aGF0IGEgRGVyaXZlZCBXb3JrIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgYXMgYQorKGNvbXBhdGlibGUgb3IgaW5jb21wYXRpYmxlKSByZXBsYWNlbWVudCBvZiB0aGUgb3JpZ2luYWwgV29yay4gSWYKK3RoaXMgaXMgbm90IHRoZSBjYXNlIChlLmcuLCBpZiBhIGZldyBsaW5lcyBvZiBjb2RlIGFyZSByZXVzZWQgZm9yIGEKK2NvbXBsZXRlbHkgZGlmZmVyZW50IHRhc2spLCB0aGVuIGNsYXVzZXMgNmIgYW5kIDZkIHNoYWxsIG5vdCBhcHBseS4KKworCitJbXBvcnRhbnQgUmVjb21tZW5kYXRpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyBEZWZpbmluZyBXaGF0IENvbnN0aXR1dGVzIHRoZSBXb3JrCisKKyAgIFRoZSBMUFBMIHJlcXVpcmVzIHRoYXQgZGlzdHJpYnV0aW9ucyBvZiB0aGUgV29yayBjb250YWluIGFsbCB0aGUKKyAgIGZpbGVzIG9mIHRoZSBXb3JrLiAgSXQgaXMgdGhlcmVmb3JlIGltcG9ydGFudCB0aGF0IHlvdSBwcm92aWRlIGEKKyAgIHdheSBmb3IgdGhlIGxpY2Vuc2VlIHRvIGRldGVybWluZSB3aGljaCBmaWxlcyBjb25zdGl0dXRlIHRoZSBXb3JrLgorICAgVGhpcyBjb3VsZCwgZm9yIGV4YW1wbGUsIGJlIGFjaGlldmVkIGJ5IGV4cGxpY2l0bHkgbGlzdGluZyBhbGwgdGhlCisgICBmaWxlcyBvZiB0aGUgV29yayBuZWFyIHRoZSBjb3B5cmlnaHQgbm90aWNlIG9mIGVhY2ggZmlsZSBvciBieQorICAgdXNpbmcgYSBsaW5lIHN1Y2ggYXM6CisKKyAgICAlIFRoaXMgd29yayBjb25zaXN0cyBvZiBhbGwgZmlsZXMgbGlzdGVkIGluIG1hbmlmZXN0LnR4dC4KKyAgIAorICAgaW4gdGhhdCBwbGFjZS4gIEluIHRoZSBhYnNlbmNlIG9mIGFuIHVuZXF1aXZvY2FsIGxpc3QgaXQgbWlnaHQgYmUKKyAgIGltcG9zc2libGUgZm9yIHRoZSBsaWNlbnNlZSB0byBkZXRlcm1pbmUgd2hhdCBpcyBjb25zaWRlcmVkIGJ5IHlvdQorICAgdG8gY29tcHJpc2UgdGhlIFdvcmsgYW5kLCBpbiBzdWNoIGEgY2FzZSwgdGhlIGxpY2Vuc2VlIHdvdWxkIGJlCisgICBlbnRpdGxlZCB0byBtYWtlIHJlYXNvbmFibGUgY29uamVjdHVyZXMgYXMgdG8gd2hpY2ggZmlsZXMgY29tcHJpc2UKKyAgIHRoZSBXb3JrLgorCmRpZmYgLS1naXQgYS9saWNlbnNlcy9MUkNURiBiL2xpY2Vuc2VzL0xSQ1RGCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzNDVmNTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9MUkNURgpAQCAtMCwwICsxLDU2IEBACis9PT09PT09PT09CistTEVHQUxFU0UtCis9PT09PT09PT09CitMb2tpJ3MgUmV2ZW5nZSBDYXB0dXJlIFRoZSBGbGFnIGNvcHlyaWdodCAyMDAzLXByZXNlbnQgdmVuZ2FtZXMuY29tCitBbGwgcmlnaHRzIHJlc2VydmVkCisKK0F1dGhvcnMgbWF5IE5PVCB1c2UgdGhlc2UgbGV2ZWxzIGFzIGEgYmFzZSB0byBidWlsZCBhZGRpdGlvbmFsCitsZXZlbHMgd2l0aG91dCB0aGUgZXhwbGljaXQgcGVybWlzc2lvbiBvZiB0aGUgaW5kaXZpZHVhbCBhdXRob3JzLgorQ29tcGlsZWQgLmJzcCBmaWxlcyBtYXkgbm90IGJlIGRlY29tcGlsZWQgb3IgcmV2ZXJzZSBlbmdpbmVlcmVkIGZvcgorYW55IHB1cnBvc2Ugd2hhdHNvZXZlci4gVGhlc2UgbGV2ZWxzIGFyZSBub3QgbWFkZSBieSBvciBzdXBwb3J0ZWQgYnkKK2lkIFNvZnR3YXJlLgorCitMUkNURiByZXF1aXJlcyBhIHJlZ2lzdGVyZWQgdmVyc2lvbiBvZiBRdWFrZSBJSUkgQXJlbmEgKyB2YWxpZCBDRC1LZXkKKworUXVha2UgSUlJIEFyZW5hIGlzIGEgcmVnaXN0ZXJlZCB0cmFkZW1hcmsgb2YgaWQgU29mdHdhcmUsIGluYy4KKworQ29tcGFuaWVzIG9yIHNlcnZpY2VzIHRoYXQgZGVyaXZlIGluY29tZSB0aHJvdWdoIHBsYXllciBmZWVzLAorbWVtYmVyc2hpcHMsIGhvdXJseSBjaGFyZ2VzIG9yIGluLWdhbWUgYWR2ZXJ0aXNpbmcgcmV2ZW51ZSBtYXkgbm90IGhvc3QKK0xSQ1RGIG9uIHRoZWlyIGdhbWUgc2VydmVycyB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbgorZnJvbSB0aGUgTFJDVEYgZGV2dGVhbSwgYWthIHZlbmdhbWVzLmNvbQorCitCeSB1c2luZyB0aGlzIHByb2R1Y3QgeW91IGFncmVlIHRvIGV4ZW1wdCwgd2l0aG91dCByZXNlcnZhdGlvbiwgdGhlCithdXRob3JzIGFuZCBvd25lcnMgb2YgdGhpcyBwcm9kdWN0aW9uIG9yIGNvbXBvbmVudHMgdGhlcmVvZiBmcm9tIGFueQorcmVzcG9uc2liaWxpdHkgZm9yIGxpYWJpbGl0eSwgZGFtYWdlIGNhdXNlZCwgb3IgbG9zcywgZGlyZWN0bHkgb3IKK2luZGlyZWN0bHksIGJ5IHRoaXMgc29mdHdhcmUsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8sIGFueQoraW50ZXJydXB0aW9ucyBvZiBzZXJ2aWNlLCBsb3NzIG9mIGJ1c2luZXNzLCBvciBhbnkgb3RoZXIgY29uc2VxdWVudGlhbAorZGFtYWdlcyByZXN1bHRpbmcgZnJvbSB0aGUgdXNlIG9mIG9yIG9wZXJhdGlvbiBvZiB0aGlzIHByb2R1Y3Qgb3IKK2NvbXBvbmVudHMgdGhlcmVvZi4KKworTm8gd2FycmFudGllcyBhcmUgbWFkZSwgZXhwcmVzc2VkIG9yIGltcGxpZWQsIHJlZ2FyZGluZyB0aGUgdXNhZ2UsCitmdW5jdGlvbmFsaXR5LCBvciBpbXBsaWVkIG9wZXJhYmlsaXR5IG9mIHRoaXMgcHJvZHVjdC4gQWxsIGVsZW1lbnRzCithcmUgYXZhaWxhYmxlIHNvbGVseSBvbiBhbiAiYXMtaXMiIGJhc2lzLiBVc2FnZSBpcyBzdWJqZWN0IHRvIHRoZQordXNlcidzIG93biByaXNrLgorCitOZXcgb3IgYWx0ZXJlZCBzb3VyY2UgY29kZSBjb21wb25lbnRzIGFyZSBpbmNsdWRlZCB3aXRoIHBlcm1pc3Npb24gb2YKK3RoZSByZXNwZWN0aXZlIGF1dGhvcnMgYW5kIG93bmVycyBhbmQgYXJlIHByb3ZpZGVkIHdpdGggdGhlIG9ubHkKK2ludGVudGlvbiBvZiBmYWNpbGl0YXRpbmcgaW4gdGhlIGludGVncmF0aW9uIG9mIHRoaXMgcHJvZHVjdGlvbiwgb3IKK2NvbXBvbmVudHMgdGhlcmVvZiwgd2l0aCBvdGhlciBzdWNoIGZyZWVseSBhdmFpbGFibGUgYW5kIG5vbi1jb21tZXJjaWFsCitwcm9kdWN0aW9ucy4gQXV0aG9ycyBhcmUgZXhwcmVzc2x5IGZvcmJpZGRlbiB0byB1c2UgdGhlc2UgY29tcG9uZW50cywKK29yIGFueSBvdGhlciBjb21wb25lbnQgb2YgdGhpcyBwcm9kdWN0aW9uLCBhcyBhIGJhc2lzIGZvciBvdGhlcgorY29tbWVyY2lhbGx5IGF2YWlsYWJsZSB3b3JrcyBvciBkZW1vbnN0cmF0aW9uIHN5c3RlbXMgd2l0aG91dCBwcmlvcgorYWNrbm93bGVkZ2VtZW50IGFuZCBjb25zZW50IGZyb20gdmVuZ2FtZXMuY29tIG9yIG9uZSBvZgordmVuZ2FtZXMuY29tJ3MgZHVseSBhcHBvaW50ZWQgcmVwcmVzZW50YXRpdmVzLCBhZ2VudHMgb3IKK3N1YnNpZGlhcmllcy4KKworVGhpcyBwYWNrYWdlIG1heSBiZSBlbGVjdHJvbmljYWxseSBkaXN0cmlidXRlZCBvbmx5IGZyZWUgb2YgY2hhcmdlIHRvCit0aGUgcmVjaXBpZW50IGluIGl0cyBjdXJyZW50IHN0YXRlLCBtdXN0IGluY2x1ZGUgdGhpcyAudHh0IGZpbGUsIGFuZAorbWF5IG5vdCBiZSBtb2RpZmllZCBpbiBhbnkgd2F5LgorCitVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIElTIFRISVMgUEFDS0FHRSBUTyBCRSBESVNUUklCVVRFRCBPTgorQ0QtUk9NIE9SIE9USEVSIE1FRElBIENPTU1FUkNJQUxMWSBXSVRIT1VUIFBSSU9SIFBFUk1JU1NJT04KK0ZST00gVEhFIExSQ1RGIERFVlRFQU0gT1IgVkVOR0FNRVMuQ09NCisKKz09PT09PT09PT09PT09PT09CitkZXZ0ZWFtQGxyY3RmLmNvbQoraHR0cDovL3d3dy52ZW5nYW1lcy5jb20KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0xTSSBiL2xpY2Vuc2VzL0xTSQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2I2ZjJmCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvTFNJCkBAIC0wLDAgKzEsMTI3IEBACitodHRwOi8vd3d3LmxzaS5jb20vY20vTGljZW5zZS5kbz91cmw9JnByb2ROYW1lPSZzdWJUeXBlPU1pc2NlbGxhbmVvdXMmbG9jYWxlPUVOCisKK05PVElDRSBTUEVDSUZJQyBUTyBTT0ZUV0FSRSBBVkFJTEFCTEUgT04gVEhJUyBXRUJTSVRFLiAgQW55IHNvZnR3YXJlIHRoYXQgaXMKK21hZGUgYXZhaWxhYmxlIHRvIGRvd25sb2FkIGZyb20gdGhpcyBzZXJ2ZXIgKCJTb2Z0d2FyZSIpIGlzIHRoZSBjb3B5cmlnaHRlZCB3b3JrCitvZiBMU0kgQ09SUE9SQVRJT04gYW5kL29yIGl0cyBzdXBwbGllcnMuIFVzZSBvZiB0aGUgU29mdHdhcmUgaXMgZ292ZXJuZWQgYnkgdGhlCit0ZXJtcyBvZiB0aGUgZW5kIHVzZXIgbGljZW5zZSBhZ3JlZW1lbnQsIGlmIGFueSwgd2hpY2ggYWNjb21wYW5pZXMgb3IgaXMKK2luY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlICgiTGljZW5zZSBBZ3JlZW1lbnQiKS4gQW4gZW5kIHVzZXIgd2lsbCBiZSB1bmFibGUgdG8KK2luc3RhbGwgYW55IFNvZnR3YXJlIHRoYXQgaXMgYWNjb21wYW5pZWQgYnkgb3IgaW5jbHVkZXMgYSBMaWNlbnNlIEFncmVlbWVudCwKK3VubGVzcyBoZSBvciBzaGUgZmlyc3QgYWdyZWVzIHRvIHRoZSBMaWNlbnNlIEFncmVlbWVudCB0ZXJtcy4KKworVGhlIFNvZnR3YXJlIGlzIG1hZGUgYXZhaWxhYmxlIGZvciBkb3dubG9hZGluZyBzb2xlbHkgZm9yIHVzZSBieSBlbmQgdXNlcnMKK2FjY29yZGluZyB0byB0aGUgTGljZW5zZSBBZ3JlZW1lbnQuIEFueSByZXByb2R1Y3Rpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhlCitTb2Z0d2FyZSBub3QgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBMaWNlbnNlIEFncmVlbWVudCBpcyBleHByZXNzbHkgcHJvaGliaXRlZCBieQorbGF3IGFuZCBtYXkgcmVzdWx0IGluIHNldmVyZSBjaXZpbCBhbmQgY3JpbWluYWwgcGVuYWx0aWVzLiBWaW9sYXRvcnMgd2lsbCBiZQorcHJvc2VjdXRlZCB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGUuCisKK1dJVEhPVVQgTElNSVRJTkcgVEhFIEZPUkVHT0lORywgQ09QWUlORyBPUiBSRVBST0RVQ1RJT04gT0YgVEhFIFNPRlRXQVJFIFRPIEFOWQorT1RIRVIgU0VSVkVSIE9SIExPQ0FUSU9OIEZPUiBGVVJUSEVSIFJFUFJPRFVDVElPTiBPUiBSRURJU1RSSUJVVElPTiBJUyBFWFBSRVNTTFkKK1BST0hJQklURUQsIFVOTEVTUyBTVUNIIFJFUFJPRFVDVElPTiBPUiBSRURJU1RSSUJVVElPTiBJUyBFWFBSRVNTTFkgUEVSTUlUVEVEIEJZCitUSEUgTElDRU5TRSBBR1JFRU1FTlQgQUNDT01QQU5ZSU5HIFNVQ0ggU09GVFdBUkUuCisKK1RIRSBTT0ZUV0FSRSBJUyBXQVJSQU5URUQsIElGIEFUIEFMTCwgT05MWSBBQ0NPUkRJTkcgVE8gVEhFIFRFUk1TIE9GIFRIRSBMSUNFTlNFCitBR1JFRU1FTlQuIEVYQ0VQVCBBUyBXQVJSQU5URUQgSU4gVEhFIExJQ0VOU0UgQUdSRUVNRU5ULCBMU0kgQ09SUE9SQVRJT04gSEVSRUJZCitESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgQU5EIENPTkRJVElPTlMgV0lUSCBSRUdBUkQgVE8gVEhFIFNPRlRXQVJFLCBJTkNMVURJTkcKK0FMTCBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBCitQQVJUSUNVTEFSIFBVUlBPU0UsIFRJVExFIEFORCBOT04tSU5GUklOR0VNRU5ULgorCitGT1IgWU9VUiBDT05WRU5JRU5DRSwgTFNJIENPUlBPUkFUSU9OIE1BWSBNQUtFIEFWQUlMQUJMRSBPTiBUSElTIFNFUlZJQ0UgT1IgSU4KK0lUUyBTT0ZUV0FSRSBQUk9EVUNUUywgVE9PTFMgQU5EIFVUSUxJVElFUyBGT1IgVVNFIEFORC9PUiBET1dOTE9BRC4gTFNJCitDT1JQT1JBVElPTiBET0VTIE5PVCBNQUtFIEFOWSBBU1NVUkFOQ0VTIFdJVEggUkVHQVJEIFRPIFRIRSBBQ0NVUkFDWSBPRiBUSEUKK1JFU1VMVFMgT1IgT1VUUFVUIFRIQVQgREVSSVZFUyBGUk9NIFNVQ0ggVVNFIE9GIEFOWSBTVUNIIFRPT0xTIEFORCBVVElMSVRJRVMuCitQTEVBU0UgUkVTUEVDVCBUSEUgSU5URUxMRUNUVUFMIFBST1BFUlRZIFJJR0hUUyBPRiBPVEhFUlMgV0hFTiBVU0lORyBUSEUgVE9PTFMKK0FORCBVVElMSVRJRVMgTUFERSBBVkFJTEFCTEUgT04gVEhJUyBTRVJWSUNFIE9SIElOIExTSSBDT1JQT1JBVElPTiBTT0ZUV0FSRQorUFJPRFVDVFMuCisKK1JFU1RSSUNURUQgUklHSFRTIExFR0VORC4gQW55IFNvZnR3YXJlIHdoaWNoIGlzIGRvd25sb2FkZWQgZnJvbSB0aGlzIFNlcnZlciBmb3IKK29yIG9uIGJlaGFsZiBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLCBpdHMgYWdlbmNpZXMgYW5kL29yCitpbnN0cnVtZW50YWxpdGllcyAoIlUuUy4gR292ZXJubWVudCIpLCBpcyBwcm92aWRlZCB3aXRoIFJlc3RyaWN0ZWQgUmlnaHRzLiBVc2UsCitkdXBsaWNhdGlvbiwgb3IgZGlzY2xvc3VyZSBieSB0aGUgVS5TLiBHb3Zlcm5tZW50IGlzIHN1YmplY3QgdG8gcmVzdHJpY3Rpb25zIGFzCitzZXQgZm9ydGggaW4gc3VicGFyYWdyYXBoIChjKSgxKShpaSkgb2YgdGhlIFJpZ2h0cyBpbiBUZWNobmljYWwgRGF0YSBhbmQKK0NvbXB1dGVyIFNvZnR3YXJlIGNsYXVzZSBhdCBERkFSUyAyNTIuMjI3LTcwMTMgb3Igc3VicGFyYWdyYXBocyAoYykoMSkgYW5kICgyKQorb2YgdGhlIENvbW1lcmNpYWwgQ29tcHV0ZXIgU29mdHdhcmUgLSBSZXN0cmljdGVkIFJpZ2h0cyBhdCA0OCBDRlIgNTIuMjI3LTE5LCBhcworYXBwbGljYWJsZS4gTWFudWZhY3R1cmVyIGlzIExTSSBDT1JQT1JBVElPTiwtLS0tIDE2MjEgQmFyYmVyIExhbmUsIE1pbHBpdGFzLCBDQQorOTUwMzUuCisKK05PVElDRSBTUEVDSUZJQyBUTyBET0NVTUVOVFMgQVZBSUxBQkxFIE9OIFRISVMgV0VCU0lURS4KK1Blcm1pc3Npb24gdG8gdXNlIERvY3VtZW50cyAoc3VjaCBhcyB3aGl0ZSBwYXBlcnMsIHByZXNzIHJlbGVhc2VzLCBkYXRhc2hlZXRzCithbmQgRkFRcykgZnJvbSB0aGlzIHNlcnZlciAoIlNlcnZlciIpIGlzIGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgKDEpIHRoZSBiZWxvdworY29weXJpZ2h0IG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQKK3RoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyLCAoMikgdXNlIG9mIHN1Y2ggRG9jdW1lbnRzIGZyb20gdGhpcyBTZXJ2ZXIgaXMgZm9yCitpbmZvcm1hdGlvbmFsIGFuZCBub24tY29tbWVyY2lhbCBvciBwZXJzb25hbCB1c2Ugb25seSBhbmQgd2lsbCBub3QgYmUgY29waWVkIG9yCitwb3N0ZWQgb24gYW55IG5ldHdvcmsgY29tcHV0ZXIgb3IgYnJvYWRjYXN0IGluIGFueSBtZWRpYSBhbmQgKDMpIG5vCittb2RpZmljYXRpb25zIG9mIGFueSBEb2N1bWVudHMgYXJlIG1hZGUuIEVkdWNhdGlvbmFsIGluc3RpdHV0aW9ucyAoIHNwZWNpZmljYWxseQorSy0xMiwgdW5pdmVyc2l0aWVzIGFuZCBzdGF0ZSBjb21tdW5pdHkgY29sbGVnZXMpIG1heSBkb3dubG9hZCBhbmQgcmVwcm9kdWNlIHRoZQorRG9jdW1lbnRzIGZvciBkaXN0cmlidXRpb24gaW4gdGhlIGNsYXNzcm9vbS4gRGlzdHJpYnV0aW9uIG91dHNpZGUgdGhlIGNsYXNzcm9vbQorcmVxdWlyZXMgZXhwcmVzcyB3cml0dGVuIHBlcm1pc3Npb24uIFVzZSBmb3IgYW55IG90aGVyIHB1cnBvc2UgaXMgZXhwcmVzc2x5Citwcm9oaWJpdGVkIGJ5IGxhdyBhbmQgbWF5IHJlc3VsdCBpbiBzZXZlcmUgY2l2aWwgYW5kIGNyaW1pbmFsIHBlbmFsdGllcy4KK1Zpb2xhdG9ycyB3aWxsIGJlIHByb3NlY3V0ZWQgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlLgorCitEb2N1bWVudHMgc3BlY2lmaWVkIGFib3ZlIGRvIG5vdCBpbmNsdWRlIHRoZSBkZXNpZ24gb3IgbGF5b3V0IG9mIHRoZQorbHNpbG9naWMuY29tIHdlYnNpdGUgb3IgYW55IG90aGVyIExTSSBDT1JQT1JBVElPTiBvd25lZCwgb3BlcmF0ZWQsIGxpY2Vuc2VkIG9yCitjb250cm9sbGVkIHNpdGUuIEVsZW1lbnRzIG9mIExTSSBDT1JQT1JBVElPTiB3ZWJzaXRlcyBhcmUgcHJvdGVjdGVkIGJ5IHRyYWRlCitkcmVzcywgdHJhZGVtYXJrLCB1bmZhaXIgY29tcGV0aXRpb24gYW5kIG90aGVyIGxhd3MgYW5kIG1heSBub3QgYmUgY29waWVkIG9yCitpbWl0YXRlZCBpbiB3aG9sZSBvciBpbiBwYXJ0LiBObyBsb2dvLCBncmFwaGljLCBzb3VuZCBvciBpbWFnZSBmcm9tIGFueSBMU0kKK0NPUlBPUkFUSU9OIHdlYnNpdGUgbWF5IGJlIGNvcGllZCBvciByZXRyYW5zbWl0dGVkIHVubGVzcyBleHByZXNzbHkgcGVybWl0dGVkIGJ5CitMU0kgQ09SUE9SQVRJT04uCisKK0xTSSBDT1JQT1JBVElPTiBBTkQvT1IgSVRTIFJFU1BFQ1RJVkUgU1VQUExJRVJTIE1BS0UgTk8gUkVQUkVTRU5UQVRJT05TIEFCT1VUCitUSEUgU1VJVEFCSUxJVFkgT0YgVEhFIElORk9STUFUSU9OIENPTlRBSU5FRCBJTiBUSEUgRE9DVU1FTlRTIEFORCBSRUxBVEVECitHUkFQSElDUyBQVUJMSVNIRUQgT04gVEhJUyBTRVJWRVIgRk9SIEFOWSBQVVJQT1NFLiBBTEwgU1VDSCBET0NVTUVOVFMgQU5ECitSRUxBVEVEIEdSQVBISUNTIEFSRSBQUk9WSURFRCAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQuIExTSQorQ09SUE9SQVRJT04gQU5EL09SIElUUyBSRVNQRUNUSVZFIFNVUFBMSUVSUyBIRVJFQlkgRElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMgQU5ECitDT05ESVRJT05TIFdJVEggUkVHQVJEIFRPIFRISVMgSU5GT1JNQVRJT04sIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIEFORAorQ09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBUSVRMRSBBTkQKK05PTi1JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIExTSSBDT1JQT1JBVElPTiBBTkQvT1IgSVRTIFJFU1BFQ1RJVkUKK1NVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZCitEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4KK0NPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIElORk9STUFUSU9OIEFWQUlMQUJMRSBGUk9NIFRISVMKK1NFUlZFUi4KKworVEhFIERPQ1VNRU5UUyBBTkQgUkVMQVRFRCBHUkFQSElDUyBQVUJMSVNIRUQgT04gVEhJUyBTRVJWRVIgQ09VTEQgSU5DTFVERQorVEVDSE5JQ0FMIElOQUNDVVJBQ0lFUyBPUiBUWVBPR1JBUEhJQ0FMIEVSUk9SUy4gQ0hBTkdFUyBBUkUgUEVSSU9ESUNBTExZIEFEREVECitUTyBUSEUgSU5GT1JNQVRJT04gSEVSRUlOLiBMU0kgQ09SUE9SQVRJT04gQU5EL09SIElUUyBSRVNQRUNUSVZFIFNVUFBMSUVSUyBNQVkKK01BS0UgSU1QUk9WRU1FTlRTIEFORC9PUiBDSEFOR0VTIElOIFRIRSBQUk9EVUNUKFMpIEFORC9PUiBUSEUgUFJPR1JBTShTKQorREVTQ1JJQkVEIEhFUkVJTiBBVCBBTlkgVElNRS4KKworTk9USUNFUyBBTkQgUFJPQ0VEVVJFIEZPUiBNQUtJTkcgQ0xBSU1TIE9GIENPUFlSSUdIVCBJTkZSSU5HRU1FTlQuCitQdXJzdWFudCB0byBUaXRsZSAxNywgVW5pdGVkIFN0YXRlcyBDb2RlLCBTZWN0aW9uIDUxMihjKSgyKSwgbm90aWZpY2F0aW9ucyBvZgorY2xhaW1lZCBjb3B5cmlnaHQgaW5mcmluZ2VtZW50IHNob3VsZCBiZSBzZW50IHRvIFNlcnZpY2UgUHJvdmlkZXIncyBEZXNpZ25hdGVkCitBZ2VudC4gQUxMIElOUVVJUklFUyBOT1QgUkVMRVZBTlQgVE8gVEhFIEZPTExPV0lORyBQUk9DRURVUkUgV0lMTCBOT1QgUkVDRUlWRSBBCitSRVNQT05TRS4KK1NlZSBOb3RpY2UgYW5kIFByb2NlZHVyZSBmb3IgTWFraW5nIENsYWltcyBvZiBDb3B5cmlnaHQgSW5mcmluZ2VtZW50LgorCitMSU5LUyBUTyBUSElSRCBQQVJUWSBTSVRFUy4KK1RIRSBMSU5LUyBJTiBUSElTIEFSRUEgV0lMTCBMRVQgWU9VIExFQVZFIExTSSBDT1JQT1JBVElPTidTIFNJVEUuIFRIRSBMSU5LRUQKK1NJVEVTIEFSRSBOT1QgVU5ERVIgVEhFIENPTlRST0wgT0YgTFNJIENPUlBPUkFUSU9OIEFORCBMU0kgQ09SUE9SQVRJT04gSVMgTk9UCitSRVNQT05TSUJMRSBGT1IgVEhFIENPTlRFTlRTIE9GIEFOWSBMSU5LRUQgU0lURSBPUiBBTlkgTElOSyBDT05UQUlORUQgSU4gQQorTElOS0VEIFNJVEUsIE9SIEFOWSBDSEFOR0VTIE9SIFVQREFURVMgVE8gU1VDSCBTSVRFUy4gTFNJIENPUlBPUkFUSU9OIElTIE5PVAorUkVTUE9OU0lCTEUgRk9SIFdFQkNBU1RJTkcgT1IgQU5ZIE9USEVSIEZPUk0gT0YgVFJBTlNNSVNTSU9OIFJFQ0VJVkVEIEZST00gQU5ZCitMSU5LRUQgU0lURS4gTFNJIENPUlBPUkFUSU9OIElTIFBST1ZJRElORyBUSEVTRSBMSU5LUyBUTyBZT1UgT05MWSBBUyBBCitDT05WRU5JRU5DRSwgQU5EIFRIRSBJTkNMVVNJT04gT0YgQU5ZIExJTksgRE9FUyBOT1QgSU1QTFkgRU5ET1JTRU1FTlQgQlkgTFNJCitDT1JQT1JBVElPTiBPRiBUSEUgU0lURS4KKworVU5TT0xJQ0lURUQgSURFQSBTVUJNSVNTSU9OIFBPTElDWS4KK05laXRoZXIgTFNJIExvZ2ljIENvcnBvcmF0aW9uLCBub3IgaXRzIGVtcGxveWVlcywgYWdlbnRzIGFuZC9vciBzdWJzaWRpYXJpZXMsCitzaGFsbCBhY2NlcHQgb3IgY29uc2lkZXIgdW5zb2xpY2l0ZWQgaWRlYXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gaWRlYXMKK2ZvciBuZXcgYWR2ZXJ0aXNpbmcgY2FtcGFpZ25zLCBuZXcgcHJvbW90aW9ucywgbmV3IHByb2R1Y3RzIG9yIHRlY2hub2xvZ2llcywKK3Byb2Nlc3NlcywgbWF0ZXJpYWxzLCBtYXJrZXRpbmcgcGxhbnMgb3IgbmV3IHByb2R1Y3QgbmFtZXMuICBTdWJtaXNzaW9uIG9mIGFueQorb3JpZ2luYWwgY3JlYXRpdmUgYXJ0d29yaywgc2FtcGxlcywgZGVtb3MsIG9yIG90aGVyIHdvcmtzIHRvIExTSSBMb2dpYworQ29ycG9yYXRpb24gaXMgZXhwcmVzc2x5IHByb2hpYml0ZWQuICBJbiB0aGUgZXZlbnQgYSBzdWJtaXNzaW9uIGluY2x1ZGluZwordW5zb2xpY2l0ZWQgbWF0ZXJpYWxzIG9mIGFueSBuYXR1cmUgaXMgcmVjZWl2ZWQgYnkgTFNJIENPUlBPUkFUSU9OLCBzYWlkCitzdWJtaXNzaW9uIHNoYWxsIGJlIGRlc3Ryb3llZCBhbmQgTFNJIENPUlBPUkFUSU9OIHNoYWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueQorZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBzdWZmZXJlZCBieSB0aGUgc2VuZGVyLCBub3Igc2hhbGwgTFNJCitDT1JQT1JBVElPTiBiZSB1bmRlciBhbnkgb2JsaWdhdGlvbiB0byB0cmVhdCBzdWNoIG1hdGVyaWFsIGFzIGNvbmZpZGVudGlhbCBvcgorcHJvcHJpZXRhcnkuICBJdCBpcyBleHByZXNzbHkgdW5kZXJzdG9vZCB0aGF0IHRoZSByYXRpb25hbGUgZm9yIExTSSBMb2dpYydzCitwb2xpY3kgb24gdW5zb2xpY2l0ZWQgaWRlYSBzdWJtaXNzaW9uIGlzIHRvIHByZXZlbnQgYSB0aGlyZCBwYXJ0eSBmcm9tIG1ha2luZyBhCitjbGFpbSBvZiBpbmZyaW5nZW1lbnQgYWdhaW5zdCBMU0kgQ09SUE9SQVRJT04gb24gdGhlIGJhc2lzIG9mIGFuIGlkZWEsIHByb2R1Y3QsCitvciBvdGhlciBtYXRlcmlhbCB0aGF0IGlzIGRldmVsb3BlZCBieSBMU0kgQ09SUE9SQVRJT04sIHRoYXQgbWF5IGJlIHNpbWlsYXIgdG8KK29yIHRoZSBzYW1lIGFzIGFuIGlkZWEsIHByb2R1Y3QsIG9yIG90aGVyIG1hdGVyaWFsIGNvbnRhaW5lZCBpbiBhbiB1bnNvbGljaXRlZAorc3VibWlzc2lvbiB0aGF0IG1heSBoYXZlIGJlZW4gc3VibWl0dGVkIHRvIGFuZC9vciByZWNlaXZlZCBieSBMU0kgQ09SUE9SQVRJT04uCisKK0ZFRURCQUNLIEFORCBJTkZPUk1BVElPTi4KK0FOWSBGRUVEQkFDSyBZT1UgUFJPVklERSBBVCBUSElTIFNJVEUgU0hBTEwgQkUgREVFTUVEIFRPIEJFIE5PTi1DT05GSURFTlRJQUwuCitMU0kgQ09SUE9SQVRJT04gSVMgRlJFRSBUTyBVU0UgU1VDSCBJTkZPUk1BVElPTiBPTiBBTiBVTlJFU1RSSUNURUQgQkFTSVMuCisKK0NPUFlSSUdIVCBOT1RJQ0UuIENvcHlyaWdodCDCqTE5OTYtMjAwOCBMU0kgQ09SUE9SQVRJT04sIEFsbCByaWdodHMgcmVzZXJ2ZWQuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9MaXZlc3RhdGlvbi1FVUxBIGIvbGljZW5zZXMvTGl2ZXN0YXRpb24tRVVMQQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjAyYWZmCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvTGl2ZXN0YXRpb24tRVVMQQpAQCAtMCwwICsxLDQ4NyBAQAorSU1QT1JUQU5UIFBMRUFTRSBSRUFEIENBUkVGVUxMWSBMSVZFU1RBVElPTiBTT0ZUV0FSRSBMSUNFTkNFCisKK1RoaXMgU29mdHdhcmUgTGljZW5jZSAodGhlICJBZ3JlZW1lbnQiKSBpcyBhIGxlZ2FsIGFncmVlbWVudCBiZXR3ZWVuIHlvdSBhbmQKK0xpdmVzdGF0aW9uIExpbWl0ZWQsICBhIGNvbXBhbnkgaW5jb3Jwb3JhdGVkICBpbiBFbmdsYW5kIGFuZCAgV2FsZXMgKENvbXBhbnkKK05vOiA2ODcyNzc1KSAgaGF2aW5nIGl0cyByZWdpc3RlcmVkIG9mZmljZSAgYXQgMzIgU3QgSmFtZXMncyAgU3RyZWV0LCBMb25kb24KK1NXMUEgMUhEICAocmVmZXJyZWQgdG8gIGluIHRoaXMgQWdyZWVtZW50ICBhcyBMaXZlc3RhdGlvbiwgV2UgIG9yIFVzICBhcyB0aGUKK2NvbnRleHQgIHBlcm1pdHMpICBncmFudGluZyB5b3UgIGxpbWl0ZWQgIHJpZ2h0cyAgdG8gIGRvd25sb2FkIGFuZCAgdXNlICBvdXIKK3NvZnR3YXJlLCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudC4KKworQUxMICBQRVJTT05BTCAgSU5GT1JNQVRJT04gIE9CVEFJTkVEICBGUk9NICAgWU9VICBCWSAgVVMgIFJFTEFUSU5HICBUTyAgVEhJUworQUdSRUVNRU5UIEFORCAgVEhFIFNPRlRXQVJFICBJUyBTVUJKRUNUICBUTyBPVVIgIFBSSVZBQ1kgUE9MSUNZLCAgTE9DQVRFRCBBVAorV1dXLkxJVkVTVEFUSU9OLkNPTS9QUklWQUNZLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIEFOWSBPRiBUSEUgVEVSTVMgT0YgVEhJUworQUdSRUVNRU5ULCBZT1UgU0hPVUxEIE5PVCBET1dOTE9BRCBPUiBVU0UgVEhFIFNPRlRXQVJFOgorCitUSEUgUEFSVElFUyBBR1JFRSBBUyBGT0xMT1dTOgorCisxLiBTb2Z0d2FyZSBMaWNlbmNlCisKK1dlICBncmFudCB5b3UgIGEgIHBlcnNvbmFsLCAgbm9uLWV4Y2x1c2l2ZSwgcm95YWx0eS1mcmVlLCAgbm9uLXRyYW5zZmVyYWJsZSwKK3Jldm9jYWJsZSBsaWNlbmNlIGR1cmluZyB0aGUgVGVybSB0byBkb3dubG9hZCBhbmQgdXNlIHRoZSBMaXZlc3RhdGlvbiBQbGF5ZXIKKyh0aGUgIlNvZnR3YXJlIikgd2l0aG91dCB0aGUgcmlnaHQgdG8gc3ViLWxpY2VuY2Ugc3VjaCByaWdodHMsIHNvbGVseSBvbiB0aGUKK3Rlcm1zIGFuZCBzdWJqZWN0IHRvIHRoZSBjb25kaXRpb25zICBvZiB0aGlzIEFncmVlbWVudC4gVGhlICJUZXJtIiBtZWFucyB0aGUKK3BlcmlvZCBmcm9tIHRoZSBkYXRlIHRoYXQgeW91IGRvd25sb2FkICB0aGUgU29mdHdhcmUgdW50aWwgdGhlIGRhdGUgeW91IHN0b3AKK3VzaW5nIHRoZSBTb2Z0d2FyZS4KKworMi4gUmVnaXN0ZXJlZCBhbmQgTGljZW5zZWQgVXNlcnMKKworMi4xIEluIG9yZGVyIGZvciB5b3UgdXNlIHRoZSBTb2Z0d2FyZSwgeW91IG11c3QgcmVnaXN0ZXIgd2l0aCB1cyBhbmQgcHJvdmlkZQordXMgIHdpdGggIGFuIGVtYWlsICBhZGRyZXNzICBhbmQgIG9idGFpbiAgYSAgdW5pcXVlIHBhc3N3b3JkICBmb3IgIGFjY2Vzc2luZworYW5kICB1c2luZyB0aGUgIFNvZnR3YXJlICAodGhlICAiUGFzc3dvcmQiKS4gSXQgIGlzICB5b3VyIHJlc3BvbnNpYmlsaXR5ICB0bworZW5zdXJlIHRoYXQgIHlvdSBrZWVwICB5b3VyIFBhc3N3b3JkICBhbmQgb3RoZXIgIGFjY291bnQgZGV0YWlscyAgc2VjdXJlIGFuZAorY29uZmlkZW50aWFsLiBUaGV5IG11c3Qgbm90IGJlIGRpc2Nsb3NlZCB0byBvciB1c2VkIGJ5IGFueSBvdGhlciBwZXJzb24uIFlvdQorYXJlIHJlc3BvbnNpYmxlIGFuZCB3aG9sbHkgbGlhYmxlIGZvciBhbGwgYWN0cyBvciBvbWlzc2lvbnMgY29tbWl0dGVkIGJ5IGFueQorb3RoZXIgcGVyc29uIHdobyBhY2Nlc3NlcyBhbmQgLyBvciAgdXNlcyB0aGUgU29mdHdhcmUgdGhyb3VnaCBvciBieSBtZWFucyBvZgoreW91ciBhY2NvdW50IG9yIFBhc3N3b3JkLgorCisyLjIgIExpdmVzdGF0aW9uICBkZWxpdmVycyBsaXZlICB0ZWxldmlzaW9uICBhbmQgIHJhZGlvIGJyb2FkY2FzdCAgcHJvZ3JhbW1lCitzZXJ2aWNlcy4gIFJlY2VwdGlvbiBvZiAgdGhlc2Ugc2VydmljZXMgIG1heSByZXF1aXJlICBhIHRlbGV2aXNpb24gIG9yIHJhZGlvCitsaWNlbmNlIGluIHNvbWUgY291bnRyaWVzLiBZb3Ugc2hvdWxkIGVuc3VyZSB0aGF0IHlvdXIgdXNlIG9mIExpdmVzdGF0aW9uIGlzCitjb3ZlcmVkIGJ5IHN1Y2ggYSBsaWNlbmNlIHdoZXJlIHJlcXVpcmVkLgorCisyLjMgTGl2ZXN0YXRpb24gYWxzbyBkZWxpdmVycyBkZXNrdG9wIGFsZXJ0cyAgYW5kIG1lc3NhZ2VzIGZyb20gdGltZSB0byB0aW1lCit0byB5b3VyIGRlc2t0b3AgYnkgcmVjZWlwdCBvZiBtZXNzYWdlcyB0aHJvdWdoIHlvdXIgaW50ZXJuZXQgY29ubmVjdGlvbi4gWW91Cit3aWxsIG5lZWQgdG8gIGtlZXAgeW91ciBjb21wdXRlciBjb25uZWN0ZWQgdG8gdGhlICBJbnRlcm5ldCB0byByZWNlaXZlIHRoZXNlCittZXNzYWdlcy4KKworMy4gVGhlIFVzZXIncyBPYmxpZ2F0aW9ucworCiszLjEgWW91IHNoYWxsOgorCisoYSkgb25seSAgdXNlIHRoZSBTb2Z0d2FyZSAgaW4gdGhlIG1hbm5lciwgIGFuZCBmb3IgdGhlICBwdXJwb3NlcywgZXhwcmVzc2x5CitzcGVjaWZpZWQgaW4gdGhpcyBBZ3JlZW1lbnQ7CisKKyhiKSAgZXhjZXB0IGFzICBleHByZXNzbHkgcHJvdmlkZWQgIGluIHRoaXMgIEFncmVlbWVudCwgbm90ICB1c2UsIHJlcHJvZHVjZSwKK2Rpc3Bvc2Ugb2YsIGRlYWwgIHdpdGgsIHJlbnQsIGxlYXNlLCBsb2FuLCBtb2RpZnksICBhZGFwdCwgcmV2ZXJzZSBlbmdpbmVlciwKK2RlY29tcGlsZSBvciBkaXNhc3NlbWJsZSB0aGUgd2hvbGUgb3IgYW55IHBhcnQgb2YgdGhlIFNvZnR3YXJlOworCisoYykgZXhjZXB0ICBhcyBleHByZXNzbHkgIHByb3ZpZGVkIGluIHRoaXMgIEFncmVlbWVudCwgbm90ICBjb3B5LCByZXByb2R1Y2UsCityZXB1Ymxpc2gsICB1cGxvYWQsICBwb3N0LCB0cmFuc21pdCwgIG9yICBkaXN0cmlidXRlICB0aGUgU29mdHdhcmUsICBvciAgYW55Citwb3J0aW9uIHRoZXJlb2YsIG9yIGZhY2lsaXRhdGUgb3IgcGVybWl0IGFueSB0aGlyZCBwYXJ0eSB0byBkbyBzbzsKKworKGQpIG5vdCAgaW5jb3Jwb3JhdGUgb3IgYWxsb3cgdGhlICBTb2Z0d2FyZSB0byBiZSBpbmNvcnBvcmF0ZWQgIGluIGFueSBvdGhlcgorc29mdHdhcmU7CisKKyhlKSBub3QgYXR0ZW1wdCB0byBhY2Nlc3MgYW55IHN5c3RlbXMsIHByb2dyYW1zIG9yIGRhdGEgb2Ygb3VycyB0aGF0IGFyZSBub3QKK2xpY2Vuc2VkIHVuZGVyIHRoaXMgQWdyZWVtZW50OworCisoZikgbm90IHVzZSBhbnkgZGV2aWNlIG9yIHNvZnR3YXJlIHRvIGludGVyZmVyZSBvciBhdHRlbXB0IHRvIGludGVyZmVyZSB3aXRoCit0aGUgcHJvcGVyIG9wZXJhdGlvbiBvZiB0aGUgU29mdHdhcmU7CisKKyhnKSBrZWVwIGNvbmZpZGVudGlhbCBhbmQgbm90IGRpc2Nsb3NlIChvciBtYWtlIGF2YWlsYWJsZSBhbnkgaW5mb3JtYXRpb24gb24KK29yICByZWxhdGluZyB0bykgIHRoZSAgZXhpc3RlbmNlLCBmZWF0dXJlcywgIGZ1bmN0aW9uYWxpdHksIGNhcGFiaWxpdGllcyAgb3IKK2NvbnRlbnRzIG9mICB0aGUgU29mdHdhcmUgb3IgIHlvdXIgY29uY2x1c2lvbnMsIG9waW5pb25zLCBmaW5kaW5ncyAgb3Igb3RoZXIKK2luZm9ybWF0aW9uIHJlZ2FyZGluZyAgdGhlIFNvZnR3YXJlIG9yICB5b3VyIGV2YWx1YXRpb24gb2YgdGhlICBTb2Z0d2FyZSwgb3IKK3RoZSAgY29udGVudHMgb2YgIHRoaXMgIEFncmVlbWVudCAoc3VjaCAgY29uZmlkZW50aWFsaXR5IGFuZCAgbm9uLWRpc2Nsb3N1cmUKK29ibGlnYXRpb25zIHRvICBzdXJ2aXZlIHRoZSAgdGVybWluYXRpb24gb2YgIHRoaXMgQWdyZWVtZW50KSwgIHByb3ZpZGVkIHRoYXQKK3RoaXMgQ2xhdXNlICBzaGFsbCBub3QgZXh0ZW5kICB0byBpbmZvcm1hdGlvbiAgd2hpY2ggd2FzIHJpZ2h0ZnVsbHkgIGluIHlvdXIKK3Bvc3Nlc3Npb24gcHJpb3IgIHRvIHRoZSBuZWdvdGlhdGlvbnMgIGxlYWRpbmcgdG8gdGhpcyBBZ3JlZW1lbnQsICB3aGljaCB3YXMKK2FscmVhZHkgcHVibGljICBrbm93bGVkZ2UgYXQgdGhlIEFjY2VwdGFuY2UgIERhdGUgb3IgYmVjb21lcyBzbyAgYXQgYSBmdXR1cmUKK2RhdGUgKG90aGVyd2lzZSB0aGFuICBhcyBhIHJlc3VsdCBvZiAgYSBicmVhY2ggb2YgdGhpcyBDbGF1c2UpICBvciB3aGljaCB5b3UKK2FyZSBsZWdhbGx5IHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3LCAgcnVsZSwgcmVndWxhdGlvbiBvciBsYXdmdWwgb3JkZXIgb3IKK3J1bGluZyBvZiBhbnkgY291cnQsIGdvdmVybm1lbnQgYWdlbmN5IG9yIHJlZ3VsYXRvcnkgY29tbWlzc2lvbiB0byBkaXNjbG9zZSwKK2luIHdoaWNoIGNhc2UgeW91IGFncmVlIHRoYXQgeW91ICB3aWxsIHByb3ZpZGUgdXMgd2l0aCBwcm9tcHQgbm90aWNlIG9mIHN1Y2gKK3JlcXVpcmVtZW50IHRvIGVuYWJsZSB1cyB0byBzZWVrICBhbiBhcHByb3ByaWF0ZSBwcm90ZWN0aXZlIG9yZGVyIG9yIHRvIHRha2UKK3N0ZXBzIHRvIHByb3RlY3QgdGhlIGNvbmZpZGVudGlhbGl0eSBvZiBvdXIgY29uZmlkZW50aWFsIGluZm9ybWF0aW9uLCBhbmQgaW4KK3RoZSBldmVudCAgc3VjaCBwcm90ZWN0aW9uIGlzIG5vdCAgb2J0YWluZWQgb3Igd2Ugd2FpdmUgIGNvbXBsaWFuY2Ugd2l0aCB0aGUKK3Byb3Zpc2lvbnMgIG9mIHRoaXMgIENsYXVzZSwgIHlvdSBhZ3JlZSAgdGhhdCB5b3UgIHdpbGwgIGRpc2Nsb3NlIG9ubHkgIHRoYXQKK3BvcnRpb24gb2YgIHRoZSBjb25maWRlbnRpYWwgaW5mb3JtYXRpb24gIHdoaWNoIHlvdSBhcmUgbGVnYWxseSAgcmVxdWlyZWQgdG8KK2Rpc2Nsb3NlLiBGb3IgIHRoZSBhdm9pZGFuY2Ugb2YgIGRvdWJ0LCB0aGlzIENsYXVzZSAgc2hhbGwgbm90IGFwcGx5ICB0byBhbnkKK2luZm9ybWF0aW9uICB0aGF0ICB3ZSAgaGF2ZSAgZXhwcmVzc2x5ICBkaXJlY3RlZCB5b3UgIHRvICBkaXNjbG9zZSAgb3IgIG1ha2UKK2F2YWlsYWJsZSB0byB1cyBvciBhbnkgdGhpcmQgcGFydHk7CisKKyhoKSBzYWZlZ3VhcmQgdGhlIFNvZnR3YXJlIGZyb20gYWNjZXNzIGJ5IGFueW9uZSBvdGhlciB0aGFuIHlvdXJzZWxmOyBhbmQKKworKGkpIG5vdCAgZGVsZXRlIG9yIGluIGFueSAgbWFubmVyIGFsdGVyIGFueSBub3RpY2VzLCAgZGlzY2xhaW1lcnMsIGluc2lnbmlhLAorbGV0dGVyaW5nIG9yICBvdGhlciBsZWdlbmRzIGNvbnRhaW5lZCAgaW4gdGhlICBTb2Z0d2FyZSBvciBhcHBlYXJpbmcgIG9uIGFueQorc2NyZWVucywgZG9jdW1lbnRzLCByZXBvcnRzLCBudW1lcmljIHJlc3VsdHMgIG9yIG90aGVyIG1hdGVyaWFscyBvYnRhaW5lZCBieQoreW91IHRocm91Z2ggdXNlIG9mIHRoZSBTb2Z0d2FyZS4KKworMy4yICBOb3R3aXRoc3RhbmRpbmcgIENsYXVzZSAgMy4xKGIpICBhbmQgIHByb3ZpZGVkICB0aGF0ICB0aGUgIEVVICBTb2Z0d2FyZQorRGlyZWN0aXZlIG9yIG90aGVyIGFwcGxpY2FibGUgbGF3IGNvbmZlcnMgb3IgIG1heSBjb25mZXIgb24geW91IGFueSByaWdodCB0bworZGVjb21waWxlIG9yIGRpc2Fzc2VtYmxlICBhbnkgcG9ydGlvbiBvZiB0aGUgU29mdHdhcmUgb3IgIGl0cyBjb21wb25lbnRzIHlvdQorc2hhbGwgbm90IGF0dGVtcHQgb3IgY29tbWVuY2UgIGFueSBzdWNoIGRpc2Fzc2VtYmx5IG9yIGRlY29tcGlsYXRpb24gdW5sZXNzOgorKDEpIHByaW9yIHRvIHN1Y2ggYWN0dWFsIG9yIGF0dGVtcHRlZCBkaXNhc3NlbWJseSBvciBkZWNvbXBpbGF0aW9uLCB5b3UgaGF2ZQorbm90aWZpZWQgdXMgaW4gd3JpdGluZyB0aGF0IHlvdSAgcmVxdWlyZSBzdWNoIGluZm9ybWF0aW9uIGFzIGlzIG5lY2Vzc2FyeSB0bworcGVybWl0IHlvdSB0byAgY3JlYXRlIGFuIGluZGVwZW5kZW50IHByb2dyYW0gd2hpY2ggY2FuICBiZSBvcGVyYXRlZCB3aXRoIGFueQorcG9ydGlvbiBvZiAgdGhlIFNvZnR3YXJlICBvciBpdHMgIGNvbXBvbmVudHMgYW5kIHdlICBoYXZlIG5vdCAgcHJvdmlkZWQgc3VjaAoraW5mb3JtYXRpb24gIHdpdGhpbiBvbmUgICgxKSAgbW9udGggb2YgIHlvdXIgd3JpdHRlbiAgcmVxdWVzdCwgIGFuZCAoMikgIHRoZQoraW5mb3JtYXRpb24gc28gb2J0YWluZWQgaXMgbm90IHVzZWQgZm9yIGFueSBvdGhlciBwdXJwb3NlLgorCiszLjMgWW91ICBzaGFsbCBub3QgY29weSAgb3IgcmVwcm9kdWNlIHRoZSAgU29mdHdhcmUgb3RoZXIgdGhhbiAgYXMgZXhwcmVzc2x5CitwZXJtaXR0ZWQgZWxzZXdoZXJlIGluIHRoaXMgQWdyZWVtZW50LCBleGNlcHQgdGhhdCB5b3UgbWF5IG1ha2Ugb25lIGNvcHkgZm9yCitiYWNrdXAgIGFuZCAgc2VjdXJpdHkgIHB1cnBvc2VzLiAgWW91IGhlcmVieSAgYWNrbm93bGVkZ2UgIHRoYXQgIGFsbCAgY29waWVzCisod2hldGhlciBjb21wbGV0ZSAgY29waWVzIG9yIHBhcnRpYWwgIGNvcGllcykgbWFkZSAgb2YgdGhlIFNvZnR3YXJlICBhcmUgb3VyCitwcm9wZXJ0eS4KKworNC4gVXNlciBSZXByZXNlbnRhdGlvbnMgYW5kIFdhcnJhbnRpZXMKKworNC4xIFlvdSByZXByZXNlbnQgYW5kICB3YXJyYW50IHRvIHVzIHRoYXQgeW91IGhhdmUgIGF1dGhvcml0eSB0byBlbnRlciBpbnRvIAordGhpcyBBZ3JlZW1lbnQuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorCis0LjIgTGl2ZXN0YXRpb24gIGFsbG93cyB1c2VycyAgdG8gY3JlYXRlIGxpbmtzICB0byB0aGlyZC1wYXJ0eSAgc3RyZWFtcy4gVGhlCitzdHJlYW1zJyBjb250ZW50LCBidXNpbmVzcyBwcmFjdGljZXMgYW5kICBwcml2YWN5IHBvbGljaWVzIGFyZSBub3QgdW5kZXIgb3VyCitjb250cm9sLCBhbmQgIHdlIGFyZSBub3QgcmVzcG9uc2libGUgIGZvciB0aGUgY29udGVudCBvZiAgYW55IGxpbmtlZCBzdHJlYW0sCit3ZWJzaXRlIG9yIGFueSAgbGluayBjb250YWluZWQgaW4gYSBsaW5rZWQgc3RyZWFtICBvciB3ZWJzaXRlLiBUaGUgaW5jbHVzaW9uCitvZiBhIGxpbmsgIGJ5IExpdmVzdGF0aW9uIHlvdSBhZGQgIGRvZXMgbm90IGltcGx5IGFueSBlbmRvcnNlbWVudCAgYnkgb3IgYW55CithZmZpbGlhdGlvbiB3aXRoIExpdmVzdGF0aW9uLiBJbiBhY2Nlc3NpbmcgdGhlIHN0cmVhbXMgb3IgbGlua3Mgb3IgZm9sbG93aW5nCitsaW5rcyB0byB0aGlyZC1wYXJ0eSB3ZWJzaXRlcyBvciBzdHJlYW1zICB5b3UgbWF5IGJlIGV4cG9zZWQgdG8gY29udGVudCB0aGF0Cit5b3UgY29uc2lkZXIgb2ZmZW5zaXZlICBvciBpbmFwcHJvcHJpYXRlLiBZb3UgYWdyZWUgdGhhdCAgeW91ciBvbmx5IHJlY291cnNlCitpcyB0byBzdG9wICB1c2luZyBMaXZlc3RhdGlvbiBvciB0aGUgIHN0cmVhbXMgb3IgbGlua3MuIFlvdSAgbWF5IHJlbW92ZSB5b3VyCitsaW5rIHRvIGEgc3RyZWFtIGF0IGFueSB0aW1lLgorCis0LjMgTGl2ZXN0YXRpb24gIHJlc2VydmVzIHRoZSAgcmlnaHQgdG8gcmVtb3ZlICBvciBtb2RpZnkgIGFueSBpbmZvcm1hdGlvbiwgCitzdHJlYW1zLCBsaW5rcyBvciAgdXNlcidzIGFjY291bnQgYXQgYW55IHRpbWUgd2l0aG91dCAgbm90aWNlLiBJbiB0aGUgZXZlbnQgCitvZiAgY29tcGxhaW50IGZyb20gIGFueSAgdGhpcmQgIHBhcnR5IExpdmVzdGF0aW9uICBtYXkgIGNvbnRhY3QgeW91ICBiZWZvcmUgCityZW1vdmluZyBvciBibG9ja2luZyBhY2Nlc3MgdG8gYW55ICBpbmZvcm1hdGlvbiBidXQgc2hhbGwgbm90IGJlIG9ibGlnZWQgdG8gCitkbyBzby4gIEJlZm9yZSB2aWV3aW5nICBzdHJlYW1zIG9yICBhZGRpbmcgbGlua3MgIG9yIG90aGVyICBpbmZvcm1hdGlvbiB5b3UgCithZ3JlZSB0byBjb25maXJtICB0aGF0IGRvaW5nIHNvIHdpbGwgbm90ICBiZSBpbiBicmVhY2ggb2YgYW55ICBsYXcgb3IgdGhpcmQgCitwYXJ0eSByaWdodHMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKKzQuNCAgWW91ICBhZ3JlZSAgdGhhdCAgd2UgIG1heSAgY29weSwgc2hhcmUsICBzdG9yZSwgIGFtZW5kICBvciAgZGVsZXRlICBhbnkKK2luZm9ybWF0aW9uICB3ZSAgZGVlbSAgIGFwcHJvcHJpYXRlICBpbiAgdGhlICBwcm92aXNpb24gICBhbmQgIG9wZXJhdGlvbiAgb2YKK3RoZSAgTGl2ZXN0YXRpb24gIHNlcnZpY2UuIFRoaXMgIGFiaWxpdHkgIHNoYWxsICBub3QgIHJlZHVjZSBvciAgYW1lbmQgIHlvdXIKK3Jlc3BvbnNpYmlsaXR5IGZvciBlbnN1cmluZyB0aGF0IHVzZSBvZiBhbnkgaW5mb3JtYXRpb24gKGluY2x1ZGluZyBsaW5rcyBhbmQKK3N0cmVhbXMpIHlvdSBwcm92aWRlIGlzIGxlZ2FsLiBZb3UgcmVjb2duaXNlIGFuZCBhZ3JlZSB0aGF0IExpdmVzdGF0aW9uIGRvZXMKK25vdCAgY2hlY2sgIHRoZSBjb250ZW50ICBvZiAgZWFjaCAgbGluayBhbmQgIHlvdSAgcmVwcmVzZW50ICBhbmQgd2FycmFudCAgdG8KK0xpdmVzdGF0aW9uIHRoYXQgIHlvdSBoYXZlIHRoZSByaWdodCAgdG8gZ3JhbnQsIHRvIExpdmVzdGF0aW9uICBhIHBlcnBldHVhbCwKK25vbi1leGNsdXNpdmUsIHRyYW5zZmVyYWJsZSwgIGZ1bGx5IHBhaWQsIHdvcmxkd2lkZSBsaWNlbnNlICAod2l0aCB0aGUgcmlnaHQKK3RvIHN1YmxpY2Vuc2UpIHRvICB1c2UsIGNvcHksIHB1YmxpY2x5IHBlcmZvcm0sICBwdWJsaWNseSBkaXNwbGF5LCByZWZvcm1hdCwKK3RyYW5zbGF0ZSwgZXhjZXJwdCAoaW4gIHdob2xlIG9yIGluIHBhcnQpIGFuZCBkaXN0cmlidXRlICB0aGUgbWF0ZXJpYWwgd2hpY2gKK3lvdSAgYXJlIGxpbmtpbmcgIHRvIGZvciAgYW55IHB1cnBvc2UgIGNvbm5lY3RlZCB3aXRoICBMaXZlc3RhdGlvbiBpbmNsdWRpbmcKK2NvbW1lcmNpYWwsIGFkdmVydGlzaW5nLCBvciBvdGhlcndpc2UuIFlvdSBjYW4gcmVtb3ZlIGEgbGluayBhdCBhbnkgdGltZSwgaWYKK3lvdSBjaG9vc2UgdG8gcmVtb3ZlIHlvdXIgbGluaywgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBhYm92ZSB3aWxsIGF1dG9tYXRpY2FsbHkKK2V4cGlyZS4gWW91IGFncmVlICB0byBob2xkIGhhcm1sZXNzIGFuZCBpbmRlbW5pZnkgTGl2ZXN0YXRpb24gIGluIHJlc3BlY3Qgb2YKK2FueSBjbGFpbSBieSBhbnkgdGhpcmQgcGFydHkgYXJpc2luZyBmcm9tICB5b3VyIHVzZSBvZiBvciBjcmVhdGlvbiBvZiBhIGxpbmsKK3RvIGEgc3RyZWFtIGluIExpdmVzdGF0aW9uLgorCis0LjUgIExpdmVzdGF0aW9uICBtYWtlcyAgbm8gIHdhcnJhbnRpZXMgIHdoYXRzb2V2ZXIgIHJlZ2FyZGluZyAgdGhlICBsaWNlbnNlCithZ3JlZW1lbnRzIHJlcXVpcmVkIGZvciBhY2Nlc3NpbmcsIGFuZCB0aGUgaW5mb3JtYXRpb24gcHJvdmlkZWQgdGhyb3VnaCwgYW55CitzdHJlYW0gb3IgbGluaywgIGFuZCBkaXNjbGFpbXMgYWxsIGxpYWJpbGl0eSBmb3IgIGRhbWFnZXMsIGluY2x1ZGluZyB3aXRob3V0CitsaW1pdGF0aW9uLCAgYW55ICBnZW5lcmFsLCAgc3BlY2lhbCwgaW5jaWRlbnRhbCAgb3IgIGNvbnNlcXVlbnRpYWwgIGRhbWFnZXMsCityZXN1bHRpbmcgZnJvbSAgdGhlaXIgdXNlLiAgTGl2ZXN0YXRpb24gYWxzbyByZXNlcnZlcyAgdGhlIHJpZ2h0ICB0byBjb2xsZWN0CitpbmZvcm1hdGlvbiBhYm91dCBjcmVhdGlvbiBhbmQgdmlld2luZyAgb2YgdXNlciBhZGRlZCBzdHJlYW1zLCBpbmNsdWRpbmcgYnV0Citub3QgbGltaXRlZCB0byBhbm9ueW1vdXMgdXNhZ2UgaW5mb3JtYXRpb24gZm9yIHN0YXRpc3RpY2FsIHB1cnBvc2VzLgorCis1LiBMaWFiaWxpdHkKKworNS4xIEV4Y2VwdCBhcyBvdGhlcndpc2UgZXhwcmVzc2x5IHByb3ZpZGVkIGluIHRoaXMgQWdyZWVtZW50OgorCisoYSkgdGhlIFNvZnR3YXJlIGlzIHByb3ZpZGVkICJhcy1pcyIgYW5kLCB0byB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5CithcHBsaWNhYmxlICBsYXcsIHdlICBkaXNjbGFpbSBhbGwgIGNvbmRpdGlvbnMgIGFuZCB3YXJyYW50aWVzICBvZiBhbnkgIGtpbmQsCitleHByZXNzICAodW5sZXNzICBzZXQgb3V0ICBpbiAgdGhpcyAgQWdyZWVtZW50KSAgb3IgaW1wbGllZCwgIHJlZ2FyZGluZyAgdGhlCitTb2Z0d2FyZSBvciBvdGhlcndpc2UgcmVsYXRpbmcgdG8gdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBjb25kaXRpb25zIGFuZCAvCitvciB3YXJyYW50aWVzICBvZiBmaXRuZXNzICBmb3IgYSAgcGFydGljdWxhciBwdXJwb3NlLCAgc2F0aXNmYWN0b3J5IHF1YWxpdHksCittZXJjaGFudGFiaWxpdHksIG5vbi1pbmZyaW5nZW1lbnQgYW5kIGFjY3VyYWN5OworCisoYikgd2UgZG8gbm90IHdhcnJhbnQgb3IgcmVwcmVzZW50IHRoYXQgdGhlIFNvZnR3YXJlIGlzIG9yIHdpbGwgYmUgYWNjdXJhdGUsCitmcmVlIGZyb20gZGVmZWN0cywgY29tcGxldGUsIHdpdGhvdXQgZXJyb3IsIG9yIGZyZWUgb2YgdmlydXNlcywgd29ybXMsIG90aGVyCitoYXJtZnVsIGNvbXBvbmVudHMsIG9yICBvdGhlciBwcm9ncmFtIGxpbWl0YXRpb25zLCBvciB0aGF0ICBpdCB3aWxsIGZ1bmN0aW9uCitjb3JyZWN0bHkgb3IgYXQgYWxsOworCisoYykgIHlvdSBhc3N1bWUgIHRoZSAgZW50aXJlIGNvc3QgIG9mIGFsbCAgbmVjZXNzYXJ5ICBzZXJ2aWNpbmcsIHJlcGFpciwgIG9yCitjb3JyZWN0aW9uIG9mIHByb2JsZW1zIGNhdXNlZCBieSB2aXJ1c2VzIG9yIG90aGVyIGhhcm1mdWwgY29tcG9uZW50cywgb3IgdGhlCitmYWlsdXJlIG9mIHRoZSBTb2Z0d2FyZSB0byBvcGVyYXRlIG9yIG9wZXJhdGUgY29ycmVjdGx5OworCisoZCkgd2UgIG1ha2Ugbm8gd2FycmFudGllcyBvciAgcmVwcmVzZW50YXRpb25zIGFzIHRvIHRoZSAgYWNjdXJhY3ksIHF1YWxpdHksCityZWxpYWJpbGl0eSwgICBzdWl0YWJpbGl0eSwgIGNvbXBsZXRlbmVzcywgICB0cnV0aGZ1bG5lc3MsICB1c2VmdWxuZXNzLCAgIG9yCitlZmZlY3RpdmVuZXNzIG9mIHRoZSBTb2Z0d2FyZTsgYW5kCisKKyhlKSB1c2Ugb2YgIHRoZSBTb2Z0d2FyZSBpcyBlbnRpcmVseSBhdCAgeW91ciBvd24gcmlzayBhbmQgd2UgIHNoYWxsIGhhdmUgbm8KK2xpYWJpbGl0eSBvciByZXNwb25zaWJpbGl0eSB0byB5b3UgdW5kZXIgb3IgaW4gcmVsYXRpb24gdG8gdGhpcyBBZ3JlZW1lbnQuCisKKzUuMiBZb3Ugc2hhbGwgdXNlIHRoZSBTb2Z0d2FyZSBhdCB5b3VyICBvd24gcmlzayBhbmQgaW4gbm8gZXZlbnQgc2hhbGwgd2UgYmUKK2xpYWJsZSB0byB5b3UgZm9yIGFueSBsb3NzIG9yICBkYW1hZ2Ugb2YgYW55IGtpbmQgKGV4Y2VwdCBwZXJzb25hbCBpbmp1cnkgb3IKK2RlYXRoICByZXN1bHRpbmcgZnJvbSAgb3VyICBuZWdsaWdlbmNlKSAgYXJpc2luZyBmcm9tICB0aGUgIHlvdXIgIHVzZSBvZiAgb3IKK2luYWJpbGl0eSB0byAgdXNlIHRoZSAgU29mdHdhcmUgb3IgIGZyb20gZmF1bHRzIG9yICBkZWZlY3RzIGluICB0aGUgU29mdHdhcmUKK3doZXRoZXIgY2F1c2VkIGJ5IG5lZ2xpZ2VuY2Ugb3Igb3RoZXJ3aXNlLgorCis1LjMgIFRoZSBleHByZXNzICB0ZXJtcyBvZiAgdGhpcyBBZ3JlZW1lbnQgIGFyZSBpbiAgbGlldSBvZiAgYWxsIHdhcnJhbnRpZXMsCitjb25kaXRpb25zLCB1bmRlcnRha2luZ3MsICB0ZXJtcyBhbmQgb2JsaWdhdGlvbnMgaW1wbGllZCAgYnkgc3RhdHV0ZSwgY29tbW9uCitsYXcsIHRyYWRlICB1c2FnZSwgY291cnNlIG9mICBkZWFsaW5nIG9yIG90aGVyd2lzZSAgYWxsIG9mIHdoaWNoICBhcmUgaGVyZWJ5CitleGNsdWRlZCB0byB0aGUgZnVsbGVzdCBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdy4KKworNS40IFlvdSAgYWdyZWUgdG8gZGVmZW5kLCAgaW5kZW1uaWZ5IGFuZCBob2xkICB1cyBoYXJtbGVzcyBmcm9tICBhbnkgbG9zc2VzLAorbGlhYmlsaXRpZXMsIGRhbWFnZXMsIGFjdGlvbnMsIGNsYWltcyBvciAgZXhwZW5zZXMgKGluY2x1ZGluZyBsZWdhbCBmZWVzIGFuZAorY291cnQgIGNvc3RzKSBhcmlzaW5nICBvciByZXN1bHRpbmcgIGZyb20geW91ciAgYnJlYWNoIG9mICBhbnkgdGVybSAgb2YgdGhpcworQWdyZWVtZW50IG9yIGNhdXNlZCAgYnkgeW91ciBhY3RzIG9yICBvbWlzc2lvbnMgb3IgdGhlIGFjdHMgIG9yIG9taXNzaW9ucyBvZgorYW55IG90aGVyIHBlcnNvbiB1c2luZyB5b3VyIFBhc3N3b3JkIG9yIG90aGVyIGFjY291bnQgZGV0YWlscy4KKworNS41ICBOb3RoaW5nICBpbiB0aGlzICBBZ3JlZW1lbnQgIHNoYWxsICBvcGVyYXRlICB0byAgYXZvaWQgb3IgIGV4Y2x1ZGUgIHRoZQorbGlhYmlsaXR5ICBvZiBlaXRoZXIgIHBhcnR5ICBmb3IgIGRlYXRoIG9yICBwZXJzb25hbCAgaW5qdXJ5ICBjYXVzZWQgYnkgIGl0cworbmVnbGlnZW5jZSBvciBmb3IgZnJhdWQuCisKKzUuNiAgU3ViamVjdCB0byAgQ2xhdXNlICA1LjUsIHdpdGhvdXQgIHByZWp1ZGljZSB0byAgYW55ICBwcm92aXNpb24gb2YgIHRoaXMKK0FncmVlbWVudCwgb3VyICBtYXhpbXVtIGFnZ3JlZ2F0ZSBsaWFiaWxpdHkgdG8gIHlvdSB1bmRlciBvciBpbiAgcmVsYXRpb24gdG8KK3RoaXMgQWdyZWVtZW50IG9yIGFueSBtYXR0ZXIgYXJpc2luZyBvdXQgb2YgaXQgc2hhbGwgYmUgNTAwIEdCUC4KKworNi4gVGVybSBhbmQgdGVybWluYXRpb24KKworNi4xIFRoaXMgIEFncmVlbWVudCBhbmQgeW91ciAgcmlnaHQgdG8gdXNlICB0aGUgc29mdHdhcmUgc2hhbGwgIGJlIGVmZmVjdGl2ZQorZnJvbSAgdGhlIEFjY2VwdGFuY2UgIERhdGUgIGFuZCBzaGFsbCAgY29udGludWUgaW4gIGZvcmNlICB1bmxlc3MgYW5kICB1bnRpbAordGVybWluYXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHByb3Zpc2lvbnMgc2V0IG91dCBpbiB0aGlzIENsYXVzZSA2LgorCis2LjIgV2UgbWF5IHRlcm1pbmF0ZSB0aGlzIEFncmVlbWVudCBpbW1lZGlhdGVseSB3aXRob3V0IGxpYWJpbGl0eSBvbiB3cml0dGVuCitub3RpY2UgdG8geW91IGZvciBhbnkgcmVhc29uIHdoYXRzb2V2ZXIuCisKKzYuMyAgV2l0aG91dCBwcmVqdWRpY2UgIHRvICBDbGF1c2UgNi4yICBhYm92ZSwgdGhpcyAgQWdyZWVtZW50ICBtYXkgYWxzbyAgYmUKK3Rlcm1pbmF0ZWQgaW1tZWRpYXRlbHkgIGJ5IGVpdGhlciBwYXJ0eSBvbiAgZ2l2aW5nIG5vdGljZSBpbiB3cml0aW5nICB0byB0aGUKK290aGVyIGlmOgorCisoYSkgdGhlIG90aGVyIHNoYWxsIGhhdmUgYSAgcmVjZWl2ZXIgb3IgYWRtaW5pc3RyYXRpdmUgcmVjZWl2ZXIgYXBwb2ludGVkIG9yCitzaGFsbCBwYXNzIGEgcmVzb2x1dGlvbiBmb3Igd2luZGluZy11cCAgKG90aGVyd2lzZSB0aGFuIGZvciB0aGUgcHVycG9zZSBvZiBhCitib25hIGZpZGUgc2NoZW1lIG9mIHNvbHZlbnQgYW1hbGdhbWF0aW9uIG9yIHJlY29uc3RydWN0aW9uKTsKKworKGIpIGEgY291cnQgb2YgY29tcGV0ZW50IGp1cmlzZGljdGlvbiBzaGFsbCBtYWtlIGFuIG9yZGVyIHRvIHRoYXQgZWZmZWN0OworCisoYykgdGhlIG90aGVyIHBhcnR5IHNoYWxsIGJlY29tZSBzdWJqZWN0IHRvIGFuIGFkbWluaXN0cmF0aW9uIG9yZGVyOworCisoZCkgdGhlICBvdGhlciBwYXJ0eSAgc2hhbGwgZW50ZXIgIGludG8gYW55ICB2b2x1bnRhcnkgYXJyYW5nZW1lbnQgIHdpdGggaXRzCitjcmVkaXRvcnM7CisKKyhlKSB0aGUgb3RoZXIgcGFydHkgIHNoYWxsIGNlYXNlIG9yIHRocmVhdGVuIHRvIGNlYXNlICB0byBjYXJyeSBvbiBidXNpbmVzczsKK29yCisKKyhmKSB0aGUgb3RoZXIgcGFydHkgc2hhbGwgY29tbWl0IGFueSBicmVhY2ggb2YgdGhpcyBBZ3JlZW1lbnQuCisKKzYuNCBBbnkgdGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgbm90IGFmZmVjdCBhbnkgYWNjcnVlZCByaWdodHMgb3IKK2xpYWJpbGl0aWVzIG9mIGVpdGhlciBwYXJ0eSBub3Igc2hhbGwgaXQgYWZmZWN0IHRoZSBjb21pbmcgaW50byBmb3JjZSBvciB0aGUKK2NvbnRpbnVhbmNlIGluIGZvcmNlICBvZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50ICB3aGljaCBpcyBleHByZXNzbHkKK29yIGJ5ICBpbXBsaWNhdGlvbiBpbnRlbmRlZCB0byAgY29tZSBpbnRvIG9yIGNvbnRpbnVlICBpbiBmb3JjZSBvbiAgb3IgYWZ0ZXIKK3N1Y2ggdGVybWluYXRpb24uCisKKzYuNSBPbiB0ZXJtaW5hdGlvbiAgb2YgdGhpcyBBZ3JlZW1lbnQsIHlvdSBtdXN0IGltbWVkaWF0ZWx5ICBjZWFzZSB1c2luZyB0aGUKK1NvZnR3YXJlIGFuZCwgdW5sZXNzIHdlIG90aGVyd2lzZSBhZ3JlZSAgaW4gd3JpdGluZywgeW91IG1heSBub3QgZGlyZWN0bHkgb3IKK2luZGlyZWN0bHkgZG93bmxvYWQsIGFjY2VzcyBvciB1c2UgdGhlICBTb2Z0d2FyZSAob3IgYW55IG90aGVyIHNvZnR3YXJlIG1hZGUKK2F2YWlsYWJsZSBieSB1cykuICBZb3UgbXVzdCBhbHNvIGRlc3Ryb3kgIGFuZCAvIG9yIGRlbGV0ZSBhbGwgIGNvcGllcyBvZiB0aGUKK1NvZnR3YXJlIChhbmQgYW55ICBtYXRlcmlhbHMgcHJvdmlkZWQgaW4gY29ubmVjdGlvbiB3aXRoIGl0ICBieSB1cykuIFdpdGhvdXQKK3ByZWp1ZGljZSB0byB0aGUgZm9yZWdvaW5nLCB3ZSBzaGFsbCBhbHNvIGJlIGVudGl0bGVkIG9uIHRlcm1pbmF0aW9uIG9mIHRoaXMKK0FncmVlbWVudCB0byBkaXNhYmxlIHRoZSBTb2Z0d2FyZSBpZiB5b3UgaGF2ZSBub3QgZGVzdHJveWVkIC8gZGVsZXRlZCBpdC4KKworNi42IFNlY3Rpb25zIDMoZyksIDMoaCksIDUsIDYuNCwgNi41LCA3LCA4LCA5LCAxMywgYW5kIDE0IHNoYWxsIHN1cnZpdmUgdGhpcworQWdyZWVtZW50IG9uIHRlcm1pbmF0aW9uLgorCis3LiBSZXNlcnZhdGlvbiBvZiByaWdodHMKKworNy4xIFdlIHJlc2VydmUgdGhlIHJpZ2h0IHRvOgorCisoYSkgc3VzcGVuZCAgYWNjZXNzIHRvIHRoZSBTb2Z0d2FyZSAgYW5kIHJlcGxhY2UgaXQgd2l0aCAgYW5vdGhlciB2ZXJzaW9uIGF0CithbnkgdGltZSBkdXJpbmcgdGhlIHRlcm0gb2YgdGhpcyBBZ3JlZW1lbnQ7CisKKyhiKSBkaXNhYmxlIHRoZSBTb2Z0d2FyZSBvciByZXF1aXJlIHlvdSB0byBjZWFzZSB1c2luZyBpdCBhdCBhbnkgdGltZTsgYW5kCisKKyhjKSBjaGFyZ2UgeW91IGZvciBhY2Nlc3MgdG8gYW5kIHVzZSBvZiB0aGUgU29mdHdhcmUsIGJ5IGdpdmluZyBubyBsZXNzIHRoYW4KKzcgZGF5cycgbm90aWNlIGluIHdyaXRpbmcuIElmIHdlIGhhdmUgbm90aWZpZWQgeW91IG9mIG91ciBkZWNpc2lvbiB0byBjaGFyZ2UKK2ZvciB1c2UgIG9mIHRoZSAgU29mdHdhcmUgYW5kIHlvdSAgZG8gbm90IHdpc2ggIHRvIHBheSAgZm9yIHlvdXIgdXNlICBvZiB0aGUKK1NvZnR3YXJlLCB5b3UgIG11c3Qgbm90aWZ5IHVzIGFuZCAgY2Vhc2UgYWJzb2x1dGVseSB0byB1c2UgIHRoZSBTb2Z0d2FyZS4gT24KK3RoZSBzZW5kaW5nIG9mIGFueSBzdWNoIG5vdGljZSwgdGhpcyBBZ3JlZW1lbnQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZS4KKworOC4gSW50ZWxsZWN0dWFsIFByb3BlcnR5IFJpZ2h0cworCis4LjEgV2Ugb3Igb3VyIGxpY2Vuc29ycyBvd24gYWxsICByaWdodHMsIHRpdGxlIGFuZCBpbnRlcmVzdHMgaW4gdGhlIFNvZnR3YXJlCitpbmNsdWRpbmcgdHJhZGUgIHNlY3JldHMsIHBhdGVudHMsIGNvcHlyaWdodHMgIGFuZCBkYXRhYmFzZSByaWdodHMsICBhbmQgdGhlCitTb2Z0d2FyZSAgc2hhbGwgIHJlbWFpbiAgdGhlICBzb2xlICBhbmQgZXhjbHVzaXZlICBwcm9wZXJ0eSAgb2YgIHVzICBvciAgb3VyCitsaWNlbnNvcnMuIEV4Y2VwdCBhcyBwcm92aWRlZCBpbiBDbGF1c2UgIDEuMSBvZiB0aGlzIEFncmVlbWVudCwgeW91IGhhdmUgbm8sCithbmQgYXJlIG5vdCBncmFudGVkLCBhbnkgcmlnaHQsIHRpdGxlLCBpbnRlcmVzdCBvciBsaWNlbmNlIGluIHRoZSBTb2Z0d2FyZS4KKworOC4yICBZb3UgIGdyYW50ICB1cyAgYSAgbm9uLWV4Y2x1c2l2ZSwgIHBlcnBldHVhbCwgIGlycmV2b2NhYmxlLCAgd29ybGR3aWRlLAorcm95YWx0eS1mcmVlICBsaWNlbmNlIHdpdGggIHRoZSByaWdodCAgdG8gc3VibGljZW5zZSwgIHVzZSwgY29weSwgIHRyYW5zbWl0LAorZGlzdHJpYnV0ZSwgIGNyZWF0ZSAgZGVyaXZhdGl2ZSAgd29ya3MgIG9mLCBkaXNwbGF5ICBhbmQgIHBlcmZvcm0gIHRoZSAgc2FtZQoraW4gIHJlc3BlY3QgIG9mICBhbnkgIG1hdGVyaWFscyBvciAgb3RoZXIgIGluZm9ybWF0aW9uICAoaW5jbHVkaW5nLCAgd2l0aG91dAorbGltaXRhdGlvbiwgaWRlYXMsIGNvbmNlcHRzICBvciB0ZWNobmlxdWVzIGZvciBuZXcgb3IgIGltcHJvdmVkIHNlcnZpY2VzIGFuZAorcHJvZHVjdHMpICBzdWJtaXR0ZWQgIGJ5IHlvdSAgaW4gIGNvbm5lY3Rpb24gIHdpdGggdGhlICBFdmFsdWF0aW9uICBQcm9jZXNzLAord2hldGhlciBhcyBmZWVkYmFjaywgZGF0YSwgcXVlc3Rpb25zLCBjb21tZW50cywgb3Igc3VnZ2VzdGlvbnMuCisKKzguMyAgTGl2ZXN0YXRpb24gdmlld2VycyAgdXNpbmcgIGFueSBvZiAgTGl2ZXN0YXRpb24ncyBpbnRlcmFjdGl2ZSAgZmVhdHVyZXMKK2FncmVlIHRoYXQgYW55IHN0YXRlbWVudCwgY29tbWVudCBvciBvdGhlciBjb250cmlidXRpb25zIG1hZGUgYnkgTGl2ZXN0YXRpb24KK3VzZXJzICBtYXkgIGJlICByZXB1Ymxpc2hlZCAgYnkgIExpdmVzdGF0aW9uICBhbmQvb3IgIExpdmVzdGF0aW9uJ3MgIHBhcnRuZXIKK2Jyb2FkY2FzdGVycyBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgYmVpbmcgYnJvYWRjYXN0IGxpdmUgb24tYWlyLgorCis4LjQgWW91IGFncmVlIGFuZCB1bmRlcnN0YW5kIHRoYXQgYW55IHdlYnNpdGUgbG9ncywgc2l0ZSBzdGF0aXN0aWNzIG9yIG90aGVyCitkYXRhIGNvbGxlY3RlZCAgYnkgdXMgKHRoZSAiU2l0ZSAgU3RhdGlzdGljcyIpIHNoYWxsIGJlIGFuZCAgcmVtYWluIG91ciBzb2xlCithbmQgZXhjbHVzaXZlIHByb3BlcnR5LgorCis4LjUgVGhpcyAgQWdyZWVtZW50IGRvZXMgbm90ICBncmFudCB5b3UgIGEgbGljZW5jZSB0byAgdXNlIGFueSBvZiAgb3VyIHRyYWRlCittYXJrcywgdHJhZGUgbmFtZXMsIG9yIGxvZ29zLCBhbmQgIHlvdSByZWNvZ25pc2UgdGhhdCBvdXIgdHJhZGUgbWFya3MsIHRyYWRlCituYW1lcyBhbmQgbG9nb3MgYXJlIHZhbHVhYmxlIGFzc2V0cyBvZiBvdXJzIGFuZCB0aGF0IHN1YnN0YW50aWFsIHJlY29nbml0aW9uCithbmQgZ29vZHdpbGwgYXJlIGFzc29jaWF0ZWQgIHdpdGggdGhlbS4gWW91IGFncmVlIHRoYXQgeW91ICBzaGFsbCBub3QgdXNlIG9yCitwZXJtaXQgYW55IHRoaXJkIHBhcnR5IHRvIHVzZSwgYXQgYW55IHRpbWUsIG91ciB0cmFkZSBtYXJrcywgdHJhZGUgbmFtZXMsIG9yCitsb2dvcy4KKworOS4gSGFyZHdhcmUgYW5kIFNlcnZpY2UgUmVxdWlyZW1lbnRzCisKKzkuMSBZb3UgIGFyZSBzb2xlbHkgcmVzcG9uc2libGUgIGZvciBhY3F1aXJpbmcsIHNlcnZpY2luZywgIG1haW50YWluaW5nLCBhbmQKK3VwZGF0aW5nIGFsbCBlcXVpcG1lbnQsIGNvbXB1dGVycywgIHNvZnR3YXJlIGFuZCBjb21tdW5pY2F0aW9ucyBzZXJ2aWNlcyBub3QKK293bmVkIG9yIG9wZXJhdGVkIGJ5ICBvciBvbiBiZWhhbGYgb2YgdXMsIHRvIGVuYWJsZSAgeW91IHRvIGRvd25sb2FkLCBhY2Nlc3MKK2FuZCAgdXNlIHRoZSAgU29mdHdhcmUsICBhbmQgZm9yICBhbGwgZXhwZW5zZXMgIHJlbGF0aW5nICB0aGVyZXRvIChwbHVzICBhbnkKK2FwcGxpY2FibGUgdGF4ZXMpLiAgWW91IGFncmVlIHRvICBkb3dubG9hZCwgYWNjZXNzICBhbmQgdXNlIHRoZSAgU29mdHdhcmUgaW4KK2FjY29yZGFuY2Ugd2l0aCBhbnkgYW5kIGFsbCBvcGVyYXRpbmcgaW5zdHJ1Y3Rpb25zIG9yIHByb2NlZHVyZXMgdGhhdCBtYXkgYmUKK2lzc3VlZCAgYnkgdXMsICBhcyAgYW1lbmRlZCBieSAgdXMgIGZyb20gIHRpbWUgdG8gIHRpbWUuICBZb3UgbXVzdCAgcHJvbXB0bHkKK2ltcGxlbWVudCAgYWxsICB1cGRhdGVzLCAgcGF0Y2hlcyAgYW5kICB1cGdyYWRlcyB0byAgdGhlICBTb2Z0d2FyZSAgYW5kLCAgaWYKK2luc3RydWN0ZWQsICB1bmluc3RhbGwgYW5kICByZXBsYWNlIHRoZSAgU29mdHdhcmUgd2l0aCAgYW55IG5ldyAgdmVyc2lvbnMgb3IKK3JlbGVhc2VzIHRoYXQgd2UgcHJvdmlkZSB0byB5b3UuCisKKzEwLiBQZXJmb3JtYW5jZQorCisxMC4xIFlvdSAgdW5kZXJzdGFuZCBhbmQgYWdyZWUgIHRoYXQgdGhlICBvcGVyYXRpb24gYW5kIGF2YWlsYWJpbGl0eSAgb2YgdGhlCitzeXN0ZW1zIHVzZWQgdG8gIHRyYW5zbWl0IGluZm9ybWF0aW9uIG9yIGZvciBhY2Nlc3NpbmcgIGFuZCBpbnRlcmFjdGluZyB3aXRoCit0aGUgIFNvZnR3YXJlIGluY2x1ZGluZywgIHRoZSBwdWJsaWMgIHRlbGVwaG9uZSwgY29tcHV0ZXIgIG5ldHdvcmtzIGFuZCAgdGhlCitpbnRlcm5ldCwgd2hldGhlciAgb3Igbm90IHN1cHBsaWVkIG9yICBtYWRlIGF2YWlsYWJsZSBieSB1cywgIHlvdSBvciBvdGhlcnMsCitjYW4gYmUgdW5wcmVkaWN0YWJsZSAgYW5kIG1heSwgZnJvbSB0aW1lIHRvIHRpbWUsICBpbnRlcmZlcmUgd2l0aCBvciBwcmV2ZW50Cit0aGUgYWNjZXNzIHRvIGFuZC9vciB0aGUgdXNlIG9yIG9wZXJhdGlvbiBvZiB0aGUgU29mdHdhcmUuIFdlIGFyZSBub3QgaW4gYW55Cit3YXkgcmVzcG9uc2libGUgZm9yIGFueSBzdWNoIGludGVyZmVyZW5jZSAgd2l0aCBvciBwcmV2ZW50aW9uIG9mIHlvdXIgYWNjZXNzCithbmQvb3IgdXNlIG9mIHRoZSBTb2Z0d2FyZS4KKworMTEuIFRyYWluaW5nIGFuZCBTdXBwb3J0CisKKzExLjEgVW5sZXNzIHdlIG90aGVyd2lzZSBhZ3JlZSwgd2UgIHdpbGwgbm90IHByb3ZpZGUgYW55IHRyYWluaW5nIG9yIHN1cHBvcnQKK3RvIHlvdSByZWxhdGluZyB0byB0aGUgU29mdHdhcmUuCisKKzEyLiBOb3RpY2VzCisKKzEyLjEgTm90aWNlcworCitBbGwgcXVlc3Rpb25zIG9yIGNvbW1lbnRzIGNvbmNlcm5pbmcgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgc3VibWl0dGVkIHRvIHVzCitieSB5b3UgdmlhICBlbWFpbCBhdCBzdXBwb3J0QGxpdmVzdGF0aW9uLmNvbS4gQWxsIE5vdGljZXMgdG8gIGJlIGdpdmVuIHVuZGVyCit0aGlzIEFncmVlbWVudCAgYnkgeW91IHNoYWxsICBiZSBzZW50ICB0byB0aGUgc2FtZSAgYWRkcmVzcywgd2l0aCBhICBjb3B5IHRvCitub3RpY2VzQGxpdmVzdGF0aW9uLmNvbS4KKworQWxsIE5vdGljZXMgdG8gYmUgZ2l2ZW4gdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdG8geW91IGJ5IHVzIHNoYWxsIGJlIHN1Ym1pdHRlZAordmlhIGVtYWlsIHRvIHRoZSAgYWRkcmVzcyBub3RpZmllZCB0byB1cyBieSB5b3UgYXMgIHBhcnQgb2YgdGhlIHJlZ2lzdHJhdGlvbgorcHJvY2Vzcywgb3Igc3VjaCAgb3RoZXIgZW1haWwgYWRkcmVzcyBhcyAgeW91IG1heSBjb25maXJtIHRvICB1cyBieSB1cGRhdGluZworeW91ciByZWdpc3RyYXRpb24gZGV0YWlscy4gSXQgaXMgeW91ciByZXNwb25zaWJpbGl0eSB0byBlbnN1cmUgdGhhdCB5b3UgaGF2ZQorcHJvdmlkZWQgdXMgd2l0aCAgY3VycmVudCBhbmQgY29ycmVjdCBlbWFpbCBkZXRhaWxzLiBBbGwgIE5vdGljZXMgc2VudCBieSB1cwordG8gIHRoZSAgZW1haWwgYWRkcmVzcyAgbGFzdCAgcHJvdmlkZWQgIGJ5IHlvdSAgc2hhbGwgIGJlICBkZWVtZWQgdmFsaWQgIGFuZAorZWZmZWN0aXZlIGFuZCB3ZSBzaGFsbCAgbm90IGJlIGxpYWJsZSBvciByZXNwb25zaWJsZSBpZiAgYW55IE5vdGljZSBmYWlscyB0bworcmVhY2ggeW91IGJlY2F1c2UgeW91IGhhdmUgbm90IHByb3ZpZGVkICB1cyB3aXRoIHRoZSBjb3JyZWN0IGRldGFpbHMgb3IgaGF2ZQorZmFpbGVkIHRvIGtlZXAgdGhlbSB1cCB0byBkYXRlLgorCisxMi4yIEFjY2VwdGFuY2UKKworKGEpIEJ5ICBhY2NlcHRpbmcgYmVsb3cgYW5kIHByb3ZpZGluZyAgdXMgd2l0aCB5b3VyIGVtYWlsICBhZGRyZXNzIHlvdSBhZ3JlZQorYW5kIGNvbnNlbnQgdG86IChpKSBjb250cmFjdCBlbGVjdHJvbmljYWxseSAgd2l0aCB1cyBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcworQWdyZWVtZW50OyAgYW5kIChpaSkgIHJlY2VpcHQgIG9mIGVsZWN0cm9uaWMgIGxlZ2FsICBub3RpY2VzIHJlZ2FyZGluZyAgdGhpcworQWdyZWVtZW50IHRvIHRoZSBlbWFpbCBhZGRyZXNzIHlvdSBoYXZlIHByb3ZpZGVkIHRvIHVzLgorCisxMi4zIEFncmVlbWVudCAgUGxlYXNlIHByaW50IGEgY29weSAgb2YgdGhpcyBBZ3JlZW1lbnQgZm9yICB5b3VyIHJlY29yZHMgYW5kCitrZWVwIGl0IHNlY3VyZWx5LgorCisxMy4gR2VuZXJhbCBQcm92aXNpb25zCisKKzEzLjEgU2V2ZXJhYmlsaXR5IGFuZCBXYWl2ZXIKKworSWYgIGFueSAgcHJvdmlzaW9uICBvZiB0aGlzICBBZ3JlZW1lbnQgIGlzICBoZWxkICBieSAgYSBjb3VydCAgb2YgIGNvbXBldGVudAoranVyaXNkaWN0aW9uICBvciAgb3RoZXIgIGNvbXBldGVudCAgYXV0aG9yaXR5IHRvICBiZSAgaW52YWxpZCwgIHVubGF3ZnVsICBvcgordW5lbmZvcmNlYWJsZSAgZm9yIGFueSAgcmVhc29uICB0aGVuICBzdWNoIHBhcnQgIHdpbGwgIGJlICBzZXZlcmVkIGZyb20gIHRoZQorcmVtYWluZGVyIG9mIHRoaXMgQWdyZWVtZW50LCB3aGljaCB3aWxsIGNvbnRpbnVlIHRvIGJlIHZhbGlkIGFuZCBlbmZvcmNlYWJsZQordG8gdGhlICBmdWxsZXN0IGV4dGVudCBwZXJtaXR0ZWQgIGJ5IGxhdy4gVGhlICBwYXJ0aWVzIGFncmVlIHRvICByZXBsYWNlIGFueQoraW52YWxpZCBwcm92aXNpb24gd2l0aCBhIHZhbGlkIHByb3Zpc2lvbiB3aGljaCBtb3N0IGNsb3NlbHkgYXBwcm94aW1hdGVzIHRoZQoraW50ZW50ICBhbmQgZWNvbm9taWMgIGVmZmVjdCBvZiAgdGhlIGludmFsaWQgIHByb3Zpc2lvbi4gSW4gIHRoZSBldmVudCAgb2YgYQoraG9sZGluZyBvZiBpbnZhbGlkaXR5IHNvIGZ1bmRhbWVudGFsIGFzIHRvIHByZXZlbnQgdGhlIGFjY29tcGxpc2htZW50IG9mIHRoZQorcHVycG9zZSBvZiAgdGhlIEFncmVlbWVudCwgIHRoZSBwYXJ0aWVzIHNoYWxsICBwcm9tcHRseSBjb21tZW5jZSAgZ29vZCBmYWl0aAorbmVnb3RpYXRpb25zIHRvIHJlbWVkeSBzdWNoIGludmFsaWRpdHkuIE5vIGRlbGF5IG9uIHRoZSBwYXJ0IG9mIGVpdGhlciBwYXJ0eQoraW4gZXhlcmNpc2luZyAgYW55IHJpZ2h0IG9yIHJlbWVkeSAgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgIG9wZXJhdGUgYXMgYQord2FpdmVyIHRoZXJlb2YgIG5vciBzaGFsbCAgYW55IHNpbmdsZSAgb3IgcGFydGlhbCBleGVyY2lzZSAgb2YgYW55ICByaWdodCBvcgorcmVtZWR5IHVuZGVyIHRoaXMgIEFncmVlbWVudCBwcmVjbHVkZSBhbnkgb3RoZXIgb3IgZnVydGhlciAgZXhlcmNpc2Ugb2Ygc3VjaAorcmlnaHQgb3IgcmVtZWR5LgorCisxMy4yIERlZmluaXRpb25zIGFuZCBIZWFkaW5ncworCitSZWZlcmVuY2VzIHRvOgorCisoYSkgIFRoZSAgIlNvZnR3YXJlIiAgaW5jbHVkZSAgcmVmZXJlbmNlcyAgdG8gIGFsbCAgbW9kaWZpY2F0aW9ucywgIHBhdGNoZXMsCit1cGRhdGVzLCB1cGdyYWRlcywgbmV3IHZlcnNpb25zIGFuZCByZWxlYXNlcyAgb2YgdGhlIFNvZnR3YXJlIHByb3ZpZGVkIGJ5IHVzCit0byAgeW91LCB1bmxlc3MgIHByb3ZpZGVkIHRvICB5b3UgdW5kZXIgIHRoZSB0ZXJtcyAgb2YgYW55ICBzZXBhcmF0ZSBsaWNlbmNlCithZ3JlZW1lbnQgZW50ZXJlZCBpbnRvIGJldHdlZW4gdXMuCisKKyhiKSAiWW91IiBhbmQgInlvdXIiICBhcmUgdG8geW91LCB0aGUgaW5kaXZpZHVhbCB3aG8gIGhhcyBhY2NlcHRlZCB0aGUgdGVybXMKK2FuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50OworCisoYykgIldlIiwgInVzIiBhbmQgIm91ciIgYXJlIHRvIFNraW5rZXJzIExpbWl0ZWQsIGFzIGRlZmluZWQgYWJvdmUsIGFuZCBpdHMuCitwZXJtaXR0ZWQgc3VjY2Vzc29ycyBhbmQgYXNzaWduZWVzIEhlYWRpbmdzICB1c2VkIGluIHRoaXMgQWdyZWVtZW50IGFyZSBmb3IuCityZWZlcmVuY2UgcHVycG9zZXMgb25seSBhbmQgIGRvIG5vdCBkZWZpbmUgb3IgbGltaXQgdGhlICBzY29wZSBvciBleHRlbnQgb2YuCit0aGUgY2xhdXNlcyB0byB3aGljaCB0aGV5IHJlbGF0ZSBvciBpbiBhbnkgd2F5IGFmZmVjdCB0aGlzIEFncmVlbWVudCAgICAgICAuCisKKzEzLjMgQXNzaWdubWVudCBhbmQgU3ViLWNvbnRyYWN0aW5nCisKK1RoaXMgIEFncmVlbWVudCAgYW5kICB5b3VyICByaWdodHMsIGR1dGllcyAgYW5kICBvYmxpZ2F0aW9ucyAgaGVyZXVuZGVyICBhcmUKK3BlcnNvbmFsIHRvIHlvdSBhbmQgeW91IG1heSBub3QgIGFzc2lnbiB5b3VyIHJpZ2h0cywgZGVsZWdhdGUgeW91ciBkdXRpZXMgb3IKK3N1YmNvbnRyYWN0ICB5b3VyIHJpZ2h0cyAgd2l0aG91dCBvdXIgIHByaW9yIHdyaXR0ZW4gIGNvbnNlbnQsIHdoaWNoICB3ZSBtYXkKK3Byb3ZpZGUgb3IgIHdpdGhob2xkIGF0IG91ciBlbnRpcmUgIGRpc2NyZXRpb24uIFdlIG1heSBhc3NpZ24sICB0cmFuc2Zlciwgb3IKK2RlbGVnYXRlIHRoaXMgQWdyZWVtZW50ICBhbmQgLyBvciBhbGwgIG9yIGFueSBvZiBvdXIgIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMKK3VuZGVyIGl0IG9yIGdyYW50IG9yIHN1Yi1jb250cmFjdCBhbGwgIG9yIGFueSBvZiBzdWNoIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMKK3RvIGFueSBwZXJzb24gIG9yIGVudGl0eS4gVGhlIHBhcnRpZXMnIHJpZ2h0cyBhbmQgIG9ibGlnYXRpb25zIHdpbGwgYmluZCBhbmQKK2ludXJlIHRvIHRoZSBiZW5lZml0IG9mIHRoZWlyIHJlc3BlY3RpdmUgc3VjY2Vzc29ycyBhbmQgcGVybWl0dGVkIGFzc2lnbnMuCisKKzEzLjQgSW5kZXBlbmRlbnQgQ29udHJhY3RvcnMKKworVGhlIHBhcnRpZXMgIHRvIHRoaXMgQWdyZWVtZW50ICBhcmUgaW5kZXBlbmRlbnQgY29udHJhY3RvcnMsIGFuZCAgbm8gYWdlbmN5LAorcGFydG5lcnNoaXAsIGpvaW50IHZlbnR1cmUgb3IgIGVtcGxveWVlLWVtcGxveWVyIHJlbGF0aW9uc2hpcCBpcyBpbnRlbmRlZCBvcgorY3JlYXRlZCBieSB0aGlzIEFncmVlbWVudC4gTmVpdGhlciBwYXJ0eSBzaGFsbCBoYXZlIHRoZSBwb3dlciB0byBvYmxpZ2F0ZSBvcgorYmluZCB0aGUgb3RoZXIgcGFydHkuCisKKzEzLjUgRGF0YSBQcm90ZWN0aW9uCisKK0JvdGggcGFydGllcyB3YXJyYW50IHRoYXQgdGhleSB3aWxsIGR1bHkgb2JzZXJ2ZSBhbGwgdGhlaXIgb2JsaWdhdGlvbnMgdW5kZXIKK3RoZSBEYXRhICBQcm90ZWN0aW9uIEFjdCAxOTk4ICAoYXMgYW1lbmRlZCkgIHdoaWNoIGFyaXNlIGluICBjb25uZWN0aW9uIHdpdGgKK3RoaXMgQWdyZWVtZW50LgorCisxMy42IEFtZW5kbWVudHMKKworV2UgcmVzZXJ2ZSB0aGUgIHJpZ2h0LCBhdCBhbnkgdGltZSwgIHRvIGNoYW5nZSB0aGUgdGVybXMgIG9mIHRoaXMgQWdyZWVtZW50LAoraW5jbHVkaW5nIG91ciBwcml2YWN5IHBvbGljeSwgYnkgcHJvdmlkaW5nICB5b3Ugd2l0aCBub3RpY2Ugb2Ygc3VjaCBjaGFuZ2VzLgorQW55IHVzZSBvZiB0aGUgIFNvZnR3YXJlIGJ5IHlvdSBhZnRlciBzdWNoIG5vdGlmaWNhdGlvbiAgb2YgYW55IHN1Y2ggY2hhbmdlcworc2hhbGwgIGNvbnN0aXR1dGUgIHlvdXIgIGFjY2VwdGFuY2UgIG9mICB0aGUgIEFncmVlbWVudCAgYXMgIG1vZGlmaWVkLiAgVGhpcworQWdyZWVtZW50IG1heSBub3QgIG90aGVyd2lzZSBiZSBhbWVuZGVkIGV4Y2VwdCBhcyBhZ3JlZWQgIGJ5IGJvdGggcGFydGllcyBpbgord3JpdGluZy4KKworMTMuNyBFbnRpcmUgQWdyZWVtZW50CisKKyhhKSBFYWNoIHBhcnR5ICBhY2tub3dsZWRnZXMgdGhhdCwgaW4gZW50ZXJpbmcgaW50byB0aGlzICBBZ3JlZW1lbnQsIGl0IGRvZXMKK25vdCAgZG8gc28gIG9uIHRoZSAgYmFzaXMgIG9mLCBhbmQgIGRvZXMgIG5vdCByZWx5ICBvbiwgYW55ICByZXByZXNlbnRhdGlvbiwKK3dhcnJhbnR5IG9yICBvdGhlciBwcm92aXNpb24gZXhjZXB0ICBhcyBleHByZXNzbHkgcHJvdmlkZWQgaW4gIHRoZSBBZ3JlZW1lbnQKK2FuZCBhbGwgY29uZGl0aW9ucywgIHdhcnJhbnRpZXMgb3Igb3RoZXIgdGVybXMgaW1wbGllZCBieSAgc3RhdHV0ZSBvciBjb21tb24KK2xhdyBhcmUgaGVyZWJ5IGV4Y2x1ZGVkIHRvIHRoZSBmdWxsZXN0IGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3LgorCisoYikgVGhpcyBkb2N1bWVudCBpcyB0aGUgZW50aXJlIEFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIGFuZCBzdXBlcnNlZGVzCithbGwgb3RoZXIgIGFncmVlbWVudHMgb3IgYXJyYW5nZW1lbnRzLCAgd2hldGhlciB3cml0dGVuIG9yIG9yYWwsICBleHByZXNzIG9yCitpbXBsaWVkLgorCisoYykgIFlvdSBhbmQgIHdlICBhY2tub3dsZWRnZSBhbmQgIGFncmVlICB0aGF0IHRoZSAgYWxsb2NhdGlvbiAgb2YgcmlzayAgYW5kCitsaWFiaWxpdHkgY29udGFpbmVkIGluIHRoaXMgQWdyZWVtZW50IGlzIHJlYXNvbmFibGUgaW4gYWxsIHRoZSBjaXJjdW1zdGFuY2VzCitoYXZpbmcgIHJlZ2FyZCAgdG8gYWxsICByZWxldmFudCAgZmFjdG9ycyAgaW5jbHVkaW5nIHRoZSAgZnVuY3Rpb25hbGl0eSAgYW5kCitjYXBhYmlsaXRpZXMgb2YgdGhlIFNvZnR3YXJlIGFuZCB0aGUgdGVzdGluZyBhbmQgZXZhbHVhdGlvbiBwdXJwb3NlcyBvZiB0aGlzCitsaWNlbmNlLgorCisxMy44IEluanVuY3RpdmUgUmVsaWVmCisKK0VhY2ggcGFydHkgYWNrbm93bGVkZ2VzIHRoYXQgIGEgdmlvbGF0aW9uIG9mIENsYXVzZXMgMSwgMywgOCwgIDkgYW5kIDEwLjEgb2YKK3RoaXMgQWdyZWVtZW50IHdvdWxkIGNhdXNlIGlycmVwYXJhYmxlIGhhcm0gIHRvIHRoZSBvdGhlciBwYXJ0eSBmb3Igd2hpY2ggbm8KK2FkZXF1YXRlICByZW1lZHkgYXQgIGxhdyBleGlzdHMgIGFuZCBlYWNoICBwYXJ0eSB0aGVyZWZvcmUgIGFncmVlcyB0aGF0LCAgaW4KK2FkZGl0aW9uICB0byBhbnkgIG90aGVyIHJlbWVkaWVzICBhdmFpbGFibGUsICB0aGUgYWdncmlldmVkICBwYXJ0eSBzaGFsbCAgYmUKK2VudGl0bGVkIHRvIHNlZWsgaW5qdW5jdGl2ZSByZWxpZWYgdG8gZW5mb3JjZSB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSwgMywgOCwKKzkgYW5kIDEwLjEuIFRoZSBwcmV2YWlsaW5nIHBhcnR5IHNoYWxsICBiZSBlbnRpdGxlZCB0byByZWNvdmVyIGFsbCBjb3N0cyBhbmQKK2V4cGVuc2VzLCBpbmNsdWRpbmcgcmVhc29uYWJsZSBsZWdhbCBmZWVzIGluY3VycmVkIGJlY2F1c2Ugb2YgYW55IHN1Y2ggbGVnYWwKK2FjdGlvbi4KKworMTMuOSBGb3JjZSBNYWpldXJlCisKK1dlIHdpbGwgbm90IGJlICByZXNwb25zaWJsZSBmb3IgYW55IGZhaWx1cmUgdG8gcGVyZm9ybSAgZHVlIHRvIGNhdXNlcyBiZXlvbmQKK291ciAgcmVhc29uYWJsZSBjb250cm9sLCAgaW5jbHVkaW5nLCBhY3RzICBvZiBHb2QsICBhY3RzIG9mICB0ZXJyb3Jpc20sIHdhciwKK3Jpb3QsIGVtYmFyZ29lcywgYWN0cyBvZiBjaXZpbCAgb3IgbWlsaXRhcnkgYXV0aG9yaXRpZXMsIG5hdGlvbmFsIGRpc2FzdGVycywKK3N0cmlrZXMgYW5kIHRoZSBsaWtlLgorCisxMy4xMCBDb250cmFjdHMgKFJpZ2h0cyBvZiBUaGlyZCBQYXJ0aWVzKSBBY3QgMTk5OQorCitUaGlzICBBZ3JlZW1lbnQgaXMgIGVuZm9yY2VhYmxlICBvbmx5IGJ5ICB5b3UgIGFuZCB1cyAgYW5kICBub3RoaW5nIGluICB0aGlzCitBZ3JlZW1lbnQgY29uZmVycyBvciBpcyAgdG8gYmUgZGVlbWVkIHRvIGNvbmZlciBhIGJlbmVmaXQgb24gIGEgcGVyc29uIG5vdCBhCitwYXJ0eSB0byAgdGhpcyBBZ3JlZW1lbnQuIEl0IGlzICBoZXJlYnkgYWdyZWVkIGJldHdlZW4gdGhlICBwYXJ0aWVzIHRoYXQgdGhlCitDb250cmFjdHMgIChSaWdodHMgIG9mICBUaGlyZCAgUGFydHkpICBBY3QgMTk5OSAgc2hhbGwgIG5vdCAgYXBwbHkgIHRvICB0aGlzCitBZ3JlZW1lbnQuCisKKzEzLjExIExhdworCitUaGlzIEFncmVlbWVudCBzaGFsbCBiZSBnb3Zlcm5lZCBieSBhbmQgY29uc3RydWVkIGluIGFjY29yZGFuY2Ugd2l0aCBFbmdsaXNoCitsYXcgYW5kICB0aGUgcGFydGllcyAgc3VibWl0IHRvICB0aGUgZXhjbHVzaXZlICBqdXJpc2RpY3Rpb24gb2YgIHRoZSBFbmdsaXNoCitDb3VydHMuCisKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL0xvZ01lSW4gYi9saWNlbnNlcy9Mb2dNZUluCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1NWU2OTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9Mb2dNZUluCkBAIC0wLDAgKzEsNjQ3IEBACitUZXJtcyBhbmQgQ29uZGl0aW9ucyBvZiBVc2UKKworSU1QT1JUQU5UIC0gUExFQVNFIFJFQUQgVEhFU0UgVEVSTVMgQU5EIENPTkRJVElPTlMgQ0FSRUZVTExZIFdIRU4gWU9VCisoSEVSRUFGVEVSLCAiWU9VIiBPUiAiWU9VUiIpIEFSRSBPUkRFUklORyBPUiBBQ0NFU1NJTkcgVEhFIExJU1RFRAorU0VSVklDRVMgQU5EL09SIFNPRlRXQVJFIEZST00gTE9HTUVJTiwgSU5DLiAoIkxNSSIpLiBUaGVzZSB0ZXJtcworYW5kIGNvbmRpdGlvbnMgKCJUZXJtcyIpIGdvdmVybiB0aGUgdXNlIGFuZCBsaWNlbnNpbmcgYnkgTE1JIG9mIHRoZQorZm9sbG93aW5nIExvZ01lSW7CriBzZXJ2aWNlKHMpIGFuZCByZWxhdGVkIHNvZnR3YXJlOiAoTG9nTWVJbiBCYWNrdXDCriwKK0xvZ01lSW7CriBDZW50cmFs4oSiLCBMb2dNZUluIEZyZWXCriwgTG9nTWVJbsKuIElnbml0aW9u4oSiLCBMb2dNZUluIElUCitSZWFjaMKuLCBMb2dNZUluwq4gTWFjLCBMb2dNZUluIFByb8KuLCBMb2dNZUluIFBybzLCriwgTG9nTWVJbiBSZXNjdWXCriwKK0xvZ01lSW7CriBSZXNjdWUrTW9iaWxl4oSiLCAgTG9nTWVJbiBIYW1hY2hpwq4sIExvZ01lSW4gSGFtYWNoaTLCriBhbmQKK2FueSBvdGhlciByZWxhdGVkIHNvZnR3YXJlIG9yIHNlcnZpY2VzKSAodGhlICJTZXJ2aWNlIikgYW5kIHRoZSBOZXR3b3JrCitDb25zb2xl4oSiIHNvZnR3YXJlICh0aGUgIlNvZnR3YXJlIiBhbmQgdG9nZXRoZXIgd2l0aCB0aGUgU2VydmljZSwgdGhlCisiUHJvZHVjdHMiKS4gQlkgQ09NUExFVElORyBUSEUgRUxFQ1RST05JQyBBQ0NFUFRBTkNFIFBST0NFU1MsIENMSUNLSU5HCitUSEUgIlNVQk1JVCIgT1IgIkFDQ0VQVCIgQlVUVE9OUywgU0lHTklORywgVVNJTkcgQU5ZIE9GIFRIRSBQUk9EVUNUUyBPUgorT1RIRVJXSVNFIElORElDQVRJTkcgWU9VUiBBQ0NFUFRBTkNFIE9GIFRIRVNFIFRFUk1TLCBZT1UgUkVQUkVTRU5UIEFORAorV0FSUkFOVCBUSEFUIFlPVTogKEkpIEFSRSBBVVRIT1JJWkVEIFRPIFNJR04gRk9SIEFORCBCSU5EIFlPVVJTRUxGIEFORAorQU5ZIE9USEVSIFBBUlRZIE9OIFdIT1NFIEJFSEFMRiBZT1UgVVNFIFRIRSBTRVJWSUNFIEFORC9PUiBTT0ZUV0FSRSAoVEhFCisiQ09OVFJBQ1RJTkcgUEFSVFkiKSBBTkQgKElJKSBBR1JFRSBGT1IgWU9VUlNFTEYgQU5EIFRIRSBDT05UUkFDVElORyBQQVJUWQorVE8gQkUgQk9VTkQgQlkgQUxMIE9GIFRIRVNFIFRFUk1TIChJTkNMVURJTkcgVEhFIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkKK0FORCBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBTRUNUSU9OUyBTRVQgRk9SVEggQkVMT1cpIFRPIFRIRSBFWENMVVNJT04KK09GIEFOWSBPVEhFUiBSSUdIVFMgQU5EIE9CTElHQVRJT05TLCBTVUNIIEFTIEFOWSBSSUdIVFMsIE9CTElHQVRJT05TIE9SCitPVEhFUiBURVJNUyBMSVNURUQgT04gQSBQVVJDSEFTRVIgT1JERVIgT1IgVEhFIExJS0UgWU9VIE9SIFRIRSBDT05UUkFDVElORworUEFSVFkgTUFZIFBST1ZJREUgTE1JIEFORCBZT1UgQUdSRUUgVEhBVCBBTlkgU1VDSCBSSUdIVFMsIE9CTElHQVRJT05TIE9SCitPVEhFUiBURVJNUyBMSVNURUQgT04gU1VDSCBQVVJDSEFTRSBPUkRFUiBPUiBUSEUgTElLRSBBUkUgSEVSRUJZIE5VTEwKK0FORCBWT0lELiBMTUkgcmVzZXJ2ZXMgdGhlIHJpZ2h0LCBleGVyY2lzZWQgaW4gaXRzIHNvbGUgZGlzY3JldGlvbiwgdG8KK2NoYW5nZSwgbW9kaWZ5LCBhZGQsIG9yIGRlbGV0ZSBwb3J0aW9ucyBvZiB0aGVzZSBUZXJtcyBhdCBhbnkgdGltZSBpbgorYWNjb3JkYW5jZSB3aXRoIHRoZSBwcm9jZWR1cmVzIHNldCBmb3J0aCBiZWxvdyBpbiB0aGUgc2VjdGlvbiBsYWJlbGVkCisiTW9kaWZpY2F0aW9ucyIuCisKKzEuIFJlZ2lzdHJhdGlvbgorCitUbyB1c2UgdGhlIFByb2R1Y3RzLCBZb3UgYW5kL29yIHRoZSBDb250cmFjdGluZyBQYXJ0eSBtYXkgYmUgcmVxdWlyZWQKK3RvIGNvbXBsZXRlIGFuZCBzdWJtaXQgYSByZWdpc3RyYXRpb24gZm9ybSAoIlJlZ2lzdHJhdGlvbiBGb3JtIikuIEFzCitwYXJ0IG9mIHRoaXMgcmVnaXN0cmF0aW9uIHByb2Nlc3MgZm9yLCBZb3UgYW5kIHRoZSBDb250cmFjdGluZyBQYXJ0eQorYWdyZWUgdG86IChpKSBwcm92aWRlIGNlcnRhaW4gbGltaXRlZCBpbmZvcm1hdGlvbiBhYm91dCBZb3Vyc2VsZiBhbmQKK3RoZSBDb250cmFjdGluZyBQYXJ0eSBhcyBwcm9tcHRlZCB0byBkbyBzbyBieSBkdXJpbmcgdGhlIHJlZ2lzdHJhdGlvbgorcHJvY2VzcyBvciB0aGVyZWFmdGVyIGJ5IHRoZSBQcm9kdWN0cyAoc3VjaCBpbmZvcm1hdGlvbiB0byBiZSBjdXJyZW50LAorY29tcGxldGUgYW5kIGFjY3VyYXRlKSBhbmQgKGlpKSBtYWludGFpbiBhbmQgdXBkYXRlIHRoaXMgaW5mb3JtYXRpb24KK2FzIHJlcXVpcmVkIHRvIGtlZXAgaXQgY3VycmVudCwgY29tcGxldGUgYW5kIGFjY3VyYXRlLiBUaGUgaW5mb3JtYXRpb24KK3JlcXVlc3RlZCBhdCB0aGUgdGltZSBvZiB0aGUgb3JpZ2luYWwgc2lnbnVwIHNoYWxsIGJlIHJlZmVycmVkIHRvCithcyByZWdpc3RyYXRpb24gZGF0YSAoIlJlZ2lzdHJhdGlvbiBEYXRhIikuIFlvdSBtYXkgbm90IHJlZ2lzdGVyIGZvcgorYW55IFNlcnZpY2UgaWYgWW91IGFyZSB1bmRlciAxOCB5ZWFycyBvZiBhZ2UuIEJ5IHJlZ2lzdGVyaW5nLCBZb3UgYW5kCit0aGUgQ29udHJhY3RpbmcgUGFydHkgcmVwcmVzZW50IHRvIExNSSB0aGF0IFlvdSBhcmUgMTggeWVhcnMgb2YgYWdlIG9yCitvbGRlci4gSWYgTE1JIGRpc2NvdmVycyB0aGF0IGFueSBvZiBZb3VyIFJlZ2lzdHJhdGlvbiBEYXRhIGlzIGluYWNjdXJhdGUsCitpbmNvbXBsZXRlIG9yIG5vdCBjdXJyZW50LCBvciBpZiBMTUkgZGV0ZXJtaW5lcywgaW4gaXRzIHNvbGUgZGlzY3JldGlvbiwKK3RoYXQgWW91IG9yIHRoZSBDb250cmFjdGluZyBQYXJ0eSBhcmUgbm90IGFuIGFwcHJvcHJpYXRlIHN1YnNjcmliZXIgb3IKK3VzZXIgb2YgdGhlIFByb2R1Y3RzLCBMTUkgbWF5IHRlcm1pbmF0ZSBhbGwgcmlnaHRzIHRvIGFjY2VzcywgcmVjZWl2ZSwgdXNlCithbmQgbGljZW5zZSB0aGUgUHJvZHVjdHMsIFNlcnZpY2UgYW5kIFNvZnR3YXJlIGltbWVkaWF0ZWx5IHVwb24gbm90aWNlLgorWW91ciBhbmQgdGhlIENvbnRyYWN0aW5nIFBhcnR5J3MgYXNzZW50IHRvIHRoZXNlIFRlcm1zIGNvbnN0aXR1dGVzIHlvdXIKK2V4cHJlc3MgdW5kZXJzdGFuZGluZyBhbmQgYWdyZWVtZW50IHRoYXQgd2hlbiBwZXJzb25hbCBkYXRhIGlzIHByb3ZpZGVkCit0byBMTUksIHN1Y2ggZGF0YSB3aWxsIGJlIHByb2Nlc3NlZCBpbiB0aGUgVW5pdGVkIFN0YXRlcy4gQW55IHBlcnNvbmFsCitkYXRhIGNvbGxlY3RlZCBmcm9tIG9yIGFib3V0IHVzZXJzIG9yIGxpY2Vuc2VlcyBpbiBjb25uZWN0aW9uIHdpdGggdGhlCitTZXJ2aWNlIG9yIFByb2R1Y3RzLCB0aHJvdWdoIHRoZSBMTUkgd2Vic2l0ZSwgb3Igb3RoZXJ3aXNlIHVuZGVyIHRoZXNlCitUZXJtcywgd2lsbCBiZSBtYWludGFpbmVkIGFuZCBwcm9jZXNzZWQgaW4gdGhlIFVuaXRlZCBTdGF0ZXMgYnkgTE1JIG9yCithIHBhcnR5IGFjdGluZyBvbiBpdHMgYmVoYWxmLCBhcyBMTUkncyBTZXJ2aWNlcywgUHJvZHVjdHMgYW5kIHdlYnNpdGUKK2FyZSBwcm92aWRlZCB2aWEgZXF1aXBtZW50IGFuZCBvdGhlciByZXNvdXJjZXMgbG9jYXRlZCBpbiB0aGUgVW5pdGVkCitTdGF0ZXMuIExNSSdzIFByaXZhY3kgUG9saWN5IGRlc2NyaWJlcyBob3cgcGVyc29uYWxseSBpZGVudGlmaWFibGUKK2luZm9ybWF0aW9uIG1heSBiZSBjb2xsZWN0ZWQsIHVzZWQgYW5kIGRpc2Nsb3NlZC4KKworMi4gQ29uZHVjdAorCitZb3UgYW5kIHRoZSBDb250cmFjdGluZyBQYXJ0eSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciB0aGUgY29udGVudAorb2YgWW91ciBjb21wdXRlcihzKSBhbmQgWW91ciBMTUkgYWNjb3VudCBhbmQgYW55IHRyYW5zbWlzc2lvbnMgd2hlbgordXNpbmcgdGhlIFByb2R1Y3RzLiBMTUkgZG9lcywgaG93ZXZlciwgcmVzZXJ2ZSB0aGUgcmlnaHQgdG8gdGFrZQorYW55IGFjdGlvbiB3aXRoIHJlc3BlY3QgdG8gdGhlIHNhbWUgdGhhdCBMTUkgaW4gaXRzIHNvbGUgZGlzY3JldGlvbgorZGVlbXMgbmVjZXNzYXJ5IG9yIGFwcHJvcHJpYXRlLiBUaGUgdXNlIG9mIHRoZSBQcm9kdWN0cyBieSBZb3UgYW5kIHRoZQorQ29udHJhY3RpbmcgUGFydHkgaXMgc3ViamVjdCB0byB0aGUgZW5kIHVzZXIgbGljZW5zZSB0ZXJtcyBzZXQgZm9ydGgKK2hlcmVpbiBhbmQgYWxsIGFwcGxpY2FibGUgbGF3cywgcnVsZXMgYW5kIHJlZ3VsYXRpb25zLCBpbmNsdWRpbmcgbG9jYWwsCitzdGF0ZSwgbmF0aW9uYWwgYW5kIGludGVybmF0aW9uYWwgbGF3cywgcnVsZXMgYW5kIHJlZ3VsYXRpb25zIChpbmNsdWRpbmcKK3dpdGhvdXQgbGltaXRhdGlvbiB0aG9zZSBnb3Zlcm5pbmcgYWNjb3VudCBjb2xsZWN0aW9uLCBleHBvcnQgY29udHJvbCwKK2NvbnN1bWVyIHByb3RlY3Rpb24sIHVuZmFpciBjb21wZXRpdGlvbiwgYW50aS1kaXNjcmltaW5hdGlvbiBvciBmYWxzZQorYWR2ZXJ0aXNpbmcpLiBZb3UgYW5kIHRoZSBDb250cmFjdGluZyBQYXJ0eSBhZ3JlZTogKGkpIHRvIGNvbXBseSB3aXRoCithbGwgYXBwbGljYWJsZSBsYXdzLCBydWxlcyBhbmQgcmVndWxhdGlvbnMsIGluY2x1ZGluZyBsb2NhbCwgc3RhdGUsCituYXRpb25hbCBhbmQgaW50ZXJuYXRpb25hbCBsYXdzLCBydWxlcyBhbmQgcmVndWxhdGlvbnMgKGluY2x1ZGluZword2l0aG91dCBsaW1pdGF0aW9uIHRob3NlIGdvdmVybmluZyBhY2NvdW50IGNvbGxlY3Rpb24sIGV4cG9ydCBjb250cm9sLAorY29uc3VtZXIgcHJvdGVjdGlvbiwgdW5mYWlyIGNvbXBldGl0aW9uLCBhbnRpLWRpc2NyaW1pbmF0aW9uIG9yIGZhbHNlCithZHZlcnRpc2luZyk7IChpaSkgbm90IHRvIHBvc3QsIGRpc3RyaWJ1dGUsIG9yIG90aGVyd2lzZSBtYWtlIGF2YWlsYWJsZQorb3IgdHJhbnNtaXQgYW55IHNvZnR3YXJlIG9yIG90aGVyIGNvbXB1dGVyIGZpbGVzIHRoYXQgY29udGFpbiBhIHZpcnVzLAordHJvamFuIGhvcnNlLCB3b3JtIG9yIG90aGVyIGhhcm1mdWwgb3IgZGVzdHJ1Y3RpdmUgY29tcG9uZW50OyAoaWlpKSBub3QKK3RvIHVzZSB0aGUgUHJvZHVjdHMgZm9yIGFueSBpbGxlZ2FsIHB1cnBvc2VzOyAoaXYpIG5vdCB0byBkZWxldGUgZnJvbQordGhlIFByb2R1Y3RzLCBTb2Z0d2FyZSwgZG9jdW1lbnRhdGlvbiBvciBhbnkgd2ViIHNpdGUgdXNlZCBpbiBjb25uZWN0aW9uCit3aXRoIHRoZSBQcm9kdWN0cywgYW55IGxlZ2FsIG5vdGljZXMsIGRpc2NsYWltZXJzLCBvciBwcm9wcmlldGFyeSBub3RpY2VzCitzdWNoIGFzIGNvcHlyaWdodCBvciB0cmFkZW1hcmsgbm90aWNlcywgb3IgbW9kaWZ5IGFueSBsb2dvcyB0aGF0IFlvdSBvcgordGhlIENvbnRyYWN0aW5nIFBhcnR5IGRvIG5vdCBvd24gb3IgaGF2ZSBleHByZXNzIHBlcm1pc3Npb24gdG8gbW9kaWZ5OworKHYpIG5vdCB0byBpbnRlcmZlcmUgb3IgZGlzcnVwdCBuZXR3b3JrcyBjb25uZWN0ZWQgdG8gdGhlIFNlcnZpY2U7ICh2aSkKK25vdCB0byB1c2UgdGhlIFByb2R1Y3RzIHRvIGluZnJpbmdlIGFueSB0aGlyZCBwYXJ0eSdzIGNvcHlyaWdodCwgcGF0ZW50LAordHJhZGVtYXJrLCB0cmFkZSBzZWNyZXQgb3Igb3RoZXIgcHJvcHJpZXRhcnkgcmlnaHRzIG9yIHJpZ2h0cyBvZiBwdWJsaWNpdHkKK29yIHByaXZhY3k7IGFuZCAodmlpKSBub3QgdG8gdHJhbnNtaXQgYW55IHVubGF3ZnVsLCBoYXJhc3NpbmcsIGxpYmVsb3VzLAorZGVmYW1hdG9yeSwgcmFjaXN0LCBpbmRlY2VudCwgYWJ1c2l2ZSwgdmlvbGVudCwgdGhyZWF0ZW5pbmcsIGludGltaWRhdGluZywKK2hhcm1mdWwsIHZ1bGdhciwgb2JzY2VuZSwgb2ZmZW5zaXZlIG9yIG90aGVyd2lzZSBvYmplY3Rpb25hYmxlIG1hdGVyaWFsCitvZiBhbnkga2luZCBvciBuYXR1cmUuIFlvdSBhbmQgdGhlIENvbnRyYWN0aW5nIFBhcnR5IHdpbGwgbm90IGF0dGVtcHQKK3RvIGdhaW4gdW5hdXRob3JpemVkIGFjY2VzcyB0byBvdGhlciBjb21wdXRlciBzeXN0ZW1zIG9yIGludGVyZmVyZSB3aXRoCithbm90aGVyIHVzZXIncyB1c2UgYW5kIGVuam95bWVudCBvZiB0aGUgUHJvZHVjdHMuICBUaGUgQ29udHJhY3RpbmcgUGFydHkKK2FncmVlcyBpdCBpcyByZXNwb25zaWJsZSBmb3IgYWxsIGFjdGlvbnMgYW5kIGluYWN0aW9ucyBvZiBpdHMgZW1wbG95ZWVzCithbmQgY29uc3VsdGFudHMgYW5kIHdpbGwgdXNlIGNvbW1lcmNpYWxseSByZWFzb25hYmxlIGVmZm9ydHMgdG8gbW9uaXRvcgoraXRzIGVtcGxveWVlcyBhbmQgY29uc3VsdGFudHMuCisKKzMuIE1vZGlmaWNhdGlvbnMKKworTE1JIG1heSBhbWVuZCB0aGVzZSBUZXJtcyBhdCBhbnkgdGltZSBieSAoaSkgcG9zdGluZyBhIHJldmlzZWQgVGVybXMKK2RvY3VtZW50IG9uIG9yIGFjY2Vzc2libGUgdGhyb3VnaCBodHRwczovL3NlY3VyZS5sb2dtZWluLmNvbSBhbmQvb3IgKGlpKQorc2VuZGluZyBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhlIFRlcm1zIGFtZW5kbWVudCB0byB0aGUgZW1haWwgYWRkcmVzcworWW91IG1heSBiZSByZXF1aXJlZCB0byBwcm92aWRlIHRvIExNSS4gWW91IGFuZCB0aGUgQ29udHJhY3RpbmcgUGFydHkgYXJlCityZXNwb25zaWJsZSBmb3IgcmVndWxhcmx5IHJldmlld2luZyB0aGUgaHR0cHM6Ly9zZWN1cmUubG9nbWVpbi5jb20gc2l0ZQordG8gb2J0YWluIHRpbWVseSBub3RpY2Ugb2Ygc3VjaCBhbWVuZG1lbnRzLiBZb3UgYW5kIHRoZSBDb250cmFjdGluZyBQYXJ0eQorbWFuaWZlc3QgaW50ZW50IHRvIGFjY2VwdCB0aGVzZSBhbWVuZGVkIHRlcm1zIGlmIFlvdSBvciB0aGUgQ29udHJhY3RpbmcKK1BhcnR5IGNvbnRpbnVlcyB0byB1c2UgYW55IG9mIHRoZSBQcm9kdWN0cyBhZnRlciBzdWNoIGFtZW5kZWQgdGVybXMKK2hhdmUgYmVlbiBwb3N0ZWQgb3Igc2VudCB0byBZb3Ugb3IgdGhlIENvbnRyYWN0aW5nIFBhcnR5LiBJZiBZb3Ugb3IgdGhlCitDb250cmFjdGluZyBQYXJ0eSBkbyBub3QgYWdyZWUgd2l0aCBhbnkgc3VjaCBhbWVuZGVkIHRlcm1zIFlvdSBzaGFsbAorbm90aWZ5IExNSSBkdXJpbmcgdGhlIDMwIGRheSBwZXJpb2QgYWZ0ZXIgc3VjaCBhbWVuZGVkIHRlcm1zIGhhdmUgYmVlbgorcG9zdGVkIGFuZCBhdCB0aGUgZW5kIG9mIHN1Y2ggMzAgZGF5IHBlcmlvZCB0aGVzZSBUZXJtcyBzaGFsbCBiZSBkZWVtZWQKK3Rlcm1pbmF0ZWQgdW5sZXNzIExNSSBhZ3JlZXMgdG8gd2FpdmUgc3VjaCBhbWVuZGVkIHRlcm1zIHRvIHdoaWNoIFlvdQorb2JqZWN0LiBPdGhlcndpc2UsIHRoZXNlIFRlcm1zIG1heSBub3QgYmUgYW1lbmRlZCBleGNlcHQgaW4gd3JpdGluZyBzaWduZWQKK2J5IGJvdGggcGFydGllcy4gRnVydGhlciwgTE1JIHJlc2VydmVzIHRoZSByaWdodCB0byBtb2RpZnkgb3IgZGlzY29udGludWUKK2FueSBQcm9kdWN0IGZvciBhbnkgcmVhc29uIG9yIG5vIHJlYXNvbiB3aXRoIG9yIHdpdGhvdXQgbm90aWNlIHRvIFlvdSBvcgordGhlIENvbnRyYWN0aW5nIFBhcnR5LiBMTUkgc2hhbGwgbm90IGJlIGxpYWJsZSB0byBZb3Ugb3IgdGhlIENvbnRyYWN0aW5nCitQYXJ0eSBvciBhbnkgdGhpcmQgcGFydHkgc2hvdWxkIExNSSBleGVyY2lzZSBpdHMgcmlnaHQgdG8gcmV2aXNlIHRoZXNlCitUZXJtcyBvciBtb2RpZnkgb3IgZGlzY29udGludWUgYSBQcm9kdWN0LgorCis0LiBQYXNzd29yZHMgYW5kIFNlY3VyaXR5CisKKzQuMSBBcyBwYXJ0IG9mIHRoZSByZWdpc3RyYXRpb24gcHJvY2VzcyBkZXNjcmliZWQgYWJvdmUgZm9yIGVhY2ggU2VydmljZQord2l0aCB0aGUgZXhjZXB0aW9uIG9mIExvZ01lSW4gSGFtYWNoaSBvciBMb2dNZUluIEhhbWFjaGkyIHNlcnZpY2VzLAorWW91IGFuZCB0aGUgQ29udHJhY3RpbmcgUGFydHkgbXVzdCB1c2UgWW91ciBlbWFpbCBhZGRyZXNzIGFzIFlvdXIKK3VzZXIgbmFtZSBhbmQgY2hvb3NlIGEgcGFzc3dvcmQgZm9yIGFjY2VzcyB0byBZb3VyIGFjY291bnQgYW5kIHRvIFlvdXIKK2Rlc2lnbmF0ZWQgY29tcHV0ZXJzIChZb3Ugc2hvdWxkIGNob29zZSBhIHBhc3N3b3JkIGZvciB0aGUgU2VydmljZSB0aGF0CitpcyBkaWZmZXJlbnQgZnJvbSB0aGUgdXNlcm5hbWUgYW5kIHBhc3N3b3JkIHRvIFlvdXIgY29tcHV0ZXIpLiBZb3UKK2FuZCB0aGUgQ29udHJhY3RpbmcgUGFydHkgYWdyZWUgdG8gY2FyZWZ1bGx5IHNhZmVndWFyZCBhbGwgb2YgWW91cgorcGFzc3dvcmRzLiBZb3UgYW5kIHRoZSBDb250cmFjdGluZyBQYXJ0eSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGlmCitZb3Ugb3IgdGhlIENvbnRyYWN0aW5nIFBhcnR5IGRvIG5vdCBtYWludGFpbiB0aGUgY29uZmlkZW50aWFsaXR5IG9mCitZb3VyIHBhc3N3b3JkcyBhbmQgYWNjb3VudCBpbmZvcm1hdGlvbi4gRnVydGhlcm1vcmUsIFlvdSBhbmQgdGhlCitDb250cmFjdGluZyBQYXJ0eSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBhbnkgYW5kIGFsbCBhY3Rpdml0eQordGhhdCBvY2N1cnMgdW5kZXIgWW91ciBhY2NvdW50LiBZb3UgYW5kIHRoZSBDb250cmFjdGluZyBQYXJ0eSBhZ3JlZQoraW1tZWRpYXRlbHkgdG8gbm90aWZ5IExNSSBvZiBhbnkgdW5hdXRob3JpemVkIHVzZSBvZiBZb3VyIGFjY291bnQgb3IKK2FueSBvdGhlciBicmVhY2ggb2Ygc2VjdXJpdHkga25vd24gdG8gWW91IG9yIHRoZSBDb250cmFjdGluZyBQYXJ0eSwKK2luY2x1ZGluZyBpZiBZb3Ugb3IgdGhlIENvbnRyYWN0aW5nIFBhcnR5IGJlbGlldmUgdGhhdCBZb3VyIHBhc3N3b3JkIG9yCithY2NvdW50IGluZm9ybWF0aW9uIGhhcyBiZWVuIHN0b2xlbiBvciBvdGhlcndpc2UgY29tcHJvbWlzZWQuIEFjY2VzcyB0bywKK2FuZCB1c2Ugb2YsIHBhc3N3b3JkLXByb3RlY3RlZCBhbmQvb3Igc2VjdXJlIGFzcGVjdHMgb2YgdGhlIFNlcnZpY2UgaXMKK3Jlc3RyaWN0ZWQgdG8gYXV0aG9yaXplZCB1c2VycyBvbmx5LiBVbmF1dGhvcml6ZWQgaW5kaXZpZHVhbHMgYXR0ZW1wdGluZwordG8gdXNlIHRoZSBTZXJ2aWNlIG1heSBiZSBzdWJqZWN0IHRvIHByb3NlY3V0aW9uLiA0LjIgTE1JIGlzIG5vdCBsaWFibGUKK2ZvciBhbnkgbG9zcyBpbmN1cnJlZCBieSBZb3Ugb3IgdGhlIENvbnRyYWN0aW5nIFBhcnR5LCByZXN1bHRpbmcgZnJvbQorYW5vdGhlcidzIHVzZSBvZiBZb3VyIHBhc3N3b3JkLCBhY2NvdW50LCBvciBwdWJsaWMgLyBwcml2YXRlIGtleSwKK2FzIG1heSBiZSBhcHBsaWNhYmxlLCBlaXRoZXIgd2l0aCBvciB3aXRob3V0IFlvdXIga25vd2xlZGdlLiBIb3dldmVyLAorWW91IGFuZCB0aGUgQ29udHJhY3RpbmcgUGFydHkgbWF5IGJlIGhlbGQgbGlhYmxlIGZvciBsb3NzZXMgaW5jdXJyZWQgYnkKK0xNSSBvciBhbm90aGVyIHBhcnR5IGR1ZSB0byBhbm90aGVyJ3MgdXNlIG9mIFlvdXIgcGFzc3dvcmQsIGFjY291bnQsCitvciBwdWJsaWMgLyBwcml2YXRlIGtleSwgYXMgbWF5IGJlIGFwcGxpY2FibGUsIGVpdGhlciB3aXRoIG9yIHdpdGhvdXQKK1lvdXIga25vd2xlZGdlLiBZb3UgYW5kIHRoZSBDb250cmFjdGluZyBQYXJ0eSBzaGFsbCBub3QgYWNjZXNzIG9yIHVzZQorc29tZW9uZSBlbHNlJ3MgYWNjb3VudCBhdCBhbnkgdGltZSwgd2l0aG91dCB0aGUgcGVybWlzc2lvbiBvZiB0aGUgYWNjb3VudAoraG9sZGVyLiA0LjMgTE1JIGRvZXMgbm90IHNlbmQgZW1haWxzIGFza2luZyBmb3IgYSB1c2VyJ3MgdXNlcm5hbWUgYW5kCitwYXNzd29yZCBvciBpdHMgV2luZG93cyB1c2VybmFtZSBhbmQgcGFzc3dvcmQgb3IgYW55IG90aGVyIHVzZXJuYW1lIG9yCitwYXNzd29yZC4gVG8ga2VlcCB0aGUgUHJvZHVjdHMgc2VjdXJlLCBZb3UgYW5kIHRoZSBDb250cmFjdGluZyBQYXJ0eQorc2hvdWxkIGtlZXAgYWxsIHVzZXJuYW1lcyBhbmQgcGFzc3dvcmRzIGNvbmZpZGVudGlhbC4KKworNS4gRW5kIFVzZXIgTGljZW5zZSBBZ3JlZW1lbnQKKworVGhlc2UgZW5kIHVzZXIgbGljZW5zZSB0ZXJtcyBncmFudCBhIHJpZ2h0IGFuZCBsaWNlbnNlIGFsbG93aW5nIFlvdSBhbmQKK3RoZSBDb250cmFjdGluZyBQYXJ0eSB0byB1c2UgdGhlIFNvZnR3YXJlIGFuZCBvdGhlciBzb2Z0d2FyZSBhc3NvY2lhdGVkCit3aXRoIHRoZSBTZXJ2aWNlICh0b2dldGhlciwgdGhlICJMaWNlbnNlZCBQcm9ncmFtcyIpIHVuZGVyIGNlcnRhaW4KK3Jlc3RyaWN0aW9ucywgdGVybXMgYW5kIGNvbmRpdGlvbnMgKHRoZSAiTGljZW5zZSBBZ3JlZW1lbnQiKS4gWW91IGFuZCB0aGUKK0NvbnRyYWN0aW5nIFBhcnR5IGFyZSBjb25zZW50aW5nIHRvIGJlIGJvdW5kIGJ5IHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQKK2J5IHlvdXIgdXNlIG9mIHRoZSBQcm9kdWN0cy4KKworNS4xIFRoZSBMaWNlbnNlZCBQcm9ncmFtcyBhcmUgbWFkZSBhdmFpbGFibGUgZm9yIGRvd25sb2FkIHNvbGVseQorZm9yIHVzZSBieSBZb3UgYW5kIHRoZSBDb250cmFjdGluZyBQYXJ0eSBhbmQgb25seSBhY2NvcmRpbmcgdG8gdGhpcworTGljZW5zZSBBZ3JlZW1lbnQuIEFueSByZXByb2R1Y3Rpb24sIHJlc2FsZSBvciByZWRpc3RyaWJ1dGlvbiBvZgordGhlIExpY2Vuc2VkIFByb2dyYW1zIHRoYXQgaXMgbm90IGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIExpY2Vuc2UKK0FncmVlbWVudCBpcyBleHByZXNzbHkgcHJvaGliaXRlZCwgYW5kIG1heSByZXN1bHQgaW4gc2V2ZXJlIGNpdmlsIGFuZAorY3JpbWluYWwgcGVuYWx0aWVzLiBWaW9sYXRvcnMgd2lsbCBiZSBwcm9zZWN1dGVkIHRvIHRoZSBtYXhpbXVtIGV4dGVudAorcG9zc2libGUuIExNSSBpcyBub3QgdHJhbnNmZXJyaW5nIHRpdGxlIHRvIHRoZSBMaWNlbnNlZCBQcm9ncmFtcyB0byBZb3UKK29yIHRoZSBDb250cmFjdGluZyBQYXJ0eS4gVGhpcyBsaWNlbnNlIG1heSBub3QgYmUgdHJhbnNmZXJyZWQgYnkgWW91IG9yCit0aGUgQ29udHJhY3RpbmcgUGFydHkgdG8gYW55IHRoaXJkIHBhcnR5IGFuZCBpcyBub24tZXhjbHVzaXZlLgorCis1LjIgWW91IGFuZCB0aGUgQ29udHJhY3RpbmcgUGFydHkgYWNrbm93bGVkZ2UgdGhhdCB0aGUgTGljZW5zZWQgUHJvZ3JhbXMKK2FyZSBwcm9wcmlldGFyeSB0byBMTUkgb3IgaXRzIHN1cHBsaWVycyBhbmQgYXJlIHByb3RlY3RlZCBieSBjb3B5cmlnaHRzLAordHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgcGF0ZW50cyBhbmQvb3Igb3RoZXIgcHJvcHJpZXRhcnkgcmlnaHRzIGFuZAorbGF3cy4gVGhlcmVmb3JlLCBZb3UgYW5kIHRoZSBDb250cmFjdGluZyBQYXJ0eSBhZ3JlZSB0aGF0IFlvdSBhbmQgdGhlCitDb250cmFjdGluZyBQYXJ0eSBhcmUgb25seSBwZXJtaXR0ZWQgdG8gdXNlIHRoZSBMaWNlbnNlZCBQcm9ncmFtcyBhcworZXhwcmVzc2x5IGF1dGhvcml6ZWQgYnkgTE1JIGFuZCB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBZb3UgYW5kIHRoZQorQ29udHJhY3RpbmcgUGFydHkgbWF5IG5vdCByZW1vdmUgYW55IHByb3ByaWV0YXJ5IG5vdGljZXMgb3IgbGFiZWxzCitmcm9tIHRoZSBMaWNlbnNlZCBQcm9ncmFtcy4gWW91IG1heSBjb3B5IHRoZSBMaWNlbnNlZCBQcm9ncmFtcyBmb3IKK2FyY2hpdmFsIHB1cnBvc2VzIG9ubHksIHByb3ZpZGVkIGFueSBjb3B5IG11c3QgY29udGFpbiBhbGwgb3JpZ2luYWwKK3Byb3ByaWV0YXJ5IG5vdGljZXMuIFlvdSBhbmQgdGhlIENvbnRyYWN0aW5nIFBhcnR5IG1heSBub3QgYWx0ZXIsIG1vZGlmeSwKK3JlZGlzdHJpYnV0ZSwgc2VsbCwgYXVjdGlvbiwgZGVjb21waWxlLCByZXZlcnNlIGVuZ2luZWVyLCBkaXNhc3NlbWJsZSBvcgorb3RoZXJ3aXNlIHJlZHVjZSB0aGUgTGljZW5zZWQgUHJvZ3JhbXMgdG8gYSBodW1hbi1yZWFkYWJsZSBmb3JtLiBZb3UgYW5kCit0aGUgQ29udHJhY3RpbmcgUGFydHkgbWF5IG5vdCByZXByb2R1Y2UgKGV4Y2VwdCBmb3IgYXJjaGl2YWwgcHVycG9zZXMpLAorZGlzdHJpYnV0ZSBvciBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgTGljZW5zZWQgUHJvZ3JhbXMKK3dpdGhvdXQgZXhwcmVzc2x5IGJlaW5nIGF1dGhvcml6ZWQgaW4gd3JpdGluZyB0byBkbyBzbyBieSBMTUkuIEZ1cnRoZXIsCitZb3UgYW5kIHRoZSBDb250cmFjdGluZyBQYXJ0eSBtYXkgbm90IHJlbnQsIGxlYXNlLCBncmFudCBhIHNlY3VyaXR5CitpbnRlcmVzdCBpbiBvciBvdGhlcndpc2UgdHJhbnNmZXIgcmlnaHRzIHRvIHRoZSBMaWNlbnNlZCBQcm9ncmFtcy4gQWxsCityaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGluIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkIHRvCitMTUkgYW5kIGl0cyBzdXBwbGllcnMuCisKKzUuMyBBTEwgQ09OVEVOVCBPTiBXRUIgU0lURVMgQU5EIENPTVBVVEVSIFBST0dSQU1TIEFTU09DSUFURUQgV0lUSAorVEhFIFNFUlZJQ0UgSVMgUFJPVEVDVEVEIEJZIENPUFlSSUdIVCBBTkQgT1RIRVIgSU5URUxMRUNUVUFMIFBST1BFUlRZCitMQVdTLiBFWENFUFQgQVMgU1BFQ0lGSUNBTExZIFBFUk1JVFRFRCBIRVJFSU4sIE5PIFBPUlRJT04gT0YgVEhFCitJTkZPUk1BVElPTiBPUiBDT05URU5UIE9OIFNVQ0ggU0lURVMgTUFZIEJFIFJFUFJPRFVDRUQgSU4gQU5ZIEZPUk0sCitPUiBCWSBBTlkgTUVBTlMsIFdJVEhPVVQgUFJJT1IgV1JJVFRFTiBQRVJNSVNTSU9OIEZST00gTE1JLiBZT1UsIFRIRQorQ09OVFJBQ1RJTkcgUEFSVFkgQU5EIEFOWSBPVEhFUiBWSVNJVE9SIE9SIFVTRVIgQVJFIE5PVCBQRVJNSVRURUQgVE8KK01PRElGWSwgRElTVFJJQlVURSwgUFVCTElTSCwgVFJBTlNNSVQgT1IgQ1JFQVRFIERFUklWQVRJVkUgV09SS1MgT0YgQU5ZCitNQVRFUklBTCBGT1VORCBPTiBTVUNIIFNJVEVTIEZPUiBBTlkgUFVCTElDIE9SIENPTU1FUkNJQUwgUFVSUE9TRS4KKworNi4gRGlzY2xhaW1lciBvZiBXYXJyYW50aWVzCisKKzYuMSBBbHRob3VnaCBMTUkgaGFzIGF0dGVtcHRlZCB0byBwcm92aWRlIGFjY3VyYXRlIGluZm9ybWF0aW9uIHdpdGgKK3JlZ2FyZCB0byB0aGUgUHJvZHVjdHMsIExNSSBhc3N1bWVzIG5vIHJlc3BvbnNpYmlsaXR5IGZvciB0aGUgYWNjdXJhY3kKK29yIGluYWNjdXJhY3kgb2YgYW55IGluZm9ybWF0aW9uIHByb3ZpZGVkLiBMTUkgbWF5IGNoYW5nZSB0aGUgUHJvZHVjdHMKK2F0IGFueSB0aW1lIHdpdGhvdXQgbm90aWNlLiBNZW50aW9uIG9mIG5vbi1MTUkgcHJvZHVjdHMgb3Igc2VydmljZXMgaXMKK2ZvciBpbmZvcm1hdGlvbiBwdXJwb3NlcyBvbmx5IGFuZCBjb25zdGl0dXRlcyBuZWl0aGVyIGFuIGVuZG9yc2VtZW50IG5vcgorYSByZWNvbW1lbmRhdGlvbi4gVXNlIG9mIHRoZSBQcm9kdWN0cyBpcyBhdCB0aGUgWW91ciBhbmQgdGhlIENvbnRyYWN0aW5nCitQYXJ0eSdzIHJpc2suCisKKzYuMiBBTEwgSU5GT1JNQVRJT04sIERPQ1VNRU5UQVRJT04gQU5EIFBST0RVQ1RTIFBST1ZJREVEIEJZIExNSSBBUkUKK1BST1ZJREVEICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRAorT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8gVEhFIElNUExJRUQgV0FSUkFOVElFUworT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgVElUTEUgT1IKK05PTi1JTkZSSU5HRU1FTlQsIE9SIEFSSVNJTkcgRlJPTSBBIENPVVJTRSBPRiBERUFMSU5HLCBVU0FHRSwgT1IgVFJBREUKK1BSQUNUSUNFLiBUTyBUSEUgTUFYSU1VTSBFWFRFTlQgUEVSTUlUVEVEIEJZIExBVywgTE1JIEVYUFJFU1NMWSBESVNDTEFJTVMKK0FOWSBBTkQgQUxMIFdBUlJBTlRJRVMsIENPTkRJVElPTlMsIFJFUFJFU0VOVEFUSU9OUywgQU5EIEdVQVJBTlRFRVMgV0lUSAorUkVTUEVDVCBUTyBUSEUgUFJPRFVDVFMsIFdIRVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBBUklTSU5HIEJZIExBVywKK0NVU1RPTSwgUFJJT1IgT1JBTCBPUiBXUklUVEVOIFNUQVRFTUVOVFMsIE9SIE9USEVSV0lTRS4gTE1JIE1BS0VTIE5PCitXQVJSQU5UWSBUSEFUIFRIRSBQUk9EVUNUUyBXSUxMIE1FRVQgWU9VUiBPUiBUSEUgQ09OVFJBQ1RJTkcgUEFSVFknUworUkVRVUlSRU1FTlRTIE9SIFRIQVQgVEhFIFBST0RVQ1QgV0lMTCBCRSBVTklOVEVSUlVQVEVELCBUSU1FTFkgT1IKK0VSUk9SIEZSRUUsIE5PUiBET0VTIExNSSBNQUtFIEFOWSBXQVJSQU5UWSBBUyBUTyBUSEUgUkVTVUxUUyBUSEFUIE1BWQorQkUgT0JUQUlORUQgRlJPTSBUSEUgVVNFIE9GIFRIRSBQUk9EVUNUUyBPUiBUSEUgQUNDVVJBQ1kgT0YgQU5ZIE9USEVSCitJTkZPUk1BVElPTiBPQlRBSU5FRCBUSFJPVUdIIFRIRSBQUk9EVUNUUy4gWU9VIEFORCBUSEUgQ09OVFJBQ1RJTkcKK1BBUlRZIFVOREVSU1RBTkQgQU5EIEFHUkVFIFRIQVQgQU5ZIE1BVEVSSUFMIEFORC9PUiBEQVRBIERPV05MT0FERUQgT1IKK09USEVSV0lTRSBPQlRBSU5FRCBUSFJPVUdIIFRIRSBVU0UgT0YgVEhFIFBST0RVQ1RTIElTIERPTkUgQVQgWU9VUiBPV04KK1JJU0sgQU5EIFRIQVQgWU9VIEFORCBUSEUgQ09OVFJBQ1RJTkcgUEFSVFkgV0lMTCBCRSBTT0xFTFkgUkVTUE9OU0lCTEUKK0ZPUiBBTlkgREFNQUdFIFRPIEFOWSBDT01QVVRFUiBTWVNURU0gT1IgTE9TUyBPRiBEQVRBIFRIQVQgUkVTVUxUUworRlJPTSBUSEUgRE9XTkxPQUQgT0YgU1VDSCBNQVRFUklBTCBBTkQvT1IgREFUQS4gTk8gUkVQUkVTRU5UQVRJT04gT1IKK09USEVSIEFGRklSTUFUSU9OIE9GIEZBQ1QsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBTVEFURU1FTlRTCitSRUdBUkRJTkcgQ0FQQUNJVFksIFNVSVRBQklMSVRZIEZPUiBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0RVQ1RTLAorV0hFVEhFUiBNQURFIEJZIEVNUExPWUVFUyBPRiBMTUkgT1IgT1RIRVJXSVNFLCBXSElDSCBJUyBOT1QgQ09OVEFJTkVEIElOCitUSElTIEFHUkVFTUVOVCwgU0hBTEwgQkUgREVFTUVEIFRPIEJFIEEgV0FSUkFOVFkgQlkgTE1JIEZPUiBBTlkgUFVSUE9TRSwKK09SIEdJVkUgUklTRSBUTyBBTlkgTElBQklMSVRZIE9GIExNSSBXSEFUU09FVkVSLgorCis3LiBMaW1pdGF0aW9ucyBvZiBEYW1hZ2VzIGFuZCBMaWFiaWxpdHkKKworNy4xIFlPVSBBTkQgVEhFIENPTlRSQUNUSU5HIFBBUlRZIEFHUkVFIFRIQVQgVEhFIENPTlNJREVSQVRJT04gV0hJQ0ggTE1JCitJUyBSRUNFSVZJTkcgSEVSRVVOREVSIERPRVMgTk9UIElOQ0xVREUgQ09OU0lERVJBVElPTiBGT1IgQVNTVU1QVElPTgorQlkgTE1JIE9GIFRIRSBSSVNLIE9GIFlPVVIgQU5EIFRIRSBDT05UUkFDVElORyBQQVJUWSdTIElOQ0lERU5UQUwsCitDT05TRVFVRU5USUFMIE9SIE9USEVSIElORElSRUNUIERBTUFHRVMuIExNSSBBTkQgSVRTIFNVUFBMSUVSUyBTSEFMTCBOT1QKK0JFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIENPTlNFUVVFTlRJQUwsIElOQ0lERU5UQUwgT1IgT1RIRVIgSU5ESVJFQ1QKK0RBTUFHRVMgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIExPU1QgUFJPRklUUyBPUiBSRVZFTlVFUywgQ09TVFMKK09GIFJFUExBQ0VNRU5UIFBST0RVQ1QgT1IgU0VSVklDRSwgTE9TUyBPUiBEQU1BR0UgVE8gSU5GT1JNQVRJT04gT1IKK0RBVEEgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9EVUNUUy4gVU5ERVIgTk8KK0NJUkNVTVNUQU5DRVMsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gTkVHTElHRU5DRSwgU0hBTEwgTE1JIEJFCitMSUFCTEUgRk9SIERBTUFHRVMgUkVTVUxUSU5HIEZST00gVVNFIE9GIFRIRSBQUk9EVUNUUywgT1IgUkVMSUFOQ0UgT04gVEhFCitJTkZPUk1BVElPTiBQUkVTRU5URUQgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBQUk9EVUNUUywgRVZFTiBJRiBMTUkgT1IgSVRTCitTVVBQTElFUlMgSEFWRSBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gWU9VIEFORAorVEhFIENPTlRSQUNUSU5HIFBBUlRZIEFHUkVFIE5PVCBUTyBBU1NFUlQgQU5ZIFNVQ0ggQ0xBSU0gQUdBSU5TVCBMTUkgT1IKK0lUUyBTVUJTSURJQVJJRVMgT1IgQUZGSUxJQVRFUyBPUiBUSEVJUiBSRVNQRUNUSVZFIE9GRklDRVJTLCBESVJFQ1RPUlMsCitPUiBFTVBMT1lFRVMuCisKKzcuMiBZT1UgQU5EIFRIRSBDT05UUkFDVElORyBQQVJUWSBFWFBSRVNMWSBBR1JFRSBUSEFUIFlPVVIgVVNFIE9GIFRIRQorUFJPRFVDVFMgSVMgQVQgWU9VUiBPV04gUklTSy4gSU4gTk8gRVZFTlQgU0hBTEwgTE1JJ1MgVE9UQUwgTElBQklMSVRZIEZST00KK0FMTCBEQU1BR0VTLCBMT1NTRVMsIEFORCBDQVVTRVMgT0YgQUNUSU9OIChXSEVUSEVSLCBJTiBDT05UUkFDVCwgVE9SVCBPUgorT1RIRVJXSVNFKSBFWENFRUQgVEhFIEFNT1VOVCBZT1UgUEFJRCBUTyBMTUksIElGIEFOWSwgRk9SIFRIRSBQUk9EVUNUUworRFVSSU5HIFRIRSAxMiBNT05USFMgSU1NRURJQVRFTFkgQkVGT1JFIFRIRSBDTEFJTSBBUk9TRS4gQVBQTElDQUJMRQorTEFXIE1BWSBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIE9SIFRIRSBBQk9WRQorTElNSVRBVElPTlMgT0YgTElBQklMSVRZLCBTTyBUSEUgQUJPVkUgRVhDTFVTSU9OUyBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworNy4zIEFMTCBESVNDTEFJTUVSUywgTElNSVRBVElPTlMgT0YgV0FSUkFOVElFUyBBTkQgREFNQUdFUywgQU5ECitDT05GSURFTlRJQUwgQ09NTUlUTUVOVFMgU0VUIEZPUlRIIElOIFRIRVNFIFRFUk1TIE9SIE9USEVSV0lTRSBFWElTVElORworQVQgTEFXICgxKSBBUkUgT0YgVEhFIEVTU0VOQ0UgT0YgVEhFIEFHUkVFTUVOVCBPRiBUSEUgUEFSVElFUywgQU5EICgyKQorU1VSVklWRSBBTlkgVEVSTUlOQVRJT04sIEVYUElSQVRJT04gT1IgUkVTQ0lTU0lPTiBPRiBUSEVTRSBURVJNUy4KKworOC4gVGl0bGUKKworVGl0bGUsIG93bmVyc2hpcCByaWdodHMgYW5kIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaW4gdGhlIFByb2R1Y3RzCitzaGFsbCByZW1haW4gd2l0aCBMTUkgb3IgaXRzIHN1cHBsaWVycywgYXMgYXBwbGljYWJsZS4gVGhlIFByb2R1Y3RzCithcmUgcHJvdGVjdGVkIGJ5IGNvcHlyaWdodCBhbmQgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3MgYW5kCitieSBpbnRlcm5hdGlvbmFsIHRyZWF0aWVzLiBUaXRsZSBhbmQgcmVsYXRlZCByaWdodHMgaW4gdGhlIGNvbnRlbnQKK2FjY2Vzc2VkIHRocm91Z2ggdGhlIFByb2R1Y3RzIGlzIHRoZSBwcm9wZXJ0eSBvZiB0aGUgYXBwbGljYWJsZSBjb250ZW50Citvd25lciBhbmQgaXMgcHJvdGVjdGVkIGJ5IGFwcGxpY2FibGUgbGF3LiBUaGUgbGljZW5zZXMgZ3JhbnRlZCB1bmRlcgordGhlc2UgVGVybXMgZ2l2ZXMgdGhlIFlvdSBhbmQgdGhlIENvbnRyYWN0aW5nIFBhcnR5IG5vIHJpZ2h0cyB0byBzdWNoCitjb250ZW50LiAiTG9nTWVJbiwiIGFzc29jaWF0ZWQgbG9nb3MsIGFuZCBvdGhlciBuYW1lcywgbG9nb3MsIGljb25zIGFuZAorbWFya3MgaWRlbnRpZnlpbmcgTE1JJ3MgcHJvZHVjdHMgYW5kIHNlcnZpY2VzIGFyZSB0cmFkZW1hcmtzIG9yIHNlcnZpY2UKK21hcmtzIG9mIExNSSAoY29sbGVjdGl2ZWx5IHRoZSAiVHJhZGVtYXJrcyIpIGFuZCBtYXkgbm90IGJlIHVzZWQgd2l0aG91dAordGhlIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiBMTUkuIEFsbCBvdGhlciBwcm9kdWN0IG5hbWVzIG1lbnRpb25lZAorYXJlIHVzZWQgZm9yIGlkZW50aWZpY2F0aW9uIHB1cnBvc2VzIG9ubHkgYW5kIG1heSBiZSB0cmFkZW1hcmtzIG9yCitzZXJ2aWNlIG1hcmtzIG9mIHRoZWlyIHJlc3BlY3RpdmUgaG9sZGVycy4gTm90aGluZyBzaG91bGQgYmUgY29uc3RydWVkCithcyBncmFudGluZywgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsLCBvciBvdGhlcndpc2UsIGFueSBsaWNlbnNlIG9yIHJpZ2h0Cit0byB1c2UgYW55IFRyYWRlbWFyayB3aXRob3V0IHRoZSB3cml0dGVuIHBlcm1pc3Npb24gb2YgTE1JIG9yIHN1Y2ggdGhpcmQKK3BhcnR5IHRoYXQgbWF5IG93biB0aGUgdHJhZGVtYXJrcy4gVXNlIGJ5IFlvdSBhbmQgdGhlIENvbnRyYWN0aW5nIFBhcnR5IG9mCit0aGUgVHJhZGVtYXJrcyBleGNlcHQgYXMgcHJvdmlkZWQgaW4gdGhlc2UgVGVybXMgaXMgc3RyaWN0bHkgcHJvaGliaXRlZC4KKworOS4gRmVlcyBhbmQgUmVuZXdhbHMKKworOS4xIE1vbnRoLXRvLU1vbnRoIFN1YnNjcmlwdGlvbiBieSBDcmVkaXQgQ2FyZCBPbmx5LiBJbiB0aGUgZXZlbnQgdGhhdAorWW91ciBzdWJzY3JpcHRpb24gdG8gdGhlIFNlcnZpY2UgaXMgb24gYSBtb250aGx5IGJhc2lzLCBwYXltZW50IG9mIHRoZQorc3Vic2NyaXB0aW9uIGZlZSB3aWxsIGJlIGJ5IHByZWF1dGhvcml6ZWQgY3JlZGl0IGNhcmQgY2hhcmdlLCBQYXlQYWwKK2NoYXJnZSBvciBkaXJlY3QgZGViaXQsIGFuZCBZb3VyIHN1YnNjcmlwdGlvbiB3aWxsIGF1dG9tYXRpY2FsbHkgcmVuZXcKK2VhY2ggY2FsZW5kYXIgbW9udGggdW5sZXNzIFlvdSBvciBMTUkgZ2l2ZSB3cml0dGVuIChpbmNsdWRpbmcgZW1haWwpCitub3RpY2Ugb2Ygbm9uLXJlbmV3YWwgZHVyaW5nIHRoZSBwcmlvciBjYWxlbmRhciBtb250aC4gWW91ciBjcmVkaXQgY2FyZAord2lsbCBiZSBjaGFyZ2VkIHRoZSBtb250aGx5IGZlZSBmb3IgZWFjaCBtb250aCBvciBwYXJ0aWFsIG1vbnRoIHRoYXQKK1lvdXIgbW9udGhseSBzdWJzY3JpcHRpb24gaXMgaW4gZWZmZWN0LgorCis5LjIgQW5udWFsIFN1YnNjcmlwdGlvbiBieSBDcmVkaXQgQ2FyZC4gSW4gdGhlIGV2ZW50IHRoYXQgWW91cgorc3Vic2NyaXB0aW9uIHRvIHRoZSBTZXJ2aWNlIGlzIGZvciBhIHllYXIgYW5kIHRoZSBwYXltZW50IGlzIGJ5IGNyZWRpdAorY2FyZCwgUGF5UGFsIGNoYXJnZSBvciBkaXJlY3QgZGViaXQsIFlvdXIgc3Vic2NyaXB0aW9uIHdpbGwgYXV0b21hdGljYWxseQorcmVuZXcgYXQgdGhlIGJlZ2lubmluZyBvZiBlYWNoIHN1YnNlcXVlbnQgYW5uaXZlcnNhcnkgeWVhciB1bmxlc3MgWW91IG9yCitMTUkgZ2l2ZSBwcmlvciB3cml0dGVuIChpbmNsdWRpbmcgZW1haWwpIG5vdGljZSBvZiBub24tcmVuZXdhbCBhdCBsZWFzdAorMzAgZGF5cyBwcmlvciB0byB0aGUgZXhwaXJhdGlvbiBvZiBZb3VyIGN1cnJlbnQgeWVhciBzdWJzY3JpcHRpb24uIFVwb24KK2FueSBhbm51YWwgcmVuZXdhbCwgdGhlIHBheW1lbnQgYXJyYW5nZW1lbnRzIGluIHBsYWNlIGZvciB0aGUgcHJpb3IKK3N1YnNjcmlwdGlvbiB5ZWFyIHNoYWxsIHJlbWFpbiBpbiBwbGFjZSwgdW5sZXNzIFlvdSBhbmQgTE1JIGFncmVlCitvdGhlcndpc2UuCisKKzkuMyBBbm51YWwgU3Vic2NyaXB0aW9uIEJ5IEludm9pY2UuIEluIHRoZSBldmVudCB0aGF0IFlvdXIgc3Vic2NyaXB0aW9uCit0byB0aGUgU2VydmljZSBpcyBmb3IgYSB5ZWFyIGFuZCB0aGUgaW5pdGlhbCBwYXltZW50IGlzIGJ5IGNoZWNrIG9yIGJhbmsKK2RyYWZ0IGFnYWluc3QgYW4gaW52b2ljZSBmcm9tIExvZ01lSW4sIHBheW1lbnQgYmVpbmcgZHVlIHdpdGhpbiB0aGlydHkKKygzMCkgZGF5cycgb2YgdGhlIGRhdGUgb2YgaW52b2ljZS4gQWRkaXRpb25hbGx5LCBZb3VyIHN1YnNjcmlwdGlvbiB3aWxsCithdXRvbWF0aWNhbGx5IHJlbmV3IGF0IHRoZSBiZWdpbm5pbmcgb2YgZWFjaCBzdWJzZXF1ZW50IGFubml2ZXJzYXJ5Cit5ZWFyIHVubGVzcyBZb3Ugb3IgTE1JIGdpdmUgcHJpb3Igd3JpdHRlbiAoaW5jbHVkaW5nIGVtYWlsKSBub3RpY2UKK29mIG5vbi1yZW5ld2FsIGF0IGxlYXN0IHRoaXJ0eSAoMzApIGRheXMgcHJpb3IgdG8gdGhlIGV4cGlyYXRpb24gb2YKK3RoZSBjdXJyZW50IHllYXIgc3Vic2NyaXB0aW9uLiBVcG9uIGFueSBhbm51YWwgcmVuZXdhbCwgdGhlIHBheW1lbnQKK2FycmFuZ2VtZW50cyBpbiBwbGFjZSBmb3IgdGhlIHByaW9yIHN1YnNjcmlwdGlvbiB5ZWFyIHNoYWxsIHJlbWFpbgoraW4gcGxhY2UsIHVubGVzcyBZb3UgYW5kIExNSSBhZ3JlZSBvdGhlcndpc2UgYW5kIExNSSB3aWxsIGludm9pY2UgeW91CithY2NvcmRpbmdseS4KKworOS40IEZyZWUgU3Vic2NyaXB0aW9ucy4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcgcHJvdmlzaW9ucyBvZiB0aGVzZQorVGVybXMsIFlvdXIgc3Vic2NyaXB0aW9uIHRvIExvZ01lSW4gRnJlZSBhbmQgdG8gTG9nTWVJbiBIYW1hY2hpIG9yIExvZ01lSW4KK0hhbWFjaGkyIHRoYXQgYXJlIGZyZWUgZG8gbm90IHJlcXVpcmUgdGhlIHBheW1lbnQgb2YgYSBzdWJzY3JpcHRpb24gZmVlLgorCis5LjUgTm8gQ2FuY2VsbGF0aW9uLiBOb3R3aXRoc3RhbmRpbmcgYW55IHByb3Zpc2lvbiBvZiB0aGVzZSBUZXJtcyBvciBhbnkKK2NvdXJzZSBvZiBkZWFsaW5nIGJldHdlZW4gdGhlIHBhcnRpZXMsIFlvdSBhbmQgdGhlIENvbnRyYWN0aW5nIFBhcnR5CittYXkgbm90IGNhbmNlbCwgdGVybWluYXRlIG9yIHJlc2NpbmQgYSBzdWJzY3JpcHRpb24uIEFsbCBwYXltZW50cyBieQorWW91IGFuZCB0aGUgQ29udHJhY3RpbmcgUGFydHksIG9yIGVpdGhlciBvZiB5b3UsIHRvIExNSSBhcmUgZmluYWwuCisKKzkuNiBDcmVkaXQgQ2FyZCBBdXRob3JpemF0aW9uLiBJbiB0aGUgZXZlbnQgdGhhdCBZb3Ugb3IgdGhlIENvbnRyYWN0aW5nCitQYXJ0eSBjYW5jZWwgdGhlIGNyZWRpdCBjYXJkIHByb3ZpZGVkIHRvIExNSSBvciB0aGUgY2FyZCBpcyBvdGhlcndpc2UKK3Rlcm1pbmF0ZWQsIFlvdSBvciB0aGUgQ29udHJhY3RpbmcgUGFydHkgbXVzdCBpbW1lZGlhdGVseSBwcm92aWRlIExNSSB3aXRoCithIG5ldyB2YWxpZCBjcmVkaXQgY2FyZCBudW1iZXIuIFlvdSBhbmQgdGhlIENvbnRyYWN0aW5nIFBhcnR5IGF1dGhvcml6ZQorTE1JLCBmcm9tIHRpbWUgdG8gdGltZSwgdG8gdW5kZXJ0YWtlIHN0ZXBzIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZQorY3JlZGl0IGNhcmQgbnVtYmVyIHByb3ZpZGVkIHRvIExNSSBpcyBhIHZhbGlkIGNyZWRpdCBjYXJkIG51bWJlci4gSW4gdGhlCitldmVudCB0aGF0IFlvdSBvciB0aGUgQ29udHJhY3RpbmcgUGFydHkgZG8gbm90IHByb3ZpZGUgTE1JIHdpdGggYSBjdXJyZW50Cit2YWxpZCBjcmVkaXQgY2FyZCBudW1iZXIgd2l0aCBzdWZmaWNpZW50IGNyZWRpdCB1cG9uIHJlcXVlc3QgZHVyaW5nIHRoZQorZWZmZWN0aXZlIHBlcmlvZCBvZiB0aGVzZSBUZXJtcywgWW91IGFuZCB0aGUgQ29udHJhY3RpbmcgUGFydHkgd2lsbCBiZQoraW4gdmlvbGF0aW9uIG9mIHRoZXNlIFRlcm1zLiAgTE1JIHJlc2VydmVzIHRoZSByaWdodCB0byBhdXRvbWF0aWNhbGx5Cit1cGRhdGUgWW91ciBvciB0aGUgQ29udHJhY3RpbmcgUGFydHnigJlzIGNyZWRpdCBjYXJkIGluZm9ybWF0aW9uIHVzaW5nCitzb2Z0d2FyZSBkZXNpZ25lZCBmb3IgdXBkYXRpbmcgcHVycG9zZXMgYW5kIFlvdSBhbmQgdGhlIENvbnRyYWN0aW5nCitQYXJ0eSBoZXJlYnkgYXV0aG9yaXplIGFuZCBhcHByb3ZlIGFueSBzdWNoIHVwZGF0aW5nLgorCis5LjcgUGF5bWVudCB2aWEgUGF5UGFswq4uIExNSSBhbHNvIGFjY2VwdHMgUGF5UGFsIGZvciBwYXltZW50cyBmcm9tIFBheVBhbAorYWNjb3VudC4gSW4gb3JkZXIgdG8gcGF5IHdpdGggUGF5UGFsLCBZb3Ugb3IgdGhlIENvbnRyYWN0aW5nIFBhcnR5IG5lZWQKK3RvIGhhdmUgYW4gYWNjb3VudCB3aXRoIFBheVBhbC4gV2hlbiBZb3Ugb3IgdGhlIENvbnRyYWN0aW5nIFBhcnR5IHNlbGVjdAorUGF5UGFsIHRvIG1ha2UgcGF5bWVudHMgdGhlIHRyYW5zYWN0aW9uIGlzIHJlLWRpcmVjdGVkIGZyb20gTE1JJ3Mgc2l0ZQordG8gUGF5UGFsJ3MgcGF5bWVudCBzaXRlLiBPbmNlIGRpcmVjdGVkIHRvIFBheVBhbCdzIHNpdGUsIFBheVBhbCBpcworY2hhcmdlZCB3aXRoIHByb3RlY3RpbmcgWW91ciBhbmQgdGhlIENvbnRyYWN0aW5nIFBhcnR5J3MgcGVyc29uYWwgYW5kCitmaW5hbmNpYWwgaW5mb3JtYXRpb24uIFlvdXIgb3IgdGhlIENvbnRyYWN0aW5nIFBhcnR5J3MgUGF5UGFsIGFjY291bnQKK2FuZCBhbnkgYWN0aXZpdGllcyByZWxhdGVkIHRoZXJldG8gYXJlIGdvdmVybmVkIGJ5IFBheVBhbCdzIHRlcm1zIGFuZAorY29uZGl0aW9ucywgYW5kIHRoZSBpbmZvcm1hdGlvbiBwcm92aWRlZCB0byBQYXlQYWwgaW4gcmVsYXRpb24gdGhlcmV0bword2lsbCBiZSBnb3Zlcm5lZCBieSBQYXlQYWwncyBwcml2YWN5IHBvbGljeS4gV2hlbiBQYXlQYWwgaXMgdXNlZCwgWW91cgorYW5kIHRoZSBDb250cmFjdGluZyBQYXJ0eSdzIGZpbmFuY2lhbCBpbmZvcm1hdGlvbiBpcyBub3Qgc2hhcmVkIHdpdGgKK0xNSS4gT25jZSBwYXltZW50IGlzIGNvbXBsZXRlIHZpYSBQYXlQYWwsIFBheVBhbCB3aWxsIGVtYWlsIGEgcmVjZWlwdAorZm9yIHRoaXMgdHJhbnNhY3Rpb24uIExNSSByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVxdWVzdCBwcm9vZiBvZiBpZGVudGl0eQorZnJvbSBhbnkgUGF5UGFsIG1lbWJlci4KKworOS44IFNNUyBNZXNzYWdpbmcuIElmIFlvdSBvciB0aGUgQ29udHJhY3RpbmcgUGFydHkgYXJlIGxpY2Vuc2luZworUmVzY3VlK01vYmlsZSBwdXJzdWFudCB0byB0aGlzIGFncmVlbWVudCwgWW91IGFuZCB0aGUgQ29udHJhY3RpbmcKK1BhcnR5IGFyZSBlbnRpdGxlZCB0byBhIGNvbWJpbmVkIG1heGltdW0gb2Ygb25lIGh1bmRyZWQgKDEwMCkgU01TIHRleHQKK21lc3NhZ2VzIHBlciBzZWF0LCBwZXIgbW9udGggb2YgdGhpcyBhZ3JlZW1lbnQuIElmIFlvdSBvciB0aGUgQ29udHJhY3RpbmcKK1BhcnR5IGV4Y2VlZCB0aGlzIGNvbWJpbmVkIG1heGltdW0gYW1vdW50IHBlciBzZWF0LCBwZXIgbW9udGgsIFlvdQorYW5kIHRoZSBDb250cmFjdGluZyBQYXJ0eSBhZ3JlZSB0byBuZWdvdGlhdGUgaW4gZ29vZCBmYWl0aCB3aXRoIExNSSBhCitjb21tZXJjaWFsbHkgcmVhc29uYWJsZSByYXRlIHBlciB0ZXh0IG1lc3NhZ2Ugb3ZlciBvbmUgaHVuZHJlZCAoMTAwKQorcGVyIHNlYXQsIHBlciBtb250aC4KKworOS45IFBheW1lbnQgRHVlLiBVbmxlc3Mgc3BlY2lmaWNhbGx5IHByb3ZpZGVkIG90aGVyd2lzZSBoZXJlaW4sIHBheW1lbnQKK29mIGFsbCBmZWVzIGFyZSBkdWUgYW5kIHBheWFibGUgdG8gTE1JIHdpdGhvdXQgZGVtYW5kLCBpbnZvaWNpbmcgb3IKK25vdGljZSBiZWZvcmUgdGhlIGNvbW1lbmNlbWVudCBvZiB0aGUgcGVyaW9kIHRvIHdoaWNoIHRob3NlIGZlZXMgYXBwbHkuCisKKzkuMTAgVGF4ZXMuIFlvdSBhbmQgdGhlIENvbnRyYWN0aW5nIFBhcnR5IGFncmVlIHRvIGJlIHJlc3BvbnNpYmxlIGZvcgorYW5kIHRvIHBheSBhbnkgc2FsZXMsIHBlcnNvbmFsIHByb3BlcnR5LCB1c2UsIFZBVCwgZXhjaXNlLCB3aXRoaG9sZGluZywKK29yIGFueSBvdGhlciB0YXhlcyB0aGF0IG1heSBiZSBpbXBvc2VkLCBiYXNlZCBvbiB0aGlzIGxpY2Vuc2UsIHVzZSBvcgorcG9zc2Vzc2lvbiBvZiBhIFByb2R1Y3QsIG9yIGFueSBvdGhlciBwcm9kdWN0IG9yIHNlcnZpY2UgcHJvdmlkZWQgdW5kZXIKK3RoaXMgQWdyZWVtZW50LCBleGNsdWRpbmcgdGF4ZXMgYmFzZWQgb24gbmV0IGluY29tZSBwYXlhYmxlIGJ5IExNSS4KKworOS4xMSBUcmlhbCBPZmZlcnMsIENvdXBvbnMsIENyZWRpdHMgYW5kIFNwZWNpYWwgT2ZmZXJzLiBMTUkgcmVzZXJ2ZXMKK3RoZSByaWdodCB0byBkaXNjb250aW51ZSBvciBtb2RpZnkgYW55IGNvdXBvbnMsIGNyZWRpdHMgYW5kIHNwZWNpYWwKK3Byb21vdGlvbmFsIG9mZmVycyBhdCBvdXIgZGlzY3JldGlvbi4KKworOS4xMiAgSW5mb3JtYXRpb24gUHVyZ2UuICBJZiBZb3Ugb3IgdGhlIENvbnRyYWN0aW5nIFBhcnR5IGZhaWwgdG8gbWFrZQorcmVxdWlyZWQgcGF5bWVudHMgcmVnYXJkaW5nIHlvdXIgYWNjb3VudCBvciBpbiBhbnkgb3RoZXIgd2F5IGJyZWFjaCB0aGVzZQorVGVybXMgb3IgdGhlc2UgVGVybXMgYXJlIHRlcm1pbmF0ZWQgb3IgZXhwaXJlLCBMTUkgbWF5LCBhdCBpdHMgZGlzY3JldGlvbiwKK3B1cmdlIFlvdXIgb3IgdGhlIENvbnRyYWN0aW5nIFBhcnR54oCZcyBkYXRhIGZyb20gaXRzIHN5c3RlbXMsIGluY2x1ZGluZworYnV0IG5vdCBsaW1pdGVkIHRvLCBhY2NvdW50IGluZm9ybWF0aW9uLCB1c2Vycywgc2V0dGluZ3MsIGFuZCBhbnkgZGF0YQorKGZpbGVzLCBldGMuKSB0aGF0IG1heSBiZSBzdG9yZWQgYnkgTE1JLgorCis5LjEzIExvZ01lSW4gSGFtYWNoaSBTdWJzY3JpcHRpb24uIExvZ01lSW4gSGFtYWNoaSBhbmQgTG9nTWVJbgorSGFtYWNoaTIgYXJlIGxpY2Vuc2VkIHVzaW5nIHR3byBkaXN0aW5jdCBtZXRob2RzIGJhc2VkIG9uIHN0YXR1cyBhcworYSBjb21tZXJjaWFsIG9yIG5vbi1jb21tZXJjaWFsIHVzZXIuIENvbW1lcmNpYWwgdXNlcnMgYXJlIGRlZmluZWQKK2FzIGZvci1wcm9maXQgYnVzaW5lc3NlcywgZ292ZXJubWVudCBpbnN0aXR1dGlvbnMgKGZlZGVyYWwsIHN0YXRlLAorbG9jYWwpLCBlZHVjYXRpb25hbCBpbnN0aXR1dGlvbnMgKGluY2x1ZGluZyB1bml2ZXJzaXRpZXMgYW5kIHN0YXRlIG9yCitsb2NhbCBzY2hvb2wgc3lzdGVtcyksIGFueSBpbmRpdmlkdWFscyB1c2luZyB0aGUgcHJvZHVjdCBvbiBiZWhhbGYKK29mIHN1Y2ggZW50aXRpZXMgb3IgaW5zdGl0dXRpb25zIGFuZCBhbnkgb3RoZXIgaW5kaXZpZHVhbCBvciBlbnRpdHkKK25vdCBzcGVjaWZpY2FsbHkgZGVmaW5lZCBhcyBhICJOb24tY29tbWVyY2lhbCB1c2VyIi4gTm9uLWNvbW1lcmNpYWwKK3VzZXJzIGFyZSBkZWZpbmVkIGFzIGluZGl2aWR1YWxzIHVzaW5nIHRoZSBwcm9kdWN0IGZvciBwZXJzb25hbCB1c2UsCitzdWNoIGFzIGEgZ2FtaW5nIG9yIGZhbWlseSBuZXR3b3JrLCBhbmQgbm9uLXByb2ZpdCBpbnN0aXR1dGlvbnMKKyhhcyBkZWZpbmVkIGJ5IHRoZSBJUlMgYXMgYSA1MDFjIGNvcnBvcmF0aW9uIG9yIHNpbWlsYXJseSBzaXR1YXRlZAoraW50ZXJuYXRpb25hbCBub24tcHJvZml0cykuIENvbW1lcmNpYWwgdXNlcnMgbXVzdCBwYXkgTE1JIGEgbW9udGhseSBvcgorYW5udWFsIHN1YnNjcmlwdGlvbiBmZWUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBoZXJlb2YgaW4gb3JkZXIgdG8KK3VzZSBMb2dNZUluIEhhbWFjaGkgb3IgTG9nTWVJbiBIYW1hY2hpMi4gTm9uLWNvbW1lcmNpYWwgdXNlcnMgbWF5IHVzZQorTG9nTWVJbiBIYW1hY2hpIG9yIExvZ01lSW4gSGFtYWNoaTIgZnJlZSBvZiBjaGFyZ2UgYW5kIHdpdGhvdXQgdGhlIG5lZWQKK3RvIHBheSBhbnkgc3Vic2NyaXB0aW9uIGZlZS4gUHJpb3IgdG8gc3Vic2NyaWJpbmcgdG8gTG9nTWVJbiBIYW1hY2hpCitvciBMb2dNZUluIEhhbWFjaGkyLCBZb3UvdGhlIENvbnRyYWN0aW5nIFBhcnR5IHdpbGwgYmUgYXNrZWQgdG8gdmVyaWZ5CitzdGF0dXMgYXMgYSBjb21tZXJjaWFsIG9yIG5vbi1jb21tZXJjaWFsIHVzZXIuIEFsbCBmaW5hbCBkZXRlcm1pbmF0aW9ucworc2hhbGwgYmUgbWFkZSBieSBMTUkgaW4gaXRzIHNvbGUgZGlzY3JldGlvbi4gTE1JIHJlc2VydmVzIHRoZSByaWdodCwKK2luIGFjY29yZGFuY2Ugd2l0aCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNlLCB0byBkaXNjb250aW51ZSBhbnkKK3N1YnNjcmlwdGlvbiB0byBMb2dNZUluIEhhbWFjaGkgb3IgTG9nTWVJbiBIYW1hY2hpMi4KKworMTAuIFRlcm1pbmF0aW9uCisKK0xNSSBtYXkgaW4gaXRzIHNvbGUgZGlzY3JldGlvbiBpbW1lZGlhdGVseSB0ZXJtaW5hdGUgdGhlc2UgVGVybXMgYW5kIHRoaXMKK3N1YnNjcmlwdGlvbiwgbGljZW5zZSBhbmQgcmlnaHQgdG8gdXNlIGFueSBQcm9kdWN0IGlmIChpKSB0aGUgQ29udHJhY3RpbmcKK1BhcnR5IGRlY2xhcmVzIGJhbmtydXB0Y3ksIGlzIGludm9sdmVkIGluIGFueSBiYW5rcnVwdGN5IHByb2NlZWRpbmdzIG9yCitpcyBvdGhlcndpc2UgaW5zb2x2ZW50LCAoaWkpIFlvdSBvciB0aGUgQ29udHJhY3RpbmcgUGFydHkgYnJlYWNoIHRoZXNlCitUZXJtczsgKGlpaSkgTE1JIGlzIHVuYWJsZSB0byB2ZXJpZnkgb3IgYXV0aGVudGljYXRlIGFueSBpbmZvcm1hdGlvbiBZb3UKK3Byb3ZpZGUgdG8gTE1JOyAoaXYpIHN1Y2ggaW5mb3JtYXRpb24gaXMgb3IgYmVjb21lcyBpbmFjY3VyYXRlOyBvciAodikgTE1JCitkZWNpZGVzLCBpbiBpdHMgc29sZSBkaXNjcmV0aW9uLCB0byBkaXNjb250aW51ZSBvZmZlcmluZyB0aGUgUHJvZHVjdC4gTE1JCitzaGFsbCBub3QgYmUgbGlhYmxlIHRvIFlvdSwgdGhlIENvbnRyYWN0aW5nIFBhcnR5IG9yIGFueSB0aGlyZCBwYXJ0eSBmb3IKK3Rlcm1pbmF0aW9uIG9mIHRoZSBTZXJ2aWNlIG9yIHVzZSBvZiB0aGUgUHJvZHVjdHMuIFVwb24gZXhwaXJhdGlvbiBvcgordGVybWluYXRpb24gZm9yIGFueSByZWFzb24sIFlvdSBhbmQgdGhlIENvbnRyYWN0aW5nIFBhcnR5IGFyZSBubyBsb25nZXIKK2F1dGhvcml6ZWQgdG8gdXNlIHRoZSBQcm9kdWN0cy4gV2hlbiB0aGVzZSBUZXJtcyBhcmUgdGVybWluYXRlZCBhbmQvb3IKK3RoZSBzdWJzY3JpcHRpb24gaXMgY2FuY2VsZWQsIFlvdSBhbmQgdGhlIENvbnRyYWN0aW5nIFBhcnR5IHdpbGwgbm8gbG9uZ2VyCitoYXZlIGFjY2VzcyB0byBkYXRhIGFuZCBvdGhlciBtYXRlcmlhbCBZb3Ugb3IgdGhlIENvbnRyYWN0aW5nIFBhcnR5IGhhdmUKK3N0b3JlZCBpbiBjb25uZWN0aW9uIHdpdGggYW55IFNlcnZpY2UgYW5kIHRoYXQgbWF0ZXJpYWwgbWF5IGJlIGRlbGV0ZWQKK2J5IExNSS4gQWxsIGRpc2NsYWltZXJzLCBsaW1pdGF0aW9ucyBvZiB3YXJyYW50aWVzIGFuZCBkYW1hZ2VzLCBhbmQKK2NvbmZpZGVudGlhbCBjb21taXRtZW50cyBzZXQgZm9ydGggaW4gdGhlc2UgVGVybXMgb3Igb3RoZXJ3aXNlIGV4aXN0aW5nCithdCBsYXcgc3Vydml2ZSBhbnkgdGVybWluYXRpb24sIGV4cGlyYXRpb24gb3IgcmVzY2lzc2lvbiBvZiB0aGVzZSBUZXJtcy4KKworMTEuIE1haW50ZW5hbmNlIGFuZCBVcGRhdGVzCisKK1lvdSB1bmRlcnN0YW5kIHRoYXQgTE1JIG1heSB1cGRhdGUgdGhlIFByb2R1Y3RzIGF0IGFueSB0aW1lLCBidXQgaXMgdW5kZXIKK25vIG9ibGlnYXRpb24gdG8gaW5mb3JtIFlvdSBvciB0aGUgQ29udHJhY3RpbmcgUGFydHkgb2Ygb3IgZnVybmlzaCB0bworWW91IG9yIHRoZSBDb250cmFjdGluZyBQYXJ0eSBhbnkgc3VjaCB1cGRhdGVzLiBUaGVzZSBUZXJtcyBkbyBub3QgZ3JhbnQKK1lvdSBvciB0aGUgQ29udHJhY3RpbmcgUGFydHkgYW55IHJpZ2h0LCBsaWNlbnNlIG9yIGludGVyZXN0IGluIG9yIHRvCithbnkgc3VwcG9ydCwgbWFpbnRlbmFuY2UsIGltcHJvdmVtZW50cywgbW9kaWZpY2F0aW9ucywgZW5oYW5jZW1lbnRzCitvciB1cGRhdGVzIHRvIHRoZSBQcm9kdWN0cyBvciBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIFRvIHRoZSBleHRlbnQKK3RoYXQgTE1JIHN1cHBsaWVzIGFueSB1cGRhdGVzIHRvIFlvdSBvciB0aGUgQ29udHJhY3RpbmcgUGFydHksIHN1Y2gKK3VwZGF0ZXMgd2lsbCBiZSBkZWVtZWQgdG8gYmUgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlc2UgVGVybXMgdW5sZXNzCitMTUkgaW5kaWNhdGVzIG90aGVyd2lzZS4gTE1JIHJlc2VydmVzIHRoZSByaWdodCB0byBjaGFyZ2UgZmVlcyBmb3IgYW55CitmdXR1cmUgdmVyc2lvbnMgb2YsIG9yIHVwZGF0ZXMgdG8sIHRoZSBQcm9kdWN0cy4KKworMTIuIEV4cG9ydCBMYXcgQXNzdXJhbmNlcworCitUaGUgUHJvZHVjdHMgYXJlIHN1YmplY3QgdG8gdGhlIFVuaXRlZCBTdGF0ZXMgRXhwb3J0IEFkbWluaXN0cmF0aW9uCitSZWd1bGF0aW9ucy4gTm8gU29mdHdhcmUgb3IgU2VydmljZSBtYXkgYmUgZG93bmxvYWRlZCwgdXNlZCBvciBleHBvcnRlZAorKGkpIGludG8gKG9yIHRvIGEgbmF0aW9uYWwgb3IgcmVzaWRlbnQgb2YpIEN1YmEsIElyYW4sIE5vcnRoIEtvcmVhLCBTdWRhbiwKK1N5cmlhLCBvciBhbnkgb3RoZXIgY291bnRyeSB0byB3aGljaCB0aGUgVW5pdGVkIFN0YXRlcyBoYXMgZW1iYXJnb2VkCitnb29kczsgb3IgKGlpKSBhbnkgcGVyc29uIG9yIGVudGl0eSBvbiB0aGUgVW5pdGVkIFN0YXRlcyBUcmVhc3VyeQorRGVwYXJ0bWVudCdzIGxpc3Qgb2YgU3BlY2lhbGx5IERlc2lnbmF0ZWQgTmF0aW9uYWxzIG9yIHRoZSBVLlMuIENvbW1lcmNlCitEZXBhcnRtZW50J3MgRGVuaWVkIFBlcnNvbnMgTGlzdCBvciBFbnRpdHkgTGlzdCwgb3Igb3RoZXJ3aXNlIGRlc2lnbmF0ZWQKK2FzIHByb2hpYml0ZWQgZnJvbSByZWNlaXZpbmcgVS5TLiBleHBvcnRzLiBCeSBzdWJzY3JpYmluZyB0byB0aGUgU2VydmljZQorb3IgdXNpbmcgYW55IG9mIHRoZSBTb2Z0d2FyZSwgWW91IGFuZCB0aGUgQ29udHJhY3RpbmcgUGFydHkgcmVwcmVzZW50CithbmQgd2FycmFudCB0aGF0IHlvdSBhbmQgaXQgYXJlIG5vdC0gYW5kIGFyZSBub3QgY29udHJvbGxlZCBieSAtIGFueQorc3VjaCBwZXJzb24gb3IgZW50aXR5IGFuZCBhcmUgbm90IGNvbnRyb2xsZWQgYnkgYSBuYXRpb25hbCBvciByZXNpZGVudAorb2YgYW55IHN1Y2ggY291bnRyeS4KKworMTMuIEhpZ2ggUmlzayBBY3Rpdml0aWVzCisKK1RoZSBQcm9kdWN0cyBhcmUgbm90IGZhdWx0LXRvbGVyYW50IGFuZCBhcmUgbm90IGRlc2lnbmVkLCBtYW51ZmFjdHVyZWQKK29yIGludGVuZGVkIGZvciB1c2Ugb3IgcmVzYWxlIGFzIG9yIHdpdGggb24tbGluZSBjb250cm9sIGVxdWlwbWVudCBpbgoraGF6YXJkb3VzIGVudmlyb25tZW50cyByZXF1aXJpbmcgZmFpbC1zYWZlIHBlcmZvcm1hbmNlLCBzdWNoIGFzIGluIHRoZQorb3BlcmF0aW9uIG9mIG51Y2xlYXIgZmFjaWxpdGllcywgYWlyY3JhZnQgbmF2aWdhdGlvbiBvciBjb21tdW5pY2F0aW9uCitzeXN0ZW1zLCBhaXIgdHJhZmZpYyBjb250cm9sLCBkaXJlY3QgbGlmZSBzdXBwb3J0IG1hY2hpbmVzIG9yIHdlYXBvbgorc3lzdGVtcyBpbiB3aGljaCB0aGUgZmFpbHVyZSBvZiB0aGUgUHJvZHVjdHMgY291bGQgbGVhZCBkaXJlY3RseSB0byBkZWF0aCwKK3BlcnNvbmFsIGluanVyeSBvciBzZXZlcmUgcGh5c2ljYWwgb3IgZW52aXJvbm1lbnRhbCBkYW1hZ2UgKCJIaWdoIFJpc2sKK0FjdGl2aXRpZXMiKS4gQWNjb3JkaW5nbHksIExNSSBhbmQgaXRzIHN1cHBsaWVycyBzcGVjaWZpY2FsbHkgZGlzY2xhaW0KK2FueSBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkgb2YgZml0bmVzcyBmb3IgSGlnaCBSaXNrIEFjdGl2aXRpZXMuCisKKzE0LiBNaXNjZWxsYW5lb3VzCisKKzE0LjEgVGhlc2UgVGVybXMgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgdGhlIHN1YmplY3QKK21hdHRlciBvZiB0aGUgVGVybXMgYW5kIGxpY2Vuc2UgZ3JhbnRlZCBoZXJldW5kZXIgYW5kLCBleGNlcHQgYXMgc2V0IGZvcnRoCitoZXJlaW4sIG1heSBiZSBhbWVuZGVkIG9ubHkgYnkgYSB3cml0aW5nIGV4ZWN1dGVkIGJ5IGJvdGggcGFydGllcy4gWW91IGFuZAordGhlIENvbnRyYWN0aW5nIFBhcnR5IHVuZGVyc3RhbmQgYW5kIGFncmVlIHRoYXQgWW91IGFuZCB0aGUgQ29udHJhY3RpbmcKK1BhcnR5IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIHBlcmlvZGljYWxseSByZXZpZXdpbmcgdGhlc2UgVGVybXMuCisKKzE0LjIgVGhlc2UgVGVybXMgc2hhbGwgYmUgZ292ZXJuZWQgYnkgYW5kIGNvbnN0cnVlZCBpbiBhY2NvcmRhbmNlIHdpdGgKK3RoZSBsYXdzIG9mIHRoZSBDb21tb253ZWFsdGggb2YgTWFzc2FjaHVzZXR0cyBhbmQgdGhlIGxhd3Mgb2YgdGhlCitVbml0ZWQgU3RhdGVzLCB3aXRob3V0IGdpdmluZyBlZmZlY3QgdG8gYW55IHByaW5jaXBsZXMgb2YgY29uZmxpY3QKK29mIGxhdy4gWW91IGFuZCB0aGUgQ29udHJhY3RpbmcgUGFydHkgYWdyZWUgdGhhdCBhbnkgYWN0aW9uIGF0IGxhdworb3IgaW4gZXF1aXR5IGFyaXNpbmcgb3V0IG9mIG9yIHJlbGF0aW5nIHRvIHRoZXNlIFRlcm1zIHNoYWxsIGJlIGZpbGVkCitvbmx5IGluIHRoZSBzdGF0ZSBvciBmZWRlcmFsIGNvdXJ0cyBsb2NhdGVkIGluIEJvc3RvbiwgTWFzc2FjaHVzZXR0cywKK2FuZCBZb3UgYW5kIHRoZSBDb250cmFjdGluZyBQYXJ0eSBoZXJlYnkgY29uc2VudCBhbmQgc3VibWl0IHRvIHRoZQorcGVyc29uYWwganVyaXNkaWN0aW9uIG9mIHN1Y2ggY291cnRzIGZvciB0aGUgcHVycG9zZXMgb2YgbGl0aWdhdGluZworYW55IHN1Y2ggYWN0aW9uLiBUaGUgcGFydGllcyBzcGVjaWZpY2FsbHkgZGlzY2xhaW0gYXBwbGljYWJpbGl0eSBvZiAoaSkKK3RoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIHRoZSBTYWxlIG9mIEdvb2RzIGFuZCAoaWkpIGFueSBJbmNvdGVybXMuCisKKzE0LjMgSWYgYW55IG9mIHRoZSBwcm92aXNpb25zIG9mIHRoZXNlIFRlcm1zIHNoYWxsIGJlIHVubGF3ZnVsLCB2b2lkLAorb3IgZm9yIGFueSByZWFzb24gdW5lbmZvcmNlYWJsZSwgdGhlbiB0aGF0IHByb3Zpc2lvbiBzaGFsbCBiZSBkZWVtZWQKK3NldmVyYWJsZSBmcm9tIHRoZXNlIFRlcm1zIGFuZCBzaGFsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBhbmQKK2VuZm9yY2VhYmlsaXR5IG9mIGFueSByZW1haW5pbmcgcHJvdmlzaW9ucy4KKworMTQuNCBMTUkgc2hhbGwgaGF2ZSB0aGUgcmlnaHQgdG8gcHVibGlzaCB0aGUgaWRlbnRpZmljYXRpb24gb2YgWW91IGFuZAordGhlIENvbnRyYWN0aW5nIFBhcnR5IGFzIHVzZXJzIG9mIHRoZSBTZXJ2aWNlLiBZb3UgYW5kIHRoZSBDb250cmFjdGluZworUGFydHkgYWdyZWUgdGhhdCBMTUkgbWF5IHVzZSBhbnkgbG9nbyBhbmQvb3IgbmFtZSBhc3NvY2lhdGVkIHdpdGggWW91CitvciB0aGUgQ29udHJhY3RpbmcgUGFydHkgb24gTE1JJ3Mgd2ViIHNpdGUgYW5kIG90aGVyIG1hcmtldGluZyBtYXRlcmlhbHMKK2luIG9yZGVyIHRvIGlkZW50aWZ5IFlvdSBhbmQgdGhlIENvbnRyYWN0aW5nIFBhcnR5IGFzIExNSSdzIGN1c3RvbWVycy4KKworMTQuNSBOb3RpY2VzIGJ5IExNSSB0byBZb3Ugb3IgdGhlIENvbnRyYWN0aW5nIFBhcnR5IG1heSBiZSBzZW50IHRvCit0aGUgZW1haWwgYWRkcmVzcyBZb3UgcHJvdmlkZSBvbiB0aGUgUmVnaXN0cmF0aW9uIEZvcm0gb3Igb3RoZXJ3aXNlIGJ5CithbnkgbWVhbnMgdGhhdCBMTUkgZGV0ZXJtaW5lcyBpbiBpdHMgc29sZSBkaXNjcmV0aW9uIGFzIGxpa2VseSB0byBjb21lCit0byBZb3VyIGF0dGVudGlvbi4gQWxsIG5vdGljZXMgYnkgWW91IG9yIHRoZSBDb250cmFjdGluZyBQYXJ0eSBzZW50IHRvCitMTUkgaW4gY29ubmVjdGlvbiB3aXRoIHRoZXNlIFRlcm1zIHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kIHNlbnQgYnkgZmlyc3QKK2NsYXNzIG1haWwgb3IgY2VydGlmaWVkIG1haWwgKHJlY2VpcHQgYmVpbmcgZGVlbWVkIDcyIGhvdXJzIGFmdGVyIHBvc3RhZ2UKK2FuZCByZXR1cm4gcmVjZWlwdCByZXF1ZXN0ZWQpIG9yIHBlcnNvbmFsbHkgZGVsaXZlcmVkIGF0IHRoZSBhZGRyZXNzIG9mCitMTUkgc2V0IGZvcnRoIGhlcmVpbi4KKworMTQuNiBZb3UgYW5kIHRoZSBDb250cmFjdGluZyBQYXJ0eSBhZ3JlZSBub3QgdG8gYnJpbmcgb3IgcGFydGljaXBhdGUKK2luIGFueSBjbGFzcyBhY3Rpb24gbGF3c3VpdCBhZ2FpbnN0IExNSSBvciBhbnkgb2YgaXRzIGVtcGxveWVlcyBvcgorYWZmaWxpYXRlcy4gWW91IGFuZCB0aGUgQ29udHJhY3RpbmcgUGFydHkgYWdyZWUgdGhhdCB5b3Ugd2lsbCBub3QgYnJpbmcgYQorY2xhaW0gdW5kZXIgdGhlc2UgVGVybXMgbW9yZSB0aGFuIHR3byB5ZWFycyBhZnRlciB0aGUgZXhwaXJhdGlvbiBvZiB0aGVzZQorVGVybXMuIFRoZSBmYWlsdXJlIG9mIExNSSB0byBwYXJ0aWFsbHkgb3IgZnVsbHkgZXhlcmNpc2UgYW55IHJpZ2h0IHNoYWxsCitub3QgcHJldmVudCB0aGUgc3Vic2VxdWVudCBleGVyY2lzZSBvZiBzdWNoIHJpZ2h0LiBUaGUgd2FpdmVyIGJ5IExNSSBvZgorYW55IGJyZWFjaCBzaGFsbCBub3QgYmUgZGVlbWVkIGEgd2FpdmVyIG9mIGFueSBzdWJzZXF1ZW50IGJyZWFjaCBvZiB0aGUKK3NhbWUgb3IgYW55IG90aGVyIHRlcm0gb2YgdGhlc2UgVGVybXMuIE5vIHJlbWVkeSBtYWRlIGF2YWlsYWJsZSB0byBMTUkKK2J5IGFueSBvZiB0aGUgcHJvdmlzaW9ucyBvZiB0aGVzZSBUZXJtcyBpcyBpbnRlbmRlZCB0byBiZSBleGNsdXNpdmUgb2YKK2FueSBvdGhlciByZW1lZHksIGFuZCBlYWNoIGFuZCBldmVyeSByZW1lZHkgc2hhbGwgYmUgY3VtdWxhdGl2ZSBhbmQgaW4KK2FkZGl0aW9uIHRvIGV2ZXJ5IG90aGVyIHJlbWVkeSBhdmFpbGFibGUgYXQgbGF3IG9yIGluIGVxdWl0eS4KKworMTQuNyBZb3UgYW5kIHRoZSBDb250cmFjdGluZyBQYXJ0eSBhY2tub3dsZWRnZSBhbmQgYWdyZWUgdGhhdCBMTUkgaXMKK2luIHRoZSBidXNpbmVzcyBvZiBwcm92aWRpbmcgcmVtb3RlIGFjY2VzcyBzb2x1dGlvbnMgYW5kIHRoYXQgTE1JIG1heQorcHJvdmlkZSBzZXJ2aWNlcyB0byB0aGlyZCBwYXJ0aWVzLCBpbmNsdWRpbmcgY29tcGV0aXRvcnMgb2YgWW91IGFuZCB0aGUKK0NvbnRyYWN0aW5nIFBhcnR5LCB3aGljaCBhcmUgdGhlIHNhbWUgb3Igc2ltaWxhciB0byB0aGUgc2VydmljZXMgcHJvdmlkZWQKK3RvIFlvdSBhbmQgdGhlIENvbnRyYWN0aW5nIFBhcnR5IGhlcmV1bmRlci4KKworMTUuIEluZGVtbmlmaWNhdGlvbgorCitZb3UgYW5kIHRoZSBDb250cmFjdGluZyBQYXJ0eSBhcmUgcmVzcG9uc2libGUgZm9yIG1haW50YWluaW5nIHRoZQorY29uZmlkZW50aWFsaXR5IG9mIFlvdXIgYWNjb3VudCBhbmQgcGFzc3dvcmQocykuIFlvdSBhbmQgdGhlIENvbnRyYWN0aW5nCitQYXJ0eSBhcmUgYWxzbyByZXNwb25zaWJsZSBmb3IgYWxsIGFjdGl2aXRpZXMgdGhhdCBvY2N1ciB1bmRlciBZb3VyCithY2NvdW50LiBZb3UgYW5kIHRoZSBDb250cmFjdGluZyBQYXJ0eSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5LCBkZWZlbmQKK2FuZCBob2xkIExNSSBhbmQgaXRzIGFmZmlsaWF0ZXMsIGVtcGxveWVlcywgb2ZmaWNlcnMsIGRpcmVjdG9ycywgb3duZXJzLAoraW5mb3JtYXRpb24gcHJvdmlkZXJzLCBhZ2VudHMsIGxpY2Vuc2VlcywgbGljZW5zb3JzICh0aGUgIkluZGVtbmlmaWVkCitQYXJ0aWVzIikgaGFybWxlc3MgZnJvbSBhbmQgYWdhaW5zdCBhbnkgYW5kIGFsbCBsaWFiaWxpdGllcywgY2xhaW1zLAorY29zdHMsIGluY2x1ZGluZyByZWFzb25hYmxlIGF0dG9ybmV5cycgZmVlcywgaW5jdXJyZWQgYnkgdGhlIEluZGVtbmlmaWVkCitQYXJ0aWVzIGluIGNvbm5lY3Rpb24gd2l0aCBhbnkgZGVtYW5kLCBjbGFpbXMsIGFjdGlvbiwgc3VpdCwgb3IgbG9zcworYXJpc2luZyBhcyBhIHJlc3VsdCBvZiAoYSkgYW55IGJyZWFjaCBieSBZb3Ugb3IgdGhlIENvbnRyYWN0aW5nIFBhcnR5IG9mCit0aGVzZSB0ZXJtcyBvZiB1c2Ugb3IgY2xhaW1zIGFyaXNpbmcgZnJvbSBZb3VyIG9yIHRoZSBDb250cmFjdGluZyBQYXJ0eSdzCithY2NvdW50OyAoYikgYW55IGZyYXVkIG9yIG1hbmlwdWxhdGlvbiBieSBZb3Ugb3IgdGhlIENvbnRyYWN0aW5nIFBhcnR5OworKGMpIGEgdGhpcmQtcGFydHkgY2xhaW0sIGFjdGlvbiBvciBhbGxlZ2F0aW9uIG9mIGluZnJpbmdlbWVudCBiYXNlZAorb24gaW5mb3JtYXRpb24sIGRhdGEsIGZpbGVzIG9yIG90aGVyIGNvbnRlbnQgc3VibWl0dGVkIGJ5IFlvdSBvciB0aGUKK0NvbnRyYWN0aW5nIFBhcnR5OyBvciAoZCkgYW55IGNsYWltcyBvZiBjcmVkaXQgY2FyZCBmcmF1ZCBiYXNlZCBvbgorYW55IGluZm9ybWF0aW9uIHJlbGVhc2VkIGJ5IFlvdSBvciB0aGUgQ29udHJhY3RpbmcgUGFydHkuIFlvdSBhbmQgdGhlCitDb250cmFjdGluZyBQYXJ0eSBhZ3JlZSB0byB1c2UgYmVzdCBlZmZvcnRzIHRvIGNvb3BlcmF0ZSB3aXRoIExNSSBpbiB0aGUKK2RlZmVuc2Ugb2YgYW55IGRlbWFuZCwgY2xhaW0sIGFjdGlvbiBvciBzdWl0LiBMTUkgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvCithc3N1bWUgdGhlIGV4Y2x1c2l2ZSBkZWZlbnNlIG9mIGFueSBtYXR0ZXIgc3ViamVjdCB0byBpbmRlbW5pZmljYXRpb24KK2J5IFlvdSBhbmQgdGhlIENvbnRyYWN0aW5nIFBhcnR5IGF0IExNSSdzIG93biBleHBlbnNlLgorCisxNi4gQ29uZmlkZW50aWFsaXR5CisKK1lvdSBhbmQgdGhlIENvbnRyYWN0aW5nIFBhcnR5IHNoYWxsIG1haW50YWluIHRoZSBjb25maWRlbnRpYWxpdHkgb2YKK2luZm9ybWF0aW9uIHRoYXQgaGFzIGJlZW4sIGFuZCB3aWxsIGNvbnRpbnVlIHRvIGJlLCBwcm92aWRlZCB0byBZb3UgYnkKK0xNSSBpbiBjb25uZWN0aW9uIHdpdGggdGhlIHVzZSBvZiB0aGUgUHJvZHVjdHMuIFlvdSBhbmQgdGhlIENvbnRyYWN0aW5nCitQYXJ0eSBzcGVjaWZpY2FsbHkgYWdyZWUgYXMgZm9sbG93czoKKworMTYuMSBPYmxpZ2F0aW9ucy4gWW91IGFuZCB0aGUgQ29udHJhY3RpbmcgUGFydHkgc2hhbGwgKGEpIG1haW50YWluCitpbiBjb25maWRlbmNlIGFsbCBzdWNoIGluZm9ybWF0aW9uLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZQorU29mdHdhcmUgYW5kIFByb2R1Y3RzLCAoYikgbm90IGRpc2Nsb3NlIGFueSBzdWNoIGluZm9ybWF0aW9uIHRvIGFueW9uZQorZXhjZXB0IFlvdXIgZW1wbG95ZWVzLCBhZ2VudHMsIGFuZCBjb25zdWx0YW50cyBvbiBhIG5lZWQtdG8ta25vdyBiYXNpcworKGFuZCB3aG8gaGF2ZSBiZWVuIGluZm9ybWVkIG9mIGFuZCBhY2tub3dsZWRnZSB0aGVpciBvYmxpZ2F0aW9uIHRvIGJlCitib3VuZCBieSB0aGUgdGVybXMgb2YgdGhlc2UgY29uZmlkZW50aWFsaXR5IHRlcm1zKSwgYW5kIChjKSBub3QgdXNlIExNSSdzCitjb25maWRlbnRpYWwgaW5mb3JtYXRpb24gZm9yIGFueSBwdXJwb3NlIG90aGVyIHRoYW4gdGhhdCBmb3Igd2hpY2ggaXQgaXMKK2Rpc2Nsb3NlZC4gQWxsIGNvbmZpZGVudGlhbCBpbmZvcm1hdGlvbiBzaGFsbCByZW1haW4gdGhlIHNvbGUgcHJvcGVydHkKK29mIExNSS4gWW91IGFuZCB0aGUgQ29udHJhY3RpbmcgUGFydHkgc2hhbGwgaGF2ZSBubyByaWdodCwgdGl0bGUsIG9yCitpbnRlcmVzdCBpbiBvciB0byB0aGUgY29uZmlkZW50aWFsIGluZm9ybWF0aW9uLgorCisxNi4yIENvbmZpZGVudGlhbCBJbmZvcm1hdGlvbi4gSW5mb3JtYXRpb24gY29uc2lkZXJlZCBjb25maWRlbnRpYWwgYnkKK0xNSSBpbmNsdWRlcywgd2l0aG91dCBsaW1pdGF0aW9uLCBpbmZvcm1hdGlvbiBvZiBMTUkgcmVsYXRpbmcgdG8gKGEpCittYXR0ZXJzIG9mIGEgdGVjaG5pY2FsIG5hdHVyZSBzdWNoIGFzIHRyYWRlIHNlY3JldCBwcm9jZXNzZXMgb3IgZGV2aWNlcywKK2tub3ctaG93LCBkYXRhLCBmb3JtdWxhcywgaW52ZW50aW9ucyAod2hldGhlciBvciBub3QgcGF0ZW50YWJsZSBvcgorY29weXJpZ2h0ZWQpLCBzcGVjaWZpY2F0aW9ucyBhbmQgY2hhcmFjdGVyaXN0aWNzIG9mIHByb2R1Y3RzIG9yIHNlcnZpY2VzCitwbGFubmVkIG9yIGJlaW5nIGRldmVsb3BlZCwgYW5kIHJlc2VhcmNoIHN1YmplY3RzLCBtZXRob2RzIGFuZCByZXN1bHRzLAorKGIpIG1hdHRlcnMgb2YgYSBidXNpbmVzcyBuYXR1cmUgc3VjaCBhcyBpbmZvcm1hdGlvbiBhYm91dCBjb3N0cywKK3Byb2ZpdHMsIHByaWNpbmcsIHBvbGljaWVzLCBtYXJrZXRzLCBzYWxlcywgc3VwcGxpZXJzLCBjdXN0b21lcnMsCitwcm9kdWN0IHBsYW5zLCBhbmQgYnVzaW5lc3MgY29uY2VwdHMsIHBsYW5zIG9yIHN0cmF0ZWdpZXMsIChjKSBtYXR0ZXJzCitvZiBhIGh1bWFuIHJlc291cmNlcyBuYXR1cmUgc3VjaCBhcyBlbXBsb3ltZW50IHBvbGljaWVzIGFuZCBwcmFjdGljZXMsCitwZXJzb25uZWwsIGNvbXBlbnNhdGlvbiBhbmQgZW1wbG95ZWUgYmVuZWZpdHMsIChkKSBvdGhlciBpbmZvcm1hdGlvbiBvZgorYSBzaW1pbGFyIG5hdHVyZSBub3QgZ2VuZXJhbGx5IGRpc2Nsb3NlZCBieSBMTUkgdG8gdGhlIHB1YmxpYyBvciBvdGhlcgoraW5mb3JtYXRpb24gWW91IG9yIHRoZSBDb250cmFjdGluZyBQYXJ0eSBzaG91bGQgcmVhc29uYWJseSBiZWxpZXZlIHRoZQorYmUgY29uZmlkZW50aWFsIGdpdmVuIHRoZSBjaXJjdW1zdGFuY2VzLCAoZSkgaW5mb3JtYXRpb24gY29uY2VybmluZyBZb3VyCit1c2Ugb2YgdGhlIFByb2R1Y3RzLCBhbmQgKGYpIHRoZSBQcm9kdWN0cy4KKworMTYuMyBFeGNsdXNpb25zLiBUaGUgb2JsaWdhdGlvbnMgaW1wb3NlZCBieSB0aGVzZSBjb25maWRlbnRpYWxpdHkgdGVybXMKK3NoYWxsIG5vdCBhcHBseSB0byBhbnkgaW5mb3JtYXRpb24gdGhhdCAoYSkgaXMgcHJvdmVuIGJ5IFlvdSB0byBoYXZlCitiZWVuIHJpZ2h0ZnVsbHkgcmVjZWl2ZWQgZnJvbSBhIHRoaXJkIHBhcnR5IHdpdGhvdXQgYWNjb21wYW55aW5nIHVzZQorb3IgZGlzY2xvc3VyZSByZXN0cmljdGlvbnM7IG9yIChiKSBpcyBvciBiZWNvbWVzIGdlbmVyYWxseSBwdWJsaWNseQorYXZhaWxhYmxlIHRocm91Z2ggbm8gd3JvbmdmdWwgYWN0IG9mIFlvdSBvciB0aGUgQ29udHJhY3RpbmcgUGFydHkgb3IKK2FueSBvdGhlciBwZXJzb24gb3IgZW50aXR5IHdpdGggYSBjb25maWRlbnRpYWxpdHkgb2JsaWdhdGlvbjsgb3IgKGMpCitpcyBhbHJlYWR5IGtub3duIHRvIFlvdSBwcmlvciB0byB0aGUgZGF0ZSBvZiBkaXNjbG9zdXJlIGFzIGV2aWRlbmNlZCBieQorZG9jdW1lbnRhdGlvbiBiZWFyaW5nIGEgZGF0ZSBwcmlvciB0byB0aGUgZGF0ZSBvZiBkaXNjbG9zdXJlOyBvciAoZCkgaXMKK2FwcHJvdmVkIGZvciByZWxlYXNlIGluIHdyaXRpbmcgYnkgYW4gYXV0aG9yaXplZCByZXByZXNlbnRhdGl2ZSBvZiBMTUk7IG9yCisoZSkgaXMgcmVxdWlyZWQgdG8gYmUgZGlzY2xvc2VkIHB1cnN1YW50IHRvIGNvdXJ0IG9yZGVyLCBkdWx5IGF1dGhvcml6ZWQKK3N1YnBvZW5hLCBvciBnb3Zlcm5tZW50YWwgYXV0aG9yaXR5IChidXQgWW91IG9yIHRoZSBDb250cmFjdGluZyBQYXJ0eQorc2hhbGwgaW1tZWRpYXRlbHkgZ2l2ZSBMTUkgd3JpdHRlbiBub3RpY2UgYW5kIGFuIG9wcG9ydHVuaXR5IHRvIGNvbnRlc3QKK3N1Y2ggcmVxdWlyZWQgZGlzY2xvc3VyZSkuCisKKzE2LjQgUmVtZWRpZXMuIFRoZSBwYXJ0aWVzIGFncmVlIHRoYXQgdGhlIHJlbWVkeSBhdCBsYXcgZm9yIGFueSBicmVhY2ggb2YKK2FueSBvZiB0aGUgY292ZW5hbnRzIGFuZCBhZ3JlZW1lbnRzIHNldCBmb3J0aCBpbiB0aGVzZSBjb25maWRlbnRpYWxpdHkKK3Rlcm1zIG1heSBiZSBpbmFkZXF1YXRlIGFuZCB0aGF0LCBpbiB0aGUgZXZlbnQgb2YgYW55IHN1Y2ggYnJlYWNoIG9yCit0aHJlYXRlbmVkIGJyZWFjaCwgTE1JIHNoYWxsLCBpbiBhZGRpdGlvbiB0byBhbGwgb3RoZXIgcmVtZWRpZXMgd2hpY2ggbWF5CitiZSBhdmFpbGFibGUgdG8gaXQgYXQgbGF3LCBiZSBlbnRpdGxlZCB0byBlcXVpdGFibGUgcmVsaWVmIGluIHRoZSBmb3JtIG9mCitwcmVsaW1pbmFyeSBhbmQgcGVybWFuZW50IGluanVuY3Rpb25zIHdpdGhvdXQgdGhlIG5lY2Vzc2l0eSBvZiBwcm92aW5nCitkYW1hZ2VzLiBZb3UgYW5kIHRoZSBDb250cmFjdGluZyBQYXJ0eSBmdXJ0aGVyIGFncmVlIHRoYXQgdGhlIHRlcm1zIG9mCit0aGVzZSBjb25maWRlbnRpYWxpdHkgdGVybXMgc2hhbGwgaW4gbm8gd2F5IHJlc3RyaWN0IG9yIGxpbWl0IGFueSBvdGhlcgorcmVtZWRpZXMgTE1JIG1heSBoYXZlIGFnYWluc3QgWW91IGFuZCB0aGUgQ29udHJhY3RpbmcgUGFydHkuIExNSSBzaGFsbAorYmUgZW50aXRsZWQgdG8gcmVjb3ZlciB0aGUgY29zdHMgaW5jbHVkaW5nIHJlYXNvbmFibGUgYXR0b3JuZXkncyBmZWVzLAordG8gZW5mb3JjZSBpdHMgcmlnaHRzIHVuZGVyIHRoZXNlIGNvbmZpZGVudGlhbGl0eSB0ZXJtcy4KKworMTYuNSBSZXR1cm4gb2YgQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uLiBVcG9uIHRoZSB3cml0dGVuIHJlcXVlc3Qgb2YKK0xNSSwgWW91IGFuZCB0aGUgQ29udHJhY3RpbmcgUGFydHkgc2hhbGwgcmV0dXJuLCBvciBjZXJ0aWZ5IHRoYXQgaXQKK2hhcyBkZXN0cm95ZWQsIGFsbCBpbmZvcm1hdGlvbiBkaXNjbG9zZWQgdW5kZXIgdGhlc2UgY29uZmlkZW50aWFsaXR5Cit0ZXJtcyBhbmQgYW55IG1lbW9yYW5kdW0sIGRpYWdyYW1zLCBvciBhbnkgb3RoZXIgZG9jdW1lbnRzIGNvbnRhaW5pbmcKK2FueSBpbmZvcm1hdGlvbiBkaXNjbG9zZWQgdW5kZXIgdGhlc2UgY29uZmlkZW50aWFsaXR5IHRlcm1zLgorCisxNi42IEVuZm9yY2VhYmlsaXR5LiBJbiB0aGUgZXZlbnQgYW55IG9uZSBvciBtb3JlIG9mIHRoZSBwcm92aXNpb25zIG9mCit0aGVzZSBjb25maWRlbnRpYWxpdHkgdGVybXMgc2hhbGwgYmUgaW52YWxpZCwgaWxsZWdhbCBvciB1bmVuZm9yY2VhYmxlIGluCithbnkgcmVzcGVjdCwgdGhlIHZhbGlkaXR5LCBsZWdhbGl0eSBhbmQgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmluZworcHJvdmlzaW9ucyBjb250YWluZWQgaGVyZWluIHNoYWxsIG5vdCBpbiBhbnkgd2F5IGJlIGFmZmVjdGVkIG9yIGltcGFpcmVkCit0aGVyZWJ5LgorCisxNi43IEFwcGxpY2F0aW9uLiBUaGlzIENvbmZpZGVudGlhbGl0eSBBZ3JlZW1lbnQgc2hhbGwgY29udHJvbCBpbiBsaWV1IG9mCithbmQgbm90d2l0aHN0YW5kaW5nIGFueSBwcm9wcmlldGFyeSBvciByZXN0cmljdGl2ZSBsZWdlbmRzIG9yIHN0YXRlbWVudHMKK2luY29uc2lzdGVudCB3aXRoIHRoZXNlIGNvbmZpZGVudGlhbGl0eSB0ZXJtcyB0aGF0IG1heSBiZSBhc3NvY2lhdGVkCit3aXRoIGFueSBwYXJ0aWN1bGFyIGluZm9ybWF0aW9uIGRpc2Nsb3NlZCBoZXJldW5kZXIuCisKKzE2LjggU3Vydml2aW5nIE9ibGlnYXRpb25zLiBUaGUgY29uZmlkZW50aWFsaXR5IG9ibGlnYXRpb25zIHVuZGVyIHRoZXNlCitUZXJtcyBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiwgZXhwaXJhdGlvbnMsIG9yIHJlc2Npc3Npb24gb2YKK3RoZXNlIFRlcm1zLCBhcyB3ZWxsIGFzIGNvbnRpbnVlIGJleW9uZCBhbnkgdGltZSBpbiB3aGljaCBZb3Ugb3IgdGhlCitDb250cmFjdGluZyBQYXJ0eSB3ZXJlIHVzaW5nIHRoZSBTZXJ2aWNlLgorCisxNy4gRm9yY2UgTWFqZXVyZQorCitObyBwYXJ0eSBzaGFsbCBiZSBsaWFibGUgZm9yIGFueSBwZXJmb3JtYW5jZSBmYWlsdXJlLCBkZWxheSBpbgorcGVyZm9ybWFuY2UsIG9yIGxvc3QgZGF0YSB1bmRlciB0aGVzZSBUZXJtcyAob3RoZXIgdGhhbiBmb3IgZGVsYXkgaW4KK3RoZSBwYXltZW50IG9mIG1vbmV5IGR1ZSBhbmQgcGF5YWJsZSBoZXJldW5kZXIpIHRvIHRoZSBleHRlbnQgc2FpZAorZmFpbHVyZXMgb3IgZGVsYXlzIGFyZSBwcm94aW1hdGVseSBjYXVzZWQgYnkgKGkpIGZhaWx1cmVzIG9mIFNvZnR3YXJlCitvciBvdGhlciBjb21wdXRlciBwcm9ncmFtbWluZywgKGlpKSBuYXR1cmFsIHdlYXRoZXIgZXZlbnRzLCBvciAoaWlpKQorYW55IG90aGVyIGNhdXNlcyBiZXlvbmQgdGhhdCBwYXJ0eSdzIHJlYXNvbmFibGUgY29udHJvbCBhbmQgb2NjdXJyaW5nCit3aXRob3V0IGl0cyBmYXVsdCBvciBuZWdsaWdlbmNlLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgZmFpbHVyZQorb2Ygc3VwcGxpZXJzLCBzdWJjb250cmFjdG9ycywgYW5kIGNhcnJpZXJzLCBvciBwYXJ0eSB0byBzdWJzdGFudGlhbGx5CittZWV0IGl0cyBwZXJmb3JtYW5jZSBvYmxpZ2F0aW9ucyB1bmRlciB0aGVzZSBUZXJtcywgcHJvdmlkZWQgdGhhdCBpbgorYW55IHN1Y2ggZXZlbnQsIGFzIGEgY29uZGl0aW9uIHRvIHRoZSBjbGFpbSBvZiBub24tbGlhYmlsaXR5LCB0aGUgcGFydHkKK2V4cGVyaWVuY2luZyB0aGUgZGlmZmljdWx0eSBzaGFsbCBnaXZlIHRoZSBvdGhlciBwcm9tcHQgd3JpdHRlbiBub3RpY2UsCit3aXRoIGZ1bGwgZGV0YWlscyBmb2xsb3dpbmcgdGhlIG9jY3VycmVuY2Ugb2YgdGhlIGNhdXNlIHJlbGllZCB1cG9uLgorQ29weXJpZ2h0IMKpIDIwMDMg4oCTIDIwMDkgTG9nTWVJbiwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL01BUkJMRUJMQVNUIGIvbGljZW5zZXMvTUFSQkxFQkxBU1QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU5NGM5OQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL01BUkJMRUJMQVNUCkBAIC0wLDAgKzEsNjAgQEAKK0VuZCBVc2VyIExpY2Vuc2UgQWdyZWVtZW50IChFVUxBKQorCitUaGlzIFNvZnR3YXJlIExpY2Vuc2luZyBBZ3JlZW1lbnQgKCJBZ3JlZW1lbnQiKSBpcyBhIGxlZ2FsIGFncmVlbWVudCBiZXR3ZWVuIHlvdSBhbmQKK0dhcmFnZUdhbWVzLmNvbSwgSW5jLiAoJ0dhcmFnZUdhbWVzJykuIFRoZXNlIGFyZSB0aGUgb25seSB0ZXJtcyBieSB3aGljaCBHYXJhZ2VHYW1lcyBwZXJtaXRzCithbnkgdXNlIG9mIHRoZSBTb2Z0d2FyZS4KKworR2FyYWdlR2FtZXMgTGljZW5zaW5nIEFncmVlbWVudCBmb3IgTWFyYmxlIEJsYXN0LgorCisxLiBUaGUgU29mdHdhcmUuCitUaGUgU29mdHdhcmUgbGljZW5zZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgaXMgdGhlIGNvbXB1dGVyIHByb2dyYW0gZW50aXRsZWQgJ01hcmJsZSBCbGFzdCcsCit3aGljaCBjb25zaXN0cyBvZiBleGVjdXRhYmxlIGZpbGVzLCBkYXRhIGZpbGVzLCBhbmQgZG9jdW1lbnRhdGlvbi4KKworMi4gR3JhbnQgb2YgTGljZW5zZS4KK0dhcmFnZUdhbWVzIGdyYW50cyB5b3UgdGhlIG5vbnRyYW5zZmVyYWJsZSwgbm9uZXhjbHVzaXZlIHJpZ2h0IHRvIHVzZSB0aGUgU29mdHdhcmUgaW4KK2FjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQuCisKK1lPVSBNQVk6IChpKSBsb2FkIHRoZSBzb2Z0d2FyZSBpbnRvIFJBTSBhcyB3ZWxsIGFzIGluc3RhbGwgaXQgb24gYSBoYXJkIGRpc2sgb3Igb3RoZXIKK3N0b3JhZ2UgZGV2aWNlLCBhbmQgKGlpKSBtYWtlIG9uZSBjb3B5IGZvciBiYWNrdXAgcHVycG9zZXMuCisKK1lPVSBNQVkgTk9UOiBtb2RpZnksIHRyYW5zbGF0ZSwgZGlzYXNzZW1ibGUsIHJldmVyc2UgZW5naW5lZXIsIGRlY29tcGlsZSwgb3IgY3JlYXRlCitkZXJpdmF0aXZlIHdvcmtzIGJhc2VkIHVwb24gdGhlIFNvZnR3YXJlLgorCitXaGVuIHlvdSBwdXJjaGFzZSB0aGUgU29mdHdhcmUsIHlvdSB3aWxsIHJlY2VpdmUgdGhlIGZ1bGwgcmVnaXN0ZXJlZCB2ZXJzaW9uLiBZb3UgYWdyZWUgbm90Cit0byBkaXN0cmlidXRlIHRoZSByZWdpc3RlcmVkIHZlcnNpb24gdG8gb3RoZXJzIGFuZCB0byB1c2UgaXQgb25seSBmb3IgeW91ciBvd24gcGVyc29uYWwgdXNlLgorWW91IGFja25vd2xlZGdlIHRoYXQgZGlzdHJpYnV0aW9uIG9mIHRoZSByZWdpc3RlcmVkIHZlcnNpb24gdG8gb3RoZXJzLCB3aGV0aGVyIGludGVudGlvbmFsCitvciB1bmludGVudGlvbmFsLCBjb3VsZCBkYW1hZ2UgR2FyYWdlR2FtZXMgYm90aCBmaW5hbmNpYWxseSBhbmQgcHJvZmVzc2lvbmFsbHkuIEFueQordW5hdXRob3JpemVkIGRpc3RyaWJ1dGlvbiBvZiB5b3VyIHJlZ2lzdGVyZWQgdmVyc2lvbiB3aWxsIHJlc3VsdCBpbiBpbW1lZGlhdGUgYW5kIGF1dG9tYXRpYwordGVybWluYXRpb24gb2YgeW91ciBsaWNlbnNlLCBhbmQgbWF5IHJlc3VsdCBpbiBjaXZpbCBhbmQgY3JpbWluYWwgcGVuYWx0aWVzLgorCiszLiBDb3B5cmlnaHQuCitUaGUgU29mdHdhcmUgaXMgb3duZWQgYnkgR2FyYWdlR2FtZXMgYW5kIGlzIHByb3RlY3RlZCBieSBVbml0ZWQgU3RhdGVzIGNvcHlyaWdodCBsYXdzIGFuZAoraW50ZXJuYXRpb25hbCB0cmVhdGllcy4gR2FyYWdlR2FtZXMgcmVzZXJ2ZXMgdGhlIGV4Y2x1c2l2ZSBjb3B5cmlnaHQgYW5kIGFsbCBvdGhlciByaWdodHMsCit0aXRsZSBhbmQgaW50ZXJlc3QgdG8gZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUsIGFuZCB0byB1c2UgVHJhZGVtYXJrcyBpbiBjb25uZWN0aW9uIHdpdGgKK3RoZW0uICYjODIyMDtUcmFkZW1hcmtzJiM4MjIxOyByZWZlcnMgdG8gdGhlIG5hbWUgb2YgdGhlIFNvZnR3YXJlLCB0aGUgU29mdHdhcmUgbG9nbywgdGhlCituYW1lIEdhcmFnZUdhbWVzLCBhbmQgdGhlIEdhcmFnZUdhbWVzIGxvZ28uCisKKworNC4gTk8gV0FSUkFOVFkuCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTLUlTIi4gTk8gV0FSUkFOVElFUyBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBBUkUgTUFERSBBUworVE8gSVQgT1IgQU5ZIE1FRElVTSBJVCBNQVkgQkUgT04uIEdBUkFHRUdBTUVTIFdJTEwgUFJPVklERSBOTyBSRU1FRFkgRk9SIElORElSRUNULAorQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUgT1IgSU5DSURFTlRBTCBEQU1BR0VTIEFSSVNJTkcgRlJPTSBJVCwgSU5DTFVESU5HIFNVQ0ggRlJPTQorTkVHTElHRU5DRSwgU1RSSUNUIExJQUJJTElUWSwgT1IgQlJFQUNIIE9GIFdBUlJBTlRZIE9SIENPTlRSQUNULCBFVkVOIEFGVEVSIE5PVElDRSBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNS4gVGVybS4KK1RoZSB0ZXJtIG9mIHRoaXMgbGljZW5zZSBncmFudCBpcyBwZXJwZXR1YWwuIFlvdSBtYXkgdGVybWluYXRlIHRoaXMgQWdyZWVtZW50IGF0IGFueSB0aW1lIGJ5CitkZXN0cm95aW5nIGFsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlIGluIHlvdXIgcG9zc2Vzc2lvbi4gWW91ciBsaWNlbnNlIHRvIHVzZSB0aGUgU29mdHdhcmUKK3dpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgaWYgeW91IGJyZWFjaCB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQuCisKKzYuIEdlbmVyYWwgUHJvdmlzaW9ucy4KK1RoaXMgQWdyZWVtZW50IGlzIHRoZSBzb2xlIGFuZCBlbnRpcmUgQWdyZWVtZW50IHJlbGF0aW5nIHRvIHRoZSBTb2Z0d2FyZSwgYW5kIHN1cGVyY2VkZXMgYWxsCitwcmlvciB1bmRlcnN0YW5kaW5ncywgYWdyZWVtZW50cywgYW5kIGRvY3VtZW50YXRpb24gcmVsYXRpbmcgdG8gdGhlIFNvZnR3YXJlLiBJZiBhbnkKK3Byb3Zpc2lvbiBpbiB0aGlzIEFncmVlbWVudCBpcyBoZWxkIGJ5IGEgY291cnQgb2YgY29tcGV0ZW50IGp1cmlzZGljdGlvbiB0byBiZSBpbnZhbGlkLAordm9pZCwgb3IgdW5lbmZvcmNlYWJsZSwgdGhlIHJlbWFpbmluZyBwcm92aXNpb25zIHdpbGwgY29udGludWUgaW4gZnVsbCBmb3JjZSB3aXRob3V0IGJlaW5nCitpbXBhaXJlZCBvciBpbnZhbGlkYXRlZCBpbiBhbnkgd2F5LiBUaGlzIEFncmVlbWVudCB3aWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBTdGF0ZQorb2YgT3JlZ29uLCB3aXRob3V0IHJlZ2FyZCBmb3IgaXRzIGNvbmZsaWN0IG9mIGxhd3MgcHJpbmNpcGxlcy4gV2l0aCByZXNwZWN0IHRvIGV2ZXJ5IG1hdHRlcgorYXJpc2luZyB1bmRlciB0aGlzIEFncmVlbWVudCwgeW91IGNvbnNlbnQgdG8gdGhlIGV4Y2x1c2l2ZSBqdXJpc2RpY3Rpb24gYW5kIHZlbnVlIG9mIHRoZQorc3RhdGUgYW5kIGZlZGVyYWwgY291cnRzIHNpdHRpbmcgaW4gTGFuZSBDb3VudHksIE9yZWdvbi4gVGhpcyBBZ3JlZW1lbnQgZG9lcyBub3QgY3JlYXRlIGFueQorYWdlbmN5IG9yIHBhcnRuZXIgcmVsYXRpb25zaGlwLiBZb3VyIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcGVyc29uYWwgYW5kIGRvIG5vdAoraW5jbHVkZSBhbnkgcmlnaHQgdG8gc3VibGljZW5zZSB0aGUgU29mdHdhcmUuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9NQlJPTEEgYi9saWNlbnNlcy9NQlJPTEEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQwNzVjYgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL01CUk9MQQpAQCAtMCwwICsxLDc4IEBACitUaGlzIHByb2dyYW0gYW5kIG9iamVjdCBjb2RlIGlzIGJlaW5nIHByb3ZpZGVkIHRvICJ5b3UiLCB0aGUgbGljZW5zZWUsCitieSBUaGllcnJ5ICBEdXRvaXQsIHRoZSAiYXV0aG9yIiwgIHVuZGVyICB0aGUgZm9sbG93aW5nIGxpY2Vuc2UsIHdoaWNoCithcHBsaWVzIHRvIGFueSAgcHJvZ3JhbSwgb2JqZWN0IGNvZGUgb3Igb3RoZXIgICB3b3JrIHdoaWNoIGNvbnRhaW5zICBhCitub3RpY2UgcGxhY2VkICBieSAgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nICBpdCAgbWF5IGJlIGRpc3RyaWJ1dGVkCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBsaWNlbnNlLiAgIFRoZSAicHJvZ3JhbSIsIGJlbG93LCByZWZlcnMgdG8gYW55CitzdWNoIHByb2dyYW0sIG9iamVjdCBjb2RlIG9yIHdvcmsuCisKK0J5IG9idGFpbmluZywgIHVzaW5nIGFuZC9vciBjb3B5aW5nICB0aGlzIHByb2dyYW0sIHlvdSAgYWdyZWUgdGhhdCB5b3UKK2hhdmUgICByZWFkLCAgdW5kZXJzdG9vZCwgIGFuZCAgIHdpbGwgIGNvbXBseSAgIHdpdGggIHRoZXNlICB0ZXJtcyBhbmQKK2NvbmRpdGlvbnM6CisKK1Rlcm1zIGFuZCBjb25kaXRpb25zIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSBwcm9ncmFtCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHByb2dyYW0gbWF5IG5vdCBiZSBzb2xkIG9yIGluY29ycG9yYXRlZCBpbnRvIGFueSBwcm9kdWN0IHdoaWNoIGlzCitzb2xkIHdpdGhvdXQgcHJpb3IgcGVybWlzc2lvbiBmcm9tIHRoZSBhdXRob3IuCisKK1doZW4gbm8gIGNoYXJnZSBpcyBtYWRlLCB0aGlzICBwcm9ncmFtICBtYXkgYmUgY29waWVkICBhbmQgZGlzdHJpYnV0ZWQKK2ZyZWVseSwgcHJvdmlkZWQgdGhhdCAgIHRoaXMgbm90aWNlICBpcyAgY29waWVkICBhbmQgZGlzdHJpYnV0ZWQgIHdpdGgKK2l0LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSAgdGhlIHByb2dyYW0gKG9yIGFueSAgd29yayBiYXNlZCBvbiB0aGUKK3Byb2dyYW0pLCB0aGUgcmVjaXBpZW50ICAgYXV0b21hdGljYWxseSByZWNlaXZlcyAgYSBsaWNlbnNlIGZyb20gICB0aGUKK29yaWdpbmFsICBsaWNlbnNvciB0byBjb3B5IG9yIGRpc3RyaWJ1dGUgIHRoZSBwcm9ncmFtIHN1YmplY3QgdG8gdGhlc2UKK3Rlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSAgbm90IGltcG9zZSBhbnkgZnVydGhlciByZXN0cmljdGlvbnMgb24KK3RoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiAgIHRoZSByaWdodHMgZ3JhbnRlZCAgaGVyZWluLiBZb3UgIGFyZSBub3QKK3Jlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvIHRoaXMgTGljZW5zZS4KKworSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgdGhlIHByb2dyYW0gIGludG8gb3RoZXIgZnJlZSBwcm9ncmFtcyB3aG9zZQorZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gIHRoZSBhdXRob3IgdG8gYXNrIGZvcgorcGVybWlzc2lvbi4KKworSWYsIGFzICAgYSBjb25zZXF1ZW5jZSBvZiBhICAgY291cnQganVkZ21lbnQgIG9yICBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yICBmb3IgYW55IG90aGVyIHJlYXNvbiAgKG5vdCBsaW1pdGVkIHRvIHBhdGVudCBpc3N1ZXMpLAorY29uZGl0aW9ucyBhcmUgaW1wb3NlZCAgb24geW91ICh3aGV0aGVyICBieSBjb3VydCBvcmRlciwgIGFncmVlbWVudCBvcgorb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBsaWNlbnNlLCB0aGV5IGRvIG5vdAorZXhjdXNlICAgeW91IGZyb20gdGhlICAgY29uZGl0aW9ucyAgb2YgdGhpcyAgbGljZW5zZS4gICAgSWYgeW91IGNhbm5vdAorZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworbGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorbWF5ICAgbm90IGRpc3RyaWJ1dGUgdGhlICBwcm9ncmFtIGF0ICBhbGwuICAgIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgcHJvZ3JhbSBieQorYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciAgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbgordGhlIG9ubHkgd2F5IHlvdSAgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCAgdGhpcyBsaWNlbnNlIHdvdWxkIGJlICB0bworcmVmcmFpbiBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgcHJvZ3JhbS4KKworVGVybXMgYW5kIGNvbmRpdGlvbnMgb24gdGhlIHVzZSBvZiB0aGUgcHJvZ3JhbQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQZXJtaXNzaW9uICBpcyAgZ3JhbnRlZCAgIHRvIHVzZSAgdGhpcyAgIHNvZnR3YXJlICBmb3Igbm9uLWNvbW1lcmNpYWwsCitub24tbWlsaXRhcnkgcHVycG9zZXMsICB3aXRoIGFuZCAgb25seSAgd2l0aCAgdGhlIHZvaWNlICAgYW5kIGxhbmd1YWdlCitkYXRhYmFzZXMgIG1hZGUgYXZhaWxhYmxlIGJ5ICB0aGUgYXV0aG9yICBmcm9tIHRoZSAgTUJST0xBIHByb2plY3Qgd3d3Citob21lcGFnZToKKworICAgICAgICAgaHR0cDovL3RjdHMuZnBtcy5hYy5iZS9zeW50aGVzaXMKKworSW4gcmV0dXJuLCB0aGUgYXV0aG9yIGFza3MgeW91IHRvIG1lbnRpb24gdGhlIE1CUk9MQSByZWZlcmVuY2UgcGFwZXI6CisKK1QuIERVVE9JVCwgVi4gUEFHRUwsIE4uIFBJRVJSRVQsIEYuICBCQVRBSUxMRSwgTy4gVkFOIERFUiBWUkVDS0VOCisiVGhlIE1CUk9MQSBQcm9qZWN0OiBUb3dhcmRzIGEgU2V0IG9mIEhpZ2gtUXVhbGl0eSBTcGVlY2gKK1N5bnRoZXNpemVycyBGcmVlIG9mIFVzZSBmb3IgTm9uLUNvbW1lcmNpYWwgUHVycG9zZXMiCitQcm9jLiBJQ1NMUCc5NiwgUGhpbGFkZWxwaGlhLCB2b2wuIDMsIHBwLiAxMzkzLTEzOTYuICAKKworb3IsICBmb3IgYSBtb3JlIGdlbmVyYWwgIHJlZmVyZW5jZSAgIHRvIFRleHQtVG8tU3BlZWNoIHN5bnRoZXNpcywgIHRoZQorYm9vazoKKworQW4gSW50cm9kdWN0aW9uIHRvIFRleHQtVG8tU3BlZWNoIFN5bnRoZXNpcywKK1QuIERVVE9JVCwgS2x1d2VyIEFjYWRlbWljIFB1Ymxpc2hlcnMsIERvcmRyZWNodCAKK0hhcmRib3VuZCwgSVNCTiAwLTc5MjMtNDQ5OC03CitBcHJpbCAxOTk3LCAzMTIgcHAuIAorCitpbiBhbnkgc2NpZW50aWZpYyBwdWJsaWNhdGlvbiByZWZlcnJpbmcgdG8gd29yayBmb3Igd2hpY2ggdGhpcyBwcm9ncmFtCitoYXMgYmVlbiB1c2VkLgorCitEaXNjbGFpbWVyCistLS0tLS0tLS0tCisKK1RISVMgIFNPRlRXQVJFIENBUlJJRVMgTk8gICBXQVJSQU5UWSwgRVhQUkVTU0VEIE9SIElNUExJRUQuICBUSEUgIFVTRVIKK0FTU1VNRVMgQUxMIFJJU0tTLCBLTk9XTiBPUiBVTktOT1dOLCBESVJFQ1QgT1IgSU5ESVJFQ1QsIFdISUNIIElOVk9MVkUKK1RISVMgU09GVFdBUkUgSU4gQU5ZIFdBWS4gSU4gUEFSVElDVUxBUiwgVEhFICBBVVRIT1IgRE9FUyBOT1QgVEFLRSBBTlkKK0NPTU1JVE1FTlQgSU4gVklFVyBPRiBBTlkgUE9TU0lCTEUgVEhJUkQgUEFSVFkgUklHSFRTLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvTUlMTyBiL2xpY2Vuc2VzL01JTE8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzA2NDk2MQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL01JTE8KQEAgLTAsMCArMSw0NDEgQEAKK1RoaXMgZmlsZSBjb250YWlucyB0aGUgZm9sbG93aW5nIGxpY2Vuc2VzLiAgUGxlYXNlIHJlYWQgdGhlbSB0bwordW5kZXJzdGFuZCB0aGUgZGlmZmVyZW50IHJlc3RyaWN0aW9ucyBmb3IgdXNlLCBtb2RpZmljYXRpb24sIGFuZAorZGlzdHJpYnV0aW9uIG9mIHRoZSBMaW51eCBBbHBoYSBNaW5pbG9hZGVyIChNaWxvKSBTb2Z0d2FyZS4KKworCTEuIFBBTGNvZGUgTGljZW5zZQorCTIuIEJJT1MgRU1VTEFUSU9OIExJQlJBUklFUyBMaWNlbnNlCisJMy4gR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisKKwkJCSAgIERpZ2l0YWwgU2VtaWNvbmR1Y3RvcgorICAgICAgICAgICAgICAgICAgICAgICAgU09GVFdBUkUgTElDRU5TRSBBR1JFRU1FTlRTCisKK1BBTGNvZGUgTGljZW5zZQorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIHVzZSwgY29weSwgbW9kaWZ5IGFuZCBkaXN0cmlidXRlCit0aGUgUEFMY29kZSBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24sIGluIGJvdGggc291cmNlIGFuZAorb2JqZWN0IGNvZGUgZm9ybSwgd2l0aG91dCBmZWUsIHNvbGVseSB3aXRoaW4gcHJvZHVjdHMKK2luY29ycG9yYXRpbmcgYW4gaW50ZWdyYXRlZCBjaXJjdWl0IGltcGxlbWVudGluZyB0aGUgRElHSVRBTAorQWxwaGEgYXJjaGl0ZWN0dXJlLiAgVGhpcyBwZXJtaXNzaW9uIGlzIGdyYW50ZWQgcmVnYXJkbGVzcyBvZiB0aGUKK29yaWdpbiBvZiBzdWNoIGludGVncmF0ZWQgY2lyY3VpdCBwcm92aWRlZCB0aGF0IHRoZSBESUdJVEFMCitjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLiAKK05vIHBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byB1c2UgdGhlIG5hbWUgb2YgRGlnaXRhbCBFcXVpcG1lbnQKK0NvcnBvcmF0aW9uIGluIGFueSBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byB0aGUKK3NvZnR3YXJlIG9yIGRvY3VtZW50YXRpb24gd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuCithcHByb3ZhbC4KKworRVZBTFVBVElPTiBCT0FSRCBUT09MUyBBTkQgRVZBTFVBVElPTiBCT0FSRCBGSVJNV0FSRSBMSUNFTlNFCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKK2l0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSwgd2l0aG91dCBmZWUsIGlzIGhlcmVieSBncmFudGVkCitwcm92aWRlZCB0aGF0IChpKSB0aGUgRGlnaXRhbCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzCitwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBvZiBzb2Z0d2FyZSBhbmQgc3VwcG9ydGluZworZG9jdW1lbnRhdGlvbiBhbmQgKGlpKSB0aGF0IGFueSBtb2RpZmljYXRpb25zIG1hZGUgdG8gZWl0aGVyIHRoZQorc29mdHdhcmUgb3IgdGhlIGRvY3VtZW50YXRpb24gYXJlIHByb21pbmVudGx5IG1hcmtlZC4gIFRoZSBuYW1lCitvZiBEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbiBpcyBub3QgdG8gYmUgdXNlZCBpbiBhZHZlcnRpc2luZworb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgb3IKK2RvY3VtZW50YXRpb24gd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIGFwcHJvdmFsLgorCitESVNDTEFJTUVSUworCitUaGlzIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIGlzIHByb3ZpZGVkIG9uIGFuICJBUyBJUyIgYmFzaXMuIAorRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24gaGVyZWJ5IGRpc2NsYWltcyBhbGwgd2FycmFudGllcworYW5kL29yIGd1YXJhbnRlZXMgd2l0aCByZWdhcmQgdG8gdGhpcyBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiwKK0lOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTCitGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBEaWdpdGFsIG1ha2VzIG5vIHdhcnJhbnRpZXMgb3IKK3JlcHJlc2VudGF0aW9ucyByZWdhcmRpbmcgdGhlIHVzZSBvZiBvciB0aGUgcmVzdWx0cyBvZiB0aGUgdXNlIG9mCit0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24gd2l0aCByZXNwZWN0IHRvIGFjY3VyYWN5LAorcmVsaWFiaWxpdHksIHZlcnNpb24gbGV2ZWwsIG9yIG90aGVyd2lzZS4gIFVzZSBvZiB0aGUgcmVzdWx0cyBhcmUKK3NvbGVseSBhdCB1c2VycyBvd24gcmlzay4gIE90aGVyIHJlc3RyaWN0aW9ucyBtYXkgYXBwbHkuICBTZWUKK0VCVE9PTFMgYW5kIElORk9aSVAgZGlyZWN0b3JpZXMgZm9yIGRldGFpbHMuCitfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworCitDb3B5cmlnaHQgMTk5MywxOTk0IGJ5IERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uLCBNYXluYXJkCitNYXNzYWNodXNldHRzLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworQWxwaGEgaXMgYSB0cmFkZW1hcmsgb2YgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24uCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJCQkgICBESUdJVEFMIFNFTUlDT05EVUNUT1IKKyAgICAgICAgICAgICAgICAgICAgICAgIFNPRlRXQVJFIExJQ0VOU0UgQUdSRUVNRU5UUworCitCSU9TIEVNVUxBVElPTiBMSUJSQVJJRVMgTGljZW5zZQorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIHVzZSwgY29weSwgYW5kIGRpc3RyaWJ1dGUKK3RoaXMgc29mdHdhcmUgKGFuZCBpdHMgZG9jdW1lbnRhdGlvbikgZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSwgCitzb2xlbHkgd2l0aGluIHByb2R1Y3RzIGluY29ycG9yYXRpbmcgYW4gaW50ZWdyYXRlZCBjaXJjdWl0IGltcGxlbWVudGluZyAKK3RoZSBEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbiAoRElHSVRBTCkgQWxwaGEgYXJjaGl0ZWN0dXJlLiAgVGhpcyAKK3Blcm1pc3Npb24gaXMgZ3JhbnRlZCByZWdhcmRsZXNzIG9mIHRoZSBvcmlnaW4gb2Ygc3VjaCBpbnRlZ3JhdGVkIGNpcmN1aXQgCitwcm92aWRlZCAoaSkgdGhlIERJR0lUQUwgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZQorYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIChpaSkgdGhlIG5hbWUgb2YgRElHSVRBTCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgorcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gdGhlIHNvZnR3YXJlIChvciBkb2N1bWVudGF0aW9uKSB3aXRob3V0IHNwZWNpZmljIHByaW9yCit3cml0dGVuIGFwcHJvdmFsLgorCitObyBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gbW9kaWZ5LCByZXZlcnNlIGVuZ2luZWVyLCBkZWNvbXBpbGUsIG9yIGRpc2Fzc2VtYmxlCit0aGlzIHNvZnR3YXJlLgorCisKK0RJU0NMQUlNRVJTCisKK1RoaXMgc29mdHdhcmUgKGFuZCBkb2N1bWVudGF0aW9uKSBpcyBwcm92aWRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLiAKK0RpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uIGhlcmVieSBkaXNjbGFpbXMgYWxsIHdhcnJhbnRpZXMKK2FuZC9vciBndWFyYW50ZWVzIHdpdGggcmVnYXJkIHRvIHRoaXMgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24sCitJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUworRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgRGlnaXRhbCBtYWtlcyBubyB3YXJyYW50aWVzIG9yCityZXByZXNlbnRhdGlvbnMgcmVnYXJkaW5nIHRoZSB1c2Ugb2Ygb3IgdGhlIHJlc3VsdHMgb2YgdGhlIHVzZSBvZgordGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIHdpdGggcmVzcGVjdCB0byBhY2N1cmFjeSwKK3JlbGlhYmlsaXR5LCB2ZXJzaW9uIGxldmVsLCBvciBvdGhlcndpc2UuICBVc2Ugb2YgdGhlIHJlc3VsdHMgYXJlCitzb2xlbHkgYXQgdXNlcnMgb3duIHJpc2suICAKK19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKK0NvcHlyaWdodCBEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbiAxOTk1LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KK1ByaW50ZWQgaW4gVS5TLkEuCisKK0RpZ2l0YWwgYW5kIHRoZSBESUdJVEFMIGxvZ28gYXJlIHRyYWRlbWFya3Mgb2YgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24uCisKK0RpZ2l0YWwgU2VtaWNvbmR1Y3RvciBpcyBhIERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uIGJ1c2luZXNzLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworCQkJICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGZyZWUKK3NvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuICBUaGlzCitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFwcGxpZXMgdG8gbW9zdCBvZiB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0bwordXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gc29mdHdhcmUgaXMgY292ZXJlZCBieQordGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pICBZb3UgY2FuIGFwcGx5IGl0IHRvCit5b3VyIHByb2dyYW1zLCB0b28uCisKKyAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdQoraGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvcgordGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKSwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0IGl0CitpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdAoraW4gbmV3IGZyZWUgcHJvZ3JhbXM7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKK2FueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlIHJpZ2h0cy4KK1RoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvciB5b3UgaWYgeW91CitkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0Cit5b3UgaGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorc291cmNlIGNvZGUuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpcgorcmlnaHRzLgorCisgIFdlIHByb3RlY3QgeW91ciByaWdodHMgd2l0aCB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlIHNvZnR3YXJlLCBhbmQKKygyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvIGNvcHksCitkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCisgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorc29mdHdhcmUuICBJZiB0aGUgc29mdHdhcmUgaXMgbW9kaWZpZWQgYnkgc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlCit3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbwordGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbiB0aGUgb3JpZ2luYWwKK2F1dGhvcnMnIHJlcHV0YXRpb25zLgorCisgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCitwYXRlbnRzLiAgV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCitwcm9ncmFtIHdpbGwgaW5kaXZpZHVhbGx5IG9idGFpbiBwYXRlbnQgbGljZW5zZXMsIGluIGVmZmVjdCBtYWtpbmcgdGhlCitwcm9ncmFtIHByb3ByaWV0YXJ5LiAgVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkKK3BhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzIGZyZWUgdXNlIG9yIG5vdCBsaWNlbnNlZCBhdCBhbGwuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuCisMCisJCSAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucworYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGUgIlByb2dyYW0iLCBiZWxvdywKK3JlZmVycyB0byBhbnkgc3VjaCBwcm9ncmFtIG9yIHdvcmssIGFuZCBhICJ3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIgorbWVhbnMgZWl0aGVyIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdW5kZXIgY29weXJpZ2h0IGxhdzoKK3RoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsCitlaXRoZXIgdmVyYmF0aW0gb3Igd2l0aCBtb2RpZmljYXRpb25zIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlcgorbGFuZ3VhZ2UuICAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbgordGhlIHRlcm0gIm1vZGlmaWNhdGlvbiIuKSAgRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKK0FjdGl2aXRpZXMgb3RoZXIgdGhhbiBjb3B5aW5nLCBkaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBhcmUgbm90Citjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuICBUaGUgYWN0IG9mCitydW5uaW5nIHRoZSBQcm9ncmFtIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBQcm9ncmFtCitpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSAoaW5kZXBlbmRlbnQgb2YgaGF2aW5nIGJlZW4gbWFkZSBieSBydW5uaW5nIHRoZSBQcm9ncmFtKS4KK1doZXRoZXIgdGhhdCBpcyB0cnVlIGRlcGVuZHMgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIFByb2dyYW0ncworc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91Citjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlCitjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlCitub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CithbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlCithbG9uZyB3aXRoIHRoZSBQcm9ncmFtLgorCitZb3UgbWF5IGNoYXJnZSBhIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LCBhbmQKK3lvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZS4gIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQKKyAgICBkb2VzIG5vdCBub3JtYWxseSBwcmludCBzdWNoIGFuIGFubm91bmNlbWVudCwgeW91ciB3b3JrIGJhc2VkIG9uCisgICAgdGhlIFByb2dyYW0gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudC4pCisMCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKwwKKyAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gIEFueSBhdHRlbXB0CitvdGhlcndpc2UgdG8gY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaXMKK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4KK0hvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyCit0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaAorcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDUuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIFByb2dyYW0gb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgNi4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8KK3RoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwordGhpcyBMaWNlbnNlLgorCisgIDcuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCitjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieQorYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCit0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCityZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIKK2FueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8KK2FwcGx5IGFuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyCitjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQoraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzCitpbXBsZW1lbnRlZCBieSBwdWJsaWMgbGljZW5zZSBwcmFjdGljZXMuICBNYW55IHBlb3BsZSBoYXZlIG1hZGUKK2dlbmVyb3VzIGNvbnRyaWJ1dGlvbnMgdG8gdGhlIHdpZGUgcmFuZ2Ugb2Ygc29mdHdhcmUgZGlzdHJpYnV0ZWQKK3Rocm91Z2ggdGhhdCBzeXN0ZW0gaW4gcmVsaWFuY2Ugb24gY29uc2lzdGVudCBhcHBsaWNhdGlvbiBvZiB0aGF0CitzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nCit0byBkaXN0cmlidXRlIHNvZnR3YXJlIHRocm91Z2ggYW55IG90aGVyIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QKK2ltcG9zZSB0aGF0IGNob2ljZS4KKworVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvCitiZSBhIGNvbnNlcXVlbmNlIG9mIHRoZSByZXN0IG9mIHRoaXMgTGljZW5zZS4KKwwKKyAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4KK2NlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZQorb3JpZ2luYWwgY29weXJpZ2h0IGhvbGRlciB3aG8gcGxhY2VzIHRoZSBQcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZQorbWF5IGFkZCBhbiBleHBsaWNpdCBnZW9ncmFwaGljYWwgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb24gZXhjbHVkaW5nCit0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nCitjb3VudHJpZXMgbm90IHRodXMgZXhjbHVkZWQuICBJbiBzdWNoIGNhc2UsIHRoaXMgTGljZW5zZSBpbmNvcnBvcmF0ZXMKK3RoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgorCisgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zCitvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIFN1Y2ggbmV3IHZlcnNpb25zIHdpbGwKK2JlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkgZGlmZmVyIGluIGRldGFpbCB0bworYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIFByb2dyYW0KK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZCAiYW55CitsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCitlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBQcm9ncmFtIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZgordGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbi4KKworICAxMC4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgdGhlIFByb2dyYW0gaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgYXV0aG9yCit0byBhc2sgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgd2hpY2ggaXMgY29weXJpZ2h0ZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcworbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiAgT3VyIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMKK29mIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQKK29mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgorCisJCQkgICAgTk8gV0FSUkFOVFkKKworICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkKK0ZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcuICBFWENFUFQgV0hFTgorT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUworUFJPVklERSBUSEUgUFJPR1JBTSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQKK09SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIEVOVElSRSBSSVNLIEFTCitUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuICBTSE9VTEQgVEhFCitQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZIFNFUlZJQ0lORywKK1JFUEFJUiBPUiBDT1JSRUNUSU9OLgorCisgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcKK1dJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQvT1IKK1JFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFBST0dSQU0gKElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQKK1RPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWQorWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIKK1BST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUiBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisJCSAgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisMCisJQXBwZW5kaXg6IEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IHByb2dyYW0sIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQKK2ZyZWUgc29mdHdhcmUgd2hpY2ggZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlIHVuZGVyIHRoZXNlIHRlcm1zLgorCisgIFRvIGRvIHNvLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBwcm9ncmFtLiAgSXQgaXMgc2FmZXN0Cit0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdAordGhlICJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgMTl5eSAgPG5hbWUgb2YgYXV0aG9yPgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitJZiB0aGUgcHJvZ3JhbSBpcyBpbnRlcmFjdGl2ZSwgbWFrZSBpdCBvdXRwdXQgYSBzaG9ydCBub3RpY2UgbGlrZSB0aGlzCit3aGVuIGl0IHN0YXJ0cyBpbiBhbiBpbnRlcmFjdGl2ZSBtb2RlOgorCisgICAgR25vbW92aXNpb24gdmVyc2lvbiA2OSwgQ29weXJpZ2h0IChDKSAxOXl5IG5hbWUgb2YgYXV0aG9yCisgICAgR25vbW92aXNpb24gY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZOyBmb3IgZGV0YWlscyB0eXBlIGBzaG93IHcnLgorICAgIFRoaXMgaXMgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBhcmUgd2VsY29tZSB0byByZWRpc3RyaWJ1dGUgaXQKKyAgICB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCisKK1RoZSBoeXBvdGhldGljYWwgY29tbWFuZHMgYHNob3cgdycgYW5kIGBzaG93IGMnIHNob3VsZCBzaG93IHRoZSBhcHByb3ByaWF0ZQorcGFydHMgb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heQorYmUgY2FsbGVkIHNvbWV0aGluZyBvdGhlciB0aGFuIGBzaG93IHcnIGFuZCBgc2hvdyBjJzsgdGhleSBjb3VsZCBldmVuIGJlCittb3VzZS1jbGlja3Mgb3IgbWVudSBpdGVtcy0td2hhdGV2ZXIgc3VpdHMgeW91ciBwcm9ncmFtLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZSBwcm9ncmFtCisgIGBHbm9tb3Zpc2lvbicgKHdoaWNoIG1ha2VzIHBhc3NlcyBhdCBjb21waWxlcnMpIHdyaXR0ZW4gYnkgSmFtZXMgSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk4OQorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZG9lcyBub3QgcGVybWl0IGluY29ycG9yYXRpbmcgeW91ciBwcm9ncmFtIGludG8KK3Byb3ByaWV0YXJ5IHByb2dyYW1zLiAgSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5Citjb25zaWRlciBpdCBtb3JlIHVzZWZ1bCB0byBwZXJtaXQgbGlua2luZyBwcm9wcmlldGFyeSBhcHBsaWNhdGlvbnMgd2l0aCB0aGUKK2xpYnJhcnkuICBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbAorUHVibGljIExpY2Vuc2UgaW5zdGVhZCBvZiB0aGlzIExpY2Vuc2UuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9NSVQgYi9saWNlbnNlcy9NSVQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM3MWUyYQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL01JVApAQCAtMCwwICsxLDI1IEBACitDb3B5cmlnaHQgKGMpIDx5ZWFyPiA8Y29weXJpZ2h0IGhvbGRlcnM+CisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCit3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCitkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwordGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQoraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCitJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQorQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKK1RPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCitTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKworW0V4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIDxjb3B5cmlnaHQgaG9sZGVycz4KK3NoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2UKK29yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24KK2Zyb20gPGNvcHlyaWdodCBob2xkZXJzPi5dCmRpZmYgLS1naXQgYS9saWNlbnNlcy9NSVRfUGx1cyBiL2xpY2Vuc2VzL01JVF9QbHVzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhZTllMGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9NSVRfUGx1cwpAQCAtMCwwICsxLDM1IEBACisKK0NvcHlyaWdodCAyMDA4IFNvbnkgQ29ycG9yYXRpb24gb2YgQW1lcmljYQorCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworYSBjb3B5IG9mIHRoaXMgTGlicmFyeSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyJMaWJyYXJ5IiksIHRvIGRlYWwgaW4gdGhlIExpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCit3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCitkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIExpYnJhcnksIGFuZCB0bworcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgTGlicmFyeSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeS4KKworIElmIHlvdSBtb2RpZnkgdGhlIExpYnJhcnksIHlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB5b3VyIG1vZGlmaWVkCisgdmVyc2lvbiBvZiB0aGUgTGlicmFyeSBpbiBvYmplY3QgY29kZSBvciBhcyBhbiBleGVjdXRhYmxlIHByb3ZpZGVkCisgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICBBY2NvbXBhbnkgdGhlIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIExpYnJhcnkgd2l0aCB0aGUgY29tcGxldGUKKyAgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIGZvciB0aGUgbW9kaWZpZWQgdmVyc2lvbgorICBvZiB0aGUgTGlicmFyeTsgb3IsCisKKyAgQWNjb21wYW55IHRoZSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoZSBMaWJyYXJ5IHdpdGggYSB3cml0dGVuIG9mZmVyCisgIGZvciBhIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UKKyAgY29kZSBvZiB0aGUgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgTGlicmFyeS4KKworCitUSEUgTElCUkFSWSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCitJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWQorQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKK1RPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFCitMSUJSQVJZIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIExJQlJBUlkuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9NT1RJRiBiL2xpY2Vuc2VzL01PVElGCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhNTQ3NTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9NT1RJRgpAQCAtMCwwICsxLDI0NiBAQAorVEhFIE9QRU4gR1JPVVAgUFVCTElDIExJQ0VOU0UKKworTW90aWYgVXNlciBHcmFwaGljYWwgSW50ZXJmYWNlIFNPRlRXQVJFCisKK1RIRSBBQ0NPTVBBTllJTkcgUFJPR1JBTSBJUyBQUk9WSURFRCBVTkRFUiBUSEUgVEVSTVMgT0YgVEhJUworVEhFIE9QRU4gR1JPVVAgUFVCTElDIExJQ0VOU0UgKCJBR1JFRU1FTlQiKS4gQU5ZIFVTRSwgUkVQUk9EVUNUSU9OIE9SCitESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQ09OU1RJVFVURVMgUkVDSVBJRU5UJ1MgQUNDRVBUQU5DRSBPRiBUSElTCitBR1JFRU1FTlQuCisKKzEuIERFRklOSVRJT05TCisKKyJDb250cmlidXRpb24iIG1lYW5zOgorCisgIGEuIGluIHRoZSBjYXNlIG9mIFRoZSBPcGVuIEdyb3VwLCBMLkwuQy4gKCJUaGUgT3BlbiBHcm91cCIpLCB0aGUKKyAgT3JpZ2luYWwgUHJvZ3JhbSwgYW5kCisKKyAgYi4gaW4gdGhlIGNhc2Ugb2YgZWFjaCBDb250cmlidXRvciwKKyAgICBpLiBjaGFuZ2VzIHRvIHRoZSBQcm9ncmFtLCBhbmQKKyAgICBpaS4gYWRkaXRpb25zIHRvIHRoZSBQcm9ncmFtOworICB3aGVyZSBzdWNoIGNoYW5nZXMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSBvcmlnaW5hdGUgZnJvbSBhbmQKKyAgYXJlIGRpc3RyaWJ1dGVkIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4gQSBDb250cmlidXRpb24KKyAgJ29yaWdpbmF0ZXMnIGZyb20gYSBDb250cmlidXRvciBpZiBpdCB3YXMgYWRkZWQgdG8gdGhlIFByb2dyYW0gYnkgc3VjaAorICBDb250cmlidXRvciBpdHNlbGYgb3IgYW55b25lIGFjdGluZyBvbiBzdWNoIENvbnRyaWJ1dG9yJ3MgYmVoYWxmLgorICBDb250cmlidXRpb25zIGRvIG5vdCBpbmNsdWRlIGFkZGl0aW9ucyB0byB0aGUgUHJvZ3JhbSB3aGljaDoKKyAgICBpLiBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCBpbiBjb25qdW5jdGlvbiB3aXRoCisgICAgdGhlIFByb2dyYW0gdW5kZXIgdGhlaXIgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBldmVuIGlmIHRoZSBzZXBhcmF0ZQorICAgIG1vZHVsZXMgYXJlIGxpbmtlZCBpbiBiaW5hcnkgZm9ybSB0byB0aGUgUHJvZ3JhbSwgYW5kCisgICAgaWkuIGFyZSBub3QgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgUHJvZ3JhbS4KKworIkNvbnRyaWJ1dG9yIiBtZWFucyBUaGUgT3BlbiBHcm91cCBhbmQgYW55IG90aGVyIGVudGl0eSB0aGF0IGRpc3RyaWJ1dGVzCit0aGUgUHJvZ3JhbS4KKworIkxpY2Vuc2VkIFBhdGVudHMiIG1lYW4gcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3Igd2hpY2gKK2FyZSBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIHVzZSBvciBzYWxlIG9mIGl0cyBDb250cmlidXRpb24gYWxvbmUKK29yIHdoZW4gY29tYmluZWQgd2l0aCB0aGUgUHJvZ3JhbS4KKworIk9wZW4gU291cmNlIiBwcm9ncmFtcyBtZWFuIHNvZnR3YXJlIGZvciB3aGljaCB0aGUgc291cmNlIGNvZGUgaXMKK2F2YWlsYWJsZSB3aXRob3V0IGNvbmZpZGVudGlhbCBvciB0cmFkZSBzZWNyZXQgcmVzdHJpY3Rpb25zIGFuZCBmb3IKK3doaWNoIHRoZSBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUgYXJlIGF2YWlsYWJsZSBmb3IgZGlzdHJpYnV0aW9uCit3aXRob3V0IGxpY2Vuc2UgY2hhcmdlcy4KKworIk9yaWdpbmFsIFByb2dyYW0iIG1lYW5zIHRoZSBvcmlnaW5hbCB2ZXJzaW9uIG9mIHRoZSBzb2Z0d2FyZQorYWNjb21wYW55aW5nIHRoaXMgQWdyZWVtZW50IGFzIHJlbGVhc2VkIGJ5IFRoZSBPcGVuIEdyb3VwLCBpbmNsdWRpbmcKK3NvdXJjZSBjb2RlLCBvYmplY3QgY29kZSBhbmQgZG9jdW1lbnRhdGlvbiwgaWYgYW55LgorCisiUHJvZ3JhbSIgbWVhbnMgdGhlIE9yaWdpbmFsIFByb2dyYW0gYW5kIENvbnRyaWJ1dGlvbnMuCisKKyJSZWNpcGllbnQiIG1lYW5zIGFueW9uZSB3aG8gcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQsCitpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy4KKworMi4gR1JBTlQgT0YgUklHSFRTCisKK1RoZSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIGxpY2Vuc2UgYXJlIGxpbWl0ZWQgc29sZWx5IHRvIGRpc3RyaWJ1dGlvbgorYW5kIHN1YmxpY2Vuc2luZyBvZiB0aGUgQ29udHJpYnV0aW9uKHMpIG9uLCB3aXRoLCBvciBmb3Igb3BlcmF0aW5nCitzeXN0ZW1zIHdoaWNoIGFyZSB0aGVtc2VsdmVzIE9wZW4gU291cmNlIHByb2dyYW1zLiBDb250YWN0IFRoZSBPcGVuCitHcm91cCBmb3IgYSBsaWNlbnNlIGFsbG93aW5nIGRpc3RyaWJ1dGlvbiBhbmQgc3VibGljZW5zaW5nIG9mIHRoZQorT3JpZ2luYWwgUHJvZ3JhbSBvbiwgd2l0aCwgb3IgZm9yIG9wZXJhdGluZyBzeXN0ZW1zIHdoaWNoIGFyZSBub3QgT3BlbgorU291cmNlIHByb2dyYW1zLgorCisgIGEuIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCB0aGUgbGltaXRhdGlvbnMgb2YgdGhpcworICBTZWN0aW9uIDIsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLAorICB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUKKyAgZGVyaXZhdGl2ZSB3b3JrcyBvZiwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgZGlzdHJpYnV0ZQorICBhbmQgc3VibGljZW5zZSB0aGUgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgYW5kIHN1Y2gKKyAgZGVyaXZhdGl2ZSB3b3JrcywgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdCBjb2RlIGZvcm0uCisKKyAgYi4gU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIHRoZSBsaW1pdGF0aW9ucyBvZiB0aGlzCisgIFNlY3Rpb24gMiwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIFJlY2lwaWVudCBhIG5vbi1leGNsdXNpdmUsCisgIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlIHBhdGVudCBsaWNlbnNlIHVuZGVyIExpY2Vuc2VkIFBhdGVudHMgdG8gbWFrZSwKKyAgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUKKyAgQ29udHJpYnV0aW9uIG9mIHN1Y2ggQ29udHJpYnV0b3IsIGlmIGFueSwgaW4gc291cmNlIGNvZGUgYW5kIG9iamVjdAorICBjb2RlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uIG9mIHRoZQorICBDb250cmlidXRpb24gYW5kIHRoZSBQcm9ncmFtIGlmLCBhdCB0aGUgdGltZSB0aGUgQ29udHJpYnV0aW9uIGlzIGFkZGVkCisgIGJ5IHRoZSBDb250cmlidXRvciwgc3VjaCBhZGRpdGlvbiBvZiB0aGUgQ29udHJpYnV0aW9uIGNhdXNlcyBzdWNoCisgIGNvbWJpbmF0aW9uIHRvIGJlIGNvdmVyZWQgYnkgdGhlIExpY2Vuc2VkIFBhdGVudHMuIFRoZSBwYXRlbnQgbGljZW5zZQorICBzaGFsbCBub3QgYXBwbHkgdG8gYW55IG90aGVyIGNvbWJpbmF0aW9ucyB3aGljaCBpbmNsdWRlIHRoZQorICBDb250cmlidXRpb24uIE5vIGhhcmR3YXJlIHBlciBzZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuCisKKyAgYy4gUmVjaXBpZW50IHVuZGVyc3RhbmRzIHRoYXQgYWx0aG91Z2ggZWFjaCBDb250cmlidXRvciBncmFudHMgdGhlCisgIGxpY2Vuc2VzIHRvIGl0cyBDb250cmlidXRpb25zIHNldCBmb3J0aCBoZXJlaW4sIG5vIGFzc3VyYW5jZXMgYXJlCisgIHByb3ZpZGVkIGJ5IGFueSBDb250cmlidXRvciB0aGF0IHRoZSBQcm9ncmFtIGRvZXMgbm90IGluZnJpbmdlIHRoZQorICBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoCisgIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFJlY2lwaWVudCBmb3IgY2xhaW1zIGJyb3VnaHQgYnkKKyAgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cworICBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQgbGljZW5zZXMKKyAgZ3JhbnRlZCBoZXJldW5kZXIsIGVhY2ggUmVjaXBpZW50IGhlcmVieSBhc3N1bWVzIHNvbGUgcmVzcG9uc2liaWxpdHkKKyAgdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IKKyAgZXhhbXBsZSwgaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdworICBSZWNpcGllbnQgdG8gZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSwgaXQgaXMgUmVjaXBpZW50J3MgcmVzcG9uc2liaWxpdHkKKyAgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbS4KKworICBkLiBFYWNoIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCB0byBpdHMga25vd2xlZGdlIGl0IGhhcyBzdWZmaWNpZW50CisgIGNvcHlyaWdodCByaWdodHMgaW4gaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0CisgIGxpY2Vuc2Ugc2V0IGZvcnRoIGluIHRoaXMgQWdyZWVtZW50LgorCiszLiBSRVFVSVJFTUVOVFMKKworQSBDb250cmlidXRvciBtYXkgY2hvb3NlIHRvIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybQordW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDoKKworICBhLiBpdCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudDsgYW5kCisKKyAgYi4gaXRzIGxpY2Vuc2UgYWdyZWVtZW50OgorICAgIGkuIGVmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgYWxsIENvbnRyaWJ1dG9ycyBhbGwKKyAgICB3YXJyYW50aWVzIGFuZCBjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcworICAgIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUgYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkIHdhcnJhbnRpZXMKKyAgICBvciBjb25kaXRpb25zIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyCisgICAgcHVycG9zZTsKKyAgICBpaS4gZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eQorICAgIGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCBhbmQKKyAgICBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHN1Y2ggYXMgbG9zdCBwcm9maXRzOworICAgIGlpaS4gc3RhdGVzIHRoYXQgYW55IHByb3Zpc2lvbnMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlCisgICAgb2ZmZXJlZCBieSB0aGF0IENvbnRyaWJ1dG9yIGFsb25lIGFuZCBub3QgYnkgYW55IG90aGVyIHBhcnR5OyBhbmQKKyAgICBpdi4gc3RhdGVzIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2gKKyAgICBDb250cmlidXRvciwgYW5kIGluZm9ybXMgbGljZW5zZWVzIGhvdyB0byBvYnRhaW4gaXQgaW4gYSByZWFzb25hYmxlCisgICAgbWFubmVyIG9uIG9yIHRocm91Z2ggYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUKKyAgICBleGNoYW5nZS4KKworV2hlbiB0aGUgUHJvZ3JhbSBpcyBtYWRlIGF2YWlsYWJsZSBpbiBzb3VyY2UgY29kZSBmb3JtOgorCisgIGEuIGl0IG11c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7IGFuZAorCisgIGIuIGEgY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5IG9mIHRoZQorICBQcm9ncmFtLgorCitFYWNoIENvbnRyaWJ1dG9yIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGluIGEgY29uc3BpY3VvdXMgbG9jYXRpb24gaW4KK3RoZSBQcm9ncmFtOgorCisgIENvcHlyaWdodCAoYykge2RhdGUgaGVyZX0sIFRoZSBPcGVuIEdyb3VwIGFuZCBvdGhlcnMuIEFsbCBSaWdodHMKKyAgUmVzZXJ2ZWQuCisKK0luIGFkZGl0aW9uLCBlYWNoIENvbnRyaWJ1dG9yIG11c3QgaWRlbnRpZnkgaXRzZWxmIGFzIHRoZSBvcmlnaW5hdG9yIG9mCitpdHMgQ29udHJpYnV0aW9uLCBpZiBhbnksIGluIGEgbWFubmVyIHRoYXQgcmVhc29uYWJseSBhbGxvd3Mgc3Vic2VxdWVudAorUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgQ29udHJpYnV0aW9uLgorCis0LiBDT01NRVJDSUFMIERJU1RSSUJVVElPTgorCitDb21tZXJjaWFsIGRpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXkgYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcword2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMgYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzCitsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlIG9mIHRoZSBQcm9ncmFtLAorc3ViamVjdCB0byB0aGUgbGltaXRhdGlvbnMgcHJvdmlkZWQgaW4gU2VjdGlvbiAyLCB0aGUgQ29udHJpYnV0b3Igd2hvCitpbmNsdWRlcyB0aGUgUHJvZ3JhbSBpbiBhIGNvbW1lcmNpYWwgcHJvZHVjdCBvZmZlcmluZyBzaG91bGQgZG8gc28gaW4gYQorbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwgbGlhYmlsaXR5IGZvciBvdGhlciBDb250cmlidXRvcnMuCitUaGVyZWZvcmUsIGlmIGEgQ29udHJpYnV0b3IgaW5jbHVkZXMgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3QKK29mZmVyaW5nLCBzdWNoIENvbnRyaWJ1dG9yICgiQ29tbWVyY2lhbCBDb250cmlidXRvciIpIGhlcmVieSBhZ3JlZXMgdG8KK2RlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5IG90aGVyIENvbnRyaWJ1dG9yICgiSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IiKQorYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZCBjb3N0cyAoY29sbGVjdGl2ZWx5ICJMb3NzZXMiKSBhcmlzaW5nCitmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyIGxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhIHRoaXJkIHBhcnR5CithZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0byB0aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvcgorb21pc3Npb25zIG9mIHN1Y2ggQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiBjb25uZWN0aW9uIHdpdGggaXRzCitkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcuIFRoZQorb2JsaWdhdGlvbnMgaW4gdGhpcyBzZWN0aW9uIGRvIG5vdCBhcHBseSB0byBhbnkgY2xhaW1zIG9yIExvc3NlcworcmVsYXRpbmcgdG8gYW55IGFjdHVhbCBvciBhbGxlZ2VkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQuIEluCitvcmRlciB0byBxdWFsaWZ5LCBhbiBJbmRlbW5pZmllZCBDb250cmlidXRvciBtdXN0OgorCisgIGEuIHByb21wdGx5IG5vdGlmeSB0aGUgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiB3cml0aW5nIG9mIHN1Y2gKKyAgY2xhaW0sIGFuZAorCisgIGIuIGFsbG93IHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHRvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUKKyAgQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiwgdGhlIGRlZmVuY2UgYW5kIGFueSByZWxhdGVkIHNldHRsZW1lbnQKKyAgbmVnb3RpYXRpb25zLgorCitUaGUgSW5kZW1uaWZpZWQgQ29udHJpYnV0b3IgbWF5IHBhcnRpY2lwYXRlIGluIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24KK2V4cGVuc2UuCisKK0ZvciBleGFtcGxlLCBhIENvbnRyaWJ1dG9yIG1pZ2h0IGluY2x1ZGUgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsCitwcm9kdWN0IG9mZmVyaW5nLCBQcm9kdWN0IFguIFRoYXQgQ29udHJpYnV0b3IgaXMgdGhlbiBhIENvbW1lcmNpYWwKK0NvbnRyaWJ1dG9yLiBJZiB0aGF0IENvbW1lcmNpYWwgQ29udHJpYnV0b3IgdGhlbiBtYWtlcyBwZXJmb3JtYW5jZQorY2xhaW1zLCBvciBvZmZlcnMgd2FycmFudGllcyByZWxhdGVkIHRvIFByb2R1Y3QgWCwgdGhvc2UgcGVyZm9ybWFuY2UKK2NsYWltcyBhbmQgd2FycmFudGllcyBhcmUgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkKK2Fsb25lLiBVbmRlciB0aGlzIHNlY3Rpb24sIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIHdvdWxkIGhhdmUgdG8KK2RlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUgb3RoZXIgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UKK3BlcmZvcm1hbmNlIGNsYWltcyBhbmQgd2FycmFudGllcywgYW5kIGlmIGEgY291cnQgcmVxdWlyZXMgYW55IG90aGVyCitDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZSBDb21tZXJjaWFsIENvbnRyaWJ1dG9yCittdXN0IHBheSB0aG9zZSBkYW1hZ2VzLgorCis1LiBOTyBXQVJSQU5UWQorCitFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTIEFHUkVFTUVOVCwgVEhFIFBST0dSQU0gSVMgUFJPVklERUQKK09OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELAorRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRJRVMKK09SIENPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUgorQSBQQVJUSUNVTEFSIFBVUlBPU0UuIEVhY2ggUmVjaXBpZW50IGlzIHNvbGVseSByZXNwb25zaWJsZSBmb3IKK2RldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgYW5kIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbQorYW5kIGFzc3VtZXMgYWxsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBpdHMgZXhlcmNpc2Ugb2YgcmlnaHRzIHVuZGVyIHRoaXMKK0FncmVlbWVudCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgcmlza3MgYW5kIGNvc3RzIG9mIHByb2dyYW0KK2Vycm9ycywgY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YgZGF0YSwKK3Byb2dyYW1zIG9yIGVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZiBvcGVyYXRpb25zLgorCis2LiBESVNDTEFJTUVSIE9GIExJQUJJTElUWQorCitFWENFUFQgQVMgRVhQUkVTU0xZIFNFVCBGT1JUSCBJTiBUSElTIEFHUkVFTUVOVCwgTkVJVEhFUiBSRUNJUElFTlQgTk9SCitBTlkgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgQU5ZIExJQUJJTElUWSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HCitXSVRIT1VUIExJTUlUQVRJT04gTE9TVCBQUk9GSVRTKSwgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCitORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9SCitESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gT1IgVEhFIEVYRVJDSVNFIE9GIEFOWSBSSUdIVFMgR1JBTlRFRAorSEVSRVVOREVSLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNy4gR0VORVJBTAorCitJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mCit0aGUgcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24KK2J5IHRoZSBwYXJ0aWVzIGhlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0KK2V4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBzdWNoIHByb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCisKK0lmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uIG9yIG90aGVyIHNpbWlsYXIgb2ZmaWNpYWwKK3Byb2NlZWRpbmdzIHRvIGVuZm9yY2UgcGF0ZW50IHJpZ2h0cyBhZ2FpbnN0IGEgQ29udHJpYnV0b3Igd2l0aCByZXNwZWN0Cit0byBhIHBhdGVudCBhcHBsaWNhYmxlIHRvIHNvZnR3YXJlIChpbmNsdWRpbmcgYSBjcm9zcy1jbGFpbSBvcgorY291bnRlcmNsYWltIGluIGEgbGF3c3VpdCksIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcyBncmFudGVkIGJ5IHRoYXQKK0NvbnRyaWJ1dG9yIHRvIHN1Y2ggUmVjaXBpZW50IHVuZGVyIHRoaXMgQWdyZWVtZW50IHNoYWxsIHRlcm1pbmF0ZSBhcyBvZgordGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLiBJbiBhZGRpdGlvbiwgaWYgUmVjaXBpZW50IGluc3RpdHV0ZXMKK3BhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0gb3IKK2NvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFByb2dyYW0gaXRzZWxmIChleGNsdWRpbmcKK2NvbWJpbmF0aW9ucyBvZiB0aGUgUHJvZ3JhbSB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGhhcmR3YXJlKSBpbmZyaW5nZXMKK3N1Y2ggUmVjaXBpZW50J3MgcGF0ZW50KHMpLCB0aGVuIHN1Y2ggUmVjaXBpZW50J3MgcmlnaHRzIGdyYW50ZWQgdW5kZXIKK1NlY3Rpb24gMihiKSBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorCitBbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHNoYWxsIHRlcm1pbmF0ZSBpZiBpdCBmYWlscwordG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvciBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50CithbmQgZG9lcyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgaW4gYSByZWFzb25hYmxlIHBlcmlvZCBvZiB0aW1lIGFmdGVyCitiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbi1jb21wbGlhbmNlLiBJZiBhbGwgUmVjaXBpZW50J3MgcmlnaHRzIHVuZGVyCit0aGlzIEFncmVlbWVudCB0ZXJtaW5hdGUsIFJlY2lwaWVudCBhZ3JlZXMgdG8gY2Vhc2UgdXNlIGFuZCBkaXN0cmlidXRpb24KK29mIHRoZSBQcm9ncmFtIGFzIHNvb24gYXMgcmVhc29uYWJseSBwcmFjdGljYWJsZS4gSG93ZXZlciwgUmVjaXBpZW50J3MKK29ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBieSBSZWNpcGllbnQKK3JlbGF0aW5nIHRvIHRoZSBQcm9ncmFtIHNoYWxsIGNvbnRpbnVlIGFuZCBzdXJ2aXZlLgorCitUaGUgT3BlbiBHcm91cCBtYXkgcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mIHRoaXMKK0FncmVlbWVudCBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCBuZXcgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUKK2dpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIFRoZSBQcm9ncmFtIChpbmNsdWRpbmcKK0NvbnRyaWJ1dGlvbnMpIG1heSBhbHdheXMgYmUgZGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZiB0aGUKK0FncmVlbWVudCB1bmRlciB3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uCitvZiB0aGUgQWdyZWVtZW50IGlzIHB1Ymxpc2hlZCwgQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIGRpc3RyaWJ1dGUgdGhlCitQcm9ncmFtIChpbmNsdWRpbmcgaXRzIENvbnRyaWJ1dGlvbnMpIHVuZGVyIHRoZSBuZXcgdmVyc2lvbi4gTm8gb25lCitvdGhlciB0aGFuIFRoZSBPcGVuIEdyb3VwIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50LiBFeGNlcHQKK2FzIGV4cHJlc3NseSBzdGF0ZWQgaW4gU2VjdGlvbnMgMihhKSBhbmQgMihiKSBhYm92ZSwgUmVjaXBpZW50IHJlY2VpdmVzCitubyByaWdodHMgb3IgbGljZW5zZXMgdG8gdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgQ29udHJpYnV0b3IKK3VuZGVyIHRoaXMgQWdyZWVtZW50LCB3aGV0aGVyIGV4cHJlc3NseSwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yCitvdGhlcndpc2UuIEFsbCByaWdodHMgaW4gdGhlIFByb2dyYW0gbm90IGV4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMKK0FncmVlbWVudCBhcmUgcmVzZXJ2ZWQuCisKK05vIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYnJpbmcgYSBsZWdhbCBhY3Rpb24gdW5kZXIgdGhpcworQWdyZWVtZW50IG1vcmUgdGhhbiBvbmUgeWVhciBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLiBFYWNoIHBhcnR5Cit3YWl2ZXMgaXRzIHJpZ2h0cyB0byBhIGp1cnkgdHJpYWwgaW4gYW55IHJlc3VsdGluZyBsaXRpZ2F0aW9uLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvTVBFRy00IGIvbGljZW5zZXMvTVBFRy00Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyYTUxZjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9NUEVHLTQKQEAgLTAsMCArMSwyMCBAQAorVGhpcyBzb2Z0d2FyZSBtb2R1bGUgd2FzIG9yaWdpbmFsbHkgZGV2ZWxvcGVkIGJ5IDxjb3B5cmlnaHQgaG9sZGVyPgorYW5kIGVkaXRlZCBieSA8Y29weXJpZ2h0IGhvbGRlcj4gaW4gdGhlIGNvdXJzZSBvZiBkZXZlbG9wbWVudCBvZiB0aGUKK01QRUctMiBOQkMvTVBFRy00IEF1ZGlvIHN0YW5kYXJkIElTTy9JRUMgMTM4MTgtNywgMTQ0OTYtMSwgMiBhbmQgMy4KK1RoaXMgc29mdHdhcmUgbW9kdWxlIGlzIGFuIGltcGxlbWVudGF0aW9uIG9mIGEgcGFydCBvZiBvbmUgb3IgbW9yZQorTVBFRy0yIE5CQy9NUEVHLTQgQXVkaW8gdG9vbHMgYXMgc3BlY2lmaWVkIGJ5IHRoZSBNUEVHLTIgTkJDL01QRUctNAorQXVkaW8gc3RhbmRhcmQuIElTTy9JRUMgZ2l2ZXMgdXNlcnMgb2YgdGhlIE1QRUctMiBOQkMvTVBFRy00IEF1ZGlvCitzdGFuZGFyZHMgZnJlZSBsaWNlbnNlIHRvIHRoaXMgc29mdHdhcmUgbW9kdWxlIG9yIG1vZGlmaWNhdGlvbnMKK3RoZXJlb2YgZm9yIHVzZSBpbiBoYXJkd2FyZSBvciBzb2Z0d2FyZSBwcm9kdWN0cyBjbGFpbWluZyBjb25mb3JtYW5jZQordG8gdGhlIE1QRUctMiBOQkMvTVBFRy00IEF1ZGlvIHN0YW5kYXJkcy4gVGhvc2UgaW50ZW5kaW5nIHRvIHVzZQordGhpcyBzb2Z0d2FyZSBtb2R1bGUgaW4gaGFyZHdhcmUgb3Igc29mdHdhcmUgcHJvZHVjdHMgYXJlIGFkdmlzZWQKK3RoYXQgdGhpcyB1c2UgbWF5IGluZnJpbmdlIGV4aXN0aW5nIHBhdGVudHMuIFRoZSBvcmlnaW5hbCBkZXZlbG9wZXIKK29mIHRoaXMgc29mdHdhcmUgbW9kdWxlIGFuZCBoaXMvaGVyIGNvbXBhbnksIHRoZSBzdWJzZXF1ZW50IGVkaXRvcnMKK2FuZCB0aGVpciBjb21wYW5pZXMsIGFuZCBJU08vSUVDIGhhdmUgbm8gbGlhYmlsaXR5IGZvciB1c2Ugb2YgdGhpcworc29mdHdhcmUgbW9kdWxlIG9yIG1vZGlmaWNhdGlvbnMgdGhlcmVvZiBpbiBhbiBpbXBsZW1lbnRhdGlvbi4KK0NvcHlyaWdodCBpcyBub3QgcmVsZWFzZWQgZm9yIG5vbiBNUEVHLTIgTkJDL01QRUctNCBBdWRpbyBjb25mb3JtaW5nCitwcm9kdWN0cy4gVGhlIG9yaWdpbmFsIGRldmVsb3BlciByZXRhaW5zIGZ1bGwgcmlnaHQgdG8gdXNlIHRoZQorY29kZSBmb3IgaGlzL2hlciBvd24gcHVycG9zZSwgYXNzaWduIG9yIGRvbmF0ZSB0aGUgY29kZSB0byBhIHRoaXJkCitwYXJ0eSBhbmQgdG8gaW5oaWJpdCB0aGlyZCBwYXJ0eSBmcm9tIHVzaW5nIHRoZSBjb2RlIGZvciBub24gTVBFRy0yCitOQkMvTVBFRy00IEF1ZGlvIGNvbmZvcm1pbmcgcHJvZHVjdHMuIFRoaXMgY29weXJpZ2h0IG5vdGljZSBtdXN0CitiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIGRlcml2YXRpdmUgd29ya3MuIENvcHlyaWdodCAoYykgPHllYXI+LgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvTVBMLTEuMCBiL2xpY2Vuc2VzL01QTC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQ0OWE4ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL01QTC0xLjAKQEAgLTAsMCArMSwzNjIgQEAKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgTU9aSUxMQSBQVUJMSUMgTElDRU5TRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDEuMAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tCisKKzEuIERlZmluaXRpb25zLgorCisgICAgIDEuMS4gYGBDb250cmlidXRvcicnIG1lYW5zIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0bworICAgICB0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKworICAgICAxLjIuIGBgQ29udHJpYnV0b3IgVmVyc2lvbicnIG1lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwKKyAgICAgQ29kZSwgcHJpb3IgTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEgQ29udHJpYnV0b3IsIGFuZCB0aGUgTW9kaWZpY2F0aW9ucworICAgICBtYWRlIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4KKworICAgICAxLjMuIGBgQ292ZXJlZCBDb2RlJycgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucyBvciB0aGUKKyAgICAgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgYW5kIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZQorICAgICBpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi4KKworICAgICAxLjQuIGBgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtJycgbWVhbnMgYSBtZWNoYW5pc20gZ2VuZXJhbGx5CisgICAgIGFjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljCisgICAgIHRyYW5zZmVyIG9mIGRhdGEuCisKKyAgICAgMS41LiBgYEV4ZWN1dGFibGUnJyBtZWFucyBDb3ZlcmVkIENvZGUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UKKyAgICAgQ29kZS4KKworICAgICAxLjYuIGBgSW5pdGlhbCBEZXZlbG9wZXInJyBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgaWRlbnRpZmllZCBhcworICAgICB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEuCisKKyAgICAgMS43LiBgYExhcmdlciBXb3JrJycgbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvcgorICAgICBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgICAxLjguIGBgTGljZW5zZScnIG1lYW5zIHRoaXMgZG9jdW1lbnQuCisKKyAgICAgMS45LiBgYE1vZGlmaWNhdGlvbnMnJyBtZWFucyBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUKKyAgICAgc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW55IHByZXZpb3VzCisgICAgIE1vZGlmaWNhdGlvbnMuIFdoZW4gQ292ZXJlZCBDb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhCisgICAgIE1vZGlmaWNhdGlvbiBpczoKKworICAgICAgICAgIEEuIEFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUKKyAgICAgICAgICBjb250YWluaW5nIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KKworICAgICAgICAgIEIuIEFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yCisgICAgICAgICAgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KKworICAgICAxLjEwLiBgYE9yaWdpbmFsIENvZGUnJyBtZWFucyBTb3VyY2UgQ29kZSBvZiBjb21wdXRlciBzb2Z0d2FyZSBjb2RlCisgICAgIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiB0aGUgU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQSBhcworICAgICBPcmlnaW5hbCBDb2RlLCBhbmQgd2hpY2gsIGF0IHRoZSB0aW1lIG9mIGl0cyByZWxlYXNlIHVuZGVyIHRoaXMgTGljZW5zZQorICAgICBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLgorCisgICAgIDEuMTEuIGBgU291cmNlIENvZGUnJyBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIENvdmVyZWQgQ29kZSBmb3IKKyAgICAgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkKKyAgICAgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wKKyAgICAgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBFeGVjdXRhYmxlLCBvciBhIGxpc3Qgb2Ygc291cmNlIGNvZGUKKyAgICAgZGlmZmVyZW50aWFsIGNvbXBhcmlzb25zIGFnYWluc3QgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFub3RoZXIKKyAgICAgd2VsbCBrbm93biwgYXZhaWxhYmxlIENvdmVyZWQgQ29kZSBvZiB0aGUgQ29udHJpYnV0b3IncyBjaG9pY2UuIFRoZQorICAgICBTb3VyY2UgQ29kZSBjYW4gYmUgaW4gYSBjb21wcmVzc2VkIG9yIGFyY2hpdmFsIGZvcm0sIHByb3ZpZGVkIHRoZQorICAgICBhcHByb3ByaWF0ZSBkZWNvbXByZXNzaW9uIG9yIGRlLWFyY2hpdmluZyBzb2Z0d2FyZSBpcyB3aWRlbHkgYXZhaWxhYmxlCisgICAgIGZvciBubyBjaGFyZ2UuCisKKyAgICAgMS4xMi4gYGBZb3UnJyBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzCisgICAgIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlCisgICAgIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGlzc3VlZCB1bmRlciBTZWN0aW9uIDYuMS4gRm9yIGxlZ2FsIGVudGl0aWVzLAorICAgICBgYFlvdScnIGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzCisgICAgIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLAorICAgICBgYGNvbnRyb2wnJyBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZQorICAgICBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvcgorICAgICBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQorICAgICBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisKKzIuIFNvdXJjZSBDb2RlIExpY2Vuc2UuCisKKyAgICAgMi4xLiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgR3JhbnQuCisgICAgIFRoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwKKyAgICAgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eQorICAgICBjbGFpbXM6CisKKyAgICAgICAgICAoYSkgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQKKyAgICAgICAgICBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSB3aXRoIG9yIHdpdGhvdXQKKyAgICAgICAgICBNb2RpZmljYXRpb25zLCBvciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorCisgICAgICAgICAgKGIpIHVuZGVyIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5IEluaXRpYWwKKyAgICAgICAgICBEZXZlbG9wZXIsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlIGFuZCBzZWxsIChgYFV0aWxpemUnJykgdGhlCisgICAgICAgICAgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZiksIGJ1dCBzb2xlbHkgdG8gdGhlIGV4dGVudCB0aGF0CisgICAgICAgICAgYW55IHN1Y2ggcGF0ZW50IGlzIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGVuYWJsZSBZb3UgdG8gVXRpbGl6ZQorICAgICAgICAgIHRoZSBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSBhbmQgbm90IHRvIGFueSBncmVhdGVyCisgICAgICAgICAgZXh0ZW50IHRoYXQgbWF5IGJlIG5lY2Vzc2FyeSB0byBVdGlsaXplIGZ1cnRoZXIgTW9kaWZpY2F0aW9ucyBvcgorICAgICAgICAgIGNvbWJpbmF0aW9ucy4KKworICAgICAyLjIuIENvbnRyaWJ1dG9yIEdyYW50LgorICAgICBFYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLAorICAgICBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5CisgICAgIGNsYWltczoKKworICAgICAgICAgIChhKSB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZAorICAgICAgICAgIGRpc3RyaWJ1dGUgdGhlIE1vZGlmaWNhdGlvbnMgY3JlYXRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIChvcgorICAgICAgICAgIHBvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyCisgICAgICAgICAgTW9kaWZpY2F0aW9ucywgYXMgQ292ZXJlZCBDb2RlIG9yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisKKyAgICAgICAgICAoYikgdW5kZXIgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkKKyAgICAgICAgICBDb250cmlidXRvciwgdG8gVXRpbGl6ZSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMKKyAgICAgICAgICB0aGVyZW9mKSwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55IHN1Y2ggcGF0ZW50IGlzCisgICAgICAgICAgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gZW5hYmxlIFlvdSB0byBVdGlsaXplIHRoZSBDb250cmlidXRvcgorICAgICAgICAgIFZlcnNpb24gKG9yIHBvcnRpb25zIHRoZXJlb2YpLCBhbmQgbm90IHRvIGFueSBncmVhdGVyIGV4dGVudCB0aGF0CisgICAgICAgICAgbWF5IGJlIG5lY2Vzc2FyeSB0byBVdGlsaXplIGZ1cnRoZXIgTW9kaWZpY2F0aW9ucyBvciBjb21iaW5hdGlvbnMuCisKKzMuIERpc3RyaWJ1dGlvbiBPYmxpZ2F0aW9ucy4KKworICAgICAzLjEuIEFwcGxpY2F0aW9uIG9mIExpY2Vuc2UuCisgICAgIFRoZSBNb2RpZmljYXRpb25zIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlCisgICAgIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAgICAgU2VjdGlvbiAyLjIuIFRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBtYXkgYmUgZGlzdHJpYnV0ZWQKKyAgICAgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcworICAgICBMaWNlbnNlIHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNi4xLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcworICAgICBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgU291cmNlIENvZGUgWW91IGRpc3RyaWJ1dGUuIFlvdSBtYXkgbm90CisgICAgIG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gYW55IFNvdXJjZSBDb2RlIHZlcnNpb24gdGhhdCBhbHRlcnMgb3IKKyAgICAgcmVzdHJpY3RzIHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSByZWNpcGllbnRzJworICAgICByaWdodHMgaGVyZXVuZGVyLiBIb3dldmVyLCBZb3UgbWF5IGluY2x1ZGUgYW4gYWRkaXRpb25hbCBkb2N1bWVudAorICAgICBvZmZlcmluZyB0aGUgYWRkaXRpb25hbCByaWdodHMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy41LgorCisgICAgIDMuMi4gQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLgorICAgICBBbnkgTW9kaWZpY2F0aW9uIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgbXVzdCBiZQorICAgICBtYWRlIGF2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UKKyAgICAgZWl0aGVyIG9uIHRoZSBzYW1lIG1lZGlhIGFzIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciB2aWEgYW4gYWNjZXB0ZWQKKyAgICAgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIHRvIGFueW9uZSB0byB3aG9tIHlvdSBtYWRlIGFuCisgICAgIEV4ZWN1dGFibGUgdmVyc2lvbiBhdmFpbGFibGU7IGFuZCBpZiBtYWRlIGF2YWlsYWJsZSB2aWEgRWxlY3Ryb25pYworICAgICBEaXN0cmlidXRpb24gTWVjaGFuaXNtLCBtdXN0IHJlbWFpbiBhdmFpbGFibGUgZm9yIGF0IGxlYXN0IHR3ZWx2ZSAoMTIpCisgICAgIG1vbnRocyBhZnRlciB0aGUgZGF0ZSBpdCBpbml0aWFsbHkgYmVjYW1lIGF2YWlsYWJsZSwgb3IgYXQgbGVhc3Qgc2l4CisgICAgICg2KSBtb250aHMgYWZ0ZXIgYSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhhdCBwYXJ0aWN1bGFyIE1vZGlmaWNhdGlvbgorICAgICBoYXMgYmVlbiBtYWRlIGF2YWlsYWJsZSB0byBzdWNoIHJlY2lwaWVudHMuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yCisgICAgIGVuc3VyaW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gcmVtYWlucyBhdmFpbGFibGUgZXZlbiBpZiB0aGUKKyAgICAgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIGlzIG1haW50YWluZWQgYnkgYSB0aGlyZCBwYXJ0eS4KKworICAgICAzLjMuIERlc2NyaXB0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisgICAgIFlvdSBtdXN0IGNhdXNlIGFsbCBDb3ZlcmVkIENvZGUgdG8gd2hpY2ggeW91IGNvbnRyaWJ1dGUgdG8gY29udGFpbiBhCisgICAgIGZpbGUgZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgWW91IG1hZGUgdG8gY3JlYXRlIHRoYXQgQ292ZXJlZCBDb2RlIGFuZAorICAgICB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLiBZb3UgbXVzdCBpbmNsdWRlIGEgcHJvbWluZW50IHN0YXRlbWVudCB0aGF0IHRoZQorICAgICBNb2RpZmljYXRpb24gaXMgZGVyaXZlZCwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgZnJvbSBPcmlnaW5hbCBDb2RlCisgICAgIHByb3ZpZGVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsCisgICAgIERldmVsb3BlciBpbiAoYSkgdGhlIFNvdXJjZSBDb2RlLCBhbmQgKGIpIGluIGFueSBub3RpY2UgaW4gYW4KKyAgICAgRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBpbiB3aGljaCBZb3UgZGVzY3JpYmUgdGhlCisgICAgIG9yaWdpbiBvciBvd25lcnNoaXAgb2YgdGhlIENvdmVyZWQgQ29kZS4KKworICAgICAzLjQuIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBNYXR0ZXJzCisKKyAgICAgICAgICAoYSkgVGhpcmQgUGFydHkgQ2xhaW1zLgorICAgICAgICAgIElmIFlvdSBoYXZlIGtub3dsZWRnZSB0aGF0IGEgcGFydHkgY2xhaW1zIGFuIGludGVsbGVjdHVhbCBwcm9wZXJ0eQorICAgICAgICAgIHJpZ2h0IGluIHBhcnRpY3VsYXIgZnVuY3Rpb25hbGl0eSBvciBjb2RlIChvciBpdHMgdXRpbGl6YXRpb24KKyAgICAgICAgICB1bmRlciB0aGlzIExpY2Vuc2UpLCB5b3UgbXVzdCBpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlIHNvdXJjZQorICAgICAgICAgIGNvZGUgZGlzdHJpYnV0aW9uIHRpdGxlZCBgYExFR0FMJycgd2hpY2ggZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQKKyAgICAgICAgICB0aGUgcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgcmVjaXBpZW50CisgICAgICAgICAgd2lsbCBrbm93IHdob20gdG8gY29udGFjdC4gSWYgeW91IG9idGFpbiBzdWNoIGtub3dsZWRnZSBhZnRlciBZb3UKKyAgICAgICAgICBtYWtlIFlvdXIgTW9kaWZpY2F0aW9uIGF2YWlsYWJsZSBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjIsIFlvdQorICAgICAgICAgIHNoYWxsIHByb21wdGx5IG1vZGlmeSB0aGUgTEVHQUwgZmlsZSBpbiBhbGwgY29waWVzIFlvdSBtYWtlCisgICAgICAgICAgYXZhaWxhYmxlIHRoZXJlYWZ0ZXIgYW5kIHNoYWxsIHRha2Ugb3RoZXIgc3RlcHMgKHN1Y2ggYXMgbm90aWZ5aW5nCisgICAgICAgICAgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cyBvciBuZXdzZ3JvdXBzKSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8KKyAgICAgICAgICBpbmZvcm0gdGhvc2Ugd2hvIHJlY2VpdmVkIHRoZSBDb3ZlcmVkIENvZGUgdGhhdCBuZXcga25vd2xlZGdlIGhhcworICAgICAgICAgIGJlZW4gb2J0YWluZWQuCisKKyAgICAgICAgICAoYikgQ29udHJpYnV0b3IgQVBJcy4KKyAgICAgICAgICBJZiBZb3VyIE1vZGlmaWNhdGlvbiBpcyBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UgYW5kCisgICAgICAgICAgWW91IG93biBvciBjb250cm9sIHBhdGVudHMgd2hpY2ggYXJlIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvCisgICAgICAgICAgaW1wbGVtZW50IHRoYXQgQVBJLCB5b3UgbXVzdCBhbHNvIGluY2x1ZGUgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUKKyAgICAgICAgICBMRUdBTCBmaWxlLgorCisgICAgIDMuNS4gUmVxdWlyZWQgTm90aWNlcy4KKyAgICAgWW91IG11c3QgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlCisgICAgIENvZGUsIGFuZCB0aGlzIExpY2Vuc2UgaW4gYW55IGRvY3VtZW50YXRpb24gZm9yIHRoZSBTb3VyY2UgQ29kZSwgd2hlcmUKKyAgICAgWW91IGRlc2NyaWJlIHJlY2lwaWVudHMnIHJpZ2h0cyByZWxhdGluZyB0byBDb3ZlcmVkIENvZGUuIElmIFlvdQorICAgICBjcmVhdGVkIG9uZSBvciBtb3JlIE1vZGlmaWNhdGlvbihzKSwgWW91IG1heSBhZGQgeW91ciBuYW1lIGFzIGEKKyAgICAgQ29udHJpYnV0b3IgdG8gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLiBJZiBpdCBpcyBub3QgcG9zc2libGUKKyAgICAgdG8gcHV0IHN1Y2ggbm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UgQ29kZSBmaWxlIGR1ZSB0byBpdHMKKyAgICAgc3RydWN0dXJlLCB0aGVuIHlvdSBtdXN0IGluY2x1ZGUgc3VjaCBub3RpY2UgaW4gYSBsb2NhdGlvbiAoc3VjaCBhcyBhCisgICAgIHJlbGV2YW50IGRpcmVjdG9yeSBmaWxlKSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5IHRvIGxvb2sgZm9yIHN1Y2gKKyAgICAgYSBub3RpY2UuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksCisgICAgIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cworICAgICBvZiBDb3ZlcmVkIENvZGUuIEhvd2V2ZXIsIFlvdSBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYsIGFuZAorICAgICBub3Qgb24gYmVoYWxmIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0CisgICAgIG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGFuIGFueSBzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IKKyAgICAgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvCisgICAgIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5CisgICAgIGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mCisgICAgIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IHRlcm1zIFlvdSBvZmZlci4KKworICAgICAzLjYuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLgorICAgICBZb3UgbWF5IGRpc3RyaWJ1dGUgQ292ZXJlZCBDb2RlIGluIEV4ZWN1dGFibGUgZm9ybSBvbmx5IGlmIHRoZQorICAgICByZXF1aXJlbWVudHMgb2YgU2VjdGlvbiAzLjEtMy41IGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgQ292ZXJlZCBDb2RlLAorICAgICBhbmQgaWYgWW91IGluY2x1ZGUgYSBub3RpY2Ugc3RhdGluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIHRoZQorICAgICBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGluY2x1ZGluZyBhCisgICAgIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgWW91IGhhdmUgZnVsZmlsbGVkIHRoZSBvYmxpZ2F0aW9ucyBvZgorICAgICBTZWN0aW9uIDMuMi4gVGhlIG5vdGljZSBtdXN0IGJlIGNvbnNwaWN1b3VzbHkgaW5jbHVkZWQgaW4gYW55IG5vdGljZSBpbgorICAgICBhbiBFeGVjdXRhYmxlIHZlcnNpb24sIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvciBjb2xsYXRlcmFsIGluIHdoaWNoIFlvdQorICAgICBkZXNjcmliZSByZWNpcGllbnRzJyByaWdodHMgcmVsYXRpbmcgdG8gdGhlIENvdmVyZWQgQ29kZS4gWW91IG1heQorICAgICBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIHVuZGVyIGEgbGljZW5zZSBvZgorICAgICBZb3VyIGNob2ljZSwgd2hpY2ggbWF5IGNvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlLAorICAgICBwcm92aWRlZCB0aGF0IFlvdSBhcmUgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kCisgICAgIHRoYXQgdGhlIGxpY2Vuc2UgZm9yIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gZG9lcyBub3QgYXR0ZW1wdCB0byBsaW1pdAorICAgICBvciBhbHRlciB0aGUgcmVjaXBpZW50J3MgcmlnaHRzIGluIHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIGZyb20gdGhlCisgICAgIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLiBJZiBZb3UgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZQorICAgICB2ZXJzaW9uIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyCisgICAgIHRoYXQgYW55IHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZSBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsCisgICAgIG5vdCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgaGVyZWJ5IGFncmVlIHRvCisgICAgIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5CisgICAgIGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mCisgICAgIGFueSBzdWNoIHRlcm1zIFlvdSBvZmZlci4KKworICAgICAzLjcuIExhcmdlciBXb3Jrcy4KKyAgICAgWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBDb2RlIHdpdGggb3RoZXIgY29kZQorICAgICBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyCisgICAgIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUKKyAgICAgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlLgorCis0LiBJbmFiaWxpdHkgdG8gQ29tcGx5IER1ZSB0byBTdGF0dXRlIG9yIFJlZ3VsYXRpb24uCisKKyAgICAgSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcworICAgICBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgQ292ZXJlZCBDb2RlIGR1ZSB0byBzdGF0dXRlCisgICAgIG9yIHJlZ3VsYXRpb24gdGhlbiBZb3UgbXVzdDogKGEpIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UKKyAgICAgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlOyBhbmQgKGIpIGRlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQKKyAgICAgdGhlIGNvZGUgdGhleSBhZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUgTEVHQUwKKyAgICAgZmlsZSBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjQgYW5kIG11c3QgYmUgaW5jbHVkZWQgd2l0aCBhbGwKKyAgICAgZGlzdHJpYnV0aW9ucyBvZiB0aGUgU291cmNlIENvZGUuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkKKyAgICAgc3RhdHV0ZSBvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgc3VmZmljaWVudGx5IGRldGFpbGVkCisgICAgIGZvciBhIHJlY2lwaWVudCBvZiBvcmRpbmFyeSBza2lsbCB0byBiZSBhYmxlIHRvIHVuZGVyc3RhbmQgaXQuCisKKzUuIEFwcGxpY2F0aW9uIG9mIHRoaXMgTGljZW5zZS4KKworICAgICBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoIHRoZSBJbml0aWFsIERldmVsb3BlciBoYXMKKyAgICAgYXR0YWNoZWQgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEsIGFuZCB0byByZWxhdGVkIENvdmVyZWQgQ29kZS4KKworNi4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuCisKKyAgICAgNi4xLiBOZXcgVmVyc2lvbnMuCisgICAgIE5ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uIChgYE5ldHNjYXBlJycpIG1heSBwdWJsaXNoIHJldmlzZWQKKyAgICAgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwKKyAgICAgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4KKworICAgICA2LjIuIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuCisgICAgIE9uY2UgQ292ZXJlZCBDb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUKKyAgICAgTGljZW5zZSwgWW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0CisgICAgIHZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggQ292ZXJlZCBDb2RlIHVuZGVyIHRoZSB0ZXJtcworICAgICBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHB1Ymxpc2hlZCBieSBOZXRzY2FwZS4gTm8gb25lCisgICAgIG90aGVyIHRoYW4gTmV0c2NhcGUgaGFzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8KKyAgICAgQ292ZXJlZCBDb2RlIGNyZWF0ZWQgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisgICAgIDYuMy4gRGVyaXZhdGl2ZSBXb3Jrcy4KKyAgICAgSWYgeW91IGNyZWF0ZSBvciB1c2UgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSAod2hpY2ggeW91IG1heQorICAgICBvbmx5IGRvIGluIG9yZGVyIHRvIGFwcGx5IGl0IHRvIGNvZGUgd2hpY2ggaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlCisgICAgIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZSksIHlvdSBtdXN0IChhKSByZW5hbWUgWW91ciBsaWNlbnNlIHNvIHRoYXQgdGhlCisgICAgIHBocmFzZXMgYGBNb3ppbGxhJycsIGBgTU9aSUxMQVBMJycsIGBgTU9aUEwnJywgYGBOZXRzY2FwZScnLCBgYE5QTCcnIG9yCisgICAgIGFueSBjb25mdXNpbmdseSBzaW1pbGFyIHBocmFzZSBkbyBub3QgYXBwZWFyIGFueXdoZXJlIGluIHlvdXIgbGljZW5zZQorICAgICBhbmQgKGIpIG90aGVyd2lzZSBtYWtlIGl0IGNsZWFyIHRoYXQgeW91ciB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlCisgICAgIGNvbnRhaW5zIHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIGFuZAorICAgICBOZXRzY2FwZSBQdWJsaWMgTGljZW5zZS4gKEZpbGxpbmcgaW4gdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLAorICAgICBPcmlnaW5hbCBDb2RlIG9yIENvbnRyaWJ1dG9yIGluIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQSBzaGFsbAorICAgICBub3Qgb2YgdGhlbXNlbHZlcyBiZSBkZWVtZWQgdG8gYmUgbW9kaWZpY2F0aW9ucyBvZiB0aGlzIExpY2Vuc2UuKQorCis3LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLgorCisgICAgIENPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gYGBBUyBJUycnIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywKKyAgICAgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIENPVkVSRUQgQ09ERSBJUyBGUkVFIE9GCisgICAgIERFRkVDVFMsIE1FUkNIQU5UQUJMRSwgRklUIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tSU5GUklOR0lORy4KKyAgICAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgQ09WRVJFRCBDT0RFCisgICAgIElTIFdJVEggWU9VLiBTSE9VTEQgQU5ZIENPVkVSRUQgQ09ERSBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsCisgICAgIFlPVSAoTk9UIFRIRSBJTklUSUFMIERFVkVMT1BFUiBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUKKyAgICAgQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUgorICAgICBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRgorICAgICBBTlkgQ09WRVJFRCBDT0RFIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIERJU0NMQUlNRVIuCisKKzguIFRFUk1JTkFUSU9OLgorCisgICAgIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZQorICAgICBhdXRvbWF0aWNhbGx5IGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlCisgICAgIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIEFsbAorICAgICBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoIGFyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsCisgICAgIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIKKyAgICAgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UKKyAgICAgc2hhbGwgc3Vydml2ZS4KKworOS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuCisKKyAgICAgVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBXSEVUSEVSIFRPUlQKKyAgICAgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgVEhFIElOSVRJQUwKKyAgICAgREVWRUxPUEVSLCBBTlkgT1RIRVIgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBDT1ZFUkVEIENPREUsCisgICAgIE9SIEFOWSBTVVBQTElFUiBPRiBBTlkgT0YgU1VDSCBQQVJUSUVTLCBCRSBMSUFCTEUgVE8gWU9VIE9SIEFOWSBPVEhFUgorICAgICBQRVJTT04gRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgICAgIE9GIEFOWSBDSEFSQUNURVIgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YKKyAgICAgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQKKyAgICAgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgU1VDSCBQQVJUWSBTSEFMTCBIQVZFCisgICAgIEJFRU4gSU5GT1JNRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhJUyBMSU1JVEFUSU9OIE9GCisgICAgIExJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkKKyAgICAgUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWSdTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVworICAgICBQUk9ISUJJVFMgU1VDSCBMSU1JVEFUSU9OLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRQorICAgICBFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhBVAorICAgICBFWENMVVNJT04gQU5EIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzEwLiBVLlMuIEdPVkVSTk1FTlQgRU5EIFVTRVJTLgorCisgICAgIFRoZSBDb3ZlcmVkIENvZGUgaXMgYSBgYGNvbW1lcmNpYWwgaXRlbSwnJyBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbgorICAgICA0OCBDLkYuUi4gMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2YgYGBjb21tZXJjaWFsIGNvbXB1dGVyCisgICAgIHNvZnR3YXJlJycgYW5kIGBgY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBkb2N1bWVudGF0aW9uLCcnIGFzIHN1Y2gKKyAgICAgdGVybXMgYXJlIHVzZWQgaW4gNDggQy5GLlIuIDEyLjIxMiAoU2VwdC4gMTk5NSkuIENvbnNpc3RlbnQgd2l0aCA0OAorICAgICBDLkYuUi4gMTIuMjEyIGFuZCA0OCBDLkYuUi4gMjI3LjcyMDItMSB0aHJvdWdoIDIyNy43MjAyLTQgKEp1bmUgMTk5NSksCisgICAgIGFsbCBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzIGFjcXVpcmUgQ292ZXJlZCBDb2RlIHdpdGggb25seSB0aG9zZQorICAgICByaWdodHMgc2V0IGZvcnRoIGhlcmVpbi4KKworMTEuIE1JU0NFTExBTkVPVVMuCisKKyAgICAgVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHN1YmplY3QKKyAgICAgbWF0dGVyIGhlcmVvZi4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZQorICAgICB1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQKKyAgICAgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieQorICAgICBDYWxpZm9ybmlhIGxhdyBwcm92aXNpb25zIChleGNlcHQgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdywgaWYgYW55LAorICAgICBwcm92aWRlcyBvdGhlcndpc2UpLCBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBXaXRoCisgICAgIHJlc3BlY3QgdG8gZGlzcHV0ZXMgaW4gd2hpY2ggYXQgbGVhc3Qgb25lIHBhcnR5IGlzIGEgY2l0aXplbiBvZiwgb3IgYW4KKyAgICAgZW50aXR5IGNoYXJ0ZXJlZCBvciByZWdpc3RlcmVkIHRvIGRvIGJ1c2luZXNzIGluLCB0aGUgVW5pdGVkIFN0YXRlcyBvZgorICAgICBBbWVyaWNhOiAoYSkgdW5sZXNzIG90aGVyd2lzZSBhZ3JlZWQgaW4gd3JpdGluZywgYWxsIGRpc3B1dGVzIHJlbGF0aW5nCisgICAgIHRvIHRoaXMgTGljZW5zZSAoZXhjZXB0aW5nIGFueSBkaXNwdXRlIHJlbGF0aW5nIHRvIGludGVsbGVjdHVhbAorICAgICBwcm9wZXJ0eSByaWdodHMpIHNoYWxsIGJlIHN1YmplY3QgdG8gZmluYWwgYW5kIGJpbmRpbmcgYXJiaXRyYXRpb24sCisgICAgIHdpdGggdGhlIGxvc2luZyBwYXJ0eSBwYXlpbmcgYWxsIGNvc3RzIG9mIGFyYml0cmF0aW9uOyAoYikgYW55CisgICAgIGFyYml0cmF0aW9uIHJlbGF0aW5nIHRvIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGhlbGQgaW4gU2FudGEgQ2xhcmEKKyAgICAgQ291bnR5LCBDYWxpZm9ybmlhLCB1bmRlciB0aGUgYXVzcGljZXMgb2YgSkFNUy9FbmREaXNwdXRlOyBhbmQgKGMpIGFueQorICAgICBsaXRpZ2F0aW9uIHJlbGF0aW5nIHRvIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlCisgICAgIGp1cmlzZGljdGlvbiBvZiB0aGUgRmVkZXJhbCBDb3VydHMgb2YgdGhlIE5vcnRoZXJuIERpc3RyaWN0IG9mCisgICAgIENhbGlmb3JuaWEsIHdpdGggdmVudWUgbHlpbmcgaW4gU2FudGEgQ2xhcmEgQ291bnR5LCBDYWxpZm9ybmlhLCB3aXRoCisgICAgIHRoZSBsb3NpbmcgcGFydHkgcmVzcG9uc2libGUgZm9yIGNvc3RzLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLAorICAgICBjb3VydCBjb3N0cyBhbmQgcmVhc29uYWJsZSBhdHRvcm5leXMgZmVlcyBhbmQgZXhwZW5zZXMuIFRoZSBhcHBsaWNhdGlvbgorICAgICBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsCisgICAgIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2gKKyAgICAgcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUKKyAgICAgZHJhZnRlciBzaGFsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLgorCisxMi4gUkVTUE9OU0lCSUxJVFkgRk9SIENMQUlNUy4KKworICAgICBFeGNlcHQgaW4gY2FzZXMgd2hlcmUgYW5vdGhlciBDb250cmlidXRvciBoYXMgZmFpbGVkIHRvIGNvbXBseSB3aXRoCisgICAgIFNlY3Rpb24gMy40LCBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yCisgICAgIGluZGlyZWN0bHksIG91dCBvZiBZb3VyIHV0aWxpemF0aW9uIG9mIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UsIGJhc2VkCisgICAgIG9uIHRoZSBudW1iZXIgb2YgY29waWVzIG9mIENvdmVyZWQgQ29kZSB5b3UgbWFkZSBhdmFpbGFibGUsIHRoZQorICAgICByZXZlbnVlcyB5b3UgcmVjZWl2ZWQgZnJvbSB1dGlsaXppbmcgc3VjaCByaWdodHMsIGFuZCBvdGhlciByZWxldmFudAorICAgICBmYWN0b3JzLiBZb3UgYWdyZWUgdG8gd29yayB3aXRoIGFmZmVjdGVkIHBhcnRpZXMgdG8gZGlzdHJpYnV0ZQorICAgICByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuCisKK0VYSElCSVQgQS4KKworICAgICBgYFRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UKKyAgICAgVmVyc2lvbiAxLjAgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbgorICAgICBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAgICBodHRwOi8vd3d3Lm1vemlsbGEub3JnL01QTC8KKworICAgICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiCisgICAgIGJhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlCisgICAgIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucworICAgICB1bmRlciB0aGUgTGljZW5zZS4KKworICAgICBUaGUgT3JpZ2luYWwgQ29kZSBpcyBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy4KKworICAgICBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMgX19fX19fX19fX19fX19fX19fX19fX19fLgorICAgICBQb3J0aW9ucyBjcmVhdGVkIGJ5IF9fX19fX19fX19fX19fX19fX19fX18gYXJlIENvcHlyaWdodCAoQykgX19fX19fCisgICAgIF9fX19fX19fX19fX19fX19fX19fX19fLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisgICAgIENvbnRyaWJ1dG9yKHMpOiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy4nJworCmRpZmYgLS1naXQgYS9saWNlbnNlcy9NUEwtMS4xIGIvbGljZW5zZXMvTVBMLTEuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGY4MTA5Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvTVBMLTEuMQpAQCAtMCwwICsxLDU2NyBAQAorICAgICAgICAgICAgICAgICAgICAgICAgICBNT1pJTExBIFBVQkxJQyBMSUNFTlNFCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMS4xCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0tLS0tLQorCisxLiBEZWZpbml0aW9ucy4KKworICAgICAxLjAuMS4gIkNvbW1lcmNpYWwgVXNlIiBtZWFucyBkaXN0cmlidXRpb24gb3Igb3RoZXJ3aXNlIG1ha2luZyB0aGUKKyAgICAgQ292ZXJlZCBDb2RlIGF2YWlsYWJsZSB0byBhIHRoaXJkIHBhcnR5LgorCisgICAgIDEuMS4gIkNvbnRyaWJ1dG9yIiBtZWFucyBlYWNoIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8KKyAgICAgdGhlIGNyZWF0aW9uIG9mIE1vZGlmaWNhdGlvbnMuCisKKyAgICAgMS4yLiAiQ29udHJpYnV0b3IgVmVyc2lvbiIgbWVhbnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbAorICAgICBDb2RlLCBwcmlvciBNb2RpZmljYXRpb25zIHVzZWQgYnkgYSBDb250cmlidXRvciwgYW5kIHRoZSBNb2RpZmljYXRpb25zCisgICAgIG1hZGUgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLgorCisgICAgIDEuMy4gIkNvdmVyZWQgQ29kZSIgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUgb3IgTW9kaWZpY2F0aW9ucyBvciB0aGUKKyAgICAgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgYW5kIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZQorICAgICBpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi4KKworICAgICAxLjQuICJFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20iIG1lYW5zIGEgbWVjaGFuaXNtIGdlbmVyYWxseQorICAgICBhY2NlcHRlZCBpbiB0aGUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5IGZvciB0aGUgZWxlY3Ryb25pYworICAgICB0cmFuc2ZlciBvZiBkYXRhLgorCisgICAgIDEuNS4gIkV4ZWN1dGFibGUiIG1lYW5zIENvdmVyZWQgQ29kZSBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIFNvdXJjZQorICAgICBDb2RlLgorCisgICAgIDEuNi4gIkluaXRpYWwgRGV2ZWxvcGVyIiBtZWFucyB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgaWRlbnRpZmllZAorICAgICBhcyB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0CisgICAgIEEuCisKKyAgICAgMS43LiAiTGFyZ2VyIFdvcmsiIG1lYW5zIGEgd29yayB3aGljaCBjb21iaW5lcyBDb3ZlcmVkIENvZGUgb3IKKyAgICAgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICAgMS44LiAiTGljZW5zZSIgbWVhbnMgdGhpcyBkb2N1bWVudC4KKworICAgICAxLjguMS4gIkxpY2Vuc2FibGUiIG1lYW5zIGhhdmluZyB0aGUgcmlnaHQgdG8gZ3JhbnQsIHRvIHRoZSBtYXhpbXVtCisgICAgIGV4dGVudCBwb3NzaWJsZSwgd2hldGhlciBhdCB0aGUgdGltZSBvZiB0aGUgaW5pdGlhbCBncmFudCBvcgorICAgICBzdWJzZXF1ZW50bHkgYWNxdWlyZWQsIGFueSBhbmQgYWxsIG9mIHRoZSByaWdodHMgY29udmV5ZWQgaGVyZWluLgorCisgICAgIDEuOS4gIk1vZGlmaWNhdGlvbnMiIG1lYW5zIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZQorICAgICBzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbnkgcHJldmlvdXMKKyAgICAgTW9kaWZpY2F0aW9ucy4gV2hlbiBDb3ZlcmVkIENvZGUgaXMgcmVsZWFzZWQgYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEKKyAgICAgTW9kaWZpY2F0aW9uIGlzOgorICAgICAgICAgIEEuIEFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUKKyAgICAgICAgICBjb250YWluaW5nIE9yaWdpbmFsIENvZGUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KKworICAgICAgICAgIEIuIEFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yCisgICAgICAgICAgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KKworICAgICAxLjEwLiAiT3JpZ2luYWwgQ29kZSIgbWVhbnMgU291cmNlIENvZGUgb2YgY29tcHV0ZXIgc29mdHdhcmUgY29kZQorICAgICB3aGljaCBpcyBkZXNjcmliZWQgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEgYXMKKyAgICAgT3JpZ2luYWwgQ29kZSwgYW5kIHdoaWNoLCBhdCB0aGUgdGltZSBvZiBpdHMgcmVsZWFzZSB1bmRlciB0aGlzCisgICAgIExpY2Vuc2UgaXMgbm90IGFscmVhZHkgQ292ZXJlZCBDb2RlIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS4KKworICAgICAxLjEwLjEuICJQYXRlbnQgQ2xhaW1zIiBtZWFucyBhbnkgcGF0ZW50IGNsYWltKHMpLCBub3cgb3duZWQgb3IKKyAgICAgaGVyZWFmdGVyIGFjcXVpcmVkLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCAgbWV0aG9kLCBwcm9jZXNzLAorICAgICBhbmQgYXBwYXJhdHVzIGNsYWltcywgaW4gYW55IHBhdGVudCBMaWNlbnNhYmxlIGJ5IGdyYW50b3IuCisKKyAgICAgMS4xMS4gIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIENvdmVyZWQgQ29kZSBmb3IKKyAgICAgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cworICAgICBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wKKyAgICAgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBFeGVjdXRhYmxlLCBvciBzb3VyY2UgY29kZQorICAgICBkaWZmZXJlbnRpYWwgY29tcGFyaXNvbnMgYWdhaW5zdCBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW5vdGhlcgorICAgICB3ZWxsIGtub3duLCBhdmFpbGFibGUgQ292ZXJlZCBDb2RlIG9mIHRoZSBDb250cmlidXRvcidzIGNob2ljZS4gVGhlCisgICAgIFNvdXJjZSBDb2RlIGNhbiBiZSBpbiBhIGNvbXByZXNzZWQgb3IgYXJjaGl2YWwgZm9ybSwgcHJvdmlkZWQgdGhlCisgICAgIGFwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24gb3IgZGUtYXJjaGl2aW5nIHNvZnR3YXJlIGlzIHdpZGVseSBhdmFpbGFibGUKKyAgICAgZm9yIG5vIGNoYXJnZS4KKworICAgICAxLjEyLiAiWW91IiAob3IgIllvdXIiKSAgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eQorICAgICBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZyB3aXRoIGFsbCBvZiB0aGUgdGVybXMgb2YsIHRoaXMKKyAgICAgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBpc3N1ZWQgdW5kZXIgU2VjdGlvbiA2LjEuCisgICAgIEZvciBsZWdhbCBlbnRpdGllcywgIllvdSIgaW5jbHVkZXMgYW55IGVudGl0eSB3aGljaCBjb250cm9scywgaXMKKyAgICAgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuIEZvciBwdXJwb3NlcyBvZgorICAgICB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsCisgICAgIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieQorICAgICBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YgbW9yZSB0aGFuIGZpZnR5IHBlcmNlbnQKKyAgICAgKDUwJSkgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoCisgICAgIGVudGl0eS4KKworMi4gU291cmNlIENvZGUgTGljZW5zZS4KKworICAgICAyLjEuIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4KKyAgICAgVGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLAorICAgICBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5CisgICAgIGNsYWltczoKKyAgICAgICAgICAoYSkgIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yCisgICAgICAgICAgdHJhZGVtYXJrKSBMaWNlbnNhYmxlIGJ5IEluaXRpYWwgRGV2ZWxvcGVyIHRvIHVzZSwgcmVwcm9kdWNlLAorICAgICAgICAgIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwKKyAgICAgICAgICBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSB3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgYW5kL29yCisgICAgICAgICAgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKworICAgICAgICAgIChiKSB1bmRlciBQYXRlbnRzIENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcgb3IKKyAgICAgICAgICBzZWxsaW5nIG9mIE9yaWdpbmFsIENvZGUsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBwcmFjdGljZSwKKyAgICAgICAgICBzZWxsLCBhbmQgb2ZmZXIgZm9yIHNhbGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZiB0aGUKKyAgICAgICAgICBPcmlnaW5hbCBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKS4KKworICAgICAgICAgIChjKSB0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiB0aGlzIFNlY3Rpb24gMi4xKGEpIGFuZCAoYikgYXJlCisgICAgICAgICAgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIEluaXRpYWwgRGV2ZWxvcGVyIGZpcnN0IGRpc3RyaWJ1dGVzCisgICAgICAgICAgT3JpZ2luYWwgQ29kZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgICAgICAgKGQpIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMShiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMKKyAgICAgICAgICBncmFudGVkOiAxKSBmb3IgY29kZSB0aGF0IFlvdSBkZWxldGUgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZTsgMikKKyAgICAgICAgICBzZXBhcmF0ZSBmcm9tIHRoZSBPcmlnaW5hbCBDb2RlOyAgb3IgMykgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkCisgICAgICAgICAgYnk6IGkpIHRoZSBtb2RpZmljYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IgaWkpIHRoZQorICAgICAgICAgIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgZGV2aWNlcy4KKworICAgICAyLjIuIENvbnRyaWJ1dG9yIEdyYW50LgorICAgICBTdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIGVhY2ggQ29udHJpYnV0b3IKKyAgICAgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZQorCisgICAgICAgICAgKGEpICB1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvcgorICAgICAgICAgIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBDb250cmlidXRvciwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwKKyAgICAgICAgICBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBNb2RpZmljYXRpb25zCisgICAgICAgICAgY3JlYXRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKSBlaXRoZXIgb24gYW4KKyAgICAgICAgICB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIGFzIENvdmVyZWQgQ29kZQorICAgICAgICAgIGFuZC9vciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZAorCisgICAgICAgICAgKGIpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nLCBvcgorICAgICAgICAgIHNlbGxpbmcgb2YgIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIGVpdGhlciBhbG9uZQorICAgICAgICAgIGFuZC9vciBpbiBjb21iaW5hdGlvbiB3aXRoIGl0cyBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucworICAgICAgICAgIG9mIHN1Y2ggY29tYmluYXRpb24pLCB0byBtYWtlLCB1c2UsIHNlbGwsIG9mZmVyIGZvciBzYWxlLCBoYXZlCisgICAgICAgICAgbWFkZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mOiAxKSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdAorICAgICAgICAgIENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKTsgYW5kIDIpIHRoZSBjb21iaW5hdGlvbiBvZgorICAgICAgICAgIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggaXRzIENvbnRyaWJ1dG9yCisgICAgICAgICAgVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbikuCisKKyAgICAgICAgICAoYykgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gU2VjdGlvbnMgMi4yKGEpIGFuZCAyLjIoYikgYXJlCisgICAgICAgICAgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIENvbnRyaWJ1dG9yIGZpcnN0IG1ha2VzIENvbW1lcmNpYWwgVXNlIG9mCisgICAgICAgICAgdGhlIENvdmVyZWQgQ29kZS4KKworICAgICAgICAgIChkKSAgICBOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjIoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzCisgICAgICAgICAgZ3JhbnRlZDogMSkgZm9yIGFueSBjb2RlIHRoYXQgQ29udHJpYnV0b3IgaGFzIGRlbGV0ZWQgZnJvbSB0aGUKKyAgICAgICAgICBDb250cmlidXRvciBWZXJzaW9uOyAyKSAgc2VwYXJhdGUgZnJvbSB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbjsKKyAgICAgICAgICAzKSAgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkIGJ5OiBpKSB0aGlyZCBwYXJ0eSBtb2RpZmljYXRpb25zIG9mCisgICAgICAgICAgQ29udHJpYnV0b3IgVmVyc2lvbiBvciBpaSkgIHRoZSBjb21iaW5hdGlvbiBvZiBNb2RpZmljYXRpb25zIG1hZGUKKyAgICAgICAgICBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggb3RoZXIgc29mdHdhcmUgIChleGNlcHQgYXMgcGFydCBvZiB0aGUKKyAgICAgICAgICBDb250cmlidXRvciBWZXJzaW9uKSBvciBvdGhlciBkZXZpY2VzOyBvciA0KSB1bmRlciBQYXRlbnQgQ2xhaW1zCisgICAgICAgICAgaW5mcmluZ2VkIGJ5IENvdmVyZWQgQ29kZSBpbiB0aGUgYWJzZW5jZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkKKyAgICAgICAgICB0aGF0IENvbnRyaWJ1dG9yLgorCiszLiBEaXN0cmlidXRpb24gT2JsaWdhdGlvbnMuCisKKyAgICAgMy4xLiBBcHBsaWNhdGlvbiBvZiBMaWNlbnNlLgorICAgICBUaGUgTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZQorICAgICBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgICAgIFNlY3Rpb24gMi4yLiBUaGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgbWF5IGJlCisgICAgIGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uCisgICAgIG9mIHRoaXMgTGljZW5zZSByZWxlYXNlZCB1bmRlciBTZWN0aW9uIDYuMSwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYQorICAgICBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIFlvdQorICAgICBkaXN0cmlidXRlLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIGFueSBTb3VyY2UgQ29kZQorICAgICB2ZXJzaW9uIHRoYXQgYWx0ZXJzIG9yIHJlc3RyaWN0cyB0aGUgYXBwbGljYWJsZSB2ZXJzaW9uIG9mIHRoaXMKKyAgICAgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50cycgcmlnaHRzIGhlcmV1bmRlci4gSG93ZXZlciwgWW91IG1heSBpbmNsdWRlCisgICAgIGFuIGFkZGl0aW9uYWwgZG9jdW1lbnQgb2ZmZXJpbmcgdGhlIGFkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZCBpbgorICAgICBTZWN0aW9uIDMuNS4KKworICAgICAzLjIuIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4KKyAgICAgQW55IE1vZGlmaWNhdGlvbiB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIG11c3QgYmUKKyAgICAgbWFkZSBhdmFpbGFibGUgaW4gU291cmNlIENvZGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlCisgICAgIGVpdGhlciBvbiB0aGUgc2FtZSBtZWRpYSBhcyBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IgdmlhIGFuIGFjY2VwdGVkCisgICAgIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSB0byBhbnlvbmUgdG8gd2hvbSB5b3UgbWFkZSBhbgorICAgICBFeGVjdXRhYmxlIHZlcnNpb24gYXZhaWxhYmxlOyBhbmQgaWYgbWFkZSBhdmFpbGFibGUgdmlhIEVsZWN0cm9uaWMKKyAgICAgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSwgbXVzdCByZW1haW4gYXZhaWxhYmxlIGZvciBhdCBsZWFzdCB0d2VsdmUgKDEyKQorICAgICBtb250aHMgYWZ0ZXIgdGhlIGRhdGUgaXQgaW5pdGlhbGx5IGJlY2FtZSBhdmFpbGFibGUsIG9yIGF0IGxlYXN0IHNpeAorICAgICAoNikgbW9udGhzIGFmdGVyIGEgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoYXQgcGFydGljdWxhciBNb2RpZmljYXRpb24KKyAgICAgaGFzIGJlZW4gbWFkZSBhdmFpbGFibGUgdG8gc3VjaCByZWNpcGllbnRzLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvcgorICAgICBlbnN1cmluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIHJlbWFpbnMgYXZhaWxhYmxlIGV2ZW4gaWYgdGhlCisgICAgIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSBpcyBtYWludGFpbmVkIGJ5IGEgdGhpcmQgcGFydHkuCisKKyAgICAgMy4zLiBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLgorICAgICBZb3UgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBDb2RlIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4gYQorICAgICBmaWxlIGRvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIFlvdSBtYWRlIHRvIGNyZWF0ZSB0aGF0IENvdmVyZWQgQ29kZSBhbmQKKyAgICAgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdAorICAgICB0aGUgTW9kaWZpY2F0aW9uIGlzIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwKKyAgICAgQ29kZSBwcm92aWRlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGluY2x1ZGluZyB0aGUgbmFtZSBvZiB0aGUKKyAgICAgSW5pdGlhbCBEZXZlbG9wZXIgaW4gKGEpIHRoZSBTb3VyY2UgQ29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuCisgICAgIEV4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gaW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZQorICAgICBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBDb3ZlcmVkIENvZGUuCisKKyAgICAgMy40LiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVycworICAgICAgICAgIChhKSBUaGlyZCBQYXJ0eSBDbGFpbXMuCisgICAgICAgICAgSWYgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSB0aGF0IGEgbGljZW5zZSB1bmRlciBhIHRoaXJkIHBhcnR5J3MKKyAgICAgICAgICBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZSByaWdodHMKKyAgICAgICAgICBncmFudGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiwKKyAgICAgICAgICBDb250cmlidXRvciBtdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgU291cmNlIENvZGUKKyAgICAgICAgICBkaXN0cmlidXRpb24gdGl0bGVkICJMRUdBTCIgd2hpY2ggZGVzY3JpYmVzIHRoZSBjbGFpbSBhbmQgdGhlCisgICAgICAgICAgcGFydHkgbWFraW5nIHRoZSBjbGFpbSBpbiBzdWZmaWNpZW50IGRldGFpbCB0aGF0IGEgcmVjaXBpZW50IHdpbGwKKyAgICAgICAgICBrbm93IHdob20gdG8gY29udGFjdC4gSWYgQ29udHJpYnV0b3Igb2J0YWlucyBzdWNoIGtub3dsZWRnZSBhZnRlcgorICAgICAgICAgIHRoZSBNb2RpZmljYXRpb24gaXMgbWFkZSBhdmFpbGFibGUgYXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4yLAorICAgICAgICAgIENvbnRyaWJ1dG9yIHNoYWxsIHByb21wdGx5IG1vZGlmeSB0aGUgTEVHQUwgZmlsZSBpbiBhbGwgY29waWVzCisgICAgICAgICAgQ29udHJpYnV0b3IgbWFrZXMgYXZhaWxhYmxlIHRoZXJlYWZ0ZXIgYW5kIHNoYWxsIHRha2Ugb3RoZXIgc3RlcHMKKyAgICAgICAgICAoc3VjaCBhcyBub3RpZnlpbmcgYXBwcm9wcmlhdGUgbWFpbGluZyBsaXN0cyBvciBuZXdzZ3JvdXBzKQorICAgICAgICAgIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gdGhvc2Ugd2hvIHJlY2VpdmVkIHRoZSBDb3ZlcmVkCisgICAgICAgICAgQ29kZSB0aGF0IG5ldyBrbm93bGVkZ2UgaGFzIGJlZW4gb2J0YWluZWQuCisKKyAgICAgICAgICAoYikgQ29udHJpYnV0b3IgQVBJcy4KKyAgICAgICAgICBJZiBDb250cmlidXRvcidzIE1vZGlmaWNhdGlvbnMgaW5jbHVkZSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZworICAgICAgICAgIGludGVyZmFjZSBhbmQgQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSBvZiBwYXRlbnQgbGljZW5zZXMgd2hpY2gKKyAgICAgICAgICBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gaW1wbGVtZW50IHRoYXQgQVBJLCBDb250cmlidXRvciBtdXN0CisgICAgICAgICAgYWxzbyBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIExFR0FMIGZpbGUuCisKKyAgICAgICAgICAgICAgIChjKSAgICBSZXByZXNlbnRhdGlvbnMuCisgICAgICAgICAgQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0LCBleGNlcHQgYXMgZGlzY2xvc2VkIHB1cnN1YW50IHRvCisgICAgICAgICAgU2VjdGlvbiAzLjQoYSkgYWJvdmUsIENvbnRyaWJ1dG9yIGJlbGlldmVzIHRoYXQgQ29udHJpYnV0b3IncworICAgICAgICAgIE1vZGlmaWNhdGlvbnMgYXJlIENvbnRyaWJ1dG9yJ3Mgb3JpZ2luYWwgY3JlYXRpb24ocykgYW5kL29yCisgICAgICAgICAgQ29udHJpYnV0b3IgaGFzIHN1ZmZpY2llbnQgcmlnaHRzIHRvIGdyYW50IHRoZSByaWdodHMgY29udmV5ZWQgYnkKKyAgICAgICAgICB0aGlzIExpY2Vuc2UuCisKKyAgICAgMy41LiBSZXF1aXJlZCBOb3RpY2VzLgorICAgICBZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4gZWFjaCBmaWxlIG9mIHRoZSBTb3VyY2UKKyAgICAgQ29kZS4gIElmIGl0IGlzIG5vdCBwb3NzaWJsZSB0byBwdXQgc3VjaCBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZQorICAgICBDb2RlIGZpbGUgZHVlIHRvIGl0cyBzdHJ1Y3R1cmUsIHRoZW4gWW91IG11c3QgaW5jbHVkZSBzdWNoIG5vdGljZSBpbiBhCisgICAgIGxvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5KSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5CisgICAgIHRvIGxvb2sgZm9yIHN1Y2ggYSBub3RpY2UuICBJZiBZb3UgY3JlYXRlZCBvbmUgb3IgbW9yZSBNb2RpZmljYXRpb24ocykKKyAgICAgWW91IG1heSBhZGQgeW91ciBuYW1lIGFzIGEgQ29udHJpYnV0b3IgdG8gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4KKyAgICAgRXhoaWJpdCBBLiAgWW91IG11c3QgYWxzbyBkdXBsaWNhdGUgdGhpcyBMaWNlbnNlIGluIGFueSBkb2N1bWVudGF0aW9uCisgICAgIGZvciB0aGUgU291cmNlIENvZGUgd2hlcmUgWW91IGRlc2NyaWJlIHJlY2lwaWVudHMnIHJpZ2h0cyBvciBvd25lcnNoaXAKKyAgICAgcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgQ29kZS4gIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8KKyAgICAgY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkKKyAgICAgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIENvZGUuIEhvd2V2ZXIsIFlvdQorICAgICBtYXkgZG8gc28gb25seSBvbiBZb3VyIG93biBiZWhhbGYsIGFuZCBub3Qgb24gYmVoYWxmIG9mIHRoZSBJbml0aWFsCisgICAgIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGFuCisgICAgIGFueSBzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMKKyAgICAgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIGFuZCBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbAorICAgICBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZQorICAgICBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LAorICAgICBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IHRlcm1zIFlvdSBvZmZlci4KKworICAgICAzLjYuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLgorICAgICBZb3UgbWF5IGRpc3RyaWJ1dGUgQ292ZXJlZCBDb2RlIGluIEV4ZWN1dGFibGUgZm9ybSBvbmx5IGlmIHRoZQorICAgICByZXF1aXJlbWVudHMgb2YgU2VjdGlvbiAzLjEtMy41IGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgQ292ZXJlZCBDb2RlLAorICAgICBhbmQgaWYgWW91IGluY2x1ZGUgYSBub3RpY2Ugc3RhdGluZyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mCisgICAgIHRoZSBDb3ZlcmVkIENvZGUgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsCisgICAgIGluY2x1ZGluZyBhIGRlc2NyaXB0aW9uIG9mIGhvdyBhbmQgd2hlcmUgWW91IGhhdmUgZnVsZmlsbGVkIHRoZQorICAgICBvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uIDMuMi4gVGhlIG5vdGljZSBtdXN0IGJlIGNvbnNwaWN1b3VzbHkgaW5jbHVkZWQKKyAgICAgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24sIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvcgorICAgICBjb2xsYXRlcmFsIGluIHdoaWNoIFlvdSBkZXNjcmliZSByZWNpcGllbnRzJyByaWdodHMgcmVsYXRpbmcgdG8gdGhlCisgICAgIENvdmVyZWQgQ29kZS4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gb2YgQ292ZXJlZAorICAgICBDb2RlIG9yIG93bmVyc2hpcCByaWdodHMgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkKKyAgICAgY29udGFpbiB0ZXJtcyBkaWZmZXJlbnQgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIHRoYXQgWW91IGFyZSBpbgorICAgICBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhhdCB0aGUgbGljZW5zZSBmb3IgdGhlCisgICAgIEV4ZWN1dGFibGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZSByZWNpcGllbnQncworICAgICByaWdodHMgaW4gdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gZnJvbSB0aGUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzCisgICAgIExpY2Vuc2UuIElmIFlvdSBkaXN0cmlidXRlIHRoZSBFeGVjdXRhYmxlIHZlcnNpb24gdW5kZXIgYSBkaWZmZXJlbnQKKyAgICAgbGljZW5zZSBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyCisgICAgIGZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsCisgICAgIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZQorICAgICBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkKKyAgICAgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2gKKyAgICAgdGVybXMgWW91IG9mZmVyLgorCisgICAgIDMuNy4gTGFyZ2VyIFdvcmtzLgorICAgICBZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlciBjb2RlCisgICAgIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBMYXJnZXIKKyAgICAgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGEgY2FzZSwgWW91IG11c3QgbWFrZSBzdXJlIHRoZQorICAgICByZXF1aXJlbWVudHMgb2YgdGhpcyBMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUuCisKKzQuIEluYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIFN0YXR1dGUgb3IgUmVndWxhdGlvbi4KKworICAgICBJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciBZb3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGlzCisgICAgIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBDb3ZlcmVkIENvZGUgZHVlIHRvCisgICAgIHN0YXR1dGUsIGp1ZGljaWFsIG9yZGVyLCBvciByZWd1bGF0aW9uIHRoZW4gWW91IG11c3Q6IChhKSBjb21wbHkgd2l0aAorICAgICB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZTsgYW5kIChiKQorICAgICBkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uCisgICAgIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMIGZpbGUgZGVzY3JpYmVkIGluIFNlY3Rpb24gMy40IGFuZCBtdXN0CisgICAgIGJlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIFNvdXJjZSBDb2RlLiBFeGNlcHQgdG8gdGhlCisgICAgIGV4dGVudCBwcm9oaWJpdGVkIGJ5IHN0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlCisgICAgIHN1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSByZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZSB0bworICAgICB1bmRlcnN0YW5kIGl0LgorCis1LiBBcHBsaWNhdGlvbiBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICAgVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gY29kZSB0byB3aGljaCB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaGFzCisgICAgIGF0dGFjaGVkIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGFuZCB0byByZWxhdGVkIENvdmVyZWQgQ29kZS4KKworNi4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuCisKKyAgICAgNi4xLiBOZXcgVmVyc2lvbnMuCisgICAgIE5ldHNjYXBlIENvbW11bmljYXRpb25zIENvcnBvcmF0aW9uICgiTmV0c2NhcGUiKSBtYXkgcHVibGlzaCByZXZpc2VkCisgICAgIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbgorICAgICB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuCisKKyAgICAgNi4yLiBFZmZlY3Qgb2YgTmV3IFZlcnNpb25zLgorICAgICBPbmNlIENvdmVyZWQgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlCisgICAgIExpY2Vuc2UsIFlvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdAorICAgICB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIENvdmVyZWQgQ29kZSB1bmRlciB0aGUgdGVybXMKKyAgICAgb2YgYW55IHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSBwdWJsaXNoZWQgYnkgTmV0c2NhcGUuIE5vIG9uZQorICAgICBvdGhlciB0aGFuIE5ldHNjYXBlIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvCisgICAgIENvdmVyZWQgQ29kZSBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KKworICAgICA2LjMuIERlcml2YXRpdmUgV29ya3MuCisgICAgIElmIFlvdSBjcmVhdGUgb3IgdXNlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgKHdoaWNoIHlvdSBtYXkKKyAgICAgb25seSBkbyBpbiBvcmRlciB0byBhcHBseSBpdCB0byBjb2RlIHdoaWNoIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZQorICAgICBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UpLCBZb3UgbXVzdCAoYSkgcmVuYW1lIFlvdXIgbGljZW5zZSBzbyB0aGF0CisgICAgIHRoZSBwaHJhc2VzICJNb3ppbGxhIiwgIk1PWklMTEFQTCIsICJNT1pQTCIsICJOZXRzY2FwZSIsCisgICAgICJNUEwiLCAiTlBMIiBvciBhbnkgY29uZnVzaW5nbHkgc2ltaWxhciBwaHJhc2UgZG8gbm90IGFwcGVhciBpbiB5b3VyCisgICAgIGxpY2Vuc2UgKGV4Y2VwdCB0byBub3RlIHRoYXQgeW91ciBsaWNlbnNlIGRpZmZlcnMgZnJvbSB0aGlzIExpY2Vuc2UpCisgICAgIGFuZCAoYikgb3RoZXJ3aXNlIG1ha2UgaXQgY2xlYXIgdGhhdCBZb3VyIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UKKyAgICAgY29udGFpbnMgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgYW5kCisgICAgIE5ldHNjYXBlIFB1YmxpYyBMaWNlbnNlLiAoRmlsbGluZyBpbiB0aGUgbmFtZSBvZiB0aGUgSW5pdGlhbAorICAgICBEZXZlbG9wZXIsIE9yaWdpbmFsIENvZGUgb3IgQ29udHJpYnV0b3IgaW4gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4KKyAgICAgRXhoaWJpdCBBIHNoYWxsIG5vdCBvZiB0aGVtc2VsdmVzIGJlIGRlZW1lZCB0byBiZSBtb2RpZmljYXRpb25zIG9mCisgICAgIHRoaXMgTGljZW5zZS4pCisKKzcuIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkuCisKKyAgICAgQ09WRVJFRCBDT0RFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLAorICAgICBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywKKyAgICAgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIENPVkVSRUQgQ09ERSBJUyBGUkVFIE9GCisgICAgIERFRkVDVFMsIE1FUkNIQU5UQUJMRSwgRklUIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tSU5GUklOR0lORy4KKyAgICAgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgQ09WRVJFRCBDT0RFCisgICAgIElTIFdJVEggWU9VLiBTSE9VTEQgQU5ZIENPVkVSRUQgQ09ERSBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsCisgICAgIFlPVSAoTk9UIFRIRSBJTklUSUFMIERFVkVMT1BFUiBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUKKyAgICAgQ09TVCBPRiBBTlkgTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uIFRISVMgRElTQ0xBSU1FUgorICAgICBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PIFVTRSBPRgorICAgICBBTlkgQ09WRVJFRCBDT0RFIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBVTkRFUiBUSElTIERJU0NMQUlNRVIuCisKKzguIFRFUk1JTkFUSU9OLgorCisgICAgIDguMS4gIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZQorICAgICBhdXRvbWF0aWNhbGx5IGlmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlCisgICAgIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMCBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIEFsbAorICAgICBzdWJsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHdoaWNoIGFyZSBwcm9wZXJseSBncmFudGVkIHNoYWxsCisgICAgIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIKKyAgICAgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UKKyAgICAgc2hhbGwgc3Vydml2ZS4KKworICAgICA4LjIuICBJZiBZb3UgaW5pdGlhdGUgbGl0aWdhdGlvbiBieSBhc3NlcnRpbmcgYSBwYXRlbnQgaW5mcmluZ2VtZW50CisgICAgIGNsYWltIChleGNsdWRpbmcgZGVjbGF0b3J5IGp1ZGdtZW50IGFjdGlvbnMpIGFnYWluc3QgSW5pdGlhbCBEZXZlbG9wZXIKKyAgICAgb3IgYSBDb250cmlidXRvciAodGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIENvbnRyaWJ1dG9yIGFnYWluc3Qgd2hvbQorICAgICBZb3UgZmlsZSBzdWNoIGFjdGlvbiBpcyByZWZlcnJlZCB0byBhcyAiUGFydGljaXBhbnQiKSAgYWxsZWdpbmcgdGhhdDoKKworICAgICAoYSkgIHN1Y2ggUGFydGljaXBhbnQncyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkKKyAgICAgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gYW55IGFuZCBhbGwgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaAorICAgICBQYXJ0aWNpcGFudCB0byBZb3UgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgb2YgdGhpcyBMaWNlbnNlCisgICAgIHNoYWxsLCB1cG9uIDYwIGRheXMgbm90aWNlIGZyb20gUGFydGljaXBhbnQgdGVybWluYXRlIHByb3NwZWN0aXZlbHksCisgICAgIHVubGVzcyBpZiB3aXRoaW4gNjAgZGF5cyBhZnRlciByZWNlaXB0IG9mIG5vdGljZSBZb3UgZWl0aGVyOiAoaSkKKyAgICAgYWdyZWUgaW4gd3JpdGluZyB0byBwYXkgUGFydGljaXBhbnQgYSBtdXR1YWxseSBhZ3JlZWFibGUgcmVhc29uYWJsZQorICAgICByb3lhbHR5IGZvciBZb3VyIHBhc3QgYW5kIGZ1dHVyZSB1c2Ugb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHN1Y2gKKyAgICAgUGFydGljaXBhbnQsIG9yIChpaSkgd2l0aGRyYXcgWW91ciBsaXRpZ2F0aW9uIGNsYWltIHdpdGggcmVzcGVjdCB0bworICAgICB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiBhZ2FpbnN0IHN1Y2ggUGFydGljaXBhbnQuICBJZiB3aXRoaW4gNjAgZGF5cworICAgICBvZiBub3RpY2UsIGEgcmVhc29uYWJsZSByb3lhbHR5IGFuZCBwYXltZW50IGFycmFuZ2VtZW50IGFyZSBub3QKKyAgICAgbXV0dWFsbHkgYWdyZWVkIHVwb24gaW4gd3JpdGluZyBieSB0aGUgcGFydGllcyBvciB0aGUgbGl0aWdhdGlvbiBjbGFpbQorICAgICBpcyBub3Qgd2l0aGRyYXduLCB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgUGFydGljaXBhbnQgdG8gWW91IHVuZGVyCisgICAgIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIGF0IHRoZSBleHBpcmF0aW9uIG9mCisgICAgIHRoZSA2MCBkYXkgbm90aWNlIHBlcmlvZCBzcGVjaWZpZWQgYWJvdmUuCisKKyAgICAgKGIpICBhbnkgc29mdHdhcmUsIGhhcmR3YXJlLCBvciBkZXZpY2UsIG90aGVyIHRoYW4gc3VjaCBQYXJ0aWNpcGFudCdzCisgICAgIENvbnRyaWJ1dG9yIFZlcnNpb24sIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4KKyAgICAgYW55IHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMShiKQorICAgICBhbmQgMi4yKGIpIGFyZSByZXZva2VkIGVmZmVjdGl2ZSBhcyBvZiB0aGUgZGF0ZSBZb3UgZmlyc3QgbWFkZSwgdXNlZCwKKyAgICAgc29sZCwgZGlzdHJpYnV0ZWQsIG9yIGhhZCBtYWRlLCBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdAorICAgICBQYXJ0aWNpcGFudC4KKworICAgICA4LjMuICBJZiBZb3UgYXNzZXJ0IGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSBhZ2FpbnN0IFBhcnRpY2lwYW50CisgICAgIGFsbGVnaW5nIHRoYXQgc3VjaCBQYXJ0aWNpcGFudCdzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IKKyAgICAgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCB3aGVyZSBzdWNoIGNsYWltIGlzIHJlc29sdmVkIChzdWNoIGFzCisgICAgIGJ5IGxpY2Vuc2Ugb3Igc2V0dGxlbWVudCkgcHJpb3IgdG8gdGhlIGluaXRpYXRpb24gb2YgcGF0ZW50CisgICAgIGluZnJpbmdlbWVudCBsaXRpZ2F0aW9uLCB0aGVuIHRoZSByZWFzb25hYmxlIHZhbHVlIG9mIHRoZSBsaWNlbnNlcworICAgICBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4xIG9yIDIuMiBzaGFsbCBiZSB0YWtlbgorICAgICBpbnRvIGFjY291bnQgaW4gZGV0ZXJtaW5pbmcgdGhlIGFtb3VudCBvciB2YWx1ZSBvZiBhbnkgcGF5bWVudCBvcgorICAgICBsaWNlbnNlLgorCisgICAgIDguNC4gIEluIHRoZSBldmVudCBvZiB0ZXJtaW5hdGlvbiB1bmRlciBTZWN0aW9ucyA4LjEgb3IgOC4yIGFib3ZlLAorICAgICBhbGwgZW5kIHVzZXIgbGljZW5zZSBhZ3JlZW1lbnRzIChleGNsdWRpbmcgZGlzdHJpYnV0b3JzIGFuZCByZXNlbGxlcnMpCisgICAgIHdoaWNoIGhhdmUgYmVlbiB2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIGFueSBkaXN0cmlidXRvciBoZXJldW5kZXIKKyAgICAgcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSB0ZXJtaW5hdGlvbi4KKworOS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuCisKKyAgICAgVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBXSEVUSEVSIFRPUlQKKyAgICAgKElOQ0xVRElORyBORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgWU9VLCBUSEUgSU5JVElBTAorICAgICBERVZFTE9QRVIsIEFOWSBPVEhFUiBDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIENPVkVSRUQgQ09ERSwKKyAgICAgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBBTlkgUEVSU09OIEZPUgorICAgICBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkKKyAgICAgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLAorICAgICBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUgorICAgICBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwgSEFWRSBCRUVOCisgICAgIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRgorICAgICBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZCisgICAgIFJFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFknUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcKKyAgICAgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUKKyAgICAgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPCisgICAgIFRISVMgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCisxMC4gVS5TLiBHT1ZFUk5NRU5UIEVORCBVU0VSUy4KKworICAgICBUaGUgQ292ZXJlZCBDb2RlIGlzIGEgImNvbW1lcmNpYWwgaXRlbSwiIGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluCisgICAgIDQ4IEMuRi5SLiAyLjEwMSAoT2N0LiAxOTk1KSwgY29uc2lzdGluZyBvZiAiY29tbWVyY2lhbCBjb21wdXRlcgorICAgICBzb2Z0d2FyZSIgYW5kICJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIGRvY3VtZW50YXRpb24sIiBhcyBzdWNoCisgICAgIHRlcm1zIGFyZSB1c2VkIGluIDQ4IEMuRi5SLiAxMi4yMTIgKFNlcHQuIDE5OTUpLiBDb25zaXN0ZW50IHdpdGggNDgKKyAgICAgQy5GLlIuIDEyLjIxMiBhbmQgNDggQy5GLlIuIDIyNy43MjAyLTEgdGhyb3VnaCAyMjcuNzIwMi00IChKdW5lIDE5OTUpLAorICAgICBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIENvdmVyZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UKKyAgICAgcmlnaHRzIHNldCBmb3J0aCBoZXJlaW4uCisKKzExLiBNSVNDRUxMQU5FT1VTLgorCisgICAgIFRoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyBzdWJqZWN0CisgICAgIG1hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUKKyAgICAgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50CisgICAgIG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiBUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkKKyAgICAgQ2FsaWZvcm5pYSBsYXcgcHJvdmlzaW9ucyAoZXhjZXB0IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcsIGlmCisgICAgIGFueSwgcHJvdmlkZXMgb3RoZXJ3aXNlKSwgZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4KKyAgICAgV2l0aCByZXNwZWN0IHRvIGRpc3B1dGVzIGluIHdoaWNoIGF0IGxlYXN0IG9uZSBwYXJ0eSBpcyBhIGNpdGl6ZW4gb2YsCisgICAgIG9yIGFuIGVudGl0eSBjaGFydGVyZWQgb3IgcmVnaXN0ZXJlZCB0byBkbyBidXNpbmVzcyBpbiB0aGUgVW5pdGVkCisgICAgIFN0YXRlcyBvZiBBbWVyaWNhLCBhbnkgbGl0aWdhdGlvbiByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUKKyAgICAgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBGZWRlcmFsIENvdXJ0cyBvZiB0aGUgTm9ydGhlcm4KKyAgICAgRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSwgd2l0aCB2ZW51ZSBseWluZyBpbiBTYW50YSBDbGFyYSBDb3VudHksCisgICAgIENhbGlmb3JuaWEsIHdpdGggdGhlIGxvc2luZyBwYXJ0eSByZXNwb25zaWJsZSBmb3IgY29zdHMsIGluY2x1ZGluZworICAgICB3aXRob3V0IGxpbWl0YXRpb24sIGNvdXJ0IGNvc3RzIGFuZCByZWFzb25hYmxlIGF0dG9ybmV5cycgZmVlcyBhbmQKKyAgICAgZXhwZW5zZXMuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbgorICAgICBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLgorICAgICBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdAorICAgICBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciBzaGFsbCBub3QgYXBwbHkgdG8gdGhpcworICAgICBMaWNlbnNlLgorCisxMi4gUkVTUE9OU0lCSUxJVFkgRk9SIENMQUlNUy4KKworICAgICBBcyBiZXR3ZWVuIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCB0aGUgQ29udHJpYnV0b3JzLCBlYWNoIHBhcnR5IGlzCisgICAgIHJlc3BvbnNpYmxlIGZvciBjbGFpbXMgYW5kIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwKKyAgICAgb3V0IG9mIGl0cyB1dGlsaXphdGlvbiBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBZb3UgYWdyZWUgdG8KKyAgICAgd29yayB3aXRoIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBDb250cmlidXRvcnMgdG8gZGlzdHJpYnV0ZSBzdWNoCisgICAgIHJlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcy4gTm90aGluZyBoZXJlaW4gaXMgaW50ZW5kZWQgb3IKKyAgICAgc2hhbGwgYmUgZGVlbWVkIHRvIGNvbnN0aXR1dGUgYW55IGFkbWlzc2lvbiBvZiBsaWFiaWxpdHkuCisKKzEzLiBNVUxUSVBMRS1MSUNFTlNFRCBDT0RFLgorCisgICAgIEluaXRpYWwgRGV2ZWxvcGVyIG1heSBkZXNpZ25hdGUgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgQ29kZSBhcworICAgICAiTXVsdGlwbGUtTGljZW5zZWQiLiAgIk11bHRpcGxlLUxpY2Vuc2VkIiBtZWFucyB0aGF0IHRoZSBJbml0aWFsCisgICAgIERldmVsb3BlciBwZXJtaXRzIHlvdSB0byB1dGlsaXplIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgdW5kZXIKKyAgICAgWW91ciBjaG9pY2Ugb2YgdGhlIE5QTCBvciB0aGUgYWx0ZXJuYXRpdmUgbGljZW5zZXMsIGlmIGFueSwgc3BlY2lmaWVkCisgICAgIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBpbiB0aGUgZmlsZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLgorCitFWEhJQklUIEEgLU1vemlsbGEgUHVibGljIExpY2Vuc2UuCisKKyAgICAgYGBUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlCisgICAgIFZlcnNpb24gMS4xICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4KKyAgICAgY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQKKyAgICAgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9NUEwvCisKKyAgICAgU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIgorICAgICBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorICAgICBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMKKyAgICAgdW5kZXIgdGhlIExpY2Vuc2UuCisKKyAgICAgVGhlIE9yaWdpbmFsIENvZGUgaXMgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uCisKKyAgICAgVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIF9fX19fX19fX19fX19fX19fX19fX19fXy4KKyAgICAgUG9ydGlvbnMgY3JlYXRlZCBieSBfX19fX19fX19fX19fX19fX19fX19fIGFyZSBDb3B5cmlnaHQgKEMpIF9fX19fXworICAgICBfX19fX19fX19fX19fX19fX19fX19fXy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgICBDb250cmlidXRvcihzKTogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18uCisKKyAgICAgQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUgdGVybXMKKyAgICAgb2YgdGhlIF9fX19fIGxpY2Vuc2UgKHRoZSAgIltfX19dIExpY2Vuc2UiKSwgaW4gd2hpY2ggY2FzZSB0aGUKKyAgICAgcHJvdmlzaW9ucyBvZiBbX19fX19fXSBMaWNlbnNlIGFyZSBhcHBsaWNhYmxlIGluc3RlYWQgb2YgdGhvc2UKKyAgICAgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSBvbmx5CisgICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgW19fX19dIExpY2Vuc2UgYW5kIG5vdCB0byBhbGxvdyBvdGhlcnMgdG8gdXNlCisgICAgIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgdGhlIE1QTCwgaW5kaWNhdGUgeW91ciBkZWNpc2lvbiBieQorICAgICBkZWxldGluZyAgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgIHRoZW0gd2l0aCB0aGUgbm90aWNlIGFuZAorICAgICBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBbX19fXSBMaWNlbnNlLiAgSWYgeW91IGRvIG5vdCBkZWxldGUKKyAgICAgdGhlIHByb3Zpc2lvbnMgYWJvdmUsIGEgcmVjaXBpZW50IG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZQorICAgICB1bmRlciBlaXRoZXIgdGhlIE1QTCBvciB0aGUgW19fX10gTGljZW5zZS4iCisKKyAgICAgW05PVEU6IFRoZSB0ZXh0IG9mIHRoaXMgRXhoaWJpdCBBIG1heSBkaWZmZXIgc2xpZ2h0bHkgZnJvbSB0aGUgdGV4dCBvZgorICAgICB0aGUgbm90aWNlcyBpbiB0aGUgU291cmNlIENvZGUgZmlsZXMgb2YgdGhlIE9yaWdpbmFsIENvZGUuIFlvdSBzaG91bGQKKyAgICAgdXNlIHRoZSB0ZXh0IG9mIHRoaXMgRXhoaWJpdCBBIHJhdGhlciB0aGFuIHRoZSB0ZXh0IGZvdW5kIGluIHRoZQorICAgICBPcmlnaW5hbCBDb2RlIFNvdXJjZSBDb2RlIGZvciBZb3VyIE1vZGlmaWNhdGlvbnMuXQorCisgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICBBTUVORE1FTlRTCisKKyAgICAgVGhlIE5ldHNjYXBlIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xICgiTlBMIikgY29uc2lzdHMgb2YgdGhlCisgICAgIE1vemlsbGEgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgd2l0aCB0aGUgZm9sbG93aW5nIEFtZW5kbWVudHMsCisgICAgIGluY2x1ZGluZyBFeGhpYml0IEEtTmV0c2NhcGUgUHVibGljIExpY2Vuc2UuICBGaWxlcyBpZGVudGlmaWVkIHdpdGgKKyAgICAgIkV4aGliaXQgQS1OZXRzY2FwZSBQdWJsaWMgTGljZW5zZSIgYXJlIGdvdmVybmVkIGJ5IHRoZSBOZXRzY2FwZQorICAgICBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMS4KKworICAgICBBZGRpdGlvbmFsIFRlcm1zIGFwcGxpY2FibGUgdG8gdGhlIE5ldHNjYXBlIFB1YmxpYyBMaWNlbnNlLgorICAgICAgICAgIEkuIEVmZmVjdC4KKyAgICAgICAgICBUaGVzZSBhZGRpdGlvbmFsIHRlcm1zIGRlc2NyaWJlZCBpbiB0aGlzIE5ldHNjYXBlIFB1YmxpYworICAgICAgICAgIExpY2Vuc2UgLS0gQW1lbmRtZW50cyBzaGFsbCBhcHBseSB0byB0aGUgTW96aWxsYSBDb21tdW5pY2F0b3IKKyAgICAgICAgICBjbGllbnQgY29kZSBhbmQgdG8gYWxsIENvdmVyZWQgQ29kZSB1bmRlciB0aGlzIExpY2Vuc2UuCisKKyAgICAgICAgICBJSS4gIk5ldHNjYXBlJ3MgQnJhbmRlZCBDb2RlIiBtZWFucyBDb3ZlcmVkIENvZGUgdGhhdCBOZXRzY2FwZQorICAgICAgICAgIGRpc3RyaWJ1dGVzIGFuZC9vciBwZXJtaXRzIG90aGVycyB0byBkaXN0cmlidXRlIHVuZGVyIG9uZSBvciBtb3JlCisgICAgICAgICAgdHJhZGVtYXJrKHMpIHdoaWNoIGFyZSBjb250cm9sbGVkIGJ5IE5ldHNjYXBlIGJ1dCB3aGljaCBhcmUgbm90CisgICAgICAgICAgbGljZW5zZWQgZm9yIHVzZSB1bmRlciB0aGlzIExpY2Vuc2UuCisKKyAgICAgICAgICBJSUkuIE5ldHNjYXBlIGFuZCBsb2dvLgorICAgICAgICAgIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBhbnkgcmlnaHRzIHRvIHVzZSB0aGUgdHJhZGVtYXJrcworICAgICAgICAgICJOZXRzY2FwZSIsIHRoZSAiTmV0c2NhcGUgTiBhbmQgaG9yaXpvbiIgbG9nbyBvciB0aGUgIk5ldHNjYXBlCisgICAgICAgICAgbGlnaHRob3VzZSIgbG9nbywgIk5ldGNlbnRlciIsICJHZWNrbyIsICJKYXZhIiBvciAiSmF2YVNjcmlwdCIsCisgICAgICAgICAgIlNtYXJ0IEJyb3dzaW5nIiBldmVuIGlmIHN1Y2ggbWFya3MgYXJlIGluY2x1ZGVkIGluIHRoZSBPcmlnaW5hbAorICAgICAgICAgIENvZGUgb3IgTW9kaWZpY2F0aW9ucy4KKworICAgICAgICAgIElWLiBJbmFiaWxpdHkgdG8gQ29tcGx5IER1ZSB0byBDb250cmFjdHVhbCBPYmxpZ2F0aW9uLgorICAgICAgICAgIFByaW9yIHRvIGxpY2Vuc2luZyB0aGUgT3JpZ2luYWwgQ29kZSB1bmRlciB0aGlzIExpY2Vuc2UsIE5ldHNjYXBlCisgICAgICAgICAgaGFzIGxpY2Vuc2VkIHRoaXJkIHBhcnR5IGNvZGUgZm9yIHVzZSBpbiBOZXRzY2FwZSdzIEJyYW5kZWQgQ29kZS4KKyAgICAgICAgICBUbyB0aGUgZXh0ZW50IHRoYXQgTmV0c2NhcGUgaXMgbGltaXRlZCBjb250cmFjdHVhbGx5IGZyb20gbWFraW5nCisgICAgICAgICAgc3VjaCB0aGlyZCBwYXJ0eSBjb2RlIGF2YWlsYWJsZSB1bmRlciB0aGlzIExpY2Vuc2UsIE5ldHNjYXBlIG1heQorICAgICAgICAgIGNob29zZSB0byByZWludGVncmF0ZSBzdWNoIGNvZGUgaW50byBDb3ZlcmVkIENvZGUgd2l0aG91dCBiZWluZworICAgICAgICAgIHJlcXVpcmVkIHRvIGRpc3RyaWJ1dGUgc3VjaCBjb2RlIGluIFNvdXJjZSBDb2RlIGZvcm0sIGV2ZW4gaWYKKyAgICAgICAgICBzdWNoIGNvZGUgd291bGQgb3RoZXJ3aXNlIGJlIGNvbnNpZGVyZWQgIk1vZGlmaWNhdGlvbnMiIHVuZGVyCisgICAgICAgICAgdGhpcyBMaWNlbnNlLgorCisgICAgICAgICAgVi4gVXNlIG9mIE1vZGlmaWNhdGlvbnMgYW5kIENvdmVyZWQgQ29kZSBieSBJbml0aWFsIERldmVsb3Blci4KKyAgICAgICAgICAgICAgIFYuMS4gSW4gR2VuZXJhbC4KKyAgICAgICAgICAgICAgIFRoZSBvYmxpZ2F0aW9ucyBvZiBTZWN0aW9uIDMgYXBwbHkgdG8gTmV0c2NhcGUsIGV4Y2VwdCB0bworICAgICAgICAgICAgICAgdGhlIGV4dGVudCBzcGVjaWZpZWQgaW4gdGhpcyBBbWVuZG1lbnQsIFNlY3Rpb24gVi4yIGFuZCBWLjMuCisKKyAgICAgICAgICAgICAgIFYuMi4gT3RoZXIgUHJvZHVjdHMuCisgICAgICAgICAgICAgICBOZXRzY2FwZSBtYXkgaW5jbHVkZSBDb3ZlcmVkIENvZGUgaW4gcHJvZHVjdHMgb3RoZXIgdGhhbiB0aGUKKyAgICAgICAgICAgICAgIE5ldHNjYXBlJ3MgQnJhbmRlZCBDb2RlIHdoaWNoIGFyZSByZWxlYXNlZCBieSBOZXRzY2FwZQorICAgICAgICAgICAgICAgZHVyaW5nIHRoZSB0d28gKDIpIHllYXJzIGZvbGxvd2luZyB0aGUgcmVsZWFzZSBkYXRlIG9mIHRoZQorICAgICAgICAgICAgICAgT3JpZ2luYWwgQ29kZSwgd2l0aG91dCBzdWNoIGFkZGl0aW9uYWwgcHJvZHVjdHMgYmVjb21pbmcKKyAgICAgICAgICAgICAgIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIG1heSBsaWNlbnNlIHN1Y2gKKyAgICAgICAgICAgICAgIGFkZGl0aW9uYWwgcHJvZHVjdHMgb24gZGlmZmVyZW50IHRlcm1zIGZyb20gdGhvc2UgY29udGFpbmVkCisgICAgICAgICAgICAgICBpbiB0aGlzIExpY2Vuc2UuCisKKyAgICAgICAgICAgICAgIFYuMy4gQWx0ZXJuYXRpdmUgTGljZW5zaW5nLgorICAgICAgICAgICAgICAgTmV0c2NhcGUgbWF5IGxpY2Vuc2UgdGhlIFNvdXJjZSBDb2RlIG9mIE5ldHNjYXBlJ3MgQnJhbmRlZAorICAgICAgICAgICAgICAgQ29kZSwgaW5jbHVkaW5nIE1vZGlmaWNhdGlvbnMgaW5jb3Jwb3JhdGVkIHRoZXJlaW4sIHdpdGhvdXQKKyAgICAgICAgICAgICAgIHN1Y2ggTmV0c2NhcGUgQnJhbmRlZCBDb2RlIGJlY29taW5nIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mCisgICAgICAgICAgICAgICB0aGlzIExpY2Vuc2UsIGFuZCBtYXkgbGljZW5zZSBzdWNoIE5ldHNjYXBlIEJyYW5kZWQgQ29kZSBvbgorICAgICAgICAgICAgICAgZGlmZmVyZW50IHRlcm1zIGZyb20gdGhvc2UgY29udGFpbmVkIGluIHRoaXMgTGljZW5zZS4KKworICAgICAgICAgIFZJLiBMaXRpZ2F0aW9uLgorICAgICAgICAgIE5vdHdpdGhzdGFuZGluZyB0aGUgbGltaXRhdGlvbnMgb2YgU2VjdGlvbiAxMSBhYm92ZSwgdGhlCisgICAgICAgICAgcHJvdmlzaW9ucyByZWdhcmRpbmcgbGl0aWdhdGlvbiBpbiBTZWN0aW9uIDExKGEpLCAoYikgYW5kIChjKSBvZgorICAgICAgICAgIHRoZSBMaWNlbnNlIHNoYWxsIGFwcGx5IHRvIGFsbCBkaXNwdXRlcyByZWxhdGluZyB0byB0aGlzIExpY2Vuc2UuCisKKyAgICAgRVhISUJJVCBBLU5ldHNjYXBlIFB1YmxpYyBMaWNlbnNlLgorCisgICAgICAgICAgIlRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIE5ldHNjYXBlIFB1YmxpYworICAgICAgICAgIExpY2Vuc2UgVmVyc2lvbiAxLjEgKHRoZSAiTGljZW5zZSIpOyB5b3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlCisgICAgICAgICAgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mCisgICAgICAgICAgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5tb3ppbGxhLm9yZy9OUEwvCisKKyAgICAgICAgICBTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMKKyAgICAgICAgICBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yCisgICAgICAgICAgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nCisgICAgICAgICAgcmlnaHRzIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KKworICAgICAgICAgIFRoZSBPcmlnaW5hbCBDb2RlIGlzIE1vemlsbGEgQ29tbXVuaWNhdG9yIGNsaWVudCBjb2RlLCByZWxlYXNlZAorICAgICAgICAgIE1hcmNoIDMxLCAxOTk4LgorCisgICAgICAgICAgVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGlzIE5ldHNjYXBlCisgICAgICAgICAgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uIFBvcnRpb25zIGNyZWF0ZWQgYnkgTmV0c2NhcGUgYXJlCisgICAgICAgICAgQ29weXJpZ2h0IChDKSAxOTk4LTE5OTkgTmV0c2NhcGUgQ29tbXVuaWNhdGlvbnMgQ29ycG9yYXRpb24uIEFsbAorICAgICAgICAgIFJpZ2h0cyBSZXNlcnZlZC4KKworICAgICAgICAgIENvbnRyaWJ1dG9yKHMpOiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXy4KKworICAgICAgICAgIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlCisgICAgICAgICAgdGVybXMgb2YgdGhlIF9fX19fIGxpY2Vuc2UgKHRoZSAiW19fX10gTGljZW5zZSIpLCBpbiB3aGljaCBjYXNlCisgICAgICAgICAgdGhlIHByb3Zpc2lvbnMgb2YgW19fX19fX10gTGljZW5zZSBhcmUgYXBwbGljYWJsZSAgaW5zdGVhZCBvZgorICAgICAgICAgIHRob3NlIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzCisgICAgICAgICAgZmlsZSBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgW19fX19dIExpY2Vuc2UgYW5kIG5vdCB0byBhbGxvdworICAgICAgICAgIG90aGVycyB0byB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciB0aGUgTlBMLCBpbmRpY2F0ZQorICAgICAgICAgIHlvdXIgZGVjaXNpb24gYnkgZGVsZXRpbmcgIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlICB0aGVtCisgICAgICAgICAgd2l0aCB0aGUgbm90aWNlIGFuZCBvdGhlciBwcm92aXNpb25zIHJlcXVpcmVkIGJ5IHRoZSBbX19fXQorICAgICAgICAgIExpY2Vuc2UuICBJZiB5b3UgZG8gbm90IGRlbGV0ZSB0aGUgcHJvdmlzaW9ucyBhYm92ZSwgYSByZWNpcGllbnQKKyAgICAgICAgICBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgdW5kZXIgZWl0aGVyIHRoZSBOUEwgb3IgdGhlCisgICAgICAgICAgW19fX10gTGljZW5zZS4iCmRpZmYgLS1naXQgYS9saWNlbnNlcy9NUEwtMi4wIGIvbGljZW5zZXMvTVBMLTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmQxMzUxCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvTVBMLTIuMApAQCAtMCwwICsxLDM3NCBAQAorTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIuMAorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisxLiBEZWZpbml0aW9ucworLS0tLS0tLS0tLS0tLS0KKworMS4xLiAiQ29udHJpYnV0b3IiCisgICAgbWVhbnMgZWFjaCBpbmRpdmlkdWFsIG9yIGxlZ2FsIGVudGl0eSB0aGF0IGNyZWF0ZXMsIGNvbnRyaWJ1dGVzIHRvCisgICAgdGhlIGNyZWF0aW9uIG9mLCBvciBvd25zIENvdmVyZWQgU29mdHdhcmUuCisKKzEuMi4gIkNvbnRyaWJ1dG9yIFZlcnNpb24iCisgICAgbWVhbnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBDb250cmlidXRpb25zIG9mIG90aGVycyAoaWYgYW55KSB1c2VkCisgICAgYnkgYSBDb250cmlidXRvciBhbmQgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yJ3MgQ29udHJpYnV0aW9uLgorCisxLjMuICJDb250cmlidXRpb24iCisgICAgbWVhbnMgQ292ZXJlZCBTb2Z0d2FyZSBvZiBhIHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuCisKKzEuNC4gIkNvdmVyZWQgU29mdHdhcmUiCisgICAgbWVhbnMgU291cmNlIENvZGUgRm9ybSB0byB3aGljaCB0aGUgaW5pdGlhbCBDb250cmlidXRvciBoYXMgYXR0YWNoZWQKKyAgICB0aGUgbm90aWNlIGluIEV4aGliaXQgQSwgdGhlIEV4ZWN1dGFibGUgRm9ybSBvZiBzdWNoIFNvdXJjZSBDb2RlCisgICAgRm9ybSwgYW5kIE1vZGlmaWNhdGlvbnMgb2Ygc3VjaCBTb3VyY2UgQ29kZSBGb3JtLCBpbiBlYWNoIGNhc2UKKyAgICBpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi4KKworMS41LiAiSW5jb21wYXRpYmxlIFdpdGggU2Vjb25kYXJ5IExpY2Vuc2VzIgorICAgIG1lYW5zCisKKyAgICAoYSkgdGhhdCB0aGUgaW5pdGlhbCBDb250cmlidXRvciBoYXMgYXR0YWNoZWQgdGhlIG5vdGljZSBkZXNjcmliZWQKKyAgICAgICAgaW4gRXhoaWJpdCBCIHRvIHRoZSBDb3ZlcmVkIFNvZnR3YXJlOyBvcgorCisgICAgKGIpIHRoYXQgdGhlIENvdmVyZWQgU29mdHdhcmUgd2FzIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZgorICAgICAgICB2ZXJzaW9uIDEuMSBvciBlYXJsaWVyIG9mIHRoZSBMaWNlbnNlLCBidXQgbm90IGFsc28gdW5kZXIgdGhlCisgICAgICAgIHRlcm1zIG9mIGEgU2Vjb25kYXJ5IExpY2Vuc2UuCisKKzEuNi4gIkV4ZWN1dGFibGUgRm9ybSIKKyAgICBtZWFucyBhbnkgZm9ybSBvZiB0aGUgd29yayBvdGhlciB0aGFuIFNvdXJjZSBDb2RlIEZvcm0uCisKKzEuNy4gIkxhcmdlciBXb3JrIgorICAgIG1lYW5zIGEgd29yayB0aGF0IGNvbWJpbmVzIENvdmVyZWQgU29mdHdhcmUgd2l0aCBvdGhlciBtYXRlcmlhbCwgaW4gCisgICAgYSBzZXBhcmF0ZSBmaWxlIG9yIGZpbGVzLCB0aGF0IGlzIG5vdCBDb3ZlcmVkIFNvZnR3YXJlLgorCisxLjguICJMaWNlbnNlIgorICAgIG1lYW5zIHRoaXMgZG9jdW1lbnQuCisKKzEuOS4gIkxpY2Vuc2FibGUiCisgICAgbWVhbnMgaGF2aW5nIHRoZSByaWdodCB0byBncmFudCwgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlLAorICAgIHdoZXRoZXIgYXQgdGhlIHRpbWUgb2YgdGhlIGluaXRpYWwgZ3JhbnQgb3Igc3Vic2VxdWVudGx5LCBhbnkgYW5kCisgICAgYWxsIG9mIHRoZSByaWdodHMgY29udmV5ZWQgYnkgdGhpcyBMaWNlbnNlLgorCisxLjEwLiAiTW9kaWZpY2F0aW9ucyIKKyAgICBtZWFucyBhbnkgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIChhKSBhbnkgZmlsZSBpbiBTb3VyY2UgQ29kZSBGb3JtIHRoYXQgcmVzdWx0cyBmcm9tIGFuIGFkZGl0aW9uIHRvLAorICAgICAgICBkZWxldGlvbiBmcm9tLCBvciBtb2RpZmljYXRpb24gb2YgdGhlIGNvbnRlbnRzIG9mIENvdmVyZWQKKyAgICAgICAgU29mdHdhcmU7IG9yCisKKyAgICAoYikgYW55IG5ldyBmaWxlIGluIFNvdXJjZSBDb2RlIEZvcm0gdGhhdCBjb250YWlucyBhbnkgQ292ZXJlZAorICAgICAgICBTb2Z0d2FyZS4KKworMS4xMS4gIlBhdGVudCBDbGFpbXMiIG9mIGEgQ29udHJpYnV0b3IKKyAgICBtZWFucyBhbnkgcGF0ZW50IGNsYWltKHMpLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBtZXRob2QsCisgICAgcHJvY2VzcywgYW5kIGFwcGFyYXR1cyBjbGFpbXMsIGluIGFueSBwYXRlbnQgTGljZW5zYWJsZSBieSBzdWNoCisgICAgQ29udHJpYnV0b3IgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQsIGJ1dCBmb3IgdGhlIGdyYW50IG9mIHRoZQorICAgIExpY2Vuc2UsIGJ5IHRoZSBtYWtpbmcsIHVzaW5nLCBzZWxsaW5nLCBvZmZlcmluZyBmb3Igc2FsZSwgaGF2aW5nCisgICAgbWFkZSwgaW1wb3J0LCBvciB0cmFuc2ZlciBvZiBlaXRoZXIgaXRzIENvbnRyaWJ1dGlvbnMgb3IgaXRzCisgICAgQ29udHJpYnV0b3IgVmVyc2lvbi4KKworMS4xMi4gIlNlY29uZGFyeSBMaWNlbnNlIgorICAgIG1lYW5zIGVpdGhlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMi4wLCB0aGUgR05VCisgICAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMi4xLCB0aGUgR05VIEFmZmVybyBHZW5lcmFsCisgICAgUHVibGljIExpY2Vuc2UsIFZlcnNpb24gMy4wLCBvciBhbnkgbGF0ZXIgdmVyc2lvbnMgb2YgdGhvc2UKKyAgICBsaWNlbnNlcy4KKworMS4xMy4gIlNvdXJjZSBDb2RlIEZvcm0iCisgICAgbWVhbnMgdGhlIGZvcm0gb2YgdGhlIHdvcmsgcHJlZmVycmVkIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucy4KKworMS4xNC4gIllvdSIgKG9yICJZb3VyIikKKyAgICBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyIHRoaXMKKyAgICBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIGluY2x1ZGVzIGFueSBlbnRpdHkgdGhhdAorICAgIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIFlvdS4gRm9yCisgICAgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0CisgICAgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwKKyAgICB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBtb3JlIHRoYW4KKyAgICBmaWZ0eSBwZXJjZW50ICg1MCUpIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbAorICAgIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworMi4gTGljZW5zZSBHcmFudHMgYW5kIENvbmRpdGlvbnMKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzIuMS4gR3JhbnRzCisKK0VhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsCitub24tZXhjbHVzaXZlIGxpY2Vuc2U6CisKKyhhKSB1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvciB0cmFkZW1hcmspCisgICAgTGljZW5zYWJsZSBieSBzdWNoIENvbnRyaWJ1dG9yIHRvIHVzZSwgcmVwcm9kdWNlLCBtYWtlIGF2YWlsYWJsZSwKKyAgICBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIGRpc3RyaWJ1dGUsIGFuZCBvdGhlcndpc2UgZXhwbG9pdCBpdHMKKyAgICBDb250cmlidXRpb25zLCBlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcywgd2l0aCBNb2RpZmljYXRpb25zLCBvcgorICAgIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisKKyhiKSB1bmRlciBQYXRlbnQgQ2xhaW1zIG9mIHN1Y2ggQ29udHJpYnV0b3IgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlcgorICAgIGZvciBzYWxlLCBoYXZlIG1hZGUsIGltcG9ydCwgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciBlaXRoZXIgaXRzCisgICAgQ29udHJpYnV0aW9ucyBvciBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbi4KKworMi4yLiBFZmZlY3RpdmUgRGF0ZQorCitUaGUgbGljZW5zZXMgZ3JhbnRlZCBpbiBTZWN0aW9uIDIuMSB3aXRoIHJlc3BlY3QgdG8gYW55IENvbnRyaWJ1dGlvbgorYmVjb21lIGVmZmVjdGl2ZSBmb3IgZWFjaCBDb250cmlidXRpb24gb24gdGhlIGRhdGUgdGhlIENvbnRyaWJ1dG9yIGZpcnN0CitkaXN0cmlidXRlcyBzdWNoIENvbnRyaWJ1dGlvbi4KKworMi4zLiBMaW1pdGF0aW9ucyBvbiBHcmFudCBTY29wZQorCitUaGUgbGljZW5zZXMgZ3JhbnRlZCBpbiB0aGlzIFNlY3Rpb24gMiBhcmUgdGhlIG9ubHkgcmlnaHRzIGdyYW50ZWQgdW5kZXIKK3RoaXMgTGljZW5zZS4gTm8gYWRkaXRpb25hbCByaWdodHMgb3IgbGljZW5zZXMgd2lsbCBiZSBpbXBsaWVkIGZyb20gdGhlCitkaXN0cmlidXRpb24gb3IgbGljZW5zaW5nIG9mIENvdmVyZWQgU29mdHdhcmUgdW5kZXIgdGhpcyBMaWNlbnNlLgorTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4xKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkIGJ5IGEKK0NvbnRyaWJ1dG9yOgorCisoYSkgZm9yIGFueSBjb2RlIHRoYXQgYSBDb250cmlidXRvciBoYXMgcmVtb3ZlZCBmcm9tIENvdmVyZWQgU29mdHdhcmU7CisgICAgb3IKKworKGIpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogKGkpIFlvdXIgYW5kIGFueSBvdGhlciB0aGlyZCBwYXJ0eSdzCisgICAgbW9kaWZpY2F0aW9ucyBvZiBDb3ZlcmVkIFNvZnR3YXJlLCBvciAoaWkpIHRoZSBjb21iaW5hdGlvbiBvZiBpdHMKKyAgICBDb250cmlidXRpb25zIHdpdGggb3RoZXIgc29mdHdhcmUgKGV4Y2VwdCBhcyBwYXJ0IG9mIGl0cyBDb250cmlidXRvcgorICAgIFZlcnNpb24pOyBvcgorCisoYykgdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkgQ292ZXJlZCBTb2Z0d2FyZSBpbiB0aGUgYWJzZW5jZSBvZgorICAgIGl0cyBDb250cmlidXRpb25zLgorCitUaGlzIExpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgYW55IHJpZ2h0cyBpbiB0aGUgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywKK29yIGxvZ29zIG9mIGFueSBDb250cmlidXRvciAoZXhjZXB0IGFzIG1heSBiZSBuZWNlc3NhcnkgdG8gY29tcGx5IHdpdGgKK3RoZSBub3RpY2UgcmVxdWlyZW1lbnRzIGluIFNlY3Rpb24gMy40KS4KKworMi40LiBTdWJzZXF1ZW50IExpY2Vuc2VzCisKK05vIENvbnRyaWJ1dG9yIG1ha2VzIGFkZGl0aW9uYWwgZ3JhbnRzIGFzIGEgcmVzdWx0IG9mIFlvdXIgY2hvaWNlIHRvCitkaXN0cmlidXRlIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIHVuZGVyIGEgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoaXMKK0xpY2Vuc2UgKHNlZSBTZWN0aW9uIDEwLjIpIG9yIHVuZGVyIHRoZSB0ZXJtcyBvZiBhIFNlY29uZGFyeSBMaWNlbnNlIChpZgorcGVybWl0dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDMuMykuCisKKzIuNS4gUmVwcmVzZW50YXRpb24KKworRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdGhlIENvbnRyaWJ1dG9yIGJlbGlldmVzIGl0cworQ29udHJpYnV0aW9ucyBhcmUgaXRzIG9yaWdpbmFsIGNyZWF0aW9uKHMpIG9yIGl0IGhhcyBzdWZmaWNpZW50IHJpZ2h0cwordG8gZ3JhbnQgdGhlIHJpZ2h0cyB0byBpdHMgQ29udHJpYnV0aW9ucyBjb252ZXllZCBieSB0aGlzIExpY2Vuc2UuCisKKzIuNi4gRmFpciBVc2UKKworVGhpcyBMaWNlbnNlIGlzIG5vdCBpbnRlbmRlZCB0byBsaW1pdCBhbnkgcmlnaHRzIFlvdSBoYXZlIHVuZGVyCithcHBsaWNhYmxlIGNvcHlyaWdodCBkb2N0cmluZXMgb2YgZmFpciB1c2UsIGZhaXIgZGVhbGluZywgb3Igb3RoZXIKK2VxdWl2YWxlbnRzLgorCisyLjcuIENvbmRpdGlvbnMKKworU2VjdGlvbnMgMy4xLCAzLjIsIDMuMywgYW5kIDMuNCBhcmUgY29uZGl0aW9ucyBvZiB0aGUgbGljZW5zZXMgZ3JhbnRlZAoraW4gU2VjdGlvbiAyLjEuCisKKzMuIFJlc3BvbnNpYmlsaXRpZXMKKy0tLS0tLS0tLS0tLS0tLS0tLS0KKworMy4xLiBEaXN0cmlidXRpb24gb2YgU291cmNlIEZvcm0KKworQWxsIGRpc3RyaWJ1dGlvbiBvZiBDb3ZlcmVkIFNvZnR3YXJlIGluIFNvdXJjZSBDb2RlIEZvcm0sIGluY2x1ZGluZyBhbnkKK01vZGlmaWNhdGlvbnMgdGhhdCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlLCBtdXN0IGJlIHVuZGVyCit0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBZb3UgbXVzdCBpbmZvcm0gcmVjaXBpZW50cyB0aGF0IHRoZSBTb3VyY2UKK0NvZGUgRm9ybSBvZiB0aGUgQ292ZXJlZCBTb2Z0d2FyZSBpcyBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcworTGljZW5zZSwgYW5kIGhvdyB0aGV5IGNhbiBvYnRhaW4gYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gWW91IG1heSBub3QKK2F0dGVtcHQgdG8gYWx0ZXIgb3IgcmVzdHJpY3QgdGhlIHJlY2lwaWVudHMnIHJpZ2h0cyBpbiB0aGUgU291cmNlIENvZGUKK0Zvcm0uCisKKzMuMi4gRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgRm9ybQorCitJZiBZb3UgZGlzdHJpYnV0ZSBDb3ZlcmVkIFNvZnR3YXJlIGluIEV4ZWN1dGFibGUgRm9ybSB0aGVuOgorCisoYSkgc3VjaCBDb3ZlcmVkIFNvZnR3YXJlIG11c3QgYWxzbyBiZSBtYWRlIGF2YWlsYWJsZSBpbiBTb3VyY2UgQ29kZQorICAgIEZvcm0sIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMSwgYW5kIFlvdSBtdXN0IGluZm9ybSByZWNpcGllbnRzIG9mCisgICAgdGhlIEV4ZWN1dGFibGUgRm9ybSBob3cgdGhleSBjYW4gb2J0YWluIGEgY29weSBvZiBzdWNoIFNvdXJjZSBDb2RlCisgICAgRm9ybSBieSByZWFzb25hYmxlIG1lYW5zIGluIGEgdGltZWx5IG1hbm5lciwgYXQgYSBjaGFyZ2Ugbm8gbW9yZQorICAgIHRoYW4gdGhlIGNvc3Qgb2YgZGlzdHJpYnV0aW9uIHRvIHRoZSByZWNpcGllbnQ7IGFuZAorCisoYikgWW91IG1heSBkaXN0cmlidXRlIHN1Y2ggRXhlY3V0YWJsZSBGb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzCisgICAgTGljZW5zZSwgb3Igc3VibGljZW5zZSBpdCB1bmRlciBkaWZmZXJlbnQgdGVybXMsIHByb3ZpZGVkIHRoYXQgdGhlCisgICAgbGljZW5zZSBmb3IgdGhlIEV4ZWN1dGFibGUgRm9ybSBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyCisgICAgdGhlIHJlY2lwaWVudHMnIHJpZ2h0cyBpbiB0aGUgU291cmNlIENvZGUgRm9ybSB1bmRlciB0aGlzIExpY2Vuc2UuCisKKzMuMy4gRGlzdHJpYnV0aW9uIG9mIGEgTGFyZ2VyIFdvcmsKKworWW91IG1heSBjcmVhdGUgYW5kIGRpc3RyaWJ1dGUgYSBMYXJnZXIgV29yayB1bmRlciB0ZXJtcyBvZiBZb3VyIGNob2ljZSwKK3Byb3ZpZGVkIHRoYXQgWW91IGFsc28gY29tcGx5IHdpdGggdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgZm9yCit0aGUgQ292ZXJlZCBTb2Z0d2FyZS4gSWYgdGhlIExhcmdlciBXb3JrIGlzIGEgY29tYmluYXRpb24gb2YgQ292ZXJlZAorU29mdHdhcmUgd2l0aCBhIHdvcmsgZ292ZXJuZWQgYnkgb25lIG9yIG1vcmUgU2Vjb25kYXJ5IExpY2Vuc2VzLCBhbmQgdGhlCitDb3ZlcmVkIFNvZnR3YXJlIGlzIG5vdCBJbmNvbXBhdGlibGUgV2l0aCBTZWNvbmRhcnkgTGljZW5zZXMsIHRoaXMKK0xpY2Vuc2UgcGVybWl0cyBZb3UgdG8gYWRkaXRpb25hbGx5IGRpc3RyaWJ1dGUgc3VjaCBDb3ZlcmVkIFNvZnR3YXJlCit1bmRlciB0aGUgdGVybXMgb2Ygc3VjaCBTZWNvbmRhcnkgTGljZW5zZShzKSwgc28gdGhhdCB0aGUgcmVjaXBpZW50IG9mCit0aGUgTGFyZ2VyIFdvcmsgbWF5LCBhdCB0aGVpciBvcHRpb24sIGZ1cnRoZXIgZGlzdHJpYnV0ZSB0aGUgQ292ZXJlZAorU29mdHdhcmUgdW5kZXIgdGhlIHRlcm1zIG9mIGVpdGhlciB0aGlzIExpY2Vuc2Ugb3Igc3VjaCBTZWNvbmRhcnkKK0xpY2Vuc2UocykuCisKKzMuNC4gTm90aWNlcworCitZb3UgbWF5IG5vdCByZW1vdmUgb3IgYWx0ZXIgdGhlIHN1YnN0YW5jZSBvZiBhbnkgbGljZW5zZSBub3RpY2VzCisoaW5jbHVkaW5nIGNvcHlyaWdodCBub3RpY2VzLCBwYXRlbnQgbm90aWNlcywgZGlzY2xhaW1lcnMgb2Ygd2FycmFudHksCitvciBsaW1pdGF0aW9ucyBvZiBsaWFiaWxpdHkpIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFNvdXJjZSBDb2RlIEZvcm0gb2YKK3RoZSBDb3ZlcmVkIFNvZnR3YXJlLCBleGNlcHQgdGhhdCBZb3UgbWF5IGFsdGVyIGFueSBsaWNlbnNlIG5vdGljZXMgdG8KK3RoZSBleHRlbnQgcmVxdWlyZWQgdG8gcmVtZWR5IGtub3duIGZhY3R1YWwgaW5hY2N1cmFjaWVzLgorCiszLjUuIEFwcGxpY2F0aW9uIG9mIEFkZGl0aW9uYWwgVGVybXMKKworWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwKK2luZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkCitTb2Z0d2FyZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbgorYmVoYWxmIG9mIGFueSBDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55CitzdWNoIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHksIG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzIG9mZmVyZWQgYnkKK1lvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkKK2xpYWJpbGl0eSBpbmN1cnJlZCBieSBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LCBzdXBwb3J0LAoraW5kZW1uaXR5IG9yIGxpYWJpbGl0eSB0ZXJtcyBZb3Ugb2ZmZXIuIFlvdSBtYXkgaW5jbHVkZSBhZGRpdGlvbmFsCitkaXNjbGFpbWVycyBvZiB3YXJyYW50eSBhbmQgbGltaXRhdGlvbnMgb2YgbGlhYmlsaXR5IHNwZWNpZmljIHRvIGFueQoranVyaXNkaWN0aW9uLgorCis0LiBJbmFiaWxpdHkgdG8gQ29tcGx5IER1ZSB0byBTdGF0dXRlIG9yIFJlZ3VsYXRpb24KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciBZb3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgQ292ZXJlZCBTb2Z0d2FyZSBkdWUgdG8KK3N0YXR1dGUsIGp1ZGljaWFsIG9yZGVyLCBvciByZWd1bGF0aW9uIHRoZW4gWW91IG11c3Q6IChhKSBjb21wbHkgd2l0aAordGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikKK2Rlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQgdGhlIGNvZGUgdGhleSBhZmZlY3QuIFN1Y2ggZGVzY3JpcHRpb24gbXVzdAorYmUgcGxhY2VkIGluIGEgdGV4dCBmaWxlIGluY2x1ZGVkIHdpdGggYWxsIGRpc3RyaWJ1dGlvbnMgb2YgdGhlIENvdmVyZWQKK1NvZnR3YXJlIHVuZGVyIHRoaXMgTGljZW5zZS4gRXhjZXB0IHRvIHRoZSBleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlCitvciByZWd1bGF0aW9uLCBzdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgc3VmZmljaWVudGx5IGRldGFpbGVkIGZvciBhCityZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIGl0LgorCis1LiBUZXJtaW5hdGlvbgorLS0tLS0tLS0tLS0tLS0KKworNS4xLiBUaGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkKK2lmIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIGFueSBvZiBpdHMgdGVybXMuIEhvd2V2ZXIsIGlmIFlvdSBiZWNvbWUKK2NvbXBsaWFudCwgdGhlbiB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgdGhpcyBMaWNlbnNlIGZyb20gYSBwYXJ0aWN1bGFyCitDb250cmlidXRvciBhcmUgcmVpbnN0YXRlZCAoYSkgcHJvdmlzaW9uYWxseSwgdW5sZXNzIGFuZCB1bnRpbCBzdWNoCitDb250cmlidXRvciBleHBsaWNpdGx5IGFuZCBmaW5hbGx5IHRlcm1pbmF0ZXMgWW91ciBncmFudHMsIGFuZCAoYikgb24gYW4KK29uZ29pbmcgYmFzaXMsIGlmIHN1Y2ggQ29udHJpYnV0b3IgZmFpbHMgdG8gbm90aWZ5IFlvdSBvZiB0aGUKK25vbi1jb21wbGlhbmNlIGJ5IHNvbWUgcmVhc29uYWJsZSBtZWFucyBwcmlvciB0byA2MCBkYXlzIGFmdGVyIFlvdSBoYXZlCitjb21lIGJhY2sgaW50byBjb21wbGlhbmNlLiBNb3Jlb3ZlciwgWW91ciBncmFudHMgZnJvbSBhIHBhcnRpY3VsYXIKK0NvbnRyaWJ1dG9yIGFyZSByZWluc3RhdGVkIG9uIGFuIG9uZ29pbmcgYmFzaXMgaWYgc3VjaCBDb250cmlidXRvcgorbm90aWZpZXMgWW91IG9mIHRoZSBub24tY29tcGxpYW5jZSBieSBzb21lIHJlYXNvbmFibGUgbWVhbnMsIHRoaXMgaXMgdGhlCitmaXJzdCB0aW1lIFlvdSBoYXZlIHJlY2VpdmVkIG5vdGljZSBvZiBub24tY29tcGxpYW5jZSB3aXRoIHRoaXMgTGljZW5zZQorZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQgWW91IGJlY29tZSBjb21wbGlhbnQgcHJpb3IgdG8gMzAgZGF5cyBhZnRlcgorWW91ciByZWNlaXB0IG9mIHRoZSBub3RpY2UuCisKKzUuMi4gSWYgWW91IGluaXRpYXRlIGxpdGlnYXRpb24gYWdhaW5zdCBhbnkgZW50aXR5IGJ5IGFzc2VydGluZyBhIHBhdGVudAoraW5mcmluZ2VtZW50IGNsYWltIChleGNsdWRpbmcgZGVjbGFyYXRvcnkganVkZ21lbnQgYWN0aW9ucywKK2NvdW50ZXItY2xhaW1zLCBhbmQgY3Jvc3MtY2xhaW1zKSBhbGxlZ2luZyB0aGF0IGEgQ29udHJpYnV0b3IgVmVyc2lvbgorZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCwgdGhlbiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8KK1lvdSBieSBhbnkgYW5kIGFsbCBDb250cmlidXRvcnMgZm9yIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIHVuZGVyIFNlY3Rpb24KKzIuMSBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlLgorCis1LjMuIEluIHRoZSBldmVudCBvZiB0ZXJtaW5hdGlvbiB1bmRlciBTZWN0aW9ucyA1LjEgb3IgNS4yIGFib3ZlLCBhbGwKK2VuZCB1c2VyIGxpY2Vuc2UgYWdyZWVtZW50cyAoZXhjbHVkaW5nIGRpc3RyaWJ1dG9ycyBhbmQgcmVzZWxsZXJzKSB3aGljaAoraGF2ZSBiZWVuIHZhbGlkbHkgZ3JhbnRlZCBieSBZb3Ugb3IgWW91ciBkaXN0cmlidXRvcnMgdW5kZXIgdGhpcyBMaWNlbnNlCitwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlIHRlcm1pbmF0aW9uLgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgNi4gRGlzY2xhaW1lciBvZiBXYXJyYW50eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgQ292ZXJlZCBTb2Z0d2FyZSBpcyBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2Ugb24gYW4gImFzIGlzIiAgICAgICAqCisqICBiYXNpcywgd2l0aG91dCB3YXJyYW50eSBvZiBhbnkga2luZCwgZWl0aGVyIGV4cHJlc3NlZCwgaW1wbGllZCwgb3IgICoKKyogIHN0YXR1dG9yeSwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHdhcnJhbnRpZXMgdGhhdCB0aGUgICAgICAgKgorKiAgQ292ZXJlZCBTb2Z0d2FyZSBpcyBmcmVlIG9mIGRlZmVjdHMsIG1lcmNoYW50YWJsZSwgZml0IGZvciBhICAgICAgICAqCisqICBwYXJ0aWN1bGFyIHB1cnBvc2Ugb3Igbm9uLWluZnJpbmdpbmcuIFRoZSBlbnRpcmUgcmlzayBhcyB0byB0aGUgICAgICoKKyogIHF1YWxpdHkgYW5kIHBlcmZvcm1hbmNlIG9mIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIGlzIHdpdGggWW91LiAgICAgICAgKgorKiAgU2hvdWxkIGFueSBDb3ZlcmVkIFNvZnR3YXJlIHByb3ZlIGRlZmVjdGl2ZSBpbiBhbnkgcmVzcGVjdCwgWW91ICAgICAqCisqICAobm90IGFueSBDb250cmlidXRvcikgYXNzdW1lIHRoZSBjb3N0IG9mIGFueSBuZWNlc3Nhcnkgc2VydmljaW5nLCAgICoKKyogIHJlcGFpciwgb3IgY29ycmVjdGlvbi4gVGhpcyBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGNvbnN0aXR1dGVzIGFuICAgKgorKiAgZXNzZW50aWFsIHBhcnQgb2YgdGhpcyBMaWNlbnNlLiBObyB1c2Ugb2YgYW55IENvdmVyZWQgU29mdHdhcmUgaXMgICAqCisqICBhdXRob3JpemVkIHVuZGVyIHRoaXMgTGljZW5zZSBleGNlcHQgdW5kZXIgdGhpcyBkaXNjbGFpbWVyLiAgICAgICAgICoKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICA3LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICBVbmRlciBubyBjaXJjdW1zdGFuY2VzIGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksIHdoZXRoZXIgdG9ydCAgICAgICoKKyogIChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsIHNoYWxsIGFueSAgICAgICAgICAgKgorKiAgQ29udHJpYnV0b3IsIG9yIGFueW9uZSB3aG8gZGlzdHJpYnV0ZXMgQ292ZXJlZCBTb2Z0d2FyZSBhcyAgICAgICAgICAqCisqICBwZXJtaXR0ZWQgYWJvdmUsIGJlIGxpYWJsZSB0byBZb3UgZm9yIGFueSBkaXJlY3QsIGluZGlyZWN0LCAgICAgICAgICoKKyogIHNwZWNpYWwsIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyICAgICAgKgorKiAgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGRhbWFnZXMgZm9yIGxvc3QgcHJvZml0cywgbG9zcyBvZiAgICAqCisqICBnb29kd2lsbCwgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55ICAgICoKKyogIGFuZCBhbGwgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3NlcywgZXZlbiBpZiBzdWNoIHBhcnR5ICAgICAgKgorKiAgc2hhbGwgaGF2ZSBiZWVuIGluZm9ybWVkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuIFRoaXMgICAqCisqICBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBzaGFsbCBub3QgYXBwbHkgdG8gbGlhYmlsaXR5IGZvciBkZWF0aCBvciAgICoKKyogIHBlcnNvbmFsIGluanVyeSByZXN1bHRpbmcgZnJvbSBzdWNoIHBhcnR5J3MgbmVnbGlnZW5jZSB0byB0aGUgICAgICAgKgorKiAgZXh0ZW50IGFwcGxpY2FibGUgbGF3IHByb2hpYml0cyBzdWNoIGxpbWl0YXRpb24uIFNvbWUgICAgICAgICAgICAgICAqCisqICBqdXJpc2RpY3Rpb25zIGRvIG5vdCBhbGxvdyB0aGUgZXhjbHVzaW9uIG9yIGxpbWl0YXRpb24gb2YgICAgICAgICAgICoKKyogIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzbyB0aGlzIGV4Y2x1c2lvbiBhbmQgICAgICAgICAgKgorKiAgbGltaXRhdGlvbiBtYXkgbm90IGFwcGx5IHRvIFlvdS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCis4LiBMaXRpZ2F0aW9uCistLS0tLS0tLS0tLS0tCisKK0FueSBsaXRpZ2F0aW9uIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBtYXkgYmUgYnJvdWdodCBvbmx5IGluIHRoZQorY291cnRzIG9mIGEganVyaXNkaWN0aW9uIHdoZXJlIHRoZSBkZWZlbmRhbnQgbWFpbnRhaW5zIGl0cyBwcmluY2lwYWwKK3BsYWNlIG9mIGJ1c2luZXNzIGFuZCBzdWNoIGxpdGlnYXRpb24gc2hhbGwgYmUgZ292ZXJuZWQgYnkgbGF3cyBvZiB0aGF0CitqdXJpc2RpY3Rpb24sIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4KK05vdGhpbmcgaW4gdGhpcyBTZWN0aW9uIHNoYWxsIHByZXZlbnQgYSBwYXJ0eSdzIGFiaWxpdHkgdG8gYnJpbmcKK2Nyb3NzLWNsYWltcyBvciBjb3VudGVyLWNsYWltcy4KKworOS4gTWlzY2VsbGFuZW91cworLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgdGhlIHN1YmplY3QKK21hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUKK3VuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudAorbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuIEFueSBsYXcgb3IgcmVndWxhdGlvbiB3aGljaCBwcm92aWRlcwordGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlcgorc2hhbGwgbm90IGJlIHVzZWQgdG8gY29uc3RydWUgdGhpcyBMaWNlbnNlIGFnYWluc3QgYSBDb250cmlidXRvci4KKworMTAuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworMTAuMS4gTmV3IFZlcnNpb25zCisKK01vemlsbGEgRm91bmRhdGlvbiBpcyB0aGUgbGljZW5zZSBzdGV3YXJkLiBFeGNlcHQgYXMgcHJvdmlkZWQgaW4gU2VjdGlvbgorMTAuMywgbm8gb25lIG90aGVyIHRoYW4gdGhlIGxpY2Vuc2Ugc3Rld2FyZCBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSBvcgorcHVibGlzaCBuZXcgdmVyc2lvbnMgb2YgdGhpcyBMaWNlbnNlLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhCitkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4KKworMTAuMi4gRWZmZWN0IG9mIE5ldyBWZXJzaW9ucworCitZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIENvdmVyZWQgU29mdHdhcmUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSB2ZXJzaW9uCitvZiB0aGUgTGljZW5zZSB1bmRlciB3aGljaCBZb3Ugb3JpZ2luYWxseSByZWNlaXZlZCB0aGUgQ292ZXJlZCBTb2Z0d2FyZSwKK29yIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgbGljZW5zZQorc3Rld2FyZC4KKworMTAuMy4gTW9kaWZpZWQgVmVyc2lvbnMKKworSWYgeW91IGNyZWF0ZSBzb2Z0d2FyZSBub3QgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLCBhbmQgeW91IHdhbnQgdG8KK2NyZWF0ZSBhIG5ldyBsaWNlbnNlIGZvciBzdWNoIHNvZnR3YXJlLCB5b3UgbWF5IGNyZWF0ZSBhbmQgdXNlIGEKK21vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlIGlmIHlvdSByZW5hbWUgdGhlIGxpY2Vuc2UgYW5kIHJlbW92ZQorYW55IHJlZmVyZW5jZXMgdG8gdGhlIG5hbWUgb2YgdGhlIGxpY2Vuc2Ugc3Rld2FyZCAoZXhjZXB0IHRvIG5vdGUgdGhhdAorc3VjaCBtb2RpZmllZCBsaWNlbnNlIGRpZmZlcnMgZnJvbSB0aGlzIExpY2Vuc2UpLgorCisxMC40LiBEaXN0cmlidXRpbmcgU291cmNlIENvZGUgRm9ybSB0aGF0IGlzIEluY29tcGF0aWJsZSBXaXRoIFNlY29uZGFyeQorTGljZW5zZXMKKworSWYgWW91IGNob29zZSB0byBkaXN0cmlidXRlIFNvdXJjZSBDb2RlIEZvcm0gdGhhdCBpcyBJbmNvbXBhdGlibGUgV2l0aAorU2Vjb25kYXJ5IExpY2Vuc2VzIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsIHRoZQorbm90aWNlIGRlc2NyaWJlZCBpbiBFeGhpYml0IEIgb2YgdGhpcyBMaWNlbnNlIG11c3QgYmUgYXR0YWNoZWQuCisKK0V4aGliaXQgQSAtIFNvdXJjZSBDb2RlIEZvcm0gTGljZW5zZSBOb3RpY2UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICBUaGlzIFNvdXJjZSBDb2RlIEZvcm0gaXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIE1vemlsbGEgUHVibGljCisgIExpY2Vuc2UsIHYuIDIuMC4gSWYgYSBjb3B5IG9mIHRoZSBNUEwgd2FzIG5vdCBkaXN0cmlidXRlZCB3aXRoIHRoaXMKKyAgZmlsZSwgWW91IGNhbiBvYnRhaW4gb25lIGF0IGh0dHA6Ly9tb3ppbGxhLm9yZy9NUEwvMi4wLy4KKworSWYgaXQgaXMgbm90IHBvc3NpYmxlIG9yIGRlc2lyYWJsZSB0byBwdXQgdGhlIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIKK2ZpbGUsIHRoZW4gWW91IG1heSBpbmNsdWRlIHRoZSBub3RpY2UgaW4gYSBsb2NhdGlvbiAoc3VjaCBhcyBhIExJQ0VOU0UKK2ZpbGUgaW4gYSByZWxldmFudCBkaXJlY3RvcnkpIHdoZXJlIGEgcmVjaXBpZW50IHdvdWxkIGJlIGxpa2VseSB0byBsb29rCitmb3Igc3VjaCBhIG5vdGljZS4KKworWW91IG1heSBhZGQgYWRkaXRpb25hbCBhY2N1cmF0ZSBub3RpY2VzIG9mIGNvcHlyaWdodCBvd25lcnNoaXAuCisKK0V4aGliaXQgQiAtICJJbmNvbXBhdGlibGUgV2l0aCBTZWNvbmRhcnkgTGljZW5zZXMiIE5vdGljZQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgVGhpcyBTb3VyY2UgQ29kZSBGb3JtIGlzICJJbmNvbXBhdGlibGUgV2l0aCBTZWNvbmRhcnkgTGljZW5zZXMiLCBhcworICBkZWZpbmVkIGJ5IHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlLCB2LiAyLjAuCisKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL01TTVMgYi9saWNlbnNlcy9NU01TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhOThiNjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9NU01TCkBAIC0wLDAgKzEsMzYgQEAKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIExJQ0VOU0UKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworVEhJUyBJUyBXSEFUIFlPVSBBR1JFRUQgVE8gQlkgRE9XTkxPQURJTkcgVEhFIFNPRlRXQVJFOgorCisxKSBUaGUgcHJvZ3JhbSAoTVNNUykgcmVjZWl2ZWQgYnkgeW91IHdpbGwgYmUgdXNlZCBvbmx5IGZvciBzY2llbnRpZmljCisgICByZXNlYXJjaC4gVGhpcyBsaWNlbnNlIGlzIGlzc3VlZCB0byB5b3UgYXMgYW4gaW5kaXZpZHVhbC4gRm9yIGluc3RpdHV0aW9uCisgICB3aWRlIHVzZSBvZiB0aGUgc29mdHdhcmUgeW91IHdpbGwgaGF2ZSB0byBmb2xsb3cgdGhlIG9mZmljaWFsIHJlZ2lzdHJhdGlvbgorICAgcHJvY2VkdXJlLiBUbyBkbyBzbyB5b3UgY2FuIGNvbnRhY3QgdXMgYnkgZS1tYWlsIChvbHNvbkBzY3JpcHBzLmVkdSksIG1haWwKKyAgIChUU1JJLCBNb2xlY3VsYXIgQmlvbG9neSBEZXBhcnRtZW50LCBUUEMgMjYsIDEwNTUwIE5vcnRoIFRvcnJleSBQaW5lcyBSb2FkLAorICAgOTIwMzcgTGEgSm9sbGEpIG9yIGZheCAoODU4KS03ODQtMjg2MC4KKworMi4gV0UgUkVRVUVTVCBUSEFUIFlPVSBBR1JFRSBUTyBBQ0tOT1dMRURHRSBUSEUgVVNFIE9GIFRIRSBNU01TIFNPRlRXQVJFIFRIQVQKKyAgIFJFU1VMVFMgSU4gQU5ZIFBVQkxJU0hFRCBXT1JLLCBJTkNMVURJTkcgU0NJRU5USUZJQyBQQVBFUlMsIEZJTE1TIEFORAorICAgVklERU9UQVBFUyBCWSBDSVRJTkcgVEhFIEZPTExPV0lORyBSRUZFUkVOQ0U6CisKKyAgICBTYW5uZXIsIE0uRi4sIFNwZWhuZXIsIEouLUMuLCBhbmQgT2xzb24sIEEuSi4gKDE5OTYpIFJlZHVjZWQgc3VyZmFjZToKKyAgICBhbiBlZmZpY2llbnQgd2F5IHRvIGNvbXB1dGUgbW9sZWN1bGFyIHN1cmZhY2VzLiBCaW9wb2x5bWVycywgVm9sLiAzOC4sCisgICAgKDMpLCAzMDUtMzIwLgorCiszLiBZb3Ugd2lsbCBub3Qgc2VsbCBvciBvdGhlcndpc2UgdHJhbnNmZXIgdGhlc2UgcHJvZ3JhbXMgb3IgZGVyaXZhdGl2ZXMgdG8KKyAgIGFueSBvdGhlciBwYXJ0eSwgd2hldGhlciB3aXRoIG9yIHdpdGhvdXQgY29uc2lkZXJhdGlvbiwgZm9yIGFueSBwdXJwb3NlLgorCis0LiBZb3Ugd2lsbCBub3Qgb2J0YWluLCBhbmQgd2lsbCBub3QgYXR0ZW1wdCB0byBvYnRhaW4gY29weXJpZ2h0IGNvdmVyYWdlCisgICB0aGVyZW9uIHdpdGhvdXQgdGhlIGV4cHJlc3MgcHVycG9zZSB3cml0dGVuIGNvbnNlbnQgb2YgVGhlIFNjcmlwcHMgUmVzZWFyY2gKKyAgIEluc3RpdHV0ZS4KKworNS4gWW91IHdpbGwgaG9sZCBoYXJtbGVzcyBmcm9tIGFsbCBvciBhbnkgZXhwZW5zZXMgeW91IG1heSBpbmN1ciBhcyBhIHJlc3VsdAorICAgb2Ygb3IgYXJpc2luZyBmcm9tIHlvdXIgdXNlLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIG9mIHRoZXNlIG1hdGVyaWFscy4gIFlvdQorICAgdW5kZXJzdGFuZCB0aGF0IG5vIG90aGVyIHJpZ2h0IG9yIGxpY2Vuc2UgdG8gdGhpcyBwcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlcworICAgaXMgZ3JhbnRlZCBvciBpbXBsaWVkIGFzIGEgcmVzdWx0IG9mIG91ciB0cmFuc21pc3Npb24gb2Ygc2FtZSB0byB5b3UuCisKKworCisKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL01TamRiY0VVTEE0MCBiL2xpY2Vuc2VzL01TamRiY0VVTEE0MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzg5Njc1Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvTVNqZGJjRVVMQTQwCkBAIC0wLDAgKzEsMTM2IEBACitNSUNST1NPRlQgU09GVFdBUkUgTElDRU5TRSBURVJNUworCitNSUNST1NPRlQgSkRCQyBEUklWRVIgNC4wIEZPUiBTUUwgU0VSVkVSCisKK1RoZXNlIGxpY2Vuc2UgdGVybXMgYXJlIGFuIGFncmVlbWVudCBiZXR3ZWVuIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbgorKG9yIGJhc2VkIG9uIHdoZXJlIHlvdSBsaXZlLCBvbmUgb2YgaXRzIGFmZmlsaWF0ZXMpIGFuZCB5b3UuIFBsZWFzZQorcmVhZCB0aGVtLiBUaGV5IGFwcGx5IHRvIHRoZSBzb2Z0d2FyZSBuYW1lZCBhYm92ZSwgd2hpY2ggaW5jbHVkZXMgdGhlCittZWRpYSBvbiB3aGljaCB5b3UgcmVjZWl2ZWQgaXQsIGlmIGFueS4gVGhlIHRlcm1zIGFsc28gYXBwbHkgdG8gYW55CitNaWNyb3NvZnQKK+KAoiB1cGRhdGVzLAor4oCiIHN1cHBsZW1lbnRzLAor4oCiIEludGVybmV0LWJhc2VkIHNlcnZpY2VzLCBhbmQKK+KAoiBzdXBwb3J0IHNlcnZpY2VzCitmb3IgdGhpcyBzb2Z0d2FyZSwgdW5sZXNzIG90aGVyIHRlcm1zIGFjY29tcGFueSB0aG9zZSBpdGVtcy4gSWYgc28sCit0aG9zZSB0ZXJtcyBhcHBseS4KK0JZIFVTSU5HIFRIRSBTT0ZUV0FSRSwgWU9VIEFDQ0VQVCBUSEVTRSBURVJNUy4gSUYgWU9VIERPIE5PVCBBQ0NFUFQKK1RIRU0sIERPIE5PVCBVU0UgVEhFIFNPRlRXQVJFLgorSWYgeW91IGNvbXBseSB3aXRoIHRoZXNlIGxpY2Vuc2UgdGVybXMsIHlvdSBoYXZlIHRoZSByaWdodHMgYmVsb3cuCisKKzEuIElOU1RBTExBVElPTiBBTkQgVVNFIFJJR0hUUy4gWW91IG1heSBpbnN0YWxsIGFuZCB1c2UgYW55IG51bWJlciBvZgorY29waWVzIG9mIHRoZSBzb2Z0d2FyZSBvbiB5b3VyIGRldmljZXMgdG8gZGVzaWduLCBkZXZlbG9wIGFuZCB0ZXN0Cit5b3VyIHByb2dyYW1zLgorCisyLiBTQ09QRSBPRiBMSUNFTlNFLiBUaGUgc29mdHdhcmUgaXMgbGljZW5zZWQsIG5vdCBzb2xkLiBUaGlzCithZ3JlZW1lbnQgb25seSBnaXZlcyB5b3Ugc29tZSByaWdodHMgdG8gdXNlIHRoZSBzb2Z0d2FyZS4gTWljcm9zb2Z0CityZXNlcnZlcyBhbGwgb3RoZXIgcmlnaHRzLiBVbmxlc3MgYXBwbGljYWJsZSBsYXcgZ2l2ZXMgeW91IG1vcmUgcmlnaHRzCitkZXNwaXRlIHRoaXMgbGltaXRhdGlvbiwgeW91IG1heSB1c2UgdGhlIHNvZnR3YXJlIG9ubHkgYXMgZXhwcmVzc2x5CitwZXJtaXR0ZWQgaW4gdGhpcyBhZ3JlZW1lbnQuIEluIGRvaW5nIHNvLCB5b3UgbXVzdCBjb21wbHkgd2l0aCBhbnkKK3RlY2huaWNhbCBsaW1pdGF0aW9ucyBpbiB0aGUgc29mdHdhcmUgdGhhdCBvbmx5IGFsbG93IHlvdSB0byB1c2UgaXQgaW4KK2NlcnRhaW4gd2F5cy4gWW91IG1heSBub3QKK+KAoiBkaXNjbG9zZSB0aGUgcmVzdWx0cyBvZiBhbnkgYmVuY2htYXJrIHRlc3RzIG9mIHRoZSBzb2Z0d2FyZSB0byBhbnkKK3RoaXJkIHBhcnR5IHdpdGhvdXQgTWljcm9zb2Z04oCZcyBwcmlvciB3cml0dGVuIGFwcHJvdmFsOwor4oCiIHdvcmsgYXJvdW5kIGFueSB0ZWNobmljYWwgbGltaXRhdGlvbnMgaW4gdGhlIHNvZnR3YXJlOwor4oCiIHJldmVyc2UgZW5naW5lZXIsIGRlY29tcGlsZSBvciBkaXNhc3NlbWJsZSB0aGUgc29mdHdhcmUsIGV4Y2VwdCBhbmQKK29ubHkgdG8gdGhlIGV4dGVudCB0aGF0IGFwcGxpY2FibGUgbGF3IGV4cHJlc3NseSBwZXJtaXRzLCBkZXNwaXRlIHRoaXMKK2xpbWl0YXRpb247CivigKIgbWFrZSBtb3JlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUgdGhhbiBzcGVjaWZpZWQgaW4gdGhpcyBhZ3JlZW1lbnQgb3IKK2FsbG93ZWQgYnkgYXBwbGljYWJsZSBsYXcsIGRlc3BpdGUgdGhpcyBsaW1pdGF0aW9uOwor4oCiIHB1Ymxpc2ggdGhlIHNvZnR3YXJlIGZvciBvdGhlcnMgdG8gY29weTsKK+KAoiByZW50LCBsZWFzZSBvciBsZW5kIHRoZSBzb2Z0d2FyZTsKK+KAoiB0cmFuc2ZlciB0aGUgc29mdHdhcmUgb3IgdGhpcyBhZ3JlZW1lbnQgdG8gYW55IHRoaXJkIHBhcnR5OyBvcgor4oCiIHVzZSB0aGUgc29mdHdhcmUgZm9yIGNvbW1lcmNpYWwgc29mdHdhcmUgaG9zdGluZyBzZXJ2aWNlcy4KKworMy4gQkFDS1VQIENPUFkuIFlvdSBtYXkgbWFrZSBvbmUgYmFja3VwIGNvcHkgb2YgdGhlIHNvZnR3YXJlLiBZb3UgbWF5Cit1c2UgaXQgb25seSB0byByZWluc3RhbGwgdGhlIHNvZnR3YXJlLgorCis0LiBET0NVTUVOVEFUSU9OLiBBbnkgcGVyc29uIHRoYXQgaGFzIHZhbGlkIGFjY2VzcyB0byB5b3VyIGNvbXB1dGVyIG9yCitpbnRlcm5hbCBuZXR3b3JrIG1heSBjb3B5IGFuZCB1c2UgdGhlIGRvY3VtZW50YXRpb24gZm9yIHlvdXIgaW50ZXJuYWwsCityZWZlcmVuY2UgcHVycG9zZXMuCisKKzUuIEVYUE9SVCBSRVNUUklDVElPTlMuIFRoZSBzb2Z0d2FyZSBpcyBzdWJqZWN0IHRvIFVuaXRlZCBTdGF0ZXMKK2V4cG9ydCBsYXdzIGFuZCByZWd1bGF0aW9ucy4gWW91IG11c3QgY29tcGx5IHdpdGggYWxsIGRvbWVzdGljIGFuZAoraW50ZXJuYXRpb25hbCBleHBvcnQgbGF3cyBhbmQgcmVndWxhdGlvbnMgdGhhdCBhcHBseSB0byB0aGUgc29mdHdhcmUuCitUaGVzZSBsYXdzIGluY2x1ZGUgcmVzdHJpY3Rpb25zIG9uIGRlc3RpbmF0aW9ucywgZW5kIHVzZXJzIGFuZCBlbmQKK3VzZS4gRm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24sIHNlZSB3d3cubWljcm9zb2Z0LmNvbS9leHBvcnRpbmcuCisKKzYuIFNVUFBPUlQgU0VSVklDRVMuIEJlY2F1c2UgdGhpcyBzb2Z0d2FyZSBpcyDigJxhcyBpcyzigJ0gd2UgbWF5IG5vdAorcHJvdmlkZSBzdXBwb3J0IHNlcnZpY2VzIGZvciBpdC4KKworNy4gRU5USVJFIEFHUkVFTUVOVC4gVGhpcyBhZ3JlZW1lbnQsIGFuZCB0aGUgdGVybXMgZm9yIHN1cHBsZW1lbnRzLAordXBkYXRlcywgSW50ZXJuZXQtYmFzZWQgc2VydmljZXMgYW5kIHN1cHBvcnQgc2VydmljZXMgdGhhdCB5b3UgdXNlLAorYXJlIHRoZSBlbnRpcmUgYWdyZWVtZW50IGZvciB0aGUgc29mdHdhcmUgYW5kIHN1cHBvcnQgc2VydmljZXMuCisKKzguIEFQUExJQ0FCTEUgTEFXLgorYS4gVW5pdGVkIFN0YXRlcy4gSWYgeW91IGFjcXVpcmVkIHRoZSBzb2Z0d2FyZSBpbiB0aGUgVW5pdGVkIFN0YXRlcywKK1dhc2hpbmd0b24gc3RhdGUgbGF3IGdvdmVybnMgdGhlIGludGVycHJldGF0aW9uIG9mIHRoaXMgYWdyZWVtZW50IGFuZAorYXBwbGllcyB0byBjbGFpbXMgZm9yIGJyZWFjaCBvZiBpdCwgcmVnYXJkbGVzcyBvZiBjb25mbGljdCBvZiBsYXdzCitwcmluY2lwbGVzLiBUaGUgbGF3cyBvZiB0aGUgc3RhdGUgd2hlcmUgeW91IGxpdmUgZ292ZXJuIGFsbCBvdGhlcgorY2xhaW1zLCBpbmNsdWRpbmcgY2xhaW1zIHVuZGVyIHN0YXRlIGNvbnN1bWVyIHByb3RlY3Rpb24gbGF3cywgdW5mYWlyCitjb21wZXRpdGlvbiBsYXdzLCBhbmQgaW4gdG9ydC4KK2IuIE91dHNpZGUgdGhlIFVuaXRlZCBTdGF0ZXMuIElmIHlvdSBhY3F1aXJlZCB0aGUgc29mdHdhcmUgaW4gYW55CitvdGhlciBjb3VudHJ5LCB0aGUgbGF3cyBvZiB0aGF0IGNvdW50cnkgYXBwbHkuCisKKzkuIExFR0FMIEVGRkVDVC4gVGhpcyBhZ3JlZW1lbnQgZGVzY3JpYmVzIGNlcnRhaW4gbGVnYWwgcmlnaHRzLiBZb3UKK21heSBoYXZlIG90aGVyIHJpZ2h0cyB1bmRlciB0aGUgbGF3cyBvZiB5b3VyIGNvdW50cnkuIFlvdSBtYXkgYWxzbworaGF2ZSByaWdodHMgd2l0aCByZXNwZWN0IHRvIHRoZSBwYXJ0eSBmcm9tIHdob20geW91IGFjcXVpcmVkIHRoZQorc29mdHdhcmUuIFRoaXMgYWdyZWVtZW50IGRvZXMgbm90IGNoYW5nZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGUgbGF3cyBvZgoreW91ciBjb3VudHJ5IGlmIHRoZSBsYXdzIG9mIHlvdXIgY291bnRyeSBkbyBub3QgcGVybWl0IGl0IHRvIGRvIHNvLgorCisxMC4gRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS4gVEhFIFNPRlRXQVJFIElTIExJQ0VOU0VEIOKAnEFTLUlTLuKAnSBZT1UgQkVBUgorVEhFIFJJU0sgT0YgVVNJTkcgSVQuIE1JQ1JPU09GVCBHSVZFUyBOTyBFWFBSRVNTIFdBUlJBTlRJRVMsCitHVUFSQU5URUVTIE9SIENPTkRJVElPTlMuIFlPVSBNQVkgSEFWRSBBRERJVElPTkFMIENPTlNVTUVSIFJJR0hUUworVU5ERVIgWU9VUiBMT0NBTCBMQVdTIFdISUNIIFRISVMgQUdSRUVNRU5UIENBTk5PVCBDSEFOR0UuIFRPIFRIRQorRVhURU5UIFBFUk1JVFRFRCBVTkRFUiBZT1VSIExPQ0FMIExBV1MsIE1JQ1JPU09GVCBFWENMVURFUyBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorTk9OLUlORlJJTkdFTUVOVC4KKworMTEuIExJTUlUQVRJT04gT04gQU5EIEVYQ0xVU0lPTiBPRiBSRU1FRElFUyBBTkQgREFNQUdFUy4gWU9VIENBTgorUkVDT1ZFUiBGUk9NIE1JQ1JPU09GVCBBTkQgSVRTIFNVUFBMSUVSUyBPTkxZIERJUkVDVCBEQU1BR0VTIFVQIFRPCitVLlMuICQ1LjAwLiBZT1UgQ0FOTk9UIFJFQ09WRVIgQU5ZIE9USEVSIERBTUFHRVMsIElOQ0xVRElORworQ09OU0VRVUVOVElBTCwgTE9TVCBQUk9GSVRTLCBTUEVDSUFMLCBJTkRJUkVDVCBPUiBJTkNJREVOVEFMIERBTUFHRVMuCitUaGlzIGxpbWl0YXRpb24gYXBwbGllcyB0bwor4oCiIGFueXRoaW5nIHJlbGF0ZWQgdG8gdGhlIHNvZnR3YXJlLCBzZXJ2aWNlcywgY29udGVudCAoaW5jbHVkaW5nIGNvZGUpCitvbiB0aGlyZCBwYXJ0eSBJbnRlcm5ldCBzaXRlcywgb3IgdGhpcmQgcGFydHkgcHJvZ3JhbXM7IGFuZAor4oCiIGNsYWltcyBmb3IgYnJlYWNoIG9mIGNvbnRyYWN0LCBicmVhY2ggb2Ygd2FycmFudHksIGd1YXJhbnRlZSBvcgorY29uZGl0aW9uLCBzdHJpY3QgbGlhYmlsaXR5LCBuZWdsaWdlbmNlLCBvciBvdGhlciB0b3J0IHRvIHRoZSBleHRlbnQKK3Blcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdy4KK0l0IGFsc28gYXBwbGllcyBldmVuIGlmIE1pY3Jvc29mdCBrbmV3IG9yIHNob3VsZCBoYXZlIGtub3duIGFib3V0IHRoZQorcG9zc2liaWxpdHkgb2YgdGhlIGRhbWFnZXMuIFRoZSBhYm92ZSBsaW1pdGF0aW9uIG9yIGV4Y2x1c2lvbiBtYXkgbm90CithcHBseSB0byB5b3UgYmVjYXVzZSB5b3VyIGNvdW50cnkgbWF5IG5vdCBhbGxvdyB0aGUgZXhjbHVzaW9uIG9yCitsaW1pdGF0aW9uIG9mIGluY2lkZW50YWwsIGNvbnNlcXVlbnRpYWwgb3Igb3RoZXIgZGFtYWdlcy4KK1BsZWFzZSBub3RlOiBBcyB0aGlzIHNvZnR3YXJlIGlzIGRpc3RyaWJ1dGVkIGluIFF1ZWJlYywgQ2FuYWRhLCBzb21lCitvZiB0aGUgY2xhdXNlcyBpbiB0aGlzIGFncmVlbWVudCBhcmUgcHJvdmlkZWQgYmVsb3cgaW4gRnJlbmNoLgorUmVtYXJxdWUgOiBDZSBsb2dpY2llbCDDqXRhbnQgZGlzdHJpYnXDqSBhdSBRdcOpYmVjLCBDYW5hZGEsIGNlcnRhaW5lcworZGVzIGNsYXVzZXMgZGFucyBjZSBjb250cmF0IHNvbnQgZm91cm5pZXMgY2ktZGVzc291cyBlbiBmcmFuw6dhaXMuCitFWE9Ow4lSQVRJT04gREUgR0FSQU5USUUuIExlIGxvZ2ljaWVsIHZpc8OpIHBhciB1bmUgbGljZW5jZSBlc3Qgb2ZmZXJ0CivCqyB0ZWwgcXVlbCDCuy4gVG91dGUgdXRpbGlzYXRpb24gZGUgY2UgbG9naWNpZWwgZXN0IMOgIHZvdHJlIHNldWxlCityaXNxdWUgZXQgcMOpcmlsLiBNaWNyb3NvZnQgbuKAmWFjY29yZGUgYXVjdW5lIGF1dHJlIGdhcmFudGllIGV4cHJlc3NlLgorVm91cyBwb3V2ZXogYsOpbsOpZmljaWVyIGRlIGRyb2l0cyBhZGRpdGlvbm5lbHMgZW4gdmVydHUgZHUgZHJvaXQgbG9jYWwKK3N1ciBsYSBwcm90ZWN0aW9uIGRlcyBjb25zb21tYXRldXJzLCBxdWUgY2UgY29udHJhdCBuZSBwZXV0IG1vZGlmaWVyLgorTGEgb3UgZWxsZXMgc29udCBwZXJtaXNlcyBwYXIgbGUgZHJvaXQgbG9jYWxlLCBsZXMgZ2FyYW50aWVzCitpbXBsaWNpdGVzIGRlIHF1YWxpdMOpIG1hcmNoYW5kZSwgZOKAmWFkw6lxdWF0aW9uIMOgIHVuIHVzYWdlIHBhcnRpY3VsaWVyCitldCBk4oCZYWJzZW5jZSBkZSBjb250cmVmYcOnb24gc29udCBleGNsdWVzLgorTElNSVRBVElPTiBERVMgRE9NTUFHRVMtSU5Uw4lSw4pUUyBFVCBFWENMVVNJT04gREUgUkVTUE9OU0FCSUxJVMOJIFBPVVIKK0xFUyBET01NQUdFUy4gVm91cyBwb3V2ZXogb2J0ZW5pciBkZSBNaWNyb3NvZnQgZXQgZGUgc2VzIGZvdXJuaXNzZXVycwordW5lIGluZGVtbmlzYXRpb24gZW4gY2FzIGRlIGRvbW1hZ2VzIGRpcmVjdHMgdW5pcXVlbWVudCDDoCBoYXV0ZXVyIGRlCis1LDAwICQgVVMuIFZvdXMgbmUgcG91dmV6IHByw6l0ZW5kcmUgw6AgYXVjdW5lIGluZGVtbmlzYXRpb24gcG91ciBsZXMKK2F1dHJlcyBkb21tYWdlcywgeSBjb21wcmlzIGxlcyBkb21tYWdlcyBzcMOpY2lhdXgsIGluZGlyZWN0cyBvdQorYWNjZXNzb2lyZXMgZXQgcGVydGVzIGRlIGLDqW7DqWZpY2VzLgorQ2V0dGUgbGltaXRhdGlvbiBjb25jZXJuZSA6CivigKIgdG91dCBjZSBxdWkgZXN0IHJlbGnDqSBhdSBsb2dpY2llbCwgYXV4IHNlcnZpY2VzIG91IGF1IGNvbnRlbnUKKyh5IGNvbXByaXMgbGUgY29kZSkgZmlndXJhbnQgc3VyIGRlcyBzaXRlcyBJbnRlcm5ldCB0aWVycyBvdSBkYW5zIGRlcworcHJvZ3JhbW1lcyB0aWVycyA7IGV0CivigKIgbGVzIHLDqWNsYW1hdGlvbnMgYXUgdGl0cmUgZGUgdmlvbGF0aW9uIGRlIGNvbnRyYXQgb3UgZGUgZ2FyYW50aWUsIG91CithdSB0aXRyZSBkZSByZXNwb25zYWJpbGl0w6kgc3RyaWN0ZSwgZGUgbsOpZ2xpZ2VuY2Ugb3UgZOKAmXVuZSBhdXRyZSBmYXV0ZQorZGFucyBsYSBsaW1pdGUgYXV0b3Jpc8OpZSBwYXIgbGEgbG9pIGVuIHZpZ3VldXIuCitFbGxlIHPigJlhcHBsaXF1ZSDDqWdhbGVtZW50LCBtw6ptZSBzaSBNaWNyb3NvZnQgY29ubmFpc3NhaXQgb3UgZGV2cmFpdAorY29ubmHDrnRyZSBs4oCZw6l2ZW50dWFsaXTDqSBk4oCZdW4gdGVsIGRvbW1hZ2UuIFNpIHZvdHJlIHBheXMgbuKAmWF1dG9yaXNlIHBhcworbOKAmWV4Y2x1c2lvbiBvdSBsYSBsaW1pdGF0aW9uIGRlIHJlc3BvbnNhYmlsaXTDqSBwb3VyIGxlcyBkb21tYWdlcworaW5kaXJlY3RzLCBhY2Nlc3NvaXJlcyBvdSBkZSBxdWVscXVlIG5hdHVyZSBxdWUgY2Ugc29pdCwgaWwgc2UgcGV1dAorcXVlIGxhIGxpbWl0YXRpb24gb3UgbOKAmWV4Y2x1c2lvbiBjaS1kZXNzdXMgbmUgc+KAmWFwcGxpcXVlcmEgcGFzIMOgIHZvdHJlCivDqWdhcmQuCitFRkZFVCBKVVJJRElRVUUuIExlIHByw6lzZW50IGNvbnRyYXQgZMOpY3JpdCBjZXJ0YWlucyBkcm9pdHMganVyaWRpcXVlcy4KK1ZvdXMgcG91cnJpZXogYXZvaXIgZOKAmWF1dHJlcyBkcm9pdHMgcHLDqXZ1cyBwYXIgbGVzIGxvaXMgZGUgdm90cmUgcGF5cy4KK0xlIHByw6lzZW50IGNvbnRyYXQgbmUgbW9kaWZpZSBwYXMgbGVzIGRyb2l0cyBxdWUgdm91cyBjb25mw6hyZW50IGxlcworbG9pcyBkZSB2b3RyZSBwYXlzIHNpIGNlbGxlcy1jaSBuZSBsZSBwZXJtZXR0ZW50IHBhcy4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL01TdHRmRVVMQSBiL2xpY2Vuc2VzL01TdHRmRVVMQQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODM2YTAwCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvTVN0dGZFVUxBCkBAIC0wLDAgKzEsOTQgQEAKK01pY3Jvc29mdCBUcnVlVHlwZSBGb250cworRU5ELVVTRVIgTElDRU5TRSBBR1JFRU1FTlQgRk9SIE1JQ1JPU09GVCBTT0ZUV0FSRQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0lNUE9SVEFOVCAtIFJFQUQgQ0FSRUZVTExZOiBUaGlzIE1pY3Jvc29mdCBFbmQtVXNlciBMaWNlbnNlIEFncmVlbWVudAorKCJFVUxBIikgaXMgYSBsZWdhbCBhZ3JlZW1lbnQgYmV0d2VlbiB5b3UgKGVpdGhlciBhbiBpbmRpdmlkdWFsIG9yIGEgc2luZ2xlCitlbnRpdHkpIGFuZCBNaWNyb3NvZnQgQ29ycG9yYXRpb24gZm9yIHRoZSBNaWNyb3NvZnQgc29mdHdhcmUgYWNjb21wYW55aW5nCit0aGlzIEVVTEEsIHdoaWNoIGluY2x1ZGVzIGNvbXB1dGVyIHNvZnR3YXJlIGFuZCBtYXkgaW5jbHVkZSBhc3NvY2lhdGVkCittZWRpYSwgcHJpbnRlZCBtYXRlcmlhbHMsIGFuZCAib24tbGluZSIgb3IgZWxlY3Ryb25pYyBkb2N1bWVudGF0aW9uCisoIlNPRlRXQVJFIFBST0RVQ1QiIG9yICJTT0ZUV0FSRSIpLiBCeSBleGVyY2lzaW5nIHlvdXIgcmlnaHRzIHRvIG1ha2UgYW5kCit1c2UgY29waWVzIG9mIHRoZSBTT0ZUV0FSRSBQUk9EVUNULCB5b3UgYWdyZWUgdG8gYmUgYm91bmQgYnkgdGhlIHRlcm1zIG9mCit0aGlzIEVVTEEuIElmIHlvdSBkbyBub3QgYWdyZWUgdG8gdGhlIHRlcm1zIG9mIHRoaXMgRVVMQSwgeW91IG1heSBub3QgdXNlCit0aGUgU09GVFdBUkUgUFJPRFVDVC4KKworU09GVFdBUkUgUFJPRFVDVCBMSUNFTlNFCisKK1RoZSBTT0ZUV0FSRSBQUk9EVUNUIGlzIHByb3RlY3RlZCBieSBjb3B5cmlnaHQgbGF3cyBhbmQgaW50ZXJuYXRpb25hbAorY29weXJpZ2h0IHRyZWF0aWVzLCBhcyB3ZWxsIGFzIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIGFuZAordHJlYXRpZXMuIFRoZSBTT0ZUV0FSRSBQUk9EVUNUIGlzIGxpY2Vuc2VkLCBub3Qgc29sZC4KKworMS4gR1JBTlQgT0YgTElDRU5TRS4gVGhpcyBFVUxBIGdyYW50cyB5b3UgdGhlIGZvbGxvd2luZyByaWdodHM6CisKK8K3CUluc3RhbGxhdGlvbiBhbmQgVXNlLiBZb3UgbWF5IGluc3RhbGwgYW5kIHVzZSBhbiB1bmxpbWl0ZWQgbnVtYmVyIG9mCitjb3BpZXMgb2YgdGhlIFNPRlRXQVJFIFBST0RVQ1QuCisKK8K3CVJlcHJvZHVjdGlvbiBhbmQgRGlzdHJpYnV0aW9uLiBZb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBhbgordW5saW1pdGVkIG51bWJlciBvZiBjb3BpZXMgb2YgdGhlIFNPRlRXQVJFIFBST0RVQ1Q7IHByb3ZpZGVkIHRoYXQgZWFjaCBjb3B5CitzaGFsbCBiZSBhIHRydWUgYW5kIGNvbXBsZXRlIGNvcHksIGluY2x1ZGluZyBhbGwgY29weXJpZ2h0IGFuZCB0cmFkZW1hcmsKK25vdGljZXMsIGFuZCBzaGFsbCBiZSBhY2NvbXBhbmllZCBieSBhIGNvcHkgb2YgdGhpcyBFVUxBLiAgQ29waWVzIG9mIHRoZQorU09GVFdBUkUgUFJPRFVDVCBtYXkgbm90IGJlIGRpc3RyaWJ1dGVkIGZvciBwcm9maXQgZWl0aGVyIG9uIGEgc3RhbmRhbG9uZQorYmFzaXMgb3IgaW5jbHVkZWQgYXMgcGFydCBvZiB5b3VyIG93biBwcm9kdWN0LgorCisyLglERVNDUklQVElPTiBPRiBPVEhFUiBSSUdIVFMgQU5EIExJTUlUQVRJT05TLgorCivCtwlMaW1pdGF0aW9ucyBvbiBSZXZlcnNlIEVuZ2luZWVyaW5nLCBEZWNvbXBpbGF0aW9uLCBhbmQgRGlzYXNzZW1ibHkuCitZb3UgbWF5IG5vdCByZXZlcnNlIGVuZ2luZWVyLCBkZWNvbXBpbGUsIG9yIGRpc2Fzc2VtYmxlIHRoZSBTT0ZUV0FSRQorUFJPRFVDVCwgZXhjZXB0IGFuZCBvbmx5IHRvIHRoZSBleHRlbnQgdGhhdCBzdWNoIGFjdGl2aXR5IGlzIGV4cHJlc3NseQorcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3IG5vdHdpdGhzdGFuZGluZyB0aGlzIGxpbWl0YXRpb24uCisKK8K3CVJlc3RyaWN0aW9ucyBvbiBBbHRlcmF0aW9uLiAgWW91IG1heSBub3QgcmVuYW1lLCBlZGl0IG9yIGNyZWF0ZSBhbnkKK2Rlcml2YXRpdmUgd29ya3MgZnJvbSB0aGUgU09GVFdBUkUgUFJPRFVDVCwgb3RoZXIgdGhhbiBzdWJzZXR0aW5nIHdoZW4KK2VtYmVkZGluZyB0aGVtIGluIGRvY3VtZW50cy4KKworwrcJU29mdHdhcmUgVHJhbnNmZXIuIFlvdSBtYXkgcGVybWFuZW50bHkgdHJhbnNmZXIgYWxsIG9mIHlvdXIgcmlnaHRzCit1bmRlciB0aGlzIEVVTEEsIHByb3ZpZGVkIHRoZSByZWNpcGllbnQgYWdyZWVzIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEVVTEEuCisKK8K3CVRlcm1pbmF0aW9uLiBXaXRob3V0IHByZWp1ZGljZSB0byBhbnkgb3RoZXIgcmlnaHRzLCBNaWNyb3NvZnQgbWF5Cit0ZXJtaW5hdGUgdGhpcyBFVUxBIGlmIHlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgordGhpcyBFVUxBLiBJbiBzdWNoIGV2ZW50LCB5b3UgbXVzdCBkZXN0cm95IGFsbCBjb3BpZXMgb2YgdGhlIFNPRlRXQVJFCitQUk9EVUNUIGFuZCBhbGwgb2YgaXRzIGNvbXBvbmVudCBwYXJ0cy4KKworMy4gQ09QWVJJR0hULiBBbGwgdGl0bGUgYW5kIGNvcHlyaWdodHMgaW4gYW5kIHRvIHRoZSBTT0ZUV0FSRSBQUk9EVUNUCisoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBhbnkgaW1hZ2VzLCB0ZXh0LCBhbmQgImFwcGxldHMiIGluY29ycG9yYXRlZAoraW50byB0aGUgU09GVFdBUkUgUFJPRFVDVCksIHRoZSBhY2NvbXBhbnlpbmcgcHJpbnRlZCBtYXRlcmlhbHMsIGFuZCBhbnkKK2NvcGllcyBvZiB0aGUgU09GVFdBUkUgUFJPRFVDVCBhcmUgb3duZWQgYnkgTWljcm9zb2Z0IG9yIGl0cyBzdXBwbGllcnMuIFRoZQorU09GVFdBUkUgUFJPRFVDVCBpcyBwcm90ZWN0ZWQgYnkgY29weXJpZ2h0IGxhd3MgYW5kIGludGVybmF0aW9uYWwgdHJlYXR5Citwcm92aXNpb25zLiBUaGVyZWZvcmUsIHlvdSBtdXN0IHRyZWF0IHRoZSBTT0ZUV0FSRSBQUk9EVUNUIGxpa2UgYW55IG90aGVyCitjb3B5cmlnaHRlZCBtYXRlcmlhbC4KKworNC4JVS5TLiBHT1ZFUk5NRU5UIFJFU1RSSUNURUQgUklHSFRTLiBUaGUgU09GVFdBUkUgUFJPRFVDVCBhbmQKK2RvY3VtZW50YXRpb24gYXJlIHByb3ZpZGVkIHdpdGggUkVTVFJJQ1RFRCBSSUdIVFMuIFVzZSwgZHVwbGljYXRpb24sIG9yCitkaXNjbG9zdXJlIGJ5IHRoZSBHb3Zlcm5tZW50IGlzIHN1YmplY3QgdG8gcmVzdHJpY3Rpb25zIGFzIHNldCBmb3J0aCBpbgorc3VicGFyYWdyYXBoIChjKSgxKShpaSkgb2YgdGhlIFJpZ2h0cyBpbiBUZWNobmljYWwgRGF0YSBhbmQgQ29tcHV0ZXIKK1NvZnR3YXJlIGNsYXVzZSBhdCBERkFSUyAyNTIuMjI3LTcwMTMgb3Igc3VicGFyYWdyYXBocyAoYykoMSkgYW5kICgyKSBvZiB0aGUKK0NvbW1lcmNpYWwgQ29tcHV0ZXIgU29mdHdhcmUtUmVzdHJpY3RlZCBSaWdodHMgYXQgNDggQ0ZSIDUyLjIyNy0xOSwgYXMKK2FwcGxpY2FibGUuIE1hbnVmYWN0dXJlciBpcyBNaWNyb3NvZnQgQ29ycG9yYXRpb24vT25lIE1pY3Jvc29mdCBXYXkvUmVkbW9uZCwKK1dBIDk4MDUyLTYzOTkuCisKK0xJTUlURUQgV0FSUkFOVFkKKworTk8gV0FSUkFOVElFUy4gTWljcm9zb2Z0IGV4cHJlc3NseSBkaXNjbGFpbXMgYW55IHdhcnJhbnR5IGZvciB0aGUgU09GVFdBUkUKK1BST0RVQ1QuIFRoZSBTT0ZUV0FSRSBQUk9EVUNUIGFuZCBhbnkgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGlzIHByb3ZpZGVkICJhcworaXMiIHdpdGhvdXQgd2FycmFudHkgb2YgYW55IGtpbmQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQsIGluY2x1ZGluZywKK3dpdGhvdXQgbGltaXRhdGlvbiwgdGhlIGltcGxpZWQgd2FycmFudGllcyBvciBtZXJjaGFudGFiaWxpdHksIGZpdG5lc3MgZm9yIGEKK3BhcnRpY3VsYXIgcHVycG9zZSwgb3Igbm9uaW5mcmluZ2VtZW50LiBUaGUgZW50aXJlIHJpc2sgYXJpc2luZyBvdXQgb2YgdXNlCitvciBwZXJmb3JtYW5jZSBvZiB0aGUgU09GVFdBUkUgUFJPRFVDVCByZW1haW5zIHdpdGggeW91LgorCitOTyBMSUFCSUxJVFkgRk9SIENPTlNFUVVFTlRJQUwgREFNQUdFUy4gSW4gbm8gZXZlbnQgc2hhbGwgTWljcm9zb2Z0IG9yIGl0cworc3VwcGxpZXJzIGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciAoaW5jbHVkaW5nLCB3aXRob3V0CitsaW1pdGF0aW9uLCBkYW1hZ2VzIGZvciBsb3NzIG9mIGJ1c2luZXNzIHByb2ZpdHMsIGJ1c2luZXNzIGludGVycnVwdGlvbiwKK2xvc3Mgb2YgYnVzaW5lc3MgaW5mb3JtYXRpb24sIG9yIGFueSBvdGhlciBwZWN1bmlhcnkgbG9zcykgYXJpc2luZyBvdXQgb2YKK3RoZSB1c2Ugb2Ygb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGlzIE1pY3Jvc29mdCBwcm9kdWN0LCBldmVuIGlmIE1pY3Jvc29mdCBoYXMKK2JlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLiBCZWNhdXNlIHNvbWUKK3N0YXRlcy9qdXJpc2RpY3Rpb25zIGRvIG5vdCBhbGxvdyB0aGUgZXhjbHVzaW9uIG9yIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5Citmb3IgY29uc2VxdWVudGlhbCBvciBpbmNpZGVudGFsIGRhbWFnZXMsIHRoZSBhYm92ZSBsaW1pdGF0aW9uIG1heSBub3QgYXBwbHkKK3RvIHlvdS4KKworTUlTQ0VMTEFORU9VUyBJZiB5b3UgYWNxdWlyZWQgdGhpcyBwcm9kdWN0IGluIHRoZSBVbml0ZWQgU3RhdGVzLCB0aGlzIEVVTEEKK2lzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBXYXNoaW5ndG9uLiAgSWYgdGhpcyBwcm9kdWN0IHdhcworYWNxdWlyZWQgb3V0c2lkZSB0aGUgVW5pdGVkIFN0YXRlcywgdGhlbiBsb2NhbCBsYXdzIG1heSBhcHBseS4gIFNob3VsZCB5b3UKK2hhdmUgYW55IHF1ZXN0aW9ucyBjb25jZXJuaW5nIHRoaXMgRVVMQSwgb3IgaWYgeW91IGRlc2lyZSB0byBjb250YWN0CitNaWNyb3NvZnQgZm9yIGFueSByZWFzb24sIHBsZWFzZSBjb250YWN0IHRoZSBNaWNyb3NvZnQgc3Vic2lkaWFyeSBzZXJ2aW5nCit5b3VyIGNvdW50cnksIG9yIHdyaXRlOiBNaWNyb3NvZnQgU2FsZXMgSW5mb3JtYXRpb24gQ2VudGVyL09uZSBNaWNyb3NvZnQKK1dheS9SZWRtb25kLCBXQSA5ODA1Mi02Mzk5LgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvTWFnZW50YU1nT3BlbiBiL2xpY2Vuc2VzL01hZ2VudGFNZ09wZW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTdiZDYyOAotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL01hZ2VudGFNZ09wZW4KQEAgLTAsMCArMSwzNCBAQAorQ29weXJpZ2h0IMKpIDIwMDQgYnkgTUFHRU5UQSBMdGQuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkgb2YKK3RoZSBmb250cyBhY2NvbXBhbnlpbmcgdGhpcyBsaWNlbnNlICgiRm9udHMiKSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCitmaWxlcyAodGhlICJGb250IFNvZnR3YXJlIiksIHRvIHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSB0aGUgRm9udCBTb2Z0d2FyZSwKK2luY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1lcmdlLCBwdWJsaXNoLAorZGlzdHJpYnV0ZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBGb250IFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8KK3dob20gdGhlIEZvbnQgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKK2NvbmRpdGlvbnM6CisKK1RoZSBhYm92ZSBjb3B5cmlnaHQgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcworb2Ygb25lIG9yIG1vcmUgb2YgdGhlIEZvbnQgU29mdHdhcmUgdHlwZWZhY2VzLgorCitUaGUgRm9udCBTb2Z0d2FyZSBtYXkgYmUgbW9kaWZpZWQsIGFsdGVyZWQsIG9yIGFkZGVkIHRvLCBhbmQgaW4gcGFydGljdWxhciB0aGUKK2Rlc2lnbnMgb2YgZ2x5cGhzIG9yIGNoYXJhY3RlcnMgaW4gdGhlIEZvbnRzIG1heSBiZSBtb2RpZmllZCBhbmQgYWRkaXRpb25hbAorZ2x5cGhzIG9yIGNoYXJhY3RlcnMgbWF5IGJlIGFkZGVkIHRvIHRoZSBGb250cywgb25seSBpZiB0aGUgZm9udHMgYXJlIHJlbmFtZWQKK3RvIG5hbWVzIG5vdCBjb250YWluaW5nIHRoZSB3b3JkICJNZ09wZW4iLCBvciBpZiB0aGUgbW9kaWZpY2F0aW9ucyBhcmUgYWNjZXB0ZWQKK2ZvciBpbmNsdXNpb24gaW4gdGhlIEZvbnQgU29mdHdhcmUgaXRzZWxmIGJ5IHRoZSBlYWNoIGFwcG9pbnRlZCBBZG1pbmlzdHJhdG9yLgorCitUaGlzIExpY2Vuc2UgYmVjb21lcyBudWxsIGFuZCB2b2lkIHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSB0byBGb250cyBvciBGb250CitTb2Z0d2FyZSB0aGF0IGhhcyBiZWVuIG1vZGlmaWVkIGFuZCBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgIk1nT3BlbiIgbmFtZS4KKworVGhlIEZvbnQgU29mdHdhcmUgbWF5IGJlIHNvbGQgYXMgcGFydCBvZiBhIGxhcmdlciBzb2Z0d2FyZSBwYWNrYWdlIGJ1dCBubyBjb3B5CitvZiBvbmUgb3IgbW9yZSBvZiB0aGUgRm9udCBTb2Z0d2FyZSB0eXBlZmFjZXMgbWF5IGJlIHNvbGQgYnkgaXRzZWxmLgorCitUSEUgRk9OVCBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIEFOWSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQgT0YgQ09QWVJJR0hULCBQQVRFTlQsCitUUkFERU1BUkssIE9SIE9USEVSIFJJR0hULiBJTiBOTyBFVkVOVCBTSEFMTCBNQUdFTlRBIE9SIFBFUlNPTlMgT1IgQk9ESUVTIElOCitDSEFSR0UgT0YgQURNSU5JU1RSQVRJT04gQU5EIE1BSU5URU5BTkNFIE9GIFRIRSBGT05UIFNPRlRXQVJFIEJFIExJQUJMRSBGT1IgQU5ZCitDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SCitPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgRk9OVCBTT0ZUV0FSRQorT1IgRlJPTSBPVEhFUiBERUFMSU5HUyBJTiBUSEUgRk9OVCBTT0ZUV0FSRS4gCmRpZmYgLS1naXQgYS9saWNlbnNlcy9NYWdpY2tXYW5kIGIvbGljZW5zZXMvTWFnaWNrV2FuZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDBiNzE1Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvTWFnaWNrV2FuZApAQCAtMCwwICsxLDQ5IEBACitDb3B5cmlnaHQgMTk5OS0yMDA3IEltYWdlTWFnaWNrIFN0dWRpbyBMTEMsIGEgbm9uLXByb2ZpdCBvcmdhbml6YXRpb24gZGVkaWNhdGVkIHRvIG1ha2luZyBzb2Z0d2FyZSBpbWFnaW5nIHNvbHV0aW9ucyBmcmVlbHkgYXZhaWxhYmxlLgorCisxLiBEZWZpbml0aW9ucy4KKworIkxpY2Vuc2UiIHNoYWxsIG1lYW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCisgIAorIkxpY2Vuc29yIiBzaGFsbCBtZWFuIHRoZSBjb3B5cmlnaHQgb3duZXIgb3IgZW50aXR5IGF1dGhvcml6ZWQgYnkgdGhlIGNvcHlyaWdodCBvd25lciB0aGF0IGlzIGdyYW50aW5nIHRoZSBMaWNlbnNlLgorICAKKyJMZWdhbCBFbnRpdHkiIHNoYWxsIG1lYW4gdGhlIHVuaW9uIG9mIHRoZSBhY3RpbmcgZW50aXR5IGFuZCBhbGwgb3RoZXIgZW50aXRpZXMgdGhhdCBjb250cm9sLCBhcmUgY29udHJvbGxlZCBieSwgb3IgYXJlIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggdGhhdCBlbnRpdHkuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGkpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoaWkpIG93bmVyc2hpcCBvZiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCisgIAorIllvdSIgKG9yICJZb3VyIikgc2hhbGwgbWVhbiBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBleGVyY2lzaW5nIHBlcm1pc3Npb25zIGdyYW50ZWQgYnkgdGhpcyBMaWNlbnNlLgorICAKKyJTb3VyY2UiIGZvcm0gc2hhbGwgbWVhbiB0aGUgcHJlZmVycmVkIGZvcm0gZm9yIG1ha2luZyBtb2RpZmljYXRpb25zLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHNvZnR3YXJlIHNvdXJjZSBjb2RlLCBkb2N1bWVudGF0aW9uIHNvdXJjZSwgYW5kIGNvbmZpZ3VyYXRpb24gZmlsZXMuCisgIAorIk9iamVjdCIgZm9ybSBzaGFsbCBtZWFuIGFueSBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBjb21waWxlZCBvYmplY3QgY29kZSwgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24sIGFuZCBjb252ZXJzaW9ucyB0byBvdGhlciBtZWRpYSB0eXBlcy4KKyAgCisiV29yayIgc2hhbGwgbWVhbiB0aGUgd29yayBvZiBhdXRob3JzaGlwLCB3aGV0aGVyIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIExpY2Vuc2UsIGFzIGluZGljYXRlZCBieSBhIGNvcHlyaWdodCBub3RpY2UgdGhhdCBpcyBpbmNsdWRlZCBpbiBvciBhdHRhY2hlZCB0byB0aGUgd29yayAoYW4gZXhhbXBsZSBpcyBwcm92aWRlZCBpbiB0aGUgQXBwZW5kaXggYmVsb3cpLgorICAKKyJEZXJpdmF0aXZlIFdvcmtzIiBzaGFsbCBtZWFuIGFueSB3b3JrLCB3aGV0aGVyIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgdGhhdCBpcyBiYXNlZCBvbiAob3IgZGVyaXZlZCBmcm9tKSB0aGUgV29yayBhbmQgZm9yIHdoaWNoIHRoZSBlZGl0b3JpYWwgcmV2aXNpb25zLCBhbm5vdGF0aW9ucywgZWxhYm9yYXRpb25zLCBvciBvdGhlciBtb2RpZmljYXRpb25zIHJlcHJlc2VudCwgYXMgYSB3aG9sZSwgYW4gb3JpZ2luYWwgd29yayBvZiBhdXRob3JzaGlwLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgTGljZW5zZSwgRGVyaXZhdGl2ZSBXb3JrcyBzaGFsbCBub3QgaW5jbHVkZSB3b3JrcyB0aGF0IHJlbWFpbiBzZXBhcmFibGUgZnJvbSwgb3IgbWVyZWx5IGxpbmsgKG9yIGJpbmQgYnkgbmFtZSkgdG8gdGhlIGludGVyZmFjZXMgb2YsIHRoZSBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YuCisgIAorIkNvbnRyaWJ1dGlvbiIgc2hhbGwgbWVhbiBhbnkgd29yayBvZiBhdXRob3JzaGlwLCBpbmNsdWRpbmcgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucyB0byB0aGF0IFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCB0aGF0IGlzIGludGVudGlvbmFsbHkgc3VibWl0dGVkIHRvIExpY2Vuc29yIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgdGhlIGNvcHlyaWdodCBvd25lciBvciBieSBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2YgdGhlIGNvcHlyaWdodCBvd25lci4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJzdWJtaXR0ZWQiIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIGludGVudGlvbmFsbHkgc2VudCB0byB0aGUgTGljZW5zb3IgYnkgaXRzIGNvcHlyaWdodCBob2xkZXIgb3IgaXRzIHJlcHJlc2VudGF0aXZlcywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBjb21tdW5pY2F0aW9uIG9uIGVsZWN0cm9uaWMgbWFpbGluZyBsaXN0cywgc291cmNlIGNvZGUgY29udHJvbCBzeXN0ZW1zLCBhbmQgaXNzdWUgdHJhY2tpbmcgc3lzdGVtcyB0aGF0IGFyZSBtYW5hZ2VkIGJ5LCBvciBvbiBiZWhhbGYgb2YsIHRoZSBMaWNlbnNvciBmb3IgdGhlIHB1cnBvc2Ugb2YgZGlzY3Vzc2luZyBhbmQgaW1wcm92aW5nIHRoZSBXb3JrLCBidXQgZXhjbHVkaW5nIGNvbW11bmljYXRpb24gdGhhdCBpcyBjb25zcGljdW91c2x5IG1hcmtlZCBvciBvdGhlcndpc2UgZGVzaWduYXRlZCBpbiB3cml0aW5nIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIgYXMgIk5vdCBhIENvbnRyaWJ1dGlvbi4iCisgIAorIkNvbnRyaWJ1dG9yIiBzaGFsbCBtZWFuIExpY2Vuc29yIGFuZCBhbnkgaW5kaXZpZHVhbCBvciBMZWdhbCBFbnRpdHkgb24gYmVoYWxmIG9mIHdob20gYSBDb250cmlidXRpb24gaGFzIGJlZW4gcmVjZWl2ZWQgYnkgTGljZW5zb3IgYW5kIHN1YnNlcXVlbnRseSBpbmNvcnBvcmF0ZWQgd2l0aGluIHRoZSBXb3JrLgorCisyLiBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSBjb3B5cmlnaHQgbGljZW5zZSB0byByZXByb2R1Y2UsIHByZXBhcmUgRGVyaXZhdGl2ZSBXb3JrcyBvZiwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgc3VibGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFdvcmsgYW5kIHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0uCisKKzMuIEdyYW50IG9mIFBhdGVudCBMaWNlbnNlLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyB0byBZb3UgYSBwZXJwZXR1YWwsIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm8tY2hhcmdlLCByb3lhbHR5LWZyZWUsIGlycmV2b2NhYmxlIHBhdGVudCBsaWNlbnNlIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBvZmZlciB0byBzZWxsLCBzZWxsLCBpbXBvcnQsIGFuZCBvdGhlcndpc2UgdHJhbnNmZXIgdGhlIFdvcmssIHdoZXJlIHN1Y2ggbGljZW5zZSBhcHBsaWVzIG9ubHkgdG8gdGhvc2UgcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IHN1Y2ggQ29udHJpYnV0b3IgdGhhdCBhcmUgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZWlyIENvbnRyaWJ1dGlvbihzKSBhbG9uZSBvciBieSBjb21iaW5hdGlvbiBvZiB0aGVpciBDb250cmlidXRpb24ocykgd2l0aCB0aGUgV29yayB0byB3aGljaCBzdWNoIENvbnRyaWJ1dGlvbihzKSB3YXMgc3VibWl0dGVkLgorCis0LiBSZWRpc3RyaWJ1dGlvbi4gWW91IG1heSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYW5kIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgcHJvdmlkZWQgdGhhdCBZb3UgbWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgICAgYS4gWW91IG11c3QgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIGEgY29weSBvZiB0aGlzIExpY2Vuc2U7IGFuZAorCisgICAgIGIuIFlvdSBtdXN0IGNhdXNlIGFueSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgWW91IGNoYW5nZWQgdGhlIGZpbGVzOyBhbmQKKworICAgICBjLiBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgZm9ybSBvZiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQsIHRyYWRlbWFyaywgYW5kIGF0dHJpYnV0aW9uIG5vdGljZXMgZnJvbSB0aGUgU291cmNlIGZvcm0gb2YgdGhlIFdvcmssIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3M7IGFuZAorCisgICAgIGQuIElmIHRoZSBXb3JrIGluY2x1ZGVzIGEgIk5PVElDRSIgdGV4dCBmaWxlIGFzIHBhcnQgb2YgaXRzIGRpc3RyaWJ1dGlvbiwgdGhlbiBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIG11c3QgaW5jbHVkZSBhIHJlYWRhYmxlIGNvcHkgb2YgdGhlIGF0dHJpYnV0aW9uIG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiBzdWNoIE5PVElDRSBmaWxlLCBleGNsdWRpbmcgdGhvc2Ugbm90aWNlcyB0aGF0IGRvIG5vdCBwZXJ0YWluIHRvIGFueSBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzLCBpbiBhdCBsZWFzdCBvbmUgb2YgdGhlIGZvbGxvd2luZyBwbGFjZXM6IHdpdGhpbiBhIE5PVElDRSB0ZXh0IGZpbGUgZGlzdHJpYnV0ZWQgYXMgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3Jrczsgd2l0aGluIHRoZSBTb3VyY2UgZm9ybSBvciBkb2N1bWVudGF0aW9uLCBpZiBwcm92aWRlZCBhbG9uZyB3aXRoIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyBvciwgd2l0aGluIGEgZGlzcGxheSBnZW5lcmF0ZWQgYnkgdGhlIERlcml2YXRpdmUgV29ya3MsIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IG5vdGljZXMgbm9ybWFsbHkgYXBwZWFyLiBUaGUgY29udGVudHMgb2YgdGhlIE5PVElDRSBmaWxlIGFyZSBmb3IgaW5mb3JtYXRpb25hbCBwdXJwb3NlcyBvbmx5IGFuZCBkbyBub3QgbW9kaWZ5IHRoZSBMaWNlbnNlLiBZb3UgbWF5IGFkZCBZb3VyIG93biBhdHRyaWJ1dGlvbiBub3RpY2VzIHdpdGhpbiBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsb25nc2lkZSBvciBhcyBhbiBhZGRlbmR1bSB0byB0aGUgTk9USUNFIHRleHQgZnJvbSB0aGUgV29yaywgcHJvdmlkZWQgdGhhdCBzdWNoIGFkZGl0aW9uYWwgYXR0cmlidXRpb24gbm90aWNlcyBjYW5ub3QgYmUgY29uc3RydWVkIGFzIG1vZGlmeWluZyB0aGUgTGljZW5zZS4KKworWW91IG1heSBhZGQgWW91ciBvd24gY29weXJpZ2h0IHN0YXRlbWVudCB0byBZb3VyIG1vZGlmaWNhdGlvbnMgYW5kIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvciBmb3IgYW55IHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBhcyBhIHdob2xlLCBwcm92aWRlZCBZb3VyIHVzZSwgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCisKKzUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwgYW55IENvbnRyaWJ1dGlvbiBpbnRlbnRpb25hbGx5IHN1Ym1pdHRlZCBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IFlvdSB0byB0aGUgTGljZW5zb3Igc2hhbGwgYmUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBub3RoaW5nIGhlcmVpbiBzaGFsbCBzdXBlcnNlZGUgb3IgbW9kaWZ5IHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IG1heSBoYXZlIGV4ZWN1dGVkIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KKworNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgb3IgcHJvZHVjdCBuYW1lcyBvZiB0aGUgTGljZW5zb3IsIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZSBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KKworNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBMaWNlbnNvciBwcm92aWRlcyB0aGUgV29yayAoYW5kIGVhY2ggQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgYW55IHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyBvZiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGRldGVybWluaW5nIHRoZSBhcHByb3ByaWF0ZW5lc3Mgb2YgdXNpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgYW5kIGFzc3VtZSBhbnkgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgZXhlcmNpc2Ugb2YgcGVybWlzc2lvbnMgdW5kZXIgdGhpcyBMaWNlbnNlLgorCis4LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gSW4gbm8gZXZlbnQgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsIHVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyAoc3VjaCBhcyBkZWxpYmVyYXRlIGFuZCBncm9zc2x5IG5lZ2xpZ2VudCBhY3RzKSBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc2hhbGwgYW55IENvbnRyaWJ1dG9yIGJlIGxpYWJsZSB0byBZb3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBjaGFyYWN0ZXIgYXJpc2luZyBhcyBhIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3Igb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUgV29yayAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLCB3b3JrIHN0b3BwYWdlLCBjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbCBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IgbG9zc2VzKSwgZXZlbiBpZiBzdWNoIENvbnRyaWJ1dG9yIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4KKworOS4gQWNjZXB0aW5nIFdhcnJhbnR5IG9yIEFkZGl0aW9uYWwgTGlhYmlsaXR5LiBXaGlsZSByZWRpc3RyaWJ1dGluZyB0aGUgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoZXJlb2YsIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgY2hhcmdlIGEgZmVlIGZvciwgYWNjZXB0YW5jZSBvZiBzdXBwb3J0LCB3YXJyYW50eSwgaW5kZW1uaXR5LCBvciBvdGhlciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgYW5kL29yIHJpZ2h0cyBjb25zaXN0ZW50IHdpdGggdGhpcyBMaWNlbnNlLiBIb3dldmVyLCBpbiBhY2NlcHRpbmcgc3VjaCBvYmxpZ2F0aW9ucywgWW91IG1heSBhY3Qgb25seSBvbiBZb3VyIG93biBiZWhhbGYgYW5kIG9uIFlvdXIgc29sZSByZXNwb25zaWJpbGl0eSwgbm90IG9uIGJlaGFsZiBvZiBhbnkgb3RoZXIgQ29udHJpYnV0b3IsIGFuZCBvbmx5IGlmIFlvdSBhZ3JlZSB0byBpbmRlbW5pZnksIGRlZmVuZCwgYW5kIGhvbGQgZWFjaCBDb250cmlidXRvciBoYXJtbGVzcyBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSwgb3IgY2xhaW1zIGFzc2VydGVkIGFnYWluc3QsIHN1Y2ggQ29udHJpYnV0b3IgYnkgcmVhc29uIG9mIHlvdXIgYWNjZXB0aW5nIGFueSBzdWNoIHdhcnJhbnR5IG9yIGFkZGl0aW9uYWwgbGlhYmlsaXR5LgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvTWFpbC1TZW5kZXIgYi9saWNlbnNlcy9NYWlsLVNlbmRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44N2NkZDI2Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvTWFpbC1TZW5kZXIKQEAgLTAsMCArMSw0IEBACitDb3B5cmlnaHQgKGMpIDE5OTctMjAwMyBKYW4gS3J5bmlja3kgPEplbmRhQEtyeW5pY2t5LmN6Pi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KK1RoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0IHVuZGVyCit0aGUgc2FtZSB0ZXJtcyBhcyBQZXJsIGl0c2VsZiB3aXRoIG9ubHkgb25lIGV4Y2VwdGlvbiwgeW91IGFyZSBub3QgYWxsb3dlZAordG8gdXNlIHRoZSBtb2R1bGUgZm9yIFNQQU0uCmRpZmYgLS1naXQgYS9saWNlbnNlcy9NYWtlSW5kZXggYi9saWNlbnNlcy9NYWtlSW5kZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBjMDM1NQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL01ha2VJbmRleApAQCAtMCwwICsxLDQyIEBACisKKwkJCU1ha2VJbmRleCBEaXN0cmlidXRpb24gTm90aWNlCisKKwkJCQkxMS8xMS8xOTg5CisKKwlDb3B5cmlnaHQgKEMpIDE5ODkgYnkgQ2hlbiAmIEhhcnJpc29uIEludGVybmF0aW9uYWwgU3lzdGVtcywgSW5jLiAgCisJQ29weXJpZ2h0IChDKSAxOTg4IGJ5IE9saXZldHRpIFJlc2VhcmNoIENlbnRlcgorCUNvcHlyaWdodCAoQykgMTk4NyBieSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKworCUF1dGhvcjoJCisJICAJUGVob25nIENoZW4gKHBoY0ByZW5vaXIuYmVya2VsZXkuZWR1KQorCQlDaGVuICYgSGFycmlzb24gSW50ZXJuYXRpb25hbCBTeXN0ZW1zLCBJbmMuCisJCVBhbG8gQWx0bywgQ2FsaWZvcm5pYQorCSAgCVVTQQorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIG1ha2UgYW5kIGRpc3RyaWJ1dGUgb3JpZ2luYWwgY29waWVzIG9mCit0aGlzIHByb2dyYW0gcHJvdmlkZWQgdGhhdCB0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uCitub3RpY2UgYXJlIHByZXNlcnZlZCBhbmQgcHJvdmlkZWQgdGhhdCB0aGUgcmVjaXBpZW50IGlzIG5vdCBhc2tlZCB0bword2FpdmUgb3IgbGltaXQgaGlzIHJpZ2h0IHRvIHJlZGlzdHJpYnV0ZSBjb3BpZXMgYXMgYWxsb3dlZCBieSB0aGlzCitwZXJtaXNzaW9uIG5vdGljZSBhbmQgcHJvdmlkZWQgdGhhdCBhbnlvbmUgd2hvIHJlY2VpdmVzIGFuIGV4ZWN1dGFibGUKK2Zvcm0gb2YgdGhpcyBwcm9ncmFtIGlzIGdyYW50ZWQgYWNjZXNzIHRvIGEgbWFjaGluZS1yZWFkYWJsZSBmb3JtIG9mCit0aGUgc291cmNlIGNvZGUgZm9yIHRoaXMgcHJvZ3JhbSBhdCBhIGNvc3Qgbm90IGdyZWF0ZXIgdGhhbiByZWFzb25hYmxlCityZXByb2R1Y3Rpb24sIHNoaXBwaW5nLCBhbmQgaGFuZGxpbmcgY29zdHMuICBFeGVjdXRhYmxlIGZvcm1zIG9mIHRoaXMKK3Byb2dyYW0gZGlzdHJpYnV0ZWQgd2l0aG91dCB0aGUgc291cmNlIGNvZGUgbXVzdCBiZSBhY2NvbXBhbmllZCBieSBhCitjb25zcGljdW91cyBjb3B5IG9mIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYW5kIGEgc3RhdGVtZW50IHRoYXQgdGVsbHMKK3RoZSByZWNpcGllbnQgaG93IHRvIG9idGFpbiB0aGUgc291cmNlIGNvZGUuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGRpc3RyaWJ1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgYWxsIG9yIHBhcnQKK29mIHRoaXMgcHJvZ3JhbSB1bmRlciB0aGUgY29uZGl0aW9ucyBhYm92ZSB3aXRoIHRoZSBhZGRpdGlvbmFsCityZXF1aXJlbWVudCB0aGF0IHRoZSBlbnRpcmUgbW9kaWZpZWQgd29yayBtdXN0IGJlIGNvdmVyZWQgYnkgYQorcGVybWlzc2lvbiBub3RpY2UgaWRlbnRpY2FsIHRvIHRoaXMgcGVybWlzc2lvbiBub3RpY2UuICBBbnl0aGluZworZGlzdHJpYnV0ZWQgd2l0aCBhbmQgdXNhYmxlIG9ubHkgaW4gY29uanVuY3Rpb24gd2l0aCBzb21ldGhpbmcgZGVyaXZlZAorZnJvbSB0aGlzIHByb2dyYW0sIHdob3NlIHVzZWZ1bCBwdXJwb3NlIGlzIHRvIGV4dGVuZCBvciBhZGFwdCBvciBhZGQKK2NhcGFiaWxpdGllcyB0byB0aGlzIHByb2dyYW0sIGlzIHRvIGJlIGNvbnNpZGVyZWQgYSBtb2RpZmllZCB2ZXJzaW9uCitvZiB0aGlzIHByb2dyYW0gdW5kZXIgdGhlIHJlcXVpcmVtZW50IGFib3ZlLiAgUG9ydHMgb2YgdGhpcyBwcm9ncmFtIHRvCitvdGhlciBzeXN0ZW1zIG5vdCBzdXBwb3J0ZWQgaW4gdGhlIGRpc3RyaWJ1dGlvbiBhcmUgYWxzbyBjb25zaWRlcmVkCittb2RpZmllZCB2ZXJzaW9ucy4gIEFsbCBtb2RpZmllZCB2ZXJzaW9ucyBzaG91bGQgYmUgcmVwb3J0ZWQgYmFjayB0bwordGhlIGF1dGhvci4KKworVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIHdpdGggbm8gd2FycmFudHkgb2YgYW55IHNvcnQuICBObworY29udHJpYnV0b3IgYWNjZXB0cyByZXNwb25zaWJpbGl0eSBmb3IgdGhlIGNvbnNlcXVlbmNlcyBvZiB1c2luZyB0aGlzCitwcm9ncmFtIG9yIGZvciB3aGV0aGVyIGl0IHNlcnZlcyBhbnkgcGFydGljdWxhciBwdXJwb3NlLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvTWFrZU1LVi1FVUxBIGIvbGljZW5zZXMvTWFrZU1LVi1FVUxBCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkxYTM3MTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9NYWtlTUtWLUVVTEEKQEAgLTAsMCArMSw3MiBAQAorQ29weXJpZ2h0IChDKSAyMDA3LTIwMTIgR3VpbnBpblNvZnQgaW5jCisKK0lNUE9SVEFOVCBOT1RFCisKK1RoZSBTb2Z0d2FyZSwgYXMgZGVmaW5lZCBiZWxvdywgaXMgcHJvdGVjdGVkIGJ5IGNvcHlyaWdodCwgd2hpY2ggaXMgdmVzdGVkIGluIEd1aW5waW5Tb2Z0IGluYy4KKworVGhlIFNvZnR3YXJlIG1heSBvbmx5IGJlIHVzZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBzZXQgb3V0IGluIHRoaXMgZG9jdW1lbnQuCisKK0lmIHlvdSBkbyBub3QgcmVhZCBhbmQgYWdyZWUgdG8gYmUgYm91bmQgYnkgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGRlZmluZWQgaW4gdGhpcyBkb2N1bWVudCwgeW91IGFyZSBub3QgcGVybWl0dGVkIHRvIGtlZXAgb3IgdXNlIHRoZSBTb2Z0d2FyZSBpbiBhbnkgd2F5IHdoYXRzb2V2ZXIgYW5kIG11c3QgZGVzdHJveSBvciByZXR1cm4gYWxsIGNvcGllcyBvZiB0aGVzZSBpdGVtcyB3aGljaCBhcmUgaW4geW91ciBwb3NzZXNzaW9uLgorCisKK0VORCBVU0VSIExJQ0VOU0UgQUdSRUVNRU5UCisKK0RFRklOSVRJT05TCisKK1RoZSBmb2xsb3dpbmcgZGVmaW5pdGlvbnMgYXBwbHkgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGluY2x1ZGVkIGluIHRoaXMgQWdyZWVtZW50LgorCitNYWtlTUtWCittZWFucyBhIGNvbXB1dGVyIHByb2dyYW0sIGRldmVsb3BlZCBieSBHdWlucGluU29mdCBpbmMsIGZvciBjb252ZXJ0aW5nIGF1ZGlvL3ZpZGVvIGNsaXBzIGJldHdlZW4gZGlmZmVyZW50IGZvcm1hdHMuCisKK09wZW4tc291cmNlIFNvZnR3YXJlCittZWFucyBjZXJ0YWluIGZpbGVzIGluY2x1ZGVkIGludG8gTWFrZU1LViBzb2Z0d2FyZSBwYWNrYWdlIHRoYXQgYXJlIGxpY2Vuc2VkIHVuZGVyIHZhcmlvdXMgb3Blbi1zb3VyY2UgbGljZW5zZXMuIFRoZSBmdWxsIGxpc3Qgb2Ygc3VjaCBmaWxlcyBpcyBzcGVjaWZpZWQgaW4gQXBwZW5kaXggQS4gVGhlIGZ1bGwgdGV4dCBvZiBjb3JyZXNwb25kaW5nIG9wZW4tc291cmNlIGxpY2Vuc2VzIGNhbiBiZSBmb3VuZCBpbiBBcHBlbmRpeCBCLgorCitTb2Z0d2FyZQorbWVhbnMgTWFrZU1LViwgYWxsIHByb2dyYW0gYW5kIGluZm9ybWF0aW9uIGZpbGVzIGFuZCBvdGhlciBkb2N1bWVudGF0aW9uIHdoaWNoIGFyZSBwYXJ0IG9mIHRoZSBNYWtlTUtWIFNvZnR3YXJlIHBhY2thZ2UgYnV0IGV4Y2x1ZGluZyBPcGVuLXNvdXJjZSBTb2Z0d2FyZS4KKworSW5kaXZpZHVhbAorbWVhbnMgYSBwYXJ0aWN1bGFyIHBlcnNvbi4KKworCitURVJNUyBPRiBBR1JFRU1FTlQKKworVGhpcyBpcyBhIGxlZ2FsIGFncmVlbWVudCBiZXR3ZWVuIHlvdSwgdGhlIHVzZXJzLCBhbmQgR3VpbnBpblNvZnQgaW5jLiBCeSBpbnN0YWxsaW5nIG9yIHVzaW5nIHRoaXMgU29mdHdhcmUsIHlvdSBhZ3JlZSB0byBiZSBib3VuZCBieSB0aGUgdGVybXMgb2YgdGhpcyBhZ3JlZW1lbnQuIElmIHlvdSBkbyBub3QgYWdyZWUgdG8gdGhlc2UgdGVybXMsIHlvdSBtYXkgbm90IHVzZSBvciBpbnN0YWxsIHRoZSBTb2Z0d2FyZS4KKworWW91IGFyZSBlbnRpdGxlZCB0byB1c2UgdGhlIFNvZnR3YXJlIG9uIGFsbCBwZXJzb25hbCBjb21wdXRlcnMgKGxhcHRvcHMvZGVza3RvcHMpLiAiVXNlIiBtZWFucyBsb2FkZWQgaW4gdGVtcG9yYXJ5IG1lbW9yeSBvciBwZXJtYW5lbnQgc3RvcmFnZSBvbiB0aGUgY29tcHV0ZXIuCisKK1lvdSBtYXkgbm90IHVzZSB0aGUgU29mdHdhcmUgZm9yIGFueSB1bmxhd2Z1bCBhY3Rpdml0eS4gU3BlY2lmaWNhbGx5LCB5b3UgbWF5IG5vdCB1c2UgdGhlIFNvZnR3YXJlIHRvIGNvbW1pdCBjb3B5cmlnaHQgaW5mcmluZ2VtZW50LCB5b3UgbWF5IG9ubHkgdXNlIHRoZSBTb2Z0d2FyZSB0byBtYWtlIGNvcGllcyBvZiB3b3JrcyB3aGVyZSB5b3UgZWl0aGVyIGhvbGQgdGhlIGNvcHlyaWdodCBvciBoYXZlIG9idGFpbmVkIHBlcm1pc3Npb24gdG8gY29weSBmcm9tIHRoZSBjb3B5cmlnaHQgb3duZXIgb3Igd2hlcmUgeW91IGFsbG93ZWQgdG8gbWFrZSBhIGNvcHkgYnkgYXBwbGljYWJsZSBsYXcuIElmIHlvdSB2aW9sYXRlIHRoZSBsYXcgeW91IG1heSBiZSBzdWJqZWN0IHRvIGNsYWltcyBmb3IgZGFtYWdlcyBhbmQvb3IgY3JpbWluYWwgcGVuYWx0aWVzLgorCitUaGUgU29mdHdhcmUgY29udGFpbnMgY3J5cHRvZ3JhcGhpYyBmdW5jdGlvbmFsaXR5LiBUaGUgdXNlIG9mIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd2l0aG91dCBhIHBlcm1pdCBtYXkgYmUgaWxsZWdhbCBpbiBzb21lIGp1cmlzZGljdGlvbnMuIEJ5IHRoZSBuYXR1cmUgb2YgYXVkaW8vdmlkZW8gZm9ybWF0IGNvbnZlcnNpb24gdGhlIFNvZnR3YXJlIG1heSBieXBhc3MgY2VydGFpbiBjb3B5IHByb3RlY3Rpb24gbWVjaGFuaXNtcyB0byBhY2Nlc3MgYXVkaW8vdmlkZW8gZGF0YS4gWW91LCB0aGUgdXNlciwgbXVzdCBjaGVjayB5b3VyIGxvY2FsIGxhd3MgYW5kIHJlZ3VsYXRpb25zIGJlZm9yZSB1c2luZyB0aGUgU29mdHdhcmUgdG8gZW5zdXJlIHRoYXQgYm90aCBhY3Rpdml0aWVzIGFyZSBhbGxvd2VkIGluIHlvdXIganVyaXNkaWN0aW9uLgorCitZb3UgbWF5IG5vdCBzZWxsLCByZW50LCBsZWFzZSBvciBzdWJsaWNlbnNlIHRoZSBTb2Z0d2FyZSwgd2l0aG91dCB0aGUgZXhwbGljaXQgd3JpdHRlbiBjb25zZW50IG9mIEd1aW5waW5Tb2Z0IGluYy4KKworVGhlIFNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBjb3B5cmlnaHQgbGF3cyBhbmQgaW50ZXJuYXRpb25hbCB0cmVhdGllcy4KKworQWxsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgc3VjaCBhcyBidXQgbm90IGxpbWl0ZWQgdG8gcGF0ZW50cywgdHJhZGVtYXJrcywgY29weXJpZ2h0cyBvciB0cmFkZSBzZWNyZXQgcmlnaHRzIHJlbGF0ZWQgdG8gdGhlIFNvZnR3YXJlIGFyZSB0aGUgcHJvcGVydHkgb2YgYW5kIHJlbWFpbnMgdmVzdGVkIGluIEd1aW5waW5Tb2Z0IGluYy4KKworWW91IHNoYWxsIG5vdCBtb2RpZnksIHRyYW5zbGF0ZSwgcmV2ZXJzZSBlbmdpbmVlciwgZGVjb21waWxlIG9yIGRpc2Fzc2VtYmxlIHRoZSBTb2Z0d2FyZSBvciBhbnkgcGFydCB0aGVyZW9mIG9yIG90aGVyd2lzZSBhdHRlbXB0IHRvIGRlcml2ZSBzb3VyY2UgY29kZSwgY3JlYXRlIG9yIHVzZSBkZXJpdmF0aXZlIHdvcmtzIHRoZXJlZnJvbS4KKworWW91IGFyZSBub3QgYWxsb3dlZCB0byByZW1vdmUsIGFsdGVyIG9yIGRlc3Ryb3kgYW55IHByb3ByaWV0YXJ5LCB0cmFkZW1hcmsgb3IgY29weXJpZ2h0IG1hcmtpbmdzIG9yIG5vdGljZXMgcGxhY2VkIHVwb24gb3IgY29udGFpbmVkIHdpdGggdGhlIFNvZnR3YXJlLgorCitZb3UgYXJlIGFsbG93ZWQgdG8gcmVkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBpbiBpdCBvcmlnaW5hbCB1bm1vZGlmaWVkIGZvcm0uIEluIGFkZGl0aW9uLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IGV4dHJhY3QgYW5kIHJlcGFja2FnZSBMaW51eC1zcGVjaWZpYyBwYXJ0IG9mIHRoZSBTb2Z0d2FyZSBmb3IgdGhlIHB1cnBvc2Ugb2YgY3JlYXRpbmcgYSBkaXN0cmlidXRpb24tc3BlY2lmaWMgcGFja2FnZSwgYXMgbG9uZyBhcyBwcm9ncmFtIGZpbGVzIGFuZCB0aGlzIGxpY2Vuc2UgcmVtYWluIHVuY2hhbmdlZC4KKworCitZT1UgRVhQUkVTU0xZIEFDS05PV0xFREdFIEFORCBBR1JFRSBUSEFUIFVTRSBPRiBUSEUgU09GVFdBUkUgSVMgQVQgWU9VUiBPV04gUklTSyBBTkQgVEhBVCBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBXSVRIT1VUIEFOWSBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgV0hBVFNPRVZFUi4gR1VJTlBJTlNPRlQgSU5DIERPRVMgTk9UIFdBUlJBTlQgVEhBVCBUSEUgRlVOQ1RJT05TIE9GIFRIRSBTT0ZUV0FSRSBXSUxMIE1FRVQgWU9VUiBSRVFVSVJFTUVOVFMgT1IgVEhBVCBUSEUgT1BFUkFUSU9OIE9GIFRIRSBTT0ZUV0FSRSBXSUxMIEJFIFVOSU5URVJSVVBURUQgT1IgRVJST1IgRlJFRS4gWU9VIEFTU1VNRSBSRVNQT05TSUJJTElUWSBGT1IgU0VMRUNUSU5HIFRIRSBTT0ZUV0FSRSBUTyBBQ0hJRVZFIFlPVVIgSU5URU5ERUQgUkVTVUxUUywgQU5EIEZPUiBUSEUgVVNFIEFORCBUSEUgUkVTVUxUUyBPQlRBSU5FRCBGUk9NIFRIRSBTT0ZUV0FSRS4KKworR1VJTlBJTlNPRlQgSU5DIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUywgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFdBUlJBTlRJRVMgUkVMQVRFRCBUTzogTk9OLUlORlJJTkdFTUVOVCwgTEFDSyBPRiBWSVJVU0VTLCBBQ0NVUkFDWSBPUiBDT01QTEVURU5FU1MgT0YgUkVTUE9OU0VTIE9SIFJFU1VMVFMsIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCitJTiBOTyBFVkVOVCBTSEFMTCBHVUlOUElOU09GVCBJTkMgQkUgTElBQkxFIEZPUiBBTlkgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEZPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIERBTUFHRVMgRk9SIExPU1MgT0YgQlVTSU5FU1MgUFJPRklUUywgQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBMT1NTIE9GIEJVU0lORVNTIElORk9STUFUSU9OLCBQRVJTT05BTCBJTkpVUlksIExPU1MgT0YgUFJJVkFDWSBPUiBPVEhFUiBQRUNVTklBUlkgT1IgT1RIRVIgTE9TUyBXSEFUU09FVkVSKSBBUklTSU5HIE9VVCBPRiBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCitSRUdBUkRMRVNTIE9GIFRIRSBGT1JNIE9GIEFDVElPTiwgR1VJTlBJTlNPRlQgSU5DIEFHR1JFR0FURSBMSUFCSUxJVFkgQVJJU0lORyBPVVQgT0YgT1IgUkVMQVRFRCBUTyBUSElTIEFHUkVFTUVOVCBTSEFMTCBOT1QgRVhDRUVEIFRIRSBUT1RBTCBBTU9VTlQgUEFZQUJMRSBCWSBZT1UgVU5ERVIgVEhJUyBBR1JFRU1FTlQuICBUSEUgRk9SRUdPSU5HIExJTUlUQVRJT05TLCBFWENMVVNJT05TIEFORCBESVNDTEFJTUVSUyBTSEFMTCBBUFBMWSBUTyBUSEUgTUFYSU1VTSBFWFRFTlQgQUxMT1dFRCBCWSBBUFBMSUNBQkxFIExBVy4KKworVGhlIFNvZnR3YXJlIG1heSBiZSBzdWJqZWN0IHRvIGV4cG9ydCBvciBpbXBvcnQgcmVndWxhdGlvbnMsIGFuZCB0aGUgdXNlciBhZ3JlZXMgdG8gY29tcGx5IHN0cmljdGx5IHdpdGggYWxsIHN1Y2ggbGF3cyBhbmQgcmVndWxhdGlvbnMuIFRoZSB1c2VyIGFncmVlcyBub3QgdG8gZXhwb3J0IG9yIHJlLWV4cG9ydCB0aGUgU29mdHdhcmUgb3IgYW55IHBhcnQgdGhlcmVvZiBvciBpbmZvcm1hdGlvbiBwZXJ0YWluaW5nIHRoZXJldG8gdG8gYW55IGNvdW50cnkgZm9yIHdoaWNoIGEgVS5TLiBnb3Zlcm5tZW50IGFnZW5jeSByZXF1aXJlcyBhbiBleHBvcnQgbGljZW5zZSBvciBvdGhlciBnb3Zlcm5tZW50YWwgYXBwcm92YWwgd2l0aG91dCBmaXJzdCBvYnRhaW5pbmcgc3VjaCBsaWNlbnNlIG9yIGFwcHJvdmFsLgorCitBbnkgdmFyaWF0aW9uIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCBzaGFsbCBvbmx5IGJlIHZhbGlkIGlmIG1hZGUgaW4gd3JpdGluZyBieSBHdWlucGluU29mdCBpbmMuCisKK0FwcGVuZGl4IEEKK1RoaXMgaW5zdGFsbGF0aW9uIHBhY2thZ2UgZG9lcyBub3QgY29udGFpbiBhbnkgT3Blbi1zb3VyY2UgU29mdHdhcmUgY29tcG9uZW50cy4KKworQXBwZW5kaXggQgorVGhlcmUgYXJlIG5vIG9wZW4tc291cmNlIGxpY2Vuc2VzIGFwcGxpY2FibGUgdG8gdGhpcyBwYWNrYWdlLgorCisoIHByZXNzICdxJyB0byBjbG9zZSB0aGlzIHNjcmVlbiApCmRpZmYgLS1naXQgYS9saWNlbnNlcy9NYXhNaW5kMiBiL2xpY2Vuc2VzL01heE1pbmQyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxYzI5MTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9NYXhNaW5kMgpAQCAtMCwwICsxLDM5IEBACitUaGVyZSBhcmUgdHdvIGxpY2Vuc2VzLCBvbmUgZm9yIHRoZSBDIGxpYnJhcnkgc29mdHdhcmUsIGFuZCBvbmUgZm9yCit0aGUgZGF0YWJhc2UuCisKK1NPRlRXQVJFIExJQ0VOU0UgKEMgbGlicmFyeSkKKworVGhlIEdlb0lQIEMgTGlicmFyeSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTEdQTC4gIEZvciBkZXRhaWxzIHNlZQordGhlIENPUFlJTkcgZmlsZS4KKworT1BFTiBEQVRBIExJQ0VOU0UgKEdlb0xpdGUgQ291bnRyeSBhbmQgR2VvTGl0ZSBDaXR5IGRhdGFiYXNlcykKKworQ29weXJpZ2h0IChjKSAyMDA4IE1heE1pbmQsIEluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK0FsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgYW5kIGRvY3VtZW50YXRpb24gbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YKK3RoaXMgZGF0YWJhc2UgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIEdlb0xpdGUgZGF0YSBjcmVhdGVkIGJ5IE1heE1pbmQsIGF2YWlsYWJsZSBmcm9tCitodHRwOi8vbWF4bWluZC5jb20vIgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQKK3RoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgorY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlcgorbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisyLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIGFuZCBkb2N1bWVudGF0aW9uIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mCit0aGlzIGRhdGFiYXNlIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgR2VvTGl0ZSBkYXRhIGNyZWF0ZWQgYnkgTWF4TWluZCwgYXZhaWxhYmxlIGZyb20KK2h0dHA6Ly9tYXhtaW5kLmNvbS8iCiszLiAiTWF4TWluZCIgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworZGF0YWJhc2Ugd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgREFUQUJBU0UgSVMgUFJPVklERUQgQlkgTUFYTUlORCwgSU5DIGBgQVMgSVMnJyBBTkQgQU5ZIAorRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCAKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBNQVhNSU5EIEJFIExJQUJMRSBGT1IgQU5ZIAorRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IAorTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECitPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIAorREFUQUJBU0UsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9NZW1vbml4IGIvbGljZW5zZXMvTWVtb25peApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZmY1M2NlCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvTWVtb25peApAQCAtMCwwICsxLDQ4IEBACitGUkVFV0FSRSBTT0ZUV0FSRSBMSUNFTlNFIEFHUkVFTUVOVAorRnJlZXdhcmUgTGljZW5zZQorCitJTVBPUlRBTlQ6IFBMRUFTRSBSRUFEIENBUkVGVUxMWSBCRUZPUkUgVVNJTkcgVEhFIE1FTU9OSVgKKworCitUaGlzIGlzIG91ciBGcmVld2FyZSBMaWNlbnNlLCB3aGljaCBhcHBsaWVzIHRvIE1lbW9uaXggZ2FtZSwgbGFiZWxlZCBhcyBGcmVld2FyZS4KK0NvcHlyaWdodCBsYXcgcHJvdGVjdHMgdGhpcyBzb2Z0d2FyZSBwcm9ncmFtIGFuZCBhbnkgYXNzb2NpYXRlZCBtYXRlcmlhbC4gVmlld2l6YXJkCityZXRhaW5zIHRpdGxlIHRvIGFuZCBvd25lcnNoaXAgaW4gdGhlIGNvcHlyaWdodCBvZiB0aGUgc29mdHdhcmUgcHJvZ3JhbSBhbmQgdGhlCithc3NvY2lhdGVkIG1hdGVyaWFscy4KKworCitGcmVld2FyZSBMaWNlbnNlIFJpZ2h0czogTWVtb25peCBnYW1lIGlzIHByb3ZpZGVkIGFzIGZyZWV3YXJlIGZvciBMaW51eC9CU0QvVW5peC1saWtlCitPU2VzLiBGcmVld2FyZSBzb2Z0d2FyZSBpcyBwcm92aWRlZCBmcmVlIG9mIGNoYXJnZS4gT2NjYXNpb25hbGx5IHRoZSBjb3B5cmlnaHQgaG9sZGVyCittYXkgcG9zdCBhIHJlcXVlc3QgZm9yIGEgZG9uYXRpb24gaW4gc3VwcG9ydCBvZiB0aGlzIHNvZnR3YXJlLiBUaGlzIHR5cGUgb2YgcmVxdWVzdAorZG9lcyBub3QgY2hhbmdlIHRoZSBjbGFzc2lmaWNhdGlvbiBvZiB0aGlzIHNvZnR3YXJlIGFzIGZyZWV3YXJlLiBGcmVld2FyZSBzb2Z0d2FyZQorbWF5IGJlIHVzZWQgYXMgbWFueSB0aW1lcyBhcyB5b3UgbGlrZSwgZm9yIGFzIGxvbmcgYXMgeW91IGxpa2UuIFlvdSBtYXkgY29weSBhbmQKK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoaXMgcHJvZ3JhbSBwcm92aWRlZCB0aGF0IHlvdSBrZWVwIHRoaXMgY29weXJpZ2h0IG5vdGljZSBhbmQKK2Rpc2NsYWltZXIgb2Ygd2FycmFudHkgaW50YWN0LiBZb3UgbXVzdCBub3QgY2hhcmdlIG1vbmV5IG9yIGZlZXMgZm9yIHRoZSBzb2Z0d2FyZQorcHJvZHVjdCB0byBhbnlvbmUgZXhjZXB0IHRvIGNvdmVyIGRpc3RyaWJ1dGlvbiBjb3N0cy4KK1lvdSBtYXkgbm90IGFsdGVyIHRoaXMgU29mdHdhcmUgaW4gYW55IHdheTsgeW91IG1heSBub3QgdXNlIG9yIGRpc3RyaWJ1dGUgYW55IHBhcnQgb2YgdGhlCitvcmlnaW5hbCBwYWNrYWdlLiBBbHNvIHlvdSBhcmUgbm90IGFsbG93ZWQgdG8gZW11bGF0ZSwgZGVjb21waWxlLCBkaXNhc3NlbWJsZSwgb3RoZXJ3aXNlCityZXZlcnNlIGVuZ2luZWVyIGFueSBleGVjdXRhYmxlIHBhcnQgb2Ygb3JpZ2luYWwgcGFja2FnZS4gQW55IHN1Y2ggdW5hdXRob3JpemVkIHVzZSBtYXkKK3Jlc3VsdCBpbiBjcmltaW5hbCBhbmQvb3IgY2l2aWwgcHJvc2VjdXRpb24uCitUaGUgY29weXJpZ2h0IGhvbGRlciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVjbGFzc2lmeSB0aGlzIHNvZnR3YXJlIGFzIGEgbm9uLWZyZWV3YXJlCitwcm9kdWN0IGF0IGEgbGF0ZXIgZGF0ZSAoaS5lLiBzaGFyZXdhcmUgb2YgcHVibGljIGRvbWFpbikuIERvaW5nIHNvIHdpbGwgbm90IG1vZGlmeQordGhlIGxpY2Vuc2UgYWdyZWVtZW50IG9mIHByZXZpb3VzbHkgZGlzdHJpYnV0ZWQgZXhlY3V0YWJsZXMuCisKKworV2FycmFudHk6IFRoaXMgcHJvZ3JhbSBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgd2FycmFudGllcyBvZiBhbnkga2luZCwgZWl0aGVyCitleHByZXNzZWQgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIHRoZSBpbXBsaWVkIHdhcnJhbnRpZXMgb2YKK21lcmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UuIFRoZSBlbnRpcmUgcmlzayBhcyB0byB0aGUKK3F1YWxpdHkgYW5kIHBlcmZvcm1hbmNlIG9mIHRoZSBwcm9ncmFtIGlzIHdpdGggeW91LiBTaG91bGQgdGhlIHByb2dyYW0gcHJvdmUgZGVmZWN0aXZlLAoreW91IGFzc3VtZSB0aGUgY29zdCBvZiBhbGwgbmVjZXNzYXJ5IHNlcnZpY2luZywgcmVwYWlyIG9yIGNvcnJlY3Rpb24uIEluIG5vIGV2ZW50IHdpbGwKK2FueSBjb3B5cmlnaHQgaG9sZGVyIGJlIGxpYWJsZSB0byB5b3UgZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBhbnkgZ2VuZXJhbCwgc3BlY2lhbCwKK2luY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUKK3Byb2dyYW0gKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gbG9zcyBvZiBkYXRhIG9yIGRhdGEgYmVpbmcgcmVuZGVyZWQgaW5hY2N1cmF0ZQorb3IgbG9zc2VzIHN1c3RhaW5lZCBieSB5b3Ugb3IgdGhpcmQgcGFydGllcyBvciBhIGZhaWx1cmUgb2YgdGhlIHByb2dyYW0gdG8gb3BlcmF0ZSB3aXRoCithbnkgb3RoZXIgcHJvZ3JhbXMpLgorCisKK0FncmVlbWVudDogQnkgdXNpbmcgb3VyIHNvZnR3YXJlIHByb2R1Y3RzIHlvdSBhcmUgYXV0b21hdGljYWxseSBhZ3JlZWluZyB0byBhbmQgc2hvdwordGhhdCB5b3UgaGF2ZSByZWFkIGFuZCB1bmRlcnN0b29kIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBjb250YWluZWQgd2l0aGluIHRoaXMKK0ZyZWV3YXJlIFNvZnR3YXJlIExpY2Vuc2UgQWdyZWVtZW50LiBUaGlzIEZyZWV3YXJlIFNvZnR3YXJlIExpY2Vuc2UgQWdyZWVtZW50IGlzCit0aGVuIGVmZmVjdGl2ZSB3aGlsZSB5b3UgdXNlIGFuZCBjb250aW51ZSB0byBtYWtlIHVzZSBvZiB0aGVzZSBzb2Z0d2FyZSBwcm9kdWN0cy4KK0lmIHlvdSBkbyBub3QgYWdyZWUgd2l0aCBvdXIgRnJlZXdhcmUgU29mdHdhcmUgTGljZW5zZSBBZ3JlZW1lbnQgeW91IG11c3Qgbm90IHVzZQorb3VyIHNvZnR3YXJlIHByb2R1Y3RzIC0gdGhpcyBGcmVld2FyZSBTb2Z0d2FyZSBMaWNlbnNlIEFncmVlbWVudCB3aWxsIHRoZW4gbm90IGFwcGx5Cit0byB5b3UuIFRoaXMgRnJlZXdhcmUgU29mdHdhcmUgTGljZW5zZSBBZ3JlZW1lbnQgaXMgc3ViamVjdCB0byBjaGFuZ2Ugd2l0aG91dCBub3RpY2UuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9NZW5kZWxleS1FVUxBIGIvbGljZW5zZXMvTWVuZGVsZXktRVVMQQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2M1ZmQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvTWVuZGVsZXktRVVMQQpAQCAtMCwwICsxLDI2NCBAQAorVEVSTVMgT0YgVVNFCisKK1RoaXMgcGFnZSAodG9nZXRoZXIgd2l0aCB0aGUgZG9jdW1lbnRzIHJlZmVycmVkIHRvIG9uIGl0KSB0ZWxscyB5b3UgdGhlIHRlcm1zIG9uIHdoaWNoIHlvdSBtYXkgbWFrZSB1c2Ugb2Ygb3VyIHdlYnNpdGUgd3d3Lm1lbmRlbGV5LmNvbSAob3VyICJTaXRlIikgYW5kIG91ciBzb2Z0d2FyZSAob3VyICJTb2Z0d2FyZSIpLCB3aGV0aGVyIGFzIGEgdXNlciBvciBhIHJlZ2lzdGVyZWQgbWVtYmVyLiBQbGVhc2UgcmVhZCB0aGVzZSBUZXJtcyBvZiBVc2UgY2FyZWZ1bGx5IGJlZm9yZSB5b3Ugc3RhcnQgdG8gdXNlIHRoZSBTaXRlIGFuZCB0aGUgU29mdHdhcmUuIEJ5IHVzaW5nIG91ciBTaXRlIGFuZCBvdXIgU29mdHdhcmUsIHlvdSBpbmRpY2F0ZSB0aGF0IHlvdSBhY2NlcHQgdGhlc2UgVGVybXMgb2YgVXNlIGFuZCB0aGF0IHlvdSBhZ3JlZSB0byBhYmlkZSBieSB0aGVtLiBJZiB5b3UgZG8gbm90IGFncmVlIHRvIHRoZXNlIFRlcm1zIG9mIFVzZSwgcGxlYXNlIHJlZnJhaW4gZnJvbSB1c2luZyBvdXIgU2l0ZSBhbmQgb3VyIFNvZnR3YXJlLgorCisKKzEuIElORk9STUFUSU9OIEFCT1VUIFVTCisKKzEuMS4gd3d3Lm1lbmRlbGV5LmNvbSBpcyBhIHNpdGUgb3BlcmF0ZWQgYnkgTWVuZGVsZXkgTGltaXRlZCAoIndlIiwgInVzIiBhbmQgIm91ciIpLiBXZSBhcmUgcmVnaXN0ZXJlZCBpbiBFbmdsYW5kIGFuZCBXYWxlcyB1bmRlciBjb21wYW55IG51bWJlciA2NDE5MDE1IGFuZCBoYXZlIG91ciByZWdpc3RlcmVkIG9mZmljZSBhdCBTZWNvbmQgRmxvb3IsIENhcmRpZmYgSG91c2UsIFRpbGxpbmcgUm9hZCwgTG9uZG9uIE5XMiAxTEouIE91ciBWQVQgbnVtYmVyIGlzIDkzMCAxMTE3IDc1LgorCisyLiBQVVJQT1NFCisKKzIuMS4gVGhlIHByaW5jaXBhbCBwdXJwb3NlcyBvZiB0aGUgU2l0ZSBhcmUgdG86CisKKzIuMS4xLiAJYXNzaXN0IHlvdSBpbiB0aGUgY2F0YWxvZ3VpbmcgYW5kIG1hbmFnaW5nIG9mIHlvdXIgYWNhZGVtaWMgcGFwZXJzIGFuZCBhcnRpY2xlcyAoIkFjYWRlbWljIFBhcGVycyIpOworCisyLjEuMi4gCXNoYXJlIHlvdXIgYWNhZGVtaWMgYW5kIHNjaWVudGlmaWMga25vd2xlZGdlIHdpdGggc2VsZWN0ZWQgY29sbGVhZ3VlczsKKworMi4xLjMuIAlkaXNjb3ZlciBhY2FkZW1pYyBrbm93bGVkZ2UgYW5kIGVuYWJsZSBkZXRhaWxlZCBzZWFyY2ggb2YgYWNhZGVtaWMgcGFwZXJzOworCisyLjEuNC4gCXB1dCB5b3UgaW4gdG91Y2ggd2l0aCBsaWtlLW1pbmRlZCBwZW9wbGUgYW5kIGZhY2lsaXRhdGUgcmVzZWFyY2ggcHJvamVjdHMuCisKKzMuIEFDQ0VTU0lORyBPVVIgU0lURQorCiszLjEuIEFsdGhvdWdoIHdlIGFpbSB0byBrZWVwIHRoZSBTaXRlIGF2YWlsYWJsZSBhdCBhbGwgcmVhc29uYWJsZSB0aW1lcywgd2UgbWF5IHdpdGhkcmF3LCBzdXNwZW5kIG9yIGFtZW5kIHRoZSBzZXJ2aWNlIHdlIHByb3ZpZGUgb24gb3VyIFNpdGUgd2l0aG91dCBub3RpY2UgaW5jbHVkaW5nLCBmb3IgZXhhbXBsZSwgaW4gdGhlIGV2ZW50IG9mIHRlY2huaWNhbCBmYWlsdXJlcywgdXBncmFkZXMsIHJvdXRpbmUgb3IgZW1lcmdlbmN5IHJlcGFpciB3b3JrIG9yIHNvbWUgcmVhc29uIG91dHNpZGUgb3VyIGNvbnRyb2wuIFdlIHdpbGwgbm90IGJlIGxpYWJsZSBpZiBmb3IgYW55IHJlYXNvbiBvdXIgU2l0ZSBpcyB1bmF2YWlsYWJsZSBhdCBhbnkgdGltZSBvciBmb3IgYW55IHBlcmlvZC4KKworMy4yLiBXZSByZXN0cmljdCBhY2Nlc3MgdG8gY2VydGFpbiBwYXJ0cyBvZiBvdXIgU2l0ZSB0byB1c2VycyB3aG8gaGF2ZSByZWdpc3RlcmVkIHdpdGggdXMuIElmIHlvdSByZWdpc3RlciB3aXRoIHVzLCB5b3UgbXVzdCBwcm92aWRlIHRydWUgYW5kIGFjY3VyYXRlIGluZm9ybWF0aW9uIGFib3V0IHlvdXJzZWxmLiBTaG91bGQgdGhlIHJlZ2lzdHJhdGlvbiBpbmZvcm1hdGlvbiBwcm92aWRlZCBwcm92ZSBmYWxzZSBvciBtaXNsZWFkaW5nIChpbmNsdWRpbmcgeW91ciBwZXJzb25hbCBkZXRhaWxzKSwgd2UgbWF5IHN1c3BlbmQgb3IgdGVybWluYXRlIHlvdXIgYWNjb3VudC4KKworMy4zLiBJZiB5b3UgY2hvb3NlIGEgcGFzc3dvcmQgb3IgYW55IG90aGVyIHBpZWNlIG9mIGluZm9ybWF0aW9uIGFzIHBhcnQgb2Ygb3VyIHNlY3VyaXR5IHByb2NlZHVyZXMsIHlvdSBtdXN0IHRyZWF0IHN1Y2ggaW5mb3JtYXRpb24gYXMgY29uZmlkZW50aWFsLCBhbmQgeW91IG11c3Qgbm90IGRpc2Nsb3NlIGl0IHRvIGFueSB0aGlyZCBwYXJ0eS4gV2UgaGF2ZSB0aGUgcmlnaHQgdG8gZGlzYWJsZSBhbnkgYWNjb3VudCBvciBwYXNzd29yZCwgaWYgaW4gb3VyIHJlYXNvbmFibGUgb3BpbmlvbiwgeW91ciBhY2NvdW50IGluZm9ybWF0aW9uIGhhcyBiZWVuIGNvbXByb21pc2VkLiBZb3UgbXVzdCB0ZWxsIHVzIGltbWVkaWF0ZWx5IGlmIHlvdSBzdXNwZWN0IGFueSB1bmF1dGhvcmlzZWQgdXNlIG9mIHlvdXIgYWNjb3VudCBvciBhY2Nlc3MgdG8geW91ciBwYXNzd29yZC4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGFueSBhbmQgYWxsIHVzZSBvZiB5b3VyIGFjY291bnQuCisKKworNC4gT1VSIFNPRlRXQVJFIC0gRVVMQQorCis0LjEuIFdlIGFsbG93IHlvdSB0byBkb3dubG9hZCBvdXIgcHJvcHJpZXRhcnkgc29mdHdhcmUgKGluY2x1ZGluZyBhbnkgdXBkYXRlcyB0byB0aGUgc29mdHdhcmUgdGhhdCB3ZSBtYXkgbWFrZSBhdmFpbGFibGUgZnJvbSB0aW1lIHRvIHRpbWUpIGZyb20gdGhlIFNpdGUgKG91ciAiU29mdHdhcmUiKSBvciBvYnRhaW4gdGhlIFNvZnR3YXJlIGZyb20gb3VyIHVzZXJzIGZvciB0aGUgcHVycG9zZXMgb2YgY2F0YWxvZ3VpbmcgYW5kIG1hbmFnaW5nIHlvdXIgQWNhZGVtaWMgUGFwZXJzLgorCis0LjIuIEJ5IHByb2NlZWRpbmcgdG8gZG93bmxvYWQgYW5kIGluc3RhbGwgb3VyIFNvZnR3YXJlIChvciBhbnkgdXBkYXRlcyB0byB0aGUgU29mdHdhcmUgdGhhdCB3ZSBtYXkgbWFrZSBhdmFpbGFibGUgZnJvbSB0aW1lIHRvIHRpbWUpLCB5b3UgYWdyZWUgdG8gdGhlIHRlcm1zIG9mIHRoaXMgRVVMQSBhbmQgdGhlc2UgVGVybXMgb2YgVXNlIGFuZCB5b3VyIHVzZSBvZiBzdWNoIFNvZnR3YXJlIChpbmNsdWRpbmcgYW55IHVwZGF0ZXMpIHdpbGwgYmUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgRVVMQSBhbmQgdGhlc2UgVGVybXMgb2YgVXNlLiBJZiB5b3UgZG8gbm90IGFncmVlIHRvIHRoZXNlLCB3ZSBhcmUgdW53aWxsaW5nIHRvIGxpY2Vuc2Ugb3VyIFNvZnR3YXJlIHRvIHlvdS4gSW4gdGhpcyBjYXNlLCB5b3UgbWF5IG5vdCBkb3dubG9hZCBvciBpbnN0YWxsIG91ciBTb2Z0d2FyZSBhbmQgeW91IG11c3QgZGlzY29udGludWUgdGhlIGRvd25sb2FkaW5nIG9yIGluc3RhbGxhdGlvbiBwcm9jZXNzLgorCis0LjMuIElmIHlvdSBjaG9vc2UgdG8gZG93bmxvYWQgYW5kIGluc3RhbGwgb3VyIFNvZnR3YXJlIGFuZCBjb25uZWN0IGl0IHRvIGEgTWVuZGVsZXkgV2ViIGFjY291bnQgYnkgZW50ZXJpbmcgeW91ciBhY2NvdW50IGRldGFpbHMsIG91ciBTb2Z0d2FyZSBjb2xsZWN0cyAoZXZlbiB3aGlsZSB5b3UgYXJlIG9mZmxpbmUpIGNlcnRhaW4gZGF0YSB3aGljaCBpcyB1cGxvYWRlZCB0byBvdXIgc2VydmVycyB3aGVuIHlvdSBzeW5jaHJvbml6ZSB5b3VyIFNvZnR3YXJlIGFuZCBNZW5kZWxleSBXZWIgYWNjb3VudC4gV2UgY29sbGVjdCBkYXRhIHJlbGF0aW5nIHRvIHlvdXI6CisKKzQuMy4xLiAJQWNhZGVtaWMgUGFwZXJzIHN1Y2ggYXMgdGhlIGF1dGhvciBuYW1lLCB0aXRsZSBhbmQga2V5d29yZHMgZm9yIHRoZSBwdXJwb3NlIG9mIGFzc2lzdGluZyBpbiB0aGU6CisgKiBjYXRhbG9ndWluZyBvZiB5b3VyIGFuZCBvdGhlciB1c2VyJ3MgQWNhZGVtaWMgUGFwZXJzOworICogaW5kZXhpbmcgb2YgYWNhZGVtaWMgYXJ0aWNsZXMgYW5kIG1hdGVyaWFsczsKKyAqIHNlYXJjaGluZyBvZiB0aGUgaW5kZXhlZCBhY2FkZW1pYyBhcnRpY2xlcyBhbmQgbWF0ZXJpYWxzOworICogaW1wcm92aW5nIHRoZSBkb2N1bWVudCByZWNvZ25pdGlvbiBwcm9jZXNzIGZvciBhbGwgdXNlcnM7CisKKzQuMy4yLiAJcmVhZGluZywgY2F0YWxvZ3VpbmcgYW5kIGFjY2Vzc2luZyB5b3VyIEFjYWRlbWljIFBhcGVycyBmb3IgdGhlIHB1cnBvc2Ugb2Y6CisgKiBnZW5lcmF0aW5nIHJlY29tbWVuZGF0aW9ucyBmb3IgeW91IGluY2x1ZGluZyBhcnRpY2xlcyB0aGF0IHlvdSBtYXkgYmUgaW50ZXJlc3RlZCBpbiByZWFkaW5nIGFuZCB0aGVzZSByZWNvbW1lbmRhdGlvbnMgYXJlIGRpc3BsYXllZCBpbiB5b3VyIHByaXZhdGUgYWNjb3VudDsKKyAqIHByZXBhcmluZyBpbmRpdmlkdWFsaXplZCBzdGF0aXN0aWNhbCBpbmZvcm1hdGlvbiB3aGljaCB3aWxsIG9ubHkgYmUgbWFkZSBhdmFpbGFibGUgdG8geW91IHZpYSB5b3VyIHByaXZhdGUgYWNjb3VudDsgYW5kCisgKiBnZW5lcmF0aW5nIGFub255bW91cyBhZ2dyZWdhdGUgc3RhdGlzdGljYWwgaW5mb3JtYXRpb24gcmVnYXJkaW5nIGFsbCB1c2VycycgaW50ZXJlc3RzLCBoYWJpdHMgYW5kIHJlYWRpbmcgcGF0dGVybnMuIFRoaXMgc3RhdGlzdGljYWwgZGF0YSBkb2VzIG5vdCBjb250YWluIGFueSBwZXJzb25hbGx5IGlkZW50aWZpYWJsZSBpbmZvcm1hdGlvbiBhbmQgaXMgbWFkZSBhdmFpbGFibGUgdG8gcmVnaXN0ZXJlZCB1c2VycyBvbiBhbiBhbm9ueW1vdXMgYW5kIGFnZ3JlZ2F0ZWQgYmFzaXMuCisKK1BsZWFzZSBzZWUgb3VyIHByaXZhY3kgcG9saWN5IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB3ZSBjb2xsZWN0IGFuZCB1c2UgeW91ciBwZXJzb25hbCBkYXRhLgorCis0LjQuIFlvdSBtYXkgKGF0IHlvdXIgb3B0aW9uKSB1c2Ugb3VyIFNvZnR3YXJlIHRvIG1ha2UgYSByZWd1bGFyIGJhY2stdXAgY29weSBvZiB5b3VyIEFjYWRlbWljIFBhcGVycyB0byBvdXIgc2VydmVycyBzbyB0aGF0IHlvdSBjYW4gYWNjZXNzIHlvdXIgQWNhZGVtaWMgUGFwZXJzIHVzaW5nIHRoZSBJbnRlcm5ldCBhbmQgeW91IGhlcmVieSBncmFudCB0byB1cyBhIGxpbWl0ZWQgbGljZW5jZSB0byB1cGxvYWQsIGNvcHksIHN0b3JlLCB1c2UsIG1vZGlmeSwgZGlzcGxheSBhbmQgcmVwcm9kdWNlIHlvdXIgQWNhZGVtaWMgUGFwZXJzIGZvciB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3ZpZGluZyB0aGUgTWVuZGVsZXkgc2VydmljZSB0byB5b3UuCisKKzQuNS4gV2UgaGVyZWJ5IGdyYW50IHRvIHlvdSBhIG5vbi1leGNsdXNpdmUsIHBlcnNvbmFsLCBub24tdHJhbnNmZXJhYmxlIGxpY2VuY2UgdG8gdXNlIG9yIGRpc3RyaWJ1dGUgdG8gb3RoZXIgdXNlcnMgb3VyIFNvZnR3YXJlIGluIGFjY29yZGFuY2Ugd2l0aCB0aGlzIEVVTEEgYW5kIFRlcm1zIG9mIFVzZS4KKworNC42LiBZb3UgbWF5OgorCis0LjYuMS4gCWRvd25sb2FkLCBpbnN0YWxsIGFuZCB1c2UgdGhlIFNvZnR3YXJlIGZvciB0aGUgcHVycG9zZXMgb2YgY2F0YWxvZ3VpbmcgYW5kIG1hbmFnaW5nIHlvdXIgQWNhZGVtaWMgUGFwZXJzOworCis0LjYuMi4gCWRpc3RyaWJ1dGUgb3VyIFNvZnR3YXJlIHNvIHRoYXQgb3RoZXIgdXNlcnMgbWF5IGluc3RhbGwgYW5kIHVzZSB0aGUgU29mdHdhcmUgZm9yIHRoZSBwdXJwb3NlcyBvZiBjYXRhbG9ndWluZyBhbmQgbWFuYWdpbmcgdGhlaXIgQWNhZGVtaWMgUGFwZXJzOworCis0LjYuMy4gCW1ha2UgYSBjb3B5IG9mIG91ciBTb2Z0d2FyZSBmb3IgYmFjay11cCBwdXJwb3NlczsKKworNC43LiBFeGNlcHQgYXMgd2UgcGVybWl0IGluIHRoaXMgRVVMQSBvciBhcyBwZXJtaXR0ZWQgYnkgYW55IGxvY2FsIGxhdywgeW91IHVuZGVydGFrZToKKworNC43LjEuIAlub3QgdG8gY29weSBvdXIgU29mdHdhcmUgZXhjZXB0IHdoZXJlIHN1Y2ggY29weWluZyBpcyBpbmNpZGVudGFsIHRvIG5vcm1hbCB1c2Ugb2Ygb3VyIFNvZnR3YXJlLCBvciB3aGVyZSBpdCBpcyBuZWNlc3NhcnkgZm9yIHRoZSBwdXJwb3NlIG9mIGJhY2stdXAgb3Igb3BlcmF0aW9uYWwgc2VjdXJpdHk7CisKKzQuNy4yLiAJdG8gdXNlIG91ciBTb2Z0d2FyZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIEVVTEEgYW5kIHRoZSBUZXJtcyBvZiBVc2U7CisKKzQuNy4zLiAJbm90IHRvIHJlbnQsIGxlYXNlLCBzdWItbGljZW5zZSwgbG9hbiwgdHJhbnNsYXRlLCBtZXJnZSwgYWRhcHQsIHZhcnkgb3IgbW9kaWZ5IG91ciBTb2Z0d2FyZSAodGhvdWdoIHlvdSBtYXkgY29udGFjdCB1cyBhdCBvZmZpY2UgW2F0XSBtZW5kZWxleSBbZG90XSBjb20gdG8gb2J0YWluIGEgd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gdXMgdG8gZG8gc28pOworCis0LjcuNC4gCW5vdCB0byBtYWtlIGFsdGVyYXRpb25zIHRvLCBvciBtb2RpZmljYXRpb25zIG9mLCB0aGUgd2hvbGUgb3IgYW55IHBhcnQgb2Ygb3VyIFNvZnR3YXJlLCBub3IgcGVybWl0IG91ciBTb2Z0d2FyZSBvciBhbnkgcGFydCBvZiBpdCB0byBiZSBjb21iaW5lZCB3aXRoLCBvciBiZWNvbWUgaW5jb3Jwb3JhdGVkIGluLCBhbnkgb3RoZXIgcHJvZ3JhbXMgKHRob3VnaCB5b3UgbWF5IGNvbnRhY3QgdXMgYXQgb2ZmaWNlIFthdF0gbWVuZGVsZXkgW2RvdF0gY29tIHRvIG9idGFpbiBhIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIHVzIHRvIGRvIHNvKTsKKworNC43LjUuIAlub3QgdG8gZGlzYXNzZW1ibGUsIGRlY29tcGlsZSwgcmV2ZXJzZSBlbmdpbmVlciBvciBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgd2hvbGUgb3IgYW55IHBhcnQgb2Ygb3VyIFNvZnR3YXJlIG5vciBhdHRlbXB0IHRvIGRvIGFueSBzdWNoIHRoaW5nIGV4Y2VwdCB0byB0aGUgZXh0ZW50IHRoYXQgKGJ5IHZpcnR1ZSBvZiBzZWN0aW9uIDI5NkEgb2YgdGhlIENvcHlyaWdodCwgRGVzaWducyBhbmQgUGF0ZW50cyBBY3QgMTk4OCkgc3VjaCBhY3Rpb25zIGNhbm5vdCBiZSBwcm9oaWJpdGVkOworCis0LjcuNi4gCXRvIG5vdCByZW1vdmUgb3IgYWx0ZXIgb3VyIChvciBvdXIgbGljZW5zb3IncykgY29weXJpZ2h0IG5vdGljZSBvbiBvdXIgU29mdHdhcmU7CisKKzQuNy43LiAJbm90IHRvIHByb3ZpZGUgb3Igb3RoZXJ3aXNlIG1ha2UgYXZhaWxhYmxlIHRoZSBTb2Z0d2FyZSBpbiB3aG9sZSBvciBpbiBwYXJ0LgorCis0LjguIFlvdSBhY2tub3dsZWRnZSB0aGF0IGFsbCBjb3B5cmlnaHQgYW5kIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaW4gb3VyIFNvZnR3YXJlIGJlbG9uZyB0byB1cyBhbmQgKGFzIHRoZSBjYXNlIG1heSBiZSkgb3VyIGxpY2Vuc29ycywgYW5kIHlvdSBoYXZlIG5vIHJpZ2h0cyBpbiBvciB0byBvdXIgU29mdHdhcmUgb3RoZXIgdGhhbiB0aGUgcmlnaHQgdG8gdXNlIHRoZSBTb2Z0d2FyZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgRVVMQS4KKworCis1LiBJTlRFUkFDVElWRSBBTkQgU09DSUFMIE5FVFdPUktJTkcgU0VSVklDRVMKKworNS4xLiBXZSBtYXkgZnJvbSB0aW1lIHRvIHRpbWUgcHJvdmlkZSBpbnRlcmFjdGl2ZSBzZXJ2aWNlcyBvbiBvdXIgU2l0ZSwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb246CisKKzUuMS4xLiAJZm9ydW1zIGZvciBkaXNjdXNzaW9uIG9mIGlzc3VlcyBvZiBpbnRlcmVzdCB0byB1c2VycyBhbmQgbWVtYmVycyBvZiBvdXIgU2l0ZTsKKworNS4xLjIuIAl3aWtpcyBmb3IgdXNlcnMgYW5kIG1lbWJlcnMgdG8gc2hhcmUgYW5kIGNvbGxhYm9yYXRlIG9uIGtub3dsZWRnZSByZWxhdGluZyB0byBpc3N1ZXMgb2YgbXV0dWFsIGludGVyZXN0OworCis1LjEuMy4gCXNvY2lhbCBuZXR3b3JraW5nIHNlcnZpY2VzIHdoZXJlIHJlZ2lzdGVyZWQgbWVtYmVycyBjYW46IChpKSBjcmVhdGUgb25saW5lIHBlcnNvbmFsIHByb2ZpbGVzOyBhbmQgKGlpKSBpbnRlcmFjdCB3aXRoIG90aGVyIG1lbWJlcnM7CisKKzUuMS40LiAJZmFjaWxpdGllcyBmb3IgdGhlIHVwbG9hZGluZyBhbmQgc2hhcmluZyBvZiB1c2VycycgYW5kIG1lbWJlcnMnIEFjYWRlbWljIFBhcGVycyB3aXRoIG90aGVyIHVzZXJzIG9yIHByaXZhdGUgdXNlciBncm91cHMgeW91IGhhdmUgY3JlYXRlZDsKKworNS4xLjUuIAlnZW5lcmF0aW9uIG9mIHN0YXRpc3RpY3MgYW5kIHJlY29tbWVuZGF0aW9ucy4KKworNS4yLiBBbnkgdXNlIG9mIG91ciBpbnRlcmFjdGl2ZSBzZXJ2aWNlcyBzaG91bGQgY29tcGx5IHdpdGggb3VyIGNvbnRlbnQgc3RhbmRhcmRzIGJlbG93LgorCis1LjMuIFdlIGRvIG5vdCBvdmVyc2VlLCBtb25pdG9yIG9yIG1vZGVyYXRlIHRoZSBjb250ZW50IHRoYXQgeW91IHVwbG9hZCB0byBvdXIgU2l0ZSB1c2luZyBvdXIgaW50ZXJhY3RpdmUgc2VydmljZXMgYW5kIG5laXRoZXIgZG8gd2UgdmV0IG9yIHNjcmVlbiB1c2VycyBvZiBvdXIgU2l0ZS4gWW91IHVzZSB0aGUgU2l0ZSBhdCB5b3VyIG93biByaXNrIGFuZCB5b3Ugc2hvdWxkIHRha2UgY2FyZSB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcG9zdCBvbiBvdXIgU2l0ZSBvciB0aGF0IHlvdSBwcm92aWRlIHRvIG1lbWJlcnMuCisKKworNi4gQUNDRVBUQUJMRSBVU0UKKworNi4xLiBZb3UgbWF5IHVzZSBvdXIgU2l0ZSBhbmQgb3VyIFNvZnR3YXJlIG9ubHkgZm9yIGxhd2Z1bCBwdXJwb3Nlcy4gWW91IG1heSBub3QgdXNlIG91ciBTaXRlIG9yIG91ciBTb2Z0d2FyZToKKworNi4xLjEuIAl0byBzZW5kLCBrbm93aW5nbHkgcmVjZWl2ZSwgdXBsb2FkLCBkb3dubG9hZCwgdXNlIG9yIHJlLXVzZSBhbnkgYWNhZGVtaWMgcGFwZXJzIG9yIGFydGljbGVzIHdpdGhvdXQgdGhlIHBlcm1pc3Npb24gb2YgdGhlIGNvcHlyaWdodCBvd25lci4gSG93ZXZlciwgeW91IG1heSBwZXJmb3JtIHRoZXNlIGFjdGlvbnMgaWYgeW91IGFyZSB0aGUgY29weXJpZ2h0IG93bmVyLCBoYXZlIHRoZSBjb3B5cmlnaHQgb3duZXIncyBwZXJtaXNzaW9uLCBhcmUgcGVybWl0dGVkIHRvIGRvIHNvIHVuZGVyIGxpY2Vuc2UgZnJvbSBhbiBPcGVuIEFjY2VzcyBkYXRhYmFzZSBvciBhIENyZWF0aXZlIENvbW1vbnMgbGljZW5zZSwgb3IgYXJlIHBlcm1pdHRlZCB0byBkbyBzbyBieSBjb3B5cmlnaHQgZmFpciBkZWFsaW5nIG9yIGZhaXIgdXNlIGV4Y2VwdGlvbnMgaW4gYW55IHJlbGV2YW50IGp1cmlzZGljdGlvbi4gWW91IGNhbiByZWFkIG1vcmUgYWJvdXQgQ3JlYXRpdmUgQ29tbW9ucyBsaWNlbnNlcyBoZXJlOiB3d3cuY3JlYXRpdmVjb21tb25zLm9yZy4KKworNi4xLjIuIAlpbiBhbnkgd2F5IHRoYXQgYnJlYWNoZXMgYW55IGFwcGxpY2FibGUgbG9jYWwsIG5hdGlvbmFsIG9yIGludGVybmF0aW9uYWwgbGF3IG9yIHJlZ3VsYXRpb247CisKKzYuMS4zLiAJaW4gYW55IHdheSB0aGF0IGlzIHVubGF3ZnVsIG9yIGZyYXVkdWxlbnQsIG9yIGhhcyBhbnkgdW5sYXdmdWwgb3IgZnJhdWR1bGVudCBwdXJwb3NlIG9yIGVmZmVjdDsKKworNi4xLjQuIAl0byBzZW5kLCBrbm93aW5nbHkgcmVjZWl2ZSwgdXBsb2FkLCBkb3dubG9hZCwgdXNlIG9yIHJlLXVzZSBhbnkgbWF0ZXJpYWwgd2hpY2ggZG9lcyBub3QgY29tcGx5IHdpdGggb3VyIGNvbnRlbnQgc3RhbmRhcmRzIGluIGNsYXVzZSA3IGJlbG93OworCis2LjEuNS4gCXRvIHRyYW5zbWl0LCBvciBwcm9jdXJlIHRoZSBzZW5kaW5nIG9mLCBhbnkgdW5zb2xpY2l0ZWQgb3IgdW5hdXRob3Jpc2VkIGFkdmVydGlzaW5nIG9yIHByb21vdGlvbmFsIG1hdGVyaWFsIG9yIG90aGVyIGNvbW1lcmNpYWwgbWVzc2FnaW5nOworCis2LjEuNi4gCXRvIGtub3dpbmdseSB0cmFuc21pdCBhbnkgZGF0YSwgc2VuZCBvciB1cGxvYWQgYW55IG1hdGVyaWFsIHRoYXQgY29udGFpbnMgdmlydXNlcywgVHJvamFuIGhvcnNlcywgd29ybXMsIHRpbWUtYm9tYnMsIGtleXN0cm9rZSBsb2dnZXJzLCBzcHl3YXJlLCBhZHdhcmUgb3IgYW55IG90aGVyIGhhcm1mdWwgcHJvZ3JhbXMgb3Igc2ltaWxhciBjb21wdXRlciBjb2RlIGRlc2lnbmVkIHRvIGFkdmVyc2VseSBhZmZlY3QgdGhlIG9wZXJhdGlvbiBvZiBhbnkgY29tcHV0ZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUuCisKKzYuMi4gVW5sZXNzIHlvdSBoYXZlIGV4cHJlc3MgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCB5b3UgbWF5IG5vdCB1c2UgYW55IHNwaWRlci0gb3IgYm90LWxpa2Ugc3lzdGVtLCBzb2Z0d2FyZSBvciBvdGhlciBkZXZpY2Ugb3IgcHJvZ3JhbSAod2hldGhlciBhdXRvbWF0ZWQgb3Igb3RoZXJ3aXNlKSB0byBleHRyYWN0IGNvbnRlbnQsIGRhdGEsIGluZm9ybWF0aW9uIG9yIG90aGVyIG1hdGVyaWFsIGZyb20gdGhlIFNpdGUuCisKKzYuMy4gWW91IGFsc28gYWdyZWU6CisKKzYuMy4xLiAJbm90IHRvIGFjY2VzcyB3aXRob3V0IGF1dGhvcml0eSwgaW50ZXJmZXJlIHdpdGgsIGRhbWFnZSBvciBkaXNydXB0OgorICAgICAgCQorICogYW55IHBhcnQgb2Ygb3VyIFNpdGU7CisgKiBhbnkgZXF1aXBtZW50IG9yIG5ldHdvcmsgb24gd2hpY2ggb3VyIFNpdGUgaXMgc3RvcmVkOworICogb3VyIFNvZnR3YXJlIG9yIGFueSBzb2Z0d2FyZSB1c2VkIGluIHRoZSBwcm92aXNpb24gb2Ygb3VyIFNpdGU7IG9yCisgKiBhbnkgZXF1aXBtZW50IG9yIG5ldHdvcmsgb3Igc29mdHdhcmUgb3duZWQgb3IgdXNlZCBieSBhbnkgdGhpcmQgcGFydHkuCisKKworNy4gQ09OVEVOVCBTVEFOREFSRFMKKworNy4xLiBUaGVzZSBjb250ZW50IHN0YW5kYXJkcyBhcHBseSB0byBhbnkgYW5kIGFsbCBtYXRlcmlhbCB5b3UgdXBsb2FkIHRvIG9yIHBvc3Qgb24gdGhlIFNpdGUgaW5jbHVkaW5nIHlvdXIgY29tbWVudHMgaW4gZm9ydW1zLCB3aWtpcywgcGVyc29uYWwgcHJvZmlsZXMgYW5kIGNvbW11bmljYXRpb25zIHdpdGggbWVtYmVycyBhbmQgeW91ciBBY2FkZW1pYyBQYXBlcnMgKCJDb250ZW50IikgYW5kIHlvdXIgdXNlIG9mIHRoZSBTaXRlLgorCis3LjIuIFlvdSBtdXN0IGNvbXBseSB3aXRoIHRoZSBzcGlyaXQgb2YgdGhlIGZvbGxvd2luZyBzdGFuZGFyZHMgYXMgd2VsbCBhcyB0aGUgbGV0dGVyLgorCis3LjMuIENvbnRlbnQgbXVzdCBjb21wbHkgd2l0aCBhcHBsaWNhYmxlIGxhdyBpbiB0aGUgVUsgYW5kIGluIGFueSBjb3VudHJ5IGZyb20gd2hpY2ggdGhleSBhcmUgcG9zdGVkLgorCis3LjQuIENvbnRlbnQgbXVzdCBub3Q6CisKKzcuNC4xLiAJY29udGFpbiBhbnkgbWF0ZXJpYWwgd2hpY2ggaXMgZGVmYW1hdG9yeSBvZiBhbnkgcGVyc29uLCBvYnNjZW5lLCBvZmZlbnNpdmUsIGhhdGVmdWwgb3IgaW5mbGFtbWF0b3J5OworCis3LjQuMi4gCXByb21vdGUgc2V4dWFsbHkgZXhwbGljaXQgbWF0ZXJpYWwsIHZpb2xlbmNlLCBwcm9tb3RlIGRpc2NyaW1pbmF0aW9uIGJhc2VkIG9uIHJhY2UsIHNleCwgcmVsaWdpb24sIG5hdGlvbmFsaXR5LCBkaXNhYmlsaXR5LCBzZXh1YWwgb3JpZW50YXRpb24gb3IgYWdlOworCis3LjQuMy4gCWluZnJpbmdlIGFueSBjb3B5cmlnaHQsIGRhdGFiYXNlIHJpZ2h0LCB0cmFkZSBtYXJrIG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodCBvZiBhbnkgb3RoZXIgcGVyc29uOworCis3LjQuNC4gCWJlIGxpa2VseSB0byBkZWNlaXZlIGFueSBwZXJzb24gb3IgbWFkZSBpbiBicmVhY2ggb2YgYW55IGxlZ2FsIGR1dHkgb3dlZCB0byBhIHRoaXJkIHBhcnR5LCBzdWNoIGFzIGEgY29udHJhY3R1YWwgZHV0eSBvciBhIGR1dHkgb2YgY29uZmlkZW5jZSBvciBwcm9tb3RlIGFueSBpbGxlZ2FsIGFjdGl2aXR5OworCis3LjQuNS4gCWJlIHRocmVhdGVuaW5nLCBhYnVzZSBvciBpbnZhZGUgYW5vdGhlcidzIHByaXZhY3ksIG9yIGNhdXNlIGFubm95YW5jZSwgaW5jb252ZW5pZW5jZSBvciBuZWVkbGVzcyBhbnhpZXR5IG9yIGJlIGxpa2VseSB0byBoYXJhc3MsIHVwc2V0LCBlbWJhcnJhc3MsIGFsYXJtIG9yIGFubm95IGFueSBvdGhlciBwZXJzb247CisKKzcuNC42LiAJYmUgdXNlZCB0byBpbXBlcnNvbmF0ZSBhbnkgcGVyc29uLCBvciB0byBtaXNyZXByZXNlbnQgeW91ciBpZGVudGl0eSBvciBhZmZpbGlhdGlvbiB3aXRoIGFueSBwZXJzb24gb3IgZ2l2ZSB0aGUgaW1wcmVzc2lvbiB0aGF0IHRoZXkgZW1hbmF0ZSBmcm9tIHVzLCBpZiB0aGlzIGlzIG5vdCB0aGUgY2FzZTsKKworNy40LjcuIAlhZHZvY2F0ZSwgcHJvbW90ZSBvciBhc3Npc3QgYW55IHVubGF3ZnVsIGFjdCBzdWNoIGFzIChieSB3YXkgb2YgZXhhbXBsZSBvbmx5KSBjb3B5cmlnaHQgaW5mcmluZ2VtZW50IG9yIGNvbXB1dGVyIG1pc3VzZS4KKworCis4LiBTVVNQRU5TSU9OIEFORCBURVJNSU5BVElPTgorCis4LjEuIEZhaWx1cmUgdG8gY29tcGx5IHdpdGggdGhlIGFjY2VwdGFibGUgdXNlIG9yIGNvbnRlbnQgc3RhbmRhcmRzIGluIHRoZXNlIFRlcm1zIG9mIFVzZSBjb25zdGl0dXRlcyBhIG1hdGVyaWFsIGJyZWFjaCBvZiB0aGUgVGVybXMgb2YgVXNlIHVwb24gd2hpY2ggeW91IGFyZSBwZXJtaXR0ZWQgdG8gdXNlIG91ciBTaXRlLCBhbmQgbWF5IHJlc3VsdCBpbiBvdXIgdGFraW5nIGFsbCBvciBhbnkgb2YgdGhlIGZvbGxvd2luZyBhY3Rpb25zOgorCis4LjEuMS4gCWltbWVkaWF0ZSwgdGVtcG9yYXJ5IG9yIHBlcm1hbmVudCB3aXRoZHJhd2FsIG9mIHlvdXIgcmlnaHQgdG8gdXNlIG91ciBTaXRlOworCis4LjEuMi4gCWltbWVkaWF0ZSwgdGVtcG9yYXJ5IG9yIHBlcm1hbmVudCByZW1vdmFsIG9mIGFueSBwb3N0aW5nIG9yIG1hdGVyaWFsIHVwbG9hZGVkIGJ5IHlvdSB0byBvdXIgU2l0ZTsKKworOC4xLjMuIAlpc3N1ZSBvZiBhIHdhcm5pbmcgdG8geW91OworCis4LjEuNC4gCWxlZ2FsIGFjdGlvbiBhZ2FpbnN0IHlvdSBpbmNsdWRpbmcgcHJvY2VlZGluZ3MgZm9yIHJlaW1idXJzZW1lbnQgb2YgYWxsIGNvc3RzIG9uIGFuIGluZGVtbml0eSBiYXNpcyAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIHJlYXNvbmFibGUgYWRtaW5pc3RyYXRpdmUgYW5kIGxlZ2FsIGNvc3RzKSByZXN1bHRpbmcgZnJvbSB0aGUgYnJlYWNoOworCis4LjEuNS4gCWRpc2Nsb3N1cmUgb2Ygc3VjaCBpbmZvcm1hdGlvbiB0byBsYXcgZW5mb3JjZW1lbnQgYXV0aG9yaXRpZXMgb3IgdGhpcmQgcGFydHkgY29tcGxhaW5hbnRzIGFzIHdlIHJlYXNvbmFibHkgZmVlbCBpcyBuZWNlc3Nhcnkgb3IgcmVxdWlyZWQ7CisKKzguMS42LiAJZGlzY2xvc3VyZSBvZiB5b3VyIGlkZW50aXR5IHRvIGFueSB0aGlyZCBwYXJ0eSB3aG8gaXMgY2xhaW1pbmcgdGhhdCBhbnkgbWF0ZXJpYWwgcG9zdGVkIG9yIHVwbG9hZGVkIGJ5IHlvdSB0byBvdXIgU2l0ZSBjb25zdGl0dXRlcyBhIHZpb2xhdGlvbiBvZiB0aGVpciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzLCByaWdodCB0byBwcml2YWN5IG9yIG90aGVyIGxlZ2FsIHJpZ2h0cy4KKworOC4yLiBUaGUgcmVzcG9uc2VzIGRlc2NyaWJlZCBpbiB0aGlzIGNsYXVzZSBhcmUgbm90IGxpbWl0ZWQsIGFuZCB3ZSBtYXkgdGFrZSBhbnkgb3RoZXIgYWN0aW9uIHdlIHJlYXNvbmFibHkgZGVlbSBhcHByb3ByaWF0ZS4KKworOC4zLiBZb3UgaGVyZWJ5IGluZGVtbmlmeSB1cyBhZ2FpbnN0IGFsbCBhbmQgYW55IGxpYWJpbGl0eSwgbG9zc2VzLCBkYW1hZ2VzLCBjbGFpbXMsIGNvc3RzIGFuZCBleHBlbnNlcyBhcmlzaW5nIG91dCBvZiB5b3VyIGZhaWx1cmUgdG8gY29tcGx5IHdpdGggdGhlc2UgVGVybXMgb2YgVXNlIGFuZCwgaW4gcGFydGljdWxhciwgdGhlIGFjY2VwdGFibGUgdXNlIG9yIGNvbnRlbnQgc3RhbmRhcmRzLgorCisKKzkuIENPTVBMQUlOVFMKKworOS4xLiBJZiB5b3Ugd2lzaCB0byBjb21wbGFpbiBhYm91dCBhbnkgdXNlIG9mIG91ciBTaXRlIG9yIENvbnRlbnQgcG9zdGVkIHRvIG91ciBTaXRlLCBwbGVhc2UgY29udGFjdCB1cyBhdCBjb21wbGFpbnRzIFthdF0gbWVuZGVsZXkgW2RvdF0gY29tIGZvbGxvd2luZyB0aGUgZ3VpZGVsaW5lcyBvbiB0aGUgQ29weXJpZ2h0IENvbXBsaWFuY2UgUG9saWN5IHBhZ2UuIFdlIHdpbGwgdGhlbiByZXZpZXcgeW91ciBjb21wbGFpbnQgYW5kIGRlY2lkZSB3aGV0aGVyIGl0IGNvbXBsaWVzIHdpdGggb3VyIFRlcm1zIG9mIFVzZSBhbmQsIGluIHBhcnRpY3VsYXIsIG91ciBjb250ZW50IHN0YW5kYXJkcy4gSWYgbm90LCB3ZSB3aWxsIGRlYWwgd2l0aCB0aGUgbWF0dGVyIGFzIGRlc2NyaWJlZCBhYm92ZSAoc2VlIHNlY3Rpb24gOCkuIFdlIHdpbGwgaW5mb3JtIHlvdSBvZiB0aGUgb3V0Y29tZSBvZiBvdXIgcmV2aWV3IHdpdGhpbiBhIHJlYXNvbmFibGUgdGltZSBvZiByZWNlaXZpbmcgeW91ciBjb21wbGFpbnQuCisKKworMTAuIENPTlRFTlQgT1dORVJTSElQIEFORCBERUxFVElPTgorCisxMC4xLiBCeSB1c2luZyB0aGUgTWVuZGVsZXkgU2l0ZSBhbmQgcG9zdGluZyBhbnkgQ29udGVudCAoaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIEFjYWRlbWljIFBhcGVycykgb24gb3IgdGhyb3VnaCB0aGUgU2l0ZSwgeW91IGhlcmVieSBncmFudCB0byB1cyBhIHdvcmxkLXdpZGUgbGljZW5jZSB0byB1c2UsIG1vZGlmeSwgZGlzcGxheSwgcmVwcm9kdWNlLCBjb21tdW5pY2F0ZSBhbmQgZGlzdHJpYnV0ZSBzdWNoIENvbnRlbnQgYXMgd2UgZGVlbSByZWFzb25hYmx5IG5lY2Vzc2FyeSBpbiBvdXIgZGlzY3JldGlvbiB0byBwcm92aWRlIG91ciBzZXJ2aWNlIChpbmNsdWRpbmcgc2VhcmNoIHJlc3VsdHMpIHRocm91Z2ggb3VyIFNpdGUuIFdlIGRvIG5vdCBjbGFpbSBhbnkgb3duZXJzaGlwIHJpZ2h0cyBpbiB5b3VyIG9yIGFueSBvdGhlciB1c2Vy4oCZcyBDb250ZW50LiBBZnRlciBwb3N0aW5nIG9yIHVwbG9hZGluZyB5b3VyIENvbnRlbnQgdG8gdGhlIFNpdGUsIGV4Y2VwdCBmb3IgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB0byB1cyBoZXJldW5kZXIsIHlvdSBjb250aW51ZSB0byByZXRhaW4gYWxsIG93bmVyc2hpcCByaWdodHMgaW4gc3VjaCBDb250ZW50IGFuZCB5b3UgY29udGludWUgdG8gaGF2ZSB0aGUgcmlnaHQgdG8gdXNlIHlvdXIgQ29udGVudCBpbiBhbnkgd2F5IHlvdSBjaG9vc2UuCisKKzEwLjIuIEJ5IHBvc3RpbmcgeW91ciBDb250ZW50IHlvdSByZXByZXNlbnQgYW5kIHdhcnJhbnQgdGhhdDogKGkpIHlvdSBhcmUgcGVybWl0dGVkIHRvIHVzZSB5b3VyIENvbnRlbnQgb24gdGhlIFNpdGU7IChpaSkgeW91ciBDb250ZW50IHdhcyBwcm9kdWNlZCBpbiBjb21wbGlhbmNlIHdpdGggYWxsIGFwcGxpY2FibGUgbGF3cyBhbmQgcmVndWxhdGlvbnM7IChpaWkpIHlvdXIgQ29udGVudCBkb2VzIGFuZCB3aWxsIG5vdCwgaW4gYW55IHdheSwgdmlvbGF0ZSBvciBicmVhY2ggYW55IG9mIHRoZXNlIFRlcm1zIG9mIFVzZTsgKGl2KSB5b3VyIENvbnRlbnQgZG9lcyBub3QgY29udGFpbiBsaWJlbG91cywgdG9ydGlvdXMsIG9yIG90aGVyd2lzZSB1bmxhd2Z1bCBpbmZvcm1hdGlvbiwgaW5mcmluZ2Ugb3IgdmlvbGF0ZSBhbnkgY29weXJpZ2h0IG9yIG90aGVyIHJpZ2h0LCBvciBjb250YWluIGFueSBtYXR0ZXIgdGhlIHB1YmxpY2F0aW9uIG9yIHNhbGUgb2Ygd2hpY2ggd2lsbCB2aW9sYXRlIGFueSBmZWRlcmFsIG9yIHN0YXRlIHN0YXR1dGUgb3IgcmVndWxhdGlvbjsgKHYpIHlvdXIgQ29udGVudCBpcyBub3Qgb2JzY2VuZSBvciBpbiBhbnkgb3RoZXIgbWFubmVyIHVubGF3ZnVsOyAodmkpIHNoYWxsIG5vdCBiZSBpbmp1cmlvdXMgdG8gdGhlIGhlYWx0aCBvZiBhbnkgdXNlcjsgYW5kICh2aWkpIHdlIHNoYWxsIG5vdCBiZSByZXF1aXJlZCB0byBwYXkgb3IgaW5jdXIgYW55IHN1bXMgdG8gYW55IHBlcnNvbiBvciBlbnRpdHkgYXMgYSByZXN1bHQgb2Ygb3VyIHVzZSBvciBleHBsb2l0YXRpb24gb2YgeW91ciBDb250ZW50LgorCisxMC4zLiBZb3UgbWF5IGRlbGV0ZSB5b3VyIENvbnRlbnQgYXQgYW55IHRpbWUgYWx0aG91Z2ggd2hlcmUgeW91IG1ha2UgdXNlIG9mIHRoZSBpbnRlcmFjdGl2ZSBmZWF0dXJlcyBvZiBvdXIgc2VydmljZSB0byBzaGFyZSBDb250ZW50IHdpdGggb3RoZXIgdXNlcnMgYW5kIHJlZ2lzdGVyZWQgbWVtYmVycyAoZS5nLiwgc2VuZGluZyBhIHBlcnNvbmFsIG1lc3NhZ2UgdG8gYW5vdGhlciB1c2VyKSB5b3UgbWF5IG5vdCBiZSBhYmxlIHRvIHJlbW92ZSBzdWNoIENvbnRlbnQuIFdoZW4geW91IGRlbGV0ZSB5b3VyIENvbnRlbnQsIG91ciByaWdodCB0byB1c2UgaXQgc2hhbGwgY2Vhc2Ugc2F2ZSB0aGF0IHdlIG1heSByZXRhaW4gYSBjb3B5IGluIGJhY2t1cCBmb3IgYSByZWFzb25hYmxlIHBlcmlvZCBvZiB0aW1lIGFuZCBhcyBuZWNlc3NhcnkgdG8gY29tcGx5IHdpdGggb3VyIGxlZ2FsIG9ibGlnYXRpb25zLiBIb3dldmVyLCBwbGVhc2Ugbm90ZSB0aGF0IHRoZSBkZWxldGVkIENvbnRlbnQgd2lsbCBub3QgYmUgZ2VuZXJhbGx5IGF2YWlsYWJsZSB0byBvdGhlciB1c2VycyBvciByZWdpc3RlcmVkIG1lbWJlcnMuCisKKzEwLjQgTm9uLXBlcnNvbmFsIGluZm9ybWF0aW9uIGFib3V0IEFjYWRlbWljIFBhcGVycywgc3VjaCBhcyBiaWJsaW9ncmFwaGljIGluZm9ybWF0aW9uLCBhYnN0cmFjdHMsIGtleXdvcmRzLCBvciBjaXRlZCByZWZlcmVuY2VzIHdpbGwgcGVyc2lzdCBpbiBvdXIgZGF0YWJhc2UgYW5kIHdpbGwgbm90IGJlIGRlbGV0ZWQgYXV0b21hdGljYWxseSB3aGVuIHlvdSBkZWFjdGl2YXRlIHlvdXIgYWNjb3VudCwgdW5sZXNzIHlvdSBzcGVjaWZpY2FsbHkgcmVxdWVzdCB0aGlzIGJ5IGNvbnRhY3RpbmcgdXMgYXQgcHJpdmFjeSBbYXRdIG1lbmRlbGV5IFtkb3RdIGNvbS4gSWYgbm9uLXBlcnNvbmFsIGluZm9ybWF0aW9uIGFib3V0IEFjYWRlbWljIFBhcGVycyBpcyBpbiB0aGUgcHVibGljIGRvbWFpbiBvciBoYXMgYWxzbyBiZWVuIHVwbG9hZGVkIGJ5IG90aGVyIHVzZXJzLCB3ZSBtYXkgb3B0IHRvIHJldGFpbiBpdCBpbiBvdXIgZGF0YWJhc2UgdG8gZW5zdXJlIGNvbnRpbnVlZCBzZXJ2aWNlIHRvIHRoZXNlIG90aGVyIHVzZXJzLgorCisxMC41LiBTYXZlIGZvciB0aGUgQ29udGVudCwgd2UgYXJlIHRoZSBvd25lciBvciB0aGUgbGljZW5zZWUgb2YgYWxsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaW4gb3VyIFNpdGUgYW5kIGluIHRoZSBtYXRlcmlhbCBwdWJsaXNoZWQgb24gaXQuIFRob3NlIHdvcmtzIGFyZSBwcm90ZWN0ZWQgYnkgY29weXJpZ2h0IGxhd3MgYW5kIHRyZWF0aWVzIGFyb3VuZCB0aGUgd29ybGQuIFlvdSBtYXkgdXNlIHRoZXNlIHJpZ2h0cyBhbmQgdGhlIG1hdGVyaWFsIHNvbGVseSBmb3IgdGhlIHB1cnBvc2Ugb2YgdXNpbmcgdGhlIFNpdGUgYW5kIG91ciBzZXJ2aWNlIGluIGFjY29yZGFuY2Ugd2l0aCB0aGVzZSBUZXJtcyBvZiBVc2UuCisKKzEwLjUuIElmIHdlIGRldGVybWluZSwgaW4gb3VyIHNvbGUgZGlzY3JldGlvbiBhbmQganVkZ21lbnQsIHRoYXQgYW55IENvbnRlbnQgZG9lcyBvciBtYXkgdmlvbGF0ZSBhbnkgb2YgdGhlIHRlcm1zIG9mIFRlcm1zIG9mIFVzZSwgd2UgcmVzZXJ2ZSB0aGUgcmlnaHQsIGF0IGFueSB0aW1lIGFuZCB3aXRob3V0IGxpbWl0aW5nIGFueSBhbmQgYWxsIG90aGVyIHJpZ2h0cyB3ZSBtYXkgaGF2ZSB1bmRlciB0aGVzZSBUZXJtcyBvZiBVc2UsIGF0IGxhdyBvciBpbiBlcXVpdHksIHRvOiAoaSkgcmVmdXNlIHRvIGFsbG93IHlvdSB0byBwb3N0IENvbnRlbnQ7IChpaSkgcmVtb3ZlIGFuZCBkZWxldGUgeW91ciBDb250ZW50OyAoaWlpKSByZXZva2UgeW91ciByaWdodCB0byB1c2UgdGhlIFNpdGU7IGFuZC9vciAoaXYpIHVzZSBhbnkgdGVjaG5vbG9naWNhbCwgbGVnYWwsIG9wZXJhdGlvbmFsIG9yIG90aGVyIG1lYW5zIGF2YWlsYWJsZSB0byB1cyB0byBlbmZvcmNlIHRoZSBwcm92aXNpb25zIG9mIHRoZXNlIFRlcm1zIG9mIFVzZSwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGJsb2NraW5nIHNwZWNpZmljIElQIGFkZHJlc3NlcyBvciBkZWFjdGl2YXRpbmcgeW91ciByZWdpc3RyYXRpb24gb24gdGhlIFNpdGUuCisKKzExLiBPVVIgU0lURSBDSEFOR0VTIFJFR1VMQVJMWQorCisxMS4xLiBXZSBhaW0gdG8gdXBkYXRlIG91ciBTaXRlIHJlZ3VsYXJseS4gSWYgdGhlIG5lZWQgYXJpc2VzIHN1Y2ggYXMgYW4gb3BlcmF0aW9uYWwgaXNzdWUsIHdlIG1heSBzdXNwZW5kIGFjY2VzcyB0byBvdXIgU2l0ZSwgb3IgY2xvc2UgaXQgaW5kZWZpbml0ZWx5LiBBbnkgb2YgdGhlIG1hdGVyaWFsIG9uIG91ciBTaXRlIG1heSBiZSBvdXQgb2YgZGF0ZSBhdCBhbnkgZ2l2ZW4gdGltZSwgYW5kIHdlIGFyZSB1bmRlciBubyBvYmxpZ2F0aW9uIHRvIHVwZGF0ZSBzdWNoIG1hdGVyaWFsLgorCisKKzEyLiBESVNDTEFJTUVSIE9GIExJQUJJTElUWQorCitUSEUgTUVOREVMRVkgU0VSVklDRSBBTkQgU0lURSwgQU5EIEFMTCBDT05URU5UIEFSRSBNQURFIEFWQUlMQUJMRSBPTiBBTiAiQVMgSVMiIEFORCAiQVMgQVZBSUxBQkxFIiBCQVNJUywgV0lUSE9VVCBBTlkgUkVQUkVTRU5UQVRJT04gT1IgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgT1IgQU5ZIEdVQVJBTlRZIE9SIEFTU1VSQU5DRSBUSEUgTUVOREVMRVkgU0VSVklDRSBPUiBTSVRFIFdJTEwgQkUgQVZBSUxBQkxFIEZPUiBVU0UsIE9SIFRIQVQgQUxMIEZFQVRVUkVTLCBGVU5DVElPTlMgT1IgT1BFUkFUSU9OUyBXSUxMIEJFIEFWQUlMQUJMRSBPUiBQRVJGT1JNIEFTIERFU0NSSUJFRC4gV2l0aG91dCBsaW1pdGluZyB0aGUgZm9yZWdvaW5nLCB3ZSBhcmUgbm90IHJlc3BvbnNpYmxlIG9yIGxpYWJsZSBmb3IgYW55IG1hbGljaW91cyBjb2RlLCBkZWxheXMsIGluYWNjdXJhY2llcywgZXJyb3JzLCBvciBvbWlzc2lvbnMgYXJpc2luZyBvdXQgb2YgeW91ciB1c2Ugb2YgdGhlIE1lbmRlbGV5IHNlcnZpY2Ugb3IgU2l0ZS4gWW91IHVuZGVyc3RhbmQsIGFja25vd2xlZGdlIGFuZCBhZ3JlZSB0aGF0IHlvdSBhcmUgYXNzdW1pbmcgdGhlIGVudGlyZSByaXNrIGFzIHRvIHRoZSBxdWFsaXR5LCBhY2N1cmFjeSwgcGVyZm9ybWFuY2UsIHRpbWVsaW5lc3MsIGFkZXF1YWN5LCBjb21wbGV0ZW5lc3MsIGNvcnJlY3RuZXNzLCBhdXRoZW50aWNpdHksIHNlY3VyaXR5IGFuZCB2YWxpZGl0eSBvZiBhbnkgYW5kIGFsbCBmZWF0dXJlcyBhbmQgZnVuY3Rpb25zIG9mIHRoZSBNZW5kZWxleSBzZXJ2aWNlIGFuZCBTaXRlLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgQ29udGVudCBhbmQgbWF0ZXJpYWxzIGFzc29jaWF0ZWQgd2l0aCB5b3VyIHVzZSBvZiB0aGUgTWVuZGVsZXkgc2VydmljZSBhbmQgU2l0ZS4KKworWU9VIFVOREVSU1RBTkQgQU5EIEFHUkVFIFRIQVQsIFRPIFRIRSBGVUxMRVNUIEVYVEVOVCBQRVJNSVNTSUJMRSBCWSBMQVcsIE1FTkRFTEVZIExJTUlURUQsIEFOWSBPRiBUSEVJUiBBRkZJTElBVEVTLCBPUiBUSEVJUiBSRVNQRUNUSVZFIFNVQ0NFU1NPUlMgQU5EIEFTU0lHTlMsIE9SIEFOWSBPRiBUSEVJUiBSRVNQRUNUSVZFIE9GRklDRVJTLCBESVJFQ1RPUlMsIEVNUExPWUVFUywgQUdFTlRTLCBSRVBSRVNFTlRBVElWRVMsIExJQ0VOU09SUywgT1BFUkFUSU9OQUwgU0VSVklDRSBQUk9WSURFUlMsIEFEVkVSVElTRVJTLCBPUiBTVVBQTElFUlMsIFNIQUxMIE5PVCBCRSBMSUFCTEUgRk9SIEFOWSBMT1NTIE9SIERBTUFHRSwgT0YgQU5ZIEtJTkQsIERJUkVDVCBPUiBJTkRJUkVDVCwgSU4gQ09OTkVDVElPTiBXSVRIIE9SIEFSSVNJTkcgRlJPTSBVU0UgT0YgVEhFIE1FTkRFTEVZIFNFUlZJQ0UgT1IgVEhJUyBTSVRFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQ09NUEVOU0FUT1JZLCBDT05TRVFVRU5USUFMLCBJTkNJREVOVEFMLCBJTkRJUkVDVCwgU1BFQ0lBTCBPUiBQVU5JVElWRSBEQU1BR0VTLgorCitTb21lIGp1cmlzZGljdGlvbnMgZG8gbm90IGFsbG93IGZvciB0aGUgZXhjbHVzaW9uIG9mIGNlcnRhaW4gd2FycmFudGllcyBvciBjZXJ0YWluIGxpbWl0YXRpb25zIG9uIGRhbWFnZXMgYW5kIHJlbWVkaWVzLCBhY2NvcmRpbmdseSBzb21lIG9mIHRoZSBleGNsdXNpb25zIGFuZCBsaW1pdGF0aW9ucyBkZXNjcmliZWQgaW4gdGhlc2UgVGVybXMgb2YgVXNlIG1heSBub3QgYXBwbHkgdG8geW91LgorCisKKzEzLiBSRUxJQU5DRSBPTiBTSVRFIElORk9STUFUSU9OCisKKzEzLjEuIFdlIGRvIG5vdCBjbGFpbSB0aGF0IHRoZSBpbmZvcm1hdGlvbiBvbiBhbnkgc3BlY2lmaWMgc3ViamVjdCBjb250YWluZWQgb24gb3VyIFNpdGUgaXMgYWNjdXJhdGUsIGNvbXByZWhlbnNpdmUsIHZlcmlmaWVkLCBjb21wbGV0ZSBvciBlcnJvciBmcmVlLiBDb21tZW50YXJ5IGFuZCBvdGhlciBtYXRlcmlhbHMgcG9zdGVkIG9uIG91ciBTaXRlIGFyZSBub3QgaW50ZW5kZWQgdG8gYW1vdW50IHRvIGFkdmljZSBvbiB3aGljaCByZWxpYW5jZSBzaG91bGQgYmUgcGxhY2VkLiBZb3Ugc2hvdWxkIHNlZWsgYXBwcm9wcmlhdGUgcHJvZmVzc2lvbmFsIGFkdmljZS4KKworMTMuMi4gV2UgdGhlcmVmb3JlIGRpc2NsYWltIGFsbCBsaWFiaWxpdHkgKHdoZXRoZXIgYXJpc2luZyBpbiBjb250cmFjdCwgdG9ydCBvciBvdGhlcndpc2UpIGFuZCByZXNwb25zaWJpbGl0eSBhcmlzaW5nIGZyb20gYW55IHJlbGlhbmNlIHBsYWNlZCBieSB5b3Ugb24gbWF0ZXJpYWxzIGFuZCBpbmZvcm1hdGlvbiBhdmFpbGFibGUgdGhyb3VnaCBvdXIgU2l0ZS4KKworCisxNC4gSU5GT1JNQVRJT04gQUJPVVQgWU9VIEFORCBZT1VSIFZJU0lUUyBUTyBPVVIgU0lURQorCisxNC4xLiBXZSBwcm9jZXNzIGluZm9ybWF0aW9uIGFib3V0IHlvdSBpbiBhY2NvcmRhbmNlIHdpdGggb3VyIHByaXZhY3kgcG9saWN5LiBCeSB1c2luZyBvdXIgU2l0ZSwgeW91IGNvbnNlbnQgdG8gc3VjaCBwcm9jZXNzaW5nIGFuZCB5b3Ugd2FycmFudCB0aGF0IGFsbCBkYXRhIHByb3ZpZGVkIGJ5IHlvdSBpcyBhY2N1cmF0ZS4KKworCisxNS4gVklSVVNFUywgSEFDS0lORyBBTkQgT1RIRVIgT0ZGRU5DRVMKKworMTUuMS4gWW91IG11c3Qgbm90IG1pc3VzZSBvdXIgc2l0ZSBieSBrbm93aW5nbHkgaW50cm9kdWNpbmcgdmlydXNlcywgdHJvamFucywgd29ybXMsIGxvZ2ljIGJvbWJzIG9yIG90aGVyIG1hdGVyaWFsIHdoaWNoIGlzIG1hbGljaW91cyBvciB0ZWNobm9sb2dpY2FsbHkgaGFybWZ1bC4gWW91IG11c3Qgbm90IGF0dGVtcHQgdG8gZ2FpbiB1bmF1dGhvcmlzZWQgYWNjZXNzIHRvIG91ciBTaXRlLCB0aGUgc2VydmVyIG9uIHdoaWNoIG91ciBTaXRlIGlzIHN0b3JlZCBvciBhbnkgc2VydmVyLCBjb21wdXRlciBvciBkYXRhYmFzZSBjb25uZWN0ZWQgdG8gb3VyIFNpdGUuIFlvdSBtdXN0IG5vdCBhdHRhY2sgb3VyIFNpdGUgdmlhIGEgZGVuaWFsLW9mLXNlcnZpY2UgYXR0YWNrIG9yIGEgZGlzdHJpYnV0ZWQgZGVuaWFsLW9mIHNlcnZpY2UgYXR0YWNrLgorCisxNS4yLiBCeSBicmVhY2hpbmcgdGhpcyBwcm92aXNpb24sIHlvdSB3b3VsZCBjb21taXQgYSBjcmltaW5hbCBvZmZlbmNlIHVuZGVyIHRoZSBDb21wdXRlciBNaXN1c2UgQWN0IDE5OTAuIFdlIHdpbGwgcmVwb3J0IGFueSBzdWNoIGJyZWFjaCB0byB0aGUgcmVsZXZhbnQgbGF3IGVuZm9yY2VtZW50IGF1dGhvcml0aWVzIGFuZCB3ZSB3aWxsIGNvLW9wZXJhdGUgd2l0aCB0aG9zZSBhdXRob3JpdGllcyBieSBkaXNjbG9zaW5nIHlvdXIgaWRlbnRpdHkgdG8gdGhlbS4gSW4gdGhlIGV2ZW50IG9mIHN1Y2ggYSBicmVhY2gsIHlvdXIgcmlnaHQgdG8gdXNlIG91ciBTaXRlIHdpbGwgY2Vhc2UgaW1tZWRpYXRlbHkuCisKKzE1LjMuIFdlIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGxvc3Mgb3IgZGFtYWdlIGNhdXNlZCBieSBhIGRpc3RyaWJ1dGVkIGRlbmlhbC1vZi1zZXJ2aWNlIGF0dGFjaywgdmlydXNlcyBvciBvdGhlciB0ZWNobm9sb2dpY2FsbHkgaGFybWZ1bCBtYXRlcmlhbCB0aGF0IG1heSBpbmZlY3QgeW91ciBjb21wdXRlciBlcXVpcG1lbnQsIGNvbXB1dGVyIHByb2dyYW1zLCBkYXRhIG9yIG90aGVyIHByb3ByaWV0YXJ5IG1hdGVyaWFsIGR1ZSB0byB5b3VyIHVzZSBvZiBvdXIgU2l0ZSBvciB0byB5b3VyIGRvd25sb2FkaW5nIG9mIGFueSBtYXRlcmlhbCBwb3N0ZWQgb24gaXQsIG9yIG9uIGFueSB3ZWJzaXRlIGxpbmtlZCB0byBpdC4KKworCisxNi4gTElOS1MgRlJPTSBPVVIgU0lURQorCisxNi4xLiBXaGVyZSBvdXIgU2l0ZSBjb250YWlucyBsaW5rcyB0byBvdGhlciBzaXRlcyBhbmQgcmVzb3VyY2VzIHByb3ZpZGVkIGJ5IHRoaXJkIHBhcnRpZXMsIHRoZXNlIGxpbmtzIGFyZSBwcm92aWRlZCBmb3IgeW91ciBpbmZvcm1hdGlvbiBvbmx5LiBXZSBoYXZlIG5vIGNvbnRyb2wgb3ZlciB0aGUgY29udGVudHMgb2YgdGhvc2Ugc2l0ZXMgb3IgcmVzb3VyY2VzLCBhbmQgYWNjZXB0IG5vIHJlc3BvbnNpYmlsaXR5IGZvciB0aGVtIG9yIGZvciBhbnkgbG9zcyBvciBkYW1hZ2UgdGhhdCBtYXkgYXJpc2UgZnJvbSB5b3VyIHVzZSBvZiB0aGVtLgorCisKKzE3LiBKVVJJU0RJQ1RJT04gQU5EIEFQUExJQ0FCTEUgTEFXCisKKzE3LjEuIFRoZSBFbmdsaXNoIGNvdXJ0cyB3aWxsIGhhdmUgbm9uLWV4Y2x1c2l2ZSBqdXJpc2RpY3Rpb24gb3ZlciBhbnkgY2xhaW0gYXJpc2luZyBmcm9tLCBvciByZWxhdGVkIHRvLCBhIHZpc2l0IHRvIG91ciBTaXRlIGFsdGhvdWdoIHdlIHJldGFpbiB0aGUgcmlnaHQgdG8gYnJpbmcgcHJvY2VlZGluZ3MgYWdhaW5zdCB5b3UgZm9yIGJyZWFjaCBvZiB0aGVzZSBjb25kaXRpb25zIGluIHlvdXIgY291bnRyeSBvZiByZXNpZGVuY2Ugb3IgYW55IG90aGVyIHJlbGV2YW50IGNvdW50cnkuIFRoZXNlIHRlcm1zIG9mIHVzZSBhcmUgZ292ZXJuZWQgYnkgRW5nbGlzaCBsYXcuCisKKworMTguIFRSQURFIE1BUktTCisKKzE4LjEuICJNZW5kZWxleeKEoiIgaXMgYSB0cmFkZSBtYXJrIG9mIE1lbmRlbGV5IExpbWl0ZWQuCisKKworMTkuIFZBUklBVElPTlMKKworMTkuMS4gV2UgbWF5IHJldmlzZSB0aGVzZSB0ZXJtcyBvZiB1c2UgYXQgYW55IHRpbWUgYnkgYW1lbmRpbmcgdGhpcyBwYWdlLiBZb3UgYXJlIGV4cGVjdGVkIHRvIGNoZWNrIHRoaXMgcGFnZSBmcm9tIHRpbWUgdG8gdGltZSB0byB0YWtlIG5vdGljZSBvZiBhbnkgY2hhbmdlcyB3ZSBtYWtlLCBhcyB0aGV5IGFyZSBiaW5kaW5nIG9uIHlvdS4KKworCisyMC4gVU5JVEVEIFNUQVRFUyBPRiBBTUVSSUNBIEZFREVSQUwgQUdFTkNJRVMKKworMjAuMS4gVXNlIGJ5IFUuUy5BLiBmZWRlcmFsIGFnZW5jaWVzIHdpbGwgZm9sbG93IHRoZSBhbWVuZGVkIHRlcm1zIGZvdW5kIGhlcmUuCisKKworMjEuIFlPVVIgQ09OQ0VSTlMKKworMjEuMS4gSWYgeW91IGhhdmUgYW55IGNvbW1lbnRzIG9uIG91ciBTaXRlIG9yIG91ciBTb2Z0d2FyZSwgcGxlYXNlIGNvbnRhY3QgdXMuCisKK1RoYW5rIHlvdSBmb3IgdmlzaXRpbmcgb3VyIFNpdGUgYW5kIHVzaW5nIG91ciBTb2Z0d2FyZS4KKworCitUaGVzZSBUZXJtcyBvZiBVc2Ugd2VyZSBsYXN0IHVwZGF0ZWQgb24gMTYsIE5vdmVtYmVyLCAyMDEwLgorCitDb3B5cmlnaHQgwqkgMjAxMCBNZW5kZWxleSBMdGQuIOKAkyBBbGwgUmlnaHRzIFJlc2VydmVkLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvTWljcm9DaGlwLVBLMiBiL2xpY2Vuc2VzL01pY3JvQ2hpcC1QSzIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNkNjQ4ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL01pY3JvQ2hpcC1QSzIKQEAgLTAsMCArMSwxOTMgQEAKK0lNUE9SVEFOVDogCitZT1UgTVVTVCBBQ0NFUFQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgTElDRU5TRSBBR1JFRU1FTlQKK1RPIFJFQ0VJVkUgQSBMSUNFTlNFIEZPUiBUSEUgQUNDT01QQU5ZSU5HIFNPRlRXQVJFLiAgVE8gQUNDRVBUIFRIRQorVEVSTVMgT0YgVEhJUyBMSUNFTlNFLCBPUEVOIFRISVMgUEFDS0FHRSBBTkQgUFJPQ0VFRCBXSVRIIFRIRQorRE9XTkxPQUQgT1IgVVNFIE9GIFRIRSBTT0ZUV0FSRS4gIElGIFlPVSBETyBOT1QgQUNDRVBUIFRIRVNFIExJQ0VOU0UKK1RFUk1TLCBETyBOT1QgT1BFTiBUSElTIFBBQ0tBR0UsIERPV05MT0FELCBPUiBVU0UgVEhJUyBTT0ZUV0FSRS4KKworUElDa2l0KHRtKSAyIFBLMkNNRCBTT0ZUV0FSRSBMSUNFTlNFIAorCitUaGlzIExpY2Vuc2UgQWdyZWVtZW50IChBZ3JlZW1lbnQpIGlzIGEgY29udHJhY3QgYmV0d2VlbiBZb3UgKGFzCithbiBpbmRpdmlkdWFsIG9yIGFzIGEgcmVwcmVzZW50YXRpdmUgb2YgeW91ciBlbXBsb3llcikgYW5kCitNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmNvcnBvcmF0ZWQgKCJDb21wYW55IikgZm9yIHRoZSBQSUNraXQodG0pIDIKK1BLMkNNRCBzb2Z0d2FyZSAoaW5jbHVkaW5nIHNvdXJjZSBjb2RlKSBhY2NvbXBhbnlpbmcgdGhpcyBBZ3JlZW1lbnQKKyh0aGUgIlNvZnR3YXJlIikuICBJbiBjb25zaWRlcmF0aW9uIGZvciBhY2Nlc3MgdG8gdGhlIFNvZnR3YXJlLCBZb3UKK2FncmVlIHRvIGJlIGJvdW5kIGJ5IHRoaXMgQWdyZWVtZW50LiAKKworMS4gIExJQ0VOU0UgR1JBTlQuIFN1YmplY3QgdG8gYWxsIG9mIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgordGhpcyBBZ3JlZW1lbnQsIENvbXBhbnkgZ3JhbnRzIFlvdSBhIG5vbi1leGNsdXNpdmUsIG5vbi0KK3N1YmxpY2Vuc2FibGUsIG5vbi10cmFuc2ZlcmFibGUgbGljZW5zZSB0byB1c2UgdGhlIFNvZnR3YXJlIHdpdGgKK0NvbXBhbnkgcHJvZHVjdHMsIG1vZGlmeSB0aGUgU29mdHdhcmUgZm9yIHVzZSB3aXRoIENvbXBhbnkgcHJvZHVjdHMsCithbmQgbWFya2V0LCBzZWxsIG9yIG90aGVyd2lzZSBkaXN0cmlidXRlOiAKKworKGEpIFlvdXIgZW5kIGFwcGxpY2F0aW9uIHRoYXQgaW50ZWdyYXRlcyBTb2Z0d2FyZSBhbmQgQ29tcGFueQorICAgIHByb2R1Y3RzICgiTGljZW5zZWUgUHJvZHVjdCIpOyBvciAKKworKGIpIFlvdXIgbW9kaWZpY2F0aW9ucyB0byB0aGUgU29mdHdhcmUgcHJvdmlkZWQgdGhhdCB0aGUgbW9kaWZpZWQKKyAgICBTb2Z0d2FyZSBoYXMgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgYW5kIGRpc2NsYWltZXIgbm90aWNlCisgICAgcHJvbWluZW50bHkgcG9zdGVkIGluIGEgbG9jYXRpb24gd2hlcmUgZW5kIHVzZXJzIHdpbGwgc2VlIGl0CisgICAgKGUuZy4sIGluc3RhbGxhdGlvbiBwcm9ncmFtLCBwcm9ncmFtIGhlYWRlcnMsIEFib3V0IEJveCwgZXRjLik6CisKKyJDb3B5cmlnaHQgKGMpIDIwMDUtMjAwOCBNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmMuIEFsbCByaWdodHMKK3Jlc2VydmVkLiBUaGlzIHZlcnNpb24gb2YgdGhlIFBJQ2tpdCh0bSkgMiBQSzJDTUQgU29mdHdhcmUgaGFzIGJlZW4KK21vZGlmaWVkIGJ5IFtJTlNFUlQgWU9VUiBOQU1FLCBEQVRFIE9GIFNPRlRXQVJFIE1PRElGSUNBVElPTiBIRVJFXS4KK1lvdSBtYXkgdXNlLCBjb3B5LCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGZvciB1c2Ugd2l0aAorTWljcm9jaGlwIHByb2R1Y3RzIG9ubHkuICBJZiB5b3UgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgb3IgaXRzCitkZXJpdmF0aXZlcywgdGhlIFNvZnR3YXJlIG11c3QgaGF2ZSB0aGlzIGNvcHlyaWdodCBhbmQgZGlzY2xhaW1lcgorbm90aWNlIHByb21pbmVudGx5IHBvc3RlZCBpbiBhIGxvY2F0aW9uIHdoZXJlIGVuZCB1c2VycyB3aWxsIHNlZSBpdAorKGUuZy4sIGluc3RhbGxhdGlvbiBwcm9ncmFtLCBwcm9ncmFtIGhlYWRlcnMsIEFib3V0IEJveCwgZXRjLikuICBUbwordGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBsYXcsIHRoaXMgU29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQKKyJBUyBJUyIgYW5kIFdJVEhPVVQgQU5ZIFdBUlJBTlRZIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gQU5ZCitJTVBMSUVEIFdBUlJBTlRZIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgUEFSVElDVUxBUiBQVVJQT1NFLAorb3IgTk9OLUlORlJJTkdFTUVOVC4gSU4gTk8gRVZFTlQgV0lMTCBNSUNST0NISVAgT1IgSVRTIExJQ0VOU09SUyBCRQorTElBQkxFIEZPUiBBTlkgSU5DSURFTlRBTCwgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFU09GIEFOWSBLSU5EIEFSSVNJTkcgRlJPTSBPUiBSRUxBVEVEIFRPIFRIRSBVU0UsIE1PRElGSUNBVElPTgorT1IgRElTVFJJQlVUSU9OIE9GIFRISVMgU09GVFdBUkUgT1IgSVRTIERFUklWQVRJVkVTLiIKKworWW91IG1heSBub3QgY29weSBvciByZXByb2R1Y2UgYWxsIG9yIGFueSBwb3J0aW9uIG9mIFNvZnR3YXJlLCBleGNlcHQKK3RvIHRoZSBleHRlbnQgdGhhdCBzdWNoIGFjdGl2aXR5IGlzIHNwZWNpZmljYWxseSBhbGxvd2VkIGJ5IHRoaXMKK0FncmVlbWVudCBvciBleHByZXNzbHkgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3IG5vdHdpdGhzdGFuZGluZwordGhlIGZvcmVnb2luZyBsaW1pdGF0aW9ucy4KKworQWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUgY3JlYXRlZCBieSBZb3Ugb3IgZm9yIFlvdSwgaW5jbHVkaW5nCitkZXJpdmF0aXZlcywgbXVzdCBpbmNsdWRlIHRoZSBjb3B5cmlnaHQsIHRyYWRlbWFyayBhbmQgb3RoZXIKK3Byb3ByaWV0YXJ5IG5vdGljZXMgYXMgdGhleSBhcHBlYXIgb24gdGhlIG9yaWdpbmFsIG9yLCBpbiB0aGUgZXZlbnQKK1lvdSBtb2RpZmllZCB0aGUgU29mdHdhcmUsIHRoZSBub3RpY2UgbGlzdGVkIGFib3ZlLiBZb3UgbWF5IG5vdAorcmVtb3ZlIG9yIGFsdGVyIGFueSBpZGVudGlmeWluZyBzY3JlZW4gdGhhdCBpcyBwcm9kdWNlZCBieSB0aGUKK1NvZnR3YXJlLgorCisyLiAgT1dORVJTSElQIEFORCBUSVRMRS4gU29mdHdhcmUgaXMgbGljZW5zZWQgcHVyc3VhbnQgdG8gdGhlCisgICAgQWdyZWVtZW50LCBub3Qgc29sZC4gIEFsbCByaWdodCwgdGl0bGUgYW5kIGludGVyZXN0LCBpbmNsdWRpbmcKKyAgICBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzLCBpbiBhbmQgdG8gU29mdHdhcmUsIGRlcml2YXRpdmVzCisgICAgdGhlcmVvZiwgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNvZnR3YXJlIGluIG1pY3JvY29udHJvbGxlcnMsCisgICAgYW5kIGhhcmR3YXJlIGFuZCBzb2Z0d2FyZSBpbXBsZW1lbnRhdGlvbnMgb2YgU29mdHdhcmUgb3IKKyAgICBkZXJpdmF0aXZlcyBzaGFsbCByZW1haW4gaW4gQ29tcGFueS4gWW91IHdpbGwgbm90IG9idGFpbgorICAgIG93bmVyc2hpcCByaWdodHMgdG8gZGVyaXZhdGl2ZXMgb2YgU29mdHdhcmUsIGFuZCBieSBhY2NlcHRpbmcKKyAgICB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQgYXNzaWduIGFueSBzdWNoIHJpZ2h0cyB0byBDb21wYW55CisgICAgdGhhdCBZb3UgZG8gcmVjZWl2ZS4gIEV4Y2VwdCBhcyBzcGVjaWZpY2FsbHkgc3RhdGVkIGluIHRoZQorICAgIEFncmVlbWVudCwgeW91IGFyZSBncmFudGVkIG5vIG90aGVyIHJpZ2h0cywgZXhwcmVzcyBvciBpbXBsaWVkLAorICAgIHRvIHRoZSBTb2Z0d2FyZSwgZGVyaXZhdGl2ZXMgdGhlcmVvZiwgb3Igb3RoZXIgQ29tcGFueQorICAgIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBzdWNoIGFzIHRyYWRlIHNlY3JldHMsIHBhdGVudHMsIAorICAgIGNvcHlyaWdodHMsIGFuZCB0cmFkZW1hcmtzLgorCiszLiAgQ09ORklERU5USUFMSVRZLiBZb3UgYWdyZWUgbm90IHRvIGRpc2Nsb3NlIFNvZnR3YXJlIHRvIGFueQorICAgIHRoaXJkIHBhcnR5LCBleGNlcHQgYXMgcGVybWl0dGVkIGJ5IHRoaXMgQWdyZWVtZW50LiAgVG8gdGhlCisgICAgZXh0ZW50IHRoYXQgU29mdHdhcmUgYmVjb21lcyBwYXJ0IG9mIHRoZSBwdWJsaWMgZG9tYWluLCBpcworICAgIGluZGVwZW5kZW50bHkgZGV2ZWxvcGVkLCBvciBvYnRhaW5lZCBmcmVlIGZyb20gYW55IG9ibGlnYXRpb24KKyAgICBvZiBjb25maWRlbnRpYWxpdHkgdGhlbiB0aGUgb2JsaWdhdGlvbiBvZiBjb25maWRlbnRpYWxpdHkKKyAgICB1bmRlciB0aGlzIEFncmVlbWVudCBzaGFsbCBub3QgYXBwbHkuCisKKzQuICBDT1BZUklHSFQuIFRoZSBTb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgVS5TLiBjb3B5cmlnaHQgbGF3cworICAgIGFuZCBpbnRlcm5hdGlvbmFsIGNvcHlyaWdodCB0cmVhdGllcywgYXMgd2VsbCBhcyBvdGhlcgorICAgIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIGFuZCB0cmVhdGllcy4KKworNS4gIFRFUk1JTkFUSU9OIE9GIEFHUkVFTUVOVC4gV2l0aG91dCBwcmVqdWRpY2UgdG8gYW55IG90aGVyCisgICAgcmlnaHRzLCBDb21wYW55IG1heSB0ZXJtaW5hdGUgdGhpcyBBZ3JlZW1lbnQgaWYgWW91IGZhaWwgdG8KKyAgICBjb21wbHkgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQuCisgICAgVXBvbiB0ZXJtaW5hdGlvbiwgWW91IHNoYWxsIGltbWVkaWF0ZWx5OiAoYSkgc3RvcCB1c2luZyBhbmQKKyAgICBkaXN0cmlidXRpbmcgdGhlIFNvZnR3YXJlIGFuZCBkZXJpdmF0aXZlcyB0aGVyZW9mOyAoYikgZGVzdHJveQorICAgIGFsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlIGFuZCBkZXJpdmF0aXZlcyBpbiB5b3VyIHBvc3Nlc3Npb247CisgICAgYW5kIChjKSByZW1vdmUgU29mdHdhcmUgZnJvbSBhbnkgb2YgWW91ciB0YW5naWJsZSBtZWRpYSBhbmQKKyAgICBmcm9tIHN5c3RlbXMgb24gd2hpY2ggdGhlIFNvZnR3YXJlIGV4aXN0cy4gIFRlcm1pbmF0aW9uIG9mCisgICAgdGhpcyBMaWNlbnNlIHNoYWxsIG5vdCBhZmZlY3QgdGhlIHJpZ2h0IG9mIGFueSBlbmQgdXNlciBvcgorICAgIGNvbnN1bWVyIHRvIHVzZSBMaWNlbnNlZSBQcm9kdWN0IG9yIG1vZGlmaWVkIFNvZnR3YXJlOworICAgIHByb3ZpZGVkIHRoYXQgc3VjaCBwcm9kdWN0IG9yIG1vZGlmaWVkIFNvZnR3YXJlIHdhcyBwdXJjaGFzZWQKKyAgICBvciBkaXN0cmlidXRlZCBwcmlvciB0byB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorCis2LiAgREFOR0VST1VTIEFQUExJQ0FUSU9OUy4gWW91IGFja25vd2xlZGdlIHRoYXQgU29mdHdhcmUgaGFzIG5vdAorICAgIGJlZW4gZGVzaWduZWQgdG8gYmUgZmF1bHQgdG9sZXJhbnQuICBZb3Ugd2FycmFudCB0aGF0IFlvdSB3aWxsCisgICAgbm90IHVzZSBTb2Z0d2FyZSBvciBkZXJpdmF0aXZlcyBpbiBhIGRhbmdlcm91cywgaGF6YXJkb3VzLCBvcgorICAgIGxpZmUgc3VwcG9ydGluZyBhcHBsaWNhdGlvbiB3aGVyZSB0aGUgZmFpbHVyZSBvZiBzdWNoCisgICAgYXBwbGljYXRpb24gY291bGQgbGVhZCBkaXJlY3RseSB0byBkZWF0aCwgcGVyc29uYWwgaW5qdXJ5LCBvcgorICAgIGVudmlyb25tZW50YWwgZGFtYWdlLgorCis3LiAgSU5ERU1OSVRZLiBZb3Ugd2lsbCBpbmRlbW5pZnkgYW5kIGhvbGQgQ29tcGFueSBhbmQgaXRzCisgICAgbGljZW5zb3IocyksIGl0cyByZWxhdGVkIGNvbXBhbmllcyBhbmQgaXRzIHN1cHBsaWVycywgaGFybWxlc3MKKyAgICBmb3IsIGZyb20gYW5kIGFnYWluc3QsIGFueSBjbGFpbXMsIGNvc3RzIChpbmNsdWRpbmcgYXR0b3JuZXkncworICAgIGZlZXMpLCBkYW1hZ2VzIG9yIGxpYWJpbGl0aWVzLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgICAgcHJvZHVjdCBsaWFiaWxpdHkgY2xhaW1zLCBhcmlzaW5nIG91dCBvZjogKGEpIFlvdXIgdXNlLAorICAgIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBTb2Z0d2FyZSBhbmQgaXRzCisgICAgZGVyaXZhdGl2ZXM7IG9yIChiKSB2aW9sYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQuIENPTVBBTlkgQU5ECisgICAgSVRTIExJQ0VOU09SKFMpIEFTU1VNRSBOTyBSRVNQT05TSUJJTElUWSBGT1IsIE5PUiBJTkRFTU5JRlkKKyAgICBZT1UgQUdBSU5TVCwgQU5ZIFBBVEVOVCwgQ09QWVJJR0hUIE9SIE9USEVSIElOVEVMTEVDVFVBTAorICAgIFBST1BFUlRZIENMQUlNUyBCUk9VR0hUIEFHQUlOU1QgWU9VIFJFTEFUSU5HIFRPIFRIRSBTT0ZUV0FSRS4KKworOC4gIE5PIFdBUlJBTlRZLiBUTyBUSEUgTUFYSU1VTSBFWFRFTlQgUEVSTUlUVEVEIEJZIExBVywgQ09NUEFOWQorICAgIEFORCBJVFMgTElDRU5TT1IgUFJPVklERSBTT0ZUV0FSRSAiQVMgSVMiIEFORCBFWFBSRVNTTFkKKyAgICBESVNDTEFJTSBBTlkgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIFdIRVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAorICAgIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAgICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgorICAgIE5PTi1JTkZSSU5HRU1FTlQuIFlPVSBBU1NVTUUgVEhFIEVOVElSRSBSSVNLIEFSSVNJTkcgT1VUIE9GCisgICAgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFNPRlRXQVJFLCBBUyBXRUxMIEFTIEFOWSBERVJJVkFUSVZFUyBPRgorICAgIFRIRSBTT0ZUV0FSRSBNQURFIEZPUiBZT1UgT1IgT04gWU9VUiBCRUhBTEYuICBDT01QQU5ZIEFORCBJVFMKKyAgICBMSUNFTlNPUihTKSBBU1NVTUUgTk8gUkVTUE9OU0lCSUxJVFkgRk9SIFRIRSBBQ0NVUkFDWSBPUgorICAgIEVSUk9SUyBPUiBPTUlTU0lPTlMgT0YgU09GVFdBUkUgQU5EIERPIE5PVCBXQVJSQU5UIFRIRQorICAgIEZPTExPV0lORzogKEEpIFRIRSBGVU5DVElPTlMgQ09OVEFJTkVEIElOIFNPRlRXQVJFIFdJTEwgTUVFVAorICAgIFlPVVIgUkVRVUlSRU1FTlRTOyAoQikgVEhFIE9QRVJBVElPTiBPRiBTT0ZUV0FSRSBXSUxMIEJFCisgICAgVU5JTlRFUlJVUFRFRCBPUiBFUlJPUi1GUkVFOyBPUiAoQykgQU5ZIERFRkVDVFMgSU4gU09GVFdBUkUKKyAgICBXSUxMIEJFIENPUlJFQ1RFRC4gCisKKzkuICBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS4gQ09NUEFOWSBBTkQgSVRTIExJQ0VOU09SIFRPVEFMCisgICAgQUdHUkVHQVRFIExJQUJJTElUWSBJTiBDT05UUkFDVCwgV0FSUkFOVFksIFRPUlQgKElOQ0xVRElORworICAgIE5FR0xJR0VOQ0UgT1IgQlJFQUNIIE9GIFNUQVRVVE9SWSBEVVRZKSwgU1RSSUNUIExJQUJJTElUWSwKKyAgICBJTkRFTU5JVFksIENPTlRSSUJVVElPTiwgT1IgT1RIRVJXSVNFLCBTSEFMTCBOT1QgRVhDRUVEIFRIRQorICAgIExJQ0VOU0UgRkVFIFlPVSBQQUlEIEZPUiBUSEUgU09GVFdBUkUuIElOIE5PIEVWRU5UIFNIQUxMCisgICAgQ09NUEFOWSBBTkQgSVRTIExJQ0VOU09SIEJFIExJQUJMRSBGT1IgQU5ZIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgICAgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBMT1NUIFBST0ZJVFMgT1IgTE9TVCBEQVRBLAorICAgIEhBUk0gVE8gWU9VUiBFUVVJUE1FTlQsIENPU1QgT0YgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURQorICAgIEdPT0RTLCBURUNITk9MT0dZIE9SIFNFUlZJQ0VTLCBBTlkgQ0xBSU1TIEJZIFRISVJEIFBBUlRJRVMKKyAgICAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBBTlkgREVGRU5TRSBUSEVSRU9GKSwgQU5ZIENMQUlNUworICAgIEZPUiBJTkRFTU5JVFkgT1IgQ09OVFJJQlVUSU9OLCBPUiBPVEhFUiBTSU1JTEFSIENPU1RTLiBJZiBhbnkKKyAgICByZW1lZHkgaXMgZGV0ZXJtaW5lZCB0byBoYXZlIGZhaWxlZCBvZiBpdHMgZXNzZW50aWFsIHB1cnBvc2UsCisgICAgYWxsIGxpbWl0YXRpb25zIG9mIGxpYWJpbGl0eSBhbmQgZXhjbHVzaW9uIG9mIGRhbWFnZXMgc2V0IGZvcnRoCisgICAgaW4gdGhlIGxpbWl0ZWQgd2FycmFudHkgc2hhbGwgcmVtYWluIGluIGVmZmVjdC4KKworMTAuIFNVUlZJVkFMLiAgU2VjdGlvbnMgMi0xNSBzaGFsbCBzdXJ2aXZlIHRlcm1pbmF0aW9uIG9mIHRoaXMKKyAgICAgQWdyZWVtZW50LiAKKworMTEuIENIT0lDRSBPRiBMQVc7IFZFTlVFOyBMSU1JVEFUSU9OUyBPTiBDTEFJTVMuIFlvdSBhZ3JlZSB0aGF0CisgICAgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBjb25mbGljdHMgcmVnYXJkaW5nIFNvZnR3YXJlLCBzaGFsbCBiZQorICAgIGNvbnN0cnVlZCwgaW50ZXJwcmV0ZWQgYW5kIGdvdmVybmVkIGJ5IHRoZSBsYXdzLCBhbmQgc3ViamVjdAorICAgIHRvIHRoZSBleGNsdXNpdmUganVyaXNkaWN0aW9uIG9mIHRoZSBzdGF0ZSBvciB0ZXJyaXRvcnkgaW4gdGhlCisgICAgQ29tcGFueSBUZXJtcyBhbmQgQ29uZGl0aW9ucyBvZiBTYWxlICgiVCZDcyIpLiAgSW4gdGhlIGV2ZW50CisgICAgdGhhdCB0aGUgVCZDcyBkbyBub3QgYXBwbHkgb3IgdGhlIGNob2ljZSBvZiBsYXcgb3IKKyAgICBqdXJpc2RpY3Rpb24gYXJlIG5vdCBpbmRpY2F0ZWQgdGhlcmVpbiwgdGhlbiB0aGlzIEFncmVlbWVudAorICAgIHNoYWxsIGJlIGNvbnN0cnVlZCwgaW50ZXJwcmV0ZWQgYW5kIGdvdmVybmVkIGJ5IHRoZSBsYXdzLCBhbmQKKyAgICBzdWJqZWN0IHRvIHRoZSBleGNsdXNpdmUganVyaXNkaWN0aW9uIG9mIHRoZSBTdGF0ZSBvZiBBcml6b25hLAorICAgIFUuUy5BLiB3aXRob3V0IHJlZ2FyZCB0byBhbnkgY29uZmxpY3Qgb2YgbGF3cyBwcmluY2lwbGVzLiBZb3UKKyAgICBhZ3JlZSB0aGF0IHJlZ2FyZGxlc3Mgb2YgYW55IGxhdyB0byB0aGUgY29udHJhcnksIGFueSBjYXVzZSBvZgorICAgIGFjdGlvbiByZWxhdGVkIHRvIG9yIGFyaXNpbmcgb3V0IG9mIHRoaXMgQWdyZWVtZW50IG9yIFNvZnR3YXJlCisgICAgbXVzdCBiZSBmaWxlZCB3aXRoaW4gb25lIHllYXIgYWZ0ZXIgc3VjaCBjYXVzZSBvZiBhY3Rpb24KKyAgICBhcm9zZSwgb3IgYmUgY29uc2lkZXJlZCB3YWl2ZWQuCisKKzEyLiBFWFBPUlQgQ09NUExJQU5DRS4gWW91IHdpbGwgbm90IGV4cG9ydCBvciByZS1leHBvcnQgU29mdHdhcmUsCisgICAgdGVjaG5pY2FsIGRhdGEsIGRpcmVjdCBwcm9kdWN0cyB0aGVyZW9mIG9yIGFueSBvdGhlciBpdGVtcworICAgIHdoaWNoIHdvdWxkIHZpb2xhdGUgYW55IGFwcGxpY2FibGUgZXhwb3J0IGNvbnRyb2wgbGF3cyBhbmQKKyAgICByZWd1bGF0aW9ucyBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgdGhvc2Ugb2YgdGhlIFVuaXRlZAorICAgIFN0YXRlcyBhbmQgdGhlIFVuaXRlZCBLaW5nZG9tLiAgWW91IGFncmVlIHRoYXQgaXQgaXMgWW91cgorICAgIHJlc3BvbnNpYmlsaXR5IHRvIG9idGFpbiBjb3BpZXMgb2YgYW5kIHRvIGZhbWlsaWFyaXplIHlvdXJzZWxmCisgICAgZnVsbHkgd2l0aCB0aGVzZSBsYXdzIGFuZCByZWd1bGF0aW9ucyB0byBhdm9pZCB2aW9sYXRpb24uCisKKzEzLiBBU1NJR05NRU5ULiBOZWl0aGVyIHRoaXMgYWdyZWVtZW50IG5vciBhbnkgcmlnaHRzLCBsaWNlbnNlcworICAgIG9yIG9ibGlnYXRpb25zIGhlcmV1bmRlciwgbWF5IGJlIGFzc2lnbmVkIGJ5IFlvdSB3aXRob3V0IHRoZQorICAgIENvbXBhbnkncyBwcmlvciB3cml0dGVuIGFwcHJvdmFsLgorCisxNC4gRU5USVJFIEFHUkVFTUVOVDogTU9ESUZJQ0FUSU9OUyBBTkQgV0FJVkVSLiBUaGlzIEFncmVlbWVudAorICAgIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IG9mIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdAorICAgIHRvIHRoZSBzdWJqZWN0IG1hdHRlciBvZiB0aGlzIEFncmVlbWVudCwgYW5kIG1lcmdlcyBhbmQKKyAgICBzdXBlcnNlZGVzIGFsbCBjb21tdW5pY2F0aW9ucyByZWxhdGluZyB0byB0aGlzIHN1YmplY3QgbWF0dGVyLAorICAgIHdoZXRoZXIgd3JpdHRlbiBvciBvcmFsLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHNldCBmb3J0aCBpbiB0aGlzCisgICAgQWdyZWVtZW50LCBubyBtb2RpZmljYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQgd2lsbCBiZSBlZmZlY3RpdmUKKyAgICB1bmxlc3MgbWFkZSBpbiB3cml0aW5nIHNpZ25lZCBieSBDb21wYW55LiAgTm8gZmFpbHVyZSBvciBkZWxheQorICAgIGJ5IENvbXBhbnkgb3IgaXRzIGxpY2Vuc29yKHMpIHRvIGFzc2VydCBhbnkgcmlnaHRzIG9yIHJlbWVkaWVzCisgICAgYXJpc2luZyBmcm9tIGEgYnJlYWNoIG9mIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGNvbnN0cnVlZCBhcyBhCisgICAgd2FpdmVyIG9yIGEgY29udGludWluZyB3YWl2ZXIgb2Ygc3VjaCByaWdodHMgYW5kIHJlbWVkaWVzLCBub3IKKyAgICBzaGFsbCBmYWlsdXJlIG9yIGRlbGF5IHRvIGFzc2VydCBhIGJyZWFjaCBiZSBkZWVtZWQgdG8gd2FpdmUgdGhhdAorICAgIG9yIGFueSBvdGhlciBicmVhY2guIElmIGFueSBwYXJ0IG9mIHRoaXMgQWdyZWVtZW50IGlzIGZvdW5kIGJ5IGEKKyAgICBjb3VydCBvZiBjb21wZXRlbnQganVyaXNkaWN0aW9uIHRvIGJlIGludmFsaWQsIHVubGF3ZnVsIG9yCisgICAgdW5lbmZvcmNlYWJsZSB0aGVuIHN1Y2ggcGFydCBzaGFsbCBiZSBzZXZlcmVkIGZyb20gdGhlIHJlbWFpbmRlcgorICAgIG9mIHRoaXMgQWdyZWVtZW50IGFuZCByZXBsYWNlZCB3aXRoIGEgdmFsaWQgcHJvdmlzaW9uIHRoYXQgY29tZXMKKyAgICBjbG9zZXN0IHRvIHRoZSBpbnRlbnRpb24gdW5kZXJseWluZyB0aGUgaW52YWxpZCBwcm92aXNpb24uCisKK0NvcHlyaWdodCAoYykgMjAwNS0yMDA4LCBNaWNyb2NoaXAgVGVjaG5vbG9neSBJbmMuIEFsbCByaWdodHMKK3Jlc2VydmVkLiAKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL01pbmktWE1MIGIvbGljZW5zZXMvTWluaS1YTUwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ5ZDM1MwotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL01pbmktWE1MCkBAIC0wLDAgKzEsNTA3IEBACisJCQkgICBNaW5pLVhNTCBMaWNlbnNlCisJCQkgICBPY3RvYmVyIDE4LCAyMDA1CisKKworVGhlIE1pbmktWE1MIGxpYnJhcnkgYW5kIGluY2x1ZGVkIHByb2dyYW1zIGFyZSBwcm92aWRlZCB1bmRlciB0aGUKK3Rlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChMR1BMKSB3aXRoIHRoZQorZm9sbG93aW5nIGV4Y2VwdGlvbnM6CisKKyAgICAxLiBTdGF0aWMgbGlua2luZyBvZiBhcHBsaWNhdGlvbnMgdG8gdGhlIE1pbmktWE1MIGxpYnJhcnkKKyAgICAgICBkb2VzIG5vdCBjb25zdGl0dXRlIGEgZGVyaXZhdGl2ZSB3b3JrIGFuZCBkb2VzIG5vdCByZXF1aXJlCisgICAgICAgdGhlIGF1dGhvciB0byBwcm92aWRlIHNvdXJjZSBjb2RlIGZvciB0aGUgYXBwbGljYXRpb24sIHVzZQorICAgICAgIHRoZSBzaGFyZWQgTWluaS1YTUwgbGlicmFyaWVzLCBvciBsaW5rIHRoZWlyIGFwcGxpY2F0aW9ucworICAgICAgIGFnYWluc3QgYSB1c2VyLXN1cHBsaWVkIHZlcnNpb24gb2YgTWluaS1YTUwuCisKKyAgICAgICBJZiB5b3UgbGluayB0aGUgYXBwbGljYXRpb24gdG8gYSBtb2RpZmllZCB2ZXJzaW9uIG9mCisgICAgICAgTWluaS1YTUwsIHRoZW4gdGhlIGNoYW5nZXMgdG8gTWluaS1YTUwgbXVzdCBiZSBwcm92aWRlZAorICAgICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTEdQTCBpbiBzZWN0aW9ucyAxLCAyLCBhbmQgNC4KKworICAgIDIuIFlvdSBkbyBub3QgaGF2ZSB0byBwcm92aWRlIGEgY29weSBvZiB0aGUgTWluaS1YTUwgbGljZW5zZQorICAgICAgIHdpdGggcHJvZ3JhbXMgdGhhdCBhcmUgbGlua2VkIHRvIHRoZSBNaW5pLVhNTCBsaWJyYXJ5LCBub3IKKyAgICAgICBkbyB5b3UgaGF2ZSB0byBpZGVudGlmeSB0aGUgTWluaS1YTUwgbGljZW5zZSBpbiB5b3VyCisgICAgICAgcHJvZ3JhbSBvciBkb2N1bWVudGF0aW9uIGFzIHJlcXVpcmVkIGJ5IHNlY3Rpb24gNiBvZiB0aGUKKyAgICAgICBMR1BMLgorCisKKwwJCSAgR05VIExJQlJBUlkgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkJIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKwkgIENvcHlyaWdodCAoQykgMTk5MSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICAgICA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCisKKyAgICAgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgICAgICBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworICAgIFtUaGlzIGlzIHRoZSBmaXJzdCByZWxlYXNlZCB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IEdQTC4gIEl0IGlzCisgICBudW1iZXJlZCAyIGJlY2F1c2UgaXQgZ29lcyB3aXRoIHZlcnNpb24gMiBvZiB0aGUgb3JkaW5hcnkgR1BMLl0KKworCQkJICAgICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2VzIGFyZSBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UKK2ZyZWUgc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4KKworICBUaGlzIGxpY2Vuc2UsIHRoZSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFwcGxpZXMgdG8gc29tZQorc3BlY2lhbGx5IGRlc2lnbmF0ZWQgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlLCBhbmQgdG8gYW55CitvdGhlciBsaWJyYXJpZXMgd2hvc2UgYXV0aG9ycyBkZWNpZGUgdG8gdXNlIGl0LiAgWW91IGNhbiB1c2UgaXQgZm9yCit5b3VyIGxpYnJhcmllcywgdG9vLgorCisgIFdoZW4gd2Ugc3BlYWsgb2YgZnJlZSBzb2Z0d2FyZSwgd2UgYXJlIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QKK3ByaWNlLiAgT3VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2VzIGFyZSBkZXNpZ25lZCB0byBtYWtlIHN1cmUgdGhhdCB5b3UKK2hhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kIGNoYXJnZSBmb3IKK3RoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdAoraWYgeW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQKK2luIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBwcm90ZWN0IHlvdXIgcmlnaHRzLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmCit5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnksIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKKyAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSwgd2hldGhlciBncmF0aXMKK29yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHdlIGdhdmUKK3lvdS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZSBzb3VyY2UKK2NvZGUuICBJZiB5b3UgbGluayBhIHByb2dyYW0gd2l0aCB0aGUgbGlicmFyeSwgeW91IG11c3QgcHJvdmlkZQorY29tcGxldGUgb2JqZWN0IGZpbGVzIHRvIHRoZSByZWNpcGllbnRzIHNvIHRoYXQgdGhleSBjYW4gcmVsaW5rIHRoZW0KK3dpdGggdGhlIGxpYnJhcnksIGFmdGVyIG1ha2luZyBjaGFuZ2VzIHRvIHRoZSBsaWJyYXJ5IGFuZCByZWNvbXBpbGluZworaXQuICBBbmQgeW91IG11c3Qgc2hvdyB0aGVtIHRoZXNlIHRlcm1zIHNvIHRoZXkga25vdyB0aGVpciByaWdodHMuCisKKyAgT3VyIG1ldGhvZCBvZiBwcm90ZWN0aW5nIHlvdXIgcmlnaHRzIGhhcyB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQKK3RoZSBsaWJyYXJ5LCBhbmQgKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsCitwZXJtaXNzaW9uIHRvIGNvcHksIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgbGlicmFyeS4KKworICBBbHNvLCBmb3IgZWFjaCBkaXN0cmlidXRvcidzIHByb3RlY3Rpb24sIHdlIHdhbnQgdG8gbWFrZSBjZXJ0YWluCit0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZQorbGlicmFyeS4gIElmIHRoZSBsaWJyYXJ5IGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZQord2FudCBpdHMgcmVjaXBpZW50cyB0byBrbm93IHRoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbAordmVyc2lvbiwgc28gdGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMgd2lsbCBub3QgcmVmbGVjdCBvbgordGhlIG9yaWdpbmFsIGF1dGhvcnMnIHJlcHV0YXRpb25zLgorDAorICBGaW5hbGx5LCBhbnkgZnJlZSBwcm9ncmFtIGlzIHRocmVhdGVuZWQgY29uc3RhbnRseSBieSBzb2Z0d2FyZQorcGF0ZW50cy4gIFdlIHdpc2ggdG8gYXZvaWQgdGhlIGRhbmdlciB0aGF0IGNvbXBhbmllcyBkaXN0cmlidXRpbmcgZnJlZQorc29mdHdhcmUgd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgdGh1cyBpbiBlZmZlY3QKK3RyYW5zZm9ybWluZyB0aGUgcHJvZ3JhbSBpbnRvIHByb3ByaWV0YXJ5IHNvZnR3YXJlLiAgVG8gcHJldmVudCB0aGlzLAord2UgaGF2ZSBtYWRlIGl0IGNsZWFyIHRoYXQgYW55IHBhdGVudCBtdXN0IGJlIGxpY2Vuc2VkIGZvciBldmVyeW9uZSdzCitmcmVlIHVzZSBvciBub3QgbGljZW5zZWQgYXQgYWxsLgorCisgIE1vc3QgR05VIHNvZnR3YXJlLCBpbmNsdWRpbmcgc29tZSBsaWJyYXJpZXMsIGlzIGNvdmVyZWQgYnkgdGhlIG9yZGluYXJ5CitHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgd2hpY2ggd2FzIGRlc2lnbmVkIGZvciB1dGlsaXR5IHByb2dyYW1zLiAgVGhpcworbGljZW5zZSwgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFwcGxpZXMgdG8gY2VydGFpbgorZGVzaWduYXRlZCBsaWJyYXJpZXMuICBUaGlzIGxpY2Vuc2UgaXMgcXVpdGUgZGlmZmVyZW50IGZyb20gdGhlIG9yZGluYXJ5CitvbmU7IGJlIHN1cmUgdG8gcmVhZCBpdCBpbiBmdWxsLCBhbmQgZG9uJ3QgYXNzdW1lIHRoYXQgYW55dGhpbmcgaW4gaXQgaXMKK3RoZSBzYW1lIGFzIGluIHRoZSBvcmRpbmFyeSBsaWNlbnNlLgorCisgIFRoZSByZWFzb24gd2UgaGF2ZSBhIHNlcGFyYXRlIHB1YmxpYyBsaWNlbnNlIGZvciBzb21lIGxpYnJhcmllcyBpcyB0aGF0Cit0aGV5IGJsdXIgdGhlIGRpc3RpbmN0aW9uIHdlIHVzdWFsbHkgbWFrZSBiZXR3ZWVuIG1vZGlmeWluZyBvciBhZGRpbmcgdG8gYQorcHJvZ3JhbSBhbmQgc2ltcGx5IHVzaW5nIGl0LiAgTGlua2luZyBhIHByb2dyYW0gd2l0aCBhIGxpYnJhcnksIHdpdGhvdXQKK2NoYW5naW5nIHRoZSBsaWJyYXJ5LCBpcyBpbiBzb21lIHNlbnNlIHNpbXBseSB1c2luZyB0aGUgbGlicmFyeSwgYW5kIGlzCithbmFsb2dvdXMgdG8gcnVubmluZyBhIHV0aWxpdHkgcHJvZ3JhbSBvciBhcHBsaWNhdGlvbiBwcm9ncmFtLiAgSG93ZXZlciwgaW4KK2EgdGV4dHVhbCBhbmQgbGVnYWwgc2Vuc2UsIHRoZSBsaW5rZWQgZXhlY3V0YWJsZSBpcyBhIGNvbWJpbmVkIHdvcmssIGEKK2Rlcml2YXRpdmUgb2YgdGhlIG9yaWdpbmFsIGxpYnJhcnksIGFuZCB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQordHJlYXRzIGl0IGFzIHN1Y2guCisKKyAgQmVjYXVzZSBvZiB0aGlzIGJsdXJyZWQgZGlzdGluY3Rpb24sIHVzaW5nIHRoZSBvcmRpbmFyeSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZSBmb3IgbGlicmFyaWVzIGRpZCBub3QgZWZmZWN0aXZlbHkgcHJvbW90ZSBzb2Z0d2FyZQorc2hhcmluZywgYmVjYXVzZSBtb3N0IGRldmVsb3BlcnMgZGlkIG5vdCB1c2UgdGhlIGxpYnJhcmllcy4gIFdlCitjb25jbHVkZWQgdGhhdCB3ZWFrZXIgY29uZGl0aW9ucyBtaWdodCBwcm9tb3RlIHNoYXJpbmcgYmV0dGVyLgorCisgIEhvd2V2ZXIsIHVucmVzdHJpY3RlZCBsaW5raW5nIG9mIG5vbi1mcmVlIHByb2dyYW1zIHdvdWxkIGRlcHJpdmUgdGhlCit1c2VycyBvZiB0aG9zZSBwcm9ncmFtcyBvZiBhbGwgYmVuZWZpdCBmcm9tIHRoZSBmcmVlIHN0YXR1cyBvZiB0aGUKK2xpYnJhcmllcyB0aGVtc2VsdmVzLiAgVGhpcyBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8KK3Blcm1pdCBkZXZlbG9wZXJzIG9mIG5vbi1mcmVlIHByb2dyYW1zIHRvIHVzZSBmcmVlIGxpYnJhcmllcywgd2hpbGUKK3ByZXNlcnZpbmcgeW91ciBmcmVlZG9tIGFzIGEgdXNlciBvZiBzdWNoIHByb2dyYW1zIHRvIGNoYW5nZSB0aGUgZnJlZQorbGlicmFyaWVzIHRoYXQgYXJlIGluY29ycG9yYXRlZCBpbiB0aGVtLiAgKFdlIGhhdmUgbm90IHNlZW4gaG93IHRvIGFjaGlldmUKK3RoaXMgYXMgcmVnYXJkcyBjaGFuZ2VzIGluIGhlYWRlciBmaWxlcywgYnV0IHdlIGhhdmUgYWNoaWV2ZWQgaXQgYXMgcmVnYXJkcworY2hhbmdlcyBpbiB0aGUgYWN0dWFsIGZ1bmN0aW9ucyBvZiB0aGUgTGlicmFyeS4pICBUaGUgaG9wZSBpcyB0aGF0IHRoaXMKK3dpbGwgbGVhZCB0byBmYXN0ZXIgZGV2ZWxvcG1lbnQgb2YgZnJlZSBsaWJyYXJpZXMuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuICBQYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYQorIndvcmsgYmFzZWQgb24gdGhlIGxpYnJhcnkiIGFuZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgbGlicmFyeSIuICBUaGUKK2Zvcm1lciBjb250YWlucyBjb2RlIGRlcml2ZWQgZnJvbSB0aGUgbGlicmFyeSwgd2hpbGUgdGhlIGxhdHRlciBvbmx5Cit3b3JrcyB0b2dldGhlciB3aXRoIHRoZSBsaWJyYXJ5LgorCisgIE5vdGUgdGhhdCBpdCBpcyBwb3NzaWJsZSBmb3IgYSBsaWJyYXJ5IHRvIGJlIGNvdmVyZWQgYnkgdGhlIG9yZGluYXJ5CitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHJhdGhlciB0aGFuIGJ5IHRoaXMgc3BlY2lhbCBvbmUuCisMCisJCSAgR05VIExJQlJBUlkgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBhcHBsaWVzIHRvIGFueSBzb2Z0d2FyZSBsaWJyYXJ5IHdoaWNoCitjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgb3Igb3RoZXIgYXV0aG9yaXplZAorcGFydHkgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWJyYXJ5CitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChhbHNvIGNhbGxlZCAidGhpcyBMaWNlbnNlIikuICBFYWNoIGxpY2Vuc2VlIGlzCithZGRyZXNzZWQgYXMgInlvdSIuCisKKyAgQSAibGlicmFyeSIgbWVhbnMgYSBjb2xsZWN0aW9uIG9mIHNvZnR3YXJlIGZ1bmN0aW9ucyBhbmQvb3IgZGF0YQorcHJlcGFyZWQgc28gYXMgdG8gYmUgY29udmVuaWVudGx5IGxpbmtlZCB3aXRoIGFwcGxpY2F0aW9uIHByb2dyYW1zCisod2hpY2ggdXNlIHNvbWUgb2YgdGhvc2UgZnVuY3Rpb25zIGFuZCBkYXRhKSB0byBmb3JtIGV4ZWN1dGFibGVzLgorCisgIFRoZSAiTGlicmFyeSIsIGJlbG93LCByZWZlcnMgdG8gYW55IHN1Y2ggc29mdHdhcmUgbGlicmFyeSBvciB3b3JrCit3aGljaCBoYXMgYmVlbiBkaXN0cmlidXRlZCB1bmRlciB0aGVzZSB0ZXJtcy4gIEEgIndvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5IiBtZWFucyBlaXRoZXIgdGhlIExpYnJhcnkgb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlcgorY29weXJpZ2h0IGxhdzogdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBMaWJyYXJ5IG9yIGEKK3BvcnRpb24gb2YgaXQsIGVpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQKK3N0cmFpZ2h0Zm9yd2FyZGx5IGludG8gYW5vdGhlciBsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMKK2luY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbiB0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pCisKKyAgIlNvdXJjZSBjb2RlIiBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGEgbGlicmFyeSwgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMKK2FsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkCitpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24KK2FuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGxpYnJhcnkuCisKKyAgQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKK3J1bm5pbmcgYSBwcm9ncmFtIHVzaW5nIHRoZSBMaWJyYXJ5IGlzIG5vdCByZXN0cmljdGVkLCBhbmQgb3V0cHV0IGZyb20KK3N1Y2ggYSBwcm9ncmFtIGlzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQKK29uIHRoZSBMaWJyYXJ5IChpbmRlcGVuZGVudCBvZiB0aGUgdXNlIG9mIHRoZSBMaWJyYXJ5IGluIGEgdG9vbCBmb3IKK3dyaXRpbmcgaXQpLiAgV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBMaWJyYXJ5IGRvZXMKK2FuZCB3aGF0IHRoZSBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgTGlicmFyeSBkb2VzLgorCisgIDEuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhlIExpYnJhcnkncworY29tcGxldGUgc291cmNlIGNvZGUgYXMgeW91IHJlY2VpdmUgaXQsIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQKK3lvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuCithcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdAorYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkKK3dhcnJhbnR5OyBhbmQgZGlzdHJpYnV0ZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlCitMaWJyYXJ5LgorCisgIFlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksCithbmQgeW91IG1heSBhdCB5b3VyIG9wdGlvbiBvZmZlciB3YXJyYW50eSBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhCitmZWUuCisMCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIExpYnJhcnkgb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFRoZSBtb2RpZmllZCB3b3JrIG11c3QgaXRzZWxmIGJlIGEgc29mdHdhcmUgbGlicmFyeS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIHRoZSBmaWxlcyBtb2RpZmllZCB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBjKSBZb3UgbXVzdCBjYXVzZSB0aGUgd2hvbGUgb2YgdGhlIHdvcmsgdG8gYmUgbGljZW5zZWQgYXQgbm8KKyAgICBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGQpIElmIGEgZmFjaWxpdHkgaW4gdGhlIG1vZGlmaWVkIExpYnJhcnkgcmVmZXJzIHRvIGEgZnVuY3Rpb24gb3IgYQorICAgIHRhYmxlIG9mIGRhdGEgdG8gYmUgc3VwcGxpZWQgYnkgYW4gYXBwbGljYXRpb24gcHJvZ3JhbSB0aGF0IHVzZXMKKyAgICB0aGUgZmFjaWxpdHksIG90aGVyIHRoYW4gYXMgYW4gYXJndW1lbnQgcGFzc2VkIHdoZW4gdGhlIGZhY2lsaXR5CisgICAgaXMgaW52b2tlZCwgdGhlbiB5b3UgbXVzdCBtYWtlIGEgZ29vZCBmYWl0aCBlZmZvcnQgdG8gZW5zdXJlIHRoYXQsCisgICAgaW4gdGhlIGV2ZW50IGFuIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBzdWNoIGZ1bmN0aW9uIG9yCisgICAgdGFibGUsIHRoZSBmYWNpbGl0eSBzdGlsbCBvcGVyYXRlcywgYW5kIHBlcmZvcm1zIHdoYXRldmVyIHBhcnQgb2YKKyAgICBpdHMgcHVycG9zZSByZW1haW5zIG1lYW5pbmdmdWwuCisKKyAgICAoRm9yIGV4YW1wbGUsIGEgZnVuY3Rpb24gaW4gYSBsaWJyYXJ5IHRvIGNvbXB1dGUgc3F1YXJlIHJvb3RzIGhhcworICAgIGEgcHVycG9zZSB0aGF0IGlzIGVudGlyZWx5IHdlbGwtZGVmaW5lZCBpbmRlcGVuZGVudCBvZiB0aGUKKyAgICBhcHBsaWNhdGlvbi4gIFRoZXJlZm9yZSwgU3Vic2VjdGlvbiAyZCByZXF1aXJlcyB0aGF0IGFueQorICAgIGFwcGxpY2F0aW9uLXN1cHBsaWVkIGZ1bmN0aW9uIG9yIHRhYmxlIHVzZWQgYnkgdGhpcyBmdW5jdGlvbiBtdXN0CisgICAgYmUgb3B0aW9uYWw6IGlmIHRoZSBhcHBsaWNhdGlvbiBkb2VzIG5vdCBzdXBwbHkgaXQsIHRoZSBzcXVhcmUKKyAgICByb290IGZ1bmN0aW9uIG11c3Qgc3RpbGwgY29tcHV0ZSBzcXVhcmUgcm9vdHMuKQorCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBMaWJyYXJ5LAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIExpYnJhcnksIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlCitpdC4KKworVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0Cit5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8KK2V4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvcgorY29sbGVjdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgTGlicmFyeS4KKworSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB3b3JrIG5vdCBiYXNlZCBvbiB0aGUgTGlicmFyeQord2l0aCB0aGUgTGlicmFyeSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnkpIG9uIGEgdm9sdW1lIG9mCithIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlcgordGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICAzLiBZb3UgbWF5IG9wdCB0byBhcHBseSB0aGUgdGVybXMgb2YgdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZSB0byBhIGdpdmVuIGNvcHkgb2YgdGhlIExpYnJhcnkuICBUbyBkbwordGhpcywgeW91IG11c3QgYWx0ZXIgYWxsIHRoZSBub3RpY2VzIHRoYXQgcmVmZXIgdG8gdGhpcyBMaWNlbnNlLCBzbwordGhhdCB0aGV5IHJlZmVyIHRvIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLAoraW5zdGVhZCBvZiB0byB0aGlzIExpY2Vuc2UuICAoSWYgYSBuZXdlciB2ZXJzaW9uIHRoYW4gdmVyc2lvbiAyIG9mIHRoZQorb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaGFzIGFwcGVhcmVkLCB0aGVuIHlvdSBjYW4gc3BlY2lmeQordGhhdCB2ZXJzaW9uIGluc3RlYWQgaWYgeW91IHdpc2guKSAgRG8gbm90IG1ha2UgYW55IG90aGVyIGNoYW5nZSBpbgordGhlc2Ugbm90aWNlcy4KKwwKKyAgT25jZSB0aGlzIGNoYW5nZSBpcyBtYWRlIGluIGEgZ2l2ZW4gY29weSwgaXQgaXMgaXJyZXZlcnNpYmxlIGZvcgordGhhdCBjb3B5LCBzbyB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBhbGwKK3N1YnNlcXVlbnQgY29waWVzIGFuZCBkZXJpdmF0aXZlIHdvcmtzIG1hZGUgZnJvbSB0aGF0IGNvcHkuCisKKyAgVGhpcyBvcHRpb24gaXMgdXNlZnVsIHdoZW4geW91IHdpc2ggdG8gY29weSBwYXJ0IG9mIHRoZSBjb2RlIG9mCit0aGUgTGlicmFyeSBpbnRvIGEgcHJvZ3JhbSB0aGF0IGlzIG5vdCBhIGxpYnJhcnkuCisKKyAgNC4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhIHBvcnRpb24gb3IKK2Rlcml2YXRpdmUgb2YgaXQsIHVuZGVyIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtCit1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhY2NvbXBhbnkKK2l0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2gKK211c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgb24gYQorbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlLgorCisgIElmIGRpc3RyaWJ1dGlvbiBvZiBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5Citmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZQorc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBzYXRpc2ZpZXMgdGhlIHJlcXVpcmVtZW50IHRvCitkaXN0cmlidXRlIHRoZSBzb3VyY2UgY29kZSwgZXZlbiB0aG91Z2ggdGhpcmQgcGFydGllcyBhcmUgbm90Citjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCisgIDUuIEEgcHJvZ3JhbSB0aGF0IGNvbnRhaW5zIG5vIGRlcml2YXRpdmUgb2YgYW55IHBvcnRpb24gb2YgdGhlCitMaWJyYXJ5LCBidXQgaXMgZGVzaWduZWQgdG8gd29yayB3aXRoIHRoZSBMaWJyYXJ5IGJ5IGJlaW5nIGNvbXBpbGVkIG9yCitsaW5rZWQgd2l0aCBpdCwgaXMgY2FsbGVkIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5Ii4gIFN1Y2ggYQord29yaywgaW4gaXNvbGF0aW9uLCBpcyBub3QgYSBkZXJpdmF0aXZlIHdvcmsgb2YgdGhlIExpYnJhcnksIGFuZAordGhlcmVmb3JlIGZhbGxzIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4KKworICBIb3dldmVyLCBsaW5raW5nIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB3aXRoIHRoZSBMaWJyYXJ5CitjcmVhdGVzIGFuIGV4ZWN1dGFibGUgdGhhdCBpcyBhIGRlcml2YXRpdmUgb2YgdGhlIExpYnJhcnkgKGJlY2F1c2UgaXQKK2NvbnRhaW5zIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5KSwgcmF0aGVyIHRoYW4gYSAid29yayB0aGF0IHVzZXMgdGhlCitsaWJyYXJ5Ii4gIFRoZSBleGVjdXRhYmxlIGlzIHRoZXJlZm9yZSBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZS4KK1NlY3Rpb24gNiBzdGF0ZXMgdGVybXMgZm9yIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIGV4ZWN1dGFibGVzLgorCisgIFdoZW4gYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHVzZXMgbWF0ZXJpYWwgZnJvbSBhIGhlYWRlciBmaWxlCit0aGF0IGlzIHBhcnQgb2YgdGhlIExpYnJhcnksIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgbWF5IGJlIGEKK2Rlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSBldmVuIHRob3VnaCB0aGUgc291cmNlIGNvZGUgaXMgbm90LgorV2hldGhlciB0aGlzIGlzIHRydWUgaXMgZXNwZWNpYWxseSBzaWduaWZpY2FudCBpZiB0aGUgd29yayBjYW4gYmUKK2xpbmtlZCB3aXRob3V0IHRoZSBMaWJyYXJ5LCBvciBpZiB0aGUgd29yayBpcyBpdHNlbGYgYSBsaWJyYXJ5LiAgVGhlCit0aHJlc2hvbGQgZm9yIHRoaXMgdG8gYmUgdHJ1ZSBpcyBub3QgcHJlY2lzZWx5IGRlZmluZWQgYnkgbGF3LgorCisgIElmIHN1Y2ggYW4gb2JqZWN0IGZpbGUgdXNlcyBvbmx5IG51bWVyaWNhbCBwYXJhbWV0ZXJzLCBkYXRhCitzdHJ1Y3R1cmUgbGF5b3V0cyBhbmQgYWNjZXNzb3JzLCBhbmQgc21hbGwgbWFjcm9zIGFuZCBzbWFsbCBpbmxpbmUKK2Z1bmN0aW9ucyAodGVuIGxpbmVzIG9yIGxlc3MgaW4gbGVuZ3RoKSwgdGhlbiB0aGUgdXNlIG9mIHRoZSBvYmplY3QKK2ZpbGUgaXMgdW5yZXN0cmljdGVkLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgaXMgbGVnYWxseSBhIGRlcml2YXRpdmUKK3dvcmsuICAoRXhlY3V0YWJsZXMgY29udGFpbmluZyB0aGlzIG9iamVjdCBjb2RlIHBsdXMgcG9ydGlvbnMgb2YgdGhlCitMaWJyYXJ5IHdpbGwgc3RpbGwgZmFsbCB1bmRlciBTZWN0aW9uIDYuKQorCisgIE90aGVyd2lzZSwgaWYgdGhlIHdvcmsgaXMgYSBkZXJpdmF0aXZlIG9mIHRoZSBMaWJyYXJ5LCB5b3UgbWF5CitkaXN0cmlidXRlIHRoZSBvYmplY3QgY29kZSBmb3IgdGhlIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gNi4KK0FueSBleGVjdXRhYmxlcyBjb250YWluaW5nIHRoYXQgd29yayBhbHNvIGZhbGwgdW5kZXIgU2VjdGlvbiA2LAord2hldGhlciBvciBub3QgdGhleSBhcmUgbGlua2VkIGRpcmVjdGx5IHdpdGggdGhlIExpYnJhcnkgaXRzZWxmLgorDAorICA2LiBBcyBhbiBleGNlcHRpb24gdG8gdGhlIFNlY3Rpb25zIGFib3ZlLCB5b3UgbWF5IGFsc28gY29tcGlsZSBvcgorbGluayBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgd2l0aCB0aGUgTGlicmFyeSB0byBwcm9kdWNlIGEKK3dvcmsgY29udGFpbmluZyBwb3J0aW9ucyBvZiB0aGUgTGlicmFyeSwgYW5kIGRpc3RyaWJ1dGUgdGhhdCB3b3JrCit1bmRlciB0ZXJtcyBvZiB5b3VyIGNob2ljZSwgcHJvdmlkZWQgdGhhdCB0aGUgdGVybXMgcGVybWl0Cittb2RpZmljYXRpb24gb2YgdGhlIHdvcmsgZm9yIHRoZSBjdXN0b21lcidzIG93biB1c2UgYW5kIHJldmVyc2UKK2VuZ2luZWVyaW5nIGZvciBkZWJ1Z2dpbmcgc3VjaCBtb2RpZmljYXRpb25zLgorCisgIFlvdSBtdXN0IGdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIGVhY2ggY29weSBvZiB0aGUgd29yayB0aGF0IHRoZQorTGlicmFyeSBpcyB1c2VkIGluIGl0IGFuZCB0aGF0IHRoZSBMaWJyYXJ5IGFuZCBpdHMgdXNlIGFyZSBjb3ZlcmVkIGJ5Cit0aGlzIExpY2Vuc2UuICBZb3UgbXVzdCBzdXBwbHkgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gIElmIHRoZSB3b3JrCitkdXJpbmcgZXhlY3V0aW9uIGRpc3BsYXlzIGNvcHlyaWdodCBub3RpY2VzLCB5b3UgbXVzdCBpbmNsdWRlIHRoZQorY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIExpYnJhcnkgYW1vbmcgdGhlbSwgYXMgd2VsbCBhcyBhIHJlZmVyZW5jZQorZGlyZWN0aW5nIHRoZSB1c2VyIHRvIHRoZSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gIEFsc28sIHlvdSBtdXN0IGRvIG9uZQorb2YgdGhlc2UgdGhpbmdzOgorCisgICAgYSkgQWNjb21wYW55IHRoZSB3b3JrIHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcKKyAgICBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIGZvciB0aGUgTGlicmFyeSBpbmNsdWRpbmcgd2hhdGV2ZXIKKyAgICBjaGFuZ2VzIHdlcmUgdXNlZCBpbiB0aGUgd29yayAod2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlcgorICAgIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUpOyBhbmQsIGlmIHRoZSB3b3JrIGlzIGFuIGV4ZWN1dGFibGUgbGlua2VkCisgICAgd2l0aCB0aGUgTGlicmFyeSwgd2l0aCB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSAid29yayB0aGF0CisgICAgdXNlcyB0aGUgTGlicmFyeSIsIGFzIG9iamVjdCBjb2RlIGFuZC9vciBzb3VyY2UgY29kZSwgc28gdGhhdCB0aGUKKyAgICB1c2VyIGNhbiBtb2RpZnkgdGhlIExpYnJhcnkgYW5kIHRoZW4gcmVsaW5rIHRvIHByb2R1Y2UgYSBtb2RpZmllZAorICAgIGV4ZWN1dGFibGUgY29udGFpbmluZyB0aGUgbW9kaWZpZWQgTGlicmFyeS4gIChJdCBpcyB1bmRlcnN0b29kCisgICAgdGhhdCB0aGUgdXNlciB3aG8gY2hhbmdlcyB0aGUgY29udGVudHMgb2YgZGVmaW5pdGlvbnMgZmlsZXMgaW4gdGhlCisgICAgTGlicmFyeSB3aWxsIG5vdCBuZWNlc3NhcmlseSBiZSBhYmxlIHRvIHJlY29tcGlsZSB0aGUgYXBwbGljYXRpb24KKyAgICB0byB1c2UgdGhlIG1vZGlmaWVkIGRlZmluaXRpb25zLikKKworICAgIGIpIEFjY29tcGFueSB0aGUgd29yayB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0CisgICAgbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgdGhlIHNhbWUgdXNlciB0aGUgbWF0ZXJpYWxzCisgICAgc3BlY2lmaWVkIGluIFN1YnNlY3Rpb24gNmEsIGFib3ZlLCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZQorICAgIHRoYW4gdGhlIGNvc3Qgb2YgcGVyZm9ybWluZyB0aGlzIGRpc3RyaWJ1dGlvbi4KKworICAgIGMpIElmIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd29yayBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5CisgICAgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIG9mZmVyIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlIGFib3ZlCisgICAgc3BlY2lmaWVkIG1hdGVyaWFscyBmcm9tIHRoZSBzYW1lIHBsYWNlLgorCisgICAgZCkgVmVyaWZ5IHRoYXQgdGhlIHVzZXIgaGFzIGFscmVhZHkgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZXNlCisgICAgbWF0ZXJpYWxzIG9yIHRoYXQgeW91IGhhdmUgYWxyZWFkeSBzZW50IHRoaXMgdXNlciBhIGNvcHkuCisKKyAgRm9yIGFuIGV4ZWN1dGFibGUsIHRoZSByZXF1aXJlZCBmb3JtIG9mIHRoZSAid29yayB0aGF0IHVzZXMgdGhlCitMaWJyYXJ5IiBtdXN0IGluY2x1ZGUgYW55IGRhdGEgYW5kIHV0aWxpdHkgcHJvZ3JhbXMgbmVlZGVkIGZvcgorcmVwcm9kdWNpbmcgdGhlIGV4ZWN1dGFibGUgZnJvbSBpdC4gIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24sCit0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZSBhbnl0aGluZyB0aGF0IGlzIG5vcm1hbGx5CitkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkgZm9ybSkgd2l0aCB0aGUgbWFqb3IKK2NvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24KK3doaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudCBpdHNlbGYgYWNjb21wYW5pZXMKK3RoZSBleGVjdXRhYmxlLgorCisgIEl0IG1heSBoYXBwZW4gdGhhdCB0aGlzIHJlcXVpcmVtZW50IGNvbnRyYWRpY3RzIHRoZSBsaWNlbnNlCityZXN0cmljdGlvbnMgb2Ygb3RoZXIgcHJvcHJpZXRhcnkgbGlicmFyaWVzIHRoYXQgZG8gbm90IG5vcm1hbGx5CithY2NvbXBhbnkgdGhlIG9wZXJhdGluZyBzeXN0ZW0uICBTdWNoIGEgY29udHJhZGljdGlvbiBtZWFucyB5b3UgY2Fubm90Cit1c2UgYm90aCB0aGVtIGFuZCB0aGUgTGlicmFyeSB0b2dldGhlciBpbiBhbiBleGVjdXRhYmxlIHRoYXQgeW91CitkaXN0cmlidXRlLgorDAorICA3LiBZb3UgbWF5IHBsYWNlIGxpYnJhcnkgZmFjaWxpdGllcyB0aGF0IGFyZSBhIHdvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5IHNpZGUtYnktc2lkZSBpbiBhIHNpbmdsZSBsaWJyYXJ5IHRvZ2V0aGVyIHdpdGggb3RoZXIgbGlicmFyeQorZmFjaWxpdGllcyBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHN1Y2ggYSBjb21iaW5lZAorbGlicmFyeSwgcHJvdmlkZWQgdGhhdCB0aGUgc2VwYXJhdGUgZGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIGJhc2VkIG9uCit0aGUgTGlicmFyeSBhbmQgb2YgdGhlIG90aGVyIGxpYnJhcnkgZmFjaWxpdGllcyBpcyBvdGhlcndpc2UKK3Blcm1pdHRlZCwgYW5kIHByb3ZpZGVkIHRoYXQgeW91IGRvIHRoZXNlIHR3byB0aGluZ3M6CisKKyAgICBhKSBBY2NvbXBhbnkgdGhlIGNvbWJpbmVkIGxpYnJhcnkgd2l0aCBhIGNvcHkgb2YgdGhlIHNhbWUgd29yaworICAgIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCB1bmNvbWJpbmVkIHdpdGggYW55IG90aGVyIGxpYnJhcnkKKyAgICBmYWNpbGl0aWVzLiAgVGhpcyBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKKyAgICBTZWN0aW9ucyBhYm92ZS4KKworICAgIGIpIEdpdmUgcHJvbWluZW50IG5vdGljZSB3aXRoIHRoZSBjb21iaW5lZCBsaWJyYXJ5IG9mIHRoZSBmYWN0CisgICAgdGhhdCBwYXJ0IG9mIGl0IGlzIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSwgYW5kIGV4cGxhaW5pbmcKKyAgICB3aGVyZSB0byBmaW5kIHRoZSBhY2NvbXBhbnlpbmcgdW5jb21iaW5lZCBmb3JtIG9mIHRoZSBzYW1lIHdvcmsuCisKKyAgOC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBsaW5rIHdpdGgsIG9yIGRpc3RyaWJ1dGUKK3RoZSBMaWJyYXJ5IGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55CithdHRlbXB0IG90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IKK2Rpc3RyaWJ1dGUgdGhlIExpYnJhcnkgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91cgorcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZS4gIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLAorb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcwordGVybWluYXRlZCBzbyBsb25nIGFzIHN1Y2ggcGFydGllcyByZW1haW4gaW4gZnVsbCBjb21wbGlhbmNlLgorCisgIDkuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdAorc2lnbmVkIGl0LiAgSG93ZXZlciwgbm90aGluZyBlbHNlIGdyYW50cyB5b3UgcGVybWlzc2lvbiB0byBtb2RpZnkgb3IKK2Rpc3RyaWJ1dGUgdGhlIExpYnJhcnkgb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuICBUaGVzZSBhY3Rpb25zIGFyZQorcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiAgVGhlcmVmb3JlLCBieQorbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgTGlicmFyeSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5KSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgdG8gZG8gc28sIGFuZAorYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZwordGhlIExpYnJhcnkgb3Igd29ya3MgYmFzZWQgb24gaXQuCisKKyAgMTAuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK0xpYnJhcnkpLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlCitvcmlnaW5hbCBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlLCBsaW5rIHdpdGggb3IgbW9kaWZ5IHRoZSBMaWJyYXJ5CitzdWJqZWN0IHRvIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgWW91IG1heSBub3QgaW1wb3NlIGFueSBmdXJ0aGVyCityZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uCitZb3UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0bwordGhpcyBMaWNlbnNlLgorDAorICAxMS4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5IGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIExpYnJhcnkuCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlciBhbnkKK3BhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBhcHBseSwKK2FuZCB0aGUgc2VjdGlvbiBhcyBhIHdob2xlIGlzIGludGVuZGVkIHRvIGFwcGx5IGluIG90aGVyIGNpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSB3aGljaCBpcworaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiAgTWFueSBwZW9wbGUgaGF2ZSBtYWRlCitnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlIGRpc3RyaWJ1dGVkCit0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZwordG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90CitpbXBvc2UgdGhhdCBjaG9pY2UuCisKK1RoaXMgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBtYWtlIHRob3JvdWdobHkgY2xlYXIgd2hhdCBpcyBiZWxpZXZlZCB0bworYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMTIuIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgTGlicmFyeSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgTGlicmFyeSB1bmRlciB0aGlzIExpY2Vuc2UgbWF5IGFkZAorYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZyB0aG9zZSBjb3VudHJpZXMsCitzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZyBjb3VudHJpZXMgbm90IHRodXMKK2V4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSBsaW1pdGF0aW9uIGFzIGlmCit3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICAxMy4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcKK3ZlcnNpb25zIG9mIHRoZSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuCitTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sCitidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIExpYnJhcnkKK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZAorImFueSBsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZAorY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBMaWJyYXJ5IGRvZXMgbm90IHNwZWNpZnkgYQorbGljZW5zZSB2ZXJzaW9uIG51bWJlciwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisMCisgIDE0LiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgTGlicmFyeSBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBpbmNvbXBhdGlibGUgd2l0aCB0aGVzZSwKK3dyaXRlIHRvIHRoZSBhdXRob3IgdG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzCitjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzIG1ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91cgorZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscyBvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cworb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZCBvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcKK2FuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKKwkJCSAgICBOTyBXQVJSQU5UWQorCisgIDE1LiBCRUNBVVNFIFRIRSBMSUJSQVJZIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTworV0FSUkFOVFkgRk9SIFRIRSBMSUJSQVJZLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4KK0VYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SCitPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIExJQlJBUlkgIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRQorTElCUkFSWSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgTElCUkFSWSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUKK1RIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxNi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTgorV1JJVElORyBXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkKK0FORC9PUiBSRURJU1RSSUJVVEUgVEhFIExJQlJBUlkgQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VCitGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRQorTElCUkFSWSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORworUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEKK0ZBSUxVUkUgT0YgVEhFIExJQlJBUlkgVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBTT0ZUV0FSRSksIEVWRU4gSUYKK1NVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKK0RBTUFHRVMuCisKKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKwwKKyAgICAgQXBwZW5kaXg6IEhvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBMaWJyYXJpZXMKKworICBJZiB5b3UgZGV2ZWxvcCBhIG5ldyBsaWJyYXJ5LCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0Citwb3NzaWJsZSB1c2UgdG8gdGhlIHB1YmxpYywgd2UgcmVjb21tZW5kIG1ha2luZyBpdCBmcmVlIHNvZnR3YXJlIHRoYXQKK2V2ZXJ5b25lIGNhbiByZWRpc3RyaWJ1dGUgYW5kIGNoYW5nZS4gIFlvdSBjYW4gZG8gc28gYnkgcGVybWl0dGluZworcmVkaXN0cmlidXRpb24gdW5kZXIgdGhlc2UgdGVybXMgKG9yLCBhbHRlcm5hdGl2ZWx5LCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCitvcmRpbmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlKS4KKworICBUbyBhcHBseSB0aGVzZSB0ZXJtcywgYXR0YWNoIHRoZSBmb2xsb3dpbmcgbm90aWNlcyB0byB0aGUgbGlicmFyeS4gIEl0IGlzCitzYWZlc3QgdG8gYXR0YWNoIHRoZW0gdG8gdGhlIHN0YXJ0IG9mIGVhY2ggc291cmNlIGZpbGUgdG8gbW9zdCBlZmZlY3RpdmVseQorY29udmV5IHRoZSBleGNsdXNpb24gb2Ygd2FycmFudHk7IGFuZCBlYWNoIGZpbGUgc2hvdWxkIGhhdmUgYXQgbGVhc3QgdGhlCisiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgorCisgICAgPG9uZSBsaW5lIHRvIGdpdmUgdGhlIGxpYnJhcnkncyBuYW1lIGFuZCBhIGJyaWVmIGlkZWEgb2Ygd2hhdCBpdCBkb2VzLj4KKyAgICBDb3B5cmlnaHQgKEMpIDx5ZWFyPiAgPG5hbWUgb2YgYXV0aG9yPgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisKK0Fsc28gYWRkIGluZm9ybWF0aW9uIG9uIGhvdyB0byBjb250YWN0IHlvdSBieSBlbGVjdHJvbmljIGFuZCBwYXBlciBtYWlsLgorCitZb3Ugc2hvdWxkIGFsc28gZ2V0IHlvdXIgZW1wbG95ZXIgKGlmIHlvdSB3b3JrIGFzIGEgcHJvZ3JhbW1lcikgb3IgeW91cgorc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgbGlicmFyeSwgaWYKK25lY2Vzc2FyeS4gIEhlcmUgaXMgYSBzYW1wbGU7IGFsdGVyIHRoZSBuYW1lczoKKworICBZb3lvZHluZSwgSW5jLiwgaGVyZWJ5IGRpc2NsYWltcyBhbGwgY29weXJpZ2h0IGludGVyZXN0IGluIHRoZQorICBsaWJyYXJ5IGBGcm9iJyAoYSBsaWJyYXJ5IGZvciB0d2Vha2luZyBrbm9icykgd3JpdHRlbiBieSBKYW1lcyBSYW5kb20gSGFja2VyLgorCisgIDxzaWduYXR1cmUgb2YgVHkgQ29vbj4sIDEgQXByaWwgMTk5MAorICBUeSBDb29uLCBQcmVzaWRlbnQgb2YgVmljZQorCitUaGF0J3MgYWxsIHRoZXJlIGlzIHRvIGl0IQpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvTW9sU29mdCBiL2xpY2Vuc2VzL01vbFNvZnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY1YzJiMwotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL01vbFNvZnQKQEAgLTAsMCArMSwxMTAgQEAKK01vbHNvZnQgTExDCitMaWNlbnNlIEFncmVlbWVudCBBcHBsaWNhYmxlIHRvIHRoZSBNb2xzb2Z0IElDTSBTb2Z0d2FyZSBEb3dubG9hZGVkIGZyb20gdGhlCitNb2xTb2Z0IFdlYiBTaXRlIGF0IHd3dy5tb2xzb2Z0LmNvbQorCitJTVBPUlRBTlQgLSBSRUFEIENBUkVGVUxMWSBCRUZPUkUgSU5TVEFMTElORyBTT0ZUV0FSRSBUSEUgU09GVFdBUkUgWU9VIEFSRSBBQk9VVCBUTyBBQ0NFU1MgQ09OVEFJTlMgUFJPR1JBTVMsIERPQ1VNRU5UQVRJT04sIEFORCBPVEhFUiBQUk9QUklFVEFSWSBNQVRFUklBTCAoIlNPRlRXQVJFIikgVEhBVCBCRUxPTkdTIFRPIE1PTFNPRlQgTExDLiAgUE9TU0VTU0lPTiBBTkQgVVNFIE9GIFRIRSBTT0ZUV0FSRSBJUyBTVUJKRUNUIFRPIFRISVMgU09GVFdBUkUgTElDRU5TRSBBR1JFRU1FTlQgKFRIRSAiTElDRU5TRSIpLiBCWSBDTElDS0lORyBUSEUgQUNDRVBUIEJVVFRPTiBZT1UgQU5EIFlPVVIgRU1QTE9ZRVIgKElGIFRIRSBTT0ZUV0FSRSBJUyBCRUlORyBVU0VEIElOIFRIRSBDT1VSU0UgT0YgWU9VUiBEVVRJRVMgT0YgRU1QTE9ZTUVOVCkgUkVQUkVTRU5UIEFORCBXQVJSQU5UIFRIQVQ6KEEpIFlPVSBIQVZFIFJFQUQgQU5EIEFHUkVFIFRPIEJFIEZVTExZIEJPVU5EIEJZIEFORCBCRUNPTUUgQSBQQVJUWSBUTyBUSElTIExJQ0VOU0U7IEFORCAoQikgWU9VIEFSRSBOT1QgKDEpIEEgTkFUSU9OQUwgT1IgUkVTSURFTlQgT0YgQ1VCQSwgTElCWUEsIElSQVEsIElSQU4sIFNVREFOLCBTWVJJQSwgT1IgTk9SVEggS09SRUE7ICgyKSBZT1UgQVJFIE5PVCBUSEUgVS5TLiBUUkVBU1VSWSBERVBBUlRNRU5UJ1MgTElTVCBPRiBTUEVDSUFMTFkgREVTSUdOQVRFRCBOQVRJT05BTFMsIFRFUlJPUklTVFMsIEFORCBOQVJDT1RJQ1MgVFJBRkZJQ0tFUlMgT1IgVEhFIFUuUy4gQ09NTUVSQyBERVBBUlRNRU5UJ1MgVEFCTEUgT0YgREVOWSBPUkRFUlMgT1IgVEhFIFUuUy4gU1RBVEUgREVQQVJUTUVOVCdTIFBST0xJRkVSQVRJT04gRU5USVRZIExJU1QuIChDKSBJTiBUSEUgRVZFTlQgVEhBVCBZT1UgRE8gTk9UIEFHUkVFIFRPIEFMTCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBMSUNFTlNFLCBPUiwgSUYgWU9VIENBTk5PVCBXQVJSQU5UIFRIQVQgWU9VIEFSRSBOT1QgSU4gVklPTEFUSU9OIE9GIChCKSBBQk9WRSwgWU9VIEFSRSBOT1QgQVVUSE9SSVpFRCBUTyBJTlNUQUxMLCBVU0UgT1IgUE9TU0VTUyBUSEUgU09GVFdBUkUgQU5EIE1VU1QgSU1NRURJQVRFTFkgQ0VBU0UgVE8gSU5TVEFMTCBUSEUgU09GVFdBUkUuCisKK1RoaXMgQWdyZWVtZW50IGhhcyB0aHJlZSBwYXJ0cy4gIFBhcnQgSSBhcHBsaWVzIGlmIHlvdSBoYXZlIE5PVCBwdXJjaGFzZWQgYSBsaWNlbnNlIHRvIHRoZSBhY2NvbXBhbnlpbmcgc29mdHdhcmUgKHRoZSAiU29mdHdhcmUiKS4gIFBhcnQgSUkgYXBwbGllcyBpZiB5b3UgaGF2ZSBwdXJjaGFzZWQgYSBsaWNlbnNlIHRvIHRoZSBTb2Z0d2FyZS4gIFBhcnQgSUlJIGFwcGxpZXMgdG8gYWxsIGxpY2Vuc2UgZ3JhbnRzLiAgSWYgeW91IGluaXRpYWxseSBhY3F1aXJlZCBhIGNvcHkgb2YgdGhlIFNvZnR3YXJlIHdpdGhvdXQgcHVyY2hhc2luZyBhIGxpY2Vuc2UgYW5kIHlvdSB3aXNoIHRvIHB1cmNoYXNlIGEgbGljZW5zZSwgY29udGFjdCBNb2xTb2Z0IEwuTC5DLiAoIk1vbHNvZnQgTExDIikgb24gdGhlIEludGVybmV0IGF0IGh0dHA6Ly93d3cuTW9sU29mdC5jb20gb3IgYnkgZW1haWwgdG8gaW5mb0Btb2xzb2Z0LmNvbS4KKworUEFSVCBJIC0tIFRFUk1TIEFQUExJQ0FCTEUgV0hFTiBMSUNFTlNFIEZFRVMgTk9UIChZRVQpIFBBSUQgKExJTUlURUQgVE8gRVZBTFVBVElPTiwgRURVQ0FUSU9OQUwgQU5EIE5PTi1QUk9GSVQgVVNFUykuCisKK01vbHNvZnQgTExDIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlIGxpY2Vuc2UgdG8gdXNlIHRoZSBTb2Z0d2FyZSBmcmVlIG9mIGNoYXJnZSBpZiAoYSkgeW91IGFyZSBhIHN0dWRlbnQsIGZhY3VsdHkgbWVtYmVyIG9yIHN0YWZmIG1lbWJlciBvZiBhbiBlZHVjYXRpb25hbCBpbnN0aXR1dGlvbiAoSy0xMiwganVuaW9yIGNvbGxlZ2UsIGNvbGxlZ2Ugb3IgbGlicmFyeSksIGEgc3RhZmYgbWVtYmVyIG9mIGEgcmVsaWdpb3VzIG9yZ2FuaXphdGlvbiwgb3IgYW4gZW1wbG95ZWUgb2YgYW4gb3JnYW5pemF0aW9uIHdoaWNoIG1lZXRzIE1vbHNvZnQgTExDJ3MgY3JpdGVyaWEgZm9yIGEgY2hhcml0YWJsZSAgbm9uLXByb2ZpdCBvcmdhbml6YXRpb247IG9yIChiKSB5b3VyIHVzZSBvZiB0aGUgU29mdHdhcmUgaXMgZm9yIHRoZSBwdXJwb3NlIG9mIGV2YWx1YXRpbmcgd2hldGhlciB0byBwdXJjaGFzZSBhbiBvbmdvaW5nIGxpY2Vuc2UgdG8gdGhlIFNvZnR3YXJlLiAgVGhlIGV2YWx1YXRpb24gcGVyaW9kIGZvciB1c2UgYnkgb3Igb24gYmVoYWxmIG9mIGEgY29tbWVyY2lhbCBlbnRpdHkgaXMgbGltaXRlZCB0byAxNCBkYXlzIHVubGVzcyBNb2xzb2Z0J3Mgd3JpdHRlbiBjb25zZW50IGlzIG9idGFpbmVkLiBFdmFsdWF0aW9uIHVzZSBieSBvdGhlcnMgaXMgbm90IHN1YmplY3QgdG8gdGhlIDE0IGRheSBsaW1pdC4gIEdvdmVybm1lbnQgYWdlbmNpZXMgKG90aGVyIHRoYW4gcHVibGljIGxpYnJhcmllcykgYXJlIG5vdCBjb25zaWRlcmVkIGVkdWNhdGlvbmFsLCByZWxpZ2lvdXMsIG9yIGNoYXJpdGFibGUgbm9uLXByb2ZpdCBvcmdhbml6YXRpb25zIGZvciBwdXJwb3NlcyBvZiB0aGlzIEFncmVlbWVudC4gSWYgeW91IGFyZSB1c2luZyB0aGUgU29mdHdhcmUgZnJlZSBvZiBjaGFyZ2UsIHlvdSBhcmUgbm90IGVudGl0bGVkIHRvIGhhcmQtY29weSBkb2N1bWVudGF0aW9uLCBzdXBwb3J0IG9yIHRlbGVwaG9uZSBhc3Npc3RhbmNlLiAgSWYgeW91IGZpdCB3aXRoaW4gdGhlIGRlc2NyaXB0aW9uIGFib3ZlLCB5b3UgbWF5IHVzZSB0aGUgU29mdHdhcmUgaW4gdGhlIG1hbm5lciBkZXNjcmliZWQgaW4gUGFydCBJSUkgYmVsb3cgdW5kZXIgIlNjb3BlIG9mIEdyYW50LiIKKworRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS4KKworRnJlZSBvZiBjaGFyZ2UgU29mdHdhcmUgaXMgcHJvdmlkZWQgb24gYW4gIkFTIElTIiBiYXNpcywgd2l0aG91dCB3YXJyYW50eSBvZiBhbnkga2luZCwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHksIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlIGFuZCBub24taW5mcmluZ2VtZW50LiBUaGUgZW50aXJlIHJpc2sgYXMgdG8gdGhlIHF1YWxpdHkgYW5kIHBlcmZvcm1hbmNlIG9mIHRoZSBTb2Z0d2FyZSBpcyBib3JuZSBieSB5b3UuICBTaG91bGQgdGhlIFNvZnR3YXJlIHByb3ZlIGRlZmVjdGl2ZSwgeW91IGFuZCBub3QgTW9sc29mdCBMTEMgYXNzdW1lIHRoZSBlbnRpcmUgY29zdCBvZiBhbnkgc2VydmljZSBhbmQgcmVwYWlyLiBZb3UgbXVzdCBkZXRlcm1pbmUgdGhhdCB0aGUgU29mdHdhcmUgc3VmZmljaWVudGx5IG1lZXRzIHlvdXIgcmVxdWlyZW1lbnRzLiBUaGlzIGRpc2NsYWltZXIgb2Ygd2FycmFudHkgY29uc3RpdHV0ZXMgYW4gZXNzZW50aWFsIHBhcnQgb2YgdGhlIGFncmVlbWVudC4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBFWENMVVNJT05TIE9GIEFOIElNUExJRUQgV0FSUkFOVFksIFNPIFRISVMgRElTQ0xBSU1FUiBNQVkgTk9UIEFQUExZIFRPIFlPVSBBTkQgWU9VIE1BWSBIQVZFIE9USEVSIExFR0FMIFJJR0hUUyBUSEFUIFZBUlkgQlkgSlVSSVNESUNUSU9OLgorCitQQVJUIElJIC0tIFRFUk1TIEFQUExJQ0FCTEUgV0hFTiBMSUNFTlNFIEZFRVMgUEFJRC4KKworR1JBTlQuIFN1YmplY3QgdG8gcGF5bWVudCBvZiBhcHBsaWNhYmxlIGxpY2Vuc2UgZmVlcywgTW9sc29mdCBMTEMgZ3JhbnRzIHRvIHlvdSBhIGxpbWl0ZWQsIG5vbi1leGNsdXNpdmUsIG5vbi10cmFuc2ZlcmFibGUgbGljZW5zZSB0byB1c2UgdGhlIFNvZnR3YXJlIGFuZCBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiAoIkRvY3VtZW50YXRpb24iKSBpbiB0aGUgbWFubmVyIGRlc2NyaWJlZCBpbiBQYXJ0IElJSSBiZWxvdyB1bmRlciAiU2NvcGUgb2YgR3JhbnQuIgorCitMSU1JVEVEIFdBUlJBTlRZLgorCitNb2xzb2Z0IExMQyB3YXJyYW50cyB0aGF0IGZvciBhIHBlcmlvZCBvZiBuaW5ldHkgKDkwKSBkYXlzIGZyb20gdGhlIGRhdGUgb2YgYWNxdWlzaXRpb24sIHRoZSBTb2Z0d2FyZSwgaWYgb3BlcmF0ZWQgYXMgZGlyZWN0ZWQsIHdpbGwgc3Vic3RhbnRpYWxseSBhY2hpZXZlIHRoZSBmdW5jdGlvbmFsaXR5IGRlc2NyaWJlZCBpbiB0aGUgRG9jdW1lbnRhdGlvbi4gTW9sc29mdCBMTEMgZG9lcyBub3Qgd2FycmFudCwgaG93ZXZlciwgdGhhdCB5b3VyIHVzZSBvZiB0aGUgU29mdHdhcmUgd2lsbCBiZSB1bmludGVycnVwdGVkIG9yIHRoYXQgdGhlIG9wZXJhdGlvbiBvZiB0aGUgU29mdHdhcmUgd2lsbCBiZSBlcnJvci1mcmVlIG9yIHNlY3VyZS4gIFlvdSBtdXN0IGRldGVybWluZSB0aGF0IHRoZSBTb2Z0d2FyZSBzdWZmaWNpZW50bHkgbWVldHMgeW91ciByZXF1aXJlbWVudHMuICBNb2xzb2Z0IExMQyBhbHNvIHdhcnJhbnRzIHRoYXQgdGhlIG1lZGlhIGNvbnRhaW5pbmcgdGhlIFNvZnR3YXJlLCBpZiBwcm92aWRlZCBieSBNb2xzb2Z0IExMQywgaXMgZnJlZSBmcm9tIGRlZmVjdHMgaW4gbWF0ZXJpYWwgYW5kIHdvcmttYW5zaGlwIGFuZCB3aWxsIHNvIHJlbWFpbiBmb3IgbmluZXR5ICg5MCkgZGF5cyBmcm9tIHRoZSBkYXRlIHlvdSBhY3F1aXJlZCB0aGUgU29mdHdhcmUuIE1vbHNvZnQgTExDJ3Mgc29sZSBsaWFiaWxpdHkgZm9yIGFueSBicmVhY2ggb2YgdGhpcyB3YXJyYW50eSBzaGFsbCBiZSwgaW4gTW9sc29mdCBMTEMncyBzb2xlIGRpc2NyZXRpb246IChpKSB0byByZXBsYWNlIHlvdXIgZGVmZWN0aXZlIG1lZGlhOyBvciAoaWkpIHRvIGFkdmlzZSB5b3UgaG93IHRvIGFjaGlldmUgc3Vic3RhbnRpYWxseSB0aGUgc2FtZSBmdW5jdGlvbmFsaXR5IHdpdGggdGhlIFNvZnR3YXJlIGFzIGRlc2NyaWJlZCBpbiB0aGUgRG9jdW1lbnRhdGlvbiB0aHJvdWdoIGEgcHJvY2VkdXJlIGRpZmZlcmVudCBmcm9tIHRoYXQgc2V0IGZvcnRoIGluIHRoZSBEb2N1bWVudGF0aW9uOyBvciAoaWlpKSBpZiB0aGUgYWJvdmUgcmVtZWRpZXMgYXJlIGltcHJhY3RpY2FibGUsIHRvIHJlZnVuZCB0aGUgbGljZW5zZSBmZWUgeW91IHBhaWQgZm9yIHRoZSBTb2Z0d2FyZS4gUmVwYWlyZWQsIGNvcnJlY3RlZCwgb3IgcmVwbGFjZWQgU29mdHdhcmUgYW5kIERvY3VtZW50YXRpb24gc2hhbGwgYmUgY292ZXJlZCBieSB0aGlzIGxpbWl0ZWQgd2FycmFudHkgZm9yIHRoZSBwZXJpb2QgcmVtYWluaW5nIHVuZGVyIHRoZSB3YXJyYW50eSB0aGF0IGNvdmVyZWQgdGhlIG9yaWdpbmFsIFNvZnR3YXJlLCBvciBpZiBsb25nZXIsIGZvciB0aGlydHkgKDMwKSBkYXlzIGFmdGVyIHRoZSBkYXRlIChhKSBvZiBzaGlwbWVudCB0byB5b3Ugb2YgdGhlIHJlcGFpcmVkIG9yIHJlcGxhY2VkIFNvZnR3YXJlLCBvciAoYikgTW9sc29mdCBMTEMgYWR2aXNlZCB5b3UgaG93IHRvIG9wZXJhdGUgdGhlIFNvZnR3YXJlIHNvIGFzIHRvIGFjaGlldmUgdGhlIGZ1bmN0aW9uYWxpdHkgZGVzY3JpYmVkIGluIHRoZSBEb2N1bWVudGF0aW9uLiBPbmx5IGlmIHlvdSBpbmZvcm0gTW9sc29mdCBMTEMgb2YgeW91ciBwcm9ibGVtIHdpdGggdGhlIFNvZnR3YXJlIGR1cmluZyB0aGUgYXBwbGljYWJsZSB3YXJyYW50eSBwZXJpb2QgYW5kIHByb3ZpZGUgZXZpZGVuY2Ugb2YgdGhlIGRhdGUgeW91IHB1cmNoYXNlZCBhIGxpY2Vuc2UgdG8gdGhlIFNvZnR3YXJlIHdpbGwgTW9sc29mdCBMTEMgYmUgb2JsaWdhdGVkIHRvIGhvbm9yIHRoaXMgd2FycmFudHkuIE1vbHNvZnQgTExDIHdpbGwgdXNlIHJlYXNvbmFibGUgY29tbWVyY2lhbCBlZmZvcnRzIHRvIHJlcGFpciwgcmVwbGFjZSwgYWR2aXNlLCBvciwgZm9yIGluZGl2aWR1YWwgY29uc3VtZXJzLCByZWZ1bmQgcHVyc3VhbnQgdG8gdGhlIGZvcmVnb2luZyB3YXJyYW50eSB3aXRoaW4gMzAgZGF5cyBvZiBiZWluZyBzbyBub3RpZmllZC4KKworVEhJUyBJUyBBIExJTUlURUQgV0FSUkFOVFksIEFORCBJVCBJUyBUSEUgT05MWSBXQVJSQU5UWSBNQURFIEJZIE1PTFNPRlQgTExDLiAgTU9MU09GVCBMTEMgTUFLRVMgTk8gT1RIRVIgRVhQUkVTUyBXQVJSQU5UWSBBTkQgTk8gV0FSUkFOVFkgT0YgTk9OSU5GUklOR0VNRU5UIE9GIFRISVJEIFBBUlRJRVMnIFJJR0hUUy4gVEhFIERVUkFUSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIE9GIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBJUyBMSU1JVEVEIFRPIFRIRSBBQk9WRSBMSU1JVEVEIFdBUlJBTlRZIFBFUklPRDsgU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBMSU1JVEFUSU9OUyBPTiBIT1cgTE9ORyBBTiBJTVBMSUVEIFdBUlJBTlRZIExBU1RTLCBTTyBMSU1JVEFUSU9OUyBNQVkgTk9UIEFQUExZIFRPIFlPVS4gTk8gTU9MU09GVCBMTEMgREVBTEVSLCBBR0VOVCwgT1IgRU1QTE9ZRUUgSVMgQVVUSE9SSVpFRCBUTyBNQUtFIEFOWSBNT0RJRklDQVRJT05TLCBFWFRFTlNJT05TLCBPUiBBRERJVElPTlMgVE8gVEhJUyBXQVJSQU5UWS4KKworSWYgYW55IG1vZGlmaWNhdGlvbnMgYXJlIG1hZGUgdG8gdGhlIFNvZnR3YXJlIGJ5IHlvdSBkdXJpbmcgdGhlIHdhcnJhbnR5IHBlcmlvZDsgaWYgdGhlIG1lZGlhIGlzIHN1YmplY3RlZCB0byBhY2NpZGVudCwgYWJ1c2UsIG9yIGltcHJvcGVyIHVzZTsgb3IgaWYgeW91IHZpb2xhdGUgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCB0aGVuIHRoaXMgd2FycmFudHkgc2hhbGwgaW1tZWRpYXRlbHkgYmUgdGVybWluYXRlZC4gVGhpcyB3YXJyYW50eSBzaGFsbCBub3QgYXBwbHkgaWYgdGhlIFNvZnR3YXJlIGlzIHVzZWQgb24gb3IgaW4gY29uanVuY3Rpb24gd2l0aCBoYXJkd2FyZSBvciBzb2Z0d2FyZSBvdGhlciB0aGFuIHRoZSB1bm1vZGlmaWVkIHZlcnNpb24gb2YgaGFyZHdhcmUgYW5kIHNvZnR3YXJlIHdpdGggd2hpY2ggdGhlIHNvZnR3YXJlIHdhcyBkZXNpZ25lZCB0byBiZSB1c2VkIGFzIGRlc2NyaWJlZCBpbiB0aGUgRG9jdW1lbnRhdGlvbi4gIFRISVMgV0FSUkFOVFkgR0lWRVMgWU9VIFNQRUNJRklDIExFR0FMIFJJR0hUUywgQU5EIFlPVSBNQVkgSEFWRSBPVEhFUiBMRUdBTCBSSUdIVFMgVEhBVCBWQVJZIEJZIEpVUklTRElDVElPTi4KKworUEFSVCBJSUkgLS0gVEVSTVMgQVBQTElDQUJMRSBUTyBBTEwgTElDRU5TRSBHUkFOVFMuCisKK1NDT1BFIE9GIEdSQU5ULgorCitZb3UgbWF5OgorCisqCXVzZSB0aGUgU29mdHdhcmUgb24gYW55IHNpbmdsZSBjb21wdXRlcjsKKworKgl1c2UgdGhlIFNvZnR3YXJlIG9uIGEgbmV0d29yaywgcHJvdmlkZWQgdGhhdCBlYWNoIHBlcnNvbiBhY2Nlc3NpbmcgdGhlIFNvZnR3YXJlIHRocm91Z2ggdGhlIG5ldHdvcmsgaGFzIGEgY29weSBvZiB0aGUgU29mdHdhcmUgbGljZW5zZWQgdG8gdGhhdCBwZXJzb247CisKKyoJdXNlIHRoZSBTb2Z0d2FyZSBvbiBhIHNlY29uZCBjb21wdXRlciBzbyBsb25nIGFzIG9ubHkgb25lIGNvcHkgaXMgdXNlZCBhdCBhIHRpbWU7CisKKyoJY29weSB0aGUgU29mdHdhcmUgZm9yIGFyY2hpdmFsIHB1cnBvc2VzLCBwcm92aWRlZCBhbnkgY29weSBtdXN0IGNvbnRhaW4gYWxsIG9mCit0aGUgb3JpZ2luYWwgU29mdHdhcmUncyBwcm9wcmlldGFyeSBub3RpY2VzOyBvcgorCisqCWlmIHlvdSBoYXZlIHB1cmNoYXNlZCBhIFBhY2sgb2YgbGljZW5zZXMgZm9yIHRoZSBTb2Z0d2FyZSAoYnV0IG5vdCB0aGUgRG9jdW1lbnRhdGlvbiksIHByb3ZpZGVkIGFueSBjb3B5IG11c3QgY29udGFpbiBhbGwgb2YgdGhlIG9yaWdpbmFsIFNvZnR3YXJlJ3MgcHJvcHJpZXRhcnkgbm90aWNlcy4gIFRoZSBudW1iZXIgb2YgY29waWVzIGlzIHRoZSB0b3RhbCBudW1iZXIgb2YgY29waWVzIHRoYXQgbWF5IGJlIG1hZGUgZm9yIGFsbCBwbGF0Zm9ybXMuICBBZGRpdGlvbmFsIGNvcGllcyBvZiBEb2N1bWVudGF0aW9uIG1heSBiZSBwdXJjaGFzZWQuCisKK1lvdSBtYXkgbm90OgorCisqCXBlcm1pdCBvdGhlciBpbmRpdmlkdWFscyB0byB1c2UgdGhlIFNvZnR3YXJlIGV4Y2VwdCB1bmRlciB0aGUgdGVybXMgbGlzdGVkIGFib3ZlOworCisqCXBlcm1pdCBjb25jdXJyZW50IHVzZSBvZiB0aGUgU29mdHdhcmU7CisKKyoJbW9kaWZ5LCB0cmFuc2xhdGUsIHJldmVyc2UgZW5naW5lZXIsIGRlY29tcGlsZSwgZGlzYXNzZW1ibGUgKGV4Y2VwdCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3cyBzcGVjaWZpY2FsbHkgcHJvaGliaXQgc3VjaCByZXN0cmljdGlvbiksIG9yIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBTb2Z0d2FyZTsKKworKgljb3B5IHRoZSBTb2Z0d2FyZSBvdGhlciB0aGFuIGFzIHNwZWNpZmllZCBhYm92ZTsKKworKglyZW50LCBsZWFzZSwgZ3JhbnQgYSBzZWN1cml0eSBpbnRlcmVzdCBpbiwgb3Igb3RoZXJ3aXNlIHRyYW5zZmVyIHJpZ2h0cyB0byB0aGUgU29mdHdhcmU7CisKK29yCisKKyoJcmVtb3ZlIGFueSBwcm9wcmlldGFyeSBub3RpY2VzIG9yIGxhYmVscyBvbiB0aGUgU29mdHdhcmUuCisKK1RJVExFLgorCitUaXRsZSwgb3duZXJzaGlwIHJpZ2h0cywgYW5kIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaW4gdGhlIFNvZnR3YXJlIGFuZCBEb2N1bWVudGF0aW9uIHNoYWxsIHJlbWFpbiBpbiBNb2xzb2Z0IExMQy4gVGhlIFNvZnR3YXJlIGFuZCBEb2N1bWVudGF0aW9uIGFyZSBwcm90ZWN0ZWQgYnkgY29weXJpZ2h0IGFuZCBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbGF3cyBhbmQgYnkgaW50ZXJuYXRpb25hbCB0cmVhdGllcy4gVGl0bGUgYW5kIHJlbGF0ZWQgcmlnaHRzIGluIHRoZSBjb250ZW50IGFjY2Vzc2VkIHRocm91Z2ggdGhlIFNvZnR3YXJlIGlzIHRoZSBwcm9wZXJ0eSBvZiB0aGUgYXBwbGljYWJsZSBjb250ZW50IG93bmVyIGFuZCBtYXkgYmUgcHJvdGVjdGVkIGJ5IGFwcGxpY2FibGUgbGF3LiBUaGlzIExpY2Vuc2UgZ2l2ZXMgeW91IG5vIHJpZ2h0cyB0byBzdWNoIGNvbnRlbnQuCisKK1RFUk1JTkFUSU9OLgorCitUaGUgbGljZW5zZSB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmIHlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRoZSBsaW1pdGF0aW9ucyBkZXNjcmliZWQgaGVyZWluLiAgT24gdGVybWluYXRpb24sIHlvdSBtdXN0IGRlc3Ryb3kgYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUgYW5kIERvY3VtZW50YXRpb24uCisKK1VTRSBPRiBGUkVFIExJQlJBUlkuCisKK01vbHNvZnQgSUNNIFZlcnNpb24gMy4wIHVzZXMgYSBmcmVlIGxpYnJhcnkgY2FsbGVkIFF3dCBmb3IgYnVpbGRpbmcgaXRzIGV4ZWN1dGFibGUuICBUaGUgUXd0IGxpYnJhcnkgaXMgZm91bmQgaW4gdGhlIElDTSAzLjAgZmlsZSAicXd0LmRsbCIgaW4gdGhlIGRpc3RyaWJ1dGlvbiBhbmQgaXMgYXZhaWxhYmxlIHVuZGVyIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UsIHdoaWNoIGlzIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvbGVzc2VyLmh0bWwuICBBY2NvcmRpbmcgdG8gdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIHRoZSB1c2Ugb2YgUXd0LCBMaWNlbnNlZXMgYXJlIGZyZWUgdG8gbW9kaWZ5IHRoZSBzb3VyY2UgY29kZSBmb3IgUXd0LCB3aGljaCBjYW4gYmUgZm91bmQgYXQ6CisKK2h0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvcXd0LgorCitZb3UgYXJlIGZyZWUgdG8gbW9kaWZ5IHRoZSBjb250ZW50IG9mIHRoZSBRd3QgbGlicmFyeSBhbmQgcmVjb21waWxlIHRoZSBsaWJyYXJ5LCBidXQgeW91IGFyZSBwcm9oaWJpdGVkIGZyb20gY2hhbmdpbmcgdGhlIGNvbnRlbnQgb2YgdGhlIGRlZmluaXRpb24gZmlsZS4gIFRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBhcHBsaWVzIHRvIHRoZSBRd3QgbGlicmFyeToKKworVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4gIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisKK01vbHNvZnQgTExDIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgbGlicmFyeSAiUXd0IiAoYSBsaWJyYXJ5IGNvbnRhaW5pbmcgR1VJIGNvbXBvbmVudHMgYW5kIHV0aWxpdHkgY2xhc3Nlcykgd3JpdHRlbiBieSBKb3NlZiBXaWxnZW4uICBIb3dldmVyLCB0aGUgcmVtYWluZGVyIG9mIElDTSBWZXJzaW9uIDMuMCBpcyBwcm90ZWN0ZWQgYnkgQ29weXJpZ2h0IChjKSAxOTg5LTIwMDIgTW9sc29mdCBMTEMuCisKK0xJQ0VOU0VTIElOQ0xVRElORyBUSEUgTUlOSS1YUERCIE9SIFRIRSBYUERCIERBVEFCQVNFLgorCitNb2xzb2Z0IExMQydzIFhQREIgYW5kIHRoZSBNaW5pLVhQREIgZGF0YWJhc2VzIGNvbnRhaW4gYWxsIGtub3duIHByb3RlaW5zIGFubm90YXRlZCBpbiBhIGZvcm0gZGVzaWduZWQgZm9yIHJhcGlkIGFuZCBhY2N1cmF0ZSB1c2Ugd2l0aCBNb2xzb2Z0IElDTSBTb2Z0d2FyZS4gTW9sc29mdCBYUERCIGFuZCBNaW5pLVhQREIgYXJlIGRlcml2ZWQgZnJvbSBkYXRhIGZyZWVseSBhdmFpbGFibGUgZnJvbSB0aGUgUHJvdGVpbiBEYXRhIEJhbmsgYW5kIGZvdW5kIGF0IHd3dy5yY3NiLm9yZy9wZGIuICBNb2xzb2Z0IHdpc2hlcyB0byBhY2tub3dsZWRnZSB0aGUgc291cmNlIG9mIHRoZSBQQkQgZGF0YSBmaWxlczogSC5NLiBCZXJtYW4sIEouIFdlc3Ricm9vaywgWi4gRmVuZywgRy4gR2lsbGlsYW5kLCBULk4uIEJoYXQsIEguIFdlaXNzaWcsIEkuTi4gU2hpbmR5YWxvdiwgUC5FLiBCb3VybmU6IFRoZSBQcm90ZWluIERhdGEgQmFuay4gTnVjbGVpYyBBY2lkcyBSZXNlYXJjaCwgMjggcHAuIDIzNS0yNDIgKDIwMDApLiBVc2VycyBvZiBNb2xzb2Z0IFhQREIgYW5kIE1pbmktWFBEQiBzaG91bGQgbm90ZSB0aGF0IHVzZXJzIGFzc3VtZSBhbGwgcmVzcG9uc2liaWxpdHkgZm9yIGluc3VyaW5nIHRoYXQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltcyBhc3NvY2lhdGVkIHdpdGggYW55IGRhdGEgc2V0IGFwcGVhcmluZyBpbiB0aGUgTW9sb3NmdCBYUERCIGFyZSBob25vcmVkLiAgTW9sc29mdCdzIFhQREIgYW5kIE1pbmktWFBEQiBkYXRhIGZpbGVzIGRvIG5vdCBjb250YWluIGFueSBpbmZvcm1hdGlvbiBvbiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zIHdpdGggdGhlIGV4Y2VwdGlvbiBpbiBzb21lIGNhc2VzIG9mIGEgcmVmZXJlbmNlIGZvciBhIHBhdGVudCBpbnZvbHZpbmcgdGhlIHN0cnVjdHVyZS4gTW9sc29mdCBYUERCIGFuZCBNaW5pLVhQREIgZmlsZXMgYXJlIHByb3ZpZGVkIG9uIGFuICJhcyBpcyIgYmFzaXMsIGFuZCBNb2xzb2Z0IGNhbm5vdCBiZSBoZWxkIGxpYWJsZSB0byBhbnkgcGFydHkgZm9yIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgaW5jbHVkaW5nIGxvc3QgcHJvZml0cywgYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhlIG1hdGVyaWFscy4gVGhlIHJlc291cmNlcyBwcm92aWRlZCBieSBNb2xzb2Z0IFhQREIgYW5kIE1pbmktWFBEQiBhcmUgcHJvdmlkZWQgV0lUSE9VVAorCitXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELiBUSElTIElOQ0xVREVTIEJVVCBJUyBOT1QgTElNSVRFRCBUTyBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBNT0xTT0ZUIExMQyBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTiBUSEFUIElUUyBYUERCIFJFU09VUkNFUyBXSUxMIE5PVCBJTkZSSU5HRSBBTlkgUEFURU5UIE9SIE9USEVSIFBST1BSSUVUQVJZIFJJR0hULgorCitFWFBPUlQgQ09OVFJPTFMuCisKK05vbmUgb2YgdGhlIFNvZnR3YXJlIG9yIHVuZGVybHlpbmcgaW5mb3JtYXRpb24gb3IgdGVjaG5vbG9neSBtYXkgYmUgZG93bmxvYWRlZCBvciBvdGhlcndpc2UgZXhwb3J0ZWQgb3IgcmVleHBvcnRlZCAoaSkgaW50byAob3IgdG8gYSBuYXRpb25hbCBvciByZXNpZGVudCBvZikgQ3ViYSwgSXJhcSwgTGlieWEsIFl1Z29zbGF2aWEsIE5vcnRoIEtvcmVhLCBJcmFuLCBTeXJpYSBvciBhbnkgb3RoZXIgY291bnRyeSB0byB3aGljaCB0aGUgVS5TLiBoYXMgZW1iYXJnb2VkIGdvb2RzOyBvciAoaWkpIHRvIGFueW9uZSBvbiB0aGUgVS5TLiBUcmVhc3VyeSBEZXBhcnRtZW50J3MgbGlzdCBvZiBTcGVjaWFsbHkgRGVzaWduYXRlZCBOYXRpb25hbHMgb3IgdGhlIFUuUy4gQ29tbWVyY2UgRGVwYXJ0bWVudCdzIFRhYmxlIG9mIERlbmlhbCBPcmRlcnMuIEJ5IGRvd25sb2FkaW5nIG9yIHVzaW5nIHRoZSBTb2Z0d2FyZSwgeW91IGFyZSBhZ3JlZWluZyB0byB0aGUgZm9yZWdvaW5nIGFuZCB5b3UgYXJlIHJlcHJlc2VudGluZyBhbmQgd2FycmFudGluZyB0aGF0IHlvdSBhcmUgbm90IGxvY2F0ZWQgaW4sIHVuZGVyIHRoZSBjb250cm9sIG9mLCBvciBhIG5hdGlvbmFsIG9yIHJlc2lkZW50IG9mIGFueSBzdWNoIGNvdW50cnkgb3Igb24gYW55IHN1Y2ggbGlzdC4KKworSW4gYWRkaXRpb24sIGlmIHRoZSBsaWNlbnNlZCBTb2Z0d2FyZSBpcyBpZGVudGlmaWVkIGFzIGEgbm90LWZvci1leHBvcnQgcHJvZHVjdCAoZm9yIGV4YW1wbGUsIG9uIHRoZSBib3gsIG1lZGlhIG9yIGluIHRoZSBpbnN0YWxsYXRpb24gcHJvY2VzcyksIHRoZW4gdGhlIGZvbGxvd2luZyBhcHBsaWVzOgorCitFWENFUFQgRk9SIEVYUE9SVCBUTyBDQU5BREEgRk9SIFVTRSBJTiBDQU5BREEgQlkgQ0FOQURJQU4gQ0lUSVpFTlMsIFRIRSBTT0ZUV0FSRSBBTkQgQU5ZIFVOREVSTFlJTkcgVEVDSE5PTE9HWSBNQVkgTk9UIEJFIEVYUE9SVEVEIE9VVFNJREUgVEhFIFVOSVRFRCBTVEFURVMgT1IgVE8gQU5ZIEZPUkVJR04gRU5USVRZIE9SICJGT1JFSUdOIFBFUlNPTiIgQVMgREVGSU5FRCBCWSBVLlMuIEdPVkVSTk1FTlQgRUdVTEFUSU9OUywgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZT05FIFdITyBJUyBOT1QgQSBDSVRJWkVOLCBOQVRJT05BTCBPUiBMQVdGVUwgUEVSTUFORU5UIFJFU0lERU5UIE9GIFRIRSBVTklURUQgU1RBVEVTLiAgQlkgRE9XTkxPQURJTkcgT1IgVVNJTkcgVEhFIFNPRlRXQVJFLCBZT1UgQVJFIEFHUkVFSU5HIFRPIFRIRSBGT1JFR09JTkcgQU5EIFlPVSBBUkUgV0FSUkFOVElORyBUSEFUIFlPVSBBUkUgTk9UIEEgIkZPUkVJR04gUEVSU09OIiBPUiBVTkRFUiBUSEUgQ09OVFJPTCBPRiBBIEZPUkVJR04gUEVSU09OLgorCitMSU1JVEFUSU9OIE9GIExJQUJJTElUWS4KKworVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLCBUT1JULCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBNT0xTT0ZUIExMQyBPUiBJVFMgU1VQUExJRVJTIE9SIFJFU0VMTEVSUyBCRSBMSUFCTEUgVE8gWU9VIE9SIEFOWSBPVEhFUiBQRVJTT04gRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMuIElOIE5PIEVWRU5UIFdJTEwgTU9MU09GVCBMTEMgQkUgTElBQkxFIEZPUiBBTlkgREFNQUdFUyBJTiBFWENFU1MgT0YgVEhFIEFNT1VOVCBNT0xTT0ZUIExMQyBSRUNFSVZFRCBGUk9NIFlPVSBGT1IgQSBMSUNFTlNFIFRPIFRIRSBTT0ZUV0FSRSwgRVZFTiBJRiBNT0xTT0ZUIExMQyBTSEFMTCBIQVZFIEJFRU4gSU5GT1JNRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUywgT1IgRk9SIEFOWSBDTEFJTSBCWSBBTlkgT1RIRVIgUEFSVFkuIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gRlVSVEhFUk1PUkUsIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSElTIExJTUlUQVRJT04gQU5EIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworSElHSCBSSVNLIEFDVElWSVRJRVMuCisKK1RoZSBTb2Z0d2FyZSBpcyBub3QgZmF1bHQtdG9sZXJhbnQgYW5kIGlzIG5vdCBkZXNpZ25lZCwgbWFudWZhY3R1cmVkIG9yIGludGVuZGVkIGZvciB1c2Ugb3IgcmVzYWxlIGFzIG9uLWxpbmUgY29udHJvbCBlcXVpcG1lbnQgaW4gaGF6YXJkb3VzIGVudmlyb25tZW50cyByZXF1aXJpbmcgZmFpbC1zYWZlIHBlcmZvcm1hbmNlLCBzdWNoIGFzIGluIHRoZSBvcGVyYXRpb24gb2YgbnVjbGVhciBmYWNpbGl0aWVzLCBhaXJjcmFmdCBuYXZpZ2F0aW9uIG9yIGNvbW11bmljYXRpb24gc3lzdGVtcywgYWlyIHRyYWZmaWMgY29udHJvbCwgZGlyZWN0IGxpZmUgc3VwcG9ydCBtYWNoaW5lcywgb3Igd2VhcG9ucyBzeXN0ZW1zLCBpbiB3aGljaCB0aGUgZmFpbHVyZSBvZiB0aGUgU29mdHdhcmUgY291bGQgbGVhZCBkaXJlY3RseSB0byBkZWF0aCwgcGVyc29uYWwgaW5qdXJ5LCBvciBzZXZlcmUgcGh5c2ljYWwgb3IgZW52aXJvbm1lbnRhbCBkYW1hZ2UgKCJIaWdoIFJpc2sgQWN0aXZpdGllcyIpLiAgTW9sc29mdCBMTEMgc3BlY2lmaWNhbGx5IGRpc2NsYWltcyBhbnkgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5IG9mIGZpdG5lc3MgZm9yIEhpZ2ggUmlzayBBY3Rpdml0aWVzLgorCitNSVNDRUxMQU5FT1VTLgorCitJZiB0aGUgY29weSBvZiB0aGUgU29mdHdhcmUgeW91IHJlY2VpdmVkIHdhcyBhY2NvbXBhbmllZCBieSBhIHByaW50ZWQgb3Igb3RoZXIgZm9ybSBvZiBhICJoYXJkLWNvcHkiIFNvZnR3YXJlIExpY2Vuc2UgQWdyZWVtZW50IHdob3NlIHRlcm1zIHZhcnkgZnJvbSB0aGlzIEFncmVlbWVudCwgdGhlbiB0aGUgaGFyZC1jb3B5IFNvZnR3YXJlIExpY2Vuc2UgQWdyZWVtZW50IGdvdmVybnMgeW91ciB1c2Ugb2YgdGhlIFNvZnR3YXJlLiAgVGhpcyBBZ3JlZW1lbnQgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgdGhpcyBsaWNlbnNlIGFuZCBtYXkgYmUgYW1lbmRlZCBvbmx5IGJ5IGEgd3JpdGluZyBleGVjdXRlZCBieSBib3RoIHBhcnRpZXMuICBUSEUgQUNDRVBUQU5DRSBPRiBBTlkgUFVSQ0hBU0UgT1JERVIgUExBQ0VEIEJZIFlPVSBJUyBFWFBSRVNTTFkgTUFERSBDT05ESVRJT05BTCBPTiBZT1VSIEFTU0VOVCBUTyBUSEUgVEVSTVMgU0VUIEZPUlRIIEhFUkVJTiBBTkQgTk9UIFRIT1NFIElOIFlPVVIgUFVSQ0hBU0UgT1JERVIuICBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiAgVGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgZ292ZXJuZWQgYnkgQ2FsaWZvcm5pYSBsYXcgKGV4Y2VwdCBmb3IgY29uZmxpY3Qgb2YgbGF3IHByb3Zpc2lvbnMpLiBUaGUgYXBwbGljYXRpb24gdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb2YgQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4KKworVS5TLiBHT1ZFUk5NRU5UIFJFU1RSSUNURUQgUklHSFRTLgorCitVc2UsIGR1cGxpY2F0aW9uIG9yIGRpc2Nsb3N1cmUgYnkgdGhlIEdvdmVybm1lbnQgaXMgc3ViamVjdCB0byByZXN0cmljdGlvbnMgc2V0IGZvcnRoIGluIHN1YnBhcmFncmFwaHMoYSkgdGhyb3VnaCAoZCkgb2YgdGhlIENvbW1lcmNpYWwgQ29tcHV0ZXItUmVzdHJpY3RlZCBSaWdodHMgY2xhdXNlIGF0IEZBUiA1Mi4yMjctMTkgd2hlbiBhcHBsaWNhYmxlLCBvciBpbiBzdWJwYXJhZ3JhcGggKGMpKDEpKGlpKSBvZiB0aGUgUmlnaHRzIGluIFRlY2huaWNhbCBEYXRhIGFuZCBDb21wdXRlciBTb2Z0d2FyZSBjbGF1c2UgYXQgREZBUlMgMjUyLjIyNy03MDEzLCBvciBhdCAyNTIuMjExLTcwMTUsIG9yIHRvIE1vbHNvZnQgTExDJ3Mgc3RhbmRhcmQgY29tbWVyY2lhbCBsaWNlbnNlLCBhcyBhcHBsaWNhYmxlLCBhbmQgaW4gc2ltaWxhciBjbGF1c2VzIGluIHRoZSBOQVNBIEZBUiBTdXBwbGVtZW50LiBDb250cmFjdG9yL21hbnVmYWN0dXJlciBpcyBNb2xzb2Z0LCBMLkwuQy4sIDMzNjYgTm8uIFRvcnJleSBQaW5lcyBDdC4sIFN0ZS4gMzAwLCBMYSBKb2xsYSwgQ0EgIDkyMDM3IFVTQS4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL01vcmlhIGIvbGljZW5zZXMvTW9yaWEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTAxYzUyNAotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL01vcmlhCkBAIC0wLDAgKzEsMTIgQEAKK0NvcHlyaWdodCAoYykgMTk5NyBCZW4gSGFycmlzb24sIEphbWVzIEUuIFdpbHNvbiwgUm9iZXJ0IEEuIEtvZW5la2UKKworVGhpcyBzb2Z0d2FyZSBtYXkgYmUgY29waWVkIGFuZCBkaXN0cmlidXRlZCBmb3IgZWR1Y2F0aW9uYWwsIHJlc2VhcmNoLAorYW5kIG5vdCBmb3IgcHJvZml0IHB1cnBvc2VzIHByb3ZpZGVkIHRoYXQgdGhpcyBjb3B5cmlnaHQgYW5kIHN0YXRlbWVudAorYXJlIGluY2x1ZGVkIGluIGFsbCBzdWNoIGNvcGllcy4gIE90aGVyIGNvcHlyaWdodHMgbWF5IGFsc28gYXBwbHkuCisKK0FsbCBjaGFuZ2VzIG1hZGUgYnkgQmVuIEhhcnJpc29uLCBSb2JlcnQgUnVlaGxtYW5uLCBhbmQgbWFueSBvdGhlciBBbmdiYW5kCitkZXZlbG9wZXJzIGFyZSBhbHNvIGF2YWlsYWJsZSB1bmRlciB0aGUgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UuCitOb3RlIHRoYXQgdGhpcyBkb2Vzbid0IGluZmx1ZW5jZSB0aGUgY3VycmVudCBkaXN0cmlidXRpb24sIHNpbmNlIHBhcnRzIG9mCit0aGUgc291cmNlIGFyZSBzdGlsbCBvbmx5IGF2YWlsYWJsZSB1bmRlciB0aGUgb2xkIE1vcmlhL0FuZ2JhbmQgbGljZW5zZS4KK1VudGlsIGFsbCBwYXJ0cyBvZiBBbmdiYW5kIGFyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgR1BMIHRoZSBvbmx5IHZhbGlkCitsaWNlbnNlIHJlbWFpbnMgdGhlIG9yaWdpbmFsIE1vcmlhL0FuZ2JhbmQgbGljZW5zZS4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL01vemFydCBiL2xpY2Vuc2VzL01vemFydApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjNjODQyCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvTW96YXJ0CkBAIC0wLDAgKzEsNDIgQEAKKwlMaWNlbnNlIEFncmVlbWVudAorCQlmb3IKK01vemFydCwgYW4gaW1wbGVtZW50YXRpb24gb2YgT3ogMyAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gYXJlIGNvcHlyaWdodGVkCitieSBTYWFybGFuZCBVbml2ZXJzaXR5LCB0aGUgU3dlZGlzaCBJbnN0aXR1dGUgb2YKK0NvbXB1dGVyIFNjaWVuY2UgKFNJQ1MpLCB0aGUgR2VybWFuIFJlc2VhcmNoIENlbnRlcgorZm9yIEFydGlmaWNpYWwgSW50ZWxsaWdlbmNlIChERktJKSwgYW5kIG90aGVyCitwYXJ0aWVzLiAgVGhlIGZvbGxvd2luZyB0ZXJtcyBhcHBseSB0byBhbGwgZmlsZXMKK2Fzc29jaWF0ZWQgd2l0aCB0aGUgc29mdHdhcmUgdW5sZXNzIGV4cGxpY2l0bHkKK2Rpc2NsYWltZWQgaW4gaW5kaXZpZHVhbCBmaWxlcyAoc2VlIHRoZSBmaWxlCitMSUNFTlNFLW90aGVycyBmb3IgYSBsaXN0IG9mIHRoZXNlIGV4Y2VwdGlvbnMpLgorCitUaGUgYXV0aG9ycyBoZXJlYnkgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UsIGNvcHksCittb2RpZnksIGRpc3RyaWJ1dGUsIGFuZCBsaWNlbnNlIHRoaXMgc29mdHdhcmUgYW5kCitpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UsIHByb3ZpZGVkIHRoYXQKK2V4aXN0aW5nIGNvcHlyaWdodCBub3RpY2VzIGFyZSByZXRhaW5lZCBpbiBhbGwKK2NvcGllcyBhbmQgdGhhdCB0aGlzIG5vdGljZSBpcyBpbmNsdWRlZCB2ZXJiYXRpbQoraW4gYW55IGRpc3RyaWJ1dGlvbnMuIE5vIHdyaXR0ZW4gYWdyZWVtZW50LAorbGljZW5zZSwgb3Igcm95YWx0eSBmZWUgaXMgcmVxdWlyZWQgZm9yIGFueSBvZiB0aGUKK2F1dGhvcml6ZWQgdXNlcy4gTW9kaWZpY2F0aW9ucyB0byB0aGlzIHNvZnR3YXJlCittYXkgYmUgY29weXJpZ2h0ZWQgYnkgdGhlaXIgYXV0aG9ycyBhbmQgbmVlZCBub3QKK2ZvbGxvdyB0aGUgbGljZW5zaW5nIHRlcm1zIGRlc2NyaWJlZCBoZXJlLAorcHJvdmlkZWQgdGhhdCB0aGUgbmV3IHRlcm1zIGFyZSBjbGVhcmx5IGluZGljYXRlZAorb24gdGhlIGZpcnN0IHBhZ2Ugb2YgZWFjaCBmaWxlIHdoZXJlIHRoZXkgYXBwbHkuCisKK0lOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIERJU1RSSUJVVE9SUyBCRQorTElBQkxFIFRPIEFOWSBQQVJUWSBGT1IgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwKK0lOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVAorT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBJVFMgRE9DVU1FTlRBVElPTiwgT1IKK0FOWSBERVJJVkFUSVZFUyBUSEVSRU9GLCBFVkVOIElGIFRIRSBBVVRIT1JTIEhBVkUKK0JFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK1RIRSBBVVRIT1JTIEFORCBESVNUUklCVVRPUlMgU1BFQ0lGSUNBTExZIERJU0NMQUlNCitBTlkgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IKK0EgUEFSVElDVUxBUiBQVVJQT1NFLCBBTkQgTk9OLUlORlJJTkdFTUVOVC4gIFRISVMKK1NPRlRXQVJFIEFORCBJVFMgRE9DVU1FTlRBVElPTiBBUkUgUFJPVklERUQgT04gQU4KKyJBUyBJUyIgQkFTSVMsIEFORCBUSEUgQVVUSE9SUyBBTkQgRElTVFJJQlVUT1JTCitIQVZFIE5PIE9CTElHQVRJT04gVE8gUFJPVklERSBNQUlOVEVOQU5DRSwgU1VQUE9SVCwKK1VQREFURVMsIEVOSEFOQ0VNRU5UUywgT1IgTU9ESUZJQ0FUSU9OUy4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL01zLVBMIGIvbGljZW5zZXMvTXMtUEwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA5MTljOAotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL01zLVBMCkBAIC0wLDAgKzEsODEgQEAKKyAgICAgICAgICAgICAgICAgICAgICBNaWNyb3NvZnQgUGVybWlzc2l2ZSBMaWNlbnNlIChNcy1QTCkKKworICAgIAorCisgICBUaGlzIGxpY2Vuc2UgZ292ZXJucyB1c2Ugb2YgdGhlIGFjY29tcGFueWluZyBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGUKKyAgIHNvZnR3YXJlLCB5b3UgYWNjZXB0IHRoaXMgbGljZW5zZS4gSWYgeW91IGRvIG5vdCBhY2NlcHQgdGhlIGxpY2Vuc2UsIGRvCisgICBub3QgdXNlIHRoZSBzb2Z0d2FyZS4KKworICAgIAorCisxLiBEZWZpbml0aW9ucworCisgICBUaGUgdGVybXMgInJlcHJvZHVjZSwiICJyZXByb2R1Y3Rpb24sIiAiZGVyaXZhdGl2ZSB3b3JrcywiIGFuZAorICAgImRpc3RyaWJ1dGlvbiIgaGF2ZSB0aGUgc2FtZSBtZWFuaW5nIGhlcmUgYXMgdW5kZXIgVS5TLiBjb3B5cmlnaHQgbGF3LgorCisgICBBICJjb250cmlidXRpb24iIGlzIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZSwgb3IgYW55IGFkZGl0aW9ucyBvciBjaGFuZ2VzIHRvCisgICB0aGUgc29mdHdhcmUuCisKKyAgIEEgImNvbnRyaWJ1dG9yIiBpcyBhbnkgcGVyc29uIHRoYXQgZGlzdHJpYnV0ZXMgaXRzIGNvbnRyaWJ1dGlvbiB1bmRlciB0aGlzCisgICBsaWNlbnNlLgorCisgICAgIkxpY2Vuc2VkIHBhdGVudHMiIGFyZSBhIGNvbnRyaWJ1dG9yJ3MgcGF0ZW50IGNsYWltcyB0aGF0IHJlYWQgZGlyZWN0bHkKKyAgIG9uIGl0cyBjb250cmlidXRpb24uCisKKyAKKworMi4gR3JhbnQgb2YgUmlnaHRzCisKKyAgIChBKSBDb3B5cmlnaHQgR3JhbnQtIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZSwgaW5jbHVkaW5nIHRoZQorICAgbGljZW5zZSBjb25kaXRpb25zIGFuZCBsaW1pdGF0aW9ucyBpbiBzZWN0aW9uIDMsIGVhY2ggY29udHJpYnV0b3IgZ3JhbnRzCisgICB5b3UgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZSB0bworICAgcmVwcm9kdWNlIGl0cyBjb250cmlidXRpb24sIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBvZiBpdHMgY29udHJpYnV0aW9uLAorICAgYW5kIGRpc3RyaWJ1dGUgaXRzIGNvbnRyaWJ1dGlvbiBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrcyB0aGF0IHlvdSBjcmVhdGUuCisKKyAgIChCKSBQYXRlbnQgR3JhbnQtIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZSwgaW5jbHVkaW5nIHRoZQorICAgbGljZW5zZSBjb25kaXRpb25zIGFuZCBsaW1pdGF0aW9ucyBpbiBzZWN0aW9uIDMsIGVhY2ggY29udHJpYnV0b3IgZ3JhbnRzCisgICB5b3UgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSBsaWNlbnNlIHVuZGVyIGl0cyBsaWNlbnNlZAorICAgcGF0ZW50cyB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGltcG9ydCwgYW5kL29yCisgICBvdGhlcndpc2UgZGlzcG9zZSBvZiBpdHMgY29udHJpYnV0aW9uIGluIHRoZSBzb2Z0d2FyZSBvciBkZXJpdmF0aXZlIHdvcmtzCisgICBvZiB0aGUgY29udHJpYnV0aW9uIGluIHRoZSBzb2Z0d2FyZS4KKworIAorCiszLiBDb25kaXRpb25zIGFuZCBMaW1pdGF0aW9ucworCisgICAgKEEpIE5vIFRyYWRlbWFyayBMaWNlbnNlLSBUaGlzIGxpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgeW91IHJpZ2h0cyB0byB1c2UKKyAgIGFueSBjb250cmlidXRvcnMnIG5hbWUsIGxvZ28sIG9yIHRyYWRlbWFya3MuCisKKyAgIChCKSBJZiB5b3UgYnJpbmcgYSBwYXRlbnQgY2xhaW0gYWdhaW5zdCBhbnkgY29udHJpYnV0b3Igb3ZlciBwYXRlbnRzIHRoYXQKKyAgIHlvdSBjbGFpbSBhcmUgaW5mcmluZ2VkIGJ5IHRoZSBzb2Z0d2FyZSwgeW91ciBwYXRlbnQgbGljZW5zZSBmcm9tIHN1Y2gKKyAgIGNvbnRyaWJ1dG9yIHRvIHRoZSBzb2Z0d2FyZSBlbmRzIGF1dG9tYXRpY2FsbHkuCisKKyAgIChDKSBJZiB5b3UgZGlzdHJpYnV0ZSBhbnkgcG9ydGlvbiBvZiB0aGUgc29mdHdhcmUsIHlvdSBtdXN0IHJldGFpbiBhbGwKKyAgIGNvcHlyaWdodCwgcGF0ZW50LCB0cmFkZW1hcmssIGFuZCBhdHRyaWJ1dGlvbiBub3RpY2VzIHRoYXQgYXJlIHByZXNlbnQgaW4KKyAgIHRoZSBzb2Z0d2FyZS4KKworICAgKEQpIElmIHlvdSBkaXN0cmlidXRlIGFueSBwb3J0aW9uIG9mIHRoZSBzb2Z0d2FyZSBpbiBzb3VyY2UgY29kZSBmb3JtLCB5b3UKKyAgIG1heSBkbyBzbyBvbmx5IHVuZGVyIHRoaXMgbGljZW5zZSBieSBpbmNsdWRpbmcgYSBjb21wbGV0ZSBjb3B5IG9mIHRoaXMKKyAgIGxpY2Vuc2Ugd2l0aCB5b3VyIGRpc3RyaWJ1dGlvbi4gSWYgeW91IGRpc3RyaWJ1dGUgYW55IHBvcnRpb24gb2YgdGhlCisgICBzb2Z0d2FyZSBpbiBjb21waWxlZCBvciBvYmplY3QgY29kZSBmb3JtLCB5b3UgbWF5IG9ubHkgZG8gc28gdW5kZXIgYQorICAgbGljZW5zZSB0aGF0IGNvbXBsaWVzIHdpdGggdGhpcyBsaWNlbnNlLgorCisgICAoRSkgVGhlIHNvZnR3YXJlIGlzIGxpY2Vuc2VkICJhcy1pcy4iIFlvdSBiZWFyIHRoZSByaXNrIG9mIHVzaW5nIGl0LiBUaGUKKyAgIGNvbnRyaWJ1dG9ycyBnaXZlIG5vIGV4cHJlc3Mgd2FycmFudGllcywgZ3VhcmFudGVlcyBvciBjb25kaXRpb25zLiBZb3UgbWF5CisgICBoYXZlIGFkZGl0aW9uYWwgY29uc3VtZXIgcmlnaHRzIHVuZGVyIHlvdXIgbG9jYWwgbGF3cyB3aGljaCB0aGlzIGxpY2Vuc2UKKyAgIGNhbm5vdCBjaGFuZ2UuIFRvIHRoZSBleHRlbnQgcGVybWl0dGVkIHVuZGVyIHlvdXIgbG9jYWwgbGF3cywgdGhlCisgICBjb250cmlidXRvcnMgZXhjbHVkZSB0aGUgaW1wbGllZCB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSwgZml0bmVzcworICAgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlIGFuZCBub24taW5mcmluZ2VtZW50LgorCisgICAoRikgSWYgeW91IGRpc3RyaWJ1dGUgdGhlIHNvZnR3YXJlIG9yIGRlcml2YXRpdmUgd29ya3Mgd2l0aCBwcm9ncmFtcyB5b3UKKyAgIGRldmVsb3AsIHlvdSBhZ3JlZSB0byBpbmRlbW5pZnksIGRlZmVuZCwgYW5kIGhvbGQgaGFybWxlc3MgYWxsCisgICBjb250cmlidXRvcnMgZnJvbSBhbnkgY2xhaW1zLCBpbmNsdWRpbmcgYXR0b3JuZXlzJyBmZWVzLCByZWxhdGVkIHRvIHRoZQorICAgZGlzdHJpYnV0aW9uIG9yIHVzZSBvZiB5b3VyIHByb2dyYW1zLiAgRm9yIGNsYXJpdHksIHlvdSBoYXZlIG5vIHN1Y2gKKyAgIG9ibGlnYXRpb25zIHRvIGEgY29udHJpYnV0b3IgZm9yIGFueSBjbGFpbXMgYmFzZWQgc29sZWx5IG9uIHRoZSB1bm1vZGlmaWVkCisgICBjb250cmlidXRpb25zIG9mIHRoYXQgY29udHJpYnV0b3IuCisKKyAgICAoRykgSWYgeW91IG1ha2UgYW55IGFkZGl0aW9ucyBvciBjaGFuZ2VzIHRvIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZSwgeW91CisgICBtYXkgb25seSBkaXN0cmlidXRlIHRoZW0gdW5kZXIgYSBuZXcgbmFtZXNwYWNlLiAgSW4gYWRkaXRpb24sIHlvdSB3aWxsCisgICBjbGVhcmx5IGlkZW50aWZ5IHlvdXIgY2hhbmdlcyBvciBhZGRpdGlvbnMgYXMgeW91ciBvd24uCisKKyAgICAKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL05DU0EtSERGIGIvbGljZW5zZXMvTkNTQS1IREYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYwYjgyZgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL05DU0EtSERGCkBAIC0wLDAgKzEsNzQgQEAKK0NvcHlyaWdodCBOb3RpY2UgYW5kIFN0YXRlbWVudCBmb3IgTkNTQSBIaWVyYXJjaGljYWwgRGF0YSBGb3JtYXQgKEhERikKK1NvZnR3YXJlIExpYnJhcnkgYW5kIFV0aWxpdGllcworCitOQ1NBIEhERjUgKEhpZXJhcmNoaWNhbCBEYXRhIEZvcm1hdCA1KSBTb2Z0d2FyZSBMaWJyYXJ5IGFuZCBVdGlsaXRpZXMgCitDb3B5cmlnaHQgMTk5OCwgMTk5OSwgMjAwMCwgMjAwMSwgMjAwMiwgMjAwMyBieSB0aGUgQm9hcmQgb2YgVHJ1c3RlZXMgCitvZiB0aGUgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK0NvbnRyaWJ1dG9yczogTmF0aW9uYWwgQ2VudGVyIGZvciBTdXBlcmNvbXB1dGluZyBBcHBsaWNhdGlvbnMgKE5DU0EpIGF0IHRoZQorVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBhdCBVcmJhbmEtQ2hhbXBhaWduIChVSVVDKSwgTGF3cmVuY2UgTGl2ZXJtb3JlIAorTmF0aW9uYWwgTGFib3JhdG9yeSAoTExOTCksIFNhbmRpYSBOYXRpb25hbCBMYWJvcmF0b3JpZXMgKFNOTCksIExvcyBBbGFtb3MgCitOYXRpb25hbCBMYWJvcmF0b3J5IChMQU5MKSwgSmVhbi1sb3VwIEdhaWxseSBhbmQgTWFyayBBZGxlciAoZ3ppcCBsaWJyYXJ5KS4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgZm9yIGFueSBwdXJwb3NlIChpbmNsdWRpbmcgY29tbWVyY2lhbCBwdXJwb3NlcykKK3Byb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKzEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKzIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAgICBhbmQvb3IgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworMy4gIEluIGFkZGl0aW9uLCByZWRpc3RyaWJ1dGlvbnMgb2YgbW9kaWZpZWQgZm9ybXMgb2YgdGhlIHNvdXJjZSBvciBiaW5hcnkKKyAgICBjb2RlIG11c3QgY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHRoZSBvcmlnaW5hbCBjb2RlIHdhcworICAgIGNoYW5nZWQgYW5kIHRoZSBkYXRlIG9mIHRoZSBjaGFuZ2UuCisKKzQuICBBbGwgcHVibGljYXRpb25zIG9yIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZgorICAgIHRoaXMgc29mdHdhcmUgYXJlIGFza2VkLCBidXQgbm90IHJlcXVpcmVkLCB0byBhY2tub3dsZWRnZSB0aGF0IGl0IHdhcyAKKyAgICBkZXZlbG9wZWQgYnkgdGhlIE5hdGlvbmFsIENlbnRlciBmb3IgU3VwZXJjb21wdXRpbmcgQXBwbGljYXRpb25zIGF0IHRoZSAKKyAgICBVbml2ZXJzaXR5IG9mIElsbGlub2lzIGF0IFVyYmFuYS1DaGFtcGFpZ24gYW5kIHRvIGNyZWRpdCB0aGUgY29udHJpYnV0b3JzLgorCis1LiAgTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIHRoZSBDb250cmlidXRvcnMgbWF5CisgICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIHRoZSBVbml2ZXJzaXR5IG9yIHRoZSBDb250cmlidXRvcnMsCisgICAgYXMgYXBwcm9wcmlhdGUgZm9yIHRoZSBuYW1lKHMpIHRvIGJlIHVzZWQuCisKKzYuICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBVTklWRVJTSVRZIEFORCBUSEUgQ09OVFJJQlVUT1JTICJBUyBJUyIKKyAgICBXSVRIIE5PIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQuICBJbiBubyBldmVudAorICAgIHNoYWxsIHRoZSBVbml2ZXJzaXR5IG9yIHRoZSBDb250cmlidXRvcnMgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcworICAgIHN1ZmZlcmVkIGJ5IHRoZSB1c2VycyBhcmlzaW5nIG91dCBvZiB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUsIGV2ZW4gaWYKKyAgICBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1BvcnRpb25zIG9mIEhERjUgd2VyZSBkZXZlbG9wZWQgd2l0aCBzdXBwb3J0IGZyb20gdGhlIFVuaXZlcnNpdHkgb2YgCitDYWxpZm9ybmlhLCBMYXdyZW5jZSBMaXZlcm1vcmUgTmF0aW9uYWwgTGFib3JhdG9yeSAoVUMgTExOTCkuCitUaGUgZm9sbG93aW5nIHN0YXRlbWVudCBhcHBsaWVzIHRvIHRob3NlIHBvcnRpb25zIG9mIHRoZSBwcm9kdWN0CithbmQgbXVzdCBiZSByZXRhaW5lZCBpbiBhbnkgcmVkaXN0cmlidXRpb24gb2Ygc291cmNlIGNvZGUsIGJpbmFyaWVzLAorZG9jdW1lbnRhdGlvbiwgYW5kL29yIGFjY29tcGFueWluZyBtYXRlcmlhbHM6CisKKyAgICBUaGlzIHdvcmsgd2FzIHBhcnRpYWxseSBwcm9kdWNlZCBhdCB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLAorICAgIExhd3JlbmNlIExpdmVybW9yZSBOYXRpb25hbCBMYWJvcmF0b3J5IChVQyBMTE5MKSB1bmRlciBjb250cmFjdCBuby4KKyAgICBXLTc0MDUtRU5HLTQ4IChDb250cmFjdCA0OCkgYmV0d2VlbiB0aGUgVS5TLiBEZXBhcnRtZW50IG9mIEVuZXJneSAKKyAgICAoRE9FKSBhbmQgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSAoVW5pdmVyc2l0eSkgCisgICAgZm9yIHRoZSBvcGVyYXRpb24gb2YgVUMgTExOTC4KKworICAgIERJU0NMQUlNRVI6CisgICAgVGhpcyB3b3JrIHdhcyBwcmVwYXJlZCBhcyBhbiBhY2NvdW50IG9mIHdvcmsgc3BvbnNvcmVkIGJ5IGFuIGFnZW5jeSAKKyAgICBvZiB0aGUgVW5pdGVkIFN0YXRlcyBHb3Zlcm5tZW50LiAgTmVpdGhlciB0aGUgVW5pdGVkIFN0YXRlcyAKKyAgICBHb3Zlcm5tZW50IG5vciB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhIG5vciBhbnkgb2YgdGhlaXIgCisgICAgZW1wbG95ZWVzLCBtYWtlcyBhbnkgd2FycmFudHksIGV4cHJlc3Mgb3IgaW1wbGllZCwgb3IgYXNzdW1lcyBhbnkgCisgICAgbGlhYmlsaXR5IG9yIHJlc3BvbnNpYmlsaXR5IGZvciB0aGUgYWNjdXJhY3ksIGNvbXBsZXRlbmVzcywgb3IgCisgICAgdXNlZnVsbmVzcyBvZiBhbnkgaW5mb3JtYXRpb24sIGFwcGFyYXR1cywgcHJvZHVjdCwgb3IgcHJvY2VzcyAKKyAgICBkaXNjbG9zZWQsIG9yIHJlcHJlc2VudHMgdGhhdCBpdHMgdXNlIHdvdWxkIG5vdCBpbmZyaW5nZSBwcml2YXRlbHktCisgICAgb3duZWQgcmlnaHRzLiAgUmVmZXJlbmNlIGhlcmVpbiB0byBhbnkgc3BlY2lmaWMgY29tbWVyY2lhbCBwcm9kdWN0cywgCisgICAgcHJvY2Vzcywgb3Igc2VydmljZSBieSB0cmFkZSBuYW1lLCB0cmFkZW1hcmssIG1hbnVmYWN0dXJlciwgb3IgCisgICAgb3RoZXJ3aXNlLCBkb2VzIG5vdCBuZWNlc3NhcmlseSBjb25zdGl0dXRlIG9yIGltcGx5IGl0cyBlbmRvcnNlbWVudCwgCisgICAgcmVjb21tZW5kYXRpb24sIG9yIGZhdm9yaW5nIGJ5IHRoZSBVbml0ZWQgU3RhdGVzIEdvdmVybm1lbnQgb3IgdGhlIAorICAgIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIFRoZSB2aWV3cyBhbmQgb3BpbmlvbnMgb2YgYXV0aG9ycyAKKyAgICBleHByZXNzZWQgaGVyZWluIGRvIG5vdCBuZWNlc3NhcmlseSBzdGF0ZSBvciByZWZsZWN0IHRob3NlIG9mIHRoZSAKKyAgICBVbml0ZWQgU3RhdGVzIEdvdmVybm1lbnQgb3IgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSwgYW5kIHNoYWxsIAorICAgIG5vdCBiZSB1c2VkIGZvciBhZHZlcnRpc2luZyBvciBwcm9kdWN0IGVuZG9yc2VtZW50IHB1cnBvc2VzLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvTkVXTElCIGIvbGljZW5zZXMvTkVXTElCCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MmQzYTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9ORVdMSUIKQEAgLTAsMCArMSw3NjAgQEAKK1RoZSBuZXdsaWIgc3ViZGlyZWN0b3J5IGlzIGEgY29sbGVjdGlvbiBvZiBzb2Z0d2FyZSBmcm9tIHNldmVyYWwgc291cmNlcy4KK0VhY2ggZmlsZSBtYXkgaGF2ZSBpdHMgb3duIGNvcHlyaWdodC9saWNlbnNlIHRoYXQgaXMgZW1iZWRkZWQgaW4gdGhlIHNvdXJjZQorZmlsZS4KKworVGhpcyBsaXN0IGRvY3VtZW50cyB0aG9zZSBsaWNlbnNlcyB3aGljaCBhcmUgbW9yZSByZXN0cmljdGl2ZSB0aGFuCithIEJTRC1saWtlIGxpY2Vuc2Ugb3IgcmVxdWlyZSB0aGUgY29weXJpZ2h0IG5vdGljZQordG8gYmUgZHVwbGljYXRlZCBpbiBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgYXNzb2NpYXRlZCB3aXRoCit0aGUgZGlzdHJpYnV0aW9uLiAgQ2VydGFpbiBsaWNlbnNlcyBkb2N1bWVudGVkIGhlcmUgb25seSBhcHBseSB0bworc3BlY2lmaWMgdGFyZ2V0cy4gIENlcnRhaW4gY2xhdXNlcyBvbmx5IGFwcGx5IGlmIHlvdSBhcmUgYnVpbGRpbmcgdGhlCitjb2RlIGFzIHBhcnQgb2YgeW91ciBiaW5hcnkuCisKK05vdGUgdGhhdCB0aGlzIGxpc3QgbWF5IG9taXQgY2VydGFpbiBsaWNlbnNlcyB0aGF0Citvbmx5IHBlcnRhaW4gdG8gdGhlIGNvcHlpbmcvbW9kaWZ5aW5nIG9mIHRoZSBpbmRpdmlkdWFsIHNvdXJjZSBjb2RlLgorSWYgeW91IGFyZSBkaXN0cmlidXRpbmcgdGhlIHNvdXJjZSBjb2RlLCB0aGVuIHlvdSBkbyBub3QgbmVlZCB0bword29ycnkgYWJvdXQgdGhlc2Ugb21pdHRlZCBsaWNlbnNlcywgc28gbG9uZyBhcyB5b3UgZG8gbm90IG1vZGlmeSB0aGUKK2NvcHlyaWdodCBpbmZvcm1hdGlvbiBhbHJlYWR5IGluIHBsYWNlLgorCisoMSkgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLCBCZXJrZWxleQorCitbMWFdCisKK0NvcHlyaWdodCAoYykgMTk5MCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3JtcyBhcmUgcGVybWl0dGVkCitwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBhcmFncmFwaCBhcmUKK2R1cGxpY2F0ZWQgaW4gYWxsIHN1Y2ggZm9ybXMgYW5kIHRoYXQgYW55IGRvY3VtZW50YXRpb24sCithbmQgb3RoZXIgbWF0ZXJpYWxzIHJlbGF0ZWQgdG8gc3VjaCBkaXN0cmlidXRpb24gYW5kIHVzZQorYWNrbm93bGVkZ2UgdGhhdCB0aGUgc29mdHdhcmUgd2FzIGRldmVsb3BlZAorYnkgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSwgQmVya2VsZXkuICBUaGUgbmFtZSBvZiB0aGUKK1VuaXZlcnNpdHkgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCitmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworWzFiXQorCitDb3B5cmlnaHQgKGMpIDE5OTAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMgYXJlIHBlcm1pdHRlZAorcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwYXJhZ3JhcGggYXJlCitkdXBsaWNhdGVkIGluIGFsbCBzdWNoIGZvcm1zIGFuZCB0aGF0IGFueSBkb2N1bWVudGF0aW9uLAorYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzLCBhbmQgb3RoZXIgbWF0ZXJpYWxzIHJlbGF0ZWQgdG8gc3VjaAorZGlzdHJpYnV0aW9uIGFuZCB1c2UgYWNrbm93bGVkZ2UgdGhhdCB0aGUgc29mdHdhcmUgd2FzIGRldmVsb3BlZAorYnkgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSwgQmVya2VsZXkuICBUaGUgbmFtZSBvZiB0aGUKK1VuaXZlcnNpdHkgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCitmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworWzFjXQorCitDb3B5cmlnaHQgKGMpIDE5ODEsIDE5ODMsIDE5ODYsIDE5ODgsIDE5ODksIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQKK1RoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCisgICAgIENhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKK1sxZF0KKworQ29weXJpZ2h0IChjKSAxOTg4LCAxOTkwLCAxOTkzIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKK1sxZV0KKworQ29weXJpZ2h0IChjKSAxOTgyLCAxOTg2LCAxOTg5LCAxOTkxLCAxOTkzLCAxOTk0CitUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyhjKSBVTklYIFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4KK0FsbCBvciBzb21lIHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIG1hdGVyaWFsIGxpY2Vuc2VkCit0byB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhIGJ5IEFtZXJpY2FuIFRlbGVwaG9uZSBhbmQgVGVsZWdyYXBoCitDby4gb3IgVW5peCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuIGFuZCBhcmUgcmVwcm9kdWNlZCBoZXJlaW4gd2l0aAordGhlIHBlcm1pc3Npb24gb2YgVU5JWCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAgICAgQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCis0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworWzFmXQorCitDb3B5cmlnaHQgKGMpIDE5ODcsIDE5ODgsIDIwMDAgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3JtcyBhcmUgcGVybWl0dGVkCitwcm92aWRlZCB0aGF0OiAoMSkgc291cmNlIGRpc3RyaWJ1dGlvbnMgcmV0YWluIHRoaXMgZW50aXJlIGNvcHlyaWdodAorbm90aWNlIGFuZCBjb21tZW50LCBhbmQgKDIpIGRpc3RyaWJ1dGlvbnMgaW5jbHVkaW5nIGJpbmFyaWVzIGRpc3BsYXkKK3RoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OiAgYGBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUKK2RldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycycnCitpbiB0aGUgZG9jdW1lbnRhdGlvbiBvciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uCithbmQgaW4gYWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzCitzb2Z0d2FyZS4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cworY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCitmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIFBsZWFzZSBub3RlIHRoYXQgaW4gc29tZSBvZiB0aGUgYWJvdmUgYWx0ZXJuYXRlIGxpY2Vuc2VzLCB0aGVyZSBpcyBhCisgc3RhdGVtZW50IHJlZ2FyZGluZyB0aGF0IGFja25vd2xlZGdlbWVudCBtdXN0IGJlIG1hZGUgaW4gYW55CisgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIGZvciBwcm9kdWN0cyB1c2luZyB0aGUgY29kZS4gIFRoaXMgcmVzdHJpY3Rpb24KKyBubyBsb25nZXIgYXBwbGllcyBkdWUgdG8gdGhlIGZvbGxvd2luZyBsaWNlbnNlIGNoYW5nZToKKworICBmdHA6Ly9mdHAuY3MuYmVya2VsZXkuZWR1L3B1Yi80YnNkL1JFQURNRS5JbXB0LkxpY2Vuc2UuQ2hhbmdlCisKKyBJbiBzb21lIGNhc2VzIHRoZSBkZWZ1bmN0IGNsYXVzZSBoYXMgYmVlbiByZW1vdmVkIGluIG1vZGlmaWVkIG5ld2xpYiBjb2RlIGFuZAorIGluIHNvbWUgY2FzZXMsIHRoZSBjbGF1c2UgaGFzIGJlZW4gbGVmdCBhcy1pcy4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworKDIpIEN5Z3dpbiAoY3lnd2luIHRhcmdldHMgb25seSkKKworQ29weXJpZ2h0IDIwMDEgUmVkIEhhdCwgSW5jLgorCitUaGlzIHNvZnR3YXJlIGlzIGEgY29weXJpZ2h0ZWQgd29yayBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlCitDeWd3aW4gbGljZW5zZS4gIFBsZWFzZSBjb25zdWx0IHRoZSBmaWxlICJDWUdXSU5fTElDRU5TRSIgZm9yCitkZXRhaWxzLgorCisoMykgRGF2aWQgTS4gR2F5IGF0IEFUJlQKKworVGhlIGF1dGhvciBvZiB0aGlzIHNvZnR3YXJlIGlzIERhdmlkIE0uIEdheS4KKworQ29weXJpZ2h0IChjKSAxOTkxIGJ5IEFUJlQuCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorcHVycG9zZSB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIGVudGlyZSBub3RpY2UKK2lzIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb2YgYW55IHNvZnR3YXJlIHdoaWNoIGlzIG9yIGluY2x1ZGVzIGEgY29weQorb3IgbW9kaWZpY2F0aW9uIG9mIHRoaXMgc29mdHdhcmUgYW5kIGluIGFsbCBjb3BpZXMgb2YgdGhlIHN1cHBvcnRpbmcKK2RvY3VtZW50YXRpb24gZm9yIHN1Y2ggc29mdHdhcmUuCisKK1RISVMgU09GVFdBUkUgSVMgQkVJTkcgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECitXQVJSQU5UWS4gIElOIFBBUlRJQ1VMQVIsIE5FSVRIRVIgVEhFIEFVVEhPUiBOT1IgQVQmVCBNQUtFUyBBTlkKK1JFUFJFU0VOVEFUSU9OIE9SIFdBUlJBTlRZIE9GIEFOWSBLSU5EIENPTkNFUk5JTkcgVEhFIE1FUkNIQU5UQUJJTElUWQorT0YgVEhJUyBTT0ZUV0FSRSBPUiBJVFMgRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworKDQpIEFkdmFuY2VkIE1pY3JvIERldmljZXMKKworQ29weXJpZ2h0IDE5ODksIDE5OTAgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorCitUaGlzIHNvZnR3YXJlIGlzIHRoZSBwcm9wZXJ0eSBvZiBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMgIChBTUQpICB3aGljaAorc3BlY2lmaWNhbGx5ICBncmFudHMgdGhlIHVzZXIgdGhlIHJpZ2h0IHRvIG1vZGlmeSwgdXNlIGFuZCBkaXN0cmlidXRlIHRoaXMKK3NvZnR3YXJlIHByb3ZpZGVkIHRoaXMgbm90aWNlIGlzIG5vdCByZW1vdmVkIG9yIGFsdGVyZWQuICBBbGwgb3RoZXIgcmlnaHRzCithcmUgcmVzZXJ2ZWQgYnkgQU1ELgorCitBTUQgTUFLRVMgTk8gV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgV0lUSCBSRUdBUkQgVE8gVEhJUworU09GVFdBUkUuICBJTiBOTyBFVkVOVCBTSEFMTCBBTUQgQkUgTElBQkxFIEZPUiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgSU4gQ09OTkVDVElPTiBXSVRIIE9SIEFSSVNJTkcgRlJPTSBUSEUgRlVSTklTSElORywgUEVSRk9STUFOQ0UsIE9SCitVU0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworU28gdGhhdCBhbGwgbWF5IGJlbmVmaXQgZnJvbSB5b3VyIGV4cGVyaWVuY2UsIHBsZWFzZSByZXBvcnQgIGFueSAgcHJvYmxlbXMKK29yICBzdWdnZXN0aW9ucyBhYm91dCB0aGlzIHNvZnR3YXJlIHRvIHRoZSAyOUsgVGVjaG5pY2FsIFN1cHBvcnQgQ2VudGVyIGF0Cis4MDAtMjktMjktQU1EICg4MDAtMjkyLTkyNjMpIGluIHRoZSBVU0EsIG9yIDA4MDAtODktMTEzMSAgaW4gIHRoZSAgVUssICBvcgorMDAzMS0xMS0xMTI5IGluIEphcGFuLCB0b2xsIGZyZWUuICBUaGUgZGlyZWN0IGRpYWwgbnVtYmVyIGlzIDUxMi00NjItNDExOC4KKworQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorMjlLIFN1cHBvcnQgUHJvZHVjdHMKK01haWwgU3RvcCA1NzMKKzU5MDAgRS4gQmVuIFdoaXRlIEJsdmQuCitBdXN0aW4sIFRYIDc4NzQxCis4MDAtMjkyLTkyNjMKKworKDUpIEMuVy4gU2FuZG1hbm4KKworQ29weXJpZ2h0IChDKSAxOTkzIEMuVy4gU2FuZG1hbm4KKworVGhpcyBmaWxlIG1heSBiZSBmcmVlbHkgZGlzdHJpYnV0ZWQgYXMgbG9uZyBhcyB0aGUgYXV0aG9yJ3MgbmFtZSByZW1haW5zLgorCisoNikgRXJpYyBCYWNrdXMKKworKEMpIENvcHlyaWdodCAxOTkyIEVyaWMgQmFja3VzCisKK1RoaXMgc29mdHdhcmUgbWF5IGJlIHVzZWQgZnJlZWx5IHNvIGxvbmcgYXMgdGhpcyBjb3B5cmlnaHQgbm90aWNlIGlzCitsZWZ0IGludGFjdC4gIFRoZXJlIGlzIG5vIHdhcnJhbnRlZSBvbiB0aGlzIHNvZnR3YXJlLgorCisoNykgU3VuIE1pY3Jvc3lzdGVtcworCitDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitEZXZlbG9wZWQgYXQgU3VuUHJvLCBhIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYnVzaW5lc3MuCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCitzb2Z0d2FyZSBpcyBmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZQoraXMgcHJlc2VydmVkLgorCisoOCkgSGV3bGV0dCBQYWNrYXJkCisKKyhjKSBDb3B5cmlnaHQgMTk4NiBIRVdMRVRULVBBQ0tBUkQgQ09NUEFOWQorCitUbyBhbnlvbmUgd2hvIGFja25vd2xlZGdlcyB0aGF0IHRoaXMgZmlsZSBpcyBwcm92aWRlZCAiQVMgSVMiCit3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHk6CisgICAgcGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBmaWxlCitmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQKK3RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIG5vdGljZSBhcHBlYXJzIGluIGFsbAorY29waWVzLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBub3QgYmUKK3VzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uCitvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkgbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZQorc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuCisKKyg5KSBIYW5zLVBldGVyIE5pbHNzb24KKworQ29weXJpZ2h0IChDKSAyMDAxIEhhbnMtUGV0ZXIgTmlsc3NvbgorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGlzCitmcmVlbHkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBub3RpY2UKK2FuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgYXJlIHByZXNlcnZlZCB3aXRoIG5vIGNoYW5nZXMuCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCitJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorUFVSUE9TRS4KKworKDEwKSBTdGVwaGFuZSBDYXJyZXogKG02OGhjMTEtZWxmL202OGhjMTItZWxmIHRhcmdldHMgb25seSkKKworQ29weXJpZ2h0IChDKSAxOTk5LCAyMDAwLCAyMDAxLCAyMDAyIFN0ZXBoYW5lIENhcnJleiAoc3RjYXJyZXpAbmVyaW0uZnIpCisKK1RoZSBhdXRob3JzIGhlcmVieSBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlLAorYW5kIGxpY2Vuc2UgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlLCBwcm92aWRlZAordGhhdCBleGlzdGluZyBjb3B5cmlnaHQgbm90aWNlcyBhcmUgcmV0YWluZWQgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCB0aGlzCitub3RpY2UgaXMgaW5jbHVkZWQgdmVyYmF0aW0gaW4gYW55IGRpc3RyaWJ1dGlvbnMuIE5vIHdyaXR0ZW4gYWdyZWVtZW50LAorbGljZW5zZSwgb3Igcm95YWx0eSBmZWUgaXMgcmVxdWlyZWQgZm9yIGFueSBvZiB0aGUgYXV0aG9yaXplZCB1c2VzLgorTW9kaWZpY2F0aW9ucyB0byB0aGlzIHNvZnR3YXJlIG1heSBiZSBjb3B5cmlnaHRlZCBieSB0aGVpciBhdXRob3JzCithbmQgbmVlZCBub3QgZm9sbG93IHRoZSBsaWNlbnNpbmcgdGVybXMgZGVzY3JpYmVkIGhlcmUsIHByb3ZpZGVkIHRoYXQKK3RoZSBuZXcgdGVybXMgYXJlIGNsZWFybHkgaW5kaWNhdGVkIG9uIHRoZSBmaXJzdCBwYWdlIG9mIGVhY2ggZmlsZSB3aGVyZQordGhleSBhcHBseS4KKworKDExKSBDaHJpc3RvcGhlciBHLiBEZW1ldHJpb3UKKworQ29weXJpZ2h0IChjKSAyMDAxIENocmlzdG9waGVyIEcuIERlbWV0cmlvdQorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KK0lOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCitUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKK1RISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKygxMikgU3VwZXJILCBJbmMuCisKK0NvcHlyaWdodCAyMDAyIFN1cGVySCwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkCisKK1RoaXMgc29mdHdhcmUgaXMgdGhlIHByb3BlcnR5IG9mIFN1cGVySCwgSW5jIChTdXBlckgpIHdoaWNoIHNwZWNpZmljYWxseQorZ3JhbnRzIHRoZSB1c2VyIHRoZSByaWdodCB0byBtb2RpZnksIHVzZSBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlCitwcm92aWRlZCB0aGlzIG5vdGljZSBpcyBub3QgcmVtb3ZlZCBvciBhbHRlcmVkLiAgQWxsIG90aGVyIHJpZ2h0cyBhcmUKK3Jlc2VydmVkIGJ5IFN1cGVySC4KKworU1VQRVJIIE1BS0VTIE5PIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsIFdJVEggUkVHQVJEIFRPCitUSElTIFNPRlRXQVJFLiAgSU4gTk8gRVZFTlQgU0hBTEwgU1VQRVJIIEJFIExJQUJMRSBGT1IgSU5ESVJFQ1QsIFNQRUNJQUwsCitJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBJTiBDT05ORUNUSU9OIFdJVEggT1IgQVJJU0lORyBGUk9NCitUSEUgRlVSTklTSElORywgUEVSRk9STUFOQ0UsIE9SIFVTRSBPRiBUSElTIFNPRlRXQVJFLgorCitTbyB0aGF0IGFsbCBtYXkgYmVuZWZpdCBmcm9tIHlvdXIgZXhwZXJpZW5jZSwgcGxlYXNlIHJlcG9ydCBhbnkgcHJvYmxlbXMKK29yIHN1Z2dlc3Rpb25zIGFib3V0IHRoaXMgc29mdHdhcmUgdG8gdGhlIFN1cGVySCBTdXBwb3J0IENlbnRlciB2aWEKK2UtbWFpbCBhdCBzb2Z0d2FyZXN1cHBvcnRAc3VwZXJoLmNvbSAuCisKK1N1cGVySCwgSW5jLgorNDA1IFJpdmVyIE9ha3MgUGFya3dheQorU2FuIEpvc2UKK0NBIDk1MTM0CitVU0EKKworKDEzKSBSb3lhbCBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neQorCitDb3B5cmlnaHQgKGMpIDE5OTkgS3VuZ2xpZ2EgVGVrbmlza2EgSMO2Z3Nrb2xhbgorKFJveWFsIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBTdG9ja2hvbG0sIFN3ZWRlbikuCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKworMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKzMuIE5laXRoZXIgdGhlIG5hbWUgb2YgS1RIIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUKKyAgIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQKKyAgIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBLVEggQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkKK0VYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEtUSCBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFCitMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCitCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKK1dIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SCitPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCitBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworKDE0KSBBbGV4ZXkgWmVsa2luCisKK0NvcHlyaWdodCAoYykgMjAwMCwgMjAwMSBBbGV4ZXkgWmVsa2luIDxwaGFudG9tQEZyZWVCU0Qub3JnPgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCisoMTUpIEFuZHJleSBBLiBDaGVybm92CisKK0NvcHlyaWdodCAoQykgMTk5NyBieSBBbmRyZXkgQS4gQ2hlcm5vdiwgTW9zY293LCBSdXNzaWEuCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworKDE2KSBGcmVlQlNECisKK0NvcHlyaWdodCAoYykgMTk5Ny0yMDAyIEZyZWVCU0QgUHJvamVjdC4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworKDE3KSBTLiBMLiBNb3NoaWVyCisKK0F1dGhvcjogIFMuIEwuIE1vc2hpZXIuCisKK0NvcHlyaWdodCAoYykgMTk4NCwyMDAwIFMuTC4gTW9zaGllcgorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKK3B1cnBvc2Ugd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBlbnRpcmUgbm90aWNlCitpcyBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9mIGFueSBzb2Z0d2FyZSB3aGljaCBpcyBvciBpbmNsdWRlcyBhIGNvcHkKK29yIG1vZGlmaWNhdGlvbiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBpbiBhbGwgY29waWVzIG9mIHRoZSBzdXBwb3J0aW5nCitkb2N1bWVudGF0aW9uIGZvciBzdWNoIHNvZnR3YXJlLgorCitUSElTIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorV0FSUkFOVFkuICBJTiBQQVJUSUNVTEFSLCAgVEhFIEFVVEhPUiBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTgorT1IgV0FSUkFOVFkgT0YgQU5ZIEtJTkQgQ09OQ0VSTklORyBUSEUgTUVSQ0hBTlRBQklMSVRZIE9GIFRISVMKK1NPRlRXQVJFIE9SIElUUyBGSVRORVNTIEZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFLgorCisoMTgpIENpdHJ1cyBQcm9qZWN0CisKK0NvcHlyaWdodCAoYykxOTk5IENpdHJ1cyBQcm9qZWN0LAorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCisoMTkpIFRvZGQgQy4gTWlsbGVyCisKK0NvcHlyaWdodCAoYykgMTk5OCBUb2RkIEMuIE1pbGxlciA8VG9kZC5NaWxsZXJAY291cnRlc2FuLmNvbT4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKK0lOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQorQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwKK1RIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKK0VYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKK1BST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOworT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCitXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgorT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKygyMCkgREogRGVsb3JpZSAoaTM4NikKKworQ29weXJpZ2h0IChDKSAxOTkxIERKIERlbG9yaWUKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMgaXMgcGVybWl0dGVkCitwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBmb2xsb3dpbmcgcGFyYWdyYXBoIGFyZQorZHVwbGljYXRlZCBpbiBhbGwgc3VjaCBmb3Jtcy4KKworVGhpcyBmaWxlIGlzIGRpc3RyaWJ1dGVkIFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQKK3dhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworKDIxKSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gTEdQTCBMaWNlbnNlICgqLWxpbnV4KiB0YXJnZXRzIG9ubHkpCisKKyAgIENvcHlyaWdodCAoQykgMTk5MC0xOTk5LCAyMDAwLCAyMDAxCisgICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgQyBMaWJyYXJ5LgorICAgQ29udHJpYnV0ZWQgYnkgTWFyayBLZXR0ZW5pcyA8a2V0dGVuaXNAcGh5cy51dmEubmw+LCAxOTk3LgorCisgICBUaGUgR05VIEMgTGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgIFRoZSBHTlUgQyBMaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAgIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgR05VIEMgTGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQQorICAgMDIxMTAtMTMwMSBVU0EuCisKKygyMikgWGF2aWVyIExlcm95IExHUEwgTGljZW5zZSAoaVszNDU2XTg2LSotbGludXgqIHRhcmdldHMgb25seSkKKworQ29weXJpZ2h0IChDKSAxOTk2IFhhdmllciBMZXJveSAoWGF2aWVyLkxlcm95QGlucmlhLmZyKQorCitUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCittb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCithcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMgorb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKK1RoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKK01FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKK0dOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworKDIzKSBJbnRlbCAoaTk2MCkKKworQ29weXJpZ2h0IChjKSAxOTkzIEludGVsIENvcnBvcmF0aW9uCisKK0ludGVsIGhlcmVieSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCitzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24uICBJbnRlbCBncmFudHMgdGhpcyBwZXJtaXNzaW9uIHByb3ZpZGVkCit0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcyBhbmQgdGhhdCBib3RoIHRoZQorY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworZG9jdW1lbnRhdGlvbi4gIEluIGFkZGl0aW9uLCBJbnRlbCBncmFudHMgdGhpcyBwZXJtaXNzaW9uIHByb3ZpZGVkIHRoYXQKK3lvdSBwcm9taW5lbnRseSBtYXJrIGFzICJub3QgcGFydCBvZiB0aGUgb3JpZ2luYWwiIGFueSBtb2RpZmljYXRpb25zCittYWRlIHRvIHRoaXMgc29mdHdhcmUgb3IgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgSW50ZWwKK0NvcnBvcmF0aW9uIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvCitkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIG9yIHRoZSBkb2N1bWVudGF0aW9uIHdpdGhvdXQgc3BlY2lmaWMsCit3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisKK0ludGVsIENvcnBvcmF0aW9uIHByb3ZpZGVzIHRoaXMgQVMgSVMsIFdJVEhPVVQgQU5ZIFdBUlJBTlRZLCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIFdBUlJBTlRZIE9GIE1FUkNIQU5UQUJJTElUWQorT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBJbnRlbCBtYWtlcyBubyBndWFyYW50ZWUgb3IKK3JlcHJlc2VudGF0aW9ucyByZWdhcmRpbmcgdGhlIHVzZSBvZiwgb3IgdGhlIHJlc3VsdHMgb2YgdGhlIHVzZSBvZiwKK3RoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiBpbiB0ZXJtcyBvZiBjb3JyZWN0bmVzcywgYWNjdXJhY3ksCityZWxpYWJpbGl0eSwgY3VycmVudG5lc3MsIG9yIG90aGVyd2lzZTsgYW5kIHlvdSByZWx5IG9uIHRoZSBzb2Z0d2FyZSwKK2RvY3VtZW50YXRpb24gYW5kIHJlc3VsdHMgc29sZWx5IGF0IHlvdXIgb3duIHJpc2suCisKK0lOIE5PIEVWRU5UIFNIQUxMIElOVEVMIEJFIExJQUJMRSBGT1IgQU5ZIExPU1MgT0YgVVNFLCBMT1NTIE9GIEJVU0lORVNTLAorTE9TUyBPRiBQUk9GSVRTLCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKK09GIEFOWSBLSU5ELiAgSU4gTk8gRVZFTlQgU0hBTEwgSU5URUwnUyBUT1RBTCBMSUFCSUxJVFkgRVhDRUVEIFRIRSBTVU0KK1BBSUQgVE8gSU5URUwgRk9SIFRIRSBQUk9EVUNUIExJQ0VOU0VEIEhFUkVVTkRFUi4KKworKDI0KSBIZXdsZXR0LVBhY2thcmQgIChocHBhIHRhcmdldHMgb25seSkKKworKGMpIENvcHlyaWdodCAxOTg2IEhFV0xFVFQtUEFDS0FSRCBDT01QQU5ZCisKK1RvIGFueW9uZSB3aG8gYWNrbm93bGVkZ2VzIHRoYXQgdGhpcyBmaWxlIGlzIHByb3ZpZGVkICJBUyBJUyIKK3dpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eToKKyAgICBwZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIGZpbGUKK2ZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdAordGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgbm90aWNlIGFwcGVhcnMgaW4gYWxsCitjb3BpZXMsIGFuZCB0aGF0IHRoZSBuYW1lIG9mIEhld2xldHQtUGFja2FyZCBDb21wYW55IG5vdCBiZQordXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24KK29mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCitIZXdsZXR0LVBhY2thcmQgQ29tcGFueSBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlCitzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4KKworKDI1KSBIZW5yeSBTcGVuY2VyIChvbmx5ICotbGludXggdGFyZ2V0cykKKworQ29weXJpZ2h0IDE5OTIsIDE5OTMsIDE5OTQgSGVucnkgU3BlbmNlci4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCitUaGlzIHNvZnR3YXJlIGlzIG5vdCBzdWJqZWN0IHRvIGFueSBsaWNlbnNlIG9mIHRoZSBBbWVyaWNhbiBUZWxlcGhvbmUKK2FuZCBUZWxlZ3JhcGggQ29tcGFueSBvciBvZiB0aGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSBvbgorYW55IGNvbXB1dGVyIHN5c3RlbSwgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXQsIHN1YmplY3QKK3RvIHRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zOgorCisxLiBUaGUgYXV0aG9yIGlzIG5vdCByZXNwb25zaWJsZSBmb3IgdGhlIGNvbnNlcXVlbmNlcyBvZiB1c2Ugb2YgdGhpcworICAgc29mdHdhcmUsIG5vIG1hdHRlciBob3cgYXdmdWwsIGV2ZW4gaWYgdGhleSBhcmlzZSBmcm9tIGZsYXdzIGluIGl0LgorCisyLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQsIGVpdGhlciBieQorICAgZXhwbGljaXQgY2xhaW0gb3IgYnkgb21pc3Npb24uICBTaW5jZSBmZXcgdXNlcnMgZXZlciByZWFkIHNvdXJjZXMsCisgICBjcmVkaXRzIG11c3QgYXBwZWFyIGluIHRoZSBkb2N1bWVudGF0aW9uLgorCiszLiBBbHRlcmVkIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCwgYW5kIG11c3Qgbm90IGJlCisgICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc29mdHdhcmUuICBTaW5jZSBmZXcgdXNlcnMKKyAgIGV2ZXIgcmVhZCBzb3VyY2VzLCBjcmVkaXRzIG11c3QgYXBwZWFyIGluIHRoZSBkb2N1bWVudGF0aW9uLgorCis0LiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZC4KKworKDI2KSBNaWtlIEJhcmNyb2Z0CisKK0NvcHlyaWdodCAoYykgMjAwMSBNaWtlIEJhcmNyb2Z0IDxtaWtlQEZyZWVCU0Qub3JnPgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKK0FOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCisoMjcpIEtvbnN0YW50aW4gQ2h1Z3VldiAoLS1lbmFibGUtbmV3bGliLWljb252KQorCitDb3B5cmlnaHQgKGMpIDE5OTksIDIwMDAKKyAgIEtvbnN0YW50aW4gQ2h1Z3Vldi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworICAgaWNvbnYgKENoYXJzZXQgQ29udmVyc2lvbiBMaWJyYXJ5KSB2Mi4wCisKKygyNykgQXJ0ZW0gQml0eXVja2l5ICgtLWVuYWJsZS1uZXdsaWItaWNvbnYpCisKK0NvcHlyaWdodCAoYykgMjAwMywgQXJ0ZW0gQi4gQml0eXVja2l5LCBTb2Z0TWluZSBDb3Jwb3JhdGlvbi4KK1JpZ2h0cyB0cmFuc2ZlcnJlZCB0byBGcmFua2xpbiBFbGVjdHJvbmljIFB1Ymxpc2hlcnMuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworKDI4KSBSZWQgSGF0IEluY29ycG9yYXRlZAorCitVbmxlc3Mgb3RoZXJ3aXNlIHN0YXRlZCBpbiBlYWNoIHJlbWFpbmluZyBuZXdsaWIgZmlsZSwgdGhlIHJlbWFpbmluZworZmlsZXMgaW4gdGhlIG5ld2xpYiBzdWJkaXJlY3RvcnkgZGVmYXVsdCB0byB0aGUgZm9sbG93aW5nIGNvcHlyaWdodC4KK0l0IHNob3VsZCBiZSBub3RlZCB0aGF0IFJlZCBIYXQgSW5jb3Jwb3JhdGVkIG5vdyBvd25zIGNvcHlyaWdodHMKK2JlbG9uZ2luZyB0byBDeWdudXMgU29sdXRpb25zIGFuZCBDeWdudXMgU3VwcG9ydC4KKworQ29weXJpZ2h0IChjKSAxOTk0LCAxOTk3LCAyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1IFJlZCBIYXQgSW5jb3Jwb3JhdGVkLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgIFRoZSBuYW1lIG9mIFJlZCBIYXQgSW5jb3Jwb3JhdGVkIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlCisgICAgb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljCisgICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKK0FORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFJFRCBIQVQgSU5DT1JQT1JBVEVEIEJFIExJQUJMRSBGT1IgQU5ZCitESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECitPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvTk9TQSBiL2xpY2Vuc2VzL05PU0EKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk4ZjFlNQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL05PU0EKQEAgLTAsMCArMSwyNTggQEAKK05BU0EgT1BFTiBTT1VSQ0UgQUdSRUVNRU5UIFZFUlNJT04gMS4zCisKK1RISVMgT1BFTiBTT1VSQ0UgQUdSRUVNRU5UICgiQUdSRUVNRU5UIikgREVGSU5FUyBUSEUgUklHSFRTIE9GIFVTRSwKK1JFUFJPRFVDVElPTiwgRElTVFJJQlVUSU9OLCBNT0RJRklDQVRJT04gQU5EIFJFRElTVFJJQlVUSU9OIE9GIENFUlRBSU4KK0NPTVBVVEVSIFNPRlRXQVJFIE9SSUdJTkFMTFkgUkVMRUFTRUQgQlkgVEhFIFVOSVRFRCBTVEFURVMgR09WRVJOTUVOVAorQVMgUkVQUkVTRU5URUQgQlkgVEhFIEdPVkVSTk1FTlQgQUdFTkNZIExJU1RFRCBCRUxPVyAoIkdPVkVSTk1FTlQKK0FHRU5DWSIpLiAgVEhFIFVOSVRFRCBTVEFURVMgR09WRVJOTUVOVCwgQVMgUkVQUkVTRU5URUQgQlkgR09WRVJOTUVOVAorQUdFTkNZLCBJUyBBTiBJTlRFTkRFRCBUSElSRC1QQVJUWSBCRU5FRklDSUFSWSBPRiBBTEwgU1VCU0VRVUVOVAorRElTVFJJQlVUSU9OUyBPUiBSRURJU1RSSUJVVElPTlMgT0YgVEhFIFNVQkpFQ1QgU09GVFdBUkUuICBBTllPTkUgV0hPCitVU0VTLCBSRVBST0RVQ0VTLCBESVNUUklCVVRFUywgTU9ESUZJRVMgT1IgUkVESVNUUklCVVRFUyBUSEUgU1VCSkVDVAorU09GVFdBUkUsIEFTIERFRklORUQgSEVSRUlOLCBPUiBBTlkgUEFSVCBUSEVSRU9GLCBJUywgQlkgVEhBVCBBQ1RJT04sCitBQ0NFUFRJTkcgSU4gRlVMTCBUSEUgUkVTUE9OU0lCSUxJVElFUyBBTkQgT0JMSUdBVElPTlMgQ09OVEFJTkVEIElOCitUSElTIEFHUkVFTUVOVC4KKworR292ZXJubWVudCBBZ2VuY3k6IE5hdGlvbmFsIEFlcm9uYXV0aWNzIGFuZCBTcGFjZSBBZG1pbmlzdHJhdGlvbiAoTkFTQSkgCitHb3Zlcm5tZW50IEFnZW5jeSBPcmlnaW5hbCBTb2Z0d2FyZSBEZXNpZ25hdGlvbjogQVJDLTE1Mjc3CitHb3Zlcm5tZW50IEFnZW5jeSBPcmlnaW5hbCBTb2Z0d2FyZSBUaXRsZTogZ3Jvd2xlciAwLjEKK1VzZXIgUmVnaXN0cmF0aW9uIFJlcXVlc3RlZC4gIFBsZWFzZSBWaXNpdCBodHRwOi8vb3BlbnNvdXJjZS5hcmMubmFzYS5nb3YvCitHb3Zlcm5tZW50IEFnZW5jeSBQb2ludCBvZiBDb250YWN0IGZvciBPcmlnaW5hbCBTb2Z0d2FyZTogYmdyZWVuQG5hcy5uYXNhLmdvdgorCisxLiBERUZJTklUSU9OUworCitBLiAiQ29udHJpYnV0b3IiIG1lYW5zIEdvdmVybm1lbnQgQWdlbmN5LCBhcyB0aGUgZGV2ZWxvcGVyIG9mIHRoZQorT3JpZ2luYWwgU29mdHdhcmUsIGFuZCBhbnkgZW50aXR5IHRoYXQgbWFrZXMgYSBNb2RpZmljYXRpb24uCisKK0IuICJDb3ZlcmVkIFBhdGVudHMiIG1lYW4gcGF0ZW50IGNsYWltcyBsaWNlbnNhYmxlIGJ5IGEgQ29udHJpYnV0b3IKK3RoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGUgdXNlIG9yIHNhbGUgb2YgaXRzIE1vZGlmaWNhdGlvbgorYWxvbmUgb3Igd2hlbiBjb21iaW5lZCB3aXRoIHRoZSBTdWJqZWN0IFNvZnR3YXJlLgorCitDLiAiRGlzcGxheSIgbWVhbnMgdGhlIHNob3dpbmcgb2YgYSBjb3B5IG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlLAorZWl0aGVyIGRpcmVjdGx5IG9yIGJ5IG1lYW5zIG9mIGFuIGltYWdlLCBvciBhbnkgb3RoZXIgZGV2aWNlLgorCitELiAiRGlzdHJpYnV0aW9uIiBtZWFucyBjb252ZXlhbmNlIG9yIHRyYW5zZmVyIG9mIHRoZSBTdWJqZWN0CitTb2Z0d2FyZSwgcmVnYXJkbGVzcyBvZiBtZWFucywgdG8gYW5vdGhlci4KKworRS4gIkxhcmdlciBXb3JrIiBtZWFucyBjb21wdXRlciBzb2Z0d2FyZSB0aGF0IGNvbWJpbmVzIFN1YmplY3QKK1NvZnR3YXJlLCBvciBwb3J0aW9ucyB0aGVyZW9mLCB3aXRoIHNvZnR3YXJlIHNlcGFyYXRlIGZyb20gdGhlIFN1YmplY3QKK1NvZnR3YXJlIHRoYXQgaXMgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudC4KKworRi4gICJNb2RpZmljYXRpb24iIG1lYW5zIGFueSBhbHRlcmF0aW9uIG9mLCBpbmNsdWRpbmcgYWRkaXRpb24gdG8gb3IKK2RlbGV0aW9uIGZyb20sIHRoZSBzdWJzdGFuY2Ugb3Igc3RydWN0dXJlIG9mIGVpdGhlciB0aGUgT3JpZ2luYWwKK1NvZnR3YXJlIG9yIFN1YmplY3QgU29mdHdhcmUsIGFuZCBpbmNsdWRlcyBkZXJpdmF0aXZlIHdvcmtzLCBhcyB0aGF0Cit0ZXJtIGlzIGRlZmluZWQgaW4gdGhlIENvcHlyaWdodCBTdGF0dXRlLCAxNyBVU0MgMTAxLiAgSG93ZXZlciwgdGhlCithY3Qgb2YgaW5jbHVkaW5nIFN1YmplY3QgU29mdHdhcmUgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrIGRvZXMgbm90IGluCithbmQgb2YgaXRzZWxmIGNvbnN0aXR1dGUgYSBNb2RpZmljYXRpb24uCisKK0cuICJPcmlnaW5hbCBTb2Z0d2FyZSIgbWVhbnMgdGhlIGNvbXB1dGVyIHNvZnR3YXJlIGZpcnN0IHJlbGVhc2VkCit1bmRlciB0aGlzIEFncmVlbWVudCBieSBHb3Zlcm5tZW50IEFnZW5jeSB3aXRoIEdvdmVybm1lbnQgQWdlbmN5CitkZXNpZ25hdGlvbiBBUkMtMTUyNzcgYW5kIGVudGl0bGVkIGdyb3dsZXIsIGluY2x1ZGluZyBzb3VyY2UgY29kZSwKK29iamVjdCBjb2RlIGFuZCBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiwgaWYgYW55LgorCitILiAiUmVjaXBpZW50IiBtZWFucyBhbnlvbmUgd2hvIGFjcXVpcmVzIHRoZSBTdWJqZWN0IFNvZnR3YXJlIHVuZGVyCit0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMuCisKK0kuICJSZWRpc3RyaWJ1dGlvbiIgbWVhbnMgRGlzdHJpYnV0aW9uIG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlIGFmdGVyIGEKK01vZGlmaWNhdGlvbiBoYXMgYmVlbiBtYWRlLgorCitKLiAiUmVwcm9kdWN0aW9uIiBtZWFucyB0aGUgbWFraW5nIG9mIGEgY291bnRlcnBhcnQsIGltYWdlIG9yIGNvcHkgb2YKK3RoZSBTdWJqZWN0IFNvZnR3YXJlLgorCitLLiAiU2FsZSIgbWVhbnMgdGhlIGV4Y2hhbmdlIG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlIGZvciBtb25leSBvcgorZXF1aXZhbGVudCB2YWx1ZS4KKworTC4gIlN1YmplY3QgU29mdHdhcmUiIG1lYW5zIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSwgTW9kaWZpY2F0aW9ucywgb3IKK2FueSByZXNwZWN0aXZlIHBhcnRzIHRoZXJlb2YuCisKK00uICJVc2UiIG1lYW5zIHRoZSBhcHBsaWNhdGlvbiBvciBlbXBsb3ltZW50IG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlCitmb3IgYW55IHB1cnBvc2UuCisKKzIuIEdSQU5UIE9GIFJJR0hUUworCitBLiBVbmRlciBOb24tUGF0ZW50IFJpZ2h0czogU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKK3RoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yLCB3aXRoIHJlc3BlY3QgdG8gaXRzIG93biBjb250cmlidXRpb24KK3RvIHRoZSBTdWJqZWN0IFNvZnR3YXJlLCBoZXJlYnkgZ3JhbnRzIHRvIGVhY2ggUmVjaXBpZW50IGEKK25vbi1leGNsdXNpdmUsIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSBsaWNlbnNlIHRvIGVuZ2FnZSBpbiB0aGUKK2ZvbGxvd2luZyBhY3Rpdml0aWVzIHBlcnRhaW5pbmcgdG8gdGhlIFN1YmplY3QgU29mdHdhcmU6CisKKzEuIFVzZQorMi4gRGlzdHJpYnV0aW9uCiszLiBSZXByb2R1Y3Rpb24KKzQuIE1vZGlmaWNhdGlvbgorNS4gUmVkaXN0cmlidXRpb24KKzYuIERpc3BsYXkKKworQi4gVW5kZXIgUGF0ZW50IFJpZ2h0czogU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcworQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yLCB3aXRoIHJlc3BlY3QgdG8gaXRzIG93biBjb250cmlidXRpb24gdG8KK3RoZSBTdWJqZWN0IFNvZnR3YXJlLCBoZXJlYnkgZ3JhbnRzIHRvIGVhY2ggUmVjaXBpZW50IHVuZGVyIENvdmVyZWQKK1BhdGVudHMgYSBub24tZXhjbHVzaXZlLCB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUgbGljZW5zZSB0byBlbmdhZ2UgaW4KK3RoZSBmb2xsb3dpbmcgYWN0aXZpdGllcyBwZXJ0YWluaW5nIHRvIHRoZSBTdWJqZWN0IFNvZnR3YXJlOgorCisxLiBVc2UKKzIuIERpc3RyaWJ1dGlvbgorMy4gUmVwcm9kdWN0aW9uCis0LiBTYWxlCis1LiBPZmZlciBmb3IgU2FsZQorCitDLiBUaGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgUGFyYWdyYXBoIEIuIGFsc28gYXBwbHkgdG8gdGhlIGNvbWJpbmF0aW9uCitvZiBhIENvbnRyaWJ1dG9yJ3MgTW9kaWZpY2F0aW9uIGFuZCB0aGUgU3ViamVjdCBTb2Z0d2FyZSBpZiwgYXQgdGhlCit0aW1lIHRoZSBNb2RpZmljYXRpb24gaXMgYWRkZWQgYnkgdGhlIENvbnRyaWJ1dG9yLCB0aGUgYWRkaXRpb24gb2YKK3N1Y2ggTW9kaWZpY2F0aW9uIGNhdXNlcyB0aGUgY29tYmluYXRpb24gdG8gYmUgY292ZXJlZCBieSB0aGUgQ292ZXJlZAorUGF0ZW50cy4gIEl0IGRvZXMgbm90IGFwcGx5IHRvIGFueSBvdGhlciBjb21iaW5hdGlvbnMgdGhhdCBpbmNsdWRlIGEKK01vZGlmaWNhdGlvbi4KKworRC4gVGhlIHJpZ2h0cyBncmFudGVkIGluIFBhcmFncmFwaHMgQS4gYW5kIEIuIGFsbG93IHRoZSBSZWNpcGllbnQgdG8KK3N1YmxpY2Vuc2UgdGhvc2Ugc2FtZSByaWdodHMuICBTdWNoIHN1YmxpY2Vuc2UgbXVzdCBiZSB1bmRlciB0aGUgc2FtZQordGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQuCisKKzMuIE9CTElHQVRJT05TIE9GIFJFQ0lQSUVOVAorCitBLiBEaXN0cmlidXRpb24gb3IgUmVkaXN0cmlidXRpb24gb2YgdGhlIFN1YmplY3QgU29mdHdhcmUgbXVzdCBiZSBtYWRlCit1bmRlciB0aGlzIEFncmVlbWVudCBleGNlcHQgZm9yIGFkZGl0aW9ucyBjb3ZlcmVkIHVuZGVyIHBhcmFncmFwaCAzSC4KKworMS4gV2hlbmV2ZXIgYSBSZWNpcGllbnQgZGlzdHJpYnV0ZXMgb3IgcmVkaXN0cmlidXRlcyB0aGUgU3ViamVjdAorICAgU29mdHdhcmUsIGEgY29weSBvZiB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluY2x1ZGVkIHdpdGggZWFjaCBjb3B5CisgICBvZiB0aGUgU3ViamVjdCBTb2Z0d2FyZTsgYW5kCisyLiBJZiBSZWNpcGllbnQgZGlzdHJpYnV0ZXMgb3IgcmVkaXN0cmlidXRlcyB0aGUgU3ViamVjdCBTb2Z0d2FyZSBpbgorICAgYW55IGZvcm0gb3RoZXIgdGhhbiBzb3VyY2UgY29kZSwgUmVjaXBpZW50IG11c3QgYWxzbyBtYWtlIHRoZQorICAgc291cmNlIGNvZGUgZnJlZWx5IGF2YWlsYWJsZSwgYW5kIG11c3QgcHJvdmlkZSB3aXRoIGVhY2ggY29weSBvZgorICAgdGhlIFN1YmplY3QgU29mdHdhcmUgaW5mb3JtYXRpb24gb24gaG93IHRvIG9idGFpbiB0aGUgc291cmNlIGNvZGUKKyAgIGluIGEgcmVhc29uYWJsZSBtYW5uZXIgb24gb3IgdGhyb3VnaCBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvcgorICAgc29mdHdhcmUgZXhjaGFuZ2UuCisKK0IuIEVhY2ggUmVjaXBpZW50IG11c3QgZW5zdXJlIHRoYXQgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgbm90aWNlCithcHBlYXJzIHByb21pbmVudGx5IGluIHRoZSBTdWJqZWN0IFNvZnR3YXJlOgorCitDb3B5cmlnaHQgw6MgMjAwNCBVbml0ZWQgU3RhdGVzIEdvdmVybm1lbnQgYXMgcmVwcmVzZW50ZWQgYnkgdGhlCitBZG1pbmlzdHJhdG9yIG9mIHRoZSBOYXRpb25hbCBBZXJvbmF1dGljcyBhbmQgU3BhY2UgQWRtaW5pc3RyYXRpb24uCitBbGwgUmlnaHRzIFJlc2VydmVkLgorCitDLiBFYWNoIENvbnRyaWJ1dG9yIG11c3QgY2hhcmFjdGVyaXplIGl0cyBhbHRlcmF0aW9uIG9mIHRoZSBTdWJqZWN0CitTb2Z0d2FyZSBhcyBhIE1vZGlmaWNhdGlvbiBhbmQgbXVzdCBpZGVudGlmeSBpdHNlbGYgYXMgdGhlIG9yaWdpbmF0b3IKK29mIGl0cyBNb2RpZmljYXRpb24gaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cyBzdWJzZXF1ZW50CitSZWNpcGllbnRzIHRvIGlkZW50aWZ5IHRoZSBvcmlnaW5hdG9yIG9mIHRoZSBNb2RpZmljYXRpb24uICBJbgorZnVsZmlsbG1lbnQgb2YgdGhlc2UgcmVxdWlyZW1lbnRzLCBDb250cmlidXRvciBtdXN0IGluY2x1ZGUgYSBmaWxlCisoZS5nLiwgYSBjaGFuZ2UgbG9nIGZpbGUpIHRoYXQgZGVzY3JpYmVzIHRoZSBhbHRlcmF0aW9ucyBtYWRlIGFuZCB0aGUKK2RhdGUgb2YgdGhlIGFsdGVyYXRpb25zLCBpZGVudGlmaWVzIENvbnRyaWJ1dG9yIGFzIG9yaWdpbmF0b3Igb2YgdGhlCithbHRlcmF0aW9ucywgYW5kIGNvbnNlbnRzIHRvIGNoYXJhY3Rlcml6YXRpb24gb2YgdGhlIGFsdGVyYXRpb25zIGFzIGEKK01vZGlmaWNhdGlvbiwgZm9yIGV4YW1wbGUsIGJ5IGluY2x1ZGluZyBhIHN0YXRlbWVudCB0aGF0IHRoZQorTW9kaWZpY2F0aW9uIGlzIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwKK1NvZnR3YXJlIHByb3ZpZGVkIGJ5IEdvdmVybm1lbnQgQWdlbmN5LiBPbmNlIGNvbnNlbnQgaXMgZ3JhbnRlZCwgaXQKK21heSBub3QgdGhlcmVhZnRlciBiZSByZXZva2VkLgorCitELiBBIENvbnRyaWJ1dG9yIG1heSBhZGQgaXRzIG93biBjb3B5cmlnaHQgbm90aWNlIHRvIHRoZSBTdWJqZWN0CitTb2Z0d2FyZS4gIE9uY2UgYSBjb3B5cmlnaHQgbm90aWNlIGhhcyBiZWVuIGFkZGVkIHRvIHRoZSBTdWJqZWN0CitTb2Z0d2FyZSwgYSBSZWNpcGllbnQgbWF5IG5vdCByZW1vdmUgaXQgd2l0aG91dCB0aGUgZXhwcmVzcyBwZXJtaXNzaW9uCitvZiB0aGUgQ29udHJpYnV0b3Igd2hvIGFkZGVkIHRoZSBub3RpY2UuCisKK0UuIEEgUmVjaXBpZW50IG1heSBub3QgbWFrZSBhbnkgcmVwcmVzZW50YXRpb24gaW4gdGhlIFN1YmplY3QgU29mdHdhcmUKK29yIGluIGFueSBwcm9tb3Rpb25hbCwgYWR2ZXJ0aXNpbmcgb3Igb3RoZXIgbWF0ZXJpYWwgdGhhdCBtYXkgYmUKK2NvbnN0cnVlZCBhcyBhbiBlbmRvcnNlbWVudCBieSBHb3Zlcm5tZW50IEFnZW5jeSBvciBieSBhbnkgcHJpb3IKK1JlY2lwaWVudCBvZiBhbnkgcHJvZHVjdCBvciBzZXJ2aWNlIHByb3ZpZGVkIGJ5IFJlY2lwaWVudCwgb3IgdGhhdCBtYXkKK3NlZWsgdG8gb2J0YWluIGNvbW1lcmNpYWwgYWR2YW50YWdlIGJ5IHRoZSBmYWN0IG9mIEdvdmVybm1lbnQgQWdlbmN5J3MKK29yIGEgcHJpb3IgUmVjaXBpZW50J3MgcGFydGljaXBhdGlvbiBpbiB0aGlzIEFncmVlbWVudC4KKworRi4gSW4gYW4gZWZmb3J0IHRvIHRyYWNrIHVzYWdlIGFuZCBtYWludGFpbiBhY2N1cmF0ZSByZWNvcmRzIG9mIHRoZQorU3ViamVjdCBTb2Z0d2FyZSwgZWFjaCBSZWNpcGllbnQsIHVwb24gcmVjZWlwdCBvZiB0aGUgU3ViamVjdAorU29mdHdhcmUsIGlzIHJlcXVlc3RlZCB0byByZWdpc3RlciB3aXRoIEdvdmVybm1lbnQgQWdlbmN5IGJ5IHZpc2l0aW5nCit0aGUgZm9sbG93aW5nIHdlYnNpdGU6IGh0dHA6Ly9vcGVuc291cmNlLmFyYy5uYXNhLmdvdi4gIFJlY2lwaWVudCdzCituYW1lIGFuZCBwZXJzb25hbCBpbmZvcm1hdGlvbiBzaGFsbCBiZSB1c2VkIGZvciBzdGF0aXN0aWNhbCBwdXJwb3Nlcworb25seS4gT25jZSBhIFJlY2lwaWVudCBtYWtlcyBhIE1vZGlmaWNhdGlvbiBhdmFpbGFibGUsIGl0IGlzIHJlcXVlc3RlZAordGhhdCB0aGUgUmVjaXBpZW50IGluZm9ybSBHb3Zlcm5tZW50IEFnZW5jeSBhdCB0aGUgd2ViIHNpdGUgcHJvdmlkZWQKK2Fib3ZlIGhvdyB0byBhY2Nlc3MgdGhlIE1vZGlmaWNhdGlvbi4KKworRy4gRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdGhhdCBpdHMgTW9kaWZpY2F0aW9uIGlzIGJlbGlldmVkCit0byBiZSBDb250cmlidXRvcidzIG9yaWdpbmFsIGNyZWF0aW9uIGFuZCBkb2VzIG5vdCB2aW9sYXRlIGFueQorZXhpc3RpbmcgYWdyZWVtZW50cywgcmVndWxhdGlvbnMsIHN0YXR1dGVzIG9yIHJ1bGVzLCBhbmQgZnVydGhlciB0aGF0CitDb250cmlidXRvciBoYXMgc3VmZmljaWVudCByaWdodHMgdG8gZ3JhbnQgdGhlIHJpZ2h0cyBjb252ZXllZCBieSB0aGlzCitBZ3JlZW1lbnQuCisKK0guIEEgUmVjaXBpZW50IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwKK3N1cHBvcnQsIGluZGVtbml0eSBhbmQvb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIG90aGVyCitSZWNpcGllbnRzIG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlLiAgQSBSZWNpcGllbnQgbWF5IGRvIHNvLCBob3dldmVyLAorb25seSBvbiBpdHMgb3duIGJlaGFsZiBhbmQgbm90IG9uIGJlaGFsZiBvZiBHb3Zlcm5tZW50IEFnZW5jeSBvciBhbnkKK290aGVyIFJlY2lwaWVudC4gIFN1Y2ggYSBSZWNpcGllbnQgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdAorYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBhbmQvb3IgbGlhYmlsaXR5IG9ibGlnYXRpb24gaXMKK29mZmVyZWQgYnkgdGhhdCBSZWNpcGllbnQgYWxvbmUuICBGdXJ0aGVyLCBzdWNoIFJlY2lwaWVudCBhZ3JlZXMgdG8KK2luZGVtbmlmeSBHb3Zlcm5tZW50IEFnZW5jeSBhbmQgZXZlcnkgb3RoZXIgUmVjaXBpZW50IGZvciBhbnkKK2xpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGVtIGFzIGEgcmVzdWx0IG9mIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkKK2FuZC9vciBsaWFiaWxpdHkgb2ZmZXJlZCBieSBzdWNoIFJlY2lwaWVudC4KKworSS4gQSBSZWNpcGllbnQgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBTdWJqZWN0IFNvZnR3YXJlCit3aXRoIHNlcGFyYXRlIHNvZnR3YXJlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBhZ3JlZW1lbnQgYW5kCitkaXN0cmlidXRlIHRoZSBMYXJnZXIgV29yayBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJbiBzdWNoIGNhc2UsIHRoZQorUmVjaXBpZW50IG11c3QgbWFrZSBzdXJlIFN1YmplY3QgU29mdHdhcmUsIG9yIHBvcnRpb25zIHRoZXJlb2YsCitpbmNsdWRlZCBpbiB0aGUgTGFyZ2VyIFdvcmsgaXMgc3ViamVjdCB0byB0aGlzIEFncmVlbWVudC4KKworSi4gTm90d2l0aHN0YW5kaW5nIGFueSBwcm92aXNpb25zIGNvbnRhaW5lZCBoZXJlaW4sIFJlY2lwaWVudCBpcworaGVyZWJ5IHB1dCBvbiBub3RpY2UgdGhhdCBleHBvcnQgb2YgYW55IGdvb2RzIG9yIHRlY2huaWNhbCBkYXRhIGZyb20KK3RoZSBVbml0ZWQgU3RhdGVzIG1heSByZXF1aXJlIHNvbWUgZm9ybSBvZiBleHBvcnQgbGljZW5zZSBmcm9tIHRoZQorVS5TLiBHb3Zlcm5tZW50LiAgRmFpbHVyZSB0byBvYnRhaW4gbmVjZXNzYXJ5IGV4cG9ydCBsaWNlbnNlcyBtYXkKK3Jlc3VsdCBpbiBjcmltaW5hbCBsaWFiaWxpdHkgdW5kZXIgVS5TLiBsYXdzLiAgR292ZXJubWVudCBBZ2VuY3kKK25laXRoZXIgcmVwcmVzZW50cyB0aGF0IGEgbGljZW5zZSBzaGFsbCBub3QgYmUgcmVxdWlyZWQgbm9yIHRoYXQsIGlmCityZXF1aXJlZCwgaXQgc2hhbGwgYmUgaXNzdWVkLiAgTm90aGluZyBncmFudGVkIGhlcmVpbiBwcm92aWRlcyBhbnkKK3N1Y2ggZXhwb3J0IGxpY2Vuc2UuCisKKzQuIERJU0NMQUlNRVIgT0YgV0FSUkFOVElFUyBBTkQgTElBQklMSVRJRVM7IFdBSVZFUiBBTkQgSU5ERU1OSUZJQ0FUSU9OCisKK0EuIE5vIFdhcnJhbnR5OiBUSEUgU1VCSkVDVCBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIFdJVEhPVVQgQU5ZCitXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCwgSU1QTElFRCwgT1IgU1RBVFVUT1JZLAorSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIEFOWSBXQVJSQU5UWSBUSEFUIFRIRSBTVUJKRUNUIFNPRlRXQVJFCitXSUxMIENPTkZPUk0gVE8gU1BFQ0lGSUNBVElPTlMsIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SIEZSRUVET00gRlJPTQorSU5GUklOR0VNRU5ULCBBTlkgV0FSUkFOVFkgVEhBVCBUSEUgU1VCSkVDVCBTT0ZUV0FSRSBXSUxMIEJFIEVSUk9SCitGUkVFLCBPUiBBTlkgV0FSUkFOVFkgVEhBVCBET0NVTUVOVEFUSU9OLCBJRiBQUk9WSURFRCwgV0lMTCBDT05GT1JNIFRPCitUSEUgU1VCSkVDVCBTT0ZUV0FSRS4gVEhJUyBBR1JFRU1FTlQgRE9FUyBOT1QsIElOIEFOWSBNQU5ORVIsCitDT05TVElUVVRFIEFOIEVORE9SU0VNRU5UIEJZIEdPVkVSTk1FTlQgQUdFTkNZIE9SIEFOWSBQUklPUiBSRUNJUElFTlQKK09GIEFOWSBSRVNVTFRTLCBSRVNVTFRJTkcgREVTSUdOUywgSEFSRFdBUkUsIFNPRlRXQVJFIFBST0RVQ1RTIE9SIEFOWQorT1RIRVIgQVBQTElDQVRJT05TIFJFU1VMVElORyBGUk9NIFVTRSBPRiBUSEUgU1VCSkVDVCBTT0ZUV0FSRS4KK0ZVUlRIRVIsIEdPVkVSTk1FTlQgQUdFTkNZIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBBTkQgTElBQklMSVRJRVMKK1JFR0FSRElORyBUSElSRC1QQVJUWSBTT0ZUV0FSRSwgSUYgUFJFU0VOVCBJTiBUSEUgT1JJR0lOQUwgU09GVFdBUkUsCitBTkQgRElTVFJJQlVURVMgSVQgIkFTIElTLiIKKworQi4gV2FpdmVyIGFuZCBJbmRlbW5pdHk6IFJFQ0lQSUVOVCBBR1JFRVMgVE8gV0FJVkUgQU5ZIEFORCBBTEwgQ0xBSU1TCitBR0FJTlNUIFRIRSBVTklURUQgU1RBVEVTIEdPVkVSTk1FTlQsIElUUyBDT05UUkFDVE9SUyBBTkQKK1NVQkNPTlRSQUNUT1JTLCBBUyBXRUxMIEFTIEFOWSBQUklPUiBSRUNJUElFTlQuICBJRiBSRUNJUElFTlQnUyBVU0UgT0YKK1RIRSBTVUJKRUNUIFNPRlRXQVJFIFJFU1VMVFMgSU4gQU5ZIExJQUJJTElUSUVTLCBERU1BTkRTLCBEQU1BR0VTLAorRVhQRU5TRVMgT1IgTE9TU0VTIEFSSVNJTkcgRlJPTSBTVUNIIFVTRSwgSU5DTFVESU5HIEFOWSBEQU1BR0VTIEZST00KK1BST0RVQ1RTIEJBU0VEIE9OLCBPUiBSRVNVTFRJTkcgRlJPTSwgUkVDSVBJRU5UJ1MgVVNFIE9GIFRIRSBTVUJKRUNUCitTT0ZUV0FSRSwgUkVDSVBJRU5UIFNIQUxMIElOREVNTklGWSBBTkQgSE9MRCBIQVJNTEVTUyBUSEUgVU5JVEVECitTVEFURVMgR09WRVJOTUVOVCwgSVRTIENPTlRSQUNUT1JTIEFORCBTVUJDT05UUkFDVE9SUywgQVMgV0VMTCBBUyBBTlkKK1BSSU9SIFJFQ0lQSUVOVCwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgTEFXLiAgUkVDSVBJRU5UJ1MgU09MRQorUkVNRURZIEZPUiBBTlkgU1VDSCBNQVRURVIgU0hBTEwgQkUgVEhFIElNTUVESUFURSwgVU5JTEFURVJBTAorVEVSTUlOQVRJT04gT0YgVEhJUyBBR1JFRU1FTlQuCisKKworNS4gR0VORVJBTCBURVJNUworCitBLiBUZXJtaW5hdGlvbjogVGhpcyBBZ3JlZW1lbnQgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbAordGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYgYSBSZWNpcGllbnQgZmFpbHMgdG8gY29tcGx5IHdpdGggdGhlc2UKK3Rlcm1zIGFuZCBjb25kaXRpb25zLCBhbmQgZmFpbHMgdG8gY3VyZSBzdWNoIG5vbmNvbXBsaWFuY2Ugd2l0aGluCit0aGlydHkgKDMwKSBkYXlzIG9mIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gIFVwb24KK3Rlcm1pbmF0aW9uLCBhIFJlY2lwaWVudCBhZ3JlZXMgdG8gaW1tZWRpYXRlbHkgY2Vhc2UgdXNlIGFuZAorZGlzdHJpYnV0aW9uIG9mIHRoZSBTdWJqZWN0IFNvZnR3YXJlLiAgQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBTdWJqZWN0CitTb2Z0d2FyZSBwcm9wZXJseSBncmFudGVkIGJ5IHRoZSBicmVhY2hpbmcgUmVjaXBpZW50IHNoYWxsIHN1cnZpdmUgYW55CitzdWNoIHRlcm1pbmF0aW9uIG9mIHRoaXMgQWdyZWVtZW50LgorCitCLiBTZXZlcmFiaWxpdHk6IElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaW52YWxpZCBvcgordW5lbmZvcmNlYWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgaXQgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkKK29yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LgorCitDLiBBcHBsaWNhYmxlIExhdzogVGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgc3ViamVjdCB0byBVbml0ZWQgU3RhdGVzCitmZWRlcmFsIGxhdyBvbmx5IGZvciBhbGwgcHVycG9zZXMsIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLAorZGV0ZXJtaW5pbmcgdGhlIHZhbGlkaXR5IG9mIHRoaXMgQWdyZWVtZW50LCB0aGUgbWVhbmluZyBvZiBpdHMKK3Byb3Zpc2lvbnMgYW5kIHRoZSByaWdodHMsIG9ibGlnYXRpb25zIGFuZCByZW1lZGllcyBvZiB0aGUgcGFydGllcy4KKworRC4gRW50aXJlIFVuZGVyc3RhbmRpbmc6IFRoaXMgQWdyZWVtZW50IGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUKK3VuZGVyc3RhbmRpbmcgYW5kIGFncmVlbWVudCBvZiB0aGUgcGFydGllcyByZWxhdGluZyB0byByZWxlYXNlIG9mIHRoZQorU3ViamVjdCBTb2Z0d2FyZSBhbmQgbWF5IG5vdCBiZSBzdXBlcnNlZGVkLCBtb2RpZmllZCBvciBhbWVuZGVkIGV4Y2VwdAorYnkgZnVydGhlciB3cml0dGVuIGFncmVlbWVudCBkdWx5IGV4ZWN1dGVkIGJ5IHRoZSBwYXJ0aWVzLgorCitFLiBCaW5kaW5nIEF1dGhvcml0eTogQnkgYWNjZXB0aW5nIGFuZCB1c2luZyB0aGUgU3ViamVjdCBTb2Z0d2FyZQordW5kZXIgdGhpcyBBZ3JlZW1lbnQsIGEgUmVjaXBpZW50IGFmZmlybXMgaXRzIGF1dGhvcml0eSB0byBiaW5kIHRoZQorUmVjaXBpZW50IHRvIGFsbCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgdGhhdCB0aGF0CitSZWNpcGllbnQgaGVyZWJ5IGFncmVlcyB0byBhbGwgdGVybXMgYW5kIGNvbmRpdGlvbnMgaGVyZWluLgorCitGLiBQb2ludCBvZiBDb250YWN0OiBBbnkgUmVjaXBpZW50IGNvbnRhY3Qgd2l0aCBHb3Zlcm5tZW50IEFnZW5jeSBpcwordG8gYmUgZGlyZWN0ZWQgdG8gdGhlIGRlc2lnbmF0ZWQgcmVwcmVzZW50YXRpdmUgYXMgZm9sbG93czoKK2JncmVlbkBuYXMubmFzYS5nb3YuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9OUEwtMS4xIGIvbGljZW5zZXMvTlBMLTEuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzM4ZWE5Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvTlBMLTEuMQpAQCAtMCwwICsxLDU2OSBAQAorCisgICAgIEFNRU5ETUVOVFMKKworICAgICBUaGUgTmV0c2NhcGUgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAxLjEgKCJOUEwiKSBjb25zaXN0cyBvZiB0aGUKKyAgICAgTW96aWxsYSBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDEuMSB3aXRoIHRoZSBmb2xsb3dpbmcgQW1lbmRtZW50cywKKyAgICAgaW5jbHVkaW5nIEV4aGliaXQgQS1OZXRzY2FwZSBQdWJsaWMgTGljZW5zZS4gIEZpbGVzIGlkZW50aWZpZWQgd2l0aAorICAgICAiRXhoaWJpdCBBLU5ldHNjYXBlIFB1YmxpYyBMaWNlbnNlIiBhcmUgZ292ZXJuZWQgYnkgdGhlIE5ldHNjYXBlCisgICAgIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4xLgorCisgICAgIEFkZGl0aW9uYWwgVGVybXMgYXBwbGljYWJsZSB0byB0aGUgTmV0c2NhcGUgUHVibGljIExpY2Vuc2UuCisgICAgICAgICAgSS4gRWZmZWN0LgorICAgICAgICAgIFRoZXNlIGFkZGl0aW9uYWwgdGVybXMgZGVzY3JpYmVkIGluIHRoaXMgTmV0c2NhcGUgUHVibGljCisgICAgICAgICAgTGljZW5zZSAtLSBBbWVuZG1lbnRzIHNoYWxsIGFwcGx5IHRvIHRoZSBNb3ppbGxhIENvbW11bmljYXRvcgorICAgICAgICAgIGNsaWVudCBjb2RlIGFuZCB0byBhbGwgQ292ZXJlZCBDb2RlIHVuZGVyIHRoaXMgTGljZW5zZS4KKworICAgICAgICAgIElJLiAiTmV0c2NhcGUncyBCcmFuZGVkIENvZGUiIG1lYW5zIENvdmVyZWQgQ29kZSB0aGF0IE5ldHNjYXBlCisgICAgICAgICAgZGlzdHJpYnV0ZXMgYW5kL29yIHBlcm1pdHMgb3RoZXJzIHRvIGRpc3RyaWJ1dGUgdW5kZXIgb25lIG9yIG1vcmUKKyAgICAgICAgICB0cmFkZW1hcmsocykgd2hpY2ggYXJlIGNvbnRyb2xsZWQgYnkgTmV0c2NhcGUgYnV0IHdoaWNoIGFyZSBub3QKKyAgICAgICAgICBsaWNlbnNlZCBmb3IgdXNlIHVuZGVyIHRoaXMgTGljZW5zZS4KKworICAgICAgICAgIElJSS4gTmV0c2NhcGUgYW5kIGxvZ28uCisgICAgICAgICAgVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IGFueSByaWdodHMgdG8gdXNlIHRoZSB0cmFkZW1hcmtzCisgICAgICAgICAgIk5ldHNjYXBlIiwgdGhlICJOZXRzY2FwZSBOIGFuZCBob3Jpem9uIiBsb2dvIG9yIHRoZSAiTmV0c2NhcGUKKyAgICAgICAgICBsaWdodGhvdXNlIiBsb2dvLCAiTmV0Y2VudGVyIiwgIkdlY2tvIiwgIkphdmEiIG9yICJKYXZhU2NyaXB0IiwKKyAgICAgICAgICAiU21hcnQgQnJvd3NpbmciIGV2ZW4gaWYgc3VjaCBtYXJrcyBhcmUgaW5jbHVkZWQgaW4gdGhlIE9yaWdpbmFsCisgICAgICAgICAgQ29kZSBvciBNb2RpZmljYXRpb25zLgorCisgICAgICAgICAgSVYuIEluYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIENvbnRyYWN0dWFsIE9ibGlnYXRpb24uCisgICAgICAgICAgUHJpb3IgdG8gbGljZW5zaW5nIHRoZSBPcmlnaW5hbCBDb2RlIHVuZGVyIHRoaXMgTGljZW5zZSwgTmV0c2NhcGUKKyAgICAgICAgICBoYXMgbGljZW5zZWQgdGhpcmQgcGFydHkgY29kZSBmb3IgdXNlIGluIE5ldHNjYXBlJ3MgQnJhbmRlZCBDb2RlLgorICAgICAgICAgIFRvIHRoZSBleHRlbnQgdGhhdCBOZXRzY2FwZSBpcyBsaW1pdGVkIGNvbnRyYWN0dWFsbHkgZnJvbSBtYWtpbmcKKyAgICAgICAgICBzdWNoIHRoaXJkIHBhcnR5IGNvZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgTGljZW5zZSwgTmV0c2NhcGUgbWF5CisgICAgICAgICAgY2hvb3NlIHRvIHJlaW50ZWdyYXRlIHN1Y2ggY29kZSBpbnRvIENvdmVyZWQgQ29kZSB3aXRob3V0IGJlaW5nCisgICAgICAgICAgcmVxdWlyZWQgdG8gZGlzdHJpYnV0ZSBzdWNoIGNvZGUgaW4gU291cmNlIENvZGUgZm9ybSwgZXZlbiBpZgorICAgICAgICAgIHN1Y2ggY29kZSB3b3VsZCBvdGhlcndpc2UgYmUgY29uc2lkZXJlZCAiTW9kaWZpY2F0aW9ucyIgdW5kZXIKKyAgICAgICAgICB0aGlzIExpY2Vuc2UuCisKKyAgICAgICAgICBWLiBVc2Ugb2YgTW9kaWZpY2F0aW9ucyBhbmQgQ292ZXJlZCBDb2RlIGJ5IEluaXRpYWwgRGV2ZWxvcGVyLgorICAgICAgICAgICAgICAgVi4xLiBJbiBHZW5lcmFsLgorICAgICAgICAgICAgICAgVGhlIG9ibGlnYXRpb25zIG9mIFNlY3Rpb24gMyBhcHBseSB0byBOZXRzY2FwZSwgZXhjZXB0IHRvCisgICAgICAgICAgICAgICB0aGUgZXh0ZW50IHNwZWNpZmllZCBpbiB0aGlzIEFtZW5kbWVudCwgU2VjdGlvbiBWLjIgYW5kIFYuMy4KKworICAgICAgICAgICAgICAgVi4yLiBPdGhlciBQcm9kdWN0cy4KKyAgICAgICAgICAgICAgIE5ldHNjYXBlIG1heSBpbmNsdWRlIENvdmVyZWQgQ29kZSBpbiBwcm9kdWN0cyBvdGhlciB0aGFuIHRoZQorICAgICAgICAgICAgICAgTmV0c2NhcGUncyBCcmFuZGVkIENvZGUgd2hpY2ggYXJlIHJlbGVhc2VkIGJ5IE5ldHNjYXBlCisgICAgICAgICAgICAgICBkdXJpbmcgdGhlIHR3byAoMikgeWVhcnMgZm9sbG93aW5nIHRoZSByZWxlYXNlIGRhdGUgb2YgdGhlCisgICAgICAgICAgICAgICBPcmlnaW5hbCBDb2RlLCB3aXRob3V0IHN1Y2ggYWRkaXRpb25hbCBwcm9kdWN0cyBiZWNvbWluZworICAgICAgICAgICAgICAgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBhbmQgbWF5IGxpY2Vuc2Ugc3VjaAorICAgICAgICAgICAgICAgYWRkaXRpb25hbCBwcm9kdWN0cyBvbiBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aG9zZSBjb250YWluZWQKKyAgICAgICAgICAgICAgIGluIHRoaXMgTGljZW5zZS4KKworICAgICAgICAgICAgICAgVi4zLiBBbHRlcm5hdGl2ZSBMaWNlbnNpbmcuCisgICAgICAgICAgICAgICBOZXRzY2FwZSBtYXkgbGljZW5zZSB0aGUgU291cmNlIENvZGUgb2YgTmV0c2NhcGUncyBCcmFuZGVkCisgICAgICAgICAgICAgICBDb2RlLCBpbmNsdWRpbmcgTW9kaWZpY2F0aW9ucyBpbmNvcnBvcmF0ZWQgdGhlcmVpbiwgd2l0aG91dAorICAgICAgICAgICAgICAgc3VjaCBOZXRzY2FwZSBCcmFuZGVkIENvZGUgYmVjb21pbmcgc3ViamVjdCB0byB0aGUgdGVybXMgb2YKKyAgICAgICAgICAgICAgIHRoaXMgTGljZW5zZSwgYW5kIG1heSBsaWNlbnNlIHN1Y2ggTmV0c2NhcGUgQnJhbmRlZCBDb2RlIG9uCisgICAgICAgICAgICAgICBkaWZmZXJlbnQgdGVybXMgZnJvbSB0aG9zZSBjb250YWluZWQgaW4gdGhpcyBMaWNlbnNlLgorCisgICAgICAgICAgVkkuIExpdGlnYXRpb24uCisgICAgICAgICAgTm90d2l0aHN0YW5kaW5nIHRoZSBsaW1pdGF0aW9ucyBvZiBTZWN0aW9uIDExIGFib3ZlLCB0aGUKKyAgICAgICAgICBwcm92aXNpb25zIHJlZ2FyZGluZyBsaXRpZ2F0aW9uIGluIFNlY3Rpb24gMTEoYSksIChiKSBhbmQgKGMpIG9mCisgICAgICAgICAgdGhlIExpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gYWxsIGRpc3B1dGVzIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZS4KKworICAgICBFWEhJQklUIEEtTmV0c2NhcGUgUHVibGljIExpY2Vuc2UuCisKKyAgICAgICAgICAiVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTmV0c2NhcGUgUHVibGljCisgICAgICAgICAgTGljZW5zZSBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUKKyAgICAgICAgICBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YKKyAgICAgICAgICB0aGUgTGljZW5zZSBhdCBodHRwOi8vd3d3Lm1vemlsbGEub3JnL05QTC8KKworICAgICAgICAgIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUworICAgICAgICAgIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IKKyAgICAgICAgICBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcKKyAgICAgICAgICByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgorCisgICAgICAgICAgVGhlIE9yaWdpbmFsIENvZGUgaXMgTW96aWxsYSBDb21tdW5pY2F0b3IgY2xpZW50IGNvZGUsIHJlbGVhc2VkCisgICAgICAgICAgTWFyY2ggMzEsIDE5OTguCisKKyAgICAgICAgICBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMgTmV0c2NhcGUKKyAgICAgICAgICBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbi4gUG9ydGlvbnMgY3JlYXRlZCBieSBOZXRzY2FwZSBhcmUKKyAgICAgICAgICBDb3B5cmlnaHQgKEMpIDE5OTgtMTk5OSBOZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbi4gQWxsCisgICAgICAgICAgUmlnaHRzIFJlc2VydmVkLgorCisgICAgICAgICAgQ29udHJpYnV0b3Iocyk6IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLgorCisgICAgICAgICAgQWx0ZXJuYXRpdmVseSwgdGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBtYXkgYmUgdXNlZCB1bmRlciB0aGUKKyAgICAgICAgICB0ZXJtcyBvZiB0aGUgX19fX18gbGljZW5zZSAodGhlICJbX19fXSBMaWNlbnNlIiksIGluIHdoaWNoIGNhc2UKKyAgICAgICAgICB0aGUgcHJvdmlzaW9ucyBvZiBbX19fX19fXSBMaWNlbnNlIGFyZSBhcHBsaWNhYmxlICBpbnN0ZWFkIG9mCisgICAgICAgICAgdGhvc2UgYWJvdmUuICBJZiB5b3Ugd2lzaCB0byBhbGxvdyB1c2Ugb2YgeW91ciB2ZXJzaW9uIG9mIHRoaXMKKyAgICAgICAgICBmaWxlIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBbX19fX10gTGljZW5zZSBhbmQgbm90IHRvIGFsbG93CisgICAgICAgICAgb3RoZXJzIHRvIHVzZSB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBOUEwsIGluZGljYXRlCisgICAgICAgICAgeW91ciBkZWNpc2lvbiBieSBkZWxldGluZyAgdGhlIHByb3Zpc2lvbnMgYWJvdmUgYW5kIHJlcGxhY2UgIHRoZW0KKyAgICAgICAgICB3aXRoIHRoZSBub3RpY2UgYW5kIG90aGVyIHByb3Zpc2lvbnMgcmVxdWlyZWQgYnkgdGhlIFtfX19dCisgICAgICAgICAgTGljZW5zZS4gIElmIHlvdSBkbyBub3QgZGVsZXRlIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudAorICAgICAgICAgIG1heSB1c2UgeW91ciB2ZXJzaW9uIG9mIHRoaXMgZmlsZSB1bmRlciBlaXRoZXIgdGhlIE5QTCBvciB0aGUKKyAgICAgICAgICBbX19fXSBMaWNlbnNlLiIKKworICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTU9aSUxMQSBQVUJMSUMgTElDRU5TRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDEuMQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0KKworMS4gRGVmaW5pdGlvbnMuCisKKyAgICAgMS4wLjEuICJDb21tZXJjaWFsIFVzZSIgbWVhbnMgZGlzdHJpYnV0aW9uIG9yIG90aGVyd2lzZSBtYWtpbmcgdGhlCisgICAgIENvdmVyZWQgQ29kZSBhdmFpbGFibGUgdG8gYSB0aGlyZCBwYXJ0eS4KKworICAgICAxLjEuICJDb250cmlidXRvciIgbWVhbnMgZWFjaCBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvCisgICAgIHRoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCisgICAgIDEuMi4gIkNvbnRyaWJ1dG9yIFZlcnNpb24iIG1lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwKKyAgICAgQ29kZSwgcHJpb3IgTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEgQ29udHJpYnV0b3IsIGFuZCB0aGUgTW9kaWZpY2F0aW9ucworICAgICBtYWRlIGJ5IHRoYXQgcGFydGljdWxhciBDb250cmlidXRvci4KKworICAgICAxLjMuICJDb3ZlcmVkIENvZGUiIG1lYW5zIHRoZSBPcmlnaW5hbCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMgb3IgdGhlCisgICAgIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIGFuZCBNb2RpZmljYXRpb25zLCBpbiBlYWNoIGNhc2UKKyAgICAgaW5jbHVkaW5nIHBvcnRpb25zIHRoZXJlb2YuCisKKyAgICAgMS40LiAiRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gTWVjaGFuaXNtIiBtZWFucyBhIG1lY2hhbmlzbSBnZW5lcmFsbHkKKyAgICAgYWNjZXB0ZWQgaW4gdGhlIHNvZnR3YXJlIGRldmVsb3BtZW50IGNvbW11bml0eSBmb3IgdGhlIGVsZWN0cm9uaWMKKyAgICAgdHJhbnNmZXIgb2YgZGF0YS4KKworICAgICAxLjUuICJFeGVjdXRhYmxlIiBtZWFucyBDb3ZlcmVkIENvZGUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UKKyAgICAgQ29kZS4KKworICAgICAxLjYuICJJbml0aWFsIERldmVsb3BlciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IGlkZW50aWZpZWQKKyAgICAgYXMgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdAorICAgICBBLgorCisgICAgIDEuNy4gIkxhcmdlciBXb3JrIiBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yCisgICAgIHBvcnRpb25zIHRoZXJlb2Ygd2l0aCBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgIDEuOC4gIkxpY2Vuc2UiIG1lYW5zIHRoaXMgZG9jdW1lbnQuCisKKyAgICAgMS44LjEuICJMaWNlbnNhYmxlIiBtZWFucyBoYXZpbmcgdGhlIHJpZ2h0IHRvIGdyYW50LCB0byB0aGUgbWF4aW11bQorICAgICBleHRlbnQgcG9zc2libGUsIHdoZXRoZXIgYXQgdGhlIHRpbWUgb2YgdGhlIGluaXRpYWwgZ3JhbnQgb3IKKyAgICAgc3Vic2VxdWVudGx5IGFjcXVpcmVkLCBhbnkgYW5kIGFsbCBvZiB0aGUgcmlnaHRzIGNvbnZleWVkIGhlcmVpbi4KKworICAgICAxLjkuICJNb2RpZmljYXRpb25zIiBtZWFucyBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUKKyAgICAgc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW55IHByZXZpb3VzCisgICAgIE1vZGlmaWNhdGlvbnMuIFdoZW4gQ292ZXJlZCBDb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhCisgICAgIE1vZGlmaWNhdGlvbiBpczoKKyAgICAgICAgICBBLiBBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlCisgICAgICAgICAgY29udGFpbmluZyBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCisKKyAgICAgICAgICBCLiBBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvcgorICAgICAgICAgIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCisKKyAgICAgMS4xMC4gIk9yaWdpbmFsIENvZGUiIG1lYW5zIFNvdXJjZSBDb2RlIG9mIGNvbXB1dGVyIHNvZnR3YXJlIGNvZGUKKyAgICAgd2hpY2ggaXMgZGVzY3JpYmVkIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkgRXhoaWJpdCBBIGFzCisgICAgIE9yaWdpbmFsIENvZGUsIGFuZCB3aGljaCwgYXQgdGhlIHRpbWUgb2YgaXRzIHJlbGVhc2UgdW5kZXIgdGhpcworICAgICBMaWNlbnNlIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UuCisKKyAgICAgMS4xMC4xLiAiUGF0ZW50IENsYWltcyIgbWVhbnMgYW55IHBhdGVudCBjbGFpbShzKSwgbm93IG93bmVkIG9yCisgICAgIGhlcmVhZnRlciBhY3F1aXJlZCwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgIG1ldGhvZCwgcHJvY2VzcywKKyAgICAgYW5kIGFwcGFyYXR1cyBjbGFpbXMsIGluIGFueSBwYXRlbnQgTGljZW5zYWJsZSBieSBncmFudG9yLgorCisgICAgIDEuMTEuICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBDb3ZlcmVkIENvZGUgZm9yCisgICAgIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LCBpbmNsdWRpbmcgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMKKyAgICAgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sCisgICAgIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gRXhlY3V0YWJsZSwgb3Igc291cmNlIGNvZGUKKyAgICAgZGlmZmVyZW50aWFsIGNvbXBhcmlzb25zIGFnYWluc3QgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFub3RoZXIKKyAgICAgd2VsbCBrbm93biwgYXZhaWxhYmxlIENvdmVyZWQgQ29kZSBvZiB0aGUgQ29udHJpYnV0b3IncyBjaG9pY2UuIFRoZQorICAgICBTb3VyY2UgQ29kZSBjYW4gYmUgaW4gYSBjb21wcmVzc2VkIG9yIGFyY2hpdmFsIGZvcm0sIHByb3ZpZGVkIHRoZQorICAgICBhcHByb3ByaWF0ZSBkZWNvbXByZXNzaW9uIG9yIGRlLWFyY2hpdmluZyBzb2Z0d2FyZSBpcyB3aWRlbHkgYXZhaWxhYmxlCisgICAgIGZvciBubyBjaGFyZ2UuCisKKyAgICAgMS4xMi4gIllvdSIgKG9yICJZb3VyIikgIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkKKyAgICAgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzCisgICAgIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXNzdWVkIHVuZGVyIFNlY3Rpb24gNi4xLgorICAgICBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzCisgICAgIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YKKyAgICAgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LAorICAgICB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkKKyAgICAgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIG1vcmUgdGhhbiBmaWZ0eSBwZXJjZW50CisgICAgICg1MCUpIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaAorICAgICBlbnRpdHkuCisKKzIuIFNvdXJjZSBDb2RlIExpY2Vuc2UuCisKKyAgICAgMi4xLiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgR3JhbnQuCisgICAgIFRoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwKKyAgICAgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eQorICAgICBjbGFpbXM6CisgICAgICAgICAgKGEpICB1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvcgorICAgICAgICAgIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBJbml0aWFsIERldmVsb3BlciB0byB1c2UsIHJlcHJvZHVjZSwKKyAgICAgICAgICBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsCisgICAgICAgICAgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikgd2l0aCBvciB3aXRob3V0IE1vZGlmaWNhdGlvbnMsIGFuZC9vcgorICAgICAgICAgIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisKKyAgICAgICAgICAoYikgdW5kZXIgUGF0ZW50cyBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nIG9yCisgICAgICAgICAgc2VsbGluZyBvZiBPcmlnaW5hbCBDb2RlLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgcHJhY3RpY2UsCisgICAgICAgICAgc2VsbCwgYW5kIG9mZmVyIGZvciBzYWxlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgdGhlCisgICAgICAgICAgT3JpZ2luYWwgQ29kZSAob3IgcG9ydGlvbnMgdGhlcmVvZikuCisKKyAgICAgICAgICAoYykgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gdGhpcyBTZWN0aW9uIDIuMShhKSBhbmQgKGIpIGFyZQorICAgICAgICAgIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBJbml0aWFsIERldmVsb3BlciBmaXJzdCBkaXN0cmlidXRlcworICAgICAgICAgIE9yaWdpbmFsIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgICAgICAgIChkKSBOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjEoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzCisgICAgICAgICAgZ3JhbnRlZDogMSkgZm9yIGNvZGUgdGhhdCBZb3UgZGVsZXRlIGZyb20gdGhlIE9yaWdpbmFsIENvZGU7IDIpCisgICAgICAgICAgc2VwYXJhdGUgZnJvbSB0aGUgT3JpZ2luYWwgQ29kZTsgIG9yIDMpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZAorICAgICAgICAgIGJ5OiBpKSB0aGUgbW9kaWZpY2F0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGlpKSB0aGUKKyAgICAgICAgICBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGRldmljZXMuCisKKyAgICAgMi4yLiBDb250cmlidXRvciBHcmFudC4KKyAgICAgU3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zLCBlYWNoIENvbnRyaWJ1dG9yCisgICAgIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UKKworICAgICAgICAgIChhKSAgdW5kZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAob3RoZXIgdGhhbiBwYXRlbnQgb3IKKyAgICAgICAgICB0cmFkZW1hcmspIExpY2Vuc2FibGUgYnkgQ29udHJpYnV0b3IsIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksCisgICAgICAgICAgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucworICAgICAgICAgIGNyZWF0ZWQgYnkgc3VjaCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZikgZWl0aGVyIG9uIGFuCisgICAgICAgICAgdW5tb2RpZmllZCBiYXNpcywgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBhcyBDb3ZlcmVkIENvZGUKKyAgICAgICAgICBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKworICAgICAgICAgIChiKSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZywgb3IKKyAgICAgICAgICBzZWxsaW5nIG9mICBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciBlaXRoZXIgYWxvbmUKKyAgICAgICAgICBhbmQvb3IgaW4gY29tYmluYXRpb24gd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMKKyAgICAgICAgICBvZiBzdWNoIGNvbWJpbmF0aW9uKSwgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZQorICAgICAgICAgIG1hZGUsIGFuZC9vciBvdGhlcndpc2UgZGlzcG9zZSBvZjogMSkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQKKyAgICAgICAgICBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZik7IGFuZCAyKSB0aGUgY29tYmluYXRpb24gb2YKKyAgICAgICAgICBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciB3aXRoIGl0cyBDb250cmlidXRvcgorICAgICAgICAgIFZlcnNpb24gKG9yIHBvcnRpb25zIG9mIHN1Y2ggY29tYmluYXRpb24pLgorCisgICAgICAgICAgKGMpIHRoZSBsaWNlbnNlcyBncmFudGVkIGluIFNlY3Rpb25zIDIuMihhKSBhbmQgMi4yKGIpIGFyZQorICAgICAgICAgIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBDb250cmlidXRvciBmaXJzdCBtYWtlcyBDb21tZXJjaWFsIFVzZSBvZgorICAgICAgICAgIHRoZSBDb3ZlcmVkIENvZGUuCisKKyAgICAgICAgICAoZCkgICAgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4yKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcworICAgICAgICAgIGdyYW50ZWQ6IDEpIGZvciBhbnkgY29kZSB0aGF0IENvbnRyaWJ1dG9yIGhhcyBkZWxldGVkIGZyb20gdGhlCisgICAgICAgICAgQ29udHJpYnV0b3IgVmVyc2lvbjsgMikgIHNlcGFyYXRlIGZyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247CisgICAgICAgICAgMykgIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogaSkgdGhpcmQgcGFydHkgbW9kaWZpY2F0aW9ucyBvZgorICAgICAgICAgIENvbnRyaWJ1dG9yIFZlcnNpb24gb3IgaWkpICB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlCisgICAgICAgICAgYnkgdGhhdCBDb250cmlidXRvciB3aXRoIG90aGVyIHNvZnR3YXJlICAoZXhjZXB0IGFzIHBhcnQgb2YgdGhlCisgICAgICAgICAgQ29udHJpYnV0b3IgVmVyc2lvbikgb3Igb3RoZXIgZGV2aWNlczsgb3IgNCkgdW5kZXIgUGF0ZW50IENsYWltcworICAgICAgICAgIGluZnJpbmdlZCBieSBDb3ZlcmVkIENvZGUgaW4gdGhlIGFic2VuY2Ugb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5CisgICAgICAgICAgdGhhdCBDb250cmlidXRvci4KKworMy4gRGlzdHJpYnV0aW9uIE9ibGlnYXRpb25zLgorCisgICAgIDMuMS4gQXBwbGljYXRpb24gb2YgTGljZW5zZS4KKyAgICAgVGhlIE1vZGlmaWNhdGlvbnMgd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUKKyAgICAgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICAgICBTZWN0aW9uIDIuMi4gVGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG1heSBiZQorICAgICBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbgorICAgICBvZiB0aGlzIExpY2Vuc2UgcmVsZWFzZWQgdW5kZXIgU2VjdGlvbiA2LjEsIGFuZCBZb3UgbXVzdCBpbmNsdWRlIGEKKyAgICAgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBZb3UKKyAgICAgZGlzdHJpYnV0ZS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUKKyAgICAgdmVyc2lvbiB0aGF0IGFsdGVycyBvciByZXN0cmljdHMgdGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzCisgICAgIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHMnIHJpZ2h0cyBoZXJldW5kZXIuIEhvd2V2ZXIsIFlvdSBtYXkgaW5jbHVkZQorICAgICBhbiBhZGRpdGlvbmFsIGRvY3VtZW50IG9mZmVyaW5nIHRoZSBhZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQgaW4KKyAgICAgU2VjdGlvbiAzLjUuCisKKyAgICAgMy4yLiBBdmFpbGFiaWxpdHkgb2YgU291cmNlIENvZGUuCisgICAgIEFueSBNb2RpZmljYXRpb24gd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBtdXN0IGJlCisgICAgIG1hZGUgYXZhaWxhYmxlIGluIFNvdXJjZSBDb2RlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZQorICAgICBlaXRoZXIgb24gdGhlIHNhbWUgbWVkaWEgYXMgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHZpYSBhbiBhY2NlcHRlZAorICAgICBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gdG8gYW55b25lIHRvIHdob20geW91IG1hZGUgYW4KKyAgICAgRXhlY3V0YWJsZSB2ZXJzaW9uIGF2YWlsYWJsZTsgYW5kIGlmIG1hZGUgYXZhaWxhYmxlIHZpYSBFbGVjdHJvbmljCisgICAgIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20sIG11c3QgcmVtYWluIGF2YWlsYWJsZSBmb3IgYXQgbGVhc3QgdHdlbHZlICgxMikKKyAgICAgbW9udGhzIGFmdGVyIHRoZSBkYXRlIGl0IGluaXRpYWxseSBiZWNhbWUgYXZhaWxhYmxlLCBvciBhdCBsZWFzdCBzaXgKKyAgICAgKDYpIG1vbnRocyBhZnRlciBhIHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGF0IHBhcnRpY3VsYXIgTW9kaWZpY2F0aW9uCisgICAgIGhhcyBiZWVuIG1hZGUgYXZhaWxhYmxlIHRvIHN1Y2ggcmVjaXBpZW50cy4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IKKyAgICAgZW5zdXJpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiByZW1haW5zIGF2YWlsYWJsZSBldmVuIGlmIHRoZQorICAgICBFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20gaXMgbWFpbnRhaW5lZCBieSBhIHRoaXJkIHBhcnR5LgorCisgICAgIDMuMy4gRGVzY3JpcHRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKyAgICAgWW91IG11c3QgY2F1c2UgYWxsIENvdmVyZWQgQ29kZSB0byB3aGljaCBZb3UgY29udHJpYnV0ZSB0byBjb250YWluIGEKKyAgICAgZmlsZSBkb2N1bWVudGluZyB0aGUgY2hhbmdlcyBZb3UgbWFkZSB0byBjcmVhdGUgdGhhdCBDb3ZlcmVkIENvZGUgYW5kCisgICAgIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuIFlvdSBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgc3RhdGVtZW50IHRoYXQKKyAgICAgdGhlIE1vZGlmaWNhdGlvbiBpcyBkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIE9yaWdpbmFsCisgICAgIENvZGUgcHJvdmlkZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBpbmNsdWRpbmcgdGhlIG5hbWUgb2YgdGhlCisgICAgIEluaXRpYWwgRGV2ZWxvcGVyIGluIChhKSB0aGUgU291cmNlIENvZGUsIGFuZCAoYikgaW4gYW55IG5vdGljZSBpbiBhbgorICAgICBFeGVjdXRhYmxlIHZlcnNpb24gb3IgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGluIHdoaWNoIFlvdSBkZXNjcmliZSB0aGUKKyAgICAgb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgQ292ZXJlZCBDb2RlLgorCisgICAgIDMuNC4gSW50ZWxsZWN0dWFsIFByb3BlcnR5IE1hdHRlcnMKKyAgICAgICAgICAoYSkgVGhpcmQgUGFydHkgQ2xhaW1zLgorICAgICAgICAgIElmIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2UgdGhhdCBhIGxpY2Vuc2UgdW5kZXIgYSB0aGlyZCBwYXJ0eSdzCisgICAgICAgICAgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBpcyByZXF1aXJlZCB0byBleGVyY2lzZSB0aGUgcmlnaHRzCisgICAgICAgICAgZ3JhbnRlZCBieSBzdWNoIENvbnRyaWJ1dG9yIHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIsCisgICAgICAgICAgQ29udHJpYnV0b3IgbXVzdCBpbmNsdWRlIGEgdGV4dCBmaWxlIHdpdGggdGhlIFNvdXJjZSBDb2RlCisgICAgICAgICAgZGlzdHJpYnV0aW9uIHRpdGxlZCAiTEVHQUwiIHdoaWNoIGRlc2NyaWJlcyB0aGUgY2xhaW0gYW5kIHRoZQorICAgICAgICAgIHBhcnR5IG1ha2luZyB0aGUgY2xhaW0gaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudCB3aWxsCisgICAgICAgICAga25vdyB3aG9tIHRvIGNvbnRhY3QuIElmIENvbnRyaWJ1dG9yIG9idGFpbnMgc3VjaCBrbm93bGVkZ2UgYWZ0ZXIKKyAgICAgICAgICB0aGUgTW9kaWZpY2F0aW9uIGlzIG1hZGUgYXZhaWxhYmxlIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMiwKKyAgICAgICAgICBDb250cmlidXRvciBzaGFsbCBwcm9tcHRseSBtb2RpZnkgdGhlIExFR0FMIGZpbGUgaW4gYWxsIGNvcGllcworICAgICAgICAgIENvbnRyaWJ1dG9yIG1ha2VzIGF2YWlsYWJsZSB0aGVyZWFmdGVyIGFuZCBzaGFsbCB0YWtlIG90aGVyIHN0ZXBzCisgICAgICAgICAgKHN1Y2ggYXMgbm90aWZ5aW5nIGFwcHJvcHJpYXRlIG1haWxpbmcgbGlzdHMgb3IgbmV3c2dyb3VwcykKKyAgICAgICAgICByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobyByZWNlaXZlZCB0aGUgQ292ZXJlZAorICAgICAgICAgIENvZGUgdGhhdCBuZXcga25vd2xlZGdlIGhhcyBiZWVuIG9idGFpbmVkLgorCisgICAgICAgICAgKGIpIENvbnRyaWJ1dG9yIEFQSXMuCisgICAgICAgICAgSWYgQ29udHJpYnV0b3IncyBNb2RpZmljYXRpb25zIGluY2x1ZGUgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcKKyAgICAgICAgICBpbnRlcmZhY2UgYW5kIENvbnRyaWJ1dG9yIGhhcyBrbm93bGVkZ2Ugb2YgcGF0ZW50IGxpY2Vuc2VzIHdoaWNoCisgICAgICAgICAgYXJlIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGltcGxlbWVudCB0aGF0IEFQSSwgQ29udHJpYnV0b3IgbXVzdAorICAgICAgICAgIGFsc28gaW5jbHVkZSB0aGlzIGluZm9ybWF0aW9uIGluIHRoZSBMRUdBTCBmaWxlLgorCisgICAgICAgICAgICAgICAoYykgICAgUmVwcmVzZW50YXRpb25zLgorICAgICAgICAgIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCwgZXhjZXB0IGFzIGRpc2Nsb3NlZCBwdXJzdWFudCB0bworICAgICAgICAgIFNlY3Rpb24gMy40KGEpIGFib3ZlLCBDb250cmlidXRvciBiZWxpZXZlcyB0aGF0IENvbnRyaWJ1dG9yJ3MKKyAgICAgICAgICBNb2RpZmljYXRpb25zIGFyZSBDb250cmlidXRvcidzIG9yaWdpbmFsIGNyZWF0aW9uKHMpIGFuZC9vcgorICAgICAgICAgIENvbnRyaWJ1dG9yIGhhcyBzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudCB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5CisgICAgICAgICAgdGhpcyBMaWNlbnNlLgorCisgICAgIDMuNS4gUmVxdWlyZWQgTm90aWNlcy4KKyAgICAgWW91IG11c3QgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlCisgICAgIENvZGUuICBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHN1Y2ggbm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UKKyAgICAgQ29kZSBmaWxlIGR1ZSB0byBpdHMgc3RydWN0dXJlLCB0aGVuIFlvdSBtdXN0IGluY2x1ZGUgc3VjaCBub3RpY2UgaW4gYQorICAgICBsb2NhdGlvbiAoc3VjaCBhcyBhIHJlbGV2YW50IGRpcmVjdG9yeSkgd2hlcmUgYSB1c2VyIHdvdWxkIGJlIGxpa2VseQorICAgICB0byBsb29rIGZvciBzdWNoIGEgbm90aWNlLiAgSWYgWW91IGNyZWF0ZWQgb25lIG9yIG1vcmUgTW9kaWZpY2F0aW9uKHMpCisgICAgIFlvdSBtYXkgYWRkIHlvdXIgbmFtZSBhcyBhIENvbnRyaWJ1dG9yIHRvIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluCisgICAgIEV4aGliaXQgQS4gIFlvdSBtdXN0IGFsc28gZHVwbGljYXRlIHRoaXMgTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbgorICAgICBmb3IgdGhlIFNvdXJjZSBDb2RlIHdoZXJlIFlvdSBkZXNjcmliZSByZWNpcGllbnRzJyByaWdodHMgb3Igb3duZXJzaGlwCisgICAgIHJpZ2h0cyByZWxhdGluZyB0byBDb3ZlcmVkIENvZGUuICBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvCisgICAgIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5CisgICAgIG9ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBDb2RlLiBIb3dldmVyLCBZb3UKKyAgICAgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmLCBhbmQgbm90IG9uIGJlaGFsZiBvZiB0aGUgSW5pdGlhbAorICAgICBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhbgorICAgICBhbnkgc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzCisgICAgIG9mZmVyZWQgYnkgWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwKKyAgICAgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUKKyAgICAgSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwKKyAgICAgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSB0ZXJtcyBZb3Ugb2ZmZXIuCisKKyAgICAgMy42LiBEaXN0cmlidXRpb24gb2YgRXhlY3V0YWJsZSBWZXJzaW9ucy4KKyAgICAgWW91IG1heSBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBpbiBFeGVjdXRhYmxlIGZvcm0gb25seSBpZiB0aGUKKyAgICAgcmVxdWlyZW1lbnRzIG9mIFNlY3Rpb24gMy4xLTMuNSBoYXZlIGJlZW4gbWV0IGZvciB0aGF0IENvdmVyZWQgQ29kZSwKKyAgICAgYW5kIGlmIFlvdSBpbmNsdWRlIGEgbm90aWNlIHN0YXRpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBvZgorICAgICB0aGUgQ292ZXJlZCBDb2RlIGlzIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLAorICAgICBpbmNsdWRpbmcgYSBkZXNjcmlwdGlvbiBvZiBob3cgYW5kIHdoZXJlIFlvdSBoYXZlIGZ1bGZpbGxlZCB0aGUKKyAgICAgb2JsaWdhdGlvbnMgb2YgU2VjdGlvbiAzLjIuIFRoZSBub3RpY2UgbXVzdCBiZSBjb25zcGljdW91c2x5IGluY2x1ZGVkCisgICAgIGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uLCByZWxhdGVkIGRvY3VtZW50YXRpb24gb3IKKyAgICAgY29sbGF0ZXJhbCBpbiB3aGljaCBZb3UgZGVzY3JpYmUgcmVjaXBpZW50cycgcmlnaHRzIHJlbGF0aW5nIHRvIHRoZQorICAgICBDb3ZlcmVkIENvZGUuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIG9mIENvdmVyZWQKKyAgICAgQ29kZSBvciBvd25lcnNoaXAgcmlnaHRzIHVuZGVyIGEgbGljZW5zZSBvZiBZb3VyIGNob2ljZSwgd2hpY2ggbWF5CisgICAgIGNvbnRhaW4gdGVybXMgZGlmZmVyZW50IGZyb20gdGhpcyBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IFlvdSBhcmUgaW4KKyAgICAgY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UgZm9yIHRoZQorICAgICBFeGVjdXRhYmxlIHZlcnNpb24gZG9lcyBub3QgYXR0ZW1wdCB0byBsaW1pdCBvciBhbHRlciB0aGUgcmVjaXBpZW50J3MKKyAgICAgcmlnaHRzIGluIHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIGZyb20gdGhlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcworICAgICBMaWNlbnNlLiBJZiBZb3UgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIHVuZGVyIGEgZGlmZmVyZW50CisgICAgIGxpY2Vuc2UgWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYXQgYW55IHRlcm1zIHdoaWNoIGRpZmZlcgorICAgICBmcm9tIHRoaXMgTGljZW5zZSBhcmUgb2ZmZXJlZCBieSBZb3UgYWxvbmUsIG5vdCBieSB0aGUgSW5pdGlhbAorICAgICBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUKKyAgICAgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5CisgICAgIHRoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIGFueSBzdWNoCisgICAgIHRlcm1zIFlvdSBvZmZlci4KKworICAgICAzLjcuIExhcmdlciBXb3Jrcy4KKyAgICAgWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZCBDb2RlIHdpdGggb3RoZXIgY29kZQorICAgICBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyCisgICAgIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUKKyAgICAgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBDb2RlLgorCis0LiBJbmFiaWxpdHkgdG8gQ29tcGx5IER1ZSB0byBTdGF0dXRlIG9yIFJlZ3VsYXRpb24uCisKKyAgICAgSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcworICAgICBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgQ292ZXJlZCBDb2RlIGR1ZSB0bworICAgICBzdGF0dXRlLCBqdWRpY2lhbCBvcmRlciwgb3IgcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGgKKyAgICAgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCAoYikKKyAgICAgZGVzY3JpYmUgdGhlIGxpbWl0YXRpb25zIGFuZCB0aGUgY29kZSB0aGV5IGFmZmVjdC4gU3VjaCBkZXNjcmlwdGlvbgorICAgICBtdXN0IGJlIGluY2x1ZGVkIGluIHRoZSBMRUdBTCBmaWxlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNCBhbmQgbXVzdAorICAgICBiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mIHRoZSBTb3VyY2UgQ29kZS4gRXhjZXB0IHRvIHRoZQorICAgICBleHRlbnQgcHJvaGliaXRlZCBieSBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHN1Y2ggZGVzY3JpcHRpb24gbXVzdCBiZQorICAgICBzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEgcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8KKyAgICAgdW5kZXJzdGFuZCBpdC4KKworNS4gQXBwbGljYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorCisgICAgIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGNvZGUgdG8gd2hpY2ggdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhhcworICAgICBhdHRhY2hlZCB0aGUgbm90aWNlIGluIEV4aGliaXQgQSBhbmQgdG8gcmVsYXRlZCBDb3ZlcmVkIENvZGUuCisKKzYuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLgorCisgICAgIDYuMS4gTmV3IFZlcnNpb25zLgorICAgICBOZXRzY2FwZSBDb21tdW5pY2F0aW9ucyBDb3Jwb3JhdGlvbiAoIk5ldHNjYXBlIikgbWF5IHB1Ymxpc2ggcmV2aXNlZAorICAgICBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIHRoZSBMaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLiBFYWNoIHZlcnNpb24KKyAgICAgd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLgorCisgICAgIDYuMi4gRWZmZWN0IG9mIE5ldyBWZXJzaW9ucy4KKyAgICAgT25jZSBDb3ZlcmVkIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZQorICAgICBMaWNlbnNlLCBZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQKKyAgICAgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBDb3ZlcmVkIENvZGUgdW5kZXIgdGhlIHRlcm1zCisgICAgIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IE5ldHNjYXBlLiBObyBvbmUKKyAgICAgb3RoZXIgdGhhbiBOZXRzY2FwZSBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0bworICAgICBDb3ZlcmVkIENvZGUgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCisKKyAgICAgNi4zLiBEZXJpdmF0aXZlIFdvcmtzLgorICAgICBJZiBZb3UgY3JlYXRlIG9yIHVzZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlICh3aGljaCB5b3UgbWF5CisgICAgIG9ubHkgZG8gaW4gb3JkZXIgdG8gYXBwbHkgaXQgdG8gY29kZSB3aGljaCBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUKKyAgICAgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlKSwgWW91IG11c3QgKGEpIHJlbmFtZSBZb3VyIGxpY2Vuc2Ugc28gdGhhdAorICAgICB0aGUgcGhyYXNlcyAiTW96aWxsYSIsICJNT1pJTExBUEwiLCAiTU9aUEwiLCAiTmV0c2NhcGUiLAorICAgICAiTVBMIiwgIk5QTCIgb3IgYW55IGNvbmZ1c2luZ2x5IHNpbWlsYXIgcGhyYXNlIGRvIG5vdCBhcHBlYXIgaW4geW91cgorICAgICBsaWNlbnNlIChleGNlcHQgdG8gbm90ZSB0aGF0IHlvdXIgbGljZW5zZSBkaWZmZXJzIGZyb20gdGhpcyBMaWNlbnNlKQorICAgICBhbmQgKGIpIG90aGVyd2lzZSBtYWtlIGl0IGNsZWFyIHRoYXQgWW91ciB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlCisgICAgIGNvbnRhaW5zIHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlIGFuZAorICAgICBOZXRzY2FwZSBQdWJsaWMgTGljZW5zZS4gKEZpbGxpbmcgaW4gdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwKKyAgICAgRGV2ZWxvcGVyLCBPcmlnaW5hbCBDb2RlIG9yIENvbnRyaWJ1dG9yIGluIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluCisgICAgIEV4aGliaXQgQSBzaGFsbCBub3Qgb2YgdGhlbXNlbHZlcyBiZSBkZWVtZWQgdG8gYmUgbW9kaWZpY2F0aW9ucyBvZgorICAgICB0aGlzIExpY2Vuc2UuKQorCis3LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLgorCisgICAgIENPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gIkFTIElTIiBCQVNJUywKKyAgICAgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsCisgICAgIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBDT1ZFUkVEIENPREUgSVMgRlJFRSBPRgorICAgICBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuCisgICAgIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIENPVkVSRUQgQ09ERQorICAgICBJUyBXSVRIIFlPVS4gU0hPVUxEIEFOWSBDT1ZFUkVEIENPREUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULAorICAgICBZT1UgKE5PVCBUSEUgSU5JVElBTCBERVZFTE9QRVIgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFCisgICAgIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBUSElTIERJU0NMQUlNRVIKKyAgICAgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YKKyAgICAgQU5ZIENPVkVSRUQgQ09ERSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLgorCis4LiBURVJNSU5BVElPTi4KKworICAgICA4LjEuICBUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUKKyAgICAgYXV0b21hdGljYWxseSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZQorICAgICBzdWNoIGJyZWFjaCB3aXRoaW4gMzAgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBBbGwKKyAgICAgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaCBhcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbAorICAgICBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyCisgICAgIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlCisgICAgIHNoYWxsIHN1cnZpdmUuCisKKyAgICAgOC4yLiAgSWYgWW91IGluaXRpYXRlIGxpdGlnYXRpb24gYnkgYXNzZXJ0aW5nIGEgcGF0ZW50IGluZnJpbmdlbWVudAorICAgICBjbGFpbSAoZXhjbHVkaW5nIGRlY2xhdG9yeSBqdWRnbWVudCBhY3Rpb25zKSBhZ2FpbnN0IEluaXRpYWwgRGV2ZWxvcGVyCisgICAgIG9yIGEgQ29udHJpYnV0b3IgKHRoZSBJbml0aWFsIERldmVsb3BlciBvciBDb250cmlidXRvciBhZ2FpbnN0IHdob20KKyAgICAgWW91IGZpbGUgc3VjaCBhY3Rpb24gaXMgcmVmZXJyZWQgdG8gYXMgIlBhcnRpY2lwYW50IikgIGFsbGVnaW5nIHRoYXQ6CisKKyAgICAgKGEpICBzdWNoIFBhcnRpY2lwYW50J3MgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvciBpbmRpcmVjdGx5CisgICAgIGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuIGFueSBhbmQgYWxsIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2gKKyAgICAgUGFydGljaXBhbnQgdG8gWW91IHVuZGVyIFNlY3Rpb25zIDIuMSBhbmQvb3IgMi4yIG9mIHRoaXMgTGljZW5zZQorICAgICBzaGFsbCwgdXBvbiA2MCBkYXlzIG5vdGljZSBmcm9tIFBhcnRpY2lwYW50IHRlcm1pbmF0ZSBwcm9zcGVjdGl2ZWx5LAorICAgICB1bmxlc3MgaWYgd2l0aGluIDYwIGRheXMgYWZ0ZXIgcmVjZWlwdCBvZiBub3RpY2UgWW91IGVpdGhlcjogKGkpCisgICAgIGFncmVlIGluIHdyaXRpbmcgdG8gcGF5IFBhcnRpY2lwYW50IGEgbXV0dWFsbHkgYWdyZWVhYmxlIHJlYXNvbmFibGUKKyAgICAgcm95YWx0eSBmb3IgWW91ciBwYXN0IGFuZCBmdXR1cmUgdXNlIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSBzdWNoCisgICAgIFBhcnRpY2lwYW50LCBvciAoaWkpIHdpdGhkcmF3IFlvdXIgbGl0aWdhdGlvbiBjbGFpbSB3aXRoIHJlc3BlY3QgdG8KKyAgICAgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gYWdhaW5zdCBzdWNoIFBhcnRpY2lwYW50LiAgSWYgd2l0aGluIDYwIGRheXMKKyAgICAgb2Ygbm90aWNlLCBhIHJlYXNvbmFibGUgcm95YWx0eSBhbmQgcGF5bWVudCBhcnJhbmdlbWVudCBhcmUgbm90CisgICAgIG11dHVhbGx5IGFncmVlZCB1cG9uIGluIHdyaXRpbmcgYnkgdGhlIHBhcnRpZXMgb3IgdGhlIGxpdGlnYXRpb24gY2xhaW0KKyAgICAgaXMgbm90IHdpdGhkcmF3biwgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlcgorICAgICBTZWN0aW9ucyAyLjEgYW5kL29yIDIuMiBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSBhdCB0aGUgZXhwaXJhdGlvbiBvZgorICAgICB0aGUgNjAgZGF5IG5vdGljZSBwZXJpb2Qgc3BlY2lmaWVkIGFib3ZlLgorCisgICAgIChiKSAgYW55IHNvZnR3YXJlLCBoYXJkd2FyZSwgb3IgZGV2aWNlLCBvdGhlciB0aGFuIHN1Y2ggUGFydGljaXBhbnQncworICAgICBDb250cmlidXRvciBWZXJzaW9uLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuCisgICAgIGFueSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgc3VjaCBQYXJ0aWNpcGFudCB1bmRlciBTZWN0aW9ucyAyLjEoYikKKyAgICAgYW5kIDIuMihiKSBhcmUgcmV2b2tlZCBlZmZlY3RpdmUgYXMgb2YgdGhlIGRhdGUgWW91IGZpcnN0IG1hZGUsIHVzZWQsCisgICAgIHNvbGQsIGRpc3RyaWJ1dGVkLCBvciBoYWQgbWFkZSwgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQKKyAgICAgUGFydGljaXBhbnQuCisKKyAgICAgOC4zLiAgSWYgWW91IGFzc2VydCBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gYWdhaW5zdCBQYXJ0aWNpcGFudAorICAgICBhbGxlZ2luZyB0aGF0IHN1Y2ggUGFydGljaXBhbnQncyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yCisgICAgIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQgd2hlcmUgc3VjaCBjbGFpbSBpcyByZXNvbHZlZCAoc3VjaCBhcworICAgICBieSBsaWNlbnNlIG9yIHNldHRsZW1lbnQpIHByaW9yIHRvIHRoZSBpbml0aWF0aW9uIG9mIHBhdGVudAorICAgICBpbmZyaW5nZW1lbnQgbGl0aWdhdGlvbiwgdGhlbiB0aGUgcmVhc29uYWJsZSB2YWx1ZSBvZiB0aGUgbGljZW5zZXMKKyAgICAgZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIgc2hhbGwgYmUgdGFrZW4KKyAgICAgaW50byBhY2NvdW50IGluIGRldGVybWluaW5nIHRoZSBhbW91bnQgb3IgdmFsdWUgb2YgYW55IHBheW1lbnQgb3IKKyAgICAgbGljZW5zZS4KKworICAgICA4LjQuICBJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgOC4xIG9yIDguMiBhYm92ZSwKKyAgICAgYWxsIGVuZCB1c2VyIGxpY2Vuc2UgYWdyZWVtZW50cyAoZXhjbHVkaW5nIGRpc3RyaWJ1dG9ycyBhbmQgcmVzZWxsZXJzKQorICAgICB3aGljaCBoYXZlIGJlZW4gdmFsaWRseSBncmFudGVkIGJ5IFlvdSBvciBhbnkgZGlzdHJpYnV0b3IgaGVyZXVuZGVyCisgICAgIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24uCisKKzkuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLgorCisgICAgIFVOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBUT1JUCisgICAgIChJTkNMVURJTkcgTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsIFNIQUxMIFlPVSwgVEhFIElOSVRJQUwKKyAgICAgREVWRUxPUEVSLCBBTlkgT1RIRVIgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBDT1ZFUkVEIENPREUsCisgICAgIE9SIEFOWSBTVVBQTElFUiBPRiBBTlkgT0YgU1VDSCBQQVJUSUVTLCBCRSBMSUFCTEUgVE8gQU5ZIFBFUlNPTiBGT1IKKyAgICAgQU5ZIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZCisgICAgIENIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwKKyAgICAgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIKKyAgICAgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBBUlRZIFNIQUxMIEhBVkUgQkVFTgorICAgICBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBUSElTIExJTUlUQVRJT04gT0YKKyAgICAgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWQorICAgICBSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZJ1MgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UIEFQUExJQ0FCTEUgTEFXCisgICAgIFBST0hJQklUUyBTVUNIIExJTUlUQVRJT04uIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFCisgICAgIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTworICAgICBUSElTIEVYQ0xVU0lPTiBBTkQgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworMTAuIFUuUy4gR09WRVJOTUVOVCBFTkQgVVNFUlMuCisKKyAgICAgVGhlIENvdmVyZWQgQ29kZSBpcyBhICJjb21tZXJjaWFsIGl0ZW0sIiBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbgorICAgICA0OCBDLkYuUi4gMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2YgImNvbW1lcmNpYWwgY29tcHV0ZXIKKyAgICAgc29mdHdhcmUiIGFuZCAiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBkb2N1bWVudGF0aW9uLCIgYXMgc3VjaAorICAgICB0ZXJtcyBhcmUgdXNlZCBpbiA0OCBDLkYuUi4gMTIuMjEyIChTZXB0LiAxOTk1KS4gQ29uc2lzdGVudCB3aXRoIDQ4CisgICAgIEMuRi5SLiAxMi4yMTIgYW5kIDQ4IEMuRi5SLiAyMjcuNzIwMi0xIHRocm91Z2ggMjI3LjcyMDItNCAoSnVuZSAxOTk1KSwKKyAgICAgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIENvZGUgd2l0aCBvbmx5IHRob3NlCisgICAgIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLgorCisxMS4gTUlTQ0VMTEFORU9VUy4KKworICAgICBUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgc3ViamVjdAorICAgICBtYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlCisgICAgIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudAorICAgICBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5CisgICAgIENhbGlmb3JuaWEgbGF3IHByb3Zpc2lvbnMgKGV4Y2VwdCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3LCBpZgorICAgICBhbnksIHByb3ZpZGVzIG90aGVyd2lzZSksIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuCisgICAgIFdpdGggcmVzcGVjdCB0byBkaXNwdXRlcyBpbiB3aGljaCBhdCBsZWFzdCBvbmUgcGFydHkgaXMgYSBjaXRpemVuIG9mLAorICAgICBvciBhbiBlbnRpdHkgY2hhcnRlcmVkIG9yIHJlZ2lzdGVyZWQgdG8gZG8gYnVzaW5lc3MgaW4gdGhlIFVuaXRlZAorICAgICBTdGF0ZXMgb2YgQW1lcmljYSwgYW55IGxpdGlnYXRpb24gcmVsYXRpbmcgdG8gdGhpcyBMaWNlbnNlIHNoYWxsIGJlCisgICAgIHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgRmVkZXJhbCBDb3VydHMgb2YgdGhlIE5vcnRoZXJuCisgICAgIERpc3RyaWN0IG9mIENhbGlmb3JuaWEsIHdpdGggdmVudWUgbHlpbmcgaW4gU2FudGEgQ2xhcmEgQ291bnR5LAorICAgICBDYWxpZm9ybmlhLCB3aXRoIHRoZSBsb3NpbmcgcGFydHkgcmVzcG9uc2libGUgZm9yIGNvc3RzLCBpbmNsdWRpbmcKKyAgICAgd2l0aG91dCBsaW1pdGF0aW9uLCBjb3VydCBjb3N0cyBhbmQgcmVhc29uYWJsZSBhdHRvcm5leXMnIGZlZXMgYW5kCisgICAgIGV4cGVuc2VzLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24KKyAgICAgQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4KKyAgICAgQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3QKKyAgICAgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgc2hhbGwgbm90IGFwcGx5IHRvIHRoaXMKKyAgICAgTGljZW5zZS4KKworMTIuIFJFU1BPTlNJQklMSVRZIEZPUiBDTEFJTVMuCisKKyAgICAgQXMgYmV0d2VlbiBJbml0aWFsIERldmVsb3BlciBhbmQgdGhlIENvbnRyaWJ1dG9ycywgZWFjaCBwYXJ0eSBpcworICAgICByZXNwb25zaWJsZSBmb3IgY2xhaW1zIGFuZCBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksCisgICAgIG91dCBvZiBpdHMgdXRpbGl6YXRpb24gb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgWW91IGFncmVlIHRvCisgICAgIHdvcmsgd2l0aCBJbml0aWFsIERldmVsb3BlciBhbmQgQ29udHJpYnV0b3JzIHRvIGRpc3RyaWJ1dGUgc3VjaAorICAgICByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuIE5vdGhpbmcgaGVyZWluIGlzIGludGVuZGVkIG9yCisgICAgIHNoYWxsIGJlIGRlZW1lZCB0byBjb25zdGl0dXRlIGFueSBhZG1pc3Npb24gb2YgbGlhYmlsaXR5LgorCisxMy4gTVVMVElQTEUtTElDRU5TRUQgQ09ERS4KKworICAgICBJbml0aWFsIERldmVsb3BlciBtYXkgZGVzaWduYXRlIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkIENvZGUgYXMKKyAgICAgIk11bHRpcGxlLUxpY2Vuc2VkIi4gICJNdWx0aXBsZS1MaWNlbnNlZCIgbWVhbnMgdGhhdCB0aGUgSW5pdGlhbAorICAgICBEZXZlbG9wZXIgcGVybWl0cyB5b3UgdG8gdXRpbGl6ZSBwb3J0aW9ucyBvZiB0aGUgQ292ZXJlZCBDb2RlIHVuZGVyCisgICAgIFlvdXIgY2hvaWNlIG9mIHRoZSBOUEwgb3IgdGhlIGFsdGVybmF0aXZlIGxpY2Vuc2VzLCBpZiBhbnksIHNwZWNpZmllZAorICAgICBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIGZpbGUgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4KKworRVhISUJJVCBBIC1Nb3ppbGxhIFB1YmxpYyBMaWNlbnNlLgorCisgICAgIGBgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZQorICAgICBWZXJzaW9uIDEuMSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluCisgICAgIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CisgICAgIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvTVBMLworCisgICAgIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIKKyAgICAgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUKKyAgICAgTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zCisgICAgIHVuZGVyIHRoZSBMaWNlbnNlLgorCisgICAgIFRoZSBPcmlnaW5hbCBDb2RlIGlzIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLgorCisgICAgIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBfX19fX19fX19fX19fX19fX19fX19fX18uCisgICAgIFBvcnRpb25zIGNyZWF0ZWQgYnkgX19fX19fX19fX19fX19fX19fX19fXyBhcmUgQ29weXJpZ2h0IChDKSBfX19fX18KKyAgICAgX19fX19fX19fX19fX19fX19fX19fX18uIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyAgICAgQ29udHJpYnV0b3Iocyk6IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLgorCisgICAgIEFsdGVybmF0aXZlbHksIHRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgbWF5IGJlIHVzZWQgdW5kZXIgdGhlIHRlcm1zCisgICAgIG9mIHRoZSBfX19fXyBsaWNlbnNlICh0aGUgICJbX19fXSBMaWNlbnNlIiksIGluIHdoaWNoIGNhc2UgdGhlCisgICAgIHByb3Zpc2lvbnMgb2YgW19fX19fX10gTGljZW5zZSBhcmUgYXBwbGljYWJsZSBpbnN0ZWFkIG9mIHRob3NlCisgICAgIGFib3ZlLiAgSWYgeW91IHdpc2ggdG8gYWxsb3cgdXNlIG9mIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUgb25seQorICAgICB1bmRlciB0aGUgdGVybXMgb2YgdGhlIFtfX19fXSBMaWNlbnNlIGFuZCBub3QgdG8gYWxsb3cgb3RoZXJzIHRvIHVzZQorICAgICB5b3VyIHZlcnNpb24gb2YgdGhpcyBmaWxlIHVuZGVyIHRoZSBNUEwsIGluZGljYXRlIHlvdXIgZGVjaXNpb24gYnkKKyAgICAgZGVsZXRpbmcgIHRoZSBwcm92aXNpb25zIGFib3ZlIGFuZCByZXBsYWNlICB0aGVtIHdpdGggdGhlIG5vdGljZSBhbmQKKyAgICAgb3RoZXIgcHJvdmlzaW9ucyByZXF1aXJlZCBieSB0aGUgW19fX10gTGljZW5zZS4gIElmIHlvdSBkbyBub3QgZGVsZXRlCisgICAgIHRoZSBwcm92aXNpb25zIGFib3ZlLCBhIHJlY2lwaWVudCBtYXkgdXNlIHlvdXIgdmVyc2lvbiBvZiB0aGlzIGZpbGUKKyAgICAgdW5kZXIgZWl0aGVyIHRoZSBNUEwgb3IgdGhlIFtfX19dIExpY2Vuc2UuIgorCisgICAgIFtOT1RFOiBUaGUgdGV4dCBvZiB0aGlzIEV4aGliaXQgQSBtYXkgZGlmZmVyIHNsaWdodGx5IGZyb20gdGhlIHRleHQgb2YKKyAgICAgdGhlIG5vdGljZXMgaW4gdGhlIFNvdXJjZSBDb2RlIGZpbGVzIG9mIHRoZSBPcmlnaW5hbCBDb2RlLiBZb3Ugc2hvdWxkCisgICAgIHVzZSB0aGUgdGV4dCBvZiB0aGlzIEV4aGliaXQgQSByYXRoZXIgdGhhbiB0aGUgdGV4dCBmb3VuZCBpbiB0aGUKKyAgICAgT3JpZ2luYWwgQ29kZSBTb3VyY2UgQ29kZSBmb3IgWW91ciBNb2RpZmljYXRpb25zLl0KKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvTlRFRF9GT05UIGIvbGljZW5zZXMvTlRFRF9GT05UCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwMDg5YTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9OVEVEX0ZPTlQKQEAgLTAsMCArMSwyMSBAQAorVGhlIGZvbGxvd2luZyBleGNlcHRpb24gYXBwbGllcyB0byBhbGwgaW5jbHVkZWQgZm9udHM6CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKKyAgQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgaWYgeW91IGNyZWF0ZSBhIGRvY3VtZW50IHdoaWNoIHVzZXMgdGhpcyBmb250LCBhbmQKKyAgZW1iZWQgdGhpcyBmb250IG9yIHVuYWx0ZXJlZCBwb3J0aW9ucyBvZiB0aGlzIGZvbnQgaW50byB0aGUgZG9jdW1lbnQsIHRoaXMgZm9udAorICBkb2VzIG5vdCBieSBpdHNlbGYgY2F1c2UgdGhlIHJlc3VsdGluZyBkb2N1bWVudCB0byBiZSBjb3ZlcmVkIGJ5IHRoZSBHTlUKKyAgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gVGhpcyBleGNlcHRpb24gZG9lcyBub3QgaG93ZXZlciBpbnZhbGlkYXRlIGFueSBvdGhlcgorICByZWFzb25zIHdoeSB0aGUgZG9jdW1lbnQgbWlnaHQgYmUgY292ZXJlZCBieSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIElmCisgIHlvdSBtb2RpZnkgdGhpcyBmb250LCB5b3UgbWF5IGV4dGVuZCB0aGlzIGV4Y2VwdGlvbiB0byB5b3VyIHZlcnNpb24gb2YgdGhlCisgIGZvbnQsIGJ1dCB5b3UgYXJlIG5vdCBvYmxpZ2F0ZWQgdG8gZG8gc28uIElmIHlvdSBkbyBub3Qgd2lzaCB0byBkbyBzbywgZGVsZXRlCisgIHRoaXMgZXhjZXB0aW9uIHN0YXRlbWVudCBmcm9tIHlvdXIgdmVyc2lvbi4gCisKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKgkJCQkJCQkJCQkJKi8KKy8qICBDb3B5cmlnaHQgICBKb2VyZyBBbmRlcnMsIFRVIENoZW1uaXR6LCBGYWt1bHRhZXQgZnVlciBJbmZvcm1hdGlrLCBHRVJNQU5ZICAgICAgICAgICAqLworLyoJCWphQGluZm9ybWF0aWsudHUtY2hlbW5pdHouZGUJCQkJCQkqLworLyoJCQkJCQkJCQkJCSovCisvKgkJCQkJCQkJCQkJKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvTlZJRElBIGIvbGljZW5zZXMvTlZJRElBCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBiMGM3MGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9OVklESUEKQEAgLTAsMCArMSwxMjkgQEAKK0xpY2Vuc2UgRm9yIEN1c3RvbWVyIFVzZSBvZiBOVklESUEgU29mdHdhcmUKKworSU1QT1JUQU5UIE5PVElDRSAtLSBSRUFEIENBUkVGVUxMWTogVGhpcyBMaWNlbnNlIEZvciBDdXN0b21lciBVc2Ugb2YKK05WSURJQSBTb2Z0d2FyZSAoIkxJQ0VOU0UiKSBpcyB0aGUgYWdyZWVtZW50IHdoaWNoIGdvdmVybnMgdXNlIG9mIHRoZSBzb2Z0d2FyZSBvZgorTlZJRElBIENvcnBvcmF0aW9uIGFuZCBpdHMgc3Vic2lkaWFyaWVzICgiTlZJRElBIikgZG93bmxvYWRhYmxlIGhlcmVmcm9tLAoraW5jbHVkaW5nIGNvbXB1dGVyIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIHByaW50ZWQgbWF0ZXJpYWxzICgiU09GVFdBUkUiKS4KK0J5IGRvd25sb2FkaW5nLCBpbnN0YWxsaW5nLCBjb3B5aW5nLCBvciBvdGhlcndpc2UgdXNpbmcgdGhlIFNPRlRXQVJFLCB5b3UKK2FncmVlIHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExJQ0VOU0UuICBJZiB5b3UgZG8gbm90IGFncmVlIHRvIHRoZQordGVybXMgb2YgdGhpcyBMSUNFTlNFLCBkbyBub3QgZG93bmxvYWQgdGhlIFNPRlRXQVJFLgorCitSRUNJVEFMUworCitVc2Ugb2YgTlZJRElBJ3MgcHJvZHVjdHMgcmVxdWlyZXMgdGhyZWUgZWxlbWVudHM6IHRoZSBTT0ZUV0FSRSwgdGhlCitoYXJkd2FyZSBvbiBhIGdyYXBoaWNzIGNvbnRyb2xsZXIgYm9hcmQsIGFuZCBhIHBlcnNvbmFsIGNvbXB1dGVyLiBUaGUKK1NPRlRXQVJFIGlzIHByb3RlY3RlZCBieSBjb3B5cmlnaHQgbGF3cyBhbmQgaW50ZXJuYXRpb25hbCBjb3B5cmlnaHQKK3RyZWF0aWVzLCBhcyB3ZWxsIGFzIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIGFuZCB0cmVhdGllcy4gIFRoZQorU09GVFdBUkUgaXMgbm90IHNvbGQsIGFuZCBpbnN0ZWFkIGlzIG9ubHkgbGljZW5zZWQgZm9yIHVzZSwgc3RyaWN0bHkgaW4KK2FjY29yZGFuY2Ugd2l0aCB0aGlzIGRvY3VtZW50LiAgVGhlIGhhcmR3YXJlIGlzIHByb3RlY3RlZCBieSB2YXJpb3VzCitwYXRlbnRzLCBhbmQgaXMgc29sZCwgYnV0IHRoaXMgYWdyZWVtZW50IGRvZXMgbm90IGNvdmVyIHRoYXQgc2FsZSwgc2luY2UgaXQKK21heSBub3QgbmVjZXNzYXJpbHkgYmUgc29sZCBhcyBhIHBhY2thZ2Ugd2l0aCB0aGUgU09GVFdBUkUuIFRoaXMgYWdyZWVtZW50CitzZXRzIGZvcnRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgU09GVFdBUkUgTElDRU5TRSBvbmx5LgorCisxLiAgREVGSU5JVElPTlMKKworMS4xICBDdXN0b21lci4gIEN1c3RvbWVyIG1lYW5zIHRoZSBlbnRpdHkgb3IgaW5kaXZpZHVhbCB0aGF0IGRvd25sb2FkcyB0aGUKKyAgICAgU09GVFdBUkUuCisKKzIuICBHUkFOVCBPRiBMSUNFTlNFCisKKzIuMSAgUmlnaHRzIGFuZCBMaW1pdGF0aW9ucyBvZiBHcmFudC4gIE5WSURJQSBoZXJlYnkgZ3JhbnRzIEN1c3RvbWVyIHRoZQorICAgICBmb2xsb3dpbmcgbm9uLWV4Y2x1c2l2ZSwgbm9uLXRyYW5zZmVyYWJsZSByaWdodCB0byB1c2UgdGhlIFNPRlRXQVJFLAorICAgICB3aXRoIHRoZSBmb2xsb3dpbmcgbGltaXRhdGlvbnM6CisKKzIuMS4xICBSaWdodHMuICBDdXN0b21lciBtYXkgaW5zdGFsbCBhbmQgdXNlIG9uZSBjb3B5IG9mIHRoZSBTT0ZUV0FSRSBvbiBhCisgICAgICAgc2luZ2xlIGNvbXB1dGVyLCBhbmQgZXhjZXB0IGZvciBtYWtpbmcgb25lIGJhY2stdXAgY29weSBvZiB0aGUKKyAgICAgICBTb2Z0d2FyZSwgbWF5IG5vdCBvdGhlcndpc2UgY29weSB0aGUgU09GVFdBUkUuICBUaGlzIExJQ0VOU0Ugb2YKKyAgICAgICBTT0ZUV0FSRSBtYXkgbm90IGJlIHNoYXJlZCBvciB1c2VkIGNvbmN1cnJlbnRseSBvbiBkaWZmZXJlbnQKKyAgICAgICBjb21wdXRlcnMuCisKKzIuMS4yICBBY2FkZW1pYyBFeGNlcHRpb24uICBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZyB0ZXJtcyBvZiBTZWN0aW9uCisgICAgICAgMi4xLjEsIGFjYWRlbWljIGRlcGFydG1lbnRzIGF0IGNvbGxlZ2VzIGFuZCB1bml2ZXJzaXRpZXMgbWF5IHNoYXJlCisgICAgICAgb3IgZGlzdHJpYnV0ZSB0aGUgU09GVFdBUkUgYW1vbmcgbXVsdGlwbGUgY29tcHV0ZXJzIHdpdGhpbiBhCisgICAgICAgZGVwYXJ0bWVudC4KKworMi4xLjMgIExpbnV4IEV4Y2VwdGlvbi4gIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHRlcm1zIG9mIFNlY3Rpb24KKyAgICAgICAyLjEuMSwgU09GVFdBUkUgZGVzaWduZWQgZXhjbHVzaXZlbHkgZm9yIHVzZSBvbiB0aGUgTGludXggb3BlcmF0aW5nCisgICAgICAgc3lzdGVtIG1heSBiZSBjb3BpZWQgYW5kIHJlZGlzdHJpYnV0ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGJpbmFyeQorICAgICAgIGZpbGVzIHRoZXJlb2YgYXJlIG5vdCBtb2RpZmllZCBpbiBhbnkgd2F5IChleGNlcHQgZm9yIHVuemlwcGluZyBvZgorICAgICAgIGNvbXByZXNzZWQgZmlsZXMpLgorCisyLjEuNCAgTGltaXRhdGlvbnMuCisKK05vIFJldmVyc2UgRW5naW5lZXJpbmcuICBDdXN0b21lciBtYXkgbm90IHJldmVyc2UgZW5naW5lZXIsIGRlY29tcGlsZSwgb3IKK2Rpc2Fzc2VtYmxlIHRoZSBTT0ZUV0FSRSwgbm9yIGF0dGVtcHQgaW4gYW55IG90aGVyIG1hbm5lciB0byBvYnRhaW4gdGhlCitzb3VyY2UgY29kZS4KKworTm8gU2VwYXJhdGlvbiBvZiBDb21wb25lbnRzLiAgVGhlIFNPRlRXQVJFIGlzIGxpY2Vuc2VkIGFzIGEgc2luZ2xlIHByb2R1Y3QuCitJdHMgY29tcG9uZW50IHBhcnRzIG1heSBub3QgYmUgc2VwYXJhdGVkIGZvciB1c2Ugb24gbW9yZSB0aGFuIG9uZSBjb21wdXRlciwKK25vciBvdGhlcndpc2UgdXNlZCBzZXBhcmF0ZWx5IGZyb20gdGhlIG90aGVyIHBhcnRzLgorCitObyBSZW50YWwuICBDdXN0b21lciBtYXkgbm90IHJlbnQgb3IgbGVhc2UgdGhlIFNPRlRXQVJFIHRvIHNvbWVvbmUgZWxzZS4KKworMi4xLjUJUmVkaXN0cmlidXRpb24KKworTm90d2l0aHN0YW5kaW5nIGFueSBvdGhlciBwcm92aXNpb24gdG8gdGhlIGNvbnRyYXJ5LCBDdXN0b21lciBtYXkgcmVkaXN0cmlidXRlIAordGhlIFNvZnR3YXJlIGV4ZWN1dGFibGUgYW5kIGxpYnJhcmllcyBvbmx5IHNvIGxvbmcgYXMgc3VjaCByZWRpc3RyaWJ1dGlvbiAKK2FjY29tcGFuaWVzIHlvdXIgY29tbWVyY2lhbCBvciBub24tY29tbWVyY2lhbCBhcHBsaWNhdGlvbi4gQ3VzdG9tZXIgbWF5IG5vdAoraW5zdGFsbCBvciBwbGFjZSBhbnkgcmVkaXN0cmlidXRpb24gZmlsZXMgaW4gdGhlIHN5c3RlbSBwYXRoLiBDdXN0b21lciBtYXkgbm90LCAKK3doZW4gcmVkaXN0cmlidXRpbmcgdGhlIFNvZnR3YXJlLCBtb2RpZnkgYW55IGVudmlyb25tZW50YWwgdmFyaWFibGVzIGNyZWF0ZWQgCitieSB0aGlzIGluc3RhbGxlci5Bbnkgc3VjaCByZWRpc3RyaWJ1dGlvbiBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgCitjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4KKworMy4gIFRFUk1JTkFUSU9OCisKK1RoaXMgTElDRU5TRSB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIGlmIEN1c3RvbWVyIGZhaWxzIHRvIGNvbXBseSB3aXRoCithbnkgb2YgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGhlcmVvZi4gIEluIHN1Y2ggZXZlbnQsIEN1c3RvbWVyIG11c3QKK2Rlc3Ryb3kgYWxsIGNvcGllcyBvZiB0aGUgU09GVFdBUkUgYW5kIGFsbCBvZiBpdHMgY29tcG9uZW50IHBhcnRzLgorCis0LiAgQ09QWVJJR0hUCisKK0FsbCB0aXRsZSBhbmQgY29weXJpZ2h0cyBpbiBhbmQgdG8gdGhlIFNPRlRXQVJFIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkCit0byBhbGwgaW1hZ2VzLCBwaG90b2dyYXBocywgYW5pbWF0aW9ucywgdmlkZW8sIGF1ZGlvLCBtdXNpYywgdGV4dCwgYW5kCitvdGhlciBpbmZvcm1hdGlvbiBpbmNvcnBvcmF0ZWQgaW50byB0aGUgU09GVFdBUkUpLCB0aGUgYWNjb21wYW55aW5nIHByaW50ZWQKK21hdGVyaWFscywgYW5kIGFueSBjb3BpZXMgb2YgdGhlIFNPRlRXQVJFLCBhcmUgb3duZWQgYnkgTlZJRElBLCBvciBpdHMKK3N1cHBsaWVycy4gIFRoZSBTT0ZUV0FSRSBpcyBwcm90ZWN0ZWQgYnkgY29weXJpZ2h0IGxhd3MgYW5kIGludGVybmF0aW9uYWwKK3RyZWF0eSBwcm92aXNpb25zLiAgQWNjb3JkaW5nbHksIEN1c3RvbWVyIGlzIHJlcXVpcmVkIHRvIHRyZWF0IHRoZSBTT0ZUV0FSRQorbGlrZSBhbnkgb3RoZXIgY29weXJpZ2h0ZWQgbWF0ZXJpYWwsIGV4Y2VwdCBhcyBvdGhlcndpc2UgYWxsb3dlZCBwdXJzdWFudAordG8gdGhpcyBMSUNFTlNFIGFuZCB0aGF0IGl0IG1heSBtYWtlIG9uZSBjb3B5IG9mIHRoZSBTT0ZUV0FSRSBzb2xlbHkgZm9yCitiYWNrdXAgb3IgYXJjaGl2ZSBwdXJwb3Nlcy4KKworNS4gIEFQUExJQ0FCTEUgTEFXCisKK1RoaXMgYWdyZWVtZW50IHNoYWxsIGJlIGRlZW1lZCB0byBoYXZlIGJlZW4gbWFkZSBpbiwgYW5kIHNoYWxsIGJlIGNvbnN0cnVlZAorcHVyc3VhbnQgdG8sIHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBDYWxpZm9ybmlhLgorCis2LiAgRElTQ0xBSU1FUiBPRiBXQVJSQU5USUVTIEFORCBMSU1JVEFUSU9OIE9OIExJQUJJTElUWQorCis2LjEgIE5vIFdhcnJhbnRpZXMuICBUTyBUSEUgTUFYSU1VTSBFWFRFTlQgUEVSTUlUVEVEIEJZCisgICAgIEFQUExJQ0FCTEUgTEFXLCBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgTlZJRElBCisgICAgIEFORCBJVFMgU1VQUExJRVJTIERJU0NMQUlNIEFMTCBXQVJSQU5USUVTLCBFSVRIRVIgRVhQUkVTUworICAgICBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU1QTElFRAorICAgICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgICAgIFBVUlBPU0UuCisKKzYuMiAgTm8gTGlhYmlsaXR5IGZvciBDb25zZXF1ZW50aWFsIERhbWFnZXMuICBUTyBUSEUgTUFYSU1VTQorICAgICBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBTSEFMTAorICAgICBOVklESUEgT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLAorICAgICBJTkNJREVOVEFMLCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIFdIQVRTT0VWRVIKKyAgICAgKElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GCisgICAgIEJVU0lORVNTIFBST0ZJVFMsIEJVU0lORVNTIElOVEVSUlVQVElPTiwgTE9TUyBPRiBCVVNJTkVTUworICAgICBJTkZPUk1BVElPTiwgT1IgQU5ZIE9USEVSIFBFQ1VOSUFSWSBMT1NTKSBBUklTSU5HIE9VVCBPRgorICAgICBUSEUgVVNFIE9GIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFNPRlRXQVJFLCBFVkVOIElGIE5WSURJQQorICAgICBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzcuICBNSVNDRUxMQU5FT1VTCisKK1RoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZgorR29vZHMgaXMgc3BlY2lmaWNhbGx5IGRpc2NsYWltZWQuICBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTElDRU5TRSBpcworaW5jb25zaXN0ZW50IHdpdGgsIG9yIGNhbm5vdCBiZSBmdWxseSBlbmZvcmNlZCB1bmRlciwgdGhlIGxhdywgc3VjaAorcHJvdmlzaW9uIHdpbGwgYmUgY29uc3RydWVkIGFzIGxpbWl0ZWQgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gYmUKK2NvbnNpc3RlbnQgd2l0aCBhbmQgZnVsbHkgZW5mb3JjZWFibGUgdW5kZXIgdGhlIGxhdy4gIFRoaXMgYWdyZWVtZW50IGlzIHRoZQorZmluYWwsIGNvbXBsZXRlIGFuZCBleGNsdXNpdmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgcmVsYXRpbmcgdG8gdGhlCitzdWJqZWN0IG1hdHRlciBoZXJlb2YsIGFuZCBzdXBlcnNlZGVzIGFsbCBwcmlvciBvciBjb250ZW1wb3JhbmVvdXMKK3VuZGVyc3RhbmRpbmdzIGFuZCBhZ3JlZW1lbnRzIHJlbGF0aW5nIHRvIHN1Y2ggc3ViamVjdCBtYXR0ZXIsIHdoZXRoZXIgb3JhbAorb3Igd3JpdHRlbi4gIEN1c3RvbWVyIGFncmVlcyB0aGF0IGl0IHdpbGwgbm90IHNoaXAsIHRyYW5zZmVyIG9yIGV4cG9ydCB0aGUKK1NPRlRXQVJFIGludG8gYW55IGNvdW50cnksIG9yIHVzZSB0aGUgU09GVFdBUkUgaW4gYW55IG1hbm5lciwgcHJvaGliaXRlZCBieQordGhlIFVuaXRlZCBTdGF0ZXMgQnVyZWF1IG9mIEV4cG9ydCBBZG1pbmlzdHJhdGlvbiBvciBhbnkgZXhwb3J0IGxhd3MsCityZXN0cmljdGlvbnMgb3IgcmVndWxhdGlvbnMuICBUaGlzIExJQ0VOU0UgbWF5IG9ubHkgYmUgbW9kaWZpZWQgaW4gd3JpdGluZworc2lnbmVkIGJ5IGFuIGF1dGhvcml6ZWQgb2ZmaWNlciBvZiBOVklESUEuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9OVklESUEtTlBQIGIvbGljZW5zZXMvTlZJRElBLU5QUApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGRiNDRiCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvTlZJRElBLU5QUApAQCAtMCwwICsxLDI1NCBAQAorTGljZW5zZSBBZ3JlZW1lbnQgZm9yIE5WSURJQSBQZXJmb3JtYW5jZSBQcmltaXRpdmVzIExpYnJhcnkKKworSU1QT1JUQU5UIE5PVElDRSAtLSBSRUFEIENBUkVGVUxMWTogVGhpcyBMaWNlbnNlIEFncmVlbWVudCAoIkxpY2Vuc2UiKSBmb3IKK05WSURJQSBQZXJmb3JtYW5jZSBQcmltaXRpdmVzIExpYnJhcnksIGluY2x1ZGluZyBjb21wdXRlciBzb2Z0d2FyZSBhbmQKK2Fzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiAo4oCcU29mdHdhcmXigJ0pLCBpcyB0aGUgTElDRU5TRSB3aGljaCBnb3Zlcm5zIHVzZSBvZiB0aGUKK1NPRlRXQVJFIG9mIE5WSURJQSBDb3Jwb3JhdGlvbiBhbmQgaXRzIHN1YnNpZGlhcmllcyAoIk5WSURJQSIpIGRvd25sb2FkYWJsZQoraGVyZWZyb20uIEJ5IGRvd25sb2FkaW5nLCBpbnN0YWxsaW5nLCBjb3B5aW5nLCBvciBvdGhlcndpc2UgdXNpbmcgdGhlIFNPRlRXQVJFLAorWW91IChhcyBkZWZpbmVkIGJlbG93KSBhZ3JlZSB0byBiZSBib3VuZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMSUNFTlNFLiBJZiBZb3UKK2RvIG5vdCBhZ3JlZSB0byB0aGUgdGVybXMgb2YgdGhpcyBMSUNFTlNFLCBkbyBub3QgZG93bmxvYWQgdGhlIFNPRlRXQVJFLgorCisKK1JFQ0lUQUxTCisKK1VzZSBvZiBOVklESUEncyBwcm9kdWN0cyByZXF1aXJlcyB0aHJlZSBlbGVtZW50czogdGhlIFNPRlRXQVJFLCB0aGUgTlZJRElBIEdQVSwKK2FuZCBhIGNvbXB1dGVyIHN5c3RlbS4gVGhlIFNPRlRXQVJFIGlzIHByb3RlY3RlZCBieSBjb3B5cmlnaHQgbGF3cyBhbmQKK2ludGVybmF0aW9uYWwgY29weXJpZ2h0IHRyZWF0aWVzLCBhcyB3ZWxsIGFzIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzCithbmQgdHJlYXRpZXMuIFRoZSBTT0ZUV0FSRSBpcyBub3Qgc29sZCwgYW5kIGluc3RlYWQgaXMgb25seSBsaWNlbnNlZCBmb3IgWW91cgordXNlLCBzdHJpY3RseSBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBkb2N1bWVudC4gVGhlIGhhcmR3YXJlIGlzIHByb3RlY3RlZCBieQordmFyaW91cyBwYXRlbnRzLCBhbmQgaXMgc29sZCwgYnV0IHRoaXMgTElDRU5TRSBkb2VzIG5vdCBjb3ZlciB0aGF0IHNhbGUsIHNpbmNlCitpdCBtYXkgbm90IG5lY2Vzc2FyaWx5IGJlIHNvbGQgYXMgYSBwYWNrYWdlIHdpdGggdGhlIFNPRlRXQVJFLiBUaGlzIExJQ0VOU0UKK3NldHMgZm9ydGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBTT0ZUV0FSRSBMSUNFTlNFIG9ubHkuCisKKworMS4gREVGSU5JVElPTlMKKworMS4xIExpY2Vuc2VlLiAg4oCcTGljZW5zZWUs4oCdIOKAnFlvdSzigJ0gb3Ig4oCcWW91cuKAnSBzaGFsbCBtZWFuIHRoZSBlbnRpdHkgb3IgaW5kaXZpZHVhbAordGhhdCBkb3dubG9hZHMgYW5kIHVzZXMgdGhlIFNPRlRXQVJFLgorCisyLiBHUkFOVCBPRiBMSUNFTlNFCisKKzIuMSBSaWdodHMgYW5kIExpbWl0YXRpb25zIG9mIEdyYW50LiBOVklESUEgaGVyZWJ5IGdyYW50cyBMaWNlbnNlZSB0aGUKK2ZvbGxvd2luZyBub24tZXhjbHVzaXZlLCBub24tdHJhbnNmZXJhYmxlLCBub24tc3VibGljZW5zYWJsZSAoZXhjZXB0IGFzIHN0YXRlZAorb3RoZXJ3aXNlIGJlbG93KSByaWdodCB0byB1c2UgdGhlIFNPRlRXQVJFLCB3aXRoIHRoZSBmb2xsb3dpbmcgbGltaXRhdGlvbnM6CisKKzIuMS4xIFVzYWdlIFJpZ2h0cy4gTGljZW5zZWUgbWF5IGluc3RhbGwgYW5kIHVzZSBtdWx0aXBsZSBjb3BpZXMgb2YgdGhlCitTT0ZUV0FSRSBvbiBhIHNoYXJlZCBjb21wdXRlciBvciBjb25jdXJyZW50bHkgb24gZGlmZmVyZW50IGNvbXB1dGVycywgYW5kIG1ha2UKK211bHRpcGxlIGJhY2stdXAgY29waWVzIG9mIHRoZSBTT0ZUV0FSRSwgc29sZWx5IGZvciBMaWNlbnNlZeKAmXMgdXNlIHdpdGhpbgorTGljZW5zZWXigJlzIEVudGVycHJpc2UuIOKAnEVudGVycHJpc2XigJ0gc2hhbGwgbWVhbiBpbmRpdmlkdWFsIHVzZSBieSBMaWNlbnNlZSBvcgorYW55IGxlZ2FsIGVudGl0eSAoc3VjaCBhcyBhIGNvcnBvcmF0aW9uIG9yIHVuaXZlcnNpdHkpIGFuZCB0aGUgc3Vic2lkaWFyaWVzIGl0Citvd25zIGJ5IG1vcmUgdGhhbiA1MCBwZXJjZW50LgorCisyLjEuMiBTb3VyY2UgQ29kZSBSaWdodHM6ICBEZXZlbG9wZXIgc2hhbGwgaGF2ZSB0aGUgcmlnaHQgdG8gbW9kaWZ5IGFuZCBjcmVhdGUKK2Rlcml2YXRpdmUgd29ya3Mgd2l0aCB0aGUgc2FtcGxlIHNvdXJjZSBjb2RlICjigJxTb3VyY2UgQ29kZeKAnSkgcHJvdmlkZWQgaW4KK2Nvbm5lY3Rpb24gd2l0aCB0aGUgU29mdHdhcmUuICBEZXZlbG9wZXIgc2hhbGwgb3duIGFueSBkZXJpdmF0aXZlIHdvcmtzICgKKyJEZXJpdmF0aXZlcyIpIGl0IGNyZWF0ZXMgdG8gdGhlIFNvdXJjZSBDb2RlLCBwcm92aWRlZCB0aGF0IERldmVsb3BlciB1c2VzIHRoZQorU291cmNlIENvZGUgYW5kIGRlcml2YXRpdmUgd29ya3MgdGhlcmVvZiBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIGFuZAorY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudC4gIERldmVsb3BlciBtYXkgZGlzdHJpYnV0ZSB0aGVpciBkZXJpdmF0aXZlIHdvcmtzCitvZiB0aGUgU291cmNlIENvZGUsIHByb3ZpZGVkIHRoYXQgYWxsIE5WSURJQSBjb3B5cmlnaHQgbm90aWNlcyBhbmQgdHJhZGVtYXJrcworYXJlIHVzZWQgcHJvcGVybHkgYW5kIHN1Y2ggZGVyaXZhdGl2ZSB3b3JrcyBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgc3RhdGVtZW50OgorIlRoaXMgc29mdHdhcmUgY29udGFpbnMgc291cmNlIGNvZGUgcHJvdmlkZWQgYnkgTlZJRElBIENvcnBvcmF0aW9uLiIKKworMi4xLjMgT2JqZWN0IENvZGU6ICBEZXZlbG9wZXIgYWdyZWVzIG5vdCB0byBkaXNhc3NlbWJsZSwgZGVjb21waWxlIG9yIHJldmVyc2UKK2VuZ2luZWVyIHRoZSBPYmplY3QgQ29kZSB2ZXJzaW9ucyBvZiBhbnkgb2YgdGhlIFNvZnR3YXJlLiAgRGV2ZWxvcGVyCithY2tub3dsZWRnZXMgdGhhdCBjZXJ0YWluIG9mIHRoZSBTb2Z0d2FyZSBwcm92aWRlZCBpbiBPYmplY3QgQ29kZSB2ZXJzaW9uIG1heQorY29udGFpbiB0aGlyZCBwYXJ0eSBjb21wb25lbnRzIHRoYXQgbWF5IGJlIHN1YmplY3QgdG8gcmVzdHJpY3Rpb25zLCBhbmQKK2V4cHJlc3NseSBhZ3JlZXMgbm90IHRvIGF0dGVtcHQgdG8gbW9kaWZ5IG9yIGRpc3RyaWJ1dGUgc3VjaCBTb2Z0d2FyZSB3aXRob3V0CitmaXJzdCByZWNlaXZpbmcgY29uc2VudCBmcm9tIE5WSURJQS4KKworMi4xLjQgUmVkaXN0cmlidXRpb24gUmlnaHRzLiBMaWNlbnNlZSBtYXksIHRyYW5zZmVyLCByZWRpc3RyaWJ1dGUgYW5kCitzdWJsaWNlbnNlIGNlcnRhaW4gZmlsZXMgb2YgdGhlIFNPRlRXQVJFLCBhcyByZWZlcmVuY2VkIGluIEF0dGFjaG1lbnQgQSBvZiB0aGlzCitBZ3JlZW1lbnQ7IHByb3ZpZGVkLCBob3dldmVyIExpY2Vuc2VlIHNoYWxsIG9ubHkgaW5zdGFsbCBzdWNoIGZpbGVzIGludG8gYQorcHJpdmF0ZSAobm9uLXNoYXJlZCkgZGlyZWN0b3J5IGxvY2F0aW9uIHRoYXQgaXMgdXNlZCBvbmx5IGJ5IExpY2Vuc2Vl4oCZcworcHJvZHVjdC4KKworMi4xLjUgTGludXgvRnJlZUJTRCBFeGNlcHRpb24uIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nIHRlcm1zIG9mIFNlY3Rpb24KKzIuMS4xLCBTT0ZUV0FSRSBkZXNpZ25lZCBleGNsdXNpdmVseSBmb3IgdXNlIG9uIHRoZSBMaW51eCBvciBGcmVlQlNEIG9wZXJhdGluZworc3lzdGVtcywgb3Igb3RoZXIgb3BlcmF0aW5nIHN5c3RlbXMgZGVyaXZlZCBmcm9tIHRoZSBzb3VyY2UgY29kZSB0byB0aGVzZQorb3BlcmF0aW5nIHN5c3RlbXMsIG1heSBiZSBjb3BpZWQgYW5kIHJlZGlzdHJpYnV0ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGJpbmFyeQorZmlsZXMgdGhlcmVvZiBhcmUgbm90IG1vZGlmaWVkIGluIGFueSB3YXkgKGV4Y2VwdCBmb3IgdW56aXBwaW5nIG9mIGNvbXByZXNzZWQKK2ZpbGVzKS4KKworMi4xLjYgTGltaXRhdGlvbnMuCitObyBSZXZlcnNlIEVuZ2luZWVyaW5nLiBMaWNlbnNlZSBtYXkgbm90IHJldmVyc2UgZW5naW5lZXIsIGRlY29tcGlsZSwgb3IKK2Rpc2Fzc2VtYmxlIHRoZSBTT0ZUV0FSRSwgbm9yIGF0dGVtcHQgaW4gYW55IG90aGVyIG1hbm5lciB0byBvYnRhaW4gdGhlIHNvdXJjZQorY29kZS4KKworTm8gU2VwYXJhdGlvbiBvZiBDb21wb25lbnRzLiBUaGUgU09GVFdBUkUgaXMgbGljZW5zZWQgYXMgYSBzaW5nbGUgcHJvZHVjdC4KK0V4Y2VwdCBhcyBhdXRob3JpemVkIGluIHRoaXMgQWdyZWVtZW50LCBTb2Z0d2FyZSBjb21wb25lbnQgcGFydHMgb2YgdGhlCitTb2Z0d2FyZSBtYXkgbm90IGJlIHNlcGFyYXRlZCBmb3IgdXNlIG9uIG1vcmUgdGhhbiBvbmUgY29tcHV0ZXIsIG5vciBvdGhlcndpc2UKK3VzZWQgc2VwYXJhdGVseSBmcm9tIHRoZSBvdGhlciBwYXJ0cy4KKworTm8gUmVudGFsLiBMaWNlbnNlZSBtYXkgbm90IHJlbnQgb3IgbGVhc2UgdGhlIFNPRlRXQVJFIHRvIHNvbWVvbmUgZWxzZS4KKworMy4gVEVSTUlOQVRJT04KKworVGhpcyBMSUNFTlNFIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgaWYgTGljZW5zZWUgZmFpbHMgdG8gY29tcGx5IHdpdGggYW55CitvZiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgaGVyZW9mLiBJbiBzdWNoIGV2ZW50LCBMaWNlbnNlZSBtdXN0IGRlc3Ryb3kgYWxsCitjb3BpZXMgb2YgdGhlIFNPRlRXQVJFIGFuZCBhbGwgb2YgaXRzIGNvbXBvbmVudCBwYXJ0cy4KKworRGVmZW5zaXZlIFN1c3BlbnNpb24uIElmIExpY2Vuc2VlIGNvbW1lbmNlcyBvciBwYXJ0aWNpcGF0ZXMgaW4gYW55IGxlZ2FsCitwcm9jZWVkaW5nIGFnYWluc3QgTlZJRElBLCB0aGVuIE5WSURJQSBtYXksIGluIGl0cyBzb2xlIGRpc2NyZXRpb24sIHN1c3BlbmQgb3IKK3Rlcm1pbmF0ZSBhbGwgbGljZW5zZSBncmFudHMgYW5kIGFueSBvdGhlciByaWdodHMgcHJvdmlkZWQgdW5kZXIgdGhpcyBMSUNFTlNFCitkdXJpbmcgdGhlIHBlbmRlbmN5IG9mIHN1Y2ggbGVnYWwgcHJvY2VlZGluZ3MuCisKKzQuIENPUFlSSUdIVAorCitBbGwgcmlnaHRzLCB0aXRsZSwgaW50ZXJlc3QgYW5kIGNvcHlyaWdodHMgaW4gYW5kIHRvIHRoZSBTT0ZUV0FSRSAoaW5jbHVkaW5nCitidXQgbm90IGxpbWl0ZWQgdG8gYWxsIGltYWdlcywgcGhvdG9ncmFwaHMsIGFuaW1hdGlvbnMsIHZpZGVvLCBhdWRpbywgbXVzaWMsCit0ZXh0LCBhbmQgb3RoZXIgaW5mb3JtYXRpb24gaW5jb3Jwb3JhdGVkIGludG8gdGhlIFNPRlRXQVJFKSwgdGhlIGFjY29tcGFueWluZworcHJpbnRlZCBtYXRlcmlhbHMsIGFuZCBhbnkgY29waWVzIG9mIHRoZSBTT0ZUV0FSRSwgYXJlIG93bmVkIGJ5IE5WSURJQSwgb3IgaXRzCitzdXBwbGllcnMuIFRoZSBTT0ZUV0FSRSBpcyBwcm90ZWN0ZWQgYnkgY29weXJpZ2h0IGxhd3MgYW5kIGludGVybmF0aW9uYWwgdHJlYXR5Citwcm92aXNpb25zLiBBY2NvcmRpbmdseSwgTGljZW5zZWUgaXMgcmVxdWlyZWQgdG8gdHJlYXQgdGhlIFNPRlRXQVJFIGxpa2UgYW55CitvdGhlciBjb3B5cmlnaHRlZCBtYXRlcmlhbCwgZXhjZXB0IGFzIG90aGVyd2lzZSBhbGxvd2VkIHB1cnN1YW50IHRvIHRoaXMKK0xJQ0VOU0UgYW5kIHRoYXQgaXQgbWF5IG1ha2Ugb25lIGNvcHkgb2YgdGhlIFNPRlRXQVJFIHNvbGVseSBmb3IgYmFja3VwIG9yCithcmNoaXZlIHB1cnBvc2VzLgorCitSRVNUUklDVEVEIFJJR0hUUyBOT1RJQ0UuIFNvZnR3YXJlIGhhcyBiZWVuIGRldmVsb3BlZCBlbnRpcmVseSBhdCBwcml2YXRlCitleHBlbnNlIGFuZCBpcyBjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIHByb3ZpZGVkIHdpdGggUkVTVFJJQ1RFRCBSSUdIVFMuCitVc2UsIGR1cGxpY2F0aW9uIG9yIGRpc2Nsb3N1cmUgYnkgdGhlIFUuUy4gR292ZXJubWVudCBvciBhIFUuUy4gR292ZXJubWVudAorc3ViY29udHJhY3RvciBpcyBzdWJqZWN0IHRvIHRoZSByZXN0cmljdGlvbnMgc2V0IGZvcnRoIGluIHRoZSBsaWNlbnNlIGFncmVlbWVudAordW5kZXIgd2hpY2ggU29mdHdhcmUgd2FzIG9idGFpbmVkIHB1cnN1YW50IHRvIERGQVJTIDIyNy43MjAyLTMoYSkgb3IgYXMgc2V0Citmb3J0aCBpbiBzdWJwYXJhZ3JhcGhzIChjKSgxKSBhbmQgKDIpIG9mIHRoZSBDb21tZXJjaWFsIENvbXB1dGVyIFNvZnR3YXJlIC0KK1Jlc3RyaWN0ZWQgUmlnaHRzIGNsYXVzZSBhdCBGQVIgNTIuMjI3LTE5LCBhcyBhcHBsaWNhYmxlLiBDb250cmFjdG9yLworbWFudWZhY3R1cmVyIGlzIE5WSURJQSwgMjcwMSBTYW4gVG9tYXMgRXhwcmVzc3dheSwgU2FudGEgQ2xhcmEsIENBIDk1MDUwCisKKzUuIEFQUExJQ0FCTEUgTEFXCisKK1RoaXMgTElDRU5TRSBzaGFsbCBiZSBkZWVtZWQgdG8gaGF2ZSBiZWVuIG1hZGUgaW4sIGFuZCBzaGFsbCBiZSBjb25zdHJ1ZWQKK3B1cnN1YW50IHRvLCB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgRGVsYXdhcmUuIFRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uCitvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgc3BlY2lmaWNhbGx5IGRpc2NsYWltZWQuCisKKzYuIERJU0NMQUlNRVIgT0YgV0FSUkFOVElFUyBBTkQgTElNSVRBVElPTiBPTiBMSUFCSUxJVFkKKworNi4xIE5vIFdhcnJhbnRpZXMuIFRPIFRIRSBNQVhJTVVNIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcsIFRIRQorU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgTlZJRElBIEFORCBJVFMgU1VQUExJRVJTIERJU0NMQUlNIEFMTAorV0FSUkFOVElFUywgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworNi4yIE5vIExpYWJpbGl0eSBmb3IgQ29uc2VxdWVudGlhbCBEYW1hZ2VzLiBUTyBUSEUgTUFYSU1VTSBFWFRFTlQgUEVSTUlUVEVEIEJZCitBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgU0hBTEwgTlZJRElBIE9SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkKK1NQRUNJQUwsIElOQ0lERU5UQUwsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgV0hBVFNPRVZFUiAoSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEJVU0lORVNTIFBST0ZJVFMsIEJVU0lORVNTCitJTlRFUlJVUFRJT04sIExPU1MgT0YgQlVTSU5FU1MgSU5GT1JNQVRJT04sIE9SIEFOWSBPVEhFUiBQRUNVTklBUlkgTE9TUykKK0FSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT0YgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgU09GVFdBUkUsIEVWRU4gSUYgTlZJRElBIEhBUworQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzYuMyBObyBTdXBwb3J0LiAgTlZJRElBIGhhcyBubyBvYmxpZ2F0aW9uIHRvIHN1cHBvcnQgb3IgdG8gcHJvdmlkZSBhbnkgdXBkYXRlcworb2YgdGhlIFNvZnR3YXJlLgorCis3LiBNSVNDRUxMQU5FT1VTCisKKzcuMSBGZWVkYmFjay4gSW4gdGhlIGV2ZW50IExpY2Vuc2VlIGNvbnRhY3RzIE5WSURJQSB0byByZXF1ZXN0IEZlZWRiYWNrIChhcworZGVmaW5lZCBiZWxvdykgb24gaG93IHRvIGRlc2lnbiwgaW1wbGVtZW50LCBvciBvcHRpbWl6ZSBMaWNlbnNlZeKAmXMgcHJvZHVjdCBmb3IKK3VzZSB3aXRoIHRoZSBTT0ZUV0FSRSwgdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcHBseSB0aGUgRmVlZGJhY2s6CisKKzEuIEV4Y2hhbmdlIG9mIEZlZWRiYWNrLiBCb3RoIHBhcnRpZXMgYWdyZWUgdGhhdCBuZWl0aGVyIHBhcnR5IGhhcyBhbgorb2JsaWdhdGlvbiB0byBnaXZlIHRoZSBvdGhlciBwYXJ0eSBhbnkgc3VnZ2VzdGlvbnMsIGNvbW1lbnRzIG9yIG90aGVyIGZlZWRiYWNrLAord2hldGhlciB2ZXJiYWxseSBvciBpbiBjb2RlIGZvcm0gKOKAnEZlZWRiYWNr4oCdKSwgcmVsYXRpbmcgdG8gKGkpIHRoZSBTT0ZUV0FSRTsKKyhpaSkgTGljZW5zZWXigJlzIHByb2R1Y3RzOyAoaWlpKSBMaWNlbnNlZeKAmXMgdXNlIG9mIHRoZSBTT0ZUV0FSRTsgb3IgKGl2KQorb3B0aW1pemF0aW9uIG9mICBMaWNlbnNlZeKAmXMgcHJvZHVjdCB3aXRoIHRoZSBTT0ZUV0FSRS4gIEluIHRoZSBldmVudCBlaXRoZXIKK3BhcnR5IHByb3ZpZGVzIEZlZWRiYWNrIHRvIHRoZSBvdGhlciBwYXJ0eSwgdGhlIHBhcnR5IHJlY2VpdmluZyB0aGUgRmVlZGJhY2sKK21heSB1c2UgYW5kIGluY2x1ZGUgYW55IEZlZWRiYWNrIHRoYXQgdGhlIG90aGVyIHBhcnR5IHZvbHVudGFyaWx5IHByb3ZpZGVzIHRvCitpbXByb3ZlIHRoZSAoaSkgU09GVFdBUkUgb3Igb3RoZXIgcmVsYXRlZCBOVklESUEgdGVjaG5vbG9naWVzLCByZXNwZWN0aXZlbHkgZm9yCit0aGUgYmVuZWZpdCBvZiBOVklESUE7IG9yIChpaSkgTGljZW5zZWXigJlzIHByb2R1Y3Qgb3Igb3RoZXIgcmVsYXRlZCBMaWNlbnNlZQordGVjaG5vbG9naWVzLCByZXNwZWN0aXZlbHkgZm9yIHRoZSBiZW5lZml0IG9mIExpY2Vuc2VlLiAgQWNjb3JkaW5nbHksIGlmIGVpdGhlcgorcGFydHkgcHJvdmlkZXMgRmVlZGJhY2sgdG8gdGhlIG90aGVyIHBhcnR5LCBib3RoIHBhcnRpZXMgYWdyZWUgdGhhdCB0aGUgb3RoZXIKK3BhcnR5IGFuZCBpdHMgcmVzcGVjdGl2ZSBsaWNlbnNlZXMgbWF5IGZyZWVseSB1c2UsIHJlcHJvZHVjZSwgbGljZW5zZSwKK2Rpc3RyaWJ1dGUsIGFuZCBvdGhlcndpc2UgY29tbWVyY2lhbGl6ZSB0aGUgRmVlZGJhY2sgaW4gdGhlIChpKSBTT0ZUV0FSRSBvcgorb3RoZXIgcmVsYXRlZCB0ZWNobm9sb2dpZXM7IG9yIChpaSkgTGljZW5zZWXigJlzIHByb2R1Y3RzIG9yIG90aGVyIHJlbGF0ZWQKK3RlY2hub2xvZ2llcywgcmVzcGVjdGl2ZWx5LCB3aXRob3V0IHRoZSBwYXltZW50IG9mIGFueSByb3lhbHRpZXMgb3IgZmVlcy4KKworMi4gUmVzaWR1YWwgUmlnaHRzLiBMaWNlbnNlZSBhZ3JlZXMgdGhhdCBOVklESUEgc2hhbGwgYmUgZnJlZSB0byB1c2UgYW55CitnZW5lcmFsIGtub3dsZWRnZSwgc2tpbGxzIGFuZCBleHBlcmllbmNlLCAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sCitpZGVhcywgY29uY2VwdHMsIGtub3ctaG93LCBvciB0ZWNobmlxdWVzKSAo4oCcUmVzaWR1YWxz4oCdKSwgY29udGFpbmVkIGluIHRoZSAoaSkKK0ZlZWRiYWNrIHByb3ZpZGVkIGJ5IExpY2Vuc2VlIHRvIE5WSURJQTsgKGlpKSBMaWNlbnNlZeKAmXMgcHJvZHVjdHMgc2hhcmVkIG9yCitkaXNjbG9zZWQgdG8gTlZJRElBIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgRmVlZGJhY2s7IG9yIChjKSBMaWNlbnNlZeKAmXMKK2NvbmZpZGVudGlhbCBpbmZvcm1hdGlvbiB2b2x1bnRhcmlseSBwcm92aWRlZCB0byBOVklESUEgaW4gY29ubmVjdGlvbiB3aXRoIHRoZQorRmVlZGJhY2ssIHdoaWNoIGFyZSByZXRhaW5lZCBpbiB0aGUgbWVtb3JpZXMgb2YgTlZJRElB4oCZcyBlbXBsb3llZXMsIGFnZW50cywgb3IKK2NvbnRyYWN0b3JzIHdobyBoYXZlIGhhZCBhY2Nlc3MgdG8gc3VjaCAoaSkgRmVlZGJhY2sgcHJvdmlkZWQgYnkgTGljZW5zZWUgdG8KK05WSURJQTsgKGlpKSBMaWNlbnNlZeKAmXMgcHJvZHVjdHM7IG9yIChjKSBMaWNlbnNlZeKAmXMgY29uZmlkZW50aWFsIGluZm9ybWF0aW9uCit2b2x1bnRhcmlseSBwcm92aWRlZCB0byBOVklESUEsIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgRmVlZGJhY2suICBTdWJqZWN0IHRvCit0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQsIE5WSURJQeKAmXMgZW1wbG95ZWVzLCBhZ2VudHMsIG9yCitjb250cmFjdG9ycyBzaGFsbCBub3QgYmUgcHJldmVudGVkIGZyb20gdXNpbmcgUmVzaWR1YWxzIGFzIHBhcnQgb2Ygc3VjaAorZW1wbG95ZWXigJlzLCBhZ2VudOKAmXMgb3IgY29udHJhY3RvcuKAmXMgZ2VuZXJhbCBrbm93bGVkZ2UsIHNraWxscywgZXhwZXJpZW5jZSwKK3RhbGVudCwgYW5kL29yIGV4cGVydGlzZS4gIE5WSURJQSBzaGFsbCBub3QgaGF2ZSBhbnkgb2JsaWdhdGlvbiB0byBsaW1pdCBvcgorcmVzdHJpY3QgdGhlIGFzc2lnbm1lbnQgb2Ygc3VjaCBlbXBsb3llZXMsIGFnZW50cyBvciBjb250cmFjdG9ycyBvciB0byBwYXkKK3JveWFsdGllcyBmb3IgYW55IHdvcmsgcmVzdWx0aW5nIGZyb20gdGhlIHVzZSBvZiBSZXNpZHVhbHMuCisKKzMuIERpc2NsYWltZXIgb2YgV2FycmFudHkuIEZFRURCQUNLIEZST00gRUlUSEVSIFBBUlRZIElTIFBST1ZJREVEIEZPUiBUSEUgT1RIRVIKK1BBUlRZ4oCZUyBVU0Ug4oCcQVMgSVPigJ0gQU5EIEJPVEggUEFSVElFUyBESVNDTEFJTSBBTEwgV0FSUkFOVElFUywgRVhQUkVTUywgSU1QTElFRAorQU5EIFNUQVRVVE9SWSBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIEJPVEggUEFSVElFUyBETyBOT1QKK1JFUFJFU0VOVCBPUiBXQVJSQU5UIFRIQVQgVEhFIEZFRURCQUNLIFdJTEwgTUVFVCBUSEUgT1RIRVIgUEFSVFnigJlTIFJFUVVJUkVNRU5UUworT1IgVEhBVCBUSEUgT1BFUkFUSU9OIE9SIElNUExFTUVOVEFUSU9OIE9GIFRIRSBGRUVEQkFDSyBXSUxMIEJFIFVOSU5URVJSVVBURUQKK09SIEVSUk9SLUZSRUUuCisKKzQuIE5vIExpYWJpbGl0eSBmb3IgQ29uc2VxdWVudGlhbCBEYW1hZ2VzLiBUTyBUSEUgTUFYSU1VTSBFWFRFTlQgUEVSTUlUVEVEIEJZCitBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgU0hBTEwgRUlUSEVSIFBBUlRZIE9SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUgorQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgV0hBVFNPRVZFUgorKElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEJVU0lORVNTIFBST0ZJVFMsIEJVU0lORVNTCitJTlRFUlJVUFRJT04sIExPU1MgT0YgQlVTSU5FU1MgSU5GT1JNQVRJT04sIE9SIEFOWSBPVEhFUiBQRUNVTklBUlkgTE9TUykKK0FSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT0YgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgRkVFREJBQ0ssIEVWRU4gSUYgVEhFIE9USEVSCitQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzUuIEZyZWVkb20gb2YgQWN0aW9uLiAgTGljZW5zZWUgYWdyZWVzIHRoYXQgdGhpcyBBZ3JlZW1lbnQgaXMgbm9uZXhjbHVzaXZlIGFuZAorTlZJRElBIG1heSBjdXJyZW50bHkgb3IgaW4gdGhlIGZ1dHVyZSBiZSBkZXZlbG9waW5nIHNvZnR3YXJlLCBvdGhlciB0ZWNobm9sb2d5CitvciBjb25maWRlbnRpYWwgaW5mb3JtYXRpb24gaW50ZXJuYWxseSwgb3IgcmVjZWl2aW5nIGNvbmZpZGVudGlhbCBpbmZvcm1hdGlvbgorZnJvbSBvdGhlciBwYXJ0aWVzIHRoYXQgbWF5YmUgc2ltaWxhciB0byB0aGUgRmVlZGJhY2sgYW5kIExpY2Vuc2Vl4oCZcworY29uZmlkZW50aWFsIGluZm9ybWF0aW9uIChhcyBwcm92aWRlZCBpbiBTZWN0aW9uIDcuMS4yIGFib3ZlKSwgd2hpY2ggbWF5IGJlCitwcm92aWRlZCB0byBOVklESUEgaW4gY29ubmVjdGlvbiB3aXRoIEZlZWRiYWNrIGJ5IExpY2Vuc2VlLiAgQWNjb3JkaW5nbHksCitMaWNlbnNlZSBhZ3JlZXMgdGhhdCBub3RoaW5nIGluIHRoaXMgQWdyZWVtZW50IHdpbGwgYmUgY29uc3RydWVkIGFzIGEKK3JlcHJlc2VudGF0aW9uIG9yIGluZmVyZW5jZSB0aGF0IE5WSURJQSB3aWxsIG5vdCBkZXZlbG9wLCBkZXNpZ24sIG1hbnVmYWN0dXJlLAorYWNxdWlyZSwgbWFya2V0IHByb2R1Y3RzLCBvciBoYXZlIHByb2R1Y3RzIGRldmVsb3BlZCwgZGVzaWduZWQsIG1hbnVmYWN0dXJlZCwKK2FjcXVpcmVkLCBvciBtYXJrZXRlZCBmb3IgTlZJRElBLCB0aGF0IGNvbXBldGUgd2l0aCB0aGUgTGljZW5zZWXigJlzIHByb2R1Y3RzIG9yCitjb25maWRlbnRpYWwgaW5mb3JtYXRpb24uCisKKzYuIE5vIEltcGxpZWQgTGljZW5zZXMuICBVbmRlciBubyBjaXJjdW1zdGFuY2VzIHNob3VsZCBhbnl0aGluZyBpbiB0aGlzCitBZ3JlZW1lbnQgYmUgY29uc3RydWVkIGFzIE5WSURJQSBncmFudGluZyBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3IKK290aGVyd2lzZSwgKGkpIGEgbGljZW5zZSB0byBhbnkgTlZJRElBIHByb2R1Y3Qgb3IgdGVjaG5vbG9neSBvdGhlciB0aGFuIHRoZSBTT0ZUV0FSRTsgb3IKKyhpaSkgYW55IGFkZGl0aW9uYWwgbGljZW5zZSByaWdodHMgZm9yIHRoZSBTT0ZUV0FSRSBvdGhlciB0aGFuIHRoZSBsaWNlbnNlcworZXhwcmVzc2x5IGdyYW50ZWQgaW4gdGhpcyBBZ3JlZW1lbnQuCisKKworNy4yIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMSUNFTlNFIGlzIGluY29uc2lzdGVudCB3aXRoLCBvciBjYW5ub3QgYmUgZnVsbHkKK2VuZm9yY2VkIHVuZGVyLCB0aGUgbGF3LCBzdWNoIHByb3Zpc2lvbiB3aWxsIGJlIGNvbnN0cnVlZCBhcyBsaW1pdGVkIHRvIHRoZQorZXh0ZW50IG5lY2Vzc2FyeSB0byBiZSBjb25zaXN0ZW50IHdpdGggYW5kIGZ1bGx5IGVuZm9yY2VhYmxlIHVuZGVyIHRoZSBsYXcuCitUaGlzIExJQ0VOU0UgaXMgdGhlIGZpbmFsLCBjb21wbGV0ZSBhbmQgZXhjbHVzaXZlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzCityZWxhdGluZyB0byB0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLCBhbmQgc3VwZXJzZWRlcyBhbGwgcHJpb3Igb3IKK2NvbnRlbXBvcmFuZW91cyB1bmRlcnN0YW5kaW5ncyBhbmQgYWdyZWVtZW50cyByZWxhdGluZyB0byBzdWNoIHN1YmplY3QgbWF0dGVyLAord2hldGhlciBvcmFsIG9yIHdyaXR0ZW4uIFRoaXMgTElDRU5TRSBtYXkgb25seSBiZSBtb2RpZmllZCBpbiB3cml0aW5nIHNpZ25lZAorYnkgYW4gYXV0aG9yaXplZCBvZmZpY2VyIG9mIE5WSURJQS4gTGljZW5zZWUgYWdyZWVzIHRoYXQgaXQgd2lsbCBub3Qgc2hpcCwKK3RyYW5zZmVyIG9yIGV4cG9ydCB0aGUgU09GVFdBUkUgaW50byBhbnkgY291bnRyeSwgb3IgdXNlIHRoZSBTT0ZUV0FSRSBpbiBhbnkKK21hbm5lciwgcHJvaGliaXRlZCBieSB0aGUgVW5pdGVkIFN0YXRlcyBCdXJlYXUgb2YgSW5kdXN0cnkgYW5kIFNlY3VyaXR5IG9yCithbnkgZXhwb3J0IGxhd3MsIHJlc3RyaWN0aW9ucyBvciByZWd1bGF0aW9ucy4KKworCitBVFRBQ0hNRU5UIEEKKworUmVkaXN0cmlidXRhYmxlIENvbXBvbmVudHMKKworCitUaGUgZm9sbG93aW5nIGZpbGVzIG1heSBiZSByZWRpc3RyaWJ1dGVkIHdpdGggc29mdHdhcmUgYXBwbGljYXRpb25zIGRldmVsb3BlZAorYnkgTGljZW5zZWUuCisKK05QUCBoZWFkZXJzICAgICBucHAuaCwgbnBwY29yZS5oLAorICAgICAgICAgICAgICAgIG5wcGRlZnMuaCwgbnBwaS5oLAorICAgICAgICAgICAgICAgIG5wcHZlcnNpb24uaAorCitXaW5kb3dzICAgICAgICAgbnBwLmxpYiwKKyAgICAgICAgICAgICAgICBucHAzMl8zMl8xNi5kbGwsCisgICAgICAgICAgICAgICAgbnBwNjRfMzJfMTYuZGxsLAorCitNYWNPUyAgICAgICAgICAgbGlibnBwMzIuMy4yLmR5bGliLAorICAgICAgICAgICAgICAgIGxpYm5wcDY0LjMuMi5keWxpYiwKKworTGludXggICAgICAgICAgIGxpYm5wcDY0LnNvLjMuMi4xNiwKKyAgICAgICAgICAgICAgICBsaWJucHAzMi5zby4zLjIuMTYsCisKK1RoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXBwbHkgdG8gTGljZW5zZWXigJlzIHVzZSBvZiB0aGUgY29tcG9uZW50cworbGlzdGVkIGFib3ZlICjigJxSZWRpc3RyaWJ1dGFibGUgQ29tcG9uZW50c+KAnSkgb2YgdGhlIFNPRlRXQVJFOgorCisxLiBDdXN0b21lciBtYXkgdHJhbnNmZXIsIHJlZGlzdHJpYnV0ZSBvciBzdWJsaWNlbnNlLCB0aGUgbGljZW5zZSByaWdodHMKK3B1cnN1YW50IHRvIFNlY3Rpb24gMi4xLjEgb2YgdGhpcyBBZ3JlZW1lbnQgaW4gY29ubmVjdGlvbiB3aXRoIHRoZQorUmVkaXN0cmlidXRhYmxlIENvbXBvbmVudHMgdG8gZW5kIHVzZXJzIG9mIExpY2Vuc2Vl4oCZcyBwcm9kdWN0cy4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL05XTi1FVUxBIGIvbGljZW5zZXMvTldOLUVVTEEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTkyYTE0MwotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL05XTi1FVUxBCkBAIC0wLDAgKzEsNTYgQEAKK0VORC1VU0VSIExJQ0VOU0UgQUdSRUVNRU5UCisKK0lNUE9SVEFOVCAtIFJFQUQgQ0FSRUZVTExZOiAgUGxlYXNlIGJlIHN1cmUgdG8gY2FyZWZ1bGx5IHJlYWQgYW5kIHVuZGVyc3RhbmQgYWxsIG9mIHRoZSByaWdodHMgYW5kIHJlc3RyaWN0aW9ucyBkZXNjcmliZWQgaW4gdGhpcyBFbmQtVXNlciBMaWNlbnNlIEFncmVlbWVudCAoIkVVTEEiKS4KKworQUdSRUVNRU5UCisKK1RoaXMgZG9jdW1lbnQgaXMgYW4gYWdyZWVtZW50IGJldHdlZW4geW91IGFuZCBBdGFyaSwgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZWQgY29tcGFuaWVzICgiQ29tcGFueSIpLiAgVGhlIGVuY2xvc2VkIHNvZnR3YXJlIGdhbWUgZGlzYyhzKSwgY2FydHJpZGdlIG9yIEdhbWUgUGFrICgiU29mdHdhcmUiKSBhbmQgYW55IGFjY29tcGFueWluZyBwcmludGVkIG1hdGVyaWFscyBhcmUgbGljZW5zZWQgdG8geW91IG9ubHkgb24gdGhlIGNvbmRpdGlvbiB0aGF0IHlvdSBhY2NlcHQgYWxsIG9mIHRoZSB0ZXJtcyBjb250YWluZWQgaW4gdGhpcyBFVUxBLgorCitCeSBvcGVuaW5nIHRoaXMgcGFja2FnZSBhbmQgaW5zdGFsbGluZyBvciBvdGhlcndpc2UgdXNpbmcgdGhlIFNvZnR3YXJlIHlvdSBhZ3JlZSB0byBiZSBib3VuZCBieSB0aGUgdGVybXMgb2YgdGhpcyBFVUxBLiAgSWYgeW91IGRvIG5vdCBhZ3JlZSB0byB0aGUgdGVybXMgb2YgdGhpcyBFVUxBIHlvdSBtYXkgbm90IGluc3RhbGwgb3IgdXNlIHRoZSBTb2Z0d2FyZSBhbmQgd2l0aGluIDE1IGRheXMgb2YgcHVyY2hhc2UgeW91IG11c3QgY2FsbCB0aGUgVGVjaCBTdXBwb3J0IHRlbGVwaG9uZSBudW1iZXIgbGlzdGVkIGluIHRoZSBtYW51YWwgYWNjb21wYW55aW5nIHRoZSBTb2Z0d2FyZSAodGhlICJNYW51YWwiKS4gIFNlbGVjdCB0aGUgQXV0b21hdGVkIFBob25lIFN5c3RlbSdzIE1haW4gTWVudSBvcHRpb24gZm9yIENvbnN1bWVyIFNlcnZpY2VzIGFuZCBmb2xsb3cgdGhlIHByb21wdHMuCisKK1lvdSB3aWxsIGJlIGdpdmVuIGEgUmV0dXJuIE1lcmNoYW5kaXNlIEF1dGhvcml6YXRpb24gbnVtYmVyIChSTUEgIykgYnkgdGhlIHRlY2huaWNpYW4uICBZb3UgdGhlbiBoYXZlIDE1IGRheXMgZnJvbSB0aGUgZGF0ZSBvZiB0aGlzIGNvbnRhY3QgdG8gcmV0dXJuIHRoZSBTb2Z0d2FyZSBpbiBpdHMgcHJvdGVjdGl2ZSBjb3ZlcmluZywgdGhlIE1hbnVhbCBhbmQgdGhlIG9yaWdpbmFsIHNhbGVzIGludm9pY2UgdG8gdGhlIGFkZHJlc3Mgc3VwcGxpZWQgdG8geW91LgorCitJZiB0aGlzIGlzIGEgUEMgcHJvZHVjdCwgd2hlbiB5b3UgaW5zdGFsbCB0aGUgU29mdHdhcmUgeW91IHdpbGwgYmUgYXNrZWQgdG8gcmV2aWV3IGFuZCBlaXRoZXIgYWNjZXB0IG9yIG5vdCBhY2NlcHQgdGhlIHRlcm1zIG9mIHRoZSBFVUxBIGJ5IGNsaWNraW5nIHRoZSAiSSBBY2NlcHQiIGJ1dHRvbi4gIEJ5IGNsaWNraW5nIHRoZSAiSSBBY2NlcHQiIGJ1dHRvbiB5b3UgYWNrbm93bGVkZ2UgdGhhdCB5b3UgaGF2ZSByZWFkIHRoZSBFVUxBLCB1bmRlcnN0YW5kIGl0IGFuZCBhZ3JlZSB0byBiZSBib3VuZCBieSBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuCisKK0NPUFlSSUdIVAorVGhlIFNvZnR3YXJlIGlzIHByb3RlY3RlZCBieSBjb3B5cmlnaHQgbGF3cyBhbmQgaW50ZXJuYXRpb25hbCBjb3B5cmlnaHQgdHJlYXRpZXMsIGFzIHdlbGwgYXMgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3MgYW5kIHRyZWF0aWVzLiAgQWxsIHRpdGxlIGFuZCBjb3B5cmlnaHRzIGluIGFuZCB0byB0aGUgU29mdHdhcmUgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gYW55IGltYWdlcywgcGhvdG9ncmFwaHMsIGFuaW1hdGlvbnMsIHZpZGVvLCBtdXNpYywgdGV4dCBhbmQgImFwcGxldHMiIGluY29ycG9yYXRlZCBpbnRvIHRoZSBTb2Z0d2FyZSkgYW5kIGFueSBwcmludGVkIG1hdGVyaWFscyBhY2NvbXBhbnlpbmcgdGhlIFNvZnR3YXJlIGFyZSBvd25lZCBieSB0aGUgQ29tcGFueSBvciBpdHMgTGljZW5zb3JzLgorCitHUkFOVCBPRiBMSUNFTlNFCitUaGUgU29mdHdhcmUgaXMgbGljZW5zZWQgYW5kIG5vdCBzb2xkIHRvIHlvdSBhbmQgaXRzIHVzZSBpcyBzdWJqZWN0IHRvIHRoaXMgRVVMQS4gIFRoZSBDb21wYW55IGdyYW50cyB5b3UgYSBsaW1pdGVkLCBwZXJzb25hbCwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlIHRvIHVzZSB0aGUgU29mdHdhcmUgaW4gdGhlIG1hbm5lciBkZXNjcmliZWQgaW4gdGhlIHVzZXIgZG9jdW1lbnRhdGlvbi4gIFRoZSBDb21wYW55IHJlc2VydmVzIGFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIHRvIHlvdSBpbiB0aGlzIEVVTEEuCisKK1BFUk1JVFRFRCBVU0VTCisxLiBJZiB0aGUgU29mdHdhcmUgaXMgY29uZmlndXJlZCBmb3IgbG9hZGluZyBvbiBhIGhhcmQgZHJpdmUsIHlvdSBtYXkgaW5zdGFsbCBhbmQgdXNlIHRoZSBTb2Z0d2FyZSBvbiBhIHNpbmdsZSBjb21wdXRlci4KKzIuIFlvdSBtYXkgbWFrZSBhbmQgbWFpbnRhaW4gb25lIGNvcHkgb2YgdGhlIFNvZnR3YXJlIGZvciBiYWNrdXAgYW5kIGFyY2hpdmFsIHB1cnBvc2VzLCBwcm92aWRlZCB0aGF0IHRoZSBvcmlnaW5hbCBhbmQgY29weSBvZiB0aGUgU29mdHdhcmUgYXJlIGtlcHQgaW4geW91ciBwb3NzZXNzaW9uLgorMy4gWW91IG1heSBwZXJtYW5lbnRseSB0cmFuc2ZlciBhbGwgeW91ciByaWdodHMgdW5kZXIgdGhpcyBFVUxBLCBwcm92aWRlZCB5b3UgcmV0YWluIG5vIGNvcGllcywgeW91IHRyYW5zZmVyIGFsbCBvZiB0aGUgU29mdHdhcmUgKGluY2x1ZGluZyBhbGwgY29tcG9uZW50IHBhcnRzLCB0aGUgbWVkaWEgYW5kIHByaW50ZWQgbWF0ZXJpYWxzIGFuZCBhbnkgdXBncmFkZXMpIGFuZCB0aGUgcmVjaXBpZW50IHJlYWRzIGFuZCBhY2NlcHRzIHRoaXMgRVVMQS4KKworUkVTVFJJQ1RJT05TCisxLiBZb3UgbWF5IG5vdCBkZWxldGUgb3Igb2JzY3VyZSBhbnkgY29weXJpZ2h0LCB0cmFkZW1hcmsgb3Igb3RoZXIgcHJvcHJpZXRhcnkgbm90aWNlIG9uIHRoZSBTb2Z0d2FyZSBvciBhY2NvbXBhbnlpbmcgcHJpbnRlZCBtYXRlcmlhbHMuCisyLiBZb3UgbWF5IG5vdCBkZWNvbXBpbGUsIG1vZGlmeSwgcmV2ZXJzZSBlbmdpbmVlciwgZGlzYXNzZW1ibGUgb3Igb3RoZXJ3aXNlIHJlcHJvZHVjZSB0aGUgU29mdHdhcmUuCiszLiBZb3UgbWF5IG5vdCBjb3B5LCByZW50LCBsZWFzZSwgc3VibGljZW5zZSwgZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSB0aGUgU29mdHdhcmUsIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBTb2Z0d2FyZSAoZXhjZXB0IHRvIHRoZSBleHRlbnQgZXhwcmVzc2x5IHBlcm1pdHRlZCBpbiB0aGUgRWRpdG9yIGFuZCBFbmQtVXNlciBWYXJpYXRpb24gc2VjdGlvbiBvZiB0aGlzIEFncmVlbWVudCBvciBvdGhlciBkb2N1bWVudGF0aW9uIGFjY29tcGFueWluZyB0aGUgU29mdHdhcmUpIG9yIG90aGVyd2lzZSBjb21tZXJjaWFsbHkgZXhwbG9pdCB0aGUgU29mdHdhcmUuCis0LiBZb3UgbWF5IG5vdCBlbGVjdHJvbmljYWxseSB0cmFuc21pdCB0aGUgU29mdHdhcmUgZnJvbSBvbmUgY29tcHV0ZXIsIGNvbnNvbGUgb3Igb3RoZXIgcGxhdGZvcm0gdG8gYW5vdGhlciBvciBvdmVyIGEgbmV0d29yay4KKzUuIFlvdSBtYXkgbm90IHVzZSBhbnkgYmFja3VwIG9yIGFyY2hpdmFsIGNvcHkgb2YgdGhlIFNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSBvdGhlciB0aGFuIHRvIHJlcGxhY2UgdGhlIG9yaWdpbmFsIGNvcHkgaW4gdGhlIGV2ZW50IGl0J3MgZGVzdHJveWVkIG9yIGJlY29tZXMgZGVmZWN0aXZlLgorCitFRElUT1IgQU5EIEVORC1VU0VSIFZBUklBVElPTlMKK0lmIHRoZSBTb2Z0d2FyZSBpbmNsdWRlcyBhIGZlYXR1cmUgdGhhdCBhbGxvd3MgeW91IHRvIG1vZGlmeSB0aGUgU29mdHdhcmUgb3IgdG8gY29uc3RydWN0IG5ldyB2YXJpYXRpb25zIChhbiAiRWRpdG9yIiksIHlvdSBtYXkgdXNlIHN1Y2ggRWRpdG9yIHRvIGNyZWF0ZSBtb2RpZmljYXRpb25zIG9yIGVuaGFuY2VtZW50cyB0byB0aGUgU29mdHdhcmUsIGluY2x1ZGluZyB0aGUgY29uc3RydWN0aW9uIG9mIG5ldyBsZXZlbHMgKGNvbGxlY3RpdmVseSB0aGUgIlZhcmlhdGlvbnMiKSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9ucy4gIFlvdXIgVmFyaWF0aW9uczogKGkpIG11c3Qgb25seSB3b3JrIHdpdGggdGhlIGZ1bGwsIHJlZ2lzdGVyZWQgY29weSBvZiB0aGUgU29mdHdhcmU7IChpaSkgbXVzdCBub3QgY29udGFpbiBtb2RpZmljYXRpb25zIHRvIGFueSBleGVjdXRhYmxlIGZpbGU7IChpaWkpIG11c3Qgbm90IGNvbnRhaW4gYW55IGxpYmVsb3VzLCBkZWZhbWF0b3J5IG9yIG90aGVyIGlsbGVnYWwgbWF0ZXJpYWwsIG1hdGVyaWFsIHRoYXQgaXMgc2NhbmRhbG91cyBvciBpbnZhZGVzIHRoZSByaWdodHMgb2YgcHJpdmFjeSBvciBwdWJsaWNpdHkgb2YgYW55IHRoaXJkIHBhcnR5OyAoaXYpIG11c3Qgbm90IGNvbnRhaW4gYW55IHRyYWRlbWFya3MsIGNvcHlyaWdodC1wcm90ZWN0ZWQgd29yayBvciBvdGhlciBwcm9wZXJ0eSBvZiB0aGlyZCBwYXJ0aWVzOyBhbmQgKHYpIG1heSBub3QgYmUgY29tbWVyY2lhbGx5IGV4cGxvaXRlZCBieSB5b3UsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gbWFraW5nIHN1Y2ggVmFyaWF0aW9ucyBhdmFpbGFibGUgZm9yIHNhbGUgb3IgYXMgcGFydCBvZiBhIHBheS1wZXItcGxheSBvciB0aW1lc2hhcmluZyBzZXJ2aWNlLgorCitURVJNSU5BVElPTgorVGhpcyBFVUxBIGlzIGVmZmVjdGl2ZSB1bnRpbCB0ZXJtaW5hdGVkLiAgWW91IG1heSB0ZXJtaW5hdGUgdGhpcyBFVUxBIGF0IGFueSB0aW1lIGJ5IGRlc3Ryb3lpbmcgdGhlIFNvZnR3YXJlLiAgVGhpcyBFVUxBIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgd2l0aG91dCBub3RpY2UgZnJvbSB0aGUgQ29tcGFueSBpZiB5b3UgZmFpbCB0byBjb21wbHkgd2l0aCBhbnkgcHJvdmlzaW9ucyBvZiB0aGlzIEVVTEEuICBBbGwgcHJvdmlzaW9ucyBvZiB0aGlzIEVVTEEgYXMgdG8gd2FycmFudGllcywgbGltaXRhdGlvbiBvZiBsaWFiaWxpdHksIHJlbWVkaWVzIGFuZCBkYW1hZ2VzIHdpbGwgc3Vydml2ZSB0ZXJtaW5hdGlvbi4KKworTElNSVRFRCBXQVJSQU5UWSBBTkQgRElTQ0xBSU1FUiBPRiBXQVJSQU5USUVTCitZb3UgYXJlIGF3YXJlIGFuZCBhZ3JlZSB0aGF0IHVzZSBvZiB0aGUgU29mdHdhcmUgYW5kIHRoZSBtZWRpYSBvbiB3aGljaCBpcyByZWNvcmRlZCBpcyBhdCB5b3VyIHNvbGUgcmlzay4gIFRoZSBTb2Z0d2FyZSBhbmQgbWVkaWEgYXJlIHN1cHBsaWVkICJBUyBJUy4iICBVbmxlc3Mgb3RoZXJ3aXNlIHByb3ZpZGVkIGJ5IGFwcGxpY2FibGUgbGF3LCB0aGUgQ29tcGFueSB3YXJyYW50cyB0byB0aGUgb3JpZ2luYWwgcHVyY2hhc2VyIG9mIHRoaXMgcHJvZHVjdCB0aGF0IHRoZSBTb2Z0d2FyZSBzdG9yYWdlIG1lZGl1bSB3aWxsIGJlIGZyZWUgZnJvbSBkZWZlY3RzIGluIG1hdGVyaWFscyBhbmQgd29ya21hbnNoaXAgdW5kZXIgbm9ybWFsIHVzZSBmb3IgbmluZXR5ICg5MCkgZGF5cyBmcm9tIHRoZSBkYXRlIG9mIHB1cmNoYXNlLiAgVGhlIHdhcnJhbnR5IGlzIHZvaWQgaWYgdGhlIGRlZmVjdCBoYXMgYXJpc2VuIHRocm91Z2ggYWNjaWRlbnQsIGFidXNlLCBuZWdsZWN0IG9yIG1pc2FwcGxpY2F0aW9uLiAgSWYgdGhlIFNvZnR3YXJlIGZhaWxzIHRvIGNvbmZvcm0gdG8gdGhpcyB3YXJyYW50eSwgeW91IG1heSBhdCB5b3VyIHNvbGUgYW5kIGV4Y2x1c2l2ZSByZW1lZHksIG9idGFpbiBhIHJlcGxhY2VtZW50IGZyZWUgb2YgY2hhcmdlIGlmIHlvdSByZXR1cm4gdGhlIGRlZmVjdGl2ZSBTb2Z0d2FyZS4gIEZvbGxvdyB0aGUgUHJvZHVjdCBSZXR1cm4gUHJvY2VkdXJlcyBkZXNjcmliZWQgaW4gdGhlIE1hbnVhbC4gIFRoZSBDb21wYW55IGRvZXMgbm90IHdhcnJhbnQgdGhhdCB0aGUgU29mdHdhcmUgb3IgaXRzIG9wZXJhdGlvbnMgb3IgZnVuY3Rpb25zIHdpbGwgbWVldCB5b3VyIHJlcXVpcmVtZW50cywgb3IgdGhhdCB0aGUgdXNlIG9mIHRoZSBTb2Z0d2FyZSB3aWxsIGJlIHdpdGhvdXQgaW50ZXJydXB0aW9uIG9yIGVycm9yLgorCitUTyBUSEUgRlVMTEVTVCBFWFRFTlQgUEVSTUlTU0lCTEUgVU5ERVIgQVBQTElDQUJMRSBMQVcsIEVYQ0VQVCBGT1IgVEhFIEVYUFJFU1MgV0FSUkFOVFkgU0VUIEZPUlRIIEFCT1ZFLCBUSEUgQ09NUEFOWSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEFORCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4gRVhDRVBUIEZPUiBUSEUgRVhQUkVTUyBXQVJSQU5UWSBTRVQgRk9SVEggQUJPVkUsIFRIRSBDT01QQU5ZIERPRVMgTk9UIFdBUlJBTlQsIEdVQVJBTlRFRSBPUiBNQUtFIEFOWSBSRVBSRVNFTlRBVElPTiBSRUdBUkRJTkcgVEhFIFVTRSBPUiBUSEUgUkVTVUxUUyBPRiBUSEUgVVNFIE9GIFRIRSBTT0ZUV0FSRSBJTiBURVJNUyBPRiBJVFMgQ09SUkVDVE5FU1MsIEFDQ1VSQUNZLCBSRUxJQUJJTElUWSwgQ1VSUkVOVE5FU1MgT1IgT1RIRVJXSVNFLiAgU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIE9SIExJTUlUQVRJT05TIE9OIElNUExJRUQgV0FSUkFOVElFUywgU08gVEhFIEFCT1ZFIEVYQ0xVU0lPTlMgQU5EIExJTUlUQVRJT05TIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCitMSU1JVEFUSU9OIE9GIExJQUJJTElUWQorCitJTiBOTyBFVkVOVCBXSUxMIFRIRSBDT01QQU5ZIE9SIElUUyBFTVBMT1lFRVMgT1IgTElDRU5TT1JTIEJFIExJQUJMRSBGT1IgQU5ZIElOQ0lERU5UQUwsIElORElSRUNULCBTUEVDSUFMLCBDT05TRVFVRU5USUFMIE9SIFBVTklUSVZFIERBTUFHRVMsIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgKElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBJTkpVUlkgVE8gUEVSU09OIE9SIFBST1BFUlRZLCBGT1IgTE9TUyBPRiBQUk9GSVRTLCBCVVNJTkVTUyBJTlRFUlJVUFRJT04sIExPU1MgT0YgQlVTSU5FU1MgSU5GT1JNQVRJT04sIExPU1MgT0YgUFJJVkFDWSwgRkFJTFVSRSBUTyBNRUVUIEFOWSBEVVRZIEFORCBORUdMSUdFTkNFKSBBUklTSU5HIE9VVCBPRiBPUiBJTiBBTlkgV0FZIFJFTEFURUQgVE8gVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBTT0ZUV0FSRSwgRVZFTiBJRiBUSEUgQ09NUEFOWSBPUiBBTiBBVVRIT1JJWkVEIFJFUFJFU0VOVEFUSVZFIE9GIFRIRSBDT01QQU5ZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBMSUFCSUxJVFkgRk9SIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSEUgQUJPVkUgRVhDTFVTSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCitJTiBOTyBFVkVOVCBXSUxMIFRIRSBMSUFCSUxJVFkgT0YgVEhFIENPTVBBTlkgRk9SIERBTUFHRVMgV0lUSCBSRVNQRUNUIFRPIFRIRSBTT0ZUV0FSRSBFWENFRUQgVEhFIEFNT1VOVFMgQUNUVUFMTFkgUEFJRCBCWSBZT1UgRk9SIFRIRSBTT0ZUV0FSRS4KKworQ0hPSUNFIE9GIExBVyBBTkQgVkVOVUUKK1RoaXMgRVVMQSBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhIGFuZCB0aGUgU3RhdGUgb2YgTmV3IFlvcmssIGV4Y2x1c2l2ZSBvZiBpdHMgY29uZmxpY3RzIG9mIGxhdyBwcm92aXNpb25zLiAgVGhlIGV4Y2x1c2l2ZSB2ZW51ZSBmb3IgbGl0aWdhdGlvbiByZWdhcmRpbmcgb3IgYXJpc2luZyBmcm9tIHRoaXMgRVVMQSBpcyBOZXcgWW9yayBDb3VudHksIE5ldyBZb3JrIGFuZCB5b3UgYWdyZWUgdG8gc3VibWl0IHRvIHRoZSBKdXJpc2RpY3Rpb24gb2YgdGhlIGNvdXJ0cyBvZiBOZXcgWW9yayBDb3VudHksIE5ldyBZb3JrIGZvciBhbnkgc3VjaCBsaXRpZ2F0aW9uLgorCitNSVNDRUxMQU5FT1VTCitJZiBhbnkgcHJvdmlzaW9uIG9yIHBvcnRpb24gb2YgdGhpcyBFVUxBIGlzIGZvdW5kIHRvIGJlIHVubGF3ZnVsLCB2b2lkLCBvciBmb3IgYW55IHJlYXNvbiB1bmVuZm9yY2VhYmxlLCBpdCB3aWxsIGJlIHNldmVyZWQgZnJvbSBhbmQgaW4gbm8gd2F5IGFmZmVjdCB0aGUgdmFsaWRpdHkgb3IgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmluZyBwcm92aXNpb25zIG9mIHRoZSBFVUxBLgorCitUaGlzIEVVTEEgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB5b3UgYW5kIHRoZSBDb21wYW55IHJlZ2FyZGluZyB0aGUgU29mdHdhcmUgYW5kIGl0cyB1c2UuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9OZXJvLUFBQy1FVUxBIGIvbGljZW5zZXMvTmVyby1BQUMtRVVMQQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2U0ZDNmCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvTmVyby1BQUMtRVVMQQpAQCAtMCwwICsxLDcyIEBACisKK0lNUE9SVEFOVCBOT1RFCisKK05lcm8gQUcgbGljZW5zZXMgeW91IHRvIHVzZSB0aGlzIHNvZnR3YXJlIHBhY2thZ2UgZm9yIHBlcnNvbmFsIG5vbi1jb21tZXJjaWFsCithbmQvb3IgdGVjaG5vbG9neS1ldmFsdWF0aW9uIHB1cnBvc2VzLgorCitUaGlzIExpY2Vuc2UgZG9lcyBub3QgcHJvdmlkZSBhbnkgcmlnaHRzIHRvIHJlcHJvZHVjZSBhbmQvb3IgZGlzdHJpYnV0ZSB0aGlzCitzb2Z0d2FyZSBwYWNrYWdlIGluIHdob2xlIG9yIGluIGFueSBwYXJ0LgorCitBIHdyaXR0ZW4gbGljZW5zZSBhZ3JlZW1lbnQgd2l0aCBOZXJvIEFHIGlzIG5lZWRlZCBmb3IgYW55IENvbW1lcmNpYWwgdXNlIG9mCit0aGlzIHNvZnR3YXJlIHBhY2thZ2UsIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCBleHBsb2l0YXRpb24gb2YgcHJvZHVjdHMsCit3aGljaCBhcmUgaW5jb3Jwb3JhdGluZyBhbmQvb3IgdXNpbmcsIGluIHdob2xlIG9yIGluIHBhcnQsIGV4ZWN1dGFibGVzIHByb3ZpZGVkCitpbiB0aGlzIHNvZnR3YXJlIHBhY2thZ2UKKworUGxlYXNlIGNvbnRhY3QgTmVybyBBRyBmb3IgbGljZW5zaW5nIGd1aWRhbmNlLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIE5FUk8gQUcgVE8gWU9VICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKK1dBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVAorU0hBTEwgTkVSTyBBRyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVAorT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORworSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZCitPRiBTVUNIIERBTUFHRS4KKworSU4gTk8gRVZFTlQgV0lMTCBORVJPIE9SIElUUyBMSUNFTlNPUlMgQkUgTElBQkxFIFRPIFlPVSBGT1IgQU5ZIERBTUFHRVMsIENMQUlNUworT1IgQ09TVFMgV0hBVFNPRVZFUiBBUklTSU5HIEZST00gVEhJUyBMSUNFTlNFIEFORC9PUiBZT1VSIFVTRSBPRiBUSEUgU09GVFdBUkUgT1IKK0FOWSBDT01QT05FTlQgVEhFUkVPRiwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBBTlkgQ09OU0VRVUVOVElBTCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMIERBTUFHRVMsIExPU1MgT0YgVVNFIE9SIERBVEEsIElOVEVSUlVQVElPTiBPRiBCVVNJTkVTUywgT1IgQU5ZIExPU1QKK1BST0ZJVFMgT1IgTE9TVCBTQVZJTkdTLCBFVkVOIElGIEEgIE5FUk8gUkVQUkVTRU5UQVRJVkUgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggTE9TUywgREFNQUdFUywgQ0xBSU1TIE9SIENPU1RTIE9SIEZPUiBBTlkgQ0xBSU0gQlkgQU5ZIFRISVJECitQQVJUWS4gVEhFIEZPUkVHT0lORyBMSU1JVEFUSU9OUyBBTkQgRVhDTFVTSU9OUyBBUFBMWSBUTyBUSEUgRlVMTEVTVCBFWFRFTlQKK1BFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVyBJTiBZT1VSIEpVUklTRElDVElPTi4gTkVSTydTIEFHR1JFR0FURSBMSUFCSUxJVFkgQU5ECitUSEFUIE9GIElUUyBMSUNFTlNPUlMgVU5ERVIgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRISVMgTElDRU5TRSBTSEFMTCBCRSBMSU1JVEVECitUTyBURU4gVVMgRE9MTEFSUyAoVVMgJCAxMC4wMCkuIAorCitNUEVHLTQ6IFVzZSBvZiB0aGlzIHByb2R1Y3QgaW4gYW55IG1hbm5lciB0aGF0IGNvbXBsaWVzIHdpdGggdGhlIE1QRUctNCBBdWRpbworU3RhbmRhcmQgaXMgcHJvaGliaXRlZCwgZXhjZXB0IGZvciB1c2UgYnkgYSBjb25zdW1lciBlbmdhZ2luZyBpbiBwZXJzb25hbCBhbmQKK25vbi1jb21tZXJjaWFsIGFjdGl2aXRpZXMuCisKKworVGhpcyBMaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBjb21wbGV0ZSBhbmQgZXhjbHVzaXZlIGFncmVlbWVudCBiZXR3ZWVuIE5lcm8gYW5kCit5b3Ugd2l0aCByZXNwZWN0IHRvIHRoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YsIGFuZCBzdXBlcnNlZGVzIGFsbCBwcmlvciBvcmFsIG9yCit3cml0dGVuIHVuZGVyc3RhbmRpbmdzLCBjb21tdW5pY2F0aW9ucyBvciBhZ3JlZW1lbnRzIG5vdCBzcGVjaWZpY2FsbHkKK2luY29ycG9yYXRlZCBoZXJlaW4uIFlvdSBtYXkgbm90IGFzc2lnbiB5b3VyIHJpZ2h0cyBvciBvYmxpZ2F0aW9ucyBncmFudGVkIHVuZGVyCit0aGlzIExpY2Vuc2Ugd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIE5lcm8uIE5vbmUgb2YgdGhlIHByb3Zpc2lvbnMKK29mIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgdG8gaGF2ZSBiZWVuIHdhaXZlZCBieSBhbnkgYWN0IG9uIHRoZSBwYXJ0IG9mCitOZXJvLCBidXQgb25seSBieSBhbiBpbnN0cnVtZW50IGluIHdyaXRpbmcgc2lnbmVkIGJ5IGFuIGF1dGhvcml6ZWQgc2lnbmF0b3J5IG9mCitOZXJvLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIGFncmVlbWVudCBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUgZm9yIGFueSByZWFzb24sCitzdWNoIHByb3Zpc2lvbiB3aWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdAorZW5mb3JjZWFibGUsIGFuZCBzdWNoIGRlY2lzaW9uIHdpbGwgbm90IGFmZmVjdCB0aGUgZW5mb3JjZWFiaWxpdHkKKyhpKSAgb2Ygc3VjaCBwcm92aXNpb24gdW5kZXIgb3RoZXIgY2lyY3Vtc3RhbmNlcywgb3IKKyhpaSkgb2YgdGhlIHJlbWFpbmluZyBwcm92aXNpb25zIGhlcmVvZiB1bmRlciBhbGwgY2lyY3Vtc3RhbmNlcy4KK1RoZSBmYWlsdXJlIG9mIGVpdGhlciBwYXJ0eSB0byBlbmZvcmNlIGFueSBvZiB0aGUgcHJvdmlzaW9ucyBoZXJlb2Ygd2lsbCBub3QgYmUKK2NvbnN0cnVlZCB0byBiZSBhIHdhaXZlciBvZiB0aGUgcmlnaHQgb2Ygc3VjaCBwYXJ0eSB0aGVyZWFmdGVyIHRvIGVuZm9yY2Ugc3VjaAorcHJvdmlzaW9ucy4gQW55IGFuZCBhbGwgcmVtZWRpZXMgaGVyZWluIGV4cHJlc3NseSBjb25mZXJyZWQgdXBvbiBhIHBhcnR5IHdpbGwgYmUKK2RlZW1lZCBjdW11bGF0aXZlIGFuZCBub3QgZXhjbHVzaXZlIG9mIGFueSByZW1lZHkgY29uZmVycmVkIGhlcmVieSBvciBieSBsYXcsCithbmQgdGhlIGV4ZXJjaXNlIG9mIGFueSBvbmUgcmVtZWR5IHdpbGwgbm90IHByZWNsdWRlIHRoZSBleGVyY2lzZSBvZiBhbnkgb3RoZXIuCitIZWFkaW5ncyB3aWxsIG5vdCBiZSBjb25zaWRlcmVkIGluIGludGVycHJldGluZyB0aGlzIEFncmVlbWVudC4KK1RoaXMgTGljZW5zZSB3aWxsIGJlIGdvdmVybmVkIGJ5IGFuZCBjb25zdHJ1ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZQorc3Vic3RhbnRpdmUgbGF3cyBpbiBmb3JjZSBpbiB0aGUgRmVkZXJhbCBSZXB1YmxpYyBvZiBHZXJtYW55LiBUaGUgcmVzcGVjdGl2ZSBsYXcKK2NvdXJ0cyBvZiBLYXJsc3J1aGUsIEdlcm1hbnksIHNoYWxsIGhhdmUgbm9uLWV4Y2x1c2l2ZSBqdXJpc2RpY3Rpb24gb3ZlciBhbGwKK2Rpc3B1dGVzIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZS4gVGhpcyBMaWNlbnNlIHdpbGwgbm90IGJlIGdvdmVybmVkIGJ5IHRoZQorY29uZmxpY3Qgb2YgbGF3IHJ1bGVzIG9mIGFueSBqdXJpc2RpY3Rpb24gb3Igb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24KK2NvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcywgdGhlIGFwcGxpY2F0aW9uIG9mIHdoaWNoIGlzCitleHByZXNzbHkgZXhjbHVkZWQuCisKKworQ29weXJpZ2h0IDIwMDkgTmVybyBBRy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL05lcm8tRVVMQS1VUyBiL2xpY2Vuc2VzL05lcm8tRVVMQS1VUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDRiYzFiCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvTmVyby1FVUxBLVVTCkBAIC0wLDAgKzEsMTU0IEBACitFbmQtVXNlciBBZ3JlZW1lbnQKKworU29mdHdhcmUgUHJvZHVjdHM6IE9iamVjdCBvZiB0aGlzIGFncmVlbWVudCBpcyB0aGUgTmVybyBzb2Z0d2FyZTogTmVybyBMaW51eCAoIlNvZnR3YXJlIikKKworTGljZW5zb3I6IE5lcm8gQUcgKCJOZXJvIikKKworVEhJUyBJUyBBIExFR0FMIEFHUkVFTUVOVCBCRVRXRUVOIFlPVSwgVEhFICJFTkQgVVNFUiIsIEFORCBORVJPIEFHLCBJTSBTVE9FQ0tNQUVETEUgMTgsIDc2MzA3IEtBUkxTQkFELCBHRVJNQU5ZLgorCisKK0NPTkNMVVNJT04gT0YgVEhFIENPTlRSQUNUCisKK1RISVMgQUdSRUVNRU5UIElTIEVGRkVDVElWRQorCitBLkJZIE9QRU5JTkcgVEhFIFNFQUxFRCBQQUNLSU5HIE9GIE5FUk/igJlTIFNPRlRXQVJFIE9OIFRIRSAiRUZGRUNUSVZFIERBVEUsIiBZT1UgQVJFIEFHUkVFSU5HIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIEFHUkVFTUVOVC4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgT0YgVEhJUyBBR1JFRU1FTlQsIFBST01QVExZIFJFVFVSTiBUSEUgU09GVFdBUkUgQU5EIEFMTCBUSEUgQUNDT01QQU5ZSU5HIElURU1TIChJTkNMVURJTkcgV1JJVFRFTiBNQVRFUklBTFMgQU5EIEJJTkRFUlMgT1IgT1RIRVIgQ09OVEFJTkVSUykgVE8gVEhFIFBMQUNFIFlPVSBPQlRBSU5FRCBUSEVNIEZPUiBBIEZVTEwgUkVGVU5ELgorCitPUgorCitCLkJZIElOU1RBTExJTkcgVEhFIERPV05MT0FERUQgU09GVFdBUkUsIFlPVSBBUkUgQUdSRUVJTkcgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgQUdSRUVNRU5UIEJZIE1FQU5TIE9GIENMSUNLSU5HIFRIRSDigJxBQ0NFUFTigJ0gQlVUVE9OIE9OIFRIRSBXRUJTSVRFLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSBURVJNUyBPRiBUSElTIEFHUkVFTUVOVCwgUFJPTVBUTFkgVU5JTlNUQUxMIEFORCBERUxFVEUgVEhFIFNPRlRXQVJFIEFORCBBTEwgVEhFIEFDQ09NUEFOWUlORyBJVEVNUyAoSU5DTFVESU5HIERPQ1VNRU5UQVRJT04gT1IgTUFOVUFMUykuCitJRiBUSEUgVEVSTVMgT0YgVEhJUyBBR1JFRU1FTlQgQ09NUFJJU0UgQU4gT0ZGRVIgQlkgTkVSTywgVEhFTiBZT1VSIEFDQ0VQVEFOQ0UgSVMgRVhQUkVTU0xZIExJTUlURUQgVE8gVEhFIFRFUk1TIENPTlRBSU5FRCBIRVJFSU4uCisKKworVGhlIHRlcm1zIG9mIHlvdXIgbGljZW5zZSBhZ3JlZW1lbnQgKCJBZ3JlZW1lbnQiKSBmb3IgdGhlIFNvZnR3YXJlIGRlc2NyaWJlZCBhYm92ZSBkZXBlbmQgb24gd2hldGhlciB5b3UgcHVyY2hhc2VkIHRoZSBTb2Z0d2FyZSBmcm9tOgorCisoMSkgYW4gTmVybyBPRU0gcGFydG5lcjsgb3IKKworKDIpIE5lcm8gb3IgYW4gTmVybyBkaXN0cmlidXRvci4KKworSWYgdGhlIGpld2VsIGJveCBpbiB3aGljaCB5b3UgcmVjZWl2ZWQgdGhlIFNvZnR3YXJlIGluY2x1ZGVzIHRoZSB3b3JkICJPRU0iIG9uIGl0cyBjb3ZlciAob3Igb24gdGhlIENEIGl0c2VsZiksIHlvdSBoYXZlIGFjcXVpcmVkIGEgY29weSBvZiB0aGUgU29mdHdhcmUgZnJvbSBhbiBOZXJvIE9FTSBwYXJ0bmVyLgorCitJZiB0aGUgamV3ZWwgYm94IGluIHdoaWNoIHlvdSByZWNlaXZlZCB0aGUgU29mdHdhcmUgaGFzIG9ubHkgTmVybydzIGxhYmVsIG9uIGl0IGFuZCBkb2VzIG5vdCBpbmNsdWRlIHRoZSB3b3JkICJPRU0iIG9uIGl0cyBjb3ZlciAob3Igb24gdGhlIENEIGl0c2VsZiksIHlvdSBoYXZlIGFjcXVpcmVkIGEgY29weSBvZiB0aGUgU29mdHdhcmUgZnJvbSBlaXRoZXIgTmVybyBvciBhbiBOZXJvIGRpc3RyaWJ1dG9yLgorCitJZiB5b3UgZG93bmxvYWRlZCB0aGUgU29mdHdhcmUgd2hpY2ggYWxsb3dzIHlvdSB0byBpbnN0YWxsIG9ubHkgdW5kZXIgdGhlIGNvbmRpdGlvbiB0aGF0IHRoZSBTb2Z0d2FyZSBiZSBkaXN0cmlidXRlZCB3aXRoIGEgaGFyZHdhcmUgZGV2aWNlLCB5b3UgaGF2ZSBhY3F1aXJlZCBhIGNvcHkgb2YgdGhlIFNvZnR3YXJlIGZyb20gYW4gTmVybyBPRU0gcGFydG5lci4KKworCisKK0EuIExJQ0VOU0UgVEVSTVMgQU5EIENPTkRJVElPTlMgQVBQTElDQUJMRSBUTyBTT0ZUV0FSRSBBQ1FVSVJFRCBGUk9NIE9FTSBQQVJUTkVSCisKKworSS4gR3JhbnQgb2YgbGljZW5zZQorCitUaGlzIEFncmVlbWVudCBwZXJtaXRzIHlvdSB0byB1c2Ugb25lIGNvcHkgb2YgdGhlIFNvZnR3YXJlIGFjcXVpcmVkIHdpdGggdGhpcyBsaWNlbnNlIG9uIGFueSBzaW5nbGUgY29tcHV0ZXIgKCJPRU0gTGljZW5zZSIpLCBwcm92aWRlZCB0aGUgU29mdHdhcmUgaXMgaW4gdXNlIG9uIG9ubHkgb25lIGNvbXB1dGVyIGF0IGFueSBnaXZlbiB0aW1lLiBJZiB5b3UgaGF2ZSBhY3F1aXJlZCBhIG11bHRpcGxlIGxpY2Vuc2UgZm9yIHRoZSBTb2Z0d2FyZSwgdGhlbiBhdCBhbnkgb25lIHRpbWUgeW91IG1heSBoYXZlIGluIHVzZSB1cCB0byBhcyBtYW55IGNvcGllcyBvZiB0aGUgU29mdHdhcmUgYXMgeW91IGhhdmUgbGljZW5zZXMuIFRoZSBTb2Z0d2FyZSBpcyAiaW4gdXNlIiBvbiBhIGNvbXB1dGVyIHdoZW4gaXQgaXMgbG9hZGVkIGludG8gdGhlIHRlbXBvcmFyeSBtZW1vcnkgb3IgaW5zdGFsbGVkIGludG8gdGhlIHBlcm1hbmVudCBtZW1vcnkgKGUuZy4gaGFyZCBkaXNrLCBDRCBST00sIG9yIG90aGVyIHN0b3JhZ2UgZGV2aWNlKSBvZiB0aGF0IGNvbXB1dGVyLCBleGNlcHQgdGhhdCBhIGNvcHkgaW5zdGFsbGVkIG9uIGEgbmV0d29yayBzZXJ2ZXIgZm9yIHRoZSBzb2xlIHB1cnBvc2Ugb2YgZGlzdHJpYnV0aW9uIHRvIG90aGVyIGNvbXB1dGVycyBpcyBub3QgY29uc2lkZXJlZCAiaW4gdXNlIi4gSWYgdGhlIGFudGljaXBhdGVkIG51bWJlciBvZiB1c2VycyBvZiB0aGUgU29mdHdhcmUgbWlnaHQgZXhjZWVkIHRoZSBhdXRob3JpemVkIG51bWJlciBvZiBhcHBsaWNhYmxlIGxpY2Vuc2VzLCB0aGVuIHlvdSBtdXN0IGhhdmUgYSByZWFzb25hYmxlIG1lY2hhbmlzbSBvciBwcm9jZXNzIGluIHBsYWNlIHRvIGFzc3VyZSB0aGF0IHRoZSBudW1iZXIgb2YgY29uY3VycmVudCB1c2VzIG9mIHRoZSBTb2Z0d2FyZSBkb2VzIG5vdCBleGNlZWQgdGhlIG51bWJlciBvZiBsaWNlbnNlcy4KKworVEhFIE9FTSBMSUNFTlNFIEdSQU5URUQgSEVSRUlOIElTIE9OTFkgVkFMSUQgSUYgQUNRVUlSRUQgQVMgQSBCVU5ETEUgV0lUSCBDRC9EVkQtUkVDT1JESU5HIEhBUkRXQVJFLgorCisKK0lJLiBDb3B5cmlnaHQKKworVGhlIFNvZnR3YXJlIGlzIG93bmVkIGJ5IE5lcm8gb3IgaXRzIGxpY2Vuc29ycyBhbmQgaXMgcHJvdGVjdGVkIGJ5IGNvcHlyaWdodCBsYXdzLCBpbnRlcm5hdGlvbmFsIHRyZWF0eSBwcm92aXNpb25zLCBhbmQgb3RoZXIgbmF0aW9uYWwgbGF3cy4gWW91IGFncmVlIHRoYXQgeW91IGhhdmUgbm8gcmlnaHQsIHRpdGxlIG9yIGludGVyZXN0IGluIHRoZSBTb2Z0d2FyZSwgZXhjZXB0IGFzIHNldCBmb3J0aCBpbiBTdWJzZWN0aW9uIEkuIElmIHRoZSBTb2Z0d2FyZSBpcyBub3QgY29weSBwcm90ZWN0ZWQgeW91IG1heSBlaXRoZXIKKworKGEpIG1ha2Ugb25lIGNvcHkgb2YgdGhlIFNvZnR3YXJlIHNvbGVseSBmb3IgYmFja3VwIG9yIGFyY2hpdmFsIHB1cnBvc2VzLCBvcgorCisoYikgdHJhbnNmZXIgdGhlIFNvZnR3YXJlIHRvIGEgc2luZ2xlIGhhcmQgZGlzayBwcm92aWRlZCB5b3Uga2VlcCB0aGUgb3JpZ2luYWwgc29sZWx5IGZvciBiYWNrdXAgb3IgYXJjaGl2YWwgcHVycG9zZXMuCisKK1Byb2R1Y3QgbWFudWFsKHMpIG9yIHdyaXR0ZW4gbWF0ZXJpYWxzIGFjY29tcGFueWluZyB0aGUgU29mdHdhcmUgbWF5IG5vdCBiZSBjb3BpZWQuCisKKworSUlJLiBPdGhlciByZXN0cmljdGlvbnMKKworWW91IG1heSBub3QgcmVudCBvciBsZWFzZSB0aGUgU29mdHdhcmUsIGJ1dCB5b3UgbWF5IHBlcm1hbmVudGx5IHRyYW5zZmVyIHlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHByb3ZpZGVkIHRoYXQ6IChpKSB5b3UgdHJhbnNmZXIgYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUgYW5kIGFsbCB3cml0dGVuIG1hdGVyaWFsczsgKGlpKSB0aGUgcmVjaXBpZW50IGFncmVlcyB0byBiZSBib3VuZCBieSB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZCAoaWlpKSB5b3UgcmVtb3ZlIGFueSBhbmQgYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUgZnJvbSB5b3VyIGNvbXB1dGVyIGFuZCBjZWFzZSBhbnkgZnVydGhlciB1c2Ugb2YgdGhlIFNvZnR3YXJlLiBBbnkgdHJhbnNmZXIgbXVzdCBpbmNsdWRlIHRoZSBtb3N0IHJlY2VudCB1cGdyYWRlIGFuZCBhbGwgcHJpb3IgdmVyc2lvbnMuIFlvdSBtYXkgbm90IGNvcHkgdGhlIFNvZnR3YXJlIGV4Y2VwdCBhcyBleHByZXNzbHkgc2V0IGZvcnRoIGFib3ZlLiBZb3UgbWF5IG5vdCByZXZlcnNlIGVuZ2luZWVyLCBkZWNvbXBpbGUgb3IgZGlzYXNzZW1ibGUgdGhlIFNvZnR3YXJlLCBhbmQgeW91IGFyZSBub3QgYWxsb3dlZCB0byBwb3N0IG9yIG90aGVyd2lzZSBtYWtlIHRoZSBTb2Z0d2FyZSBhdmFpbGFibGUgb24gdGhlIFdvcmxkIFdpZGUgV2ViLiBJZiB5b3UgZGlkIG5vdCBhY3F1aXJlIHRoZSBTb2Z0d2FyZSBpbiBpdHMgb3JpZ2luYWwgcGFja2FnaW5nIGFuZCB5b3UgYXJlIG5vdCBhIHRyYW5zZmVyIHJlY2lwaWVudCB1bmRlciB0aGlzIHN1YnNlY3Rpb24sIHlvdSBhcmUgbm90IGxpY2Vuc2VkIHRvIHVzZSB0aGUgU29mdHdhcmUuCisKK1VwZ3JhZGVzOiBUaGUgc29mdHdhcmUgd2lsbCBiZSBtYWludGFpbmVkIGJ5IE5lcm8gYnkgbWVhbnMgb2YgdXBncmFkZXMuIEFuIHVwZ3JhZGUgaXMgYSBtYWpvciBmdW5jdGlvbmFsIGVuaGFuY2VtZW50IHRvIHRoZSBzb2Z0d2FyZSBhbmQgY2FuIGJlIHB1cmNoYXNlZCB2aWEgdGhlIE5lcm8gd2Vic2l0ZSAod3d3Lm5lcm8uY29tKS4gIFNob3VsZCB5b3UgcHVyY2hhc2UgYSBzb2Z0d2FyZSB1cGdyYWRlIHRvIGEgbmV3ZXIgdmVyc2lvbiwgeW91IHdpbGwgYmUgZW50aXRsZWQgdG8gdXNlIGJvdGggdGhlIG9yaWdpbmFsbHkgcHVyY2hhc2VkIE5lcm8gdmVyc2lvbiBhbmQgdGhlIHVwZ3JhZGUgYXMgc3RhbmRhbG9uZSBwcm9kdWN0cyBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHByb3Zpc2lvbnMgb2YgdGhpcyBBZ3JlZW1lbnQuIFRoZSBlbnRpdGxlbWVudCB0byB1c2UgdGhlIHVwZ3JhZGUgYXMgYSBzdGFuZGFsb25lIHByb2R1Y3QgaXMsIGhvd2V2ZXIsIGNvbnRpbmdlbnQgb24geW91ciBjb250aW51ZWQgcG9zc2Vzc2lvbiBvZiB0aGUgb3JpZ2luYWxseSBwdXJjaGFzZWQgTmVybyBzb2Z0d2FyZS4gVGhpcyB1cGdyYWRlIGFycmFuZ2VtZW50IHJlZmVycyBleGNsdXNpdmVseSB0byBhbGwgTmVybyB1cGdyYWRlcy4KKworCitJVi4gV2FycmFudGllcworCitORVJPIE1BS0VTIE5PIFdBUlJBTlRJRVMgVE8gWU9VIElOIENPTk5FQ1RJT04gV0lUSCBUSElTIE9FTSBMSUNFTlNFLCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBUaGUgcGFydHkgZnJvbSB3aG9tIHlvdSBwdXJjaGFzZWQgdGhlIHByb2R1Y3Qgd2l0aCB3aGljaCB0aGlzIFNvZnR3YXJlIGhhcyBiZWVuIGJ1bmRsZWQgbWF5IGhhdmUgd2FycmFudHkgYW5kL29yIHN1cHBvcnQgb2JsaWdhdGlvbnMgdG8geW91LgorCisKK1YuIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5CisKK0luIG5vIGV2ZW50IHNoYWxsIE5lcm8gb3IgaXRzIGxpY2Vuc29ycyBiZSBsaWFibGUgZm9yIGFueSBvdGhlciBkYW1hZ2VzIHdoYXRzb2V2ZXIgKGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBkYW1hZ2VzIGZvciBsb3NzIG9mIGJ1c2luZXNzIHByb2ZpdHMsIGJ1c2luZXNzIGludGVycnVwdGlvbiwgbG9zcyBvZiBidXNpbmVzcyBpbmZvcm1hdGlvbiwgb3Igb3RoZXIgcGVjdW5pYXJ5IGxvc3MpIGFyaXNpbmcgb3V0IG9mIHRoZSB1c2Ugb2Ygb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUgU29mdHdhcmUsIGV2ZW4gaWYgTmVybyBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuIEZ1cnRoZXIsIGluIG5vIGV2ZW50IHNoYWxsIE5lcm8gYmUgbGlhYmxlIGZvciBkYW1hZ2VzIG9yIGxvc3MsIGhvd3NvZXZlciBhcmlzaW5nIG9yIGNhdXNlZCwgd2hldGhlciBvciBub3QgYXJpc2luZyBmcm9tIGl0cyBuZWdsaWdlbmNlLCBpbiBleGNlc3Mgb2YgdGhlIGFtb3VudHMgcGFpZCBieSB5b3UgZm9yIGEgbGljZW5zZSB0byB0aGUgU29mdHdhcmUuICBUaGVzZSBsaW1pdGF0aW9ucyBzaGFsbCBhcHBseSBub3R3aXRoc3RhbmRpbmcgYW55IGZhaWx1cmUgb2YgZXNzZW50aWFsIHB1cnBvc2Ugb2YgYW55IGxpbWl0ZWQgcmVtZWR5LgorCisKK1ZJSS4gRHVyYXRpb24gb2YgdGhlIGFncmVlbWVudAorCitUaGUgQWdyZWVtZW50IHNoYWxsIHJlbWFpbiBpbiBlZmZlY3QgZnJvbSB0aGUgRWZmZWN0aXZlIERhdGUgdW50aWwgdGVybWluYXRlZCBhcyBzZXQgZm9ydGggaGVyZWluLiBUaGlzIEFncmVlbWVudCBzaGFsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB3aXRob3V0IG5vdGljZSB0byB5b3UgaW4gdGhlIGV2ZW50IHRoYXQgeW91IHZpb2xhdGUgdGhlIHByb3Zpc2lvbnMgb2YgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIHRob3NlIHJlZ2FyZGluZyBjb3B5cmlnaHQgYW5kIG90aGVyIHJlc3RyaWN0aW9ucyBzZXQgZm9ydGggaW4gU2VjdGlvbnMgSUkuIGFuZCBJSUkuIGFib3ZlLiAgVXBvbiB0ZXJtaW5hdGlvbiwgdGhlIEVuZCBVc2VyIGlzIG5vIGxvbmdlciBlbnRpdGxlZCB0byB1c2UgTmVyb+KAmXMgU29mdHdhcmUgYW5kIGl0cyBhY2NvbXBhbnlpbmcgaXRlbXMuIEluIHRoaXMgY2FzZSBFbmQgVXNlciBpcyBvYmxpZ2F0ZWQgdG8gcmVzZW5kIG9yaWdpbmFsIGRpc2NzIGFuZCBhbGwgY29waWVzIG9mIGRhdGEgY2FycmllcnMgYW5kIHRvIGVyYXNlIGNvbXBsZXRlbHkgYW5kIHVsdGltYXRlbHkgYWxsIGRhdGEgZnJvbSBFbmQgVXNlcuKAmXMgY29tcHV0ZXIgZXN0YWJsaXNoZWQgYnkgbWVhbnMgb2YgTmVyb+KAmXMgU29mdHdhcmUuCisKKworVklJSS4gU2FmZWd1YXJkIG1lYXN1cmVzCisKK0VuZCBVc2VyIHdpbGwga2VlcCB0aGUgU29mdHdhcmUgaW4gc2FmZSBjdXN0b2R5IGFuZCB3aWxsIGluZGljYXRlIHRvIGl0cyBtZW1iZXJzIG9mIGhvdXNlaG9sZCB0byBmb2xsb3cgdGhlIG9ibGlnYXRpb25zIHN0aXB1bGF0ZWQgaW4gdGhpcyBBZ3JlZW1lbnQuIEVuZCBVc2VyIGFncmVlcyB0byBmb2xsb3cgYWxsIHJlbGV2YW50IGxlZ2FsIHByb3Zpc2lvbnMsIGVzcGVjaWFsbHkgdGhlIGxhd3Mgb24gaW50ZWxsZWN0dWFsIHByb3BlcnR5IGFuZCBjb3B5cmlnaHQuCisKKworSVguIERpc2NsYWltZXIKKworVEhFIFNPRlRXQVJFIElTIERFU0lHTkVEIFRPIEFTU0lTVCBZT1UgSU4gUkVQUk9EVUNJTkcgTUFURVJJQUwgSU4gV0hJQ0ggWU9VIE9XTiBUSEUgQ09QWVJJR0hUIE9SIEhBVkUgT0JUQUlORUQgUEVSTUlTU0lPTiBUTyBDT1BZIEZST00gVEhFIENPUFlSSUdIVCBPV05FUi4gVU5MRVNTIFlPVSBPV04gVEhFIENPUFlSSUdIVCBPUiBIQVZFIFBFUk1JU1NJT04gVE8gQ09QWSBGUk9NIFRIRSBDT1BZUklHSFQgT1dORVIsIFlPVSBNQVkgQkUgVklPTEFUSU5HIENPUFlSSUdIVCBMQVcgQU5EIEJFIFNVQkpFQ1QgVE8gUEFZTUVOVCBPRiBEQU1BR0VTIEFORCBPVEhFUiBSRU1FRElFUy4gSUYgWU9VIEFSRSBVTkNFUlRBSU4gQUJPVVQgWU9VUiBSSUdIVFMsIFlPVSBTSE9VTEQgQ09OVEFDVCBZT1VSIExFR0FMIEFEVklTT1IuIFlPVSBBU1NVTUUgRlVMTCBSRVNQT05TSUJJTElUWSBGT1IgVEhFIExFR0FMIEFORCBSRVNQT05TSUJMRSBVU0UgT0YgVEhFIFNPRlRXQVJFLgorCisKK1guIFUuUy4gR292ZXJubWVudCBSZXN0cmljdGVkIFJpZ2h0cworCitBbnkgdXNlIG9mIHRoZSBOZXJvIFNvZnR3YXJlIGJ5IHRoZSBVLlMuIEdvdmVybm1lbnQgaXMgY29uZGl0aW9uZWQgdXBvbiB0aGUgR292ZXJubWVudCBhZ3JlZWluZyB0aGF0IHRoZSBTb2Z0d2FyZSBpcyBzdWJqZWN0IHRvIFJlc3RyaWN0ZWQgUmlnaHRzIGFzIHByb3ZpZGVkIHVuZGVyIHRoZSBwcm92aXNpb25zIHNldCBmb3J0aCBpbiBzdWJkaXZpc2lvbiAoYykoMSkoaWkpIG9mIENsYXVzZSAyNTIuMjI3LTcwMTMgb2YgdGhlIERlZmVuc2UgRmVkZXJhbCBBY3F1aXNpdGlvbiBSZWd1bGF0aW9ucyBTdXBwbGVtZW50LCBvciB0aGUgc2ltaWxhciBhY3F1aXNpdGlvbiByZWd1bGF0aW9ucyBvZiBvdGhlciBhcHBsaWNhYmxlIFUuUy4gR292ZXJubWVudCBvcmdhbml6YXRpb25zLiAgVGhlIENvbnRyYWN0b3IvTWFudWZhY3R1cmVyIGlzIE5lcm8gQUcsIEltIFN0b2Vja21hZWRsZSAxOCwgNzYzMDcgS2FybHNiYWQsIEdlcm1hbnkuCisKKworCitCLiBMSUNFTlNFIFRFUk1TIEFORCBDT05ESVRJT05TIEFQUExJQ0FCTEUgVE8gU09GVFdBUkUgQUNRVUlSRUQgRlJPTSBORVJPIE9SIEFOIE5FUk8gRElTVFJJQlVUT1IKKworVGhlIGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXBwbGljYWJsZSB0byBTb2Z0d2FyZSBwdXJjaGFzZWQgZnJvbSBOZXJvIG9yIGEgTmVybyBEaXN0cmlidXRvciBhcmUgZXhhY3RseSB0aGUgc2FtZSBhcyBzZXQgZm9ydGggaW4gU2VjdGlvbiBBIGFib3ZlLCBleGNlcHQgdGhhdCBTdWJzZWN0aW9uIEkgKEdyYW50IG9mIGxpY2Vuc2UpIGFuZCBTdWJzZWN0aW9uIElWIChXYXJyYW50aWVzKSBzaGFsbCByZWFkIGFzIGZvbGxvd3M6CisKKworSS4gR3JhbnQgb2YgbGljZW5zZQorCitUaGlzIEFncmVlbWVudCBwZXJtaXRzIHlvdSB0byB1c2Ugb25lIGNvcHkgb2YgdGhlIFNvZnR3YXJlIGFjcXVpcmVkIHdpdGggdGhpcyBsaWNlbnNlIG9uIGFueSBzaW5nbGUgY29tcHV0ZXIsIHByb3ZpZGVkIHRoZSBTb2Z0d2FyZSBpcyBpbiB1c2Ugb24gb25seSBvbmUgY29tcHV0ZXIgYXQgYW55IGdpdmVuIHRpbWUuIElmIHlvdSBoYXZlIGFjcXVpcmVkIGEgbXVsdGlwbGUgbGljZW5zZSBmb3IgdGhlIFNvZnR3YXJlLCB0aGVuIGF0IGFueSBvbmUgdGltZSB5b3UgbWF5IGhhdmUgaW4gdXNlIHVwIHRvIGFzIG1hbnkgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSBhcyB5b3UgaGF2ZSBsaWNlbnNlcy4gVGhlIFNvZnR3YXJlIGlzICJpbiB1c2UiIG9uIGEgY29tcHV0ZXIgd2hlbiBpdCBpcyBsb2FkZWQgaW50byB0aGUgdGVtcG9yYXJ5IG1lbW9yeSBvciBpbnN0YWxsZWQgaW50byB0aGUgcGVybWFuZW50IG1lbW9yeSAoZS5nLiBoYXJkIGRpc2ssIENEIFJPTSwgb3Igb3RoZXIgc3RvcmFnZSBkZXZpY2UpIG9mIHRoYXQgY29tcHV0ZXIsIGV4Y2VwdCB0aGF0IGEgY29weSBpbnN0YWxsZWQgb24gYSBuZXR3b3JrIHNlcnZlciBmb3IgdGhlIHNvbGUgcHVycG9zZSBvZiBkaXN0cmlidXRpb24gdG8gb3RoZXIgY29tcHV0ZXJzIGlzIG5vdCBjb25zaWRlcmVkICJpbiB1c2UiLiBJZiB0aGUgYW50aWNpcGF0ZWQgbnVtYmVyIG9mIHVzZXJzIG9mIHRoZSBTb2Z0d2FyZSBtaWdodCBleGNlZWQgdGhlIGF1dGhvcml6ZWQgbnVtYmVyIG9mIGFwcGxpY2FibGUgbGljZW5zZXMsIHRoZW4geW91IG11c3QgaGF2ZSBhIHJlYXNvbmFibGUgbWVjaGFuaXNtIG9yIHByb2Nlc3MgaW4gcGxhY2UgdG8gYXNzdXJlIHRoYXQgdGhlIG51bWJlciBvZiBjb25jdXJyZW50IHVzZXMgb2YgdGhlIFNvZnR3YXJlIGRvZXMgbm90IGV4Y2VlZCB0aGUgbnVtYmVyIG9mIGxpY2Vuc2VzLgorCisKK0lJLiBXYXJyYW50aWVzCisKK05lcm8gd2FycmFudHMgdGhhdCBmb3IgYSBwZXJpb2Qgb2YgbmluZXR5ICg5MCkgZGF5cyBmcm9tIHRoZSBkYXRlIG9mIHJlY2VpcHQsIHRoZSBTb2Z0d2FyZSB3aWxsIHBlcmZvcm0gc3Vic3RhbnRpYWxseSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uLiAgQW55IGltcGxpZWQgd2FycmFudGllcyBvbiB0aGUgU29mdHdhcmUgYXJlIGxpbWl0ZWQgdG8gOTAgZGF5cyBvciB0aGUgc2hvcnRlc3QgcGVyaW9kIHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywgd2hpY2hldmVyIGlzIGdyZWF0ZXIuICBOZXJv4oCZcyBlbnRpcmUgbGlhYmlsaXR5IGFuZCB5b3VyIGV4Y2x1c2l2ZSByZW1lZHkgZm9yIGEgYnJlYWNoIG9mIHRoaXMgd2FycmFudHkgc2hhbGwgYmUsIGF0IE5lcm/igJlzIHNvbGUgb3B0aW9uLCBlaXRoZXIgKGEpIHJldHVybiBvZiB0aGUgcHJpY2UgcGFpZCBvciAoYikgcmVwYWlyIG9yIHJlcGxhY2VtZW50IG9mIHRoZSBTb2Z0d2FyZSB0aGF0IGRvZXMgbm90IG1lZXQgTmVyb+KAmXMgbGltaXRlZCB3YXJyYW50eSBhbmQgdGhhdCBpcyByZXR1cm5lZCB0byBOZXJvIHdpdGggYSBjb3B5IG9mIHlvdXIgcmVjZWlwdC4gIElmIGZhaWx1cmUgb2YgdGhlIFNvZnR3YXJlIGlzIHRoZSByZXN1bHQgb2YgYWNjaWRlbnQsIGFidXNlLCBvciBtaXNhcHBsaWNhdGlvbiwgdGhpcyBsaW1pdGVkIHdhcnJhbnR5IHNoYWxsIGJlIHZvaWQuICBBbnkgcmVwbGFjZW1lbnQgU29mdHdhcmUgd2lsbCBiZSB3YXJyYW50ZWQgZm9yIHRoZSByZW1haW5kZXIgb2YgdGhlIG9yaWdpbmFsIHdhcnJhbnR5IHBlcmlvZCBvciAzMCBkYXlzLCB3aGljaGV2ZXIgaXMgbG9uZ2VyLiAgTkVSTyBNQUtFUyBOTyBPVEhFUiBXQVJSQU5USUVTIFRPIFlPVSBJTiBDT05ORUNUSU9OIFdJVEggVEhJUyBMSUNFTlNFLCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCisKKworQy4gVEVSTVMgQU5EIENPTkRJVElPTlMgQVBQTElDQUJMRSBUTyBBTEwgTElDRU5TRVMKKworCitJLiBUaGlyZCBQYXJ0eSBEaXNjbGFpbWVyIGFuZCBMaW1pdGF0aW9ucworCithLikgTVAzIGFuZCBtcDNQUk86IFN1cHBseSBvZiB0aGlzIHByb2R1Y3Qgb25seSBjb252ZXlzIGEgbGljZW5zZSBmb3IgcHJpdmF0ZSwgbm9uLWNvbW1lcmNpYWwgdXNlIGFuZCBkb2VzIG5vdCBjb252ZXkgYSBsaWNlbnNlIG5vciBpbXBseSBhbnkgcmlnaHQgdG8gdXNlIHRoaXMgcHJvZHVjdCBpbiBhbnkgY29tbWVyY2lhbCAoaS5lLiByZXZlbnVlLWdlbmVyYXRpbmcpIHJlYWwgdGltZSBicm9hZGNhc3RpbmcgKHRlcnJlc3RyaWFsLCBzYXRlbGxpdGUsIGNhYmxlIGFuZC9vciBhbnkgb3RoZXIgbWVkaWEpLCBicm9hZGNhc3RpbmcgLyBzdHJlYW1pbmcgdmlhIEludGVybmV0LCBpbnRyYW5ldHMgYW5kL29yIG90aGVyIG5ldHdvcmtzIG9yIGluIG90aGVyIGVsZWN0cm9uaWMgY29udGVudCBkaXN0cmlidXRpb24gc3lzdGVtcywgc3VjaCBhcyBwYXktYXVkaW8gb3IgYXVkaW8tb24tZGVtYW5kIGFwcGxpY2F0aW9ucy4gQW4gaW5kZXBlbmRlbnQgbGljZW5zZSBmb3Igc3VjaCB1c2UgaXMgcmVxdWlyZWQuIEZvciBkZXRhaWxzLCBwbGVhc2UgdmlzaXQgd3d3Lm1wM2xpY2Vuc2luZy5jb20gLgorCitiLikgRW1iZWRkZWQgU29mdHdhcmUgTGljZW5zZToKK1lvdSBhY2tub3dsZWRnZSB0aGF0IE5lcm8gTGludXggbGljZW5zZWQgaGVyZXVuZGVyIGNvbnRhaW5zIHRoaXJkIHBhcnR5IGNvbXBvbmVudHMgdGhhdCBhcmUgbGljZW5zZWQgcHVyc3VhbnQgdG8gaXRzIG93biB0ZXJtcyBhbmQgY29uZGl0aW9ucyAoIkVtYmVkZGVkIFNvZnR3YXJlIiksIGFzIHNwZWNpZmllZCBiZWxvdy4gIEEgY29weSBvZiB0aGUgbGljZW5zZXMgYXNzb2NpYXRlZCB3aXRoIHN1Y2ggRW1iZWRkZWQgU29mdHdhcmUgaXMgaW5jbHVkZWQgYmVsb3cuICAgTk9UV0lUSFNUQU5ESU5HIEFOWVRISU5HIEVMU0UgVE8gVEhFIENPTlRSQVJZIElOIFRISVMgQUdSRUVNRU5ULCBFTUJFRERFRCBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyDigJxBUyBJU+KAnSBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UKKworQ29weSBvZiB0aGUgbGljZW5zZXMgYXNzb2NpYXRlZCB3aXRoIEVtYmVkZGVkIFNvZnR3YXJlCisKK8KpIDIwMDcsIFhpcGguT3JnIEZvdW5kYXRpb24KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCitSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKK1JlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgWGlwaC5vcmcgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVycyBhbmQgY29udHJpYnV0b3JzIOKAnGFzIGlz4oCdIGFuZCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnRpZXMsIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCB0aGUgaW1wbGllZCB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UgYXJlIGRpc2NsYWltZWQuIEluIG5vIGV2ZW50IHNoYWxsIHRoZSBmb3VuZGF0aW9uIG9yIGNvbnRyaWJ1dG9ycyBiZSBsaWFibGUgZm9yIGFueSBkaXJlY3QsIGluZGlyZWN0LCBpbmNpZGVudGFsLCBzcGVjaWFsLCBleGVtcGxhcnksIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIHByb2N1cmVtZW50IG9mIHN1YnN0aXR1dGUgZ29vZHMgb3Igc2VydmljZXM7IGxvc3Mgb2YgdXNlLCBkYXRhLCBvciBwcm9maXRzOyBvciBidXNpbmVzcyBpbnRlcnJ1cHRpb24pIGhvd2V2ZXIgY2F1c2VkIGFuZCBvbiBhbnkgdGhlb3J5IG9mIGxpYWJpbGl0eSwgd2hldGhlciBpbiBjb250cmFjdCwgc3RyaWN0IGxpYWJpbGl0eSwgb3IgdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2Ugb3Igb3RoZXJ3aXNlKSBhcmlzaW5nIGluIGFueSB3YXkgb3V0IG9mIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwgZXZlbiBpZiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZS4KKworCitJSS4gR292ZXJuaW5nIExhdzogIFRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGdvdmVybmVkIGJ5IGFuZCBpbnRlcnByZXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGludGVybmFsIGxhd3Mgb2YgQ2FsaWZvcm5pYSwgVVNBLiAgSWYgYW55IGRpc3B1dGUgc2hhbGwgYXJpc2UgcHVyc3VhbnQgdG8gYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCwgc2FpZCBkaXNwdXRlIHNoYWxsIGJlIHNldHRsZWQgYnkgYmluZGluZyBhcmJpdHJhdGlvbiBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHJ1bGVzIGFuZCByZWd1bGF0aW9ucyBvZiB0aGUgc3RhdGUgY291cnRzLCBsb2NhdGVkIGluIExvcyBBbmdlbGVzLCBDYWxpZm9ybmlhLiAgSWYgYW55IHRlcm0gb3IgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGRlY2xhcmVkIGludmFsaWQgaW4gYXJiaXRyYXRpb24gb3IgYnkgYSBjb3VydCBvZiBjb21wZXRlbnQganVyaXNkaWN0aW9uLCBzdWNoIGludmFsaWRpdHkgc2hhbGwgYmUgbGltaXRlZCBzb2xlbHkgdG8gdGhlIHNwZWNpZmljIHRlcm0gb3IgcHJvdmlzaW9uIGludmFsaWRhdGVkLCBhbmQgdGhlIHJlbWFpbmRlciBvZiB0aGlzIEFncmVlbWVudCBzaGFsbCByZW1haW4gaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0LCBhY2NvcmRpbmcgdG8gaXRzIHRlcm1zLiAgQW55IHByb3Zpc2lvbiBkZWNsYXJlZCBpbnZhbGlkIHNoYWxsIGJlIG1vZGlmaWVkIHRvIHRoZSBmdWxsZXN0IGV4dGVudCBwb3NzaWJsZSB0byByZWZsZWN0IHRoZSBwYXJ0aWVzJyBpbnRlbnQgYXMgb2YgdGhlIEVmZmVjdGl2ZSBEYXRlLgorCisKKworQ29weXJpZ2h0IMKpIDE5OTYtMjAwNyBOZXJvIEFHIGFuZCBpdHMgbGljZW5zb3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitBbGwgUmlnaHRzIFJlc2VydmVkLiBQb3J0aW9ucyBvZiB0aGlzIHNvZnR3YXJlIHBhY2thZ2UgYXJlOiAgIChjKSAyMDA3LCBYaXBoLk9yZyBGb3VuZGF0aW9uLgorCisiTmVybyIgaXMgYSB0cmFkZW1hcmsgb2YgTmVybyBBRy4gbXAzUFJPIGF1ZGlvIGNvbXByZXNzaW9uIHRlY2hub2xvZ3kgbGljZW5zZWQgYnkgQ29kaW5nIFRlY2hub2xvZ2llcywgRnJhdW5ob2ZlciBJSVMgYW5kIFRIT01TT04uCisKK05lcm8gcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIGNoYW5nZSBzcGVjaWZpY2F0aW9ucyB3aXRob3V0IG5vdGljZS4gVXNlIG9mIHRoaXMgcHJvZHVjdCBpcyBzdWJqZWN0IHRvIHRoZSBhY2NlcHRhbmNlIG9mIHRoZSBFbmQgVXNlcgorbGljZW5zZSBhZ3JlZW1lbnQgdXBvbiBpbnN0YWxsYXRpb24gb2YgdGhlIFNvZnR3YXJlLiB3d3cubmVyby5jb20uCisKK0lmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgY29uY2VybmluZyB0aGlzIEFncmVlbWVudCwKK3BsZWFzZSBjb250YWN0IHVzLgorCivCqSAxOTk5LTIwMDcgTmVybyBBRyAvIE5lcm8gSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisxOC8wNC8yMDA3CmRpZmYgLS1naXQgYS9saWNlbnNlcy9OZXNzdXMtRVVMQSBiL2xpY2Vuc2VzL05lc3N1cy1FVUxBCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwMzE0YzMKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9OZXNzdXMtRVVMQQpAQCAtMCwwICsxLDEyNyBAQAorVEVOQUJMRSBORVRXT1JLIFNFQ1VSSVRZLCBJTkMuCitORVNTVVMKK1NPRlRXQVJFIExJQ0VOU0UgQUdSRUVNRU5UCisKK1RoaXMgaXMgYSBsZWdhbCBhZ3JlZW1lbnQgKCJBZ3JlZW1lbnQiKSBiZXR3ZWVuIFRlbmFibGUgTmV0d29yayBTZWN1cml0eSwgSW5jLiwgYSBEZWxhd2FyZSBjb3Jwb3JhdGlvbiBoYXZpbmcgb2ZmaWNlcyBhdCA4ODMwIFN0YW5mb3JkIEJvdWxldmFyZCwgU3VpdGUgMzEyLCBDb2x1bWJpYSwgTUQgMjEwNDUgKCJUZW5hYmxlIiksIGFuZCB5b3UsIHRoZSBwYXJ0eSBsaWNlbnNpbmcgU29mdHdhcmUgYW5kIG9idGFpbmluZyB0aGUgZmVlZCBzZXJ2aWNlcyAoIllvdSIpLiAgVGhpcyBBZ3JlZW1lbnQgY292ZXJzIHlvdXIgcGVybWl0dGVkIHVzZSBvZiB0aGUgU29mdHdhcmUgYW5kIHRoZSBTZXJ2aWNlcy4gIEJZIENMSUNLSU5HIEJFTE9XIFlPVSBJTkRJQ0FURSBZT1VSIEFDQ0VQVEFOQ0UgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIFlPVSBBQ0tOT1dMRURHRSBUSEFUIFlPVSBIQVZFIFJFQUQgQUxMIE9GIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCwgVU5ERVJTVEFORCBUSEVNLCBBTkQgQUdSRUUgVE8gQkUgTEVHQUxMWSBCT1VORCBCWSBUSEVNLiAgSWYgWW91IGRvIG5vdCBhZ3JlZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgWW91IG1heSBub3QgdXNlIHRoZSBTb2Z0d2FyZSwgYXMgc3VjaCB0ZXJtIGlzIGRlZmluZWQgYmVsb3cuICBUaGUgU29mdHdhcmUgY2FuIG9ubHkgYmUgcHJvdmlkZWQgdG8gWW91IGJ5IFRlbmFibGUuICAgVGhlIHRlcm0gIkFncmVlbWVudCIgaW5jbHVkZXMgYW55IGV4aGliaXRzIHRvIHRoZSBkb2N1bWVudC4KKzEuIEdyYW50IG9mIFNvZnR3YXJlIExpY2Vuc2UuICAKKyhhKSBHcmFudC4gIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBhbmQgeW91ciBhY2NlcHRhbmNlLCBvZiB0aGlzIEFncmVlbWVudCwgVGVuYWJsZSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLCBub24tZXhjbHVzaXZlLCBub24tdHJhbnNmZXJhYmxlIGxpY2Vuc2UgKHRoZSAiTGljZW5zZSIpIGluIG9iamVjdCBjb2RlIGZvcm0gb25seSB0byB1c2UgdGhlIFNvZnR3YXJlIChpKSBzb2xlbHkgZm9yIFlvdXIgaW50ZXJuYWwgb3BlcmF0aW9ucyBhbmQgaW50ZXJuYWwgc2VjdXJpdHkgcHVycG9zZXMgdG8gc2VlayBhbmQgYXNzZXNzIGluZm9ybWF0aW9uIHRlY2hub2xvZ3kgdnVsbmVyYWJpbGl0aWVzIGV2ZW50cyBmb3IgWW91ciBvd24gbmV0d29ya3M7IGFuZCAoaWkpIHRvIHByb3ZpZGUgc2VydmljZXMgdG8gdGhpcmQgcGFydGllcyB0byBzZWVrIGFuZCBhc3Nlc3MgaW5mb3JtYXRpb24gdGVjaG5vbG9neSB2dWxuZXJhYmlsaXRpZXMgZXZlbnRzIG9uIHRoZSB0aGlyZCBwYXJ0eSdzIG5ldHdvcmsuICBBbnkgcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSBub3QgZ3JhbnRlZCBpbiB0aGlzIEFncmVlbWVudCBhcmUgZXhwcmVzc2x5IHJlc2VydmVkIGJ5IFRlbmFibGUuIAorKGIpIERlZmluaXRpb24gb2YgU29mdHdhcmUuICAKKyhpKSBUaGUgdGVybSAiU29mdHdhcmUiIG1lYW5zIChpKSBOZXNzdXMgMy54IHRoYXQgWW91IGRvd25sb2FkIGZyb20gYW55IFRlbmFibGUgd2Vic2l0ZSwgaW5jbHVkaW5nIHd3dy5uZXNzdXMub3JnLCBvciBvYnRhaW4gdmlhIENEIG9yIGFueSBvdGhlciBtZXRob2Q7IChpaSkgdGhlIGFzc29jaWF0ZWQgdXNlciBtYW51YWxzIGFuZCB1c2VyIGRvY3VtZW50YXRpb24sIGlmIGFueSwgYXMgd2VsbCBhcyBhbnkgcGF0Y2hlcywgdXBkYXRlcywgaW1wcm92ZW1lbnRzLCBhZGRpdGlvbnMsIGVuaGFuY2VtZW50cyBhbmQgb3RoZXIgbW9kaWZpY2F0aW9ucyBvciByZXZpc2VkIHZlcnNpb25zIG9mIE5lc3N1cyAzLnggdGhhdCBtYXkgYmUgcHJvdmlkZWQgdG8gWW91IGJ5IFRlbmFibGUgZnJvbSB0aW1lIHRvIHRpbWUgdGhhdCB3ZXJlIGRldmVsb3BlZCBieSBUZW5hYmxlOyBhbmQgKGlpaSkgYW55IE5lc3N1cyBkYWVtb25zLCBjb21tYW5kIGxpbmUgaW50ZXJmYWNlcywgYW5kL29yIGFueSBncmFwaGljYWwgdXNlciBpbnRlcmZhY2VzIFlvdSBvYnRhaW4gZnJvbSBUZW5hYmxlIHRoYXQgd2VyZSBkZXZlbG9wZWQgYnkgVGVuYWJsZS4gIAorKGlpKSBBbnkgU29mdHdhcmUgdGhhdCBpcyBub3QgbWFya2VkIGFzIGNvcHlyaWdodGVkIGJ5IFRlbmFibGUgYXJlIG5vdCBTb2Z0d2FyZSBhcyBkZWZpbmVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBhcmUgc3ViamVjdCB0byBvdGhlciBsaWNlbnNlIHRlcm1zLiAKKyhpaWkpIFRlbmFibGUgaGFzIHRoZSByaWdodCB0bywgb3IgdGhlIHJpZ2h0IHRvIGxpY2Vuc2UsIHRoZSBTb2Z0d2FyZSwgaW5jbHVkaW5nIGFueSBsaWJyYXJpZXMgbGljZW5zZWQgdW5kZXIgTEdQTC4gQ29udGFjdCBUZW5hYmxlIGZvciBtb3JlIGRldGFpbHMuCisoYykgTWFpbnRlbmFuY2UgYW5kIFN1cHBvcnQuICBUZW5hYmxlIHdpbGwgbm90IHByb3ZpZGUgYW55IG1haW50ZW5hbmNlIG9yIHN1cHBvcnQgc2VydmljZXMgYXMgcGFydCBvZiB0aGlzIEFncmVlbWVudCB1bmxlc3MgWW91IG9idGFpbiBhICJEaXJlY3QgRmVlZCBTdWJzY3JpcHRpb24iLCBhcyBzdWNoIHRlcm0gaXMgZGVmaW5lZCBpbiBFeGhpYml0IEEsIGZyb20gVGVuYWJsZS4gIAorMi4gU3Vic2NyaXB0aW9ucy4KK1lvdSBtYXkgb2J0YWluIGEgc3Vic2NyaXB0aW9uIHRvIHJlY2VpdmUgUGx1Z2lucyAoYXMgc3VjaCB0ZXJtIGlzIGRlZmluZWQgaW4gRXhoaWJpdCBBKSBhbmQgdXBkYXRlcyB0byB0aGUgUGx1Z2lucyBhcyBmdXJ0aGVyIGRlc2NyaWJlZCBpbiBFeGhpYml0IEEsIHdoaWNoIGlzIGluY29ycG9yYXRlZCBoZXJlaW4gYnkgcmVmZXJlbmNlLiAgCiszLiBUZXJtLgorVGhpcyBBZ3JlZW1lbnQgY29tbWVuY2VzIG9uIHRoZSBkYXRlIG9uIHdoaWNoIFlvdSBleGVjdXRlIHRoaXMgQWdyZWVtZW50IG9yIGRvd25sb2FkLCBpbnN0YWxsIG9yIHVzZSB0aGUgU29mdHdhcmUgKHdoaWNoZXZlciBvY2N1cnMgZmlyc3QpICh0aGUgIkVmZmVjdGl2ZSBEYXRlIikgYW5kIGNvbnRpbnVlcyB1bnRpbCBpdCBpcyB0ZXJtaW5hdGVkIGFjY29yZGluZyB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQuCis0LiBJbnRlbGxlY3R1YWwgUHJvcGVydHkuICAKK1RoaXMgQWdyZWVtZW50IGRvZXMgbm90IHRyYW5zZmVyIHRvIFlvdSBhbnkgdGl0bGUgdG8gb3IgYW55IG93bmVyc2hpcCByaWdodCBvciBpbnRlcmVzdCBpbiB0aGUgU29mdHdhcmUuICBZb3UgYWNrbm93bGVkZ2UgdGhhdCBUZW5hYmxlIG93bnMgYW5kIHJldGFpbnMgYWxsIHJpZ2h0LCB0aXRsZSBhbmQgaW50ZXJlc3QgaW4gYW5kIHRvIHRoZSBTb2Z0d2FyZS4gIEFsbCBlbmhhbmNlbWVudHMsIG1vZGlmaWNhdGlvbnMgYW5kIGRlcml2YXRpdmUgd29ya3MgdGhhdCBUZW5hYmxlIG1ha2VzIHRvIHRoZSBTb2Z0d2FyZSBvciBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIGFsbCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIHRoZXJlaW4sIHdpbGwgYmUgdGhlIHByb3BlcnR5IG9mIFRlbmFibGUuICBZb3VyIHJpZ2h0cyB3aXRoIHJlc3BlY3QgdG8gdGhlIFNvZnR3YXJlIGFyZSBsaW1pdGVkIHRvIHRoZSByaWdodCB0byB1c2UgdGhlIFNvZnR3YXJlIHB1cnN1YW50IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBpbiB0aGlzIEFncmVlbWVudC4gICAgCis1LiBObyBSZXZlcnNlIEVuZ2luZWVyaW5nLCBPdGhlciBSZXN0cmljdGlvbnMuICAKK1lvdSBtYXkgbm90IGRpcmVjdGx5IG9yIGluZGlyZWN0bHk6IChpKSBzZWxsLCBsZWFzZSwgcmVkaXN0cmlidXRlIG9yIHRyYW5zZmVyIGFueSBvZiB0aGUgU29mdHdhcmUgb24gYSBzdGFuZC1hbG9uZSBiYXNpczsgKGlpKSBkZWNvbXBpbGUsIGRpc2Fzc2VtYmxlLCByZXZlcnNlIGVuZ2luZWVyLCBvciBvdGhlcndpc2UgYXR0ZW1wdCB0byBkZXJpdmUsIG9idGFpbiBvciBtb2RpZnkgdGhlIHNvdXJjZSBjb2RlIG9mIHRoZSBTb2Z0d2FyZTsgKGlpaSkgcmVwcm9kdWNlLCBtb2RpZnksIHRyYW5zbGF0ZSBvciBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBvZiBhbGwgb3IgcGFydCBhbnkgb2YgdGhlIFNvZnR3YXJlOyAoaXYpIHJlbnQsIGxlYXNlIG9yIGxvYW4gdGhlIFNvZnR3YXJlIGluIGFueSBmb3JtIHRvIGFueSB0aGlyZCBwYXJ0eSBvciBvdGhlcndpc2UgYWxsb3cgYSB0aGlyZCBwYXJ0eSB0byB1c2UgdGhlIFNvZnR3YXJlOyBvciAodikgcmVtb3ZlLCBhbHRlciBvciBvYnNjdXJlIGFueSBwcm9wcmlldGFyeSBub3RpY2UsIGxhYmVscywgb3IgbWFya3Mgb24gdGhlIFNvZnR3YXJlLiAgWW91IG1heSBub3Qgc3VibGljZW5zZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiB0aGlzIEFncmVlbWVudC4gIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUgb3Igb3RoZXJ3aXNlIHByb3ZpZGUgU29mdHdhcmUgdG8gdGhpcmQgcGFydGllcy4gIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGFsbCB1c2Ugb2YgdGhlIFNvZnR3YXJlIGFuZCBmb3IgY29tcGxpYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50OyBhbnkgYnJlYWNoIGJ5IFlvdSBvciBhbnkgdXNlciB1c2luZyB0aGUgU29mdHdhcmUgb24gWW91ciBiZWhhbGYgc2hhbGwgYmUgZGVlbWVkIHRvIGhhdmUgYmVlbiBtYWRlIGJ5IFlvdS4gIAorNi4gUmVzdHJpY3Rpb25zIG9uIFRoaXJkIFBhcnR5IFVzZSBhbmQgQWNjZXNzLgorCVlvdSBhZ3JlZSBub3QgdG8gZGVsaXZlciBvciBvdGhlcndpc2UgbWFrZSBhdmFpbGFibGUgdGhlIFNvZnR3YXJlLCBpbiB3aG9sZSBvciBpbiBwYXJ0LCB0byBhbnkgcGFydHkgb3RoZXIgdGhhbiBUZW5hYmxlLCBleGNlcHQgZm9yIHB1cnBvc2VzIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIFlvdXIgdXNlIG9mIHRoZSBTb2Z0d2FyZSB3aXRob3V0IFRlbmFibGUncyBwcmlvciB3cml0dGVuIGNvbnNlbnQuIFlvdSBhZ3JlZSB0byB1c2UgWW91ciBiZXN0IGVmZm9ydHMgYW5kIHRvIHRha2UgYWxsIHJlYXNvbmFibGUgc3RlcHMgdG8gZW5zdXJlIHRoYXQgbm8gdW5hdXRob3JpemVkIHBhcnRpZXMgaGF2ZSBhY2Nlc3MgdG8gdGhlIFNvZnR3YXJlIGFuZCB0aGF0IG5vIHVuYXV0aG9yaXplZCBjb3B5LCBwdWJsaWNhdGlvbiwgZGlzY2xvc3VyZSBvciBkaXN0cmlidXRpb24gb2YgdGhlIFNvZnR3YXJlLCBpbiB3aG9sZSBvciBpbiBwYXJ0LCBpbiBhbnkgZm9ybSBpcyBtYWRlIGJ5IFlvdSBvciBhbnkgdGhpcmQgcGFydHkuICBZb3UgYWdyZWUgdG8gbm90aWZ5IFRlbmFibGUgb2YgYW55IHVuYXV0aG9yaXplZCBhY2Nlc3MgdG8sIG9yIHVzZSwgY29weWluZywgcHVibGljYXRpb24sIGRpc2Nsb3N1cmUgb3IgZGlzdHJpYnV0aW9uIG9mLCB0aGUgU29mdHdhcmUuICBZb3UgYWNrbm93bGVkZ2UgdGhhdCB0aGUgU29mdHdhcmUgY29udGFpbnMgdmFsdWFibGUgY29uZmlkZW50aWFsIGluZm9ybWF0aW9uIGFuZCB0cmFkZSBzZWNyZXRzIG9mIFRlbmFibGUgb3IgaXRzIGFmZmlsaWF0ZXMgYW5kIHRoZWlyIGxpY2Vuc29ycyBvciBzdXBwbGllcnMsIGFuZCB0aGF0IHVuYXV0aG9yaXplZCBhY2Nlc3MgdG8sIG9yIHVzZSwgY29weWluZywgcHVibGljYXRpb24sIGRpc2Nsb3N1cmUgb3IgZGlzdHJpYnV0aW9uIG9mLCB0aGUgU29mdHdhcmUgaXMgaGFybWZ1bCB0byBUZW5hYmxlIG9yIGl0cyBhZmZpbGlhdGVzIGFuZCB0aGVpciBsaWNlbnNvcnMgb3Igc3VwcGxpZXJzLgorNy4gQ29uZmlkZW50aWFsaXR5LiAgCitBcyB1c2VkIGluIHRoaXMgQWdyZWVtZW50LCAiQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uIiBtZWFucyBhbnkgYW5kIGFsbCBpbmZvcm1hdGlvbiBhbmQgbWF0ZXJpYWwgdGhhdDogIChpKSBnaXZlcyBvZiBUZW5hYmxlIHNvbWUgY29tcGV0aXRpdmUgYnVzaW5lc3MgYWR2YW50YWdlIG9yIHRoZSBvcHBvcnR1bml0eSBvZiBvYnRhaW5pbmcgc3VjaCBhZHZhbnRhZ2Ugb3IgaXMgb3RoZXJ3aXNlIGNvbmZpZGVudGlhbCBvciBhIHRyYWRlIHNlY3JldDsgKGlpKSBpcyBtYXJrZWQgIkNvbmZpZGVudGlhbCwiICJSZXN0cmljdGVkLCIgb3IgIkNvbmZpZGVudGlhbCBJbmZvcm1hdGlvbiIgb3Igb3RoZXIgc2ltaWxhciBtYXJraW5nOyAoaWlpKSBpcyBrbm93biBieSBZb3UgdG8gYmUgY29uZmlkZW50aWFsIG9yIHByb3ByaWV0YXJ5OyBvciAoaXYpIGZyb20gYWxsIHRoZSByZWxldmFudCBjaXJjdW1zdGFuY2VzLCBzaG91bGQgcmVhc29uYWJseSBiZSBhc3N1bWVkIGJ5IFlvdSB0byBiZSBjb25maWRlbnRpYWwgb3IgcHJvcHJpZXRhcnkuICBDb25maWRlbnRpYWwgSW5mb3JtYXRpb24gaW5jbHVkZXMgdGhlIFNvZnR3YXJlLiAgQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uIGRvZXMgbm90IGluY2x1ZGUgYW55IGluZm9ybWF0aW9uIHRoYXQgWW91IGNhbiBwcm92ZTogKGEpIHdhcyBhbHJlYWR5IGtub3duIHRvIFlvdSB3aXRob3V0IHJlc3RyaWN0aW9ucyBhdCB0aGUgdGltZSBvZiBpdHMgZGlzY2xvc3VyZSBieSBUZW5hYmxlOyAoYikgYWZ0ZXIgaXRzIGRpc2Nsb3N1cmUgYnkgVGVuYWJsZSwgaXMgbWFkZSBrbm93biB0byBZb3Ugd2l0aG91dCByZXN0cmljdGlvbnMgYnkgYSB0aGlyZCBwYXJ0eSBoYXZpbmcgdGhlIHJpZ2h0IHRvIGRvIHNvOyAoYykgaXMgb3IgYmVjb21lcyBwdWJsaWNseSBrbm93biB3aXRob3V0IHZpb2xhdGlvbiBvZiB0aGlzIEFncmVlbWVudDsgb3IgKGQpIGlzIGluZGVwZW5kZW50bHkgZGV2ZWxvcGVkIGJ5IFlvdSB3aXRob3V0IHJlZmVyZW5jZSB0byB0aGUgQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uLiAgQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uIHdpbGwgcmVtYWluIHRoZSBwcm9wZXJ0eSBvZiBUZW5hYmxlLCBhbmQgWW91IHdpbGwgbm90IGJlIGRlZW1lZCBieSB2aXJ0dWUgb2YgdGhpcyBBZ3JlZW1lbnQgb3IgYW55IGFjY2VzcyB0byB0aGUgQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uIHRvIGhhdmUgYWNxdWlyZWQgYW55IHJpZ2h0LCB0aXRsZSBvciBpbnRlcmVzdCBpbiBvciB0byB0aGUgQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uLiAgWW91IG1heSBub3QgY29weSBhbnkgQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uIHdpdGhvdXQgVGVuYWJsZSdzIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gIFlvdSBtYXkgbm90IHJlbW92ZSBhbnkgY29weXJpZ2h0LCB0cmFkZW1hcmssIHByb3ByaWV0YXJ5IHJpZ2h0cyBvciBvdGhlciBub3RpY2VzIGluY2x1ZGVkIGluIG9yIGFmZml4ZWQgdG8gYW55IENvbmZpZGVudGlhbCBJbmZvcm1hdGlvbi4gIFlvdSBtYXkgbm90IHVzZSB0aGUgQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uIGZvciBZb3VyIG9yIGEgdGhpcmQgcGFydHkncyBiZW5lZml0LCBjb21wZXRpdGl2ZSBkZXZlbG9wbWVudCBvciBhbnkgb3RoZXIgcHVycG9zZS4gIFlvdSBhZ3JlZTogKEkpIHRvIGhvbGQgdGhlIENvbmZpZGVudGlhbCBJbmZvcm1hdGlvbiBpbiBzdHJpY3QgY29uZmlkZW5jZTsgKElJKSB0byBsaW1pdCBkaXNjbG9zdXJlIG9mIHRoZSBDb25maWRlbnRpYWwgSW5mb3JtYXRpb24gdG8gWW91ciBvd24gZW1wbG95ZWVzIGhhdmluZyBhIG5lZWQgdG8ga25vdyB0aGUgQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uIGZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBBZ3JlZW1lbnQ7IChJSUkpIG5vdCB0byBkaXNjbG9zZSBhbnkgQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uIHRvIGFueSB0aGlyZCBwYXJ0eTsgKElWKSB0byB1c2UgdGhlIENvbmZpZGVudGlhbCBJbmZvcm1hdGlvbiBzb2xlbHkgYW5kIGV4Y2x1c2l2ZWx5IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQgaW4gb3JkZXIgdG8gY2Fycnkgb3V0IFlvdXIgb2JsaWdhdGlvbnMgYW5kIGV4ZXJjaXNlIFlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50OyAoVikgdG8gYWZmb3JkIHRoZSBDb25maWRlbnRpYWwgSW5mb3JtYXRpb24gYXQgbGVhc3QgdGhlIHNhbWUgbGV2ZWwgb2YgcHJvdGVjdGlvbiBhZ2FpbnN0IHVuYXV0aG9yaXplZCBkaXNjbG9zdXJlIG9yIHVzZSBhcyBZb3Ugbm9ybWFsbHkgdXNlcyB0byBwcm90ZWN0IFlvdXIgb3duIGluZm9ybWF0aW9uIG9mIGEgc2ltaWxhciBjaGFyYWN0ZXIsIGJ1dCBpbiBubyBldmVudCBsZXNzIHRoYW4gcmVhc29uYWJsZSBjYXJlOyBhbmQgKFZJKSB0byBub3RpZnkgVGVuYWJsZSBwcm9tcHRseSBvZiBhbnkgdW5hdXRob3JpemVkIHVzZSBvciBkaXNjbG9zdXJlIG9mIHRoZSBDb25maWRlbnRpYWwgSW5mb3JtYXRpb24gYW5kIHRvIGNvb3BlcmF0ZSB3aXRoIGFuZCBhc3Npc3QgVGVuYWJsZSBpbiBldmVyeSByZWFzb25hYmxlIHdheSB0byBzdG9wIG9yIG1pbmltaXplIHN1Y2ggdW5hdXRob3JpemVkIHVzZSBvciBkaXNjbG9zdXJlLiAgWW91IGFncmVlIHRoYXQgaWYgYSBjb3VydCBvZiBjb21wZXRlbnQganVyaXNkaWN0aW9uIGRldGVybWluZXMgdGhhdCBZb3UgaGF2ZSBicmVhY2hlZCwgb3IgYXR0ZW1wdGVkIG9yIHRocmVhdGVuZWQgdG8gYnJlYWNoLCBZb3VyIGNvbmZpZGVudGlhbGl0eSBvYmxpZ2F0aW9ucyB0byBUZW5hYmxlIG9yIFRlbmFibGUncyBwcm9wcmlldGFyeSByaWdodHMsIG1vbmV5IGRhbWFnZXMsIFRlbmFibGUgd2lsbCBzdWZmZXIgaXJyZXBhcmFibGUgaGFybSBhbmQgdGhhdCBtb25ldGFyeSBkYW1hZ2VzIHdpbGwgYmUgaW5hZGVxdWF0ZSB0byBjb21wZW5zYXRlIFRlbmFibGUgZm9yIHN1Y2ggYnJlYWNoLiAgQWNjb3JkaW5nbHksIFRlbmFibGUsIGluIGFkZGl0aW9uIHRvIGFuZCBub3QgaW4gbGlldSBvZiBhbnkgb3RoZXIgcmlnaHRzLCByZW1lZGllcyBvciBkYW1hZ2VzIGF2YWlsYWJsZSB0byBpdCBhdCBsYXcgb3IgaW4gZXF1aXR5LCBzaGFsbCBiZSBlbnRpdGxlZCB0byBzZWVrIGFwcHJvcHJpYXRlIGluanVuY3RpdmUgcmVsaWVmIGFuZCBvdGhlciBtZWFzdXJlcyByZXN0cmFpbmluZyBmdXJ0aGVyIGF0dGVtcHRlZCBvciB0aHJlYXRlbmVkIGJyZWFjaGVzIG9mIHN1Y2ggb2JsaWdhdGlvbnMgd2l0aG91dCByZXF1aXJlbWVudCB0byBwb3N0IGFueSBib25kLiAKKzguIFdhcnJhbnR5IGFuZCBEaXNjbGFpbWVyLiAgCisoYSkgU29mdHdhcmUuICBUZW5hYmxlIHdhcnJhbnRzIHRoYXQsIGZvciBhIHBlcmlvZCBvZiB0aGlydHkgKDMwKSBkYXlzIGZyb20gdGhlIEVmZmVjdGl2ZSBEYXRlICh0aGUgIldhcnJhbnR5IFBlcmlvZCIpLCB0aGUgdW5tb2RpZmllZCBTb2Z0d2FyZSB3aWxsLCB1bmRlciBub3JtYWwgdXNlLCBzdWJzdGFudGlhbGx5IHBlcmZvcm0gdGhlIGZ1bmN0aW9ucyBkZXNjcmliZWQgaW4gaXRzIHRlY2huaWNhbCBkb2N1bWVudGF0aW9uLiAgSWYgdGhlcmUgaGFzIGJlZW4gYSBicmVhY2ggb2YgdGhpcyB3YXJyYW50eSwgdGhlbiBUZW5hYmxlJ3Mgc29sZSBvYmxpZ2F0aW9uLCBhbmQgWW91ciBleGNsdXNpdmUgcmVtZWR5LCB3aWxsIGJlIGZvciBUZW5hYmxlLCBhdCBpdHMgb3B0aW9uLCB0byBjb3JyZWN0IHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgU29mdHdhcmUgYXQgbm8gY2hhcmdlIHNvIHRoYXQgaXQgc3Vic3RhbnRpYWxseSBwZXJmb3JtcyB0aGUgZnVuY3Rpb25zIGRlc2NyaWJlZCBpbiBpdHMgdGVjaG5pY2FsIGRvY3VtZW50YXRpb24gb3IgdG8gcmVwbGFjZSB0aGUgU29mdHdhcmUuICBZb3UgYWNrbm93bGVkZ2UgdGhhdCwgYmVjYXVzZSB0aGUgbGljZW5zZSBmb3IgdGhlIFNvZnR3YXJlIGlzIGF0IG5vIGNoYXJnZSwgdGhlIHJlbWVkaWVzIGRlc2NyaWJlZCBpbiB0aGUgcHJlY2VkaW5nIHNlbnRlbmNlIGFyZSBzdWZmaWNpZW50IGFuZCBjYW4gbm90IGZhaWwgb2YgdGhlaXIgZXNzZW50aWFsIHB1cnBvc2UuICAKKyhiKSBEaXNjbGFpbWVyLiAgRVhDRVBUIEFTIFNQRUNJRklDQUxMWSBTRVQgRk9SVEggSU4gIFNFQ1RJT04gOChhKSwgVEVOQUJMRSBET0VTIE5PVCBNQUtFICBBTlkgV0FSUkFOVElFUyBPRiBBTlkgS0lORCwgV0hFVEhFUiBFWFBSRVNTLCBJTVBMSUVELCBPUiBTVEFUVVRPUlksIElOQ0xVRElORyBBTlkgV0FSUkFOVElFUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgSU5URUdSQVRJT04sIFBFUkZPUk1BTkNFIEFORCBBQ0NVUkFDWSwgQU5EIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgQVJJU0lORyBGUk9NIFNUQVRVVEUsIENPVVJTRSBPRiBERUFMSU5HLCBDT1VSU0UgT0YgUEVSRk9STUFOQ0UgT1IgVVNBR0UgT0YgVFJBREUsIE9USEVSIFRIQU4gVEhPU0UgV0FSUkFOVElFUyBXSElDSCBBUkUgSU1QTElFRCBCWSBBTkQgSU5DQVBBQkxFIE9GIEVYQ0xVU0lPTiwgUkVTVFJJQ1RJT04sIE9SIE1PRElGSUNBVElPTiBVTkRFUiBBUFBMSUNBQkxFIExBVy4gIFRFTkFCTEUgTUFLRVMgTk8gV0FSUkFOVFkgVEhBVCBUSEUgU09GVFdBUkUgV0lMTCBPUEVSQVRFIEVSUk9SLUZSRUUsIEZSRUUgT0YgQU5ZIFNFQ1VSSVRZIERFRkVDVFMgT1IgSU4gQU4gVU5JTlRFUlJVUFRFRCBNQU5ORVIuIAorOS4gRXhjbHVzaW9uIERhbWFnZXMuIAorVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBXSUxMIFRFTkFCTEUgQkUgTElBQkxFIFRPIFlPVSBPUiBBTlkgT1RIRVIgUEVSU09OIE9SIEVOVElUWSBGT1IgRElSRUNUIChJTkNMVURJTkcgRk9SIE5FR0xJR0VOQ0UsIFNUUklDVCBMSUFCSUxJVFksIEJSRUFDSCBPRiBDT05UUkFDVCwgTUlTUkVQUkVTRU5UQVRJT04gQU5EIE9USEVSIENPTlRSQUNUIE9SIFRPUlQgQ0xBSU1TKSwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSBPUiBQVU5JVElWRSBEQU1BR0VTIChJTkNMVURJTkcgTkVHTElHRU5DRSwgU1RSSUNUIExJQUJJTElUWSwgQlJFQUNIIE9GIENPTlRSQUNULCBNSVNSRVBSRVNFTlRBVElPTiBBTkQgT1RIRVIgQ09OVFJBQ1QgT1IgVE9SVCBDTEFJTVM7IExPU1QgUFJPRklUUzsgT1IgQU5ZIERBTUFHRVMgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBEQVRBLCBTRUNVUklUWSBCUkVBQ0gsIFBST1BFUlRZIERBTUFHRSwgTE9TUyBPRiBSRVZFTlVFLCBMT1NTIE9GIEJVU0lORVNTIE9SIExPU1QgU0FWSU5HUyksIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSElTIEFHUkVFTUVOVCwgVEhFIFBFUkZPUk1BTkNFIE9GIFRIRSBTT0ZUV0FSRSBPUiBPRiBBTlkgT1RIRVIgT0JMSUdBVElPTlMgUkVMQVRJTkcgVE8gVEhJUyBBR1JFRU1FTlQsIFdIRVRIRVIgT1IgTk9UIFRFTkFCTEUgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiAgWU9VIEFSRSBTT0xFTFkgUkVTUE9OU0lCTEUgQU5EIExJQUJMRSBGT1IgVkVSSUZZSU5HIFRIRSBTRUNVUklUWSwgQUNDVVJBQ1kgQU5EIEFERVFVQUNZIE9GIEFOWSBPVVRQVVQgRlJPTSBUSEUgU09GVFdBUkUsIEFORCBGT1IgQU5ZIFJFTElBTkNFIFRIRVJFT04uIAorMTAuIEFkZGl0aW9uYWwgUHJvdmlzaW9ucyBSZWdhcmRpbmcgTGlhYmlsaXR5LiAgCitUaGUgcGFydGllcyBhZ3JlZSB0aGF0IHRoZSBmb3JlZ29pbmcgbGltaXRhdGlvbnMgd2lsbCBub3QgYmUgcmVhZCBzbyBhcyB0byBsaW1pdCBhbnkgbGlhYmlsaXR5IHRvIGFuIGV4dGVudCB0aGF0IHdvdWxkIG5vdCBiZSBwZXJtaXR0ZWQgdW5kZXIgYXBwbGljYWJsZSBsYXcgYW5kIHNwZWNpZmljYWxseSB3aWxsIG5vdCBsaW1pdCBhbnkgbGlhYmlsaXR5IGZvciBncm9zcyBuZWdsaWdlbmNlLCBpbnRlbnRpb25hbCB0b3J0aW91cyBvciB1bmxhd2Z1bCBjb25kdWN0IG9yIGRhbWFnZXMgZm9yIHN0cmljdCBsaWFiaWxpdHkgdGhhdCBtYXkgbm90IGJlIGxpbWl0ZWQgYnkgbGF3LgorMTEuIEluZGVtbmlmaWNhdGlvbi4gIAorRWFjaCBvZiB0aGUgcGFydGllcyBhY2tub3dsZWRnZXMgYW5kIGFncmVlcyB0aGF0IGJ5IGVudGVyaW5nIGludG8gYW5kIHBlcmZvcm1pbmcgaXRzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBUZW5hYmxlIHdpbGwgbm90IGFzc3VtZSBhbmQgc2hvdWxkIG5vdCBiZSBleHBvc2VkIHRvIHRoZSBidXNpbmVzcyBhbmQgb3BlcmF0aW9uYWwgcmlza3MgYXNzb2NpYXRlZCB3aXRoIFlvdXIgYnVzaW5lc3MuICBZb3UgYWNrbm93bGVkZ2UgdGhhdCBZb3VyIHVzZSBvZiB0aGUgU29mdHdhcmUgaXMgb25seSBhIHBvcnRpb24gb2YgWW91ciBvdmVyYWxsIHNlY3VyaXR5IHNvbHV0aW9uIGFuZCB0aGF0IFRlbmFibGUgaXMgbm90IHJlc3BvbnNpYmxlIGZvciBZb3VyIG92ZXJhbGwgc2VjdXJpdHkgc29sdXRpb24uICBBcyBiZXR3ZWVuIFlvdSBhbmQgVGVuYWJsZSwgWW91IGFyZSAoYW5kIFRlbmFibGUgaXMgbm90KSByZXNwb25zaWJsZSBmb3IgdGhlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiBzdWNoIHNlY3VyaXR5IHNvbHV0aW9uLiAgQWNjb3JkaW5nbHksIFlvdSBhZ3JlZSB0aGF0IHlvdSB3aWxsLCBhdCB5b3VyIGV4cGVuc2UsIGluZGVtbmlmeSwgZGVmZW5kIGFuZCBob2xkIFRlbmFibGUgaGFybWxlc3MgaW4gYWxsIGNsYWltcyBhbmQgYWN0aW9ucyB0aGF0IHNlZWsgY29tcGVuc2F0aW9uIG9mIGFueSBraW5kIGZvciBpbmp1cnkgb3IgZGVhdGggdG8gcGVyc29ucyBhbmQvb3IgZm9yIGRhbWFnZSB0byBwcm9wZXJ0eSwgYW5kIHRoYXQgYXJpc2Ugb3V0IG9mIG9yIHJlbGF0ZSB0byBZb3VyIHNlY3VyaXR5IHNvbHV0aW9ucyBvciBZb3VyIHVzZSBvZiB0aGUgU29mdHdhcmUgIG9yIHRoZSBzb2x1dGlvbnMgWW91IHByb3ZpZGUgdG8gYSB0aGlyZCBwYXJ0eSB0aHJvdWdoIFlvdXIgdXNlIG9mIHRoZSBTb2Z0d2FyZS4gIFlvdSBhbHNvIGFncmVlIHRvIHBheSBhbGwgc2V0dGxlbWVudHMsIGNvc3RzLCBkYW1hZ2VzLCBsZWdhbCBmZWVzIGFuZCBleHBlbnNlcyBmaW5hbGx5IGF3YXJkZWQgaW4gYWxsIHN1Y2ggY2xhaW1zIGFuZCBhY3Rpb25zLiAKKzEyLiBMZWdhbCBDb21wbGlhbmNlOyBSZXN0cmljdGVkIFJpZ2h0cy4gIAorVGhlIFNvZnR3YXJlIGFyZSBwcm92aWRlZCBzb2xlbHkgZm9yIGxhd2Z1bCBwdXJwb3NlcyBhbmQgdXNlLiAgWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yLCBhbmQgYWdyZWUgdG8gcGVyZm9ybSB5b3VyIG9ibGlnYXRpb25zIGluIGEgbWFubmVyIHRoYXQgY29tcGxpZXMgd2l0aCBhbGwgYXBwbGljYWJsZSBuYXRpb25hbCwgcmVnaW9uYWwgYW5kIGxvY2FsIGxhd3MsIHN0YXR1dGVzLCBvcmRpbmFuY2VzLCByZWd1bGF0aW9ucywgY29kZXMgYW5kIG90aGVyIHR5cGVzIG9mIGdvdmVybm1lbnQgYXV0aG9yaXR5IChpbmNsdWRpbmcgdGhvc2UgZ292ZXJuaW5nIGV4cG9ydCBjb250cm9sLCB1bmZhaXIgY29tcGV0aXRpb24sIGFudGktZGlzY3JpbWluYXRpb24sIGZhbHNlIGFkdmVydGlzaW5nLCBwcml2YWN5IGFuZCBkYXRhIHByb3RlY3Rpb24sIGFuZCBwdWJsaWNpdHkgYW5kIHRob3NlIGlkZW50aWZ5aW5nIGFuZCBwcm9jdXJpbmcgcmVxdWlyZWQgcGVybWl0cywgbGljZW5zZXMsIGFwcHJvdmFscywgYW5kIG90aGVyIGNvbnNlbnRzKSAoIkxhd3MiKS4gIElmIGEgY2hhcmdlIGlzIG1hZGUgdGhhdCBZb3UgYXJlIG5vdCBjb21wbHlpbmcgd2l0aCBhbnkgc3VjaCBMYXdzLCBZb3Ugd2lsbCBwcm9tcHRseSBub3RpZnkgVGVuYWJsZSBvZiBzdWNoIGNoYXJnZXMgaW4gd3JpdGluZy4gIFdpdGhvdXQgbGltaXRpbmcgdGhlIGZvcmVnb2luZywgWW91IGFncmVlIHRvIGNvbXBseSB3aXRoIGFsbCBVLlMuIGV4cG9ydCBMYXdzIGFuZCBhcHBsaWNhYmxlIGV4cG9ydCBMYXdzIG9mIFlvdXIgbG9jYWxpdHkgKGlmIFlvdSBhcmUgbm90IGluIHRoZSBVbml0ZWQgU3RhdGVzKSwgdG8gZW5zdXJlIHRoYXQgbm8gaW5mb3JtYXRpb24gb3IgdGVjaG5pY2FsIGRhdGEgcHJvdmlkZWQgcHVyc3VhbnQgdG8gdGhpcyBBZ3JlZW1lbnQgaXMgZXhwb3J0ZWQgb3IgcmUtZXhwb3J0ZWQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbiB2aW9sYXRpb24gb2YgTGF3IG9yIHdpdGhvdXQgZmlyc3Qgb2J0YWluaW5nIGFsbCByZXF1aXJlZCBhdXRob3JpemF0aW9ucyBvciBsaWNlbnNlcy4gIFlvdSB3aWxsLCBhdCBZb3VyIHNvbGUgY29zdCBhbmQgZXhwZW5zZSwgb2J0YWluIGFuZCBtYWludGFpbiBpbiBlZmZlY3QgYWxsIHBlcm1pdHMsIGxpY2Vuc2VzLCBhcHByb3ZhbHMgYW5kIG90aGVyIGNvbnNlbnRzIHJlbGF0ZWQgdG8gWW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudC4gIFlvdSBhZ3JlZSwgYXQgWW91ciBleHBlbnNlLCB0byBjb21wbHkgd2l0aCBhbGwgZm9yZWlnbiBleGNoYW5nZSBhbmQgb3RoZXIgTGF3cyBhcHBsaWNhYmxlIHRvIFlvdS4gIFRoZSBTb2Z0d2FyZSBpcyBsaWNlbnNlZCBzdWJqZWN0IHRvIFRlbmFibGUncyBzdGFuZGFyZCBjb21tZXJjaWFsIGFncmVlbWVudDsgU29mdHdhcmUgbGljZW5zZWQgZm9yIHVzZSBieSB0aGUgVW5pdGVkIFN0YXRlcyBnb3Zlcm5tZW50IGlzIHByb3ZpZGVkIHdpdGggIlJlc3RyaWN0ZWQgUmlnaHRzIiBvbmx5IGFzIGRlZmluZWQgaW4gNDggQy5GLlIuIF81Mi4yMjctMTQgYW5kIDQ4IEMuRi5SLiBfMjUyLjIyNy03MDE0IGlmIHRoZSBjb21tZXJjaWFsIHRlcm1zIGFyZSBkZWVtZWQgbm90IHRvIGFwcGx5LiAKKzEzLiBUZXJtaW5hdGlvbi4KKyhhKSBZb3UgbWF5IHRlcm1pbmF0ZSB0aGlzIEFncmVlbWVudCBhdCBhbnkgdGltZSBieSBkZXN0cm95aW5nIG9yIHJldHVybmluZyB0byBUZW5hYmxlIHRoZSBTb2Z0d2FyZSwgdG9nZXRoZXIgd2l0aCBhbGwgY29waWVzLCBtb2RpZmljYXRpb25zIGFuZCBtZXJnZWQgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlIGluIGFueSBmb3JtLgorKGIpIFRoaXMgQWdyZWVtZW50IGFuZCBZb3VyIExpY2Vuc2UgdG8gdXNlIHRoZSBTb2Z0d2FyZSBzaGFsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCBhbnkgdGVybSBvciBjb25kaXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQuIEltbWVkaWF0ZWx5IGFmdGVyIHRlcm1pbmF0aW9uIG9mIHRoaXMgQWdyZWVtZW50LCBZb3Ugc2hhbGwgZGVzdHJveSBvciByZXR1cm4gdG8gVGVuYWJsZSB0aGUgU29mdHdhcmUsIHRvZ2V0aGVyIHdpdGggYWxsIGNvcGllcywgbW9kaWZpY2F0aW9ucyBhbmQgbWVyZ2VkIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZSBpbiBhbnkgZm9ybSwgYW5kIHNoYWxsIGNlcnRpZnkgdG8gVGVuYWJsZSBpbiB3cml0aW5nIHRoYXQgdGhyb3VnaCBZb3VyIGJlc3QgZWZmb3J0cyBhbmQgdG8gdGhlIGJlc3Qgb2YgeW91ciBrbm93bGVkZ2UgYWxsIHN1Y2ggbWF0ZXJpYWxzIGhhdmUgYmVlbiBkZXN0cm95ZWQgb3IgcmV0dXJuZWQgdG8gVGVuYWJsZSBhbmQgcmVtb3ZlZCBmcm9tIGhvc3QgY29tcHV0ZXJzIG9uIHdoaWNoIFNvZnR3YXJlIHJlc2lkZWQuCisxNC4gR292ZXJuaW5nIExhdy4gIAorVGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgZ292ZXJuZWQgaW4gYWxsIHJlc3BlY3RzIGJ5IHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBNYXJ5bGFuZCwgVVNBLCB3aXRob3V0IHJlZ2FyZCB0byBjaG9pY2Utb2YtbGF3IHJ1bGVzIG9yIHByaW5jaXBsZXMuICBZb3UgZXhwcmVzc2x5IGFncmVlIHdpdGggVGVuYWJsZSB0aGF0IHRoaXMgQWdyZWVtZW50IHNoYWxsIG5vdCBiZSBnb3Zlcm5lZCBieSB0aGUgVS5OLiBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcywgdGhlIGFwcGxpY2F0aW9uIG9mIHdoaWNoIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gCisxNS4gRGlzcHV0ZSBSZXNvbHV0aW9uLiAgCitZb3UgYW5kIFRlbmFibGUgc3VibWl0IHRvIHRoZSBleGNsdXNpdmUganVyaXNkaWN0aW9uIG9mIHRoZSBjb3VydHMgb2YgSG93YXJkIENvdW50eSwgTWFyeWxhbmQgYW5kIHRoZSBVbml0ZWQgU3RhdGVzIERpc3RyaWN0IENvdXJ0IGZvciBNYXJ5bGFuZCwgQmFsdGltb3JlIERpdmlzaW9uLCBmb3IgYW55IHF1ZXN0aW9uIG9yIGRpc3B1dGUgYXJpc2luZyBvdXQgb2Ygb3IgcmVsYXRpbmcgdG8gdGhpcyBBZ3JlZW1lbnQuICBEdWUgdG8gdGhlIGhpZ2ggY29zdHMgYW5kIHRpbWUgaW52b2x2ZWQgaW4gY29tbWVyY2lhbCBsaXRpZ2F0aW9uIGJlZm9yZSBhIGp1cnksIHRoZSBwYXJ0aWVzIHdhaXZlIGFsbCByaWdodCB0byBhIGp1cnkgdHJpYWwgd2l0aCByZXNwZWN0IHRvIGFueSBhbmQgYWxsIGlzc3VlcyBpbiBhbnkgYWN0aW9uIG9yIHByb2NlZWRpbmcgYXJpc2luZyBvdXQgb2Ygb3IgcmVsYXRlZCB0byB0aGlzIEFncmVlbWVudC4gIAorMTYuIE5vdGljZXMuICAKK0FueSBub3RpY2VzIG9yIG90aGVyIGNvbW11bmljYXRpb24gcmVxdWlyZWQgb3IgcGVybWl0dGVkIHRvIGJlIG1hZGUgb3IgZ2l2ZW4gYnkgZWl0aGVyIFBhcnR5IHB1cnN1YW50IHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYmUgaW4gd3JpdGluZywgaW4gRW5nbGlzaCwgYW5kIHdpbGwgYmUgZGVlbWVkIHRvIGhhdmUgYmVlbiBkdWx5IGdpdmVuIHdoZW4gZGVsaXZlcmVkIGlmIGRlbGl2ZXJlZCBwZXJzb25hbGx5IG9yIHNlbnQgYnkgcmVjb2duaXplZCBvdmVybmlnaHQgZXhwcmVzcyBjb3VyaWVyLCB0byB0aGUgYWRkcmVzcyBzcGVjaWZpZWQgaGVyZWluIG9yIHN1Y2ggb3RoZXIgYWRkcmVzcyBhcyBUZW5hYmxlIG1heSBzcGVjaWZ5IGluIHdyaXRpbmcuICBBbGwgbm90aWNlcyB0byBUZW5hYmxlIHNoYWxsIGJlIHNlbnQgdG8gdGhlIGF0dGVudGlvbiBvZiB0aGUgTGVnYWwgRGVwYXJ0bWVudCAodW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQgYnkgVGVuYWJsZSkuIAorQWxsIG5vdGljZXMgc2hhbGwgYmUgc2VudCB0bzoKK1RlbmFibGUgTmV0d29yayBTZWN1cml0eQorODgzMCBTdGFuZm9yZCBCb3VsZXZhcmQsIFN1aXRlIDMxMgorQ29sdW1iaWEsIE1EIDIxMDQ1CitBdHRuOiBMZWdhbCBEZXBhcnRtZW50CisxNy4gVHJhbnNmZXIgYW5kIEFzc2lnbm1lbnQuIAorWW91IG1heSBub3QgcmVudCwgbGVhc2UsIGxlbmQsIHN1YmxpY2Vuc2Ugb3Igb3RoZXJ3aXNlIHByb3ZpZGUgdGhlIFNvZnR3YXJlIHRvIGFueSB0aGlyZCBwYXJ0eS4gWW91IG1heSBub3QgYXNzaWduIG9yIG90aGVyd2lzZSB0cmFuc2ZlciB0aGlzIEFncmVlbWVudCB3aXRob3V0IFRlbmFibGUncyBwcmlvciB3cml0dGVuIGNvbnNlbnQuICBZb3UgbWF5IHVzZSB0aGUgU29mdHdhcmUgdG8gcHJvdmlkZSBzZXJ2aWNlcyB0byB0aGlyZCBwYXJ0aWVzIGFzIGV4cHJlc3NseSBwcm92aWRlZCBpbiB0aGlzIEFncmVlbWVudC4KKzE4LiBQdWJsaWNpdHkuCitZb3Ugd2lsbCBub3QgdXNlIFRlbmFibGUncyBjb21wYW55IG5hbWUgb3IgYW55IHRyYWRlbWFya3MsIGxvZ29zLCBzZXJ2aWNlIG1hcmtzIG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSwgb3IgcmVmZXIgdG8gVGVuYWJsZSBvciBhbnkgb2YgaXRzIGVtcGxveWVlcywgaW4gYW55IGZvcm0gb2YgYWR2ZXJ0aXNpbmcsIHB1YmxpY2l0eSBvciByZWxlYXNlIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gYXBwcm92YWwgb2YgVGVuYWJsZSwgd2hpY2ggVGVuYWJsZSBtYXkgd2l0aGhvbGQgaW4gaXRzIHNvbGUgZGlzY3JldGlvbi4gCisxOS4gTGFuZ3VhZ2UuICAKK1RoZSBsYW5ndWFnZSBvZiB0aGlzIEFncmVlbWVudCBpcyBFbmdsaXNoIGFuZCBhbGwgbm90aWNlcyBnaXZlbiB1bmRlciB0aGlzIEFncmVlbWVudCBtdXN0IGJlIGluIEVuZ2xpc2ggdG8gYmUgZWZmZWN0aXZlLiAgTm8gdHJhbnNsYXRpb24sIGlmIGFueSwgb2YgdGhpcyBBZ3JlZW1lbnQgb3IgYW55IG5vdGljZSB3aWxsIGJlIG9mIGFueSBlZmZlY3QgaW4gdGhlIGludGVycHJldGF0aW9uIG9mIHRoaXMgQWdyZWVtZW50IG9yIGluIGRldGVybWluaW5nIHRoZSBpbnRlbnQgb2YgdGhlIHBhcnRpZXMuICBUaGUgcGFydGllcyBoYXZlIGV4cHJlc3NseSBhZ3JlZWQgdGhhdCBhbGwgaW52b2ljZXMgYW5kIHJlbGF0ZWQgZG9jdW1lbnRzIGJlIGRyYWZ0ZWQgaW4gRW5nbGlzaC4gCisyMC4gVGhpcmQgUGFydGllcy4gIAorVGhpcyBBZ3JlZW1lbnQgaXMgbm90IGludGVuZGVkIG5vciB3aWxsIGl0IGJlIGludGVycHJldGVkIHRvIGNvbmZlciBhbnkgYmVuZWZpdCwgcmlnaHQgb3IgcHJpdmlsZWdlIGluIGFueSBwZXJzb24gb3IgZW50aXR5IG5vdCBhIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50LiAgQW55IHBhcnR5IHdobyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCBoYXMgbm8gcmlnaHQgdW5kZXIgYW55IExhdyB0byBlbmZvcmNlIGFueSB0ZXJtIG9mIHRoaXMgQWdyZWVtZW50LgorMjEuIFRyYWRlbWFya3MuIAorTmVzc3VzIGlzIGEgdHJhZGVtYXJrIG9mIFRlbmFibGUuICBUZW5hYmxlIGRvZXMgbm90IGdyYW50IHRvIFlvdSwgZWl0aGVyIGV4cHJlc3NseSBvciBieSBpbXBsaWNhdGlvbiwgYW55IGxpY2Vuc2Ugb3IgcGVybWlzc2lvbiB1bmRlciB0aGlzIEFncmVlbWVudCB0byB1c2UgYW55IG9mIHRoZSBUZW5hYmxlIG1hcmtzIChpbmNsdWRpbmcgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgdHJhZGUgbmFtZXMsIHRyYWRlIGRyZXNzLCBzeW1ib2xzLCBsb2dvcywgZGVzaWducywgZG9tYWluIG5hbWVzLCBzbG9nYW5zIGFuZCBvdGhlciBzb3VyY2UgaWRlbnRpZmllcnMpIChjb2xsZWN0aXZlbHksIHRoZSAiTWFya3MiKS4gCisyMi4gR2VuZXJhbC4gIAorVGhpcyBBZ3JlZW1lbnQgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcywgYW5kIHN1cGVyc2VkZXMgYWxsIG90aGVyIHByaW9yIG9yIGNvbnRlbXBvcmFuZW91cyBjb21tdW5pY2F0aW9ucyBiZXR3ZWVuIHRoZSBwYXJ0aWVzICh3aGV0aGVyIHdyaXR0ZW4gb3Igb3JhbCkgcmVsYXRpbmcgdG8gdGhlIHN1YmplY3QgbWF0dGVyIG9mIHRoaXMgQWdyZWVtZW50LiBObyBzdXBwbGVtZW50LCBtb2RpZmljYXRpb24gb3IgYW1lbmRtZW50IG9mIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGJpbmRpbmcsIHVubGVzcyBleGVjdXRlZCBpbiB3cml0aW5nIGJ5IGEgZHVseSBhdXRob3JpemVkIHJlcHJlc2VudGF0aXZlIG9mIGVhY2ggcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQuICBUaGUgcHJvdmlzaW9ucyBvZiB0aGlzIEFncmVlbWVudCB3aWxsIGJlIGRlZW1lZCBzZXZlcmFibGUsIGFuZCB0aGUgdW5lbmZvcmNlYWJpbGl0eSBvZiBhbnkgb25lIG9yIG1vcmUgcHJvdmlzaW9ucyB3aWxsIG5vdCBhZmZlY3QgdGhlIGVuZm9yY2VhYmlsaXR5IG9mIGFueSBvdGhlciBwcm92aXNpb25zLiAgSW4gYWRkaXRpb24sIGlmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQsIGZvciBhbnkgcmVhc29uLCBpcyBkZWNsYXJlZCB0byBiZSB1bmVuZm9yY2VhYmxlLCB0aGUgcGFydGllcyB3aWxsIHN1YnN0aXR1dGUgYW4gZW5mb3JjZWFibGUgcHJvdmlzaW9uIHRoYXQsIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZSB1bmRlciBhcHBsaWNhYmxlIGxhdywgcHJlc2VydmVzIHRoZSBvcmlnaW5hbCBpbnRlbnRpb25zIGFuZCBlY29ub21pYyBwb3NpdGlvbnMgb2YgdGhlIHBhcnRpZXMuICBObyBmYWlsdXJlIG9yIGRlbGF5IGJ5IGEgcGFydHkgaW4gZXhlcmNpc2luZyBhbnkgcmlnaHQsIHBvd2VyIG9yIHJlbWVkeSB3aWxsIG9wZXJhdGUgYXMgYSB3YWl2ZXIgb2YgdGhhdCByaWdodCwgcG93ZXIgb3IgcmVtZWR5LCBhbmQgbm8gd2FpdmVyIHdpbGwgYmUgZWZmZWN0aXZlIHVubGVzcyBpdCBpcyBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgdGhlIHdhaXZpbmcgcGFydHkuICBJZiBhIHBhcnR5IHdhaXZlcyBhbnkgcmlnaHQsIHBvd2VyIG9yIHJlbWVkeSwgdGhlIHdhaXZlciB3aWxsIG5vdCB3YWl2ZSBhbnkgc3VjY2Vzc2l2ZSBvciBvdGhlciByaWdodCwgcG93ZXIgb3IgcmVtZWR5IHRoZSBwYXJ0eSBtYXkgaGF2ZSB1bmRlciB0aGlzIEFncmVlbWVudC4gIEFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgdGhhdCBpbXBvc2VzIG9yIGNvbnRlbXBsYXRlcyBjb250aW51aW5nIG9ibGlnYXRpb25zIG9uIGEgcGFydHkgd2lsbCBzdXJ2aXZlIHRoZSBleHBpcmF0aW9uIG9yIHRlcm1pbmF0aW9uIG9mIHRoaXMgQWdyZWVtZW50LiAgIkluY2x1ZGluZyIgYW5kIGl0cyBkZXJpdmF0aXZlcyAoc3VjaCBhcyAiaW5jbHVkZSIgYW5kICJpbmNsdWRlcyIpIG1lYW4gaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbjsgdGhpcyB0ZXJtIGlzIGFzIGRlZmluZWQsIHdoZXRoZXIgb3Igbm90IGNhcGl0YWxpemVkIGluIHRoaXMgQWdyZWVtZW50LgorRVhISUJJVCBBCitURU5BQkxFIE5FVFdPUksgU0VDVVJJVFksIElOQy4KK1NVQlNDUklQVElPTiBBR1JFRU1FTlQKKworVGhpcyBpcyBhIGxlZ2FsIGFncmVlbWVudCAoIlN1YnNjcmlwdGlvbiBBZ3JlZW1lbnQiKSBiZXR3ZWVuIFRlbmFibGUgTmV0d29yayBTZWN1cml0eSwgSW5jLiwgYSBEZWxhd2FyZSBjb3Jwb3JhdGlvbiBoYXZpbmcgb2ZmaWNlcyBhdCA4ODMwIFN0YW5mb3JkIEJvdWxldmFyZCwgU3VpdGUgMzEyLCBDb2x1bWJpYSwgTUQgMjEwNDUgKCJUZW5hYmxlIiksIGFuZCB5b3UsIHRoZSBwYXJ0eSBkb3dubG9hZGluZyB0aGUgUGx1Z2lucyBhcyBkZWZpbmVkIGJlbG93ICgiWW91IiksIHRocm91Z2ggVGVuYWJsZSdzIFN1YnNjcmlwdGlvbiBzZXJ2aWNlIGFzIGRlZmluZWQgYmVsb3cuICBUaGlzIFN1YnNjcmlwdGlvbiBBZ3JlZW1lbnQgY292ZXJzIHlvdXIgcGVybWl0dGVkIHVzZSBvZiB0aGUgUGx1Z2lucy4gIEJZIENMSUNLSU5HIEJFTE9XIFlPVSBJTkRJQ0FURSBZT1VSIEFDQ0VQVEFOQ0UgT0YgVEhJUyBTVUJTQ1JJUFRJT04gQUdSRUVNRU5UIEFORCBZT1UgQUNLTk9XTEVER0UgVEhBVCBZT1UgSEFWRSBSRUFEIEFMTCBPRiBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBTVUJTQ1JJUFRJT04gQUdSRUVNRU5ULCBVTkRFUlNUQU5EIFRIRU0sIEFORCBBR1JFRSBUTyBCRSBMRUdBTExZIEJPVU5EIEJZIFRIRU0uICBJZiBZb3UgZG8gbm90IGFncmVlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgU3Vic2NyaXB0aW9uIEFncmVlbWVudCwgWW91IG1heSBub3QgdXNlIHRoZSBQbHVnaW5zIGFzIGRlZmluZWQgYmVsb3cuICBUaGUgUGx1Z2lucyBjYW4gb25seSBiZSBwcm92aWRlZCB0byBZb3UgYnkgVGVuYWJsZS4gICAKKworMSkgR3JhbnQgb2YgUGx1Z2lucyBMaWNlbnNlLiAgCitpKSBHcmFudC4gIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zLCBhbmQgeW91ciBhY2NlcHRhbmNlLCBvZiB0aGlzIFN1YnNjcmlwdGlvbiBBZ3JlZW1lbnQsIFRlbmFibGUgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwgbm9uLWV4Y2x1c2l2ZSwgbm9uLXRyYW5zZmVyYWJsZSBsaWNlbnNlICh0aGUgIkxpY2Vuc2UiKSBpbiBvYmplY3QgY29kZSBmb3JtIG9ubHkgdG8gdXNlIHRoZSBQbHVnaW5zIChhKSBzb2xlbHkgZm9yIFlvdXIgaW50ZXJuYWwgb3BlcmF0aW9ucyBhbmQgaW50ZXJuYWwgc2VjdXJpdHkgcHVycG9zZXMgdG8gc2VlayBhbmQgYXNzZXNzIGluZm9ybWF0aW9uIHRlY2hub2xvZ3kgdnVsbmVyYWJpbGl0aWVzIGV2ZW50cyBmb3IgWW91ciBvd24gbmV0d29ya3M7IGFuZCAoYikgdG8gcHJvdmlkZSBzZXJ2aWNlcyB0byB0aGlyZCBwYXJ0aWVzIHRvIHNlZWsgYW5kIGFzc2VzcyBpbmZvcm1hdGlvbiB0ZWNobm9sb2d5IHZ1bG5lcmFiaWxpdGllcyBldmVudHMgb24gdGhlIHRoaXJkIHBhcnR5J3MgbmV0d29yay4gIEFueSByaWdodHMgaW4gdGhlIFBsdWdpbnMgbm90IGdyYW50ZWQgaW4gdGhpcyBTdWJzY3JpcHRpb24gQWdyZWVtZW50IGFyZSBleHByZXNzbHkgcmVzZXJ2ZWQgYnkgVGVuYWJsZS4gCitpaSkgRGVmaW5pdGlvbiBvZiBQbHVnaW5zLiAgVGhlIHRlcm0gIlBsdWdpbnMiIG1lYW5zIChpKSBhbnkgcGx1Z2lucyAoYW5kIHJlbGF0ZWQgdXBkYXRlcykgdGhhdCBhcmUgbWFya2VkIGFzIGNvcHlyaWdodGVkIGJ5IFRlbmFibGUuICAgQW55IHBsdWdpbnMgb3IgY29tcG9uZW50cyB0aGF0IGFyZSBub3QgbWFya2VkIGFzIGNvcHlyaWdodGVkIGJ5IFRlbmFibGUgYXJlIG5vdCBQbHVnaW5zIGFzIGRlZmluZWQgdW5kZXIgdGhpcyBTdWJzY3JpcHRpb24gQWdyZWVtZW50IGFuZCBhcmUgc3ViamVjdCB0byBvdGhlciBsaWNlbnNlIHRlcm1zLiAKK2lpaSkgVXNlLiAgWW91IGFncmVlIHRvIHVzZSB0aGUgUGx1Z2lucyBvbmx5IGluIGNvbmp1bmN0aW9uIHdpdGggTmVzc3VzIG9yIE5lV1QgdnVsbmVyYWJpbGl0eSBzY2FubmVyIHByb2dyYW1zIG9idGFpbmVkIGRpcmVjdGx5IGZyb20gd3d3Lm5lc3N1cy5vcmcgb3Igd3d3LnRlbmFibGVzZWN1cml0eS5jb20gYW5kIHJlZ2lzdGVyZWQgd2l0aCBUZW5hYmxlICgiUmVnaXN0ZXJlZCBTY2FubmVycyIpIGFuZCBmb3Igd2hpY2ggWW91IGhhdmUgcGFpZCB0aGUgYXBwbGljYWJsZSBmZWUsIGlmIGFueS4gIFlvdXIgdXNlIG9mIHRoZSBQbHVnaW5zIHdpbGwgYmUgaW4gYWNjb3JkYW5jZSB3aXRoIG9uZSBvZiB0aGUgU3Vic2NyaXB0aW9ucyBkZXNjcmliZWQgaW4gU2VjdGlvbiAyIGJlbG93LgorMikgU3Vic2NyaXB0aW9ucy4gIAoraSkgR2VuZXJhbC4gIFRoZSBSZWdpc3RlcmVkIEZlZWQgU3Vic2NyaXB0aW9uIGFuZCBEaXJlY3QgRmVlZCBTdWJzY3JpcHRpb24gaW5jbHVkZSB2dWxuZXJhYmlsaXR5IGRldGVjdGlvbiBwcm9ncmFtcyBub3QgZGV2ZWxvcGVkIGJ5IFRlbmFibGUgb3IgaXRzIGxpY2Vuc29ycywgd2hpY2ggYXJlIGxpY2Vuc2VkIHRvIFlvdSB1bmRlciBzZXBhcmF0ZSBhZ3JlZW1lbnRzLiAgVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgU3Vic2NyaXB0aW9uIEFncmVlbWVudCBkbyBub3QgYXBwbHkgdG8gc3VjaCB2dWxuZXJhYmlsaXR5IGRldGVjdGlvbiBwcm9ncmFtcy4KK2lpKSBSZWdpc3RlcmVkIEZlZWQgU3Vic2NyaXB0aW9uLiAgVGhlIFJlZ2lzdGVyZWQgRmVlZCBTdWJzY3JpcHRpb24gcGVybWl0cyBZb3UgdG8gdXNlIHRoZSBQbHVnaW5zIGluIGNvbmp1bmN0aW9uIHdpdGggUmVnaXN0ZXJlZCBTY2FubmVycyB0byBkZXRlY3QgdnVsbmVyYWJpbGl0aWVzIG9ubHkgb24geW91ciBzeXN0ZW0gb3IgbmV0d29yayBvciBvbiB0aGUgc3lzdGVtIG9yIG5ldHdvcmsgb2YgYSB0aGlyZCBwYXJ0eSBmb3Igd2hpY2ggeW91IHBlcmZvcm0gc2Nhbm5pbmcgc2VydmljZXMsIGF1ZGl0aW5nIHNlcnZpY2VzLCBpbmNpZGVudCByZXNwb25zZSBzZXJ2aWNlcywgdnVsbmVyYWJpbGl0eSBhc3Nlc3NtZW50IHNlcnZpY2VzIG9yIG90aGVyIHNlY3VyaXR5IGNvbnN1bHRpbmcgc2VydmljZXMuICAKK2lpaSkgRGlyZWN0IEZlZWQgU3Vic2NyaXB0aW9uLiAgVGhlIERpcmVjdCBGZWVkIFN1YnNjcmlwdGlvbiBwZXJtaXRzIFlvdSB0byB1c2UgdGhlIFBsdWdpbnMgaW4gY29uanVuY3Rpb24gd2l0aCBSZWdpc3RlcmVkIFNjYW5uZXJzIHRvIGRldGVjdCB2dWxuZXJhYmlsaXRpZXMgb25seSBvbiB5b3VyIHN5c3RlbSBvciBuZXR3b3JrIG9yIG9uIHRoZSBzeXN0ZW0gb3IgbmV0d29yayBvZiBhIHRoaXJkIHBhcnR5IGZvciB3aGljaCB5b3UgcGVyZm9ybSBzY2FubmluZyBzZXJ2aWNlcywgYXVkaXRpbmcgc2VydmljZXMsIGluY2lkZW50IHJlc3BvbnNlIHNlcnZpY2VzLCB2dWxuZXJhYmlsaXR5IGFzc2Vzc21lbnQgc2VydmljZXMgb3Igb3RoZXIgc2VjdXJpdHkgY29uc3VsdGluZyBzZXJ2aWNlczsgcHJvdmlkZWQgdGhhdCBZb3UgaGF2ZSBwYWlkIHRoZSBhcHBsaWNhYmxlIGFubnVhbCBzdWJzY3JpcHRpb24gZmVlIGZvciBlYWNoIFJlZ2lzdGVyZWQgU2Nhbm5lciBpbiBjb25qdW5jdGlvbiB3aXRoIHdoaWNoIFlvdSB3aWxsIHVzZSB0aGUgUGx1Z2lucy4gWW91IHdpbGwgcmVjZWl2ZSB0aGUgRGlyZWN0IEZlZWQgU3Vic2NyaXB0aW9uIGFuZCBlbWFpbCBzdXBwb3J0IGlmIHlvdSB1c2UgdGhpcyBEaXJlY3QgRmVlZCBTdWJzY3JpcHRpb24gd2l0aCB0aGUgU3VwcG9ydGVkIGNvbW1lcmNpYWwgdmVyc2lvbiBvZiBOZXNzdXMgKGZvciBjbGFyaWZpY2F0aW9uLCBhIGNvbW1lcmNpYWwgdmVyc2lvbiBvZiBOZXNzdXMgbWVhbnMgTmVzc3VzIHZlcnNpb24gMyBvciBiZXR0ZXIgd2hpY2ggd2FzIGRldmVsb3BlZCwgY29weXJpZ2h0ZWQgYW5kIGRpc3RyaWJ1dGVkIGJ5IFRlbmFibGUgYW5kIG5vdCByZWxlYXNlZCBhcyBvcGVuIHNvdXJjZSBvciBsaWNlbnNlZCB1bmRlciB0aGUgR1BMKS4gIFRoZSB0ZXJtICJTdXBwb3J0ZWQiIG1lYW5zIHRoZSBsaXN0IG9mIE9wZXJhdGluZyBTeXN0ZW0gZGlzdHJpYnV0aW9uKHMpIGluY2x1ZGVkIGluIHRoZSBQbHVnaW4gRkFRIG9yIE5lc3N1cyBGQVEgZm91bmQgb24gYW55IFRlbmFibGUgd2Vic2l0ZSwgaW5jbHVkaW5nIHd3dy5uZXNzdXMub3JnLiAgRm9yIHRoZSBEaXJlY3QgRmVlZCBTdWJzY3JpcHRpb24sIFlvdSBhZ3JlZSB0byBwYXkgYSBzdWJzY3JpcHRpb24gZmVlIHRvIFRlbmFibGUgZm9yIGVhY2ggc3lzdGVtIG9uIHdoaWNoIHlvdSBoYXZlIGluc3RhbGxlZCBhIFJlZ2lzdGVyZWQgU2Nhbm5lci4KKzMpIFRlcm0uCitUaGlzIFN1YnNjcmlwdGlvbiBBZ3JlZW1lbnQgY29tbWVuY2VzIG9uIHRoZSBkYXRlIG9uIHdoaWNoIFlvdSBleGVjdXRlIHRoaXMgU3Vic2NyaXB0aW9uIEFncmVlbWVudCBvciBkb3dubG9hZCwgaW5zdGFsbCBvciB1c2UgdGhlIFBsdWdpbnMgKHdoaWNoZXZlciBvY2N1cnMgZmlyc3QpICh0aGUgIkVmZmVjdGl2ZSBEYXRlIikgYW5kIGNvbnRpbnVlcyB1bnRpbCBpdCBpcyB0ZXJtaW5hdGVkIGFjY29yZGluZyB0byB0aGUgdGVybXMgb2YgdGhpcyBTdWJzY3JpcHRpb24gQWdyZWVtZW50LgorNCkgSW50ZWxsZWN0dWFsIFByb3BlcnR5LiAgCitUaGlzIFN1YnNjcmlwdGlvbiBBZ3JlZW1lbnQgZG9lcyBub3QgdHJhbnNmZXIgdG8gWW91IGFueSB0aXRsZSB0byBvciBhbnkgb3duZXJzaGlwIHJpZ2h0IG9yIGludGVyZXN0IGluIHRoZSBQbHVnaW5zLiAgWW91IGFja25vd2xlZGdlIHRoYXQgVGVuYWJsZSBvd25zIGFuZCByZXRhaW5zIGFsbCByaWdodCwgdGl0bGUgYW5kIGludGVyZXN0IGluIGFuZCB0byB0aGUgUGx1Z2lucy4gIEFsbCBlbmhhbmNlbWVudHMsIG1vZGlmaWNhdGlvbnMgYW5kIGRlcml2YXRpdmUgd29ya3MgdGhhdCBUZW5hYmxlIG1ha2VzIHRvIHRoZSBQbHVnaW5zIG9yIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uLCBhbmQgYWxsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgdGhlcmVpbiwgd2lsbCBiZSB0aGUgcHJvcGVydHkgb2YgVGVuYWJsZS4gIFlvdXIgcmlnaHRzIHdpdGggcmVzcGVjdCB0byB0aGUgUGx1Z2lucyBhcmUgbGltaXRlZCB0byB0aGUgcmlnaHQgdG8gdXNlIHRoZSBQbHVnaW5zIHB1cnN1YW50IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBpbiB0aGlzIFN1YnNjcmlwdGlvbiBBZ3JlZW1lbnQuICAgIAorNSkgTm8gUmV2ZXJzZSBFbmdpbmVlcmluZywgT3RoZXIgUmVzdHJpY3Rpb25zLiAgCitZb3UgbWF5IG5vdCBkaXJlY3RseSBvciBpbmRpcmVjdGx5OiAoaSkgc2VsbCwgbGVhc2UsIHJlZGlzdHJpYnV0ZSBvciB0cmFuc2ZlciBhbnkgb2YgdGhlIFBsdWdpbnMgb24gYSBzdGFuZC1hbG9uZSBiYXNpczsgKGlpKSBkZWNvbXBpbGUsIGRpc2Fzc2VtYmxlLCByZXZlcnNlIGVuZ2luZWVyLCBvciBvdGhlcndpc2UgYXR0ZW1wdCB0byBkZXJpdmUsIG9idGFpbiBvciBtb2RpZnkgdGhlIHNvdXJjZSBjb2RlIG9mIHRoZSBQbHVnaW5zOyAoaWlpKSByZXByb2R1Y2UsIG1vZGlmeSwgdHJhbnNsYXRlIG9yIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIG9mIGFsbCBvciBwYXJ0IGFueSBvZiB0aGUgUGx1Z2luczsgKGl2KSByZW50LCBsZWFzZSBvciBsb2FuIHRoZSBQbHVnaW5zIGluIGFueSBmb3JtIHRvIGFueSB0aGlyZCBwYXJ0eSBvciBvdGhlcndpc2UgYWxsb3cgYSB0aGlyZCBwYXJ0eSB0byB1c2UgdGhlIFBsdWdpbnM7IG9yICh2KSByZW1vdmUsIGFsdGVyIG9yIG9ic2N1cmUgYW55IHByb3ByaWV0YXJ5IG5vdGljZSwgbGFiZWxzLCBvciBtYXJrcyBvbiB0aGUgUGx1Z2lucy4gIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgaW4gdGhpcyBTdWJzY3JpcHRpb24gQWdyZWVtZW50LiAgWW91IG1heSBub3QgZGlzdHJpYnV0ZSBvciBvdGhlcndpc2UgcHJvdmlkZSBQbHVnaW5zIHRvIHRoaXJkIHBhcnRpZXMuICBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBhbGwgdXNlIG9mIHRoZSBQbHVnaW5zIGFuZCBmb3IgY29tcGxpYW5jZSB3aXRoIHRoaXMgU3Vic2NyaXB0aW9uIEFncmVlbWVudDsgYW55IGJyZWFjaCBieSBZb3Ugb3IgYW55IHVzZXIgdXNpbmcgdGhlIFBsdWdpbnMgb24gWW91ciBiZWhhbGYgc2hhbGwgYmUgZGVlbWVkIHRvIGhhdmUgYmVlbiBtYWRlIGJ5IFlvdS4gIAorNikgUmVzdHJpY3Rpb25zIG9uIFRoaXJkIFBhcnR5IFVzZSBhbmQgQWNjZXNzLgorCVlvdSBhZ3JlZSBub3QgdG8gZGVsaXZlciBvciBvdGhlcndpc2UgbWFrZSBhdmFpbGFibGUgdGhlIFBsdWdpbnMsIGluIHdob2xlIG9yIGluIHBhcnQsIHRvIGFueSBwYXJ0eSBvdGhlciB0aGFuIFRlbmFibGUsIGV4Y2VwdCBmb3IgcHVycG9zZXMgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gWW91ciB1c2Ugb2YgdGhlIFBsdWdpbnMgd2l0aG91dCBUZW5hYmxlJ3MgcHJpb3Igd3JpdHRlbiBjb25zZW50LiBZb3UgYWdyZWUgdG8gdXNlIFlvdXIgYmVzdCBlZmZvcnRzIGFuZCB0byB0YWtlIGFsbCByZWFzb25hYmxlIHN0ZXBzIHRvIGVuc3VyZSB0aGF0IG5vIHVuYXV0aG9yaXplZCBwYXJ0aWVzIGhhdmUgYWNjZXNzIHRvIHRoZSBQbHVnaW5zIGFuZCB0aGF0IG5vIHVuYXV0aG9yaXplZCBjb3B5LCBwdWJsaWNhdGlvbiwgZGlzY2xvc3VyZSBvciBkaXN0cmlidXRpb24gb2YgdGhlIFBsdWdpbnMsIGluIHdob2xlIG9yIGluIHBhcnQsIGluIGFueSBmb3JtIGlzIG1hZGUgYnkgWW91IG9yIGFueSB0aGlyZCBwYXJ0eS4gIFlvdSBhZ3JlZSB0byBub3RpZnkgVGVuYWJsZSBvZiBhbnkgdW5hdXRob3JpemVkIGFjY2VzcyB0bywgb3IgdXNlLCBjb3B5aW5nLCBwdWJsaWNhdGlvbiwgZGlzY2xvc3VyZSBvciBkaXN0cmlidXRpb24gb2YgdGhlIFBsdWdpbnMuICBZb3UgYWNrbm93bGVkZ2UgdGhhdCB0aGUgUGx1Z2lucyBjb250YWlucyB2YWx1YWJsZSBjb25maWRlbnRpYWwgaW5mb3JtYXRpb24gYW5kIHRyYWRlIHNlY3JldHMgb2YgVGVuYWJsZSBvciBpdHMgYWZmaWxpYXRlcyBhbmQgdGhlaXIgbGljZW5zb3JzIG9yIHN1cHBsaWVycywgYW5kIHRoYXQgdW5hdXRob3JpemVkIGFjY2VzcyB0bywgb3IgdXNlLCBjb3B5aW5nLCBwdWJsaWNhdGlvbiwgZGlzY2xvc3VyZSBvciBkaXN0cmlidXRpb24gb2YgdGhlIFBsdWdpbnMgaXMgaGFybWZ1bCB0byBUZW5hYmxlIG9yIGl0cyBhZmZpbGlhdGVzIGFuZCB0aGVpciBsaWNlbnNvcnMgb3Igc3VwcGxpZXJzLgorNykgQ29uZmlkZW50aWFsaXR5LiAgCitBcyB1c2VkIGluIHRoaXMgU3Vic2NyaXB0aW9uIEFncmVlbWVudCwgIkNvbmZpZGVudGlhbCBJbmZvcm1hdGlvbiIgbWVhbnMgYW55IGFuZCBhbGwgaW5mb3JtYXRpb24gYW5kIG1hdGVyaWFsIHRoYXQ6IChpKSBnaXZlcyBvZiBUZW5hYmxlIHNvbWUgY29tcGV0aXRpdmUgYnVzaW5lc3MgYWR2YW50YWdlIG9yIHRoZSBvcHBvcnR1bml0eSBvZiBvYnRhaW5pbmcgc3VjaCBhZHZhbnRhZ2Ugb3IgaXMgb3RoZXJ3aXNlIGNvbmZpZGVudGlhbCBvciBhIHRyYWRlIHNlY3JldDsgKGlpKSBpcyBtYXJrZWQgIkNvbmZpZGVudGlhbCwiICJSZXN0cmljdGVkLCIgb3IgIkNvbmZpZGVudGlhbCBJbmZvcm1hdGlvbiIgb3Igb3RoZXIgc2ltaWxhciBtYXJraW5nOyAoaWlpKSBpcyBrbm93biBieSBZb3UgdG8gYmUgY29uZmlkZW50aWFsIG9yIHByb3ByaWV0YXJ5OyBvciAoaXYpIGZyb20gYWxsIHRoZSByZWxldmFudCBjaXJjdW1zdGFuY2VzLCBzaG91bGQgcmVhc29uYWJseSBiZSBhc3N1bWVkIGJ5IFlvdSB0byBiZSBjb25maWRlbnRpYWwgb3IgcHJvcHJpZXRhcnkuICBDb25maWRlbnRpYWwgSW5mb3JtYXRpb24gaW5jbHVkZXMgdGhlIFBsdWdpbnMgYW5kIFN1YnNjcmlwdGlvbnMuICBDb25maWRlbnRpYWwgSW5mb3JtYXRpb24gZG9lcyBub3QgaW5jbHVkZSBhbnkgaW5mb3JtYXRpb24gdGhhdCBZb3UgY2FuIHByb3ZlOiAoYSkgd2FzIGFscmVhZHkga25vd24gdG8gWW91IHdpdGhvdXQgcmVzdHJpY3Rpb25zIGF0IHRoZSB0aW1lIG9mIGl0cyBkaXNjbG9zdXJlIGJ5IFRlbmFibGU7IChiKSBhZnRlciBpdHMgZGlzY2xvc3VyZSBieSBUZW5hYmxlLCBpcyBtYWRlIGtub3duIHRvIFlvdSB3aXRob3V0IHJlc3RyaWN0aW9ucyBieSBhIHRoaXJkIHBhcnR5IGhhdmluZyB0aGUgcmlnaHQgdG8gZG8gc287IChjKSBpcyBvciBiZWNvbWVzIHB1YmxpY2x5IGtub3duIHdpdGhvdXQgdmlvbGF0aW9uIG9mIHRoaXMgU3Vic2NyaXB0aW9uIEFncmVlbWVudDsgb3IgKGQpIGlzIGluZGVwZW5kZW50bHkgZGV2ZWxvcGVkIGJ5IFlvdSB3aXRob3V0IHJlZmVyZW5jZSB0byB0aGUgQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uLiAgQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uIHdpbGwgcmVtYWluIHRoZSBwcm9wZXJ0eSBvZiBUZW5hYmxlLCBhbmQgWW91IHdpbGwgbm90IGJlIGRlZW1lZCBieSB2aXJ0dWUgb2YgdGhpcyBTdWJzY3JpcHRpb24gQWdyZWVtZW50IG9yIGFueSBhY2Nlc3MgdG8gdGhlIENvbmZpZGVudGlhbCBJbmZvcm1hdGlvbiB0byBoYXZlIGFjcXVpcmVkIGFueSByaWdodCwgdGl0bGUgb3IgaW50ZXJlc3QgaW4gb3IgdG8gdGhlIENvbmZpZGVudGlhbCBJbmZvcm1hdGlvbi4gIFlvdSBtYXkgbm90IGNvcHkgYW55IENvbmZpZGVudGlhbCBJbmZvcm1hdGlvbiB3aXRob3V0IFRlbmFibGUncyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uICBZb3UgbWF5IG5vdCByZW1vdmUgYW55IGNvcHlyaWdodCwgdHJhZGVtYXJrLCBwcm9wcmlldGFyeSByaWdodHMgb3Igb3RoZXIgbm90aWNlcyBpbmNsdWRlZCBpbiBvciBhZmZpeGVkIHRvIGFueSBDb25maWRlbnRpYWwgSW5mb3JtYXRpb24uICBZb3UgbWF5IG5vdCB1c2UgdGhlIENvbmZpZGVudGlhbCBJbmZvcm1hdGlvbiBmb3IgWW91ciBvciBhIHRoaXJkIHBhcnR5J3MgYmVuZWZpdCwgY29tcGV0aXRpdmUgZGV2ZWxvcG1lbnQgb3IgYW55IG90aGVyIHB1cnBvc2UuICBZb3UgYWdyZWU6IChJKSB0byBob2xkIHRoZSBDb25maWRlbnRpYWwgSW5mb3JtYXRpb24gaW4gc3RyaWN0IGNvbmZpZGVuY2U7IChJSSkgdG8gbGltaXQgZGlzY2xvc3VyZSBvZiB0aGUgQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uIHRvIFlvdXIgb3duIGVtcGxveWVlcyBoYXZpbmcgYSBuZWVkIHRvIGtub3cgdGhlIENvbmZpZGVudGlhbCBJbmZvcm1hdGlvbiBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgU3Vic2NyaXB0aW9uIEFncmVlbWVudDsgKElJSSkgbm90IHRvIGRpc2Nsb3NlIGFueSBDb25maWRlbnRpYWwgSW5mb3JtYXRpb24gdG8gYW55IHRoaXJkIHBhcnR5OyAoSVYpIHRvIHVzZSB0aGUgQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uIHNvbGVseSBhbmQgZXhjbHVzaXZlbHkgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIFN1YnNjcmlwdGlvbiBBZ3JlZW1lbnQgaW4gb3JkZXIgdG8gY2Fycnkgb3V0IFlvdXIgb2JsaWdhdGlvbnMgYW5kIGV4ZXJjaXNlIFlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgU3Vic2NyaXB0aW9uIEFncmVlbWVudDsgKFYpIHRvIGFmZm9yZCB0aGUgQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uIGF0IGxlYXN0IHRoZSBzYW1lIGxldmVsIG9mIHByb3RlY3Rpb24gYWdhaW5zdCB1bmF1dGhvcml6ZWQgZGlzY2xvc3VyZSBvciB1c2UgYXMgWW91IG5vcm1hbGx5IHVzZXMgdG8gcHJvdGVjdCBZb3VyIG93biBpbmZvcm1hdGlvbiBvZiBhIHNpbWlsYXIgY2hhcmFjdGVyLCBidXQgaW4gbm8gZXZlbnQgbGVzcyB0aGFuIHJlYXNvbmFibGUgY2FyZTsgYW5kIChWSSkgdG8gbm90aWZ5IFRlbmFibGUgcHJvbXB0bHkgb2YgYW55IHVuYXV0aG9yaXplZCB1c2Ugb3IgZGlzY2xvc3VyZSBvZiB0aGUgQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uIGFuZCB0byBjb29wZXJhdGUgd2l0aCBhbmQgYXNzaXN0IFRlbmFibGUgaW4gZXZlcnkgcmVhc29uYWJsZSB3YXkgdG8gc3RvcCBvciBtaW5pbWl6ZSBzdWNoIHVuYXV0aG9yaXplZCB1c2Ugb3IgZGlzY2xvc3VyZS4gIFlvdSBhZ3JlZSB0aGF0IGlmIGEgY291cnQgb2YgY29tcGV0ZW50IGp1cmlzZGljdGlvbiBkZXRlcm1pbmVzIHRoYXQgWW91IGhhdmUgYnJlYWNoZWQsIG9yIGF0dGVtcHRlZCBvciB0aHJlYXRlbmVkIHRvIGJyZWFjaCwgWW91ciBjb25maWRlbnRpYWxpdHkgb2JsaWdhdGlvbnMgdG8gVGVuYWJsZSBvciBUZW5hYmxlJ3MgcHJvcHJpZXRhcnkgcmlnaHRzLCBtb25leSBkYW1hZ2VzLCBUZW5hYmxlIHdpbGwgc3VmZmVyIGlycmVwYXJhYmxlIGhhcm0gYW5kIHRoYXQgbW9uZXRhcnkgZGFtYWdlcyB3aWxsIGJlIGluYWRlcXVhdGUgdG8gY29tcGVuc2F0ZSBUZW5hYmxlIGZvciBzdWNoIGJyZWFjaC4gIEFjY29yZGluZ2x5LCBUZW5hYmxlLCBpbiBhZGRpdGlvbiB0byBhbmQgbm90IGluIGxpZXUgb2YgYW55IG90aGVyIHJpZ2h0cywgcmVtZWRpZXMgb3IgZGFtYWdlcyBhdmFpbGFibGUgdG8gaXQgYXQgbGF3IG9yIGluIGVxdWl0eSwgc2hhbGwgYmUgZW50aXRsZWQgdG8gc2VlayBhcHByb3ByaWF0ZSBpbmp1bmN0aXZlIHJlbGllZiBhbmQgb3RoZXIgbWVhc3VyZXMgcmVzdHJhaW5pbmcgZnVydGhlciBhdHRlbXB0ZWQgb3IgdGhyZWF0ZW5lZCBicmVhY2hlcyBvZiBzdWNoIG9ibGlnYXRpb25zIHdpdGhvdXQgcmVxdWlyZW1lbnQgdG8gcG9zdCBhbnkgYm9uZC4gCis4KSBEaXNjbGFpbWVyIG9mIFdhcnJhbnRpZXMuICAKKwlZT1UgRVhQUkVTU0xZIEFHUkVFIFRIQVQgVVNFIE9GIFRIRSBQTFVHSU5TIEFORCBUSEUgU1VCU0NSSVBUSU9OUyBBUkUgQVQgWU9VUiBTT0xFIFJJU0suICBUSEUgU1VCU0NSSVBUT05TIEFSRSBBVkFJTEFCTEUgU1RSSUNUTFkgT04gQU4gIkFTIElTIiBBTkQgIkFTIEFWQUlMQUJMRSIgQkFTSVMuICBURU5BQkxFIERPRVMgTk9UIE1BS0UgQU5ZIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQsIFdIRVRIRVIgRVhQUkVTUywgSU1QTElFRCwgT1IgU1RBVFVUT1JZLCBJTkNMVURJTkcgQU5ZIFdBUlJBTlRJRVMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIElOVEVHUkFUSU9OLCBQRVJGT1JNQU5DRSBBTkQgQUNDVVJBQ1ksIEFORCBBTlkgSU1QTElFRCBXQVJSQU5USUVTIEFSSVNJTkcgRlJPTSBTVEFUVVRFLCBDT1VSU0UgT0YgREVBTElORywgQ09VUlNFIE9GIFBFUkZPUk1BTkNFIE9SIFVTQUdFIE9GIFRSQURFLCBPVEhFUiBUSEFOIFRIT1NFIFdBUlJBTlRJRVMgV0hJQ0ggQVJFIElNUExJRUQgQlkgQU5EIElOQ0FQQUJMRSBPRiBFWENMVVNJT04sIFJFU1RSSUNUSU9OLCBPUiBNT0RJRklDQVRJT04gVU5ERVIgQVBQTElDQUJMRSBMQVcuICBURU5BQkxFIE1BS0VTIE5PIFdBUlJBTlRZIFRIQVQgVEhFIFBMVUdJTlMgT1IgU1VCU0NSSVBUSU9OUyBXSUxMIE9QRVJBVEUgRVJST1ItRlJFRSwgRlJFRSBPRiBBTlkgU0VDVVJJVFkgREVGRUNUUyBPUiBJTiBBTiBVTklOVEVSUlVQVEVEIE1BTk5FUi4gCis5KSBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4KK0lGIFlPVSBTSE9VTEQgQkVDT01FIEVOVElUTEVEIFRPIENMQUlNIERBTUFHRVMgRlJPTSBURU5BQkxFIChJTkNMVURJTkcgRk9SIE5FR0xJR0VOQ0UsIFNUUklDVCBMSUFCSUxJVFksIEJSRUFDSCBPRiBDT05UUkFDVCwgTUlTUkVQUkVTRU5UQVRJT04gQU5EIE9USEVSIENPTlRSQUNUIE9SIFRPUlQgQ0xBSU1TKSBURU5BQkxFIFdJTEwgQkUgTElBQkxFIE9OTFkgRk9SIFRIRSBBTU9VTlQgT0YgWU9VUiBBQ1RVQUwgRElSRUNUIERBTUFHRVMsIE5PVCBUTyBFWENFRUQgKElOIFRIRSBBR0dSRUdBVEUgRk9SIEFMTCBDTEFJTVMpIFRIRSBGRUVTLCBJRiBBTlksIFlPVSBQQUlEIFRPIFRFTkFCTEUKKzEwKSBFeGNsdXNpb24gb2YgT3RoZXIgRGFtYWdlcy4gCisJVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBXSUxMIFRFTkFCTEUgQkUgTElBQkxFIFRPIFlPVSBPUiBBTlkgT1RIRVIgUEVSU09OIE9SIEVOVElUWSBGT1IgQU5ZIElORElSRUNULCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBTUEVDSUFMLCBFWEVNUExBUlkgT1IgUFVOSVRJVkUgREFNQUdFUyAoSU5DTFVESU5HIE5FR0xJR0VOQ0UsIFNUUklDVCBMSUFCSUxJVFksIEJSRUFDSCBPRiBDT05UUkFDVCwgTUlTUkVQUkVTRU5UQVRJT04gQU5EIE9USEVSIENPTlRSQUNUIE9SIFRPUlQgQ0xBSU1TOyBMT1NUIFBST0ZJVFM7IE9SIEFOWSBEQU1BR0VTIFJFU1VMVElORyBGUk9NIExPU1MgT0YgREFUQSwgU0VDVVJJVFkgQlJFQUNILCBQUk9QRVJUWSBEQU1BR0UsIExPU1MgT0YgUkVWRU5VRSwgTE9TUyBPRiBCVVNJTkVTUyBPUiBMT1NUIFNBVklOR1MpLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhJUyBTVUJTQ1JJUFRJT04gQUdSRUVNRU5ULCBUSEUgUEVSRk9STUFOQ0UgT0YgVEhFIFBMVUdJTlMgT1IgU1VCU0NSSVBUSU9OUyBPUiBPRiBBTlkgT1RIRVIgT0JMSUdBVElPTlMgUkVMQVRJTkcgVE8gVEhJUyBTVUJTQ1JJUFRJT04gQUdSRUVNRU5ULCBXSEVUSEVSIE9SIE5PVCBURU5BQkxFIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gIFlPVSBBUkUgU09MRUxZIFJFU1BPTlNJQkxFIEFORCBMSUFCTEUgRk9SIFZFUklGWUlORyBUSEUgU0VDVVJJVFksIEFDQ1VSQUNZIEFORCBBREVRVUFDWSBPRiBBTlkgT1VUUFVUIEZST00gVEhFIFBMVUdJTlMgQU5EIFNVQlNDUklQVElPTlMsIEFORCBGT1IgQU5ZIFJFTElBTkNFIFRIRVJFT04uIAorMTEpIEFkZGl0aW9uYWwgUHJvdmlzaW9ucyBSZWdhcmRpbmcgTGlhYmlsaXR5LiAgCitUaGUgcGFydGllcyBhZ3JlZSB0aGF0IHRoZSBmb3JlZ29pbmcgbGltaXRhdGlvbnMgd2lsbCBub3QgYmUgcmVhZCBzbyBhcyB0byBsaW1pdCBhbnkgbGlhYmlsaXR5IHRvIGFuIGV4dGVudCB0aGF0IHdvdWxkIG5vdCBiZSBwZXJtaXR0ZWQgdW5kZXIgYXBwbGljYWJsZSBsYXcgYW5kIHNwZWNpZmljYWxseSB3aWxsIG5vdCBsaW1pdCBhbnkgbGlhYmlsaXR5IGZvciBncm9zcyBuZWdsaWdlbmNlLCBpbnRlbnRpb25hbCB0b3J0aW91cyBvciB1bmxhd2Z1bCBjb25kdWN0IG9yIGRhbWFnZXMgZm9yIHN0cmljdCBsaWFiaWxpdHkgdGhhdCBtYXkgbm90IGJlIGxpbWl0ZWQgYnkgbGF3LgorMTIpIEluZGVtbmlmaWNhdGlvbi4gIAorRWFjaCBvZiB0aGUgcGFydGllcyBhY2tub3dsZWRnZXMgYW5kIGFncmVlcyB0aGF0IGJ5IGVudGVyaW5nIGludG8gYW5kIHBlcmZvcm1pbmcgaXRzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgU3Vic2NyaXB0aW9uIEFncmVlbWVudCwgVGVuYWJsZSB3aWxsIG5vdCBhc3N1bWUgYW5kIHNob3VsZCBub3QgYmUgZXhwb3NlZCB0byB0aGUgYnVzaW5lc3MgYW5kIG9wZXJhdGlvbmFsIHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBZb3VyIGJ1c2luZXNzLiAgWW91IGFja25vd2xlZGdlIHRoYXQgWW91ciB1c2Ugb2YgdGhlIFBsdWdpbnMgYW5kIFN1YnNjcmlwdGlvbnMgaXMgb25seSBhIHBvcnRpb24gb2YgWW91ciBvdmVyYWxsIHNlY3VyaXR5IHNvbHV0aW9uIGFuZCB0aGF0IFRlbmFibGUgaXMgbm90IHJlc3BvbnNpYmxlIGZvciBZb3VyIG92ZXJhbGwgc2VjdXJpdHkgc29sdXRpb24uICBBcyBiZXR3ZWVuIFlvdSBhbmQgVGVuYWJsZSwgWW91IGFyZSAoYW5kIFRlbmFibGUgaXMgbm90KSByZXNwb25zaWJsZSBmb3IgdGhlIHN1Y2Nlc3Mgb3IgZmFpbHVyZSBvZiBzdWNoIHNlY3VyaXR5IHNvbHV0aW9uLiAgQWNjb3JkaW5nbHksIFlvdSBhZ3JlZSB0aGF0IHlvdSB3aWxsLCBhdCB5b3VyIGV4cGVuc2UsIGluZGVtbmlmeSwgZGVmZW5kIGFuZCBob2xkIFRlbmFibGUgaGFybWxlc3MgaW4gYWxsIGNsYWltcyBhbmQgYWN0aW9ucyB0aGF0IHNlZWsgY29tcGVuc2F0aW9uIG9mIGFueSBraW5kIGZvciBpbmp1cnkgb3IgZGVhdGggdG8gcGVyc29ucyBhbmQvb3IgZm9yIGRhbWFnZSB0byBwcm9wZXJ0eSwgYW5kIHRoYXQgYXJpc2Ugb3V0IG9mIG9yIHJlbGF0ZSB0byBZb3VyIHNlY3VyaXR5IHNvbHV0aW9ucyBvciBZb3VyIHVzZSBvZiB0aGUgUGx1Z2lucyBhbmQgU3Vic2NyaXB0aW9ucywgb3IgdGhlIHNvbHV0aW9ucyBZb3UgcHJvdmlkZSB0byBhIHRoaXJkIHBhcnR5IHRocm91Z2ggWW91ciB1c2Ugb2YgdGhlIFBsdWdpbnMgYW5kIFN1YnNjcmlwdGlvbnMuICBZb3UgYWxzbyBhZ3JlZSB0byBwYXkgYWxsIHNldHRsZW1lbnRzLCBjb3N0cywgZGFtYWdlcywgbGVnYWwgZmVlcyBhbmQgZXhwZW5zZXMgZmluYWxseSBhd2FyZGVkIGluIGFsbCBzdWNoIGNsYWltcyBhbmQgYWN0aW9ucy4gCisxMykgWW91ciBQYXltZW50IE9ibGlnYXRpb25zLgorSWYgWW91IG9idGFpbiBhIERpcmVjdCBGZWVkIFN1YnNjcmlwdGlvbiwgWW91IGFncmVlIHRvIHBheSBhbnkgYW5kIGFsbCBhbW91bnRzIGR1ZSBvciBpbmN1cnJlZCBieSBZb3UgYXMgc3BlY2lmaWVkIGluIHRoZSBpbnZvaWNlIHByb3ZpZGVkIGJ5IFRlbmFibGUgaW4gY29uc2lkZXJhdGlvbiBmb3IgWW91ciBvYnRhaW5pbmcgc3VjaCBEaXJlY3QgRmVlZCBTdWJzY3JpcHRpb24gKHRoZSAiRmVlcyIpLiAgUGF5bWVudCBpcyBkdWUgd2l0aGluIHRoaXJ0eSAoMzApIGRheXMgb2YgdGhlIGRhdGUgb2YgaW52b2ljZS4gIFlvdSBhZ3JlZSB0byBwYXkgZGlyZWN0bHkgb3IgcmVpbWJ1cnNlIFRlbmFibGUgZm9yIGFueSB0YXhlcyAoaW5jbHVkaW5nLCBzYWxlcyBvciBleGNpc2UgdGF4ZXMsIHZhbHVlIGFkZGVkIHRheGVzLCBsYW5kaW5nIGZlZXMsIGltcG9ydCBkdXRpZXMgYW5kIHRoZSBsaWtlKSwgaG93ZXZlciBkZXNpZ25hdGVkIGFuZCB3aGV0aGVyIGZvcmVpZ24gb3IgZG9tZXN0aWMsIGFyaXNpbmcgb3V0IG9mIHRoaXMgQWdyZWVtZW50LCBpbXBvc2VkIG9uIHRoZSBQbHVnaW5zIG9yIHRoZSB1c2UgdGhlcmVvZiwgb3IgVGVuYWJsZSdzIHBlcmZvcm1hbmNlIHVuZGVyIHRoaXMgQWdyZWVtZW50LiAgWW91IGFncmVlIHRvIHBheSBUZW5hYmxlJ3MgaW52b2ljZXMgd2l0aG91dCBkZWR1Y3RpbmcgYW55IHByZXNlbnQgb3IgZnV0dXJlIHRheGVzLCB3aXRoaG9sZGluZ3Mgb3Igb3RoZXIgY2hhcmdlcyBleGNlcHQgdGhvc2UgZGVkdWN0aW9ucyBpdCBpcyBsZWdhbGx5IHJlcXVpcmVkIHRvIG1ha2UuICBJZiBZb3UgYXJlIGxlZ2FsbHkgcmVxdWlyZWQgdG8gbWFrZSBhbnkgZGVkdWN0aW9ucywgWW91IGFncmVlIHRvIHBheSBUZW5hYmxlIHN1Y2ggYW1vdW50cyBhcyBhcmUgbmVjZXNzYXJ5IHRvIG1ha2UgdGhlIG5ldCBhbW91bnRzIHJlbWFpbmluZyBhZnRlciBzdWNoIGRlZHVjdGlvbnMgZXF1YWwgdG8gdGhlIHN0YXRlZCBhbW91bnQgZHVlIHVuZGVyIHRoaXMgQWdyZWVtZW50LiAgVGhlIHBheW1lbnRzIG9yIHJlaW1idXJzZW1lbnRzIHdpbGwgYmUgaW4gc3VjaCBhbW91bnRzIGFzIGFyZSBzdWZmaWNpZW50IHRvIHJlbGlldmUgVGVuYWJsZSBmcm9tIG93aW5nIGFueSBmdXJ0aGVyIHRheGVzLCBlaXRoZXIgZGlyZWN0bHkgb3Igb24gdGhlIGJhc2lzIG9mIHRoZSBwYXltZW50cyBtYWRlIHVuZGVyIHRoaXMgQWdyZWVtZW50LiAgTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsIFRlbmFibGUgd2lsbCBiZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGl0cyBpbmNvbWUgdGF4IG9ibGlnYXRpb25zIGFuZCBhbGwgZW1wbG95ZXIgcmVwb3J0aW5nIGFuZCBwYXltZW50IG9ibGlnYXRpb25zIHdpdGggcmVzcGVjdCB0byBpdHMgcGVyc29ubmVsLiAgWW91IGFncmVlIHRvIHBheSBhbnkgaW50ZXJlc3QgYW5kIHBlbmFsdGllcyBpbXBvc2VkIGJ5IGFueSB0YXhpbmcgYXV0aG9yaXRpZXMgdG8gdGhlIGV4dGVudCBzdWNoIGludGVyZXN0IGFuZCBwZW5hbHRpZXMgYXJlIGFwcGxpY2FibGUgdG8gdGF4ZXMgbm90IHBhaWQgYXQgWW91ciByZXF1ZXN0IG9yIGFzIGEgcmVzdWx0IG9mIHJlbGlhbmNlIGJ5IFRlbmFibGUgb24gWW91ciByZXByZXNlbnRhdGlvbnMuICBJZiBhIGNlcnRpZmljYXRlIG9mIGV4ZW1wdGlvbiBvciBzaW1pbGFyIGRvY3VtZW50IG9yIHByb2NlZWRpbmcgaXMgbmVjZXNzYXJ5IGluIG9yZGVyIHRvIGV4ZW1wdCBhbnkgdHJhbnNhY3Rpb24gZnJvbSBhIHRheCwgWW91IHdpbGwgb2J0YWluIHN1Y2ggY2VydGlmaWNhdGUgb3IgZG9jdW1lbnQuICAKKzE0KSBMZWdhbCBDb21wbGlhbmNlOyBSZXN0cmljdGVkIFJpZ2h0cy4gIAorVGhlIFBsdWdpbnMgYW5kIFN1YnNjcmlwdGlvbnMgYXJlIHByb3ZpZGVkIHNvbGVseSBmb3IgbGF3ZnVsIHB1cnBvc2VzIGFuZCB1c2UuICBZb3UgYXJlIHNvbGVseSByZXNwb25zaWJsZSBmb3IsIGFuZCBhZ3JlZSB0byBwZXJmb3JtIHlvdXIgb2JsaWdhdGlvbnMgaW4gYSBtYW5uZXIgdGhhdCBjb21wbGllcyB3aXRoIGFsbCBhcHBsaWNhYmxlIG5hdGlvbmFsLCByZWdpb25hbCBhbmQgbG9jYWwgbGF3cywgc3RhdHV0ZXMsIG9yZGluYW5jZXMsIHJlZ3VsYXRpb25zLCBjb2RlcyBhbmQgb3RoZXIgdHlwZXMgb2YgZ292ZXJubWVudCBhdXRob3JpdHkgKGluY2x1ZGluZyB0aG9zZSBnb3Zlcm5pbmcgZXhwb3J0IGNvbnRyb2wsIHVuZmFpciBjb21wZXRpdGlvbiwgYW50aS1kaXNjcmltaW5hdGlvbiwgZmFsc2UgYWR2ZXJ0aXNpbmcsIHByaXZhY3kgYW5kIGRhdGEgcHJvdGVjdGlvbiwgYW5kIHB1YmxpY2l0eSBhbmQgdGhvc2UgaWRlbnRpZnlpbmcgYW5kIHByb2N1cmluZyByZXF1aXJlZCBwZXJtaXRzLCBsaWNlbnNlcywgYXBwcm92YWxzLCBhbmQgb3RoZXIgY29uc2VudHMpICgiTGF3cyIpLiAgSWYgYSBjaGFyZ2UgaXMgbWFkZSB0aGF0IFlvdSBhcmUgbm90IGNvbXBseWluZyB3aXRoIGFueSBzdWNoIExhd3MsIFlvdSB3aWxsIHByb21wdGx5IG5vdGlmeSBUZW5hYmxlIG9mIHN1Y2ggY2hhcmdlcyBpbiB3cml0aW5nLiAgV2l0aG91dCBsaW1pdGluZyB0aGUgZm9yZWdvaW5nLCBZb3UgYWdyZWUgdG8gY29tcGx5IHdpdGggYWxsIFUuUy4gZXhwb3J0IExhd3MgYW5kIGFwcGxpY2FibGUgZXhwb3J0IExhd3Mgb2YgWW91ciBsb2NhbGl0eSAoaWYgWW91IGFyZSBub3QgaW4gdGhlIFVuaXRlZCBTdGF0ZXMpLCB0byBlbnN1cmUgdGhhdCBubyBpbmZvcm1hdGlvbiBvciB0ZWNobmljYWwgZGF0YSBwcm92aWRlZCBwdXJzdWFudCB0byB0aGlzIFN1YnNjcmlwdGlvbiBBZ3JlZW1lbnQgaXMgZXhwb3J0ZWQgb3IgcmUtZXhwb3J0ZWQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbiB2aW9sYXRpb24gb2YgTGF3IG9yIHdpdGhvdXQgZmlyc3Qgb2J0YWluaW5nIGFsbCByZXF1aXJlZCBhdXRob3JpemF0aW9ucyBvciBsaWNlbnNlcy4gIFlvdSB3aWxsLCBhdCBZb3VyIHNvbGUgY29zdCBhbmQgZXhwZW5zZSwgb2J0YWluIGFuZCBtYWludGFpbiBpbiBlZmZlY3QgYWxsIHBlcm1pdHMsIGxpY2Vuc2VzLCBhcHByb3ZhbHMgYW5kIG90aGVyIGNvbnNlbnRzIHJlbGF0ZWQgdG8gWW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIFN1YnNjcmlwdGlvbiBBZ3JlZW1lbnQuICBZb3UgYWdyZWUsIGF0IFlvdXIgZXhwZW5zZSwgdG8gY29tcGx5IHdpdGggYWxsIGZvcmVpZ24gZXhjaGFuZ2UgYW5kIG90aGVyIExhd3MgYXBwbGljYWJsZSB0byBZb3UuICBUaGUgUGx1Z2lucyBpcyBsaWNlbnNlZCBzdWJqZWN0IHRvIFRlbmFibGUncyBzdGFuZGFyZCBjb21tZXJjaWFsIGFncmVlbWVudDsgUGx1Z2lucyBsaWNlbnNlZCBmb3IgdXNlIGJ5IHRoZSBVbml0ZWQgU3RhdGVzIGdvdmVybm1lbnQgaXMgcHJvdmlkZWQgd2l0aCAiUmVzdHJpY3RlZCBSaWdodHMiIG9ubHkgYXMgZGVmaW5lZCBpbiA0OCBDLkYuUi4gXzUyLjIyNy0xNCBhbmQgNDggQy5GLlIuIF8yNTIuMjI3LTcwMTQgaWYgdGhlIGNvbW1lcmNpYWwgdGVybXMgYXJlIGRlZW1lZCBub3QgdG8gYXBwbHkuIAorMTUpIFRlcm1pbmF0aW9uLgoraSkgWW91IG1heSB0ZXJtaW5hdGUgdGhpcyBTdWJzY3JpcHRpb24gQWdyZWVtZW50IGF0IGFueSB0aW1lIGJ5IGRlc3Ryb3lpbmcgb3IgcmV0dXJuaW5nIHRvIFRlbmFibGUgdGhlIFBsdWdpbnMsIHRvZ2V0aGVyIHdpdGggYWxsIGNvcGllcywgbW9kaWZpY2F0aW9ucyBhbmQgbWVyZ2VkIHBvcnRpb25zIG9mIHRoZSBQbHVnaW5zIGluIGFueSBmb3JtLgoraWkpIFRoaXMgU3Vic2NyaXB0aW9uIEFncmVlbWVudCBhbmQgWW91ciBMaWNlbnNlIHRvIHVzZSB0aGUgUGx1Z2lucyBhbmQgU3Vic2NyaXB0aW9ucyBzaGFsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCBhbnkgdGVybSBvciBjb25kaXRpb24gb2YgdGhpcyBTdWJzY3JpcHRpb24gQWdyZWVtZW50IG9yIGlmIHRoZSBOZXNzdXMgU29mdHdhcmUgTGljZW5zZSBBZ3JlZW1lbnQgYmV0d2VlbiBZb3UgYW5kIFRlbmFibGUgdGVybWluYXRlcy4gSW1tZWRpYXRlbHkgYWZ0ZXIgdGVybWluYXRpb24gb2YgdGhpcyBTdWJzY3JpcHRpb24gQWdyZWVtZW50LCBZb3Ugc2hhbGwgZGVzdHJveSBvciByZXR1cm4gdG8gVGVuYWJsZSB0aGUgUGx1Z2lucywgdG9nZXRoZXIgd2l0aCBhbGwgY29waWVzLCBtb2RpZmljYXRpb25zIGFuZCBtZXJnZWQgcG9ydGlvbnMgb2YgdGhlIFBsdWdpbnMgaW4gYW55IGZvcm0sIGFuZCBzaGFsbCBjZXJ0aWZ5IHRvIFRlbmFibGUgaW4gd3JpdGluZyB0aGF0IHRocm91Z2ggWW91ciBiZXN0IGVmZm9ydHMgYW5kIHRvIHRoZSBiZXN0IG9mIHlvdXIga25vd2xlZGdlIGFsbCBzdWNoIG1hdGVyaWFscyBoYXZlIGJlZW4gZGVzdHJveWVkIG9yIHJldHVybmVkIHRvIFRlbmFibGUgYW5kIHJlbW92ZWQgZnJvbSBob3N0IGNvbXB1dGVycyBvbiB3aGljaCBQbHVnaW5zIHJlc2lkZWQuIAorMTYpIEdvdmVybmluZyBMYXcuICAKK1RoaXMgU3Vic2NyaXB0aW9uIEFncmVlbWVudCBzaGFsbCBiZSBnb3Zlcm5lZCBpbiBhbGwgcmVzcGVjdHMgYnkgdGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIE1hcnlsYW5kLCBVU0EsIHdpdGhvdXQgcmVnYXJkIHRvIGNob2ljZS1vZi1sYXcgcnVsZXMgb3IgcHJpbmNpcGxlcy4gIFlvdSBleHByZXNzbHkgYWdyZWUgd2l0aCBUZW5hYmxlIHRoYXQgdGhpcyBTdWJzY3JpcHRpb24gQWdyZWVtZW50IHNoYWxsIG5vdCBiZSBnb3Zlcm5lZCBieSB0aGUgVS5OLiBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcywgdGhlIGFwcGxpY2F0aW9uIG9mIHdoaWNoIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gCisxNykgRGlzcHV0ZSBSZXNvbHV0aW9uLiAgCitZb3UgYW5kIFRlbmFibGUgc3VibWl0IHRvIHRoZSBleGNsdXNpdmUganVyaXNkaWN0aW9uIG9mIHRoZSBjb3VydHMgb2YgSG93YXJkIENvdW50eSwgTWFyeWxhbmQgYW5kIHRoZSBVbml0ZWQgU3RhdGVzIERpc3RyaWN0IENvdXJ0IGZvciBNYXJ5bGFuZCwgQmFsdGltb3JlIERpdmlzaW9uLCBmb3IgYW55IHF1ZXN0aW9uIG9yIGRpc3B1dGUgYXJpc2luZyBvdXQgb2Ygb3IgcmVsYXRpbmcgdG8gdGhpcyBTdWJzY3JpcHRpb24gQWdyZWVtZW50LiAgRHVlIHRvIHRoZSBoaWdoIGNvc3RzIGFuZCB0aW1lIGludm9sdmVkIGluIGNvbW1lcmNpYWwgbGl0aWdhdGlvbiBiZWZvcmUgYSBqdXJ5LCB0aGUgcGFydGllcyB3YWl2ZSBhbGwgcmlnaHQgdG8gYSBqdXJ5IHRyaWFsIHdpdGggcmVzcGVjdCB0byBhbnkgYW5kIGFsbCBpc3N1ZXMgaW4gYW55IGFjdGlvbiBvciBwcm9jZWVkaW5nIGFyaXNpbmcgb3V0IG9mIG9yIHJlbGF0ZWQgdG8gdGhpcyBTdWJzY3JpcHRpb24gQWdyZWVtZW50LiAgCisxOCkgTm90aWNlcy4gIAorQW55IG5vdGljZXMgb3Igb3RoZXIgY29tbXVuaWNhdGlvbiByZXF1aXJlZCBvciBwZXJtaXR0ZWQgdG8gYmUgbWFkZSBvciBnaXZlbiBieSBlaXRoZXIgUGFydHkgcHVyc3VhbnQgdG8gdGhpcyBTdWJzY3JpcHRpb24gQWdyZWVtZW50IHdpbGwgYmUgaW4gd3JpdGluZywgaW4gRW5nbGlzaCwgYW5kIHdpbGwgYmUgZGVlbWVkIHRvIGhhdmUgYmVlbiBkdWx5IGdpdmVuIHdoZW4gZGVsaXZlcmVkIGlmIGRlbGl2ZXJlZCBwZXJzb25hbGx5IG9yIHNlbnQgYnkgcmVjb2duaXplZCBvdmVybmlnaHQgZXhwcmVzcyBjb3VyaWVyLCB0byB0aGUgYWRkcmVzcyBzcGVjaWZpZWQgaGVyZWluIG9yIHN1Y2ggb3RoZXIgYWRkcmVzcyBhcyBUZW5hYmxlIG1heSBzcGVjaWZ5IGluIHdyaXRpbmcuICBBbGwgbm90aWNlcyB0byBUZW5hYmxlIHNoYWxsIGJlIHNlbnQgdG8gdGhlIGF0dGVudGlvbiBvZiB0aGUgTGVnYWwgRGVwYXJ0bWVudCAodW5sZXNzIG90aGVyd2lzZSBzcGVjaWZpZWQgYnkgVGVuYWJsZSkuIAorQWxsIG5vdGljZXMgc2hhbGwgYmUgc2VudCB0bzoKK1RlbmFibGUgTmV0d29yayBTZWN1cml0eQorODgzMCBTdGFuZm9yZCBCb3VsZXZhcmQsIFN1aXRlIDMxMgorQ29sdW1iaWEsIE1EIDIxMDQ1CitBdHRuOiBMZWdhbCBEZXBhcnRtZW50CisxOSkgVHJhbnNmZXIgYW5kIEFzc2lnbm1lbnQuIAorWW91IG1heSBub3QgcmVudCwgbGVhc2UsIGxlbmQsIHN1YmxpY2Vuc2Ugb3Igb3RoZXJ3aXNlIHByb3ZpZGUgdGhlIFBsdWdpbnMgdG8gYW55IHRoaXJkIHBhcnR5LiBZb3UgbWF5IG5vdCBhc3NpZ24gb3Igb3RoZXJ3aXNlIHRyYW5zZmVyIHRoaXMgU3Vic2NyaXB0aW9uIEFncmVlbWVudCB3aXRob3V0IFRlbmFibGUncyBwcmlvciB3cml0dGVuIGNvbnNlbnQuICBZb3UgbWF5IHVzZSB0aGUgUGx1Z2lucyBhbmQgU3Vic2NyaXB0aW9ucyB0byBwcm92aWRlIHNlcnZpY2VzIHRvIHRoaXJkIHBhcnRpZXMgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIGluIHRoaXMgU3Vic2NyaXB0aW9uIEFncmVlbWVudC4KKzIwKSBQdWJsaWNpdHkuCitZb3Ugd2lsbCBub3QgdXNlIFRlbmFibGUncyBjb21wYW55IG5hbWUgb3IgYW55IHRyYWRlbWFya3MsIGxvZ29zLCBzZXJ2aWNlIG1hcmtzIG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSwgb3IgcmVmZXIgdG8gVGVuYWJsZSBvciBhbnkgb2YgaXRzIGVtcGxveWVlcywgaW4gYW55IGZvcm0gb2YgYWR2ZXJ0aXNpbmcsIHB1YmxpY2l0eSBvciByZWxlYXNlIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gYXBwcm92YWwgb2YgVGVuYWJsZSwgd2hpY2ggVGVuYWJsZSBtYXkgd2l0aGhvbGQgaW4gaXRzIHNvbGUgZGlzY3JldGlvbi4gIAorMjEpIExhbmd1YWdlLiAgCitUaGUgbGFuZ3VhZ2Ugb2YgdGhpcyBTdWJzY3JpcHRpb24gQWdyZWVtZW50IGlzIEVuZ2xpc2ggYW5kIGFsbCBub3RpY2VzIGdpdmVuIHVuZGVyIHRoaXMgU3Vic2NyaXB0aW9uIEFncmVlbWVudCBtdXN0IGJlIGluIEVuZ2xpc2ggdG8gYmUgZWZmZWN0aXZlLiAgTm8gdHJhbnNsYXRpb24sIGlmIGFueSwgb2YgdGhpcyBTdWJzY3JpcHRpb24gQWdyZWVtZW50IG9yIGFueSBub3RpY2Ugd2lsbCBiZSBvZiBhbnkgZWZmZWN0IGluIHRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIFN1YnNjcmlwdGlvbiBBZ3JlZW1lbnQgb3IgaW4gZGV0ZXJtaW5pbmcgdGhlIGludGVudCBvZiB0aGUgcGFydGllcy4gIFRoZSBwYXJ0aWVzIGhhdmUgZXhwcmVzc2x5IGFncmVlZCB0aGF0IGFsbCBpbnZvaWNlcyBhbmQgcmVsYXRlZCBkb2N1bWVudHMgYmUgZHJhZnRlZCBpbiBFbmdsaXNoLiAKKzIyKSBUaGlyZCBQYXJ0aWVzLiAgCitUaGlzIFN1YnNjcmlwdGlvbiBBZ3JlZW1lbnQgaXMgbm90IGludGVuZGVkIG5vciB3aWxsIGl0IGJlIGludGVycHJldGVkIHRvIGNvbmZlciBhbnkgYmVuZWZpdCwgcmlnaHQgb3IgcHJpdmlsZWdlIGluIGFueSBwZXJzb24gb3IgZW50aXR5IG5vdCBhIHBhcnR5IHRvIHRoaXMgU3Vic2NyaXB0aW9uIEFncmVlbWVudC4gIEFueSBwYXJ0eSB3aG8gaXMgbm90IGEgcGFydHkgdG8gdGhpcyBTdWJzY3JpcHRpb24gQWdyZWVtZW50IGhhcyBubyByaWdodCB1bmRlciBhbnkgTGF3IHRvIGVuZm9yY2UgYW55IHRlcm0gb2YgdGhpcyBTdWJzY3JpcHRpb24gQWdyZWVtZW50LgorMjMpIFRyYWRlbWFya3MuIAorTmVzc3VzIGlzIGEgdHJhZGVtYXJrIG9mIFRlbmFibGUuICBUZW5hYmxlIGRvZXMgbm90IGdyYW50IHRvIFlvdSwgZWl0aGVyIGV4cHJlc3NseSBvciBieSBpbXBsaWNhdGlvbiwgYW55IGxpY2Vuc2Ugb3IgcGVybWlzc2lvbiB1bmRlciB0aGlzIFN1YnNjcmlwdGlvbiBBZ3JlZW1lbnQgdG8gdXNlIGFueSBvZiB0aGUgVGVuYWJsZSBtYXJrcyAoaW5jbHVkaW5nIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIHRyYWRlIG5hbWVzLCB0cmFkZSBkcmVzcywgc3ltYm9scywgbG9nb3MsIGRlc2lnbnMsIGRvbWFpbiBuYW1lcywgc2xvZ2FucyBhbmQgb3RoZXIgc291cmNlIGlkZW50aWZpZXJzKSAoY29sbGVjdGl2ZWx5LCB0aGUgIk1hcmtzIikuIAorMjQpIEdlbmVyYWwuICAKK1RoaXMgU3Vic2NyaXB0aW9uIEFncmVlbWVudCBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzLCBhbmQgc3VwZXJzZWRlcyBhbGwgb3RoZXIgcHJpb3Igb3IgY29udGVtcG9yYW5lb3VzIGNvbW11bmljYXRpb25zIGJldHdlZW4gdGhlIHBhcnRpZXMgKHdoZXRoZXIgd3JpdHRlbiBvciBvcmFsKSByZWxhdGluZyB0byB0aGUgc3ViamVjdCBtYXR0ZXIgb2YgdGhpcyBTdWJzY3JpcHRpb24gQWdyZWVtZW50LiBObyBzdXBwbGVtZW50LCBtb2RpZmljYXRpb24gb3IgYW1lbmRtZW50IG9mIHRoaXMgU3Vic2NyaXB0aW9uIEFncmVlbWVudCBzaGFsbCBiZSBiaW5kaW5nLCB1bmxlc3MgZXhlY3V0ZWQgaW4gd3JpdGluZyBieSBhIGR1bHkgYXV0aG9yaXplZCByZXByZXNlbnRhdGl2ZSBvZiBlYWNoIHBhcnR5IHRvIHRoaXMgU3Vic2NyaXB0aW9uIEFncmVlbWVudC4gIFRoZSBwcm92aXNpb25zIG9mIHRoaXMgU3Vic2NyaXB0aW9uIEFncmVlbWVudCB3aWxsIGJlIGRlZW1lZCBzZXZlcmFibGUsIGFuZCB0aGUgdW5lbmZvcmNlYWJpbGl0eSBvZiBhbnkgb25lIG9yIG1vcmUgcHJvdmlzaW9ucyB3aWxsIG5vdCBhZmZlY3QgdGhlIGVuZm9yY2VhYmlsaXR5IG9mIGFueSBvdGhlciBwcm92aXNpb25zLiAgSW4gYWRkaXRpb24sIGlmIGFueSBwcm92aXNpb24gb2YgdGhpcyBTdWJzY3JpcHRpb24gQWdyZWVtZW50LCBmb3IgYW55IHJlYXNvbiwgaXMgZGVjbGFyZWQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgdGhlIHBhcnRpZXMgd2lsbCBzdWJzdGl0dXRlIGFuIGVuZm9yY2VhYmxlIHByb3Zpc2lvbiB0aGF0LCB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIHByZXNlcnZlcyB0aGUgb3JpZ2luYWwgaW50ZW50aW9ucyBhbmQgZWNvbm9taWMgcG9zaXRpb25zIG9mIHRoZSBwYXJ0aWVzLiAgTm8gZmFpbHVyZSBvciBkZWxheSBieSBhIHBhcnR5IGluIGV4ZXJjaXNpbmcgYW55IHJpZ2h0LCBwb3dlciBvciByZW1lZHkgd2lsbCBvcGVyYXRlIGFzIGEgd2FpdmVyIG9mIHRoYXQgcmlnaHQsIHBvd2VyIG9yIHJlbWVkeSwgYW5kIG5vIHdhaXZlciB3aWxsIGJlIGVmZmVjdGl2ZSB1bmxlc3MgaXQgaXMgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSB3YWl2aW5nIHBhcnR5LiAgSWYgYSBwYXJ0eSB3YWl2ZXMgYW55IHJpZ2h0LCBwb3dlciBvciByZW1lZHksIHRoZSB3YWl2ZXIgd2lsbCBub3Qgd2FpdmUgYW55IHN1Y2Nlc3NpdmUgb3Igb3RoZXIgcmlnaHQsIHBvd2VyIG9yIHJlbWVkeSB0aGUgcGFydHkgbWF5IGhhdmUgdW5kZXIgdGhpcyBTdWJzY3JpcHRpb24gQWdyZWVtZW50LiAgQW55IHByb3Zpc2lvbiBvZiB0aGlzIFN1YnNjcmlwdGlvbiBBZ3JlZW1lbnQgdGhhdCBpbXBvc2VzIG9yIGNvbnRlbXBsYXRlcyBjb250aW51aW5nIG9ibGlnYXRpb25zIG9uIGEgcGFydHkgd2lsbCBzdXJ2aXZlIHRoZSBleHBpcmF0aW9uIG9yIHRlcm1pbmF0aW9uIG9mIHRoaXMgU3Vic2NyaXB0aW9uIEFncmVlbWVudC4gICJJbmNsdWRpbmciIGFuZCBpdHMgZGVyaXZhdGl2ZXMgKHN1Y2ggYXMgImluY2x1ZGUiIGFuZCAiaW5jbHVkZXMiKSBtZWFuIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb247IHRoaXMgdGVybSBpcyBhcyBkZWZpbmVkLCB3aGV0aGVyIG9yIG5vdCBjYXBpdGFsaXplZCBpbiB0aGlzIFN1YnNjcmlwdGlvbiBBZ3JlZW1lbnQuCisKKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvT0FTSVMtT3BlbiBiL2xpY2Vuc2VzL09BU0lTLU9wZW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAyN2Y4YQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL09BU0lTLU9wZW4KQEAgLTAsMCArMSwyOCBAQAorQ29weXJpZ2h0IChjKSBPQVNJUyBPcGVuIDIwMDItMjAxMS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworQWxsIGNhcGl0YWxpemVkIHRlcm1zIGluIHRoZSBmb2xsb3dpbmcgdGV4dCBoYXZlIHRoZSBtZWFuaW5ncyBhc3NpZ25lZAordG8gdGhlbSBpbiB0aGUgT0FTSVMgSW50ZWxsZWN0dWFsIFByb3BlcnR5IFJpZ2h0cyBQb2xpY3kgKHRoZSAiT0FTSVMKK0lQUiBQb2xpY3kiKS4gVGhlIGZ1bGwgUG9saWN5IG1heSBiZSBmb3VuZCBhdCB0aGUgT0FTSVMgd2Vic2l0ZS4KKworVGhpcyBkb2N1bWVudCBhbmQgdHJhbnNsYXRpb25zIG9mIGl0IG1heSBiZSBjb3BpZWQgYW5kIGZ1cm5pc2hlZCB0bworb3RoZXJzLCBhbmQgZGVyaXZhdGl2ZSB3b3JrcyB0aGF0IGNvbW1lbnQgb24gb3Igb3RoZXJ3aXNlIGV4cGxhaW4gaXQKK29yIGFzc2lzdCBpbiBpdHMgaW1wbGVtZW50YXRpb24gbWF5IGJlIHByZXBhcmVkLCBjb3BpZWQsIHB1Ymxpc2hlZCwKK2FuZCBkaXN0cmlidXRlZCwgaW4gd2hvbGUgb3IgaW4gcGFydCwgd2l0aG91dCByZXN0cmljdGlvbiBvZiBhbnkKK2tpbmQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgc2VjdGlvbiBhcmUKK2luY2x1ZGVkIG9uIGFsbCBzdWNoIGNvcGllcyBhbmQgZGVyaXZhdGl2ZSB3b3Jrcy4gIEhvd2V2ZXIsIHRoaXMKK2RvY3VtZW50IGl0c2VsZiBtYXkgbm90IGJlIG1vZGlmaWVkIGluIGFueSB3YXksIGluY2x1ZGluZyBieSByZW1vdmluZwordGhlIGNvcHlyaWdodCBub3RpY2Ugb3IgcmVmZXJlbmNlcyB0byBPQVNJUywgZXhjZXB0IGFzIG5lZWRlZCBmb3IKK3RoZSBwdXJwb3NlIG9mIGRldmVsb3BpbmcgYW55IGRvY3VtZW50IG9yIGRlbGl2ZXJhYmxlIHByb2R1Y2VkIGJ5CithbiBPQVNJUyBUZWNobmljYWwgQ29tbWl0dGVlIChpbiB3aGljaCBjYXNlIHRoZSBydWxlcyBhcHBsaWNhYmxlIHRvCitjb3B5cmlnaHRzLCBhcyBzZXQgZm9ydGggaW4gdGhlIE9BU0lTIElQUiBQb2xpY3ksIG11c3QgYmUgZm9sbG93ZWQpCitvciBhcyByZXF1aXJlZCB0byB0cmFuc2xhdGUgaXQgaW50byBsYW5ndWFnZXMgb3RoZXIgdGhhbiBFbmdsaXNoLgorCitUaGUgbGltaXRlZCBwZXJtaXNzaW9ucyBncmFudGVkIGFib3ZlIGFyZSBwZXJwZXR1YWwgYW5kIHdpbGwgbm90IGJlCityZXZva2VkIGJ5IE9BU0lTIG9yIGl0cyBzdWNjZXNzb3JzIG9yIGFzc2lnbnMuCisKK1RoaXMgZG9jdW1lbnQgYW5kIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaGVyZWluIGlzIHByb3ZpZGVkIG9uCithbiAiQVMgSVMiIGJhc2lzIGFuZCBPQVNJUyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gQU5ZIFdBUlJBTlRZIFRIQVQgVEhFIFVTRSBPRgorVEhFIElORk9STUFUSU9OIEhFUkVJTiBXSUxMIE5PVCBJTkZSSU5HRSBBTlkgT1dORVJTSElQIFJJR0hUUyBPUiBBTlkKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCitQVVJQT1NFLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvT0RFU0sgYi9saWNlbnNlcy9PREVTSwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMjU0ZjJjCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvT0RFU0sKQEAgLTAsMCArMSwxMzEgQEAKKworT0RFU0sgVEVBTSBMSUNFTlNFIEFHUkVFTUVOVAorCitUaGlzIExpY2Vuc2UgQWdyZWVtZW50IGlzIGEgbGVnYWwgYWdyZWVtZW50IGJldHdlZW4gdGhlIFVzZXIgKGFuCitpbmRpdmlkdWFsIG9yIGFuIGVudGl0eSkgYW5kIG9EZXNrIENvcnAuIGZvciAoYSkgdGhlIFNvZnR3YXJlIFByb2R1Y3QKK2lkZW50aWZpZWQgYWJvdmUsIHdoaWNoIGluY2x1ZGVzIGNvbXB1dGVyIHNvZnR3YXJlIGFuZCBlbGVjdHJvbmljCitkb2N1bWVudGF0aW9uLCBhbmQgKGIpIHRoZSBTZXJ2aWNlIHByb3ZpZGVkIGJ5IG9EZXNrIHdlYi1zaXRlIGFuZCB3ZWIKK3NlcnZpY2VzLiBUaGUgVXNlciBzaG91bGQgY2FyZWZ1bGx5IHJlYWQgdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQKK2NvbmRpdGlvbnMgYmVmb3JlIHVzaW5nIHRoZSBTb2Z0d2FyZSBQcm9kdWN0LiAKKworVGhlIFNvZnR3YXJlIFByb2R1Y3QgaXMgbGljZW5zZWQsIG5vdCBzb2xkLiBUaGUgU29mdHdhcmUgUHJvZHVjdCBpcworcHJvdGVjdGVkIGJ5IGNvcHlyaWdodCBsYXdzIGFuZCBpbnRlcm5hdGlvbmFsIGNvcHlyaWdodCB0cmVhdGllcywgYXMgd2VsbCBhcworb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3MgYW5kIHRyZWF0aWVzLiBCeSBpbnN0YWxsaW5nLCBjb3B5aW5nLCBvcgorb3RoZXJ3aXNlIHVzaW5nIHRoZSBTb2Z0d2FyZSBQcm9kdWN0LCB0aGUgVXNlciBpcyBhZ3JlZWluZyB0byBiZSBib3VuZAorYnkgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LiBJZiB0aGUgVXNlciBkb2VzIG5vdCBhZ3JlZSB0byB0aGUgdGVybXMKK29mIHRoaXMgQWdyZWVtZW50LCB0aGUgVXNlciBpcyBub3QgYXV0aG9yaXplZCB0byB1c2UgdGhlIFNvZnR3YXJlCitQcm9kdWN0IG9yIHRoZSBTZXJ2aWNlLiAKKworMS4gR1JBTlQgT0YgTElDRU5TRS4gb0Rlc2sgZ3JhbnRzIHRoZSBVc2VyIHRoZSBub24tZXhjbHVzaXZlIHJpZ2h0IHRvCitpbnN0YWxsIGFuZCB1c2UgdGhlIFNvZnR3YXJlIFByb2R1Y3Qgb24gYSBjb21wdXRlciBzeXN0ZW0uIFRoZSBTb2Z0d2FyZQorUHJvZHVjdCBjYW4gb25seSBiZSB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggYW4gb0Rlc2sgVGVhbSBPbmxpbmUKK0FjY291bnQgd2l0aCBhIHZhbGlkIGxpY2Vuc2UgdG8gYWNjZXNzIHRoZSBTZXJ2aWNlLiAKKworMi4gQUNDRVNTIFRPIERBVEEuIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCB0aGUgVXNlcgorZ3JhbnRzIHRvIG9EZXNrIHRoZSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHJpZ2h0IHRvIHVzZSwgY29weSwgc3RvcmUsCit0cmFuc21pdCBhbmQgZGlzcGxheSBkYXRhIHN1Ym1pdHRlZCBieSB0aGUgVXNlciB0byB0aGUgU2VydmljZSAoVXNlcgorRGF0YSBvciBDb250ZW50KSBzb2xlbHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gcHJvdmlkZSB0aGUgU2VydmljZSBhcworcmVxdWVzdGVkIGJ5IFVzZXIuIEFsbCBVc2VyIERhdGEgc2hhbGwgcmVtYWluIHRoZSBzb2xlIHByb3BlcnR5IG9mCitVc2VyLCB1bmxlc3Mgc3BlY2lmaWNhbGx5IG5vdGlmaWVkIGluIGFkdmFuY2UuIFVzZXIsIG5vdCBvRGVzaywKK3NoYWxsIGhhdmUgc29sZSByZXNwb25zaWJpbGl0eSBmb3IgdGhlIGFjY3VyYWN5LCBxdWFsaXR5LCBpbnRlZ3JpdHksCitsZWdhbGl0eSwgcmVsaWFiaWxpdHksIGFwcHJvcHJpYXRlbmVzcyBhbmQgY29weXJpZ2h0IG9mIGFsbCBVc2VyIERhdGEKK2FuZCBvRGVzayBzaGFsbCBub3QgYmUgcmVzcG9uc2libGUgb3IgbGlhYmxlIGZvciB0aGUgZGVsZXRpb24sIGNvcnJlY3Rpb24sCitkZXN0cnVjdGlvbiwgZGFtYWdlLCBsb3NzIG9yIGZhaWx1cmUgdG8gc3RvcmUgYW55IERhdGEuIG9EZXNrIHdpbGwgbm90Cittb25pdG9yLCBlZGl0LCBvciBkaXNjbG9zZSB0aGUgY29udGVudHMgb2YgYSB1c2VyJ3MgY29sbGVjdGVkIGRhdGEsIGV4Y2VwdAordGhhdCB5b3UgYWdyZWUgdGhhdCBvRGVzayBtYXkgZG8gc286IChhKSBpZiByZXF1aXJlZCBieSBsYXc7IChiKSB0byBjb21wbHkKK3dpdGggbGVnYWwgcHJvY2VzczsgKGMpIHRvIGVuZm9yY2UgdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBhcHBsaWNhYmxlCitHdWlkZWxpbmVzLCBSdWxlcywgb3IgU2VydmljZS1zcGVjaWZpYyBUZXJtcyBvZiBTZXJ2aWNlOyAoZCkgdG8gcmVzcG9uZCB0bworY2xhaW1zIHRoYXQgYW55IENvbnRlbnQgdmlvbGF0ZXMgdGhlIHJpZ2h0cyBvZiB0aGlyZC1wYXJ0aWVzOyBvciAoZSkgdG8KK3Byb3RlY3QgdGhlIHJpZ2h0cywgcHJvcGVydHksIG9yIHBlcnNvbmFsIHNhZmV0eSBvZiBvRGVzaywgaXRzIGVtcGxveWVlcywKK3VzZXJzIGFuZCB0aGUgcHVibGljLiBvRGVzayBtYXkgcmVtb3ZlIG9yIGRpc2Nsb3NlIGNvbGxlY3RlZCBkYXRhIG9uIHRoZQorU2VydmljZSBmb3IgdGhlIHNhbWUgcmVhc29ucy4KKworMy4gUFJJVkFDWS4gb0Rlc2sncyBwcml2YWN5IHN0YXRlbWVudCBtYXkgYmUgdmlld2VkIGF0CitodHRwOi8vdGVhbS5vZGVzay5jb20vaHRtbC9wcml2YWN5X3N0YXRlbWVudC5odG1sLiBvRGVzayByZXNlcnZlcyB0aGUgcmlnaHQKK3RvIG1vZGlmeSBpdHMgcHJpdmFjeSBhbmQgc2VjdXJpdHkgcG9saWNpZXMgaW4gaXRzIHJlYXNvbmFibGUgZGlzY3JldGlvbgorZnJvbSB0aW1lIHRvIHRpbWUuCisKKzQuIFJFU1RSSUNUSU9OUy4gKEEpIFRoZSBVc2VyIG11c3QgY29tcGx5IHdpdGggYWxsIGFwcGxpY2FibGUgbGF3cworcmVnYXJkaW5nIHRoZSB1c2Ugb2YgdGhlIFNvZnR3YXJlIFByb2R1Y3QgYW5kIHRoZSBTZXJ2aWNlLiAoQikgVGhlIFVzZXIKK21heSBub3QgcmV2ZXJzZSBlbmdpbmVlciwgZGVjb21waWxlLCBvciBkaXNhc3NlbWJsZSB0aGUgU29mdHdhcmUgUHJvZHVjdCBvcgordGhlIFNlcnZpY2UsIG9yIGFjY2VzcyB0aGUgU2VydmljZSBpbiBvcmRlciB0byBidWlsZCBhIGNvbXBldGl0aXZlIHByb2R1Y3QKK29yIHNlcnZpY2Ugb3IgY29weSBhbnkgaWRlYXMsIGZlYXR1cmVzLCBmdW5jdGlvbnMgb3IgZ3JhcGhpY3Mgb2YgdGhlCitTb2Z0d2FyZSBQcm9kdWN0IG9yIHRoZSBTZXJ2aWNlLiAgKEMpIFRoZSBVc2VyIG1heSBub3QgcmVudCBvciBsZWFzZSB0aGUKK1NvZnR3YXJlIFByb2R1Y3Qgb3IgY29weSwgbGljZW5zZSwgc2VsbCwgdHJhbnNmZXIsIG1ha2UgYXZhaWxhYmxlLAorZGlzdHJpYnV0ZSwgb3IgYXNzaWduIHRoaXMgbGljZW5zZSBvciB0aGUgQ29udGVudCB0byBhbnkgdGhpcmQtcGFydHkuICAoRCkKK1RoZSBVc2VyIG1heSBub3QgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGFjdGl2YXRlZCBTb2Z0d2FyZSBQcm9kdWN0IHRvCit0aGlyZCBwYXJ0aWVzLiAoRSkgVGhlIFVzZXIgaXMgcGVybWl0dGVkIHRvIHN0b3JlLCBtYW5pcHVsYXRlLCBhbmFseXplLAorcmVmb3JtYXQsIHByaW50LCBhbmQgZGlzcGxheSB0aGUgQ29udGVudCBvbmx5IGZvciBoaXMgaW50ZXJuYWwgYnVzaW5lc3MgdXNlLgorVW5hdXRob3JpemVkIHVzZSwgcmVzYWxlIG9yIGNvbW1lcmNpYWwgZXhwbG9pdGF0aW9uIG9mIHRoZSBTb2Z0d2FyZSBQcm9kdWN0LAordGhlIFNlcnZpY2UgYW5kL29yIHRoZSBDb250ZW50IGluIGFueSB3YXkgaXMgZXhwcmVzc2x5IHByb2hpYml0ZWQuIChGKSBUaGUKK1VzZXIgc2hhbGwgbm90IGNyZWF0ZSBJbnRlcm5ldCAibGlua3MiIHRvIHRoZSBTZXJ2aWNlIG9yICJmcmFtZSIgb3IKKyJtaXJyb3IiIGFueSBDb250ZW50IGNvbnRhaW5lZCBvbiwgb3IgYWNjZXNzaWJsZSBmcm9tLCB0aGUgU2VydmljZSBvbiBhbnkKK290aGVyIHNlcnZlciBvciBJbnRlcm5ldC1iYXNlZCBkZXZpY2UuIChHKSBUaGUgVXNlciBhY2NlcHRzIG9EZXNrJ3MKK3JpZ2h0IHRvIGF1ZGl0IHRoZSBVc2VyIGNvbXBsaWFuY2Ugd2l0aCB0aGlzIGFncmVlbWVudCBieSBtb25pdG9yaW5nCitjb21wdXRlciBhbmQgcHJvZHVjdCB1c2FnZS4KKworNS4gVEVSTUlOQVRJT04uIG9EZXNrIG1heSB0ZXJtaW5hdGUgdGhpcyBsaWNlbnNlIGFncmVlbWVudCBpZiB0aGUgVXNlcgorZmFpbHMgdG8gY29tcGx5IHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgbGljZW5zZSBhZ3JlZW1lbnQuIEluCitzdWNoIGV2ZW50LCB0aGUgVXNlciBtdXN0IGRlc3Ryb3kgYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUgUHJvZHVjdC4gCisKKzYuIE5PIFdBUlJBTlRZLiBBbnkgdXNlIG9mIHRoZSBTb2Z0d2FyZSBQcm9kdWN0IGlzIGF0IHRoZSBVc2VyJ3Mgb3duCityaXNrLiBUbyB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LCBvRGVzayBhbmQgaXRzCitzdXBwbGllcnMgZGlzY2xhaW0gYWxsIHdhcnJhbnRpZXMgYW5kIGNvbmRpdGlvbnMsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQsCitpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgaW1wbGllZCB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSwKK2ZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlLCBhbmQgbm9uLWluZnJpbmdlbWVudC4KKworNy4gTk8gTElBQklMSVRZIEZPUiBDT05TRVFVRU5USUFMIERBTUFHRVMuIFRvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQKK2J5IGFwcGxpY2FibGUgbGF3LCBpbiBubyBldmVudCBzaGFsbCBvRGVzayBvciBpdHMgc3VwcGxpZXJzIGJlIGxpYWJsZSBmb3IKK2FueSBzcGVjaWFsLCBpbmNpZGVudGFsLCBpbmRpcmVjdCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIHdoYXRzb2V2ZXIKKyhpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgZGFtYWdlcyBmb3IgbG9zcyBvZiBidXNpbmVzcyBwcm9maXRzLAorYnVzaW5lc3MgaW50ZXJydXB0aW9uLCBsb3NzIG9mIGJ1c2luZXNzIGluZm9ybWF0aW9uLCBvciBhbnkgb3RoZXIgcGVjdW5pYXJ5Citsb3NzKSBhcmlzaW5nIG91dCBvZiB0aGUgdXNlIG9mIG9yIGluYWJpbGl0eSB0byB1c2UgdGhlIFNvZnR3YXJlIFByb2R1Y3QsCitldmVuIGlmIG9EZXNrIGhhcyBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4gCisKKzguIExJTUlUQVRJT04gT0YgTElBQklMSVRZLiBvRGVzaydzIGVudGlyZSBsaWFiaWxpdHkgYW5kIHRoZSBVc2VyJ3MKK2V4Y2x1c2l2ZSByZW1lZHkgdW5kZXIgdGhpcyBMaWNlbnNlIEFncmVlbWVudCBzaGFsbCBub3QgZXhjZWVkIHRoZQorVXNlcidzIHB1cmNoYXNlIHByaWNlLiAKKworOS4gTE9DQUwgTEFXUyBBTkQgRVhQT1JUIENPTlRST0wuIFRoaXMgU29mdHdhcmUgUHJvZHVjdCBpcyBzdWJqZWN0IHRvIFVuaXRlZAorU3RhdGVzIGV4cG9ydCBjb250cm9scyBhZG1pbmlzdGVyZWQgYnkgdGhlIFUuUy4gRGVwYXJ0bWVudCBvZiBDb21tZXJjZSwgdGhlCitVbml0ZWQgU3RhdGVzIERlcGFydG1lbnQgb2YgVHJlYXN1cnkgT2ZmaWNlIG9mIEZvcmVpZ24gQXNzZXRzIENvbnRyb2wsIGFuZAorb3RoZXIgVS5TLiBhZ2VuY2llcyBhbmQgdGhlIGV4cG9ydCBjb250cm9sIHJlZ3VsYXRpb25zIG9mIHRoZSBFdXJvcGVhbgorVW5pb24uIFRoZSBVc2VyIGFja25vd2xlZGdlcyBhbmQgYWdyZWVzIHRoYXQgdGhlIFNvZnR3YXJlIFByb2R1Y3Qgc2hhbGwKK25vdCBiZSB1c2VkLCBhbmQgbm9uZSBvZiB0aGUgdW5kZXJseWluZyBpbmZvcm1hdGlvbiwgc29mdHdhcmUsIG9yIHRlY2hub2xvZ3kKK21heSBiZSB0cmFuc2ZlcnJlZCBvciBvdGhlcndpc2UgZXhwb3J0ZWQgb3IgcmUtZXhwb3J0ZWQgdG8gQWZnaGFuaXN0YW4sCitCdXJtYSwgQ3ViYSwgSXJhcSwgSXJhbiwgTGlieWEsIFN1ZGFuLCBvciBhbnkgb3RoZXIgY291bnRyaWVzIHRvIHdoaWNoIHRoZQorVW5pdGVkIFN0YXRlcyBhbmQvb3IgdGhlIEV1cm9wZWFuIFVuaW9uIG1haW50YWlucyBhbiBlbWJhcmdvIChjb2xsZWN0aXZlbHksCisiRW1iYXJnb2VkIENvdW50cmllcyIpLCBvciB0byBvciBieSBhIG5hdGlvbmFsIG9yIHJlc2lkZW50IHRoZXJlb2YsIG9yIGFueQorcGVyc29uIG9yIGVudGl0eSBvbiB0aGUgVS5TLiBEZXBhcnRtZW50IG9mIFRyZWFzdXJ5J3MgTGlzdCBvZiBTcGVjaWFsbHkKK0Rlc2lnbmF0ZWQgTmF0aW9uYWxzIG9yIHRoZSBVLlMuIERlcGFydG1lbnQgb2YgQ29tbWVyY2UncyBUYWJsZSBvZiBEZW5pYWwKK09yZGVycyAoY29sbGVjdGl2ZWx5LCAiRGVzaWduYXRlZCBOYXRpb25hbHMiKS4gVGhlIGxpc3RzIG9mIEVtYmFyZ29lZAorQ291bnRyaWVzIGFuZCBEZXNpZ25hdGVkIE5hdGlvbmFscyBhcmUgc3ViamVjdCB0byBjaGFuZ2Ugd2l0aG91dCBub3RpY2UuIEJ5Cit1c2luZyB0aGlzIFNvZnR3YXJlIFByb2R1Y3QsIHRoZSBVc2VyIHJlcHJlc2VudHMgYW5kIHdhcnJhbnRzIHRoYXQgaXQgaXMKK25vdCBsb2NhdGVkIGluLCB1bmRlciB0aGUgY29udHJvbCBvZiwgb3IgYSBuYXRpb25hbCBvciByZXNpZGVudCBvZiBhbgorRW1iYXJnb2VkIENvdW50cnkgb3IgRGVzaWduYXRlZCBOYXRpb25hbC4gVGhlIFVzZXIgYWdyZWVzIHRvIGNvbXBseQorc3RyaWN0bHkgd2l0aCBhbGwgVS5TLiBhbmQgRXVyb3BlYW4gVW5pb24gZXhwb3J0IGxhd3MgYW5kIGFzc3VtZXMgc29sZQorcmVzcG9uc2liaWxpdHkgZm9yIG9idGFpbmluZyBsaWNlbnNlcyB0byBleHBvcnQgb3IgcmUtZXhwb3J0IGFzIG1heSBiZQorcmVxdWlyZWQuIFRoaXMgU29mdHdhcmUgUHJvZHVjdCBtYXkgdXNlIGVuY3J5cHRpb24gdGVjaG5vbG9neSB0aGF0IGlzCitzdWJqZWN0IHRvIGxpY2Vuc2luZyByZXF1aXJlbWVudHMgdW5kZXIgdGhlIFUuUy4gRXhwb3J0IEFkbWluaXN0cmF0aW9uCitSZWd1bGF0aW9ucywgMTUgQy5GLlIuIFBhcnRzIDczMC03NzQgYW5kIENvdW5jaWwgUmVndWxhdGlvbiAoRUMpIE5vLgorMTMzNC8yMDAwCisKK29EZXNrIGFuZCBpdHMgbGljZW5zb3JzIG1ha2Ugbm8gcmVwcmVzZW50YXRpb24gdGhhdCB0aGUgU2VydmljZSBpcworYXBwcm9wcmlhdGUgb3IgYXZhaWxhYmxlIGZvciB1c2UgaW4gb3RoZXIgbG9jYXRpb25zLiBJZiBVc2VyIHVzZXMgdGhlCitTZXJ2aWNlIGZyb20gb3V0c2lkZSB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhIGFuZC9vciB0aGUgRXVyb3BlYW4gVW5pb24sCitVc2VyIGlzIHNvbGVseSByZXNwb25zaWJsZSBmb3IgY29tcGxpYW5jZSB3aXRoIGFsbCBhcHBsaWNhYmxlIGxhd3MsCitpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGV4cG9ydCBhbmQgaW1wb3J0IHJlZ3VsYXRpb25zIG9mIG90aGVyCitjb3VudHJpZXMuIEFueSBkaXZlcnNpb24gb2YgdGhlIENvbnRlbnQgY29udHJhcnkgdG8gVW5pdGVkIFN0YXRlcyBvcgorRXVyb3BlYW4gVW5pb24gKGluY2x1ZGluZyBFdXJvcGVhbiBVbmlvbiBNZW1iZXIgU3RhdGVzKSBsYXcgaXMgcHJvaGliaXRlZC4KK05vbmUgb2YgdGhlIENvbnRlbnQsIG5vciBhbnkgaW5mb3JtYXRpb24gYWNxdWlyZWQgdGhyb3VnaCB0aGUgdXNlIG9mIHRoZQorU2VydmljZSwgaXMgb3Igd2lsbCBiZSB1c2VkIGZvciBudWNsZWFyIGFjdGl2aXRpZXMsIGNoZW1pY2FsIG9yIGJpb2xvZ2ljYWwKK3dlYXBvbnMsIG9yIG1pc3NpbGUgcHJvamVjdHMsIHVubGVzcyBzcGVjaWZpY2FsbHkgYXV0aG9yaXplZCBieSB0aGUgVW5pdGVkCitTdGF0ZXMgR292ZXJubWVudCBvciBhcHByb3ByaWF0ZSBFdXJvcGVhbiBib2R5IGZvciBzdWNoIHB1cnBvc2VzLiAKKworQ29udGFjdCBJbmZvcm1hdGlvbgorCitJZiB5b3UgaGF2ZSBxdWVzdGlvbnMgcmVnYXJkaW5nIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQsIHBsZWFzZSBjb250YWN0IG91cgorVXNlciBTdXBwb3J0IGJ5IGVtYWlsIGF0IHN1cHBvcnRAb2Rlc2suY29tLCBieSB0ZWxlcGhvbmUgYXQgKDY1MCkgODUzLTQxMDAsCitmYXggYXQgKDY1MCkgODUzLTQxMDEgb3IgcG9zdGFsIG1haWwgYXQgb0Rlc2sgQ29ycG9yYXRpb24sIG9EZXNrIENvcnBvcmF0aW9uCis0MjAwIEJvaGFubm9uIERyaXZlIE1lbmxvIFBhcmssIENBIDk0MDI1IFUuUy5BLgorCmRpZmYgLS1naXQgYS9saWNlbnNlcy9PRkwgYi9saWNlbnNlcy9PRkwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmEzNmFlYQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL09GTApAQCAtMCwwICsxLDk5IEBACitUaGlzIEZvbnQgU29mdHdhcmUgaXMgQ29weXJpZ2h0IChjKSAyMDAzLTIwMDUsIFNJTCBJbnRlcm5hdGlvbmFsIChodHRwOi8vc2NyaXB0cy5zaWwub3JnLykuCitBbGwgUmlnaHRzIFJlc2VydmVkLgorCisiR2VudGl1bSIgaXMgYSBSZXNlcnZlZCBGb250IE5hbWUgZm9yIHRoaXMgRm9udCBTb2Z0d2FyZS4KKyJTSUwiIGlzIGEgUmVzZXJ2ZWQgRm9udCBOYW1lIGZvciB0aGlzIEZvbnQgU29mdHdhcmUuCisKK1RoaXMgRm9udCBTb2Z0d2FyZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgU0lMIE9wZW4gRm9udCBMaWNlbnNlLCBWZXJzaW9uIDEuMC4KK05vIG1vZGlmaWNhdGlvbiBvZiB0aGUgbGljZW5zZSBpcyBwZXJtaXR0ZWQsIG9ubHkgdmVyYmF0aW0gY29weSBpcyBhbGxvd2VkLgorVGhpcyBsaWNlbnNlIGlzIGNvcGllZCBiZWxvdywgYW5kIGlzIGFsc28gYXZhaWxhYmxlIHdpdGggYSBGQVEgYXQ6CitodHRwOi8vc2NyaXB0cy5zaWwub3JnL09GTAorCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitTSUwgT1BFTiBGT05UIExJQ0VOU0UgVmVyc2lvbiAxLjAgLSAyMiBOb3ZlbWJlciAyMDA1CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQUkVBTUJMRQorVGhlIGdvYWxzIG9mIHRoZSBPcGVuIEZvbnQgTGljZW5zZSAoT0ZMKSBhcmUgdG8gc3RpbXVsYXRlIHdvcmxkd2lkZQorZGV2ZWxvcG1lbnQgb2YgY29vcGVyYXRpdmUgZm9udCBwcm9qZWN0cywgdG8gc3VwcG9ydCB0aGUgZm9udCBjcmVhdGlvbgorZWZmb3J0cyBvZiBhY2FkZW1pYyBhbmQgbGluZ3Vpc3RpYyBjb21tdW5pdGllcywgYW5kIHRvIHByb3ZpZGUgYW4gb3BlbgorZnJhbWV3b3JrIGluIHdoaWNoIGZvbnRzIG1heSBiZSBzaGFyZWQgYW5kIGltcHJvdmVkIGluIHBhcnRuZXJzaGlwIHdpdGgKK290aGVycy4KKworVGhlIE9GTCBhbGxvd3MgdGhlIGxpY2Vuc2VkIGZvbnRzIHRvIGJlIHVzZWQsIHN0dWRpZWQsIG1vZGlmaWVkIGFuZAorcmVkaXN0cmlidXRlZCBmcmVlbHkgYXMgbG9uZyBhcyB0aGV5IGFyZSBub3Qgc29sZCBieSB0aGVtc2VsdmVzLiBUaGUKK2ZvbnRzLCBpbmNsdWRpbmcgYW55IGRlcml2YXRpdmUgd29ya3MsIGNhbiBiZSBidW5kbGVkLCBlbWJlZGRlZCwgCityZWRpc3RyaWJ1dGVkIGFuZCBzb2xkIHdpdGggYW55IHNvZnR3YXJlIHByb3ZpZGVkIHRoYXQgdGhlIGZvbnQKK25hbWVzIG9mIGRlcml2YXRpdmUgd29ya3MgYXJlIGNoYW5nZWQuIFRoZSBmb250cyBhbmQgZGVyaXZhdGl2ZXMsCitob3dldmVyLCBjYW5ub3QgYmUgcmVsZWFzZWQgdW5kZXIgYW55IG90aGVyIHR5cGUgb2YgbGljZW5zZS4KKworREVGSU5JVElPTlMKKyJGb250IFNvZnR3YXJlIiByZWZlcnMgdG8gYW55IGFuZCBhbGwgb2YgdGhlIGZvbGxvd2luZzoKKwktIGZvbnQgZmlsZXMKKwktIGRhdGEgZmlsZXMKKwktIHNvdXJjZSBjb2RlCisJLSBidWlsZCBzY3JpcHRzCisJLSBkb2N1bWVudGF0aW9uCisKKyJSZXNlcnZlZCBGb250IE5hbWUiIHJlZmVycyB0byB0aGUgRm9udCBTb2Z0d2FyZSBuYW1lIGFzIHNlZW4gYnkKK3VzZXJzIGFuZCBhbnkgb3RoZXIgbmFtZXMgYXMgc3BlY2lmaWVkIGFmdGVyIHRoZSBjb3B5cmlnaHQgc3RhdGVtZW50LgorCisiU3RhbmRhcmQgVmVyc2lvbiIgcmVmZXJzIHRvIHRoZSBjb2xsZWN0aW9uIG9mIEZvbnQgU29mdHdhcmUKK2NvbXBvbmVudHMgYXMgZGlzdHJpYnV0ZWQgYnkgdGhlIENvcHlyaWdodCBIb2xkZXIuCisKKyJNb2RpZmllZCBWZXJzaW9uIiByZWZlcnMgdG8gYW55IGRlcml2YXRpdmUgZm9udCBzb2Z0d2FyZSBtYWRlIGJ5CithZGRpbmcgdG8sIGRlbGV0aW5nLCBvciBzdWJzdGl0dXRpbmcgLS0gaW4gcGFydCBvciBpbiB3aG9sZSAtLQorYW55IG9mIHRoZSBjb21wb25lbnRzIG9mIHRoZSBTdGFuZGFyZCBWZXJzaW9uLCBieSBjaGFuZ2luZyBmb3JtYXRzCitvciBieSBwb3J0aW5nIHRoZSBGb250IFNvZnR3YXJlIHRvIGEgbmV3IGVudmlyb25tZW50LgorCisiQXV0aG9yIiByZWZlcnMgdG8gYW55IGRlc2lnbmVyLCBlbmdpbmVlciwgcHJvZ3JhbW1lciwgdGVjaG5pY2FsCit3cml0ZXIgb3Igb3RoZXIgcGVyc29uIHdobyBjb250cmlidXRlZCB0byB0aGUgRm9udCBTb2Z0d2FyZS4KKworUEVSTUlTU0lPTiAmIENPTkRJVElPTlMKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworYSBjb3B5IG9mIHRoZSBGb250IFNvZnR3YXJlLCB0byB1c2UsIHN0dWR5LCBjb3B5LCBtZXJnZSwgZW1iZWQsIG1vZGlmeSwKK3JlZGlzdHJpYnV0ZSwgYW5kIHNlbGwgbW9kaWZpZWQgYW5kIHVubW9kaWZpZWQgY29waWVzIG9mIHRoZSBGb250CitTb2Z0d2FyZSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKzEpIE5laXRoZXIgdGhlIEZvbnQgU29mdHdhcmUgbm9yIGFueSBvZiBpdHMgaW5kaXZpZHVhbCBjb21wb25lbnRzLAoraW4gU3RhbmRhcmQgb3IgTW9kaWZpZWQgVmVyc2lvbnMsIG1heSBiZSBzb2xkIGJ5IGl0c2VsZi4KKworMikgU3RhbmRhcmQgb3IgTW9kaWZpZWQgVmVyc2lvbnMgb2YgdGhlIEZvbnQgU29mdHdhcmUgbWF5IGJlIGJ1bmRsZWQsCityZWRpc3RyaWJ1dGVkIGFuZCBzb2xkIHdpdGggYW55IHNvZnR3YXJlLCBwcm92aWRlZCB0aGF0IGVhY2ggY29weQorY29udGFpbnMgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgbGljZW5zZS4gVGhlc2UgY2FuIGJlCitpbmNsdWRlZCBlaXRoZXIgYXMgc3RhbmQtYWxvbmUgdGV4dCBmaWxlcywgaHVtYW4tcmVhZGFibGUgaGVhZGVycyBvcgoraW4gdGhlIGFwcHJvcHJpYXRlIG1hY2hpbmUtcmVhZGFibGUgbWV0YWRhdGEgZmllbGRzIHdpdGhpbiB0ZXh0IG9yCitiaW5hcnkgZmlsZXMgYXMgbG9uZyBhcyB0aG9zZSBmaWVsZHMgY2FuIGJlIGVhc2lseSB2aWV3ZWQgYnkgdGhlIHVzZXIuCisKKzMpIE5vIE1vZGlmaWVkIFZlcnNpb24gb2YgdGhlIEZvbnQgU29mdHdhcmUgbWF5IHVzZSB0aGUgUmVzZXJ2ZWQgRm9udAorTmFtZShzKSwgaW4gcGFydCBvciBpbiB3aG9sZSwgdW5sZXNzIGV4cGxpY2l0IHdyaXR0ZW4gcGVybWlzc2lvbiBpcworZ3JhbnRlZCBieSB0aGUgQ29weXJpZ2h0IEhvbGRlci4gVGhpcyByZXN0cmljdGlvbiBhcHBsaWVzIHRvIGFsbCAKK3JlZmVyZW5jZXMgc3RvcmVkIGluIHRoZSBGb250IFNvZnR3YXJlLCBzdWNoIGFzIHRoZSBmb250IG1lbnUgbmFtZSBhbmQKK290aGVyIGZvbnQgZGVzY3JpcHRpb24gZmllbGRzLCB3aGljaCBhcmUgdXNlZCB0byBkaWZmZXJlbnRpYXRlIHRoZQorZm9udCBmcm9tIG90aGVycy4KKworNCkgVGhlIG5hbWUocykgb2YgdGhlIENvcHlyaWdodCBIb2xkZXIgb3IgdGhlIEF1dGhvcihzKSBvZiB0aGUgRm9udAorU29mdHdhcmUgc2hhbGwgbm90IGJlIHVzZWQgdG8gcHJvbW90ZSwgZW5kb3JzZSBvciBhZHZlcnRpc2UgYW55CitNb2RpZmllZCBWZXJzaW9uLCBleGNlcHQgdG8gYWNrbm93bGVkZ2UgdGhlIGNvbnRyaWJ1dGlvbihzKSBvZiB0aGUKK0NvcHlyaWdodCBIb2xkZXIgYW5kIHRoZSBBdXRob3Iocykgb3Igd2l0aCB0aGVpciBleHBsaWNpdCB3cml0dGVuCitwZXJtaXNzaW9uLgorCis1KSBUaGUgRm9udCBTb2Z0d2FyZSwgbW9kaWZpZWQgb3IgdW5tb2RpZmllZCwgaW4gcGFydCBvciBpbiB3aG9sZSwKK211c3QgYmUgZGlzdHJpYnV0ZWQgdXNpbmcgdGhpcyBsaWNlbnNlLCBhbmQgbWF5IG5vdCBiZSBkaXN0cmlidXRlZAordW5kZXIgYW55IG90aGVyIGxpY2Vuc2UuCisKK1RFUk1JTkFUSU9OCitUaGlzIGxpY2Vuc2UgYmVjb21lcyBudWxsIGFuZCB2b2lkIGlmIGFueSBvZiB0aGUgYWJvdmUgY29uZGl0aW9ucyBhcmUKK25vdCBtZXQuCisKK0RJU0NMQUlNRVIKK1RIRSBGT05UIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCitFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gQU5ZIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVAorT0YgQ09QWVJJR0hULCBQQVRFTlQsIFRSQURFTUFSSywgT1IgT1RIRVIgUklHSFQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQ09QWVJJR0hUIEhPTERFUiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElORElSRUNULCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKK0ZST00sIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIEZPTlQgU09GVFdBUkUgT1IgRlJPTQorT1RIRVIgREVBTElOR1MgSU4gVEhFIEZPTlQgU09GVFdBUkUuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9PRkwtMS4xIGIvbGljZW5zZXMvT0ZMLTEuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNTdhYzhmCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvT0ZMLTEuMQpAQCAtMCwwICsxLDkxIEBACitTSUwgT1BFTiBGT05UIExJQ0VOU0UgVmVyc2lvbiAxLjEgLSAyNiBGZWJydWFyeSAyMDA3CistLS0tLQorCitQUkVBTUJMRQorCitUaGUgZ29hbHMgb2YgdGhlIE9wZW4gRm9udCBMaWNlbnNlIChPRkwpIGFyZSB0byBzdGltdWxhdGUgd29ybGR3aWRlCitkZXZlbG9wbWVudCBvZiBjb2xsYWJvcmF0aXZlIGZvbnQgcHJvamVjdHMsIHRvIHN1cHBvcnQgdGhlIGZvbnQgY3JlYXRpb24KK2VmZm9ydHMgb2YgYWNhZGVtaWMgYW5kIGxpbmd1aXN0aWMgY29tbXVuaXRpZXMsIGFuZCB0byBwcm92aWRlIGEgZnJlZQorYW5kIG9wZW4gZnJhbWV3b3JrIGluIHdoaWNoIGZvbnRzIG1heSBiZSBzaGFyZWQgYW5kIGltcHJvdmVkIGluCitwYXJ0bmVyc2hpcCB3aXRoIG90aGVycy4KKworVGhlIE9GTCBhbGxvd3MgdGhlIGxpY2Vuc2VkIGZvbnRzIHRvIGJlIHVzZWQsIHN0dWRpZWQsIG1vZGlmaWVkIGFuZAorcmVkaXN0cmlidXRlZCBmcmVlbHkgYXMgbG9uZyBhcyB0aGV5IGFyZSBub3Qgc29sZCBieSB0aGVtc2VsdmVzLiAgVGhlCitmb250cywgaW5jbHVkaW5nIGFueSBkZXJpdmF0aXZlIHdvcmtzLCBjYW4gYmUgYnVuZGxlZCwgZW1iZWRkZWQsCityZWRpc3RyaWJ1dGVkIGFuZC9vciBzb2xkIHdpdGggYW55IHNvZnR3YXJlIHByb3ZpZGVkIHRoYXQgYW55IHJlc2VydmVkCituYW1lcyBhcmUgbm90IHVzZWQgYnkgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZSBmb250cyBhbmQgZGVyaXZhdGl2ZXMsCitob3dldmVyLCBjYW5ub3QgYmUgcmVsZWFzZWQgdW5kZXIgYW55IG90aGVyIHR5cGUgb2YgbGljZW5zZS4gIFRoZQorcmVxdWlyZW1lbnQgZm9yIGZvbnRzIHRvIHJlbWFpbiB1bmRlciB0aGlzIGxpY2Vuc2UgZG9lcyBub3QgYXBwbHkgdG8KK2FueSBkb2N1bWVudCBjcmVhdGVkIHVzaW5nIHRoZSBmb250cyBvciB0aGVpciBkZXJpdmF0aXZlcy4KKworREVGSU5JVElPTlMKKworIkZvbnQgU29mdHdhcmUiIHJlZmVycyB0byB0aGUgc2V0IG9mIGZpbGVzIHJlbGVhc2VkIGJ5IHRoZSBDb3B5cmlnaHQKK0hvbGRlcihzKSB1bmRlciB0aGlzIGxpY2Vuc2UgYW5kIGNsZWFybHkgbWFya2VkIGFzIHN1Y2guICBUaGlzIG1heQoraW5jbHVkZSBzb3VyY2UgZmlsZXMsIGJ1aWxkIHNjcmlwdHMgYW5kIGRvY3VtZW50YXRpb24uCisKKyJSZXNlcnZlZCBGb250IE5hbWUiIHJlZmVycyB0byBhbnkgbmFtZXMgc3BlY2lmaWVkIGFzIHN1Y2ggYWZ0ZXIgdGhlCitjb3B5cmlnaHQgc3RhdGVtZW50KHMpLgorCisiT3JpZ2luYWwgVmVyc2lvbiIgcmVmZXJzIHRvIHRoZSBjb2xsZWN0aW9uIG9mIEZvbnQgU29mdHdhcmUgY29tcG9uZW50cworYXMgZGlzdHJpYnV0ZWQgYnkgdGhlIENvcHlyaWdodCBIb2xkZXIocykuCisKKyJNb2RpZmllZCBWZXJzaW9uIiByZWZlcnMgdG8gYW55IGRlcml2YXRpdmUgbWFkZSBieSBhZGRpbmcgdG8sIGRlbGV0aW5nLAorb3Igc3Vic3RpdHV0aW5nIC0tIGluIHBhcnQgb3IgaW4gd2hvbGUgLS0gYW55IG9mIHRoZSBjb21wb25lbnRzIG9mIHRoZQorT3JpZ2luYWwgVmVyc2lvbiwgYnkgY2hhbmdpbmcgZm9ybWF0cyBvciBieSBwb3J0aW5nIHRoZSBGb250IFNvZnR3YXJlCit0byBhIG5ldyBlbnZpcm9ubWVudC4KKworIkF1dGhvciIgcmVmZXJzIHRvIGFueSBkZXNpZ25lciwgZW5naW5lZXIsIHByb2dyYW1tZXIsIHRlY2huaWNhbCB3cml0ZXIKK29yIG90aGVyIHBlcnNvbiB3aG8gY29udHJpYnV0ZWQgdG8gdGhlIEZvbnQgU29mdHdhcmUuCisKK1BFUk1JU1NJT04gJiBDT05ESVRJT05TCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCitjb3B5IG9mIHRoZSBGb250IFNvZnR3YXJlLCB0byB1c2UsIHN0dWR5LCBjb3B5LCBtZXJnZSwgZW1iZWQsIG1vZGlmeSwKK3JlZGlzdHJpYnV0ZSwgYW5kIHNlbGwgbW9kaWZpZWQgYW5kIHVubW9kaWZpZWQgY29waWVzIG9mIHRoZSBGb250CitTb2Z0d2FyZSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKzEpIE5laXRoZXIgdGhlIEZvbnQgU29mdHdhcmUgbm9yIGFueSBvZiBpdHMgaW5kaXZpZHVhbCBjb21wb25lbnRzLCBpbgorT3JpZ2luYWwgb3IgTW9kaWZpZWQgVmVyc2lvbnMsIG1heSBiZSBzb2xkIGJ5IGl0c2VsZi4KKworMikgT3JpZ2luYWwgb3IgTW9kaWZpZWQgVmVyc2lvbnMgb2YgdGhlIEZvbnQgU29mdHdhcmUgbWF5IGJlIGJ1bmRsZWQsCityZWRpc3RyaWJ1dGVkIGFuZC9vciBzb2xkIHdpdGggYW55IHNvZnR3YXJlLCBwcm92aWRlZCB0aGF0IGVhY2ggY29weQorY29udGFpbnMgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgbGljZW5zZS4gIFRoZXNlIGNhbiBiZQoraW5jbHVkZWQgZWl0aGVyIGFzIHN0YW5kLWFsb25lIHRleHQgZmlsZXMsIGh1bWFuLXJlYWRhYmxlIGhlYWRlcnMgb3IgaW4KK3RoZSBhcHByb3ByaWF0ZSBtYWNoaW5lLXJlYWRhYmxlIG1ldGFkYXRhIGZpZWxkcyB3aXRoaW4gdGV4dCBvciBiaW5hcnkKK2ZpbGVzIGFzIGxvbmcgYXMgdGhvc2UgZmllbGRzIGNhbiBiZSBlYXNpbHkgdmlld2VkIGJ5IHRoZSB1c2VyLgorCiszKSBObyBNb2RpZmllZCBWZXJzaW9uIG9mIHRoZSBGb250IFNvZnR3YXJlIG1heSB1c2UgdGhlIFJlc2VydmVkIEZvbnQKK05hbWUocykgdW5sZXNzIGV4cGxpY2l0IHdyaXR0ZW4gcGVybWlzc2lvbiBpcyBncmFudGVkIGJ5IHRoZQorY29ycmVzcG9uZGluZyBDb3B5cmlnaHQgSG9sZGVyLiAgVGhpcyByZXN0cmljdGlvbiBvbmx5IGFwcGxpZXMgdG8gdGhlCitwcmltYXJ5IGZvbnQgbmFtZSBhcyBwcmVzZW50ZWQgdG8gdGhlIHVzZXJzLgorCis0KSBUaGUgbmFtZShzKSBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlcihzKSBvciB0aGUgQXV0aG9yKHMpIG9mIHRoZSBGb250CitTb2Z0d2FyZSBzaGFsbCBub3QgYmUgdXNlZCB0byBwcm9tb3RlLCBlbmRvcnNlIG9yIGFkdmVydGlzZSBhbnkKK01vZGlmaWVkIFZlcnNpb24sIGV4Y2VwdCB0byBhY2tub3dsZWRnZSB0aGUgY29udHJpYnV0aW9uKHMpIG9mIHRoZQorQ29weXJpZ2h0IEhvbGRlcihzKSBhbmQgdGhlIEF1dGhvcihzKSBvciB3aXRoIHRoZWlyIGV4cGxpY2l0IHdyaXR0ZW4KK3Blcm1pc3Npb24uCisKKzUpIFRoZSBGb250IFNvZnR3YXJlLCBtb2RpZmllZCBvciB1bm1vZGlmaWVkLCBpbiBwYXJ0IG9yIGluIHdob2xlLAorbXVzdCBiZSBkaXN0cmlidXRlZCBlbnRpcmVseSB1bmRlciB0aGlzIGxpY2Vuc2UsIGFuZCBtdXN0IG5vdCBiZQorZGlzdHJpYnV0ZWQgdW5kZXIgYW55IG90aGVyIGxpY2Vuc2UuICBUaGUgcmVxdWlyZW1lbnQgZm9yIGZvbnRzIHRvCityZW1haW4gdW5kZXIgdGhpcyBsaWNlbnNlIGRvZXMgbm90IGFwcGx5IHRvIGFueSBkb2N1bWVudCBjcmVhdGVkCit1c2luZyB0aGUgRm9udCBTb2Z0d2FyZS4KKworVEVSTUlOQVRJT04KKworVGhpcyBsaWNlbnNlIGJlY29tZXMgbnVsbCBhbmQgdm9pZCBpZiBhbnkgb2YgdGhlIGFib3ZlIGNvbmRpdGlvbnMgYXJlCitub3QgbWV0LgorCitESVNDTEFJTUVSIFRIRSBGT05UIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsCitXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQsCitJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIEFOWSBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorTk9OSU5GUklOR0VNRU5UIE9GIENPUFlSSUdIVCwgUEFURU5ULCBUUkFERU1BUkssIE9SCitPVEhFUiBSSUdIVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFCitMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksCitJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElORElSRUNULCBJTkNJREVOVEFMLCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRgorQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBUSEUKK1VTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBGT05UIFNPRlRXQVJFIE9SIEZST00KK09USEVSIERFQUxJTkdTIElOIFRIRSBGT05UIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvT0dMLTEuMGEgYi9saWNlbnNlcy9PR0wtMS4wYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjljY2E1Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvT0dMLTEuMGEKQEAgLTAsMCArMSwxMTQgQEAKK09QRU4gR0FNRSBMSUNFTlNFCisKKypWZXJzaW9uIDEuMGEqCisKK1RoZSBmb2xsb3dpbmcgdGV4dCBpcyB0aGUgcHJvcGVydHkgb2YgV2l6YXJkcyBvZiB0aGUgQ29hc3QsIEluYy4gYW5kIGlzCitDb3B5cmlnaHQgMjAwMCBXaXphcmRzIG9mIHRoZSBDb2FzdCwgSW5jICgiV2l6YXJkcyIpLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCisxLiBEZWZpbml0aW9uczogKGEpIkNvbnRyaWJ1dG9ycyIgbWVhbnMgdGhlIGNvcHlyaWdodCBhbmQvb3IgdHJhZGVtYXJrCitvd25lcnMgd2hvIGhhdmUgY29udHJpYnV0ZWQgT3BlbiBHYW1lIENvbnRlbnQ7IChiKSJEZXJpdmF0aXZlIE1hdGVyaWFsIgorbWVhbnMgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgaW5jbHVkaW5nIGRlcml2YXRpdmUgd29ya3MgYW5kIHRyYW5zbGF0aW9ucworKGluY2x1ZGluZyBpbnRvIG90aGVyIGNvbXB1dGVyIGxhbmd1YWdlcyksIHBvdGF0aW9uLCBtb2RpZmljYXRpb24sCitjb3JyZWN0aW9uLCBhZGRpdGlvbiwgZXh0ZW5zaW9uLCB1cGdyYWRlLCBpbXByb3ZlbWVudCwgY29tcGlsYXRpb24sCithYnJpZGdtZW50IG9yIG90aGVyIGZvcm0gaW4gd2hpY2ggYW4gZXhpc3Rpbmcgd29yayBtYXkgYmUgcmVjYXN0LAordHJhbnNmb3JtZWQgb3IgYWRhcHRlZDsgKGMpICJEaXN0cmlidXRlIiBtZWFucyB0byByZXByb2R1Y2UsIGxpY2Vuc2UsCityZW50LCBsZWFzZSwgc2VsbCwgYnJvYWRjYXN0LCBwdWJsaWNseSBkaXNwbGF5LCB0cmFuc21pdCBvciBvdGhlcndpc2UKK2Rpc3RyaWJ1dGU7IChkKSJPcGVuIEdhbWUgQ29udGVudCIgbWVhbnMgdGhlIGdhbWUgbWVjaGFuaWMgYW5kIGluY2x1ZGVzCit0aGUgbWV0aG9kcywgcHJvY2VkdXJlcywgcHJvY2Vzc2VzIGFuZCByb3V0aW5lcyB0byB0aGUgZXh0ZW50IHN1Y2gKK2NvbnRlbnQgZG9lcyBub3QgZW1ib2R5IHRoZSBQcm9kdWN0IElkZW50aXR5IGFuZCBpcyBhbiBlbmhhbmNlbWVudCBvdmVyCit0aGUgcHJpb3IgYXJ0IGFuZCBhbnkgYWRkaXRpb25hbCBjb250ZW50IGNsZWFybHkgaWRlbnRpZmllZCBhcyBPcGVuIEdhbWUKK0NvbnRlbnQgYnkgdGhlIENvbnRyaWJ1dG9yLCBhbmQgbWVhbnMgYW55IHdvcmsgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UsCitpbmNsdWRpbmcgdHJhbnNsYXRpb25zIGFuZCBkZXJpdmF0aXZlIHdvcmtzIHVuZGVyIGNvcHlyaWdodCBsYXcsIGJ1dAorc3BlY2lmaWNhbGx5IGV4Y2x1ZGVzIFByb2R1Y3QgSWRlbnRpdHkuIChlKSAiUHJvZHVjdCBJZGVudGl0eSIgbWVhbnMKK3Byb2R1Y3QgYW5kIHByb2R1Y3QgbGluZSBuYW1lcywgbG9nb3MgYW5kIGlkZW50aWZ5aW5nIG1hcmtzIGluY2x1ZGluZwordHJhZGUgZHJlc3M7IGFydGlmYWN0czsgY3JlYXR1cmVzIGNoYXJhY3RlcnM7IHN0b3JpZXMsIHN0b3J5bGluZXMsCitwbG90cywgdGhlbWF0aWMgZWxlbWVudHMsIGRpYWxvZ3VlLCBpbmNpZGVudHMsIGxhbmd1YWdlLCBhcnR3b3JrLAorc3ltYm9scywgZGVzaWducywgZGVwaWN0aW9ucywgbGlrZW5lc3NlcywgZm9ybWF0cywgcG9zZXMsIGNvbmNlcHRzLAordGhlbWVzIGFuZCBncmFwaGljLCBwaG90b2dyYXBoaWMgYW5kIG90aGVyIHZpc3VhbCBvciBhdWRpbworcmVwcmVzZW50YXRpb25zOyBuYW1lcyBhbmQgZGVzY3JpcHRpb25zIG9mIGNoYXJhY3RlcnMsIHNwZWxscywKK2VuY2hhbnRtZW50cywgcGVyc29uYWxpdGllcywgdGVhbXMsIHBlcnNvbmFzLCBsaWtlbmVzc2VzIGFuZCBzcGVjaWFsCithYmlsaXRpZXM7IHBsYWNlcywgbG9jYXRpb25zLCBlbnZpcm9ubWVudHMsIGNyZWF0dXJlcywgZXF1aXBtZW50LAorbWFnaWNhbCBvciBzdXBlcm5hdHVyYWwgYWJpbGl0aWVzIG9yIGVmZmVjdHMsIGxvZ29zLCBzeW1ib2xzLCBvciBncmFwaGljCitkZXNpZ25zOyBhbmQgYW55IG90aGVyIHRyYWRlbWFyayBvciByZWdpc3RlcmVkIHRyYWRlbWFyayBjbGVhcmx5CitpZGVudGlmaWVkIGFzIFByb2R1Y3QgaWRlbnRpdHkgYnkgdGhlIG93bmVyIG9mIHRoZSBQcm9kdWN0IElkZW50aXR5LCBhbmQKK3doaWNoIHNwZWNpZmljYWxseSBleGNsdWRlcyB0aGUgT3BlbiBHYW1lIENvbnRlbnQ7IChmKSAiVHJhZGVtYXJrIiBtZWFucwordGhlIGxvZ29zLCBuYW1lcywgbWFyaywgc2lnbiwgbW90dG8sIGRlc2lnbnMgdGhhdCBhcmUgdXNlZCBieSBhCitDb250cmlidXRvciB0byBpZGVudGlmeSBpdHNlbGYgb3IgaXRzIHByb2R1Y3RzIG9yIHRoZSBhc3NvY2lhdGVkCitwcm9kdWN0cyBjb250cmlidXRlZCB0byB0aGUgT3BlbiBHYW1lIExpY2Vuc2UgYnkgdGhlIENvbnRyaWJ1dG9yIChnKQorIlVzZSIsICJVc2VkIiBvciAiVXNpbmciIG1lYW5zIHRvIHVzZSwgRGlzdHJpYnV0ZSwgY29weSwgZWRpdCwgZm9ybWF0LAorbW9kaWZ5LCB0cmFuc2xhdGUgYW5kIG90aGVyd2lzZSBjcmVhdGUgRGVyaXZhdGl2ZSBNYXRlcmlhbCBvZiBPcGVuIEdhbWUKK0NvbnRlbnQuIChoKSAiWW91IiBvciAiWW91ciIgbWVhbnMgdGhlIGxpY2Vuc2VlIGluIHRlcm1zIG9mIHRoaXMgYWdyZWVtZW50LgorCisyLiBUaGUgTGljZW5zZTogVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IE9wZW4gR2FtZSBDb250ZW50IHRoYXQKK2NvbnRhaW5zIGEgbm90aWNlIGluZGljYXRpbmcgdGhhdCB0aGUgT3BlbiBHYW1lIENvbnRlbnQgbWF5IG9ubHkgYmUgVXNlZAordW5kZXIgYW5kIGluIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gWW91IG11c3QgYWZmaXggc3VjaCBhIG5vdGljZSB0byBhbnkKK09wZW4gR2FtZSBDb250ZW50IHRoYXQgeW91IFVzZS4gTm8gdGVybXMgbWF5IGJlIGFkZGVkIHRvIG9yIHN1YnRyYWN0ZWQKK2Zyb20gdGhpcyBMaWNlbnNlIGV4Y2VwdCBhcyBkZXNjcmliZWQgYnkgdGhlIExpY2Vuc2UgaXRzZWxmLiBObyBvdGhlcgordGVybXMgb3IgY29uZGl0aW9ucyBtYXkgYmUgYXBwbGllZCB0byBhbnkgT3BlbiBHYW1lIENvbnRlbnQgZGlzdHJpYnV0ZWQKK3VzaW5nIHRoaXMgTGljZW5zZS4KKworMy5PZmZlciBhbmQgQWNjZXB0YW5jZTogQnkgVXNpbmcgdGhlIE9wZW4gR2FtZSBDb250ZW50IFlvdSBpbmRpY2F0ZSBZb3VyCithY2NlcHRhbmNlIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKzQuIEdyYW50IGFuZCBDb25zaWRlcmF0aW9uOiBJbiBjb25zaWRlcmF0aW9uIGZvciBhZ3JlZWluZyB0byB1c2UgdGhpcworTGljZW5zZSwgdGhlIENvbnRyaWJ1dG9ycyBncmFudCBZb3UgYSBwZXJwZXR1YWwsIHdvcmxkd2lkZSwKK3JveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlIHdpdGggdGhlIGV4YWN0IHRlcm1zIG9mIHRoaXMgTGljZW5zZQordG8gVXNlLCB0aGUgT3BlbiBHYW1lIENvbnRlbnQuCisKKzUuUmVwcmVzZW50YXRpb24gb2YgQXV0aG9yaXR5IHRvIENvbnRyaWJ1dGU6IElmIFlvdSBhcmUgY29udHJpYnV0aW5nCitvcmlnaW5hbCBtYXRlcmlhbCBhcyBPcGVuIEdhbWUgQ29udGVudCwgWW91IHJlcHJlc2VudCB0aGF0IFlvdXIKK0NvbnRyaWJ1dGlvbnMgYXJlIFlvdXIgb3JpZ2luYWwgY3JlYXRpb24gYW5kL29yIFlvdSBoYXZlIHN1ZmZpY2llbnQKK3JpZ2h0cyB0byBncmFudCB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5IHRoaXMgTGljZW5zZS4KKworNi5Ob3RpY2Ugb2YgTGljZW5zZSBDb3B5cmlnaHQ6IFlvdSBtdXN0IHVwZGF0ZSB0aGUgQ09QWVJJR0hUIE5PVElDRQorcG9ydGlvbiBvZiB0aGlzIExpY2Vuc2UgdG8gaW5jbHVkZSB0aGUgZXhhY3QgdGV4dCBvZiB0aGUgQ09QWVJJR0hUCitOT1RJQ0Ugb2YgYW55IE9wZW4gR2FtZSBDb250ZW50IFlvdSBhcmUgY29weWluZywgbW9kaWZ5aW5nIG9yCitkaXN0cmlidXRpbmcsIGFuZCBZb3UgbXVzdCBhZGQgdGhlIHRpdGxlLCB0aGUgY29weXJpZ2h0IGRhdGUsIGFuZCB0aGUKK2NvcHlyaWdodCBob2xkZXIncyBuYW1lIHRvIHRoZSBDT1BZUklHSFQgTk9USUNFIG9mIGFueSBvcmlnaW5hbCBPcGVuCitHYW1lIENvbnRlbnQgeW91IERpc3RyaWJ1dGUuCisKKzcuIFVzZSBvZiBQcm9kdWN0IElkZW50aXR5OiBZb3UgYWdyZWUgbm90IHRvIFVzZSBhbnkgUHJvZHVjdCBJZGVudGl0eSwKK2luY2x1ZGluZyBhcyBhbiBpbmRpY2F0aW9uIGFzIHRvIGNvbXBhdGliaWxpdHksIGV4Y2VwdCBhcyBleHByZXNzbHkKK2xpY2Vuc2VkIGluIGFub3RoZXIsIGluZGVwZW5kZW50IEFncmVlbWVudCB3aXRoIHRoZSBvd25lciBvZiBlYWNoCitlbGVtZW50IG9mIHRoYXQgUHJvZHVjdCBJZGVudGl0eS4gWW91IGFncmVlIG5vdCB0byBpbmRpY2F0ZQorY29tcGF0aWJpbGl0eSBvciBjby1hZGFwdGFiaWxpdHkgd2l0aCBhbnkgVHJhZGVtYXJrIG9yIFJlZ2lzdGVyZWQKK1RyYWRlbWFyayBpbiBjb25qdW5jdGlvbiB3aXRoIGEgd29yayBjb250YWluaW5nIE9wZW4gR2FtZSBDb250ZW50IGV4Y2VwdAorYXMgZXhwcmVzc2x5IGxpY2Vuc2VkIGluIGFub3RoZXIsIGluZGVwZW5kZW50IEFncmVlbWVudCB3aXRoIHRoZSBvd25lcgorb2Ygc3VjaCBUcmFkZW1hcmsgb3IgUmVnaXN0ZXJlZCBUcmFkZW1hcmsuIFRoZSB1c2Ugb2YgYW55IFByb2R1Y3QKK0lkZW50aXR5IGluIE9wZW4gR2FtZSBDb250ZW50IGRvZXMgbm90IGNvbnN0aXR1dGUgYSBjaGFsbGVuZ2UgdG8gdGhlCitvd25lcnNoaXAgb2YgdGhhdCBQcm9kdWN0IElkZW50aXR5LiBUaGUgb3duZXIgb2YgYW55IFByb2R1Y3QgSWRlbnRpdHkKK3VzZWQgaW4gT3BlbiBHYW1lIENvbnRlbnQgc2hhbGwgcmV0YWluIGFsbCByaWdodHMsIHRpdGxlIGFuZCBpbnRlcmVzdCBpbgorYW5kIHRvIHRoYXQgUHJvZHVjdCBJZGVudGl0eS4KKworOC4gSWRlbnRpZmljYXRpb246IElmIHlvdSBkaXN0cmlidXRlIE9wZW4gR2FtZSBDb250ZW50IFlvdSBtdXN0IGNsZWFybHkKK2luZGljYXRlIHdoaWNoIHBvcnRpb25zIG9mIHRoZSB3b3JrIHRoYXQgeW91IGFyZSBkaXN0cmlidXRpbmcgYXJlIE9wZW4KK0dhbWUgQ29udGVudC4KKworOS4gVXBkYXRpbmcgdGhlIExpY2Vuc2U6IFdpemFyZHMgb3IgaXRzIGRlc2lnbmF0ZWQgQWdlbnRzIG1heSBwdWJsaXNoCit1cGRhdGVkIHZlcnNpb25zIG9mIHRoaXMgTGljZW5zZS4gWW91IG1heSB1c2UgYW55IGF1dGhvcml6ZWQgdmVyc2lvbiBvZgordGhpcyBMaWNlbnNlIHRvIGNvcHksIG1vZGlmeSBhbmQgZGlzdHJpYnV0ZSBhbnkgT3BlbiBHYW1lIENvbnRlbnQKK29yaWdpbmFsbHkgZGlzdHJpYnV0ZWQgdW5kZXIgYW55IHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlLgorCisxMCBDb3B5IG9mIHRoaXMgTGljZW5zZTogWW91IE1VU1QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGgKK2V2ZXJ5IGNvcHkgb2YgdGhlIE9wZW4gR2FtZSBDb250ZW50IFlvdSBEaXN0cmlidXRlLgorCisxMS4gVXNlIG9mIENvbnRyaWJ1dG9yIENyZWRpdHM6IFlvdSBtYXkgbm90IG1hcmtldCBvciBhZHZlcnRpc2UgdGhlIE9wZW4KK0dhbWUgQ29udGVudCB1c2luZyB0aGUgbmFtZSBvZiBhbnkgQ29udHJpYnV0b3IgdW5sZXNzIFlvdSBoYXZlIHdyaXR0ZW4KK3Blcm1pc3Npb24gZnJvbSB0aGUgQ29udHJpYnV0b3IgdG8gZG8gc28uCisKKzEyIEluYWJpbGl0eSB0byBDb21wbHk6IElmIGl0IGlzIGltcG9zc2libGUgZm9yIFlvdSB0byBjb21wbHkgd2l0aCBhbnkKK29mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugd2l0aCByZXNwZWN0IHRvIHNvbWUgb3IgYWxsIG9mIHRoZSBPcGVuCitHYW1lIENvbnRlbnQgZHVlIHRvIHN0YXR1dGUsIGp1ZGljaWFsIG9yZGVyLCBvciBnb3Zlcm5tZW50YWwgcmVndWxhdGlvbgordGhlbiBZb3UgbWF5IG5vdCBVc2UgYW55IE9wZW4gR2FtZSBNYXRlcmlhbCBzbyBhZmZlY3RlZC4KKworMTMgVGVybWluYXRpb246IFRoaXMgTGljZW5zZSB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmIFlvdSBmYWlsIHRvCitjb21wbHkgd2l0aCBhbGwgdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMKK29mIGJlY29taW5nIGF3YXJlIG9mIHRoZSBicmVhY2guIEFsbCBzdWJsaWNlbnNlcyBzaGFsbCBzdXJ2aXZlIHRoZQordGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLgorCisxNCBSZWZvcm1hdGlvbjogSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZQordW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50CituZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4KKworMTUgQ09QWVJJR0hUIE5PVElDRQorT3BlbiBHYW1lIExpY2Vuc2UgdiAxLjBhIENvcHlyaWdodCAyMDAwLCBXaXphcmRzIG9mIHRoZSBDb2FzdCwgSW5jLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvT1BFTkxEQVAgYi9saWNlbnNlcy9PUEVOTERBUApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NWEzYTIxCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvT1BFTkxEQVAKQEAgLTAsMCArMSw0NyBAQAorVGhlIE9wZW5MREFQIFB1YmxpYyBMaWNlbnNlCisgIFZlcnNpb24gMi43LCA3IFNlcHRlbWJlciAyMDAxCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCisoIlNvZnR3YXJlIiksIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQKK3RoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiBjb3B5cmlnaHQgc3RhdGVtZW50cworICAgYW5kIG5vdGljZXMsCisKKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSBhcHBsaWNhYmxlIGNvcHlyaWdodAorICAgc3RhdGVtZW50cyBhbmQgbm90aWNlcywgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nCisgICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQKKyAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbiwgYW5kCisKKzMuIFJlZGlzdHJpYnV0aW9ucyBtdXN0IGNvbnRhaW4gYSB2ZXJiYXRpbSBjb3B5IG9mIHRoaXMgZG9jdW1lbnQuCisKK1RoZSBPcGVuTERBUCBGb3VuZGF0aW9uIG1heSByZXZpc2UgdGhpcyBsaWNlbnNlIGZyb20gdGltZSB0byB0aW1lLgorRWFjaCByZXZpc2lvbiBpcyBkaXN0aW5ndWlzaGVkIGJ5IGEgdmVyc2lvbiBudW1iZXIuICBZb3UgbWF5IHVzZQordGhpcyBTb2Z0d2FyZSB1bmRlciB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UgcmV2aXNpb24gb3IgdW5kZXIgdGhlCit0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCByZXZpc2lvbiBvZiB0aGUgbGljZW5zZS4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT1BFTkxEQVAgRk9VTkRBVElPTiBBTkQgSVRTCitDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywKK0lOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWQorQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQKK1NIQUxMIFRIRSBPUEVOTERBUCBGT1VOREFUSU9OLCBJVFMgQ09OVFJJQlVUT1JTLCBPUiBUSEUgQVVUSE9SKFMpCitPUiBPV05FUihTKSBPRiBUSEUgU09GVFdBUkUgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCitCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CitMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCitDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCitBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitUaGUgbmFtZXMgb2YgdGhlIGF1dGhvcnMgYW5kIGNvcHlyaWdodCBob2xkZXJzIG11c3Qgbm90IGJlIHVzZWQgaW4KK2FkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIgZGVhbGluZworaW4gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uICBUaXRsZQordG8gY29weXJpZ2h0IGluIHRoaXMgU29mdHdhcmUgc2hhbGwgYXQgYWxsIHRpbWVzIHJlbWFpbiB3aXRoCitjb3B5cmlnaHQgaG9sZGVycy4KKworT3BlbkxEQVAgaXMgYSByZWdpc3RlcmVkIHRyYWRlbWFyayBvZiB0aGUgT3BlbkxEQVAgRm91bmRhdGlvbi4KKworQ29weXJpZ2h0IDE5OTktMjAwMSBUaGUgT3BlbkxEQVAgRm91bmRhdGlvbiwgUmVkd29vZCBDaXR5LAorQ2FsaWZvcm5pYSwgVVNBLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4gIFBlcm1pc3Npb24gdG8gY29weSBhbmQKK2Rpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMgZG9jdW1lbnQgaXMgZ3JhbnRlZC4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL09QRVJBLTEyIGIvbGljZW5zZXMvT1BFUkEtMTIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGZkMWU3YQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL09QRVJBLTEyCkBAIC0wLDAgKzEsNjEgQEAKKworCitPUEVSQSBTT0ZUV0FSRSBFTkQtVVNFUiBMSUNFTlNFIEFHUkVFTUVOVCBGT1IgT1BFUkEgREVTS1RPUCBCUk9XU0VSIEZPUiBPUEVOIFNPVVJDRSBPUEVSQVRJTkcgU1lTVEVNUworCitCWSBBQ0NFUFRJTkcgREVMSVZFUlkgT0YgVEhFIFNPRlRXQVJFIEFORC9PUiBTRVJWSUNFUywgWU9VIChIRVJFSU5BRlRFUiDigJxVU0VS4oCdKSBBUkUgRVhQUkVTU0xZIEFHUkVFSU5HIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVCBUTyBUSEUgRVhDTFVTSU9OIE9GIEFMTCBPVEhFUiBURVJNUy4gSUYgVEhFU0UgVEVSTVMgQVJFIENPTlNJREVSRUQgQU4gT0ZGRVIgQlkgT1BFUkEgU09GVFdBUkUsIEFTQSAo4oCcT3BlcmHigJ0pLCBBQ0NFUFRBTkNFIElTIEVYUFJFU1NMWSBMSU1JVEVEIFRPIFRIRVNFIFRFUk1TLiAgT1BFUkEgSVMgV0lMTElORyBUTyBNQUtFIFRIRSBTT0ZUV0FSRSBBVkFJTEFCTEUgVE8gVVNFUiBPTkxZIFVQT04gVEhFIENPTkRJVElPTiBUSEFUIFVTRVIgQUNDRVBUUyBUSEUgVEVSTVMgT0YgVEhJUyBBR1JFRU1FTlQuIFdSSVRURU4gQVBQUk9WQUwgSVMgTk9UIEEgUFJFUkVRVUlTSVRFIFRPIFRIRSBWQUxJRElUWSBPUiBFTkZPUkNFQUJJTElUWSBPRiBUSElTIEFHUkVFTUVOVC4KKworVEVSTVMgQU5EIENPTkRJVElPTlMuICBUaGlzIEVuZC1Vc2VyIExpY2Vuc2UgQWdyZWVtZW50ICh0aGUg4oCcQWdyZWVtZW504oCdKSBpcyBiZXR3ZWVuIFVzZXIgYW5kIE9wZXJhLiAgVGhpcyBBZ3JlZW1lbnQgZ292ZXJucyBVc2Vy4oCZcyB1c2Ugb2YgdGhlIFNvZnR3YXJlIHByb3ZpZGVkIHRvIFVzZXIgYnkgT3BlcmEsIGluY2x1ZGluZyBhbnkgcmVsZWFzZXMgb2Ygb3IgdG8gdGhlIFNvZnR3YXJlIHRoYXQgVXNlciBtYXkgcmVjZWl2ZSBmcm9tIE9wZXJhLCB0b2dldGhlciB3aXRoIHRoZSBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHRoZXJld2l0aC4KKworMS4JREVGSU5JVElPTlMuICBGb3IgcHVycG9zZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIHRoZSBmb2xsb3dpbmcgdGVybXMgd2lsbCBoYXZlIHRoZSBmb2xsb3dpbmcgbWVhbmluZ3M6CisKKzEuMQnigJxVc2Vy4oCdIG1lYW5zIHRoZSBsZWdhbCBlbnRpdHkgb3IgcGVyc29uIHdobyBvcmRlcnMgb3IgZG93bmxvYWRzIHRoZSBTb2Z0d2FyZSBhbmQvb3IgYWN0aXZhdGVzIHRoZSBTZXJ2aWNlcy4KKworMS4yCeKAnERvY3VtZW50YXRpb27igJ0gbWVhbnMgdGhlIHN0YW5kYXJkIGVuZC11c2VyIHRlY2huaWNhbCBkb2N1bWVudGF0aW9uLCBzcGVjaWZpY2F0aW9ucywgbWF0ZXJpYWxzIGFuZCBvdGhlciBpbmZvcm1hdGlvbiBPcGVyYSBzdXBwbGllcyB3aXRoIHRoZSBTb2Z0d2FyZSBhbmQvb3IgU2VydmljZXMuCisKKzEuMwnigJxTZXJ2aWNlc+KAnSBtZWFucyB0aGUgdmFyaW91cyBzZXJ2aWNlcyB0byB3aGljaCBPcGVyYSBwcm92aWRlcyB1c2VycyB3aXRoIGFjY2VzcywgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgT3BlcmEgVHVyYm8sIHRoZSBNeSBPcGVyYSBjb21tdW5pdHksIHRoZSBPcGVyYSBQb3J0YWwgd2Vic2l0ZSwgdGhlIERldi5PcGVyYSB3ZWJzaXRlLCB0aGUgT3BlcmEgQWRkLW9ucyB3ZWJzaXRlLCBPcGVyYSBVbml0ZSwgc2VhcmNoIHNlcnZpY2VzLCBwZXJzb25hbGl6ZWQgY29udGVudCBhbmQgYnJhbmRlZCBvZmZlcmluZyB0aHJvdWdoIGl0cyBuZXR3b3JrIG9mIHNlcnZpY2VzIHRoYXQgbWF5IGJlIGFjY2Vzc2VkIHRocm91Z2ggYW55IHZhcmlvdXMgbWVkaXVtIG9yIGRldmljZSBub3cga25vd24gb3IgaGVyZWFmdGVyIGRldmVsb3BlZC4KKworMS40CeKAnFNvZnR3YXJl4oCdIG1lYW5zIHRoZSBwcm9wcmlldGFyeSBPcGVyYSBzb2Z0d2FyZSBwcm9kdWN0cyAoaW4gb2JqZWN0IGNvZGUgZm9ybWF0IG9ubHkpIGRlbGl2ZXJlZCB0byBVc2VyIGhlcmV1bmRlciAoaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgT3BlcmEgYnJvd3NlciApLCB0b2dldGhlciB3aXRoIGFueSB1cGRhdGUgb3IgdXBncmFkZSB0aGVyZXRvLCB3aGVuIGFuZCBpZiBtYWRlIGF2YWlsYWJsZSB0byB5b3UgYnkgT3BlcmEuICBTb2Z0d2FyZSBkb2VzIG5vdCBpbmNsdWRlIFRoaXJkLVBhcnR5IFNvZnR3YXJlLgorCisxLjUJ4oCcVGhpcmQtUGFydHkgU29mdHdhcmXigJ0gbWVhbnMgdGhlIHNvZnR3YXJlIG9mIGNlcnRhaW4gdGhpcmQgcGFydGllcyB0aGF0IE9wZXJhIG1heSBkZWxpdmVyIHdpdGggdGhlIFNvZnR3YXJlLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHdpZGdldHMgb3IgZXh0ZW5zaW9ucyBvZiBjZXJ0YWluIHRoaXJkIHBhcnRpZXMgYW5kIGluZGVwZW5kZW50IGRldmVsb3BlcnMuCisKKzEuNgnigJxVc2XigJ0gbWVhbnMgdG8gY2F1c2UgYSBjb21wdXRlciBzeXN0ZW0gdG8gZXhlY3V0ZSBhbnkgbWFjaGluZS1leGVjdXRhYmxlIHBvcnRpb24gb2YgdGhlIFNvZnR3YXJlIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgRG9jdW1lbnRhdGlvbiBvciB0byBtYWtlIHVzZSBvZiBhbnkgRG9jdW1lbnRhdGlvbiBvciByZWxhdGVkIG1hdGVyaWFscyBpbiBjb25uZWN0aW9uIHdpdGggdGhlIGV4ZWN1dGlvbiBvZiBhbnkgbWFjaGluZS1leGVjdXRhYmxlIHBvcnRpb24gb2YgdGhlIFNvZnR3YXJlCisKKzIuCUxJQ0VOU0UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50LCBPcGVyYSBoZXJlYnkgZ3JhbnRzIFVzZXIgYSBsaW1pdGVkLCBub24tZXhjbHVzaXZlLCBub24tdHJhbnNmZXJhYmxlLCBub24tc3VibGljZW5zYWJsZSBsaWNlbnNlOiAoaSkgdG8gdXNlIHRoZSBTZXJ2aWNlcyBhbmQgdG8gaW5zdGFsbCBhbmQgVXNlIHRoZSBTb2Z0d2FyZSBzdXBwbGllZCB0byBVc2VyIGhlcmV1bmRlciwgYXMgaW5zdGFsbGVkIG9uIHlvdXIgcGVyc29uYWwgY29tcHV0ZXIsIGluY2x1ZGluZyB5b3VyIGxhcHRvcCwgZGVza3RvcCBvciBvbiBjb21wdXRlcnMgd2l0aGluIFVzZXIncyBvcmdhbml6YXRpb247IGFuZCAoaWkpIHRvIHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgd2l0aG91dCBtb2RpZmljYXRpb24sIHByb3ZpZGVkIHRoYXQgYW55IHN1Y2ggcmVwcm9kdWN0aW9uIG9yIGRpc3RyaWJ1dGlvbiBvZiB0aGUgU29mdHdhcmUgYnkgVXNlcjogKGkpIG11c3QgYmUgaW4gYW4gYXBwbGljYXRpb24gcmVwb3NpdG9yeSBmb3IgYSBkZXNrdG9wIE9wZW4gU291cmNlIE9TIGRpc3RyaWJ1dGlvbiAoZXhwcmVzc2x5IGV4Y2x1ZGluZyBkaXN0cmlidXRpb24gZm9yIGVtYmVkZGVkIE9wZW4gU291cmNlIE9TKTsgKGlpKSBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIGZyZWUgb2YgY2hhcmdlIGZvciBlbmQtdXNlcnM7IChpaWkpIG11c3QgYmUgc3ViamVjdCB0byBhbmQgZGlzdHJpYnV0ZWQgd2l0aCBhIGNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZCAoaXYpIG5vIGF1dG9tYXRpYyBtb2RpZmljYXRpb24gb2YgdGhlIGRlZmF1bHQgc2VhcmNoIGVuZ2luZXMgaW4gdGhlIFNvZnR3YXJlIHNldHRpbmdzIGlzIGRvbmUgYXQgYW55IHRpbWUsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gYWZ0ZXIgdGhlIFNvZnR3YXJlIGlzIGluc3RhbGxlZC4KKworMy4JTElDRU5TRSBSRVNUUklDVElPTlMgQU5EIFRISVJELVBBUlRZIFNPRlRXQVJFLgorCiszLjEJVXNlciBzaGFsbCBub3QgYW5kIHNoYWxsIG5vdCBhbGxvdyBhbnkgdGhpcmQgcGFydHkgdG86IChhKSB1c2UgdGhlIFNvZnR3YXJlIG9yIFNlcnZpY2VzIGV4Y2VwdCBhcyBleHByZXNzbHkgcGVybWl0dGVkIHVuZGVyIFNlY3Rpb24gMjsgKGIpIHNlcGFyYXRlIHRoZSBjb21wb25lbnQgcHJvZ3JhbXMgb2YgdGhlIFNvZnR3YXJlIGZvciB1c2Ugb24gZGlmZmVyZW50IGNvbXB1dGVyczsgKGMpIGFkYXB0LCBhbHRlciwgcHVibGljbHkgZGlzcGxheSwgcHVibGljbHkgcGVyZm9ybSwgdHJhbnNsYXRlLCBlbWJlZCBpbnRvIGFueSBvdGhlciBwcm9kdWN0LCBvciBvdGhlcndpc2UgY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mgb2YsIG9yIG90aGVyd2lzZSBtb2RpZnkgdGhlIFNvZnR3YXJlIG9yIFNlcnZpY2VzOyAoZCkgc3VibGljZW5zZSwgbGVhc2UsIHJlbnQsIGxvYW4sIG9yIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIG9yIFNlcnZpY2VzIHRvIGFueSB0aGlyZCBwYXJ0eTsgKGUpIHRyYW5zZmVyIHRoZSBTb2Z0d2FyZSBvciBTZXJ2aWNlcyB0byBhbnkgdGhpcmQgcGFydHk7IChmKSByZXZlcnNlIGVuZ2luZWVyLCBkZWNvbXBpbGUsIGRpc2Fzc2VtYmxlLCBvciBvdGhlcndpc2UgYXR0ZW1wdCB0byBkZXJpdmUgdGhlIHNvdXJjZSBjb2RlIGZvciB0aGUgU29mdHdhcmUsIChpKSBleGNlcHQgYXMgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LCBvciAoaWkpIHNvbGVseSB0byB0aGUgZXh0ZW50IHJlcXVpcmVkIHRvIGRlYnVnIGNoYW5nZXMgdG8gYW55IHRoaXJkIHBhcnR5IExHUEwtbGlicmFyaWVzIGxpbmtlZCB0byBieSB0aGUgU29mdHdhcmU7IChnKSByZW1vdmUsIGFsdGVyIG9yIG9ic2N1cmUgYW55IHByb3ByaWV0YXJ5IG5vdGljZXMgb24gdGhlIFNvZnR3YXJlIG9yIFNlcnZpY2VzLCBvciB0aGUgYXBwbGljYWJsZSBkb2N1bWVudGF0aW9uIHRoZXJlZm9yZTsgb3IgKGgpIGFsbG93IHRoaXJkIHBhcnRpZXMgdG8gYWNjZXNzIG9yIHVzZSB0aGUgU29mdHdhcmUgb3IgU2VydmljZXMsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYW55IHVzZSBpbiBhbnkgYXBwbGljYXRpb24gc2VydmljZSBwcm92aWRlciBlbnZpcm9ubWVudCwgc2VydmljZSBidXJlYXUsIG9yIHRpbWUtc2hhcmluZyBhcnJhbmdlbWVudHMuCisKKzMuMglUaGlyZC1QYXJ0eSBTb2Z0d2FyZSBpcyBzdWJqZWN0IHRvIHNlcGFyYXRlIHRlcm1zIGFuZCBjb25kaXRpb25zIGluY2x1ZGVkIHdpdGgsIG9yIGNvbnRhaW5lZCBpbiB0aGUgc2V0dXAgaW5zdGFsbGF0aW9uIHNlZ21lbnRzIG9mIHN1Y2ggVGhpcmQtUGFydHkgU29mdHdhcmUuICBUaGUgbGljZW5zZSByZXN0cmljdGlvbnMgY29udGFpbmVkIGluIHRoaXMgQWdyZWVtZW50IGRvIG5vdCBhcHBseSB0byBUaGlyZC1QYXJ0eSBTb2Z0d2FyZSB0byB0aGUgZXh0ZW50IHRoZXkgYXJlIGluY29uc2lzdGVudCB3aXRoIHN1Y2ggVGhpcmQtUGFydHkgU29mdHdhcmUgdGVybXMuIC4gT3BlcmEgc2hhbGwgbm90IGJlIHJlc3BvbnNpYmxlIGZvciBhbnkgVGhpcmQgUGFydHkgU29mdHdhcmUuCisKKzQuCVVTRSBPRiBTRVJWSUNFUworCis0LjEJT3BlcmEgcHJvdmlkZXMgdXNlcnMgd2l0aCBhY2Nlc3MgdG8gYSByaWNoIGNvbGxlY3Rpb24gb2YgcmVzb3VyY2VzIGFuZCBTZXJ2aWNlcywgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB2YXJpb3VzIGNvbW11bmljYXRpb25zIHRvb2xzLCBmb3J1bXMgc3VjaCBhcyB0aGUg4oCcTXkgT3BlcmHigJ0gY29tbXVuaXR5IHNpdGUsIGFuZCBwZXJzb25hbGl6ZWQgY29udGVudCB0aHJvdWdoIGl0cyBuZXR3b3JrIG9mIHNlcnZpY2VzIHdoaWNoIG1heSBiZSBhY2Nlc3NlZCB0aHJvdWdoIGFueSB2YXJpb3VzIG1lZGl1bSBvciBkZXZpY2Ugbm93IGtub3duIG9yIGhlcmVhZnRlciBkZXZlbG9wZWQuICBDZXJ0YWluIGZlYXR1cmVzIG9mIHRoZXNlIFNlcnZpY2VzIG1heSBhbGxvdyBVc2VyIHRvIHBvc3Qgb3Igc2VuZCBjb250ZW50IHRoYXQgY2FuIGJlIHZpZXdlZCBieSBvdGhlcnMgKOKAnFVzZXItR2VuZXJhdGVkIENvbnRlbnTigJ0pLiAgVXNlciBhZ3JlZXMgdGhhdCBPcGVyYSBpcyBub3QgbGlhYmxlIGZvciBVc2VyLUdlbmVyYXRlZCBDb250ZW50IHRoYXQgaXMgcHJvdmlkZWQgYnkgb3RoZXJzLiBPcGVyYSBoYXMgbm8gZHV0eSB0byBwcmUtc2NyZWVuIFVzZXItR2VuZXJhdGVkIENvbnRlbnQsIGJ1dCBPcGVyYSBoYXMgdGhlIHJpZ2h0IHRvIHJlZnVzZSB0byBwb3N0LCBlZGl0LCBvciBkZWxpdmVyIHN1Ym1pdHRlZCBVc2VyLUdlbmVyYXRlZCBDb250ZW50LiBPcGVyYSByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmVtb3ZlIFVzZXItR2VuZXJhdGVkIENvbnRlbnQgZm9yIGFueSByZWFzb24sIGJ1dCBPcGVyYSBpcyBub3QgcmVzcG9uc2libGUgZm9yIGFueSBmYWlsdXJlIG9yIGRlbGF5IGluIHJlbW92aW5nIHN1Y2ggbWF0ZXJpYWwuIE9wZXJhIHJlc2VydmVzIHRoZSByaWdodCB0byBibG9jayBhbnkgdXNlcidzIGFjY2VzcyB0byBhbnkgY29udGVudCwgd2Vic2l0ZSBvciB3ZWJwYWdlIHRoYXQgT3BlcmEgcHJvdmlkZXMgaW4gb3VyIHNvbGUgZGlzY3JldGlvbi4KKworNC4yCURpc3B1dGVzIG1heSBhcmlzZSBiZXR3ZWVuIFVzZXIgYW5kIG90aGVycyBvciBiZXR3ZWVuIFVzZXIgYW5kIE9wZXJhIHJlbGF0ZWQgdG8gY29udGVudCwgaW5jbHVkaW5nIFVzZXItR2VuZXJhdGVkIENvbnRlbnQuICBTdWNoIGRpc3B1dGVzIGNvdWxkIGludm9sdmUsIGFtb25nIG90aGVyIHRoaW5ncywgdGhlIHVzZSBvciBtaXN1c2Ugb2YgZG9tYWluIG5hbWVzOyB0aGUgaW5mcmluZ2VtZW50IG9mIGNvcHlyaWdodHMsIHRyYWRlbWFya3MsIG9yIG90aGVyIHJpZ2h0cyBpbiBpbnRlbGxlY3R1YWwgcHJvcGVydHk7IGRlZmFtYXRpb247IGZyYXVkOyB0aGUgdXNlIG9yIG1pc3VzZSBvZiBpbmZvcm1hdGlvbjsgYW5kIHByb2JsZW1zIHdpdGggb25saW5lIGF1Y3Rpb24gb3IgY29tbWVyY2UgdHJhbnNhY3Rpb25zLiBVc2VyIGFncmVlcyB0aGF0IGFsbCBjbGFpbXMsIGRpc3B1dGVzIG9yIHdyb25nZG9pbmcgdGhhdCByZXN1bHQgZnJvbSwgb3IgYXJlIHJlbGF0ZWQgaW4gYW55IHdheSB0bywgdGhlIGNvbnRlbnQgb2YgaW5mb3JtYXRpb24gdGhhdCBVc2VyIHBvc3RzLCB0cmFuc21pdHMsIHJlLXRyYW5zbWl0cyBvciByZWNlaXZlcyB0aHJvdWdoIHRoZSBTZXJ2aWNlcywgT3BlcmEncyBuZXR3b3JrIG9yIFNvZnR3YXJlIGFyZSBVc2Vy4oCZcyBzb2xlIGFuZCBleGNsdXNpdmUgcmVzcG9uc2liaWxpdHkuIE9wZXJhIG1heSBhdCBpdHMgZGlzY3JldGlvbiBibG9jayBjZXJ0YWluIHdlYnNpdGVzIG9yIGRvbWFpbnMgYW5kIHJlLXJvdXRlIHlvdSB0byBvdGhlciBwYWdlcy4KKworNC4zCVRoZSB1c2Ugb2Ygc2V2ZXJhbCBvZiB0aGUgU2VydmljZXMsIGluY2x1ZGluZyBPcGVyYSBMaW5rLCByZXF1aXJlcyB0aGF0IFVzZXIgaXMgYSByZWdpc3RlcmVkIE9wZXJhIElEIHVzZXIuIFlvdSBjYW4gcmVnaXN0ZXIgZm9yIGFuIE9wZXJhIElEIHdpdGhvdXQgYW55IGNoYXJnZSBhdCBodHRwOi8vbXkub3BlcmEuY29tLy4gT3BlcmEgTGluayBhbGxvd3MgVXNlciB0byBzeW5jaHJvbml6ZSBzb21lIGRhdGEsIHN1Y2ggYXMgYm9va21hcmtzLCBhbW9uZyB0aGVpciBPcGVyYSBmb3IgZGVza3RvcCwgT3BlcmEgTW9iaWxlLCBPcGVyYSBNaW5pIFdlYiBicm93c2VycyBhbmQgdGhyb3VnaCB0aGUgT3BlcmEgTGluayBBUEkuIFRoZSBUZXJtcyBvZiBTZXJ2aWNlIGZvciB0aGUgU2VydmljZXMgaXMgZm91bmQgYXQgaHR0cDovL215Lm9wZXJhLmNvbS9jb21tdW5pdHkvdGVybXMtb2Ytc2VydmljZS8sIGFuZCBpcyBpbmNvcnBvcmF0ZWQgaW4gdGhpcyBBZ3JlZW1lbnQgYnkgcmVmZXJlbmNlLgorCis0LjQJT3BlcmEgcmVzZXJ2ZXMgdGhlIHJpZ2h0IGF0IGFueSB0aW1lIGFuZCBmcm9tIHRpbWUgdG8gdGltZSB0byBtb2RpZnkgb3IgZGlzY29udGludWUsIHRlbXBvcmFyaWx5IG9yIHBlcm1hbmVudGx5LCB0aGUgU2VydmljZXMgKG9yIGFueSBwYXJ0IHRoZXJlb2YpIHdpdGggb3Igd2l0aG91dCBub3RpY2UuIFVzZXIgYWdyZWVzIHRoYXQgT3BlcmEgc2hhbGwgbm90IGJlIGxpYWJsZSB0byBVc2VyIG9yIHRvIGFueSB0aGlyZC1wYXJ0eSBmb3IgYW55IG1vZGlmaWNhdGlvbiwgc3VzcGVuc2lvbiBvciBkaXNjb250aW51YW5jZSBvZiB0aGUgU2VydmljZXMuCisKKzQuNQlXaXRob3V0IGxpbWl0aW5nIHRoZSBhcHBsaWNhYmlsaXR5IG9mIHRoZSBmb3JlZ29pbmcgZ2VuZXJhbCB0ZXJtcywgdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcHBseSBmb3IgdGhlIHNwZWNpZmljIHNlcnZpY2VzIGRpc2N1c3NlZCBiZWxvdy4KKworNC41LjEJT3BlcmEgVHVyYm86ICBXaGVuIE9wZXJhIFR1cmJvIGlzIGVuYWJsZWQsIGl0IHdpbGwgcmVxdWVzdCBub3JtYWwgd2ViIGNvbnRlbnQgdGhyb3VnaCBhbiBPcGVyYSBTb2Z0d2FyZSBwcm94eSBzZXJ2ZXIuICBPcGVyYSBUdXJibyB3aWxsIGV4Y2x1ZGUgd2VicGFnZXMgbG9jYXRlZCBvbiBhbiBpbnRyYW5ldCBvciB1c2luZyBzZWN1cmUgY29ubmVjdGlvbnMgKEhUVFBTKS4gIFRoZSBicm93c2luZyBleHBlcmllbmNlIG1heSBjaGFuZ2UgZHVlIHRvIGluY3JlYXNlZCB3ZWJwYWdlIGxvYWRpbmcgc3BlZWRzIHdoZW4gdXNpbmcgT3BlcmEgVHVyYm8uIE9wZXJhIHJlc2VydmVzIHRoZSByaWdodCB0byBjaGFuZ2UsIGxpbWl0IHVzYWdlIG9mLCBjaGFyZ2UgZm9yIGNvbnRpbnVlZCB1c2FnZSBvZiAob2YgY291cnNlIHJlcXVpcmUgVXNlciB0byBvcHQgaW4gYmVmb3JlIGluY3VycmluZyBhbnkgY2hhcmdlcyksIGFuZC9vciBkaXNjb250aW51ZSB0aGUgT3BlcmEgVHVyYm8gc2VydmljZSBhdCBhbnkgcG9pbnQgaW4gdGltZS4gIEZ1cnRoZXJtb3JlLCBPcGVyYSByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmV2aXNlIHRoZSB0ZXJtcyBvZiB0aGUgT3BlcmEgVHVyYm8gc2VydmljZSwgd2hpY2ggbWF5IGluY2x1ZGUgbWFraW5nIHRoZSBPcGVyYSBUdXJibyBzZXJ2aWNlIHN1YmplY3QgdG8gYSBzZXBhcmF0ZSBhZ3JlZW1lbnQuCisKKzQuNS4yCU9wZXJhIFVuaXRlOiBPcGVyYSBVbml0ZSBpcyBhIHNlcnZpY2Ugd2hlcmVieSBPcGVyYSBwcm92aWRlcyB1c2VycyB3aXRoIGEgd2ViLWJyb3dzZXIgY29tbXVuaWNhdGlvbiB0aGF0IGFsbG93cyBVc2VyICB0byBzaGFyZSBjb250ZW50LCBjb2xsYWJvcmF0ZSwgYW5kIGludGVyYWN0IHdpdGggb3RoZXJzLiBDZXJ0YWluIGZlYXR1cmVzIG9mIE9wZXJhIFVuaXRlIGFsbG93IFVzZXIgdG8gcG9zdCBhbmQgc2VuZCBjb250ZW50IGFuZC9vciBsaW5rcyB0byBVc2VyLUdlbmVyYXRlZCBDb250ZW50IHN0b3JlZCBvbiBVc2Vy4oCZcyBjb21wdXRlciwgd2hpY2ggY2FuIGJlIHZpZXdlZCBhbmQvb3IgYWNjZXNzZWQgYnkgb3RoZXJzLiBUaGUgY29udGVudCBpcyBub3Qgc3RvcmVkIGJ5IE9wZXJhLCBhbmQgT3BlcmEgZXhlcmNpc2VzIG5vIGNvbnRyb2wgb3ZlciBVc2VyLUdlbmVyYXRlZCBDb250ZW50IHBhc3NpbmcgdGhyb3VnaCBpdHMgbmV0d29yayBvciBlcXVpcG1lbnQgb3IgYXZhaWxhYmxlIG9uIG9yIHRocm91Z2ggdGhlIFNlcnZpY2VzLiBVc2VyIGFncmVlcyB0aGF0IE9wZXJhIGlzIG5vdCBsaWFibGUgZm9yIGFueSBsb3NzIG9mIGRhdGEuICBVc2VyIG1heSBvbmx5IHBvc3Qgb3Igc2VuZCB2aWEgdGhlIFNlcnZpY2VzIFVzZXItR2VuZXJhdGVkIENvbnRlbnQgdGhhdCBVc2VyIGNyZWF0ZWQgb3IgdGhhdCBVc2VyIGhhcyBwZXJtaXNzaW9uIHRvIHNlbmQgYW5kL29yIHBvc3QuICBVc2VyIGFncmVlcyBub3QgdG8gdXNlIE9wZXJhIFVuaXRlIHRvIHVwbG9hZCwgdHJhbnNmZXIgb3Igb3RoZXJ3aXNlIG1ha2UgYXZhaWxhYmxlIGZpbGVzLCBpbWFnZXMsIGNvZGUsIG1hdGVyaWFscywgb3Igb3RoZXIgaW5mb3JtYXRpb24gb3IgY29udGVudCB0aGF0IGlzIG9ic2NlbmUsIHZ1bGdhciwgaGF0ZWZ1bCwgdGhyZWF0ZW5pbmcsIG9yIHRoYXQgdmlvbGF0ZXMgYW55IGxhd3Mgb3IgdGhpcmQtcGFydHkgcmlnaHRzLCBoZXJldW5kZXIgYnV0IG5vdCBsaW1pdGVkIHRvIHRoaXJkLXBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMuIE9wZXJhIHJlc2VydmVzIHRoZSByaWdodCB0byB0ZXJtaW5hdGUgVXNlcuKAmXMgYWNjb3VudCBpZiBVc2VyIHVzZSBPcGVyYSBVbml0ZSB0byB0cmFuc21pdCBjb3B5cmlnaHRlZCBtYXRlcmlhbCB1bmxhd2Z1bGx5IHdpdGhvdXQgYSBsaWNlbnNlLCB2YWxpZCBkZWZlbnNlIG9yIGZhaXIgdXNlIHByaXZpbGVnZSB0byBkbyBzby4gT3BlcmEgZG9lcyBub3QgY2xhaW0gb3duZXJzaGlwIG9mIGFueSBVc2VyLUdlbmVyYXRlZCBDb250ZW50LiAgSG93ZXZlciwgYnkgc3VibWl0dGluZyBVc2VyLUdlbmVyYXRlZCBDb250ZW50IHRvIE9wZXJhLCBVc2VyIGdyYW50cyBPcGVyYSB0aGUgcmlnaHQgYW5kIGxpbWl0ZWQgbGljZW5zZSB0byB1c2UsIGNvcHksIGRpc3BsYXksIHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIGFkYXB0IHRoaXMgVXNlci1HZW5lcmF0ZWQgQ29udGVudCBmb3IgdGhlIHB1cnBvc2Ugb2YgY2Fycnlpbmcgb3V0IHRoZSBTZXJ2aWNlcy4KKworNS4JUFJPUFJJRVRBUlkgUklHSFRTLiAgVXNlciBhY2tub3dsZWRnZXMgYW5kIGFncmVlcyB0aGF0IHRoZSBTZXJ2aWNlcyBhbmQgdGhlIFNvZnR3YXJlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSBTb2Z0d2FyZeKAmXMgc2VxdWVuY2UsIHN0cnVjdHVyZSwgb3JnYW5pemF0aW9uLCBzb3VyY2UgY29kZSBhbmQgYXBwbGljYWJsZSBkb2N1bWVudGF0aW9uIGNvbnRhaW5zIHZhbHVhYmxlIHRyYWRlIHNlY3JldHMgYW5kIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBPcGVyYSBhbmQgaXRzIHN1cHBsaWVycyBhbmQgaXMgY29uc2lkZXJlZCBPcGVyYeKAmXMgY29uZmlkZW50aWFsIGluZm9ybWF0aW9uLiAgVGhlIFNvZnR3YXJlIGFuZCBTZXJ2aWNlcyBhcmUgbGljZW5zZWQgYW5kIG5vdCBzb2xkIHRvIFVzZXIsIGFuZCBubyB0aXRsZSBvciBvd25lcnNoaXAgdG8gc3VjaCBTb2Z0d2FyZSBvciBTZXJ2aWNlcyBvciB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBlbWJvZGllZCB0aGVyZWluIHBhc3NlcyBhcyBhIHJlc3VsdCBvZiB0aGlzIEFncmVlbWVudCBvciBhbnkgYWN0IHB1cnN1YW50IHRvIHRoaXMgQWdyZWVtZW50LiAgVGhlIFNvZnR3YXJlIGFuZCBTZXJ2aWNlcyBhbmQgYWxsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgdGhlcmVpbiBhcmUgdGhlIGV4Y2x1c2l2ZSBwcm9wZXJ0eSBvZiBPcGVyYSBhbmQgaXRzIHN1cHBsaWVycywgYW5kIGFsbCByaWdodHMgaW4gYW5kIHRvIHRoZSBTb2Z0d2FyZSBhbmQgU2VydmljZXMgbm90IGV4cHJlc3NseSBncmFudGVkIHRvIFVzZXIgaW4gdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkLiAgT3BlcmEgb3ducyBhbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgaG93ZXZlciBtYWRlLiAgTm90aGluZyBpbiB0aGlzIEFncmVlbWVudCB3aWxsIGJlIGRlZW1lZCB0byBncmFudCwgYnkgaW1wbGljYXRpb24sIGVzdG9wcGVsIG9yIG90aGVyd2lzZSwgYSBsaWNlbnNlIHVuZGVyIGFueSBleGlzdGluZyBvciBmdXR1cmUgcGF0ZW50cyBvZiBPcGVyYSwgZXhjZXB0IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IGZvciBVc2VyIHRvIHVzZSB0aGUgU29mdHdhcmUgb3IgU2VydmljZXMgYXMgZXhwcmVzc2x5IHBlcm1pdHRlZCB1bmRlciB0aGlzIEFncmVlbWVudC4KKworNi4JUFJJVkFDWS4gIE9wZXJhIHRha2VzIHRoZSBtYXR0ZXJzIG9mIHByb3RlY3Rpb24gYW5kIHNlY3VyaXR5IG9mIGl0cyB1c2VycyBpbmZvcm1hdGlvbiB2ZXJ5IHNlcmlvdXNseSBhbmQgd2lsbCB0cmVhdCBhbnkgYW5kIGFsbCBzdWNoIGluZm9ybWF0aW9uIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgT3BlcmEgUHJpdmFjeSBTdGF0ZW1lbnQsIHdoaWNoIGlzIGxvY2F0ZWQgYXQgd3d3Lm9wZXJhLmNvbS9wcml2YWN5LCBhbmQgaW5jb3Jwb3JhdGVkIGludG8gdGhpcyBBZ3JlZW1lbnQgYnkgdGhpcyByZWZlcmVuY2UuCisKKzcuCVRFUk0gQU5EIFRFUk1JTkFUSU9OLiAgVGhlIHRlcm0gb2YgdGhpcyBBZ3JlZW1lbnQgd2lsbCBjb21tZW5jZSB1cG9uIFVzZXLigJlzIGRvd25sb2FkIG9mIHRoZSBTb2Z0d2FyZSBhbmQvb3IgVXNlcuKAmXMgY29tbWVuY2VtZW50IG9mIHRoZSBTZXJ2aWNlcyBhbmQsIHVubGVzcyBlYXJsaWVyIHRlcm1pbmF0ZWQgYXMgcHJvdmlkZWQgaW4gdGhpcyBTZWN0aW9uIDcsIHdpbGwgY29udGludWUgaW4gcGVycGV0dWl0eS4gIFRoaXMgQWdyZWVtZW50IHdpbGwgaW1tZWRpYXRlbHkgdGVybWluYXRlIHVwb24gVXNlcuKAmXMgYnJlYWNoIG9mIHRoaXMgQWdyZWVtZW50LCB1bmxlc3Mgc3VjaCBicmVhY2ggaXMgY3VyYWJsZSBhbmQgaXMgYWN0dWFsbHkgYW5kIGltbWVkaWF0ZWx5IGN1cmVkIGJ5IFVzZXIgYWZ0ZXIgT3BlcmEgcHJvdmlkZXMgbm90aWNlIG9mIGJyZWFjaCB0byBVc2VyLiAgVXBvbiB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQsIFVzZXIgd2lsbCBkaXNjb250aW51ZSBhbGwgdXNlIG9mIHRoZSBTb2Z0d2FyZSBhbmQvb3IgU2VydmljZXMsIHByb21wdGx5IGRlc3Ryb3kgb3IgaGF2ZSBkZXN0cm95ZWQgdGhlIFNvZnR3YXJlIGFuZCBhbnkgY29waWVzIHRoZXJlb2YsIGFuZCwgdXBvbiByZXF1ZXN0IGJ5IE9wZXJhLCBjZXJ0aWZ5IGluIHdyaXRpbmcgdG8gT3BlcmEgdGhhdCBzdWNoIGRlc3RydWN0aW9uIGhhcyB0YWtlbiBwbGFjZS4gIFRoZXNlIHJlbWVkaWVzIGFyZSBjdW11bGF0aXZlIGFuZCBpbiBhZGRpdGlvbiB0byBhbnkgb3RoZXIgcmVtZWRpZXMgYXZhaWxhYmxlIHRvIE9wZXJhLiAgU2VjdGlvbnMgMSwgMywgNSwgNiwgNywgOCwgOSwgMTAsIDExLCBhbmQgMTIsIHNoYWxsIHN1cnZpdmUgc3VjaCB0ZXJtaW5hdGlvbi4KKworOC4JRElTQ0xBSU1FUiBPRiBXQVJSQU5USUVTLiAgVEhFIFNPRlRXQVJFIEFORCBTRVJWSUNFUyBBUkUgUFJPVklERUQg4oCcQVMgSVMs4oCdIEFORCBBTEwgV0FSUkFOVElFUyBBTkQgQ09ORElUSU9OUywgRVhQUkVTUywgSU1QTElFRCwgQU5EIFNUQVRVVE9SWSwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIFVTRSwgQUNDVVJBQ1kgT1IgQ09NUExFVEVORVNTLCBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgQU5EIFFVSUVUIEVOSk9ZTUVOVCwgT1IgT1RIRVIgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIEFSSVNJTkcgQlkgU1RBVFVURSwgT1BFUkFUSU9OIE9SIExBVywgQ09VUlNFIE9GIERFQUxJTkcsIFVTQUdFIE9GIFRSQURFIE9SIE9USEVSV0lTRSBBUkUgSEVSRUJZIERJU0NMQUlNRUQuICBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBMSU1JVEFUSU9OIE9SIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFNPIFRIRSBBQk9WRSBMSU1JVEFUSU9OUyBNQVkgTk9UIEFQUExZIFRPIFVTRVIuICBPUEVSQSBET0VTIE5PVCBXQVJSQU5UIFRIQVQgVEhFIFVTRSBPRiBUSEUgU09GVFdBUkUgT1IgU0VSVklDRVMgV0lMTCBCRSBVTklOVEVSUlVQVEVEIE9SIEVSUk9SIEZSRUUgT1IgVEhBVCBUSEUgU09GVFdBUkUgT1IgU0VSVklDRVMgRE8gTk9UIENPTlRBSU4gQU5ZIFZJUlVTRVMuICBUSElTIFdBUlJBTlRZIERJU0NMQUlNRVIgSVMgQSBGVU5EQU1FTlRBTCBFTEVNRU5UIE9GIFRIRSBCQVNJUyBPRiBUSEUgQkFSR0FJTiBCRVRXRUVOIFVTRVIgQU5EIE9QRVJBLiAgT1BFUkEgV09VTEQgTk9UIFBST1ZJREUgVEhFIFNPRlRXQVJFIE9SIFNFUlZJQ0VTIEFCU0VOVCBTVUNIIERJU0NMQUlNRVIuIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTIEFSRSBNQURFIEJZIEFOWSBTVVBQTElFUlMgVE8gT1BFUkEgVU5ERVIgT1IgQlkgVklSVFVFIE9GIFRISVMgQUdSRUVNRU5ULgorCis5LglMSU1JVEFUSU9OIE9GIExJQUJJTElUWS4gIElOIE5PIEVWRU5UIFNIQUxMIE9QRVJBIEJFIExJQUJMRSBGT1IgQU5ZIElOQ0lERU5UQUwsIFNQRUNJQUwsIENPTlNFUVVFTlRJQUwsIE9SIElORElSRUNUIERBTUFHRVMgT0YgQU5ZIEtJTkQgKElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gREFNQUdFUyBGT1IgSU5URVJSVVBUSU9OIE9GIEJVU0lORVNTLCBMT1NUIERBVEEsIExPU1QgUFJPRklUUywgT1IgVEhFIExJS0UpIFJFR0FSRExFU1MgT0YgVEhFIEZPUk0gT0YgQUNUSU9OLCBXSEVUSEVSIElOIENPTlRSQUNULCBUT1JUIChJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgUFJPRFVDVCBMSUFCSUxJVFksIE9SIE9USEVSIFRIRU9SWSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuICBJTiBOTyBFVkVOVCBXSUxMIFRIRSBDVU1VTEFUSVZFIExJQUJJTElUWSBPRiBPUEVSQSBBUklTSU5HIE9VVCBPRiBPUiBSRUxBVEVEIFRPIFRISVMgQUdSRUVNRU5UIEVYQ0VFRCBUSEUgQU1PVU5UIFBBSUQgVE8gT1BFUkEgSU4gUkVTUEVDVCBPRiBUSEUgU09GVFdBUkUgR0lWSU5HIFJJU0UgVE8gVEhFIENMQUlNIE9SIElGIE5PIEZFRVMgV0VSRSBQQUlEIFRIRU4gRklWRSBIVU5EUkVEIEVVUk9TLiAgU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRIRSBGT1JFR09JTkcgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gVVNFUi4gIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgV0lMTCBBUFBMWSBOT1RXSVRIU1RBTkRJTkcgVEhFIEZBSUxVUkUgT0YgRVNTRU5USUFMIFBVUlBPU0UgT0YgQU5ZIExJTUlURUQgUkVNRURZIFNFVCBGT1JUSCBIRVJFSU4uICBJTiBOTyBFVkVOVCBXSUxMIEFOWSBTVVBQTElFUiBUTyBPUEVSQSBIQVZFIEFOWSBMSUFCSUxJVFkgVE8gVVNFUiBVTkRFUiBUSElTIEFHUkVFTUVOVC4gIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgSVMgQSBGVU5EQU1FTlRBTCBFTEVNRU5UIE9GIFRIRSBCQVNJUyBPRiBUSEUgQkFSR0FJTiBCRVRXRUVOIFVTRVIgQU5EIE9QRVJBLiAgT1BFUkEgV09VTEQgTk9UIFBST1ZJREUgVEhFIFNPRlRXQVJFIFRPIFVTRVIgQUJTRU5UIFNVQ0ggTElNSVRBVElPTi4KKworMTAuCU5PVElDRVMuICBBbGwgbm90aWNlcyByZXF1aXJlZCB1bmRlciB0aGlzIEFncmVlbWVudCB3aWxsIGJlIGdpdmVuIGFzIGZvbGxvd3M6IChhKSBpbiB0aGUgY2FzZSBvZiBub3RpY2VzIHRvIE9wZXJhLCBieSBjZXJ0aWZpZWQgbWFpbCwgcmV0dXJuIHJlY2VpcHQgcmVxdWVzdGVkLCB0byB0aGUgZm9sbG93aW5nIGFkZHJlc3M6IENoaWVmIE9wZXJhdGluZyBPZmZpY2VyLCBPcGVyYSBTb2Z0d2FyZSBBU0EsIFdhbGRlbWFyIFRocmFuZXMgZ2F0ZSA5OCwgMDE3NSBPc2xvLCBOb3J3YXksIHN1Y2ggbm90aWNlIHRvIGJlIGRlZW1lZCBlZmZlY3RpdmUgdXBvbiByZWNlaXB0IGJ5IE9wZXJhOyBhbmQgKGIpIGluIHRoZSBjYXNlIG9mIG5vdGljZXMgdG8gVXNlciwgYnkgZW1haWwgdG8gdGhlIGVtYWlsIGFkZHJlc3MgdGhhdCBVc2VyIHByb3ZpZGVkIHRvIE9wZXJhIHByaW9yIHRvIGluaXRpYXRpbmcgdGhlIGRvd25sb2FkIG9mIHRoZSBTb2Z0d2FyZSBvciBzdGFydCBvZiB0aGUgU2VydmljZXMsIHN1Y2ggbm90aWNlIHRvIGJlIGRlZW1lZCBlZmZlY3RpdmUgdXBvbiB0aGUgZWFybGllciBvZiAoaSkgdHdlbnR5LWZvdXIgKDI0KSBob3VycyBhZnRlciBzZW5kaW5nLCBvciAoaWkpIFVzZXLigJlzIGFjdHVhbCByZWNlaXB0IG9mIGFueSBzdWNoIGUtbWFpbC4KKworMTEuCUlOSlVOQ1RJVkUgUkVMSUVGLiAgVXNlciBhY2tub3dsZWRnZXMgYW5kIGFncmVlcyB0aGF0IHRoZSBTb2Z0d2FyZSBhbmQgU2VydmljZXMgY29udGFpbiB2YWx1YWJsZSB0cmFkZSBzZWNyZXRzLCBjb25maWRlbnRpYWwgaW5mb3JtYXRpb24gYW5kIHByb3ByaWV0YXJ5IGluZm9ybWF0aW9uIG9mIE9wZXJhLiAgVXNlciBmdXJ0aGVyIGFja25vd2xlZGdlIHRoYXQgYW55IGFjdHVhbCBvciB0aHJlYXRlbmVkIGJyZWFjaCBvciB2aW9sYXRpb24gb2YgU2VjdGlvbiAyIG9yIFNlY3Rpb24gMyBvZiB0aGlzIEFncmVlbWVudCB3aWxsIGNvbnN0aXR1dGUgaW1tZWRpYXRlLCBpcnJlcGFyYWJsZSBoYXJtIHRvIE9wZXJhIGZvciB3aGljaCBtb25ldGFyeSBkYW1hZ2VzIHdvdWxkIGJlIGFuIGluYWRlcXVhdGUgcmVtZWR5LCBhbmQgdGhhdCBpbmp1bmN0aXZlIHJlbGllZiBpcyBhbiBhcHByb3ByaWF0ZSByZW1lZHkgZm9yIGFueSBzdWNoIGJyZWFjaCBvciB2aW9sYXRpb24uCisKKzEyLglHRU5FUkFMLiAgVXNlciBhY2tub3dsZWRnZXMgYW5kIGFncmVlcyB0aGF0IHRoZSBTb2Z0d2FyZSBtYXkgY29udGFpbiBjcnlwdG9ncmFwaGljIGZ1bmN0aW9uYWxpdHkgdGhlIGV4cG9ydCBvZiB3aGljaCBpcyByZXN0cmljdGVkIHVuZGVyIGFwcGxpY2FibGUgZXhwb3J0IGNvbnRyb2wgbGF3LiAgVXNlciB3aWxsIGNvbXBseSB3aXRoIGFsbCBhcHBsaWNhYmxlIGxhd3MgYW5kIHJlZ3VsYXRpb25zIGluIFVzZXLigJlzIGFjdGl2aXRpZXMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQuICBVc2VyIHdpbGwgbm90IGV4cG9ydCBvciByZS1leHBvcnQgdGhlIFNvZnR3YXJlIGluIHZpb2xhdGlvbiBvZiBzdWNoIGxhd3Mgb3IgcmVndWxhdGlvbnMgb3Igd2l0aG91dCBhbGwgcmVxdWlyZWQgbGljZW5zZXMgYW5kIGF1dGhvcml6YXRpb25zLiBUaGlzIEFncmVlbWVudCB3aWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIE5vcndheSB3aXRob3V0IGdpdmluZyBlZmZlY3QgdG8gYW55IGNvbmZsaWN0cyBvZiBsYXcgcHJpbmNpcGxlcyB0aGF0IG1heSByZXF1aXJlIHRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgbGF3cyBvZiBhIGRpZmZlcmVudCBjb3VudHJ5LiAgVGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGRvZXMgbm90IGFwcGx5IHRvIHRoaXMgQWdyZWVtZW50LiAgQWxsIGFjdGlvbnMgb3IgcHJvY2VlZGluZ3MgYXJpc2luZyB1bmRlciBvciByZWxhdGVkIHRvIHRoaXMgQWdyZWVtZW50IG11c3QgYmUgYnJvdWdodCBpbiB0aGUgT3NsbyBDaXR5IENvdXJ0LCBhbmQgZWFjaCBwYXJ0eSBoZXJlYnkgYWdyZWVzIHRvIGlycmV2b2NhYmx5IHN1Ym1pdCB0byB0aGUganVyaXNkaWN0aW9uIGFuZCB2ZW51ZSBvZiBhbnkgc3VjaCBjb3VydCBpbiBhbGwgc3VjaCBhY3Rpb25zIG9yIHByb2NlZWRpbmdzLiAgSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBkZXRlcm1pbmVkIGJ5IGEgY291cnQgb2YgY29tcGV0ZW50IGp1cmlzZGljdGlvbiB0byBiZSBpbnZhbGlkLCBpbGxlZ2FsLCBvciB1bmVuZm9yY2VhYmxlLCB0aGUgcmVtYWluaW5nIHByb3Zpc2lvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgbm90IGJlIGFmZmVjdGVkIG9yIGltcGFpcmVkIHRoZXJlYnkuICBVc2VyIG1heSBub3QgYXNzaWduIG9yIHRyYW5zZmVyIHRoaXMgQWdyZWVtZW50IHdpdGhvdXQgb2J0YWluaW5nIE9wZXJh4oCZcyBwcmlvciB3cml0dGVuIGNvbnNlbnQsIGFuZCBhbnkgcHVycG9ydGVkIGFzc2lnbm1lbnQgb3IgdHJhbnNmZXIgaW4gdmlvbGF0aW9uIG9mIHRoaXMgU2VjdGlvbiAxMiB3aWxsIGJlIG51bGwgYW5kIHZvaWQuIE9wZXJhIG1heSB1cGRhdGUgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50IGlmIGFuZCB3aGVuIFVzZXIgaW5zdGFsbCBhbmQgdXBkYXRlIG9yIHVwZ3JhZGUgdG8gdGhlIFNvZnR3YXJlIGFuZC9vciBTZXJ2aWNlcy4gIFVzZXIgd2lsbCBiZSByZXNwb25zaWJsZSBmb3IgYWxsIG9mIFVzZXLigJlzIGFjY2VzcyBhbmQgZGF0YSBjaGFyZ2VzIGZyb20gVXNlcuKAmXMgSW50ZXJuZXQgc2VydmljZSBwcm92aWRlciBvciBtb2JpbGUgb3BlcmF0b3IuIEFwcGxpY2F0aW9ucyBVc2VyIGRvd25sb2FkcyBvciB0aGF0IGFyZSBtYWRlIGF2YWlsYWJsZSB0byBVc2VyIG1heSBhdXRvbWF0aWNhbGx5IGNvbm5lY3QgdG8gdGhlIEludGVybmV0IHRvIHVwZGF0ZSBpbmZvcm1hdGlvbiBvciBwcm92aWRlIGEgc2VydmljZSB0byBVc2VyLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvT1BMIGIvbGljZW5zZXMvT1BMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhNTIwNTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9PUEwKQEAgLTAsMCArMSwxMjUgQEAKK09QRU4gUFVCTElDQVRJT04gTElDRU5TRSAgdjEuMCwgOCBKdW5lIDE5OTkKKworSS4gUkVRVUlSRU1FTlRTIE9OIEJPVEggVU5NT0RJRklFRCBBTkQgTU9ESUZJRUQgVkVSU0lPTlMKKworVGhlIE9wZW4gUHVibGljYXRpb24gd29ya3MgbWF5IGJlIHJlcHJvZHVjZWQgYW5kIGRpc3RyaWJ1dGVkIGluIHdob2xlIG9yIGluIHBhcgordCwgaW4gYW55IG1lZGl1bSBwaHlzaWNhbCBvciBlbGVjdHJvbmljLCBwcm92aWRlZCB0aGF0IHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2VucworZSBhcmUgYWRoZXJlZCB0bywgYW5kIHRoYXQgdGhpcyBsaWNlbnNlIG9yIGFuIGluY29ycG9yYXRpb24gb2YgaXQgYnkgcmVmZXJlbmNlIAorKHdpdGggYW55IG9wdGlvbnMgZWxlY3RlZCBieSB0aGUgYXV0aG9yKHMpIGFuZC9vciBwdWJsaXNoZXIpIGlzIGRpc3BsYXllZCBpbiB0aAorZSByZXByb2R1Y3Rpb24uCisKK1Byb3BlciBmb3JtIGZvciBhbiBpbmNvcnBvcmF0aW9uIGJ5IHJlZmVyZW5jZSBpcyBhcyBmb2xsb3dzOgorCitDb3B5cmlnaHQgKGMpIDx5ZWFyPiBieSA8YXV0aG9yJ3MgbmFtZSBvciBkZXNpZ25lZT4uICBUaGlzIG1hdGVyaWFsIG1heSBiZSBkaXN0CityaWJ1dGVkIG9ubHkgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgc2V0IGZvcnRoIGluIHRoZSBPcGVuIFB1YmxpY2F0Citpb24gTGljZW5zZSwgdlguWSBvciBsYXRlciAodGhlIGxhdGVzdCB2ZXJzaW9uIGlzIHByZXNlbnRseSBhdmFpbGFibGUgYXQgaHR0cDovCisvd3d3Lm9wZW5jb250ZW50Lm9yZy9vcGVucHViLykuCisKK1RoZSByZWZlcmVuY2UgbXVzdCBiZSBpbW1lZGlhdGVseSBmb2xsb3dlZCB3aXRoIGFueSBvcHRpb25zIGVsZWN0ZWQgYnkgdGhlIGF1dGgKK29yKHMpIGFuZC9vciBwdWJsaXNoZXIgb2YgdGhlIGRvY3VtZW50IChzZWUgc2VjdGlvbiBWSSkuCisKK0NvbW1lcmNpYWwgcmVkaXN0cmlidXRpb24gb2YgT3BlbiBQdWJsaWNhdGlvbi1saWNlbnNlZCBtYXRlcmlhbCBpcyBwZXJtaXR0ZWQuCisKK0FueSBwdWJsaWNhdGlvbiBpbiBzdGFuZGFyZCAocGFwZXIpIGJvb2sgZm9ybSBzaGFsbCByZXF1aXJlIHRoZSBjaXRhdGlvbiBvZiB0aGUKKyBvcmlnaW5hbCBwdWJsaXNoZXIgYW5kIGF1dGhvci4gVGhlIHB1Ymxpc2hlciBhbmQgYXV0aG9yJ3MgbmFtZXMgc2hhbGwgYXBwZWFyIG8KK24gYWxsIG91dGVyIHN1cmZhY2VzIG9mIHRoZSBib29rLiBPbiBhbGwgb3V0ZXIgc3VyZmFjZXMgb2YgdGhlIGJvb2sgdGhlIG9yaWdpbmEKK2wgcHVibGlzaGVyJ3MgbmFtZSBzaGFsbCBiZSBhcyBsYXJnZSBhcyB0aGUgdGl0bGUgb2YgdGhlIHdvcmsgYW5kIGNpdGVkIGFzIHBvc3MKK2Vzc2l2ZSB3aXRoIHJlc3BlY3QgdG8gdGhlIHRpdGxlLgorCisKK0lJLiBDT1BZUklHSFQKKworVGhlIGNvcHlyaWdodCB0byBlYWNoIE9wZW4gUHVibGljYXRpb24gaXMgb3duZWQgYnkgaXRzIGF1dGhvcihzKSBvciBkZXNpZ25lZS4KKworSUlJLiBTQ09QRSBPRiBMSUNFTlNFCisKK1RoZSBmb2xsb3dpbmcgbGljZW5zZSB0ZXJtcyBhcHBseSB0byBhbGwgT3BlbiBQdWJsaWNhdGlvbiB3b3JrcywgdW5sZXNzIG90aGVyd2kKK3NlIGV4cGxpY2l0bHkgc3RhdGVkIGluIHRoZSBkb2N1bWVudC4KKworTWVyZSBhZ2dyZWdhdGlvbiBvZiBPcGVuIFB1YmxpY2F0aW9uIHdvcmtzIG9yIGEgcG9ydGlvbiBvZiBhbiBPcGVuIFB1YmxpY2F0aW9uIAord29yayB3aXRoIG90aGVyIHdvcmtzIG9yIHByb2dyYW1zIG9uIHRoZSBzYW1lIG1lZGlhIHNoYWxsIG5vdCBjYXVzZSB0aGlzIGxpY2VucworZSB0byBhcHBseSB0byB0aG9zZSBvdGhlciB3b3Jrcy4gVGhlIGFnZ3JlZ2F0ZSB3b3JrIHNoYWxsIGNvbnRhaW4gYSBub3RpY2Ugc3BlYworaWZ5aW5nIHRoZSBpbmNsdXNpb24gb2YgdGhlIE9wZW4gUHVibGljYXRpb24gbWF0ZXJpYWwgYW5kIGFwcHJvcHJpYXRlIGNvcHlyaWdodAorIG5vdGljZS4KKworU0VWRVJBQklMSVRZLiBJZiBhbnkgcGFydCBvZiB0aGlzIGxpY2Vuc2UgaXMgZm91bmQgdG8gYmUgdW5lbmZvcmNlYWJsZSBpbiBhbnkgagordXJpc2RpY3Rpb24sIHRoZSByZW1haW5pbmcgcG9ydGlvbnMgb2YgdGhlIGxpY2Vuc2UgcmVtYWluIGluIGZvcmNlLgorCitOTyBXQVJSQU5UWS4gT3BlbiBQdWJsaWNhdGlvbiB3b3JrcyBhcmUgbGljZW5zZWQgYW5kIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCB3CithcnJhbnR5IG9mIGFueSBraW5kLCBleHByZXNzIG9yIGltcGxpZWQsIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCB0aGUgaW1wCitsaWVkIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRhYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZSBvciBhIHdhCitycmFudHkgb2Ygbm9uLWluZnJpbmdlbWVudC4KKworSVYuIFJFUVVJUkVNRU5UUyBPTiBNT0RJRklFRCBXT1JLUworCitBbGwgbW9kaWZpZWQgdmVyc2lvbnMgb2YgZG9jdW1lbnRzIGNvdmVyZWQgYnkgdGhpcyBsaWNlbnNlLCBpbmNsdWRpbmcgdHJhbnNsYXRpCitvbnMsIGFudGhvbG9naWVzLCBjb21waWxhdGlvbnMgYW5kIHBhcnRpYWwgZG9jdW1lbnRzLCBtdXN0IG1lZXQgdGhlIGZvbGxvd2luZyByCitlcXVpcmVtZW50czoKKworMSkgVGhlIG1vZGlmaWVkIHZlcnNpb24gbXVzdCBiZSBsYWJlbGVkIGFzIHN1Y2guCisyKSBUaGUgcGVyc29uIG1ha2luZyB0aGUgbW9kaWZpY2F0aW9ucyBtdXN0IGJlIGlkZW50aWZpZWQgYW5kIHRoZSBtb2RpZmljYXRpb25zCisgZGF0ZWQuCiszKSBBY2tub3dsZWRnZW1lbnQgb2YgdGhlIG9yaWdpbmFsIGF1dGhvciBhbmQgcHVibGlzaGVyIGlmIGFwcGxpY2FibGUgbXVzdCBiZSByCitldGFpbmVkIGFjY29yZGluZyB0byBub3JtYWwgYWNhZGVtaWMgY2l0YXRpb24gcHJhY3RpY2VzLgorNCkgVGhlIGxvY2F0aW9uIG9mIHRoZSBvcmlnaW5hbCB1bm1vZGlmaWVkIGRvY3VtZW50IG11c3QgYmUgaWRlbnRpZmllZC4KKzUpIFRoZSBvcmlnaW5hbCBhdXRob3IncyAob3IgYXV0aG9ycycpIG5hbWUocykgbWF5IG5vdCBiZSB1c2VkIHRvIGFzc2VydCBvciBpbXAKK2x5IGVuZG9yc2VtZW50IG9mIHRoZSByZXN1bHRpbmcgZG9jdW1lbnQgd2l0aG91dCB0aGUgb3JpZ2luYWwgYXV0aG9yJ3MgKG9yIGF1dGgKK29ycycpIHBlcm1pc3Npb24uCisKK1YuIEdPT0QtUFJBQ1RJQ0UgUkVDT01NRU5EQVRJT05TIAorCitJbiBhZGRpdGlvbiB0byB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgbGljZW5zZSwgaXQgaXMgcmVxdWVzdGVkIGZyb20gYW5kIHN0cm9uCitnbHkgcmVjb21tZW5kZWQgb2YgcmVkaXN0cmlidXRvcnMgdGhhdDoKKworMSkgSWYgeW91IGFyZSBkaXN0cmlidXRpbmcgT3BlbiBQdWJsaWNhdGlvbiB3b3JrcyBvbiBoYXJkY29weSBvciBDRC1ST00sIHlvdSBwcgorb3ZpZGUgZW1haWwgbm90aWZpY2F0aW9uIHRvIHRoZSBhdXRob3JzIG9mIHlvdXIgaW50ZW50IHRvIHJlZGlzdHJpYnV0ZSBhdCBsZWFzdAorIHRoaXJ0eSBkYXlzIGJlZm9yZSB5b3VyIG1hbnVzY3JpcHQgb3IgbWVkaWEgZnJlZXplLCB0byBnaXZlIHRoZSBhdXRob3JzIHRpbWUgdAorbyBwcm92aWRlIHVwZGF0ZWQgZG9jdW1lbnRzLiBUaGlzIG5vdGlmaWNhdGlvbiBzaG91bGQgZGVzY3JpYmUgbW9kaWZpY2F0aW9ucywgaQorZiBhbnksIG1hZGUgdG8gdGhlIGRvY3VtZW50LgorCisyKSBBbGwgc3Vic3RhbnRpdmUgbW9kaWZpY2F0aW9ucyAoaW5jbHVkaW5nIGRlbGV0aW9ucykgYmUgZWl0aGVyIGNsZWFybHkgbWFya2VkCisgdXAgaW4gdGhlIGRvY3VtZW50IG9yIGVsc2UgZGVzY3JpYmVkIGluIGFuIGF0dGFjaG1lbnQgdG8gdGhlIGRvY3VtZW50LgorCitGaW5hbGx5LCB3aGlsZSBpdCBpcyBub3QgbWFuZGF0b3J5IHVuZGVyIHRoaXMgbGljZW5zZSwgaXQgaXMgY29uc2lkZXJlZCBnb29kIGZvCitybSB0byBvZmZlciBhIGZyZWUgY29weSBvZiBhbnkgaGFyZGNvcHkgYW5kIENELVJPTSBleHByZXNzaW9uIG9mIGFuIE9wZW4gUHVibGljCithdGlvbi1saWNlbnNlZCB3b3JrIHRvIGl0cyBhdXRob3IocykuCisKK1ZJLiBMSUNFTlNFIE9QVElPTlMKKworVGhlIGF1dGhvcihzKSBhbmQvb3IgcHVibGlzaGVyIG9mIGFuIE9wZW4gUHVibGljYXRpb24tbGljZW5zZWQgZG9jdW1lbnQgbWF5IGVsZQorY3QgY2VydGFpbiBvcHRpb25zIGJ5IGFwcGVuZGluZyBsYW5ndWFnZSB0byB0aGUgcmVmZXJlbmNlIHRvIG9yIGNvcHkgb2YgdGhlIGxpYworZW5zZS4gVGhlc2Ugb3B0aW9ucyBhcmUgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBsaWNlbnNlIGluc3RhbmNlIGFuZCBtdXN0IGJlIGluYworbHVkZWQgd2l0aCB0aGUgbGljZW5zZSAob3IgaXRzIGluY29ycG9yYXRpb24gYnkgcmVmZXJlbmNlKSBpbiBkZXJpdmVkIHdvcmtzLgorCitBLiBUbyBwcm9oaWJpdCBkaXN0cmlidXRpb24gb2Ygc3Vic3RhbnRpdmVseSBtb2RpZmllZCB2ZXJzaW9ucyB3aXRob3V0IHRoZSBleHBsCitpY2l0IHBlcm1pc3Npb24gb2YgdGhlIGF1dGhvcihzKS4gIlN1YnN0YW50aXZlIG1vZGlmaWNhdGlvbiIgaXMgZGVmaW5lZCBhcyBhIGNoCithbmdlIHRvIHRoZSBzZW1hbnRpYyBjb250ZW50IG9mIHRoZSBkb2N1bWVudCwgYW5kIGV4Y2x1ZGVzIG1lcmUgY2hhbmdlcyBpbiBmb3JtCithdCBvciB0eXBvZ3JhcGhpY2FsIGNvcnJlY3Rpb25zLgorCitUbyBhY2NvbXBsaXNoIHRoaXMsIGFkZCB0aGUgcGhyYXNlIGBEaXN0cmlidXRpb24gb2Ygc3Vic3RhbnRpdmVseSBtb2RpZmllZCB2ZXJzCitpb25zIG9mIHRoaXMgZG9jdW1lbnQgaXMgcHJvaGliaXRlZCB3aXRob3V0IHRoZSBleHBsaWNpdCBwZXJtaXNzaW9uIG9mIHRoZSBjb3B5CityaWdodCBob2xkZXIuJyB0byB0aGUgbGljZW5zZSByZWZlcmVuY2Ugb3IgY29weS4KKworQi4gVG8gcHJvaGliaXQgYW55IHB1YmxpY2F0aW9uIG9mIHRoaXMgd29yayBvciBkZXJpdmF0aXZlIHdvcmtzIGluIHdob2xlIG9yIGluIAorcGFydCBpbiBzdGFuZGFyZCAocGFwZXIpIGJvb2sgZm9ybSBmb3IgY29tbWVyY2lhbCBwdXJwb3NlcyBpcyBwcm9oaWJpdGVkIHVubGVzcworIHByaW9yIHBlcm1pc3Npb24gaXMgb2J0YWluZWQgZnJvbSB0aGUgY29weXJpZ2h0IGhvbGRlci4KKworVG8gYWNjb21wbGlzaCB0aGlzLCBhZGQgdGhlIHBocmFzZSAnRGlzdHJpYnV0aW9uIG9mIHRoZSB3b3JrIG9yIGRlcml2YXRpdmUgb2YgdAoraGUgd29yayBpbiBhbnkgc3RhbmRhcmQgKHBhcGVyKSBib29rIGZvcm0gaXMgcHJvaGliaXRlZCB1bmxlc3MgcHJpb3IgcGVybWlzc2lvbgorIGlzIG9idGFpbmVkIGZyb20gdGhlIGNvcHlyaWdodCBob2xkZXIuJyB0byB0aGUgbGljZW5zZSByZWZlcmVuY2Ugb3IgY29weS4KKworT1BFTiBQVUJMSUNBVElPTiBQT0xJQ1kgQVBQRU5ESVg6CisKKyhUaGlzIGlzIG5vdCBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIGxpY2Vuc2UuKQorCitPcGVuIFB1YmxpY2F0aW9uIHdvcmtzIGFyZSBhdmFpbGFibGUgaW4gc291cmNlIGZvcm1hdCB2aWEgdGhlIE9wZW4gUHVibGljYXRpb24gCitob21lIHBhZ2UgYXQgaHR0cDovL3dvcmtzLm9wZW5jb250ZW50Lm9yZy8uCisKK09wZW4gUHVibGljYXRpb24gYXV0aG9ycyB3aG8gd2FudCB0byBpbmNsdWRlIHRoZWlyIG93biBsaWNlbnNlIG9uIE9wZW4gUHVibGljYXQKK2lvbiB3b3JrcyBtYXkgZG8gc28sIGFzIGxvbmcgYXMgdGhlaXIgdGVybXMgYXJlIG5vdCBtb3JlIHJlc3RyaWN0aXZlIHRoYW4gdGhlIE8KK3BlbiBQdWJsaWNhdGlvbiBsaWNlbnNlLgorCitJZiB5b3UgaGF2ZSBxdWVzdGlvbnMgYWJvdXQgdGhlIE9wZW4gUHVibGljYXRpb24gTGljZW5zZSwgcGxlYXNlIGNvbnRhY3QgVEJELCBhCituZC9vciB0aGUgT3BlbiBQdWJsaWNhdGlvbiBBdXRob3JzJyBMaXN0IGF0IG9wYWxAb3BlbmNvbnRlbnQub3JnLCB2aWEgZW1haWwuCisKKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvT1NJUklTIGIvbGljZW5zZXMvT1NJUklTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZTcwNDIKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9PU0lSSVMKQEAgLTAsMCArMSw3MSBAQAorCisKKyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorIAorICBPc2lyaXMgU29mdHdhcmUgTGljZW5zZSwgVmVyc2lvbiAxLjEKKyAKKyAgQ29weXJpZ2h0IChjKSAyMDAyIFRoZSBTaG1vbyBHcm91cC4KKyAKKyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICBhcmUgbWV0OgorIAorICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgMi4gVGhpcyBzb2Z0d2FyZSBjYW4gYmUgdXNlZCwgbW9kaWZpZWQsIGFuZCBkaXN0cmlidXRlZCwgYnV0IG5vdCBzb2xkLgorIAorICAzLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICAgICBkaXN0cmlidXRpb24uCisgCisgIDQuIFRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIGluY2x1ZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uLAorICAgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorICAgICAKKyAgICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCisgICAgICAgICBUaGUgU2htb28gR3JvdXAgKGh0dHA6Ly93d3cuc2htb28uY29tICkuIgorICAgICAgICAgCisgICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKKyAgICAgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KKyAKKyAgNS4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIm9zaXJpcyIsCisgICAgIG5vciBtYXkgIm9zaXJpcyIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICAgICBwZXJtaXNzaW9uIG9mIHRoZSB0aGUgc2htb28gZ3JvdXAgKCBpbmZvQHNobW9vLmNvbSApLgorIAorICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECisgIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgU0hNT08gR1JPVVAgT1IgSVRTCisgIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyAgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICBTVUNIIERBTUFHRS4KKyAgCisgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgCisgIFRoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55CisgIGluZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgVGhlIFNobW9vIEdyb3VwLiAgRm9yIG1vcmUKKyAgaW5mb3JtYXRpb24gb24gVFNHIGFjdGl2aXRpZXMgYW5kIGNvbnRyaWJ1dGlvbnMsIHBsZWFzZSBzZWU6CisgIAorICAgICAgaHR0cDovL3d3dy5zaG1vby5jb20KKyAKKyAgQSBzbWFsbCBwb3J0aW9uIG9mIHRoaXMgc29mdHdhcmUsIHNwZWNpZmljYWxseSwgdGhlIGJhc2UgNjQKKyAgZW5jb2RpbmcvZGVjb2Rpbmcgcm91dGluZXMgYXJlIHRha2VuIGZyb20gdGhlIHRoZSBhcGFjaGUgd2ViCisgIHNlcnZlcjoKKworICAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUKKyAgICAgIEFwYWNoZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChodHRwOi8vd3d3LmFwYWNoZS5vcmcvKS4KKyAgICAgIAorICBJbiBhZGRpdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGZvciBnZGJtLCB0aGUgR05VIGV4dGVuc2lvbiB0bworICBkYm0gaXMgaW5jbHVkZWQgd2l0aCB0aGlzIHZlcnNpb24gb2Ygb3NpcmlzLiAgVGhlIEdOVSBwdWJsaWMKKyAgbGljZW5zZSBpcyBpbmNsdWRlZCBidXQgZG9lcyBub3QgYXBwbHkgdG8gYW55IG9mIHRoZSBvc2lyaXMKKyAgc291cmNlIGNvZGUuCisgIAorICAKKyAKKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvT1NMLTEuMSBiL2xpY2Vuc2VzL09TTC0xLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRmYzVmOQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL09TTC0xLjEKQEAgLTAsMCArMSwxNjYgQEAKKworCQkJVGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZQorCQkJdi4gMS4xCisKK1RoaXMgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlICh0aGUgIkxpY2Vuc2UiKSBhcHBsaWVzIHRvIGFueSBvcmlnaW5hbCB3b3JrIG9mCithdXRob3JzaGlwICh0aGUgIk9yaWdpbmFsIFdvcmsiKSB3aG9zZSBvd25lciAodGhlICJMaWNlbnNvciIpIGhhcyBwbGFjZWQgdGhlCitmb2xsb3dpbmcgbm90aWNlIGltbWVkaWF0ZWx5IGZvbGxvd2luZyB0aGUgY29weXJpZ2h0IG5vdGljZSBmb3IgdGhlIE9yaWdpbmFsCitXb3JrOgorCisJTGljZW5zZWQgdW5kZXIgdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSB2ZXJzaW9uIDEuMQorCisKKzEpIEdyYW50IG9mIENvcHlyaWdodCBMaWNlbnNlLiBMaWNlbnNvciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsCityb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCwgbm9uLXN1YmxpY2Vuc2VhYmxlIGxpY2Vuc2UgdG8gZG8gdGhlCitmb2xsb3dpbmc6CisKKyAgYSkgdG8gcmVwcm9kdWNlIHRoZSBPcmlnaW5hbCBXb3JrIGluIGNvcGllczsKKworICBiKSB0byBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3MgKCJEZXJpdmF0aXZlIFdvcmtzIikgYmFzZWQgdXBvbiB0aGUKKyAgICAgT3JpZ2luYWwgV29yazsKKworICBjKSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgT3JpZ2luYWwgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0bworICAgICB0aGUgcHVibGljLCB3aXRoIHRoZSBwcm92aXNvIHRoYXQgY29waWVzIG9mIE9yaWdpbmFsIFdvcmsgb3IKKyAgICAgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBkaXN0cmlidXRlIHNoYWxsIGJlIGxpY2Vuc2VkIHVuZGVyIHRoZQorICAgICBPcGVuIFNvZnR3YXJlIExpY2Vuc2U7CisKKyAgZCkgdG8gcGVyZm9ybSB0aGUgT3JpZ2luYWwgV29yayBwdWJsaWNseTsgYW5kCisKKyAgZSkgdG8gZGlzcGxheSB0aGUgT3JpZ2luYWwgV29yayBwdWJsaWNseS4KKworMikgR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwKK3JveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsLCBub24tc3VibGljZW5zZWFibGUgbGljZW5zZSwgdW5kZXIKK3BhdGVudCBjbGFpbXMgb3duZWQgb3IgY29udHJvbGxlZCBieSB0aGUgTGljZW5zb3IgdGhhdCBhcmUgZW1ib2RpZWQgaW4gdGhlCitPcmlnaW5hbCBXb3JrIGFzIGZ1cm5pc2hlZCBieSB0aGUgTGljZW5zb3IgKCJMaWNlbnNlZCBDbGFpbXMiKSB0byBtYWtlLCB1c2UsCitzZWxsIGFuZCBvZmZlciBmb3Igc2FsZSB0aGUgT3JpZ2luYWwgV29yay4gTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYQord29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwsIG5vbi1zdWJsaWNlbnNlYWJsZSBsaWNlbnNlCit1bmRlciB0aGUgTGljZW5zZWQgQ2xhaW1zIHRvIG1ha2UsIHVzZSwgc2VsbCBhbmQgb2ZmZXIgZm9yIHNhbGUgRGVyaXZhdGl2ZSBXb3Jrcy4KKworMykgR3JhbnQgb2YgU291cmNlIENvZGUgTGljZW5zZS4gVGhlIHRlcm0gIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgcHJlZmVycmVkCitmb3JtIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCBhbmQgYWxsIGF2YWlsYWJsZQorZG9jdW1lbnRhdGlvbiBkZXNjcmliaW5nIGhvdyB0byBtb2RpZnkgdGhlIE9yaWdpbmFsIFdvcmsuIExpY2Vuc29yIGhlcmVieQorYWdyZWVzIHRvIHByb3ZpZGUgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbAorV29yayBhbG9uZyB3aXRoIGVhY2ggY29weSBvZiB0aGUgT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIGRpc3RyaWJ1dGVzLgorTGljZW5zb3IgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHNhdGlzZnkgdGhpcyBvYmxpZ2F0aW9uIGJ5IHBsYWNpbmcgYQorbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBpbiBhbiBpbmZvcm1hdGlvbiByZXBvc2l0b3J5IHJlYXNvbmFibHkKK2NhbGN1bGF0ZWQgdG8gcGVybWl0IGluZXhwZW5zaXZlIGFuZCBjb252ZW5pZW50IGFjY2VzcyBieSBZb3UgZm9yIGFzIGxvbmcgYXMKKyBMaWNlbnNvciBjb250aW51ZXMgdG8gZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgV29yaywgYW5kIGJ5IHB1Ymxpc2hpbmcgdGhlCithZGRyZXNzIG9mIHRoYXQgaW5mb3JtYXRpb24gcmVwb3NpdG9yeSBpbiBhIG5vdGljZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlCitjb3B5cmlnaHQgbm90aWNlIHRoYXQgYXBwbGllcyB0byB0aGUgT3JpZ2luYWwgV29yay4KKworCis0KSBFeGNsdXNpb25zIEZyb20gTGljZW5zZSBHcmFudC4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgZGVlbWVkIHRvCitncmFudCBhbnkgcmlnaHRzIHRvIHRyYWRlbWFya3MsIGNvcHlyaWdodHMsIHBhdGVudHMsIHRyYWRlIHNlY3JldHMgb3IgYW55CitvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgTGljZW5zb3IgZXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaGVyZWluLiBObworcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZCB0byBtYWtlLCB1c2UsIHNlbGwgb3Igb2ZmZXIgdG8gc2VsbCBlbWJvZGltZW50cyBvZgorYW55IHBhdGVudCBjbGFpbXMgb3RoZXIgdGhhbiB0aGUgTGljZW5zZWQgQ2xhaW1zIGRlZmluZWQgaW4gU2VjdGlvbiAyLiBObworcmlnaHQgaXMgZ3JhbnRlZCB0byB0aGUgdHJhZGVtYXJrcyBvZiBMaWNlbnNvciBldmVuIGlmIHN1Y2ggbWFya3MgYXJlIGluY2x1ZGVkCitpbiB0aGUgT3JpZ2luYWwgV29yay4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgaW50ZXJwcmV0ZWQgdG8gcHJvaGliaXQKK0xpY2Vuc29yIGZyb20gbGljZW5zaW5nIHVuZGVyIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRoaXMgTGljZW5zZSBhbnkgT3JpZ2luYWwKK1dvcmsgdGhhdCBMaWNlbnNvciBvdGhlcndpc2Ugd291bGQgaGF2ZSBhIHJpZ2h0IHRvIGxpY2Vuc2UuCisKKzUpIEV4dGVybmFsIERlcGxveW1lbnQuIFRoZSB0ZXJtICJFeHRlcm5hbCBEZXBsb3ltZW50IiBtZWFucyB0aGUgdXNlIG9yCitkaXN0cmlidXRpb24gb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyBpbiBhbnkgd2F5IHN1Y2ggdGhhdCB0aGUKK09yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyBtYXkgYmUgdXNlZCBieSBhbnlvbmUgb3RoZXIgdGhhbiBZb3UsCit3aGV0aGVyIHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgYXJlIGRpc3RyaWJ1dGVkIHRvIHRob3NlIHBlcnNvbnMKK29yIG1hZGUgYXZhaWxhYmxlIGFzIGFuIGFwcGxpY2F0aW9uIGludGVuZGVkIGZvciB1c2Ugb3ZlciBhIGNvbXB1dGVyIG5ldHdvcmsuCitBcyBhbiBleHByZXNzIGNvbmRpdGlvbiBmb3IgdGhlIGdyYW50cyBvZiBsaWNlbnNlIGhlcmV1bmRlciwgWW91IGFncmVlIHRoYXQKK2FueSBFeHRlcm5hbCBEZXBsb3ltZW50IGJ5IFlvdSBvZiBhIERlcml2YXRpdmUgV29yayBzaGFsbCBiZSBkZWVtZWQgYQorZGlzdHJpYnV0aW9uIGFuZCBzaGFsbCBiZSBsaWNlbnNlZCB0byBhbGwgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYXMKK3ByZXNjcmliZWQgaW4gc2VjdGlvbiAxKGMpIGhlcmVpbi4KKworNikgQXR0cmlidXRpb24gUmlnaHRzLiBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgQ29kZSBvZiBhbnkgRGVyaXZhdGl2ZQorV29ya3MgdGhhdCBZb3UgY3JlYXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQgb3IgdHJhZGVtYXJrIG5vdGljZXMgZnJvbSB0aGUKK1NvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrLCBhcyB3ZWxsIGFzIGFueSBub3RpY2VzIG9mIGxpY2Vuc2luZyBhbmQgYW55CitkZXNjcmlwdGl2ZSB0ZXh0IGlkZW50aWZpZWQgdGhlcmVpbiBhcyBhbiAiQXR0cmlidXRpb24gTm90aWNlLiIgWW91IG11c3QgY2F1c2UKK3RoZSBTb3VyY2UgQ29kZSBmb3IgYW55IERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgY3JlYXRlIHRvIGNhcnJ5IGEgcHJvbWluZW50CitBdHRyaWJ1dGlvbiBOb3RpY2UgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIGluZm9ybSByZWNpcGllbnRzIHRoYXQgWW91IGhhdmUKK21vZGlmaWVkIHRoZSBPcmlnaW5hbCBXb3JrLgorCis3KSBXYXJyYW50eSBhbmQgRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gTGljZW5zb3Igd2FycmFudHMgdGhhdCB0aGUgY29weXJpZ2h0CitpbiBhbmQgdG8gdGhlIE9yaWdpbmFsIFdvcmsgaXMgb3duZWQgYnkgdGhlIExpY2Vuc29yIG9yIHRoYXQgdGhlIE9yaWdpbmFsIFdvcmsKK2lzIGRpc3RyaWJ1dGVkIGJ5IExpY2Vuc29yIHVuZGVyIGEgdmFsaWQgY3VycmVudCBsaWNlbnNlIGZyb20gdGhlIGNvcHlyaWdodAorb3duZXIuIEV4Y2VwdCBhcyBleHByZXNzbHkgc3RhdGVkIGluIHRoZSBpbW1lZGlhdGVseSBwcm9jZWVkaW5nIHNlbnRlbmNlLCB0aGUKK09yaWdpbmFsIFdvcmsgaXMgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlIG9uIGFuICJBUyBJUyIgQkFTSVMgYW5kIFdJVEhPVVQKK1dBUlJBTlRZLCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgdGhlCit3YXJyYW50aWVzIG9mIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBPRiBUSEUgT1JJR0lOQUwgV09SSyBJUyBXSVRIIFlPVS4KK1RoaXMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBjb25zdGl0dXRlcyBhbiBlc3NlbnRpYWwgcGFydCBvZiB0aGlzIExpY2Vuc2UuIE5vCitsaWNlbnNlIHRvIE9yaWdpbmFsIFdvcmsgaXMgZ3JhbnRlZCBoZXJldW5kZXIgZXhjZXB0IHVuZGVyIHRoaXMgZGlzY2xhaW1lci4KKworOCkgTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIFVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwKK3doZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLCBzaGFsbCB0aGUKK0xpY2Vuc29yIGJlIGxpYWJsZSB0byBhbnkgcGVyc29uIGZvciBhbnkgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCwKK29yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYSByZXN1bHQgb2YgdGhpcyBMaWNlbnNlCitvciB0aGUgdXNlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBkYW1hZ2VzIGZvcgorbG9zcyBvZiBnb29kd2lsbCwgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZAorYWxsIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMuIFRoaXMgbGltaXRhdGlvbiBvZiBsaWFiaWxpdHkgc2hhbGwgbm90CithcHBseSB0byBsaWFiaWxpdHkgZm9yIGRlYXRoIG9yIHBlcnNvbmFsIGluanVyeSByZXN1bHRpbmcgZnJvbSBMaWNlbnNvcidzCituZWdsaWdlbmNlIHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcgcHJvaGliaXRzIHN1Y2ggbGltaXRhdGlvbi4gU29tZQoranVyaXNkaWN0aW9ucyBkbyBub3QgYWxsb3cgdGhlIGV4Y2x1c2lvbiBvciBsaW1pdGF0aW9uIG9mIGluY2lkZW50YWwgb3IKK2NvbnNlcXVlbnRpYWwgZGFtYWdlcywgc28gdGhpcyBleGNsdXNpb24gYW5kIGxpbWl0YXRpb24gbWF5IG5vdCBhcHBseSB0byBZb3UuCisKKworOSkgQWNjZXB0YW5jZSBhbmQgVGVybWluYXRpb24uIElmIFlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgT3JpZ2luYWwgV29yaworb3IgYSBEZXJpdmF0aXZlIFdvcmssIFlvdSBtdXN0IG1ha2UgYSByZWFzb25hYmxlIGVmZm9ydCB1bmRlciB0aGUgY2lyY3Vtc3RhbmNlcwordG8gb2J0YWluIHRoZSBleHByZXNzIGFuZCB2b2xpdGlvbmFsIGFzc2VudCBvZiByZWNpcGllbnRzIHRvIHRoZSB0ZXJtcyBvZiB0aGlzCitMaWNlbnNlLiBOb3RoaW5nIGVsc2UgYnV0IHRoaXMgTGljZW5zZSAob3IgYW5vdGhlciB3cml0dGVuIGFncmVlbWVudCBiZXR3ZWVuCitMaWNlbnNvciBhbmQgWW91KSBncmFudHMgWW91IHBlcm1pc3Npb24gdG8gY3JlYXRlIERlcml2YXRpdmUgV29ya3MgYmFzZWQgdXBvbgordGhlIE9yaWdpbmFsIFdvcmsgb3IgdG8gZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCBpbiBTZWN0aW9ucyAxIGhlcmVpbiwKK2FuZCBhbnkgYXR0ZW1wdCB0byBkbyBzbyBleGNlcHQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSAob3IgYW5vdGhlcgord3JpdHRlbiBhZ3JlZW1lbnQgYmV0d2VlbiBMaWNlbnNvciBhbmQgWW91KSBpcyBleHByZXNzbHkgcHJvaGliaXRlZCBieSBVLlMuCitjb3B5cmlnaHQgbGF3LCB0aGUgZXF1aXZhbGVudCBsYXdzIG9mIG90aGVyIGNvdW50cmllcywgYW5kIGJ5IGludGVybmF0aW9uYWwKK3RyZWF0eS4gVGhlcmVmb3JlLCBieSBleGVyY2lzaW5nIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGluIFNlY3Rpb25zCisxIGhlcmVpbiwgWW91IGluZGljYXRlIFlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzIExpY2Vuc2UgYW5kIGFsbCBvZiBpdHMgdGVybXMgYW5kCitjb25kaXRpb25zLiBUaGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlIGltbWVkaWF0ZWx5IGFuZCB5b3UgbWF5IG5vIGxvbmdlcgorZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgdGhpcyBMaWNlbnNlIHVwb24gWW91ciBmYWlsdXJlIHRvCitob25vciB0aGUgcHJvdmlzbyBpbiBTZWN0aW9uIDEoYykgaGVyZWluLgorCisxMCkgTXV0dWFsIFRlcm1pbmF0aW9uIGZvciBQYXRlbnQgQWN0aW9uLiBUaGlzIExpY2Vuc2Ugc2hhbGwgdGVybWluYXRlCithdXRvbWF0aWNhbGx5IGFuZCBZb3UgbWF5IG5vIGxvbmdlciBleGVyY2lzZSBhbnkgb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdQorYnkgdGhpcyBMaWNlbnNlIGlmIFlvdSBmaWxlIGEgbGF3c3VpdCBpbiBhbnkgY291cnQgYWxsZWdpbmcgdGhhdCBhbnkgT1NJCitDZXJ0aWZpZWQgb3BlbiBzb3VyY2Ugc29mdHdhcmUgdGhhdCBpcyBsaWNlbnNlZCB1bmRlciBhbnkgbGljZW5zZSBjb250YWluaW5nCit0aGlzICJNdXR1YWwgVGVybWluYXRpb24gZm9yIFBhdGVudCBBY3Rpb24iIGNsYXVzZSBpbmZyaW5nZXMgYW55IHBhdGVudCBjbGFpbXMKK3RoYXQgYXJlIGVzc2VudGlhbCB0byB1c2UgdGhhdCBzb2Z0d2FyZS4KKworMTEpIEp1cmlzZGljdGlvbiwgVmVudWUgYW5kIEdvdmVybmluZyBMYXcuIEFueSBhY3Rpb24gb3Igc3VpdCByZWxhdGluZyB0byB0aGlzCitMaWNlbnNlIG1heSBiZSBicm91Z2h0IG9ubHkgaW4gdGhlIGNvdXJ0cyBvZiBhIGp1cmlzZGljdGlvbiB3aGVyZWluIHRoZSBMaWNlbnNvcgorcmVzaWRlcyBvciBpbiB3aGljaCBMaWNlbnNvciBjb25kdWN0cyBpdHMgcHJpbWFyeSBidXNpbmVzcywgYW5kIHVuZGVyIHRoZSBsYXdzCitvZiB0aGF0IGp1cmlzZGljdGlvbiBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBUaGUgYXBwbGljYXRpb24KK29mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZgorR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBBbnkgdXNlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG91dHNpZGUgdGhlIHNjb3BlIG9mCit0aGlzIExpY2Vuc2Ugb3IgYWZ0ZXIgaXRzIHRlcm1pbmF0aW9uIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIHJlcXVpcmVtZW50cyBhbmQKK3BlbmFsdGllcyBvZiB0aGUgVS5TLiBDb3B5cmlnaHQgQWN0LCAxNyBVLlMuQy4gwqcgMTAxIGV0IHNlcS4sIHRoZSBlcXVpdmFsZW50CitsYXdzIG9mIG90aGVyIGNvdW50cmllcywgYW5kIGludGVybmF0aW9uYWwgdHJlYXR5LiBUaGlzIHNlY3Rpb24gc2hhbGwgc3Vydml2ZQordGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4KKworMTIpIEF0dG9ybmV5cyBGZWVzLiBJbiBhbnkgYWN0aW9uIHRvIGVuZm9yY2UgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvcgorc2Vla2luZyBkYW1hZ2VzIHJlbGF0aW5nIHRoZXJldG8sIHRoZSBwcmV2YWlsaW5nIHBhcnR5IHNoYWxsIGJlIGVudGl0bGVkIHRvCityZWNvdmVyIGl0cyBjb3N0cyBhbmQgZXhwZW5zZXMsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCByZWFzb25hYmxlCithdHRvcm5leXMnIGZlZXMgYW5kIGNvc3RzIGluY3VycmVkIGluIGNvbm5lY3Rpb24gd2l0aCBzdWNoIGFjdGlvbiwgaW5jbHVkaW5nCithbnkgYXBwZWFsIG9mIHN1Y2ggYWN0aW9uLiBUaGlzIHNlY3Rpb24gc2hhbGwgc3Vydml2ZSB0aGUgdGVybWluYXRpb24gb2YgdGhpcworTGljZW5zZS4KKworMTMpIE1pc2NlbGxhbmVvdXMuIFRoaXMgTGljZW5zZSByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZwordGhlIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZQordW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeQordG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4KKworMTQpIERlZmluaXRpb24gb2YgIllvdSIgaW4gVGhpcyBMaWNlbnNlLiAiWW91IiB0aHJvdWdob3V0IHRoaXMgTGljZW5zZSwKK3doZXRoZXIgaW4gdXBwZXIgb3IgbG93ZXIgY2FzZSwgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nCityaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2UuIEZvciBsZWdhbAorZW50aXRpZXMsICJZb3UiIGluY2x1ZGVzIGFueSBlbnRpdHkgdGhhdCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMgdW5kZXIKK2NvbW1vbiBjb250cm9sIHdpdGggeW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGkpCit0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2gKK2VudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQKKyg1MCUpIG9yIG1vcmUgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcywgb3IgKGlpaSkgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaAorZW50aXR5LgorCisxNSkgUmlnaHQgdG8gVXNlLiBZb3UgbWF5IHVzZSB0aGUgT3JpZ2luYWwgV29yayBpbiBhbGwgd2F5cyBub3Qgb3RoZXJ3aXNlCityZXN0cmljdGVkIG9yIGNvbmRpdGlvbmVkIGJ5IHRoaXMgTGljZW5zZSBvciBieSBsYXcsIGFuZCBMaWNlbnNvciBwcm9taXNlcyBub3QKK3RvIGludGVyZmVyZSB3aXRoIG9yIGJlIHJlc3BvbnNpYmxlIGZvciBzdWNoIHVzZXMgYnkgWW91LgorCitUaGlzIGxpY2Vuc2UgaXMgQ29weXJpZ2h0IChDKSAyMDAyIExhd3JlbmNlIEUuIFJvc2VuLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHRoaXMgbGljZW5zZSB3aXRob3V0Cittb2RpZmljYXRpb24uIFRoaXMgbGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIGV4cHJlc3Mgd3JpdHRlbgorcGVybWlzc2lvbiBvZiBpdHMgY29weXJpZ2h0IG93bmVyLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvT1NMLTIuMCBiL2xpY2Vuc2VzL09TTC0yLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhmNzk1NwotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL09TTC0yLjAKQEAgLTAsMCArMSw0OSBAQAorT3BlbiBTb2Z0d2FyZSBMaWNlbnNlCisgdi4gMi4wCisKK1RoaXMgT3BlbiBTb2Z0d2FyZSBMaWNlbnNlICh0aGUgIkxpY2Vuc2UiKSBhcHBsaWVzIHRvIGFueSBvcmlnaW5hbCB3b3JrIG9mIGF1dGhvcnNoaXAgKHRoZSAiT3JpZ2luYWwgV29yayIpIHdob3NlIG93bmVyICh0aGUgIkxpY2Vuc29yIikgaGFzIHBsYWNlZCB0aGUgZm9sbG93aW5nIG5vdGljZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIHRoZSBPcmlnaW5hbCBXb3JrOiAgIAorTGljZW5zZWQgdW5kZXIgdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSB2ZXJzaW9uIDIuMAorCisxKSBHcmFudCBvZiBDb3B5cmlnaHQgTGljZW5zZS4gTGljZW5zb3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUsIHBlcnBldHVhbCwgc3VibGljZW5zZWFibGUgbGljZW5zZSB0byBkbyB0aGUgZm9sbG93aW5nOiAKK2EpIHRvIHJlcHJvZHVjZSB0aGUgT3JpZ2luYWwgV29yayBpbiBjb3BpZXM7IAorCitiKSB0byBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3MgKCJEZXJpdmF0aXZlIFdvcmtzIikgYmFzZWQgdXBvbiB0aGUgT3JpZ2luYWwgV29yazsgCisKK2MpIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRvIHRoZSBwdWJsaWMsIHdpdGggdGhlIHByb3Zpc28gdGhhdCBjb3BpZXMgb2YgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUgc2hhbGwgYmUgbGljZW5zZWQgdW5kZXIgdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZTsgCisKK2QpIHRvIHBlcmZvcm0gdGhlIE9yaWdpbmFsIFdvcmsgcHVibGljbHk7IGFuZCAKKworZSkgdG8gZGlzcGxheSB0aGUgT3JpZ2luYWwgV29yayBwdWJsaWNseS4gICAKKworCisKKworMikgR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLCBwZXJwZXR1YWwsIHN1YmxpY2Vuc2VhYmxlIGxpY2Vuc2UsIHVuZGVyIHBhdGVudCBjbGFpbXMgb3duZWQgb3IgY29udHJvbGxlZCBieSB0aGUgTGljZW5zb3IgdGhhdCBhcmUgZW1ib2RpZWQgaW4gdGhlIE9yaWdpbmFsIFdvcmsgYXMgZnVybmlzaGVkIGJ5IHRoZSBMaWNlbnNvciwgdG8gbWFrZSwgdXNlLCBzZWxsIGFuZCBvZmZlciBmb3Igc2FsZSB0aGUgT3JpZ2luYWwgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3Jrcy4gIAorCiszKSBHcmFudCBvZiBTb3VyY2UgQ29kZSBMaWNlbnNlLiBUaGUgdGVybSAiU291cmNlIENvZGUiIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgT3JpZ2luYWwgV29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQgYW5kIGFsbCBhdmFpbGFibGUgZG9jdW1lbnRhdGlvbiBkZXNjcmliaW5nIGhvdyB0byBtb2RpZnkgdGhlIE9yaWdpbmFsIFdvcmsuICBMaWNlbnNvciBoZXJlYnkgYWdyZWVzIHRvIHByb3ZpZGUgYSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGFsb25nIHdpdGggZWFjaCBjb3B5IG9mIHRoZSBPcmlnaW5hbCBXb3JrIHRoYXQgTGljZW5zb3IgZGlzdHJpYnV0ZXMuICBMaWNlbnNvciByZXNlcnZlcyB0aGUgcmlnaHQgdG8gc2F0aXNmeSB0aGlzIG9ibGlnYXRpb24gYnkgcGxhY2luZyBhIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgaW4gYW4gaW5mb3JtYXRpb24gcmVwb3NpdG9yeSByZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gcGVybWl0IGluZXhwZW5zaXZlIGFuZCBjb252ZW5pZW50IGFjY2VzcyBieSBZb3UgZm9yIGFzIGxvbmcgYXMgTGljZW5zb3IgY29udGludWVzIHRvIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIFdvcmssIGFuZCBieSBwdWJsaXNoaW5nIHRoZSBhZGRyZXNzIG9mIHRoYXQgaW5mb3JtYXRpb24gcmVwb3NpdG9yeSBpbiBhIG5vdGljZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodCBub3RpY2UgdGhhdCBhcHBsaWVzIHRvIHRoZSBPcmlnaW5hbCBXb3JrLiAgICAKKworNCkgRXhjbHVzaW9ucyBGcm9tIExpY2Vuc2UgR3JhbnQuIE5laXRoZXIgdGhlIG5hbWVzIG9mIExpY2Vuc29yLCBub3IgdGhlIG5hbWVzIG9mIGFueSBjb250cmlidXRvcnMgdG8gdGhlIE9yaWdpbmFsIFdvcmssIG5vciBhbnkgb2YgdGhlaXIgdHJhZGVtYXJrcyBvciBzZXJ2aWNlIG1hcmtzLCBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgT3JpZ2luYWwgV29yayB3aXRob3V0IGV4cHJlc3MgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBMaWNlbnNvci4gIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGRlZW1lZCB0byBncmFudCBhbnkgcmlnaHRzIHRvIHRyYWRlbWFya3MsIGNvcHlyaWdodHMsIHBhdGVudHMsIHRyYWRlIHNlY3JldHMgb3IgYW55IG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBMaWNlbnNvciBleGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBoZXJlaW4uICBObyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkIHRvIG1ha2UsIHVzZSwgc2VsbCBvciBvZmZlciB0byBzZWxsIGVtYm9kaW1lbnRzIG9mIGFueSBwYXRlbnQgY2xhaW1zIG90aGVyIHRoYW4gdGhlIGxpY2Vuc2VkIGNsYWltcyBkZWZpbmVkIGluIFNlY3Rpb24gMi4gIE5vIHJpZ2h0IGlzIGdyYW50ZWQgdG8gdGhlIHRyYWRlbWFya3Mgb2YgTGljZW5zb3IgZXZlbiBpZiBzdWNoIG1hcmtzIGFyZSBpbmNsdWRlZCBpbiB0aGUgT3JpZ2luYWwgV29yay4gIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGJlIGludGVycHJldGVkIHRvIHByb2hpYml0IExpY2Vuc29yIGZyb20gbGljZW5zaW5nIHVuZGVyIGRpZmZlcmVudCB0ZXJtcyBmcm9tIHRoaXMgTGljZW5zZSBhbnkgT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIG90aGVyd2lzZSB3b3VsZCBoYXZlIGEgcmlnaHQgdG8gbGljZW5zZS4gIAorCis1KSBFeHRlcm5hbCBEZXBsb3ltZW50LiBUaGUgdGVybSAiRXh0ZXJuYWwgRGVwbG95bWVudCIgbWVhbnMgdGhlIHVzZSBvciBkaXN0cmlidXRpb24gb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyBpbiBhbnkgd2F5IHN1Y2ggdGhhdCB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIG1heSBiZSB1c2VkIGJ5IGFueW9uZSBvdGhlciB0aGFuIFlvdSwgd2hldGhlciB0aGUgT3JpZ2luYWwgV29yayBvciBEZXJpdmF0aXZlIFdvcmtzIGFyZSBkaXN0cmlidXRlZCB0byB0aG9zZSBwZXJzb25zIG9yIG1hZGUgYXZhaWxhYmxlIGFzIGFuIGFwcGxpY2F0aW9uIGludGVuZGVkIGZvciB1c2Ugb3ZlciBhIGNvbXB1dGVyIG5ldHdvcmsuICBBcyBhbiBleHByZXNzIGNvbmRpdGlvbiBmb3IgdGhlIGdyYW50cyBvZiBsaWNlbnNlIGhlcmV1bmRlciwgWW91IGFncmVlIHRoYXQgYW55IEV4dGVybmFsIERlcGxveW1lbnQgYnkgWW91IG9mIGEgRGVyaXZhdGl2ZSBXb3JrIHNoYWxsIGJlIGRlZW1lZCBhIGRpc3RyaWJ1dGlvbiBhbmQgc2hhbGwgYmUgbGljZW5zZWQgdG8gYWxsIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFzIHByZXNjcmliZWQgaW4gc2VjdGlvbiAxKGMpIGhlcmVpbi4gIAorCis2KSBBdHRyaWJ1dGlvbiBSaWdodHMuIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBDb2RlIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGNyZWF0ZSwgYWxsIGNvcHlyaWdodCwgcGF0ZW50IG9yIHRyYWRlbWFyayBub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrLCBhcyB3ZWxsIGFzIGFueSBub3RpY2VzIG9mIGxpY2Vuc2luZyBhbmQgYW55IGRlc2NyaXB0aXZlIHRleHQgaWRlbnRpZmllZCB0aGVyZWluIGFzIGFuICJBdHRyaWJ1dGlvbiBOb3RpY2UuIiAgWW91IG11c3QgY2F1c2UgdGhlIFNvdXJjZSBDb2RlIGZvciBhbnkgRGVyaXZhdGl2ZSBXb3JrcyB0aGF0IFlvdSBjcmVhdGUgdG8gY2FycnkgYSBwcm9taW5lbnQgQXR0cmlidXRpb24gTm90aWNlIHJlYXNvbmFibHkgY2FsY3VsYXRlZCB0byBpbmZvcm0gcmVjaXBpZW50cyB0aGF0IFlvdSBoYXZlIG1vZGlmaWVkIHRoZSBPcmlnaW5hbCBXb3JrLiAgCisKKzcpIFdhcnJhbnR5IG9mIFByb3ZlbmFuY2UgYW5kIERpc2NsYWltZXIgb2YgV2FycmFudHkuIExpY2Vuc29yIHdhcnJhbnRzIHRoYXQgdGhlIGNvcHlyaWdodCBpbiBhbmQgdG8gdGhlIE9yaWdpbmFsIFdvcmsgYW5kIHRoZSBwYXRlbnQgcmlnaHRzIGdyYW50ZWQgaGVyZWluIGJ5IExpY2Vuc29yIGFyZSBvd25lZCBieSB0aGUgTGljZW5zb3Igb3IgYXJlIHN1YmxpY2Vuc2VkIHRvIFlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggdGhlIHBlcm1pc3Npb24gb2YgdGhlIGNvbnRyaWJ1dG9yKHMpIG9mIHRob3NlIGNvcHlyaWdodHMgYW5kIHBhdGVudCByaWdodHMuICBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiB0aGUgaW1tZWRpYXRlbHkgcHJvY2VlZGluZyBzZW50ZW5jZSwgdGhlIE9yaWdpbmFsIFdvcmsgaXMgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlIG9uIGFuICJBUyBJUyIgQkFTSVMgYW5kIFdJVEhPVVQgV0FSUkFOVFksIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCB0aGUgd2FycmFudGllcyBvZiBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgT0YgVEhFIE9SSUdJTkFMIFdPUksgSVMgV0lUSCBZT1UuICBUaGlzIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgY29uc3RpdHV0ZXMgYW4gZXNzZW50aWFsIHBhcnQgb2YgdGhpcyBMaWNlbnNlLiAgTm8gbGljZW5zZSB0byBPcmlnaW5hbCBXb3JrIGlzIGdyYW50ZWQgaGVyZXVuZGVyIGV4Y2VwdCB1bmRlciB0aGlzIGRpc2NsYWltZXIuICAKKworOCkgTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIFVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgYW5kIHVuZGVyIG5vIGxlZ2FsIHRoZW9yeSwgd2hldGhlciBpbiB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIGNvbnRyYWN0LCBvciBvdGhlcndpc2UsIHNoYWxsIHRoZSBMaWNlbnNvciBiZSBsaWFibGUgdG8gYW55IHBlcnNvbiBmb3IgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYSByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIHRoZSB1c2Ugb2YgdGhlIE9yaWdpbmFsIFdvcmsgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24sIG9yIGFueSBhbmQgYWxsIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvciBsb3NzZXMuICBUaGlzIGxpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHNoYWxsIG5vdCBhcHBseSB0byBsaWFiaWxpdHkgZm9yIGRlYXRoIG9yIHBlcnNvbmFsIGluanVyeSByZXN1bHRpbmcgZnJvbSBMaWNlbnNvcidzIG5lZ2xpZ2VuY2UgdG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlIGxhdyBwcm9oaWJpdHMgc3VjaCBsaW1pdGF0aW9uLiAgU29tZSBqdXJpc2RpY3Rpb25zIGRvIG5vdCBhbGxvdyB0aGUgZXhjbHVzaW9uIG9yIGxpbWl0YXRpb24gb2YgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHNvIHRoaXMgZXhjbHVzaW9uIGFuZCBsaW1pdGF0aW9uIG1heSBub3QgYXBwbHkgdG8gWW91LiAgCisKKzkpIEFjY2VwdGFuY2UgYW5kIFRlcm1pbmF0aW9uLiBJZiBZb3UgZGlzdHJpYnV0ZSAgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG9yIGEgRGVyaXZhdGl2ZSBXb3JrLCBZb3UgbXVzdCBtYWtlIGEgcmVhc29uYWJsZSBlZmZvcnQgdW5kZXIgdGhlIGNpcmN1bXN0YW5jZXMgdG8gb2J0YWluIHRoZSBleHByZXNzIGFzc2VudCBvZiByZWNpcGllbnRzIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuICBOb3RoaW5nIGVsc2UgYnV0IHRoaXMgTGljZW5zZSAob3IgYW5vdGhlciB3cml0dGVuIGFncmVlbWVudCBiZXR3ZWVuIExpY2Vuc29yIGFuZCBZb3UpIGdyYW50cyBZb3UgcGVybWlzc2lvbiB0byBjcmVhdGUgRGVyaXZhdGl2ZSBXb3JrcyBiYXNlZCB1cG9uIHRoZSBPcmlnaW5hbCBXb3JrIG9yIHRvIGV4ZXJjaXNlIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaW4gU2VjdGlvbiAxIGhlcmVpbiwgYW5kIGFueSBhdHRlbXB0IHRvIGRvIHNvIGV4Y2VwdCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIChvciBhbm90aGVyIHdyaXR0ZW4gYWdyZWVtZW50IGJldHdlZW4gTGljZW5zb3IgYW5kIFlvdSkgaXMgZXhwcmVzc2x5IHByb2hpYml0ZWQgYnkgVS5TLiBjb3B5cmlnaHQgbGF3LCB0aGUgZXF1aXZhbGVudCBsYXdzIG9mIG90aGVyIGNvdW50cmllcywgYW5kIGJ5IGludGVybmF0aW9uYWwgdHJlYXR5LiAgVGhlcmVmb3JlLCBieSBleGVyY2lzaW5nIGFueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGluIFNlY3Rpb24gMSBoZXJlaW4sIFlvdSBpbmRpY2F0ZSBZb3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIGFuZCBhbGwgb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLiAgVGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZSBpbW1lZGlhdGVseSBhbmQgeW91IG1heSBubyBsb25nZXIgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgdGhpcyBMaWNlbnNlIHVwb24gWW91ciBmYWlsdXJlIHRvIGhvbm9yIHRoZSBwcm92aXNvIGluIFNlY3Rpb24gMShjKSBoZXJlaW4uICAgIAorCisxMCkgVGVybWluYXRpb24gZm9yIFBhdGVudCBBY3Rpb24uIFRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBhbmQgWW91IG1heSBubyBsb25nZXIgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZCB0byBZb3UgYnkgdGhpcyBMaWNlbnNlIGFzIG9mIHRoZSBkYXRlIFlvdSBjb21tZW5jZSBhbiBhY3Rpb24sIGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSwgZm9yIHBhdGVudCBpbmZyaW5nZW1lbnQgKGkpIGFnYWluc3QgTGljZW5zb3Igd2l0aCByZXNwZWN0IHRvIGEgcGF0ZW50IGFwcGxpY2FibGUgdG8gc29mdHdhcmUgb3IgKGlpKSBhZ2FpbnN0IGFueSBlbnRpdHkgd2l0aCByZXNwZWN0IHRvIGEgcGF0ZW50IGFwcGxpY2FibGUgdG8gdGhlIE9yaWdpbmFsIFdvcmsgKGJ1dCBleGNsdWRpbmcgY29tYmluYXRpb25zIG9mIHRoZSBPcmlnaW5hbCBXb3JrIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUpLiAgICAKKworMTEpIEp1cmlzZGljdGlvbiwgVmVudWUgYW5kIEdvdmVybmluZyBMYXcuIEFueSBhY3Rpb24gb3Igc3VpdCByZWxhdGluZyB0byB0aGlzIExpY2Vuc2UgbWF5IGJlIGJyb3VnaHQgb25seSBpbiB0aGUgY291cnRzIG9mIGEganVyaXNkaWN0aW9uIHdoZXJlaW4gdGhlIExpY2Vuc29yIHJlc2lkZXMgb3IgaW4gd2hpY2ggTGljZW5zb3IgY29uZHVjdHMgaXRzIHByaW1hcnkgYnVzaW5lc3MsIGFuZCB1bmRlciB0aGUgbGF3cyBvZiB0aGF0IGp1cmlzZGljdGlvbiBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiAgVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuICBBbnkgdXNlIG9mIHRoZSBPcmlnaW5hbCBXb3JrIG91dHNpZGUgdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZSBvciBhZnRlciBpdHMgdGVybWluYXRpb24gc2hhbGwgYmUgc3ViamVjdCB0byB0aGUgcmVxdWlyZW1lbnRzIGFuZCBwZW5hbHRpZXMgb2YgdGhlIFUuUy4gQ29weXJpZ2h0IEFjdCwgMTcgVS5TLkMuICAxMDEgZXQgc2VxLiwgdGhlIGVxdWl2YWxlbnQgbGF3cyBvZiBvdGhlciBjb3VudHJpZXMsIGFuZCBpbnRlcm5hdGlvbmFsIHRyZWF0eS4gIFRoaXMgc2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuICAKKworMTIpIEF0dG9ybmV5cyBGZWVzLiBJbiBhbnkgYWN0aW9uIHRvIGVuZm9yY2UgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBvciBzZWVraW5nIGRhbWFnZXMgcmVsYXRpbmcgdGhlcmV0bywgdGhlIHByZXZhaWxpbmcgcGFydHkgc2hhbGwgYmUgZW50aXRsZWQgdG8gcmVjb3ZlciBpdHMgY29zdHMgYW5kIGV4cGVuc2VzLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgcmVhc29uYWJsZSBhdHRvcm5leXMnIGZlZXMgYW5kIGNvc3RzIGluY3VycmVkIGluIGNvbm5lY3Rpb24gd2l0aCBzdWNoIGFjdGlvbiwgaW5jbHVkaW5nIGFueSBhcHBlYWwgb2Ygc3VjaCBhY3Rpb24uICBUaGlzIHNlY3Rpb24gc2hhbGwgc3Vydml2ZSB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiAgCisKKzEzKSBNaXNjZWxsYW5lb3VzLiBUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgdGhlIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiAgICAKKworMTQpIERlZmluaXRpb24gb2YgIllvdSIgaW4gVGhpcyBMaWNlbnNlLiAiWW91IiB0aHJvdWdob3V0IHRoaXMgTGljZW5zZSwgd2hldGhlciBpbiB1cHBlciBvciBsb3dlciBjYXNlLCBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlLiAgRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBpbmNsdWRlcyBhbnkgZW50aXR5IHRoYXQgY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggeW91LiAgRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMsIG9yIChpaWkpIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LiAgIAorCisxNSkgUmlnaHQgdG8gVXNlLiBZb3UgbWF5IHVzZSB0aGUgT3JpZ2luYWwgV29yayBpbiBhbGwgd2F5cyBub3Qgb3RoZXJ3aXNlIHJlc3RyaWN0ZWQgb3IgY29uZGl0aW9uZWQgYnkgdGhpcyBMaWNlbnNlIG9yIGJ5IGxhdywgYW5kIExpY2Vuc29yIHByb21pc2VzIG5vdCB0byBpbnRlcmZlcmUgd2l0aCBvciBiZSByZXNwb25zaWJsZSBmb3Igc3VjaCB1c2VzIGJ5IFlvdS4gICAgCisKK1RoaXMgbGljZW5zZSBpcyBDb3B5cmlnaHQgKEMpIDIwMDMgTGF3cmVuY2UgRS4gUm9zZW4uICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHRoaXMgbGljZW5zZSB3aXRob3V0IG1vZGlmaWNhdGlvbi4gIFRoaXMgbGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQgdGhlIGV4cHJlc3Mgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIGl0cyBjb3B5cmlnaHQgb3duZXIuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL09TTC0yLjEgYi9saWNlbnNlcy9PU0wtMi4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZWFjZTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9PU0wtMi4xCkBAIC0wLDAgKzEsMTU1IEBACitPcGVuIFNvZnR3YXJlIExpY2Vuc2Ugdi4gMi4xCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09CitUaGlzIE9wZW4gU29mdHdhcmUgTGljZW5zZSAodGhlICJMaWNlbnNlIikgYXBwbGllcyB0byBhbnkgb3JpZ2luYWwgd29yaworb2YgYXV0aG9yc2hpcCAodGhlICJPcmlnaW5hbCBXb3JrIikgd2hvc2Ugb3duZXIgKHRoZSAiTGljZW5zb3IiKSBoYXMKK3BsYWNlZCB0aGUgZm9sbG93aW5nIG5vdGljZSBpbW1lZGlhdGVseSBmb2xsb3dpbmcgdGhlIGNvcHlyaWdodCBub3RpY2UKK2ZvciB0aGUgT3JpZ2luYWwgV29yazogTGljZW5zZWQgdW5kZXIgdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZSB2ZXJzaW9uIDIuMSAKKworMSkgR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwKK3JveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsLCBzdWJsaWNlbnNlYWJsZSBsaWNlbnNlIHRvIGRvCit0aGUgZm9sbG93aW5nOgorCit0byByZXByb2R1Y2UgdGhlIE9yaWdpbmFsIFdvcmsgaW4gY29waWVzOyAKK3RvIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyAoIkRlcml2YXRpdmUgV29ya3MiKSBiYXNlZCB1cG9uIHRoZSBPcmlnaW5hbCBXb3JrOyAKK3RvIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGFuZCBEZXJpdmF0aXZlIFdvcmtzIHRvIHRoZSAKKyAgIHB1YmxpYywgd2l0aCB0aGUgcHJvdmlzbyB0aGF0IGNvcGllcyBvZiBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MKKyAgIHRoYXQgWW91IGRpc3RyaWJ1dGUgc2hhbGwgYmUgbGljZW5zZWQgdW5kZXIgdGhlIE9wZW4gU29mdHdhcmUgTGljZW5zZTsgCit0byBwZXJmb3JtIHRoZSBPcmlnaW5hbCBXb3JrIHB1YmxpY2x5OyBhbmQgCit0byBkaXNwbGF5IHRoZSBPcmlnaW5hbCBXb3JrIHB1YmxpY2x5LiAKKworMikgR3JhbnQgb2YgUGF0ZW50IExpY2Vuc2UuIExpY2Vuc29yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwKK3JveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSwgcGVycGV0dWFsLCBzdWJsaWNlbnNlYWJsZSBsaWNlbnNlLCB1bmRlcgorcGF0ZW50IGNsYWltcyBvd25lZCBvciBjb250cm9sbGVkIGJ5IHRoZSBMaWNlbnNvciB0aGF0IGFyZSBlbWJvZGllZCBpbgordGhlIE9yaWdpbmFsIFdvcmsgYXMgZnVybmlzaGVkIGJ5IHRoZSBMaWNlbnNvciwgdG8gbWFrZSwgdXNlLCBzZWxsIGFuZAorb2ZmZXIgZm9yIHNhbGUgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIERlcml2YXRpdmUgV29ya3MuCisKKzMpIEdyYW50IG9mIFNvdXJjZSBDb2RlIExpY2Vuc2UuIFRoZSB0ZXJtICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlCitwcmVmZXJyZWQgZm9ybSBvZiB0aGUgT3JpZ2luYWwgV29yayBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQKK2FuZCBhbGwgYXZhaWxhYmxlIGRvY3VtZW50YXRpb24gZGVzY3JpYmluZyBob3cgdG8gbW9kaWZ5IHRoZSBPcmlnaW5hbAorV29yay4gTGljZW5zb3IgaGVyZWJ5IGFncmVlcyB0byBwcm92aWRlIGEgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZQorU291cmNlIENvZGUgb2YgdGhlIE9yaWdpbmFsIFdvcmsgYWxvbmcgd2l0aCBlYWNoIGNvcHkgb2YgdGhlIE9yaWdpbmFsCitXb3JrIHRoYXQgTGljZW5zb3IgZGlzdHJpYnV0ZXMuIExpY2Vuc29yIHJlc2VydmVzIHRoZSByaWdodCB0byBzYXRpc2Z5Cit0aGlzIG9ibGlnYXRpb24gYnkgcGxhY2luZyBhIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgU291cmNlIENvZGUgaW4KK2FuIGluZm9ybWF0aW9uIHJlcG9zaXRvcnkgcmVhc29uYWJseSBjYWxjdWxhdGVkIHRvIHBlcm1pdCBpbmV4cGVuc2l2ZSBhbmQKK2NvbnZlbmllbnQgYWNjZXNzIGJ5IFlvdSBmb3IgYXMgbG9uZyBhcyBMaWNlbnNvciBjb250aW51ZXMgdG8gZGlzdHJpYnV0ZQordGhlIE9yaWdpbmFsIFdvcmssIGFuZCBieSBwdWJsaXNoaW5nIHRoZSBhZGRyZXNzIG9mIHRoYXQgaW5mb3JtYXRpb24KK3JlcG9zaXRvcnkgaW4gYSBub3RpY2UgaW1tZWRpYXRlbHkgZm9sbG93aW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlIHRoYXQKK2FwcGxpZXMgdG8gdGhlIE9yaWdpbmFsIFdvcmsuCisKKzQpIEV4Y2x1c2lvbnMgRnJvbSBMaWNlbnNlIEdyYW50LiBOZWl0aGVyIHRoZSBuYW1lcyBvZiBMaWNlbnNvciwgbm9yCit0aGUgbmFtZXMgb2YgYW55IGNvbnRyaWJ1dG9ycyB0byB0aGUgT3JpZ2luYWwgV29yaywgbm9yIGFueSBvZiB0aGVpcgordHJhZGVtYXJrcyBvciBzZXJ2aWNlIG1hcmtzLCBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKK2Rlcml2ZWQgZnJvbSB0aGlzIE9yaWdpbmFsIFdvcmsgd2l0aG91dCBleHByZXNzIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbgorb2YgdGhlIExpY2Vuc29yLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZSBkZWVtZWQgdG8gZ3JhbnQgYW55CityaWdodHMgdG8gdHJhZGVtYXJrcywgY29weXJpZ2h0cywgcGF0ZW50cywgdHJhZGUgc2VjcmV0cyBvciBhbnkgb3RoZXIKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBMaWNlbnNvciBleGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBoZXJlaW4uIE5vCitwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkIHRvIG1ha2UsIHVzZSwgc2VsbCBvciBvZmZlciB0byBzZWxsIGVtYm9kaW1lbnRzCitvZiBhbnkgcGF0ZW50IGNsYWltcyBvdGhlciB0aGFuIHRoZSBsaWNlbnNlZCBjbGFpbXMgZGVmaW5lZCBpbiBTZWN0aW9uCisyLiBObyByaWdodCBpcyBncmFudGVkIHRvIHRoZSB0cmFkZW1hcmtzIG9mIExpY2Vuc29yIGV2ZW4gaWYgc3VjaCBtYXJrcworYXJlIGluY2x1ZGVkIGluIHRoZSBPcmlnaW5hbCBXb3JrLiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBzaGFsbCBiZQoraW50ZXJwcmV0ZWQgdG8gcHJvaGliaXQgTGljZW5zb3IgZnJvbSBsaWNlbnNpbmcgdW5kZXIgZGlmZmVyZW50IHRlcm1zCitmcm9tIHRoaXMgTGljZW5zZSBhbnkgT3JpZ2luYWwgV29yayB0aGF0IExpY2Vuc29yIG90aGVyd2lzZSB3b3VsZCBoYXZlCithIHJpZ2h0IHRvIGxpY2Vuc2UuCisKKzUpIEV4dGVybmFsIERlcGxveW1lbnQuIFRoZSB0ZXJtICJFeHRlcm5hbCBEZXBsb3ltZW50IiBtZWFucyB0aGUgdXNlIG9yCitkaXN0cmlidXRpb24gb2YgdGhlIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyBpbiBhbnkgd2F5IHN1Y2ggdGhhdAordGhlIE9yaWdpbmFsIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyBtYXkgYmUgdXNlZCBieSBhbnlvbmUgb3RoZXIgdGhhbgorWW91LCB3aGV0aGVyIHRoZSBPcmlnaW5hbCBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgYXJlIGRpc3RyaWJ1dGVkIHRvCit0aG9zZSBwZXJzb25zIG9yIG1hZGUgYXZhaWxhYmxlIGFzIGFuIGFwcGxpY2F0aW9uIGludGVuZGVkIGZvciB1c2Ugb3ZlcgorYSBjb21wdXRlciBuZXR3b3JrLiBBcyBhbiBleHByZXNzIGNvbmRpdGlvbiBmb3IgdGhlIGdyYW50cyBvZiBsaWNlbnNlCitoZXJldW5kZXIsIFlvdSBhZ3JlZSB0aGF0IGFueSBFeHRlcm5hbCBEZXBsb3ltZW50IGJ5IFlvdSBvZiBhIERlcml2YXRpdmUKK1dvcmsgc2hhbGwgYmUgZGVlbWVkIGEgZGlzdHJpYnV0aW9uIGFuZCBzaGFsbCBiZSBsaWNlbnNlZCB0byBhbGwgdW5kZXIKK3RoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFzIHByZXNjcmliZWQgaW4gc2VjdGlvbiAxKGMpIGhlcmVpbi4KKworNikgQXR0cmlidXRpb24gUmlnaHRzLiBZb3UgbXVzdCByZXRhaW4sIGluIHRoZSBTb3VyY2UgQ29kZSBvZiBhbnkKK0Rlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgY3JlYXRlLCBhbGwgY29weXJpZ2h0LCBwYXRlbnQgb3IgdHJhZGVtYXJrCitub3RpY2VzIGZyb20gdGhlIFNvdXJjZSBDb2RlIG9mIHRoZSBPcmlnaW5hbCBXb3JrLCBhcyB3ZWxsIGFzIGFueQorbm90aWNlcyBvZiBsaWNlbnNpbmcgYW5kIGFueSBkZXNjcmlwdGl2ZSB0ZXh0IGlkZW50aWZpZWQgdGhlcmVpbiBhcyBhbgorIkF0dHJpYnV0aW9uIE5vdGljZS4iIFlvdSBtdXN0IGNhdXNlIHRoZSBTb3VyY2UgQ29kZSBmb3IgYW55IERlcml2YXRpdmUKK1dvcmtzIHRoYXQgWW91IGNyZWF0ZSB0byBjYXJyeSBhIHByb21pbmVudCBBdHRyaWJ1dGlvbiBOb3RpY2UgcmVhc29uYWJseQorY2FsY3VsYXRlZCB0byBpbmZvcm0gcmVjaXBpZW50cyB0aGF0IFlvdSBoYXZlIG1vZGlmaWVkIHRoZSBPcmlnaW5hbCBXb3JrLgorCis3KSBXYXJyYW50eSBvZiBQcm92ZW5hbmNlIGFuZCBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiBMaWNlbnNvcgord2FycmFudHMgdGhhdCB0aGUgY29weXJpZ2h0IGluIGFuZCB0byB0aGUgT3JpZ2luYWwgV29yayBhbmQgdGhlIHBhdGVudAorcmlnaHRzIGdyYW50ZWQgaGVyZWluIGJ5IExpY2Vuc29yIGFyZSBvd25lZCBieSB0aGUgTGljZW5zb3Igb3IgYXJlCitzdWJsaWNlbnNlZCB0byBZb3UgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHRoZSBwZXJtaXNzaW9uCitvZiB0aGUgY29udHJpYnV0b3Iocykgb2YgdGhvc2UgY29weXJpZ2h0cyBhbmQgcGF0ZW50IHJpZ2h0cy4gRXhjZXB0IGFzCitleHByZXNzbHkgc3RhdGVkIGluIHRoZSBpbW1lZGlhdGVseSBwcm9jZWVkaW5nIHNlbnRlbmNlLCB0aGUgT3JpZ2luYWwKK1dvcmsgaXMgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlIG9uIGFuICJBUyBJUyIgQkFTSVMgYW5kIFdJVEhPVVQKK1dBUlJBTlRZLCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwKK3RoZSB3YXJyYW50aWVzIG9mIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBCitQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBPRiBUSEUgT1JJR0lOQUwKK1dPUksgSVMgV0lUSCBZT1UuIFRoaXMgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBjb25zdGl0dXRlcyBhbiBlc3NlbnRpYWwKK3BhcnQgb2YgdGhpcyBMaWNlbnNlLiBObyBsaWNlbnNlIHRvIE9yaWdpbmFsIFdvcmsgaXMgZ3JhbnRlZCBoZXJldW5kZXIKK2V4Y2VwdCB1bmRlciB0aGlzIGRpc2NsYWltZXIuCisKKzgpIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBVbmRlciBubyBjaXJjdW1zdGFuY2VzIGFuZCB1bmRlciBubyBsZWdhbAordGhlb3J5LCB3aGV0aGVyIGluIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgY29udHJhY3QsIG9yIG90aGVyd2lzZSwKK3NoYWxsIHRoZSBMaWNlbnNvciBiZSBsaWFibGUgdG8gYW55IHBlcnNvbiBmb3IgYW55IGRpcmVjdCwgaW5kaXJlY3QsCitzcGVjaWFsLCBpbmNpZGVudGFsLCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb2YgYW55IGNoYXJhY3RlciBhcmlzaW5nCithcyBhIHJlc3VsdCBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHVzZSBvZiB0aGUgT3JpZ2luYWwgV29yayBpbmNsdWRpbmcsCit3aXRob3V0IGxpbWl0YXRpb24sIGRhbWFnZXMgZm9yIGxvc3Mgb2YgZ29vZHdpbGwsIHdvcmsgc3RvcHBhZ2UsIGNvbXB1dGVyCitmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCBvciBhbnkgYW5kIGFsbCBvdGhlciBjb21tZXJjaWFsIGRhbWFnZXMgb3IKK2xvc3Nlcy4gVGhpcyBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBzaGFsbCBub3QgYXBwbHkgdG8gbGlhYmlsaXR5IGZvcgorZGVhdGggb3IgcGVyc29uYWwgaW5qdXJ5IHJlc3VsdGluZyBmcm9tIExpY2Vuc29yJ3MgbmVnbGlnZW5jZSB0byB0aGUKK2V4dGVudCBhcHBsaWNhYmxlIGxhdyBwcm9oaWJpdHMgc3VjaCBsaW1pdGF0aW9uLiBTb21lIGp1cmlzZGljdGlvbnMgZG8KK25vdCBhbGxvdyB0aGUgZXhjbHVzaW9uIG9yIGxpbWl0YXRpb24gb2YgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsCitkYW1hZ2VzLCBzbyB0aGlzIGV4Y2x1c2lvbiBhbmQgbGltaXRhdGlvbiBtYXkgbm90IGFwcGx5IHRvIFlvdS4KKworOSkgQWNjZXB0YW5jZSBhbmQgVGVybWluYXRpb24uIElmIFlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgT3JpZ2luYWwKK1dvcmsgb3IgYSBEZXJpdmF0aXZlIFdvcmssIFlvdSBtdXN0IG1ha2UgYSByZWFzb25hYmxlIGVmZm9ydCB1bmRlciB0aGUKK2NpcmN1bXN0YW5jZXMgdG8gb2J0YWluIHRoZSBleHByZXNzIGFzc2VudCBvZiByZWNpcGllbnRzIHRvIHRoZSB0ZXJtcyBvZgordGhpcyBMaWNlbnNlLiBOb3RoaW5nIGVsc2UgYnV0IHRoaXMgTGljZW5zZSAob3IgYW5vdGhlciB3cml0dGVuIGFncmVlbWVudAorYmV0d2VlbiBMaWNlbnNvciBhbmQgWW91KSBncmFudHMgWW91IHBlcm1pc3Npb24gdG8gY3JlYXRlIERlcml2YXRpdmUgV29ya3MKK2Jhc2VkIHVwb24gdGhlIE9yaWdpbmFsIFdvcmsgb3IgdG8gZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZAoraW4gU2VjdGlvbiAxIGhlcmVpbiwgYW5kIGFueSBhdHRlbXB0IHRvIGRvIHNvIGV4Y2VwdCB1bmRlciB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSAob3IgYW5vdGhlciB3cml0dGVuIGFncmVlbWVudCBiZXR3ZWVuIExpY2Vuc29yIGFuZCBZb3UpCitpcyBleHByZXNzbHkgcHJvaGliaXRlZCBieSBVLlMuIGNvcHlyaWdodCBsYXcsIHRoZSBlcXVpdmFsZW50IGxhd3Mgb2YKK290aGVyIGNvdW50cmllcywgYW5kIGJ5IGludGVybmF0aW9uYWwgdHJlYXR5LiBUaGVyZWZvcmUsIGJ5IGV4ZXJjaXNpbmcKK2FueSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gWW91IGluIFNlY3Rpb24gMSBoZXJlaW4sIFlvdSBpbmRpY2F0ZSBZb3VyCithY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSBhbmQgYWxsIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gVGhpcworTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgaW1tZWRpYXRlbHkgYW5kIHlvdSBtYXkgbm8gbG9uZ2VyIGV4ZXJjaXNlIGFueQorb2YgdGhlIHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSB0aGlzIExpY2Vuc2UgdXBvbiBZb3VyIGZhaWx1cmUgdG8gaG9ub3IKK3RoZSBwcm92aXNvIGluIFNlY3Rpb24gMShjKSBoZXJlaW4uCisKKzEwKSBUZXJtaW5hdGlvbiBmb3IgUGF0ZW50IEFjdGlvbi4gVGhpcyBMaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZQorYXV0b21hdGljYWxseSBhbmQgWW91IG1heSBubyBsb25nZXIgZXhlcmNpc2UgYW55IG9mIHRoZSByaWdodHMgZ3JhbnRlZAordG8gWW91IGJ5IHRoaXMgTGljZW5zZSBhcyBvZiB0aGUgZGF0ZSBZb3UgY29tbWVuY2UgYW4gYWN0aW9uLCBpbmNsdWRpbmcKK2EgY3Jvc3MtY2xhaW0gb3IgY291bnRlcmNsYWltLCBhZ2FpbnN0IExpY2Vuc29yIG9yIGFueSBsaWNlbnNlZSBhbGxlZ2luZwordGhhdCB0aGUgT3JpZ2luYWwgV29yayBpbmZyaW5nZXMgYSBwYXRlbnQuIFRoaXMgdGVybWluYXRpb24gcHJvdmlzaW9uCitzaGFsbCBub3QgYXBwbHkgZm9yIGFuIGFjdGlvbiBhbGxlZ2luZyBwYXRlbnQgaW5mcmluZ2VtZW50IGJ5IGNvbWJpbmF0aW9ucworb2YgdGhlIE9yaWdpbmFsIFdvcmsgd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZS4KKworMTEpIEp1cmlzZGljdGlvbiwgVmVudWUgYW5kIEdvdmVybmluZyBMYXcuIEFueSBhY3Rpb24gb3Igc3VpdCByZWxhdGluZyB0byB0aGlzIExpY2Vuc2UgbWF5IGJlIGJyb3VnaHQgb25seSBpbiB0aGUgY291cnRzIG9mIGEganVyaXNkaWN0aW9uIHdoZXJlaW4gdGhlIExpY2Vuc29yIHJlc2lkZXMgb3IgaW4gd2hpY2ggTGljZW5zb3IgY29uZHVjdHMgaXRzIHByaW1hcnkgYnVzaW5lc3MsIGFuZCB1bmRlciB0aGUgbGF3cyBvZiB0aGF0IGp1cmlzZGljdGlvbiBleGNsdWRpbmcgaXRzIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IHVzZSBvZiB0aGUgT3JpZ2luYWwgV29yayBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2Ugb3IgYWZ0ZXIgaXRzIHRlcm1pbmF0aW9uIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIHJlcXVpcmVtZW50cyBhbmQgcGVuYWx0aWVzIG9mIHRoZSBVLlMuIENvcHlyaWdodCBBY3QsIDE3IFUuUy5DLiDCpyAxMDEgZXQgc2VxLiwgdGhlIGVxdWl2YWxlbnQgbGF3cyBvZiBvdGhlciBjb3VudHJpZXMsIGFuZCBpbnRlcm5hdGlvbmFsIHRyZWF0eS4gVGhpcyBzZWN0aW9uIHNoYWxsIHN1cnZpdmUgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gCisKKzEyKSBBdHRvcm5leXMgRmVlcy4gSW4gYW55IGFjdGlvbiB0byBlbmZvcmNlIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2Ugb3IKK3NlZWtpbmcgZGFtYWdlcyByZWxhdGluZyB0aGVyZXRvLCB0aGUgcHJldmFpbGluZyBwYXJ0eSBzaGFsbCBiZSBlbnRpdGxlZAordG8gcmVjb3ZlciBpdHMgY29zdHMgYW5kIGV4cGVuc2VzLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwKK3JlYXNvbmFibGUgYXR0b3JuZXlzJyBmZWVzIGFuZCBjb3N0cyBpbmN1cnJlZCBpbiBjb25uZWN0aW9uIHdpdGggc3VjaAorYWN0aW9uLCBpbmNsdWRpbmcgYW55IGFwcGVhbCBvZiBzdWNoIGFjdGlvbi4gVGhpcyBzZWN0aW9uIHNoYWxsIHN1cnZpdmUKK3RoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuCisKKzEzKSBNaXNjZWxsYW5lb3VzLiBUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50Citjb25jZXJuaW5nIHRoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlCitpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8KK3RoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuCisKKzE0KSBEZWZpbml0aW9uIG9mICJZb3UiIGluIFRoaXMgTGljZW5zZS4gIllvdSIgdGhyb3VnaG91dCB0aGlzIExpY2Vuc2UsCit3aGV0aGVyIGluIHVwcGVyIG9yIGxvd2VyIGNhc2UsIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkKK2V4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcworTGljZW5zZS4gRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBpbmNsdWRlcyBhbnkgZW50aXR5IHRoYXQgY29udHJvbHMsCitpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIHlvdS4gRm9yIHB1cnBvc2VzIG9mCit0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvCitjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3QKK29yIG90aGVyd2lzZSwgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQorb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworMTUpIFJpZ2h0IHRvIFVzZS4gWW91IG1heSB1c2UgdGhlIE9yaWdpbmFsIFdvcmsgaW4gYWxsIHdheXMgbm90IG90aGVyd2lzZQorcmVzdHJpY3RlZCBvciBjb25kaXRpb25lZCBieSB0aGlzIExpY2Vuc2Ugb3IgYnkgbGF3LCBhbmQgTGljZW5zb3IgcHJvbWlzZXMKK25vdCB0byBpbnRlcmZlcmUgd2l0aCBvciBiZSByZXNwb25zaWJsZSBmb3Igc3VjaCB1c2VzIGJ5IFlvdS4KKworVGhpcyBsaWNlbnNlIGlzIENvcHlyaWdodCAoQykgMjAwMy0yMDA0IExhd3JlbmNlIEUuIFJvc2VuLiBBbGwgcmlnaHRzCityZXNlcnZlZC4gUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHRoaXMKK2xpY2Vuc2Ugd2l0aG91dCBtb2RpZmljYXRpb24uIFRoaXMgbGljZW5zZSBtYXkgbm90IGJlIG1vZGlmaWVkIHdpdGhvdXQKK3RoZSBleHByZXNzIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiBpdHMgY29weXJpZ2h0IG93bmVyLgorCmRpZmYgLS1naXQgYS9saWNlbnNlcy9PVE4gYi9saWNlbnNlcy9PVE4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE4MjY3ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL09UTgpAQCAtMCwwICsxLDU3IEBACitPUkFDTEUgVEVDSE5PTE9HWSBORVRXT1JLIAorREVWRUxPUE1FTlQgTElDRU5TRSBBR1JFRU1FTlQKKworIldlLCIgInVzLCIgYW5kICJvdXIiIHJlZmVycyB0byBPcmFjbGUgQ29ycG9yYXRpb24uICAiWW91IiBhbmQgInlvdXIiIHJlZmVycyB0byB0aGUgaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCB3aXNoZXMgdG8gdXNlIHRoZSBwcm9ncmFtcyBmcm9tIE9yYWNsZS4gICJQcm9ncmFtcyIgcmVmZXJzIHRvIHRoZSBPcmFjbGUgc29mdHdhcmUgcHJvZHVjdCB5b3Ugd2lzaCB0byBkb3dubG9hZCBhbmQgdXNlIGFuZCBwcm9ncmFtIGRvY3VtZW50YXRpb24uICAiTGljZW5zZSIgcmVmZXJzIHRvIHlvdXIgcmlnaHQgdG8gdXNlIHRoZSBwcm9ncmFtcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBhZ3JlZW1lbnQuICBUaGlzIGFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgc3Vic3RhbnRpdmUgYW5kIHByb2NlZHVyYWwgbGF3cyBvZiBDYWxpZm9ybmlhLiAgWW91IGFuZCBPcmFjbGUgYWdyZWUgdG8gc3VibWl0IHRvIHRoZSBleGNsdXNpdmUganVyaXNkaWN0aW9uIG9mLCBhbmQgdmVudWUgaW4sIHRoZSBjb3VydHMgb2YgU2FuIEZyYW5jaXNjbywgU2FuIE1hdGVvLCBvciBTYW50YSBDbGFyYSBjb3VudGllcyBpbiBDYWxpZm9ybmlhIGluIGFueSBkaXNwdXRlIGFyaXNpbmcgb3V0IG9mIG9yIHJlbGF0aW5nIHRvIHRoaXMgYWdyZWVtZW50LgorCitXZSBhcmUgd2lsbGluZyB0byBsaWNlbnNlIHRoZSBwcm9ncmFtcyB0byB5b3Ugb25seSB1cG9uIHRoZSBjb25kaXRpb24gdGhhdCB5b3UgYWNjZXB0IGFsbCBvZiB0aGUgdGVybXMgY29udGFpbmVkIGluIHRoaXMgYWdyZWVtZW50LiAgUmVhZCB0aGUgdGVybXMgY2FyZWZ1bGx5IGFuZCBzZWxlY3QgdGhlICJBY2NlcHQiIGJ1dHRvbiBhdCB0aGUgYm90dG9tIG9mIHRoZSBwYWdlIHRvIGNvbmZpcm0geW91ciBhY2NlcHRhbmNlLiAgSWYgeW91IGFyZSBub3Qgd2lsbGluZyB0byBiZSBib3VuZCBieSB0aGVzZSB0ZXJtcywgc2VsZWN0IHRoZSAiRG8gTm90IEFjY2VwdCIgYnV0dG9uIGFuZCB0aGUgcmVnaXN0cmF0aW9uIHByb2Nlc3Mgd2lsbCBub3QgY29udGludWUuCisKK0xpY2Vuc2UgUmlnaHRzCitXZSBncmFudCB5b3UgYSBub25leGNsdXNpdmUsIG5vbnRyYW5zZmVyYWJsZSBsaW1pdGVkIGxpY2Vuc2UgdG8gdXNlIHRoZSBwcm9ncmFtcyBvbmx5IGZvciB0aGUgcHVycG9zZSBvZiBkZXZlbG9waW5nIGEgc2luZ2xlIHByb3RvdHlwZSBvZiB5b3VyIGFwcGxpY2F0aW9uLCBhbmQgbm90IGZvciBhbnkgb3RoZXIgcHVycG9zZS4gIElmIHlvdSB1c2UgdGhlIGFwcGxpY2F0aW9uIHlvdSBkZXZlbG9wIHVuZGVyIHRoaXMgbGljZW5zZSBmb3IgYW55IGludGVybmFsIGRhdGEgcHJvY2Vzc2luZyBvciBmb3IgYW55IGNvbW1lcmNpYWwgb3IgcHJvZHVjdGlvbiBwdXJwb3Nlcywgb3IgeW91IHdhbnQgdG8gdXNlIHRoZSBwcm9ncmFtcyBmb3IgYW55IHB1cnBvc2Ugb3RoZXIgdGhhbiBhcyBwZXJtaXR0ZWQgdW5kZXIgdGhpcyBhZ3JlZW1lbnQsIHlvdSBtdXN0IGNvbnRhY3QgdXMsIG9yIGFuIE9yYWNsZSByZXNlbGxlciwgdG8gb2J0YWluIHRoZSBhcHByb3ByaWF0ZSBsaWNlbnNlLiAgV2UgbWF5IGF1ZGl0IHlvdXIgdXNlIG9mIHRoZSBwcm9ncmFtcy4gIFByb2dyYW0gZG9jdW1lbnRhdGlvbiBtYXkgYWNjZXNzZWQgb25saW5lIGF0IC9kb2NzLgorCisKK093bmVyc2hpcCBhbmQgUmVzdHJpY3Rpb25zCitXZSByZXRhaW4gYWxsIG93bmVyc2hpcCBhbmQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBpbiB0aGUgcHJvZ3JhbXMuICBUaGUgcHJvZ3JhbXMgbWF5IGJlIGluc3RhbGxlZCBvbiBvbmUgY29tcHV0ZXIgb25seSwgYW5kIHVzZWQgYnkgb25lIHBlcnNvbiBpbiB0aGUgb3BlcmF0aW5nIGVudmlyb25tZW50IGlkZW50aWZpZWQgYnkgdXMuICBZb3UgbWF5IG1ha2Ugb25lIGNvcHkgb2YgdGhlIHByb2dyYW1zIGZvciBiYWNrdXAgcHVycG9zZXMuCisKK1lvdSBtYXkgbm90OgordXNlIHRoZSBwcm9ncmFtcyBmb3IgeW91ciBvd24gaW50ZXJuYWwgZGF0YSBwcm9jZXNzaW5nIG9yIGZvciBhbnkgY29tbWVyY2lhbCBvciBwcm9kdWN0aW9uIHB1cnBvc2VzLCBvciB1c2UgdGhlIHByb2dyYW1zIGZvciBhbnkgcHVycG9zZSBleGNlcHQgdGhlIGRldmVsb3BtZW50IG9mIGEgc2luZ2xlIHByb3RvdHlwZSBvZiB5b3VyIGFwcGxpY2F0aW9uOwordXNlIHRoZSBhcHBsaWNhdGlvbiB5b3UgZGV2ZWxvcCB3aXRoIHRoZSBwcm9ncmFtcyBmb3IgYW55IGludGVybmFsIGRhdGEgcHJvY2Vzc2luZyBvciBjb21tZXJjaWFsIG9yIHByb2R1Y3Rpb24gcHVycG9zZXMgd2l0aG91dCBzZWN1cmluZyBhbiBhcHByb3ByaWF0ZSBsaWNlbnNlIGZyb20gdXM7Citjb250aW51ZSB0byBkZXZlbG9wIHlvdXIgYXBwbGljYXRpb24gYWZ0ZXIgeW91IGhhdmUgdXNlZCBpdCBmb3IgYW55IGludGVybmFsIGRhdGEgcHJvY2Vzc2luZywgY29tbWVyY2lhbCBvciBwcm9kdWN0aW9uIHB1cnBvc2Ugd2l0aG91dCBzZWN1cmluZyBhbiBhcHByb3ByaWF0ZSBsaWNlbnNlIGZyb20gdXMsIG9yIGFuIE9yYWNsZSByZXNlbGxlcjsKK3JlbW92ZSBvciBtb2RpZnkgYW55IHByb2dyYW0gbWFya2luZ3Mgb3IgYW55IG5vdGljZSBvZiBvdXIgcHJvcHJpZXRhcnkgcmlnaHRzOworbWFrZSB0aGUgcHJvZ3JhbXMgYXZhaWxhYmxlIGluIGFueSBtYW5uZXIgdG8gYW55IHRoaXJkIHBhcnR5OwordXNlIHRoZSBwcm9ncmFtcyB0byBwcm92aWRlIHRoaXJkIHBhcnR5IHRyYWluaW5nOworYXNzaWduIHRoaXMgYWdyZWVtZW50IG9yIGdpdmUgb3IgdHJhbnNmZXIgdGhlIHByb2dyYW1zIG9yIGFuIGludGVyZXN0IGluIHRoZW0gdG8gYW5vdGhlciBpbmRpdmlkdWFsIG9yIGVudGl0eTsKK2NhdXNlIG9yIHBlcm1pdCByZXZlcnNlIGVuZ2luZWVyaW5nICh1bmxlc3MgcmVxdWlyZWQgYnkgbGF3IGZvciBpbnRlcm9wZXJhYmlsaXR5KSwgZGlzYXNzZW1ibHkgb3IgZGVjb21waWxhdGlvbiBvZiB0aGUgcHJvZ3JhbXM7CitkaXNjbG9zZSByZXN1bHRzIG9mIGFueSBwcm9ncmFtIGJlbmNobWFyayB0ZXN0cyB3aXRob3V0IG91ciBwcmlvciBjb25zZW50OyBvciwKKwordXNlIGFueSBPcmFjbGUgbmFtZSwgdHJhZGVtYXJrIG9yIGxvZ28uCisKK0V4cG9ydAorWW91IGFncmVlIHRoYXQgVS5TLiBleHBvcnQgY29udHJvbCBsYXdzIGFuZCBvdGhlciBhcHBsaWNhYmxlIGV4cG9ydCBhbmQgaW1wb3J0IGxhd3MgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBwcm9ncmFtcywgaW5jbHVkaW5nIHRlY2huaWNhbCBkYXRhOyBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBvbiBPcmFjbGUncyBHbG9iYWwgVHJhZGUgQ29tcGxpYW5jZSB3ZWIgc2l0ZSBsb2NhdGVkIGF0IGh0dHA6Ly93d3cub3JhY2xlLmNvbS9wcm9kdWN0cy9leHBvcnQvaW5kZXguaHRtbC4gIFlvdSBhZ3JlZSB0aGF0IG5laXRoZXIgdGhlIHByb2dyYW1zIG5vciBhbnkgZGlyZWN0IHByb2R1Y3QgdGhlcmVvZiB3aWxsIGJlIGV4cG9ydGVkLCBkaXJlY3RseSwgb3IgaW5kaXJlY3RseSwgaW4gdmlvbGF0aW9uIG9mIHRoZXNlIGxhd3MsIG9yIHdpbGwgYmUgdXNlZCBmb3IgYW55IHB1cnBvc2UgcHJvaGliaXRlZCBieSB0aGVzZSBsYXdzIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBudWNsZWFyLCBjaGVtaWNhbCwgb3IgYmlvbG9naWNhbCB3ZWFwb25zIHByb2xpZmVyYXRpb24uCisKK0Rpc2NsYWltZXIgb2YgV2FycmFudHkgYW5kIEV4Y2x1c2l2ZSBSZW1lZGllcworCitUSEUgUFJPR1JBTVMgQVJFIFBST1ZJREVEICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORC4gIFdFIEZVUlRIRVIgRElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMsIEVYUFJFU1MgQU5EIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQuCisKK0lOIE5PIEVWRU5UIFNIQUxMIFdFIEJFIExJQUJMRSBGT1IgQU5ZIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBQVU5JVElWRSBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIE9SIERBTUFHRVMgRk9SIExPU1MgT0YgUFJPRklUUywgUkVWRU5VRSwgREFUQSBPUiBEQVRBIFVTRSwgSU5DVVJSRUQgQlkgWU9VIE9SIEFOWSBUSElSRCBQQVJUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gSU4gQ09OVFJBQ1QgT1IgVE9SVCwgRVZFTiBJRiBXRSBIQVZFIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiAgT1VSIEVOVElSRSBMSUFCSUxJVFkgRk9SIERBTUFHRVMgSEVSRVVOREVSIFNIQUxMIElOIE5PIEVWRU5UIEVYQ0VFRCBPTkUgVEhPVVNBTkQgRE9MTEFSUyAoVS5TLiAkMSwwMDApLgorCitUcmlhbCBQcm9ncmFtcyBJbmNsdWRlZCBXaXRoIE9yZGVycworV2UgbWF5IGluY2x1ZGUgYWRkaXRpb25hbCBwcm9ncmFtcyB3aXRoIGFuIG9yZGVyIHdoaWNoIG1heSBiZSB1c2VkIGZvciB0cmlhbCBwdXJwb3NlcyBvbmx5LiAgWW91IHdpbGwgaGF2ZSAzMCBkYXlzIGZyb20gdGhlIGRlbGl2ZXJ5IGRhdGUgdG8gZXZhbHVhdGUgdGhlc2UgcHJvZ3JhbXMuICBBbnkgdXNlIG9mIHRoZXNlIHByb2dyYW1zIGFmdGVyIHRoZSAzMCBkYXkgdHJpYWwgcGVyaW9kIHJlcXVpcmVzIHlvdSB0byBvYnRhaW4gdGhlIGFwcGxpY2FibGUgbGljZW5zZS4gIFByb2dyYW1zIGxpY2Vuc2VkIGZvciB0cmlhbCBwdXJwb3NlcyBhcmUgcHJvdmlkZWQgImFzIGlzIiBhbmQgd2UgZG8gbm90IHByb3ZpZGUgdGVjaG5pY2FsIHN1cHBvcnQgb3IgYW55IHdhcnJhbnRpZXMgZm9yIHRoZXNlIHByb2dyYW1zLgorCisKK05vIFRlY2huaWNhbCBTdXBwb3J0CitPdXIgdGVjaG5pY2FsIHN1cHBvcnQgb3JnYW5pemF0aW9uIHdpbGwgbm90IHByb3ZpZGUgdGVjaG5pY2FsIHN1cHBvcnQsIHBob25lIHN1cHBvcnQsIG9yIHVwZGF0ZXMgdG8geW91IGZvciB0aGUgcHJvZ3JhbXMgbGljZW5zZWQgdW5kZXIgdGhpcyBhZ3JlZW1lbnQuCisKK0VuZCBvZiBBZ3JlZW1lbnQKK1lvdSBtYXkgdGVybWluYXRlIHRoaXMgYWdyZWVtZW50IGJ5IGRlc3Ryb3lpbmcgYWxsIGNvcGllcyBvZiB0aGUgcHJvZ3JhbXMuICBXZSBoYXZlIHRoZSByaWdodCB0byB0ZXJtaW5hdGUgeW91ciByaWdodCB0byB1c2UgdGhlIHByb2dyYW1zIGlmIHlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcyBhZ3JlZW1lbnQsIGluIHdoaWNoIGNhc2UgeW91IHNoYWxsIGRlc3Ryb3kgYWxsIGNvcGllcyBvZiB0aGUgcHJvZ3JhbXMuCisKK1JlbGF0aW9uc2hpcCBCZXR3ZWVuIHRoZSBQYXJ0aWVzCitUaGUgcmVsYXRpb25zaGlwIGJldHdlZW4geW91IGFuZCB1cyBpcyB0aGF0IG9mIGxpY2Vuc2VlL2xpY2Vuc29yLiAgTmVpdGhlciBwYXJ0eSB3aWxsIHJlcHJlc2VudCB0aGF0IGl0IGhhcyBhbnkgYXV0aG9yaXR5IHRvIGFzc3VtZSBvciBjcmVhdGUgYW55IG9ibGlnYXRpb24sIGV4cHJlc3Mgb3IgaW1wbGllZCwgb24gYmVoYWxmIG9mIHRoZSBvdGhlciBwYXJ0eSwgbm9yIHRvIHJlcHJlc2VudCB0aGUgb3RoZXIgcGFydHkgYXMgYWdlbnQsIGVtcGxveWVlLCBmcmFuY2hpc2VlLCBvciBpbiBhbnkgb3RoZXIgY2FwYWNpdHkuICBOb3RoaW5nIGluIHRoaXMgYWdyZWVtZW50IHNoYWxsIGJlIGNvbnN0cnVlZCB0byBsaW1pdCBlaXRoZXIgcGFydHkncyByaWdodCB0byBpbmRlcGVuZGVudGx5IGRldmVsb3Agb3IgZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aGF0IGlzIGZ1bmN0aW9uYWxseSBzaW1pbGFyIHRvIHRoZSBvdGhlciBwYXJ0eSdzIHByb2R1Y3RzLCBzbyBsb25nIGFzIHByb3ByaWV0YXJ5IGluZm9ybWF0aW9uIG9mIHRoZSBvdGhlciBwYXJ0eSBpcyBub3QgaW5jbHVkZWQgaW4gc3VjaCBzb2Z0d2FyZS4KKworT3BlbiBTb3VyY2UKKyJPcGVuIFNvdXJjZSIgc29mdHdhcmUgLSBzb2Z0d2FyZSBhdmFpbGFibGUgd2l0aG91dCBjaGFyZ2UgZm9yIHVzZSwgbW9kaWZpY2F0aW9uIGFuZCBkaXN0cmlidXRpb24gLSBpcyBvZnRlbiBsaWNlbnNlZCB1bmRlciB0ZXJtcyB0aGF0IHJlcXVpcmUgdGhlIHVzZXIgdG8gbWFrZSB0aGUgdXNlcidzIG1vZGlmaWNhdGlvbnMgdG8gdGhlIE9wZW4gU291cmNlIHNvZnR3YXJlIG9yIGFueSBzb2Z0d2FyZSB0aGF0IHRoZSB1c2VyICdjb21iaW5lcycgd2l0aCB0aGUgT3BlbiBTb3VyY2Ugc29mdHdhcmUgZnJlZWx5IGF2YWlsYWJsZSBpbiBzb3VyY2UgY29kZSBmb3JtLiAgSWYgeW91IHVzZSBPcGVuIFNvdXJjZSBzb2Z0d2FyZSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBwcm9ncmFtcywgeW91IG11c3QgZW5zdXJlIHRoYXQgeW91ciB1c2UgZG9lcyBub3Q6ICAoaSkgY3JlYXRlLCBvciBwdXJwb3J0IHRvIGNyZWF0ZSwgb2JsaWdhdGlvbnMgb2YgdXMgd2l0aCByZXNwZWN0IHRvIHRoZSBPcmFjbGUgcHJvZ3JhbXM7IG9yIChpaSkgZ3JhbnQsIG9yIHB1cnBvcnQgdG8gZ3JhbnQsIHRvIGFueSB0aGlyZCBwYXJ0eSBhbnkgcmlnaHRzIHRvIG9yIGltbXVuaXRpZXMgdW5kZXIgb3VyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvciBwcm9wcmlldGFyeSByaWdodHMgaW4gdGhlIE9yYWNsZSBwcm9ncmFtcy4gIEZvciBleGFtcGxlLCB5b3UgbWF5IG5vdCBkZXZlbG9wIGEgc29mdHdhcmUgcHJvZ3JhbSB1c2luZyBhbiBPcmFjbGUgcHJvZ3JhbSBhbmQgYW4gT3BlbiBTb3VyY2UgcHJvZ3JhbSB3aGVyZSBzdWNoIHVzZSByZXN1bHRzIGluIGEgcHJvZ3JhbSBmaWxlKHMpIHRoYXQgY29udGFpbnMgY29kZSBmcm9tIGJvdGggdGhlIE9yYWNsZSBwcm9ncmFtIGFuZCB0aGUgT3BlbiBTb3VyY2UgcHJvZ3JhbSAoaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBsaWJyYXJpZXMpIGlmIHRoZSBPcGVuIFNvdXJjZSBwcm9ncmFtIGlzIGxpY2Vuc2VkIHVuZGVyIGEgbGljZW5zZSB0aGF0IHJlcXVpcmVzIGFueSAibW9kaWZpY2F0aW9ucyIgYmUgbWFkZSBmcmVlbHkgYXZhaWxhYmxlLiAgWW91IGFsc28gbWF5IG5vdCBjb21iaW5lIHRoZSBPcmFjbGUgcHJvZ3JhbSB3aXRoIHByb2dyYW1zIGxpY2Vuc2VkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoIkdQTCIpIGluIGFueSBtYW5uZXIgdGhhdCBjb3VsZCBjYXVzZSwgb3IgY291bGQgYmUgaW50ZXJwcmV0ZWQgb3IgYXNzZXJ0ZWQgdG8gY2F1c2UsIHRoZSBPcmFjbGUgcHJvZ3JhbSBvciBhbnkgbW9kaWZpY2F0aW9ucyB0aGVyZXRvIHRvIGJlY29tZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgR1BMLgorCitFbnRpcmUgQWdyZWVtZW50CitZb3UgYWdyZWUgdGhhdCB0aGlzIGFncmVlbWVudCBpcyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGZvciB0aGUgcHJvZ3JhbXMgYW5kIGxpY2Vuc2VzLCBhbmQgdGhpcyBhZ3JlZW1lbnQgc3VwZXJzZWRlcyBhbGwgcHJpb3Igb3IgY29udGVtcG9yYW5lb3VzIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zLiAgSWYgYW55IHRlcm0gb2YgdGhpcyBhZ3JlZW1lbnQgaXMgZm91bmQgdG8gYmUgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlLCB0aGUgcmVtYWluaW5nIHByb3Zpc2lvbnMgd2lsbCByZW1haW4gZWZmZWN0aXZlLgorCisKK0xhc3QgdXBkYXRlZDogOS8xNi8wMwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvT3Blbi1DQVNDQURFLVRlY2hub2xvZ3ktUHVibGljLUxpY2Vuc2UtNi41IGIvbGljZW5zZXMvT3Blbi1DQVNDQURFLVRlY2hub2xvZ3ktUHVibGljLUxpY2Vuc2UtNi41Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZmEyOTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9PcGVuLUNBU0NBREUtVGVjaG5vbG9neS1QdWJsaWMtTGljZW5zZS02LjUKQEAgLTAsMCArMSwzMDAgQEAKK09wZW4gQ0FTQ0FERSBUZWNobm9sb2d5IFB1YmxpYyBMaWNlbnNlCitMaWNlbnNlIHZlcnNpb246IDYuNSBNYXJjaCwgMjAxMQorCitPcGVuIENBU0NBREUgUy5BLlMuIHJlbGVhc2VzIGFuZCBtYWtlcyBwdWJsaWNseSBhdmFpbGFibGUgdGhlIHNvdXJjZSBjb2RlIG9mIHRoZQorc29mdHdhcmUgT3BlbiBDQVNDQURFIFRlY2hub2xvZ3kgdG8gdGhlIGZyZWUgc29mdHdhcmUgZGV2ZWxvcG1lbnQgY29tbXVuaXR5Cit1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBsaWNlbnNlLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBsaWNlbnNlIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55IHBhdGVudHMgb3IKK290aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueSBzdWNoIGNsYWltczsgdGhpcworbGljZW5zZSBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUKK2Rpc3RyaWJ1dGlvbiBzeXN0ZW0sIHdoaWNoIGlzIGltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gTWFueQorcGVvcGxlIGhhdmUgbWFkZSBnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlCitkaXN0cmlidXRlZCB0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdAorc3lzdGVtOyBpdCBpcyB1cCB0byB0aGUgYXV0aG9yL2Rvbm9yIHRvIGRlY2lkZSBpZiBoZSBvciBzaGUgaXMgd2lsbGluZyB0bworZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlciBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90IGltcG9zZSB0aGF0CitjaG9pY2UuCisKKworUGxlYXNlIHJlYWQgdGhpcyBsaWNlbnNlIGNhcmVmdWxseSBhbmQgY29tcGxldGVseSBiZWZvcmUgZG93bmxvYWRpbmcgdGhpcworc29mdHdhcmUuIEJ5IGRvd25sb2FkaW5nLCB1c2luZywgbW9kaWZ5aW5nLCBkaXN0cmlidXRpbmcgYW5kIHN1YmxpY2Vuc2luZyB0aGlzCitzb2Z0d2FyZSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSB0byBiZSBib3VuZCBieSB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMKK29mIHRoaXMgbGljZW5zZS4gSWYgeW91IGRvIG5vdCB3YW50IHRvIGFjY2VwdCBvciBjYW5ub3QgYWNjZXB0IGZvciBhbnkgcmVhc29ucwordGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgbGljZW5zZSwgcGxlYXNlIGRvIG5vdCBkb3dubG9hZCBvciB1c2UgaW4gYW55CittYW5uZXIgdGhpcyBzb2Z0d2FyZS4KKworMS4gRGVmaW5pdGlvbnMKKworVW5sZXNzIHRoZXJlIGlzIHNvbWV0aGluZyBpbiB0aGUgc3ViamVjdCBtYXR0ZXIgb3IgaW4gdGhlIGNvbnRleHQgaW5jb25zaXN0ZW50Cit0aGVyZXdpdGgsIHRoZSBjYXBpdGFsaXplZCB0ZXJtcyB1c2VkIGluIHRoaXMgTGljZW5zZSBzaGFsbCBoYXZlIHRoZSBmb2xsb3dpbmcKK21lYW5pbmcuCisKKyJBcHBsaWNhYmxlIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBSaWdodHMiIG1lYW5zIChhKSB3aXRoIHJlc3BlY3QgdG8gdGhlIEluaXRpYWwKK0RldmVsb3BlciwgYW55IHJpZ2h0cyB1bmRlciBwYXRlbnRzIG9yIHBhdGVudHMgYXBwbGljYXRpb25zIG9yIG90aGVyCitpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIHRoYXQgYXJlIG5vdyBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIG93bmVkIGJ5IG9yCithc3NpZ25lZCB0byB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIHRoYXQgY292ZXIgc3ViamVjdCBtYXR0ZXIgY29udGFpbmVkIGluIHRoZQorT3JpZ2luYWwgQ29kZSwgYnV0IG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwKK2Rpc3RyaWJ1dGUgb3Igc3VibGljZW5zZSB0aGUgT3JpZ2luYWwgQ29kZSB3aXRob3V0IGluZnJpbmdlbWVudDsgYW5kIChiKSB3aXRoCityZXNwZWN0IHRvIFlvdSBvciBhbnkgQ29udHJpYnV0b3IsIGFueSByaWdodHMgdW5kZXIgcGF0ZW50cyBvciBwYXRlbnRzCithcHBsaWNhdGlvbnMgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyB0aGF0IGFyZSBub3cgb3IgaGVyZWFmdGVyCithY3F1aXJlZCwgb3duZWQgYnkgb3IgYXNzaWduZWQgdG8gWW91IG9yIHRvIHN1Y2ggQ29udHJpYnV0b3IgYW5kIHRoYXQgY292ZXIKK3N1YmplY3QgbWF0dGVyIGNvbnRhaW5lZCBpbiBZb3VyIE1vZGlmaWNhdGlvbnMgb3IgaW4gc3VjaCBDb250cmlidXRvcidzCitNb2RpZmljYXRpb25zLCB0YWtlbiBhbG9uZSBvciBpbiBjb21iaW5hdGlvbiB3aXRoIE9yaWdpbmFsIENvZGUuCisKKyJDb250cmlidXRvciIgbWVhbnMgZWFjaCBpbmRpdmlkdWFsIG9yIGxlZ2FsIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMKK3RvIHRoZSBjcmVhdGlvbiBvZiBhbnkgTW9kaWZpY2F0aW9uLCBpbmNsdWRpbmcgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLgorCisiRGVyaXZhdGl2ZSBQcm9ncmFtIjogbWVhbnMgYSBuZXcgcHJvZ3JhbSBjb21iaW5pbmcgdGhlIFNvZnR3YXJlIG9yIHBvcnRpb25zCit0aGVyZW9mIHdpdGggb3RoZXIgc291cmNlIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyJJbml0aWFsIERldmVsb3BlciI6IG1lYW5zIE9wZW4gQ0FTQ0FERSBTLkEuUy4sIHdpdGggbWFpbiBvZmZpY2VzICAgYXQgMSwgcGxhY2UKK2RlcyBGcsOocmVzIE1vbnRnb2xmaWVyLCA3ODI4MCBHdXlhbmNvdXJ0LCBGcmFuY2UuCisKKyJNb2RpZmljYXRpb25zIjogbWVhbiBhbnkgYWRkaXRpb24gdG8sIGRlbGV0aW9uIGZyb20gb3IgY2hhbmdlIHRvIHRoZSBzdWJzdGFuY2UKK29yIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlIFNvZnR3YXJlLiBXaGVuIHNvdXJjZSBjb2RlIG9mIHRoZSBTb2Z0d2FyZSBpcyByZWxlYXNlZAorYXMgYSBzZXJpZXMgb2YgZmlsZXMsIGEgTW9kaWZpY2F0aW9uIGlzOiAoYSkgYW55IGFkZGl0aW9uIHRvLCBkZWxldGlvbiBmcm9tIG9yCitjaGFuZ2UgdG8gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nIHRoZSBTb2Z0d2FyZSBvciAoYikgYW55IG5ldyBmaWxlIG9yCitvdGhlciByZXByZXNlbnRhdGlvbiBvZiBjb21wdXRlciBwcm9ncmFtIHN0YXRlbWVudHMgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZgordGhlIFNvZnR3YXJlLiBCeSB3YXkgb2YgZXhhbXBsZSwgTW9kaWZpY2F0aW9ucyBpbmNsdWRlIGFueSBkZWJ1ZyBvZiwgb3IKK2ltcHJvdmVtZW50IHRvLCB0aGUgT3JpZ2luYWwgQ29kZSBvciBhbnkgb2YgaXRzIGNvbXBvbmVudHMgb3IgcG9ydGlvbnMgYXMgd2VsbAorYXMgaXRzIG5leHQgdmVyc2lvbnMgb3IgcmVsZWFzZXMgdGhlcmVvZi4KKworIk9yaWdpbmFsIENvZGUiOiBtZWFucyAoYSkgdGhlIHNvdXJjZSBjb2RlIG9mIHRoZSBzb2Z0d2FyZSBPcGVuIENBU0NBREUKK1RlY2hub2xvZ3kgb3JpZ2luYWxseSBtYWRlIGF2YWlsYWJsZSBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgdW5kZXIgdGhpcworTGljZW5zZSwgaW5jbHVkaW5nIHRoZSBzb3VyY2UgY29kZSBvZiBhbnkgdXBkYXRlcyBvciB1cGdyYWRlcyBvZiB0aGUgT3JpZ2luYWwKK0NvZGUgYW5kIChiKSB0aGUgb2JqZWN0IGNvZGUgY29tcGlsZWQgZnJvbSBzdWNoIHNvdXJjZSBjb2RlIGFuZCBvcmlnaW5hbGx5IG1hZGUKK2F2YWlsYWJsZSBieSBJbml0aWFsIERldmVsb3BlciB1bmRlciB0aGlzIExpY2Vuc2UuCisKKyJTb2Z0d2FyZSI6IG1lYW5zIHRoZSBPcmlnaW5hbCBDb2RlLCB0aGUgTW9kaWZpY2F0aW9ucywgdGhlIGNvbWJpbmF0aW9uIG9mCitPcmlnaW5hbCBDb2RlIGFuZCBhbnkgTW9kaWZpY2F0aW9ucyBvciBhbnkgcmVzcGVjdGl2ZSBwb3J0aW9ucyB0aGVyZW9mLgorCisiWW91IiBvciAiWW91ciI6IG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIKK3RoaXMgTGljZW5zZS4KKworCisyLiBBY2NlcHRhbmNlIG9mIGxpY2Vuc2UKKworQnkgdXNpbmcsIHJlcHJvZHVjaW5nLCBtb2RpZnlpbmcsIGRpc3RyaWJ1dGluZyBvciBzdWJsaWNlbnNpbmcgdGhlIFNvZnR3YXJlIG9yCithbnkgcG9ydGlvbiB0aGVyZW9mLCBZb3UgZXhwcmVzc2x5IGluZGljYXRlIFlvdXIgYWNjZXB0YW5jZSBvZiB0aGUgdGVybXMgYW5kCitjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSBhbmQgdW5kZXJ0YWtlIHRvIGFjdCBpbiBhY2NvcmRhbmNlIHdpdGggYWxsIHRoZQorcHJvdmlzaW9ucyBvZiB0aGlzIExpY2Vuc2UgYXBwbGljYWJsZSB0byBZb3UuCisKKworMy4gU2NvcGUgYW5kIHB1cnBvc2UKKworVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gdGhlIFNvZnR3YXJlIGFuZCBZb3UgbWF5IG5vdCB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LAorZGlzdHJpYnV0ZSwgc3VibGljZW5zZSBvciBjaXJjdWxhdGUgdGhlIFNvZnR3YXJlLCBvciBhbnkgcG9ydGlvbiB0aGVyZW9mLCBleGNlcHQKK2FzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuIEFueSBhdHRlbXB0IHRvIG90aGVyd2lzZSB1c2UsCityZXByb2R1Y2UsIG1vZGlmeSwgZGlzdHJpYnV0ZSBvciBzdWJsaWNlbnNlIHRoZSBTb2Z0d2FyZSBpcyB2b2lkIGFuZCB3aWxsCithdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSBZb3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuCisKKworNC4gQ29udHJpYnV0b3IgbGljZW5zZQorCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQKK2VhY2ggb2YgdGhlIENvbnRyaWJ1dG9ycyBoZXJlYnkgZ3JhbnQgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLAoraXJyZXZvY2FibGUgYW5kIG5vbi1leGNsdXNpdmUgbGljZW5zZSB1bmRlciB0aGUgQXBwbGljYWJsZSBJbnRlbGxlY3R1YWwgUHJvcGVydHkKK1JpZ2h0cyB0aGV5IG93biBvciBjb250cm9sLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlCit0aGUgU29mdHdhcmUgcHJvdmlkZWQgdGhhdDoKKworWW91IHJlcHJvZHVjZSBpbiBhbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSB0aGUgY29weXJpZ2h0IGFuZCBvdGhlciBwcm9wcmlldGFyeQorbm90aWNlcyBhbmQgZGlzY2xhaW1lcnMgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFzIHRoZXkgYXBwZWFyIGluIHRoZSBPcmlnaW5hbAorQ29kZSBhbmQgYXR0YWNoZWQgaGVyZXRvIGFzIFNjaGVkdWxlICJBIiBhbmQgYW55IG90aGVyIG5vdGljZXMgb3IgZGlzY2xhaW1lcnMKK2F0dGFjaGVkIHRvIHRoZSBTb2Z0d2FyZSBhbmQga2VlcCBpbnRhY3QgYWxsIG5vdGljZXMgaW4gdGhlIE9yaWdpbmFsIENvZGUgdGhhdAorcmVmZXIgdG8gdGhpcyBMaWNlbnNlIGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7CitZb3UgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgU29mdHdhcmUgWW91CitkaXN0cmlidXRlOworSWYgeW91IGRpc3RyaWJ1dGUgb3Igc3VibGljZW5zZSB0aGUgU29mdHdhcmUgKGFzIG1vZGlmaWVkIGJ5IFlvdSBvciBvbiBZb3VyCitiZWhhbGYgYXMgdGhlIGNhc2UgbWF5IGJlKSwgWW91IGNhdXNlIHN1Y2ggU29mdHdhcmUgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSwKK2F0IG5vIGNoYXJnZSwgdG8gYWxsIHRoaXJkIHBhcnRpZXMsIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUKK0xpY2Vuc2UsIG1ha2luZyBpbiBwYXJ0aWN1bGFyIGF2YWlsYWJsZSB0byBhbGwgdGhpcmQgcGFydGllcyB0aGUgc291cmNlIGNvZGUgb2YKK3RoZSBTb2Z0d2FyZTsKK1lvdSBkb2N1bWVudCBhbGwgWW91ciBNb2RpZmljYXRpb25zLCBpbmRpY2F0ZSB0aGUgZGF0ZSBvZiBlYWNoIHN1Y2gKK01vZGlmaWNhdGlvbnMsIGRlc2lnbmF0ZSB0aGUgdmVyc2lvbiBvZiB0aGUgU29mdHdhcmUgWW91IHVzZWQsIHByb21pbmVudGx5CitpbmNsdWRlIGEgZmlsZSBjYXJyeWluZyBzdWNoIGluZm9ybWF0aW9uIHdpdGggcmVzcGVjdCB0byB0aGUgTW9kaWZpY2F0aW9ucyBhbmQKK2R1cGxpY2F0ZSB0aGUgY29weXJpZ2h0IGFuZCBvdGhlciBwcm9wcmlldGFyeSBub3RpY2VzIGFuZCBkaXNjbGFpbWVycyBhdHRhY2hlZAoraGVyZXRvIGFzIFNjaGVkdWxlICJCIiBvciBhbnkgb3RoZXIgbm90aWNlcyBvciBkaXNjbGFpbWVycyBhdHRhY2hlZCB0byB0aGUKK1NvZnR3YXJlIHdpdGggeW91ciBNb2RpZmljYXRpb25zLgorCitGb3IgZ3JlYXRlciBjZXJ0YWludHksIGl0IGlzIGV4cHJlc3NseSB1bmRlcnN0b29kIHRoYXQgWW91IG1heSBmcmVlbHkgY3JlYXRlCitEZXJpdmF0aXZlIFByb2dyYW1zICh3aXRob3V0IGFueSBvYmxpZ2F0aW9uIHRvIHB1Ymxpc2ggc3VjaCBEZXJpdmF0aXZlIFByb2dyYW0pCithbmQgZGlzdHJpYnV0ZSBzYW1lIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggY2FzZSwgWW91IG11c3QgZW5zdXJlIHRoYXQgYWxsCit0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgU29mdHdhcmUgb3IgYW55IHBvcnRpb24KK3RoZXJlb2YuCisKKworNS4gWW91ciBsaWNlbnNlCisKK1lvdSBoZXJlYnkgZ3JhbnQgYWxsIENvbnRyaWJ1dG9ycyBhbmQgYW55b25lIHdobyBiZWNvbWVzIGEgcGFydHkgdW5kZXIgdGhpcworTGljZW5zZSBhIHdvcmxkLXdpZGUsIG5vbi1leGNsdXNpdmUsIHJveWFsdHktZnJlZSBhbmQgaXJyZXZvY2FibGUgbGljZW5zZSB1bmRlcgordGhlIEFwcGxpY2FibGUgSW50ZWxsZWN0dWFsIFByb3BlcnR5IFJpZ2h0cyBvd25lZCBvciBjb250cm9sbGVkIGJ5IFlvdSwgdG8gdXNlLAorcmVwcm9kdWNlLCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgYWxsIFlvdXIgTW9kaWZpY2F0aW9ucyB1bmRlciB0aGUKK3Rlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZS4KKworCis2LiBTb2Z0d2FyZSBzdWJqZWN0IHRvIGxpY2Vuc2UKKworWW91ciBNb2RpZmljYXRpb25zIHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzCitMaWNlbnNlLiBZb3UgYXJlIG5vdCBhdXRob3JpemVkIHRvIGltcG9zZSBhbnkgb3RoZXIgdGVybXMgb3IgY29uZGl0aW9ucyB0aGFuCit0aG9zZSBwcmV2YWlsaW5nIHVuZGVyIHRoaXMgTGljZW5zZSB3aGVuIFlvdSBkaXN0cmlidXRlIGFuZC9vciBzdWJsaWNlbnNlIHRoZQorU29mdHdhcmUsIHNhdmUgYW5kIGV4Y2VwdCBhcyBwZXJtaXR0ZWQgdW5kZXIgU2VjdGlvbiA3IGhlcmVvZi4KKworCis3LiBBZGRpdGlvbmFsIHRlcm1zCisKK1lvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBvbiBhIG5vbi1leGNsdXNpdmUgYmFzaXMsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yIGFueQord2FycmFudHksIHN1cHBvcnQsIG1haW50ZW5hbmNlLCBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgb3Igb3RoZXIgcmlnaHRzIGNvbnNpc3RlbnQKK3dpdGggdGhlIHNjb3BlIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8gdGhlIFNvZnR3YXJlICh0aGUgIkFkZGl0aW9uYWwKK1Rlcm1zIikgdG8gdGhlIHJlY2lwaWVudHMgb2YgdGhlIFNvZnR3YXJlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvIG9ubHkgb24gWW91cgorb3duIGJlaGFsZiBhbmQgb24gWW91ciBzb2xlIGFuZCBleGNsdXNpdmUgcmVzcG9uc2liaWxpdHkuIFlvdSBtdXN0IG9idGFpbiB0aGUKK3JlY2lwaWVudCdzIGFncmVlbWVudCB0aGF0IGFueSBzdWNoIEFkZGl0aW9uYWwgVGVybXMgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLAorYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5LCBkZWZlbmQgYW5kIGhvbGQgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBhbnkKK0NvbnRyaWJ1dG9yIGhhcm1sZXNzIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IG9yIGNsYWltcyBhc3NlcnRlZCBhZ2FpbnN0Cit0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9ycyB3aXRoIHJlc3BlY3QgdG8gYW55IHN1Y2ggQWRkaXRpb25hbAorVGVybXMuCisKKworOC4gRGlzY2xhaW1lciBvZiB3YXJyYW50eQorCitUaGUgU29mdHdhcmUgaXMgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlIG9uIGFuICJhcyBpcyIgYmFzaXMsIHdpdGhvdXQKK3dhcnJhbnR5IG9mIGFueSBraW5kLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCB3YXJyYW50aWVzIHRoYXQgdGhlIFNvZnR3YXJlCitpcyBmcmVlIG9mIGRlZmVjdHMsIG1lcmNoYW50YWJsZSwgZml0IGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZSBvcgorbm9uLWluZnJpbmdpbmcuIFRoZSBlbnRpcmUgcmlzayBhcyB0byB0aGUgcXVhbGl0eSBhbmQgcGVyZm9ybWFuY2Ugb2YgdGhlCitTb2Z0d2FyZSBpcyB3aXRoIFlvdS4KKworCis5LiBMaWFiaWxpdHkKKworVW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBzaGFsbCBZb3UsIHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IgYmUKK2xpYWJsZSB0byBhbnkgcGVyc29uIGZvciBhbnkgZGlyZWN0IG9yIGluZGlyZWN0IGRhbWFnZXMgb2YgYW55IGtpbmQgaW5jbHVkaW5nLAord2l0aG91dCBsaW1pdGF0aW9uLCBkYW1hZ2VzIGZvciBsb3NzIG9mIGdvb2R3aWxsLCBsb3NzIG9mIGRhdGEsIHdvcmsgc3RvcHBhZ2UsCitjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uIG9yIGFueSBhbmQgYWxsIG90aGVyIGNvbW1lcmNpYWwgZGFtYWdlcyBvcgorbG9zc2VzIHJlc3VsdGluZyBmcm9tIG9yIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZSBvciBpbmRpcmVjdGx5IHRvIHRoZSB1c2Ugb2YKK3RoZSBTb2Z0d2FyZS4KKworCisxMC4gVHJhZGVtYXJrCisKK1RoaXMgTGljZW5zZSBkb2VzIG5vdCBncmFudCBhbnkgcmlnaHRzIHRvIHVzZSB0aGUgdHJhZGVtYXJrcywgdHJhZGUgbmFtZXMgYW5kCitkb21haW4gbmFtZXMgIk1BVFJBIiwgIkVBRFMgTWF0cmEgRGF0YXZpc2lvbiIsICJDQVMuQ0FERSIsICJPcGVuIENBU0NBREUiLAorIm9wZW5jYXNjYWRlLmNvbSIgYW5kICJvcGVuY2FzY2FkZS5vcmciIG9yIGFueSBvdGhlciB0cmFkZW1hcmtzLCB0cmFkZSBuYW1lcyBvcgorZG9tYWluIG5hbWVzIHVzZWQgb3Igb3duZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLgorCisKKzExLiBDb3B5cmlnaHQKKworVGhlIEluaXRpYWwgRGV2ZWxvcGVyIHJldGFpbnMgYWxsIHJpZ2h0cywgdGl0bGUgYW5kIGludGVyZXN0IGluIGFuZCB0byB0aGUKK09yaWdpbmFsIENvZGUuIFlvdSBtYXkgbm90IHJlbW92ZSB0aGUgY29weXJpZ2h0IMKpIG5vdGljZSB3aGljaCBhcHBlYXJzIHdoZW4gWW91Citkb3dubG9hZCB0aGUgU29mdHdhcmUuCisKKworMTIuIFRlcm0KKworVGhpcyBMaWNlbnNlIGlzIGdyYW50ZWQgdG8gWW91IGZvciBhIHRlcm0gZXF1YWwgdG8gdGhlIHJlbWFpbmluZyBwZXJpb2Qgb2YKK3Byb3RlY3Rpb24gY292ZXJlZCBieSB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBhcHBsaWNhYmxlIHRvIHRoZQorT3JpZ2luYWwgQ29kZS4KKworCisxMy4gVGVybWluYXRpb24KKworSW4gY2FzZSBvZiB0ZXJtaW5hdGlvbiwgYXMgcHJvdmlkZWQgaW4gU2VjdGlvbiAzIGFib3ZlLCBZb3UgYWdyZWUgdG8gaW1tZWRpYXRlbHkKK3N0b3AgYW55IGZ1cnRoZXIgdXNlLCByZXByb2R1Y3Rpb24sIG1vZGlmaWNhdGlvbiwgZGlzdHJpYnV0aW9uIGFuZCBzdWJsaWNlbnNpbmcKK29mIHRoZSBTb2Z0d2FyZSBhbmQgdG8gZGVzdHJveSBhbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSB0aGF0IGFyZSBpbiBZb3VyCitwb3NzZXNzaW9uIG9yIGNvbnRyb2wuIEFsbCBzdWJsaWNlbnNlcyBvZiB0aGUgU29mdHdhcmUgd2hpY2ggaGF2ZSBiZWVuIHByb3Blcmx5CitncmFudGVkIHByaW9yIHRvIHRlcm1pbmF0aW9uIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gSW4KK2FkZGl0aW9uLCBTZWN0aW9ucyA1LCA4IHRvIDExLCAxMy4yIGFuZCAxNS4yIG9mIHRoaXMgTGljZW5zZSwgaW4gcmVhc29uIG9mIHRoZWlyCituYXR1cmUsIHNoYWxsIHN1cnZpdmUgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBmb3IgYSBwZXJpb2Qgb2YgZmlmdGVlbgorKDE1KSB5ZWFycy4KKworCisxNC4gVmVyc2lvbnMgb2YgdGhlIGxpY2Vuc2UKKworVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG1heSBwdWJsaXNoIG5ldyB2ZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UgZnJvbSB0aW1lIHRvCit0aW1lLiBPbmNlIE9yaWdpbmFsIENvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoaXMKK0xpY2Vuc2UsIFlvdSBtYXkgY2hvb3NlIHRvIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YKK3RoYXQgdmVyc2lvbiBvciB1c2UgdGhlIE9yaWdpbmFsIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24KK29mIHRoaXMgTGljZW5zZSBwdWJsaXNoZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLgorCisKKzE1LiBNaXNjZWxsYW5lb3VzCisKKzE1LjEgUmVsYXRpb25zaGlwIG9mIFBhcnRpZXMKKworVGhpcyBMaWNlbnNlIHdpbGwgbm90IGJlIGNvbnN0cnVlZCBhcyBjcmVhdGluZyBhbiBhZ2VuY3ksIHBhcnRuZXJzaGlwLCBqb2ludAordmVudHVyZSBvciBhbnkgb3RoZXIgZm9ybSBvZiBsZWdhbCBhc3NvY2lhdGlvbiBiZXR3ZWVuIFlvdSBhbmQgdGhlIEluaXRpYWwKK0RldmVsb3BlciwgYW5kIFlvdSB3aWxsIG5vdCByZXByZXNlbnQgdG8gdGhlIGNvbnRyYXJ5LCB3aGV0aGVyIGV4cHJlc3NseSwgYnkKK2ltcGxpY2F0aW9uIG9yIG90aGVyd2lzZS4KKworMTUuMiBJbmRlcGVuZGVudCBEZXZlbG9wbWVudAorCitOb3RoaW5nIGluIHRoaXMgTGljZW5zZSB3aWxsIGltcGFpciB0aGUgSW5pdGlhbCBEZXZlbG9wZXIncyByaWdodCB0byBhY3F1aXJlLAorbGljZW5zZSwgZGV2ZWxvcCwgaGF2ZSBvdGhlcnMgZGV2ZWxvcCBmb3IgaXQsIG1hcmtldCBvciBkaXN0cmlidXRlIHRlY2hub2xvZ3kgb3IKK3Byb2R1Y3RzIHRoYXQgcGVyZm9ybSB0aGUgc2FtZSBvciBzaW1pbGFyIGZ1bmN0aW9ucyBhcywgb3Igb3RoZXJ3aXNlIGNvbXBldGUKK3dpdGgsIE1vZGlmaWNhdGlvbnMsIERlcml2YXRpdmUgUHJvZ3JhbXMsIHRlY2hub2xvZ3kgb3IgcHJvZHVjdHMgdGhhdCBZb3UgbWF5CitkZXZlbG9wLCBwcm9kdWNlLCBtYXJrZXQgb3IgZGlzdHJpYnV0ZS4KKworMTUuMyBTZXZlcmFiaWxpdHkKKworSWYgZm9yIGFueSByZWFzb24gYSBjb3VydCBvZiBjb21wZXRlbnQganVyaXNkaWN0aW9uIGZpbmRzIGFueSBwcm92aXNpb24gb2YgdGhpcworTGljZW5zZSwgb3IgcG9ydGlvbiB0aGVyZW9mLCB0byBiZSB1bmVuZm9yY2VhYmxlLCB0aGF0IHByb3Zpc2lvbiBvZiB0aGUgTGljZW5zZQord2lsbCBiZSBlbmZvcmNlZCB0byB0aGUgbWF4aW11bSBleHRlbnQgcGVybWlzc2libGUgc28gYXMgdG8gZWZmZWN0IHRoZSBlY29ub21pYworYmVuZWZpdHMgYW5kIGludGVudCBvZiB0aGUgcGFydGllcywgYW5kIHRoZSByZW1haW5kZXIgb2YgdGhpcyBMaWNlbnNlIHdpbGwKK2NvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGV4dGVudC4KKworCitFTkQgT0YgVEhFIFRFUk1TIEFORAorQ09ORElUSU9OUyBPRiBUSElTIExJQ0VOU0UKKworCitPcGVuIENBU0NBREUgUy5BLlMuIGlzIGEgRnJlbmNoIHNvY2nDqXTDqSBwYXIgYWN0aW9ucyBzaW1wbGlmacOpZSBoYXZpbmcgaXRzICAgbWFpbgorb2ZmaWNlcyBhdCAxLCBwbGFjZSBkZXMgRnLDqHJlcyBNb250Z29sZmllciwgNzgyODAgR3V5YW5jb3VydCwgRnJhbmNlLiBJdHMgd2ViCitzaXRlIGlzIGxvY2F0ZWQgYXQgdGhlIGZvbGxvd2luZyBhZGRyZXNzIHd3dy5vcGVuY2FzY2FkZS5jb20KKworCitPcGVuIENBU0NBREUgVGVjaG5vbG9neSBQdWJsaWMgTGljZW5zZQorCitTY2hlZHVsZSAiQSIKKworVGhlIGNvbnRlbnQgb2YgdGhpcyBmaWxlIGlzIHN1YmplY3QgdG8gdGhlIE9wZW4gQ0FTQ0FERSBUZWNobm9sb2d5IFB1YmxpYworTGljZW5zZSBWZXJzaW9uIDYuNSAodGhlICJMaWNlbnNlIikuIFlvdSBtYXkgbm90IHVzZSB0aGUgY29udGVudCBvZiB0aGlzIGZpbGUKK2V4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuIFBsZWFzZSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIGF0CitodHRwOi8vd3d3Lm9wZW5jYXNjYWRlLm9yZyBhbmQgcmVhZCBpdCBjb21wbGV0ZWx5IGJlZm9yZSB1c2luZyB0aGlzIGZpbGUuCisKK1RoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBPcGVuIENBU0NBREUgUy5BLlMuLCB3aXRoIG1haW4KK29mZmljZXMgYXQgIDEsIHBsYWNlIGRlcyBGcsOocmVzIE1vbnRnb2xmaWVyLCA3ODI4MCBHdXlhbmNvdXJ0LCBGcmFuY2UuIFRoZQorT3JpZ2luYWwgQ29kZSBpcyBjb3B5cmlnaHQgwqkgT3BlbiBDQVNDQURFIFMuQS5TLiwgMjAwMS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworIlRoZSBPcmlnaW5hbCBDb2RlIGFuZCBhbGwgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgYXJlCitkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCB3aXRob3V0IHdhcnJhbnR5IG9mIGFueSBraW5kLCBhbmQgdGhlIEluaXRpYWwKK0RldmVsb3BlciBoZXJlYnkgZGlzY2xhaW1zIGFsbCBzdWNoIHdhcnJhbnRpZXMsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sCithbnkgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHksIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlIG9yCitub24taW5mcmluZ2VtZW50LiBQbGVhc2Ugc2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgdGVybXMgYW5kIGNvbmRpdGlvbnMKK2dvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlIi4KKworRW5kIG9mIFNjaGVkdWxlICJBIgorCisKK09wZW4gQ0FTQ0FERSBUZWNobm9sb2d5IFB1YmxpYyBMaWNlbnNlIAorCitTY2hlZHVsZSAiQiIKKworIlRoZSBjb250ZW50IG9mIHRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBPcGVuIENBU0NBREUgVGVjaG5vbG9neSBQdWJsaWMKK0xpY2Vuc2UgVmVyc2lvbiA2LjUgKHRoZSAiTGljZW5zZSIpLiBZb3UgbWF5IG5vdCB1c2UgdGhlIGNvbnRlbnQgb2YgdGhpcyBmaWxlCitleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBQbGVhc2Ugb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAoraHR0cDovL3d3dy5vcGVuY2FzY2FkZS5vcmcgYW5kIHJlYWQgaXQgY29tcGxldGVseSBiZWZvcmUgdXNpbmcgdGhpcyBmaWxlLgorCitUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMgT3BlbiBDQVNDQURFIFMuQS5TLiwgd2l0aCBtYWluCitvZmZpY2VzIGF0ICAxLCBwbGFjZSBkZXMgRnLDqHJlcyBNb250Z29sZmllciwgNzgyODAgR3V5YW5jb3VydCwgRnJhbmNlLiBUaGUKK09yaWdpbmFsIENvZGUgaXMgY29weXJpZ2h0IMKpIE9wZW4gQ0FTQ0FERSBTLkEuUy4sIDIwMDEuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK01vZGlmaWNhdGlvbnMgdG8gdGhlIE9yaWdpbmFsIENvZGUgaGF2ZSBiZWVuIG1hZGUgYnkgX19fX19fX19fX19fX19fX19fX19fX19fLgorTW9kaWZpY2F0aW9ucyBhcmUgY29weXJpZ2h0IMKpIFtZZWFyIHRvIGJlIGluY2x1ZGVkXS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworVGhlIHNvZnR3YXJlIE9wZW4gQ0FTQ0FERSBUZWNobm9sb2d5IGFuZCBhbGwgc29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlCitMaWNlbnNlIGFyZSBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCB3aXRob3V0IHdhcnJhbnR5IG9mIGFueSBraW5kLCBhbmQKK3RoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZGlzY2xhaW1zIGFsbCBzdWNoIHdhcnJhbnRpZXMsIGluY2x1ZGluZyB3aXRob3V0CitsaW1pdGF0aW9uLCBhbnkgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHksIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlCitvciBub24taW5mcmluZ2VtZW50LiBQbGVhc2Ugc2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgdGVybXMgYW5kCitjb25kaXRpb25zIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlIi4KKworRW5kIG9mIFNjaGVkdWxlICJCIgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvT3BlbmR5bGFuIGIvbGljZW5zZXMvT3BlbmR5bGFuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YTZjMmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9PcGVuZHlsYW4KQEAgLTAsMCArMSw3NiBAQAorQ29weXJpZ2h0IChjKSAxOTk1LTIwMDQgRnVuY3Rpb25hbCBPYmplY3RzLCBJbmMuCisKK1BvcnRpb25zIGNvcHlyaWdodCAoYykgMjAwNC0yMDExIER5bGFuIEhhY2tlcnMuCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZworYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCit3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCitkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8KK3Blcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0bwordGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZQoraW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORAorTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUworQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOCitBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTgorQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRQorU09GVFdBUkUuCisKK0EgY29weSBvZiB0aGlzIGxpY2Vuc2UgbWF5IGJlIG9idGFpbmVkIGhlcmU6CitodHRwczovL3Jhdy5naXRodWIuY29tL2R5bGFuLWxhbmcvb3BlbmR5bGFuL21hc3Rlci9MaWNlbnNlLnR4dAorCisMCitSYXZlbmJyb29rJ3MgTWVtb3J5IFBvb2wgU3lzdGVtIChNUFMpIGJpbmFyaWVzIG1heSBiZSBpbmNsdWRlZCBpbgorYmluYXJ5IGRpc3RyaWJ1dGlvbnMgb2YgT3BlbiBEeWxhbi4gIFRoZXkgYXJlIGNvdmVyZWQgdW5kZXIgdGhlCitmb2xsb3dpbmcgbGljZW5zZToKKworICAgICAgICAgICAgICAgTUVNT1JZIFBPT0wgU1lTVEVNIE9QRU4gU09VUkNFIExJQ0VOU0UKKworQ29weXJpZ2h0IChDKSAyMDAxLTIwMDIgUmF2ZW5icm9vayBMaW1pdGVkIDxodHRwOi8vd3d3LnJhdmVuYnJvb2suY29tLz4uCitBbGwgcmlnaHRzIHJlc2VydmVkLiAgVGhpcyBpcyBhbiBvcGVuIHNvdXJjZSBsaWNlbnNlLiAgQ29udGFjdAorUmF2ZW5icm9vayBmb3IgY29tbWVyY2lhbCBsaWNlbnNpbmcgb3B0aW9ucy4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCittZXQ6CisKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Citub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Citub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCitkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCiszLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYW55IGZvcm0gbXVzdCBiZSBhY2NvbXBhbmllZCBieSBpbmZvcm1hdGlvbiBvbiBob3cKK3RvIG9idGFpbiBjb21wbGV0ZSBzb3VyY2UgY29kZSBmb3IgdGhpcyBzb2Z0d2FyZSBhbmQgYW55CithY2NvbXBhbnlpbmcgc29mdHdhcmUgdGhhdCB1c2VzIHRoaXMgc29mdHdhcmUuICBUaGUgc291cmNlIGNvZGUgbXVzdAorZWl0aGVyIGJlIGluY2x1ZGVkIGluIHRoZSBkaXN0cmlidXRpb24gb3IgYmUgYXZhaWxhYmxlIGZvciBubyBtb3JlIHRoYW4KK3RoZSBjb3N0IG9mIGRpc3RyaWJ1dGlvbiBwbHVzIGEgbm9taW5hbCBmZWUsIGFuZCBtdXN0IGJlIGZyZWVseQorcmVkaXN0cmlidXRhYmxlIHVuZGVyIHJlYXNvbmFibGUgY29uZGl0aW9ucy4gIEZvciBhbiBleGVjdXRhYmxlIGZpbGUsCitjb21wbGV0ZSBzb3VyY2UgY29kZSBtZWFucyB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLiAKK0l0IGRvZXMgbm90IGluY2x1ZGUgc291cmNlIGNvZGUgZm9yIG1vZHVsZXMgb3IgZmlsZXMgdGhhdCB0eXBpY2FsbHkKK2FjY29tcGFueSB0aGUgbWFqb3IgY29tcG9uZW50cyBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUKK2V4ZWN1dGFibGUgZmlsZSBydW5zLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUworSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECitUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorUFVSUE9TRSwgT1IgTk9OLUlORlJJTkdFTUVOVCwgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCitOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRgorVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTgorQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLS0tCisKKyRJZDogT3BlbmR5bGFuLHYgMS4xIDIwMTIvMDgvMjAgMDc6MDk6MTkgcGF0cmljayBFeHAgJAorCmRpZmYgLS1naXQgYS9saWNlbnNlcy9PcmFjbGUtQkNMQS1KYXZhU0UgYi9saWNlbnNlcy9PcmFjbGUtQkNMQS1KYXZhU0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU4ZmU5MwotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL09yYWNsZS1CQ0xBLUphdmFTRQpAQCAtMCwwICsxLDMwMiBAQAorIyBGaWxlIGdlbmVyYXRlZCBmcm9tIHRoZSBvdXRwdXQgb2Y6CisjIGxpbmtzIC1kdW1wIGh0dHA6Ly93d3cub3JhY2xlLmNvbS90ZWNobmV0d29yay9qYXZhL2phdmFzZS90ZXJtcy9saWNlbnNlL2luZGV4Lmh0bWwKKyMgRm9yIHVwLXRvLWRhdGUgdmVyc2lvbiB3aXRoIGh0bWwgbGlua3MsIHBsZWFzZSBjaGVjayB0aGUgVVJMCisKKyAgIE9yYWNsZSBCaW5hcnkgQ29kZSBMaWNlbnNlIEFncmVlbWVudCBmb3IgdGhlIEphdmEgU0UgUGxhdGZvcm0gUHJvZHVjdHMKKworICAgT1JBQ0xFICBBTUVSSUNBLCBJTkMuICgiT1JBQ0xFIiksIEZPUiBBTkQgT04gQkVIQUxGIE9GIElUU0VMRiBBTkQgSVRTCisgICBTVUJTSURJQVJJRVMgQU5EIEFGRklMSUFURVMgVU5ERVIgQ09NTU9OIENPTlRST0wsIElTIFdJTExJTkcgVE8gIExJQ0VOU0UgCisgICBUSEUgU09GVFdBUkUgIFRPIFlPVSBPTkxZIFVQT04gVEhFIENPTkRJVElPTiBUSEFUIFlPVSBBQ0NFUFQgQUxMIE9GIFRIRQorICAgVEVSTVMgIENPTlRBSU5FRCBJTiBUSElTIEJJTkFSWSBDT0RFIExJQ0VOU0UgQUdSRUVNRU5UIEFORCBTVVBQTEVNRU5UQUwgCisgICBMSUNFTlNFIFRFUk1TIChDT0xMRUNUSVZFTFkgIkFHUkVFTUVOVCIpLiAgUExFQVNFIFJFQUQgVEhFIEFHUkVFTUVOVCAKKyAgIENBUkVGVUxMWS4gIEJZIFNFTEVDVElORyBUSEUgIkFDQ0VQVCBMSUNFTlNFIEFHUkVFTUVOVCIgKE9SIFRIRQorICAgRVFVSVZBTEVOVCkgQlVUVE9OIEFORC9PUiBCWSBVU0lORyBUSEUgU09GVFdBUkUgWU9VIEFDS05PV0xFREdFIFRIQVQgWU9VCisgICBIQVZFIFJFQUQgVEhFIFRFUk1TIEFORCBBR1JFRSBUTyBUSEVNLiAgSUYgWU9VIEFSRSBBR1JFRUlORyBUTyBUSEVTRSBURVJNUworICAgT04gQkVIQUxGIE9GIEEgIENPTVBBTlkgT1IgT1RIRVIgTEVHQUwgRU5USVRZLCBZT1UgUkVQUkVTRU5UIFRIQVQgWU9VIEhBVkUKKyAgIFRIRSBMRUdBTCAgQVVUSE9SSVRZIFRPIEJJTkQgVEhFIExFR0FMIEVOVElUWSBUTyBUSEVTRSBURVJNUy4gIElGIFlPVSBETworICAgTk9UIEhBVkUgU1VDSCAgQVVUSE9SSVRZLCBPUiBJRiBZT1UgRE8gTk9UIFdJU0ggVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TLAorICAgVEhFTiBTRUxFQ1QgVEhFICJERUNMSU5FIExJQ0VOU0UgQUdSRUVNRU5UIiAoT1IgVEhFIEVRVUlWQUxFTlQpIEJVVFRPTiBBTkQKKyAgIFlPVSBNVVNUIE5PVCBVU0UgVEhFIFNPRlRXQVJFIE9OIFRISVMgU0lURSBPUiBBTlkgT1RIRVIgTUVESUEgT04gV0hJQ0ggVEhFCisgICBTT0ZUV0FSRSBJUyBDT05UQUlORUQuCisKKyAgIDEuICBERUZJTklUSU9OUy4gICJTb2Z0d2FyZSIgbWVhbnMgdGhlIEphdmEgU0UgUGxhdGZvcm0gUHJvZHVjdHMgaW4gYmluYXJ5CisgICBmb3JtIHRoYXQgeW91IHNlbGVjdGVkIGZvciBkb3dubG9hZCwgaW5zdGFsbCBvciB1c2UgZnJvbSBPcmFjbGUgb3IgaXRzCisgICBhdXRob3JpemVkIGxpY2Vuc2VlcywgYW55IG90aGVyIG1hY2hpbmUgcmVhZGFibGUgbWF0ZXJpYWxzIChpbmNsdWRpbmcsIGJ1dAorICAgbm90IGxpbWl0ZWQgdG8sICBsaWJyYXJpZXMsICBzb3VyY2UgIGZpbGVzLCAgaGVhZGVyICBmaWxlcywgYW5kIGRhdGEgCisgICBmaWxlcyksIGFueSB1cGRhdGVzIG9yIGVycm9yIGNvcnJlY3Rpb25zIHByb3ZpZGVkIGJ5IE9yYWNsZSwgYW5kIGFueSB1c2VyCisgICBtYW51YWxzLCBwcm9ncmFtbWluZyBndWlkZXMgYW5kIG90aGVyIGRvY3VtZW50YXRpb24gcHJvdmlkZWQgdG8geW91IGJ5CisgICBPcmFjbGUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQuICAiR2VuZXJhbCBQdXJwb3NlIERlc2t0b3AgQ29tcHV0ZXJzIGFuZAorICAgU2VydmVycyIgbWVhbnMgY29tcHV0ZXJzLCAgaW5jbHVkaW5nIGRlc2t0b3AgYW5kIGxhcHRvcCBjb21wdXRlcnMsIG9yCisgICBzZXJ2ZXJzLCB1c2VkIGZvciBnZW5lcmFsICBjb21wdXRpbmcgZnVuY3Rpb25zIHVuZGVyIGVuZCB1c2VyIGNvbnRyb2wKKyAgIChzdWNoIGFzIGJ1dCBub3Qgc3BlY2lmaWNhbGx5ICBsaW1pdGVkIHRvIGVtYWlsLCBnZW5lcmFsIHB1cnBvc2UgSW50ZXJuZXQKKyAgIGJyb3dzaW5nLCBhbmQgb2ZmaWNlIHN1aXRlICBwcm9kdWN0aXZpdHkgdG9vbHMpLiAgVGhlIHVzZSBvZiBTb2Z0d2FyZSBpbgorICAgc3lzdGVtcyBhbmQgc29sdXRpb25zIHRoYXQgcHJvdmlkZSBkZWRpY2F0ZWQgZnVuY3Rpb25hbGl0eSAob3RoZXIgdGhhbiBhcworICAgbWVudGlvbmVkIGFib3ZlKSBvciBkZXNpZ25lZCAgZm9yIHVzZSBpbiBlbWJlZGRlZCBvciBmdW5jdGlvbi1zcGVjaWZpYworICAgc29mdHdhcmUgYXBwbGljYXRpb25zLCBmb3IgZXhhbXBsZSBidXQgbm90IGxpbWl0ZWQgdG86IFNvZnR3YXJlIGVtYmVkZGVkCisgICBpbiBvciBidW5kbGVkIHdpdGggaW5kdXN0cmlhbCBjb250cm9sIHN5c3RlbXMsIHdpcmVsZXNzIG1vYmlsZSB0ZWxlcGhvbmVzLAorICAgd2lyZWxlc3MgaGFuZGhlbGQgZGV2aWNlcywgbmV0Ym9va3MsIGtpb3NrcywgVFYvU1RCLCBCbHUtcmF5IERpc2MgZGV2aWNlcywKKyAgIHRlbGVtYXRpY3MgYW5kIG5ldHdvcmsgY29udHJvbCBzd2l0Y2hpbmcgZXF1aXBtZW50LCBwcmludGVycyBhbmQgc3RvcmFnZQorICAgbWFuYWdlbWVudCBzeXN0ZW1zLCBhbmQgb3RoZXIgcmVsYXRlZCBzeXN0ZW1zIGFyZSBleGNsdWRlZCBmcm9tIHRoaXMKKyAgIGRlZmluaXRpb24gYW5kIG5vdCBsaWNlbnNlZCB1bmRlciB0aGlzICBBZ3JlZW1lbnQuICAiUHJvZ3JhbXMiIG1lYW5zIEphdmEKKyAgIHRlY2hub2xvZ3kgYXBwbGV0cyBhbmQgYXBwbGljYXRpb25zICBpbnRlbmRlZCB0byBydW4gb24gdGhlIEphdmEgUGxhdGZvcm0sCisgICBTdGFuZGFyZCBFZGl0aW9uIHBsYXRmb3JtIG9uIEphdmEtZW5hYmxlZCBHZW5lcmFsIFB1cnBvc2UgRGVza3RvcAorICAgQ29tcHV0ZXJzIGFuZCBTZXJ2ZXJzLiAgIkNvbW1lcmNpYWwgRmVhdHVyZXMiIG1lYW5zIHRob3NlIGZlYXR1cmVzCisgICBpZGVudGlmaWVkIGluIFRhYmxlIDEtMSAoQ29tbWVyY2lhbCBGZWF0dXJlcyBJbiBKYXZhIFNFIFByb2R1Y3QgRWRpdGlvbnMpCisgICBvZiB0aGUgU29mdHdhcmUgZG9jdW1lbnRhdGlvbiBhY2Nlc3NpYmxlIGF0IAorICAgaHR0cDovL3d3dy5vcmFjbGUuY29tL3RlY2huZXR3b3JrL2phdmEvamF2YXNlL2RvY3VtZW50YXRpb24vaW5kZXguaHRtbC4gCisgICAiUkVBRE1FIEZpbGUiIG1lYW5zIHRoZSBSRUFETUUgZmlsZSBmb3IgdGhlIFNvZnR3YXJlIGFjY2Vzc2libGUgYXQKKyAgIGh0dHA6Ly93d3cub3JhY2xlLmNvbS90ZWNobmV0d29yay9qYXZhL2phdmFzZS90ZXJtcy9yZWFkbWUvaW5kZXguaHRtbC4KKworICAgMi4gIExJQ0VOU0UgVE8gVVNFLiAgU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcworICAgQWdyZWVtZW50ICAgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIHRoZSBKYXZhIFRlY2hub2xvZ3kKKyAgIFJlc3RyaWN0aW9ucyBvZiB0aGUgIFN1cHBsZW1lbnRhbCBMaWNlbnNlIFRlcm1zLCBPcmFjbGUgZ3JhbnRzIHlvdSBhCisgICBub24tZXhjbHVzaXZlLCBub24tdHJhbnNmZXJhYmxlLCBsaW1pdGVkIGxpY2Vuc2Ugd2l0aG91dCBsaWNlbnNlIGZlZXMgdG8KKyAgIHJlcHJvZHVjZSBhbmQgdXNlIGludGVybmFsbHkgdGhlIFNvZnR3YXJlIGNvbXBsZXRlIGFuZCB1bm1vZGlmaWVkIGZvciB0aGUKKyAgIHNvbGUgcHVycG9zZSBvZiAgcnVubmluZyBQcm9ncmFtcy4gIFRIRSBMSUNFTlNFIFNFVCBGT1JUSCBJTiBUSElTIFNFQ1RJT04KKyAgIDIgRE9FUyBOT1QgRVhURU5EIFRPIFRIRSBDT01NRVJDSUFMIEZFQVRVUkVTLiAgWU9VUiBSSUdIVFMgQU5EIE9CTElHQVRJT05TCisgICBSRUxBVEVEIFRPIFRIRSBDT01NRVJDSUFMIEZFQVRVUkVTIEFSRSBBUyBTRVQgRk9SVEggSU4gVEhFIFNVUFBMRU1FTlRBTAorICAgVEVSTVMgQUxPTkcgV0lUSCBBRERJVElPTkFMIExJQ0VOU0VTIEZPUiBERVZFTE9QRVJTIEFORCBQVUJMSVNIRVJTLgorCisgICAzLiAgUkVTVFJJQ1RJT05TLiAgU29mdHdhcmUgaXMgY29weXJpZ2h0ZWQuICBUaXRsZSB0byBTb2Z0d2FyZSBhbmQgYWxsCisgICBhc3NvY2lhdGVkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaXMgcmV0YWluZWQgYnkgT3JhY2xlIGFuZC9vciBpdHMKKyAgIGxpY2Vuc29ycy4gIFVubGVzcyBlbmZvcmNlbWVudCBpcyBwcm9oaWJpdGVkIGJ5IGFwcGxpY2FibGUgbGF3LCB5b3UgbWF5CisgICBub3QgbW9kaWZ5LCBkZWNvbXBpbGUsIG9yIHJldmVyc2UgZW5naW5lZXIgU29mdHdhcmUuICBZb3UgYWNrbm93bGVkZ2UgdGhhdAorICAgdGhlIFNvZnR3YXJlIGlzIGRldmVsb3BlZCBmb3IgZ2VuZXJhbCB1c2UgaW4gYSB2YXJpZXR5IG9mIGluZm9ybWF0aW9uCisgICBtYW5hZ2VtZW50IGFwcGxpY2F0aW9uczsgaXQgaXMgbm90IGRldmVsb3BlZCBvciBpbnRlbmRlZCBmb3IgdXNlIGluIGFueQorICAgaW5oZXJlbnRseSBkYW5nZXJvdXMgYXBwbGljYXRpb25zLCBpbmNsdWRpbmcgYXBwbGljYXRpb25zIHRoYXQgbWF5IGNyZWF0ZQorICAgYSByaXNrIG9mIHBlcnNvbmFsIGluanVyeS4gSWYgeW91IHVzZSB0aGUgU29mdHdhcmUgaW4gZGFuZ2Vyb3VzCisgICBhcHBsaWNhdGlvbnMsIHRoZW4geW91IHNoYWxsIGJlIHJlc3BvbnNpYmxlIHRvIHRha2UgYWxsIGFwcHJvcHJpYXRlCisgICBmYWlsLXNhZmUsIGJhY2t1cCwgcmVkdW5kYW5jeSwgYW5kIG90aGVyIG1lYXN1cmVzIHRvIGVuc3VyZSBpdHMgc2FmZSB1c2UuIAorICAgT3JhY2xlIGRpc2NsYWltcyBhbnkgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5IG9mIGZpdG5lc3MgZm9yIHN1Y2gKKyAgIHVzZXMuICBObyByaWdodCwgdGl0bGUgb3IgaW50ZXJlc3QgaW4gb3IgdG8gYW55IHRyYWRlbWFyaywgIHNlcnZpY2UgbWFyaywKKyAgIGxvZ28gb3IgdHJhZGUgbmFtZSBvZiBPcmFjbGUgb3IgaXRzIGxpY2Vuc29ycyBpcyBncmFudGVkIHVuZGVyIHRoaXMgCisgICBBZ3JlZW1lbnQuICBBZGRpdGlvbmFsIHJlc3RyaWN0aW9ucyBmb3IgZGV2ZWxvcGVycyBhbmQvb3IgcHVibGlzaGVycworICAgbGljZW5zZXMgYXJlIHNldCBmb3J0aCBpbiB0aGUgU3VwcGxlbWVudGFsIExpY2Vuc2UgVGVybXMuCisKKyAgIDQuICBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLiAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgV0lUSE9VVAorICAgV0FSUkFOVFkgT0YgQU5ZIEtJTkQuICBPUkFDTEUgRlVSVEhFUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMsIEVYUFJFU1MKKyAgIEFORCBJTVBMSUVELCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVC4gCisKKyAgIDUuICBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS4gIElOIE5PIEVWRU5UIFNIQUxMIE9SQUNMRSBCRSBMSUFCTEUgRk9SIEFOWQorICAgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIFBVTklUSVZFIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgT1IKKyAgIERBTUFHRVMgRk9SIExPU1MgT0YgUFJPRklUUywgUkVWRU5VRSwgREFUQSBPUiBEQVRBIFVTRSwgSU5DVVJSRUQgQlkgWU9VIE9SCisgICBBTlkgVEhJUkQgUEFSVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIElOIENPTlRSQUNUIE9SIFRPUlQsIEVWRU4gSUYgT1JBQ0xFCisgICBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIE9SQUNMRSdTIEVOVElSRQorICAgTElBQklMSVRZIEZPUiBEQU1BR0VTIEhFUkVVTkRFUiBTSEFMTCBJTiBOTyBFVkVOVCBFWENFRUQgT05FIFRIT1VTQU5ECisgICBET0xMQVJTIChVLlMuICQxLDAwMCkuCisKKyAgIDYuICBURVJNSU5BVElPTi4gIFRoaXMgQWdyZWVtZW50IGlzIGVmZmVjdGl2ZSB1bnRpbCB0ZXJtaW5hdGVkLiAgWW91IG1heQorICAgdGVybWluYXRlIHRoaXMgQWdyZWVtZW50IGF0IGFueSB0aW1lIGJ5IGRlc3Ryb3lpbmcgYWxsIGNvcGllcyBvZgorICAgU29mdHdhcmUuICBUaGlzIEFncmVlbWVudCB3aWxsIHRlcm1pbmF0ZSBpbW1lZGlhdGVseSB3aXRob3V0IG5vdGljZSBmcm9tCisgICBPcmFjbGUgaWYgeW91ICBmYWlsIHRvIGNvbXBseSB3aXRoIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQuIAorICAgRWl0aGVyIHBhcnR5IG1heSAgdGVybWluYXRlIHRoaXMgQWdyZWVtZW50IGltbWVkaWF0ZWx5IHNob3VsZCBhbnkgU29mdHdhcmUKKyAgIGJlY29tZSwgb3IgaW4gZWl0aGVyIHBhcnR5J3Mgb3BpbmlvbiBiZSBsaWtlbHkgdG8gYmVjb21lLCB0aGUgc3ViamVjdCBvZiBhCisgICBjbGFpbSBvZiBpbmZyaW5nZW1lbnQgIG9mIGFueSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgIHJpZ2h0LiAgVXBvbgorICAgdGVybWluYXRpb24sIHlvdSBtdXN0IGRlc3Ryb3kgYWxsIGNvcGllcyBvZiBTb2Z0d2FyZS4KKworICAgNy4gIEVYUE9SVCAgUkVHVUxBVElPTlMuICBZb3UgYWdyZWUgdGhhdCBVLlMuIGV4cG9ydCBjb250cm9sIGxhd3MgYW5kCisgICBvdGhlciBhcHBsaWNhYmxlIGV4cG9ydCBhbmQgaW1wb3J0IGxhd3MgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBTb2Z0d2FyZSwKKyAgIGluY2x1ZGluZyB0ZWNobmljYWwgZGF0YTsgYWRkaXRpb25hbCBpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgb24gT3JhY2xlJ3MKKyAgIEdsb2JhbCBUcmFkZSBDb21wbGlhbmNlIHdlYiBzaXRlIChodHRwOi8vd3d3Lm9yYWNsZS5jb20vcHJvZHVjdHMvZXhwb3J0KS4KKyAgIFlvdSBhZ3JlZSB0aGF0IG5laXRoZXIgdGhlIFNvZnR3YXJlIG5vciBhbnkgZGlyZWN0IHByb2R1Y3QgdGhlcmVvZiB3aWxsIGJlCisgICBleHBvcnRlZCwgZGlyZWN0bHksIG9yIGluZGlyZWN0bHksIGluIHZpb2xhdGlvbiBvZiB0aGVzZSBsYXdzLCBvciB3aWxsIGJlCisgICB1c2VkIGZvciBhbnkgcHVycG9zZSBwcm9oaWJpdGVkIGJ5IHRoZXNlIGxhd3MgaW5jbHVkaW5nLCB3aXRob3V0CisgICBsaW1pdGF0aW9uLCBudWNsZWFyLCBjaGVtaWNhbCwgb3IgYmlvbG9naWNhbCB3ZWFwb25zIHByb2xpZmVyYXRpb24uIAorCisgICA4LiAgVFJBREVNQVJLUyBBTkQgTE9HT1MuICBZb3UgYWNrbm93bGVkZ2UgYW5kIGFncmVlIGFzIGJldHdlZW4geW91CisgICBhbmQgT3JhY2xlIHRoYXQgT3JhY2xlIG93bnMgdGhlIE9SQUNMRSBhbmQgSkFWQSB0cmFkZW1hcmtzIGFuZCBhbGwgT1JBQ0xFLQorICAgYW5kIEpBVkEtcmVsYXRlZCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBsb2dvcyBhbmQgb3RoZXIgYnJhbmQKKyAgIGRlc2lnbmF0aW9ucyAoIk9yYWNsZSBNYXJrcyIpLCBhbmQgeW91IGFncmVlIHRvIGNvbXBseSB3aXRoIHRoZSBUaGlyZAorICAgUGFydHkgVXNhZ2UgR3VpZGVsaW5lcyBmb3IgT3JhY2xlIFRyYWRlbWFya3MgY3VycmVudGx5IGxvY2F0ZWQgYXQKKyAgIGh0dHA6Ly93d3cub3JhY2xlLmNvbS91cy9sZWdhbC90aGlyZC1wYXJ0eS10cmFkZW1hcmtzL2luZGV4Lmh0bWwuICBBbnkgdXNlCisgICB5b3UgbWFrZSBvZiB0aGUgT3JhY2xlIE1hcmtzIGludXJlcyB0byBPcmFjbGUncyBiZW5lZml0LgorCisgICA5LiAgVS5TLiAgR09WRVJOTUVOVCBMSUNFTlNFIFJJR0hUUy4gIElmIFNvZnR3YXJlIGlzIGJlaW5nIGFjcXVpcmVkIGJ5IG9yCisgICBvbiAgYmVoYWxmIG9mIHRoZSBVLlMuIEdvdmVybm1lbnQgb3IgYnkgYSBVLlMuIEdvdmVybm1lbnQgcHJpbWUgY29udHJhY3RvcgorICAgb3IgIHN1YmNvbnRyYWN0b3IgKGF0IGFueSB0aWVyKSwgdGhlbiB0aGUgR292ZXJubWVudCdzIHJpZ2h0cyBpbiBTb2Z0d2FyZQorICAgYW5kIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIHNoYWxsIGJlIG9ubHkgdGhvc2Ugc2V0IGZvcnRoIGluIHRoaXMKKyAgIEFncmVlbWVudC4gCisKKyAgIDEwLiAgR09WRVJOSU5HICBMQVcuICBUaGlzIGFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgc3Vic3RhbnRpdmUgYW5kCisgICBwcm9jZWR1cmFsIGxhd3Mgb2YgQ2FsaWZvcm5pYS4gWW91IGFuZCBPcmFjbGUgYWdyZWUgdG8gc3VibWl0IHRvIHRoZQorICAgZXhjbHVzaXZlIGp1cmlzZGljdGlvbiBvZiwgYW5kIHZlbnVlIGluLCB0aGUgY291cnRzIG9mIFNhbiBGcmFuY2lzY28sIG9yCisgICBTYW50YSBDbGFyYSBjb3VudGllcyBpbiBDYWxpZm9ybmlhIGluIGFueSBkaXNwdXRlIGFyaXNpbmcgb3V0IG9mIG9yCisgICByZWxhdGluZyB0byB0aGlzIGFncmVlbWVudC4gCisKKyAgIDExLiAgU0VWRVJBQklMSVRZLiAgSWYgYW55ICBwcm92aXNpb24gb2YgdGhpcyAgQWdyZWVtZW50IGlzIGhlbGQgdG8gYmUKKyAgIHVuZW5mb3JjZWFibGUsIHRoaXMgQWdyZWVtZW50IHdpbGwgcmVtYWluIGluIGVmZmVjdCB3aXRoIHRoZSBwcm92aXNpb24KKyAgIG9taXR0ZWQsIHVubGVzcyBvbWlzc2lvbiB3b3VsZCBmcnVzdHJhdGUgdGhlIGludGVudCBvZiB0aGUgcGFydGllcywgaW4KKyAgIHdoaWNoIGNhc2UgdGhpcyBBZ3JlZW1lbnQgd2lsbCBpbW1lZGlhdGVseSB0ZXJtaW5hdGUuCisKKyAgIDEyLiAgSU5URUdSQVRJT04uICBUaGlzIEFncmVlbWVudCBpcyB0aGUgZW50aXJlIGFncmVlbWVudCAgYmV0d2VlbiB5b3UgYW5kCisgICBPcmFjbGUgcmVsYXRpbmcgdG8gaXRzIHN1YmplY3QgbWF0dGVyLiAgSXQgc3VwZXJzZWRlcyBhbGwgcHJpb3Igb3IKKyAgIGNvbnRlbXBvcmFuZW91cyBvcmFsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbnMsIHByb3Bvc2FscywKKyAgIHJlcHJlc2VudGF0aW9ucyAgYW5kIHdhcnJhbnRpZXMgYW5kIHByZXZhaWxzIG92ZXIgYW55ICBjb25mbGljdGluZyAgb3IKKyAgIGFkZGl0aW9uYWwgIHRlcm1zICBvZiAgYW55ICBxdW90ZSwgb3JkZXIsIGFja25vd2xlZGdtZW50LCBvciBvdGhlcgorICAgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSBwYXJ0aWVzICByZWxhdGluZyB0byBpdHMgc3ViamVjdCBtYXR0ZXIgZHVyaW5nCisgICB0aGUgdGVybSBvZiB0aGlzIEFncmVlbWVudC4gIE5vIG1vZGlmaWNhdGlvbiBvZiB0aGlzIEFncmVlbWVudCB3aWxsIGJlIAorICAgYmluZGluZywgIHVubGVzcyAgaW4gIHdyaXRpbmcgIGFuZCAgc2lnbmVkICBieSBhbiAgYXV0aG9yaXplZAorICAgcmVwcmVzZW50YXRpdmUgb2YgZWFjaCBwYXJ0eS4KKworICAgU1VQUExFTUVOVEFMIExJQ0VOU0UgVEVSTVMKKworICAgVGhlc2UgIFN1cHBsZW1lbnRhbCAgTGljZW5zZSAgVGVybXMgYWRkIHRvIG9yIG1vZGlmeSAgdGhlIHRlcm1zIG9mIHRoZQorICAgQmluYXJ5IENvZGUgTGljZW5zZSBBZ3JlZW1lbnQuICBDYXBpdGFsaXplZCB0ZXJtcyBub3QgZGVmaW5lZCBpbiB0aGVzZQorICAgU3VwcGxlbWVudGFsICBUZXJtcyBzaGFsbCBoYXZlIHRoZSBzYW1lIG1lYW5pbmdzIGFzY3JpYmVkIHRvIHRoZW0gaW4gdGhlCisgICBCaW5hcnkgQ29kZSBMaWNlbnNlIEFncmVlbWVudC4gIFRoZXNlIFN1cHBsZW1lbnRhbCBUZXJtcyBzaGFsbCBzdXBlcnNlZGUKKyAgIGFueSAgaW5jb25zaXN0ZW50IG9yIGNvbmZsaWN0aW5nIHRlcm1zIGluIHRoZSBCaW5hcnkgQ29kZSBMaWNlbnNlCisgICBBZ3JlZW1lbnQsIG9yIGluIGFueSBsaWNlbnNlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFNvZnR3YXJlLgorCisgICBBLiAgQ09NTUVSQ0lBTCBGRUFUVVJFUy4gIFlvdSBtYXkgbm90IHVzZSB0aGUgQ29tbWVyY2lhbCBGZWF0dXJlcyBmb3IKKyAgIHJ1bm5pbmcgUHJvZ3JhbXMsIEphdmEgYXBwbGV0cyBvciBhcHBsaWNhdGlvbnMgaW4geW91ciBpbnRlcm5hbCBidXNpbmVzcworICAgb3BlcmF0aW9ucyBvciBmb3IgYW55IGNvbW1lcmNpYWwgb3IgcHJvZHVjdGlvbiAgcHVycG9zZSwgb3IgZm9yIGFueQorICAgcHVycG9zZSBvdGhlciB0aGFuIGFzIHNldCBmb3J0aCBpbiBTZWN0aW9ucyBCLCBDLCBEIGFuZCBFIG9mIHRoZXNlCisgICBTdXBwbGVtZW50YWwgVGVybXMuICBJZiBZb3Ugd2FudCB0byB1c2UgdGhlIENvbW1lcmNpYWwgRmVhdHVyZXMgZm9yIGFueQorICAgcHVycG9zZSBvdGhlciB0aGFuIGFzIHBlcm1pdHRlZCBpbiB0aGlzIEFncmVlbWVudCwgWW91IG11c3Qgb2J0YWluIGEKKyAgIHNlcGFyYXRlIGxpY2Vuc2UgZnJvbSBPcmFjbGUuCisKKyAgIEIuICBTT0ZUV0FSRSBJTlRFUk5BTCBVU0UgRk9SIERFVkVMT1BNRU5UIExJQ0VOU0UgR1JBTlQuICBTdWJqZWN0IHRvIHRoZQorICAgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIHJlc3RyaWN0aW9ucyBhbmQgZXhjZXB0aW9ucyBzZXQKKyAgIGZvcnRoIGluIHRoZSBSRUFETUUgRmlsZSBpbmNvcnBvcmF0ZWQgaGVyZWluIGJ5IHJlZmVyZW5jZSwgIGluY2x1ZGluZywgYnV0CisgICBub3QgbGltaXRlZCB0byB0aGUgSmF2YSBUZWNobm9sb2d5IFJlc3RyaWN0aW9ucyBvZiB0aGVzZSAgU3VwcGxlbWVudGFsCisgICBUZXJtcywgT3JhY2xlIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlLCBub24tdHJhbnNmZXJhYmxlLCAgbGltaXRlZAorICAgbGljZW5zZSB3aXRob3V0IGZlZXMgdG8gcmVwcm9kdWNlIGludGVybmFsbHkgYW5kIHVzZSBpbnRlcm5hbGx5IHRoZQorICAgU29mdHdhcmUgY29tcGxldGUgYW5kIHVubW9kaWZpZWQgZm9yIHRoZSBwdXJwb3NlIG9mIGRlc2lnbmluZywgZGV2ZWxvcGluZywKKyAgIGFuZCB0ZXN0aW5nIHlvdXIgUHJvZ3JhbXMuCisKKyAgIEMuICBMSUNFTlNFIFRPIERJU1RSSUJVVEUgU09GVFdBUkUuICBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworICAgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIHJlc3RyaWN0aW9ucyBhbmQgZXhjZXB0aW9ucyBzZXQgZm9ydGggaW4gdGhlICAKKyAgIFJFQURNRSBGaWxlLCBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byB0aGUgSmF2YSBUZWNobm9sb2d5CisgICBSZXN0cmljdGlvbnMgb2YgdGhlc2UgU3VwcGxlbWVudGFsIFRlcm1zLCBPcmFjbGUgZ3JhbnRzIHlvdSBhCisgICBub24tZXhjbHVzaXZlLCBub24tdHJhbnNmZXJhYmxlLCBsaW1pdGVkIGxpY2Vuc2Ugd2l0aG91dCBmZWVzIHRvIHJlcHJvZHVjZQorICAgYW5kIGRpc3RyaWJ1dGUgdGhlICBTb2Z0d2FyZSwgcHJvdmlkZWQgdGhhdCAoaSkgeW91IGRpc3RyaWJ1dGUgdGhlCisgICBTb2Z0d2FyZSBjb21wbGV0ZSBhbmQgIHVubW9kaWZpZWQgYW5kIG9ubHkgYnVuZGxlZCBhcyBwYXJ0IG9mLCBhbmQgZm9yIHRoZQorICAgc29sZSBwdXJwb3NlIG9mIHJ1bm5pbmcsIHlvdXIgUHJvZ3JhbXMsIChpaSkgdGhlIFByb2dyYW1zIGFkZCBzaWduaWZpY2FudAorICAgYW5kIHByaW1hcnkgZnVuY3Rpb25hbGl0eSAgdG8gdGhlIFNvZnR3YXJlLCAoaWlpKSB5b3UgZG8gbm90IGRpc3RyaWJ1dGUKKyAgIGFkZGl0aW9uYWwgIHNvZnR3YXJlIGludGVuZGVkIHRvIHJlcGxhY2UgYW55IGNvbXBvbmVudChzKSBvZiB0aGUgU29mdHdhcmUsCisgICAoaXYpIHlvdSBkbyBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueSBwcm9wcmlldGFyeSBsZWdlbmRzIG9yIG5vdGljZXMKKyAgIGNvbnRhaW5lZCBpbiB0aGUgU29mdHdhcmUsICh2KSB5b3Ugb25seSBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBzdWJqZWN0IHRvCisgICBhIGxpY2Vuc2UgYWdyZWVtZW50IHRoYXQ6IChhKSBpcyBhIGNvbXBsZXRlLCB1bm1vZGlmaWVkIHJlcHJvZHVjdGlvbiBvZgorICAgdGhpcyBBZ3JlZW1lbnQ7IG9yIChiKSBwcm90ZWN0cyBPcmFjbGUncyAgaW50ZXJlc3RzIGNvbnNpc3RlbnQgd2l0aCB0aGUKKyAgIHRlcm1zIGNvbnRhaW5lZCBpbiB0aGlzIEFncmVlbWVudCBhbmQgdGhhdCBpbmNsdWRlcyB0aGUgbm90aWNlIHNldCBmb3J0aAorICAgaW4gU2VjdGlvbiBHLCBhbmQgKHZpKSB5b3UgYWdyZWUgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgT3JhY2xlIGFuZCBpdHMKKyAgIGxpY2Vuc29ycyBmcm9tIGFuZCBhZ2FpbnN0IGFueSBkYW1hZ2VzLCBjb3N0cywgbGlhYmlsaXRpZXMsIHNldHRsZW1lbnQKKyAgIGFtb3VudHMgYW5kL29yIGV4cGVuc2VzIChpbmNsdWRpbmcgIGF0dG9ybmV5cycgZmVlcykgIGluY3VycmVkIGluCisgICBjb25uZWN0aW9uICB3aXRoIGFueSBjbGFpbSwgbGF3c3VpdCBvciBhY3Rpb24gYnkgYW55IHRoaXJkIHBhcnR5IHRoYXQKKyAgIGFyaXNlcyBvciByZXN1bHRzIGZyb20gdGhlIHVzZSBvciBkaXN0cmlidXRpb24gb2YgYW55IGFuZCBhbGwgUHJvZ3JhbXMKKyAgIGFuZC9vciBTb2Z0d2FyZS4KKworICAgRC4gIExJQ0VOU0UgVE8gRElTVFJJQlVURSBSRURJU1RSSUJVVEFCTEVTLiAgU3ViamVjdCB0byB0aGUgdGVybXMgYW5kCisgICBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCByZXN0cmljdGlvbnMgYW5kIGV4Y2VwdGlvbnMgc2V0IGZvcnRoIGluCisgICB0aGUgUkVBRE1FICBGaWxlLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBKYXZhIFRlY2hub2xvZ3kKKyAgIFJlc3RyaWN0aW9ucyBvZiB0aGVzZSBTdXBwbGVtZW50YWwgVGVybXMsIE9yYWNsZSBncmFudHMgeW91IGEKKyAgIG5vbi1leGNsdXNpdmUsICBub24tdHJhbnNmZXJhYmxlLCBsaW1pdGVkIGxpY2Vuc2Ugd2l0aG91dCBmZWVzIHRvCisgICByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgIHRob3NlIGZpbGVzIHNwZWNpZmljYWxseSBpZGVudGlmaWVkIGFzCisgICByZWRpc3RyaWJ1dGFibGUgaW4gdGhlICAgUkVBRE1FIEZpbGUgKCJSZWRpc3RyaWJ1dGFibGVzIikgcHJvdmlkZWQgdGhhdDoKKyAgIChpKSB5b3UgZGlzdHJpYnV0ZSB0aGUgIFJlZGlzdHJpYnV0YWJsZXMgY29tcGxldGUgYW5kIHVubW9kaWZpZWQsIGFuZCBvbmx5CisgICBidW5kbGVkIGFzIHBhcnQgb2YgUHJvZ3JhbXMsIChpaSkgdGhlIFByb2dyYW1zIGFkZCBzaWduaWZpY2FudCBhbmQgcHJpbWFyeQorICAgZnVuY3Rpb25hbGl0eSB0byB0aGUgIFJlZGlzdHJpYnV0YWJsZXMsIChpaWkpIHlvdSBkbyBub3QgZGlzdHJpYnV0ZQorICAgYWRkaXRpb25hbCBzb2Z0d2FyZSBpbnRlbmRlZCB0byBzdXBlcnNlZGUgYW55IGNvbXBvbmVudChzKSBvZiB0aGUKKyAgIFJlZGlzdHJpYnV0YWJsZXMgKHVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkIGluIHRoZSBhcHBsaWNhYmxlIFJFQURNRQorICAgRmlsZSksIChpdikgeW91IGRvIG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55IHByb3ByaWV0YXJ5IGxlZ2VuZHMgb3Igbm90aWNlcworICAgY29udGFpbmVkIGluIG9yIG9uIHRoZSBSZWRpc3RyaWJ1dGFibGVzLCAodikgIHlvdSBvbmx5IGRpc3RyaWJ1dGUgdGhlCisgICBSZWRpc3RyaWJ1dGFibGVzIHB1cnN1YW50IHRvIGEgbGljZW5zZSBhZ3JlZW1lbnQgIHRoYXQ6IChhKSBpcyBhIGNvbXBsZXRlLAorICAgdW5tb2RpZmllZCByZXByb2R1Y3Rpb24gb2YgdGhpcyBBZ3JlZW1lbnQ7IG9yIChiKSBwcm90ZWN0cyBPcmFjbGUncworICAgaW50ZXJlc3RzIGNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgY29udGFpbmVkIGluIHRoZSBBZ3JlZW1lbnQgYW5kCisgICBpbmNsdWRlcyB0aGUgbm90aWNlIHNldCBmb3J0aCBpbiBTZWN0aW9uIEcsICh2aSkgeW91IGFncmVlIHRvIGRlZmVuZCBhbmQKKyAgIGluZGVtbmlmeSBPcmFjbGUgYW5kIGl0cyBsaWNlbnNvcnMgZnJvbSBhbmQgYWdhaW5zdCBhbnkgZGFtYWdlcywgIGNvc3RzLAorICAgbGlhYmlsaXRpZXMsIHNldHRsZW1lbnQgYW1vdW50cyBhbmQvb3IgZXhwZW5zZXMgKGluY2x1ZGluZyAgYXR0b3JuZXlzJyAKKyAgIGZlZXMpIGluY3VycmVkIGluIGNvbm5lY3Rpb24gd2l0aCBhbnkgY2xhaW0sIGxhd3N1aXQgb3IgYWN0aW9uIGJ5IGFueQorICAgdGhpcmQgIHBhcnR5IHRoYXQgYXJpc2VzIG9yIHJlc3VsdHMgZnJvbSB0aGUgdXNlIG9yIGRpc3RyaWJ1dGlvbiBvZiBhbnkKKyAgIGFuZCBhbGwgUHJvZ3JhbXMgYW5kL29yIFNvZnR3YXJlLgorCisgICBFLiAgRElTVFJJQlVUSU9OIEJZIFBVQkxJU0hFUlMuICBUaGlzIHNlY3Rpb24gcGVydGFpbnMgdG8geW91cgorICAgZGlzdHJpYnV0aW9uICBvZiB0aGUgSmF2YVRNIFNFIERldmVsb3BtZW50IEtpdCBTb2Z0d2FyZSB3aXRoIHlvdXIgcHJpbnRlZAorICAgYm9vayBvciBtYWdhemluZSAoYXMgdGhvc2UgdGVybXMgYXJlIGNvbW1vbmx5IHVzZWQgaW4gdGhlIGluZHVzdHJ5KQorICAgcmVsYXRpbmcgdG8gSmF2YSB0ZWNobm9sb2d5ICgiUHVibGljYXRpb24iKS4gIFN1YmplY3QgdG8gYW5kIGNvbmRpdGlvbmVkCisgICB1cG9uIHlvdXIgY29tcGxpYW5jZSAgd2l0aCB0aGUgcmVzdHJpY3Rpb25zIGFuZCBvYmxpZ2F0aW9ucyBjb250YWluZWQgaW4KKyAgIHRoZSBBZ3JlZW1lbnQsIE9yYWNsZSBoZXJlYnkgZ3JhbnRzIHRvIHlvdSBhIG5vbi1leGNsdXNpdmUsCisgICBub250cmFuc2ZlcmFibGUgbGltaXRlZCByaWdodCB0byByZXByb2R1Y2UgY29tcGxldGUgYW5kIHVubW9kaWZpZWQgY29waWVzCisgICBvZiB0aGUgU29mdHdhcmUgb24gZWxlY3Ryb25pYyAgbWVkaWEgKHRoZSAiTWVkaWEiKSBmb3IgdGhlIHNvbGUgcHVycG9zZSBvZgorICAgaW5jbHVzaW9uIGFuZCBkaXN0cmlidXRpb24gd2l0aCB5b3VyIFB1YmxpY2F0aW9uKHMpLCBzdWJqZWN0IHRvIHRoZQorICAgZm9sbG93aW5nIHRlcm1zOiAoaSkgWW91IG1heSBub3QgZGlzdHJpYnV0ZSAgdGhlIFNvZnR3YXJlIG9uIGEgc3RhbmQtYWxvbmUKKyAgIGJhc2lzOyBpdCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHdpdGggeW91ciBQdWJsaWNhdGlvbihzKTsgKGlpKSBZb3UgYXJlCisgICByZXNwb25zaWJsZSBmb3IgZG93bmxvYWRpbmcgdGhlIFNvZnR3YXJlIGZyb20gdGhlIGFwcGxpY2FibGUgT3JhY2xlIHdlYgorICAgc2l0ZTsgKGlpaSkgWW91IG11c3QgcmVmZXIgdG8gdGhlIFNvZnR3YXJlIGFzIEphdmFUTSBTRSBEZXZlbG9wbWVudCBLaXQ7CisgICAoaXYpIFRoZSBTb2Z0d2FyZSBtdXN0IGJlIHJlcHJvZHVjZWQgaW4gaXRzIGVudGlyZXR5IGFuZCB3aXRob3V0IGFueQorICAgbW9kaWZpY2F0aW9uIHdoYXRzb2V2ZXIgKGluY2x1ZGluZyB3aXRoIHJlc3BlY3QgdG8gYWxsIHByb3ByaWV0YXJ5CisgICBub3RpY2VzKSBhbmQgZGlzdHJpYnV0ZWQgd2l0aCB5b3VyIFB1YmxpY2F0aW9uIHN1YmplY3QgdG8gYSBsaWNlbnNlCisgICBhZ3JlZW1lbnQgdGhhdCBpcyBhIGNvbXBsZXRlLCB1bm1vZGlmaWVkIHJlcHJvZHVjdGlvbiBvZiB0aGlzIEFncmVlbWVudDsKKyAgICh2KSBUaGUgTWVkaWEgbGFiZWwgc2hhbGwgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGluZm9ybWF0aW9uOiAgQ29weXJpZ2h0CisgICAyMDExLCBPcmFjbGUgQW1lcmljYSwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFVzZSBpcyBzdWJqZWN0IHRvCisgICBsaWNlbnNlIHRlcm1zLiAgT1JBQ0xFIGFuZCBKQVZBIHRyYWRlbWFya3MgYW5kIGFsbCBPUkFDTEUtIGFuZAorICAgSkFWQS1yZWxhdGVkIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIGxvZ29zIGFuZCBvdGhlciBicmFuZAorICAgZGVzaWduYXRpb25zIGFyZSB0cmFkZW1hcmtzIG9yIHJlZ2lzdGVyZWQgIHRyYWRlbWFya3Mgb2YgT3JhY2xlIGluIHRoZQorICAgVS5TLiBhbmQgb3RoZXIgY291bnRyaWVzLiAgVGhpcyBpbmZvcm1hdGlvbiBtdXN0IGJlIHBsYWNlZCBvbiB0aGUgTWVkaWEgCisgICBsYWJlbCBpbiBzdWNoIGEgbWFubmVyIGFzIHRvIG9ubHkgYXBwbHkgdG8gdGhlIE9yYWNsZSAgU29mdHdhcmU7ICAodmkpIFlvdQorICAgbXVzdCBjbGVhcmx5IGlkZW50aWZ5IHRoZSBTb2Z0d2FyZSBhcyBPcmFjbGUncyBwcm9kdWN0IG9uIHRoZSBNZWRpYSAKKyAgIGhvbGRlciBvciBNZWRpYSBsYWJlbCwgYW5kIHlvdSBtYXkgbm90IHN0YXRlIG9yIGltcGx5IHRoYXQgT3JhY2xlIGlzCisgICByZXNwb25zaWJsZSBmb3IgYW55IHRoaXJkLXBhcnR5IHNvZnR3YXJlIGNvbnRhaW5lZCBvbiB0aGUgTWVkaWE7ICh2aWkpIFlvdQorICAgbWF5IG5vdCBpbmNsdWRlIGFueSB0aGlyZCAgcGFydHkgc29mdHdhcmUgb24gdGhlIE1lZGlhIHdoaWNoIGlzIGludGVuZGVkCisgICB0byBiZSBhICByZXBsYWNlbWVudCBvciBzdWJzdGl0dXRlIGZvciB0aGUgU29mdHdhcmU7ICh2aWlpKSBZb3UgYWdyZWUgdG8KKyAgIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IE9yYWNsZSBhbmQgaXRzIGxpY2Vuc29ycyBmcm9tIGFuZCBhZ2FpbnN0IGFueQorICAgZGFtYWdlcywgY29zdHMsIGxpYWJpbGl0aWVzLCBzZXR0bGVtZW50IGFtb3VudHMgYW5kL29yIGV4cGVuc2VzCisgICAoaW5jbHVkaW5nICBhdHRvcm5leXMnICBmZWVzKSBpbmN1cnJlZCBpbiBjb25uZWN0aW9uIHdpdGggYW55IGNsYWltLAorICAgbGF3c3VpdCBvciBhY3Rpb24gYnkgYW55IHRoaXJkIHBhcnR5IHRoYXQgYXJpc2VzIG9yIHJlc3VsdHMgZnJvbSB0aGUgdXNlCisgICBvciBkaXN0cmlidXRpb24gb2YgdGhlIFNvZnR3YXJlIGFuZC9vciB0aGUgUHVibGljYXRpb247IDsgYW5kIChpeCkgWW91CisgICBzaGFsbCBwcm92aWRlIE9yYWNsZSB3aXRoIGEgd3JpdHRlbiBub3RpY2UgZm9yIGVhY2ggUHVibGljYXRpb247IHN1Y2gKKyAgIG5vdGljZSBzaGFsbCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgaW5mb3JtYXRpb246ICgxKSB0aXRsZSBvZiBQdWJsaWNhdGlvbiwKKyAgICgyKSBhdXRob3IocyksICgzKSBkYXRlIG9mIFB1YmxpY2F0aW9uLCAgYW5kICg0KSAgSVNCTiBvciBJU1NOICBudW1iZXJzLiAKKyAgIFN1Y2ggbm90aWNlIHNoYWxsIGJlIHNlbnQgdG8gIE9yYWNsZSBBbWVyaWNhLCBJbmMuLCAgNTAwIE9yYWNsZSAgUGFya3dheSwKKyAgIFJlZHdvb2QgU2hvcmVzLCAgQ2FsaWZvcm5pYSAgOTQwNjUgVS5TLkEgLCBBdHRlbnRpb246ICBHZW5lcmFsIENvdW5zZWwuCisKKyAgIEYuICBKQVZBIFRFQ0hOT0xPR1kgUkVTVFJJQ1RJT05TLiAgWW91IG1heSBub3QgY3JlYXRlLCBtb2RpZnksIG9yIGNoYW5nZQorICAgdGhlIGJlaGF2aW9yIG9mLCBvciBhdXRob3JpemUgeW91ciBsaWNlbnNlZXMgdG8gY3JlYXRlLCBtb2RpZnksIG9yIGNoYW5nZQorICAgdGhlIGJlaGF2aW9yIG9mLCBjbGFzc2VzLCBpbnRlcmZhY2VzLCBvciBzdWJwYWNrYWdlcyB0aGF0IGFyZSBpbiBhbnkgd2F5IAorICAgaWRlbnRpZmllZCAgYXMgICJqYXZhIiwgImphdmF4IiwgInN1biIsICJvcmFjbGUiIG9yIHNpbWlsYXIgY29udmVudGlvbgorICAgYXMgICBzcGVjaWZpZWQgYnkgT3JhY2xlIGluIGFueSBuYW1pbmcgY29udmVudGlvbiBkZXNpZ25hdGlvbi4KKworICAgRy4gIENPTU1FUkNJQUwgRkVBVFVSRVMgTk9USUNFLiAgRm9yIHB1cnBvc2Ugb2YgY29tcGx5aW5nIHdpdGgKKyAgIFN1cHBsZW1lbnRhbCBUZXJtIFNlY3Rpb24gIEMuKHYpKGIpIGFuZCBELih2KShiKSwgeW91ciBsaWNlbnNlIGFncmVlbWVudAorICAgc2hhbGwgaW5jbHVkZSB0aGUgZm9sbG93aW5nIG5vdGljZSwgd2hlcmUgdGhlIG5vdGljZSBpcyBkaXNwbGF5ZWQgaW4gYQorICAgbWFubmVyIHRoYXQgYW55b25lIHVzaW5nIHRoZSBTb2Z0d2FyZSB3aWxsIHNlZSB0aGUgbm90aWNlOgorCisgICBVc2Ugb2YgdGhlIENvbW1lcmNpYWwgRmVhdHVyZXMgZm9yIGFueSBjb21tZXJjaWFsIG9yIHByb2R1Y3Rpb24gcHVycG9zZQorICAgcmVxdWlyZXMgYSBzZXBhcmF0ZSBsaWNlbnNlIGZyb20gT3JhY2xlLiAgIkNvbW1lcmNpYWwgRmVhdHVyZXMiIG1lYW5zCisgICB0aG9zZSBmZWF0dXJlcyBpZGVudGlmaWVkIFRhYmxlIDEtMSAoQ29tbWVyY2lhbCBGZWF0dXJlcyBJbiBKYXZhIFNFCisgICBQcm9kdWN0IEVkaXRpb25zKSBvZiB0aGUgU29mdHdhcmUgZG9jdW1lbnRhdGlvbiBhY2Nlc3NpYmxlIGF0CisgICBodHRwOi8vd3d3Lm9yYWNsZS5jb20vdGVjaG5ldHdvcmsvamF2YS9qYXZhc2UvZG9jdW1lbnRhdGlvbi9pbmRleC5odG1sCisKKyAgIEguICBTT1VSQ0UgQ09ERS4gIFNvZnR3YXJlIG1heSBjb250YWluIHNvdXJjZSBjb2RlIHRoYXQsIHVubGVzcworICAgZXhwcmVzc2x5ICAgbGljZW5zZWQgZm9yIG90aGVyIHB1cnBvc2VzLCBpcyBwcm92aWRlZCBzb2xlbHkgZm9yIHJlZmVyZW5jZQorICAgcHVycG9zZXMgIHB1cnN1YW50IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudC4gIFNvdXJjZSBjb2RlIG1heSBub3QgYmUKKyAgIHJlZGlzdHJpYnV0ZWQgIHVubGVzcyAgZXhwcmVzc2x5ICBwcm92aWRlZCBmb3IgaW4gdGhpcyBBZ3JlZW1lbnQuCisKKyAgIEkuICBUSElSRCBQQVJUWSBDT0RFLiAgQWRkaXRpb25hbCBjb3B5cmlnaHQgbm90aWNlcyBhbmQgbGljZW5zZSB0ZXJtcworICAgYXBwbGljYWJsZSB0byBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUgYXJlIHNldCBmb3J0aCBpbiB0aGUKKyAgIFRISVJEUEFSVFlMSUNFTlNFUkVBRE1FIGZpbGUgYWNjZXNzaWJsZSBhdAorICAgaHR0cDovL3d3dy5vcmFjbGUuY29tL3RlY2huZXR3b3JrL2phdmEvamF2YXNlL2RvY3VtZW50YXRpb24vaW5kZXguaHRtbC4gCisgICBJbiBhZGRpdGlvbiB0byBhbnkgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgYW55IHRoaXJkIHBhcnR5CisgICBvcGVuc291cmNlL2ZyZWV3YXJlIGxpY2Vuc2UgaWRlbnRpZmllZCBpbiB0aGUgIFRISVJEUEFSVFlMSUNFTlNFUkVBRE1FCisgICBmaWxlLCB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50eSBhbmQgbGltaXRhdGlvbiBvZiBsaWFiaWxpdHkgIHByb3Zpc2lvbnMKKyAgIGluICBwYXJhZ3JhcGhzIDQgYW5kIDUgb2YgdGhlIEJpbmFyeSBDb2RlIExpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIGFwcGx5IHRvCisgICBhbGwgU29mdHdhcmUgaW4gdGhpcyBkaXN0cmlidXRpb24uCisKKyAgIEouICBURVJNSU5BVElPTiBGT1IgSU5GUklOR0VNRU5ULiAgRWl0aGVyIHBhcnR5IG1heSB0ZXJtaW5hdGUgdGhpcworICAgQWdyZWVtZW50IGltbWVkaWF0ZWx5IHNob3VsZCBhbnkgU29mdHdhcmUgYmVjb21lLCBvciBpbiBlaXRoZXIgcGFydHkncworICAgb3BpbmlvbiBiZSBsaWtlbHkgdG8gYmVjb21lLCB0aGUgc3ViamVjdCBvZiBhIGNsYWltIG9mIGluZnJpbmdlbWVudCBvZiBhbnkKKyAgIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodC4KKworICAgSy4gIElOU1RBTExBVElPTiBBTkQgQVVUTy1VUERBVEUuICBUaGUgU29mdHdhcmUncyBpbnN0YWxsYXRpb24gYW5kCisgICBhdXRvLXVwZGF0ZSBwcm9jZXNzZXMgdHJhbnNtaXQgYSBsaW1pdGVkIGFtb3VudCBvZiBkYXRhIHRvIE9yYWNsZSAob3IgaXRzCisgICBzZXJ2aWNlICBwcm92aWRlcikgYWJvdXQgdGhvc2Ugc3BlY2lmaWMgcHJvY2Vzc2VzIHRvIGhlbHAgT3JhY2xlCisgICB1bmRlcnN0YW5kIGFuZCBvcHRpbWl6ZSB0aGVtLiAgT3JhY2xlIGRvZXMgbm90IGFzc29jaWF0ZSB0aGUgZGF0YSB3aXRoCisgICBwZXJzb25hbGx5ICBpZGVudGlmaWFibGUgIGluZm9ybWF0aW9uLiAgWW91IGNhbiBmaW5kIG1vcmUgIGluZm9ybWF0aW9uCisgICBhYm91dCB0aGUgZGF0YSBPcmFjbGUgY29sbGVjdHMgYXMgYSByZXN1bHQgb2YgeW91ciBTb2Z0d2FyZSBkb3dubG9hZCBhdAorICAgaHR0cDovL3d3dy5vcmFjbGUuY29tL3RlY2huZXR3b3JrL2phdmEvamF2YXNlL2RvY3VtZW50YXRpb24vaW5kZXguaHRtbC4KKworICAgRm9yIGlucXVpcmllcyBwbGVhc2UgY29udGFjdDogIE9yYWNsZSBBbWVyaWNhLCBJbmMuLCA1MDAgT3JhY2xlIFBhcmt3YXksCisgICBSZWR3b29kIFNob3JlcywgQ2FsaWZvcm5pYSA5NDA2NSwgVVNBLgorCisgICBMYXN0IHVwZGF0ZWQgTWF5IDE3LCAyMDExCmRpZmYgLS1naXQgYS9saWNlbnNlcy9QREIgYi9saWNlbnNlcy9QREIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVlOThhMgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL1BEQgpAQCAtMCwwICsxLDEwOCBAQAorICAgICAgICAgICAgICAgUERCIFNPRlRXQVJFIExJQ0VOU0UgQUdSRUVNRU5UCisKK0JZIENMSUNLSU5HIFRIRSBBQ0NFUFRBTkNFIEJVVFRPTiBPUiBJTlNUQUxMSU5HIE9SIFVTSU5HCitUSElTICJTT0ZUV0FSRSwgVEhFIElORElWSURVQUwgT1IgRU5USVRZIExJQ0VOU0lORyBUSEUKK1NPRlRXQVJFICgiTElDRU5TRUUiKSBJUyBDT05TRU5USU5HIFRPIEJFIEJPVU5EIEJZIEFORCBJUworQkVDT01JTkcgQSBQQVJUWSBUTyBUSElTIEFHUkVFTUVOVC4gIElGIExJQ0VOU0VFIERPRVMgTk9UCitBR1JFRSBUTyBBTEwgT0YgVEhFIFRFUk1TIE9GIFRISVMgQUdSRUVNRU5UCitUSEUgTElDRU5TRUUgTVVTVCBOT1QgSU5TVEFMTCBPUiBVU0UgVEhFIFNPRlRXQVJFLgorCisxLiBMSUNFTlNFIEFHUkVFTUVOVAorCitUaGlzIGlzIGEgbGljZW5zZSBiZXR3ZWVuIHlvdSAoIkxpY2Vuc2VlIikgYW5kIHRoZSBQcm90ZWluIERhdGEgQmFuayAoUERCKQorYXQgUnV0Z2VycywgVGhlIFN0YXRlIFVuaXZlcnNpdHkgb2YgTmV3IEplcnNleSAoaGVyZWFmdGVyIHJlZmVycmVkIHRvCithcyAiUlVUR0VSUyIpLiAgIFRoZSBzb2Z0d2FyZSBpcyBvd25lZCBieSBSVVRHRVJTIGFuZCBwcm90ZWN0ZWQgYnkKK2NvcHlyaWdodCBsYXdzLCBhbmQgc29tZSBlbGVtZW50cyBhcmUgcHJvdGVjdGVkIGJ5IGxhd3MgZ292ZXJuaW5nCit0cmFkZW1hcmtzLCB0cmFkZSBkcmVzcyBhbmQgdHJhZGUgc2VjcmV0cywgYW5kIG1heSBiZSBwcm90ZWN0ZWQgYnkKK3BhdGVudCBsYXdzLgorCisyLiBMSUNFTlNFIEdSQU5UCisKK1JVVEdFUlMgZ3JhbnRzIHlvdSwgYW5kIHlvdSBoZXJlYnkgYWNjZXB0LCBub24tZXhjbHVzaXZlLCByb3lhbHR5LWZyZWUKK3BlcnBldHVhbCBsaWNlbnNlIHRvIGluc3RhbGwsIHVzZSwgbW9kaWZ5LCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3MsCitpbmNvcnBvcmF0ZSBpbnRvIG90aGVyIGNvbXB1dGVyIHNvZnR3YXJlLCBhbmQgZGlzdHJpYnV0ZSBpbiBiaW5hcnkKK2FuZCBzb3VyY2UgY29kZSBmb3JtYXQsIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgdGhlcmVvZiwgdG9nZXRoZXIgd2l0aAorYW55IGFzc29jaWF0ZWQgbWVkaWEsIHByaW50ZWQgbWF0ZXJpYWxzLCBhbmQgb24tbGluZSBvciBlbGVjdHJvbmljCitkb2N1bWVudGF0aW9uIChpZiBhbnkpIHByb3ZpZGVkIGJ5IFJVVEdFUlMgKGNvbGxlY3RpdmVseSwgdGhlICJTT0ZUV0FSRSIpLAorc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zOiAoaSkgYW55IGRpc3RyaWJ1dGlvbgorb2YgdGhlIFNPRlRXQVJFIHNoYWxsIGJpbmQgdGhlIHJlY2VpdmVyIHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworb2YgdGhpcyBBZ3JlZW1lbnQ7IChpaSkgYW55IGRpc3RyaWJ1dGlvbiBvZiB0aGUgU09GVFdBUkUgaW4gbW9kaWZpZWQKK2Zvcm0gc2hhbGwgY2xlYXJseSBzdGF0ZSB0aGF0IHRoZSBTT0ZUV0FSRSBoYXMgYmVlbiBtb2RpZmllZCBmcm9tCit0aGUgdmVyc2lvbiBvcmlnaW5hbGx5IG9idGFpbmVkIGZyb20gUlVUR0VSUy4KKworMi4gQ09QWVJJR0hUOyBSRVRFTlRJT04gT0YgUklHSFRTLgorCitUaGUgYWJvdmUgbGljZW5zZSBncmFudCBpcyBjb25kaXRpb25lZCBvbiB0aGUgZm9sbG93aW5nOiAoaSkgeW91IG11c3QKK3JlcHJvZHVjZSBhbGwgY29weXJpZ2h0IG5vdGljZXMgYW5kIG90aGVyIHByb3ByaWV0YXJ5IG5vdGljZXMgb24gYW55Citjb3BpZXMgb2YgdGhlIFNPRlRXQVJFIGFuZCB5b3UgbXVzdCBub3QgcmVtb3ZlIHN1Y2ggbm90aWNlczsgKGlpKSBpbgordGhlIGV2ZW50IHlvdSBjb21waWxlIHRoZSBTT0ZUV0FSRSwgeW91IHdpbGwgaW5jbHVkZSB0aGUgY29weXJpZ2h0Citub3RpY2Ugd2l0aCB0aGUgYmluYXJ5IGluIHN1Y2ggYSBtYW5uZXIgYXMgdG8gYWxsb3cgaXQgdG8gYmUgZWFzaWx5Cit2aWV3YWJsZTsgKGlpaSkgaWYgeW91IGluY29ycG9yYXRlIHRoZSBTT0ZUV0FSRSBpbnRvIG90aGVyIGNvZGUsIHlvdQorbXVzdCBwcm92aWRlIG5vdGljZSB0aGF0IHRoZSBjb2RlIGNvbnRhaW5zIHRoZSBTT0ZUV0FSRSBhbmQgaW5jbHVkZQorYSBjb3B5IG9mIHRoZSBjb3B5cmlnaHQgbm90aWNlcyBhbmQgb3RoZXIgcHJvcHJpZXRhcnkgbm90aWNlcy4gIEFsbAorY29waWVzIG9mIHRoZSBTT0ZUV0FSRSBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudC4KKworMy4gTk8gTUFJTlRFTkFOQ0UgT1IgU1VQUE9SVDsgVFJFQVRNRU5UIE9GIEVOSEFOQ0VNRU5UUworCitSVVRHRVJTIGlzIHVuZGVyIG5vIG9ibGlnYXRpb24gd2hhdHNvZXZlciB0bzogKGkpIHByb3ZpZGUgbWFpbnRlbmFuY2UKK29yIHN1cHBvcnQgZm9yIHRoZSBTT0ZUV0FSRTsgb3IgKGlpKSB0byBub3RpZnkgeW91IG9mIGJ1ZyBmaXhlcywgcGF0Y2hlcywKK29yIHVwZ3JhZGVzIHRvIHRoZSBmZWF0dXJlcywgZnVuY3Rpb25hbGl0eSBvciBwZXJmb3JtYW5jZSBvZiB0aGUKK1NPRlRXQVJFICgiRW5oYW5jZW1lbnRzIikgKGlmIGFueSksIHdoZXRoZXIgZGV2ZWxvcGVkIGJ5IFJVVEdFUlMKK29yIHRoaXJkIHBhcnRpZXMuICBJZiwgaW4gaXRzIHNvbGUgZGlzY3JldGlvbiwgUlVUR0VSUyBtYWtlcyBhbgorRW5oYW5jZW1lbnQgYXZhaWxhYmxlIHRvIHlvdSBhbmQgUlVUR0VSUyBkb2VzIG5vdCBzZXBhcmF0ZWx5IGVudGVyCitpbnRvIGEgd3JpdHRlbiBsaWNlbnNlIGFncmVlbWVudCB3aXRoIHlvdSByZWxhdGluZyB0byBzdWNoIGJ1ZyBmaXgsCitwYXRjaCBvciB1cGdyYWRlLCB0aGVuIGl0IHNoYWxsIGJlIGRlZW1lZCBpbmNvcnBvcmF0ZWQgaW50byB0aGUgU09GVFdBUkUKK2FuZCBzdWJqZWN0IHRvIHRoaXMgQWdyZWVtZW50LiBZb3UgYXJlIHVuZGVyIG5vIG9ibGlnYXRpb24gd2hhdHNvZXZlcgordG8gcHJvdmlkZSBhbnkgRW5oYW5jZW1lbnRzIHRvIFJVVEdFUlMgb3IgdGhlIHB1YmxpYyB0aGF0IHlvdSBtYXkKK2RldmVsb3Agb3ZlciB0aW1lOyBob3dldmVyLCBpZiB5b3UgY2hvb3NlIHRvIHByb3ZpZGUgeW91ciBFbmhhbmNlbWVudHMKK3RvIFJVVEdFUlMsIG9yIGlmIHlvdSBjaG9vc2UgdG8gb3RoZXJ3aXNlIHB1Ymxpc2ggb3IgZGlzdHJpYnV0ZSB5b3VyCitFbmhhbmNlbWVudHMsIGluIHNvdXJjZSBjb2RlIGZvcm0gd2l0aG91dCBjb250ZW1wb3JhbmVvdXNseSByZXF1aXJpbmcKK2VuZCB1c2VycyBvciBSVVRHRVJTIHRvIGVudGVyIGludG8gYSBzZXBhcmF0ZSB3cml0dGVuIGxpY2Vuc2UgYWdyZWVtZW50Citmb3Igc3VjaCBFbmhhbmNlbWVudHMsIHRoZW4geW91IGhlcmVieSBncmFudCBSVVRHRVJTIGEgbm9uLWV4Y2x1c2l2ZSwKK3JveWFsdHktZnJlZSBwZXJwZXR1YWwgbGljZW5zZSB0byBpbnN0YWxsLCB1c2UsIG1vZGlmeSwgcHJlcGFyZQorZGVyaXZhdGl2ZSB3b3JrcywgaW5jb3Jwb3JhdGUgaW50byB0aGUgU09GVFdBUkUgb3Igb3RoZXIgY29tcHV0ZXIKK3NvZnR3YXJlLCBkaXN0cmlidXRlLCBhbmQgc3VibGljZW5zZSB5b3VyIEVuaGFuY2VtZW50cyBvciBkZXJpdmF0aXZlCit3b3JrcyB0aGVyZW9mLCBpbiBiaW5hcnkgYW5kIHNvdXJjZSBjb2RlIGZvcm0uCisKKzQuIEZFRVMuICBUaGVyZSBpcyBubyBsaWNlbnNlIGZlZSBmb3IgdGhlIFNPRlRXQVJFLiAgSWYgTGljZW5zZWUKK3dpc2hlcyB0byByZWNlaXZlIHRoZSBTT0ZUV0FSRSBvbiBtZWRpYSwgdGhlcmUgbWF5IGJlIGEgc21hbGwgY2hhcmdlCitmb3IgdGhlIG1lZGlhIGFuZCBmb3Igc2hpcHBpbmcgYW5kIGhhbmRsaW5nLiAgTGljZW5zZWUgaXMKK3Jlc3BvbnNpYmxlIGZvciBhbnkgYW5kIGFsbCB0YXhlcy4KKworNS4gVEVSTUlOQVRJT04uICBXaXRob3V0IHByZWp1ZGljZSB0byBhbnkgb3RoZXIgcmlnaHRzLCBMaWNlbnNvcgorbWF5IHRlcm1pbmF0ZSB0aGlzIEFncmVlbWVudCBpZiBMaWNlbnNlZSBicmVhY2hlcyBhbnkgb2YgaXRzIHRlcm1zCithbmQgY29uZGl0aW9ucy4gIFVwb24gdGVybWluYXRpb24sIExpY2Vuc2VlIHNoYWxsIGRlc3Ryb3kgYWxsCitjb3BpZXMgb2YgdGhlIFNPRlRXQVJFLgorCis2LiBQUk9QUklFVEFSWSBSSUdIVFMuICBUaXRsZSwgb3duZXJzaGlwIHJpZ2h0cywgYW5kIGludGVsbGVjdHVhbAorcHJvcGVydHkgcmlnaHRzIGluIHRoZSBQcm9kdWN0IHNoYWxsIHJlbWFpbiB3aXRoIFJVVEdFUlMuICBMaWNlbnNlZQorYWNrbm93bGVkZ2VzIHN1Y2ggb3duZXJzaGlwIGFuZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGFuZCB3aWxsCitub3QgdGFrZSBhbnkgYWN0aW9uIHRvIGplb3BhcmRpemUsIGxpbWl0IG9yIGludGVyZmVyZSBpbiBhbnkgbWFubmVyCit3aXRoIFJVVEdFUlMnIG93bmVyc2hpcCBvZiBvciByaWdodHMgd2l0aCByZXNwZWN0IHRvIHRoZSBTT0ZUV0FSRS4KK1RoZSBTT0ZUV0FSRSBpcyBwcm90ZWN0ZWQgYnkgY29weXJpZ2h0IGFuZCBvdGhlciBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IGxhd3MgYW5kIGJ5IGludGVybmF0aW9uYWwgdHJlYXRpZXMuICBUaXRsZSBhbmQgcmVsYXRlZAorcmlnaHRzIGluIHRoZSBjb250ZW50IGFjY2Vzc2VkIHRocm91Z2ggdGhlIFNPRlRXQVJFIGlzIHRoZSBwcm9wZXJ0eQorb2YgdGhlIGFwcGxpY2FibGUgY29udGVudCBvd25lciBhbmQgaXMgcHJvdGVjdGVkIGJ5IGFwcGxpY2FibGUgbGF3LgorVGhlIGxpY2Vuc2UgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBnaXZlcyBMaWNlbnNlZSBubyByaWdodHMgdG8gc3VjaAorY29udGVudC4KKworNy4gRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS4gIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBGUkVFIE9GCitDSEFSR0UsIEFORCwgVEhFUkVGT1JFLCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRZIE9GCitBTlkgS0lORCwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBUSEUgV0FSUkFOVElFUyBUSEFUIElUCitJUyBGUkVFIE9GIERFRkVDVFMsIE1FUkNIQU5UQUJMRSwgRklUIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorT1IgTk9OLUlORlJJTkdJTkcuICBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5ECitQRVJGT1JNQU5DRSBPRiBUSEUgU09GVFdBUkUgSVMgQk9STkUgQlkgTElDRU5TRUUuICBTSE9VTEQgVEhFCitTT0ZUV0FSRSBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsIFRIRSBMSUNFTlNFRSBBTkQgTk9UCitMSUNFTlNPUiBBU1NVTUVTIFRIRSBFTlRJUkUgQ09TVCBPRiBBTlkgU0VSVklDRSBBTkQgUkVQQUlSLgorVEhJUyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GCitUSElTIEFHUkVFTUVOVC4gIE5PIFVTRSBPRiBUSEUgUFJPRFVDVCBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUgorRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi4KKworOC4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuICBUTyBUSEUgTUFYSU1VTSBFWFRFTlQgUEVSTUlUVEVEIEJZCitBUFBMSUNBQkxFIExBVywgIElOIE5PIEVWRU5UIFdJTEwgTElDRU5TT1IgQkUgTElBQkxFIEZPUiBBTlkKK0lORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCitPVVQgT0YgVEhFIFVTRSBPRiBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBTT0ZUV0FSRSwgSU5DTFVESU5HLAorV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLCitTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwKK09USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIFRIRVJFT0YuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9QRUwgYi9saWNlbnNlcy9QRUwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMwNTFhNwotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL1BFTApAQCAtMCwwICsxLDI0MiBAQAorICAgICAgICAgIEMgTyBJIE4gICBQIFIgTyBGIEUgUyBTIEkgTyBOIEEgTCAgIEUgRCBJIFQgSSBPIE4KKyAgICAgICAgICAgICAgTCBJIEMgRSBOIFMgRSAgIEEgRyBSIEUgRSBNIEUgTiBUICAgViAyLjAKKworCitDb3B5cmlnaHQgKEMpIDE5OTktMjAwNCBTeXN0ZW1zIGluIE1vdGlvbiBBUy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworCitTIE8gRiBUIFcgQSBSIEUgICBDIE8gViBFIFIgRSBEICAgQiBZICAgVCBIIEkgUyBMIEkgQyBFIE4gUyBFIC0KK1QgSCBJIFIgRCAgIFAgQSBSIFQgWSAgIEwgSSBBIEIgUiBBIFIgSSBFIFMKKworVGhpcyBMaWNlbnNlIEFncmVlbWVudCAoIkxpY2Vuc2UiKSBpcyBiZXR3ZWVuIHlvdSAoIkxpY2Vuc2VlIikgLSBlaXRoZXIgYW4KK2luZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgLSBhbmQgU3lzdGVtcyBpbiBNb3Rpb24gQVMgKCJTSU0iKS4gSXQgcGVydGFpbnMgdG8KK3RoZSBDb2luIGxpYnJhcnkgYW5kIHRoZSBhc3NvY2lhdGVkIEdVSSBpbnRlcmZhY2UgbGlicmFyaWVzIChTb1F0LCBTb1dpbiwgU29YdCwKK1NvR1RLLCBhbmQgU2MyMSkgYW5kIHRoZSBEaW1lIGFuZCBQcm9maXQgbGlicmFyaWVzIGFuZCBzaW1hZ2UsIG9yIHBhcnRzIHRoZXJlb2YsCitpbmNsdWRpbmcgdGhlIHNvdXJjZSBjb2RlLCBleGFtcGxlIHByb2dyYW1zIGFuZCB0aGUgZG9jdW1lbnRhdGlvbgorKCJEb2N1bWVudGF0aW9uIikuIENlcnRhaW4gZXhjZXB0aW9ucyB0byB0aGlzIGFyZSBmb3VuZCwgY2YgdGhlIGluZm9ybWF0aW9uIG9uCitUaGlyZCBQYXJ0eSBMaWJyYXJpZXMgYmVsb3cuCisKK1RoZSBzb2Z0d2FyZSByZWZlcnJlZCB0byBhYm92ZSBtYXkgY29udGFpbiwgb3IgcHJvdmlkZSBsaW5rcyB0bywgdGhpcmQgcGFydHkKK2xpYnJhcmllcyBvciBjb2RlIChjb2xsZWN0aXZlbHkgIlRoaXJkIFBhcnR5IExpYnJhcmllcyIpIHRvIGltcGxlbWVudCB2YXJpb3VzCitmdW5jdGlvbnMuIFRoaXJkIFBhcnR5IExpYnJhcmllcyBhcmUgbm90IHByZXBhcmVkIGJ5IG9yIG93bmVkIGJ5IFNJTSwgYW5kIHRoZXkKK2FyZSBub3QgY292ZXJlZCBieSB0aGlzIExpY2Vuc2UuIEFueSB1c2Ugb2YgVGhpcmQgUGFydHkgTGlicmFyaWVzIGlzIGVudGlyZWx5IGF0Cit0aGUgcmlzayBhbmQgcmVzcG9uc2liaWxpdHkgb2YgTGljZW5zZWUuCisKK0xpY2Vuc2VlIGFja25vd2xlZGdlcyAoMSkgdGhhdCBzb21lIFRoaXJkIFBhcnR5IExpYnJhcmllcyBtYXkgcmVxdWlyZSBhZGRpdGlvbmFsCitsaWNlbnNpbmcgb2YgY29weXJpZ2h0IGFuZCBwYXRlbnRzIGZyb20gdGhlIG93bmVycyBvZiBzdWNoLCBhbmQgKDIpIHRoYXQKK2Rpc3RyaWJ1dGlvbiBvZiBhbnkgb2YgdGhlIExpY2Vuc2VkIFNvZnR3YXJlIHJlZmVyZW5jaW5nIGFueSBwb3J0aW9uIG9mIGEgVGhpcmQKK1BhcnR5IExpYnJhcnkgbWF5IHJlcXVpcmUgYXBwcm9wcmlhdGUgbGljZW5zaW5nIGZyb20gc3VjaCB0aGlyZCBwYXJ0aWVzLgorCitBbiB1cGRhdGVkIGxpc3Qgb2Ygd2hhdCBUaGlyZCBQYXJ0eSBsaWJyYXJpZXMgYXJlIGluY2x1ZGVkIGluIHRoZSBzb2Z0d2FyZQorcHJvdmlkZWQgYnkgU0lNLCBhbmQgdGh1cyB3aGF0IHNvZnR3YXJlIGlzIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSwgaXMKK2F2YWlsYWJsZSBhdCBTSU0ncyB3ZWJzaXRlOgoraHR0cDovL3d3dy5zaW0ubm8vcHJvZHVjdHMvQ29pbjNEL2xpY2Vuc2luZy8zcmRQYXJ0eUxpYnMvCisKK1doZW4gdGhlIHRlcm0gIlNvZnR3YXJlIiBpcyB1c2VkIGJlbG93IGluIHRoaXMgTGljZW5zZSwgaXQgcmVmZXJzIG9ubHkgdG8gdGhlCitzb2Z0d2FyZSBjb3ZlcmVkIGJ5IHRoZSBMaWNlbnNlLCBhbmQgbm90IHRoZSBzb2Z0d2FyZSB0aGF0IGlzIHBhcnQgb2YgdGhlIFRoaXJkCitQYXJ0eSBMaWJyYXJpZXMuCisKKworQiBJIE4gRCBJIE4gRyAgIFQgRSBSIE0gUyAgIC0gICBOIEUgVyAgIFYgRSBSIFMgSSBPIE4gUworCitCeSBpbnN0YWxsaW5nLCBjb3B5aW5nLCBvciBvdGhlcndpc2UgdXNpbmcgdGhlIFNvZnR3YXJlIG9yIERvY3VtZW50YXRpb24sCitMaWNlbnNlZSBhZ3JlZXMgdG8gYmUgYm91bmQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gVGhpcyBwYXJhZ3JhcGggZG9lcworbm90IGV4Y2x1ZGUgTGljZW5zZWUgZnJvbSB1c2luZyB0aGUgU29mdHdhcmUgdW5kZXIgdGhlIEdQTCBvciB0aGUgQ29pbgorRXZhbHVhdGlvbiBMaWNlbnNlLCBwcm92aWRlZCB0aGF0IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR1BMIG9yIHRoZQorQ29pbiBFdmFsdWF0aW9uIExpY2Vuc2UgYXJlIG9ic2VydmVkLgorCitJZiBTSU0gcmVwbGFjZXMgdGhpcyBMaWNlbnNlIFZlcnNpb24gMi4wIHdpdGggYSBuZXcgVmVyc2lvbiBkdXJpbmcgdGhlIHRlcm0gb2YKK3RoZSBMaWNlbnNlLCBMaWNlbnNlZSBzaGFsbCBiZSBlbnRpdGxlZCB0byByZWNlaXZlIGFuZCB1c2Ugc3VjaCBuZXcgVmVyc2lvbiBvbgordGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoZW4gYXBwbGljYWJsZSB0byBzdWNoIG5ldyBWZXJzaW9uLCB3aXRob3V0IGhhdmluZyB0bworcGF5IGZ1cnRoZXIgY29tcGVuc2F0aW9uLiBMaWNlbnNlZSBtYXkgY2hvb3NlIHRvIGNvbnRpbnVlIHVzaW5nIHRoaXMgVmVyc2lvbiAyLjAKK2luc3RlYWQsIGluIHdoaWNoIGNhc2UgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGluIHRoaXMgTGljZW5zZSBzaGFsbCBhcHBseSBmb3IKK3RoZSByZW1haW5kZXIgb2YgdGhlIExpY2Vuc2UgdGVybS4gIFJlY2VpcHQgb2YgYSBuZXcgVmVyc2lvbiBhbmQgYWNjZXB0YW5jZSBvZgordGhlIGxpY2Vuc2luZyB0ZXJtcyBmb3Igc3VjaCBuZXcgVmVyc2lvbiwgc2hhbGwgbm90IGluIGl0IHNlbGYgZXh0ZW5kIHRoZSB0ZXJtCitvZiB0aGUgaW5pdGlhbCBMaWNlbnNlLgorCitBICJWZXJzaW9uIiBvZiB0aGUgU29mdHdhcmUgcmVmZXJzIHRvIGEgcmVsZWFzZSB3aXRoIGEgdW5pcXVlIHZlcnNpb24gbnVtYmVyLAorZS5nLiAxLjAuMCBhbmQgMS4wLjEgYmVpbmcgZGlmZmVyZW50IFZlcnNpb25zLgorCisKK0MgTyBQIFkgUiBJIEcgSCBUICAgQSBOIEQgICBSIEUgUyBUIFIgSSBDIFQgSSBPIE4gUworCitBbGwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUgYW5kIERvY3VtZW50YXRpb24gYXJlIG93bmVkIGJ5CitTSU0sIGFuZCBhcmUgcHJvdGVjdGVkIGJ5IE5vcndlZ2lhbiBjb3B5cmlnaHQgbGF3cywgb3RoZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQKK2xhd3MsIGFuZCBpbnRlcm5hdGlvbmFsIHRyZWF0eSBwcm92aXNpb25zLiBTSU0gcmVzZXJ2ZXMgYWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5CitncmFudGVkIGluIHRoaXMgTGljZW5zZS4gTm8gdGl0bGUsIHByb3BlcnR5IHJpZ2h0cyBvciBjb3B5cmlnaHQgaW4gdGhlIFNvZnR3YXJlCitvciBpbiBhbnkgbW9kaWZpY2F0aW9ucyB0byB0aGUgU29mdHdhcmUgb3IgRG9jdW1lbnRhdGlvbiBzaGFsbCBwYXNzIHRvIExpY2Vuc2VlCit1bmRlciBhbnkgY2lyY3Vtc3RhbmNlcy4gTGljZW5zZWUgbWF5IG5vdCBsb2FuLCByZW50LCBsZWFzZSwgb3IgbGljZW5zZSB0aGUKK1NvZnR3YXJlIG9yIGFueSBjb3B5IGhlcmVvZiwgdW5sZXNzIGV4cHJlc3NseSBwcm92aWRlZCBmb3IgaW4gdGhpcyBMaWNlbnNlLgorTGljZW5zZWUgbWF5IG5vdCBhbHRlciBvciByZW1vdmUgYW55IGRldGFpbHMgb2Ygb3duZXJzaGlwLCBjb3B5cmlnaHQsIHRyYWRlIG1hcmsKK29yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNvbm5lY3RlZCB3aXRoIHRoZSBTb2Z0d2FyZS4KKworTGljZW5zZWUgYXMgYW4gaW5kaXZpZHVhbCBpcyBncmFudGVkIGEgcGVyc29uYWwsIG5vbmV4Y2x1c2l2ZSwgbm9uLXRyYW5zZmVyYWJsZQorbGljZW5zZSB0byB1c2UgdGhlIFNvZnR3YXJlIGluIHRoZSBtYW5uZXIgcHJvdmlkZWQgYmVsb3cuIElmIExpY2Vuc2VlIGlzIGFuCitlbnRpdHksIFNJTSBncmFudHMgTGljZW5zZWUgdGhlIHJpZ2h0IHRvIGRlc2lnbmF0ZSBvbmUsIGFuZCBvbmx5IG9uZSwgaW5kaXZpZHVhbAord2l0aGluIExpY2Vuc2VlJ3Mgb3JnYW5pemF0aW9uLCB3aG8gc2hhbGwgaGF2ZSB0aGUgc29sZSByaWdodCB0byB1c2UgdGhlCitTb2Z0d2FyZSBpbiB0aGUgbWFubmVyIHByb3ZpZGVkIGJlbG93LiBUaGUgbmFtZSBvZiB0aGlzIGluZGl2aWR1YWwgbXVzdCBiZQorcmVwb3J0ZWQgdG8gU0lNLCBhbmQgbWF5IGJlIGNoYW5nZWQgYXQgYW55IHRpbWUsIGJ1dCBub3QgbW9yZSBmcmVxdWVudGx5IHRoYW4KK29uY2UgZXZlcnkgc2l4IG1vbnRocy4gVGhlIGluZGl2aWR1YWwgbWF5IGFsc28gYmUgYSBjb25zdWx0YW50LCBmcmVlbGFuY2UKK3dvcmtlciwgb3Igb3RoZXJ3aXNlIGRvaW5nIHByb2plY3Qtd29yayBmb3IgdGhlIGNvbXBhbnksIGFzIGxvbmcgYXMgdGhlIFNvZnR3YXJlCitpcyBvbmx5IHVzZWQgaW4gd29yayBmb3IgTGljZW5zZWUuCisKKworRCBVIFIgQSBUIEkgTyBOCisKK1RoaXMgTGljZW5zZSBpcyB2YWxpZCBmb3Igb25lIHllYXIgZnJvbSB0aGUgZGF0ZSB0aGF0IFNJTSBoYXMgc2VudCBvdXQgYW4gb3JkZXIKK2NvbmZpcm1hdGlvbi4gQSByZW5ld2FsIG9mZmVyIHN0YXRpbmcgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBhbiBleHRlbnNpb24KK29mIHRoZSBMaWNlbnNlIHdpbGwgYmUgc2VudCB0byBMaWNlbnNlZSBieSBTSU0uIElmIExpY2Vuc2VlIGRvZXMgbm90IGFjY2VwdCB0aGlzCitvZmZlciwgb3IgU0lNIGNob29zZXMgbm90IHRvIHByb3ZpZGUgc3VjaCBvZmZlciwgdGhlIExpY2Vuc2Ugd2lsbCBleHBpcmUgYXQgdGhlCitlbmQgb2YgdGhlIG9uZSB5ZWFyIHBlcmlvZCByZWZlcnJlZCB0byBhYm92ZS4KKworSWYgdGhlIExpY2Vuc2UgZXhwaXJlcywgdGhlIHJpZ2h0cyB0byB1cGRhdGVzIGFuZCBzdXBwb3J0IChzdWJzZWN0aW9ucyAoNikgYW5kCisoNykgdW5kZXIgIkxpY2Vuc2VlJ3MgcmlnaHRzIiBiZWxvdykgc2hhbGwgY2Vhc2UuIExpY2Vuc2VlIHJldGFpbnMgdGhlIHJpZ2h0IHRvCitjcmVhdGUgYW5kIGRpc3RyaWJ1dGUgYXBwbGljYXRpb25zIChhcyBzdGF0ZWQgaW4gc3Vic2VjdGlvbnMgKDEpLCAoMiksICgzKSwgKDQpCithbmQgKDUpIHVuZGVyICJMaWNlbnNlZSdzIHJpZ2h0cyIgYmVsb3cpLCBidXQgb25seSBmb3IgdXNlIG9mIHRoZSBsYXN0IFZlcnNpb24KK29mIHRoZSBTb2Z0d2FyZSB0aGF0IHdhcyByZWxlYXNlZCB3aGlsZSB0aGUgTGljZW5zZSB3YXMgdmFsaWQuCisKKworTCBJIEMgRSBOIFMgRSBFICcgUyAgIFIgSSBHIEggVCBTCisKKygxKSBVc2luZyBhbmQgbW9kaWZ5aW5nIHRoZSBTb2Z0d2FyZTogTGljZW5zZWUgbWF5IGZyZWVseSB1c2UgYW5kIG1vZGlmeSB0aGUKK1NvZnR3YXJlIHRvIGRldmVsb3AgYW55IGtpbmQgb2YgcHJvZHVjdCBvbiBhbnkgcGxhdGZvcm0sIGV4Y2VwdCBwcm9kdWN0cyB3aGljaAord291bGQgMSkgY29tcGV0ZSBkaXJlY3RseSB3aXRoIHRoZSBTb2Z0d2FyZSBvciAyKSBwYXNzIG9uIGZ1bmN0aW9uYWxpdHkgd2hpY2gKK21ha2VzIGl0IHBvc3NpYmxlIGZvciBvdGhlcnMgdG8gY3JlYXRlIHNvZnR3YXJlIGNvbXBldGluZyB3aXRoIHRoZSBTb2Z0d2FyZS4KK0xpY2Vuc2VlIG1heSBtYWtlIGFuZCBpbnN0YWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUgb24gYW4gdW5saW1pdGVkIG51bWJlciBvZgorY29tcHV0ZXJzIG9uIGFueSBudW1iZXIgb2YgZGV2ZWxvcG1lbnQgcGxhdGZvcm1zLCBwcm92aWRlZCB0aGF0IExpY2Vuc2VlLCBvciB0aGUKK3BlcnNvbiBkZXNpZ25hdGVkIGJ5IExpY2Vuc2VlIGFzIHRoZSB1c2VyIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgc2VjdGlvbiBhYm92ZSwKK2lzIHRoZSBvbmx5IGluZGl2aWR1YWwgdXNpbmcgdGhlIFNvZnR3YXJlLgorCisoMikgUmVkaXN0cmlidXRpb24gb2YgdGhlIG9yaWdpbmFsIFNvZnR3YXJlOiBMaWNlbnNlZSBpcyBncmFudGVkIGEgbm9uZXhjbHVzaXZlLAorcm95YWx0eS1mcmVlIHJpZ2h0IHRvIHJlZGlzdHJpYnV0ZSB0aGUgdW5jaGFuZ2VkIFNvZnR3YXJlIGFzIHBhcnQgb2YgTGljZW5zZWUncworb3duIHByb2R1Y3QgaW4gc291cmNlIG9yIGJpbmFyeSBmb3JtLCBidXQgb25seSBpZiB0aGUgU29mdHdhcmUgaGFzIGluIGl0cworZW50aXJldHkgYmVlbiBvYnRhaW5lZCB1bmRlciBhIHZhbGlkIENvaW4gUHJvZmVzc2lvbmFsIEVkaXRpb24gTGljZW5zZSBvciBhIENvaW4KK0V2YWx1YXRpb24gTGljZW5zZS4KKworKDMpIERpc3RyaWJ1dGlvbiBvZiBtb2RpZmllZCBTb2Z0d2FyZTogTGljZW5zZWUgaXMgZ3JhbnRlZCBhIG5vbmV4Y2x1c2l2ZSwKK3JveWFsdHktZnJlZSByaWdodCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIFNvZnR3YXJlIHdoaWNoIGhhcyBiZWVuIG1vZGlmaWVkIGFzCithbGxvd2VkIHVuZGVyIHNlY3Rpb24gKDEpIGFib3ZlLCBhcyBwYXJ0IG9mIGhpcyBwcm9kdWN0LiBUaGlzIGNhbiBiZSBkb25lIGluIG9uZQorb2YgdGhlIGZvbGxvd2luZyB0d28gd2F5czogKGEpIGluIHRoZSBmb3JtIG9mIHNvdXJjZSBjb2RlIHBhdGNoZXMgdG8gdGhlCitvcmlnaW5hbCB1bm1vZGlmaWVkIFNvZnR3YXJlOyAoYikgaW4gYmluYXJ5IGZvcm0sIHByb3ZpZGVkIHRoYXQgdGhlIGJpbmFyeSBpcworbmFtZWQgaW4gc3VjaCBhIG1hbm5lciB0aGF0IGl0IGNhbm5vdCBiZSBjb25mdXNlZCB3aXRoIHRoZSBvcmlnaW5hbCBTb2Z0d2FyZS4KK1N1Y2ggY29weWluZyBhbmQgZGlzdHJpYnV0aW9uIG1heSBvbmx5IHRha2UgcGxhY2UgaWYgYW55IGFuZCBhbGwgbW9kaWZpY2F0aW9ucwordG8gdGhlIG9yaWdpbmFsIFNvZnR3YXJlIGhhdmUgaW4gdGhlaXIgZW50aXJldGllcyBiZWVuIGRldmVsb3BlZCBieSBMaWNlbnNlZSBvbgorYmFzaXMgb2YgYW5kIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgcHJvdmlzaW9ucyBvZiBhIHZhbGlkIENvaW4gUHJvZmVzc2lvbmFsCitFZGl0aW9uIExpY2Vuc2Ugb3IgYSBDb2luIEV2YWx1YXRpb24gTGljZW5zZS4KKworKDQpIFRoZSByaWdodCB0byBkaXN0cmlidXRpb24gYXMgcmVmZXJyZWQgdG8gdW5kZXIgKDIpIGFuZCAoMykgYWJvdmUgYWxzbworYXBwbGllcyB0byB0aGUgRG9jdW1lbnRhdGlvbiwgYnV0IG9ubHkgdG8gdGhlIGV4dGVudCB0aGUgRG9jdW1lbnRhdGlvbiBpcworZGlzdHJpYnV0ZWQgYXMgYW4gaW50ZWdyYXRlZCBwYXJ0IG9mIHRoZSBTb2Z0d2FyZS4KKworVGhlIHJpZ2h0IHRvIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGFzIGRlc2NyaWJlZCB1bmRlciAoMikgYW5kICgzKSBhYm92ZSBkb2VzCitub3QgYXV0aG9yaXplIExpY2Vuc2VlIHRvIGdpdmUgYW55IHRoaXJkIHBhcnRpZXMgYW55IHJpZ2h0cyB0byB0aGUgU29mdHdhcmUsCitleGNlcHQgdGhlIHJpZ2h0IHRvIHVzZSB0aGUgU29mdHdhcmUgb3IgbW9kaWZpZWQgU29mdHdhcmUgYXMgYW4gaW50ZWdyYXRlZCBwYXJ0CitvZiB0aGUgcHJvZHVjdHMgc29sZCBieSBMaWNlbnNlZS4KKworKDUpIFRoZSBhYm92ZSBwcm92aXNpb25zIGRvIG5vdCBleGNsdWRlIExpY2Vuc2VlIGZyb20gcmUtZGlzdHJpYnV0aW5nIHRoZQorU29mdHdhcmUgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBHUEwsIGJ1dCBpbiBzdWNoIGNhc2UsIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworb2YgdGhlIEdQTCBtdXN0IGJlIG9ic2VydmVkLiBJZiBMaWNlbnNlZSBoYXMgbWFkZSBhbnkgbW9kaWZpY2F0aW9ucyB0byB0aGUKK1NvZnR3YXJlIHVuZGVyIHRoZSBHUEwgbGljZW5zZSwgc3VjaCBtb2RpZmllZCBTb2Z0d2FyZSBtdXN0LCBpZiByZS1kaXN0cmlidXRlZCwKK2VpdGhlciBhKSBiZSByZS1kaXN0cmlidXRlZCBvbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgc2V0IGJ5IHRoZSBHUEwsIG9yIGIpIGJlCityZS1kaXN0cmlidXRlZCB1bmRlciBhIENvaW4gUHJvZmVzc2lvbmFsIEVkaXRpb24gTGljZW5zZSwgYnV0IHNvIHRoYXQgYSBDb2luCitQcm9mZXNzaW9uYWwgRWRpdGlvbiBMaWNlbnNlIG11c3QgYmUgcHVyY2hhc2VkIGZyb20gU0lNIHdpdGggcmV0cm9zcGVjdGl2ZQorZWZmZWN0LCBtZWFuaW5nIHRoYXQgYWxsIHByZXZpb3VzIGRldmVsb3BtZW50IHdvcmsgdW5kZXIgdGhlIEdQTCB3aGljaCBpcworaW50ZW5kZWQgZGlzdHJpYnV0ZWQgbXVzdCBiZSBwYWlkIGZvciBhcyBpZiBkZXZlbG9wZWQgdW5kZXIgdGhlIHVuZGVyIHRoZSBDb2luCitQcm9mZXNzaW9uYWwgRWRpdGlvbiBMaWNlbnNlLiAgU0lNIGlzIG5vdCBvYmxpZ2VkIHRvIHNlbGwgc3VjaCBsaWNlbnNlcyB3aXRoCityZXRyb3NwZWN0aXZlIGVmZmVjdCwgYnV0IG1heSBkbyBzbywgYXQgaXRzIG93biBkaXNjcmV0aW9uLgorCisoNikgVXBncmFkZXM6IExpY2Vuc2VlIGlzIGdyYW50ZWQgdGhlIHJpZ2h0IHRvIGZyZWUgdXBncmFkZXMgdG8gYWxsIG5ldyBWZXJzaW9ucworb2YgdGhlIFNvZnR3YXJlLCB0aHJvdWdoIHRoZSB3d3cuY29pbjNkLm9yZyB3ZWJzaXRlIGFuZC9vciB0aGUgQ29pbiBDVlMKK3JlcG9zaXRvcnkgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgTGljZW5zZSAob25lIHllYXIpLCBpbiBhY2NvcmRhbmNlIHdpdGggU0lNJ3MKK2xpY2Vuc2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucyB0aGVuIGFwcGxpY2FibGUgdG8gdGhlIHVwZ3JhZGVzLgorCisoNykgU3VwcG9ydDogTGljZW5zZWUgaGFzIHRoZSByaWdodCB0byBwcmlvcml0aXplZCBlbWFpbCBzb2Z0d2FyZSBkZXZlbG9wZXIKK3N1cHBvcnQgd2l0aCBubyBhZGRpdGlvbmFsIGNvc3QgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgTGljZW5zZSAob25lIHllYXIpLgorCitMaWNlbnNlZSdzIHJpZ2h0cyBhcmUgbm9uLWV4Y2x1c2l2ZS4KKworCitQIFIgSSBDIEUgUyAgIEEgTiBEICAgUCBBIFkgTSBFIE4gVAorCitBcyBjb25zaWRlcmF0aW9uIGZvciB0aGUgcmlnaHRzIGdpdmVuIHRvIExpY2Vuc2VlIHVuZGVyIHRoaXMgTGljZW5zZSwgTGljZW5zZWUKK3NoYWxsIHBheSB0byBTSU0gdGhlIGxpY2Vuc2UgZmVlcyBhcHBsaWNhYmxlIGF0IHRoZSB0aW1lIG9mIG9yZGVyaW5nLiBUaGUKK0xpY2Vuc2UgaXMgbm90IHZhbGlkIHVudGlsIHN1Y2ggb3JkZXIgaGFzIGJlZW4gcGxhY2VkIHdpdGggU0lNLCBhbmQgU0lNIGhhcworYWNjZXB0ZWQgdGhlIG9yZGVyIGluIHdyaXRpbmcuCisKKworIkEgUyAgIEkgUyIgICBQIFUgUiBDIEggQSBTIEUgICAtICAgRCBJIFMgQyBMIEEgSSBNIEUgUiAgIE8gRiAgIAorVyBBIFIgUiBBIE4gVCBJRSBTCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgRVhDRVBUIEFTIFNQRUNJRklDQUxMWSBQUk9WSURFRCBIRVJFSU4sCitTSU0gTUFLRVMgTk8gV0FSUkFOVElFUyBPUiBSRVBSRVNFTlRBVElPTlMsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgV0lUSAorUkVTUEVDVCBUTyBUSEUgU09GVFdBUkUgT1IgRE9DVU1FTlRBVElPTiwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRUlSCitRVUFMSVRZLCBQRVJGT1JNQU5DRSwgTUVSQ0hBTlRBQklMSVRZLCBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRPCitUSEUgRVhURU5UIFRIQVQgQU5ZIFdBUlJBTlRJRVMgV09VTEQgT1RIRVJXSVNFIEJFIElNUExJRUQgQlkgTEFXLCBTSU0gSEVSRUJZCitESVNDTEFJTVMgQUxMIFNVQ0ggV0FSUkFOVElFUywgQU5EIExJQ0VOU0VFIEFDQ0VQVFMgVEhBVCBOTyBTVUNIIFdBUlJBTlRJRVMKK1NIQUxMIEFQUExZLgorCitCZWNhdXNlIHNvZnR3YXJlIGlzIGluaGVyZW50bHkgY29tcGxleCBhbmQgY2Fubm90IGJlIGV4cGVjdGVkIHRvIGJlIGZyZWUgb2YKK2Vycm9ycywgTGljZW5zZWUgaXMgYWR2aXNlZCB0byB2ZXJpZnkgaGlzIHdvcmsgYW5kIG1ha2UgYmFja3VwIGNvcGllcyB3aGVyZQorYXBwcm9wcmlhdGUuIEFueSBhbmQgYWxsIHVzZSBvZiB0aGUgU29mdHdhcmUgb3IgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhlCitTb2Z0d2FyZSBpcyBhdCB0aGUgcmlzayBvZiBMaWNlbnNlZS4KKworCitMIEkgTSBJIFQgQSBUIEkgTyBOICAgTyBGICAgTCBJIEEgQiBJIEwgSSBUIFkKKworSUYsIFNJTSdTIFdBUlJBTlRZIERJU0NMQUlNRVIgTk9UV0lUSFNUQU5ESU5HLCBTSU0gSVMgSEVMRCBMSUFCTEUgVE8gTElDRU5TRUUsCitBTlkgQVdBUkQgT0YgREFNQUdFUyBGUk9NIFNJTSBUTyBMSUNFTlNFRSBTSEFMTCBOT1QgRVhDRUVEIFRIRSBUT1RBTCBBTU9VTlQgVEhBVAorTElDRU5TRUUgSEFTIFBBSUQgVE8gU0lNIElOIENPTk5FQ1RJT04gV0lUSCBUSElTIExJQ0VOU0UuIElOIE5PIEVWRU5UIFNIQUxMIFNJTQorQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgREFNQUdFUyBGT1IgTE9TUyBPUgorQ09SUlVQVElPTiBPRiBEQVRBLCBBTkQgTE9TUyBPRiBQUk9GSVRTIE9SIElOVEVSUlVQVElPTiBPRiBCVVNJTkVTUyksIEhPV0VWRVIKK0NBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFUy4gVE8gVEhFIEVYVEVOVCBUSEFUIFRIRSBBUFBMSUNBQkxFIExBVyBET0VTIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OCitPUiBMSU1JVEFUSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUyBPUiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBGT1IgSU5DSURFTlRBTCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBUSEUgQUJPVkUgTElNSVRBVElPTiBPUiBFWENMVVNJT04gU0hBTEwgQVBQTFkgVE8gVEhFCitNQVhJTVVNIEVYVEVOVCBBTExPV0VELgorCisKK1YgRSBSIEkgRiBJIEMgQSBUIEkgTyBOCisKK1NJTSBtYXksIHVwb24gaXRzIHJlYXNvbmFibGUgcmVxdWVzdCBhbmQgYXQgaXRzIGV4cGVuc2UsIGF1ZGl0IExpY2Vuc2VlIHdpdGgKK3Jlc3BlY3QgdG8gdGhlIHVzZSBvZiB0aGUgTGljZW5zZWQgU29mdHdhcmUuIEFueSBzdWNoIGF1ZGl0IHNoYWxsIGJlIGNvbmR1Y3RlZAorZHVyaW5nIHJlZ3VsYXIgYnVzaW5lc3MgaG91cnMgYXQgTGljZW5zZWUncyBmYWNpbGl0aWVzIGFuZCBzaGFsbCBub3QKK3VucmVhc29uYWJseSBpbnRlcmZlcmUgd2l0aCBMaWNlbnNlZSdzIGJ1c2luZXNzIGFjdGl2aXRpZXMuIFNJTSB3aWxsIG5vdCByZW1vdmUsCitjb3B5LCBvciByZWRpc3RyaWJ1dGUgYW55IGVsZWN0cm9uaWMgbWF0ZXJpYWwgZHVyaW5nIHRoZSBjb3Vyc2Ugb2YgYW4gYXVkaXQuIElmCithbiBhdWRpdCByZXZlYWxzIHRoYXQgTGljZW5zZWUgaXMgdXNpbmcgdGhlIExpY2Vuc2VkIFNvZnR3YXJlIGluIGEgd2F5IHRoYXQgaXMKK2luIG1hdGVyaWFsIHZpb2xhdGlvbiBvZiB0aGUgdGVybXMgb2YgdGhlIExpY2Vuc2UsIHRoZW4gTGljZW5zZWUgc2hhbGwgcGF5IFNJTSdzCityZWFzb25hYmxlIGNvc3RzIG9mIGNvbmR1Y3RpbmcgdGhlIGF1ZGl0LiBJbiB0aGUgY2FzZSBvZiBhIG1hdGVyaWFsIHZpb2xhdGlvbiwKK0xpY2Vuc2VlIGFncmVlcyB0byBwYXkgU0lNIGFueSBhbW91bnRzIG93aW5nIHRoYXQgYXJlIGF0dHJpYnV0YWJsZSB0byB0aGUKK3VuYXV0aG9yaXplZCB1c2UuIEluIHRoZSBhbHRlcm5hdGl2ZSwgU0lNIHJlc2VydmVzIHRoZSByaWdodCwgYXQgU0lNJ3Mgc29sZQorb3B0aW9uLCB0byB0ZXJtaW5hdGUgdGhlIGxpY2Vuc2VzIGZvciB0aGUgTGljZW5zZWQgU29mdHdhcmUuCisKKworVCBFIFIgTSBJIE4gQSBUIEkgTyBOCisKK1NJTSBtYXkgdGVybWluYXRlIHRoZSBMaWNlbnNlIGF0IGFueSB0aW1lIGltbWVkaWF0ZWx5IHVwb24gd3JpdHRlbiBub3RpY2UgYnkgU0lNCit0byBMaWNlbnNlZSBpZiBMaWNlbnNlZSBicmVhY2hlcyB0aGlzIExpY2Vuc2UsIGZhaWxzIHRvIHBheSB0aGUgZmVlcyBmb3IgdGhlCitMaWNlbnNlZCBTb2Z0d2FyZSwgb3IgaW5mcmluZ2VzIFNJTSdzIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbiBvciB0byB0aGUKK0xpY2Vuc2VkIFNvZnR3YXJlLiBVcG9uIHRlcm1pbmF0aW9uIG9mIHRoZSBMaWNlbnNlcywgTGljZW5zZWUgc2hhbGwgcmV0dXJuIHRvCitTSU0gYWxsIGNvcGllcyBvZiBMaWNlbnNlZCBTb2Z0d2FyZSB0aGF0IHdlcmUgc3VwcGxpZWQgYnkgU0lNLiBBbGwgb3RoZXIgY29waWVzCitvZiBMaWNlbnNlZCBTb2Z0d2FyZSBpbiB0aGUgcG9zc2Vzc2lvbiBvciBjb250cm9sIG9mIExpY2Vuc2VlIG11c3QgYmUgZXJhc2VkIG9yCitkZXN0cm95ZWQuIEFuIG9mZmljZXIgb2YgTGljZW5zZWUgbXVzdCBwcm9tcHRseSBkZWxpdmVyIHRvIFNJTSBhIHdyaXR0ZW4KK2NvbmZpcm1hdGlvbiB0aGF0IHRoaXMgaGFzIG9jY3VycmVkLgorCisKK0UgTiBUIEkgUiBFICAgQyBPIE4gVCBSIEEgQyBUICAgQSBOIEQgICBTIEUgViBFIFIgQSBCIEkgTCBJIFQgWQorCitUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLgorSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbgorc2hhbGwgYmUgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLiBUaGUKK3JlbWFpbmRlciB3aWxsIHJlbWFpbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUgYWNjb3JkaW5nIHRvIGl0cyB0ZXJtcy4KKworCitHIE8gViBFIFIgTiBJIE4gRyAgIEwgQSBXICAgQSBOIEQgICBEIEkgUyBQIFUgVCBFIFMKKworVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IE5vcndlZ2lhbiBsYXcuICBVbmxlc3Mgb3RoZXJ3aXNlIGFncmVlZCBpbgord3JpdGluZywgYWxsIGRpc3B1dGVzIGFyaXNpbmcgb3V0IG9mIG9yIGluIGNvbm5lY3Rpb24gd2l0aCB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUKK2Jyb3VnaHQgYmVmb3JlIHRoZSBPc2xvIENpdHkgQ291cnQgYXMgdGhlIGV4Y2x1c2l2ZSBsZWdhbCB2ZW51ZS4KKworSW4gYWRkaXRpb24sIFNJTSBzaGFsbCBiZSBlbnRpdGxlZCB0byBzZWVrIGludGVybG9jdXRvcnkgaW5qdW5jdGlvbnMgaW4gYW55Citjb3VydCBvZiBsYXcgd29ybGR3aWRlLCB0byB0aGUgZXh0ZW50IGFsbG93ZWQgYnkgdGhlIHByb2NlZHVyYWwgbGF3IG9mIHRoZQorcmVsZXZhbnQganVyaXNkaWN0aW9uLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvUEVOVU1CUkEtQ09MTEVDVElPTiBiL2xpY2Vuc2VzL1BFTlVNQlJBLUNPTExFQ1RJT04KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGUyMTE2NAotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL1BFTlVNQlJBLUNPTExFQ1RJT04KQEAgLTAsMCArMSwxMzkgQEAKK0VuZCBVc2VyIExpY2Vuc2UgQWdyZWVtZW50CisKK0xpY2Vuc2UKKzEuVW5kZXIgdGhpcyBFbmQgVXNlciBMaWNlbnNlIEFncmVlbWVudCAodGhlICJBZ3JlZW1lbnQiKSwgRnJpY3Rpb25hbCAKK0dhbWVzICh0aGUgIlZlbmRvciIpIGdyYW50cyB0byB0aGUgdXNlciAodGhlICJMaWNlbnNlZSIpIGEgCitub24tZXhjbHVzaXZlIGFuZCBub24tdHJhbnNmZXJhYmxlIGxpY2Vuc2UgKHRoZSAiTGljZW5zZSIpIHRvIHVzZSAKK1RoZSBQZW51bWJyYSBDb2xsZWN0aW9uICh0aGUgIlNvZnR3YXJlIikuCisKKzIuIlNvZnR3YXJlIiBpbmNsdWRlcyB0aGUgZXhlY3V0YWJsZSBjb21wdXRlciBwcm9ncmFtcyBhbmQgYW55IHJlbGF0ZWQgCitwcmludGVkLCBlbGVjdHJvbmljIGFuZCBvbmxpbmUgZG9jdW1lbnRhdGlvbiBhbmQgYW55IG90aGVyIGZpbGVzIHRoYXQgCittYXkgYWNjb21wYW55IHRoZSBwcm9kdWN0LgorCiszLlRpdGxlLCBjb3B5cmlnaHQsIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgYW5kIGRpc3RyaWJ1dGlvbiAKK3JpZ2h0cyBvZiB0aGUgU29mdHdhcmUgcmVtYWluIGV4Y2x1c2l2ZWx5IHdpdGggdGhlIFZlbmRvci4gSW50ZWxsZWN0dWFsIAorcHJvcGVydHkgcmlnaHRzIGluY2x1ZGUgdGhlIGxvb2sgYW5kIGZlZWwgb2YgdGhlIFNvZnR3YXJlLiBUaGlzIAorQWdyZWVtZW50IGNvbnN0aXR1dGVzIGEgbGljZW5zZSBmb3IgdXNlIG9ubHkgYW5kIGlzIG5vdCBpbiBhbnkgd2F5IGEgCit0cmFuc2ZlciBvZiBvd25lcnNoaXAgcmlnaHRzIHRvIHRoZSBTb2Z0d2FyZS4KKworNC5UaGUgU29mdHdhcmUgbWF5IGJlIGxvYWRlZCBvbnRvIG5vIG1vcmUgdGhhbiBvbmUgY29tcHV0ZXIuIEEgc2luZ2xlIAorY29weSBtYXkgYmUgbWFkZSBmb3IgYmFja3VwIHB1cnBvc2VzIG9ubHkuCisKKzUuVGhlIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYXJlIHBlcnNvbmFsIHJpZ2h0cyAKK2dyYW50ZWQgdG8gdGhlIExpY2Vuc2VlIG9ubHkuIFRoZSBMaWNlbnNlZSBtYXkgbm90IHRyYW5zZmVyIG9yIGFzc2lnbiAKK2FueSBvZiB0aGUgcmlnaHRzIG9yIG9ibGlnYXRpb25zIGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgdG8gYW55IAorb3RoZXIgcGVyc29uIG9yIGxlZ2FsIGVudGl0eS4gVGhlIExpY2Vuc2VlIG1heSBub3QgbWFrZSBhdmFpbGFibGUgdGhlIAorU29mdHdhcmUgZm9yIHVzZSBieSBvbmUgb3IgbW9yZSB0aGlyZCBwYXJ0aWVzLgorCis2LlRoZSBTb2Z0d2FyZSBtYXkgbm90IGJlIG1vZGlmaWVkLCByZXZlcnNlLWVuZ2luZWVyZWQsIG9yIGRlLWNvbXBpbGVkIAoraW4gYW55IG1hbm5lciB0aHJvdWdoIGN1cnJlbnQgb3IgZnV0dXJlIGF2YWlsYWJsZSB0ZWNobm9sb2dpZXMuCisKKzcuRmFpbHVyZSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIHVuZGVyIHRoZSBMaWNlbnNlIHNlY3Rpb24gCit3aWxsIGJlIGNvbnNpZGVyZWQgYSBtYXRlcmlhbCBicmVhY2ggb2YgdGhpcyBBZ3JlZW1lbnQuCisKKworTGljZW5zZSBGZWUKKzguVGhlIG9yaWdpbmFsIHB1cmNoYXNlIHByaWNlIHBhaWQgYnkgdGhlIExpY2Vuc2VlIHdpbGwgY29uc3RpdHV0ZSB0aGUgCitlbnRpcmUgbGljZW5zZSBmZWUgYW5kIGlzIHRoZSBmdWxsIGNvbnNpZGVyYXRpb24gZm9yIHRoaXMgQWdyZWVtZW50LgorCisKK0xpbWl0YXRpb24gb2YgTGlhYmlsaXR5Cis5LlRoZSBTb2Z0d2FyZSBpcyBwcm92aWRlZCBieSB0aGUgVmVuZG9yIGFuZCBhY2NlcHRlZCBieSB0aGUgTGljZW5zZWUgCisiYXMgaXMiLiBUaGUgVmVuZG9yIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGdlbmVyYWwsIHNwZWNpYWwsIAoraW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIGxvc3MgCitvZiBwcm9kdWN0aW9uLCBsb3NzIG9mIHByb2ZpdHMsIGxvc3Mgb2YgcmV2ZW51ZSwgbG9zcyBvZiBkYXRhLCBvciBhbnkgCitvdGhlciBidXNpbmVzcyBvciBlY29ub21pYyBkaXNhZHZhbnRhZ2Ugc3VmZmVyZWQgYnkgdGhlIExpY2Vuc2VlIAorYXJpc2luZyBvdXQgb2YgdGhlIHVzZSBvciBmYWlsdXJlIHRvIHVzZSB0aGUgU29mdHdhcmUuCisKKzEwLlRoZSBWZW5kb3IgbWFrZXMgbm8gd2FycmFudHkgZXhwcmVzc2VkIG9yIGltcGxpZWQgcmVnYXJkaW5nIHRoZSAKK2ZpdG5lc3Mgb2YgdGhlIFNvZnR3YXJlIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZSBvciB0aGF0IHRoZSBTb2Z0d2FyZSAKK3dpbGwgYmUgc3VpdGFibGUgb3IgYXBwcm9wcmlhdGUgZm9yIHRoZSBzcGVjaWZpYyByZXF1aXJlbWVudHMgb2YgdGhlIAorTGljZW5zZWUuCisKKzExLlRoZSBWZW5kb3IgZG9lcyBub3Qgd2FycmFudCB0aGF0IHVzZSBvZiB0aGUgU29mdHdhcmUgd2lsbCBiZSAKK3VuaW50ZXJydXB0ZWQgb3IgZXJyb3ItZnJlZS4gVGhlIExpY2Vuc2VlIGFjY2VwdHMgdGhhdCBzb2Z0d2FyZSBpbiAKK2dlbmVyYWwgaXMgcHJvbmUgdG8gYnVncyBhbmQgZmxhd3Mgd2l0aGluIGFuIGFjY2VwdGFibGUgbGV2ZWwgYXMgCitkZXRlcm1pbmVkIGluIHRoZSBpbmR1c3RyeS4KKworCitXYXJyYW50cyBhbmQgUmVwcmVzZW50YXRpb25zCisxMi5UaGUgVmVuZG9yIHdhcnJhbnRzIGFuZCByZXByZXNlbnRzIHRoYXQgaXQgaXMgdGhlIGNvcHlyaWdodCBob2xkZXIgCitvZiB0aGUgU29mdHdhcmUuIFRoZSBWZW5kb3Igd2FycmFudHMgYW5kIHJlcHJlc2VudHMgdGhhdCBncmFudGluZyB0aGUgCitsaWNlbnNlIHRvIHVzZSB0aGlzIFNvZnR3YXJlIGlzIG5vdCBpbiB2aW9sYXRpb24gb2YgYW55IG90aGVyIAorYWdyZWVtZW50LCBjb3B5cmlnaHQgb3IgYXBwbGljYWJsZSBzdGF0dXRlLgorCisKK0FjY2VwdGFuY2UKKzEzLkFsbCB0ZXJtcywgY29uZGl0aW9ucyBhbmQgb2JsaWdhdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgd2lsbCBiZSAKK2RlZW1lZCB0byBiZSBhY2NlcHRlZCBieSB0aGUgTGljZW5zZWUgKCJBY2NlcHRhbmNlIikgb24gaW5zdGFsbGF0aW9uIG9mIAordGhlIFNvZnR3YXJlLgorCisKK1Rlcm0KKzE0LlRoZSB0ZXJtIG9mIHRoaXMgQWdyZWVtZW50IHdpbGwgYmVnaW4gb24gQWNjZXB0YW5jZSBhbmQgaXMgcGVycGV0dWFsLgorCisKK1Rlcm1pbmF0aW9uCisxNS5UaGlzIEFncmVlbWVudCB3aWxsIGJlIHRlcm1pbmF0ZWQgYW5kIHRoZSBMaWNlbnNlIGZvcmZlaXRlZCB3aGVyZSAKK3RoZSBMaWNlbnNlZSBoYXMgZmFpbGVkIHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcyAKK0FncmVlbWVudCBvciBpcyBpbiBicmVhY2ggb2YgdGhpcyBBZ3JlZW1lbnQuIE9uIHRlcm1pbmF0aW9uIG9mIHRoaXMgCitBZ3JlZW1lbnQgZm9yIGFueSByZWFzb24sIHRoZSBMaWNlbnNlZSB3aWxsIHByb21wdGx5IGRlc3Ryb3kgdGhlIAorU29mdHdhcmUgb3IgcmV0dXJuIHRoZSBTb2Z0d2FyZSB0byB0aGUgVmVuZG9yLgorCisKK0ZvcmNlIE1hamV1cmUKKzE2LlRoZSBWZW5kb3Igd2lsbCBiZSBmcmVlIG9mIGxpYWJpbGl0eSB0byB0aGUgTGljZW5zZWUgd2hlcmUgdGhlIAorVmVuZG9yIGlzIHByZXZlbnRlZCBmcm9tIGV4ZWN1dGluZyBpdHMgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgCitpbiB3aG9sZSBvciBpbiBwYXJ0IGR1ZSB0byBGb3JjZSBNYWpldXJlLCBzdWNoIGFzIGVhcnRocXVha2UsIHR5cGhvb24sIAorZmxvb2QsIGZpcmUsIGFuZCB3YXIgb3IgYW55IG90aGVyIHVuZm9yZXNlZW4gYW5kIHVuY29udHJvbGxhYmxlIGV2ZW50IAord2hlcmUgdGhlIFZlbmRvciBoYXMgdGFrZW4gYW55IGFuZCBhbGwgYXBwcm9wcmlhdGUgYWN0aW9uIHRvIG1pdGlnYXRlIAorc3VjaCBhbiBldmVudC4KKworCitHb3Zlcm5pbmcgTGF3CisxNy5UaGUgUGFydGllcyB0byB0aGlzIEFncmVlbWVudCBzdWJtaXQgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgCitjb3VydHMgb2YgU3dlZGVuIGZvciB0aGUgZW5mb3JjZW1lbnQgb2YgdGhpcyBBZ3JlZW1lbnQgb3IgYW55IAorYXJiaXRyYXRpb24gYXdhcmQgb3IgZGVjaXNpb24gYXJpc2luZyBmcm9tIHRoaXMgQWdyZWVtZW50LiBUaGlzIAorQWdyZWVtZW50IHdpbGwgYmUgZW5mb3JjZWQgb3IgY29uc3RydWVkIGFjY29yZGluZyB0byB0aGUgbGF3cyBvZiBTd2VkZW4uCisKKworTWlzY2VsbGFuZW91cworMTguVGhpcyBBZ3JlZW1lbnQgY2FuIG9ubHkgYmUgbW9kaWZpZWQgaW4gd3JpdGluZyBzaWduZWQgYnkgYm90aCB0aGUgCitWZW5kb3IgYW5kIHRoZSBMaWNlbnNlZS4KKworMTkuVGhpcyBBZ3JlZW1lbnQgZG9lcyBub3QgY3JlYXRlIG9yIGltcGx5IGFueSByZWxhdGlvbnNoaXAgaW4gYWdlbmN5IAorb3IgcGFydG5lcnNoaXAgYmV0d2VlbiB0aGUgVmVuZG9yIGFuZCB0aGUgTGljZW5zZWUuCisKKzIwLkhlYWRpbmdzIGFyZSBpbnNlcnRlZCBmb3IgdGhlIGNvbnZlbmllbmNlIG9mIHRoZSBwYXJ0aWVzIG9ubHkgYW5kIAorYXJlIG5vdCB0byBiZSBjb25zaWRlcmVkIHdoZW4gaW50ZXJwcmV0aW5nIHRoaXMgQWdyZWVtZW50LiBXb3JkcyBpbiB0aGUgCitzaW5ndWxhciBtZWFuIGFuZCBpbmNsdWRlIHRoZSBwbHVyYWwgYW5kIHZpY2UgdmVyc2EuIFdvcmRzIGluIHRoZSAKK21hc2N1bGluZSBnZW5kZXIgaW5jbHVkZSB0aGUgZmVtaW5pbmUgZ2VuZGVyIGFuZCB2aWNlIHZlcnNhLiBXb3JkcyBpbiAKK3RoZSBuZXV0ZXIgZ2VuZGVyIGluY2x1ZGUgdGhlIG1hc2N1bGluZSBnZW5kZXIgYW5kIHRoZSBmZW1pbmluZSBnZW5kZXIgCithbmQgdmljZSB2ZXJzYS4KKworMjEuSWYgYW55IHRlcm0sIGNvdmVuYW50LCBjb25kaXRpb24gb3IgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIAoraGVsZCBieSBhIGNvdXJ0IG9mIGNvbXBldGVudCBqdXJpc2RpY3Rpb24gdG8gYmUgaW52YWxpZCwgdm9pZCBvciAKK3VuZW5mb3JjZWFibGUsIGl0IGlzIHRoZSBwYXJ0aWVzJyBpbnRlbnQgdGhhdCBzdWNoIHByb3Zpc2lvbiBiZSByZWR1Y2VkIAoraW4gc2NvcGUgYnkgdGhlIGNvdXJ0IG9ubHkgdG8gdGhlIGV4dGVudCBkZWVtZWQgbmVjZXNzYXJ5IGJ5IHRoYXQgY291cnQgCit0byByZW5kZXIgdGhlIHByb3Zpc2lvbiByZWFzb25hYmxlIGFuZCBlbmZvcmNlYWJsZSBhbmQgdGhlIHJlbWFpbmRlciBvZiAKK3RoZSBwcm92aXNpb25zIG9mIHRoaXMgQWdyZWVtZW50IHdpbGwgaW4gbm8gd2F5IGJlIGFmZmVjdGVkLCBpbXBhaXJlZCAKK29yIGludmFsaWRhdGVkIGFzIGEgcmVzdWx0LgorCisyMi5UaGlzIEFncmVlbWVudCBjb250YWlucyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzLiAKK0FsbCB1bmRlcnN0YW5kaW5ncyBoYXZlIGJlZW4gaW5jbHVkZWQgaW4gdGhpcyBBZ3JlZW1lbnQuIAorUmVwcmVzZW50YXRpb25zIHdoaWNoIG1heSBoYXZlIGJlZW4gbWFkZSBieSBhbnkgcGFydHkgdG8gdGhpcyBBZ3JlZW1lbnQgCittYXkgaW4gc29tZSB3YXkgYmUgaW5jb25zaXN0ZW50IHdpdGggdGhpcyBmaW5hbCB3cml0dGVuIEFncmVlbWVudC4gQWxsIAorc3VjaCBzdGF0ZW1lbnRzIGFyZSBkZWNsYXJlZCB0byBiZSBvZiBubyB2YWx1ZSBpbiB0aGlzIEFncmVlbWVudC4gT25seSAKK3RoZSB3cml0dGVuIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50IHdpbGwgYmluZCB0aGUgcGFydGllcy4KKworMjMuVGhpcyBBZ3JlZW1lbnQgYW5kIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBjb250YWluZWQgaW4gdGhpcyAKK0FncmVlbWVudCBhcHBseSB0byBhbmQgYXJlIGJpbmRpbmcgdXBvbiB0aGUgVmVuZG9yJ3Mgc3VjY2Vzc29ycyBhbmQgCithc3NpZ25zLgorCisKK05vdGljZXMKKzI0LkFsbCBub3RpY2VzIHRvIHRoZSBWZW5kb3IgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHRvIGJlIHByb3ZpZGVkIGF0IAordGhlIGZvbGxvd2luZyBhZGRyZXNzOgorCUZyaWN0aW9uYWwgR2FtZXMKKwlTb2RyYSBUdmFyZ2F0YW4gNiwgMjUyIDI2IEhlbHNpbmdib3JnLCBTd2VkZW4JIAorCmRpZmYgLS1naXQgYS9saWNlbnNlcy9QSFAtMi4wMiBiL2xpY2Vuc2VzL1BIUC0yLjAyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNWIwMWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9QSFAtMi4wMgpAQCAtMCwwICsxLDc1IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKKyAgICAgICAgICAgICAgICAgIFRoZSBQSFAgTGljZW5zZSwgdmVyc2lvbiAyLjAyCitDb3B5cmlnaHQgKGMpIDE5OTkgLSAyMDAyIFRoZSBQSFAgR3JvdXAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGlzIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKworICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorIAorICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIAorICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyAKKyAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAKKyAgMy4gVGhlIG5hbWUgIlBIUCIgbXVzdCBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgCisgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3IgcGVybWlzc2lvbiBmcm9tIHRoZSAKKyAgICAgUEhQIEdyb3VwLiAgVGhpcyBkb2VzIG5vdCBhcHBseSB0byBhZGQtb24gbGlicmFyaWVzIG9yIHRvb2xzCisgICAgIHRoYXQgd29yayBpbiBjb25qdW5jdGlvbiB3aXRoIFBIUC4gIEluIHN1Y2ggYSBjYXNlIHRoZSBQSFAKKyAgICAgbmFtZSBtYXkgYmUgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBwcm9kdWN0IHN1cHBvcnRzIFBIUC4KKyAKKyAgNC4gVGhlIFBIUCBHcm91cCBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlCisgICAgIGxpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEKKyAgICAgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuCisgICAgIE9uY2UgY292ZXJlZCBjb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbgorICAgICBvZiB0aGUgbGljZW5zZSwgeW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZQorICAgICB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggY292ZXJlZAorICAgICBjb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlCisgICAgIHB1Ymxpc2hlZCBieSB0aGUgUEhQIEdyb3VwLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgUEhQIEdyb3VwIGhhcworICAgICB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIGNvdmVyZWQgY29kZSBjcmVhdGVkCisgICAgIHVuZGVyIHRoaXMgTGljZW5zZS4KKworICA1LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisgICAgIGFja25vd2xlZGdtZW50OgorICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIFBIUCwgZnJlZWx5IGF2YWlsYWJsZSBmcm9tCisgICAgIGh0dHA6Ly93d3cucGhwLm5ldC8iLgorCisgIDYuIFRoZSBzb2Z0d2FyZSBpbmNvcnBvcmF0ZXMgdGhlIFplbmQgRW5naW5lLCBhIHByb2R1Y3Qgb2YgWmVuZAorICAgICBUZWNobm9sb2dpZXMsIEx0ZC4gKCJaZW5kIikuIFRoZSBaZW5kIEVuZ2luZSBpcyBsaWNlbnNlZCB0byB0aGUKKyAgICAgUEhQIEFzc29jaWF0aW9uIChwdXJzdWFudCB0byBhIGdyYW50IGZyb20gWmVuZCB0aGF0IGNhbiBiZQorICAgICBmb3VuZCBhdCBodHRwOi8vd3d3LnBocC5uZXQvbGljZW5zZS9aZW5kR3JhbnQvKSBmb3IKKyAgICAgZGlzdHJpYnV0aW9uIHRvIHlvdSB1bmRlciB0aGlzIGxpY2Vuc2UgYWdyZWVtZW50LCBvbmx5IGFzIGEKKyAgICAgcGFydCBvZiBQSFAuICBJbiB0aGUgZXZlbnQgdGhhdCB5b3Ugc2VwYXJhdGUgdGhlIFplbmQgRW5naW5lCisgICAgIChvciBhbnkgcG9ydGlvbiB0aGVyZW9mKSBmcm9tIHRoZSByZXN0IG9mIHRoZSBzb2Z0d2FyZSwgb3IKKyAgICAgbW9kaWZ5IHRoZSBaZW5kIEVuZ2luZSwgb3IgYW55IHBvcnRpb24gdGhlcmVvZiwgeW91ciB1c2Ugb2YgdGhlCisgICAgIHNlcGFyYXRlZCBvciBtb2RpZmllZCBaZW5kIEVuZ2luZSBzb2Z0d2FyZSBzaGFsbCBub3QgYmUgZ292ZXJuZWQKKyAgICAgYnkgdGhpcyBsaWNlbnNlLCBhbmQgaW5zdGVhZCBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgbGljZW5zZQorICAgICBzZXQgZm9ydGggYXQgaHR0cDovL3d3dy56ZW5kLmNvbS9saWNlbnNlL1plbmRMaWNlbnNlLy4gCisKKworCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQSFAgREVWRUxPUE1FTlQgVEVBTSBgYEFTIElTJycgQU5EIAorQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgCitQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUEhQCitERVZFTE9QTUVOVCBURUFNIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCAKK0lORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiAKK1NFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKKworVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKK2luZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiB0aGUgUEhQIEdyb3VwLgorCitUaGUgUEhQIEdyb3VwIGNhbiBiZSBjb250YWN0ZWQgdmlhIEVtYWlsIGF0IGdyb3VwQHBocC5uZXQuCisKK0ZvciBtb3JlIGluZm9ybWF0aW9uIG9uIHRoZSBQSFAgR3JvdXAgYW5kIHRoZSBQSFAgcHJvamVjdCwgCitwbGVhc2Ugc2VlIDxodHRwOi8vd3d3LnBocC5uZXQ+LgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvUEhQLTMgYi9saWNlbnNlcy9QSFAtMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Yjk5YTE0Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvUEhQLTMKQEAgLTAsMCArMSw2OCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCisgICAgICAgICAgICAgICAgICBUaGUgUEhQIExpY2Vuc2UsIHZlcnNpb24gMy4wCitDb3B5cmlnaHQgKGMpIDE5OTkgLSAyMDAyIFRoZSBQSFAgR3JvdXAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAKKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGlzIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKworICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgCisgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgICAgIGRpc3RyaWJ1dGlvbi4KKyAKKyAgMy4gVGhlIG5hbWUgIlBIUCIgbXVzdCBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uIEZvcgorICAgICB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGdyb3VwQHBocC5uZXQuCisgIAorICA0LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiUEhQIiwgbm9yCisgICAgIG1heSAiUEhQIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24KKyAgICAgZnJvbSBncm91cEBwaHAubmV0LiAgWW91IG1heSBpbmRpY2F0ZSB0aGF0IHlvdXIgc29mdHdhcmUgd29ya3MgaW4KKyAgICAgY29uanVuY3Rpb24gd2l0aCBQSFAgYnkgc2F5aW5nICJGb28gZm9yIFBIUCIgaW5zdGVhZCBvZiBjYWxsaW5nCisgICAgIGl0ICJQSFAgRm9vIiBvciAicGhwZm9vIgorIAorICA1LiBUaGUgUEhQIEdyb3VwIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUKKyAgICAgbGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYQorICAgICBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4KKyAgICAgT25jZSBjb3ZlcmVkIGNvZGUgaGFzIGJlZW4gcHVibGlzaGVkIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uCisgICAgIG9mIHRoZSBsaWNlbnNlLCB5b3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zCisgICAgIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvIGNob29zZSB0byB1c2Ugc3VjaCBjb3ZlcmVkIGNvZGUKKyAgICAgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UKKyAgICAgcHVibGlzaGVkIGJ5IHRoZSBQSFAgR3JvdXAuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBQSFAgR3JvdXAgaGFzCisgICAgIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIGFwcGxpY2FibGUgdG8gY292ZXJlZCBjb2RlIGNyZWF0ZWQKKyAgICAgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisgIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKyAgICAgYWNrbm93bGVkZ21lbnQ6CisgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgUEhQLCBmcmVlbHkgYXZhaWxhYmxlIGZyb20KKyAgICAgPGh0dHA6Ly93d3cucGhwLm5ldC8+Ii4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUEhQIERFVkVMT1BNRU5UIFRFQU0gYGBBUyBJUycnIEFORCAKK0FOWSBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKK1RIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIAorUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBIUAorREVWRUxPUE1FTlQgVEVBTSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgCitJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgCitTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKK1NUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKK0FSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKK09GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCisKK1RoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBtYW55CitpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIFBIUCBHcm91cC4KKworVGhlIFBIUCBHcm91cCBjYW4gYmUgY29udGFjdGVkIHZpYSBFbWFpbCBhdCBncm91cEBwaHAubmV0LgorCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBvbiB0aGUgUEhQIEdyb3VwIGFuZCB0aGUgUEhQIHByb2plY3QsIAorcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5waHAubmV0Pi4KKworVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHRoZSBaZW5kIEVuZ2luZSwgZnJlZWx5IGF2YWlsYWJsZSBhdAorPGh0dHA6Ly93d3cuemVuZC5jb20+LgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvUEhQLTMuMDEgYi9saWNlbnNlcy9QSFAtMy4wMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZDNmYTA3Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvUEhQLTMuMDEKQEAgLTAsMCArMSw2OCBAQAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCisgICAgICAgICAgICAgICAgICBUaGUgUEhQIExpY2Vuc2UsIHZlcnNpb24gMy4wMQorQ29weXJpZ2h0IChjKSAxOTk5IC0gMjAwNiBUaGUgUEhQIEdyb3VwLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBpcyBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisKKyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIAorICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICAgICBkaXN0cmlidXRpb24uCisgCisgIDMuIFRoZSBuYW1lICJQSFAiIG11c3Qgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3IKKyAgICAgd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBncm91cEBwaHAubmV0LgorICAKKyAgNC4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIlBIUCIsIG5vcgorICAgICBtYXkgIlBIUCIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uCisgICAgIGZyb20gZ3JvdXBAcGhwLm5ldC4gIFlvdSBtYXkgaW5kaWNhdGUgdGhhdCB5b3VyIHNvZnR3YXJlIHdvcmtzIGluCisgICAgIGNvbmp1bmN0aW9uIHdpdGggUEhQIGJ5IHNheWluZyAiRm9vIGZvciBQSFAiIGluc3RlYWQgb2YgY2FsbGluZworICAgICBpdCAiUEhQIEZvbyIgb3IgInBocGZvbyIKKyAKKyAgNS4gVGhlIFBIUCBHcm91cCBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlCisgICAgIGxpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEKKyAgICAgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuCisgICAgIE9uY2UgY292ZXJlZCBjb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbgorICAgICBvZiB0aGUgbGljZW5zZSwgeW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcworICAgICBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggY292ZXJlZCBjb2RlCisgICAgIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBsaWNlbnNlCisgICAgIHB1Ymxpc2hlZCBieSB0aGUgUEhQIEdyb3VwLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgUEhQIEdyb3VwIGhhcworICAgICB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIGNvdmVyZWQgY29kZSBjcmVhdGVkCisgICAgIHVuZGVyIHRoaXMgTGljZW5zZS4KKworICA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisgICAgIGFja25vd2xlZGdtZW50OgorICAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIFBIUCBzb2Z0d2FyZSwgZnJlZWx5IGF2YWlsYWJsZSBmcm9tCisgICAgIDxodHRwOi8vd3d3LnBocC5uZXQvc29mdHdhcmUvPiIuCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBIUCBERVZFTE9QTUVOVCBURUFNIGBgQVMgSVMnJyBBTkQgCitBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCitUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSAKK1BBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBQSFAKK0RFVkVMT1BNRU5UIFRFQU0gT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIAorSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIAorKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIAorU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCitTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECitPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAorCitUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueQoraW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBQSFAgR3JvdXAuCisKK1RoZSBQSFAgR3JvdXAgY2FuIGJlIGNvbnRhY3RlZCB2aWEgRW1haWwgYXQgZ3JvdXBAcGhwLm5ldC4KKworRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIFBIUCBHcm91cCBhbmQgdGhlIFBIUCBwcm9qZWN0LCAKK3BsZWFzZSBzZWUgPGh0dHA6Ly93d3cucGhwLm5ldD4uCisKK1BIUCBpbmNsdWRlcyB0aGUgWmVuZCBFbmdpbmUsIGZyZWVseSBhdmFpbGFibGUgYXQKKzxodHRwOi8vd3d3LnplbmQuY29tPi4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL1BJQ08gYi9saWNlbnNlcy9QSUNPCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwYjdlMmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9QSUNPCkBAIC0wLDAgKzEsNTggQEAKKworCitQaW5lIGFuZCBQaWNvIGFyZSByZWdpc3RlcmVkIHRyYWRlbWFya3Mgb2YgdGhlIFVuaXZlcnNpdHkgb2YKK1dhc2hpbmd0b24uICBObyBjb21tZXJjaWFsIHVzZSBvZiB0aGVzZSB0cmFkZW1hcmtzIG1heSBiZSBtYWRlIHdpdGhvdXQKK3ByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLgorCitQaW5lLCBQaWNvLCBhbmQgUGlsb3Qgc29mdHdhcmUgYW5kIGl0cyBpbmNsdWRlZCB0ZXh0IGFyZSBDb3B5cmlnaHQKKzE5ODktMjAwMiBieSB0aGUgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLgorCitVc2Ugb2YgUGluZS9QaWNvL1BpbG90OiBZb3UgbWF5IGNvbXBpbGUgYW5kIGV4ZWN1dGUgdGhlc2UgcHJvZ3JhbXMgZm9yCithbnkgcHVycG9zZSwgaW5jbHVkaW5nIGNvbW1lcmNpYWwsIHdpdGhvdXQgcGF5aW5nIGFueXRoaW5nIHRvIHRoZQorVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLCBwcm92aWRlZCB0aGF0IHRoZSBsZWdhbCBub3RpY2VzIGFyZQorbWFpbnRhaW5lZCBpbnRhY3QgYW5kIGhvbm9yZWQuCisKK0xvY2FsIG1vZGlmaWNhdGlvbiBvZiB0aGlzIHJlbGVhc2UgaXMgcGVybWl0dGVkIGFzIGZvbGxvd3MsIG9yIGJ5CittdXR1YWwgYWdyZWVtZW50OiBJbiBvcmRlciB0byByZWR1Y2UgY29uZnVzaW9uIGFuZCBmYWNpbGl0YXRlCitkZWJ1Z2dpbmcsIHdlIHJlcXVlc3QgdGhhdCBsb2NhbGx5IG1vZGlmaWVkIHZlcnNpb25zIGJlIGRlbm90ZWQgYnkKK2FwcGVuZGluZyB0aGUgbGV0dGVyICJMIiB0byB0aGUgY3VycmVudCB2ZXJzaW9uIG51bWJlciwgYW5kIHRoYXQgdGhlCitsb2NhbCBjaGFuZ2VzIGJlIGVudW1lcmF0ZWQgaW4gdGhlIGludGVncmFsIHJlbGVhc2Ugbm90ZXMgYW5kCithc3NvY2lhdGVkIGRvY3VtZW50YXRpb24uCisKK1JlZGlzdHJpYnV0aW9uIG9mIHRoaXMgcmVsZWFzZSBpcyBwZXJtaXR0ZWQgYXMgZm9sbG93cywgb3IgYnkgbXV0dWFsCithZ3JlZW1lbnQ6CisoYSkgSW4gZnJlZS1vZi1jaGFyZ2Ugb3IgYXQtY29zdCBkaXN0cmlidXRpb25zIGJ5IG5vbi1wcm9maXQgY29uY2VybnM7CisoYikgSW4gZnJlZS1vZi1jaGFyZ2UgZGlzdHJpYnV0aW9ucyBieSBmb3ItcHJvZml0IGNvbmNlcm5zOworKGMpIEluY2x1c2lvbiBpbiBhIENELVJPTSBjb2xsZWN0aW9uIG9mIGZyZWUtb2YtY2hhcmdlLCBzaGFyZXdhcmUsIG9yCisgICAgbm9uLXByb3ByaWV0YXJ5IHNvZnR3YXJlIGZvciB3aGljaCBhIGZlZSBtYXkgYmUgY2hhcmdlZCBmb3IgdGhlCisgICAgcGFja2FnZWQgZGlzdHJpYnV0aW9uLgorCitSZWRpc3RyaWJ1dGlvbiBvZiBiaW5hcnkgdmVyc2lvbnMgaXMgZnVydGhlciBjb25zdHJhaW5lZCBieSBsaWNlbnNlCithZ3JlZW1lbnRzIGZvciBpbmNvcnBvcmF0ZWQgbGlicmFyaWVzIGZyb20gdGhpcmQgcGFydGllcywgZS5nLiBMREFQLAorR1NTQVBJLgorCitUaGUgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uIGVuY291cmFnZXMgdW5yZXN0cmljdGVkIGRpc3RyaWJ1dGlvbiBvZgoraW5kaXZpZHVhbCBwYXRjaGVzIHRvIHRoZSBQaW5lIHN5c3RlbS4gQnkgInBhdGNoZXMiIHdlIG1lYW4KKyJkaWZmZXJlbmNlIiBmaWxlcyB0aGF0IGNhbiBiZSBhcHBsaWVkIHRvIHRoZSBVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24KK1BpbmUgc291cmNlIGRpc3RyaWJ1dGlvbiBpbiBvcmRlciB0byBhY2NvbXBsaXNoIGJ1ZyBmaXhlcywgbWlub3IKK2VuaGFuY2VtZW50cywgb3IgYWRhcHRhdGlvbiB0byBuZXcgb3BlcmF0aW5nIHN5c3RlbXMuIFN1Ym1pc3Npb24gb2YKK3RoZXNlIHBhdGNoZXMgdG8gVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uIGZvciBwb3NzaWJsZSBpbmNsdXNpb24gaW4KK2Z1dHVyZSBQaW5lIHZlcnNpb25zIGlzIGFsc28gZW5jb3VyYWdlZC4KKworVGhlIGFib3ZlIHBlcm1pc3Npb25zIGFyZSBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgUGluZSBhbmQKK1BpY28gY29weXJpZ2h0IGFuZCB0cmFkZW1hcmsgbm90aWNlcyBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdAorYm90aCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4KK3N1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgb2YKK1dhc2hpbmd0b24gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8KK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgcHJpb3Igd3JpdHRlbgorcGVybWlzc2lvbi4gVGhpcyBzb2Z0d2FyZSBpcyBtYWRlIGF2YWlsYWJsZSAiYXMgaXMiLCBhbmQKKworVEhFIFVOSVZFUlNJVFkgT0YgV0FTSElOR1RPTiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IKK0lNUExJRUQsIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04KK0FMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UsIEFORCBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgVU5JVkVSU0lUWSBPRiBXQVNISU5HVE9OIEJFIExJQUJMRQorRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKK1dIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSkgT1IgU1RSSUNUIExJQUJJTElUWSwKK0FSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMKK1NPRlRXQVJFLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvUExBTjkgYi9saWNlbnNlcy9QTEFOOQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmEyYjQzCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvUExBTjkKQEAgLTAsMCArMSw2NjcgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBMVUNFTlQgVEVDSE5PTE9HSUVTIElOQy4KKworICAgICAgICAgICAgICAgICAgICAgIFBMQU4gOSBPUEVOIFNPVVJDRSBMSUNFTlNFIEFHUkVFTUVOVAorCisgICBQTEVBU0UgUkVBRCAgVEhJUyAgQUdSRUVNRU5UICAoSU5DTFVESU5HIFRIRSAgRVhISUJJVFMpICBDQVJFRlVMTFkgIEJFRk9SRQorICAgUFJPQ0VFRElORy4gQlkgIENMSUNLSU5HICBPTiAgVEhFICAiQUNDRVBUIiAgQlVUVE9OLCAgT1IgIEJZICBET1dOTE9BRElORywKKyAgIElOU1RBTExJTkcsIFVTSU5HLCAgQ09QWUlORywgTU9ESUZZSU5HICBPUiAgRElTVFJJQlVUSU5HIFRIRSAgU09GVFdBUkUgIE9SCisgICBERVJJVkFUSVZFICBXT1JLUyAgVEhFUkVPRiwgIFlPVSAgQVJFICBDT05TRU5USU5HICBUTyAgQkUgIEJPVU5EICBCWSAgVEhJUworICAgQUdSRUVNRU5ULgorCisgICBJRiBZT1UgRE8gTk9UIEFHUkVFICBUTyBBTEwgT0YgVEhFIFRFUk1TICBPRiBUSElTIEFHUkVFTUVOVCwgQ0xJQ0sgT04gIFRIRQorICAgIkRPIE5PVCAgQUNDRVBUIiBCVVRUT04gIEFORCBUSEUgIElOU1RBTExBVElPTi9ET1dOTE9BRCBQUk9DRVNTICBXSUxMICBOT1QKKyAgIENPTlRJTlVFLgorCisgICAxLglERUZJTklUSU9OUworCisgICAgIDEuICJBZ3JlZW1lbnQiIG1lYW5zIHRoaXMgTHVjZW50IFRlY2hub2xvZ2llcyBJbmMuIFBsYW4gOSBPcGVuIFNvdXJjZQorICAgICAgICBMaWNlbnNlIEFncmVlbWVudCAoaW5jbHVkaW5nIEV4aGliaXRzKS4KKworICAgICAxLiAiQ29udHJpYnV0b3IocykiIG1lYW5zIGFueSBpbmRpdmlkdWFsIG9yIGxlZ2FsIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IKKyAgICAgICAgY29udHJpYnV0ZXMgdG8gYSBNb2RpZmljYXRpb24gb2YgdGhlIE9yaWdpbmFsIFNvZnR3YXJlLgorCisgICAgIDEuICJMaWNlbnNlZSIgbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBlbnRlcmluZyBpbnRvIGFuZAorICAgICAgICBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudC4gRm9yIHRoZSBwdXJwb3NlcyBoZXJldW5kZXIsCisgICAgICAgIExpY2Vuc2VlIGluY2x1ZGVzIGFueSBlbnRpdHkgdGhhdCBjb250cm9scywgaXMgY29udHJvbGxlZCBieSwgb3IgaXMKKyAgICAgICAgdW5kZXIgY29tbW9uIGNvbnRyb2wgd2l0aCBMaWNlbnNlZS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwKKyAgICAgICAgImNvbnRyb2wiIG1lYW5zIChpKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlCisgICAgICAgIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yCisgICAgICAgIG90aGVyd2lzZTsgb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZQorICAgICAgICBjb250cm9sbGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuIExpY2Vuc2VlCisgICAgICAgIGlzIGFsc28gcmVmZXJyZWQgdG8gaGVyZWluIGFzICJZb3UiIHdpdGggIllvdXIiIGFzIHRoZSBwb3NzZXNzaXZlLgorCisgICAgIDEuICJMaWNlbnNlZCBTb2Z0d2FyZSIgbWVhbnMgdGhlIE9yaWdpbmFsIFNvZnR3YXJlLCBNb2RpZmljYXRpb25zLCBvcgorICAgICAgICBhbnkgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIGFuZCBNb2RpZmljYXRpb25zLgorCisgICAgIDEuICJMdWNlbnQiIG1lYW5zIEx1Y2VudCBUZWNobm9sb2dpZXMgSW5jLiwgYSBEZWxhd2FyZSBjb3Jwb3JhdGlvbgorICAgICAgICBoYXZpbmcgYW4gb2ZmaWNlIGF0IDYwMCBNb3VudGFpbiBBdmUuLCBNdXJyYXkgSGlsbCwgTkogMDc5NzQsIGl0cworICAgICAgICByZWxhdGVkIGNvbXBhbmllcyBhbmQvb3IgYWZmaWxpYXRlcy4KKworICAgICAxLiAiTW9kaWZpY2F0aW9uKHMpIiBtZWFucyBhbnkgYWRkaXRpb24sIGRlbGV0aW9uLCBjaGFuZ2UsIG9yCisgICAgICAgIGltcHJvdmVtZW50IHRvIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSBvciBwcmlvciBNb2RpZmljYXRpb25zIHRoZXJldG8uCisgICAgICAgIE1vZGlmaWNhdGlvbnMgZG8gbm90IGluY2x1ZGUgYWRkaXRpb25zIHRvIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSBvcgorICAgICAgICBwcmlvciBNb2RpZmljYXRpb25zIHdoaWNoIChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSB3aGljaAorICAgICAgICBtYXkgYmUgZGlzdHJpYnV0ZWQgaW4gY29uanVuY3Rpb24gd2l0aCBMaWNlbnNlZCBTb2Z0d2FyZTsgb3IgKGlpKSBhcmUKKyAgICAgICAgbm90IGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIExpY2Vuc2VkIFNvZnR3YXJlIGl0c2VsZi4KKworICAgICAxLiAiT2JqZWN0IENvZGUiIG1lYW5zIG1hY2hpbmUgZXhlY3V0YWJsZSBzb2Z0d2FyZSBjb2RlLgorCisgICAgIDEuICJPcmlnaW5hbCBDb250cmlidXRvciIgbWVhbnMgTHVjZW50IGFuZCBpdHMgTGljZW5zb3JzLCBjb2xsZWN0aXZlbHkuCisKKyAgICAgMS4gIk9yaWdpbmFsIFNvZnR3YXJlIiBtZWFucyB0aGUgUGxhbiA5IFNvZnR3YXJlLCBpbiBib3RoIFNvdXJjZSBDb2RlCisgICAgICAgIGZvcm0gYW5kIE9iamVjdCBDb2RlIGZvcm0sIGFuZCBhbnkgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uLCBhcworICAgICAgICBmdXJuaXNoZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQuCisKKyAgICAgMS4gIlBsYW4gOSBTb2Z0d2FyZSIgbWVhbnMgYSBuZXR3b3JrIG9wZXJhdGluZyBzeXN0ZW0gZGVzaWduZWQgZm9yCisgICAgICAgIHJlc2VhcmNoIGludG8gZGlzdHJpYnV0ZWQgc2VydmljZXMsIGFwcGxpY2F0aW9ucyBhbmQgc29mdHdhcmUKKyAgICAgICAgZGV2ZWxvcG1lbnQuCisKKyAgICAgMS4gIlBsYW4gOSBUcmFkZW1hcmsiIG1lYW5zIHRoZSB0cmFkZW1hcmsgUExBTiA5IChmb3Igd2hpY2ggTHVjZW50IGhhcworICAgICAgICBhY3F1aXJlZCBjb21tb24gbGF3IHJpZ2h0cyBhbmQgZm9yIHdoaWNoIEx1Y2VudCBvd25zIFUuUy4gVHJhZGVtYXJrCisgICAgICAgIFJlZ2lzdHJhdGlvbiBOdW1iZXIgMiwwNjUsNTc3KS4KKworICAgICAxLiAiUmVjaXBpZW50IiBtZWFucyBhbnkgaW5kaXZpZHVhbCBvciBsZWdhbCBlbnRpdHkgcmVjZWl2aW5nIHRoZQorICAgICAgICBMaWNlbnNlZCBTb2Z0d2FyZSB1bmRlciB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGFsbCBDb250cmlidXRvcnMsCisgICAgICAgIG9yIHJlY2VpdmluZyB0aGUgTGljZW5zZWQgU29mdHdhcmUgdW5kZXIgYW5vdGhlciBsaWNlbnNlIGFncmVlbWVudCBhcworICAgICAgICBhdXRob3JpemVkIGhlcmVpbi4KKworICAgICAxLiAiU291cmNlIENvZGUiIG1lYW5zIGh1bWFuIHJlYWRhYmxlIHNvZnR3YXJlIGNvZGUuCisKKyAgIDIuMAlHUkFOVCBPRiBSSUdIVFMKKworICAgMi4xCVN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwKKyAgIHByb3BlcnR5IGNsYWltcywgTHVjZW50IGdyYW50cyB0byBMaWNlbnNlZSwgYSByb3lhbHR5LWZyZWUsICBub25leGNsdXNpdmUsCisgICBub24tdHJhbnNmZXJhYmxlLCB3b3JsZHdpZGUgbGljZW5zZSAgdG8gdXNlLCAgcmVwcm9kdWNlLCBtb2RpZnksICBleGVjdXRlLAorICAgZGlzcGxheSwgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgIHN1YmxpY2Vuc2UsIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSAgKHdpdGgKKyAgIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucykgaW4gU291cmNlIENvZGUgZm9ybSBhbmQvb3IgT2JqZWN0IENvZGUgZm9ybSAgZm9yCisgICBjb21tZXJjaWFsICBhbmQvb3IgIG5vbi1jb21tZXJjaWFsICAgcHVycG9zZXMuICBUaGlzICAgZ3JhbnQgIGluY2x1ZGVzICAgYQorICAgbm9uZXhjbHVzaXZlIGFuZCBub24tdHJhbnNmZXJhYmxlIGxpY2Vuc2UgIHVuZGVyIGFueSBwYXRlbnRzIHdoaWNoICBMdWNlbnQKKyAgIGhhcyBhIHJpZ2h0IHRvICBsaWNlbnNlIGFuZCB3aGljaCwgYnV0ICBmb3IgdGhpcyBsaWNlbnNlLCBhcmUgIHVuYXZvaWRhYmx5CisgICBhbmQgbmVjZXNzYXJpbHkgaW5mcmluZ2VkIGJ5IHRoZSAgZXhlY3V0aW9uIG9mIHRoZSBpbmhlcmVudCAgZnVuY3Rpb25hbGl0eQorICAgb2YgdGhlICBPcmlnaW5hbCBTb2Z0d2FyZSAgaW4gIHRoZSBmb3JtICBmdXJuaXNoZWQgdW5kZXIgIHRoaXMgIEFncmVlbWVudC4KKyAgIE5vdGhpbmcgaW4gdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgY29uc3RydWVkIGFzIGNvbmZlcnJpbmcgaW4gYW55IHdheSAgKGJ5CisgICBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgIG9yICBvdGhlcndpc2UpICBhbnkgIGxpY2Vuc2UgIG9yICByaWdodCAgdW5kZXIgIGFueQorICAgZXhpc3Rpbmcgb3IgZnV0dXJlIHBhdGVudCBjbGFpbSB3aGljaCBpcyBkaXJlY3RlZCB0byBhIGNvbWJpbmF0aW9uIG9mICB0aGUKKyAgIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIHdpdGggdGhlIGZ1bmN0aW9uYWxpdHkgb2YgYW55IG90aGVyCisgICBzb2Z0d2FyZSBwcm9ncmFtcywgb3IgIGEgY29tYmluYXRpb24gIG9mIGhhcmR3YXJlIHN5c3RlbXMgIG90aGVyIHRoYW4gIHRoZQorICAgY29tYmluYXRpb24gb2YgdGhlICBPcmlnaW5hbCBTb2Z0d2FyZSAgYW5kIHRoZSBoYXJkd2FyZSAgb3IgZmlybXdhcmUgIGludG8KKyAgIHdoaWNoIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSBpcyAgbG9hZGVkLiBEaXN0cmlidXRpb24gb2YgTGljZW5zZWQgIFNvZnR3YXJlCisgICB0byB0aGlyZCBwYXJ0aWVzIHB1cnN1YW50IHRvIHRoaXMgZ3JhbnQgc2hhbGwgYmUgc3ViamVjdCB0byB0aGUgc2FtZSB0ZXJtcworICAgYW5kIGNvbmRpdGlvbnMgYXMgc2V0ICBmb3J0aCBpbiB0aGlzIEFncmVlbWVudCwgIGFuZCBtYXksIGF0IFlvdXIgIG9wdGlvbiwKKyAgIGluY2x1ZGUgYSByZWFzb25hYmxlIGNoYXJnZSBmb3IgIHRoZSBjb3N0IG9mIGFueSAgbWVkaWEuIFlvdSBtYXkgYWxzbywgIGF0CisgICBZb3VyIG9wdGlvbiwgIGNoYXJnZSAgZm9yIGFueSAgb3RoZXIgIHNvZnR3YXJlLCBwcm9kdWN0ICBvciAgc2VydmljZSAgdGhhdAorICAgaW5jbHVkZXMgb3IgaW5jb3Jwb3JhdGVzIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSBhcyBhIHBhcnQgdGhlcmVvZi4KKworICAgMi4yCU5vIHJpZ2h0IGlzIGdyYW50ZWQgIHRvIExpY2Vuc2VlIHRvIGNyZWF0ZSAgZGVyaXZhdGl2ZSB3b3JrcyBvZiBvciAgdG8KKyAgIHJlZGlzdHJpYnV0ZSAob3RoZXIgIHRoYW4gIHdpdGggIHRoZSBPcmlnaW5hbCAgU29mdHdhcmUgIG9yICBhICBkZXJpdmF0aXZlCisgICB0aGVyZW9mKSAgdGhlICBzY3JlZW4gICBpbXByaW50ZXIgIGZvbnRzICBpZGVudGlmaWVkICAgaW4gIHN1YmRpcmVjdG9yeSAgIAorICAgL2xpYi9mb250L2JpdC9sdWNpZGEgYW5kIHByaW50ZXIgZm9udHMgIChMdWNpZGEgU2FucyBVbmljb2RlLCBMdWNpZGEgIFNhbnMKKyAgIEl0YWxpYywgICBMdWNpZGEgICBTYW5zICAgRGVtaWJvbGQsICAgTHVjaWRhICAgVHlwZXdyaXRlciwgICBMdWNpZGEgICBTYW5zCisgICBUeXBld3JpdGVyODMpLCBpZGVudGlmaWVkIGluIHN1YmRpcmVjdG9yeSAvc3lzL2xpYi9wb3N0c2NyaXB0L2ZvbnQuCisKKyAgIDIuMwlFeGhpYml0IEEgY29udGFpbnMgIGFkZGl0aW9uYWwgdGVybXMgIGFuZCBjb25kaXRpb25zICByZWxhdGluZyB0byAgdGhlCisgICBwcmludGVyIGZvbnRzIGlkZW50aWZpZWQgaW4gc3ViZGlyZWN0b3J5IC9zeXMvbGliL2dob3N0c2NyaXB0L2ZvbnQuIEluIHRoZQorICAgY2FzZSBvZiBhbnkgY29uZmxpY3QgYmV0d2VlbiB0aGUgcHJvdmlzaW9ucyBvZiB0aGUgYm9keSBvZiB0aGlzICBBZ3JlZW1lbnQKKyAgIGFuZCBFeGhpYml0IEEgcmVnYXJkaW5nICBzdWNoIHByaW50ZXIgZm9udHMsIHRoZSAgcHJvdmlzaW9ucyBvZiBFeGhpYml0ICBBCisgICBzaGFsbCBjb250cm9sLgorCisgICAyLjQJVGhlIE9yaWdpbmFsIFNvZnR3YXJlIGxpY2Vuc2VkIGhlcmVpbiBjb250YWlucyBtYXRlcmlhbCBjb3B5cmlnaHRzICBieQorICAgdGhlIE9yaWdpbmFsIENvbnRyaWJ1dG9yLCBpbmNsdWRpbmcgYnV0ICBub3QgbGltaXRlZCB0byBMdWNlbnQsIEImSCAgSW5jLiwKKyAgIGFuZCBZJlkgIEluYy4gTm8gIHJpZ2h0cyBhcmUgIGdyYW50ZWQgd2l0aCAgcmVzcGVjdCB0byAgT3JpZ2luYWwgIFNvZnR3YXJlCisgICBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIGhlcmVpbi4KKworICAgMi41CUx1Y2VudCBncmFudHMgdG8gTGljZW5zZWUgYSBub25leGNsdXNpdmUsIHJveWFsdHkgZnJlZSwgd29ybGR3aWRlCisgICBsaWNlbnNlIHRvIHVzZSB0aGUgUGxhbiA5IFRyYWRlbWFyayBzb2xlbHkgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBQbGFuIDkKKyAgIG9wZXJhdGluZyBzeXN0ZW0gc291cmNlIGNvZGUgKG9yIG9iamVjdCBjb2RlKSBhbmQgZG9jdW1lbnRhdGlvbi4gU3VjaCB1c2UKKyAgIGJ5IExpY2Vuc2VlIG9mIHRoZSBQbGFuIDkgVHJhZGVtYXJrIHNoYWxsIGJlIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUKKyAgIGZvbGxvd2luZyBxdWFsaXR5IHN0YW5kYXJkcyBhbmQgY29udHJvbHM6CisKKyAgICAgKiBBbnkgdXNlIG9mIHRoZSBQbGFuIDkgVHJhZGVtYXJrIG11c3QgYmUgbWFkZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcworICAgICAgIEFncmVlbWVudDsKKyAgICAgKiBUaGUgUGxhbiA5IFRyYWRlbWFyayBtYXkgbm90IGJlIGNvbWJpbmVkIHdpdGggYW55IG90aGVyIG1hcmsgb3IgbG9nbworICAgICAgIHRvIGZvcm0gYSBjb21wb3NpdGUgbWFyayBvciBsb2dvIG9yIHN1Z2dlc3QgdGhhdCB0aGUgUGFydGllcyBhcmUgcGFydAorICAgICAgIG9mIG9uZSBjb21wYW55LgorCisgICBVcG9uIEx1Y2VudCdzIHdyaXR0ZW4gcmVxdWVzdCBhbmQgYXQgTGljZW5zZWUncyBleHBlbnNlLCBMaWNlbnNlZSB3aWxsCisgICBwcm92aWRlIEx1Y2VudCB3aXRoIGEgcmVwcmVzZW50YXRpdmUgc2FtcGxlIG9mIExpY2Vuc2VlJ3MgcHJvbW90aW9uYWwKKyAgIG1hdGVyaWFscyBiZWFyaW5nIHRoZSBQbGFuIDkgVHJhZGVtYXJrLiBJZiwgZm9yIGFueSByZWFzb24sIEx1Y2VudAorICAgZGV0ZXJtaW5lcyB0aGF0IHRoZSBxdWFsaXR5IHN0YW5kYXJkcyBvciBjb250cm9scyBhcHBsaWVkIGJ5IExpY2Vuc2VlIHRvCisgICB0aGUgUGxhbiA5IHN5c3RlbSBzb3VyY2UgY29kZSBhbmQgZG9jdW1lbnRhdGlvbiBmYWxsIGJlbG93IHRob3NlIHRoYXQgYXJlCisgICBjb25zaXN0ZW50IHdpdGggTHVjZW50J3Mgc3RhbmRhcmRzLCB1cG9uIHdyaXR0ZW4gbm90aWNlIG9mIHRoZSBkZWZpY2llbmN5CisgICB0byBMaWNlbnNlZSwgTHVjZW50IG1heSwgYXQgaXRzIHNvbGUgb3B0aW9uIGFuZCBkaXNjcmV0aW9uLCB0ZXJtaW5hdGUKKyAgIExpY2Vuc2VlJ3MgcmlnaHQgdG8gdXNlIHRoZSBQbGFuIDkgVHJhZGVtYXJrIHVwb24gd3JpdHRlbiBub3RpY2UgdG8KKyAgIExpY2Vuc2VlLgorCisgICBMaWNlbnNlZSBhY2tub3dsZWRnZXMgdGhhdCBMdWNlbnQgaXMgdGhlIG93bmVyIG9mIHRoZSBQbGFuIDkgVHJhZGVtYXJrIGFuZAorICAgYWxsIGdvb2R3aWxsIGF0dGFjaGVkIHRoZXJldG8uIFRoaXMgQWdyZWVtZW50IGRvZXMgbm90IGdpdmUgTGljZW5zZWUgYW55CisgICBpbnRlcmVzdCBpbiB0aGUgUGxhbiA5IFRyYWRlbWFyayBleGNlcHQgdGhlIHJpZ2h0IHRvIHVzZSB0aGUgbWFyayBpbgorICAgYWNjb3JkYW5jZSB3aXRoIHRoZSBwcm92aXNpb25zIG9mIHRoaXMgQWdyZWVtZW50LiBMaWNlbnNlZSBhZ3JlZXMgbm90IHRvCisgICBhdHRlbXB0IHRvIHJlZ2lzdGVyIHRoZSBQbGFuIDkgVHJhZGVtYXJrIG5vciB0byBhZG9wdCwgYXR0ZW1wdCB0byByZWdpc3RlcgorICAgb3IgcmVnaXN0ZXIgYW55d2hlcmUgaW4gdGhlIHdvcmxkIGEgbWFyayB0aGUgc2FtZSBhcyBvciBjb25mdXNpbmdseQorICAgc2ltaWxhciB0byB0aGUgUGxhbiA5IFRyYWRlbWFyay4KKworICAgIAorCisgICAzLjAgCURJU1RSSUJVVElPTiBPQkxJR0FUSU9OUworCisgICAzLjEJTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY3JlYXRlIG9yIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIGFyZSBnb3Zlcm5lZAorICAgYnkgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSAgdGVybXMKKyAgIG9mIHRoaXMgQWdyZWVtZW50IGluIGF0IGxlYXN0IHRoZSBzYW1lIGZvcm0gYXMgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gIG9mCisgICBPcmlnaW5hbCBTb2Z0d2FyZSAgZnVybmlzaGVkIGhlcmV1bmRlci4gIEFueSBkaXN0cmlidXRpb24gIGJ5IFlvdSAgb2YgIHRoZQorICAgU291cmNlIENvZGUgdmVyc2lvbiBvZiBMaWNlbnNlZCBTb2Z0d2FyZSAgbXVzdCBiZSBtYWRlIHVuZGVyIHRoZSB0ZXJtcyAgb2YKKyAgIHRoaXMgQWdyZWVtZW50IG9yIGFueSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIEFncmVlbWVudCB1bmRlciBTZWN0aW9uIDExLjAsCisgICBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgd2l0aCBlYWNoIGFuZCBldmVyeSBjb3B5ICBvZgorICAgc3VjaCBTb3VyY2UgQ29kZSB2ZXJzaW9uICBvZiBMaWNlbnNlZCBTb2Z0d2FyZSAgd2hpY2ggWW91IGRpc3RyaWJ1dGUuICBZb3UKKyAgIG1heSBub3Qgb2ZmZXIgIG9yIGltcG9zZSAgYW55IHRlcm1zICBvbiBhbnkgIHN1Y2ggU291cmNlICBDb2RlIHZlcnNpb24gIG9mCisgICBMaWNlbnNlZCBTb2Z0d2FyZSB0aGF0ICBhbHRlcnMgb3IgIHJlc3RyaWN0cyB0aGUgdGVybXMgIG9mIHRoZSAgYXBwbGljYWJsZQorICAgdmVyc2lvbiBvZiAgdGhpcyAgQWdyZWVtZW50ICBvciB0aGUgIFJlY2lwaWVudHMnICByaWdodHMgIGFuZCAgb2JsaWdhdGlvbnMKKyAgIGhlcmV1bmRlci4KKworICAgMy4yCVlvdSBtdXN0IGNhdXNlICBhbGwgTGljZW5zZWQgIFNvZnR3YXJlIHRvIHdoaWNoICBZb3UgY29udHJpYnV0ZSwgIGkuZS4KKyAgIFlvdXIgTW9kaWZpY2F0aW9ucywgdG8gIGNvbnRhaW4gYSBjbGVhciAgaWRlbnRpZmljYXRpb24sIGUuZy4sIGEgIHNlcGFyYXRlCisgICBmaWxlLCBkb2N1bWVudGluZyAgdGhlIGNoYW5nZXMgIG1hZGUgYnkgIFlvdSBhbmQgIGlkZW50aWZ5aW5nIFlvdSAgYXMgIHRoZQorICAgQ29udHJpYnV0b3IgdGhhdCByZWFzb25hYmx5IGFsbG93cyAgc3Vic2VxdWVudCBSZWNpcGllbnRzIHRvIGlkZW50aWZ5ICB0aGUKKyAgIG9yaWdpbmF0b3Igb2YgdGhlICBNb2RpZmljYXRpb24uIFRvICB0aGUgZXh0ZW50ICBZb3UgY3JlYXRlICBhdCBsZWFzdCAgb25lCisgICBNb2RpZmljYXRpb24sIFlvdSBtYXkgIGFkZCBZb3VyICBuYW1lIGFzICBhIENvbnRyaWJ1dG9yICB0byB0aGUgIHJlcXVpc2l0ZQorICAgbm90aWNlIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMy4KKworICAgMy4zCVdpdGggcmVzcGVjdCB0byBZb3VyIGRpc3RyaWJ1dGlvbiBvZiBMaWNlbnNlZCBTb2Z0d2FyZSAob3IgYW55IHBvcnRpb24KKyAgIHRoZXJlb2YpLCBZb3UgIG11c3QgaW5jbHVkZSAgdGhlIGZvbGxvd2luZyAgaW5mb3JtYXRpb24gaW4gIGEgIGNvbnNwaWN1b3VzCisgICBsb2NhdGlvbiBnb3Zlcm5pbmcgc3VjaCBkaXN0cmlidXRpb24gIChlLmcuLCBhIHNlcGFyYXRlICBmaWxlKSBhbmQgb24gIGFsbAorICAgY29waWVzIG9mIGFueSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIExpY2Vuc2VkIFNvZnR3YXJlIFlvdSBkaXN0cmlidXRlOgorCisgICAiVGhlIGNvbnRlbnRzICBoZXJlaW4gIGluY2x1ZGVzICBzb2Z0d2FyZSBpbml0aWFsbHkgIGRldmVsb3BlZCAgYnkgIEx1Y2VudAorICAgVGVjaG5vbG9naWVzIEluYy4gYW5kIG90aGVycywgIGFuZCBpcyBzdWJqZWN0IHRvICB0aGUgdGVybXMgb2YgdGhlICBMdWNlbnQKKyAgIFRlY2hub2xvZ2llcyBJbmMuIFBsYW4gOSBPcGVuIFNvdXJjZSBMaWNlbnNlIEFncmVlbWVudC4gQSBjb3B5IG9mIHRoZSBQbGFuCisgICA5ICAgIE9wZW4gICAgIFNvdXJjZSAgICAgTGljZW5zZSAgICBBZ3JlZW1lbnQgICAgIGlzICAgICBhdmFpbGFibGUgICAgIGF0OgorICAgaHR0cDovL3BsYW45LmJlbGwtbGFicy5jb20vcGxhbjlkaXN0L2Rvd25sb2FkLmh0bWwgb3IgYnkgY29udGFjdGluZyBMdWNlbnQKKyAgIFRlY2hub2xvZ2llcyBhdCBodHRwOi8vd3d3Lmx1Y2VudC5jb20uCisKKyAgIEFsbCBzb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciBzdWNoIEFncmVlbWVudCBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiCisgICBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiAgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzICBvciBpbXBsaWVkLiBTZWUgIHRoZQorICAgTHVjZW50IFRlY2hub2xvZ2llcyAgSW5jLiBQbGFuICA5IE9wZW4gIFNvdXJjZSBMaWNlbnNlICBBZ3JlZW1lbnQgZm9yICB0aGUKKyAgIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyBhbGwgcmlnaHRzLCBvYmxpZ2F0aW9ucyBhbmQgbGltaXRhdGlvbnMgIHVuZGVyCisgICBzdWNoIEFncmVlbWVudC4KKworICAgUG9ydGlvbnMgb2YgdGhlIHNvZnR3YXJlIGRldmVsb3BlZCBieSBMdWNlbnQgVGVjaG5vbG9naWVzIEluYy4gYW5kIG90aGVycworICAgYXJlIENvcHlyaWdodCBPIDIwMDIuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKyAgIENvbnRyaWJ1dG9yKHMpOl9fX19fX19fX19fX19fX19fX19fX19fX19fXyIKKworICAgMy40CVlvdSBtYXkgZGlzdHJpYnV0ZSBMaWNlbnNlZCAgU29mdHdhcmUgaW4gT2JqZWN0ICBDb2RlIGZvcm0gdXNpbmcgIHRoaXMKKyAgIEFncmVlbWVudCwgb3IgdW5kZXIgIGEgbGljZW5zZSAgb2YgWW91ciBjaG9pY2UgIHByb3ZpZGVkIHRoYXQgIFlvdSBhcmUgIGluCisgICBjb21wbGlhbmNlIHdpdGggdGhpcyAgQWdyZWVtZW50IGFuZCAgWW91ciBsaWNlbnNlOiAoYSkgIGNvbXBsaWVzIHdpdGggIHRoZQorICAgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgIHRoaXMgQWdyZWVtZW50OyAoYikgZG9lcyAgbm90IGxpbWl0IG9yIGFsdGVyICB0aGUKKyAgIFJlY2lwaWVudCdzIHJpZ2h0cyAgYW5kIG9ibGlnYXRpb25zICBpbiAgdGhlIFNvdXJjZSAgQ29kZSB2ZXJzaW9uICBvZiAgdGhlCisgICBMaWNlbnNlZCBTb2Z0d2FyZSBzZXQgZm9ydGggaW4gdGhpcyBBZ3JlZW1lbnQ7IChjKSBzdGF0ZXMgdGhhdCB0aGUgIFNvdXJjZQorICAgQ29kZSB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBpcyBhdmFpbGFibGUgZnJvbSBZb3UsIGFuZCBkZXNjcmliZXMKKyAgIGhvdyBpdCBtYXkgYmUgb2J0YWluZWQgYnkgIFJlY2lwaWVudDsgKGQpIGVmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiAgYmVoYWxmCisgICBvZiAgT3JpZ2luYWwgIENvbnRyaWJ1dG9yICAgYW5kICBhbGwgIENvbnRyaWJ1dG9ycyAgIGFsbCAgd2FycmFudGllcyAgIGFuZAorICAgY29uZGl0aW9ucywgZXhwcmVzcyAgb3IgaW1wbGllZCwgIGluY2x1ZGluZyAgd2FycmFudGllcyBvciAgY29uZGl0aW9ucyAgb2YKKyAgIHRpdGxlICBvciAgbm9uLWluZnJpbmdlbWVudCwgIGFuZCAgaW1wbGllZCAgd2FycmFudGllcyAgb3IgIGNvbmRpdGlvbnMgIG9mCisgICBtZXJjaGFudGFiaWxpdHkgYW5kICBmaXRuZXNzIGZvciAgYSAgcGFydGljdWxhciBwdXJwb3NlOyAgKGUpICBlZmZlY3RpdmVseQorICAgZXhjbHVkZXMgb24gIGJlaGFsZiAgb2YgIE9yaWdpbmFsIENvbnRyaWJ1dG9yICBhbmQgIGFsbCAgQ29udHJpYnV0b3JzICBhbGwKKyAgIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywgIGluY2x1ZGluZyBkaXJlY3QsICBpbmRpcmVjdCwgc3BlY2lhbCwgIGluY2lkZW50YWwsCisgICBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzOyAgYW5kIChmKSAgY2xlYXJseSBzdGF0ZXMgdGhhdCAgYW55IHRlcm1zICB3aGljaAorICAgZGlmZmVyIGZyb20gIHRoaXMgQWdyZWVtZW50ICBhcmUgb2ZmZXJlZCAgYnkgWW91ICBhbG9uZSwgbm90ICBieSAgT3JpZ2luYWwKKyAgIENvbnRyaWJ1dG9yIG9yICBhbnkgIG90aGVyICBDb250cmlidXRvci4gWW91ICBoZXJlYnkgIGFncmVlICB0byAgaW5kZW1uaWZ5CisgICBPcmlnaW5hbCBDb250cmlidXRvciBvciBhbnkgb3RoZXIgIENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5ICBpbmN1cnJlZAorICAgYnkgT3JpZ2luYWwgQ29udHJpYnV0b3IgIG9yIGFueSBvdGhlciAgQ29udHJpYnV0b3IgYXMgcmVzdWx0ICBvZiBhbnkgIHN1Y2gKKyAgIGRpZmZlcmluZyB0ZXJtcyBZb3Ugb2ZmZXIgaW4gWW91ciBsaWNlbnNlLgorCisgICAzLjUJWW91IG1heSBub3QgdXNlICB0aGUgbmFtZXMgIkx1Y2VudCBUZWNobm9sb2dpZXMiLCAgIkJlbGwgTGFicyIgb3IgIGFueQorICAgb3RoZXIgbmFtZSBhc3NvY2lhdGVkIHdpdGggTHVjZW50IG9yIGFueSBMdWNlbnQgdHJhZGVtYXJrIGZvciBhbnkgcHVycG9zZXMKKyAgIG90aGVyIHRoYW4gYXMgc3BlY2lmaWNhbGx5IHByb3ZpZGVkIGluIHRoaXMgQWdyZWVtZW50LgorCisgICAzLjYJWW91IG11c3QgIGluY2x1ZGUgIGFsbCBvZiAgdGhlICBvcmlnaW5hbCBjb3B5cmlnaHQsICBsYWJlbHMgIG9yICBvdGhlcgorICAgbm90aWNlcyBvbiB0aGUgTGljZW5zZWQgIFNvZnR3YXJlIG9uIGFueSBjb3BpZXMgIG9mIHRoZSBMaWNlbnNlZCAgU29mdHdhcmUKKyAgIHdoaWNoIFlvdSBtYWtlOyBhbmQgaW5jbHVkZSB3aXRoIHRoZSBkaXN0cmlidXRpb24gb2YgYW55IE1vZGlmaWNhdGlvbnMgWW91CisgICBjcmVhdGUgYSBjb3B5IChvciAgYW4gb2ZmZXIgdG8gcHJvdmlkZSAgc3VjaCBhIGNvcHkgYXQgIG5vIGNoYXJnZSkgb2YgIHRoZQorICAgTGljZW5zZWQgU29mdHdhcmUsIG9uIHRoZSBzYW1lIHRlcm1zIGFzIHNldCBmb3J0aCBpbiB0aGlzIEFncmVlbWVudC4KKworICAgMy43CVdoaWxlIHRoaXMgQWdyZWVtZW50IGNvbnRlbXBsYXRlcyB0aGUgY29tbWVyY2lhbCB1c2UgYW5kICBkaXN0cmlidXRpb24KKyAgIG9mIExpY2Vuc2VkICBTb2Z0d2FyZSwgIGNvbW1lcmNpYWwgZGlzdHJpYnV0b3JzICBvZiAgc29mdHdhcmUgbWF5LCAgZm9yICBhCisgICB2YXJpZXR5IG9mICByZWFzb25zLCAgYWNjZXB0ICBjZXJ0YWluICByZXNwb25zaWJpbGl0aWVzICB3aXRoICByZXNwZWN0ICB0bworICAgY3VzdG9tZXJzLCBsaWNlbnNlZXMsIGJ1c2luZXNzIHBhcnRuZXJzIGFuZCB0aGUgIGxpa2UuIEFzIHN1Y2gsIGlmIFlvdSAgb3IKKyAgIGFueSAgQ29udHJpYnV0b3IgIGluY2x1ZGUgIExpY2Vuc2VkICBTb2Z0d2FyZSAgaW4gIGEgIGNvbW1lcmNpYWwgIG9mZmVyaW5nCisgICAoIkNvbW1lcmNpYWwgQ29udHJpYnV0b3IiKSwgc3VjaCBDb21tZXJjaWFsICBDb250cmlidXRvciBhZ3JlZXMgdG8gIGRlZmVuZAorICAgYW5kICBpbmRlbW5pZnkgICBPcmlnaW5hbCAgIENvbnRyaWJ1dG9yICAgYW5kICAgYWxsICAgb3RoZXIgICBDb250cmlidXRvcnMKKyAgIChjb2xsZWN0aXZlbHkgIkluZGVtbmlmaWVkIENvbnRyaWJ1dG9ycyIpICBhZ2FpbnN0IGFueSBsaWFiaWxpdHksICBsb3NzZXMsCisgICBkYW1hZ2VzIGFuZCBjb3N0cyBhcmlzaW5nICBmcm9tIGNsYWltcywgbGF3c3VpdHMgIGFuZCBvdGhlciBsZWdhbCAgYWN0aW9ucworICAgYnJvdWdodCBieSBhbnkgIHRoaXJkIHBhcnR5ICBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCAgQ29udHJpYnV0b3JzIHRvICB0aGUKKyAgIGV4dGVudCBjYXVzZWQgYnkgdGhlIGFjdHMgb3IgIG9taXNzaW9ucyBvZiBzdWNoIENvbW1lcmNpYWwgQ29udHJpYnV0b3IgIGluCisgICBjb25uZWN0aW9uIHdpdGggIGl0cyAgdXNlICBvciAgZGlzdHJpYnV0aW9uICBvZiAgTGljZW5zZWQgIFNvZnR3YXJlICBpbiAgYQorICAgY29tbWVyY2lhbCBvZmZlcmluZyBvZiBhbnkga2luZC4KKworICAgNC4wIAlNT0RJRklDQVRJT05TCisKKyAgIFlvdSBhZ3JlZSB0byBwcm92aWRlIHRoZSBPcmlnaW5hbCBDb250cmlidXRvciwgYXQgaXRzIHJlcXVlc3QsIHdpdGggYSBjb3B5CisgICBvZiB0aGUgIGNvbXBsZXRlIFNvdXJjZSAgQ29kZSAgdmVyc2lvbiwgT2JqZWN0ICBDb2RlIHZlcnNpb24gIGFuZCAgcmVsYXRlZAorICAgZG9jdW1lbnRhdGlvbiBmb3IgIE1vZGlmaWNhdGlvbnMgIGNyZWF0ZWQgIG9yIGNvbnRyaWJ1dGVkICB0byAgYnkgIFlvdSAgaWYKKyAgIGRpc3RyaWJ1dGVkIGluICBhbnkgZm9ybSwgIGUuZy4sIGJpbmFyeSAgb3Igc291cmNlLiAgT3JpZ2luYWwgIENvbnRyaWJ1dG9yCisgICBhbmQvb3IgIG90aGVyICAgQ29udHJpYnV0b3JzICAgc2hhbGwgIGhhdmUgICB1bnJlc3RyaWN0ZWQsICAgbm9uZXhjbHVzaXZlLAorICAgd29ybGR3aWRlLCBwZXJwZXR1YWwsICByb3lhbHR5LWZyZWUgIHJpZ2h0cywgdG8gIHVzZSwgIHJlcHJvZHVjZSwgIG1vZGlmeSwKKyAgIGRpc3BsYXksIHBlcmZvcm0sICBzdWJsaWNlbnNlIGFuZCAgZGlzdHJpYnV0ZSBzdWNoICBNb2RpZmljYXRpb25zLCBhbmQgIHRvCisgICBncmFudCB0aGlyZCBwYXJ0aWVzIHRoZSByaWdodCB0byBkbyBzbywgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhcyAgYQorICAgcGFydCBvZiBvciAgd2l0aCB0aGUgIExpY2Vuc2VkIFNvZnR3YXJlOyBhbmQgIE9yaWdpbmFsIENvbnRyaWJ1dG9yICBhbmQvb3IKKyAgIG90aGVyIENvbnRyaWJ1dG9ycyAgc2hhbGwgIGhhdmUgIHRoZSAgcmlnaHQgdG8gIGxpY2Vuc2UgIG9yICB0byAgb3RoZXJ3aXNlCisgICB0cmFuc2ZlciB0byB0aGlyZCBwYXJ0aWVzIHN1Y2ggTW9kaWZpY2F0aW9ucyB3aXRob3V0IG5vdGljZSwgb2JsaWdhdGlvbiBvcgorICAgcmVjb3Vyc2UgdG8gWW91LiBZb3UgZ3JhbnQgdG8gT3JpZ2luYWwgQ29udHJpYnV0b3IsIENvbnRyaWJ1dG9ycyBhbmQgdGhlaXIKKyAgIHJlc3BlY3RpdmUgbGljZW5zZWVzIGFsbCAgcmlnaHRzIGFuZCBsaWNlbnNlcyAgKGluY2x1ZGluZyBwYXRlbnRzKSBhcyAgYXJlCisgICBuZWNlc3NhcnkgdG8gaW5jb3Jwb3JhdGUgdGhlIE1vZGlmaWNhdGlvbnMgIGNyZWF0ZWQgb3IgY29udHJpYnV0ZWQgYW5kICBzbworICAgZGlzdHJpYnV0ZWQgYnkgWW91IGludG8gIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBhbmQgIHRvIHVzZSwgZGlzdHJpYnV0ZSAgb3IKKyAgIG90aGVyd2lzZSBleHBsb2l0IHN1Y2ggTGljZW5zZWQgU29mdHdhcmUgd2l0aG91dCBwYXltZW50IG9yIGFjY291bnRpbmcgIHRvCisgICBZb3UuCisKKyAgICA1LiBUSVRMRQorCisgICBUaXRsZSwgb3duZXJzaGlwIHJpZ2h0cywgYW5kIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaW4gdGhlICBPcmlnaW5hbAorICAgU29mdHdhcmUgIGFuZCAgdGhlICBQbGFuICA5ICAgVHJhZGVtYXJrICBzaGFsbCAgcmVtYWluICBpbiAgdGhlICAgT3JpZ2luYWwKKyAgIENvbnRyaWJ1dG9yLiBPcmlnaW5hbCBDb250cmlidXRvciAgYW5kL29yIHRoZSAgb3RoZXIgQ29udHJpYnV0b3JzICByZXNlcnZlCisgICBhbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCB0byBZb3UsIGFuZCBubyBvdGhlciBsaWNlbnNlcyBhcmUgZ3JhbnRlZAorICAgb3IgaW1wbGllZC4gIFRoZSBMaWNlbnNlZCAgU29mdHdhcmUgIGlzIHByb3RlY3RlZCAgYnkgY29weXJpZ2h0ICBsYXdzICBhbmQKKyAgIHRyZWF0aWVzLgorCisgICA2LjAgCVRFUk1JTkFUSU9OCisKKyAgICAgMS4gVGhlIGxpY2Vuc2VzIGFuZCByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBzaGFsbCB0ZXJtaW5hdGUKKyAgICAgICAgYXV0b21hdGljYWxseSBpZiAoaSkgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBhbmQKKyAgICAgICAgY29uZGl0aW9ucyBoZXJlaW47IG9yIChpaSkgWW91IGluaXRpYXRlIG9yIHBhcnRpY2lwYXRlIGluIGFueQorICAgICAgICBpbnRlbGxlY3R1YWwgcHJvcGVydHkgYWN0aW9uIGFnYWluc3QgT3JpZ2luYWwgQ29udHJpYnV0b3IuCisKKyAgICAgMS4gVGhlIHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgb2YgdGhlIHBhcnRpZXMgaGVyZXRvIHdoaWNoIGJ5IHRoZWlyCisgICAgICAgIG5hdHVyZSB3b3VsZCBjb250aW51ZSBiZXlvbmQgdGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQgc2hhbGwKKyAgICAgICAgc3Vydml2ZSBhbmQgY29udGludWUgYWZ0ZXIgYW55IHN1Y2ggdGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQuCisKKyAgICAgMS4gVXBvbiB0ZXJtaW5hdGlvbiBmb3IgYW55IHJlYXNvbiwgWW91IG11c3QgZGVzdHJveSBhbGwgY29waWVzIG9mIHRoZQorICAgICAgICBMaWNlbnNlZCBTb2Z0d2FyZSBpbiBZb3VyIHBvc3Nlc3Npb24uIEFsbCBzdWJsaWNlbnNlcyBvZiBMaWNlbnNlZAorICAgICAgICBTb2Z0d2FyZSB3aGljaCB3ZXJlIHZhbGlkbHkgZ3JhbnRlZCBieSBZb3UgdG8gdGhpcmQgcGFydGllcyB1bmRlcgorICAgICAgICB0aGlzIEFncmVlbWVudCBzaGFsbCBzdXJ2aXZlIHN1Y2ggdGVybWluYXRpb24uCisKKyAgIDcuMCBESVNDTEFJTUVSIE9GIFdBUlJBTlRZCisKKyAgIFlPVSBVTkRFUlNUQU5EIEFORCBBQ0tOT1dMRURHRSAgVEhBVCwgVE8gVEhFICBGVUxMRVNUIEVYVEVOVCBQRVJNSVRURUQgIEJZCisgICBMQVcsIFRIRSBMSUNFTlNFRCBTT0ZUV0FSRSBJUyBMSUNFTlNFRCBVTkRFUiBUSElTIEFHUkVFTUVOVCBGUkVFIE9GIENIQVJHRQorICAgT04gQU4gICZRVU9UO0FTIElTJlFVT1Q7ICBCQVNJUyBXSVRIICBBTEwgRkFVTFRTLCAgTEFURU5UIEFORCAgUEFURU5UICBBTkQKKyAgIFdJVEhPVVQgQU5ZICBXQVJSQU5UWSBPRiAgQU5ZICBUWVBFLiBPUklHSU5BTCAgQ09OVFJJQlVUT1IgQU5EICBUSEUgIE9USEVSCisgICBDT05UUklCVVRPUlMgTUFLRSBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUywgRVhQUkVTU0VEIE9SICBJTVBMSUVELgorICAgQlkgV0FZIE9GICBFWEFNUExFLCBCVVQgTk9UICBPRiBMSU1JVEFUSU9OLCBPUklHSU5BTCAgQ09OVFJJQlVUT1IgQU5EICBUSEUKKyAgIE9USEVSIENPTlRSSUJVVE9SUyBNQUtFIE5PICBSRVBSRVNFTlRBVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SICBGSVRORVNTCisgICBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgVEhBVCBUSEUgVVNFIE9GIFRIRSBMSUNFTlNFRCBTT0ZUV0FSRSBXSUxMIE5PVAorICAgSU5GUklOR0UgQU5ZICBQQVRFTlQgT1IgIE9USEVSIElOVEVMTEVDVFVBTCAgUFJPUEVSVFkgUklHSFQgIE9GIEFOWSAgVEhJUkQKKyAgIFBBUlRZIEFORCAgSVQgIFNIQUxMICBCRSBUSEUgIFNPTEUgIFJFU1BPTlNJQklMSVRZICBPRiBZT1UgIFRPICBNQUtFICBTVUNICisgICBERVRFUk1JTkFUSU9OIEFTIElTIE5FQ0VTU0FSWSBXSVRIIFJFU1BFQ1QgVE8gVEhFIEFDUVVJU0lUSU9OIE9GICBMSUNFTlNFUworICAgVU5ERVIgUEFURU5UUyAgT1IgT1RIRVIgIElOVEVMTEVDVFVBTCBQUk9QRVJUWSAgUklHSFRTIE9GICBUSElSRCAgUEFSVElFUy4KKyAgIE9SSUdJTkFMIENPTlRSSUJVVE9SIEFORCBUSEUgIE9USEVSIENPTlRSSUJVVE9SUyBETyAgTk9UIFdBUlJBTlQgVEhBVCAgVEhFCisgICBGVU5DVElPTlMgT0YgVEhFICBMSUNFTlNFRCBTT0ZUV0FSRSAgV0lMTCBNRUVUIFlPVVIgIFJFUVVJUkVNRU5UUyBPUiAgVEhBVAorICAgTElDRU5TRUQgU09GVFdBUkUgIE9QRVJBVElPTiAgV0lMTCAgQkUgRVJST1ItRlJFRSAgT1IgIFVOSU5URVJSVVBURUQuICBZT1UKKyAgIEFTU1VNRSBUSEUgUklTSyBPRiBBTlkgIEFORCBBTEwgREFNQUdFIE9SIExPU1MgIEZST00gVVNFLCBPUiBJTkFCSUxJVFkgIFRPCisgICBVU0UsICBUSEUgICBMSUNFTlNFRCAgU09GVFdBUkUuICAgT1JJR0lOQUwgIENPTlRSSUJVVE9SICAgQU5EICBUSEUgICBPVEhFUgorICAgQ09OVFJJQlVUT1JTIEJFQVIgTk8gUkVTUE9OU0lCSUxJVFkgRk9SIENPUlJFQ1RJTkcgVEhFIExJQ0VOU0VEICBTT0ZUV0FSRSwKKyAgIFNVUFBMWUlORyBBU1NJU1RBTkNFIEZPUiBGSVhJTkcsIE9SIEZPUiBDT01NVU5JQ0FUSU5HIEtOT1dOIEVSUk9SUyBUTyAgWU9VCisgICBQRVJUQUlOSU5HIFRPIFRIRSBMSUNFTlNFRCBTT0ZUV0FSRSBGVVJOSVNIRUQgSEVSRVVOREVSLgorCisgICBPUklHSU5BTCBDT05UUklCVVRPUiBBTkQgVEhFIE9USEVSIENPTlRSSUJVVE9SUyAgU0hBTEwgTk9UIEJFIEhFTEQgVE8gIEFOWQorICAgTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBBTlkgUEFURU5UIElORlJJTkdFTUVOVCBPUiBBTlkgT1RIRVIgQ0xBSU0gIE1BREUKKyAgIEJZIFlPVSBPUiBBTlkgVEhJUkQgUEFSVFkgT04gQUNDT1VOVCAgT0YsIE9SIEFSSVNJTkcgRlJPTSBUSEUgVVNFIE9GLCAgVEhFCisgICBMSUNFTlNFRCBTT0ZUV0FSRSBQUk9WSURFRCBIRVJFVU5ERVIuCisKKyAgIFNPTUUgU1RBVEVTIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gVEhFIEFCT1ZFCisgICBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuIFlPVSAgTUFZIEFMU08gSEFWRSBPVEhFUiBSSUdIVFMgVEhBVCAgVkFSWQorICAgRlJPTSBKVVJJU0RJQ1RJT04gVE8gSlVSSVNESUNUSU9OLgorCisgICA4LjAgCUxJTUlUQVRJT04gT0YgTElBQklMSVRZCisKKyAgIFVOREVSIE5PICBDSVJDVU1TVEFOQ0VTIEFORCAgVU5ERVIgIE5PIExFR0FMICBUSEVPUlksIFRPUlQsICBDT05UUkFDVCwgIE9SCisgICBPVEhFUldJU0UsIFNIQUxMICBPUklHSU5BTCBDT05UUklCVVRPUiAgQU5EL09SIFRIRSAgT1RIRVIgQ09OVFJJQlVUT1JTICBCRQorICAgTElBQkxFIFRPIFlPVSBPUiBBTlkgT1RIRVIgVEhJUkQgUEFSVFkgRk9SIERBTUFHRVMgT0YgQU5ZIEtJTkQgIElOQ0xVRElORywKKyAgIEJVVCAgTk9UICBMSU1JVEVEICBUTywgIEFOWSAgRElSRUNULCAgSU5ESVJFQ1QsICBTUEVDSUFMLCAgSU5DSURFTlRBTCwgIE9SCisgICBDT05TRVFVRU5USUFMIERBTUFHRVMgIE9GICBBTlkgIENIQVJBQ1RFUiAgV0hBVFNPRVZFUiAgSU5DTFVESU5HLCAgV0lUSE9VVAorICAgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgIEZBSUxVUkUKKyAgIE9SIE1BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGCisgICBUSEUgT1JJR0lOQUwgQ09OVFJJQlVUT1IgIEFORC9PUiBBTlkgIE9USEVSIENPTlRSSUJVVE9SUyAgU0hBTEwgSEFWRSAgQkVFTgorICAgSU5GT1JNRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUywgT1IgRk9SIEFOWSBDTEFJTSBCWSBBTlkgT1RIRVIKKyAgIFBBUlRZLiBGVVJUSEVSTU9SRSwgIFNPTUUgIEpVUklTRElDVElPTlMgRE8gIE5PVCAgQUxMT1cgVEhFICBFWENMVVNJT04gIE9SCisgICBMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSElTIExJTUlUQVRJT04gIEFORAorICAgRVhDTFVTSU9OIE1BWSAgTk9UIEFQUExZICBUTyBZT1UuICBUTyAgVEhFIEVYVEVOVCAgVEhBVCBBTlkgIEVYQ0xVU0lPTiAgT0YKKyAgIERBTUFHRVMgQUJPVkUgIElTIE5PVCAgVkFMSUQsIFlPVSAgQUdSRUUgVEhBVCAgSU4gTk8gIEVWRU5UIFdJTEwgIE9SSUdJTkFMCisgICBDT05UUklCVVRPUidTIEFORCBBTEwgT1RIRVIgQ09OVFJJQlVUT1JTJyBUT1RBTCBMSUFCSUxJVFkgVU5ERVIgT1IgUkVMQVRFRAorICAgVE8gVEhJUyBBR1JFRU1FTlQgRVhDRUVEIE9ORSBUSE9VU0FORCBET0xMQVJTICgkMTAwMC4wMCBVUykuCisKKyAgIDkuMCAJRVhQT1JUIENPTlRST0wKKworICAgWW91IGFja25vd2xlZGdlICB0aGF0IHRoZSAgTGljZW5zZWQgIFNvZnR3YXJlIGhlcmV1bmRlciAgaXMgICJ1bnJlc3RyaWN0ZWQKKyAgIGVuY3J5cHRpb24gc291cmNlIGNvZGUiICBhcyB0aGUgdGVybSAgaXMgZGVmaW5lZCB1bmRlciAgdGhlIFVuaXRlZCAgU3RhdGVzCisgICBFeHBvcnQgQWRtaW5pc3RyYXRpb24gUmVndWxhdGlvbnMgYW5kIGlzICBzdWJqZWN0IHRvIGV4cG9ydCBjb250cm9sICB1bmRlcgorICAgc3VjaCBsYXdzIGFuZCByZWd1bGF0aW9ucy4gWW91IGFncmVlIHRoYXQsIGlmIHlvdSBleHBvcnQgb3IgcmUtZXhwb3J0ICB0aGUKKyAgIExpY2Vuc2VkIFNvZnR3YXJlICBvciBhbnkgIG1vZGlmaWNhdGlvbnMgdG8gIGl0LCBZb3UgIGFyZSByZXNwb25zaWJsZSAgZm9yCisgICBjb21wbGlhbmNlIHdpdGggdGhlICBVbml0ZWQgU3RhdGVzIEV4cG9ydCAgQWRtaW5pc3RyYXRpb24gUmVndWxhdGlvbnMgIGFuZAorICAgaGVyZWJ5IGluZGVtbmlmeSB0aGUgT3JpZ2luYWwgQ29udHJpYnV0b3IgIGFuZCBhbGwgb3RoZXIgQ29udHJpYnV0b3JzICBmb3IKKyAgIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYXMgYSByZXN1bHQuCisKKyAgIDEwLjAgCVUuUy4gR09WRVJOTUVOVCBSSUdIVFMKKworICAgWW91IG1heSBvbmx5IGFjcXVpcmUgdGhlIExpY2Vuc2VkICBTb2Z0d2FyZSBvbiBiZWhhbGYgb2YsIG9yIGZvciAgZGVsaXZlcnkKKyAgIHRvLCBhbnkgcGFydCBvZiB0aGUgVW5pdGVkIFN0YXRlcyBHb3Zlcm5tZW50LCBpZiB0aGUgTGljZW5zZWQgU29mdHdhcmUgIGlzCisgICB0cmVhdGVkIGFzIGNvbW1lcmNpYWwgIGNvbXB1dGVyIHNvZnR3YXJlICBhbmQgbGljZW5zZWQgIHRvIHRoZSAgR292ZXJubWVudAorICAgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50LCBwdXJzdWFudCB0byB0aGUgcG9saWNpZXMKKyAgIHN0YXRlZCBpbiA0OCAgQy5GLlIuIFNlY3Rpb24gMTIuMjEyICAoT2N0b2JlciAxOTk1KSBvciAgNDggQy5GLlIuICBTZWN0aW9uCisgICAyMjcuNzIwMiAoSnVuZSAxOTk1KSwgYXMgYXBwbGljYWJsZS4KKworICAgMTEuMCAJTElDRU5TRSBWRVJTSU9OUworCisgICBMVUNFTlQsIGF0IGl0cyBzb2xlICBkaXNjcmV0aW9uLCBtYXkgZnJvbSB0aW1lICB0byB0aW1lIHB1Ymxpc2ggYSAgcmV2aXNlZAorICAgYW5kL29yIG5ldyB2ZXJzaW9uICBvZiB0aGlzIEFncmVlbWVudCAgKGVhY2ggc3VjaCByZXZpc2VkICBvciBuZXcgIHZlcnNpb24KKyAgIHNoYWxsIGNhcnJ5IGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIpIHdoaWNoIHNoYWxsIGdvdmVybiBhbGwgY29waWVzCisgICBvZiBMaWNlbnNlZCBTb2Z0d2FyZSBkb3dubG9hZGVkIGFmdGVyIHRoZSAgcG9zdGluZyBvZiBzdWNoIHJldmlzZWQgb3IgIG5ldworICAgdmVyc2lvbiBvZiB0aGlzIEFncmVlbWVudC4KKworICAgMTIuMCAJTUlTQ0VMTEFORU9VUworCisgICBUaGlzIEFncmVlbWVudCBzZXRzIGZvcnRoIHRoZSAgZW50aXJlIGFncmVlbWVudCBhbmQgdW5kZXJzdGFuZGluZyAgYmV0d2VlbgorICAgdGhlIHBhcnRpZXMgIGFzICB0byAgdGhlICBzdWJqZWN0ICBtYXR0ZXIgIGhlcmVvZiAgYW5kICBtZXJnZXMgIGFsbCAgcHJpb3IKKyAgIGRpc2N1c3Npb25zIGJldHdlZW4gdGhlbS4gVGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgZ292ZXJuZWQgYnkgdGhlIGxhd3MgIG9mCisgICB0aGUgU3RhdGUgb2YgTmV3IFlvcmssIFVTQSwgZXhjbHVkaW5nIGl0cyBjb25mbGljdCBvZiBsYXcgcHJvdmlzaW9ucy4gIFRoZQorICAgYXBwbGljYXRpb24gIG9mICB0aGUgIFVuaXRlZCAgTmF0aW9ucyAgQ29udmVudGlvbiAgb2YgIENvbnRyYWN0cyAgZm9yICB0aGUKKyAgIEludGVybmF0aW9uYWwgIFNhbGUgIG9mICBHb29kcyAgaXMgIGV4cHJlc3NseSAgZXhjbHVkZWQuICBZT1VSICAgRE9XTkxPQUQsCisgICBJTlNUQUxMQVRJT04gIEFORCAgVVNFLCAgTU9ESUZJQ0FUSU9OICBPUiAgRElTVFJJQlVUSU9OICBPRiAgVEhFICBMSUNFTlNFRAorICAgU09GVFdBUkUgSVMgRVhQUkVTU0xZICBNQURFIENPTkRJVElPTkFMIE9OICBZT1VSIEFTU0VOVCBUTyAgVEhFIFRFUk1TICBTRVQKKyAgIEZPUlRIIEhFUkVJTi4gWW91IGZ1cnRoZXIgIGFncmVlIGFuZCBhY2tub3dsZWRnZSB0aGF0ICBieSBjbGlja2luZyBvbiAgdGhlCisgICAiQUNDRVBUIiBidXR0b24gYmVsb3csIFlvdSBzaGFsbCBoYXZlIG1hbmlmZXN0ZWQgYWNjZXB0YW5jZSB0byBlbnRlciAgaW50bworICAgdGhpcyBBZ3JlZW1lbnQgYW5kIHNoYWxsICBiZSBkZWVtZWQgdG8gaGF2ZSAgbWFudWFsbHkgc2lnbmVkIGFuZCAgZXhlY3V0ZWQKKyAgIHRoaXMgQWdyZWVtZW50IG1ha2luZyB0aGlzIGFuICBlbmZvcmNlYWJsZSBBZ3JlZW1lbnQgYmV0d2VlbiB0aGUgIHBhcnRpZXMuCisgICBJZiBhbnkgIHByb3Zpc2lvbiBvZiAgdGhpcyBBZ3JlZW1lbnQgIGlzIGhlbGQgIHRvIGJlICB1bmVuZm9yY2VhYmxlLCAgc3VjaAorICAgcHJvdmlzaW9uIHNoYWxsICBiZSByZWZvcm1lZCAgb25seSAgdG8gdGhlICBleHRlbnQgIG5lY2Vzc2FyeSB0byAgbWFrZSAgaXQKKyAgIGVuZm9yY2VhYmxlLgorCisgICAgCisKKyAgICAgICAgICAgICAgICAgICAgIEVYSElCSVQgQSAtIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMiwgSnVuZSAxOTkxICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICBDb3B5cmlnaHQgKEMpICAxOTg5LCAxOTkxICBGcmVlIFNvZnR3YXJlICBGb3VuZGF0aW9uLCBJbmMuICA2NzUgTWFzcyAgQXZlLCAKKyAgIENhbWJyaWRnZSwgTUEgMDIxMzksICBVU0EuIEV2ZXJ5b25lICBpcyBwZXJtaXR0ZWQgdG8gIGNvcHkgYW5kICBkaXN0cmlidXRlIAorICAgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLiAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFByZWFtYmxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlICBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91ciBmcmVlZG9tICB0byAKKyAgIHNoYXJlIGFuZCAgY2hhbmdlIGl0LiAgQnkgIGNvbnRyYXN0LCB0aGUgIEdOVSAgR2VuZXJhbCBQdWJsaWMgIExpY2Vuc2UgIGlzIAorICAgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSAgdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlICBzb2Z0d2FyZS0tdG8gCisgICBtYWtlIHN1cmUgdGhlICBzb2Z0d2FyZSBpcyAgZnJlZSBmb3IgYWxsICBpdHMgdXNlcnMuICBUaGlzIEdlbmVyYWwgIFB1YmxpYyAKKyAgIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24ncyBzb2Z0d2FyZSBhbmQgIHRvIAorICAgYW55IG90aGVyICBwcm9ncmFtIHdob3NlICBhdXRob3JzIGNvbW1pdCAgdG8gdXNpbmcgIGl0LiAoU29tZSAgb3RoZXIgIEZyZWUgCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgIFB1YmxpYyAKKyAgIExpY2Vuc2UgaW5zdGVhZC4pIFlvdSBjYW4gYXBwbHkgaXQgdG8geW91ciBwcm9ncmFtcywgdG9vLiAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICBXaGVuIHdlIHNwZWFrIG9mICBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgIHJlZmVycmluZyB0byBmcmVlZG9tLCBub3QgIHByaWNlLiAKKyAgIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyAgYXJlIGRlc2lnbmVkIHRvIG1ha2UgIHN1cmUgdGhhdCB5b3UgaGF2ZSAgdGhlIAorICAgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlIGZvciB0aGlzIHNlcnZpY2UgCisgICBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgIG9yIGNhbiBnZXQgaXQgaWYgeW91IHdhbnQgIGl0LCAKKyAgIHRoYXQgeW91IGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIG9yIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3IGZyZWUgcHJvZ3JhbXM7IAorICAgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQgYW55b25lIHRvIAorICAgZGVueSB5b3UgIHRoZXNlICByaWdodHMgb3IgIHRvICBhc2sgeW91ICB0byAgc3VycmVuZGVyIHRoZSAgcmlnaHRzLiAgVGhlc2UgCisgICByZXN0cmljdGlvbnMgIHRyYW5zbGF0ZSAgdG8gIGNlcnRhaW4gIHJlc3BvbnNpYmlsaXRpZXMgIGZvciAgeW91ICBpZiAgIHlvdSAKKyAgIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4gICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyIGdyYXRpcyBvciAKKyAgIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHlvdSBoYXZlLiAgWW91IAorICAgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuIEFuZCB5b3UgCisgICBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5IGtub3cgdGhlaXIgcmlnaHRzLiAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZCAoMikgCisgICBvZmZlciAgeW91ICB0aGlzICBsaWNlbnNlICB3aGljaCAgZ2l2ZXMgIHlvdSAgbGVnYWwgIHBlcm1pc3Npb24gIHRvICBjb3B5LCAKKyAgIGRpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICBBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbiAgdGhhdCAKKyAgIGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBzb2Z0d2FyZS4gIElmIAorICAgdGhlIHNvZnR3YXJlICBpcyBtb2RpZmllZCAgYnkgc29tZW9uZSAgZWxzZSAgYW5kIHBhc3NlZCAgb24sIHdlICB3YW50ICBpdHMgCisgICByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0ICB0aGV5IGhhdmUgaXMgbm90ICB0aGUgb3JpZ2luYWwsIHNvIHRoYXQgIGFueSAKKyAgIHByb2JsZW1zIGludHJvZHVjZWQgYnkgb3RoZXJzICB3aWxsIG5vdCByZWZsZWN0ICBvbiB0aGUgb3JpZ2luYWwgIGF1dGhvcnMnIAorICAgcmVwdXRhdGlvbnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlIHBhdGVudHMuIFdlIAorICAgd2lzaCB0byAgYXZvaWQgdGhlICBkYW5nZXIgIHRoYXQgcmVkaXN0cmlidXRvcnMgIG9mICBhIGZyZWUgIHByb2dyYW0gIHdpbGwgCisgICBpbmRpdmlkdWFsbHkgIG9idGFpbiAgcGF0ZW50ICBsaWNlbnNlcywgIGluICBlZmZlY3QgIG1ha2luZyAgdGhlICAgcHJvZ3JhbSAKKyAgIHByb3ByaWV0YXJ5LiBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkgcGF0ZW50ICBtdXN0IAorICAgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4gICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgIFRoZSAgcHJlY2lzZSAgIHRlcm1zICBhbmQgICBjb25kaXRpb25zICBmb3IgICBjb3B5aW5nLCAgZGlzdHJpYnV0aW9uICAgYW5kIAorICAgbW9kaWZpY2F0aW9uIGZvbGxvdy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTiAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgMC4gVGhpcyBMaWNlbnNlICBhcHBsaWVzIHRvICBhbnkgcHJvZ3JhbSBvciAgb3RoZXIgd29yayAgd2hpY2ggY29udGFpbnMgIGEgCisgICBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyICBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkICB1bmRlciAKKyAgIHRoZSB0ZXJtcyBvZiB0aGlzIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuIFRoZSAiUHJvZ3JhbSIsIGJlbG93LCByZWZlcnMgIHRvIAorICAgYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iIG1lYW5zICBlaXRoZXIgCisgICB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6IHRoYXQgaXMgdG8gc2F5LCAgYSAKKyAgIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSAgb3IgYSBwb3J0aW9uIG9mICBpdCwgZWl0aGVyIHZlcmJhdGltIG9yICB3aXRoIAorICAgbW9kaWZpY2F0aW9ucyAgYW5kL29yICB0cmFuc2xhdGVkICBpbnRvICBhbm90aGVyICBsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgCisgICB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCAgd2l0aG91dCBsaW1pdGF0aW9uIGluICB0aGUgdGVybSAgIm1vZGlmaWNhdGlvbiIuKSAKKyAgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICBBY3Rpdml0aWVzIG90aGVyICB0aGFuICBjb3B5aW5nLCAgZGlzdHJpYnV0aW9uIGFuZCAgbW9kaWZpY2F0aW9uICBhcmUgIG5vdCAKKyAgIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyAgdGhleSBhcmUgb3V0c2lkZSBpdHMgIHNjb3BlLiBUaGUgYWN0IG9mICBydW5uaW5nIAorICAgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlIFByb2dyYW0gaXMgIGNvdmVyZWQgCisgICBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0gIChpbmRlcGVuZGVudCAKKyAgIG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuIFdoZXRoZXIgdGhhdCBpcyB0cnVlICBkZXBlbmRzIAorICAgb24gd2hhdCB0aGUgUHJvZ3JhbSBkb2VzLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgIDEuIFlvdSBtYXkgIGNvcHkgYW5kIGRpc3RyaWJ1dGUgIHZlcmJhdGltIGNvcGllcyBvZiAgdGhlIFByb2dyYW0ncyAgc291cmNlIAorICAgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UgY29uc3BpY3VvdXNseSBhbmQgCisgICBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gIGVhY2ggY29weSAgYW4gYXBwcm9wcmlhdGUgIGNvcHlyaWdodCBub3RpY2UgIGFuZCAKKyAgIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7ICBrZWVwIGludGFjdCBhbGwgIHRoZSBub3RpY2VzIHRoYXQgIHJlZmVyIHRvICB0aGlzIAorICAgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OyBhbmQgZ2l2ZSBhbnkgb3RoZXIgIHJlY2lwaWVudHMgCisgICBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIFByb2dyYW0uICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kICB5b3UgCisgICBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBvciBhbnkgcG9ydGlvbiBvZiBpdCwgCisgICB0aHVzIGZvcm1pbmcgYSAgd29yayBiYXNlZCBvbiAgdGhlIFByb2dyYW0sIGFuZCAgY29weSBhbmQgZGlzdHJpYnV0ZSAgc3VjaCAKKyAgIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciAgdGhlIHRlcm1zIG9mIFNlY3Rpb24gIDEgYWJvdmUsIHByb3ZpZGVkICB0aGF0IAorICAgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgIGEpIFlvdSBtdXN0IGNhdXNlICB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gIGNhcnJ5IHByb21pbmVudCBub3RpY2VzICBzdGF0aW5nIAorICAgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgIHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4gIHdob2xlIAorICAgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55IHBhcnQgdGhlcmVvZiwgdG8gCisgICBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vICBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlICB0ZXJtcyAKKyAgIG9mIHRoaXMgTGljZW5zZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICBjKSBJZiB0aGUgbW9kaWZpZWQgcHJvZ3JhbSBub3JtYWxseSByZWFkcyBjb21tYW5kcyBpbnRlcmFjdGl2ZWx5IHdoZW4gcnVuLCAKKyAgIHlvdSBtdXN0IGNhdXNlIGl0LCAgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yICBzdWNoIGludGVyYWN0aXZlIHVzZSBpbiAgdGhlIAorICAgbW9zdCBvcmRpbmFyeSAgd2F5LCAgdG8gcHJpbnQgIG9yICBkaXNwbGF5IGFuICBhbm5vdW5jZW1lbnQgIGluY2x1ZGluZyAgYW4gCisgICBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCAgYSBub3RpY2UgdGhhdCB0aGVyZSAgaXMgbm8gd2FycmFudHkgIChvciAKKyAgIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSAgcmVkaXN0cmlidXRlIAorICAgdGhlIHByb2dyYW0gdW5kZXIgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCAgdGVsbGluZyB0aGUgdXNlciAgaG93IHRvIHZpZXcgIGEgCisgICBjb3B5IG9mIHRoaXMgTGljZW5zZS4gKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dCAKKyAgIGRvZXMgbm90ICBub3JtYWxseSBwcmludCAgc3VjaCBhbiAgYW5ub3VuY2VtZW50LCB5b3VyICB3b3JrIGJhc2VkICBvbiAgdGhlIAorICAgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgIFRoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiBJZiAgaWRlbnRpZmlhYmxlIAorICAgc2VjdGlvbnMgb2YgIHRoYXQgIHdvcmsgYXJlICBub3QgIGRlcml2ZWQgZnJvbSAgdGhlICBQcm9ncmFtLCBhbmQgIGNhbiAgYmUgCisgICByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kICBzZXBhcmF0ZSB3b3JrcyBpbiB0aGVtc2VsdmVzLCAgdGhlbiAKKyAgIHRoaXMgTGljZW5zZSwgIGFuZCBpdHMgIHRlcm1zLCBkbyAgbm90IGFwcGx5ICB0byB0aG9zZSAgc2VjdGlvbnMgd2hlbiAgeW91IAorICAgZGlzdHJpYnV0ZSB0aGVtICBhcyAgc2VwYXJhdGUgd29ya3MuICBCdXQgIHdoZW4geW91ICBkaXN0cmlidXRlICB0aGUgIHNhbWUgCisgICBzZWN0aW9ucyBhcyBwYXJ0ICBvZiBhIHdob2xlICB3aGljaCBpcyBhICB3b3JrIGJhc2VkIG9uICB0aGUgUHJvZ3JhbSwgIHRoZSAKKyAgIGRpc3RyaWJ1dGlvbiBvZiB0aGUgIHdob2xlIG11c3QgIGJlIG9uIHRoZSAgdGVybXMgb2YgIHRoaXMgTGljZW5zZSwgIHdob3NlIAorICAgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyAgZXh0ZW5kIHRvIHRoZSBlbnRpcmUgIHdob2xlLCBhbmQgdGh1cyAgdG8gCisgICBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgVGh1cywgaXQgaXMgbm90IHRoZSBpbnRlbnQgb2YgdGhpcyBzZWN0aW9uIHRvIGNsYWltIHJpZ2h0cyBvciBjb250ZXN0IHlvdXIgCisgICByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvICBleGVyY2lzZSAKKyAgIHRoZSByaWdodCB0byBjb250cm9sICB0aGUgZGlzdHJpYnV0aW9uIG9mICBkZXJpdmF0aXZlIG9yIGNvbGxlY3RpdmUgIHdvcmtzIAorICAgYmFzZWQgb24gdGhlIFByb2dyYW0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgIEluIGFkZGl0aW9uLCBtZXJlICBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyICB3b3JrIG5vdCBiYXNlZCAgb24gdGhlICBQcm9ncmFtIAorICAgd2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCAgYSB3b3JrIGJhc2VkIG9uIHRoZSAgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YgIGEgCisgICBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiAgbWVkaXVtIGRvZXMgbm90ICBicmluZyB0aGUgb3RoZXIgIHdvcmsgdW5kZXIgIHRoZSAKKyAgIHNjb3BlIG9mIHRoaXMgTGljZW5zZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAzLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlICBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsICB1bmRlciAKKyAgIFNlY3Rpb24gMikgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIAorICAgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzogICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgIGEpIEFjY29tcGFueSBpdCAgd2l0aCB0aGUgY29tcGxldGUgIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSAgc291cmNlIAorICAgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiAgYWJvdmUgCisgICBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCAgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlIHllYXJzLCAgdG8gCisgICBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yICBhIGNoYXJnZSBubyBtb3JlICB0aGFuIHlvdXIgY29zdCBvZiAgcGh5c2ljYWxseSAKKyAgIHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgIGEgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSAgY29weSBvZiAgdGhlIAorICAgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgCisgICBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgYykgQWNjb21wYW55ICBpdCB3aXRoICB0aGUgaW5mb3JtYXRpb24gIHlvdSByZWNlaXZlZCAgYXMgdG8gIHRoZSBvZmZlciAgdG8gCisgICBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlICBjb2RlLiAoVGhpcyBhbHRlcm5hdGl2ZSAgaXMgYWxsb3dlZCAgb25seSAKKyAgIGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiAgYW5kIG9ubHkgIGlmIHlvdSByZWNlaXZlZCAgdGhlIHByb2dyYW0gIGluIAorICAgb2JqZWN0IGNvZGUgIG9yICBleGVjdXRhYmxlICBmb3JtICB3aXRoIHN1Y2ggIGFuICBvZmZlciwgIGluICBhY2NvcmQgIHdpdGggCisgICBTdWJzZWN0aW9uIGIgYWJvdmUuKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvciBtYWtpbmcgCisgICBtb2RpZmljYXRpb25zIHRvIGl0LiBGb3IgIGFuIGV4ZWN1dGFibGUgd29yaywgIGNvbXBsZXRlIHNvdXJjZSBjb2RlICBtZWFucyAKKyAgIGFsbCB0aGUgIHNvdXJjZSBjb2RlICBmb3IgYWxsICBtb2R1bGVzIGl0ICBjb250YWlucywgcGx1cyAgYW55ICBhc3NvY2lhdGVkIAorICAgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHBsdXMgdGhlICBzY3JpcHRzIHVzZWQgdG8gY29udHJvbCAgY29tcGlsYXRpb24gCisgICBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLiAgSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgIHRoZSAKKyAgIHNvdXJjZSBjb2RlICBkaXN0cmlidXRlZCAgbmVlZCAgbm90ICBpbmNsdWRlICBhbnl0aGluZyAgdGhhdCAgaXMgIG5vcm1hbGx5IAorICAgZGlzdHJpYnV0ZWQgKGluIGVpdGhlciBzb3VyY2UgIG9yIGJpbmFyeSBmb3JtKSAgd2l0aCB0aGUgbWFqb3IgIGNvbXBvbmVudHMgCisgICAoY29tcGlsZXIsIGtlcm5lbCwgIGFuZCAgc28gb24pICBvZiAgdGhlICBvcGVyYXRpbmcgc3lzdGVtICBvbiAgd2hpY2ggIHRoZSAKKyAgIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50IGl0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4gIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICBJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byAKKyAgIGNvcHkgZnJvbSBhIGRlc2lnbmF0ZWQgcGxhY2UsIHRoZW4gb2ZmZXJpbmcgZXF1aXZhbGVudCBhY2Nlc3MgdG8gY29weSAgdGhlIAorICAgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMgZGlzdHJpYnV0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSwgCisgICBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QgY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyAgd2l0aCAKKyAgIHRoZSBvYmplY3QgY29kZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gIGV4Y2VwdCAKKyAgIGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzICBMaWNlbnNlLiBBbnkgYXR0ZW1wdCBvdGhlcndpc2UgdG8gIGNvcHksIAorICAgbW9kaWZ5LCAgc3VibGljZW5zZSAgb3IgICBkaXN0cmlidXRlICB0aGUgIFByb2dyYW0gICBpcyAgdm9pZCwgIGFuZCAgIHdpbGwgCisgICBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyAgdW5kZXIgdGhpcyBMaWNlbnNlLiBIb3dldmVyLCAgcGFydGllcyAKKyAgIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2Ugd2lsbCAgbm90IAorICAgaGF2ZSB0aGVpciBsaWNlbnNlcyAgdGVybWluYXRlZCBzbyAgbG9uZyBhcyAgc3VjaCBwYXJ0aWVzICByZW1haW4gaW4gIGZ1bGwgCisgICBjb21wbGlhbmNlLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90ICBzaWduZWQgCisgICBpdC4gSG93ZXZlciwgbm90aGluZyBlbHNlICBncmFudHMgeW91IHBlcm1pc3Npb24gIHRvIG1vZGlmeSBvciAgZGlzdHJpYnV0ZSAKKyAgIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiAgVGhlc2UgYWN0aW9ucyBhcmUgcHJvaGliaXRlZCBieSAgbGF3IAorICAgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiBUaGVyZWZvcmUsIGJ5IG1vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgCisgICB0aGUgUHJvZ3JhbSAgKG9yICBhbnkgIHdvcmsgIGJhc2VkIG9uICB0aGUgIFByb2dyYW0pLCAgeW91ICBpbmRpY2F0ZSAgeW91ciAKKyAgIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQgYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyAgZm9yIAorICAgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZyB0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4gICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgIDYuIEVhY2ggIHRpbWUgeW91ICByZWRpc3RyaWJ1dGUgdGhlICBQcm9ncmFtICAob3IgYW55ICB3b3JrIGJhc2VkICBvbiAgdGhlIAorICAgUHJvZ3JhbSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUgb3JpZ2luYWwgCisgICBsaWNlbnNvciB0byBjb3B5LCBkaXN0cmlidXRlIG9yIG1vZGlmeSB0aGUgUHJvZ3JhbSBzdWJqZWN0IHRvIHRoZXNlICB0ZXJtcyAKKyAgIGFuZCBjb25kaXRpb25zLiAgWW91ICBtYXkgIG5vdCAgaW1wb3NlIGFueSAgZnVydGhlciAgcmVzdHJpY3Rpb25zICBvbiAgdGhlIAorICAgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4gWW91IGFyZSBub3QgcmVzcG9uc2libGUgCisgICBmb3IgZW5mb3JjaW5nIGNvbXBsaWFuY2UgYnkgdGhpcmQgcGFydGllcyB0byB0aGlzIExpY2Vuc2UuICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgNy4gSWYsICBhcyBhICBjb25zZXF1ZW5jZSBvZiAgYSAgY291cnQganVkZ21lbnQgIG9yIGFsbGVnYXRpb24gIG9mICBwYXRlbnQgCisgICBpbmZyaW5nZW1lbnQgb3IgIGZvciBhbnkgIG90aGVyICByZWFzb24gKG5vdCAgbGltaXRlZCB0byAgcGF0ZW50ICBpc3N1ZXMpLCAKKyAgIGNvbmRpdGlvbnMgYXJlICBpbXBvc2VkICBvbiB5b3UgICh3aGV0aGVyICBieSBjb3VydCAgb3JkZXIsICBhZ3JlZW1lbnQgIG9yIAorICAgb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgIHRoZSBjb25kaXRpb25zICBvZiB0aGlzIExpY2Vuc2UsICB0aGV5IGRvICBub3QgCisgICBleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgIHRoaXMgTGljZW5zZS4gSWYgeW91IGNhbm5vdCAgZGlzdHJpYnV0ZSAKKyAgIHNvIGFzIHRvIHNhdGlzZnkgIHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgIHVuZGVyIHRoaXMgTGljZW5zZSAgYW5kIAorICAgYW55IG90aGVyICBwZXJ0aW5lbnQgIG9ibGlnYXRpb25zLCAgdGhlbiAgYXMgYSAgY29uc2VxdWVuY2UgIHlvdSAgbWF5ICBub3QgCisgICBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGF0IGFsbC4gRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50IGxpY2Vuc2Ugd291bGQgIG5vdCAKKyAgIHBlcm1pdCByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkgYWxsIHRob3NlIHdobyByZWNlaXZlIAorICAgY29waWVzIGRpcmVjdGx5IG9yICBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCAgdGhlbiB0aGUgb25seSAgd2F5IHlvdSAgY291bGQgCisgICBzYXRpc2Z5IGJvdGggIGl0ICBhbmQgdGhpcyAgTGljZW5zZSAgd291bGQgIGJlIHRvICByZWZyYWluICBlbnRpcmVseSAgZnJvbSAKKyAgIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICBJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgIGFueSAKKyAgIHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiAgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gIGFwcGx5IAorICAgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIgY2lyY3Vtc3RhbmNlcy4gICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgIEl0IGlzICBub3QgdGhlICBwdXJwb3NlIG9mICB0aGlzIHNlY3Rpb24gIHRvIGluZHVjZSAgeW91IHRvICBpbmZyaW5nZSAgYW55IAorICAgcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkgIHN1Y2ggCisgICBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgIHB1cnBvc2Ugb2YgcHJvdGVjdGluZyB0aGUgaW50ZWdyaXR5ICBvZiAKKyAgIHRoZSBmcmVlICBzb2Z0d2FyZSBkaXN0cmlidXRpb24gIHN5c3RlbSwgd2hpY2ggIGlzIGltcGxlbWVudGVkICBieSAgcHVibGljIAorICAgbGljZW5zZSBwcmFjdGljZXMuIE1hbnkgIHBlb3BsZSBoYXZlICBtYWRlIGdlbmVyb3VzICBjb250cmlidXRpb25zIHRvICB0aGUgCisgICB3aWRlIHJhbmdlICBvZiBzb2Z0d2FyZSAgZGlzdHJpYnV0ZWQgdGhyb3VnaCAgdGhhdCBzeXN0ZW0gIGluIHJlbGlhbmNlICBvbiAKKyAgIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgIHRoYXQgc3lzdGVtOyBpdCAgaXMgdXAgdG8gIHRoZSBhdXRob3IvZG9ub3IgIHRvIAorICAgZGVjaWRlIGlmIGhlIG9yICBzaGUgaXMgd2lsbGluZyB0byAgZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSAgb3RoZXIgCisgICBzeXN0ZW0gYW5kIGEgbGljZW5zZWUgY2Fubm90IGltcG9zZSB0aGF0IGNob2ljZS4gICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvIGJlIGEgCisgICBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgOC4gSWYgdGhlIGRpc3RyaWJ1dGlvbiBhbmQvb3IgdXNlIG9mIHRoZSBQcm9ncmFtIGlzIHJlc3RyaWN0ZWQgaW4gIGNlcnRhaW4gCisgICBjb3VudHJpZXMgZWl0aGVyIGJ5ICBwYXRlbnRzIG9yICBieSBjb3B5cmlnaHRlZCAgaW50ZXJmYWNlcywgdGhlICBvcmlnaW5hbCAKKyAgIGNvcHlyaWdodCBob2xkZXIgd2hvICBwbGFjZXMgdGhlICBQcm9ncmFtIHVuZGVyICB0aGlzIExpY2Vuc2UgIG1heSBhZGQgIGFuIAorICAgZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiAgbGltaXRhdGlvbiBleGNsdWRpbmcgdGhvc2UgIGNvdW50cmllcywgCisgICBzbyB0aGF0IGRpc3RyaWJ1dGlvbiAgaXMgcGVybWl0dGVkICBvbmx5IGluICBvciBhbW9uZyAgY291bnRyaWVzIG5vdCAgdGh1cyAKKyAgIGV4Y2x1ZGVkLiBJbiBzdWNoICBjYXNlLCB0aGlzICBMaWNlbnNlIGluY29ycG9yYXRlcyB0aGUgIGxpbWl0YXRpb24gYXMgIGlmIAorICAgd3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgIDkuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3IHZlcnNpb25zIG9mIAorICAgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgIGZyb20gdGltZSB0byB0aW1lLiAgU3VjaCBuZXcgdmVyc2lvbnMgd2lsbCAgYmUgCisgICBzaW1pbGFyIGluIHNwaXJpdCAgdG8gdGhlICBwcmVzZW50IHZlcnNpb24sIGJ1dCAgbWF5IGRpZmZlciAgaW4gZGV0YWlsICB0byAKKyAgIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICBFYWNoIHZlcnNpb24gIGlzIGdpdmVuICBhIGRpc3Rpbmd1aXNoaW5nICB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSAgUHJvZ3JhbSAKKyAgIHNwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyICBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggIGFwcGxpZXMgdG8gaXQgYW5kICAiYW55IAorICAgbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgIGNvbmRpdGlvbnMgCisgICBlaXRoZXIgb2YgIHRoYXQgdmVyc2lvbiAgb3Igb2YgIGFueSBsYXRlciAgdmVyc2lvbiBwdWJsaXNoZWQgIGJ5IHRoZSAgRnJlZSAKKyAgIFNvZnR3YXJlIEZvdW5kYXRpb24uIElmIHRoZSBQcm9ncmFtIGRvZXMgIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgIG9mIAorICAgdGhpcyBMaWNlbnNlLCAgeW91IG1heSAgY2hvb3NlICBhbnkgdmVyc2lvbiAgZXZlciAgcHVibGlzaGVkIGJ5ICB0aGUgIEZyZWUgCisgICBTb2Z0d2FyZSBGb3VuZGF0aW9uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgMTAuIElmICB5b3Ugd2lzaCAgdG8gaW5jb3Jwb3JhdGUgIHBhcnRzICBvZiB0aGUgIFByb2dyYW0gaW50byAgb3RoZXIgIGZyZWUgCisgICBwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byB0aGUgIGF1dGhvciAKKyAgIHRvIGFzayAgZm9yIHBlcm1pc3Npb24uICBGb3Igc29mdHdhcmUgIHdoaWNoIGlzICBjb3B5cmlnaHRlZCBieSAgdGhlICBGcmVlIAorICAgU29mdHdhcmUgRm91bmRhdGlvbiwgd3JpdGUgdG8gdGhlICBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlICBzb21ldGltZXMgCisgICBtYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzICBvZiAKKyAgIHByZXNlcnZpbmcgdGhlIGZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQgIG9mIAorICAgcHJvbW90aW5nIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOTyBXQVJSQU5UWSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCAgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PICBXQVJSQU5UWSAKKyAgIEZPUiBUSEUgUFJPR1JBTSwgVE8gIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZICBBUFBMSUNBQkxFIExBVy4gRVhDRVBUICBXSEVOIAorICAgT1RIRVJXSVNFIFNUQVRFRCBJTiAgV1JJVElORyBUSEUgIENPUFlSSUdIVCBIT0xERVJTICBBTkQvT1IgT1RIRVIgIFBBUlRJRVMgCisgICBQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCAKKyAgIE9SIElNUExJRUQsICBJTkNMVURJTkcsIEJVVCAgTk9UICBMSU1JVEVEIFRPLCAgVEhFIElNUExJRUQgIFdBUlJBTlRJRVMgIE9GIAorICAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBICBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBFTlRJUkUgUklTSyAgQVMgCisgICBUTyBUSEUgUVVBTElUWSAgQU5EIFBFUkZPUk1BTkNFICBPRiBUSEUgUFJPR1JBTSAgSVMgV0lUSCAgWU9VLiBTSE9VTEQgIFRIRSAKKyAgIFBST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FICBUSEUgQ09TVCBPRiBBTEwgTkVDRVNTQVJZICBTRVJWSUNJTkcsIAorICAgUkVQQUlSIE9SIENPUlJFQ1RJT04uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgIDEyLiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOICBXUklUSU5HIAorICAgV0lMTCBBTlkgIENPUFlSSUdIVCBIT0xERVIsICBPUiAgQU5ZIE9USEVSICBQQVJUWSAgV0hPIE1BWSAgTU9ESUZZICBBTkQvT1IgCisgICBSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLCAKKyAgIElOQ0xVRElORyAgQU5ZICBHRU5FUkFMLCAgU1BFQ0lBTCwgIElOQ0lERU5UQUwgIE9SICBDT05TRVFVRU5USUFMICBEQU1BR0VTIAorICAgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUICBOT1QgCisgICBMSU1JVEVEIFRPICBMT1NTIE9GICBEQVRBICBPUiBEQVRBICBCRUlORyAgUkVOREVSRUQgSU5BQ0NVUkFURSAgT1IgIExPU1NFUyAKKyAgIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiAgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPICBPUEVSQVRFIAorICAgV0lUSCBBTlkgT1RIRVIgIFBST0dSQU1TKSwgRVZFTiAgSUYgU1VDSCBIT0xERVIgIE9SIE9USEVSICBQQVJUWSBIQVMgIEJFRU4gCisgICBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMgICAgICAgICAgICAgICAgICAgICAgICAgCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKworICAgIAorCisgICBZT1UgQUNLTk9XTEVER0UgVEhBVCBZT1UgSEFWRSBSRUFEIFRISVMgQUdSRUVNRU5UIChJTkNMVURJTkcgVEhFIEVYSElCSVRTKQorICAgQU5EIFVOREVSU1RBTkQgSVQsIEFORCBUSEFUIEJZICBDTElDS0lORyBPTiBUSEUgIkFDQ0VQVCIgQlVUVE9OIEJFTE9XICBBTkQKKyAgIElOU1RBTExJTkcvRE9XTkxPQURJTkcgVEhFIFNPRlRXQVJFIFlPVSAgQUNDRVBUIEFORCBBR1JFRSAgVE8gQkUgQk9VTkQgIEJZCisgICBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQuCisKKyAgIFBsYW4gOSBPcGVuIFNvdXJjZSBMaWNlbnNlIC0gVmVyc2lvbiAxLjQgLSAwOS8xMC8wMgorTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5ULgorCisgICBQbGFuIDkgT3BlbiBTb3VyY2UgTGljZW5zZSAtIFZlcnNpb24gMS40IC0gMDkvMTAvMDIKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL1BPTVBPTSBiL2xpY2Vuc2VzL1BPTVBPTQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDA3MzNmCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvUE9NUE9NCkBAIC0wLDAgKzEsMjAgQEAKKyAgU09GVFdBUkUgTElDRU5TRSBBR1JFRU1FTlQuCisKK1lvdSBzaG91bGQgY2FyZWZ1bGx5IHJlYWQgdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBiZWZvcmUgdXNpbmcgdGhpcyBzb2Z0d2FyZS4gWW91ciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBpbmRpY2F0ZXMgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgbGljZW5zZSBhZ3JlZW1lbnQgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHkuCisKKyAgMS4gQWxsIGNvcHlyaWdodHMgdG8gJ011dGFudFN0b3JtJyBhcmUgZXhjbHVzaXZlbHkgb3duZWQgYnkgdGhlIGF1dGhvciAtICdQb21Qb20nLgorCisgIDIuIFRoZSBldmFsdWF0aW9uIHZlcnNpb24gaXMgZGlzdHJpYnV0ZWQgb24gYSBzaGFyZXdhcmUgYmFzaXMuIFlvdSBhcmUgZXhwZWN0ZWQgdG8gdXNlIHRoaXMgcHJvZ3JhbSBvbiB5b3VyIHN5c3RlbSBhbmQgdG8gdGhvcm91Z2hseSBldmFsdWF0ZSBpdHMgdXNlZnVsbmVzcyBhbmQgZnVuY3Rpb25hbGl0eSBiZWZvcmUgbWFraW5nIGEgcHVyY2hhc2UuICBUaGlzICJ0cnkgYmVmb3JlIHlvdSBidXkiIGFwcHJvYWNoIGlzIHRoZSB1bHRpbWF0ZSBndWFyYW50ZWUgdGhhdCAnTXV0YW50U3Rvcm0nIHdpbGwgcGVyZm9ybSB0byB5b3VyIHNhdGlzZmFjdGlvbi4KKworICAzLiBQcm92aWRlZCB0aGF0IHlvdSB2ZXJpZnkgdGhhdCB5b3UgYXJlIGRpc3RyaWJ1dGluZyB0aGUgZXZhbHVhdGlvbiB2ZXJzaW9uIHlvdSBhcmUgaGVyZWJ5IGxpY2Vuc2VkIHRvIG1ha2UgYXMgbWFueSBjb3BpZXMgb2YgdGhlIGV2YWx1YXRpb24gdmVyc2lvbiBvZiB0aGlzIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIGFzIHlvdSB3aXNoOyBnaXZlIGV4YWN0IGNvcGllcyBvZiB0aGUgb3JpZ2luYWwgZXZhbHVhdGlvbiB2ZXJzaW9uIHRvIGFueW9uZTsgYW5kIGRpc3RyaWJ1dGUgdGhlIGV2YWx1YXRpb24gdmVyc2lvbiBvZiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24gaW4gaXRzIHVubW9kaWZpZWQgZm9ybSB2aWEgZWxlY3Ryb25pYyBtZWFucy4gVGhlcmUgaXMgbm8gY2hhcmdlIGZvciBhbnkgb2YgdGhlIGFib3ZlLgorWW91IGFyZSBzcGVjaWZpY2FsbHkgcHJvaGliaXRlZCBmcm9tIGNoYXJnaW5nLCBvciByZXF1ZXN0aW5nIGRvbmF0aW9ucywgZm9yIGFueSBzdWNoIGNvcGllcywgaG93ZXZlciBtYWRlOyBhbmQgZnJvbSBkaXN0cmlidXRpbmcgdGhlIHNvZnR3YXJlIGFuZC9vciBkb2N1bWVudGF0aW9uIHdpdGggb3RoZXIgcHJvZHVjdHMgKGNvbW1lcmNpYWwgb3Igb3RoZXJ3aXNlKSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworICA0LiBPbmNlIHJlZ2lzdGVyZWQvcHVyY2hhc2VkLCB0aGUgdXNlciBpcyBncmFudGVkIGEgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlIHRvIHVzZSAnTXV0YW50U3Rvcm0nIG9uIG9uZSBjb21wdXRlci4gWW91IG1heSBub3Qgc3VibGljZW5zZSwgcmVudCwgbGVhc2Ugb3IgdHJhbnNmZXIgdGhlIHNvZnR3YXJlLiBZb3UgbWF5IGluc3RhbGwgYW5kIHVzZSBvbmUgcmVnaXN0ZXJlZC9wdXJjaGFzZWQgY29weSBvZiAnTXV0YW50U3Rvcm0nIG9uIG9uZSBjb21wdXRlciBpbiB5b3VyIGhvbWUsIGFuZCBvbiBvbmUgY29tcHV0ZXIgYXQgd29ya3BsYWNlLCB3aGljaCB5b3UgYXJlIHRoZSBtYWluIHVzZXIgb24uIElmIHlvdSB3aXNoIHRvIHVzZSAnTXV0YW50U3Rvcm0nIG9uIHNldmVyYWwgY29tcHV0ZXJzLCB5b3Ugc2hvdWxkIHB1cmNoYXNlIHNldmVyYWwgc2luZ2xlIGxpY2Vuc2VzLgorCisgIDUuIFlvdSBtYXkgbm90IGFsdGVyIHRoaXMgc29mdHdhcmUgaW4gYW55IHdheTsgeW91IG1heSBub3QgdXNlIG9yIGRpc3RyaWJ1dGUgYW55IHBhcnQgb2YgdGhlIG9yaWdpbmFsIHBhY2thZ2UuIFlvdSBhcmUgYWxzbyBub3QgYWxsb3dlZCB0byBlbXVsYXRlLCBkZWNvbXBpbGUsIGRpc2Fzc2VtYmxlLCBvdGhlcndpc2UgcmV2ZXJzZSBlbmdpbmVlciBhbnkgZXhlY3V0YWJsZSBwYXJ0IG9mIG9yaWdpbmFsIHBhY2thZ2UuIEFueSBzdWNoIHVuYXV0aG9yaXplZCB1c2Ugc2hhbGwgcmVzdWx0IGluIGltbWVkaWF0ZSBhbmQgYXV0b21hdGljIHRlcm1pbmF0aW9uIG9mIHRoaXMgbGljZW5zZSBhbmQgbWF5IHJlc3VsdCBpbiBjcmltaW5hbCBhbmQvb3IgY2l2aWwgcHJvc2VjdXRpb24uCisKKyAgNi4gJ011dGFudFN0b3JtJyBJUyBESVNUUklCVVRFRCAiQVMgSVMiLiAgTk8gV0FSUkFOVFkgT0YgQU5ZIEtJTkQgSVMgRVhQUkVTU0VEIE9SIElNUExJRUQuICBZT1UgVVNFIElUIEFUIFlPVVIgT1dOIFJJU0suIFdFIE1BWSBOT1QgQkUgSEVMRCBMSUFCTEUgRk9SIERBVEEgTE9TUywgREFNQUdFUywgTE9TUyBPRiBQUk9GSVRTIE9SIEFOWSBPVEhFUiBLSU5EIE9GIExPU1MgV0hJTEUgVVNJTkcgT1IgTUlTVVNJTkcgVEhJUyBTT0ZUV0FSRS4KKworICA3LiBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBoZXJlIGFyZSByZXNlcnZlZCBieSAnUG9tUG9tJy4KKworICA4LiBJbnN0YWxsaW5nIGFuZCB1c2luZyAnTXV0YW50U3Rvcm0nIHNpZ25pZmllcyBhY2NlcHRhbmNlIG9mIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBsaWNlbnNlLiBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZSB5b3UgbXVzdCByZW1vdmUgJ011dGFudFN0b3JtJyBmcm9tIHlvdXIgc3RvcmFnZSBkZXZpY2VzIGFuZCBjZWFzZSB0byB1c2UgdGhlIHByb2R1Y3QuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9QT1NUR1JFU1FMIGIvbGljZW5zZXMvUE9TVEdSRVNRTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWM0MjliCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvUE9TVEdSRVNRTApAQCAtMCwwICsxLDIzIEBACitQb3N0Z3JlU1FMIERhdGFiYXNlIE1hbmFnZW1lbnQgU3lzdGVtCisoZm9ybWVybHkga25vd24gYXMgUG9zdGdyZXMsIHRoZW4gYXMgUG9zdGdyZXM5NSkKKworUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTIwMDEsIFRoZSBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCitQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTQsIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCitkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSwgd2l0aG91dCBmZWUsIGFuZCB3aXRob3V0IGEgd3JpdHRlbiBhZ3JlZW1lbnQKK2lzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzCitwYXJhZ3JhcGggYW5kIHRoZSBmb2xsb3dpbmcgdHdvIHBhcmFncmFwaHMgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisKK0lOIE5PIEVWRU5UIFNIQUxMIFRIRSBVTklWRVJTSVRZIE9GIENBTElGT1JOSUEgQkUgTElBQkxFIFRPIEFOWSBQQVJUWSBGT1IKK0RJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgSU5DTFVESU5HCitMT1NUIFBST0ZJVFMsIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSBBTkQgSVRTCitET0NVTUVOVEFUSU9OLCBFVkVOIElGIFRIRSBVTklWRVJTSVRZIE9GIENBTElGT1JOSUEgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitUSEUgVU5JVkVSU0lUWSBPRiBDQUxJRk9STklBIFNQRUNJRklDQUxMWSBESVNDTEFJTVMgQU5ZIFdBUlJBTlRJRVMsCitJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkKK0FORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBTT0ZUV0FSRSBQUk9WSURFRCBIRVJFVU5ERVIgSVMKK09OIEFOICJBUyBJUyIgQkFTSVMsIEFORCBUSEUgVU5JVkVSU0lUWSBPRiBDQUxJRk9STklBIEhBUyBOTyBPQkxJR0FUSU9OUyBUTworUFJPVklERSBNQUlOVEVOQU5DRSwgU1VQUE9SVCwgVVBEQVRFUywgRU5IQU5DRU1FTlRTLCBPUiBNT0RJRklDQVRJT05TLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvUFNGLTIgYi9saWNlbnNlcy9QU0YtMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjAyMTY5Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvUFNGLTIKQEAgLTAsMCArMSw0NiBAQAorUFlUSE9OIFNPRlRXQVJFIEZPVU5EQVRJT04gTElDRU5TRSBWRVJTSU9OIDIKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzEuIFRoaXMgTElDRU5TRSBBR1JFRU1FTlQgaXMgYmV0d2VlbiB0aGUgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24KKygiUFNGIiksIGFuZCB0aGUgSW5kaXZpZHVhbCBvciBPcmdhbml6YXRpb24gKCJMaWNlbnNlZSIpIGFjY2Vzc2luZyBhbmQKK290aGVyd2lzZSB1c2luZyB0aGlzIHNvZnR3YXJlICgiUHl0aG9uIikgaW4gc291cmNlIG9yIGJpbmFyeSBmb3JtIGFuZAoraXRzIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbi4KKworMi4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudCwgUFNGIGhlcmVieQorZ3JhbnRzIExpY2Vuc2VlIGEgbm9uZXhjbHVzaXZlLCByb3lhbHR5LWZyZWUsIHdvcmxkLXdpZGUgbGljZW5zZSB0byByZXByb2R1Y2UsCithbmFseXplLCB0ZXN0LCBwZXJmb3JtIGFuZC9vciBkaXNwbGF5IHB1YmxpY2x5LCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3MsCitkaXN0cmlidXRlLCBhbmQgb3RoZXJ3aXNlIHVzZSBQeXRob24gYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUgdmVyc2lvbiwKK3Byb3ZpZGVkLCBob3dldmVyLCB0aGF0IFBTRidzIExpY2Vuc2UgQWdyZWVtZW50IGFuZCBQU0YncyBub3RpY2Ugb2YgY29weXJpZ2h0LAoraS5lLiwgIkNvcHlyaWdodCAoYykgPFlFQVJTPiBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbjsgQWxsIFJpZ2h0cyBSZXNlcnZlZCIKK2FyZSByZXRhaW5lZCBpbiBQeXRob24gYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUgdmVyc2lvbiBwcmVwYXJlZCBieSBMaWNlbnNlZS4KKworMy4gSW4gdGhlIGV2ZW50IExpY2Vuc2VlIHByZXBhcmVzIGEgZGVyaXZhdGl2ZSB3b3JrIHRoYXQgaXMgYmFzZWQgb24KK29yIGluY29ycG9yYXRlcyBQeXRob24gb3IgYW55IHBhcnQgdGhlcmVvZiwgYW5kIHdhbnRzIHRvIG1ha2UKK3RoZSBkZXJpdmF0aXZlIHdvcmsgYXZhaWxhYmxlIHRvIG90aGVycyBhcyBwcm92aWRlZCBoZXJlaW4sIHRoZW4KK0xpY2Vuc2VlIGhlcmVieSBhZ3JlZXMgdG8gaW5jbHVkZSBpbiBhbnkgc3VjaCB3b3JrIGEgYnJpZWYgc3VtbWFyeSBvZgordGhlIGNoYW5nZXMgbWFkZSB0byBQeXRob24uCisKKzQuIFBTRiBpcyBtYWtpbmcgUHl0aG9uIGF2YWlsYWJsZSB0byBMaWNlbnNlZSBvbiBhbiAiQVMgSVMiCitiYXNpcy4gIFBTRiBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUywgRVhQUkVTUyBPUgorSU1QTElFRC4gIEJZIFdBWSBPRiBFWEFNUExFLCBCVVQgTk9UIExJTUlUQVRJT04sIFBTRiBNQUtFUyBOTyBBTkQKK0RJU0NMQUlNUyBBTlkgUkVQUkVTRU5UQVRJT04gT1IgV0FSUkFOVFkgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MKK0ZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFIE9SIFRIQVQgVEhFIFVTRSBPRiBQWVRIT04gV0lMTCBOT1QKK0lORlJJTkdFIEFOWSBUSElSRCBQQVJUWSBSSUdIVFMuCisKKzUuIFBTRiBTSEFMTCBOT1QgQkUgTElBQkxFIFRPIExJQ0VOU0VFIE9SIEFOWSBPVEhFUiBVU0VSUyBPRiBQWVRIT04KK0ZPUiBBTlkgSU5DSURFTlRBTCwgU1BFQ0lBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIExPU1MgQVMKK0EgUkVTVUxUIE9GIE1PRElGWUlORywgRElTVFJJQlVUSU5HLCBPUiBPVEhFUldJU0UgVVNJTkcgUFlUSE9OLAorT1IgQU5ZIERFUklWQVRJVkUgVEhFUkVPRiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBUSEVSRU9GLgorCis2LiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgdXBvbiBhIG1hdGVyaWFsCiticmVhY2ggb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLgorCis3LiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgc2hhbGwgYmUgZGVlbWVkIHRvIGNyZWF0ZSBhbnkKK3JlbGF0aW9uc2hpcCBvZiBhZ2VuY3ksIHBhcnRuZXJzaGlwLCBvciBqb2ludCB2ZW50dXJlIGJldHdlZW4gUFNGIGFuZAorTGljZW5zZWUuICBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIFBTRgordHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lIGluIGEgdHJhZGVtYXJrIHNlbnNlIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorcHJvZHVjdHMgb3Igc2VydmljZXMgb2YgTGljZW5zZWUsIG9yIGFueSB0aGlyZCBwYXJ0eS4KKworOC4gQnkgY29weWluZywgaW5zdGFsbGluZyBvciBvdGhlcndpc2UgdXNpbmcgUHl0aG9uLCBMaWNlbnNlZQorYWdyZWVzIHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UKK0FncmVlbWVudC4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL1BTRi0yLjIgYi9saWNlbnNlcy9QU0YtMi4yCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNlYjViZjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9QU0YtMi4yCkBAIC0wLDAgKzEsNDcgQEAKK1BTRiBMSUNFTlNFIEFHUkVFTUVOVCBGT1IgUFlUSE9OIDIuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzEuIFRoaXMgTElDRU5TRSBBR1JFRU1FTlQgaXMgYmV0d2VlbiB0aGUgUHl0aG9uIFNvZnR3YXJlIEZvdW5kYXRpb24KKygiUFNGIiksIGFuZCB0aGUgSW5kaXZpZHVhbCBvciBPcmdhbml6YXRpb24gKCJMaWNlbnNlZSIpIGFjY2Vzc2luZyBhbmQKK290aGVyd2lzZSB1c2luZyBQeXRob24gMi4yIHNvZnR3YXJlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybSBhbmQgaXRzCithc3NvY2lhdGVkIGRvY3VtZW50YXRpb24uCisKKzIuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQsIFBTRgoraGVyZWJ5IGdyYW50cyBMaWNlbnNlZSBhIG5vbmV4Y2x1c2l2ZSwgcm95YWx0eS1mcmVlLCB3b3JsZC13aWRlCitsaWNlbnNlIHRvIHJlcHJvZHVjZSwgYW5hbHl6ZSwgdGVzdCwgcGVyZm9ybSBhbmQvb3IgZGlzcGxheSBwdWJsaWNseSwKK3ByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcywgZGlzdHJpYnV0ZSwgYW5kIG90aGVyd2lzZSB1c2UgUHl0aG9uIDIuMgorYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUgdmVyc2lvbiwgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgUFNGJ3MKK0xpY2Vuc2UgQWdyZWVtZW50IGFuZCBQU0YncyBub3RpY2Ugb2YgY29weXJpZ2h0LCBpLmUuLCAiQ29weXJpZ2h0IChjKQorMjAwMSBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbjsgQWxsIFJpZ2h0cyBSZXNlcnZlZCIgYXJlIHJldGFpbmVkIGluCitQeXRob24gMi4yIGFsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlIHZlcnNpb24gcHJlcGFyZWQgYnkgTGljZW5zZWUuCisKKzMuIEluIHRoZSBldmVudCBMaWNlbnNlZSBwcmVwYXJlcyBhIGRlcml2YXRpdmUgd29yayB0aGF0IGlzIGJhc2VkIG9uCitvciBpbmNvcnBvcmF0ZXMgUHl0aG9uIDIuMiBvciBhbnkgcGFydCB0aGVyZW9mLCBhbmQgd2FudHMgdG8gbWFrZQordGhlIGRlcml2YXRpdmUgd29yayBhdmFpbGFibGUgdG8gb3RoZXJzIGFzIHByb3ZpZGVkIGhlcmVpbiwgdGhlbgorTGljZW5zZWUgaGVyZWJ5IGFncmVlcyB0byBpbmNsdWRlIGluIGFueSBzdWNoIHdvcmsgYSBicmllZiBzdW1tYXJ5IG9mCit0aGUgY2hhbmdlcyBtYWRlIHRvIFB5dGhvbiAyLjIuCisKKzQuIFBTRiBpcyBtYWtpbmcgUHl0aG9uIDIuMiBhdmFpbGFibGUgdG8gTGljZW5zZWUgb24gYW4gIkFTIElTIgorYmFzaXMuICBQU0YgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IKK0lNUExJRUQuICBCWSBXQVkgT0YgRVhBTVBMRSwgQlVUIE5PVCBMSU1JVEFUSU9OLCBQU0YgTUFLRVMgTk8gQU5ECitESVNDTEFJTVMgQU5ZIFJFUFJFU0VOVEFUSU9OIE9SIFdBUlJBTlRZIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTCitGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBUSEFUIFRIRSBVU0UgT0YgUFlUSE9OIDIuMiBXSUxMIE5PVAorSU5GUklOR0UgQU5ZIFRISVJEIFBBUlRZIFJJR0hUUy4KKworNS4gUFNGIFNIQUxMIE5PVCBCRSBMSUFCTEUgVE8gTElDRU5TRUUgT1IgQU5ZIE9USEVSIFVTRVJTIE9GIFBZVEhPTgorMi4yIEZPUiBBTlkgSU5DSURFTlRBTCwgU1BFQ0lBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIExPU1MgQVMKK0EgUkVTVUxUIE9GIE1PRElGWUlORywgRElTVFJJQlVUSU5HLCBPUiBPVEhFUldJU0UgVVNJTkcgUFlUSE9OIDIuMiwKK09SIEFOWSBERVJJVkFUSVZFIFRIRVJFT0YsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgVEhFUkVPRi4KKworNi4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHVwb24gYSBtYXRlcmlhbAorYnJlYWNoIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4KKworNy4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIGJlIGRlZW1lZCB0byBjcmVhdGUgYW55CityZWxhdGlvbnNoaXAgb2YgYWdlbmN5LCBwYXJ0bmVyc2hpcCwgb3Igam9pbnQgdmVudHVyZSBiZXR3ZWVuIFBTRiBhbmQKK0xpY2Vuc2VlLiAgVGhpcyBMaWNlbnNlIEFncmVlbWVudCBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSBQU0YKK3RyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZSBpbiBhIHRyYWRlbWFyayBzZW5zZSB0byBlbmRvcnNlIG9yIHByb21vdGUKK3Byb2R1Y3RzIG9yIHNlcnZpY2VzIG9mIExpY2Vuc2VlLCBvciBhbnkgdGhpcmQgcGFydHkuCisKKzguIEJ5IGNvcHlpbmcsIGluc3RhbGxpbmcgb3Igb3RoZXJ3aXNlIHVzaW5nIFB5dGhvbiAyLjIsIExpY2Vuc2VlCithZ3JlZXMgdG8gYmUgYm91bmQgYnkgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZQorQWdyZWVtZW50LgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvUFNGLTIuMyBiL2xpY2Vuc2VzL1BTRi0yLjMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzViNTkyMwotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL1BTRi0yLjMKQEAgLTAsMCArMSwyNTkgQEAKK0EuIEhJU1RPUlkgT0YgVEhFIFNPRlRXQVJFCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitQeXRob24gd2FzIGNyZWF0ZWQgaW4gdGhlIGVhcmx5IDE5OTBzIGJ5IEd1aWRvIHZhbiBSb3NzdW0gYXQgU3RpY2h0aW5nCitNYXRoZW1hdGlzY2ggQ2VudHJ1bSAoQ1dJLCBzZWUgaHR0cDovL3d3dy5jd2kubmwpIGluIHRoZSBOZXRoZXJsYW5kcworYXMgYSBzdWNjZXNzb3Igb2YgYSBsYW5ndWFnZSBjYWxsZWQgQUJDLiAgR3VpZG8gcmVtYWlucyBQeXRob24ncworcHJpbmNpcGFsIGF1dGhvciwgYWx0aG91Z2ggaXQgaW5jbHVkZXMgbWFueSBjb250cmlidXRpb25zIGZyb20gb3RoZXJzLgorCitJbiAxOTk1LCBHdWlkbyBjb250aW51ZWQgaGlzIHdvcmsgb24gUHl0aG9uIGF0IHRoZSBDb3Jwb3JhdGlvbiBmb3IKK05hdGlvbmFsIFJlc2VhcmNoIEluaXRpYXRpdmVzIChDTlJJLCBzZWUgaHR0cDovL3d3dy5jbnJpLnJlc3Rvbi52YS51cykKK2luIFJlc3RvbiwgVmlyZ2luaWEgd2hlcmUgaGUgcmVsZWFzZWQgc2V2ZXJhbCB2ZXJzaW9ucyBvZiB0aGUKK3NvZnR3YXJlLgorCitJbiBNYXkgMjAwMCwgR3VpZG8gYW5kIHRoZSBQeXRob24gY29yZSBkZXZlbG9wbWVudCB0ZWFtIG1vdmVkIHRvCitCZU9wZW4uY29tIHRvIGZvcm0gdGhlIEJlT3BlbiBQeXRob25MYWJzIHRlYW0uICBJbiBPY3RvYmVyIG9mIHRoZSBzYW1lCit5ZWFyLCB0aGUgUHl0aG9uTGFicyB0ZWFtIG1vdmVkIHRvIERpZ2l0YWwgQ3JlYXRpb25zIChub3cgWm9wZQorQ29ycG9yYXRpb24sIHNlZSBodHRwOi8vd3d3LnpvcGUuY29tKS4gIEluIDIwMDEsIHRoZSBQeXRob24gU29mdHdhcmUKK0ZvdW5kYXRpb24gKFBTRiwgc2VlIGh0dHA6Ly93d3cucHl0aG9uLm9yZy9wc2YvKSB3YXMgZm9ybWVkLCBhCitub24tcHJvZml0IG9yZ2FuaXphdGlvbiBjcmVhdGVkIHNwZWNpZmljYWxseSB0byBvd24gUHl0aG9uLXJlbGF0ZWQKK0ludGVsbGVjdHVhbCBQcm9wZXJ0eS4gIFpvcGUgQ29ycG9yYXRpb24gaXMgYSBzcG9uc29yaW5nIG1lbWJlciBvZgordGhlIFBTRi4KKworQWxsIFB5dGhvbiByZWxlYXNlcyBhcmUgT3BlbiBTb3VyY2UgKHNlZSBodHRwOi8vd3d3Lm9wZW5zb3VyY2Uub3JnIGZvcgordGhlIE9wZW4gU291cmNlIERlZmluaXRpb24pLiAgSGlzdG9yaWNhbGx5LCBtb3N0LCBidXQgbm90IGFsbCwgUHl0aG9uCityZWxlYXNlcyBoYXZlIGFsc28gYmVlbiBHUEwtY29tcGF0aWJsZTsgdGhlIHRhYmxlIGJlbG93IHN1bW1hcml6ZXMKK3RoZSB2YXJpb3VzIHJlbGVhc2VzLgorCisgICAgUmVsZWFzZSAgICAgICAgIERlcml2ZWQgICAgIFllYXIgICAgICAgIE93bmVyICAgICAgIEdQTC0KKwkJICAgIGZyb20gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGU/ICgxKQorCisgICAgMC45LjAgdGhydSAxLjIgICAgICAgICAgICAgIDE5OTEtMTk5NSAgIENXSSAgICAgICAgIHllcworICAgIDEuMyB0aHJ1IDEuNS4yICAxLjIgICAgICAgICAxOTk1LTE5OTkgICBDTlJJICAgICAgICB5ZXMKKyAgICAxLjYgICAgICAgICAgICAgMS41LjIgICAgICAgMjAwMCAgICAgICAgQ05SSSAgICAgICAgbm8KKyAgICAyLjAgICAgICAgICAgICAgMS42ICAgICAgICAgMjAwMCAgICAgICAgQmVPcGVuLmNvbSAgbm8KKyAgICAxLjYuMSAgICAgICAgICAgMS42ICAgICAgICAgMjAwMSAgICAgICAgQ05SSSAgICAgICAgeWVzICgyKQorICAgIDIuMSAgICAgICAgICAgICAyLjArMS42LjEgICAyMDAxICAgICAgICBQU0YgICAgICAgICBubworICAgIDIuMC4xICAgICAgICAgICAyLjArMS42LjEgICAyMDAxICAgICAgICBQU0YgICAgICAgICB5ZXMKKyAgICAyLjEuMSAgICAgICAgICAgMi4xKzIuMC4xICAgMjAwMSAgICAgICAgUFNGICAgICAgICAgeWVzCisgICAgMi4yICAgICAgICAgICAgIDIuMS4xICAgICAgIDIwMDEgICAgICAgIFBTRiAgICAgICAgIHllcworICAgIDIuMS4yICAgICAgICAgICAyLjEuMSAgICAgICAyMDAyICAgICAgICBQU0YgICAgICAgICB5ZXMKKyAgICAyLjEuMyAgICAgICAgICAgMi4xLjIgICAgICAgMjAwMiAgICAgICAgUFNGICAgICAgICAgeWVzCisgICAgMi4yLjEgICAgICAgICAgIDIuMiAgICAgICAgIDIwMDIgICAgICAgIFBTRiAgICAgICAgIHllcworICAgIDIuMi4yICAgICAgICAgICAyLjIuMSAgICAgICAyMDAyICAgICAgICBQU0YgICAgICAgICB5ZXMKKyAgICAyLjIuMyAgICAgICAgICAgMi4yLjIgICAgICAgMjAwMyAgICAgICAgUFNGICAgICAgICAgeWVzCisgICAgMi4zICAgICAgICAgICAgIDIuMi4yICAgICAgIDIwMDItMjAwMyAgIFBTRiAgICAgICAgIHllcworCitGb290bm90ZXM6CisKKygxKSBHUEwtY29tcGF0aWJsZSBkb2Vzbid0IG1lYW4gdGhhdCB3ZSdyZSBkaXN0cmlidXRpbmcgUHl0aG9uIHVuZGVyCisgICAgdGhlIEdQTC4gIEFsbCBQeXRob24gbGljZW5zZXMsIHVubGlrZSB0aGUgR1BMLCBsZXQgeW91IGRpc3RyaWJ1dGUKKyAgICBhIG1vZGlmaWVkIHZlcnNpb24gd2l0aG91dCBtYWtpbmcgeW91ciBjaGFuZ2VzIG9wZW4gc291cmNlLiAgVGhlCisgICAgR1BMLWNvbXBhdGlibGUgbGljZW5zZXMgbWFrZSBpdCBwb3NzaWJsZSB0byBjb21iaW5lIFB5dGhvbiB3aXRoCisgICAgb3RoZXIgc29mdHdhcmUgdGhhdCBpcyByZWxlYXNlZCB1bmRlciB0aGUgR1BMOyB0aGUgb3RoZXJzIGRvbid0LgorCisoMikgQWNjb3JkaW5nIHRvIFJpY2hhcmQgU3RhbGxtYW4sIDEuNi4xIGlzIG5vdCBHUEwtY29tcGF0aWJsZSwKKyAgICBiZWNhdXNlIGl0cyBsaWNlbnNlIGhhcyBhIGNob2ljZSBvZiBsYXcgY2xhdXNlLiAgQWNjb3JkaW5nIHRvCisgICAgQ05SSSwgaG93ZXZlciwgU3RhbGxtYW4ncyBsYXd5ZXIgaGFzIHRvbGQgQ05SSSdzIGxhd3llciB0aGF0IDEuNi4xCisgICAgaXMgIm5vdCBpbmNvbXBhdGlibGUiIHdpdGggdGhlIEdQTC4KKworVGhhbmtzIHRvIHRoZSBtYW55IG91dHNpZGUgdm9sdW50ZWVycyB3aG8gaGF2ZSB3b3JrZWQgdW5kZXIgR3VpZG8ncworZGlyZWN0aW9uIHRvIG1ha2UgdGhlc2UgcmVsZWFzZXMgcG9zc2libGUuCisKKworQi4gVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIEFDQ0VTU0lORyBPUiBPVEhFUldJU0UgVVNJTkcgUFlUSE9OCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworUFNGIExJQ0VOU0UgQUdSRUVNRU5UIEZPUiBQWVRIT04gMi4zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworMS4gVGhpcyBMSUNFTlNFIEFHUkVFTUVOVCBpcyBiZXR3ZWVuIHRoZSBQeXRob24gU29mdHdhcmUgRm91bmRhdGlvbgorKCJQU0YiKSwgYW5kIHRoZSBJbmRpdmlkdWFsIG9yIE9yZ2FuaXphdGlvbiAoIkxpY2Vuc2VlIikgYWNjZXNzaW5nIGFuZAorb3RoZXJ3aXNlIHVzaW5nIFB5dGhvbiAyLjMgc29mdHdhcmUgaW4gc291cmNlIG9yIGJpbmFyeSBmb3JtIGFuZCBpdHMKK2Fzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbi4KKworMi4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudCwgUFNGCitoZXJlYnkgZ3JhbnRzIExpY2Vuc2VlIGEgbm9uZXhjbHVzaXZlLCByb3lhbHR5LWZyZWUsIHdvcmxkLXdpZGUKK2xpY2Vuc2UgdG8gcmVwcm9kdWNlLCBhbmFseXplLCB0ZXN0LCBwZXJmb3JtIGFuZC9vciBkaXNwbGF5IHB1YmxpY2x5LAorcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzLCBkaXN0cmlidXRlLCBhbmQgb3RoZXJ3aXNlIHVzZSBQeXRob24gMi4zCithbG9uZSBvciBpbiBhbnkgZGVyaXZhdGl2ZSB2ZXJzaW9uLCBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBQU0YncworTGljZW5zZSBBZ3JlZW1lbnQgYW5kIFBTRidzIG5vdGljZSBvZiBjb3B5cmlnaHQsIGkuZS4sICJDb3B5cmlnaHQgKGMpCisyMDAxLCAyMDAyLCAyMDAzIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBBbGwgUmlnaHRzIFJlc2VydmVkIiBhcmUKK3JldGFpbmVkIGluIFB5dGhvbiAyLjMgYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUgdmVyc2lvbiBwcmVwYXJlZCBieQorTGljZW5zZWUuCisKKzMuIEluIHRoZSBldmVudCBMaWNlbnNlZSBwcmVwYXJlcyBhIGRlcml2YXRpdmUgd29yayB0aGF0IGlzIGJhc2VkIG9uCitvciBpbmNvcnBvcmF0ZXMgUHl0aG9uIDIuMyBvciBhbnkgcGFydCB0aGVyZW9mLCBhbmQgd2FudHMgdG8gbWFrZQordGhlIGRlcml2YXRpdmUgd29yayBhdmFpbGFibGUgdG8gb3RoZXJzIGFzIHByb3ZpZGVkIGhlcmVpbiwgdGhlbgorTGljZW5zZWUgaGVyZWJ5IGFncmVlcyB0byBpbmNsdWRlIGluIGFueSBzdWNoIHdvcmsgYSBicmllZiBzdW1tYXJ5IG9mCit0aGUgY2hhbmdlcyBtYWRlIHRvIFB5dGhvbiAyLjMuCisKKzQuIFBTRiBpcyBtYWtpbmcgUHl0aG9uIDIuMyBhdmFpbGFibGUgdG8gTGljZW5zZWUgb24gYW4gIkFTIElTIgorYmFzaXMuICBQU0YgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IKK0lNUExJRUQuICBCWSBXQVkgT0YgRVhBTVBMRSwgQlVUIE5PVCBMSU1JVEFUSU9OLCBQU0YgTUFLRVMgTk8gQU5ECitESVNDTEFJTVMgQU5ZIFJFUFJFU0VOVEFUSU9OIE9SIFdBUlJBTlRZIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTCitGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBUSEFUIFRIRSBVU0UgT0YgUFlUSE9OIDIuMyBXSUxMIE5PVAorSU5GUklOR0UgQU5ZIFRISVJEIFBBUlRZIFJJR0hUUy4KKworNS4gUFNGIFNIQUxMIE5PVCBCRSBMSUFCTEUgVE8gTElDRU5TRUUgT1IgQU5ZIE9USEVSIFVTRVJTIE9GIFBZVEhPTgorMi4zIEZPUiBBTlkgSU5DSURFTlRBTCwgU1BFQ0lBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIExPU1MgQVMKK0EgUkVTVUxUIE9GIE1PRElGWUlORywgRElTVFJJQlVUSU5HLCBPUiBPVEhFUldJU0UgVVNJTkcgUFlUSE9OIDIuMywKK09SIEFOWSBERVJJVkFUSVZFIFRIRVJFT0YsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgVEhFUkVPRi4KKworNi4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHVwb24gYSBtYXRlcmlhbAorYnJlYWNoIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4KKworNy4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIGJlIGRlZW1lZCB0byBjcmVhdGUgYW55CityZWxhdGlvbnNoaXAgb2YgYWdlbmN5LCBwYXJ0bmVyc2hpcCwgb3Igam9pbnQgdmVudHVyZSBiZXR3ZWVuIFBTRiBhbmQKK0xpY2Vuc2VlLiAgVGhpcyBMaWNlbnNlIEFncmVlbWVudCBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSBQU0YKK3RyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZSBpbiBhIHRyYWRlbWFyayBzZW5zZSB0byBlbmRvcnNlIG9yIHByb21vdGUKK3Byb2R1Y3RzIG9yIHNlcnZpY2VzIG9mIExpY2Vuc2VlLCBvciBhbnkgdGhpcmQgcGFydHkuCisKKzguIEJ5IGNvcHlpbmcsIGluc3RhbGxpbmcgb3Igb3RoZXJ3aXNlIHVzaW5nIFB5dGhvbiAyLjMsIExpY2Vuc2VlCithZ3JlZXMgdG8gYmUgYm91bmQgYnkgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZQorQWdyZWVtZW50LgorCisKK0JFT1BFTi5DT00gTElDRU5TRSBBR1JFRU1FTlQgRk9SIFBZVEhPTiAyLjAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQkVPUEVOIFBZVEhPTiBPUEVOIFNPVVJDRSBMSUNFTlNFIEFHUkVFTUVOVCBWRVJTSU9OIDEKKworMS4gVGhpcyBMSUNFTlNFIEFHUkVFTUVOVCBpcyBiZXR3ZWVuIEJlT3Blbi5jb20gKCJCZU9wZW4iKSwgaGF2aW5nIGFuCitvZmZpY2UgYXQgMTYwIFNhcmF0b2dhIEF2ZW51ZSwgU2FudGEgQ2xhcmEsIENBIDk1MDUxLCBhbmQgdGhlCitJbmRpdmlkdWFsIG9yIE9yZ2FuaXphdGlvbiAoIkxpY2Vuc2VlIikgYWNjZXNzaW5nIGFuZCBvdGhlcndpc2UgdXNpbmcKK3RoaXMgc29mdHdhcmUgaW4gc291cmNlIG9yIGJpbmFyeSBmb3JtIGFuZCBpdHMgYXNzb2NpYXRlZAorZG9jdW1lbnRhdGlvbiAoInRoZSBTb2Z0d2FyZSIpLgorCisyLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEJlT3BlbiBQeXRob24gTGljZW5zZQorQWdyZWVtZW50LCBCZU9wZW4gaGVyZWJ5IGdyYW50cyBMaWNlbnNlZSBhIG5vbi1leGNsdXNpdmUsCityb3lhbHR5LWZyZWUsIHdvcmxkLXdpZGUgbGljZW5zZSB0byByZXByb2R1Y2UsIGFuYWx5emUsIHRlc3QsIHBlcmZvcm0KK2FuZC9vciBkaXNwbGF5IHB1YmxpY2x5LCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3MsIGRpc3RyaWJ1dGUsIGFuZAorb3RoZXJ3aXNlIHVzZSB0aGUgU29mdHdhcmUgYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUgdmVyc2lvbiwKK3Byb3ZpZGVkLCBob3dldmVyLCB0aGF0IHRoZSBCZU9wZW4gUHl0aG9uIExpY2Vuc2UgaXMgcmV0YWluZWQgaW4gdGhlCitTb2Z0d2FyZSwgYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUgdmVyc2lvbiBwcmVwYXJlZCBieSBMaWNlbnNlZS4KKworMy4gQmVPcGVuIGlzIG1ha2luZyB0aGUgU29mdHdhcmUgYXZhaWxhYmxlIHRvIExpY2Vuc2VlIG9uIGFuICJBUyBJUyIKK2Jhc2lzLiAgQkVPUEVOIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLCBFWFBSRVNTIE9SCitJTVBMSUVELiAgQlkgV0FZIE9GIEVYQU1QTEUsIEJVVCBOT1QgTElNSVRBVElPTiwgQkVPUEVOIE1BS0VTIE5PIEFORAorRElTQ0xBSU1TIEFOWSBSRVBSRVNFTlRBVElPTiBPUiBXQVJSQU5UWSBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUworRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgVEhBVCBUSEUgVVNFIE9GIFRIRSBTT0ZUV0FSRSBXSUxMIE5PVAorSU5GUklOR0UgQU5ZIFRISVJEIFBBUlRZIFJJR0hUUy4KKworNC4gQkVPUEVOIFNIQUxMIE5PVCBCRSBMSUFCTEUgVE8gTElDRU5TRUUgT1IgQU5ZIE9USEVSIFVTRVJTIE9GIFRIRQorU09GVFdBUkUgRk9SIEFOWSBJTkNJREVOVEFMLCBTUEVDSUFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgTE9TUworQVMgQSBSRVNVTFQgT0YgVVNJTkcsIE1PRElGWUlORyBPUiBESVNUUklCVVRJTkcgVEhFIFNPRlRXQVJFLCBPUiBBTlkKK0RFUklWQVRJVkUgVEhFUkVPRiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBUSEVSRU9GLgorCis1LiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgdXBvbiBhIG1hdGVyaWFsCiticmVhY2ggb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLgorCis2LiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIGJlIGdvdmVybmVkIGJ5IGFuZCBpbnRlcnByZXRlZCBpbiBhbGwKK3Jlc3BlY3RzIGJ5IHRoZSBsYXcgb2YgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEsIGV4Y2x1ZGluZyBjb25mbGljdCBvZgorbGF3IHByb3Zpc2lvbnMuICBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgc2hhbGwgYmUgZGVlbWVkIHRvCitjcmVhdGUgYW55IHJlbGF0aW9uc2hpcCBvZiBhZ2VuY3ksIHBhcnRuZXJzaGlwLCBvciBqb2ludCB2ZW50dXJlCitiZXR3ZWVuIEJlT3BlbiBhbmQgTGljZW5zZWUuICBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IGRvZXMgbm90IGdyYW50CitwZXJtaXNzaW9uIHRvIHVzZSBCZU9wZW4gdHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lcyBpbiBhIHRyYWRlbWFyaworc2Vuc2UgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIG9yIHNlcnZpY2VzIG9mIExpY2Vuc2VlLCBvciBhbnkKK3RoaXJkIHBhcnR5LiAgQXMgYW4gZXhjZXB0aW9uLCB0aGUgIkJlT3BlbiBQeXRob24iIGxvZ29zIGF2YWlsYWJsZSBhdAoraHR0cDovL3d3dy5weXRob25sYWJzLmNvbS9sb2dvcy5odG1sIG1heSBiZSB1c2VkIGFjY29yZGluZyB0byB0aGUKK3Blcm1pc3Npb25zIGdyYW50ZWQgb24gdGhhdCB3ZWIgcGFnZS4KKworNy4gQnkgY29weWluZywgaW5zdGFsbGluZyBvciBvdGhlcndpc2UgdXNpbmcgdGhlIHNvZnR3YXJlLCBMaWNlbnNlZQorYWdyZWVzIHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UKK0FncmVlbWVudC4KKworCitDTlJJIExJQ0VOU0UgQUdSRUVNRU5UIEZPUiBQWVRIT04gMS42LjEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisxLiBUaGlzIExJQ0VOU0UgQUdSRUVNRU5UIGlzIGJldHdlZW4gdGhlIENvcnBvcmF0aW9uIGZvciBOYXRpb25hbAorUmVzZWFyY2ggSW5pdGlhdGl2ZXMsIGhhdmluZyBhbiBvZmZpY2UgYXQgMTg5NSBQcmVzdG9uIFdoaXRlIERyaXZlLAorUmVzdG9uLCBWQSAyMDE5MSAoIkNOUkkiKSwgYW5kIHRoZSBJbmRpdmlkdWFsIG9yIE9yZ2FuaXphdGlvbgorKCJMaWNlbnNlZSIpIGFjY2Vzc2luZyBhbmQgb3RoZXJ3aXNlIHVzaW5nIFB5dGhvbiAxLjYuMSBzb2Z0d2FyZSBpbgorc291cmNlIG9yIGJpbmFyeSBmb3JtIGFuZCBpdHMgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uLgorCisyLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LCBDTlJJCitoZXJlYnkgZ3JhbnRzIExpY2Vuc2VlIGEgbm9uZXhjbHVzaXZlLCByb3lhbHR5LWZyZWUsIHdvcmxkLXdpZGUKK2xpY2Vuc2UgdG8gcmVwcm9kdWNlLCBhbmFseXplLCB0ZXN0LCBwZXJmb3JtIGFuZC9vciBkaXNwbGF5IHB1YmxpY2x5LAorcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzLCBkaXN0cmlidXRlLCBhbmQgb3RoZXJ3aXNlIHVzZSBQeXRob24gMS42LjEKK2Fsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlIHZlcnNpb24sIHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IENOUkkncworTGljZW5zZSBBZ3JlZW1lbnQgYW5kIENOUkkncyBub3RpY2Ugb2YgY29weXJpZ2h0LCBpLmUuLCAiQ29weXJpZ2h0IChjKQorMTk5NS0yMDAxIENvcnBvcmF0aW9uIGZvciBOYXRpb25hbCBSZXNlYXJjaCBJbml0aWF0aXZlczsgQWxsIFJpZ2h0cworUmVzZXJ2ZWQiIGFyZSByZXRhaW5lZCBpbiBQeXRob24gMS42LjEgYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUKK3ZlcnNpb24gcHJlcGFyZWQgYnkgTGljZW5zZWUuICBBbHRlcm5hdGVseSwgaW4gbGlldSBvZiBDTlJJJ3MgTGljZW5zZQorQWdyZWVtZW50LCBMaWNlbnNlZSBtYXkgc3Vic3RpdHV0ZSB0aGUgZm9sbG93aW5nIHRleHQgKG9taXR0aW5nIHRoZQorcXVvdGVzKTogIlB5dGhvbiAxLjYuMSBpcyBtYWRlIGF2YWlsYWJsZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQKK2NvbmRpdGlvbnMgaW4gQ05SSSdzIExpY2Vuc2UgQWdyZWVtZW50LiAgVGhpcyBBZ3JlZW1lbnQgdG9nZXRoZXIgd2l0aAorUHl0aG9uIDEuNi4xIG1heSBiZSBsb2NhdGVkIG9uIHRoZSBJbnRlcm5ldCB1c2luZyB0aGUgZm9sbG93aW5nCit1bmlxdWUsIHBlcnNpc3RlbnQgaWRlbnRpZmllciAoa25vd24gYXMgYSBoYW5kbGUpOiAxODk1LjIyLzEwMTMuICBUaGlzCitBZ3JlZW1lbnQgbWF5IGFsc28gYmUgb2J0YWluZWQgZnJvbSBhIHByb3h5IHNlcnZlciBvbiB0aGUgSW50ZXJuZXQKK3VzaW5nIHRoZSBmb2xsb3dpbmcgVVJMOiBodHRwOi8vaGRsLmhhbmRsZS5uZXQvMTg5NS4yMi8xMDEzIi4KKworMy4gSW4gdGhlIGV2ZW50IExpY2Vuc2VlIHByZXBhcmVzIGEgZGVyaXZhdGl2ZSB3b3JrIHRoYXQgaXMgYmFzZWQgb24KK29yIGluY29ycG9yYXRlcyBQeXRob24gMS42LjEgb3IgYW55IHBhcnQgdGhlcmVvZiwgYW5kIHdhbnRzIHRvIG1ha2UKK3RoZSBkZXJpdmF0aXZlIHdvcmsgYXZhaWxhYmxlIHRvIG90aGVycyBhcyBwcm92aWRlZCBoZXJlaW4sIHRoZW4KK0xpY2Vuc2VlIGhlcmVieSBhZ3JlZXMgdG8gaW5jbHVkZSBpbiBhbnkgc3VjaCB3b3JrIGEgYnJpZWYgc3VtbWFyeSBvZgordGhlIGNoYW5nZXMgbWFkZSB0byBQeXRob24gMS42LjEuCisKKzQuIENOUkkgaXMgbWFraW5nIFB5dGhvbiAxLjYuMSBhdmFpbGFibGUgdG8gTGljZW5zZWUgb24gYW4gIkFTIElTIgorYmFzaXMuICBDTlJJIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLCBFWFBSRVNTIE9SCitJTVBMSUVELiAgQlkgV0FZIE9GIEVYQU1QTEUsIEJVVCBOT1QgTElNSVRBVElPTiwgQ05SSSBNQUtFUyBOTyBBTkQKK0RJU0NMQUlNUyBBTlkgUkVQUkVTRU5UQVRJT04gT1IgV0FSUkFOVFkgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MKK0ZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFIE9SIFRIQVQgVEhFIFVTRSBPRiBQWVRIT04gMS42LjEgV0lMTCBOT1QKK0lORlJJTkdFIEFOWSBUSElSRCBQQVJUWSBSSUdIVFMuCisKKzUuIENOUkkgU0hBTEwgTk9UIEJFIExJQUJMRSBUTyBMSUNFTlNFRSBPUiBBTlkgT1RIRVIgVVNFUlMgT0YgUFlUSE9OCisxLjYuMSBGT1IgQU5ZIElOQ0lERU5UQUwsIFNQRUNJQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBMT1NTIEFTCitBIFJFU1VMVCBPRiBNT0RJRllJTkcsIERJU1RSSUJVVElORywgT1IgT1RIRVJXSVNFIFVTSU5HIFBZVEhPTiAxLjYuMSwKK09SIEFOWSBERVJJVkFUSVZFIFRIRVJFT0YsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgVEhFUkVPRi4KKworNi4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHVwb24gYSBtYXRlcmlhbAorYnJlYWNoIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4KKworNy4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgZmVkZXJhbAoraW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhdyBvZiB0aGUgVW5pdGVkIFN0YXRlcywgaW5jbHVkaW5nIHdpdGhvdXQKK2xpbWl0YXRpb24gdGhlIGZlZGVyYWwgY29weXJpZ2h0IGxhdywgYW5kLCB0byB0aGUgZXh0ZW50IHN1Y2gKK1UuUy4gZmVkZXJhbCBsYXcgZG9lcyBub3QgYXBwbHksIGJ5IHRoZSBsYXcgb2YgdGhlIENvbW1vbndlYWx0aCBvZgorVmlyZ2luaWEsIGV4Y2x1ZGluZyBWaXJnaW5pYSdzIGNvbmZsaWN0IG9mIGxhdyBwcm92aXNpb25zLgorTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsIHdpdGggcmVnYXJkIHRvIGRlcml2YXRpdmUgd29ya3MgYmFzZWQKK29uIFB5dGhvbiAxLjYuMSB0aGF0IGluY29ycG9yYXRlIG5vbi1zZXBhcmFibGUgbWF0ZXJpYWwgdGhhdCB3YXMKK3ByZXZpb3VzbHkgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpLCB0aGUKK2xhdyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIFZpcmdpbmlhIHNoYWxsIGdvdmVybiB0aGlzIExpY2Vuc2UKK0FncmVlbWVudCBvbmx5IGFzIHRvIGlzc3VlcyBhcmlzaW5nIHVuZGVyIG9yIHdpdGggcmVzcGVjdCB0bworUGFyYWdyYXBocyA0LCA1LCBhbmQgNyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiAgTm90aGluZyBpbiB0aGlzCitMaWNlbnNlIEFncmVlbWVudCBzaGFsbCBiZSBkZWVtZWQgdG8gY3JlYXRlIGFueSByZWxhdGlvbnNoaXAgb2YKK2FnZW5jeSwgcGFydG5lcnNoaXAsIG9yIGpvaW50IHZlbnR1cmUgYmV0d2VlbiBDTlJJIGFuZCBMaWNlbnNlZS4gIFRoaXMKK0xpY2Vuc2UgQWdyZWVtZW50IGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIENOUkkgdHJhZGVtYXJrcyBvcgordHJhZGUgbmFtZSBpbiBhIHRyYWRlbWFyayBzZW5zZSB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgb3IKK3NlcnZpY2VzIG9mIExpY2Vuc2VlLCBvciBhbnkgdGhpcmQgcGFydHkuCisKKzguIEJ5IGNsaWNraW5nIG9uIHRoZSAiQUNDRVBUIiBidXR0b24gd2hlcmUgaW5kaWNhdGVkLCBvciBieSBjb3B5aW5nLAoraW5zdGFsbGluZyBvciBvdGhlcndpc2UgdXNpbmcgUHl0aG9uIDEuNi4xLCBMaWNlbnNlZSBhZ3JlZXMgdG8gYmUKK2JvdW5kIGJ5IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LgorCisgICAgICAgIEFDQ0VQVAorCisKK0NXSSBMSUNFTlNFIEFHUkVFTUVOVCBGT1IgUFlUSE9OIDAuOS4wIFRIUk9VR0ggMS4yCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDE5OTEgLSAxOTk1LCBTdGljaHRpbmcgTWF0aGVtYXRpc2NoIENlbnRydW0gQW1zdGVyZGFtLAorVGhlIE5ldGhlcmxhbmRzLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCitkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCitwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0Citib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4KK3N1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgU3RpY2h0aW5nIE1hdGhlbWF0aXNjaAorQ2VudHJ1bSBvciBDV0kgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8KK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgorcGVybWlzc2lvbi4KKworU1RJQ0hUSU5HIE1BVEhFTUFUSVNDSCBDRU5UUlVNIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTworVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORAorRklUTkVTUywgSU4gTk8gRVZFTlQgU0hBTEwgU1RJQ0hUSU5HIE1BVEhFTUFUSVNDSCBDRU5UUlVNIEJFIExJQUJMRQorRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKK1dIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKK09GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9QU0YtMi40IGIvbGljZW5zZXMvUFNGLTIuNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNGNmZDcxCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvUFNGLTIuNApAQCAtMCwwICsxLDI2OCBAQAorQS4gSElTVE9SWSBPRiBUSEUgU09GVFdBUkUKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1B5dGhvbiB3YXMgY3JlYXRlZCBpbiB0aGUgZWFybHkgMTk5MHMgYnkgR3VpZG8gdmFuIFJvc3N1bSBhdCBTdGljaHRpbmcKK01hdGhlbWF0aXNjaCBDZW50cnVtIChDV0ksIHNlZSBodHRwOi8vd3d3LmN3aS5ubCkgaW4gdGhlIE5ldGhlcmxhbmRzCithcyBhIHN1Y2Nlc3NvciBvZiBhIGxhbmd1YWdlIGNhbGxlZCBBQkMuICBHdWlkbyByZW1haW5zIFB5dGhvbidzCitwcmluY2lwYWwgYXV0aG9yLCBhbHRob3VnaCBpdCBpbmNsdWRlcyBtYW55IGNvbnRyaWJ1dGlvbnMgZnJvbSBvdGhlcnMuCisKK0luIDE5OTUsIEd1aWRvIGNvbnRpbnVlZCBoaXMgd29yayBvbiBQeXRob24gYXQgdGhlIENvcnBvcmF0aW9uIGZvcgorTmF0aW9uYWwgUmVzZWFyY2ggSW5pdGlhdGl2ZXMgKENOUkksIHNlZSBodHRwOi8vd3d3LmNucmkucmVzdG9uLnZhLnVzKQoraW4gUmVzdG9uLCBWaXJnaW5pYSB3aGVyZSBoZSByZWxlYXNlZCBzZXZlcmFsIHZlcnNpb25zIG9mIHRoZQorc29mdHdhcmUuCisKK0luIE1heSAyMDAwLCBHdWlkbyBhbmQgdGhlIFB5dGhvbiBjb3JlIGRldmVsb3BtZW50IHRlYW0gbW92ZWQgdG8KK0JlT3Blbi5jb20gdG8gZm9ybSB0aGUgQmVPcGVuIFB5dGhvbkxhYnMgdGVhbS4gIEluIE9jdG9iZXIgb2YgdGhlIHNhbWUKK3llYXIsIHRoZSBQeXRob25MYWJzIHRlYW0gbW92ZWQgdG8gRGlnaXRhbCBDcmVhdGlvbnMgKG5vdyBab3BlCitDb3Jwb3JhdGlvbiwgc2VlIGh0dHA6Ly93d3cuem9wZS5jb20pLiAgSW4gMjAwMSwgdGhlIFB5dGhvbiBTb2Z0d2FyZQorRm91bmRhdGlvbiAoUFNGLCBzZWUgaHR0cDovL3d3dy5weXRob24ub3JnL3BzZi8pIHdhcyBmb3JtZWQsIGEKK25vbi1wcm9maXQgb3JnYW5pemF0aW9uIGNyZWF0ZWQgc3BlY2lmaWNhbGx5IHRvIG93biBQeXRob24tcmVsYXRlZAorSW50ZWxsZWN0dWFsIFByb3BlcnR5LiAgWm9wZSBDb3Jwb3JhdGlvbiBpcyBhIHNwb25zb3JpbmcgbWVtYmVyIG9mCit0aGUgUFNGLgorCitBbGwgUHl0aG9uIHJlbGVhc2VzIGFyZSBPcGVuIFNvdXJjZSAoc2VlIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcgZm9yCit0aGUgT3BlbiBTb3VyY2UgRGVmaW5pdGlvbikuICBIaXN0b3JpY2FsbHksIG1vc3QsIGJ1dCBub3QgYWxsLCBQeXRob24KK3JlbGVhc2VzIGhhdmUgYWxzbyBiZWVuIEdQTC1jb21wYXRpYmxlOyB0aGUgdGFibGUgYmVsb3cgc3VtbWFyaXplcwordGhlIHZhcmlvdXMgcmVsZWFzZXMuCisKKyAgICBSZWxlYXNlICAgICAgICAgRGVyaXZlZCAgICAgWWVhciAgICAgICAgT3duZXIgICAgICAgR1BMLQorICAgICAgICAgICAgICAgICAgICBmcm9tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlPyAoMSkKKworICAgIDAuOS4wIHRocnUgMS4yICAgICAgICAgICAgICAxOTkxLTE5OTUgICBDV0kgICAgICAgICB5ZXMKKyAgICAxLjMgdGhydSAxLjUuMiAgMS4yICAgICAgICAgMTk5NS0xOTk5ICAgQ05SSSAgICAgICAgeWVzCisgICAgMS42ICAgICAgICAgICAgIDEuNS4yICAgICAgIDIwMDAgICAgICAgIENOUkkgICAgICAgIG5vCisgICAgMi4wICAgICAgICAgICAgIDEuNiAgICAgICAgIDIwMDAgICAgICAgIEJlT3Blbi5jb20gIG5vCisgICAgMS42LjEgICAgICAgICAgIDEuNiAgICAgICAgIDIwMDEgICAgICAgIENOUkkgICAgICAgIHllcyAoMikKKyAgICAyLjEgICAgICAgICAgICAgMi4wKzEuNi4xICAgMjAwMSAgICAgICAgUFNGICAgICAgICAgbm8KKyAgICAyLjAuMSAgICAgICAgICAgMi4wKzEuNi4xICAgMjAwMSAgICAgICAgUFNGICAgICAgICAgeWVzCisgICAgMi4xLjEgICAgICAgICAgIDIuMSsyLjAuMSAgIDIwMDEgICAgICAgIFBTRiAgICAgICAgIHllcworICAgIDIuMiAgICAgICAgICAgICAyLjEuMSAgICAgICAyMDAxICAgICAgICBQU0YgICAgICAgICB5ZXMKKyAgICAyLjEuMiAgICAgICAgICAgMi4xLjEgICAgICAgMjAwMiAgICAgICAgUFNGICAgICAgICAgeWVzCisgICAgMi4xLjMgICAgICAgICAgIDIuMS4yICAgICAgIDIwMDIgICAgICAgIFBTRiAgICAgICAgIHllcworICAgIDIuMi4xICAgICAgICAgICAyLjIgICAgICAgICAyMDAyICAgICAgICBQU0YgICAgICAgICB5ZXMKKyAgICAyLjIuMiAgICAgICAgICAgMi4yLjEgICAgICAgMjAwMiAgICAgICAgUFNGICAgICAgICAgeWVzCisgICAgMi4yLjMgICAgICAgICAgIDIuMi4yICAgICAgIDIwMDMgICAgICAgIFBTRiAgICAgICAgIHllcworICAgIDIuMyAgICAgICAgICAgICAyLjIuMiAgICAgICAyMDAyLTIwMDMgICBQU0YgICAgICAgICB5ZXMKKyAgICAyLjMuMSAgICAgICAgICAgMi4zICAgICAgICAgMjAwMi0yMDAzICAgUFNGICAgICAgICAgeWVzCisgICAgMi4zLjIgICAgICAgICAgIDIuMy4xICAgICAgIDIwMDItMjAwMyAgIFBTRiAgICAgICAgIHllcworICAgIDIuMy4zICAgICAgICAgICAyLjMuMiAgICAgICAyMDAyLTIwMDMgICBQU0YgICAgICAgICB5ZXMKKyAgICAyLjMuNCAgICAgICAgICAgMi4zLjMgICAgICAgMjAwNCAgICAgICAgUFNGICAgICAgICAgeWVzCisgICAgMi4zLjUgICAgICAgICAgIDIuMy40ICAgICAgIDIwMDUgICAgICAgIFBTRiAgICAgICAgIHllcworICAgIDIuNCAgICAgICAgICAgICAyLjMgICAgICAgICAyMDA0ICAgICAgICBQU0YgICAgICAgICB5ZXMKKyAgICAyLjQuMSAgICAgICAgICAgMi40LjEgICAgICAgMjAwNSAgICAgICAgUFNGICAgICAgICAgeWVzCisgICAgMi40LjIgICAgICAgICAgIDIuNC4xICAgICAgIDIwMDUgICAgICAgIFBTRiAgICAgICAgIHllcworICAgIDIuNC4zICAgICAgICAgICAyLjQuMiAgICAgICAyMDA2ICAgICAgICBQU0YgICAgICAgICB5ZXMKKworRm9vdG5vdGVzOgorCisoMSkgR1BMLWNvbXBhdGlibGUgZG9lc24ndCBtZWFuIHRoYXQgd2UncmUgZGlzdHJpYnV0aW5nIFB5dGhvbiB1bmRlcgorICAgIHRoZSBHUEwuICBBbGwgUHl0aG9uIGxpY2Vuc2VzLCB1bmxpa2UgdGhlIEdQTCwgbGV0IHlvdSBkaXN0cmlidXRlCisgICAgYSBtb2RpZmllZCB2ZXJzaW9uIHdpdGhvdXQgbWFraW5nIHlvdXIgY2hhbmdlcyBvcGVuIHNvdXJjZS4gIFRoZQorICAgIEdQTC1jb21wYXRpYmxlIGxpY2Vuc2VzIG1ha2UgaXQgcG9zc2libGUgdG8gY29tYmluZSBQeXRob24gd2l0aAorICAgIG90aGVyIHNvZnR3YXJlIHRoYXQgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIEdQTDsgdGhlIG90aGVycyBkb24ndC4KKworKDIpIEFjY29yZGluZyB0byBSaWNoYXJkIFN0YWxsbWFuLCAxLjYuMSBpcyBub3QgR1BMLWNvbXBhdGlibGUsCisgICAgYmVjYXVzZSBpdHMgbGljZW5zZSBoYXMgYSBjaG9pY2Ugb2YgbGF3IGNsYXVzZS4gIEFjY29yZGluZyB0bworICAgIENOUkksIGhvd2V2ZXIsIFN0YWxsbWFuJ3MgbGF3eWVyIGhhcyB0b2xkIENOUkkncyBsYXd5ZXIgdGhhdCAxLjYuMQorICAgIGlzICJub3QgaW5jb21wYXRpYmxlIiB3aXRoIHRoZSBHUEwuCisKK1RoYW5rcyB0byB0aGUgbWFueSBvdXRzaWRlIHZvbHVudGVlcnMgd2hvIGhhdmUgd29ya2VkIHVuZGVyIEd1aWRvJ3MKK2RpcmVjdGlvbiB0byBtYWtlIHRoZXNlIHJlbGVhc2VzIHBvc3NpYmxlLgorCisKK0IuIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBBQ0NFU1NJTkcgT1IgT1RIRVJXSVNFIFVTSU5HIFBZVEhPTgorPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1BZVEhPTiBTT0ZUV0FSRSBGT1VOREFUSU9OIExJQ0VOU0UgVkVSU0lPTiAyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisxLiBUaGlzIExJQ0VOU0UgQUdSRUVNRU5UIGlzIGJldHdlZW4gdGhlIFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uCisoIlBTRiIpLCBhbmQgdGhlIEluZGl2aWR1YWwgb3IgT3JnYW5pemF0aW9uICgiTGljZW5zZWUiKSBhY2Nlc3NpbmcgYW5kCitvdGhlcndpc2UgdXNpbmcgdGhpcyBzb2Z0d2FyZSAoIlB5dGhvbiIpIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybSBhbmQKK2l0cyBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24uCisKKzIuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQsIFBTRgoraGVyZWJ5IGdyYW50cyBMaWNlbnNlZSBhIG5vbmV4Y2x1c2l2ZSwgcm95YWx0eS1mcmVlLCB3b3JsZC13aWRlCitsaWNlbnNlIHRvIHJlcHJvZHVjZSwgYW5hbHl6ZSwgdGVzdCwgcGVyZm9ybSBhbmQvb3IgZGlzcGxheSBwdWJsaWNseSwKK3ByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcywgZGlzdHJpYnV0ZSwgYW5kIG90aGVyd2lzZSB1c2UgUHl0aG9uCithbG9uZSBvciBpbiBhbnkgZGVyaXZhdGl2ZSB2ZXJzaW9uLCBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBQU0YncworTGljZW5zZSBBZ3JlZW1lbnQgYW5kIFBTRidzIG5vdGljZSBvZiBjb3B5cmlnaHQsIGkuZS4sICJDb3B5cmlnaHQgKGMpCisyMDAxLCAyMDAyLCAyMDAzLCAyMDA0LCAyMDA1LCAyMDA2IFB5dGhvbiBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBBbGwgUmlnaHRzCitSZXNlcnZlZCIgYXJlIHJldGFpbmVkIGluIFB5dGhvbiBhbG9uZSBvciBpbiBhbnkgZGVyaXZhdGl2ZSB2ZXJzaW9uCitwcmVwYXJlZCBieSBMaWNlbnNlZS4KKworMy4gSW4gdGhlIGV2ZW50IExpY2Vuc2VlIHByZXBhcmVzIGEgZGVyaXZhdGl2ZSB3b3JrIHRoYXQgaXMgYmFzZWQgb24KK29yIGluY29ycG9yYXRlcyBQeXRob24gb3IgYW55IHBhcnQgdGhlcmVvZiwgYW5kIHdhbnRzIHRvIG1ha2UKK3RoZSBkZXJpdmF0aXZlIHdvcmsgYXZhaWxhYmxlIHRvIG90aGVycyBhcyBwcm92aWRlZCBoZXJlaW4sIHRoZW4KK0xpY2Vuc2VlIGhlcmVieSBhZ3JlZXMgdG8gaW5jbHVkZSBpbiBhbnkgc3VjaCB3b3JrIGEgYnJpZWYgc3VtbWFyeSBvZgordGhlIGNoYW5nZXMgbWFkZSB0byBQeXRob24uCisKKzQuIFBTRiBpcyBtYWtpbmcgUHl0aG9uIGF2YWlsYWJsZSB0byBMaWNlbnNlZSBvbiBhbiAiQVMgSVMiCitiYXNpcy4gIFBTRiBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUywgRVhQUkVTUyBPUgorSU1QTElFRC4gIEJZIFdBWSBPRiBFWEFNUExFLCBCVVQgTk9UIExJTUlUQVRJT04sIFBTRiBNQUtFUyBOTyBBTkQKK0RJU0NMQUlNUyBBTlkgUkVQUkVTRU5UQVRJT04gT1IgV0FSUkFOVFkgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MKK0ZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFIE9SIFRIQVQgVEhFIFVTRSBPRiBQWVRIT04gV0lMTCBOT1QKK0lORlJJTkdFIEFOWSBUSElSRCBQQVJUWSBSSUdIVFMuCisKKzUuIFBTRiBTSEFMTCBOT1QgQkUgTElBQkxFIFRPIExJQ0VOU0VFIE9SIEFOWSBPVEhFUiBVU0VSUyBPRiBQWVRIT04KK0ZPUiBBTlkgSU5DSURFTlRBTCwgU1BFQ0lBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIExPU1MgQVMKK0EgUkVTVUxUIE9GIE1PRElGWUlORywgRElTVFJJQlVUSU5HLCBPUiBPVEhFUldJU0UgVVNJTkcgUFlUSE9OLAorT1IgQU5ZIERFUklWQVRJVkUgVEhFUkVPRiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBUSEVSRU9GLgorCis2LiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgdXBvbiBhIG1hdGVyaWFsCiticmVhY2ggb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLgorCis3LiBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgc2hhbGwgYmUgZGVlbWVkIHRvIGNyZWF0ZSBhbnkKK3JlbGF0aW9uc2hpcCBvZiBhZ2VuY3ksIHBhcnRuZXJzaGlwLCBvciBqb2ludCB2ZW50dXJlIGJldHdlZW4gUFNGIGFuZAorTGljZW5zZWUuICBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIFBTRgordHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lIGluIGEgdHJhZGVtYXJrIHNlbnNlIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorcHJvZHVjdHMgb3Igc2VydmljZXMgb2YgTGljZW5zZWUsIG9yIGFueSB0aGlyZCBwYXJ0eS4KKworOC4gQnkgY29weWluZywgaW5zdGFsbGluZyBvciBvdGhlcndpc2UgdXNpbmcgUHl0aG9uLCBMaWNlbnNlZQorYWdyZWVzIHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UKK0FncmVlbWVudC4KKworCitCRU9QRU4uQ09NIExJQ0VOU0UgQUdSRUVNRU5UIEZPUiBQWVRIT04gMi4wCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0JFT1BFTiBQWVRIT04gT1BFTiBTT1VSQ0UgTElDRU5TRSBBR1JFRU1FTlQgVkVSU0lPTiAxCisKKzEuIFRoaXMgTElDRU5TRSBBR1JFRU1FTlQgaXMgYmV0d2VlbiBCZU9wZW4uY29tICgiQmVPcGVuIiksIGhhdmluZyBhbgorb2ZmaWNlIGF0IDE2MCBTYXJhdG9nYSBBdmVudWUsIFNhbnRhIENsYXJhLCBDQSA5NTA1MSwgYW5kIHRoZQorSW5kaXZpZHVhbCBvciBPcmdhbml6YXRpb24gKCJMaWNlbnNlZSIpIGFjY2Vzc2luZyBhbmQgb3RoZXJ3aXNlIHVzaW5nCit0aGlzIHNvZnR3YXJlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybSBhbmQgaXRzIGFzc29jaWF0ZWQKK2RvY3VtZW50YXRpb24gKCJ0aGUgU29mdHdhcmUiKS4KKworMi4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBCZU9wZW4gUHl0aG9uIExpY2Vuc2UKK0FncmVlbWVudCwgQmVPcGVuIGhlcmVieSBncmFudHMgTGljZW5zZWUgYSBub24tZXhjbHVzaXZlLAorcm95YWx0eS1mcmVlLCB3b3JsZC13aWRlIGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBhbmFseXplLCB0ZXN0LCBwZXJmb3JtCithbmQvb3IgZGlzcGxheSBwdWJsaWNseSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzLCBkaXN0cmlidXRlLCBhbmQKK290aGVyd2lzZSB1c2UgdGhlIFNvZnR3YXJlIGFsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlIHZlcnNpb24sCitwcm92aWRlZCwgaG93ZXZlciwgdGhhdCB0aGUgQmVPcGVuIFB5dGhvbiBMaWNlbnNlIGlzIHJldGFpbmVkIGluIHRoZQorU29mdHdhcmUsIGFsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlIHZlcnNpb24gcHJlcGFyZWQgYnkgTGljZW5zZWUuCisKKzMuIEJlT3BlbiBpcyBtYWtpbmcgdGhlIFNvZnR3YXJlIGF2YWlsYWJsZSB0byBMaWNlbnNlZSBvbiBhbiAiQVMgSVMiCitiYXNpcy4gIEJFT1BFTiBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUywgRVhQUkVTUyBPUgorSU1QTElFRC4gIEJZIFdBWSBPRiBFWEFNUExFLCBCVVQgTk9UIExJTUlUQVRJT04sIEJFT1BFTiBNQUtFUyBOTyBBTkQKK0RJU0NMQUlNUyBBTlkgUkVQUkVTRU5UQVRJT04gT1IgV0FSUkFOVFkgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MKK0ZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFIE9SIFRIQVQgVEhFIFVTRSBPRiBUSEUgU09GVFdBUkUgV0lMTCBOT1QKK0lORlJJTkdFIEFOWSBUSElSRCBQQVJUWSBSSUdIVFMuCisKKzQuIEJFT1BFTiBTSEFMTCBOT1QgQkUgTElBQkxFIFRPIExJQ0VOU0VFIE9SIEFOWSBPVEhFUiBVU0VSUyBPRiBUSEUKK1NPRlRXQVJFIEZPUiBBTlkgSU5DSURFTlRBTCwgU1BFQ0lBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIExPU1MKK0FTIEEgUkVTVUxUIE9GIFVTSU5HLCBNT0RJRllJTkcgT1IgRElTVFJJQlVUSU5HIFRIRSBTT0ZUV0FSRSwgT1IgQU5ZCitERVJJVkFUSVZFIFRIRVJFT0YsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgVEhFUkVPRi4KKworNS4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHVwb24gYSBtYXRlcmlhbAorYnJlYWNoIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4KKworNi4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBzaGFsbCBiZSBnb3Zlcm5lZCBieSBhbmQgaW50ZXJwcmV0ZWQgaW4gYWxsCityZXNwZWN0cyBieSB0aGUgbGF3IG9mIHRoZSBTdGF0ZSBvZiBDYWxpZm9ybmlhLCBleGNsdWRpbmcgY29uZmxpY3Qgb2YKK2xhdyBwcm92aXNpb25zLiAgTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIGJlIGRlZW1lZCB0bworY3JlYXRlIGFueSByZWxhdGlvbnNoaXAgb2YgYWdlbmN5LCBwYXJ0bmVyc2hpcCwgb3Igam9pbnQgdmVudHVyZQorYmV0d2VlbiBCZU9wZW4gYW5kIExpY2Vuc2VlLiAgVGhpcyBMaWNlbnNlIEFncmVlbWVudCBkb2VzIG5vdCBncmFudAorcGVybWlzc2lvbiB0byB1c2UgQmVPcGVuIHRyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZXMgaW4gYSB0cmFkZW1hcmsKK3NlbnNlIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBvciBzZXJ2aWNlcyBvZiBMaWNlbnNlZSwgb3IgYW55Cit0aGlyZCBwYXJ0eS4gIEFzIGFuIGV4Y2VwdGlvbiwgdGhlICJCZU9wZW4gUHl0aG9uIiBsb2dvcyBhdmFpbGFibGUgYXQKK2h0dHA6Ly93d3cucHl0aG9ubGFicy5jb20vbG9nb3MuaHRtbCBtYXkgYmUgdXNlZCBhY2NvcmRpbmcgdG8gdGhlCitwZXJtaXNzaW9ucyBncmFudGVkIG9uIHRoYXQgd2ViIHBhZ2UuCisKKzcuIEJ5IGNvcHlpbmcsIGluc3RhbGxpbmcgb3Igb3RoZXJ3aXNlIHVzaW5nIHRoZSBzb2Z0d2FyZSwgTGljZW5zZWUKK2FncmVlcyB0byBiZSBib3VuZCBieSB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlCitBZ3JlZW1lbnQuCisKKworQ05SSSBMSUNFTlNFIEFHUkVFTUVOVCBGT1IgUFlUSE9OIDEuNi4xCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworMS4gVGhpcyBMSUNFTlNFIEFHUkVFTUVOVCBpcyBiZXR3ZWVuIHRoZSBDb3Jwb3JhdGlvbiBmb3IgTmF0aW9uYWwKK1Jlc2VhcmNoIEluaXRpYXRpdmVzLCBoYXZpbmcgYW4gb2ZmaWNlIGF0IDE4OTUgUHJlc3RvbiBXaGl0ZSBEcml2ZSwKK1Jlc3RvbiwgVkEgMjAxOTEgKCJDTlJJIiksIGFuZCB0aGUgSW5kaXZpZHVhbCBvciBPcmdhbml6YXRpb24KKygiTGljZW5zZWUiKSBhY2Nlc3NpbmcgYW5kIG90aGVyd2lzZSB1c2luZyBQeXRob24gMS42LjEgc29mdHdhcmUgaW4KK3NvdXJjZSBvciBiaW5hcnkgZm9ybSBhbmQgaXRzIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbi4KKworMi4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudCwgQ05SSQoraGVyZWJ5IGdyYW50cyBMaWNlbnNlZSBhIG5vbmV4Y2x1c2l2ZSwgcm95YWx0eS1mcmVlLCB3b3JsZC13aWRlCitsaWNlbnNlIHRvIHJlcHJvZHVjZSwgYW5hbHl6ZSwgdGVzdCwgcGVyZm9ybSBhbmQvb3IgZGlzcGxheSBwdWJsaWNseSwKK3ByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcywgZGlzdHJpYnV0ZSwgYW5kIG90aGVyd2lzZSB1c2UgUHl0aG9uIDEuNi4xCithbG9uZSBvciBpbiBhbnkgZGVyaXZhdGl2ZSB2ZXJzaW9uLCBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBDTlJJJ3MKK0xpY2Vuc2UgQWdyZWVtZW50IGFuZCBDTlJJJ3Mgbm90aWNlIG9mIGNvcHlyaWdodCwgaS5lLiwgIkNvcHlyaWdodCAoYykKKzE5OTUtMjAwMSBDb3Jwb3JhdGlvbiBmb3IgTmF0aW9uYWwgUmVzZWFyY2ggSW5pdGlhdGl2ZXM7IEFsbCBSaWdodHMKK1Jlc2VydmVkIiBhcmUgcmV0YWluZWQgaW4gUHl0aG9uIDEuNi4xIGFsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlCit2ZXJzaW9uIHByZXBhcmVkIGJ5IExpY2Vuc2VlLiAgQWx0ZXJuYXRlbHksIGluIGxpZXUgb2YgQ05SSSdzIExpY2Vuc2UKK0FncmVlbWVudCwgTGljZW5zZWUgbWF5IHN1YnN0aXR1dGUgdGhlIGZvbGxvd2luZyB0ZXh0IChvbWl0dGluZyB0aGUKK3F1b3Rlcyk6ICJQeXRob24gMS42LjEgaXMgbWFkZSBhdmFpbGFibGUgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kCitjb25kaXRpb25zIGluIENOUkkncyBMaWNlbnNlIEFncmVlbWVudC4gIFRoaXMgQWdyZWVtZW50IHRvZ2V0aGVyIHdpdGgKK1B5dGhvbiAxLjYuMSBtYXkgYmUgbG9jYXRlZCBvbiB0aGUgSW50ZXJuZXQgdXNpbmcgdGhlIGZvbGxvd2luZwordW5pcXVlLCBwZXJzaXN0ZW50IGlkZW50aWZpZXIgKGtub3duIGFzIGEgaGFuZGxlKTogMTg5NS4yMi8xMDEzLiAgVGhpcworQWdyZWVtZW50IG1heSBhbHNvIGJlIG9idGFpbmVkIGZyb20gYSBwcm94eSBzZXJ2ZXIgb24gdGhlIEludGVybmV0Cit1c2luZyB0aGUgZm9sbG93aW5nIFVSTDogaHR0cDovL2hkbC5oYW5kbGUubmV0LzE4OTUuMjIvMTAxMyIuCisKKzMuIEluIHRoZSBldmVudCBMaWNlbnNlZSBwcmVwYXJlcyBhIGRlcml2YXRpdmUgd29yayB0aGF0IGlzIGJhc2VkIG9uCitvciBpbmNvcnBvcmF0ZXMgUHl0aG9uIDEuNi4xIG9yIGFueSBwYXJ0IHRoZXJlb2YsIGFuZCB3YW50cyB0byBtYWtlCit0aGUgZGVyaXZhdGl2ZSB3b3JrIGF2YWlsYWJsZSB0byBvdGhlcnMgYXMgcHJvdmlkZWQgaGVyZWluLCB0aGVuCitMaWNlbnNlZSBoZXJlYnkgYWdyZWVzIHRvIGluY2x1ZGUgaW4gYW55IHN1Y2ggd29yayBhIGJyaWVmIHN1bW1hcnkgb2YKK3RoZSBjaGFuZ2VzIG1hZGUgdG8gUHl0aG9uIDEuNi4xLgorCis0LiBDTlJJIGlzIG1ha2luZyBQeXRob24gMS42LjEgYXZhaWxhYmxlIHRvIExpY2Vuc2VlIG9uIGFuICJBUyBJUyIKK2Jhc2lzLiAgQ05SSSBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUywgRVhQUkVTUyBPUgorSU1QTElFRC4gIEJZIFdBWSBPRiBFWEFNUExFLCBCVVQgTk9UIExJTUlUQVRJT04sIENOUkkgTUFLRVMgTk8gQU5ECitESVNDTEFJTVMgQU5ZIFJFUFJFU0VOVEFUSU9OIE9SIFdBUlJBTlRZIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTCitGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBUSEFUIFRIRSBVU0UgT0YgUFlUSE9OIDEuNi4xIFdJTEwgTk9UCitJTkZSSU5HRSBBTlkgVEhJUkQgUEFSVFkgUklHSFRTLgorCis1LiBDTlJJIFNIQUxMIE5PVCBCRSBMSUFCTEUgVE8gTElDRU5TRUUgT1IgQU5ZIE9USEVSIFVTRVJTIE9GIFBZVEhPTgorMS42LjEgRk9SIEFOWSBJTkNJREVOVEFMLCBTUEVDSUFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgTE9TUyBBUworQSBSRVNVTFQgT0YgTU9ESUZZSU5HLCBESVNUUklCVVRJTkcsIE9SIE9USEVSV0lTRSBVU0lORyBQWVRIT04gMS42LjEsCitPUiBBTlkgREVSSVZBVElWRSBUSEVSRU9GLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIFRIRVJFT0YuCisKKzYuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB1cG9uIGEgbWF0ZXJpYWwKK2JyZWFjaCBvZiBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuCisKKzcuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgc2hhbGwgYmUgZ292ZXJuZWQgYnkgdGhlIGZlZGVyYWwKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXcgb2YgdGhlIFVuaXRlZCBTdGF0ZXMsIGluY2x1ZGluZyB3aXRob3V0CitsaW1pdGF0aW9uIHRoZSBmZWRlcmFsIGNvcHlyaWdodCBsYXcsIGFuZCwgdG8gdGhlIGV4dGVudCBzdWNoCitVLlMuIGZlZGVyYWwgbGF3IGRvZXMgbm90IGFwcGx5LCBieSB0aGUgbGF3IG9mIHRoZSBDb21tb253ZWFsdGggb2YKK1ZpcmdpbmlhLCBleGNsdWRpbmcgVmlyZ2luaWEncyBjb25mbGljdCBvZiBsYXcgcHJvdmlzaW9ucy4KK05vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nLCB3aXRoIHJlZ2FyZCB0byBkZXJpdmF0aXZlIHdvcmtzIGJhc2VkCitvbiBQeXRob24gMS42LjEgdGhhdCBpbmNvcnBvcmF0ZSBub24tc2VwYXJhYmxlIG1hdGVyaWFsIHRoYXQgd2FzCitwcmV2aW91c2x5IGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSwgdGhlCitsYXcgb2YgdGhlIENvbW1vbndlYWx0aCBvZiBWaXJnaW5pYSBzaGFsbCBnb3Zlcm4gdGhpcyBMaWNlbnNlCitBZ3JlZW1lbnQgb25seSBhcyB0byBpc3N1ZXMgYXJpc2luZyB1bmRlciBvciB3aXRoIHJlc3BlY3QgdG8KK1BhcmFncmFwaHMgNCwgNSwgYW5kIDcgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gIE5vdGhpbmcgaW4gdGhpcworTGljZW5zZSBBZ3JlZW1lbnQgc2hhbGwgYmUgZGVlbWVkIHRvIGNyZWF0ZSBhbnkgcmVsYXRpb25zaGlwIG9mCithZ2VuY3ksIHBhcnRuZXJzaGlwLCBvciBqb2ludCB2ZW50dXJlIGJldHdlZW4gQ05SSSBhbmQgTGljZW5zZWUuICBUaGlzCitMaWNlbnNlIEFncmVlbWVudCBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSBDTlJJIHRyYWRlbWFya3Mgb3IKK3RyYWRlIG5hbWUgaW4gYSB0cmFkZW1hcmsgc2Vuc2UgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIG9yCitzZXJ2aWNlcyBvZiBMaWNlbnNlZSwgb3IgYW55IHRoaXJkIHBhcnR5LgorCis4LiBCeSBjbGlja2luZyBvbiB0aGUgIkFDQ0VQVCIgYnV0dG9uIHdoZXJlIGluZGljYXRlZCwgb3IgYnkgY29weWluZywKK2luc3RhbGxpbmcgb3Igb3RoZXJ3aXNlIHVzaW5nIFB5dGhvbiAxLjYuMSwgTGljZW5zZWUgYWdyZWVzIHRvIGJlCitib3VuZCBieSB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4KKworICAgICAgICBBQ0NFUFQKKworCitDV0kgTElDRU5TRSBBR1JFRU1FTlQgRk9SIFBZVEhPTiAwLjkuMCBUSFJPVUdIIDEuMgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworQ29weXJpZ2h0IChjKSAxOTkxIC0gMTk5NSwgU3RpY2h0aW5nIE1hdGhlbWF0aXNjaCBDZW50cnVtIEFtc3RlcmRhbSwKK1RoZSBOZXRoZXJsYW5kcy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLAorcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQgdGhhdAorYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluCitzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIFN0aWNodGluZyBNYXRoZW1hdGlzY2gKK0NlbnRydW0gb3IgQ1dJIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvCitkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKK3Blcm1pc3Npb24uCisKK1NUSUNIVElORyBNQVRIRU1BVElTQ0ggQ0VOVFJVTSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8KK1RISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQKK0ZJVE5FU1MsIElOIE5PIEVWRU5UIFNIQUxMIFNUSUNIVElORyBNQVRIRU1BVElTQ0ggQ0VOVFJVTSBCRSBMSUFCTEUKK0ZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCitXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KK0FDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCitPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvUFNUVCBiL2xpY2Vuc2VzL1BTVFQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFhNzg5MAotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL1BTVFQKQEAgLTAsMCArMSwxMjcgQEAKKyAgIFZpcnR1YWwgUGFwZXIKKworRW5kIFVzZXIgTGljZW5zZSBBZ3JlZW1lbnQgZm9yIHBzdG90ZXh0IFNvZnR3YXJlCisKKyAgIEdSQU5ULgorICAgICAgICAgIFN1YmplY3QgdG8gdGhlIHByb3Zpc2lvbnMgY29udGFpbmVkIGhlcmVpbiwgRGlnaXRhbCBFcXVpcG1lbnQKKyAgICAgICAgICBDb3Jwb3JhdGlvbiAoIkRpZ2l0YWwiKSBoZXJlYnkgZ3JhbnRzIHlvdSBhIG5vbi1leGNsdXNpdmUKKyAgICAgICAgICBsaWNlbnNlIHRvIHVzZSBpdHMgYWNjb21wYW55aW5nIHByb3ByaWV0YXJ5IHNvZnR3YXJlIHByb2R1Y3QKKyAgICAgICAgICBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uICgiU29mdHdhcmUiKSBmcmVlIG9mIGNoYXJnZQorICAgICAgICAgIHB1cnN1YW50IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudC4gWW91IGFyZQorICAgICAgICAgIG5vdCBlbnRpdGxlZCB0byBzdXBwb3J0IG9yIHRlbGVwaG9uZSBhc3Npc3RhbmNlIGluIGNvbm5lY3Rpb24KKyAgICAgICAgICB3aXRoIHlvdXIgdXNlIG9mIHRoZSBTb2Z0d2FyZS4KKworICAgU09GVFdBUkUgQU5EIERPQ1VNRU5UQVRJT04uCisgICAgICAgICAgRGlnaXRhbCBzaGFsbCBmdXJuaXNoIHRoZSBTb2Z0d2FyZSB0byB5b3UgZWxlY3Ryb25pY2FsbHkgb3Igb24KKyAgICAgICAgICBtZWRpYSBpbiBzb3VyY2UgY29kZSBmb3JtLiBUaGlzIGxpY2Vuc2UgZG9lcyBub3QgZ3JhbnQgeW91IGFueQorICAgICAgICAgIHJpZ2h0IHRvIGFueSBlbmhhbmNlbWVudCBvciB1cGRhdGUgdG8gdGhlIFNvZnR3YXJlIGFuZAorICAgICAgICAgIERvY3VtZW50YXRpb24uCisKKyAgIFVTRSBSRVNUUklDVElPTlMuCisgICAgICAgICAgWW91IG1heSB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGluCisgICAgICAgICAgc291cmNlIGNvZGUgb3Igb2JqZWN0IGNvZGUgZm9ybSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCisgICAgICAgICAgY29uZGl0aW9uczoKKworICAgICAgICAgICsgSWYgdGhlIFNvZnR3YXJlIGlzIG1vZGlmaWVkLCBhbnkgU29mdHdhcmUgY29udGFpbmluZworICAgICAgICAgICAgbW9kaWZpY2F0aW9ucyBtdXN0IHByb21pbmVudGx5IHN0YXRlIGluIHRoZSBtb2RpZmllZCBwcm9kdWN0CisgICAgICAgICAgICBvciBkb2N1bWVudGF0aW9uIChpKSB0aGF0IGl0IGhhcyBiZWVuIG1vZGlmaWVkLCAoaWkpIHRoZQorICAgICAgICAgICAgaWRlbnRpdHkgb2YgdGhlIHBlcnNvbiBvciBlbnRpdHkgdGhhdCBtYWRlIHRoZSBtb2RpZmljYXRpb25zLAorICAgICAgICAgICAgYW5kIChpaWkpIHRoZSBkYXRlIHRoZSBtb2RpZmljYXRpb25zIHdlcmUgbWFkZS4KKyAgICAgICAgICArIEVhY2ggY29weSBvZiB0aGUgU29mdHdhcmUgbWFkZSBieSB5b3Ugc2hhbGwgYmUgc3ViamVjdCB0byB0aGUKKyAgICAgICAgICAgIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBzaGFsbCBjb250YWluIGFsbCBvZiBEaWdpdGFsJ3MKKyAgICAgICAgICAgIG5vdGljZXMgcmVnYXJkaW5nIGNvcHlyaWdodHMsIHRyYWRlbWFya3MgYW5kIG90aGVyCisgICAgICAgICAgICBwcm9wcmlldGFyeSByaWdodHMgYXMgY29udGFpbmVkIGluIHRoZSBTb2Z0d2FyZSBvcmlnaW5hbGx5CisgICAgICAgICAgICBwcm92aWRlZCB0byB5b3UuCisgICAgICAgICAgKyBUaGUgU29mdHdhcmUgbWF5IG5vdCBiZSB0cmFuc2ZlcnJlZCB0byBhbnkgdGhpcmQgcGFydHkgdW5sZXNzCisgICAgICAgICAgICBzdWNoIHRoaXJkIHBhcnR5IHJlY2VpdmVzIGEgY29weSBvZiB0aGlzIEFncmVlbWVudCBhbmQgYWdyZWVzCisgICAgICAgICAgICB0byBiZSBib3VuZCBieSBhbGwgb2YgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLgorCisgICBUSVRMRS4KKyAgICAgICAgICBUaXRsZSwgb3duZXJzaGlwIHJpZ2h0cywgYW5kIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaW4KKyAgICAgICAgICBhbmQgdG8gdGhlIFNvZnR3YXJlIHNoYWxsIHJlbWFpbiBpbiBEaWdpdGFsIGFuZC9vciBpdHMKKyAgICAgICAgICBzdXBwbGllcnMuIFRoZSBTb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgdGhlIGNvcHlyaWdodCBsYXdzIG9mCisgICAgICAgICAgdGhlIFVuaXRlZCBTdGF0ZXMgYW5kIGludGVybmF0aW9uYWwgY29weXJpZ2h0IHRyZWF0aWVzLgorCisgICBDT05URU5ULgorICAgICAgICAgIFRpdGxlLCBvd25lcnNoaXAgcmlnaHRzLCBhbmQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBpbgorICAgICAgICAgIGFuZCB0byB0aGUgY29udGVudCBhY2Nlc3NlZCB0aHJvdWdoIHRoZSBTb2Z0d2FyZSBpcyB0aGUKKyAgICAgICAgICBwcm9wZXJ0eSBvZiB0aGUgYXBwbGljYWJsZSBjb250ZW50IG93bmVyIGFuZCBtYXkgYmUgcHJvdGVjdGVkCisgICAgICAgICAgYnkgYXBwbGljYWJsZSBjb3B5cmlnaHQgb3Igb3RoZXIgbGF3LiBUaGlzIExpY2Vuc2UgZ2l2ZXMgeW91IG5vCisgICAgICAgICAgcmlnaHRzIHRvIHN1Y2ggY29udGVudC4KKworICAgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS4KKyAgICAgICAgICBTaW5jZSB0aGUgU29mdHdhcmUgaXMgcHJvdmlkZWQgZnJlZSBvZiBjaGFyZ2UsIHRoZSBTb2Z0d2FyZSBpcworICAgICAgICAgIHByb3ZpZGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIHdpdGhvdXQgd2FycmFudHkgb2YgYW55IGtpbmQsCisgICAgICAgICAgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHksCisgICAgICAgICAgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UgYW5kIG5vbi1pbmZyaW5nZW1lbnQuIFRoZQorICAgICAgICAgIGVudGlyZSByaXNrIGFzIHRvIHRoZSBxdWFsaXR5IGFuZCBwZXJmb3JtYW5jZSBvZiB0aGUgU29mdHdhcmUKKyAgICAgICAgICBpcyBib3JuZSBieSB5b3UuIFNob3VsZCB0aGUgU29mdHdhcmUgcHJvdmUgZGVmZWN0aXZlLCB5b3UsIGFuZAorICAgICAgICAgIG5vdCBEaWdpdGFsIGFzc3VtZSB0aGUgZW50aXJlIGNvc3Qgb2YgYW55IHNlcnZpY2UgYW5kIHJlcGFpci4KKyAgICAgICAgICBUaGlzIGRpc2NsYWltZXIgb2Ygd2FycmFudHkgY29uc3RpdHV0ZXMgYW4gZXNzZW50aWFsIHBhcnQgb2YKKyAgICAgICAgICB0aGUgYWdyZWVtZW50LgorCisgICBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS4KKyAgICAgICAgICBVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFRPUlQsCisgICAgICAgICAgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgRElHSVRBTCBPUiBJVFMgU1VQUExJRVJTCisgICAgICAgICAgUkVTRUxMRVJTLCBPUiBMSUNFTlNFRVMgQkUgTElBQkxFIFRPIFlPVSBPUiBBTlkgT1RIRVIgUEVSU09OCisgICAgICAgICAgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMCisgICAgICAgICAgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTCisgICAgICAgICAgRk9SIExPU1MgT0YgR09PRFdJTEwsIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SCisgICAgICAgICAgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsCisgICAgICAgICAgRVZFTiBJRiBESUdJVEFMIFNIQUxMIEhBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAgICAgICAgICBTVUNIIERBTUFHRVMsIE9SIEZPUiBBTlkgQ0xBSU0gQlkgQU5ZIE9USEVSIFBBUlRZLgorCisgICBFWFBPUlQgQ09OVFJPTFMuCisgICAgICAgICAgWW91IG1heSBub3QgZG93bmxvYWQgb3Igb3RoZXJ3aXNlIGV4cG9ydCBvciByZWV4cG9ydCB0aGUKKyAgICAgICAgICBTb2Z0d2FyZSBvciBhbnkgdW5kZXJseWluZyBpbmZvcm1hdGlvbiBvciB0ZWNobm9sb2d5IGV4Y2VwdCBpbgorICAgICAgICAgIGZ1bGwgY29tcGxpYW5jZSB3aXRoIGFsbCBVbml0ZWQgU3RhdGVzIGFuZCBvdGhlciBhcHBsaWNhYmxlCisgICAgICAgICAgbGF3cyBhbmQgcmVndWxhdGlvbnMuIEJ5IGRvd25sb2FkaW5nIG9yIHVzaW5nIHRoZSBTb2Z0d2FyZSwgeW91CisgICAgICAgICAgYXJlIGFncmVlaW5nIHRvIHRoZSBmb3JlZ29pbmcuCisKKyAgIFRFUk1JTkFUSU9OLgorICAgICAgICAgIFRoaXMgQWdyZWVtZW50IHNoYWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHVwb24gZmFpbHVyZSBieQorICAgICAgICAgIHlvdSB0byBjb21wbHkgd2l0aCBpdHMgdGVybXMsIGluIHdoaWNoIGNhc2UgeW91IHNoYWxsCisgICAgICAgICAgaW1tZWRpYXRlbHkgZGlzY29udGludWUgdGhlIHVzZSBvZiB0aGUgU29mdHdhcmUgYW5kIHNoYWxsCisgICAgICAgICAgd2l0aGluIHRlbiAoMTApIGRheXMgcmV0dXJuIHRvIERpZ2l0YWwgb3IgZGVzdHJveSBhbGwgY29waWVzIG9mCisgICAgICAgICAgdGhlIFNvZnR3YXJlLiBZb3UgbWF5IGFsc28gdGVybWluYXRlIHRoaXMgQWdyZWVtZW50IGF0IGFueSB0aW1lCisgICAgICAgICAgYnkgZGVzdHJveWluZyB0aGUgU29mdHdhcmUgYW5kIGFsbCBjb3BpZXMgdGhlcmVvZi4KKworICAgTUlTQ0VMTEFORU9VUy4KKyAgICAgICAgICBUaGlzIEFncmVlbWVudCByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhbmQgZXhjbHVzaXZlIHN0YXRlbWVudAorICAgICAgICAgIG9mIHRoZSBhZ3JlZW1lbnRzIGNvbmNlcm5pbmcgdGhpcyBsaWNlbnNlIGJldHdlZW4gdGhlIHBhcnRpZXMuCisgICAgICAgICAgSXQgbWF5IGJlIGFtZW5kZWQgb25seSBieSBhIHdyaXRpbmcgZXhlY3V0ZWQgYnkgYm90aCBwYXJ0aWVzLgorICAgICAgICAgIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlCisgICAgICAgICAgZm9yIGFueSByZWFzb24sIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlCisgICAgICAgICAgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLCBhbmQgc3VjaCBkZWNpc2lvbgorICAgICAgICAgIHNoYWxsIG5vdCBhZmZlY3QgdGhlIGVuZm9yY2VhYmlsaXR5IChpKSBvZiBzdWNoIHByb3Zpc2lvbiB1bmRlcgorICAgICAgICAgIG90aGVyIGNpcmN1bXN0YW5jZXMgb3IgKGlpKSBvZiB0aGUgcmVtYWluaW5nIHByb3Zpc2lvbnMgaGVyZW9mCisgICAgICAgICAgdW5kZXIgYWxsIGNpcmN1bXN0YW5jZXMuIEhlYWRpbmdzIHNoYWxsIG5vdCBiZSBjb25zaWRlcmVkIGluCisgICAgICAgICAgaW50ZXJwcmV0aW5nIHRoaXMgQWdyZWVtZW50LiBUaGlzIEFncmVlbWVudCBzaGFsbCBiZSBnb3Zlcm5lZAorICAgICAgICAgIGJ5IGFuZCBjb25zdHJ1ZWQgdW5kZXIgdGhlIGxhd3Mgb2YgdGhlIENvbW1vbndlYWx0aCBvZgorICAgICAgICAgIE1hc3NhY2h1c2V0dHMsIGV4Y2VwdCBhcyBnb3Zlcm5lZCBieSBGZWRlcmFsIGxhdy4gVGhpcworICAgICAgICAgIEFncmVlbWVudCB3aWxsIG5vdCBiZSBnb3Zlcm5lZCBieSB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbgorICAgICAgICAgIG9mIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcywgdGhlCisgICAgICAgICAgYXBwbGljYXRpb24gb2Ygd2hpY2ggaXMgaGVyZWJ5IGV4cHJlc3NseSBleGNsdWRlZC4KKworICAgVS5TLiBHb3Zlcm5tZW50IFJlc3RyaWN0ZWQgUmlnaHRzLgorICAgICAgICAgIFVzZSwgZHVwbGljYXRpb24gb3IgZGlzY2xvc3VyZSBieSB0aGUgR292ZXJubWVudCBpcyBzdWJqZWN0IHRvCisgICAgICAgICAgcmVzdHJpY3Rpb25zIHNldCBmb3J0aCBpbiBzdWJwYXJhZ3JhcGhzIChhKSB0aHJvdWdoIChkKSBvZiB0aGUKKyAgICAgICAgICBDb21tZXJjaWFsIENvbXB1dGVyLVJlc3RyaWN0ZWQgUmlnaHRzIGNsYXVzZSBhdCBGQVIgNTIgMjI3LTE5CisgICAgICAgICAgd2hlbiBhcHBsaWNhYmxlLCBvciBpbiBzdWJwYXJhZ3JhcGggKGMpICgxKSAoaWkpIG9mIHRoZSBSaWdodHMKKyAgICAgICAgICBpbiBUZWNobmljYWwgRGF0YSBhbmQgQ29tcHV0ZXIgU29mdHdhcmUgY2xhdXNlIGF0IERGQVJTCisgICAgICAgICAgMjUyLjIyNy03MDEzLCBhbmQgaW4gc2ltaWxhciBjbGF1c2VzIGluIHRoZSBOQVNBIEZBUgorICAgICAgICAgIFN1cHBsZW1lbnQuIENvbnRyYWN0b3IvbWFudWZhY3R1cmVyIGlzIERpZ2l0YWwgRXF1aXBtZW50CisgICAgICAgICAgQ29ycG9yYXRpb24uCisgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKKworICAgIFsxXUFuZHJldyBCaXJyZWxsIGFuZCBbMl1QYXVsIE1jSm9uZXMKKworICAgWzNdTGVnYWwgU3RhdGVtZW50IFs0XVByaXZhY3kgU3RhdGVtZW50CisKK1JlZmVyZW5jZXMKKworICAgMS4gaHR0cDovL3d3dy5yZXNlYXJjaC5kaWdpdGFsLmNvbS9TUkMvcGVvcGxlL0FuZHJld19CaXJyZWxsL2Jpby5odG1sCisgICAyLiBodHRwOi8vd3d3LnJlc2VhcmNoLmRpZ2l0YWwuY29tL1NSQy9wZW9wbGUvUGF1bF9NY0pvbmVzL2Jpby5odG1sCisgICAzLiBodHRwOi8vd3d3LmNvbXBhcS5jb20vbGVnYWwuaHRtbAorICAgNC4gaHR0cDovL3d3dy5jb21wYXEuY29tL3ByaXZhY3kuaHRtbApkaWZmIC0tZ2l0IGEvbGljZW5zZXMvUFVFTCBiL2xpY2Vuc2VzL1BVRUwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNlNjJmOQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL1BVRUwKQEAgLTAsMCArMSwxNTMgQEAKK1ZpcnR1YWxCb3ggUGVyc29uYWwgVXNlIGFuZCBFdmFsdWF0aW9uIExpY2Vuc2UgKFBVRUwpCisKK0xpY2Vuc2UgdmVyc2lvbiA4LCBBcHJpbCAxOSwgMjAxMAorCitPUkFDTEUgQ09SUE9SQVRJT04gKCJPUkFDTEUiKSBJUyBXSUxMSU5HIFRPIExJQ0VOU0UgVEhFIFBST0RVQ1QgKEFTCitERUZJTkVEIElOIDEgQkVMT1cpIFRPIFlPVSBPTkxZIFVQT04gVEhFIENPTkRJVElPTiBUSEFUIFlPVSBBQ0NFUFQgQUxMCitPRiBUSEUgVEVSTVMgQ09OVEFJTkVEIElOIFRISVMgVklSVFVBTEJPWCBQRVJTT05BTCBVU0UgQU5EIEVWQUxVQVRJT04KK0xJQ0VOU0UgQUdSRUVNRU5UICgiQUdSRUVNRU5UIikuIFBMRUFTRSBSRUFEIFRIRSBBR1JFRU1FTlQgQ0FSRUZVTExZLiBCWQorRE9XTkxPQURJTkcgT1IgSU5TVEFMTElORyBUSElTIFBST0RVQ1QsIFlPVSBBQ0NFUFQgVEhFIEZVTEwgVEVSTVMgT0YKK1RISVMgQUdSRUVNRU5ULgorCitJRiBZT1UgQVJFIEFHUkVFSU5HIFRPIFRISVMgTElDRU5TRSBPTiBCRUhBTEYgT0YgQU4gRU5USVRZIE9USEVSIFRIQU4KK0FOIElORElWSURVQUwgUEVSU09OLCBZT1UgUkVQUkVTRU5UIFRIQVQgWU9VIEFSRSBCSU5ESU5HIEFORCBIQVZFIFRIRQorUklHSFQgVE8gQklORCBUSEUgRU5USVRZIFRPIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVC4KKworMSBTVUJKRUNUIE9GIEFHUkVFTUVOVC4gIlByb2R1Y3QiLCBhcyByZWZlcnJlZCB0byBpbiB0aGlzIEFncmVlbWVudCwgc2hhbGwKK2JlIHRoZSBiaW5hcnkgc29mdHdhcmUgcGFja2FnZSAiT3JhY2xlIFZNIFZpcnR1YWxCb3gsIiB3aGljaCBQcm9kdWN0CithbGxvd3MgZm9yIGNyZWF0aW5nIG11bHRpcGxlIHZpcnR1YWwgY29tcHV0ZXJzLCBlYWNoIHdpdGggZGlmZmVyZW50CitvcGVyYXRpbmcgc3lzdGVtcyAoIkd1ZXN0IENvbXB1dGVycyIpLCBvbiBhIHBoeXNpY2FsIGNvbXB1dGVyIHdpdGggYQorc3BlY2lmaWMgb3BlcmF0aW5nIHN5c3RlbSAoIkhvc3QgQ29tcHV0ZXIiKSwgdG8gYWxsb3cgZm9yIGluc3RhbGxpbmcgYW5kCitleGVjdXRpbmcgdGhlc2UgR3Vlc3QgQ29tcHV0ZXJzIHNpbXVsdGFuZW91c2x5LiBUaGUgUHJvZHVjdCBjb25zaXN0cworb2YgZXhlY3V0YWJsZSBmaWxlcyBpbiBtYWNoaW5lIGNvZGUgZm9yIHRoZSBTb2xhcmlzLCBXaW5kb3dzLCBMaW51eCwKK2FuZCBNYWNPU1ggb3BlcmF0aW5nIHN5c3RlbXMgYXMgd2VsbCBhcyBvdGhlciBkYXRhIGZpbGVzIGFzIHJlcXVpcmVkCitieSB0aGUgZXhlY3V0YWJsZSBmaWxlcyBhdCBydW4tdGltZSBhbmQgZG9jdW1lbnRhdGlvbiBpbiBlbGVjdHJvbmljCitmb3JtLiBUaGUgUHJvZHVjdCBpbmNsdWRlcyBhbGwgZG9jdW1lbnRhdGlvbiBhbmQgdXBkYXRlcyBwcm92aWRlZCB0bworWW91IGJ5IE9yYWNsZSB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50IHdpbGwKK2FwcGx5IHRvIGFsbCBzdWNoIGRvY3VtZW50YXRpb24gYW5kIHVwZGF0ZXMgdW5sZXNzIGEgZGlmZmVyZW50IGxpY2Vuc2UKK2lzIHByb3ZpZGVkIHdpdGggYW4gdXBkYXRlIG9yIGRvY3VtZW50YXRpb24uCisKKzIgR1JBTlQgT0YgTElDRU5TRS4gKDEpIE9yYWNsZSBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUsCitub24tdHJhbnNmZXJhYmxlLCBsaW1pdGVkIGxpY2Vuc2Ugd2l0aG91dCBmZWVzIHRvIHJlcHJvZHVjZSwgaW5zdGFsbCwKK2V4ZWN1dGUsIGFuZCB1c2UgaW50ZXJuYWxseSB0aGUgUHJvZHVjdCBhIEhvc3QgQ29tcHV0ZXIgZm9yIHlvdXIgUGVyc29uYWwKK1VzZSwgRWR1Y2F0aW9uYWwgVXNlLCBvciBFdmFsdWF0aW9uLiAiUGVyc29uYWwgVXNlIiByZXF1aXJlcyB0aGF0IHlvdSB1c2UKK3RoZSBQcm9kdWN0IG9uIHRoZSBzYW1lIEhvc3QgQ29tcHV0ZXIgd2hlcmUgeW91IGluc3RhbGxlZCBpdCB5b3Vyc2VsZiBhbmQKK3RoYXQgbm8gbW9yZSB0aGFuIG9uZSBjbGllbnQgY29ubmVjdCB0byB0aGF0IEhvc3QgQ29tcHV0ZXIgYXQgYSB0aW1lIGZvcgordGhlIHB1cnBvc2Ugb2YgZGlzcGxheWluZyBHdWVzdCBDb21wdXRlcnMgcmVtb3RlbHkuICJFZHVjYXRpb25hbCB1c2UiIGlzCithbnkgdXNlIGluIGFuIGFjYWRlbWljIGluc3RpdHV0aW9uIChzY2hvb2xzLCBjb2xsZWdlcyBhbmQgdW5pdmVyc2l0aWVzLAorYnkgdGVhY2hlcnMgYW5kIHN0dWRlbnRzKS4gIkV2YWx1YXRpb24iIG1lYW5zIHRlc3RpbmcgdGhlIFByb2R1Y3QgZm9yIGEKK3JlYXNvbmFibGUgcGVyaW9kICh0aGF0IGlzLCBub3JtYWxseSBmb3IgYSBmZXcgd2Vla3MpOyBhZnRlciBleHBpcnkgb2YKK3RoYXQgdGVybSwgeW91IGFyZSBubyBsb25nZXIgcGVybWl0dGVkIHRvIGV2YWx1YXRlIHRoZSBQcm9kdWN0LgorCisoMikgVGhlICJWaXJ0dWFsQm94IEd1ZXN0IEFkZGl0aW9ucyIgYXJlIGEgc2V0IG9mIGRyaXZlcnMgYW5kCit1dGlsaXRpZXMgdGhhdCBhcmUgc2hpcHBlZCBhcyBhIHN1YnNldCBvZiB0aGUgUHJvZHVjdCBmb3IgdGhlIHB1cnBvc2UKK29mIGJlaW5nIGluc3RhbGxlZCBpbnNpZGUgYSBHdWVzdCBDb21wdXRlciB0byBpbXByb3ZlIGl0cyBwZXJmb3JtYW5jZQorYW5kIGNvb3BlcmF0aW9uIHdpdGggdGhlIHJlc3Qgb2YgdGhlIFByb2R1Y3QuIEluIGFkZGl0aW9uIHRvIGFuZAoraW5kZXBlbmRlbnQgb2YgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IHN1YnNlY3Rpb24gMSwgT3JhY2xlIGFsbG93cyB5b3UKK3RvIGluc3RhbGwsIGV4ZWN1dGUsIGNvcHkgYW5kIHJlZGlzdHJpYnV0ZSBhKSB1bm1vZGlmaWVkIGNvcGllcyBvZiB0aGUKK0lTTyBpbnN0YWxsYXRpb24gbWVkaXVtIG9mIHRoZSBWaXJ0dWFsQm94IEd1ZXN0IEFkZGl0aW9ucyBhcyBzaGlwcGVkCit3aXRoIHRoZSBQcm9kdWN0IGFuZCBiKSB0aGUgVmlydHVhbEJveCBHdWVzdCBBZGRpdGlvbnMgdG9nZXRoZXIgd2l0aAordGhlIEd1ZXN0IENvbXB1dGVyIGludG8gd2hpY2ggdGhleSBoYXZlIGJlZW4gaW5zdGFsbGVkLgorCiszIFJFU1RSSUNUSU9OUyBBTkQgUkVTRVJWQVRJT04gT0YgUklHSFRTLiAoMSkgQW55IHVzZSBiZXlvbmQgdGhlCitwcm92aXNpb25zIG9mIDIgaXMgcHJvaGliaXRlZC4gVGhlIFByb2R1Y3QgYW5kIGNvcGllcyB0aGVyZW9mIHByb3ZpZGVkCit0byB5b3UgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIGNvcHlyaWdodGVkIGFuZCBsaWNlbnNlZCwgbm90IHNvbGQsIHRvCit5b3UgYnkgT3JhY2xlLiBPcmFjbGUgcmVzZXJ2ZXMgYWxsIGNvcHlyaWdodHMgYW5kIG90aGVyIGludGVsbGVjdHVhbAorcHJvcGVydHkgcmlnaHRzLiBUaGlzIGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIHRoZSByaWdodCB0bworbW9kaWZ5LCBtYWtlIGF2YWlsYWJsZSBvciBwdWJsaWMsIHJlbnQgb3V0LCBsZWFzZSwgbGVuZCBvciBvdGhlcndpc2UKK2Rpc3RyaWJ1dGUgdGhlIFByb2R1Y3QuIFRoaXMgZG9lcyBub3QgYXBwbHkgYXMgZmFyIGFzIGFwcGxpY2FibGUgbGF3CittYXkgcmVxdWlyZSBvdGhlcndpc2Ugb3IgaWYgT3JhY2xlIGdyYW50cyB5b3UgYWRkaXRpb25hbCByaWdodHMgb2YgdXNlCitpbiBhIHNlcGFyYXRlIGFncmVlbWVudCBpbiB3cml0aW5nLgorCisoMikgWW91IG1heSBub3QgZG8gYW55IG9mIHRoZSBmb2xsb3dpbmc6IChhKSBtb2RpZnkgdGhlIFByb2R1Y3QuIEhvd2V2ZXIKK2lmIHRoZSBkb2N1bWVudGF0aW9uIGFjY29tcGFueWluZyBQcm9kdWN0IGxpc3RzIHNwZWNpZmljIHBvcnRpb25zIG9mCitQcm9kdWN0LCBzdWNoIGFzIGhlYWRlciBmaWxlcywgY2xhc3MgbGlicmFyaWVzLCByZWZlcmVuY2Ugc291cmNlIGNvZGUsCithbmQvb3IgcmVkaXN0cmlidXRhYmxlIGZpbGVzLCB0aGF0IG1heSBiZSBoYW5kbGVkIGRpZmZlcmVudGx5LCB5b3UgbWF5CitkbyBzbyBvbmx5IGFzIHByb3ZpZGVkIGluIHRoZSBkb2N1bWVudGF0aW9uOyAoYikgcmVudCwgbGVhc2UsIGxlbmQgb3IKK2VuY3VtYmVyIHRoZSBQcm9kdWN0OyAoYykgcmVtb3ZlIG9yIGFsdGVyIGFueSBwcm9wcmlldGFyeSBsZWdlbmRzIG9yCitub3RpY2VzIGNvbnRhaW5lZCBpbiB0aGUgUHJvZHVjdDsgb3IgKGQpIGRlY29tcGlsZSwgb3IgcmV2ZXJzZSBlbmdpbmVlcgordGhlIFByb2R1Y3QgKHVubGVzcyBlbmZvcmNlbWVudCBvZiB0aGlzIHJlc3RyaWN0aW9ucyBpcyBwcm9oaWJpdGVkIGJ5CithcHBsaWNhYmxlIGxhdykuCisKKygzKSBUaGUgUHJvZHVjdCBpcyBub3QgZGVzaWduZWQsIGxpY2Vuc2VkIG9yIGludGVuZGVkIGZvciB1c2UgaW4gdGhlCitkZXNpZ24sIGNvbnN0cnVjdGlvbiwgb3BlcmF0aW9uIG9yIG1haW50ZW5hbmNlIG9mIGFueSBudWNsZWFyIGZhY2lsaXR5CithbmQgT3JhY2xlIGFuZCBpdHMgbGljZW5zb3JzIGRpc2NsYWltIGFueSBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkKK29mIGZpdG5lc3MgZm9yIHN1Y2ggdXNlcy4KKworKDQpIE5vIHJpZ2h0LCB0aXRsZSBvciBpbnRlcmVzdCBpbiBvciB0byBhbnkgdHJhZGVtYXJrLCBzZXJ2aWNlIG1hcmssIGxvZ28KK29yIHRyYWRlIG5hbWUgb2YgT3JhY2xlIG9yIGl0cyBsaWNlbnNvcnMgaXMgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudC4KKworNCBURVJNSU5BVElPTi4gVGhlIEFncmVlbWVudCBpcyBlZmZlY3RpdmUgb24gdGhlIERhdGUgeW91IHJlY2VpdmUgdGhlCitQcm9kdWN0IGFuZCByZW1haW5zIGVmZmVjdGl2ZSB1bnRpbCB0ZXJtaW5hdGVkLiBZb3VyIHJpZ2h0cyB1bmRlciB0aGlzCitBZ3JlZW1lbnQgd2lsbCB0ZXJtaW5hdGUgaW1tZWRpYXRlbHkgd2l0aG91dCBub3RpY2UgZnJvbSBPcmFjbGUgaWYgeW91CittYXRlcmlhbGx5IGJyZWFjaCBpdCBvciB0YWtlIGFueSBhY3Rpb24gaW4gZGVyb2dhdGlvbiBvZiBPcmFjbGUncyBhbmQvb3IKK2l0cyBsaWNlbnNvcnMnIHJpZ2h0cyB0byBQcm9kdWN0LiBPcmFjbGUgbWF5IHRlcm1pbmF0ZSB0aGlzIEFncmVlbWVudAorc2hvdWxkIGFueSBQcm9kdWN0IGJlY29tZSwgb3IgaW4gT3JhY2xlJ3MgcmVhc29uYWJsZSBvcGluaW9uIGxpa2VseSB0bworYmVjb21lLCB0aGUgc3ViamVjdCBvZiBhIGNsYWltIG9mIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQgb3IKK3RyYWRlIHNlY3JldCBtaXNhcHByb3ByaWF0aW9uLiBVcG9uIHRlcm1pbmF0aW9uLCB5b3Ugd2lsbCBjZWFzZSB1c2Ugb2YsCithbmQgZGVzdHJveSwgUHJvZHVjdCBhbmQgY29uZmlybSBjb21wbGlhbmNlIGluIHdyaXRpbmcgdG8gT3JhY2xlLiBTZWN0aW9ucworMy05LCBpbmNsdXNpdmUsIHdpbGwgc3Vydml2ZSB0ZXJtaW5hdGlvbiBvZiB0aGUgQWdyZWVtZW50LgorCis1IERJU0NMQUlNRVIgT0YgV0FSUkFOVFkuIFRPIFRIRSBFWFRFTlQgTk9UIFBST0hJQklURUQgQlkgQVBQTElDQUJMRQorTEFXLCBPUkFDTEUgUFJPVklERVMgVEhFIFBST0RVQ1QgIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUgorTk9OLUlORlJJTkdFTUVOVCwgRVhDRVBUIFRPIFRIRSBFWFRFTlQgVEhBVCBUSEVTRSBESVNDTEFJTUVSUyBBUkUgSEVMRCBUTworQkUgTEVHQUxMWSBJTlZBTElELiBUaGUgZW50aXJlIHJpc2sgYXMgdG8gdGhlIHF1YWxpdHkgYW5kIHBlcmZvcm1hbmNlIG9mCit0aGUgUHJvZHVjdCBpcyB3aXRoIHlvdS4gU2hvdWxkIGl0IHByb3ZlIGRlZmVjdGl2ZSwgeW91IGFzc3VtZSB0aGUgY29zdAorb2YgYWxsIG5lY2Vzc2FyeSBzZXJ2aWNpbmcsIHJlcGFpciwgb3IgY29ycmVjdGlvbi4gSW4gYWRkaXRpb24sIE9yYWNsZQorc2hhbGwgYmUgYWxsb3dlZCB0byBwcm92aWRlIHVwZGF0ZXMgdG8gdGhlIFByb2R1Y3QgaW4gdXJnZW50IGNhc2VzLiBZb3UKK2FyZSB0aGVuIG9ibGlnZWQgdG8gaW5zdGFsbCBzdWNoIHVwZGF0ZXMuIFN1Y2ggYW4gdXJnZW50IGNhc2UgaW5jbHVkZXMsCitidXQgaXMgbm90IGxpbWl0ZWQgdG8sIGEgY2xhaW0gb2YgcmlnaHRzIHRvIHRoZSBQcm9kdWN0IGJ5IGEgdGhpcmQgcGFydHkuCisKKzYgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuIFRPIFRIRSBFWFRFTlQgTk9UIFBST0hJQklURUQgQlkgQVBQTElDQUJMRSBMQVcsCitJTiBOTyBFVkVOVCBXSUxMIE9SQUNMRSBPUiBJVFMgTElDRU5TT1JTIEJFIExJQUJMRSBGT1IgQU5ZIExPU1QgUkVWRU5VRSwKK1BST0ZJVCBPUiBEQVRBLCBPUiBGT1IgU1BFQ0lBTCwgSU5ESVJFQ1QsIENPTlNFUVVFTlRJQUwsIElOQ0lERU5UQUwgT1IKK1BVTklUSVZFIERBTUFHRVMsIEhPV0VWRVIgQ0FVU0VEIFJFR0FSRExFU1MgT0YgVEhFIFRIRU9SWSBPRiBMSUFCSUxJVFksCitBUklTSU5HIE9VVCBPRiBPUiBSRUxBVEVEIFRPIFRIRSBVU0UgT0YgT1IgSU5BQklMSVRZIFRPIFVTRSBQUk9EVUNULAorRVZFTiBJRiBPUkFDTEUgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBJbgorbm8gZXZlbnQgd2lsbCBPcmFjbGUncyBsaWFiaWxpdHkgdG8geW91LCB3aGV0aGVyIGluIGNvbnRyYWN0LCB0b3J0CisoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBvciBvdGhlcndpc2UsIGV4Y2VlZCB0aGUgYW1vdW50IHBhaWQgYnkgeW91IGZvcgorUHJvZHVjdCB1bmRlciB0aGlzIEFncmVlbWVudC4gU29tZSBzdGF0ZXMgZG8gbm90IGFsbG93IHRoZSBleGNsdXNpb24gb2YKK2luY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzbyBzb21lIG9mIHRoZSB0ZXJtcyBhYm92ZSBtYXkgbm90CitiZSBhcHBsaWNhYmxlIHRvIHlvdS4KKworNyBUSElSRCBQQVJUWSBDT0RFLiBQb3J0aW9ucyBvZiBQcm9kdWN0IG1heSBiZSBwcm92aWRlZCB3aXRoIG5vdGljZXMgYW5kCitvcGVuIHNvdXJjZSBsaWNlbnNlcyBmcm9tIGNvbW11bml0aWVzIGFuZCB0aGlyZCBwYXJ0aWVzIHRoYXQgZ292ZXJuIHRoZQordXNlIG9mIHRob3NlIHBvcnRpb25zLCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgaGVyZXVuZGVyIGRvIG5vdCBhbHRlcgorYW55IHJpZ2h0cyBhbmQgb2JsaWdhdGlvbnMgWW91IG1heSBoYXZlIHVuZGVyIHN1Y2ggb3BlbiBzb3VyY2UgbGljZW5zZXMsCitob3dldmVyLCB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50eSBhbmQgbGltaXRhdGlvbiBvZiBsaWFiaWxpdHkgcHJvdmlzaW9ucworaW4gdGhpcyBBZ3JlZW1lbnQgd2lsbCBhcHBseSB0byBhbGwgdGhlIFByb2R1Y3QuCisKKzggRVhQT1JUIFJFR1VMQVRJT05TLiBBbGwgUHJvZHVjdCwgZG9jdW1lbnRzLCB0ZWNobmljYWwgZGF0YSwgYW5kIGFueQorb3RoZXIgbWF0ZXJpYWxzIGRlbGl2ZXJlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgc3ViamVjdCB0byBVLlMuIGV4cG9ydAorY29udHJvbCBsYXdzIGFuZCBtYXkgYmUgc3ViamVjdCB0byBleHBvcnQgb3IgaW1wb3J0IHJlZ3VsYXRpb25zIGluIG90aGVyCitjb3VudHJpZXMuIFlvdSBhZ3JlZSB0byBjb21wbHkgc3RyaWN0bHkgd2l0aCB0aGVzZSBsYXdzIGFuZCByZWd1bGF0aW9ucworYW5kIGFja25vd2xlZGdlIHRoYXQgeW91IGhhdmUgdGhlIHJlc3BvbnNpYmlsaXR5IHRvIG9idGFpbiBhbnkgbGljZW5zZXMKK3RvIGV4cG9ydCwgcmUtZXhwb3J0LCBvciBpbXBvcnQgYXMgbWF5IGJlIHJlcXVpcmVkIGFmdGVyIGRlbGl2ZXJ5IHRvIHlvdS4KKworOSBVLlMuIEdPVkVSTk1FTlQgUkVTVFJJQ1RFRCBSSUdIVFMuIElmIFByb2R1Y3QgaXMgYmVpbmcgYWNxdWlyZWQKK2J5IG9yIG9uIGJlaGFsZiBvZiB0aGUgVS5TLiBHb3Zlcm5tZW50IG9yIGJ5IGEgVS5TLiBHb3Zlcm5tZW50IHByaW1lCitjb250cmFjdG9yIG9yIHN1YmNvbnRyYWN0b3IgKGF0IGFueSB0aWVyKSwgdGhlbiB0aGUgR292ZXJubWVudCdzIHJpZ2h0cworaW4gUHJvZHVjdCBhbmQgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gd2lsbCBiZSBvbmx5IGFzIHNldCBmb3J0aAoraW4gdGhpcyBBZ3JlZW1lbnQ7IHRoaXMgaXMgaW4gYWNjb3JkYW5jZSB3aXRoIDQ4IENGUiAyMjcuNzIwMSB0aHJvdWdoCisyMjcuNzIwMi00IChmb3IgRGVwYXJ0bWVudCBvZiBEZWZlbnNlIChET0QpIGFjcXVpc2l0aW9ucykgYW5kIHdpdGggNDgKK0NGUiAyLjEwMSBhbmQgMTIuMjEyIChmb3Igbm9uLURPRCBhY3F1aXNpdGlvbnMpLgorCisxMCBNSVNDRUxMQU5FT1VTLiBUaGlzIEFncmVlbWVudCBpcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHlvdQorYW5kIE9yYWNsZSByZWxhdGluZyB0byBpdHMgc3ViamVjdCBtYXR0ZXIuIEl0IHN1cGVyc2VkZXMgYWxsIHByaW9yIG9yCitjb250ZW1wb3JhbmVvdXMgb3JhbCBvciB3cml0dGVuIGNvbW11bmljYXRpb25zLCBwcm9wb3NhbHMsIHJlcHJlc2VudGF0aW9ucworYW5kIHdhcnJhbnRpZXMgYW5kIHByZXZhaWxzIG92ZXIgYW55IGNvbmZsaWN0aW5nIG9yIGFkZGl0aW9uYWwgdGVybXMKK29mIGFueSBxdW90ZSwgb3JkZXIsIGFja25vd2xlZGdtZW50LCBvciBvdGhlciBjb21tdW5pY2F0aW9uIGJldHdlZW4KK3RoZSBwYXJ0aWVzIHJlbGF0aW5nIHRvIGl0cyBzdWJqZWN0IG1hdHRlciBkdXJpbmcgdGhlIHRlcm0gb2YgdGhpcworQWdyZWVtZW50LiBObyBtb2RpZmljYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQgd2lsbCBiZSBiaW5kaW5nLCB1bmxlc3MgaW4KK3dyaXRpbmcgYW5kIHNpZ25lZCBieSBhbiBhdXRob3JpemVkIHJlcHJlc2VudGF0aXZlIG9mIGVhY2ggcGFydHkuIElmIGFueQorcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgdGhpcyBBZ3JlZW1lbnQKK3dpbGwgcmVtYWluIGluIGVmZmVjdCB3aXRoIHRoZSBwcm92aXNpb24gb21pdHRlZCwgdW5sZXNzIG9taXNzaW9uIHdvdWxkCitmcnVzdHJhdGUgdGhlIGludGVudCBvZiB0aGUgcGFydGllcywgaW4gd2hpY2ggY2FzZSB0aGlzIEFncmVlbWVudCB3aWxsCitpbW1lZGlhdGVseSB0ZXJtaW5hdGUuIENvdXJzZSBvZiBkZWFsaW5nIGFuZCBvdGhlciBzdGFuZGFyZCBidXNpbmVzcworY29uZGl0aW9ucyBvZiB0aGUgcGFydGllcyBvciB0aGUgaW5kdXN0cnkgc2hhbGwgbm90IGFwcGx5LiBUaGlzIEFncmVlbWVudAoraXMgZ292ZXJuZWQgYnkgdGhlIHN1YnN0YW50aXZlIGFuZCBwcm9jZWR1cmFsIGxhd3Mgb2YgQ2FsaWZvcm5pYSBhbmQgeW91CithbmQgT3JhY2xlIGFncmVlIHRvIHN1Ym1pdCB0byB0aGUgZXhjbHVzaXZlIGp1cmlzZGljdGlvbiBvZiwgYW5kIHZlbnVlCitpbiwgdGhlIGNvdXJ0cyBpbiBTYW4gRnJhbmNpc2NvLCBTYW4gTWF0ZW8sIG9yIFNhbnRhIENsYXJhIGNvdW50aWVzIGluCitDYWxpZm9ybmlhIGluIGFueSBkaXNwdXRlIGFyaXNpbmcgb3V0IG9mIG9yIHJlbGF0aW5nIHRvIHRoaXMgQWdyZWVtZW50LgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvUFlUSE9OIGIvbGljZW5zZXMvUFlUSE9OCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2NjdhYTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9QWVRIT04KQEAgLTAsMCArMSwxNjQgQEAKK0hJU1RPUlkgT0YgVEhFIFNPRlRXQVJFCis9PT09PT09PT09PT09PT09PT09PT09PQorCitQeXRob24gd2FzIGNyZWF0ZWQgaW4gdGhlIGVhcmx5IDE5OTBzIGJ5IEd1aWRvIHZhbiBSb3NzdW0gYXQgU3RpY2h0aW5nCitNYXRoZW1hdGlzY2ggQ2VudHJ1bSAoQ1dJKSBpbiB0aGUgTmV0aGVybGFuZHMgYXMgYSBzdWNjZXNzb3Igb2YgYQorbGFuZ3VhZ2UgY2FsbGVkIEFCQy4gIEd1aWRvIGlzIFB5dGhvbidzIHByaW5jaXBhbCBhdXRob3IsIGFsdGhvdWdoIGl0CitpbmNsdWRlcyBtYW55IGNvbnRyaWJ1dGlvbnMgZnJvbSBvdGhlcnMuICBUaGUgbGFzdCB2ZXJzaW9uIHJlbGVhc2VkCitmcm9tIENXSSB3YXMgUHl0aG9uIDEuMi4gIEluIDE5OTUsIEd1aWRvIGNvbnRpbnVlZCBoaXMgd29yayBvbiBQeXRob24KK2F0IHRoZSBDb3Jwb3JhdGlvbiBmb3IgTmF0aW9uYWwgUmVzZWFyY2ggSW5pdGlhdGl2ZXMgKENOUkkpIGluIFJlc3RvbiwKK1ZpcmdpbmlhIHdoZXJlIGhlIHJlbGVhc2VkIHNldmVyYWwgdmVyc2lvbnMgb2YgdGhlIHNvZnR3YXJlLiAgUHl0aG9uCisxLjYgd2FzIHRoZSBsYXN0IG9mIHRoZSB2ZXJzaW9ucyByZWxlYXNlZCBieSBDTlJJLiAgSW4gMjAwMCwgR3VpZG8gYW5kCit0aGUgUHl0aG9uIGNvcmUgZGV2ZWxvcGVtZW50IHRlYW0gbW92ZWQgdG8gQmVPcGVuLmNvbSB0byBmb3JtIHRoZQorQmVPcGVuIFB5dGhvbkxhYnMgdGVhbSAod3d3LnB5dGhvbmxhYnMuY29tKS4gIFB5dGhvbiAyLjAgaXMgdGhlIGZpcnN0CityZWxlYXNlIGZyb20gUHl0aG9uTGFicy4gIFRoYW5rcyB0byB0aGUgbWFueSBvdXRzaWRlIHZvbHVudGVlcnMgd2hvCitoYXZlIHdvcmtlZCB1bmRlciBHdWlkbydzIGRpcmVjdGlvbiB0byBtYWtlIHRoaXMgcmVsZWFzZSBwb3NzaWJsZS4KKworCisKK0JFT1BFTi5DT00gVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIFBZVEhPTiAyLjAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworQkVPUEVOIFBZVEhPTiBPUEVOIFNPVVJDRSBMSUNFTlNFIEFHUkVFTUVOVCBWRVJTSU9OIDEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzEuIFRoaXMgTElDRU5TRSBBR1JFRU1FTlQgaXMgYmV0d2VlbiBCZU9wZW4uY29tICgiQmVPcGVuIiksIGhhdmluZyBhbgorb2ZmaWNlIGF0IDE2MCBTYXJhdG9nYSBBdmVudWUsIFNhbnRhIENsYXJhLCBDQSA5NTA1MSwgYW5kIHRoZQorSW5kaXZpZHVhbCBvciBPcmdhbml6YXRpb24gKCJMaWNlbnNlZSIpIGFjY2Vzc2luZyBhbmQgb3RoZXJ3aXNlIHVzaW5nCit0aGlzIHNvZnR3YXJlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybSBhbmQgaXRzIGFzc29jaWF0ZWQKK2RvY3VtZW50YXRpb24gKCJ0aGUgU29mdHdhcmUiKS4KKworMi4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBCZU9wZW4gUHl0aG9uIExpY2Vuc2UKK0FncmVlbWVudCwgQmVPcGVuIGhlcmVieSBncmFudHMgTGljZW5zZWUgYSBub24tZXhjbHVzaXZlLAorcm95YWx0eS1mcmVlLCB3b3JsZC13aWRlIGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBhbmFseXplLCB0ZXN0LCBwZXJmb3JtCithbmQvb3IgZGlzcGxheSBwdWJsaWNseSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzLCBkaXN0cmlidXRlLCBhbmQKK290aGVyd2lzZSB1c2UgdGhlIFNvZnR3YXJlIGFsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlIHZlcnNpb24sCitwcm92aWRlZCwgaG93ZXZlciwgdGhhdCB0aGUgQmVPcGVuIFB5dGhvbiBMaWNlbnNlIGlzIHJldGFpbmVkIGluIHRoZQorU29mdHdhcmUsIGFsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlIHZlcnNpb24gcHJlcGFyZWQgYnkgTGljZW5zZWUuCisKKzMuIEJlT3BlbiBpcyBtYWtpbmcgdGhlIFNvZnR3YXJlIGF2YWlsYWJsZSB0byBMaWNlbnNlZSBvbiBhbiAiQVMgSVMiCitiYXNpcy4gIEJFT1BFTiBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUywgRVhQUkVTUyBPUgorSU1QTElFRC4gIEJZIFdBWSBPRiBFWEFNUExFLCBCVVQgTk9UIExJTUlUQVRJT04sIEJFT1BFTiBNQUtFUyBOTyBBTkQKK0RJU0NMQUlNUyBBTlkgUkVQUkVTRU5UQVRJT04gT1IgV0FSUkFOVFkgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MKK0ZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFIE9SIFRIQVQgVEhFIFVTRSBPRiBUSEUgU09GVFdBUkUgV0lMTCBOT1QKK0lORlJJTkdFIEFOWSBUSElSRCBQQVJUWSBSSUdIVFMuCisKKzQuIEJFT1BFTiBTSEFMTCBOT1QgQkUgTElBQkxFIFRPIExJQ0VOU0VFIE9SIEFOWSBPVEhFUiBVU0VSUyBPRiBUSEUKK1NPRlRXQVJFIEZPUiBBTlkgSU5DSURFTlRBTCwgU1BFQ0lBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIExPU1MKK0FTIEEgUkVTVUxUIE9GIFVTSU5HLCBNT0RJRllJTkcgT1IgRElTVFJJQlVUSU5HIFRIRSBTT0ZUV0FSRSwgT1IgQU5ZCitERVJJVkFUSVZFIFRIRVJFT0YsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgVEhFUkVPRi4KKworNS4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHVwb24gYSBtYXRlcmlhbAorYnJlYWNoIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4KKworNi4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBzaGFsbCBiZSBnb3Zlcm5lZCBieSBhbmQgaW50ZXJwcmV0ZWQgaW4gYWxsCityZXNwZWN0cyBieSB0aGUgbGF3IG9mIHRoZSBTdGF0ZSBvZiBDYWxpZm9ybmlhLCBleGNsdWRpbmcgY29uZmxpY3Qgb2YKK2xhdyBwcm92aXNpb25zLiAgTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIGJlIGRlZW1lZCB0bworY3JlYXRlIGFueSByZWxhdGlvbnNoaXAgb2YgYWdlbmN5LCBwYXJ0bmVyc2hpcCwgb3Igam9pbnQgdmVudHVyZQorYmV0d2VlbiBCZU9wZW4gYW5kIExpY2Vuc2VlLiAgVGhpcyBMaWNlbnNlIEFncmVlbWVudCBkb2VzIG5vdCBncmFudAorcGVybWlzc2lvbiB0byB1c2UgQmVPcGVuIHRyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZXMgaW4gYSB0cmFkZW1hcmsKK3NlbnNlIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBvciBzZXJ2aWNlcyBvZiBMaWNlbnNlZSwgb3IgYW55Cit0aGlyZCBwYXJ0eS4gIEFzIGFuIGV4Y2VwdGlvbiwgdGhlICJCZU9wZW4gUHl0aG9uIiBsb2dvcyBhdmFpbGFibGUgYXQKK2h0dHA6Ly93d3cucHl0aG9ubGFicy5jb20vbG9nb3MuaHRtbCBtYXkgYmUgdXNlZCBhY2NvcmRpbmcgdG8gdGhlCitwZXJtaXNzaW9ucyBncmFudGVkIG9uIHRoYXQgd2ViIHBhZ2UuCisKKzcuIEJ5IGNvcHlpbmcsIGluc3RhbGxpbmcgb3Igb3RoZXJ3aXNlIHVzaW5nIHRoZSBzb2Z0d2FyZSwgTGljZW5zZWUKK2FncmVlcyB0byBiZSBib3VuZCBieSB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlCitBZ3JlZW1lbnQuCisKKworQ05SSSBPUEVOIFNPVVJDRSBMSUNFTlNFIEFHUkVFTUVOVAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitQeXRob24gMS42IENOUkkgT1BFTiBTT1VSQ0UgTElDRU5TRSBBR1JFRU1FTlQKKworSU1QT1JUQU5UOiBQTEVBU0UgUkVBRCBUSEUgRk9MTE9XSU5HIEFHUkVFTUVOVCBDQVJFRlVMTFkuIEJZIENMSUNLSU5HCitPTiAiQUNDRVBUIiBXSEVSRSBJTkRJQ0FURUQgQkVMT1csIE9SIEJZIENPUFlJTkcsIElOU1RBTExJTkcgT1IKK09USEVSV0lTRSBVU0lORyBQWVRIT04gMS42IFNPRlRXQVJFLCBZT1UgQVJFIERFRU1FRCBUTyBIQVZFIEFHUkVFRCBUTworVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgTElDRU5TRSBBR1JFRU1FTlQuCisKKzEuIFRoaXMgTElDRU5TRSBBR1JFRU1FTlQgaXMgYmV0d2VlbiB0aGUgQ29ycG9yYXRpb24gZm9yIE5hdGlvbmFsCitSZXNlYXJjaCBJbml0aWF0aXZlcywgaGF2aW5nIGFuIG9mZmljZSBhdCAxODk1IFByZXN0b24gV2hpdGUgRHJpdmUsCitSZXN0b24sIFZBIDIwMTkxICgiQ05SSSIpLCBhbmQgdGhlIEluZGl2aWR1YWwgb3IgT3JnYW5pemF0aW9uCisoIkxpY2Vuc2VlIikgYWNjZXNzaW5nIGFuZCBvdGhlcndpc2UgdXNpbmcgUHl0aG9uIDEuNiBzb2Z0d2FyZSBpbgorc291cmNlIG9yIGJpbmFyeSBmb3JtIGFuZCBpdHMgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uLCBhcyByZWxlYXNlZCBhdAordGhlIHd3dy5weXRob24ub3JnIEludGVybmV0IHNpdGUgb24gU2VwdGVtYmVyIDUsIDIwMDAgKCJQeXRob24gMS42IikuCisKKzIuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQsIENOUkkKK2hlcmVieSBncmFudHMgTGljZW5zZWUgYSBub25leGNsdXNpdmUsIHJveWFsdHktZnJlZSwgd29ybGQtd2lkZQorbGljZW5zZSB0byByZXByb2R1Y2UsIGFuYWx5emUsIHRlc3QsIHBlcmZvcm0gYW5kL29yIGRpc3BsYXkgcHVibGljbHksCitwcmVwYXJlIGRlcml2YXRpdmUgd29ya3MsIGRpc3RyaWJ1dGUsIGFuZCBvdGhlcndpc2UgdXNlIFB5dGhvbiAxLjYKK2Fsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlIHZlcnNpb24sIHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IENOUkkncworTGljZW5zZSBBZ3JlZW1lbnQgYW5kIENOUkkncyBub3RpY2Ugb2YgY29weXJpZ2h0LCBpLmUuLCAiQ29weXJpZ2h0IChjKQorMTk5NS0yMDAwIENvcnBvcmF0aW9uIGZvciBOYXRpb25hbCBSZXNlYXJjaCBJbml0aWF0aXZlczsgQWxsIFJpZ2h0cworUmVzZXJ2ZWQiIGFyZSByZXRhaW5lZCBpbiBQeXRob24gMS42IGFsb25lIG9yIGluIGFueSBkZXJpdmF0aXZlCit2ZXJzaW9uIHByZXBhcmVkIGJ5CisKK0xpY2Vuc2VlLiBBbHRlcm5hdGVseSwgaW4gbGlldSBvZiBDTlJJJ3MgTGljZW5zZSBBZ3JlZW1lbnQsIExpY2Vuc2VlCittYXkgc3Vic3RpdHV0ZSB0aGUgZm9sbG93aW5nIHRleHQgKG9taXR0aW5nIHRoZSBxdW90ZXMpOiAiUHl0aG9uIDEuNgoraXMgbWFkZSBhdmFpbGFibGUgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgaW4gQ05SSSdzCitMaWNlbnNlIEFncmVlbWVudC4gVGhpcyBBZ3JlZW1lbnQgdG9nZXRoZXIgd2l0aCBQeXRob24gMS42IG1heSBiZQorbG9jYXRlZCBvbiB0aGUgSW50ZXJuZXQgdXNpbmcgdGhlIGZvbGxvd2luZyB1bmlxdWUsIHBlcnNpc3RlbnQKK2lkZW50aWZpZXIgKGtub3duIGFzIGEgaGFuZGxlKTogMTg5NS4yMi8xMDEyLiBUaGlzIEFncmVlbWVudCBtYXkgYWxzbworYmUgb2J0YWluZWQgZnJvbSBhIHByb3h5IHNlcnZlciBvbiB0aGUgSW50ZXJuZXQgdXNpbmcgdGhlIGZvbGxvd2luZworVVJMOiBodHRwOi8vaGRsLmhhbmRsZS5uZXQvMTg5NS4yMi8xMDEyIi4KKworMy4gSW4gdGhlIGV2ZW50IExpY2Vuc2VlIHByZXBhcmVzIGEgZGVyaXZhdGl2ZSB3b3JrIHRoYXQgaXMgYmFzZWQgb24KK29yIGluY29ycG9yYXRlcyBQeXRob24gMS42IG9yIGFueSBwYXJ0IHRoZXJlb2YsIGFuZCB3YW50cyB0byBtYWtlIHRoZQorZGVyaXZhdGl2ZSB3b3JrIGF2YWlsYWJsZSB0byBvdGhlcnMgYXMgcHJvdmlkZWQgaGVyZWluLCB0aGVuIExpY2Vuc2VlCitoZXJlYnkgYWdyZWVzIHRvIGluY2x1ZGUgaW4gYW55IHN1Y2ggd29yayBhIGJyaWVmIHN1bW1hcnkgb2YgdGhlCitjaGFuZ2VzIG1hZGUgdG8gUHl0aG9uIDEuNi4KKworNC4gQ05SSSBpcyBtYWtpbmcgUHl0aG9uIDEuNiBhdmFpbGFibGUgdG8gTGljZW5zZWUgb24gYW4gIkFTIElTIgorYmFzaXMuIENOUkkgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IKK0lNUExJRUQuIEJZIFdBWSBPRiBFWEFNUExFLCBCVVQgTk9UIExJTUlUQVRJT04sIENOUkkgTUFLRVMgTk8gQU5ECitESVNDTEFJTVMgQU5ZIFJFUFJFU0VOVEFUSU9OIE9SIFdBUlJBTlRZIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTCitGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBUSEFUIFRIRSBVU0UgT0YgUFlUSE9OIDEuNiBXSUxMIE5PVAorSU5GUklOR0UgQU5ZIFRISVJEIFBBUlRZIFJJR0hUUy4KKworNS4gQ05SSSBTSEFMTCBOT1QgQkUgTElBQkxFIFRPIExJQ0VOU0VFIE9SIEFOWSBPVEhFUiBVU0VSUyBPRiBQWVRIT04KKzEuNiBGT1IgQU5ZIElOQ0lERU5UQUwsIFNQRUNJQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBMT1NTIEFTIEEKK1JFU1VMVCBPRiBNT0RJRllJTkcsIERJU1RSSUJVVElORywgT1IgT1RIRVJXSVNFIFVTSU5HIFBZVEhPTiAxLjYsIE9SCitBTlkgREVSSVZBVElWRSBUSEVSRU9GLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIFRIRVJFT0YuCisKKzYuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB1cG9uIGEgbWF0ZXJpYWwKK2JyZWFjaCBvZiBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuCisKKzcuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgc2hhbGwgYmUgZ292ZXJuZWQgYnkgYW5kIGludGVycHJldGVkIGluIGFsbAorcmVzcGVjdHMgYnkgdGhlIGxhdyBvZiB0aGUgU3RhdGUgb2YgVmlyZ2luaWEsIGV4Y2x1ZGluZyBjb25mbGljdCBvZgorbGF3IHByb3Zpc2lvbnMuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIEFncmVlbWVudCBzaGFsbCBiZSBkZWVtZWQgdG8KK2NyZWF0ZSBhbnkgcmVsYXRpb25zaGlwIG9mIGFnZW5jeSwgcGFydG5lcnNoaXAsIG9yIGpvaW50IHZlbnR1cmUKK2JldHdlZW4gQ05SSSBhbmQgTGljZW5zZWUuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgZG9lcyBub3QgZ3JhbnQKK3Blcm1pc3Npb24gdG8gdXNlIENOUkkgdHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lIGluIGEgdHJhZGVtYXJrIHNlbnNlCit0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgb3Igc2VydmljZXMgb2YgTGljZW5zZWUsIG9yIGFueSB0aGlyZAorcGFydHkuCisKKzguIEJ5IGNsaWNraW5nIG9uIHRoZSAiQUNDRVBUIiBidXR0b24gd2hlcmUgaW5kaWNhdGVkLCBvciBieSBjb3B5aW5nLAoraW5zdGFsbGluZyBvciBvdGhlcndpc2UgdXNpbmcgUHl0aG9uIDEuNiwgTGljZW5zZWUgYWdyZWVzIHRvIGJlIGJvdW5kCitieSB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4KKworQUNDRVBUCisKKworQ1dJIFBFUk1JU1NJT05TIFNUQVRFTUVOVCBBTkQgRElTQ0xBSU1FUgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitDb3B5cmlnaHQgKGMpIDE5OTEgLSAxOTk1LCBTdGljaHRpbmcgTWF0aGVtYXRpc2NoIENlbnRydW0gQW1zdGVyZGFtLAorVGhlIE5ldGhlcmxhbmRzLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCitkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCitwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0Citib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4KK3N1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kIHRoYXQgdGhlIG5hbWUgb2YgU3RpY2h0aW5nIE1hdGhlbWF0aXNjaAorQ2VudHJ1bSBvciBDV0kgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcgdG8KK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgorcGVybWlzc2lvbi4KKworU1RJQ0hUSU5HIE1BVEhFTUFUSVNDSCBDRU5UUlVNIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTworVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORAorRklUTkVTUywgSU4gTk8gRVZFTlQgU0hBTEwgU1RJQ0hUSU5HIE1BVEhFTUFUSVNDSCBDRU5UUlVNIEJFIExJQUJMRQorRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKK1dIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKK09GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9QcmluY2V0b24gYi9saWNlbnNlcy9QcmluY2V0b24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NmYmJiZgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL1ByaW5jZXRvbgpAQCAtMCwwICsxLDI5IEBACitUaGlzIHNvZnR3YXJlIGFuZCBkYXRhYmFzZSBpcyBiZWluZyBwcm92aWRlZCB0byB5b3UsIHRoZSBMSUNFTlNFRSwgYnkgIAorUHJpbmNldG9uIFVuaXZlcnNpdHkgdW5kZXIgdGhlIGZvbGxvd2luZyBsaWNlbnNlLiAgQnkgb2J0YWluaW5nLCB1c2luZyAgCithbmQvb3IgY29weWluZyB0aGlzIHNvZnR3YXJlIGFuZCBkYXRhYmFzZSwgeW91IGFncmVlIHRoYXQgeW91IGhhdmUgIAorcmVhZCwgdW5kZXJzdG9vZCwgYW5kIHdpbGwgY29tcGx5IHdpdGggdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuOiAgCisgIAorUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCAgCitkYXRhYmFzZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBvciAgCityb3lhbHR5IGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHlvdSBhZ3JlZSB0byBjb21wbHkgd2l0aCAgCit0aGUgZm9sbG93aW5nIGNvcHlyaWdodCBub3RpY2UgYW5kIHN0YXRlbWVudHMsIGluY2x1ZGluZyB0aGUgZGlzY2xhaW1lciwgIAorYW5kIHRoYXQgdGhlIHNhbWUgYXBwZWFyIG9uIEFMTCBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBkYXRhYmFzZSBhbmQgIAorZG9jdW1lbnRhdGlvbiwgaW5jbHVkaW5nIG1vZGlmaWNhdGlvbnMgdGhhdCB5b3UgbWFrZSBmb3IgaW50ZXJuYWwgIAordXNlIG9yIGZvciBkaXN0cmlidXRpb24uICAKKworQ29weXJpZ2h0IDxZRUFSPiBieSA8T1dORVI+LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gCisKK1RISVMgU09GVFdBUkUgQU5EIERBVEFCQVNFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFBSSU5DRVRPTiAgCitVTklWRVJTSVRZIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLCBFWFBSRVNTIE9SICAKK0lNUExJRUQuICBCWSBXQVkgT0YgRVhBTVBMRSwgQlVUIE5PVCBMSU1JVEFUSU9OLCBQUklOQ0VUT04gIAorVU5JVkVSU0lUWSBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBPRiBNRVJDSEFOVC0gIAorQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFIE9SIFRIQVQgVEhFIFVTRSAgCitPRiBUSEUgTElDRU5TRUQgU09GVFdBUkUsIERBVEFCQVNFIE9SIERPQ1VNRU5UQVRJT04gV0lMTCBOT1QgIAorSU5GUklOR0UgQU5ZIFRISVJEIFBBUlRZIFBBVEVOVFMsIENPUFlSSUdIVFMsIFRSQURFTUFSS1MgT1IgIAorT1RIRVIgUklHSFRTLiAgCisgIAorVGhlIG5hbWUgb2YgUHJpbmNldG9uIFVuaXZlcnNpdHkgb3IgUHJpbmNldG9uIG1heSBub3QgYmUgdXNlZCBpbiAgCithZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlICAKK2FuZC9vciBkYXRhYmFzZS4gIFRpdGxlIHRvIGNvcHlyaWdodCBpbiB0aGlzIHNvZnR3YXJlLCBkYXRhYmFzZSBhbmQgIAorYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBzaGFsbCBhdCBhbGwgdGltZXMgcmVtYWluIHdpdGggIAorUHJpbmNldG9uIFVuaXZlcnNpdHkgYW5kIExJQ0VOU0VFIGFncmVlcyB0byBwcmVzZXJ2ZSBzYW1lLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvUTJFVUxBIGIvbGljZW5zZXMvUTJFVUxBCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZTcxYjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9RMkVVTEEKQEAgLTAsMCArMSw4MiBAQAorCQkgTElNSVRFRCBVU0UgU09GVFdBUkUgTElDRU5TRSBBR1JFRU1FTlQKKworICAgICBUaGlzIExpbWl0ZWQgVXNlIFNvZnR3YXJlIExpY2Vuc2UgQWdyZWVtZW50ICh0aGUgIkFncmVlbWVudCIpIGlzIGEgbGVnYWwgYWdyZWVtZW50IGJldHdlZW4geW91LCB0aGUgZW5kLXVzZXIsIElkIFNvZnR3YXJlLCBJbmMuICgiSUQiKSBhbmQgQWN0aXZpc2lvbiwgSW5jLiAoIkFjdGl2aXNpb24iKS4gIEJ5IGNvbnRpbnVpbmcgdGhlIGluc3RhbGxhdGlvbiBvZiB0aGlzIGdhbWUgcHJvZ3JhbSBlbnRpdGxlZCBRVUFLRSBJSSwgYnkgbG9hZGluZyBvciBydW5uaW5nIHRoZSBnYW1lIHByb2dyYW0sIG9yIGJ5IHBsYWNpbmcgb3IgY29weWluZyB0aGUgZ2FtZSBwcm9ncmFtIG9udG8geW91ciBjb21wdXRlciBoYXJkIGRyaXZlLCBjb21wdXRlciBSQU0gb3Igb3RoZXIgc3RvcmFnZSwgeW91IGFyZSBhZ3JlZWluZyB0byBiZSBib3VuZCBieSB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQuCisKKyAgICAgMS4gIEdyYW50IG9mIExpY2Vuc2UgZm9yIFNvZnR3YXJlLiAgU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQsIElEIGdyYW50cyB0byB5b3UgdGhlIG5vbi1leGNsdXNpdmUgYW5kIGxpbWl0ZWQgcmlnaHQgdG8gdXNlIHRoZSBzb2Z0d2FyZSBnYW1lIHByb2dyYW0gZW50aXRsZWQgUVVBS0UgSUkgaW4gZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBmb3JtIG9ubHkgKHRoZSAiU29mdHdhcmUiKSBmb3IgcmVjcmVhdGlvbmFsIHB1cnBvc2VzIG9ubHkuICBUaGUgdGVybSAiU29mdHdhcmUiIGluY2x1ZGVzIGFsbCBlbGVtZW50cyBvZiB0aGUgU29mdHdhcmUgc3VjaCBhcyBkYXRhIGZpbGVzLCBpbWFnZXMgYXBwZWFyaW5nIGluIHRoZSBTb2Z0d2FyZSBhbmQgc2NyZWVuIGRpc3BsYXlzLiAgWW91IGFyZSBub3QgcmVjZWl2aW5nIGFueSBvd25lcnNoaXAgb3IgcHJvcHJpZXRhcnkgcmlnaHQsIHRpdGxlIG9yIGludGVyZXN0IGluIG9yIHRvIHRoZSBTb2Z0d2FyZSBvciB0aGUgY29weXJpZ2h0LCB0cmFkZW1hcmtzLCBvciBvdGhlciByaWdodHMgcmVsYXRlZCB0aGVyZXRvLiAgRm9yIHB1cnBvc2VzIG9mIHRoaXMgc2VjdGlvbiwgInVzZSIgbWVhbnMgbG9hZGluZyB0aGUgU29mdHdhcmUgaW50byBSQU0gYW5kL29yIG9udG8gY29tcHV0ZXIgaGFyZCBkcml2ZSwgYXMgd2VsbCBhcyBpbnN0YWxsYXRpb24gb2YgdGhlIFNvZnR3YXJlIG9uIGEgaGFyZCBkaXNrIG9yIG90aGVyIHN0b3JhZ2UgZGV2aWNlLgorWW91IGFncmVlIHRoYXQgdGhlIFNvZnR3YXJlIHdpbGwgbm90IGJlIHNoaXBwZWQsIHRyYW5zZmVycmVkIG9yIGV4cG9ydGVkIGludG8gYW55IGNvdW50cnkgaW4gdmlvbGF0aW9uIG9mIHRoZSBVLlMuIEV4cG9ydCBBZG1pbmlzdHJhdGlvbiBBY3QgKG9yIGFueSBvdGhlciBsYXcgZ292ZXJuaW5nIHN1Y2ggbWF0dGVycykgYnkgeW91IG9yIGFueSBvbmUgYXQgeW91ciBkaXJlY3Rpb24gYW5kIHRoYXQgeW91IHdpbGwgbm90IHV0aWxpemUgYW5kIHdpbGwgbm90IGF1dGhvcml6ZSBhbnlvbmUgdG8gdXRpbGl6ZSwgaW4gYW55IG90aGVyIG1hbm5lciwgdGhlIFNvZnR3YXJlIGluIHZpb2xhdGlvbiBvZiBhbnkgYXBwbGljYWJsZSBsYXcuICBUaGUgU29mdHdhcmUgbWF5IG5vdCBiZSBleHBvcnRlZCBvciByZWV4cG9ydGVkIGludG8gKG9yIHRvIGEgbmF0aW9uYWwgb3IgcmVzaWRlbnQgb2YpIGFueSBjb3VudHJ5IHRvIHdoaWNoIHRoZSBVLlMuIGhhcyBlbWJhcmdvZWQgZ29vZHMgb3IgdG8gYW55b25lIG9yIGludG8gYW55IGNvdW50cnkgd2hvL3doaWNoIGFyZSBwcm9oaWJpdGVkLCBieSBhcHBsaWNhYmxlIGxhdywgZnJvbSByZWNlaXZpbmcgc3VjaCBwcm9wZXJ0eS4KKworICAgICAyLiAgQWRkaXRpb25hbCBMZXZlbHMuICBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCwgSUQgZ3JhbnRzIHRvIHlvdSB0aGUgbm9uLWV4Y2x1c2l2ZSBhbmQgbGltaXRlZCByaWdodCB0byBjcmVhdGUgYWRkaXRpb25hbCBsZXZlbHMgKHRoZSAiTGV2ZWxzIikgd2hpY2ggYXJlIG9wZXJhYmxlIHdpdGggdGhlIFNvZnR3YXJlLiAgWW91IG1heSBpbmNsdWRlIHdpdGhpbiB0aGUgTGV2ZWxzIGNlcnRhaW4gdGV4dHVyZXMgYW5kIG90aGVyIGltYWdlcyAodGhlICJJRCBJbWFnZXMiKSBmcm9tIHRoZSBTb2Z0d2FyZS4gIFlvdSBhZ3JlZSB0aGF0IHRoZSBMZXZlbHMgd2lsbCBub3QgYmUgc2hpcHBlZCwgdHJhbnNmZXJyZWQgb3IgZXhwb3J0ZWQgaW50byBhbnkgY291bnRyeSBpbiB2aW9sYXRpb24gb2YgdGhlIFUuUy4gRXhwb3J0IEFkbWluaXN0cmF0aW9uIEFjdCAob3IgYW55IG90aGVyIGxhdyBnb3Zlcm5pbmcgc3VjaCBtYXR0ZXJzKSBieSB5b3Ugb3IgYW55b25lIGF0IHlvdXIgZGlyZWN0aW9uIGFuZCB0aGF0IHlvdSB3aWxsIG5vdCB1dGlsaXplIGFuZCB3aWxsIG5vdCBhdXRob3JpemUgYW55b25lIHRvIHV0aWxpemUsIGluIGFueSBvdGhlciBtYW5uZXIsIHRoZSBMZXZlbHMgaW4gdmlvbGF0aW9uIG9mIGFueSBhcHBsaWNhYmxlIGxhdy4gIFRoZSBMZXZlbHMgbWF5IG5vdCBiZSBkb3dubG9hZGVkIG9yIG90aGVyd2lzZSBleHBvcnRlZCBvciByZS1leHBvcnRlZCBpbnRvIChvciB0byBhIG5hdGlvbmFsIG9yIHJlc2lkZW50IG9mKSBhbnkgY291bnRyeSB0byB3aGljaCB0aGUgVS5TLiBoYXMgZW1iYXJnb2VkIGdvb2RzIG9yIHRvIGFueW9uZSBvciBpbnRvIGFueSBjb3VudHJ5IHdoby93aGljaCBhcmUgcHJvaGliaXRlZCBieSBhcHBsaWNhYmxlIGxhdywgZnJvbSByZWNlaXZpbmcgc3VjaCBwcm9wZXJ0eS4KK1lvdSBzaGFsbCBub3QgcmVudCwgc2VsbCwgbGVhc2UsIGxlbmQsIG9mZmVyIG9uIGEgcGF5LXBlci1wbGF5IGJhc2lzIG9yIG90aGVyd2lzZSBjb21tZXJjaWFsbHkgZXhwbG9pdCBvciBjb21tZXJjaWFsbHkgZGlzdHJpYnV0ZSB0aGUgTGV2ZWxzLiAgWW91IGFyZSBvbmx5IHBlcm1pdHRlZCB0byBkaXN0cmlidXRlIGZvciBmcmVlLCB3aXRob3V0IGFueSBjb3N0IG9yIGNoYXJnZSwgdGhlIExldmVscyB0byBvdGhlciBlbmR1c2Vycy4gIEFzIG5vdGVkIGJlbG93LCBpbiB0aGUgZXZlbnQgeW91IGNvbW1lcmNpYWxseSBkaXN0cmlidXRlIG9yIGNvbW1lcmNpYWwgZXhwbG9pdCB0aGUgTGV2ZWxzIG9yIGNvbW1pdCBhbnkgb3RoZXIgYnJlYWNoIG9mIHRoaXMgQWdyZWVtZW50LCB5b3VyIGxpY2Vuc2VzLCBhcyBncmFudGVkIGluIHRoaXMgQWdyZWVtZW50LCBzaGFsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSwgd2l0aG91dCBub3RpY2UuIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5LCBkZWZlbmQgYW5kIGhvbGQgaGFybWxlc3MgSUQgYW5kIEFjdGl2aXNpb24gYW5kIElEJ3MgYW5kIEFjdGl2aXNpb24ncyByZXNwZWN0aXZlIG9mZmljZXJzLCBlbXBsb3llZXMsIGRpcmVjdG9ycywgYWdlbnRzLCBsaWNlbnNlZXMgKGV4Y2x1ZGluZyB5b3UpLCBzdWJsaWNlbnNlZXMgKGV4Y2x1ZGluZyB5b3UpLCBzdWNjZXNzb3JzIGFuZCBhc3NpZ25zIGZyb20gYW5kIGFnYWluc3QgYWxsIGxvc3NlcywgbGF3c3VpdHMsIGRhbWFnZXMsIGNhdXNlcyBvZiBhY3Rpb24gYW5kIGNsYWltcyByZWxhdGluZyB0byBhbmQvb3IgYXJpc2luZyBmcm9tIHRoZSBMZXZlbHMgYW5kL29yIHRoZSBkaXN0cmlidXRpb24gb3Igb3RoZXIgdXNlIG9mIHRoZSBMZXZlbHMuCisKKworICAgICAzLiAgUHJvaGliaXRpb25zIHdpdGggUmVnYXJkIHRvIFNvZnR3YXJlLiBZb3UsIGVpdGhlciBkaXJlY3RseSBvciBpbi0gZGlyZWN0bHksIHNoYWxsIG5vdCBkbyBhbnkgb2YgdGhlIGZvbGxvd2luZyBhY3RzOgorCisgICAgIGEuICByZW50IHRoZSBTb2Z0d2FyZTsKKworICAgICBiLiAgc2VsbCB0aGUgU29mdHdhcmU7CisKKyAgICAgYy4gIGxlYXNlIG9yIGxlbmQgdGhlIFNvZnR3YXJlOworCisgICAgIGQuICBvZmZlciB0aGUgU29mdHdhcmUgb24gYSBwYXktcGVyLXBsYXkgYmFzaXM7CisKKyAgICAgZS4gIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGJ5IGFueSBtZWFucywgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIEludGVybmV0IG9yIG90aGVyIGVsZWN0cm9uaWMgZGlzdHJpYnV0aW9uLCBkaXJlY3QgbWFpbCwgcmV0YWlsLCBtYWlsIG9yZGVyIG9yIG90aGVyIG1lYW5zOworCisgICAgIGYuICBpbiBhbnkgb3RoZXIgbWFubmVyIGFuZCB0aHJvdWdoIGFueSBtZWRpdW0gd2hhdHNvZXZlciBjb21tZXJjaWFsbHkgZXhwbG9pdCB0aGUgU29mdHdhcmUgb3IgdXNlIHRoZSBTb2Z0d2FyZSBmb3IgYW55IGNvbW1lcmNpYWwgcHVycG9zZTsKKworICAgICBnLiAgZGlzYXNzZW1ibGUsIHJldmVyc2UgZW5naW5lZXIsIGRpc2Fzc2VtYmxlLCBkZWNvbXBpbGUsIG1vZGlmeSBvciBhbHRlciB0aGUgU29mdHdhcmU7CisKKyAgICAgaC4gIHRyYW5zbGF0ZSB0aGUgU29mdHdhcmU7CisKKyAgICAgaS4gIHJlcHJvZHVjZSBvciBjb3B5IHRoZSBTb2Z0d2FyZSAoZXhjZXB0IGFzIHBlcm1pdHRlZCBieSBzZWN0aW9uIDQuIGhlcmVpbmJlbG93KTsKKworICAgICBqLiAgcHVibGljbHkgZGlzcGxheSB0aGUgU29mdHdhcmU7IG9yCisKKyAgICAgay4gIHByZXBhcmUgb3IgZGV2ZWxvcCBkZXJpdmF0aXZlIHdvcmtzIGJhc2VkIHVwb24gdGhlIFNvZnR3YXJlLgorCisgICAgIDQuICBQZXJtaXR0ZWQgQ29weWluZy4gIFlvdSBtYXkgbWFrZSBvbmx5IHRoZSBmb2xsb3dpbmcgY29waWVzIG9mIHRoZSBTb2Z0d2FyZTogIChpKSB5b3UgbWF5IGNvcHkgdGhlIFNvZnR3YXJlIGZyb20gdGhlIENEIFJPTSB3aGljaCB5b3UgcHVyY2hhc2Ugb250byB5b3VyIGNvbXB1dGVyIGhhcmQgZHJpdmU7IChpaSkgeW91IG1heSBjb3B5IHRoZSBTb2Z0d2FyZSBmcm9tIHlvdXIgY29tcHV0ZXIgaGFyZCBkcml2ZSBpbnRvIHlvdXIgY29tcHV0ZXIgUkFNOyBhbmQgKGlpaSkgeW91IG1heSBtYWtlIG9uZSAoMSkgImJhY2sgdXAiIG9yIGFyY2hpdmFsIGNvcHkgb2YgdGhlIFNvZnR3YXJlIG9uIG9uZSAoMSkgaGFyZCBkaXNrLgorCisgICAgIDUuICBJbnRlbGxlY3R1YWwgUHJvcGVydHkgUmlnaHRzLiAgVGhlIFNvZnR3YXJlLCBpbmNsdWRpbmcgdGhlIElEIEltYWdlcywgYW5kIGFsbCBwcmludGVkIG1hdGVyaWFsIGFjY29tcGFueWluZyB0aGUgU29mdHdhcmUgKHRoZSAiUHJpbnRlZCBNYXRlcmlhbHMiKSBhbmQgYWxsIGNvcHlyaWdodHMsIHRyYWRlbWFya3MgYW5kIGFsbCBvdGhlciBjb25jZWl2YWJsZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIHJlbGF0ZWQgdG8gdGhlIFNvZnR3YXJlLCB0aGUgUHJpbnRlZCBNYXRlcmlhbHMgYW5kIHRoZSBJRCBJbWFnZXMgYXJlIG93bmVkIGJ5IElEIGFuZCBhcmUgcHJvdGVjdGVkIGJ5IFVuaXRlZCBTdGF0ZXMgY29weXJpZ2h0IGxhd3MsIGludGVybmF0aW9uYWwgdHJlYXR5IHByb3Zpc2lvbnMgYW5kIGFsbCBhcHBsaWNhYmxlIGxhdywgc3VjaCBhcyB0aGUgTGFuaGFtIEFjdC4gIFlvdSBtdXN0IHRyZWF0IHRoZSBTb2Z0d2FyZSwgdGhlIFByaW50ZWQgTWF0ZXJpYWxzIGFuZCB0aGUgSUQgSW1hZ2VzIGxpa2UgYW55IG90aGVyIGNvcHlyaWdodGVkIG1hdGVyaWFsLCBhcyByZXF1aXJlZCBieSAxNyBVLlMuQy4sIMKnMTAxIGV0IHNlcS4gYW5kIG90aGVyIGFwcGxpY2FibGUgbGF3LiAgWW91IGFncmVlIHRvIHVzZSB5b3VyIGJlc3QgZWZmb3J0cyB0byBzZWUgdGhhdCBhbnkgdXNlciBvZiB0aGUgU29mdHdhcmUgbGljZW5zZWQgaGVyZXVuZGVyLCB0aGUgUHJpbnRlZCBNYXRlcmlhbHMgb3IgdGhlIExldmVscyBjb21wbGllcyB3aXRoIHRoaXMgQWdyZWVtZW50LiAgWW91IGFncmVlIHRoYXQgeW91IGFyZSByZWNlaXZpbmcgYSBjb3B5IG9mIHRoZSBTb2Z0d2FyZSwgaW5jbHVkaW5nIHRoZSBJRCBJbWFnZXMsIGFuZCB0aGUgUHJpbnRlZCBNYXRlcmlhbCBieSBsaWNlbnNlIG9ubHkgYW5kIG5vdCBieSBzYWxlIGFuZCB0aGF0IHRoZSAiZmlyc3Qgc2FsZSIgZG9jdHJpbmUgb2YgMTcgVS5TLkMuIMKnMTA5IGRvZXMgbm90IGFwcGx5IHRvIHlvdXIgcmVjZWlwdCBvciB1c2Ugb2YgdGhlIFNvZnR3YXJlLCB0aGUgUHJpbnRlZCBNYXRlcmlhbHMgb3IgeW91ciBpbmNsdXNpb24gb2YgYW55IElEIEltYWdlcyBpbiB0aGUgTGV2ZWxzLiAgVGhpcyBzZWN0aW9uIDUuIHNoYWxsIHN1cnZpdmUgdGhlIGNhbmNlbGxhdGlvbiBvciB0ZXJtaW5hdGlvbiBvZiB0aGlzIEFncmVlbWVudC4KKworICAgICA2LiAgTm8gSUQgV2FycmFudGllcy4gIElEIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUywgV0hFVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgV0lUSCBSRVNQRUNUIFRPIFRIRSBTT0ZUV0FSRSwgVEhFIFBSSU5URUQgTUFURVJJQUxTIEFORCBUSEUgSUQgSU1BR0VTLiAgSUQgRE9FUyBOT1QgV0FSUkFOVCBUSEFUIFRIRSBPUEVSQVRJT04gT0YgVEhFIFNPRlRXQVJFIFdJTEwgQkUgVU5JTlRFUlJVUFRFRCBPUiBFUlJPUiBGUkVFIE9SIFRIQVQgVEhFIFNPRlRXQVJFIFdJTEwgTUVFVCBZT1VSIFNQRUNJRklDIFJFUVVJUkVNRU5UUy4gIEFERElUSU9OQUwgU1RBVEVNRU5UUyBTVUNIIEFTIFBSRVNFTlRBVElPTlMsIFdIRVRIRVIgT1JBTCBPUiBXUklUVEVOLCBETyBOT1QgQ09OU1RJVFVURSBXQVJSQU5USUVTIEJZIElEIEFORCBTSE9VTEQgTk9UIEJFIFJFTElFRCBVUE9OLiAgVGhpcyBzZWN0aW9uIDYuICBzaGFsbCBzdXJ2aXZlIHRoZSBjYW5jZWxsYXRpb24gb3IgdGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQuCisKKyAgICAgNy4gIExpbWl0ZWQgQWN0aXZpc2lvbiBXYXJyYW50eS4gIEFjdGl2aXNpb24gd2FycmFudHMgdG8gdGhlIG9yaWdpbmFsIGNvbnN1bWVyIHB1cmNoYXNlciBvZiB0aGUgU29mdHdhcmUgdGhhdCB0aGUgcmVjb3JkaW5nIG1lZGl1bSBvbiB3aGljaCB0aGUgU29mdHdhcmUgaXMgcmVjb3JkZWQgd2lsbCBiZSBmcmVlIGZyb20gZGVmZWN0cyBpbiBtYXRlcmlhbCBhbmQgd29ya21hbnNoaXAgZm9yIDkwIGRheXMgZnJvbSB0aGUgZGF0ZSBvZiBwdXJjaGFzZS4gIElmIHRoZSByZWNvcmRpbmcgbWVkaXVtIGlzIGZvdW5kIGRlZmVjdGl2ZSB3aXRoaW4gOTAgZGF5cyBvZiBvcmlnaW5hbCBwdXJjaGFzZSwgQWN0aXZpc2lvbiBhZ3JlZXMgdG8gcmVwbGFjZSwgZnJlZSBvZiBjaGFyZ2UsIGFueSBwcm9kdWN0IGRpc2NvdmVyZWQgdG8gYmUgZGVmZWN0aXZlIHdpdGhpbiBzdWNoIHBlcmlvZCB1cG9uIGl0cyByZWNlaXB0IG9mIHRoZSBwcm9kdWN0LCBwb3N0YWdlIHBhaWQsIHdpdGggcHJvb2Ygb2YgdGhlIGRhdGUgb2YgcHVyY2hhc2UsIGFzIGxvbmcgYXMgdGhlIFNvZnR3YXJlIGlzIHN0aWxsIGJlaW5nIG1hbnVmYWN0dXJlZCBieSBBY3RpdmlzaW9uLiAgSW4gdGhlIGV2ZW50IHRoYXQgdGhlIFNvZnR3YXJlIGlzIG5vIGxvbmdlciBhdmFpbGFibGUsIEFjdGl2aXNpb24gcmV0YWlucyB0aGUgcmlnaHQgdG8gc3Vic3RpdHV0ZSBhIHNpbWlsYXIgcHJvZ3JhbSBvZiBlcXVhbCBvciBncmVhdGVyIHZhbHVlLiAgVGhpcyB3YXJyYW50eSBpcyBsaW1pdGVkIHRvIHRoZSByZWNvcmRpbmcgbWVkaXVtIGNvbnRhaW5pbmcgdGhlIFNvZnR3YXJlIGFzIG9yaWdpbmFsbHkgcHJvdmlkZWQgYnkgQWN0aXZpc2lvbiBhbmQgaXMgbm90IGFwcGxpY2FibGUgdG8gbm9ybWFsIHdlYXIgYW5kIHRlYXIuIFRoaXMgd2FycmFudHkgc2hhbGwgbm90IGJlIGFwcGxpY2FibGUgYW5kIHNoYWxsIGJlIHZvaWQgaWYgdGhlIGRlZmVjdCBoYXMgYXJpc2VuIHRocm91Z2ggYWJ1c2UsIG1pc3RyZWF0bWVudCwgb3IgbmVnbGVjdC4KK0VYQ0VQVCBBUyBTRVQgRk9SVEggQUJPVkUsIFRISVMgV0FSUkFOVFkgSVMgSU4gTElFVSBPRiBBTEwgT1RIRVIgV0FSUkFOVElFUywgV0hFVEhFUiBPUkFMIE9SIFdSSVRURU4sIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEFOWSBXQVJSQU5UWSBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTklORlJJTkdFTUVOVCwgQU5EIE5PIE9USEVSIFJFUFJFU0VOVEFUSU9OUyBPUiBDTEFJTVMgT0YgQU5ZIEtJTkQgU0hBTEwgQkUgQklORElORyBPTiBPUiBPQkxJR0FURSBBQ1RJVklTSU9OLgorCitXaGVuIHJldHVybmluZyB0aGUgU29mdHdhcmUgZm9yIHdhcnJhbnR5IHJlcGxhY2VtZW50LCB0aGUgb3JpZ2luYWwgcHJvZHVjdCBkaXNrcyBtdXN0IGJlIHNlbnQgb25seSBpbiBhIHByb3RlY3RpdmUgcGFja2FnaW5nIGFuZCBpbmNsdWRlOiAoMSkgYSBwaG90b2NvcHkgb2YgeW91ciBkYXRlZCBzYWxlcyByZWNlaXB0OyAoMikgeW91ciBuYW1lIGFuZCByZXR1cm4gYWRkcmVzcyB0eXBlZCBvciBjbGVhcmx5IHByaW50ZWQ7ICgzKSBhIGJyaWVmIG5vdGUgZGVzY3JpYmluZyB0aGUgZGVmZWN0LCB0aGUgcHJvYmxlbShzKSB5b3UgYXJlIGVuY291bnRlcmVkIGFuZCB0aGUgc3lzdGVtIG9uIHdoaWNoIHlvdSBhcmUgcnVubmluZyB0aGUgU29mdHdhcmU7ICg0KSBpZiB5b3UgYXJlIHJldHVybmluZyB0aGUgU29mdHdhcmUgYWZ0ZXIgdGhlIDkwLWRheSB3YXJyYW50eSBwZXJpb2QsIGJ1dCB3aXRoaW4gb25lIHllYXIgYWZ0ZXIgdGhlIGRhdGUgb2YgcHVyY2hhc2UsIHBsZWFzZSBpbmNsdWRlIGNoZWNrIG9yIG1vbmV5IG9yZGVyIGZvciAkMTAgVS5TLiAoQSQxNyBmb3IgQXVzdHJhbGlhLCBvciDCozEwLjAwIGZvciBFdXJvcGUpIGN1cnJlbmN5IHBlciBDRCBvciBmbG9wcHkgZGlzayByZXBsYWNlbWVudC4gTm90ZTogQ2VydGlmaWVkIG1haWwgcmVjb21tZW5kZWQuCisKK0luIHRoZSBVLlMuIHNlbmQgdG8KK1dhcnJhbnR5IFJlcGxhY2VtZW50cworQWN0aXZpc2lvbiwgSW5jLgorUC5PLiBCb3ggNjc3MTMKK0xvcyBBbmdlbGVzLCBDYWxpZm9ybmlhICA5MDA2NworCitJbiBFdXJvcGUgc2VuZCB0bzoKK0FjdGl2aXNpb24KK0dlbWluaSBIb3VzZQorMTMzIEhpZ2ggU3RyZWV0CitZaWV3c2xleQorV2VzdCBEcmF5dG9uCitNaWRkbGVzZXggVUI3IDdRTAorVW5pdGVkIEtpbmdkb20KKworSW4gQXVzdHJhbGlhIGFuZCBBc2lhIFBhY2lmaWMgdGVycml0b3JpZXMgc2VuZCB0bzoKK1dhcnJhbnR5IFJlcGxhY2VtZW50cworQWN0aXZpc2lvbgorUC5PLiBCb3ggODczCitFcHBpbmcsIE5TVyAyMTIxCitBdXN0cmFsaWEKKworICAgICA4LiAgVmVudWUgYW5kIExpYWJpbGl0eSBMaW1pdGF0aW9uLiAgVGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgY29uc3RydWVkIGluIGFjY29yZGFuY2Ugd2l0aCBhbmQgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIFRleGFzIGFuZCBhcHBsaWNhYmxlIFVuaXRlZCBTdGF0ZXMgZmVkZXJhbCBsYXcuICBDb3B5cmlnaHQgYW5kIG90aGVyIHByb3ByaWV0YXJ5IG1hdHRlcnMgd2lsbCBiZSBnb3Zlcm5lZCBieSBVbml0ZWQgU3RhdGVzIGxhd3MgYW5kIGludGVybmF0aW9uYWwgdHJlYXRpZXMuICBFeGNlcHQgYXMgc2V0IGZvcnRoIGJlbG93LCBleGNsdXNpdmUgdmVudWUgZm9yIGFsbCBsaXRpZ2F0aW9uIHdpdGggcmVnYXJkIHRvIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGluIERhbGxhcyBDb3VudHksIFRleGFzIGFuZCB5b3UgYWdyZWUgdG8gc3VibWl0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIGNvdXJ0cyBpbiBEYWxsYXMsIFRleGFzIGZvciBhbnkgc3VjaCBsaXRpZ2F0aW9uLiAgRXhjbHVzaXZlIHZlbnVlIGZvciBhbGwgbGl0aWdhdGlvbiBpbnZvbHZpbmcgQWN0aXZpc2lvbiwgYnV0IG5vdCBpbnZvbHZpbmcgSUQsIHdpdGggcmVnYXJkIHRvIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGluIExvcyBBbmdlbGVzIENvdW50eSwgQ2FsaWZvcm5pYSBhbmQgeW91IGFncmVlIHRvIHN1Ym1pdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBjb3VydHMgaW4gTG9zIEFuZ2VsZXMsIENhbGlmb3JuaWEgZm9yIGFueSBzdWNoIGxpdGlnYXRpb24uCitJTiBBTlkgQ0FTRSwgTkVJVEhFUiBJRCwgQUNUSVZJU0lPTiwgTk9SIEFOWSBPRiBJRCdTIE9SIEFDVElWSVNJT04nUyBSRVNQRUNUSVZFIE9GRklDRVJTLCBFTVBMT1lFRVMsIERJUkVDVE9SUywgQUdFTlRTLCBMSUNFTlNFRVMgKEVYQ0xVRElORyBZT1UpLCBTVUJMSUNFTlNFRVMgKEVYQ0xVRElORyBZT1UpLCBTVUNDRVNTT1JTIE9SIEFTU0lHTlMgU0hBTEwgQkUgTElBQkxFIEZPUiBMT1NTIE9GIERBVEEsIExPU1MgT0YgIFBST0ZJVFMsIExPU1QgU0FWSU5HUywgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgSU5ESVJFQ1QsIFBVTklUSVZFIE9SIE9USEVSIFNJTUlMQVIgREFNQUdFUyBBUklTSU5HIEZST00gQlJFQUNIIE9GIFdBUlJBTlRZLCBCUkVBQ0ggT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UsIFNUUklDVCBQUk9EVUNUICBMSUFCSUxJVFksIE9SIE9USEVSIExFR0FMIFRIRU9SWSBFVkVOIElGIElELCBBQ1RJVklTSU9OIE9SIFRIRUlSIFJFU1BFQ1RJVkUgQUdFTlQoUykgSEFWRSBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUyBPUiBFVkVOIElGIFNVQ0ggREFNQUdFUyBBUkUgRk9SRVNFRUFCTEUsIE9SIExJQUJMRSBGT1IgQU5ZIENMQUlNIEJZIEFOWSBPVEhFUiBQQVJUWS4gIFNvbWUganVyaXNkaWN0aW9ucyBkbyBub3QgYWxsb3cgdGhlIGV4Y2x1c2lvbiBvciBsaW1pdGF0aW9uIG9mIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzbyB0aGUgYWJvdmUgbGltaXRhdGlvbiBvciBleGNsdXNpb24gbWF5IG5vdCBhcHBseSB0byB5b3UuICBUaGlzIHNlY3Rpb24gOC4gc2hhbGwgc3Vydml2ZSB0aGUgY2FuY2VsbGF0aW9uIG9yIHRlcm1pbmF0aW9uIG9mIHRoaXMgQWdyZWVtZW50LgorCisgICAgIDkuICBVLlMuIEdvdmVybm1lbnQgUmVzdHJpY3RlZCBSaWdodHMuICBUbyB0aGUgZXh0ZW50IGFwcGxpY2FibGUsIHRoZSBVbml0ZWQgU3RhdGVzIEdvdmVybm1lbnQgc2hhbGwgb25seSBoYXZlIHRob3NlIHJpZ2h0cyB0byB1c2UgdGhlIFNvZnR3YXJlLCB0aGUgUHJpbnRlZCBNYXRlcmlhbHMgYW5kIElEIEltYWdlcyBhcHBlYXJpbmcgaW4gdGhlIExldmVscyBhcyBleHByZXNzbHkgc3RhdGVkIGFuZCBleHByZXNzbHkgbGltaXRlZCBhbmQgcmVzdHJpY3RlZCBpbiB0aGlzIEFncmVlbWVudCwgYXMgcHJvdmlkZWQgaW4gNDguIEMuRi5SLiDCp8KnIDIyNy43MjAyLTEgdGhyb3VnaCAyMjcuNzIwNC4KKworICAgICAxMC4gIEdlbmVyYWwgUHJvdmlzaW9ucy4gIE5laXRoZXIgdGhpcyBBZ3JlZW1lbnQgbm9yIGFueSBwYXJ0IG9yIHBvcnRpb24gaGVyZW9mIHNoYWxsIGJlIGFzc2lnbmVkIG9yIHN1YmxpY2Vuc2VkIGJ5IHlvdS4gIElEIGFuZCBBY3RpdmlzaW9uIGVhY2ggbWF5IGFzc2lnbiBpdHMgcmVzcGVjdGl2ZSByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgaW4gdGhlIGFzc2lnbmluZyBwYXJ0eSdzIHNvbGUgZGlzY3JldGlvbi4gIFNob3VsZCBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGJlIGhlbGQgdG8gYmUgdm9pZCwgaW52YWxpZCwgdW5lbmZvcmNlYWJsZSBvciBpbGxlZ2FsIGJ5IGEgY291cnQsIHRoZSB2YWxpZGl0eSBhbmQgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIG90aGVyIHByb3Zpc2lvbnMgc2hhbGwgbm90IGJlIGFmZmVjdGVkIHRoZXJlYnkuICBJZiBhbnkgcHJvdmlzaW9uIGlzIGRldGVybWluZWQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgeW91IGFncmVlIHRvIGEgbW9kaWZpY2F0aW9uIG9mIHN1Y2ggcHJvdmlzaW9uIHRvIHByb3ZpZGUgZm9yIGVuZm9yY2VtZW50IG9mIHRoZSBwcm92aXNpb24ncyBpbnRlbnQsIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LiAgRmFpbHVyZSBvZiBJRCBvciBBY3RpdmlzaW9uIHRvIGVuZm9yY2UgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBzaGFsbCBub3QgY29uc3RpdHV0ZSBvciBiZSBjb25zdHJ1ZWQgYXMgYSB3YWl2ZXIgb2Ygc3VjaCBwcm92aXNpb24gb3Igb2YgdGhlIHJpZ2h0IHRvIGVuZm9yY2Ugc3VjaCBwcm92aXNpb24uICBJZiB5b3UgZmFpbCB0byBjb21wbHkgd2l0aCBvciBicmVhY2ggYW55IHRlcm0gb3IgY29uZGl0aW9uIG9mIHRoaXMgQWdyZWVtZW50LCBZT1VSIExJQ0VOU0VTIEFORCBUSElTIEFHUkVFTUVOVCBBUkUgQVVUT01BVElDQUxMWSBURVJNSU5BVEVELCBXSVRIT1VUIE5PVElDRS4gIEluIHRoZSBldmVudCB0aGlzIEFncmVlbWVudCBpcyB0ZXJtaW5hdGVkLCB5b3Ugc2hhbGwgaGF2ZSBubyByaWdodCB0byB1c2UgdGhlIFNvZnR3YXJlLCB0aGUgUHJpbnRlZCBNYXRlcmlhbHMgb3IgdGhlIExldmVscywgaW4gYW55IG1hbm5lciwgYW5kIHlvdSBzaGFsbCBpbW1lZGlhdGVseSBkZXN0cm95IGFsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCB0aGUgUHJpbnRlZCBNYXRlcmlhbHMgYW5kIHRoZSBMZXZlbHMgaW4geW91ciBwb3NzZXNzaW9uLCBjdXN0b2R5IG9yIGNvbnRyb2wuCitZT1UgQUNLTk9XTEVER0UgVEhBVCBZT1UgSEFWRSBSRUFEIFRISVMgQUdSRUVNRU5ULCBUSEFUIFlPVSBVTkRFUlNUQU5EIFRISVMgQUdSRUVNRU5ULCBBTkQgVU5ERVJTVEFORCBUSEFUIEJZIENPTlRJTlVJTkcgVEhFIElOU1RBTExBVElPTiBPRiBUSEUgU09GVFdBUkUsIEJZIExPQURJTkcgT1IgUlVOTklORyBUSEUgU09GVFdBUkUsIE9SIEJZIFBMQUNJTkcgT1IgQ09QWUlORyBUSEUgU09GVFdBUkUgT05UTyBZT1VSIENPTVBVVEVSIEhBUkQgRFJJVkUgT1IgUkFNLCBZT1UgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5ULiAgWU9VIEZVUlRIRVIgQUdSRUUgVEhBVCwgRVhDRVBUIEZPUiBXUklUVEVOIFNFUEFSQVRFIEFHUkVFTUVOVFMgQkVUV0VFTiBJRCwgQUNUSVZJU0lPTiBBTkQgWU9VLCBJRiBBTlksIFRISVMgQUdSRUVNRU5UIElTIEEgQ09NUExFVEUgQU5EIEVYQ0xVU0lWRSBTVEFURU1FTlQgT0YgVEhFIFJJR0hUUyBBTkQgTElBQklMSVRJRVMgT0YgVEhFIFBBUlRJRVMgSEVSRVRPLiAgVEhJUyBBR1JFRU1FTlQgU1VQRVJTRURFUyBBTEwgUFJJT1IgT1JBTCBBR1JFRU1FTlRTLCBQUk9QT1NBTFMgT1IgVU5ERVJTVEFORElOR1MsIEFORCBBTlkgT1RIRVIgQ09NTVVOSUNBVElPTlMgQkVUV0VFTiBJRCwgQUNUSVZJU0lPTiBBTkQgWU9VIFJFTEFUSU5HIFRPIFRIRSBTVUJKRUNUIE1BVFRFUiBPRiBUSElTIEFHUkVFTUVOVC4KKworCitOb3ZlbWJlciAxNCwgMTk5NworCisKK0xJTUlURUQgVVNFIFNPRlRXQVJFIExJQ0VOU0UgQUdSRUVNRU5UCiszNDA2LjA0MDAvRFdDL0RPQy8xODc4LmRvYwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvUTNBRVVMQSBiL2xpY2Vuc2VzL1EzQUVVTEEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2I5M2E3YQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL1EzQUVVTEEKQEAgLTAsMCArMSwyMjAgQEAKKworTElNSVRFRCBVU0UgU09GVFdBUkUgTElDRU5TRSBBR1JFRU1FTlQKKworCisKK1RoaXMgTGltaXRlZCBVc2UgU29mdHdhcmUgTGljZW5zZSBBZ3JlZW1lbnQgKHRoZSAiQWdyZWVtZW50IikgaXMgYSBsZWdhbAorYWdyZWVtZW50IGJldHdlZW4geW91LCB0aGUgZW5kLXVzZXIsIGFuZCBJZCBTb2Z0d2FyZSwgSW5jLiAoIklEIikuICBCWQorQ09OVElOVUlORyBUSEUgSU5TVEFMTEFUSU9OIE9GIFRISVMgR0FNRSBERU1PIFBST0dSQU0gRU5USVRMRUQgUVVBS0UgSUlJOgorQVJFTkEgKFRIRSAiU09GVFdBUkUiKSwgQlkgTE9BRElORyBPUiBSVU5OSU5HIFRIRSBTT0ZUV0FSRSwgT1IgQlkgUExBQ0lORworT1IgQ09QWUlORyBUSEUgU09GVFdBUkUgT05UTyBZT1VSIENPTVBVVEVSIEhBUkQgRFJJVkUsIENPTVBVVEVSIFJBTSBPUgorT1RIRVIgU1RPUkFHRSwgWU9VIEFSRSBBR1JFRUlORyBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUworQUdSRUVNRU5ULgorCisKKworMS4gICAgICAgICBHcmFudCBvZiBMaWNlbnNlLiAgU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIHByb3Zpc2lvbnMgb2YgdGhpcworQWdyZWVtZW50LCBJRCBncmFudHMgdG8geW91IHRoZSBub24tZXhjbHVzaXZlIGFuZCBsaW1pdGVkIHJpZ2h0IHRvIHVzZSB0aGUKK1NvZnR3YXJlIG9ubHkgaW4gZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBmb3JtLiBUaGUgdGVybSAiU29mdHdhcmUiCitpbmNsdWRlcyBhbGwgZWxlbWVudHMgb2YgdGhlIFNvZnR3YXJlLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgZGF0YQorZmlsZXMgYW5kIHNjcmVlbiBkaXNwbGF5cy4gIFlvdSBhcmUgbm90IHJlY2VpdmluZyBhbnkgb3duZXJzaGlwIG9yCitwcm9wcmlldGFyeSByaWdodCwgdGl0bGUgb3IgaW50ZXJlc3QgaW4gb3IgdG8gdGhlIFNvZnR3YXJlIG9yIHRoZQorY29weXJpZ2h0LCB0cmFkZW1hcmtzLCBvciBvdGhlciByaWdodHMgcmVsYXRlZCB0aGVyZXRvLiAgRm9yIHB1cnBvc2VzIG9mCit0aGlzIHNlY3Rpb24sICJ1c2UiIG1lYW5zIGxvYWRpbmcgdGhlIFNvZnR3YXJlIGludG8gUkFNIGFuZC9vciBvbnRvCitjb21wdXRlciBoYXJkIGRyaXZlLCBhcyB3ZWxsIGFzIGluc3RhbGxhdGlvbiBvZiB0aGUgU29mdHdhcmUgb24gYSBoYXJkCitkaXNrIG9yIG90aGVyIHN0b3JhZ2UgZGV2aWNlIGFuZCBtZWFucyB0aGUgdXNlcyBwZXJtaXR0ZWQgaW4gc2VjdGlvbiAzLgoraGVyZWluYmVsb3cuICBZb3UgYWdyZWUgdGhhdCB0aGUgU29mdHdhcmUgd2lsbCBub3QgYmUgc2hpcHBlZCwKK3RyYW5zZmVycmVkIG9yIGV4cG9ydGVkIGludG8gYW55IGNvdW50cnkgaW4gdmlvbGF0aW9uIG9mIHRoZSBVLlMuIEV4cG9ydAorQWRtaW5pc3RyYXRpb24gQWN0IChvciBhbnkgb3RoZXIgbGF3IGdvdmVybmluZyBzdWNoIG1hdHRlcnMpIGJ5IHlvdSBvcgorYW55b25lIGF0IHlvdXIgZGlyZWN0aW9uIGFuZCB0aGF0IHlvdSB3aWxsIG5vdCB1dGlsaXplIGFuZCB3aWxsIG5vdAorYXV0aG9yaXplIGFueW9uZSB0byB1dGlsaXplLCBpbiBhbnkgb3RoZXIgbWFubmVyLCB0aGUgU29mdHdhcmUgaW4KK3Zpb2xhdGlvbiBvZiBhbnkgYXBwbGljYWJsZSBsYXcuICBUaGUgU29mdHdhcmUgbWF5IG5vdCBiZSBkb3dubG9hZGVkCitvciBvdGhlcndpc2UgZXhwb3J0ZWQgb3IgZXhwb3J0ZWQgaW50byAob3IgdG8gYSBuYXRpb25hbCBvciByZXNpZGVudAorb2YpIGFueSBjb3VudHJ5IHRvIHdoaWNoIHRoZSBVLlMuIGhhcyBlbWJhcmdvZWQgZ29vZHMgb3IgdG8gYW55b25lCitvciBpbnRvIGFueSBjb3VudHJ5IHdoby93aGljaCBhcmUgcHJvaGliaXRlZCwgYnkgYXBwbGljYWJsZSBsYXcsIGZyb20KK3JlY2VpdmluZyBzdWNoIHByb3BlcnR5LgorCisKKworMi4gICAgICAgICBQcm9oaWJpdGlvbnMuIFlvdSwgZWl0aGVyIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIHNoYWxsIG5vdCBkbworYW55IG9mIHRoZSBmb2xsb3dpbmcgYWN0czoKKworCisKK2EuICAgICAgICAgIHJlbnQgdGhlIFNvZnR3YXJlOworCisKKworYi4gICAgICAgICBzZWxsIHRoZSBTb2Z0d2FyZTsKKworCisKK2MuICAgICAgICAgbGVhc2Ugb3IgbGVuZCB0aGUgU29mdHdhcmU7CisKKworCitkLiAgICAgICAgIG9mZmVyIHRoZSBTb2Z0d2FyZSBvbiBhICJwYXktcGVyLXBsYXkiIGJhc2lzOworCisKKworZS4gICAgICAgICAgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgKGV4Y2VwdCBhcyBwZXJtaXR0ZWQgYnkgc2VjdGlvbiAzLgoraGVyZWluYmVsb3cpOworCisKKworZi4gICAgICAgICAgaW4gYW55IG90aGVyIG1hbm5lciBhbmQgdGhyb3VnaCBhbnkgbWVkaXVtIHdoYXRzb2V2ZXIKK2NvbW1lcmNpYWxseSBleHBsb2l0IHRoZSBTb2Z0d2FyZSBvciB1c2UgdGhlIFNvZnR3YXJlIGZvciBhbnkgY29tbWVyY2lhbAorcHVycG9zZTsKKworCisKK2cuICAgICAgICAgZGlzYXNzZW1ibGUsIHJldmVyc2UgZW5naW5lZXIsIGRlY29tcGlsZSwgbW9kaWZ5IG9yIGFsdGVyIHRoZQorU29mdHdhcmUgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGNyZWF0aW5nIG9yIGRldmVsb3BpbmcgZXh0cmEgb3IKK2FkZC1vbiBsZXZlbHMgZm9yIHRoZSBTb2Z0d2FyZTsKKworCisKK2guICAgICAgICAgdHJhbnNsYXRlIHRoZSBTb2Z0d2FyZTsKKworCisKK2kuICAgICAgICAgIHJlcHJvZHVjZSBvciBjb3B5IHRoZSBTb2Z0d2FyZSAoZXhjZXB0IGFzIHBlcm1pdHRlZCBieSBzZWN0aW9uCiszLiBoZXJlaW5iZWxvdyk7CisKKworCitqLiAgICAgICAgICBwdWJsaWNseSBkaXNwbGF5IHRoZSBTb2Z0d2FyZTsKKworCisKK2suICAgICAgICAgcHJlcGFyZSBvciBkZXZlbG9wIGRlcml2YXRpdmUgd29ya3MgYmFzZWQgdXBvbiB0aGUgU29mdHdhcmU7IG9yCisKKworCitsLiAgICAgICAgICByZW1vdmUgb3IgYWx0ZXIgYW55IGxlZ2FsIG5vdGljZXMgb3Igb3RoZXIgbWFya2luZ3Mgb3IKK2xlZ2VuZHMsIHN1Y2ggYXMgdHJhZGVtYXJrIGFuZCBjb3B5cmlnaHQgbm90aWNlcywgYWZmaXhlZCBvbiBvciB3aXRoaW4KK3RoZSBTb2Z0d2FyZS4KKworCisKKzMuICAgICAgICAgUGVybWl0dGVkIERpc3RyaWJ1dGlvbiBhbmQgQ29weWluZy4gIFNvIGxvbmcgYXMgdGhpcyBBZ3JlZW1lbnQKK2FjY29tcGFuaWVzIGVhY2ggY29weSB5b3UgbWFrZSBvZiAgdGhlIFNvZnR3YXJlLCBhbmQgc28gbG9uZyBhcyB5b3UgZnVsbHkKK2NvbXBseSwgYXQgYWxsIHRpbWVzLCB3aXRoIHRoaXMgQWdyZWVtZW50LCBJRCBncmFudHMgdG8geW91IHRoZQorbm9uLWV4Y2x1c2l2ZSBhbmQgbGltaXRlZCByaWdodCB0byBjb3B5IHRoZSBTb2Z0d2FyZSBhbmQgdG8gZGlzdHJpYnV0ZQorc3VjaCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlIGZyZWUgb2YgY2hhcmdlIGZvciBub24tY29tbWVyY2lhbCBwdXJwb3Nlcword2hpY2ggc2hhbGwgaW5jbHVkZSB0aGUgZnJlZSBvZiBjaGFyZ2UgZGlzdHJpYnV0aW9uIG9mIGNvcGllcyBvZiB0aGUKK1NvZnR3YXJlIGFzIG1vdW50ZWQgb24gdGhlIGNvdmVycyBvZiBtYWdhemluZXM7IHByb3ZpZGVkLCBob3dldmVyLCB5b3UKK3NoYWxsIG5vdCBjb3B5IG9yIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGluIGFueSBpbmZyaW5naW5nIG1hbm5lciBvcgoraW4gYW55IG1hbm5lciB3aGljaCB2aW9sYXRlcyBhbnkgbGF3IG9yICB0aGlyZCBwYXJ0eSByaWdodCBhbmQgeW91IHNoYWxsCitub3QgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgdG9nZXRoZXIgd2l0aCBhbnkgbWF0ZXJpYWwgd2hpY2ggaXMKK2luZnJpbmdpbmcsIGxpYmVsb3VzLCBkZWZhbWF0b3J5LCBvYnNjZW5lLCBmYWxzZSwgbWlzbGVhZGluZywgb3IKK290aGVyd2lzZSBpbGxlZ2FsIG9yIHVubGF3ZnVsLiBZb3UgYWdyZWUgdG8gbGFiZWwgY29uc3BpY3VvdXNseSBhcworIlNIQVJFV0FSRSIgb3IgIkRFTU8iIGVhY2ggQ0Qgb3Igb3RoZXIgbm9uLWVsZWN0cm9uaWMgY29weSBvZiB0aGUKK1NvZnR3YXJlIHRoYXQgeW91IG1ha2UgYW5kIGRpc3RyaWJ1dGUuICBJRCByZXNlcnZlcyBhbGwgcmlnaHRzIG5vdAorZ3JhbnRlZCBpbiB0aGlzIEFncmVlbWVudC4gWW91IHNoYWxsIG5vdCBjb21tZXJjaWFsbHkgZGlzdHJpYnV0ZSB0aGUKK1NvZnR3YXJlICB1bmxlc3MgeW91IGZpcnN0ICBlbnRlciBpbnRvIGEgc2VwYXJhdGUgY29udHJhY3Qgd2l0aCBJRCwgYQorY29weSBvZiB3aGljaCB5b3UgbWF5IHJlcXVlc3QsIGJ1dCB3aGljaCBJRCBtYXkgZGVjbGluZSB0byBleGVjdXRlLgorRm9yIG1vcmUgaW5mb3JtYXRpb24gdmlzaXQgd3d3LnF1YWtlM2FyZW5hLmNvbS4KKworCisKKzQuICAgICAgICAgSW50ZWxsZWN0dWFsIFByb3BlcnR5IFJpZ2h0cy4gIFRoZSBTb2Z0d2FyZSBhbmQgYWxsIGNvcHlyaWdodHMsCit0cmFkZW1hcmtzIGFuZCBhbGwgb3RoZXIgY29uY2VpdmFibGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyByZWxhdGVkCit0byB0aGUgU29mdHdhcmUgYXJlIG93bmVkIGJ5IElEIGFuZCBhcmUgcHJvdGVjdGVkIGJ5IFVuaXRlZCBTdGF0ZXMKK2NvcHlyaWdodCBsYXdzLCBpbnRlcm5hdGlvbmFsIHRyZWF0eSBwcm92aXNpb25zIGFuZCBhbGwgYXBwbGljYWJsZSBsYXcsCitzdWNoIGFzIHRoZSBMYW5oYW0gQWN0LiAgWW91IG11c3QgdHJlYXQgdGhlIFNvZnR3YXJlIGxpa2UgYW55IG90aGVyCitjb3B5cmlnaHRlZCBtYXRlcmlhbCwgYXMgcmVxdWlyZWQgYnkgMTcgVS5TLkMuLCDCpzEwMSBldCBzZXEuIGFuZCBvdGhlcgorYXBwbGljYWJsZSBsYXcuIFlvdSBhZ3JlZSB0byB1c2UgeW91ciBiZXN0IGVmZm9ydHMgdG8gc2VlIHRoYXQgYW55IHVzZXIKK29mIHRoZSBTb2Z0d2FyZSBsaWNlbnNlZCBoZXJldW5kZXIgY29tcGxpZXMgd2l0aCB0aGlzIEFncmVlbWVudC4gIFlvdQorYWdyZWUgdGhhdCB5b3UgYXJlIHJlY2VpdmluZyBhIGNvcHkgb2YgdGhlIFNvZnR3YXJlIGJ5IGxpY2Vuc2Ugb25seQorYW5kIG5vdCBieSBzYWxlIGFuZCB0aGF0IHRoZSAiZmlyc3Qgc2FsZSIgZG9jdHJpbmUgb2YgMTcgVS5TLkMuIMKnMTA5Citkb2VzIG5vdCBhcHBseSB0byB5b3VyIHJlY2VpcHQgb3IgdXNlIG9mIHRoZSBTb2Z0d2FyZS4KKworCisKKzUuICAgICAgICAgTk8gV0FSUkFOVElFUy4gIElEIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUywgV0hFVEhFUiBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIFdJVEggUkVTUEVDVCBUTyBUSEUKK1NPRlRXQVJFLiAgSUQgRE9FUyBOT1QgV0FSUkFOVCBUSEFUIFRIRSBPUEVSQVRJT04gT0YgVEhFIFNPRlRXQVJFIFdJTEwgQkUKK1VOSU5URVJSVVBURUQgT1IgRVJST1IgRlJFRSBPUiBUSEFUIFRIRSBTT0ZUV0FSRSBXSUxMIE1FRVQgWU9VUiBTUEVDSUZJQworUkVRVUlSRU1FTlRTLiAgQURESVRJT05BTCBTVEFURU1FTlRTIFNVQ0ggQVMgUFJFU0VOVEFUSU9OUywgV0hFVEhFUiBPUkFMCitPUiBXUklUVEVOLCBETyBOT1QgQ09OU1RJVFVURSBXQVJSQU5USUVTIEJZIElEIEFORCBTSE9VTEQgTk9UIEJFIFJFTElFRAorVVBPTi4gVEhJUyBTRUNUSU9OIDUuIFNIQUxMIFNVUlZJVkUgQ0FOQ0VMTEFUSU9OIE9SIFRFUk1JTkFUSU9OIE9GIFRISVMKK0FHUkVFTUVOVC4KKworCisKKzYuICAgICAgICAgR292ZXJuaW5nIExhdywgVmVudWUsIEluZGVtbml0eSBhbmQgTGlhYmlsaXR5IExpbWl0YXRpb24uICBUaGlzCitBZ3JlZW1lbnQgc2hhbGwgYmUgY29uc3RydWVkIGluIGFjY29yZGFuY2Ugd2l0aCBhbmQgZ292ZXJuZWQgYnkgdGhlCithcHBsaWNhYmxlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIFRleGFzIGFuZCBhcHBsaWNhYmxlIFVuaXRlZCBTdGF0ZXMgZmVkZXJhbAorbGF3LiAgQ29weXJpZ2h0IGFuZCBvdGhlciBwcm9wcmlldGFyeSBtYXR0ZXJzIHdpbGwgYmUgZ292ZXJuZWQgYnkgVW5pdGVkCitTdGF0ZXMgbGF3cyBhbmQgaW50ZXJuYXRpb25hbCB0cmVhdGllcy4gIEV4Y2x1c2l2ZSB2ZW51ZSBmb3IgYWxsCitsaXRpZ2F0aW9uIHJlZ2FyZGluZyB0aGlzIEFncmVlbWVudCBzaGFsbCBiZSBpbiBEYWxsYXMgQ291bnR5LCBUZXhhcworYW5kIHlvdSBhZ3JlZSB0byBzdWJtaXQgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgY291cnRzIGluIERhbGxhcywKK1RleGFzIGZvciBhbnkgc3VjaCBsaXRpZ2F0aW9uLiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LCBkZWZlbmQgYW5kIGhvbGQKK2hhcm1sZXNzIElEIGFuZCBJRCdzIG9mZmljZXJzLCBlbXBsb3llZXMsIGRpcmVjdG9ycywgYWdlbnRzLCBsaWNlbnNlZXMKKyhleGNsdWRpbmcgeW91KSwgc3VjY2Vzc29ycyBhbmQgYXNzaWducyBmcm9tIGFuZCBhZ2FpbnN0IGFsbCBsb3NzZXMsCitsYXdzdWl0cywgZGFtYWdlcywgY2F1c2VzIG9mIGFjdGlvbiBhbmQgY2xhaW1zIHJlbGF0aW5nIHRvIGFuZC9vcgorYXJpc2luZyBmcm9tIHlvdXIgYnJlYWNoIG9mIHRoaXMgQWdyZWVtZW50LiAgWW91IGFncmVlIHRoYXQgeW91cgordW5hdXRob3JpemVkIHVzZSBvZiB0aGUgU29mdHdhcmUsIG9yIGFueSBwYXJ0IHRoZXJlb2YsIG1heSBpbW1lZGlhdGVseQorYW5kIGlycmVwYXJhYmx5IGRhbWFnZSBJRCBzdWNoIHRoYXQgSUQgY291bGQgbm90IGJlIGFkZXF1YXRlbHkKK2NvbXBlbnNhdGVkIHNvbGVseSBieSBhIG1vbmV0YXJ5IGF3YXJkIGFuZCB0aGF0IGF0IElEJ3Mgb3B0aW9uIElEIHNoYWxsCitiZSBlbnRpdGxlZCB0byBhbiBpbmp1bmN0aXZlIG9yZGVyLCBpbiBhZGRpdGlvbiB0byBhbGwgb3RoZXIgYXZhaWxhYmxlCityZW1lZGllcyBpbmNsdWRpbmcgYSBtb25ldGFyeSBhd2FyZCwgYXBwcm9wcmlhdGVseSByZXN0cmFpbmluZyBhbmQvb3IKK3Byb2hpYml0aW5nIHN1Y2ggdW5hdXRob3JpemVkIHVzZSB3aXRob3V0IHRoZSBuZWNlc3NpdHkgb2YgSUQgcG9zdGluZworYm9uZCBvciBvdGhlciBzZWN1cml0eS4gSU4gQU5ZIENBU0UsIElEIEFORCBJRCdTIE9GRklDRVJTLCBFTVBMT1lFRVMsCitESVJFQ1RPUlMsIEFHRU5UUywgTElDRU5TRUVTLCBTVUJMSUNFTlNFRVMsIFNVQ0NFU1NPUlMgQU5EIEFTU0lHTlMKK1NIQUxMIE5PVCBCRSBMSUFCTEUgRk9SIExPU1MgT0YgREFUQSwgTE9TUyBPRiBQUk9GSVRTLCBMT1NUIFNBVklOR1MsCitTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBJTkRJUkVDVCwgUFVOSVRJVkUgT1IgT1RIRVIgU0lNSUxBUgorREFNQUdFUyBBUklTSU5HIEZST00gQU5ZIEFMTEVHRUQgQ0xBSU0gRk9SIEJSRUFDSCBPRiBXQVJSQU5UWSwgQlJFQUNICitPRiBDT05UUkFDVCwgTkVHTElHRU5DRSwgU1RSSUNUIFBST0RVQ1QgTElBQklMSVRZLCBPUiBPVEhFUiBMRUdBTAorVEhFT1JZIEVWRU4gSUYgSUQgT1IgSVRTIEFHRU5UIEhBVkUgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWQorT0YgU1VDSCBEQU1BR0VTIE9SIEVWRU4gSUYgU1VDSCBEQU1BR0VTIEFSRSBGT1JFU0VFQUJMRSwgT1IgTElBQkxFCitGT1IgQU5ZIENMQUlNIEJZIEFOWSBPVEhFUiBQQVJUWS4gIFNvbWUganVyaXNkaWN0aW9ucyBkbyBub3QgYWxsb3cKK3RoZSBleGNsdXNpb24gb3IgbGltaXRhdGlvbiBvZiBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywKK3NvIHRoZSBhYm92ZSBsaW1pdGF0aW9uIG9yIGV4Y2x1c2lvbiBtYXkgbm90IGFwcGx5IHRvIHlvdS4gVGhpcworU2VjdGlvbiA2LiBzaGFsbCBzdXJ2aXZlIGNhbmNlbGxhdGlvbiBvciB0ZXJtaW5hdGlvbiBvZiB0aGlzIEFncmVlbWVudC4KKworCisKKzcuICAgICAgICAgVS5TLiBHb3Zlcm5tZW50IFJlc3RyaWN0ZWQgUmlnaHRzLiBUbyB0aGUgZXh0ZW50IGFwcGxpY2FibGUsCit0aGUgVW5pdGVkIFN0YXRlcyBHb3Zlcm5tZW50IHNoYWxsIG9ubHkgaGF2ZSB0aG9zZSByaWdodHMgdG8gdXNlIHRoZQorU29mdHdhcmUgYXMgZXhwcmVzc2x5IHN0YXRlZCBhbmQgZXhwcmVzc2x5IGxpbWl0ZWQgYW5kIHJlc3RyaWN0ZWQgaW4KK3RoaXMgQWdyZWVtZW50LCBhcyBwcm92aWRlZCBpbiA0OCBDLkYuUi4gwqfCpyAyMjcuNzIwMSB0aHJvdWdoIDIyNy43MjA0LAoraW5jbHVzaXZlLgorCisKKworOC4gICAgICAgICBHZW5lcmFsIFByb3Zpc2lvbnMuICBOZWl0aGVyIHRoaXMgQWdyZWVtZW50IG5vciBhbnkgcGFydCBvcgorcG9ydGlvbiBoZXJlb2Ygc2hhbGwgYmUgYXNzaWduZWQgb3Igc3VibGljZW5zZWQgYnkgeW91LiAgSUQgbWF5IGFzc2lnbiBpdHMKK3JpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCBpbiBJRCdzIHNvbGUgZGlzY3JldGlvbi4gIFNob3VsZCBhbnkgcHJvdmlzaW9uCitvZiB0aGlzIEFncmVlbWVudCBiZSBoZWxkIHRvIGJlIHZvaWQsIGludmFsaWQsIHVuZW5mb3JjZWFibGUgb3IgaWxsZWdhbCBieQorYSBjb3VydCBvZiBjb21wZXRlbnQganVyaXNkaWN0aW9uLCB0aGUgdmFsaWRpdHkgYW5kIGVuZm9yY2VhYmlsaXR5IG9mIHRoZQorb3RoZXIgcHJvdmlzaW9ucyBzaGFsbCBub3QgYmUgYWZmZWN0ZWQgdGhlcmVieS4gIElmIGFueSBwcm92aXNpb24gaXMKK2RldGVybWluZWQgdG8gYmUgdW5lbmZvcmNlYWJsZSBieSBhIGNvdXJ0IG9mIGNvbXBldGVudCBqdXJpc2RpY3Rpb24sIHlvdQorYWdyZWUgdG8gYSBtb2RpZmljYXRpb24gb2Ygc3VjaCBwcm92aXNpb24gdG8gcHJvdmlkZSBmb3IgZW5mb3JjZW1lbnQgb2YKK3RoZSBwcm92aXNpb24ncyBpbnRlbnQsIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LgorRmFpbHVyZSBvZiBJRCB0byBlbmZvcmNlIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgbm90Citjb25zdGl0dXRlIG9yIGJlIGNvbnN0cnVlZCBhcyBhIHdhaXZlciBvZiBzdWNoIHByb3Zpc2lvbiBvciBvZiB0aGUgcmlnaHQKK3RvIGVuZm9yY2Ugc3VjaCBwcm92aXNpb24uICBJbW1lZGlhdGVseSB1cG9uIHlvdXIgZmFpbHVyZSB0byBjb21wbHkgd2l0aAorb3IgYnJlYWNoIG9mIGFueSB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCwgVEhJUyBBR1JFRU1FTlQKK0FORCBZT1VSIExJQ0VOU0UgU0hBTEwgQVVUT01BVElDQUxMWSBURVJNSU5BVEUsIFdJVEhPVVQgTk9USUNFLCBBTkQgSUQKK01BWSBQVVJTVUUgQUxMIFJFTElFRiBBTkQgUkVNRURJRVMgQUdBSU5TVCBZT1UgV0hJQ0ggQVJFIEFWQUlMQUJMRSBVTkRFUgorQVBQTElDQUJMRSBMQVcgQU5EL09SIFRISVMgQUdSRUVNRU5ULiAgIEluIHRoZSBldmVudCB0aGlzIEFncmVlbWVudCBpcwordGVybWluYXRlZCwgeW91IHNoYWxsIGhhdmUgbm8gcmlnaHQgdG8gdXNlIHRoZSBTb2Z0d2FyZSwgaW4gYW55IG1hbm5lciwKK2FuZCB5b3Ugc2hhbGwgaW1tZWRpYXRlbHkgZGVzdHJveSBhbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSBpbiB5b3VyCitwb3NzZXNzaW9uLCBjdXN0b2R5IG9yIGNvbnRyb2wuCisKKworCitZT1UgQUNLTk9XTEVER0UgVEhBVCBZT1UgSEFWRSBSRUFEIFRISVMgQUdSRUVNRU5ULCBZT1UgVU5ERVJTVEFORCBUSElTCitBR1JFRU1FTlQsIEFORCBVTkRFUlNUQU5EIFRIQVQgQlkgQ09OVElOVUlORyBUSEUgSU5TVEFMTEFUSU9OIE9GIFRIRQorU09GVFdBUkUsIEJZIExPQURJTkcgT1IgUlVOTklORyBUSEUgU09GVFdBUkUsIE9SIEJZIFBMQUNJTkcgT1IgQ09QWUlORworVEhFIFNPRlRXQVJFIE9OVE8gWU9VUiBDT01QVVRFUiBIQVJEIERSSVZFIE9SIFJBTSwgWU9VIEFHUkVFIFRPIEJFIEJPVU5ECitCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQuICBZT1UgRlVSVEhFUiBBR1JFRSBUSEFULAorRVhDRVBUIEZPUiBXUklUVEVOIFNFUEFSQVRFIEFHUkVFTUVOVFMgQkVUV0VFTiBJRCBBTkQgWU9VLCBUSElTCitBR1JFRU1FTlQgSVMgQSBDT01QTEVURSBBTkQgRVhDTFVTSVZFIFNUQVRFTUVOVCBPRiBUSEUgUklHSFRTIEFORAorTElBQklMSVRJRVMgT0YgVEhFIFBBUlRJRVMgSEVSRVRPLiAgVEhJUyBBR1JFRU1FTlQgU1VQRVJTRURFUyBBTEwgUFJJT1IKK09SQUwgQUdSRUVNRU5UUywgUFJPUE9TQUxTIE9SIFVOREVSU1RBTkRJTkdTLCBBTkQgQU5ZIE9USEVSCitDT01NVU5JQ0FUSU9OUyBCRVRXRUVOIElEIEFORCBZT1UgUkVMQVRJTkcgVE8gVEhFIFNVQkpFQ1QgTUFUVEVSIE9GCitUSElTIEFHUkVFTUVOVC4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL1FQTCBiL2xpY2Vuc2VzL1FQTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjM5OTMyCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvUVBMCkBAIC0wLDAgKzEsOTkgQEAKKwkJCSAgICAgVEhFIFEgUFVCTElDIExJQ0VOU0UKKwkJCQkgIHZlcnNpb24gMS4wCisKKwkJICAgQ29weXJpZ2h0IChDKSAxOTk5IFRyb2xsIFRlY2ggQVMsIE5vcndheS4KKwkJICAgICAgIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZAorCQkgICAgICAgZGlzdHJpYnV0ZSB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQuCisKK1RoZSBpbnRlbnQgb2YgdGhpcyBsaWNlbnNlIGlzIHRvIGVzdGFibGlzaCBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgdGhlCitzb2Z0d2FyZSByZWd1bGF0ZWQgYnkgdGhpcyBsaWNlbnNlIHVuZGVyIHRoZSBvcGVuIHNvdXJjZSBtb2RlbC4KKworVGhpcyBsaWNlbnNlIGFwcGxpZXMgdG8gYW55IHNvZnR3YXJlIGNvbnRhaW5pbmcgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZQorY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgdGhhdCBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mCit0aGUgUSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDEuMC4gIFN1Y2ggc29mdHdhcmUgaXMgaGVyZWluIHJlZmVycmVkIHRvIGFzCit0aGUgU29mdHdhcmUuICBUaGlzIGxpY2Vuc2UgY292ZXJzIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZQorU29mdHdhcmUsIHVzZSBvZiB0aGlyZC1wYXJ0eSBhcHBsaWNhdGlvbiBwcm9ncmFtcyBiYXNlZCBvbiB0aGUgU29mdHdhcmUsCithbmQgZGV2ZWxvcG1lbnQgb2YgZnJlZSBzb2Z0d2FyZSB3aGljaCB1c2VzIHRoZSBTb2Z0d2FyZS4KKworCQkJCSBHcmFudGVkIFJpZ2h0cworCisxLiBZb3UgYXJlIGdyYW50ZWQgdGhlIG5vbi1leGNsdXNpdmUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIGxpY2Vuc2UKKyAgIHByb3ZpZGVkIHlvdSBhZ3JlZSB0byBhbmQgY29tcGx5IHdpdGggYW55IGFuZCBhbGwgY29uZGl0aW9ucyBpbiB0aGlzCisgICBsaWNlbnNlLiAgV2hvbGUgb3IgcGFydGlhbCBkaXN0cmlidXRpb24gb2YgdGhlIFNvZnR3YXJlLCBvciBzb2Z0d2FyZQorICAgaXRlbXMgdGhhdCBsaW5rIHdpdGggdGhlIFNvZnR3YXJlLCBpbiBhbnkgZm9ybSBzaWduaWZpZXMgYWNjZXB0YW5jZSBvZgorICAgdGhpcyBsaWNlbnNlLgorCisyLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGluIHVubW9kaWZpZWQgZm9ybSBwcm92aWRlZAorICAgdGhhdCB0aGUgZW50aXJlIHBhY2thZ2UsIGluY2x1ZGluZyAtIGJ1dCBub3QgcmVzdHJpY3RlZCB0byAtIGNvcHlyaWdodCwKKyAgIHRyYWRlbWFyayBub3RpY2VzIGFuZCBkaXNjbGFpbWVycywgYXMgcmVsZWFzZWQgYnkgdGhlIGluaXRpYWwgZGV2ZWxvcGVyCisgICBvZiB0aGUgU29mdHdhcmUsIGlzIGRpc3RyaWJ1dGVkLgorCiszLiBZb3UgbWF5IG1ha2UgbW9kaWZpY2F0aW9ucyB0byB0aGUgU29mdHdhcmUgYW5kIGRpc3RyaWJ1dGUgeW91cgorICAgbW9kaWZpY2F0aW9ucywgaW4gYSBmb3JtIHRoYXQgaXMgc2VwYXJhdGUgZnJvbSB0aGUgU29mdHdhcmUsIHN1Y2ggYXMKKyAgIHBhdGNoZXMuIFRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zIGFwcGx5IHRvIG1vZGlmaWNhdGlvbnM6CisKKyAgICAgYS4gTW9kaWZpY2F0aW9ucyBtdXN0IG5vdCBhbHRlciBvciByZW1vdmUgYW55IGNvcHlyaWdodCBub3RpY2VzIGluCisgICAgICAgIHRoZSBTb2Z0d2FyZS4KKworICAgICBiLiBXaGVuIG1vZGlmaWNhdGlvbnMgdG8gdGhlIFNvZnR3YXJlIGFyZSByZWxlYXNlZCB1bmRlciB0aGlzCisgICAgICAgIGxpY2Vuc2UsIGEgbm9uLWV4Y2x1c2l2ZSByb3lhbHR5LWZyZWUgcmlnaHQgaXMgZ3JhbnRlZCB0byB0aGUKKyAgICAgICAgaW5pdGlhbCBkZXZlbG9wZXIgb2YgdGhlIFNvZnR3YXJlIHRvIGRpc3RyaWJ1dGUgeW91ciBtb2RpZmljYXRpb24KKyAgICAgICAgaW4gZnV0dXJlIHZlcnNpb25zIG9mIHRoZSBTb2Z0d2FyZSBwcm92aWRlZCBzdWNoIHZlcnNpb25zIHJlbWFpbgorICAgICAgICBhdmFpbGFibGUgdW5kZXIgdGhlc2UgdGVybXMgaW4gYWRkaXRpb24gdG8gYW55IG90aGVyIGxpY2Vuc2Uocykgb2YKKyAgICAgICAgdGhlIGluaXRpYWwgZGV2ZWxvcGVyLgorCis0LiBZb3UgbWF5IGRpc3RyaWJ1dGUgbWFjaGluZS1leGVjdXRhYmxlIGZvcm1zIG9mIHRoZSBTb2Z0d2FyZSBvcgorICAgbWFjaGluZS1leGVjdXRhYmxlIGZvcm1zIG9mIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoZSBTb2Z0d2FyZSwgcHJvdmlkZWQKKyAgIHRoYXQgeW91IG1lZXQgdGhlc2UgcmVzdHJpY3Rpb25zOgorCisgICAgIGEuIFlvdSBtdXN0IGluY2x1ZGUgdGhpcyBsaWNlbnNlIGRvY3VtZW50IGluIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAgYi4gWW91IG11c3QgZW5zdXJlIHRoYXQgYWxsIHJlY2lwaWVudHMgb2YgdGhlIG1hY2hpbmUtZXhlY3V0YWJsZSBmb3JtcworICAgICAgICBhcmUgYWxzbyBhYmxlIHRvIHJlY2VpdmUgdGhlIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUKKyAgICAgICAgdG8gdGhlIGRpc3RyaWJ1dGVkIFNvZnR3YXJlLCBpbmNsdWRpbmcgYWxsIG1vZGlmaWNhdGlvbnMsIHdpdGhvdXQKKyAgICAgICAgYW55IGNoYXJnZSBiZXlvbmQgdGhlIGNvc3RzIG9mIGRhdGEgdHJhbnNmZXIsIGFuZCBwbGFjZSBwcm9taW5lbnQKKyAgICAgICAgbm90aWNlcyBpbiB0aGUgZGlzdHJpYnV0aW9uIGV4cGxhaW5pbmcgdGhpcy4KKworICAgICBjLiBZb3UgbXVzdCBlbnN1cmUgdGhhdCBhbGwgbW9kaWZpY2F0aW9ucyBpbmNsdWRlZCBpbiB0aGUKKyAgICAgICAgbWFjaGluZS1leGVjdXRhYmxlIGZvcm1zIGFyZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMKKyAgICAgICAgbGljZW5zZS4KKworNS4gWW91IG1heSB1c2UgdGhlIG9yaWdpbmFsIG9yIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoZSBTb2Z0d2FyZSB0bworICAgY29tcGlsZSwgbGluayBhbmQgcnVuIGFwcGxpY2F0aW9uIHByb2dyYW1zIGxlZ2FsbHkgZGV2ZWxvcGVkIGJ5IHlvdQorICAgb3IgYnkgb3RoZXJzLgorCis2LiBZb3UgbWF5IGRldmVsb3AgYXBwbGljYXRpb24gcHJvZ3JhbXMsIHJldXNhYmxlIGNvbXBvbmVudHMgYW5kIG90aGVyCisgICBzb2Z0d2FyZSBpdGVtcyB0aGF0IGxpbmsgd2l0aCB0aGUgb3JpZ2luYWwgb3IgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhlCisgICBTb2Z0d2FyZS4gIFRoZXNlIGl0ZW1zLCB3aGVuIGRpc3RyaWJ1dGVkLCBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCisgICByZXF1aXJlbWVudHM6CisKKyAgICAgYS4gWW91IG11c3QgZW5zdXJlIHRoYXQgYWxsIHJlY2lwaWVudHMgb2YgbWFjaGluZS1leGVjdXRhYmxlIGZvcm1zIG9mCisgICAgICAgIHRoZXNlIGl0ZW1zIGFyZSBhbHNvIGFibGUgdG8gcmVjZWl2ZSBhbmQgdXNlIHRoZSBjb21wbGV0ZQorICAgICAgICBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIHRvIHRoZSBpdGVtcyB3aXRob3V0IGFueSBjaGFyZ2UKKyAgICAgICAgYmV5b25kIHRoZSBjb3N0cyBvZiBkYXRhIHRyYW5zZmVyLgorCisgICAgIGIuIFlvdSBtdXN0IGV4cGxpY2l0bHkgbGljZW5zZSBhbGwgcmVjaXBpZW50cyBvZiB5b3VyIGl0ZW1zIHRvIHVzZQorICAgICAgICBhbmQgcmUtZGlzdHJpYnV0ZSBvcmlnaW5hbCBhbmQgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhlIGl0ZW1zIGluCisgICAgICAgIGJvdGggbWFjaGluZS1leGVjdXRhYmxlIGFuZCBzb3VyY2UgY29kZSBmb3Jtcy4gVGhlIHJlY2lwaWVudHMgbXVzdAorICAgICAgICBiZSBhYmxlIHRvIGRvIHNvIHdpdGhvdXQgYW55IGNoYXJnZXMgd2hhdHNvZXZlciwgYW5kIHRoZXkgbXVzdCBiZQorICAgICAgICBhYmxlIHRvIHJlLWRpc3RyaWJ1dGUgdG8gYW55b25lIHRoZXkgY2hvb3NlLgorCisKKyAgICAgYy4gSWYgdGhlIGl0ZW1zIGFyZSBub3QgYXZhaWxhYmxlIHRvIHRoZSBnZW5lcmFsIHB1YmxpYywgYW5kIHRoZQorICAgICAgICBpbml0aWFsIGRldmVsb3BlciBvZiB0aGUgU29mdHdhcmUgcmVxdWVzdHMgYSBjb3B5IG9mIHRoZSBpdGVtcywKKyAgICAgICAgdGhlbiB5b3UgbXVzdCBzdXBwbHkgb25lLgorCisJCQkgICAgTGltaXRhdGlvbnMgb2YgTGlhYmlsaXR5CisKK0luIG5vIGV2ZW50IHNoYWxsIHRoZSBpbml0aWFsIGRldmVsb3BlcnMgb3IgY29weXJpZ2h0IGhvbGRlcnMgYmUgbGlhYmxlCitmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIC0gYnV0IG5vdCByZXN0cmljdGVkIHRvIC0gbG9zdAorcmV2ZW51ZSBvciBwcm9maXRzIG9yIG90aGVyIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IKK2NvbnNlcXVlbnRpYWwgZGFtYWdlcywgZXZlbiBpZiB0aGV5IGhhdmUgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eQorb2Ygc3VjaCBkYW1hZ2VzLCBleGNlcHQgdG8gdGhlIGV4dGVudCBpbnZhcmlhYmxlIGxhdywgaWYgYW55LCBwcm92aWRlcworb3RoZXJ3aXNlLgorCisJCQkgICAgICAgICAgTm8gV2FycmFudHkKKworVGhlIFNvZnR3YXJlIGFuZCB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQgYXJlIHByb3ZpZGVkIEFTIElTIHdpdGggTk8gV0FSUkFOVFkKK09GIEFOWSBLSU5ELCBJTkNMVURJTkcgVEhFIFdBUlJBTlRZIE9GIERFU0lHTiwgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCitGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9RUEwtMS4wIGIvbGljZW5zZXMvUVBMLTEuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lY2RhZDZlCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvUVBMLTEuMApAQCAtMCwwICsxLDEwMyBAQAorCQkJICAgICBUSEUgUSBQVUJMSUMgTElDRU5TRQorCQkJCSAgdmVyc2lvbiAxLjAKKworCQkgICBDb3B5cmlnaHQgKEMpIDE5OTktMjAwMCBUcm9sbHRlY2ggQVMsIE5vcndheS4KKwkJICAgICAgIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZAorCQkgICAgICAgZGlzdHJpYnV0ZSB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQuCisKK1RoZSBpbnRlbnQgb2YgdGhpcyBsaWNlbnNlIGlzIHRvIGVzdGFibGlzaCBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgdGhlCitzb2Z0d2FyZSByZWd1bGF0ZWQgYnkgdGhpcyBsaWNlbnNlIHVuZGVyIHRoZSBvcGVuIHNvdXJjZSBtb2RlbC4KKworVGhpcyBsaWNlbnNlIGFwcGxpZXMgdG8gYW55IHNvZnR3YXJlIGNvbnRhaW5pbmcgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZQorY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgdGhhdCBpdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mCit0aGUgUSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDEuMC4gIFN1Y2ggc29mdHdhcmUgaXMgaGVyZWluIHJlZmVycmVkIHRvIGFzCit0aGUgU29mdHdhcmUuICBUaGlzIGxpY2Vuc2UgY292ZXJzIG1vZGlmaWNhdGlvbiBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZQorU29mdHdhcmUsIHVzZSBvZiB0aGlyZC1wYXJ0eSBhcHBsaWNhdGlvbiBwcm9ncmFtcyBiYXNlZCBvbiB0aGUgU29mdHdhcmUsCithbmQgZGV2ZWxvcG1lbnQgb2YgZnJlZSBzb2Z0d2FyZSB3aGljaCB1c2VzIHRoZSBTb2Z0d2FyZS4KKworCQkJCSBHcmFudGVkIFJpZ2h0cworCisxLiBZb3UgYXJlIGdyYW50ZWQgdGhlIG5vbi1leGNsdXNpdmUgcmlnaHRzIHNldCBmb3J0aCBpbiB0aGlzIGxpY2Vuc2UKKyAgIHByb3ZpZGVkIHlvdSBhZ3JlZSB0byBhbmQgY29tcGx5IHdpdGggYW55IGFuZCBhbGwgY29uZGl0aW9ucyBpbiB0aGlzCisgICBsaWNlbnNlLiAgV2hvbGUgb3IgcGFydGlhbCBkaXN0cmlidXRpb24gb2YgdGhlIFNvZnR3YXJlLCBvciBzb2Z0d2FyZQorICAgaXRlbXMgdGhhdCBsaW5rIHdpdGggdGhlIFNvZnR3YXJlLCBpbiBhbnkgZm9ybSBzaWduaWZpZXMgYWNjZXB0YW5jZSBvZgorICAgdGhpcyBsaWNlbnNlLgorCisyLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGluIHVubW9kaWZpZWQgZm9ybSBwcm92aWRlZAorICAgdGhhdCB0aGUgZW50aXJlIHBhY2thZ2UsIGluY2x1ZGluZyAtIGJ1dCBub3QgcmVzdHJpY3RlZCB0byAtIGNvcHlyaWdodCwKKyAgIHRyYWRlbWFyayBub3RpY2VzIGFuZCBkaXNjbGFpbWVycywgYXMgcmVsZWFzZWQgYnkgdGhlIGluaXRpYWwgZGV2ZWxvcGVyCisgICBvZiB0aGUgU29mdHdhcmUsIGlzIGRpc3RyaWJ1dGVkLgorCiszLiBZb3UgbWF5IG1ha2UgbW9kaWZpY2F0aW9ucyB0byB0aGUgU29mdHdhcmUgYW5kIGRpc3RyaWJ1dGUgeW91cgorICAgbW9kaWZpY2F0aW9ucywgaW4gYSBmb3JtIHRoYXQgaXMgc2VwYXJhdGUgZnJvbSB0aGUgU29mdHdhcmUsIHN1Y2ggYXMKKyAgIHBhdGNoZXMuIFRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zIGFwcGx5IHRvIG1vZGlmaWNhdGlvbnM6CisKKyAgICAgYS4gTW9kaWZpY2F0aW9ucyBtdXN0IG5vdCBhbHRlciBvciByZW1vdmUgYW55IGNvcHlyaWdodCBub3RpY2VzIGluCisgICAgICAgIHRoZSBTb2Z0d2FyZS4KKworICAgICBiLiBXaGVuIG1vZGlmaWNhdGlvbnMgdG8gdGhlIFNvZnR3YXJlIGFyZSByZWxlYXNlZCB1bmRlciB0aGlzCisgICAgICAgIGxpY2Vuc2UsIGEgbm9uLWV4Y2x1c2l2ZSByb3lhbHR5LWZyZWUgcmlnaHQgaXMgZ3JhbnRlZCB0byB0aGUKKyAgICAgICAgaW5pdGlhbCBkZXZlbG9wZXIgb2YgdGhlIFNvZnR3YXJlIHRvIGRpc3RyaWJ1dGUgeW91ciBtb2RpZmljYXRpb24KKyAgICAgICAgaW4gZnV0dXJlIHZlcnNpb25zIG9mIHRoZSBTb2Z0d2FyZSBwcm92aWRlZCBzdWNoIHZlcnNpb25zIHJlbWFpbgorICAgICAgICBhdmFpbGFibGUgdW5kZXIgdGhlc2UgdGVybXMgaW4gYWRkaXRpb24gdG8gYW55IG90aGVyIGxpY2Vuc2Uocykgb2YKKyAgICAgICAgdGhlIGluaXRpYWwgZGV2ZWxvcGVyLgorCis0LiBZb3UgbWF5IGRpc3RyaWJ1dGUgbWFjaGluZS1leGVjdXRhYmxlIGZvcm1zIG9mIHRoZSBTb2Z0d2FyZSBvcgorICAgbWFjaGluZS1leGVjdXRhYmxlIGZvcm1zIG9mIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoZSBTb2Z0d2FyZSwgcHJvdmlkZWQKKyAgIHRoYXQgeW91IG1lZXQgdGhlc2UgcmVzdHJpY3Rpb25zOgorCisgICAgIGEuIFlvdSBtdXN0IGluY2x1ZGUgdGhpcyBsaWNlbnNlIGRvY3VtZW50IGluIHRoZSBkaXN0cmlidXRpb24uCisKKyAgICAgYi4gWW91IG11c3QgZW5zdXJlIHRoYXQgYWxsIHJlY2lwaWVudHMgb2YgdGhlIG1hY2hpbmUtZXhlY3V0YWJsZSBmb3JtcworICAgICAgICBhcmUgYWxzbyBhYmxlIHRvIHJlY2VpdmUgdGhlIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUKKyAgICAgICAgdG8gdGhlIGRpc3RyaWJ1dGVkIFNvZnR3YXJlLCBpbmNsdWRpbmcgYWxsIG1vZGlmaWNhdGlvbnMsIHdpdGhvdXQKKyAgICAgICAgYW55IGNoYXJnZSBiZXlvbmQgdGhlIGNvc3RzIG9mIGRhdGEgdHJhbnNmZXIsIGFuZCBwbGFjZSBwcm9taW5lbnQKKyAgICAgICAgbm90aWNlcyBpbiB0aGUgZGlzdHJpYnV0aW9uIGV4cGxhaW5pbmcgdGhpcy4KKworICAgICBjLiBZb3UgbXVzdCBlbnN1cmUgdGhhdCBhbGwgbW9kaWZpY2F0aW9ucyBpbmNsdWRlZCBpbiB0aGUKKyAgICAgICAgbWFjaGluZS1leGVjdXRhYmxlIGZvcm1zIGFyZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMKKyAgICAgICAgbGljZW5zZS4KKworNS4gWW91IG1heSB1c2UgdGhlIG9yaWdpbmFsIG9yIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoZSBTb2Z0d2FyZSB0bworICAgY29tcGlsZSwgbGluayBhbmQgcnVuIGFwcGxpY2F0aW9uIHByb2dyYW1zIGxlZ2FsbHkgZGV2ZWxvcGVkIGJ5IHlvdQorICAgb3IgYnkgb3RoZXJzLgorCis2LiBZb3UgbWF5IGRldmVsb3AgYXBwbGljYXRpb24gcHJvZ3JhbXMsIHJldXNhYmxlIGNvbXBvbmVudHMgYW5kIG90aGVyCisgICBzb2Z0d2FyZSBpdGVtcyB0aGF0IGxpbmsgd2l0aCB0aGUgb3JpZ2luYWwgb3IgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhlCisgICBTb2Z0d2FyZS4gIFRoZXNlIGl0ZW1zLCB3aGVuIGRpc3RyaWJ1dGVkLCBhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nCisgICByZXF1aXJlbWVudHM6CisKKyAgICAgYS4gWW91IG11c3QgZW5zdXJlIHRoYXQgYWxsIHJlY2lwaWVudHMgb2YgbWFjaGluZS1leGVjdXRhYmxlIGZvcm1zIG9mCisgICAgICAgIHRoZXNlIGl0ZW1zIGFyZSBhbHNvIGFibGUgdG8gcmVjZWl2ZSBhbmQgdXNlIHRoZSBjb21wbGV0ZQorICAgICAgICBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIHRvIHRoZSBpdGVtcyB3aXRob3V0IGFueSBjaGFyZ2UKKyAgICAgICAgYmV5b25kIHRoZSBjb3N0cyBvZiBkYXRhIHRyYW5zZmVyLgorCisgICAgIGIuIFlvdSBtdXN0IGV4cGxpY2l0bHkgbGljZW5zZSBhbGwgcmVjaXBpZW50cyBvZiB5b3VyIGl0ZW1zIHRvIHVzZQorICAgICAgICBhbmQgcmUtZGlzdHJpYnV0ZSBvcmlnaW5hbCBhbmQgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhlIGl0ZW1zIGluCisgICAgICAgIGJvdGggbWFjaGluZS1leGVjdXRhYmxlIGFuZCBzb3VyY2UgY29kZSBmb3Jtcy4gVGhlIHJlY2lwaWVudHMgbXVzdAorICAgICAgICBiZSBhYmxlIHRvIGRvIHNvIHdpdGhvdXQgYW55IGNoYXJnZXMgd2hhdHNvZXZlciwgYW5kIHRoZXkgbXVzdCBiZQorICAgICAgICBhYmxlIHRvIHJlLWRpc3RyaWJ1dGUgdG8gYW55b25lIHRoZXkgY2hvb3NlLgorCisKKyAgICAgYy4gSWYgdGhlIGl0ZW1zIGFyZSBub3QgYXZhaWxhYmxlIHRvIHRoZSBnZW5lcmFsIHB1YmxpYywgYW5kIHRoZQorICAgICAgICBpbml0aWFsIGRldmVsb3BlciBvZiB0aGUgU29mdHdhcmUgcmVxdWVzdHMgYSBjb3B5IG9mIHRoZSBpdGVtcywKKyAgICAgICAgdGhlbiB5b3UgbXVzdCBzdXBwbHkgb25lLgorCisJCQkgICAgTGltaXRhdGlvbnMgb2YgTGlhYmlsaXR5CisKK0luIG5vIGV2ZW50IHNoYWxsIHRoZSBpbml0aWFsIGRldmVsb3BlcnMgb3IgY29weXJpZ2h0IGhvbGRlcnMgYmUgbGlhYmxlCitmb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgaW5jbHVkaW5nIC0gYnV0IG5vdCByZXN0cmljdGVkIHRvIC0gbG9zdAorcmV2ZW51ZSBvciBwcm9maXRzIG9yIG90aGVyIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IKK2NvbnNlcXVlbnRpYWwgZGFtYWdlcywgZXZlbiBpZiB0aGV5IGhhdmUgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eQorb2Ygc3VjaCBkYW1hZ2VzLCBleGNlcHQgdG8gdGhlIGV4dGVudCBpbnZhcmlhYmxlIGxhdywgaWYgYW55LCBwcm92aWRlcworb3RoZXJ3aXNlLgorCisJCQkgICAgICAgICAgTm8gV2FycmFudHkKKworVGhlIFNvZnR3YXJlIGFuZCB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQgYXJlIHByb3ZpZGVkIEFTIElTIHdpdGggTk8gV0FSUkFOVFkKK09GIEFOWSBLSU5ELCBJTkNMVURJTkcgVEhFIFdBUlJBTlRZIE9GIERFU0lHTiwgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCitGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaG9pY2Ugb2YgTGF3CisKK1RoaXMgbGljZW5zZSBpcyBnb3Zlcm5lZCBieSB0aGUgTGF3cyBvZiBOb3J3YXkuIERpc3B1dGVzIHNoYWxsIGJlIHNldHRsZWQKK2J5IE9zbG8gQ2l0eSBDb3VydC4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL1FVQUtFNCBiL2xpY2Vuc2VzL1FVQUtFNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41Y2UyZmFlCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvUVVBS0U0CkBAIC0wLDAgKzEsNjUgQEAKK1NPRlRXQVJFIExJQ0VOU0UgQUdSRUVNRU5UCisKK1RoaXMgUVVBS0UgNCh0bSkgTGltaXRlZCBVc2UgU29mdHdhcmUgTGljZW5zZSBBZ3JlZW1lbnQgKHRoaXMgIkFncmVlbWVudCIpIGlzIGEgbGVnYWwgYWdyZWVtZW50IGFtb25nIHlvdSwgdGhlIGVuZC11c2VyLCBhbmQgSWQgU29mdHdhcmUsIEluYy4gKCJJZCBTb2Z0d2FyZSIpLCBhbmQgQWN0aXZpc2lvbiBQdWJsaXNoaW5nLCBJbmMuICgiQWN0aXZpc2lvbiIpLiAgQlkgQ09OVElOVUlORyBUSEUgSU5TVEFMTEFUSU9OIE9GIFRIRSBHQU1FIFBST0dSQU0gRU5USVRMRUQgUVVBS0UgNCh0bSkgKFRIRSAiU09GVFdBUkUiKSwgQlkgTE9BRElORyBPUiBSVU5OSU5HIFRIRSBTT0ZUV0FSRSwgT1IgQlkgUExBQ0lORyBPUiBDT1BZSU5HIFRIRSBTT0ZUV0FSRSBPTlRPIFlPVVIgQ09NUFVURVIgSEFSRCBEUklWRSwgQ09NUFVURVIgUkFNIE9SIE9USEVSIFNUT1JBR0UsIFlPVSBBUkUgQUdSRUVJTkcgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5ULiAgWU9VIEFDS05PV0xFREdFIEFORCBVTkRFUlNUQU5EIFRIQVQgSU4gT1JERVIgVE8gT1BFUkFURSBUSEUgU09GVFdBUkUsIFlPVSBNVVNUIEhBVkUgVEhFIEZVTEwgVkVSU0lPTiBPRiBUSEUgSUQgU09GVFdBUkUgR0FNRSBFTlRJVExFRCBRVUFLRSA0KHRtKSBJTlNUQUxMRUQgT04gWU9VUiBDT01QVVRFUi4KKworMS4JR3JhbnQgb2YgTGljZW5zZS4gIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBwcm92aXNpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBzbyBsb25nIGFzIHlvdSBmdWxseSBjb21wbHkgYXQgYWxsIHRpbWVzIHdpdGggdGhpcyBBZ3JlZW1lbnQsIElkIFNvZnR3YXJlIGdyYW50cyB0byB5b3UgdGhlIG5vbi1leGNsdXNpdmUgYW5kIGxpbWl0ZWQgcmlnaHQgdG8gdXNlIHRoZSBTb2Z0d2FyZSBvbmx5IGluIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgZm9ybS4gIFRoZSB0ZXJtICJTb2Z0d2FyZSIgaW5jbHVkZXMgYWxsIGVsZW1lbnRzIG9mIHRoZSBTb2Z0d2FyZSwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGRhdGEgZmlsZXMgYW5kIHNjcmVlbiBkaXNwbGF5cy4gIFlvdSBhcmUgbm90IHJlY2VpdmluZyBhbnkgb3duZXJzaGlwIG9yIHByb3ByaWV0YXJ5IHJpZ2h0LCB0aXRsZSwgb3IgaW50ZXJlc3QgaW4gb3IgdG8gdGhlIFNvZnR3YXJlIG9yIHRoZSBjb3B5cmlnaHRzLCB0cmFkZW1hcmtzLCBvciBvdGhlciByaWdodHMgcmVsYXRlZCB0aGVyZXRvLiAgRm9yIHB1cnBvc2VzIG9mIHRoZSBmaXJzdCBzZW50ZW5jZSBvZiB0aGlzIFNlY3Rpb24sICJ1c2UiIG1lYW5zIGxvYWRpbmcgdGhlIFNvZnR3YXJlIGludG8gUkFNIGFuZC9vciBvbnRvIGNvbXB1dGVyIGhhcmQgZHJpdmUsIGFzIHdlbGwgYXMgaW5zdGFsbGF0aW9uIG9mIHRoZSBTb2Z0d2FyZSBvbiBhIGhhcmQgZGlzayBvciBvdGhlciBzdG9yYWdlIGRldmljZSwgYW5kIG1lYW5zIHRoZSB1c2VzIHBlcm1pdHRlZCBpbiBTZWN0aW9ucyAyIGFuZCA1IGhlcmVpbmJlbG93LiAgWW91IGFncmVlIHRoYXQgdGhlIFNvZnR3YXJlIHdpbGwgbm90IGJlIGRvd25sb2FkZWQsIHNoaXBwZWQsIHRyYW5zZmVycmVkLCBleHBvcnRlZCBvciByZS1leHBvcnRlZCBpbnRvIGFueSBjb3VudHJ5IGluIHZpb2xhdGlvbiBvZiB0aGUgVW5pdGVkIFN0YXRlcyBFeHBvcnQgQWRtaW5pc3RyYXRpb24gQWN0IChvciBhbnkgb3RoZXIgbGF3IGdvdmVybmluZyBzdWNoIG1hdHRlcnMpIGJ5IHlvdSBvciBhbnlvbmUgYXQgeW91ciBkaXJlY3Rpb24sIGFuZCB0aGF0IHlvdSB3aWxsIG5vdCB1dGlsaXplIGFuZCB3aWxsIG5vdCBhdXRob3JpemUgYW55b25lIHRvIHV0aWxpemUgdGhlIFNvZnR3YXJlIGluIGFueSBvdGhlciBtYW5uZXIgaW4gdmlvbGF0aW9uIG9mIGFueSBhcHBsaWNhYmxlIGxhdy4gIFRoZSBTb2Z0d2FyZSBzaGFsbCBub3QgYmUgZG93bmxvYWRlZCBvciBvdGhlcndpc2UgZXhwb3J0ZWQgb3IgcmUtZXhwb3J0ZWQgaW50byAob3IgdG8gYSBuYXRpb25hbCBvciByZXNpZGVudCBvZikgYW55IGNvdW50cnkgdG8gd2hpY2ggdGhlIFVuaXRlZCBTdGF0ZXMgaGFzIGVtYmFyZ29lZCBnb29kcywgb3IgdG8gYW55b25lIG9yIGludG8gYW55IGNvdW50cnkgd2hvL3RoYXQgYXJlIHByb2hpYml0ZWQsIGJ5IGFwcGxpY2FibGUgbGF3LCBmcm9tIHJlY2VpdmluZyBzdWNoIHByb3BlcnR5LiAgSW4gZXhlcmNpc2luZyB5b3VyIGxpbWl0ZWQgcmlnaHRzIGhlcmV1bmRlciwgeW91IHNoYWxsIGNvbXBseSwgYXQgYWxsIHRpbWVzLCB3aXRoIGFsbCBhcHBsaWNhYmxlIGxhd3MsIHJlZ3VsYXRpb25zLCBvcmRpbmFuY2VzLCBhbmQgc3RhdHV0ZXMuICBJZCBTb2Z0d2FyZSByZXNlcnZlcyBhbGwgcmlnaHRzIG5vdCBncmFudGVkIGluIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgYWxsIHJpZ2h0cyB0byBJZCBTb2Z0d2FyZSdzIHRyYWRlbWFya3MuCisKKzIuCVBlcm1pdHRlZCBOZXcgQ3JlYXRpb25zLiAgU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIHByb3Zpc2lvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIHNvIGxvbmcgYXMgeW91IGZ1bGx5IGNvbXBseSBhdCBhbGwgdGltZXMgd2l0aCB0aGlzIEFncmVlbWVudCwgSWQgU29mdHdhcmUgZ3JhbnRzIHRvIHlvdSB0aGUgbm9uLWV4Y2x1c2l2ZSBhbmQgbGltaXRlZCByaWdodCB0byBjcmVhdGUgZm9yIHRoZSBTb2Z0d2FyZSAoZXhjZXB0IGFueSBTb2Z0d2FyZSBjb2RlKSB5b3VyIG93biBtb2RpZmljYXRpb25zICh0aGUgIk5ldyBDcmVhdGlvbnMiKSB0aGF0IHNoYWxsIG9wZXJhdGUgb25seSB3aXRoIHRoZSBTb2Z0d2FyZSAoYnV0IG5vdCBhbnkgZGVtbywgdGVzdCwgb3Igb3RoZXIgdmVyc2lvbiBvZiB0aGUgU29mdHdhcmUsIGFuZCBub3Qgd2l0aCBRVUFLRSA0KHRtKSBpbmRlcGVuZGVudCBvZiB0aGUgU29mdHdhcmUpLiAgWW91IG1heSBpbmNsdWRlIHdpdGhpbiB0aGUgTmV3IENyZWF0aW9ucyBjZXJ0YWluIHRleHR1cmVzIGFuZCBvdGhlciBpbWFnZXMgKHRoZSAiU29mdHdhcmUgSW1hZ2VzIikgZnJvbSB0aGUgU29mdHdhcmUuICBZb3Ugc2hhbGwgbm90IGNyZWF0ZSBhbnkgTmV3IENyZWF0aW9ucyB0aGF0IGluZnJpbmdlIGFnYWluc3QgYW55IHRoaXJkLXBhcnR5IHJpZ2h0IG9yIHRoYXQgYXJlIGxpYmVsb3VzLCBkZWZhbWF0b3J5LCBvYnNjZW5lLCBmYWxzZSwgbWlzbGVhZGluZywgb3Igb3RoZXJ3aXNlIGlsbGVnYWwgb3IgdW5sYXdmdWwuICBZb3UgYWdyZWUgdGhhdCB0aGUgTmV3IENyZWF0aW9ucyB3aWxsIG5vdCBiZSBkb3dubG9hZGVkLCBzaGlwcGVkLCB0cmFuc2ZlcnJlZCwgZXhwb3J0ZWQsIG9yIHJlLWV4cG9ydGVkIGludG8gYW55IGNvdW50cnkgaW4gdmlvbGF0aW9uIG9mIHRoZSBVbml0ZWQgU3RhdGVzIEV4cG9ydCBBZG1pbmlzdHJhdGlvbiBBY3QgKG9yIGFueSBvdGhlciBsYXcgZ292ZXJuaW5nIHN1Y2ggbWF0dGVycykgYnkgeW91IG9yIGFueW9uZSBhdCB5b3VyIGRpcmVjdGlvbiwgYW5kIHRoYXQgeW91IHdpbGwgbm90IHV0aWxpemUgYW5kIHdpbGwgbm90IGF1dGhvcml6ZSBhbnlvbmUgdG8gdXRpbGl6ZSB0aGUgTmV3IENyZWF0aW9ucyBpbiBhbnkgb3RoZXIgbWFubmVyIGluIHZpb2xhdGlvbiBvZiBhbnkgYXBwbGljYWJsZSBsYXcuICBUaGUgTmV3IENyZWF0aW9ucyBzaGFsbCBub3QgYmUgZG93bmxvYWRlZCBvciBvdGhlcndpc2UgZXhwb3J0ZWQgb3IgcmUtZXhwb3J0ZWQgaW50byAob3IgdG8gYSBuYXRpb25hbCBvciByZXNpZGVudCBvZikgYW55IGNvdW50cnkgdG8gd2hpY2ggdGhlIFVuaXRlZCBTdGF0ZXMgaGFzIGVtYmFyZ29lZCBnb29kcyBvciB0byBhbnlvbmUgb3IgaW50byBhbnkgY291bnRyeSB3aG8vdGhhdCBhcmUgcHJvaGliaXRlZCwgYnkgYXBwbGljYWJsZSBsYXcsIGZyb20gcmVjZWl2aW5nIHN1Y2ggcHJvcGVydHkuICBZb3Ugc2hhbGwgbm90IHJlbnQsIHNlbGwsIGxlYXNlLCBsZW5kLCBvZmZlciBvbiBhIHBheS1wZXItcGxheSBiYXNpcywgb3Igb3RoZXJ3aXNlIGNvbW1lcmNpYWxseSBleHBsb2l0IG9yIGNvbW1lcmNpYWxseSBkaXN0cmlidXRlIHRoZSBOZXcgQ3JlYXRpb25zLiAgWW91IGFyZSBwZXJtaXR0ZWQgdG8gZGlzdHJpYnV0ZSwgd2l0aG91dCBhbnkgY29zdCBvciBjaGFyZ2UsIHRoZSBOZXcgQ3JlYXRpb25zIG9ubHkgdG8gb3RoZXIgZW5kLXVzZXJzIHNvIGxvbmcgYXMgc3VjaCBkaXN0cmlidXRpb24gaXMgbm90IGluZnJpbmdpbmcgYWdhaW5zdCBhbnkgdGhpcmQtcGFydHkgcmlnaHQgYW5kIG90aGVyd2lzZSBpcyBub3QgaWxsZWdhbCBvciB1bmxhd2Z1bC4gIEFzIG5vdGVkIGJlbG93LCBpbiB0aGUgZXZlbnQgeW91IGNvbW1pdCBhbnkgYnJlYWNoIG9mIHRoaXMgQWdyZWVtZW50LCB5b3VyIGxpY2Vuc2UgYW5kIHRoaXMgQWdyZWVtZW50IGF1dG9tYXRpY2FsbHkgc2hhbGwgdGVybWluYXRlLCB3aXRob3V0IG5vdGljZS4KKworMy4JUHJvaGliaXRpb25zIHdpdGggUmVnYXJkIHRvIHRoZSBTb2Z0d2FyZS4gIFlvdSwgd2hldGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBzaGFsbCBub3QgZG8gYW55IG9mIHRoZSBmb2xsb3dpbmcgYWN0czoKK2EuCXJlbnQgdGhlIFNvZnR3YXJlOworYi4Jc2VsbCB0aGUgU29mdHdhcmU7CitjLglsZWFzZSBvciBsZW5kIHRoZSBTb2Z0d2FyZTsKK2QuCW9mZmVyIHRoZSBTb2Z0d2FyZSBvbiBhIHBheS1wZXItcGxheSBiYXNpczsKK2UuCWRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGJ5IGFueSBtZWFucywgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIEludGVybmV0IG9yIG90aGVyIGVsZWN0cm9uaWMgZGlzdHJpYnV0aW9uLCBkaXJlY3QgbWFpbCwgcmV0YWlsLCBtYWlsIG9yZGVyLCBvciBvdGhlciBtZWFuczsKK2YuCWluIGFueSBvdGhlciBtYW5uZXIgYW5kIHRocm91Z2ggYW55IG1lZGl1bSB3aGF0c29ldmVyIGNvbW1lcmNpYWxseSBleHBsb2l0IHRoZSBTb2Z0d2FyZSBvciB1c2UgdGhlIFNvZnR3YXJlIGZvciBhbnkgY29tbWVyY2lhbCBwdXJwb3NlOworZy4JZGlzYXNzZW1ibGUsIHJldmVyc2UgZW5naW5lZXIsIGRlY29tcGlsZSwgbW9kaWZ5IChleGNlcHQgYXMgcGVybWl0dGVkIHVuZGVyIFNlY3Rpb24gMiBoZXJlaW5hYm92ZSkgb3IgYWx0ZXIgdGhlIFNvZnR3YXJlOworaC4JdHJhbnNsYXRlIHRoZSBTb2Z0d2FyZTsKK2kuCXJlcHJvZHVjZSBvciBjb3B5IHRoZSBTb2Z0d2FyZSAoZXhjZXB0IGFzIHBlcm1pdHRlZCB1bmRlciBTZWN0aW9uIDUgaGVyZWluYmVsb3cpOworai4JcHVibGljbHkgZGlzcGxheSB0aGUgU29mdHdhcmU7CitrLglwcmVwYXJlIG9yIGRldmVsb3AgZGVyaXZhdGl2ZSB3b3JrcyBiYXNlZCB1cG9uIHRoZSBTb2Z0d2FyZTsKK2wuCXJlbW92ZSBvciBhbHRlciBhbnkgbm90aWNlcyBvciBvdGhlciBtYXJraW5ncyBvciBsZWdlbmRzLCBzdWNoIGFzIHRyYWRlbWFyayBvciBjb3B5cmlnaHQgbm90aWNlcywgYWZmaXhlZCBvbiBvciB3aXRoaW4gdGhlIFNvZnR3YXJlIG9yIHRoZSBQcmludGVkIE1hdGVyaWFscyAoYXMgZGVmaW5lZCBpbiBTZWN0aW9uIDYgIGhlcmVpbmJlbG93KTsgb3IKK20uCXJlbW92ZSwgYWx0ZXIsIG1vZGlmeSwgZGlzYWJsZSwgb3IgcmVkdWNlIGFueSBvZiB0aGUgYW50aS1waXJhY3kgbWVhc3VyZXMgY29udGFpbmVkIGluIHRoZSBTb2Z0d2FyZSwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIG1lYXN1cmVzIHJlbGF0aW5nIHRvIG11bHRpcGxheWVyIHBsYXkuCisKKzQuCVByb2hpYml0aW9uIGFnYWluc3QgQ2hlYXQgUHJvZ3JhbXMuICBBbnkgYXR0ZW1wdCBieSB5b3UsIGVpdGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCB0byBjaXJjdW12ZW50IG9yIGJ5cGFzcyBhbnkgZWxlbWVudCBvZiB0aGUgU29mdHdhcmUgdG8gZ2FpbiBhbnkgYWR2YW50YWdlIGluIG11bHRpcGxheWVyIHBsYXkgb2YgdGhlIFNvZnR3YXJlIGlzIGEgbWF0ZXJpYWwgYnJlYWNoIG9mIHRoaXMgQWdyZWVtZW50LiAgSXQgaXMgYSBtYXRlcmlhbCBicmVhY2ggb2YgdGhpcyBBZ3JlZW1lbnQgZm9yIHlvdSwgd2hldGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCB0byBjcmVhdGUsIGRldmVsb3AsIGNvcHksIHJlcHJvZHVjZSwgZGlzdHJpYnV0ZSwgb3Igb3RoZXJ3aXNlIG1ha2UgYW55IHVzZSBvZiBhbnkgc29mdHdhcmUgcHJvZ3JhbSBvciBhbnkgbW9kaWZpY2F0aW9uIHRvIHRoZSBTb2Z0d2FyZSAoIkNoZWF0IFByb2dyYW0iKSBpdHNlbGYgdGhhdCBlbmFibGVzIG9yIGFsbG93cyB0aGUgdXNlciB0aGVyZW9mIHRvIG9idGFpbiBhbiBhZHZhbnRhZ2Ugb3Igb3RoZXJ3aXNlIGV4cGxvaXQgYW5vdGhlciBTb2Z0d2FyZSBwbGF5ZXIgb3IgdXNlciB3aGVuIHBsYXlpbmcgdGhlIFNvZnR3YXJlIGFnYWluc3Qgb3RoZXIgcGxheWVycyBvciB1c2VycyBvbiBhIGxvY2FsIGFyZWEgbmV0d29yaywgYW55IG90aGVyIG5ldHdvcmssIG9yIG9uIHRoZSBJbnRlcm5ldC4gIEhhY2tpbmcgaW50byB0aGUgZXhlY3V0YWJsZSBvZiB0aGUgU29mdHdhcmUsIG1vZGlmaWNhdGlvbiBvZiB0aGUgU29mdHdhcmUsIG9yIGFueSBvdGhlciB1c2Ugb2YgdGhlIFNvZnR3YXJlIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgY3JlYXRpb24sIGRldmVsb3BtZW50LCBvciB1c2Ugb2YgYW55IHN1Y2ggdW5hdXRob3JpemVkIENoZWF0IFByb2dyYW0gaXMgYSBtYXRlcmlhbCBicmVhY2ggb2YgdGhpcyBBZ3JlZW1lbnQuICBDaGVhdCBQcm9ncmFtcyBpbmNsdWRlLCBidXQgYXJlIG5vdCBsaW1pdGVkIHRvLCBwcm9ncmFtcyB0aGF0IGFsbG93IFNvZnR3YXJlIHBsYXllcnMgb3IgdXNlcnMgdG8gc2VlIHRocm91Z2ggd2FsbHMgb3Igb3RoZXIgbGV2ZWwgZ2VvbWV0cnk7IHByb2dyYW1zIHRoYXQgYWxsb3cgU29mdHdhcmUgcGxheWVycyBvciB1c2VycyB0byBjaGFuZ2UgdGhlaXIgcmF0ZSBvZiBzcGVlZCBvdXRzaWRlIHRoZSBhbGxvd2FibGUgbGltaXRzIG9mIHRoZSBTb2Z0d2FyZTsgcHJvZ3JhbXMgdGhhdCBjcmFzaCBlaXRoZXIgYW5kL29yIG90aGVyIFNvZnR3YXJlIHBsYXllcnMsIHVzZXJzLCBQQyBjbGllbnRzLCBvciBuZXR3b3JrIHNlcnZlcnM7IHByb2dyYW1zIHRoYXQgYXV0b21hdGljYWxseSB0YXJnZXQgb3RoZXIgU29mdHdhcmUgcGxheWVycyBvciB1c2VycyAoY29tbW9ubHkgcmVmZXJyZWQgdG8gYXMgImFpbWJvdHMiKSB0aGF0IGF1dG9tYXRpY2FsbHkgc2ltdWxhdGUgU29mdHdhcmUgcGxheWVyIG9yIHVzZXIgaW5wdXQgZm9yIHRoZSBwdXJwb3NlIG9mIGdhaW5pbmcgYW4gYWR2YW50YWdlIG92ZXIgb3RoZXIgU29mdHdhcmUgcGxheWVycyBvciB1c2Vyczsgb3IgYW55IG90aGVyIHByb2dyYW0gb3IgbW9kaWZpY2F0aW9uIHRoYXQgZnVuY3Rpb25zIGluIGEgc2ltaWxhciBjYXBhY2l0eSBvciBhbGxvd3MgYW55IHByb2hpYml0ZWQgY29uZHVjdC4KKwlJbiB0aGUgZXZlbnQgeW91IGJyZWFjaCB0aGlzIFNlY3Rpb24gb3Igb3RoZXJ3aXNlIGJyZWFjaCB0aGlzIEFncmVlbWVudCwgeW91ciBsaWNlbnNlIGFuZCB0aGlzIEFncmVlbWVudCBhdXRvbWF0aWNhbGx5IHNoYWxsIHRlcm1pbmF0ZSwgd2l0aG91dCBub3RpY2UsIGFuZCB5b3Ugc2hhbGwgaGF2ZSBubyByaWdodCB0byBwbGF5IHRoZSBTb2Z0d2FyZSBhZ2FpbnN0IG90aGVyIHBsYXllcnMgb3IgbWFrZSBhbnkgb3RoZXIgdXNlIG9mIHRoZSBTb2Z0d2FyZS4KKworNS4JUGVybWl0dGVkIENvcHlpbmcuICBZb3UgbWF5IG1ha2Ugb25seSB0aGUgZm9sbG93aW5nIGNvcGllcyBvZiB0aGUgU29mdHdhcmU6ICAoaSkgeW91IG1heSBjb3B5IHRoZSBTb2Z0d2FyZSBmcm9tIHRoZSBDRCBST00gdGhhdCB5b3UgcHVyY2hhc2Ugb250byB5b3VyIGNvbXB1dGVyIGhhcmQgZHJpdmU7IChpaSkgeW91IG1heSBjb3B5IHRoZSBTb2Z0d2FyZSBmcm9tIHlvdXIgY29tcHV0ZXIgaGFyZCBkcml2ZSBpbnRvIHlvdXIgY29tcHV0ZXIgUkFNOyBhbmQgKGlpaSkgeW91IG1heSBtYWtlIG9uZSAoMSkgImJhY2sgdXAiIG9yIGFyY2hpdmFsIGNvcHkgb2YgdGhlIFNvZnR3YXJlIG9uIG9uZSAoMSkgaGFyZCBkaXNrLgorCis2LglJbnRlbGxlY3R1YWwgUHJvcGVydHkgUmlnaHRzLiAgQ2VydGFpbiBwcmludGVkIG1hdGVyaWFscyAodGhlICJQcmludGVkIE1hdGVyaWFscyIpIGFjY29tcGFueSB0aGUgU29mdHdhcmUuICBUaGUgU29mdHdhcmUsIHRoZSBQcmludGVkIE1hdGVyaWFscywgYW5kIGFsbCBjb3B5cmlnaHRzLCB0cmFkZW1hcmtzLCBhbmQgYWxsIG90aGVyIGNvbmNlaXZhYmxlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgcmVsYXRlZCB0byB0aGUgU29mdHdhcmUgYW5kIHRoZSBQcmludGVkIE1hdGVyaWFscyBhcmUgb3duZWQgYnkgSWQgU29mdHdhcmUgYW5kIGFyZSBwcm90ZWN0ZWQgYnkgVW5pdGVkIFN0YXRlcyBjb3B5cmlnaHQgbGF3cywgaW50ZXJuYXRpb25hbCB0cmVhdHkgcHJvdmlzaW9ucywgYW5kIGFsbCBhcHBsaWNhYmxlIGxhdywgc3VjaCBhcyB0aGUgTGFuaGFtIEFjdC4gIFlvdSBtdXN0IHRyZWF0IHRoZSBTb2Z0d2FyZSBhbmQgdGhlIFByaW50ZWQgTWF0ZXJpYWxzIGxpa2UgYW55IG90aGVyIGNvcHlyaWdodGVkIG1hdGVyaWFsLCBhcyByZXF1aXJlZCBieSAxNyBVLlMuQy4gc3ViLXNlY3Rpb24gMTAxIGV0IHNlcS4gYW5kIG90aGVyIGFwcGxpY2FibGUgbGF3LiAgWW91IGFncmVlIHRvIHVzZSB5b3VyIGJlc3QgZWZmb3J0cyB0byBzZWUgdGhhdCBhbnkgdXNlciBvZiB0aGUgU29mdHdhcmUgbGljZW5zZWQgaGVyZXVuZGVyLCB0aGUgUHJpbnRlZCBNYXRlcmlhbHMgb3IgdGhlIE5ldyBDcmVhdGlvbnMgY29tcGxpZXMgd2l0aCB0aGlzIEFncmVlbWVudC4gIFlvdSBhZ3JlZSB0aGF0IHlvdSBhcmUgcmVjZWl2aW5nIGEgY29weSBvZiB0aGUgU29mdHdhcmUgYW5kIHRoZSBQcmludGVkIE1hdGVyaWFscyBieSBsaW1pdGVkIGxpY2Vuc2Ugb25seSBhbmQgbm90IGJ5IHNhbGUgYW5kIHRoYXQgdGhlICJmaXJzdCBzYWxlIiBkb2N0cmluZSBvZiAxNyBVLlMuQy4gc3ViLXNlY3Rpb24gMTA5IGRvZXMgbm90IGFwcGx5IHRvIHlvdXIgcmVjZWlwdCBvciB1c2Ugb2YgdGhlIFNvZnR3YXJlIG9yIHRoZSBQcmludGVkIE1hdGVyaWFscy4gIFRoaXMgU2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSBjYW5jZWxsYXRpb24gb3IgdGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQuCis3LglJbmZvcm1hdGlvbiBDb2xsZWN0aW9uLiAgWW91IGNvbnNlbnQgdG8gQWN0aXZpc2lvbiBvYnRhaW5pbmcgY2VydGFpbiBpbmZvcm1hdGlvbiBhYm91dCB5b3VyIGNvbXB1dGVyIGFuZCBpdHMgb3BlcmF0aW5nIHN5c3RlbSwgaW5jbHVkaW5nIHRoZSB0eXBlIGFuZCBzcGVlZCBvZiB0aGUgY2VudHJhbCBwcm9jZXNzaW5nIHVuaXQsIHRoZSBhbW91bnQgb2YgUkFNIGluIHRoZSBjZW50cmFsIHByb2Nlc3NpbmcgdW5pdCwgdGhlIG9wZXJhdGluZyBzeXN0ZW0sIHRoZSB0eXBlIG9mIHZpZGVvIGNhcmQgdXNlZCwgd2hldGhlciB5b3VyIGNvbXB1dGVyIHVzZXMgYSBDRCBvciBEVkQgZHJpdmUsIGFuZCB3aGV0aGVyIHlvdXIgY29tcHV0ZXIgaXMgZXF1aXBwZWQgd2l0aCBhIGpveXN0aWNrLCB3aXRob3V0IGFueSBmdXJ0aGVyIG5vdGljZSB0byB5b3UuICBTdWNoIGluZm9ybWF0aW9uIGlzIG5vdCBwZXJzb25hbGx5IGlkZW50aWZpYWJsZS4gVGhlIGNvbXB1dGVyIGluZm9ybWF0aW9uIHRoYXQgaXMgY29sbGVjdGVkIHNpbXBseSBoZWxwcyBBY3RpdmlzaW9uIHRvIHVuZGVyc3RhbmQgYW5kIGFuYWx5emUgYnJvYWQsIGFub255bW91cyBtYXJrZXQgaW5mb3JtYXRpb24gYWJvdXQgb3VyIGNvbnN1bWVycywgc28gdGhhdCBBY3RpdmlzaW9uIGNhbiBiZXR0ZXIgc2VydmUgdGhlaXIgbmVlZHMgYW5kIGRlbWFuZHMuICBBY3RpdmlzaW9uIHdpbGwgb25seSBzaGFyZSBzdWNoIGluZm9ybWF0aW9uIHdpdGggb3RoZXJzLCBpZiBhdCBhbGwsIGluIHRoZSBhZ2dyZWdhdGUsIHJlZmxlY3Rpbmcgb3ZlcmFsbCBjb21wdXRlciBmZWF0dXJlcyBhbmQgY2FwYWJpbGl0aWVzLgorCis4LglOTyBJRCBTT0ZUV0FSRSBXQVJSQU5USUVTLiAgSUQgU09GVFdBUkUgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTLCBXSEVUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBBTkQgQU5ZIFdBUlJBTlRZIE9GIE5PTi1JTkZSSU5HRU1FTlQsIFdJVEggUkVTUEVDVCBUTyBUSEUgU09GVFdBUkUsIFRIRSBQUklOVEVEIE1BVEVSSUFMUywgVEhFIFNPRlRXQVJFIElNQUdFUywgQU5EIE9USEVSV0lTRS4gIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBXSVRIT1VUIFdBUlJBTlRZLiAgSUQgU09GVFdBUkUgRE9FUyBOT1QgV0FSUkFOVCBUSEFUIFRIRSBTT0ZUV0FSRSBPUiBUSEUgT1BFUkFUSU9OIE9GIFRIRSBTT0ZUV0FSRSBXSUxMIEJFIFVOSU5URVJSVVBURUQgT1IgRVJST1ItRlJFRSBPUiBUSEFUIFRIRSBTT0ZUV0FSRSBXSUxMIE1FRVQgWU9VUiBTUEVDSUZJQyBPUiBTUEVDSUFMIFJFUVVJUkVNRU5UUy4gIEFERElUSU9OQUwgU1RBVEVNRU5UUywgV0hFVEhFUiBPUkFMIE9SIFdSSVRURU4sIERPIE5PVCBDT05TVElUVVRFIFdBUlJBTlRJRVMgQlkgSUQgU09GVFdBUkUgQU5EIFNIT1VMRCBOT1QgQkUgUkVMSUVEIFVQT04uICBUaGlzIFNlY3Rpb24gc2hhbGwgc3Vydml2ZSB0aGUgY2FuY2VsbGF0aW9uIG9yIHRlcm1pbmF0aW9uIG9mIHRoaXMgQWdyZWVtZW50LgorCis5LglMaW1pdGVkIEFjdGl2aXNpb24gV2FycmFudHkuICBBY3RpdmlzaW9uIHdhcnJhbnRzIHRvIHRoZSBvcmlnaW5hbCBjb25zdW1lciBwdXJjaGFzZXIgb2YgdGhlIFNvZnR3YXJlIHRoYXQgdGhlIHJlY29yZGluZyBtZWRpdW0gb24gd2hpY2ggdGhlIFNvZnR3YXJlIGlzIHJlY29yZGVkIHdpbGwgYmUgZnJlZSBmcm9tIGRlZmVjdHMgaW4gbWF0ZXJpYWwgYW5kIHdvcmttYW5zaGlwIGZvciBuaW5ldHkgKDkwKSBkYXlzIGZyb20gdGhlIGRhdGUgb2YgcHVyY2hhc2UuICBJZiB0aGUgcmVjb3JkaW5nIG1lZGl1bSBpcyBmb3VuZCBkZWZlY3RpdmUgd2l0aGluIG5pbmV0eSAoOTApIGRheXMgb2Ygb3JpZ2luYWwgcHVyY2hhc2UsIEFjdGl2aXNpb24gYWdyZWVzIHRvIHJlcGxhY2UsIGZyZWUgb2YgY2hhcmdlLCBhbnkgU29mdHdhcmUgZGlzY292ZXJlZCB0byBiZSBkZWZlY3RpdmUgd2l0aGluIHN1Y2ggcGVyaW9kIHVwb24gaXRzIHJlY2VpcHQgb2YgdGhlIFNvZnR3YXJlLCBwb3N0YWdlIHBhaWQsIHdpdGggdGhlIHByb29mIG9mIHRoZSBkYXRlIG9mIHB1cmNoYXNlLCBhcyBsb25nIGFzIHRoZSBTb2Z0d2FyZSBzdGlsbCBpcyBiZWluZyBtYW51ZmFjdHVyZWQgYnkgQWN0aXZpc2lvbi4gIEluIHRoZSBldmVudCB0aGF0IHRoZSBTb2Z0d2FyZSBubyBsb25nZXIgaXMgYXZhaWxhYmxlLCBBY3RpdmlzaW9uIHJldGFpbnMgdGhlIHJpZ2h0IHRvIHN1YnN0aXR1dGUgYSBzaW1pbGFyIGdhbWUgcHJvZ3JhbSBvZiBlcXVhbCBvciBncmVhdGVyIHZhbHVlLiAgVGhpcyB3YXJyYW50eSBpcyBsaW1pdGVkIHRvIHRoZSByZWNvcmRpbmcgbWVkaXVtIGNvbnRhaW5pbmcgdGhlIFNvZnR3YXJlIGFzIG9yaWdpbmFsbHkgcHJvdmlkZWQgYnkgQWN0aXZpc2lvbiBhbmQgaXMgbm90IGFwcGxpY2FibGUgdG8gbm9ybWFsIHdlYXIgYW5kIHRlYXIuIFRoaXMgd2FycmFudHkgc2hhbGwgbm90IGJlIGFwcGxpY2FibGUgYW5kIHNoYWxsIGJlIHZvaWQgaWYgdGhlIGRlZmVjdCBoYXMgYXJpc2VuIHRocm91Z2ggYWJ1c2UsIG1pc3RyZWF0bWVudCwgb3IgbmVnbGVjdC4KK0VYQ0VQVCBBUyBTRVQgRk9SVEggQUJPVkUsIFRISVMgV0FSUkFOVFkgSVMgSU4gTElFVSBPRiBBTEwgT1RIRVIgV0FSUkFOVElFUywgV0hFVEhFUiBPUkFMIE9SIFdSSVRURU4sIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEFOWSBXQVJSQU5UWSBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUiBOT04tSU5GUklOR0VNRU5ULCBBTkQgTk8gT1RIRVIgUkVQUkVTRU5UQVRJT05TIE9SIENMQUlNUyBPRiBBTlkgS0lORCBTSEFMTCBCRSBCSU5ESU5HIE9OIE9SIE9CTElHQVRFIEFDVElWSVNJT04uCitXaGVuIHJldHVybmluZyB0aGUgU29mdHdhcmUgZm9yIHdhcnJhbnR5IHJlcGxhY2VtZW50LCB0aGUgb3JpZ2luYWwgU29mdHdhcmUgZGlza3MgbXVzdCBiZSBzZW50IG9ubHkgaW4gcHJvdGVjdGl2ZSBwYWNrYWdpbmcgYW5kIGluY2x1ZGU6ICAoMSkgcGhvdG9jb3B5IG9mIHlvdXIgZGF0ZWQgc2FsZXMgcmVjZWlwdDsgKDIpIHlvdXIgbmFtZSBhbmQgcmV0dXJuIGFkZHJlc3MgdHlwZWQgb3IgY2xlYXJseSBwcmludGVkOyAoMykgYSBicmllZiBub3RlIGRlc2NyaWJpbmcgdGhlIGRlZmVjdCwgdGhlIHByb2JsZW0ocykgeW91IGFyZSBlbmNvdW50ZXJpbmcsIGFuZCB0aGUgc3lzdGVtIG9uIHdoaWNoIHlvdSBhcmUgcnVubmluZyB0aGUgU29mdHdhcmU7IGFuZCAoNCkgaWYgeW91IGFyZSByZXR1cm5pbmcgdGhlIFNvZnR3YXJlIGFmdGVyIHRoZSBuaW5ldHkgKDkwKSBkYXkgd2FycmFudHkgcGVyaW9kLCBidXQgd2l0aGluIG9uZSAoMSkgeWVhciBhZnRlciB0aGUgZGF0ZSBvZiBwdXJjaGFzZSwgcGxlYXNlIGluY2x1ZGUgY2hlY2sgb3IgbW9uZXkgb3JkZXIgZm9yICQxMC4wMCBVLlMuIChBJDI1IGZvciBBdXN0cmFsaWEgKHN1YmplY3QgdG8gYXZhaWxhYmlsaXR5KSwgb3IgwqM2LjAwIGZvciBFdXJvcGUpIGN1cnJlbmN5IHBlciBDRCBvciBmbG9wcHkgZGlzayByZXBsYWNlbWVudCBvciAkMTUuMDAgVS5TLiggwqM5LjAwIGZvciBFdXJvcGUpIHBlciBEVkQgcmVwbGFjZW1lbnQuCisKK05vdGU6ICBDZXJ0aWZpZWQgbWFpbCByZWNvbW1lbmRlZC4gSW4gdGhlIFVuaXRlZCBTdGF0ZXMsIHNlbmQgdG86CitXYXJyYW50eSBSZXBsYWNlbWVudHMKK0FjdGl2aXNpb24sIEluYy4KK1AuTy4gQm94IDY3NzEzCitMb3MgQW5nZWxlcywgQ2FsaWZvcm5pYSAgOTAwNjcKKworSW4gRXVyb3BlLCBzZW5kIHRvOgorV2FycmFudHkgUmVwbGFjZW1lbnRzCitBY3RpdmlzaW9uCitQYXJsaWFtZW50IEhvdXNlCitTdC4gTGF1cmVuY2UgV2F5CitTbG91Z2gsIEJlcmtzaGlyZSBTTDEgMkJXCitVbml0ZWQgS2luZ2RvbQorCitJbiBBdXN0cmFsaWEgYW5kIEFzaWEgUGFjaWZpYyB0ZXJyaXRvcmllcywgc2VuZCB0bzoKK1dhcnJhbnR5IFJlcGxhY2VtZW50cworQWN0aXZpc2lvbgorTGV2ZWwgNSwgNTEgUmF3c29uIFN0cmVldAorRXBwaW5nLCBOU1cgMjEyMQorQXVzdHJhbGlhCisKKzEwLglHb3Zlcm5pbmcgTGF3LCBWZW51ZSwgSW5kZW1uaXR5LCBhbmQgTGlhYmlsaXR5IExpbWl0YXRpb24uICBUaGlzIEFncmVlbWVudCBzaGFsbCBiZSBjb25zdHJ1ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIGFuZCBnb3Zlcm5lZCBieSB0aGUgYXBwbGljYWJsZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBUZXhhcyAoYnV0IGV4Y2x1ZGluZyBjb25mbGljdHMgb2YgbGF3cyBwcmluY2lwbGVzKSBhbmQgYXBwbGljYWJsZSBVbml0ZWQgU3RhdGVzIGZlZGVyYWwgbGF3LiAgRXhjZXB0IGFzIHNldCBmb3J0aCBiZWxvdywgZXhjbHVzaXZlIHZlbnVlIGZvciBhbGwgbGl0aWdhdGlvbiByZWdhcmRpbmcgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgaW4gRGFsbGFzIENvdW50eSwgVGV4YXMsIGFuZCB5b3UgYWdyZWUgdG8gc3VibWl0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIGZlZGVyYWwgYW5kIHN0YXRlIGNvdXJ0cyBpbiBEYWxsYXMgQ291bnR5LCBUZXhhcywgZm9yIGFueSBzdWNoIGxpdGlnYXRpb24uICBFeGNsdXNpdmUgdmVudWUgZm9yIGFsbCBsaXRpZ2F0aW9uIGludm9sdmluZyBBY3RpdmlzaW9uLCBidXQgbm90IGludm9sdmluZyBJZCBTb2Z0d2FyZSwgd2l0aCByZWdhcmQgdG8gdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgaW4gTG9zIEFuZ2VsZXMgQ291bnR5LCBDYWxpZm9ybmlhLCBhbmQgeW91IGFncmVlIHRvIHN1Ym1pdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBjb3VydHMgaW4gTG9zIEFuZ2VsZXMsIENhbGlmb3JuaWEsIGZvciBhbnkgc3VjaCBsaXRpZ2F0aW9uLiAgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnksIGRlZmVuZCBhbmQgaG9sZCBoYXJtbGVzcyBJZCBTb2Z0d2FyZSBhbmQgQWN0aXZpc2lvbiBhbmQgSWQgU29mdHdhcmUncyBhbmQgQWN0aXZpc2lvbidzIHJlc3BlY3RpdmUgb2ZmaWNlcnMsIGVtcGxveWVlcywgZGlyZWN0b3JzLCBhZ2VudHMsIGxpY2Vuc2VlcyAoZXhjbHVkaW5nIHlvdSksIHN1Yi1saWNlbnNlZXMgKGV4Y2x1ZGluZyB5b3UpLCBzdWNjZXNzb3JzLCBhbmQgYXNzaWducyBmcm9tIGFuZCBhZ2FpbnN0IGFsbCBsb3NzZXMsIGxhd3N1aXRzLCBkYW1hZ2VzLCBjYXVzZXMgb2YgYWN0aW9uLCBhbmQgY2xhaW1zIHJlbGF0aW5nIHRvIGFuZC9vciBhcmlzaW5nIGZyb20gdGhlIE5ldyBDcmVhdGlvbnMgb3IgdGhlIGRpc3RyaWJ1dGlvbiBvciBvdGhlciB1c2Ugb2YgdGhlIE5ldyBDcmVhdGlvbnMgb3IgcmVsYXRpbmcgdG8gYW5kL29yIGFyaXNpbmcgZnJvbSB5b3VyIGJyZWFjaCBvZiB0aGlzIEFncmVlbWVudC4gIFlvdSBhZ3JlZSB0aGF0IHlvdXIgdW5hdXRob3JpemVkIHVzZSBvZiB0aGUgU29mdHdhcmUgSW1hZ2VzLCB0aGUgUHJpbnRlZCBNYXRlcmlhbHMsIG9yIHRoZSBTb2Z0d2FyZSwgb3IgYW55IHBhcnQgdGhlcmVvZiwgaW1tZWRpYXRlbHkgYW5kIGlycmVwYXJhYmx5IG1heSBkYW1hZ2UgSWQgU29mdHdhcmUgc3VjaCB0aGF0IElkIFNvZnR3YXJlIGNvdWxkIG5vdCBiZSBhZGVxdWF0ZWx5IGNvbXBlbnNhdGVkIHNvbGVseSBieSBhIG1vbmV0YXJ5IGF3YXJkLCBhbmQgaW4gc3VjaCBldmVudCwgYXQgSWQgU29mdHdhcmUncyBvcHRpb24sIHRoYXQgSWQgU29mdHdhcmUgc2hhbGwgYmUgZW50aXRsZWQgdG8gYW4gaW5qdW5jdGl2ZSBvcmRlciwgaW4gYWRkaXRpb24gdG8gYWxsIG90aGVyIGF2YWlsYWJsZSByZW1lZGllcywgaW5jbHVkaW5nIGEgbW9uZXRhcnkgYXdhcmQsIHRvIHByb2hpYml0IHN1Y2ggdW5hdXRob3JpemVkIHVzZSB3aXRob3V0IHRoZSBuZWNlc3NpdHkgb2YgSWQgU29mdHdhcmUgcG9zdGluZyBib25kIG9yIG90aGVyIHNlY3VyaXR5LiAgSU4gQU5ZIENBU0UsIElEIFNPRlRXQVJFLCBBQ1RJVklTSU9OLCBBTkQgSUQgU09GVFdBUkUgQU5EIEFDVElWSVNJT04nUyBSRVNQRUNUSVZFIE9GRklDRVJTLCBFTVBMT1lFRVMsIERJUkVDVE9SUywgU0hBUkVIT0xERVJTLCBSRVBSRVNFTlRBVElWRVMsIEFHRU5UUywgTElDRU5TRUVTIChFWENMVURJTkcgWU9VKSwgU1VCLUxJQ0VOU0VFUyAoRVhDTFVESU5HIFlPVSksIFNVQ0NFU1NPUlMsIEFORCBBU1NJR05TIFNIQUxMIE5PVCBCRSBMSUFCTEUgRk9SIExPU1MgT0YgREFUQSwgTE9TUyBPRiBQUk9GSVRTLCBMT1NUIFNBVklOR1MsIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIElORElSRUNUIE9SIFBVTklUSVZFIERBTUFHRVMsIE9SIEFOWSBPVEhFUiBEQU1BR0VTIEFSSVNJTkcgRlJPTSBBTlkgQUxMRUdFRCBDTEFJTSBGT1IgQlJFQUNIIE9GIFdBUlJBTlRZLCBCUkVBQ0ggT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UsIFNUUklDVCBQUk9EVUNUIExJQUJJTElUWSwgT1IgT1RIRVIgTEVHQUwgVEhFT1JZIEVWRU4gSUYgSUQgU09GVFdBUkUsIEFDVElWSVNJT04sIE9SIFRIRUlSIFJFU1BFQ1RJVkUgQUdFTlQoUykgSEFWRSBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIEFOWSBTVUNIIERBTUFHRVMsIE9SIEVWRU4gSUYgU1VDSCBEQU1BR0VTIEFSRSBGT1JFU0VFQUJMRSwgT1IgTElBQkxFIEZPUiBBTlkgQ0xBSU0gQlkgQU5ZIE9USEVSIFBBUlRZLiAgU29tZSBqdXJpc2RpY3Rpb25zIGRvIG5vdCBhbGxvdyB0aGUgZXhjbHVzaW9uIG9yIGxpbWl0YXRpb24gb2YgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHNvIHRoZSBhYm92ZSBsaW1pdGF0aW9uIG9yIGV4Y2x1c2lvbiBtYXkgbm90IGFwcGx5IHRvIHlvdS4gIFRoaXMgU2VjdGlvbiBzaGFsbCBzdXJ2aXZlIHRoZSBjYW5jZWxsYXRpb24gb3IgdGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQuCisKKzExLglVbml0ZWQgU3RhdGVzIEdvdmVybm1lbnQgUmVzdHJpY3RlZCBSaWdodHMuICBUbyB0aGUgZXh0ZW50IGFwcGxpY2FibGUsIHRoZSBVbml0ZWQgU3RhdGVzIEdvdmVybm1lbnQgc2hhbGwgaGF2ZSBvbmx5IHRob3NlIHJpZ2h0cyB0byB1c2UgdGhlIFNvZnR3YXJlIGFuZCB0aGUgUHJpbnRlZCBNYXRlcmlhbHMgYXMgZXhwcmVzc2x5IHN0YXRlZCBhbmQgZXhwcmVzc2x5IGxpbWl0ZWQgYW5kIHJlc3RyaWN0ZWQgaW4gdGhpcyBBZ3JlZW1lbnQsIGFzIHByb3ZpZGVkIGluIDQ4IEMuRi5SLiBzdWItc2VjdGlvbnMgMjI3LjcyMDEgdGhyb3VnaCAyMjcuNzIwNCwgaW5jbHVzaXZlLgorCisxMi4JR2VuZXJhbCBQcm92aXNpb25zLiAgTmVpdGhlciB0aGlzIEFncmVlbWVudCBub3IgYW55IHBhcnQgb3IgcG9ydGlvbiBoZXJlb2Ygc2hhbGwgYmUgYXNzaWduZWQgb3Igc3VibGljZW5zZWQgYnkgeW91LiAgSWQgU29mdHdhcmUgYW5kIEFjdGl2aXNpb24gZWFjaCBtYXkgYXNzaWduIGl0cyByZXNwZWN0aXZlIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCBpbiB0aGUgYXNzaWduaW5nIHBhcnR5J3Mgc29sZSBkaXNjcmV0aW9uLiAgU2hvdWxkIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgYmUgaGVsZCB0byBiZSB2b2lkLCBpbnZhbGlkLCB1bmVuZm9yY2VhYmxlLCBvciBpbGxlZ2FsIGJ5IGEgY291cnQgb2YgY29tcGV0ZW50IGp1cmlzZGljdGlvbiwgdGhlIHZhbGlkaXR5IGFuZCBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgb3RoZXIgcHJvdmlzaW9ucyBzaGFsbCBub3QgYmUgYWZmZWN0ZWQgdGhlcmVieS4gIElmIGFueSBwcm92aXNpb24gaXMgZGV0ZXJtaW5lZCB0byBiZSB1bmVuZm9yY2VhYmxlIGJ5IGEgY291cnQgb2YgY29tcGV0ZW50IGp1cmlzZGljdGlvbiwgeW91IGFncmVlIHRvIGEgbW9kaWZpY2F0aW9uIG9mIHN1Y2ggcHJvdmlzaW9uIHRvIHByb3ZpZGUgZm9yIGVuZm9yY2VtZW50IG9mIHRoZSBwcm92aXNpb24ncyBpbnRlbnQsIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LiAgRmFpbHVyZSBvZiBJZCBTb2Z0d2FyZSBvciBBY3RpdmlzaW9uIHRvIGVuZm9yY2UgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBzaGFsbCBub3QgY29uc3RpdHV0ZSBvciBiZSBjb25zdHJ1ZWQgYXMgYSB3YWl2ZXIgb2Ygc3VjaCBwcm92aXNpb24gb3Igb2YgdGhlIHJpZ2h0IHRvIGVuZm9yY2Ugc3VjaCBwcm92aXNpb24uICBJTU1FRElBVEVMWSBVUE9OIFlPVVIgRkFJTFVSRSBUTyBDT01QTFkgV0lUSCwgT1IgWU9VUiBCUkVBQ0ggT0YgQU5ZIFRFUk0gT1IgUFJPVklTSU9OIE9GIFRISVMgQUdSRUVNRU5ULCBZT1VSIExJQ0VOU0UgR1JBTlRFRCBIRVJFSU4gQU5EIFRISVMgQUdSRUVNRU5UIEFVVE9NQVRJQ0FMTFkgU0hBTEwgVEVSTUlOQVRFLCBXSVRIT1VUIE5PVElDRSwgQU5EIElEIFNPRlRXQVJFIEFORCBBQ1RJVklTSU9OIE1BWSBQVVJTVUUgQUxMIFJFTElFRiBBTkQgUkVNRURJRVMgQUdBSU5TVCBZT1UgVEhBVCBBUkUgQVZBSUxBQkxFIFVOREVSIEFQUExJQ0FCTEUgTEFXIEFORC9PUiBUSElTIEFHUkVFTUVOVC4gIEltbWVkaWF0ZWx5IHVwb24gdGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQsIGFueSBhbmQgYWxsIHJpZ2h0cyB5b3UgYXJlIGdyYW50ZWQgaGVyZXVuZGVyIHNoYWxsIHRlcm1pbmF0ZSwgeW91IHNoYWxsIGhhdmUgbm8gcmlnaHQgdG8gdXNlIHRoZSBTb2Z0d2FyZSwgdGhlIFByaW50ZWQgTWF0ZXJpYWxzLCBvciB0aGUgTmV3IENyZWF0aW9ucywgaW4gYW55IG1hbm5lciwgeW91IGltbWVkaWF0ZWx5IHNoYWxsIGRlc3Ryb3kgYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIHRoZSBQcmludGVkIE1hdGVyaWFscywgYW5kIHRoZSBOZXcgQ3JlYXRpb25zIGluIHlvdXIgcG9zc2Vzc2lvbiwgY3VzdG9keSwgb3IgY29udHJvbCwgYW5kIGFsbCByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgc2hhbGwgcmV2ZXJ0LCB3aXRob3V0IG5vdGljZSwgdG8gYW5kIGJlIHZlc3RlZCBpbiBJZCBTb2Z0d2FyZS4KKworWU9VIEFDS05PV0xFREdFIFRIQVQgWU9VIEhBVkUgUkVBRCBUSElTIEFHUkVFTUVOVCwgWU9VIFVOREVSU1RBTkQgVEhJUyBBR1JFRU1FTlQsIEFORCBVTkRFUlNUQU5EIFRIQVQgQlkgQ09OVElOVUlORyBUSEUgSU5TVEFMTEFUSU9OIE9GIFRIRSBTT0ZUV0FSRSwgQlkgTE9BRElORyBPUiBSVU5OSU5HIFRIRSBTT0ZUV0FSRSwgT1IgQlkgUExBQ0lORyBPUiBDT1BZSU5HIFRIRSBTT0ZUV0FSRSBPTlRPIFlPVVIgQ09NUFVURVIgSEFSRCBEUklWRSwgQ09NUFVURVIgUkFNIE9SIE9USEVSIFNUT1JBR0UsIFlPVSBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQuICBZT1UgRlVSVEhFUiBBR1JFRSBUSEFULCBFWENFUFQgRk9SIFdSSVRURU4gU0VQQVJBVEUgQUdSRUVNRU5UUywgSUYgQU5ZLCBBTU9ORyBJRCBTT0ZUV0FSRSwgQUNUSVZJU0lPTiwgQU5EIFlPVSwgVEhJUyBBR1JFRU1FTlQgSVMgQSBDT01QTEVURSBBTkQgRVhDTFVTSVZFIFNUQVRFTUVOVCBPRiBUSEUgUklHSFRTIEFORCBMSUFCSUxJVElFUyBPRiBUSEUgUEFSVElFUyBIRVJFVE8sIFJFTEFUSU5HIFRPIFRIRSBTVUJKRUNUIE1BVFRFUiBIRVJFT0YuICBUSElTIEFHUkVFTUVOVCBTVVBFUlNFREVTIEFMTCBQUklPUiBPUkFMIEFHUkVFTUVOVFMsIFBST1BPU0FMUywgT1IgVU5ERVJTVEFORElOR1MsIEFORCBBTlkgT1RIRVIgQ09NTVVOSUNBVElPTlMsIElGIEFOWSwgQU1PTkcgSUQgU09GVFdBUkUsIEFDVElWSVNJT04sIEFORCBZT1UgUkVMQVRJTkcgVE8gVEhFIFNVQkpFQ1QgTUFUVEVSIE9GIFRISVMgQUdSRUVNRU5ULgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvUkFSIGIvbGljZW5zZXMvUkFSCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwOTY5ODgKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9SQVIKQEAgLTAsMCArMSwxNDMgQEAKKyAgICAgIFRoZSBSQVIgQXJjaGl2ZXIKKyAgICAgIEVVTEEgKEVuZCBVc2VyIExpY2Vuc2UgQWdyZWVtZW50KSBmb3IgdXNlIGFuZCBkaXN0cmlidXRpb24KKworCisgICAgICBUaGUgUkFSIGFyY2hpdmVyIGlzIGRpc3RyaWJ1dGVkIGFzIHRyeSBiZWZvcmUgeW91IGJ1eS4gVGhpcyBtZWFuczoKKworICAgMS4gQWxsIGNvcHlyaWdodHMgdG8gUkFSIGFyZSBleGNsdXNpdmVseSBvd25lZCBieSB0aGUgYXV0aG9yCisgICAgICAtIEFsZXhhbmRlciBSb3NoYWwuCisKKyAgIDIuIEFueW9uZSBtYXkgdXNlIHRoaXMgc29mdHdhcmUgZHVyaW5nIGEgdGVzdCBwZXJpb2Qgb2YgNDAgZGF5cy4KKyAgICAgIEZvbGxvd2luZyB0aGlzIHRlc3QgcGVyaW9kIG9mIDQwIGRheXMgb3IgbGVzcywgaWYgeW91IHdpc2ggdG8KKyAgICAgIGNvbnRpbnVlIHRvIHVzZSBSQVIsIHlvdSBtdXN0IHB1cmNoYXNlIGEgbGljZW5zZS4KKworICAgMy4gVGhlcmUgYXJlIDIgYmFzaWMgdHlwZXMgb2YgbGljZW5zZXMgaXNzdWVkIGZvciBSQVIsIHRoZXNlIGFyZToKKyAKKyAgICAgIGEuICBBIHNpbmdsZSBjb21wdXRlciB1c2FnZSBsaWNlbnNlLiBUaGUgdXNlciBwdXJjaGFzZXMgb25lIGxpY2Vuc2UKKyAgICAgICAgICB0byB1c2UgUkFSIGFyY2hpdmVyIG9uIG9uZSBjb21wdXRlci4KKworICAgICAgICAgIEhvbWUgdXNlcnMgbWF5IHVzZSB0aGVpciBzaW5nbGUgY29tcHV0ZXIgdXNhZ2UgbGljZW5zZSBvbgorICAgICAgICAgIGFsbCBjb21wdXRlcnMgd2hpY2ggYXJlIGluIHByb3BlcnR5IG9mIHRoZSBsaWNlbnNlIG93bmVyLgorCisgICAgICAgICAgQnVzaW5lc3MgdXNlcnMgcmVxdWlyZSBvbmUgbGljZW5zZSBwZXIgY29tcHV0ZXIgUkFSIGlzCisgICAgICAgICAgaW5zdGFsbGVkIG9uLgorCisgICAgICBiLiAgQSBtdWx0aXBsZSB1c2FnZSBsaWNlbnNlLiBUaGUgdXNlciBwdXJjaGFzZXMgYSBudW1iZXIgb2YgdXNhZ2UKKyAgICAgICAgICBsaWNlbnNlcyBmb3IgdXNlLCBieSB0aGUgcHVyY2hhc2VyIG9yIHRoZSBwdXJjaGFzZXIncyBlbXBsb3llZXMKKyAgICAgICAgICBvbiB0aGUgc2FtZSBudW1iZXIgb2YgY29tcHV0ZXJzLgorCisgICAgICAgICAgSW4gYSBuZXR3b3JrIChzZXJ2ZXIvY2xpZW50KSBlbnZpcm9ubWVudCB5b3UgbXVzdCBwdXJjaGFzZQorICAgICAgICAgIGEgbGljZW5zZSBjb3B5IGZvciBlYWNoIHNlcGFyYXRlIGNsaWVudCAod29ya3N0YXRpb24pCisgICAgICAgICAgb24gd2hpY2ggUkFSIGlzIGluc3RhbGxlZCwgdXNlZCwgb3IgYWNjZXNzZWQuIEEgc2VwYXJhdGUKKyAgICAgICAgICBsaWNlbnNlIGNvcHkgZm9yIGVhY2ggY2xpZW50ICh3b3Jrc3RhdGlvbikgaXMgbmVlZGVkIHJlZ2FyZGxlc3MKKyAgICAgICAgICBvZiB3aGV0aGVyIHRoZSBjbGllbnRzICh3b3Jrc3RhdGlvbnMpIHdpbGwgdXNlIFJBUiBzaW11bHRhbmVvdXNseQorICAgICAgICAgIG9yIGF0IGRpZmZlcmVudCB0aW1lcy4gSWYgZm9yIGV4YW1wbGUgeW91IHdpc2ggdG8gaGF2ZQorICAgICAgICAgIDkgZGlmZmVyZW50IGNsaWVudHMgKHdvcmtzdGF0aW9ucykgaW4geW91ciBuZXR3b3JrIHdpdGggYWNjZXNzCisgICAgICAgICAgdG8gUkFSLCB5b3UgbXVzdCBwdXJjaGFzZSA5IGxpY2Vuc2UgY29waWVzLgorCisgICAgICBBIHVzZXIgd2hvIHB1cmNoYXNlZCBhIFJBUiBsaWNlbnNlLCBpcyBncmFudGVkIGEgbm9uLWV4Y2x1c2l2ZQorICAgICAgcmlnaHQgdG8gdXNlIFJBUiBvbiBhcyBtYW55IGNvbXB1dGVycyBhcyBkZWZpbmVkIGJ5IHRoZSBsaWNlbnNpbmcKKyAgICAgIHRlcm1zIGFib3ZlIGFjY29yZGluZyB0byB0aGUgbnVtYmVyIG9mIGxpY2Vuc2VzIHB1cmNoYXNlZCwKKyAgICAgIGZvciBhbnkgbGVnYWwgcHVycG9zZS4gVGhlIGxpY2Vuc2VkIFJBUiBzb2Z0d2FyZSBtYXkgbm90IGJlIHJlbnRlZAorICAgICAgb3IgbGVhc2VkLCBidXQgbWF5IGJlIHBlcm1hbmVudGx5IHRyYW5zZmVycmVkLCBpbiBpdCdzIGVudGlyZXR5LAorICAgICAgaWYgdGhlIHBlcnNvbiByZWNlaXZpbmcgaXQgYWdyZWVzIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UuCisgICAgICBJZiB0aGUgc29mdHdhcmUgaXMgYW4gdXBkYXRlLCB0aGUgdHJhbnNmZXIgbXVzdCBpbmNsdWRlIHRoZSB1cGRhdGUKKyAgICAgIGFuZCBhbGwgcHJldmlvdXMgdmVyc2lvbnMuICAgICAgCisKKyAgIDQuIExpY2Vuc2luZyBmb3IgUkFSIG9uIG1vYmlsZSBkZXZpY2VzIChVMyBzdGljaywgVVNCIHN0aWNrLAorICAgICAgZXh0ZXJuYWwgaGFyZGRyaXZlKToKKworICAgICAgSW4gYWRkaXRpb24gdG8gdGhlIHRlcm1zIHN0YXRlZCBhYm92ZSBmb2xsb3dpbmcgbGljZW5zaW5nIHRlcm1zCisgICAgICBhcHBseSB0byB0aGUgbGljZW5zaW5nIG9mIFJBUiBvbiBtb2JpbGUgZGV2aWNlcy4KKworICAgICAgYS4gIEEgc2luZ2xlIGNvbXB1dGVyIHVzYWdlIGxpY2Vuc2UuIEhvbWUgdXNlcnMgbWF5IHVzZSB0aGVpcgorICAgICAgICAgIHNpbmdsZSBjb21wdXRlciB1c2FnZSBsaWNlbnNlIG9uIGFsbCBtb2JpbGUgZGV2aWNlcyB3aGljaCBhcmUKKyAgICAgICAgICBpbiBwcm9wZXJ0eSBvZiB0aGUgbGljZW5zZSBvd25lci4KKworICAgICAgICAgIEJ1c2luZXNzIHVzZXJzIG1heSB1c2UgdGhlaXIgc2luZ2xlIGNvbXB1dGVyIHVzYWdlIGxpY2Vuc2UKKyAgICAgICAgICBvbiBvbmUgY29tcHV0ZXIgYW5kIG9uZSBtb2JpbGUgZGV2aWNlLgorCisgICAgICBiLiAgQSBtdWx0aXBsZSB1c2FnZSBsaWNlbnNlLiBVc2VycyB3aG8gb3duIGEgbXVsdGlwbGUgdXNhZ2UKKyAgICAgICAgICBsaWNlbnNlIG1heSB1c2UgdGhhdCBsaWNlbnNlIG9uIHRoZSBzYW1lIG51bWJlciBvZiBtb2JpbGUKKyAgICAgICAgICBkZXZpY2VzIGFzIG51bWJlciBvZiBjb21wdXRlcnMgKGNsaWVudHMpIHRoZSBsaWNlbnNlIHdhcworICAgICAgICAgIHB1cmNoYXNlZCBmb3IuCisKKyAgICAgICAgICBUaGUgbnVtYmVyIG9mIGNvbXB1dGVycy9kZXZpY2VzIHJ1bm5pbmcgUkFSIGF0IGFueSB0aW1lIGlzCisgICAgICAgICAgbGltaXRlZCB0byB0aGUgbnVtYmVyIG9mIGxpY2Vuc2VzIHB1cmNoYXNlZCBhY2NvcmRpbmcgdG8gdGhlCisgICAgICAgICAgbGljZW5zaW5nIHRlcm1zIGFib3ZlLgorCisgICAgICBBIGxpY2Vuc2VkIHZlcnNpb24gb2YgUkFSIG9uIGEgbW9iaWxlIGRldmljZSBtYXkgYmUgdXNlZCBieQorICAgICAgdGhlIHB1cmNoYXNlciBvciB0aGUgcHVyY2hhc2VyJ3MgZW1wbG95ZWVzLCBvbiBzZXZlcmFsIGNvbXB1dGVycworICAgICAgY29uc2VjdXRpdmVseS4KKworICAgICAgVGhlcmUgYXJlIG5vIGFkZGl0aW9uYWwgbGljZW5zZSBmZWVzLCBhcGFydCBmcm9tIHRoZSBjb3N0IG9mCisgICAgICBwdXJjaGFzaW5nIGEgbGljZW5zZSwgYXNzb2NpYXRlZCB3aXRoIHRoZSB1c2Ugb2YgUkFSIGZyb20KKyAgICAgIGEgbW9iaWxlIGRldmljZSBvbiBjb21wdXRlcnMgdGhhdCBhcmUgbm90IG93bmVkIGJ5IHRoZSBvd25lcgorICAgICAgb2YgdGhlIFJBUiBsaWNlbnNlLgorCisgICA1LiBUaGUgUkFSL1dpblJBUiB1bmxpY2Vuc2VkIHRyaWFsIHZlcnNpb24gbWF5IGJlIGZyZWVseSBkaXN0cmlidXRlZCwKKyAgICAgIHdpdGggZXhjZXB0aW9ucyBub3RlZCBiZWxvdywgcHJvdmlkZWQgdGhlIGRpc3RyaWJ1dGlvbiBwYWNrYWdlIGlzIG5vdAorICAgICAgbW9kaWZpZWQgaW4gYW55IHdheS4KKyAgICAgIAorICAgICAgYS4gIE5vIHBlcnNvbiBvciBjb21wYW55IG1heSBkaXN0cmlidXRlIHNlcGFyYXRlIHBhcnRzIG9mIHRoZSBwYWNrYWdlCisgICAgICAgICAgd2l0aCB0aGUgZXhjZXB0aW9uIG9mIHRoZSBVblJBUiBjb21wb25lbnRzLCB3aXRob3V0IHdyaXR0ZW4KKyAgICAgICAgICBwZXJtaXNzaW9uIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIuCisgICAgICAKKyAgICAgIGIuICBUaGUgUkFSL1dpblJBUiB1bmxpY2Vuc2VkIHRyaWFsIHZlcnNpb24gbWF5IG5vdCBiZSBkaXN0cmlidXRlZAorICAgICAgICAgIGluc2lkZSBvZiBhbnkgb3RoZXIgc29mdHdhcmUgcGFja2FnZSB3aXRob3V0IHdyaXR0ZW4gcGVybWlzc2lvbgorICAgICAgICAgIG9mIHRoZSBjb3B5cmlnaHQgb3duZXIuCisKKyAgICAgIGMuICBIYWNrcy9jcmFja3MsIGtleXMgb3Iga2V5IGdlbmVyYXRvcnMgbWF5IG5vdCBiZSBpbmNsdWRlZCBvbiB0aGUKKyAgICAgICAgICBzYW1lIGRpc3RyaWJ1dGlvbi4KKworICAgNi4gVG8gYnV5IGEgbGljZW5zZSBwbGVhc2Ugc2VlIG9yZGVyLmh0bSBmb3IgZGV0YWlscy4KKworICAgNy4gVEhFIFJBUiBBUkNISVZFUiBJUyBESVNUUklCVVRFRCAiQVMgSVMiLiBOTyBXQVJSQU5UWSBPRiBBTlkKKyAgICAgIEtJTkQgSVMgRVhQUkVTU0VEIE9SIElNUExJRUQuIFlPVSBVU0UgQVQgWU9VUiBPV04gUklTSy4KKyAgICAgIE5FSVRIRVIgVEhFIEFVVEhPUiBOT1IgVEhFIEFHRU5UUyBPRiBUSEUgQVVUSE9SIFdJTEwgQkUgTElBQkxFIAorICAgICAgRk9SIERBVEEgTE9TUywgREFNQUdFUywgTE9TUyBPRiBQUk9GSVRTIE9SIEFOWSBPVEhFUiBLSU5EIE9GIExPU1MKKyAgICAgIFdISUxFIFVTSU5HIE9SIE1JU1VTSU5HIFRISVMgU09GVFdBUkUuCisKKyAgIDguIFRoZXJlIGFyZSBubyBhZGRpdGlvbmFsIGxpY2Vuc2UgZmVlcywgYXBhcnQgZnJvbSB0aGUgY29zdCBvZgorICAgICAgcHVyY2hhc2luZyBhIGxpY2Vuc2UsIGFzc29jaWF0ZWQgd2l0aCB0aGUgY3JlYXRpb24gYW5kIGRpc3RyaWJ1dGlvbgorICAgICAgb2YgUkFSIGFyY2hpdmVzLCB2b2x1bWVzLCBzZWxmLWV4dHJhY3RpbmcgYXJjaGl2ZXMgb3Igc2VsZi1leHRyYWN0aW5nCisgICAgICB2b2x1bWVzLiBMZWdhbGx5IHJlZ2lzdGVyZWQgb3duZXJzIG1heSB1c2UgdGhlaXIgY29waWVzIG9mIFJBUi9XaW5SQVIKKyAgICAgIHRvIHByb2R1Y2UgYXJjaGl2ZXMgYW5kIHNlbGYtZXh0cmFjdGluZyBhcmNoaXZlcyBhbmQgdG8gZGlzdHJpYnV0ZQorICAgICAgdGhvc2UgYXJjaGl2ZXMgZnJlZSBvZiBhbnkgYWRkaXRpb25hbCBSQVIgcm95YWx0aWVzLgorCisgICA5LiBZb3UgbWF5IG5vdCB1c2UsIGNvcHksIGVtdWxhdGUsIGNsb25lLCByZW50LCBsZWFzZSwgc2VsbCwgbW9kaWZ5LAorICAgICAgZGVjb21waWxlLCBkaXNhc3NlbWJsZSwgb3RoZXJ3aXNlIHJldmVyc2UgZW5naW5lZXIsIG9yIHRyYW5zZmVyCisgICAgICB0aGUgbGljZW5zZWQgcHJvZ3JhbSwgb3IgYW55IHN1YnNldCBvZiB0aGUgbGljZW5zZWQgcHJvZ3JhbSwgZXhjZXB0CisgICAgICBhcyBwcm92aWRlZCBmb3IgaW4gdGhpcyBhZ3JlZW1lbnQuIEFueSBzdWNoIHVuYXV0aG9yaXplZCB1c2Ugc2hhbGwKKyAgICAgIHJlc3VsdCBpbiBpbW1lZGlhdGUgYW5kIGF1dG9tYXRpYyB0ZXJtaW5hdGlvbiBvZiB0aGlzIGxpY2Vuc2UgYW5kCisgICAgICBtYXkgcmVzdWx0IGluIGNyaW1pbmFsIGFuZC9vciBjaXZpbCBwcm9zZWN1dGlvbi4KKworICAgICAgN3p4YS5kbGwgbGlicmFyeSBpcyBjb3B5cmlnaHRlZCBieSBJZ29yIFBhdmxvdiBhbmQgZGlzdHJpYnV0ZWQgCisgICAgICB1bmRlciBMR1BMIFZlcnNpb24gMyBsaWNlbnNlICggaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xncGwuaHRtbCApLiAKKyAgICAgIFlvdSBjYW4gbW9kaWZ5IHBvcnRpb25zIG9mIDd6eGEuZGxsIGFuZCBwZXJmb3JtIHJldmVyc2UgZW5naW5lZXJpbmcgCisgICAgICBzb2xlbHkgZm9yIHB1cnBvc2Ugb2YgZGVidWdnaW5nIHN1Y2ggN3p4YS5kbGwgbW9kaWZpY2F0aW9ucyBhY2NvcmRpbmcgCisgICAgICB0byBMR1BMLiBTb3VyY2UgY29kZSBvZiA3enhhLmRsbCBpcyBhdmFpbGFibGUgb24gd3d3LjctemlwLm9yZy4KKworICAgICAgTmVpdGhlciBSQVIgYmluYXJ5IGNvZGUsIFdpblJBUiBiaW5hcnkgY29kZSwgVW5SQVIgc291cmNlIG9yIFVuUkFSCisgICAgICBiaW5hcnkgY29kZSBtYXkgYmUgdXNlZCBvciByZXZlcnNlIGVuZ2luZWVyZWQgdG8gcmUtY3JlYXRlIHRoZSBSQVIKKyAgICAgIGNvbXByZXNzaW9uIGFsZ29yaXRobSwgd2hpY2ggaXMgcHJvcHJpZXRhcnksIHdpdGhvdXQgd3JpdHRlbgorICAgICAgcGVybWlzc2lvbiBvZiB0aGUgYXV0aG9yLgorCisgICAgICBSQVIgYW5kIFdpblJBUiBrZXlmaWxlcyBtYXkgbm90IGJlIGRpc3RyaWJ1dGVkLCBleGNlcHQgYXMgc3RhdGVkCisgICAgICBpbiBpdGVtIDMpIGFib3ZlLCBvdXRzaWRlIG9mIHRoZSBhcmVhIG9mIGxlZ2FsIGNvbnRyb2wgb2YgdGhlCisgICAgICBwZXJzb24gb3IgcGVyc29ucyB3aG8gcHVyY2hhc2VkIHRoZSBvcmlnaW5hbCBsaWNlbnNlLCB3aXRob3V0CisgICAgICB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIGNvcHlyaWdodCBob2xkZXIuCisKKyAgICAgIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGhlcmUgYXJlIHJlc2VydmVkIGJ5IEFsZXhhbmRlciBSb3NoYWwuCisKKyAgMTAuIEluc3RhbGxpbmcgYW5kIHVzaW5nIFJBUi9XaW5SQVIgc2lnbmlmaWVzIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMKKyAgICAgIGFuZCBjb25kaXRpb25zIG9mIHRoZSBsaWNlbnNlLgorCisgIDExLiBJZiB5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZSB5b3UgbXVzdAorICAgICAgcmVtb3ZlIFJBUi9XaW5SQVIgZmlsZXMgZnJvbSB5b3VyIHN0b3JhZ2UgZGV2aWNlcyBhbmQgY2Vhc2UgdG8KKyAgICAgIHVzZSB0aGUgcHJvZHVjdC4KKworICAgICAgVGhhbmsgeW91IGZvciB1c2luZyB0aGUgb3JpZ2luYWwgUkFSLgorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFsZXhhbmRlciBMLiBSb3NoYWwKKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvUkFTTElDIGIvbGljZW5zZXMvUkFTTElDCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhYzE1MDEKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9SQVNMSUMKQEAgLTAsMCArMSw1OSBAQAorCitDcmVhdGl2ZSBlbmRlYXZvcnMgZGVwZW5kIG9uIHRoZSBsaXZlbHkgZXhjaGFuZ2Ugb2YgaWRlYXMuIFRoZXJlIGFyZSBsYXdzCithbmQgY3VzdG9tcyB3aGljaCBlc3RhYmxpc2ggcmlnaHRzIGFuZCByZXNwb25zaWJpbGl0aWVzIGZvciBhdXRob3JzIGFuZCB0aGUKK3VzZXJzIG9mIHdoYXQgYXV0aG9ycyBjcmVhdGUuIFRoaXMgbm90aWNlIGlzIG5vdCBpbnRlbmRlZCB0byBwcmV2ZW50IHlvdQorZnJvbSB1c2luZyB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50cyBpbiB0aGlzIHBhY2thZ2UsIGJ1dCB0byBlbnN1cmUgdGhhdAordGhlcmUgYXJlIG5vIG1pc3VuZGVyc3RhbmRpbmdzIGFib3V0IHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHN1Y2ggdXNlLgorCitQbGVhc2UgcmVhZCB0aGUgZm9sbG93aW5nIG5vdGljZSBjYXJlZnVsbHkuIElmIHlvdSBkbyBub3QgdW5kZXJzdGFuZCBhbnkKK3BvcnRpb24gb2YgdGhpcyBub3RpY2UsIHBsZWFzZSBzZWVrIGFwcHJvcHJpYXRlIHByb2Zlc3Npb25hbCBsZWdhbCBhZHZpY2UKK2JlZm9yZSBtYWtpbmcgdXNlIG9mIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRzIGluY2x1ZGVkIGluIHRoaXMgc29mdHdhcmUKK3BhY2thZ2UuIEluIGFkZGl0aW9uIHRvIHdoYXRldmVyIG90aGVyIHN0ZXBzIHlvdSBtYXkgYmUgb2JsaWdlZCB0byB0YWtlIHRvCityZXNwZWN0IHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIHRoZSB2YXJpb3VzIHBhcnRpZXMgaW52b2x2ZWQsIGlmCit5b3UgZG8gbWFrZSB1c2Ugb2YgdGhlIHNvZnR3YXJlIGFuZCBkb2N1bWVudHMgaW4gdGhpcyBwYWNrYWdlLCBwbGVhc2UgZ2l2ZQorY3JlZGl0IHdoZXJlIGNyZWRpdCBpcyBkdWUgYnkgY2l0aW5nIHRoaXMgcGFja2FnZSwgaXRzIGF1dGhvcnMgYW5kIHRoZSBVUkwKK29yIG90aGVyIHNvdXJjZSBmcm9tIHdoaWNoIHlvdSBvYnRhaW5lZCBpdCwgb3IgZXF1aXZhbGVudCBwcmltYXJ5IHJlZmVyZW5jZXMKK2luIHRoZSBsaXRlcmF0dXJlIHdpdGggdGhlIHNhbWUgYXV0aG9ycy4KKworU29tZSBvZiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50cyBpbmNsdWRlZCB3aXRoaW4gdGhpcyBzb2Z0d2FyZSBwYWNrYWdlIGFyZQordGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiB2YXJpb3VzIHBhcnRpZXMsIGFuZCBwbGFjZW1lbnQgaW4gdGhpcyBwYWNrYWdlCitkb2VzIG5vdCBpbiBhbnkgd2F5IGltcGx5IHRoYXQgYW55IHN1Y2ggcmlnaHRzIGhhdmUgaW4gYW55IHdheSBiZWVuIHdhaXZlZAorb3IgZGltaW5pc2hlZC4KKworV2l0aCByZXNwZWN0IHRvIGFueSBzb2Z0d2FyZSBvciBkb2N1bWVudHMgZm9yIHdoaWNoIGEgY29weXJpZ2h0IGV4aXN0cywgQUxMCitSSUdIVFMgQVJFIFJFU0VSVkVEIFRPIFRIRSBPV05FUlMgT0YgU1VDSCBDT1BZUklHSFQuCisKK0V2ZW4gdGhvdWdoIHRoZSBhdXRob3JzIG9mIHRoZSB2YXJpb3VzIGRvY3VtZW50cyBhbmQgc29mdHdhcmUgZm91bmQgaGVyZQoraGF2ZSBtYWRlIGEgZ29vZCBmYWl0aCBlZmZvcnQgdG8gZW5zdXJlIHRoYXQgdGhlIGRvY3VtZW50cyBhcmUgY29ycmVjdCBhbmQKK3RoYXQgdGhlIHNvZnR3YXJlIHBlcmZvcm1zIGFjY29yZGluZyB0byBpdHMgZG9jdW1lbnRhdGlvbiwgYW5kIHdlIHdvdWxkCitncmVhdGx5IGFwcHJlY2lhdGUgaGVhcmluZyBvZiBhbnkgcHJvYmxlbXMgeW91IG1heSBlbmNvdW50ZXIsIHRoZSBwcm9ncmFtcworYW5kIGRvY3VtZW50cyBhbnkgZmlsZXMgY3JlYXRlZCBieSB0aGUgcHJvZ3JhbXMgYXJlIHByb3ZpZGVkICoqQVMgSVMqKgord2l0aG91dCBhbnkgd2FycmFudHkgYXMgdG8gY29ycmVjdG5lc3MsIG1lcmNoYW50YWJpbGl0eSBvciBmaXRuZXNzIGZvciBhbnkKK3BhcnRpY3VsYXIgb3IgZ2VuZXJhbCB1c2UuCisKK1RIRSBSRVNQT05TSUJJTElUWSBGT1IgQU5ZIEFEVkVSU0UgQ09OU0VRVUVOQ0VTIEZST00gVEhFIFVTRSBPRiBQUk9HUkFNUyBPUgorRE9DVU1FTlRTIE9SIEFOWSBGSUxFIE9SIEZJTEVTIENSRUFURUQgQlkgVVNFIE9GIFRIRSBQUk9HUkFNUyBPUiBET0NVTUVOVFMKK0xJRVMgU09MRUxZIFdJVEggVEhFIFVTRVJTIE9GIFRIRSBQUk9HUkFNUyBPUiBET0NVTUVOVFMgT1IgRklMRSBPUiBGSUxFUyBBTkQKK05PVCBXSVRIIEFVVEhPUlMgT0YgVEhFIFBST0dSQU1TIE9SIERPQ1VNRU5UUy4KKworU3ViamVjdCB0byB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlIGNvbmRpdGlvbnMgc3RhdGVkIGFib3ZlLCBhbmQgeW91ciByZXNwZWN0Citmb3IgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGUgbm90aWNlcyBiZWxvdywgaWYgeW91IGFyZSBub3QKK2dvaW5nIHRvIG1ha2UgYW55IG1vZGlmaWNhdGlvbnMgb3IgY3JlYXRlIGRlcml2ZWQgd29ya3MsIHlvdSBhcmUgZ2l2ZW4KK3Blcm1pc3Npb24gdG8gZnJlZWx5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhpcyBwYWNrYWdlLCBwcm92aWRlZCB5b3UgZG8gdGhlCitmb2xsb3dpbmc6CisKKyAgICogMS4gRWl0aGVyIGluY2x1ZGUgdGhlIGNvbXBsZXRlIGRvY3VtZW50YXRpb24sIGVzcGVjaWFsbHkgdGhlIGZpbGUKKyAgICAgTk9USUNFLCB3aXRoIHdoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHJvdmlkZSBhIGNsZWFyIGluZGljYXRpb24gd2hlcmUKKyAgICAgcGVvcGxlIGNhbiBnZXQgYSBjb3B5IG9mIHRoZSBkb2N1bWVudGF0aW9uOyBhbmQKKyAgICogMi4gR2l2ZSBjcmVkaXQgd2hlcmUgY3JlZGl0IGlzIGR1ZSBjaXRpbmcgdGhlIHZlcnNpb24gYW5kIG9yaWdpbmFsCisgICAgIGF1dGhvcnMgcHJvcGVybHk7IGFuZAorICAgKiAzLiBEbyBub3QgZ2l2ZSBhbnlvbmUgdGhlIGltcHJlc3Npb24gdGhhdCB0aGUgb3JpZ2luYWwgYXV0aG9ycyBhcmUKKyAgICAgcHJvdmlkaW5nIGEgd2FycmFudHkgb2YgYW55IGtpbmQuCisKK0luIGFkZGl0aW9uLCB5b3UgbWF5IGFsc28gbW9kaWZ5IHRoaXMgcGFja2FnZSBhbmQgY3JlYXRlIGRlcml2ZWQgd29ya3MKK3Byb3ZpZGVkIHlvdSBkbyB0aGUgZm9sbG93aW5nOgorCisgICAqIDQuIEV4cGxhaW4gaW4geW91ciBkb2N1bWVudGF0aW9uIGhvdyB3aGF0IHlvdSBkaWQgZGlmZmVycyBmcm9tIHRoaXMKKyAgICAgdmVyc2lvbiBvZiBSYXNNb2w7IGFuZAorICAgKiA1LiBNYWtlIHlvdXIgbW9kaWZpZWQgc291cmNlIGNvZGUgYXZhaWxhYmxlLgorCmRpZmYgLS1naXQgYS9saWNlbnNlcy9SU0EgYi9saWNlbnNlcy9SU0EKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBlOGEwYwotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL1JTQQpAQCAtMCwwICsxLDE4IEBACitbPGNvcHlyaWdodCBub3RpY2U+XQorCitMaWNlbnNlIHRvIGNvcHkgYW5kIHVzZSB0aGlzIHNvZnR3YXJlIGlzIGdyYW50ZWQgcHJvdmlkZWQgdGhhdCBpdCBpcworaWRlbnRpZmllZCBhcyBbdGhlXSAiPGNvcHlyaWdodCBob2xkZXI+IDxzb2Z0d2FyZT4iIGluIGFsbCBtYXRlcmlhbAorbWVudGlvbmluZyBvciByZWZlcmVuY2luZyB0aGlzIHNvZnR3YXJlIFtvciB0aGlzIGZ1bmN0aW9uXS4KKworTGljZW5zZSBpcyBhbHNvIGdyYW50ZWQgdG8gbWFrZSBhbmQgdXNlIGRlcml2YXRpdmUgd29ya3MgcHJvdmlkZWQgdGhhdAorc3VjaCB3b3JrcyBhcmUgaWRlbnRpZmllZCBhcyAiZGVyaXZlZCBmcm9tIHRoZSA8Y29weXJpZ2h0IGhvbGRlcj4KKzxzb2Z0d2FyZT4iIGluIGFsbCBtYXRlcmlhbCBtZW50aW9uaW5nIG9yIHJlZmVyZW5jaW5nIHRoZSBkZXJpdmVkCit3b3JrLgorCis8Y29weXJpZ2h0IGhvbGRlcj4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGNvbmNlcm5pbmcgZWl0aGVyIHRoZQorbWVyY2hhbnRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUgb3IgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgc29mdHdhcmUKK2ZvciBhbnkgcGFydGljdWxhciBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvcgoraW1wbGllZCB3YXJyYW50eSBvZiBhbnkga2luZC4KKworW1RoZXNlIG5vdGljZXMgbXVzdCBiZSByZXRhaW5lZCBpbiBhbnkgY29waWVzIG9mIGFueSBwYXJ0IG9mIHRoaXMKK2RvY3VtZW50YXRpb24gYW5kL29yIHNvZnR3YXJlLl0KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL1JUQ1cgYi9saWNlbnNlcy9SVENXCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5OGJhNmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9SVENXCkBAIC0wLDAgKzEsNjkgQEAKK0xJTUlURUQgVVNFIFNPRlRXQVJFIExJQ0VOU0UgQUdSRUVNRU5UCisKK1RoaXMgTGltaXRlZCBVc2UgU29mdHdhcmUgTGljZW5zZSBBZ3JlZW1lbnQgKHRoaXMgIkFncmVlbWVudCIpIGlzIGEgbGVnYWwgYWdyZWVtZW50IGJldHdlZW4geW91LCB0aGUgZW5kLXVzZXIsIGFuZCBJZCBTb2Z0d2FyZSwgSW5jLiAoIklkIFNvZnR3YXJlIikgYW5kIEFjdGl2aXNpb24gUHVibGlzaGluZywgSW5jLiAgKCJBY3RpdmlzaW9uIikuICBCWSBDT05USU5VSU5HIFRIRSBJTlNUQUxMQVRJT04gT0YgVEhFIEZVTEwgVkVSU0lPTiBHQU1FIFBST0dSQU0gRU5USVRMRUQgUkVUVVJOIHRvIENBU1RMRSBXT0xGRU5TVEVJTiAoVEhFICJTT0ZUV0FSRSIpLCBCWSBMT0FESU5HIE9SIFJVTk5JTkcgVEhFU09GVFdBUkUsIE9SIEJZIFBMQUNJTkcgT1IgQ09QWUlORyBUSEUgU09GVFdBUkUgT05UTyBZT1VSIENPTVBVVEVSIEhBUkQgRFJJVkUsIENPTVBVVEVSIFJBTSBPUiBPVEhFUiBTVE9SQUdFLCBZT1UgQVJFIEFHUkVFSU5HIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRiBUSElTIEFHUkVFTUVOVC4KKworMS4JR3JhbnQgb2YgTGljZW5zZS4gIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBwcm92aXNpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBzbyBsb25nIGFzIHlvdSBmdWxseSBjb21wbHkgYXQgYWxsIHRpbWVzIHdpdGggdGhpcyBBZ3JlZW1lbnQsIElkIFNvZnR3YXJlIGdyYW50cyB0byB5b3UgdGhlIG5vbi1leGNsdXNpdmUgYW5kIGxpbWl0ZWQgcmlnaHQgdG8gdXNlIHRoZSBTb2Z0d2FyZSBvbmx5IGluIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgZm9ybS4gIFRoZSB0ZXJtICJTb2Z0d2FyZSIgaW5jbHVkZXMgYWxsIGVsZW1lbnRzIG9mIHRoZSBTb2Z0d2FyZSwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGRhdGEgZmlsZXMgYW5kc2NyZWVuIGRpc3BsYXlzLiAgWW91IGFyZSBub3QgcmVjZWl2aW5nIGFueSBvd25lcnNoaXAgb3IgcHJvcHJpZXRhcnkgcmlnaHQsIHRpdGxlIG9yIGludGVyZXN0IGluIG9yIHRvIHRoZSBTb2Z0d2FyZSBvciB0aGUgY29weXJpZ2h0cywgdHJhZGVtYXJrcywgb3Igb3RoZXIgcmlnaHRzIHJlbGF0ZWQgdGhlcmV0by4gIEZvciBwdXJwb3NlcyBvZiB0aGUgZmlyc3Qgc2VudGVuY2Ugb2YgdGhpcyBzZWN0aW9uLCAidXNlIiBtZWFucyBsb2FkaW5nIHRoZSBTb2Z0d2FyZSBpbnRvIFJBTSBhbmQvb3Igb250byBjb21wdXRlciBoYXJkIGRyaXZlLCBhcyB3ZWxsIGFzIGluc3RhbGxhdGlvbiBvZiB0aGUgU29mdHdhcmUgb24gYSBoYXJkIGRpc2sgb3Igb3RoZXIgc3RvcmFnZSBkZXZpY2UsIGFuZCBtZWFucyB0aGUgdXNlcyBwZXJtaXR0ZWQgaW4gc2VjdGlvbnMgMi4gYW5kIDQuIGhlcmVpbiBiZWxvdy4gIFlvdSBhZ3JlZSB0aGF0IHRoZSBTb2Z0d2FyZSB3aWxsIG5vdCBiZSBkb3dubG9hZGVkLCBzaGlwcGVkLCB0cmFuc2ZlcnJlZCwgZXhwb3J0ZWQgb3IgcmUtZXhwb3J0ZWQgaW50byBhbnkgY291bnRyeSBpbiB2aW9sYXRpb24gb2YgdGhlIFUuUy4gRXhwb3J0IEFkbWluaXN0cmF0aW9uIEFjdCAob3IgYW55IG90aGVyIGxhdyBnb3Zlcm5pbmcgc3VjaCBtYXR0ZXJzKSBieSB5b3Ugb3IgYW55b25lIGF0IHlvdXIgZGlyZWN0aW9uIGFuZCB0aGF0IHlvdSB3aWxsIG5vdCB1dGlsaXplIGFuZCB3aWxsIG5vdCBhdXRob3JpemUgYW55b25lIHRvIHV0aWxpemUsIGluIGFueSBvdGhlciBtYW5uZXIsIHRoZSBTb2Z0d2FyZSBpbiB2aW9sYXRpb24gb2YgYW55IGFwcGxpY2FibGUgbGF3LiAgVGhlIFNvZnR3YXJlIHNoYWxsIG5vdCBiZSBkb3dubG9hZGVkIG9yIG90aGVyd2lzZSBleHBvcnRlZCBvciByZS1leHBvcnRlZCBpbnRvIChvciB0byBhIG5hdGlvbmFsIG9yIHJlc2lkZW50IG9mKSBhbnkgY291bnRyeSB0byB3aGljaCB0aGUgVS5TLiBoYXMgZW1iYXJnb2VkIGdvb2RzIG9yIHRvIGFueW9uZSBvciBpbnRvIGFueSBjb3VudHJ5IHdoby93aGljaCBhcmUgcHJvaGliaXRlZCwgYnkgYXBwbGljYWJsZSBsYXcsIGZyb20gcmVjZWl2aW5nIHN1Y2ggcHJvcGVydHkuICBJbiBleGVyY2lzaW5nIHlvdXIgbGltaXRlZCByaWdodHMgaGVyZXVuZGVyLCB5b3Ugc2hhbGwgY29tcGx5LCBhdCBhbGwgdGltZXMsIHdpdGggYWxsIGFwcGxpY2FibGUgbGF3cywgcmVndWxhdGlvbnMsIG9yZGluYW5jZXMgYW5kIHN0YXR1dGVzLiAgSWQgU29mdHdhcmUgcmVzZXJ2ZXMgYWxsIHJpZ2h0cyBub3QgZ3JhbnRlZCBpbiB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFsbCByaWdodHMgdG8gSWQgU29mdHdhcmUncyB0cmFkZW1hcmtzLgorCisyLglQZXJtaXR0ZWQgTmV3IENyZWF0aW9ucy4gIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBwcm92aXNpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBzbyBsb25nIGFzIHlvdSBmdWxseSBjb21wbHkgYXQgYWxsIHRpbWVzIHdpdGggdGhpcyBBZ3JlZW1lbnQsIElkIFNvZnR3YXJlIGdyYW50cyB0byB5b3UgdGhlIG5vbi1leGNsdXNpdmUgYW5kIGxpbWl0ZWQgcmlnaHQgdG8gY3JlYXRlIGZvciB0aGUgU29mdHdhcmUgKGV4Y2VwdCBhbnkgU29mdHdhcmUgY29kZSkgeW91ciBvd24gbW9kaWZpY2F0aW9ucyAodGhlICJOZXcgQ3JlYXRpb25zIikgd2hpY2ggc2hhbGwgb3BlcmF0ZSBvbmx5IHdpdGggdGhlIFNvZnR3YXJlIChidXQgbm90IGFueSBkZW1vLHRlc3Qgb3Igb3RoZXIgdmVyc2lvbiBvZiB0aGUgU29mdHdhcmUpLiAgWW91IG1heSBpbmNsdWRlIHdpdGhpbiB0aGUgTmV3IENyZWF0aW9ucyBjZXJ0YWluIHRleHR1cmVzYW5kIG90aGVyIGltYWdlcyAodGhlICJTb2Z0d2FyZSBJbWFnZXMiKSBmcm9tIHRoZSBTb2Z0d2FyZS4gIFlvdSBzaGFsbCBub3QgY3JlYXRlIGFueSBOZXcgQ3JlYXRpb25zIHdoaWNoIGluZnJpbmdlIGFnYWluc3QgYW55IHRoaXJkIHBhcnR5IHJpZ2h0IG9yIHdoaWNoIGFyZSBsaWJlbG91cywgZGVmYW1hdG9yeSwgb2JzY2VuZSxmYWxzZSwgbWlzbGVhZGluZywgb3Igb3RoZXJ3aXNlIGlsbGVnYWwgb3IgdW5sYXdmdWwuIFlvdSBhZ3JlZSB0aGF0IHRoZSBOZXcgQ3JlYXRpb25zIHdpbGwgbm90IGJlIGRvd25sb2FkZWQsIHNoaXBwZWQsIHRyYW5zZmVycmVkLCBleHBvcnRlZCBvciByZS1leHBvcnRlZCBpbnRvIGFueSBjb3VudHJ5IGluIHZpb2xhdGlvbiBvZiB0aGUgVS5TLkV4cG9ydCBBZG1pbmlzdHJhdGlvbiBBY3QgKG9yIGFueSBvdGhlciBsYXcgZ292ZXJuaW5nIHN1Y2ggbWF0dGVycykgYnkgeW91IG9yIGFueW9uZSBhdCB5b3VyIGRpcmVjdGlvbiBhbmQgdGhhdCB5b3Ugd2lsbCBub3QgdXRpbGl6ZSBhbmQgd2lsbCBub3QgYXV0aG9yaXplIGFueW9uZSB0byB1dGlsaXplLCBpbiBhbnkgb3RoZXIgbWFubmVyLCB0aGVOZXcgQ3JlYXRpb25zIGluIHZpb2xhdGlvbiBvZiBhbnkgYXBwbGljYWJsZSBsYXcuICBUaGUgTmV3IENyZWF0aW9ucyBzaGFsbCBub3QgYmUgZG93bmxvYWRlZCBvcm90aGVyd2lzZSBleHBvcnRlZCBvciByZS1leHBvcnRlZCBpbnRvIChvciB0byBhIG5hdGlvbmFsIG9yIHJlc2lkZW50IG9mKSBhbnkgY291bnRyeSB0byB3aGljaCB0aGUgVS5TLiBoYXMgZW1iYXJnb2VkIGdvb2RzIG9yIHRvIGFueW9uZSBvciBpbnRvIGFueSBjb3VudHJ5IHdoby93aGljaCBhcmUgcHJvaGliaXRlZCwgYnkgYXBwbGljYWJsZSBsYXcsIGZyb20gcmVjZWl2aW5nIHN1Y2ggcHJvcGVydHkuICBZb3Ugc2hhbGwgbm90IHJlbnQsIHNlbGwsIGxlYXNlLCBsZW5kLCBvZmZlciBvbiBhIHBheS1wZXItcGxheSBiYXNpcyBvcm90aGVyd2lzZSBjb21tZXJjaWFsbHkgZXhwbG9pdCBvciBjb21tZXJjaWFsbHkgZGlzdHJpYnV0ZSB0aGUgTmV3IENyZWF0aW9ucy4gIFlvdSBhcmUgb25seSBwZXJtaXR0ZWQgdG8gZGlzdHJpYnV0ZSwgd2l0aG91dCBhbnkgY29zdCBvciBjaGFyZ2UsIHRoZSBOZXcgQ3JlYXRpb25zIHRvIG90aGVyIGVuZC11c2VycyBzbyBsb25nIGFzIHN1Y2ggZGlzdHJpYnV0aW9uIGlzIG5vdCBpbmZyaW5naW5nIGFnYWluc3QgYW55IHRoaXJkIHBhcnR5IHJpZ2h0IGFuZCBpcyBub3Qgb3RoZXJ3aXNlIGlsbGVnYWwgb3IgdW5sYXdmdWwuICBBcyBub3RlZCBiZWxvdywgaW4gdGhlIGV2ZW50IHlvdSBjb21taXQgYW55IGJyZWFjaCBvZiB0aGlzIEFncmVlbWVudCwgeW91ciBsaWNlbnNlIGFuZCB0aGlzIEFncmVlbWVudCBzaGFsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSwgd2l0aG91dCBub3RpY2UuCisKKzMuCVByb2hpYml0aW9ucyB3aXRoIFJlZ2FyZCB0byB0aGUgU29mdHdhcmUuIFlvdSwgd2hldGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBzaGFsbCBub3QgZG8gYW55IG9mIHRoZSBmb2xsb3dpbmcgYWN0czoKKworYS4JcmVudCB0aGUgU29mdHdhcmU7CitiLglzZWxsIHRoZSBTb2Z0d2FyZTsKK2MuCWxlYXNlIG9yIGxlbmQgdGhlIFNvZnR3YXJlOworZC4Jb2ZmZXIgdGhlIFNvZnR3YXJlIG9uIGEgcGF5LXBlci1wbGF5IGJhc2lzOworZS4JZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgYnkgYW55IG1lYW5zLCBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgSW50ZXJuZXQgb3Igb3RoZXIJZWxlY3Ryb25pYyBkaXN0cmlidXRpb24sIGRpcmVjdCBtYWlsLCByZXRhaWwsIG1haWwgb3JkZXIgb3Igb3RoZXIgbWVhbnM7CitmLglpbiBhbnkgb3RoZXIgbWFubmVyIGFuZCB0aHJvdWdoIGFueSBtZWRpdW0gd2hhdHNvZXZlciBjb21tZXJjaWFsbHkgZXhwbG9pdCB0aGUgU29mdHdhcmUJb3IgdXNlIHRoZSBTb2Z0d2FyZSBmb3IgYW55IGNvbW1lcmNpYWwgcHVycG9zZTsKK2cuCWRpc2Fzc2VtYmxlLCByZXZlcnNlIGVuZ2luZWVyLCBkZWNvbXBpbGUsIG1vZGlmeSAoZXhjZXB0IGFzIHBlcm1pdHRlZCBieSBzZWN0aW9uIDIuCWhlcmVpbmFib3ZlKSBvciBhbHRlciB0aGUgU29mdHdhcmU7CitoLgl0cmFuc2xhdGUgdGhlIFNvZnR3YXJlOworaS4JcmVwcm9kdWNlIG9yIGNvcHkgdGhlIFNvZnR3YXJlIChleGNlcHQgYXMgcGVybWl0dGVkIGJ5IHNlY3Rpb24gNC4gaGVyZWluIGJlbG93KTsKK2ouCXB1YmxpY2x5IGRpc3BsYXkgdGhlIFNvZnR3YXJlOworay4JcHJlcGFyZSBvciBkZXZlbG9wIGRlcml2YXRpdmUgd29ya3MgYmFzZWQgdXBvbiB0aGUgU29mdHdhcmU7IG9yCitsLglyZW1vdmUgb3IgYWx0ZXIgYW55IG5vdGljZXMgb3Igb3RoZXIgbWFya2luZ3Mgb3IgbGVnZW5kcywgc3VjaCBhcyB0cmFkZW1hcmsgb3IgY29weXJpZ2h0IG5vdGljZXMsCWFmZml4ZWQgb24gb3Igd2l0aGluIHRoZSBTb2Z0d2FyZSBvciB0aGUgUHJpbnRlZCBNYXRlcmlhbHMgKGFzIGRlZmluZWQgaW4gc2VjdGlvbiA1LiBiZWxvdykuCisKKzQuCVBlcm1pdHRlZCBDb3B5aW5nLiAgWW91IG1heSBtYWtlIG9ubHkgdGhlIGZvbGxvd2luZyBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlOiAoaSkgeW91IG1heSBjb3B5IHRoZSBTb2Z0d2FyZSBmcm9tIHRoZSBDRCBST00sIHdoaWNoIHlvdSBwdXJjaGFzZSwgb250byB5b3VyIGNvbXB1dGVyIGhhcmQgZHJpdmU7IChpaSkgeW91bWF5IGNvcHkgdGhlIFNvZnR3YXJlIGZyb20geW91ciBjb21wdXRlciBoYXJkIGRyaXZlIGludG8geW91ciBjb21wdXRlciBSQU07IGFuZCAoaWlpKSB5b3UgbWF5bWFrZSBvbmUgKDEpICJiYWNrIHVwIiBvciBhcmNoaXZhbCBjb3B5IG9mIHRoZSBTb2Z0d2FyZSBvbiBvbmUgKDEpIGhhcmQgZGlzay4KKworNS4JSW50ZWxsZWN0dWFsIFByb3BlcnR5IFJpZ2h0cy4gIENlcnRhaW4gcHJpbnRlZCBtYXRlcmlhbHMgKHRoZSAiUHJpbnRlZCBNYXRlcmlhbHMiKSBhY2NvbXBhbnkgdGhlIFNvZnR3YXJlLiBUaGUgU29mdHdhcmUsIHRoZSBQcmludGVkIE1hdGVyaWFscyBhbmQgYWxsIGNvcHlyaWdodHMsIHRyYWRlbWFya3MgYW5kIGFsbCBvdGhlciBjb25jZWl2YWJsZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIHJlbGF0ZWQgdG8gdGhlIFNvZnR3YXJlIGFuZCB0aGUgUHJpbnRlZCBNYXRlcmlhbHMgYXJlIG93bmVkYnkgSWQgU29mdHdhcmUgYW5kIGFyZSBwcm90ZWN0ZWQgYnkgVW5pdGVkIFN0YXRlcyBjb3B5cmlnaHQgbGF3cywgaW50ZXJuYXRpb25hbCB0cmVhdHkgcHJvdmlzaW9ucyBhbmQgYWxsIGFwcGxpY2FibGUgbGF3LCBzdWNoIGFzIHRoZSBMYW5oYW0gQWN0LiAgWW91IG11c3QgdHJlYXQgdGhlIFNvZnR3YXJlIGFuZCB0aGUgUHJpbnRlZCBNYXRlcmlhbHMgbGlrZSBhbnkgb3RoZXIgY29weXJpZ2h0ZWQgbWF0ZXJpYWwsIGFzIHJlcXVpcmVkIGJ5IDE3IFUuUy5DLiwgwqcxMDEgZXQgc2VxLiBhbmQgb3RoZXIgYXBwbGljYWJsZSBsYXcuIFlvdSBhZ3JlZSB0byB1c2UgeW91ciBiZXN0IGVmZm9ydHMgdG8gc2VlIHRoYXQgYW55IHVzZXIgb2YgdGhlIFNvZnR3YXJlIGxpY2Vuc2VkIGhlcmV1bmRlciwgdGhlIFByaW50ZWQgTWF0ZXJpYWxzIG9yIHRoZSBOZXcgQ3JlYXRpb25zIGNvbXBsaWVzIHdpdGggdGhpcyBBZ3JlZW1lbnQuICBZb3UgYWdyZWUgdGhhdCB5b3UgYXJlIHJlY2VpdmluZyBhIGNvcHkgb2YgdGhlIFNvZnR3YXJlIGFuZCB0aGUgUHJpbnRlZCBNYXRlcmlhbHMgYnkgbGltaXRlZCBsaWNlbnNlIG9ubHkgYW5kIG5vdCBieSBzYWxlIGFuZCB0aGF0IHRoZSAiZmlyc3Qgc2FsZSIgZG9jdHJpbmUgb2YgMTcgVS5TLkMuIMKnMTA5IGRvZXMgbm90IGFwcGx5IHRvIHlvdXIgcmVjZWlwdCBvciB1c2Ugb2YgdGhlIFNvZnR3YXJlIG9yIHRoZSBQcmludGVkIE1hdGVyaWFscy4gVGhpcyBzZWN0aW9uIHNoYWxsIHN1cnZpdmUgdGhlIGNhbmNlbGxhdGlvbiBvciB0ZXJtaW5hdGlvbiBvZiB0aGlzIEFncmVlbWVudC4KKworNi4JTk8gSUQgU09GVFdBUkUgV0FSUkFOVElFUy4gIElEIFNPRlRXQVJFIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUywgV0hFVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgQU5ZIFdBUlJBTlRZIE9GIE5PTi1JTkZSSU5HRU1FTlQsIFdJVEggUkVTUEVDVCBUTyBUSEUgU09GVFdBUkUsIFRIRSBQUklOVEVEIE1BVEVSSUFMUywgVEhFIFNPRlRXQVJFIElNQUdFUyBBTkQgT1RIRVJXSVNFLiAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFdJVEhPVVQgV0FSUkFOVFkuICBJRCBTT0ZUV0FSRSBET0VTIE5PVCBXQVJSQU5UIFRIQVQgVEhFIFNPRlRXQVJFIE9SIFRIRSBPUEVSQVRJT04gT0YgVEhFIFNPRlRXQVJFIFdJTEwgQkUgVU5JTlRFUlJVUFRFRCBPUiBFUlJPUiBGUkVFIE9SIFRIQVQgVEhFIFNPRlRXQVJFIFdJTEwgTUVFVCBZT1VSIFNQRUNJRklDIE9SIFNQRUNJQUwgUkVRVUlSRU1FTlRTLiAgQURESVRJT05BTCBTVEFURU1FTlRTLCBXSEVUSEVSIE9SQUwgT1IgV1JJVFRFTiwgRE8gTk9UIENPTlNUSVRVVEUgV0FSUkFOVElFUyBCWSBJRFNPRlRXQVJFIEFORCBTSE9VTEQgTk9UIEJFIFJFTElFRCBVUE9OLiAgVGhpcyBzZWN0aW9uIHNoYWxsIHN1cnZpdmUgdGhlIGNhbmNlbGxhdGlvbiBvciB0ZXJtaW5hdGlvbiBvZiB0aGlzIEFncmVlbWVudC4KKworNy4JTGltaXRlZCBBY3RpdmlzaW9uIFdhcnJhbnR5LiAgQWN0aXZpc2lvbiB3YXJyYW50cyB0byB0aGUgb3JpZ2luYWwgY29uc3VtZXIgcHVyY2hhc2VyIG9mIHRoZSBTb2Z0d2FyZSB0aGF0IHRoZSByZWNvcmRpbmcgbWVkaXVtIG9uIHdoaWNoIHRoZSBTb2Z0d2FyZSBpcyByZWNvcmRlZCB3aWxsIGJlIGZyZWUgZnJvbSBkZWZlY3RzIGlubWF0ZXJpYWwgYW5kIHdvcmttYW5zaGlwIGZvciBuaW5ldHkgKDkwKSBkYXlzIGZyb20gdGhlIGRhdGUgb2YgcHVyY2hhc2UuICBJZiB0aGUgcmVjb3JkaW5nIG1lZGl1bSBpcyBmb3VuZCBkZWZlY3RpdmUgd2l0aGluIG5pbmV0eSAoOTApIGRheXMgb2Ygb3JpZ2luYWwgcHVyY2hhc2UsIEFjdGl2aXNpb24gYWdyZWVzIHRvIHJlcGxhY2UsIGZyZWUgb2YgY2hhcmdlLCBhbnkgU29mdHdhcmUgZGlzY292ZXJlZCB0byBiZSBkZWZlY3RpdmUgd2l0aGluIHN1Y2ggcGVyaW9kIHVwb24gaXRzIHJlY2VpcHQgb2YgdGhlIFNvZnR3YXJlLCBwb3N0YWdlIHBhaWQsIHdpdGggdGhlIHByb29mIG9mIHRoZSBkYXRlIG9mIHB1cmNoYXNlLCBhcyBsb25nIGFzIHRoZSBTb2Z0d2FyZSBpcyBzdGlsbCBiZWluZyBtYW51ZmFjdHVyZWQgYnkgQWN0aXZpc2lvbi4gIEluIHRoZSBldmVudCB0aGF0IHRoZSBTb2Z0d2FyZSBpcyBubyBsb25nZXIgYXZhaWxhYmxlLCBBY3RpdmlzaW9uIHJldGFpbnMgdGhlIHJpZ2h0IHRvIHN1YnN0aXR1dGUgYSBzaW1pbGFyIGdhbWUgcHJvZ3JhbSBvZiBlcXVhbCBvciBncmVhdGVyIHZhbHVlLiAgVGhpcyB3YXJyYW50eSBpcyBsaW1pdGVkIHRvIHRoZSByZWNvcmRpbmcgbWVkaXVtIGNvbnRhaW5pbmcgdGhlIFNvZnR3YXJlIGFzIG9yaWdpbmFsbHkgcHJvdmlkZWQgYnkgQWN0aXZpc2lvbiBhbmQgaXMgbm90IGFwcGxpY2FibGUgdG8gbm9ybWFsIHdlYXIgYW5kIHRlYXIuIFRoaXMgd2FycmFudHkgc2hhbGwgbm90IGJlIGFwcGxpY2FibGUgYW5kIHNoYWxsIGJlIHZvaWQgaWYgdGhlIGRlZmVjdCBoYXMgYXJpc2VuIHRocm91Z2ggYWJ1c2UsIG1pc3RyZWF0bWVudCBvciBuZWdsZWN0LgorCitFWENFUFQgQVMgU0VUIEZPUlRIIEFCT1ZFLCBUSElTIFdBUlJBTlRZIElTIElOIExJRVUgT0YgQUxMIE9USEVSIFdBUlJBTlRJRVMsIFdIRVRIRVIgT1JBTCBPUiBXUklUVEVOLCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBBTlkgV0FSUkFOVFkgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT05JTkZSSU5HRU1FTlQsIEFORCBOTyBPVEhFUiBSRVBSRVNFTlRBVElPTlMgT1IgQ0xBSU1TIE9GIEFOWSBLSU5EIFNIQUxMIEJFIEJJTkRJTkcgT04gT1IgT0JMSUdBVEUgQUNUSVZJU0lPTi4KKworV2hlbiByZXR1cm5pbmcgdGhlIFNvZnR3YXJlIGZvciB3YXJyYW50eSByZXBsYWNlbWVudCwgdGhlIG9yaWdpbmFsIFNvZnR3YXJlIGRpc2tzIG11c3QgYmUgc2VudCBvbmx5IGluIHByb3RlY3RpdmUgcGFja2FnaW5nIGFuZCBpbmNsdWRlOiAoMSkgcGhvdG9jb3B5IG9mIHlvdXIgZGF0ZWQgc2FsZXMgcmVjZWlwdDsgKDIpIHlvdXIgbmFtZSBhbmQgcmV0dXJuIGFkZHJlc3MgdHlwZWQgb3IgY2xlYXJseSBwcmludGVkOyAoMykgYSBicmllZiBub3RlIGRlc2NyaWJpbmcgdGhlIGRlZmVjdCwgdGhlIHByb2JsZW0ocykgeW91IGFyZSBlbmNvdW50ZXJpbmcgYW5kIHRoZSBzeXN0ZW0gb24gd2hpY2ggeW91IGFyZSBydW5uaW5nIHRoZSBTb2Z0d2FyZTsgYW5kICg0KSBpZiB5b3UgYXJlIHJldHVybmluZyB0aGUgU29mdHdhcmUgYWZ0ZXIgdGhlIDkwLWRheSB3YXJyYW50eSBwZXJpb2QsIGJ1dCB3aXRoaW4gb25lIHllYXIgYWZ0ZXIgdGhlIGRhdGUgb2YgcHVyY2hhc2UsIHBsZWFzZSBpbmNsdWRlIGNoZWNrIG9yIG1vbmV5IG9yZGVyIGZvciAkMTAgVS5TLiAoJDE5IEFVRCBmb3IgQXVzdHJhbGlhLCBvciDCozEwLjAwIGZvciBFdXJvcGUpIGN1cnJlbmN5IHBlciBDRCBvciBmbG9wcHkgZGlzayByZXBsYWNlbWVudC4gIE5vdGU6ICBDZXJ0aWZpZWQgbWFpbCByZWNvbW1lbmRlZC4KKworSW4gdGhlIFUuUy4gc2VuZCB0bzoKKworV2FycmFudHkgUmVwbGFjZW1lbnRzCitBY3RpdmlzaW9uLCBJbmMuCitQLk8uIEJveCA2NzcxMworTG9zIEFuZ2VsZXMsIENBIDkwMDY3CisKK0luIEV1cm9wZSBzZW5kIHRvOgorCitXYXJyYW50eSBSZXBsYWNlbWVudHMKK0FjdGl2aXNpb24KK1BhcmxpYW1lbnQgSG91c2UKK1N0LiBMYXVyZW5jZSBXYXkKK1Nsb3VnaCwgQmVya3NoaXJlIFNMMSAyQlcKK1VuaXRlZCBLaW5nZG9tCisKK0Rpc2sgUmVwbGFjZW1lbnQ6ICArNDQgKDApIDg3MDUgMTQzIDUyNQorCitJbiBBdXN0cmFsaWEgYW5kIEFzaWEgUGFjaWZpYyB0ZXJyaXRvcmllcyBzZW5kIHRvOgorCitXYXJyYW50eSBSZXBsYWNlbWVudHMKK0FjdGl2aXNpb24KK0NlbnR1cnkgUGxhemEKKzQxIFJhd3NvbiBTdHJlZXQKK0VwcGluZywgTlNXIDIxMjEKK0F1c3RyYWxpYQorCis4LglHb3Zlcm5pbmcgTGF3LCBWZW51ZSwgSW5kZW1uaXR5IGFuZCBMaWFiaWxpdHkgTGltaXRhdGlvbi4gIFRoaXMgQWdyZWVtZW50IHNoYWxsIGJlY29uc3RydWVkIGluIGFjY29yZGFuY2Ugd2l0aCBhbmQgZ292ZXJuZWQgYnkgdGhlIGFwcGxpY2FibGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgVGV4YXMgYW5kIGFwcGxpY2FibGUgVW5pdGVkIFN0YXRlcyBmZWRlcmFsIGxhdy4gIEV4Y2VwdCBhcyBzZXQgZm9ydGggYmVsb3csIGV4Y2x1c2l2ZSB2ZW51ZSBmb3IgYWxsIGxpdGlnYXRpb24gcmVnYXJkaW5nIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGluIERhbGxhcyBDb3VudHksIFRleGFzIGFuZCB5b3UgYWdyZWUgdG8gc3VibWl0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIGZlZGVyYWwgYW5kIHN0YXRlIGNvdXJ0cyBpbiBEYWxsYXMgQ291bnR5LCBUZXhhcyBmb3IgYW55IHN1Y2ggbGl0aWdhdGlvbi4gRXhjbHVzaXZlIHZlbnVlIGZvciBhbGxsaXRpZ2F0aW9uIGludm9sdmluZyBBY3RpdmlzaW9uLCBidXQgbm90IGludm9sdmluZyBJZCBTb2Z0d2FyZSwgd2l0aCByZWdhcmQgdG8gdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgaW4gTG9zIEFuZ2VsZXMgQ291bnR5LCBDYWxpZm9ybmlhIGFuZCB5b3UgYWdyZWUgdG8gc3VibWl0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIGNvdXJ0cyBpbiBMb3NBbmdlbGVzLCBDYWxpZm9ybmlhIGZvciBhbnkgc3VjaCBsaXRpZ2F0aW9uLiAgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnksIGRlZmVuZCBhbmQgaG9sZCBoYXJtbGVzcyBJZCBTb2Z0d2FyZSBhbmQgQWN0aXZpc2lvbiBhbmQgSWQgU29mdHdhcmUncyBhbmQgQWN0aXZpc2lvbidzIHJlc3BlY3RpdmUgb2ZmaWNlcnMsIGVtcGxveWVlcywgZGlyZWN0b3JzLCBhZ2VudHMsIGxpY2Vuc2VlcyAoZXhjbHVkaW5nIHlvdSksIHN1Yi1saWNlbnNlZXMgKGV4Y2x1ZGluZyB5b3UpLCBzdWNjZXNzb3JzIGFuZCBhc3NpZ25zIGZyb20gYW5kIGFnYWluc3QgYWxsIGxvc3NlcywgbGF3c3VpdHMsIGRhbWFnZXMsIGNhdXNlcyBvZiBhY3Rpb24gYW5kIGNsYWltcyByZWxhdGluZyB0byBhbmQvb3IgYXJpc2luZ2Zyb20gdGhlIE5ldyBDcmVhdGlvbnMgb3IgdGhlIGRpc3RyaWJ1dGlvbiBvciBvdGhlciB1c2Ugb2YgdGhlIE5ldyBDcmVhdGlvbnMgb3IgcmVsYXRpbmcgdG8gYW5kL29yYXJpc2luZyBmcm9tIHlvdXIgYnJlYWNoIG9mIHRoaXMgQWdyZWVtZW50LiAgWW91IGFncmVlIHRoYXQgeW91ciB1bmF1dGhvcml6ZWQgdXNlIG9mIHRoZSBTb2Z0d2FyZSBJbWFnZXMsIHRoZSBQcmludGVkIE1hdGVyaWFscywgb3IgdGhlIFNvZnR3YXJlLCBvciBhbnkgcGFydCB0aGVyZW9mLCBtYXkgaW1tZWRpYXRlbHkgYW5kIGlycmVwYXJhYmx5IGRhbWFnZSBJZCBTb2Z0d2FyZSBzdWNoIHRoYXQgSWQgU29mdHdhcmUgY291bGQgbm90IGJlIGFkZXF1YXRlbHkgY29tcGVuc2F0ZWQgc29sZWx5IGJ5IGFtb25ldGFyeSBhd2FyZCwgYW5kIGluIHN1Y2ggZXZlbnQsIGF0IElkIFNvZnR3YXJlJ3Mgb3B0aW9uLCB0aGF0IElkIFNvZnR3YXJlIHNoYWxsIGJlIGVudGl0bGVkIHRvIGFuIGluanVuY3RpdmUgb3JkZXIsIGluIGFkZGl0aW9uIHRvIGFsbCBvdGhlciBhdmFpbGFibGUgcmVtZWRpZXMgaW5jbHVkaW5nIGEgbW9uZXRhcnkgYXdhcmQsIHRvIHByb2hpYml0IHN1Y2ggdW5hdXRob3JpemVkIHVzZSB3aXRob3V0IHRoZSBuZWNlc3NpdHkgb2YgSWQgU29mdHdhcmUgcG9zdGluZyBib25kIG9yIG90aGVyIHNlY3VyaXR5LiAgSU4gQU5ZIENBU0UsIElEIFNPRlRXQVJFLCBBQ1RJVklTSU9OLCBBTkQgSUQgU09GVFdBUkUnUyBBTkQgQUNUSVZJU0lPTidTIFJFU1BFQ1RJVkUgT0ZGSUNFUlMsIEVNUExPWUVFUywgRElSRUNUT1JTLCBTSEFSRUhPTERFUlMsIFJFUFJFU0VOVEFUSVZFUywgQUdFTlRTLCBMSUNFTlNFRVMgKEVYQ0xVRElORyBZT1UpLCBTVUJMSUNFTlNFRVMgKEVYQ0xVU0lORyBZT1UpLCBTVUNDRVNTT1JTIEFORCBBU1NJR05TIFNIQUxMIE5PVCBCRSBMSUFCTEUgRk9SIExPU1MgT0YgREFUQSwgTE9TUyBPRiBQUk9GSVRTLCBMT1NUIFNBVklOR1MsIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIElORElSRUNUIE9SIFBVTklUSVZFIERBTUFHRVMgT1IgQU5ZIE9USEVSREFNQUdFUyBBUklTSU5HIEZST00gQU5ZIEFMTEVHRUQgQ0xBSU0gRk9SIEJSRUFDSCBPRiBXQVJSQU5UWSwgQlJFQUNIIE9GQ09OVFJBQ1QsIE5FR0xJR0VOQ0UsIFNUUklDVCBQUk9EVUNUIExJQUJJTElUWSwgT1IgT1RIRVIgTEVHQUwgVEhFT1JZIEVWRU4gSUYgSUQgU09GVFdBUkUsIEFDVElWSVNJT04gT1IgVEhFSVIgUkVTUEVDVElWRSBBR0VOVChTKSBIQVZFIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgQU5ZIFNVQ0ggREFNQUdFUywgT1IgRVZFTiBJRiBTVUNIIERBTUFHRVMgQVJFIEZPUkVTRUVBQkxFLCBPUiBMSUFCTEUgRk9SIEFOWSBDTEFJTSBCWSBBTlkgT1RIRVIgUEFSVFkuICBTb21lIGp1cmlzZGljdGlvbnMgZG8gbm90IGFsbG93IHRoZSBleGNsdXNpb24gb3IgbGltaXRhdGlvbiBvZiBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc28gdGhlIGFib3ZlIGxpbWl0YXRpb24gb3IgZXhjbHVzaW9uIG1heSBub3QgYXBwbHkgdG8geW91LiAgVGhpcyBzZWN0aW9uIHNoYWxsIHN1cnZpdmUgdGhlIGNhbmNlbGxhdGlvbiBvciB0ZXJtaW5hdGlvbiBvZiB0aGlzIEFncmVlbWVudC4KKworOS4JVS5TLiBHb3Zlcm5tZW50IFJlc3RyaWN0ZWQgUmlnaHRzLiAgVG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlLCB0aGUgVW5pdGVkIFN0YXRlcyBHb3Zlcm5tZW50IHNoYWxsIG9ubHkgaGF2ZSB0aG9zZSByaWdodHMgdG8gdXNlIHRoZSBTb2Z0d2FyZSBhbmQgdGhlIFByaW50ZWQgTWF0ZXJpYWxzIGFzIGV4cHJlc3NseSBzdGF0ZWQgYW5kIGV4cHJlc3NseSBsaW1pdGVkIGFuZCByZXN0cmljdGVkIGluIHRoaXMgQWdyZWVtZW50LCBhcyBwcm92aWRlZCBpbiA0OCBDLkYuUi4gwqfCpyAyMjcuNzIwMXRocm91Z2ggMjI3LjcyMDQsIGluY2x1c2l2ZS4KKworMTAuCUdlbmVyYWwgUHJvdmlzaW9ucy4gIE5laXRoZXIgdGhpcyBBZ3JlZW1lbnQgbm9yIGFueSBwYXJ0IG9yIHBvcnRpb24gaGVyZW9mIHNoYWxsIGJlIGFzc2lnbmVkIG9yIHN1YmxpY2Vuc2VkIGJ5IHlvdS4gIElkIFNvZnR3YXJlIGFuZCBBY3RpdmlzaW9uIGVhY2ggbWF5IGFzc2lnbiBpdHMgcmVzcGVjdGl2ZSByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgaW4gdGhlIGFzc2lnbmluZyBwYXJ0eSdzIHNvbGUgZGlzY3JldGlvbi4gIFNob3VsZCBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGJlIGhlbGQgdG9iZSB2b2lkLCBpbnZhbGlkLCB1bmVuZm9yY2VhYmxlIG9yIGlsbGVnYWwgYnkgYSBjb3VydCBvZiBjb21wZXRlbnQganVyaXNkaWN0aW9uLCB0aGUgdmFsaWRpdHkgYW5kIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSBvdGhlciBwcm92aXNpb25zIHNoYWxsIG5vdCBiZSBhZmZlY3RlZCB0aGVyZWJ5LiAgSWYgYW55IHByb3Zpc2lvbiBpcyBkZXRlcm1pbmVkIHRvIGJlIHVuZW5mb3JjZWFibGUgYnkgYSBjb3VydCBvZiBjb21wZXRlbnQganVyaXNkaWN0aW9uLCB5b3UgYWdyZWUgdG8gYSBtb2RpZmljYXRpb24gb2Ygc3VjaCBwcm92aXNpb24gdG8gcHJvdmlkZSBmb3IgZW5mb3JjZW1lbnQgb2YgdGhlIHByb3Zpc2lvbidzIGludGVudCwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcuICBGYWlsdXJlIG9mIElkIFNvZnR3YXJlIG9yIEFjdGl2aXNpb24gdG8gZW5mb3JjZSBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IHNoYWxsIG5vdCBjb25zdGl0dXRlIG9yIGJlY29uc3RydWVkIGFzIGEgd2FpdmVyIG9mIHN1Y2ggcHJvdmlzaW9uIG9yIG9mIHRoZSByaWdodCB0byBlbmZvcmNlIHN1Y2ggcHJvdmlzaW9uLiAgSU1NRURJQVRFTFlVUE9OIFlPVVIgRkFJTFVSRSBUTyBDT01QTFkgV0lUSCBPUiBCUkVBQ0ggT0YgQU5ZIFRFUk0gT1IgUFJPVklTSU9OIE9GIFRISVMgQUdSRUVNRU5ULCBZT1VSIExJQ0VOU0UgR1JBTlRFRCBIRVJFSU4gQU5EIFRISVMgQUdSRUVNRU5UIFNIQUxMIEFVVE9NQVRJQ0FMTFkgVEVSTUlOQVRFLCBXSVRIT1VUIE5PVElDRSwgQU5EIElEIFNPRlRXQVJFIEFORCBBQ1RJVklTSU9OIE1BWSBQVVJTVUUgQUxMIFJFTElFRiBBTkQgUkVNRURJRVMgQUdBSU5TVCBZT1UsIFdISUNIIEFSRSBBVkFJTEFCTEUgVU5ERVIgQVBQTElDQUJMRSBMQVcgQU5EL09SIFRISVMgQUdSRUVNRU5ULiAgSW1tZWRpYXRlbHkgdXBvbiB0ZXJtaW5hdGlvbiBvZiB0aGlzIEFncmVlbWVudCwgYW55IGFuZCBhbGwgcmlnaHRzIHlvdSBhcmUgZ3JhbnRlZCBoZXJldW5kZXIgc2hhbGwgdGVybWluYXRlLCB5b3Ugc2hhbGwgaGF2ZSBubyByaWdodCB0byB1c2UgdGhlIFNvZnR3YXJlLCB0aGUgUHJpbnRlZCBNYXRlcmlhbHMgb3IgdGhlIE5ldyBDcmVhdGlvbnMsIGluIGFueSBtYW5uZXIsIGFuZCB5b3Ugc2hhbGwgaW1tZWRpYXRlbHkgZGVzdHJveSBhbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgdGhlIFByaW50ZWQgTWF0ZXJpYWxzIGFuZCB0aGUgTmV3IENyZWF0aW9ucyBpbiB5b3VyIHBvc3Nlc3Npb24sIGN1c3RvZHkgb3IgY29udHJvbCwgYW5kIGFsbCByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgc2hhbGwgcmV2ZXJ0LCB3aXRob3V0IG5vdGljZSwgdG8gYW5kIGJlIHZlc3RlZCBpbiBJZCBTb2Z0d2FyZS4KKworWU9VIEFDS05PV0xFREdFIFRIQVQgWU9VIEhBVkUgUkVBRCBUSElTIEFHUkVFTUVOVCwgWU9VIFVOREVSU1RBTkQgVEhJUyBBR1JFRU1FTlQsIEFORCBVTkRFUlNUQU5EIFRIQVQgQlkgQ09OVElOVUlORyBUSEUgSU5TVEFMTEFUSU9OIE9GIFRIRSBTT0ZUV0FSRSwgQlkgTE9BRElORyBPUiBSVU5OSU5HIFRIRSBTT0ZUV0FSRSwgT1IgQlkgUExBQ0lORyBPUiBDT1BZSU5HIFRIRSBTT0ZUV0FSRSBPTlRPIFlPVVIgQ09NUFVURVIgSEFSRCBEUklWRSBPUiBSQU0sIFlPVSBBR1JFRSBUTyBCRSBCT1VORCBCWVRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVC4gIFlPVSBGVVJUSEVSIEFHUkVFIFRIQVQsIEVYQ0VQVEZPUiBXUklUVEVOIFNFUEFSQVRFIEFHUkVFTUVOVFMsIElGIEFOWSwgQkVUV0VFTiBJRCBTT0ZUV0FSRSwgQUNUSVZJU0lPTiBBTkQgWU9VLCBUSElTIEFHUkVFTUVOVCBJUyBBIENPTVBMRVRFIEFORCBFWENMVVNJVkUgU1RBVEVNRU5UIE9GIFRIRSBSSUdIVFMgQU5EIExJQUJJTElUSUVTIE9GIFRIRSBQQVJUSUVTIEhFUkVUTywgUkVMQVRJTkcgVE8gVEhFIFNVQkpFQ1QgTUFUVEVSIEhFUkVPRi4gIFRISVMgQUdSRUVNRU5UIFNVUEVSU0VERVMgQUxMIFBSSU9SIE9SQUwgQUdSRUVNRU5UUywgUFJPUE9TQUxTIE9SIFVOREVSU1RBTkRJTkdTLCBBTkQgQU5ZIE9USEVSIENPTU1VTklDQVRJT05TLCBJRiBBTlksIEJFVFdFRU4gSUQgU09GVFdBUkUsIEFDVElWSVNJT04gQU5EIFlPVSBSRUxBVElORyBUTyBUSEUgU1VCSkVDVCBNQVRURVIgT0YgVEhJUyBBR1JFRU1FTlQuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9SVENXLUVURVVMQSBiL2xpY2Vuc2VzL1JUQ1ctRVRFVUxBCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYxZDQwZWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9SVENXLUVURVVMQQpAQCAtMCwwICsxLDQ3IEBACitMSU1JVEVEIFVTRSBTT0ZUV0FSRSBMSUNFTlNFIEFHUkVFTUVOVAorCitUaGlzIExpbWl0ZWQgVXNlIFNvZnR3YXJlIExpY2Vuc2UgQWdyZWVtZW50ICh0aGlzICJBZ3JlZW1lbnQiKSBpcyBhIGxlZ2FsIGFncmVlbWVudCBiZXR3ZWVuIHlvdSwgdGhlIGVuZC11c2VyLCBhbmQgSWQgU29mdHdhcmUsIEluYy4gKCJJRCIpLiAgQlkgQ09OVElOVUlORyBUSEUgRE9XTkxPQUQgT1IgSU5TVEFMTEFUSU9OIE9GIFRIRSBHQU1FIFBST0dSQU0gRU5USVRMRUQgV09MRkVOU1RFSU46IEVORU1ZIFRFUlJJVE9SWSAgKFRIRSAiU09GVFdBUkUiKSwgQlkgTE9BRElORyBPUiBSVU5OSU5HIFRIRSBTT0ZUV0FSRSwgT1IgQlkgUExBQ0lORyBPUiBDT1BZSU5HIFRIRSBTT0ZUV0FSRSBPTlRPIFlPVVIgQ09NUFVURVIgSEFSRCBEUklWRSwgQ09NUFVURVIgUkFNIE9SIE9USEVSIFNUT1JBR0UsIFlPVSBBUkUgQUdSRUVJTkcgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgQUdSRUVNRU5ULiAgWW91IGFncmVlIHRoYXQgeW91IGFyZSBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoZSBTb2Z0d2FyZSB2aWEgZG93bmxvYWQgb25seSwgYW5kIHlvdSBhY2tub3dsZWRnZSBhbmQgYWdyZWUgdGhhdCB5b3Ugc2hhbGwgbm90IGNvcHkgb3IgcmV0YWluIHRoZSBTb2Z0d2FyZSBleGNlcHQgYXMgZXhwcmVzc2x5IHBlcm1pdHRlZCBoZXJlaW4uCisKKzEuCUdyYW50IG9mIExpY2Vuc2UuICBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgcHJvdmlzaW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgc28gbG9uZyBhcyB5b3UgZnVsbHkgY29tcGx5IGF0IGFsbCB0aW1lcyB3aXRoIHRoaXMgQWdyZWVtZW50LCBJRCBncmFudHMgdG8geW91IHRoZSBub24tZXhjbHVzaXZlIGFuZCBsaW1pdGVkIHJpZ2h0IHRvIHVzZSB0aGUgU29mdHdhcmUgb25seSBpbiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGZvcm0uICBUaGUgdGVybSAiU29mdHdhcmUiIGluY2x1ZGVzIGFsbCBlbGVtZW50cyBvZiB0aGUgU29mdHdhcmUsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBkYXRhIGZpbGVzIGFuZCBzY3JlZW4gZGlzcGxheXMuICBZb3UgYXJlIG5vdCByZWNlaXZpbmcgYW55IG93bmVyc2hpcCBvciBwcm9wcmlldGFyeSByaWdodCwgdGl0bGUgb3IgaW50ZXJlc3QgaW4gb3IgdG8gdGhlIFNvZnR3YXJlIG9yIHRoZSBjb3B5cmlnaHRzLCB0cmFkZW1hcmtzIG9yIG90aGVyIHJpZ2h0cyByZWxhdGVkIHRoZXJldG8uICBGb3IgcHVycG9zZXMgb2YgdGhlIGZpcnN0IHNlbnRlbmNlIG9mIHRoaXMgc2VjdGlvbiwgInVzZSIgbWVhbnMgbG9hZGluZyB0aGUgU29mdHdhcmUgaW50byBSQU0gYW5kL29yIG9udG8gY29tcHV0ZXIgaGFyZCBkcml2ZSwgYXMgd2VsbCBhcyBpbnN0YWxsYXRpb24gb2YgdGhlIFNvZnR3YXJlIG9uIGEgaGFyZCBkaXNrIG9yIG90aGVyIHN0b3JhZ2UgZGV2aWNlLCBhbmQgbWVhbnMgdGhlIHVzZXMgcGVybWl0dGVkIGluIHNlY3Rpb25zIDIgYW5kIDQgaGVyZWluYmVsb3cuICBZb3UgYWdyZWUgdGhhdCB0aGUgU29mdHdhcmUgd2lsbCBub3QgYmUgZG93bmxvYWRlZCwgc2hpcHBlZCwgdHJhbnNmZXJyZWQsIGV4cG9ydGVkIG9yIHJlLWV4cG9ydGVkIGludG8gYW55IGNvdW50cnkgb3IgdG8gYSBuYXRpb25hbCBvciByZXNpZGVudCBvZiBhbnkgY291bnRyeSBpbiB2aW9sYXRpb24gb2YgdGhlIFVuaXRlZCBTdGF0ZXMgRXhwb3J0IEFkbWluaXN0cmF0aW9uIEFjdCAob3IgYW55IG90aGVyIGxhdyBnb3Zlcm5pbmcgc3VjaCBtYXR0ZXJzKSBieSB5b3Ugb3IgYW55b25lIGF0IHlvdXIgZGlyZWN0aW9uIGFuZCB0aGF0IHlvdSB3aWxsIG5vdCB1dGlsaXplLCBhbmQgd2lsbCBub3QgYXV0aG9yaXplIGFueW9uZSB0byB1dGlsaXplLCBpbiBhbnkgb3RoZXIgbWFubmVyLCB0aGUgU29mdHdhcmUgaW4gdmlvbGF0aW9uIG9mIGFueSBhcHBsaWNhYmxlIGxhdy4gIFRoZSBTb2Z0d2FyZSBzaGFsbCBub3QgYmUgZG93bmxvYWRlZCBvciBvdGhlcndpc2UgZXhwb3J0ZWQgb3IgcmUtZXhwb3J0ZWQgaW50byBhbnkgY291bnRyeSBvciB0byBhIG5hdGlvbmFsIG9yIHJlc2lkZW50IG9mIGFueSBjb3VudHJ5IHRvIHdoaWNoIHRoZSBVbml0ZWQgU3RhdGVzIGhhcyBlbWJhcmdvZWQgZ29vZHMgb3IgdG8gYW55b25lIG9yIGludG8gYW55IGNvdW50cnkgd2hvL3RoYXQgYXJlIHByb2hpYml0ZWQsIGJ5IGFwcGxpY2FibGUgbGF3LCBmcm9tIHJlY2VpdmluZyBzdWNoIHByb3BlcnR5LiAgSW4gZXhlcmNpc2luZyB5b3VyIGxpbWl0ZWQgcmlnaHRzIGhlcmV1bmRlciwgeW91IHNoYWxsIGNvbXBseSwgYXQgYWxsIHRpbWVzLCB3aXRoIGFsbCBhcHBsaWNhYmxlIGxhd3MsIHJlZ3VsYXRpb25zLCBvcmRpbmFuY2VzIGFuZCBzdGF0dXRlcy4gIElEIHJlc2VydmVzIGFsbCByaWdodHMgbm90IGdyYW50ZWQgaW4gdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbGwgcmlnaHRzIHRvIElEJ3MgdHJhZGVtYXJrcy4KKworMi4JUGVybWl0dGVkIE5ldyBDcmVhdGlvbnMuICBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgcHJvdmlzaW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgc28gbG9uZyBhcyB5b3UgZnVsbHkgY29tcGx5IGF0IGFsbCB0aW1lcyB3aXRoIHRoaXMgQWdyZWVtZW50LCBJRCBncmFudHMgdG8geW91IHRoZSBub24tZXhjbHVzaXZlIGFuZCBsaW1pdGVkIHJpZ2h0IHRvIGNyZWF0ZSBmb3IgdGhlIFNvZnR3YXJlIChleGNlcHQgYW55IFNvZnR3YXJlIGNvZGUpIHlvdXIgb3duIG1vZGlmaWNhdGlvbnMgKHRoZSAiTmV3IENyZWF0aW9ucyIpIHRoYXQgc2hhbGwgb3BlcmF0ZSBvbmx5IHdpdGggdGhlIFNvZnR3YXJlIChidXQgbm90IGFueSBkZW1vLCB0ZXN0IG9yIG90aGVyIHZlcnNpb24gb2YgdGhlIFNvZnR3YXJlKS4gIFlvdSBtYXkgaW5jbHVkZSB3aXRoaW4gdGhlIE5ldyBDcmVhdGlvbnMgY2VydGFpbiB0ZXh0dXJlcyBhbmQgb3RoZXIgaW1hZ2VzICh0aGUgIlNvZnR3YXJlIEltYWdlcyIpIGZyb20gdGhlIFNvZnR3YXJlLiAgWW91IHNoYWxsIG5vdCBjcmVhdGUgYW55IE5ldyBDcmVhdGlvbnMgdGhhdCBpbmZyaW5nZSBhZ2FpbnN0IGFueSB0aGlyZC1wYXJ0eSByaWdodCBvciB0aGF0IGFyZSBsaWJlbG91cywgZGVmYW1hdG9yeSwgb2JzY2VuZSwgZmFsc2UsIG1pc2xlYWRpbmcsIG9yIG90aGVyd2lzZSBpbGxlZ2FsIG9yIHVubGF3ZnVsLiBZb3UgYWdyZWUgdGhhdCB0aGUgTmV3IENyZWF0aW9ucyB3aWxsIG5vdCBiZSBkb3dubG9hZGVkLCBzaGlwcGVkLCB0cmFuc2ZlcnJlZCwgZXhwb3J0ZWQgb3IgcmUtZXhwb3J0ZWQgaW50byBhbnkgY291bnRyeSBvciB0byBhIG5hdGlvbmFsIG9yIHJlc2lkZW50IG9mIGFueSBjb3VudHJ5IGluIHZpb2xhdGlvbiBvZiB0aGUgVW5pdGVkIFN0YXRlcyBFeHBvcnQgQWRtaW5pc3RyYXRpb24gQWN0IChvciBhbnkgb3RoZXIgbGF3IGdvdmVybmluZyBzdWNoIG1hdHRlcnMpIGJ5IHlvdSBvciBhbnlvbmUgYXQgeW91ciBkaXJlY3Rpb24gYW5kIHRoYXQgeW91IHdpbGwgbm90IHV0aWxpemUsIGFuZCB3aWxsIG5vdCBhdXRob3JpemUgYW55b25lIHRvIHV0aWxpemUsIGluIGFueSBvdGhlciBtYW5uZXIsIHRoZSBOZXcgQ3JlYXRpb25zIGluIHZpb2xhdGlvbiBvZiBhbnkgYXBwbGljYWJsZSBsYXcuICBUaGUgTmV3IENyZWF0aW9ucyBzaGFsbCBub3QgYmUgZG93bmxvYWRlZCBvciBvdGhlcndpc2UgZXhwb3J0ZWQgb3IgcmUtZXhwb3J0ZWQgaW50byBhbnkgY291bnRyeSBvciB0byBhIG5hdGlvbmFsIG9yIHJlc2lkZW50IG9mIGFueSBjb3VudHJ5IHRvIHdoaWNoIHRoZSBVbml0ZWQgU3RhdGVzIGhhcyBlbWJhcmdvZWQgZ29vZHMgb3IgdG8gYW55b25lIG9yIGludG8gYW55IGNvdW50cnkgd2hvL3RoYXQgYXJlIHByb2hpYml0ZWQsIGJ5IGFwcGxpY2FibGUgbGF3LCBmcm9tIHJlY2VpdmluZyBzdWNoIHByb3BlcnR5LiAgWW91IHNoYWxsIG5vdCByZW50LCBzZWxsLCBsZWFzZSwgbGVuZCwgb2ZmZXIgb24gYSBwYXktcGVyLXBsYXkgYmFzaXMgb3Igb3RoZXJ3aXNlIGNvbW1lcmNpYWxseSBleHBsb2l0IG9yIGNvbW1lcmNpYWxseSBkaXN0cmlidXRlIHRoZSBOZXcgQ3JlYXRpb25zLiAgWW91IGFyZSBwZXJtaXR0ZWQgb25seSB0byBkaXN0cmlidXRlLCB3aXRob3V0IGFueSBjb3N0IG9yIGNoYXJnZSwgdGhlIE5ldyBDcmVhdGlvbnMgdG8gb3RoZXIgZW5kLXVzZXJzIHNvIGxvbmcgYXMgc3VjaCBkaXN0cmlidXRpb24gaXMgbm90IGluZnJpbmdpbmcgYWdhaW5zdCBhbnkgdGhpcmQtcGFydHkgcmlnaHQgYW5kIGlzIG5vdCBvdGhlcndpc2UgaWxsZWdhbCBvciB1bmxhd2Z1bC4gIEFzIG5vdGVkIGJlbG93LCBpbiB0aGUgZXZlbnQgeW91IGNvbW1pdCBhbnkgYnJlYWNoIG9mIHRoaXMgQWdyZWVtZW50LCB5b3VyIGxpY2Vuc2UgYW5kIHRoaXMgQWdyZWVtZW50IGF1dG9tYXRpY2FsbHkgc2hhbGwgdGVybWluYXRlLCB3aXRob3V0IG5vdGljZS4KKworMy4JUHJvaGliaXRpb25zIHdpdGggUmVnYXJkIHRvIHRoZSBTb2Z0d2FyZS4gIFlvdSwgd2hldGhlciBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBzaGFsbCBub3QgZG8gYW55IG9mIHRoZSBmb2xsb3dpbmcgYWN0czoKKworYS4JcmVudCB0aGUgU29mdHdhcmU7CisKK2IuCXNlbGwgdGhlIFNvZnR3YXJlOworCitjLglsZWFzZSBvciBsZW5kIHRoZSBTb2Z0d2FyZTsKKworZC4Jb2ZmZXIgdGhlIFNvZnR3YXJlIG9uIGEgInBheS1wZXItcGxheSIgYmFzaXM7CisKK2UuCWRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGJ5IGFueSBtZWFucywgZXhjZXB0IGFzIHBlcm1pdHRlZCBieSBzZWN0aW9uIDQgaGVyZWluYmVsb3c7CisKK2YuCWluIGFueSBvdGhlciBtYW5uZXIgYW5kIHRocm91Z2ggYW55IG1lZGl1bSB3aGF0c29ldmVyIGNvbW1lcmNpYWxseSBleHBsb2l0IHRoZSBTb2Z0d2FyZSwgb3IgdXNlIHRoZSBTb2Z0d2FyZSBmb3IgYW55IGNvbW1lcmNpYWwgcHVycG9zZSwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGdpdmluZyBhd2F5IGNvcGllcyBvZiB0aGUgU29mdHdhcmUgZm9yIGZyZWUgdG8gcHJvbW90ZSBvciBtYXJrZXQgYW55IG90aGVyIG1hdGVyaWFsOworCitnLglkaXNhc3NlbWJsZSwgcmV2ZXJzZSBlbmdpbmVlciwgZGVjb21waWxlLCBtb2RpZnksIGV4Y2VwdCBhcyBwZXJtaXR0ZWQgYnkgc2VjdGlvbsKgMiBoZXJlaW5hYm92ZSwgb3IgYWx0ZXIgdGhlIFNvZnR3YXJlOworCitoLgl0cmFuc2xhdGUgdGhlIFNvZnR3YXJlOworCitpLglyZXByb2R1Y2Ugb3IgY29weSB0aGUgU29mdHdhcmUsIGV4Y2VwdCBhcyBwZXJtaXR0ZWQgYnkgc2VjdGlvbiA0IGhlcmVpbmJlbG93OworCitqLglwdWJsaWNseSBkaXNwbGF5IHRoZSBTb2Z0d2FyZTsKKworay4JcHJlcGFyZSBvciBkZXZlbG9wIGRlcml2YXRpdmUgd29ya3MgYmFzZWQgdXBvbiB0aGUgU29mdHdhcmU7IG9yCisKK2wuCW1vZGlmeSwgcmVtb3ZlIG9yIGFsdGVyIHRoaXMgQWdyZWVtZW50IG9yIGFueSBub3RpY2VzIG9yIG90aGVyIG1hcmtpbmdzIG9yIGxlZ2VuZHMsIHN1Y2ggYXMgdHJhZGVtYXJrIG9yIGNvcHlyaWdodCBub3RpY2VzLCBhZmZpeGVkIG9uIG9yIHdpdGhpbiB0aGUgU29mdHdhcmUuCisKKzQuCVBlcm1pdHRlZCBEaXN0cmlidXRpb24gYW5kIENvcHlpbmcuICBTbyBsb25nIGFzIHRoaXMgQWdyZWVtZW50IGFjY29tcGFuaWVzIGVhY2ggY29weSB5b3UgbWFrZSBvZiB0aGUgU29mdHdhcmUgYW5kIHNvIGxvbmcgYXMgeW91IGZ1bGx5IGNvbXBseSBhdCBhbGwgdGltZXMgd2l0aCB0aGlzIEFncmVlbWVudCwgSUQgZ3JhbnRzIHRvIHlvdSB0aGUgbm9uLWV4Y2x1c2l2ZSBhbmQgbGltaXRlZCByaWdodCB0bzogIChpKSBjb3B5IHRoZSBTb2Z0d2FyZSBmcm9tIHRoZSBkb3dubG9hZCBvbnRvIHlvdXIgY29tcHV0ZXIgaGFyZCBkcml2ZTsgKGlpKSBjb3B5IHRoZSBTb2Z0d2FyZSBmcm9tIHlvdXIgY29tcHV0ZXIgaGFyZCBkcml2ZSBpbnRvIHlvdXIgY29tcHV0ZXIgUkFNOyAoaWlpKSBjb3B5IG9uIG9uZSAoMSkgaGFyZCBkaXNrIG9uZSAoMSkgImJhY2sgdXAiIG9yIGFyY2hpdmFsIGNvcHkgb2YgdGhlIFNvZnR3YXJlOyBhbmQgKGl2KSBjb3B5IHRoZSBTb2Z0d2FyZSBhbmQgZGlzdHJpYnV0ZSBzdWNoIGNvcGllcyBhcyBzdGFuZGFsb25lIGNvcGllcyBvbiBwaHlzaWNhbCBtZWRpYSBvciBpbiBlbGVjdHJvbmljIGZvcm1hdCBvZiB0aGUgU29mdHdhcmUgZnJlZSBvZiBjaGFyZ2UgZm9yIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzIGFuZCBub3QgaW4gY29ubmVjdGlvbiB3aXRoIGFueSBvdGhlciBtYXRlcmlhbC4gIFlvdSBzaGFsbCBub3QgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlIGFzIG1vdW50ZWQgb24gb3IgYXR0YWNoZWQgdG8gdGhlIGNvdmVycyBvciBhbnkgb3RoZXIgcGFydCBvZiBtYWdhemluZXMgb3Igb3RoZXIgcHJpbnRlZCBtYXRlcmlhbC4gIFlvdSBzaGFsbCBub3QgY29weSBvciBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBpbiBhbnkgbWFubmVyIHRoYXQgaW5mcmluZ2VzIGFnYWluc3QsIG1pc2FwcHJvcHJpYXRlcyBvciBvdGhlcndpc2UgdmlvbGF0ZXMgYW55IHRoaXJkLXBhcnR5IHJpZ2h0IG9yIHRoYXQgaXMgbGliZWxvdXMsIGRlZmFtYXRvcnksIG9ic2NlbmUsIGZhbHNlLCBtaXNsZWFkaW5nLCBvciBvdGhlcndpc2UgaWxsZWdhbCBvciB1bmxhd2Z1bC4gIFlvdSBzaGFsbCBub3QgcmVjZWl2ZSBhbnkgcG9zdGFnZSwgc2hpcHBpbmcsIGhhbmRsaW5nIG9yIG90aGVyIGNoYXJnZSwgcGF5bWVudCwgZmVlLCBvciBvdGhlciBjb25zaWRlcmF0aW9uLCBpbmNsdWRpbmcgaXRlbXMgaW4gdHJhZGUsIGluIGV4Y2hhbmdlIGZvciBvciBpbiBjb25uZWN0aW9uIHdpdGggY29waWVzIG9mIFNvZnR3YXJlIHlvdSBtYXkgZGlzdHJpYnV0ZSwgZXZlbiBpZiBvbmx5IGZvciByZWltYnVyc2VtZW50LiAgWW91IHNoYWxsIG5vdCByZWNlaXZlIGFueSB2YWx1ZSBvciBjb25zaWRlcmF0aW9uIGluIGV4Y2hhbmdlIGZvciBvciBpbiBjb25uZWN0aW9uIHdpdGggY29waWVzIG9mIHRoZSBTb2Z0d2FyZSB5b3UgbWF5IGRpc3RyaWJ1dGUuICBZb3Ugc2hhbGwgbm90IGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGJ1bmRsZWQsIGNvLXBhY2thZ2VkIG9yIHRvZ2V0aGVyIHdpdGggYW55IG1hdGVyaWFsLiAgWW91IHNoYWxsIG5vdCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBpbiBjb25uZWN0aW9uIHdpdGggdGhlIHByb21vdGlvbiBvciBtYXJrZXRpbmcgb2YgYW55IG1hdGVyaWFsLiAgRXhjZXB0IGFzIHN1Y2ggYXJlIGluY2x1ZGVkIGJ5IElEIHdpdGhpbiBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlIHRoYXQgeW91IGFyZSBwZXJtaXR0ZWQgdG8gbWFrZSB1bmRlciB0aGlzIEFncmVlbWVudCwgeW91IHNoYWxsIG5vdCByZXByb2R1Y2UsIGRlcGljdCwgZGlzcGxheSBvciBjb3B5IHRoZSB0aXRsZSBvZiB0aGUgU29mdHdhcmUsIHRoZSBJRCBuYW1lIG9yIGFueSBzY3JlZW4gZGlzcGxheSBvciBvdGhlciBlbGVtZW50IG9yIHBhcnQgb2YgdGhlIFNvZnR3YXJlLiAgSW4gZXhlcmNpc2luZyB5b3VyIGxpbWl0ZWQgcmlnaHRzIGhlcmV1bmRlciwgeW91IHNoYWxsIGNvbXBseSwgYXQgYWxsIHRpbWVzLCB3aXRoIGFsbCBhcHBsaWNhYmxlIGxhd3MsIHJlZ3VsYXRpb25zLCBvcmRpbmFuY2VzIGFuZCBzdGF0dXRlcy4gIElEIHJlc2VydmVzIGFsbCByaWdodHMgbm90IGdyYW50ZWQgaW4gdGhpcyBBZ3JlZW1lbnQuIFlvdSBzaGFsbCBub3QgY29tbWVyY2lhbGx5IGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIHVubGVzcyB5b3UgZmlyc3QgZW50ZXIgaW50byBhIHNlcGFyYXRlIGNvbnRyYWN0IHdpdGggSUQsIG9uIHRlcm1zIGFuZCBjb25kaXRpb25zIGRldGVybWluZWQgaW4gSUQncyBzb2xlIGRpc2NyZXRpb24sIGFuZCBvbmx5IHVwb24geW91ciByZWNlaXB0IG9mIGEgd3JpdHRlbiBhZ3JlZW1lbnQgZXhlY3V0ZWQgYnkgYW4gYXV0aG9yaXplZCBvZmZpY2VyIG9mIElELgorCis1LglJbnRlbGxlY3R1YWwgUHJvcGVydHkgUmlnaHRzLiAgVGhlIFNvZnR3YXJlIGFuZCBhbGwgY29weXJpZ2h0cywgdHJhZGVtYXJrcyBhbmQgYWxsIG90aGVyIGNvbmNlaXZhYmxlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgcmVsYXRlZCB0byB0aGUgU29mdHdhcmUgYXJlIG93bmVkIGJ5IElEIGFuZCBhcmUgcHJvdGVjdGVkIGJ5IFVuaXRlZCBTdGF0ZXMgY29weXJpZ2h0IGxhd3MsIGludGVybmF0aW9uYWwgdHJlYXR5IHByb3Zpc2lvbnMgYW5kIGFsbCBhcHBsaWNhYmxlIGxhdywgc3VjaCBhcyB0aGUgTGFuaGFtIEFjdC4gIFlvdSBtdXN0IHRyZWF0IHRoZSBTb2Z0d2FyZSBsaWtlIGFueSBvdGhlciBjb3B5cmlnaHRlZCBtYXRlcmlhbCwgYXMgcmVxdWlyZWQgYnkgMTcgVS5TLkMuIMKnIDEwMSBldMKgc2VxLiBhbmQgb3RoZXIgYXBwbGljYWJsZSBsYXcuICBZb3UgYWdyZWUgdG8gdXNlIHlvdXIgYmVzdCBlZmZvcnRzIHRvIHNlZSB0aGF0IGFueSB1c2VyIG9mIHRoZSBTb2Z0d2FyZSBsaWNlbnNlZCBoZXJldW5kZXIsIG9yIHRoZSBOZXcgQ3JlYXRpb25zLCBjb21wbGllcyB3aXRoIHRoaXMgQWdyZWVtZW50LiAgWW91IGFncmVlIHRoYXQgeW91IGFyZSByZWNlaXZpbmcgYSBjb3B5IG9mIHRoZSBTb2Z0d2FyZSBieSBsaW1pdGVkIGxpY2Vuc2Ugb25seSBhbmQgbm90IGJ5IHNhbGUgYW5kIHRoYXQgdGhlICJmaXJzdCBzYWxlIiBkb2N0cmluZSBvZiAxNyBVLlMuQy4gwqcgMTA5IGRvZXMgbm90IGFwcGx5IHRvIHlvdXIgcmVjZWlwdCBvciB1c2Ugb2YgdGhlIFNvZnR3YXJlLiBUaGlzIHNlY3Rpb24gc2hhbGwgc3Vydml2ZSB0aGUgY2FuY2VsbGF0aW9uIG9yIHRlcm1pbmF0aW9uIG9mIHRoaXMgQWdyZWVtZW50LgorCis2LsKgwqDCoMKgwqDCoMKgwqAgTk8gSUQgV0FSUkFOVElFUy7CoCBJRCBESVNDTEFJTVPCoCwgQU5EIElUUyBMSUNFTlNFRSdTIChJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTizCoEFDVElWSVNJT04gSU5DLiBBTkQgSVRTIEFGRklMSUFURVMpIERJU0NMQUlNLCBBTEwgV0FSUkFOVElFUywgV0hFVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgQU5ZIFdBUlJBTlRZIE9GIE5PTi1JTkZSSU5HRU1FTlQsIFdJVEggUkVTUEVDVCBUTyBUSEUgU09GVFdBUkUsIFRIRSBTT0ZUV0FSRSBJTUFHRVMgQU5EIE9USEVSV0lTRS7CoCBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgV0lUSE9VVCBXQVJSQU5UWS7CoCBJRCBET0VTIE5PVMKgKEFORCBJVFMgTElDRU5TRUVTIERPIE5PVCkgV0FSUkFOVCBUSEFUIFRIRSBTT0ZUV0FSRSBPUiBUSEUgT1BFUkFUSU9OIE9GIFRIRSBTT0ZUV0FSRSBXSUxMIEJFIFVOSU5URVJSVVBURUQgT1IgRVJST1IgRlJFRSBPUiBUSEFUIFRIRSBTT0ZUV0FSRSBXSUxMIE1FRVQgWU9VUiBTUEVDSUZJQyBPUiBTUEVDSUFMIFJFUVVJUkVNRU5UUy7CoCBBRERJVElPTkFMIFNUQVRFTUVOVFMsIFdIRVRIRVIgT1JBTCBPUiBXUklUVEVOLCBETyBOT1QgQ09OU1RJVFVURSBXQVJSQU5USUVTIEJZIElEwqAoT1IgQU5ZIElEIExJQ0VOU0VFKSBBTkQgU0hPVUxEIE5PVCBCRSBSRUxJRUQgVVBPTi7CoCBUSElTIFNFQ1RJT04gU0hBTEwgU1VSVklWRSBUSEUgQ0FOQ0VMTEFUSU9OIE9SIFRFUk1JTkFUSU9OIE9GIFRISVMgQUdSRUVNRU5ULgorCis3LglHb3Zlcm5pbmcgTGF3LCBWZW51ZSwgSW5kZW1uaXR5IGFuZCBMaWFiaWxpdHkgTGltaXRhdGlvbi4gIFRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGNvbnN0cnVlZCBpbiBhY2NvcmRhbmNlIHdpdGggYW5kIGdvdmVybmVkIGJ5IHRoZSBhcHBsaWNhYmxlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIFRleGFzIGFuZCBhcHBsaWNhYmxlIFVuaXRlZCBTdGF0ZXMgZmVkZXJhbCBsYXcuICBFeGNsdXNpdmUgdmVudWUgZm9yIGFsbCBsaXRpZ2F0aW9uIHJlZ2FyZGluZyB0aGlzIEFncmVlbWVudCBzaGFsbCBiZSBpbiBEYWxsYXMgQ291bnR5LCBUZXhhcywgYW5kIHlvdSBhZ3JlZSB0byBzdWJtaXQgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgZmVkZXJhbCBhbmQgc3RhdGUgY291cnRzIGluIERhbGxhcyBDb3VudHksIFRleGFzLCBmb3IgYW55IHN1Y2ggbGl0aWdhdGlvbi4gIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5LCBkZWZlbmQgYW5kIGhvbGQgaGFybWxlc3MgSUQgYW5kIElEJ3Mgb2ZmaWNlcnMsIGVtcGxveWVlcywgZGlyZWN0b3JzLCBhZ2VudHMsIGxpY2Vuc2VlcyAoZXhjbHVkaW5nIHlvdSksIHN1Yi1saWNlbnNlZXMgKGV4Y2x1ZGluZyB5b3UpLCBzdWNjZXNzb3JzIGFuZCBhc3NpZ25zIGZyb20gYW5kIGFnYWluc3QgYWxsIGxvc3NlcywgbGF3c3VpdHMsIGRhbWFnZXMsIGNhdXNlcyBvZiBhY3Rpb24gYW5kIGNsYWltcyByZWxhdGluZyB0byBhbmQvb3IgYXJpc2luZyBmcm9tIHRoZSBOZXcgQ3JlYXRpb25zIG9yIHRoZSBkaXN0cmlidXRpb24gb3Igb3RoZXIgdXNlIG9mIHRoZSBOZXcgQ3JlYXRpb25zIG9yIHJlbGF0aW5nIHRvIGFuZC9vciBhcmlzaW5nIGZyb20geW91ciBicmVhY2ggb2YgdGhpcyBBZ3JlZW1lbnQuICBZb3UgYWdyZWUgdGhhdCB5b3VyIHVuYXV0aG9yaXplZCB1c2Ugb2YgdGhlIFNvZnR3YXJlIEltYWdlcywgb3IgdGhlIFNvZnR3YXJlLCBvciBhbnkgcGFydCB0aGVyZW9mLCBpbW1lZGlhdGVseSBhbmQgaXJyZXBhcmFibHkgd2lsbCBkYW1hZ2UgSUQgc3VjaCB0aGF0IElEIGNvdWxkIG5vdCBiZSBjb21wZW5zYXRlZCBhZGVxdWF0ZWx5IHNvbGVseSBieSBhIG1vbmV0YXJ5IGF3YXJkLCBhbmQgdXBvbiBzdWNoIGFjdHVhbCBvciB0aHJlYXRlbmVkIHVuYXV0aG9yaXplZCB1c2UsIGF0IElEJ3Mgb3B0aW9uLCB0aGF0IElEIHNoYWxsIGJlIGVudGl0bGVkIHRvIGFuIGluanVuY3RpdmUgb3JkZXIsIGluIGFkZGl0aW9uIHRvIGFsbCBvdGhlciBhdmFpbGFibGUgcmVtZWRpZXMsIGluY2x1ZGluZyBhIG1vbmV0YXJ5IGF3YXJkLCB0byBwcm9oaWJpdCBzdWNoIHVuYXV0aG9yaXplZCB1c2Ugd2l0aG91dCB0aGUgbmVjZXNzaXR5IG9mIElEIHBvc3RpbmcgYm9uZCBvciBvdGhlciBzZWN1cml0eS4gIElOIEFOWSBDQVNFLCBJRCwgQU5EIElEJ1MgT0ZGSUNFUlMsIEVNUExPWUVFUywgRElSRUNUT1JTLCBTSEFSRUhPTERFUlMsIFJFUFJFU0VOVEFUSVZFUywgQUdFTlRTLCBMSUNFTlNFRVMgKEVYQ0xVRElORyBZT1UpLCBTVUJMSUNFTlNFRVMgKEVYQ0xVRElORyBZT1UpLCBTVUNDRVNTT1JTIEFORCBBU1NJR05TIFNIQUxMIE5PVCBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSBCWSBBTlkgVEhJUkQgUEFSVFkgT1IgRk9SIEFOWSBMT1NTIE9GIERBVEEsIExPU1MgT0YgUFJPRklUUywgTE9TVCBTQVZJTkdTLCBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBJTkRJUkVDVCBPUiBQVU5JVElWRSBEQU1BR0VTIE9SIEFOWSBPVEhFUiBEQU1BR0VTIEFSSVNJTkcgRlJPTSBBTlkgQUxMRUdFRCBDTEFJTSBGT1IgQlJFQUNIIE9GIFdBUlJBTlRZLCBCUkVBQ0ggT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UsIFNUUklDVCBQUk9EVUNUIExJQUJJTElUWSwgT1IgT1RIRVIgTEVHQUwgVEhFT1JZIEVWRU4gSUYgSUQgT1IgSUQnUyBSRVBSRVNFTlRBVElWRVMgSEFWRSBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIEFOWSBTVUNIIERBTUFHRVMsIE9SIEVWRU4gSUYgU1VDSCBEQU1BR0VTIEFSRSBGT1JFU0VFQUJMRS4gIFNvbWUganVyaXNkaWN0aW9ucyBkbyBub3QgYWxsb3cgdGhlIGV4Y2x1c2lvbiBvciBsaW1pdGF0aW9uIG9mIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzbyB0aGUgYWJvdmUgbGltaXRhdGlvbiBvciBleGNsdXNpb24gbWF5IG5vdCBhcHBseSB0byB5b3UuICBUaGlzIHNlY3Rpb24gc2hhbGwgc3Vydml2ZSB0aGUgY2FuY2VsbGF0aW9uIG9yIHRlcm1pbmF0aW9uIG9mIHRoaXMgQWdyZWVtZW50LgorCis4LglVbml0ZWQgU3RhdGVzIEdvdmVybm1lbnQgUmVzdHJpY3RlZCBSaWdodHMuICBUbyB0aGUgZXh0ZW50IGFwcGxpY2FibGUsIHRoZSBVbml0ZWQgU3RhdGVzIEdvdmVybm1lbnQgc2hhbGwgb25seSBoYXZlIHRob3NlIHJpZ2h0cyB0byB1c2UgdGhlIFNvZnR3YXJlIGFzIGV4cHJlc3NseSBzdGF0ZWQgYW5kIGV4cHJlc3NseSBsaW1pdGVkIGFuZCByZXN0cmljdGVkIGluIHRoaXMgQWdyZWVtZW50LCBhcyBwcm92aWRlZCBpbiA0OCBDLkYuUi4gwqfCpyAyMjcuNzIwMSB0aHJvdWdoIDIyNy43MjA0LCBpbmNsdXNpdmUuCisKKzkuCUdlbmVyYWwgUHJvdmlzaW9ucy4gIE5laXRoZXIgdGhpcyBBZ3JlZW1lbnQgbm9yIGFueSBwYXJ0IG9yIHBvcnRpb24gaGVyZW9mIHNoYWxsIGJlIGFzc2lnbmVkIG9yIHN1YmxpY2Vuc2VkIGJ5IHlvdS4gIElEIG1heSBhc3NpZ24gaXRzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCBpbiBJRCdzIHNvbGUgZGlzY3JldGlvbi4gIFNob3VsZCBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGJlIGhlbGQgdG8gYmUgdm9pZCwgaW52YWxpZCwgdW5lbmZvcmNlYWJsZSBvciBpbGxlZ2FsIGJ5IGEgY291cnQgb2YgY29tcGV0ZW50IGp1cmlzZGljdGlvbiwgdGhlIHZhbGlkaXR5IGFuZCBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgb3RoZXIgcHJvdmlzaW9ucyBzaGFsbCBub3QgYmUgYWZmZWN0ZWQgdGhlcmVieS4gIElmIGFueSBwcm92aXNpb24gaXMgZGV0ZXJtaW5lZCB0byBiZSB1bmVuZm9yY2VhYmxlIGJ5IGEgY291cnQgb2YgY29tcGV0ZW50IGp1cmlzZGljdGlvbiwgeW91IGFncmVlIHRvIGEgbW9kaWZpY2F0aW9uIG9mIHN1Y2ggcHJvdmlzaW9uIHRvIHByb3ZpZGUgZm9yIGVuZm9yY2VtZW50IG9mIHRoZSBwcm92aXNpb24ncyBpbnRlbnQsIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcuICBGYWlsdXJlIG9mIElEIHRvIGVuZm9yY2UgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBzaGFsbCBub3QgY29uc3RpdHV0ZSBvciBiZSBjb25zdHJ1ZWQgYXMgYSB3YWl2ZXIgb2Ygc3VjaCBwcm92aXNpb24gb3Igb2YgdGhlIHJpZ2h0IHRvIGVuZm9yY2Ugc3VjaCBwcm92aXNpb24uICBJTU1FRElBVEVMWSBVUE9OIFlPVVIgRkFJTFVSRSBUTyBDT01QTFkgV0lUSCBPUiBCUkVBQ0ggT0YgQU5ZIFRFUk0gT1IgUFJPVklTSU9OIE9GIFRISVMgQUdSRUVNRU5ULCBZT1VSIExJQ0VOU0UgR1JBTlRFRCBIRVJFSU4gQU5EIFRISVMgQUdSRUVNRU5UIEFVVE9NQVRJQ0FMTFkgU0hBTEwgVEVSTUlOQVRFLCBXSVRIT1VUIE5PVElDRSwgQU5EIElEIE1BWSBQVVJTVUUgQUxMIFJFTElFRiBBTkQgUkVNRURJRVMgQUdBSU5TVCBZT1UgVEhBVCBBUkUgQVZBSUxBQkxFIFVOREVSIEFQUExJQ0FCTEUgTEFXIEFORC9PUiBUSElTIEFHUkVFTUVOVC4gIEltbWVkaWF0ZWx5IHVwb24gdGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQsIGFueSBhbmQgYWxsIHJpZ2h0cyB5b3UgYXJlIGdyYW50ZWQgaGVyZXVuZGVyIHNoYWxsIHRlcm1pbmF0ZSwgeW91IHNoYWxsIGhhdmUgbm8gcmlnaHQgdG8gdXNlIHRoZSBTb2Z0d2FyZSBvciB0aGUgTmV3IENyZWF0aW9ucywgaW4gYW55IG1hbm5lciwgYW5kIHlvdSBpbW1lZGlhdGVseSBzaGFsbCBkZXN0cm95IGFsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlIGFuZCB0aGUgTmV3IENyZWF0aW9ucyBpbiB5b3VyIHBvc3Nlc3Npb24sIGN1c3RvZHkgb3IgY29udHJvbCwgYW5kIGFsbCByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgc2hhbGwgcmV2ZXJ0LCB3aXRob3V0IG5vdGljZSwgdG8gYW5kIGJlIHZlc3RlZCBpbiBJRC4KKworWU9VIEFDS05PV0xFREdFIFRIQVQgWU9VIEhBVkUgUkVBRCBUSElTIEFHUkVFTUVOVCwgWU9VIFVOREVSU1RBTkQgVEhJUyBBR1JFRU1FTlQsIEFORCBVTkRFUlNUQU5EIFRIQVQgQlkgQ09OVElOVUlORyBUSEUgRE9XTkxPQUQgT1IgSU5TVEFMTEFUSU9OIE9GIFRIRSBTT0ZUV0FSRSwgQlkgTE9BRElORyBPUiBSVU5OSU5HIFRIRSBTT0ZUV0FSRSwgT1IgQlkgUExBQ0lORyBPUiBDT1BZSU5HIFRIRSBTT0ZUV0FSRSBPTlRPIFlPVVIgQ09NUFVURVIgSEFSRCBEUklWRSBPUiBSQU0sIFlPVSBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQuICBZT1UgRlVSVEhFUiBBR1JFRSBUSEFULCBFWENFUFQgRk9SIFdSSVRURU4gU0VQQVJBVEUgQUdSRUVNRU5UUywgSUYgQU5ZLCBCRVRXRUVOIElEIEFORCBZT1UsIFRISVMgQUdSRUVNRU5UIElTIEEgQ09NUExFVEUgQU5EIEVYQ0xVU0lWRSBTVEFURU1FTlQgT0YgVEhFIFJJR0hUUyBBTkQgTElBQklMSVRJRVMgT0YgVEhFIFBBUlRJRVMgSEVSRVRPLCBSRUxBVElORyBUTyBUSEUgU1VCSkVDVCBNQVRURVIgSEVSRU9GLiAgVEhJUyBBR1JFRU1FTlQgU1VQRVJTRURFUyBBTEwgUFJJT1IgT1JBTCBBR1JFRU1FTlRTLCBQUk9QT1NBTFMgT1IgVU5ERVJTVEFORElOR1MsIEFORCBBTlkgT1RIRVIgQ09NTVVOSUNBVElPTlMsIElGIEFOWSwgQkVUV0VFTiBJRCBBTkQgWU9VIFJFTEFUSU5HIFRPIFRIRSBTVUJKRUNUIE1BVFRFUiBPRiBUSElTIEFHUkVFTUVOVC4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL1JhY2VyIGIvbGljZW5zZXMvUmFjZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM4NWIxMQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL1JhY2VyCkBAIC0wLDAgKzEsNTUgQEAKK1JBQ0VSIFVTQUdFIC0gUkVBRCBCRUZPUkUgTU9ESUZZSU5HIFNPVVJDRSBDT0RFCisKK1RoZSBwcm9ncmFtcyBhbmQgc291cmNlIGNvZGUgb2YgdGhlIFJhY2VyIHByb2plY3QgYXJlIGNvcHlyaWdodCBvZiBSdXVkIHZhbgorR2FhbCwgRG9scGhpbml0eSwgMjAwMC0yMDAxLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4gUHVibGlzaGluZyBvZiBpbmNsdWRlZCBtYXRlcmlhbCB3aXRob3V0IHByaW9yIHdyaXR0ZW4KK3Blcm1pc3Npb24gb2YgdGhlIGF1dGhvciBpcyBwcm9oaWJpdGVkLgorCitQdWJsaXNoaW5nIG9mIG1hdGVyaWFsIGRvd25sb2FkYWJsZSBoZXJlIG1heSBob3dldmVyIGJlIGRvbmUgb24gYQorbm9uLWNvbW1lcmljaWFsIGJhc2lzLiBJbiB0aGlzIGNhc2UsIEkgd291bGQgYXBwcmVjaWF0ZSBpdCBpZiB5b3Ugc2VuZCBtZSBhCitub3RlIHJlZ2FyZGluZyB3aGVyZSB5b3UgbWFrZSBhdmFpbGFibGUgdGhlIG1hdGVyaWFsLgorCitVc2Ugb2YgYW55IG9mIHRoZSBwdWJsaXNoZWQgc291cmNlIGNvZGUgaW4gY29tbWVyY2lhbCBzb2Z0d2FyZSBpcyBleHBsaWNpbHR5CitOT1QgYWxsb3dlZCB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gRGlzdHJpYnV0aW9ucyBvbiBMaW51eAorZGlzdHJpYnV0aW9ucyAoYXMgaXMgZG9uZSBvbiBTdVNFOC4wIGZvciBleGFtcGxlKSBJUyBob3dldmVyIGFsbG93ZWQuIFVzZSBvZgorKHBhcnRzIG9mKSB0aGUgc291cmNlIGNvZGUgaW4gbm9uLWNvbW1lcmNpYWwgc29mdHdhcmUgaXMgYWxsb3dlZCBob3dldmVyLgorRm9yIGNvbW1lcmNpYWwgdXNhZ2UsIGxpY2Vuc2luZyBtYXkgYmUgYW4gb3B0aW9uLCBmb3Igd2hpY2ggeW91IGNhbiBjb250YWN0Cit0aGUgYXV0aG9yLgorCitUaGlzIGlzIE5PVCBhbiBPcGVuIFNvdXJjZSBwcm9qZWN0LCBhbHRob3VnaCBtYW55IHBlb3BsZSB0aGluayBzby4gWW91IENBTgorY29udHJpYnV0ZSB0byB0aGUgc291cmNlIGlmIHlvdSB3YW50IChvciBjYW5ub3QgcmVzaXN0KSwgYnV0IGFsbCBjaGFuZ2VzCit3aWxsIGdvIHRocm91Z2ggbWUgdG8gdGhlIG1hc3RlciBzb3VyY2UgY29kZS4gVGhpcyBpcyBkb25lIHRvIGVuc3VyZSBxdWFsaXR5CithbmQgY29uc2lzdGVudCBzdHlsZSBmb3IgaW5zdGFuY2UuIEFsc28sIHBhcnRzIG9mIFJhY2VyICh0aGUgUUxpYi9EMworbGlicmFyaWVzKSBhcmUgdXNlZCBpbiBvdGhlciBwcm9qZWN0cywgYW5kIGNoYW5naW5nIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzCit3b3VsZCBiZSBjb3VudGVycHJvZHVjdGl2ZSBmb3IgdGhlIG90aGVyIHByb2R1Y3RzIHRoYXQgdXNlIHRoZXNlIGxpYnJhcmllcy4KK1RoZXJlZm9yZSwgdGhlIGRlY2lzaW9uIGhhcyBiZWVuIG1hZGUgbm90IHRvIE9wZW5Tb3VyY2UgdGhlIHNvdXJjZSBjb2RlLgorUmVhbGlzZSB0aGF0IHRoZSBjb3B5cmlnaHRzIHdpbGwgc3RheSBhdCBEb2xwaGluaXR5LCBzbyBmb3IgbWFueSBwZW9wbGUgdGhpcword2lsbCBtZWFuIHRoYXQgdGhleSB3b24ndCBjb250cmlidXRlIHRvIHRoZSBzb3VyY2UuIFRoaXMgaXMgb2sgdG8gbWUsIHRoZQorcHJvZHVjdCBzZWVtcyBub3QgbGFyZ2UgZW5vdWdoIHRvIG5lZWQgdGhlIHdob2xlIHdvcmxkIHRvIGFpZCBpbiBkZXZlbG9waW5nCisoZXhjZXB0IGZvciB0aGUgY29udGVudHM7IGNhcnMgJiB0cmFja3MpLiBUbyBhZGQgdG8gdGhlIFJhY2VyIHByb2plY3QgYW5kCittYWludGFpbiBjb250cm9sLCBpdCBpcyBhZHZpc2VkIHRvIGNyZWF0ZSBzZXBhcmF0ZSBleGVjdXRhYmxlcywgd2hpY2ggbWF5Cit1c2UgcGFydHMgb2YgdGhlIHNvdXJjZSBjb2RlLCBidXQgYXJlIG5vdCBjb21wbGV0ZWx5IHNlcGFyYXRlbHkgdXNhYmxlCitwcm9kdWN0cy4gVGhpcyBtZWFucyB5b3UgY2FuIGNyZWF0ZSBhIFJlcGxheSBBbmFseXplciB3aGljaCB1c2VzIHRyYWNrIGNvZGUKK2Zyb20gdGhlIFJhY2VyIHNvdXJjZSBjb2RlLCBidXQgdGhhdCB5b3UgbWF5IE5PVCBjcmVhdGUgYSBjb21wbGV0ZSByYWNpbmcKK2dhbWUgYmFzZWQgb24gYSBzcGVjaWZpYyBlcmEgZm9yIGV4YW1wbGUsIGFuZCBkaXN0cmlidXRlIHRoaXMgY29tbWVyY2lhbGx5CithcyBhIHNlcGFyYXRlIHByb2R1Y3QuCisKK0lmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgb24gdGhlIHVzYWdlIG9mIHRoZSBtYXRlcmlhbHMgcHJlc2VudGVkIGluIHRoZQorUmFjZXIgc2l0ZSwgcGxlYXNlIGNvbnRhY3QgbWUuCisKK0FERElUSU9OQUwgQ09QWVJJR0hUUyAoUFJPRFVDVFMgTUVOVElPTkVEIElOIFBBUlRTIE9GIFRIRSBTSVRFKQorCitTcG9ydHMgQ2FyIEdUIENvcHlyaWdodCBFbGVjdHJvbmljIEFydHMgMTk5OQorRjEgMjAwMCBDb3B5cmlnaHQgRWxlY3Ryb25pYyBBcnRzIDIwMDAKK01pY3Jvc29mdCBXaW5kb3dzIGlzIGEgcmVnaXN0ZXJlZCB0cmFkZW1hcmsgb2YgTWljcm9zb2Z0CitHcmFuZCBQcml4IExlZ2VuZHMgaXMgYSByZWdpc3RlcmVkIHRyYWRlbWFyayBvZiBQYXB5cnVzCisKK0FsbCBvdGhlciB0cmFkZW1hcmtzIGFyZSBwcm9wZXJ0eSBvZiB0aGVpciByZXNwZWN0aXZlIGNvbXBhbmllcy4KKworTm8gU0NHVCB0cmFja3MgY2FuIGFuZCB3aWxsIGJlIGZvdW5kIG9uIHRoaXMgd2Vic2l0ZS4gWW91IGFyZSAocHJvYmFibHkpIG5vdAorYWxsb3dlZCB0byBwb3N0IGRpcmVjdGx5IGNvbnZlcnRlZCB0cmFja3Mgb250byB5b3VyIHdlYnNpdGUsIGJ1dCB5b3UgY2FuCit1cGxvYWQgUmFjZXItc3BlY2lmaWMgZmlsZXMgKGJ1dCBub3QgdGhlIGltYWdlcyBhbmQgZGlyZWN0bHkgY29udmVydGVkIERPRgorbW9kZWxzKS4KKworUnV1ZCB2YW4gR2FhbAorbGFzdCB1cGRhdGVkIEF1Z3VzdCAxMSwgMjAwMgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvUmVzb3VuZGluZyBiL2xpY2Vuc2VzL1Jlc291bmRpbmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA1ODE3ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL1Jlc291bmRpbmcKQEAgLTAsMCArMSwyNjMgQEAKK1BsZWFzZSByZWFkIHRoZSBmb2xsb3dpbmcgU29mdHdhcmUgTGljZW5zZSBBZ3JlZW1lbnQuCitJdCBpcyBuZWNlc3NhcnkgdGhhdCB5b3UgdW5kZXJzdGFuZCBpdCBhbmQgYWdyZWUgdG8gYmUgYm91bmQgYnkgaXRzIHRlcm1zCitpbiBvcmRlciB0byB1c2UgdGhlIGFjY29tcGFueWluZyBzb2Z0d2FyZSBwcm9kdWN0KHMpIGFuZCBhc3NvY2lhdGVkIGZpbGVzLgorCitSRVNPVU5ESU5HIFRFQ0hOT0xPR1ksIElOQy4KK1NPRlRXQVJFIExJQ0VOU0UgQUdSRUVNRU5UCisKK0lNUE9SVEFOVDogIERPIE5PVCBSVU4gT1IgRVhBTUlORSBUSEUgQUNDT01QQU5ZSU5HIFNPRlRXQVJFIFBST0RVQ1QgVU5USUwKK1lPVSBIQVZFIFJFQUQgVEhJUyBBR1JFRU1FTlQuICBCWSBSVU5OSU5HIFRIRSBTT0ZUV0FSRSBQUk9EVUNULCBZT1UgQUZGSVJNCitUSEFUIFlPVSBBQ0NFUFQgQUxMIE9GIFRIRSBURVJNUyBPRiBUSElTIEFHUkVFTUVOVC4gIElGIFlPVSBETyBOT1QgQUNDRVBUCitBTEwgT0YgVEhFIFRFUk1TIE9GIFRISVMgQUdSRUVNRU5UICgxKSBETyBOT1QgUlVOIFRIRSBTT0ZUV0FSRQorKDIpIERJU0NPTlRJTlVFIFRIRSBJTlNUQUxMQVRJT04gQU5EIExJQ0VOU0lORyBQUk9DRVNTIEJZCitERUxFVElORyBBTEwgRklMRVMgVEhBVCBDQU1FIFdJVEggVEhJUyBESVNUUklCVVRJT04uCisKK1RoaXMgc29mdHdhcmUgKCJTb2Z0d2FyZSIpIGlzIGxpY2Vuc2VkLCBub3Qgc29sZCwgdG8geW91IGZvciB1c2UKK29ubHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgKCJBZ3JlZW1lbnQiKS4KK1Jlc291bmRpbmcgVGVjaG5vbG9neSwgSW5jLiAoIkxpY2Vuc29yIikgY29udGludWVzIHRvIG93biB0aGUKK1NvZnR3YXJlIGFuZCByZXNlcnZlcyBhbnkgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCB0byB5b3UuCisKKzEuICBMSUNFTlNFIEdSQU5ULiAgTGljZW5zb3IgZ3JhbnRzIHRvIHlvdSwgc3ViamVjdCB0byB0aGUgdGVybXMKK2FuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50LCBhIG5vbmV4Y2x1c2l2ZSwgbm9udHJhbnNmZXJhYmxlCityaWdodCB0byB1c2UgdGhlIFNvZnR3YXJlLiAgVGhpcyBBZ3JlZW1lbnQgZ3JhbnRzIHRvIHlvdSB0aGUKK3JpZ2h0IHRvIGluc3RhbGwgYW5kIHVzZSB0aGUgU29mdHdhcmUgb24gYSBoYXJkIGRpc2sgb3Igb3RoZXIKK3N0b3JhZ2UgZGV2aWNlIG9uIGFueSBjb21wdXRlci4gIFlvdSBtYXkgY29weSB0aGUgU29mdHdhcmUgaW4KK29iamVjdCBjb2RlIGZvcm0gb25seSBmb3IgYXJjaGl2YWwgYW5kIGJhY2stdXAgcHVycG9zZXMsCitwcm92aWRlZCBzdWNoIGJhY2stdXAgY29weSBpcyBub3QgaW5zdGFsbGVkIG9yIHVzZWQgb24gYW55Citjb21wdXRlci4gIE93bmVyc2hpcCBvZiwgYW5kIHRpdGxlIHRvLCB0aGUgU29mdHdhcmUgYW5kIGFueQorbWFudWFscywgZ3VpZGVzIG9yIGFueSBvdGhlciBwcmludGVkIG1hdGVyaWFsIHRoYXQgTGljZW5zb3IKK3Byb3ZpZGVkIHRvIHlvdSBmb3IgdXNlIHdpdGggdGhlIFNvZnR3YXJlICgiRG9jdW1lbnRhdGlvbiIpCitpcyBhbmQgd2lsbCBiZSBoZWxkIGJ5IExpY2Vuc29yIGFuZCBpdHMgbGljZW5zb3JzLgorCisyLiAgUFJPVEVDVElPTiBPRiBTT0ZUV0FSRS4gIFlvdSBhZ3JlZSB0byBwcm90ZWN0IHRoZSBTb2Z0d2FyZQorYW5kIHRoZSBEb2N1bWVudGF0aW9uIGZyb20gdW5hdXRob3JpemVkIGNvcHlpbmcgb3IgdXNlLiAgWW91CithY2tub3dsZWRnZSB0aGF0IHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIFNvZnR3YXJlIGFuZCBvdGhlcgordHJhZGUgc2VjcmV0cyBlbWJvZGllZCBpbiB0aGUgU29mdHdhcmUgaGF2ZSBub3QgYmVlbiwgYW5kIGFyZQorbm90IGdvaW5nIHRvIGJlLCBkaXNjbG9zZWQgdG8geW91LiAgTW9kaWZpY2F0aW9ucyBvZiwgYWRkaXRpb25zCit0bywgb3IgZGVsZXRpb25zIGZyb20gdGhlIFNvZnR3YXJlIChpbmNsdWRpbmcgYW55IGRlbGV0aW9uIG9yCithZGRpdGlvbiBvZiBjb2RlKSBhcmUgc3RyaWN0bHkgcHJvaGliaXRlZC4gRXhjZXB0IGFzCitzcGVjaWZpY2FsbHkgcGVybWl0dGVkIGluIHRoaXMgQWdyZWVtZW50LCB5b3UgYWdyZWUgbm90IHRvLAorZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgKGkpIHVzZSBhbnkgQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uCit0byBjcmVhdGUgYW55IHNvZnR3YXJlIG9yIGRvY3VtZW50YXRpb24gdGhhdCBpcyBzaW1pbGFyIHRvCithbnkgb2YgdGhlIFNvZnR3YXJlIG9yIERvY3VtZW50YXRpb247IChpaSkgcmV2ZXJzZSBlbmdpbmVlciwKK2Rpc2Fzc2VtYmxlIG9yIGRlY29tcGlsZSB0aGUgU29mdHdhcmU7IChpaWkpIGVuY3VtYmVyLAordHJhbnNmZXIsIHN1YmxpY2Vuc2UsIHJlbnQsIGxlYXNlLCB0aW1lLXNoYXJlIG9yIHVzZSB0aGUKK1NvZnR3YXJlIGluIGFueSBzZXJ2aWNlIGJ1cmVhdSBhcnJhbmdlbWVudDsgb3IgKGl2KSBjb3B5CisoZXhjZXB0IGFzIHByb3ZpZGVkIGhlcmVpbiksIGRpc3RyaWJ1dGUsIG1hbnVmYWN0dXJlLAorYWRhcHQsIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCB0cmFuc2xhdGUsIGxvY2FsaXplLAorcG9ydCBvciBvdGhlcndpc2UgbW9kaWZ5IFNvZnR3YXJlIG9yIHBlcm1pdCBhbnkgdGhpcmQgcGFydHkKK3RvIGVuZ2FnZSBpbiBhbnkgb2YgdGhlIGFjdHMgcHJvc2NyaWJlZCBpbiBjbGF1c2VzIChpKSB0aHJvdWdoIChpdikuCitZb3UgYWdyZWUgbm90IHRvIHJlbW92ZSBvciBhbHRlciBhbnkgcHJpbnRlZCBvciBvbi1zY3JlZW4KK2NvcHlyaWdodCwgdHJhZGUgc2VjcmV0IG9yIG90aGVyIGxlZ2FsIG5vdGljZXMgY29udGFpbmVkIG9uIG9yCitpbiB0aGUgU29mdHdhcmUgb3IgdGhlIERvY3VtZW50YXRpb24uCisKKzMuICBDT05GSURFTlRJQUxJVFkuCisKKzMuMSAgQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uLiAgIkNvbmZpZGVudGlhbCBJbmZvcm1hdGlvbiIgbWVhbnMKK2FsbCBjb25maWRlbnRpYWwsIHByb3ByaWV0YXJ5IG9yIHRyYWRlIHNlY3JldCBpbmZvcm1hdGlvbiBvZgorTGljZW5zb3IsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYWxsIFNvZnR3YXJlLCBhbGwKK0RvY3VtZW50YXRpb24gYW5kIGFsbCBvdGhlciBpbmZvcm1hdGlvbiBvciBtYXRlcmlhbCB3aGljaCBpcworcHJvdmlkZWQgb3IgZGlzY2xvc2VkIGJ5IExpY2Vuc29yIHRvIHlvdSBmb3IgdGhlIHB1cnBvc2VzCitzcGVjaWZpZWQgaW4gdGhpcyBBZ3JlZW1lbnQsIHdoZXRoZXIgc3VjaCBpbmZvcm1hdGlvbiBpcworZGlzY2xvc2VkIGJ5IExpY2Vuc29yIChhKSBpbiB3cml0aW5nIG9yIG90aGVyIHRhbmdpYmxlIG1lZGl1bSwKKyhiKSB2aXN1YWxseSwgb3IgKGMpIG9yYWxseS4gICJDb25maWRlbnRpYWwgSW5mb3JtYXRpb24iIGRvZXMKK25vdCBpbmNsdWRlIGFueSBwb3J0aW9uIG9mIGFueSBzdWNoIGluZm9ybWF0aW9uIHRvIHRoZSBleHRlbnQgdGhhdAoreW91IGNhbiBjbGVhcmx5IGRlbW9uc3RyYXRlIHRoYXQgaXQ6IChpKSBpcyBvciBiZWNvbWVzIGtub3duIGluIHRoZQordHJhZGUgdGhyb3VnaCBubyBhY3Qgb3Igb21pc3Npb24gYnkgeW91OyAoaWkpICBpcyBkaXNjbG9zZWQgdG8geW91CitieSBhIHRoaXJkIHBhcnR5IHdobyBoYXMgYSByaWdodCB0byBtYWtlIHN1Y2ggZGlzY2xvc3VyZSB3aXRob3V0Cithbnkgb2JsaWdhdGlvbiBvZiBjb25maWRlbnRpYWxpdHkgdG8gTGljZW5zb3I7IG9yIChpaWkpIGlzCitpbmRlcGVuZGVudGx5IGRldmVsb3BlZCBieSB5b3Ugd2l0aG91dCByZWZlcmVuY2UgdG8gc3VjaCBpbmZvcm1hdGlvbi4KKworMy4yICBDb25maWRlbnRpYWxpdHkgT2JsaWdhdGlvbnMuICBZb3UgYWdyZWUgdG8gKGEpIHVzZSB0aGUgaGlnaGVzdAorY29tbWVyY2lhbGx5IHJlYXNvbmFibGUgZGVncmVlIG9mIGNhcmUgdG8gcHJvdGVjdCBhbmQgbWFpbnRhaW4gdGhlCitDb25maWRlbnRpYWwgSW5mb3JtYXRpb24gYXMgY29uZmlkZW50aWFsIGFuZCB0byBob2xkIHRoZQorQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uIGluIHRydXN0IGZvciB0aGUgZXhjbHVzaXZlIGJlbmVmaXQgb2YKK0xpY2Vuc29yOyAoYikgdXNlIHRoZSBDb25maWRlbnRpYWwgSW5mb3JtYXRpb24gc29sZWx5IGFzIGV4cHJlc3NseQorcGVybWl0dGVkIGJ5IHRoaXMgQWdyZWVtZW50OyAoYykgbm90IGRpc2Nsb3NlIHRoZSBDb25maWRlbnRpYWwKK0luZm9ybWF0aW9uIHRvIGFueSBwZXJzb24gb3IgZW50aXR5IG5vdCBhIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50OworYW5kIChkKSByZXR1cm4gdG8gTGljZW5zb3IgYXQgYW55dGltZSB1cG9uIExpY2Vuc29yJ3MgcmVxdWVzdCwKK2FueSBhbmQgYWxsIENvbmZpZGVudGlhbCBJbmZvcm1hdGlvbi4KKworNC4gIE9XTkVSU0hJUC4gIExpY2Vuc29yIHJldGFpbnMgYWxsIG9mIGl0cyByZXNwZWN0aXZlIHJpZ2h0cywgdGl0bGUKK2FuZCBpbnRlcmVzdCBpbiB0aGUgU29mdHdhcmUgYW5kIHRoZSBEb2N1bWVudGF0aW9uLCBpbmNsdWRpbmcKK3dpdGhvdXQgbGltaXRhdGlvbiBhbnkgYW5kIGFsbCBwYXRlbnRzLCBwYXRlbnQgYXBwbGljYXRpb25zLAorY29weXJpZ2h0cywgdHJhZGUgc2VjcmV0cywgdHJhZGVtYXJrcyBhbmQgb3RoZXIgaW50ZWxsZWN0dWFsCitwcm9wZXJ0eSByaWdodHMsIGFuZCB5b3UgYWdyZWUgbm90IHRvIHRha2UgYW55IGFjdGlvbiBpbmNvbnNpc3RlbnQKK3dpdGggc3VjaCB0aXRsZSBhbmQgb3duZXJzaGlwLiBZT1UgQUNLTk9XTEVER0UgQU5EIEFHUkVFIFRIQVQgVEhFCitTT0ZUV0FSRSBNQVkgQ09OVEFJTiBDT0RFIE9SIFJFUVVJUkUgREVWSUNFUyBUSEFUIERFVEVDVCBPUiBQUkVWRU5UCitVTkFVVEhPUklaRUQgVVNFIE9GIFRIRSBTT0ZUV0FSRS4KKworCisKKzUuICAgRElTQ0xBSU1FUiBPRiBXQVJSQU5USUVTIEFORCBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS4KKworNS4xICBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5LiAgWU9VIEFDS05PV0xFREdFIFRIQVQgVEhFIFNPRlRXQVJFIFdJTEwKK0NFQVNFIFRPIFRSQU5TTUlUIEFGVEVSIEVBQ0ggRklGVEVFTiAoMTUpIE1JTlVURSBQRVJJT0QgT0YgVVNFIFVOVElMCitJVCBIQVMgQkVFTiBNQURFIEZVTExZIEZVTkNUSU9OQUwgQlkgU1VCTUlUVElORyBSRUdJU1RSQVRJT04KK0lORk9STUFUSU9OIFRPIExJQ0VOU09SIElOIFJFVFVSTiBGT1IgQSBTT0ZUV0FSRSBMSUNFTlNFIEtFWQorKFNFQ1RJT04gNi4xKS4gIFlPVSBGVVJUSEVSIEFDS05PV0xFREdFIFRIQVQgVEhFIFNPRlRXQVJFIEFORCBUSEUKK0RPQ1VNRU5UQVRJT04gQVJFIEJFSU5HIFNVUFBMSUVEIFRPIFlPVSBPTiBBTiAiQVMgSVMiIEJBU0lTLgorTElDRU5TT1IgSEVSRUJZIEVYUFJFU1NMWSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRQorU09GVFdBUkUgQU5EIFRIRSBET0NVTUVOVEFUSU9OLCBXSEVUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgT1JBTCBPUgorV1JJVFRFTiwgSU5DTFVESU5HIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBTlkKK1BBUlRJQ1VMQVIgUFVSUE9TRSwgVElUTEUgT1IgTk9OLUlORlJJTkdFTUVOVCwgIEFTIFdFTEwgQVMgQUxMCitXQVJSQU5USUVTIEFSSVNJTkcgQlkgVVNBR0UgT0YgVFJBREUgQU5EIENPVVJTRSBPRiBERUFMSU5HLgorTElDRU5TT1IgRE9FUyBOT1QgV0FSUkFOVCBUSEFUIChBKSBUSEUgU09GVFdBUkUgV0lMTCBNRUVUIFlPVVIKK1JFUVVJUkVNRU5UUywgKEIpIE9QRVJBVElPTiBPRiBUSEUgU09GVFdBUkUgV0lMTCBCRSBVTklOVEVSUlVQVEVECitPUiBFUlJPUiBGUkVFLCBPUiAoQykgREVGRUNUUyBXSUxMIEJFIENPUlJFQ1RFRC4gIFNPTUUgSlVSSVNESUNUSU9OUworRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCBTTyBUSEUgQUJPVkUKK0xJTUlUQVRJT05TIE1BWSBOT1QgQVBQTFkgVE8gWU9VLiAgVG8gdGhlIGV4dGVudCBwZXJtaXNzaWJsZSwgYW55CitpbXBsaWVkIHdhcnJhbnRpZXMgYXJlIGxpbWl0ZWQgdG8gdGhpcnR5ICgzMCkgZGF5cy4KKworNS4yICBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gIExJQ0VOU09SJ1MgTElBQklMSVRZIEZPUiBEQU1BR0VTIFRPCitMSUNFTlNFRSBGT1IgQU5ZIENBVVNFIFdIQVRTT0VWRVIsIFJFR0FSRExFU1MgT0YgVEhFIEZPUk0gT0YgQU5ZCitDTEFJTSBPUiBBQ1RJT04sIFNIQUxMIE5PVCBFWENFRUQgRklWRSAoNSkgRE9MTEFSUy4gIExJQ0VOU09SIFNIQUxMCitJTiBOTyBFVkVOVCBCRSBMSUFCTEUgRk9SIEFOWSBMT1NTIE9GIFBST0ZJVFMsIExPU1MgT0YgREFUQSwKK0lOVEVSUlVQVElPTiBPRiBCVVNJTkVTUywgT1IgRk9SIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwsCitJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMIE9SIFBVTklUSVZFIERBTUFHRVMgT0YgQU5ZIEtJTkQsIFdIRVRIRVIKK1VOREVSIFRISVMgQUdSRUVNRU5UIE9SIE9USEVSV0lTRSBBUklTSU5HIElOIEFOWSBXQVkgSU4gQ09OTkVDVElPTgorV0lUSCBUSEUgU09GVFdBUkUsIFRIRSBET0NVTUVOVEFUSU9OIE9SIFRISVMgQUdSRUVNRU5ULCBFVkVOIElGCitMSUNFTlNPUiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gIFNPTUUKK0pVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBJTkNJREVOVEFMCitPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRIRSBBQk9WRSBFWENMVVNJT04gT1IgTElNSVRBVElPTiBNQVkKK05PVCBBUFBMWSBUTyBZT1UuCisKKzYuICBVU0VSIElORk9STUFUSU9OLgorCis2LjEgICBSZWdpc3RyYXRpb24uICBVcG9uIHJlZ2lzdGVyaW5nIHRoZSBTb2Z0d2FyZSB3aXRoIExpY2Vuc29yLCB5b3UKK3dpbGwgYmUgaXNzdWVkIGFuIGFscGhhbnVtZXJpYyB1c2VyIGlkZW50aWZpY2F0aW9uIGFuZCBhIGxpY2Vuc2UKK2tleSB0aGF0IHdpbGwgYWxsb3cgZnVsbCBvcGVyYXRpb24gb2YgdGhlIFNvZnR3YXJlICgiUmVnaXN0cmF0aW9uIikuCitZb3UgYXJlIHJlc3BvbnNpYmxlIGZvciBtYWludGFpbmluZyB0aGUgY29uZmlkZW50aWFsaXR5IG9mIHlvdXIKK3VzZXIgaWRlbnRpZmljYXRpb24gbnVtYmVyIGFuZCBsaWNlbnNlIGtleSBhbmQgYXJlIGxpYWJsZSBmb3IgYW55CitoYXJtIG9yIGxvc3MgcmVzdWx0aW5nIGZyb20gZGlzY2xvc2luZyBvciBhbGxvd2luZyBkaXNjbG9zdXJlIG9mCithbnkgbGljZW5zZSBrZXkgb3IgZnJvbSB1c2UgYnkgYW55IHBlcnNvbiBvZiB5b3VyIGxpY2Vuc2Uga2V5IHRvCitnYWluIGFjY2VzcyB0byB0aGUgU29mdHdhcmUuCisKKzYuMiAgIEZvcm1lciBVc2Vycy4gIFVzZXJzIHdob3NlIGFjY291bnRzIGhhdmUgYmVlbiB0ZXJtaW5hdGVkIGJ5CitMaWNlbnNvciBtYXkgbm90IGFjY2VzcyB0aGUgU29mdHdhcmUgaW4gYW55IG1hbm5lciBvciBmb3IgYW55IHJlYXNvbgord2l0aG91dCB0aGUgZXhwcmVzcyB3cml0dGVuIHBlcm1pc3Npb24gb2YgTGljZW5zb3IuICBBY3RpdmUgVXNlcnMKK21heSBub3Qga25vd2luZ2x5IGFsbG93IGZvcm1lciBVc2VycyB3aG8gaGF2ZSBiZWVuIHRlcm1pbmF0ZWQgdG8KK3VzZSB0aGUgYWN0aXZlIFVzZXIncyBhY2NvdW50cy4KKworNy4gIFN1cHBvcnQgJiBVUEdSQURFUy4gIEFzIGxvbmcgYXMgTGljZW5zb3IgZ2VuZXJhbGx5IG9mZmVycyB0bwordGhpcmQgcGFydGllcyBsaWNlbnNlcyB0byB1c2UgdGhlIFNvZnR3YXJlLCBMaWNlbnNvciB3aWxsIChpKQorbWFpbnRhaW4gYW4gZS1tYWlsIGFkZHJlc3MgZm9yIHJlc3BvbmRpbmcgdG8gbWFpbnRlbmFuY2UgaXNzdWVzIGFuZAordXNlcnMgcXVlc3Rpb25zIGFuZCAoaWkpIHByb3ZpZGUgZ2VuZXJhbGx5IG9mZmVyZWQgdXBkYXRlcyBvcgorZW5oYW5jZW1lbnRzIG9mIHRoZSBTb2Z0d2FyZSBhbmQgdGhlIERvY3VtZW50YXRpb24gdGhhdCBMaWNlbnNvcgorcGVyaW9kaWNhbGx5IG1ha2VzIGF2YWlsYWJsZSB0byBVc2Vycy4gIEFueSB1cGRhdGVzIG9yIGVuaGFuY2VtZW50cwordG8gdGhlIFNvZnR3YXJlIGRlbGl2ZXJlZCBieSB3YXkgb2Ygc3VwcG9ydCBzZXJ2aWNlcyBzaGFsbCBiZQordHJlYXRlZCBmb3IgYWxsIHB1cnBvc2VzIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFzIFNvZnR3YXJlIGFuZCBhbGwKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgdGhlcmVpbiBzaGFsbCBiZSByZXRhaW5lZCBieSBMaWNlbnNvci4KKworOC4gICBURVJNIEFORCBURVJNSU5BVElPTi4gIFRoaXMgQWdyZWVtZW50IHNoYWxsIHJlbWFpbiBpbiBmb3JjZQordW50aWwgdGVybWluYXRlZCBhcyBwcm92aWRlZCBoZXJlaW4uICBZb3UgbWF5IHRlcm1pbmF0ZSB0aGlzCitBZ3JlZW1lbnQgYXQgYW55IHRpbWUgYW5kIGZvciBhbnkgcmVhc29uIHVwb24gZGVsZXRpb24gb2YgdGhlCitTb2Z0d2FyZSBmcm9tIGFueSBjb21wdXRlciBvciBzdG9yYWdlIGRldmljZS4gIFRoaXMgQWdyZWVtZW50IHdpbGwKK2Fsc28gdGVybWluYXRlIGlmIHlvdSBicmVhY2ggYW55IG9mIHRoZSB0ZXJtcyBvciBjb25kaXRpb25zIG9mCit0aGlzIEFncmVlbWVudC4gIFlvdSBhZ3JlZSB0aGF0IGluIHRoZSBldmVudCBvZiB0aGUgdGVybWluYXRpb24gb2YKK3RoaXMgQWdyZWVtZW50IGZvciBhbnkgcmVhc29uLCB5b3VyIGxpY2Vuc2UgcmlnaHRzIHRvIHRoZSBTb2Z0d2FyZQorYW5kIHRoZSBEb2N1bWVudGF0aW9uIGFyZSBpbW1lZGlhdGVseSB0ZXJtaW5hdGVkLiAgTGljZW5zb3IgcmVzZXJ2ZXMKK3RoZSByaWdodCB3aXRob3V0IG5vdGljZSB0byBkaXNhYmxlIChpbmNsdWRpbmcgcmVtb3RlbHkpIHRoZQorU29mdHdhcmUgaW4gdGhlIGV2ZW50IG9mIGEgYnJlYWNoIG9mIHRoaXMgQWdyZWVtZW50IGJ5IHlvdS4gIFRoZQorcmlnaHRzIGFuZCBvYmxpZ2F0aW9uIG9mIHRoZSBwYXJ0aWVzIHVuZGVyIFNlY3Rpb25zIDMgKENvbmZpZGVudGlhbAorSW5mb3JtYXRpb24pLCA0IChPd25lcnNoaXApLCA1LjEgKFdhcnJhbnR5KSwgNS4yIChMaW1pdGF0aW9uIG9mCitMaWFiaWxpdHkpLCAxMCAoQ29tcGxpYW5jZSB3aXRoIExhd3MpLCAxMSAoR2VuZXJhbCBQcm92aXNpb25zIGFuZAordGhpcyBTZWN0aW9uIDggd2lsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIEFncmVlbWVudC4KKworOS4gIFUuUy4gR09WRVJOTUVOVCBSRVNUUklDVEVEIFJJR0hUUy4gIElmIHRoZSBTb2Z0d2FyZSBvcgorRG9jdW1lbnRhdGlvbiBpcyBhY3F1aXJlZCBieSBvciBvbiBiZWhhbGYgb2YgYSB1bml0IG9yIGFnZW5jeSBvZiB0aGUKK1VuaXRlZCBTdGF0ZXMgR292ZXJubWVudCAodGhlICJHb3Zlcm5tZW50IiksIHRoZSBHb3Zlcm5tZW50IGFncmVlcwordGhhdCBzdWNoIFNvZnR3YXJlIGFuZCBEb2N1bWVudGF0aW9uIGlzICJjb21tZXJjaWFsIGNvbXB1dGVyCitzb2Z0d2FyZSIgYW5kICJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIGRvY3VtZW50YXRpb24iLAorcmVzcGVjdGl2ZWx5LCBhbmQgdGhhdCBhYnNlbnQgYSB3cml0dGVuIGFncmVlbWVudCB0byB0aGUgY29udHJhcnksCit0aGUgR292ZXJubWVudCdzIHJpZ2h0cyB3aXRoIHJlc3BlY3QgdG8gc3VjaCBTb2Z0d2FyZSBhbmQKK0RvY3VtZW50YXRpb24gYXJlLCBpbiB0aGUgY2FzZSBvZiBjaXZpbGlhbiBhZ2VuY3kgdXNlLCBSRVNUUklDVEVECitSSUdIVFMsIGFzIGRlZmluZWQgaW4gRkFSIMKnNTIuMjI3LjE5LCBhbmQgaWYgZm9yIHRoZSBEZXBhcnRtZW50IG9mCitEZWZlbnNlIHVzZSwgbGltaXRlZCBieSB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIHB1cnN1YW50IHRvCitERkFSIMKnMjI3LjcyMDIuICBUaGUgdXNlIG9mIHRoZSBTb2Z0d2FyZSBvciBEb2N1bWVudGF0aW9uIGJ5IHRoZQorR292ZXJubWVudCBjb25zdGl0dXRlcyBhY2tub3dsZWRnbWVudCBvZiBMaWNlbnNvcidzIHByb3ByaWV0YXJ5CityaWdodHMgaW4gdGhlIFNvZnR3YXJlIGFuZCBEb2N1bWVudGF0aW9uLiAgQ29udHJhY3Rvci9tYW51ZmFjdHVyZXIKK2lzIExpY2Vuc29yLiAgTGljZW5zb3IncyBhZGRyZXNzIGlzIHNldCBmb3J0aCBhdCB0aGUgZW5kIG9mIHRoaXMKK0FncmVlbWVudC4KKworMTAuICBDT01QTElBTkNFIFdJVEggTEFXUy4gIFlvdSBhZ3JlZSB0aGF0IHlvdSBzaGFsbCBub3QgZXhwb3J0IG9yCityZS1leHBvcnQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgKGluY2x1ZGluZyB2aWEgcmVtb3RlIGFjY2VzcyksCitTb2Z0d2FyZSwgRG9jdW1lbnRhdGlvbiBvciBvdGhlciBpbmZvcm1hdGlvbiBvciBtYXRlcmlhbHMgcHJvdmlkZWQKK2J5IExpY2Vuc29yIGhlcmV1bmRlciwgdG8gYW55IGNvdW50cnkgZm9yIHdoaWNoIHRoZSBVbml0ZWQgU3RhdGVzCitvciBhbnkgb3RoZXIgcmVsZXZhbnQganVyaXNkaWN0aW9uIHJlcXVpcmVzIGFueSBleHBvcnQgbGljZW5zZSBvcgorb3RoZXIgZ292ZXJubWVudGFsIGFwcHJvdmFsIGF0IHRoZSB0aW1lIG9mIGV4cG9ydCB3aXRob3V0IGZpcnN0CitvYnRhaW5pbmcgc3VjaCBsaWNlbnNlIG9yIGFwcHJvdmFsLiAgSXQgc2hhbGwgYmUgeW91ciByZXNwb25zaWJpbGl0eQordG8gY29tcGx5IHdpdGggdGhlIGxhdGVzdCBVbml0ZWQgU3RhdGVzIGV4cG9ydCByZWd1bGF0aW9ucywgYW5kIHlvdQorc2hhbGwgZGVmZW5kIGFuZCBpbmRlbW5pZnkgTGljZW5zb3IgZnJvbSBhbmQgYWdhaW5zdCBhbnkgZGFtYWdlcywKK2ZpbmVzLCBwZW5hbHRpZXMsIGFzc2Vzc21lbnRzLCBsaWFiaWxpdGllcywgY29zdHMgYW5kIGV4cGVuc2VzCisoaW5jbHVkaW5nIHJlYXNvbmFibGUgYXR0b3JuZXlzJyBmZWVzIGFuZCBjb3VydCBjb3N0cykgYXJpc2luZyBvdXQKK29mIGFueSBjbGFpbSB0aGF0IHRoZSBTb2Z0d2FyZSwgRG9jdW1lbnRhdGlvbiwgb3Igb3RoZXIgaW5mb3JtYXRpb24KK29yIG1hdGVyaWFscyBwcm92aWRlZCBieSBMaWNlbnNvciBoZXJldW5kZXIgd2VyZSBleHBvcnRlZCBvcgorb3RoZXJ3aXNlIGFjY2Vzc2VkLCBzaGlwcGVkIG9yIHRyYW5zcG9ydGVkIGluIHZpb2xhdGlvbiBvZgorYXBwbGljYWJsZSBsYXdzIGFuZCByZWd1bGF0aW9ucy4gIFlvdSBzaGFsbCBjb21wbHkgd2l0aCBhbGwgbGF3cywKK2xlZ2lzbGF0aW9uLCBydWxlcywgcmVndWxhdGlvbnMsIGFuZCBnb3Zlcm5tZW50YWwgcmVxdWlyZW1lbnRzIHdpdGgKK3Jlc3BlY3QgdG8gdGhlIFNvZnR3YXJlLCBhbmQgdGhlIHBlcmZvcm1hbmNlIGJ5IExpY2Vuc2VlIG9mIGl0cworb2JsaWdhdGlvbnMgaGVyZXVuZGVyLCBvZiBhbnkganVyaXNkaWN0aW9uIGluIG9yIGZyb20gd2hpY2ggTGljZW5zZWUKK2RpcmVjdGx5IG9yIGluZGlyZWN0bHkgY2F1c2VzIHRoZSBTb2Z0d2FyZSB0byBiZSB1c2VkIG9yIGFjY2Vzc2VkLgorCisxMS4gICBHRU5FUkFMLgorCisxMS4xICBTZXZlcmFiaWxpdHkuICBJbiB0aGUgZXZlbnQgdGhhdCBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50CitzaGFsbCwgaW4gd2hvbGUgb3IgaW4gcGFydCwgYmUgZGV0ZXJtaW5lZCB0byBiZSBpbnZhbGlkLCB1bmVuZm9yY2VhYmxlCitvciB2b2lkIGZvciBhbnkgcmVhc29uLCBzdWNoIGRldGVybWluYXRpb24gc2hhbGwgYWZmZWN0IG9ubHkgdGhlCitwb3J0aW9uIG9mIHN1Y2ggcHJvdmlzaW9uIGRldGVybWluZWQgdG8gYmUgaW52YWxpZCwgdW5lbmZvcmNlYWJsZSBvcgordm9pZCwgYW5kIHNoYWxsIG5vdCBhZmZlY3QgaW4gYW55IHdheSB0aGUgcmVtYWluZGVyIG9mIHN1Y2ggcHJvdmlzaW9uCitvciBhbnkgb3RoZXIgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50LgorMTEuMiBXYWl2ZXIuICBUaGUgd2FpdmVyIGJ5IGVpdGhlciBwYXJ0eSBvZiBhIGJyZWFjaCBvciBhIGRlZmF1bHQgb2YKK2FueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgYnkgdGhlIG90aGVyIHBhcnR5IHNoYWxsIG5vdCBiZQorY29uc3RydWVkIGFzIGEgd2FpdmVyIG9mIGFueSBzdWNjZWVkaW5nIGJyZWFjaCBvZiB0aGUgc2FtZSBvciBhbnkKK290aGVyIHByb3Zpc2lvbiwgbm9yIHNoYWxsIGFueSBkZWxheSBvciBvbWlzc2lvbiBvbiB0aGUgcGFydCBvZgorZWl0aGVyIHBhcnR5IHRvIGV4ZXJjaXNlIG9yIGF2YWlsIGl0c2VsZiBvZiBhbnkgcmlnaHQsIHBvd2VyIG9yCitwcml2aWxlZ2UgdGhhdCBpdCBoYXMsIG9yIG1heSBoYXZlIGhlcmV1bmRlciwgb3BlcmF0ZSBhcyBhIHdhaXZlciBvZgorYW55IHJpZ2h0LCBwb3dlciBvciBwcml2aWxlZ2UgYnkgc3VjaCBwYXJ0eS4KKzExLjMgIEdvdmVybmluZyBMYXc7IEp1cmlzZGljdGlvbiAmIFZlbnVlICBUaGlzIEFncmVlbWVudCBzaGFsbCBiZQorZ292ZXJuZWQgYnkgYW5kIGNvbnN0cnVlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGxhd3Mgb2YgdGhlCitDb21tb253ZWFsdGggb2YgTWFzc2FjaHVzZXR0cywgd2l0aG91dCByZWdhcmQgdG8gaXRzIGNob2ljZSBvZiBsYXcKK3Byb3Zpc2lvbnMuICBJbiB0aGUgZXZlbnQgb2YgYW55IGNvbmZsaWN0IGJldHdlZW4gZm9yZWlnbiBsYXdzLCBydWxlcworYW5kIHJlZ3VsYXRpb25zIGFuZCB0aG9zZSBvZiB0aGUgVW5pdGVkIFN0YXRlcywgdGhlIGxhd3MsIHJ1bGVzIGFuZAorcmVndWxhdGlvbnMgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgc2hhbGwgZ292ZXJuLiAgVGhlIFVuaXRlZCBOYXRpb25zCitDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBzaGFsbAorbm90IGFwcGx5IHRvIHRoaXMgQWdyZWVtZW50LiAgRXhjbHVzaXZlIGp1cmlzZGljdGlvbiBhbmQgdmVudWUgZm9yCithbnkgbGl0aWdhdGlvbiBhcmlzaW5nIHVuZGVyIHRoaXMgQWdyZWVtZW50IGlzIGluIHRoZSBmZWRlcmFsIGFuZAorc3RhdGUgY291cnRzIGxvY2F0ZWQgaW4gU3VmZm9sayBDb3VudHksIE1hc3NhY2h1c2V0dHMgYW5kIHlvdSBhZ3JlZQordG8gdGFrZSBhbnkgYW5kIGFsbCBuZWNlc3Nhcnkgb3IgYXBwcm9wcmlhdGUgYWN0aW9uIHRvIHN1Ym1pdCB0byB0aGUKK2p1cmlzZGljdGlvbiBhbmQgdmVudWUgb2Ygc3VjaCBjb3VydC4KKzExLjQgIEVudGlyZSBBZ3JlZW1lbnQ7IEFtZW5kbWVudC4gIFRoaXMgQWdyZWVtZW50IGNvbnN0aXR1dGVzIHRoZQorZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVnYXJkIHRvIHRoZSBzdWJqZWN0CittYXR0ZXIgaGVyZW9mIGFuZCBzdXBlcnNlZGVzIGFsbCBwcmlvciB1bmRlcnN0YW5kaW5ncyBhbmQKK2FncmVlbWVudHMsIHdoZXRoZXIgd3JpdHRlbiBvciBvcmFsLCBhcyB0byBzdWNoIHN1YmplY3QgbWF0dGVyLiAgTm8KK3dhaXZlciwgY29uc2VudCwgbW9kaWZpY2F0aW9uIG9yIGNoYW5nZSBvZiB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudAorc2hhbGwgYmluZCBlaXRoZXIgcGFydHkgdW5sZXNzIGluIHdyaXRpbmcgc2lnbmVkIGJ5IGJvdGggcGFydGllcywKK2FuZCB0aGVuIHN1Y2ggd2FpdmVyLCBjb25zZW50LCBtb2RpZmljYXRpb24gb3IgY2hhbmdlIHNoYWxsIGJlCitlZmZlY3RpdmUgb25seSBpbiB0aGUgc3BlY2lmaWMgaW5zdGFuY2UgYW5kIGZvciB0aGUgc3BlY2lmaWMgcHVycG9zZQorZ2l2ZW4uCisxMS41ICBBc3NpZ25tZW50LiAgVGhpcyBBZ3JlZW1lbnQgYW5kIHRoZSByaWdodHMgYW5kIG9ibGlnYXRpb25zCitoZXJldW5kZXIsIG1heSBub3QgYmUgYXNzaWduZWQsIGluIHdob2xlIG9yIGluIHBhcnQgYnkgTGljZW5zZWUsCit3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgTGljZW5zb3IuICBJbiB0aGUgY2FzZSBvZiBhbnkKK3Blcm1pdHRlZCBhc3NpZ25tZW50IG9yIHRyYW5zZmVyIG9mIG9yIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB0aGlzCitBZ3JlZW1lbnQgb3IgdGhlIHJlbGV2YW50IHByb3Zpc2lvbnMgc2hhbGwgYmUgYmluZGluZyB1cG9uLCBhbmQKK2ludXJlIHRvIHRoZSBiZW5lZml0IG9mLCB0aGUgc3VjY2Vzc29ycywgZXhlY3V0b3JzLCBoZWlycywKK3JlcHJlc2VudGF0aXZlcywgYWRtaW5pc3RyYXRvcnMgYW5kIGFzc2lnbnMgb2YgdGhlIHBhcnRpZXMgaGVyZXRvLgorMTEuNiAgQWNrbm93bGVkZ21lbnQuICBZb3UgYWNrbm93bGVkZ2UgdGhhdCAoYSkgeW91IGhhdmUgcmVhZCBhbmQKK3VuZGVyc3RhbmQgdGhpcyBBZ3JlZW1lbnQ7IGFuZCAoYikgdGhhdCB0aGlzIEFncmVlbWVudCBoYXMgdGhlIHNhbWUKK2ZvcmNlIGFuZCBlZmZlY3QgYXMgYSBzaWduZWQgYWdyZWVtZW50LgorCitMaWNlbnNvcjoKKworICAgICAgUmVzb3VuZGluZyBUZWNobm9sb2d5LCBJbmMuCisgICAgICA4NyBNYXJzaGFsbCBTdHJlZXQKKyAgICAgIEJ1aWxkaW5nIDEwCisgICAgICBOb3J0aCBBZGFtcywgTUEgIDAxMjQ3CisgICAgICB3d3cucmVzb3VuZGluZy5jb20KKworCisKK0lGIFlPVSBETyBOT1QgQUdSRUUgVE8gQUxMIE9GIFRIRSBGT1JFR09JTkcsIG9yIGFyZSBub3QgYXV0aG9yaXplZCB0byBhZ3JlZSwKK2RlbGV0ZSBhbGwgY29waWVzIG9mIHRoZSBhY2NvbXBhbnlpbmcgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZmlsZXMgZnJvbSB5b3VyCitjb21wdXRlciBzeXN0ZW1zIGFuZCBiYWNrdXAgbWVkaWEuICBJZiBhdXRob3JpemVkLCB5b3UgbWF5IGFjY2VwdCBhdAorYW5vdGhlciB0aW1lLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvUnVieSBiL2xpY2Vuc2VzL1J1YnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODc3NjFkNgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL1J1YnkKQEAgLTAsMCArMSw2OCBAQAorLS0tCitOT1RFOgorVGhpcyBpcyB0aGUgb2xkIHZlcnNpb24gb2YgdGhlIFJ1YnkgbGljZW5zZSB3aGljaCB3YXMgdXNlZCB1cCB1bnRpbCB0aGUgcmVsZWFzZQorb2YgdGhlIDEuOS4zIHZlcnNpb24gb2YgdGhlIE1SSSBSdWJ5IGludGVycHJldGVyLiBUaGUgVVJMIGJlbG93IG5vdyBwb2ludHMgdG8KK3RoZSBuZXcgdmVyc2lvbiBvZiB0aGUgbGljZW5zZSwgY2FsbGVkICdSdWJ5LUJTRCcgaW4gR2VudG9vLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tIEdlbnRvbyBSdWJ5IFRlYW0KKy0tLQorCitodHRwOi8vd3d3LnJ1YnktbGFuZy5vcmcvZW4vTElDRU5TRS50eHQKKworUnVieSBpcyBjb3B5cmlnaHRlZCBmcmVlIHNvZnR3YXJlIGJ5IFl1a2loaXJvIE1hdHN1bW90byA8bWF0ekBuZXRsYWIuY28uanA+LgorWW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciBlaXRoZXIgdGhlIHRlcm1zIG9mIHRoZSBHUEwKKyhzZWUgQ09QWUlORy50eHQgZmlsZSksIG9yIHRoZSBjb25kaXRpb25zIGJlbG93OgorCisgIDEuIFlvdSBtYXkgbWFrZSBhbmQgZ2l2ZSBhd2F5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgc291cmNlIGZvcm0gb2YgdGhlCisgICAgIHNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIHByb3ZpZGVkIHRoYXQgeW91IGR1cGxpY2F0ZSBhbGwgb2YgdGhlCisgICAgIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2VzIGFuZCBhc3NvY2lhdGVkIGRpc2NsYWltZXJzLgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvZiB0aGUgc29mdHdhcmUgaW4gYW55IHdheSwgcHJvdmlkZWQgdGhhdAorICAgICB5b3UgZG8gYXQgbGVhc3QgT05FIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICBhKSBwbGFjZSB5b3VyIG1vZGlmaWNhdGlvbnMgaW4gdGhlIFB1YmxpYyBEb21haW4gb3Igb3RoZXJ3aXNlCisgICAgICAgICAgbWFrZSB0aGVtIEZyZWVseSBBdmFpbGFibGUsIHN1Y2ggYXMgYnkgcG9zdGluZyBzYWlkCisJICBtb2RpZmljYXRpb25zIHRvIFVzZW5ldCBvciBhbiBlcXVpdmFsZW50IG1lZGl1bSwgb3IgYnkgYWxsb3dpbmcKKwkgIHRoZSBhdXRob3IgdG8gaW5jbHVkZSB5b3VyIG1vZGlmaWNhdGlvbnMgaW4gdGhlIHNvZnR3YXJlLgorCisgICAgICAgYikgdXNlIHRoZSBtb2RpZmllZCBzb2Z0d2FyZSBvbmx5IHdpdGhpbiB5b3VyIGNvcnBvcmF0aW9uIG9yCisgICAgICAgICAgb3JnYW5pemF0aW9uLgorCisgICAgICAgYykgcmVuYW1lIGFueSBub24tc3RhbmRhcmQgZXhlY3V0YWJsZXMgc28gdGhlIG5hbWVzIGRvIG5vdCBjb25mbGljdAorCSAgd2l0aCBzdGFuZGFyZCBleGVjdXRhYmxlcywgd2hpY2ggbXVzdCBhbHNvIGJlIHByb3ZpZGVkLgorCisgICAgICAgZCkgbWFrZSBvdGhlciBkaXN0cmlidXRpb24gYXJyYW5nZW1lbnRzIHdpdGggdGhlIGF1dGhvci4KKworICAzLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIHNvZnR3YXJlIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUKKyAgICAgZm9ybSwgcHJvdmlkZWQgdGhhdCB5b3UgZG8gYXQgbGVhc3QgT05FIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICBhKSBkaXN0cmlidXRlIHRoZSBleGVjdXRhYmxlcyBhbmQgbGlicmFyeSBmaWxlcyBvZiB0aGUgc29mdHdhcmUsCisJICB0b2dldGhlciB3aXRoIGluc3RydWN0aW9ucyAoaW4gdGhlIG1hbnVhbCBwYWdlIG9yIGVxdWl2YWxlbnQpCisJICBvbiB3aGVyZSB0byBnZXQgdGhlIG9yaWdpbmFsIGRpc3RyaWJ1dGlvbi4KKworICAgICAgIGIpIGFjY29tcGFueSB0aGUgZGlzdHJpYnV0aW9uIHdpdGggdGhlIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIG9mCisJICB0aGUgc29mdHdhcmUuCisKKyAgICAgICBjKSBnaXZlIG5vbi1zdGFuZGFyZCBleGVjdXRhYmxlcyBub24tc3RhbmRhcmQgbmFtZXMsIHdpdGgKKyAgICAgICAgICBpbnN0cnVjdGlvbnMgb24gd2hlcmUgdG8gZ2V0IHRoZSBvcmlnaW5hbCBzb2Z0d2FyZSBkaXN0cmlidXRpb24uCisKKyAgICAgICBkKSBtYWtlIG90aGVyIGRpc3RyaWJ1dGlvbiBhcnJhbmdlbWVudHMgd2l0aCB0aGUgYXV0aG9yLgorCisgIDQuIFlvdSBtYXkgbW9kaWZ5IGFuZCBpbmNsdWRlIHRoZSBwYXJ0IG9mIHRoZSBzb2Z0d2FyZSBpbnRvIGFueSBvdGhlcgorICAgICBzb2Z0d2FyZSAocG9zc2libHkgY29tbWVyY2lhbCkuICBCdXQgc29tZSBmaWxlcyBpbiB0aGUgZGlzdHJpYnV0aW9uCisgICAgIGFyZSBub3Qgd3JpdHRlbiBieSB0aGUgYXV0aG9yLCBzbyB0aGF0IHRoZXkgYXJlIG5vdCB1bmRlciB0aGlzIHRlcm1zLgorCisgICAgIFRoZXkgYXJlIGdjLmMocGFydGx5KSwgdXRpbHMuYyhwYXJ0bHkpLCByZWdleC5bY2hdLCBzdC5bY2hdIGFuZCBzb21lCisgICAgIGZpbGVzIHVuZGVyIHRoZSAuL21pc3NpbmcgZGlyZWN0b3J5LiAgU2VlIGVhY2ggZmlsZSBmb3IgdGhlIGNvcHlpbmcKKyAgICAgY29uZGl0aW9uLgorCisgIDUuIFRoZSBzY3JpcHRzIGFuZCBsaWJyYXJ5IGZpbGVzIHN1cHBsaWVkIGFzIGlucHV0IHRvIG9yIHByb2R1Y2VkIGFzIAorICAgICBvdXRwdXQgZnJvbSB0aGUgc29mdHdhcmUgZG8gbm90IGF1dG9tYXRpY2FsbHkgZmFsbCB1bmRlciB0aGUKKyAgICAgY29weXJpZ2h0IG9mIHRoZSBzb2Z0d2FyZSwgYnV0IGJlbG9uZyB0byB3aG9tZXZlciBnZW5lcmF0ZWQgdGhlbSwgCisgICAgIGFuZCBtYXkgYmUgc29sZCBjb21tZXJjaWFsbHksIGFuZCBtYXkgYmUgYWdncmVnYXRlZCB3aXRoIHRoaXMKKyAgICAgc29mdHdhcmUuCisKKyAgNi4gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgICAgIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisgICAgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAgICAgUFVSUE9TRS4KKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvUnVieS1CU0QgYi9saWNlbnNlcy9SdWJ5LUJTRApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTc2ZDA5Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvUnVieS1CU0QKQEAgLTAsMCArMSw1OCBAQAoraHR0cDovL3d3dy5ydWJ5LWxhbmcub3JnL2VuL2Fib3V0L2xpY2Vuc2UudHh0CisKK1J1YnkgaXMgY29weXJpZ2h0ZWQgZnJlZSBzb2Z0d2FyZSBieSBZdWtpaGlybyBNYXRzdW1vdG8gPG1hdHpAbmV0bGFiLmpwPi4KK1lvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgZWl0aGVyIHRoZSB0ZXJtcyBvZiB0aGUKKzItY2xhdXNlIEJTREwgKHNlZSB0aGUgZmlsZSBCU0RMKSwgb3IgdGhlIGNvbmRpdGlvbnMgYmVsb3c6CisKKyAgMS4gWW91IG1heSBtYWtlIGFuZCBnaXZlIGF3YXkgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBzb3VyY2UgZm9ybSBvZiB0aGUKKyAgICAgc29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgcHJvdmlkZWQgdGhhdCB5b3UgZHVwbGljYXRlIGFsbCBvZiB0aGUKKyAgICAgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZXMgYW5kIGFzc29jaWF0ZWQgZGlzY2xhaW1lcnMuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9mIHRoZSBzb2Z0d2FyZSBpbiBhbnkgd2F5LCBwcm92aWRlZCB0aGF0CisgICAgIHlvdSBkbyBhdCBsZWFzdCBPTkUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgICAgIGEpIHBsYWNlIHlvdXIgbW9kaWZpY2F0aW9ucyBpbiB0aGUgUHVibGljIERvbWFpbiBvciBvdGhlcndpc2UKKyAgICAgICAgICBtYWtlIHRoZW0gRnJlZWx5IEF2YWlsYWJsZSwgc3VjaCBhcyBieSBwb3N0aW5nIHNhaWQKKwkgIG1vZGlmaWNhdGlvbnMgdG8gVXNlbmV0IG9yIGFuIGVxdWl2YWxlbnQgbWVkaXVtLCBvciBieSBhbGxvd2luZworCSAgdGhlIGF1dGhvciB0byBpbmNsdWRlIHlvdXIgbW9kaWZpY2F0aW9ucyBpbiB0aGUgc29mdHdhcmUuCisKKyAgICAgICBiKSB1c2UgdGhlIG1vZGlmaWVkIHNvZnR3YXJlIG9ubHkgd2l0aGluIHlvdXIgY29ycG9yYXRpb24gb3IKKyAgICAgICAgICBvcmdhbml6YXRpb24uCisKKyAgICAgICBjKSBnaXZlIG5vbi1zdGFuZGFyZCBiaW5hcmllcyBub24tc3RhbmRhcmQgbmFtZXMsIHdpdGgKKyAgICAgICAgICBpbnN0cnVjdGlvbnMgb24gd2hlcmUgdG8gZ2V0IHRoZSBvcmlnaW5hbCBzb2Z0d2FyZSBkaXN0cmlidXRpb24uCisKKyAgICAgICBkKSBtYWtlIG90aGVyIGRpc3RyaWJ1dGlvbiBhcnJhbmdlbWVudHMgd2l0aCB0aGUgYXV0aG9yLgorCisgIDMuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgc29mdHdhcmUgaW4gb2JqZWN0IGNvZGUgb3IgYmluYXJ5IGZvcm0sCisgICAgIHByb3ZpZGVkIHRoYXQgeW91IGRvIGF0IGxlYXN0IE9ORSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgICAgYSkgZGlzdHJpYnV0ZSB0aGUgYmluYXJpZXMgYW5kIGxpYnJhcnkgZmlsZXMgb2YgdGhlIHNvZnR3YXJlLAorCSAgdG9nZXRoZXIgd2l0aCBpbnN0cnVjdGlvbnMgKGluIHRoZSBtYW51YWwgcGFnZSBvciBlcXVpdmFsZW50KQorCSAgb24gd2hlcmUgdG8gZ2V0IHRoZSBvcmlnaW5hbCBkaXN0cmlidXRpb24uCisKKyAgICAgICBiKSBhY2NvbXBhbnkgdGhlIGRpc3RyaWJ1dGlvbiB3aXRoIHRoZSBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBvZgorCSAgdGhlIHNvZnR3YXJlLgorCisgICAgICAgYykgZ2l2ZSBub24tc3RhbmRhcmQgYmluYXJpZXMgbm9uLXN0YW5kYXJkIG5hbWVzLCB3aXRoCisgICAgICAgICAgaW5zdHJ1Y3Rpb25zIG9uIHdoZXJlIHRvIGdldCB0aGUgb3JpZ2luYWwgc29mdHdhcmUgZGlzdHJpYnV0aW9uLgorCisgICAgICAgZCkgbWFrZSBvdGhlciBkaXN0cmlidXRpb24gYXJyYW5nZW1lbnRzIHdpdGggdGhlIGF1dGhvci4KKworICA0LiBZb3UgbWF5IG1vZGlmeSBhbmQgaW5jbHVkZSB0aGUgcGFydCBvZiB0aGUgc29mdHdhcmUgaW50byBhbnkgb3RoZXIKKyAgICAgc29mdHdhcmUgKHBvc3NpYmx5IGNvbW1lcmNpYWwpLiAgQnV0IHNvbWUgZmlsZXMgaW4gdGhlIGRpc3RyaWJ1dGlvbgorICAgICBhcmUgbm90IHdyaXR0ZW4gYnkgdGhlIGF1dGhvciwgc28gdGhhdCB0aGV5IGFyZSBub3QgdW5kZXIgdGhlc2UgdGVybXMuCisKKyAgICAgRm9yIHRoZSBsaXN0IG9mIHRob3NlIGZpbGVzIGFuZCB0aGVpciBjb3B5aW5nIGNvbmRpdGlvbnMsIHNlZSB0aGUKKyAgICAgZmlsZSBMRUdBTC4KKworICA1LiBUaGUgc2NyaXB0cyBhbmQgbGlicmFyeSBmaWxlcyBzdXBwbGllZCBhcyBpbnB1dCB0byBvciBwcm9kdWNlZCBhcworICAgICBvdXRwdXQgZnJvbSB0aGUgc29mdHdhcmUgZG8gbm90IGF1dG9tYXRpY2FsbHkgZmFsbCB1bmRlciB0aGUKKyAgICAgY29weXJpZ2h0IG9mIHRoZSBzb2Z0d2FyZSwgYnV0IGJlbG9uZyB0byB3aG9tZXZlciBnZW5lcmF0ZWQgdGhlbSwKKyAgICAgYW5kIG1heSBiZSBzb2xkIGNvbW1lcmNpYWxseSwgYW5kIG1heSBiZSBhZ2dyZWdhdGVkIHdpdGggdGhpcworICAgICBzb2Z0d2FyZS4KKworICA2LiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyAgICAgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAgICAgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICAgICBQVVJQT1NFLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvU0NNLU1JQ1JPIGIvbGljZW5zZXMvU0NNLU1JQ1JPCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MDdhY2MKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9TQ00tTUlDUk8KQEAgLTAsMCArMSw1NiBAQAorSU1QT1JUQU5UOiBSRUFEIENBUkVGVUxMWToKKworCitUaGlzIEVuZC1Vc2VyIExpY2Vuc2UgQWdyZWVtZW50ICgiQWdyZWVtZW50IikgaXMgYSBsZWdhbCBhZ3JlZW1lbnQgYmV0d2VlbiB5b3UgKGVpdGhlciBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5KSBhbmQgU0NNIE1pY3Jvc3lzdGVtcywgSW5jLiAoIlNDTSIpIGZvciB0aGUgU0NNIHNvZnR3YXJlIHByb2R1Y3QgaWRlbnRpZmllZCBhYm92ZSwgd2hpY2ggaW5jbHVkZXMgY29tcHV0ZXIgc29mdHdhcmUgYW5kIG1heSBpbmNsdWRlIGFzc29jaWF0ZWQgbWVkaWEsIHByaW50ZWQgbWF0ZXJpYWxzLCBhbmQgIm9ubGluZSIgb3IgZWxlY3Ryb25pYyBkb2N1bWVudGF0aW9uICgiTGljZW5zZWQgUHJvZHVjdCIpLiBUaGUgTGljZW5zZWQgUHJvZHVjdCBhbHNvIGluY2x1ZGVzIGFueSB1cGRhdGVzIGFuZCBzdXBwbGVtZW50cyB0byB0aGUgb3JpZ2luYWwgTGljZW5zZWQgUHJvZHVjdCBwcm92aWRlZCB0byB5b3UgYnkgU0NNLiBBbnkgc29mdHdhcmUgcHJvdmlkZWQgYWxvbmcgd2l0aCB0aGUgTGljZW5zZWQgUHJvZHVjdCB0aGF0IGlzIGFzc29jaWF0ZWQgd2l0aCBhIHNlcGFyYXRlIGxpY2Vuc2UgYWdyZWVtZW50IGlzIGxpY2Vuc2VkIHRvIHlvdSB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCBsaWNlbnNlIGFncmVlbWVudC4KKworQnkgaW5zdGFsbGluZywgY29weWluZywgZG93bmxvYWRpbmcsIGFjY2Vzc2luZyBvciBvdGhlcndpc2UgdXNpbmcgdGhlIExpY2Vuc2VkIFByb2R1Y3QsIHlvdSBhZ3JlZSB0byBiZSBib3VuZCBieSB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQuIElmIHlvdSBkbyBub3QgYWdyZWUgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBkbyBub3QgaW5zdGFsbCBvciB1c2UgdGhlIExpY2Vuc2VkIFByb2R1Y3Q7IHlvdSBtYXksIGhvd2V2ZXIsIHJldHVybiBpdCB0byB0aGUgY29tcGFueS9wZXJzb24gdGhhdCBzdXBwbGllZCBMaWNlbnNlZCBQcm9kdWN0IHRvIHlvdSBmb3IgYSBmdWxsIHJlZnVuZC4KKworCisKK0VORC1VU0VSIExJQ0VOU0UgQUdSRUVNRU5UCisKK1RoZSBMaWNlbnNlZCBQcm9kdWN0IGlzIHByb3RlY3RlZCBieSBjb3B5cmlnaHQgbGF3cyBhbmQgaW50ZXJuYXRpb25hbCBjb3B5cmlnaHQgdHJlYXRpZXMsIGFzIHdlbGwgYXMgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3MgYW5kIHRyZWF0aWVzLiBUaGUgTGljZW5zZWQgUHJvZHVjdCBpcyBsaWNlbnNlZCwgbm90IHNvbGQuCisKKworMS4JTElDRU5TRUQgUklHSFRTIEFORCBVU0UgUkVTVFJJQ1RJT05TCisKKzEuMQlUaGlzIEFncmVlbWVudCBncmFudHMgeW91IHRoZSByaWdodCB0byBpbnN0YWxsIGFuZCB1c2Ugb25lIGNvcHkgb2YgdGhlIExpY2Vuc2VkIFByb2R1Y3Qgb24gb25lIGNvbXB1dGVyLgorCisxLjIJWW91IG1heSBub3QgcmV2ZXJzZSBlbmdpbmVlciwgZGVjb21waWxlLCBvciBkaXNhc3NlbWJsZSB0aGUgTGljZW5zZWQgUHJvZHVjdCwgZXhjZXB0IGFuZCBvbmx5IHRvIHRoZSBleHRlbnQgdGhhdCBzdWNoIGFjdGl2aXR5IGlzIGV4cHJlc3NseSBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcuCisKKzEuMwlTQ00gbWF5IHByb3ZpZGUgeW91IHdpdGggc3VwcG9ydCBzZXJ2aWNlcyByZWxhdGVkIHRvIHRoZSBMaWNlbnNlZCBQcm9kdWN0ICgiU3VwcG9ydCBTZXJ2aWNlcyIpLiBVc2Ugb2YgU3VwcG9ydCBTZXJ2aWNlcywgaWYgYW55LCBpcyBnb3Zlcm5lZCBieSB0aGUgU0NNIHBvbGljZXMgYW5kIHByb2dyYW1zIGRlc2NyaWJlZCBpbiB0aGUgdXNlciBtYW51YWwsIGluICJvbiBsaW5lIiBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBTQ00tcHJvdmlkZWQgbWF0ZXJpYWxzLiBBbnkgc3VwcGxlbWVudGFsIHNvZnR3YXJlIGNvZGUgcHJvdmlkZWQgdG8geW91IGFzIHBhcnQgb2YgdGhlIFN1cHBvcnQgU2VydmljZXMgc2hhbGwgYmUgY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBMaWNlbnNlZCBQcm9kdWN0IGFuZCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudC4gV2l0aCByZXNwZWN0IHRvIHRlY2huaWNhbCBpbmZvcm1hdGlvbiB5b3UgcHJvdmlkZSB0byBTQ00gYXMgcGFydCBvZiB0aGUgU3VwcG9ydCBTZXJ2aWNlcywgU0NNIG1heSB1c2Ugc3VjaCBpbmZvcm1hdGlvbiBmb3IgaXRzIGJ1c2luZXNzIHB1cnBvc2VzLCBpbmNsdWRpbmcgZm9yIHByb2R1Y3Qgc3VwcG9ydCBhbmQgZGV2ZWxvcG1lbnQuIFNDTSB3aWxsIG5vdCB1dGlsaXplIHN1Y2ggdGVjaG5pY2FsIGluZm9ybWF0aW9uIGluIGEgZm9ybSB0aGF0IHBlcnNvbmFsbHkgaWRlbnRpZmllcyB5b3UuCisKKzEuNAlZb3UgbWF5IHRyYW5zZmVyIHRoaXMgQWdyZWVtZW50IGFuZCBMaWNlbnNlZCBQcm9kdWN0IG9ubHkgZGlyZWN0bHkgdG8gYW5vdGhlciBlbmQgdXNlciBhbmQgb25seSB0b2dldGhlciB3aXRoIHRoZSBjb3JyZXNwb25kaW5nIGhhcmR3YXJlIHByb2R1Y3QsIGlmIGFueS4gVGhpcyB0cmFuc2ZlciBtdXN0IGluY2x1ZGUgYWxsIG9mIHRoZSBMaWNlbnNlZCBQcm9kdWN0IChpbmNsdWRpbmcgYWxsIGNvbXBvbmVudCBwYXJ0cywgdGhlIG1lZGlhIGFuZCBwcmludGVkIG1hdGVyaWFscywgYW55IHVwZ3JhZGVzLCB0aGlzIEFncmVlbWVudCkuICBUaGUgdHJhbnNmZXJlZSBvZiBzdWNoIHRyYW5zZmVyIG11c3QgYWdyZWUgdG8gY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LgorCisxLjUJV2l0aG91dCBwcmVqdWRpY2UgdG8gYW55IG90aGVyIHJpZ2h0cywgU0NNIG1heSB0ZXJtaW5hdGUgdGhpcyBBZ3JlZW1lbnQgaWYgeW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50LiBJbiBzdWNoIGV2ZW50LCB5b3UgbXVzdCBkZXN0cm95IGFsbCBjb3BpZXMgb2YgdGhlIExpY2Vuc2VkIFByb2R1Y3QuCisKKworMi4JQ09QWVJJR0hUCisKK0FsbCB0aXRsZSBhbmQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBpbiBhbmQgdG8gdGhlIExpY2Vuc2VkIFByb2R1Y3QsIHRoZSBhY2NvbXBhbnlpbmcgcHJpbnRlZCBtYXRlcmlhbHMsIGFuZCBhbnkgY29waWVzIG9mIHRoZSBMaWNlbnNlZCBQcm9kdWN0IGFyZSBvd25lZCBieSBTQ00gb3IgaXRzIHN1cHBsaWVycy4gQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgYXJlIHJlc2VydmVkIGJ5IFNDTS4KKworMy4JQkFDSy1VUCBDT1BZCisKK0FmdGVyIGluc3RhbGxhdGlvbiBvZiBvbmUgY29weSBvZiB0aGUgTGljZW5zZWQgUHJvZHVjdCBwdXJzdWFudCB0byB0aGlzIEFncmVlbWVudCwgeW91IG1heSBrZWVwIHRoZSBvcmlnaW5hbCBtZWRpYSBvbiB3aGljaCB0aGUgTGljZW5zZWQgUHJvZHVjdCB3YXMgcHJvdmlkZWQgYnkgU0NNIHNvbGVseSBmb3IgYmFjay11cCBvciBhcmNoaXZhbCBwdXJwb3Nlcy4gIElmIHRoZSBvcmlnaW5hbCBtZWRpYSBpcyByZXF1aXJlZCB0byB1c2UgdGhlIExpY2Vuc2VkIFByb2R1Y3Qgb24gdGhlIGNvbXB1dGVyLCB5b3UgbWF5IG1ha2Ugb25lIGNvcHkgb2YgdGhlIExpY2Vuc2VkIFByb2R1Y3Qgc29sZWx5IGZvciBiYWNrLXVwIG9yIGFyY2hpdmFsIHB1cnBvc2VzLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIGluIHRoaXMgQWdyZWVtZW50LCB5b3UgbWF5IG5vdCBvdGhlcndpc2UgbWFrZSBjb3BpZXMgb2YgdGhlIExpY2Vuc2VkIFByb2R1Y3Qgb3IgdGhlIHByaW50ZWQgbWF0ZXJpYWxzIGFjY29tcGFueWluZyB0aGUgTGljZW5zZWQgUHJvZHVjdC4KKworCis0LglFWFBPUlQgUkVTVFJJQ1RJT05TLgorCitZb3UgYWdyZWUgdGhhdCB5b3Ugd2lsbCBub3QgZXhwb3J0IG9yIHJlLWV4cG9ydCB0aGUgTGljZW5zZWQgUHJvZHVjdCB0byBhbnkgY291bnRyeSwgcGVyc29uLCBlbnRpdHkgb3IgZW5kIHVzZXIgc3ViamVjdCB0byBVLlMuIG9yIG90aGVyIGFwcGxpY2FibGUgZXhwb3J0IHJlc3RyaWN0aW9ucy4gWW91IHNwZWNpZmljYWxseSBhZ3JlZSBub3QgdG8gZXhwb3J0IG9yIHJlLWV4cG9ydCB0aGUgTGljZW5zZWQgUHJvZHVjdDogKGkpIHRvIGFueSBjb3VudHJ5IHRvIHdoaWNoIHRoZSBVLlMuIGhhcyBlbWJhcmdvZWQgb3IgcmVzdHJpY3RlZCB0aGUgZXhwb3J0IG9mIGdvb2RzIG9yIHNlcnZpY2VzLCBvciB0byBhbnkgbmF0aW9uYWwgb2YgYW55IHN1Y2ggY291bnRyeSwgd2hlcmV2ZXIgbG9jYXRlZCwgd2hvIGludGVuZHMgdG8gdHJhbnNtaXQgb3IgdHJhbnNwb3J0IHRoZSBwcm9kdWN0cyBiYWNrIHRvIHN1Y2ggY291bnRyeTsgKGlpKSB0byBhbnkgZW5kLXVzZXIgd2hvIHlvdSBrbm93IG9yIGhhdmUgcmVhc29uIHRvIGtub3cgd2lsbCB1dGlsaXplIHRoZSBMaWNlbnNlZCBQcm9kdWN0IG9yIHBvcnRpb24gdGhlcmVvZiBpbiB0aGUgZGVzaWduLCBkZXZlbG9wbWVudCBvciBwcm9kdWN0aW9uIG9mIG51Y2xlYXIsIGNoZW1pY2FsIG9yIGJpb2xvZ2ljYWwgd2VhcG9uczsgb3IgKGlpaSkgdG8gYW55IGVuZC11c2VyIHdobyBoYXMgYmVlbiBwcm9oaWJpdGVkIGZyb20gcGFydGljaXBhdGluZyBpbiBVLlMuIGV4cG9ydCB0cmFuc2FjdGlvbnMgYnkgYW55IGZlZGVyYWwgYWdlbmN5IG9mIHRoZSBVLlMuIGdvdmVybm1lbnQuCisKKzUuCUxJTUlURUQgV0FSUkFOVFkKKworNS4xCVNDTSB3YXJyYW50cyB0aGF0IChhKSB0aGUgTGljZW5zZWQgUHJvZHVjdCB3aWxsIHBlcmZvcm0gc3Vic3RhbnRpYWxseSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGFjY29tcGFueWluZyB3cml0dGVuIG1hdGVyaWFscyBmb3IgYSBwZXJpb2Qgb2YgbmluZXR5ICg5MCkgZGF5cyBmcm9tIHRoZSBkYXRlIG9mIHJlY2VpcHQsIGFuZCAoYikgYW55IFN1cHBvcnQgU2VydmljZXMgcHJvdmlkZWQgYnkgU0NNIHNoYWxsIGJlIHN1YnN0YW50aWFsbHkgYXMgZGVzY3JpYmVkIGluIGFwcGxpY2FibGUgd3JpdHRlbiBtYXRlcmlhbHMgcHJvdmlkZWQgdG8geW91IGJ5IFNDTSwgYW5kIFNDTSBzdXBwb3J0IGVuZ2luZWVycyB3aWxsIG1ha2UgY29tbWVyY2lhbGx5IHJlYXNvbmFibGUgZWZmb3J0cyB0byBzb2x2ZSBhbnkgcHJvYmxlbS4gVG8gdGhlIGV4dGVudCBhbGxvd2VkIGJ5IGFwcGxpY2FibGUgbGF3LCBpbXBsaWVkIHdhcnJhbnRpZXMgb24gdGhlIExpY2Vuc2VkIFByb2R1Y3QsIGlmIGFueSwgYXJlIGxpbWl0ZWQgdG8gbmluZXR5ICg5MCkgZGF5cy4gU29tZSBzdGF0ZXMvanVyaXNkaWN0aW9ucyBkbyBub3QgYWxsb3cgbGltaXRhdGlvbnMgb24gZHVyYXRpb24gb2Ygd2FycmFudHksIHNvIHRoZSBhYm92ZSBsaW1pdGF0aW9uIG1heSBub3QgYXBwbHkgdG8geW91LgorCis1LjIJU0NNJ3MgYW5kIGl0cyBzdXBwbGllcnMnIGVudGlyZSBsaWFiaWxpdHkgYW5kIHlvdXIgZXhjbHVzaXZlIHJlbWVkeSBzaGFsbCBiZSwgYXQgU0NNJ3Mgb3B0aW9uLCBlaXRoZXIgKGEpIHJldHVybiBvZiB0aGUgcHJpY2UgcGFpZCwgaWYgYW55LCBvciAoYikgcmVwYWlyIG9yIHJlcGxhY2VtZW50IG9mIHRoZSBMaWNlbnNlZCBQcm9kdWN0IHRoYXQgZG9lcyBub3QgbWVldCBTQ00ncyBMaW1pdGVkIFdhcnJhbnR5IGFuZCB0aGF0IGlzIHJldHVybmVkIHRvIFNDTSB3aXRoIGEgY29weSBvZiB5b3VyIHJlY2VpcHQuIFRoaXMgTGltaXRlZCBXYXJyYW50eSBpcyB2b2lkIGlmIGZhaWx1cmUgb2YgdGhlIExpY2Vuc2VkIFByb2R1Y3QgaGFzIHJlc3VsdGVkIGZyb20gYWNjaWRlbnQsIGFidXNlLCBvciBtaXNhcHBsaWNhdGlvbi4gQW55IHJlcGxhY2VtZW50IExpY2Vuc2VkIFByb2R1Y3Qgd2lsbCBiZSB3YXJyYW50ZWQgZm9yIHRoZSByZW1haW5kZXIgb2YgdGhlIG9yaWdpbmFsIHdhcnJhbnR5IHBlcmlvZCBvciB0aGlydHkgKDMwKSBkYXlzLCB3aGljaGV2ZXIgaXMgbG9uZ2VyLgorCis1LjMJVE8gVEhFIE1BWElNVU0gRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVywgU0NNIEFORCBJVFMgU1VQUExJRVJTIERJU0NMQUlNIEFMTCBPVEhFUiBXQVJSQU5USUVTIEFORCBDT05ESVRJT05TLCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU1QTElFRCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgVElUTEUgQU5EIE5PTi1JTkZSSU5HRU1FTlQsIFdJVEggUkVHQVJEIFRPIFRIRSBMSUNFTlNFRCBQUk9EVUNULCBBTkQgVEhFIFBST1ZJU0lPTiBPRiBPUiBGQUlMVVJFIFRPIFBST1ZJREUgU1VQUE9SVCBTRVJWSUNFUy4gVEhJUyBMSU1JVEVEIFdBUlJBTlRZIEdJVkVTIFlPVSBTUEVDSUZJQyBMRUdBTCBSSUdIVFMuIFlPVSBNQVkgSEFWRSBPVEhFUlMsIFdISUNIIFZBUlkgRlJPTSBTVEFURS9KVVJJU0RJQ1RJT04gVE8gU1RBVEUvSlVSSVNESUNUSU9OLgorCis1LjQJVE8gVEhFIE1BWElNVU0gRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgU0hBTEwgU0NNIE9SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBXSEFUU09FVkVSIChJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBCVVNJTkVTUyBQUk9GSVRTLCBCVVNJTkVTUyBJTlRFUlJVUFRJT04sIExPU1MgT0YgQlVTSU5FU1MgSU5GT1JNQVRJT04sIE9SIEFOWSBPVEhFUiBQRUNVTklBUlkgTE9TUykgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPRiBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBMSUNFTlNFRCBQUk9EVUNUIE9SIFRIRSBGQUlMVVJFIFRPIFBST1ZJREUgU1VQUE9SVCBTRVJWSUNFUywgRVZFTiBJRiBTQ00gSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBJTiBBTlkgQ0FTRSwgU0NNJ1MgRU5USVJFIExJQUJJTElUWSBVTkRFUiBBTlkgUFJPVklTSU9OIE9GIFRISVMgQUdSRUVNRU5UIFNIQUxMIEJFIExJTUlURUQgVE8gVEhFIEdSRUFURVIgT0YgVEhFIEFNT1VOVCBBQ1RVQUxMWSBQQUlEIEJZIFlPVSBGT1IgVEhFIExJQ0VOU0VEIFBST0RVQ1QgT1IgVS5TLiQgMTAuMDAwOyBQUk9WSURFRCwgSE9XRVZFUiwgSUYgWU9VIEhBVkUgRU5URVJFRCBJTlRPIEEgU0NNIFNVUFBPUlQgU0VSVklDRVMgQUdSRUVNRU5ULCBTQ00nUyBFTlRJUkUgTElBQklMSVRZIFJFR0FSRElORyBTVVBQT1JUIFNFUlZJQ0VTIFNIQUxMIEJFIEdPVkVSTkVEIEJZIFRIRSBURVJNUyBPRiBUSEFUIEFHUkVFTUVOVC4gQkVDQVVTRSBTT01FIFNUQVRFUy9KVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgTElBQklMSVRZLCBUSEUgQUJPVkUgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworCis2LglBUFBMSUNBQkxFIExBVworCis2LjEJSWYgeW91IGFjcXVpcmVkIHRoaXMgTGljZW5zZWQgUHJvZHVjdCBpbiB0aGUgVW5pdGVkIFN0YXRlcywgdGhpcyBBZ3JlZW1lbnQgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEuCisKKzYuMglJZiB0aGlzIHByb2R1Y3Qgd2FzIGFjcXVpcmVkIG91dHNpZGUgdGhlIFVuaXRlZCBTdGF0ZXMsIHRoZW4gbG9jYWwgbGF3IG1heSBhcHBseS4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL1NGSS1TQ0xBIGIvbGljZW5zZXMvU0ZJLVNDTEEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjA3NTJhNAotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL1NGSS1TQ0xBCkBAIC0wLDAgKzEsNDUgQEAKK1RoaXMgU3RyYXRlZ3kgRmlyc3QgSW5jLiBTb3VyY2UgQ29kZSBMaWNlbnNlIEFncmVlbWVudCAoIlNGSS1TQ0xBIikgZm9ybXMgYSBsZWdhbCBhZ3JlZW1lbnQgYmV0d2VlbiB5b3UgYW5kIFN0cmF0ZWd5IEZpcnN0IEluYy4gKCJTdHJhdGVneSBGaXJzdCIpIGZvciB0aGUgc291cmNlIGNvZGUsIHJlbGF0ZWQgbWF0ZXJpYWxzLCBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gKHRvZ2V0aGVyLCB0aGUgIlNvZnR3YXJlIikuCisKK0J5IHVzaW5nIHRoaXMgU29mdHdhcmUgeW91IGFncmVlIHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIFNGSS1TQ0xBLiBEbyBub3QgaW5zdGFsbCwgY29weSwgb3IgdXNlIHRoZSBTb2Z0d2FyZSBpZiB5b3UgZG8gbm90IGFncmVlIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBUaGUgU29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IGNvcHlyaWdodCBhbmQgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3MgYW5kIFN0cmF0ZWd5IEZpcnN0IGlzIGxpY2Vuc2luZyB0aGUgU29mdHdhcmUsIG5vdCBzZWxsaW5nIGl0LgorCitZT1VSIFJJR0hUUzoKKworWW91IG1heSB1c2UgdGhpcyBTb2Z0d2FyZSBmb3IgYW55IG5vbi1jb21tZXJjaWFsIHB1cnBvc2UsIHN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiBOb24tY29tbWVyY2lhbCBwdXJwb3NlcyBpbmNsdWRlLCBidXQgYXJlIG5vdCBsaW1pdGVkIHRvLCB0ZWFjaGluZywgcmVzZWFyY2gsIHB1YmxpYyBkZW1vcyBhbmQgeW91ciBvd24gZXhwZXJpbWVudGF0aW9uLiBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhpcyBTb2Z0d2FyZSB3aXRoIGJvb2tzIG9yIG90aGVyIHRlYWNoaW5nIG1hdGVyaWFscywgb3IgcHVibGlzaCB0aGUgU29mdHdhcmUgb24gd2Vic2l0ZXMgdGhhdCBhcmUgaW50ZW5kZWQgdG8gdGVhY2ggdGhlIHVzZSBvZiB0aGUgU29mdHdhcmUgZm9yIGFjYWRlbWljIG9yIG90aGVyIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzLiBZb3UgbWF5IG5vdCB1c2Ugb3IgZGlzdHJpYnV0ZSB0aGlzIFNvZnR3YXJlLCBvciBhbnkgd29ya3MgdGhhdCBkZXJpdmUgZnJvbSBpdCwgaW4gYW55IGZvcm0gZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMuIENvbW1lcmNpYWwgcHVycG9zZXMgaW5jbHVkZSwgYnV0IGFyZSBub3QgbGltaXRlZCB0bywgcnVubmluZyBhIGJ1c2luZXNzLCBsaWNlbnNpbmcsIHJlbnRpbmcsIG9yIHNlbGxpbmcgdGhlIFNvZnR3YXJlLCBkaXN0cmlidXRpbmcgdGhlIFNvZnR3YXJlIGZvciB1c2Ugd2l0aCBhbnkgY29tbWVyY2lhbCBwcm9kdWN0cywgb3IgYW55IG90aGVyIGFjdGl2aXR5IHdoaWNoIHB1cnBvc2UgaXMgdG8gcHJvY3VyZSBhIHByb2ZpdCBvciBnYWluIHRvIHlvdSBvciBvdGhlcnMuICBUaGlzIFNvZnR3YXJlIGluY2x1ZGVzIHNvdXJjZSBjb2RlIG9yIGRhdGEsIGFuZCB5b3UgbWF5IG1vZGlmeSBzdWNoIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZSBhbmQgZGlzdHJpYnV0ZSB0aGUgbW9kaWZpZWQgU29mdHdhcmUgZm9yIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzLCBhcyBwcm92aWRlZCBpbiB0aGlzIExpY2Vuc2luZyBBZ3JlZW1lbnQuCisKK1RoaXMgTGljZW5zaW5nIEFncmVlbWVudCBkb2VzIG5vdCBncmFudCB5b3UgYSBsaWNlbnNlIHRvIGFueSBvZiBTdHJhdGVneSBGaXJzdCdzIGNvcHlyaWdodHMgb3IgcGF0ZW50cyBmb3IgYW55dGhpbmcgeW91IG1pZ2h0IGNyZWF0ZSB1c2luZyBhbnkgb2YgdGhlIGluZm9ybWF0aW9uIGluY2x1ZGVkIGluIHRoZSBTb2Z0d2FyZS4KKworSW4gcmV0dXJuLCB5b3UgYWdyZWU6CisKKzEuCVRoYXQgeW91IHdpbGwgbm90IHJlbW92ZSBhbnkgY29weXJpZ2h0IG9yIG90aGVyIG5vdGljZXMgZnJvbSB0aGUgU29mdHdhcmUuCisKKzIuCVRoYXQgaWYgYW55IG9mIHRoZSBTb2Z0d2FyZSBpcyBpbiBiaW5hcnkgZm9ybWF0LCB5b3Ugd2lsbCBub3QgYXR0ZW1wdCB0byBtb2RpZnkgc3VjaCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUsIG9yIHRvIHJldmVyc2UgZW5naW5lZXIgb3IgZGVjb21waWxlIHRoZW0sIGV4Y2VwdCBhbmQgb25seSB0byB0aGUgZXh0ZW50IGF1dGhvcml6ZWQgYnkgbGF3LgorCiszLglUaGF0IGlmIHlvdSBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgU29mdHdhcmUsIHlvdSB3aWxsIGRpc3RyaWJ1dGUgdGhlbSB1c2luZyBhIHZlcmJhdGltIGNvcHkgb2YgdGhpcyBMaWNlbnNlLCBhbmQgeW91IHdpbGwgbm90IGdyYW50IGFueQorcmlnaHRzIHRvIHRoZSBTb2Z0d2FyZSBvciBkZXJpdmF0aXZlIHdvcmtzIHRoYXQgYXJlIGJyb2FkZXIgdGhhbiB0aG9zZSBwcm92aWRlZCBieSB0aGlzIExpY2Vuc2luZyBBZ3JlZW1lbnQuIEZvciBleGFtcGxlLCB5b3UgbWF5IG5vdCBkaXN0cmlidXRlIGFueSBtb2RpZmljYXRpb25zIG9mIHRoZSBTb2Z0d2FyZSB1bmRlciB0ZXJtcyB0aGF0IHdvdWxkIHBlcm1pdCBjb21tZXJjaWFsIHVzZSwgb3IgdW5kZXIgdGVybXMgdGhhdCByZXF1aXJlIHRoZSBTb2Z0d2FyZSBvciBzdWNoIGRlcml2YXRpdmUgd29ya3MgdG8gYmUgc3VibGljZW5zZWQgdG8gb3RoZXJzLgorCis0LglUaGF0IGlmIHlvdSBoYXZlIG1vZGlmaWVkIHRoZSBTb2Z0d2FyZSBvciBjcmVhdGVkIGRlcml2YXRpdmUgd29ya3MsIGFuZCBkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyBvciBkZXJpdmF0aXZlIHdvcmtzLCB5b3Ugd2lsbCBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkKK3Byb21pbmVudCBub3RpY2VzIHNvIHRoYXQgcmVjaXBpZW50cyBrbm93IHRoYXQgdGhleSBhcmUgbm90IHJlY2VpdmluZyB0aGUgb3JpZ2luYWwgU29mdHdhcmUuIFN1Y2ggbm90aWNlcyBtdXN0IHN0YXRlOiAoaSkgdGhhdCB5b3UgaGF2ZSBjaGFuZ2VkIHRoZSBTb2Z0d2FyZTsgYW5kIChpaSkgdGhlIGRhdGUgb2YgYW55IGNoYW5nZXMuCisKKzUuCVRoYXQgU3RyYXRlZ3kgRmlyc3QgaXMgZ3JhbnRlZCwgd2l0aG91dCBhbnkgbGltaXRhdGlvbnMsIGFuZCBvbiBhIHJveWFsdHkgZnJlZSBiYXNpcywgdGhlIHJpZ2h0cyB0byByZXByb2R1Y2UsIGluc3RhbGwsIHVzZSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCB0cmFuc2ZlciB5b3VyIG1vZGlmaWNhdGlvbnMgdG8gdGhlIFNvZnR3YXJlIHNvdXJjZSBjb2RlIG9yIGRhdGEuCisKKzYuCVRoYXQgYW55IGZlZWRiYWNrIGFib3V0IHRoZSBTb2Z0d2FyZSBwcm92aWRlZCBieSB5b3UgdG8gdXMgaXMgdm9sdW50YXJpbHkgZ2l2ZW4sIGFuZCBTdHJhdGVneSBGaXJzdCBzaGFsbCBiZSBmcmVlIHRvIHVzZSB0aGUgZmVlZGJhY2sgYXMgaXQgc2VlcyBmaXQgd2l0aG91dCBvYmxpZ2F0aW9uIG9yCityZXN0cmljdGlvbiBvZiBhbnkga2luZCwgZXZlbiBpZiB0aGUgZmVlZGJhY2sgaXMgZGVzaWduYXRlZCBieSB5b3UgYXMgY29uZmlkZW50aWFsLgorCis3LglUSEFUIFRIRSBTT0ZUV0FSRSBDT01FUyAiQVMgSVMiLCBXSVRIIE5PIFdBUlJBTlRJRVMuIFRISVMgTUVBTlMgTk8gRVhQUkVTUywgSU1QTElFRCBPUiBTVEFUVVRPUlkgV0FSUkFOVFksIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBBTlkgV0FSUkFOVFkgQUdBSU5TVCBJTlRFUkZFUkVOQ0UgV0lUSCBZT1VSIEVOSk9ZTUVOVCBPRiBUSEUgU09GVFdBUkUgT1IgQU5ZIFdBUlJBTlRZIE9GIFRJVExFIE9SIE5PTi1JTkZSSU5HRU1FTlQuIFRIRVJFIElTIE5PIFdBUlJBTlRZIFRIQVQgVEhJUyBTT0ZUV0FSRSBXSUxMIEZVTEZJTEwgQU5ZIE9GIFlPVVIgUEFSVElDVUxBUiBQVVJQT1NFUyBPUiBORUVEUy4gQUxTTywgWU9VIE1VU1QgUEFTUyBUSElTIERJU0NMQUlNRVIgT04gV0hFTkVWRVIgWU9VIERJU1RSSUJVVEUgVEhFIFNPRlRXQVJFIE9SIERFUklWQVRJVkUgV09SS1MuCisKKzguCVRIQVQgTkVJVEhFUiBTVFJBVEVHWSBGSVJTVCBOT1IgQU5ZIENPTlRSSUJVVE9SIFRPIFRIRSBTT0ZUV0FSRSBXSUxMIEJFIExJQUJMRSBGT1IgQU5ZIERBTUFHRVMgUkVMQVRFRCBUTyBUSEUgU09GVFdBUkUgT1IgVEhJUyBMSUNFTlNFLCBJTkNMVURJTkcgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwKK0NPTlNFUVVFTlRJQUwgT1IgSU5DSURFTlRBTCBEQU1BR0VTLCBUTyBUSEUgTUFYSU1VTSBFWFRFTlQgVEhFIExBVyBQRVJNSVRTLCBOTyBNQVRURVIgV0hBVCBMRUdBTCBUSEVPUlkgSVQgSVMgQkFTRUQgT04uIEFMU08sIFlPVSBNVVNUIFBBU1MgVEhJUyBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBPTiBXSEVORVZFUiBZT1UgRElTVFJJQlVURSBUSEUgU09GVFdBUkUgT1IgREVSSVZBVElWRSBXT1JLUy4KKworOS4JVGhhdCB3ZSBoYXZlIG5vIGR1dHkgb2YgcmVhc29uYWJsZSBjYXJlIG9yIGxhY2sgb2YgbmVnbGlnZW5jZSwgYW5kIHdlIGFyZSBub3Qgb2JsaWdhdGVkIHRvIHByb3ZpZGUgdGVjaG5pY2FsIHN1cHBvcnQgZm9yIHRoZSBTb2Z0d2FyZS4KKworMTAuCVRoYXQgaWYgeW91IGJyZWFjaCB0aGlzIFNGSS1TQ0xBIG9yIGlmIHlvdSBzdWUgYW55b25lIG92ZXIgcGF0ZW50cyB0aGF0IHlvdSB0aGluayBtYXkgYXBwbHkgdG8gdGhlIFNvZnR3YXJlIG9yIGFueW9uZSdzIHVzZSBvZiB0aGUgU29mdHdhcmUsIHlvdXIgbGljZW5zZSB0byB0aGUgU29mdHdhcmUgZW5kcyBhdXRvbWF0aWNhbGx5IGFuZCB5b3Ugc2hhbGwgZGVzdHJveSBhbGwgb2YgeW91ciBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlIGltbWVkaWF0ZWx5LiAgU2VjdGlvbiA1IG9mIHRoaXMgU0ZJLVNDTEEgc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBsaWNlbnNlLgorCisxMS4JVGhhdCB0aGUgcGF0ZW50IHJpZ2h0cywgaWYgYW55LCBncmFudGVkIGluIHRoaXMgTGljZW5zaW5nIEFncmVlbWVudCBvbmx5IGFwcGx5IHRvIHRoZSBTb2Z0d2FyZSwgbm90IHRvIGFueSBkZXJpdmF0aXZlIHdvcmtzIHlvdSBtYWtlLgorCisxMi4JVGhhdCB0aGUgU29mdHdhcmUgaXMgc3ViamVjdCB0byBVLlMuIGV4cG9ydCBqdXJpc2RpY3Rpb24gYXQgdGhlIHRpbWUgaXQgaXMgbGljZW5zZWQgdG8geW91LCBhbmQgaXQgbWF5IGJlIHN1YmplY3QgdG8gYWRkaXRpb25hbCBleHBvcnQgb3IgaW1wb3J0IGxhd3MgaW4gb3RoZXIgcGxhY2VzLiAgWW91IGFncmVlIHRvIGNvbXBseSB3aXRoIGFsbCBzdWNoIGxhd3MgYW5kIHJlZ3VsYXRpb25zIHRoYXQgbWF5IGFwcGx5IHRvIHRoZSBTb2Z0d2FyZSBhZnRlciBkZWxpdmVyeSBvZiB0aGUgc29mdHdhcmUgdG8geW91LgorCisxMy4JVGhhdCB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UgZW5kIGF1dG9tYXRpY2FsbHkgaWYgeW91IGJyZWFjaCBpdCBpbiBhbnkgd2F5LgorCisxNC4JVGhhdCBhbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCB0byB5b3UgaW4gdGhpcyBMaWNlbnNlIGFyZSByZXNlcnZlZC4KKworMTUuCVRoYXQgdGhpcyBTRkktU0NMQSBzaGFsbCBiZSBjb25zdHJ1ZWQgYW5kIGNvbnRyb2xsZWQgYnkgdGhlIGxhd3Mgb2YgdGhlIFByb3ZpbmNlIG9mIFF1ZWJlYywgQ2FuYWRhLCB3aXRob3V0IHJlZ2FyZCB0byBjb25mbGljdHMgb2YgbGF3LiAgSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIFNGSS1TQ0xBIHNoYWxsIGJlIGRlZW1lZCB1bmVuZm9yY2VhYmxlIG9yIGNvbnRyYXJ5IHRvIGxhdywgdGhlIHJlc3Qgb2YgdGhpcyBTRkktU0NMQSBzaGFsbCByZW1haW4gaW4gZnVsbCBlZmZlY3QgYW5kIGludGVycHJldGVkIGluIGFuIGVuZm9yY2VhYmxlIG1hbm5lciB0aGF0IG1vc3QgbmVhcmx5IGNhcHR1cmVzIHRoZSBpbnRlbnQgb2YgdGhlIG9yaWdpbmFsIGxhbmd1YWdlLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvU0dJLUItMi4wIGIvbGljZW5zZXMvU0dJLUItMi4wCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0ZWFkY2IKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9TR0ktQi0yLjAKQEAgLTAsMCArMSwyNyBAQAorU0dJIEZSRUUgU09GVFdBUkUgTElDRU5TRSBCIChWZXJzaW9uIDIuMCwgU2VwdC4gMTgsIDIwMDgpCisKK0NvcHlyaWdodCAoQykgW2RhdGVzIG9mIGZpcnN0IHB1YmxpY2F0aW9uXSBTaWxpY29uIEdyYXBoaWNzLCBJbmMuIEFsbCBSaWdodHMKK1Jlc2VydmVkLgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5IG9mCit0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8gZGVhbCBpbgordGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0bwordXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3Igc2VsbCBjb3BpZXMKK29mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbworc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBpbmNsdWRpbmcgdGhlIGRhdGVzIG9mIGZpcnN0IHB1YmxpY2F0aW9uIGFuZCBlaXRoZXIKK3RoaXMgcGVybWlzc2lvbiBub3RpY2Ugb3IgYSByZWZlcmVuY2UgdG8gaHR0cDovL29zcy5zZ2kuY29tL3Byb2plY3RzL0ZyZWVCLworc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFNJTElDT04KK0dSQVBISUNTLCBJTkMuIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTgorQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisKK0V4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIFNpbGljb24gR3JhcGhpY3MsIEluYy4gc2hhbGwKK25vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2Ugb3Igb3RoZXIKK2RlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24gZnJvbSBTaWxpY29uCitHcmFwaGljcywgSW5jLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvU0dNTFVHIGIvbGljZW5zZXMvU0dNTFVHCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NmNhMzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9TR01MVUcKQEAgLTAsMCArMSw0MyBAQAorICAgICAgICAgICAgICAgICBMSUNFTlNFIEFORCBESVNDTEFJTUVSIE9GIFdBUlJBTlRJRVMKKworICAgICAgU3RhbmRhcmQgR2VuZXJhbGl6ZWQgTWFya3VwIExhbmd1YWdlIFVzZXJzJyBHcm91cCAoU0dNTFVHKQorICAgICAgICAgICAgICAgICAgICAgICAgIFNHTUwgUGFyc2VyIE1hdGVyaWFscworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxLiBMaWNlbnNlCisKK1NHTUxVRyBoZXJlYnkgZ3JhbnRzIHRvIGFueSB1c2VyOiAoMSkgYW4gaXJyZXZvY2FibGUgcm95YWx0eS1mcmVlLAord29ybGR3aWRlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UgdG8gdXNlLCBleGVjdXRlLCByZXByb2R1Y2UsIGRpc3BsYXksCitwZXJmb3JtIGFuZCBkaXN0cmlidXRlIGNvcGllcyBvZiwgYW5kIHRvIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcworYmFzZWQgdXBvbiB0aGVzZSBtYXRlcmlhbHM7IGFuZCAoMikgdGhlIHJpZ2h0IHRvIGF1dGhvcml6ZSBvdGhlcnMgdG8KK2RvIGFueSBvZiB0aGUgZm9yZWdvaW5nLgorCisgICAgICAgICAgICAgICAgICAgICAyLiBEaXNjbGFpbWVyIG9mIFdhcnJhbnRpZXMKKworKGEpIFRoZSBTR01MIFBhcnNlciBNYXRlcmlhbHMgYXJlIHByb3ZpZGVkICJhcyBpcyIgdG8gYW55IFVTRVIuICBVU0VSCithc3N1bWVzIHJlc3BvbnNpYmlsaXR5IGZvciBkZXRlcm1pbmluZyB0aGUgc3VpdGFiaWxpdHkgb2YgdGhlIFNHTUwKK1BhcnNlciBNYXRlcmlhbHMgZm9yIGl0cyB1c2UgYW5kIGZvciByZXN1bHRzIG9idGFpbmVkLiAgU0dNTFVHIG1ha2VzCitubyB3YXJyYW50eSB0aGF0IGFueSBlcnJvcnMgaGF2ZSBiZWVuIGVsaW1pbmF0ZWQgZnJvbSB0aGUgU0dNTCBQYXJzZXIKK01hdGVyaWFscyBvciB0aGF0IHRoZXkgY2FuIGJlIGVsaW1pbmF0ZWQgYnkgVVNFUi4gIFNHTUxVRyBzaGFsbCBub3QKK3Byb3ZpZGUgYW55IHN1cHBvcnQgbWFpbnRlbmFuY2Ugb3Igb3RoZXIgYWlkIHRvIFVTRVIgb3IgaXRzIGxpY2Vuc2Vlcword2l0aCByZXNwZWN0IHRvIFNHTUwgUGFyc2VyIE1hdGVyaWFscy4gIFNHTUxVRyBzaGFsbCBub3QgYmUKK3Jlc3BvbnNpYmxlIGZvciBsb3NzZXMgb2YgYW55IGtpbmQgcmVzdWx0aW5nIGZyb20gdXNlIG9mIHRoZSBTR01MCitQYXJzZXIgTWF0ZXJpYWxzIGluY2x1ZGluZyAod2l0aG91dCBsaW1pdGF0aW9uKSBhbnkgbGlhYmlsaXR5IGZvcgorYnVzaW5lc3MgZXhwZW5zZSwgbWFjaGluZSBkb3dudGltZSwgb3IgZGFtYWdlcyBjYXVzZWQgdG8gVVNFUiBvciB0aGlyZAorcGFydGllcyBieSBhbnkgZGVmaWNpZW5jeSwgZGVmZWN0LCBlcnJvciwgb3IgbWFsZnVuY3Rpb24uCisKKyhiKSBTR01MVUcgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTLCBFWFBSRVNTRUQgT1IgSU1QTElFRCwgQVJJU0lORyBPVVQKK09GIE9SIFJFTEFUSU5HIFRPIFRIRSBTR01MIFBBUlNFUiBNQVRFUklBTFMgT1IgQU5ZIFVTRSBUSEVSRU9GLAorSU5DTFVESU5HIChXSVRIT1VUIExJTUlUQVRJT04pIEFOWSBXQVJSQU5UWSBXSEFUU09FVkVSIEFTIFRPIFRIRQorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFVTRSBPUiBUSEUgTUVSQ0hBTlRBQklMSVRZIE9GIFRIRSBTR01MIFBBUlNFUgorTUFURVJJQUxTLgorCisoYykgSW4gbm8gZXZlbnQgc2hhbGwgU0dNTFVHIGJlIGxpYWJsZSB0byBVU0VSIG9yIHRoaXJkIHBhcnRpZXMKK2xpY2Vuc2VkIGJ5IFVTRVIgZm9yIGFueSBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCwgb3IKK2NvbnNlcXVlbnRpYWwgZGFtYWdlcyAoaW5jbHVkaW5nIGxvc3QgcHJvZml0cykuCisoZCkgU0dNTFVHIGhhcyBubyBrbm93bGVkZ2Ugb2YgYW55IGNvbmRpdGlvbnMgdGhhdCB3b3VsZCBpbXBhaXIgaXRzIHJpZ2h0Cit0byBsaWNlbnNlIHRoZSBTR01MIFBhcnNlciBNYXRlcmlhbHMuICBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZywKK1NHTUxVRyBkb2VzIG5vdCBtYWtlIGFueSB3YXJyYW50aWVzIG9yIHJlcHJlc2VudGF0aW9ucyB0aGF0IHRoZQorU0dNTCBQYXJzZXIgTWF0ZXJpYWxzIGFyZSBmcmVlIG9mIGNsYWltcyBieSB0aGlyZCBwYXJ0aWVzIG9mIHBhdGVudCwKK2NvcHlyaWdodCBpbmZyaW5nZW1lbnQgb3IgdGhlIGxpa2UsIG5vciBkb2VzIFNHTUxVRyBhc3N1bWUgYW55CitsaWFiaWxpdHkgaW4gcmVzcGVjdCBvZiBhbnkgc3VjaCBpbmZyaW5nZW1lbnQgb2YgcmlnaHRzIG9mIHRoaXJkCitwYXJ0aWVzIGR1ZSB0byBVU0VSJ3Mgb3BlcmF0aW9uIHVuZGVyIHRoaXMgbGljZW5zZS4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL1NJRlQgYi9saWNlbnNlcy9TSUZUCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMTBlMWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9TSUZUCkBAIC0wLDAgKzEsNTIgQEAKKworU0lGVCBmZWF0dXJlIGRldGVjdGlvbiBpbXBsZW1lbnRhdGlvbgorQ29weXJpZ2h0IChDKSAyMDA0LCBTZWJhc3RpYW4gTm93b3ppbiAobm93b3ppbkBjcy50dS1iZXJsaW4uZGUpCisKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKKworVGhlcmUgZm9sbG93cyBhIGZvcm1hbCBsaWNlbnNlIGZvciB0aGlzIHNvZnR3YXJlLCBwbGVhc2UgcmVhZCBpdCBjYXJlZnVsbHkuCitQcm9iYWJseSB0aGUgbW9zdCBpbXBvcnRhbnQgcGFydCBmb3IgdGhlIHVzZXIgaXMgaXRzIHJlc3RyaWN0aW9uIHRvCitub24tY29tbWVyY2lhbCB1c2Ugb25seS4gVGhlIGxpY2Vuc2UgdXNlZCB0aGUgQlNEIGxpY2Vuc2UgYXMgdGVtcGxhdGUuCisKKworTElDRU5TRQorCitVc2Ugb2YgdGhpcyBzb2Z0d2FyZSBhbmQgcmVkaXN0cmlidXRpb24gaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3IKK3dpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorbWV0OgorCisgICAgKiBBbnkgcmVkaXN0cmlidXRpb24gbXVzdCBjb250YWluIHRoZSBjb21wbGV0ZSBzb3VyY2UgY29kZSwgaW5jbHVkaW5nIGFsbAorICAgICAgbW9kaWZpY2F0aW9ucy4gQWx0ZXJuYXRpdmVseSwgdGhlIHJlZGlzdHJpYnV0aW9uIG1heSBjb250YWluIGEgcGVybWFuZW50CisgICAgICBwb2ludGVyIHRvIGFuIEludGVybmV0IGFkZHJlc3Mgd2hlcmUgdGhlIGZ1bGwgbW9kaWZpZWQgc291cmNlIGNvZGUgaXMKKyAgICAgIGF2YWlsYWJsZSBmb3IgZG93bmxvYWQgZnJlZSBvZiBjaGFyZ2UuCisKKyAgICAqIFRoZSByZWRpc3RyaWJ1dGVkIHNvZnR3YXJlIGNvbnRhaW5zIHRoZSBmb2xsb3dpbmcgdGV4dCBhcyBwcm9taW5lbnQKKyAgICAgIG5vdGljZSBpbiB0aGUgc291cmNlIGNvZGUgYW5kIGFzIGRpc3BsYXllZCBwcm9ncmFtIG91dHB1dCB3aGVuZXZlciB0aGUKKyAgICAgIHByb2dyYW0gaXMgcnVuOgorCisJIlRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgZm9yIG5vbi1jb21tZXJjaWFsIHVzZSBvbmx5LiBUaGUgVW5pdmVyc2l0eQorCSBvZiBCcml0aXNoIENvbHVtYmlhIGhhcyBhcHBsaWVkIGZvciBhIHBhdGVudCBvbiB0aGUgU0lGVCBhbGdvcml0aG0gaW4KKwkgdGhlIFVuaXRlZCBTdGF0ZXMuIENvbW1lcmNpYWwgYXBwbGljYXRpb25zIG9mIHRoaXMgc29mdHdhcmUgbWF5CisgICAgICAgICByZXF1aXJlIGEgbGljZW5zZSBmcm9tIHRoZSBVbml2ZXJzaXR5IG9mIEJyaXRpc2ggQ29sdW1iaWEuIgorCisgICAgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBhdXRob3JzIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworICAgICogVGhlIHJlZGlzdHJpYnV0ZWQgc29mdHdhcmUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIgorQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKK0NBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCitPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCmRpZmYgLS1naXQgYS9saWNlbnNlcy9TSVItVEVDSCBiL2xpY2Vuc2VzL1NJUi1URUNICm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjN2RmMGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9TSVItVEVDSApAQCAtMCwwICsxLDIxIEBACisoYykgQ29weXJpZ2h0IDE5OTkgYnkgU2lyLXRlY2ggQ2FuYWRhIEx0ZC4gQWxsIHJpZ2h0IHJlc2VydmVkLgorSmFnZ2VkIEFsbGlhbmNlIGlzIGEgcmVnaXN0ZXJlZCB0cmFkZW1hcmsgb2YgMTI1OTE5MSBPbnRhcmlvIEluYy4KKworQnkgYWNjZXB0aW5nIHRoZSB0ZXJtcyBvZiB0aGlzIGFncmVlbWVudCwgeW91IGFyZSBncmFudGVkIHRoZSByaWdodCBieSAKK1RpdGFuIENvbXB1dGVyLCBMaW1pdGVkIHRvIHVzZSBvbmUgY29weSBvZiB0aGUgZW5jbG9zZWQgc29mdHdhcmUgcHJvZ3JhbS4gWW91IAorbWF5IG5vdCByZW50IG9yIGxlYXNlIGl0LCBkaXNhc3NlbWJsZSwgZGVjb21waWxlLCByZXZlcnNlIGVuZ2luZWVyIG9yIG1vZGlmeSAKK3RoZSBzb2Z0d2FyZSBpbiBhbnkgd2F5LgorCitUaGUgZW5jbG9zZWQgc29mdHdhcmUgcHJvZ3JhbSwgbGlicmFyaWVzLCBncmFwaGljcywgYW5kIGFsbCB3cml0dGVuIG1hdGVyaWFsIAorYXJlIHRoZSBzb2xlIHByb3BlcnR5IG9mIFNpcnRlY2ggQ2FuYWRhIExpbWl0ZWQgYW5kIGl0cyBzdXBwbGllcnMsIGFuZCBhcmUgCitwcm90ZWN0ZWQgdW5kZXIgdGhlIGNvcHlyaWdodCBsYXdzIG9mIHRoZSBDYW5hZGEgYW5kIGFsbCBJbnRlcm5hdGlvbmFsIAorVHJlYXRpZXMuCisKK1RoaXMgc29mdHdhcmUgcHJvZHVjdCBpcyBzb2xkIEFTIElTLCBhbmQgVGl0YW4gQ29tcHV0ZXIsIFNpcnRlY2gsIAorVHJpYnNvZnQgSW5jLiwgIGl0cyBzdXBwbGllcnMsIGRlYWxlcnMgb3IgZGlzdHJpYnV0b3JzIG1ha2Ugbm8gd2FycmFudHkgd2l0aCAKK3Jlc3BlY3QgdG8gdGhlIHBlcmZvcm1hbmNlLCBxdWFsaXR5LCBtZXJjaGFudGFiaWxpdHkgb3IgZml0bmVzcyBmb3IgYW55IHB1cnBvc2UgCitvZiB0aGUgc29mdHdhcmUuCisKK0FueSBjaGFuZ2UsIGRldmlhdGlvbiBvciBleGVtcHRpb24gZnJvbSB0aGUgY29uZGl0aW9ucyBleHByZXNzZWQgaW4gdGhpcyAKK2xpY2Vuc2UgYWdyZWVtZW50IG11c3QgYmUgYXV0aG9yaXplZCBpbiB3cml0aW5nIGJ5IFRpdGFuIENvbXB1dGVyIG9yIAorU2lydGVjaCBDYW5hZGEsIExpbWl0ZWQuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9TTUFJTCBiL2xpY2Vuc2VzL1NNQUlMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjOTRkZTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9TTUFJTApAQCAtMCwwICsxLDE0NCBAQAorCQkgICAgIFNNQUlMIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKwkJICAgICAgIChDbGFyaWZpZWQgMTEgRmViIDE5ODgpCisKKyBDb3B5cmlnaHQgKEMpICAxOTg4IExhbmRvbiBDdXJ0IE5vbGwgJiBSb25hbGQgUy4gS2FycgorIENvcHlyaWdodCAoQykgIDE5OTIgUm9uYWxkIFMuIEthcnIKKyBDb3B5bGVmdCAoR05VKSAxOTg4IExhbmRvbiBDdXJ0IE5vbGwgJiBSb25hbGQgUy4gS2FycgorCisgRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzCisgb2YgdGhpcyBsaWNlbnNlLCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuICBZb3UgY2FuIGFsc28KKyB1c2UgdGhpcyB3b3JkaW5nIHRvIG1ha2UgdGhlIHRlcm1zIGZvciBvdGhlciBwcm9ncmFtcy4KKworICBUaGUgbGljZW5zZSBhZ3JlZW1lbnRzIG9mIG1vc3Qgc29mdHdhcmUgY29tcGFuaWVzIGtlZXAgeW91IGF0IHRoZQorbWVyY3kgb2YgdGhvc2UgY29tcGFuaWVzLiAgQnkgY29udHJhc3QsIG91ciBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlIGlzCitpbnRlbmRlZCB0byBnaXZlIGV2ZXJ5b25lIHRoZSByaWdodCB0byBzaGFyZSBTTUFJTC4gIFRvIG1ha2Ugc3VyZSB0aGF0Cit5b3UgZ2V0IHRoZSByaWdodHMgd2Ugd2FudCB5b3UgdG8gaGF2ZSwgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucwordGhhdCBmb3JiaWQgYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlcgordGhlIHJpZ2h0cy4gIEhlbmNlIHRoaXMgbGljZW5zZSBhZ3JlZW1lbnQuCisKKyAgU3BlY2lmaWNhbGx5LCB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSByaWdodCB0byBnaXZlCithd2F5IGNvcGllcyBvZiBTTUFJTCwgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBlbHNlIGNhbiBnZXQgaXQKK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIFNNQUlMIG9yIHVzZSBwaWVjZXMgb2YgaXQgaW4gbmV3CitmcmVlIHByb2dyYW1zLCBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuIGRvIHRoZXNlIHRoaW5ncy4KKworICBUbyBtYWtlIHN1cmUgdGhhdCBldmVyeW9uZSBoYXMgc3VjaCByaWdodHMsIHdlIGhhdmUgdG8gZm9yYmlkIHlvdSB0bworZGVwcml2ZSBhbnlvbmUgZWxzZSBvZiB0aGVzZSByaWdodHMuICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUKK2NvcGllcyBvZiBTTUFJTCwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHlvdQoraGF2ZS4gIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZQorc291cmNlIGNvZGUuICBBbmQgeW91IG11c3QgdGVsbCB0aGVtIHRoZWlyIHJpZ2h0cy4KKworICBBbHNvLCBmb3Igb3VyIG93biBwcm90ZWN0aW9uLCB3ZSBtdXN0IG1ha2UgY2VydGFpbiB0aGF0IGV2ZXJ5b25lCitmaW5kcyBvdXQgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgU01BSUwuICBJZiBTTUFJTCBpcyBtb2RpZmllZCBieQorc29tZW9uZSBlbHNlIGFuZCBwYXNzZWQgb24sIHdlIHdhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQKK3RoZXkgaGF2ZSBpcyBub3Qgd2hhdCB3ZSBkaXN0cmlidXRlZCwgc28gdGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZAorYnkgb3RoZXJzIHdpbGwgbm90IHJlZmxlY3Qgb24gb3VyIHJlcHV0YXRpb24uCisKKyAgVGhlcmVmb3JlIHdlIChMYW5kb24gQ3VydCBOb2xsIGFuZCBSb25hbGQgUy4gS2FycikgbWFrZSB0aGUgZm9sbG93aW5nIAordGVybXMgd2hpY2ggc2F5IHdoYXQgeW91IG11c3QgZG8gdG8gYmUgYWxsb3dlZCB0byBkaXN0cmlidXRlIG9yIGNoYW5nZSAKK1NNQUlMLgorCisKKwkJCUNPUFlJTkcgUE9MSUNJRVMKKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIFNNQUlMIHNvdXJjZSBjb2RlCithcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UgY29uc3BpY3VvdXNseSBhbmQKK2FwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYSB2YWxpZCBjb3B5cmlnaHQgbm90aWNlICJDb3B5cmlnaHQKKyhDKSAxOTg4IExhbmRvbiBDdXJ0IE5vbGwgJiBSb25hbGQgUy4gS2FyciIgKG9yIHdpdGggd2hhdGV2ZXIgeWVhciBpcworYXBwcm9wcmlhdGUpOyBrZWVwIGludGFjdCB0aGUgbm90aWNlcyBvbiBhbGwgZmlsZXMgdGhhdCByZWZlciB0byB0aGlzCitMaWNlbnNlIEFncmVlbWVudCBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OyBhbmQgZ2l2ZSBhbnkKK290aGVyIHJlY2lwaWVudHMgb2YgdGhlIFNNQUlMIHByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorQWdyZWVtZW50IGFsb25nIHdpdGggdGhlIHByb2dyYW0uICBZb3UgbWF5IGNoYXJnZSBhIGRpc3RyaWJ1dGlvbiBmZWUKK2ZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHkuCisKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiBTTUFJTCBvciBhbnkgcG9ydGlvbiBvZiBpdCwKK2FuZCBjb3B5IGFuZCBkaXN0cmlidXRlIHN1Y2ggbW9kaWZpY2F0aW9ucyB1bmRlciB0aGUgdGVybXMgb2YKK1BhcmFncmFwaCAxIGFib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBjYXVzZSB0aGUgbW9kaWZpZWQgZmlsZXMgdG8gY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZworICAgIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlOyBhbmQKKworICAgIGIpIGNhdXNlIHRoZSB3aG9sZSBvZiBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsCisgICAgdGhhdCBpbiB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGEgZGVyaXZhdGl2ZSBvZiBTTUFJTCBvcgorICAgIGFueSBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQKKyAgICBwYXJ0aWVzIG9uIHRlcm1zIGlkZW50aWNhbCB0byB0aG9zZSBjb250YWluZWQgaW4gdGhpcyBMaWNlbnNlCisgICAgQWdyZWVtZW50IChleGNlcHQgdGhhdCB5b3UgbWF5IGNob29zZSB0byBncmFudCBtb3JlIGV4dGVuc2l2ZQorICAgIHdhcnJhbnR5IHByb3RlY3Rpb24gdG8gc29tZSBvciBhbGwgdGhpcmQgcGFydGllcywgYXQgeW91ciBvcHRpb24pLgorCisgICAgYykgWW91IG1heSBjaGFyZ2UgYSBkaXN0cmlidXRpb24gZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mCisgICAgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kIHlvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkKKyAgICBwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4KKworTWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHVucmVsYXRlZCBwcm9ncmFtIHdpdGggdGhpcyBwcm9ncmFtIChvciBpdHMKK2Rlcml2YXRpdmUpIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nCit0aGUgb3RoZXIgcHJvZ3JhbSB1bmRlciB0aGUgc2NvcGUgb2YgdGhlc2UgdGVybXMuCisKKyAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIFNNQUlMIChvciBhIHBvcnRpb24gb3IgZGVyaXZhdGl2ZSBvZiBpdCwKK3VuZGVyIFBhcmFncmFwaCAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitQYXJhZ3JhcGhzIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIGEpIGFjY29tcGFueSBpdCB3aXRoIHRoZSBjb21wbGV0ZSBjb3JyZXNwb25kaW5nIG1hY2hpbmUtcmVhZGFibGUKKyAgICBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YKKyAgICBQYXJhZ3JhcGhzIDEgYW5kIDIgYWJvdmU7IG9yLAorCisgICAgYikgYWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUKKyAgICB5ZWFycywgdG8gZ2l2ZSBhbnkgdGhpcmQgcGFydHkgZnJlZSAoZXhjZXB0IGZvciBhIG5vbWluYWwKKyAgICBzaGlwcGluZyBjaGFyZ2UpIGEgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZQorICAgIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICAgIFBhcmFncmFwaHMgMSBhbmQgMiBhYm92ZTsgb3IsCisKKyAgICBjKSBhY2NvbXBhbnkgaXQgd2l0aCB0aGUgaW5mb3JtYXRpb24geW91IHJlY2VpdmVkIGFzIHRvIHdoZXJlIHRoZQorICAgIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUgbWF5IGJlIG9idGFpbmVkLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbi1jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gYWxvbmUuKQorCitGb3IgYW4gZXhlY3V0YWJsZSBmaWxlLCBjb21wbGV0ZSBzb3VyY2UgY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvcgorYWxsIG1vZHVsZXMgaXQgY29udGFpbnM7IGJ1dCwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgaXQgbmVlZCBub3QgaW5jbHVkZQorc291cmNlIGNvZGUgZm9yIG1vZHVsZXMgd2hpY2ggYXJlIHN0YW5kYXJkIGxpYnJhcmllcyB0aGF0IGFjY29tcGFueSB0aGUKK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgZmlsZSBydW5zLgorCisgIDQuIFlvdSBtYXkgbm90IGNvcHksIHN1YmxpY2Vuc2UsIGRpc3RyaWJ1dGUgb3IgdHJhbnNmZXIgU01BSUwKK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gIEFueSBhdHRlbXB0CitvdGhlcndpc2UgdG8gY29weSwgc3VibGljZW5zZSwgZGlzdHJpYnV0ZSBvciB0cmFuc2ZlciBTTUFJTCBpcyB2b2lkIGFuZAoreW91ciByaWdodHMgdG8gdXNlIHRoZSBwcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZSBhZ3JlZW1lbnQgc2hhbGwgYmUKK2F1dG9tYXRpY2FsbHkgdGVybWluYXRlZC4gIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29tcHV0ZXIKK3NvZnR3YXJlIHByb2dyYW1zIGZyb20geW91IHdpdGggdGhpcyBMaWNlbnNlIEFncmVlbWVudCB3aWxsIG5vdCBoYXZlCit0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaCBwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgNS4gSWYgeW91IHdpc2ggdG8gaW5jb3Jwb3JhdGUgcGFydHMgb2YgU01BSUwgaW50byBvdGhlciBmcmVlCitwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZSB0byBMYW5kb24KK0N1cnQgTm9sbCAmIFJvbmFsZCBTLiBLYXJyIHZpYSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIGF0IDUxCitGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLiAgV2UgaGF2ZSBub3QgeWV0Cit3b3JrZWQgb3V0IGEgc2ltcGxlIHJ1bGUgdGhhdCBjYW4gYmUgc3RhdGVkIGhlcmUsIGJ1dCB3ZSB3aWxsIG9mdGVuCitwZXJtaXQgdGhpcy4gIFdlIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMgb2YgcHJlc2VydmluZyB0aGUKK2ZyZWUgc3RhdHVzIG9mIGFsbCBkZXJpdmF0aXZlcyBvZiBvdXIgZnJlZSBzb2Z0d2FyZSBhbmQgb2YgcHJvbW90aW5nCit0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUuCisKK1lvdXIgY29tbWVudHMgYW5kIHN1Z2dlc3Rpb25zIGFib3V0IG91ciBsaWNlbnNpbmcgcG9saWNpZXMgYW5kIG91cgorc29mdHdhcmUgYXJlIHdlbGNvbWUhICBUaGlzIGNvbnRyYWN0IHdhcyBiYXNlZCBvbiB0aGUgY29udHJhY3QgbWFkZSBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIFBsZWFzZSBjb250YWN0IHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwKK1VTQSwgb3IgY2FsbCAoNjE3KSA1NDItNTk0MiBmb3IgZGV0YWlscyBvbiBjb3B5bGVmdGVkIG1hdGVyaWFsIGluCitnZW5lcmFsLgorCisJCSAgICAgICBOTyBXQVJSQU5UWQorCisgIEJFQ0FVU0UgU01BSUwgSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFdFIFBST1ZJREUgQUJTT0xVVEVMWSBOTworV0FSUkFOVFksIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgU1RBVEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORywgTEFORE9OIENVUlQgTk9MTCAmIFJPTkFMRCBTLiBLQVJSIEFORC9PUgorT1RIRVIgUEFSVElFUyBQUk9WSURFIFNNQUlMICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKK0VJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCitUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFNNQUlMIElTIFdJVEgKK1lPVS4gIFNIT1VMRCBTTUFJTCBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMCitORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgV0lMTCBMQU5ET04gQ1VSVCBOT0xMICYKK1JPTkFMRCBTLiBLQVJSIEFORC9PUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EIFJFRElTVFJJQlVURQorU01BSUwgQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZCitMT1NUIFBST0ZJVFMsIExPU1QgTU9OSUVTLCBPUiBPVEhFUiBTUEVDSUFMLCBJTkNJREVOVEFMIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFCisoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRAorSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRQorUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFBST0dSQU1TKSBTTUFJTCwgRVZFTiBJRiBZT1UgSEFWRQorQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMsIE9SIEZPUiBBTlkgQ0xBSU0gQlkKK0FOWSBPVEhFUiBQQVJUWS4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL1NOSUEgYi9saWNlbnNlcy9TTklBCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMDZhZDgKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9TTklBCkBAIC0wLDAgKzEsNDI4IEBACitTVE9SQUdFIE5FVFdPUktJTkcgSU5EVVNUUlkgQVNTT0NJQVRJT04KK1BVQkxJQyBMSUNFTlNFCitWZXJzaW9uIDEuMSAKK19fX19fX19fX19fX19fX19fX19fX19fXworCisxLiBEZWZpbml0aW9ucy4KKworICAgIDEuMSAiQ29tbWVyY2lhbCBVc2UiIG1lYW5zIGRpc3RyaWJ1dGlvbiBvciBvdGhlcndpc2UgbWFraW5nIHRoZQorICAgIENvdmVyZWQgQ29kZSBhdmFpbGFibGUgdG8gYSB0aGlyZCBwYXJ0eS4KKworICAgIDEuMiAiQ29udHJpYnV0b3IiIG1lYW5zIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0bworICAgIHRoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCisgICAgMS4zICJDb250cmlidXRvciBWZXJzaW9uIiBtZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsCisgICAgQ29kZSwgcHJpb3IgTW9kaWZpY2F0aW9ucyB1c2VkIGJ5IGEgQ29udHJpYnV0b3IsIGFuZCB0aGUKKyAgICBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLgorCisgICAgMS40ICJDb3ZlcmVkIENvZGUiIG1lYW5zIHRoZSBPcmlnaW5hbCBDb2RlIG9yIE1vZGlmaWNhdGlvbnMgb3IgdGhlCisgICAgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIENvZGUgYW5kIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZQorICAgIGluY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mLgorCisgICAgMS41ICJFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20iIG1lYW5zIGEgbWVjaGFuaXNtIGdlbmVyYWxseQorICAgIGFjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yIHRoZSBlbGVjdHJvbmljCisgICAgdHJhbnNmZXIgb2YgZGF0YS4KKworICAgIDEuNiAiRXhlY3V0YWJsZSIgbWVhbnMgQ292ZXJlZCBDb2RlIGluIGFueSBmb3JtIG90aGVyIHRoYW4gU291cmNlCisgICAgQ29kZS4KKworICAgIDEuNyAiSW5pdGlhbCBEZXZlbG9wZXIiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGVudGl0eSBpZGVudGlmaWVkCisgICAgYXMgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIHRoZSBTb3VyY2UgQ29kZSBub3RpY2UgcmVxdWlyZWQgYnkKKyAgICBFeGhpYml0IEEuCisKKyAgICAxLjggIkxhcmdlciBXb3JrIiBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBDb2RlIG9yCisgICAgcG9ydGlvbnMgdGhlcmVvZiB3aXRoIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzCisgICAgTGljZW5zZS4KKworICAgIDEuOSAiTGljZW5zZSIgbWVhbnMgdGhpcyBkb2N1bWVudC4KKworICAgIDEuMTAgIkxpY2Vuc2FibGUiIG1lYW5zIGhhdmluZyB0aGUgcmlnaHQgdG8gZ3JhbnQsIHRvIHRoZSBtYXhpbXVtCisgICAgZXh0ZW50IHBvc3NpYmxlLCB3aGV0aGVyIGF0IHRoZSB0aW1lIG9mIHRoZSBpbml0aWFsIGdyYW50IG9yCisgICAgc3Vic2VxdWVudGx5IGFjcXVpcmVkLCBhbnkgYW5kIGFsbCBvZiB0aGUgcmlnaHRzIGNvbnZleWVkIGhlcmVpbi4KKworICAgIDEuMTEgIk1vZGlmaWNhdGlvbnMiIG1lYW5zIGFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZQorICAgIHN1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZSBPcmlnaW5hbCBDb2RlIG9yIGFueSBwcmV2aW91cworICAgIE1vZGlmaWNhdGlvbnMuIFdoZW4gQ292ZXJlZCBDb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhCisgICAgTW9kaWZpY2F0aW9uIGlzOgorCisgICAgICAgIEEuIEFueSBhZGRpdGlvbiB0byBvciBkZWxldGlvbiBmcm9tIHRoZSBjb250ZW50cyBvZiBhIGZpbGUKKyAgICAgICAgY29udGFpbmluZyBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCisKKyAgICAgICAgQi4gQW55IG5ldyBmaWxlIHRoYXQgY29udGFpbnMgYW55IHBhcnQgb2YgdGhlIE9yaWdpbmFsIENvZGUgb3IKKyAgICAgICAgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4KKworICAgIDEuMTIgIk9yaWdpbmFsIENvZGUiIG1lYW5zIFNvdXJjZSBDb2RlIG9mIGNvbXB1dGVyIHNvZnR3YXJlIGNvZGUKKyAgICB3aGljaCBpcyBkZXNjcmliZWQgaW4gdGhlIFNvdXJjZSBDb2RlIG5vdGljZSByZXF1aXJlZCBieSBFeGhpYml0IEEKKyAgICBhcyBPcmlnaW5hbCBDb2RlLCBhbmQgd2hpY2gsIGF0IHRoZSB0aW1lIG9mIGl0cyByZWxlYXNlIHVuZGVyIHRoaXMKKyAgICBMaWNlbnNlIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzIExpY2Vuc2UuCisKKyAgICAxLjEzICJQYXRlbnQgQ2xhaW1zIiBtZWFucyBhbnkgcGF0ZW50IGNsYWltKHMpLCBub3cgb3duZWQgb3IKKyAgICBoZXJlYWZ0ZXIgYWNxdWlyZWQsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIG1ldGhvZCwgcHJvY2VzcywKKyAgICBhbmQgYXBwYXJhdHVzIGNsYWltcywgaW4gYW55IHBhdGVudCBMaWNlbnNhYmxlIGJ5IGdyYW50b3IuCisKKyAgICAxLjE0ICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSBDb3ZlcmVkIENvZGUgZm9yCisgICAgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cworICAgIGFueSBhc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBzY3JpcHRzIHVzZWQgdG8gY29udHJvbAorICAgIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gRXhlY3V0YWJsZSwgb3Igc291cmNlIGNvZGUKKyAgICBkaWZmZXJlbnRpYWwgY29tcGFyaXNvbnMgYWdhaW5zdCBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW5vdGhlcgorICAgIHdlbGwga25vd24sIGF2YWlsYWJsZSBDb3ZlcmVkIENvZGUgb2YgdGhlIENvbnRyaWJ1dG9yJ3MgY2hvaWNlLiBUaGUKKyAgICBTb3VyY2UgQ29kZSBjYW4gYmUgaW4gYSBjb21wcmVzc2VkIG9yIGFyY2hpdmFsIGZvcm0sIHByb3ZpZGVkIHRoZQorICAgIGFwcHJvcHJpYXRlIGRlY29tcHJlc3Npb24gb3IgZGUtYXJjaGl2aW5nIHNvZnR3YXJlIGlzIHdpZGVseQorICAgIGF2YWlsYWJsZSBmb3Igbm8gY2hhcmdlLgorCisgICAgMS4xNSAiWW91IiAob3IgIllvdXIiKSBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5CisgICAgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLAorICAgIHRoaXMgTGljZW5zZSBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBpc3N1ZWQgdW5kZXIKKyAgICBTZWN0aW9uIDYuMS4gRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoCisgICAgY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IKKyAgICBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBtZWFucyAoYSkgdGhlIHBvd2VyLCBkaXJlY3QKKyAgICBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LAorICAgIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIG1vcmUgdGhhbgorICAgIGZpZnR5IHBlcmNlbnQgKDUwJSkgb2YgdGhlIG91dHN0YW5kaW5nIHNoYXJlcyBvciBiZW5lZmljaWFsCisgICAgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisyLiBTb3VyY2UgQ29kZSBMaWNlbnNlLgorCisgICAgMi4xIFRoZSBJbml0aWFsIERldmVsb3BlciBHcmFudC4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMKKyAgICBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0bworICAgIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXM6CisKKyAgICAgICAgKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yCisgICAgICAgIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBJbml0aWFsIERldmVsb3BlciB0byB1c2UsIHJlcHJvZHVjZSwKKyAgICAgICAgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBPcmlnaW5hbAorICAgICAgICBDb2RlIChvciBwb3J0aW9ucyB0aGVyZW9mKSB3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgYW5kL29yCisgICAgICAgIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisKKyAgICAgICAgKGIpIHVuZGVyIFBhdGVudHMgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZyBvcgorICAgICAgICBzZWxsaW5nIG9mIE9yaWdpbmFsIENvZGUsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBwcmFjdGljZSwKKyAgICAgICAgc2VsbCwgYW5kIG9mZmVyIGZvciBzYWxlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2YgdGhlCisgICAgICAgIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpLgorCisgICAgICAgIChjKSB0aGUgbGljZW5zZXMgZ3JhbnRlZCBpbiB0aGlzIFNlY3Rpb24gMi4xKGEpIGFuZCAoYikgYXJlCisgICAgICAgIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBJbml0aWFsIERldmVsb3BlciBmaXJzdCBkaXN0cmlidXRlcworICAgICAgICBPcmlnaW5hbCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICAgICAgKGQpIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMShiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMKKyAgICAgICAgZ3JhbnRlZDogMSkgZm9yIGNvZGUgdGhhdCBZb3UgZGVsZXRlIGZyb20gdGhlIE9yaWdpbmFsIENvZGU7CisgICAgICAgIDIpIHNlcGFyYXRlIGZyb20gdGhlIE9yaWdpbmFsIENvZGU7IG9yIDMpIGZvciBpbmZyaW5nZW1lbnRzCisgICAgICAgIGNhdXNlZCBieTogaSkgdGhlIG1vZGlmaWNhdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBvciBpaSkgdGhlCisgICAgICAgIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBDb2RlIHdpdGggb3RoZXIgc29mdHdhcmUgb3IgZGV2aWNlcy4KKworICAgIDIuMiBDb250cmlidXRvciBHcmFudC4gU3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkKKyAgICBjbGFpbXMsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLAorICAgIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlCisKKyAgICAgICAgKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yCisgICAgICAgIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBDb250cmlidXRvciwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwKKyAgICAgICAgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucworICAgICAgICBjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbgorICAgICAgICB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIGFzIENvdmVyZWQgQ29kZQorICAgICAgICBhbmQvb3IgYXMgcGFydCBvZiBhIExhcmdlciBXb3JrOyBhbmQKKworICAgICAgICAoYikgdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkgdGhlIG1ha2luZywgdXNpbmcsIG9yCisgICAgICAgIHNlbGxpbmcgb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IgZWl0aGVyIGFsb25lCisgICAgICAgIGFuZC9vciBpbiBjb21iaW5hdGlvbiB3aXRoIGl0cyBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucworICAgICAgICBvZiBzdWNoIGNvbWJpbmF0aW9uKSwgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgaGF2ZQorICAgICAgICBtYWRlLCBhbmQvb3Igb3RoZXJ3aXNlIGRpc3Bvc2Ugb2Y6IDEpIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0CisgICAgICAgIENvbnRyaWJ1dG9yIChvciBwb3J0aW9ucyB0aGVyZW9mKTsgYW5kIDIpIHRoZSBjb21iaW5hdGlvbiBvZgorICAgICAgICBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciB3aXRoIGl0cyBDb250cmlidXRvcgorICAgICAgICBWZXJzaW9uIChvciBwb3J0aW9ucyBvZiBzdWNoIGNvbWJpbmF0aW9uKS4KKworICAgICAgICAoYykgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gU2VjdGlvbnMgMi4yKGEpIGFuZCAyLjIoYikgYXJlCisgICAgICAgIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBDb250cmlidXRvciBmaXJzdCBtYWtlcyBDb21tZXJjaWFsIFVzZSBvZgorICAgICAgICB0aGUgQ292ZXJlZCBDb2RlLgorCisgICAgICAgIChkKSBOb3R3aXRoc3RhbmRpbmcgU2VjdGlvbiAyLjIoYikgYWJvdmUsIG5vIHBhdGVudCBsaWNlbnNlIGlzCisgICAgICAgIGdyYW50ZWQ6IDEpIGZvciBhbnkgY29kZSB0aGF0IENvbnRyaWJ1dG9yIGhhcyBkZWxldGVkIGZyb20gdGhlCisgICAgICAgIENvbnRyaWJ1dG9yIFZlcnNpb247IDIpIHNlcGFyYXRlIGZyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247CisgICAgICAgIDMpIGZvciBpbmZyaW5nZW1lbnRzIGNhdXNlZCBieTogaSkgdGhpcmQgcGFydHkgbW9kaWZpY2F0aW9ucyBvZgorICAgICAgICBDb250cmlidXRvciBWZXJzaW9uIG9yIGlpKSB0aGUgY29tYmluYXRpb24gb2YgTW9kaWZpY2F0aW9ucyBtYWRlCisgICAgICAgIGJ5IHRoYXQgQ29udHJpYnV0b3Igd2l0aCBvdGhlciBzb2Z0d2FyZSAoZXhjZXB0IGFzIHBhcnQgb2YgdGhlCisgICAgICAgIENvbnRyaWJ1dG9yIFZlcnNpb24pIG9yIG90aGVyIGRldmljZXM7IG9yIDQpIHVuZGVyIFBhdGVudCBDbGFpbXMKKyAgICAgICAgaW5mcmluZ2VkIGJ5IENvdmVyZWQgQ29kZSBpbiB0aGUgYWJzZW5jZSBvZiBNb2RpZmljYXRpb25zIG1hZGUKKyAgICAgICAgYnkgdGhhdCBDb250cmlidXRvci4KKworMy4gRGlzdHJpYnV0aW9uIE9ibGlnYXRpb25zLgorCisgICAgMy4xIEFwcGxpY2F0aW9uIG9mIExpY2Vuc2UuIFRoZSBNb2RpZmljYXRpb25zIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8KKyAgICB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwKKyAgICBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIFNlY3Rpb24gMi4yLiBUaGUgU291cmNlIENvZGUgdmVyc2lvbiBvZgorICAgIENvdmVyZWQgQ29kZSBtYXkgYmUgZGlzdHJpYnV0ZWQgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlCisgICAgb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcmVsZWFzZWQgdW5kZXIgU2VjdGlvbiA2LjEsIGFuZAorICAgIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgTGljZW5zZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgdGhlCisgICAgU291cmNlIENvZGUgWW91IGRpc3RyaWJ1dGUuIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24KKyAgICBhbnkgU291cmNlIENvZGUgdmVyc2lvbiB0aGF0IGFsdGVycyBvciByZXN0cmljdHMgdGhlIGFwcGxpY2FibGUKKyAgICB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgcmVjaXBpZW50cycgcmlnaHRzIGhlcmV1bmRlci4KKyAgICBIb3dldmVyLCBZb3UgbWF5IGluY2x1ZGUgYW4gYWRkaXRpb25hbCBkb2N1bWVudCBvZmZlcmluZyB0aGUKKyAgICBhZGRpdGlvbmFsIHJpZ2h0cyBkZXNjcmliZWQgaW4gU2VjdGlvbiAzLjUuCisKKyAgICAzLjIgQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLiBBbnkgTW9kaWZpY2F0aW9uIHdoaWNoIFlvdSBjcmVhdGUKKyAgICBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIGluIFNvdXJjZSBDb2RlCisgICAgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGVpdGhlciBvbiB0aGUgc2FtZSBtZWRpYSBhcyBhbgorICAgIEV4ZWN1dGFibGUgdmVyc2lvbiBvciB2aWEgYW4gYWNjZXB0ZWQgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24KKyAgICBNZWNoYW5pc20gdG8gYW55b25lIHRvIHdob20geW91IG1hZGUgYW4gRXhlY3V0YWJsZSB2ZXJzaW9uCisgICAgYXZhaWxhYmxlOyBhbmQgaWYgbWFkZSBhdmFpbGFibGUgdmlhIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uCisgICAgTWVjaGFuaXNtLCBtdXN0IHJlbWFpbiBhdmFpbGFibGUgZm9yIGF0IGxlYXN0IHR3ZWx2ZSAoMTIpIG1vbnRocworICAgIGFmdGVyIHRoZSBkYXRlIGl0IGluaXRpYWxseSBiZWNhbWUgYXZhaWxhYmxlLCBvciBhdCBsZWFzdCBzaXggKDYpCisgICAgbW9udGhzIGFmdGVyIGEgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoYXQgcGFydGljdWxhciBNb2RpZmljYXRpb24KKyAgICBoYXMgYmVlbiBtYWRlIGF2YWlsYWJsZSB0byBzdWNoIHJlY2lwaWVudHMuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yCisgICAgZW5zdXJpbmcgdGhhdCB0aGUgU291cmNlIENvZGUgdmVyc2lvbiByZW1haW5zIGF2YWlsYWJsZSBldmVuIGlmIHRoZQorICAgIEVsZWN0cm9uaWMgRGlzdHJpYnV0aW9uIE1lY2hhbmlzbSBpcyBtYWludGFpbmVkIGJ5IGEgdGhpcmQgcGFydHkuCisKKyAgICAzLjMgRGVzY3JpcHRpb24gb2YgTW9kaWZpY2F0aW9ucy4gWW91IG11c3QgY2F1c2UgYWxsIENvdmVyZWQgQ29kZSB0bworICAgIHdoaWNoIFlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4gYSBmaWxlIGRvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIFlvdQorICAgIG1hZGUgdG8gY3JlYXRlIHRoYXQgQ292ZXJlZCBDb2RlIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLiBZb3UKKyAgICBtdXN0IGluY2x1ZGUgYSBwcm9taW5lbnQgc3RhdGVtZW50IHRoYXQgdGhlIE1vZGlmaWNhdGlvbiBpcyBkZXJpdmVkLAorICAgIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwgQ29kZSBwcm92aWRlZCBieSB0aGUgSW5pdGlhbAorICAgIERldmVsb3BlciBhbmQgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiAoYSkgdGhlCisgICAgU291cmNlIENvZGUsIGFuZCAoYikgaW4gYW55IG5vdGljZSBpbiBhbiBFeGVjdXRhYmxlIHZlcnNpb24gb3IKKyAgICByZWxhdGVkIGRvY3VtZW50YXRpb24gaW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZSBvcmlnaW4gb3Igb3duZXJzaGlwCisgICAgb2YgdGhlIENvdmVyZWQgQ29kZS4KKworICAgIDMuNCBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVycy4KKworICAgICAgICAoYSkgVGhpcmQgUGFydHkgQ2xhaW1zLiBJZiBDb250cmlidXRvciBoYXMgYWN0dWFsIGtub3dsZWRnZSB0aGF0CisgICAgICAgIGEgbGljZW5zZSB1bmRlciBhIHRoaXJkIHBhcnR5J3MgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBpcworICAgICAgICByZXF1aXJlZCB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaCBDb250cmlidXRvcgorICAgICAgICB1bmRlciBTZWN0aW9ucyAyLjEgb3IgMi4yLCBDb250cmlidXRvciBtdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUKKyAgICAgICAgd2l0aCB0aGUgU291cmNlIENvZGUgZGlzdHJpYnV0aW9uIHRpdGxlZCAiTEVHQUwiIHdoaWNoIGRlc2NyaWJlcworICAgICAgICB0aGUgY2xhaW0gYW5kIHRoZSBwYXJ0eSBtYWtpbmcgdGhlIGNsYWltIGluIHN1ZmZpY2llbnQgZGV0YWlsCisgICAgICAgIHRoYXQgYSByZWNpcGllbnQgd2lsbCBrbm93IHdob20gdG8gY29udGFjdC4gSWYgQ29udHJpYnV0b3IKKyAgICAgICAgb2J0YWlucyBzdWNoIGtub3dsZWRnZSBhZnRlciB0aGUgTW9kaWZpY2F0aW9uIGlzIG1hZGUgYXZhaWxhYmxlCisgICAgICAgIGFzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMiwgQ29udHJpYnV0b3Igc2hhbGwgcHJvbXB0bHkgbW9kaWZ5CisgICAgICAgIHRoZSBMRUdBTCBmaWxlIGluIGFsbCBjb3BpZXMgQ29udHJpYnV0b3IgbWFrZXMgYXZhaWxhYmxlCisgICAgICAgIHRoZXJlYWZ0ZXIuCisKKyAgICAgICAgKGIpIENvbnRyaWJ1dG9yIEFQSSdzLiBJZiBDb250cmlidXRvcidzIE1vZGlmaWNhdGlvbnMgaW5jbHVkZSBhbgorICAgICAgICBhcHBsaWNhdGlvbiBwcm9ncmFtbWluZyBpbnRlcmZhY2UgYW5kIENvbnRyaWJ1dG9yIGhhcyBhY3R1YWwKKyAgICAgICAga25vd2xlZGdlIG9mIHBhdGVudCBsaWNlbnNlcyB3aGljaCBhcmUgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8KKyAgICAgICAgaW1wbGVtZW50IHRoYXQgQVBJLCBDb250cmlidXRvciBtdXN0IGFsc28gaW5jbHVkZSB0aGlzCisgICAgICAgIGluZm9ybWF0aW9uIGluIHRoZSBMRUdBTCBmaWxlLgorCisgICAgICAgIChjKSBSZXByZXNlbnRhdGlvbnMuIENvbnRyaWJ1dG9yIHJlcHJlc2VudHMgdGhhdCwgZXhjZXB0IGFzCisgICAgICAgIGRpc2Nsb3NlZCBwdXJzdWFudCB0byBTZWN0aW9uIDMuNChhKSBhYm92ZSwgQ29udHJpYnV0b3IgYmVsaWV2ZXMKKyAgICAgICAgdGhhdCBDb250cmlidXRvcidzIE1vZGlmaWNhdGlvbnMgYXJlIENvbnRyaWJ1dG9yJ3Mgb3JpZ2luYWwKKyAgICAgICAgY3JlYXRpb24ocykgYW5kL29yIENvbnRyaWJ1dG9yIGhhcyBzdWZmaWNpZW50IHJpZ2h0cyB0byBncmFudAorICAgICAgICB0aGUgcmlnaHRzIGNvbnZleWVkIGJ5IHRoaXMgTGljZW5zZS4KKworICAgIDMuNSBSZXF1aXJlZCBOb3RpY2VzLiBZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiBFeGhpYml0IEEgaW4KKyAgICBlYWNoIGZpbGUgb2YgdGhlIFNvdXJjZSBDb2RlLiBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHN1Y2gKKyAgICBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUgZHVlIHRvIGl0cyBzdHJ1Y3R1cmUsIHRoZW4KKyAgICBZb3UgbXVzdCBpbmNsdWRlIHN1Y2ggbm90aWNlIGluIGEgbG9jYXRpb24gKHN1Y2ggYXMgYSByZWxldmFudAorICAgIGRpcmVjdG9yeSkgd2hlcmUgYSB1c2VyIHdvdWxkIGJlIG1vc3QgbGlrZWx5IHRvIGxvb2sgZm9yIHN1Y2ggYQorICAgIG5vdGljZS4gSWYgWW91IGNyZWF0ZWQgb25lIG9yIG1vcmUgTW9kaWZpY2F0aW9uKHMpIFlvdSBtYXkgYWRkIHlvdXIKKyAgICBuYW1lIGFzIGEgQ29udHJpYnV0b3IgdG8gdGhlIG5vdGljZSBkZXNjcmliZWQgaW4gRXhoaWJpdCBBLiBZb3UgbXVzdAorICAgIGFsc28gZHVwbGljYXRlIHRoaXMgTGljZW5zZSBpbiBhbnkgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIFNvdXJjZSBDb2RlCisgICAgd2hlcmUgWW91IGRlc2NyaWJlIHJlY2lwaWVudHMnIHJpZ2h0cyBvciBvd25lcnNoaXAgcmlnaHRzIHJlbGF0aW5nCisgICAgdG8gQ292ZXJlZCBDb2RlLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZSBmb3IsCisgICAgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUKKyAgICByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duCisgICAgYmVoYWxmLCBhbmQgbm90IG9uIGJlaGFsZiBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55CisgICAgQ29udHJpYnV0b3IuIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSBzdWNoCisgICAgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5CisgICAgWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyCisgICAgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IChleGNsdWRpbmcgYW55IGxpYWJpbGl0eQorICAgIGFyaXNpbmcgZnJvbSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zIHJlbGF0aW5nIHRvIHRoZSBDb3ZlcmVkCisgICAgQ29kZSkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYQorICAgIHJlc3VsdCBvZiB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSB0ZXJtcyBZb3Ugb2ZmZXIuCisKKyAgICAzLjYgRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgVmVyc2lvbnMuIFlvdSBtYXkgZGlzdHJpYnV0ZSBDb3ZlcmVkCisgICAgQ29kZSBpbiBFeGVjdXRhYmxlIGZvcm0gb25seSBpZiB0aGUgcmVxdWlyZW1lbnRzIG9mIFNlY3Rpb24gMy4xLTMuNQorICAgIGhhdmUgYmVlbiBtZXQgZm9yIHRoYXQgQ292ZXJlZCBDb2RlLCBhbmQgaWYgWW91IGluY2x1ZGUgYSBub3RpY2UKKyAgICBzdGF0aW5nIHRoYXQgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgdGhlIENvdmVyZWQgQ29kZSBpcworICAgIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgYSBkZXNjcmlwdGlvbgorICAgIG9mIGhvdyBhbmQgd2hlcmUgWW91IGhhdmUgZnVsZmlsbGVkIHRoZSBvYmxpZ2F0aW9uIG9mIFNlY3Rpb24gMy4yLgorICAgIFRoZSBub3RpY2UgbXVzdCBiZSBjb25zcGljdW91c2x5IGluY2x1ZGVkIGluIGFueSBub3RpY2UgaW4gYW4KKyAgICBFeGVjdXRhYmxlIHZlcnNpb24sIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBvciBjb2xsYXRlcmFsIGluIHdoaWNoIFlvdQorICAgIGRlc2NyaWJlIHJlY2lwaWVudHMnIHJpZ2h0cyByZWxhdGluZyB0byB0aGUgQ292ZXJlZCBDb2RlLiBZb3UgbWF5CisgICAgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBvciBvd25lcnNoaXAKKyAgICByaWdodHMgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCB3aGljaCBtYXkgY29udGFpbiB0ZXJtcworICAgIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgdGhhdCBZb3UgYXJlIGluIGNvbXBsaWFuY2UKKyAgICB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIHRoYXQgdGhlIGxpY2Vuc2UgZm9yIHRoZQorICAgIEV4ZWN1dGFibGUgdmVyc2lvbiBkb2VzIG5vdCBhdHRlbXB0IHRvIGxpbWl0IG9yIGFsdGVyIHRoZQorICAgIHJlY2lwaWVudCdzIHJpZ2h0cyBpbiB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBmcm9tIHRoZSByaWdodHMgc2V0CisgICAgZm9ydGggaW4gdGhpcyBMaWNlbnNlLiBJZiBZb3UgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uCisgICAgdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkKKyAgICB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBub3QKKyAgICBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgaGVyZWJ5IGFncmVlIHRvCisgICAgaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueQorICAgIGxpYWJpbGl0eSAoZXhjbHVkaW5nIGFueSBsaWFiaWxpdHkgYXJpc2luZyBmcm9tIGludGVsbGVjdHVhbAorICAgIHByb3BlcnR5IGNsYWltcyByZWxhdGluZyB0byB0aGUgQ292ZXJlZCBDb2RlKSBpbmN1cnJlZCBieSB0aGUKKyAgICBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIGFueSBzdWNoIHRlcm1zCisgICAgWW91IG9mZmVyLgorCisgICAgMy43IExhcmdlciBXb3Jrcy4gWW91IG1heSBjcmVhdGUgYSBMYXJnZXIgV29yayBieSBjb21iaW5pbmcgQ292ZXJlZAorICAgIENvZGUgd2l0aCBvdGhlciBjb2RlIG5vdCBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZAorICAgIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCBZb3UKKyAgICBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvcgorICAgIHRoZSBDb3ZlcmVkIENvZGUuCisKKzQuIEluYWJpbGl0eSB0byBDb21wbHkgRHVlIHRvIFN0YXR1dGUgb3IgUmVndWxhdGlvbi4gSWYgaXQgaXMgaW1wb3NzaWJsZQorZm9yIFlvdSB0byBjb21wbHkgd2l0aCBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB3aXRoIHJlc3BlY3QgdG8KK3NvbWUgb3IgYWxsIG9mIHRoZSBDb3ZlcmVkIENvZGUgZHVlIHRvIHN0YXR1dGUsIGp1ZGljaWFsIG9yZGVyLCBvcgorcmVndWxhdGlvbiB0aGVuIFlvdSBtdXN0OiAoYSkgY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSB0bwordGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlOyBhbmQgKGIpIGRlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQgdGhlCitjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMIGZpbGUKK2Rlc2NyaWJlZCBpbiBTZWN0aW9uIDMuNCBhbmQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGFsbCBkaXN0cmlidXRpb25zIG9mCit0aGUgU291cmNlIENvZGUuIEV4Y2VwdCB0byB0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkgc3RhdHV0ZSBvcgorcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIHN1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYQorcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvIGJlIGFibGUgdG8gdW5kZXJzdGFuZCBpdC4KKworNS4gQXBwbGljYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBjb2RlIHRvIHdoaWNoCit0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaGFzIGF0dGFjaGVkIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGFuZCB0bworcmVsYXRlZCBDb3ZlcmVkIENvZGUuCisKKzYuIFZlcnNpb25zIG9mIHRoZSBMaWNlbnNlLgorCisgICAgNi4xIE5ldyBWZXJzaW9ucy4gVGhlIFN0b3JhZ2UgTmV0d29ya2luZyBJbmR1c3RyeSBBc3NvY2lhdGlvbiAodGhlCisgICAgIlNOSUEiKSBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UgZnJvbQorICAgIHRpbWUgdG8gdGltZS4gRWFjaCB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uCisgICAgbnVtYmVyLgorCisgICAgNi4yIEVmZmVjdCBvZiBOZXcgVmVyc2lvbnMuIE9uY2UgQ292ZXJlZCBDb2RlIGhhcyBiZWVuIHB1Ymxpc2hlZAorICAgIHVuZGVyIGEgcGFydGljdWxhciB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlLCBZb3UgbWF5IGFsd2F5cyBjb250aW51ZQorICAgIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UgbWF5IGFsc28gY2hvb3NlIHRvCisgICAgdXNlIHN1Y2ggQ292ZXJlZCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mCisgICAgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IHRoZSBTTklBLiBObyBvbmUgb3RoZXIgdGhhbiB0aGUgU05JQSBoYXMKKyAgICB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcyBhcHBsaWNhYmxlIHRvIENvdmVyZWQgQ29kZSBjcmVhdGVkCisgICAgdW5kZXIgdGhpcyBMaWNlbnNlLgorCisgICAgNi4zIERlcml2YXRpdmUgV29ya3MuIElmIFlvdSBjcmVhdGUgb3IgdXNlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZgorICAgIHRoaXMgTGljZW5zZSAod2hpY2ggeW91IG1heSBvbmx5IGRvIGluIG9yZGVyIHRvIGFwcGx5IGl0IHRvIGNvZGUKKyAgICB3aGljaCBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlKSwgWW91CisgICAgbXVzdCAoYSkgcmVuYW1lIFlvdXIgbGljZW5zZSBzbyB0aGF0IHRoZSBwaHJhc2VzICJTdG9yYWdlIE5ldHdvcmtpbmcKKyAgICBJbmR1c3RyeSBBc3NvY2lhdGlvbiwiICJTTklBLCIgb3IgYW55IGNvbmZ1c2luZ2x5IHNpbWlsYXIgcGhyYXNlIGRvCisgICAgbm90IGFwcGVhciBpbiB5b3VyIGxpY2Vuc2UgKGV4Y2VwdCB0byBub3RlIHRoYXQgeW91ciBsaWNlbnNlIGRpZmZlcnMKKyAgICBmcm9tIHRoaXMgTGljZW5zZSkgYW5kIChiKSBvdGhlcndpc2UgbWFrZSBpdCBjbGVhciB0aGF0IFlvdXIgdmVyc2lvbgorICAgIG9mIHRoZSBsaWNlbnNlIGNvbnRhaW5zIHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoZSBTTklBIFB1YmxpYworICAgIExpY2Vuc2UuIChGaWxsaW5nIGluIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciwgT3JpZ2luYWwKKyAgICBDb2RlIG9yIENvbnRyaWJ1dG9yIGluIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQSBzaGFsbCBub3QKKyAgICBvZiB0aGVtc2VsdmVzIGJlIGRlZW1lZCB0byBiZSBtb2RpZmljYXRpb25zIG9mIHRoaXMgTGljZW5zZS4pCisKKzcuIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkuIENPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UKK09OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IKK0lNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIENPVkVSRUQgQ09ERQorSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IKK05PTi1JTkZSSU5HSU5HLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRQorQ09WRVJFRCBDT0RFIElTIFdJVEggWU9VLiBTSE9VTEQgQU5ZIENPVkVSRUQgQ09ERSBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZCitSRVNQRUNULCBZT1UgKE5PVCBUSEUgSU5JVElBTCBERVZFTE9QRVIgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUKK1RIRSBDT1NUIE9GIEFOWSBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4gVEhJUworRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuIE5PCitVU0UgT0YgQU5ZIENPVkVSRUQgQ09ERSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUworRElTQ0xBSU1FUi4KKworOC4gVEVSTUlOQVRJT04uIAorCisgICAgOC4xIFRoaXMgTGljZW5zZSBhbmQgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmV1bmRlciB3aWxsIHRlcm1pbmF0ZQorICAgIGF1dG9tYXRpY2FsbHkgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvCisgICAgY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gYSByZWFzb25hYmxlIHRpbWUgYWZ0ZXIgYmVjb21pbmcgYXdhcmUgb2YKKyAgICB0aGUgYnJlYWNoLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaCBhcmUgcHJvcGVybHkKKyAgICBncmFudGVkIHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gUHJvdmlzaW9ucworICAgIHdoaWNoLCBieSB0aGVpciBuYXR1cmUsIG11c3QgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uCisgICAgb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUuCisKKyAgICA4LjIgSWYgWW91IGluaXRpYXRlIGxpdGlnYXRpb24gYnkgYXNzZXJ0aW5nIGEgcGF0ZW50IGluZnJpbmdlbWVudAorICAgIGNsYWltIChleGNsdWRpbmcgZGVjbGFyYXRvcnkganVkZ21lbnQgYWN0aW9ucykgYWdhaW5zdCBJbml0aWFsCisgICAgRGV2ZWxvcGVyIG9yIGEgQ29udHJpYnV0b3IgKHRoZSBJbml0aWFsIERldmVsb3BlciBvciBDb250cmlidXRvcgorICAgIGFnYWluc3Qgd2hvbSBZb3UgZmlsZSBzdWNoIGFjdGlvbiBpcyByZWZlcnJlZCB0byBhcyAiUGFydGljaXBhbnQiKQorICAgIGFsbGVnaW5nIHRoYXQ6CisKKyAgICAgICAgKGEpIHN1Y2ggUGFydGljaXBhbnQncyBDb250cmlidXRvciBWZXJzaW9uIGRpcmVjdGx5IG9yCisgICAgICAgIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gYW55IGFuZCBhbGwgcmlnaHRzIGdyYW50ZWQKKyAgICAgICAgYnkgc3VjaCBQYXJ0aWNpcGFudCB0byBZb3UgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgb2YgdGhpcworICAgICAgICBMaWNlbnNlIHNoYWxsLCB1cG9uIDYwIGRheXMgbm90aWNlIGZyb20gUGFydGljaXBhbnQgdGVybWluYXRlCisgICAgICAgIHByb3NwZWN0aXZlbHksIHVubGVzcyBpZiB3aXRoaW4gNjAgZGF5cyBhZnRlciByZWNlaXB0IG9mIG5vdGljZQorICAgICAgICBZb3UgZWl0aGVyOiAoaSkgYWdyZWUgaW4gd3JpdGluZyB0byBwYXkgUGFydGljaXBhbnQgYSBtdXR1YWxseQorICAgICAgICBhZ3JlZWFibGUgcmVhc29uYWJsZSByb3lhbHR5IGZvciBZb3VyIHBhc3QgYW5kIGZ1dHVyZSB1c2Ugb2YKKyAgICAgICAgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHN1Y2ggUGFydGljaXBhbnQsIG9yIChpaSkgd2l0aGRyYXcgWW91cgorICAgICAgICBsaXRpZ2F0aW9uIGNsYWltIHdpdGggcmVzcGVjdCB0byB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiBhZ2FpbnN0CisgICAgICAgIHN1Y2ggUGFydGljaXBhbnQuIElmIHdpdGhpbiA2MCBkYXlzIG9mIG5vdGljZSwgYSByZWFzb25hYmxlCisgICAgICAgIHJveWFsdHkgYW5kIHBheW1lbnQgYXJyYW5nZW1lbnQgYXJlIG5vdCBtdXR1YWxseSBhZ3JlZWQgdXBvbiBpbgorICAgICAgICB3cml0aW5nIGJ5IHRoZSBwYXJ0aWVzIG9yIHRoZSBsaXRpZ2F0aW9uIGNsYWltIGlzIG5vdCB3aXRoZHJhd24sCisgICAgICAgIHRoZSByaWdodHMgZ3JhbnRlZCBieSBQYXJ0aWNpcGFudCB0byBZb3UgdW5kZXIgU2VjdGlvbnMgMi4xCisgICAgICAgIGFuZC9vciAyLjIgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgYXQgdGhlIGV4cGlyYXRpb24gb2YgdGhlIDYwCisgICAgICAgIGRheSBub3RpY2UgcGVyaW9kIHNwZWNpZmllZCBhYm92ZS4KKworICAgIDguMyBJZiBZb3UgYXNzZXJ0IGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSBhZ2FpbnN0IFBhcnRpY2lwYW50CisgICAgYWxsZWdpbmcgdGhhdCBzdWNoIFBhcnRpY2lwYW50J3MgQ29udHJpYnV0b3IgVmVyc2lvbiBkaXJlY3RseSBvcgorICAgIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQgd2hlcmUgc3VjaCBjbGFpbSBpcyByZXNvbHZlZCAoc3VjaAorICAgIGFzIGJ5IGxpY2Vuc2Ugb3Igc2V0dGxlbWVudCkgcHJpb3IgdG8gdGhlIGluaXRpYXRpb24gb2YgcGF0ZW50CisgICAgaW5mcmluZ2VtZW50IGxpdGlnYXRpb24sIHRoZW4gdGhlIHJlYXNvbmFibGUgdmFsdWUgb2YgdGhlIGxpY2Vuc2VzCisgICAgZ3JhbnRlZCBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMSBvciAyLjIgc2hhbGwgYmUgdGFrZW4KKyAgICBpbnRvIGFjY291bnQgaW4gZGV0ZXJtaW5pbmcgdGhlIGFtb3VudCBvciB2YWx1ZSBvZiBhbnkgcGF5bWVudCBvcgorICAgIGxpY2Vuc2UuCisKKyAgICA4LjQgSW4gdGhlIGV2ZW50IG9mIHRlcm1pbmF0aW9uIHVuZGVyIFNlY3Rpb25zIDguMSBvciA4LjIgYWJvdmUsIGFsbAorICAgIGVuZCB1c2VyIGxpY2Vuc2UgYWdyZWVtZW50cyAoZXhjbHVkaW5nIGRpc3RyaWJ1dG9ycyBhbmQgcmVzZWxsZXJzKQorICAgIHdoaWNoIGhhdmUgYmVlbiB2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIGFueSBkaXN0cmlidXRvciBoZXJldW5kZXIKKyAgICBwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlIHRlcm1pbmF0aW9uLgorCis5LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS4gVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwKK1RIRU9SWSwgV0hFVEhFUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIENPTlRSQUNULCBPUiBPVEhFUldJU0UsCitTSEFMTCBZT1UsIFRIRSBJTklUSUFMIERFVkVMT1BFUiwgQU5ZIE9USEVSIENPTlRSSUJVVE9SLCBPUiBBTlkKK0RJU1RSSUJVVE9SIE9GIENPVkVSRUQgQ09ERSwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsIEJFCitMSUFCTEUgVE8gQU5ZIFBFUlNPTiBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBDSEFSQUNURVIgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sCitEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SCitNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRgorU1VDSCBQQVJUWSBTSEFMTCBIQVZFIEJFRU4gSU5GT1JNRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KK1RISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IKK1BFUlNPTkFMIElOSlVSWSBSRVNVTFRJTkcgRlJPTSBTVUNIIFBBUlRZJ1MgTkVHTElHRU5DRSBUTyBUSEUgRVhURU5UCitBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMgU1VDSCBMSU1JVEFUSU9OLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UCitBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTLCBTTyBUSElTIEVYQ0xVU0lPTiBBTkQgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworMTAuIFUuUy4gR09WRVJOTUVOVCBFTkQgVVNFUlMuIFRoZSBDb3ZlcmVkIENvZGUgaXMgYSAiY29tbWVyY2lhbCBpdGVtLCIKK2FzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluIDQ4IEMuRi5SLiAyLjEwMSAoT2N0LiAxOTk1KSwgY29uc2lzdGluZyBvZgorImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUiIGFuZCAiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZQorZG9jdW1lbnRhdGlvbiwiIGFzIHN1Y2ggdGVybXMgYXJlIHVzZWQgaW4gNDggQy5GLlIuIDEyLjIxMiAoU2VwdC4gMTk5NSkuCitDb25zaXN0ZW50IHdpdGggNDggQy5GLlIuIDEyLjIxMiBhbmQgNDggQy5GLlIuIDIyNy43MjAyLTEgdGhyb3VnaAorMjI3LjcyMDItNCAoSnVuZSAxOTk1KSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkCitDb2RlIHdpdGggb25seSB0aG9zZSByaWdodHMgc2V0IGZvcnRoIGhlcmVpbi4KKworMTEuIE1JU0NFTExBTkVPVVMgVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudAorY29uY2VybmluZyBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIGlzCitoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlCitleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZAorYnkgQ2FsaWZvcm5pYSBsYXcgcHJvdmlzaW9ucyAoZXhjZXB0IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcsIGlmCithbnksIHByb3ZpZGVzIG90aGVyd2lzZSksIGV4Y2x1ZGluZyBpdHMgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMuIFRoZQorYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUKK0ludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuIEFueSBsYXcgb3IgcmVndWxhdGlvbgord2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQKK2FnYWluc3QgdGhlIGRyYWZ0ZXIgc2hhbGwgbm90IGFwcGx5IHRvIHRoaXMgTGljZW5zZS4KKworMTIuIFJFU1BPTlNJQklMSVRZIEZPUiBDTEFJTVMuIEFzIGJldHdlZW4gSW5pdGlhbCBEZXZlbG9wZXIgYW5kIHRoZQorQ29udHJpYnV0b3JzLCBlYWNoIHBhcnR5IGlzIHJlc3BvbnNpYmxlIGZvciBjbGFpbXMgYW5kIGRhbWFnZXMgYXJpc2luZywKK2RpcmVjdGx5IG9yIGluZGlyZWN0bHksIG91dCBvZiBpdHMgdXRpbGl6YXRpb24gb2YgcmlnaHRzIHVuZGVyIHRoaXMKK0xpY2Vuc2UgYW5kIFlvdSBhZ3JlZSB0byB3b3JrIHdpdGggSW5pdGlhbCBEZXZlbG9wZXIgYW5kIENvbnRyaWJ1dG9ycyB0bworZGlzdHJpYnV0ZSBzdWNoIHJlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcy4gTm90aGluZyBoZXJlaW4gaXMKK2ludGVuZGVkIG9yIHNoYWxsIGJlIGRlZW1lZCB0byBjb25zdGl0dXRlIGFueSBhZG1pc3Npb24gb2YgbGlhYmlsaXR5LgorCisxMy4gTVVMVElQTEUtTElDRU5TRUQgQ09ERS4gSW5pdGlhbCBEZXZlbG9wZXIgbWF5IGRlc2lnbmF0ZSBwb3J0aW9ucyBvZgordGhlIENvdmVyZWQgQ29kZSBhcyAiTXVsdGlwbGUtTGljZW5zZWQiLiAiTXVsdGlwbGUtTGljZW5zZWQiIG1lYW5zIHRoYXQKK3RoZSBJbml0aWFsIERldmVsb3BlciBwZXJtaXRzIHlvdSB0byB1dGlsaXplIHBvcnRpb25zIG9mIHRoZSBDb3ZlcmVkCitDb2RlIHVuZGVyIFlvdXIgY2hvaWNlIG9mIHRoaXMgTGljZW5zZSBvciB0aGUgYWx0ZXJuYXRpdmUgbGljZW5zZXMsIGlmCithbnksIHNwZWNpZmllZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4gdGhlIGZpbGUgZGVzY3JpYmVkIGluCitFeGhpYml0IEEuCisKKzE0LiBBQ0NFUFRBTkNFLiBUaGlzIExpY2Vuc2UgaXMgYWNjZXB0ZWQgYnkgWW91IGlmIFlvdSByZXRhaW4sIHVzZSwgb3IKK2Rpc3RyaWJ1dGUgdGhlIENvdmVyZWQgQ29kZSBmb3IgYW55IHB1cnBvc2UuCisKK0VYSElCSVQgQSAtIFRoZSBTTklBIFB1YmxpYyBMaWNlbnNlLgorCitUaGUgY29udGVudHMgb2YgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSBTTklBIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24KKzEuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aAordGhlIExpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCisvaHR0cDovL3d3dy5zbmlhLm9yZy9FbmdsaXNoL1Jlc291cmNlcy9Db2RlL09wZW5Tb3VyY2UuaHRtbAorCitTb2Z0d2FyZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBvbiBhbiAiQVMgSVMiCitiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZQorTGljZW5zZSBmb3IgdGhlIHNwZWNpZmljIGxhbmd1YWdlIGdvdmVybmluZyByaWdodHMgYW5kIGxpbWl0YXRpb25zIHVuZGVyCit0aGUgTGljZW5zZS4KKworVGhlIE9yaWdpbmFsIENvZGUgaXMgLgorCitUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMgW0NPTVBMRVRFIFRISVNdIC4KKworQ29udHJpYnV0b3Iocyk6IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvU05OUy00LjIgYi9saWNlbnNlcy9TTk5TLTQuMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTk2YzU4Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvU05OUy00LjIKQEAgLTAsMCArMSwxMjQgQEAKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwlTTk5TIExpY2Vuc2UgQWdyZWVtZW50IFJlYWRtZSBGaWxlIGZvciBTTk5TIHZlcnNpb24gNC4yCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1NOTlMgIGlzIChDb3B5cmlnaHQpIDE5OTAtOTUgIFVuaXZlcnNpdHkgb2YgU3R1dHRnYXJ0LCAgSW5zdGl0dXRlICBmb3IKK1BhcmFsbGVsICAgYW5kICAgRGlzdHJpYnV0ZWQgICBIaWdoICAgUGVyZm9ybWFuY2UgICBTeXN0ZW1zICAgIChJUFZSKSwKK0JyZWl0d2llc2Vuc3RyLiAyMC0yMiwgIEQtNzA1NjUgU3R1dHRnYXJ0LCAgRmVkLiAgUmVwLiAgb2YgR2VybWFueSBhbmQgCisoQ29weXJpZ2h0KSAgMTk5Ni05OCAgIFVuaXZlcnNpdHkgIG9mICAgVHVlYmluZ2VuLCAgIFdpbGhlbG0tU2NoaWNrYXJkIAorSW5zdGl0dXRlIGZvciBDb21wdXRlciBTY2llbmNlLCBLb2VzdGxpbnN0ci4gNiwgRC03MjA3NCBUdWViaW5nZW4uCisKK1NOTlMgaXMgZGlzdHJpYnV0ZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YgVHVlYmluZ2VuICBhcyBgRnJlZSBTb2Z0d2FyZScgCitpbiBhIGxpY2Vuc2luZyBhZ3JlZW1lbnQgc2ltaWxhciBpbiBzb21lICBhc3BlY3RzICB0byAgdGhlIEdOVSBHZW5lcmFsCitQdWJsaWMgTGljZW5zZS4gIFRoZXJlIGFyZSBhIG51bWJlciBvZiBpbXBvcnRhbnQgZGlmZmVyZW5jZXMsIGhvd2V2ZXIsCityZWdhcmRpbmcgIG1vZGlmaWNhdGlvbnMgYW5kIGRpc3RyaWJ1dGlvbiBvZiAgU05OUyB0byAgdGhpcmQgIHBhcnRpZXMuCitOb3RlIGFsc28gdGhhdCBTTk5TIGlzIG5vdCBwYXJ0IG9mIHRoZSAgR05VIHNvZnR3YXJlIG5vciBpcyBhbnkgb2YgaXRzCithdXRob3JzIGNvbm5lY3RlZCB3aXRoIHRoZSBGcmVlICBTb2Z0d2FyZSAgRm91bmRhdGlvbi4gV2UgIG9ubHkgIHNoYXJlCitzb21lIGNvbW1vbiBiZWxpZWZzIGFib3V0ICBzb2Z0d2FyZSBkaXN0cmlidXRpb24uICBOb3RlICBmdXJ0aGVyICB0aGF0CitTTk5TIGlzIE5PVCBQVUJMSUMgRE9NQUlOLgorCitUaGUgU05OUyBMaWNlbnNlIGlzIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSBmcmVlZG9tIHRvCitnaXZlIGF3YXkgdmVyYmF0aW0gY29waWVzIG9mIFNOTlMsIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuCitnZXQgaXQgaWYgIHlvdSB3YW50ICBpdCBhbmQgdGhhdCB5b3UgIGNhbiBjaGFuZ2UgdGhlIHNvZnR3YXJlIGZvciB5b3VyCitwZXJzb25hbCB1c2U7IGFuZCB0aGF0IHlvdSBrbm93IHlvdSBjYW4gZG8gdGhlc2UgdGhpbmdzLgorCitXZSAgcHJvdGVjdCAgeW91ciAgYW5kICBvdXIgcmlnaHRzICB3aXRoICB0d28gc3RlcHM6ICgxKSBjb3B5cmlnaHQgdGhlCitzb2Z0d2FyZSwgIGFuZCAgKDIpIG9mZmVyICB5b3UgdGhpcyAgbGljZW5zZSAgd2hpY2ggIGdpdmVzICB5b3UgIGxlZ2FsCitwZXJtaXNzaW9uIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIHVubW9kaWZpZWQgc29mdHdhcmUgb3IgbW9kaWZ5IGl0Citmb3IgeW91ciBvd24gcHVycG9zZS4KKworSW4gY29udHJhc3QgdG8gdGhlIEdOVSBsaWNlbnNlIHdlIGRvIG5vdCBhbGxvdyAgbW9kaWZpZWQgY29waWVzIG9mIG91cgorc29mdHdhcmUgIHRvICBiZSAgZGlzdHJpYnV0ZWQuICBZb3UgIG1heSwgIGhvd2V2ZXIsICAgZGlzdHJpYnV0ZSAgeW91cgorbW9kaWZpY2F0aW9ucyAgYXMgc2VwYXJhdGUgIGZpbGVzIChlLmcuIHBhdGNoIGZpbGVzKSAgYWxvbmcgIHdpdGggIG91cgordW5tb2RpZmllZCBTTk5TICBzb2Z0d2FyZS4gV2UgIGVuY291cmFnZSB1c2VycyAgdG8gIHNlbmQgIGNoYW5nZXMgIGFuZAoraW1wcm92ZW1lbnRzICB3aGljaCB3b3VsZCAgYmVuZWZpdCBtYW55IG90aGVyIHVzZXJzIHRvIHVzICBzbyB0aGF0IGFsbAordXNlcnMgICBtYXkgIHJlY2VpdmUgIHRoZXNlICBpbXByb3ZlbWVudHMgIGluICBhICBsYXRlciAgdmVyc2lvbi4gIFRoZQorcmVzdHJpY3Rpb24gIG5vdCAgdG8gZGlzdHJpYnV0ZSAgbW9kaWZpZWQgIGNvcGllcyAgaXMgIGFsc28gdXNlZnVsICB0bworcHJldmVudCBidWcgcmVwb3J0cyBmcm9tIHNvbWVvbmUgZWxzZSdzIG1vZGlmaWNhdGlvbnMuCisKK0Fsc28sICBmb3IgIG91ciAgcHJvdGVjdGlvbiwgIHdlICB3YW50IHRvIG1ha2UgIGNlcnRhaW4gIHRoYXQgZXZlcnlvbmUKK3VuZGVyc3RhbmRzICB0aGF0ICB0aGVyZSAgaXMgIE5PICBXQVJSQU5UWSAgT0YgQU5ZIEtJTkQgIGZvciB0aGUgIFNOTlMKK3NvZnR3YXJlLgorCitJZiB5b3UgaGF2ZSAgYW55ICBxdWVzdGlvbnMgcmVnYXJkaW5nIHRoaXMgIGxpY2Vuc2UgIGFncmVlbWVudCwgcGxlYXNlCitjb250YWN0IEFuZHJlYXMgWmVsbCBhdCB6ZWxsQGluZm9ybWF0aWsudW5pLXR1ZWJpbmdlbi5kZQorCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwlTTk5TIExpY2Vuc2UgQWdyZWVtZW50CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKKzEuICBUaGlzICBMaWNlbnNlICBBZ3JlZW1lbnQgIGFwcGxpZXMgIHRvICB0aGUgU05OUyAgcHJvZ3JhbSAgYW5kICBhbGwKK2FjY29tcGFueWluZyAgcHJvZ3JhbXMgYW5kICBmaWxlcyB0aGF0IGFyZSAgZGlzdHJpYnV0ZWQgd2l0aCAgYSBub3RpY2UKK3BsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciAgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUKK3Rlcm1zIG9mICB0aGUgU05OUyAgTGljZW5zZS4gIGBgU05OUycnLCAgYmVsb3csICByZWZlcnMgIHRvICBhbnkgIHN1Y2gKK3Byb2dyYW0gb3Igd29yaywgYW5kIGEgYGB3b3JrIGJhc2VkIG9uIFNOTlMnJyBtZWFucyBlaXRoZXIgU05OUyBvciBhbnkKK3dvcmsgY29udGFpbmluZyBTTk5TICBvciBhICBwb3J0aW9uICBvZiBpdCwgIGVpdGhlciAgdmVyYmF0aW0gb3IgIHdpdGgKK21vZGlmaWNhdGlvbnMuICBFYWNoIGxpY2Vuc2VlIGlzIGFkZHJlc3NlZCBhcyBgYHlvdScnLgorCisyLiAgWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyAgb2YgU05OUydzIHNvdXJjZSBjb2RlCithcyB5b3UgcmVjZWl2ZSBpdCwgIGluIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoYXQgeW91IGNvbnNwaWN1b3VzbHkgYW5kCithcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kCitkaXNjbGFpbWVyIG9mIHdhcnJhbnR5OyBrZWVwIGludGFjdCBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzCitMaWNlbnNlICBhbmQgIHRvICB0aGUgYWJzZW5jZSAgb2YgIGFueSAgd2FycmFudHk7IGFuZCAgZ2l2ZSBhbnkgIG90aGVyCityZWNpcGllbnRzIG9mIFNOTlMgYSBjb3B5IG9mIHRoaXMgbGljZW5zZSBhbG9uZyB3aXRoIFNOTlMuCisKKzMuIFlvdSAgbWF5IG1vZGlmeSAgeW91ciBjb3B5IG9yIGNvcGllcyBvZiAgU05OUyBvciAgYW55IHBvcnRpb24gb2YgaXQKK29ubHkgZm9yIHlvdXIgb3duIHVzZS4gWW91ICBtYXkgbm90IGRpc3RyaWJ1dGUgbW9kaWZpZWQgY29waWVzIG9mIFNOTlMKK1lvdSBtYXksICBob3dldmVyLCBkaXN0cmlidXRlIHlvdXIgbW9kaWZpY2F0aW9ucyBhcyBzZXBhcmF0ZSBmaWxlcyAoZS4KK3BhdGNoICBmaWxlcykgIGFsb25nICB3aXRoICB0aGUgIHVubW9kaWZpZWQgIFNOTlMgIHNvZnR3YXJlLiAgV2UgIGFsc28KK2VuY291cmFnZSB1c2VycyB0byAgc2VuZCBjaGFuZ2VzICBhbmQgaW1wcm92ZW1lbnRzIHdoaWNoIHdvdWxkIGJlbmVmaXQKK21hbnkgIG90aGVyICB1c2VycyAgdG8gIHVzICBzbyAgdGhhdCAgIGFsbCAgdXNlcnMgIG1heSAgcmVjZWl2ZSAgdGhlc2UKK2ltcHJvdmVtZW50cyAgaW4gYSBsYXRlciAgdmVyc2lvbi4gVGhlIHJlc3RyaWN0aW9uIG5vdCAgdG8gIGRpc3RyaWJ1dGUKK21vZGlmaWVkIGNvcGllcyBpcyBhbHNvICB1c2VmdWwgIHRvIHByZXZlbnQgYnVnICByZXBvcnRzIGZyb20gIHNvbWVvbmUKK2Vsc2UncyBtb2RpZmljYXRpb25zLgorCis0LiBJZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgU05OUyB5b3UgbWF5IG5vdCBjaGFyZ2UgYW55dGhpbmcgZXhjZXB0Cit0aGUgY29zdCBmb3IgdGhlIG1lZGlhIGFuZCAgYSBmYWlyIGVzdGltYXRlICBvZiB0aGUgIGNvc3RzIG9mIGNvbXB1dGVyCit0aW1lIG9yIG5ldHdvcmsgdGltZSBkaXJlY3RseSBhdHRyaWJ1dGFibGUgdG8gdGhlIGNvcHlpbmcuCisKKzUuIFlvdSBtYXkgbm90ICBjb3B5LCBtb2RpZnksICBzdWJsaWNlbnNlLCBkaXN0cmlidXRlIG9yIHRyYW5zZmVyIFNOTlMKK2V4Y2VwdCAgYXMgIGV4cHJlc3NseSAgcHJvdmlkZWQgIHVuZGVyICB0aGlzICAgTGljZW5zZS4gICBBbnkgIGF0dGVtcHQKK290aGVyd2lzZSB0byBjb3B5LCAgbW9kaWZ5LCBzdWJsaWNlbnNlLCBkaXN0cmlidXRlIG9yIHRyYW5zZmVyIFNOTlMgaXMKK3ZvaWQsIGFuZCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHlvdXIgcmlnaHRzIHRvICB1c2UgIFNOTlMgdW5kZXIKK3RoaXMgTGljZW5zZS4gIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMgdG8KK3VzZSAgY29waWVzLCBmcm9tIHlvdSAgdW5kZXIgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMKK3Rlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KKworNi4gIEJ5IGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcgU05OUyAob3IgYW55ICB3b3JrIGJhc2VkICBvbgorU05OUykgeW91IGluZGljYXRlIHlvdXIgIGFjY2VwdGFuY2Ugb2YgdGhpcyBsaWNlbnNlIHRvIGRvICBzbywgYW5kIGFsbAoraXRzIHRlcm1zIGFuZCBjb25kaXRpb25zLgorCis3LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSBTTk5TIChvciBhbnkgIHdvcmsgYmFzZWQgIG9uICBTTk5TKSwgdGhlCityZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUgIG9yaWdpbmFsIGxpY2Vuc29yCit0byAgY29weSwgIGRpc3RyaWJ1dGUgIG9yICBtb2RpZnkgU05OUyAgc3ViamVjdCAgdG8gIHRoZXNlICB0ZXJtcyAgYW5kCitjb25kaXRpb25zLiAgIFlvdSBtYXkgbm90ICBpbXBvc2UgIGFueSAgZnVydGhlciAgcmVzdHJpY3Rpb25zICBvbiAgdGhlCityZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLgorCis4LiAgSW5jb3Jwb3JhdGlvbiBvZiAgU05OUyAgb3IgIHBhcnRzIG9mICBpdCAgaW4gIGNvbW1lcmNpYWwgIHByb2dyYW1zCityZXF1aXJlcyBhIHNwZWNpYWwgIGFncmVlbWVudCAgYmV0d2VlbiB0aGUgIGNvcHlyaWdodCBob2xkZXIgIGFuZCAgdGhlCitMaWNlbnNlZSBpbiB3cml0aW5nIGFuZCB1c3VzYWxseSBpbnZvbHZlcyB0aGUgcGF5bWVudCBvZiBsaWNlbnNlIGZlZXMuCitJZiAgeW91IHdhbnQgdG8gaW5jb3Jwb3JhdGUgU05OUyBvciBwYXJ0cyBvZiBpdCBpbiBjb21tZXJjaWFsIHByb2dyYW1zCit3cml0ZSB0byB0aGUgYXV0aG9yIGFib3V0IGZ1cnRoZXIgZGV0YWlscy4KKworOS4gQmVjYXVzZSBTTk5TIGlzIGxpY2Vuc2VkIGZyZWUgb2YgY2hhcmdlLCB0aGVyZSBpcyAgbm8gd2FycmFudHkgIGZvcgorU05OUywgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcuIFRoZSBjb3B5cmlnaHQgaG9sZGVycworYW5kL29yIG90aGVyIHBhcnRpZXMgIHByb3ZpZGUgIFNOTlMgYGBhcyAgaXMnJyB3aXRob3V0IHdhcnJhbnR5IG9mIGFueQora2luZCwgZWl0aGVyIGV4cHJlc3NlZCBvciBpbXBsaWVkLCAgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIHRoZQoraW1wbGllZCB3YXJyYW50aWVzIG9mICBtZXJjaGFudGFiaWxpdHkgYW5kICBmaXRuZXNzICBmb3IgYSAgcGFydGljdWxhcgorcHVycG9zZS4gVGhlIGVudGlyZSByaXNrIGFzIHRvICB0aGUgcXVhbGl0eSBhbmQgcGVyZm9ybWFuY2Ugb2YgU05OUyBpcword2l0aCB5b3UuIFNob3VsZCB0aGUgcHJvZ3JhbSBwcm92ZSAgZGVmZWN0aXZlLCB5b3UgYXNzdW1lIHRoZSBjb3N0ICBvZgorYWxsIG5lY2Vzc2FyeSBzZXJ2aWNpbmcsIHJlcGFpciBvciBjb3JyZWN0aW9uLgorCisxMC4gSW4gIG5vIGV2ZW50IHdpbGwgYW55IGNvcHlyaWdodCBob2xkZXIsIG9yIGFueSBvdGhlciBwYXJ0eSB3aG8gbWF5CityZWRpc3RyaWJ1dGUgU05OUyBhcyBwZXJtaXR0ZWQgIGFib3ZlLCBiZSAgbGlhYmxlIHRvIHlvdSBmb3IgIGRhbWFnZXMsCitpbmNsdWRpbmcgIGFueSAgZ2VuZXJhbCwgc3BlY2lhbCwgIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzCithcmlzaW5nIG91dCBvZiB0aGUgdXNlIG9yIGluYWJpbGl0eSAgdG8gIHVzZSAgU05OUyAoaW5jbHVkaW5nICBidXQgbm90CitsaW1pdGVkIHRvICBsb3NzIG9mIGRhdGEgb3IgIGRhdGEgYmVpbmcgcmVuZGVyZWQgaW5hY2N1cmF0ZSAgb3IgbG9zc2VzCitzdXN0YWluZWQgYnkgeW91IG9yIHRoaXJkIHBhcnRpZXMgb3IgYSBmYWlsdXJlIG9mIFNOTlMgdG8gb3BlcmF0ZSB3aXRoCithbnkgb3RoZXIgIHByb2dyYW1zKSwgIGV2ZW4gIGlmIHN1Y2ggaG9sZGVyIG9yICBvdGhlciAgcGFydHkgaGFzICBiZWVuCithZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKwlFbmQgb2YgU05OUyBMaWNlbnNlIEFncmVlbWVudAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvU09QTEEtMi4zIGIvbGljZW5zZXMvU09QTEEtMi4zCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiZDQ5NDEKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9TT1BMQS0yLjMKQEAgLTAsMCArMSw1MTcgQEAKKyAgICAgICAgICAgICAgICAgU1lTVEVNQyBPUEVOIFNPVVJDRSBMSUNFTlNFCisgICAgKFNPRlRXQVJFIERPV05MT0FEIEFORCBVU0UgTElDRU5TRSBBR1JFRU1FTlQgVkVSU0lPTiAyLjMpCisKK1BMRUFTRSBSRUFEIFRISVMgTElDRU5TRSBBR1JFRU1FTlQgQ0FSRUZVTExZIEJFRk9SRSBDTElDS0lORyBPTgorVEhFICJBQ0NFUFQiIEJVVFRPTiwgQVMgQlkgQ0xJQ0tJTkcgT04gVEhFICJBQ0NFUFQiIEJVVFRPTiBZT1UKK0FDS05PV0xFREdFIFRIQVQgWU9VIEhBVkUgUkVBRCwgVU5ERVJTVE9PRCBBTkQgQUdSRUUgVE8gQkUKK0JPVU5EIEJZIFRISVMgTElDRU5TRSBBR1JFRU1FTlQgQU5EIEFMTCBPRiBJVFMgVEVSTVMgQU5ECitDT05ESVRJT05TLgorCitPUEVOIFNZU1RFTUMgSU5JVElBVElWRQorCitUaGUgcHVycG9zZSBvZiB0aGUgZm9sbG93aW5nIGxpY2Vuc2UgYWdyZWVtZW50ICh0aGUgIkFncmVlbWVudCIpIGlzIHRvIGVuY291cmFnZQoraW50ZXJvcGVyYWJpbGl0eSBhbmQgZGlzdHJpYnV0ZWQgZGV2ZWxvcG1lbnQgb2YgYSBDKysgbW9kZWxpbmcgbGFuZ3VhZ2Uga25vd24gYXMKKyJTeXN0ZW1DIiBmb3Igc3lzdGVtIHNpbXVsYXRpb24gYW5kIGRlc2lnbiAodGhlICJQdXJwb3NlIikuIFRoZSBTeXN0ZW1DIHNvZnR3YXJlCitsaWNlbnNlZCBoZXJldW5kZXIgaXMgbGljZW5zZWQsIHdpdGhvdXQgZmVlIG9mIGFueSBraW5kLCBmb3IgdXNlIHB1cnN1YW50IHRvIHRoZSB0ZXJtcworYW5kIGNvbmRpdGlvbnMgc2V0IGZvcnRoIGluIHRoaXMgQWdyZWVtZW50LgorCitMSUNFTlNFIEFHUkVFTUVOVAorCitUSEUgQ09OVFJJQlVUT1JTIEFSRSBXSUxMSU5HIFRPIExJQ0VOU0UgVEhFIFBST0dSQU0gVE8gWU9VIE9OTFkKK09OIFRIRSBDT05ESVRJT04gVEhBVCBZT1UgQUNDRVBUIEFMTCBPRiBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFCitBR1JFRU1FTlQuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gQUxMIE9GIFRIRSBURVJNUyBPRiBUSElTIExJQ0VOU0UKK0FHUkVFTUVOVCwgTk8gUklHSFRTIEFSRSBHUkFOVEVEIFRPIFlPVSBIRVJFVU5ERVIgVE8gVVNFIFRIRQorUFJPR1JBTS4gQU5ZIFVTRSwgUkVQUk9EVUNUSU9OIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgUFJPR1JBTQorQ09OU1RJVFVURVMgWU9VUiBBQ0NFUFRBTkNFIE9GIFRISVMgQUdSRUVNRU5ULgorCisxLiBERUZJTklUSU9OUy4KKworICAgICAgMS4xICAgICJBZ3JlZW1lbnQiIG1lYW5zIHRoaXMgZG9jdW1lbnQuCisKKyAgICAgIDEuMiAgICAiQ29udHJpYnV0aW9uIiBtZWFuczogKGEpIHRoZSBPcmlnaW5hbCBQcm9ncmFtOyBhbmQgKGIpIGFsbCBNb2RpZmljYXRpb25zCisgICAgICB0aGF0IFJlY2lwaWVudCBkZXBvc2l0cyBvciBjb250cmlidXRlcyBpbiBhY2NvcmRhbmNlIHdpdGggU2VjdGlvbiAzIGluIGZ1cnRoZXJhbmNlCisgICAgICBvZiB0aGUgUHVycG9zZSBvZiB0aGlzIEFncmVlbWVudCBidXQgZG9lcyBub3QgaW5jbHVkZSBhbnkgc29mdHdhcmUgdGhhdCBoYXMKKyAgICAgIGJlZW4gcHJldmlvdXNseSBzbyBkZXBvc2l0ZWQgb3IgY29udHJpYnV0ZWQuCisKKyAgICAgIDEuMyAgICDigJxDb250cmlidXRpb24gUXVlc3Rpb25uYWlyZeKAnSBtZWFucyB0aGUgcXVlc3Rpb25uYWlyZSBhdHRhY2hlZCBoZXJldG8gYXMKKyAgICAgIEV4aGliaXQgQy4KKworICAgICAgMS40ICAgICJDb250cmlidXRvciIgbWVhbnMgYW55IFJlY2lwaWVudCwgaW5jbHVkaW5nIFN5bm9wc3lzLCBJbmMuICgiU3lub3BzeXPigJ0pLAorICAgICAgdGhhdCBtYWtlcyBhIENvbnRyaWJ1dGlvbiBwdXJzdWFudCB0byBTZWN0aW9uIDMuIEFueSBSZWNpcGllbnQgZGVwb3NpdGluZywgYXMKKyAgICAgIHBhcnQgb3IgYWxsIG9mIGEgQ29udHJpYnV0aW9uLCBjb2RlIHdoaWNoIGhhcyBwcmV2aW91c2x5IGJlZW4gc28gZGVwb3NpdGVkIGJ5CisgICAgICBhbm90aGVyIFJlY2lwaWVudCBpcyBub3QgdGhlIENvbnRyaWJ1dG9yIG9mIHN1Y2ggcmUtZGVwb3NpdGVkIGNvZGUgZm9yIHRoZQorICAgICAgcHVycG9zZXMgb2YgdGhpcyBBZ3JlZW1lbnQuIEEgbGlzdCBvZiB0aGUgQ29udHJpYnV0b3JzIGlzIGF0dGFjaGVkIGhlcmV0byBhcworICAgICAgRXhoaWJpdCBBLgorCisgICAgICAxLjUgICAgIkNvbnRyaWJ1dG9yJ3MgTmVjZXNzYXJ5IFBhdGVudCBDbGFpbSIgbWVhbnMgYSBjbGFpbSBpbiBhbnkgcGF0ZW50IG5vdworICAgICAgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGxpY2Vuc2FibGUgYnkgQ29udHJpYnV0b3IgdGhhdCBpcyBkaXJlY3RseSBpbmZyaW5nZWQgc29sZWx5IGJ5CisgICAgICB0aGUgcG9ydGlvbiBvZiBhbiBleGVjdXRpbmcgY29tcHV0ZXIgcHJvZ3JhbSB0cmFuc2xhdGVkLCBjb21waWxlZCBvciBpbnRlcnByZXRlZAorICAgICAgZnJvbSBhbmQgY29ycmVzcG9uZGluZyBkaXJlY3RseSBhbmQgc29sZWx5IHRvIHRoZSBDb250cmlidXRpb24gZGlzY2xvc2VkIGJ5CisgICAgICBDb250cmlidXRvciBoZXJldW5kZXIgYW5kIHRoZSBTeXN0ZW1DIEtlcm5lbCBDb2RlLCBleGNlcHQgdGhhdCBDb250cmlidXRvcidzCisgICAgICBOZWNlc3NhcnkgUGF0ZW50IENsYWltIHNoYWxsIG5vdCBpbmNsdWRlIGFueSBjbGFpbSBkaXJlY3RlZCB0b3dhcmRzIGEgZGF0YQorICAgICAgc3RydWN0dXJlLCBtZXRob2QsIGFsZ29yaXRobSwgcHJvY2VzcywgdGVjaG5pcXVlLCBjaXJjdWl0IHJlcHJlc2VudGF0aW9uLCBvciBjaXJjdWl0CisgICAgICBpbXBsZW1lbnRhdGlvbiB0aGF0IGlzIG5vdCBjb21wbGV0ZWx5IGFuZCBlbnRpcmVseSBkZXNjcmliZWQgaW4gdGhlIGNvbWJpbmF0aW9uCisgICAgICBvZiBzdWNoIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFN5c3RlbUMgS2VybmVsIENvZGUuCisKKyAgICAgIDEuNiAgICAiQ29weXJpZ2h0L1RyYWRlIFNlY3JldCBSaWdodHMiIG1lYW5zIHdvcmxkd2lkZSBzdGF0dXRvcnkgYW5kIGNvbW1vbgorICAgICAgbGF3IHJpZ2h0cyBhc3NvY2lhdGVkIHNvbGVseSB3aXRoIChpKSB3b3JrcyBvZiBhdXRob3JzaGlwIGluY2x1ZGluZyBjb3B5cmlnaHRzLAorICAgICAgY29weXJpZ2h0IGFwcGxpY2F0aW9ucywgY29weXJpZ2h0IHJlZ2lzdHJhdGlvbnMgYW5kICJtb3JhbCByaWdodHMiLCBhbmQgKGlpKSB0aGUKKyAgICAgIHByb3RlY3Rpb24gb2YgdHJhZGUgYW5kIGluZHVzdHJpYWwgc2VjcmV0cyBhbmQgY29uZmlkZW50aWFsIGluZm9ybWF0aW9uLiBQYXRlbnRzIGFyZQorICAgICAgbm90IGluY2x1ZGVkIGluIENvcHlyaWdodC9UcmFkZSBTZWNyZXQgUmlnaHRzLgorCisgICAgICAxLjcgICAgIkRpc3RyaWJ1dGUiIG1lYW5zIG1ha2luZyBhIERpc3RyaWJ1dGlvbi4KKworICAgICAgMS44ICAgIkRpc3RyaWJ1dGlvbiIgbWVhbnMgYW55IGRpc3RyaWJ1dGlvbiwgc3VibGljZW5zaW5nIG9yIG90aGVyIHRyYW5zZmVyIG9mIHRoZQorICAgICAgUHJvZ3JhbSAod2l0aCBvciB3aXRob3V0IE1vZGlmaWNhdGlvbnMpIHRvIGFueSB0aGlyZCBwYXJ0eS4KKworICAgICAgMS45ICAgICJFeGVjdXRhYmxlIiBtZWFucyBPcmlnaW5hbCBQcm9ncmFtICh3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucykKKyAgICAgIGNvbXBpbGVkIGludG8gb2JqZWN0IGNvZGUgZm9ybSBhbG9uZyB3aXRoIG9ubHkgdGhvc2UgaGVhZGVyIGZpbGVzIGZyb20gc3VjaAorICAgICAgT3JpZ2luYWwgUHJvZ3JhbSB0aGF0IGFyZSBzdHJpY3RseSBuZWNlc3NhcnkgdG8gbWFrZSB1c2Ugb2YgdGhlIG9iamVjdCBjb2RlLgorCisgICAgICAxLjEwIOKAnE1hcmtz4oCdIG1lYW5zLCBjb2xsZWN0aXZlbHksIHRoZSByZWdpc3RlcmVkIGFuZCB1bnJlZ2lzdGVyZWQgbWFya3MgYW5kCisgICAgICBsb2dvcyB0aGF0IE9TQ0kgaGFzIGxpY2Vuc2VkIG9yIG90aGVyd2lzZSBhdXRob3JpemVkIFJlY2lwaWVudCB0byB1c2UuIEFsbCBtYXJrcworICAgICAgYW5kIGxvZ29zIGFyZSBsaXN0ZWQgb24gRXhoaWJpdCBELCB3aGljaCBsaXN0IG1heSBiZSBhbWVuZGVkIGZyb20gdGltZSB0byB0aW1lCisgICAgICBieSBPU0NJIHRvIGFkZCBvciBkZWxldGUgYW55IG1hcmtzIG9yIGxvZ29zLgorCisgICAgICAxLjExICJNb2RpZmljYXRpb24iIG1lYW5zOiAoYSkgYW55IHNvZnR3YXJlIGNvZGUgd2hpY2ggY29tcHJpc2VzIGNoYW5nZShzKQorICAgICAgdG8gdGhlIFByb2dyYW0gaW5jbHVkaW5nIGFkZGl0aW9ucyBhbmQvb3IgZGVsZXRpb25zOyAoYikgYW55IHNwZWNpZmljYXRpb25zIGZvciB0aGUKKyAgICAgIFByb2dyYW07IGFuZCAoYykgYW55IHJlZmVyZW5jZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUHJvZ3JhbS4KKworICAgICAgMS4xMiAiT3JpZ2luYWwgUHJvZ3JhbSIgbWVhbnMgdGhlIFN5c3RlbUMgMS4xIHZlcnNpb24gb2YgdGhlIHNvZnR3YXJlCisgICAgICBhY2NvbXBhbnlpbmcgdGhpcyBBZ3JlZW1lbnQgYXMgcmVsZWFzZWQgYnkgU3lub3BzeXMuCisKKyAgICAgIDEuMTMg4oCcT1NDSeKAnSBtZWFucyBPcGVuIFN5c3RlbUMgSW5pdGlhdGl2ZSwgYSBDYWxpZm9ybmlhIG5vbnByb2ZpdCBtdXR1YWwKKyAgICAgIGJlbmVmaXQgY29ycG9yYXRpb24uCisKKyAgICAgIDEuMTQgIlByb2dyYW0iIG1lYW5zIHRoZSBPcmlnaW5hbCBQcm9ncmFtIGFuZCBlYWNoIG90aGVyIENvbnRyaWJ1dGlvbiBhbmQKKyAgICAgIGFueSBjb21iaW5hdGlvbiB0aGVyZW9mLgorCisgICAgICAxLjE1ICJSZWNpcGllbnQiIG1lYW5zIGFueW9uZSB3aG8gcmVjZWl2ZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcworICAgICAgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycy4KKworICAgICAgMS4xNiBGb3IgbGVnYWwgZW50aXRpZXMsICJSZWNpcGllbnQiIGluY2x1ZGVzIGFueSBlbnRpdHkgdGhhdCBjb250cm9scywgaXMgY29udHJvbGxlZAorICAgICAgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggUmVjaXBpZW50LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLAorICAgICAgImNvbnRyb2wiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvcgorICAgICAgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChiKSBvd25lcnNoaXAgb2YKKyAgICAgIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mCisgICAgICBzdWNoIGVudGl0eS4KKworICAgICAgMS4xNyAiU291cmNlIENvZGUiIG1lYW5zIGh1bWFuIHJlYWRhYmxlIHRleHQgaW4gYW4gZWxlY3Ryb25pYyBmb3JtIHN1aXRhYmxlCisgICAgICBmb3IgbW9kaWZpY2F0aW9uIHRoYXQgZGVzY3JpYmUgdGhlIGZ1bmN0aW9ucyBhbmQgZGF0YSBzdHJ1Y3R1cmVzLCBpbmNsdWRpbmcgQywgQysrLAorICAgICAgYW5kIG90aGVyIGxhbmd1YWdlIG1vZHVsZXMsIHBsdXMgYW55IGFzc29jaWF0ZWQgaW50ZXJmYWNlIGRlZmluaXRpb24gZmlsZXMsIHNjcmlwdHMKKyAgICAgIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIGFuIEV4ZWN1dGFibGUsIG9yIGEgbGlzdCBvZiBzb3VyY2UKKyAgICAgIGNvZGUgZGlmZmVyZW50aWFsIGNvbXBhcmlzb25zIGFnYWluc3QgdGhlIE9yaWdpbmFsIFByb2dyYW0uCisKKyAgICAgIDEuMTggIlN5c3RlbUMgS2VybmVsIENvZGUiIG1lYW5zIHRoZSBzZXQgb2YgY29tcGlsYWJsZSBzb3VyY2UgYW5kIGhlYWRlcgorICAgICAgZmlsZXMgaW5jbHVkZWQgaW4gdGhlIE9yaWdpbmFsIFByb2dyYW0gdGhhdCBhcmUgbmVjZXNzYXJ5IHRvIGJ1aWxkIHRoZSB0YXJnZXQKKyAgICAgIFN5c3RlbUMgbGlicmFyeSBvYmplY3QgbW9kdWxlLCBidXQgZG9lcyBub3QgaW5jbHVkZSBvcGVyYXRpbmcgc3lzdGVtIGhlYWRlcgorICAgICAgZmlsZXMsIG9wZXJhdGluZyBzeXN0ZW0gbGlicmFyeSBlbGVtZW50cywgZG9jdW1lbnRhdGlvbiwgZXhhbXBsZSBjb2RlLCBzYW1wbGUKKyAgICAgIGNvZGUgZnJhZ21lbnRzLCBvciBvdGhlciBhbmNpbGxhcnkgaW5mb3JtYXRpb24uCisKKzIuIEdSQU5UIE9GIFJJR0hUUworCisgICAgIDIuMSAgIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMKKyAgICAgUmVjaXBpZW50IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgbGljZW5zZSB1bmRlciBDb250cmlidXRvcidzCisgICAgIENvcHlyaWdodC9UcmFkZSBTZWNyZXRzIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgICAgICAgIChhKSAgICB1c2UsIHJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBwdWJsaWNseSBkaXNwbGF5LAorICAgICAgICAgICAgcHVibGljbHkgcGVyZm9ybSBhbmQgRGlzdHJpYnV0ZSBpbiBzb3VyY2UgY29kZSBhbmQgb2JqZWN0IGNvZGUgZm9ybSB0aGUKKyAgICAgICAgICAgIENvbnRyaWJ1dGlvbiBvZiBzdWNoIENvbnRyaWJ1dG9yIGFuZCBhbnkgc3VjaCBkZXJpdmF0aXZlIHdvcmtzLCBzdWJqZWN0IHRvCisgICAgICAgICAgICB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgaW5jbHVkaW5nIFNlY3Rpb24gNDsgYW5kCisKKyAgICAgICAgICAgIChiKSAgICB1c2UgdGhlIGtub3ctaG93LCBpbmZvcm1hdGlvbiBhbmQga25vd2xlZGdlIGVtYmVkZGVkIGluIHRoZQorICAgICAgICAgICAgQ29udHJpYnV0aW9uLCB3aXRob3V0IGFueSBvYmxpZ2F0aW9uIHRvIGtlZXAgdGhlIGZvcmVnb2luZyBjb25maWRlbnRpYWwgc28KKyAgICAgICAgICAgIGxvbmcgYXMgUmVjaXBpZW50IGRvZXMgbm90IG90aGVyd2lzZSB2aW9sYXRlIHRoaXMgQWdyZWVtZW50LgorCisgICAgIDIuMiAgICAgQ29udHJpYnV0b3IgZ3JhbnRzIHRvIGVhY2ggUmVjaXBpZW50LCBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLQorICAgICBleGNsdXNpdmUgbGljZW5zZSB1bmRlciBDb250cmlidXRvcidzIE5lY2Vzc2FyeSBQYXRlbnQgQ2xhaW1zIHRvIG1ha2UsIHVzZSwKKyAgICAgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIG9yIGltcG9ydCB0aGUgc3VjaCBDb250cmlidXRvcidzIENvbnRyaWJ1dGlvbiBhbmQgdGhlIFByb2dyYW0KKyAgICAgb25seSB0byB0aGUgbWluaW11bSBleHRlbnQgbmVjZXNzYXJ5IHRvIGV4ZXJjaXNlIHRoZSByaWdodHMgZ3JhbnRlZCBpbiBTZWN0aW9uCisgICAgIDIuMShhKS4KKworICAgICAyLjMgICAgRWFjaCBDb250cmlidXRvciByZXByZXNlbnRzIHRoYXQgdG8gaXRzIGtub3dsZWRnZSBpdCBoYXMgc3VmZmljaWVudCByaWdodHMgaW4KKyAgICAgaXRzIENvbnRyaWJ1dGlvbiwgaWYgYW55LCB0byBncmFudCB0aGUgbGljZW5zZXMgc2V0IGZvcnRoIGluIFNlY3Rpb25zIDIuMSBhbmQgMi4yLgorCisgICAgIDIuNCAgICBFeGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBpbiBTZWN0aW9ucyAyLjEgYW5kIDIuMiwgUmVjaXBpZW50IHJlY2VpdmVzIG5vCisgICAgIHJpZ2h0cyBvciBsaWNlbnNlcyB0byB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIGFueSBDb250cmlidXRvciB1bmRlciB0aGlzCisgICAgIEFncmVlbWVudCwgd2hldGhlciBleHByZXNzbHksIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UuIEFsbCByaWdodHMgaW4KKyAgICAgdGhlIFByb2dyYW0gbm90IGV4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSByZXNlcnZlZC4KKworICAgICAyLjUgICAgUmVjaXBpZW50IHNoYWxsIHJldGFpbiBpdHMgZW50aXJlIHJpZ2h0LCB0aXRsZSwgYW5kIGludGVyZXN0IGluIGFuZCB0bworICAgICBDb250cmlidXRpb25zIGRpc2Nsb3NlZCBieSBSZWNpcGllbnQgaGVyZXVuZGVyLCBpbmNsdWRpbmcgYWxsIENvcHlyaWdodHMvVHJhZGUKKyAgICAgU2VjcmV0IFJpZ2h0cyBhbmQgcGF0ZW50IHJpZ2h0cyBlbWJvZGllZCB0aGVyZWluLCBzdWJqZWN0IHRvIHRoZSB1bmRlcmx5aW5nIHJpZ2h0cworICAgICBlbWJvZGllZCBpbiB0aGUgT3JpZ2luYWwgUHJvZ3JhbSBhbmQgZnVydGhlciBzdWJqZWN0IHRvIHRob3NlIHJpZ2h0cyBleHByZXNzbHkKKyAgICAgZ3JhbnRlZCBpbiB0aGlzIEFncmVlbWVudC4gUmVjaXBpZW50IGFncmVlcyB0aGF0IFJlY2lwaWVudCBzaGFsbCBub3QgcmVtb3ZlIG9yCisgICAgIGFsdGVyIGFueSBwcm9wcmlldGFyeSBub3RpY2VzIGNvbnRhaW5lZCBpbiB0aGUgQ29udHJpYnV0aW9ucyBsaWNlbnNlZCB0byBSZWNpcGllbnQKKyAgICAgaGVyZXVuZGVyIGFuZCBzaGFsbCByZXByb2R1Y2UgYW5kIGluY2x1ZGUgc3VjaCBub3RpY2VzIG9uIGFueSBjb3BpZXMgb2YgdGhlCisgICAgIENvbnRyaWJ1dGlvbnMgbWFkZSBieSBSZWNpcGllbnQgaW4gYW55IG1lZGlhLgorCisyLjYgICBMaWNlbnNlIHRvIE1hcmtzLgorCisgICAgICAoYSkgICAgT1NDSSBzaGFsbCByZXRhaW4gYWxsIHJpZ2h0LCB0aXRsZSBhbmQgaW50ZXJlc3QgaW4gYW5kIHRvIHRoZSBNYXJrcworICAgICAgd29ybGR3aWRlLCBzdWJqZWN0IHRvIHRoZSBsaW1pdGVkIGxpY2Vuc2UgZ3JhbnRlZCB0byBSZWNpcGllbnQgaW4gdGhpcworICAgICAgU2VjdGlvbiAyLjYuIE9TQ0kgaGVyZWJ5IGdyYW50cyBSZWNpcGllbnQgYSBub24tZXhjbHVzaXZlLCByb3lhbHR5LWZyZWUsCisgICAgICBsaW1pdGVkIGxpY2Vuc2UgdG8gdXNlIHRoZSBNYXJrcyBzb2xlbHkgaW4gY29ubmVjdGlvbiB3aXRoIGl0cyBleGVyY2lzZSBvZgorICAgICAgdGhlIHJpZ2h0cyBncmFudGVkIHB1cnN1YW50IHRvIHRoaXMgQWdyZWVtZW50IGFuZCB0byBpbmRpY2F0ZSB0aGF0IHRoZQorICAgICAgcHJvZHVjdHMgYmVpbmcgbWFya2V0ZWQgYnkgUmVjaXBpZW50IGFyZSBjb21wYXRpYmxlIHdpdGgsIGFuZCBtZWV0IHRoZQorICAgICAgc3RhbmRhcmRzIG9mLCB0aGUgU3lzdGVtQyBtb2RlbGluZyBsYW5ndWFnZS4gQWxsIHVzZXMgb2YgdGhlIE1hcmtzIHNoYWxsCisgICAgICBiZSBpbiBhY2NvcmRhbmNlIHdpdGggT1NDSeKAmXMgdHJhZGVtYXJrIHVzYWdlIHBvbGljeSBzZXQgZm9ydGggaW4gRXhoaWJpdAorICAgICAgRC4KKworICAgICAgKGIpICAgIFJlY2lwaWVudCBzaGFsbCBhc3Npc3QgT1NDSSB0byB0aGUgZXh0ZW50IHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvCisgICAgICBwcm90ZWN0IGFuZCBtYWludGFpbiB0aGUgTWFya3Mgd29ybGR3aWRlLCBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywKKyAgICAgIGdpdmluZyBwcm9tcHQgbm90aWNlIHRvIE9TQ0kgb2YgYW55IGtub3duIG9yIHBvdGVudGlhbCBpbmZyaW5nZW1lbnQgb2YgdGhlCisgICAgICBNYXJrcywgYW5kIGNvb3BlcmF0aW5nIHdpdGggT1NDSSBpbiBwcmVwYXJpbmcgYW5kIGV4ZWN1dGluZyBhbnkKKyAgICAgIGRvY3VtZW50cyBuZWNlc3NhcnkgdG8gcmVnaXN0ZXIgdGhlIE1hcmtzLCBvciBhcyBtYXkgYmUgcmVxdWlyZWQgYnkgdGhlCisgICAgICBsYXdzIG9yIHJ1bGVzIG9mIGFueSBjb3VudHJ5IG9yIGp1cmlzZGljdGlvbi4gSW4gaXRzIHNvbGUgZGlzY3JldGlvbiwgT1NDSQorICAgICAgbWF5IGNvbW1lbmNlLCBwcm9zZWN1dGUgb3IgZGVmZW5kIGFueSBhY3Rpb24gb3IgY2xhaW0gY29uY2VybmluZyB0aGUKKyAgICAgIE1hcmtzLiBPU0NJIHNoYWxsIGhhdmUgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgYW55IHN1Y2ggbGl0aWdhdGlvbiwgYW5kCisgICAgICBSZWNpcGllbnQgc2hhbGwgZnVsbHkgY29vcGVyYXRlIHdpdGggT1NDSSBpbiBhbnkgc3VjaCBsaXRpZ2F0aW9uLiBPU0NJIHNoYWxsCisgICAgICByZWltYnVyc2UgUmVjaXBpZW50IGZvciB0aGUgcmVhc29uYWJsZSBjb3N0cyBhc3NvY2lhdGVkIHdpdGggcHJvdmlkaW5nCisgICAgICBzdWNoIGFzc2lzdGFuY2UsIGV4Y2VwdCB0byB0aGUgZXh0ZW50IHRoYXQgc3VjaCBjb3N0cyByZXN1bHQgZnJvbQorICAgICAgUmVjaXBpZW504oCZcyBicmVhY2ggb2YgdGhpcyBTZWN0aW9uIDIuNi4gUmVjaXBpZW50IHNoYWxsIG5vdCBjb21tZW5jZSBhbnkKKyAgICAgIGFjdGlvbiByZWdhcmRpbmcgdGhlIE1hcmtzIHdpdGhvdXQgT1NDSeKAmXMgcHJpb3Igd3JpdHRlbiBjb25zZW50LgorCisgICAgICAoYykgICAgQWxsIGdvb2R3aWxsIHdpdGggcmVzcGVjdCB0byB0aGUgTWFya3Mgc2hhbGwgYWNjcnVlIGZvciB0aGUgc29sZQorICAgICAgYmVuZWZpdCBvZiBPU0NJLiBSZWNpcGllbnQgc2hhbGwgbWFpbnRhaW4gdGhlIHF1YWxpdHkgb2YgYW55IHByb2R1Y3RzLAorICAgICAgYXNzb2NpYXRlZCBwYWNrYWdpbmcsIGNvbGxhdGVyYWwgYW5kIG1hcmtldGluZyBtYXRlcmlhbHMgb24gd2hpY2ggaXQgdXNlcworICAgICAgYW55IG9mIHRoZSBNYXJrcyBpbiBhIG1hbm5lciBjb25zaXN0ZW50IHdpdGggYWxsIHRlcm1zLCBjb25kaXRpb25zIGFuZAorICAgICAgcmVxdWlyZW1lbnRzIHNldCBmb3J0aCBpbiB0aGlzIFNlY3Rpb24gMi42IGFuZCBhdCBhIGxldmVsIHRoYXQgbWVldHMgb3IKKyAgICAgIGV4Y2VlZHMgUmVjaXBpZW504oCZcyBvdmVyYWxsIHJlcHV0YXRpb24gZm9yIHF1YWxpdHkgYW5kIHRoYXQgaXMgYXQgbGVhc3QKKyAgICAgIGNvbW1lbnN1cmF0ZSB3aXRoIGluZHVzdHJ5IHN0YW5kYXJkcy4KKworMi43ICAgUkVDSVBJRU5UIFVOREVSU1RBTkRTIFRIQVQgQUxUSE9VR0ggRUFDSCBDT05UUklCVVRPUgorR1JBTlRTIFRIRSBMSUNFTlNFUyBUTyBJVFMgQ09OVFJJQlVUSU9OUyBTRVQgRk9SVEggSEVSRUlOLCBOTworQVNTVVJBTkNFUyBBUkUgUFJPVklERUQgQlkgQU5ZIENPTlRSSUJVVE9SIFRIQVQgVEhFCitDT05UUklCVVRJT04gQUxPTkUgT1IgSU4gQ09NQklOQVRJT04gV0lUSCBUSEUgUFJPR1JBTSBET0VTCitOT1QgSU5GUklOR0UgVEhFIFBBVEVOVCBPUiBPVEhFUiBJTlRFTExFQ1RVQUwgUFJPUEVSVFkKK1JJR0hUUyBPRiBBTlkgT1RIRVIgRU5USVRZLiBFQUNIIENPTlRSSUJVVE9SIERJU0NMQUlNUyBBTlkKK0xJQUJJTElUWSBUTyBSRUNJUElFTlQgRk9SIENMQUlNUyBCUk9VR0hUIEJZIEFOWSBPVEhFUiBFTlRJVFkKK0JBU0VEIE9OIElORlJJTkdFTUVOVCBPRiBJTlRFTExFQ1RVQUwgUFJPUEVSVFkgUklHSFRTIE9SCitPVEhFUldJU0UuIEluIGFkZGl0aW9uLCBhcyBhIGNvbmRpdGlvbiB0byBleGVyY2lzaW5nIHRoZSByaWdodHMgYW5kIGxpY2Vuc2VzCitncmFudGVkIGhlcmV1bmRlciwgZWFjaCBSZWNpcGllbnQgaGVyZWJ5IGFzc3VtZXMgc29sZSByZXNwb25zaWJpbGl0eSB0byBzZWN1cmUKK2FueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwgaWYgYSB0aGlyZCBwYXJ0eQorcGF0ZW50IGxpY2Vuc2UgaXMgcmVxdWlyZWQgdG8gYWxsb3cgUmVjaXBpZW50IHRvIERpc3RyaWJ1dGUgdGhlIFByb2dyYW0sIGl0IGlzCitSZWNpcGllbnQncyByZXNwb25zaWJpbGl0eSB0byBhY3F1aXJlIHRoYXQgbGljZW5zZSBiZWZvcmUgRGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtLgorCiszLiBERVNDUklQVElPTiBBTkQgREVQT1NJVCBPRiBDT05UUklCVVRJT05TCisKKyAgICAzLjEgICAgVG8gdGhlIGV4dGVudCBSZWNpcGllbnQgd2lzaGVzIHRvIGJlY29tZSBhIENvbnRyaWJ1dG9yIGJ5IG1ha2luZyBhCisgICAgQ29udHJpYnV0aW9uLCBzdWNoIENvbnRyaWJ1dG9yIHNoYWxsOgorCisgICAgICAgICAgKGEpICAgICAoaSkgZGVwb3NpdCBzdWNoIENvbnRyaWJ1dGlvbiBpbiBTb3VyY2UgQ29kZSBmb3JtIGF0CisgICAgICAgICAgaHR0cDovL3d3dy5zeXN0ZW1jLm9yZy8gYWNjb3JkaW5nIHRvIHRoZSBDb250cmlidXRpb24gaW5zdHJ1Y3Rpb25zIGZvdW5kIGF0CisgICAgICAgICAgc3VjaCBzaXRlLCBvciAoaWkpIGRpc2Nsb3NlIHN1Y2ggQ29udHJpYnV0aW9uIGF0IGEgbWVldGluZyBvZiBhbnkgd29ya2luZworICAgICAgICAgIGdyb3VwIG9mIE9TQ0k7CisKKyAgICAgICAgICAoYikgICAgIChpKSBkZXNjcmliZSBzdWNoIENvbnRyaWJ1dGlvbiBpbiByZWFzb25hYmxlIGRldGFpbCBvbiBFeGhpYml0IEIKKyAgICAgICAgICAoaW5jbHVkaW5nIHRoZSBhZGRpdGlvbnMgb3IgY2hhbmdlcyBzdWNoIENvbnRyaWJ1dG9yIG1hZGUgdG8gY3JlYXRlIHRoZQorICAgICAgICAgIENvbnRyaWJ1dGlvbiBhbmQgdGhlIGRhdGUgb2YgYW55IHN1Y2ggY2hhbmdlcyBvciBhZGRpdGlvbnMpLCAoaWkpCisgICAgICAgICAgY29tcGxldGluZyBhIENvbnRyaWJ1dGlvbiBRdWVzdGlvbm5haXJlIHdpdGggcmVzcGVjdCB0byBzdWNoIENvbnRyaWJ1dGlvbiwKKyAgICAgICAgICBhbmQgKGlpaSkgZGVsaXZlcmluZyBib3RoIGRvY3VtZW50cyB0byBPU0NJLiBBbGwgQ29udHJpYnV0aW9ucyBtYWRlIGFmdGVyCisgICAgICAgICAgdGhlIGRhdGUgaGVyZW9mIHNoYWxsIGJlIGVmZmVjdHVhdGVkIGJ5IENvbnRyaWJ1dG9yICh4KSBhbWVuZGluZyBFeGhpYml0IEIKKyAgICAgICAgICBhbmQgZGVsaXZlcmluZyBzdWNoIGFtZW5kZWQgRXhoaWJpdCBCIHRvIE9TQ0ksIHdoaWNoIGFtZW5kZWQgZXhoaWJpdAorICAgICAgICAgIHNoYWxsIGF1dG9tYXRpY2FsbHkgcmVwbGFjZSB0aGUgZXhpc3RpbmcgRXhoaWJpdCBCLCAoeSkgY29tcGV0aW5nIGEKKyAgICAgICAgICBDb250cmlidXRpb24gUXVlc3Rpb25uYWlyZSB3aXRoIHJlc3BlY3QgdG8gc3VjaCBDb250cmlidXRpb24sIGFuZCAoeikKKyAgICAgICAgICBkZWxpdmVyaW5nIGJvdGggZG9jdW1lbnRzIHRvIE9TQ0k7CisKKyAgICAgICAgICAoYykgICAgY2F1c2Ugc3VjaCBDb250cmlidXRpb24gdG8gY29udGFpbiBhIGZpbGUgZG9jdW1lbnRpbmcgc3VjaAorICAgICAgICAgIENvbnRyaWJ1dG9yJ3MgbmFtZSBhbmQgY29udGFjdCBpbmZvcm1hdGlvbiwgYWRkaXRpb25zIG9yIGNoYW5nZXMgc3VjaAorICAgICAgICAgIENvbnRyaWJ1dG9yIG1hZGUgdG8gY3JlYXRlIHRoZSBDb250cmlidXRpb24sIGFuZCB0aGUgZGF0ZSBvZiBhbnkgc3VjaAorICAgICAgICAgIGNoYW5nZXMgb3IgYWRkaXRpb25zOworCisgICAgICAgICAgKGQpICAgICBjYXVzZSBzdWNoIENvbnRyaWJ1dGlvbiB0byBpbmNsdWRlIGluIGVhY2ggZmlsZSBhIHByb21pbmVudAorICAgICAgICAgIHN0YXRlbWVudCBzdWJzdGFudGlhbGx5IHNpbWlsYXIgdG8gdGhlIGZvbGxvd2luZzogIlRoZSBmb2xsb3dpbmcgY29kZSBpcworICAgICAgICAgIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gdGhlIFN5c3RlbUMgc291cmNlIGNvZGUgQ29weXJpZ2h0IChjKQorICAgICAgICAgIDE5OTYte2RhdGUgaGVyZX0gYnkgYWxsIENvbnRyaWJ1dG9ycy4gQWxsIFJpZ2h0cyByZXNlcnZlZC4gVGhlIGNvbnRlbnRzIG9mCisgICAgICAgICAgdGhpcyBmaWxlIGFyZSBzdWJqZWN0IHRvIHRoZSByZXN0cmljdGlvbnMgYW5kIGxpbWl0YXRpb25zIHNldCBmb3J0aCBpbiB0aGUKKyAgICAgICAgICBTeXN0ZW1DIE9wZW4gU291cmNlIExpY2Vuc2UgVmVyc2lvbiAyLjMgKHRoZSAiTGljZW5zZSIpLiBZb3UgbWF5IG5vdAorICAgICAgICAgIHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCBzdWNoIHJlc3RyaWN0aW9ucyBhbmQgbGltaXRhdGlvbnMuCisgICAgICAgICAgWW91IG1heSBvYnRhaW4gaW5zdHJ1Y3Rpb25zIG9uIGhvdyB0byByZWNlaXZlIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorICAgICAgICAgIGh0dHA6Ly93d3cuc3lzdGVtYy5vcmcvLiBTb2Z0d2FyZSBkaXN0cmlidXRlZCBieSBDb250cmlidXRvcnMgdW5kZXIgdGhlCisgICAgICAgICAgTGljZW5zZSBpcyBkaXN0cmlidXRlZCBleGNsdXNpdmVseSBvbiBhbiAiQVMgSVMiIGJhc2lzLCBXSVRIT1VUCisgICAgICAgICAgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFNlZSB0aGUgTGljZW5zZQorICAgICAgICAgIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlCisgICAgICAgICAgTGljZW5zZS4iOyBhbmQKKyAgICAgICAgICAoZSkgICAgY2F1c2Ugc3VjaCBDb250cmlidXRpb24gdG8gaW5jbHVkZSBhIHRleHQgZmlsZSB0aXRsZWQgIkxFR0FMIiB3aGljaAorICAgICAgICAgIGRlc2NyaWJlcyBhbnkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiB3aGljaCBDb250cmlidXRvciBpcyBhd2FyZSB0aGF0CisgICAgICAgICAgaXQgb3IgYW55IHRoaXJkIHBhcnR5IG1heSBob2xkIGluIHRoZSBmdW5jdGlvbmFsaXR5IG9yIGNvZGUgb2Ygc3VjaAorICAgICAgICAgIENvbnRyaWJ1dGlvbi4KKworICAgICAzLjIgICBPU0NJIG9yIHRoZSBhZG1pbmlzdHJhdG9ycyBvZiB0aGUgaHR0cDovL3d3dy5zeXN0ZW1jLm9yZy8gd2ViIHNpdGUgc2hhbGwKKyAgICAgaGF2ZSB0aGUgcmlnaHQgdG8gYXV0aG9yaXplIHJlbW92YWwgZnJvbSBzdWNoIHNpdGUgYW55IENvbnRyaWJ1dGlvbiBhdCBhbnkgdGltZS4KKworNC4gUkVRVUlSRU1FTlRTIE9GIERJU1RSSUJVVElPTgorCisgICAgIDQuMSAgICBBIFJlY2lwaWVudCBtYXkgY2hvb3NlIHRvIERpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaW4gb2JqZWN0IGNvZGUgZm9ybQorICAgICB1bmRlciBpdHMgb3duIGxpY2Vuc2UgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0OgorCisgICAgICAgICAgIChhKSAgUmVjaXBpZW50IGNvbXBsaWVzIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMKKyAgICAgICAgICAgQWdyZWVtZW50OyBhbmQKKworICAgICAgICAgICAoYikgICAgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIFJlY2lwaWVudCdzIGxpY2Vuc2UgYWdyZWVtZW50IHdpdGggaXRzCisgICAgICAgICAgIGxpY2Vuc2VlczoKKworICAgICAgICAgICAgICAgICAgaS4gICAgIGVmZmVjdGl2ZWx5IGRpc2NsYWltIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbAorICAgICAgICAgICAgICAgICAgd2FycmFudGllcyBhbmQgY29uZGl0aW9ucywgZXhwcmVzcyBhbmQgaW1wbGllZCwgaW5jbHVkaW5nCisgICAgICAgICAgICAgICAgICB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUgYW5kIG5vbi1pbmZyaW5nZW1lbnQsIGFuZCBpbXBsaWVkCisgICAgICAgICAgICAgICAgICB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhCisgICAgICAgICAgICAgICAgICBwYXJ0aWN1bGFyIHB1cnBvc2U7CisKKyAgICAgICAgICAgICAgICAgIGlpLiAgICBlZmZlY3RpdmVseSBleGNsdWRlIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCBsaWFiaWxpdHkgZm9yCisgICAgICAgICAgICAgICAgICBkYW1hZ2VzLCBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwKKyAgICAgICAgICAgICAgICAgIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaCBhcyBsb3N0IHByb2ZpdHM7CisKKyAgICAgICAgICAgICAgICAgIGlpaS4gICBzdGF0ZSB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50CisgICAgICAgICAgICAgICAgICBhcmUgb2ZmZXJlZCBieSB0aGF0IFJlY2lwaWVudCBhbG9uZSBhbmQgbm90IGJ5IGFueSBvdGhlciBwYXJ0eTsgYW5kCisKKyAgICAgICAgICAgICAgICAgIGl2LiAgIHN0YXRlIHRoYXQgc291cmNlIGNvZGUgZm9yIHRoZSBQcm9ncmFtIGlzIGF2YWlsYWJsZSBmcm9tIHN1Y2gKKyAgICAgICAgICAgICAgICAgIFJlY2lwaWVudCwgYW5kIGluZm9ybSBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUKKyAgICAgICAgICAgICAgICAgIG1hbm5lciBvbiBvciB0aHJvdWdoIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlCisgICAgICAgICAgICAgICAgICBleGNoYW5nZS4KKworICAgICA0LjIgICBJZiBhIFJlY2lwaWVudCBjaG9vc2VzIHRvIERpc3RyaWJ1dGUgdGhlIFByb2dyYW0gaW4gc291cmNlIGNvZGUgZm9ybSB0aGVuOgorCisgICAgICAgICAgIChhKSAgICB0aGUgUHJvZ3JhbSBtdXN0IGJlIERpc3RyaWJ1dGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQKKworICAgICAgICAgICAoYikgICBhIGNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUKKyAgICAgICAgICAgUHJvZ3JhbS4KKworICAgICA0LjMgICBFYWNoIFJlY2lwaWVudCBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBpbiBhIGNvbnNwaWN1b3VzIGxvY2F0aW9uIGluIHRoZQorICAgICBQcm9ncmFtIHNvIERpc3RyaWJ1dGVkIG9yIHRyYW5zZmVycmVkOgorICAgICAgICAgICAgIENvcHlyaWdodCAoYykgMTk5Ni17ZGF0ZSBoZXJlfSwgYnkgYWxsIENvbnRyaWJ1dG9ycy4gQWxsIHJpZ2h0cworICAgICAgICAgICAgIHJlc2VydmVkLgorCisgICAgIDQuNCAgICBJbiBhZGRpdGlvbiwgZWFjaCBSZWNpcGllbnQgdGhhdCBjcmVhdGVzIGFuZCBEaXN0cmlidXRlcyBvciBvdGhlcndpc2UKKyAgICAgdHJhbnNmZXJzIGEgTW9kaWZpY2F0aW9uIHdoZXRoZXIgb3Igbm90IHN1Y2ggTW9kaWZpY2F0aW9uIGhhcyBiZWVuIGRlcG9zaXRlZAorICAgICBwdXJzdWFudCB0byBTZWN0aW9uIDMgbXVzdCBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiBzdWNoIE1vZGlmaWNhdGlvbiBpbiBhCisgICAgIG1hbm5lciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzIHRoaXJkIHBhcnRpZXMgdG8gaWRlbnRpZnkgdGhlIG9yaWdpbmF0b3Igb2YgdGhlCisgICAgIE1vZGlmaWNhdGlvbi4KKworNS4gSU5ERU1OSUZJQ0FUSU9OCisKK0EgUmVjaXBpZW50IHdobyBEaXN0cmlidXRlcyB0aGUgUHJvZ3JhbSAoYSAiRGlzdHJpYnV0b3IiKSBtYXkgYWNjZXB0IGNlcnRhaW4KK3Jlc3BvbnNpYmlsaXRpZXMgd2l0aCByZXNwZWN0IHRvIGVuZCB1c2VycywgYnVzaW5lc3MgcGFydG5lcnMgYW5kIHRoZSBsaWtlLiBXaGlsZSB0aGlzCitsaWNlbnNlIGlzIGludGVuZGVkIHRvIGZhY2lsaXRhdGUgdGhlIGNvbW1lcmNpYWwgdXNlIG9mIHRoZSBQcm9ncmFtLCBhIERpc3RyaWJ1dG9yIHNoYWxsCitEaXN0cmlidXRlIHRoZSBQcm9ncmFtIGluIGEgbWFubmVyIHdoaWNoIGRvZXMgbm90IGNyZWF0ZSBwb3RlbnRpYWwgbGlhYmlsaXR5IGZvcgorQ29udHJpYnV0b3JzLiBUaGVyZWZvcmUgZWFjaCBEaXN0cmlidXRvciBoZXJlYnkgYWdyZWVzIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IGV2ZXJ5CitDb250cmlidXRvciAoIkluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIikgYWdhaW5zdCBhbnkgbG9zc2VzLCBkYW1hZ2VzIGFuZCBjb3N0cworKGNvbGxlY3RpdmVseSAiTG9zc2VzIikgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyIGxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhCit0aGlyZCBwYXJ0eSBhZ2FpbnN0IHRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciB0byB0aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvcgorb21pc3Npb25zIG9mIHN1Y2ggRGlzdHJpYnV0b3IsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHVuZGVyCit3aGljaCBEaXN0cmlidXRvciBvZmZlcmVkIHRoZSBQcm9ncmFtLCBpbiBjb25uZWN0aW9uIHdpdGggaXRzIERpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KK1RoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gZG8gbm90IGFwcGx5IHRvIGFueSBjbGFpbXMgb3IgTG9zc2VzIHJlbGF0aW5nIHRvIGFueQorYWN0dWFsIG9yIGFsbGVnZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGluZnJpbmdlbWVudCBvZiB0aGUgUHJvZ3JhbS4gSW4gb3JkZXIgdG8gcXVhbGlmeSwKK2FuIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9yIG11c3Q6IChhKSBwcm9tcHRseSBub3RpZnkgdGhlIERpc3RyaWJ1dG9yIGluIHdyaXRpbmcgb2Ygc3VjaAorY2xhaW0sIGFuZCAoYikgYWxsb3cgdGhlIERpc3RyaWJ1dG9yIHRvIGNvbnRyb2wsIGFuZCBjb29wZXJhdGUgd2l0aCB0aGUgRGlzdHJpYnV0b3IgaW4sIHRoZQorZGVmZW5zZSBhbmQgYW55IHJlbGF0ZWQgc2V0dGxlbWVudCBuZWdvdGlhdGlvbnMuIFRoZSBJbmRlbW5pZmllZCBDb250cmlidXRvciBtYXkKK3BhcnRpY2lwYXRlIGluIHRoZSBkZWZlbnNlIG9mIGFueSBzdWNoIGNsYWltIGF0IGl0cyBvd24gZXhwZW5zZS4KKworRm9yIGV4YW1wbGUsIGEgUmVjaXBpZW50IG1pZ2h0IGluY2x1ZGUgdGhlIFByb2dyYW0gaW4gYSBjb21tZXJjaWFsIHByb2R1Y3Qgb2ZmZXJpbmcsCitQcm9kdWN0IFguIFRoYXQgUmVjaXBpZW50IGlzIHRoZW4gYSBEaXN0cmlidXRvci4gSWYgdGhhdCBEaXN0cmlidXRvciB0aGVuIG1ha2VzCitwZXJmb3JtYW5jZSBjbGFpbXMsIG9yIG9mZmVycyB3YXJyYW50aWVzLCBzdXBwb3J0LCBvciBpbmRlbW5pdHkgb3IgYW55IG90aGVyIGxpY2Vuc2UKK3Rlcm1zIHJlbGF0ZWQgdG8gUHJvZHVjdCBYLCB0aG9zZSBwZXJmb3JtYW5jZSBjbGFpbXMsIG9mZmVycyBhbmQgb3RoZXIgdGVybXMgYXJlIHN1Y2gKK0Rpc3RyaWJ1dG9yJ3MgcmVzcG9uc2liaWxpdHkgYWxvbmUuIFVuZGVyIHRoaXMgc2VjdGlvbiwgdGhlIERpc3RyaWJ1dG9yIHdvdWxkIGhhdmUgdG8KK2RlZmVuZCBjbGFpbXMgYWdhaW5zdCB0aGUgQ29udHJpYnV0b3JzIHJlbGF0ZWQgdG8gdGhvc2UgcGVyZm9ybWFuY2UgY2xhaW1zLCBvZmZlcnMsIGFuZAorb3RoZXIgdGVybXMsIGFuZCBpZiBhIGNvdXJ0IHJlcXVpcmVzIGFueSBDb250cmlidXRvciB0byBwYXkgYW55IGRhbWFnZXMgYXMgYSByZXN1bHQsIHRoZQorRGlzdHJpYnV0b3IgbXVzdCBwYXkgdGhvc2UgZGFtYWdlcy4KKworNi4gTk8gV0FSUkFOVFkKKworRVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBBR1JFRU1FTlQsIFRIRSBQUk9HUkFNIElTCitQUk9WSURFRCBFWENMVVNJVkVMWSBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IKK0NPTkRJVElPTlMgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQgSU5DTFVESU5HLCBXSVRIT1VUCitMSU1JVEFUSU9OLCBBTlkgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5ULAorTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBFQUNIIFJFQ0lQSUVOVCBJUworU09MRUxZIFJFU1BPTlNJQkxFIEZPUiBERVRFUk1JTklORyBUSEUgQVBQUk9QUklBVEVORVNTIE9GIElUUyBVU0UgQU5ECitESVNUUklCVVRJT04gT0YgVEhFIFBST0dSQU0gQU5EIEFTU1VNRVMgQUxMIFJJU0tTIEFTU09DSUFURUQgV0lUSCBJVFMKK0VYRVJDSVNFIE9GIFJJR0hUUyBVTkRFUiBUSElTIEFHUkVFTUVOVCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTworVEhFIFJJU0tTIEFORCBDT1NUUyBPRiBQUk9HUkFNIEVSUk9SUywgQ09NUExJQU5DRSBXSVRIIEFQUExJQ0FCTEUKK0xBV1MsIERBTUFHRSBUTyBPUiBMT1NTIE9GIERBVEEsIFBST0dSQU1TIE9SIEVRVUlQTUVOVCwgQU5ECitVTkFWQUlMQUJJTElUWSBPUiBJTlRFUlJVUFRJT04gT0YgT1BFUkFUSU9OUy4gICAgVEhJUyBESVNDTEFJTUVSIE9SCitXQVJSQU5UWSBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIEFHUkVFTUVOVC4gTk8gVVNFIE9GCitUSEUgUFJPR1JBTSBPUiBBTlkgTU9ESUZJQ0FUSU9OUyBUSEVSRVRPIEFSRSBBVVRIT1JJWkVEIEhFUkVVTkRFUgorRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi4KKworNy4gRElTQ0xBSU1FUiBPRiBMSUFCSUxJVFkKKworRVhDRVBUIEFTIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBBR1JFRU1FTlQsIE5FSVRIRVIgUkVDSVBJRU5UIE5PUgorQU5ZIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORworV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUyksIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPUgorRElTVFJJQlVUSU9OIE9GIFRIRSBQUk9HUkFNIE9SIFRIRSBFWEVSQ0lTRSBPRiBBTlkgUklHSFRTIEdSQU5URUQKK0hFUkVVTkRFUiwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKzguICAgIFUuUy4gR09WRVJOTUVOVCBVU0UKKworSWYgUmVjaXBpZW50IGlzIGxpY2Vuc2luZyB0aGUgUHJvZ3JhbSBvbiBiZWhhbGYgb2YgYW55IHVuaXQgb3IgYWdlbmN5IG9mIHRoZSBVbml0ZWQgU3RhdGVzCitHb3Zlcm5tZW50LCB0aGVuIHRoZSBQcm9ncmFtIGFuZCBhbnkgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGlzIGNvbW1lcmNpYWwgY29tcHV0ZXIKK3NvZnR3YXJlLCBhbmQsIHB1cnN1YW50IHRvIEZBUiAxMi4yMTIgb3IgREZBUlMgMjI3LjcyMDIgYW5kIHRoZWlyIHN1Y2Nlc3NvcnMsIGFzCithcHBsaWNhYmxlLCBzaGFsbCBiZSBsaWNlbnNlZCB0byB0aGUgR292ZXJubWVudCB1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcworQWdyZWVtZW50LgorCis5LiAgICBQQVRFTlQgQ0xBSU1TCisKK0lmIFJlY2lwaWVudCBpbnN0aXR1dGVzIHBhdGVudCBsaXRpZ2F0aW9uIGFnYWluc3QgYW55IGVudGl0eSAoaW5jbHVkaW5nIGEgY3Jvc3MtY2xhaW0sCitjb3VudGVyY2xhaW0gb3IgZGVjbGFyYXRvcnkganVkZ21lbnQgY2xhaW0gaW4gYSBsYXdzdWl0KSBhbGxlZ2luZyB0aGF0IHRoZSBQcm9ncmFtIGl0c2VsZgorKGV4Y2x1ZGluZyBjb21iaW5hdGlvbnMgb2YgdGhlIFByb2dyYW0gd2l0aCBvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSkgaW5mcmluZ2VzIHN1Y2gKK1JlY2lwaWVudCdzIHBhdGVudChzKSwgdGhlbiB0aGUgcmlnaHRzIGdyYW50ZWQgdG8gUmVjaXBpZW50IGJ5IGVhY2ggQ29udHJpYnV0b3IgdW5kZXIKK1NlY3Rpb24gMi4yIHNoYWxsIHRlcm1pbmF0ZSBhcyBvZiB0aGUgZGF0ZSBzdWNoIGxpdGlnYXRpb24gaXMgZmlsZWQuCisKKzEwLiAgIFRFUk1JTkFUSU9OCisKK0FsbCBSZWNpcGllbnQncyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgdGVybWluYXRlIGlmIFJlY2lwaWVudCBmYWlscyB0byBjb21wbHkKK3dpdGggYW55IG9mIHRoZSBtYXRlcmlhbCB0ZXJtcyBvciBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBkb2VzIG5vdCBjdXJlIHN1Y2gKK2ZhaWx1cmUgaW4gYSByZWFzb25hYmxlIHBlcmlvZCBvZiB0aW1lIGFmdGVyIGJlY29taW5nIGF3YXJlIG9mIHN1Y2ggbm9uY29tcGxpYW5jZS4gSWYKK3N1Y2ggb2NjdXJzLCBSZWNpcGllbnQgc2hhbGwgY2Vhc2UgdXNlIGFuZCBEaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYmFzZWQgdXBvbiB0aGUKK3JpZ2h0cyBncmFudGVkIHRvIFJlY2lwaWVudCB1bmRlciB0aGlzIEFncmVlbWVudCBhcyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUuCitIb3dldmVyLCBSZWNpcGllbnQncyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGxpY2Vuc2VzIGdyYW50ZWQgYnkKK1JlY2lwaWVudCByZWxhdGluZyB0byB0aGUgUHJvZ3JhbSBzaGFsbCBzdXJ2aXZlIHN1Y2ggdGVybWluYXRpb24uCisKKzExLiAgIExJQ0VOU0UgVkVSU0lPTlMKKworT1NDSSBtYXkgcHVibGlzaCBuZXcgdmVyc2lvbnMgKGluY2x1ZGluZyByZXZpc2lvbnMpIG9mIHRoaXMgQWdyZWVtZW50IGZyb20gdGltZSB0bwordGltZS4gRWFjaCBuZXcgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50IHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4KK1RoZSBQcm9ncmFtIG1heSBhbHdheXMgYmUgRGlzdHJpYnV0ZWQgc3ViamVjdCB0byB0aGUgdmVyc2lvbiBvZiB0aGUgQWdyZWVtZW50IHVuZGVyCit3aGljaCBpdCB3YXMgcmVjZWl2ZWQuIEluIGFkZGl0aW9uLCBhZnRlciBhIG5ldyB2ZXJzaW9uIG9mIHRoZSBBZ3JlZW1lbnQgaXMgcHVibGlzaGVkLAorQ29udHJpYnV0b3IgbWF5IGVsZWN0IHRvIERpc3RyaWJ1dGUgdGhlIFByb2dyYW0gdW5kZXIgdGhlIG5ldyB2ZXJzaW9uLiBObyBvbmUgb3RoZXIKK3RoYW4gT1NDSSwgYWN0aW5nIGJ5IGEgdm90ZSBvZiBhdCBsZWFzdCA3NSUgb2YgdGhlIG1lbWJlcnMgb2YgaXRzIEJvYXJkIG9mIERpcmVjdG9ycywKK2hhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoaXMgQWdyZWVtZW50OyBwcm92aWRlZCB0aGF0IEV4aGliaXQgQiBhbmQgRXhoaWJpdCBDIG1heSBiZQorYW1lbmRlZCBhcyBzcGVjaWZpY2FsbHkgc2V0IGZvcnRoIGluIFNlY3Rpb24gMy4xKGIpLCBhbmQgRXhoaWJpdCBEIG1heSBiZSBhbWVuZGVkIGFzCitzcGVjaWZpY2FsbHkgc2V0IGZvcnRoIGluIFNlY3Rpb24gMS4xMC4KKworMTIuICAgIEVMRUNUUk9OSUMgQUNDRVBUQU5DRQorCitUaGlzIEFncmVlbWVudCBtYXkgYmUgZXhlY3V0ZWQgZWl0aGVyIGVsZWN0cm9uaWNhbGx5IG9yIG9uIHBhcGVyLiBCeSBjbGlja2luZyBvbiB0aGUKK+KAnEFjY2VwdOKAnSBidXR0b24sIFJlY2lwaWVudCB3YXJyYW50cyB0aGF0IGl0IGFncmVlcyB0byBhbGwgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LAordGhhdCBSZWNpcGllbnQgaXMgYXV0aG9yaXplZCB0byBlbnRlciBpbnRvIHRoaXMgQWdyZWVtZW50LCBhbmQgdGhhdCB0aGlzIEFncmVlbWVudCBpcworbGVnYWxseSBiaW5kaW5nIHVwb24gUmVjaXBpZW50LiBJZiBSZWNpcGllbnQgZG9lcyBub3QgYWdyZWUgdG8gYmUgYm91bmQgYnkgdGhpcworQWdyZWVtZW50LCB0aGVuIFJlY2lwaWVudCBzaGFsbCBjbGljayB0aGUg4oCcRGVjbGluZeKAnSBidXR0b24gYW5kIFJlY2lwaWVudCBzaGFsbCBub3QKK3JlY2VpdmUgYW55IHJpZ2h0cyBmcm9tIHRoZSBDb250cmlidXRvcnMgbm9yIHNoYWxsIFJlY2lwaWVudCBkb3dubG9hZCBhbnkgbWF0ZXJpYWxzLAoraW5jbHVkaW5nIHRoZSBQcm9ncmFtLgorCisxMy4gICAgR0VORVJBTAorCitUaGlzIEFncmVlbWVudCByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyB0aGUgc3ViamVjdCBtYXR0ZXIKK2hlcmVvZiBhbmQgc3VwZXJzZWRlcyBhbGwgcHJpb3IgYWdyZWVtZW50cyBvciByZXByZXNlbnRhdGlvbnMsIG9yYWwgb3Igd3JpdHRlbiwKK3JlZ2FyZGluZyB0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQgb3IKK3VuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZQorcmVtYWluZGVyIG9mIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpdGhvdXQgZnVydGhlciBhY3Rpb24gYnkgdGhlIHBhcnRpZXMKK2hlcmV0bywgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgcmVmb3JtZWQgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIHN1Y2gKK3Byb3Zpc2lvbiB2YWxpZCBhbmQgZW5mb3JjZWFibGUuCisKK1RoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIENhbGlmb3JuaWEsIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGNvbmZsaWN0IG9mCitsYXdzIHByaW5jaXBsZXMuIEVhY2ggcGFydHkgd2FpdmVzIGl0cyByaWdodHMgdG8gYSBqdXJ5IHRyaWFsIGluIGFueSByZXN1bHRpbmcgbGl0aWdhdGlvbi4gQW55CitsaXRpZ2F0aW9uIHJlbGF0aW5nIHRvIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgRmVkZXJhbAorQ291cnRzIG9mIHRoZSBOb3J0aGVybiBEaXN0cmljdCBvZiBDYWxpZm9ybmlhLCB3aXRoIHZlbnVlIGx5aW5nIGluIFNhbnRhIENsYXJhIENvdW50eSwKK0NhbGlmb3JuaWEsIG9yIHRoZSBTYW50YSBDbGFyYSBDb3VudHkgU3VwZXJpb3IgQ291cnQuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkCitOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseQorZXhjbHVkZWQuIFRoZSBwcm92aXNpb25zIG9mIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGNvbnN0cnVlZCBmYWlybHkgaW4gYWNjb3JkYW5jZSB3aXRoCitpdHMgdGVybXMgYW5kIG5vIHJ1bGVzIG9mIGNvbnN0cnVjdGlvbiBmb3Igb3IgYWdhaW5zdCBlaXRoZXIgcGFydHkgc2hhbGwgYmUgYXBwbGllZCBpbiB0aGUKK2ludGVycHJldGluZyB0aGlzIEFncmVlbWVudC4gUmVjaXBpZW50IHNoYWxsIG5vdCB1c2UgdGhlIFByb2dyYW0gaW4gdmlvbGF0aW9uIG9mIGxvY2FsCithbmQgb3RoZXIgYXBwbGljYWJsZSBsYXdzIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCB0aGUgZXhwb3J0IGNvbnRyb2wgbGF3cyBvZiB0aGUKK1VuaXRlZCBTdGF0ZXMuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWEhJQklUIEEKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTGlzdCBvZiBDb250cmlidXRvcnMKKworCisxLiAgIFN5bm9wc3lzLCBJbmMuCisKKzIuICAgQ2FkZW5jZSBEZXNpZ24gU3lzdGVtcywgSW5jLgorCiszLiAgIENvV2FyZSwgSW5jLgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYSElCSVQgRAorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhZGVtYXJrIFVzYWdlIFBvbGljeQorCitJLiBMSVNUIE9GIE1BUktTCisKKyAgICAgICAgIDEuICAgICAgICBPcGVuIFN5c3RlbUMKKworICAgICAgICAgMi4gICAgICAgIE9wZW4gU3lzdGVtQyBJbml0aWF0aXZlCisKKyAgICAgICAgIDMuICAgICAgICBPU0NJLCBTeXN0ZW1DCisKKyAgICAgICAgIDQuICAgICAgICBTeXN0ZW1DIEdyYXBoaWMgTG9nbworCisgICAgICAgICA1LiAgICAgICAgQWxsIGxvZ29zIHRoYXQgaW5jb3Jwb3JhdGUgdGhlIGZvcmVnb2luZyB3b3JkIG1hcmtzCisKKworSUkuIFBST1BFUiBVU0UgT0YgTUFSS1MKKworVHJhZGVtYXJrcyBhbmQgc2VydmljZSBtYXJrcyBmdW5jdGlvbiBhcyBhZGplY3RpdmVzIGFuZCBnZW5lcmFsbHkgc2hvdWxkIG5vdCBiZSB1c2VkIGFzCitub3VucyBvciB2ZXJicy4gQWNjb3JkaW5nbHksIGFzIG9mdGVuIGFzIHBvc3NpYmxlLCB0aGUgTWFya3Mgc2hvdWxkIGJlIHVzZWQgYXMgYWRqZWN0aXZlcworaW1tZWRpYXRlbHkgcHJlY2VkaW5nIHRoZSBnZW5lcmljIG5vdW4gdGhhdCByZWZlcnMgdG8gdGhlIHNlcnZpY2UgaW4gcXVlc3Rpb24uIEZvciBleGFtcGxlOgorCisgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBTeXN0ZW1D4oSiIHNvZnR3YXJlCisgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBTeXN0ZW1D4oSiIExSTQorCitObyBQb3NzZXNzaXZlcyBvciBQbHVyYWxzLiBTaW5jZSB0aGV5IGFyZSBub3Qgbm91bnMsIHRoZSBNYXJrcyBzaG91bGQgbmV2ZXIgYmUgdXNlZCBpbiB0aGUKK3Bvc3Nlc3NpdmUgb3IgcGx1cmFsIGZvcm1zLiBGb3IgZXhhbXBsZSwgaXQgaXMgbm90IGFwcHJvcHJpYXRlIHRvIHdyaXRlIOKAnFN5c3RlbUPigJlzIHNvZnR3YXJlLuKAnQorCitObyBVc2UgYXMgVmVyYnMgb3IgYXMgUHVucy4gVGhlIE1hcmtzIHNob3VsZCBuZXZlciBiZSB1c2VkIGFzIHZlcmJzIG9yIGFzIHB1bnMuCisKKworSUlJLiBQUk9QRVIgQVRUUklCVVRJT04KKworVHJhZGVtYXJrIG93bmVyc2hpcCBpcyBhdHRyaWJ1dGVkIGluIHR3byB3YXlzLCB3aXRoIHRoZSB1c2Ugb2YgYSBzeW1ib2wgKFRNLCBTTSwgwq4pIGFmdGVyIHRoZSBtYXJrCithbmQgd2l0aCBhIGxlZ2FsIGxlZ2VuZCwgdXN1YWxseSBmb3VuZCBhdCB0aGUgZW5kIG9mIGEgZG9jdW1lbnQgZm9sbG93aW5nIHRoZSBjb3B5cmlnaHQgbm90aWNlLgorRm9sbG93aW5nIGFyZSBPU0NJ4oCZcyBydWxlcyBmb3Igc3ltYm9scyBhbmQgbGVnZW5kcyB0byBhdHRyaWJ1dGUgdGhlIE1hcmtzOgorCitTeW1ib2xzOgorCitXaGljaCBTeW1ib2wgRG8gSSBVc2U/CitUaGUgTWFya3MgZ2VuZXJhbGx5IGZ1bmN0aW9uIGFzIHRyYWRlbWFya3MgcmF0aGVyIHRoYW4gc2VydmljZW1hcmtzLiBVbmxlc3MgeW91IGFyZQorc3BlY2lmaWNhbGx5IGRpcmVjdGVkIG90aGVyd2lzZSwgcGxlYXNlIHVzZSB0aGUg4oSiIG9yIMKuIHN5bWJvbCBhZnRlciB0aGUgTWFya3MuCisKK1doZXJlIERvIEkgUGxhY2UgdGhlIMKuIFN5bWJvbD8KK1RoZSDihKIgb3Igwq4gc3ltYm9sIGlzIHBsYWNlZCBpbW1lZGlhdGVseSBhZnRlciB0aGUgbWFyaywgZWl0aGVyIGluIHN1cGVyc2NyaXB0IG9yIHN1YnNjcmlwdC4KKworV2hlbiBEbyBJIFVzZSB0aGUgU3ltYm9sPworVGhlIOKEoiBvciDCriBzeW1ib2wgaXMgdG8gYmUgdXNlZCBhZnRlciB0aGUgTWFya3MgaW4gdGhlIGZvbGxvd2luZyBpbnN0YW5jZXM6CisKK01vc3QgUHJvbWluZW50IFVzZXMgOiBBIOKEoiBvciDCriBzeW1ib2wgaXMgcmVxdWlyZWQgYWZ0ZXIgcHJvbWluZW50IHVzZXMgb2YgdGhlIE1hcmtzLCBlLmcuLCBpbgordGhlIGhlYWRsaW5lcyBhbmQgbGFyZ2UgcHJpbnQgdGV4dCBvZiB3ZWIgcGFnZXMsIGFkdmVydGlzZW1lbnRzLCBvdGhlciBwcm9tb3Rpb25hbCBtYXRlcmlhbHMKK2FuZCBwcmVzcyByZWxlYXNlcywgZXhjZXB0IHdoZXJlIHNwYWNlIGxpbWl0YXRpb25zIG9yIHNwZWNpZmljIHN0eWxlIGNvbnNpZGVyYXRpb25zIHByZXZlbnQKK2NvbXBsaWFuY2Ugd2l0aCB0aGlzIHJlcXVpcmVtZW50LgorCitGaXJzdCBVc2UgaW4gVGV4dDogQSDihKIgb3Igwq4gc3ltYm9sIGlzIHJlcXVpcmVkIGFmdGVyIHRoZSBmaXJzdCB1c2Ugb2YgZWFjaCBNYXJrIGluIHRleHQsIGUuZy4KK2FkdmVydGlzaW5nIGNvcHkgb3IgdGhlIGJvZHkgb2YgcHJlc3MgcmVsZWFzZXMsIGV2ZW4gdGhvdWdoIHRoZSBzeW1ib2wgbWF5IGhhdmUgYWxyZWFkeQorYXBwZWFyZWQgaW4gdGhlIGhlYWRsaW5lIG9yIGFmdGVyIGFub3RoZXIgcHJvbWluZW50IHVzZSBvZiB0aGUgbWFyayBpbiB0aGUgc2FtZSBkb2N1bWVudC4KKworQWxsIExvZ29zOiBUaGUg4oSiIG9yIMKuIHN5bWJvbCBtdXN0IGFwcGVhciBhZnRlciBhbGwgbG9nb3MgaW5jb3Jwb3JhdGluZyB0aGUgTWFya3MuCisKKworSVYuIExlZ2VuZHMKKworQWxsIE1hcmtzIHRoYXQgYXBwZWFyIG9uIGEgd2ViIHBhZ2Ugb3IgaW4gYSBwcmVzcyByZWxlYXNlLCBhZHZlcnRpc2VtZW50IG9yIG90aGVyIHdyaXR0ZW4KK21hdGVyaWFsICh3aGV0aGVyIGluIHByaW50IG9yIGVsZWN0cm9uaWMgZm9ybSkgbXVzdCBiZSBhdHRyaWJ1dGVkIGluIGFuIGFwcHJvcHJpYXRlIGxlZ2VuZC4gVGhlCitsZWdlbmQgbWF5IGJlIHByZXNlbnRlZCBpbiDigJxtb3VzZXByaW504oCdIGJ1dCBtdXN0IGJlIGxhcmdlIGVub3VnaCB0byBiZSByZWFkIGVhc2lseS4gTGVnZW5kcworZ2VuZXJhbGx5IGFwcGVhciBhdCB0aGUgZW5kIG9mIGEgZG9jdW1lbnQgb3IgdGhlIGJvdHRvbSBvZiBhIHdlYiBwYWdlIGJ1dCBtYXkgYmUgcGxhY2VkCitlbHNld2hlcmUsIGUuZy4gdGhlIGluc2lkZSBjb3ZlciBvZiBkb2N1bWVudGF0aW9uLgorCitUaGUgT1NDSSBMZWdlbmQ6IFRoZSBmb2xsb3dpbmcgbGVnZW5kIHNob3VsZCBiZSB1c2VkIGluIGFsbCBtYXRlcmlhbHMgaW4gd2hpY2ggYW55IG9mIHRoZQorTWFya3MgYXBwZWFyOgorCitbSW5zZXJ0IHRoZSBNYXJrc10gYXJlIHRyYWRlbWFya3Mgb3IgcmVnaXN0ZXJlZCB0cmFkZW1hcmtzIG9mIE9wZW4gU3lzdGVtQyBJbml0aWF0aXZlLCBJbmMuIGluCit0aGUgVW5pdGVkIFN0YXRlcyBhbmQgb3RoZXIgY291bnRyaWVzIGFuZCBhcmUgdXNlZCB3aXRoIHBlcm1pc3Npb24uCisKKworVi4gTUFSS1MgTkVWRVIgQ09NQklORUQKKworVGhlIE1hcmtzIHNob3VsZCBuZXZlciBiZSBjb21iaW5lZCB3aXRoIHRoZSBtYXJrcyBvZiBhbnkgYnVzaW5lc3Mgb3RoZXIgdGhhbiBPU0NJLiBUaGUKK01hcmtzIHNob3VsZCBhbHdheXMgYXBwZWFyIHZpc3VhbGx5IHNlcGFyYXRlIGZyb20gYW55IG90aGVyIG1hcmtzIGFwcGVhcmluZyBpbiB0aGUgc2FtZQorbWF0ZXJpYWxzIHN1Y2ggdGhhdCBlYWNoIG1hcmsgY3JlYXRlcyBhIGRpc3RpbmN0IGNvbW1lcmNpYWwgaW1wcmVzc2lvbi4gSXQgd291bGQsIGZvciBpbnN0YW5jZSwKK25vdCBiZSBhcHByb3ByaWF0ZSB0byBzdXBlcmltcG9zZSB0aGUgbG9nbyBvZiBhbm90aGVyIGJ1c2luZXNzIG92ZXIgYW55IE9TQ0kgbG9nby4KKworCitWSS4gTE9HT1MKKworTG9nb3MgaW5jb3Jwb3JhdGluZyB0aGUgTWFya3MgY2FuIG9ubHkgYmUgdXNlZCBpbiB0aGUgZm9ybWF0IHByb3ZpZGVkIHRvIHlvdSBieSBPU0NJIGZvcgoraW5jb3Jwb3JhdGlvbiBpbnRvIHlvdXIgbWF0ZXJpYWxzIG9yIHdlYiBwYWdlcy4gVGhlIGxvZ29zIHByb3ZpZGVkIHRvIHlvdSBieSBPU0NJIGNhbm5vdCBiZQorbW9kaWZpZWQgaW4gYW55IHdheSB3aXRob3V0IE9TQ0nigJlzIHByaW9yIHdyaXR0ZW4gYXBwcm92YWwuIExvZ29zIGNvcGllZCBmcm9tIE9TQ0kgd2ViIHBhZ2VzCitvciBvdGhlciBtYXRlcmlhbHMgbWF5IG5vdCB0byBiZSB1c2VkLiBQbGVhc2UgY29udGFjdCB3ZWJtYXN0ZXJAc3lzdGVtYy5vcmcgdG8gb2J0YWluCitlbGVjdHJvbmljIGZpbGVzIGNvbnRhaW5pbmcgdGhlIE9TQ0kgbG9nb3MgYW5kIHRvIGFzayBhbnkgcXVlc3Rpb25zIHJlZ2FyZGluZyB0aGUgbG9nb3MuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9TU0xlYXkgYi9saWNlbnNlcy9TU0xlYXkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDI0NTJkNwotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL1NTTGVheQpAQCAtMCwwICsxLDU2IEBACitDb3B5cmlnaHQgKEMpIDE5OTUtMTk5OCBFcmljIFlvdW5nIChlYXlAY3J5cHRzb2Z0LmNvbSkKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1RoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgorYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgorVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgorCitUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKK2xoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgoraW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisKK0NvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCit0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCitJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCithcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgorVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCitpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5CisgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgorICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5CisgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KKzQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAorICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKKyAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKK2Rlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQorY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQorW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvU1ZGTCBiL2xpY2Vuc2VzL1NWRkwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjRlNjU3ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL1NWRkwKQEAgLTAsMCArMSw0MCBAQAorU2NvdHQncyBWZXJ5IEZyZWUgTGljZW5zZQorCitDT1BZUklHSFQgTk9USUNFLCBESVNDTEFJTUVSLCBhbmQgTElDRU5TRToKKworSWYgeW91IG1vZGlmeSB0aGlzIGZpbGUsIHlvdSBtYXkgaW5zZXJ0IGFkZGl0aW9uYWwgbm90aWNlcyBpbW1lZGlhdGVseSBmb2xsb3dpbmcKK3RoaXMgc2VudGVuY2UuCisKK0NvcHlyaWdodCAyMDAxIFNjb3R0IFJvYmVydCBMYWRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLCBleGNlcHQgYXMgbm90ZWQgaGVyZWluLgorCitUaGlzIGNvbXB1dGVyIHByb2dyYW0gc291cmNlIGZpbGUgaXMgc3VwcGxpZWQgIkFTIElTIi4gU2NvdHQgUm9iZXJ0IExhZGQKKyhoZXJlaW5hZnRlciByZWZlcnJlZCB0byBhcyAiQXV0aG9yIikgZGlzY2xhaW1zIGFsbCB3YXJyYW50aWVzLCBleHByZXNzZWQgb3IKK2ltcGxpZWQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCB0aGUgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIG9mCitmaXRuZXNzIGZvciBhbnkgcHVycG9zZS4gVGhlIEF1dGhvciBhc3N1bWVzIG5vIGxpYWJpbGl0eSBmb3IgZGlyZWN0LCBpbmRpcmVjdCwKK2luY2lkZW50YWwsIHNwZWNpYWwsIGV4ZW1wbGFyeSwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCB3aGljaCBtYXkgcmVzdWx0IGZyb20KK3RoZSB1c2Ugb2YgdGhpcyBmcmVlIHByb2R1Y3QsIGV2ZW4gaWYgYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2UuCisKK1RoZSBBdXRob3IgaGVyZWJ5IGdyYW50cyBhbnlvbmUgcGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUKK3RoaXMgc291cmNlIGNvZGUsIG9yIHBvcnRpb25zIGhlcmVvZiwgZm9yIGFueSBsZWdhbCBwdXJwb3NlLCB3aXRob3V0IGZlZSwgc3ViamVjdAordG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKKyAgVGhlIG9yaWdpbiBvZiB0aGlzIHNvdXJjZSBjb2RlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkLgorCisgIEFsdGVyZWQgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoIGFuZCBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZAorICBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc291cmNlLgorCisgIFRoaXMgQ29weXJpZ2h0IG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2Ugb3IgYWx0ZXJlZAorICBzb3VyY2UgZGlzdHJpYnV0aW9uLgorCitUaGUgQXV0aG9yIHNwZWNpZmljYWxseSBwZXJtaXRzICh3aXRob3V0IGZlZSkgYW5kIGVuY291cmFnZXMgdGhlIHVzZSBvZiB0aGlzCitzb3VyY2UgY29kZSBmb3IgZW50ZXJ0YWlubWVudCwgZWR1Y2F0aW9uLCBvciBkZWNvcmF0aW9uLiBJZiB5b3UgdXNlIHRoaXMgc291cmNlCitjb2RlIGluIGEgcHJvZHVjdCwgYWNrbm93bGVkZ21lbnQgaXMgbm90IHJlcXVpcmVkIGJ1dCB3b3VsZCBiZSBhcHByZWNpYXRlZC4KKworVGhlIEF1dGhvcidzIGNvbnRhY3QgaW5mb3JtYXRpb24gaXM6CisKKyAgU2NvdHQgUm9iZXJ0IExhZGQKKyAgc2NvdHRAY295b3RlZ3VsY2guY29tCisgIGh0dHA6Ly93d3cuY295b3RlZ3VsY2guY29tCisKK0Fja25vd2xlZGdlbWVudDoKK1RoaXMgbGljZW5zZSBpcyBiYXNlZCBvbiB0aGUgd29uZGVyZnVsIHNpbXBsZSBsaWNlbnNlIHRoYXQgYWNjb21wYW5pZXMgbGlicG5nLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvU2NpbnRpbGxhIGIvbGljZW5zZXMvU2NpbnRpbGxhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzYmNhZDMKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9TY2ludGlsbGEKQEAgLTAsMCArMSwyMCBAQAorTGljZW5zZSBmb3IgU2NpbnRpbGxhIGFuZCBTY2lURQorCitDb3B5cmlnaHQgMTk5OC0yMDAzIGJ5IE5laWwgSG9kZ3NvbiA8bmVpbGhAc2NpbnRpbGxhLm9yZz4KKworQWxsIFJpZ2h0cyBSZXNlcnZlZCAKKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIAorZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCAKK3Byb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgCitib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gCitzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIAorCitORUlMIEhPREdTT04gRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgCitTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIAorQU5EIEZJVE5FU1MsIElOIE5PIEVWRU5UIFNIQUxMIE5FSUwgSE9ER1NPTiBCRSBMSUFCTEUgRk9SIEFOWSAKK1NQRUNJQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyAKK1dIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgCitXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiAKK1RPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgCitPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvU2VuZG1haWwgYi9saWNlbnNlcy9TZW5kbWFpbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDAyMGMwCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvU2VuZG1haWwKQEAgLTAsMCArMSw3OSBAQAorCQkJICAgICBTRU5ETUFJTCBMSUNFTlNFCisKK1RoZSBmb2xsb3dpbmcgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcHBseSwgdW5sZXNzIGEgZGlmZmVyZW50CitsaWNlbnNlIGlzIG9idGFpbmVkIGZyb20gU2VuZG1haWwsIEluYy4sIDY0MjUgQ2hyaXN0aWUgQXZlLCBGb3VydGggRmxvb3IsCitFbWVyeXZpbGxlLCBDQSA5NDYwOCwgb3IgYnkgZWxlY3Ryb25pYyBtYWlsIGF0IGxpY2Vuc2VAc2VuZG1haWwuY29tLgorCitMaWNlbnNlIFRlcm1zOgorCitVc2UsIE1vZGlmaWNhdGlvbiBhbmQgUmVkaXN0cmlidXRpb24gKGluY2x1ZGluZyBkaXN0cmlidXRpb24gb2YgYW55Cittb2RpZmllZCBvciBkZXJpdmVkIHdvcmspIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zIGlzIHBlcm1pdHRlZCBvbmx5IGlmCitlYWNoIG9mIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBpcyBtZXQ6CisKKzEuIFJlZGlzdHJpYnV0aW9ucyBxdWFsaWZ5IGFzICJmcmVld2FyZSIgb3IgIk9wZW4gU291cmNlIFNvZnR3YXJlIiB1bmRlcgorICAgb25lIG9mIHRoZSBmb2xsb3dpbmcgdGVybXM6CisKKyAgIChhKSBSZWRpc3RyaWJ1dGlvbnMgYXJlIG1hZGUgYXQgbm8gY2hhcmdlIGJleW9uZCB0aGUgcmVhc29uYWJsZSBjb3N0IG9mCisgICAgICAgbWF0ZXJpYWxzIGFuZCBkZWxpdmVyeS4KKworICAgKGIpIFJlZGlzdHJpYnV0aW9ucyBhcmUgYWNjb21wYW5pZWQgYnkgYSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBvciBieSBhbgorICAgICAgIGlycmV2b2NhYmxlIG9mZmVyIHRvIHByb3ZpZGUgYSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBmb3IgdXAgdG8gdGhyZWUKKyAgICAgICB5ZWFycyBhdCB0aGUgY29zdCBvZiBtYXRlcmlhbHMgYW5kIGRlbGl2ZXJ5LiAgU3VjaCByZWRpc3RyaWJ1dGlvbnMKKyAgICAgICBtdXN0IGFsbG93IGZ1cnRoZXIgdXNlLCBtb2RpZmljYXRpb24sIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgU291cmNlCisgICAgICAgQ29kZSB1bmRlciBzdWJzdGFudGlhbGx5IHRoZSBzYW1lIHRlcm1zIGFzIHRoaXMgbGljZW5zZS4gIEZvciB0aGUKKyAgICAgICBwdXJwb3NlcyBvZiByZWRpc3RyaWJ1dGlvbiAiU291cmNlIENvZGUiIG1lYW5zIHRoZSBjb21wbGV0ZSBjb21waWxhYmxlCisgICAgICAgYW5kIGxpbmthYmxlIHNvdXJjZSBjb2RlIG9mIHNlbmRtYWlsIGluY2x1ZGluZyBhbGwgbW9kaWZpY2F0aW9ucy4KKworMi4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBjb3B5cmlnaHQgbm90aWNlcyBhcyB0aGV5CisgICBhcHBlYXIgaW4gZWFjaCBzb3VyY2UgY29kZSBmaWxlLCB0aGVzZSBsaWNlbnNlIHRlcm1zLCBhbmQgdGhlCisgICBkaXNjbGFpbWVyL2xpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHNldCBmb3J0aCBhcyBwYXJhZ3JhcGggNiBiZWxvdy4KKworMy4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBDb3B5cmlnaHQgTm90aWNlLAorICAgdGhlc2UgbGljZW5zZSB0ZXJtcywgYW5kIHRoZSBkaXNjbGFpbWVyL2xpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHNldAorICAgZm9ydGggYXMgcGFyYWdyYXBoIDYgYmVsb3csIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gIEZvciB0aGUgcHVycG9zZXMgb2YgYmluYXJ5IGRpc3RyaWJ1dGlvbgorICAgdGhlICJDb3B5cmlnaHQgTm90aWNlIiByZWZlcnMgdG8gdGhlIGZvbGxvd2luZyBsYW5ndWFnZToKKyAgICJDb3B5cmlnaHQgKGMpIDE5OTgtMjAwMiBTZW5kbWFpbCwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4iCisKKzQuIE5laXRoZXIgdGhlIG5hbWUgb2YgU2VuZG1haWwsIEluYy4gbm9yIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEgbm9yCisgICB0aGUgbmFtZXMgb2YgdGhlaXIgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuCisgICBwZXJtaXNzaW9uLiAgVGhlIG5hbWUgInNlbmRtYWlsIiBpcyBhIHRyYWRlbWFyayBvZiBTZW5kbWFpbCwgSW5jLgorCis1LiBBbGwgcmVkaXN0cmlidXRpb25zIG11c3QgY29tcGx5IHdpdGggdGhlIGNvbmRpdGlvbnMgaW1wb3NlZCBieSB0aGUKKyAgIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSBvbiBjZXJ0YWluIGVtYmVkZGVkIGNvZGUsIHdob3NlIGNvcHlyaWdodAorICAgbm90aWNlIGFuZCBjb25kaXRpb25zIGZvciByZWRpc3RyaWJ1dGlvbiBhcmUgYXMgZm9sbG93czoKKworICAgKGEpIENvcHlyaWdodCAoYykgMTk4OCwgMTk5MyBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZgorICAgICAgIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICAoYikgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgICAgICAgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgICAgICAgYXJlIG1ldDoKKworICAgICAgKGkpICAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICAgICAgKGlpKSAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZQorICAgICAgICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAgICAgICAgICAgIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZAorICAgICAgICAgICAgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgICAoaWlpKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzCisgICAgICAgICAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAgICAgICAgICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworNi4gRGlzY2xhaW1lci9MaW1pdGF0aW9uIG9mIExpYWJpbGl0eTogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWQorICAgU0VORE1BSUwsIElOQy4gQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgICBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOCisgICBOTyBFVkVOVCBTSEFMTCBTRU5ETUFJTCwgSU5DLiwgVEhFIFJFR0VOVFMgT0YgVEhFIFVOSVZFUlNJVFkgT0YKKyAgIENBTElGT1JOSUEgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAgIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgICBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgICBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICAgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgICBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworJFJldmlzaW9uOiAxLjEgJCwgTGFzdCB1cGRhdGVkICREYXRlOiAyMDAyLzA2LzA5IDE5OjEwOjEzICQKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL1NlbmRtYWlsLU9wZW4tU291cmNlIGIvbGljZW5zZXMvU2VuZG1haWwtT3Blbi1Tb3VyY2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYzOGUzZgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL1NlbmRtYWlsLU9wZW4tU291cmNlCkBAIC0wLDAgKzEsNzcgQEAKKyAgICAgICAgICAgICAgICAgICBTRU5ETUFJTCBPUEVOIFNPVVJDRSBMSUNFTlNFCisKK1RoZSBmb2xsb3dpbmcgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcHBseSB0byB0aGlzIG9wZW4gc291cmNlCitzb2Z0d2FyZSAoIlNvZnR3YXJlIiksIHVubGVzcyBhIGRpZmZlcmVudCBsaWNlbnNlIGlzIG9idGFpbmVkIGRpcmVjdGx5Citmcm9tIFNlbmRtYWlsLCBJbmMuICgiU2VuZG1haWwiKSBsb2NhdGVkIGF0IDY0MjUgQ2hyaXN0aWUgQXZlLCBGb3VydGgKK0Zsb29yLCBFbWVyeXZpbGxlLCBDQSA5NDYwOCwgVVNBLgorCitVc2UsIG1vZGlmaWNhdGlvbiBhbmQgcmVkaXN0cmlidXRpb24gKGluY2x1ZGluZyBkaXN0cmlidXRpb24gb2YgYW55Cittb2RpZmllZCBvciBkZXJpdmVkIHdvcmspIG9mIHRoZSBTb2Z0d2FyZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3JtcyBpcworcGVybWl0dGVkIG9ubHkgaWYgZWFjaCBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgb2YgMS02IGFyZSBtZXQ6CisKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiB0aGUgU29mdHdhcmUgcXVhbGlmeSBhcyAiZnJlZXdhcmUiIG9yICJvcGVuCisgICBzb3VyY2Ugc29mdHdhcmUiIHVuZGVyIG9uZSBvZiB0aGUgZm9sbG93aW5nIHRlcm1zOgorCisgICAoYSkgUmVkaXN0cmlidXRpb25zIGFyZSBtYWRlIGF0IG5vIGNoYXJnZSBiZXlvbmQgdGhlIHJlYXNvbmFibGUKKyAgICAgICBjb3N0IG9mIG1hdGVyaWFscyBhbmQgZGVsaXZlcnk7IG9yCisKKyAgIChiKSBSZWRpc3RyaWJ1dGlvbnMgYXJlIGFjY29tcGFuaWVkIGJ5IGEgY29weSBvZiB0aGUgbW9kaWZpZWQKKyAgICAgICBTb3VyY2UgQ29kZSAob24gYW4gYWNjZXB0YWJsZSBtYWNoaW5lLXJlYWRhYmxlIG1lZGl1bSkgb3IgYnkgYW4KKyAgICAgICBpcnJldm9jYWJsZSBvZmZlciB0byBwcm92aWRlIGEgY29weSBvZiB0aGUgbW9kaWZpZWQgU291cmNlIENvZGUKKyAgICAgICAob24gYW4gYWNjZXB0YWJsZSBtYWNoaW5lLXJlYWRhYmxlIG1lZGl1bSkgZm9yIHVwIHRvIHRocmVlIHllYXJzCisgICAgICAgYXQgdGhlIGNvc3Qgb2YgbWF0ZXJpYWxzIGFuZCBkZWxpdmVyeS4gU3VjaCByZWRpc3RyaWJ1dGlvbnMgbXVzdAorICAgICAgIGFsbG93IGZ1cnRoZXIgdXNlLCBtb2RpZmljYXRpb24sIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgU291cmNlCisgICAgICAgQ29kZSB1bmRlciBzdWJzdGFudGlhbGx5IHRoZSBzYW1lIHRlcm1zIGFzIHRoaXMgbGljZW5zZS4gRm9yCisgICAgICAgdGhlIHB1cnBvc2VzIG9mIHJlZGlzdHJpYnV0aW9uICJTb3VyY2UgQ29kZSIgbWVhbnMgdGhlIGNvbXBsZXRlCisgICAgICAgaHVtYW4tcmVhZGFibGUsIGNvbXBpbGFibGUsIGxpbmthYmxlLCBhbmQgb3BlcmF0aW9uYWwgc291cmNlCisgICAgICAgY29kZSBvZiB0aGUgcmVkaXN0cmlidXRlZCBtb2R1bGUocykgaW5jbHVkaW5nIGFsbCBtb2RpZmljYXRpb25zLgorCisyLiBSZWRpc3RyaWJ1dGlvbnMgb2YgdGhlIFNvZnR3YXJlIFNvdXJjZSBDb2RlIG11c3QgcmV0YWluIHRoZQorICAgY29weXJpZ2h0IG5vdGljZXMgYXMgdGhleSBhcHBlYXIgaW4gZWFjaCBTb3VyY2UgQ29kZSBmaWxlLCB0aGVzZQorICAgbGljZW5zZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgYW5kIHRoZSBkaXNjbGFpbWVyL2xpbWl0YXRpb24gb2YKKyAgIGxpYWJpbGl0eSBzZXQgZm9ydGggaW4gcGFyYWdyYXBoIDYgYmVsb3cuIFJlZGlzdHJpYnV0aW9ucyBvZiB0aGUKKyAgIFNvZnR3YXJlIFNvdXJjZSBDb2RlIG11c3QgYWxzbyBjb21wbHkgd2l0aCB0aGUgY29weXJpZ2h0IG5vdGljZXMKKyAgIGFuZC9vciBsaWNlbnNlIHRlcm1zIGFuZCBjb25kaXRpb25zIGltcG9zZWQgYnkgY29udHJpYnV0b3JzIG9uCisgICBlbWJlZGRlZCBjb2RlLiBUaGUgY29udHJpYnV0b3JzJyBsaWNlbnNlIHRlcm1zIGFuZCBjb25kaXRpb25zCisgICBhbmQvb3IgY29weXJpZ2h0IG5vdGljZXMgYXJlIGNvbnRhaW5lZCBpbiB0aGUgU291cmNlIENvZGUKKyAgIGRpc3RyaWJ1dGlvbi4KKworMy4gUmVkaXN0cmlidXRpb25zIG9mIHRoZSBTb2Z0d2FyZSBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUKKyAgIENvcHlyaWdodCBOb3RpY2UgZGVzY3JpYmVkIGJlbG93LCB0aGVzZSBsaWNlbnNlIHRlcm1zIGFuZCBjb25kaXRpb25zLAorICAgYW5kIHRoZSBkaXNjbGFpbWVyL2xpbWl0YXRpb24gb2YgbGlhYmlsaXR5IHNldCBmb3J0aCBpbiBwYXJhZ3JhcGgKKyAgIDYgYmVsb3csIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aAorICAgdGhlIGJpbmFyeSBkaXN0cmlidXRpb24uICBGb3IgdGhlIHB1cnBvc2VzIG9mIGJpbmFyeSBkaXN0cmlidXRpb24sCisgICAiQ29weXJpZ2h0IE5vdGljZSIgcmVmZXJzIHRvIHRoZSBmb2xsb3dpbmcgbGFuZ3VhZ2U6ICJDb3B5cmlnaHQgKGMpCisgICAxOTk4LTIwMDQgU2VuZG1haWwsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4iCisKKzQuIE5laXRoZXIgdGhlIG5hbWUsIHRyYWRlbWFyayBvciBsb2dvIG9mIFNlbmRtYWlsLCBJbmMuIChpbmNsdWRpbmcKKyAgIHdpdGhvdXQgbGltaXRhdGlvbiBpdHMgc3Vic2lkaWFyaWVzIG9yIGFmZmlsaWF0ZXMpIG9yIGl0cyBjb250cmlidXRvcnMKKyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cywgb3Igc29mdHdhcmUgb3Igc2VydmljZXMKKyAgIGRlcml2ZWQgZnJvbSB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICAgVGhlIG5hbWUgInNlbmRtYWlsIiBpcyBhIHJlZ2lzdGVyZWQgdHJhZGVtYXJrIGFuZCBzZXJ2aWNlIG1hcmsgb2YKKyAgIFNlbmRtYWlsLCBJbmMuCisKKzUuIFdlIHJlc2VydmUgdGhlIHJpZ2h0IHRvIGNhbmNlbCB0aGlzIGxpY2Vuc2UgaWYgeW91IGRvIG5vdCBjb21wbHkgd2l0aCAKKyAgIHRoZSB0ZXJtcy4gIFRoaXMgbGljZW5zZSBpcyBnb3Zlcm5lZCBieSBDYWxpZm9ybmlhIGxhdyBhbmQgYm90aCBvZiB1cyAKKyAgIGFncmVlIHRoYXQgZm9yIGFueSBkaXNwdXRlIGFyaXNpbmcgb3V0IG9mIG9yIHJlbGF0aW5nIHRvIHRoaXMgU29mdHdhcmUsIAorICAgdGhhdCBqdXJpc2RpY3Rpb24gYW5kIHZlbnVlIGlzIHByb3BlciBpbiBTYW4gRnJhbmNpc2NvIG9yIEFsYW1lZGEgCisgICBjb3VudGllcy4gIFRoZXNlIGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgcmVmbGVjdCB0aGUgY29tcGxldGUgCisgICBhZ3JlZW1lbnQgZm9yIHRoZSBsaWNlbnNlIG9mIHRoZSBTb2Z0d2FyZSAod2hpY2ggbWVhbnMgdGhpcyBzdXBlcmNlZGVzIAorICAgcHJpb3Igb3IgY29udGVtcG9yYW5lb3VzIGFncmVlbWVudHMgb3IgcmVwcmVzZW50YXRpb25zKS4gIElmIGFueSB0ZXJtCisgICBvciBjb25kaXRpb24gdW5kZXIgdGhpcyBsaWNlbnNlIGlzIGZvdW5kIHRvIGJlIGludmFsaWQsIHRoZSByZW1haW5pbmcKKyAgIHRlcm1zIGFuZCBjb25kaXRpb25zIHN0aWxsIGFwcGx5LgorCis2LiBEaXNjbGFpbWVyL0xpbWl0YXRpb24gb2YgTGlhYmlsaXR5OiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZCisgICBTRU5ETUFJTCBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQKKyAgIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIE5PTi1JTkZSSU5HRU1FTlQgQU5EIEZJVE5FU1MgRk9SIEEKKyAgIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRVhQUkVTU0xZIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFNFTkRNQUlMCisgICBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgICBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAgIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwKKyAgIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAgIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCisgICBXSVRIT1VUIExJTUlUQVRJT04gTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCisgICBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKKyRSZXZpc2lvbjogMS4xICQgJERhdGU6IDIwMDYvMDcvMTUgMjE6MTY6MTIgJApkaWZmIC0tZ2l0IGEvbGljZW5zZXMvU2l4WFMgYi9saWNlbnNlcy9TaXhYUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGU3MmFjCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvU2l4WFMKQEAgLTAsMCArMSw1OCBAQAorQUlDQ1UgTElDRU5TRQorfn5+fn5+fn5+fn5+fgorCitGb3IgdGhlIHF1aWNrIHJlYWRlciB0aGlzIGlzIGEgc2xpZ2h0bHkgbW9kaWZpZWQgQlNEIGxpY2Vuc2U6CisgLSBuYW1lcyBjaGFuZ2VkIGZyb20gUmVnZW50cy9Vbml2ZXJzaXR5IHRvIFNpeFhTLgorIC0gcG9pbnQgMyAtJ3dyaXR0ZW4nLCBmb3IgdXMgYW4gZW1haWwgd2lsbCBzdWZmaWNlLgorIC0gcG9pbnQgNCBhbmQgNSBhZGRlZC4KKworQmFzaWNhbGx5IHdlIHRodXMgYWxsb3cgYW55Ym9keSB0byB1c2UgaXQgaW4gYW55IHdheSwgYnV0IHdlIHdvdWxkIGxpa2UKK3RvIGJlIG5vdGlmaWVkIHdoZW4geW91IGFyZSB1c2luZyBpdCBmb3Igbm90IGNvbm5lY3RpbmcgdG8gU2l4WFMuCitUaGUgbWVhbmluZyBvZiAnU0hPVUxEJyBpcyBkZXNjcmliZWQgaW4gSUVURidzIFJGQyAyMTE5IC8gQkNQIDE0LgorLS0KKworQ29weXJpZ2h0IChDKSBTaXhYUworQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBOZWl0aGVyIHRoZSBuYW1lIG9mIFNpeFhTIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHBlcm1pc3Npb24uCis0LiBPbmUgc2hvdWxkIG5vdCByZW1vdmUgYW55IHJlZmVyZW5jZSB0bywgb3IgbG9nbyBvZiwgU2l4WFMuCis1LiBXaGVuIHRoZSBzb2Z0d2FyZSBpcyBhbHRlcmVkIHRvIG5vdCB1c2UgU2l4WFMgc2VydmljZXMsIG9uZSBpcyBraW5kbHkKKyAgIGFza2VkIHRvIG5vdGlmeSBTaXhYUyBvZiB0aGlzIGJ5IHNlbmRpbmcgYW4gZW1haWwgdG8gdGhlIFNpeFhTIFN0YWZmCisgICBhdCBpbmZvQHNpeHhzLm5ldCwgY29udGFpbmluZyBhdCBsZWFzdCB0aGUgZm9sbG93aW5nIGRldGFpbHM6CisgICA4PC0tLS0tLS0tCisgICBPcmdhbmlzYXRpb24gOiBPcmdhbmlzYXRpb24gTmFtZQorICAgRW1haWwgICAgICAgIDogbWFpbGJveEBleGFtcGxlLmNvbQorICAgV2Vic2l0ZSAgICAgIDogaHR0cDovL3d3dy5leGFtcGxlLmNvbQorICAgaXMgdXNpbmcgc29mdHdhcmUgPFNvZnR3YXJlIE5hbWU+IGZvcjoKKyAgIDwKKyAgICBkZXNjcmlwdGlvbiBvZjoKKyAgICAgICB0aGUgdXNhZ2UKKyAgICAgICB0aGUgcmVhc29uIHdoeSBpdCB3YXMgbW9kaWZpZWQKKyAgID4KKyAgIC0tLS0tLS0tPjgKKyAgIEFkZGl0aW9uYWwgaW5mb3JtYXRpb24gZGV0YWlscyBtYXkgb2YgY291cnNlIGJlIHByb3ZpZGVkLgorICAgV2UgcmVxdWVzdCB0aGlzIHRvIGJlIGFibGUgdG8ga25vdyB3aHkgcGVvcGxlIHdvdWxkIGNob29zZSBub3QgdG8KKyAgIHVzZSB0aGUgc2VydmljZXMgcHJvdmlkZWQgYnkgU2l4WFMgYW5kIHRoZSBwYXJ0aWNpcGF0aW5nIElTUCdzLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFNJWFhTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBTSVhYUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCmRpZmYgLS1naXQgYS9saWNlbnNlcy9TbGVlcHljYXQgYi9saWNlbnNlcy9TbGVlcHljYXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ5OGUwZgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL1NsZWVweWNhdApAQCAtMCwwICsxLDg5IEBACitDb3B5cmlnaHQgKGMpIDx5ZWFycz4KKyAgICAgPGNvcHlyaWdodCBob2xkZXI+LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYW55IGZvcm0gbXVzdCBiZSBhY2NvbXBhbmllZCBieSBpbmZvcm1hdGlvbiBvbgorICAgaG93IHRvIG9idGFpbiBjb21wbGV0ZSBzb3VyY2UgY29kZSBmb3IgdGhlIDxwcm9ncmFtPiBzb2Z0d2FyZSBhbmQgYW55CisgICBhY2NvbXBhbnlpbmcgc29mdHdhcmUgdGhhdCB1c2VzIHRoZSA8cHJvZ3JhbT4gc29mdHdhcmUuICBUaGUgc291cmNlCisgICBjb2RlIG11c3QgZWl0aGVyIGJlIGluY2x1ZGVkIGluIHRoZSBkaXN0cmlidXRpb24gb3IgYmUgYXZhaWxhYmxlIGZvcgorICAgbm8gbW9yZSB0aGFuIHRoZSBjb3N0IG9mIGRpc3RyaWJ1dGlvbiBwbHVzIGEgbm9taW5hbCBmZWUsIGFuZCBtdXN0CisgICBiZSBmcmVlbHkgcmVkaXN0cmlidXRhYmxlIHVuZGVyIHJlYXNvbmFibGUgY29uZGl0aW9ucy4gIEZvciBhbgorICAgZXhlY3V0YWJsZSBmaWxlLCBjb21wbGV0ZSBzb3VyY2UgY29kZSBtZWFucyB0aGUgc291cmNlIGNvZGUgZm9yIGFsbAorICAgbW9kdWxlcyBpdCBjb250YWlucy4gIEl0IGRvZXMgbm90IGluY2x1ZGUgc291cmNlIGNvZGUgZm9yIG1vZHVsZXMgb3IKKyAgIGZpbGVzIHRoYXQgdHlwaWNhbGx5IGFjY29tcGFueSB0aGUgbWFqb3IgY29tcG9uZW50cyBvZiB0aGUgb3BlcmF0aW5nCisgICBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgZmlsZSBydW5zLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIDxjb3B5cmlnaHQgaG9sZGVyPiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTCitPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUgorTk9OLUlORlJJTkdFTUVOVCwgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCA8Y29weXJpZ2h0IGhvbGRlcj4KK0JFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCitTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKK0lOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCitDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCisKK1tDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMsIDE5OTQsIDE5OTUKKyAgICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuXQorCisKK1tDb3B5cmlnaHQgKGMpIDE5OTUsIDE5OTYKKyAgICAgVGhlIFByZXNpZGVudCBhbmQgRmVsbG93cyBvZiBIYXJ2YXJkIFVuaXZlcnNpdHkuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEhBUlZBUkQgQU5EIElUUyBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBIQVJWQVJEIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLl0KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL1NtYXJ0TGFicyBiL2xpY2Vuc2VzL1NtYXJ0TGFicwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2Y2Mjk5Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvU21hcnRMYWJzCkBAIC0wLDAgKzEsNDIgQEAKKyhjKSBTbWFydExhYnMgTExDLCAyMDA4LTIwMDkKKworRnJlZXdhcmUgTGljZW5jZSBBZ3JlZW1lbnQKK1RoaXMgbGljZW5jZSBhZ3JlZW1lbnQgb25seSBhcHBsaWVzIHRvIHRoZSBmcmVlIHZlcnNpb24gb2YgdGhpcyBzb2Z0d2FyZS4KKworVGVybXMgYW5kIENvbmRpdGlvbnMKK0JZIERPV05MT0FESU5HLCBJTlNUQUxMSU5HLCBVU0lORywgVFJBTlNNSVRUSU5HLCBESVNUUklCVVRJTkcgT1IgQ09QWUlORyBUSElTIFNPRlRXQVJFICgiVEhFIFNPRlRXQVJFIiksIFlPVSBBR1JFRSBUTyBUSEUgVEVSTVMgT0YgVEhJUyBBR1JFRU1FTlQgKElOQ0xVRElORyBUSEUgU09GVFdBUkUgTElDRU5DRSBBTkQgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSkgV0lUSCBTbWFydExhYnMgTExDICh3aXRoIHRoZSBidXNpbmVzcyBhZGRyZXNzIGF0IDcyLCBPa3R5YWJyc2thdGEgc3RyLiwgMTI3NTIxIE1vc2NvdywgUnVzc2lhKSBUSEUgT1dORVIgT0YgQUxMIFJJR0hUUyBJTiBSRVNQRUNUIE9GIFRIRSBTT0ZUV0FSRS4gCisKK1BMRUFTRSBSRUFEIFRISVMgRE9DVU1FTlQgQ0FSRUZVTExZIEJFRk9SRSBVU0lORyBUSEUgU09GVFdBUkUuIAorCitJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIEFOWSBPRiBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTkNFIFRIRU4gRE8gTk9UIERPV05MT0FELCBJTlNUQUxMLCBVU0UsIFRSQU5TTUlULCBESVNUUklCVVRFIE9SIENPUFkgVEhFIFNPRlRXQVJFLiAKKworVEhJUyBET0NVTUVOVCBDT05TVElUVUVTIEEgTElDRU5DRSBUTyBVU0UgVEhFIFNPRlRXQVJFIE9OIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBBUFBFQVJJTkcgQkVMT1cuIAorCitUaGUgU29mdHdhcmUgaXMgbGljZW5zZWQgdG8geW91IHdpdGhvdXQgY2hhcmdlIGZvciB1c2Ugb25seSB1cG9uIHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2VuY2UsIGFuZCBTbWFydExhYnMgTExDIHJlc2VydmVzIGFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIHRvIHlvdS4gU21hcnRMYWJzIExMQyByZXRhaW5zIG93bmVyc2hpcCBvZiBhbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZS4gCisKKzEuIExpY2VuY2UKK1lvdSBtYXkgdXNlIHRoZSBTb2Z0d2FyZSB3aXRob3V0IGNoYXJnZS4gCisKK1lvdSBtYXkgZGlzdHJpYnV0ZSBleGFjdCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlIHRvIGFueW9uZS4gCisKKzIuIFJlc3RyaWN0aW9ucworU21hcnRMYWJzIExMQyByZXNlcnZlcyB0aGUgcmlnaHQgdG8gcmV2b2tlIHRoZSBhYm92ZSBkaXN0cmlidXRpb24gcmlnaHQgYXQgYW55IHRpbWUsIGZvciBhbnkgb3Igbm8gcmVhc29uLiAKKworWU9VIE1BWSBOT1QgTU9ESUZZLCBBREFQVCwgVFJBTlNMQVRFLCBSRU5ULCBMRUFTRSwgTE9BTiwgU0VMTCwgUkVRVUVTVCBET05BVElPTlMgT1IgQ1JFQVRFIERFUklWQVRFIFdPUktTIEJBU0VEIFVQT04gVEhFIFNPRlRXQVJFIE9SIEFOWSBQQVJUIFRIRVJFT0YuIAorCitUaGUgU29mdHdhcmUgY29udGFpbnMgdHJhZGUgc2VjcmV0cyBhbmQgdG8gcHJvdGVjdCB0aGVtIHlvdSBtYXkgbm90IGRlY29tcGlsZSwgcmV2ZXJzZSBlbmdpbmVlciwgZGlzYXNzZW1ibGUgb3Igb3RoZXJ3aXNlIHJlZHVjZSB0aGUgU29mdHdhcmUgdG8gYSBodW1hbmx5IHBlcmNlaXZhYmxlIGZvcm0uIFlvdSBhZ3JlZSBub3QgdG8gZGl2dWxnZSwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgdW50aWwgc3VjaCB0cmFkZSBzZWNyZXRzIGNlYXNlIHRvIGJlIGNvbmZpZGVudGlhbCwgZm9yIGFueSByZWFzb24gbm90IHlvdXIgb3duIGZhdWx0LiAKKworMy4gVGVybWluYXRpb24KK1RoaXMgbGljZW5jZSBpcyBlZmZlY3RpdmUgdW50aWwgdGVybWluYXRlZC4gVGhlIExpY2VuY2Ugd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSB3aXRob3V0IG5vdGljZSBmcm9tIFNtYXJ0TGFicyBMTEMgaWYgeW91IGZhaWwgdG8gY29tcGx5IHdpdGggYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2VuY2UuIFVwb24gdGVybWluYXRpb24geW91IG11c3QgZGVzdHJveSB0aGUgU29mdHdhcmUgYW5kIGFsbCBjb3BpZXMgdGhlcmVvZi4gWW91IG1heSB0ZXJtaW5hdGUgdGhpcyBMaWNlbmNlIGF0IGFueSB0aW1lIGJ5IGRlc3Ryb3lpbmcgdGhlIFNvZnR3YXJlIGFuZCBhbGwgY29waWVzIHRoZXJlb2YuIFVwb24gdGVybWluYXRpb24gb2YgdGhpcyBsaWNlbmNlIGZvciBhbnkgcmVhc29uIHlvdSBzaGFsbCBjb250aW51ZSB0byBiZSBib3VuZCBieSB0aGUgcHJvdmlzaW9ucyBvZiBTZWN0aW9uIDIgYWJvdmUuIFRlcm1pbmF0aW9uIHdpbGwgYmUgd2l0aG91dCBwcmVqdWRpY2UgdG8gYW55IHJpZ2h0cyBTbWFydExhYnMgTExDIG1heSBoYXZlIGFzIGEgcmVzdWx0IG9mIHRoaXMgYWdyZWVtZW50LiAKKworNC4gRGlzY2xhaW1lciBvZiBXYXJyYW50eSwgTGltaXRhdGlvbiBvZiBSZW1lZGllcworVE8gVEhFIEZVTEwgRVhURU5UIFBFUk1JVFRFRCBCWSBMQVcsIFNtYXJ0TGFicyBMTEMgSEVSRUJZIEVYQ0xVREVTIEFMTCBDT05ESVRJT05TIEFORCBXQVJSQU5USUVTLCBXSEVUSEVSIElNUE9TRUQgQlkgU1RBVFVURSBPUiBCWSBPUEVSQVRJT04gT0YgTEFXIE9SIE9USEVSV0lTRSwgTk9UIEVYUFJFU1NMWSBTRVQgT1VUIEhFUkVJTi4gVEhFIFNPRlRXQVJFLCBBTkQgQUxMIEFDQ09NUEFOWUlORyBGSUxFUywgREFUQSBBTkQgTUFURVJJQUxTIEFSRSBESVNUUklCVVRFRCAiQVMgSVMiIEFORCBXSVRIIE5PIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQsIFdIRVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELiBTbWFydExhYnMgTExDIERPRVMgTk9UIFdBUlJBTlQsIEdVQVJBTlRFRSBPUiBNQUtFIEFOWSBSRVBSRVNFTlRBVElPTlMgUkVHQVJESU5HIFRIRSBVU0UsIE9SIFRIRSBSRVNVTFRTIE9GIFRIRSBVU0UsIE9GIFRIRSBTT0ZUV0FSRSBXSVRIIFJFU1BFQ1QgVE8gSVRTIENPUlJFQ1RORVNTLCBBQ0NVUkFDWSwgUkVMSUFCSUxJVFksIENVUlJFTlRORVNTIE9SIE9USEVSV0lTRS4gVEhFIEVOVElSRSBSSVNLIE9GIFVTSU5HIFRIRSBTT0ZUV0FSRSBJUyBBU1NVTUVEIEJZIFlPVS4gU21hcnRMYWJzIExMQyBNQUtFUyBOTyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgV0lUSCBSRVNQRUNUIFRPIFRIRSBTT0ZUV0FSRS4gTk8gT1JBTCBPUiBXUklUVEVOIElORk9STUFUSU9OIE9SIEFEVklDRSBHSVZFTiBCWSBTbWFydExhYnMgTExDLCBJVCdTIERJU1RSSUJVVE9SUywgQUdFTlRTIE9SIEVNUExPWUVFUyBTSEFMTCBDUkVBVEUgQSBXQVJSQU5UWSwgQU5EIFlPVSBNQVkgTk9UIFJFTFkgT04gQU5ZIFNVQ0ggSU5GT1JNQVRJT04gT1IgQURWSUNFLiAKKworSU1QT1JUQU5UIE5PVEU6IE5vdGhpbmcgaW4gdGhpcyBBZ3JlZW1lbnQgaXMgaW50ZW5kZWQgb3Igc2hhbGwgYmUgY29uc3RydWVkIGFzIGV4Y2x1ZGluZyBvciBtb2RpZnlpbmcgYW55IHN0YXR1dG9yeSByaWdodHMsIHdhcnJhbnRpZXMgb3IgY29uZGl0aW9ucyB3aGljaCBieSB2aXJ0dWUgb2YgYW55IG5hdGlvbmFsIG9yIHN0YXRlIEZhaXIgVHJhZGluZywgVHJhZGUgUHJhY3RpY2VzIG9yIG90aGVyIHN1Y2ggY29uc3VtZXIgbGVnaXNsYXRpb24gbWF5IG5vdCBiZSBtb2RpZmllZCBvciBleGNsdWRlZC4gSWYgcGVybWl0dGVkIGJ5IHN1Y2ggbGVnaXNsYXRpb24sIGhvd2V2ZXIsIFNtYXJ0TGFicyBMTEMnIGxpYWJpbGl0eSBmb3IgYW55IGJyZWFjaCBvZiBhbnkgc3VjaCB3YXJyYW50eSBvciBjb25kaXRpb24gc2hhbGwgYmUgYW5kIGlzIGhlcmVieSBsaW1pdGVkIHRvIHRoZSBzdXBwbHkgb2YgdGhlIFNvZnR3YXJlIGxpY2Vuc2VkIGhlcmV1bmRlciBhZ2FpbiBhcyBTbWFydExhYnMgTExDIGF0IGl0cyBzb2xlIGRpc2NyZXRpb24gbWF5IGRldGVybWluZSB0byBiZSBuZWNlc3NhcnkgdG8gY29ycmVjdCB0aGUgc2FpZCBicmVhY2guIAorCitJTiBOTyBFVkVOVCBTSEFMTCBTbWFydExhYnMgTExDIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgQlVTSU5FU1MgUFJPRklUUywgQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBBTkQgVEhFIExPU1MgT0YgQlVTSU5FU1MgSU5GT1JNQVRJT04gT1IgQ09NUFVURVIgUFJPR1JBTVMpLCBFVkVOIElGIFNtYXJ0TGFicyBMTEMgT1IgQU5ZIFNtYXJ0TGFicyBMTEMgUkVQUkVTRU5UQVRJVkUgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBJTiBBRERJVElPTiwgSU4gTk8gRVZFTlQgRE9FUyBTbWFydExhYnMgTExDIEFVVEhPUklTRSBZT1UgVE8gVVNFIFRIRSBTT0ZUV0FSRSBJTiBTSVRVQVRJT05TIFdIRVJFIEZBSUxVUkUgT0YgVEhFIFNPRlRXQVJFIFRPIFBFUkZPUk0gQ0FOIFJFQVNPTkFCTFkgQkUgRVhQRUNURUQgVE8gUkVTVUxUIElOIEEgUEhZU0lDQUwgSU5KVVJZLCBPUiBJTiBMT1NTIE9GIExJRkUuIEFOWSBTVUNIIFVTRSBCWSBZT1UgSVMgRU5USVJFTFkgQVQgWU9VUiBPV04gUklTSywgQU5EIFlPVSBBR1JFRSBUTyBIT0xEIFNtYXJ0TGFicyBMTEMgSEFSTUxFU1MgRlJPTSBBTlkgQ0xBSU1TIE9SIExPU1NFUyBSRUxBVElORyBUTyBTVUNIIFVOQVVUSE9SSVNFRCBVU0UuIAorCis1LiBHZW5lcmFsCitBbGwgcmlnaHRzIG9mIGFueSBraW5kIGluIHRoZSBTb2Z0d2FyZSB3aGljaCBhcmUgbm90IGV4cHJlc3NseSBncmFudGVkIGluIHRoaXMgQWdyZWVtZW50IGFyZSBlbnRpcmVseSBhbmQgZXhjbHVzaXZlbHkgcmVzZXJ2ZWQgdG8gYW5kIGJ5IFNtYXJ0TGFicyBMTEMuIAorCitUaGlzIGFncmVlbWVudCBjb250YWlucyB0aGUgZW50aXJlIEFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIGhlcmV0byB3aXRoIHJlc3BlY3QgdG8gdGhlIHN1YmplY3QgbWF0dGVyIGhlcmVvZiwgYW5kIHN1cGVyc2VkZXMgYWxsIHByaW9yIGFncmVlbWVudHMgYW5kL29yIHVuZGVyc3RhbmRpbmdzIChvcmFsIG9yIHdyaXR0ZW4pLiBGYWlsdXJlIG9yIGRlbGF5IGJ5IFNtYXJ0TGFicyBMTEMgaW4gZW5mb3JjaW5nIGFueSByaWdodCBvciBwcm92aXNpb24gaGVyZW9mIHNoYWxsIG5vdCBiZSBkZWVtZWQgYSB3YWl2ZXIgb2Ygc3VjaCBwcm92aXNpb24gb3IgcmlnaHQgd2l0aCByZXNwZWN0IHRvIHRoZSBpbnN0YW50IG9yIGFueSBzdWJzZXF1ZW50IGJyZWFjaC4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBzaGFsbCBiZSBoZWxkIGJ5IGEgY291cnQgb2YgY29tcGV0ZW50IGp1cmlzZGljdGlvbiB0byBiZSBjb250cmFyeSB0byBsYXcsIHRoYXQgcHJvdmlzaW9uIHdpbGwgYmUgZW5mb3JjZWQgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pc3NpYmxlLCBhbmQgdGhlIHJlbWFpbmluZyBwcm92aXNpb25zIG9mIHRoaXMgQWdyZWVtZW50IHdpbGwgcmVtYWluIGluIGZvcmNlIGFuZCBlZmZlY3QuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9TcGVlZFRvdWNoLVVTQi1GaXJtd2FyZSBiL2xpY2Vuc2VzL1NwZWVkVG91Y2gtVVNCLUZpcm13YXJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyYmUxZTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9TcGVlZFRvdWNoLVVTQi1GaXJtd2FyZQpAQCAtMCwwICsxLDg5IEBACitUSElTIFNPRlRXQVJFIExJQ0VOU0UgQUdSRUVNRU5UIChUSElTICJBR1JFRU1FTlQiKSBJUyBBIExFR0FMTFkgQklORElORworQUdSRUVNRU5UIEJFVFdFRU4gVEhFIERFVkVMT1BFUiBPRiBUSEUgU09GVFdBUkUgKFRIRSAiREVWRUxPUEVSIikgQU5EIFRIT01TT04KK01VTFRJTUVESUEgQlJPQURCQU5EIEJFTEdJVU0gTi5WLiAoIlRIT01TT04iKS4gQlkgVVNJTkcgT1IgSU5TVEFMTElORyBUSEUKK1NPRlRXQVJFIChBUyBVUERBVEVEIEJZIFRIT01TT04gRlJPTSBUSU1FIFRPIFRJTUUsIFRIRSAiU09GVFdBUkUiKSBUSEUgREVWRUxPUEVSCitJUyBBQ0NFUFRJTkcgVE8gQkUgQk9VTkQgQlkgQUxMIE9GIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVC4KKworMS4gR3JhbnQgb2YgTGljZW5zZS4gVGhlIFNvZnR3YXJlIGFuZCBhbGwgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24sIGluY2x1ZGluZworYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBJbnRlcmZhY2UgU3BlY2lmaWNhdGlvbiAodGhlICJEb2N1bWVudGF0aW9uKSBhcmUgbGljZW5zZWQKK3RvIHRoZSBEZXZlbG9wZXIgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHNldCBmb3J0aCBpbiB0aGlzIEFncmVlbWVudC4KK1N1YmplY3QgdG8gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucywgVGhvbXNvbiBoZXJlYnkgZ3JhbnRzIHRvIHRoZSBEZXZlbG9wZXIgYQorbm9uLWV4Y2x1c2l2ZSwgbm9udHJhbnNmZXJhYmxlIHJpZ2h0IHRvIHVzZSB0aGUgU29mdHdhcmUgYW5kIHRoZSBEb2N1bWVudGF0aW9uCitzb2xlbHkgaW4gY29tYmluYXRpb24gd2l0aCBUaG9tc29uJ3MgbGluZSBvZiBTcGVlZFRvdWNoIFVTQiBBRFNMIG1vZGVtIHByb2R1Y3RzOword2hpY2ggYXJlIHJpZ2h0ZnVsbHkgYWNxdWlyZWQgYW5kL29yIHVzZWQgYnkgdGhlIERldmVsb3BlciAoTGljZW5zZWUpLgorCisyLiBMaW1pdGF0aW9ucyBvbiBVc2UuIFRoZSBEZXZlbG9wZXIgd2lsbCBub3QgbW9kaWZ5IG9yIHRyYW5zbGF0ZSB0aGUgU29mdHdhcmUKK29yIHRoZSBEb2N1bWVudGF0aW9uIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBUaG9tc29uLiBUaGUgRGV2ZWxvcGVyCit3aWxsIG5vdCByZXZlcnNlIGVuZ2luZWVyLCBkZWNvbXBpbGUsIGRpc2Fzc2VtYmxlIG9yIG90aGVyd2lzZSBhdHRlbXB0IHRvCityZWNyZWF0ZSB0aGUgc291cmNlIGNvZGUgb2YgdGhlIFNvZnR3YXJlLiBUaGUgRGV2ZWxvcGVyIHdpbGwgbm90IHNlcGFyYXRlIGZyb20KK3RoZSBTb2Z0d2FyZSBhbnkgb2YgdGhlIGNvbXBvbmVudCBwYXJ0cyBvZiB0aGUgU29mdHdhcmUuCisKKzMuIExpbWl0YXRpb25zIG9uIER1cGxpY2F0aW9uLiBUaGUgRGV2ZWxvcGVyIHdpbGwgbm90IG1ha2UgYW55IGNvcGllcyBvZiB0aGUKK1NvZnR3YXJlIG9yIHRoZSBEb2N1bWVudGF0aW9uOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCB0aGUgRGV2ZWxvcGVyIG1heSBtYWtlCitvbmUgY29tcGxldGUgY29weSBvZiB0aGUgU29mdHdhcmUgb3IgdGhlIERvY3VtZW50YXRpb24gc29sZWx5IGZvciBiYWNrdXAKK3B1cnBvc2VzIGlmIHN1Y2ggY29weSBvZiB0aGUgU29mdHdhcmUgb3IgRG9jdW1lbnRhdGlvbiBjb250YWlucyB0aGUgbm90YXRpb24KKyJDb3B5cmlnaHQgVGhvbXNvbiIuIFRoZSBEZXZlbG9wZXIgd2lsbCBub3QgcHJpbnQgYW55IG9uLWxpbmUgb3IgZWxlY3Ryb25pYworZG9jdW1lbnRhdGlvbiBvdGhlciB0aGFuIHNvbGVseSBmb3IgZGV2ZWxvcGluZywgc2VydmljaW5nLCBvcGVyYXRpbmcgb3IgdHJhaW5pbmcKK3B1cnBvc2VzLgorCis0LiBMaW1pdGF0aW9ucyBvbiBUcmFuc2Zlci4gVGhlIERldmVsb3BlciB3aWxsIG5vdCBzZWxsLCByZW50LCBsZWFzZSBvcgorb3RoZXJ3aXNlIHRyYW5zZmVyIGFueSBvciBhbGwgb2YgdGhlIFNvZnR3YXJlLCB0aGUgRG9jdW1lbnRhdGlvbiBvciBhbnkgY29waWVzCit0aGVyZW9mLCB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgVGhvbXNvbi4gVGhlIERldmVsb3BlciB3aWxsIG5vdAorc3VibGljZW5zZSwgYXNzaWduLCBkZWxlZ2F0ZSwgcmVudCwgbGVhc2Ugb3Igb3RoZXJ3aXNlIHRyYW5zZmVyIGFueSBvciBhbGwgb2YKK2l0cyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQuCisKKzUuIE93bmVyc2hpcCBhbmQgQ29weXJpZ2h0LiBUaGUgRGV2ZWxvcGVyIGhhcyBub3QgYWNxdWlyZWQsIGJ5IHZpcnR1ZSBvZiB0aGlzCitBZ3JlZW1lbnQsIGFueSByaWdodCBvZiBvd25lcnNoaXAgaW4gb3IgdG8gdGhlIFNvZnR3YXJlLCB0aGUgRG9jdW1lbnRhdGlvbiBvcgorYW55IHJlbGF0ZWQgcGF0ZW50LCBjb3B5cmlnaHQsIHRyYWRlbWFyayBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHQuCitCeSB2aXJ0dWUgb2YgdGhpcyBBZ3JlZW1lbnQsIHRoZSBEZXZlbG9wZXIgaGFzIGFjcXVpcmVkIGEgcmlnaHQgb2Ygb3duZXJzaGlwCitzb2xlbHkgaW4gYW5kIHRvIHRoZSBwaHlzaWNhbCBtZWRpYSBvbiB3aGljaCB0aGUgU29mdHdhcmUgYW5kIHRoZSBEb2N1bWVudGF0aW9uCithcmUgcmVjb3JkZWQgb3IgZml4ZWQuIFRob21zb24sIGl0cyBsaWNlbnNvcnMgYW5kIHRoZWlyIHJlc3BlY3RpdmUgbGljZW5zb3JzCityZXRhaW4gYWxsIHJpZ2h0LCB0aXRsZSBhbmQgaW50ZXJlc3QgaW4gYW5kIHRvIHRoZSBTb2Z0d2FyZSwgdGhlIERvY3VtZW50YXRpb24KK2FuZCBhbnkgYW5kIGFsbCBjb3BpZXMgdGhlcmVvZiwgZXhjZXB0IGZvciB0aGUgcmlnaHRzIGV4cHJlc3NseSBncmFudGVkIHRvIHRoZQorRGV2ZWxvcGVyIHB1cnN1YW50IHRvIHRoaXMgQWdyZWVtZW50IGFuZCBhcyBtYXkgYmUgZ3JhbnRlZCBieSBUaG9tc29uIGZyb20gdGltZQordG8gdGltZS4gU3VjaCByaWdodCwgdGl0bGUgYW5kIGludGVyZXN0IG9mIFRob21zb24gaXMsIGFuZCBzdWNoIHJpZ2h0LCB0aXRsZSBhbmQKK2ludGVyZXN0IG9mIFRob21zb24ncyBsaWNlbnNvcnMgYW5kIHRoZWlyIHJlc3BlY3RpdmUgbGljZW5zb3JzIG1heSBiZSwgcHJvdGVjdGVkCitieSBhcHBsaWNhYmxlIGNvcHlyaWdodCBsYXdzIGFuZCBpbnRlcm5hdGlvbmFsIHRyZWF0aWVzLgorCis2LiBUZXJtIGFuZCBUZXJtaW5hdGlvbi4gVGhlIHRlcm0gb2YgdGhpcyBBZ3JlZW1lbnQgY29tbWVuY2VzIHVwb24gdGhlIGZpcnN0IHVzZQorYnkgdGhlIERldmVsb3BlciBvZiB0aGUgU29mdHdhcmUgYW5kIGV4cGlyZXMgdXBvbiB0aGUgdGVybWluYXRpb24gb2YgdGhpcworQWdyZWVtZW50IHdoaWNoIHNoYWxsIGF1dG9tYXRpY2FsbHkgb2NjdXIgaW4gY2FzZSB0aGUgTGljZW5zZWUgc3RvcHMgdXNpbmcgdGhlCitTcGVlZFRvdWNoIFVTQiBBRFNMIG1vZGVtIHByb2R1Y3RzLiBJZiB0aGUgRGV2ZWxvcGVyIGZhaWxzIHRvIGNvbXBseSB3aXRoIGFueSBvZgordGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHNldCBmb3J0aCBpbiB0aGlzIEFncmVlbWVudCwgdGhlbiAoYSkgdGhpcyBBZ3JlZW1lbnQKK3dpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUsIChiKSBpbiB0aGUgZXZlbnQgb2Ygc3VjaCB0ZXJtaW5hdGlvbiwgdGhlCitEZXZlbG9wZXIgd2lsbCAoaSkgZGVzdHJveSBvciBwZXJtYW5lbnRseSBlcmFzZSB0aGUgU29mdHdhcmUgYW5kIGFueSBhbmQgYWxsCitjb3BpZXMgdGhlcmVvZiBhbmQgKGlpKSBkZXN0cm95IHRoZSBEb2N1bWVudGF0aW9uIGFuZCBhbnkgYW5kIGFsbCBjb3BpZXMKK3RoZXJlb2YsIGFuZCAoYykgVGhvbXNvbiBtYXkgZXhlcmNpc2UgYW55IG9yIGFsbCByZW1lZGllcyBhdmFpbGFibGUgdG8gaXQgdW5kZXIKK2FwcGxpY2FibGUgbGF3cy4gSW4gYWRkaXRpb24sIHRoZSBEZXZlbG9wZXIgbWF5IHRlcm1pbmF0ZSB0aGlzIEFncmVlbWVudCBhdCBhbnkKK3RpbWUgYnkgKGEpIGRlc3Ryb3lpbmcgb3IgcGVybWFuZW50bHkgZXJhc2luZyB0aGUgU29mdHdhcmUgYW5kIGFueSBhbmQgYWxsCitjb3BpZXMgdGhlcmVvZiBhbmQgKGIpIGRlc3Ryb3lpbmcgdGhlIERvY3VtZW50YXRpb24gYW5kIGFueSBhbmQgYWxsIGNvcGllcwordGhlcmVvZi4KKworNy4gTk8gV0FSUkFOVElFUy4gVEhFIFNPRlRXQVJFIElTIE1BREUgQVZBSUxBQkxFIFRPIFRIRSBERVZFTE9QRVIgT04gQU4gIkFTIElTIgorQkFTSVMgV0lUSE9VVCBBTlkgRVhQUkVTUywgSU1QTElFRCBPUiBTVEFUVVRPUlkgV0FSUkFOVElFUyBXSEFUU09FVkVSLCBJTkNMVURJTkcKK1dJVEhPVVQgTElNSVRBVElPTiBBTlkgSU1QTElFRCBXQVJSQU5UWSBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQQorUEFSVElDVUxBUiBQVVJQT1NFLiBTb21lIGp1cmlzZGljdGlvbnMgbWF5IG5vdCBwZXJtaXQgdGhlIGV4Y2x1c2lvbiBvZiBpbXBsaWVkCit3YXJyYW50aWVzOyBzbyB0aGUgYWJvdmUgZXhjbHVzaW9uIG1heSBub3QgYXBwbHkgdG8gdGhlIERldmVsb3Blci4gVGhlIERldmVsb3BlcgorbWF5IGhhdmUgb3RoZXIgcmlnaHRzIHRoYXQgdmFyeSBmcm9tIGp1cmlzZGljdGlvbiB0byBqdXJpc2RpY3Rpb24uIFRob21zb24gbWF5Citmcm9tIHRpbWUgdG8gdGltZSwgaW4gaXRzIHNvbGUgZGlzY3JldGlvbiwgbWFrZSBhdmFpbGFibGUgdG8gdGhlIERldmVsb3Blciwgd2l0aAorb3Igd2l0aG91dCBjaGFyZ2UsIHVwZGF0ZXMgdG8gdGhlIFNvZnR3YXJlIG9yIHRoZSBEb2N1bWVudGF0aW9uLiBObyBzdWNoIGFjdGlvbgord2lsbCBjcmVhdGUgYW55IHdhcnJhbnR5IG9ibGlnYXRpb24gb24gdGhlIHBhcnQgb2YgVGhvbXNvbi4KKworOC4gTElNSVRBVElPTiBPRiBSRU1FRElFUy4gSU4gTk8gRVZFTlQgV0lMTCBUSE9NU09OLCBJVFMgTElDRU5TT1JTIE9SIFRIRUlSCitSRVNQRUNUSVZFIExJQ0VOU09SUyBCRSBMSUFCTEUgRk9SIEFOWSBEQU1BR0VTIE9SIE9USEVSIFJFTElFRiBXSEFUU09FVkVSCitBUklTSU5HIE9VVCBPRiBERVZFTE9QRVInUyBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgU09GVFdBUkUgT1IgVEhFCitET0NVTUVOVEFUSU9OLCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIExPU1QgUFJPRklUUywgTE9TVCBCVVNJTkVTUyBPUiBMT1NUCitPUFBPUlRVTklUWSBPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIE9SIEVYRU1QTEFSWSBEQU1BR0VTIE9SCitMRUdBTCBGRUVTIEFSSVNJTkcgT1VUIE9GIFNVQ0ggVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFNPRlRXQVJFLCBFVkVOIElGCitUSE9NU09OLCBJVFMgTElDRU5TT1JTIE9SIFRIRUlSIFJFU1BFQ1RJVkUgTElDRU5TT1JTIEhBVkUgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBTb21lIGp1cmlzZGljdGlvbnMgbWF5IG5vdCBwZXJtaXQgdGhlIGV4Y2x1c2lvbiBvcgorbGltaXRhdGlvbiBvZiBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlczsgc28gdGhlIGFib3ZlIGV4Y2x1c2lvbiBvcgorbGltaXRhdGlvbiBtYXkgbm90IGFwcGx5IHRvIHRoZSBEZXZlbG9wZXIuCisKKzkuIEdvdmVybmluZyBMYXcuIFRoaXMgQWdyZWVtZW50IHdpbGwgYmUgZ292ZXJuZWQgYnkgYW5kIGNvbnN0cnVlZCBpbiBhY2NvcmRhbmNlCit3aXRoIHRoZSBsYXdzIG9mIEJlbGdpdW0sIHdpdGhvdXQgZ2l2aW5nIGVmZmVjdCB0byB0aGUgY29uZmxpY3RzIG9mIGxhd3MKK3ByaW5jaXBsZXMgdGhlcmVvZi4KKworMTAuIE90aGVyIFRlcm1zLiBBZGRpdGlvbmFsIG9yIGRpZmZlcmVudCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBtYXkgYmUgYXBwbGljYWJsZQordG8gdGhlIERldmVsb3BlciBpZiBzbyBhZ3JlZWQgaW4gd3JpdGluZyBieSB0aGUgdmVuZG9yIG9mIHRoZSBTb2Z0d2FyZSwgVGhvbXNvbiwKK2l0cyBsaWNlbnNvcnMgYW5kL29yIHRoZWlyIHJlc3BlY3RpdmUgbGljZW5zb3JzLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvU3BpY2UtMS4xIGIvbGljZW5zZXMvU3BpY2UtMS4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MzVhMzMKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9TcGljZS0xLjEKQEAgLTAsMCArMSw0OCBAQAorLyoKKworID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKyAgICAgICAgICAgICAgICAgICAgIFRoZSBTcGljZSBTb2Z0d2FyZSBMaWNlbnNlLCBWZXJzaW9uIDEuMQorID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworIENvcHlyaWdodCAoQykgMTk5OS0yMDA1IFRoZSBTcGljZSBHcm91cC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYS0KKyB0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2YgIHNvdXJjZSBjb2RlIG11c3QgIHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0ICBub3RpY2UsCisgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAzLiBUaGUgZW5kLXVzZXIgZG9jdW1lbnRhdGlvbiBpbmNsdWRlZCB3aXRoIHRoZSByZWRpc3RyaWJ1dGlvbiwgaWYgYW55LCBtdXN0CisgICAgaW5jbHVkZSAgdGhlIGZvbGxvd2luZyAgYWNrbm93bGVkZ21lbnQ6ICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzICBzb2Z0d2FyZQorICAgIGRldmVsb3BlZCAgYnkgdGhlICBTcGljZSBHcm91cCAoaHR0cDovL3NwaWNlLmNvZGVoYXVzLm9yZy8pLiIKKyAgICBBbHRlcm5hdGVseSwgdGhpcyAgYWNrbm93bGVkZ21lbnQgbWF5ICBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwgIGlmCisgICAgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KKworIDQuIFRoZSBuYW1lcyAiU3BpY2UiIGFuZCAiU3BpY2UgR3JvdXAiIG11c3Qgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvcgorICAgIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgIHNvZnR3YXJlIHdpdGhvdXQgIHByaW9yIHdyaXR0ZW4KKyAgICBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBzcGljZS1kZXZAc3BpY2UuY29kZWhhdXMub3JnLgorCisgNS4gUHJvZHVjdHMgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgIGJlIGNhbGxlZCAiU3BpY2UiLCBub3IKKyAgICBtYXkgIlNwaWNlIiBhcHBlYXIgIGluIHRoZWlyIG5hbWUsICB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbgorICAgIG9mIFRoZSBTcGljZSBHcm91cC4KKworIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5ECisgRklUTkVTUyAgRk9SIEEgUEFSVElDVUxBUiAgUFVSUE9TRSBBUkUgIERJU0NMQUlNRUQuICBJTiBOTyAgRVZFTlQgU0hBTEwgIFRIRQorIEFQQUNIRSBTT0ZUV0FSRSAgRk9VTkRBVElPTiAgT1IgSVRTIENPTlRSSUJVVE9SUyAgQkUgTElBQkxFIEZPUiAgQU5ZIERJUkVDVCwKKyBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCAgREFNQUdFUyAoSU5DTFUtCisgRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCAgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworIE9GIFVTRSwgREFUQSwgT1IgIFBST0ZJVFM7IE9SIEJVU0lORVNTICBJTlRFUlJVUFRJT04pICBIT1dFVkVSIENBVVNFRCBBTkQgT04KKyBBTlkgIFRIRU9SWSBPRiBMSUFCSUxJVFksICBXSEVUSEVSICBJTiBDT05UUkFDVCwgIFNUUklDVCBMSUFCSUxJVFksICBPUiBUT1JUCisgKElOQ0xVRElORyAgTkVHTElHRU5DRSBPUiAgT1RIRVJXSVNFKSBBUklTSU5HIElOICBBTlkgV0FZIE9VVCBPRiBUSEUgIFVTRSBPRgorIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKyBUaGlzIHNvZnR3YXJlICBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlICBieSBtYW55IGluZGl2aWR1YWxzCisgb24gIGJlaGFsZiBvZiBUaGUgU3BpY2UgR3JvdXAuIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIFRoZSBTcGljZSBHcm91cCwgCisgcGxlYXNlIHNlZSA8aHR0cDovL3NwaWNlLmNvZGVoYXVzLm9yZy8+LgorCisqLwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvU3BvdGlmeSBiL2xpY2Vuc2VzL1Nwb3RpZnkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDJjNzEzYQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL1Nwb3RpZnkKQEAgLTAsMCArMSw0IEBACitTcG90aWZ5IGhhcyBhbiBlbmQtdXNlciBsaWNlbnNlIGFncmVlbWVudCBnb3Zlcm5pbmcgdGhlaXIgc2VydmljZSBhbmQgc29mdHdhcmUKK3RoYXQgdGhleSBjaGFuZ2UgZnJvbSB0aW1lIHRvIHRpbWUuICBQbGVhc2UgcmVmZXIgdG8gdGhlaXIgd2Vic2l0ZSBmb3IgZGV0YWlscy4KK0l0IGlzIG5vdCBjbGVhciB0aGF0IHJlZGlzdHJpYnV0aW9uIG9mIHRoZWlyIHNvZnR3YXJlIGlzIHBlcm1pc3NpYmxlLgoraHR0cHM6Ly93d3cuc3BvdGlmeS5jb20vdXMvbGVnYWwvZW5kLXVzZXItYWdyZWVtZW50LwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvU3ByZWFkLTEuMCBiL2xpY2Vuc2VzL1NwcmVhZC0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE2M2RhNgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL1NwcmVhZC0xLjAKQEAgLTAsMCArMSw2OCBAQAorU3ByZWFkIE9wZW4tU291cmNlIExpY2Vuc2UgLS0gVmVyc2lvbiAxLjAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitDb3B5cmlnaHQgKGMpIDE5OTMtMjAwMSBTcHJlYWQgQ29uY2VwdHMgTExDLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCittZXQ6CisKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIHJlcXVlc3QgYW5kCisgICBkaXNjbGFpbWVyLgorCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyByZXF1ZXN0IGFuZAorICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgICB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKzMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgKGluY2x1ZGluZyB3ZWIgcGFnZXMpIG1lbnRpb25pbmcgZmVhdHVyZXMKKyAgIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCBvciBzb2Z0d2FyZSB0aGF0IHVzZXMgdGhpcyBzb2Z0d2FyZSwgbXVzdAorICAgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAiVGhpcyBwcm9kdWN0IHVzZXMgc29mdHdhcmUKKyAgIGRldmVsb3BlZCBieSBTcHJlYWQgQ29uY2VwdHMgTExDIGZvciB1c2UgaW4gdGhlIFNwcmVhZCB0b29sa2l0LiBGb3IKKyAgIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgU3ByZWFkIHNlZSBodHRwOi8vd3d3LnNwcmVhZC5vcmciCisKKzQuIFRoZSBuYW1lcyAiU3ByZWFkIiBvciAiU3ByZWFkIHRvb2xraXQiIG11c3Qgbm90IGJlIHVzZWQgdG8gZW5kb3JzZQorICAgb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHByaW9yCisgICB3cml0dGVuIHBlcm1pc3Npb24uCisKKzUuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKyAgIGFja25vd2xlZGdtZW50OiAiVGhpcyBwcm9kdWN0IHVzZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IFNwcmVhZAorICAgQ29uY2VwdHMgTExDIGZvciB1c2UgaW4gdGhlIFNwcmVhZCB0b29sa2l0LiBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dAorICAgU3ByZWFkLCBzZWUgaHR0cDovL3d3dy5zcHJlYWQub3JnIgorCis2LiBUaGlzIGxpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgYW5kIGNvbnN0cnVlZCBhbmQgZW5mb3JjZWQgaW4KKyAgIGFjY29yZGFuY2Ugd2l0aCB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgTWFyeWxhbmQsIHdpdGhvdXQKKyAgIHJlZmVyZW5jZSB0byBpdHMgY29uZmxpY3RzIG9mIGxhdyBwcm92aXNpb25zLiBUaGUgZXhjbHVzaXZlCisgICBqdXJpc2RpY3Rpb24gYW5kIHZlbnVlIGZvciBhbGwgbGVnYWwgYWN0aW9ucyByZWxhdGluZyB0byB0aGlzCisgICBsaWNlbnNlIHNoYWxsIGJlIGluIGNvdXJ0cyBvZiBjb21wZXRlbnQgc3ViamVjdCBtYXR0ZXIganVyaXNkaWN0aW9uCisgICBsb2NhdGVkIGluIHRoZSBTdGF0ZSBvZiBNYXJ5bGFuZC4KKworVE8gVEhFIE1BWElNVU0gRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVywgU1BSRUFEIElTIFBST1ZJREVECitVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gQVMgSVMgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsCitFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTCitUSEFUIFNQUkVBRCBJUyBGUkVFIE9GIERFRkVDVFMsIE1FUkNIQU5UQUJMRSwgRklUIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuIEFMTCBXQVJSQU5USUVTIEFSRSBESVNDTEFJTUVEIEFORCBUSEUKK0VOVElSRSBSSVNLIEFTIFRPIFRIRSBRVUFMSVRZIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgQ09ERSBJUyBXSVRICitZT1UuIFNIT1VMRCBBTlkgQ09ERSBQUk9WRSBERUZFQ1RJVkUgSU4gQU5ZIFJFU1BFQ1QsIFlPVSAoTk9UIFRIRQorQ09QWVJJR0hUIEhPTERFUiBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1IpIEFTU1VNRSBUSEUgQ09TVCBPRiBBTlkKK05FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkKK0NPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gVVNFIE9GIEFOWSBDT0RFIElTCitBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLgorCitUTyBUSEUgTUFYSU1VTSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBTSEFMTAorVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SIEJFIExJQUJMRSBGT1IgQU5ZCitTUEVDSUFMLCBJTkNJREVOVEFMLCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEZPUiBMT1NTIE9GCitQUk9GSVRTLCBSRVZFTlVFLCBPUiBGT1IgTE9TUyBPRiBJTkZPUk1BVElPTiBPUiBBTlkgT1RIRVIgTE9TUy4KKworWU9VIEVYUFJFU1NMWSBBR1JFRSBUTyBGT1JFVkVSIElOREVNTklGWSwgREVGRU5EIEFORCBIT0xEIEhBUk1MRVNTIFRIRQorQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBPRiBTUFJFQUQgQUdBSU5TVCBBTEwgQ0xBSU1TLAorREVNQU5EUywgU1VJVFMgT1IgT1RIRVIgQUNUSU9OUyBBUklTSU5HIERJUkVDVExZIE9SIElORElSRUNUTFkgRlJPTQorWU9VUiBBQ0NFUFRBTkNFIEFORCBVU0UgT0YgU1BSRUFELgorCitBbHRob3VnaCBOT1QgUkVRVUlSRUQsIHdlIGF0IFNwcmVhZCBDb25jZXB0cyB3b3VsZCBhcHByZWNpYXRlIGl0IGlmCithY3RpdmUgdXNlcnMgb2YgU3ByZWFkIHB1dCBhIGxpbmsgb24gdGhlaXIgd2ViIHNpdGUgdG8gU3ByZWFkJ3Mgd2ViCitzaXRlIHdoZW4gcG9zc2libGUuIFdlIGFsc28gZW5jb3VyYWdlIHVzZXJzIHRvIGxldCB1cyBrbm93IHdobyB0aGV5IAorYXJlLCBob3cgdGhleSBhcmUgdXNpbmcgU3ByZWFkLCBhbmQgYW55IGNvbW1lbnRzIHRoZXkgaGF2ZSB0aHJvdWdoIAorZWl0aGVyIGUtbWFpbCAoc3ByZWFkQHNwcmVhZC5vcmcpIG9yIG91ciB3ZWIgc2l0ZSBhdCAKKyhodHRwOi8vd3d3LnNwcmVhZC5vcmcvY29tbWVudHMpLgorCmRpZmYgLS1naXQgYS9saWNlbnNlcy9TdGFuZm9yZCBiL2xpY2Vuc2VzL1N0YW5mb3JkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyMjQ1MGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9TdGFuZm9yZApAQCAtMCwwICsxLDQ0IEBACisxLiBTVEFORk9SRCBncmFudHMgdG8gTElDRU5TRUUgYSBub25leGNsdXNpdmUgYW5kIG5vbnRyYW5zZmVyYWJsZSBsaWNlbnNlCit0byB1c2UsIGNvcHkgYW5kIG1vZGlmeSB0aGUgY29tcHV0ZXIgc29mdHdhcmUgYGBtcm91dGVkJycgKGhlcmVpbmFmdGVyCitjYWxsZWQgdGhlIGBgUHJvZ3JhbScnKSwgdXBvbiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgaGVyZWluYWZ0ZXIgc2V0CitvdXQgYW5kIHVudGlsIExpY2Vuc2VlIGRpc2NvbnRpbnVlcyB1c2Ugb2YgdGhlIExpY2Vuc2VkIFByb2dyYW0uCisgCisyLiBMSUNFTlNFRSBhY2tub3dsZWRnZXMgdGhhdCB0aGUgUHJvZ3JhbSBpcyBhIHJlc2VhcmNoIHRvb2wgc3RpbGwgaW4KK3RoZSBkZXZlbG9wbWVudCBzdGF0ZSwgdGhhdCBpdCBpcyBiZWluZyBzdXBwbGllZCBgYGFzIGlzLCcnIHdpdGhvdXQgYW55CithY2NvbXBhbnlpbmcgc2VydmljZXMgZnJvbSBTVEFORk9SRCwgYW5kIHRoYXQgdGhpcyBsaWNlbnNlIGlzIGVudGVyZWQKK2ludG8gaW4gb3JkZXIgdG8gZW5jb3VyYWdlIHNjaWVudGlmaWMgY29sbGFib3JhdGlvbiBhaW1lZCBhdCBmdXJ0aGVyCitkZXZlbG9wbWVudCBhbmQgYXBwbGljYXRpb24gb2YgdGhlIFByb2dyYW0uCisgCiszLiBMSUNFTlNFRSBtYXkgY29weSB0aGUgUHJvZ3JhbSBhbmQgbWF5IHN1YmxpY2Vuc2Ugb3RoZXJzIHRvIHVzZSBvYmplY3QKK2NvZGUgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBkZXJpdmF0aXZlIHZlcnNpb24gb2YgdGhlIFByb2dyYW0uCitBbGwgY29waWVzIG11c3QgY29udGFpbiBhbGwgY29weXJpZ2h0IGFuZCBvdGhlciBwcm9wcmlldGFyeSBub3RpY2VzIGZvdW5kCitpbiB0aGUgUHJvZ3JhbSBhcyBwcm92aWRlZCBieSBTVEFORk9SRC4gIFRpdGxlIHRvIGNvcHlyaWdodCB0byB0aGUKK1Byb2dyYW0gcmVtYWlucyB3aXRoIFNUQU5GT1JELgorIAorNC4gTElDRU5TRUUgbWF5IGNyZWF0ZSBkZXJpdmF0aXZlIHZlcnNpb25zIG9mIHRoZSBQcm9ncmFtLiAgTElDRU5TRUUKK2hlcmVieSBncmFudHMgU1RBTkZPUkQgYSByb3lhbHR5LWZyZWUgbGljZW5zZSB0byB1c2UsIGNvcHksIG1vZGlmeSwKK2Rpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgYW55IHN1Y2ggZGVyaXZhdGl2ZSB3b3Jrcy4gIEF0IHRoZSB0aW1lCitMSUNFTlNFRSBwcm92aWRlcyBhIGNvcHkgb2YgYSBkZXJpdmF0aXZlIHZlcnNpb24gb2YgdGhlIFByb2dyYW0gdG8gYQordGhpcmQgcGFydHksIExJQ0VOU0VFIHNoYWxsIHByb3ZpZGUgU1RBTkZPUkQgd2l0aCBvbmUgY29weSBvZiB0aGUgc291cmNlCitjb2RlIG9mIHRoZSBkZXJpdmF0aXZlIHZlcnNpb24gYXQgbm8gY2hhcmdlIHRvIFNUQU5GT1JELgorIAorNS4gU1RBTkZPUkQgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IgSU1QTElFRC4KK0J5IHdheSBvZiBleGFtcGxlLCBidXQgbm90IGxpbWl0YXRpb24sIFNUQU5GT1JEIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OCitPUiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFIE9SCitUSEFUIFRIRSBVU0UgT0YgVEhFIExJQ0VOU0VEIFBST0dSQU0gV0lMTCBOT1QgSU5GUklOR0UgQU5ZIFBBVEVOVFMsCitDT1BZUklHSFRTLCBUUkFERU1BUktTIE9SIE9USEVSIFJJR0hUUy4gU1RBTkZPUkQgc2hhbGwgbm90IGJlIGhlbGQgbGlhYmxlCitmb3IgYW55IGxpYWJpbGl0eSBub3IgZm9yIGFueSBkaXJlY3QsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcword2l0aCByZXNwZWN0IHRvIGFueSBjbGFpbSBieSBMSUNFTlNFRSBvciBhbnkgdGhpcmQgcGFydHkgb24gYWNjb3VudCBvZiBvcgorYXJpc2luZyBmcm9tIHRoaXMgQWdyZWVtZW50IG9yIHVzZSBvZiB0aGUgUHJvZ3JhbS4KKyAKKzYuIFRoaXMgYWdyZWVtZW50IHNoYWxsIGJlIGNvbnN0cnVlZCwgaW50ZXJwcmV0ZWQgYW5kIGFwcGxpZWQgaW4KK2FjY29yZGFuY2Ugd2l0aCB0aGUgU3RhdGUgb2YgQ2FsaWZvcm5pYSBhbmQgYW55IGxlZ2FsIGFjdGlvbiBhcmlzaW5nCitvdXQgb2YgdGhpcyBBZ3JlZW1lbnQgb3IgdXNlIG9mIHRoZSBQcm9ncmFtIHNoYWxsIGJlIGZpbGVkIGluIGEgY291cnQKK2luIHRoZSBTdGF0ZSBvZiBDYWxpZm9ybmlhLgorIAorNy4gTm90aGluZyBpbiB0aGlzIEFncmVlbWVudCBzaGFsbCBiZSBjb25zdHJ1ZWQgYXMgY29uZmVycmluZyByaWdodHMgdG8KK3VzZSBpbiBhZHZlcnRpc2luZywgcHVibGljaXR5IG9yIG90aGVyd2lzZSBhbnkgdHJhZGVtYXJrIG9yIHRoZSBuYW1lCitvZiBgYFN0YW5mb3JkJycuCisgCitUaGUgbXJvdXRlZCBwcm9ncmFtIGlzIENPUFlSSUdIVCAxOTg5IGJ5IFRoZSBCb2FyZCBvZiBUcnVzdGVlcyBvZgorTGVsYW5kIFN0YW5mb3JkIEp1bmlvciBVbml2ZXJzaXR5LgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvU3R1ZmZpdCBiL2xpY2Vuc2VzL1N0dWZmaXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIwODA0MQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL1N0dWZmaXQKQEAgLTAsMCArMSw2MCBAQAorU29mdHdhcmUgTGljZW5zZSBBZ3JlZW1lbnQKKworVGhpcyBpcyBhIGxlZ2FsIGFncmVlbWVudCBiZXR3ZWVuIHlvdSBhbmQgQWxhZGRpbiBTeXN0ZW1zLCBJbmMuIGNvdmVyaW5nIHlvdXIKK3VzZSBvZiBTdHVmZkl0KHRtKSB0aGUgIlNvZnR3YXJlIikuIEJlIHN1cmUgdG8gcmVhZCB0aGUgZm9sbG93aW5nIGFncmVlbWVudAorYmVmb3JlIHVzaW5nIHRoZSBTb2Z0d2FyZS4gQlkgVVNJTkcgVEhFIFNPRlRXQVJFIChSRUdBUkRMRVNTIElGIFlPVSBIQVZFCitSRUdJU1RFUkVEIFRIRSBTT0ZUV0FSRSBPUiBOT1QpLCBZT1UgQVJFIEFHUkVFSU5HIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBPRgorVEhJUyBBR1JFRU1FTlQuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIFRFUk1TIE9GIFRISVMgQUdSRUVNRU5ULCBETyBOT1QgVVNFCitUSEUgU09GVFdBUkUgQU5EIERFU1RST1kgQUxMIENPUElFUyBJTiBZT1VSIFBPU1NFU1NJT04uCisKK1RoZSBTb2Z0d2FyZSBpcyBvd25lZCBieSBBbGFkZGluIFN5c3RlbXMgYW5kIGlzIHByb3RlY3RlZCBieSBVbml0ZWQgU3RhdGVzCitjb3B5cmlnaHQgbGF3cyBhbmQgaW50ZXJuYXRpb25hbCB0cmVhdHkgcHJvdmlzaW9ucy4gVGhlcmVmb3JlLCB5b3UgbXVzdCB0cmVhdAordGhlIFNvZnR3YXJlIGxpa2UgYW55IG90aGVyIGNvcHlyaWdodGVkIG1hdGVyaWFsIChlLmcuLCBhIGJvb2sgb3IgbXVzaWNhbAorcmVjb3JkaW5nKS4gUGF5aW5nIHRoZSBsaWNlbnNlIGZlZSBhbGxvd3MgeW91IHRoZSByaWdodCB0byB1c2Ugb25lIGNvcHkgb2YgdGhlCitTb2Z0d2FyZSBvbiBhIHNpbmdsZSBjb21wdXRlci4gWU9VIE1BWSBOT1QgTkVUV09SSyBUSEUgU09GVFdBUkUgT1IgT1RIRVJXSVNFIFVTRQorSVQgT1IgTUFLRSBJVCBBVkFJTEFCTEUgRk9SIFVTRSBPTiBNT1JFIFRIQU4gT05FIENPTVBVVEVSIEFUIFRIRSBTQU1FIFRJTUUKK1dJVEhPVVQgRklSU1QgT0JUQUlOSU5HIEEgTElDRU5TRSBUTyBETyBTTyBBVCBBTiBBRERJVElPTkFMIENPU1QuIFlvdSBtYXkgbm90CityZW50IG9yIGxlYXNlIHRoZSBTb2Z0d2FyZSwgbm9yIG1heSB5b3UgbW9kaWZ5LCBhZGFwdCwgdHJhbnNsYXRlLCByZXZlcnNlCitlbmdpbmVlciwgZGVjb21waWxlLCBvciBkaXNhc3NlbWJsZSB0aGUgU29mdHdhcmUuIElmIHlvdSB2aW9sYXRlIGFueSBwYXJ0IG9mCit0aGlzIGFncmVlbWVudCwgeW91ciByaWdodCB0byB1c2UgdGhpcyBTb2Z0d2FyZSB0ZXJtaW5hdGVzIGF1dG9tYXRpY2FsbHkgYW5kIHlvdQorbXVzdCB0aGVuIGRlc3Ryb3kgYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUgaW4geW91ciBwb3NzZXNzaW9uLgorCitUaGUgU29mdHdhcmUgYW5kIGl0cyByZWxhdGVkIGRvY3VtZW50YXRpb24gYXJlIHByb3ZpZGVkICJBUyBJUyIgYW5kIHdpdGhvdXQKK3dhcnJhbnR5IG9mIGFueSBraW5kIGFuZCBBbGFkZGluIFN5c3RlbXMgZXhwcmVzc2x5IGRpc2NsYWltcyBhbGwgb3RoZXIKK3dhcnJhbnRpZXMsIGV4cHJlc3NlZCBvciBpbXBsaWVkLCBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgdGhlIGltcGxpZWQKK3dhcnJhbnRpZXMgb2YgbWVyY2hhbnRhYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gVW5kZXIgbm8KK2NpcmN1bXN0YW5jZXMgc2hhbGwgQWxhZGRpbiBTeXN0ZW1zIGJlIGxpYWJsZSBmb3IgYW55IGluY2lkZW50YWwsIHNwZWNpYWwsIG9yCitjb25zZXF1ZW50aWFsIGRhbWFnZXMgdGhhdCByZXN1bHQgZnJvbSB0aGUgdXNlIG9yIGluYWJsaWxpdHkgdG8gdXNlIHRoZSBTb2Z0d2FyZQorb3IgcmVsYXRlZCBkb2N1bWVudGF0aW9uLCBldmVuIGlmIEFsYWRkaW4gU3lzdGVtcyBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZQorcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLiBJbiBubyBldmVudCBzaGFsbCBBbGFkZGluIFN5c3RlbXMnIGxpYWJpbGl0eSBleGNlZWQKK3RoZSBsaWNlbnNlIGZlZSBwYWlkLCBpZiBhbnkuCisKK1RoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBDYWxpZm9ybmlhLiBJZiBmb3IKK2FueSByZWFzb24gYSBjb3VydCBvZiBjb21wZXRlbnQganVyaXNkaWN0aW9uIGZpbmRzIGFueSBwcm92aXNpb24gb2YgdGhlCitBZ3JlZW1lbnQsIG9yIHBvcnRpb24gdGhlcmVvZiwgdG8gYmUgdW5lbmZvcmNlYWJsZSwgdGhhdCBwcm92aXNpb24gb2YgdGhlCitBZ3JlZW1lbnQgc2hhbGwgYmUgZW5mb3JjZWQgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pc3NpYmxlIHNvIGFzIHRvIGVmZmVjdAordGhlIGludGVudCBvZiB0aGUgcGFydGllcywgYW5kIHRoZSByZW1haW5kZXIgb2YgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgY29udGludWUgaW4KK2Z1bGwgZm9yY2UgYW5kIGVmZmVjdC4KKworVGhlIFNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIGlzIHByb3ZpZGVkIHdpdGggUkVTVFJJQ1RFRCBSSUdIVFMuIFVzZSwKK2R1cGxpY2F0aW9uLCBvciBkaXNjbG9zdXJlIGJ5IHRoZSBHb3Zlcm5tZW50IGlzIHN1YmplY3QgdG8gcmVzdHJpY3Rpb25zIGFzIHNldAorZm9ydGggaW4gc3ViZGl2aXNpb24gKGIpKDMpKGlpKSBvZiB0aGUgUmlnaHRzIGluIFRlY2huaWNhbCBEYXRhIGFuZCBDb21wdXRlcgorU29mdHdhcmUgY2xhdXNlIGFzIDI1Mi4yMjctNzAxMy4gTWFudWZhY3R1cmVyIGlzIEFsYWRkaW4gU3lzdGVtcywgSW5jLiwgMjQ1CitXZXN0cmlkZ2UgRHJpdmUsIFdhdHNvbnZpbGxlLCBDYWxpZm9ybmlhIDk1MDc2LgorCitBbGFkZGluIFN5c3RlbXMsIEluYy4sIDI0NSBXZXN0cmlkZ2UgRHIuLCBXYXRzb252aWxsZSwgQ2FsaWZvcm5pYSwgOTUwNzYsIFVuaXRlZAorU3RhdGVzIG9mIEFtZXJpY2EKKworKDgzMSkgNzYxLTYyMDAgdGVsZXBob25lLCAoODMxKSA3NjEtNjIwNiBmYWNzaW1pbGUuCisKKworCitBZGRpdGlvbmFsIExpY2Vuc2VzOgorCitTZXJ2ZXIsIG11bHRpcGxlIHVzZXIgYW5kIHNpdGUgbGljZW5zZXMgYXJlIGF2YWlsYWJsZSwgcGxlYXNlIHZpc2l0OgorICAgIGh0dHA6Ly93d3cuYWxhZGRpbnN5cy5jb20vc3RvcmUvbGljZW5zaW5nLmh0bWwKKworb3IgY29udGFjdDogc2FsZXNAYWxhZGRpbnN5cy5jb20KKworJElkOiBTdHVmZml0LHYgMS4xIDIwMDIvMTAvMzAgMDI6MTc6NTAgbmFsbCBFeHAgJAorCmRpZmYgLS1naXQgYS9saWNlbnNlcy9TdWJ2ZXJzaW9uIGIvbGljZW5zZXMvU3VidmVyc2lvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWQzNWQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvU3VidmVyc2lvbgpAQCAtMCwwICsxLDU3IEBACitUaGlzIGxpY2Vuc2UgYXBwbGllcyB0byBhbGwgcG9ydGlvbnMgb2YgU3VidmVyc2lvbiB3aGljaCBhcmUgbm90CitleHRlcm5hbGx5LW1haW50YWluZWQgbGlicmFyaWVzIChlLmcuIGFwci8sIGFwci11dGlsLywgYW5kIG5lb24vKS4KK1N1Y2ggbGlicmFyaWVzIGhhdmUgdGhlaXIgb3duIGxpY2Vuc2VzOyB3ZSByZWNvbW1lbmQgeW91IHJlYWQgdGhlbSwgYXMKK3RoZWlyIHRlcm1zIG1heSBkaWZmZXIgZnJvbSB0aGUgdGVybXMgYmVsb3cuCisKK1RoaXMgaXMgdmVyc2lvbiAxIG9mIHRoaXMgbGljZW5zZS4gIEl0IGlzIGFsc28gYXZhaWxhYmxlIG9ubGluZSBhdAoraHR0cDovL3N1YnZlcnNpb24udGlncmlzLm9yZy9saWNlbnNlLTEuaHRtbC4gIElmIG5ld2VyIHZlcnNpb25zIG9mCit0aGlzIGxpY2Vuc2UgYXJlIHBvc3RlZCB0aGVyZSAodGhlIHNhbWUgVVJMLCBidXQgd2l0aCB0aGUgdmVyc2lvbgorbnVtYmVyIGluY3JlbWVudGVkOiAuLi4vbGljZW5zZS0yLmh0bWwsIC4uLi9saWNlbnNlLTMuaHRtbCwgYW5kIHNvCitvbiksIHlvdSBtYXkgdXNlIGEgbmV3ZXIgdmVyc2lvbiBpbnN0ZWFkLCBhdCB5b3VyIG9wdGlvbi4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ29weXJpZ2h0IChjKSAyMDAwLTIwMDYgQ29sbGFiTmV0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAgIGRpc3RyaWJ1dGlvbi4KKworMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sCisgICBpZiBhbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorICAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkKKyAgICAgICBDb2xsYWJOZXQgKGh0dHA6Ly93d3cuQ29sbGFiLk5ldC8pLiIKKyAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZGdtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwKKyAgIGlmIGFuZCB3aGVyZXZlciBzdWNoIHRoaXJkLXBhcnR5IGFja25vd2xlZGdtZW50cyBub3JtYWxseSBhcHBlYXIuCisKKzQuIFRoZSBob3N0ZWQgcHJvamVjdCBuYW1lcyBtdXN0IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZQorICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuCisgICBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBpbmZvQGNvbGxhYi5uZXQuCisKKzUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgdXNlIHRoZSAiVGlncmlzIiBuYW1lCisgICBub3IgbWF5ICJUaWdyaXMiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAgIHBlcm1pc3Npb24gb2YgQ29sbGFiTmV0LgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECitXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KK0lOIE5PIEVWRU5UIFNIQUxMIENPTExBQk5FVCBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCitESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFCitHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUgorSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SCitPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCitBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkKK2luZGl2aWR1YWxzIG9uIGJlaGFsZiBvZiBDb2xsYWJOZXQuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9UQURTMiBiL2xpY2Vuc2VzL1RBRFMyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmYjAyYTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9UQURTMgpAQCAtMCwwICsxLDQzIEBACitUQURTIDIgRlJFRVdBUkUgU09VUkNFIENPREUgTElDRU5TRQorCitUaGUgVEFEUyAyIHNvdXJjZSBjb2RlIGlzIENvcHlyaWdodCAxOTkxLCAyMDAzIGJ5IE1pY2hhZWwgSi4gUm9iZXJ0cy4KKworVGhlIGF1dGhvciBoZXJlYnkgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgYW5kCitkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUsIGlmIHlvdSBhZ3JlZSB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgICAxLiBZb3UgbXVzdCBpbmNsdWRlIHRoaXMgbGljZW5zZSBhbmQgdGhlIGNvcHlyaWdodCBub3RpY2Ugd2l0aAorICAgICAgIGFsbCBjb3BpZXMuCisgICAgMi4gWW91IG1heSBub3QgcmVxdWlyZSBvciBjb2xsZWN0IGEgZmVlIGZvciBjb3BpZXMgb2YgdGhpcworICAgICAgIHNvZnR3YXJlLCBvciBhbnkgcGFydCBvZiB0aGlzIHNvZnR3YXJlLCB0aGF0IHlvdSBnaXZlIHRvCisgICAgICAgb3RoZXIgcGVvcGxlLgorICAgIDMuIFlvdSBtYXkgbm90IGluY2x1ZGUgdGhpcyBzb2Z0d2FyZSB3aXRoIGFueSBvdGhlciBzb2Z0d2FyZQorICAgICAgIGZvciB3aGljaCBhIGZlZSBpcyBjb2xsZWN0ZWQuCisgICAgNC4gWW91IG1heSBub3QgbW9kaWZ5IHRoaXMgc29mdHdhcmUgZXhjZXB0IGFzIHBlcm1pdHRlZCBiZWxvdworICAgICAgIChzZWUgImRlcml2YXRpdmUgd29ya3MiKSwgYW5kIGVhY2ggY29weSB5b3UgbWFrZSBhbmQKKyAgICAgICBkaXN0cmlidXRlIG11c3QgYmUgYSBmdWxsIGFuZCBjb21wbGV0ZSBjb3B5IG9mIHRoZSBzb2Z0d2FyZQorICAgICAgIHlvdSBvcmlnaW5hbGx5IHJlY2VpdmVkLgorICAgIDUuIEFueW9uZSB0byB3aG9tIHlvdSBnaXZlIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIHJlY2VpdmVzCisgICAgICAgYWxsIG9mIHRoZSBzYW1lIHBlcm1pc3Npb25zIHRoYXQgeW91IGRpZCB1bmRlciB0aGlzIGxpY2Vuc2UKKyAgICAgICBhbmQgaXMgc3ViamVjdCB0byBhbGwgb2YgdGhlIHNhbWUgcmVzdHJpY3Rpb25zLgorICAgIDYuIFlvdSBhcmUgbm90IGFsbG93ZWQgdG8gY3JlYXRlIGRlcml2YXRpdmUgd29ya3MsIHdoaWNoIGFyZQorICAgICAgIHdvcmtzIHRoYXQgY29udGFpbiBvciBhcmUgYmFzZWQgb24gYWxsIG9yIHBhcnQgb2YgdGhpcyB3b3JrLAorICAgICAgIGV4Y2VwdCB1bmRlciB0aGUgY29uZGl0aW9ucyBkZXNjcmliZWQgYmVsb3cuCisgICAgNy4gQW55IGRlcml2YXRpdmUgd29ya3MgYXJlIHN1YmplY3QgdG8gdGhpcyBzYW1lIGxpY2Vuc2UuCisKKworRGVyaXZhdGl2ZSBXb3JrcworLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHNvdXJjZSBjb2RlIGlzIGRpc3RyaWJ1dGVkIGZvciB0aGUgc3BlY2lmaWMgcHVycG9zZSBvZgorZmFjaWxpdGF0aW5nIHRoZSBjcmVhdGlvbiBvZiB2ZXJzaW9ucyBvZiBUQURTIG9uIHZhcmlvdXMgY29tcHV0ZXJzIGFuZAorb3BlcmF0aW5nIHN5c3RlbXMuICBBbGwgb3RoZXIgZGVyaXZhdGl2ZSB3b3JrcyBhcmUgcHJvaGliaXRlZCB3aXRob3V0Cit0aGUgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBhdXRob3IuICBQbGVhc2UgY29udGFjdCB0aGUgYXV0aG9yIGlmCit5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIGFib3V0IHRoaXMgb3IgaWYgeW91J2QgbGlrZSBwZXJtaXNzaW9uIHRvCitjcmVhdGUgYSBkZXJpdmVkIHdvcmsuCisKK0lmIHlvdSBwb3J0IFRBRFMgdG8gYSBuZXcgcGxhdGZvcm0sIHRoZSBhdXRob3IgZG9lcyBncmFudCBwZXJtaXNzaW9uCitmb3IgeW91IHRvIGRpc3RyaWJ1dGUgeW91ciBwb3J0ZWQgdmVyc2lvbiAtIEkgZW5jb3VyYWdlIGl0LCBpbiBmYWN0LgorV2UgYXNrIHRoYXQgeW91IHByb3ZpZGUgeW91ciBjb250YWN0IGluZm9ybWF0aW9uIGluIGFueSBkaXN0cmlidXRpb24KK3BhY2thZ2UgeW91IGNyZWF0ZSwgc28gdGhhdCB1c2VycyBvZiB5b3VyIHZlcnNpb24gd2lsbCBrbm93IGhvdyB0bworY29udGFjdCB5b3UgaWYgdGhleSBoYXZlIGFueSBxdWVzdGlvbnMgcmVsYXRpbmcgc3BlY2lmaWNhbGx5IHRvIHlvdXIKK3ZlcnNpb24uCmRpZmYgLS1naXQgYS9saWNlbnNlcy9UQURTMyBiL2xpY2Vuc2VzL1RBRFMzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1NzA2YTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9UQURTMwpAQCAtMCwwICsxLDQ3IEBACitUQURTIDMgRlJFRVdBUkUgU09VUkNFIENPREUgTElDRU5TRQorCitUaGUgVEFEUyAzIHNvdXJjZSBjb2RlIGlzIENvcHlyaWdodCAxOTk4LCAyMDAzIGJ5IE1pY2hhZWwgSi4gUm9iZXJ0cy4KKworVGhlIGF1dGhvciBoZXJlYnkgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgYW5kIGRpc3RyaWJ1dGUKK3RoaXMgc29mdHdhcmUsIGlmIHlvdSBhZ3JlZSB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgICAxLiBZb3UgbXVzdCBpbmNsdWRlIHRoaXMgbGljZW5zZSBhbmQgdGhlIGNvcHlyaWdodCBub3RpY2Ugd2l0aAorICAgICAgIGFsbCBjb3BpZXMuCisgICAgMi4gWW91IG1heSBub3QgcmVxdWlyZSBvciBjb2xsZWN0IGEgZmVlIGZvciBjb3BpZXMgb2YgdGhpcworICAgICAgIHNvZnR3YXJlLCBvciBhbnkgcGFydCBvZiB0aGlzIHNvZnR3YXJlLCB0aGF0IHlvdSBnaXZlIHRvCisgICAgICAgb3RoZXIgcGVvcGxlLgorICAgIDMuIFlvdSBtYXkgbm90IGluY2x1ZGUgdGhpcyBzb2Z0d2FyZSB3aXRoIGFueSBvdGhlciBzb2Z0d2FyZQorICAgICAgIGZvciB3aGljaCBhIGZlZSBpcyBjb2xsZWN0ZWQuCisgICAgNC4gWW91IG1heSBub3QgbW9kaWZ5IHRoaXMgc29mdHdhcmUgZXhjZXB0IGFzIHBlcm1pdHRlZCBiZWxvdworICAgICAgIChzZWUgImRlcml2YXRpdmUgd29ya3MiKSwgYW5kIGVhY2ggY29weSB5b3UgbWFrZSBhbmQKKyAgICAgICBkaXN0cmlidXRlIG11c3QgYmUgYSBmdWxsIGFuZCBjb21wbGV0ZSBjb3B5IG9mIHRoZSBzb2Z0d2FyZQorICAgICAgIHlvdSBvcmlnaW5hbGx5IHJlY2VpdmVkLgorICAgIDUuIEFueW9uZSB0byB3aG9tIHlvdSBnaXZlIGEgY29weSBvZiB0aGlzIHNvZnR3YXJlIHJlY2VpdmVzCisgICAgICAgYWxsIG9mIHRoZSBzYW1lIHBlcm1pc3Npb25zIHRoYXQgeW91IGRpZCB1bmRlciB0aGlzIGxpY2Vuc2UKKyAgICAgICBhbmQgaXMgc3ViamVjdCB0byBhbGwgb2YgdGhlIHNhbWUgcmVzdHJpY3Rpb25zLgorICAgIDYuIFlvdSBhcmUgbm90IGFsbG93ZWQgdG8gY3JlYXRlIGRlcml2YXRpdmUgd29ya3MsIHdoaWNoIGFyZQorICAgICAgIHdvcmtzIHRoYXQgY29udGFpbiBvciBhcmUgYmFzZWQgb24gYWxsIG9yIHBhcnQgb2YgdGhpcyB3b3JrLAorICAgICAgIGV4Y2VwdCB1bmRlciB0aGUgY29uZGl0aW9ucyBkZXNjcmliZWQgYmVsb3cuCisgICAgNy4gQW55IGRlcml2YXRpdmUgd29ya3MgYXJlIHN1YmplY3QgdG8gdGhpcyBzYW1lIGxpY2Vuc2UuCisKKworRGVyaXZhdGl2ZSBXb3JrcworLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIHNvdXJjZSBjb2RlIGlzIGRpc3RyaWJ1dGVkIGZvciB0aGUgc3BlY2lmaWMgcHVycG9zZSBvZiBwb3J0aW5nCitUQURTLCBzbyB0aGF0IHlvdSBjYW4gcnVuIHRoZSBzb2Z0d2FyZSBvbiBhbnkgc3lzdGVtIG9mIHlvdXIgY2hvb3NpbmcuCitBbGwgb3RoZXIgZGVyaXZhdGl2ZSB3b3JrcyBhcmUgcHJvaGliaXRlZCB3aXRob3V0IHRoZSB3cml0dGVuCitwZXJtaXNzaW9uIG9mIHRoZSBhdXRob3IuICBJIHdhbnQgdG8gYXZvaWQgdGhlIGNyZWF0aW9uIG9mIHZhcmlhdGlvbnMKK29uIHRoZSBzeXN0ZW0sIGJlY2F1c2UgaXQgbGVhZHMgdG8gY29uZnVzaW9uIG9uIHRoZSBwYXJ0IG9mIHVzZXJzIGlmCit0aGVyZSBhcmUgbXVsdGlwbGUgaW5jb21wYXRpYmxlIGZsYXZvcnMgZmxvYXRpbmcgYXJvdW5kLiAgSG93ZXZlciwgaWYKK3lvdSBoYXZlIGEgc3BlY2lmaWMgaWRlYSBpbiBtaW5kLCBJJ2QgYmUgaGFwcHkgdG8gYXQgbGVhc3QgY29uc2lkZXIKK2l0LiAgUGxlYXNlIGNvbnRhY3QgdGhlIGF1dGhvciBpZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIGFib3V0IHRoaXMgb3IKK2lmIHlvdSB3b3VsZCBsaWtlIHBlcm1pc3Npb24gdG8gY3JlYXRlIGEgZGVyaXZlZCB3b3JrLiAgCisKK0lmIHlvdSBwb3J0IFRBRFMgdG8gYSBuZXcgcGxhdGZvcm0sIHRoZSBhdXRob3IgZG9lcyBncmFudCBwZXJtaXNzaW9uCitmb3IgeW91IHRvIGRpc3RyaWJ1dGUgeW91ciBwb3J0ZWQgdmVyc2lvbiAtIEkgZW5jb3VyYWdlIGl0LCBpbiBmYWN0LgorSSBhc2sgdGhhdCB5b3UgaW5jbHVkZSB5b3VyIGNvbnRhY3QgaW5mb3JtYXRpb24gaW4gYW55IGRpc3RyaWJ1dGlvbgorcGFja2FnZSB5b3UgY3JlYXRlLCBzbyB0aGF0IHVzZXJzIG9mIHlvdXIgdmVyc2lvbiB3aWxsIGtub3cgaG93IHRvCitjb250YWN0IHlvdSBpZiB0aGV5IGhhdmUgYW55IHF1ZXN0aW9ucyByZWxhdGluZyBzcGVjaWZpY2FsbHkgdG8geW91cgordmVyc2lvbi4KKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvVEhJTktUQU5LUyBiL2xpY2Vuc2VzL1RISU5LVEFOS1MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FlNWQ2OQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL1RISU5LVEFOS1MKQEAgLTAsMCArMSwxMDEgQEAKK1RoaXMgU29mdHdhcmUgTGljZW5zaW5nIEFncmVlbWVudCAoIkFncmVlbWVudCIpIGlzIGEgbGVnYWwgYWdyZWVtZW50CitiZXR3ZWVuIHlvdSBhbmQgQnJhdmVUcmVlIFByb2R1Y3Rpb25zLCBMTEMuICgiQnJhdmVUcmVlIikuIEJ5CitpbnN0YWxsaW5nIHRoaXMgU29mdHdhcmUsIGJ5IGxvYWRpbmcgb3IgcnVubmluZyB0aGUgU29mdHdhcmUsIGJ5CitwbGFjaW5nIG9yIGNvcHlpbmcgdGhlIFNvZnR3YXJlIG9udG8geW91ciBoYXJkIGRyaXZlLCBvciBieQorZGlzdHJpYnV0aW5nIHRoZSBTb2Z0d2FyZSwgeW91IGFncmVlIHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzCitBZ3JlZW1lbnQuIFRoZXNlIGFyZSB0aGUgb25seSB0ZXJtcyBieSB3aGljaCBCcmF2ZVRyZWUgcGVybWl0cworY29weWluZyBvciB1c2UuCisKK0JyYXZlVHJlZSBQcm9kdWN0aW9ucywgTExDLiBMSUNFTlNFIEFHUkVFTUVOVCBGT1IgVGhpbmtUYW5rcworCitHZW5lcmFsIHRlcm1zOgorCisKKzEuIFRIRSBTT0ZUV0FSRS4KK1RoZSBTb2Z0d2FyZSBsaWNlbnNlZCB1bmRlciB0aGlzIGFncmVlbWVudCBpcyB0aGUgY29tcHV0ZXIgcHJvZ3JhbQorVGhpbmtUYW5rcywgd2hpY2ggY29uc2lzdHMgb2YgZXhlY3V0YWJsZSBmaWxlcywgZGF0YSBmaWxlcywgYW5kCitkb2N1bWVudGF0aW9uLgorCisyLiBHUkFOVCBPRiBMSUNFTlNFLgorQnJhdmVUcmVlIGdyYW50cyB5b3UgdGhlIHJpZ2h0IHRvIHVzZSB0aGUgU29mdHdhcmUgaW4gYWNjb3JkYW5jZSB3aXRoCit0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQuIFlvdSBtYXkgbG9hZCB0aGUgc29mdHdhcmUgaW50byBSQU0gYXMKK3dlbGwgYXMgaW5zdGFsbCBpdCBvbiBhIGhhcmQgZGlzayBvciBvdGhlciBzdG9yYWdlIGRldmljZS4gWW91IG1heQorbm90IG1vZGlmeSwgdHJhbnNsYXRlLCBkaXNhc3NlbWJsZSwgcmV2ZXJzZSBlbmdpbmVlciwgZGVjb21waWxlLCBvcgorY3JlYXRlIGRlcml2YXRpdmUgd29ya3MgYmFzZWQgdXBvbiB0aGUgU29mdHdhcmUuIFlvdSBhZ3JlZSB0aGF0IHRoZQorU29mdHdhcmUgd2lsbCBub3QgYmUgc2hpcHBlZCwgdHJhbnNmZXJyZWQsIG9yIGV4cG9ydGVkIGludG8gYW55Citjb3VudHJ5IGluIHZpb2xhdGlvbiBvZiB0aGUgVS5TLiBFeHBvcnQgQWRtaW5pc3RyYXRpb24gQWN0IGFuZCB0aGF0Cit5b3Ugd2lsbCBub3QgdXRpbGl6ZSB0aGUgU29mdHdhcmUgaW4gdmlvbGF0aW9uIG9mIGFueSBhcHBsaWNhYmxlIGxhdy4KKworMi4xLiBERU1PIFZFUlNJT04gTElDRU5TRS4KK1lvdSBtYXkgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGRlbW8gdmVyc2lvbiBvZiB0aGUgU29mdHdhcmUgZnJlZWx5Cit0byBvdGhlciB1c2VycywgcHJvdmlkZWQgdGhhdCBhbnkgY29weSBtdXN0IGNvbnRhaW4gdGhlIG9yaWdpbmFsLAordW5hbHRlcmVkIGZpbGVzIGFuZCBwcm9wcmlldGFyeSBub3RpY2VzLiBZb3UgaGF2ZSB0aGUgYWJpbGl0eSB0bworcmVnaXN0ZXIgdGhlIGRlbW8gdmVyc2lvbiBhdCBhbnkgdGltZSBieSBwdXJjaGFzaW5nIHRoZSBmdWxsIHZlcnNpb24KK2Zyb20gQnJhdmVUcmVlLgorCisyLjIuIFJFR0lTVEVSRUQgVkVSU0lPTiBMSUNFTlNFLgorV2hlbiB5b3UgcHVyY2hhc2UgdGhlIFNvZnR3YXJlLCB5b3Ugd2lsbCByZWNlaXZlIHRoZSBmdWxsIHJlZ2lzdGVyZWQKK3ZlcnNpb24uIFlvdSBhZ3JlZSBub3QgdG8gZGlzdHJpYnV0ZSB0aGUgcmVnaXN0ZXJlZCB2ZXJzaW9uIHRvIG90aGVycworYW5kIHRvIHVzZSBpdCBvbmx5IGZvciB5b3VyIG93biBwZXJzb25hbCB1c2UuIFlvdSBhY2tub3dsZWRnZSB0aGF0CitkaXN0cmlidXRpb24gb2YgdGhlIHJlZ2lzdGVyZWQgdmVyc2lvbiB0byBvdGhlcnMsIHdoZXRoZXIgaW50ZW50aW9uYWwKK29yIHVuaW50ZW50aW9uYWwsIGNvdWxkIGRhbWFnZSBCcmF2ZVRyZWUgYm90aCBmaW5hbmNpYWxseSBhbmQKK3Byb2Zlc3Npb25hbGx5LiBBbnkgdW5hdXRob3JpemVkIGRpc3RyaWJ1dGlvbiBvZiB5b3VyIHJlZ2lzdGVyZWQKK3ZlcnNpb24gd2lsbCByZXN1bHQgaW4gaW1tZWRpYXRlIGFuZCBhdXRvbWF0aWMgdGVybWluYXRpb24gb2YgeW91cgorbGljZW5zZS4KKworMy4gQ09QWVJJR0hULgorVGhlIFNvZnR3YXJlIGlzIG93bmVkIGJ5IEJyYXZlVHJlZSBhbmQgaXMgcHJvdGVjdGVkIGJ5IFVuaXRlZCBTdGF0ZXMKK2NvcHlyaWdodCBsYXdzIGFuZCBpbnRlcm5hdGlvbmFsIHRyZWF0aWVzLiBZb3UgbXVzdCB0cmVhdCB0aGUKK1NvZnR3YXJlIGxpa2UgYW55IG90aGVyIGNvcHlyaWdodGVkIG1hdGVyaWFsLCBleGNlcHQgdGhhdCB5b3UgbWF5CittYWtlIGNvcGllcyBvZiB0aGUgZGVtbyB2ZXJzaW9uIG9mIHRoZSBTb2Z0d2FyZSB0byBnaXZlIHRvIG90aGVyCitwZXJzb25zIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudC4gWW91IG1heSBub3QgZGlzdHJpYnV0ZQorY29waWVzIG9mIHRoZSByZWdpc3RlcmVkIHZlcnNpb24gdG8gb3RoZXJzLiBFeGNlcHQgYXMgZXhwcmVzc2x5CitsaWNlbnNlZCBieSBCcmF2ZVRyZWUgaW4gd3JpdGluZywgQnJhdmVUcmVlIHJlc2VydmVzIHRoZSBleGNsdXNpdmUKK2NvcHlyaWdodCBhbmQgYWxsIG90aGVyIHJpZ2h0cywgdGl0bGUgYW5kIGludGVyZXN0IHRvIGRpc3RyaWJ1dGUgdGhlCitTb2Z0d2FyZSwgYW5kIHRvIHVzZSBUcmFkZW1hcmtzIGluIGNvbm5lY3Rpb24gd2l0aCB0aGVtLiAiVHJhZGVtYXJrcyIKK3JlZmVycyB0byB0aGUgbmFtZSBvZiB0aGUgU29mdHdhcmUsIHRoZSBuYW1lIEJyYXZlVHJlZSwgYW5kIHRoZQorQnJhdmVUcmVlIGxvZ28sIHdoaWNoIGFyZSB0cmFkZW1hcmtzIG9mIEJyYXZlVHJlZS4KKworNC4gTk8gV0FSUkFOVFkuCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTLUlTIi4gTk8gV0FSUkFOVElFUyBPRiBBTlkgS0lORCwgRVhQUkVTUworT1IgSU1QTElFRCwgQVJFIE1BREUgQVMgVE8gSVQgT1IgQU5ZIE1FRElVTSBJVCBNQVkgQkUgT04uIEJyYXZlVHJlZQorUHJvZHVjdGlvbnMsIExMQy4gV0lMTCBQUk9WSURFIE5PIFJFTUVEWSBGT1IgSU5ESVJFQ1QsIENPTlNFUVVFTlRJQUwsCitQVU5JVElWRSBPUiBJTkNJREVOVEFMIERBTUFHRVMgQVJJU0lORyBGUk9NIElULCBJTkNMVURJTkcgU1VDSCBGUk9NCitORUdMSUdFTkNFLCBTVFJJQ1QgTElBQklMSVRZLCBPUiBCUkVBQ0ggT0YgV0FSUkFOVFkgT1IgQ09OVFJBQ1QsIEVWRU4KK0FGVEVSIE5PVElDRSBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis1LiBURVJNLgorVGhlIHRlcm0gb2YgdGhpcyBsaWNlbnNlIGdyYW50IGlzIHBlcnBldHVhbC4gWW91IG1heSB0ZXJtaW5hdGUgdGhpcworQWdyZWVtZW50IGF0IGFueSB0aW1lIGJ5IGRlc3Ryb3lpbmcgYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUgaW4KK3lvdXIgcG9zc2Vzc2lvbi4gWW91ciBsaWNlbnNlIHRvIHVzZSB0aGUgU29mdHdhcmUgd2lsbCBhdXRvbWF0aWNhbGx5Cit0ZXJtaW5hdGUgaWYgeW91IGJyZWFjaCB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQuCisKKzYuIEdFTkVSQUwgUFJPVklTSU9OUy4KK1RoaXMgQWdyZWVtZW50IGlzIHRoZSBzb2xlIGFuZCBlbnRpcmUgQWdyZWVtZW50IHJlbGF0aW5nIHRvIHRoZQorc3ViamVjdCBtYXR0ZXIgaGVyZW9mLCBhbmQgc3VwZXJjZWRlcyBhbGwgcHJpb3IgdW5kZXJzdGFuZGluZ3MsCithZ3JlZW1lbnRzLCBhbmQgZG9jdW1lbnRhdGlvbiByZWxhdGluZyB0byBzdWNoIHN1YmplY3QgbWF0dGVyLiBJZiBhbnkKK3Byb3Zpc2lvbiBpbiB0aGlzIEFncmVlbWVudCBpcyBoZWxkIGJ5IGEgY291cnQgb2YgY29tcGV0ZW50CitqdXJpc2RpY3Rpb24gdG8gYmUgaW52YWxpZCwgdm9pZCwgb3IgdW5lbmZvcmNlYWJsZSwgdGhlIHJlbWFpbmluZworcHJvdmlzaW9ucyB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2Ugd2l0aG91dCBiZWluZyBpbXBhaXJlZCBvcgoraW52YWxpZGF0ZWQgaW4gYW55IHdheS4gVGhpcyBBZ3JlZW1lbnQgd2lsbCBiZSBnb3Zlcm5lZCBieSB0aGUgbGF3cworb2YgdGhlIFN0YXRlIG9mIE9yZWdvbi4gV2l0aCByZXNwZWN0IHRvIGV2ZXJ5IG1hdHRlciBhcmlzaW5nIHVuZGVyCit0aGlzIEFncmVlbWVudCwgeW91IGNvbnNlbnQgdG8gdGhlIGV4Y2x1c2l2ZSBqdXJpc2RpY3Rpb24gYW5kIHZlbnVlCitvZiB0aGUgc3RhdGUgYW5kIGZlZGVyYWwgY291cnRzIHNpdHRpbmcgaW4gTGFuZSBDb3VudHksIE9yZWdvbiwgYW5kCit0byBzZXJ2aWNlIGJ5IGNlcnRpZmllZCBtYWlsLCByZXR1cm4gcmVjZWlwdCByZXF1ZXN0ZWQsIG9yIGFzCitvdGhlcndpc2UgcGVybWl0dGVkIGJ5IGxhdy4gVGhpcyBBZ3JlZW1lbnQgZG9lcyBub3QgY3JlYXRlIGFueSBhZ2VuY3kKK29yIHBhcnRuZXIgcmVsYXRpb25zaGlwLiBZb3VyIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUKK3BlcnNvbmFsIGFuZCBkbyBub3QgaW5jbHVkZSBhbnkgcmlnaHQgdG8gc3VibGljZW5zZSB0aGUgU29mdHdhcmUuCitUaGlzIEFncmVlbWVudCBtYXkgYmUgdGVybWluYXRlZCBieSBCcmF2ZVRyZWUgYnkgZ2l2aW5nIGEgMzAtZGF5CithZHZhbmNlIHdyaXR0ZW4gbm90aWNlLgorCis3LiBESVNUUklCVVRJT04uCitCcmF2ZVRyZWUgYWxsb3dzIGFuZCBlbmNvdXJhZ2VzIGFsbCB3ZWIgc2l0ZXMsIG9uLWxpbmUgc2VydmljZXMsCitzaGFyZXdhcmUgZGlzayB2ZW5kb3JzLCBDRC1ST00gdmVuZG9ycywgYnVsbGV0aW4gYm9hcmQgc3lzdGVtcywgYW5kCitlbmQtdXNlcnMgdG8gZnJlZWx5IGRpc3RyaWJ1dGUgdGhlIGRlbW8gdmVyc2lvbiBvZiB0aGlzIFNvZnR3YXJlLiBJZgoreW91IHdpc2ggdG8gZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUsIHlvdSBtYXkgb2J0YWluIHRoZSBtb3N0IHJlY2VudAordmVyc2lvbiBmcm9tIHd3dy5nYXJhZ2VnYW1lcy5jb20uIEl0IGlzIGdlbmVyYWxseSBub3QgbmVjZXNzYXJ5IHRvCitjb250YWN0IEJyYXZlVHJlZSBmb3IgYXV0aG9yaXphdGlvbiwgYW5kIHlvdSBtYXkgYmVnaW4gb2ZmZXJpbmcgdGhlCitkZW1vIHZlcnNpb24gaW1tZWRpYXRlbHkuCisKK1RoYW5rIHlvdSBmb3IgdXNpbmcgdGhpcyBTb2Z0d2FyZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIG9mCit0aGlzIEFncmVlbWVudC4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL1RlWCBiL2xpY2Vuc2VzL1RlWApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWM3MWU1Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvVGVYCkBAIC0wLDAgKzEsMTAgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoZSBmaWxlcyBpbiB0aGlzIGRpcmVjdG9yeSBhcmUgbWFzdGVyIGZpbGVzIG1haW50YWluZWQgcGVyc29uYWxseSBieQorRG9uYWxkIEUuIEtudXRoLiBOb2JvZHkgZWxzZSBpcyBhdXRob3JpemVkIHRvIG1ha2UgYW55IGNoYW5nZXMgd2hhdGV2ZXIKK3RvIHRoZW0hIElmIHlvdSBtb2RpZnkgdGhlIGZpbGVzIGZvciBhbnkgcHVycG9zZSwgeW91IG11c3QgZ2l2ZSB5b3VyCitmaWxlcyBhIGRpZmZlcmVudCBuYW1lLCBzbyB0aGF0IGluc3RhbGxhdGlvbnMgb2YgVGVYIHRocm91Z2hvdXQgdGhlIHdvcmxkCit3aWxsIGJlIDEwMCUgY29tcGF0aWJsZSB3aGVuIHRoZXkgdXNlIHRoZSBvZmZpY2lhbCBzb3VyY2UgZmlsZXMuCisKK1BsZWFzZSBoZWxwIHByZXNlcnZlIHRoZSBpbnRlZ3JpdHkgb2YgVGVYIGJ5IHJlcG9ydGluZyBhbnkgdmlvbGF0aW9ucyBvZgordGhlc2UgcnVsZXMgdG8gdGhlIFRlWCBVc2VyIEdyb3VwLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvVGVYLW90aGVyLWZyZWUgYi9saWNlbnNlcy9UZVgtb3RoZXItZnJlZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMWU1NmJlCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvVGVYLW90aGVyLWZyZWUKQEAgLTAsMCArMSwxMSBAQAorVGhlIFRlWCBDYXRhbG9ndWUgTGljZW5zZSBEZWZpbml0aW9uczogT1RIRVItRlJFRQorTGljZW5zZXMgbm90IGNsZWFybHkgKG9yIHVuaXF1ZWx5KSBkZWZpbmVkLCBidXQgYmVsaWV2ZWQgZnJlZS4KKworVGhpcyBsaWNlbnNlIHN0YXRlbWVudCBpcyB1c2VkIGluIHR3byBkaXN0aW5jdCBjaXJjdW1zdGFuY2VzLiBFaXRoZXIKK3RoZSBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5IGEgbGljZW5zZSB0aGF0IGRvZXMgbm90IGZpdCBpbnRvIGFueSBvZiB0aGUKKyJmb3JtYWxseSIgc3BlY2lmaWVkIGNhdGVnb3JpZXMsIGJ1dCB0aGUgQ1RBTiBjYXRhbG9ndWUgdGVhbSBqdWRnZXMgaXQKK3VzYWJsZSBieSBtb3N0IHVzZXJzLiBPdGhlcndpc2UsIHRoZSBzb2Z0d2FyZSBjb25zaXN0cyBvZiBkaXN0aW5jdAorcGFydHMgdG8gd2hpY2ggZGlmZmVyZW50IChmcmVlKSBsaWNlbnNlcyBhcHBseS4KKworV2hpbGUgdXNlIGlzIHByb2JhYmx5IHNhZmUsIGVhY2ggcG90ZW50aWFsIHVzZXIgc2hvdWxkIGNoZWNrIHRoZQorc29mdHdhcmUncyBsaWNlbnNlIHN0YXRlbWVudCAob3Igc3RhdGVtZW50cykgYmVmb3JlIHVzaW5nIHRoZSBzb2Z0d2FyZS4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL1RleGluZm8tbWFudWFsIGIvbGljZW5zZXMvVGV4aW5mby1tYW51YWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWJkMjdiNgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL1RleGluZm8tbWFudWFsCkBAIC0wLDAgKzEsMjQgQEAKK0NvcHlyaWdodCAoQykgPHllYXI+IDxjb3B5cmlnaHQgaG9sZGVyPgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gbWFrZSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhpcworbWFudWFsIHByb3ZpZGVkIHRoZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFyZQorcHJlc2VydmVkIG9uIGFsbCBjb3BpZXMuCisKK1tQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gcHJvY2VzcyB0aGlzIGZpbGUgdGhyb3VnaCBUZVggYW5kIHByaW50IHRoZQorcmVzdWx0cywgcHJvdmlkZWQgdGhlIHByaW50ZWQgZG9jdW1lbnQgY2FycmllcyBjb3B5aW5nIHBlcm1pc3Npb24KK25vdGljZSBpZGVudGljYWwgdG8gdGhpcyBvbmUgZXhjZXB0IGZvciB0aGUgcmVtb3ZhbCBvZiB0aGlzIHBhcmFncmFwaAorKHRoaXMgcGFyYWdyYXBoIG5vdCBiZWluZyByZWxldmFudCB0byB0aGUgcHJpbnRlZCBtYW51YWwpLl0KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhpcworbWFudWFsIHVuZGVyIHRoZSBjb25kaXRpb25zIGZvciB2ZXJiYXRpbSBjb3B5aW5nLCBbcHJvdmlkZWQgYWxzbyB0aGF0Cit0aGUgc2VjdGlvbiBlbnRpdGxlZCAiR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UiIGlzIGluY2x1ZGVkIGV4YWN0bHkKK2FzIGluIHRoZSBvcmlnaW5hbCwgYW5kXSBwcm92aWRlZCB0aGF0IHRoZSBlbnRpcmUgcmVzdWx0aW5nIGRlcml2ZWQKK3dvcmsgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIGEgcGVybWlzc2lvbiBub3RpY2UgaWRlbnRpY2FsCit0byB0aGlzIG9uZS4KKworW1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHRyYW5zbGF0aW9ucyBvZiB0aGlzCittYW51YWwgaW50byBhbm90aGVyIGxhbmd1YWdlLCB1bmRlciB0aGUgYWJvdmUgY29uZGl0aW9ucyBmb3IgbW9kaWZpZWQKK3ZlcnNpb25zLCBleGNlcHQgdGhhdCBbdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBtYXkgYmUgc3RhdGVkXSBbdGhlCitzZWN0aW9uIGVudGl0bGVkICJHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSIgbWF5IGJlIGluY2x1ZGVkXSBpbiBhCit0cmFuc2xhdGlvbiBhcHByb3ZlZCBieSB0aGUgW0ZyZWUgU29mdHdhcmVdIEZvdW5kYXRpb24gW2luc3RlYWQgb2YgaW4KK3RoZSBvcmlnaW5hbCBFbmdsaXNoXS5dCmRpZmYgLS1naXQgYS9saWNlbnNlcy9UaW5rZXIgYi9saWNlbnNlcy9UaW5rZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFjMTkzMwotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL1RpbmtlcgpAQCAtMCwwICsxLDM4IEBACitUSU5LRVIg4oCTIFNvZnR3YXJlIFRvb2xzIGZvciBNb2xlY3VsYXIgRGVzaWduCisgCitWZXJzaW9uIDQuMiAgIEp1bmUgMjAwNAorQ29weXJpZ2h0IMKpIDE5OTAtMjAwNCAgIEpheSBXaWxsaWFtIFBvbmRlcgorIAorVElOS0VSIGlzIGEgbW9kdWxhciBwcm9ncmFtIHBhY2thZ2UgZm9yIG1vbGVjdWxhciBtZWNoYW5pY3MtYmFzZWQgcG90ZW50aWFsIAorZW5lcmd5IGNhbGN1bGF0aW9ucywgZ2VvbWV0cnkgb3B0aW1pemF0aW9uLCBtb2xlY3VsYXIgZHluYW1pY3Mgc2ltdWxhdGlvbiwgCitkaXN0YW5jZSBnZW9tZXRyeSBhbmQgc3RydWN0dXJhbCBhbmFseXNpcy4KKyAKK1NlbGVjdGVkIFJlZmVyZW5jZXMgZm9yIHRoZSBUSU5LRVIgUGFja2FnZToKKyAKK1AuIFJlbiBhbmQgSi4gVy4gUG9uZGVyLCBKLiBQaHlzLiBDaGVtLiBCLCAxMDcsIDU5MzMtNTk0NyAoMjAwMykKK1AuIFJlbiBhbmQgSi4gVy4gUG9uZGVyLCBKLiBDb21wdXQuIENoZW0uLCAyMywgMTQ5Ny0xNTA2ICgyMDAyKQorUi4gVi4gUGFwcHUsIFIuIEsuIEhhcnQgYW5kIEouIFcuIFBvbmRlciwgSi4gUGh5cy4gQ2hlbS4gQiwgMTAyLCA5NzI1LTk3NDIgCisoMTk5OCkKK00uIEUuIEhvZHNkb24sIEouIFcuIFBvbmRlciBhbmQgRC4gUC4gQ2lzdG9sYSwgSi4gTW9sLiBCaW9sLiwgMjY0LCA1ODUtNjAyIAorKDE5OTYpCitDLiBFLiBLdW5kcm90LCBKLiBXLiBQb25kZXIgYW5kIEYuIE0uIFJpY2hhcmRzLCBKLiBDb21wdXQuIENoZW0uLCAxMiwgNDAyLTQwOSAKKygxOTkxKQorSi4gVy4gUG9uZGVyIGFuZCBGLiBNLiBSaWNoYXJkcywgSi4gQ29tcHV0LiBDaGVtLiwgOCwgMTAxNi0xMDI0ICgxOTg3KQorIAorQ29uZGl0aW9ucyBmb3IgVXNlIG9mIHRoZSBUSU5LRVIgUGFja2FnZToKKyAKK1RoZSBUSU5LRVIgc29mdHdhcmUgaXMgcmVnaXN0ZXJlZCB1bmRlciBVLlMuIENvcHlyaWdodCBMYXcuIFRoZSBzb3VyY2UgY29kZSB3YXMgCitkZXZlbG9wZWQgYnkgdGhlIGF1dGhvciBhbmQgaXMgZGlzdHJpYnV0ZWQgc29sZWx5IHRocm91Z2ggdGhlIERlcGFydG1lbnQgb2YgCitCaW9jaGVtaXN0cnkgYW5kIE1vbGVjdWxhciBCaW9waHlzaWNzIGF0IFdhc2hpbmd0b24gVW5pdmVyc2l0eS4gSXRzIHVzZSBpcyAKK3N1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorIAorKDEpICAgIFVzZSBvZiB0aGlzIHNvZnR3YXJlIGlzIHJlc3RyaWN0ZWQgdG8gdGhlIGluZGl2aWR1YWwsIGxhYm9yYXRvcnkgb3IgCitvcmdhbml6YXRpb24gdG8gd2hpY2ggaXQgaXMgc3VwcGxpZWQuIFRoZSBwYWNrYWdlIGFuZCBwb3J0aW9ucyB0aGVyZW9mIG1heSBub3QgCitiZSBzb2xkIG5vciBtYXkgY29waWVzIGJlIGRpc3RyaWJ1dGVkIHRvIHRoaXJkIHBhcnRpZXMgd2l0aG91dCB0aGUgZXhwcmVzcyAKK3Blcm1pc3Npb24gb2YgdGhlIGF1dGhvciBhbmQgV2FzaGluZ3RvbiBVbml2ZXJzaXR5LgorKDIpICAgIFRoaXMgc29mdHdhcmUgcGFja2FnZSBpcyBwcm92aWRlZCBvbiBhbiAiYXMgaXMiIGJhc2lzLiBUaGUgYXV0aG9yIGluIG5vIAord2F5IHdhcnJhbnRzIGVpdGhlciB0aGlzIHNvZnR3YXJlIG9yIHJlc3VsdHMgaXQgbWF5IHByb2R1Y2UuCisoMykgICAgVGhlIGF1dGhvciBpcyB1bmRlciBubyBvYmxpZ2F0aW9uIHRvIHByb3ZpZGUgYW55IHNlcnZpY2VzIGJ5IHdheSBvZiAKK21haW50ZW5hbmNlLCB1cGRhdGVzIG9yIGNvcnJlY3Rpb25zIGZvciB0aGlzIHNvZnR3YXJlLgorKDQpICAgIFJlcG9ydHMgb3IgcHVibGljYXRpb25zIHJlc3VsdGluZyBmcm9tIHVzZSBvZiB0aGlzIHNvZnR3YXJlIHBhY2thZ2UgbXVzdCAKK2NvbnRhaW4gYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIGZvcm0gY29tbW9ubHkgdXNlZCBpbiBhY2FkZW1pYyByZXNlYXJjaC4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL1VDQVItVW5pZGF0YSBiL2xpY2Vuc2VzL1VDQVItVW5pZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODcxOWQxCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvVUNBUi1VbmlkYXRhCkBAIC0wLDAgKzEsMTQgQEAKKyhDKSBDb3B5cmlnaHQgMTk5MiwxOTk1IFVDQVIvVW5pZGF0YQorCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cworZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2Ugd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQKK3RoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcywgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0Citub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiwgYW5kCit0aGF0IHRoZSBuYW1lIG9mIFVDQVIvVW5pZGF0YSBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkKK3BlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yCitwZXJtaXNzaW9uLiAgVUNBUiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMKK3NvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yCitpbXBsaWVkIHdhcnJhbnR5LiAgSXQgaXMgcHJvdmlkZWQgd2l0aCBubyBzdXBwb3J0IGFuZCB3aXRob3V0IG9ibGlnYXRpb24gb24KK3RoZSBwYXJ0IG9mIFVDQVIgb3IgVW5pZGF0YSwgdG8gYXNzaXN0IGluIGl0cyB1c2UsIGNvcnJlY3Rpb24sCittb2RpZmljYXRpb24sIG9yIGVuaGFuY2VtZW50LgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvVVBFSy1TREstRVVMQSBiL2xpY2Vuc2VzL1VQRUstU0RLLUVVTEEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWNlOTU5NgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL1VQRUstU0RLLUVVTEEKQEAgLTAsMCArMSwzMTIgQEAKKyAgICAgICAgICAgICAgICAgICAgICBFTkQtVVNFUiBMSUNFTlNFIEFHUkVFTUVOVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yCisgICAgICAgICAgICAgICAgICAgVVBFSywgSU5DLiBTREsgU09GVFdBUkUgUFJPRFVDVFMKKworICAgICAgICAgICAgICAgICAgIElNUE9SVEFOVCwgUExFQVNFIFJFQUQgQ0FSRUZVTExZCisKK1lPVSBNQVkgTk9UIElOU1RBTEwgT1IgVVNFIFRISVMgVVBFSyBTT0ZUV0FSRSBQUk9EVUNUIFVOTEVTUyBZT1UgSEFWRQorQ0FSRUZVTExZIFJFQUQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIFNFVCBGT1JUSCBCRUxPVyBBTkQgSU5ESUNBVEUKK1lPVVIgQUNDRVBUQU5DRSBPRiBTVUNIIFRFUk1TIEFORCBDT05ESVRJT05TIEJZIENMSUNLSU5HIE9OIFRIRSAiSQorQUNDRVBUIiBCVVRUT04gQVQgVEhFIEVORCBPRiBUSElTIFNDUkVFTi4KKworVGhpcyBFbmQtVXNlciBMaWNlbnNlIEFncmVlbWVudCAoIkVVTEEiKSByZXByZXNlbnRzIHRoZSB1bmRlcnN0YW5kaW5nCitiZXR3ZWVuIFVQRUssIEluYy4gYW5kIGl0cyBzdWNjZXNzb3JzIGFuZCBhc3NpZ25zICgiVVBFSyIpIGFuZCB5b3UKKyhlaXRoZXIgYW4gaW5kaXZpZHVhbCBwZXJzb24gb3IgYSBzaW5nbGUgbGVnYWwgZW50aXR5LCByZWZlcnJlZCB0byBpbgordGhpcyBFVUxBIGFzICJZb3UiIG9yICJZb3VyIikgYW5kIGdvdmVybnMgdGhlIHVzZSBvZiB0aGUgVVBFSyBzb2Z0d2FyZQorcHJvZHVjdCB0aGF0IGFjY29tcGFuaWVzIHRoaXMgRVVMQSwgaW5jbHVkaW5nIGFueSBhc3NvY2lhdGVkIG1lZGlhLAorcHJpbnRlZCBtYXRlcmlhbHMgYW5kIGVsZWN0cm9uaWMgZG9jdW1lbnRhdGlvbiAodGhlICJTb2Z0d2FyZQorUHJvZHVjdCIpLCBleGNlcHQgdG8gdGhlIGV4dGVudCBhIHBhcnRpY3VsYXIgcHJvZ3JhbSBpcyB0aGUgc3ViamVjdCBvZgorYSBzZXBhcmF0ZSB3cml0dGVuIGFncmVlbWVudCB3aXRoIFVQRUsuIFRoZSBTb2Z0d2FyZSBQcm9kdWN0IG1heSBhbHNvCitpbmNsdWRlIGFueSBzb2Z0d2FyZSB1cGRhdGVzLCBhZGQtb24gY29tcG9uZW50cywgc3RlbmNpbHMsIHRlbXBsYXRlcywKK3NoYXBlcywgc3ltYm9scywgd2ViIHNlcnZpY2VzIGFuZC9vciBzdXBwbGVtZW50cyB0aGF0IFVQRUsgbWF5IHByb3ZpZGUKK3RvIFlvdSBvciBtYWtlIGF2YWlsYWJsZSB0byBZb3UsIG9yIHRoYXQgWW91IG9idGFpbiBmcm9tIHRoZSB1c2Ugb2YKK2ZlYXR1cmVzIG9yIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIFNvZnR3YXJlIFByb2R1Y3QsIGFmdGVyIHRoZSBkYXRlIFlvdQorb2J0YWluIFlvdXIgaW5pdGlhbCBjb3B5IG9mIHRoZSBTb2Z0d2FyZSBQcm9kdWN0ICh3aGV0aGVyIGJ5IGRlbGl2ZXJ5CitvZiBhIENELCBwZXJtaXR0ZWQgZG93bmxvYWRpbmcgZnJvbSB0aGUgSW50ZXJuZXQgb3IgYSBkZWRpY2F0ZWQgd2ViCitzaXRlLCBvciBvdGhlcndpc2UpLCB0byB0aGUgZXh0ZW50IHRoYXQgc3VjaCBpdGVtcyBhcmUgbm90IGFjY29tcGFuaWVkCitieSBhIHNlcGFyYXRlIGxpY2Vuc2UgYWdyZWVtZW50IG9yIHRlcm1zIG9mIHVzZS4KKworQlkgSU5TVEFMTElORyBPUiBVU0lORyBUSEUgU09GVFdBUkUgUFJPRFVDVCwgWU9VIEFSRSBDT05TRU5USU5HIFRPIEJFCitCT1VORCBCWSBUSElTIEVVTEEuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gQUxMIE9GIFRIRSBURVJNUyBBTkQKK0NPTkRJVElPTlMgT0YgVEhJUyBFVUxBLCBUSEVOIChBKSBETyBOT1QgSU5TVEFMTCBPUiBVU0UgVEhFIFNPRlRXQVJFCitQUk9EVUNULCBBTkQgKEIpIFlPVSBNQVkgUkVUVVJOIFRIRSBTT0ZUV0FSRSBQUk9EVUNUIFRPIFRIRSBQRVJTT04gV0hPCitQUk9WSURFRCBJVCBUTyBZT1UgRk9SIEEgRlVMTCBSRUZVTkQuIFNob3VsZCBZb3UgaGF2ZSBhbnkgcXVlc3Rpb25zCitjb25jZXJuaW5nIHRoaXMgRVVMQSwgb3IgaWYgWW91IGRlc2lyZSB0byBjb250YWN0IFVQRUsgZm9yIGFueSByZWFzb24sCitwbGVhc2UgY29udGFjdCB0aGUgVVBFSyBzdWJzaWRpYXJ5IHNlcnZpbmcgWW91ciBjb3VudHJ5L3JlZ2lvbi4KKworMS4gR1JBTlQgT0YgTElDRU5TRS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBFVUxBCithbmQgWW91ciBwYXltZW50IG9mIGFsbCBhcHBsaWNhYmxlIGZlZXMgZm9yIHRoZSBTb2Z0d2FyZSBQcm9kdWN0LCBVUEVLCithbmQgaXRzIHN1cHBsaWVycyBoZXJlYnkgZ3JhbnQgdG8gWW91LCBhbmQgWW91IGhlcmVieSBhY2NlcHQgYQorbm9uZXhjbHVzaXZlIGxpY2Vuc2UgdG8gaW5zdGFsbCBhbmQgdXNlIGNvcGllcyBvZiB0aGUgU29mdHdhcmUKK1Byb2R1Y3QsIG9uIGEgZGV2aWNlLCB3b3Jrc3RhdGlvbiwgdGVybWluYWwsIFBDIHBlcmlwaGVyYWwgb3Igb3RoZXIKK2RpZ2l0YWwsIGVsZWN0cm9uaWMgb3IgYW5hbG9nIGRldmljZSBlbWJlZGRpbmcgYSBVUEVLIGZpbmdlcnByaW50CitzZW5zb3IgKGEgIlVQRUstRW5hYmxlZCBEZXZpY2UiKSwgZm9yIHRoZSBwdXJwb3NlIG9mIGRlc2lnbmluZywKK2NyZWF0aW5nIHRlc3RpbmcsIGFuZCBkaXN0cmlidXRpbmcgWW91ciBzb2Z0d2FyZSBwcm9kdWN0KHMpLiBJZiB0aGlzCitTb2Z0d2FyZSBQcm9kdWN0IGNvbnRhaW5zIGRvY3VtZW50YXRpb24gdGhhdCBpcyBwcm92aWRlZCBvbmx5IGluCitlbGVjdHJvbmljIGZvcm0sIFlvdSBtYXkgcHJpbnQgb25lIGNvcHkgb2Ygc3VjaCBlbGVjdHJvbmljCitkb2N1bWVudGF0aW9uOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBZb3UgbWF5IG5vdCBjb3B5IHRoZSBwcmludGVkCittYXRlcmlhbHMgYWNjb21wYW55aW5nIHRoZSBTb2Z0d2FyZSBQcm9kdWN0LgorCisyLiBBRERJVElPTkFMIExJQ0VOU0UgUklHSFRTIC0gUkVESVNUUklCVVRBQkxFIENPREUuIEluIGFkZGl0aW9uIHRvCit0aGUgcmlnaHRzIGdyYW50ZWQgaW4gc2VjdGlvbiAxLCBjZXJ0YWluIHBvcnRpb25zIG9mIHRoZSBwcm9kdWN0IGFyZQorcmVkaXN0cmlidXRhYmxlIGJ5IFlvdSBhcyBwYXJ0IG9mIFlvdXIgY29weXJpZ2h0ZWQgc29mdHdhcmUKK2FwcGxpY2F0aW9uLiBUaGVzZSBhZGRpdGlvbmFsIGxpY2Vuc2UgcmlnaHRzIGFyZSBjb25kaXRpb25lZCB1cG9uIHlvdXIKK2NvbXBsaWFuY2Ugd2l0aCB0aGUgZGlzdHJpYnV0aW9uIHJlcXVpcmVtZW50cyBhbmQgbGljZW5zZSByZXN0cmljdGlvbnMKK2Rlc2NyaWJlZCBpbiBTZWN0aW9uIDMuCisKKzIuMSBTYW1wbGUgQ29kZS4gVVBFSyBncmFudHMgeW91IHRoZSByaWdodCB0byB1c2UgYW5kIG1vZGlmeSB0aGUKK3NvdXJjZSBjb2RlIHZlcnNpb24gb2YgdGhvc2UgcG9ydGlvbnMgb2YgdGhlIFByb2R1Y3QgaWRlbnRpZmllZCBhcworIlNhbXBsZXMiIGluIFJFRElTVFJJQlVUQUJMRVMuVFhUIG9yIGVsc2V3aGVyZSBpbiB0aGUgUHJvZHVjdCAoIlNhbXBsZQorQ29kZSIpIGZvciB0aGUgc29sZSBwdXJwb3NlcyBvZiBkZXNpZ25pbmcsIGRldmVsb3BpbmcsIHRlc3RpbmcgYW5kCitkaXN0cmlidXRpbmcgeW91ciBzb2Z0d2FyZSBwcm9kdWN0KHMpLCBhbmQgdG8gcmVwcm9kdWNlIGFuZCBkaXN0cmlidXRlCit0aGUgU2FtcGxlIENvZGUsIGFsb25nIHdpdGggYW55IG1vZGlmaWNhdGlvbnMgdGhlcmVvZiwgaW4gb2JqZWN0CithbmQvb3Igc291cmNlIGNvZGUgZm9ybS4gRm9yIGFwcGxpY2FibGUgcmVkaXN0cmlidXRpb24gcmVxdWlyZW1lbnRzCitmb3IgU2FtcGxlIENvZGUsIHNlZSBTZWN0aW9uIDMuMSBiZWxvdy4KKworMi4yIFJlZGlzdHJpYnV0YWJsZSBPYmplY3QtQ29kZS4gVVBFSyBncmFudHMgeW91IGEgbm9uZXhjbHVzaXZlIHJpZ2h0Cit0byByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgdGhlIG9iamVjdCBjb2RlIG9mIGFueSBwb3J0aW9uIG9mIHRoZQorUHJvZHVjdCBsaXN0ZWQgaW4gUkVESVNUUklCVVRBQkxFUy5UWFQgKCJSZWRpc3RyaWJ1dGFibGUgQ29kZSIpLiBGb3IKK2FwcGxpY2FibGUgcmVkaXN0cmlidXRpb24gcmVxdWlyZW1lbnRzIGZvciBSZWRpc3RyaWJ1dGFibGUgQ29kZSwgc2VlCitTZWN0aW9uIDMuMSwgYmVsb3cuCisKKzMuIExJQ0VOU0UgUkVTVFJJQ1RJT05TIC0tIERJU1RSSUJVVElPTiBSRVFVSVJFTUVOVFMuIElmIHlvdSBjaG9vc2UgdG8KK2V4ZXJjaXNlIHlvdXIgcmlnaHRzIHVuZGVyIFNlY3Rpb24gMiwgYW55IHJlZGlzdHJpYnV0aW9uIGJ5IHlvdQorcmVxdWlyZXMgY29tcGxpYW5jZSB3aXRoIHRoZSBmb2xsb3dpbmcgdGVybXMsIGFzIGFwcHJvcHJpYXRlLgorCiszLjEgUmVkaXN0cmlidXRhYmxlIENvZGUtU3RhbmRhcmQuCisKKyhhKSBJZiB5b3UgYXJlIGF1dGhvcml6ZWQgYW5kIGNob29zZSB0byByZWRpc3RyaWJ1dGUgU2FtcGxlIENvZGUKK2FuZC9vciBSZWRpc3RyaWJ1dGFibGUgT2JqZWN0LSBDb2RlLCBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiAyLCB5b3UKK2FncmVlOiAoaSkgZXhjZXB0IGFzIG90aGVyd2lzZSBub3RlZCBpbiBTZWN0aW9uIDIuMSAoU2FtcGxlIENvZGUpLCB0bworZGlzdHJpYnV0ZSB0aGUgUmVkaXN0cmlidXRhYmxlcyBvbmx5IGluIG9iamVjdCBjb2RlIGZvcm0gYW5kIGluCitjb25qdW5jdGlvbiB3aXRoIGFuZCBhcyBhIHBhcnQgb2YgYSBjb3B5cmlnaHRlZCBzb2Z0d2FyZSBhcHBsaWNhdGlvbgorcHJvZHVjdCBkZXZlbG9wZWQgYnkgeW91IHRoYXQgYWRkcyBzaWduaWZpY2FudCBhbmQgcHJpbWFyeQorZnVuY3Rpb25hbGl0eSB0byB0aGUgUmVkaXN0cmlidXRhYmxlcyAoIkxpY2Vuc2VkIFByb2R1Y3QiKTsgKGlpKSB0bworZGlzcGxheSB5b3VyIG93biB2YWxpZCBjb3B5cmlnaHQgbm90aWNlIHdoaWNoIHNoYWxsIGJlIHN1ZmZpY2llbnQgdG8KK3Byb3RlY3QgVVBFSydzIGNvcHlyaWdodCBpbiB0aGUgUHJvZHVjdDsgKGlpaSkgbm90IHRvIHJlbW92ZSBvcgorb2JzY3VyZSBhbnkgY29weXJpZ2h0LCB0cmFkZW1hcmsgb3IgcGF0ZW50IG5vdGljZXMgdGhhdCBhcHBlYXIgb24gdGhlCitQcm9kdWN0IGFzIGRlbGl2ZXJlZCB0byB5b3U7IChpdikgdG8gaW5kZW1uaWZ5LCBob2xkIGhhcm1sZXNzLCBhbmQKK2RlZmVuZCBVUEVLIGZyb20gYW5kIGFnYWluc3QgYW55IGNsYWltcyBvciBsYXdzdWl0cywgaW5jbHVkaW5nCithdHRvcm5leSdzIGZlZXMsIHRoYXQgYXJpc2Ugb3IgcmVzdWx0IGZyb20gdGhlIHVzZSBvciBkaXN0cmlidXRpb24gb2YKK3RoZSBMaWNlbnNlZCBQcm9kdWN0OyAodikgb3RoZXJ3aXNlIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzCitFVUxBOyBhbmQgKHZpKSBhZ3JlZSB0aGF0IFVQRUsgcmVzZXJ2ZXMgYWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5CitncmFudGVkLgorCisoYikgWW91IGFsc28gYWdyZWUgbm90IHRvIHBlcm1pdCBmdXJ0aGVyIGRpc3RyaWJ1dGlvbiBvZiB0aGUKK1JlZGlzdHJpYnV0YWJsZXMgYnkgeW91ciBlbmQgdXNlcnMgZXhjZXB0OiAoMSkgeW91IG1heSBwZXJtaXQgZnVydGhlcgorcmVkaXN0cmlidXRpb24gb2YgdGhlIFJlZGlzdHJpYnV0YWJsZXMgYnkgeW91ciBkaXN0cmlidXRvcnMgdG8geW91cgorZW5kLXVzZXIgY3VzdG9tZXJzIGlmIHlvdXIgZGlzdHJpYnV0b3JzIG9ubHkgZGlzdHJpYnV0ZSB0aGUKK1JlZGlzdHJpYnV0YWJsZXMgaW4gY29uanVuY3Rpb24gd2l0aCwgYW5kIGFzIHBhcnQgb2YsIHRoZSBMaWNlbnNlZAorUHJvZHVjdCBhbmQgWW91IGFuZCBZb3VyIGRpc3RyaWJ1dG9ycyBjb21wbHkgd2l0aCBhbGwgb3RoZXIgdGVybXMgb2YKK3RoaXMgRVVMQS4KKworNC4gUkVTRVJWQVRJT04gT0YgUklHSFRTOyBSRVNUUklDVElPTlMuIEFsbCByaWdodHMgbm90IGV4cHJlc3NseQorZ3JhbnRlZCBieSBVUEVLIGluIHRoaXMgRVVMQSBhcmUgcmVzZXJ2ZWQuIEV4Y2VwdCBhcyBvdGhlcndpc2UKK2V4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIEVVTEEsIFlvdSBzaGFsbCBub3QsIGFuZCBzaGFsbCBub3QgYWxsb3cKK2FueSB0aGlyZCBwYXJ0eSB0bzoKKworKGEpIHRyYW5zZmVyLCBhc3NpZ24sIHN1YmxpY2Vuc2UsIHJlc2VsbCwgcmUtbGljZW5zZSBvciBwcm92aWRlLAorbGVhc2UsIGxlbmQgb3IgYWxsb3cgYWNjZXNzIHRvIHRoZSBTb2Z0d2FyZSBQcm9kdWN0IHRvIGFueSBvdGhlcgorcGVyc29uIG9yIGVudGl0eSwgZXhjZXB0IGFzIG90aGVyd2lzZSBwcm92aWRlZCBoZXJlaW47CisKKyhiKSBtYWtlIGVycm9yIGNvcnJlY3Rpb25zIG9yIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIGJhc2VkIHVwb24gdGhlCitTb2Z0d2FyZSBQcm9kdWN0OworCisoYykgY29weSAoZXhjZXB0IHRvIG1ha2UgYSBzaW5nbGUgYmFjay11cCBjb3B5IHRvIHJlcGxhY2UgYW4gdW51c2FibGUKK2NvcHkgb2YgdGhlIFNvZnR3YXJlIFByb2R1Y3QpLCBtb2RpZnksIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBiYXNlZAordXBvbiwgZGVjb21waWxlLCBkZWNyeXB0LCByZXZlcnNlIGVuZ2luZWVyIG9yIGF0dGVtcHQgdG8gcmVjb25zdHJ1Y3QKK29yIGRpc2NvdmVyIGFueSBzb3VyY2UgY29kZSBvciB1bmRlcmx5aW5nIGlkZWFzIG9yIGFsZ29yaXRobXMgb2YgdGhlCitTb2Z0d2FyZSBQcm9kdWN0IGJ5IGFueSBtZWFucyB3aGF0c29ldmVyIChleGNlcHQgdG8gdGhlIGV4dGVudAorYXBwbGljYWJsZSBsYXdzIHNwZWNpZmljYWxseSBwcm9oaWJpdCBzdWNoIHJlc3RyaWN0aW9uKSwgZGlzYXNzZW1ibGUKK29yIG90aGVyd2lzZSByZWR1Y2UgdGhlIFNvZnR3YXJlIFByb2R1Y3QgdG8gaHVtYW4tcmVhZGFibGUgZm9ybSB0bworZ2FpbiBhY2Nlc3MgdG8gdHJhZGUgc2VjcmV0cyBvciBjb25maWRlbnRpYWwgaW5mb3JtYXRpb24gaW4gdGhlCitTb2Z0d2FyZSBQcm9kdWN0OworCisoZCkgdXNlIHRoZSBTb2Z0d2FyZSBQcm9kdWN0IGZvciB0aW1lc2hhcmluZywgaG9zdGluZyBvciBzZXJ2aWNlCitidXJlYXUgcHVycG9zZXM7IG9yCisKKyhlKSByZW1vdmUsIG9ic2N1cmUsIG9yIGFsdGVyIFVQRUsncyAob3IgaXRzIHRoaXJkIHBhcnR5IGxpY2Vuc29ycycpCitjb3B5cmlnaHQgbm90aWNlcywgdHJhZGVtYXJrcywgb3Igb3RoZXIgcHJvcHJpZXRhcnkgcmlnaHRzIG5vdGljZXMKK2FmZml4ZWQgdG8gb3IgY29udGFpbmVkIHdpdGhpbiB0aGUgU29mdHdhcmUgUHJvZHVjdCAoYW5kIGFueSBjb3BpZXMKK3RoZXJlb2YsIGluY2x1ZGluZyB0aGUgYmFjay11cCBjb3B5KSBvciB1c2Ugc3VjaCBub3RpY2VzLCB0cmFkZW1hcmtzCitvciBzZXJ2aWNlIG1hcmtzIGZvciBhbnkgb3RoZXIgcHVycG9zZS4KKworWW91IHVuZGVyc3RhbmQgYW5kIGFncmVlIHRoYXQgKGkpIHRoZSBTb2Z0d2FyZSBQcm9kdWN0IGlzIGxpY2Vuc2VkIHRvCitZb3UgYW5kIG5vdCBzb2xkLCAoaWkpIHlvdXIgbGljZW5zZSB0byB0aGUgaW5kaXZpZHVhbCBjb21wb25lbnRzIG9mCit0aGUgU29mdHdhcmUgUHJvZHVjdCBpcyBsaW1pdGVkIHRvIHVzZSBvZiB0aGUgU29mdHdhcmUgUHJvZHVjdCBhcyBhCit3aG9sZSwgYW5kIFlvdSBtYXkgbm90IHVzZSBvciBzZWVrIHRvIHVzZSBzb2Z0d2FyZSBjb2RlIGluY29ycG9yYXRlZAordGhlcmVpbiBvbiBhIHN0YW5kLWFsb25lIGJhc2lzLCBhbmQgKGlpaSkgdGhlIGluZGl2aWR1YWwgY29tcG9uZW50cyBvZgordGhlIFNvZnR3YXJlIFByb2R1Y3QgbWF5IG5vdCBiZSBzZXBhcmF0ZWQgZm9yIHVzZSBvbiBtb3JlIHRoYW4gb25lCitVUEVLLSBFbmFibGVkIERldmljZSwgdW5sZXNzIGV4cHJlc3NseSBwZXJtaXR0ZWQgYnkgdGhpcyBFVUxBLiBVUEVLCityZXRhaW5zIHRpdGxlIHRvIGFsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlIFByb2R1Y3QgYW5kIGFsbCBhc3NvY2lhdGVkCitpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIHRoZXJlaW4sIGFuZCBhbnkgYW5kIGFsbCBkb2N1bWVudGF0aW9uCit0aGVyZW9mLgorCis1LiBQUk9QUklFVEFSWSBOT1RJQ0VTOyBUUkFERU1BUktTLiBZb3UgYWdyZWUgdG8gbWFpbnRhaW4gYW5kCityZXByb2R1Y2UgYWxsIGNvcHlyaWdodCBhbmQgb3RoZXIgcHJvcHJpZXRhcnkgbm90aWNlcyBvbiBhbGwgY29waWVzLAoraW4gYW55IGZvcm0sIG9mIHRoZSBTb2Z0d2FyZSBQcm9kdWN0IGluIHRoZSBzYW1lIGZvcm0gYW5kIG1hbm5lciB0aGF0CitzdWNoIGNvcHlyaWdodCBhbmQgb3RoZXIgcHJvcHJpZXRhcnkgbm90aWNlcyBhcmUgaW5jbHVkZWQgb24gdGhlCitTb2Z0d2FyZSBQcm9kdWN0LCBpbmNsdWRpbmcgb24gYW55IGJhY2stdXAgY29weSBvZiB0aGUgU29mdHdhcmUKK1Byb2R1Y3QuIFRoaXMgRVVMQSBkb2VzIG5vdCBncmFudCBZb3UgYW55IHJpZ2h0cyBpbiBjb25uZWN0aW9uIHdpdGgKK2FueSB0cmFkZW1hcmtzIG9yIHNlcnZpY2UgbWFya3Mgb2YgVVBFSy4KKworNi4gU1VQUE9SVCBTRVJWSUNFUy4gVVBFSyBtYXkgcHJvdmlkZSBZb3Ugd2l0aCBzdXBwb3J0IHNlcnZpY2VzCityZWxhdGVkIHRvIHRoZSBTb2Z0d2FyZSBQcm9kdWN0ICgiU3VwcG9ydCBTZXJ2aWNlcyIpLiBVc2Ugb2YgU3VwcG9ydAorU2VydmljZXMsIGlmIGFueSwgaXMgZ292ZXJuZWQgYnkgdGhlIFVQRUsgcG9saWNpZXMgYW5kIHRlcm1zIGRlc2NyaWJlZAoraW4gb3RoZXIgVVBFSy1wcm92aWRlZCBtYXRlcmlhbHMuIEFueSBzdXBwbGVtZW50YWwgc29mdHdhcmUgY29kZQorcHJvdmlkZWQgdG8gWW91IGFzIHBhcnQgb2YgdGhlIFN1cHBvcnQgU2VydmljZXMgaXMgY29uc2lkZXJlZCBwYXJ0IG9mCit0aGUgU29mdHdhcmUgUHJvZHVjdCBhbmQgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcworRVVMQS4KKworNy4gTElNSVRFRCBXQVJSQU5UWS4KKworKGEpIFVQRUsgd2FycmFudHMgdGhhdCBkdXJpbmcgdGhlICJXYXJyYW50eSBQZXJpb2QiIChhcyBkZWZpbmVkCitiZWxvdyk6IChpKSB0aGUgbWVkaWEgb24gd2hpY2ggdGhlIFNvZnR3YXJlIFByb2R1Y3QgaXMgZnVybmlzaGVkLCBpZgorYW55LCB3aWxsIGJlIGZyZWUgb2YgZGVmZWN0cyBpbiBtYXRlcmlhbHMgYW5kIHdvcmttYW5zaGlwIHVuZGVyIG5vcm1hbAordXNlOyBhbmQgKGlpKSB0aGUgU29mdHdhcmUgUHJvZHVjdCB3aWxsIHN1YnN0YW50aWFsbHkgY29uZm9ybSB0byBpdHMKK3B1Ymxpc2hlZCBzcGVjaWZpY2F0aW9ucyAodGhlICJMaW1pdGVkIFdhcnJhbnR5IikuIFRoZSAiV2FycmFudHkKK1BlcmlvZCIgbWVhbnMgYSBwZXJpb2QgYmVnaW5uaW5nIG9uIHRoZSBkYXRlIG9mIFlvdXIgcmVjZWlwdCBvZiB0aGUKK1NvZnR3YXJlIFByb2R1Y3QsIGFzIGFwcGxpY2FibGUsIGFuZCBlbmRpbmcgb24gdGhlIGxhdGVyIG9mIChpKSB0aGlydHkKKygzMCkgZGF5cyBmcm9tIHRoZSBkYXRlIG9mIGRlbGl2ZXJ5IG9mIHN1Y2ggU29mdHdhcmUgUHJvZHVjdCwgYXMKK2FwcGxpY2FibGUsIG9yIChpaSkgdGhlIGVuZCBvZiB0aGUgbWluaW11bSBwZXJpb2QgcmVxdWlyZWQgYnkgdGhlIGxhdworb2YgdGhlIGFwcGxpY2FibGUganVyaXNkaWN0aW9uLiBUaGUgTGltaXRlZCBXYXJyYW50eSBleHRlbmRzIG9ubHkgdG8KK1lvdSBhcyB0aGUgb3JpZ2luYWwgbGljZW5zZWUuIFRoaXMgTGltaXRlZCBXYXJyYW50eSBkb2VzIG5vdCBjb3ZlcgorYW55dGhpbmcgY2F1c2VkIGJ5IGFjY2lkZW50IG9yIGFidXNlIG9yIGJ5IHVzZSBvZiB0aGUgU29mdHdhcmUgUHJvZHVjdAorb3RoZXIgdGhhbiBmb3IgaXRzIHJlYXNvbmFibHkgaW50ZW5kZWQgcHVycG9zZXMgYW5kIGFzIHJlY29tbWVuZGVkIGluCit0aGUgYWNjb21wYW55aW5nIHVzZXIgZG9jdW1lbnRhdGlvbi4gVXBkYXRlcyBhcmUgY292ZXJlZCBieSB0aGlzCit3YXJyYW50eSBvbmx5IGlmIHByb3ZpZGVkIHRvIFlvdSBkdXJpbmcgdGhlIFdhcnJhbnR5IFBlcmlvZC4gWW91ciBzb2xlCithbmQgZXhjbHVzaXZlIHJlbWVkeSBhbmQgdGhlIGVudGlyZSBsaWFiaWxpdHkgb2YgVVBFSyBhbmQgaXRzCitzdXBwbGllcnMgdW5kZXIgdGhpcyBMaW1pdGVkIFdhcnJhbnR5IHdpbGwgYmUsIGF0IFVQRUsncyBvcHRpb24sIHRvCityZXBhaXIsIHJlcGxhY2UsIG9yIHJlZnVuZCB0aGUgcHVyY2hhc2UgcHJpY2UgZm9yIHRoZSBTb2Z0d2FyZSBQcm9kdWN0Cit0aGF0IGlzIHJldHVybmVkIHRvIFVQRUssIGFzIGFwcGxpY2FibGUsIHByb3ZpZGVkIHRoYXQgeW91IHJlcG9ydCB0aGUKK2RlZmVjdHMgdG8gVVBFSyBvciBpdHMgZGVzaWduZWUgd2l0aGluIHRoZSBXYXJyYW50eSBQZXJpb2QuIEFueSBicmVhY2gKK29mIHRoZSBMaW1pdGVkIFdhcnJhbnR5IHJlbGF0ZWQgdG8gYW4gZXJyb3Igb3IgZGVmZWN0IGluIHRoZSBtZWRpYQorY29udGFpbmluZyB0aGUgU29mdHdhcmUgUHJvZHVjdCBzaGFsbCBiZSByZW1lZGllZCBzb2xlbHkgd2l0aCB0aGUKK3JlcGxhY2VtZW50IG9mIHRoZSBtZWRpYSBjb250YWluaW5nIHRoZSBTb2Z0d2FyZSBQcm9kdWN0LiBZb3Ugc2hhbGwKK3BheSBzaGlwcGluZyBvciBmcmVpZ2h0IGNoYXJnZXMsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLAorb2J0YWluaW5nIGZ1bGwgdmFsdWUgcmVwbGFjZW1lbnQgaW5zdXJhbmNlLCBmb3IgYW55IHJldHVybnMsIHdoZXRoZXIKK2ZvciByZXBhaXIsIHJlcGxhY2VtZW50LCBvciByZWZ1bmQsIHRvIFVQRUsgb3IgaXRzIGRlc2lnbmVlLgorCisoYikgVGhpcyB3YXJyYW50eSBkb2VzIG5vdCBhcHBseSBpZiB0aGUgU29mdHdhcmUgUHJvZHVjdCAoaSkgaXMKK2xpY2Vuc2VkIGZvciBiZXRhLCBldmFsdWF0aW9uLCB0ZXN0aW5nLCBkZW1vbnN0cmF0aW9uIG9yIG90aGVyCitwdXJwb3NlcyBmb3Igd2hpY2ggVVBFSyBkb2VzIG5vdCByZWNlaXZlIGEgbGljZW5zZSBmZWUsIChpaSkgaGFzIGJlZW4KK2FsdGVyZWQsIGV4Y2VwdCBieSBVUEVLLCAoaWlpKSBoYXMgbm90IGJlZW4gaW5zdGFsbGVkLCBvcGVyYXRlZCwKK3JlcGFpcmVkLCBvciBtYWludGFpbmVkIGJ5IFVQRUsgb3IgaW4gYWNjb3JkYW5jZSB3aXRoIGluc3RydWN0aW9ucworc3VwcGxpZWQgYnkgVVBFSywgKGl2KSBoYXMgYmVlbiBzdWJqZWN0ZWQgdG8gYWJub3JtYWwgcGh5c2ljYWwgb3IKK2VsZWN0cmljYWwgc3RyZXNzLCBtaXN1c2UsIG5lZ2xpZ2VuY2UsIG9yIGFjY2lkZW50LCBvciAodikgaXMgdXNlZCBpbgordWx0cmFoYXphcmRvdXMgYWN0aXZpdGllcy4KKworOC4gRElTQ0xBSU1FUiBPRiBXQVJSQU5USUVTLgorCisoYSkgRVhDRVBUIEZPUiBUSEUgRVhQUkVTUyBXQVJSQU5USUVTIFNFVCBGT1JUSCBJTiBTRUNUSU9OIDcsIFVQRUsgQU5ECitJVFMgU1VQUExJRVJTIFBST1ZJREUgVEhFIFNPRlRXQVJFIFBST0RVQ1QgQU5EIFNVUFBPUlQgU0VSVklDRVMgKElGCitBTlkpIFRPIFlPVSAiQVMgSVMsIiBBTkQgWU9VUiBVU0UgSVMgQVQgWU9VUiBPV04gUklTSy4gVVBFSyBET0VTIE5PVAorTUFLRSwgQU5EIEhFUkVCWSBESVNDTEFJTVMsIEFOWSBBTkQgQUxMIE9USEVSIEVYUFJFU1MgT1IgSU1QTElFRAorV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OSU5GUklOR0VNRU5UIE9GCitUSElSRCBQQVJUWSBSSUdIVFMsIEFORCBBTlkgV0FSUkFOVElFUyBBUklTSU5HIEZST00gQSBDT1VSU0UgT0YKK0RFQUxJTkcsIFVTQUdFLCBPUiBUUkFERSBQUkFDVElDRS4gVEhFIERVUkFUSU9OIE9GIEFOWSBJTVBMSUVECitXQVJSQU5UWSBUSEFUIElTIE5PVCBFRkZFQ1RJVkVMWSBESVNDTEFJTUVEIFdJTEwgQkUgTElNSVRFRCBUTyBUSEUKK1dBUlJBTlRZIFBFUklPRC4gU09NRSBTVEFURVMgRE8gTk9UIEFMTE9XIExJTUlUQVRJT05TIE9OIEhPVyBMT05HIEFOCitJTVBMSUVEIFdBUlJBTlRZIExBU1RTLCBTTyBUSEUgQUJPVkUgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKworKGIpIFVQRUsgRE9FUyBOT1QgV0FSUkFOVCBUSEFUIFRIRSBTT0ZUV0FSRSBQUk9EVUNUIElTIEVSUk9SIEZSRUUgT1IKK1RIQVQgWU9VIFdJTEwgQkUgQUJMRSBUTyBPUEVSQVRFIFRIRSBTT0ZUV0FSRSBXSVRIT1VUIFBST0JMRU1TIE9SCitJTlRFUlJVUFRJT05TLgorCis5LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS4KKworKGEpIFRPIFRIRSBNQVhJTVVNIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcsIFlPVSBFWFBSRVNTTFkKK0FDS05PV0xFREdFIEFORCBBR1JFRSBUSEFUIE5FSVRIRVIgVVBFSyBOT1IgSVRTIEFGRklMSUFURVMsIFJFU0VMTEVSUworT1IgTElDRU5TT1JTIFdJTEwgQkUgTElBQkxFIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsCitDT05TRVFVRU5USUFMLCBQVU5JVElWRSBPUiBFWEVNUExBUlkgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBPUiBJTgorQ09OTkVDVElPTiBXSVRIIFRISVMgRVVMQSwgSE9XU09FVkVSIENBVVNFRCBCWSBBTlkgVEhFT1JZIE9GCitMSUFCSUxJVFksIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8sIENPTlRSQUNUUywgUFJPRFVDVFMKK0xJQUJJTElUWSwgU1RSSUNUIExJQUJJTElUWSBBTkQgTkVHTElHRU5DRSwgQU5EIFdIRVRIRVIgT1IgTk9UIFVQRUsgT1IKK0lUUyBTVVBQTElFUlMgT1IgTElDRU5TT1JTIEhBVkUgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0VTLiBXSVRIT1VUIExJTUlUSU5HIFRIRSBGT1JFR09JTkcgQU5EIFRPIFRIRSBNQVhJTVVNIEVYVEVOVAorUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIFRIRSBUT1RBTCBMSUFCSUxJVFkgT0YKK1VQRUsgT1IgQU5ZIE9GIElUUyBBRkZJTElBVEVTLCBTVVBQTElFUlMgT1IgTElDRU5TT1JTIEFSSVNJTkcgT1VUIE9GCitPUiBSRUxBVEVEIFRPIFRISVMgRVVMQSBFWENFRUQgVEhFIEZFRVMgQUNUVUFMTFkgUEFJRCBUTyBVUEVLIEZPUiBUSEUKK1NPRlRXQVJFIFBST0RVQ1QuCisKKyhiKSBZT1UgQUNLTk9XTEVER0UgQU5EIEFHUkVFIFRIQVQgVEhFIFBST1ZJU0lPTlMgVU5ERVIgVEhJUyBFVUxBIFRIQVQKK0xJTUlUIExJQUJJTElUWSwgRElTQ0xBSU0gV0FSUkFOVElFUywgT1IgRVhDTFVERSBDT05TRVFVRU5USUFMIERBTUFHRVMKK09SIE9USEVSIERBTUFHRVMgT1IgUkVNRURJRVMgQVJFIEVTU0VOVElBTCBURVJNUyBPRiBUSElTIEVVTEEgVEhBVCBBUkUKK0ZVTkRBTUVOVEFMIFRPIFRIRSBQQVJUSUVTJyBVTkRFUlNUQU5ESU5HIFJFR0FSRElORyBBTExPQ0FUSU9OIE9GCitSSVNLLiBBQ0NPUkRJTkdMWSwgU1VDSCBQUk9WSVNJT05TIFNIQUxMIEJFIFNFVkVSQUJMRSBBTkQgSU5ERVBFTkRFTlQKK09GIEFOWSBPVEhFUiBQUk9WSVNJT05TIEFORCBTSEFMTCBCRSBFTkZPUkNFRCBBUyBTVUNILCBSRUdBUkRMRVNTIE9GCitBTlkgQlJFQUNIIE9SIE9USEVSIE9DQ1VSUkVOQ0UgSEVSRVVOREVSLCBBTkQgRVZFTiBVTkRFUiBDSVJDVU1TVEFOQ0VTCitUSEFUIENBVVNFIEFOWSBFWENMVVNJVkUgUkVNRURZIFVOREVSIFRISVMgRVVMQSBUTyBGQUlMIE9GIElUUworRVNTRU5USUFMIFBVUlBPU0UuCisKKzEwLiBURVJNIEFORCBURVJNSU5BVElPTi4KKworKGEpIFRoZSB0ZXJtIG9mIHRoaXMgRVVMQSBzaGFsbCBjb21tZW5jZSB1cG9uIHRoZSBkYXRlIFlvdSBhY2NlcHQgdGhlCit0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEVVTEEsIGFuZCBzaGFsbCBjb250aW51ZSBpbiBmdWxsIGZvcmNlCithbmQgZWZmZWN0IHRoZXJlYWZ0ZXIgdW5sZXNzIHRlcm1pbmF0ZWQgYnkgVVBFSyBhcyBwcm92aWRlZCBoZXJlaW4uCitVUEVLIG1heSwgYXQgaXRzIG9wdGlvbiwgdGVybWluYXRlIHRoaXMgRVVMQSBpbW1lZGlhdGVseSB1cG9uIG5vdGljZQordG8gWW91LCBpZiBZb3UgZmFpbCB0byBjb21wbHkgd2l0aCBhbnkgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcworRVVMQS4KKworKGIpIFVwb24gdGVybWluYXRpb24sIGFsbCBsaWNlbnNlIHJpZ2h0cyB1bmRlciB0aGlzIEVVTEEgd2lsbAordGVybWluYXRlIGFuZCBZb3UgbXVzdCBwcm9tcHRseSBkZXN0cm95IGFsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlCitQcm9kdWN0IGluIFlvdXIgcG9zc2Vzc2lvbiBvciBjb250cm9sLiBVcG9uIFVQRUsncyByZXF1ZXN0LCBZb3Ugc2hhbGwKK2NlcnRpZnkgaW4gd3JpdGluZyB0aGF0IFlvdSBoYXZlIGNvbXBsaWVkIHdpdGggWW91ciBvYmxpZ2F0aW9ucyB1bmRlcgordGhpcyBTZWN0aW9uIGFuZCBvdGhlcndpc2UgdW5kZXIgdGhpcyBFVUxBLiBUZXJtaW5hdGlvbiBieSBVUEVLIHdpbGwKK25vdCBsaW1pdCBhbnkgb2YgVVBFSydzIG90aGVyIHJpZ2h0cyBvciByZW1lZGllcyB1bmRlciB0aGlzIEVVTEEgb3IgYXQKK2xhdyBvciBpbiBlcXVpdHkuCisKKzExLiBNSVNDRUxMQU5FT1VTLgorCisoYSkgTElNSVRTIE9OIFlPVVIgUklHSFQgVE8gVFJBTlNGRVIuIFlvdSBtYXkgbm90IGFzc2lnbiwgc3VibGljZW5zZSwKK3JlbnQsIGxlYXNlLCBsZW5kLCBzZWxsLCBncmFudCBhIHNlY3VyaXR5IGludGVyZXN0IGluLCBvciBvdGhlcndpc2UKK3RyYW5zZmVyIHRoZSBTb2Z0d2FyZSBQcm9kdWN0IG9yIGFueSByaWdodHMgdW5kZXIgdGhpcyBFVUxBIHdpdGhvdXQKK3RoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgVVBFSy4KKworKGIpIEFQUExJQ0FCTEUgTEFXLiBUaGlzIEVVTEEgaXMgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlIFVuaXRlZAorU3RhdGVzIGFuZCB0aGUgU3RhdGUgb2YgQ2FsaWZvcm5pYSwgd2l0aG91dCByZWdhcmQgdG8gdGhlIGNvbmZsaWN0IG9mCitsYXdzIHByaW5jaXBsZXMgdGhlcmVvZi4gSW4gcmVsYXRpb24gdG8gYW55IGxlZ2FsIGFjdGlvbiBvciBwcm9jZWVkaW5nCithcmlzaW5nIG91dCBvZiB0aGlzIEVVTEEsIFlvdSBoZXJlYnkgaXJyZXZvY2FibHkgY29uc2VudCBhbmQgc3VibWl0IHRvCit0aGUgZXhjbHVzaXZlIGp1cmlzZGljdGlvbiBvZiB0aGUgY29tcGV0ZW50IGZlZGVyYWwgYW5kIHN0YXRlIGNvdXJ0cworaGF2aW5nIGp1cmlzZGljdGlvbiBpbiBTYW4gRnJhbmNpc2NvIENvdW50eSwgQ2FsaWZvcm5pYSwgYW5kIHdhaXZlIGFueQorb2JqZWN0aW9uIHRvIHByb2NlZWRpbmdzIGluIHN1Y2ggY291cnRzLiBJZiB0aGlzIEVVTEEgaXMgdHJhbnNsYXRlZAoraW50byBhIGxhbmd1YWdlIG90aGVyIHRoYW4gRW5nbGlzaCBhbmQgdGhlcmUgaXMgYSBjb25mbGljdCBiZXR3ZWVuIHRoZQordGVybXMgb2YgdGhlIEVVTEEgaW4gRW5nbGlzaCBhbmQgdGhlIEVVTEEgaW4gdGhlIG90aGVyIGxhbmd1YWdlLCB0aGUKK3Rlcm1zIG9mIHRoZSB0ZXJtcyBvZiB0aGUgRVVMQSBpbiBFbmdsaXNoIHNoYWxsIHByZXZhaWwuIFRoZSBFVUxBIGluCitFbmdsaXNoIG1heSBiZSBkb3dubG9hZGVkIGZyb20gdGhlIFVQRUsgd2Vic2l0ZS4KKworKGMpIENPTVBMSUFOQ0UgV0lUSCBMQVdTLiBZb3UgYWdyZWUgdG8gdXNlIHRoZSBTb2Z0d2FyZSBQcm9kdWN0IGluCitjb21wbGlhbmNlIHdpdGggYWxsIGFwcGxpY2FibGUgbGF3cywgc3RhdHV0ZXMsIHJ1bGVzIGFuZCByZWd1bGF0aW9ucywKK2luY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBVLlMuIGV4cG9ydCBsYXdzIGFuZCByZWd1bGF0aW9ucy4KKworKGQpIFNFVkVSQUJJTElUWSBBTkQgU1VSVklWQUwuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBFVUxBIGlzCitpbGxlZ2FsIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIHRoZSByZW1haW5pbmcKK3Byb3Zpc2lvbnMgb2YgdGhpcyBFVUxBIHdpbGwgcmVtYWluIHZhbGlkIGFuZCBmdWxseSBlbmZvcmNlYWJsZS4gSWYKK2FueSBwcm92aXNpb24gaXMgaW4gcGFydCBlbmZvcmNlYWJsZSBhbmQgaW4gcGFydCB1bmVuZm9yY2VhYmxlLCBpdAord2lsbCBiZSBlbmZvcmNlZCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCB1bmRlciBhcHBsaWNhYmxlIGxhdy4KK1NlY3Rpb25zIDQsIDUsIDcsIDgsIDksIDEwIGFuZCAxMSBzaGFsbCBzdXJ2aXZlIHRoZSB0ZXJtaW5hdGlvbiBvZgordGhpcyBFVUxBLgorCisoZSkgSU5KVU5DVElWRSBSRUxJRUYuIFlvdSBhZ3JlZSB0aGF0IGEgYnJlYWNoIG9mIHRoaXMgRVVMQSBhZHZlcnNlbHkKK2FmZmVjdGluZyBVUEVLJ3MgcHJvcHJpZXRhcnkgcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSBQcm9kdWN0IG9yIGFueQorVVBFSy1FbmFibGVkIERldmljZSBtYXkgY2F1c2UgaXJyZXBhcmFibGUgaW5qdXJ5IHRvIFVQRUsgZm9yIHdoaWNoCittb25ldGFyeSBkYW1hZ2VzIHdvdWxkIG5vdCBiZSBhbiBhZGVxdWF0ZSByZW1lZHkgYW5kIFVQRUsgc2hhbGwgYmUKK2VudGl0bGVkIHRvIGVxdWl0YWJsZSByZWxpZWYgaW4gYWRkaXRpb24gdG8gYW55IHJlbWVkaWVzIGl0IG1heSBoYXZlCitoZXJldW5kZXIgb3IgYXQgbGF3LgorCisoZikgRU5USVJFIEFHUkVFTUVOVC4gVGhpcyBFVUxBIChpbmNsdWRpbmcgYW55IGFkZGVuZHVtIG9yIGFtZW5kbWVudAordG8gdGhpcyBFVUxBIHdoaWNoIGlzIGluY2x1ZGVkIHdpdGggdGhlIFNvZnR3YXJlIFByb2R1Y3QpIGlzIHRoZQorZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIFlvdSBhbmQgVVBFSyByZWxhdGluZyB0byB0aGUgU29mdHdhcmUgUHJvZHVjdAorYW5kIHRoZSBTdXBwb3J0IFNlcnZpY2VzIChpZiBhbnkpIGFuZCB0aGV5IHN1cGVyc2VkZSBhbGwgcHJpb3Igb3IKK2NvbnRlbXBvcmFuZW91cyBvcmFsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbnMsIHByb3Bvc2FscyBhbmQKK3JlcHJlc2VudGF0aW9ucyB3aXRoIHJlc3BlY3QgdG8gdGhlIFNvZnR3YXJlIFByb2R1Y3Qgb3IgYW55IG90aGVyCitzdWJqZWN0IG1hdHRlciBjb3ZlcmVkIGJ5IHRoaXMgRVVMQS4gTm8gYW1lbmRtZW50IHRvIG9yIG1vZGlmaWNhdGlvbgorb2YgdGhpcyBFVUxBIHdpbGwgYmUgYmluZGluZyB1bmxlc3MgbWFkZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkKK1VQRUsuIE5vIGZhaWx1cmUgdG8gZXhlcmNpc2UsIGFuZCBubyBkZWxheSBpbiBleGVyY2lzaW5nLCBvbiB0aGUgcGFydAorb2YgZWl0aGVyIHBhcnR5LCBhbnkgcmlnaHQgb3IgYW55IHBvd2VyIGhlcmV1bmRlciBzaGFsbCBvcGVyYXRlIGFzIGEKK3dhaXZlciB0aGVyZW9mLCBub3Igc2hhbGwgYW55IHNpbmdsZSBvciBwYXJ0aWFsIGV4ZXJjaXNlIG9mIGFueSByaWdodAorb3IgcG93ZXIgaGVyZXVuZGVyIHByZWNsdWRlIGZ1cnRoZXIgZXhlcmNpc2Ugb2YgYW55IG90aGVyIHJpZ2h0CitoZXJldW5kZXIuIEluIHRoZSBldmVudCBvZiBhbnkgY29uZmxpY3QgYmV0d2VlbiB0aGlzIEVVTEEgYW5kIGFueQorYXBwbGljYWJsZSBwdXJjaGFzZSB0ZXJtcyBvciBVUEVLJ3MgcG9saWNpZXMgYW5kIHRlcm1zIGZvciBTdXBwb3J0CitTZXJ2aWNlcywgdGhlIHRlcm1zIG9mIHRoaXMgRVVMQSBzaGFsbCBjb250cm9sLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvVVJJIGIvbGljZW5zZXMvVVJJCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NWQ5OTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9VUkkKQEAgLTAsMCArMSwzMiBAQAorCisgICRJZDogVVJJLHYgMS4xIDIwMDkvMDQvMTggMjM6NTc6MzAgbmVyZGJveSBFeHAgJAorCisgIChjKSBDb3B5cmlnaHQgMTk5NC0yMDAwIGJ5CisgIFRoZSBVbml2ZXJzaXR5IG9mIFJob2RlIElzbGFuZCBhbmQgVGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kKKworICBQb3J0aW9ucyBvZiB0aGlzIHNvZnR3YXJlIHdlcmUgZGV2ZWxvcGVkIGJ5IHRoZSBHcmFkdWF0ZSBTY2hvb2wgb2YKKyAgT2NlYW5vZ3JhcGh5IChHU08pIGF0IHRoZSBVbml2ZXJzaXR5IG9mIFJob2RlIElzbGFuZCAoVVJJKSBpbiBjb2xsYWJvcmF0aW9uCisgIHdpdGggVGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kgKE1JVCkuCisKKyAgQWNjZXNzIGFuZCB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBzaGFsbCBpbXBvc2UgdGhlIGZvbGxvd2luZyBvYmxpZ2F0aW9ucyBhbmQKKyAgdW5kZXJzdGFuZGluZ3Mgb24gdGhlIHVzZXIuIFRoZSB1c2VyIGlzIGdyYW50ZWQgdGhlIHJpZ2h0LCB3aXRob3V0IGFueSBmZWUKKyAgb3IgY29zdCwgdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFsdGVyLCBlbmhhbmNlIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUsCisgIGFuZCBhbnkgZGVyaXZhdGl2ZSB3b3JrcyB0aGVyZW9mLCBhbmQgaXRzIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiBmb3IgYW55CisgIHB1cnBvc2Ugd2hhdHNvZXZlciwgcHJvdmlkZWQgdGhhdCB0aGlzIGVudGlyZSBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzCisgIG9mIHRoZSBzb2Z0d2FyZSwgZGVyaXZhdGl2ZSB3b3JrcyBhbmQgc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBUaGUgbmFtZXMKKyAgVVJJLCBNSVQgYW5kL29yIEdTTywgbWF5IG5vdCBiZSB1c2VkIGluIGFueSBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgdG8KKyAgZW5kb3JzZSBvciBwcm9tb3RlIGFueSBwcm9kdWN0cyBvciBjb21tZXJjaWFsIGVudGl0eSB1bmxlc3Mgc3BlY2lmaWMKKyAgd3JpdHRlbiBwZXJtaXNzaW9uIGlzIG9idGFpbmVkIGZyb20gVVJJL01JVC4gVGhlIHVzZXIgYWxzbyB1bmRlcnN0YW5kcyB0aGF0CisgIFVSSS9NSVQgaXMgbm90IG9ibGlnYXRlZCB0byBwcm92aWRlIHRoZSB1c2VyIHdpdGggYW55IHN1cHBvcnQsIGNvbnN1bHRpbmcsCisgIHRyYWluaW5nIG9yIGFzc2lzdGFuY2Ugb2YgYW55IGtpbmQgd2l0aCByZWdhcmQgdG8gdGhlIHVzZSwgb3BlcmF0aW9uIGFuZAorICBwZXJmb3JtYW5jZSBvZiB0aGlzIHNvZnR3YXJlIG5vciB0byBwcm92aWRlIHRoZSB1c2VyIHdpdGggYW55IHVwZGF0ZXMsCisgIHJldmlzaW9ucywgbmV3IHZlcnNpb25zIG9yICJidWcgZml4ZXMiLgorCisgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVVJJL01JVCAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PCisgIEVWRU5UIFNIQUxMIFVSSS9NSVQgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTAorICBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IKKyAgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVFVPVVMKKyAgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIEFDQ0VTUywgVVNFIE9SIFBFUkZPUk1BTkNFCisgIE9GIFRISVMgU09GVFdBUkUuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9VYnVudHVGb250TGljZW5zZS0xLjAgYi9saWNlbnNlcy9VYnVudHVGb250TGljZW5zZS0xLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU3OGE4ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL1VidW50dUZvbnRMaWNlbnNlLTEuMApAQCAtMCwwICsxLDk2IEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitVQlVOVFUgRk9OVCBMSUNFTkNFIFZlcnNpb24gMS4wCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1BSRUFNQkxFCitUaGlzIGxpY2VuY2UgYWxsb3dzIHRoZSBsaWNlbnNlZCBmb250cyB0byBiZSB1c2VkLCBzdHVkaWVkLCBtb2RpZmllZCBhbmQKK3JlZGlzdHJpYnV0ZWQgZnJlZWx5LiBUaGUgZm9udHMsIGluY2x1ZGluZyBhbnkgZGVyaXZhdGl2ZSB3b3JrcywgY2FuIGJlCitidW5kbGVkLCBlbWJlZGRlZCwgYW5kIHJlZGlzdHJpYnV0ZWQgcHJvdmlkZWQgdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5jZQorYXJlIG1ldC4gVGhlIGZvbnRzIGFuZCBkZXJpdmF0aXZlcywgaG93ZXZlciwgY2Fubm90IGJlIHJlbGVhc2VkIHVuZGVyCithbnkgb3RoZXIgbGljZW5jZS4gVGhlIHJlcXVpcmVtZW50IGZvciBmb250cyB0byByZW1haW4gdW5kZXIgdGhpcworbGljZW5jZSBkb2VzIG5vdCByZXF1aXJlIGFueSBkb2N1bWVudCBjcmVhdGVkIHVzaW5nIHRoZSBmb250cyBvciB0aGVpcgorZGVyaXZhdGl2ZXMgdG8gYmUgcHVibGlzaGVkIHVuZGVyIHRoaXMgbGljZW5jZSwgYXMgbG9uZyBhcyB0aGUgcHJpbWFyeQorcHVycG9zZSBvZiB0aGUgZG9jdW1lbnQgaXMgbm90IHRvIGJlIGEgdmVoaWNsZSBmb3IgdGhlIGRpc3RyaWJ1dGlvbiBvZgordGhlIGZvbnRzLgorCitERUZJTklUSU9OUworIkZvbnQgU29mdHdhcmUiIHJlZmVycyB0byB0aGUgc2V0IG9mIGZpbGVzIHJlbGVhc2VkIGJ5IHRoZSBDb3B5cmlnaHQKK0hvbGRlcihzKSB1bmRlciB0aGlzIGxpY2VuY2UgYW5kIGNsZWFybHkgbWFya2VkIGFzIHN1Y2guIFRoaXMgbWF5CitpbmNsdWRlIHNvdXJjZSBmaWxlcywgYnVpbGQgc2NyaXB0cyBhbmQgZG9jdW1lbnRhdGlvbi4KKworIk9yaWdpbmFsIFZlcnNpb24iIHJlZmVycyB0byB0aGUgY29sbGVjdGlvbiBvZiBGb250IFNvZnR3YXJlIGNvbXBvbmVudHMKK2FzIHJlY2VpdmVkIHVuZGVyIHRoaXMgbGljZW5jZS4KKworIk1vZGlmaWVkIFZlcnNpb24iIHJlZmVycyB0byBhbnkgZGVyaXZhdGl2ZSBtYWRlIGJ5IGFkZGluZyB0bywgZGVsZXRpbmcsCitvciBzdWJzdGl0dXRpbmcgLS0gaW4gcGFydCBvciBpbiB3aG9sZSAtLSBhbnkgb2YgdGhlIGNvbXBvbmVudHMgb2YgdGhlCitPcmlnaW5hbCBWZXJzaW9uLCBieSBjaGFuZ2luZyBmb3JtYXRzIG9yIGJ5IHBvcnRpbmcgdGhlIEZvbnQgU29mdHdhcmUgdG8KK2EgbmV3IGVudmlyb25tZW50LgorCisiQ29weXJpZ2h0IEhvbGRlcihzKSIgcmVmZXJzIHRvIGFsbCBpbmRpdmlkdWFscyBhbmQgY29tcGFuaWVzIHdobyBoYXZlIGEKK2NvcHlyaWdodCBvd25lcnNoaXAgb2YgdGhlIEZvbnQgU29mdHdhcmUuCisKKyJTdWJzdGFudGlhbGx5IENoYW5nZWQiIHJlZmVycyB0byBNb2RpZmllZCBWZXJzaW9ucyB3aGljaCBjYW4gYmUgZWFzaWx5CitpZGVudGlmaWVkIGFzIGRpc3NpbWlsYXIgdG8gdGhlIEZvbnQgU29mdHdhcmUgYnkgdXNlcnMgb2YgdGhlIEZvbnQKK1NvZnR3YXJlIGNvbXBhcmluZyB0aGUgT3JpZ2luYWwgVmVyc2lvbiB3aXRoIHRoZSBNb2RpZmllZCBWZXJzaW9uLgorCitUbyAiUHJvcGFnYXRlIiBhIHdvcmsgbWVhbnMgdG8gZG8gYW55dGhpbmcgd2l0aCBpdCB0aGF0LCB3aXRob3V0CitwZXJtaXNzaW9uLCB3b3VsZCBtYWtlIHlvdSBkaXJlY3RseSBvciBzZWNvbmRhcmlseSBsaWFibGUgZm9yCitpbmZyaW5nZW1lbnQgdW5kZXIgYXBwbGljYWJsZSBjb3B5cmlnaHQgbGF3LCBleGNlcHQgZXhlY3V0aW5nIGl0IG9uIGEKK2NvbXB1dGVyIG9yIG1vZGlmeWluZyBhIHByaXZhdGUgY29weS4gUHJvcGFnYXRpb24gaW5jbHVkZXMgY29weWluZywKK2Rpc3RyaWJ1dGlvbiAod2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiBhbmQgd2l0aCBvciB3aXRob3V0IGNoYXJnaW5nCithIHJlZGlzdHJpYnV0aW9uIGZlZSksIG1ha2luZyBhdmFpbGFibGUgdG8gdGhlIHB1YmxpYywgYW5kIGluIHNvbWUKK2NvdW50cmllcyBvdGhlciBhY3Rpdml0aWVzIGFzIHdlbGwuCisKK1BFUk1JU1NJT04gJiBDT05ESVRJT05TCitUaGlzIGxpY2VuY2UgZG9lcyBub3QgZ3JhbnQgYW55IHJpZ2h0cyB1bmRlciB0cmFkZW1hcmsgbGF3IGFuZCBhbGwgc3VjaAorcmlnaHRzIGFyZSByZXNlcnZlZC4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKK2NvcHkgb2YgdGhlIEZvbnQgU29mdHdhcmUsIHRvIHByb3BhZ2F0ZSB0aGUgRm9udCBTb2Z0d2FyZSwgc3ViamVjdCB0bwordGhlIGJlbG93IGNvbmRpdGlvbnM6CisKKzEpIEVhY2ggY29weSBvZiB0aGUgRm9udCBTb2Z0d2FyZSBtdXN0IGNvbnRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorbm90aWNlIGFuZCB0aGlzIGxpY2VuY2UuIFRoZXNlIGNhbiBiZSBpbmNsdWRlZCBlaXRoZXIgYXMgc3RhbmQtYWxvbmUKK3RleHQgZmlsZXMsIGh1bWFuLXJlYWRhYmxlIGhlYWRlcnMgb3IgaW4gdGhlIGFwcHJvcHJpYXRlIG1hY2hpbmUtCityZWFkYWJsZSBtZXRhZGF0YSBmaWVsZHMgd2l0aGluIHRleHQgb3IgYmluYXJ5IGZpbGVzIGFzIGxvbmcgYXMgdGhvc2UKK2ZpZWxkcyBjYW4gYmUgZWFzaWx5IHZpZXdlZCBieSB0aGUgdXNlci4KKworMikgVGhlIGZvbnQgbmFtZSBjb21wbGllcyB3aXRoIHRoZSBmb2xsb3dpbmc6CisoYSkgVGhlIE9yaWdpbmFsIFZlcnNpb24gbXVzdCByZXRhaW4gaXRzIG5hbWUsIHVubW9kaWZpZWQuCisoYikgTW9kaWZpZWQgVmVyc2lvbnMgd2hpY2ggYXJlIFN1YnN0YW50aWFsbHkgQ2hhbmdlZCBtdXN0IGJlIHJlbmFtZWQgdG8KK2F2b2lkIHVzZSBvZiB0aGUgbmFtZSBvZiB0aGUgT3JpZ2luYWwgVmVyc2lvbiBvciBzaW1pbGFyIG5hbWVzIGVudGlyZWx5LgorKGMpIE1vZGlmaWVkIFZlcnNpb25zIHdoaWNoIGFyZSBub3QgU3Vic3RhbnRpYWxseSBDaGFuZ2VkIG11c3QgYmUKK3JlbmFtZWQgdG8gYm90aCAoaSkgcmV0YWluIHRoZSBuYW1lIG9mIHRoZSBPcmlnaW5hbCBWZXJzaW9uIGFuZCAoaWkpIGFkZAorYWRkaXRpb25hbCBuYW1pbmcgZWxlbWVudHMgdG8gZGlzdGluZ3Vpc2ggdGhlIE1vZGlmaWVkIFZlcnNpb24gZnJvbSB0aGUKK09yaWdpbmFsIFZlcnNpb24uIFRoZSBuYW1lIG9mIHN1Y2ggTW9kaWZpZWQgVmVyc2lvbnMgbXVzdCBiZSB0aGUgbmFtZSBvZgordGhlIE9yaWdpbmFsIFZlcnNpb24sIHdpdGggImRlcml2YXRpdmUgWCIgd2hlcmUgWCByZXByZXNlbnRzIHRoZSBuYW1lIG9mCit0aGUgbmV3IHdvcmssIGFwcGVuZGVkIHRvIHRoYXQgbmFtZS4KKworMykgVGhlIG5hbWUocykgb2YgdGhlIENvcHlyaWdodCBIb2xkZXIocykgYW5kIGFueSBjb250cmlidXRvciB0byB0aGUKK0ZvbnQgU29mdHdhcmUgc2hhbGwgbm90IGJlIHVzZWQgdG8gcHJvbW90ZSwgZW5kb3JzZSBvciBhZHZlcnRpc2UgYW55CitNb2RpZmllZCBWZXJzaW9uLCBleGNlcHQgKGkpIGFzIHJlcXVpcmVkIGJ5IHRoaXMgbGljZW5jZSwgKGlpKSB0bworYWNrbm93bGVkZ2UgdGhlIGNvbnRyaWJ1dGlvbihzKSBvZiB0aGUgQ29weXJpZ2h0IEhvbGRlcihzKSBvciAoaWlpKSB3aXRoCit0aGVpciBleHBsaWNpdCB3cml0dGVuIHBlcm1pc3Npb24uCisKKzQpIFRoZSBGb250IFNvZnR3YXJlLCBtb2RpZmllZCBvciB1bm1vZGlmaWVkLCBpbiBwYXJ0IG9yIGluIHdob2xlLCBtdXN0CitiZSBkaXN0cmlidXRlZCBlbnRpcmVseSB1bmRlciB0aGlzIGxpY2VuY2UsIGFuZCBtdXN0IG5vdCBiZSBkaXN0cmlidXRlZAordW5kZXIgYW55IG90aGVyIGxpY2VuY2UuIFRoZSByZXF1aXJlbWVudCBmb3IgZm9udHMgdG8gcmVtYWluIHVuZGVyIHRoaXMKK2xpY2VuY2UgZG9lcyBub3QgYWZmZWN0IGFueSBkb2N1bWVudCBjcmVhdGVkIHVzaW5nIHRoZSBGb250IFNvZnR3YXJlLAorZXhjZXB0IGFueSB2ZXJzaW9uIG9mIHRoZSBGb250IFNvZnR3YXJlIGV4dHJhY3RlZCBmcm9tIGEgZG9jdW1lbnQKK2NyZWF0ZWQgdXNpbmcgdGhlIEZvbnQgU29mdHdhcmUgbWF5IG9ubHkgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcworbGljZW5jZS4KKworVEVSTUlOQVRJT04KK1RoaXMgbGljZW5jZSBiZWNvbWVzIG51bGwgYW5kIHZvaWQgaWYgYW55IG9mIHRoZSBhYm92ZSBjb25kaXRpb25zIGFyZQorbm90IG1ldC4KKworRElTQ0xBSU1FUgorVEhFIEZPTlQgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBBTlkgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5UIE9GCitDT1BZUklHSFQsIFBBVEVOVCwgVFJBREVNQVJLLCBPUiBPVEhFUiBSSUdIVC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitDT1BZUklHSFQgSE9MREVSIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwKK0lOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworRlJPTSwgT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgRk9OVCBTT0ZUV0FSRSBPUiBGUk9NIE9USEVSCitERUFMSU5HUyBJTiBUSEUgRk9OVCBTT0ZUV0FSRS4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL1VubGljZW5zZSBiL2xpY2Vuc2VzL1VubGljZW5zZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGE0OWRhCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvVW5saWNlbnNlCkBAIC0wLDAgKzEsMjQgQEAKK1RoaXMgaXMgZnJlZSBhbmQgdW5lbmN1bWJlcmVkIHNvZnR3YXJlIHJlbGVhc2VkIGludG8gdGhlIHB1YmxpYyBkb21haW4uCisKK0FueW9uZSBpcyBmcmVlIHRvIGNvcHksIG1vZGlmeSwgcHVibGlzaCwgdXNlLCBjb21waWxlLCBzZWxsLCBvcgorZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlLCBlaXRoZXIgaW4gc291cmNlIGNvZGUgZm9ybSBvciBhcyBhIGNvbXBpbGVkCitiaW5hcnksIGZvciBhbnkgcHVycG9zZSwgY29tbWVyY2lhbCBvciBub24tY29tbWVyY2lhbCwgYW5kIGJ5IGFueQorbWVhbnMuCisKK0luIGp1cmlzZGljdGlvbnMgdGhhdCByZWNvZ25pemUgY29weXJpZ2h0IGxhd3MsIHRoZSBhdXRob3Igb3IgYXV0aG9ycworb2YgdGhpcyBzb2Z0d2FyZSBkZWRpY2F0ZSBhbnkgYW5kIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlCitzb2Z0d2FyZSB0byB0aGUgcHVibGljIGRvbWFpbi4gV2UgbWFrZSB0aGlzIGRlZGljYXRpb24gZm9yIHRoZSBiZW5lZml0CitvZiB0aGUgcHVibGljIGF0IGxhcmdlIGFuZCB0byB0aGUgZGV0cmltZW50IG9mIG91ciBoZWlycyBhbmQKK3N1Y2Nlc3NvcnMuIFdlIGludGVuZCB0aGlzIGRlZGljYXRpb24gdG8gYmUgYW4gb3ZlcnQgYWN0IG9mCityZWxpbnF1aXNobWVudCBpbiBwZXJwZXR1aXR5IG9mIGFsbCBwcmVzZW50IGFuZCBmdXR1cmUgcmlnaHRzIHRvIHRoaXMKK3NvZnR3YXJlIHVuZGVyIGNvcHlyaWdodCBsYXcuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCitJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUgorT1RIRVIgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsCitBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IKK09USEVSIERFQUxJTkdTIElOIFRIRSBTT0ZUV0FSRS4KKworRm9yIG1vcmUgaW5mb3JtYXRpb24sIHBsZWFzZSByZWZlciB0byA8aHR0cDovL3VubGljZW5zZS5vcmcvPgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvVW9JLU5DU0EgYi9saWNlbnNlcy9Vb0ktTkNTQQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmQwMzIxCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvVW9JLU5DU0EKQEAgLTAsMCArMSwyOSBAQAorQ29weXJpZ2h0IChjKSA8WUVBUj4gPE9XTkVSIE9SR0FOSVpBVElPTiBOQU1FPi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK0RldmVsb3BlZCBieTogPE5BTUUgT0YgREVWRUxPUE1FTlQgR1JPVVA+CisgICAgICAgICAgICAgIDxOQU1FIE9GIElOU1RJVFVUSU9OPgorICAgICAgICAgICAgICA8VVJMIEZPUiBERVZFTE9QTUVOVCBHUk9VUC9JTlNUSVRVVElPTj4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvCitkZWFsIHdpdGggdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlCityaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQvb3IKK3NlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlIFNvZnR3YXJlIGlzCitmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXJzLgorICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXJzIGluIHRoZQorICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAzLiBOZWl0aGVyIHRoZSBuYW1lcyBvZiA8TkFNRSBPRiBERVZFTE9QTUVOVCBHUk9VUD4sIDxOQU1FIE9GCisgICAgIElOU1RJVFVUSU9OPiwgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2UKKyAgICAgb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgICAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKK0lNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQ09OVFJJQlVUT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworV0lUSCBUSEUgU09GVFdBUkUuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9WR0JBIGIvbGljZW5zZXMvVkdCQQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MDgwNjg0Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvVkdCQQpAQCAtMCwwICsxLDE0IEBACitVbml4CisgICAgSSBoYXZlIGNvbXBpbGVkIFZHQkEgZm9yIHNldmVyYWwgZGlmZmVyZW50IGZsYXZvcnMgb2YgVW5peCBhbmQgbWFkZSB0aGUgYmluYXJpZXMgYXZhaWxhYmxlIAorZm9yIGZyZWUgYXQgdGhlIFZHQkEgaG9tZXBhZ2UuIFRoZSBjdXJyZW50IFZHQkEtVW5peCBoYXMgc2V2ZXJhbCBpbXBvcnRhbnQgcmVxdWlyZW1lbnRzIAordGhvdWdoOgorCisqIEN1cnJlbnQgVkdCQSBjb3JlIGNvZGUgd2lsbCBvbmx5IHJ1biBvbiBsb3ctZW5kaWFuIHN5c3RlbXMuIFRoaXMgZXhjbHVkZXMgU1BBUkMsIAorICA2ODB4MCwgYW5kIHNvbWUgb3RoZXIgYXJjaGl0ZWN0dXJlcyBmcm9tIHRoZSBsaXN0IG9mIHBvc3NpYmxlIHBvcnRzLiBJJ20gaG9waW5nIHRvIGFkZCAKKyAgaGlnaC1lbmRpYW4gc3VwcG9ydCBpbiB0aGUgZnV0dXJlLgorKiBBcyBHQkEgdmlkZW8gaGFyZHdhcmUgaXMgY2FwYWJsZSBvZiBkaXNwbGF5aW5nIDMyNzY4IGNvbG9ycywgYW5kIEdCQSBwcm9ncmFtcyB1c2UgCisgIHRoaXMgY2FwYWJpbGl0eSBleHRlbnNpdmVseSwgSSBhbSBvbmx5IHByb3ZpZGluZyBWR0JBLVVuaXggYmluYXJ5IGNvbXBpbGVkIGZvciB0aGUgMTZiaXQgCisgIGNvbG9yLiBJZiB5b3VyIFhzZXJ2ZXIgaXMgdW5hYmxlIHRvIHN1cHBvcnQgdGhpcyByZXNvbHV0aW9uLCBWR0JBLVVuaXggd2lsbCBub3QgcnVuIG9uIGl0LgorKiBTaW5jZSB2ZXJzaW9uIDEuMiwgVkdCQS1Vbml4IHVzZXMgdGhyZWFkZWQgc291bmQgZHJpdmVyLiBUaGlzIG1lYW5zIHRoYXQgeW91ciBVbml4IAorICBtdXN0IHN1cHBvcnQgUE9TSVggVGhyZWFkcywgb3IgVkdCQS1Vbml4IHdpbGwgbm90IHJ1bi4gT24gdGhlIHN5c3RlbXMgd2l0aCBvcHRpb25hbCB0aHJlYWRzIAorICBzdXBwb3J0LCBwbGVhc2UsIGFkZCB0aGlzIHN1cHBvcnQgcHJpb3IgdG8gcnVubmluZyBWR0JBLVVuaXguIApkaWZmIC0tZ2l0IGEvbGljZW5zZXMvVklHUkEgYi9saWNlbnNlcy9WSUdSQQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWEzOWU3Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvVklHUkEKQEAgLTAsMCArMSw5OSBAQAorVGhlIFZJR1JBIEFydGlzdGljIExpY2Vuc2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09CisobW9kZWxlZCBhZnRlciB0aGUgUGVybCBBcnRpc3RpYyBMaWNlbnNlKQorCisKK1ByZWFtYmxlCistLS0tLS0tLQorCitUaGUgaW50ZW50IG9mIHRoaXMgZG9jdW1lbnQgaXMgdG8gc3RhdGUgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggCitWSUdSQSBtYXkgYmUgY29waWVkLCBzdWNoIHRoYXQgdGhlIGF1dGhvciBtYWludGFpbnMgc29tZQorc2VtYmxhbmNlIG9mIGFydGlzdGljIGNvbnRyb2wgb3ZlciB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhlIGxpYnJhcnksCit3aGlsZSBnaXZpbmcgdGhlIHVzZXJzIG9mIHRoZSBsaWJyYXJ5IHRoZSByaWdodCB0byB1c2UgYW5kCitkaXN0cmlidXRlIFZJR1JBIGluIGEgbW9yZS1vci1sZXNzIGN1c3RvbWFyeSBmYXNoaW9uLCBwbHVzIHRoZQorcmlnaHQgdG8gbWFrZSByZWFzb25hYmxlIG1vZGlmaWNhdGlvbnMuCisKKworRGVmaW5pdGlvbnMKKy0tLS0tLS0tLS0tCisKKyJDb3B5cmlnaHQgSG9sZGVyIiBvZiB0aGUgVklHUkEgbGlicmFyeSBpcyAKK1VsbHJpY2ggS29ldGhlLCBDb2duaXRpdmUgU3lzdGVtcyBHcm91cCwgVW5pdmVyc2l0eSBvZiBIYW1idXJnLCBHZXJtYW55LgorCisiTGlicmFyeSIgcmVmZXJzIHRvIHRoZSBjb2xsZWN0aW9uIG9mIGZpbGVzIGRpc3RyaWJ1dGVkIGJ5IHRoZQorQ29weXJpZ2h0IEhvbGRlciB1bmRlciB0aGUgbmFtZSAiVklHUkEiIChpbmNsdWRpbmcgdGhpcyAKK0xJQ0VOU0UgZmlsZSBhbmQgYWxsIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uKSwgYW5kIGRlcml2YXRpdmVzIG9mIHRoYXQgCitjb2xsZWN0aW9uIG9mIGZpbGVzIGNyZWF0ZWQgdGhyb3VnaCB0ZXh0dWFsIG1vZGlmaWNhdGlvbi4KKworIlN0YW5kYXJkIFZlcnNpb24iIHJlZmVycyB0byB0aGUgTGlicmFyeSBpZiBpdCBoYXMgbm90IGJlZW4KK21vZGlmaWVkLCBvciBoYXMgYmVlbiBtb2RpZmllZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHdpc2hlcyBvZiB0aGUKK0NvcHlyaWdodCBIb2xkZXIgYXMgc3BlY2lmaWVkIGJlbG93LgorCisiWW91IiBpcyB5b3UsIGlmIHlvdSdyZSB0aGlua2luZyBhYm91dCB1c2luZywgY29weWluZywgbW9kaWZ5aW5nIG9yCitkaXN0cmlidXRpbmcgdGhpcyBMaWJyYXJ5LgorCisiRnJlZWx5IEF2YWlsYWJsZSIgbWVhbnMgdGhhdCBubyBmZWUgaXMgY2hhcmdlZCBmb3IgdGhlIGl0ZW0uCitJdCBhbHNvIG1lYW5zIHRoYXQgcmVjaXBpZW50cyBvZiB0aGUgaXRlbSBtYXkgcmVkaXN0cmlidXRlIGl0IAordW5kZXIgdGhlIHNhbWUgY29uZGl0aW9ucyB0aGV5IHJlY2VpdmVkIGl0LgorCisiUmVhc29uYWJsZSBjb3B5aW5nIGZlZSIgaXMgd2hhdGV2ZXIgeW91IGNhbiBqdXN0aWZ5IG9uIHRoZSBiYXNpcworb2YgbWVkaWEgY29zdCwgZHVwbGljYXRpb24gY2hhcmdlcywgdGltZSBvZiBwZW9wbGUgaW52b2x2ZWQsIGFuZCBzbworb24uIChZb3Ugd2lsbCBub3QgYmUgcmVxdWlyZWQgdG8ganVzdGlmeSBpdCB0byB0aGUgQ29weXJpZ2h0IEhvbGRlciwKK2J1dCBvbmx5IHRvIHRoZSBjb21wdXRpbmcgY29tbXVuaXR5IGF0IGxhcmdlIGFzIGEgbWFya2V0IHRoYXQgbXVzdAorYmVhciB0aGUgZmVlLikKKworCitMaWNlbnNlIHRlcm1zCistLS0tLS0tLS0tLS0tCisKKzEuIFlvdSBtYXkgbWFrZSBhbmQgZ2l2ZSBhd2F5IHZlcmJhdGltIGNvcGllcyBvZiB0aGUgCisgICBTdGFuZGFyZCBWZXJzaW9uIG9mIHRoaXMgTGlicmFyeSB3aXRob3V0IHJlc3RyaWN0aW9uLCBwcm92aWRlZCB0aGF0CisgICB5b3UgZHVwbGljYXRlIGFsbCBvZiB0aGUgb3JpZ2luYWwgY29weXJpZ2h0IG5vdGljZXMsIHRoaXMgbGljZW5zZSwKKyAgIGFuZCBhc3NvY2lhdGVkIGRpc2NsYWltZXJzLiAKKworMi4gVGhlIFN0YW5kYXJkIFZlcnNpb24gb2YgdGhlIExpYnJhcnkgbWF5IGJlIGRpc3RyaWJ1dGVkIGFzIHBhcnQKKyAgIG9mIGEgY29sbGVjdGlvbiBvZiBzb2Z0d2FyZSwgcHJvdmlkZWQgbm8gbW9yZSB0aGFuIGEgcmVhc29uYWJsZQorICAgY29weWluZyBmZWUgaXMgY2hhcmdlZCBmb3IgdGhlIHNvZnR3YXJlIGNvbGxlY3Rpb24uCisKKzMuIFlvdSBtYXkgYXBwbHkgYnVnIGZpeGVzIGFuZCBwb3J0YWJpbGl0eSBmaXhlcworICAgZGVyaXZlZCBmcm9tIHRoZSBQdWJsaWMgRG9tYWluIG9yIGZyb20gdGhlIENvcHlyaWdodCBIb2xkZXIuIEEKKyAgIExpYnJhcnkgbW9kaWZpZWQgaW4gc3VjaCBhIHdheSBzaGFsbCBzdGlsbCBiZSBjb25zaWRlcmVkIHRoZQorICAgU3RhbmRhcmQgVmVyc2lvbi4KKworNC4gWW91IG1heSBvdGhlcndpc2UgbW9kaWZ5IHlvdXIgY29weSBvZiB0aGlzIExpYnJhcnkgaW4gYW55IHdheSwKKyAgIHByb3ZpZGVkIHRoYXQgeW91IGluc2VydCBhIHByb21pbmVudCBub3RpY2UgaW4gZWFjaCBjaGFuZ2VkIGZpbGUKKyAgIHN0YXRpbmcgaG93IGFuZCB3aGVuIHlvdSBjaGFuZ2VkIHRoYXQgZmlsZSwgYW5kIHByb3ZpZGVkIHRoYXQgeW91IGRvCisgICBhdCBsZWFzdCBPTkUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgIGEuIHBsYWNlIHlvdXIgbW9kaWZpY2F0aW9ucyBpbiB0aGUgUHVibGljIERvbWFpbiBvciBvdGhlcndpc2UKKyAgICAgICBtYWtlIHRoZW0gRnJlZWx5IEF2YWlsYWJsZSwgZm9yIGV4YW1wbGUgYnkgYWxsb3dpbmcgdGhlIENvcHlyaWdodCAKKyAgICAgICBIb2xkZXIgdG8gaW5jbHVkZSB5b3VyIG1vZGlmaWNhdGlvbnMgaW4gdGhlIFN0YW5kYXJkIFZlcnNpb24gb2YgCisgICAgICAgdGhlIExpYnJhcnkuCisKKyAgICBiLiB1c2UgdGhlIG1vZGlmaWVkIExpYnJhcnkgb25seSB3aXRoaW4geW91ciBjb3Jwb3JhdGlvbiBvcgorICAgICAgIG9yZ2FuaXphdGlvbi4gCisKKyAgICBjLiBtYWtlIG90aGVyIGRpc3RyaWJ1dGlvbiBhcnJhbmdlbWVudHMgd2l0aCB0aGUgQ29weXJpZ2h0CisgICAgICAgSG9sZGVyLgorCis1LiBZb3UgbWF5IGRpc3RyaWJ1dGUgcHJvZ3JhbXMgd2hpY2ggdXNlIHRoaXMgTGlicmFyeQorICAgaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGhvdXQgcmVzdHJpY3Rpb24uCisKKzYuIEFueSBvYmplY3QgY29kZSBnZW5lcmF0ZWQgYXMgYSByZXN1bHQgb2YgdXNpbmcgdGhpcyBMaWJyYXJ5IAorICAgZG9lcyBub3QgZmFsbCB1bmRlciB0aGUgY29weXJpZ2h0IG9mIHRoaXMgTGlicmFyeSwgYnV0CisgICBiZWxvbmdzIHRvIHdob21ldmVyIGdlbmVyYXRlZCBpdCwgYW5kIG1heSBiZSBzb2xkIGNvbW1lcmNpYWxseS4KKworNy4gVGhlIG5hbWUgb2YgdGhlIENvcHlyaWdodCBIb2xkZXIgb3IgdGhlIExpYnJhcnkgbWF5IG5vdCBiZSB1c2VkIHRvIAorICAgZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgCisgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKzguIFRISVMgTElCUkFSWSBJUyBQUk9WSURFRCBBUyBJUyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICAgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworICAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgCisgICBJTkNJREVOVEFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIEtJTkQgT1IgQU5ZIERBTUFHRVMKKyAgIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUgorICAgT1IgTk9UIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUywgT1IgT04gQU5ZCisgICBUSEVPUlkgT0YgTElBQklMSVRZIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFCisgICBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIExJQlJBUlkuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9WT1NUUk9NIGIvbGljZW5zZXMvVk9TVFJPTQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODZiNTM4Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvVk9TVFJPTQpAQCAtMCwwICsxLDYxIEBACisKKyAgICAgICAgICAgICAgICAgIFZPU1RST00gUHVibGljIExpY2Vuc2UgZm9yIE9wZW4gU291cmNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAyMDA1IFZPU1RST00gSG9sZGluZ3MsIEluYy4KKworVGhpcyBWT1NUUk9NIEhvbGRpbmdzLCBJbmMuIChWT1NUUk9NKSBEaXN0cmlidXRpb24gKGNvZGUgYW5kIGRvY3VtZW50YXRpb24pIAoraXMgbWFkZSBhdmFpbGFibGUgdG8gdGhlIG9wZW4gc291cmNlIGNvbW11bml0eSBhcyBhIHB1YmxpYyBzZXJ2aWNlIGJ5IFZPU1RST00uIAorQ29udGFjdCBWT1NUUk9NIGF0IGluZm9Adm9zdHJvbS5jb20gZm9yIGluZm9ybWF0aW9uIG9uIG90aGVyIGxpY2Vuc2luZyAKK2FycmFuZ2VtZW50cyAoZS5nLiBmb3IgdXNlIGluIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucykuCisKK1VuZGVyIHRoaXMgbGljZW5zZSwgdGhpcyBEaXN0cmlidXRpb24gbWF5IGJlIG1vZGlmaWVkIGFuZCB0aGUgb3JpZ2luYWwgCit2ZXJzaW9uIGFuZCBtb2RpZmllZCB2ZXJzaW9ucyBtYXkgYmUgY29waWVkLCBkaXN0cmlidXRlZCwgcHVibGljbHkgZGlzcGxheWVkIAorYW5kIHBlcmZvcm1lZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisxLiAgTW9kaWZpZWQgdmVyc2lvbnMgYXJlIGRpc3RyaWJ1dGVkIHdpdGggc291cmNlIGNvZGUgYW5kIGRvY3VtZW50YXRpb24gYW5kIAord2l0aCBwZXJtaXNzaW9uIGZvciBvdGhlcnMgdG8gdXNlIGFueSBjb2RlIGFuZCBkb2N1bWVudGF0aW9uICh3aGV0aGVyIGluIAorb3JpZ2luYWwgb3IgbW9kaWZpZWQgdmVyc2lvbnMpIGFzIGdyYW50ZWQgdW5kZXIgdGhpcyBsaWNlbnNlOworCisyLiAgaWYgbW9kaWZpZWQsIHRoZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbiwgYW5kIHVzZXIgcnVuLXRpbWUgZWxlbWVudHMgCitzaG91bGQgYmUgY2xlYXJseSBsYWJlbGVkIGJ5IHBsYWNpbmcgYW4gaWRlbnRpZmllciBvZiBvcmlnaW4gKHN1Y2ggYXMgYSBuYW1lLCAKK2luaXRpYWwsIG9yIG90aGVyIHRhZykgYWZ0ZXIgdGhlIHZlcnNpb24gbnVtYmVyOworCiszLiAgdXNlcnMsIG1vZGlmaWVycywgZGlzdHJpYnV0b3JzLCBhbmQgb3RoZXJzIGNvbWluZyBpbnRvIHBvc3Nlc3Npb24gb3IgCit1c2luZyB0aGUgRGlzdHJpYnV0aW9uIGluIG9yaWdpbmFsIG9yIG1vZGlmaWVkIGZvcm0gYWNjZXB0IHRoZSBlbnRpcmUgcmlzayAKK2FzIHRvIHRoZSBwb3NzZXNzaW9uLCB1c2UsIGFuZCBwZXJmb3JtYW5jZSBvZiB0aGUgRGlzdHJpYnV0aW9uOworCis0LiAgdGhpcyBjb3B5cmlnaHQgbWFuYWdlbWVudCBpbmZvcm1hdGlvbiAoc29mdHdhcmUgaWRlbnRpZmllciBhbmQgdmVyc2lvbiAKK251bWJlciwgY29weXJpZ2h0IG5vdGljZSBhbmQgbGljZW5zZSkgc2hhbGwgYmUgcmV0YWluZWQgaW4gYWxsIHZlcnNpb25zIG9mIAordGhlIERpc3RyaWJ1dGlvbjsKKworNS4gIFZPU1RST00gbWF5IG1ha2UgbW9kaWZpY2F0aW9ucyB0byB0aGUgRGlzdHJpYnV0aW9uIHRoYXQgYXJlIAorc3Vic3RhbnRpYWxseSBzaW1pbGFyIHRvIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoZSBEaXN0cmlidXRpb24sIGFuZCBtYXkgCittYWtlLCB1c2UsIHNlbGwsIGNvcHksIGRpc3RyaWJ1dGUsIHB1YmxpY2x5IGRpc3BsYXksIGFuZCBwZXJmb3JtIHN1Y2ggCittb2RpZmljYXRpb25zLCBpbmNsdWRpbmcgbWFraW5nIHN1Y2ggbW9kaWZpY2F0aW9ucyBhdmFpbGFibGUgdW5kZXIgdGhpcyBvciAKK290aGVyIGxpY2Vuc2VzLCB3aXRob3V0IG9ibGlnYXRpb24gb3IgcmVzdHJpY3Rpb247CisKKzYuICBtb2RpZmljYXRpb25zIGluY29ycG9yYXRpbmcgY29kZSwgbGlicmFyaWVzLCBhbmQvb3IgZG9jdW1lbnRhdGlvbiBzdWJqZWN0IAordG8gYW55IG90aGVyIG9wZW4gc291cmNlIGxpY2Vuc2UgbWF5IGJlIG1hZGUsIGFuZCB0aGUgcmVzdWx0aW5nIHdvcmsgbWF5IGJlIAorZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHN1Y2ggb3BlbiBzb3VyY2UgbGljZW5zZSBpZiByZXF1aXJlZCBieSB0aGF0IAorb3BlbiBzb3VyY2UgbGljZW5zZSwgYnV0IGRvaW5nIHNvIHdpbGwgbm90IGFmZmVjdCB0aGlzIERpc3RyaWJ1dGlvbiwgb3RoZXIgCittb2RpZmljYXRpb25zIG1hZGUgdW5kZXIgdGhpcyBsaWNlbnNlIG9yIG1vZGlmaWNhdGlvbnMgbWFkZSB1bmRlciBvdGhlciAKK01haW5OZXZlIGxpY2Vuc2luZyBhcnJhbmdlbWVudHM7CisKKzcuICBubyBwZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gZGlzdHJpYnV0ZSwgcHVibGljbHkgZGlzcGxheSwgb3IgcHVibGljbHkgCitwZXJmb3JtIG1vZGlmaWNhdGlvbnMgdG8gdGhlIERpc3RyaWJ1dGlvbiBtYWRlIHVzaW5nIHByb3ByaWV0YXJ5IG1hdGVyaWFscyAKK3RoYXQgY2Fubm90IGJlIHJlbGVhc2VkIGluIHNvdXJjZSBmb3JtYXQgdW5kZXIgY29uZGl0aW9ucyBvZiB0aGlzIGxpY2Vuc2U7CisKKzguICB0aGUgbmFtZSBvZiBWT1NUUk9NIG1heSBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgCitwZXJ0YWluaW5nIHRvIERpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgcHJpb3Igd3JpdHRlbiAKK3Blcm1pc3Npb24uCisKK1RoaXMgc29mdHdhcmUgaXMgbWFkZSBhdmFpbGFibGUgImFzIGlzIiwgYW5kCisKK1ZPU1RST00gRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTLCBFWFBSRVNTIE9SIElNUExJRUQsIFdJVEggUkVHQVJEIFRPIFRISVMgCitTT0ZUV0FSRSwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIAorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5EIElOIE5PIEVWRU5UIFNIQUxMIAorVk9TVFJPTSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIAorREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gCitBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFKSBPUiBTVFJJQ1QgTElBQklMSVRZLCBBUklTSU5HIAorT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL1ZhbHZlU0RLIGIvbGljZW5zZXMvVmFsdmVTREsKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE5MmMyMQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL1ZhbHZlU0RLCkBAIC0wLDAgKzEsNjQgQEAKK1ZBTFZFLCBMLkwuQy4KK1NESyBMSUNFTlNFCisKK1RoaXMgU0RLIExpY2Vuc2UgKHRoZSAiQWdyZWVtZW50IikgaXMgbWFkZSBieSBhbmQgYmV0d2VlbiB5b3UgKHRoZSAiTGljZW5zZWUiKSBhbmQgVkFMVkUsIEwuTC5DLiwgYSBXYXNoaW5ndG9uIGxpbWl0ZWQgbGlhYmlsaXR5IGNvbXBhbnkgKCJWYWx2ZSIpLCB3aXRoIG9mZmljZXMgbG9jYXRlZCBhdCA1MjAgS2lya2xhbmQgV2F5LCAjMjAxLCBLaXJrbGFuZCwgV0EgOTgwMzMuCisKK0JZIENMSUNLSU5HICJJIEFHUkVFIiBCRUxPVywgQU5EL09SIEJZIERPV05MT0FESU5HIFRIRSBWQUxWRSBTT0ZUV0FSRSBERVZFTE9QTUVOVCBLSVQgRk9SIEhBTEYtTElGRSAoVEhFICJTREsiKSwgWU9VIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRISVMgQUdSRUVNRU5ULgorCisJV2hlcmVhcywgVmFsdmUgaXMgdGhlIGRldmVsb3BlciBvZiB0aGUgSGFsZi1MaWZlIGNvbXB1dGVyIGdhbWUgYW5kIHRoZSBTREs7CisKKwlXaGVyZWFzLCBMaWNlbnNlZSB3aXNoZXMgdG8gZGV2ZWxvcCBhIG1vZGlmaWVkIGdhbWUgcnVubmluZyBvbmx5IG9uIHRoZSBIYWxmLUxpZmUgZW5naW5lIChhICJNb2QiKSBmb3IgZnJlZSBkaXN0cmlidXRpb24gaW4gb2JqZWN0IGNvZGUgZm9ybSBvbmx5IHRvIGxpY2Vuc2VkIGVuZCB1c2VycyBvZiBIYWxmLUxpZmU7IGFuZAorCisJV2hlcmVhcywgTGljZW5zZWUgd2lzaGVzIHRvIHJlY2VpdmUsIGFuZCBWYWx2ZSB3aXNoZXMgdG8gZGlzY2xvc2UgdG8gTGljZW5zZWUsIGFuIG9iamVjdCBjb2RlIHZlcnNpb24gb2YgdGhlIEVuZ2luZSwgdGhlIFNESywgYW5kIG90aGVyIGluZm9ybWF0aW9uIGFzIGRlZW1lZCBhcHByb3ByaWF0ZSBieSBWYWx2ZSwgYWxsIG9uIHRoZSB0ZXJtcyBzZXQgZm9ydGggaGVyZWluOworCisJTm93LCB0aGVyZWZvcmUsIGluIGNvbnNpZGVyYXRpb24gb2YgdGhlIG11dHVhbCBwcm9taXNlcyBtYWRlIGhlcmVpbiwgdGhlIHBhcnRpZXMgYWdyZWUgYXMgZm9sbG93czoKKworMS4JTGljZW5zZS4KKworCTEuMQlMaWNlbnNlIEdyYW50LiAgVmFsdmUgaGVyZWJ5IGdyYW50cyBMaWNlbnNlZSBhIG5vbmV4Y2x1c2l2ZSwgcm95YWx0eS1mcmVlLCB0ZXJtaW5hYmxlLCB3b3JsZHdpZGUsIG5vbnRyYW5zZmVyYWJsZSBsaWNlbnNlIHRvOgorCisoYSkJdXNlLCByZXByb2R1Y2UgYW5kIG1vZGlmeSB0aGUgU0RLIGluIHNvdXJjZSBjb2RlIGZvcm0sIHNvbGVseSB0byBkZXZlbG9wIGEgTW9kOyBhbmQKKworKGIpCXJlcHJvZHVjZSwgZGlzdHJpYnV0ZSBhbmQgbGljZW5zZSB0aGUgTW9kIGluIG9iamVjdCBjb2RlIGZvcm0sIHNvbGVseSB0byBsaWNlbnNlZCBlbmQgdXNlcnMgb2YgSGFsZi1MaWZlLCB3aXRob3V0IGNoYXJnZS4KKworCTEuMglVcGRhdGVzLiAgVmFsdmUgbWF5IGZyb20gdGltZSB0byB0aW1lLCBpbiBpdHMgc29sZSBkaXNjcmV0aW9uLCBwcm92aWRlIHVwZGF0ZXMsIGVycm9yIGNvcnJlY3Rpb25zLCBhbmQgZnV0dXJlIHZlcnNpb25zIG9mIHRoZSBTREsgdG8gTGljZW5zZWUuICBVcG9uIGRlbGl2ZXJ5LCBzdWNoIHVwZGF0ZXMsIGVycm9yIGNvcnJlY3Rpb25zIGFuZCBmdXR1cmUgdmVyc2lvbnMgc2hhbGwgYmUgZGVlbWVkIHBhcnQgb2YgdGhlIFNESywgYXMgYXBwbGljYWJsZSwgdW5kZXIgdGhpcyBBZ3JlZW1lbnQuCisKKwkxLjMJUmVzZXJ2YXRpb24gb2YgUmlnaHRzLiAgVmFsdmUgcmVzZXJ2ZXMgYWxsIHJpZ2h0cyBub3QgZXhwbGljaXRseSBncmFudGVkIGhlcmVpbi4KKworCTEuNAlJbmRlbW5pdHkuICBMaWNlbnNlZSBoZXJlYnkgYWdyZWVzIHRoYXQgaXQgaXMgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBhbnkgYW5kIGFsbCBNb2RzIGFuZCBMaWNlbnNlZSdzIGNyZWF0aW9uLCBkaXN0cmlidXRpb24sIGFuZCBwcm9tb3Rpb24gdGhlcmVvZi4gIExpY2Vuc2VlIHNoYWxsIGRlZmVuZCwgaW5kZW1uaWZ5LCBhbmQgaG9sZCBoYXJtbGVzcyBWYWx2ZSwgaXRzIG9mZmljZXJzLCBkaXJlY3RvcnMsIGVtcGxveWVlcyBhbmQgYWdlbnRzIGFnYWluc3QgYW55IGFuZCBhbGwgY2xhaW1zLCBkYW1hZ2VzLCBsb3NzZXMsIG9yIGxpYWJpbGl0aWVzIHdoYXRzb2V2ZXIgYXJpc2luZyBvdXQgb2YgTGljZW5zZWUncyBjcmVhdGlvbiwgZGlzdHJpYnV0aW9uLCBvciBwcm9tb3Rpb24gb2YgdGhlIE1vZC4KKworMS41CVRyYWRlbWFya3MuICBMaWNlbnNlZSBhY2tub3dsZWRnZXMgYW5kIGFncmVlcyB0aGF0IHRoaXMgQWdyZWVtZW50IGRvZXMgbm90IGdyYW50IExpY2Vuc2VlIGFueSByaWdodCB0byB1c2UgYW55IHRyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZXMgb2YgVmFsdmUsIFNpZXJyYSBPbi1MaW5lLCBJbmMuLCBvciB0aGVpciBsaWNlbnNvcnMuICBBbGwgc3VjaCBtYXJrcyBzaGFsbCByZW1haW4gdGhlIHByb3BlcnR5IG9mIHRoZSByZXNwZWN0aXZlIG93bmVyLgorCisyLglUZXJtLgorCisyLjEJVGVybS4gIFRoaXMgQWdyZWVtZW50IHNoYWxsIGJlY29tZSBlZmZlY3RpdmUgYXMgb2YgdGhlIGRhdGUgTGljZW5zZWUgZG93bmxvYWRzIG9yIGluc3RhbGxzIHRoZSBTREsgYW5kIHNoYWxsIGV4cGlyZSAxIHllYXIgYWZ0ZXIgc3VjaCBkYXRlLgorCisyLjIJVGVybWluYXRpb24uICAgVmFsdmUgbWF5IHRlcm1pbmF0ZSB0aGlzIEFncmVlbWVudCBpbW1lZGlhdGVseSB1cG9uIHdyaXR0ZW4gKGluY2x1ZGluZyBlbWFpbCkgbm90aWNlIHRvIExpY2Vuc2VlLiAgVGhlIEFncmVlbWVudCB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IHVwb24gTGljZW5zZWUncyBicmVhY2ggb2YgYW55IHRlcm0gb2YgdGhpcyBBZ3JlZW1lbnQuCisKKzIuMwlTdXJ2aXZhbC4gIFNlY3Rpb25zIDEuNCwgMS41LCAyLjIsIDIuMywgYW5kIDMtNSBzaGFsbCBzdXJ2aXZlIGFueSBleHBpcmF0aW9uIG9yIHRlcm1pbmF0aW9uIG9mIHRoaXMgQWdyZWVtZW50LgorCiszLglEaXNjbGFpbWVyIG9mIFdhcnJhbnRpZXM7IExpbWl0YXRpb24gb2YgTGlhYmlsaXR5CisKKwkzLjEJTk8gV0FSUkFOVElFUy4gIFZBTFZFIEFORCBJVFMgU1VQUExJRVJTIERJU0NMQUlNIEFMTCBXQVJSQU5USUVTIFdJVEggUkVTUEVDVCBUTyBUSEUgU0RLLCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisKKwkzLjIJTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuICBJTiBOTyBFVkVOVCBTSEFMTCBWQUxWRSBPUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgV0hBVFNPRVZFUiAoSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgQlVTSU5FU1MgUFJPRklUUywgQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBMT1NTIE9GIEJVU0lORVNTIElORk9STUFUSU9OLCBPUiBBTlkgT1RIRVIgUEVDVU5JQVJZIExPU1MpIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT0YgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgRU5HSU5FIEFORC9PUiBUSEUgU0RLLCBFVkVOIElGIFZBTFZFIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworNC4JTm8gRXhjbHVzaXZpdHkuCisKK05laXRoZXIgdGhpcyBBZ3JlZW1lbnQgbm9yIHRoZSBkaXNjbG9zdXJlIG9yIHJlY2VpcHQgb2YgSW5mb3JtYXRpb24gc2hhbGwgY29uc3RpdHV0ZSBvciBpbXBseSBhbnkgcHJvbWlzZSB0byBvciBpbnRlbnRpb24gdG8gbWFrZSBhbnkgcHVyY2hhc2Ugb2YgcHJvZHVjdHMgb3Igc2VydmljZXMgYnkgZWl0aGVyIHBhcnR5IG9yIGl0cyBhZmZpbGlhdGVkIGNvbXBhbmllcyBvciBhbnkgY29tbWl0bWVudCBieSBlaXRoZXIgcGFydHkgb3IgaXRzIGFmZmlsaWF0ZWQgY29tcGFuaWVzIHdpdGggcmVzcGVjdCB0byB0aGUgcHJlc2VudCBvciBmdXR1cmUgbWFya2V0aW5nIG9mIGFueSBwcm9kdWN0IG9yIHNlcnZpY2Ugb3IgYW55IGNvbW1pdG1lbnQgdG8gZW50ZXIgaW50byBhbnkgb3RoZXIgYnVzaW5lc3MgcmVsYXRpb25zaGlwLiAgRXhjZXB0IGZvciB0aGUgbGljZW5zZSBhbmQgdXNlIHJlc3RyaWN0aW9ucyBleHByZXNzbHkgc2V0IGZvcnRoIGhlcmVpbiwgZWFjaCBwYXJ0eSB3aWxsIGJlIGZyZWUgKDEpIHRvIHB1cnN1ZSwgbmVnb3RpYXRlLCBhbmQgZW50ZXIgaW50byBzaW1pbGFyIHJlbGF0aW9uc2hpcHMgd2l0aCB0aGlyZCBwYXJ0aWVzIGFuZCAoMikgdG8gZGV2ZWxvcCwgbWFya2V0LCBhbmQgbWFrZSBhdmFpbGFibGUgc2ltaWxhciBwcm9kdWN0cyBhbmQgc2VydmljZXMuICBOZWl0aGVyIHBhcnR5IHdpbGwgYmUgb2JsaWdhdGVkIHRvIGVudGVyIGludG8gYW55IG90aGVyIGFncmVlbWVudCB3aXRoIHRoZSBvdGhlciBwYXJ0eSBieSB2aXJ0dWUgb2YgdGhpcyBBZ3JlZW1lbnQuCisKKzUuCUdlbmVyYWwuCisKKzUuMQlNb2RpZmljYXRpb24uICBObyBhbWVuZG1lbnQgb3IgbW9kaWZpY2F0aW9uIG9mIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIHZhbGlkIG9yIGJpbmRpbmcgb24gdGhlIHBhcnRpZXMgdW5sZXNzIG1hZGUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIG9uIGJlaGFsZiBvZiBib3RoIG9mIHRoZSBwYXJ0aWVzIGJ5IHRoZWlyIHJlc3BlY3RpdmUgZHVseSBhdXRob3JpemVkIG9mZmljZXJzIG9yIHJlcHJlc2VudGF0aXZlcy4KKworNS4yCUFzc2lnbm1lbnQuICBMaWNlbnNlZSBtYXkgbm90IGFzc2lnbiB0aGlzIGFncmVlbWVudCB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgVmFsdmUuICBTdWJqZWN0IHRvIHRoZSBsaW1pdGF0aW9ucyBzZXQgZm9ydGggaW4gdGhpcyBBZ3JlZW1lbnQsIHRoaXMgQWdyZWVtZW50IHdpbGwgaW51cmUgdG8gdGhlIGJlbmVmaXQgb2YgYW5kIGJlIGJpbmRpbmcgdXBvbiB0aGUgcGFydGllcywgdGhlaXIgc3VjY2Vzc29ycyBhbmQgYXNzaWducy4KKworNS4zCVNldmVyYWJpbGl0eS4gIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgaGVsZCBieSBhIGNvdXJ0IG9mIGNvbXBldGVudCBqdXJpc2RpY3Rpb24gdG8gYmUgaWxsZWdhbCwgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlLCB0aGUgcmVtYWluaW5nIHByb3Zpc2lvbnMgc2hhbGwgcmVtYWluIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdC4KKworNS40CUdvdmVybmluZyBMYXcsIEp1cmlzZGljdGlvbiBhbmQgVmVudWUuICBUaGlzIEFncmVlbWVudCBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgV2FzaGluZ3Rvbi4gIEVhY2ggb2YgdGhlIHBhcnRpZXMgaGVyZXRvIHN1Ym1pdHMgdG8ganVyaXNkaWN0aW9uIGFuZCB2ZW51ZSBpbiB0aGUgc3RhdGUgYW5kIGZlZGVyYWwgY291cnRzIHNpdHRpbmcgaW4gS2luZyBDb3VudHksIFdhc2hpbmd0b24uCisKKzUuNQlFbnRpcmUgQWdyZWVtZW50LiAgVGhpcyBBZ3JlZW1lbnQgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSB1bmRlcnN0YW5kaW5nIGJldHdlZW4gdGhlIHBhcnRpZXMgaGVyZXRvIGFuZCBzdXBlcnNlZGVzIGFsbCBwcmV2aW91cyBjb21tdW5pY2F0aW9ucywgcmVwcmVzZW50YXRpb25zIGFuZCB1bmRlcnN0YW5kaW5ncywgb3JhbCBvciB3cml0dGVuLCBiZXR3ZWVuIHRoZSBwYXJ0aWVzLCB3aXRoIHJlc3BlY3QgdG8gdGhlIHN1YmplY3QgbWF0dGVyIG9mIHRoaXMgQWdyZWVtZW50LgorCitDTElDSyBCRUxPVyBUTyBJTkRJQ0FURSBZT1VSIEFDQ0VQVEFOQ0UgT0YgVEhJUyBBR1JFRU1FTlQuICBJRiBZT1UgRE8gTk9UIEFHUkVFLCBZT1UgTUFZIE5PVCBET1dOTE9BRCBBTkQvT1IgVVNFIFRIRSBTREsuCisKKyJJIERPIE5PVCBBR1JFRSIJIkkgQUdSRUUiCmRpZmYgLS1naXQgYS9saWNlbnNlcy9WYWx2ZVNlcnZlciBiL2xpY2Vuc2VzL1ZhbHZlU2VydmVyCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmNWI1MWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9WYWx2ZVNlcnZlcgpAQCAtMCwwICsxLDE2OSBAQAorCitZT1UgU0hPVUxEIENBUkVGVUxMWSBSRUFEIFRIRSBGT0xMT1dJTkcgRU5EIFVTRVIgTElDRU5TRSBBR1JFRU1FTlQgQkVGT1JFCitJTlNUQUxMSU5HIFRISVMgVkFMVkUgUFJJTUFSWSBTRVJWRVIsIHYuNC4xLjAuOSAoV0lORE9XUykgLyB2LjMuMS4wLjkKKyhMSU5VWCkuIEJZIElOU1RBTExJTkcgT1IgT1RIRVJXSVNFIFVTSU5HIFRISVMgU09GVFdBUkUgUFJPR1JBTSwgWU9VIEFHUkVFCitUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBBR1JFRU1FTlQuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIFRFUk1TCitPRiBUSElTIEFHUkVFTUVOVCwgQ0xJQ0sgVEhFIENBTkNFTCBCVVRUT04gQkVMT1cgQU5EIERPIE5PVCBJTlNUQUxMIFRISVMKK1NPRlRXQVJFIFBST0dSQU0uCisKK1RoaXMgVmFsdmUgUHJpbWFyeSBTZXJ2ZXIsIHYuNC4xLjAuOSAoV2luZG93cykgLyB2LjMuMS4wLjkgKExpbnV4KSBzb2Z0d2FyZQorcHJvZ3JhbSwgaW5jbHVkaW5nIGFueSBlbGVjdHJvbmljIGRvY3VtZW50YXRpb24gKGNvbGxlY3RpdmVseSwgdGhlCisiUHJvZ3JhbSIpLCBhbnkgcHJpbnRlZCBtYXRlcmlhbHMsIGFuZCBhbnkgYW5kIGFsbCBjb3BpZXMgb2Ygc3VjaCBQcm9ncmFtCithbmQgbWF0ZXJpYWxzIGFyZSB0aGUgY29weXJpZ2h0ZWQgd29yayBvZiBWYWx2ZSwgTC5MLkMuIGFuZC9vciBpdHMgd2hvbGx5Citvd25lZCBzdWJzaWRpYXJpZXMsIG9yIGl0cyBzdXBwbGllcnMgb3IgbGljZW5zb3JzLiAgQWxsIHJpZ2h0cyBhcmUgcmVzZXJ2ZWQsCitleGNlcHQgYXMgZXhwcmVzc2x5IHN0YXRlZCBiZWxvdy4gWW91ciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgZ292ZXJuZWQgYnkgdGhlCit0ZXJtcyBvZiB0aGUgRW5kIFVzZXIgTGljZW5zZSBBZ3JlZW1lbnQgcHJvdmlkZWQgYmVsb3cgKCJMaWNlbnNlCitBZ3JlZW1lbnQiKS4gVGhlIFByb2dyYW0gaXMgc29sZWx5IGZvciB1c2UgYnkgZW5kIHVzZXJzIGFjY29yZGluZyB0byB0aGUKK3Rlcm1zIG9mIHRoZSBMaWNlbnNlIEFncmVlbWVudC4gQW55IHVzZSwgcmVwcm9kdWN0aW9uIG9yIHJlZGlzdHJpYnV0aW9uIG9mCit0aGUgUHJvZ3JhbSBub3QgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZSBBZ3JlZW1lbnQgaXMKK2V4cHJlc3NseSBwcm9oaWJpdGVkLgorRU5EIFVTRVIgTElDRU5TRSBBR1JFRU1FTlQKKworCTEuICBMaW1pdGVkIFVzZSBMaWNlbnNlLiBWYWx2ZSwgTC5MLkMgKCJWYWx2ZSIpIGhlcmVieSBncmFudHMsIGFuZAorYnkgaW5zdGFsbGluZyB0aGUgUHJvZ3JhbSB5b3UgdGhlcmVieSBhY2NlcHQsIGEgbGltaXRlZCwgbm9uLWV4Y2x1c2l2ZQorbGljZW5zZSBhbmQgcmlnaHQgdG86CisJKGEpIGluc3RhbGwgYW5kIHVzZSB0aGUgUHJvZ3JhbSBvbiBhbiB1bmxpbWl0ZWQgbnVtYmVyIG9mIGNvbXB1dGVycworZm9yIHRoZSBwdXJwb3NlIG9mIGhvc3Rpbmcgb25saW5lIG11bHRpcGxheWVyIGdhbWVzIG9mIEhhbGYtTGlmZSBhbmQgb3RoZXIKK1ZhbHZlIGNvbXB1dGVyIGdhbWVzIGJhc2VkIG9uIHRoZSBWYWx2ZSAxIEVuZ2luZSAoYXMgZGVmaW5lZCBiZWxvdyk7IGFuZAorCShiKSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgZXhhY3QgY29waWVzIG9mIHRoZSBQcm9ncmFtIHdpdGhvdXQKK2NoYXJnZSwgaW4gdGhlIHNhbWUgZm9ybSBhbmQgd2l0aCBhbGwgYXNzb2NpYXRlZCBmaWxlcyB0aGF0IHRoZSBQcm9ncmFtIGlzCityZWNlaXZlZCBieSBMaWNlbnNlZSBwdXJzdWFudCB0byB0aGlzIEFncmVlbWVudCwgcHJvdmlkZWQgdGhhdCBMaWNlbnNlZQord2lsbDogKDEpIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9ubHkgaW4gb2JqZWN0IGNvZGUgZm9ybWF0OyAoMikKK29ubHkgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIFByb2dyYW0gd2l0aCB0aGlzIEFncmVlbWVudCBpbmNsdWRlZCBhbmQKK3N1YmplY3QgdG8gdGhlIHJlY2VpdmluZyBwYXJ0eSBhZ3JlZWluZyB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZAorKDMpIHByZXNlcnZlIGluIGFsbCBjb3BpZXMgb2YgdGhlIFByb2dyYW0gYWxsIGNvcHlyaWdodCBhbmQgbGVnYWwgbm90aWNlcwordGhhdCBhcmUgYXR0YWNoZWQgdG8gdGhlIGNvcHkgb2YgdGhlIFByb2dyYW0gcmVjZWl2ZWQgYnkgTGljZW5zZWUgcHVyc3VhbnQKK3RvIHRoaXMgQWdyZWVtZW50LgorVGhlICJWYWx2ZSAxIEVuZ2luZSIgbWVhbnMgdGhlIGNvbXB1dGVyIGdhbWUgZW5naW5lIG9uIHdoaWNoIEhhbGYtTGlmZSBpcworYmFzZWQuIFRoZSBQcm9ncmFtIGlzIGxpY2Vuc2VkLCBub3Qgc29sZC4gWW91ciBsaWNlbnNlIGNvbmZlcnMgbm8gdGl0bGUgb3IKK293bmVyc2hpcCBpbiB0aGUgUHJvZ3JhbS4KKwkyLiAgT3duZXJzaGlwLiBBbGwgdGl0bGUsIG93bmVyc2hpcCByaWdodHMgYW5kIGludGVsbGVjdHVhbCBwcm9wZXJ0eQorcmlnaHRzIGluIGFuZCB0byB0aGUgUHJvZ3JhbSBhbmQgYW55IGFuZCBhbGwgY29waWVzIHRoZXJlb2YgKGluY2x1ZGluZyBidXQKK25vdCBsaW1pdGVkIHRvIGFueSB0aXRsZXMsIGNvbXB1dGVyIGNvZGUsIHRoZW1lcywgb2JqZWN0cywgY2hhcmFjdGVycywKK2NoYXJhY3RlciBuYW1lcywgc3RvcmllcywgZGlhbG9nLCBjYXRjaCBwaHJhc2VzLCBsb2NhdGlvbnMsIGNvbmNlcHRzLAorYXJ0d29yaywgYW5pbWF0aW9ucywgc291bmRzLCBtdXNpY2FsIGNvbXBvc2l0aW9ucywgYXVkaW8tdmlzdWFsIGVmZmVjdHMsCittZXRob2RzIG9mIG9wZXJhdGlvbiwgbW9yYWwgcmlnaHRzLCBhbnkgcmVsYXRlZCBkb2N1bWVudGF0aW9uLCBhbmQgImFwcGxldHMiCitpbmNvcnBvcmF0ZWQgaW50byB0aGUgUHJvZ3JhbSkgYXJlIG93bmVkIGJ5IFZhbHZlIG9yIGl0cyBsaWNlbnNvcnMuIFRoZQorUHJvZ3JhbSBpcyBwcm90ZWN0ZWQgYnkgdGhlIGNvcHlyaWdodCBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzLAoraW50ZXJuYXRpb25hbCBjb3B5cmlnaHQgdHJlYXRpZXMgYW5kIGNvbnZlbnRpb25zIGFuZCBvdGhlciBsYXdzLiBBbGwgcmlnaHRzCithcmUgcmVzZXJ2ZWQuIFRoZSBQcm9ncmFtIGNvbnRhaW5zIGNlcnRhaW4gbGljZW5zZWQgbWF0ZXJpYWxzIGFuZCBWYWx2ZSdzCitsaWNlbnNvcnMgbWF5IHByb3RlY3QgdGhlaXIgcmlnaHRzIGluIHRoZSBldmVudCBvZiBhbnkgdmlvbGF0aW9uIG9mIHRoaXMKK0FncmVlbWVudC4KKwkzLiAgUmVzcG9uc2liaWxpdGllcyBvZiBFbmQgVXNlci4KKwkJQS4gU3ViamVjdCB0byB0aGUgbGljZW5zZSBncmFudCBhYm92ZSwgeW91IG1heSBub3QsIGluIHdob2xlCitvciBpbiBwYXJ0LCBjb3B5LCBwaG90b2NvcHksIHJlcHJvZHVjZSwgdHJhbnNsYXRlLCByZXZlcnNlIGVuZ2luZWVyLCBkZXJpdmUKK3NvdXJjZSBjb2RlLCBtb2RpZnksIGRpc2Fzc2VtYmxlLCBkZWNvbXBpbGUsIG9yIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzCitiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgb3IgcmVtb3ZlIGFueSBwcm9wcmlldGFyeSBub3RpY2VzIG9yIGxhYmVscyBvbiB0aGUKK1Byb2dyYW0gd2l0aG91dCB0aGUgcHJpb3IgY29uc2VudCwgaW4gd3JpdGluZywgb2YgVmFsdmUuCisJCUIuIFRoZSBQcm9ncmFtIGlzIGxpY2Vuc2VkIHRvIHlvdSBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJdHMKK2NvbXBvbmVudCBwYXJ0cyBtYXkgbm90IGJlIHNlcGFyYXRlZCBmb3IgdXNlIG9uIG1vcmUgdGhhbiBvbmUgY29tcHV0ZXIuCisJCUMuIFlvdSBhcmUgZW50aXRsZWQgdG8gdXNlIHRoZSBQcm9ncmFtIGZvciB1c2UgaW4gaG9zdGluZworb25saW5lIG11bHRpcGxheWVyIGdhbWVzIG9mIEhhbGYtTGlmZSBhbmQgb3RoZXIgVmFsdmUgY29tcHV0ZXIgZ2FtZXMgYmFzZWQKK29uIHRoZSBWYWx2ZSAxIEVuZ2luZSwgYnV0IHlvdSBhcmUgbm90IGVudGl0bGVkIHRvIHNlbGwsIGdyYW50IGEgc2VjdXJpdHkKK2ludGVyZXN0IGluIG9yIHRyYW5zZmVyIHJlcHJvZHVjdGlvbnMgb2YgdGhlIFByb2dyYW0gdG8gb3RoZXIgcGFydGllcyBpbiBhbnkKK3dheSwgbm9yIHRvIHJlbnQsIGxlYXNlIG9yIGxpY2Vuc2UgdGhlIFByb2dyYW0gdG8gb3RoZXJzIHdpdGhvdXQgdGhlIHByaW9yCit3cml0dGVuIGNvbnNlbnQgb2YgVmFsdmUuCisJCUQuIElmIHlvdSB3aXNoIHRvIG9wZXJhdGUgYSBnYW1lIHNlcnZlciB1c2luZyB0aGUgUHJvZ3JhbSwKK3lvdSB3aWxsIGJlIHNvbGVseSByZXNwb25zaWJsZSBmb3IgcHJvY3VyaW5nIGFueSBJbnRlcm5ldCBhY2Nlc3MsIGJhbmR3aWR0aCwKK29yIGhhcmR3YXJlIGZvciBzdWNoIGFjdGl2aXRpZXMgYW5kIHdpbGwgYmVhciBhbGwgY29zdHMgYXNzb2NpYXRlZAordGhlcmV3aXRoLgorCTQuICBObyBUcmFuc2Zlci4gWW91IG1heSBub3QgdHJhbnNmZXIgb3IgYXNzaWduIHRoaXMgTGljZW5zZQorQWdyZWVtZW50IG9yIGFueSBvZiB5b3VyIHJpZ2h0cyBvciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LgorCTUuICBUZXJtaW5hdGlvbi4gQW55IGxpY2Vuc2UgYWdyZWVtZW50IHRvIHdoaWNoIHlvdSBtYXkgaGF2ZQorcHJldmlvdXNseSBhZ3JlZWQgdGhhdCBnb3Zlcm5zIHlvdXIgdXNlIG9mIHByaW9yIHZlcnNpb25zIG9mIHRoZSBQcm9ncmFtIGlzCitoZXJlYnkgdGVybWluYXRlZC4gIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgaXMgZWZmZWN0aXZlIHVudGlsIHRoZSBlYXJsaWVyIG9mCisoaSkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudCBieSB5b3Ugb3IgVmFsdmUgb3IgKGlpKSB0aGUgcHVibGljCityZWxlYXNlIG9mIGEgbmV3IHZlcnNpb24gb2YgdGhlIFByb2dyYW0uIFlvdSBtYXkgdGVybWluYXRlIHRoZSBMaWNlbnNlCitBZ3JlZW1lbnQgYXQgYW55IHRpbWUgYnkgZGVzdHJveWluZyBhbGwgY29waWVzIG9mIHRoZSBQcm9ncmFtIGluIHlvdXIKK3Bvc3Nlc3Npb24uIFZhbHZlIG1heSwgYXQgaXRzIGRpc2NyZXRpb24sIHRlcm1pbmF0ZSB0aGlzIExpY2Vuc2UgYXQgYW55IHRpbWUKK3Vwb24gbm90aWZ5aW5nIHlvdSBvZiBzdWNoIHRlcm1pbmF0aW9uLiBJbiBzdWNoIGV2ZW50LCB5b3UgbXVzdCBpbW1lZGlhdGVseQorZGVzdHJveSB0aGUgYWxsIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSBpbiB5b3VyIHBvc3Nlc3Npb24uIFRoZSBwcm92aXNpb25zIG9mCitTZWN0aW9ucyAyLCA1LCBhbmQgOC0xMiB3aWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoZSBBZ3JlZW1lbnQuCisJNi4gIFVwZGF0ZXM7IE5ldyBWZXJzaW9ucy4gVmFsdmUgbWF5LCBpbiBpdHMgc29sZSBkaXNjcmV0aW9uLAorcHJvdmlkZSB1cGRhdGVzIG9yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgUHJvZ3JhbSBpbiB0aGUgZnV0dXJlLiBWYWx2ZSBtYXkKK3Byb3ZpZGUgc3VjaCB1cGRhdGVzIG9yIGZ1dHVyZSB2ZXJzaW9ucyBzdWJqZWN0IHRvIGEgc2VwYXJhdGUgbGljZW5zZSwgd2hpY2gKK21heSBieSBpdHMgdGVybXMgdGVybWluYXRlIHRoaXMgbGljZW5zZSBwdXJzdWFudCB0byBTZWN0aW9uIDUuCisJNy4gIEV4cG9ydCBDb250cm9scy4gWW91IGFncmVlIHRvIGNvbXBseSB3aXRoIGFsbCBhcHBsaWNhYmxlIGxhd3MsCityZWd1bGF0aW9ucywgcnVsaW5ncyBhbmQgZXhlY3V0aXZlIG9yZGVycyBvZiBhbnkgZ292ZXJubWVudGFsIGF1dGhvcml0eQorcmVsYXRpbmcgdG8gdGhlIGV4cG9ydGF0aW9uIG9yIGltcG9ydGF0aW9uIG9mIFByb2dyYW0sIGluY2x1ZGluZyBidXQgbm90CitsaW1pdGVkIHRvIHRoZSBleHBvcnQgYW5kIGRlc3RpbmF0aW9uIGNvbnRyb2wgcmVndWxhdGlvbnMgZm9yIFUuUy4gZ29vZHMuCitUaGUgUHJvZ3JhbSBtYXkgbm90IGJlIHJlLWV4cG9ydGVkLCBkb3dubG9hZGVkIG9yIG90aGVyd2lzZSBleHBvcnRlZCBpbnRvCisob3IgdG8gYSBuYXRpb25hbCBvciByZXNpZGVudCBvZikgYW55IGNvdW50cnkgdG8gd2hpY2ggdGhlIFUuUy4gaGFzCitlbWJhcmdvZWQgZ29vZHMsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gQ3ViYSwgSXJhbiwgSXJhcSwgTGlieWEsIE5vcnRoCitLb3JlYSwgU3VkYW4sIGFuZCBTeXJpYSwgb3IgdG8gYW55b25lIG9uIHRoZSBVLlMuIFRyZWFzdXJ5IERlcGFydG1lbnQncyBsaXN0CitvZiBTcGVjaWFsbHkgRGVzaWduYXRlZCBOYXRpb25hbHMgb3IgdGhlIFUuUy4gQ29tbWVyY2UgRGVwYXJ0bWVudCdzIFRhYmxlIG9mCitEZW5pYWwgT3JkZXJzLiBCeSBpbnN0YWxsaW5nIHRoZSBQcm9ncmFtLCB5b3UgYXJlIGFncmVlaW5nIHRvIHRoZSBmb3JlZ29pbmcKK2FuZCB5b3UgYXJlIHJlcHJlc2VudGluZyBhbmQgd2FycmFudGluZyB0aGF0IHlvdSBhcmUgbm90IGxvY2F0ZWQgaW4sIHVuZGVyCit0aGUgY29udHJvbCBvZiwgb3IgYSBuYXRpb25hbCBvciByZXNpZGVudCBvZiBhbnkgc3VjaCBjb3VudHJ5IG9yIG9uIGFueSBzdWNoCitsaXN0LgorCTguICBObyBXYXJyYW50aWVzLiBUaGUgZW50aXJlIHJpc2sgYXJpc2luZyBvdXQgb2YgdXNlIG9yIHBlcmZvcm1hbmNlCitvZiB0aGUgUHJvZ3JhbSByZW1haW5zIHdpdGggeW91LiAgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgIkFTIElTLCIgV0lUSE9VVAorV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORywgV0lUSE9VVAorTElNSVRBVElPTiwgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEKK1BBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgTk9OSU5GUklOR0VNRU5ULiBBTlkgV0FSUkFOVFkgQUdBSU5TVCBJTkZSSU5HRU1FTlQKK1RIQVQgTUFZIEJFIFBST1ZJREVEIElOIFNFQ1RJT04gMi0zMTIoMykgT0YgVEhFIFVOSUZPUk0gQ09NTUVSQ0lBTCBDT0RFCitBTkQvT1IgSU4gQU5ZIE9USEVSIENPTVBBUkFCTEUgU1RBVEUgU1RBVFVURSBJUyBFWFBSRVNTTFkgRElTQ0xBSU1FRC4gIFNvbWUKK3N0YXRlcyBkbyBub3QgYWxsb3cgdGhlIGV4Y2x1c2lvbiBvciBsaW1pdGF0aW9uIG9mIGltcGxpZWQgd2FycmFudGllcywgc28KK3RoZSBhYm92ZSBsaW1pdGF0aW9ucyBtYXkgbm90IGFwcGx5IHRvIHlvdS4KKwk5LiAgTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIFZBTFZFIFNIQUxMIE5PVCBCRSBMSUFCTEUgVE8gWU9VLCBPUiBUTyBBTlkKK1BFUlNPTiBBQ0NFU1NJTkcgT05MSU5FIEdBTUVQTEFZIEhPU1RFRCBCWSBZT1UsIElOIEFOWSBXQVkgRk9SIExPU1MgT1IKK0RBTUFHRSBPRiBBTlkgS0lORCBSRVNVTFRJTkcgRlJPTSBZT1VSIFVTRSBPRiBUSEUgUFJPR1JBTSwgKElOQ0xVRElORworV0lUSE9VVCBMSU1JVEFUSU9OLCBZT1VSIEhPU1RJTkcgT0YgT05MSU5FIE1VTFRJUExBWUVSIEdBTUVTIE9GIEhBTEYtTElGRSBPUgorT1RIRVIgQ09NUFVURVIgR0FNRVMgQkFTRUQgT04gVEhFIFZBTFZFIDEgRU5HSU5FKSwgSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SCitNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUyBBUklTSU5HIE9VVAorT0YgVEhFIFVTRSBPRiBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNLCBFVkVOIElGIFZBTFZFIEhBUyBCRUVOCitBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIEZVUlRIRVIsIFZBTFZFIFNIQUxMIE5PVCBCRQorTElBQkxFIElOIEFOWSBXQVkgRk9SIFRIRSBMT1NTIE9SIERBTUFHRSBUTyBBTlkgUExBWUVSIENIQVJBQ1RFUlMsIEFDQ09VTlRTLAorU1RBVElTVElDUyBPUiBVU0VSIFBST0ZJTEUgSU5GT1JNQVRJT04uIFlPVSBVTkRFUlNUQU5EIEFORCBBQ0tOT1dMRURHRSBUSEFUCitWQUxWRSBDQU5OT1QgQU5EIFdJTEwgTk9UIEJFIFJFU1BPTlNJQkxFIEZPUiBBTlkgSU5URVJSVVBUSU9OUyBPRiBPTkxJTkUKK0dBTUVQTEFZIFRIQVQgWU9VIEhPU1QsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPIElTUCBESVNSVVBUSU9OUywKK1NPRlRXQVJFIE9SIEhBUkRXQVJFIEZBSUxVUkVTIE9SIEFOWSBPVEhFUiBFVkVOVCBXSElDSCBNQVkgUkVTVUxUIElOIEEgTE9TUworT0YgREFUQSBPUiBESVNSVVBUSU9OIE9GIE9OTElORSBHQU1FUExBWS4gU29tZSBzdGF0ZXMgZG8gbm90IGFsbG93IHRoZQorZXhjbHVzaW9uIG9yIGxpbWl0YXRpb24gb2YgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHNvIHRoZSBhYm92ZQorbGltaXRhdGlvbnMgbWF5IG5vdCBhcHBseS4KKwkxMC4gIEVxdWl0YWJsZSBSZW1lZGllcy4gWW91IGhlcmVieSBhZ3JlZSB0aGF0IFZhbHZlIHdvdWxkIGJlCitpcnJlcGFyYWJseSBkYW1hZ2VkIGlmIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IHdlcmUgbm90CitzcGVjaWZpY2FsbHkgZW5mb3JjZWQsIGFuZCB0aGVyZWZvcmUgeW91IGFncmVlIHRoYXQgVmFsdmUgc2hhbGwgYmUgZW50aXRsZWQsCit3aXRob3V0IGJvbmQsIG90aGVyIHNlY3VyaXR5LCBvciBwcm9vZiBvZiBkYW1hZ2VzLCB0byBhcHByb3ByaWF0ZSBlcXVpdGFibGUKK3JlbWVkaWVzIHdpdGggcmVzcGVjdCB0byBicmVhY2hlcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LCBpbiBhZGRpdGlvbiB0bworc3VjaCBvdGhlciByZW1lZGllcyBhcyBWYWx2ZSBtYXkgb3RoZXJ3aXNlIGhhdmUgYXZhaWxhYmxlIHRvIGl0IHVuZGVyCithcHBsaWNhYmxlIGxhd3MuIEluIHRoZSBldmVudCBhbnkgbGl0aWdhdGlvbiBpcyBicm91Z2h0IGJ5IGVpdGhlciBwYXJ0eSBpbgorY29ubmVjdGlvbiB3aXRoIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQsIHRoZSBwcmV2YWlsaW5nIHBhcnR5IGluIHN1Y2gKK2xpdGlnYXRpb24gc2hhbGwgYmUgZW50aXRsZWQgdG8gcmVjb3ZlciBmcm9tIHRoZSBvdGhlciBwYXJ0eSBhbGwgdGhlIGNvc3RzLAorYXR0b3JuZXlzJyBmZWVzIGFuZCBvdGhlciBleHBlbnNlcyBpbmN1cnJlZCBieSBzdWNoIHByZXZhaWxpbmcgcGFydHkgaW4gdGhlCitsaXRpZ2F0aW9uLgorCTExLiAgTGltaXRhdGlvbnMgb24gTGljZW5zZS4gIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIEFncmVlbWVudCBzaGFsbAorcHJlY2x1ZGUgeW91IGZyb20gbWFraW5nIG9yIGF1dGhvcml6aW5nIHRoZSBtYWtpbmcgb2YgYW5vdGhlciBjb3B5IG9yCithZGFwdGF0aW9uIG9mIHRoZSBQcm9ncmFtIHByb3ZpZGVkLCBob3dldmVyLCB0aGF0ICgxKSBzdWNoIG5ldyBjb3B5IG9yCithZGFwdGF0aW9uIGlzIGNyZWF0ZWQgYXMgYW4gZXNzZW50aWFsIHN0ZXAgaW4geW91ciB1dGlsaXphdGlvbiBvZiB0aGUKK1Byb2dyYW0gaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IGFuZCBmb3IgTk8KK09USEVSIFBVUlBPU0U7IG9yICgyKSBzdWNoIG5ldyBjb3B5IG9yIGFkYXB0YXRpb24gaXMgZm9yIGFyY2hpdmFsIHB1cnBvc2VzCitPTkxZIGFuZCBhbGwgYXJjaGl2YWwgY29waWVzIGFyZSBkZXN0cm95ZWQgaW4gdGhlIGV2ZW50IG9mIHlvdXIgdHJhbnNmZXIgb2YKK3RoZSBQcm9ncmFtLCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQgb3Igb3RoZXIgY2lyY3Vtc3RhbmNlcyB1bmRlcgord2hpY2ggeW91ciBjb250aW51ZWQgdXNlIG9mIHRoZSBQcm9ncmFtIGNlYXNlcyB0byBiZSByaWdodGZ1bC4KKwkxMi4gIE1pc2NlbGxhbmVvdXMuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgc2hhbGwgYmUgZGVlbWVkIHRvIGhhdmUKK2JlZW4gbWFkZSBhbmQgZXhlY3V0ZWQgaW4gdGhlIFN0YXRlIG9mIFdhc2hpbmd0b24gYW5kIGFueSBkaXNwdXRlIGFyaXNpbmcKK2hlcmV1bmRlciBzaGFsbCBiZSByZXNvbHZlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGxhdyBvZiBXYXNoaW5ndG9uLiBZb3UKK2FncmVlIHRoYXQgYW55IGNsYWltIGFzc2VydGVkIGluIGFueSBsZWdhbCBwcm9jZWVkaW5nIGJ5IHlvdSBhZ2FpbnN0IFZhbHZlCitvciBpdHMgbGljZW5zb3JzIHNoYWxsIGJlIGNvbW1lbmNlZCBhbmQgbWFpbnRhaW5lZCBpbiBhbnkgc3RhdGUgb3IgZmVkZXJhbAorY291cnQgbG9jYXRlZCBpbiBLaW5nIENvdW50eSwgV2FzaGluZ3RvbiBoYXZpbmcgc3ViamVjdCBtYXR0ZXIganVyaXNkaWN0aW9uCit3aXRoIHJlc3BlY3QgdG8gdGhlIGRpc3B1dGUgYmV0d2VlbiB0aGUgcGFydGllcy4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBtYXkKK2JlIGFtZW5kZWQsIGFsdGVyZWQgb3IgbW9kaWZpZWQgb25seSBieSBhbiBpbnN0cnVtZW50IGluIHdyaXRpbmcsIHNwZWNpZnlpbmcKK3N1Y2ggYW1lbmRtZW50LCBhbHRlcmF0aW9uIG9yIG1vZGlmaWNhdGlvbiwgZXhlY3V0ZWQgYnkgYm90aCBwYXJ0aWVzLiBJbiB0aGUKK2V2ZW50IHRoYXQgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIGJlIGhlbGQgYnkgYSBjb3VydAorb3Igb3RoZXIgdHJpYnVuYWwgb2YgY29tcGV0ZW50IGp1cmlzZGljdGlvbiB0byBiZSB1bmVuZm9yY2VhYmxlLCBzdWNoCitwcm92aXNpb24gd2lsbCBiZSBlbmZvcmNlZCB0byB0aGUgbWF4aW11bSBleHRlbnQgcGVybWlzc2libGUgYW5kIHRoZQorcmVtYWluaW5nIHBvcnRpb25zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgc2hhbGwgcmVtYWluIGluIGZ1bGwgZm9yY2UgYW5kCitlZmZlY3QuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgY29uc3RpdHV0ZXMgYW5kIGNvbnRhaW5zIHRoZSBlbnRpcmUgYWdyZWVtZW50CitiZXR3ZWVuIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mIGFuZCBzdXBlcnNlZGVzCithbnkgcHJpb3Igb3JhbCBvciB3cml0dGVuIGFncmVlbWVudHMuCitZb3UgaGVyZWJ5IGFja25vd2xlZGdlIHRoYXQgeW91IGhhdmUgcmVhZCBhbmQgdW5kZXJzdGFuZCB0aGUgZm9yZWdvaW5nCitMaWNlbnNlIEFncmVlbWVudCBhbmQgYWdyZWUgdGhhdCB0aGUgYWN0aW9uIG9mIGluc3RhbGxpbmcgdGhlIFByb2dyYW0gaXMgYW4KK2Fja25vd2xlZGdtZW50IG9mIHlvdXIgYWdyZWVtZW50IHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZgordGhlIExpY2Vuc2UgQWdyZWVtZW50IGNvbnRhaW5lZCBoZXJlaW4uIFlvdSBhbHNvIGFja25vd2xlZGdlIGFuZCBhZ3JlZSB0aGF0Cit0aGlzIExpY2Vuc2UgQWdyZWVtZW50IGlzIHRoZSBjb21wbGV0ZSBhbmQgZXhjbHVzaXZlIHN0YXRlbWVudCBvZiB0aGUKK2FncmVlbWVudCBiZXR3ZWVuIFZhbHZlIGFuZCB5b3Ugd2l0aCByZWdhcmQgdG8gdGhlIHN1YmplY3QgbWF0dGVyIGhlcmVvZiBhbmQKK3RoYXQgdGhlIExpY2Vuc2UgQWdyZWVtZW50IHN1cGVyc2VkZXMgYW55IHByaW9yIG9yIGNvbnRlbXBvcmFuZW91cworYWdyZWVtZW50LCBlaXRoZXIgb3JhbCBvciB3cml0dGVuLCBhbmQgYW55IG90aGVyIGNvbW11bmljYXRpb25zIGJldHdlZW4KK1ZhbHZlIGFuZCB5b3UgcmVnYXJkaW5nIHRoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9Wb2xhbm8gYi9saWNlbnNlcy9Wb2xhbm8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODM5MzY2MgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL1ZvbGFubwpAQCAtMCwwICsxLDY0IEBACitMSUNFTlNFIEFHUkVFTUVOVCBGT1IgVk9MQU5PTUFSSyhUTSkKKworUGxlYXNlIHJlYWQgdGhlIGZvbGxvd2luZyBBZ3JlZW1lbnQgY2FyZWZ1bGx5LgorCitUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBBcGFjaGUgU29mdHdhcmUKK0ZvdW5kYXRpb24gKGh0dHA6Ly93d3cuYXBhY2hlLm9yZy8pLiBDb3B5cmlnaHQgKGMpIDE5OTktMjAwMSBUaGUgQXBhY2hlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBTZWUgdGhlIGZvbGxvd2luZyBmaWxlcyBmb3IKK3RoZSBjb3JyZXNwb25kaW5nIEFwYWNoZSBTb2Z0d2FyZSBMaWNlbnNlczoKKworICBsaWNlbnNlLXRvbWNhdC50eHQgLSB0aGUgQXBhY2hlIFRvbWNhdCBsaWNlbnNlCisgIGxpY2Vuc2UteGVyY2VzLnR4dCAtIHRoZSBBcGFjaGUgWGVyY2VzIGxpY2Vuc2UKKworSW5zdGFsbGF0aW9uIG9mIFZvbGFub01hcmsgU2VydmVyIFNvZnR3YXJlIFByb2dyYW0gKGhlcmVpbmFmdGVyCisiUHJvZHVjdCIpIGlzIGNvbnRpbmdlbnQgb24geW91ciAoaGVyZWluYWZ0ZXIgIlJlY2lwaWVudCIpIGFncmVlbWVudCB0bwordGhlIGZvbGxvd2luZyB0ZXJtczoKKworMS4gR1JBTlQgT0YgTElDRU5TRS4KKworKGEpIFZvbGFubyBncmFudHMgdG8gUmVjaXBpZW50IGEgbGltaXRlZCwgbm9uLWV4Y2x1c2l2ZSwgbm9udHJhbnNmZXJhYmxlCitsaWNlbnNlIHRvIHVzZSBjb3BpZXMgb2YgdGhlIGV4ZWN1dGFibGUgY29kZSBvZiB0aGUgVm9sYW5vTWFyayBTZXJ2ZXIKK3NvZnR3YXJlIG9uIGNvbXB1dGVycyByZXNpZGluZyBvbiBSZWNpcGllbnQncyBwcmVtaXNlcy4KKworKGIpIFJlY2lwaWVudCBzaGFsbCBub3QgcmVudCwgbGVhc2UsIHNlbGwsIHN1YmxpY2Vuc2UsIGFzc2lnbiwgb3IKK290aGVyd2lzZSB0cmFuc2ZlciBQcm9kdWN0LCBpbmNsdWRpbmcgYW55IGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIG9yCitwcmludGVkIG1hdGVyaWFscy4gUmVjaXBpZW50IG1heSBub3QgcmV2ZXJzZSBlbmdpbmVlciwgZGVjb21waWxlIG9yCitkaXNhc3NlbWJsZSB0aGUgUHJvZHVjdC4gVm9sYW5vIGFuZCBpdHMgc3VwcGxpZXJzIHNoYWxsIHJldGFpbiB0aXRsZSBhbmQKK2FsbCBvd25lcnNoaXAgcmlnaHRzIHRvIHRoZSBQcm9kdWN0LgorCisyLiBQUk9EVUNUIE1BSU5URU5BTkNFLgorCitWb2xhbm8gaXMgbm90IG9ibGlnYXRlZCB0byBwcm92aWRlIG1haW50ZW5hbmNlIG9yIHVwZGF0ZXMgdG8gUmVjaXBpZW50Citmb3IgdGhlIFByb2R1Y3QuIEhvd2V2ZXIsIGFueSBtYWludGVuYW5jZSBvciB1cGRhdGVzIHByb3ZpZGVkIGJ5IFZvbGFubworc2hhbGwgYmUgY292ZXJlZCBieSB0aGlzIEFncmVlbWVudC4KKworMy4gRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBXSVRIT1VUIFdBUlJBTlRJRVMgQVMgVE8KK1BFUkZPUk1BTkNFIE9SIE1FUkNIQU5UQUJJTElUWS4KKworVEhJUyBQUk9HUkFNIElTIFBST1ZJREVEIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTCitXSEFUU09FVkVSLiBCRUNBVVNFIE9GIFRIRSBESVZFUlNJVFkgT0YgQ09ORElUSU9OUyBBTkQgSEFSRFdBUkUgVU5ERVIKK1dISUNIIFRISVMgUFJPR1JBTSBNQVkgQkUgVVNFRCwgTk8gV0FSUkFOVFkgT0YgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCitQVVJQT1NFIElTIE9GRkVSRUQuIFRIRSBVU0VSIElTIEFEVklTRUQgVE8gVEVTVCBUSEUgUFJPR1JBTSBUSE9ST1VHSExZCitCRUZPUkUgUkVMWUlORyBPTiBJVC4gVEhFIFVTRVIgTVVTVCBBU1NVTUUgVEhFIEVOVElSRSBSSVNLIE9GIFVTSU5HIFRIRQorUFJPR1JBTS4gQU5ZIExJQUJJTElUWSBPRiBTRUxMRVIgT1IgTUFOVUZBQ1RVUkVSIFdJTEwgQkUgTElNSVRFRAorRVhDTFVTSVZFTFkgVE8gUFJPRFVDVCBSRVBMQUNFTUVOVC4KKworNC4gR09WRVJOSU5HIExBVzsgQVRUT1JORVlTIEZFRVMuCisKK1RoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBDYWxpZm9ybmlhCithbmQgUmVjaXBpZW50IGZ1cnRoZXIgY29uc2VudHMgdG8ganVyaXNkaWN0aW9uIGJ5IHRoZSBzdGF0ZSBhbmQgZmVkZXJhbAorY291cnRzIHNpdHRpbmcgaW4gdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEuIElmIGVpdGhlciBWb2xhbm8gb3IgUmVjaXBpZW50CitlbXBsb3lzIGF0dG9ybmV5cyB0byBlbmZvcmNlIGFueSByaWdodHMgYXJpc2luZyBvdXQgb2Ygb3IgcmVsYXRpbmcgdG8KK3RoaXMgQWdyZWVtZW50LCB0aGUgcHJldmFpbGluZyBwYXJ0eSBzaGFsbCBiZSBlbnRpdGxlZCB0byByZWNvdmVyCityZWFzb25hYmxlIGF0dG9ybmV5cycgZmVlcy4KKworNS4gRU5USVJFIEFHUkVFTUVOVC4KKworVGhpcyBBZ3JlZW1lbnQgY29uc3RpdHV0ZXMgdGhlIGNvbXBsZXRlIGFuZCBleGNsdXNpdmUgYWdyZWVtZW50IGJldHdlZW4KK1ZvbGFubyBhbmQgUmVjaXBpZW50IHdpdGggcmVzcGVjdCB0byB0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLCBhbmQKK3N1cGVyc2VkZXMgYWxsIHByaW9yIG9yYWwgb3Igd3JpdHRlbiB1bmRlcnN0YW5kaW5ncywgY29tbXVuaWNhdGlvbnMgb3IKK2FncmVlbWVudHMgbm90IHNwZWNpZmljYWxseSBpbmNvcnBvcmF0ZWQgaGVyZWluLiBUaGlzIEFncmVlbWVudCBtYXkgbm90CitiZSBtb2RpZmllZCBleGNlcHQgaW4gYSB3cml0aW5nIGR1bHkgc2lnbmVkIGJ5IGFuIGF1dGhvcml6ZWQKK3JlcHJlc2VudGF0aXZlIG9mIFZvbGFubyBhbmQgUmVjaXBpZW50LgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvVzNDIGIvbGljZW5zZXMvVzNDCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYWFlNmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9XM0MKQEAgLTAsMCArMSw3OSBAQAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIFczQyBJUFIgU09GVFdBUkUgTk9USUNFCisKKyAgQ29weXJpZ2h0IMKpIDE5OTUtMjAwMiBbMV1Xb3JsZCBXaWRlIFdlYiBDb25zb3J0aXVtLCAoWzJdTWFzc2FjaHVzZXR0cworICBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgWzNdSW5zdGl0dXQgTmF0aW9uYWwgZGUgUmVjaGVyY2hlIGVuIEluZm9ybWF0aXF1ZSBldAorICBlbiBBdXRvbWF0aXF1ZSwgWzRdS2VpbyBVbml2ZXJzaXR5KS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAgaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC8KKworICAgVGhpcyBXM0Mgd29yayAoaW5jbHVkaW5nIHNvZnR3YXJlLCBkb2N1bWVudHMsIG9yIG90aGVyIHJlbGF0ZWQgaXRlbXMpCisgICBpcyBiZWluZyBwcm92aWRlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlcnMgdW5kZXIgdGhlIGZvbGxvd2luZworICAgbGljZW5zZS4gQnkgb2J0YWluaW5nLCB1c2luZyBhbmQvb3IgY29weWluZyB0aGlzIHdvcmssIHlvdSAodGhlCisgICBsaWNlbnNlZSkgYWdyZWUgdGhhdCB5b3UgaGF2ZSByZWFkLCB1bmRlcnN0b29kLCBhbmQgd2lsbCBjb21wbHkgd2l0aAorICAgdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9uczoKKworICAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIGFuZCBtb2RpZnkgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCisgICBkb2N1bWVudGF0aW9uLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCAgZm9yIGFueSBwdXJwb3NlIGFuZAorICAgd2l0aG91dCBmZWUgb3Igcm95YWx0eSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB5b3UgaW5jbHVkZQorICAgdGhlIGZvbGxvd2luZyBvbiBBTEwgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiBvcgorICAgcG9ydGlvbnMgdGhlcmVvZiwgaW5jbHVkaW5nIG1vZGlmaWNhdGlvbnMsIHRoYXQgeW91IG1ha2U6CisgICAgMS4gVGhlIGZ1bGwgdGV4dCBvZiB0aGlzIE5PVElDRSBpbiBhIGxvY2F0aW9uIHZpZXdhYmxlIHRvIHVzZXJzIG9mCisgICAgICAgdGhlIHJlZGlzdHJpYnV0ZWQgb3IgZGVyaXZhdGl2ZSB3b3JrLgorICAgIDIuIEFueSBwcmUtZXhpc3RpbmcgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGRpc2NsYWltZXJzLCBub3RpY2VzLCBvcgorICAgICAgIHRlcm1zIGFuZCBjb25kaXRpb25zLiBJZiBub25lIGV4aXN0LCBhIHNob3J0IG5vdGljZSBvZiB0aGUKKyAgICAgICBmb2xsb3dpbmcgZm9ybSAoaHlwZXJ0ZXh0IGlzIHByZWZlcnJlZCwgdGV4dCBpcyBwZXJtaXR0ZWQpIHNob3VsZAorICAgICAgIGJlIHVzZWQgd2l0aGluIHRoZSBib2R5IG9mIGFueSByZWRpc3RyaWJ1dGVkIG9yIGRlcml2YXRpdmUgY29kZToKKyAgICAgICAiQ29weXJpZ2h0IMKpIFs1XVdvcmxkIFdpZGUgV2ViIENvbnNvcnRpdW0sIChbNl1NYXNzYWNodXNldHRzCisgICAgICAgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIFs3XUluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbgorICAgICAgIEluZm9ybWF0aXF1ZSBldCBlbiBBdXRvbWF0aXF1ZSwgWzhdS2VpbyBVbml2ZXJzaXR5KS4gQWxsIFJpZ2h0cworICAgICAgIFJlc2VydmVkLiBodHRwOi8vd3d3LnczLm9yZy9Db25zb3J0aXVtL0xlZ2FsLyIKKyAgICAzLiBOb3RpY2Ugb2YgYW55IGNoYW5nZXMgb3IgbW9kaWZpY2F0aW9ucyB0byB0aGUgVzNDIGZpbGVzLCBpbmNsdWRpbmcKKyAgICAgICB0aGUgZGF0ZSBjaGFuZ2VzIHdlcmUgbWFkZS4gKFdlIHJlY29tbWVuZCB5b3UgcHJvdmlkZSBVUklzIHRvIHRoZQorICAgICAgIGxvY2F0aW9uIGZyb20gd2hpY2ggdGhlIGNvZGUgaXMgZGVyaXZlZCkuCisKKyAgIEluIGFkZGl0aW9uLCBjcmVhdG9ycyBvZiBkZXJpdml0aXZlIHdvcmtzIG11c3QgaW5jbHVkZSB0aGUgZnVsbCB0ZXh0CisgICBvZiB0aGlzIE5PVElDRSBpbiBhIGxvY2F0aW9uIHZpZXdhYmxlIHRvIHVzZXJzIG9mIHRoZSBkZXJpdml0aXZlIHdvcmsuCisKKyAgIFRISVMgU09GVFdBUkUgQU5EIERPQ1VNRU5UQVRJT04gSVMgUFJPVklERUQgIkFTIElTLCIgQU5EIENPUFlSSUdIVAorICAgSE9MREVSUyBNQUtFIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLCBFWFBSRVNTIE9SIElNUExJRUQsCisgICBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPLCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTCisgICBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBUSEFUIFRIRSBVU0UgT0YgVEhFIFNPRlRXQVJFIE9SCisgICBET0NVTUVOVEFUSU9OIFdJTEwgTk9UIElORlJJTkdFIEFOWSBUSElSRCBQQVJUWSBQQVRFTlRTLCBDT1BZUklHSFRTLAorICAgVFJBREVNQVJLUyBPUiBPVEhFUiBSSUdIVFMuCisKKyAgIENPUFlSSUdIVCBIT0xERVJTIFdJTEwgTk9UIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwKKyAgIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBBTlkgVVNFIE9GIFRIRSBTT0ZUV0FSRSBPUgorICAgRE9DVU1FTlRBVElPTi4KKworICAgVGhlIG5hbWUgYW5kIHRyYWRlbWFya3Mgb2YgY29weXJpZ2h0IGhvbGRlcnMgbWF5IE5PVCBiZSB1c2VkIGluCisgICBhZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcGVydGFpbmluZyB0byB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywKKyAgIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4gVGl0bGUgdG8gY29weXJpZ2h0IGluIHRoaXMgc29mdHdhcmUgYW5kIGFueQorICAgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIHdpbGwgYXQgYWxsIHRpbWVzIHJlbWFpbiB3aXRoIGNvcHlyaWdodAorICAgaG9sZGVycy4KKworICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKKyAgIFRoaXMgZm9ybXVsYXRpb24gb2YgVzNDJ3Mgbm90aWNlIGFuZCBsaWNlbnNlIGJlY2FtZSBhY3RpdmUgb24gQXVndXN0CisgICAxNCAxOTk4LiBTZWUgdGhlIFs5XW9sZGVyIGZvcm11bGF0aW9uIGZvciB0aGUgcG9saWN5IHByaW9yIHRvIHRoaXMKKyAgIGRhdGUuIFBsZWFzZSBzZWUgb3VyIFsxMF1Db3B5cmlnaHQgRkFRIGZvciBjb21tb24gcXVlc3Rpb25zIGFib3V0CisgICB1c2luZyBtYXRlcmlhbHMgZnJvbSBvdXIgc2l0ZSwgaW5jbHVkaW5nIHNwZWNpZmljIHRlcm1zIGFuZCBjb25kaXRpb25zCisgICBmb3IgcGFja2FnZXMgbGlrZSBsaWJ3d3csIEFtYXlhLCBhbmQgSmlnc2F3LiBPdGhlciBxdWVzdGlvbnMgYWJvdXQKKyAgIHRoaXMgbm90aWNlIGNhbiBiZSBkaXJlY3RlZCB0byBbMTFdc2l0ZS1wb2xpY3lAdzMub3JnIC4KKworCisgICAgWzEyXXdlYm1hc3RlcgorICAgIChsYXN0IHVwZGF0ZWQgMTQtQXVnLTE5OTggKQorCitSZWZlcmVuY2VzCisKKyAgIDEuIGh0dHA6Ly93d3cudzMub3JnLworICAgMi4gaHR0cDovL3d3dy5sY3MubWl0LmVkdS8KKyAgIDMuIGh0dHA6Ly93d3cuaW5yaWEuZnIvCisgICA0LiBodHRwOi8vd3d3LmtlaW8uYWMuanAvCisgICA1LiBodHRwOi8vd3d3LnczLm9yZy8KKyAgIDYuIGh0dHA6Ly93d3cubGNzLm1pdC5lZHUvCisgICA3LiBodHRwOi8vd3d3LmlucmlhLmZyLworICAgOC4gaHR0cDovL3d3dy5rZWlvLmFjLmpwLworICAgOS4gaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC9jb3B5cmlnaHQtc29mdHdhcmUtMTk5ODA1MTkuaHRtbAorICAxMC4gaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbC9JUFItRkFRLmh0bWwKKyAgMTEuIG1haWx0bzpzaXRlLXBvbGljeUB3My5vcmcKKyAgMTIuIGh0dHA6Ly93d3cudzMub3JnL0hlbHAvV2VibWFzdGVyLmh0bWwKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL1czQy1kb2N1bWVudCBiL2xpY2Vuc2VzL1czQy1kb2N1bWVudApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lODAyMGJkCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvVzNDLWRvY3VtZW50CkBAIC0wLDAgKzEsNjYgQEAKK1czQ8KuIERPQ1VNRU5UIExJQ0VOU0UKK2h0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAwMi9jb3B5cmlnaHQtZG9jdW1lbnRzLTIwMDIxMjMxCisKK1B1YmxpYyBkb2N1bWVudHMgb24gdGhlIFczQyBzaXRlIGFyZSBwcm92aWRlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlcnMgdW5kZXIgdGhlIAorZm9sbG93aW5nIGxpY2Vuc2UuIEJ5IHVzaW5nIGFuZC9vciBjb3B5aW5nIHRoaXMgZG9jdW1lbnQsIG9yIHRoZSBXM0MgZG9jdW1lbnQgCitmcm9tIHdoaWNoIHRoaXMgc3RhdGVtZW50IGlzIGxpbmtlZCwgeW91ICh0aGUgbGljZW5zZWUpIGFncmVlIHRoYXQgeW91IGhhdmUgCityZWFkLCB1bmRlcnN0b29kLCBhbmQgd2lsbCBjb21wbHkgd2l0aCB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zOgorCitQZXJtaXNzaW9uIHRvIGNvcHksIGFuZCBkaXN0cmlidXRlIHRoZSBjb250ZW50cyBvZiB0aGlzIGRvY3VtZW50LCBvciB0aGUgVzNDIAorZG9jdW1lbnQgZnJvbSB3aGljaCB0aGlzIHN0YXRlbWVudCBpcyBsaW5rZWQsIGluIGFueSBtZWRpdW0gZm9yIGFueSBwdXJwb3NlIGFuZCAKK3dpdGhvdXQgZmVlIG9yIHJveWFsdHkgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgeW91IGluY2x1ZGUgdGhlIAorZm9sbG93aW5nIG9uIEFMTCBjb3BpZXMgb2YgdGhlIGRvY3VtZW50LCBvciBwb3J0aW9ucyB0aGVyZW9mLCB0aGF0IHlvdSB1c2U6CisKKyAgIDEuIEEgbGluayBvciBVUkwgdG8gdGhlIG9yaWdpbmFsIFczQyBkb2N1bWVudC4KKyAgIDIuIFRoZSBwcmUtZXhpc3RpbmcgY29weXJpZ2h0IG5vdGljZSBvZiB0aGUgb3JpZ2luYWwgYXV0aG9yLCBvciBpZiBpdCBkb2Vzbid0IAorZXhpc3QsIGEgbm90aWNlIChoeXBlcnRleHQgaXMgcHJlZmVycmVkLCBidXQgYSB0ZXh0dWFsIHJlcHJlc2VudGF0aW9uIGlzIAorcGVybWl0dGVkKSBvZiB0aGUgZm9ybTogIkNvcHlyaWdodCDCqSBbJGRhdGUtb2YtZG9jdW1lbnRdIFdvcmxkIFdpZGUgV2ViIAorQ29uc29ydGl1bSwgKE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIEV1cm9wZWFuIFJlc2VhcmNoIENvbnNvcnRpdW0gCitmb3IgSW5mb3JtYXRpY3MgYW5kIE1hdGhlbWF0aWNzLCBLZWlvIFVuaXZlcnNpdHkpLiBBbGwgUmlnaHRzIFJlc2VydmVkLiAKK2h0dHA6Ly93d3cudzMub3JnL0NvbnNvcnRpdW0vTGVnYWwvMjAwMi9jb3B5cmlnaHQtZG9jdW1lbnRzLTIwMDIxMjMxIgorICAgMy4gSWYgaXQgZXhpc3RzLCB0aGUgU1RBVFVTIG9mIHRoZSBXM0MgZG9jdW1lbnQuCisKK1doZW4gc3BhY2UgcGVybWl0cywgaW5jbHVzaW9uIG9mIHRoZSBmdWxsIHRleHQgb2YgdGhpcyBOT1RJQ0Ugc2hvdWxkIGJlIAorcHJvdmlkZWQuIFdlIHJlcXVlc3QgdGhhdCBhdXRob3JzaGlwIGF0dHJpYnV0aW9uIGJlIHByb3ZpZGVkIGluIGFueSBzb2Z0d2FyZSwgCitkb2N1bWVudHMsIG9yIG90aGVyIGl0ZW1zIG9yIHByb2R1Y3RzIHRoYXQgeW91IGNyZWF0ZSBwdXJzdWFudCB0byB0aGUgCitpbXBsZW1lbnRhdGlvbiBvZiB0aGUgY29udGVudHMgb2YgdGhpcyBkb2N1bWVudCwgb3IgYW55IHBvcnRpb24gdGhlcmVvZi4KKworTm8gcmlnaHQgdG8gY3JlYXRlIG1vZGlmaWNhdGlvbnMgb3IgZGVyaXZhdGl2ZXMgb2YgVzNDIGRvY3VtZW50cyBpcyBncmFudGVkIAorcHVyc3VhbnQgdG8gdGhpcyBsaWNlbnNlLiBIb3dldmVyLCBpZiBhZGRpdGlvbmFsIHJlcXVpcmVtZW50cyAoZG9jdW1lbnRlZCBpbiB0aGUgCitDb3B5cmlnaHQgRkFRKSBhcmUgc2F0aXNmaWVkLCB0aGUgcmlnaHQgdG8gY3JlYXRlIG1vZGlmaWNhdGlvbnMgb3IgZGVyaXZhdGl2ZXMgCitpcyBzb21ldGltZXMgZ3JhbnRlZCBieSB0aGUgVzNDIHRvIGluZGl2aWR1YWxzIGNvbXBseWluZyB3aXRoIHRob3NlIAorcmVxdWlyZW1lbnRzLgorCitUSElTIERPQ1VNRU5UIElTIFBST1ZJREVEICJBUyBJUywiIEFORCBDT1BZUklHSFQgSE9MREVSUyBNQUtFIE5PIFJFUFJFU0VOVEFUSU9OUyAKK09SIFdBUlJBTlRJRVMsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFdBUlJBTlRJRVMgT0YgCitNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT04tSU5GUklOR0VNRU5ULCBPUiBUSVRMRTsgCitUSEFUIFRIRSBDT05URU5UUyBPRiBUSEUgRE9DVU1FTlQgQVJFIFNVSVRBQkxFIEZPUiBBTlkgUFVSUE9TRTsgTk9SIFRIQVQgVEhFIAorSU1QTEVNRU5UQVRJT04gT0YgU1VDSCBDT05URU5UUyBXSUxMIE5PVCBJTkZSSU5HRSBBTlkgVEhJUkQgUEFSVFkgUEFURU5UUywgCitDT1BZUklHSFRTLCBUUkFERU1BUktTIE9SIE9USEVSIFJJR0hUUy4KKworQ09QWVJJR0hUIEhPTERFUlMgV0lMTCBOT1QgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCBPUiAKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBBTlkgVVNFIE9GIFRIRSBET0NVTUVOVCBPUiBUSEUgUEVSRk9STUFOQ0UgCitPUiBJTVBMRU1FTlRBVElPTiBPRiBUSEUgQ09OVEVOVFMgVEhFUkVPRi4KKworVGhlIG5hbWUgYW5kIHRyYWRlbWFya3Mgb2YgY29weXJpZ2h0IGhvbGRlcnMgbWF5IE5PVCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIAorcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gdGhpcyBkb2N1bWVudCBvciBpdHMgY29udGVudHMgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiAKK3ByaW9yIHBlcm1pc3Npb24uIFRpdGxlIHRvIGNvcHlyaWdodCBpbiB0aGlzIGRvY3VtZW50IHdpbGwgYXQgYWxsIHRpbWVzIHJlbWFpbiAKK3dpdGggY29weXJpZ2h0IGhvbGRlcnMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBmb3JtdWxhdGlvbiBvZiBXM0MncyBub3RpY2UgYW5kIGxpY2Vuc2UgYmVjYW1lIGFjdGl2ZSBvbiBEZWNlbWJlciAzMSAyMDAyLiAKK1RoaXMgdmVyc2lvbiByZW1vdmVzIHRoZSBjb3B5cmlnaHQgb3duZXJzaGlwIG5vdGljZSBzdWNoIHRoYXQgdGhpcyBsaWNlbnNlIGNhbiAKK2JlIHVzZWQgd2l0aCBtYXRlcmlhbHMgb3RoZXIgdGhhbiB0aG9zZSBvd25lZCBieSB0aGUgVzNDLCBtb3ZlcyBpbmZvcm1hdGlvbiBvbiAKK3N0eWxlIHNoZWV0cywgRFREcywgYW5kIHNjaGVtYXMgdG8gdGhlIENvcHlyaWdodCBGQVEsIHJlZmxlY3RzIHRoYXQgRVJDSU0gaXMgbm93IAorYSBob3N0IG9mIHRoZSBXM0MsIGluY2x1ZGVzIHJlZmVyZW5jZXMgdG8gdGhpcyBzcGVjaWZpYyBkYXRlZCB2ZXJzaW9uIG9mIHRoZSAKK2xpY2Vuc2UsIGFuZCByZW1vdmVzIHRoZSBhbWJpZ3VvdXMgZ3JhbnQgb2YgInVzZSIuIFNlZSB0aGUgb2xkZXIgZm9ybXVsYXRpb24gZm9yIAordGhlIHBvbGljeSBwcmlvciB0byB0aGlzIGRhdGUuIFBsZWFzZSBzZWUgb3VyIENvcHlyaWdodCBGQVEgZm9yIGNvbW1vbiBxdWVzdGlvbnMgCithYm91dCB1c2luZyBtYXRlcmlhbHMgZnJvbSBvdXIgc2l0ZSwgc3VjaCBhcyB0aGUgdHJhbnNsYXRpbmcgb3IgYW5ub3RhdGluZyAKK3NwZWNpZmljYXRpb25zLiBPdGhlciBxdWVzdGlvbnMgYWJvdXQgdGhpcyBub3RpY2UgY2FuIGJlIGRpcmVjdGVkIHRvIAorc2l0ZS1wb2xpY3lAdzMub3JnLgorCitKb3NlcGggUmVhZ2xlIDxzaXRlLXBvbGljeUB3My5vcmc+CisKK0xhc3QgcmV2aXNlZCAkSWQ6IGNvcHlyaWdodC1kb2N1bWVudHMtMjAwMjEyMzEuaHRtbCx2IDEuNiAyMDA0LzA3LzA2IDE2OjAyOjQ5IAorc2xlc2NoIEV4cCAkCmRpZmYgLS1naXQgYS9saWNlbnNlcy9XUkktRVVMQSBiL2xpY2Vuc2VzL1dSSS1FVUxBCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ODYxZmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9XUkktRVVMQQpAQCAtMCwwICsxLDIyIEBACitZb3Ugc2hvdWxkIHZpc2l0IGh0dHA6Ly9zdXBwb3J0LndvbGZyYW0uY29tL3RlY2hub3Rlcy9sYXRlc3Rmb250cy5lbi5odG1sCitmb3IgdXAgdG8gZGF0ZSBsaWNlbnNlIGFuZCBhY2NlcHQgaXQuIEFzIG9mIDAyLjEyLjIwMDggdGhlIHRleHQgb24gdGhhdCBwYWdlIHdhczoKKworUkVBRCBUSElTIEFHUkVFTUVOVCBDQVJFRlVMTFkgQkVGT1JFIFBST0NFRURJTkcuIElUIElTIEFOIEFHUkVFTUVOVCBCRVRXRUVOCitXT0xGUkFNIFJFU0VBUkNILCBJTkMuICgiV1JJIiksIEFORCBZT1UuIEFDQ0VQVEFOQ0UgT0YgSVRTIFRFUk1TIENSRUFURVMgQQorQklORElORyBDT05UUkFDVCBCRVRXRUVOIFlPVSBBTkQgV1JJLgorCitXb2xmcmFtIFJlc2VhcmNoLCBJbmMuICgiV1JJIikgbGljZW5zZXMgTWF0aGVtYXRpY2EgZm9udHMgdG8gaW5kaXZpZHVhbCB1c2VycworZG93bmxvYWRpbmcgZnJvbSB0aGlzIHNpdGUuIEFsbCBXUkkgZm9udHMgYXJlIGNvcHlyaWdodCBXb2xmcmFtIFJlc2VhcmNoLCBJbmMuCitvciBpdHMgdmVuZG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4gV1JJIGZvbnRzIGFyZSBub3QgaW4gdGhlIHB1YmxpYyBkb21haW4uCisKK1dSSSByZXNlcnZlcyB0aGUgcmlnaHQgdG8gY29udHJvbCBhbGwgZGlzdHJpYnV0aW9uIG9mIHRoZSBNYXRoZW1hdGljYSBmb250cyBhbmQKK2RvZXMgbm90LCBhdCB0aGlzIHRpbWUsIGFsbG93IHRoZW0gdG8gYmUgd2lkZWx5IGRpc3RyaWJ1dGVkIHZpYSBhbnkgc2VydmVycywKK2FyY2hpdmVzLCBvciBub24tV1JJIHNvZnR3YXJlIHByb2R1Y3RzIG9mIGFueSBraW5kIHdpdGhvdXQgZXhwcmVzcyB3cml0dGVuCitjb25zZW50IG9mIFdSSS4gVGhlcmUgYXJlIG5vIHJlc3RyaWN0aW9ucyBvbiBlbWJlZGRpbmcgdGhlIGZvbnRzIGluIGRvY3VtZW50cwordHJhbnNtaXR0ZWQgdG8gc2VydmljZSBidXJlYXVzLCBwdWJsaXNoZXJzLCBvciBvdGhlciB1c2VycyBvZiBXUkkgcHJvZHVjdHMuCitUaGVyZSBhcmUgbm8gcmVzdHJpY3Rpb25zIG9uIHdpZGVseSBkaXN0cmlidXRpbmcgbWV0cmljcyBmaWxlcyBnZW5lcmF0ZWQgZnJvbQordGhlIE1hdGhlbWF0aWNhIGZvbnRzLgorCitXUkkgZG9lcyBub3QgcmVxdWlyZSBhdXRob3JzIHRvIGNyZWRpdCBXb2xmcmFtIFJlc2VhcmNoIGZvciB0aGUgdXNlIG9mIHRoZQorTWF0aGVtYXRpY2EgZm9udHMgaW4gcHVibGlzaGVkIHBhcGVycy4gSG93ZXZlciwgc3VjaCBjcmVkaXQgaXMgYXBwcmVjaWF0ZWQuCivigJxNYXRoZW1hdGljYSBmb250cyBieSBXb2xmcmFtIFJlc2VhcmNoLCBJbmMu4oCdIGlzIHN1ZmZpY2llbnQuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9XVEZQTC0yIGIvbGljZW5zZXMvV1RGUEwtMgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjMzNDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvV1RGUEwtMgpAQCAtMCwwICsxLDE0IEBACisgICAgICAgICAgICBETyBXSEFUIFRIRSBGVUNLIFlPVSBXQU5UIFRPIFBVQkxJQyBMSUNFTlNFCisgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMiwgRGVjZW1iZXIgMjAwNAorCisgQ29weXJpZ2h0IChDKSAyMDA0IFNhbSBIb2NldmFyCisgIDIyIHJ1ZSBkZSBQbGFpc2FuY2UsIDc1MDE0IFBhcmlzLCBGcmFuY2UKKyBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBvciBtb2RpZmllZAorIGNvcGllcyBvZiB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGFuZCBjaGFuZ2luZyBpdCBpcyBhbGxvd2VkIGFzIGxvbmcKKyBhcyB0aGUgbmFtZSBpcyBjaGFuZ2VkLgorCisgICAgICAgICAgICBETyBXSEFUIFRIRSBGVUNLIFlPVSBXQU5UIFRPIFBVQkxJQyBMSUNFTlNFCisgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworICAwLiBZb3UganVzdCBETyBXSEFUIFRIRSBGVUNLIFlPVSBXQU5UIFRPLgorCmRpZmYgLS1naXQgYS9saWNlbnNlcy9XZWJNTyBiL2xpY2Vuc2VzL1dlYk1PCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmMjY5MWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9XZWJNTwpAQCAtMCwwICsxLDIxOSBAQAorV2ViTU8gTGljZW5zZSBBZ3JlZW1lbnQKK1dlYk1PIExpY2Vuc2UgQWdyZWVtZW50IDEuMQorRGVmaW5pdGlvbnMKK1RoZSAiU09GVFdBUkUgUFJPRFVDVCIgaXMgYWxsIGZpbGVzIGluY2x1ZGVkIHdpdGggdGhlIFdlYk1PIGRpc3RyaWJ1dGlvbiAKK2FyY2hpdmUgYXMgd2VsbCBhcyBhbGwgZmlsZXMgcHJvZHVjZWQgYXMgYSByZXN1bHQgb2YgdGhlIGluc3RhbGxhdGlvbiBzY3JpcHRzLiAKK1RoZSAiU09GVFdBUkUgUFJPRFVDVCIgYWxzbyBpbmNsdWRlcyB0aGUgV2ViTU8gbG9nbyBhbmQgdGhlICJsb29rIGFuZCBmZWVsIiBvZiAKK2FueSBwYWdlIHByb2R1Y2VkIHZpYSBXZWJNTyBvciBpbmNsdWRlZCB3aXRoIHRoZSBXZWJNTyBwYWNrYWdlLiBUaGUgcHJvdmlzaW9ucyAKK29mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgYXBwbHlpbmcgdG8gdGhlICJTT0ZUV0FSRSBQUk9EVUNUIiBhbHNvIGFwcGx5IHRvIGFsbCAKK2Rlcml2YXRpdmUgd29ya3Mgb2YgdGhlICJTT0ZUV0FSRSBQUk9EVUNULiIKK1RoZSAiTElDRU5TRUUiIGlzIHRoZSBpbmRpdmlkdWFsIHdobyBkb3dubG9hZHMgb3IgcmVjZWl2ZXMgdGhlIFNPRlRXQVJFIFBST0RVQ1QgCit1bmxlc3MgdGhlIGluZGl2aWR1YWwgZGVzaWduYXRlcyBhbm90aGVyIHRvIGJlIHRoZSAiTElDRU5TRUUiLgorIldFQk1PIiBpcyBXZWJNTywgTExDIG9mIEhvbGxhbmQsIE1pY2hpZ2FuLCB3aGljaCBpcyB0aGUgc29sZSBvd25lciBvZiB0aGUgCitjb3B5cmlnaHQgYW5kIGFsbCBvdGhlciByaWdodHMgaW4gYW5kIHRvIHRoZSBTT0ZUV0FSRSBQUk9EVUNULgorIkxJQ0VOU0UgRkVFUyIgYXJlIG1vbmllcyBwYWlkIGZyb20gdGhlIExJQ0VOU0VFIHRvIFdlYk1PIGZvciB0aGUgcmlnaHQgdG8gCitpbnZva2UgdGhpcyBMaWNlbnNlIEFncmVlbWVudCBmb3IgYSBzcGVjaWZpYyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU09GVFdBUkUgCitQUk9EVUNULgorQXBwbGljYXRpb24gb2YgTGljZW5zZQorQnkgZG93bmxvYWRpbmcgb3IgcmVjZWl2aW5nIHRoZSBTT0ZUV0FSRSBQUk9EVUNULCBvciBieSBpbnN0YWxsaW5nIHRoZSBTT0ZUV0FSRSAKK1BST0RVQ1Qgb250byBhbnkgbWFjaGluZSwgb3IgYnkgdXNpbmcgdGhlIFNPRlRXQVJFIFBST0RVQ1Qgb3IgYW55IHBvcnRpb24gb2YgCit0aGUgU09GVFdBUkUgUFJPRFVDVCBpbiBhbnkgd2F5LCB0aGUgTElDRU5TRUUgYWdyZWVzIHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyAKK29mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuCitUaGUgTElDRU5TRUUgaXMgcmVzcG9uc2libGUgZm9yIGVuc3VyaW5nIHRoYXQgdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlIAorQWdyZWVtZW50IGFyZSB1cGhlbGQgYW5kIHRoZSBMSUNFTlNFRSBpcyByZXNwb25zaWJsZSBmb3IgYW55IHZpb2xhdGlvbnMgb2YgdGhlIAorTGljZW5zZSBBZ3JlZW1lbnQgd2hldGhlciBvciBub3QgdGhlIExJQ0VOU0VFIGF1dGhvcml6ZWQgdGhlIGluZnJpbmdlbWVudHMgb2YgCit0aGUgTGljZW5zZSBBZ3JlZW1lbnQuCitQZXJtaXR0ZWQgVXNlcworUHJvdmlkZWQgdGhhdCBhbnkgcmVxdWlyZWQgTElDRU5TRSBGRUVTIGhhdmUgYmVlbiBwYWlkLCB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IAorYWxsb3dzIHRoZSBMSUNFTlNFRSB0byBkb3dubG9hZCB0aGUgU09GVFdBUkUgUFJPRFVDVCBmb3IgdGhlIHB1cnBvc2Ugb2YgCitpbnN0YWxsaW5nIHRoZSBTT0ZUV0FSRSBQUk9EVUNUIG9uIHRoZSBMSUNFTlNFRSdTIHNpdGUgb3IgZm9yIHRoZSBwdXJwb3NlIG9mIAorZXhhbWluaW5nIHRoZSBzb3VyY2UgY29kZSBvZiB0aGUgU09GVFdBUkUgUFJPRFVDVCB0byBldmFsdWF0ZSBpdHMgZnV0dXJlIHVzZSBvbiAKK3RoZSBMSUNFTlNFRSdTIHNpdGUuIFRoZSBMSUNFTlNFRSBtYXkgaW5zdGFsbCB0aGUgU09GVFdBUkUgUFJPRFVDVCBvbmUgdGltZSAKK29udG8gYSBzaW5nbGUgV1dXIHNlcnZlci4gVGhlIExJQ0VOU0VFIG1heSBhbHNvIHJldGFpbiBvbmUgY29weSBvZiB0aGUgCitkaXN0cmlidXRpb24gb2YgdGhlIFNPRlRXQVJFIFBST0RVQ1QgZm9yIGFyY2hpdmFsIHB1cnBvc2VzIHByb3ZpZGVkIHRoYXQgdGhpcyAKK2FyY2hpdmUgaXMgbm90IHJlZGlzdHJpYnV0ZWQgaW4gYW55IHdheS4KK0xpY2Vuc2UgRmVlcworV2ViTU8gcmV0YWlucyB0aGUgcmlnaHQgdG8gY2hhcmdlIGxpY2Vuc2UgZmVlcyBmb3IgaXRzIHByb2R1Y3QuIEhvd2V2ZXIsIG5vIAorcmV0cm9hY3RpdmUgZmVlcyBmb3IgaXNzdWVkIGxpY2Vuc2VzIHdpbGwgZXZlciBiZSBhcHBsaWVkLiBMaWNlbnNlcyBhcmUgaXNzdWVkIAorZm9yIGEgcGFydGljdWxhciBXZWJNTyB2ZXJzaW9uLCBhbmQgYSBmZWUgbWF5IGJlIGNoYXJnZWQgZm9yIGZ1dHVyZSBXZWJNTyAKK3VwZ3JhZGVzLgorUHJvaGliaXRlZCBVc2VzCitUaGUgTElDRU5TRUUgYWdyZWVzIG5vdCB0byBkbyBhbnkgb2YgdGhlIGZvbGxvd2luZyB1bmxlc3MgcHJldmlvdXNseSBhdXRob3JpemVkIAoraW4gd3JpdGluZyBieSBXZWJNTywgYXMgZG9pbmcgdGhlIGZvbGxvd2luZyB3b3VsZCB2aW9sYXRlIHRoaXMgTGljZW5zZSAKK0FncmVlbWVudCBhbmQgYmUgZ3JvdW5kcyBmb3IgdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgYW5kIAorcG9zc2libGUgbGVnYWwgYWN0aW9uIGFzIGRlc2NyaWJlZCBpbiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LgorICAgICogTWFraW5nIGF2YWlsYWJsZSBmb3IgZG93bmxvYWQgb3Igb3RoZXJ3aXNlIGNvcHlpbmcgb3IgcmVkaXN0cmlidXRpbmcgdGhlIAorU09GVFdBUkUgUFJPRFVDVAorICAgICogU2VsbGluZywgcmVudGluZywgb3IgbGVhc2luZyB0aGUgU09GVFdBUkUgUFJPRFVDVCB0byBhbnkgaW5kaXZpZHVhbCBvciAKK29yZ2FuaXphdGlvbgorICAgICogSW5jbHVkaW5nIG9uIGFueSBkaXN0cmlidXRpb24gbWVkaXVtIChzdWNoIGFzIGEgQ0QtUk9NIG9yIGJ1bmRsZWQgd2l0aGluIAorYSBzb2Z0d2FyZSBwYWNrYWdlKSB0aGUgU09GVFdBUkUgUFJPRFVDVAorICAgICogSW5zdGFsbGluZyB0aGUgU09GVFdBUkUgUFJPRFVDVCBvbiBtb3JlIHRoYW4gb25lIFdXVyBzZXJ2ZXIgb3IgCitpbXBsZW1lbnRpbmcgdGhlIFNPRlRXQVJFIFBST0RVQ1QgbW9yZSB0aGFuIG9uZSB0aW1lIG9uIGEgV1dXIHNlcnZlciwgd2l0aG91dCBhIAorc3VmZmljaWVudCBudW1iZXIgb2YgTGljZW5zZXMgdG8gZG8gc28KKyAgICAqIFVzaW5nIGFueSBwb3J0aW9uIG9mIHRoZSBTT0ZUV0FSRSBQUk9EVUNUIGluIGFueSBvdGhlciBhcHBsaWNhdGlvbiBvciAKK3JlZGlzdHJpYnV0aW5nIHRoZSBTT0ZUV0FSRSBQUk9EVUNUIHVuZGVyIHRoZSBzYW1lIG9yIGFub3RoZXIgbmFtZSAKK0NvcHlyaWdodCBOb3RpY2VzIGFuZCBQcm9ncmFtIENyZWRpdHMKK0NvcHlyaWdodCBub3RpY2VzIGluY2x1ZGVkIHdpdGhpbiB0aGUgQ0dJIHNjcmlwdHMgYW5kIHNvdXJjZSBmaWxlcyBvZiB0aGUgCitTT0ZUV0FSRSBQUk9EVUNUIG1heSBuZXZlciBiZSBtb2RpZmllZCwgYXBwZW5kZWQsIG9yIHJlbW92ZWQgd2l0aG91dCB0aGUgcHJpb3IgCitleHByZXNzZWQgd3JpdHRlbiBjb25zZW50IG9mIFdlYk1PLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIExJQ0VOU0VFIGhhcyBwYWlkIAorYW55IExJQ0VOU0UgRkVFUyBmb3IgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBTT0ZUV0FSRSBQUk9EVUNULgorVGhlIExJQ0VOU0VFIGlzIG5vdCBwZXJtaXR0ZWQgdG8gbW9kaWZ5LCBhcHBlbmQsIG9yIHJlbW92ZSBhbnkgY29weXJpZ2h0IAorbm90aWNlcyBvciBwcm9ncmFtIGNyZWRpdHMgYXBwZWFyaW5nIHdpdGhpbiB0aGUgdmlzdWFsIGludGVyZmFjZSBvZiB0aGUgCitTT0ZUV0FSRSBQUk9EVUNULiBUaGlzIGluY2x1ZGVzLCBidXQgaXMgbm90IGxpbWl0ZWQgdG8sIGNvcHlyaWdodCBub3RpY2VzIG9uIAorZG9jdW1lbnRhdGlvbiBwYWdlcyBhbmQgdGhlICJBYm91dCBXZWJNTyIgcGFnZS4gUmVtb3ZpbmcgbGlua3MgdG8gc3VjaCAKK2NvcHlyaWdodCBub3RpY2VzIGFuZCBwcm9ncmFtIGNyZWRpdHMgaXMgc2ltaWxhcmx5IHByb2hpYml0ZWQuCitNdWx0aXBsZSBJbnN0YWxsYXRpb25zCitFYWNoIGRpc3RpbmN0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBTT0ZUV0FSRSBQUk9EVUNUIHJlcXVpcmVzIHRoYXQgYSBzZXBhcmF0ZSAKK0xpY2Vuc2UgYmUgaXNzdWVkIGJ5IFdlYk1PIHRvIHRoZSBMSUNFTlNFRS4gSWYgbm8gTElDRU5TRSBGRUVTIGhhdmUgYmVlbiBwYWlkLCAKK2EgTElDRU5TRUUgaXMgbGltaXRlZCB0byBvbmUgYWN0aXZlIExpY2Vuc2UgYW5kIG1heSBpbnN0YWxsIG9ubHkgb25lIAoraW1wbGVtZW50YXRpb24gb2YgdGhlIFNPRlRXQVJFIFBST0RVQ1QuCitNb2RpZmljYXRpb25zIG9yIEFkZGl0aW9ucworV2ViTU8gc3Ryb25nbHkgZGlzY291cmFnZXMgdGhlIHVzZSBvciBjcmVhdGlvbiBvZiBhbnkgbW9kaWZpY2F0aW9ucyBvciAKK2FkZGl0aW9ucyB0byB0aGUgU09GVFdBUkUgUFJPRFVDVC4gQW55IG1vZGlmaWNhdGlvbnMgb3IgYWRkaXRpb25zIHRvIHRoZSAKK1NPRlRXQVJFIFBST0RVQ1QgYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBwcm92aXNpb25zOgorICAgMS4gVGhlIExJQ0VOU0VFIG1heSBtb2RpZnkgaW4gYW55IHdheSBkZXNpcmVkIHRoZSBTT0ZUV0FSRSBQUk9EVUNUIGZvciB0aGUgCitMSUNFTlNFRSdTIG93biB1c2UsIGV4Y2VwdCB0aGF0IGNvcHlyaWdodCBoZWFkZXJzIGFuZCBjcmVkaXRzIGNhbm5vdCBiZSByZW1vdmVkIAorZXhjZXB0IGFzIG90aGVyd2lzZSBwcm92aWRlZCBpbiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LgorICAgMi4gQW55IG1vZGlmaWNhdGlvbnMgY29udGFpbmluZyBwb3J0aW9ucyBvZiB0aGUgU09GVFdBUkUgUFJPRFVDVCBvciBjYXVzaW5nIAorYW55IHBvcnRpb24gb2YgdGhlIFNPRlRXQVJFIFBST0RVQ1QgdG8gYmUgZXhlY3V0ZWQsIGV2YWx1YXRlZCwgb3Igb3RoZXJ3aXNlIAordXNlZCBpbiBhbnkgd2F5LCBhcmUgY29uc2lkZXJlZCBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBTT0ZUV0FSRSBQUk9EVUNULiAKK0hlbmNlLCB0aGVzZSBtb2RpZmljYXRpb25zIGFyZSBzdWJqZWN0IHRvIGFsbCB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LCAKK2FuZCBjb25zZXF1ZW50bHkgY2Fubm90IGJlIHJlZGlzdHJpYnV0ZWQgb3Igc29sZC4gVGh1cywgbm8gcGVyc29uLCAKK29yZ2FuaXphdGlvbiwgb3IgZW50aXR5IHNoYWxsIGRpc3RyaWJ1dGUgYW55IG1vZGlmaWNhdGlvbiBvciBhZGRpdGlvbiB0byB0aGUgCitTT0ZUV0FSRSBQUk9EVUNUIHRoYXQgdXNlcyBhbnkgcG9ydGlvbiBvZiB0aGUgU09GVFdBUkUgUFJPRFVDVCBpbiBhbnkgd2F5LgorICAgMy4gQnkgbWFraW5nIGFueSBtb2RpZmljYXRpb24gb3IgYnkgb3RoZXJ3aXNlIGluc3RhbGxpbmcgYW55IHRoaXJkLXBhcnR5IAorbW9kaWZpY2F0aW9ucyB0byB0aGUgU09GVFdBUkUgUFJPRFVDVCwgdGhlIExJQ0VOU0VFIHZvaWRzIHRoZSBsaW1pdGVkIHdhcnJhbnR5IAorYW5kIGFueSBvYmxpZ2F0aW9uIG9mIHN1cHBvcnQgb24gYmVoYWxmIG9mIFdlYk1PLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gCitXZWJNTyBzcGVjaWZpY2FsbHkgZGlzY2xhaW1zIGFsbCB3YXJyYW50aWVzLCBleHByZXNzIG9yIGltcGxpZWQsIGlmIGFueSBwb3J0aW9uIAorb2YgdGhlIFNPRlRXQVJFIFBST0RVQ1QgaGFzIGJlZW4gbW9kaWZpZWQgZXhjZXB0IGFzIGRvY3VtZW50ZWQgaW4gdGhlIFNPRlRXQVJFIAorUFJPRFVDVCdTIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uLgorICAgNC4gV2ViTU8gbWFrZXMgbm8gZ3VhcmFudGVlIHRoYXQgdGhlIHVuZGVybHlpbmcgY29kZSBvciBkYXRhIHN0cnVjdHVyZSB3aWxsIAorYmUgbWFpbnRhaW5lZCBpbiBmdXR1cmUgdXBncmFkZXMgdG8gdGhlIFNPRlRXQVJFIFBST0RVQ1QuIFRoZSBMSUNFTlNFRSBhZ3JlZXMgCit0aGF0IFdlYk1PIHJldGFpbnMgdGhlIGFic29sdXRlIHJpZ2h0IHRvIG1vZGlmeSBmdXR1cmUgdmVyc2lvbnMgb2YgdGhlIFNPRlRXQVJFIAorUFJPRFVDVCBhcyBXZWJNTyBzZWVzIGZpdCwgd2hldGhlciBvciBub3Qgc3VjaCBtb2RpZmljYXRpb25zIGFyZSBjb21wYXRpYmxlIAord2l0aCBhbnkgbW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoZSBMSUNFTlNFRS4gV2ViTU8gcmV0YWlucyB0aGlzIHJpZ2h0IGluIGFsbCAKK2NpcmN1bXN0YW5jZXMsIGV2ZW4gaWYgdGhlIExJQ0VOU0VFIGhhcyB0aGUgcmlnaHQgdW5kZXIgYXJyYW5nZW1lbnRzIHdpdGggV2ViTU8gCit0byBkb3dubG9hZCBhbmQgaW5zdGFsbCBmdXR1cmUgdXBncmFkZXMgb2YgdGhlIFNPRlRXQVJFIFBST0RVQ1QuIFdlYk1PIGlzIHVuZGVyIAorbm8gb2JsaWdhdGlvbiB3aGF0c29ldmVyIHRvIG1vZGlmeSB0aGUgU09GVFdBUkUgUFJPRFVDVCBvciB0byBpbnN0cnVjdCB0aGUgCitMSUNFTlNFRSBvciBhbnlvbmUgZWxzZSBob3cgdG8gbW9kaWZ5IHRoZSBTT0ZUV0FSRSBQUk9EVUNULiAKK0xpbWl0ZWQgV2FycmFudHkKK1Byb3ZpZGVkIHRoYXQgTElDRU5TRSBGRUVTIGhhdmUgYmVlbiBwYWlkIGJ5IHRoZSBMSUNFTlNFRSwgV2ViTU8gd2FycmFudHMgdGhhdCAKK3RoZSBTT0ZUV0FSRSBQUk9EVUNUIHdpbGwgcGVyZm9ybSBhY2NvcmRpbmcgdG8gaXRzIGRvY3VtZW50YXRpb24gb24gYSBzeXN0ZW0gCittZWV0aW5nIHRoZSBtaW5pbXVtIHNwZWNpZmllZCByZXF1aXJlbWVudHMgZm9yIGEgcGVyaW9kIG9mIDMwIGRheXMgY29tbWVuY2luZyAKK3Vwb24gdGltZWx5IHBheW1lbnQgb2Ygc3VjaCBMSUNFTlNFIEZFRVMuIFNob3VsZCBXZWJNTyBicmVhY2ggdGhlIGxpbWl0ZWQgCit3YXJyYW50eSBhZ3JlZW1lbnQsIFdlYk1PIHdpbGwsIGF0IGl0cyBkaXNjcmV0aW9uLCByZXBhaXIsIHJlcGxhY2UsIG9yIHByb3ZpZGUgCitpbnN0cnVjdGlvbnMgZm9yIHJlcGFpciBvZiB0aGUgU09GVFdBUkUgUFJPRFVDVCwgb3IgcmV0dXJuIGFueSBMSUNFTlNFIEZFRVMgdG8gCit0aGUgTElDRU5TRUUuIEluIHRoaXMgc2Vuc2UsIFdlYk1PIG9mZmVycyAzMCBkYXlzIG9mIGZyZWUgdGVjaG5pY2FsIHN1cHBvcnQgdG8gCit0aGUgTElDRU5TRUUgZm9yIHRoZSBzb2xlIHB1cnBvc2Ugb2YgY2F1c2luZyB0aGUgU09GVFdBUkUgUFJPRFVDVCB0byBwZXJmb3JtIAorYWNjb3JkaW5nIHRvIGl0cyBkb2N1bWVudGF0aW9uLiBJbiBubyBjYXNlIHNoYWxsIHRoZSBsaWFiaWxpdHkgb2YgV2ViTU8gZXhjZWVkIAordGhlIExJQ0VOU0UgRkVFUyBwYWlkIGJ5IHRoZSBMSUNFTlNFRS4gVGhpcyBsaW1pdGVkIHdhcnJhbnR5IGlzIG5vdCBvZmZlcmVkIGlmIAorTElDRU5TRSBGRUVTIGhhdmUgbm90IGJlZW4gcGFpZCBieSB0aGUgTElDRU5TRUUuCitUaGlzIGlzIHRoZSBvbmx5IHdhcnJhbnR5IG9mIGFueSBraW5kIGd1YXJhbnRlZWQgYnkgV2ViTU8uIEV4Y2VwdCBmb3IgdGhpcyAKK2xpbWl0ZWQgd2FycmFudHksIHRoZSBTT0ZUV0FSRSBQUk9EVUNUIGlzIHByb3ZpZGVkIG9uIGFuICJhcyBpcyIgYmFzaXMsIGFuZCB0aGUgCitMSUNFTlNFRSBhY2NlcHRzIHRoZSBTT0ZUV0FSRSBQUk9EVUNUICJ3aXRoIGFsbCBmYXVsdHMuIiBTaG91bGQgdGhlIFNPRlRXQVJFIAorUFJPRFVDVCBwcm92ZSBkZWZlY3RpdmUsIHRoZSBMSUNFTlNFRSBhbmQgbm90IFdlYk1PIGFzc3VtZXMgdGhlIGVudGlyZSBjb3N0IG9mIAorc2VydmljZSBhbmQgcmVwYWlyLiBJbiBhZGRpdGlvbiwgdGhlIHNlY3VyaXR5IG1lY2hhbmlzbXMgaW1wbGVtZW50ZWQgaW4gCitTT0ZUV0FSRSBQUk9EVUNUIGhhdmUgaW5oZXJlbnQgbGltaXRhdGlvbnMsIGFuZCBXZWJNTyBkb2VzIG5vdCB3YXJyYW50IHRoYXQgdGhlIAorU09GVFdBUkUgUFJPRFVDVCB3aWxsIHdpdGhzdGFuZCBhbGwgYXR0YWNrcy4gVG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSAKK2FwcGxpY2FibGUgbGF3LCBXZWJNTyBkaXNjbGFpbXMgYWxsIG90aGVyIHdhcnJhbnRpZXMsIGVpdGhlciBleHByZXNzIG9yIAoraW1wbGllZC4gUGFydGljdWxhcmx5LCBXZWJNTyBtYWtlcyBubyB3YXJyYW50eSBvZiB0aXRsZSwgbm8gd2FycmFudHkgYWdhaW5zdCAKK2luZnJpbmdlbWVudCwgbm8gd2FycmFudHkgb2YgbWVyY2hhbnRhYmlsaXR5LCBhbmQgbm8gd2FycmFudHkgb2YgZml0bmVzcyBmb3IgYSAKK3BhcnRpY3VsYXIgcHVycG9zZS4gVGhpcyB3YXJyYW50eSBnaXZlcyB5b3Ugc3BlY2lmaWMgbGVnYWwgcmlnaHRzLCBhbmQgeW91IG1heSAKK2hhdmUgb3RoZXIgbGVnYWwgcmlnaHRzIHRoYXQgdmFyeSBieSBqdXJpc2RpY3Rpb24uCitUaGUgU09GVFdBUkUgUFJPRFVDVCBpcyBub3QgZmF1bHQtdG9sZXJhbnQgYW5kIGlzIG5vdCBkZXNpZ25lZCBmb3IgdXNlIGluIAoraGlnaC1yaXNrIGFjdGl2aXRpZXMgaW4gYW55IGVudmlyb25tZW50IHdoZXJlIHRoZSBTT0ZUV0FSRSBQUk9EVUNUIGNvdWxkIGxlYWQgCit0byBpbmp1cnkgb3IgZGVhdGguIFdlYk1PIHNwZWNpZmljYWxseSBkaXNjbGFpbXMgYW55IHdhcnJhbnRpZXMsIGV4cHJlc3MgCitpbXBsaWVkLCBvZiBmaXRuZXNzIGZvciBoaWdoLXJpc2sgYWN0aXZpdGllcy4KK0luIG5vIGV2ZW50IHNoYWxsIFdlYk1PIGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgaW4gZXhjZXNzIG9mIExJQ0VOU0UgRkVFUyAKK3BhaWQgKGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIHNwZWNpYWwsIGRpcmVjdCwgaW5jaWRlbnRhbCwgY29uc2VxdWVudGlhbCwgCitvciBpbmRpcmVjdCBkYW1hZ2VzIGZvciBwZXJzb25hbCBpbmp1cnksIGxvc3Mgb2YgYnVzaW5lc3MgcHJvZml0cywgYnVzaW5lc3MgCitpbnRlcnJ1cHRpb24sIGxvc3Mgb2YgaW5mb3JtYXRpb24sIGxvc3Mgb2YgZGF0YSwgYW5kIGFueSBvdGhlciBwZWN1bmlhcnkgbG9zcykgCithcmlzaW5nIGZyb20gdGhlIGluc3RhbGxhdGlvbiBvciBhbnkgdXNlIG9mIHRoaXMgU09GVFdBUkUgUFJPRFVDVC4KK1RoZSBMSUNFTlNFRSB2b2lkcyB0aGlzIGxpbWl0ZWQgd2FycmFudHkgYnkgcGVyZm9ybWluZyBhbnkgb2YgdGhlIGZvbGxvd2luZyAKK2FjdGlvbnM6CisgICAxLiBNb2RpZnlpbmcgYW55IHBhcnQgb2YgdGhlIFNPRlRXQVJFIFBST0RVQ1QgZXhjZXB0IGFzIGRvY3VtZW50ZWQgaW4gdGhlIAorZG9jdW1lbnRhdGlvbiB0aGF0IGFjY29tcGFuaWVzIHRoZSBTT0ZUV0FSRSBQUk9EVUNULiBUaGlzIGluY2x1ZGVzLCBidXQgaXMgbm90IAorbGltaXRlZCB0bywgdGhlIENHSSBzY3JpcHRzLCBhbmQgYW55IGNvbmZpZ3VyYXRpb24gZmlsZXMgZ2VuZXJhdGVkIGJ5IHRoZSAKK3Byb2dyYW0gb3IgcmVxdWlyZWQgZm9yIGluc3RhbGxhdGlvbi4gU2hvdWxkIGFueSBvdGhlciBwZXJzb24gb3IgYW55IGF1dG9tYXRpYyAKK3Byb2Nlc3MgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gd2ViIHNpdGUgcHVibGlzaGluZyBzb2Z0d2FyZSBvciAKK3RoaXJkLXBhcnR5IHNjcmlwdHMgd2hpY2ggZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBhY2Nlc3Mgb3Igd3JpdGUgYW55IG9mIHRoZSAKK2ZpbGVzIGNvbnN0aXR1dGluZyBwYXJ0IG9mIHRoZSBTT0ZUV0FSRSBQUk9EVUNUKSBwZXJmb3JtIHN1Y2ggbW9kaWZpY2F0aW9ucywgCit0aGUgTElDRU5TRUUgaXMgZGVlbWVkIHRvIGhhdmUgcGVyZm9ybWVkIHN1Y2ggbW9kaWZpY2F0aW9ucyBhbmQgdGh1cyB0aGUgCitsaW1pdGVkIHdhcnJhbnR5IGlzIHZvaWQuCisgICAyLiBCcmVhY2hpbmcgYW55IHBvcnRpb24gb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4KKyAgIDMuIEZhaWxpbmcgdG8gcHJvbXB0bHkgcmVnaXN0ZXIgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBTT0ZUV0FSRSBQUk9EVUNUIAord2l0aCBXZWJNTyBmb2xsb3dpbmcgaXRzIGltcGxlbWVudGF0aW9uIHRoZSBMSUNFTlNFRSdTIHNpdGUuCisgICA0LiBEZWxldGluZyBvciBtb3ZpbmcgKGludGVudGlvbmFsbHkgb3IgaW5hZHZlcnRlbnRseSkgYW55IGZpbGUgcHJvdmlkZWQgCit3aXRoLCBjcmVhdGVkIGJ5LCBvciB1c2VkIGJ5IHRoZSBTT0ZUV0FSRSBQUk9EVUNULgorICAgNS4gRmFpbGluZyB0byBtZWV0IHRoZSBzeXN0ZW0gcmVxdWlyZW1lbnRzIGZvciB0aGUgTElDRU5TRUUnUyBzZXJ2ZXIgYXMgCitzdGF0ZWQgb24gdGhlIFdlYk1PIGRvd25sb2FkIHBhZ2UgZm9yIHRoZSB2ZXJzaW9uIG9mIHRoZSBTT0ZUV0FSRSBQUk9EVUNUIHRoYXQgCit0aGUgTElDRU5TRUUgaXMgYXR0ZW1wdGluZyB0byBpbnN0YWxsLgorICAgNi4gRmFpbGluZyB0byBwYXkgcmVxdWlyZWQgTElDRU5TRSBGRUVTIGluIGEgdGltZWx5IG1hbm5lciBmb3IgdGhlIAorTElDRU5TRUUnUyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU09GVFdBUkUgUFJPRFVDVCwgaW4gd2hpY2ggY2FzZSB0aGUgTElDRU5TRUUgCitub3Qgb25seSB2b2lkcyB0aGUgbGltaXRlZCB3YXJyYW50eSwgYnV0IGFsc28gYnJlYWNoZXMgdGhpcyBMaWNlbnNlIEFncmVlbWVudCAKK2FuZCBpcyBhbHNvIHN1YmplY3QgdG8gb3RoZXIgcHJvdmlzaW9ucyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiAKK1NpdGUgQ29udGVudAorVGhlIExJQ0VOU0VFIGFsb25lLCBub3QgV2ViTU8sIGJlYXJzIHRoZSBlbnRpcmUgcmVzcG9uc2liaWxpdHkgZm9yIHRoZSBjb250ZW50IAorb2YgYW55IGludGVybmV0IHNpdGUsIGV2ZW4gaWYgdGhlIExJQ0VOU0VFIGlzIHVzaW5nIHRoZSBTT0ZUV0FSRSBQUk9EVUNUIGFzIAorcGFydCBvZiB0aGF0IGludGVybmV0IHNpdGUuIEluIG5vIHdheSBzaGFsbCBXZWJNTyBiZSBsaWFibGUgb3IgcmVzcG9uc2libGUgZm9yIAordGhlIGNvbnRlbnQgb2YgYW55IExJQ0VOU0VFJ1Mgc2l0ZSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBhbnkgZGF0YSAKK2NyZWF0ZWQgYnkgdXNlcnMgb2YgdGhlIFNPRlRXQVJFIFBST0RVQ1QuCitUaXRsZSBhbmQgQ29weXJpZ2h0CitUaGUgU09GVFdBUkUgUFJPRFVDVCByZW1haW5zIHRoZSBwcm9wZXJ0eSBvZiBXZWJNTy4gVGhlIFNPRlRXQVJFIFBST0RVQ1QgaXMgCitsaWNlbnNlZCwgbm90IHNvbGQuIEJ5IHBheWluZyBMSUNFTlNFIEZFRVMsIHRoZSBMSUNFTlNFRSBpcyBncmFudGVkIHRoZSByaWdodCAKK3RvIHVzZSB0aGUgU09GVFdBUkUgUFJPRFVDVCBhcyBkZXNjcmliZWQgaW4gdGhpcyBMaWNlbnNlIEFncmVlbWVudCwgYnV0IHRoZSAKK0xJQ0VOU0VFIGRvZXMgbm90IGFzc3VtZSBhbnkgcmlnaHRzIG9mIG93bmVyc2hpcCBvciBvdGhlciByaWdodHMgaW4gYW5kIHRvIHRoZSAKK1NPRlRXQVJFIFBST0RVQ1QuCitUaGUgU09GVFdBUkUgUFJPRFVDVCBpcyBjb3B5cmlnaHQg77+9IDIwMDAgYnkgV2ViTU8sIGFsbCByaWdodHMgcmVzZXJ2ZWQuIFRoZSAKK0xJQ0VOU0VFIG9mIHRoaXMgU09GVFdBUkUgUFJPRFVDVCBnYWlucyB0aGUgcmlnaHQgdG8gdXNlIHRoZSBjb3B5cmlnaHRlZCAKK3NvZnR3YXJlIGJ1dCBkb2VzIG5vdCBnYWluIG93bmVyc2hpcCBvZiB0aGUgY29weXJpZ2h0IG9yIG9mIHRoZSBTT0ZUV0FSRSAKK1BST0RVQ1QuCitDb25zZXF1ZW5jZXMgb2YgTGljZW5zZSBWaW9sYXRpb25zCitTaG91bGQgdGhlIExJQ0VOU0VFIHVzZSB1bmxpY2Vuc2VkIGNvcGllcyBvZiB0aGUgU09GVFdBUkUgUFJPRFVDVCB3aXRob3V0IHRoZSAKK2V4cHJlc3NlZCB3cml0dGVuIGNvbnNlbnQgb2YgV2ViTU8sIHRoZSBMSUNFTlNFRSBpcyBpbiB2aW9sYXRpb24gb2YgdGhpcyAKK0xpY2Vuc2UgQWdyZWVtZW50LiBJZiB0aGUgTElDRU5TRUUgd2FzIHVzaW5nIGFueSBwb3J0aW9ucyBvZiB0aGUgU09GVFdBUkUgCitQUk9EVUNUIHdoaWNoIG9yZGluYXJpbHkgcmVxdWlyZSB0aGUgcGF5bWVudCBvZiBMSUNFTlNFIEZFRVMsIHRoZSBMSUNFTlNFRSAKK2FncmVlcyB0byBwYXkgdG8gV2ViTU8gdGhlIExJQ0VOU0UgRkVFUyBuZWNlc3NhcnkgdG8gbGljZW5zZSB0aGUgdW5saWNlbnNlZCAKK2ltcGxlbWVudGF0aW9uIGFjY29yZGluZyB0byB0aGUgc2NoZWR1bGUgb2YgTElDRU5TRSBGRUVTIGF2YWlsYWJsZSBhdCB0aGUgdGltZSAKK2Zyb20gdGhlIFdlYk1PIHdlYiBzaXRlLiBBZGRpdGlvbmFsbHksIFdlYk1PIG1heSByZXF1aXJlIHRoYXQgdGhlIExJQ0VOU0VFIAoraW1tZWRpYXRlbHkgYW5kIGVudGlyZWx5IHJlbW92ZSBhbnkgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNPRlRXQVJFIFBST0RVQ1QgdGhhdCAKK2lzIGluIGJyZWFjaCBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBJbiBhZGRpdGlvbiwgdGhlIExJQ0VOU0VFIHNoYWxsIGJlIAorbGlhYmxlIGZvciB0aGUgcGF5bWVudCB0byBXZWJNTyBvZiBhdHRvcm5leSdzIGZlZXMsIGNvdXJ0IGNvc3RzLCBwdW5pdGl2ZSAKK2RhbWFnZXMsIGFuZCBhbnkgb3RoZXIgbGVnYWwgcmVtZWR5IGFwcHJvcHJpYXRlIGZvciB0aGUgc2l0dWF0aW9uLgorU2hvdWxkIHRoZSBMSUNFTlNFRSBkaXN0cmlidXRlLCBzZWxsLCBvciBvdGhlcndpc2UgbWFrZSBhdmFpbGFibGUgYW55IHBvcnRpb24gCitvZiB0aGUgU09GVFdBUkUgUFJPRFVDVCBvciBhbnkgbW9kaWZpY2F0aW9uIHdoaWNoIGlzIGRldGVybWluZWQgdG8gYmUgdGhlIAorU09GVFdBUkUgUFJPRFVDVCBhY2NvcmRpbmcgdG8gYW55IG90aGVyIHNlY3Rpb25zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQsIHRoZSAKK0xJQ0VOU0VFIHNoYWxsIGJlIGxpYWJsZSBmb3IgdGhlIHBheW1lbnQgdG8gV2ViTU8gb2YgdGhlIGVxdWl2YWxlbnQgY29zdCBvZiAKK0xJQ0VOU0UgRkVFUyBmb3IgdGhlIFNPRlRXQVJFIFBST0RVQ1Qgb3IgZm9yIGFsbCBtb25pZXMgY29sbGVjdGVkIGJ5IHRoZSAKK0xJQ0VOU0VFIGluIHZpb2xhdGlvbiBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LCB3aGljaGV2ZXIgaXMgbW9yZS4gSW4gCithZGRpdGlvbiwgdGhlIExJQ0VOU0VFIHNoYWxsIGJlIGxpYWJsZSBmb3IgdGhlIHBheW1lbnQgdG8gV2ViTU8gb2YgYXR0b3JuZXkncyAKK2ZlZXMsIGNvdXJ0IGNvc3RzLCBwdW5pdGl2ZSBkYW1hZ2VzLCBhbmQgYW55IG90aGVyIGxlZ2FsIHJlbWVkeSBhcHByb3ByaWF0ZSBmb3IgCit0aGUgc2l0dWF0aW9uLgorVGVybWluYXRpb24KK1dlYk1PIG1heSwgYXQgYW55IHRpbWUsIHRlcm1pbmF0ZSB0aGUgTGljZW5zZSBBZ3JlZW1lbnQgaWYgV2ViTU8gZGV0ZXJtaW5lcyAKK3RoYXQgdGhlIExpY2Vuc2UgQWdyZWVtZW50IGhhcyBiZWVuIGJyZWFjaGVkLiBJZiB0aGUgdGVybWluYXRpb24gb2YgTGljZW5zZSAKK0FncmVlbWVudCBvY2N1cnMgYXMgYSByZXN1bHQgb2YgYSB2aW9sYXRpb24gYnkgdGhlIExJQ0VOU0VFIG9yIGFub3RoZXIgcGVyc29uLCAKK3RoZSBMSUNFTlNFRSBtdXN0IGltbWVkaWF0ZWx5IHJlbW92ZSBhbGwgZmlsZXMgZnJvbSBoaXMgb3IgaGVyIGltcGxlbWVudGF0aW9uIAorb2YgdGhlIFNPRlRXQVJFIFBST0RVQ1QgYW5kIGFsbCBsaW5rcyB0byB0aGUgc2FtZS4KK0luIG5vIGNhc2Ugc2hhbGwgV2ViTU8gYmUgcmVzcG9uc2libGUgZm9yIHBheWluZyB0byB0aGUgTElDRU5TRUUgb3IgYW55b25lIGVsc2UgCithbnkgYW1vdW50IG9mIG1vbmV5LCBldmVuIGlmIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGUgbGljZW5zZSBkaW1pbmlzaGVzIG9yIAorZWxpbWluYXRlcyByZXZlbnVlIHJhaXNlZCBieSB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNPRlRXQVJFIFBST0RVQ1QuIEluIG5vIAorY2FzZSBzaGFsbCBXZWJNTyBiZSByZXNwb25zaWJsZSBmb3IgcmVmdW5kaW5nIGFueSBMSUNFTlNFIEZFRVMsIHJlZ2FyZGxlc3Mgb2YgCit0aGUgcmVhc29uIGZvciB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LCBleGNlcHQgYXMgcHJvdmlkZWQgaW4gdGhlIAorbGltaXRlZCB3YXJyYW50eSBzZWN0aW9uIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuCitUcmFuc2ZlciBvZiBMaWNlbnNlCitUaGUgTElDRU5TRUUgaXMgbm90IHBlcm1pdHRlZCB0byB0cmFuc2ZlciBhIExpY2Vuc2UgdG8gYW55IG90aGVyIGluZGl2aWR1YWwgb3IgCitpbnN0aXR1dGlvbiB3aXRob3V0IHRoZSBleHByZXNzZWQgd3JpdHRlbiBjb25zZW50IG9mIFdlYk1PLgorV2l0aG91dCBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgV2ViTU8sIHRoZSBMSUNFTlNFRSBtYXkgbm90IGFjdCBhcyBhIHJlc2VsbGVyIAord2hvIHNlbGxzIG9yIG90aGVyd2lzZSBkaXN0cmlidXRlcyBMaWNlbnNlcyBmb3IgdGhlIFNPRlRXQVJFIFBST0RVQ1QuIFVuZGVyIAordGhpcyBMaWNlbnNlIEFncmVlbWVudCwgV2ViTU8gcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIGRldmVsb3AgYSBzZXBhcmF0ZSAKK2FncmVlbWVudCBhcHBseWluZyB0byBzdWNoIHJlc2VsbGluZyBhY3Rpdml0aWVzLCBhbmQgc3VjaCBhbiBhZ3JlZW1lbnQsIGlmIAorZW50ZXJlZCBpbnRvIGJ5IFdlYk1PIGFuZCB0aGUgTElDRU5TRUUsIHdvdWxkIHN1cGVyY2VkZSB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IAorYXMgZGVmaW5lZCBpbiB0aGUgc2VwYXJhdGUgYWdyZWVtZW50LgorSnVyaXNkaWN0aW9uCitUaGlzIExpY2Vuc2UgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBNaWNoaWdhbi4gQm90aCAKK3RoZSBMSUNFTlNFRSBhbmQgV2ViTU8gc3VibWl0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIGNvdXJ0cyBvZiB0aGUgU3RhdGUgb2YgCitNaWNoaWdhbi4gQm90aCB0aGUgTElDRU5TRUUgYW5kIFdlYk1PIGFncmVlIHRvIGNvbW1lbmNlIGFueSBsaXRpZ2F0aW9uIHRoYXQgbWF5IAorYXJpc2UgaGVyZXVuZGVyIGluIHRoZSBjb3VydHMgbG9jYXRlZCBpbiB0aGUgSnVkaWNpYWwgRGlzdHJpY3Qgb2YgT3R0YXdhIENvdW50eSAKK2luIHRoZSBTdGF0ZSBvZiBNaWNoaWdhbi4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL1dlcmtlbi0xLjEuMS4xIGIvbGljZW5zZXMvV2Vya2VuLTEuMS4xLjEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTYxZGU0MAotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL1dlcmtlbi0xLjEuMS4xCkBAIC0wLDAgKzEsNDAgQEAKK0NvcHlyaWdodCAyMDAxIChDKSBUaGUgV2Vya2VuIENvbXBhbnkuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCisoIlNvZnR3YXJlIiksIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQKK3RoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiBjb3B5cmlnaHQKKyAgIHN0YXRlbWVudHMgYW5kIG5vdGljZXMuICBSZWRpc3RyaWJ1dGlvbnMgbXVzdCBhbHNvIGNvbnRhaW4gYQorICAgY29weSBvZiB0aGlzIGRvY3VtZW50LgorCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlCisgICBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlCisgICBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIKKyAgIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKzMuIFRoZSBuYW1lICJGb3JlaGVhZCIgbXVzdCBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICAgcGVybWlzc2lvbiBvZiBUaGUgV2Vya2VuIENvbXBhbnkuICBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLAorICAgcGxlYXNlIGNvbnRhY3QgYm9iQHdlcmtlbi5jb20uCisKKzQuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIFNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJGb3JlaGVhZCIKKyAgIG5vciBtYXkgIkZvcmVoZWFkIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisgICBwZXJtaXNzaW9uIG9mIFRoZSBXZXJrZW4gQ29tcGFueS4gRm9yZWhlYWQgaXMgYSByZWdpc3RlcmVkCisgICB0cmFkZW1hcmsgb2YgVGhlIFdlcmtlbiBDb21wYW55LgorCis1LiBEdWUgY3JlZGl0IHNob3VsZCBiZSBnaXZlbiB0byB0aGUgRm9yZWhlYWQgUHJvamVjdAorICAgKGh0dHA6Ly9kcm9vbHMub3JnLykuCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFdFUktFTiBDT01QQU5ZIEFORCBDT05UUklCVVRPUlMKK2BgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUCitOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5ECitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMCitUSEUgV0VSS0VOIENPTVBBTlkgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCitJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCitTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCitBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECitPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9XaGl0ZWhlYWQtTUlUIGIvbGljZW5zZXMvV2hpdGVoZWFkLU1JVApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTZmZmE3Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvV2hpdGVoZWFkLU1JVApAQCAtMCwwICsxLDEyNiBAQAorQ29weXJpZ2h0IChjKSAyMDAwLTIwMDMsIFdoaXRlaGVhZCBJbnN0aXR1dGUgZm9yIEJpb21lZGljYWwgCitSZXNlYXJjaDsgMjAwMy0yMDA2IE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMgYXJlIHN1YmplY3QgdG8gdGhlIAordGVybXMgb2YgdGhlIGZvbGxvd2luZyBsaWNlbnNlIGFncmVlbWVudC4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICoqKiAoUFJPR1JBTSBOQU1FKSBMSUNFTlNFIEFHUkVFTUVOVCAqKioKKworVGhpcyBMaWNlbnNlIEFncmVlbWVudCAodGhlICJBZ3JlZW1lbnQiKSBpcyBtYWRlIGJldHdlZW4gdGhlIAorTWFzc2FjaHVzZXR0cyBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgYSBub3QtZm9yLXByb2ZpdCBvcmdhbml6YXRpb24gCithbmQgdGhlIGxpY2Vuc2luZyBhZ2VudCBmb3IgdGhlIFdoaXRlaGVhZCBJbnN0aXR1dGUgZm9yIEJpb21lZGljYWwgCitSZXNlYXJjaCAoIldISVRFSEVBRCIpIHdpdGggYSBwcmluY2lwYWwgYWRkcmVzcyBhdCA3NyBNYXNzYWNodXNldHRzIAorQXZlbnVlLCBDYW1icmlkZ2UsIE1BIDAyMTM5ICgiTS5JLlQuIiksIGFuZCB0aGUgaW5kaXZpZHVhbCAKK2Rvd25sb2FkaW5nIHRoaXMgcHJvZ3JhbSAoIllPVSIpLCBhbmQgaXMgZWZmZWN0aXZlIGF0IHRoZSBkYXRlIHRoZSAKK2Rvd25sb2FkaW5nIGlzIGNvbXBsZXRlZCAoIkVmZmVjdGl2ZSBEYXRlIikuICBXSElURUhFQUQgYW5kIE0uSS5ULiAKK2FyZSB0aGUgb3duZXJzIG9mIGNlcnRhaW4gcmlnaHRzLCB0aXRsZSwgYW5kIGludGVyZXN0IGluIHRoZSAKK2NvbXB1dGVyIHByb2dyYW0gZW50aXRsZWQgKFBST0dSQU0gTkFNRSkgYW5kIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiwgaWYgCithbnksIGFzIHRoZXkgZXhpc3Qgb24gdGhlIEVmZmVjdGl2ZSBEYXRlIGFuZCBhcyBjYW4gYmUgZG93bmxvYWRlZCAKK2Zyb20gaHR0cDovL3d3dy5icm9hZC5taXQuZWR1L3dnYS8gb24gdGhlIEVmZmVjdGl2ZSBEYXRlICh0aGUgCisiUHJvZ3JhbSIpLiAgWU9VIHdpc2ggdG8gb2J0YWluIGFuZCBNLkkuVC4gYWdyZWVzIHRvIGdyYW50LCBvbiBpdHMgCitvd24gYmVoYWxmIGFuZCBvbiBiZWhhbGYgb2YgV0hJVEVIRUFELCBhIG5vbi1leGNsdXNpdmUgbGljZW5zZSB0byAKK3VzZSBhbmQgbW9kaWZ5IHRoZSBwcm9ncmFtIGZvciBpbnRlcm5hbCByZXNlYXJjaCBhbmQgZWR1Y2F0aW9uYWwgCitwdXJwb3NlcyBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgQWdyZWVtZW50LiAgTS5JLlQuIGFuZCBZT1UsIGluIAorY29uc2lkZXJhdGlvbiBvZiB0aGUgYWJvdmUsIGFncmVlIGFzIGZvbGxvd3M6CisKKzEuIE0uSS5ULiBoZXJlYnkgZ3JhbnRzIHRvIFlPVSwgb24gdGhlIEVmZmVjdGl2ZSBEYXRlLCBub25leGNsdXNpdmUgCityaWdodHMgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgYW5kIGRpc3BsYXkgdGhlIHNvdXJjZSBjb2RlIGFuZCAKK2V4ZWN1dGFibGUgY29kZSBvZiB0aGUgUHJvZ3JhbSBmb3IgaW50ZXJuYWwgcmVzZWFyY2ggYW5kIGVkdWNhdGlvbmFsIAorcHVycG9zZXMgb25seSwgd2l0aG91dCBhbnkgcmlnaHRzIHdoYXRzb2V2ZXIgdG8gcmVkaXN0cmlidXRlIHRoZSAKK3Byb2dyYW0sIHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgQWdyZWVtZW50LiAgV0hJVEVIRUFEIAorYW5kIE0uSS5ULiByZXRhaW4gYWxsIG93bmVyc2hpcCByaWdodHMgaW4gdGhlIFByb2dyYW0sIGluY2x1ZGluZyAKK3BhdGVudCByaWdodHMsIGNvcHlyaWdodHMsIGFuZCBsaWNlbnNpbmcgcmlnaHRzLiAgWU9VIG1heSByZXRhaW4gCitvd25lcnNoaXAgaW4gTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IFlPVSwgcHJvdmlkZWQgdGhhdCBZT1UgaGVyZWJ5IAorZ3JhbnQgdG8gV0hJVEVIRUFEIGFuZCBNLkkuVC4gYSBub24tZXhjbHVzaXZlLCByb3lhbHR5LWZyZWUsIAoraXJyZXZvY2FibGUsIHBlcnBldHVhbCBsaWNlbnNlIHRvIHVzZSByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgCithbmQgZGlzdHJpYnV0ZSB0aGUgc291cmNlIGNvZGUgYW5kIGV4ZWN1dGFibGUgY29kZSBpbiBhbGwgc3VjaCAKK01vZGlmaWNhdGlvbnMuICBZT1UgYWdyZWUgdG8gZm9yd2FyZCB0byBNLkkuVC4gYW55IGFuZCBhbGwgCitNb2RpZmljYXRpb25zLCBzZW5kaW5nIHN1Y2ggTW9kaWZpY2F0aW9ucyB0bzogKFBST0dSQU0gTkFNRSksIEJyb2FkIAorSW5zdGl0dXRlLCA3IENhbWJyaWRnZSBDZW50ZXIsIENhbWJyaWRnZSwgTUEgIDAyMTQyLCBvciBpbiAKK2VsZWN0cm9uaWMgZm9ybSB0bzogd2dhQGJyb2FkLm1pdC5lZHUuICBZT1Ugc2hhbGwgYmUgZW50aXRsZWQgdG8gCitlc3RhYmxpc2ggYWxsIHByb3ByaWV0YXJ5IHJpZ2h0cyBmb3IgaXRzZWxmIGluIHRoZSBNb2RpZmljYXRpb25zLCAKK3Byb3ZpZGVkIHRoYXQgcHJvcGVyIGNvcHlyaWdodCBhdHRyaWJ1dGlvbnMgYXJlIG1haW50YWluZWQuICBObyAKK3JpZ2h0cywgZXhwcmVzcyBvciBpbXBsaWVkLCBmb3IgdXNlIG90aGVyIHRoYW4gc3BlY2lmaWVkIGluIHRoaXMgCitBZ3JlZW1lbnQgYXJlIHRyYW5zZmVycmVkLgorCisyLiBZT1UgYWdyZWUgdG8gcmVzdHJpY3QgdGhlIHVzZSBvZiB0aGUgUHJvZ3JhbSB0byB5b3Vyc2VsZiBmb3IgCityZXNlYXJjaCBhbmQgZWR1Y2F0aW9uYWwgcHVycG9zZXMgb25seS4gIFlPVSBhZ3JlZSB0byB1c2UgdGhlIAorUHJvZ3JhbSBvbmx5IGF0IHRoZSBzaXRlIHdoZXJlIHRoZSBQcm9ncmFtIGlzIGRvd25sb2FkZWQuICBZT1UgYWdyZWUgCit0aGF0IHRoZSBQcm9ncmFtIHdpbGwgbm90IGJlIHVzZWQgYXMgdGhlIGJhc2lzIG9mIGEgY29tbWVyY2lhbCAKK3NvZnR3YXJlIG9yIGhhcmR3YXJlIHByb2R1Y3QgYW5kIHRoYXQgdGhlIHNhbWUgd2lsbCBub3QgYmUgcmV3cml0dGVuIAoraW4gYW5vdGhlciBjb21wdXRlciBsYW5ndWFnZSBvciBvdGhlcndpc2UgYWRhcHRlZCB0byBjaXJjdW12ZW50IHRoZSAKK25lZWQgZm9yIG9idGFpbmluZyBhIGxpY2Vuc2UgZnJvbSBNLkkuVC4gZm9yIHVzZSBvZiB0aGUgUHJvZ3JhbSAKK290aGVyIHRoYW4gYXMgc3BlY2lmaWVkIGJ5IHRoaXMgQWdyZWVtZW50LgorCiszLiBUaGUgbmFtZSBvZiB0aGUgV2hpdGVoZWFkIEluc3RpdHV0ZSwgdGhlICJCcm9hZCBJbnN0aXR1dGUiIG9yIAorTS5JLlQuIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIAordGhpcyBzb2Z0d2FyZS4gIFlPVSBhZ3JlZSB0byBhY2tub3dsZWRnZSB1c2Ugb2YgdGhlIFByb2dyYW0gaW4gYW55IAorcHVibGljYXRpb24gcmVzdWx0aW5nIGZyb20gdXNlIG9mIHRoZSBQcm9ncmFtIGFjY29yZGluZyB0byBhY2FkZW1pYyAKK3RyYWRpdGlvbi4KKworNC4gWU9VIGFja25vd2xlZGdlIHRoYXQgdGl0bGUgdG8gdGhlIFByb2dyYW0gKGluY2x1ZGluZyBjb3B5cmlnaHQpIAord2lsbCByZW1haW4gd2l0aCBXSElURUhFQUQgYW5kIE0uSS5ULiBhbmQgdGhhdCBhbnkgY29waWVzIG9mIHRoZSAKK1Byb2dyYW0gb3IgcG9ydGlvbnMgb2YgdGhlIFByb2dyYW0gbWFkZSBieSBZT1Ugc2hhbGwgaW5jbHVkZSAKK1dISVRFSEVBRCBhbmQgTS5JLlQuIGNvcHlyaWdodCBub3RpY2VzIGluIHRoZSBzYW1lIGZvcm1hdCBhbmQgCitsb2NhdGlvbiBhcyB0aGUgY29weSByZWNlaXZlZCBieSBZT1UgdW5kZXIgdGhpcyBhZ3JlZW1lbnQuCisKKzUuIFlPVSBhY2NlcHQgdGhlIGFib3ZlIG1hdGVyaWFscyBvbiBhbiAiQVMgSVMiIGJhc2lzLiBNLkkuVC4gYW5kIAorV0hJVEVIRUFEIGFyZSB1bmRlciBubyBvYmxpZ2F0aW9uIHRvIGxvYWQgdGhlIFByb2dyYW0gb250byBZT1VSIAorbWFjaGluZXMsIHRlc3QgZm9yIHByb3BlciBvcGVyYXRpb24sIHBlcmZvcm0gYW55IGRlYnVnZ2luZywgbWFrZSBhbnkgCitjb3JyZWN0aW9ucywgcHJvdmlkZSBtYWludGVuYW5jZSwgcHJvdmlkZSBhbnkgdXBkYXRlcywgb3IgYXNzaXN0IGluIAordGhlIHVuZGVyc3RhbmRpbmcgb3IgdXNlIG9mIHRoZSBQcm9ncmFtLiAgVGhlIFByb2dyYW0gaXMgYSByZXNlYXJjaCAKK3Byb2dyYW0sIGFuZCBNLkkuVC4gYW5kIFdISVRFSEVBRCBkbyBub3QgcmVwcmVzZW50IHRoYXQgaXQgaXMgZnJlZSAKK29mIGVycm9ycyBvciBidWdzIG9yIHN1aXRhYmxlIGZvciBhbnkgcGFydGljdWxhciB0YXNrcy4KKworNi4gWU9VIEFHUkVFIFRIQVQgVEhFIFJJR0hUUyBHUkFOVEVEIEhFUkVVTkRFUiBBUkUgTUFERSBBVkFJTEFCTEUgCitXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgCitOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyAKK0ZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5EIEZVUlRIRVIgSU5DTFVESU5HIE5PIFdBUlJBTlRZIEFTIFRPIAorQ09ORk9STUlUWSBXSVRIIFdIQVRFVkVSIFVTRVIgTUFOVUFMUyBPUiBPVEhFUiBMSVRFUkFUVVJFIE1BWSBCRSAKK0lTU1VFRCBGUk9NIFRJTUUgVE8gVElNRS4gIE5PVEhJTkcgSU4gVEhJUyBBR1JFRU1FTlQgU0hBTEwgQkUgCitDT05TVFJVRUQgQVMgQSBSRVBSRVNFTlRBVElPTiBNQURFIE9SIFdBUlJBTlRZIEdJVkVOIEJZIE0uSS5ULiBPUiAKK1dISVRFSEVBRCBUSEFUIFRIRSBQUkFDVElDRSBCWSBZT1UgT0YgVEhFIExJQ0VOU0UgR1JBTlRFRCBIRVJFVU5ERVIgCitTSEFMTCBOT1QgSU5GUklOR0UgVEhFIFBBVEVOVCBSSUdIVFMsIENPUFlSSUdIVFMsIE9SIE9USEVSIAorSU5URUxMRUNUVUFMIFBST1BFUlRZIFJJR0hUUyBPRiBNLkkuVC4sIFdISVRFSEVBRCwgT1IgQU5ZIFRISVJEIAorUEFSVFkuCisKK0lOIE5PIEVWRU5UIFNIQUxMIE0uSS5ULiwgV0hJVEVIRUFELCBPUiBUSEVJUiBSRVNQRUNUSVZFIFRSVVNURUVTLCAKK0RJUkVDVE9SUywgT0ZGSUNFUlMsIEVNUExPWUVFUywgQUdFTlRTIEFORCBBU1NPQ0lBVEVTIEJFIExJQUJMRSBGT1IgCitJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgS0lORCwgSU5DTFVESU5HIEVDT05PTUlDIAorREFNQUdFIE9SIElOSlVSWSBUTyBQUk9QRVJUWSBBTkQgTE9TVCBQUk9GSVRTLCBSRUdBUkRMRVNTIE9GIFdIRVRIRVIgCitNLkkuVC4gT1IgV0hJVEVIRUFEIFNIQUxMIEJFIEFEVklTRUQsIFNIQUxMIEhBVkUgT1RIRVIgUkVBU09OIFRPIAorS05PVywgT1IgSU4gRkFDVCBTSEFMTCBLTk9XIE9GIFRIRSBQT1NTSUJJTElUWS4KKworNy4gVG8gdGhlIGV4dGVudCBhbGxvd2VkIGJ5IGxhdywgWU9VIHNoYWxsIGF0IGFsbCB0aW1lcyBkdXJpbmcgdGhlIAordGVybSBvZiB0aGlzIEFncmVlbWVudCBhbmQgdGhlcmVhZnRlciwgaW5kZW1uaWZ5LCBkZWZlbmQgYW5kIGhvbGQgCitoYXJtbGVzcyBNLkkuVC4sIFdISVRFSEVBRCwgYW5kIHRoZWlyIHJlc3BlY3RpdmUgdHJ1c3RlZXMsIAorZGlyZWN0b3JzLCBvZmZpY2VycywgZW1wbG95ZWVzLCBhZ2VudHMgYW5kIGFmZmlsaWF0ZXMsIGFnYWluc3QgYWxsIAorY2xhaW1zLCBwcm9jZWVkaW5ncywgZGVtYW5kcywgYW5kIGxpYWJpbGl0aWVzIG9mIGFueSBraW5kIAord2hhdHNvZXZlciwgaW5jbHVkaW5nIGxlZ2FsIGV4cGVuc2VzIGFuZCByZWFzb25hYmxlIGF0dG9ybmV5cyBmZWVzLCAKK2FyaXNpbmcgb3V0IG9mLCBjb25uZWN0ZWQgd2l0aCwgcmVzdWx0aW5nIGZyb20gb3Igc3VzdGFpbmVkIGFzIGEgCityZXN1bHQgb2YgdXNlIG9mIHRoZSBQcm9ncmFtIGJ5IFlPVS4gIEluIG5vIGV2ZW50IHNoYWxsIE0uSS5ULiBvciAKK1dISVRFSEVBRCBiZSBsaWFibGUgZm9yIHNwZWNpYWwsIGRpcmVjdCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCAKK2RhbWFnZXMsIGxvc3NlcywgY29zdHMsIGNoYXJnZXMsIGNsYWltcywgZGVtYW5kcywgZmVlcywgb3IgZXhwZW5zZXMgCitvZiBhbnkgbmF0dXJlIG9yIGtpbmQuCisKKzguIFRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGNvbnN0cnVlZCwgZ292ZXJuZWQsIGludGVycHJldGVkLCBhbmQgCithcHBsaWVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgbGF3cyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIAorTWFzc2FjaHVzZXR0cywgVS5TLkEuCisKKzkuIFRoZSB0ZXJtIG9mIHRoaXMgQWdyZWVtZW50IGlzIG9uZSB5ZWFyICh0aGUgIlRlcm0iKS4gIEF0IHRoZSBlbmQgCitvZiB0aGUgVGVybSwgdGhlIEFncmVlbWVudCBzaGFsbCBiZSBhdXRvbWF0aWNhbGx5IHJlbmV3ZWQgdW5kZXIgdGhlIAorc2FtZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyB1bmxlc3MgTS5JLlQuIGluZGljYXRlcyBvdGhlcndpc2UuICBNLkkuVC4gCitzaGFsbCBoYXZlIHRoZSByaWdodCB0byB0ZXJtaW5hdGUgdGhpcyBBZ3JlZW1lbnQgZm9yIGFueSByZWFzb24gYnkgCitnaXZpbmcgdGhpcnR5ICgzMCkgZGF5cyB3cml0dGVuIG5vdGljZSB0byBZT1UuICBVcG9uIHRlcm1pbmF0aW9uIGZvciAKK2FueSByZWFzb24sIFlPVSBhZ3JlZSB0byBkZXN0cm95IHRoZSBvcmlnaW5hbCBhbmQgYWxsIGNvcGllcywgCitpbmNsdWRpbmcgcGFydGlhbCBjb3BpZXMsIG9mIHRoZSBQcm9ncmFtLgorCisxMC4gVGhlIHBhcnRpZXMgYWdyZWUgdGhhdCB0aGlzIEFncmVlbWVudCBpcyB0aGUgZW50aXJlIEFncmVlbWVudCwgCithbmQgc2hhbGwgbm90IGJlIHN1YmplY3QgdG8gYW55IGNoYW5nZSBvciBtb2RpZmljYXRpb24gZXhjZXB0IGluIAord3JpdGluZyBieSBib3RoIHBhcnRpZXMuCisKKzExLiBUaGUgcHJvdmlzaW9ucyBvZiB0aGlzIEFncmVlbWVudCBhcmUgc2V2ZXJhYmxlLCBhbmQgaWYgYW55IAorcHJvdmlzaW9ucyBvZiB0aGlzIEFncmVlbWVudCBhcmUgZGV0ZXJtaW5lZCB0byBiZSBpbnZhbGlkIG9yIAordW5lbmZvcmNlYWJsZSwgc3VjaCBkZXRlcm1pbmF0aW9uIHNoYWxsIG5vdCBpbiBhbnkgd2F5IGFmZmVjdCB0aGUgCit2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluaW5nIHByb3Zpc2lvbnMuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9YQW5pbSBiL2xpY2Vuc2VzL1hBbmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NWYxZjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9YQW5pbQpAQCAtMCwwICsxLDEwIEBACitYQW5pbSBDb3B5cmlnaHQgKEMpIDE5OTAtMTk5OSBieSBNYXJrIFBvZGxpcGVjLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAKK1RoaXMgc29mdHdhcmUgbWF5IGJlIGZyZWVseSB1c2VkLCBjb3BpZWQgYW5kIHJlZGlzdHJpYnV0ZWQgd2l0aG91dCBmZWUKK2ZvciBub24tY29tbWVyaWNhbCBwdXJwb3NlcyBwcm92aWRlZCB0aGF0IHRoaXMgY29weXJpZ2h0IG5vdGljZSBpcworcHJlc2VydmVkIGludGFjdCBvbiBhbGwgY29waWVzLgorIAorVGhlcmUgaXMgbm8gd2FycmFudHkgb3Igb3RoZXIgZ3VhcmFudGVlIG9mIGZpdG5lc3Mgb2YgdGhpcyBzb2Z0d2FyZS4KK0l0IGlzIHByb3ZpZGVkIHNvbGVseSAiYXMgaXMiLiBUaGUgYXV0aG9yKHMpIGRpc2NsYWltKHMpIGFsbAorcmVzcG9uc2liaWxpdHkgYW5kIGxpYWJpbGl0eSB3aXRoIHJlc3BlY3QgdG8gdGhpcyBzb2Z0d2FyZSdzIHVzYWdlIGFuZAoraXRzIGVmZmVjdCB1cG9uIGhhcmR3YXJlIG9yIGNvbXB1dGVyIHN5c3RlbXMuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9YQ0lOIGIvbGljZW5zZXMvWENJTgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NzUxYmQzCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvWENJTgpAQCAtMCwwICsxLDc3IEBACisKKwkJCSAgICAgIFhDSU4g54mI5qyK5a6j5ZGKCisKKworWENJTiDmmK/kuIDlgIvoh6rnlLHou5/pq5TvvIzljIXlkKvkuLvnqIvlvI/oiIflpJbkvobnqIvlvI/norzlhanpg6jliIbjgILkuLvnqIvlvI/pg6jliIbkuLvopoHnlLEgWENJTgor5bCP57WE5omA5pKw5a+r6IiH57at6K2377yM5oKo5Y+v5Lul5ZyoIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlICjoq4voposgQ09QWUlORyDkuIDmlocpCivnmoTopo/nr4TkuIvmlaPkvYjjgIHkv67mlLnjgIHkvb/nlKggWENJTiDkuLvnqIvlvI/ljp/lp4vnorzjgILoh7PmlrzlpJbkvobnqIvlvI/norzpg6jliIbvvIzlhbbljp/lp4vkvZzogIUKK+S4pumdniBYQ0lOIOWwj+e1hO+8jOmAmeS6m+eoi+W8j+eivOaYr+ebtOaOpeW8leeUqOiHquWFtuS7lueahOiHqueUsei7n+mrlOWll+S7tu+8jOe2k+mBjuS/ruaUueW+jOS7pemBqeWQiAorWENJTiDkvb/nlKjjgILlroPlgJHlkIToh6rmnInoh6rlt7HnmoTniYjmrIrlrqPlkYrvvIzkuJTlhbbniYjmrIrlrqPlkYrlhaflrrnkuqblkIzmhI/oiIcgWENJTiDkuLvnqIvlvI8KK+eivOS4gOWQjOaVo+S9iOiIh+S9v+eUqOOAguaVheWmguaenOaCqOaDs+imgeWQhOWIpeaVo+S9iOOAgeS/ruaUueOAgeS9v+eUqOmAmeS6m+WkluS+hueoi+W8j+eivOeahOipse+8jOiri+aCqAor6Ieq6KGM5LiL6LyJ5a6D5YCR55qE5Y6f5aeL54mI5pys77yM5Lim6YG154Wn5YW25Y6f5pyJ55qE54mI5qyK5a6j5ZGK6IiH6KaP56+E44CC6YCZ6aGe5aSW5L6G56iL5byP56K85YyF5ousOgorCisxLiBJTWRraXQ6IChmdHA6Ly94Y2luLmxpbnV4Lm9yZy50dy9wdWIveGNpbi9taXNjL0lNZGtpdC50YXIuZ3opCisgICBhLiBzcmMvbGliL0lNZGtpdC8g5Y+K5YW25bqV5LiL5omA5pyJ5qqU5qGI44CCCisgICBiLiBzcmMveGltX0lDLmM6IOebtOaOpeS/ruaUueiHqiBJTWRraXQg55qE56+E5L6L56iL5byP44CCCisgICBjLiBzcmMvaW5jbHVkZS9JQy5oOiDnm7TmjqXkv67mlLnoh6ogSU1ka2l0IOeahOevhOS+i+eoi+W8j+OAggorCisyLiBzaW9kOiAoaHR0cDovL3Blb3BsZS5kZWxwaGkuY29tL2dqYy9zaW9kLmh0bWwsCisJICBmdHA6Ly94Y2luLmxpbnV4Lm9yZy50dy9wdWIveGNpbi9taXNjL3Npb2QudGFyLmd6KQorICAgc3JjL2xpYi9zaW9kLyDlj4rlhbblupXkuIvmiYDmnInmqpTmoYjjgIIKKwor6ICM6Zmk5LqG5LiK6L+w55qE5aSW5L6G56iL5byP56K85Lul5aSW6ICF77yM5Z2H5bGsIFhDSU4g5Li756iL5byP56K844CCCisKK+WPpuWklu+8jCBzcmMvaW5jbHVkZS9tb2R1bGUuaCDoiIcgc3JjL2luY2x1ZGUveGNpbnRvb2wuaCDlrprnvqnkuoYgWENJTiDnmoTovLjlhaXms5UKK+aooee1hOiIh+ebuOmXnOW3peWFt+WHveW8j+eahOa6nemAmuS7i+mdouiIh+izh+aWmee1kOani++8jOWug+WAkemZpOS6huWPr+S7peWcqCBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2Ug55qE6KaP56+E5LiL5pWj5L2I44CB5L+u5pS544CB5L2/55So5Lul5aSW77yM5aaC5p6c5oKo6aGY5oSP54K6IFhDSU4g5pKw5a+r5paw55qE6Ly45YWl5rOV5qih57WE77yMCivmgqjlj6/ku6Xku6Xku7vkvZXlvaLlvI/oh6rnlLHlvJXnlKjpgJnlhanlgIvmqpTnmoTlhaflrrnvvIzogIzkuI3mnIPlvbHpn7/mgqjnmoTnqIvlvI/ljp/mnInnmoTniYjmrIrlrqPlkYrjgIIKK+ips+imi+Wug+WAkemWi+mgreeahOeJiOasiuiBsuaYjuOAggorCivmiJHlgJHluIzmnJsgWENJTiDnmoTmlaPkvYjvvIzog73kvb/lroPmiJDngrrmnInnlKjnmoTnqIvlvI/vvIzkvYbmspLmnInku7vkvZXkv53orYnvvIzlpoLmnpzmgqjkuI3lubjlm6DngroKK+S9v+eUqCBYQ0lOIOmAoOaIkOS7u+S9leW9ouW8j+eahOaQjeWkse+8jOaIkeWAkeS4jeiyoOS7u+S9leazleW+i+iyrOS7u+OAguebuOmXnOeahOaineaWh+e0sOevgO+8jOiri+aCqOWPgwor6ICDIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBDT1BZSU5HIOS4gOaWh+eahOWFp+WuueOAggorCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICAgQ29weXJpZ2h0IChDKSAxOTk5IFhDSU4gVGVhbSwgVGFpd2FuCisKK1hDSU4gaXMgYSBmcmVlIHNvZnR3YXJlLiBJdCBjb250YWlucyB0aGUgIm1haW4gcHJvZ3JhbSIgYW5kIHRoZSAiZXh0ZXJuYWwKK3NvdXJjZSIgcGFydHMuIFRoZSAibWFpbiBwcm9ncmFtIiBwYXJ0IGlzIG1haW5seSBtYWludGFpbmVkIGJ5IHRoZSBYQ0lOCitUZWFtLiBZb3UgY2FuIHJlZGlzdHJpYnV0ZSwgbW9kaWZ5LCBhbmQgdXNlIHRoZSBzb3VyY2UgY29kZSBvZiBYQ0lOICJtYWluCitwcm9ncmFtIiBwYXJ0IHVuZGVyIHRoZSBndWlkZWxpbmUgb2YgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKHNlZSB0aGUKK2RvY3VtZW50IENPUFlJTkcgZm9yIGRldGFpbHMpLiBGb3IgdGhlICJleHRlcm5hbCBzb3VyY2UiIHBhcnQsIGl0IGlzIG5vdAorb3JpZ2luYWxseSB3cml0dGVuIGJ5IHRoZSBYQ0lOIFRlYW0uIFRoZXNlIHNvdXJjZSBjb2RlcyBhcmUgYWRvcHRlZCBkaXJlY3RseQorZnJvbSBvdGhlciBmcmVlIChGcmVlZG9tKSBzb2Z0d2FyZSBwYWNrYWdlcyBhbmQgYXJlIG1vZGlmaWVkIHN1Y2ggdGhhdCB0aGV5CithcmUgc3VpdGFibGUgZm9yIFhDSU4gdXNhZ2UuIFRoZXkgaGF2ZSB0aGVpciBvd24gbGljZW5zZSBhbmQgY29weXJpZ2h0LCBhbmQKK3RoZWlyIGxpY2Vuc2UgYW5ub3VuY2VtZW50cyBhbHNvIHBlcm1pdCB0byBiZSByZWRpc3RyaWJ1dGVkIGFuZCB1c2VkIHdpdGgKK3RoZSBYQ0lOICJtYWluIHByb2dyYW0iLiBIZW5jZSBpZiB5b3Ugd2FudCB0byByZWRpc3RyaWJ1dGUsIG1vZGlmeSwgb3IgdXNlCit0aGVzZSAiZXh0ZXJuYWwgc291cmNlIiByZXNwZWN0aXZlbHksIHBsZWFzZSBkb3dubG9hZCB0aGVpciBvcmlnaW5hbCB2ZXJzaW9ucworYW5kIGZvbGxvdyB0aGVpciBvcmlnaW5hbCBsaWNlbnNlIGFubm91bmNlbWVudCBhbmQgZ3VpZGVsaW5lLiBUaGVzZSAiZXh0ZXJuYWwKK3NvdXJjZSIgaW5jbHVkZXMKKworMS4gSU1ka2l0OiAoZnRwOi8veGNpbi5saW51eC5vcmcudHcvcHViL3hjaW4vbWlzYy9JTWRraXQudGFyLmd6KQorICAgYS4gc3JjL2xpYi9JTWRraXQvIGFuZCBhbGwgdGhlIGZpbGVzIGFuZCBkaXJlY3RvcmllcyBiZWxvdy4KKyAgIGIuIHNyYy94aW1fSUMuYzogd2hpY2ggaXMgbW9kaWZpZWQgZnJvbSB0aGUgSU1ka2l0IGV4YW1wbGUgcHJvZ3JhbS4KKyAgIGMuIHNyYy9pbmNsdWRlL0lDLmg6IHdoaWNoIGlzIG1vZGlmaWVkIGZyb20gdGhlIElNZGtpdCBleGFtcGxlIHByb2dyYW0uCisKKzIuIHNpb2Q6IChodHRwOi8vcGVvcGxlLmRlbHBoaS5jb20vZ2pjL3Npb2QuaHRtbCwKKyAgICAgICAgICBmdHA6Ly94Y2luLmxpbnV4Lm9yZy50dy9wdWIveGNpbi9taXNjL3Npb2QudGFyLmd6KQorICAgc3JjL2xpYi9zaW9kLyBhbmQgYWxsIHRoZSBmaWxlcyBhbmQgZGlyZWN0b3JpZXMgYmVsb3cuCisKK0Jlc2lkZXMgdGhlICJleHRlcm5hbCBzb3VyY2UiIG1lbnRpb25lZCBhYm92ZSwgYWxsIHRoZSBvdGhlcnMgYXJlIGJlbG9uZwordGhlIFhDSU4gIm1haW4gcHJvZ3JhbSIuCisKK0Jlc2lkZXMsIHRoZSB0d28gaGVhZGVyIGZpbGVzIHNyYy9pbmNsdWRlL21vZHVsZS5oIGFuZCBzcmMvaW5jbHVkZS94Y2ludG9vbC5oCitkZWZpbmUgdGhlIGludGVyZmFjZSBhbmQgZGF0YSBzdHJ1Y3RlcnMgb2YgSU0gKElucHV0IE1ldGhvZCkgbW9kdWxlIG9mIFhDSU4KK2FuZCBzb21lIG90aGVyIHJlbGF0ZWQgdG9vbCBmdW5jdGlvbnMuIFRoZXkgY2FuIGJlIHJlZGlzdHJpYnV0ZWQsIG1vZGlmaWVkLAorYW5kIHVzZWQgdW5kZXIgdGhlIHRlcm1zIG9mIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCBhbmQgaW4gYWRkaXRpb24gaWYKK3lvdSB3YW50IHRvIHdyaXRlIG5ldyBJTSBtb2R1bGVzIGZvciBYQ0lOLCB5b3UgY2FuIGZyZWVseSBhZG9wdCB0aGUgY29udGVudHMKK29mIHRoZSB0d28gZmlsZXMgaW4gYW55IGZvcm0sIGFuZCB0aGUgYWRvcHRpb24gd2lsbCBub3QgYWZmZWN0IHRoZSBvcmlnaW5hbAorbGljZW5zZSB0ZXJtcyBvZiB5b3VyIHByb2dyYW0uIFBsZWFzZSBzZWUgdGhlIGxpY2Vuc2Ugbm90ZXMgaW4gdGhlIGhlYWQgb2YKK3RoZW0gZm9yIGRldGFpbHMuCisKK1hDSU4gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCitXQVJSQU5UWS4gSWYgdW5mb3J0cmFuYXRseSB5b3UgZ2V0IGFueSBsb3NzIGJ5IHVzaW5nIFhDSU4sIHdlIHdpbGwgbm90Cit0YWtlIGFueSByZXNwb25zYWJpbGl0eSBpbiBsYXcuIEZvciBkZXRhaWxlZCBndWlkZWxpbmUsIHBsZWFzZSBjaGVjayB0aGUKK0dOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB0aGUgZG9jdW1lbnQgIkNPUFlJTkciLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvWEVwaGVtIGIvbGljZW5zZXMvWEVwaGVtCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0MmZiMzgKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9YRXBoZW0KQEAgLTAsMCArMSwzMyBAQAorWEVwaGVtIFZlcnNpb24gMy43LjUKK0NvcHlyaWdodCAoYykgMTE5MC0yMDExIGJ5IEVsd29vZCBDaGFybGVzIERvd25leQorCitQZXJtaXNzaW9uIHRvIGJ1aWxkIGFuZCBydW4gWEVwaGVtIGZyb20gdGhpcyBzb3VyY2UgY29kZSBpcyBncmFudGVkIG9ubHkgZm9yCitwZXJzb25hbCB1c2Ugb3IgZm9yIGJvbmEgZmlkZSBlZHVjYXRpb25hbCBzaXR1YXRpb25zIG9yIHJlc2VhcmNoIGZ1bmRlZCBieQorcHVibGljIGZ1bmRzLiBQZXJtaXNzaW9uIGlzIGV4cHJlc3NseSBwcm9oaWJpdGVkIGluIGNvbW1lcmNpYWwgb3IgbWlsaXRhcnkKK3NpdHVhdGlvbnMgd2l0aG91dCBwcmlvciBhZ3JlZW1lbnQuCisKK1hFcGhlbSBzb3VyY2UgY29kZSBtYXkgbm90IGJlIHVzZWQsIGluIHdob2xlIG9yIGluIHBhcnQsIHRvIGJ1aWxkIG90aGVyCitjb21wdXRlciBwcm9ncmFtcyB1bmRlciBhbnkgY2lyY3Vtc3RhbmNlcyB3aXRob3V0IHByaW9yIGFncmVlbWVudC4KKworUmVkaXN0cmlidXRpb24gcmlnaHRzOiBZb3UgbWF5IHJlZGlzdHJpYnV0ZSBYRXBoZW0gc291cmNlIGNvZGUgb25seSBpbiBpdHMKK2VudGlyZXR5IGFuZCB3aXRob3V0IG1vZGlmaWNhdGlvbi4gWW91IG1heSByZWRpc3RyaWJ1dGUgYmluYXJpZXMgb25seSBpZiB0aGV5Cit3ZXJlIGJ1aWx0IGZyb20gdGhlIG9yaWdpbmFsIHNvdXJjZSBjb2RlLCBvciBmcm9tIHNvdXJjZSBjb2RlIHdpdGggdmVyeSBtaW5vcgorY2hhbmdlcyBtYWRlIGZvciB0aGUgcHVycG9zZSBvZiBwb3J0aW5nIGFuZCBub3QgZm9yIHRoZSBwdXJwb3NlcyBvZiBjaGFuZ2luZworZnVuY3Rpb25hbGl0eS4KKworWEVwaGVtIG91dHB1dCBwcm9kdWN0cyBtYXkgYmUgdXNlZCB3aXRob3V0IHJlc3RyaWN0aW9uIGFzIGxvbmcgYXMgdGhleSBhcmUKK2FjY29tcGFuaWVkIGJ5IHRoZSBmb2xsb3dpbmcgcmVmZXJlbmNlOgorCisgICAgIkNyZWF0ZWQgYnkgWEVwaGVtLCBmb3IgbW9yZSBpbmZvcm1hdGlvbiBnbyB0byBodHRwOi8vd3d3LnhlcGhlbS5jb20iCisKK0Z1cnRoZXJtb3JlOgorCisJVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMICBXQVJSQU5USUVTICBXSVRIICBSRUdBUkQgIFRPICBUSElTCisJU09GVFdBUkUsICBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUwtCisJSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisJQU5ZICBTUEVDSUFMLCAgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU0tCisJQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsCisJV0hFVEhFUiAgSU4gIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1ItCisJVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggIFRIRSAgVVNFCisJT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvWE1BTUUgYi9saWNlbnNlcy9YTUFNRQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDM5OGUyCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvWE1BTUUKQEAgLTAsMCArMSwyOSBAQAorUmVkaXN0cmlidXRpb24gYW5kIHVzZSBvZiB0aGlzIGNvZGUgb3IgYW55IGRlcml2YXRpdmUgd29ya3MgYXJlIHBlcm1pdHRlZAorcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworKiBSZWRpc3RyaWJ1dGlvbnMgbWF5IG5vdCBiZSBzb2xkLCBub3IgbWF5IHRoZXkgYmUgdXNlZCBpbiBhIGNvbW1lcmNpYWwKK3Byb2R1Y3Qgb3IgYWN0aXZpdHkuCisKKyogUmVkaXN0cmlidXRpb25zIHRoYXQgYXJlIG1vZGlmaWVkIGZyb20gdGhlIG9yaWdpbmFsIHNvdXJjZSBtdXN0IGluY2x1ZGUgdGhlCitjb21wbGV0ZSBzb3VyY2UgY29kZSwgaW5jbHVkaW5nIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIGNvbXBvbmVudHMgdXNlZCBieSBhCitiaW5hcnkgYnVpbHQgZnJvbSB0aGUgbW9kaWZpZWQgc291cmNlcy4gSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlCitzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgaXMgbm9ybWFsbHkgZGlzdHJpYnV0ZWQKKyhpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeSBmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwga2VybmVsLAorYW5kIHNvIG9uKSBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdAorY29tcG9uZW50IGl0c2VsZiBhY2NvbXBhbmllcyB0aGUgZXhlY3V0YWJsZS4KKworKiBSZWRpc3RyaWJ1dGlvbnMgbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZgorY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlcgorbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCitBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFCitMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCitJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKK0FSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL1hkZWJ1ZyBiL2xpY2Vuc2VzL1hkZWJ1ZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjdlZGQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvWGRlYnVnCkBAIC0wLDAgKzEsNjEgQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIAorICAgICAgICAgICAgICAgICAgVGhlIFhkZWJ1ZyBMaWNlbnNlLCB2ZXJzaW9uIDEuMAorICAgICAgICAgICAgIChCYXNlZCBvbiAiVGhlIFBIUCBMaWNlbnNlIiwgdmVyc2lvbiAzLjApCisgICAgQ29weXJpZ2h0IChjKSAyMDAyLCAyMDAzIERlcmljayBSZXRoYW5zLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBpcyBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisKKyAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorIAorICAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAgICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICAgICBkaXN0cmlidXRpb24uCisgCisgIDMuIFRoZSBuYW1lICJYZGVidWciIG11c3Qgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisJIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3IKKwkgd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCB4ZGVidWdAZGVyaWNrcmV0aGFucy5ubC4KKyAgCisgIDQuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJYZGVidWciLCBub3IKKyAgICAgbWF5ICJYZGVidWciIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbgorCSBmcm9tIHhkZWJ1Z0BkZXJpY2tyZXRoYW5zLm5sLgorIAorICA1LiBEZXJpY2sgUmV0aGFucyBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlCisJIGxpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEKKwkgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuICBPbmNlIGNvdmVyZWQgY29kZSBoYXMgYmVlbgorCSBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UsIHlvdSBtYXkKKwkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCB2ZXJzaW9uLiBZb3UKKwkgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSBzdWNoIGNvdmVyZWQgY29kZSB1bmRlciB0aGUgdGVybXMgb2YgYW55CisJIHN1YnNlcXVlbnQgdmVyc2lvbiBvZiB0aGUgbGljZW5zZSBwdWJsaXNoZWQgYnkgRGVyaWNrIFJldGhhbnMuIE5vCisJIG9uZSBvdGhlciB0aGFuIERlcmljayBSZXRoYW5zIGhhcyB0aGUgcmlnaHQgdG8gbW9kaWZ5IHRoZSB0ZXJtcworCSBhcHBsaWNhYmxlIHRvIGNvdmVyZWQgY29kZSBjcmVhdGVkIHVuZGVyIHRoaXMgTGljZW5zZS4KKworICA2LiBSZWRpc3RyaWJ1dGlvbnMgb2YgYW55IGZvcm0gd2hhdHNvZXZlciBtdXN0IHJldGFpbiB0aGUgZm9sbG93aW5nCisJIGFja25vd2xlZGdtZW50OiAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIFhkZWJ1ZywgZnJlZWx5IGF2YWlsYWJsZQorCSBmcm9tIDxodHRwOi8veGRlYnVnLmRlcmlja3JldGhhbnMubmwvPiIuCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgREVSSUNLIFJFVEhBTlMgYGBBUyBJUycnIEFORCBBTlkKK0VYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBQSFAgREVWRUxPUE1FTlQgVEVBTSBPUgorSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCitEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKK1RIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCisKK1RoaXMgc29mdHdhcmUgY29uc2lzdHMgb2Ygdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSBieSBzb21lCitpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgRGVyaWNrIFJldGhhbnMuCisKK0RlcmljayBSZXRoYW5zIGNhbiBiZSBjb250YWN0ZWQgdmlhIGUtbWFpbCBhdCB4ZGVidWdAZGVyaWNrcmV0aGFucy5ubC4KKworRm9yIG1vcmUgaW5mb3JtYXRpb24gWGRlYnVnLCBwbGVhc2Ugc2VlCis8aHR0cDovL3hkZWJ1Zy5kZXJpY2tyZXRoYW5zLm5sPi4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL1hpbWlhbi1sb2dvcyBiL2xpY2Vuc2VzL1hpbWlhbi1sb2dvcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNzE2NGE4Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvWGltaWFuLWxvZ29zCkBAIC0wLDAgKzEsNjcgQEAKKwkJCSBYaW1pYW4gTG9nbyBMaWNlbnNlCisJCQkgICAgIFZlcnNpb24gMS4wCisKK0NvcHlyaWdodCAyMDAxIFhpbWlhbiwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFhpbWlhbiBhbmQgdGhlCitYaW1pYW4gbG9nbyAodGhlICJYaW1pYW4gTG9nbyIpIGFyZSB0cmFkZW1hcmtzIG9mIFhpbWlhbiwgSW5jLgorCitYaW1pYW4sIEluYy4gY3JlYXRlcyBhbmQgZGlzdHJpYnV0ZXMgY2VydGFpbiBzb2Z0d2FyZSAodGhlICJYaW1pYW4KK1B1YmxpYyBTb2Z0d2FyZSIpIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgdGhlIEdOVSBMZXNzZXIKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UsIG9yIG90aGVyIHNpbWlsYXIgc28tY2FsbGVkICJvcGVuIHNvdXJjZSIKK2xpY2Vuc2VzIChjb2xsZWN0aXZlbHksIHRoZSAiUHVibGljIExpY2Vuc2VzLCIgYW5kIGVhY2ggYSAiUHVibGljCitMaWNlbnNlIikuICBJbiBzb21lIGNhc2VzLCBYaW1pYW4sIEluYy4gZGlzdHJpYnV0ZXMgdGhlIFhpbWlhbiBQdWJsaWMKK1NvZnR3YXJlIHdpdGggZmlsZXMgdGhhdCBpbmNsdWRlIHRoZSBYaW1pYW4gTG9nbyAodGhlICJYaW1pYW4gTG9nbworRmlsZXMiKS4gIFRoZSBYaW1pYW4gTG9nbyBGaWxlcyBhcmUgc2VwYXJhdGUgYW5kIGluZGVwZW5kZW50IGZyb20gdGhlCitYaW1pYW4gUHVibGljIFNvZnR3YXJlIGFuZCBhcmUgdW5yZWxhdGVkIHRvIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZQorWGltaWFuIFB1YmxpYyBTb2Z0d2FyZS4gIFRoZSBYaW1pYW4gTG9nbyBGaWxlcyBhcmUgbmV2ZXIgZGlzdHJpYnV0ZWQKK3VuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgUHVibGljIExpY2Vuc2UuICBUaGUgWGltaWFuIExvZ28gRmlsZXMgYW5kCitYaW1pYW4gTG9nbyBtYXkgb25seSBiZSB1c2VkIGFuZCBkaXN0cmlidXRlZCBwdXJzdWFudCB0byB0aGUgdGVybXMgb2YKK3RoaXMgbGljZW5zZS4KKworWGltaWFuLCBJbmMuIGdyYW50cyB5b3UgdGhlIG5vbi1leGNsdXNpdmUsIGxpbWl0ZWQgbGljZW5zZSAodGhlCisiTGljZW5zZSIpIHRvIHVzZSwgY29weSwgYW5kIHJlZGlzdHJpYnV0ZSB0aGUgWGltaWFuIExvZ28gRmlsZXMgYW5kCitYaW1pYW4gTG9nbywgYnV0IG9ubHkgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgcGVybWl0dGVkIHVzZSwgY29weWluZywKK29yIHJlZGlzdHJpYnV0aW9uIG9mIGFuIG9mZmljaWFsIHVubW9kaWZpZWQgcmVsZWFzZSBvZiBYaW1pYW4gUHVibGljCitTb2Z0d2FyZSB0aGF0IGNhbGxzIHVwb24gdGhlIFhpbWlhbiBMb2dvIEZpbGVzIGR1cmluZyB0aGUgbm9ybWFsCitjb3Vyc2Ugb2Ygb3BlcmF0aW9uIGFuZCBwcm92aWRlZCB0aGF0OgorCisgICAgMS4gWW91IGluY2x1ZGUgdGhpcyBub3RpY2UgYW5kIGxpY2Vuc2Ugd2l0aCBlYWNoIGNvcHkgb2YgdGhlCisgICAgICAgWGltaWFuIExvZ28gRmlsZXMgdGhhdCB5b3UgbWFrZSBvciBkaXN0cmlidXRlLCBhbmQgZG8gbm90CisgICAgICAgYWx0ZXIsIGRlbGV0ZSwgb3IgbW9kaWZ5IGl0IGluIGFueSB3YXk7CisKKyAgICAyLiBZb3UgZG8gbm90IG1vZGlmeSB0aGUgWGltaWFuIExvZ28gRmlsZXMgb3IgdGhlIFhpbWlhbiBMb2dvIG9yCisgICAgICAgaXRzIGFwcGVhcmFuY2UgaW4gYW55IG1hbm5lciBvciB1c2UgYW55IGNvbmZ1c2luZ2x5IHNpbWlsYXIKKyAgICAgICBtYXJrOworCisgICAgMy4gWW91IGRvIG5vdCB1c2UgdGhlIFhpbWlhbiBMb2dvIEZpbGVzIG9yIFhpbWlhbiBMb2dvIGFzLCBvciBhcworICAgICAgIHBhcnQgb2YsIGEgdHJhZGVtYXJrLCB0cmFkZSBuYW1lLCBvciB0cmFkZSBpZGVudGlmaWVyIG9mIGFueQorICAgICAgIHBlcnNvbiBvdGhlciB0aGFuIFhpbWlhbiwgSW5jLiBvciBpbiBhbnkgb3RoZXIgZmFzaGlvbiBleGNlcHQKKyAgICAgICBhcyBzZXQgZm9ydGggaW4gdGhpcyBsaWNlbnNlOworCisgICAgNC4gWW91IG9ubHkgdXNlLCBjb3B5LCBvciBkaXN0cmlidXRlIHRoZSBYaW1pYW4gTG9nbyBGaWxlcyBvcgorICAgICAgIFhpbWlhbiBMb2dvIGluIGNvbmp1bmN0aW9uIHdpdGggYW4gdW5tb2RpZmllZCBvZmZpY2lhbCByZWxlYXNlCisgICAgICAgb2YgdGhlIFhpbWlhbiBQdWJsaWMgU29mdHdhcmUgYXMgcHJvdmlkZWQgYnkgWGltaWFuLCBJbmMuOyBhbmQKKworICAgIDUuIElmIHlvdSBtb2RpZnkgdGhlIFhpbWlhbiBQdWJsaWMgU29mdHdhcmUgcHVyc3VhbnQgdG8gdGhlIHRlcm1zCisgICAgICAgb2YgdGhlIGxpY2Vuc2UgdGhhdCBhY2NvbXBhbmllcyBpdCwgeW91IGRvIG5vdCB1c2UsIGNvcHksIG9yCisgICAgICAgcmVkaXN0cmlidXRlIHRoZSBYaW1pYW4gTG9nbyBGaWxlcyBvciBYaW1pYW4gTG9nbyB3aXRoIHRoZQorICAgICAgIG1vZGlmaWVkIHNvZnR3YXJlLgorCitYaW1pYW4sIEluYy4gcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHZlcmlmeSB5b3VyIGNvbXBsaWFuY2Ugd2l0aCB0aGUKK3Rlcm1zIG9mIHRoZSBMaWNlbnNlLiAgSW4gdGhlIGV2ZW50IHRoYXQgWGltaWFuLCBJbmMuIGlzIG5vdAorc2F0aXNmaWVkLCBpbiBpdHMgc29sZSBkaXNjcmV0aW9uLCB0aGF0IHlvdSBhcmUgKGFuZCBoYXZlIGJlZW4gYXQgYWxsCit0aW1lcyBpbiB0aGUgcGFzdCkgaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoZSBMaWNlbnNlCithbmQgd2l0aCBYaW1pYW4sIEluYy4ncyBzdGFuZGFyZHMgYW5kIGd1aWRlbGluZXMgZm9yIHVzZSBvZiBpdHMKK3RyYWRlbWFya3MgYW5kIGxvZ29zLCBYaW1pYW4sIEluYy4gbWF5IGltbWVkaWF0ZWx5IHRlcm1pbmF0ZSB0aGUKK0xpY2Vuc2UuCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgWElNSUFOLCBJTkMuIEdJVkVTIEFORCBNQUtFUyBOTworUkVQUkVTRU5UQVRJT04gT1IgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgQU5ECitTUEVDSUZJQ0FMTFksIFdJVEhPVVQgTElNSVRBVElPTiwgRElTQ0xBSU1TIEFOWSBJTVBMSUVEIFdBUlJBTlRZIE9GCitNRVJDSEFOVElCSUxJVFksIEFOWSBJTVBMSUVEIFdBUlJBTlRZIE9GIEZJVE5FU1MgRk9SIEFOWSBQQVJUSUNVTEFSCitQVVJQT1NFLCBBTkQgQU5ZIElNUExJRUQgV0FSUkFOVFkgQVJJU0lORyBCWSBVU0FHRSBPUiBUUkFERSwgQ09VUlNFIE9GCitERUFMSU5HLCBPUiBDT1VSU0UgT0YgUEVSRk9STUFOQ0UuICBJTiBOTyBFVkVOVCBTSEFMTCBYSU1JQU4sCitJTkMuIEhBVkUgQU5ZIExJQUJJTElUWSwgT0JMSUdBVElPTiBPUiBSRVNQT05TSUJJTElUWSBGT1IgQU5ZCitJTkRJUkVDVCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgU1BFQ0lBTCBPUiBFWEVNUExBUlkgREFNQUdFUywgT1IKK0RBTUFHRVMgRk9SIExPU1MgT0YgUFJPRklUUywgUkVWRU5VRSwgREFUQSBPUiBVU0UsIEVWRU4gSUYgWElNSUFOLAorSU5DLiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL1lhVGVYIGIvbGljZW5zZXMvWWFUZVgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM3N2QyOQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL1lhVGVYCkBAIC0wLDAgKzEsNCBAQAorVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGFzIGEgZnJlZSBzb2Z0d2FyZS4gIFlvdSBjYW4KK3VzZS9jb3B5L21vZGlmeS9yZWRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmcmVlbHkgYnV0IHdpdGggTk8gd2FycmFudHkKK3RvIGFueXRoaW5nIGFzIGEgcmVzdWx0IG9mIHVzaW5nIHRoaXMgc29mdHdhcmUuICBBZG9wdGluZyBjb2RlIGZyb20KK3RoaXMgcHJvZ3JhbSBpcyBhbHNvIGZyZWUuICBCdXQgSSB3b3VsZCBub3QgZG8gY29udHJhY3QgYWN0LgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvWkxJQiBiL2xpY2Vuc2VzL1pMSUIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDhhMTM0ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL1pMSUIKQEAgLTAsMCArMSwxNyBAQAorQ29weXJpZ2h0IChDKSA8eWVhcj4gPGNvcHlyaWdodCBob2xkZXJzPgorCitUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZAord2FycmFudHkuICBJbiBubyBldmVudCB3aWxsIHRoZSBhdXRob3IocykgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBkYW1hZ2VzCithcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSwKK2luY2x1ZGluZyBjb21tZXJjaWFsIGFwcGxpY2F0aW9ucywgYW5kIHRvIGFsdGVyIGl0IGFuZCByZWRpc3RyaWJ1dGUgaXQKK2ZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyB5b3UgbXVzdCBub3QKKyAgIGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlCisgICBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmUKKyAgIGFwcHJlY2lhdGVkIGJ1dCBpcyBub3QgcmVxdWlyZWQuCisyLiBBbHRlcmVkIHNvdXJjZSB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdCBiZQorICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLgorMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL1pQTCBiL2xpY2Vuc2VzL1pQTApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNmYyMmFjCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvWlBMCkBAIC0wLDAgKzEsMzkgQEAKK1pvcGUgUHVibGljIExpY2Vuc2UgKFpQTCkgVmVyc2lvbiAyLjEKKworQSBjb3B5cmlnaHQgbm90aWNlIGFjY29tcGFuaWVzIHRoaXMgbGljZW5zZSBkb2N1bWVudCB0aGF0IGlkZW50aWZpZXMgdGhlCitjb3B5cmlnaHQgaG9sZGVycy4KKworVGhpcyBsaWNlbnNlIGhhcyBiZWVuIGNlcnRpZmllZCBhcyBvcGVuIHNvdXJjZS4gSXQgaGFzIGFsc28gYmVlbiBkZXNpZ25hdGVkIGFzCitHUEwgY29tcGF0aWJsZSBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIChGU0YpLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAxLiBSZWRpc3RyaWJ1dGlvbnMgaW4gc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFjY29tcGFueWluZyBjb3B5cmlnaHQgCisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhY2NvbXBhbnlpbmcgY29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSAKKyAgICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgICAzLiBOYW1lcyBvZiB0aGUgY29weXJpZ2h0IGhvbGRlcnMgbXVzdCBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgCisgICAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBmcm9tCisgICAgICB0aGUgY29weXJpZ2h0IGhvbGRlcnMuCisgICA0LiBUaGUgcmlnaHQgdG8gZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIG9yIHRvIHVzZSBpdCBmb3IgYW55IHB1cnBvc2UgZG9lcworICAgICAgbm90IGdpdmUgeW91IHRoZSByaWdodCB0byB1c2UgU2VydmljZW1hcmtzIChzbSkgb3IgVHJhZGVtYXJrcyAodG0pIG9mIAorICAgICAgdGhlIGNvcHlyaWdodCBob2xkZXJzLiBVc2Ugb2YgdGhlbSBpcyBjb3ZlcmVkIGJ5IHNlcGFyYXRlIGFncmVlbWVudCB3aXRoIAorICAgICAgdGhlIGNvcHlyaWdodCBob2xkZXJzLgorICAgNS4gSWYgYW55IGZpbGVzIGFyZSBtb2RpZmllZCwgeW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IAorICAgICAgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55CisgICAgICBjaGFuZ2UuCisKK0Rpc2NsYWltZXIKKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VECitPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyAKK0VWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCAKK0lOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiAKK1BST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFCitPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIAorQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9aU0ggYi9saWNlbnNlcy9aU0gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjRmMWI3MwotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL1pTSApAQCAtMCwwICsxLDI1IEBACitUaGUgWiBTaGVsbCBpcyBjb3B5cmlnaHQgKGMpIDE5OTItMjAwMSBQYXVsIEZhbHN0YWQsIFJpY2hhcmQgQ29sZW1hbiwKK1pvbHTDoW4gSGlkdsOpZ2ksIEFuZHJldyBNYWluLCBQZXRlciBTdGVwaGVuc29uLCBTdmVuIFdpc2Nobm93c2t5LCBhbmQKK290aGVycy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBJbmRpdmlkdWFsIGF1dGhvcnMsIHdoZXRoZXIgb3Igbm90CitzcGVjaWZpY2FsbHkgbmFtZWQsIHJldGFpbiBjb3B5cmlnaHQgaW4gYWxsIGNoYW5nZXM7IGluIHdoYXQgZm9sbG93cywgdGhleQorYXJlIHJlZmVycmVkIHRvIGFzIGB0aGUgWnNoIERldmVsb3BtZW50IEdyb3VwJy4gIFRoaXMgaXMgZm9yIGNvbnZlbmllbmNlCitvbmx5IGFuZCB0aGlzIGJvZHkgaGFzIG5vIGxlZ2FsIHN0YXR1cy4gIFRoZSBaIHNoZWxsIGlzIGRpc3RyaWJ1dGVkIHVuZGVyCit0aGUgZm9sbG93aW5nIGxpY2VuY2U7IGFueSBwcm92aXNpb25zIG1hZGUgaW4gaW5kaXZpZHVhbCBmaWxlcyB0YWtlCitwcmVjZWRlbmNlLgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCB3aXRob3V0IHdyaXR0ZW4gYWdyZWVtZW50IGFuZCB3aXRob3V0CitsaWNlbmNlIG9yIHJveWFsdHkgZmVlcywgdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKK3NvZnR3YXJlIGFuZCB0byBkaXN0cmlidXRlIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueQorcHVycG9zZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZwordHdvIHBhcmFncmFwaHMgYXBwZWFyIGluIGFsbCBjb3BpZXMgb2YgdGhpcyBzb2Z0d2FyZS4KKworSW4gbm8gZXZlbnQgc2hhbGwgdGhlIFpzaCBEZXZlbG9wbWVudCBHcm91cCBiZSBsaWFibGUgdG8gYW55IHBhcnR5IGZvcgorZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIGFyaXNpbmcgb3V0CitvZiB0aGUgdXNlIG9mIHRoaXMgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uLCBldmVuIGlmIHRoZSBac2gKK0RldmVsb3BtZW50IEdyb3VwIGhhdmUgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZS4KKworVGhlIFpzaCBEZXZlbG9wbWVudCBHcm91cCBzcGVjaWZpY2FsbHkgZGlzY2xhaW0gYW55IHdhcnJhbnRpZXMsIGluY2x1ZGluZywKK2J1dCBub3QgbGltaXRlZCB0bywgdGhlIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MKK2ZvciBhIHBhcnRpY3VsYXIgcHVycG9zZS4gIFRoZSBzb2Z0d2FyZSBwcm92aWRlZCBoZXJldW5kZXIgaXMgb24gYW4gImFzIGlzIgorYmFzaXMsIGFuZCB0aGUgWnNoIERldmVsb3BtZW50IEdyb3VwIGhhdmUgbm8gb2JsaWdhdGlvbiB0byBwcm92aWRlCittYWludGVuYW5jZSwgc3VwcG9ydCwgdXBkYXRlcywgZW5oYW5jZW1lbnRzLCBvciBtb2RpZmljYXRpb25zLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvYWJ5c3MgYi9saWNlbnNlcy9hYnlzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODdiYzg2Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvYWJ5c3MKQEAgLTAsMCArMSwyMzIgQEAKK0FCeVNTCitDb3B5cmlnaHQgMjAwOSBHZW5vbWUgU2NpZW5jZXMgQ2VudHJlCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitBYnlzcyBTT0ZUV0FSRSBMSUNFTlNFIEFHUkVFTUVOVCAoQUNBREVNSUMgVVNFKQorQ0FSRUZVTExZIFJFQUQgVEhFIEZPTExPV0lORyBURVJNUyBBTkQgQ09ORElUSU9OUy4gVGhpcyBMaWNlbnNlCitBZ3JlZW1lbnQgKHRoZSAiQWdyZWVtZW50IikgaXMgYSBsZWdhbCBjb250cmFjdCBiZXR3ZWVuIHlvdSwgeW91cgorZW1wbG95ZXIsIGVkdWNhdGlvbmFsIGluc3RpdHV0aW9uIG9yIG9yZ2FuaXphdGlvbiAoY29sbGVjdGl2ZWx5LCAiWW91IikKK2FuZCB0aGUgQnJpdGlzaCBDb2x1bWJpYSBDYW5jZXIgQWdlbmN5ICgiQkNDQSIpIHdpdGggcmVzcGVjdCB0byB0aGUKK2xpY2Vuc2Ugb2YgQUJ5U1MsIGluY2x1ZGluZyBhbGwgYXNzb2NpYXRlZAorZG9jdW1lbnRhdGlvbiAoY29sbGVjdGl2ZWx5LCB0aGUgIlByb2R1Y3QiKS4gCisKK0JDQ0EgaXMgd2lsbGluZyB0byBsaWNlbnNlIHRoZSBQcm9kdWN0IHRvIFlvdSBvbmx5IGlmIFlvdSBhY2NlcHQgdGhlCit0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudC4gQnkgY2xpY2tpbmcgb24gdGhlICJJIEFDQ0VQVCIKK2J1dHRvbiwgb3IgYnkgY29weWluZywgZG93bmxvYWRpbmcsIGFjY2Vzc2luZyBvciBvdGhlcndpc2UgdXNpbmcgdGhlCitQcm9kdWN0LCBZb3UgYXV0b21hdGljYWxseSBhZ3JlZSB0byBiZSBib3VuZCBieSB0aGUgdGVybXMgb2YgdGhpcworQWdyZWVtZW50LiBJRiBZT1UgRE8gTk9UIFdJU0ggVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMKK0FHUkVFTUVOVCwgRE8gTk9UIENPUFksIERPV05MT0FELCBBQ0NFU1MgT1IgT1RIRVJXSVNFIFVTRSBUSEUKK1BST0RVQ1QuIAorCisxLiBBVVRIT1JJVFk6IEluIHRoZSBldmVudCB0aGF0IFlvdSBhcmUgYW4gZWR1Y2F0aW9uYWwgaW5zdGl0dXRpb24gb3IKKyAgIG9yZ2FuaXphdGlvbiwgWW91ciByZXByZXNlbnRhdGl2ZSB3aG8gaXMgY2xpY2tpbmcgdGhlICJJIEFDQ0VQVCIKKyAgIGJ1dHRvbiwgb3Igb3RoZXJ3aXNlIGNvcHlpbmcsIGRvd25sb2FkaW5nLCBhY2Nlc3Npbmcgb3IgdXNpbmcgdGhlCisgICBQcm9kdWN0IGhlcmVieSwgaW4gdGhlaXIgcGVyc29uYWwgY2FwYWNpdHksIHJlcHJlc2VudHMgYW5kIHdhcnJhbnRzCisgICB0aGF0IHRoZXkgcG9zc2VzcyB0aGUgbGVnYWwgYXV0aG9yaXR5IHRvIGVudGVyIGludG8gdGhpcyBBZ3JlZW1lbnQKKyAgIG9uIFlvdXIgYmVoYWxmIGFuZCB0byBiaW5kIFlvdSB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQuIAorCisyLiBMSUNFTlNFIFRPIFVTRTogQkNDQSBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnNvbmFsLAorICAgbm9uLWV4Y2x1c2l2ZSwgbm9uLXRyYW5zZmVyYWJsZSwgbGltaXRlZCBsaWNlbnNlIHRvIHVzZSB0aGUgUHJvZHVjdAorICAgc29sZWx5IGZvciBpbnRlcm5hbCwgbm9uLWNvbW1lcmNpYWwgdXNlIGZvciBub24tcHJvZml0IHJlc2VhcmNoIG9yCisgICBlZHVjYXRpb25hbCBwdXJwb3NlcyBvbmx5IG9uIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBjb250YWluZWQgaW4KKyAgIHRoaXMgQWdyZWVtZW50LiBUaGUgUHJvZHVjdCBtYXkgYmUgaW5zdGFsbGVkIG9uIGEgbWF4aW11bSBvZiBvbmUKKyAgIG1hY2hpbmUgcGVyIFF1YWxpZmllZCBVc2VyIGF0IFlvdXIgcHJlbWlzZXMgb25seS4gQSBjb3B5IG9mIHRoZQorICAgUHJvZHVjdCBpbnN0YWxsZWQgb24gYSBzaW5nbGUgY29tbW9uIG1hY2hpbmUgbWF5IGJlIHNoYXJlZCBmb3IKKyAgIGludGVybmFsIHVzZSBieSBRdWFsaWZpZWQgVXNlcnMgb25seS4gSW4gb3JkZXIgdG8gYmUgYSAiUXVhbGlmaWVkCisgICBVc2VyIiwgYW4gaW5kaXZpZHVhbCBtdXN0IGJlIGEgc3R1ZGVudCwgcmVzZWFyY2hlciwgcHJvZmVzc29yLAorICAgaW5zdHJ1Y3RvciBvciBzdGFmZiBtZW1iZXIgb2YgYSBub24tcHJvZml0IGVkdWNhdGlvbmFsIGluc3RpdHV0aW9uCisgICBvciBvcmdhbml6YXRpb24gd2hvIHVzZXMgdGhlIFByb2R1Y3Qgc29sZWx5IGZvciBub24tcHJvZml0IHJlc2VhcmNoCisgICBvciBlZHVjYXRpb25hbCBwdXJwb3Nlcy4gCisKKzMuIFJFU1RSSUNUSU9OUzogWW91IGFja25vd2xlZGdlIGFuZCBhZ3JlZSB0aGF0IFlvdSBzaGFsbCBub3QsIGFuZAorc2hhbGwgbm90IGF1dGhvcml6ZSBhbnkgdGhpcmQgcGFydHkgdG86IAorKGEpIG1ha2UgY29waWVzIG9mIHRoZSBQcm9kdWN0LCBleGNlcHQgYXMgcHJvdmlkZWQgaW4gU2VjdGlvbiAyIGFuZAorZXhjZXB0IGZvciBhIHNpbmdsZSBiYWNrdXAgY29weSwgYW5kIGFueSBzdWNoIGNvcHkgdG9nZXRoZXIgd2l0aCB0aGUKK29yaWdpbmFsIG11c3QgYmUga2VwdCBpbiBZb3VyIHBvc3Nlc3Npb24gb3IgY29udHJvbDsgCisoYikgbW9kaWZ5LCBhZGFwdCwgZGVjb21waWxlLCBkaXNhc3NlbWJsZSwgdHJhbnNsYXRlIGludG8gYW5vdGhlcgorY29tcHV0ZXIgbGFuZ3VhZ2UsIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIG9mLCBvciBvdGhlcndpc2UgcmV2ZXJzZQorZW5naW5lZXIgdGhlIFByb2R1Y3QsIG9yIGRpc2Nsb3NlIGFueSB0cmFkZSBzZWNyZXRzIHJlbGF0aW5nIHRvIHRoZQorUHJvZHVjdCwgZXhjZXB0IGFzIHBlcm1pdHRlZCBpbiBTZWN0aW9uIDU7IAorKGMpIGxpY2Vuc2UsIHN1YmxpY2Vuc2UsIGRpc3RyaWJ1dGUsIHNlbGwsIGxlYXNlLCB0cmFuc2ZlciwgYXNzaWduLAordHJhZGUsIHJlbnQgb3IgcHVibGlzaCB0aGUgUHJvZHVjdCBvciBhbnkgcGFydCB0aGVyZW9mIGFuZC9vciBjb3BpZXMKK3RoZXJlb2YsIHRvIGFueSB0aGlyZCBwYXJ0eTsgCisoZCkgdXNlIHRoZSBQcm9kdWN0IHRvIHByb2Nlc3MgYW55IGRhdGEgb3RoZXIgdGhhbiBZb3VyIG93bjsgCisoZSkgdXNlIHRoZSBQcm9kdWN0IG9yIGFueSBwYXJ0IHRoZXJlb2YgZm9yIGFueSBjb21tZXJjaWFsIG9yCitmb3ItcHJvZml0IHB1cnBvc2Ugb3IgYW55IG90aGVyIHB1cnBvc2Ugb3RoZXIgdGhhbiBhcyBwZXJtaXR0ZWQgaW4KK1NlY3Rpb24gMjsgb3IgCisoZikgdXNlLCB3aXRob3V0IGl0cyBleHByZXNzIHBlcm1pc3Npb24sIHRoZSBuYW1lIG9mIEJDQ0EuIAorCis0LiBJTlRFTExFQ1RVQUwgUFJPUEVSVFkgUklHSFRTOiBTdWJqZWN0IHRvIFNlY3Rpb24gNSBiZWxvdywgYWxsCisgICBwYXRlbnRzLCBjb3B5cmlnaHRzLCB0cmFkZSBzZWNyZXRzLCBzZXJ2aWNlIG1hcmtzLCB0cmFkZW1hcmtzIGFuZAorICAgb3RoZXIgcHJvcHJpZXRhcnkgcmlnaHRzIGluIG9yIHJlbGF0ZWQgdG8gdGhlIFByb2R1Y3QgYW5kIGFueQorICAgaW1wcm92ZW1lbnRzLCBtb2RpZmljYXRpb25zIGFuZCBlbmhhbmNlbWVudHMgdGhlcmVvZiBhcmUgYW5kIHdpbGwKKyAgIHJlbWFpbiB0aGUgZXhjbHVzaXZlIHByb3BlcnR5IG9mIEJDQ0Egb3IgaXRzIGxpY2Vuc29ycy4gWW91IGFncmVlCisgICB0aGF0IFlvdSB3aWxsIG5vdCwgZWl0aGVyIGR1cmluZyBvciBhZnRlciB0aGUgdGVybWluYXRpb24gb2YgdGhpcworICAgQWdyZWVtZW50LCBjb250ZXN0IG9yIGNoYWxsZW5nZSB0aGUgdGl0bGUgdG8gb3IgdGhlIGludGVsbGVjdHVhbAorICAgcHJvcGVydHkgcmlnaHRzIG9mIEJDQ0Egb3IgaXRzIGxpY2Vuc29ycyBpbiB0aGUgUHJvZHVjdCBvciBhbnkKKyAgIHBvcnRpb24gdGhlcmVvZi4gCisKKzUuIE9XTkVSU0hJUCBPRiBJTVBST1ZFTUVOVFM6IEluIHRoZSBldmVudCB0aGF0IHRoZSBQcm9kdWN0LCBpbiB0aGUKKyAgIGZvcm0gcHJvdmlkZWQgdG8gWW91LCBpbmNsdWRlcyBzb3VyY2UgY29kZSAodGhlICJTb3VyY2UgQ29kZSIpLAorICAgWW91IGFyZSBlbnRpdGxlZCB0byBtYWtlIGltcHJvdmVtZW50cywgbW9kaWZpY2F0aW9ucyBhbmQKKyAgIGVuaGFuY2VtZW50cyB0byB0aGUgU291cmNlIENvZGUgKGNvbGxlY3RpdmVseSwgIkltcHJvdmVtZW50cyIpCisgICB3aGljaCBJbXByb3ZlbWVudHMgYXJlIHRvIGJlIHVzZWQgYnkgWW91IGZvciBub24tcHJvZml0IHJlc2VhcmNoCisgICBhbmQgZWR1Y2F0aW9uYWwgcHVycG9zZXMgb25seSBhbmQgWW91IHNoYWxsIGJlIHRoZSBvd25lciBvZiB0aG9zZQorICAgSW1wcm92ZW1lbnRzIHRoYXQgWW91IGRpcmVjdGx5IG1ha2UgYW5kIG9mIGFsbCBpbnRlbGxlY3R1YWwKKyAgIHByb3BlcnR5IHJpZ2h0cyB0byBzdWNoIEltcHJvdmVtZW50cywgc3ViamVjdCB0byB0aGUgZm9yZWdvaW5nCisgICBsaW1pdHMgb24gWW91ciB1c2UgYW5kIGRpc3RyaWJ1dGlvbiBvZiBzdWNoIEltcHJvdmVtZW50cy4gWW91CisgICBoZXJlYnkgZ3JhbnQgdG8gQkNDQSBhIHBlcnBldHVhbCwgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLAorICAgZnVsbHktcGFpZCwgaXJyZXZvY2FibGUgbGljZW5zZSB0byB1c2Ugc3VjaCBJbXByb3ZlbWVudHMgZm9yIGFueQorICAgcHVycG9zZXMgd2hhdHNvZXZlciwgYW5kIHRvIHN1YmxpY2Vuc2Ugc3VjaCBJbXByb3ZlbWVudHMgaW5jbHVkaW5nCisgICB0aGUgcmlnaHQgZm9yIHRoaXJkIHBhcnRpZXMgdG8gc3VibGljZW5zZSB0aGUgc2FtZSwgaW4gcGVycGV0dWl0eQorICAgdG8gdGhlIGV4dGVudCBzdWNoIHJpZ2h0cyBhcmUgbm90IGxpbWl0ZWQgaW4gZHVyYXRpb24gdW5kZXIKKyAgIGFwcGxpY2FibGUgbGF3LCB3aXRob3V0IGlkZW50aWZ5aW5nIG9yIHNlZWtpbmcgWW91cgorICAgY29uc2VudC4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsIFlvdSBhY2tub3dsZWRnZSB0aGF0IEJDQ0EKKyAgIGFuZCBpdHMgbGljZW5zb3JzIHdpbGwgcmV0YWluIG9yIG93biBhbGwgcmlnaHRzIGluIGFuZCB0byBhbnkKKyAgIHByZS1leGlzdGluZyBjb2RlIG9yIG90aGVyIHRlY2hub2xvZ3ksIGNvbnRlbnQgYW5kIGRhdGEgdGhhdCBtYXkgYmUKKyAgIGluY29ycG9yYXRlZCBpbiB0aGUgSW1wcm92ZW1lbnRzLiBGb3IgZ3JlYXRlciBjZXJ0YWludHksIHRoaXMKKyAgIFNlY3Rpb24gYXBwbGllcyBzb2xlbHkgdG8gdGhlIFNvdXJjZSBDb2RlIGFuZCBzaGFsbCBub3QgZ2l2ZSBZb3UKKyAgIGFueSByaWdodHMgd2l0aCByZXNwZWN0IHRvIHRoZSBvYmplY3QgY29kZSBvciBhbnkgb3RoZXIgcG9ydGlvbiBvcgorICAgZm9ybWF0IG9mIHRoZSBQcm9kdWN0IHdoaWNoIHVzZSwgZm9yIGdyZWF0ZXIgY2VydGFpbnR5LCBpcyBsaW1pdGVkCisgICBhcyBzZXQgZm9ydGggaW4gdGhpcyBBZ3JlZW1lbnQgaW5jbHVkaW5nIGFzIHNldCBvdXQgaW4gU2VjdGlvbiAzKGIpCisgICBhYm92ZS4gWW91IGFja25vd2xlZGdlIGFuZCBhZ3JlZSB0aGF0IHlvdSB3aWxsIHByb3ZpZGUgY29waWVzIG9mCisgICBJbXByb3ZlbWVudHMgdG8gQkNDQSBpbiBzdWNoIGZvcm1hdCBhcyByZWFzb25hYmx5IHJlcXVlc3RlZCBieSBCQ0NBCisgICBhdCBhbnkgdGltZSB1cG9uIHRoZSByZXF1ZXN0IG9mIEJDQ0EuIAorCis2LiBDT05GSURFTlRJQUxJVFk6IFlvdSBhY2tub3dsZWRnZSB0aGF0IHRoZSBQcm9kdWN0IGlzIGFuZAorICAgaW5jb3Jwb3JhdGVzIGNvbmZpZGVudGlhbCBhbmQgcHJvcHJpZXRhcnkgaW5mb3JtYXRpb24gZGV2ZWxvcGVkLAorICAgYWNxdWlyZWQgYnkgb3IgbGljZW5zZWQgdG8gQkNDQS4gWW91IHdpbGwgdGFrZSBhbGwgcmVhc29uYWJsZQorICAgcHJlY2F1dGlvbnMgbmVjZXNzYXJ5IHRvIHNhZmVndWFyZCB0aGUgY29uZmlkZW50aWFsaXR5IG9mIHRoZQorICAgUHJvZHVjdCwgYW5kIHdpbGwgbm90IGRpc2Nsb3NlIGFueSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgUHJvZHVjdCB0bworICAgYW55IG90aGVyIHBlcnNvbiB3aXRob3V0IEJDQ0HCocOHcyBwcmlvciB3cml0dGVuIGNvbnNlbnQuIFlvdSB3aWxsCisgICBub3QgYWxsb3cgdGhlIHJlbW92YWwgb3IgZGVmYWNlbWVudCBvZiBhbnkgY29uZmlkZW50aWFsIG9yCisgICBwcm9wcmlldGFyeSBub3RpY2UgcGxhY2VkIG9uIHRoZSBQcm9kdWN0LiBZb3UgYWNrbm93bGVkZ2UgdGhhdCBhbnkKKyAgIGJyZWFjaCBvZiB0aGlzIFNlY3Rpb24gNiB3aWxsIGNhdXNlIGlycmVwYXJhYmxlIGhhcm0gdG8gQkNDQSBhbmQKKyAgIGl0cyBsaWNlbnNvcnMuIAorCis3LiBOTyBXQVJSQU5USUVTOiBUSElTIFBST0RVQ1QgSVMgUFJPVklERUQgVE8gWU9VIEJZIEJDQ0EgSU4gT1JERVIgVE8KK0FMTE9XIFlPVSBUTyBPQlRBSU4gQUNDRVNTIFRPIExFQURJTkcgQUNBREVNSUMgUkVTRUFSQ0guIFRIRSBQUk9EVUNUCitJUyBQUk9WSURFRCBUTyBZT1UgT04gQU4gIkFTIElTIiBCQVNJUyBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorS0lORC4gTk8gV0FSUkFOVFksIFJFUFJFU0VOVEFUSU9OIE9SIENPTkRJVElPTiBFSVRIRVIgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIElNUExJRUQgV0FSUkFOVFkgT1IKK0NPTkRJVElPTiBPRiBNRVJDSEFOVEFCSUxJVFksIE5PTi1JTkZSSU5HRU1FTlQsIFBFUkZPUk1BTkNFLAorRFVSQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBVU0UgU0hBTEwKK0FQUExZLiBCQ0NBIERPRVMgTk9UIFdBUlJBTlQgVEhBVCBUSEUgUFJPRFVDVCBXSUxMIE9QRVJBVEUgT04gQQorQ09OVElOVU9VUyBPUiBUUk9VQkxFIEZSRUUgQkFTSVMuIAorCis4LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWTogVE8gVEhFIE1BWElNVU0gRVhURU5UIFBFUk1JVFRFRCBCWQorQVBQTElDQUJMRSBMQVcsIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBR0dSRUdBVEUgTElBQklMSVRZIE9GIEJDQ0EgVE8KK1lPVSBFWENFRUQgVEhFIEFNT1VOVCBZT1UgSEFWRSBQQUlEIFRPIEFDUVVJUkUgVEhFIFBST0RVQ1QgKCJNQVhJTVVNCitBTU9VTlQiKSBBTkQgV0hFUkUgWU9VIEhBVkUgTk9UIFBBSUQgQU5ZIEFNT1VOVCBGT1IgVEhFIFBST0RVQ1QgVEhFTgorVEhFIE1BWElNVU0gQU1PVU5UIFNIQUxMIEJFIERFRU1FRCBUTyBCRSBDRE4kMTAwLjAwLiBJTiBOTyBFVkVOVCBTSEFMTAorQkNDQSBCRSBMSUFCTEUgRk9SIEFOWSBJTkRJUkVDVCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgT1IgU1BFQ0lBTAorREFNQUdFUywgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBBTlkgREFNQUdFUyBGT1IgTE9TVCBQUk9GSVRTIE9SCitTQVZJTkdTLCBSRUdBUkRMRVNTIE9GIFdIRVRIRVIgVEhFWSBIQVZFIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiBFWENFUFQgVE8gVEhFIEVYVEVOVCBUSEFUIFRIRSBMQVdTIE9GIEEKK0NPTVBFVEVOVCBKVVJJU0RJQ1RJT04gUkVRVUlSRSBMSUFCSUxJVElFUyBCRVlPTkQgQU5EIERFU1BJVEUgVEhFU0UKK0xJTUlUQVRJT05TLCBFWENMVVNJT05TIEFORCBESVNDTEFJTUVSUywgVEhFU0UgTElNSVRBVElPTlMsIEVYQ0xVU0lPTlMKK0FORCBESVNDTEFJTUVSUyBTSEFMTCBBUFBMWSBXSEVUSEVSIEFOIEFDVElPTiwgQ0xBSU0gT1IgREVNQU5EIEFSSVNFUworRlJPTSBBIEJSRUFDSCBPRiBXQVJSQU5UWSBPUiBDT05ESVRJT04sIEJSRUFDSCBPRiBDT05UUkFDVCwKK05FR0xJR0VOQ0UsIFNUUklDVCBMSUFCSUxJVFkgT1IgQU5ZIE9USEVSIEtJTkQgT0YgQ0lWSUwgT1IgU1RBVFVUT1JZCitMSUFCSUxJVFkgQ09OTkVDVEVEIFdJVEggT1IgQVJJU0lORyBGUk9NIFRISVMgQUdSRUVNRU5ULiBZT1UgQUdSRUUKK1RIQVQgVEhFIEZPUkVHT0lORyBESVNDTEFJTUVSIE9GIFdBUlJBTlRJRVMgQU5EIExJTUlUQVRJT04gT0YKK0xJQUJJTElUWSBBUkUgRkFJUiBJTiBMSUdIVCBPRiBUSEUgTkFUVVJFIE9GIFRIRSBSSUdIVFMgR1JBTlRFRCBIRVJFSU4KK0FORCBUSEUgQU1PVU5UIE9GIEZFRVMgUEFJRCBCWSBZT1UgSU4gUkVTUEVDVCBPRiBUSEUgUFJPRFVDVC4gCisKKzkuIElOREVNTklUWTogWW91IHdpbGwgaW5kZW1uaWZ5LCBkZWZlbmQgYW5kIGhvbGQgaGFybWxlc3MgQkNDQSwgaXRzCisgICBib2FyZCBvZiBkaXJlY3RvcnMsIHN0YWZmIGFuZCBhZ2VudHMgZnJvbSBhbmQgYWdhaW5zdCBhbnkgYW5kIGFsbAorICAgbGlhYmlsaXR5LCBsb3NzLCBkYW1hZ2UsIGFjdGlvbiwgY2xhaW0gb3IgZXhwZW5zZSAoaW5jbHVkaW5nCisgICBhdHRvcm5lecKhw4dzIGZlZXMgYW5kIGNvc3RzIGF0IHRyaWFsIGFuZCBhcHBlbGxhdGUgbGV2ZWxzKSBpbgorICAgY29ubmVjdGlvbiB3aXRoIGFueSBjbGFpbSwgc3VpdCwgYWN0aW9uLCBkZW1hbmQgb3IganVkZ2VtZW50CisgICAoY29sbGVjdGl2ZWx5LCAiQ2xhaW0iKSBhcmlzaW5nIG91dCBvZiwgY29ubmVjdGVkIHdpdGgsIHJlc3VsdGluZworICAgZnJvbSwgb3Igc3VzdGFpbmVkIGFzIGEgcmVzdWx0IG9mIFlvdXIgdXNlIG9mIHRoZSBQcm9kdWN0IG9yIHRoZQorICAgZG93bmxvYWRpbmcgb2YgdGhlIFByb2R1Y3QsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIGFueSBDbGFpbQorICAgcmVsYXRpbmcgdG8gaW5mcmluZ2VtZW50IG9mIEJDQ0HCocOHcyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9yCisgICB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgdGhpcmQgcGFydHkuIAorCisxMC4gU1VQUE9SVCBBTkQgTUFJTlRFTkFOQ0U6IFlvdSBhY2tub3dsZWRnZSBhbmQgYWdyZWUgdGhhdCwgdW5sZXNzCisgICAgYW5kIHRvIHRoZSBleHRlbnQgZXhwcmVzc2x5IGFncmVlZCBieSBCQ0NBIGluIGEgc2VwYXJhdGUgd3JpdHRlbgorICAgIGRvY3VtZW50LCB0aGUgUHJvZHVjdCBpcyBwcm92aWRlZCB0byBZb3Ugd2l0aG91dCBhbnkgc3VwcG9ydCBvcgorICAgIG1haW50ZW5hbmNlIGZyb20gQkNDQSBhbmQsIGZvciBncmVhdGVyIGNlcnRhaW50eSwgQkNDQSBzaGFsbCBoYXZlCisgICAgbm8gb2JsaWdhdGlvbiB0byBpc3N1ZSBhbnkgdXBkYXRlIG9yIHVwZ3JhZGUgdG8gYW55IFByb2R1Y3QuIAorCisxMS4gVEVSTTogVGhpcyBBZ3JlZW1lbnQgaXMgZWZmZWN0aXZlIHVudGlsIHRlcm1pbmF0ZWQuIFlvdSBtYXkKKyAgICB0ZXJtaW5hdGUgdGhpcyBBZ3JlZW1lbnQgYXQgYW55IHRpbWUgYnkgY2Vhc2luZyB1c2Ugb2YgdGhlIFByb2R1Y3QKKyAgICBhbmQgZGVzdHJveWluZyBvciBkZWxldGluZyBhbnkgY29waWVzIG9mIHRoZSBQcm9kdWN0LiBUaGlzCisgICAgQWdyZWVtZW50IHdpbGwgdGVybWluYXRlIGltbWVkaWF0ZWx5IHdpdGhvdXQgbm90aWNlIGZyb20gQkNDQSBpZgorICAgIFlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQuIEJDQ0EgbWF5CisgICAgdGVybWluYXRlIHRoaXMgQWdyZWVtZW50IGF0IGFueSB0aW1lIHVwb24gbm90aWNlIHRvIHlvdSB3aGVyZSBCQ0NBCisgICAgZGV0ZXJtaW5lcywgaW4gaXRzIHNvbGUgZGlzY3JldGlvbiwgdGhhdCBhbnkgY29udGludWVkIHVzZSBvZiB0aGUKKyAgICBQcm9kdWN0IGNvdWxkIGluZnJpbmdlIHRoZSByaWdodHMgb2YgYW55IHRoaXJkIHBhcnRpZXMuIFVwb24KKyAgICB0ZXJtaW5hdGlvbiBvZiB0aGlzIEFncmVlbWVudCwgYW5kIGluIGFueSBldmVudCB1cG9uIEJDQ0EKKyAgICBkZWxpdmVyaW5nIFlvdSBub3RpY2Ugb2YgdGVybWluYXRpb24sIFlvdSBzaGFsbCBpbW1lZGlhdGVseSBwdXJnZQorICAgIGFsbCBQcm9kdWN0cyBmcm9tIFlvdXIgY29tcHV0ZXIgc3lzdGVtKHMpLCByZXR1cm4gdG8gQkNDQSBhbGwKKyAgICBjb3BpZXMgb2YgdGhlIFByb2R1Y3QgdGhhdCBhcmUgaW4gWW91ciBwb3NzZXNzaW9uIG9yIGNvbnRyb2wsIGFuZAorICAgIGNlYXNlIGFueSBmdXJ0aGVyIGRldmVsb3BtZW50IG9mIGFueSBJbXByb3ZlbWVudHMuIE9uIGFueQorICAgIHRlcm1pbmF0aW9uIG9mIHRoaXMgQWdyZWVtZW50IFNlY3Rpb25zIDEsIDQsIDYsIDcsIDgsIDksIDEzIGFuZCAxNAorICAgIHNoYWxsIHN1cnZpdmUgc3VjaCB0ZXJtaW5hdGlvbi4gCisKKzEyLiBHT1ZFUk5NRU5UIEVORCBVU0VSUzogV2hlcmUgYW55IG9mIHRoZSBQcm9kdWN0IGlzIHVzZWQsIGR1cGxpY2F0ZWQKKyAgICBvciBkaXNjbG9zZWQgYnkgb3IgdG8gdGhlIFVuaXRlZCBTdGF0ZXMgZ292ZXJubWVudCBvciBhIGdvdmVybm1lbnQKKyAgICBjb250cmFjdG9yIG9yIHN1YiBjb250cmFjdG9yLCBpdCBpcyBwcm92aWRlZCB3aXRoIFJFU1RSSUNURUQKKyAgICBSSUdIVFMgYXMgZGVmaW5lZCBpbiBUaXRsZSA0OCBDRlIgNTIuMjI3LTE5IGFuZCBpcyBzdWJqZWN0IHRvIHRoZQorICAgIGZvbGxvd2luZzogVGl0bGUgNDggQ0ZSIDIuMTAxLCA1Mi4yMjctMTksIDIyNy43MjAxIHRocm91Z2gKKyAgICAyMjcuNzIwMi00LCBGQVIgNTIuMjI3LTE0LCBhbmQgRkFSIDUyLjIyNy0xOShjKSgxLTIpIGFuZCAoNi84NyksCisgICAgYW5kIHdoZXJlIGFwcGxpY2FibGUsIHRoZSBjdXN0b21hcnkgc29mdHdhcmUgbGljZW5zZSwgYXMgZGVzY3JpYmVkCisgICAgaW4gVGl0bGUgNDggQ0ZSIDIyNy03MjAyIHdpdGggcmVzcGVjdCB0byBjb21tZXJjaWFsIHNvZnR3YXJlIGFuZAorICAgIGNvbW1lcmNpYWwgc29mdHdhcmUgZG9jdW1lbnRhdGlvbiBpbmNsdWRpbmcgREZBUiAyNTIuMjI3LTcwMTMsCisgICAgREZBUiAyNTIsMjI3LTcwMTQsIERGQVIgMjUyLjIyNy03MDE1IGFuZCBERkFSIDI1Mi43MDE4LCBhbGwgYXMKKyAgICBhcHBsaWNhYmxlLiAKKworMTMuIFVTRSBPRiBUSEUgRE9XTkxPQUQgU0VSVklDRTogWW91IGFja25vd2xlZGdlIGFuZCBhZ3JlZSB0aGF0IHlvdQorICAgIHdpbGwgYmUgcmVzcG9uc2libGUgZm9yIGFsbCBjb3N0cywgY2hhcmdlcyBhbmQgdGF4ZXMgKHdoZXJlCisgICAgYXBwbGljYWJsZSkgYXJpc2luZyBvdXQgb2YgWW91ciB1c2Ugb2YgdGhlIFByb2R1Y3QgYW5kIHRoZQorICAgIGRvd25sb2FkaW5nIG9mIHRoZSBQcm9kdWN0LiBZb3UgYWNrbm93bGVkZ2UgdGhhdCBZb3UgYXJlCisgICAgcmVzcG9uc2libGUgZm9yIHN1cHBseWluZyBhbnkgaGFyZHdhcmUgb3Igc29mdHdhcmUgbmVjZXNzYXJ5IHRvCisgICAgdXNlIHRoZSBQcm9kdWN0IHB1cnN1YW50IHRvIHRoaXMgQWdyZWVtZW50LiAKKworMTQuIEdFTkVSQUwgUFJPVklTSU9OUzoKKyhhKSBUaGlzIEFncmVlbWVudCB3aWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBQcm92aW5jZSBvZgorQnJpdGlzaCBDb2x1bWJpYSwgYW5kIHRoZSBsYXdzIG9mIENhbmFkYSBhcHBsaWNhYmxlIHRoZXJlaW4sIGV4Y2x1ZGluZworYW55IHJ1bGVzIG9mIHByaXZhdGUgaW50ZXJuYXRpb25hbCBsYXcgdGhhdCBsZWFkIHRvIHRoZSBhcHBsaWNhdGlvbiBvZgordGhlIGxhd3Mgb2YgYW55IG90aGVyIGp1cmlzZGljdGlvbi4gVGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24KK0NvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyAoMTk4MCkgZG9lcyBub3QgYXBwbHkgdG8KK3RoaXMgQWdyZWVtZW50LiBUaGUgY291cnRzIG9mIHRoZSBQcm92aW5jZSBvZiBCcml0aXNoIENvbHVtYmlhIHNoYWxsCitoYXZlIG5vbi1leGNsdXNpdmUganVyaXNkaWN0aW9uIHRvIGhlYXIgYW55IG1hdHRlciBhcmlzaW5nIGluCitjb25uZWN0aW9uIHdpdGggdGhpcyBBZ3JlZW1lbnQuIAorKGIpIFVTRSBPRiBUSEUgUFJPRFVDVCBJUyBQUk9ISUJJVEVEIElOIEFOWSBKVVJJU0RJQ1RJT04gV0hJQ0ggRE9FUworTk9UIEdJVkUgRUZGRUNUIFRPIFRIRSBURVJNUyBPRiBUSElTIEFHUkVFTUVOVC4gCisoYykgWW91IGFncmVlIHRoYXQgbm8gam9pbnQgdmVudHVyZSwgcGFydG5lcnNoaXAsIGVtcGxveW1lbnQsCitjb25zdWx0aW5nIG9yIGFnZW5jeSByZWxhdGlvbnNoaXAgZXhpc3RzIGJldHdlZW4gWW91IGFuZCBCQ0NBIGFzIGEKK3Jlc3VsdCBvZiB0aGlzIEFncmVlbWVudCBvciBZb3VyIHVzZSBvZiB0aGUgUHJvZHVjdC4gCisoZCkgWW91IGhlcmVieSBjb25zZW50IHRvIFlvdXIgY29udGFjdCBpbmZvcm1hdGlvbiBhbmQgYW55IG90aGVyCitwZXJzb25hbGx5IGlkZW50aWZpYWJsZSBpbmZvcm1hdGlvbiB0aGF0IFlvdSBwcm92aWRlIHRvIHVzIGJlaW5nCitkaXNjbG9zZWQgdG8gYW5kIG1haW50YWluZWQgYW5kIHVzZWQgYnkgdXMgYW5kIG91ciBidXNpbmVzcyBwYXJ0bmVycworZm9yIHRoZSBwdXJwb3NlcyBvZiAoaSkgbWFuYWdpbmcgYW5kIGRldmVsb3Bpbmcgb3VyIHJlc3BlY3RpdmUKK2J1c2luZXNzZXMgYW5kIG9wZXJhdGlvbnM7IChpaSkgbWFya2V0aW5nIHByb2R1Y3RzIGFuZCBzZXJ2aWNlcyB0byBZb3UKK2FuZCB5b3VyIHN0YWZmOyBhbmQgKGlpaSkgZGV2ZWxvcGluZyBuZXcgYW5kIGVuaGFuY2luZyBleGlzdGluZworcHJvZHVjdHMuIFlvdSBmdXJ0aGVyIGFncmVlIHRoYXQgd2UgbWF5IHByb3ZpZGUgdGhpcyBpbmZvcm1hdGlvbiB0bworb3RoZXIgcGVyc29ucyBhcyByZXF1aXJlZCB0byBzYXRpc2Z5IGFueSBsZWdhbCByZXF1aXJlbWVudHMgYW5kIHRvIGFueQorcGVyc29uIHRoYXQgYWNxdWlyZXMgc29tZSBvciBhbGwgb2YgdGhlIGFzc2V0cyBvZiBCQ0NBLiBXaGVyZSBhbnkgb2YKK3RoZSBwZXJzb25hbGx5IGlkZW50aWZpYWJsZSBpbmZvcm1hdGlvbiB0aGF0IFlvdSBwcm92aWRlIHRvIHVzIGlzIGluCityZXNwZWN0IG9mIGluZGl2aWR1YWxzIG90aGVyIHRoYW4gWW91cnNlbGYgKHN1Y2ggYXMgWW91ciBzdGFmZikgdGhlbgorWW91IHJlcHJlc2VudCBhbmQgd2FycmFudCB0byB1c2UgdGhhdCBZb3UgaGF2ZSBvYnRhaW5lZCBhbGwgbmVjZXNzYXJ5Citjb25zZW50cyBhbmQgYXV0aG9yaXphdGlvbnMgZnJvbSBzdWNoIGluZGl2aWR1YWxzIGluIG9yZGVyIHRvIGNvbXBseQord2l0aCB0aGlzIHByb3Zpc2lvbi4gUGxlYXNlIHNlZSB0aGUgQkNDQSB3ZWJzaXRlIGZvciBmdXJ0aGVyCitpbmZvcm1hdGlvbiByZWdhcmRpbmcgcGVyc29uYWxseSBpZGVudGlmaWFibGUgaW5mb3JtYXRpb24uIAorKGUpIFRoaXMgQWdyZWVtZW50IGlzIHRoZSBlbnRpcmUgQWdyZWVtZW50IGJldHdlZW4gWW91IGFuZCBCQ0NBCityZWxhdGluZyB0byB0aGlzIHN1YmplY3QgbWF0dGVyLiBZb3Ugd2lsbCBub3QgY29udGVzdCB0aGUgdmFsaWRpdHkgb2YKK3RoaXMgQWdyZWVtZW50IG1lcmVseSBiZWNhdXNlIGl0IGlzIGluIGVsZWN0cm9uaWMgZm9ybS4gTm8KK21vZGlmaWNhdGlvbiBvZiB0aGlzIEFncmVlbWVudCB3aWxsIGJlIGJpbmRpbmcsIHVubGVzcyBpbiB3cml0aW5nIGFuZAorYWNjZXB0ZWQgYnkgYW4gYXV0aG9yaXplZCByZXByZXNlbnRhdGl2ZSBvZiBlYWNoIHBhcnR5LiAgCisoZikgVGhlIHByb3Zpc2lvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYXJlIHNldmVyYWJsZSBpbiB0aGF0IGlmIGFueQorcHJvdmlzaW9uIGluIHRoZSBBZ3JlZW1lbnQgaXMgZGV0ZXJtaW5lZCB0byBiZSBpbnZhbGlkIG9yCit1bmVuZm9yY2VhYmxlIHVuZGVyIGFueSBjb250cm9sbGluZyBib2R5IG9mIGxhdywgdGhhdCB3aWxsIG5vdCBhZmZlY3QKK3RoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluaW5nIHByb3Zpc2lvbnMgb2YgdGhlCitBZ3JlZW1lbnQuIAorKGcpIFlvdSBhZ3JlZSB0byBwcmludCBvdXQgb3IgZG93bmxvYWQgYSBjb3B5IG9mIHRoaXMgQWdyZWVtZW50IGFuZAorcmV0YWluIGl0IGZvciBZb3VyIHJlY29yZHMuIAorKGgpIFlvdSBjb25zZW50IHRvIHRoZSB1c2Ugb2YgdGhlIEVuZ2xpc2ggbGFuZ3VhZ2UgaW4gdGhpcyBBZ3JlZW1lbnQuIAorKGkpIFlvdSBtYXkgbm90IGFzc2lnbiB0aGlzIEFncmVlbWVudCBvciBhbnkgb2YgWW91ciByaWdodHMgb3IKK29ibGlnYXRpb25zIGhlcmV1bmRlciB3aXRob3V0IEJDQ0EncyBwcmlvciB3cml0dGVuIGNvbnNlbnQuIEJDQ0EsIGF0CitpdHMgc29sZSBkaXNjcmV0aW9uIG1heSBhc3NpZ24gdGhpcyBBZ3JlZW1lbnQgd2l0aG91dCBub3RpY2UgdG8gWW91LiAKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL2Fjem9vbSBiL2xpY2Vuc2VzL2Fjem9vbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmEwMGNkCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvYWN6b29tCkBAIC0wLDAgKzEsMjkgQEAKK0NvcHlyaWdodCAoQykgMTk5OCwgMTk5OSBCLiBXLiBGaXR6cGF0cmljayA8Zml0ekByZWQtYmVhbi5jb20+CitDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNSBBdmluYXNoIENob3BkZSA8YXZpbmFzaEBhY3pvb20uY29tPiAgd3d3LmFjem9vbS5jb20KKworQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKK2NvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUKKyJTb2Z0d2FyZSIpLCB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcKK3dpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwKK2Rpc3RyaWJ1dGUsIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucwordG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorY29weXJpZ2h0IG5vdGljZShzKSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBvZgordGhlIFNvZnR3YXJlIGFuZCB0aGF0IGJvdGggdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UocykgYW5kIHRoaXMKK3Blcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCitPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQKK09GIFRISVJEIFBBUlRZIFJJR0hUUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IKK0hPTERFUlMgSU5DTFVERUQgSU4gVEhJUyBOT1RJQ0UgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIE9SIEFOWSBTUEVDSUFMCitJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HCitGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULAorTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KK1dJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorCitFeGNlcHQgYXMgY29udGFpbmVkIGluIHRoaXMgbm90aWNlLCB0aGUgbmFtZSBvZiBhIGNvcHlyaWdodCBob2xkZXIKK3NoYWxsIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIG90aGVyd2lzZSB0byBwcm9tb3RlIHRoZSBzYWxlLCB1c2UKK29yIG90aGVyIGRlYWxpbmdzIGluIHRoaXMgU29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIGF1dGhvcml6YXRpb24KK29mIHRoZSBjb3B5cmlnaHQgaG9sZGVyLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvYWRvbSBiL2xpY2Vuc2VzL2Fkb20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJlMGQzNQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL2Fkb20KQEAgLTAsMCArMSw1OSBAQAorSS5BLiBUZXJtcyBvZiB1c2UKKz09PT09PT09PT09PT09PT09CisKKyAgWW91IG1heSB1c2UgQURPTSBmcmVlbHkgcHJvdmlkZWQgeW91IGFja25vd2xlZGdlIHRoZSBmb2xsb3dpbmcgdGVybXMKKyAgYW5kIGFiaWRlIGJ5IHRoZW06CisKKyAgICAgICAgMS4gQURPTSBtdXN0IG9ubHkgYmUgZGlzdHJpYnV0ZWQgaW4gdGhlIHBhY2thZ2VzIGNyZWF0ZWQgYnkKKyAgICAgICAgICAgVGhvbWFzIEJpc2t1cCwgdGhlIG1haW50YWluZXIgb2YgdGhlIGdhbWUuICBUaGUgcGFja2FnZXMKKyAgICAgICAgICAgbXVzdCByZW1haW4gY29tcGxldGUgYW5kIGFsbCBjb21wb25lbnRzIG11c3Qgbm90IGJlIGFsdGVyZWQKKyAgICAgICAgICAgaW4gYW55IHdheS4KKworICAgICAgICAyLiBZb3UgbWF5IG5vdCBjaGFyZ2UgbW9yZSB0aGFuICQzIGZvciB0aGUgZGlzdHJpYnV0aW9uIG9mCisgICAgICAgICAgIEFET00gKHZhbHVlcyBhcyBvZiBOb3ZlbWJlciwgMjAwMSkuCisKKyAgICAgICAgMy4gWW91IGRvIG5vdCBjaGFsbGVuZ2UgQURPTSdzIGNvcHlyaWdodCBpbiBhbnkgd2F5LgorCisgICAgICAgIDQuIElmIHlvdSBkaXN0cmlidXRlIEFET00gd2l0aCBhIG1hZ2F6aW5lLCBhIENELVJPTSBkaXN0cmlidXRpb24KKyAgICAgICAgICAgb3IgYSBzaW1pbGFyIG1lZGl1bSwgeW91IGFiaWRlIGJ5IHRoZSB0ZXJtcyBkZWZpbmVkIGluIHNlY3Rpb24KKyAgICAgICAgICAgSS5CLgorCisgICAgICAgIDUuIFlvdSBmb2xsb3cgYWxsIG90aGVyIGxpY2Vuc2luZyB0ZXJtcyAoYXMgZ2l2ZW4gYnkgZW50ZXJpbmcKKyAgICAgICAgICAgJ2Fkb20gLWInIGFuZCAnYWRvbSAtZycpLgorCisgICAgICAgIDYuIFlvdSBhY2tub3dsZWRnZSB0aGF0IHRoZSBhdXRob3Igb2YgQURPTSBpcyBpbiBubyB3YXkKKyAgICAgICAgICAgcmVzcG9uc2libGUgZm9yIGRhbWFnZSBkb25lIHRvIHlvdXIgc3lzdGVtIGR1ZSB0byBBRE9NIHVzYWdlLgorCisgICAgICAgIDcuIElmIHlvdSBwbGF5IEFET00gZm9yIGEgcHJvbG9uZ2VkIGFtb3VudCBvZiB0aW1lIGFuZCBlbmpveQorICAgICAgICAgICBpdCwgeW91IGFncmVlIHRvIGFiaWRlIGJ5IHRoZSB0ZXJtcyBvZiBzZWN0aW9uIEkuQy4KKworCisgIEZhaWx1cmUgdG8gaG9ub3IgdGhlc2UgdGVybXMgd2lsbCBiZSBhIHNldmVyZSB2aW9sYXRpb24gb2YgdGhlIGxpY2Vuc2UKKyAgYW5kIGNvdWxkIHJlc3VsdCBpbiBsZWdhbCBtZWFzdXJlcyBiZWluZyB0YWtlbiBpZiB5b3UgYXJlIGRlZW1lZAorICBpbXBvcnRhbnQgZW5vdWdoIHRvIGRlc2VydmUgaXQuCisKKworSS5CLiBEaXN0cmlidXRpbmcgQURPTSBpbiBtYWdhemluZXMsIG9uIGRpc2tzLCBldGMuCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICBZb3UgY2FuIGZyZWVseSBkaXN0cmlidXRlIEFET00gd2l0aCBtYWdhemluZXMsIGluIGdhbWUgY29tcGlsYXRpb25zLAorICBldGMuIHByb3ZpZGVkIHlvdSBhYmlkZSBieSB0aGUgZm9sbG93aW5nIHRlcm1zOgorCisgICAgICAgIDEuIFlvdSBob25vciBhbGwgdGVybXMgbGlzdGVkIGluIHNlY3Rpb24gSS5BLgorCisgICAgICAgIDIuIFlvdSBhZ3JlZSB0byBub3RpZnkgdGhlIGF1dGhvciBvZiBBRE9NLCBUaG9tYXMgQmlza3VwLCBlaXRoZXIKKyAgICAgICAgICAgYnkgZW1haWwgYXQgYWRvbUBhZG9tLmRlIG9yIGJ5IHNlbmRpbmcgYSB3cml0dGVuIGxldHRlcgorICAgICAgICAgICB0byB0aGUgZm9sbG93aW5nIGFkZHJlc3M6CisKKyAgICAgICAgICAgICAgICBUaG9tYXMgQmlza3VwCisgICAgICAgICAgICAgICAgVGltbWVyYnJpbmtzd2VnIDM3CisgICAgICAgICAgICAgICAgNDU4OTYgR2Vsc2Vua2lyY2hlbgorICAgICAgICAgICAgICAgIEdlcm1hbnkKKworICAgICAgICAzLiBZb3Ugc2VuZCB0d28gY29tcGxpbWVudGFyeSBjb3BpZXMgb2YgeW91ciBwcm9kdWN0IChvbmUgZm9yCisgICAgICAgICAgIGFjdHVhbCBleGFtaW5hdGlvbiBhbmQgb25lIGZvciBiZWluZyBzdG9yZWQgaW4gbXkgc2FmZSkgdG8gdGhlCisgICAgICAgICAgIGFkZHJlc3MgZ2l2ZW4gdW5kZXIgIzIgKG9yLCBpZiBpdCBpcyBhbiBlbGVjdHJvbmljIHB1YmxpY2F0aW9uLAorICAgICAgICAgICB0byB0aGUgZW1haWwgYWRkcmVzcyBnaXZlbiBhYm92ZSkuCisKKyAgRmFpbHVyZSB0byBkbyBzbyB3aWxsIGJlIGEgc2V2ZXJlIHZpb2xhdGlvbiBvZiB0aGlzIGxpY2Vuc2luZyBhZ3JlZW1lbnQKKyAgYW5kIHdpbGwgaW5jdXIgbGVnYWwgbWVhc3VyZXMuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9hbWQtdWNvZGUgYi9saWNlbnNlcy9hbWQtdWNvZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzFjMDc1ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL2FtZC11Y29kZQpAQCAtMCwwICsxLDE5NiBAQAorQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgorU29mdHdhcmUgTGljZW5zZSBBZ3JlZW1lbnQKKworSU1QT1JUQU5U4oCUUkVBRCBDQVJFRlVMTFk6IERvIG5vdCBpbnN0YWxsLCBjb3B5IG9yIHVzZSB0aGUgZW5jbG9zZWQKK3NvZnR3YXJlLCBkb2N1bWVudGF0aW9uIGFuZC9vciBtYXRlcmlhbHMgdW50aWwgeW91IGhhdmUgY2FyZWZ1bGx5IHJlYWQKK2FuZCBhZ3JlZWQgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIFRoaXMgaXMgYSBsZWdhbAorYWdyZWVtZW50ICjigJxBZ3JlZW1lbnTigJ0pIGJldHdlZW4geW91IChlaXRoZXIgYW4gaW5kaXZpZHVhbCBvciBhbgorZW50aXR5KSAo4oCcWW914oCdKSBhbmQgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLiAo4oCcQU1E4oCdKS4KKworSWYgWW91IGRvIG5vdCBhZ3JlZSB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGRvIG5vdCBpbnN0YWxsLAorY29weSBvciB1c2UgdGhpcyBzb2Z0d2FyZSwgZG9jdW1lbnRhdGlvbiBvciBtYXRlcmlhbHMgb3IgYW55IHBvcnRpb24KK3RoZXJlb2YuICBCeSBsb2FkaW5nIG9yIHVzaW5nIHRoZSBzb2Z0d2FyZSBwcm92aWRlZCBoZXJld2l0aCwgd2hpY2gKK21heSBpbmNsdWRlIGFzc29jaWF0ZWQgaW5zdGFsbCBzY3JpcHRzIGFuZCBvbmxpbmUgb3IgZWxlY3Ryb25pYworZG9jdW1lbnRhdGlvbiwgb3IgbWF0ZXJpYWxzIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YsIHRoYXQgaXMgbWFkZQorYXZhaWxhYmxlIGJ5IEFNRCB0byBkb3dubG9hZCBmcm9tIGFueSBtZWRpYSAoY29sbGVjdGl2ZWx5IOKAnFNvZnR3YXJl4oCdKSwKK1lvdSBhZ3JlZSB0byBhbGwgb2YgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LgorCisxLiBMSUNFTlNFOgorCisgIGEuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50LCBBTUQgZ3JhbnRzCisgICAgIFlvdSB0aGUgZm9sbG93aW5nIG5vbi1leGNsdXNpdmUsIG5vbi10cmFuc2ZlcmFibGUsIHJveWFsdHktZnJlZSwKKyAgICAgbGltaXRlZCBjb3B5cmlnaHQgbGljZW5zZSB0byAoaSkgZG93bmxvYWQsIGNvcHkgYW5kIHVzZSB0aGUKKyAgICAgb2JqZWN0IGNvZGUgdmVyc2lvbiBvZiB0aGUgU29mdHdhcmUgYW5kIG1hdGVyaWFscyBhc3NvY2lhdGVkIHdpdGgKKyAgICAgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gcHJpbnRlZAorICAgICBkb2N1bWVudGF0aW9uLCAoY29sbGVjdGl2ZWx5LCDigJxNYXRlcmlhbHPigJ0pIGZvciBpbnRlcm5hbCB1c2Ugb25seQorICAgICBmb3Igc3VwcG9ydCBvZiBBTUQgcHJvY2Vzc29yczsgYW5kIChpaSkgbWFrZSBhbmQgZGlzdHJpYnV0ZQorICAgICBjb3BpZXMgb2YgdGhlIE1hdGVyaWFscyBmb3IgdXNlIG9ubHkgd2l0aCBZb3VyIHByb2R1Y3RzIHRoYXQKKyAgICAgc3VwcG9ydCBBTUQgcHJvY2Vzc29ycyBhbmQgaW4gY29tcHV0ZXIgc3lzdGVtcyBpbmNsdWRpbmcgQU1ECisgICAgIHByb2Nlc3NvcnMsIHByb3ZpZGVkIHRoYXQgTGljZW5zZWUgYWdyZWVzIHRvIGluY2x1ZGUgYWxsCisgICAgIGNvcHlyaWdodCBsZWdlbmRzIGFuZCBvdGhlciBsZWdhbCBub3RpY2VzIHRoYXQgbWF5IGFwcGVhciBpbiB0aGUKKyAgICAgU29mdHdhcmUuICBBZGRpdGlvbmFsbHksIExpY2Vuc2VlIGFncmVlcyB0aGF0IGFueSBkaXN0cmlidXRpb24gb2YKKyAgICAgdGhlIE1hdGVyaWFscyB0byBhIHRoaXJkIHBhcnR5LCBtdXN0IGluY2x1ZGUgYSBzb2Z0d2FyZSBsaWNlbnNlCisgICAgIGFncmVlbWVudCB3aXRoIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXQgYXJlIGF0IGxlYXN0IGFzCisgICAgIHJlc3RyaWN0aXZlIGFuZCBwcm90ZWN0aXZlIG9mIEFNROKAmXMgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cworICAgICBpbiB0aGUgTWF0ZXJpYWxzIGFzIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBzZXQgZm9ydGggaGVyZWluLgorICAgICBFeGNlcHQgZm9yIHRoZSBsaW1pdGVkIGxpY2Vuc2UgZ3JhbnRlZCBoZXJlaW4sIExpY2Vuc2VlIHNoYWxsCisgICAgIGhhdmUgbm8gb3RoZXIgcmlnaHRzIGluIHRoZSBNYXRlcmlhbHMsIHdoZXRoZXIgZXhwcmVzcywgaW1wbGllZCwKKyAgICAgYXJpc2luZyBieSBlc3RvcHBlbCBvciBvdGhlcndpc2UuCisKKyAgYi4gRXhjZXB0IGFzIGV4cHJlc3NseSBsaWNlbnNlZCBoZXJlaW4sIFlvdSBkbyBub3QgaGF2ZSB0aGUgcmlnaHQgdG8KKyAgICAgKGkpIGRpc3RyaWJ1dGUsIHJlbnQsIGxlYXNlLCBzZWxsLCBzdWJsaWNlbnNlLCBhc3NpZ24sIG9yCisgICAgIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgTWF0ZXJpYWxzLCBpbiB3aG9sZSBvciBpbiBwYXJ0LCB0byB0aGlyZAorICAgICBwYXJ0aWVzIGZvciBjb21tZXJjaWFsIG9yIGZvciBub24tY29tbWVyY2lhbCB1c2U7IG9yIChpaSkgbW9kaWZ5LAorICAgICBkaXNhc3NlbWJsZSwgcmV2ZXJzZSBlbmdpbmVlciwgb3IgZGVjb21waWxlIHRoZSBTb2Z0d2FyZSwgb3IKKyAgICAgb3RoZXJ3aXNlIHJlZHVjZSBhbnkgcGFydCBvZiB0aGUgU29mdHdhcmUgdG8gYW55IGh1bWFuIHJlYWRhYmxlCisgICAgIGZvcm0uCisKKyAgYy4gQU1EIGlzIHVuZGVyIG5vIG9ibGlnYXRpb24gdG8gc3VwcG9ydCBvciBwcm92aWRlIG1haW50ZW5hbmNlIGZvcgorICAgICB0aGUgTWF0ZXJpYWxzIG9yIHRvIHByb3ZpZGUgYW55IHVwZGF0ZXMgb3IgZW5oYW5jZW1lbnRzIHRvIFlvdS4KKworMi4gRkVFREJBQ0s6CisKKyAgIFlvdSBtYXkgcHJvdmlkZSBBTUQgZmVlZGJhY2ssIHN1Z2dlc3Rpb25zIG9yIG9waW5pb25zIGFzIHRvIHRoZQorICAgU29mdHdhcmUsIGl0cyBmZWF0dXJlcywgYW5kIGRlc2lyZWQgZW5oYW5jZW1lbnRzIG9yIGNoYW5nZXMuICBJZgorICAgWW91IHByb3ZpZGUgZmVlZGJhY2ssIHN1Z2dlc3Rpb25zIG9yIG9waW5pb25zIHRvIEFNRCByZWdhcmRpbmcgYW55CisgICBuZXcgZmVhdHVyZXMsIHVzZSwgZnVuY3Rpb25hbGl0eSwgb3IgY2hhbmdlIHRvIHRoZSBTb2Z0d2FyZSBvciBhbnkKKyAgIG1hdGVyaWFscyByZWxhdGVkIHRvIHRoZSBTb2Z0d2FyZSwgWW91IGhlcmVieSBhZ3JlZSB0byBncmFudCwgYW5kCisgICBkbyBncmFudCwgQU1EIGFsbCByaWdodHMgbmVlZGVkIGZvciBBTUQgdG8gaW5jb3Jwb3JhdGUgYW5kCisgICBjb21tZXJjaWFsaXplIGFueSBuZXcgZmVhdHVyZSwgdXNlLCBmdW5jdGlvbmFsaXR5LCBvciBjaGFuZ2UgYXQgbm8KKyAgIGNoYXJnZSBvciBlbmN1bWJyYW5jZSB0byBBTUQuIFlvdSBhZ3JlZSB0aGF0IEFNRCBtYXkgZGlzY2xvc2Ugc3VjaAorICAgZmVlZGJhY2ssIHN1Z2dlc3Rpb25zIG9yIG9waW5pb25zIHRvIGFueSB0aGlyZCBwYXJ0eSBpbiBhbnkgbWFubmVyLAorICAgYW5kIFlvdSBhZ3JlZSB0aGF0IEFNRCBoYXMgdGhlIGFiaWxpdHkgdG8gc3VibGljZW5zZSBhbnkgb2YgdGhlCisgICBmb3JlZ29pbmcgcmlnaHRzIGluIGFueSBmZWVkYmFjaywgc3VnZ2VzdGlvbnMgb3Igb3BpbmlvbnMgb3IgQU1ECisgICBwcm9kdWN0cyBvciBzZXJ2aWNlcyBpbiBhbnkgZm9ybSB0byBhbnkgdGhpcmQgcGFydHkgd2l0aG91dAorICAgcmVzdHJpY3Rpb24uCisKKzMuIE9XTkVSU0hJUCBBTkQgQ09QWVJJR0hUIE9GIE1BVEVSSUFMUzoKKworICAgWW91IGFncmVlIHRoYXQgdGhlIE1hdGVyaWFscyBhcmUgb3duZWQgYnkgQU1EIGFuZC9vciBBTUTigJlzCisgICBsaWNlbnNvcnMgKGlmIGFueSksIGFuZCBhcmUgcHJvdGVjdGVkIGJ5IFVuaXRlZCBTdGF0ZXMgYW5kIGZvcmVpZ24KKyAgIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBsYXdzIChlLmcuIHBhdGVudCBhbmQgY29weXJpZ2h0IGxhd3MpIGFuZAorICAgaW50ZXJuYXRpb25hbCB0cmVhdHkgcHJvdmlzaW9ucy4gIFlvdSB3aWxsIG5vdCByZW1vdmUgdGhlIGNvcHlyaWdodAorICAgbm90aWNlIGZyb20gdGhlIE1hdGVyaWFscy4gIFlvdSBhZ3JlZSB0byBwcmV2ZW50IGFueSB1bmF1dGhvcml6ZWQKKyAgIGNvcHlpbmcgb2YgdGhlIE1hdGVyaWFscy4gIEFsbCB0aXRsZSBhbmQgY29weXJpZ2h0cyBpbiBhbmQgdG8gdGhlCisgICBNYXRlcmlhbHMsIGFsbCBjb3BpZXMgdGhlcmVvZiAoaW4gd2hvbGUgb3IgaW4gcGFydCwgYW5kIGluIGFueQorICAgZm9ybSksIGFuZCBhbGwgcmlnaHRzIHRoZXJlaW4gc2hhbGwgcmVtYWluIHZlc3RlZCBpbiBBTUQuICBFeGNlcHQKKyAgIGFzIGV4cHJlc3NseSBwcm92aWRlZCBoZXJlaW4sIEFNRCBkb2VzIG5vdCBncmFudCBhbnkgZXhwcmVzcyBvcgorICAgaW1wbGllZCByaWdodCB0byBZb3UgdW5kZXIgQU1EIHBhdGVudHMsIGNvcHlyaWdodHMsIHRyYWRlbWFya3MsIG9yCisgICB0cmFkZSBzZWNyZXQgaW5mb3JtYXRpb24gYW5kIHN1Y2ggcmlnaHRzIGFyZSByZXNlcnZlZCB0byBBTUQgYW5kL29yCisgICBpdHMgbGljZW5zb3JzLgorCis0LiBXQVJSQU5UWSBESVNDTEFJTUVSOgorCisgICBUSEUgTUFURVJJQUxTIEFSRSBQUk9WSURFRCDigJxBUyBJU+KAnSBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAgIFdBUlJBTlRZIE9GIEFOWSBLSU5EIElOQ0xVRElORyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAgIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRC1QQVJUWSBJTlRFTExFQ1RVQUwgUFJPUEVSVFksIFRJVExFLCBPUgorICAgRklUTkVTUyBGT1IgQU5ZIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgVEhPU0UgQVJJU0lORyBGUk9NIENVU1RPTSBPRgorICAgVFJBREUgT1IgQ09VUlNFIE9GIFVTQUdFLgorCisgICBGT1IgQ0xBUklGSUNBVElPTiwgVEhFIEVOVElSRSBSSVNLIEFSSVNJTkcgT1VUIE9GIFVTRSBPUgorICAgUEVSRk9STUFOQ0UgT0YgVEhFIE1BVEVSSUFMUyBSRU1BSU5TIFdJVEggWU9VLiAgQU1EIERPRVMgTk9UCisgICBXQVJSQU5ULCBHVUFSQU5URUUsIE9SIE1BS0UgQU5ZIFJFUFJFU0VOVEFUSU9OUyBBUyBUTyBUSEUKKyAgIENPUlJFQ1RORVNTLCBBQ0NVUkFDWSwgQ09NUExFVEVORVNTLCBRVUFMSVRZLCBPUiBSRUxJQUJJTElUWSBPRiBUSEUKKyAgIE1BVEVSSUFMUy4gIEFNRCBET0VTIE5PVCBXQVJSQU5UIFRIQVQgT1BFUkFUSU9OIE9GIFRIRSBNQVRFUklBTFMKKyAgIFdJTEwgQkUgVU5JTlRFUlJVUFRFRCBPUiBFUlJPUi1GUkVFLiAgWU9VIEFSRSBSRVNQT05TSUJMRSBGT1IKKyAgIERFVEVSTUlOSU5HIFRIRSBBUFBST1BSSUFURU5FU1MgT0YgVVNJTkcgVEhFIFNPRlRXQVJFIEFORCBBU1NVTUUKKyAgIEFMTCBSSVNLUyBBU1NPQ0lBVEVEIFdJVEggVEhFIFVTRSBPRiBUSEUgTUFURVJJQUxTLCBJTkNMVURJTkcgQlVUCisgICBOT1QgTElNSVRFRCBUTyBUSEUgUklTS1MgT0YgUFJPR1JBTSBFUlJPUlMsIERBTUFHRSBUTyBPUiBMT1NTIE9GCisgICBEQVRBLCBQUk9HUkFNUyBPUiBFUVVJUE1FTlQsIEFORCBVTkFWQUlMQUJJTElUWSBPUiBJTlRFUlJVUFRJT04gT0YKKyAgIE9QRVJBVElPTlMuICBTb21lIGp1cmlzZGljdGlvbnMgZG8gbm90IGFsbG93IGZvciB0aGUgZXhjbHVzaW9uIG9yCisgICBsaW1pdGF0aW9uIG9mIGltcGxpZWQgd2FycmFudGllcywgc28gdGhlIGFib3ZlIGxpbWl0YXRpb25zIG9yCisgICBleGNsdXNpb25zIG1heSBub3QgYXBwbHkgdG8gWW91LgorCis1LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWToKKworICAgSU4gTk8gRVZFTlQgU0hBTEwgQU1EIE9SIElUUyBESVJFQ1RPUlMsIE9GRklDRVJTLCBFTVBMT1lFRVMgQU5ECisgICBBR0VOVFMsIElUUyBTVVBQTElFUlMgT1IgSVRTIExJQ0VOU09SUyBCRSBMSUFCTEUgVE8gWU9VIE9SIEFOWQorICAgVEhJUkQgUEFSVElFUyBJTiBSRUNFSVBUIE9GIFRIRSBNQVRFUklBTFMgVU5ERVIgQU5ZIFRIRU9SWSBPRgorICAgTElBQklMSVRZLCBXSEVUSEVSIEVRVUlUQUJMRSwgTEVHQUwgT1IgQ09NTU9OIExBVyBBQ1RJT04gQVJJU0lORworICAgSEVSRVVOREVSIEZPUiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgSU5ERU1OSVRZLCBUT1JUCisgICAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBPUiBPVEhFUldJU0UgRk9SIERBTUFHRVMgV0hJQ0gsIElOIFRIRQorICAgQUdHUkVHQVRFIEVYQ0VFRCBURU4gRE9MTEFSUyAoJDEwLjAwKS4gIElOIE5PIEVWRU5UIFNIQUxMIEFNRCBCRQorICAgTElBQkxFIEZPUiBBTlkgQ09OU0VRVUVOVElBTCwgSU5DSURFTlRBTCwgUFVOSVRJVkUgT1IgU1BFQ0lBTAorICAgREFNQUdFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8gTE9TUyBPRiBQUk9GSVRTLCBCVVNJTkVTUworICAgSU5URVJSVVBUSU9OLCBPUiBMT1NTIE9GIElORk9STUFUSU9OIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT0YgT1IKKyAgIElOQUJJTElUWSBUTyBVU0UgVEhFIE1BVEVSSUFMUywgRVZFTiBJRiBBTUQgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKKyAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gIEJZIFVTSU5HIFRIRSBNQVRFUklBTFMgV0lUSE9VVAorICAgQ0hBUkdFLCBZT1UgQUNDRVBUIFRISVMgQUxMT0NBVElPTiBPRiBSSVNLLiAgQmVjYXVzZSBzb21lCisgICBqdXJpc2RpY3Rpb25zIHByb2hpYml0IHRoZSBleGNsdXNpb24gb3IgbGltaXRhdGlvbiBvZiBsaWFiaWxpdHkgZm9yCisgICBjb25zZXF1ZW50aWFsIG9yIGluY2lkZW50YWwgZGFtYWdlcywgdGhlIGFib3ZlIGxpbWl0YXRpb24gbWF5IG5vdAorICAgYXBwbHkgdG8gWW91LgorCis2LiBFWFBPUlQgUkVTVFJJQ1RJT05TOgorCisgICBZb3Ugc2hhbGwgYWRoZXJlIHRvIGFsbCBhcHBsaWNhYmxlIFUuUy4sIEV1cm9wZWFuLCBhbmQgb3RoZXIgZXhwb3J0CisgICBsYXdzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHRoZSBVLlMuIEV4cG9ydCBBZG1pbmlzdHJhdGlvbgorICAgUmVndWxhdGlvbnMgKOKAnEVBUuKAnSksICgxNSBDLkYuUi4gU2VjdGlvbnMgNzMwIHRocm91Z2ggNzc0KSwgYW5kCisgICBFLlUuIENvdW5jaWwgUmVndWxhdGlvbiAoRUMpIE5vIDEzMzQvMjAwMCBvZiAyMiBKdW5lIDIwMDAuCisgICBGdXJ0aGVyLCBwdXJzdWFudCB0byBTZWN0aW9uIDc0MC42IG9mIHRoZSBFQVIsIFlvdSBoZXJlYnkgY2VydGlmeQorICAgdGhhdCwgZXhjZXB0IHB1cnN1YW50IHRvIGEgbGljZW5zZSBncmFudGVkIGJ5IHRoZSBVbml0ZWQgU3RhdGVzCisgICBEZXBhcnRtZW50IG9mIENvbW1lcmNlIEJ1cmVhdSBvZiBJbmR1c3RyeSBhbmQgU2VjdXJpdHkgb3IgYXMKKyAgIG90aGVyd2lzZSBwZXJtaXR0ZWQgcHVyc3VhbnQgdG8gYSBMaWNlbnNlIEV4Y2VwdGlvbiB1bmRlciB0aGUgRUFSLAorICAgWW91IHdpbGwgbm90ICgxKSBleHBvcnQsIHJlLWV4cG9ydCBvciByZWxlYXNlIHRvIGEgbmF0aW9uYWwgb2YgYQorICAgY291bnRyeSBpbiBDb3VudHJ5IEdyb3VwcyBEOjEsIEU6MSBvciBFOjIgYW55IHJlc3RyaWN0ZWQKKyAgIHRlY2hub2xvZ3ksIHNvZnR3YXJlLCBvciBzb3VyY2UgY29kZSBpdCByZWNlaXZlcyBmcm9tIEFNRCwgb3IgKDIpCisgICBleHBvcnQgdG8gQ291bnRyeSBHcm91cHMgRDoxLCBFOjEgb3IgRToyIHRoZSBkaXJlY3QgcHJvZHVjdCBvZiBzdWNoCisgICB0ZWNobm9sb2d5IG9yIHNvZnR3YXJlLCBpZiBzdWNoIGZvcmVpZ24gcHJvZHVjZWQgZGlyZWN0IHByb2R1Y3QgaXMKKyAgIHN1YmplY3QgdG8gbmF0aW9uYWwgc2VjdXJpdHkgY29udHJvbHMgYXMgaWRlbnRpZmllZCBvbiB0aGUgQ29tbWVyY2UKKyAgIENvbnRyb2wgTGlzdCAoY3VycmVudGx5IGZvdW5kIGluIFN1cHBsZW1lbnQgMSB0byBQYXJ0IDc3NCBvZgorICAgRUFSKS4gRm9yIHRoZSBtb3N0IGN1cnJlbnQgQ291bnRyeSBHcm91cCBsaXN0aW5ncywgb3IgZm9yCisgICBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGFib3V0IHRoZSBFQVIgb3IgWW91ciBvYmxpZ2F0aW9ucyB1bmRlcgorICAgdGhvc2UgcmVndWxhdGlvbnMsIHBsZWFzZSByZWZlciB0byB0aGUgVS5TLiBCdXJlYXUgb2YgSW5kdXN0cnkgYW5kCisgICBTZWN1cml0eeKAmXMgd2Vic2l0ZSBhdCBodHRwOi8vd3d3LmJpcy5kb2MuZ292Ly4KKworNy4gVS5TLiBHT1ZFUk5NRU5UIFJFU1RSSUNURUQgUklHSFRTOgorCisgICBUaGUgTWF0ZXJpYWxzIGFyZSBwcm92aWRlZCB3aXRoIOKAnFJFU1RSSUNURUQgUklHSFRTLuKAnSAgVXNlLAorICAgZHVwbGljYXRpb24gb3IgZGlzY2xvc3VyZSBieSB0aGUgR292ZXJubWVudCBpcyBzdWJqZWN0IHRvCisgICByZXN0cmljdGlvbnMgYXMgc2V0IGZvcnRoIGluIEZBUjUyLjIyNy0xNCBhbmQgREZBUjI1Mi4yMjctNzAxMywgZXQKKyAgIHNlcS4sIG9yIGl0cyBzdWNjZXNzb3IuICBVc2Ugb2YgdGhlIE1hdGVyaWFscyBieSB0aGUgR292ZXJubWVudAorICAgY29uc3RpdHV0ZXMgYWNrbm93bGVkZ21lbnQgb2YgQU1E4oCZcyBwcm9wcmlldGFyeSByaWdodHMgaW4gdGhlbS4KKworOC4gVEVSTUlOQVRJT04gT0YgTElDRU5TRToKKworICAgVGhpcyBBZ3JlZW1lbnQgd2lsbCB0ZXJtaW5hdGUgaW1tZWRpYXRlbHkgd2l0aG91dCBub3RpY2UgZnJvbSBBTUQKKyAgIG9yIGp1ZGljaWFsIHJlc29sdXRpb24gaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggYW55IHByb3Zpc2lvbnMgb2YKKyAgIHRoaXMgQWdyZWVtZW50LiAgVXBvbiB0ZXJtaW5hdGlvbiBvZiB0aGlzIEFncmVlbWVudCwgWW91IG11c3QKKyAgIGRlbGV0ZSBvciBkZXN0cm95IGFsbCBjb3BpZXMgb2YgdGhlIE1hdGVyaWFscy4KKworOS4gU1VSVklWQUw6CisKKyAgIFNlY3Rpb25zIDEoYiktKGMpLCAyLCAzLCA0LCA1LCA2LCA3LCA5LCAxMCwgMTEsIDEyIGFuZCAxMyBzaGFsbAorICAgc3Vydml2ZSBhbnkgZXhwaXJhdGlvbiBvciB0ZXJtaW5hdGlvbiBvZiB0aGlzIEFncmVlbWVudC4KKworMTAuIEFQUExJQ0FCTEUgTEFXUzoKKworICAgQW55IGNsYWltIGFyaXNpbmcgdW5kZXIgb3IgcmVsYXRpbmcgdG8gdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUKKyAgIGdvdmVybmVkIGJ5IGFuZCBjb25zdHJ1ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBzdWJzdGFudGl2ZSBsYXdzCisgICBvZiB0aGUgU3RhdGUgb2YgQ2FsaWZvcm5pYSwgd2l0aG91dCByZWdhcmQgdG8gcHJpbmNpcGxlcyBvZgorICAgY29uZmxpY3Qgb2YgbGF3cy4gIEVhY2ggcGFydHkgaGVyZXRvIHN1Ym1pdHMgdG8gdGhlIGp1cmlzZGljdGlvbiBvZgorICAgdGhlIHN0YXRlIGFuZCBmZWRlcmFsIGNvdXJ0cyBvZiBTYW50YSBDbGFyYSBDb3VudHkgYW5kIHRoZSBOb3J0aGVybgorICAgRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSBmb3IgdGhlIHB1cnBvc2VzIG9mIGFsbCBsZWdhbCBwcm9jZWVkaW5ncworICAgYXJpc2luZyBvdXQgb2Ygb3IgcmVsYXRpbmcgdG8gdGhpcyBBZ3JlZW1lbnQgb3IgdGhlIHN1YmplY3QgbWF0dGVyCisgICBoZXJlb2YuICBFYWNoIHBhcnR5IHdhaXZlcyBhbnkgb2JqZWN0aW9uIHdoaWNoIGl0IG1heSBoYXZlIHRvCisgICBjb250ZXN0IHN1Y2ggZm9ydW0uCisKKzExLiBTRVZFUkFCSUxJVFk6CisKKyAgIFNob3VsZCBhbnkgdGVybSBvZiB0aGlzIEFncmVlbWVudCBiZSBkZWNsYXJlZCB2b2lkIG9yIHVuZW5mb3JjZWFibGUKKyAgIGJ5IGFueSBjb3VydCBvZiBjb21wZXRlbnQganVyaXNkaWN0aW9uLCBzdWNoIGRlY2xhcmF0aW9uIHNoYWxsIGhhdmUKKyAgIG5vIGVmZmVjdCBvbiB0aGUgcmVtYWluaW5nIHRlcm1zIGhlcmVvZi4KKworCisxMi4gTk8gV0FJVkVSOgorCisgICBUaGUgZmFpbHVyZSBvZiBlaXRoZXIgcGFydHkgdG8gZW5mb3JjZSBhbnkgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyCisgICBvciB0byB0YWtlIGFjdGlvbiBhZ2FpbnN0IHRoZSBvdGhlciBwYXJ0eSBpbiB0aGUgZXZlbnQgb2YgYW55CisgICBicmVhY2ggaGVyZXVuZGVyIHNoYWxsIG5vdCBiZSBkZWVtZWQgYSB3YWl2ZXIgYnkgdGhhdCBwYXJ0eSBhcyB0bworICAgc3Vic2VxdWVudCBlbmZvcmNlbWVudCBvZiByaWdodHMgb3Igc3Vic2VxdWVudCBhY3Rpb25zIGluIHRoZSBldmVudAorICAgb2YgZnV0dXJlIGJyZWFjaGVzLgorCisxMy4gRU5USVJFIEFHUkVFTUVOVDoKKworICAgVGhpcyBBZ3JlZW1lbnQgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcworICAgYW5kIHN1cGVyc2VkZXMgYW55IHByaW9yIG9yIGNvbnRlbXBvcmFuZW91cyBvcmFsIG9yIHdyaXR0ZW4KKyAgIGFncmVlbWVudHMgd2l0aCByZXNwZWN0IHRvIHRoZSBzdWJqZWN0IG1hdHRlciBvZiB0aGlzIEFncmVlbWVudC4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL2FtaXdtIGIvbGljZW5zZXMvYW1pd20KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI4NzgxYQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL2FtaXdtCkBAIC0wLDAgKzEsNDQgQEAKKworYW1pd20gaXMgQ29weXJpZ2h0IDE5OTUtMTk5OCBieSBNYXJjdXMgQ29tc3RlZHQgPG1hcmN1c0BseXNhdG9yLmxpdS5zZT4KKworQW1pZ2EsIEFtaWdhT1MgYW5kIFdvcmtiZW5jaCBhcmUgcmVnaXN0ZXJlZCB0cmFkZW1hcmtzIG9mCitBTUlHQSBJbnRlcm5hdGlvbmFsIEluYy4KKworCitHZW5lcmljIGFtaXdtIExpY2Vuc2UKKz09PT09PT09PT09PT09PT09PT09PQorCitUaGlzIGxpY2Vuc2UgYXBwbGllcyB0byB3aG9tZXZlciByZWNlaXZlcyB0aGlzIGZpbGUuICBJdCBpcyBhIGdlbmVyaWMKK2xpY2Vuc2UgdG8gdXNlIGFuZCBkaXN0cmlidXRlIGFtaXdtLiAgSWYgeW91IHdhbnQgdG8gYWNxdWlyZSB0aGUgc29mdHdhcmUKK3VuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UsIHBsZWFzZSBjb250YWN0IHRoZSBhdXRob3IuICBUaGlzIGxpY2Vuc2UgaXMKK2luIHBhcnQgYmFzZWQgb24gdGhlIFhWIGxpY2Vuc2UgYnkgSm9obiBCcmFkbGV5LgorCitQZXJtaXNzaW9uIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgYW1pd20gaW4gaXRzIGVudGlyZXR5LCBmb3IKK25vbi1jb21tZXJjaWFsIHB1cnBvc2VzLCBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwgcHJvdmlkZWQKK3RoYXQgdGhpcyBsaWNlbnNlIGluZm9ybWF0aW9uIGFuZCBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorCitJZiB5b3UgcmVkaXN0cmlidXRlIGFtaXdtLCB0aGUgKmVudGlyZSogY29udGVudHMgb2YgdGhpcyBkaXN0cmlidXRpb24KK211c3QgYmUgZGlzdHJpYnV0ZWQsIGluY2x1ZGluZyB0aGUgUkVBRE1FLCBJTlNUQUxMIGFuZCBMSUNFTlNFIGZpbGVzLAordGhlIHNvdXJjZXMsIGFuZCB0aGUgdmFyaW91cyBzY3JpcHRzIGFuZCBNYWtlZmlsZXMuCisKK1lvdSBtYXkgZGlzdHJpYnV0ZSBiaW5hcmllcyBidWlsdCBmcm9tIHRoZSB1bm1vZGlmaWVkIGFtaXdtIHNvdXJjZXMsIGZvcgorbm9uLWNvbW1lcmNpYWwgcHVycG9zZXMsIHByb3ZpZGVkIHRoYXQgdGhlIGVudGlyZSBhbWl3bSBzb3VyY2UgZGlzdHJpYnV0aW9uCitpcyBhbHNvIGluY2x1ZGVkLCBhcyBwZXIgdGhlIHByZWNlZGluZyBwYXJhZ3JhcGguCisKK1lvdSBtYXkgZGlzdHJpYnV0ZSBhbWl3bSBhcyBhIGNvbXBvbmVudCBvZiBhbiBhZ2dyZWdhdGUgc29mdHdhcmUKK2Rpc3RyaWJ1dGlvbiwgcHJvdmlkZWQgdGhhdCBubyBvdGhlciBjb25kaXRpb24gb2YgdGhpcyBsaWNlbnNlIGlzIHZpb2xhdGVkLgorSW4gcGFydGljdWxhciwgdGhlIGVudGlyZSBhbWl3bSBkaXN0cmlidXRpb24gbXVzdCBiZSBpbmNsdWRlZCBpbiB0aGUKK2FnZ3JlZ2F0ZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24uCisKK1VucmVzdHJpY3RlZCB1c2Ugb2YgdGhlIHNvZnR3YXJlIGlzIGFsc28gaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUuCitEaXN0cmlidXRpb24gYW5kIG1vZGlmaWNhdGlvbiBvZiBzb3VyY2Ugb3IgYmluYXJpZXMgYXJlIG5vdCBjb25zaWRlcmVkIHVzZQorYW5kIGV4cGxpY2l0bHkgY292ZXJlZCBieSBvdGhlciBwYXJhZ3JhcGhzIG9mIHRoaXMgbGljZW5zZS4KKworVGhlIHNvZnR3YXJlIG1heSBiZSBtb2RpZmllZCBmb3IgeW91ciBvd24gcHVycG9zZXMsIGJ1dCBtb2RpZmllZCB2ZXJzaW9ucworbWF5IG5vdCBiZSBkaXN0cmlidXRlZCB3aXRob3V0IHByaW9yIGNvbnNlbnQgb2YgdGhlIGF1dGhvci4gIFlvdSBtYXkKK2ZyZWVseSBkaXN0cmlidXRlIHBhdGNoZXMgYWdhaW5zdCB0aGUgdW5tb2RpZmllZCBzb3VyY2UgY29kZS4KKworVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKK3dhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9yIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcworYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4KKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvYW5kcm9pZCBiL2xpY2Vuc2VzL2FuZHJvaWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWVmNjI2OQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL2FuZHJvaWQKQEAgLTAsMCArMSwyODkgQEAKK0FORFJPSUQgU09GVFdBUkUgREVWRUxPUE1FTlQgS0lUCitMSUNFTlNFIEFHUkVFTUVOVAorCisxLiAgCUludHJvZHVjdGlvbgorCisxLjEJVGhlIEFuZHJvaWQgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IChyZWZlcnJlZCB0byBpbiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IGFzIHRoZSAiU0RLIiBhbmQgCitzcGVjaWZpY2FsbHkgaW5jbHVkaW5nIHRoZSBBbmRyb2lkIHN5c3RlbSBmaWxlcyBhbmQgcGFja2FnZWQgQVBJcykgaXMgbGljZW5zZWQgdG8geW91IHN1YmplY3QgdG8gdGhlIHRlcm1zIAorb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgZm9ybXMgYSBsZWdhbGx5IGJpbmRpbmcgY29udHJhY3QgYmV0d2VlbiB5b3UgYW5kIAorR29vZ2xlIGluIHJlbGF0aW9uIHRvIHlvdXIgdXNlIG9mIHRoZSBTREsuCisKKzEuMgkiR29vZ2xlIiBtZWFucyBHb29nbGUgSW5jLiwgYSBEZWxhd2FyZSBjb3Jwb3JhdGlvbiB3aXRoIHByaW5jaXBhbCBwbGFjZSBvZiBidXNpbmVzcyBhdCAxNjAwIAorQW1waGl0aGVhdHJlIFBhcmt3YXksIE1vdW50YWluIFZpZXcsIENBIDk0MDQzLCBVbml0ZWQgU3RhdGVzLiAKKworMS4zCVRoaXMgdmVyc2lvbiBvZiB0aGUgQW5kcm9pZCBTREsgaXMgYmVpbmcgb2ZmZXJlZCB0byB0aGUgZGV2ZWxvcGVyIGNvbW11bml0eSBvbiBhbiAiRWFybHkgTG9vayIgYmFzaXMuICAKK1dpdGggdGhlIGhlbHAgYW5kIGlucHV0IG9mIHRoZSBkZXZlbG9wZXIgY29tbXVuaXR5LCBHb29nbGUgd2lsbCBjb250aW51ZSB0byBhZGQgbmV3IGZ1bmN0aW9uYWxpdHkgYW5kIAorZmVhdHVyZXMgdG8gY29udGludWFsbHkgaW1wcm92ZSB0aGUgU0RLLiAgT25jZSB0aGUgU0RLIHJlYWNoZXMgYSBtb3JlIGZpbmlzaGVkIGZvcm0sIEdvb2dsZSBpbnRlbmRzIHRvIAorcmVsZWFzZSBtb3N0IG9mIHRoZSBjb21wb25lbnRzIHVuZGVyIHRoZSBBcGFjaGUgdjIuMCBvcGVuIHNvdXJjZSBsaWNlbnNlLgorCisyLglBY2NlcHRpbmcgdGhpcyBMaWNlbnNlIEFncmVlbWVudAorCisyLjEJSW4gb3JkZXIgdG8gdXNlIHRoZSBTREssIHlvdSBtdXN0IGZpcnN0IGFncmVlIHRvIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuICBZb3UgbWF5IG5vdCB1c2UgdGhlIFNESyBpZiB5b3UgCitkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuCisKKzIuMglZb3UgY2FuIGFjY2VwdCB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IGJ5OgorCisgICAgICAgIChBKSBjbGlja2luZyB0byBhY2NlcHQgb3IgYWdyZWUgdG8gdGhpcyBMaWNlbnNlIEFncmVlbWVudCwgd2hlcmUgdGhpcyBvcHRpb24gaXMgbWFkZSBhdmFpbGFibGUgdG8geW91OyAKK29yCisKKyAgICAgICAgKEIpIGJ5IGFjdHVhbGx5IHVzaW5nIHRoZSBTREsuICBJbiB0aGlzIGNhc2UsIHlvdSBhZ3JlZSB0aGF0IHVzZSBvZiB0aGUgU0RLIGNvbnN0aXR1dGVzIGFjY2VwdGFuY2Ugb2YgCit0aGUgTGljZW5zaW5nIEFncmVlbWVudCBmcm9tIHRoYXQgcG9pbnQgb253YXJkcy4KKworMi4zCVlvdSBtYXkgbm90IHVzZSB0aGUgU0RLIGFuZCBtYXkgbm90IGFjY2VwdCB0aGUgTGljZW5zaW5nIEFncmVlbWVudCBpZiB5b3UgYXJlIGEgcGVyc29uIGJhcnJlZCBmcm9tIAorcmVjZWl2aW5nIHRoZSBTREsgdW5kZXIgdGhlIGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgb3Igb3RoZXIgY291bnRyaWVzIGluY2x1ZGluZyB0aGUgY291bnRyeSBpbiB3aGljaCAKK3lvdSBhcmUgcmVzaWRlbnQgb3IgZnJvbSB3aGljaCB5b3UgdXNlIHRoZSBTREsuCisKKzIuNAlJZiB5b3UgYXJlIGFncmVlaW5nIHRvIGJlIGJvdW5kIGJ5IHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgb24gYmVoYWxmIG9mIHlvdXIgZW1wbG95ZXIgb3Igb3RoZXIgZW50aXR5LCB5b3UgCityZXByZXNlbnQgYW5kIHdhcnJhbnQgdGhhdCB5b3UgaGF2ZSBmdWxsIGxlZ2FsIGF1dGhvcml0eSB0byBiaW5kIHlvdXIgZW1wbG95ZXIgb3Igc3VjaCBlbnRpdHkgdG8gdGhpcyBMaWNlbnNlIAorQWdyZWVtZW50LiAgSWYgeW91IGRvIG5vdCBoYXZlIHRoZSByZXF1aXNpdGUgYXV0aG9yaXR5LCB5b3UgbWF5IG5vdCBhY2NlcHQgdGhlIExpY2Vuc2luZyBBZ3JlZW1lbnQgb3IgdXNlIAordGhlIFNESyBvbiBiZWhhbGYgb2YgeW91ciBlbXBsb3llciBvciBvdGhlciBlbnRpdHkuCisKKzMuCVNESyBMaWNlbnNlIGZyb20gR29vZ2xlCisKKzMuMQlTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LCBHb29nbGUgZ3JhbnRzIHlvdSBhIGxpbWl0ZWQsIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tCithc3NpZ25hYmxlIGFuZCBub24tZXhjbHVzaXZlIGxpY2Vuc2UgdG8gdXNlIHRoZSBTREsgc29sZWx5IHRvIGRldmVsb3AgYXBwbGljYXRpb25zIHRvIHJ1biBvbiB0aGUgQW5kcm9pZCAKK3BsYXRmb3JtLiAgCisKKzMuMglZb3UgYWdyZWUgdGhhdCBHb29nbGUgb3IgdGhpcmQgcGFydGllcyBvd24gYWxsIGxlZ2FsIHJpZ2h0LCB0aXRsZSBhbmQgaW50ZXJlc3QgaW4gYW5kIHRvIHRoZSBTREssIGluY2x1ZGluZyBhbnkgCitJbnRlbGxlY3R1YWwgUHJvcGVydHkgUmlnaHRzIHRoYXQgc3Vic2lzdCBpbiB0aGUgU0RLLiAgIkludGVsbGVjdHVhbCBQcm9wZXJ0eSBSaWdodHMiIG1lYW5zIGFueSBhbmQgYWxsIHJpZ2h0cyAKK3VuZGVyIHBhdGVudCBsYXcsIGNvcHlyaWdodCBsYXcsIHRyYWRlIHNlY3JldCBsYXcsIHRyYWRlbWFyayBsYXcsIGFuZCBhbnkgYW5kIGFsbCBvdGhlciBwcm9wcmlldGFyeSByaWdodHMuIAorR29vZ2xlIHJlc2VydmVzIGFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIHRvIHlvdS4gIAorCiszLjMuCUV4Y2VwdCB0byB0aGUgZXh0ZW50IHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgdGhpcmQgcGFydHkgbGljZW5zZXMsIHlvdSBtYXkgbm90IGNvcHkgKGV4Y2VwdCBmb3IgYmFja3VwIAorcHVycG9zZXMpLCBtb2RpZnksIGFkYXB0LCByZWRpc3RyaWJ1dGUsIGRlY29tcGlsZSwgcmV2ZXJzZSBlbmdpbmVlciwgZGlzYXNzZW1ibGUsIG9yIGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIAorb2YgdGhlIFNESyBvciBhbnkgcGFydCBvZiB0aGUgU0RLLiAgRXhjZXB0IHRvIHRoZSBleHRlbnQgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSB0aGlyZCBwYXJ0eSBsaWNlbnNlcywgeW91IAorbWF5IG5vdCBsb2FkIGFueSBwYXJ0IG9mIHRoZSBTREsgb250byBhIG1vYmlsZSBoYW5kc2V0IG9yIGFueSBvdGhlciBoYXJkd2FyZSBkZXZpY2UgZXhjZXB0IGEgcGVyc29uYWwgCitjb21wdXRlciwgY29tYmluZSBhbnkgcGFydCBvZiB0aGUgU0RLIHdpdGggb3RoZXIgc29mdHdhcmUsIG9yIGRpc3RyaWJ1dGUgYW55IHNvZnR3YXJlIG9yIGRldmljZSAKK2luY29ycG9yYXRpbmcgYSBwYXJ0IG9mIHRoZSBTREsuICAKKworMy40CVVzZSwgcmVwcm9kdWN0aW9uIGFuZCBkaXN0cmlidXRpb24gb2YgY29tcG9uZW50cyBvZiB0aGUgU0RLIGxpY2Vuc2VkIHVuZGVyIGFuIG9wZW4gc291cmNlIHNvZnR3YXJlIAorbGljZW5zZSBhcmUgZ292ZXJuZWQgc29sZWx5IGJ5IHRoZSB0ZXJtcyBvZiB0aGF0IG9wZW4gc291cmNlIHNvZnR3YXJlIGxpY2Vuc2UgYW5kIG5vdCB0aGlzIExpY2Vuc2UgCitBZ3JlZW1lbnQuCisKKzMuNQlZb3UgYWdyZWUgdGhhdCB0aGUgZm9ybSBhbmQgbmF0dXJlIG9mIHRoZSBTREsgdGhhdCBHb29nbGUgcHJvdmlkZXMgbWF5IGNoYW5nZSB3aXRob3V0IHByaW9yIG5vdGljZSB0byAKK3lvdSBhbmQgdGhhdCBmdXR1cmUgdmVyc2lvbnMgb2YgdGhlIFNESyBtYXkgYmUgaW5jb21wYXRpYmxlIHdpdGggYXBwbGljYXRpb25zIGRldmVsb3BlZCBvbiBwcmV2aW91cyAKK3ZlcnNpb25zIG9mIHRoZSBTREsuICBZb3UgYWdyZWUgdGhhdCBHb29nbGUgbWF5IHN0b3AgKHBlcm1hbmVudGx5IG9yIHRlbXBvcmFyaWx5KSBwcm92aWRpbmcgdGhlIFNESyAob3IgCithbnkgZmVhdHVyZXMgd2l0aGluIHRoZSBTREspIHRvIHlvdSBvciB0byB1c2VycyBnZW5lcmFsbHkgYXQgR29vZ2xlJ3Mgc29sZSBkaXNjcmV0aW9uLCB3aXRob3V0IHByaW9yIG5vdGljZSAKK3RvIHlvdS4gCisKKzMuNglOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgZ2l2ZXMgeW91IGEgcmlnaHQgdG8gdXNlIGFueSBvZiBHb29nbGUncyB0cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgCitzZXJ2aWNlIG1hcmtzLCBsb2dvcywgZG9tYWluIG5hbWVzLCBvciBvdGhlciBkaXN0aW5jdGl2ZSBicmFuZCBmZWF0dXJlcy4KKworMy43CVlvdSBhZ3JlZSB0aGF0IHlvdSB3aWxsIG5vdCByZW1vdmUsIG9ic2N1cmUsIG9yIGFsdGVyIGFueSBwcm9wcmlldGFyeSByaWdodHMgbm90aWNlcyAoaW5jbHVkaW5nIGNvcHlyaWdodCAKK2FuZCB0cmFkZW1hcmsgbm90aWNlcykgdGhhdCBtYXkgYmUgYWZmaXhlZCB0byBvciBjb250YWluZWQgd2l0aGluIHRoZSBTREsuCisKKzQuCVVzZSBvZiB0aGUgU0RLIGJ5IFlvdQorCis0LjEJR29vZ2xlIGFncmVlcyB0aGF0IGl0IG9idGFpbnMgbm8gcmlnaHQsIHRpdGxlIG9yIGludGVyZXN0IGZyb20geW91IChvciB5b3VyIGxpY2Vuc29ycykgdW5kZXIgdGhpcyBMaWNlbnNlIAorQWdyZWVtZW50IGluIG9yIHRvIGFueSBzb2Z0d2FyZSBhcHBsaWNhdGlvbnMgdGhhdCB5b3UgZGV2ZWxvcCB1c2luZyB0aGUgU0RLLCBpbmNsdWRpbmcgYW55IGludGVsbGVjdHVhbCAKK3Byb3BlcnR5IHJpZ2h0cyB3aGljaCBzdWJzaXN0IGluIHRob3NlIGFwcGxpY2F0aW9ucy4gCisKKzQuMglZb3UgYWdyZWUgdG8gdXNlIHRoZSBTREsgYW5kIHdyaXRlIGFwcGxpY2F0aW9ucyBvbmx5IGZvciBwdXJwb3NlcyB0aGF0IGFyZSBwZXJtaXR0ZWQgYnkgKGEpIHRoaXMgTGljZW5zZSAKK0FncmVlbWVudCBhbmQgKGIpIGFueSBhcHBsaWNhYmxlIGxhdywgcmVndWxhdGlvbiBvciBnZW5lcmFsbHkgYWNjZXB0ZWQgcHJhY3RpY2VzIG9yIGd1aWRlbGluZXMgaW4gdGhlIAorcmVsZXZhbnQganVyaXNkaWN0aW9ucyAoaW5jbHVkaW5nIGFueSBsYXdzIHJlZ2FyZGluZyB0aGUgZXhwb3J0IG9mIGRhdGEgb3Igc29mdHdhcmUgdG8gYW5kIGZyb20gdGhlIFVuaXRlZCAKK1N0YXRlcyBvciBvdGhlciByZWxldmFudCBjb3VudHJpZXMpLgorCis0LjMJWW91IGFncmVlIHRoYXQgaWYgeW91IHVzZSB0aGUgU0RLIHRvIGRldmVsb3AgYXBwbGljYXRpb25zIGZvciBnZW5lcmFsIHB1YmxpYyB1c2VycywgeW91IHdpbGwgcHJvdGVjdCB0aGUgCitwcml2YWN5IGFuZCBsZWdhbCByaWdodHMgb2YgdGhvc2UgdXNlcnMuICBJZiB0aGUgdXNlcnMgcHJvdmlkZSB5b3Ugd2l0aCB1c2VyIG5hbWVzLCBwYXNzd29yZHMsIG9yIG90aGVyIGxvZ2luIAoraW5mb3JtYXRpb24gb3IgcGVyc29uYWwgaW5mb3JtYXRpb24sIHlvdXIgbXVzdCBtYWtlIHRoZSB1c2VycyBhd2FyZSB0aGF0IHRoZSBpbmZvcm1hdGlvbiB3aWxsIGJlIGF2YWlsYWJsZSAKK3RvIHlvdXIgYXBwbGljYXRpb24sIGFuZCB5b3UgbXVzdCBwcm92aWRlIGxlZ2FsbHkgYWRlcXVhdGUgcHJpdmFjeSBub3RpY2UgYW5kIHByb3RlY3Rpb24gZm9yIHRob3NlIHVzZXJzLiAgSWYgCit5b3VyIGFwcGxpY2F0aW9uIHN0b3JlcyBwZXJzb25hbCBvciBzZW5zaXRpdmUgaW5mb3JtYXRpb24gcHJvdmlkZWQgYnkgdXNlcnMsIGl0IG11c3QgZG8gc28gc2VjdXJlbHkuICBJZiB0aGUgCit1c2VyIHByb3ZpZGVzIHlvdXIgYXBwbGljYXRpb24gd2l0aCBHb29nbGUgQWNjb3VudCBpbmZvcm1hdGlvbiwgeW91ciBhcHBsaWNhdGlvbiBtYXkgb25seSB1c2UgdGhhdCAKK2luZm9ybWF0aW9uIHRvIGFjY2VzcyB0aGUgdXNlcidzIEdvb2dsZSBBY2NvdW50IHdoZW4sIGFuZCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZXMgZm9yIHdoaWNoLCB0aGUgdXNlciBoYXMgCitnaXZlbiB5b3UgcGVybWlzc2lvbiB0byBkbyBzby4KKworNC40CVlvdSBhZ3JlZSB0aGF0IHlvdSB3aWxsIG5vdCBlbmdhZ2UgaW4gYW55IGFjdGl2aXR5IHdpdGggdGhlIFNESywgaW5jbHVkaW5nIHRoZSBkZXZlbG9wbWVudCBvciBkaXN0cmlidXRpb24gCitvZiBhbiBhcHBsaWNhdGlvbiwgdGhhdCBpbnRlcmZlcmVzIHdpdGgsIGRpc3J1cHRzLCBkYW1hZ2VzLCBvciBhY2Nlc3NlcyBpbiBhbiB1bmF1dGhvcml6ZWQgbWFubmVyIHRoZSBzZXJ2ZXJzLCAKK25ldHdvcmtzLCBvciBvdGhlciBwcm9wZXJ0aWVzIG9yIHNlcnZpY2VzIG9mIGFueSB0aGlyZCBwYXJ0eSBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgR29vZ2xlIG9yIGFueSAKK21vYmlsZSBjb21tdW5pY2F0aW9ucyBjYXJyaWVyLgorCis0LjUJWW91IGFncmVlIHRoYXQgeW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIChhbmQgdGhhdCBHb29nbGUgaGFzIG5vIHJlc3BvbnNpYmlsaXR5IHRvIHlvdSBvciB0byBhbnkgdGhpcmQgCitwYXJ0eSBmb3IpIGFueSBkYXRhLCBjb250ZW50LCBvciByZXNvdXJjZXMgdGhhdCB5b3UgY3JlYXRlLCB0cmFuc21pdCBvciBkaXNwbGF5IHRocm91Z2ggdGhlIEFuZHJvaWQgcGxhdGZvcm0gCithbmQvb3IgYXBwbGljYXRpb25zIGZvciB0aGUgQW5kcm9pZCBwbGF0Zm9ybSwgYW5kIGZvciB0aGUgY29uc2VxdWVuY2VzIG9mIHlvdXIgYWN0aW9ucyAoaW5jbHVkaW5nIGFueSBsb3NzIAorb3IgZGFtYWdlIHdoaWNoIEdvb2dsZSBtYXkgc3VmZmVyKSBieSBkb2luZyBzby4KKworNC42CVlvdSBhZ3JlZSB0aGF0IHlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciAoYW5kIHRoYXQgR29vZ2xlIGhhcyBubyByZXNwb25zaWJpbGl0eSB0byB5b3Ugb3IgdG8gYW55IHRoaXJkIAorcGFydHkgZm9yKSBhbnkgYnJlYWNoIG9mIHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcyBMaWNlbnNlIEFncmVlbWVudCwgYW55IGFwcGxpY2FibGUgdGhpcmQgcGFydHkgY29udHJhY3QgCitvciBUZXJtcyBvZiBTZXJ2aWNlLCBvciBhbnkgYXBwbGljYWJsZSBsYXcgb3IgcmVndWxhdGlvbiwgYW5kIGZvciB0aGUgY29uc2VxdWVuY2VzIChpbmNsdWRpbmcgYW55IGxvc3Mgb3IgCitkYW1hZ2Ugd2hpY2ggR29vZ2xlIG9yIGFueSB0aGlyZCBwYXJ0eSBtYXkgc3VmZmVyKSBvZiBhbnkgc3VjaCBicmVhY2guCisKKzUuCVlvdXIgRGV2ZWxvcGVyIENyZWRlbnRpYWxzCisKKzUuMQlZb3UgYWdyZWUgdGhhdCB5b3UgYXJlIHJlc3BvbnNpYmxlIGZvciBtYWludGFpbmluZyB0aGUgY29uZmlkZW50aWFsaXR5IG9mIGFueSBkZXZlbG9wZXIgY3JlZGVudGlhbHMgdGhhdCBtYXkgCitiZSBpc3N1ZWQgdG8geW91IGJ5IEdvb2dsZSBvciB3aGljaCB5b3UgbWF5IGNob29zZSB5b3Vyc2VsZiBhbmQgdGhhdCB5b3Ugd2lsbCBiZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIAorYWxsIGFwcGxpY2F0aW9ucyB0aGF0IGFyZSBkZXZlbG9wZWQgdW5kZXIgeW91ciBkZXZlbG9wZXIgY3JlZGVudGlhbHMuCisKKzYuCVByaXZhY3kgYW5kIEluZm9ybWF0aW9uCisKKzYuMQlJbiBvcmRlciB0byBjb250aW51YWxseSBpbm5vdmF0ZSBhbmQgaW1wcm92ZSB0aGUgU0RLLCBHb29nbGUgbWF5IGNvbGxlY3QgY2VydGFpbiB1c2FnZSBzdGF0aXN0aWNzIGZyb20gdGhlIAorc29mdHdhcmUgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBhIHVuaXF1ZSBpZGVudGlmaWVyLCBhc3NvY2lhdGVkIElQIGFkZHJlc3MsIHZlcnNpb24gbnVtYmVyIG9mIHRoZSAKK3NvZnR3YXJlLCBhbmQgaW5mb3JtYXRpb24gb24gd2hpY2ggdG9vbHMgYW5kL29yIHNlcnZpY2VzIGluIHRoZSBTREsgYXJlIGJlaW5nIHVzZWQgYW5kIGhvdyB0aGV5IGFyZSBiZWluZyAKK3VzZWQuICBCZWZvcmUgYW55IG9mIHRoaXMgaW5mb3JtYXRpb24gaXMgY29sbGVjdGVkLCB0aGUgU0RLIHdpbGwgbm90aWZ5IHlvdSBhbmQgc2VlayB5b3VyIGNvbnNlbnQuICBJZiB5b3UgCit3aXRoaG9sZCBjb25zZW50LCB0aGUgaW5mb3JtYXRpb24gd2lsbCBub3QgYmUgY29sbGVjdGVkLiAgCisKKzYuMglUaGUgZGF0YSBjb2xsZWN0ZWQgaXMgZXhhbWluZWQgaW4gdGhlIGFnZ3JlZ2F0ZSB0byBpbXByb3ZlIHRoZSBTREsgYW5kIGlzIG1haW50YWluZWQgaW4gYWNjb3JkYW5jZSB3aXRoIAorR29vZ2xlJ3MgUHJpdmFjeSBQb2xpY3kuCisKKzcuCVRoaXJkIFBhcnR5IEFwcGxpY2F0aW9ucyBmb3IgdGhlIEFuZHJvaWQgUGxhdGZvcm0KKworNy4xCUlmIHlvdSB1c2UgdGhlIFNESyB0byBydW4gYXBwbGljYXRpb25zIGRldmVsb3BlZCBieSBhIHRoaXJkIHBhcnR5IG9yIHRoYXQgYWNjZXNzIGRhdGEsIGNvbnRlbnQgb3IgcmVzb3VyY2VzIAorcHJvdmlkZWQgYnkgYSB0aGlyZCBwYXJ0eSwgeW91IGFncmVlIHRoYXQgR29vZ2xlIGlzIG5vdCByZXNwb25zaWJsZSBmb3IgdGhvc2UgYXBwbGljYXRpb25zLCBkYXRhLCBjb250ZW50LCBvciAKK3Jlc291cmNlcy4gIFlvdSB1bmRlcnN0YW5kIHRoYXQgYWxsIGRhdGEsIGNvbnRlbnQgb3IgcmVzb3VyY2VzIHdoaWNoIHlvdSBtYXkgYWNjZXNzIHRocm91Z2ggc3VjaCB0aGlyZCAKK3BhcnR5IGFwcGxpY2F0aW9ucyBhcmUgdGhlIHNvbGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIHBlcnNvbiBmcm9tIHdoaWNoIHRoZXkgb3JpZ2luYXRlZCBhbmQgdGhhdCBHb29nbGUgaXMgCitub3QgbGlhYmxlIGZvciBhbnkgbG9zcyBvciBkYW1hZ2UgdGhhdCB5b3UgbWF5IGV4cGVyaWVuY2UgYXMgYSByZXN1bHQgb2YgdGhlIHVzZSBvciBhY2Nlc3Mgb2YgYW55IG9mIHRob3NlIAordGhpcmQgcGFydHkgYXBwbGljYXRpb25zLCBkYXRhLCBjb250ZW50LCBvciByZXNvdXJjZXMuICAKKworNy4yCVlvdSBzaG91bGQgYmUgYXdhcmUgdGhlIGRhdGEsIGNvbnRlbnQsIGFuZCByZXNvdXJjZXMgcHJlc2VudGVkIHRvIHlvdSB0aHJvdWdoIHN1Y2ggYSB0aGlyZCBwYXJ0eSAKK2FwcGxpY2F0aW9uIG1heSBiZSBwcm90ZWN0ZWQgYnkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyB3aGljaCBhcmUgb3duZWQgYnkgdGhlIHByb3ZpZGVycyAob3IgYnkgb3RoZXIgCitwZXJzb25zIG9yIGNvbXBhbmllcyBvbiB0aGVpciBiZWhhbGYpLiAgWW91IG1heSBub3QgbW9kaWZ5LCByZW50LCBsZWFzZSwgbG9hbiwgc2VsbCwgZGlzdHJpYnV0ZSBvciBjcmVhdGUgCitkZXJpdmF0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZXNlIGRhdGEsIGNvbnRlbnQsIG9yIHJlc291cmNlcyAoZWl0aGVyIGluIHdob2xlIG9yIGluIHBhcnQpIHVubGVzcyB5b3UgaGF2ZSBiZWVuIAorc3BlY2lmaWNhbGx5IGdpdmVuIHBlcm1pc3Npb24gdG8gZG8gc28gYnkgdGhlIHJlbGV2YW50IG93bmVycy4JCisKKzcuMwlZb3UgYWNrbm93bGVkZ2UgdGhhdCB5b3VyIHVzZSBvZiBzdWNoIHRoaXJkIHBhcnR5IGFwcGxpY2F0aW9ucywgZGF0YSwgY29udGVudCwgb3IgcmVzb3VyY2VzIG1heSBiZSBzdWJqZWN0IAordG8gc2VwYXJhdGUgdGVybXMgYmV0d2VlbiB5b3UgYW5kIHRoZSByZWxldmFudCB0aGlyZCBwYXJ0eS4gIEluIHRoYXQgY2FzZSwgdGhpcyBMaWNlbnNlIEFncmVlbWVudCBkb2VzIG5vdCAKK2FmZmVjdCB5b3VyIGxlZ2FsIHJlbGF0aW9uc2hpcCB3aXRoIHRoZXNlIHRoaXJkIHBhcnRpZXMuCisKKzguCVVzaW5nIEFuZHJvaWQgQVBJcworCis4LjEJQW5kcm9pZCBNYXBzIEFQSQorCis4LjEuMQlJZiB5b3UgdXNlIHRoZSBBbmRyb2lkIE1hcHMgQVBJIChkZXNjcmliZWQgaW4gdGhlIFNESyBieSB0aGUgUGFja2FnZSBuYW1lIAorImNvbS5nb29nbGUuYW5kcm9pZC5tYXBzIiksIHRoZSB0ZXJtcyBvZiB5b3VyIGJpbmRpbmcgbGVnYWwgYWdyZWVtZW50IHdpdGggR29vZ2xlIGluY2x1ZGUgdGhpcyAKK0xpY2Vuc2UgQWdyZWVtZW50LCB0aGUgR29vZ2xlIE1hcHMgQVBJIFRlcm1zIG9mIFNlcnZpY2UgYW5kIHRoZSBHb29nbGUgTWFwcyBUZXJtcyBvZiAKK1NlcnZpY2UuICBZb3UgbXVzdCByZWFkIGFuZCBhZ3JlZSB0byB0aG9zZSBUZXJtcyBvZiBTZXJ2aWNlIGJlZm9yZSB5b3UgdXNlIHRoZSBBbmRyb2lkIE1hcHMgCitBUEkuCisKKzguMS4yCUlmIHlvdSB1c2UgdGhlIEFuZHJvaWQgTWFwcyBBUEkgdG8gcmV0cmlldmUgbWFwIG9yIHNhdGVsbGl0ZSBpbWFnZSBkYXRhIGZyb20gR29vZ2xlLCB5b3UgbXVzdCAKK2luY2x1ZGUgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgbm90aWNlIGluIHlvdXIgYXBwbGljYXRpb24gb3Igc2VydmljZSBpbiBhIG1hbm5lciB0aGF0IGlzIHJlYXNvbmFibHkgCithdmFpbGFibGUgdG8gdXNlcnM6CisKKyJDb3B5cmlnaHQgTm90aWNlOiBEYXRhOiAoYykyMDA3IFRlbGVBdGxhcywgQU5ELCBFdXJvcGEgVGVjaG5vbG9naWVzLCAKK0tpbmd3YXksIE1hcCBEYXRhIFNjaWVuY2VzIFB0eSBMdGQsIFBTTUEsIFpFTlJJTiwgR2VvY2VudHJlLCAKK01hcExpbmsvVGVsZUF0bGFzOyBJbWFnZXJ5OiAoYykyMDA3IERpZ2l0YWxHbG9iZSwgRWFydGhTYXQsIFNhbmJvcm4sIAorTllHSVMsIFNjYW5rb3J0LCBUZXJyYU1ldHJpY3MsIE1hc3NHSVMgQ29tbW9ud2VhbHRoIG9mIE1hc3NhY2h1c2V0dHMsIAorRGlnaXRhbCBFYXJ0aCBUZWNobm9sb2d5LiIKKworOC4yCUdvb2dsZSBEYXRhIEFQSXMKKworOC4yLjEJSWYgeW91IHVzZSBhbnkgQVBJIHRvIHJldHJpZXZlIGRhdGEgZnJvbSBHb29nbGUsIHlvdSBhY2tub3dsZWRnZSB0aGF0IHRoZSBkYXRhIG1heSBiZSBwcm90ZWN0ZWQgCitieSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIHdoaWNoIGFyZSBvd25lZCBieSB0aG9zZSB3aG8gcHJvdmlkZSB0aGF0IGRhdGEgKG9yIGJ5IG90aGVyIAorcGVyc29ucyBvciBjb21wYW5pZXMgb24gdGhlaXIgYmVoYWxmKS4gIFlvdSBtYXkgbm90IG1vZGlmeSwgcmVudCwgbGVhc2UsIGxvYW4sIHNlbGwsIGRpc3RyaWJ1dGUgb3IgCitjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGlzIGRhdGEgKGVpdGhlciBpbiB3aG9sZSBvciBpbiBwYXJ0KSB1bmxlc3MgeW91IGhhdmUgYmVlbiAKK3NwZWNpZmljYWxseSBnaXZlbiBwZXJtaXNzaW9uIHRvIGRvIHNvIGJ5IHRoZSBvd25lcnMgb2YgdGhhdCBkYXRhLgorCis4LjIuMglJZiB5b3UgdXNlIGFueSBBUEkgdG8gcmV0cmlldmUgYSB1c2VyJ3MgZGF0YSBmcm9tIEdvb2dsZSwgeW91IGFja25vd2xlZGdlIGFuZCBhZ3JlZSB0aGF0IHlvdSAKK3NoYWxsIHJldHJpZXZlIGRhdGEgb25seSB3aXRoIHRoZSB1c2VyJ3MgZXhwbGljaXQgY29uc2VudCBhbmQgb25seSB3aGVuLCBhbmQgZm9yIHRoZSBsaW1pdGVkIAorcHVycG9zZXMgZm9yIHdoaWNoLCB0aGUgdXNlciBoYXMgZ2l2ZW4geW91IHBlcm1pc3Npb24gdG8gZG8gc28uIAorCis5LglUZXJtaW5hdGluZyB0aGlzIExpY2Vuc2UgQWdyZWVtZW50CisKKzkuMQlUaGlzIExpY2Vuc2UgQWdyZWVtZW50IHdpbGwgY29udGludWUgdG8gYXBwbHkgdW50aWwgdGVybWluYXRlZCBieSBlaXRoZXIgeW91IG9yIEdvb2dsZSBhcyBzZXQgb3V0IGJlbG93LgorCis5LjIJSWYgeW91IHdhbnQgdG8gdGVybWluYXRlIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQsIHlvdSBtYXkgZG8gc28gYnkgY2Vhc2luZyB5b3VyIHVzZSBvZiB0aGUgU0RLIGFuZCBhbnkgCityZWxldmFudCBkZXZlbG9wZXIgY3JlZGVudGlhbHMuCisKKzkuMwlHb29nbGUgbWF5IGF0IGFueSB0aW1lLCB0ZXJtaW5hdGUgdGhpcyBMaWNlbnNlIEFncmVlbWVudCB3aXRoIHlvdSBpZjoKKworICAgICAgICAoQSkgeW91IGhhdmUgYnJlYWNoZWQgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50OyBvcgorCisgICAgICAgIChCKSBHb29nbGUgaXMgcmVxdWlyZWQgdG8gZG8gc28gYnkgbGF3OyBvcgorCisgICAgICAgIChDKSB0aGUgcGFydG5lciB3aXRoIHdob20gR29vZ2xlIG9mZmVyZWQgY2VydGFpbiBwYXJ0cyBvZiBTREsgKHN1Y2ggYXMgQVBJcykgdG8geW91IGhhcyB0ZXJtaW5hdGVkIAoraXRzIHJlbGF0aW9uc2hpcCB3aXRoIEdvb2dsZSBvciBjZWFzZWQgdG8gb2ZmZXIgY2VydGFpbiBwYXJ0cyBvZiB0aGUgU0RLIHRvIHlvdTsgb3IKKworICAgICAgICAoRCkgR29vZ2xlIGRlY2lkZXMgdG8gbm8gbG9uZ2VyIHByb3ZpZGluZyB0aGUgU0RLIG9yIGNlcnRhaW4gcGFydHMgb2YgdGhlIFNESyB0byB1c2VycyBpbiB0aGUgY291bnRyeSAKK2luIHdoaWNoIHlvdSBhcmUgcmVzaWRlbnQgb3IgZnJvbSB3aGljaCB5b3UgdXNlIHRoZSBzZXJ2aWNlLCBvciB0aGUgcHJvdmlzaW9uIG9mIHRoZSBTREsgb3IgCitjZXJ0YWluIFNESyBzZXJ2aWNlcyB0byB5b3UgYnkgR29vZ2xlIGlzLCBpbiBHb29nbGUncyBzb2xlIGRpc2NyZXRpb24sIG5vIGxvbmdlciBjb21tZXJjaWFsbHkgCit2aWFibGUuCisKKzkuNAlXaGVuIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgY29tZXMgdG8gYW4gZW5kLCBhbGwgb2YgdGhlIGxlZ2FsIHJpZ2h0cywgb2JsaWdhdGlvbnMgYW5kIGxpYWJpbGl0aWVzIHRoYXQgeW91IAorYW5kIEdvb2dsZSBoYXZlIGJlbmVmaXRlZCBmcm9tLCBiZWVuIHN1YmplY3QgdG8gKG9yIHdoaWNoIGhhdmUgYWNjcnVlZCBvdmVyIHRpbWUgd2hpbHN0IHRoaXMgTGljZW5zZSAKK0FncmVlbWVudCBoYXMgYmVlbiBpbiBmb3JjZSkgb3Igd2hpY2ggYXJlIGV4cHJlc3NlZCB0byBjb250aW51ZSBpbmRlZmluaXRlbHksIHNoYWxsIGJlIHVuYWZmZWN0ZWQgYnkgdGhpcyAKK2Nlc3NhdGlvbiwgYW5kIHRoZSBwcm92aXNpb25zIG9mIHBhcmFncmFwaCAxNC43IHNoYWxsIGNvbnRpbnVlIHRvIGFwcGx5IHRvIHN1Y2ggcmlnaHRzLCBvYmxpZ2F0aW9ucyBhbmQgCitsaWFiaWxpdGllcyBpbmRlZmluaXRlbHkuCisKKzEwLglESVNDTEFJTUVSIE9GIFdBUlJBTlRJRVMKKworMTAuMQlZT1UgRVhQUkVTU0xZIFVOREVSU1RBTkQgQU5EIEFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIFNESyBJUyBBVCBZT1VSIAorU09MRSBSSVNLIEFORCBUSEFUIFRIRSBTREsgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgIkFTIEFWQUlMQUJMRSIgV0lUSE9VVCAKK1dBUlJBTlRZIE9GIEFOWSBLSU5EIEZST00gR09PR0xFLgorCisxMC4yCVlPVVIgVVNFIE9GIFRIRSBTREsgQU5EIEFOWSBNQVRFUklBTCBET1dOTE9BREVEIE9SIE9USEVSV0lTRSBPQlRBSU5FRCAKK1RIUk9VR0ggVEhFIFVTRSBPRiBUSEUgU0RLIElTIEFUIFlPVVIgT1dOIERJU0NSRVRJT04gQU5EIFJJU0sgQU5EIFlPVSBBUkUgCitTT0xFTFkgUkVTUE9OU0lCTEUgRk9SIEFOWSBEQU1BR0UgVE8gWU9VUiBDT01QVVRFUiBTWVNURU0gT1IgT1RIRVIgCitERVZJQ0UgT1IgTE9TUyBPRiBEQVRBIFRIQVQgUkVTVUxUUyBGUk9NIFNVQ0ggVVNFLgorCisxMC4zCUdPT0dMRSBGVVJUSEVSIEVYUFJFU1NMWSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgQU5EIENPTkRJVElPTlMgT0YgQU5ZIAorS0lORCwgV0hFVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBJTVBMSUVEIAorV0FSUkFOVElFUyBBTkQgQ09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAKK1BVUlBPU0UgQU5EIE5PTi1JTkZSSU5HRU1FTlQuCisKKzExLglMSU1JVEFUSU9OIE9GIExJQUJJTElUWQorCisxMS4xCVlPVSBFWFBSRVNTTFkgVU5ERVJTVEFORCBBTkQgQUdSRUUgVEhBVCBHT09HTEUsIElUUyBTVUJTSURJQVJJRVMgQU5EIAorQUZGSUxJQVRFUywgQU5EIElUUyBMSUNFTlNPUlMgU0hBTEwgTk9UIEJFIExJQUJMRSBUTyBZT1UgVU5ERVIgQU5ZIFRIRU9SWSBPRiAKK0xJQUJJTElUWSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwgQ09OU0VRVUVOVElBTCBPUiAKK0VYRU1QTEFSWSBEQU1BR0VTIFRIQVQgTUFZIEJFIElOQ1VSUkVEIEJZIFlPVSwgSU5DTFVESU5HIEFOWSBMT1NTIE9GIAorREFUQSwgV0hFVEhFUiBPUiBOT1QgR09PR0xFIE9SIElUUyBSRVBSRVNFTlRBVElWRVMgSEFWRSBCRUVOIEFEVklTRUQgT0YgT1IgCitTSE9VTEQgSEFWRSBCRUVOIEFXQVJFIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBBTlkgU1VDSCBMT1NTRVMgQVJJU0lORy4KKworMTIuCUluZGVtbmlmaWNhdGlvbgorCisxMi4xCVRvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3LCB5b3UgYWdyZWUgdG8gZGVmZW5kLCBpbmRlbW5pZnkgYW5kIGhvbGQgaGFybWxlc3MgR29vZ2xlLCBpdHMgCithZmZpbGlhdGVzIGFuZCB0aGVpciByZXNwZWN0aXZlIGRpcmVjdG9ycywgb2ZmaWNlcnMsIGVtcGxveWVlcyBhbmQgYWdlbnRzIGZyb20gYW5kIGFnYWluc3QgYW55IGFuZCBhbGwgY2xhaW1zLCAKK2FjdGlvbnMsIHN1aXRzIG9yIHByb2NlZWRpbmdzLCBhcyB3ZWxsIGFzIGFueSBhbmQgYWxsIGxvc3NlcywgbGlhYmlsaXRpZXMsIGRhbWFnZXMsIGNvc3RzIGFuZCBleHBlbnNlcyAKKyhpbmNsdWRpbmcgcmVhc29uYWJsZSBhdHRvcm5leXMgZmVlcykgYXJpc2luZyBvdXQgb2Ygb3IgYWNjcnVpbmcgZnJvbSAoYSkgeW91ciB1c2Ugb2YgdGhlIFNESywgKGIpIGFueSAKK2FwcGxpY2F0aW9uIHlvdSBkZXZlbG9wIG9uIHRoZSBTREsgdGhhdCBpbmZyaW5nZXMgYW55IGNvcHlyaWdodCwgdHJhZGVtYXJrLCB0cmFkZSBzZWNyZXQsIHRyYWRlIGRyZXNzLCAKK3BhdGVudCBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHQgb2YgYW55IHBlcnNvbiBvciBkZWZhbWVzIGFueSBwZXJzb24gb3IgdmlvbGF0ZXMgdGhlaXIgcmlnaHRzIG9mIAorcHVibGljaXR5IG9yIHByaXZhY3ksIGFuZCAoYykgYW55IG5vbi1jb21wbGlhbmNlIGJ5IHlvdSB3aXRoIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuCisKKzEzLglDaGFuZ2VzIHRvIHRoZSBMaWNlbnNlIEFncmVlbWVudAorCisxMy4xCUdvb2dsZSBtYXkgbWFrZSBjaGFuZ2VzIHRvIHRoZSBMaWNlbnNlIEFncmVlbWVudCBhcyBpdCBkaXN0cmlidXRlcyBuZXcgdmVyc2lvbnMgb2YgdGhlIFNESy4gIFdoZW4gCit0aGVzZSBjaGFuZ2VzIGFyZSBtYWRlLCBHb29nbGUgd2lsbCBtYWtlIGEgbmV3IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgQWdyZWVtZW50IGF2YWlsYWJsZSBvbiB0aGUgCit3ZWJzaXRlIHdoZXJlIHRoZSBTREsgaXMgbWFkZSBhdmFpbGFibGUgYW5kIHdpdGggdGhlIFNESyBkb3dubG9hZGFibGUuCisKKzEzLjIJWW91IGFncmVlIHRoYXQgeW91ciB1c2Ugb2YgYSBzcGVjaWZpYyB2ZXJzaW9uIG9mIHRoZSBTREsgaXMgZ292ZXJuZWQgYnkgdGhlIExpY2Vuc2UgQWdyZWVtZW50IGluY2x1ZGVkIAord2l0aCB0aGF0IHZlcnNpb24gb2YgdGhlIFNESy4KKworMTQuCUdlbmVyYWwgTGVnYWwgVGVybXMKKworMTQuMQlUaGlzIExpY2Vuc2UgQWdyZWVtZW50IGNvbnN0aXR1dGUgdGhlIHdob2xlIGxlZ2FsIGFncmVlbWVudCBiZXR3ZWVuIHlvdSBhbmQgR29vZ2xlIGFuZCBnb3Zlcm4geW91ciAKK3VzZSBvZiB0aGUgU0RLIChleGNsdWRpbmcgYW55IHNlcnZpY2VzIHdoaWNoIEdvb2dsZSBtYXkgcHJvdmlkZSB0byB5b3UgdW5kZXIgYSBzZXBhcmF0ZSB3cml0dGVuIAorYWdyZWVtZW50KSwgYW5kIGNvbXBsZXRlbHkgcmVwbGFjZSBhbnkgcHJpb3IgYWdyZWVtZW50cyBiZXR3ZWVuIHlvdSBhbmQgR29vZ2xlIGluIHJlbGF0aW9uIHRvIHRoZSBTREsuCisKKzE0LjIJWW91IGFncmVlIHRoYXQgaWYgR29vZ2xlIGRvZXMgbm90IGV4ZXJjaXNlIG9yIGVuZm9yY2UgYW55IGxlZ2FsIHJpZ2h0IG9yIHJlbWVkeSB3aGljaCBpcyBjb250YWluZWQgaW4gdGhpcyAKK0xpY2Vuc2UgQWdyZWVtZW50IChvciB3aGljaCBHb29nbGUgaGFzIHRoZSBiZW5lZml0IG9mIHVuZGVyIGFueSBhcHBsaWNhYmxlIGxhdyksIHRoaXMgd2lsbCBub3QgYmUgdGFrZW4gdG8gCitiZSBhIGZvcm1hbCB3YWl2ZXIgb2YgR29vZ2xlJ3MgcmlnaHRzIGFuZCB0aGF0IHRob3NlIHJpZ2h0cyBvciByZW1lZGllcyB3aWxsIHN0aWxsIGJlIGF2YWlsYWJsZSB0byBHb29nbGUuCisKKzE0LjMJSWYgYW55IGNvdXJ0IG9mIGxhdywgaGF2aW5nIHRoZSBqdXJpc2RpY3Rpb24gdG8gZGVjaWRlIG9uIHRoaXMgbWF0dGVyLCBydWxlcyB0aGF0IGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIAorQWdyZWVtZW50IGlzIGludmFsaWQsIHRoZW4gdGhhdCBwcm92aXNpb24gd2lsbCBiZSByZW1vdmVkIGZyb20gdGhpcyBMaWNlbnNlIEFncmVlbWVudCB3aXRob3V0IGFmZmVjdGluZyAKK3RoZSByZXN0IG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuICBUaGUgcmVtYWluaW5nIHByb3Zpc2lvbnMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudCB3aWxsIGNvbnRpbnVlIHRvIAorYmUgdmFsaWQgYW5kIGVuZm9yY2VhYmxlLgorCisxNC40CVlvdSBhY2tub3dsZWRnZSBhbmQgYWdyZWUgdGhhdCBlYWNoIG1lbWJlciBvZiB0aGUgZ3JvdXAgb2YgY29tcGFuaWVzIG9mIHdoaWNoIEdvb2dsZSBpcyB0aGUgcGFyZW50IAorc2hhbGwgYmUgdGhpcmQgcGFydHkgYmVuZWZpY2lhcmllcyB0byB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IGFuZCB0aGF0IHN1Y2ggb3RoZXIgY29tcGFuaWVzIHNoYWxsIGJlIGVudGl0bGVkIAordG8gZGlyZWN0bHkgZW5mb3JjZSwgYW5kIHJlbHkgdXBvbiwgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IHRoYXQgY29uZmVycyBhIGJlbmVmaXQgb24gKG9yIAorcmlnaHRzIGluIGZhdm9yIG9mKSB0aGVtLiAgT3RoZXIgdGhhbiB0aGlzLCBubyBvdGhlciBwZXJzb24gb3IgY29tcGFueSBzaGFsbCBiZSB0aGlyZCBwYXJ0eSBiZW5lZmljaWFyaWVzIHRvIAordGhpcyBMaWNlbnNlIEFncmVlbWVudC4KKworMTQuNQlFWFBPUlQgUkVTVFJJQ1RJT05TLiAgVEhFIFNESyBJUyBTVUJKRUNUIFRPIFVOSVRFRCBTVEFURVMgRVhQT1JUIExBV1MgQU5EIAorUkVHVUxBVElPTlMuICBZT1UgTVVTVCBDT01QTFkgV0lUSCBBTEwgRE9NRVNUSUMgQU5EIElOVEVSTkFUSU9OQUwgRVhQT1JUIAorTEFXUyBBTkQgUkVHVUxBVElPTlMgVEhBVCBBUFBMWSBUTyBUSEUgU0RLLiAgVEhFU0UgTEFXUyBJTkNMVURFIAorUkVTVFJJQ1RJT05TIE9OIERFU1RJTkFUSU9OUywgRU5EIFVTRVJTIEFORCBFTkQgVVNFLgorCisxNC42CVRoZSByaWdodHMgZ3JhbnRlZCBpbiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IG1heSBub3QgYmUgYXNzaWduZWQgb3IgdHJhbnNmZXJyZWQgYnkgZWl0aGVyIHlvdSBvciBHb29nbGUgCit3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGFwcHJvdmFsIG9mIHRoZSBvdGhlciBwYXJ0eS4gIE5laXRoZXIgeW91IG5vciBHb29nbGUgc2hhbGwgYmUgcGVybWl0dGVkIHRvIGRlbGVnYXRlIAordGhlaXIgcmVzcG9uc2liaWxpdGllcyBvciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gYXBwcm92YWwgb2YgdGhlIAorb3RoZXIgcGFydHkuIAorCisxNC43CVRoaXMgTGljZW5zZSBBZ3JlZW1lbnQsIGFuZCB5b3VyIHJlbGF0aW9uc2hpcCB3aXRoIEdvb2dsZSB1bmRlciB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LCBzaGFsbCBiZSAKK2dvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBDYWxpZm9ybmlhIHdpdGhvdXQgcmVnYXJkIHRvIGl0cyBjb25mbGljdCBvZiBsYXdzIHByb3Zpc2lvbnMuICBZb3UgYW5kIAorR29vZ2xlIGFncmVlIHRvIHN1Ym1pdCB0byB0aGUgZXhjbHVzaXZlIGp1cmlzZGljdGlvbiBvZiB0aGUgY291cnRzIGxvY2F0ZWQgd2l0aGluIHRoZSBjb3VudHkgb2YgU2FudGEgQ2xhcmEsIAorQ2FsaWZvcm5pYSB0byByZXNvbHZlIGFueSBsZWdhbCBtYXR0ZXIgYXJpc2luZyBmcm9tIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuICBOb3R3aXRoc3RhbmRpbmcgdGhpcywgeW91IAorYWdyZWUgdGhhdCBHb29nbGUgc2hhbGwgc3RpbGwgYmUgYWxsb3dlZCB0byBhcHBseSBmb3IgaW5qdW5jdGl2ZSByZW1lZGllcyAob3IgYW4gZXF1aXZhbGVudCB0eXBlIG9mIHVyZ2VudCAKK2xlZ2FsIHJlbGllZikgaW4gYW55IGp1cmlzZGljdGlvbi4KKworICAgIAkJCQkJCitGZWJydWFyeSAxMiwgMjAwOAorCmRpZmYgLS1naXQgYS9saWNlbnNlcy9hcXVhZm9udCBiL2xpY2Vuc2VzL2FxdWFmb250Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MzUwYjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9hcXVhZm9udApAQCAtMCwwICsxLDMyIEBACisJCSAgICAgQXF1YWZvbnQvQXF1YVBmb250IExJQ0VOU0UKKworCSAgQ29weXJpZ2h0IChDKSAyMDAyLCAyMDAzIEFxdWFibHVlIChhcXVhYmx1ZUBtMTIubWlsa2NhZmUudG8pCisJCQkJCSAgaHR0cDovL2FxdWFibHVlLm1pbGtjYWZlLnRvLworCisKKyAxLiAgQ29weXJpZ2h0LiAgQWx0aG9naCBgYEFxdWFmb250JycgYW5kIGBgQXF1YVBmb250JycgYXJlIHNvLWNhbGxlZAorIGBgZnJlZSBzb2Z0d2FyZSwnJyB0aGUgYXV0aG9yIHJldGFpbiB0aGVpciBjb3B5cmlnaHQuICBZb3UgYWdyZWUgbm90CisgdG8gc2VsbCB0aGVzZSBzb2Z0d2FyZS4KKworIDIuICBDb21tZXJjaWFsIHVzZS4gIElmIHlvdSB3YW50IHRvIHVzZSB0aGVzZSBzb2Z0d2FyZSBmb3IgYW55CisgY29tbWVyY2lhbCBwdXJwb3NlIG9yIHB1Ymxpc2ggdGhlbSBvbiBhbnkgbWVkaWEsIHlvdSBtdXN0IHJlcXVlc3QKKyBhdXRob3JpemF0aW9uIGJlZm9yZWhhbmQgdW5sZXNzIGFjY2VwdGVkIGluIGJ1bGsuCisKKyAzLiAgUGVyc29uYWwgdXNlLiAgWW91IG1heSB1c2UgdGhlc2Ugc29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwKKyBwcm92aWRlZCB0aGF0IHlvdSB1c2UgdGhlc2Ugc29mdHdhcmUgb2ZmbGluZSwgZS5nLiBmYW4gbWFnYXppbmUuICBJZgorIHlvdSB3YW50IHRvIHVzZSB0aGVzZSBzb2Z0d2FyZSBvbmxpbmUgKGkuZS4gb24gdGhlIEludGVybmV0KSwgcGxlYXNlCisgbWFrZSBhIGxpbmsgdG8gdGhlIGNvcHlyaWdodCBob2xkZXIncyBzaXRlIGFuZCB5b3UgbWF5IHVzZSB0aGVtCisgZnJlZWx5LiAgSWYgeW91IHdpbGwgdGVsbCBtZSB5b3VyIHNpdGUncyBVUkwgSSB3aWxsIGJlIHF1aXRlIGhhcHB5IDotKQorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKK0FORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKK0xJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCitTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKK0lOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCitDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCmRpZmYgLS1naXQgYS9saWNlbnNlcy9hcmIgYi9saWNlbnNlcy9hcmIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjc0MjYyNQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL2FyYgpAQCAtMCwwICsxLDI5NiBAQAorQ29weXJpZ2h0cworCitBUkIgY29weXJpZ2h0IGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uCisKKyAgICBDT1BZUklHSFRTCisKKyAgICAgICAgVGhlIEFSQiBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiBhcmUgbm90IGluIHRoZSBwdWJsaWMKKyAgICAgICAgZG9tYWluLgorCisgICAgICAgIEV4dGVybmFsIHByb2dyYW1zIGRpc3RyaWJ1dGVkIHRvZ2V0aGVyIHdpdGggQVJCIGFyZQorICAgICAgICBjb3B5cmlnaHRlZCBieSBhbmQgYXJlIHRoZSBwcm9wZXJ0eSBvZiB0aGVpciByZXNwZWN0aXZlCisgICAgICAgIGF1dGhvcnMgdW5sZXNzIG90aGVyd2lzZSBzdGF0ZWQuCisKKyAgICAgICAgQWxsIG90aGVyIGNvcHlyaWdodHMgYXJlIG93bmVkIGJ5IExlaHJzdHVobCBmdWVyCisgICAgICAgIE1pa3JvYmlvbG9naWUsIFRVIE11ZW5jaGVuLgorCisgICAgVVNBR0UgTElDRU5TRQorCisgICAgICAgIFlvdSBoYXZlIHRoZSByaWdodCB0byB1c2UgdGhpcyB2ZXJzaW9uIG9mIEFSQiBmb3IgZnJlZS4KKyAgICAgICAgUGxlYXNlIHJlYWQgYXMgd2VsbCB0aGUgYXR0YWNoZWQgY29weXJpZ2h0IG5vdGljZXMgYmVsb3cKKyAgICAgICAgd2hldGhlciB5b3UgbWF5IG9yIG1heSBub3QgaW5zdGFsbCB0aGlzIHBhY2thZ2UuCisKKyAgICAgICAgU2luY2UgbWFueSBvZiB0aGUgaW5jbHVkZWQgcHJvZ3JhbXMgaXMgZnJlZSBzb2Z0d2FyZSBhbmQKKyAgICAgICAgbm9ib2R5IGlzIGFsbG93ZWQgdG8gc2VsbCB0aGF0IHNvZnR3YXJlIHlvdSBtYXkgc2FmZWx5IGFzc3VtZQorICAgICAgICBBUkIgd2lsbCBuZXZlciBiZWNvbWUgYSBjb21tZXJjaWFsIHByb2R1Y3QuCisKKyAgICBSRURJU1RSSUJVVElPTiBMSUNFTlNFCisKKyAgICAgICAgVGhpcyByZWxlYXNlIG9mIHRoZSBBUkIgcHJvZ3JhbSBhbmQgZG9jdW1lbnRhdGlvbiBtYXkgbm90IGJlCisgICAgICAgIHNvbGQgb3IgaW5jb3Jwb3JhdGVkIGludG8gYSBjb21tZXJjaWFsIHByb2R1Y3QsIGluIHdob2xlIG9yIGluCisgICAgICAgIHBhcnQsIHdpdGhvdXQgdGhlIGV4cHJlc3NlZCB3cml0dGVuIGNvbnNlbnQgb2YgdGhlIFRlY2huaWNhbAorICAgICAgICBVbml2ZXJzaXR5IG9mIE11bmljaCBhbmQgb2YgaXRzIHN1cGVydmlzb3JzIFJhbGYgV2VzdHJhbSBvcgorICAgICAgICBXb2xmZ2FuZyBMdWR3aWcuCisKKyAgICAgICAgQWxsIGludGVyZXN0ZWQgcGFydGllcyBtYXkgcmVkaXN0cmlidXRlIGFuZCBtb2RpZnkgQVJCIGFzIGxvbmcKKyAgICAgICAgYXMgYWxsIGNvcGllcyBhcmUgYWNjb21wYW5pZWQgYnkgdGhpcyBsaWNlbnNlIGluZm9ybWF0aW9uIGFuZAorICAgICAgICBhbGwgY29weXJpZ2h0IG5vdGljZXMgcmVtYWluIGludGFjdC4gIFBhcnRpZXMgcmVkaXN0cmlidXRpbmcKKyAgICAgICAgQVJCIG11c3QgZG8gc28gb24gYSBub24tcHJvZml0IGJhc2lzLCBjaGFyZ2luZyBvbmx5IGZvciBjb3N0CisgICAgICAgIG9mIG1lZGlhIG9yIGRpc3RyaWJ1dGlvbi4KKworICAgICAgICBJZiB5b3UgbW9kaWZ5IHBhcnRzIG9mIEFSQiBhbmQgcmVkaXN0cmlidXRlIHRoZXNlIGNoYW5nZXMgdGhlCisgICAgICAgICdMZWhyc3R1aGwgZnVlciBNaWtyb2Jpb2xvZ2llJyBvZiB0aGUgVFUgTXVlbmNoZW4gZ2FpbnMgdGhlCisgICAgICAgIHJpZ2h0IHRvIGluY29ycG9yYXRlIHRoZXNlIGNoYW5nZXMgaW50byBBUkIgYW5kIHRvIHJlZGlzdHJpYnV0ZQorICAgICAgICB0aGVtIHdpdGggZnV0dXJlIHZlcnNpb25zIG9mIEFSQi4KKworICAgIERFQklBTiBESVNUUklCVVRJT04KKworICAgICAgICBIZXJlYnkgYW55Ym9keSBpcyBncmFudGVkIHRoZSByaWdodCB0byBidWlsZCBkZWJpYW4tcGFrZXRzCisgICAgICAgIG9mIHRoZSBBUkIgc29mdHdhcmUgcGFja2FnZSAoaHR0cDo6Ly93d3cuYXJiLWhvbWUuZGUvKSBhbmQKKyAgICAgICAgcHVibGlzaCB0aGVtIG9uIGRlYmlhbiBtaXJyb3JzIChvciBhbnkgb3RoZXIgd2F5IG9mCisgICAgICAgIGRlYmlhbi1kaXN0cmlidXRpb24pLgorCisgICAgICAgIFRoaXMgaW5jbHVkZXMgYW55IGRlYmlhbiBkZXJpdmF0ZXMgbGlrZSB1YnVudHUuCisKKyAgICAgICAgVGhlIEFSQiBkZXZlbG9wZXJzIG1heSAoYnV0IG1vc3QgbGlrZWx5IHdvbnQgZXZlcikgcmV2b2tlCisgICAgICAgIHRoaXMgZ3JhbnRpbmcuIElmIHJlYWxseSBkb25lIHNvLCBpdCdsbCBvbmx5IGFmZmVjdCBBUkIKKyAgICAgICAgdmVyc2lvbnMgcmVsZWFzZWQgYWZ0ZXIgc3VjaCBhIHJldm9jYXRpb24uCisKKyAgICBESVNDTEFJTUVSCisKKyAgICAgICAgVEhFIFRVIE1VRU5DSEVOIEFORCBUSEUgVkFSSU9VUyBBVVRIT1JTIE9GIEFSQiBHSVZFIE5PCisgICAgICAgIFdBUlJBTlRJRVMsIEVYUFJFU1NFRCBPUiBJTVBMSUVEIEZPUiBUSEUgU09GVFdBUkUgQU5ECisgICAgICAgIERPQ1VNRU5UQVRJT04gUFJPVklERUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPIFdBUlJBTlRZCisgICAgICAgIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgV0FSUkFOVFkgT0YgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgICAgICAgIFBVUlBPU0UuICBVc2VyIHVuZGVyc3RhbmRzIHRoZSBzb2Z0d2FyZSBpcyBhIHJlc2VhcmNoIHRvb2wgZm9yCisgICAgICAgIHdoaWNoIG5vIHdhcnJhbnRpZXMgYXMgdG8gY2FwYWJpbGl0aWVzIG9yIGFjY3VyYWN5IGFyZSBtYWRlLAorICAgICAgICBhbmQgdXNlciBhY2NlcHRzIHRoZSBzb2Z0d2FyZSAiYXMgaXMuIiBVc2VyIGFzc3VtZXMgdGhlIGVudGlyZQorICAgICAgICByaXNrIGFzIHRvIHRoZSByZXN1bHRzIGFuZCBwZXJmb3JtYW5jZSBvZiB0aGUgc29mdHdhcmUgYW5kCisgICAgICAgIGRvY3VtZW50YXRpb24uIFRoZSBhYm92ZSBwYXJ0aWVzIGNhbm5vdCBiZSBoZWxkIGxpYWJsZSBmb3IgYW55CisgICAgICAgIGRpcmVjdCwgaW5kaXJlY3QsIGNvbnNlcXVlbnRpYWwgb3IgaW5jaWRlbnRhbCBkYW1hZ2VzIHdpdGgKKyAgICAgICAgcmVzcGVjdCB0byBhbnkgY2xhaW0gYnkgdXNlciBvciBhbnkgdGhpcmQgcGFydHkgb24gYWNjb3VudCBvZiwKKyAgICAgICAgb3IgYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2Ygc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQKKyAgICAgICAgbWF0ZXJpYWxzLiBUaGlzIGRpc2NsYWltZXIgY292ZXJzIGJvdGggdGhlIEFSQiBjb3JlCisgICAgICAgIGFwcGxpY2F0aW9ucyBhbmQgYWxsIGV4dGVybmFsIHByb2dyYW1zIHVzZWQgYnkgQVJCLgorCisKK0NvcHlyaWdodCBub3RpY2VzIGZvciBwcm9ncmFtcyBkaXN0cmlidXRlcyB0b2dldGhlciB3aXRoIEFSQgorCisgICAgR0RFCisKKyAgICAgICAgVGhlIEdlbmV0aWMgRGF0YSBFbnZpcm9ubWVudCAoR0RFKSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbgorICAgICAgICBhcmUgbm90IGluIHRoZSBwdWJsaWMgZG9tYWluLiBQb3J0aW9ucyBvZiB0aGlzIGNvZGUgYXJlIG93bmVkCisgICAgICAgIGFuZCBjb3B5cmlnaHRlZCBieSB0aGUgVGhlIEJvYXJkIG9mIFRydXN0ZWVzIG9mIHRoZSBVbml2ZXJzaXR5CisgICAgICAgIG9mIElsbGlub2lzIGFuZCBieSBTdGV2ZW4gU21pdGguIEV4dGVybmFsIGZ1bmN0aW9ucyB1c2VkIGJ5CisgICAgICAgIEdERSBhcmUgdGhlIHByb3BlcnR5IG9mIHRoZWlyIGF1dGhvcnMuIFRoaXMgcmVsZWFzZSBvZiB0aGUgR0RFCisgICAgICAgIHByb2dyYW0gYW5kIGRvY3VtZW50YXRpb24gbWF5IG5vdCBiZSBzb2xkLCBvciBpbmNvcnBvcmF0ZWQKKyAgICAgICAgaW50byBhIGNvbW1lcmNpYWwgcHJvZHVjdCwgaW4gd2hvbGUgb3IgaW4gcGFydCB3aXRob3V0IHRoZQorICAgICAgICBleHByZXNzZWQgd3JpdHRlbiBjb25zZW50IG9mIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIGFuZCBvZgorICAgICAgICBpdHMgYXV0aG9yLCBTdGV2ZW4gU21pdGguCisKKyAgICAgICAgQWxsIGludGVyZXN0ZWQgcGFydGllcyBtYXkgcmVkaXN0cmlidXRlIHRoZSBHREUgYXMgbG9uZyBhcyBhbGwKKyAgICAgICAgY29waWVzIGFyZSBhY2NvbXBhbmllZCBieSB0aGlzIGRvY3VtZW50YXRpb24sIGFuZCBhbGwKKyAgICAgICAgY29weXJpZ2h0IG5vdGljZXMgcmVtYWluIGludGFjdC4gIFBhcnRpZXMgaW50ZXJlc3RlZCBpbgorICAgICAgICByZWRpc3RyaWJ1dGlvbiBtdXN0IGRvIHNvIG9uIGEgbm9uLXByb2ZpdCBiYXNpcywgY2hhcmdpbmcgb25seQorICAgICAgICBmb3IgY29zdCBvZiBtZWRpYS4gIE1vZGlmaWNhdGlvbnMgdG8gdGhlIEdERSBjb3JlIGVkaXRvcgorICAgICAgICBzaG91bGQgYmUgZm9yd2FyZGVkIHRvIHRoZSBhdXRob3IgU3RldmVuIFNtaXRoLiAgRXh0ZXJuYWwKKyAgICAgICAgcHJvZ3JhbXMgdXNlZCBieSB0aGUgR0RFIGFyZSBjb3B5cmlnaHRlZCBieSwgYW5kIGFyZSB0aGUKKyAgICAgICAgcHJvcGVydHkgb2YgdGhlaXIgcmVzcGVjdGl2ZSBhdXRob3JzIHVubGVzcyBvdGhlcndpc2Ugc3RhdGVkLgorCisKKworICAgIFBIWUxJUAorCisgICAgICAgIChjKSBDb3B5cmlnaHQgMTk4Ni0xOTkzIGJ5IEpvc2VwaCBGZWxzZW5zdGVpbiBhbmQgdGhlCisgICAgICAgIFVuaXZlcnNpdHkgb2YgV2FzaGluZ3Rvbi4gUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHkgdGhpcworICAgICAgICBkb2N1bWVudCBwcm92aWRlZCB0aGF0IG5vIGZlZSBpcyBjaGFyZ2VkIGZvciBpdCBhbmQgdGhhdCB0aGlzCisgICAgICAgIGNvcHlyaWdodCBub3RpY2UgaXMgbm90IHJlbW92ZWQuCisKKyAgICBMU0FEVAorCisgICAgICAgIExFQVNUIFNRVUFSRVMgQUxHT1JJVEhNIEZPUiBGSVRUSU5HIEFERElUSVZFIFRSRUVTIFRPCisgICAgICAgIFBST1hJTUlUWSBEQVRBCisKKyAgICAgICAgR0VFUlQgREUgU09FVEUgIC0tICBWRVJTSU9OIDEuMDEgLSBGRUIuIDE5ODMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWRVJTSU9OIDEuMDIgLSBKVU5FIDE5ODMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBWRVJTSU9OIDEuMDMgLSBKVUxZIDE5ODMKKworICAgICAgLSAnQycgdmVyc2lvbiBieSBNaWNoYWVsIE1hY3Vpa2VuYXMsIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMKKworICAgICAgICBSRUZFUkVOQ0U6IERFIFNPRVRFLCBHLiBBIExFQVNUIFNRVUFSRVMgQUxHT1JJVEhNIEZPUiBGSVRUSU5HCisgICAgICAgICAgIEFERElUSVZFIFRSRUVTIFRPIFBST1hJTUlUWSBEQVRBLiBQU1lDSE9NRVRSSUtBLCAxOTgzLCA0OCwKKyAgICAgICAgICAgNjIxLTYyNi4KKyAgICAgICAgICAgREUgU09FVEUsIEcuIEFERElUSVZFIFRSRUUgUkVQUkVTRU5UQVRJT05TIE9GIElOQ09NUExFVEUKKyAgICAgICAgICAgRElTU0lNSUxBUklUWSBEQVRBLiBRVUFMSVRZIEFORCBRVUFOVElUWSwgMTk4NCwgMTgsCisgICAgICAgICAgIDM4Ny0zOTMuCisKKyAgICAgIC0gUkVNQVJLUworCisgICAgICAgICAgICAtLS0tLS0KKworICAgICAgICAxKSBUSEUgUFJPR1JBTSBVU0VTIFNVQlJPVVRJTkVTIEZST00gVEhFIFBPUlQgTElCUkFSWSBGT1IKKyAgICAgICAgICAgRVJST1IgSEFORExJTkcsIERZTkFNSUMgU1RPUkFHRSBBTExPQ0FUSU9OIEFORCBTUEVDSUZJQ0EtCisgICAgICAgICAgIFRJT04gT0YgTUFDSElORS1ERVBFTkRFTlQgQ09OU1RBTlRTLgorICAgICAgICAgICBDRi4gRk9YLCBQLkEuLCBIQUxMLCBBLkQuLCAmIFNDSFJZRVIsIE4uTC4KKworICAgICAgICAgICAgVEhFIFBPUlQgTUFUSEVNQVRJQ0FMIFNVQlJPVVRJTkUgTElCUkFZLiBBQ00gVFJBTlMuIE9OIE1BVEguCisgICAgICAgICAgICBTT0ZUVy4sIDE5NzgsIDQsIDEwNC0xMjYuCisKKyAgICAgICAgICAgICAgICAgQUxHT1JJVEhNIDUyOC4gRlJBTUVXT1JLIEZPUiBBIFBPUlRBQkxFIExJQlJBUlkuCisgICAgICAgICAgICAgICAgIEFDTSBUUkFOUy4gT04gTUFUSC4gU09GVFcuLCAxOTc4LCA0LCAxNzctMTg4LgorICAgICAgICAyKSBVTklGT1JNTFkgRElTVFJJQlVURUQgUkFORE9NIE5VTUJFUlMgQVJFIEdFTkVSQVRFRCBCWSBBCisgICAgICAgICAgIFBST0NFRFVSRSBEVUUgVE8gU0NIUkFHRS4gQ0YuCisgICAgICAgICAgIFNDSFJBR0UsIEwuICBBIE1PUkUgUE9SVEFCTEUgRk9SVFJBTiBSQU5ET00gTlVNQkVSIEdFTkVSQVRPUi4KKyAgICAgICAgICAgQUNNIFRSQU5TLiBPTiBNQVRILiBTT0ZUVy4sIDE5NzksIDUsIDEzMi0xMzguCisgICAgICAgIDMpIFNVQlJPVVRJTkVTIFZBMTRBRCBBTkQgVkExNEFDIEFSRSBBREFQVEVEIEZST00gVEhFCisgICAgICAgICAgIEhBUldFTEwgU1VCUk9VVElORSBMSUJSQVJZICgxOTc5IEVESVRJT04pLgorICAgICAgICA0KSBBTFRIT1VHSCBUSElTIFBST0dSQU0gSEFTIEJFRU4gQ0FSRUZVTExZIFRFU1RFRCwgVEhFCisgICAgICAgICAgIEFVVEhPUiBESVNDTEFJTVMgQU5ZIFJFU1BPTlNBQklMSVRZIEZPUiBQT1NTSUJMRQorICAgICAgICAgICBFUlJPUlMuCisKKyAgICBCTEFTVAorCisgICAgICAgIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICAgICAgICAqCisgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgUFVCTElDIERPTUFJTiBOT1RJQ0UKKyAgICAgICAgKiAgICAgICAgICAgICAgIE5hdGlvbmFsIENlbnRlciBmb3IgQmlvdGVjaG5vbG9neSBJbmZvcm1hdGlvbgorICAgICAgICAqCisgICAgICAgICogIFRoaXMgc29mdHdhcmUvZGF0YWJhc2UgaXMgYSAiVW5pdGVkIFN0YXRlcyBHb3Zlcm5tZW50IFdvcmsiIHVuZGVyIHRoZQorICAgICAgICAqICB0ZXJtcyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBDb3B5cmlnaHQgQWN0LiAgSXQgd2FzIHdyaXR0ZW4gYXMgcGFydCBvZgorICAgICAgICAqICB0aGUgYXV0aG9yJ3Mgb2ZmaWNpYWwgZHV0aWVzIGFzIGEgVW5pdGVkIFN0YXRlcyBHb3Zlcm5tZW50IGVtcGxveWVlIGFuZAorICAgICAgICAqICB0aHVzIGNhbm5vdCBiZSBjb3B5cmlnaHRlZC4gIFRoaXMgc29mdHdhcmUvZGF0YWJhc2UgaXMgZnJlZWx5IGF2YWlsYWJsZQorICAgICAgICAqICB0byB0aGUgcHVibGljIGZvciB1c2UuIFRoZSBOYXRpb25hbCBMaWJyYXJ5IG9mIE1lZGljaW5lIGFuZCB0aGUgVS5TLgorICAgICAgICAqICBHb3Zlcm5tZW50IGhhdmUgbm90IHBsYWNlZCBhbnkgcmVzdHJpY3Rpb24gb24gaXRzIHVzZSBvciByZXByb2R1Y3Rpb24uCisgICAgICAgICoKKyAgICAgICAgKiAgQWx0aG91Z2ggYWxsIHJlYXNvbmFibGUgZWZmb3J0cyBoYXZlIGJlZW4gdGFrZW4gdG8gZW5zdXJlIHRoZSBhY2N1cmFjeQorICAgICAgICAqICBhbmQgcmVsaWFiaWxpdHkgb2YgdGhlIHNvZnR3YXJlIGFuZCBkYXRhLCB0aGUgTkxNIGFuZCB0aGUgVS5TLgorICAgICAgICAqICBHb3Zlcm5tZW50IGRvIG5vdCBhbmQgY2Fubm90IHdhcnJhbnQgdGhlIHBlcmZvcm1hbmNlIG9yIHJlc3VsdHMgdGhhdAorICAgICAgICAqICBtYXkgYmUgb2J0YWluZWQgYnkgdXNpbmcgdGhpcyBzb2Z0d2FyZSBvciBkYXRhLiBUaGUgTkxNIGFuZCB0aGUgVS5TLgorICAgICAgICAqICBHb3Zlcm5tZW50IGRpc2NsYWltIGFsbCB3YXJyYW50aWVzLCBleHByZXNzIG9yIGltcGxpZWQsIGluY2x1ZGluZworICAgICAgICAqICB3YXJyYW50aWVzIG9mIHBlcmZvcm1hbmNlLCBtZXJjaGFudGFiaWxpdHkgb3IgZml0bmVzcyBmb3IgYW55IHBhcnRpY3VsYXIKKyAgICAgICAgKiAgcHVycG9zZS4KKyAgICAgICAgKgorICAgICAgICAqICBQbGVhc2UgY2l0ZSB0aGUgYXV0aG9yIGluIGFueSB3b3JrIG9yIHByb2R1Y3QgYmFzZWQgb24gdGhpcyBtYXRlcmlhbC4KKyAgICAgICAgKgorICAgICAgICAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisgICAgICAgIFdhcnJlbiBHaXNoCisgICAgICAgIE5DQkkvTkxNCisKKyAgICBDT05WRVJUX0FMTgorCisgICAgICAgIGNvbnZlcnRfYWxuIC0tICBhbiBhbGlnbm1lbnQob3Igc2VxdWVuY2UpIGNvbnZlcnRlciB3cml0dGVuIGJ5IFdlbi1NaW4gS3VhbgorICAgICAgICAgICAgICAgICAgICAgICAgZm9yIHRoZSBSaWJvc29tYWwgRGF0YWJhc2UgUHJvamVjdChSRFApLCBBcHJpbCAyOCwgMTk5Mi4KKworCisgICAgZmFzdGRuYW1sCisKKyAgICAgICAgZmFzdEROQW1sLCBhIHByb2dyYW0gZm9yIGVzdGltYXRpb24gb2YgcGh5bG9nZW5ldGljIHRyZWVzIGZyb20KKyAgICAgICAgc2VxdWVuY2VzLiBDb3B5cmlnaHQgKEMpIDE5OTgsIDE5OTksIDIwMDAgYnkgR2FyeSBKLiBPbHNlbgorCisgICAgICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgbWF5IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAgICAgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAgICAgICAgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YKKyAgICAgICAgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICAgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZQorICAgICAgICB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkCisgICAgICAgIHdhcnJhbnR5IG9mIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAgICAgICAgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgICAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworICAgICAgICB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLAorICAgICAgICA1OSBUZW1wbGUgUGxhY2UgLSBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcsIFVTQS4KKworICAgICAgICBGb3IgYW55IG90aGVyIGVucXVpcmllcyB3cml0ZSB0byBHYXJ5IEouIE9sc2VuLCBEZXBhcnRtZW50IG9mCisgICAgICAgIE1pY3JvYmlvbG9neSwgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcywgVXJiYW5hLCBJTCA2MTgwMSwgVVNBCisKKyAgICAgICAgT3Igc2VuZCBFLW1haWwgdG8gZ2FyeUBwaHlsby5saWZlLnVpdWMuZWR1CisKKyAgICAgICAgZmFzdEROQW1sIGlzIGJhc2VkIGluIHBhcnQgb24gdGhlIHByb2dyYW0gZG5hbWwgYnkgSm9zZXBoIEZlbHNlbnN0ZWluLgorCisgICAgICAgIENvcHlyaWdodCBub3RpY2UgZnJvbSBkbmFtbDoKKworICAgICAgICAgICAgdmVyc2lvbiAzLjMuIChjKSBDb3B5cmlnaHQgMTk4NiwgMTk5MCBieSB0aGUgVW5pdmVyc2l0eSBvZgorICAgICAgICAgICAgV2FzaGluZ3RvbiBhbmQgSm9zZXBoIEZlbHNlbnN0ZWluLiAgV3JpdHRlbiBieSBKb3NlcGgKKyAgICAgICAgICAgIEZlbHNlbnN0ZWluLiAgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHkgYW5kIHVzZSB0aGlzCisgICAgICAgICAgICBwcm9ncmFtIHByb3ZpZGVkIG5vIGZlZSBpcyBjaGFyZ2VkIGZvciBpdCBhbmQgcHJvdmlkZWQKKyAgICAgICAgICAgIHRoYXQgdGhpcyBjb3B5cmlnaHQgbm90aWNlIGlzIG5vdCByZW1vdmVkLgorCisgICAgICAgIFdoZW4gcHVibGlzaGluZyB3b3JrIHRoYXQgYmFzZWQgb24gcmVzdWx0cyBmcm9tIGZhc3RETkFtbCBwbGVhc2UgY2l0ZToKKworICAgICAgICAgICAgRmVsc2Vuc3RlaW4sIEouICAxOTgxLiAgRXZvbHV0aW9uYXJ5IHRyZWVzIGZyb20gRE5BCisgICAgICAgICAgICBzZXF1ZW5jZXM6IEEgbWF4aW11bSBsaWtlbGlob29kIGFwcHJvYWNoLgorICAgICAgICAgICAgSi4gTW9sLiBFdm9sLiAxNzogMzY4LTM3Ni4KKworICAgICAgICAgICAgYW5kCisKKyAgICAgICAgICAgIE9sc2VuLCBHLiBKLiwgTWF0c3VkYSwgSC4sIEhhZ3N0cm9tLCBSLiwgYW5kIE92ZXJiZWVrLCBSLgorICAgICAgICAgICAgMTk5NC4gIGZhc3RETkFtbDogQSB0b29sIGZvciBjb25zdHJ1Y3Rpb24gb2YgcGh5bG9nZW5ldGljCisgICAgICAgICAgICB0cmVlcyBvZiBETkEgc2VxdWVuY2VzIHVzaW5nIG1heGltdW0gbGlrZWxpaG9vZC4KKyAgICAgICAgICAgIENvbXB1dC4gQXBwbC4gQmlvc2NpLiAxMDogNDEtNDguCisKKworICAgIHRyZWVwdXp6bGUKKworICAgICAgICB0cmVlcHV6emxlIGlzIHB1Ymxpc2hlZCB1bmRlciB0aGUgR1BMIChHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRSkKKyAgICAgICAgd2hpY2ggaXMgcHJvdmlkZWQgaW4gJ2xpYi9HUEwudHh0Jy4KKworICAgIG1vbHBoeQorCisgICAgICAgIE1PTFBIWTogQSBDb21wdXRlciBQcm9ncmFtIFBhY2thZ2UgZm9yIE1vbGVjdWxhciBQaHlsb2dlbmV0aWNzCisKKyAgICAgICAgUmVhZG1lCisgICAgICAgICAgICAgICBUaGlzIGlzIHRoZSBNT0xQSFkgKFByb3RNTCkgZGlzdHJpYnV0aW9uLCAgdmVyc2lvbiAyLjMuCisgICAgICAgICAgICAgICAgQ29weXJpZ2h0IChjKSAxOTkyLTE5OTYsIEp1biBBZGFjaGkgJiBNYXNhbWkgSGFzZWdhd2EuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICAgICAgICAgICAgICAgTU9MUEhZIGlzIGEgcHJvZ3JhbSBwYWNrYWdlIGZvciBNT0xlY3VsYXIgUEhZbG9nZW5ldGljcy4KKworICAgICAgICBQcm90TUwgaXMgYSBtYWluIHByb2dyYW0gaW4gTU9MUEhZIGZvciBpbmZlcnJpbmcgZXZvbHV0aW9uYXJ5IHRyZWVzIGZyb20KKyAgICAgICAgUFJPVGVpbiAoYW1pbm8gYWNpZCkgc2VxdWVuY2VzIGJ5IHVzaW5nIHRoZSBNYXhpbXVtIExpa2VsaWhvb2QgbWV0aG9kLgorCisgICAgICAgIFByb2dyYW1zIChDIGxhbmd1YWdlKQorICAgICAgICAgIFByb3RNTDogTWF4aW11bSBMaWtlbGlob29kIEluZmVyZW5jZSBvZiBQcm90ZWluIFBoeWxvZ2VueQorICAgICAgICAgIE51Y01MOiAgTWF4aW11bSBMaWtlbGlob29kIEluZmVyZW5jZSBvZiBOdWNsZWljIEFjaWQgUGh5bG9nZW55CisgICAgICAgICAgUHJvdFNUOiBCYXNpYyBTdGF0aXN0aWNzIG9mIFByb3RlaW4gU2VxdWVuY2VzCisgICAgICAgICAgTnVjU1Q6ICBCYXNpYyBTdGF0aXN0aWNzIG9mIE51Y2xlaWMgQWNpZCBTZXF1ZW5jZXMKKyAgICAgICAgICBOSmRpc3Q6IE5laWdoYm9yIEpvaW5pbmcgUGh5bG9nZW55IGZyb20gRGlzdGFuY2UgTWF0cml4CisgICAgICAgIFV0aWxpdGllcyAoUGVybCkKKyAgICAgICAgICBtb2xsaXN0OiAgZ2V0IGlkZW50aWZpZXJzIGxpc3QgICAgICAgIG1vbHJldjogICByZXZlcnNlIEROQSBzZXF1ZW5jZXMKKyAgICAgICAgICBtb2xjYXQ6ICAgY29uY2F0ZW5hdGUgc2VxdWVuY2VzICAgICAgIG1vbGN1dDogICBnZXQgcGFydGlhbCBzZXF1ZW5jZXMKKyAgICAgICAgICBtb2xtZXJnZTogbWVyZ2Ugc2VxdWVuY2VzICAgICAgICAgICAgIG51YzJwdG46ICBETkEgLT4gQW1pbm8gYWNpZAorICAgICAgICAgIHJtaW5zZGVsOiByZW1vdmUgSU5TL0RFTCBzaXRlcyAgICAgICAgbW9sY29kb246IGdldCBzcGVjaWZpZWQgY29kb24gc2l0ZXMKKyAgICAgICAgICBtb2xpbmZvOiAgZ2V0IHZhcmllZCBzaXRlcyAgICAgICAgICAgIG1vbDJtb2w6ICBNT0xQSFkgZm9ybWF0IGJlYXV0aWZlcgorICAgICAgICAgIGlubDJtb2w6ICBJbnRlcmxlYXZlZCAtPiBNT0xQSFkgICAgICAgbW9sMmlubDogIE1PTFBIWSAtPiBJbnRlcmxlYXZlZAorICAgICAgICAgIG1vbDJwaHk6ICBNT0xQSFkgLT4gU2VxdWVudGlhbCAgICAgICAgcGh5Mm1vbDogIFNlcXVlbnRpYWwgLT4gTU9MUEhZCisgICAgICAgICAgbXVzdDJtb2w6IE1VU1QgLT4gTU9MUEhZICAgICAgICAgICAgICBldGMuCisKKyAgICAgICAgTU9MUEhZIGlzIGEgZnJlZSBzb2Z0d2FyZSwgYW5kIHlvdSBjYW4gdXNlIGFuZCByZWRpc3RyaWJ1dGUgaXQuCisgICAgICAgIFRoZSBwcm9ncmFtcyBhcmUgd3JpdHRlbiBpbiBhIHN0YW5kYXJkIHN1YnNldCBvZiBDIHdpdGggVU5JWC1saWtlIE9TLgorICAgICAgICBUaGUgdXRpbGl0aWVzIGFyZSB3cml0dGVuIGluIHRoZSAiUGVybCIgKFZlci40LjAzNikgd2l0aCBVTklYLWxpa2UgT1MuCisgICAgICAgIE1PTFBIWSBoYXMgYmVlbiB0ZXN0ZWQgb24gU1VONCdzIChjYyAmIGdjYyB3aXRoIFNVTi1PUyA0LjEuMykgYW5kCisgICAgICAgIEhQOTAwMC83MDAgKGNjLCBjODkgJiBnY2Mgd2l0aCBIUC1VWCA5LjA1KS4KKyAgICAgICAgSG93ZXZlciwgTU9MUEhZIGhhcyBOT1QgYmVlbiB0ZXN0ZWQgb24gVkFYLCBJQk0tUEMsIGFuZCBNYWNpbnRvc2guCisKKyAgICAgICAgTkVUV09SSyBESVNUUklCVVRJT04gT05MWTogVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIE1PTFBIWSBpcyBhbHdheXMgYXZhaWxhYmxlCisgICAgICAgIGJ5IGFub255bW91cyBmdHAgaW4gZnRwLmlzbS5hYy5qcDogL3B1Yi9JU01MSUIvTU9MUEhZLy4KKworICAgIHJlYWRzZXEKKworCisgICAgICAgICBSZWFkU2VxICAtLSAxIEZlYiA5MworCisgICAgICAgICBSZWFkcyBhbmQgd3JpdGVzIG51Y2xlaWMvcHJvdGVpbiBzZXF1ZW5jZXMgaW4gdmFyaW91cworICAgICAgICAgZm9ybWF0cy4gRGF0YSBmaWxlcyBtYXkgaGF2ZSBtdWx0aXBsZSBzZXF1ZW5jZXMuCisKKyAgICAgICAgIENvcHlyaWdodCAxOTkwIGJ5IGQuZy5naWxiZXJ0CisgICAgICAgICBiaW9sb2d5IGRlcHQuLCBpbmRpYW5hIHVuaXZlcnNpdHksIGJsb29taW5ndG9uLCBpbiA0NzQwNQorICAgICAgICAgZS1tYWlsOiBnaWxiZXJ0ZEBiaW8uaW5kaWFuYS5lZHUKKworICAgICAgICAgVGhpcyBwcm9ncmFtIG1heSBiZSBmcmVlbHkgY29waWVkIGFuZCB1c2VkIGJ5IGFueW9uZS4KKyAgICAgICAgIERldmVsb3BlcnMgYXJlIGVuY291cmdlZCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBpbiB0aGVpcgorICAgICAgICAgcHJvZ3JhbXMsIHJhdGhlciB0aGFuIGRldmlzZSB0aGVpciBvd24gcHJpdmF0ZSBzZXF1ZW5jZQorICAgICAgICAgZm9ybWF0LgorCisgICAgICAgICBUaGlzIHNob3VsZCBjb21waWxlIGFuZCBydW4gd2l0aCBhbnkgQU5TSSBDIGNvbXBpbGVyLgorICAgICAgICAgUGxlYXNlIGFkdmlzZSBtZSBvZiBhbnkgYnVncywgYWRkaXRpb25zIG9yIGNvcnJlY3Rpb25zLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvYXJqIGIvbGljZW5zZXMvYXJqCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ZWQ3MWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9hcmoKQEAgLTAsMCArMSwxNyBAQAorQ29weXJpZ2h0IChjKSAxOTkxLTIwMDAgYnkgQVJKIFNvZnR3YXJlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCisgICBUaGlzIGNvZGUgbWF5IGJlIGZyZWVseSB1c2VkIGluIHByb2dyYW1zIHRoYXQgYXJlIE5PVCBBUkogYXJjaGl2ZXJzCisgICAoYm90aCBjb21wcmVzcyBhbmQgZXh0cmFjdCBBUkogYXJjaGl2ZXMpLgorCisgICBJZiB5b3Ugd2lzaCB0byBkaXN0cmlidXRlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIHByb2dyYW0sIHlvdQorICAgTVVTVCBpbmRpY2F0ZSB0aGF0IGl0IGlzIGEgbW9kaWZpZWQgdmVyc2lvbiBib3RoIGluIHRoZSBwcm9ncmFtIGFuZAorICAgc291cmNlIGNvZGUuCisKKyAgIFdlIGFyZSBob2xkaW5nIHRoZSBjb3B5cmlnaHQgb24gdGhlIHNvdXJjZSBjb2RlLCBzbyBwbGVhc2UgZG8gbm90CisgICBkZWxldGUgb3VyIG5hbWUgZnJvbSB0aGUgcHJvZ3JhbSBmaWxlcyBvciBmcm9tIHRoZSBkb2N1bWVudGF0aW9uLgorCisgICBXZSB3aXNoIHRvIGdpdmUgY3JlZGl0IHRvIEhhcnVoaWtvIE9rdW11cmEgZm9yIHByb3ZpZGluZyB0aGUKKyAgIGJhc2ljIGlkZWFzIGZvciBBUkogYW5kIFVOQVJKIGluIGhpcyBwcm9ncmFtIEFSLiAgUGxlYXNlIG5vdGUKKyAgIHRoYXQgVU5BUkogaXMgc2lnbmlmaWNhbnRseSBkaWZmZXJlbnQgZnJvbSBBUiBmcm9tIGFuIGFyY2hpdmUKKyAgIHN0cnVjdHVyYWwgcG9pbnQgb2Ygdmlldy4KKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvYXMtaXMgYi9saWNlbnNlcy9hcy1pcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmQzNjFkCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvYXMtaXMKQEAgLTAsMCArMSwzMyBAQAorTm90ZTogVGhpcyBsaWNlbnNlIGxhYmVsIGlzIGRlcHJlY2F0ZWQsIHNvIGRvbid0IHVzZSBpdCBmb3IgbmV3IHBhY2thZ2VzLgorVW5mb3J0dW5hdGVseSwgImFzLWlzIiBoYXMgYmVlbiAoYWIpdXNlZCBhbHNvIGZvciBub24tZnJlZSBzb2Z0d2FyZSBhbmQKK3lvdSBjYW5ub3QgcmVseSBvbiBpdC4gUGxlYXNlIGNoZWNrIHRoZSB1cHN0cmVhbSBsaWNlbnNlIGluc3RlYWQuCisKKyJhcy1pcyIgaW4gaXRzIG9yaWdpbmFsbHkgaW50ZW5kZWQgc2Vuc2UgaXMgbm93IGNvdmVyZWQgYnkgdGhlIE9TSS1hcHByb3ZlZAorIkhQTkQiIChIaXN0b3JpY2FsIFBlcm1pc3Npb24gTm90aWNlIGFuZCBEaXNjbGFpbWVyKS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgaXMgYSBnZW5lcmljIHBsYWNlIGhvbGRlciBmb3IgYSBjbGFzcyBvZiBsaWNlbnNlcyB0aGF0IGJvaWwgZG93biB0byBkbworbm8gZ3VhcmFudGVlcyBhbmQgYWxsIHlvdSBnZXQgaXMgd2hhdCB5b3UgaGF2ZS4gVGhlIGxhbmd1YWdlIGlzIHVzdWFsbHkKK3NpbWlsYXIgdG86CisKKyAgUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzCisgIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGFuZCB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQKKyAgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXJzIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGUKKyAgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZworICBkb2N1bWVudGF0aW9uLCBhbmQgdGhhdCB0aGUgc2FtZSBuYW1lIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCisgIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywKKyAgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiBXZSBtYWtlIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUKKyAgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKKyAgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCisKKworWW91IHdpbGwgbmVlZCB0byBjaGVjayB0aGUgbGljZW5zZSB0aGF0IGNhbWUgd2l0aCB0aGUgc29mdHdhcmUgZm9yIHRoZSBleGFjdAorc3BlY2lmaWNzLiBHZW5lcmFsbHkgeW91IGFyZSBmcmVlIHRvIGRvIG1vc3QgYW55dGhpbmcgeW91IHdhbnQgd2l0aCAiYXMgaXMiCitzb2Z0d2FyZSBidXQgeW91IHNob3VsZCBub3QgdGFrZSB0aGlzIGxpY2Vuc2UgYXMgbGVnYWwgYWR2aWNlLgorCitOb3RlOiBNb3N0IGFsbCBsaWNlbnNlIGhhdmUgYW4gImFzIGlzIiBjbGF1c2UuIEZvciBvdXIgcHVycG9zZXMgdGhpcyBkb2VzCitub3QgbWFrZSBhbGwgc29mdHdhcmUgaW4gdGhpcyBjYXRlZ29yeS4gVGhpcyBjYXRlZ29yeSBpcyBmb3Igc29mdHdhcmUgd2l0aAordmVyeSBsaXR0bGUgcmVzdHJpY3Rpb25zLgorCitUaGUgaW5mb3JtYXRpb24gaW4gdGhpcyBsaWNlbnNlIGFib3V0IGxpY2Vuc2VzIGlzIHByZXNlbnRlZCAiYXMgaXMiLiA6LVAKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL2FzdHJvbG9nIGIvbGljZW5zZXMvYXN0cm9sb2cKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTMyNTg1ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL2FzdHJvbG9nCkBAIC0wLDAgKzEsMjcgQEAKK1RoZSBncmFwaGljcyBkYXRhYmFzZSBhbmQgY2hhcnQgZGlzcGxheSByb3V0aW5lcwordXNlZCBpbiB0aGlzIHByb2dyYW0gYXJlIENvcHlyaWdodCAoQykgMTk5MS0xOTk4IGJ5IFdhbHRlciBELiBQdWxsZW4KKyhBc3RhcmFAbXNuLmNvbSwgaHR0cDovL3d3dy5tYWdpdGVjaC5jb20vfmNydWlzZXIxL2FzdHJvbG9nLmh0bSkuCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gZnJlZWx5IHVzZSBhbmQgZGlzdHJpYnV0ZSB0aGVzZSByb3V0aW5lcworcHJvdmlkZWQgb25lIGRvZXNuJ3Qgc2VsbCwgcmVzdHJpY3QsIG9yIHByb2ZpdCBmcm9tIHRoZW0gaW4gYW55IHdheS4KK01vZGlmaWNhdGlvbiBpcyBhbGxvd2VkIHByb3ZpZGVkIHRoZXNlIG5vdGljZXMgcmVtYWluIHdpdGggYW55CithbHRlcmVkIG9yIGVkaXRlZCB2ZXJzaW9ucyBvZiB0aGUgcHJvZ3JhbS4KKworVGhlIG1haW4gcGxhbmV0YXJ5IGNhbGN1bGF0aW9uIHJvdXRpbmVzIHVzZWQgaW4gdGhpcyBwcm9ncmFtIGhhdmUKK2JlZW4gQ29weXJpZ2h0ZWQgYW5kIHRoZSBjb3JlIG9mIHRoaXMgcHJvZ3JhbSBpcyBiYXNpY2FsbHkgYQorY29udmVyc2lvbiB0byBDIG9mIHRoZSByb3V0aW5lcyBjcmVhdGVkIGJ5IEphbWVzIE5lZWx5IGFzIGxpc3RlZCBpbgorTWljaGFlbCBFcmxld2luZSdzICdNYW51YWwgb2YgQ29tcHV0ZXIgUHJvZ3JhbW1pbmcgZm9yIEFzdHJvbG9nZXJzJywKK2F2YWlsYWJsZSBmcm9tIE1hdHJpeCBTb2Z0d2FyZS4gVGhlIGNvcHlyaWdodCBnaXZlcyB1cyBwZXJtaXNzaW9uIHRvCit1c2UgdGhlIHJvdXRpbmVzIGZvciBwZXJzb25hbCB1c2UgYnV0IG5vdCB0byBzZWxsIHRoZW0gb3IgcHJvZml0IGZyb20KK3RoZW0gaW4gYW55IHdheS4KKworVGhlIFBvc3RTY3JpcHQgY29kZSB3aXRoaW4gdGhlIGNvcmUgZ3JhcGhpY3Mgcm91dGluZXMgYXJlIHByb2dyYW1tZWQKK2FuZCBDb3B5cmlnaHQgKEMpIDE5OTItMTk5MyBieSBCcmlhbiBELiBXaWxsb3VnaGJ5LiBDb25kaXRpb25zIGFyZQoraWRlbnRpY2FsIHRvIHRob3NlIGFib3ZlLgorCitUaGUgZXh0ZW5kZWQgYWNjdXJhdGUgZXBoZW1lcmlzIGRhdGFiYXNlcyBhbmQgZm9ybXVsYXMgYXJlIGZyb20gdGhlCitjYWxjdWxhdGlvbiByb3V0aW5lcyBpbiB0aGUgcHJvZ3JhbSAiUGxhY2FsYyIgYW5kIGFyZSBwcm9ncmFtbWVkIGFuZAorQ29weXJpZ2h0IChDKSAxOTg5LDE5OTEsMTk5MyBieSBBc3Ryb2RpZW5zdCBBRyBhbmQgQWxvaXMgVHJlaW5kbAorVGhlIHVzZSBvZiB0aGF0IHNvdXJjZSBjb2RlIGlzIHN1YmplY3QgdG8gcmVndWxhdGlvbnMgbWFkZSBieQorQXN0cm9kaWVuc3QgWnVyaWNoLCBhbmQgdGhlIGNvZGUgaXMgbm90IGluIHRoZSBwdWJsaWMgZG9tYWluLiBUaGlzCitjb3B5cmlnaHQgbm90aWNlIG11c3Qgbm90IGJlIGNoYW5nZWQgb3IgcmVtb3ZlZCBieSBhbnkgdXNlciBvZiB0aGlzCitwcm9ncmFtLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvYXRoZXJvcy1oYWwgYi9saWNlbnNlcy9hdGhlcm9zLWhhbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGU4YTJmCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvYXRoZXJvcy1oYWwKQEAgLTAsMCArMSw0MiBAQAorQWxsIGZpbGVzIGNvbnRhaW5lZCBpbiB0aGlzIGRpc3RyaWJ1dGlvbiBhcmUgY292ZXJlZCBieSB0aGUgZm9sbG93aW5nCitjb3B5cmlnaHQgdW5sZXNzIGV4cGxpY2l0bHkgaWRlbnRpZmllZCBvdGhlcndpc2UuICBOb3RlIHRoYXQgdGhpcworY29weXJpZ2h0IGRvZXMgX05PVF8gY29udGFpbiBhICJvciBHUEwiIGNsYXVzZSBhbmQgZG9lcyBfTk9UXyBwZXJtaXQKK3JlZGlzdHJpYnV0aW9uIHdpdGggY2hhbmdlcy4KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDItMjAwNiBTYW0gTGVmZmxlciwgRXJybm8gQ29uc3VsdGluZywgQXRoZXJvcworICogQ29tbXVuaWNhdGlvbnMsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3JtcyBhcmUgcGVybWl0dGVkCisgKiBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gVGhlIG1hdGVyaWFscyBjb250YWluZWQgaGVyZWluIGFyZSB1bm1vZGlmaWVkIGFuZCBhcmUgdXNlZAorICogICAgdW5tb2RpZmllZC4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIE5PCisgKiAgICAnJ1dBUlJBTlRZJycgZGlzY2xhaW1lciBiZWxvdyAoJydEaXNjbGFpbWVyJycpLCB3aXRob3V0CisgKiAgICBtb2RpZmljYXRpb24uCisgKiAzLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgYXQgbWluaW11bSBhCisgKiAgICBkaXNjbGFpbWVyIHNpbWlsYXIgdG8gdGhlIERpc2NsYWltZXIgYmVsb3cgYW5kIGFueSByZWRpc3RyaWJ1dGlvbgorICogICAgbXVzdCBiZSBjb25kaXRpb25lZCB1cG9uIGluY2x1ZGluZyBhIHN1YnN0YW50aWFsbHkgc2ltaWxhcgorICogICAgRGlzY2xhaW1lciByZXF1aXJlbWVudCBmb3IgZnVydGhlciBiaW5hcnkgcmVkaXN0cmlidXRpb24uCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lcyBvZiB0aGUgYWJvdmUtbGlzdGVkIGNvcHlyaWdodCBob2xkZXJzIG5vciB0aGUKKyAqICAgIG5hbWVzIG9mIGFueSBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgKiAgICBwcm9kdWN0IGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbi4KKyAqCisgKiBOTyBXQVJSQU5UWQorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogJydBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBOT05JTkZSSU5HRU1FTlQsCisgKiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgKiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRVMuCisgKgorICogJElkOiBhdGhlcm9zLWhhbCx2IDEuMSAyMDA3LzAyLzIwIDEyOjA5OjExIGdlbnN0ZWYgRXhwICQKKyAqLwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvYmFrb21hIGIvbGljZW5zZXMvYmFrb21hCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjNzJiZTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9iYWtvbWEKQEAgLTAsMCArMSwzMSBAQAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogICAgICAgICAgICAgICAgICAgICAgICBCYUtvTWEgRm9udHMgQ29sbGVjdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgICAgICAgICAgICAgICAgICAgICAgID09PT09PT0gTGV2ZWwgQiA9PT09PT09ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMS4xLzEyLU5vdi05NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgICAgICAgICBDb3B5cmlnaHQgKEMpIDE5OTQsIEJhc2lsIEsuIE1hbHlzaGV2LiBBbGwgUmlnaHRzIFJlc2VydmVkLiAgICAgICAqCisqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogICAgICAgICAgICAgICAgICAgICAgICAgICBMaWNlbnNpbmcgYWdyZWVtZW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RoZSBhdXRob3Igb2YgdGhpcyBmb250cyBncmFudHMgdG8gYW55IGluZGl2aWR1YWwgb3Igbm9uLWNvbW1lcmNpYWwKK29yZ2FuaXphdGlvbiB0aGUgcmlnaHQgdG8gdXNlIGFuZCB0byBtYWtlIGFuIHVubGltaXRlZCBudW1iZXIgb2YgY29waWVzIG9mCitmdWxsIHBhY2thZ2Ugb3Igc2VsZWN0ZWQgZm9udHMgd2hlbiB0aGlzIGlzIGRvbmUgV0lUSE9VVCBDSEFSR0UKK2FuZCBoYXMgYXR0YWNoZWQgdGhpcyBmaWxlIHdpdGggbGljZW5jZSBhZ3JlZW1lbnQuCisKK1RoaXMgZm9udHMgY2Fubm90IGJlIHNvbGQgb3IgZGlzdHJpYnV0ZWQgd2l0aCBhbnkgY29tbWVyY2lhbCBwcm9kdWN0IG9yIHVzZWQKK2luIGFueSBjb21tZXJjaWFsIG9yZ2FuaXphdGlvbiB3aXRob3V0IGFkZGl0aW9uYWwgYWdyZWVtZW50IHdpdGggYXV0aG9yLgorSWYgeW91IHdhbnQgdG8gY2hhcmdlIGEgc21hbGwgZmVlIHZpYSBkaXN0cmlidXRpb24gdGhlc2UgZm9udHMKK29yIGFueSBkZXJpdmF0aW9ucyBmcm9tIHRoaXMgZm9udHMsIHlvdSBzaG91bGQgY29udGFjdCB0aGUgYXV0aG9yLgorCitUaGlzIHJlc3RyaWN0aW9uIGlzIGFsc28gdHJ1ZSBmb3Igb25seSBvdXRsaW5lcyBmcm9tIHRoaXMgZm9udHMKK2kuZS4gb3V0bGluZXMgZXhwb3J0ZWQgaW50byBvdGhlciBmb250IGZvcm1hdHMsIGZvciBleGFtcGxlIFRydWVUeXBlIG9yIFR5cGUzLgorCitUaGlzIHJlc3RyaWN0aW9uIGlzIG5vdCBpbnRlbmRlZCB0byBhcHBseSB0byBjb25uZWN0IHRpbWUgY2hhcmdlcywKK29yIGZsYXQgcmF0ZSBjb25uZWN0aW9uL2Rvd25sb2FkIGZlZXMgZm9yIGVsZWN0cm9uaWMgYnVsbGV0aW4gYm9hcmQgc2VydmljZXMuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvYmFzcyBiL2xpY2Vuc2VzL2Jhc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIwODhiMgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL2Jhc3MKQEAgLTAsMCArMSwyNyBAQAorUHJlYW1ibGU6CisgIEJhc2ljYWxseSwgZ2l2ZSB0aGlzIGdhbWUgYXdheSwgc2hhcmUgaXQgd2l0aCB5b3VyIGZyaWVuZHMuIERvbid0IHJlbW92ZSB0aGlzCitSZWFkbWUsIG9yIHByZXRlbmQgeW91IHdyb3RlIGl0LiBZb3UgY2FuIGluY2x1ZGUgaXQgaW4gYSBzb2Z0d2FyZSBjb2xsZWN0aW9uLAorbGlrZSBhIGxpbnV4IGRpc3RyaWJ1dGlvbiBvciBjb3ZlcmRpc2sgKHdoaWNoIG1heSBiZSBzb2xkKSwgYnV0IHVzaW5nIGl0IGluCit0aGluZ3MgbGlrZSBjb21tZXJjaWFsIGFkdmVudHVyZSBnYW1lIGNvbGxlY3Rpb25zIHdpdGhvdXQgYXNraW5nIGlzIGp1c3QgcGxheWluZworZGlydHkuIFRoaXMgcHJlYW1ibGUgaXMgbm90IGxlZ2FsbHkgYmluZGluZywgYnV0IGlzIHRvIGNsYXJpZnkgdGhlIGludGVudCBvZiB0aGUKK2ZvbGxvd2luZyBsaWNlbnNlLgorCitMaWNlbnNlOgorIDEpIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGlzIGdhbWUgZm9yIGZyZWUgb24gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhpcyByZWFkbWUKK2FuZCBhbGwgYXNzb2NpYXRlZCBjb3B5cmlnaHQgbm90aWNlcyBhbmQgZGlzY2xhaW1lcnMgYXJlIGxlZnQgaW50YWN0LgorCisgMikgWW91IG1heSBjaGFyZ2UgYSByZWFzb25hYmxlIGNvcHlpbmcgZmVlIGZvciB0aGlzIGFyY2hpdmUsIGFuZCBtYXkgZGlzdHJpYnV0ZQoraXQgaW4gYWdncmVnYXRlIGFzIHBhcnQgb2YgYSBsYXJnZXIgJiBwb3NzaWJseSBjb21tZXJjaWFsIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbgorKHN1Y2ggYXMgYSBMaW51eCBkaXN0cmlidXRpb24gb3IgbWFnYXppbmUgY292ZXJkaXNrKS4gWW91IG11c3QgcHJvdmlkZSBwcm9wZXIKK2F0dHJpYnV0aW9uIGFuZCBlbnN1cmUgdGhpcyByZWFkbWUgYW5kIGFsbCBhc3NvY2lhdGVkIGNvcHlyaWdodCBub3RpY2VzLCBhbmQKK2Rpc2NsYWltZXJzIGFyZSBsZWZ0IGludGFjdC4KKworIDMpIFlvdSBtYXkgbm90IGNoYXJnZSBhIGZlZSBmb3IgdGhlIGdhbWUgaXRzZWxmLiBUaGlzIGluY2x1ZGVzIHJlc2VsbGluZyB0aGUKK2dhbWUgYXMgYW4gaW5kaXZpZHVhbCBpdGVtLgorCis0KSBBbGwgZ2FtZSBjb250ZW50IGlzIChDKSBSZXZvbHV0aW9uIFNvZnR3YXJlIEx0ZC4gVGhlIFNjdW1tVk0gZW5naW5lIGlzIChDKQorVGhlIFNjdW1tVk0gVGVhbSAod3d3LnNjdW1tdm0ub3JnKQorCis1KSBUSEUgR0FNRURBVEEgSU4gVEhJUyBBUkNISVZFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKK0lNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HIEFORCBOT1QgTElNSVRFRCBUTyBBTlkgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvYmF1ZGxpbmUgYi9saWNlbnNlcy9iYXVkbGluZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjcxMTY2Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvYmF1ZGxpbmUKQEAgLTAsMCArMSw4IEBACitMaWNlbnNlIEFncmVlbWVudDoKKworICAgIFRoaXMgc29mdHdhcmUgaXMgZnJlZSBhbmQgaXQgY29tZXMgd2l0aCBubyB3YXJyYW50eS4KKyAgICBXZSBhcmUgbm90IGxpYWJsZSBmb3IgYW55IGRhbWFnZSBjYXVzZWQgYnkgdGhlIHVzZSBvZiB0aGlzIHByb2R1Y3QuCisgICAgWW91IGFyZSBub3QgYWxsb3dlZCB0byBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUuCisgICAgWW91IGFyZSBub3QgYWxsb3dlZCB0byByZXZlcnNlIGVuZ2luZWVyIHRoaXMgc29mdHdhcmUuCisgICAgQnkgZG93bmxvYWRpbmcgdGhlIGJhdWRsaW5lIC50YXIgcGFja2FnZSB5b3UgYWdyZWUgdG8gdGhlIHRlcm1zIG9mIG91ciBsaWNlbnNlIGFncmVlbWVudC4KKyAgICBJZiB5b3UgZGVzaXJlIGEgd2FycmFudHkgb24gdGhpcyBwcm9kdWN0IGFuZCB5b3Ugd2lzaCB0byBwdXJjaGFzZSBhIHN1cHBvcnQgY29udHJhY3QgdGhlbiBwbGVhc2UgY29udGFjdCB1cy4gCmRpZmYgLS1naXQgYS9saWNlbnNlcy9iZWEucmkuanNyMTczIGIvbGljZW5zZXMvYmVhLnJpLmpzcjE3MwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZGEyMGUyCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvYmVhLnJpLmpzcjE3MwpAQCAtMCwwICsxLDEyMiBAQAorU3RyZWFtaW5nIEFQSSBmb3IgWE1MIChKU1ItMTczKSBTcGVjaWZpY2F0aW9uCitSZWZlcmVuY2UgSW1wbGVtZW50YXRpb24gCitMaWNlbnNlIEFncmVlbWVudAorCitSRUFEIFRIRSBURVJNUyBPRiBUSElTIChUSEUgIkFHUkVFTUVOVCIpIENBUkVGVUxMWSBCRUZPUkUgVklFV0lORyBPUiBVU0lORyBUSEUgU09GVFdBUkUgTElDRU5TRUQgSEVSRVVOREVSLiAgQlkgVklFV0lORyBPUiBVU0lORyBUSEUgU09GVFdBUkUsIFlPVSBBR1JFRSBUTyBUSEUgVEVSTVMgT0YgVEhJUyBBR1JFRU1FTlQuIElGIFlPVSBBUkUgQUNDRVNTSU5HIFRIRSBTT0ZUV0FSRSBFTEVDVFJPTklDQUxMWSwgSU5ESUNBVEUgWU9VUiBBQ0NFUFRBTkNFIE9GIFRIRVNFIFRFUk1TIEJZIFNFTEVDVElORyBUSEUgIkFDQ0VQVCIgQlVUVE9OIEFUIFRIRSBFTkQgT0YgVEhJUyBBR1JFRU1FTlQuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gQUxMIFRIRVNFIFRFUk1TLCBQUk9NUFRMWSBSRVRVUk4gVEhFIFVOVVNFRCBTT0ZUV0FSRSBUTyBPUklHSU5BTCBDT05UUklCVVRPUiwgREVGSU5FRCBIRVJFSU4uCisKKzEuMCAgREVGSU5JVElPTlMuCisgCisxLjEuICJCRUEiIG1lYW5zIEJFQSBTeXN0ZW1zLCBJbmMuLCB0aGUgbGljZW5zb3Igb2YgdGhlIE9yaWdpbmFsIENvZGUuCisKKzEuMi4gIkNvbnRyaWJ1dG9yIiBtZWFucyBCRUEgYW5kIGVhY2ggZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy4KKworMS4zLiAiQ292ZXJlZCBDb2RlIiBtZWFucyB0aGUgT3JpZ2luYWwgQ29kZSBvciBNb2RpZmljYXRpb25zIG9yIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSBhbmQgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlIGluY2x1ZGluZyBwb3J0aW9ucyB0aGVyZW9mIGFuZCBjb3JyZXNwb25kaW5nIGRvY3VtZW50YXRpb24gcmVsZWFzZWQgd2l0aCB0aGUgc291cmNlIGNvZGUuCisKKzEuNC4gIkV4ZWN1dGFibGUiIG1lYW5zIENvdmVyZWQgQ29kZSBpbiBhbnkgZm9ybSBvdGhlciB0aGFuIFNvdXJjZSBDb2RlLgorCisxLjUuICJGQ1MiIG1lYW5zIGZpcnN0IGNvbW1lcmNpYWwgc2hpcG1lbnQgb2YgYSBwcm9kdWN0LgorCisxLjYuICJNb2RpZmljYXRpb25zIiBtZWFucyBhbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgc3Vic3RhbmNlIG9yIHN0cnVjdHVyZSBvZiBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW55IHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuIFdoZW4gQ292ZXJlZCBDb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhIE1vZGlmaWNhdGlvbiBpczoKKworKGEpICBBbnkgYWRkaXRpb24gdG8gb3IgZGVsZXRpb24gZnJvbSB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgT3JpZ2luYWwgQ29kZSBvciBwcmV2aW91cyBNb2RpZmljYXRpb25zLgorCisoYikgIEFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuCisKKzEuNy4gIk9yaWdpbmFsIENvZGUiIG1lYW5zIFNvdXJjZSBDb2RlIG9mIGNvbXB1dGVyIHNvZnR3YXJlIGNvZGUgUmVmZXJlbmNlIEltcGxlbWVudGF0aW9uLgorCisxLjguICJQYXRlbnQgQ2xhaW1zIiBtZWFucyBhbnkgcGF0ZW50IGNsYWltKHMpLCBub3cgb3duZWQgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBtZXRob2QsIHByb2Nlc3MsIGFuZCBhcHBhcmF0dXMgY2xhaW1zLCBpbiBhbnkgcGF0ZW50IGZvciB3aGljaCB0aGUgZ3JhbnRvciBoYXMgdGhlIHJpZ2h0IHRvIGdyYW50IGEgbGljZW5zZS4KKworMS45LiAg4oCcUmVmZXJlbmNlIEltcGxlbWVudGF0aW9u4oCdIG1lYW5zIHRoZSBwcm90b3R5cGUgb3Ig4oCccHJvb2Ygb2YgY29uY2VwdOKAnSBpbXBsZW1lbnRhwq10aW9uIG9mIHRoZSBTcGVjaWZpY2F0aW9uIGRldmVsb3BlZCBhbmQgbWFkZSBhdmFpbGFibGUgZm9yIGxpY2Vuc2UgYnkgb3Igb24gYmVoYWxmIG9mIEJFQS4KKworMS4xMC4gIlNvdXJjZSBDb2RlIiBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIENvdmVyZWQgQ29kZSBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQsIGluY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uLCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiBhbiBFeGVjdXRhYmxlLCBvciBzb3VyY2UgY29kZSBkaWZmZXJlbnRpYWwgY29tcGFyaXNvbnMgYWdhaW5zdCBlaXRoZXIgdGhlIE9yaWdpbmFsIENvZGUgb3IgYW5vdGhlciB3ZWxsIGtub3duLCBhdmFpbGFibGUgQ292ZXJlZCBDb2RlIG9mIHRoZSBDb250cmlidXRvcidzIGNob2ljZS4gCisKKzEuMTEuICDigJxTcGVjaWZpY2F0aW9u4oCdIG1lYW5zIHRoZSB3cml0dGVuIHNwZWNpZmljYXRpb24gZm9yIHRoZSBTdHJlYW1pbmcgQVBJIGZvciBYTUwgLCBKYXZhIHRlY2hub2xvZ3kgZGV2ZWxvcGVkIHB1cnN1YW50IHRvIHRoZSBKYXZhIENvbW11bml0eSBQcm9jZXNzLgorMS4xMi4gIlRlY2hub2xvZ3kgQ29tcGF0aWJpbGl0eSBLaXQiIG9yIOKAnFRDS+KAnSBtZWFucyB0aGUgZG9jdW1lbnRhdGlvbiwgdGVzdGluZyB0b29scyBhbmQgdGVzdCBzdWl0ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uIGFzIG1heSBiZSByZXZpc2VkIGJ5IEJFQSBmcm9tIHRpbWUgdG8gdGltZSwgdGhhdCBpcyBwcm92aWRlZCBzbyB0aGF0IGFuIGltcGxlbWVudGVyIG9mIHRoZSBTcGVjaWZpwq1jYXRpb24gbWF5IGRldGVybWluZSBpZiBpdHMgaW1wbGVtZW50YXRpb24gaXMgY29tcGxpYW50IHdpdGggdGhlIFNwZWNpZmljYXRpb24uCisKKzEuMTMuICJZb3UiIChvciAiWW91ciIpIG1lYW5zIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgZXhlcmNpc2luZyByaWdodHMgdW5kZXIsIGFuZCBjb21wbHlpbmcgd2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIEFncmVlbWVudCBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzc3VlZCB1bmRlciBTZWN0aW9uIDYuMS4gRm9yIGxlZ2FsIGVudGl0aWVzLCAiWW91IiBpbmNsdWRlcyBhbnkgZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIFlvdS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiIG1lYW5zIChhKSB0aGUgcG93ZXIsIGRpcmVjdCBvciBpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5IGNvbnRyYWN0IG9yIG90aGVyd2lzZSwgb3IgKGIpIG93bmVyc2hpcCBvZiBtb3JlIHRoYW4gZmlmdHkgcGVyY2VudCAoNTAlKSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgorCisyLjAgIFNPVVJDRSBDT0RFIExJQ0VOU0UuIAorCisyLjEuIENvcHlyaWdodCBHcmFudC4gIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgWW91IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3Mgb2YsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIGRpc3RyaWJ1dGUgYW5kIHN1YmxpY2Vuc2UgdGhlIENvdmVyZWQgQ29kZSBvZiBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGFuZCBzdWNoIGRlcml2YXRpdmUgd29ya3MsIGluIFNvdXJjZSBDb2RlIGFuZCBFeGVjdXRhYmxlIGZvcm0uCisKKzIuMi4gIFBhdGVudCBHcmFudC4gIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgWW91IGEgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCByb3lhbHR5LWZyZWUgcGF0ZW50IGxpY2Vuc2UgdW5kZXIgdGhlIFBhdGVudCBDbGFpbXMgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBpbXBvcnQgYW5kIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgQ292ZXJlZCBDb2RlIHByZXBhcmVkIGFuZCBwcm92aWRlZCBieSBzdWNoIENvbnRyaWJ1dG9yLCBpZiBhbnksIGluIFNvdXJjZSBDb2RlIGFuZCBFeGVjdXRhYmxlIGZvcm0uIFRoaXMgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgYXBwbHkgdG8gdGhlIENvdmVyZWQgQ29kZSBpZiwgYXQgdGhlIHRpbWUgYSBNb2RpZmljYXRpb24gaXMgYWRkZWQgYnkgdGhlIENvbnRyaWJ1dG9yLCBzdWNoIGFkZGl0aW9uIG9mIHRoZSBNb2RpZmljYXRpb24gY2F1c2VzIHN1Y2ggY29tYmluYXRpb24gdG8gYmUgY292ZXJlZCBieSB0aGUgUGF0ZW50IENsYWltcy4gVGhlIHBhdGVudCBsaWNlbnNlIHNoYWxsIG5vdCBhcHBseSB0byBhbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIE1vZGlmaWNhdGlvbi4KKworMi4zLiAgQ29uZGl0aW9ucyB0byBHcmFudHMuICBZb3UgdW5kZXJzdGFuZCB0aGF0IGFsdGhvdWdoIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRoZSBsaWNlbnNlcyB0byB0aGUgQ292ZXJlZCBDb2RlIHByZXBhcmVkIGJ5IGl0LCBubyBhc3N1cmFuY2VzIGFyZSBwcm92aWRlZCBieSBhbnkgQ29udHJpYnV0b3IgdGhhdCB0aGUgQ292ZXJlZCBDb2RlIGRvZXMgbm90IGluZnJpbmdlIHRoZSBwYXRlbnQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvZiBhbnkgb3RoZXIgZW50aXR5LiBFYWNoIENvbnRyaWJ1dG9yIGRpc2NsYWltcyBhbnkgbGlhYmlsaXR5IHRvIFlvdSBmb3IgY2xhaW1zIGJyb3VnaHQgYnkgYW55IG90aGVyIGVudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb2YgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQgbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIsIFlvdSBoZXJlYnkgYXNzdW1lIHNvbGUgcmVzcG9uc2liaWxpdHkgdG8gc2VjdXJlIGFueSBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG5lZWRlZCwgaWYgYW55LiBGb3IgZXhhbXBsZSwgaWYgYSB0aGlyZCBwYXJ0eSBwYXRlbnQgbGljZW5zZSBpcyByZXF1aXJlZCB0byBhbGxvdyBZb3UgdG8gZGlzdHJpYnV0ZSBDb3ZlcmVkIENvZGUsIGl0IGlzIFlvdXIgcmVzcG9uc2liaWxpdHkgdG8gYWNxdWlyZSB0aGF0IGxpY2Vuc2UgYmVmb3JlIGRpc3RyaWJ1dGluZyBzdWNoIGNvZGUuCisKKzIuNC4gIENvbnRyaWJ1dG9yc+KAmSBSZXByZXNlbnRhdGlvbi4gIEVhY2ggQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0IHRvIGl0cyBrbm93bGVkZ2UgaXQgaGFzIHN1ZmZpY2llbnQgY29weXJpZ2h0IHJpZ2h0cyBpbiB0aGUgQ292ZXJlZCBDb2RlIGl0IHByb3ZpZGVzICwgaWYgYW55LCB0byBncmFudCB0aGUgY29weXJpZ2h0IGxpY2Vuc2Ugc2V0IGZvcnRoIGluIHRoaXMgQWdyZWVtZW50LgorCiszLjAgIERJU1RSSUJVSU9OIFJFU1RSSUNUSU9OUy4KKworMy4xLiBBcHBsaWNhdGlvbiBvZiBBZ3JlZW1lbnQuCisKK1RoZSBNb2RpZmljYXRpb25zIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBTZWN0aW9uIDIuMC4gVGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgQ292ZXJlZCBDb2RlIG1heSBiZSBkaXN0cmlidXRlZCBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCBvciBhIGZ1dHVyZSB2ZXJzaW9uIG9mIHRoaXMgQWdyZWVtZW50IHJlbGVhc2VkIHVuZGVyIFNlY3Rpb24gNi4xLCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBZb3UgZGlzdHJpYnV0ZS4gWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgU291cmNlIENvZGUgdmVyc2lvbiB0aGF0IGFsdGVycyBvciByZXN0cmljdHMgdGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzIEFncmVlbWVudCBvciB0aGUgcmVjaXBpZW50cycgcmlnaHRzIGhlcmV1bmRlci4gSG93ZXZlciwgWW91IG1heSBpbmNsdWRlIGFuIGFkZGl0aW9uYWwgZG9jdW1lbnQgb2ZmZXJpbmcgdGhlIGFkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDMuMy4KKworMy4yLiBEZXNjcmlwdGlvbiBvZiBNb2RpZmljYXRpb25zLgorCitZb3UgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBDb2RlIHRvIHdoaWNoIFlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4gYSBmaWxlIGRvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIFlvdSBtYWRlIHRvIGNyZWF0ZSB0aGF0IENvdmVyZWQgQ29kZSBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdCB0aGUgTW9kaWZpY2F0aW9uIGlzIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwgQ29kZSBwcm92aWRlZCBieSBCRUEgYW5kIGluY2x1ZGluZyB0aGUgbmFtZSBvZiBCRUEgaW4gKGEpIHRoZSBTb3VyY2UgQ29kZSwgYW5kIChiKSBpbiBhbnkgbm90aWNlIGluIGFuIEV4ZWN1dGFibGUgdmVyc2lvbiBvciByZWxhdGVkIGRvY3VtZW50YXRpb24gaW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZSBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBDb3ZlcmVkIENvZGUuCisKKzMuMy4gUmVxdWlyZWQgTm90aWNlcy4KKworWW91IG11c3QgZHVwbGljYXRlIHRoZSBmb2xsb3dpbmcgbm90aWNlIGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlIENvZGU6CisKK+KAnChjKSAyMDAyLCAyMDAzIEJFQSBTeXN0ZW1zLCBJbmMuICBBbGwgcmlnaHRzIFJlc2VydmVkLiAgVGhlIGNvbnRlbnRzIG9mIHRoaXMgZmlsZSBhcmUgc3ViamVjdCB0byB0aGUgQkVBIFN0cmVhbWluZyBBUEkgZm9yIFhNTCBTcGVjaWZpY2F0aW9uIFJlZmVyZW5jZSBJbXBsZW1lbnRhdGlvbiBMaWNlbnNlIEFncmVlbWVudCAodGhlIOKAnEFncmVlbWVudOKAnSk7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgQWdyZWVtZW50LiBBIGNvcHkgb2YgdGhlIEFncmVlbWVudCBpcyBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy5iZWEuY29tL+KAnQorCitJZiBZb3UgY3JlYXRlZCBvbmUgb3IgbW9yZSBNb2RpZmljYXRpb24ocykgWW91IG1heSBhZGQgeW91ciBuYW1lIGFzIGEgQ29udHJpYnV0b3IgdG8gdGhlIGNvcHlyaWdodCBwb3J0aW9uIG9mIHRoZSBub3RpY2UgYWJvdmUuIFlvdSBtdXN0IGFsc28gZHVwbGljYXRlIHRoaXMgQWdyZWVtZW50IGluIGFueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgU291cmNlIENvZGUgd2hlcmUgWW91IGRlc2NyaWJlIHJlY2lwaWVudHMnIHJpZ2h0cyBvciBvd25lcnNoaXAgcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgQ29kZS4gWW91IG1heSBjaG9vc2UgdG8gb2ZmZXIsIGFuZCB0byBjaGFyZ2UgYSBmZWUgZm9yLCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9ucyB0byBvbmUgb3IgbW9yZSByZWNpcGllbnRzIG9mIENvdmVyZWQgQ29kZS4gSG93ZXZlciwgWW91IG1heSBkbyBzbyBvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgQkVBIG9yIGFueSBvdGhlciBDb250cmlidXRvci4gWW91IG11c3QgbWFrZSBpdCBhYnNvbHV0ZWx5IGNsZWFyIHRoYW4gYW55IHN1Y2ggd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbiBpcyBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgYW5kIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IEJFQSBhbmQgZXZlcnkgb3RoZXIgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgQkVBIG9yIHN1Y2ggb3RoZXIgQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2Ygd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgdGVybXMgWW91IG9mZmVyLgorCiszLjQuIERpc3RyaWJ1dGlvbiBvZiBFeGVjdXRhYmxlIFZlcnNpb25zLgorCitZb3UgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBpbiBFeGVjdXRhYmxlIGZvcm0gdW5kZXIgaXRzIG93biBsaWNlbnNlIGFncmVlbWVudCwgcHJvdmlkZWQgdGhhdDoKKworICAJKGEpIFlvdSBjb21wbHkgd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IGFuZAorCisoYikgWW91ciBsaWNlbnNlIGFncmVlbWVudDogIChpKSAgZWZmZWN0aXZlbHkgZGlzY2xhaW1zIG9uIGJlaGFsZiBvZiBhbGwgQ29udHJpYnV0b3JzIGFsbCB3YXJyYW50aWVzIGFuZCBjb25kaXRpb25zLCBleHByZXNzIGFuZCBpbXBsaWVkLCBpbmNsdWRpbmcgd2FycmFudGllcyBvciBjb25kaXRpb25zIG9mIHRpdGxlIGFuZCBub24taW5mcmluZ2VtZW50LCBhbmQgaW1wbGllZCB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgbWVyY2hhbnRhYmlsaXR5IGFuZCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZTsgKGlpKSAgZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIGFsbCBDb250cmlidXRvcnMgYWxsIGxpYWJpbGl0eSBmb3IgZGFtYWdlcywgaW5jbHVkaW5nIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgYW5kIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc3VjaCBhcyBsb3N0IHByb2ZpdHM7IChpaWkpIHN0YXRlcyB0aGF0IGFueSBwcm92aXNpb25zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgQWdyZWVtZW50IGFyZSBvZmZlcmVkIGJ5IHRoYXQgQ29udHJpYnV0b3IgYWxvbmUgYW5kIG5vdCBieSBhbnkgb3RoZXIgcGFydHk7IGFuZCAoaXYpICBzdGF0ZXMgdGhhdCBTb3VyY2UgQ29kZSBmb3IgdGhlIENvdmVyZWQgQ29kZSBpcyBhdmFpbGFibGUgZnJvbSBzdWNoIENvbnRyaWJ1dG9yLCBhbmQgaW5mb3JtcyBsaWNlbnNlZXMgaG93IHRvIG9idGFpbiBpdCBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuCisKKyhjKSBZb3UgZG8gbm90IHVzZSBhbnkgbWFya3MsIGJyYW5kcyBvciBsb2dvcyBhc3NvY2lhdGVkIHdpdGggdGhlIEpDUCBTcGVjaWZpY2F0aW9uLCBvciBvdGhlcndpc2UgcHJvbW90ZSBvciBtYXJrZXQgYW55IENvdmVyZWQgQ29kZSwgYXMgYmVpbmcgY29tcGF0aWJsZSwgY29tcGxpYW50LCBjb25mb3JtYW50ICBvciBvdGhlcndpc2UgY29uc2lzdGVudCB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uIHVubGVzcyBzdWNoIHByb2R1Y3QgcGFzc2VzLCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGRvY3VtZW50YXRpb24gKGluY2x1ZGluZyB0aGUgVENLIFVzZXJzIEd1aWRlLCBpZiBhbnkpLCB0aGUgbW9zdCBjdXJyZW50IFRDSyBhcHBsaWNhYmxlIHRvIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGUgU3BlY2lmaWNhdGlvbiBhbmQgYXZhaWxhYmxlIGZyb20gQkVBIG9uZSBodW5kcmVkIHR3ZW50eSAoMTIwKSBkYXlzIGJlZm9yZSBGQ1Mgb2Ygc3VjaCB2ZXJzaW9uIG9mIHRoZSBwcm9kdWN0OyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCBpZiBZb3UgZWxlY3QgdG8gdXNlIGEgdmVyc2lvbiBvZiB0aGUgVENLIGFsc28gcHJvdmlkZWQgYnkgQkVBIHRoYXQgaXMgbmV3ZXIgdGhhbiB0aGF0IHdoaWNoIGlzIHJlcXVpcmVkIHVuZGVyIHRoaXMgU2VjdGlvbiAyLjEoYikodiksIHRoZW4gWW91IGFncmVlIHRvIHBhc3Mgc3VjaCBUQ0suCisKKzMuNS4gIERpc3RyaWJ1dGlvbiBvZiBTb3VyY2UgQ29kZSBWZXJzaW9ucy4KKworV2hlbiBZb3UgbWFrZSBDb3ZlcmVkIENvZGUgYXZhaWxhYmxlIGluIFNvdXJjZSBDb2RlIGZvcm06CisKKyAgCShhKSBpdCBtdXN0IGJlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgQWdyZWVtZW50OyBhbmQKKyAKKyAgCShiKSBhIGNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGVhY2ggY29weSBvZiB0aGUgQ292ZXJlZCBDb2RlLiAgCisKK1lvdSBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkgY29weXJpZ2h0IG5vdGljZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgQ292ZXJlZCBDb2RlLiAgRWFjaCBDb250cmlidXRvciBtdXN0IGlkZW50aWZ5IGl0c2VsZiBhcyB0aGUgb3JpZ2luYXRvciBvZiBpdHMgY29udHJpYnV0aW9uIHRvIHRoZSBDb3ZlcmVkIENvZGUsIGlmIGFueSwgaW4gYSBtYW5uZXIgdGhhdCByZWFzb25hYmx5IGFsbG93cyBzdWJzZXF1ZW50IGxpY2Vuc2VlcyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiBlYWNoIHBvcnRpb24gb2YgdGhlIENvdmVyZWQgQ29kZS4KKworCisKKzQuMCAgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS4KKworQ09WRVJFRCBDT0RFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiAiQVMgSVMnJyBCQVNJUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBDT1ZFUkVEIENPREUgSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIENPVkVSRUQgQ09ERSBJUyBXSVRIIFlPVS4gU0hPVUxEIEFOWSBDT1ZFUkVEIENPREUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UgKE5PVCBCRUEgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIENPVkVSRUQgQ09ERSBJUyBBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLgorCis1LjAgIFRFUk1JTkFUSU9OLgorCis1LjEuIFRoaXMgQWdyZWVtZW50IGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gQWxsIHN1YmxpY2Vuc2VzIHRvIHRoZSBDb3ZlcmVkIENvZGUgd2hpY2ggYXJlIHByb3Blcmx5IGdyYW50ZWQgc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgc3Vydml2ZS4KKworNS4yLiBJZiBZb3UgaW5pdGlhdGUgbGl0aWdhdGlvbiBieSBhc3NlcnRpbmcgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIChleGNsdWRpbmcgZGVjbGFyYXRvcnkganVkZ21lbnQgYWN0aW9ucykgYWdhaW5zdCBCRUEgb3IgYSBDb250cmlidXRvciAoQkVBIG9yIENvbnRyaWJ1dG9yIGFnYWluc3Qgd2hvbSBZb3UgZmlsZSBzdWNoIGFjdGlvbiBpcyByZWZlcnJlZCB0byBhcyAiUGFydGljaXBhbnQiKSBhbGxlZ2luZyB0aGF0OgorCisoYSkgc3VjaCBQYXJ0aWNpcGFudCdzIENvdmVyZWQgQ29kZSBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0aGVuIGFueSBhbmQgYWxsIHJpZ2h0cyBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdG8gWW91IHVuZGVyIFNlY3Rpb25zIDIuMG9mIHRoaXMgQWdyZWVtZW50IHNoYWxsLCB1cG9uIDYwIGRheXMgbm90aWNlIGZyb20gUGFydGljaXBhbnQgdGVybWluYXRlIHByb3NwZWN0aXZlbHksIHVubGVzcyBpZiB3aXRoaW4gNjAgZGF5cyBhZnRlciByZWNlaXB0IG9mIG5vdGljZSBZb3UgZWl0aGVyOiAoaSkgYWdyZWUgaW4gd3JpdGluZyB0byBwYXkgUGFydGljaXBhbnQgYSBtdXR1YWxseSBhZ3JlZWFibGUgcmVhc29uYWJsZSByb3lhbHR5IGZvciBZb3VyIHBhc3QgYW5kIGZ1dHVyZSB1c2Ugb2YgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHN1Y2ggUGFydGljaXBhbnQsIG9yIChpaSkgd2l0aGRyYXcgWW91ciBsaXRpZ2F0aW9uIGNsYWltIHdpdGggcmVzcGVjdCB0byB0aGUgQ292ZXJlZCBDb2RlIGFnYWluc3Qgc3VjaCBQYXJ0aWNpcGFudC4gSWYgd2l0aGluIDYwIGRheXMgb2Ygbm90aWNlLCBhIHJlYXNvbmFibGUgcm95YWx0eSBhbmQgcGF5bWVudCBhcnJhbmdlbWVudCBhcmUgbm90IG11dHVhbGx5IGFncmVlZCB1cG9uIGluIHdyaXRpbmcgYnkgdGhlIHBhcnRpZXMgb3IgdGhlIGxpdGlnYXRpb24gY2xhaW0gaXMgbm90IHdpdGhkcmF3biwgdGhlIHJpZ2h0cyBncmFudGVkIGJ5IFBhcnRpY2lwYW50IHRvIFlvdSB1bmRlciBTZWN0aW9uIDIuMCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSBhdCB0aGUgZXhwaXJhdGlvbiBvZiB0aGUgNjAgZGF5IG5vdGljZSBwZXJpb2Qgc3BlY2lmaWVkIGFib3ZlLgorCisoYikgYW55IHNvZnR3YXJlLCBoYXJkd2FyZSwgb3IgZGV2aWNlLCBvdGhlciB0aGFuIHN1Y2ggUGFydGljaXBhbnQncyBDb3ZlcmVkIENvZGUsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gYW55IHJpZ2h0cyBncmFudGVkIHRvIFlvdSBieSBzdWNoIFBhcnRpY2lwYW50IHVuZGVyIFNlY3Rpb25zIDIuMCBhcmUgcmV2b2tlZCBlZmZlY3RpdmUgYXMgb2YgdGhlIGRhdGUgWW91IGZpcnN0IG1hZGUsIHVzZWQsIHNvbGQsIGRpc3RyaWJ1dGVkLCBvciBoYWQgbWFkZSwgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgUGFydGljaXBhbnQuCisKKzUuMy4gSWYgWW91IGFzc2VydCBhIHBhdGVudCBpbmZyaW5nZW1lbnQgY2xhaW0gYWdhaW5zdCBQYXJ0aWNpcGFudCBhbGxlZ2luZyB0aGF0IHN1Y2ggUGFydGljaXBhbnQncyBDb3ZlcmVkIENvZGUgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55IHBhdGVudCB3aGVyZSBzdWNoIGNsYWltIGlzIHJlc29sdmVkIChzdWNoIGFzIGJ5IGxpY2Vuc2Ugb3Igc2V0dGxlbWVudCkgcHJpb3IgdG8gdGhlIGluaXRpYXRpb24gb2YgcGF0ZW50IGluZnJpbmdlbWVudCBsaXRpZ2F0aW9uLCB0aGVuIHRoZSByZWFzb25hYmxlIHZhbHVlIG9mIHRoZSBsaWNlbnNlcyBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgMi4wIHNoYWxsIGJlIHRha2VuIGludG8gYWNjb3VudCBpbiBkZXRlcm1pbmluZyB0aGUgYW1vdW50IG9yIHZhbHVlIG9mIGFueSBwYXltZW50IG9yIGxpY2Vuc2UuCisKKzUuNC4gSW4gdGhlIGV2ZW50IG9mIHRlcm1pbmF0aW9uIHVuZGVyIFNlY3Rpb25zIDUuMSBvciA1LjIgYWJvdmUsIGFsbCBlbmQgdXNlciBsaWNlbnNlIGFncmVlbWVudHMgKGV4Y2x1ZGluZyBkaXN0cmlidXRvcnMgYW5kIHJlc2VsbGVycykgd2hpY2ggaGF2ZSBiZWVuIHZhbGlkbHkgZ3JhbnRlZCBieSBZb3Ugb3IgYW55IGRpc3RyaWJ1dG9yIGhlcmV1bmRlciBwcmlvciB0byB0ZXJtaW5hdGlvbiBzaGFsbCBzdXJ2aXZlIHRlcm1pbmF0aW9uLgorCis2LjAgIExJTUlUQVRJT04gT0YgTElBQklMSVRZLgorCitVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBZT1VCRUEsIEFOWSBPVEhFUiBDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIENPVkVSRUQgQ09ERSwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBBTlkgUEVSU09OIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NTIE9GIEdPT0RXSUxMLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFNVQ0ggUEFSVFkgU0hBTEwgSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZIFJFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFknUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRISVMgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgorCis3LjAgIFUuUy4gR09WRVJOTUVOVCBFTkQgVVNFUlMuIAorCitUaGUgQ292ZXJlZCBDb2RlIGlzIGEgImNvbW1lcmNpYWwgaXRlbSwiIGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluIDQ4IEMuRi5SLiAyLjEwMSAoT2N0LiAxOTk1KSwgY29uc2lzdGluZyBvZiAiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSIgYW5kICJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIGRvY3VtZW50YXRpb24sIiBhcyBzdWNoIHRlcm1zIGFyZSB1c2VkIGluIDQ4IEMuRi5SLiAxMi4yMTIgKFNlcHQuIDE5OTUpLiBDb25zaXN0ZW50IHdpdGggNDggQy5GLlIuIDEyLjIxMiBhbmQgNDggQy5GLlIuIDIyNy43MjAyLTEgdGhyb3VnaCAyMjcuNzIwMi00IChKdW5lIDE5OTUpLCBhbGwgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIENvdmVyZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIHNldCBmb3J0aCBoZXJlaW4uCisKKzguMCAgTUlTQ0VMTEFORU9VUy4gCisKK1RoaXMgQWdyZWVtZW50IHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4gVGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgZ292ZXJuZWQgYnkgQ2FsaWZvcm5pYSBsYXcgcHJvdmlzaW9ucyAoZXhjZXB0IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcsIGlmIGFueSwgcHJvdmlkZXMgb3RoZXJ3aXNlKSwgZXhjbHVkaW5nIGl0cyBjb25mbGljdC1vZi1sYXcgcHJvdmlzaW9ucy4gV2l0aCByZXNwZWN0IHRvIGRpc3B1dGVzIGluIHdoaWNoIGF0IGxlYXN0IG9uZSBwYXJ0eSBpcyBhIGNpdGl6ZW4gb2YsIG9yIGFuIGVudGl0eSBjaGFydGVyZWQgb3IgcmVnaXN0ZXJlZCB0byBkbyBidXNpbmVzcyBpbiB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLCBhbnkgbGl0aWdhdGlvbiByZWxhdGluZyB0byB0aGlzIEFncmVlbWVudCBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIEZlZGVyYWwgQ291cnRzIG9mIHRoZSBOb3J0aGVybiBEaXN0cmljdCBvZiBDYWxpZm9ybmlhLCB3aXRoIHZlbnVlIGx5aW5nIGluIFNhbnRhIENsYXJhIENvdW50eSwgQ2FsaWZvcm5pYSwgd2l0aCB0aGUgbG9zaW5nIHBhcnR5IHJlc3BvbnNpYmxlIGZvciBjb3N0cywgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgY291cnQgY29zdHMgYW5kIHJlYXNvbmFibGUgYXR0b3JuZXlzJyBmZWVzIGFuZCBleHBlbnNlcy4gVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBleHByZXNzbHkgZXhjbHVkZWQuIEFueSBsYXcgb3IgcmVndWxhdGlvbiB3aGljaCBwcm92aWRlcyB0aGF0IHRoZSBsYW5ndWFnZSBvZiBhIGNvbnRyYWN0IHNoYWxsIGJlIGNvbnN0cnVlZCBhZ2FpbnN0IHRoZSBkcmFmdGVyIHNoYWxsIG5vdCBhcHBseSB0byB0aGlzIEFncmVlbWVudC4KKworOS4wICBSRVNQT05TSUJJTElUWSBGT1IgQ0xBSU1TLgorCitBcyBiZXR3ZWVuIEJFQSBhbmQgdGhlIG90aGVyIENvbnRyaWJ1dG9ycywgZWFjaCBwYXJ0eSBpcyByZXNwb25zaWJsZSBmb3IgY2xhaW1zIGFuZCBkYW1hZ2VzIGFyaXNpbmcsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIG91dCBvZiBpdHMgdXRpbGl6YXRpb24gb2YgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCBZb3UgYWdyZWUgdG8gd29yayB3aXRoIEJFQSBhbmQgQ29udHJpYnV0b3JzIHRvIGRpc3RyaWJ1dGUgc3VjaCByZXNwb25zaWJpbGl0eSBvbiBhbiBlcXVpdGFibGUgYmFzaXMuIE5vdGhpbmcgaGVyZWluIGlzIGludGVuZGVkIG9yIHNoYWxsIGJlIGRlZW1lZCB0byBjb25zdGl0dXRlIGFueSBhZG1pc3Npb24gb2YgbGlhYmlsaXR5LgorCisKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL2Jlc3RjcnlwdCBiL2xpY2Vuc2VzL2Jlc3RjcnlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTEyYmRkCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvYmVzdGNyeXB0CkBAIC0wLDAgKzEsNjkgQEAKKworQkVTVENSWVBUIGZvciBMaW51eCAtIFBST0RVQ1QgTElDRU5TRSBJTkZPUk1BVElPTgorCitOT1RJQ0UgVE8gVVNFUlM6IENBUkVGVUxMWSBSRUFEIFRIRSBGT0xMT1dJTkcgTEVHQUwgQUdSRUVNRU5ULgorVVNFIE9GIFRIRSBCRVNUQ1JZUFQgU09GVFdBUkUgUFJPVklERUQgV0lUSCBUSElTIEFHUkVFTUVOVCAoVEhFICJTT0ZUV0FSRSIpIENPTlNUSVRVVEVTCitZT1VSIEFDQ0VQVEFOQ0UgT0YgVEhFU0UgVEVSTVMuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRSBURVJNUyBPRiBUSElTIEFHUkVFTUVOVCwKK0RPIE5PVCBJTlNUQUxMIEFORC9PUiBVU0UgVEhJUyBTT0ZUV0FSRS4gIFVTRVInUyBVU0UgT0YgVEhJUyBTT0ZUV0FSRSBJUyBDT05ESVRJT05FRAorVVBPTiBDT01QTElBTkNFIEJZIFVTRVIgV0lUSCBUSEUgVEVSTVMgT0YgVEhJUyBBR1JFRU1FTlQuCisKKzEuIExJQ0VOU0UgR1JBTlQuICBKZXRpY28sIEluYy4gZ3JhbnRzIHlvdSBhIGxpY2Vuc2UgdG8gdXNlIG9uZSBjb3B5IG9mIHRoZSB2ZXJzaW9uIG9mCit0aGlzIFNPRlRXQVJFIG9uIGFueSBvbmUgc3lzdGVtIGZvciBhcyBtYW55IGxpY2Vuc2VzIGFzIHlvdSBwdXJjaGFzZS4KKyJZb3UiIG1lYW5zIHRoZSBjb21wYW55LCBlbnRpdHkgb3IgaW5kaXZpZHVhbCB3aG9zZSBmdW5kcyBhcmUgdXNlZCB0byBwYXkgdGhlIGxpY2Vuc2UgZmVlLgorIlVzZSIgbWVhbnMgc3RvcmluZywgbG9hZGluZywgaW5zdGFsbGluZywgZXhlY3V0aW5nIG9yIGRpc3BsYXlpbmcgdGhlIFNPRlRXQVJFLgorWW91IG1heSBub3QgbW9kaWZ5IHRoZSBTT0ZUV0FSRSBvciBkaXNhYmxlIGFueSBsaWNlbnNpbmcgb3IgY29udHJvbCBmZWF0dXJlcyBvZgordGhlIFNPRlRXQVJFIGV4Y2VwdCBhcyBhbiBpbnRlbmRlZCBwYXJ0IG9mIHRoZSBTT0ZUV0FSRSdzIHByb2dyYW1taW5nIGZlYXR1cmVzLgorV2hlbiB5b3UgZmlyc3Qgb2J0YWluIGEgY29weSBvZiB0aGUgU09GVFdBUkUsIHlvdSBhcmUgZ3JhbnRlZCBhbiBldmFsdWF0aW9uIHBlcmlvZCBvZgorbm90IG1vcmUgdGhhbiAzMCBkYXlzLCBhZnRlciB3aGljaCB0aW1lIHlvdSBtdXN0IHBheSBmb3IgdGhlIFNPRlRXQVJFIGFjY29yZGluZwordG8gdGhlIHRlcm1zIGFuZCBwcmljZXMgZGlzY3Vzc2VkIGluIHRoZSBTT0ZUV0FSRSdzIGRvY3VtZW50YXRpb24sIG9yIHlvdSBtdXN0CityZW1vdmUgdGhlIFNPRlRXQVJFIGZyb20geW91ciBzeXN0ZW0uICBUaGlzIGxpY2Vuc2UgaXMgbm90IHRyYW5zZmVyYWJsZSB0byBhbnkKK290aGVyIHN5c3RlbSwgb3IgdG8gYW5vdGhlciBvcmdhbml6YXRpb24gb3IgaW5kaXZpZHVhbC4gIFlvdSBhcmUgZXhwZWN0ZWQgdG8gdXNlCit0aGUgU09GVFdBUkUgb24geW91ciBzeXN0ZW0gYW5kIHRvIHRob3JvdWdobHkgZXZhbHVhdGUgaXRzIHVzZWZ1bG5lc3MgYW5kIGZ1bmN0aW9uYWxpdHkKK2JlZm9yZSBtYWtpbmcgYSBwdXJjaGFzZS4gIFRoaXMgInRyeSBiZWZvcmUgeW91IGJ1eSIgYXBwcm9hY2ggaXMgdGhlIHVsdGltYXRlIGd1YXJhbnRlZQordGhhdCB0aGUgU09GVFdBUkUgd2lsbCBwZXJmb3JtIHRvIHlvdXIgc2F0aXNmYWN0aW9uOyB0aGVyZWZvcmUsIHlvdSB1bmRlcnN0YW5kIGFuZCBhZ3JlZQordGhhdCB0aGVyZSBpcyBubyByZWZ1bmQgcG9saWN5IGZvciBhbnkgcHVyY2hhc2Ugb2YgdGhlIFNPRlRXQVJFLgorCisyLiBPV05FUlNISVAuICBUaGUgU09GVFdBUkUgaXMgb3duZWQgYW5kIGNvcHlyaWdodGVkIGJ5IEpldGljbywgSW5jLiAgWW91ciBsaWNlbnNlCitjb25mZXJzIG5vIHRpdGxlIG9yIG93bmVyc2hpcCBpbiB0aGUgU09GVFdBUkUgYW5kIHNob3VsZCBub3QgYmUgY29uc3RydWVkIGFzIGEgc2FsZSBvZgorYW55IHJpZ2h0IGluIHRoZSBTT0ZUV0FSRSAuCisKKzMuIENPUFlSSUdIVC4gIFRoZSBTT0ZUV0FSRSBpcyBwcm90ZWN0ZWQgYnkgY29weXJpZ2h0IGxhdyBvZiBGaW5sYW5kIGFuZCBpbnRlcm5hdGlvbmFsCit0cmVhdHkgcHJvdmlzaW9ucy4gWW91IGFja25vd2xlZGdlIHRoYXQgbm8gdGl0bGUgdG8gdGhlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbgordGhlIFNPRlRXQVJFIGlzIHRyYW5zZmVycmVkIHRvIHlvdS4gIFlvdSBmdXJ0aGVyIGFja25vd2xlZGdlIHRoYXQgdGl0bGUgYW5kIGZ1bGwKK293bmVyc2hpcCByaWdodHMgdG8gdGhlIFNPRlRXQVJFIHdpbGwgcmVtYWluIHRoZSBleGNsdXNpdmUgcHJvcGVydHkgb2YgSmV0aWNvLCBJbmMKK2FuZCB5b3Ugd2lsbCBub3QgYWNxdWlyZSBhbnkgcmlnaHRzIHRvIHRoZSBTT0ZUV0FSRSBleGNlcHQgYXMgZXhwcmVzc2x5IHNldCBmb3J0aCBpbiB0aGlzIGxpY2Vuc2UuCitZb3UgYWdyZWUgdGhhdCBhbnkgY29waWVzIG9mIHRoZSBTT0ZUV0FSRSB3aWxsIGNvbnRhaW4gdGhlIHNhbWUgcHJvcHJpZXRhcnkgbm90aWNlcyB3aGljaAorYXBwZWFyIG9uIGFuZCBpbiB0aGUgU09GVFdBUkUuCisKKzQuIFJFVkVSU0UgRU5HSU5FRVJJTkcuIFlvdSBhZ3JlZSB0aGF0IHlvdSB3aWxsIG5vdCBhdHRlbXB0IHRvIHJldmVyc2UgY29tcGlsZSwgbW9kaWZ5LAordHJhbnNsYXRlLCBvciBkaXNhc3NlbWJsZSB0aGUgU09GVFdBUkUgaW4gd2hvbGUgb3IgaW4gcGFydC4KKworNS4gTk8gT1RIRVIgV0FSUkFOVElFUy4gIEpFVElDTywgSU5DIERPRVMgTk9UIFdBUlJBTlQgVEhBVCBUSEUgU09GVFdBUkUgSVMgRVJST1IgRlJFRS4KK0pFVElDTywgSU5DIERJU0NMQUlNUyBBTEwgT1RIRVIgV0FSUkFOVElFUyBXSVRIIFJFU1BFQ1QgVE8gVEhFIFNPRlRXQVJFLCBFSVRIRVIgRVhQUkVTUworT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTCitGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBSSUdIVFMuICBTT01FIEpVUklTRElDVElPTlMKK0RPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUyBPUiBMSU1JVEFUSU9OUyBPTiBIT1cgTE9ORyBBTiBJTVBMSUVECitXQVJSQU5UWSBNQVkgTEFTVCwgT1IgVEhFIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLAorU08gVEhFIEFCT1ZFIExJTUlUQVRJT05TIE9SIEVYQ0xVU0lPTlMgTUFZIE5PVCBBUFBMWSBUTyBZT1UuICBUSElTIFdBUlJBTlRZIEdJVkVTIFlPVQorU1BFQ0lGSUMgTEVHQUwgUklHSFRTIEFORCBZT1UgTUFZIEFMU08gSEFWRSBPVEhFUiBSSUdIVFMgV0hJQ0ggVkFSWSBGUk9NIEpVUklTRElDVElPTiBUTyBKVVJJU0RJQ1RJT04uCisKKzYuIFNFVkVSQUJJTElUWS4gIEluIHRoZSBldmVudCBvZiBpbnZhbGlkaXR5IG9mIGFueSBwcm92aXNpb24gb2YgdGhpcyBsaWNlbnNlLAordGhlIHBhcnRpZXMgYWdyZWUgdGhhdCBzdWNoIGludmFsaWRpdHkgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb2YgdGhlIHJlbWFpbmluZworcG9ydGlvbnMgb2YgdGhpcyBsaWNlbnNlLgorCis3LiBOTyBMSUFCSUxJVFkgRk9SIENPTlNFUVVFTlRJQUwgREFNQUdFUy4gIElOIE5PIEVWRU5UIFNIQUxMIEpFVElDTywgSU5DIE9SIElUUyBTVVBQTElFUlMKK0JFIExJQUJMRSBUTyBZT1UgRk9SIEFOWSBDT05TRVFVRU5USUFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIElORElSRUNUIERBTUFHRVMgT0YgQU5ZCitLSU5EIEFSSVNJTkcgT1VUIE9GIFRIRSBERUxJVkVSWSwgUEVSRk9STUFOQ0UgT1IgVVNFIE9GIFRIRSBTT0ZUV0FSRSwgRVZFTiBJRiBKRVRJQ08sIElOQworSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBJTiBOTyBFVkVOVCBXSUxMIEpFVElDTywgSU5DJyBMSUFCSUxJVFkKK0ZPUiBBTlkgQ0xBSU0sIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFRPUlQgT1IgQU5ZIE9USEVSIFRIRU9SWSBPRiBMSUFCSUxJVFksIEVYQ0VFRCBUSEUgTElDRU5TRQorRkVFIFBBSUQgQlkgWU9VLCBJRiBBTlkuCisKKzguIEdPVkVSTklORyBMQVcuICBUaGlzIGxpY2Vuc2Ugd2lsbCBiZSBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiBGaW5sYW5kIGFzIHRoZXkgYXJlIGFwcGxpZWQKK3RvIGFncmVlbWVudHMgYmV0d2VlbiBGaW5sYW5kIHJlc2lkZW50cyBlbnRlcmVkIGludG8gYW5kIHRvIGJlIHBlcmZvcm1lZCBlbnRpcmVseSB3aXRoaW4gRmlubGFuZC4KK1RoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBpcyBzcGVjaWZpY2FsbHkgZGlzY2xhaW1lZC4KKworOS4gRU5USVJFIEFHUkVFTUVOVC4gIFRoaXMgaXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB5b3UgYW5kIEpldGljbywgSW5jIHdoaWNoCitzdXBlcnNlZGVzIGFueSBwcmlvciBhZ3JlZW1lbnQgb3IgdW5kZXJzdGFuZGluZywgd2hldGhlciB3cml0dGVuIG9yIG9yYWwsIHJlbGF0aW5nIHRvCit0aGUgc3ViamVjdCBtYXR0ZXIgb2YgdGhpcyBsaWNlbnNlLgorCivCqUpldGljbywgSW5jLiAxOTk1IC0gMjAwMi4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL2Jpb2FwaSBiL2xpY2Vuc2VzL2Jpb2FwaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzZmOTM4Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvYmlvYXBpCkBAIC0wLDAgKzEsNzggQEAKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKz09PT09PT09PT09PT09PT09PT09PSAgQmlvQVBJIENvbnNvcnRpdW0gRGlzY2xhaW1lciA9PT09PT09PT09PT09PT09PT09PT09PT09Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitCaW9BUEkgUmVmZXJlbmNlIEltcGxlbWVudGF0aW9uIElNUE9SVEFOVDogUkVBRCBCRUZPUkUgRE9XTkxPQURJTkcsIENPUFlJTkcsCitJTlNUQUxMSU5HIE9SIFVTSU5HLgorCitCeSBkb3dubG9hZGluZywgY29weWluZywgaW5zdGFsbGluZyBvciB1c2luZyB0aGUgc29mdHdhcmUgeW91IGFncmVlIHRvIHRoaXMKK2xpY2Vuc2UuIElmIHlvdSBkbyBub3QgYWdyZWUgdG8gdGhpcyBsaWNlbnNlLCBkbyBub3QgZG93bmxvYWQsIGluc3RhbGwsIGNvcHkKK29yIHVzZSB0aGUgc29mdHdhcmUuIENvcHlyaWdodCAoYykgMjAwMCwgQmlvQVBJIENvbnNvcnRpdW0gQWxsIHJpZ2h0cworcmVzZXJ2ZWQuIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKK1JlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKK1JlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKK3RoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KK2FuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCitOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBCaW9BUEkgQ29uc29ydGl1bSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKK21heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CitzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnCitBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCitBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKK0NBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCitPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cis9PT09PT0gTmF0aW9uYWwgSW5zdGl0dXRlIG9mIFN0YW5kYXJkcyBhbmQgVGVjaG5vbG9neSAoTklTVCkgRGlzY2xhaW1lciA9PT09PT0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitOT1RJQ0UgT0YgU09GVFdBUkUgRElTQ0xBSU1FUiBBTkQgVVNFIAorCitUaGUgTklTVCBCaW9BUEkgUmVmZXJlbmNlIEltcGxlbWVudGF0aW9uIChOSVNUIEJpb0FQSSBzb2Z0d2FyZSkgcHJvdmlkZWQgCitoZXJlaW4gaXMgcmVsZWFzZWQgdG8gYW55IHBlcnNvbiwgY29tcGFueSBvciBvdGhlciBsZWdhbCBlbnRpdHkgKEV4cGVyaW1lbnRlcikgCitieSB0aGUgTmF0aW9uYWwgSW5zdGl0dXRlIG9mIFN0YW5kYXJkcyBhbmQgVGVjaG5vbG9neSAoTklTVCksIGFuIGFnZW5jeSBvZiB0aGUgCitVLlMuIERlcGFydG1lbnQgb2YgQ29tbWVyY2UsIEdhaXRoZXJzYnVyZyBNRCAyMDg5OSwgVVNBLiBUaGUgTklTVCBCaW9BUEkgCitzb2Z0d2FyZSBwcmVzZW50ZWQgaGVyZSBpcyBpbnRlbmRlZCBmb3IgdGhlIGZvbGxvd2luZyBwdXJwb3NlczogKDEpIGludGVybmFsIAorcmVzZWFyY2ggYW5kIGRldmVsb3BtZW50IGJ5IGFueSBFeHBlcmltZW50ZXIgb3IgKDIpIHN1YnNlcXVlbnQgaW50ZWdyYXRpb24gCitpbnRvIGFuIEV4cGVyaW1lbnRlcidzIEJpb0FQSSBjb21tZXJjaWFsIHByb2R1Y3QuIFRoZSBOSVNUIEJpb0FQSSBzb2Z0d2FyZSBJUyAKK1BST1ZJREVEICJBUyBJUyIgYW5kIGJlYXJzIE5PIFdBUlJBTlRZLCBORUlUSEVSIEVYUFJFU1MsIElNUExJRUQgTk9SIEZJVE5FU1MgCitGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIE5JU1QgZG9lcyBub3QgYXNzdW1lIGxpYWJpbGl0eSBvciByZXNwb25zaWJpbGl0eSBmb3IgCithbnkgRXhwZXJpbWVudGVyJ3MgdXNlIG9mIE5JU1QtZGVyaXZlZCBzb2Z0d2FyZSBwcm9kdWN0IG9yIHRoZSByZXN1bHRzIG9mIHN1Y2ggCit1c2UuIEJ5IHVzaW5nIHRoaXMgc29mdHdhcmUgcHJvZHVjdCB5b3UgYWdyZWUgdG8gYXNzdW1lIGFueSBhbmQgYWxsIGxpYWJpbGl0aWVzCit3aGljaCBtYXkgYXJpc2Ugb3V0IG9mIHlvdXIgdXNlIG9mIHRoZSBzb2Z0d2FyZS4gVGhlIFUuUy4gR292ZXJubWVudCBzaGFsbCBub3QgCitiZSByZXNwb25zaWJsZSBmb3IgZGFtYWdlcyBvciBsaWFiaWxpdHkgb2YgYW55IGtpbmQgYXJpc2luZyBvdXQgb2YgdGhlIHVzZSBvZiAKK2FueSBvZiB0aGlzIE5JU1QgQmlvQVBJIHNvZnR3YXJlIGJ5IHRoZSBFeHBlcmltZW50ZXIgb3IgYW55IHBhcnR5IGFjdGluZyBvbiAKK3RoZSBleHBlcmltZW50ZXIncyBiZWhhbGYuIEluIG5vIGNhc2Ugc2hhbGwgYW55IEV4cGVyaW1lbnRlciBzdGF0ZSBvciBpbXBseSAKK2VuZG9yc2VtZW50LCBhcHByb3ZhbCwgb3IgZXZhbHVhdGlvbiBvZiBpdHMgcHJvZHVjdCBieSBOSVNUIG9yIHRoZSBVLlMuIAorR292ZXJubWVudC4gCisKK1BsZWFzZSBub3RlIHRoYXQgdGhlIE5JU1QgQmlvQVBJIHNvZnR3YXJlIGNvbnRhaW5zIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBmcm9tIAorb3RoZXIgKG5vbiBnb3Zlcm5tZW50KSBlbnRpdGllcyBhbmQgaXQgaXMgdGhlIEV4cGVyaW1lbnRlcidzIHJlc3BvbnNpYmlsaXR5IAordG8gZnVsbHkgY29tcGx5IHdpdGggZXhpc3RpbmcgbGF3cyBiZWZvcmUgdXNpbmcgdGhlIE5JU1QgQmlvQVBJIHNvZnR3YXJlLCBvciAKK2FueSBkZXJpdmF0aW9uLCBpbiBhbnkgY29tbWVyY2lhbCBwcm9kdWN0LiAKKworUGxlYXNlIG5vdGUgdGhhdCB3aXRoaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIGNvcHlyaWdodCBwcm90ZWN0aW9uLCB1bmRlciBTZWN0aW9uIAorMTA1IG9mIHRoZSBVbml0ZWQgU3RhdGVzIENvZGUsIFRpdGxlIDE3LCBpcyBub3QgYXZhaWxhYmxlIGZvciBhbnkgd29yayBvZiB0aGUgCitVbml0ZWQgU3RhdGVzIEdvdmVybm1lbnQgYW5kL29yIGZvciBhbnkgd29ya3MgY3JlYXRlZCBieSBVbml0ZWQgU3RhdGVzIAorR292ZXJubWVudCBlbXBsb3llZXMuICBFeHBlcmltZW50ZXJzIGFja25vd2xlZGdlIHRoYXQgdGhlIE5JU1QgQmlvQVBJIHNvZnR3YXJlIAorY29udGFpbnMgd29yayB3aGljaCB3YXMgY3JlYXRlZCBieSBOSVNUIGVtcGxveWVlcyBhbmQgaXMgdGhlcmVmb3JlIGluIHRoZSAKK3B1YmxpYyBkb21haW4gYW5kIGlzIG5vdCBzdWJqZWN0IHRvIGNvcHlyaWdodC4gVGhlIEV4cGVyaW1lbnRlciBtYXkgdXNlLCAKK2Rpc3RyaWJ1dGUgb3IgaW5jb3Jwb3JhdGUgdGhpcyBjb2RlLCBvciBhbnkgcGFydCBvZiBpdCwgcHJvdmlkZWQgdGhlIAorRXhwZXJpbWVudGVyIGFja25vd2xlZGdlcyB0aGlzIHZpYSBhbiBleHBsaWNpdGl0IGFja25vd2xlZGdtZW50IG9mIE5JU1QtcmVsYXRlZAorY29udHJpYnV0aW9ucyB0byB0aGUgRXhwZXJpbWVudGVyJ3Mgd29yay4gVGhlIEV4cGVyaW1lbnRlciBhbHNvIGFncmVlcyB0byAKK2Fja25vd2xlZGdlLCB2aWEgYW4gZXhwbGljaXQgYWNrbm93bGVkZ21lbnQsIHRoYXQgbW9kaWZpY2F0aW9ucyBvciBhbHRlcmF0aW9ucyAKK2hhdmUgYmVlbiBtYWRlIHRvIHRoaXMgc29mdHdhcmUgYnkgdGhlIEV4cGVyaW1lbnRlciBiZWZvcmUgcmVkaXN0cmlidXRpb24uIAorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL2JsYWNrc2hhZGVzIGIvbGljZW5zZXMvYmxhY2tzaGFkZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzJmZGUxNAotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL2JsYWNrc2hhZGVzCkBAIC0wLDAgKzEsMjUgQEAKK1VERVZHQU1FIExJQ0VOU0UKK1ZlcnNpb24gMiwgSnVuZSAyMDAxCisKK0NvcHlyaWdodCAoYykgMjAwMiwgRGF2aWQgUm9zZW4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworTElNSVRFRCBVU0UgU09GVFdBUkUgTElDRU5TRSBBR1JFRU1FTlQKKworVGhpcyBMaW1pdGVkIFVzZSBTb2Z0d2FyZSBMaWNlbnNlIEFncmVlbWVudCAodGhlICJBZ3JlZW1lbnQiKSBpcyBhIGxlZ2FsIGFncmVlbWVudCBiZXR3ZWVuIHlvdSwgaWRldmdhbWVzLmNvbSwgYW5kIERhdmlkIFJvc2VuLiBCeSBkb3dubG9hZGluZyBvciBwdXJjaGFzaW5nIHRoZSBzb2Z0d2FyZSBtYXRlcmlhbCwgd2hpY2ggaW5jbHVkZXMgc291cmNlIGNvZGUgKHRoZSAiU291cmNlIENvZGUiKSwgeW91IGFyZSBhZ3JlZWluZyB0byBiZSBib3VuZCBieSB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQuIElmIHlvdSBkbyBub3QgYWdyZWUgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBwcm9tcHRseSBkZXN0cm95IHRoZSBTb2Z0d2FyZS4KKworMS4gR3JhbnQgb2YgTGljZW5zZS4KK0RldmVsb3BlciBncmFudHMgdG8geW91IHRoZSByaWdodCB0byB1c2UgdGhlIFNvZnR3YXJlLiBZb3UgaGF2ZSBubyBvd25lcnNoaXAgb3IgcHJvcHJpZXRhcnkgcmlnaHRzIGluIG9yIHRvIHRoZSBTb2Z0d2FyZS4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgc2VjdGlvbiwgInVzZSIgbWVhbnMgbG9hZGluZyB0aGUgU29mdHdhcmUgaW50byBSQU0sIGFzIHdlbGwgYXMgaW5zdGFsbGF0aW9uIG9uIGEgaGFyZCBkaXNrIG9yIG90aGVyIHN0b3JhZ2UgZGV2aWNlLiBUaGUgU29mdHdhcmUsIHRvZ2V0aGVyIHdpdGggYW55IGFyY2hpdmUgY29weSB0aGVyZW9mLCBzaGFsbCBiZSBkZXN0cm95ZWQgd2hlbiBubyBsb25nZXIgdXNlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQsIG9yIHdoZW4gdGhlIHJpZ2h0IHRvIHVzZSB0aGUgU29mdHdhcmUgaXMgdGVybWluYXRlZC4KKworMi4gUGVybWl0dGVkIFVzZXMuCitZb3UgbWF5IG1ha2UgYW55IG1vZGlmaWNhdGlvbnMgdG8gdGhlIFNvZnR3YXJlIGFuZCByZWNvbXBpbGUgdGhlIFNvZnR3YXJlIGZvciB5b3VyIG93biBwcml2YXRlIHVzZS4gRm9yIGVkdWNhdGlvbmFsIHB1cnBvc2VzIG9ubHksIHlvdSwgdGhlIGVuZC11c2VyLCBtYXkgdXNlIHBvcnRpb25zIG9mIHRoZSBTb3VyY2UgQ29kZSAobm90IHRvIGV4Y2VlZCAxMDAwIGxpbmVzIG9mIGNvZGUpLCBzdWNoIGFzIHBhcnRpY3VsYXIgcm91dGluZXMsIHRvIGRldmVsb3AgeW91ciBvd24gc29mdHdhcmUsIGJ1dCBtYXkgbm90IGR1cGxpY2F0ZSB0aGUgU291cmNlIENvZGUgaW4gaXRzIGVudGlyZXR5LiBUaGUgbGltaXRlZCByaWdodCByZWZlcmVuY2VkIGluIHRoZSBwcmVjZWRpbmcgc2VudGVuY2UgaXMgaGVyZWluYWZ0ZXIgcmVmZXJyZWQgdG8gYXMgIkVkdWNhdGlvbmFsIFVzZS4iIEJ5IHNvIGV4ZXJjaXNpbmcgdGhlIEVkdWNhdGlvbmFsIFVzZSByaWdodCB5b3Ugc2hhbGwgbm90IG9idGFpbiBhbnkgb3duZXJzaGlwLCBjb3B5cmlnaHQsIHByb3ByaWV0YXJ5IG9yIG90aGVyIGludGVyZXN0IGluIG9yIHRvIHRoZSBTb3VyY2UgQ29kZSwgb3IgYW55IHBvcnRpb24gb2YgdGhlIFNvdXJjZSBDb2RlLgorCiszLiBQcm9oaWJpdGVkIFVzZXMuCitXaXRoIHRoZSBleGNlcHRpb24gb2YgdGhlIEVkdWNhdGlvbmFsIFVzZSByaWdodCwgeW91IG1heSBub3Qgb3RoZXJ3aXNlIHVzZSB0aGUgU29mdHdhcmUsIG9yIGFueSBwb3J0aW9uIG9mIHRoZSBTb2Z0d2FyZSwgd2hpY2ggaW5jbHVkZXMgdGhlIFNvdXJjZSBDb2RlLCBmb3IgY29tbWVyY2lhbCBnYWluLgorCis0LiBDb3B5cmlnaHQuCitUaGUgRGV2ZWxvcGVyIG9mIHRoaXMgU29mdHdhcmUgcmV0YWlucyBvd25lcnNoaXAgcmlnaHRzIHRvIHRoaXMgU29mdHdhcmUuICJpZGV2Z2FtZXMuY29tIiBzaGFsbCByZXRhaW4gZXhjbHVzaXZlIGRpc3RyaWJ1dGlvbiByaWdodHMgdG8gdGhpcyBTb2Z0d2FyZS4gWW91IG1heSBub3Qgb3RoZXJ3aXNlIHJlcHJvZHVjZSwgY29weSBvciBkaXNjbG9zZSB0byBvdGhlcnMsIGluIHdob2xlIG9yIGluIGFueSBwYXJ0LCB0aGUgU29mdHdhcmUuIFlvdSBtYXkgbm90IGNvcHkgdGhlIHdyaXR0ZW4gbWF0ZXJpYWxzIGFjY29tcGFueWluZyB0aGUgU29mdHdhcmUuIFlvdSBhZ3JlZSB0byB1c2UgeW91ciBiZXN0IGVmZm9ydHMgdG8gc2VlIHRoYXQgYW55IHVzZXIgb2YgdGhlIFNvZnR3YXJlIGxpY2Vuc2VkIGhlcmV1bmRlciBjb21wbGllcyB3aXRoIHRoaXMgQWdyZWVtZW50LgorCis1LiBObyBXYXJyYW50aWVzLgorVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgorCitUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZSBTb2Z0d2FyZS4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL2JsYXQgYi9saWNlbnNlcy9ibGF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUxYzFiMzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9ibGF0CkBAIC0wLDAgKzEsOSBAQAorQ09OVEVOVFMgQU5EIENPUFlSSUdIVAorCitUaGlzIGRpcmVjdG9yeSBjb250YWlucyB0aGUgZW50aXJlIHNvdXJjZSB0cmVlIGZvciBKaW0gS2VudCBhbmQgdGhlCitVQ1NDIEdlbm9tZSBCaW9pbmZvcm1hdGljcyBHcm91cCdzIHN1aXRlIG9mIGJpb2xvZ2ljYWwgYW5hbHlzaXMKK2FuZCB3ZWIgZGlzcGxheSBwcm9ncmFtcy4gIEFsbCBmaWxlcyBhcmUgY29weXJpZ2h0ZWQsIGJ1dCBsaWNlbnNlCitpcyBoZXJlYnkgZ3JhbnRlZCBmb3IgcGVyc29uYWwsIGFjYWRlbWljLCBhbmQgbm9uLXByb2ZpdCB1c2UuCitBIGxpY2Vuc2UgaXMgYWxzbyBncmFudGVkIGZvciB0aGUgY29udGVudHMgb2YgdGhlIHRvcCBsZXZlbCBsaWIKK2RpcmVjdG9yeSBmb3IgY29tbWVyY2lhbCB1c2Vycy4gIENvbW1lcmNpYWwgdXNlcnMgc2hvdWxkIGNvbnRhY3QKK2tlbnRAc29lLnVjc2MuZWR1IGZvciBhY2Nlc3MgdG8gb3RoZXIgbW9kdWxlcy4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL2JvZWhtLWdjIGIvbGljZW5zZXMvYm9laG0tZ2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFkOTIxMgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL2JvZWhtLWdjCkBAIC0wLDAgKzEsMTAgQEAKKzxjb3B5cmlnaHQgbm90aWNlPgorCitUSElTIE1BVEVSSUFMIElTIFBST1ZJREVEIEFTIElTLCBXSVRIIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkgRVhQUkVTU0VECitPUiBJTVBMSUVELiAgQU5ZIFVTRSBJUyBBVCBZT1VSIE9XTiBSSVNLLgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIHVzZSBvciBjb3B5IHRoaXMgcHJvZ3JhbQorZm9yIGFueSBwdXJwb3NlLCAgcHJvdmlkZWQgdGhlIGFib3ZlIG5vdGljZXMgYXJlIHJldGFpbmVkIG9uIGFsbCBjb3BpZXMuCitQZXJtaXNzaW9uIHRvIG1vZGlmeSB0aGUgY29kZSBhbmQgdG8gZGlzdHJpYnV0ZSBtb2RpZmllZCBjb2RlIGlzIGdyYW50ZWQsCitwcm92aWRlZCB0aGUgYWJvdmUgbm90aWNlcyBhcmUgcmV0YWluZWQsIGFuZCBhIG5vdGljZSB0aGF0IHRoZSBjb2RlIHdhcworbW9kaWZpZWQgaXMgaW5jbHVkZWQgd2l0aCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZS4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL2Jvbm5pZSBiL2xpY2Vuc2VzL2Jvbm5pZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTgwMzJmCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvYm9ubmllCkBAIC0wLDAgKzEsMjQgQEAKK0NvcHlyaWdodCBOb3RpY2UKK0Jvbm5pZSBpcyBDb3B5cmlnaHQgwqkgVGltIEJyYXksIDE5OTAtOTYKKworRXZlcnlib2R5IGlzIGhlcmVieSBncmFudGVkIHJpZ2h0cyB0byB1c2UsIGNvcHksIGFuZCBtb2RpZnkgQm9ubmllLCBwcm92aWRlZCBvbmx5IHRoYXQgdGhpcyBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgd2FybmluZyBiZWxvdyBhcmUgcHJlc2VydmVkIHdpdGhvdXQgY2hhbmdlLgorV2FybmluZworCitCb25uaWUgaXMgcHJvdmlkZWQgQVMgSVMgd2l0aCBubyB3YXJyYW50eSBvZiBhbnkga2luZCwgYW5kCisKK1RpbSBCcmF5IG1ha2VzIG5vIHJlcHJlc2VudGF0aW9uIHdpdGggcmVzcGVjdCB0byB0aGUgYWRlcXVhY3kgb2YgdGhpcyBwcm9ncmFtIGZvciBhbnkgcGFydGljdWxhciBwdXJwb3NlIG9yIHdpdGggcmVzcGVjdCB0byBpdHMgYWRlcXVhY3kgdG8gcHJvZHVjZSBhbnkgcGFydGljdWxhciByZXN1bHQsIGFuZAorCitUaW0gQnJheSBzaGFsbCBub3QgYmUgbGlhYmxlIGZvciBsb3NzIG9yIGRhbWFnZSBhcmlzaW5nIG91dCBvZiB0aGUgdXNlIG9mIEJvbm5pZSByZWdhcmRsZXNzIG9mIGhvdyBzdXN0YWluZWQsIGFuZAorCitJbiBubyBldmVudCBzaGFsbCBUaW0gQnJheSBiZSBsaWFibGUgZm9yIHNwZWNpYWwsIGRpcmVjdCwgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2UsIGxvc3MsIGNvc3RzIG9yIGZlZXMgb3IgZXhwZW5zZXMgb2YgYW55IG5hdHVyZSBvciBraW5kLgorTW9yYWwgT2JsaWdhdGlvbgorCitJdCBpcyBUaW0gQnJheSdzIG9waW5pb24gdGhhdCBhbnlvbmUgd2hvIG1ha2VzIHVzZSBvZiBCb25uaWUgdGh1cyBpbmN1cnMgYSBtb3JhbCBvYmxpZ2F0aW9uLCBpbiB0aGUgaW50ZXJlc3Qgb2YgbWFraW5nIEJvbm5pZSBhbmQgdGhlIHJlc3VsdHMgb2YgdXNpbmcgQm9ubmllIG1vcmUgd2lkZWx5IGF2YWlsYWJsZSwgdG8gZG8gdGhlIGZvbGxvd2luZzoKKworICAgMS4gSWYgcG9zc2libGUsIHRyYW5zbWl0IHRvIFRpbSBCcmF5IGFueSBjb21waWxlZCBiaW5hcnkgdmVyc2lvbnMgb2YgQm9ubmllIGZvciB3aGljaCBhbiBlcXVpdmFsZW50IGRvZXMgbm90IGV4aXN0IG9uIHRoZSBXZWIgc2l0ZQorICAgMi4gSWYgcG9zc2libGUsIHRvIHRyYW5zbWl0IHRvIFRpbSBCcmF5IHRoZSByZXN1bHRzIG9mIEJvbm5pZSBydW5zLCBhbG9uZyB3aXRoIGVub3VnaCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgcnVuIHRvIG1ha2UgdGhlIG51bWJlcnMgdXNlZnVsIHRvIG90aGVycy4KKworVGltIEJyYXkgd2FycmFudHMgdGhhdDoKKworICAgMS4gT24gcmVxdWVzdCwgaGUgd2lsbCB0YWtlIGFsbCByZWFzb25hYmxlIG1lYXN1cmVzIHRvIHByb3RlY3QgdGhlIHByaXZhY3kgb2YgYW55b25lIHdobyB3aXNoZXMgdG8gc3VibWl0IGJpbmFyaWVzIG9yIHJlc3VsdHMKKyAgIDIuIEhlIHdpbGwgbmV2ZXIgdGFrZSBhbnkgcG9zaXRpdmUgYWN0aW9uLCBhc2lkZSBmcm9tIHRoaXMgc3RhdGVtZW50LCB0byBjb21wZWwgYW55b25lIHRvIGFjdCBhY2NvcmRpbmcgdG8gdGhpcyBwZXJjZXB0aW9uIG9mIHRoZWlyIG1vcmFsIG9ibGlnYXRpb25zLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvYnVuZ2llLW1hcmF0aG9uIGIvbGljZW5zZXMvYnVuZ2llLW1hcmF0aG9uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ODg0ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9idW5naWUtbWFyYXRob24KQEAgLTAsMCArMSwzMSBAQAorRnJvbSB0aGUgb3JpZ2luYWwgTWFyYXRob24gVHJpbG9neSBCb3ggU2V0IExpY2Vuc2UtCisKKyhjKSAxOTk3IEJ1bmdpZSBTb2Z0d2FyZSBQcm9kdWN0cyBDb3Jwb3JhdGlvbgorQWxsIFJpZ2h0cyBSZXNlcnZlZC4gUE8gQm94IDc4NzcsIENoaWNhZ28sIElMIDYwNjgwLTc4NzcKK01hcmF0aG9uIGlzIGEgdHJhZGVtYXJrIG9mIEJ1bmdpZSBTb2Z0d2FyZSBQcm9kdWN0cyBDb3Jwb3JhdGlvbgorQWxsIG90aGVyIHRyYWRlbWFya3MgYXJlIHRoZSBwcm9wZXJ0aWVzIG9mIHRoZWlyIHJlc3BlY3RpdmUgb3duZXJzLgorCitGcm9tIGh0dHA6Ly90cmlsb2d5cmVsZWFzZS5idW5naWUub3JnL2ZhcS5odG1sCisKK1E6IEhleSwgSSB0aG91Z2h0IE1hcmF0aG9uIG5lZWRlZCBzZXJpYWwgbnVtYmVycyEKK0E6IFRoZSB2ZXJzaW9ucyByZWxlYXNlZCB3aXRoIHRoZSBUcmlsb2d5IEJveCBTZXQgd2VyZSBzdHJpcHBlZCBvZiB0aGUgc2VyaWFsIG51bWJlciBjb2RlLiBUaGVzZSB3aWxsIHdvcmsgZmluZSAtIGFzIGxvbmcgYXMgeW91J3JlIG5vdCB0cnlpbmcgdG8gcGxheSB3aXRoIGZvbGtzIHdobyBhcmUgdXNpbmcgb2xkZXIgdmVyc2lvbnMuCisKK1E6IFdvdy4uLiBjYW4gSSBkbyB3aGF0ZXZlciBJIHdhbnQgd2l0aCB0aGlzIHN0dWZmPworQTogTk8uIEJ1bmdpZSBzdGlsbCBob2xkcyB0aGUgY29weXJpZ2h0cyB0byB0aGVzZSBmaWxlcy4gVGhleSdyZSBhbGxvd2luZyB0aGVtIHRvIGJlIGRpc3RyaWJ1dGVkIGZvciBmcmVlIChtb3N0bHkgYmVjYXVzZSB5b3UgY2FuJ3QgYnV5IHRoZW0gYW55IG1vcmUpIC0gYnV0IHRoZXkncmUgc3RpbGwgQnVuZ2llJ3MgaW50ZWxsZWN0dWFsIHByb3BlcnR5LiBZb3UgY2FuJ3QsIGZvciBleGFtcGxlLCBzZWxsIHRoZW0uCisKK0kgcmVhbGx5IHdhbnQgbW9yZSBpbmZvIGFib3V0IE1hcmF0aG9uLCBhbmQgcnVubmluZyBpdCBvbiBteSBjb21wdXRlciEgV2hlcmUgY2FuIEkgZ28/CitUaGVyZSBhcmUgYSBudW1iZXIgb2Ygc2l0ZXMgZGV2b3RlZCB0byB0aGlzIGdhbWU6CisKKyogTWFyYXRob24gT3BlbiBTb3VyY2UgaXMgdGhlIGdyYW5kZmF0aGVyIG9mIEFsZXBoIE9uZSBzaXRlcworICAtIGh0dHA6Ly9zb3VyY2UuYnVuZ2llLm9yZy8KKyogQWxlcGggT25lL1NETCBpcyBkZXZvdGVkIHRvLi4uIHdlbGwsIEFsZXBoIE9uZS9TREwKKyAgLSBodHRwOi8vd3d3LnVuaS1tYWluei5kZS9+YmF1ZWMwMDIvQTFNYWluLmh0bWwKKyogT3JiaXRhbEFybSB3YXMgc2V0IHVwIHRvIGhlbHAgV2luZG93cyBwbGF5ZXJzIHBsYXkgTWFyYXRob24KKyAgLSBodHRwOi8vb3JiaXRhbGFybS5idW5naWUub3JnLworKiBBbGVwaE9uZSBoYXMgYSBTb3VyY2VGb3JnZSBzaXRlCisgIC0gaHR0cDovL3NvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy9tYXJhdGhvbi8KKyogRmlsZWJhbGwgYW5kIFRoZSBBcmNoaXZlcyBjb250YWluIG1hbnkgQWxlcGggT25lIGZpbGVzIAorICAtIGh0dHA6Ly9maWxlYmFsbC5uZXQvbWFyYXRob24vCisgIC0gaHR0cDovL2FyY2hpdmVzLmJ1bmdpZS5vcmcvCisKK05PVEU6IFVudGlsIHdlIGdldCBzb21ldGhpbmcgbW9yZSBjb25jcmV0ZSwgSSdtIG1hcmtpbmcgYW55IGJ1aWxkcyB0aGF0IGRlcGVuZCBvbiB0aGlzIGxpY2Vuc2UtIFJFU1RSSUNUPSJub21pcnJvciIKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL2NhZHNvZnQgYi9saWNlbnNlcy9jYWRzb2Z0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxMDJjYTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9jYWRzb2Z0CkBAIC0wLDAgKzEsNzIgQEAKK0VBR0xFIExJQ0VOU0UgQUdSRUVNRU5UCisKK1RoaXMgaXMgYSBsZWdhbCBhZ3JlZW1lbnQgYmV0d2VlbiB5b3UsIHRoZSBlbmQgdXNlciwgYW5kIENhZFNvZnQgQ29tcHV0ZXIsCitJbmMuLCB3aGljaCBtYXJrZXRzIHNvZnR3YXJlIHByb2R1Y3RzIHVuZGVyIHRoZSB0cmFkZW1hcmsgRUFHTEUuIENhZFNvZnQKK0NvbXB1dGVyLCBJbmMuIHNoYWxsIGJlIHJlZmVycmVkIHRvIGluIHRoaXMgQWdyZWVtZW50IGFzIENhZFNvZnQuIElmIHlvdSBkbyBub3QKK2FncmVlIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgcHJvbXB0bHkgcmV0dXJuIHRoZSBkaXNrIHBhY2thZ2UgYW5kCithY2NvbXBhbnlpbmcgaXRlbXMgKGluY2x1ZGluZyB3cml0dGVuIG1hdGVyaWFscyBhbmQgY29udGFpbmVycykgdG8gdGhlIHBsYWNlCit5b3Ugb2J0YWluZWQgdGhlbSBmb3IgYSBmdWxsIHJlZnVuZC4KK1VTRSBPRiBUSElTIFBST0RVQ1QgQ09OU1RJVFVURVMgWU9VUiBBQ0NFUFRBTkNFIE9GIFRIRVNFIFRFUk1TIEFORCBDT05ESVRJT05TCitBTkQgWU9VUiBBR1JFRU1FTlQgVE8gQUJJREUgQlkgVEhFTS4KKworR3JhbnQgb2YgTGljZW5zZQorCitDYWRTb2Z0IGdyYW50cyB0byB5b3UgdGhlIHJpZ2h0IHRvIHVzZSBvbmUgY29weSBvZiB0aGUgYWNjb21wYW55aW5nIEVBR0xFCitzb2Z0d2FyZSBwcm9ncmFtIGFuZCBhbnkgYW5kIGFsbCB1cGRhdGVzIHRoYXQgeW91IG1heSByZWNlaXZlICh0aGUgU29mdHdhcmUpIG9uCithIHNpbmdsZSBjb21wdXRlciBvciB3b3Jrc3RhdGlvbi4gWW91IG1heSwgaG93ZXZlciwgaW5zdGFsbCB0aGUgU29mdHdhcmUgb24KK21vcmUgdGhhbiBvbmUgY29tcHV0ZXIgb3Igb24gYSBmaWxlIHNlcnZlciBwcm92aWRlZCB5b3UgZG8gbm90IG9wZXJhdGUgdGhlCitTb2Z0d2FyZSBvbiBtb3JlIHRoYW4gb25lIGNvbXB1dGVyIG9yIHdvcmtzdGF0aW9uIGF0IGEgdGltZS4gTXVsdGkgdXNlcgorbGljZW5zZXMgYXJlIGxpbWl0ZWQgdG8gdGhlIGdpdmVuIG51bWJlciBvZiBjb25jdXJyZW50IHVzZXJzLgorCitGcmVld2FyZSBMaWNlbnNlCisKK1RoZSAiRnJlZXdhcmUiIHZlcnNpb24gb2YgRUFHTEUgTGlnaHQgaXMgbGltaXRlZCB0byAibm9uLXByb2ZpdCIgb3IgZXZhbHVhdGlvbgordXNlLiBCeSAibm9uLXByb2ZpdCIgd2UgbWVhbiB0aGF0IGFzIHNvb24gYXMgeW91IGVhcm4gbW9uZXkgYnkgdXNpbmcgRUFHTEUsIHlvdQoraGF2ZSB0byByZWdpc3RlciBpdCEgVGhpcyBhbGxvd3MgYW55Ym9keSB3aG8gd2lzaGVzIHRvIHVzZSBFQUdMRSBMaWdodCBmb3IKK3RoZWlyIHByaXZhdGUgaG9iYnkgcHJvamVjdHMgdG8gZG8gc28uIEFsc28gc3R1ZGVudHMgY2FuIHVzZSB0aGlzIHZlcnNpb24gZm9yCithbnkgZWR1Y2F0aW9uYWwgcHJvamVjdHMuIEl0IGlzIGV2ZW4gb2sgdG8gdXNlIHRoaXMgdmVyc2lvbiBpbiBhIGNvbW1lcmNpYWwKK2Vudmlyb25tZW50IGFzIGxvbmcgYXMgeW91IGp1c3Qgd2FudCB0byBldmFsdWF0ZSB0aGUgcHJvZ3JhbS4gQXMgc29vbiBhcyB5b3UKK3N0YXJ0IHVzaW5nIGl0IGZvciBjb21tZXJjaWFsIHByb2plY3RzLCB5b3Ugd2lsbCBoYXZlIHRvIHJlZ2lzdGVyIGl0LgorQm9hcmQgbWFudWZhY3R1cmVycyAoImJvYXJkIGhvdXNlcyIpIHdobyBvbmx5IHdhbnQgdG8gcHJvZHVjZSBwcm9kdWN0aW9uIGRhdGEKKyhsaWtlLCBlLmcuIEdlcmJlciBmaWxlcykgZnJvbSBib2FyZCBmaWxlcyB0aGV5IHJlY2VpdmUgZnJvbSBFQUdMRSB1c2VycywgbWF5CithbHNvIHVzZSB0aGUgRnJlZXdhcmUgdmVyc2lvbiB0byBkbyB0aGlzLgorVGhlIEZyZWV3YXJlIGxpY2Vuc2UgaXMgdmFsaWQgd2l0aG91dCBhIHByaW50ZWQgIlVzZXIgTGljZW5zZSBDZXJ0aWZpY2F0ZSIuCisKK0NvcHlyaWdodAorCitUaGUgU29mdHdhcmUgaXMgb3duZWQgYnkgQ2FkU29mdCBhbmQgaXMgcHJvdGVjdGVkIGJ5IFVuaXRlZCBTdGF0ZXMgY29weXJpZ2h0CitsYXdzIGFuZCBpbnRlcm5hdGlvbmFsIHRyZWF0eSBwcm92aXNpb25zLiBUaGVyZWZvcmUsIHlvdSBtdXN0IHRyZWF0IHRoZQorU29mdHdhcmUgbGlrZSBhbnkgb3RoZXIgY29weXJpZ2h0ZWQgbWF0ZXJpYWwgKGUuZy4sIGEgYm9vayBvciBtdXNpY2FsCityZWNvcmRpbmcpLiBZb3UgbWF5IG5vdCBjb3B5IHRoZSB3cml0dGVuIG1hdGVyaWFscyBhY2NvbXBhbnlpbmcgdGhlIFNvZnR3YXJlLgorCitPdGhlciBSZXN0cmljdGlvbnMKKworWW91IG1heSBub3QgcmVudCBvciBsZWFzZSB0aGUgU29mdHdhcmUsIGJ1dCB5b3UgbWF5IHRyYW5zZmVyIHlvdXIgc3RhbmQtYWxvbmUKK2NvcHkgb2YgdGhlIFNvZnR3YXJlIGFuZCBhY2NvbXBhbnlpbmcgd3JpdHRlbiBtYXRlcmlhbHMgb24gYSBwZXJtYW5lbnQgYmFzaXMKK3Byb3ZpZGVkIHlvdSByZXRhaW4gbm8gY29waWVzIGFuZCB0aGUgcmVjaXBpZW50IGFncmVlcyB0byB0aGUgdGVybXMgb2YgdGhpcworQWdyZWVtZW50LiBBbnkgc3VjaCB0cmFuc2ZlciBtdXN0IGluY2x1ZGUgYWxsIHVwZGF0ZXMgYW5kIHByaW9yIHZlcnNpb25zIG9mIHRoZQorU29mdHdhcmUgYW5kIGFjY29tcGFueWluZyB3cml0dGVuIG1hdGVyaWFscywgYW5kIG5vdGljZSBtdXN0IGJlIGdpdmVuIGJ5IHlvdSB0bworQ2FkU29mdCB0aGF0IHN1Y2ggdHJhbnNmZXIgaGFzIHRha2VuIHBsYWNlLiBZb3UgbWF5IG5vdCByZXZlcnNlIGVuZ2luZWVyLAorZGVjb21waWxlLCBkaXNhc3NlbWJsZSwgb3IgY3JlYXRlIGRlcml2YXRpdmUgd29ya3MgYmFzZWQgb24gdGhlIFNvZnR3YXJlIGZvcgorYW55IHB1cnBvc2Ugb3RoZXIgdGhhbiBjcmVhdGluZyBhbiBhZGFwdGF0aW9uIHRvIHRoZSBTb2Z0d2FyZSBhcyBhbiBlc3NlbnRpYWwKK3N0ZXAgaW4gaXRzIHV0aWxpemF0aW9uIGZvciB5b3VyIG93biB1c2UuIFlvdSBhY2tub3dsZWRnZSBDYWRzb2Z0J3MgY2xhaW0gdGhhdAordGhlIFNvZnR3YXJlIGVtYm9kaWVzIHZhbHVhYmxlIHRyYWRlIHNlY3JldHMgcHJvcHJpZXRhcnkgdG8gQ2FkU29mdDsgeW91IG1heQorbm90IGRpc2Nsb3NlIGFueSBpbmZvcm1hdGlvbiByZWdhcmRpbmcgdGhlIGludGVybmFsIG9wZXJhdGlvbnMgb2YgdGhlIFNvZnR3YXJlCit0byBvdGhlcnMuCisKK0xpbWl0ZWQgV2FycmFudHkgYW5kIExpYWJpbGl0eQorCitDYWRTb2Z0IHdhcnJhbnRzIHRoYXQgdGhlIFNvZnR3YXJlLCBhcyB1cGRhdGVkIGFuZCB3aGVuIHByb3Blcmx5IHVzZWQsIHdpbGwKK29wZXJhdGUgaW4gYWxsIG1hdGVyaWFsIHJlc3BlY3RzIGluIGNvbmZvcm1pdHkgd2l0aCB0aGUgZG9jdW1lbnRhdGlvbiBmb3Igc3VjaAorU29mdHdhcmUsIGFuZCB0aGUgU29mdHdhcmUgbWVkaWEgd2lsbCBiZSBmcmVlIG9mIGRlZmVjdHMsIGZvciAzMCAodGhpcnR5KSBkYXlzCitmcm9tIHRoZSBkYXRlIG9mIHNoaXBtZW50IG9mIHN1Y2ggdmVyc2lvbiB0byB5b3UuIEluIHRoZSBldmVudCBvZiBhIGZhaWx1cmUgdG8KK21lZXQgdGhlIGZvcmVnb2luZyBsaW1pdGVkIHdhcnJhbnR5LCB5b3VyIHNvbGUgcmVtZWR5IGluIHRoZSBldmVudCBvZgorbm9uY29uZm9ybWl0eSBvZiB0aGUgU29mdHdhcmUsIGF0IENhZFNvZnQncyBvcHRpb24sIHNoYWxsIGJlIHJlcGxhY2VtZW50IG9mIHRoZQorZGVmZWN0aXZlIG1hdGVyaWFscyBvciBhIHJlZnVuZCBvZiB0aGUgbGljZW5zZSBmZWVzIHBhaWQgZm9yIHRoZSBhZmZlY3RlZAorU29mdHdhcmUuCisKK0NhZFNvZnQgZGlzY2xhaW1zIGFsbCBvdGhlciB3YXJyYW50aWVzIGFuZCBjb25kaXRpb25zLCBleHByZXNzIG9yIGltcGxpZWQuIE5vCit3YXJyYW50eSBpcyBtYWRlIHJlZ2FyZGluZyB0aGUgcmVzdWx0cyBvZiBhbnkgU29mdHdhcmUgb3Igc2VydmljZXMsIG9yIHRoYXQgdGhlCitTb2Z0d2FyZSdzIGZ1bmN0aW9uYWxpdHkgd2lsbCBtZWV0IHlvdXIgcmVxdWlyZW1lbnRzLiBJbiBubyBldmVudCB3aWxsIENhZFNvZnQKK29yIGl0cyBzdXBwbGllcnMgYmUgbGlhYmxlIGZvciBhbnkgbG9zcyBvciBpbmFjY3VyYWN5IG9mIGRhdGEgb3IgYW55IGxvc3Mgb2YKK3Byb2ZpdHMuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9jY3A0IGIvbGljZW5zZXMvY2NwNApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWM3M2E2Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvY2NwNApAQCAtMCwwICsxLDM3MSBAQAorQ0NQNCBQUk9HUkFNIFNVSVRFCitMSUNFTkNFIEFHUkVFTUVOVAorKEFjYWRlbWljIFVzZSkKK1RISVMgTElDRU5DRSBBR1JFRU1FTlQgaXMgbWFkZSBCRVRXRUVOOgorMS4gVEhFIENPVU5DSUwgRk9SIFRIRSBDRU5UUkFMIExBQk9SQVRPUlkgT0YgVEhFIFJFU0VBUkNICitDT1VOQ0lMUywgYW4gZXhlY3V0aXZlIE5vbi1EZXBhcnRtZW50YWwgUHVibGljIEJvZHkgZXN0YWJsaXNoZWQgYXMgYSBSZXNlYXJjaAorQ291bmNpbCBieSBSb3lhbCBDaGFydGVyIHVuZGVyIHRoZSBTY2llbmNlIGFuZCBUZWNobm9sb2d5IEFjdCAxOTY1ICjigJxDQ0xSQ+KAnSk7IAorYW5kCisyLiBbSU5TRVJUIE5BTUUgT0YgQUNBREVNSUMvUkVTRUFSQ0ggSU5TVElUVVRJT05dIHdob3NlIGFkbWluaXN0cmF0aXZlCitvZmZpY2VzIGFyZSBhdCBbaW5zZXJ0IGFkZHJlc3NdICgidGhlIExpY2Vuc2VlIikuCitCQUNLR1JPVU5ECitDQ0xSQyBoYXMgYXNzZW1ibGVkIHRoZSBDQ1A0IHN1aXRlIG9mIHNvZnR3YXJlIGFwcGxpY2F0aW9ucyBhbmQgbGlicmFyaWVzIHdpdGggCitzdXBwb3J0Citmcm9tIHRoZSBCaW90ZWNobm9sb2d5IGFuZCBCaW9sb2dpY2FsIFNjaWVuY2VzIFJlc2VhcmNoIENvdW5jaWwsIGFzIHBhcnQgb2YgdGhlCitDb2xsYWJvcmF0aXZlIENvbXB1dGF0aW9uYWwgUHJvamVjdCBOdW1iZXIgNC4KK1RoZSBDQ1A0IFNvZnR3YXJlIFN1aXRlIGNvbXByaXNlczoKK2EpIGFwcGxpY2F0aW9ucyBhbmQgbGlicmFyaWVzIGRpc3RyaWJ1dGVkIGluIHNvdXJjZSBjb2RlLCB0aGF0IHRoZSBMaWNlbnNlZSBtYXkgCit1c2UKK2ZyZWUgb2YgY2hhcmdlIGZvciBBY2FkZW1pYyBQdXJwb3Nlcywgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgY2xhdXNlcyAyLjEtMi40IG9mCit0aGlzIEFncmVlbWVudDsKK2IpIGFwcGxpY2F0aW9ucyBhbmQgbGlicmFyaWVzIGRpc3RyaWJ1dGVkIGluIHNvdXJjZSBjb2RlLCB0aGF0IHRoZSBMaWNlbnNlZSBtYXkgCit1c2UsCitmcmVlIG9mIGNoYXJnZSwgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlIExHUEwgb3IgdGhlIEdQTDsgYW5kCitjKSB0aGlyZCBwYXJ0eSBzb2Z0d2FyZSB0aGF0IGlzIGluY2x1ZGVkIGluIHRoZSBDQ1A0IHN1aXRlIG9mIHByb2dyYW1zIGFuZCB0aGF0IAoraXMKK2xpY2Vuc2VkIGJ5IGEgdGhpcmQgcGFydHkgb24gdGhhdCB0aGlyZCBwYXJ0eSdzIHRlcm1zIGFuZCBjb25kaXRpb25zLgorMS4gREVGSU5JVElPTlMgQU5EIElOVEVSUFJFVEFUSU9OCisxLjEgSW4gdGhpcyBBZ3JlZW1lbnQgdGhlIGZvbGxvd2luZyBleHByZXNzaW9ucyBoYXZlIHRoZSBtZWFuaW5nIHNldCBvcHBvc2l0ZToKK0FjYWRlbWljIFB1cnBvc2VzOiBmdW5kYW1lbnRhbCBvciBiYXNpYyByZXNlYXJjaCBvciBhY2FkZW1pYyB0ZWFjaGluZywKK2luY2x1ZGluZyBhbnkgZnVuZGFtZW50YWwgcmVzZWFyY2ggdGhhdCBpcyBmdW5kZWQgYnkgYW55CitwdWJsaWMgb3IgY2hhcml0YWJsZSBib2R5LCBidXQgbm90IGFueSBwdXJwb3NlIHRoYXQKK2dlbmVyYXRlcyByZXZlbnVlIChhcyBvcHBvc2VkIHRvIGdyYW50IGluY29tZSkgZm9yIHRoZQorTGljZW5zZWUgb3IgYW55IHRoaXJkIHBhcnR5LiBBbnkgcmVzZWFyY2ggdGhhdCBpcyB3aG9sbHkgb3IKK3BhcnRpYWxseSBzcG9uc29yZWQgYnkgYW55IHByb2ZpdCBtYWtpbmcgb3JnYW5pc2F0aW9uIG9yCit0aGF0IGlzIGNhcnJpZWQgb3V0IGZvciB0aGUgYmVuZWZpdCBvZiBhbnkgcHJvZml0LW1ha2luZworb3JnYW5pc2F0aW9uIGlzIG5vdCBhbiBBY2FkZW1pYyBQdXJwb3NlOworYW4gQXBwbGljYXRpb246IGEgc29mdHdhcmUgcHJvZ3JhbSBkZXNpZ25lZCB0byBwcm92aWRlIGEgc3BlY2lmaWMgZnVuY3Rpb24KK2ZvciB0aGUgdXNlcjsKK3RoZSBDQ1A0IFNvZnR3YXJlOiB0aGUgTGlicmFyaWVzIGFuZCBBcHBsaWNhdGlvbnMgZGlzdHJpYnV0ZWQgYnkgQ0NMUkMgZnJvbQordGltZSB0byB0aW1lIGFzIHBhcnQgb2YgdGhlIENDUDQgU29mdHdhcmUgU3VpdGUsIGV4Y2VwdAordGhlIEdOVSBTb2Z0d2FyZSBhbmQgdGhlIFRoaXJkIFBhcnR5IFNvZnR3YXJlOwordGhlIENDUDQgV2Vic2l0ZTogdGhlIHdlYnNpdGUgd2l0aCB0aGUgVVJMIHd3dy5jY3A0LmFjLnVrOwordGhlIEN1cnJlbnQgUmVsZWFzZTogVmVyc2lvbiA1LjAgb2YgdGhlIFNvZnR3YXJlLCBhbmQgYWxsIGxhdGVyIHZlcnNpb25zIHRoYXQKK0NDTFJDIGRlY2lkZXMgbWF5IGJlIHVzZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQ7CithIERlcml2ZWQgV29yazogYW55IG1vZGlmaWNhdGlvbiBvZiwgb3IgZW5oYW5jZW1lbnQgb3IgaW1wcm92ZW1lbnQgdG8sCithbnkgb2YgdGhlIFNvZnR3YXJlIGFuZCBhbnkgc29mdHdhcmUgb3Igb3RoZXIgd29yaworZGV2ZWxvcGVkIG9yIGRlcml2ZWQgZnJvbSwgb3IgYmFzZWQgb24sIGFueSBvZiB0aGUKK1NvZnR3YXJlLCBvciB0aGF0IGluY29ycG9yYXRlcyBhbnkgb2YgdGhlIFNvZnR3YXJlOwordGhlIExHUEw6IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2VuY2UsIGEgY29weSBvZiB3aGljaAorYXBwZWFycyBpbiBBcHBlbmRpeCBBIHRvIHRoaXMgQWdyZWVtZW50OwordGhlIEdQTDogdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlLCBhIGNvcHkgb2Ygd2hpY2ggYXBwZWFycworaW4gQXBwZW5kaXggQiB0byB0aGlzIEFncmVlbWVudDsKK3RoZSBHTlUgU29mdHdhcmU6IHRoZSBvcGVuIHNvdXJjZSBMaWJyYXJpZXMgYW5kIEFwcGxpY2F0aW9ucyB0aGF0IGFyZSBsaXN0ZWQKK29uIHRoZSBDQ1A0IFdlYnNpdGUgZnJvbSB0aW1lIHRvIHRpbWUgYXMgYmVpbmcgc3ViamVjdAordG8sIHJlc3BlY3RpdmVseSwgdGhlIHRlcm1zIG9mIHRoZSBMR1BMIG9yIHRoZSBHUEw7CithIEhhcm1mdWwgRWxlbWVudDogYW55IHZpcnVzLCB3b3JtLCB0aW1lIGJvbWIsIHRpbWUgbG9jaywgZHJvcCBkZWFkIGRldmljZSwKK3RyYXAgYW5kIGFjY2VzcyBjb2RlIG9yIGFueXRoaW5nIGVsc2UgdGhhdCBtaWdodCBkaXNydXB0LAorZGlzYWJsZSwgaGFybSBvciBpbXBlZGUgdGhlIG9wZXJhdGlvbiBvZiBhbnkgaW5mb3JtYXRpb24KK3N5c3RlbSwgb3IgdGhhdCBtaWdodCBjb3JydXB0LCBkYW1hZ2UsIGRlc3Ryb3kgb3IgcmVuZGVyCitpbmFjY2Vzc2libGUgYW55IHNvZnR3YXJlLCBkYXRhIG9yIGZpbGUgb24sIG9yIHRoYXQgbWF5CithbGxvdyBhbnkgdW5hdXRob3Jpc2VkIHBlcnNvbiB0byBnYWluIGFjY2VzcyB0bywgYW55CitpbmZvcm1hdGlvbiBzeXN0ZW0gb3IgYW55IHNvZnR3YXJlLCBkYXRhIG9yIGZpbGUgb24gaXQ7CitJbnRlbGxlY3R1YWwgUHJvcGVydHk6IHBhdGVudHMsIHRyYWRlIG1hcmtzLCBzZXJ2aWNlIG1hcmtzLCByZWdpc3RlcmVkIGRlc2lnbnMsCitjb3B5cmlnaHRzLCBkYXRhYmFzZSByaWdodHMsIGRlc2lnbiByaWdodHMsIGtub3ctaG93LAorY29uZmlkZW50aWFsIGluZm9ybWF0aW9uLCBhcHBsaWNhdGlvbnMgZm9yIGFueSBvZiB0aGUgYWJvdmUsCithbmQgYW55IHNpbWlsYXIgcmlnaHQgcmVjb2duaXNlZCBmcm9tIHRpbWUgdG8gdGltZSBpbiBhbnkKK2p1cmlzZGljdGlvbiwgdG9nZXRoZXIgd2l0aCBhbGwgcmlnaHRzIG9mIGFjdGlvbiBpbiByZWxhdGlvbiB0bwordGhlIGluZnJpbmdlbWVudCBvZiBhbnkgb2YgdGhlIGFib3ZlOworYSBMaWJyYXJ5OiBhIGNvbGxlY3Rpb24gb2YgcmV1c2FibGUgcHJvZ3JhbW1pbmcgcm91dGluZXMsIHNvZnR3YXJlCitmdW5jdGlvbnMgb3IgZGF0YSB0aGF0IG1heSBiZSBsaW5rZWQgdG8sIG9yIHVzZWQgd2l0aCwgYW4KK0FwcGxpY2F0aW9uOwordGhlIExpY2VuY2UgUGVyaW9kOiB0aGUgcGVyaW9kIGJlZ2lubmluZyB3aGVuIHRoZSBMaWNlbnNlZSBwb3N0cyBvciBmYXhlcyB0aGUKK2NvbXBsZXRlZCBhbmQgc2lnbmVkIGNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgdG8gQ0NMUkMKKzIKK2luIGFjY29yZGFuY2Ugd2l0aCBjbGF1c2UgNS4xLCBhbmQgZW5kaW5nIG9uIHRoZQordGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQgdW5kZXIgY2xhdXNlIDUuMjsKK3RoZSBTb2Z0d2FyZTogdGhlIHN1aXRlIG9mIHByb2dyYW1zIGtub3duIGFzIENDUDQsIGNvbXByaXNpbmcgdGhlCitHTlUgU29mdHdhcmUsIHRoZSBDQ1A0IFNvZnR3YXJlIGFuZCB0aGUgVGhpcmQgUGFydHkKK1NvZnR3YXJlOyBhbmQKK3RoZSBUaGlyZCBQYXJ0eSBTb2Z0d2FyZSBQcm9jaGVjaywgRkZUdywgbGlianBlZywgQ0JGLCBBc3RleHZpZXdlciwgUmFzbW9sIGFuZAorUGhhc2VyLgorMi4gTElDRU5DRQorVGhlIENDUDQgU29mdHdhcmUKKzIuMSBDQ0xSQyBncmFudHMgdGhlIExpY2Vuc2VlIGEgbm9uLWV4Y2x1c2l2ZSwgbm9uLXRyYW5zZmVyYWJsZSwgcm95YWx0eSBmcmVlIAorbGljZW5jZSB0byB1c2UsCitjb3B5LCBtb2RpZnksIGFuZCBlbmhhbmNlIGFuZCBkaXN0cmlidXRlIHRoZSBDQ1A0IExpYnJhcmllcyBkdXJpbmcgdGhlIExpY2VuY2UgCitQZXJpb2QKK29uIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBwcm92aWRlZCB0aGF0OgorMi4xLjEgdGhlIExpY2Vuc2VlIG1heSBkaXN0cmlidXRlLCBvciBzdXBwbHkgYW55IENDUDQgTGlicmFyeSBvciBhbnkgRGVyaXZlZCAKK1dvcmsKK2Jhc2VkIG9uIHRoYXQgTGlicmFyeSwgYW5kIG1heSBhbGxvdyBhbnkgdGhpcmQgcGFydHkgdG8gdXNlIGFueSBDQ1A0IExpYnJhcnkgb3IgCithbnkKK0Rlcml2ZWQgV29yayBiYXNlZCBvbiB0aGF0IExpYnJhcnksIHNvbGVseSBvbiBjb25kaXRpb24gdGhhdCB0aGUgcmVjaXBpZW50IG9mIAordGhhdAorQ0NQNCBMaWJyYXJ5IG9yIHRoYXQgRGVyaXZlZCBXb3JrIHdpbGwgY29tcGx5IHdpdGggY2xhdXNlIDIuMS4yIGJlbG93IGFzIHRob3VnaCAKK2l0Cit3ZXJlIG5hbWVkIGluc3RlYWQgb2YgdGhlIExpY2Vuc2VlIGluIHRoYXQgY2xhdXNlOyBhbmQKKzIuMS4yIHRoZSBMaWNlbnNlZSB3aWxsIG5vdGlmeSBDQ0xSQyBvZiBhbnkgRGVyaXZlZCBXb3JrIG1hZGUgYnkgb3IgZm9yIHRoZSAKK0xpY2Vuc2VlLCBvcgorYnkgYW55IG9mIGl0cyBlbXBsb3llZXMgb3Igc3R1ZGVudHMsIGJhc2VkIG9uIGFueSBDQ1A0IExpYnJhcnksIGFuZCB3aWxsIHByb3ZpZGUKK0NDTFJDIHdpdGggYSBjb3B5IG9mIHRoYXQgRGVyaXZlZCBXb3JrIChpbiBzb3VyY2UgY29kZSkgd2l0aGluIG9uZSB5ZWFyIGFmdGVyIGl0Cit3YXMgbWFkZS4gVGhlIExpY2Vuc2VlIGdyYW50cyBDQ0xSQyBhbiBpcnJldm9jYWJsZSwgaW5kZWZpbml0ZSBsaWNlbmNlIHRvIG1ha2UKK3RoYXQgRGVyaXZlZCBXb3JrIGF2YWlsYWJsZSB0byBhbnkgdGhpcmQgcGFydHkgb24gc3VjaCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhcworQ0NMUkMgbWF5IGZyb20gdGltZSB0byB0aW1lIGRlY2lkZS4gVGhpcyBjbGF1c2UgZG9lcyBub3QgYXBwbHkgdG8gYW55CitleGVjdXRhYmxlIHByb2dyYW0gYmFzZWQgb24gb3IgY29tYmluZWQgd2l0aCBhIExpYnJhcnksIG9yIHRvIGFueSBEZXJpdmVkIFdvcmsKK3RoYXQgdGhlIExpY2Vuc2VlIGRpc3RyaWJ1dGVzIHVuZGVyIHRoZSBMR1BMIG9yIHRoZSBHUEwuCisyLjIgQ0NMUkMgZ3JhbnRzIHRoZSBMaWNlbnNlZSBhIG5vbi1leGNsdXNpdmUsIG5vbi10cmFuc2ZlcmFibGUsIHJveWFsdHkgZnJlZSAKK2xpY2VuY2UgdG8gdXNlCithbmQgY29weSB0aGUgQ0NQNCBBcHBsaWNhdGlvbnMgZHVyaW5nIHRoZSBMaWNlbmNlIFBlcmlvZCBvbiB0aGUgdGVybXMgYW5kIAorY29uZGl0aW9ucyBvZgordGhpcyBBZ3JlZW1lbnQgcHJvdmlkZWQgdGhhdDoKKzIuMi4xIHRoZSBMaWNlbnNlZSBtYXkgbm90IGRpc3RyaWJ1dGUgYW55IENDUDQgQXBwbGljYXRpb24gb3IgYW55IERlcml2ZWQgV29yayAKK2Jhc2VkCitvbiBhbnkgQ0NQNCBBcHBsaWNhdGlvbiB0byBhbnkgdGhpcmQgcGFydHksIG9yIHNoYXJlIHRoZWlyIHVzZSB3aXRoIGFueSB0aGlyZCAKK3BhcnR5Cisod2hldGhlciBmcmVlIG9mIGNoYXJnZSBvciBvdGhlcndpc2UpOyBhbmQKKzIuMi4yIHRoZSBMaWNlbnNlZSBtYXkgbm90IGNvcHkgYW55IENDUDQgQXBwbGljYXRpb24gZXhjZXB0IGZvciB0aGUgcHVycG9zZXMgb2YgCittYWtpbmcKK2EgcmVhc29uYWJsZSBudW1iZXIgb2YgYmFjay11cCBjb3BpZXMsIG5vciBtYXkgdGhlIExpY2Vuc2VlIG1vZGlmeSBhbnkgQ0NQNAorQXBwbGljYXRpb24gb3IgY3JlYXRlIGFueSBEZXJpdmVkIFdvcmsgYmFzZWQgb24gYW55IENDUDQgQXBwbGljYXRpb24gZXhjZXB0IGZvcgordGhlIHB1cnBvc2Ugb2YgZXJyb3IgY29ycmVjdGlvbi4gVGhlIExpY2Vuc2VlIHdpbGwgcHJvdmlkZSBDQ0xSQyB3aXRoIGEgY29weSBvZiAKK2FueQorMworY29ycmVjdGlvbiBtYWRlIGJ5IHRoZSBMaWNlbnNlZSAoaW4gc291cmNlIGNvZGUpIHdpdGhpbiBvbmUgeWVhciBhZnRlciBpdCB3YXMgCittYWRlLgorVGhlIGxpY2Vuc2VlIGdyYW50cyBDQ0xSQyBhbiBpcnJldm9jYWJsZSwgaW5kZWZpbml0ZSBsaWNlbmNlIHRvIG1ha2UgdGhhdAorY29ycmVjdGlvbiBhdmFpbGFibGUgdG8gYW55IHRoaXJkIHBhcnR5IG9uIHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMgYXMgQ0NMUkMgCittYXkKK2Zyb20gdGltZSB0byB0aW1lIGRlY2lkZS4KKzIuMyBUaGUgQ0NQNCBTb2Z0d2FyZSBhbmQgYW55IERlcml2ZWQgV29yayBiYXNlZCBvbiBhbnkgcGFydCBvZiB0aGUgQ0NQNCAKK1NvZnR3YXJlIG1heQorYmUgdXNlZCBieSB0aGUgTGljZW5zZWUgYW5kIGl0cyBlbXBsb3llZXMgYW5kIHJlZ2lzdGVyZWQgc3R1ZGVudHMgZm9yIEFjYWRlbWljCitQdXJwb3NlcyBvbmx5LgorMi40IFRoZSBsaWNlbmNlcyBncmFudGVkIGluIHRoaXMgY2xhdXNlIDIgcmVsYXRlIG9ubHkgdG8gdGhlIEN1cnJlbnQgUmVsZWFzZS4gCitUaGUgTGljZW5zZWUKK211c3QgYWNxdWlyZSBhIG5ldyBsaWNlbmNlIGZvciBhbnkgZnV0dXJlIHZlcnNpb24gb2YgdGhlIFNvZnR3YXJlIHRoYXQgQ0NMUkMgCitkZWNpZGVzCityZXF1aXJlcyBhIG5ldyBvciBmdXJ0aGVyIGxpY2VuY2UuCitUaGUgR05VIFNvZnR3YXJlCisyLjUgVGhlIEdOVSBTb2Z0d2FyZSBpcyBzdXBwbGllZCB0byB0aGUgTGljZW5zZWUgb24gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIAordGhlIExHUEwKK29yIHRoZSBHUEwgYXMgaW5kaWNhdGVkIG9uIHRoZSBDQ1A0IFdlYnNpdGUgZnJvbSB0aW1lIHRvIHRpbWUuIEJ5IGVudGVyaW5nIGludG8gCit0aGlzCitBZ3JlZW1lbnQgdGhlIExpY2Vuc2VlIGFncmVlcyB0byBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhlIExHUEwgb3IgdGhlIEdQTCAKK2FzIHNvCitpbmRpY2F0ZWQuCitUaGUgVGhpcmQgUGFydHkgU29mdHdhcmUKKzIuNiBUaGUgVGhpcmQgUGFydHkgU29mdHdhcmUgaXMgc3VwcGxpZWQgdG8gdGhlIExpY2Vuc2VlIG9uIHRoZSB0ZXJtcyBhbmQgCitjb25kaXRpb25zIGltcG9zZWQKK2J5IHRoZSB0aGlyZCBwYXJ0eSBvd25lciBvciBsaWNlbnNvci4gQnkgZW50ZXJpbmcgaW50byB0aGlzIEFncmVlbWVudCB0aGUgCitMaWNlbnNlZSBhZ3JlZXMKK3RvIGNvbXBseSB3aXRoIHRob3NlIHRlcm1zIGFuZCBjb25kaXRpb25zLgorVGhlIFNvZnR3YXJlCisyLjcgVGhlIExpY2Vuc2VlIHdpbGwgbm90IHRhbXBlciB3aXRoIG9yIHJlbW92ZSBhbnkgY29weXJpZ2h0IG9yIG90aGVyIAorcHJvcHJpZXRhcnkgbm90aWNlIG9yCithbnkgZGlzY2xhaW1lciB0aGF0IGFwcGVhcnMgb24gb3IgaW4gYW55IHBhcnQgb2YgdGhlIFNvZnR3YXJlLCBhbmQgd2lsbCAKK3JlcHJvZHVjZSB0aGUKK3NhbWUgaW4gYWxsIGNvcGllcyBvZiBhbnkgb2YgdGhlIFNvZnR3YXJlIGFuZCBpbiBhbGwgRGVyaXZlZCBXb3Jrcy4KKzMuIFdBUlJBTlRJRVMgQU5EIExJQUJJTElUWQorMy4xIFRoZSBTb2Z0d2FyZSBpcyBwcm92aWRlZCBmb3IgQWNhZGVtaWMgUHVycG9zZXMgZnJlZSBvZiBjaGFyZ2UuIFRoZXJlZm9yZSAKK0NDTFJDIGFuZAoraXRzIGxpY2Vuc29ycyBnaXZlIG5vIHdhcnJhbnR5IGFuZCBtYWtlIG5vIHJlcHJlc2VudGF0aW9uIGluIHJlbGF0aW9uIHRvIHRoZSAKK1NvZnR3YXJlIG9yCithbnkgYXNzaXN0YW5jZSBvciBhZHZpY2UgdGhhdCBDQ0xSQyBtYXkgZ2l2ZSBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFNvZnR3YXJlLiAKK1RoZQorTGljZW5zZWUsIGl0cyBlbXBsb3llZXMgYW5kIHN0dWRlbnRzIGFuZCBhbnlvbmUgdG8gd2hvbSB0aGUgTGljZW5zZWUgbWFrZXMgdGhlCitTb2Z0d2FyZSBvciBhbnkgRGVyaXZlZCBXb3JrIGF2YWlsYWJsZSwgdXNlIHRoZW0gYXQgdGhlaXIgb3duIHJpc2suIFRoZSBMaWNlbnNlZQord2lsbCBpbmRlbW5pZnkgQ0NMUkMgYWdhaW5zdCBhbnkgY2xhaW0gbWFkZSBieSBhbnkgdGhpcmQgcGFydHkgdG8gd2hvbSB0aGUgCitMaWNlbnNlZQoraGFzIG1hZGUgdGhlIFNvZnR3YXJlIG9yIGFueSBEZXJpdmVkIFdvcmsgYXZhaWxhYmxlLgorMy4yIEJlZm9yZSB1c2luZyBhbnkgb2YgdGhlIHNvZnR3YXJlLCB0aGUgTGljZW5zZWUgd2lsbCBjaGVjayB0aGF0IHRoZSBTb2Z0d2FyZSAKK2RvZXMgbm90Citjb250YWluIGFueSBIYXJtZnVsIEVsZW1lbnQuIE5laXRoZXIgQ0NMUkMgbm9yIGl0cyBsaWNlbnNvcnMgd2FycmFudHMgdGhhdCB0aGUgCitTb2Z0d2FyZQord2lsbCBydW4gd2l0aG91dCBpbnRlcnJ1cHRpb24gb3IgYmUgZXJyb3IgZnJlZSwgb3IgZnJlZSBmcm9tIGFueSBIYXJtZnVsIAorRWxlbWVudC4gQ0NMUkMgaXMKK25vdCBvYmxpZ2VkIHRvIHByb3ZpZGUgYW55IHN1cHBvcnQgb3IgZXJyb3IgY29ycmVjdGlvbiBzZXJ2aWNlLCBhc3Npc3RhbmNlIG9yIAorYWR2aWNlIGluCis0CityZWxhdGlvbiB0byB0aGUgU29mdHdhcmUuIElmIGl0IGRvZXMgcHJvdmlkZSB0aGF0IHNvcnQgb2Ygc2VydmljZSwgYXNzaXN0YW5jZSAKK29yIGFkdmljZSwKK3N1YmplY3QgdG8gY2xhdXNlIDMuNywgQ0NMUkMgd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgbG9zcyBvciBkYW1hZ2Ugc3VmZmVyZWQgCitieSB0aGUKK0xpY2Vuc2VlIGFzIGEgcmVzdWx0LgorMy4zIE5laXRoZXIgQ0NMUkMgbm9yIGFueSBvZiBpdHMgbGljZW5zb3JzIHdpbGwgYmUgbGlhYmxlIHRvIHRoZSBMaWNlbnNlZSB0byAKK3RoZSBleHRlbnQgdGhhdCBhbnkKK2xvc3Mgb3IgZGFtYWdlIGlzIGNhdXNlZCBieSB0aGUgTGljZW5zZWUncyBmYWlsdXJlIHRvIGltcGxlbWVudCwgb3IgdGhlIAorTGljZW5zZWUncyBkZWxheQoraW4gaW1wbGVtZW50aW5nLCBhbnkgdXBncmFkZSwgdXBkYXRlLCBuZXcgcmVsZWFzZSwgcmV2aXNpb24sIHZlcnNpb24gb3IgCittb2RpZmljYXRpb24gb2YsIG9yCithZHZpY2UgaW4gcmVsYXRpb24gdG8sIHRoZSBTb2Z0d2FyZSB0aGF0IHdvdWxkIGhhdmUgcmVtZWRpZWQgb3IgbWl0aWdhdGVkIHRoZSAKK2VmZmVjdHMgb2YKK2FueSBlcnJvciwgZGVmZWN0LCBidWcgb3IgZGVmaWNpZW5jeS4KKzMuNCBUaGUgTGljZW5zZWUgYWNrbm93bGVkZ2VzIHRoYXQgcHJvcGVyIHVzZSBvZiB0aGUgU29mdHdhcmUgYW5kIGFueSBEZXJpdmVkIAorV29yayBpcworZGVwZW5kZW50IG9uIHRoZSBMaWNlbnNlZSwgaXRzIGVtcGxveWVlcyBhbmQgc3R1ZGVudHMgZXhlcmNpc2luZyBwcm9wZXIgc2tpbGwgCithbmQgY2FyZQoraW4gaW5wdXR0aW5nIGRhdGEgYW5kIGludGVycHJldGluZyB0aGUgb3V0cHV0IHByb3ZpZGVkIGJ5IHRoZSBTb2Z0d2FyZSBvciB0aGF0IAorRGVyaXZlZAorV29yay4gQ0NMUkMgYW5kIGl0cyBsaWNlbnNvcnMgd2lsbCBub3QgYmUgbGlhYmxlIGZvciB0aGUgY29uc2VxdWVuY2VzIG9mIAorZGVjaXNpb25zIHRha2VuCitieSB0aGUgTGljZW5zZWUgb3IgYW55IG90aGVyIHBlcnNvbiBvbiB0aGUgYmFzaXMgb2YgdGhhdCBvdXRwdXQuIENDTFJDIGRvZXMgbm90IAorYWNjZXB0CithbnkgcmVzcG9uc2liaWxpdHkgZm9yIGFueSB1c2Ugd2hpY2ggbWF5IGJlIG1hZGUgYnkgdGhlIExpY2Vuc2VlIG9mIHRoYXQgCitvdXRwdXQsIG5vciBmb3IKK2FueSByZWxpYW5jZSB3aGljaCBtYXkgYmUgcGxhY2VkIG9uIHRoYXQgb3V0cHV0LCBub3IgZm9yIGFkdmljZSBvciBpbmZvcm1hdGlvbiAKK2dpdmVuIGluCitjb25uZWN0aW9uIHdpdGggdGhhdCBvdXRwdXQuCiszLjUgU3ViamVjdCB0byBjbGF1c2UgMy43LCBDQ0xSQydzIGxpYWJpbGl0eSBmb3IgYW55IGJyZWFjaCBvZiB0aGlzIEFncmVlbWVudCwgCithbnkgbmVnbGlnZW5jZQorb3IgYXJpc2luZyBpbiBhbnkgb3RoZXIgd2F5IG91dCBvZiB0aGUgc3ViamVjdCBtYXR0ZXIgb2YgdGhpcyBBZ3JlZW1lbnQsIHdpbGwgCitub3QgZXh0ZW5kIHRvCithbnkgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgbG9zc2VzLCBvciBhbnkgbG9zcyBvZiBwcm9maXRzLCBsb3NzIAorb2YgcmV2ZW51ZSwKK2xvc3Mgb2YgZGF0YSwgbG9zcyBvZiBjb250cmFjdHMgb3Igb3Bwb3J0dW5pdHksIHdoZXRoZXIgZGlyZWN0IG9yIGluZGlyZWN0LCAKK2V2ZW4gaWYgdGhlCitMaWNlbnNlZSBoYXMgYWR2aXNlZCBDQ0xSQyBvZiB0aGUgcG9zc2liaWxpdHkgb2YgdGhvc2UgbG9zc2VzIGFyaXNpbmcgb3IgaWYgCit0aGV5IHdlcmUgb3IKK2FyZSB3aXRoaW4gQ0NMUkMncyBjb250ZW1wbGF0aW9uLiBDQ0xSQ+KAmXMgbGljZW5zb3JzIHdpbGwgbm90IGJlIGxpYWJsZSB0byB0aGUgCitMaWNlbnNlZQorZm9yIGFueSBsb3NzIG9yIGRhbWFnZSwgaG93ZXZlciBjYXVzZWQgKGluY2x1ZGluZyBieSBuZWdsaWdlbmNlKSBhbmQgd2hldGhlciAKK2RpcmVjdCBvcgoraW5kaXJlY3QuCiszLjYgU3ViamVjdCB0byBjbGF1c2UgMy43LCB0aGUgYWdncmVnYXRlIGxpYWJpbGl0eSBvZiBDQ0xSQyBmb3IgYW55IGJyZWFjaCBvZiAKK3RoaXMgQWdyZWVtZW50LAorYW55IG5lZ2xpZ2VuY2Ugb3IgYXJpc2luZyBpbiBhbnkgb3RoZXIgd2F5IG91dCBvZiB0aGUgc3ViamVjdCBtYXR0ZXIgb2YgdGhpcyAKK0FncmVlbWVudCB3aWxsCitub3QgZXhjZWVkIMKjNTAsMDAwLgorMy43IE5vdGhpbmcgaW4gdGhpcyBBZ3JlZW1lbnQgKGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIExHUEwgb3IgdGhlIAorR1BMLCBhcworYXBwbGljYWJsZSkgbGltaXRzIG9yIGV4Y2x1ZGVzIENDTFJDJ3MgbGlhYmlsaXR5IGZvciBkZWF0aCBvciBwZXJzb25hbCBpbmp1cnkgCitjYXVzZWQgYnkgaXRzCituZWdsaWdlbmNlIG9yIGZvciBhbnkgZnJhdWQsIG9yIGZvciBhbnkgc29ydCBvZiBsaWFiaWxpdHkgdGhhdCwgYnkgbGF3LCBjYW5ub3QgCitiZSBsaW1pdGVkIG9yCitleGNsdWRlZC4KKzMuOCBJbiBhZGRpdGlvbiB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIExHUEwgb3IgdGhlIEdQTCAoYXMgCithcHBsaWNhYmxlKSwgYW5kIHRoZQordGVybXMgdGhhdCBhcHBseSB0byBhbnkgVGhpcmQgUGFydHkgU29mdHdhcmUsIHRoZSB0ZXJtcyBvZiB0aGlzIGNsYXVzZSAzIGFwcGx5IAorYXMKK2JldHdlZW4gQ0NMUkMgYW5kIHRoZSBMaWNlbnNlZSwgYW5kIHRoZSB2YWxpZGl0eSBvZiBhbnkgcGFydCBvZiB0aGlzIGNsYXVzZSAzIAord2lsbCBub3QKK2JlIGFmZmVjdGVkIGJ5IGFueSBwYXJ0IG9mIHRoZSBMR1BMIG9yIHRoZSBHUEwgb3IgdGhlIHRlcm1zIHRoYXQgYXBwbHkgdG8gYW55IAorVGhpcmQKK1BhcnR5IFNvZnR3YXJlIGJlaW5nIGhlbGQgdG8gYmUgaW52YWxpZCBieSBhbnkgY291cnQuCis1CiszLjkgVGhlIGV4cHJlc3MgdW5kZXJ0YWtpbmdzIGFuZCBnaXZlbiBieSBDQ0xSQyBpbiB0aGlzIEFncmVlbWVudCBhbmQgdGhlIHRlcm1zIAorb2YgdGhpcworQWdyZWVtZW50IGFyZSBpbiBsaWV1IG9mIGFsbCB3YXJyYW50aWVzLCBjb25kaXRpb25zLCB0ZXJtcywgdW5kZXJ0YWtpbmdzIGFuZCAKK29ibGlnYXRpb25zCitvbiB0aGUgcGFydCBvZiBDQ0xSQywgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQgYnkgc3RhdHV0ZSwgY29tbW9uIGxhdywgY3VzdG9tLAordHJhZGUgdXNhZ2UsIGNvdXJzZSBvZiBkZWFsaW5nIG9yIGluIGFueSBvdGhlciB3YXkuIEFsbCBvZiB0aGVzZSBhcmUgZXhjbHVkZWQgCit0byB0aGUKK2Z1bGxlc3QgZXh0ZW50IHBlcm1pdHRlZCBieSBsYXcuCis0LiBJTlRFTExFQ1RVQUwgUFJPUEVSVFkgUklHSFRTIEFORCBBQ0tOT1dMRURHRU1FTlRTCis0LjEgTm90aGluZyBpbiB0aGlzIEFncmVlbWVudCBhc3NpZ25zIG9yIHRyYW5zZmVycyBhbnkgSW50ZWxsZWN0dWFsIFByb3BlcnR5IAorUmlnaHRzIGluIGFueSBvZgordGhlIFNvZnR3YXJlLiBUaG9zZSByaWdodHMgYXJlIHJlc2VydmVkIHRvIENDTFJDIG9yIGl0cyBsaWNlbnNvcnMuCis0LjIgVGhlIExpY2Vuc2VlIHdpbGwgZW5zdXJlIHRoYXQsIGlmIGFueSBvZiBpdHMgZW1wbG95ZWVzIG9yIHN0dWRlbnRzIHB1Ymxpc2ggCithbnkgYXJ0aWNsZSBvcgorb3RoZXIgbWF0ZXJpYWwgcmVzdWx0aW5nIGZyb20sIG9yIHJlbGF0aW5nIHRvLCBhIHByb2plY3Qgb3Igd29yayB1bmRlcnRha2VuIAord2l0aCB0aGUKK2Fzc2lzdGFuY2Ugb2YgYW55IHBhcnQgb2YgdGhlIFNvZnR3YXJlLCB0aGF0IHB1YmxpY2F0aW9uIHdpbGwgY29udGFpbiBhIHByb3BlcgorYWNrbm93bGVkZ2VtZW50IG9yIGNpdGF0aW9uIGFzIGluZGljYXRlZCBmcm9tIHRpbWUgdG8gdGltZSBvbiB0aGUgQ0NQNCBXZWJzaXRlLgorNS4gVEVSTUlOQVRJT04KKzUuMSBUaGlzIEFncmVlbWVudCB3aWxsIHRha2UgZWZmZWN0IGFuZCB0aGUgTGljZW5jZSBQZXJpb2Qgd2lsbCBzdGFydCB3aGVuIGEgCitjb21wbGV0ZWQgY29weQorb2YgdGhpcyBBZ3JlZW1lbnQsIHNpZ25lZCBvbiBiZWhhbGYgb2YgdGhlIExpY2Vuc2VlLCBoYXMgYmVlbiBwb3N0ZWQgdG8gdGhlIAorU2VjcmV0YXJ5IHRvCitDQ1A0LCBhdCBDQ0xSQywgRGFyZXNidXJ5IExhYm9yYXRvcnksIFdhcnJpbmd0b24gV0EgNCA0QUQsIG9yIGZheGVkIHRvIDorNDQgMTkyNQorNjAzODI1IChvciB0byBhbnkgb3RoZXIgYWRkcmVzcyBvciBmYXggbnVtYmVyIGdpdmVuIGZvciB0aGlzIHB1cnBvc2Ugb24gdGhlIENDUDQKK3dlYnNpdGUgYXQgdGhlIHRpbWUgdGhlIExpY2Vuc2VlIGRvd25sb2FkcyB0aGlzIGZvcm0gb2YgTGljZW5jZSBBZ3JlZW1lbnQgZnJvbSAKK3RoYXQKK3dlYnNpdGUpLgorNS4yIFRoaXMgQWdyZWVtZW50IHdpbGwgdGVybWluYXRlIGltbWVkaWF0ZWx5IGFuZCBhdXRvbWF0aWNhbGx5IGlmOgorNS4yLjEgdGhlIExpY2Vuc2VlIGlzIGluIGJyZWFjaCBvZiB0aGlzIEFncmVlbWVudDsgb3IKKzUuMi4yIHRoZSBMaWNlbnNlZSBiZWNvbWVzIGluc29sdmVudCwgb3IgaWYgYW4gb3JkZXIgaXMgbWFkZSBvciBhIHJlc29sdXRpb24gaXMgCitwYXNzZWQgZm9yCitpdHMgd2luZGluZyB1cCAoZXhjZXB0IHZvbHVudGFyaWx5IGZvciB0aGUgcHVycG9zZSBvZiBzb2x2ZW50IGFtYWxnYW1hdGlvbiBvcgorcmVjb25zdHJ1Y3Rpb24pLCBvciBpZiBhbiBhZG1pbmlzdHJhdG9yLCBhZG1pbmlzdHJhdGl2ZSByZWNlaXZlciBvciByZWNlaXZlciBpcworYXBwb2ludGVkIG92ZXIgdGhlIHdob2xlIG9yIGFueSBwYXJ0IG9mIGl0cyBhc3NldHMsIG9yIGlmIGl0IG1ha2VzIGFueSAKK2FycmFuZ2VtZW50Cit3aXRoIGl0cyBjcmVkaXRvcnMuCis1LjMgVGhlIExpY2Vuc2VlJ3MgcmlnaHQgdG8gdXNlIHRoZSBTb2Z0d2FyZSB3aWxsIGNlYXNlIGltbWVkaWF0ZWx5IG9uIHRoZSAKK3Rlcm1pbmF0aW9uIG9mIHRoaXMKK0FncmVlbWVudCwgYW5kIHRoZSBMaWNlbnNlZSB3aWxsIGRlc3Ryb3kgYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUgdGhhdCBpdCBvciAKK2FueSBvZiBpdHMKK2VtcGxveWVlcyBvciBzdHVkZW50cyBob2xkcy4KKzUuNCBDbGF1c2VzIDEsIDIuMS4yLCAyLjMsIDIuNCwgMi41LCAyLjYsIDIuNywgMywgNCwgNS4zLCA1LjQsIDUuNSBhbmQgNiB3aWxsIAorc3Vydml2ZSB0aGUgZXhwaXJ5IG9mCit0aGUgTGljZW5jZSBQZXJpb2QgYW5kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIEFncmVlbWVudCwgYW5kIHdpbGwgY29udGludWUgCitpbmRlZmluaXRlbHkuCis1LjUgQ0NMUkMgbWF5IHdpdGhkcmF3IGFueSBvZiB0aGUgU29mdHdhcmUgZnJvbSB0aGUgQ0NQNCBTdWl0ZSBhdCBhbnkgdGltZS4gSWYgCithbnkgdGhpcmQKK3BhcnR5IG93bmVyIG9mIHRoZSBJbnRlbGxlY3R1YWwgUHJvcGVydHkgaW4gYW55IG9mIHRoZSBTb2Z0d2FyZSB3aXRoZHJhd3MgCitDQ0xSQ+KAmXMgcmlnaHQKK3RvIGRpc3RyaWJ1dGUgdGhhdCBzb2Z0d2FyZSwgdGhlIExpY2Vuc2Vl4oCZcyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgaW4gCityZWxhdGlvbiB0byB0aGF0Cis2Citzb2Z0d2FyZSB3aWxsIGltbWVkaWF0ZWx5IHRlcm1pbmF0ZSwgYW5kIHRoZSBMaWNlbnNlZSB3aWxsIGNlYXNlIHVzaW5nIHRoYXQgCitwYXJ0IG9mIHRoZQorU29mdHdhcmUKKzYuIEdFTkVSQUwKKzYuMSBIZWFkaW5nczogVGhlIGhlYWRpbmdzIGluIHRoaXMgQWdyZWVtZW50IGFyZSBmb3IgZWFzZSBvZiByZWZlcmVuY2Ugb25seTsgCit0aGV5IGRvIG5vdAorYWZmZWN0IGl0cyBjb25zdHJ1Y3Rpb24gb3IgaW50ZXJwcmV0YXRpb24uCis2LjIgQXNzaWdubWVudCBldGM6IFRoZSBMaWNlbnNlZSBtYXkgbm90IGFzc2lnbiBvciB0cmFuc2ZlciB0aGlzIEFncmVlbWVudCBhcyBhIAord2hvbGUsIG9yCithbnkgb2YgaXRzIHJpZ2h0cyBvciBvYmxpZ2F0aW9ucyB1bmRlciBpdCwgd2l0aG91dCBmaXJzdCBvYnRhaW5pbmcgdGhlIHdyaXR0ZW4gCitjb25zZW50IG9mCitDQ0xSQy4KKzYuMyBJbGxlZ2FsL3VuZW5mb3JjZWFibGUgcHJvdmlzaW9uczogSWYgdGhlIHdob2xlIG9yIGFueSBwYXJ0IG9mIGFueSBwcm92aXNpb24gCitvZiB0aGlzCitBZ3JlZW1lbnQgaXMgdm9pZCBvciB1bmVuZm9yY2VhYmxlIGluIGFueSBqdXJpc2RpY3Rpb24sIHRoZSBvdGhlciBwcm92aXNpb25zIG9mIAordGhpcworQWdyZWVtZW50LCBhbmQgdGhlIHJlc3Qgb2YgdGhlIHZvaWQgb3IgdW5lbmZvcmNlYWJsZSBwcm92aXNpb24sIHdpbGwgY29udGludWUgCitpbiBmb3JjZSBpbgordGhhdCBqdXJpc2RpY3Rpb24sIGFuZCB0aGUgdmFsaWRpdHkgYW5kIGVuZm9yY2VhYmlsaXR5IG9mIHRoYXQgcHJvdmlzaW9uIGluIGFueSAKK290aGVyCitqdXJpc2RpY3Rpb24gd2lsbCBub3QgYmUgYWZmZWN0ZWQuCis2LjQgV2FpdmVyIG9mIHJpZ2h0czogSWYgQ0NMUkMgZmFpbHMgdG8gZW5mb3JjZSwgb3IgZGVsYXlzIGluIGVuZm9yY2luZywgYW4gCitvYmxpZ2F0aW9uIG9mIHRoZQorTGljZW5zZWUsIG9yIGZhaWxzIHRvIGV4ZXJjaXNlLCBvciBkZWxheXMgaW4gZXhlcmNpc2luZywgYSByaWdodCB1bmRlciB0aGlzIAorQWdyZWVtZW50LCB0aGF0CitmYWlsdXJlIG9yIGRlbGF5IHdpbGwgbm90IGFmZmVjdCBpdHMgcmlnaHQgdG8gZW5mb3JjZSB0aGF0IG9ibGlnYXRpb24gb3IgCitjb25zdGl0dXRlIGEgd2FpdmVyIG9mCit0aGF0IHJpZ2h0LiBBbnkgd2FpdmVyIGJ5IENDTFJDIG9mIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgd2lsbCBub3QsIAordW5sZXNzCitleHByZXNzbHkgc3RhdGVkIHRvIHRoZSBjb250cmFyeSwgY29uc3RpdHV0ZSBhIHdhaXZlciBvZiB0aGF0IHByb3Zpc2lvbiBvbiBhIAorZnV0dXJlIG9jY2FzaW9uLgorNi41IEVudGlyZSBhZ3JlZW1lbnQ6IFRoaXMgQWdyZWVtZW50IGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gCit0aGUgcGFydGllcworcmVsYXRpbmcgdG8gaXRzIHN1YmplY3QgbWF0dGVyLiBUaGUgTGljZW5zZWUgYWNrbm93bGVkZ2VzIHRoYXQgaXQgaGFzIG5vdCAKK2VudGVyZWQgaW50byB0aGlzCitBZ3JlZW1lbnQgb24gdGhlIGJhc2lzIG9mIGFueSB3YXJyYW50eSwgcmVwcmVzZW50YXRpb24sIHN0YXRlbWVudCwgYWdyZWVtZW50IG9yCit1bmRlcnRha2luZyBleGNlcHQgdGhvc2UgZXhwcmVzc2x5IHNldCBvdXQgaW4gdGhpcyBBZ3JlZW1lbnQuIFRoZSBMaWNlbnNlZSAKK3dhaXZlcyBhbnkKK2NsYWltIGZvciBicmVhY2ggb2YsIG9yIGFueSByaWdodCB0byByZXNjaW5kIHRoaXMgQWdyZWVtZW50IGluIHJlc3BlY3Qgb2YsIGFueQorcmVwcmVzZW50YXRpb24gd2hpY2ggaXMgbm90IGFuIGV4cHJlc3MgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50LiBIb3dldmVyLCAKK3RoaXMgY2xhdXNlCitkb2VzIG5vdCBleGNsdWRlIGFueSBsaWFiaWxpdHkgd2hpY2ggQ0NMUkMgbWF5IGhhdmUgdG8gdGhlIExpY2Vuc2VlIChvciBhbnkgCityaWdodCB3aGljaAordGhlIExpY2Vuc2VlIG1heSBoYXZlIHRvIHJlc2NpbmQgdGhpcyBBZ3JlZW1lbnQpIGluIHJlc3BlY3Qgb2YgYW55IGZyYXVkdWxlbnQKK21pc3JlcHJlc2VudGF0aW9uIG9yIGZyYXVkdWxlbnQgY29uY2VhbG1lbnQgYmVmb3JlIHRoZSBzaWduaW5nIG9mIHRoaXMgCitBZ3JlZW1lbnQuCis2LjYgQW1lbmRtZW50czogTm8gdmFyaWF0aW9uIG9mLCBvciBhbWVuZG1lbnQgdG8sIHRoaXMgQWdyZWVtZW50IHdpbGwgYmUgCitlZmZlY3RpdmUgdW5sZXNzCitpdCBpcyBtYWRlIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSBlYWNoIHBhcnR5J3MgcmVwcmVzZW50YXRpdmUuCis2LjcgVGhpcmQgcGFydGllczogTm8gb25lIGV4Y2VwdCBhIHBhcnR5IHRvIHRoaXMgQWdyZWVtZW50IGhhcyBhbnkgcmlnaHQgdG8gCitwcmV2ZW50IHRoZQorYW1lbmRtZW50IG9mIHRoaXMgQWdyZWVtZW50IG9yIGl0cyB0ZXJtaW5hdGlvbiwgYW5kIG5vIG9uZSBleGNlcHQgYSBwYXJ0eSB0byAKK3RoaXMKK0FncmVlbWVudCBtYXkgZW5mb3JjZSBhbnkgYmVuZWZpdCBjb25mZXJyZWQgYnkgdGhpcyBBZ3JlZW1lbnQsIHVubGVzcyB0aGlzIAorQWdyZWVtZW50CitleHByZXNzbHkgcHJvdmlkZXMgb3RoZXJ3aXNlLgorNi44IEdvdmVybmluZyBsYXc6IFRoaXMgQWdyZWVtZW50IGlzIGdvdmVybmVkIGJ5LCBhbmQgaXMgdG8gYmUgY29uc3RydWVkIGluIAorYWNjb3JkYW5jZQord2l0aCwgRW5nbGlzaCBsYXcuIFRoZSBFbmdsaXNoIENvdXJ0cyB3aWxsIGhhdmUgZXhjbHVzaXZlIGp1cmlzZGljdGlvbiB0byBkZWFsIAord2l0aCBhbnkKKzcKK2Rpc3B1dGUgd2hpY2ggaGFzIGFyaXNlbiBvciBtYXkgYXJpc2Ugb3V0IG9mIG9yIGluIGNvbm5lY3Rpb24gd2l0aCB0aGlzIAorQWdyZWVtZW50LCBleGNlcHQKK3RoYXQgQ0NMUkMgbWF5IGJyaW5nIHByb2NlZWRpbmdzIGFnYWluc3QgdGhlIExpY2Vuc2VlIG9yIGZvciBhbiBpbmp1bmN0aW9uIGluIAorYW55CitqdXJpc2RpY3Rpb24uIFtJZiB0aGUgTGljZW5zZWUncyB1c3VhbCBwbGFjZSBvZiBidXNpbmVzcyBvciByZWdpc3RlcmVkIG9mZmljZSAKK2lzIG5vdCBpbgorRW5nbGFuZCwgdGhlIExpY2Vuc2Vl4oCZcyBhZGRyZXNzIGZvciBzZXJ2aWNlIGluIEVuZ2xhbmQgaXMgX19fX10uCitTSUdORUQgZm9yIGFuZCBvbiBiZWhhbGYgb2YgdGhlIExpY2Vuc2VlOgorTmFtZToKK1Bvc2l0aW9uOgorU2lnbmF0dXJlOgorRGF0ZToKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL2NjdGJ4LTIuMCBiL2xpY2Vuc2VzL2NjdGJ4LTIuMApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MWVmNGM1Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvY2N0YngtMi4wCkBAIC0wLDAgKzEsNDQgQEAKKyoqKiBMaWNlbnNlIGFncmVlbWVudCAqKioKKworY2N0YnggQ29weXJpZ2h0IChjKSAyMDA2LCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZgorQ2FsaWZvcm5pYSwgdGhyb3VnaCBMYXdyZW5jZSBCZXJrZWxleSBOYXRpb25hbCBMYWJvcmF0b3J5IChzdWJqZWN0IHRvCityZWNlaXB0IG9mIGFueSByZXF1aXJlZCBhcHByb3ZhbHMgZnJvbSB0aGUgVS5TLiBEZXB0LiBvZiBFbmVyZ3kpLiAgQWxsCityaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKygxKSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisoMikgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKK25vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKK2RvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKygzKSBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsIExhd3JlbmNlIEJlcmtlbGV5CitOYXRpb25hbCBMYWJvcmF0b3J5LCBVLlMuIERlcHQuIG9mIEVuZXJneSBub3IgdGhlIG5hbWVzIG9mIGl0cworY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KK3RoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTCitJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKK1RPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQorUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSCitPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKK0VYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKK1BST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKK1lvdSBhcmUgdW5kZXIgbm8gb2JsaWdhdGlvbiB3aGF0c29ldmVyIHRvIHByb3ZpZGUgYW55IGJ1ZyBmaXhlcywKK3BhdGNoZXMsIG9yIHVwZ3JhZGVzIHRvIHRoZSBmZWF0dXJlcywgZnVuY3Rpb25hbGl0eSBvciBwZXJmb3JtYW5jZSBvZgordGhlIHNvdXJjZSBjb2RlICgiRW5oYW5jZW1lbnRzIikgdG8gYW55b25lOyBob3dldmVyLCBpZiB5b3UgY2hvb3NlIHRvCittYWtlIHlvdXIgRW5oYW5jZW1lbnRzIGF2YWlsYWJsZSBlaXRoZXIgcHVibGljbHksIG9yIGRpcmVjdGx5IHRvCitMYXdyZW5jZSBCZXJrZWxleSBOYXRpb25hbCBMYWJvcmF0b3J5LCB3aXRob3V0IGltcG9zaW5nIGEgc2VwYXJhdGUKK3dyaXR0ZW4gbGljZW5zZSBhZ3JlZW1lbnQgZm9yIHN1Y2ggRW5oYW5jZW1lbnRzLCB0aGVuIHlvdSBoZXJlYnkgZ3JhbnQKK3RoZSBmb2xsb3dpbmcgbGljZW5zZTogYSAgbm9uLWV4Y2x1c2l2ZSwgcm95YWx0eS1mcmVlIHBlcnBldHVhbCBsaWNlbnNlCit0byBpbnN0YWxsLCB1c2UsIG1vZGlmeSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzLCBpbmNvcnBvcmF0ZSBpbnRvCitvdGhlciBjb21wdXRlciBzb2Z0d2FyZSwgZGlzdHJpYnV0ZSwgYW5kIHN1YmxpY2Vuc2Ugc3VjaCBlbmhhbmNlbWVudHMgb3IKK2Rlcml2YXRpdmUgd29ya3MgdGhlcmVvZiwgaW4gYmluYXJ5IGFuZCBzb3VyY2UgY29kZSBmb3JtLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvY2hhcm0gYi9saWNlbnNlcy9jaGFybQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTNkMzgzCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvY2hhcm0KQEAgLTAsMCArMSwxNDggQEAKK0NoYXJtKysvQ29udmVyc2UgTGljZW5zZQorCitVbml2ZXJzaXR5IG9mIElsbGlub2lzCisKK1VuaXZlcnNpdHkgb2YgSWxsaW5vaXMKK0NoYXJtKysvQ29udmVyc2UgUGFyYWxsZWwgUHJvZ3JhbW1pbmcgU3lzdGVtIFNvZnR3YXJlCitOb24tRXhjbHVzaXZlLCBOb24tQ29tbWVyY2lhbCBVc2UgTGljZW5zZQorCitVcG9uIGV4ZWN1dGlvbiBvZiB0aGlzIEFncmVlbWVudCBieSB0aGUgcGFydHkgaWRlbnRpZmllZCBiZWxvdyAoIkxpY2Vuc2VlIiksCitUaGUgQm9hcmQgb2YgVHJ1c3RlZXMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgICgiSWxsaW5vaXMiKSwgb24gYmVoYWxmIG9mCitUaGUgUGFyYWxsZWwgUHJvZ3JhbW1pbmcgTGFib3JhdG9yeSAoIlBQTCIpIGluIHRoZSBEZXBhcnRtZW50IG9mIENvbXB1dGVyCitTY2llbmNlLCB3aWxsIHByb3ZpZGUgdGhlIENoYXJtKysvQ29udmVyc2UgUGFyYWxsZWwgUHJvZ3JhbW1pbmcgU3lzdGVtIHNvZnR3YXJlCisoIkNoYXJtKysiKSBpbiBCaW5hcnkgQ29kZSBhbmQvb3IgU291cmNlIENvZGUgZm9ybSAoIlNvZnR3YXJlIikgdG8gTGljZW5zZWUsCitzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMuIEZvciBwdXJwb3NlcyBvZiB0aGlzIEFncmVlbWVudCwKK0JpbmFyeSBDb2RlIGlzIHRoZSBjb21waWxlZCBjb2RlLCB3aGljaCBpcyByZWFkeSB0byBydW4gb24gTGljZW5zZWUncyBjb21wdXRlci4KK1NvdXJjZSBjb2RlIGNvbnNpc3RzIG9mIGEgc2V0IG9mIGZpbGVzIHdoaWNoIGNvbnRhaW4gdGhlIGFjdHVhbCBwcm9ncmFtCitjb21tYW5kcyB0aGF0IGFyZSBjb21waWxlZCB0byBmb3JtIHRoZSBCaW5hcnkgQ29kZS4KKworMS4gVGhlIFNvZnR3YXJlIGlzIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBvd25lZCBieSBJbGxpbm9pcywgYW5kIGFsbCByaWdodCwKK3RpdGxlIGFuZCBpbnRlcmVzdCwgaW5jbHVkaW5nIGNvcHlyaWdodCwgcmVtYWluIHdpdGggSWxsaW5vaXMuICBJbGxpbm9pcworZ3JhbnRzLCBhbmQgTGljZW5zZWUgaGVyZWJ5IGFjY2VwdHMsIGEgcmVzdHJpY3RlZCwgbm9uLWV4Y2x1c2l2ZSwKK25vbi10cmFuc2ZlcmFibGUgbGljZW5zZSB0byB1c2UgdGhlIFNvZnR3YXJlIGZvciBhY2FkZW1pYywgcmVzZWFyY2ggYW5kCitpbnRlcm5hbCBidXNpbmVzcyBwdXJwb3NlcyBvbmx5LCBlLmcuIG5vdCBmb3IgY29tbWVyY2lhbCB1c2UgKHNlZSBDbGF1c2UgNworYmVsb3cpLCB3aXRob3V0IGEgZmVlLgorCisyLiBMaWNlbnNlZSBtYXksIGF0IGl0cyBvd24gZXhwZW5zZSwgY3JlYXRlIGFuZCBmcmVlbHkgZGlzdHJpYnV0ZSBjb21wbGltZW50YXJ5Cit3b3JrcyB0aGF0IGludGVyb3BlcmF0ZSB3aXRoIHRoZSBTb2Z0d2FyZSwgZGlyZWN0aW5nIG90aGVycyB0byB0aGUgUFBMIHNlcnZlcgorKGh0dHA6Ly9jaGFybS5jcy51aXVjLmVkdSkgdG8gbGljZW5zZSBhbmQgb2J0YWluIHRoZSBTb2Z0d2FyZSBpdHNlbGYuIExpY2Vuc2VlCittYXksIGF0IGl0cyBvd24gZXhwZW5zZSwgbW9kaWZ5IHRoZSBTb2Z0d2FyZSB0byBtYWtlIGRlcml2YXRpdmUgd29ya3MuICBFeGNlcHQKK2FzIGV4cGxpY2l0bHkgcHJvdmlkZWQgYmVsb3csIHRoaXMgTGljZW5zZSBzaGFsbCBhcHBseSB0byBhbnkgZGVyaXZhdGl2ZSB3b3JrCithcyBpdCBkb2VzIHRvIHRoZSBvcmlnaW5hbCBTb2Z0d2FyZSBkaXN0cmlidXRlZCBieSBJbGxpbm9pcy4gIEFueSBkZXJpdmF0aXZlCit3b3JrIHNob3VsZCBiZSBjbGVhcmx5IG1hcmtlZCBhbmQgcmVuYW1lZCB0byBub3RpZnkgdXNlcnMgdGhhdCBpdCBpcyBhIG1vZGlmaWVkCit2ZXJzaW9uIGFuZCBub3QgdGhlIG9yaWdpbmFsIFNvZnR3YXJlIGRpc3RyaWJ1dGVkIGJ5IElsbGlub2lzLiAgTGljZW5zZWUgYWdyZWVzCit0byByZXByb2R1Y2UgdGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIG90aGVyIHByb3ByaWV0YXJ5IG1hcmtpbmdzIG9uIGFueQorZGVyaXZhdGl2ZSB3b3JrIGFuZCB0byBpbmNsdWRlIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIHN1Y2ggd29yayB0aGUKK2Fja25vd2xlZGdlbWVudDoKKworIlRoaXMgc29mdHdhcmUgaW5jbHVkZXMgY29kZSBkZXZlbG9wZWQgYnkgdGhlIFBhcmFsbGVsIFByb2dyYW1taW5nIExhYm9yYXRvcnkKK2luIHRoZSBEZXBhcnRtZW50IG9mIENvbXB1dGVyIFNjaWVuY2UgYXQgdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgYXQKK1VyYmFuYS1DaGFtcGFpZ24uIgorCitMaWNlbnNlZSBtYXkgcmVkaXN0cmlidXRlIHdpdGhvdXQgcmVzdHJpY3Rpb24gd29ya3Mgd2l0aCB1cCB0byAxLzIgb2YgdGhlaXIKK25vbi1jb21tZW50IHNvdXJjZSBjb2RlIGRlcml2ZWQgZnJvbSBhdCBtb3N0IDEvMTAgb2YgdGhlIG5vbi1jb21tZW50IHNvdXJjZQorY29kZSBkZXZlbG9wZWQgYnkgSWxsaW5vaXMgYW5kIGNvbnRhaW5lZCBpbiB0aGUgU29mdHdhcmUsIHByb3ZpZGVkIHRoYXQgdGhlCithYm92ZSBkaXJlY3Rpb25zIGZvciBub3RpY2UgYW5kIGFja25vd2xlZGdlbWVudCBhcmUgb2JzZXJ2ZWQuICBBbnkgb3RoZXIKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgU29mdHdhcmUgb3IgYW55IGRlcml2YXRpdmUgd29yayByZXF1aXJlcyBhIHNlcGFyYXRlIGxpY2Vuc2UKK3dpdGggSWxsaW5vaXMuICBMaWNlbnNlZSBtYXkgY29udGFjdCBJbGxpbm9pcyAoa2FsZUBjcy51aXVjLmVkdSkgdG8gbmVnb3RpYXRlCithbiBhcHByb3ByaWF0ZSBsaWNlbnNlIGZvciBzdWNoIGRpc3RyaWJ1dGlvbi4KKworMy4gRXhjZXB0IGFzIGV4cHJlc3NseSBzZXQgZm9ydGggaW4gdGhpcyBBZ3JlZW1lbnQsIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQKKyJBUyBJUyIgQU5EIElMTElOT0lTIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBBTkQgRVhURU5EUyBOTyBXQVJSQU5USUVTIE9GIEFOWQorS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBXQVJSQU5USUVTIE9SCitNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SIFRIQVQgVEhFIFVTRSBPRiBUSEUKK1NPRlRXQVJFIFdJTEwgTk9UIElORlJJTkdFIEFOWSBQQVRFTlQsIFRSQURFTUFSSywgT1IgT1RIRVIgUklHSFRTLiAgTElDRU5TRUUKK0FTU1VNRVMgVEhFIEVOVElSRSBSSVNLIEFTIFRPIFRIRSBSRVNVTFRTIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgU09GVFdBUkUKK0FORC9PUiBBU1NPQ0lBVEVEIE1BVEVSSUFMUy4gIExJQ0VOU0VFIEFHUkVFUyBUSEFUIFVOSVZFUlNJVFkgU0hBTEwgTk9UIEJFIEhFTEQKK0xJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIENPTlNFUVVFTlRJQUwsIE9SIElOQ0lERU5UQUwgREFNQUdFUyBXSVRICitSRVNQRUNUIFRPIEFOWSBDTEFJTSBCWSBMSUNFTlNFRSBPUiBBTlkgVEhJUkQgUEFSVFkgT04gQUNDT1VOVCBPRiBPUiBBUklTSU5HCitGUk9NIFRISVMgQUdSRUVNRU5UIE9SIFVTRSBPRiBUSEUgU09GVFdBUkUgQU5EL09SIEFTU09DSUFURUQgTUFURVJJQUxTLgorCis0LiBMaWNlbnNlZSB1bmRlcnN0YW5kcyB0aGUgU29mdHdhcmUgaXMgcHJvcHJpZXRhcnkgdG8gSWxsaW5vaXMuIExpY2Vuc2VlCithZ3JlZXMgdG8gdGFrZSBhbGwgcmVhc29uYWJsZSBzdGVwcyB0byBpbnN1cmUgdGhhdCB0aGUgU29mdHdhcmUgaXMgIHByb3RlY3RlZAorYW5kIHNlY3VyZWQgZnJvbSB1bmF1dGhvcml6ZWQgZGlzY2xvc3VyZSwgdXNlLCBvciByZWxlYXNlIGFuZCAgd2lsbCB0cmVhdCBpdAord2l0aCBhdCBsZWFzdCB0aGUgc2FtZSBsZXZlbCBvZiBjYXJlIGFzIExpY2Vuc2VlIHdvdWxkIHVzZSB0byAgcHJvdGVjdCBhbmQKK3NlY3VyZSBpdHMgb3duIHByb3ByaWV0YXJ5IGNvbXB1dGVyIHByb2dyYW1zIGFuZC9vciBpbmZvcm1hdGlvbiwgYnV0IHVzaW5nIG5vCitsZXNzIHRoYW4gYSByZWFzb25hYmxlIHN0YW5kYXJkIG9mIGNhcmUuICBMaWNlbnNlZSBhZ3JlZXMgdG8gcHJvdmlkZSB0aGUKK1NvZnR3YXJlIG9ubHkgdG8gYW55IG90aGVyIHBlcnNvbiBvciBlbnRpdHkgd2hvIGhhcyByZWdpc3RlcmVkIHdpdGggSWxsaW5vaXMuCitJZiBsaWNlbnNlZSBpcyBub3QgcmVnaXN0ZXJpbmcgYXMgYW4gaW5kaXZpZHVhbCBidXQgYXMgYW4gaW5zdGl0dXRpb24gb3IKK2NvcnBvcmF0aW9uIGVhY2ggbWVtYmVyIG9mIHRoZSBpbnN0aXR1dGlvbiBvciBjb3Jwb3JhdGlvbiB3aG8gaGFzIGFjY2VzcyB0byBvcgordXNlcyBTb2Z0d2FyZSBtdXN0IGFncmVlIHRvIGFuZCBhYmlkZSBieSB0aGUgdGVybXMgb2YgdGhpcyBsaWNlbnNlLiBJZiBMaWNlbnNlZQorYmVjb21lcyBhd2FyZSBvZiBhbnkgdW5hdXRob3JpemVkIGxpY2Vuc2luZywgY29weWluZyBvciB1c2Ugb2YgdGhlIFNvZnR3YXJlLAorTGljZW5zZWUgc2hhbGwgcHJvbXB0bHkgbm90aWZ5IElsbGlub2lzIGluIHdyaXRpbmcuIExpY2Vuc2VlIGV4cHJlc3NseSBhZ3JlZXMKK3RvIHVzZSB0aGUgU29mdHdhcmUgb25seSBpbiB0aGUgbWFubmVyIGFuZCBmb3IgdGhlIHNwZWNpZmljIHVzZXMgYXV0aG9yaXplZCBpbgordGhpcyBBZ3JlZW1lbnQuCisKKzUuIEJ5IHVzaW5nIG9yIGNvcHlpbmcgdGhpcyBTb2Z0d2FyZSwgTGljZW5zZWUgYWdyZWVzIHRvIGFiaWRlIGJ5IHRoZQorY29weXJpZ2h0IGxhdyBhbmQgYWxsIG90aGVyIGFwcGxpY2FibGUgbGF3cyBvZiB0aGUgVS5TLiBpbmNsdWRpbmcsIGJ1dCBub3QKK2xpbWl0ZWQgdG8sIGV4cG9ydCBjb250cm9sIGxhd3MgYW5kIHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UuIElsbGlub2lzICBzaGFsbAoraGF2ZSB0aGUgcmlnaHQgdG8gdGVybWluYXRlIHRoaXMgbGljZW5zZSBpbW1lZGlhdGVseSBieSB3cml0dGVuICBub3RpY2UgdXBvbgorTGljZW5zZWUncyBicmVhY2ggb2YsIG9yIG5vbi1jb21wbGlhbmNlIHdpdGgsIGFueSB0ZXJtcyBvZiB0aGUgbGljZW5zZS4KK0xpY2Vuc2VlIG1heSBiZSBoZWxkIGxlZ2FsbHkgcmVzcG9uc2libGUgZm9yIGFueSAgY29weXJpZ2h0IGluZnJpbmdlbWVudCB0aGF0CitpcyBjYXVzZWQgb3IgZW5jb3VyYWdlZCBieSBpdHMgZmFpbHVyZSB0byAgYWJpZGUgYnkgdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZS4KK1Vwb24gdGVybWluYXRpb24sIExpY2Vuc2VlIGFncmVlcyB0byAgZGVzdHJveSBhbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSBpbiBpdHMKK3Bvc3Nlc3Npb24gYW5kIHRvIHZlcmlmeSBzdWNoICBkZXN0cnVjdGlvbiBpbiB3cml0aW5nLgorCis2LiBUaGUgdXNlciBhZ3JlZXMgdGhhdCBhbnkgcmVwb3J0cyBvciBwdWJsaXNoZWQgcmVzdWx0cyBvYnRhaW5lZCB3aXRoICB0aGUKK1NvZnR3YXJlIHdpbGwgYWNrbm93bGVkZ2UgaXRzIHVzZSBieSB0aGUgYXBwcm9wcmlhdGUgY2l0YXRpb24gYXMgIGZvbGxvd3M6CisKKyJDaGFybSsrL0NvbnZlcnNlIHdhcyBkZXZlbG9wZWQgYnkgdGhlIFBhcmFsbGVsIFByb2dyYW1taW5nIExhYm9yYXRvcnkgaW4gdGhlCitEZXBhcnRtZW50IG9mIENvbXB1dGVyIFNjaWVuY2UgYXQgdGhlIFVuaXZlcnNpdHkgb2YgIElsbGlub2lzIGF0CitVcmJhbmEtQ2hhbXBhaWduLiIKKworQW55IHB1Ymxpc2hlZCB3b3JrIHdoaWNoIHV0aWxpemVzIENoYXJtKysgc2hhbGwgaW5jbHVkZSB0aGUgZm9sbG93aW5nCityZWZlcmVuY2U6CisKKyJMLiBWLiBLYWxlIGFuZCBTLiBLcmlzaG5hbi4gQ2hhcm0rKzogUGFyYWxsZWwgUHJvZ3JhbW1pbmcgd2l0aCBNZXNzYWdlLURyaXZlbgorT2JqZWN0cy4gSW4gJ1BhcmFsbGVsIFByb2dyYW1taW5nIHVzaW5nIEMrKycgKEVkcy4gR3JlZ29yeSBWLiBXaWxzb24gYW5kIFBhdWwKK0x1KSwgcHAgMTc1LTIxMywgTUlUIFByZXNzLCAxOTk2LiIKKworQW55IHB1Ymxpc2hlZCB3b3JrIHdoaWNoIHV0aWxpemVzIENvbnZlcnNlIHNoYWxsIGluY2x1ZGUgdGhlIGZvbGxvd2luZworcmVmZXJlbmNlOgorCisiTC4gVi4gS2FsZSwgTWlsaW5kIEJoYW5kYXJrYXIsIE5hcmFpbiBKYWdhdGhlc2FuLCBTYW5qZWV2IEtyaXNobmFuIGFuZCBKb3NodWEKK1llbG9uLiBDb252ZXJzZTogQW4gSW50ZXJvcGVyYWJsZSBGcmFtZXdvcmsgZm9yIFBhcmFsbGVsIFByb2dyYW1taW5nLgorUHJvY2VlZGluZ3Mgb2YgdGhlIDEwdGggSW50ZXJuYXRpb25hbCBQYXJhbGxlbCBQcm9jZXNzaW5nIFN5bXBvc2l1bSwgcHAKKzIxMi0yMTcsIEFwcmlsIDE5OTYuIgorCitFbGVjdHJvbmljIGRvY3VtZW50cyB3aWxsIGluY2x1ZGUgYSBkaXJlY3QgbGluayB0byB0aGUgb2ZmaWNpYWwgQ2hhcm0rKyBwYWdlCithdCBodHRwOi8vY2hhcm0uY3MudWl1Yy5lZHUvCisKKzcuIENvbW1lcmNpYWwgdXNlIG9mIHRoZSBTb2Z0d2FyZSwgb3IgZGVyaXZhdGl2ZSB3b3JrcyBiYXNlZCB0aGVyZW9uLCAgUkVRVUlSRVMKK0EgQ09NTUVSQ0lBTCBMSUNFTlNFLiAgU2hvdWxkIExpY2Vuc2VlIHdpc2ggdG8gbWFrZSBjb21tZXJjaWFsIHVzZSBvZiB0aGUKK1NvZnR3YXJlLCBMaWNlbnNlZSB3aWxsIGNvbnRhY3QgSWxsaW5vaXMgKGthbGVAY3MudWl1Yy5lZHUpIHRvIG5lZ290aWF0ZSBhbgorYXBwcm9wcmlhdGUgbGljZW5zZSBmb3Igc3VjaCB1c2UuIENvbW1lcmNpYWwgdXNlIGluY2x1ZGVzOiAKKygxKSBpbnRlZ3JhdGlvbiBvZiBhbGwgb3IgcGFydCBvZiB0aGUgU29mdHdhcmUgaW50byBhIHByb2R1Y3QgZm9yIHNhbGUsIGxlYXNlCitvciBsaWNlbnNlIGJ5IG9yIG9uIGJlaGFsZiBvZiBMaWNlbnNlZSB0byB0aGlyZCBwYXJ0aWVzLCBvciAKKygyKSBkaXN0cmlidXRpb24gb2YgdGhlIFNvZnR3YXJlIHRvIHRoaXJkIHBhcnRpZXMgdGhhdCBuZWVkIGl0IHRvIGNvbW1lcmNpYWxpemUKK3Byb2R1Y3Qgc29sZCBvciBsaWNlbnNlZCBieSBvciBvbiBiZWhhbGYgb2YgTGljZW5zZWUuCisKKzguIEdvdmVybm1lbnQgUmlnaHRzLiBCZWNhdXNlIHN1YnN0YW50aWFsIGdvdmVybm1lbnRhbCBmdW5kcyBoYXZlIGJlZW4gIHVzZWQgaW4KK3RoZSBkZXZlbG9wbWVudCBvZiBDaGFybSsrL0NvbnZlcnNlLCBhbnkgcG9zc2Vzc2lvbiwgdXNlIG9yIHN1YmxpY2Vuc2Ugb2YgdGhlCitTb2Z0d2FyZSBieSBvciB0byB0aGUgVW5pdGVkIFN0YXRlcyBnb3Zlcm5tZW50IHNoYWxsIGJlIHN1YmplY3QgdG8gc3VjaAorcmVxdWlyZWQgcmVzdHJpY3Rpb25zLgorCis5LiBDaGFybSsrL0NvbnZlcnNlIGlzIGJlaW5nIGRpc3RyaWJ1dGVkIGFzIGEgcmVzZWFyY2ggYW5kIHRlYWNoaW5nIHRvb2wgYW5kIGFzCitzdWNoLCBQUEwgZW5jb3VyYWdlcyBjb250cmlidXRpb25zIGZyb20gdXNlcnMgb2YgdGhlIGNvZGUgdGhhdCBtaWdodCwgYXQKK0lsbGlub2lzJyBzb2xlIGRpc2NyZXRpb24sIGJlIHVzZWQgb3IgaW5jb3Jwb3JhdGVkIHRvIG1ha2UgdGhlIGJhc2ljICBvcGVyYXRpbmcKK2ZyYW1ld29yayBvZiB0aGUgU29mdHdhcmUgYSBtb3JlIHN0YWJsZSwgZmxleGlibGUsIGFuZC9vciB1c2VmdWwgIHByb2R1Y3QuCitMaWNlbnNlZXMgd2hvIGNvbnRyaWJ1dGUgdGhlaXIgY29kZSB0byBiZWNvbWUgYW4gaW50ZXJuYWwgIHBvcnRpb24gb2YgdGhlCitTb2Z0d2FyZSBhZ3JlZSB0aGF0IHN1Y2ggY29kZSBtYXkgYmUgZGlzdHJpYnV0ZWQgYnkgIElsbGlub2lzIHVuZGVyIHRoZSB0ZXJtcworb2YgdGhpcyBMaWNlbnNlIGFuZCBtYXkgYmUgcmVxdWlyZWQgdG8gc2lnbiBhbiAgIkFncmVlbWVudCBSZWdhcmRpbmcKK0NvbnRyaWJ1dG9yeSBDb2RlIGZvciBDaGFybSsrL0NvbnZlcnNlIFNvZnR3YXJlIiBiZWZvcmUgSWxsaW5vaXMgIGNhbiBhY2NlcHQgaXQKKyhjb250YWN0IGthbGVAY3MudWl1Yy5lZHUgZm9yIGEgY29weSkuCisKK1VOREVSU1RPT0QgQU5EIEFHUkVFRC4KKworCitDb250YWN0IEluZm9ybWF0aW9uOgorCitUaGUgYmVzdCBjb250YWN0IHBhdGggZm9yIGxpY2Vuc2luZyBpc3N1ZXMgaXMgYnkgZS1tYWlsIHRvICBrYWxlQGNzLnVpdWMuZWR1IG9yCitzZW5kIGNvcnJlc3BvbmRlbmNlIHRvOgorCitQcm9mLiBMLiBWLiBLYWxlCitEZXB0LiBvZiBDb21wdXRlciBTY2llbmNlCitVbml2ZXJzaXR5IG9mIElsbGlub2lzCisxMzA0IFcuIFNwcmluZ2ZpZWxkIEF2ZQorVXJiYW5hLCBJbGxpbm9pcyA2MTgwMSBVU0EKK0ZBWDogKDIxNykgMzMzLTM1MDEKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL2NpcmNsZW11ZCBiL2xpY2Vuc2VzL2NpcmNsZW11ZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2ViNGJjCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvY2lyY2xlbXVkCkBAIC0wLDAgKzEsMjM5IEBACisvKiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyogIENvcHlyaWdodCAoQykgMTk5NSBieSBKZXJlbXkgRWxzb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKiAgQWxsIFJpZ2h0cyBSZXNlcnZlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKi8KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDaXJjbGVNVUQgTGljZW5zZQorCitDaXJjbGVNVUQgd2FzIGNyZWF0ZWQgYnk6CisKK0plcmVteSBFbHNvbgorRGVwYXJ0bWVudCBvZiBDb21wdXRlciBTY2llbmNlCitKb2hucyBIb3BraW5zIFVuaXZlcnNpdHkKK0JhbHRpbW9yZSwgTUQgIDIxMjE4ICBVU0EKK2plbHNvbkBjaXJjbGVtdWQub3JnCisKKworCitDaXJjbGVNVUQgaXMgbGljZW5zZWQgc29mdHdhcmUuICBUaGlzIGZpbGUgY29udGFpbnMgdGhlIHRleHQgb2YgdGhlIENpcmNsZU1VRAorbGljZW5zZS4gIElmIHlvdSB3aXNoIHRvIHVzZSB0aGUgQ2lyY2xlTVVEIHN5c3RlbSBpbiBhbnkgd2F5LCBvciB1c2UgYW55IG9mCitpdHMgc291cmNlIGNvZGUsIHlvdSBtdXN0IHJlYWQgdGhpcyBsaWNlbnNlIGFuZCBhcmUgbGVnYWxseSBib3VuZCB0byBjb21wbHkKK3dpdGggaXQuCisKK0NpcmNsZU1VRCBpcyBhIGRlcml2YXRpdmUgd29yayBiYXNlZCBvbiB0aGUgRGlrdU1VRCBzeXN0ZW0gd3JpdHRlbiBieSBIYW5zCitIZW5yaWsgU3RhZXJmZWxkdCwgS2F0amEgTnlib2UsIFRvbSBNYWRzZW4sIE1pY2hhZWwgU2VpZmVydCwgYW5kIFNlYmFzdGlhbgorSGFtbWVyLiAgRGlrdU1VRCBpcyBhbHNvIGxpY2Vuc2VkIHNvZnR3YXJlOyB5b3UgYXJlIGxlZ2FsbHkgYm91bmQgdG8gY29tcGx5Cit3aXRoIHRoZSBvcmlnaW5hbCBEaWt1TVVEIGxpY2Vuc2UgYXMgd2VsbCBhcyB0aGUgQ2lyY2xlTVVEIGxpY2Vuc2UgaWYgeW91Cit3aXNoIHRvIHVzZSBDaXJjbGVNVUQuCisKK1VzZSBvZiB0aGUgQ2lyY2xlTVVEIGNvZGUgaW4gYW55IGNhcGFjaXR5IGltcGxpZXMgdGhhdCB5b3UgaGF2ZSByZWFkLAordW5kZXJzdG9vZCwgYW5kIGFncmVlZCB0byBhYmlkZSBieSB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgc2V0IGRvd24gYnkgdGhpcworbGljZW5zZSBhbmQgdGhlIERpa3VNVUQgbGljZW5zZS4gIElmIHlvdSB1c2UgQ2lyY2xlTVVEIHdpdGhvdXQgY29tcGx5aW5nIHdpdGgKK3RoZSBsaWNlbnNlLCB5b3UgYXJlIGJyZWFraW5nIHRoZSBsYXcuCisKK1VzaW5nIENpcmNsZU1VRCBsZWdhbGx5IGlzIGVhc3kuICBJbiBzaG9ydCwgdGhlIGxpY2Vuc2UgcmVxdWlyZXMgdGhyZWUgdGhpbmdzOgorCisxKSBZb3UgbXVzdCBub3QgdXNlIENpcmNsZU1VRCB0byBtYWtlIG1vbmV5IG9yIGJlIGNvbXBlbnNhdGVkIGluIGFueSB3YXkuCisyKSBZb3UgbXVzdCBnaXZlIHRoZSBhdXRob3JzIGNyZWRpdCBmb3IgdGhlaXIgd29yay4KKzMpIFlvdSBtdXN0IGNvbXBseSB3aXRoIHRoZSBEaWt1TVVEIGxpY2Vuc2UuCisKK1RoYXQncyBpdCAtLSB0aG9zZSBhcmUgdGhlIG1haW4gY29uZGl0aW9ucyBzZXQgZG93biBieSB0aGlzIGxpY2Vuc2UuCitVbmZvcnR1bmF0ZWx5LCBwYXN0IGV4cGVyaWVuY2UgaGFzIHNob3duIHRoYXQgbWFueSBwZW9wbGUgYXJlIG5vdCB3aWxsaW5nCit0byBmb2xsb3cgdGhlIHNwaXJpdCBvZiB0aGUgbGljZW5zZSwgc28gdGhlIHJlbWFpbmRlciBvZiB0aGlzIGRvY3VtZW50IHdpbGwKK2NsZWFybHkgZGVmaW5lIHRob3NlIGNvbmRpdGlvbnMgaW4gYW4gYXR0ZW1wdCB0byBwcmV2ZW50IHBlb3BsZSBmcm9tCitjaXJjdW12ZW50aW5nIHRoZW0uCisKK1RoZSBmaXJzdCBjb25kaXRpb24gc2F5cyB0aGF0IHlvdSBtdXN0IG5vdCB1c2UgQ2lyY2xlTVVEIHRvIG1ha2UgbW9uZXkgaW4KK2FueSB3YXkgb3IgYmUgb3RoZXJ3aXNlIGNvbXBlbnNhdGVkLiAgQ2lyY2xlTVVEIHdhcyBkZXZlbG9wZWQgaW4gcGVvcGxlJ3MKK3VuY29tcGVuc2F0ZWQgc3BhcmUgdGltZSBhbmQgd2FzIGdpdmVuIHRvIHlvdSBmcmVlIG9mIGNoYXJnZSwgYW5kIHlvdSBtdXN0Citub3QgdXNlIGl0IHRvIG1ha2UgbW9uZXkuICBDaXJjbGVNVUQgbXVzdCBub3QgaW4gYW55IHdheSBiZSB1c2VkIHRvCitmYWNpbGl0YXRlIHlvdXIgYWNjZXB0YW5jZSBvZiBmZWVzLCBkb25hdGlvbnMsIG9yIG90aGVyIGNvbXBlbnNhdGlvbi4KK0V4YW1wbGVzIGluY2x1ZGUsIGJ1dCBhcmUgbm90IGxpbWl0ZWQgdG8gdGhlIGZvbGxvd2luZzoKKworLS0gSWYgeW91IHJ1biBDaXJjbGVNVUQsIHlvdSBtdXN0IG5vdCByZXF1aXJlIGFueSB0eXBlIG9mIGZlZSBvciBkb25hdGlvbgorICAgaW4gZXhjaGFuZ2UgZm9yIGJlaW5nIGFibGUgdG8gcGxheSBDaXJjbGVNVUQuICBZb3UgbXVzdCBub3Qgc29saWNpdCwKKyAgIG9mZmVyIG9yIGFjY2VwdCBhbnkga2luZCBvZiBkb25hdGlvbiBmcm9tIHlvdXIgcGxheWVycyBpbiBleGNoYW5nZSBmb3IKKyAgIGVuaGFuY2VkIHN0YXR1cyBpbiB0aGUgZ2FtZSBzdWNoIGFzIGluY3JlYXNlZCBsZXZlbHMsIGNoYXJhY3RlciBzdGF0cywKKyAgIGdvbGQsIG9yIGVxdWlwbWVudC4KKworLS0gWW91IG11c3Qgbm90IHNvbGljaXQgb3IgYWNjZXB0IG1vbmV5IG9yIG90aGVyIGRvbmF0aW9ucyBpbiBleGNoYW5nZSBmb3IKKyAgIHJ1bm5pbmcgQ2lyY2xlTVVELiAgWW91IG11c3Qgbm90IGFjY2VwdCBtb25leSBvciBvdGhlciBkb25hdGlvbnMgZnJvbQorICAgeW91ciBwbGF5ZXJzIGZvciBwdXJwb3NlcyBzdWNoIGFzIGhhcmR3YXJlIHVwZ3JhZGVzIGZvciBydW5uaW5nCisgICBDaXJjbGVNVUQuCisKKy0tIFlvdSBtdXN0IG5vdCBzZWxsIENpcmNsZU1VRC4gIFlvdSBtdXN0IG5vdCBhY2NlcHQgYW55IHR5cGUgb2YgZmVlIGluCisgICBleGNoYW5nZSBmb3IgZGlzdHJpYnV0aW5nIG9yIGNvcHlpbmcgQ2lyY2xlTVVELgorCistLSBJZiB5b3UgYXJlIGEgQ2lyY2xlTVVEIGFkbWluaXN0cmF0b3IsIFlvdSBtdXN0IG5vdCBhY2NlcHQgYW55IHR5cGUgb2YKKyAgIHJlaW1idXJzZW1lbnQgZm9yIG1vbmV5IHNwZW50IG91dCBvZiBwb2NrZXQgZm9yIHJ1bm5pbmcgQ2lyY2xlTVVELCBpLmUuLAorICAgZm9yIGVxdWlwbWVudCBleHBlbnNlcyBvciBmZWVzIGluY3VycmVkIGZyb20gc2VydmljZSBwcm92aWRlcnMuCisKKworVGhlIHNlY29uZCBwYXJ0IG9mIHRoZSBsaWNlbnNlIHN0YXRlcyB0aGF0IHlvdSBtdXN0IGdpdmUgY3JlZGl0IHRvIHRoZQorY3JlYXRvcnMgb2YgQ2lyY2xlTVVELiAgQSBncmVhdCBkZWFsIG9mIHdvcmsgd2VudCBpbnRvIHRoZSBjcmVhdGlvbiBvZgorQ2lyY2xlTVVELCBhbmQgaXQgd2FzIGdpdmVuIHRvIHlvdSBjb21wbGV0ZWx5IGZyZWUgb2YgY2hhcmdlOyBjbGFpbWluZyB0aGF0Cit5b3Ugd3JvdGUgdGhlIE1VRCB5b3Vyc2VsZiBpcyBhIHNsYXAgaW4gdGhlIGZhY2UgdG8gZXZlcnlvbmUgd2hvIHdvcmtlZCB0bworYnJpbmcgeW91IGEgaGlnaCBxdWFsaXR5IHByb2R1Y3Qgd2hpbGUgYXNraW5nIGZvciBub3RoaW5nIGJ1dCBjcmVkaXQgZm9yCit0aGVpciB3b3JrIGluIHJldHVybi4KKworU3BlY2lmaWNhbGx5LCB0aGUgZm9sbG93aW5nIGFyZSByZXF1aXJlZDoKKworLS0gVGhlIHRleHQgaW4gdGhlICdjcmVkaXRzJyBmaWxlIGRpc3RyaWJ1dGVkIHdpdGggQ2lyY2xlTVVEIG11c3QgYmUKKyAgIHByZXNlcnZlZC4gIFlvdSBtYXkgYWRkIHlvdXIgb3duIGNyZWRpdHMgdG8gdGhlIGZpbGUsIGJ1dCB0aGUgZXhpc3RpbmcKKyAgIHRleHQgbXVzdCBub3QgYmUgcmVtb3ZlZCwgYWJyaWRnZWQsIHRydW5jYXRlZCwgb3IgY2hhbmdlZCBpbiBhbnkgd2F5LgorICAgVGhpcyBmaWxlIG11c3QgYmUgZGlzcGxheWVkIHdoZW4gdGhlICdjcmVkaXRzJyBjb21tYW5kIGlzIHVzZWQgZnJvbQorICAgd2l0aGluIHRoZSBNVUQuCisKKy0tIFRoZSAiQ0lSQ0xFTVVEIiBoZWxwIGVudHJ5IG11c3QgYmUgbWFpbnRhaW5lZCBpbnRhY3QgYW5kIHVuY2hhbmdlZCwgYW5kCisgICBkaXNwbGF5ZWQgaW4gaXRzIGVudGlyZXR5IHdoZW4gdGhlICdoZWxwIGNpcmNsZW11ZCcgY29tbWFuZCBpcyB1c2VkLgorCistLSBUaGUgbG9naW4gc2VxdWVuY2UgbXVzdCBjb250YWluIHRoZSBuYW1lcyBvZiB0aGUgRGlrdU1VRCBhbmQgQ2lyY2xlTVVECisgICBjcmVhdG9ycy4gIFRoZSAnbG9naW4gc2VxdWVuY2UnIGlzIGRlZmluZWQgYXMgdGhlIHRleHQgc2VlbiBieSBwbGF5ZXJzCisgICBiZXR3ZWVuIHRoZSB0aW1lIHRoZXkgY29ubmVjdCB0byB0aGUgTVVEIGFuZCB3aGVuIHRoZXkgc3RhcnQgdG8gcGxheQorICAgdGhlIGdhbWUgaXRzZWxmLgorCistLSBUaGlzIGxpY2Vuc2UgbXVzdCBiZSBkaXN0cmlidXRlZCBBUyBJUyB3aXRoIGFsbCBjb3BpZXMgb3IgcG9ydGlvbnMgb2YKKyAgIHRoZSBDaXJjbGVNVUQgdGhhdCB5b3UgZGlzdHJpYnV0ZSwgaWYgYW55LCBpbmNsdWRpbmcgd29ya3MgZGVyaXZlZCBmcm9tCisgICBDaXJjbGVNVUQuCisKKy0tIFlvdSBtdXN0IG5vdCByZW1vdmUsIGNoYW5nZSwgb3IgbW9kaWZ5IGFueSBub3RpY2VzIG9mIGNvcHlyaWdodCwKKyAgIGxpY2Vuc2luZyBvciBhdXRob3JzaGlwIGZvdW5kIGluIGFueSBDaXJjbGVNVUQgc291cmNlIGNvZGUgZmlsZXMuCisKKy0tIENsYWltcyB0aGF0IGFueSBvZiB0aGUgYWJvdmUgcmVxdWlyZW1lbnRzIGFyZSBpbmFwcGxpY2FibGUgdG8gYSBwYXJ0aWN1bGFyCisgICBNVUQgZm9yIHJlYXNvbnMgc3VjaCBhcyAib3VyIE1VRCBpcyB0b3RhbGx5IHJld3JpdHRlbiIgb3Igc2ltaWxhciBhcmUKKyAgIGNvbXBsZXRlbHkgaW52YWxpZC4gIElmIHlvdSBjYW4gd3JpdGUgYSBNVUQgY29tcGxldGVseSBmcm9tIHNjcmF0Y2ggdGhlbgorICAgeW91IGFyZSBlbmNvdXJhZ2VkIHRvIGRvIHNvIGJ5IGFsbCBtZWFucywgYnV0IHVzZSBvZiBhbnkgcGFydCBvZiB0aGUKKyAgIENpcmNsZU1VRCBvciBEaWt1TVVEIHNvdXJjZSBjb2RlIHJlcXVpcmVzIHRoYXQgdGhlaXIgcmVzcGVjdGl2ZSBsaWNlbnNlcworICAgYmUgZm9sbG93ZWQsIGluY2x1ZGluZyB0aGUgY3JlZGl0aW5nIHJlcXVpcmVtZW50cy4KKyAgIAorICAgCitUaGUgdGhpcmQgcGFydCBvZiB0aGUgbGljZW5zZSBzaW1wbHkgc3RhdGVzIHRoYXQgeW91IG11c3QgY29tcGx5IHdpdGggdGhlCitEaWt1TVVEIGxpY2Vuc2UuICBUaGlzIGlzIHJlcXVpcmVkIGJlY2F1c2UgQ2lyY2xlTVVEIGlzIGEgRGlrdU1VRCBkZXJpdmF0aXZlLgorVGhlIERpa3VNVUQgbGljZW5zZSBpcyBpbmNsdWRlZCBiZWxvdy4KKworCitZb3UgYXJlIGFsbG93ZWQgdG8gdXNlLCBtb2RpZnkgYW5kIHJlZGlzdHJpYnV0ZSBhbGwgQ2lyY2xlTVVEIHNvdXJjZSBjb2RlCithbmQgZG9jdW1lbnRhdGlvbiBhcyBsb25nIGFzIHN1Y2ggdXNlIGRvZXMgbm90IHZpb2xhdGUgYW55IG9mIHRoZSBydWxlcworc2V0IGRvd24gYnkgdGhpcyBsaWNlbnNlLgorCisKKy0tSmVyZW15IEVsc29uCisKK0NpcmNsZU1VRCAzIC0tIENvcHlyaWdodCAoQykgMTk5NC0yMDAxLCBUaGUgQ2lyY2xlTVVEIEdyb3VwCitPdGhlciBwb3J0aW9ucyBjb3B5cmlnaHQgYnkgYXV0aG9ycyBhcyBub3RlZCBpbiBDaGFuZ2VMb2cgYW5kIHNvdXJjZSBjb2RlLgorCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKworRXZlcnl0aGluZyBiZWxvdyB0aGlzIGxpbmUgaXMgdGhlIG9yaWdpbmFsLCB1bm1vZGlmaWVkIERpa3VNVUQgbGljZW5zZS4KK1lvdSBtdXN0IGNvbXBseSB3aXRoIHRoZSBDaXJjbGVNVUQgbGljZW5zZSBhYm92ZSwgYXMgd2VsbCBhcyB0aGUgRGlrdU1VRAorbGljZW5zZSBiZWxvdy4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworLyogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisqICBDb3B5cmlnaHQgKEMpIDE5OTAsIDE5OTEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyogIEFsbCBSaWdodHMgUmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqLworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpa3VNdWQgTGljZW5zZQorCisgICAgICAgICAgICAgICAgICAgICAgUHJvZ3JhbSAmIENvbmNlcHQgY3JlYXRlZCBieQorCisKK1NlYmFzdGlhbiBIYW1tZXIKK1Byc3MuIE1hcmllcyBBbGxlIDE1LCAxCisxOTA4IEZyYi4gQy4KK0RFTk1BUksKKyhlbWFpbCBxdWlubkBmcmVqYS5kaWt1LmRrKQorCitNaWNoYWVsIFNlaWZlcnQKK05yLiBTb2VnLiAzN0MsIDEsIGRvZXIgMworMTM3MCBDb3BlbmhhZ2VuIEsuCitERU5NQVJLCisoZW1haWwgc2VpZmVydEBmcmVqYS5kaWt1LmRrKQorCitIYW5zIEhlbnJpayBTdHtyZmVsZHQKK0xhbmdzfSAxOQorMzUwMCBWe3JsfHNlCitERU5NQVJLCisoZW1haWwgYm9tYm1hbkBmcmVqYS5kaWt1LmRrKQorCitUb20gTWFkc2VuCitSfGRlIE1lbGxlbXZlaiA5NEIsIDY0CisyMzAwIENvcGVuaGFnZW4gUy4KK0RFTk1BUksKKyhlbWFpbCBub29wQGZyZWphLmRpa3UuZGspCisKK0thdGphIE55Ym9lCitLaWxkZWd9cmRzdmVqIDIKKzI5MDAgSGVsbGVydXAKKzMxIDYyIDgyIDg0CitERU5NQVJLCisoZW1haWwga2F0ekBmcmVqYS5kaWt1LmRrKQorCisKK1RoaXMgZG9jdW1lbnQgY29udGFpbnMgdGhlIHJ1bGVzIGJ5IHdoaWNoIHlvdSBjYW4gdXNlLCBhbHRlciBvciBwdWJsaXNoCitwYXJ0cyBvZiBEaWt1TXVkLiBEaWt1TXVkIGhhcyBiZWVuIGNyZWF0ZWQgYnkgdGhlIGFib3ZlIGZpdmUgbGlzdGVkIHBlcnNvbnMKK2luIHRoZWlyIHNwYXJlIHRpbWUsIGF0IERJS1UgKENvbXB1dGVyIFNjaWVuY2UgSW5zdHV0dXRlIGF0IENvcGVuaGFnZW4KK1VuaXZlcnNpdHkpLiBZb3UgYXJlIGxlZ2FsbHkgYm91bmQgdG8gZm9sbG93IHRoZSBydWxlcyBkZXNjcmliZWQgaW4gdGhpcworZG9jdW1lbnQuCisKK1J1bGVzOgorCisgICAhISBEaWt1TXVkIGlzIE5PVCBQdWJsaWMgRG9tYWluLCBzaGFyZXdhcmUsIGNhcmV3YXJlIG9yIHRoZSBsaWtlICEhCisKKyAgIFlvdSBtYXkgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBtYWtlIHByb2ZpdCBvbiAqQU5ZKiBwYXJ0IG9mIERpa3VNdWQgaW4KKyAgIGFueSBwb3NzaWJsZSB3YXkuIFlvdSBtYXkgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBjaGFyZ2UgbW9uZXkgZm9yCisgICBkaXN0cmlidXRpbmcgYW55IHBhcnQgb2YgZGlrdW11ZCAtIHRoaXMgaW5jbHVkZXMgdGhlIHVzdWFsICQ1IGNoYXJnZQorICAgZm9yICJzZW5kaW5nIHRoZSBkaXNrIiBvciAianVzdCBmb3IgdGhlIGRpc2siIGV0Yy4KKyAgIEJ5IGJyZWFraW5nIHRoZXNlIHJ1bGVzIHlvdSB2aW9sYXRlIHRoZSBhZ3JlZW1lbnQgYmV0d2VlbiB1cyBhbmQgdGhlCisgICBVbml2ZXJzaXR5LCBhbmQgaGVuY2Ugd2lsbCBiZSBzdWVkLgorCisgICBZb3UgbWF5IG5vdCByZW1vdmUgYW55IGNvcHlyaWdodCBub3RpY2VzIGZyb20gYW55IG9mIHRoZSBkb2N1bWVudHMgb3IKKyAgIHNvdXJjZXMgZ2l2ZW4gdG8geW91LgorCisgICBUaGlzIGxpY2Vuc2UgbXVzdCAqYWx3YXlzKiBiZSBpbmNsdWRlZCAiYXMgaXMiIGlmIHlvdSBjb3B5IG9yIGdpdmUKKyAgIGF3YXkgYW55IHBhcnQgb2YgRGlrdU11ZCAod2hpY2ggaXMgdG8gYmUgZG9uZSBhcyBkZXNjcmliZWQgaW4gdGhpcworICAgZG9jdW1lbnQpLgorCisgICBJZiB5b3UgcHVibGlzaCAqYW55KiBwYXJ0IG9mIGRpa3VtdWQsIHdlIGFzIGNyZWF0b3JzIG11c3QgYXBwZWFyIGluIHRoZQorICAgYXJ0aWNsZSwgYW5kIHRoZSBhcnRpY2xlIG11c3QgYmUgY2xlYXJseSBjb3B5cmlnaHRlZCBzdWJqZWN0IHRvIHRoaXMKKyAgIGxpY2Vuc2UuIEJlZm9yZSBwdWJsaXNoaW5nIHlvdSBtdXN0IGZpcnN0IHNlbmQgdXMgYSBtZXNzYWdlLCBieQorICAgc25haWwtbWFpbCBvciBlLW1haWwsIGFuZCBpbmZvcm0gdXMgd2hhdCwgd2hlcmUgYW5kIHdoZW4geW91IGFyZQorICAgcHVibGlzaGluZyAocmVtZW1iZXIgdG8gaW5jbHVkZSB5b3VyIGFkZHJlc3MsIG5hbWUgZXRjLikKKworICAgSWYgeW91IHdpc2ggdG8gc2V0dXAgYSB2ZXJzaW9uIG9mIERpa3VNdWQgb24gYW55IGNvbXB1dGVyIHN5c3RlbSwgeW91CisgICBtdXN0IHNlbmQgdXMgYSBtZXNzYWdlICwgYnkgc25haWwtbWFpbCBvciBlLW1haWwsIGFuZCBpbmZvcm0gdXMgd2hlcmUKKyAgIGFuZCB3aGVuIHlvdSBhcmUgcnVubmluZyB0aGUgZ2FtZS4gKHJlbWVtYmVyIHRvIGluY2x1ZGUgCisgICB5b3VyIGFkZHJlc3MsIG5hbWUgZXRjLikKKworCisgICBBbnkgcnVubmluZyB2ZXJzaW9uIG9mIERpa3VNdWQgbXVzdCBpbmNsdWRlIG91ciBuYW1lcyBpbiB0aGUgbG9naW4KKyAgIHNlcXVlbmNlLiBGdXJ0aGVybW9yZSB0aGUgImNyZWRpdHMiIGNvbW1hbmQgc2hhbGwgYWx3YXlzIGNvaW50YWluCisgICBvdXIgbmFtZSwgYWRkcmVzc2VzLCBhbmQgYSBub3RpY2Ugd2hpY2ggc3RhdGVzIHdlIGhhdmUgY3JlYXRlZCBEaWt1TXVkLgorCisgICBZb3UgYXJlIGFsbG93ZWQgdG8gYWx0ZXIgRGlrdU11ZCwgc291cmNlIGFuZCBkb2N1bWVudGF0aW9uIGFzIGxvbmcgYXMKKyAgIHlvdSBkbyBub3QgdmlvbGF0ZSBhbnkgb2YgdGhlIGFib3ZlIHN0YXRlZCBydWxlcy4KKworCitSZWdhcmRzLAorCisKKworVGhlIERpa3VNdWQgR3JvdXAKKworCitOb3RlOgorCitXZSBob3BlIHlvdSB3aWxsIGVuam95IERpa3VNdWQsIGFuZCBlbmNvdXJhZ2UgeW91IHRvIHNlbmQgdXMgYW55IHJlcG9ydHMKK29uIGJ1Z3MgKHdoZW4geW91IGZpbmQgJ2l0JykuIFJlbWVtYmVyIHRoYXQgd2UgYXJlIGFsbCB1c2luZyBvdXIgc3BhcmUKK3RpbWUgdG8gd3JpdGUgYW5kIGltcHJvdmUgRGlrdU11ZCwgYnVncywgZXRjLiAtIGFuZCBjaGFuZ2VzIHdpbGwgdGFrZSB0aGVpcgordGltZS4gV2UgaGF2ZSBzbyBmYXIgcHV0IGV4dHJlbWVseSBtYW55IHByb2dyYW1taW5nIGhvdXJzIGludG8gdGhpcyBwcm9qZWN0LgorSWYgeW91IG1ha2UgYW55IG1ham9yIGltcHJvdmVtZW50cyBvbiBEaWt1TXVkIHdlIHdvdWxkIGJlIGhhcHB5IHRvCitoZWFyIGZyb20geW91LiBBcyB5b3Ugd2lsbCBuYXR1cmFsbHkgaG9ub3IgdGhlIGFib3ZlIHJ1bGVzLCB5b3Ugd2lsbCByZWNlaXZlCituZXcgdXBkYXRlcyBhbmQgaW1wcm92ZW1lbnRzIG1hZGUgdG8gdGhlIGdhbWUuCisKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL2Npc2NvLXZwbi1jbGllbnQgYi9saWNlbnNlcy9jaXNjby12cG4tY2xpZW50Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExYzgwNjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9jaXNjby12cG4tY2xpZW50CkBAIC0wLDAgKzEsMzQgQEAKK0NMSUVOVCBTT0ZUV0FSRSBMSUNFTlNFIEFHUkVFTUVOVCBPRiBDSVNDTyBTWVNURU1TLgorCitUSEUgU09GVFdBUkUgVE8gV0hJQ0ggWU9VIEFSRSBSRVFVRVNUSU5HIEFDQ0VTUyBJUyBUSEUgUFJPUEVSVFkgT0YgQ0lTQ08gU1lTVEVNUy4gIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSBJUyBHT1ZFUk5FRCBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhFIEFHUkVFTUVOVCBTRVQgRk9SVEggQkVMT1cuICBCWSBDTElDS0lORyAiWUVTIiBPTiBUSElTIFNDUkVFTiwgWU9VIElORElDQVRFIFRIQVQgWU9VIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSEFUIEFHUkVFTUVOVC4gICBUSEVSRUZPUkUsIFBMRUFTRSBSRUFEIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBDQVJFRlVMTFkgQkVGT1JFIENMSUNLSU5HIE9OICJZRVMiLiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhFIEFHUkVFTUVOVCwgQ0xJQ0sgIk5PIiBPTiBUSElTIFNDUkVFTiwgSU4gV0hJQ0ggQ0FTRSBZT1UgV0lMTCBCRSBERU5JRUQgQUNDRVNTIFRPIFRIRSBTT0ZUV0FSRS4KKworT3duZXJzaGlwIG9mIHRoZSBTb2Z0d2FyZQorCisxLiAgVGhlIHNvZnR3YXJlIGNvbnRhaW5lZCBpbiB0aGUgQ2lzY28gU3lzdGVtcyBWUE4gQ2xpZW50ICgidGhlIFNvZnR3YXJlIiksIHRvIHdoaWNoIHlvdSBhcmUgcmVxdWVzdGluZyBhY2Nlc3MsIGlzIG93bmVkIG9yIGxpY2Vuc2VkIGJ5IENpc2NvIFN5c3RlbXMgYW5kIGlzIHByb3RlY3RlZCBieSBVbml0ZWQgU3RhdGVzIGNvcHlyaWdodCBsYXdzLCBsYXdzIG9mIG90aGVyIG5hdGlvbnMsIGFuZC9vciBpbnRlcm5hdGlvbmFsIHRyZWF0aWVzLgorCitHcmFudCBvZiBMaWNlbnNlCisKKzIuIENpc2NvIFN5c3RlbXMgaGVyZWJ5IGdyYW50cyB0byB5b3UgdGhlIHJpZ2h0IHRvIGluc3RhbGwgYW5kIHVzZSB0aGUgU29mdHdhcmUgb24gYW4gdW5saW1pdGVkIG51bWJlciBvZiBjb21wdXRlcnMsIHByb3ZpZGVkIHRoYXQgZWFjaCBvZiB0aG9zZSBjb21wdXRlcnMgbXVzdCB1c2UgdGhlIFNvZnR3YXJlIG9ubHkgdG8gY29ubmVjdCB0byBDaXNjbyBTeXN0ZW1zIHByb2R1Y3RzLCBhbmQgc3ViamVjdCB0byBleHBvcnQgcmVzdHJpY3Rpb25zIGluIHBhcmFncmFwaCA0IGhlcmVvZi4gWW91IG1heSBtYWtlIG9uZSBjb3B5IG9mIHRoZSBTb2Z0d2FyZSBmb3IgZWFjaCBzdWNoIGNvbXB1dGVyIGZvciB0aGUgcHVycG9zZSBvZiBpbnN0YWxsaW5nIHRoZSBTb2Z0d2FyZSBvbiB0aGF0IGNvbXB1dGVyLiBUaGUgU29mdHdhcmUgaXMgbGljZW5zZWQgZm9yIHVzZSBvbmx5IHdpdGggQ2lzY28gU3lzdGVtcyBwcm9kdWN0cywgYW5kIGZvciBubyBvdGhlciB1c2UuCisKK1Jlc3RyaWN0aW9ucyBvbiBVc2UgYW5kIFRyYW5zZmVyCisKKzMuIFlvdSBtYXkgbm90IG90aGVyd2lzZSBjb3B5IHRoZSBTb2Z0d2FyZSwgZXhjZXB0IHRoYXQgeW91IG1heSBtYWtlIG9uZSBjb3B5IG9mIHRoZSBTb2Z0d2FyZSBzb2xlbHkgZm9yIGJhY2t1cCBvciBhcmNoaXZhbCBwdXJwb3Nlcy4gVG8gdGhpcyBlbmQsIHlvdSBtYXkgdHJhbnNmZXIgdGhlIFNvZnR3YXJlIHRvIGEgc2luZ2xlIHNldCBvZiBkaXNrcyBwcm92aWRlZCB5b3Uga2VlcCB0aGUgZGlza3Mgc29sZWx5IGZvciBiYWNrdXAgb3IgYXJjaGl2YWwgcHVycG9zZXMuIFlvdSBtYXkgbm90IHVzZSB0aGUgYmFja3VwIG9yIGFyY2hpdmFsIGNvcHkgb2YgdGhlIFNvZnR3YXJlIGV4Y2VwdCBpbiBjb25qdW5jdGlvbiB3aXRoIENpc2NvIFN5c3RlbXMgcHJvZHVjdHMuCisKKzQuICBZb3UgbWF5IG5vdCB0cmFuc2ZlciB0aGUgU29mdHdhcmUgdG8gYW55IHRoaXJkIHBhcnR5IHdpdGhvdXQgdGhlIGV4cHJlc3Mgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIENpc2NvIFN5c3RlbXMuICBGb3IgcGVybWl0dGVkIHRyYW5zZmVycywgeW91IG1heSBub3QgZXhwb3J0IHRoZSBTb2Z0d2FyZSB0byBhbnkgY291bnRyeSBmb3Igd2hpY2ggdGhlIFVuaXRlZCBTdGF0ZXMgcmVxdWlyZXMgYW55IGV4cG9ydCBsaWNlbnNlIG9yIG90aGVyIGdvdmVybm1lbnRhbCBhcHByb3ZhbCBhdCB0aGUgdGltZSBvZiBleHBvcnQgd2l0aG91dCBmaXJzdCBvYnRhaW5pbmcgdGhlIHJlcXVpc2l0ZSBsaWNlbnNlIGFuZC9vciBhcHByb3ZhbC4gIEZ1cnRoZXJtb3JlLCB5b3UgbWF5IG5vdCBleHBvcnQgdGhlIFNvZnR3YXJlIGluIHZpb2xhdGlvbiBvZiBhbnkgZXhwb3J0IGNvbnRyb2wgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBvciBhbnkgb3RoZXIgY291bnRyeS4KKworNS4gIFlvdSBtYXkgbm90IG1vZGlmeSwgdHJhbnNsYXRlLCBkZWNvbXBpbGUsIGRpc2Fzc2VtYmxlLCB1c2UgZm9yIGFueSBjb21wZXRpdGl2ZSBhbmFseXNpcywgcmV2ZXJzZSBlbmdpbmVlciwgZGlzdHJpYnV0ZSwgb3IgY3JlYXRlIGRlcml2YXRpdmUgd29ya3MgZnJvbSwgdGhlIFNvZnR3YXJlIG9yIGFueSBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBvciBhbnkgY29weSB0aGVyZW9mLCBpbiB3aG9sZSBvciBpbiBwYXJ0LgorCis2LiAgVGhlIHN1YmplY3QgbGljZW5zZSB3aWxsIHRlcm1pbmF0ZSBpbW1lZGlhdGVseSBpZiB5b3UgZG8gbm90IGNvbXBseSB3aXRoIGFueSBhbmQgYWxsIG9mIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBzZXQgZm9ydGggaGVyZWluLiBVcG9uIHRlcm1pbmF0aW9uIGZvciBhbnkgcmVhc29uLCB5b3UgKHRoZSBsaWNlbnNlZSkgbXVzdCBpbW1lZGlhdGVseSBkZXN0cm95IHRoZSBTb2Z0d2FyZSwgYW55IGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uLCBhbmQgYWxsIGNvcGllcyB0aGVyZW9mLiAgQ2lzY28gU3lzdGVtcyBpcyBub3QgbGlhYmxlIHRvIHlvdSBmb3IgZGFtYWdlcyBpbiBhbnkgZm9ybSBzb2xlbHkgYnkgcmVhc29uIG9mIHRlcm1pbmF0aW9uIG9mIHRoaXMgbGljZW5zZS4KKworNy4gIFlvdSBtYXkgbm90IHJlbW92ZSBvciBhbHRlciBhbnkgY29weXJpZ2h0LCB0cmFkZSBzZWNyZXQsIHBhdGVudCwgdHJhZGVtYXJrLCB0cmFkZSBuYW1lLCBsb2dvLCBwcm9kdWN0IGRlc2lnbmF0aW9uIG9yIG90aGVyIHByb3ByaWV0YXJ5IGFuZC9vciBvdGhlciBsZWdhbCBub3RpY2VzIGNvbnRhaW5lZCBpbiBvciBvbiB0aGUgU29mdHdhcmUgYW5kIGFueSBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbi4gIFRoZXNlIGxlZ2FsIG5vdGljZXMgbXVzdCBiZSByZXRhaW5lZCBvbiBhbnkgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSBhbmQgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gbWFkZSBwdXJzdWFudCB0byBwYXJhZ3JhcGhzIDIgYW5kIDMgaGVyZW9mLgorCis4LiAgWW91IHNoYWxsIGFjcXVpcmUgbm8gcmlnaHRzIG9mIGFueSBraW5kIHRvIGFueSBjb3B5cmlnaHQsIHRyYWRlIHNlY3JldCwgcGF0ZW50LCB0cmFkZW1hcmssIHRyYWRlIG5hbWUsIGxvZ28sIG9yIHByb2R1Y3QgZGVzaWduYXRpb24gY29udGFpbmVkIGluLCBvciByZWxhdGluZyB0bywgdGhlIFNvZnR3YXJlIG9yIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIGFuZCBzaGFsbCBub3QgbWFrZSB1c2UgdGhlcmVvZiBleGNlcHQgYXMgZXhwcmVzc2x5IGF1dGhvcml6ZWQgaGVyZWluIG9yIG90aGVyd2lzZSBhdXRob3JpemVkIGluIHdyaXRpbmcgYnkgQ2lzY28gU3lzdGVtcy4KKworTGltaXRhdGlvbiBPZiBMaWFiaWxpdGllcworCis5LiAgSU5TVEFMTEFUSU9OIEFORCBVU0UgT0YgVEhFIFNPRlRXQVJFIElTIEFMU08gR09WRVJORUQgQlkgQSBTRVBBUkFURSBMSUNFTlNFIEFHUkVFTUVOVCBCRVRXRUVOIENJU0NPIFNZU1RFTVMgQU5EIFRIRSBQVVJDSEFTRVIgT0YgVEhFIENJU0NPIFNZU1RFTVMgVlBOIENMSUVOVCBQUk9EVUNULiAgVEhBVCBTRVBBUkFURSBMSUNFTlNFIEFHUkVFTUVOVCBDT05UQUlOUyBBIERFU0NSSVBUSU9OIE9GIEFMTCBXQVJSQU5USUVTIFBST1ZJREVEIEJZIENJU0NPIFNZU1RFTVMgRk9SIFRIRSBTT0ZUV0FSRS4gIENJU0NPIFNZU1RFTVMgUFJPVklERVMgTk8gV0FSUkFOVElFUyBGT1IgVEhFIFNPRlRXQVJFIE9USEVSIFRIQU4gVEhPU0UgU0VUIEZPUlRIIElOIFRIQVQgQUdSRUVNRU5ULCBBTkQgQVNTVU1FUyBOTyBMSUFCSUxJVElFUyBXSVRIIFJFU1BFQ1QgVE8gWU9VUiBVU0UgT0YgVEhFIFNPRlRXQVJFLgorCisKKworCisKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL2NsdXN0YWx3IGIvbGljZW5zZXMvY2x1c3RhbHcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTMxYjBkYwotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL2NsdXN0YWx3CkBAIC0wLDAgKzEsMzQgQEAKK0xpY2Vuc2luZyBDbHVzdGFsVyBhbmQgQ2x1c3RhbFgKKworRGF0ZToyOSBOb3ZlbWJlciAyMDA3CisKK1RoZSBjb3B5cmlnaHQgZm9yIENsdXN0YWxXIGFuZCBDbHVzdGFsWCBpcyBoZWxkIGJ5IERlcyBIaWdnaW5zLCBKdWxpZSBUaG9tcHNvbiBhbmQgVG9ieSBHaWJzb24KKworVGhlIGJpbmFyaWVzIGFuZCBzb3VyY2UgY29kZSBhcmUgbWFkZSBhdmFpbGFibGUgYW5kIGNhbiBiZSBkaXN0cmlidXRlZCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVXNlcnMgYXJlIGZyZWUgdG8gcmVkaXN0cmlidXRlIENsdXN0YWxXIG9yIENsdXN0YWxYIGluIGl0J3MgdW5tb2RpZmllZCBmb3JtIGFzIGxvbmcgYXMgaXQgaXMgbm90IGZvciBjb21tZXJjaWFsIGdhaW4uCisKK0FueW9uZSB3aXNoaW5nIHRvIHJlZGlzdHJpYnV0ZSBDbHVzdGFsIGNvbW1lcmNpYWxseSBzaG91bGQgY29udGFjdCBUb2J5IEdpYnNvbiBhdCBnaWJzb25AZW1ibC5kZQorCisKK0lmIHVzZXJzIG1ha2UgY2hhbmdlcy9oYXZlIGlkZWFzIHRoYXQgdGhleSBiZWxpZXZlIHdvdWxkIGJlIHVzZWZ1bCB0byB0aGUgYnJvYWRlciByZXNlYXJjaCBjb21tdW5pdHkgdGhleSBjYW4gc2VuZCB0aGVpciBzdWdnZXN0aW9ucyB0byB0aGUgY2x1c3RhbCBkZXZlbG9wbWVudCB0ZWFtIGF0IGNsdXN0YWx3QHVjZC5pZSB3aGVyZSB0aGV5IHdpbGwgYmUgY29uc2lkZXJlZCBmb3IgaW5jbHVzaW9uIGluIGZ1dHVyZSByZWxlYXNlcy4KKworCisKK0ZyZXF1ZW50bHkgYXNrZWQgcXVlc3Rpb25zIGFib3V0IENsdXN0YWwgbGljZW5zaW5nPworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKzEuIERvIEkgaGF2ZSB0byBwYXkgdG8gdXNlIENsdXN0YWxXIG9yIENsdXN0YWxYPworTm8gLSB1bmxlc3MgeW91IHdpc2ggdG8gcmVkaXN0cmlidXRlIENsdXN0YWwgZm9yIHByb2ZpdC4gSW4gdGhpcyBjYXNlIHNlZSBxdWVzdGlvbiA0LgorCisyLiBDYW4gSSByZWRpc3RyaWJ1dGUgdGhlIENsdXN0YWwgYmluYXJpZXMgYW5kIHNvdXJjZSBjb2RlPworWWVzLiBXZSBoYXZlIGFsd2F5cyB3YW50ZWQgdG8gc2VlIENsdXN0YWwgaGF2ZSBhcyB3aWRlIGEgdXNlcmJhc2UgYW5kIGRpc3RyaWJ1dGlvbiBuZXR3b3JrIGFzIHBvc3NpYmxlIGFuZCBhcmUgaGFwcHkgdG8gc2VlIG90aGVyIHNpdGVzIGhvc3QgY29waWVzIG9mIHRoZSBvZmZpY2lhbCBDbHVzdGFsIGNvZGUuCisKKzMuIENhbiBJIG1ha2UgY2hhbmdlcyB0byB0aGUgc291cmNlIGNvZGU/CitZb3UgY2FuIG1ha2UgY2hhbmdlcyBmb3IgeW91ciBvd24gcHVycG9zZXMgYnV0IHlvdSBzaG91bGQgbm90IHJlZGlzdHJpYnV0ZSB0aGUgY2hhbmdlZCBjb2RlLgorCis0LiBJIHdhbnQgdG8gaW5jbHVkZSBDbHVzdGFsVy9DbHVzdGFsWCBpbiBhIGNvbW1lcmNpYWwgYXBwbGljYXRpb24gd2hvIHNob3VsZCBJIGNvbnRhY3Q/CitUb2J5IEdpYnNvbiBhdCBnaWJzb25AZW1ibC5kZSAoYWxzbyBjYyBkZXMuaGlnZ2luc0B1Y2QuaWUpCisKKzUuIFRoZXJlIGlzIG5vIENsdXN0YWwgZGlzdHJpYnV0aW9uIGZvciBwbGF0Zm9ybSBYLiBJIGhhdmUgY2hhbmdlZCB0aGUgY29kZSBpbiBvcmRlciB0byBjb21waWxlIENsdXN0YWwgb24gdGhpcyBwbGF0Zm9ybS4gQ2FuIEkgcmVkaXN0cmlidXRlIGl0PworSWRlYWxseSB5b3Ugc2hvdWxkIHNlbmQgdXMgYSBjb3B5IG9mIHlvdXIgc291cmNlIGNvZGUgY2hhbmdlcyBhcyB3ZWxsIGFzIGEgYmluYXJ5LiBXZSB3aWxsIGluY2x1ZGUgaXQgaW4gb3VyIGNvbnRyaWJ1dGVkIGJpbmFyaWVzIHNlY3Rpb24gb24gb3VyIEZUUCBzaXRlIGFsb25nIHdpdGggYW4gYWNrbm93bGVkZ2VtZW50IG9mIHlvdXIgY29udHJpYnV0aW9uLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvY21pZ2VtbyBiL2xpY2Vuc2VzL2NtaWdlbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRkZWYyMgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL2NtaWdlbW8KQEAgLTAsMCArMSw1NiBAQAorVGhpcyB0cmFuc2xhdGlvbiBpcyBpbmZvcm1hbCwgYW5kICpub3QqIG9mZmljaWFsbHkgYXBwcm92ZWQgYnkgVGhlIE1haW50YWluZXIKK2FzIHZhbGlkLiAgVG8gYmUgY29tcGxldGVseSBzdXJlIG9mIHdoYXQgaXMgcGVybWl0dGVkLCByZWZlciB0byB0aGUgb3JpZ2luYWwKK0phcGFuZXNlIGxpY2Vuc2UgZmlsZSBpbiAvdXNyL3NoYXJlL2RvYy9jbWlnZW1vLSR7UFZ9L0xJQ0VOU0Vfai50eHQuCisKK1RFUk1TIEFORCBDT05ESVRJT05TIE9GIFVTRQorICBUaGUgbWVhbmluZ3Mgb2YgZWFjaCB0ZXJtIGFyZSBkZWZpbmVkIGFzIGZvbGxvd2luZy4KKyAgICAgIFRoaXMgU29mdHdhcmUgICAgIDogQy9NaWdlbW8gKGluY2x1ZGluZyBiaW5hcnkgZmlsZXMgYW5kIHNvdXJjZSBjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXhjbHVkaW5nIGRhdGEgb2YgZGljdGlvbmFyaWVzKQorICAgICAgSWxsZWdhbCBBY3Rpb25zICAgOiBBY3Rpb25zIHdoaWNoIGFyZSBkaWZmZXJlbnQgZnJvbSBkZXNjcmlwdGlvbnMgaW4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQgb3Igd2hpY2ggYXJlIG5vdCBpbiBkb2N1bWVudAorICAgICAgVGhlIE1haW50YWluZXIgICAgOiBBbiBpbmRpdmlkdWFsIHdobyBwb3NzZXMgVGhpcyBTb2Z0d2FyZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKFRoZSBDcmVhdG9yLCBUaGUgQ29weXJpZ2h0IEhvbGRlcikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgKEF0IHRoZSB0aW1lIHdoZW4gdGhlc2UgY29uZGl0aW9ucyBhcmUgY3JlYXRlZDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1VUkFPS0EgVGFybyA8a29yb25AdGthLmF0dC5uZS5qcD4pCisgICAgICBFbmQgVXNlciAgICAgICAgICA6IEFuIGluZGl2aWR1YWwgd2hvIHVzZXMgb3IgdXNlZCBUaGlzIFNvZnR3YXJlCisgICAgICBUaGlyZCBQYXJ0aWVzICAgICA6IE90aGVyIGluZGl2aWR1YWxzIHdobyBkbyBub3QgY29ycmVzcG9uZCB0byBuZWl0aGVyCisgICAgICAgICAgICAgICAgICAgICAgICAgIFRoZSBNYWludGFpbmVyIG5vciBFbmQgVXNlcgorICAgICAgICAgICAgICAgICAgICAgICAgICAoRXNwZWNpYWxseSBpbmNsdWRpbmcgY3JlYXRvcnMgYW5kIGNvcHlyaWdodCBob2xkZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBkYXRhIG9mIGRpY3Rpb25hcmllcykKKworICBUaGUgdXNlIG9mIFRoaXMgU29mdHdhcmUgaXMgcGVybWl0dGVkIHRvIG9ubHkgdGhvc2Ugd2hvIGFjY2VwdCB0aGUgZm9sbG93aW5nCisgIGNvbmRpdGlvbnMuICBJZiBFbmQgVXNlciBkb2VzIG5vdCBhZ3JlZSB0byB0aGVtLCBoZSBtdXN0IHN0b3AgdXNpbmcgVGhpcworICBTb2Z0d2FyZSBhbmQgbXVzdCBkZWxldGUgcmVsYXRlZCBmaWxlcyBmcm9tIGhpcyBzdG9yYWdlIG1lZGlhLgorCisgIChDb25kaXRpb25zIGNvbmNlcm5pbmcgdG8gVGhlIE1haW50YWluZXIpCisgIFRoZSBNYWludGFpbmVyIGhhcyB0aGUgcmlnaHQgdG8gY2hhbmdlIHRoZXNlIGNvbmRpdGlvbnMuCisKKyAgVGhlIE1haW50YWluZXIgaGFzIHRoZSBmb2xsb3dpbmcgcmlnaHRzIGNvbmNlcm5pbmcgdG8gVGhpcyBTb2Z0d2FyZS4KKyAgICAgICAgICAgIC0gVGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIHNvZnR3YXJlCisgICAgICAgICAgICAtIFRoZSByaWdodCB0byBkaXN0cmlidXRlIFRoaXMgU29mdHdhcmUKKyAgICAgICAgICAgIC0gVGhlIHJpZ2h0IHRvIHBlcm1pdCB1c2Ugb2YgVGhpcyBTb2Z0d2FyZQorICAgICAgICAgICAgLSBUaGUgcmlnaHQgdG8gdHJhbnNmZXIgc29tZSBvciBhbGwgb2YgdGhlIGFib3ZlIHJpZ2h0cworCisgIFRoZSBNYWludGFpbmVyIGhhcyB0aGUgb2JsaWdhdGlvbiB0byBjb3JyZWN0IElsbGVnYWwgQWN0aW9ucyBvZiBUaGlzCisgIFNvZnR3YXJlLgorCisgIFRoZSBNYWludGFpbmVyIGlzIGltbXVuZWQgZnJvbSB0aGUgbG9zcyB3aGljaCBFbmQgVXNlcnMgaGFkIG9yIHRoZSBkYW1hZ2UKKyAgd2hpY2ggRW5kIFVzZXJzIHN1ZmZlcmVkLgorCisgIChDb25kaXRpb25zIGFjY29yZGluZyB0byBFbmQgVXNlcnMpCisgIEVuZCBVc2VycyBoYXZlIHRoZSBmb2xsb3dpbmcgb2JsaWdhdGlvbnMgd2hlbiB1c2luZyBUaGlzIFNvZnR3YXJlLgorICAgICAgICAgICAgLSBUaGUgb2JsaWdhdGlvbiB0byBwYXkgY2hhcmdlIGFjY29yZGluZyB0byB0aGUgcmVndWxhdGlvbnMgbGFpZCAKKyAgICAgICAgICAgICAgZG93biBzZXBhcmF0ZWx5LgorICAgICAgICAgICAgLSBUaGUgb2JsaWdhdGlvbiB0byBwcm90ZWN0IHRoZSByaWdodHMgb2YgVGhlIE1haW50YWluZXIKKyAgICAgICAgICAgIC0gVGhlIG9ibGlnYXRpb24gdG8gcHJvdGVjdCB0aGUgcmlnaHRzIG9mIFRoaXJkIFBhcnRpZXMKKworICBFbmQgVXNlcnMgaGF2ZSB0aGUgcmlnaHQgdG8gdXNlIFRoaXMgU29mdHdhcmUgZm9yIGFueSBwdXJwb3NlIGFzIGxvbmcgYXMKKyAgdGhlcmUgaXMgbm8gY29udHJhZGljdGlvbiB0byBvdGhlciBjb25kaXRpb25zLgorCisgIChDb25kaXRpb24gYWNjb3JkaW5nIHRvIHJveWFsdHkpCisgIFRoZSBjaGFyZ2UgZm9yIHVzaW5nIFRoaXMgU29mdHdhcmUgaXMgbGFpZCBkb3duIGFzIGZvbGxvd2luZzoKKyAgICAgICAgICAgIC0gemVybyBZZW4KKworICAoRW5kIE9mIENvbmRpdGlvbnMpCisgIElmIEVuZCBVc2VyIGRvZXMgbm90IGFncmVlIHRvIHRoZSBhYm92ZSBjb25kaXRpb25zLCBoZSBtdXN0IHN0b3AgdXNpbmcgVGhpcworICBTb2Z0d2FyZS4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL2NucyBiL2xpY2Vuc2VzL2NucwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOWY2N2E1Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvY25zCkBAIC0wLDAgKzEsNDggQEAKKyAgICAgICAgICAgICBMSUNFTlNFIEZPUiBBQ0FERU1JQyAoTk9OLVBST0ZJVCkgSU5TVElUVVRJT05TCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUTyBVU0UgQ05TCisKKyAgICAgICAgICAgICAgICAgICAgICAgICBURVJNUyBPRiBBR1JFRU1FTlQKKworQlkgRE9XTkxPQURJTkcgT1IgVVNJTkcgVEhFIENSWVNUQUxMT0dSQVBIWSAmIE5NUiBTWVNURU0gKENOUykKK0dFTkVSQUwtUkVMRUFTRSBTT0ZUV0FSRSBZT1UgQUdSRUUgVE8gVEhFIEZPTExPV0lORyBURVJNUzoKKworLSBZQUxFIFVOSVZFUlNJVFkgUkVUQUlOUyBPV05FUlNISVAgT0YgQUxMIE1BVEVSSUFMUyAoSU5DTFVESU5HCisgIFNPRlRXQVJFIEFORCBET0NVTUVOVEFUSU9OKS4gUkVQT1JUUyBPRiBNT0RJRklDQVRJT05TIE9SIERFUklWQVRJVkUKKyAgV09SS1MgQVJFIFRPIEJFIE1BREUgVE8gWUFMRSBVTklWRVJTSVRZLCBBTkQgQVJFIFRPIEJFIE1BREUgQVZBSUxBQkxFCisgIE9OIFJFUVVFU1QuCisKKy0gWU9VIFNIQUxMIE5PVCBVU0UgVEhFIFNPRlRXQVJFIEZPUiBBTlkgUFVSUE9TRSAoUkVTRUFSQ0ggT1IKKyAgT1RIRVJXSVNFKSBUSEFUIElTIFNVUFBPUlRFRCBCWSBBICJGT1IgUFJPRklUIiBPUkdBTklaQVRJT04gV0lUSE9VVAorICBQUklPUiBXUklUVEVOIEFVVEhPUklaQVRJT04uCisKKy0gWU9VIFNIQUxMIE5PVCBESVNDTE9TRSBJTiBBTlkgRk9STSBFSVRIRVIgVEhFIERFTElWRVJFRCBTT0ZUV0FSRSBPUgorICBET0NVTUVOVEFUSU9OIE9SIEFOWSBNT0RJRklDQVRJT05TIE9SIERFUklWQVRJVkUgV09SS1MgQkFTRUQgT04gVEhFCisgIFNPRlRXQVJFIE9SIERPQ1VNRU5UQVRJT04gVE8gVEhJUkQgUEFSVElFUyBXSVRIT1VUIFBSSU9SIFdSSVRURU4KKyAgQVVUSE9SSVpBVElPTi4KKworLSBJRiBZT1UgUkVDRUlWRSBBIFJFUVVFU1QgVE8gRlVSTklTSCBBTEwgT1IgQU5ZIFBPUlRJT04gT0YgVEhFCisgIFNPRlRXQVJFIFRPIEFOWSBUSElSRCBQQVJUWSwgWU9VIFdJTEwgTk9UIEZVTEZJTEwgU1VDSCBBIFJFUVVFU1QgQU5ECisgIFdJTEwgUkVGRVIgSVQgSU4gV1JJVElORyBUTyBZQUxFIFVOSVZFUlNJVFkuCisKKy0gWU9VIEFHUkVFIFRIQVQgVEhFIFNPRlRXQVJFIElTIEZVUk5JU0hFRCBPTiBBTiAiQVMgSVMiIEJBU0lTIEFORAorICBUSEFUIFlBTEUgVU5JVkVSU0lUWSBJTiBOTyBXQVkgV0FSUkFOVFMgVEhFIFNPRlRXQVJFIE9SIEFOWSBPRiBJVFMKKyAgUkVTVUxUUyBBTkQgSVMgSU4gTk8gV0FZIExJQUJMRSBGT1IgQU5ZIFVTRSBZT1UgTUFLRSBPRiBUSEUgU09GVFdBUkUuCisgIEVYQ0VQVCBBUyBPVEhFUldJU0UgUFJPVklERUQgSU4gVEhJUyBTRUNUSU9OLCBZQUxFIFVOSVZFUlNJVFkKKyAgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTLCBSRVBSRVNFTlRBVElPTlMsIEFORCBTVEFURU1FTlRTLCBFWFBSRVNTCisgIE9SIElNUExJRUQsIFNUQVRVVE9SWSBPUiBPVEhFUldJU0UsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkKKyAgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAgUFVSUE9TRS4gSU4gTk8gRVZFTlQgU0hBTEwgWUFMRSBVTklWRVJTSVRZIEJFIExJQUJMRSBGT1IgQU5ZIEFDVFVBTCwKKyAgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgQ09OU0VRVUVOVElBTCwgT1IgSU5DSURFTlRBTCBEQU1BR0VTLAorICBIT1dFVkVSIENBVVNFRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBEQU1BR0VTIEFSSVNJTkcgT1VUCisgIE9GIFRIRSBVU0UgT1IgT1BFUkFUSU9OIE9GIFRIRSBTT0ZUV0FSRSwgTE9TUyBPRiBVU0UgT0YgVEhFIFNPRlRXQVJFLAorICBPUiBEQU1BR0UgT0YgQU5ZIFNPUlQgVE8gVEhFIFVTRVIuCisKKy0gWU9VIEFHUkVFIFRIQVQgQU5ZIFJFUE9SVFMgT1IgUFVCTElDQVRJT04gT0YgUkVTVUxUUyBPQlRBSU5FRCBXSVRICisgIFRIRSBTT0ZUV0FSRSBXSUxMIEFDS05PV0xFREdFIElUUyBVU0UgQlkgQ0lUQVRJT04gT0YgVEhFIEZPTExPV0lORworICBBUlRJQ0xFOgorCisgICAgIkNSWVNUQUxMT0dSQVBIWSBBTkQgTk1SIFNZU1RFTSAoQ05TKTogQSBORVcgU09GVFdBUkUgU1lTVEVNCisgICAgRk9SIE1BQ1JPTU9MRUNVTEFSIFNUUlVDVFVSRSBERVRFUk1JTkFUSU9OIi4gQlJVTkdFUiBBLlQuLCBBREFNUyBQLkQuLAorICAgIENMT1JFIEcuTS4sIERFTEFOTyBXLkwuLCBHUk9TIFAuLCBHUk9TU0UtS1VOU1RMRVZFIFIuVy4sIEpJQU5HIEouLVMuLAorICAgIEtVU1pFV1NLSSBKLiwgTklMR0VTIE4uLCBQQU5OVSBOLlMuLCBSRUFEIFIuSi4sIFJJQ0UgTC5NLiwgU0lNT05TT04gVC4sCisgICAgQU5EIFdBUlJFTiBHLkwuIEFDVEEgQ1JZU1QuIEQ1NCwgOTA1LTkyMSAoMTk5OCkuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9jb2RlaGF1cy1jbGFzc3dvcmxkcyBiL2xpY2Vuc2VzL2NvZGVoYXVzLWNsYXNzd29ybGRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkYzdhZmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9jb2RlaGF1cy1jbGFzc3dvcmxkcwpAQCAtMCwwICsxLDQ3IEBACisKKworLyoKKyAkSWQ6IGNvZGVoYXVzLWNsYXNzd29ybGRzLHYgMS4xIDIwMDQvMDEvMTEgMjE6NTQ6Mjkga2FybHRrIEV4cCAkCisKKyBDb3B5cmlnaHQgMjAwMiAoQykgVGhlIENvZGVoYXVzLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorIAorIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uCisgKCJTb2Z0d2FyZSIpLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkCisgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiBjb3B5cmlnaHQKKyAgICBzdGF0ZW1lbnRzIGFuZCBub3RpY2VzLiAgUmVkaXN0cmlidXRpb25zIG11c3QgYWxzbyBjb250YWluIGEKKyAgICBjb3B5IG9mIHRoaXMgZG9jdW1lbnQuCisgCisgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZQorICAgIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUKKyAgICBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIKKyAgICBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorIAorIDMuIFRoZSBuYW1lICJjbGFzc3dvcmxkcyIgbXVzdCBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAgICBwZXJtaXNzaW9uIG9mIFRoZSBDb2RlaGF1cy4gIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSAKKyAgICBjb250YWN0IGJvYkBjb2RlaGF1cy5vcmcuCisgCisgNC4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgU29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgImNsYXNzd29ybGRzIgorICAgIG5vciBtYXkgImNsYXNzd29ybGRzIiBhcHBlYXIgaW4gdGhlaXIgbmFtZXMgd2l0aG91dCBwcmlvciB3cml0dGVuCisgICAgcGVybWlzc2lvbiBvZiBUaGUgQ29kZWhhdXMuICJjbGFzc3dvcmxkcyIgaXMgYSByZWdpc3RlcmVkCisgICAgdHJhZGVtYXJrIG9mIFRoZSBDb2RlaGF1cy4KKyAKKyA1LiBEdWUgY3JlZGl0IHNob3VsZCBiZSBnaXZlbiB0byBUaGUgQ29kZWhhdXMuCisgICAgKGh0dHA6Ly9jbGFzc3dvcmxkcy5jb2RlaGF1cy5vcmcvKS4KKyAKKyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT0RFSEFVUyBBTkQgQ09OVFJJQlVUT1JTCisgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQKKyBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5ECisgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTAorIFRIRSBDT0RFSEFVUyBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgCisgKi8KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL2NvZGVoYXVzLWdyb292eSBiL2xpY2Vuc2VzL2NvZGVoYXVzLWdyb292eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzE3NWFkCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvY29kZWhhdXMtZ3Jvb3Z5CkBAIC0wLDAgKzEsNDcgQEAKKworCisvKgorICRJZDogY29kZWhhdXMtZ3Jvb3Z5LHYgMS4xIDIwMDQvMDUvMDMgMTc6NTk6MzIga2FybHRrIEV4cCAkCisKKyBDb3B5cmlnaHQgMjAwMyAoQykgSmFtZXMgU3RyYWNoYW4gYW5kIEJvYiBNY3doaXJ0ZXIuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorICgiU29mdHdhcmUiKSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZAorIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gY29weXJpZ2h0CisgICAgc3RhdGVtZW50cyBhbmQgbm90aWNlcy4gIFJlZGlzdHJpYnV0aW9ucyBtdXN0IGFsc28gY29udGFpbiBhCisgICAgY29weSBvZiB0aGlzIGRvY3VtZW50LgorCisgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZQorICAgIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUKKyAgICBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIKKyAgICBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgMy4gVGhlIG5hbWUgImdyb292eSIgbXVzdCBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAgICBwZXJtaXNzaW9uIG9mIFRoZSBDb2RlaGF1cy4gIEZvciB3cml0dGVuIHBlcm1pc3Npb24sCisgICAgcGxlYXNlIGNvbnRhY3QgaW5mb0Bjb2RlaGF1cy5vcmcuCisKKyA0LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBTb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiZ3Jvb3Z5IgorICAgIG5vciBtYXkgImdyb292eSIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICAgIHBlcm1pc3Npb24gb2YgVGhlIENvZGVoYXVzLiAiZ3Jvb3Z5IiBpcyBhIHJlZ2lzdGVyZWQKKyAgICB0cmFkZW1hcmsgb2YgVGhlIENvZGVoYXVzLgorCisgNS4gRHVlIGNyZWRpdCBzaG91bGQgYmUgZ2l2ZW4gdG8gVGhlIENvZGVoYXVzIC0KKyAgICBodHRwOi8vZ3Jvb3Z5LmNvZGVoYXVzLm9yZy8KKworIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPREVIQVVTIEFORCBDT05UUklCVVRPUlMKKyBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVAorIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQKKyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMCisgVEhFIENPREVIQVVTIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworICovCmRpZmYgLS1naXQgYS9saWNlbnNlcy9jb2x0IGIvbGljZW5zZXMvY29sdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTQ1MDhkCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvY29sdApAQCAtMCwwICsxLDEwIEBACitDb2x0IExpY2Vuc2UgQWdyZWVtZW50CisKK1BhY2thZ2VzIGNlcm4uY29sdCogLCBjZXJuLmpldCosIGNlcm4uY2xoZXAKKworICAgIENvcHlyaWdodCAoYykgMTk5OSBDRVJOIC0gRXVyb3BlYW4gT3JnYW5pemF0aW9uIGZvciBOdWNsZWFyIFJlc2VhcmNoLgorICAgIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uIENFUk4gbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3NlZCBvciBpbXBsaWVkIHdhcnJhbnR5LgorCitQYWNrYWdlcyBoZXAuYWlkYS4qCisKKyAgICBXcml0dGVuIGJ5IFBhdmVsIEJpbmtvLCBEaW5vIEZlcnJlcm8gTWVybGlubywgV29sZmdhbmcgSG9zY2hlaywgVG9ueSBKb2huc29uLCBBbmRyZWFzIFBmZWlmZmVyLCBhbmQgb3RoZXJzLiBDaGVjayB0aGUgRnJlZUhFUCBob21lIHBhZ2UgZm9yIG1vcmUgaW5mby4gUGVybWlzc2lvbiB0byB1c2UgYW5kL29yIHJlZGlzdHJpYnV0ZSB0aGlzIHdvcmsgaXMgZ3JhbnRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIExHUEwgTGljZW5zZSwgd2l0aCB0aGUgZXhjZXB0aW9uIHRoYXQgYW55IHVzYWdlIHJlbGF0ZWQgdG8gbWlsaXRhcnkgYXBwbGljYXRpb25zIGlzIGV4cHJlc3NseSBmb3JiaWRkZW4uIFRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBsaWNlbnNlIGFyZSBwcm92aWRlZCB3aXRoIG5vIHdhcnJhbnR5LiAKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL2NvcyBiL2xpY2Vuc2VzL2NvcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODJhNWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvY29zCkBAIC0wLDAgKzEsODIgQEAKK0NvcHlyaWdodCAoQykgMjAwMS0yMDAyIGJ5IEphc29uIEh1bnRlciwgamh1bnRlckBzZXJ2bGV0cy5jb20uCitBbGwgcmlnaHRzIHJlc2VydmVkLiAKKworVGhlIHNvdXJjZSBjb2RlLCBvYmplY3QgY29kZSwgYW5kIGRvY3VtZW50YXRpb24gaW4gdGhlIGNvbS5vcmVpbGx5LnNlcnZsZXQKK3BhY2thZ2UgaXMgY29weXJpZ2h0IGFuZCBvd25lZCBieSBKYXNvbiBIdW50ZXIuIAorCisKK1VTRSBSSUdIVFMKKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIHVzZSB0aGUgY29tLm9yZWlsbHkuc2VydmxldC4qIHBhY2thZ2VzIGluIHRoZQorZGV2ZWxvcG1lbnQgb2YgYW55IG5vbi1jb21tZXJjaWFsIHByb2plY3QuIEZvciB0aGlzIHVzZSB5b3UgYXJlIGdyYW50ZWQgYQorbm9uLWV4Y2x1c2l2ZSwgbm9uLXRyYW5zZmVyYWJsZSBsaW1pdGVkIGxpY2Vuc2UgYXQgbm8gY29zdC4KKworRm9yIGEgY29tbWVyY2lhbCBwcm9qZWN0LCBwZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gdXNlIHRoZQorY29tLm9yZWlsbHkuc2VydmxldC4qIHBhY2thZ2VzIHByb3ZpZGVkIHRoYXQgZXZlcnkgcGVyc29uIG9uIHRoZSBkZXZlbG9wbWVudAordGVhbSBmb3IgdGhhdCBwcm9qZWN0IG93bnMgYSBjb3B5IG9mIHRoZSBib29rIEphdmEgU2VydmxldCBQcm9ncmFtbWluZworKE8nUmVpbGx5KSBpbiBpdHMgbW9zdCByZWNlbnQgZWRpdGlvbi4gVGhlIG1vc3QgcmVjZW50IGVkaXRpb24gaXMgY3VycmVudGx5Cit0aGUgMm5kIEVkaXRpb24sIGF2YWlsYWJsZSBpbiBhc3NvY2lhdGlvbiB3aXRoIEFtYXpvbi5jb20gYXQKK2h0dHA6Ly93d3cuYW1hem9uLmNvbS9leGVjL29iaWRvcy9BU0lOLzA1OTYwMDA0MDUvamFzb25odW50ZXIuIAorCitPdGhlciAoc29tZXRpbWVzIGNoZWFwZXIpIGxpY2Vuc2UgdGVybXMgYXJlIGF2YWlsYWJsZSB1cG9uIHJlcXVlc3Q7IHBsZWFzZQord3JpdGUgdG8gamh1bnRlckBzZXJ2bGV0cy5jb20gZm9yIG1vcmUgaW5mb3JtYXRpb24uIAorCisKK1JFRElTVFJJQlVUSU9OIFJJR0hUUworCitDb21tZXJjaWFsIHJlZGlzdHJpYnV0aW9uIHJpZ2h0cyBvZiB0aGUgY29tLm9yZWlsbHkuc2VydmxldC4qIHBhY2thZ2VzIGFyZQorYXZhaWxhYmxlIGJ5IHdyaXRpbmcgamh1bnRlckBzZXJ2bGV0cy5jb20uCisKK05vbi1jb21tZXJjaWFsIHJlZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0OgorCisxLiBZb3UgcmVkaXN0cmlidXRlIHRoZSBwYWNrYWdlIGluIG9iamVjdCBjb2RlIGZvcm0gb25seSAoYXMgSmF2YSAuY2xhc3MgZmlsZXMKK29yIGEgLmphciBmaWxlIGNvbnRhaW5pbmcgdGhlIC5jbGFzcyBmaWxlcykgYW5kIG9ubHkgYXMgcGFydCBvZiBhIHByb2R1Y3QgdGhhdAordXNlcyB0aGUgY2xhc3NlcyBhcyBwYXJ0IG9mIGl0cyBwcmltYXJ5IGZ1bmN0aW9uYWxpdHkuIAorCisyLiBUaGUgcHJvZHVjdCBjb250YWluaW5nIHRoZSBwYWNrYWdlIGlzIG5vbi1jb21tZXJjaWFsIGluIG5hdHVyZS4KKworMy4gVGhlIHB1YmxpYyBpbnRlcmZhY2UgdG8gdGhlIGNsYXNzZXMgaW4gdGhlIHBhY2thZ2UsIGFuZCB0aGUgcHVibGljCitpbnRlcmZhY2UgdG8gYW55IGNsYXNzZXMgd2l0aCBzaW1pbGFyIGZ1bmN0aW9uYWxpdHksIGlzIGhpZGRlbiBmcm9tIGVuZCB1c2Vycword2hlbiBlbmdhZ2VkIGluIG5vcm1hbCB1c2Ugb2YgdGhlIHByb2R1Y3QuCisKKzQuIFRoZSBkaXN0cmlidXRpb24gaXMgbm90IHBhcnQgb2YgYSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBraXQsIG9wZXJhdGluZworc3lzdGVtLCBvdGhlciBsaWJyYXJ5LCBvciBhIGRldmVsb3BtZW50IHRvb2wgd2l0aG91dCB3cml0dGVuIHBlcm1pc3Npb24gZnJvbQordGhlIGNvcHlyaWdodCBob2xkZXIuCisKKzUuIFRoZSBkaXN0cmlidXRpb24gaW5jbHVkZXMgY29weXJpZ2h0IG5vdGljZSBhcyBmb2xsb3dzOiAiVGhlIHNvdXJjZSBjb2RlLAorb2JqZWN0IGNvZGUsIGFuZCBkb2N1bWVudGF0aW9uIGluIHRoZSBjb20ub3JlaWxseS5zZXJ2bGV0IHBhY2thZ2UgaXMgY29weXJpZ2h0CithbmQgb3duZWQgYnkgSmFzb24gSHVudGVyLiIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCis2LiBZb3UgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZQorZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoCit0aGUgZGlzdHJpYnV0aW9uLiAgCisKKzcuIExpY2Vuc29yIHJldGFpbnMgdGl0bGUgdG8gYW5kIG93bmVyc2hpcCBvZiB0aGUgU29mdHdhcmUgYW5kIGFsbAorZW5oYW5jZW1lbnRzLCBtb2RpZmljYXRpb25zLCBhbmQgdXBkYXRlcyB0byB0aGUgU29mdHdhcmUuCisKK05vdGUgdGhhdCB0aGUgY29tLm9yZWlsbHkuc2VydmxldCBwYWNrYWdlIGlzIHByb3ZpZGVkICJhcyBpcyIgYW5kIHRoZSBhdXRob3IKK3dpbGwgbm90IGJlIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgc3VmZmVyZWQgYXMgYSByZXN1bHQgb2YgeW91ciB1c2UuCitGdXJ0aGVybW9yZSwgeW91IHVuZGVyc3RhbmQgdGhlIHBhY2thZ2UgY29tZXMgd2l0aG91dCBhbnkgZ3VhcmFudGVlIG9mCit0ZWNobmljYWwgc3VwcG9ydC4gCisKK1lvdSBjYW4gYWx3YXlzIGZpbmQgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mIHRoZSBjb20ub3JlaWxseS5zZXJ2bGV0IHBhY2thZ2UgYXQKK2h0dHA6Ly93d3cuc2VydmxldHMuY29tLiAKKworCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUworT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgCitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKK0FSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCitUaGFua3MsCisKK0phc29uIEh1bnRlcgoramh1bnRlckBzZXJ2bGV0cy5jb20KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL2NyYWZ0eSBiL2xpY2Vuc2VzL2NyYWZ0eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjNlMWZlCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvY3JhZnR5CkBAIC0wLDAgKzEsMzkgQEAKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogIENyYWZ0eSwgY29weXJpZ2h0IDE5OTYtMjAwMSBieSBSb2JlcnQgTS4gSHlhdHQsIFBoLkQuLCBBc3NvY2lhdGUgUHJvZmVzc29yICoKKyAqICBvZiBDb21wdXRlciBhbmQgSW5mb3JtYXRpb24gU2NpZW5jZXMsIFVuaXZlcnNpdHkgb2YgQWxhYmFtYSBhdCBCaXJtaW5naGFtLiAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogIEFsbCByaWdodHMgcmVzZXJ2ZWQuICBObyBwYXJ0IG9mIHRoaXMgcHJvZ3JhbSBtYXkgYmUgcmVwcm9kdWNlZCBpbiBhbnkgICAgICoKKyAqICBmb3JtIG9yIGJ5IGFueSBtZWFucywgZm9yIG90aGVyIHRoYW4geW91ciBwZXJzb25hbCB1c2UsIHdpdGhvdXQgdGhlICAgICAgICAqCisgKiAgZXhwcmVzcyB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIGF1dGhvci4gIFRoaXMgcHJvZ3JhbSBtYXkgbm90IGJlIHVzZWQgaW4gKgorICogIHdob2xlLCBub3IgaW4gcGFydCwgdG8gZW50ZXIgYW55IGNvbXB1dGVyIGNoZXNzIGNvbXBldGl0aW9uIHdpdGhvdXQgICAgICAgICoKKyAqICB3cml0dGVuIHBlcm1pc3Npb24gZnJvbSB0aGUgYXV0aG9yLiAgU3VjaCBwZXJtaXNzaW9uIHdpbGwgaW5jbHVkZSB0aGUgICAgICAqCisgKiAgcmVxdWlyZW1lbnQgdGhhdCB0aGUgcHJvZ3JhbSBiZSBlbnRlcmVkIHVuZGVyIHRoZSBuYW1lICJDcmFmdHkiIHNvIHRoYXQgICAgKgorICogIHRoZSBwcm9ncmFtJ3MgYW5jZXN0cnkgd2lsbCBiZSBrbm93bi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgQ29waWVzIG9mIHRoZSBzb3VyY2UgbXVzdCBjb250YWluIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlIGludGFjdC4gICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICBBbnkgY2hhbmdlcyBtYWRlIHRvIHRoaXMgc29mdHdhcmUgbXVzdCBhbHNvIGJlIG1hZGUgcHVibGljIHRvIGNvbXBseSB3aXRoICAqCisgKiAgdGhlIG9yaWdpbmFsIGludGVudCBvZiB0aGlzIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBwcm9qZWN0LiAgVGhlc2UgICAgICAgICAgKgorICogIHJlc3RyaWN0aW9ucyBhcHBseSB3aGV0aGVyIHRoZSBkaXN0cmlidXRpb24gaXMgYmVpbmcgZG9uZSBmb3IgZnJlZSBvciBhcyAgICoKKyAqICBwYXJ0IG9yIGFsbCBvZiBhIGNvbW1lcmNpYWwgcHJvZHVjdC4gIFRoZSBhdXRob3IgcmV0YWlucyBzb2xlIG93bmVyc2hpcCAgICAqCisgKiAgYW5kIGNvcHlyaWdodCBvbiB0aGlzIHByb2dyYW0gZXhjZXB0IGZvciAncGVyc29uYWwgdXNlJyBleHBsYWluZWQgYmVsb3cuICAgKgorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICBwZXJzb25hbCB1c2UgaW5jbHVkZXMgYW55IHVzZSB5b3UgbWFrZSBvZiB0aGUgcHJvZ3JhbSB5b3Vyc2VsZiwgZWl0aGVyIGJ5ICAqCisgKiAgcGxheWluZyBnYW1lcyB3aXRoIGl0IHlvdXJzZWxmLCBvciBhbGxvd2luZyBvdGhlcnMgdG8gcGxheSBpdCBvbiB5b3VyICAgICAgKgorICogIG1hY2hpbmUsICBhbmQgcmVxdWlyZXMgdGhhdCBpZiBvdGhlcnMgdXNlIHRoZSBwcm9ncmFtLCBpdCBtdXN0IGJlIGNsZWFybHkgICoKKyAqICBpZGVudGlmaWVkIGFzICJDcmFmdHkiIHRvIGFueW9uZSBwbGF5aW5nIGl0IChvbiBhIGNoZXNzIHNlcnZlciBhcyBvbmUgICAgICAqCisgKiAgZXhhbXBsZSkuICBQZXJzb25hbCB1c2UgZG9lcyBub3QgYWxsb3cgYW55b25lIHRvIGVudGVyIHRoaXMgaW50byBhIGNoZXNzICAgKgorICogIHRvdXJuYW1lbnQgd2hlcmUgb3RoZXIgcHJvZ3JhbSBhdXRob3JzIGFyZSBpbnZpdGVkIHRvIHBhcnRpY2lwYXRlLiAgSUUgeW91ICoKKyAqICBjYW4gZG8geW91ciBvd24gbG9jYWwgdG91cm5hbWVudCwgd2l0aCBDcmFmdHkgKyBvdGhlciBwcm9ncmFtcywgc2luY2UgdGhpcyAqCisgKiAgaXMgZm9yIHlvdXIgcGVyc29uYWwgZW5qb3ltZW50LiAgQnV0IHlvdSBtYXkgbm90IGVudGVyIENyYWZ0eSBpbnRvIGFuICAgICAgKgorICogIGV2ZW50IHdoZXJlIGl0IHdpbGwgYmUgaW4gY29tcGV0aXRpb24gd2l0aCBvdGhlciBwcm9ncmFtcy9wcm9ncmFtbWVycyAgICAgICoKKyAqICB3aXRob3V0IHBlcm1pc3Npb24gYXMgc3RhdGVkIHByZXZpb3VzbHkuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICogIENyYWZ0eSBpcyB0aGUgInNvbiIgKGRpcmVjdCBkZXNjZW5kZW50KSBvZiBDcmF5IEJsaXR6LiAgaXQgaXMgZGVzaWduZWQgICAgICoKKyAqICB0b3RhbGx5IGFyb3VuZCB0aGUgYml0LWJvYXJkIGRhdGEgc3RydWN0dXJlIGZvciByZWFzb25zIG9mIHNwZWVkIG9mIGV4LSAgICAqCisgKiAgZWN1dGlvbiwgZWFzZSBvZiBhZGRpbmcgbmV3IGtub3dsZWRnZSwgYW5kIGEgKnNpZ25pZmljYW50bHkqIGNsZWFuZXIgICAgICAgKgorICogIG92ZXJhbGwgZGVzaWduLiAgaXQgaXMgd3JpdHRlbiB0b3RhbGx5IGluIEFOU0kgQyB3aXRoIHNvbWUgZmV3IFVOSVggc3lzdGVtICoKKyAqICBjYWxscyByZXF1aXJlZCBmb3IgSS9PLCBldGMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL2NyZWR1Y2UgYi9saWNlbnNlcy9jcmVkdWNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzNDI3NWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9jcmVkdWNlCkBAIC0wLDAgKzEsMzIgQEAKKy0qLSBtb2RlOiBUZXh0IC0qLQorCitDLVJlZHVjZSBpcyBDb3B5cmlnaHQgKGMpIDIwMTEtMjAxMiBUaGUgVW5pdmVyc2l0eSBvZiBVdGFoLgorCitDLVJlZHVjZSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgZm9sbG93aW5nIGxpY2Vuc2UsIHdoaWNoIGlzIG9mdGVuIGNhbGxlZAordGhlICJVbml2ZXJzaXR5IG9mIElsbGlub2lzIE9wZW4gU291cmNlIExpY2Vuc2UuIgorCisvLyBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYSBjb3B5CisvLyBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwgdG8KKy8vIGRlYWwgd2l0aCB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUKKy8vIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vcgorLy8gc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMKKy8vIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorLy8gICAgICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcnMuCisvLworLy8gICAgICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKy8vICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcnMgaW4gdGhlCisvLyAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorLy8KKy8vICAgICAqIE5laXRoZXIgdGhlIG5hbWVzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIFV0YWggbm9yIHRoZSBuYW1lcyBvZiBpdHMKKy8vICAgICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisvLyAgICAgICB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorLy8KKy8vIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisvLyBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKy8vIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKy8vIENPTlRSSUJVVE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorLy8gTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKy8vIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKy8vIFdJVEggVEhFIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvY3J5cHRvcHAgYi9saWNlbnNlcy9jcnlwdG9wcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZWFlZTUyCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvY3J5cHRvcHAKQEAgLTAsMCArMSw2NyBAQAorQ29tcGlsYXRpb24gQ29weXJpZ2h0IChjKSAxOTk1LTIwMDMgYnkgV2VpIERhaS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCitUaGlzIGNvcHlyaWdodCBhcHBsaWVzIG9ubHkgdG8gdGhpcyBzb2Z0d2FyZSBkaXN0cmlidXRpb24gcGFja2FnZQorYXMgYSBjb21waWxhdGlvbiwgYW5kIGRvZXMgbm90IGltcGx5IGEgY29weXJpZ2h0IG9uIGFueSBwYXJ0aWN1bGFyCitmaWxlIGluIHRoZSBwYWNrYWdlLgorCitUaGUgZm9sbG93aW5nIGZpbGVzIGFyZSBjb3B5cmlnaHRlZCBieSB0aGVpciByZXNwZWN0aXZlIG9yaWdpbmFsIGF1dGhvcnMsCithbmQgdGhlaXIgdXNlIGlzIHN1YmplY3QgdG8gYWRkaXRpb25hbCBsaWNlbnNlcyBpbmNsdWRlZCBpbiB0aGVzZSBmaWxlcy4KKworbWFycy5jcHAgLSBDb3B5cmlnaHQgMTk5OCBCcmlhbiBHbGFkbWFuLgorCitBbGwgb3RoZXIgZmlsZXMgaW4gdGhpcyBjb21waWxhdGlvbiBhcmUgcGxhY2VkIGluIHRoZSBwdWJsaWMgZG9tYWluIGJ5CitXZWkgRGFpIGFuZCBvdGhlciBjb250cmlidXRvcnMuCisKK0kgd291bGQgbGlrZSB0byB0aGFuayB0aGUgZm9sbG93aW5nIGF1dGhvcnMgZm9yIHBsYWNpbmcgdGhlaXIgd29ya3MgaW50bwordGhlIHB1YmxpYyBkb21haW46CisKK0pvYW4gRGFlbWVuIC0gM3dheS5jcHAKK0xlb25hcmQgSmFua2UgLSBjYXN0LmNwcCwgc2VhbC5jcHAKK1N0ZXZlIFJlaWQgLSBjYXN0LmNwcAorUGhpbCBLYXJuIC0gZGVzLmNwcAorTWljaGFlbCBQYXVsIEpvaG5zb24gLSBkaWFtb25kLmNwcAorQW5kcmV3IE0uIEt1Y2hsaW5nIC0gbWQyLmNwcCwgbWQ0LmNwcAorQ29saW4gUGx1bWIgLSBtZDUuY3BwLCBtZDVtYWMuY3BwCitTZWFsIFdvb2RzIC0gcmM2LmNwcAorQ2hyaXMgTW9yZ2FuIC0gcmlqbmRhZWwuY3BwCitQYXVsbyBCYXJldHRvIC0gcmlqbmRhZWwuY3BwLCBza2lwamFjay5jcHAsIHNxdWFyZS5jcHAKK1JpY2hhcmQgRGUgTW9saW5lciAtIHNhZmVyLmNwcAorTWF0dGhldyBTa2FsYSAtIHR3b2Zpc2guY3BwCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgY29tcGlsYXRpb24gZm9yCithbnkgcHVycG9zZSwgaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBpcyBoZXJlYnkgZ3JhbnRlZAord2l0aG91dCBmZWUsIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKKzEuIEFueSBjb3B5IG9yIG1vZGlmaWNhdGlvbiBvZiB0aGlzIGNvbXBpbGF0aW9uIGluIGFueSBmb3JtLCBleGNlcHQKK2luIG9iamVjdCBjb2RlIGZvcm0gYXMgcGFydCBvZiBhbiBhcHBsaWNhdGlvbiBzb2Z0d2FyZSwgbXVzdCBpbmNsdWRlCit0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBsaWNlbnNlLgorCisyLiBVc2VycyBvZiB0aGlzIHNvZnR3YXJlIGFncmVlIHRoYXQgYW55IG1vZGlmaWNhdGlvbiBvciBleHRlbnNpb24KK3RoZXkgcHJvdmlkZSB0byBXZWkgRGFpIHdpbGwgYmUgY29uc2lkZXJlZCBwdWJsaWMgZG9tYWluIGFuZCBub3QKK2NvcHlyaWdodGVkIHVubGVzcyBpdCBpbmNsdWRlcyBhbiBleHBsaWNpdCBjb3B5cmlnaHQgbm90aWNlLgorCiszLiBXZWkgRGFpIG1ha2VzIG5vIHdhcnJhbnR5IG9yIHJlcHJlc2VudGF0aW9uIHRoYXQgdGhlIG9wZXJhdGlvbiBvZiB0aGUKK3NvZnR3YXJlIGluIHRoaXMgY29tcGlsYXRpb24gd2lsbCBiZSBlcnJvci1mcmVlLCBhbmQgV2VpIERhaSBpcyB1bmRlciBubworb2JsaWdhdGlvbiB0byBwcm92aWRlIGFueSBzZXJ2aWNlcywgYnkgd2F5IG9mIG1haW50ZW5hbmNlLCB1cGRhdGUsIG9yCitvdGhlcndpc2UuICBUSEUgU09GVFdBUkUgQU5EIEFOWSBET0NVTUVOVEFUSU9OIEFSRSBQUk9WSURFRCAiQVMgSVMiCitXSVRIT1VUIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5UWSBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKK1RIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UuIElOIE5PIEVWRU5UIFdJTEwgV0VJIERBSSBPUiBBTlkgT1RIRVIgQ09OVFJJQlVUT1IgQkUgTElBQkxFIEZPUgorRElSRUNULCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgRVZFTiBJRgorQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis0LiBVc2VycyB3aWxsIG5vdCB1c2UgV2VpIERhaSBvciBhbnkgb3RoZXIgY29udHJpYnV0b3IncyBuYW1lIGluIGFueQorcHVibGljaXR5IG9yIGFkdmVydGlzaW5nLCB3aXRob3V0IHByaW9yIHdyaXR0ZW4gY29uc2VudCBpbiBlYWNoIGNhc2UuCisKKzUuIEV4cG9ydCBvZiB0aGlzIHNvZnR3YXJlIGZyb20gdGhlIFVuaXRlZCBTdGF0ZXMgbWF5IHJlcXVpcmUgYQorc3BlY2lmaWMgbGljZW5zZSBmcm9tIHRoZSBVbml0ZWQgU3RhdGVzIEdvdmVybm1lbnQuICBJdCBpcyB0aGUKK3Jlc3BvbnNpYmlsaXR5IG9mIGFueSBwZXJzb24gb3Igb3JnYW5pemF0aW9uIGNvbnRlbXBsYXRpbmcgZXhwb3J0Cit0byBvYnRhaW4gc3VjaCBhIGxpY2Vuc2UgYmVmb3JlIGV4cG9ydGluZy4KKworNi4gQ2VydGFpbiBwYXJ0cyBvZiB0aGlzIHNvZnR3YXJlIG1heSBiZSBwcm90ZWN0ZWQgYnkgcGF0ZW50cy4gIEl0CitpcyB0aGUgdXNlcnMnIHJlc3BvbnNpYmlsaXR5IHRvIG9idGFpbiB0aGUgYXBwcm9wcmlhdGUKK2xpY2Vuc2VzIGJlZm9yZSB1c2luZyB0aG9zZSBwYXJ0cy4KKworSWYgdGhpcyBjb21waWxhdGlvbiBpcyB1c2VkIGluIG9iamVjdCBjb2RlIGZvcm0gaW4gYW4gYXBwbGljYXRpb24KK3NvZnR3YXJlLCBhY2tub3dsZWRnZW1lbnQgb2YgdGhlIGF1dGhvciBpcyBub3QgcmVxdWlyZWQgYnV0IHdvdWxkIGJlCithcHByZWNpYXRlZC4gVGhlIGNvbnRyaWJ1dGlvbiBvZiBhbnkgdXNlZnVsIG1vZGlmaWNhdGlvbnMgb3IgZXh0ZW5zaW9ucwordG8gV2VpIERhaSBpcyBub3QgcmVxdWlyZWQgYnV0IHdvdWxkIGFsc28gYmUgYXBwcmVjaWF0ZWQuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9jenlib3JyYSBiL2xpY2Vuc2VzL2N6eWJvcnJhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiMDQzNjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9jenlib3JyYQpAQCAtMCwwICsxLDUgQEAKK0FsbCBvZiBteSB3b3JrcyB5b3UgZmluZCBoZXJlIGFyZSBmcmVld2FyZS4gWW91IG1heSBmcmVlbHkgY29weSwgdXNlLAorcXVvdGUsIG1vZGlmeSBvciByZWRpc3RyaWJ1dGUgdGhlbSBhcyBsb25nIGFzIHlvdSBwcm9wZXJseSBhdHRyaWJ1dGUKK215IGNvbnRyaWJ1dGlvbiBhbmQgaGF2ZSBnaXZlbiBhIHF1aWNrIHRob3VnaHQgYWJvdXQgd2hldGhlciBSb21hbgorbWlnaHQgcGVyaGFwcyBiZSBpbnRlcmVzdGVkIHRvIHJlYWQgd2hhdCB5b3UgZGlkIHdpdGggaGlzIHN0dWZmLgorSG9yaXpvbnRhbCBydWxlcyBkb24ndCBhcHBseS4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL2Rlc2NlbnQyLWRhdGEgYi9saWNlbnNlcy9kZXNjZW50Mi1kYXRhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYwYjczM2MKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9kZXNjZW50Mi1kYXRhCkBAIC0wLDAgKzEsMjEgQEAKKyAgICAgICAgICAgICAgIFNPRlRXQVJFIFVTRSBMSU1JVEFUSU9OUyBBTkQgTElNSVRFRCBMSUNFTlNFIAorCisgIFRoaXMgc29mdHdhcmUgcHJvZHVjdCBhbmQgdGhlIG1hbnVhbCBhcmUgY29weXJpZ2h0ZWQgYW5kIGFsbCByaWdodHMgYXJlIAorICAgIHJlc2VydmVkIGJ5IEludGVycGxheSBQcm9kdWN0aW9ucyBhbmQgYXJlIHByb3RlY3RlZCBieSB0aGUgY29weXJpZ2h0IAorICAgbGF3cyB0aGF0IHBlcnRhaW4gdG8gY29tcHV0ZXIgc29mdHdhcmUuICBZb3UgbWF5IG5vdCBjb3B5IHRoZSBzb2Z0d2FyZSAKKyAgIGV4Y2VwdCB0aGF0IHlvdSBtYXkgbWFrZSBvbmUgY29weSBvZiB0aGUgc29mdHdhcmUgc29sZWx5IGZvciBiYWNrdXAgb3IgCisgICAgIGFyY2hpdmFsIHB1cnBvc2VzLiAgWW91IG1heSBub3QgbG9hbiwgc2VsbCwgcmVudCwgbGVhc2UsIGdpdmUsIHN1YiAKKyAgbGljZW5zZSwgb3Igb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBzb2Z0d2FyZSAob3IgYW55IGNvcHkpLiAgWW91IG1heSBub3QgCisgICAgICAgbW9kaWZ5LCBhZGFwdCwgdHJhbnNsYXRlLCBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcywgZGVjb21waWxlLCAKKyAgICAgZGlzYXNzZW1ibGUsIG9yIG90aGVyd2lzZSByZXZlcnNlIGVuZ2luZWVyIG9yIGF0dGVtcHQgdG8gcmV2ZXJzZSAKKyAgZW5naW5lZXIgb3IgZGVyaXZlIHNvdXJjZSBjb2RlIGZyb20sIGFsbCBvciBhbnkgcG9ydGlvbiBvZiB0aGUgc29mdHdhcmUgCisgIG9yIGFueXRoaW5nIGluY29ycG9yYXRlZCB0aGVyZWluIG9yIHBlcm1pdCBvciBlbmNvdXJhZ2UgYW55IHRoaXJkIHBhcnR5IAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0byBkbyBzby4KKworICAgICAgICBERVNDRU5UIENPUFlSSUdIVCAoQykgMTk5NiBQQVJBTExBWCBTT0ZUV0FSRSBDT1JQT1JBVElPTgorICAgICAgICAgICAgICAgICAgICAgICAgICAgQUxMIFJJR0hUUyBSRVNFUlZFRAorCisgICAgICAgIEFMTCBUUkFERU1BUktTIEFSRSBQUk9QRVJUWSBPRiBJTlRFUlBMQVkgUFJPRFVDVElPTlMsIElOQy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEFMTCBSSUdIVFMgUkVTRVJWRUQKKyAgICBJTlRFUlBMQVkgUFJPRFVDVElPTlMgSVMgVEhFIEVYQ0xVU0lWRSBMSUNFTlNFRSBBTkQgRElTVFJJQlVUT1IuCisKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL2RnZW4tc2RsIGIvbGljZW5zZXMvZGdlbi1zZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWEwMjljMAotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL2RnZW4tc2RsCkBAIC0wLDAgKzEsNDMgQEAKK1dpdGggdGhlIGV4Y2VwdGlvbnMgbGlzdGVkIGJlbG93LCBhbGwgZmlsZXMgaW4gdGhpcyBhcmNoaXZlIGZhbGwgdW5kZXIgdGhpcworbGljZW5zZToKKworIyBDb3B5cmlnaHQgKGMpIDE5OTgsIDE5OTkgRGF2ZS4KKyMKKyMgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisjIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworIyBhcmUgbWV0OgorIyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorIyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisjIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisjICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyMgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyMgMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgYXV0aG9ycyBub3IgdGhlIG5hbWVzIG9mIHRoZWlyIGNvbnRyaWJ1dG9ycworIyAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyMgICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisjCisjIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUlMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisjIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorIyBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorIyBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyMgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyMgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisjIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisjIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyMgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorIyBTVUNIIERBTUFHRS4KKworVGhlIGZvbGxvd2luZyBmaWxlcyBkbyBub3QgYWxsb3cgZm9yIGNvbW1lcmNpYWwgcmVkaXN0cmlidXRpb246CisJbXVzYS8qCisJeno4MC5jCisJejgwc3RiLmgKKwl6ODBzdGJkLmgKKworVGhlIGNvbnRlbnRzIG9mIHRoZSBzdGFyLyBkaXJlY3RvcnkgYXJlIGNvcHlyaWdodCBOZWlsIENvcmxldHQsIHVuZGVyIGEgbGljZW5zZQorZGVzY3JpYmVkIGluIHN0YXIvc3RhcmRvYy50eHQuCisKK1RoZSBjb250ZW50cyBvZiB0aGUgbXo4MC8gZGlyZWN0b3J5IGFyZSBjb3B5cmlnaHQgTmVpbCBCcmFkbHksIHVuZGVyIGEgbGljZW5zZQorZGVzY3JpYmVkIGluIG16ODAvbXo4MC50eHQuCisKK09wZW4tc291cmNlIHJlcGxhY2VtZW50cyBmb3IgdGhlIGFib3ZlIG1vZHVsZXMgd291bGQgYmUgYXBwcmVjaWF0ZWQsIGlmIHlvdQoraGF2ZSB0aGUgdGltZSBhbmQgYWJpbGl0eS4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL2Rpc3RyaWJ1dGVkLm5ldCBiL2xpY2Vuc2VzL2Rpc3RyaWJ1dGVkLm5ldApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTE0ZWNhCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvZGlzdHJpYnV0ZWQubmV0CkBAIC0wLDAgKzEsMTAgQEAKK2Rpc3RyaWJ1dGVkLm5ldCBkb2VzIG5vdCBjb25kb25lIHRoZSB1bmF1dGhvcml6ZWQgdXNlIG9mIGl0cyBzb2Z0d2FyZSBvbiBhbnkgY29tcHV0ZXIgc3lzdGVtLiAKK1lvdSBtYXkgbm90IHJ1biBhbnkgZGlzdHJpYnV0ZWQubmV0IHNvZnR3YXJlIG9uIGEgc3lzdGVtIHVubGVzcyB5b3Ugb3duIHRoZSBzeXN0ZW0gb3IgaGF2ZSAKK3JlY2VpdmVkIHBlcm1pc3Npb24gZnJvbSB0aGUgb3duZXIgdG8gcnVuIGRpc3RyaWJ1dGVkLm5ldCBzb2Z0d2FyZS4gUnVubmluZyB0aGUgY2xpZW50IG9uIAorYSBtYWNoaW5lIHdpdGhvdXQgYXV0aG9yaXphdGlvbiB3aWxsIHJlc3VsdCBpbiB5b3VyIHJlbW92YWwgZnJvbSB0aGUgcHJvamVjdCBhbmQgd2lsbCAKK2Rpc3F1YWxpZnkgeW91IGZyb20gd2lubmluZy4KKworQnkgcnVubmluZyBhIGNsaWVudCBhbmQgc3VibWl0dGluZyBibG9ja3MgY3JlZGl0ZWQgdG8geW91ciBlbWFpbCBhZGRyZXNzLCB5b3UgZ2l2ZSAKK2Rpc3RyaWJ1dGVkLm5ldCB0aGUgcmlnaHQgdG8gcG9zdCB5b3VyIGVtYWlsIGFkZHJlc3Mgb24gaXRzIHN0YXRpc3RpY3MgcGFnZXMuIAorZGlzdHJpYnV0ZWQubmV0IHdpbGwgbmV2ZXIgaW50ZW50aW9uYWxseSByZWxlYXNlIGVtYWlsIGFkZHJlc3NlcyBpbiBhbnkgb3RoZXIgCitmYXNoaW9uIHdpdGhvdXQgdGhlIGFkZHJlc3Mgb3duZXIncyBjb25zZW50LiAKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL2RvY2Jvb2sgYi9saWNlbnNlcy9kb2Nib29rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExZTQ3ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9kb2Nib29rCkBAIC0wLDAgKzEsMTggQEAKKzxjb3B5cmlnaHQgbm90aWNlPgorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5IGFuZCBkaXN0cmlidXRlIHRoZSA8bmFtZSBvZiBEVEQ+CithbmQgaXRzIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBhbmQgd2l0aG91dCBmZWUKK2lzIGhlcmVieSBncmFudGVkIGluIHBlcnBldHVpdHksIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodAorbm90aWNlIGFuZCB0aGlzIHBhcmFncmFwaCBhcHBlYXIgaW4gYWxsIGNvcGllcy4gIFRoZSBjb3B5cmlnaHQKK2hvbGRlcnMgbWFrZSBubyByZXByZXNlbnRhdGlvbiBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhlIERURCBmb3IKK2FueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3NlZCBvciBpbXBsaWVkCit3YXJyYW50eS4KKworSWYgeW91IG1vZGlmeSB0aGUgPG5hbWUgb2YgRFREPiBpbiBhbnkgd2F5LCBleGNlcHQgZm9yIGRlY2xhcmluZworYW5kIHJlZmVyZW5jaW5nIGFkZGl0aW9uYWwgc2V0cyBvZiBnZW5lcmFsIGVudGl0aWVzIGFuZCBkZWNsYXJpbmcKK2FkZGl0aW9uYWwgbm90YXRpb25zLCBsYWJlbCB5b3VyIERURCBhcyBhIHZhcmlhbnQgb2YgRG9jQm9vay4gIFNlZQordGhlIG1haW50ZW5hbmNlIGRvY3VtZW50YXRpb24gZm9yIG1vcmUgaW5mb3JtYXRpb24uCisKK1BsZWFzZSBkaXJlY3QgYWxsIHF1ZXN0aW9ucywgYnVnIHJlcG9ydHMsIG9yIHN1Z2dlc3Rpb25zIGZvcgorY2hhbmdlcyB0byB0aGUgZG9jYm9va0BsaXN0cy5vYXNpcy1vcGVuLm9yZyBtYWlsaW5nIGxpc3QuIEZvciBtb3JlCitpbmZvcm1hdGlvbiwgc2VlIGh0dHA6Ly93d3cub2FzaXMtb3Blbi5vcmcvZG9jYm9vay8uCmRpZmYgLS1naXQgYS9saWNlbnNlcy9kb200aiBiL2xpY2Vuc2VzL2RvbTRqCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjYWUwNTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9kb200agpAQCAtMCwwICsxLDQwIEBACitDb3B5cmlnaHQgMjAwMS0yMDA1IChDKSBNZXRhU3R1ZmYsIEx0ZC4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24KKygiU29mdHdhcmUiKSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZAordGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIGNvcHlyaWdodAorICAgc3RhdGVtZW50cyBhbmQgbm90aWNlcy4gIFJlZGlzdHJpYnV0aW9ucyBtdXN0IGFsc28gY29udGFpbiBhCisgICBjb3B5IG9mIHRoaXMgZG9jdW1lbnQuCisgCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlCisgICBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlCisgICBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIKKyAgIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgCiszLiBUaGUgbmFtZSAiRE9NNEoiIG11c3Qgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCisgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBTb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAgIHBlcm1pc3Npb24gb2YgTWV0YVN0dWZmLCBMdGQuICBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLAorICAgcGxlYXNlIGNvbnRhY3QgZG9tNGotaW5mb0BtZXRhc3R1ZmYuY29tLgorIAorNC4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgU29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkRPTTRKIgorICAgbm9yIG1heSAiRE9NNEoiIGFwcGVhciBpbiB0aGVpciBuYW1lcyB3aXRob3V0IHByaW9yIHdyaXR0ZW4KKyAgIHBlcm1pc3Npb24gb2YgTWV0YVN0dWZmLCBMdGQuIERPTTRKIGlzIGEgcmVnaXN0ZXJlZAorICAgdHJhZGVtYXJrIG9mIE1ldGFTdHVmZiwgTHRkLgorIAorNS4gRHVlIGNyZWRpdCBzaG91bGQgYmUgZ2l2ZW4gdG8gdGhlIERPTTRKIFByb2plY3QgLSAKKyAgIGh0dHA6Ly93d3cuZG9tNGoub3JnCisgCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIE1FVEFTVFVGRiwgTFRELiBBTkQgQ09OVFJJQlVUT1JTCitgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVAorTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTAorTUVUQVNUVUZGLCBMVEQuIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKK1NFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAorU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRAorT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvZHJhc2N1bGEgYi9saWNlbnNlcy9kcmFzY3VsYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDI5ZjkzCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvZHJhc2N1bGEKQEAgLTAsMCArMSwzNSBAQAorRFJBU0NVTEEgYWRhcHRhdGlvbiBmb3IgU0NVTU1WTS4KKworUHJlYW1ibGU6CisgIEJhc2ljYWxseSwgZ2l2ZSB0aGlzIGdhbWUgYXdheSwgc2hhcmUgaXQgd2l0aCB5b3VyIGZyaWVuZHMuIERvbid0IHJlbW92ZSB0aGlzCitSZWFkbWUsIG9yIHByZXRlbmQgdGhhdCB5b3Ugd3JvdGUgaXQuIFlvdSBjYW4gaW5jbHVkZSBpdCBpbiBhIHNvZnR3YXJlCitjb2xsZWN0aW9uLCBsaWtlIGEgTGludXggZGlzdHJpYnV0aW9uIG9yIGNvdmVyZGlzayAod2hpY2ggbWF5IGJlIHNvbGQpLCBidXQKK3VzaW5nIGl0IGluIHRoaW5ncyBsaWtlIGNvbW1lcmNpYWwgYWR2ZW50dXJlIGdhbWUgY29sbGVjdGlvbnMgd2l0aG91dCBhc2tpbmcgaXMKK2p1c3QgcGxheWluZyBkaXJ0eS4gWW91IGNhbiBtb2RpZnkgdGhlIGdhbWVkYXRhIGZvciBzdWNoIHB1cnBvc2VzIGFzIGNvbXByZXNzaW5nCithdWRpby4gVGhpcyBwcmVhbWJsZSBpcyBub3QgbGVnYWxseSBiaW5kaW5nLCBidXQgaXMgdG8gY2xhcmlmeSB0aGUgaW50ZW50IG9mCit0aGUgZm9sbG93aW5nIGxpY2VuY2UuCisKK0xpY2VuY2U6CisgMSkgWW91IG1heSBkaXN0cmlidXRlICJEUkFTQ1VMQSIgZm9yIGZyZWUgb24gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhpcyBSZWFkbWUKK2FuZCBhbGwgYXNzb2NpYXRlZCBjb3B5cmlnaHQgbm90aWNlcyBhbmQgZGlzY2xhaW1lcnMgYXJlIGxlZnQgaW50YWN0LgorCisgMikgWW91IG1heSBjaGFyZ2UgYSByZWFzb25hYmxlIGNvcHlpbmcgZmVlIGZvciB0aGlzIGFyY2hpdmUsIGFuZCBtYXkKK2Rpc3RyaWJ1dGUgaXQgaW4gYWdncmVnYXRlIGFzIHBhcnQgb2YgYSBsYXJnZXIgYW5kIHBvc3NpYmx5IGNvbW1lcmNpYWwgc29mdHdhcmUKK2Rpc3RyaWJ1dGlvbiAoc3VjaCBhcyBhIExpbnV4IGRpc3RyaWJ1dGlvbiBvciBtYWdhemluZSBjb3ZlcmRpc2spLiBZb3UgbXVzdAorcHJvdmlkZSBwcm9wZXIgYXR0cmlidXRpb24gYW5kIGVuc3VyZSB0aGF0IHRoaXMgUmVhZG1lIGFuZCBhbGwgYXNzb2NpYXRlZAorY29weXJpZ2h0IG5vdGljZXMgYW5kIGRpc2NsYWltZXJzIGFyZSBsZWZ0IGludGFjdC4KKworIDMpIFlvdSBtYXkgbm90IGNoYXJnZSBhIGZlZSBmb3IgdGhlIGdhbWUgaXRzZWxmLiBUaGlzIGluY2x1ZGVzIHJlc2VsbGluZyB0aGUKK2dhbWUgYXMgYW4gaW5kaXZpZHVhbCBpdGVtLgorCisgNCkgWW91IG1heSBtb2RpZnkgdGhlIGdhbWUgYXMgeW91IHdpc2guICBZb3UgbWF5IGFsc28gZGlzdHJpYnV0ZSBtb2RpZmllZAordmVyc2lvbnMgdW5kZXIgdGhlIHRlcm1zIHNldCBmb3J0aCBpbiB0aGlzIGxpY2VuY2UsIGJ1dCB3aXRoIHRoZSBhZGRpdGlvbmFsCityZXF1aXJlbWVudCB0aGF0IHRoZSB3b3JrIGlzIG1hcmtlZCB3aXRoIGEgcHJvbWluZW50IG5vdGljZSB3aGljaCBzdGF0ZXMgdGhhdAoraXQgaXMgYSBtb2RpZmllZCB2ZXJzaW9uLgorCisgNSkgQWxsIGdhbWUgY29udGVudCBpcyBDb3B5cmlnaHQgKEMpIEFsY2FjaG9mYSBTb2Z0IFMuTC4KKyAgICBUaGUgU2N1bW1WTSBlbmdpbmUgaXMgQ29weXJpZ2h0IChDKSBUaGUgU2N1bW1WTSBUZWFtICh3d3cuc2N1bW12bS5vcmcpLgorCisgNikgVEhFIEdBTUUgREFUQSBJTiBUSElTIEFSQ0hJVkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcgQU5EIE5PVCBMSU1JVEVEIFRPIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKK01FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9kcm9wYm94IGIvbGljZW5zZXMvZHJvcGJveApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Yzg1YTViCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvZHJvcGJveApAQCAtMCwwICsxLDY0IEBACitEcm9wYm94IFRlcm1zIG9mIFNlcnZpY2UKK1RoYW5rIHlvdSBmb3IgdXNpbmcgRHJvcGJveCEgVGhlc2UgdGVybXMgb2Ygc2VydmljZSAodGhlIOKAnFRlcm1z4oCdKSBnb3Zlcm4geW91ciBhY2Nlc3MgdG8gYW5kIHVzZSBvZiBEcm9wYm94ICjigJx3ZeKAnSBvciDigJxvdXLigJ0pIHdlYnNpdGVzIGFuZCBzZXJ2aWNlcyAodGhlIOKAnFNlcnZpY2Vz4oCdKSwgc28gcGxlYXNlIGNhcmVmdWxseSByZWFkIHRoZW0gYmVmb3JlIHVzaW5nIHRoZSBTZXJ2aWNlcy4KKworQnkgdXNpbmcgdGhlIFNlcnZpY2VzIHlvdSBhZ3JlZSB0byBiZSBib3VuZCBieSB0aGVzZSBUZXJtcy4gSWYgeW91IGFyZSB1c2luZyB0aGUgU2VydmljZXMgb24gYmVoYWxmIG9mIGFuIG9yZ2FuaXphdGlvbiwgeW91IGFyZSBhZ3JlZWluZyB0byB0aGVzZSBUZXJtcyBmb3IgdGhhdCBvcmdhbml6YXRpb24gYW5kIHByb21pc2luZyB0aGF0IHlvdSBoYXZlIHRoZSBhdXRob3JpdHkgdG8gYmluZCB0aGF0IG9yZ2FuaXphdGlvbiB0byB0aGVzZSB0ZXJtcy4gSW4gdGhhdCBjYXNlLCDigJx5b3XigJ0gYW5kIOKAnHlvdXLigJ0gd2lsbCByZWZlciB0byB0aGF0IG9yZ2FuaXphdGlvbi4KKworWW91IG1heSB1c2UgdGhlIFNlcnZpY2VzIG9ubHkgaW4gY29tcGxpYW5jZSB3aXRoIHRoZXNlIFRlcm1zLiBZb3UgbWF5IHVzZSB0aGUgU2VydmljZXMgb25seSBpZiB5b3UgaGF2ZSB0aGUgcG93ZXIgdG8gZm9ybSBhIGNvbnRyYWN0IHdpdGggRHJvcGJveCBhbmQgYXJlIG5vdCBiYXJyZWQgdW5kZXIgYW55IGFwcGxpY2FibGUgbGF3cyBmcm9tIGRvaW5nIHNvLiBUaGUgU2VydmljZXMgbWF5IGNvbnRpbnVlIHRvIGNoYW5nZSBvdmVyIHRpbWUgYXMgd2UgcmVmaW5lIGFuZCBhZGQgbW9yZSBmZWF0dXJlcy4gV2UgbWF5IHN0b3AsIHN1c3BlbmQsIG9yIG1vZGlmeSB0aGUgU2VydmljZXMgYXQgYW55IHRpbWUgd2l0aG91dCBwcmlvciBub3RpY2UgdG8geW91LiBXZSBtYXkgYWxzbyByZW1vdmUgYW55IGNvbnRlbnQgZnJvbSBvdXIgU2VydmljZXMgYXQgb3VyIGRpc2NyZXRpb24uCisKK1lvdXIgU3R1ZmYgJiBZb3VyIFByaXZhY3kKK0J5IHVzaW5nIG91ciBTZXJ2aWNlcyB5b3UgbWF5IGdpdmUgdXMgYWNjZXNzIHRvIHlvdXIgaW5mb3JtYXRpb24sIGZpbGVzLCBhbmQgZm9sZGVycyAodG9nZXRoZXIsIOKAnHlvdXIgc3R1ZmbigJ0pLiBZb3UgcmV0YWluIG93bmVyc2hpcCB0byB5b3VyIHN0dWZmLiBZb3UgYXJlIGFsc28gc29sZWx5IHJlc3BvbnNpYmxlIGZvciB5b3VyIGNvbmR1Y3QsIHRoZSBjb250ZW50IG9mIHlvdXIgZmlsZXMgYW5kIGZvbGRlcnMsIGFuZCB5b3VyIGNvbW11bmljYXRpb25zIHdpdGggb3RoZXJzIHdoaWxlIHVzaW5nIHRoZSBTZXJ2aWNlcy4KKworV2Ugc29tZXRpbWVzIG5lZWQgeW91ciBwZXJtaXNzaW9uIHRvIGRvIHdoYXQgeW91IGFzayB1cyB0byBkbyB3aXRoIHlvdXIgc3R1ZmYgKGZvciBleGFtcGxlLCBob3N0aW5nLCBtYWtpbmcgcHVibGljLCBvciBzaGFyaW5nIHlvdXIgZmlsZXMpLiBCeSBzdWJtaXR0aW5nIHlvdXIgc3R1ZmYgdG8gdGhlIFNlcnZpY2VzLCB5b3UgZ3JhbnQgdXMgKGFuZCB0aG9zZSB3ZSB3b3JrIHdpdGggdG8gcHJvdmlkZSB0aGUgU2VydmljZXMpIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgcm95YWx0eS1mcmVlLCBzdWJsaWNlbnNlYWJsZSByaWdodHMgdG8gdXNlLCBjb3B5LCBkaXN0cmlidXRlLCBwcmVwYXJlIGRlcml2YXRpdmUgd29ya3MgKHN1Y2ggYXMgdHJhbnNsYXRpb25zIG9yIGZvcm1hdCBjb252ZXJzaW9ucykgb2YsIHBlcmZvcm0sIG9yIHB1YmxpY2x5IGRpc3BsYXkgdGhhdCBzdHVmZiB0byB0aGUgZXh0ZW50IHdlIHRoaW5rIGl0IG5lY2Vzc2FyeSBmb3IgdGhlIFNlcnZpY2UuIFlvdSBtdXN0IGVuc3VyZSB5b3UgaGF2ZSB0aGUgcmlnaHRzIHlvdSBuZWVkIHRvIGdyYW50IHVzIHRoYXQgcGVybWlzc2lvbi4KKworSG93IHdlIHVzZSB5b3VyIHN0dWZmIGlzIGFsc28gZ292ZXJuZWQgYnkgdGhlIERyb3Bib3ggUHJpdmFjeSBQb2xpY3ksIHdoaWNoIHlvdSBhY2tub3dsZWRnZS4gWW91IGFja25vd2xlZGdlIHRoYXQgRHJvcGJveCBoYXMgbm8gb2JsaWdhdGlvbiB0byBtb25pdG9yIGFueSBpbmZvcm1hdGlvbiBvbiB0aGUgU2VydmljZXMsIGV2ZW4gdGhvdWdoIHdlIG1heSBkbyBzby4gV2UgYXJlIG5vdCByZXNwb25zaWJsZSBmb3IgdGhlIGFjY3VyYWN5LCBjb21wbGV0ZW5lc3MsIGFwcHJvcHJpYXRlbmVzcywgb3IgbGVnYWxpdHkgb2YgZmlsZXMsIHVzZXIgcG9zdHMsIG9yIGFueSBvdGhlciBpbmZvcm1hdGlvbiB5b3UgbWF5IGJlIGFibGUgdG8gYWNjZXNzIHVzaW5nIHRoZSBTZXJ2aWNlcy4gV2UgbWF5IGRpc2Nsb3NlIGluZm9ybWF0aW9uIGFib3V0IHlvdXIgYWNjb3VudCBvciB5b3VyIHN0dWZmIHRvIGxhdyBlbmZvcmNlbWVudCBvZmZpY2lhbHMgYXMgb3V0bGluZWQgaW4gb3VyIFByaXZhY3kgUG9saWN5LgorCitTaGFyaW5nIFlvdXIgU3R1ZmYKK1RoZSBTZXJ2aWNlcyBwcm92aWRlIGZlYXR1cmVzIHRoYXQgYWxsb3cgeW91IHRvIHNoYXJlIHlvdXIgc3R1ZmYgd2l0aCBvdGhlcnMgb3IgdG8gbWFrZSBpdCBwdWJsaWMuIFRoZXJlIGFyZSBtYW55IHRoaW5ncyB0aGF0IHVzZXJzIG1heSBkbyB3aXRoIHRoYXQgc3R1ZmYgKGZvciBleGFtcGxlLCBjb3B5IGl0LCBtb2RpZnkgaXQsIHJlLXNoYXJlIGl0KS4gUGxlYXNlIGNvbnNpZGVyIGNhcmVmdWxseSB3aGF0IHlvdSBjaG9vc2UgdG8gc2hhcmUgb3IgbWFrZSBwdWJsaWMuIERyb3Bib3ggaGFzIG5vIHJlc3BvbnNpYmlsaXR5IGZvciB0aGF0IGFjdGl2aXR5LgorCitZb3VyIFJlc3BvbnNpYmlsaXRpZXMKK0ZpbGVzIGFuZCBvdGhlciBjb250ZW50IGluIHRoZSBTZXJ2aWNlcyBtYXkgYmUgcHJvdGVjdGVkIGJ5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb2Ygb3RoZXJzLiBQbGVhc2UgZG8gbm90IGNvcHksIHVwbG9hZCwgZG93bmxvYWQsIG9yIHNoYXJlIGZpbGVzIHVubGVzcyB5b3UgaGF2ZSB0aGUgcmlnaHQgdG8gZG8gc28uIFlvdSwgbm90IERyb3Bib3gsIHdpbGwgYmUgZnVsbHkgcmVzcG9uc2libGUgYW5kIGxpYWJsZSBmb3Igd2hhdCB5b3UgY29weSwgc2hhcmUsIHVwbG9hZCwgZG93bmxvYWQgb3Igb3RoZXJ3aXNlIHVzZSB3aGlsZSB1c2luZyB0aGUgU2VydmljZXMuIFlvdSBtdXN0IG5vdCB1cGxvYWQgc3B5d2FyZSBvciBhbnkgb3RoZXIgbWFsaWNpb3VzIHNvZnR3YXJlIHRvIHRoZSBTZXJ2aWNlLgorCitZb3UsIGFuZCBub3QgRHJvcGJveCwgYXJlIHJlc3BvbnNpYmxlIGZvciBtYWludGFpbmluZyBhbmQgcHJvdGVjdGluZyBhbGwgb2YgeW91ciBzdHVmZi4gRHJvcGJveCB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSBsb3NzIG9yIGNvcnJ1cHRpb24gb2YgeW91ciBzdHVmZiwgb3IgZm9yIGFueSBjb3N0cyBvciBleHBlbnNlcyBhc3NvY2lhdGVkIHdpdGggYmFja2luZyB1cCBvciByZXN0b3JpbmcgYW55IG9mIHlvdXIgc3R1ZmYuCisKK0lmIHlvdXIgY29udGFjdCBpbmZvcm1hdGlvbiwgb3Igb3RoZXIgaW5mb3JtYXRpb24gcmVsYXRlZCB0byB5b3VyIGFjY291bnQsIGNoYW5nZXMsIHlvdSBtdXN0IG5vdGlmeSB1cyBwcm9tcHRseSBhbmQga2VlcCB5b3VyIGluZm9ybWF0aW9uIGN1cnJlbnQuIFRoZSBTZXJ2aWNlcyBhcmUgbm90IGludGVuZGVkIGZvciB1c2UgYnkgeW91IGlmIHlvdSBhcmUgdW5kZXIgMTMgeWVhcnMgb2YgYWdlLiBCeSBhZ3JlZWluZyB0byB0aGVzZSBUZXJtcywgeW91IGFyZSByZXByZXNlbnRpbmcgdG8gdXMgdGhhdCB5b3UgYXJlIG92ZXIgMTMuCisKK0FjY291bnQgU2VjdXJpdHkKK1lvdSBhcmUgcmVzcG9uc2libGUgZm9yIHNhZmVndWFyZGluZyB0aGUgcGFzc3dvcmQgdGhhdCB5b3UgdXNlIHRvIGFjY2VzcyB0aGUgU2VydmljZXMgYW5kIHlvdSBhZ3JlZSBub3QgdG8gZGlzY2xvc2UgeW91ciBwYXNzd29yZCB0byBhbnkgdGhpcmQgcGFydHkuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIGFueSBhY3Rpdml0eSB1c2luZyB5b3VyIGFjY291bnQsIHdoZXRoZXIgb3Igbm90IHlvdSBhdXRob3JpemVkIHRoYXQgYWN0aXZpdHkuIFlvdSBzaG91bGQgaW1tZWRpYXRlbHkgbm90aWZ5IERyb3Bib3ggb2YgYW55IHVuYXV0aG9yaXplZCB1c2Ugb2YgeW91ciBhY2NvdW50LiBZb3UgYWNrbm93bGVkZ2UgdGhhdCBpZiB5b3Ugd2lzaCB0byBwcm90ZWN0IHlvdXIgdHJhbnNtaXNzaW9uIG9mIGRhdGEgb3IgZmlsZXMgdG8gRHJvcGJveCwgaXQgaXMgeW91ciByZXNwb25zaWJpbGl0eSB0byB1c2UgYSBzZWN1cmUgZW5jcnlwdGVkIGNvbm5lY3Rpb24gdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgU2VydmljZXMuCisKK1NvZnR3YXJlIGFuZCBVcGRhdGVzCitTb21lIHVzZSBvZiBvdXIgU2VydmljZSByZXF1aXJlcyB5b3UgdG8gZG93bmxvYWQgYSBjbGllbnQgc29mdHdhcmUgcGFja2FnZSAo4oCcU29mdHdhcmXigJ0pLiBEcm9wYm94IGhlcmVieSBncmFudHMgeW91IGEgbGltaXRlZCwgbm9uZXhjbHVzaXZlLCBub250cmFuc2ZlcmFibGUsIHJldm9jYWJsZSBsaWNlbnNlIHRvIHVzZSB0aGUgU29mdHdhcmUsIHNvbGVseSB0byBhY2Nlc3MgdGhlIFNlcnZpY2VzLiBZb3VyIGxpY2Vuc2UgdG8gdXNlIHRoZSBTb2Z0d2FyZSBpcyBhdXRvbWF0aWNhbGx5IHJldm9rZWQgaWYgeW91IHZpb2xhdGUgdGhlc2UgVGVybXMgaW4gYSBtYW5uZXIgdGhhdCBpbXBsaWNhdGVzIG91ciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzLiBXZSBoZXJlYnkgcmVzZXJ2ZSBhbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCBpbiB0aGVzZSBUZXJtcy4gWW91IG11c3Qgbm90IHJldmVyc2UgZW5naW5lZXIgb3IgZGVjb21waWxlIHRoZSBTb2Z0d2FyZSwgbm9yIGF0dGVtcHQgdG8gZG8gc28sIG5vciBhc3Npc3QgYW55b25lIGVsc2UgdG8gZG8gc28uIE91ciBTZXJ2aWNlcyBtYXkgdXBkYXRlIHRoZSBTb2Z0d2FyZSBvbiB5b3VyIGRldmljZSBhdXRvbWF0aWNhbGx5IHdoZW4gYSBuZXcgdmVyc2lvbiBpcyBhdmFpbGFibGUuIE91ciBwYXVzZSBzeW5jaW5nIGZlYXR1cmUgcGF1c2VzIHN5bmNpbmcgb2YgeW91ciBmaWxlcywgYnV0IG1heSBub3QgY2Vhc2UgYWxsIGRhdGEgdHJhbnNmZXIsIHNvIHlvdSBzaG91bGQgZXhpdCB0aGUgZGVza3RvcCBjbGllbnQgaWYgeW914oCZZCBsaWtlIHRvIHN0b3AgZGF0YSB0cmFuc2Zlci4KKworRHJvcGJveCBQcm9wZXJ0eSBhbmQgRmVlZGJhY2sKK1RoZXNlIHRlcm1zIGRvIG5vdCBncmFudCB5b3UgYW55IHJpZ2h0LCB0aXRsZSwgb3IgaW50ZXJlc3QgaW4gdGhlIFNlcnZpY2VzLCBTb2Z0d2FyZSwgb3IgdGhlIGNvbnRlbnQgaW4gdGhlIFNlcnZpY2VzLiBXaGlsZSB3ZSBhcHByZWNpYXRlIGl0IHdoZW4gdXNlcnMgc2VuZCB1cyBmZWVkYmFjaywgcGxlYXNlIGJlIGF3YXJlIHRoYXQgd2UgbWF5IHVzZSBhbnkgZmVlZGJhY2ssIGNvbW1lbnRzLCBvciBzdWdnZXN0aW9ucyB5b3Ugc2VuZCB1cyBvciBwb3N0IGluIG91ciBmb3J1bXMgd2l0aG91dCBhbnkgb2JsaWdhdGlvbiB0byB5b3UuIFRoZSBTb2Z0d2FyZSBhbmQgb3RoZXIgdGVjaG5vbG9neSB3ZSB1c2UgdG8gcHJvdmlkZSB0aGUgU2VydmljZXMgYXJlIHByb3RlY3RlZCBieSBjb3B5cmlnaHQsIHRyYWRlbWFyaywgYW5kIG90aGVyIGxhd3Mgb2YgYm90aCB0aGUgVW5pdGVkIFN0YXRlcyBhbmQgZm9yZWlnbiBjb3VudHJpZXMuIFRoZXNlIFRlcm1zIGRvIG5vdCBncmFudCB5b3UgYW55IHJpZ2h0cyB0byB1c2UgdGhlIERyb3Bib3ggdHJhZGVtYXJrcywgbG9nb3MsIGRvbWFpbiBuYW1lcywgb3Igb3RoZXIgYnJhbmQgZmVhdHVyZXMuCisKK0FjY2VwdGFibGUgVXNlIFBvbGljeQorWW91IHdpbGwgbm90LCBhbmQgd2lsbCBub3QgdG8gYXR0ZW1wdCB0bywgbWlzdXNlIHRoZSBTZXJ2aWNlcywgYW5kIHdpbGwgdXNlIHRoZSBTZXJ2aWNlcyBvbmx5IGluIGEgbWFubmVyIGNvbnNpc3RlbnQgd2l0aCB0aGUgRHJvcGJveCBBY2NlcHRhYmxlIFVzZSBQb2xpY3kuCisKK0NvcHlyaWdodAorRHJvcGJveCByZXNwZWN0cyBvdGhlcnPigJkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGFuZCBhc2tzIHRoYXQgeW91IGRvIHRvby4gV2Ugd2lsbCByZXNwb25kIHRvIG5vdGljZXMgb2YgYWxsZWdlZCBjb3B5cmlnaHQgaW5mcmluZ2VtZW50IGlmIHRoZXkgY29tcGx5IHdpdGggdGhlIGxhdyBhbmQgYXJlIHByb3Blcmx5IHByb3ZpZGVkIHRvIHVzLiBTdWNoIG5vdGljZXMgc2hvdWxkIGJlIHJlcG9ydGVkIHVzaW5nIG91ciBETUNBIFByb2Nlc3MuIFdlIHJlc2VydmUgdGhlIHJpZ2h0IHRvIGRlbGV0ZSBvciBkaXNhYmxlIGNvbnRlbnQgYWxsZWdlZCB0byBiZSBpbmZyaW5naW5nIGFuZCB0byB0ZXJtaW5hdGUgcmVwZWF0IGluZnJpbmdlcnMuIE91ciBkZXNpZ25hdGVkIGFnZW50IGZvciBub3RpY2Ugb2YgYWxsZWdlZCBjb3B5cmlnaHQgaW5mcmluZ2VtZW50IG9uIHRoZSBTZXJ2aWNlcyBpczoKKworQ29weXJpZ2h0IEFnZW50CitEcm9wYm94IEluYy4KKzc2MCBNYXJrZXQgU3RyZWV0ICMxMTUwCitTYW4gRnJhbmNpc2NvLCBDQSA5NDEwMgorY29weXJpZ2h0QGRyb3Bib3guY29tCitPdGhlciBDb250ZW50CitUaGUgU2VydmljZXMgbWF5IGNvbnRhaW4gbGlua3MgdG8gdGhpcmQtcGFydHkgd2Vic2l0ZXMgb3IgcmVzb3VyY2VzLiBEcm9wYm94IGRvZXMgbm90IGVuZG9yc2UgYW5kIGlzIG5vdCByZXNwb25zaWJsZSBvciBsaWFibGUgZm9yIHRoZWlyIGF2YWlsYWJpbGl0eSwgYWNjdXJhY3ksIHRoZSByZWxhdGVkIGNvbnRlbnQsIHByb2R1Y3RzLCBvciBzZXJ2aWNlcy4gWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIHlvdXIgdXNlIG9mIGFueSBzdWNoIHdlYnNpdGVzIG9yIHJlc291cmNlcy4gQWxzbywgaWYgd2UgcHJvdmlkZSB5b3Ugd2l0aCBhbnkgc29mdHdhcmUgdW5kZXIgYW4gb3BlbiBzb3VyY2UgbGljZW5zZSwgdGhlcmUgbWF5IGJlIHByb3Zpc2lvbnMgaW4gdGhvc2UgbGljZW5zZXMgdGhhdCBleHByZXNzbHkgY29uZmxpY3Qgd2l0aCB0aGVzZSBUZXJtcywgaW4gd2hpY2ggY2FzZSB0aGUgb3BlbiBzb3VyY2UgcHJvdmlzaW9ucyB3aWxsIGFwcGx5LgorCitUZXJtaW5hdGlvbgorVGhvdWdoIHdl4oCZZCBtdWNoIHJhdGhlciB5b3Ugc3RheSwgeW91IGNhbiBzdG9wIHVzaW5nIG91ciBTZXJ2aWNlcyBhbnkgdGltZS4gV2UgcmVzZXJ2ZSB0aGUgcmlnaHQgdG8gc3VzcGVuZCBvciBlbmQgdGhlIFNlcnZpY2VzIGF0IGFueSB0aW1lLCB3aXRoIG9yIHdpdGhvdXQgY2F1c2UsIGFuZCB3aXRoIG9yIHdpdGhvdXQgbm90aWNlLiBGb3IgZXhhbXBsZSwgd2UgbWF5IHN1c3BlbmQgb3IgdGVybWluYXRlIHlvdXIgdXNlIGlmIHlvdSBhcmUgbm90IGNvbXBseWluZyB3aXRoIHRoZXNlIFRlcm1zLCBvciB1c2UgdGhlIFNlcnZpY2VzIGluIGFueSB3YXkgdGhhdCB3b3VsZCBjYXVzZSB1cyBsZWdhbCBsaWFiaWxpdHkgb3IgZGlzcnVwdCBvdGhlcnPigJkgdXNlIG9mIHRoZSBTZXJ2aWNlcy4gSWYgd2Ugc3VzcGVuZCBvciB0ZXJtaW5hdGUgeW91ciB1c2UsIHdlIHdpbGwgdHJ5IHRvIGxldCB5b3Uga25vdyBpbiBhZHZhbmNlIGFuZCBoZWxwIHlvdSByZXRyaWV2ZSBkYXRhLCB0aG91Z2ggdGhlcmUgbWF5IGJlIHNvbWUgY2FzZXMgKGZvciBleGFtcGxlLCByZXBlYXRlZGx5IG9yIGZsYWdyYW50bHkgdmlvbGF0aW5nIHRoZXNlIFRlcm1zLCBhIGNvdXJ0IG9yZGVyLCBvciBkYW5nZXIgdG8gb3RoZXIgdXNlcnMpIHdoZXJlIHdlIG1heSBzdXNwZW5kIGltbWVkaWF0ZWx5LgorCitEcm9wYm94IGlzIEF2YWlsYWJsZSDigJxBUy1JU+KAnQorVGhvdWdoIHdlIHdhbnQgdG8gcHJvdmlkZSBhIGdyZWF0IHNlcnZpY2UsIHRoZXJlIGFyZSBjZXJ0YWluIHRoaW5ncyBhYm91dCB0aGUgc2VydmljZSB3ZSBjYW7igJl0IHByb21pc2UuIEZvciBleGFtcGxlLCBUSEUgU0VSVklDRVMgQU5EIFNPRlRXQVJFIEFSRSBQUk9WSURFRCDigJxBUyBJU+KAnSwgQVQgWU9VUiBPV04gUklTSywgV0lUSE9VVCBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVFkgT1IgQ09ORElUSU9OIE9GIEFOWSBLSU5ELiBXRSBBTFNPIERJU0NMQUlNIEFOWSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdFTUVOVC4gKFdlIGFyZSBub3Qgc2hvdXRpbmctIGl04oCZcyBqdXN0IHRoYXQgdGhlc2UgZGlzY2xhaW1lcnMgYXJlIHJlYWxseSBpbXBvcnRhbnQsIHNvIHdlIHdhbnQgdG8gaGlnaGxpZ2h0IHRoZW0pLiBEcm9wYm94IHdpbGwgaGF2ZSBubyByZXNwb25zaWJpbGl0eSBmb3IgYW55IGhhcm0gdG8geW91ciBjb21wdXRlciBzeXN0ZW0sIGxvc3Mgb3IgY29ycnVwdGlvbiBvZiBkYXRhLCBvciBvdGhlciBoYXJtIHRoYXQgcmVzdWx0cyBmcm9tIHlvdXIgYWNjZXNzIHRvIG9yIHVzZSBvZiB0aGUgU2VydmljZXMgb3IgU29mdHdhcmUuIFNvbWUgc3RhdGVzIGRvIG5vdCBhbGxvdyB0aGUgdHlwZXMgb2YgZGlzY2xhaW1lcnMgaW4gdGhpcyBwYXJhZ3JhcGgsIHNvIHRoZXkgbWF5IG5vdCBhcHBseSB0byB5b3UuCisKK0xpbWl0YXRpb24gb2YgTGlhYmlsaXR5CitUTyBUSEUgRlVMTEVTVCBFWFRFTlQgUEVSTUlUVEVEIEJZIExBVywgSU4gTk8gRVZFTlQgV0lMTCBEUk9QQk9YLCBJVFMgQUZGSUxJQVRFUywgT0ZGSUNFUlMsIEVNUExPWUVFUywgQUdFTlRTLCBTVVBQTElFUlMgT1IgTElDRU5TT1JTIEJFIExJQUJMRSBGT1IgKEEpIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgUFVOSVRJVkUsIEVYRU1QTEFSWSBPUiBDT05TRVFVRU5USUFMIChJTkNMVURJTkcgTE9TUyBPRiBVU0UsIERBVEEsIEJVU0lORVNTLCBPUiBQUk9GSVRTKSBEQU1BR0VTLCBSRUdBUkRMRVNTIE9GIExFR0FMIFRIRU9SWSwgV0hFVEhFUiBPUiBOT1QgRFJPUEJPWCBIQVMgQkVFTiBXQVJORUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUywgQU5EIEVWRU4gSUYgQSBSRU1FRFkgRkFJTFMgT0YgSVRTIEVTU0VOVElBTCBQVVJQT1NFOyAoQikgQUdHUkVHQVRFIExJQUJJTElUWSBGT1IgQUxMIENMQUlNUyBSRUxBVElORyBUTyBUSEUgU0VSVklDRVMgTU9SRSBUSEFOIFRIRSBHUkVBVEVSIE9GICQyMCBPUiBUSEUgQU1PVU5UUyBQQUlEIEJZIFlPVSBUTyBEUk9QQk9YIEZPUiBUSEUgUEFTVCBUSFJFRSBNT05USFMgT0YgVEhFIFNFUlZJQ0VTIElOIFFVRVNUSU9OLiBTb21lIHN0YXRlcyBkbyBub3QgYWxsb3cgdGhlIHR5cGVzIG9mIGxpbWl0YXRpb25zIGluIHRoaXMgcGFyYWdyYXBoLCBzbyB0aGV5IG1heSBub3QgYXBwbHkgdG8geW91LgorCitFeHBvcnQgUmVzdHJpY3Rpb25zCitUaGUgZXhwb3J0IGFuZCByZS1leHBvcnQgb2YgdGhlIFNvZnR3YXJlIG1heSBiZSBjb250cm9sbGVkIGJ5IHRoZSBVbml0ZWQgU3RhdGVzIEV4cG9ydCBBZG1pbmlzdHJhdGlvbiBSZWd1bGF0aW9ucy4gVGhlIFNvZnR3YXJlIG1heSBub3QgYmUgdXNlZCBpbiBDdWJhOyBJcmFuOyBOb3J0aCBLb3JlYTsgU3VkYW47IG9yIFN5cmlhIG9yIGFueSBjb3VudHJ5IHRoYXQgaXMgc3ViamVjdCB0byBhbiBlbWJhcmdvIGJ5IHRoZSBVbml0ZWQgU3RhdGVzLiBJZiB5b3UgYXJlIGEgcmVzaWRlbnQgb3IgbmF0aW9uYWwgb2YsIG9yIGEgYnVzaW5lc3MgbG9jYXRlZCBpbiwgYW55IG9mIHRob3NlIGNvdW50cmllcywgeW91IG1heSBub3QgZG93bmxvYWQgb3IgdXNlIHRoZSBTb2Z0d2FyZS4gSW4gYWRkaXRpb24sIHRoZSBTb2Z0d2FyZSBtYXkgbm90IGJlIGRpc3RyaWJ1dGVkIHRvIHBlcnNvbnMgb24gdGhlIFRhYmxlIG9mIERlbmlhbCBPcmRlcnM7IHRoZSBFbnRpdHkgTGlzdDsgb3IgdGhlIExpc3Qgb2YgU3BlY2lhbGx5IERlc2lnbmF0ZWQgTmF0aW9uYWxzLgorCitNb2RpZmljYXRpb25zCitXZSBtYXkgcmV2aXNlIHRoZXNlIFRlcm1zIGZyb20gdGltZSB0byB0aW1lIGFuZCB0aGUgbW9zdCBjdXJyZW50IHZlcnNpb24gd2lsbCBhbHdheXMgYmUgcG9zdGVkIG9uIG91ciB3ZWJzaXRlLiBJZiBhIHJldmlzaW9uLCBpbiBvdXIgc29sZSBkaXNjcmV0aW9uLCBpcyBtYXRlcmlhbCB3ZSB3aWxsIG5vdGlmeSB5b3UgKGZvciBleGFtcGxlIHZpYSBlbWFpbCB0byB0aGUgZW1haWwgYWRkcmVzcyBhc3NvY2lhdGVkIHdpdGggeW91ciBhY2NvdW50KS4gT3RoZXIgY2hhbmdlcyBtYXkgYmUgcG9zdGVkIHRvIG91ciBibG9nIG9yIHRlcm1zIHBhZ2UsIHNvIHBsZWFzZSBjaGVjayB0aG9zZSBwYWdlcyByZWd1bGFybHkuIEJ5IGNvbnRpbnVpbmcgdG8gYWNjZXNzIG9yIHVzZSB0aGUgU2VydmljZXMgYWZ0ZXIgcmV2aXNpb25zIGJlY29tZSBlZmZlY3RpdmUsIHlvdSBhZ3JlZSB0byBiZSBib3VuZCBieSB0aGUgcmV2aXNlZCBUZXJtcy4gSWYgeW91IGRvIG5vdCBhZ3JlZSB0byB0aGUgbmV3IHRlcm1zLCBwbGVhc2Ugc3RvcCB1c2luZyB0aGUgU2VydmljZXMuCisKK01pc2NlbGxhbmVvdXMgTGVnYWwgVGVybXMKK1RIRVNFIFRFUk1TIEFORCBUSEUgVVNFIE9GIFRIRSBTRVJWSUNFUyBBTkQgU09GVFdBUkUgV0lMTCBCRSBHT1ZFUk5FRCBCWSBDQUxJRk9STklBIExBVyBFWENFUFQgRk9SIElUUyBDT05GTElDVFMgT0YgTEFXUyBQUklOQ0lQTEVTLiBBTEwgQ0xBSU1TIEFSSVNJTkcgT1VUIE9GIE9SIFJFTEFUSU5HIFRPIFRIRVNFIFRFUk1TIE9SIFRIRSBTRVJWSUNFUyBPUiBTT0ZUV0FSRSBNVVNUIEJFIExJVElHQVRFRCBFWENMVVNJVkVMWSBJTiBUSEUgRkVERVJBTCBPUiBTVEFURSBDT1VSVFMgT0YgU0FOIEZSQU5DSVNDTyBDT1VOVFksIENBTElGT1JOSUEsIEFORCBCT1RIIFBBUlRJRVMgQ09OU0VOVCBUTyBWRU5VRSBBTkQgUEVSU09OQUwgSlVSSVNESUNUSU9OIFRIRVJFLiBUaGVzZSBUZXJtcyBjb25zdGl0dXRlIHRoZSBlbnRpcmUgYW5kIGV4Y2x1c2l2ZSBhZ3JlZW1lbnQgYmV0d2VlbiB5b3UgYW5kIERyb3Bib3ggd2l0aCByZXNwZWN0IHRvIHRoZSBTZXJ2aWNlcywgYW5kIHN1cGVyc2VkZSBhbmQgcmVwbGFjZSBhbnkgb3RoZXIgYWdyZWVtZW50cywgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXBwbGljYWJsZSB0byB0aGUgU2VydmljZXMuIFRoZXNlIFRlcm1zIGNyZWF0ZSBubyB0aGlyZCBwYXJ0eSBiZW5lZmljaWFyeSByaWdodHMuIERyb3Bib3jigJlzIGZhaWx1cmUgdG8gZW5mb3JjZSBhIHByb3Zpc2lvbiBpcyBub3QgYSB3YWl2ZXIgb2YgaXRzIHJpZ2h0IHRvIGRvIHNvIGxhdGVyLiBJZiBhIHByb3Zpc2lvbiBpcyBmb3VuZCB1bmVuZm9yY2VhYmxlIHRoZSByZW1haW5pbmcgcHJvdmlzaW9ucyBvZiB0aGUgQWdyZWVtZW50IHdpbGwgcmVtYWluIGluIGZ1bGwgZWZmZWN0IGFuZCBhbiBlbmZvcmNlYWJsZSB0ZXJtIHdpbGwgYmUgc3Vic3RpdHV0ZWQgcmVmbGVjdGluZyBvdXIgaW50ZW50IGFzIGNsb3NlbHkgYXMgcG9zc2libGUuIFlvdSBtYXkgbm90IGFzc2lnbiBhbnkgb2YgeW91ciByaWdodHMgaW4gdGhlc2UgVGVybXMsIGFuZCBhbnkgc3VjaCBhdHRlbXB0IGlzIHZvaWQsIGJ1dCBEcm9wYm94IG1heSBhc3NpZ24gaXRzIHJpZ2h0cyB0byBhbnkgb2YgaXRzIGFmZmlsaWF0ZXMgb3Igc3Vic2lkaWFyaWVzLCBvciB0byBhbnkgc3VjY2Vzc29yIGluIGludGVyZXN0IG9mIGFueSBidXNpbmVzcyBhc3NvY2lhdGVkIHdpdGggdGhlIFNlcnZpY2VzLiBEcm9wYm94IGFuZCB5b3UgYXJlIG5vdCBsZWdhbCBwYXJ0bmVycyBvciBhZ2VudHM7IGluc3RlYWQsIG91ciByZWxhdGlvbnNoaXAgaXMgdGhhdCBvZiBpbmRlcGVuZGVudCBjb250cmFjdG9ycy4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL2R2aWJvb2sgYi9saWNlbnNlcy9kdmlib29rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NWM1ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9kdmlib29rCkBAIC0wLDAgKzEsNiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMTk4NywgMTk4OSBVbml2ZXJzaXR5IG9mIE1hcnlsYW5kCisgKiBEZXBhcnRtZW50IG9mIENvbXB1dGVyIFNjaWVuY2UuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogUGVybWlzc2lvbiB0byBjb3B5IGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZAorICogc28gbG9uZyBhcyB0aGlzIGNvcHlyaWdodCBub3RpY2UgcmVtYWlucyBpbnRhY3QuCisgKi8KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL2VHZW5peFB1YmxpYy0xLjEgYi9saWNlbnNlcy9lR2VuaXhQdWJsaWMtMS4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYjg3ODkKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9lR2VuaXhQdWJsaWMtMS4xCkBAIC0wLDAgKzEsMTA2IEBACitfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKworRUdFTklYLkNPTSBQVUJMSUMgTElDRU5TRSBBR1JFRU1FTlQgICAgICAgICAgICAgICAgICAgICAgICBWRVJTSU9OIDEuMS4wCitfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKworMS4gIEludHJvZHVjdGlvbgorCisgICAgVGhpcyAiTGljZW5zZSBBZ3JlZW1lbnQiIGlzIGJldHdlZW4gZUdlbml4LmNvbSBTb2Z0d2FyZSwgU2tpbGxzCisgICAgYW5kIFNlcnZpY2VzIEdtYkggKCJlR2VuaXguY29tIiksIGhhdmluZyBhbiBvZmZpY2UgYXQKKyAgICBQYXN0b3ItTG9laC1TdHIuIDQ4LCBELTQwNzY0IExhbmdlbmZlbGQsIEdlcm1hbnksIGFuZCB0aGUKKyAgICBJbmRpdmlkdWFsIG9yIE9yZ2FuaXphdGlvbiAoIkxpY2Vuc2VlIikgYWNjZXNzaW5nIGFuZCBvdGhlcndpc2UKKyAgICB1c2luZyB0aGlzIHNvZnR3YXJlIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybSBhbmQgaXRzIGFzc29jaWF0ZWQKKyAgICBkb2N1bWVudGF0aW9uICgidGhlIFNvZnR3YXJlIikuCisKKzIuICBMaWNlbnNlIAorCisgICAgU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBlR2VuaXguY29tIFB1YmxpYworICAgIExpY2Vuc2UgQWdyZWVtZW50LCBlR2VuaXguY29tIGhlcmVieSBncmFudHMgTGljZW5zZWUgYQorICAgIG5vbi1leGNsdXNpdmUsIHJveWFsdHktZnJlZSwgd29ybGQtd2lkZSBsaWNlbnNlIHRvIHJlcHJvZHVjZSwKKyAgICBhbmFseXplLCB0ZXN0LCBwZXJmb3JtIGFuZC9vciBkaXNwbGF5IHB1YmxpY2x5LCBwcmVwYXJlIGRlcml2YXRpdmUKKyAgICB3b3JrcywgZGlzdHJpYnV0ZSwgYW5kIG90aGVyd2lzZSB1c2UgdGhlIFNvZnR3YXJlIGFsb25lIG9yIGluIGFueQorICAgIGRlcml2YXRpdmUgdmVyc2lvbiwgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgdGhlIGVHZW5peC5jb20gUHVibGljCisgICAgTGljZW5zZSBBZ3JlZW1lbnQgaXMgcmV0YWluZWQgaW4gdGhlIFNvZnR3YXJlLCBvciBpbiBhbnkKKyAgICBkZXJpdmF0aXZlIHZlcnNpb24gb2YgdGhlIFNvZnR3YXJlIHByZXBhcmVkIGJ5IExpY2Vuc2VlLgorCiszLiAgTk8gV0FSUkFOVFkKKworICAgIGVHZW5peC5jb20gaXMgbWFraW5nIHRoZSBTb2Z0d2FyZSBhdmFpbGFibGUgdG8gTGljZW5zZWUgb24gYW4gIkFTCisgICAgSVMiIGJhc2lzLiAgU1VCSkVDVCBUTyBBTlkgU1RBVFVUT1JZIFdBUlJBTlRJRVMgV0hJQ0ggQ0FOIE5PVCBCRQorICAgIEVYQ0xVREVELCBFR0VOSVguQ09NIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLAorICAgIEVYUFJFU1MgT1IgSU1QTElFRC4gIEJZIFdBWSBPRiBFWEFNUExFLCBCVVQgTk9UIExJTUlUQVRJT04sCisgICAgRUdFTklYLkNPTSBNQUtFUyBOTyBBTkQgRElTQ0xBSU1TIEFOWSBSRVBSRVNFTlRBVElPTiBPUiBXQVJSQU5UWQorICAgIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFIE9SIFRIQVQKKyAgICBUSEUgVVNFIE9GIFRIRSBTT0ZUV0FSRSBXSUxMIE5PVCBJTkZSSU5HRSBBTlkgVEhJUkQgUEFSVFkgUklHSFRTLgorCis0LiAgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkKKworICAgIEVHRU5JWC5DT00gU0hBTEwgTk9UIEJFIExJQUJMRSBUTyBMSUNFTlNFRSBPUiBBTlkgT1RIRVIgVVNFUlMgT0YKKyAgICBUSEUgU09GVFdBUkUgRk9SIEFOWSBJTkNJREVOVEFMLCBTUEVDSUFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAgICBPUiBMT1NTIChJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRgorICAgIEJVU0lORVNTIFBST0ZJVFMsIEJVU0lORVNTIElOVEVSUlVQVElPTiwgTE9TUyBPRiBCVVNJTkVTUworICAgIElORk9STUFUSU9OLCBPUiBPVEhFUiBQRUNVTklBUlkgTE9TUykgQVMgQSBSRVNVTFQgT0YgVVNJTkcsCisgICAgTU9ESUZZSU5HIE9SIERJU1RSSUJVVElORyBUSEUgU09GVFdBUkUsIE9SIEFOWSBERVJJVkFUSVZFIFRIRVJFT0YsCisgICAgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBUSEVSRU9GLgorCisgICAgU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YKKyAgICBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhFIEFCT1ZFIEVYQ0xVU0lPTiBPUgorICAgIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBMSUNFTlNFRS4KKworNS4gIFRlcm1pbmF0aW9uCisKKyAgICBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgdXBvbiBhCisgICAgbWF0ZXJpYWwgYnJlYWNoIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4KKworNi4gIFRoaXJkIFBhcnR5IFJpZ2h0cyAKKworICAgIEFueSBzb2Z0d2FyZSBvciBkb2N1bWVudGF0aW9uIGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybSBwcm92aWRlZAorICAgIGFsb25nIHdpdGggdGhlIFNvZnR3YXJlIHRoYXQgaXMgYXNzb2NpYXRlZCB3aXRoIGEgc2VwYXJhdGUgbGljZW5zZQorICAgIGFncmVlbWVudCBpcyBsaWNlbnNlZCB0byBMaWNlbnNlZSB1bmRlciB0aGUgdGVybXMgb2YgdGhhdCBsaWNlbnNlCisgICAgYWdyZWVtZW50LiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IGRvZXMgbm90IGFwcGx5IHRvIHRob3NlIHBvcnRpb25zCisgICAgb2YgdGhlIFNvZnR3YXJlLiBDb3BpZXMgb2YgdGhlIHRoaXJkIHBhcnR5IGxpY2Vuc2VzIGFyZSBpbmNsdWRlZAorICAgIGluIHRoZSBTb2Z0d2FyZSBEaXN0cmlidXRpb24uCisKKzcuICBHZW5lcmFsCisKKyAgICBOb3RoaW5nIGluIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgYWZmZWN0cyBhbnkgc3RhdHV0b3J5IHJpZ2h0cyBvZgorICAgIGNvbnN1bWVycyB0aGF0IGNhbm5vdCBiZSB3YWl2ZWQgb3IgbGltaXRlZCBieSBjb250cmFjdC4KKworICAgIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIEFncmVlbWVudCBzaGFsbCBiZSBkZWVtZWQgdG8gY3JlYXRlIGFueQorICAgIHJlbGF0aW9uc2hpcCBvZiBhZ2VuY3ksIHBhcnRuZXJzaGlwLCBvciBqb2ludCB2ZW50dXJlIGJldHdlZW4KKyAgICBlR2VuaXguY29tIGFuZCBMaWNlbnNlZS4KKworICAgIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudCBzaGFsbCBiZSB1bmxhd2Z1bCwKKyAgICB2b2lkLCBvciBmb3IgYW55IHJlYXNvbiB1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZQorICAgIG1vZGlmaWVkIHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIHJlbmRlciBpdCBlbmZvcmNlYWJsZSB3aXRob3V0CisgICAgbG9zaW5nIGl0cyBpbnRlbnQsIG9yLCBpZiBubyBzdWNoIG1vZGlmaWNhdGlvbiBpcyBwb3NzaWJsZSwgYmUKKyAgICBzZXZlcmVkIGZyb20gdGhpcyBMaWNlbnNlIEFncmVlbWVudCBhbmQgc2hhbGwgbm90IGFmZmVjdCB0aGUKKyAgICB2YWxpZGl0eSBhbmQgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIHJlbWFpbmluZyBwcm92aXNpb25zIG9mIHRoaXMKKyAgICBMaWNlbnNlIEFncmVlbWVudC4KKworICAgIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgc2hhbGwgYmUgZ292ZXJuZWQgYnkgYW5kIGludGVycHJldGVkIGluIGFsbAorICAgIHJlc3BlY3RzIGJ5IHRoZSBsYXcgb2YgR2VybWFueSwgZXhjbHVkaW5nIGNvbmZsaWN0IG9mIGxhdworICAgIHByb3Zpc2lvbnMuIEl0IHNoYWxsIG5vdCBiZSBnb3Zlcm5lZCBieSB0aGUgVW5pdGVkIE5hdGlvbnMKKyAgICBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzLgorCisgICAgVGhpcyBMaWNlbnNlIEFncmVlbWVudCBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSBlR2VuaXguY29tCisgICAgdHJhZGVtYXJrcyBvciB0cmFkZSBuYW1lcyBpbiBhIHRyYWRlbWFyayBzZW5zZSB0byBlbmRvcnNlIG9yCisgICAgcHJvbW90ZSBwcm9kdWN0cyBvciBzZXJ2aWNlcyBvZiBMaWNlbnNlZSwgb3IgYW55IHRoaXJkIHBhcnR5LgorCisgICAgVGhlIGNvbnRyb2xsaW5nIGxhbmd1YWdlIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgaXMgRW5nbGlzaC4gSWYKKyAgICBMaWNlbnNlZSBoYXMgcmVjZWl2ZWQgYSB0cmFuc2xhdGlvbiBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UsIGl0IGhhcworICAgIGJlZW4gcHJvdmlkZWQgZm9yIExpY2Vuc2VlJ3MgY29udmVuaWVuY2Ugb25seS4KKworOC4gIEFncmVlbWVudAorCisgICAgQnkgZG93bmxvYWRpbmcsIGNvcHlpbmcsIGluc3RhbGxpbmcgb3Igb3RoZXJ3aXNlIHVzaW5nIHRoZQorICAgIFNvZnR3YXJlLCBMaWNlbnNlZSBhZ3JlZXMgdG8gYmUgYm91bmQgYnkgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zCisgICAgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4KKworCisgICAgRm9yIHF1ZXN0aW9uIHJlZ2FyZGluZyB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LCBwbGVhc2Ugd3JpdGUgdG86CisKKwkgICAgICBlR2VuaXguY29tIFNvZnR3YXJlLCBTa2lsbHMgYW5kIFNlcnZpY2VzIEdtYkgKKwkgICAgICBQYXN0b3ItTG9laC1TdHIuIDQ4CisJICAgICAgRC00MDc2NCBMYW5nZW5mZWxkCisJICAgICAgR2VybWFueQpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvZWdyZXNzb3IgYi9saWNlbnNlcy9lZ3Jlc3NvcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTE1MGMyCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvZWdyZXNzb3IKQEAgLTAsMCArMSw3NSBAQAorCitURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBVU0UKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIE1JVFJFIENvcnBvcmF0aW9uIChNSVRSRSkgbGljZW5zZXMgdGhlIEVncmVzcyBGaWx0ZXJpbmcgRGlhZ25vc2lzCitUb29sIHRvIHlvdSB3aXRob3V0IGNoYXJnZSAuICBBcyB1c2VkIGluIHRoaXMgTGljZW5zZSwgdGhlIFRlcm0KKyJFZ3Jlc3MgRmlsdGVyaW5nIEluZm9ybWF0aW9uIFRvb2wiIGluY2x1ZGVzIGFueSBkb2N1bWVudGF0aW9uIGFuZAordGVzdCByZXN1bHRzIHByb3ZpZGVkLgorCitUaGUgRWdyZXNzIEZpbHRlcmluZyBEaWFnbm9zaXMgVG9vbCBpcyB0aGUgY29weXJpZ2h0IHdvcmsgYW5kIHRoZQorcHJvcHJpZXRhcnkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIE1JVFJFLiAgTm8gb3duZXJzaGlwIG9yIG90aGVyCitwcm9wcmlldGFyeSBpbnRlcmVzdCBpbiB0aGUgRWdyZXNzIEZpbHRlcmluZyBEaWFnbm9zaXMgVG9vbCBpcworZ3JhbnRlZCB5b3Ugb3RoZXIgdGhhbiB3aGF0IGlzIGdyYW50ZWQgaW4gdGhpcyBsaWNlbnNlLiBZb3UgbWF5IG5vdAorc2VsbCB0aGUgRWdyZXNzIEZpbHRlcmluZyBEaWFnbm9zaXMgVG9vbCB0byBhIHRoaXJkIHBhcnR5LCBvciBjaGFyZ2UKK2ZvciB1c2luZyBpdCB0byBwcm92aWRlIHNlcnZpY2VzIHRvIGEgdGhpcmQgcGFydHkgCisKK1lPVSBBU1NVTUUgQUxMIFJJU0sgQVMgVE8gVEhFIFNFTEVDVElPTiwgVVNFLCBQRVJGT1JNQU5DRSBBTkQgUVVBTElUWQorT0YgVEhFIEVHUkVTUyBGSUxURVJJTkcgRElBR05PU0lTIFRPT0wuICBNSVRSRSBJUyBQUk9WSUQtSU5HIFRIRQorRUdSRVNTIEZJTFRFUklORyBESUFHTk9TSVMgVE9PTCAiQVMgSVMiIEFORCBNQUtFUyBOTyBXQS1SUkFOVFksCitFWFBSRVNTIE9SIElNUExJRUQsIEFTIFRPIFRIRSBBQ0NVUkFDWSwgQ0FQQUJJTElUWSwgRUZGSS1DSUVOQ1ksCitNRVJDSEFOVEFCSUxJVFksIE9SIEZVTkNUSU9OSU5HIE9GIFRIRSBFR1JFU1MgRklMVEVSSU5HIERJQUdOT1NJUworVE9PTC4gIElOIE5PIEVWRU5UIFdJTEwgTUlUUkUgQkUgTElBQkxFIEZPUiBBTlkgR0VORVJBTCwKK0NPTlNFUVVFTlRJQUwsICBJTkRJUkVDVCwgSU5DSURFTlRBTCwgRVhFTVBMQVJZIE9SIFNQRUNJQUwgREFNQUdFUywKK1JFR0FSRExFU1MgT0YgVEhFIENBVVNFIFRIRVJFT0YsIEVWRU4gSUYgTUlUUkUgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gIAorCitZb3UgYWNjZXB0IHRoZSBFZ3Jlc3MgRmlsdGVyaW5nIERpYWdub3NpcyBUb29sIG9uIHRoZSBjb25kaXRpb24gdGhhdAoreW91IGluZGVtbmlmeSBhbmQgaG9sZCBoYXJtbGVzcyBNSVRSRSwgaXRzIEJvYXJkIG9mIFRydXN0ZWVzLAorb2ZmaWNlcnMsIGFnZW50cywgYW5kIGVtcGxveWVlcywgZnJvbSBhbnkgYW5kIGFsbCBsaWFiaWxpdHkgb3IgZGFtYWdlcwordG8gdGhpcmQgcGFydGllcywgaW5jbHVkaW5nIGF0dG9ybmV5cycgZmVlcywgY291cnQgY29zdHMsIGFuZCBvdGhlcgorcmVsYXRlZCBjb3N0cyBhbmQgZXhwZW5zZXMsIGFyaXNpbmcgb3V0IG9mIHlvdXIgdXNlIG9mIHRoZSBFZ3Jlc3MKK0ZpbHRlcmluZyBEaWFnbm9zaXMgVG9vbCBpcnJlc3BlY3RpdmUgb2YgdGhlIGNhdXNlIG9mIHNhaWQgbGlhYmlsaXR5LiAgCisKK1lvdSByZW1haW4gc29sZWx5IHJlc3BvbnNpYmxlIGZvciB0aGUgc2VjdXJpdHkgb2YgeW91ciBzeXN0ZW1zIGFuZCBmb3IKK3RoZSBjb25zZXF1ZW5jZXMgb2YgdGhlIHVzZSBvZiB0aGUgRWdyZXNzIEZpbHRlcmluZyBEaWFnbm9zaXMgVG9vbC4KK1lvdSBhc3N1bWUgdGhlIGVudGlyZSByaXNrIG9mIGFueSBzZXJ2aWNpbmcsIHJlcGFpciwgb3IgY29ycmVjdGlvbiBvZgoreW91ciBwcm9wZXJ0eSBvciBvcGVyYXRpb25zIGFyaXNpbmcgb3V0IG9mIHlvdXIgdXNlIG9mIHRoZSBFZ3Jlc3MKK0ZpbHRlcmluZyBEaWFnbm9zaXMgVG9vbC4gCisKK01JVFJFIHVzZXMgaXRzIGJlc3QgZWZmb3J0cyB0byBwcm90ZWN0IGFnYWluc3QgdGhlIGxvc3MsIG1pc3VzZSBvcgorYWx0ZXJhdGlvbiBvZiBpbmZvcm1hdGlvbiBhbmQgaW5mb3JtYXRpb24gc3lzdGVtcyB1bmRlciBpdHMgY29udHJvbCBieQoraW5jb3Jwb3JhdGluZyBzZWN1cml0eSBzeXN0ZW1zLiAgSG93ZXZlciwgaWYgYW55IE1JVFJFIHNlcnZlciBvcgoraW5mb3JtYXRpb24gc3lzdGVtIGlzIHBlbmV0cmF0ZWQgb3Igb3RoZXJ3aXNlIGNvbXByb21pc2VkLCBNSVRSRSBzaGFsbAoraGF2ZSBubyBsaWFiaWxpdHkgdG8geW91IG9yIGFueW9uZSBjbGFpbWluZyB0aHJvdWdoIHlvdSBmb3IgYW55IGRhbWFnZQorb3IgaW5qdXJ5IGNhdXNlZCBieSB0aGUgaW50ZW50aW9uYWwsIHVuaW50ZW50aW9uYWwgb3IgbmVnbGlnZW50IGFjdHMKK29mIHRoaXJkIHBhcnRpZXMuIAorCitUaGUgZXhwb3J0IGZyb20gdGhlIFVuaXRlZCBTdGF0ZXMgb3IgdGhlIHN1YnNlcXVlbnQgcmVleHBvcnQgb2YgdGhlCitFZ3Jlc3MgRmlsdGVyaW5nIERpYWdub3NpcyBUb29sIGlzIHN1YmplY3QgdG8gY29tcGxpYW5jZSB3aXRoIFVuaXRlZAorU3RhdGVzIGV4cG9ydCBjb250cm9sIGFuZCBtdW5pdGlvbnMgY29udHJvbCByZXN0cmljdGlvbnMuIFlvdSBhZ3JlZQordGhhdCBpbiB0aGUgZXZlbnQgeW91IHNlZWsgdG8gZXhwb3J0IHRoZSBFZ3Jlc3MgRmlsdGVyaW5nIERpYWdub3NpcworVG9vbCB5b3UgYXNzdW1lIGZ1bGwgcmVzcG9uc2liaWxpdHkgZm9yIG9idGFpbmluZyBhbGwgbmVjZXNzYXJ5IGV4cG9ydAorbGljZW5zZXMgYW5kIGFwcHJvdmFscyBhbmQgZm9yIGFzc3VyaW5nIGNvbXBsaWFuY2Ugd2l0aCBhcHBsaWNhYmxlCityZWV4cG9ydCByZXN0cmljdGlvbnMuICAKKworSWYgYW55IHByb3Zpc2lvbiBvZiB0aGVzZSB0ZXJtcyBpcyBkZWVtZWQgdW5sYXdmdWwsIHZvaWQsIG9yIGZvciBhbnkKK3JlYXNvbiB1bmVuZm9yY2VhYmxlLCB0aGVuIHRoYXQgcHJvdmlzaW9uIHdpbGwgYmUgZGVlbWVkIHNldmVyYWJsZQorZnJvbSB0aGVzZSB0ZXJtcyBhbmQgd2lsbCBub3QgYWZmZWN0IHRoZSB2YWxpZGl0eSBhbmQgZW5mb3JjZWFiaWxpdHkKK29mIHRoZSByZW1haW5pbmcgcHJvdmlzaW9ucy4gIAorCitUaGlzIExpY2Vuc2Ugc2hhbGwgYmUgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlIENvbW1vbndlYWx0aCBvZgorVmlyZ2luaWEgd2l0aG91dCByZWdhcmQgdG8gVmlyZ2luaWEgY29uZmxpY3RzIG9mIGxhd3MgcnVsZXMuICBBbnkKK2xlZ2FsIGFjdGlvbiBjb25jZXJuaW5nIHVzZSBvZiB0aGUgRWdyZXNzIEZpbHRlcmluZyBEaWFnbm9zaXMgVG9vbCBvcgordGhpcyBMaWNlbnNlIG11c3QgYmUgZmlsZWQgaW4gdGhlIFUuUy4gRGlzdHJpY3QgQ291cnQgZm9yIHRoZSBFYXN0ZXJuCitEaXN0cmljdCBvZiBWaXJnaW5pYS4gCisKKyhjKSAyMDAwIFRoZSBNSVRSRSBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0J5IHVzaW5nIHRoaXMgc29mdHdhcmUsIHlvdSBzaWduaWZ5IHlvdXIgYWNjZXB0YW5jZSBvZiBvdXIgVGVybXMgYW5kCitDb25kaXRpb25zIG9mIFVzZS4gIElmIHlvdSBkbyBub3QgYWdyZWUgdG8gdGhlc2UgdGVybXMsIGRvIG5vdCB1c2UgdGhlCit0b29sLgorCisKKworCmRpZmYgLS1naXQgYS9saWNlbnNlcy9lc2NoYWxvbi1ib29rLTEtZGVtbyBiL2xpY2Vuc2VzL2VzY2hhbG9uLWJvb2stMS1kZW1vCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2MWVmNWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9lc2NoYWxvbi1ib29rLTEtZGVtbwpAQCAtMCwwICsxLDQ4IEBACitFTkQgVVNFUiBMSUNFTlNFIEFHUkVFTUVOVAorU29mdHdhcmUgTGljZW5zZSBBZ3JlZW1lbnQgZm9yIHRoZSBFc2NoYWxvbjogQm9vayBJIGRlbW8KKworSU1QT1JUQU5ULSBQTEVBU0UgUkVBRCBDQVJFRlVMTFk6IEJZIElOU1RBTExJTkcgVEhFIFNPRlRXQVJFLCBDT1BZSU5HIFRIRSBTT0ZUV0FSRSwgQU5EL09SIFVTSU5HIFRIRSBTT0ZUV0FSRSwgWU9VIChFSVRIRVIgT04gQkVIQUxGIE9GIFlPVVJTRUxGIEFTIEFOIElORElWSURVQUwgT1IgT04gQkVIQUxGIE9GIEFOIEVOVElUWSBBUyBJVFMgQVVUSE9SSVpFRCBSRVBSRVNFTlRBVElWRSkgQUdSRUUgVE8gQUxMIE9GIFRIRSBURVJNUyBPRiBUSElTIEVORCBVU0VSIExJQ0VOU0UgQUdSRUVNRU5UICgnQUdSRUVNRU5UJykgUkVHQVJESU5HIFlPVVIgVVNFIE9GIFRIRSBTT0ZUV0FSRS4gIElGIFlPVSBETyBOT1QgQUdSRUUgV0lUSCBBTEwgT0YgVEhFIFRFUk1TIE9GIFRISVMgQUdSRUVNRU5ULCBDTElDSyBPTiBUSEUgJ0NBTkNFTCcgQlVUVE9OLiBUSElTIFdJTEwgQ0FOQ0VMIFRIRSBJTlNUQUxMQVRJT04uCisKKzEuIEdSQU5UIE9GIExJQ0VOU0UKK1N1YmplY3QgdG8gdGhlIHRlcm1zIGJlbG93LCBCYXNpbGlzayBHYW1lcywgSW5jLiBoZXJlYnkgZ3JhbnRzIHlvdSBhIG5vbi1leGNsdXNpdmUsIG5vbi10cmFuc2ZlcmFibGUgbGljZW5zZSB0byBpbnN0YWxsIGFuZCB0byB1c2UgRXNjaGFsb246IEJvb2sgSSBkZW1vICgnU29mdHdhcmUnKS4KKworVW5kZXIgdGhpcyBsaWNlbnNlLCB5b3UgbWF5OiAoaSkgaW5zdGFsbCBhbmQgdXNlIHRoZSBkZW1vIHZlcnNpb24gb2YgdGhlIFNvZnR3YXJlIG9uIGFzIG1hbnkgY29tcHV0ZXJzIGFzIHlvdSB3YW50LgorCitXaGV0aGVyIHlvdSBhcmUgbGljZW5zaW5nIHRoZSBTb2Z0d2FyZSBhcyBhbiBpbmRpdmlkdWFsIG9yIG9uIGJlaGFsZiBvZiBhbiBlbnRpdHksIHlvdSBtYXkgbm90OiAoaSkgcmV2ZXJzZSBlbmdpbmVlciwgZGVjb21waWxlLCBvciBkaXNhc3NlbWJsZSB0aGUgU29mdHdhcmUgb3IgYXR0ZW1wdCB0byBkaXNjb3ZlciB0aGUgc291cmNlIGNvZGU7IChpaSkgbW9kaWZ5LCBvciBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBiYXNlZCB1cG9uLCB0aGUgU29mdHdhcmUgaW4gd2hvbGUgb3IgaW4gcGFydCB3aXRob3V0IHRoZSBleHByZXNzIHdyaXR0ZW4gY29uc2VudCBvZiBCYXNpbGlzayBHYW1lcywgSW5jLjsgKGlpaSkgcmVtb3ZlIGFueSBwcm9wcmlldGFyeSBub3RpY2VzIG9yIGxhYmVscyBvbiB0aGUgU29mdHdhcmU7IChpdikgcmVzZWxsLCBsZWFzZSwgcmVudCwgdHJhbnNmZXIsIHN1YmxpY2Vuc2UsIG9yIG90aGVyd2lzZSB0cmFuc2ZlciByaWdodHMgdG8gdGhlIFNvZnR3YXJlOyAodikgaW4gYW55IG90aGVyIG1hbm5lciBhbmQgdGhyb3VnaCBhbnkgbWVkaXVtIHdoYXRzb2V2ZXIgY29tbWVyY2lhbGx5IGV4cGxvaXQgdGhlIFNvZnR3YXJlIG9yIHVzZSB0aGUgU29mdHdhcmUgZm9yIGFueSBjb21tZXJjaWFsIHB1cnBvc2UuCisKKzEuMS4gREVNTyBWRVJTSU9OIExJQ0VOU0UuCitZb3UgbWF5IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBkZW1vIHZlcnNpb24gb2YgdGhlIFNvZnR3YXJlIGZyZWVseSB0byBvdGhlciB1c2VycywgcHJvdmlkZWQgdGhhdCBhbnkgY29weSBtdXN0IGNvbnRhaW4gdGhlIG9yaWdpbmFsLCB1bmFsdGVyZWQgZmlsZXMgYW5kIHByb3ByaWV0YXJ5IG5vdGljZXMuICBZb3UgbWF5IG5vdCBkaXN0cmlidXRlIG1vZGlmaWNhdGlvbnMgdG8gdGhlIGRlbW8gdmVyc2lvbi4gIFRoaXMgaW5jbHVkZXMgYnV0IGlzIG5vdCBsaW1pdGVkIHRvIG5ldyBvciBtb2RpZmllZCBtb2RlbHMsIHNvdW5kcywgbXVzaWMsIHF1ZXN0cywgY2xhc3NlcywgaXRlbXMsIHNraWxscywgbW9uc3RlcnMsIFVJLCBsZXZlbHMsIGVmZmVjdHMsIHRleHR1cmVzLCBzdG9yaWVzLCBhbmQvb3IgZGF0YWJhc2UgY2hhbmdlcy4KKworMi4gSU5URUxMRUNUVUFMIFBST1BFUlRZIFJJR0hUUy4KK1lvdSBhY2tub3dsZWRnZSB0aGF0IG5vIHRpdGxlIHRvIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW4gdGhlIFNvZnR3YXJlIGlzIHRyYW5zZmVycmVkIHRvIHlvdS4gVGl0bGUsIG93bmVyc2hpcCwgcmlnaHRzLCBhbmQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBpbiBhbmQgdG8gdGhlIFNvZnR3YXJlIHNoYWxsIHJlbWFpbiB0aGF0IG9mIEJhc2lsaXNrIEdhbWVzLCBJbmMuICBUaGUgU29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IGNvcHlyaWdodCBhbmQgcGF0ZW50IGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgYW5kIGludGVybmF0aW9uYWwgdHJlYXRpZXMuCisKKzMuIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkuCitZT1UgQUdSRUUgVEhBVCBCYXNpbGlzayBHYW1lcywgSW5jLiBIQVMgTUFERSBOTyBFWFBSRVNTIFdBUlJBTlRJRVMsIE9SQUwgT1IgV1JJVFRFTiwgVE8gWU9VIFJFR0FSRElORyBUSEUgUFJPRFVDVFMgQU5EIFRIQVQgVEhFIFBST0RVQ1RTIEFSRSBCRUlORyBQUk9WSURFRCBUTyBZT1UgJ0FTIElTJyBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELiAgQmFzaWxpc2sgR2FtZXMsIEluYy4gRElTQ0xBSU1TIEFOWSBBTkQgQUxMIE9USEVSIFdBUlJBTlRJRVMsIFdIRVRIRVIgRVhQUkVTU0VELCBJTVBMSUVELCBPUiBTVEFUVVRPUlkuIFlPVVIgUklHSFRTIE1BWSBWQVJZIERFUEVORElORyBPTiBUSEUgU1RBVEUgSU4gV0hJQ0ggWU9VIExJVkUuCitCYXNpbGlzayBHYW1lcywgSW5jLiBTSEFMTCBOT1QgQkUgTElBQkxFIEZPUiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgQ09WRVIsIFJFTElBTkNFLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgUkVTVUxUSU5HIEZST00gVEhFIFVTRSBPRiBUSElTIFBST0RVQ1QuCisKKzQuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLgorWW91IHVzZSB0aGlzIHByb2dyYW0gc29sZWx5IGF0IHlvdXIgb3duIHJpc2suCitJTiBOTyBFVkVOVCBTSEFMTCBCYXNpbGlzayBHYW1lcywgSW5jLiBCRSBMSUFCTEUgVE8gWU9VIEZPUiBBTlkgREFNQUdFUywgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBBTlkgTE9TUywgT1IgT1RIRVIgSU5DSURFTlRBTCwgSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBLSU5EIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT0YgVEhFIFNPRlRXQVJFLCBFVkVOIElGIEJhc2lsaXNrIEdhbWVzLCBJbmMuIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gSU4gTk8gRVZFTlQgV0lMTCBCYXNpbGlzayBHYW1lcywgSW5jLiBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgVE9SVCwgT1IgQU5ZIE9USEVSIFRIRU9SWSBPRiBMSUFCSUxJVFksIEVYQ0VFRCBUSEUgQ09TVCBPRiBUSEUgU09GVFdBUkUuIFRISVMgTElNSVRBVElPTiBTSEFMTCBBUFBMWSBUTyBDTEFJTVMgT0YgUEVSU09OQUwgSU5KVVJZIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIExBVy4KKworNS4gVEVSTUlOQVRJT04uCitUaGlzIEFncmVlbWVudCBzaGFsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZiB5b3UgZmFpbCB0byBjb21wbHkgd2l0aCB0aGUgbGltaXRhdGlvbnMgZGVzY3JpYmVkIGluIHRoaXMgQWdyZWVtZW50LiBObyBub3RpY2Ugc2hhbGwgYmUgcmVxdWlyZWQgdG8gZWZmZWN0dWF0ZSBzdWNoIHRlcm1pbmF0aW9uLiBVcG9uIHRlcm1pbmF0aW9uLCB5b3UgbXVzdCByZW1vdmUgYW5kIGRlc3Ryb3kgYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUuCisKKzYuIERJU1RSSUJVVElPTi4KK0Jhc2lsaXNrIEdhbWVzLCBJbmMuIGFsbG93cyBhbmQgZW5jb3VyYWdlcyBhbGwgd2ViIHNpdGVzLCBvbi1saW5lIHNlcnZpY2VzLCBjb21wdXRpbmcgYW5kL29yIGdhbWUgbWFnYXppbmVzLCBzaGFyZXdhcmUgdmVuZG9ycywgQ0QtUk9NIHZlbmRvcnMsIGFuZCBlbmQtdXNlcnMgdG8gZnJlZWx5IGRpc3RyaWJ1dGUgdGhlIGRlbW8gdmVyc2lvbiBvZiB0aGlzIFNvZnR3YXJlLiBJZiB5b3Ugd2lzaCB0byBkaXN0cmlidXRlIHRoZSBkZW1vIHZlcnNpb24gb2YgdGhpcyBTb2Z0d2FyZSwgeW91IGNhbiBvYnRhaW4gdGhlIG1vc3QgcmVjZW50IHZlcnNpb24gZnJvbSB3d3cuYmFzaWxpc2tnYW1lcy5jb20gYW5kIGl0IGlzIG5vdCBuZWNlc3NhcnkgdG8gY29udGFjdCBCYXNpbGlzayBHYW1lcywgSW5jLiBmb3IgYXV0aG9yaXphdGlvbi4KKworNy4gTUlTQ0VMTEFORU9VUzoKKworYS4gU2V2ZXJhYmlsaXR5LgorSW4gdGhlIGV2ZW50IG9mIGludmFsaWRpdHkgb2YgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCwgdGhlIHBhcnRpZXMgYWdyZWUgdGhhdCBzdWNoIGludmFsaWRpdHkgc2hhbGwgbm90IGFmZmVjdCB0aGUgdmFsaWRpdHkgb2YgdGhlIHJlbWFpbmluZyBwb3J0aW9ucyBvZiB0aGlzIEFncmVlbWVudC4KKworYi4gRXhwb3J0LgorWW91IGFncmVlIHRoYXQgeW91IHdpbGwgbm90IGRvd25sb2FkLCBleHBvcnQsIG9yIHJlLWV4cG9ydCB0aGUgU29mdHdhcmUgaW4gdmlvbGF0aW9uIG9mIFVuaXRlZCBTdGF0ZXMgb3IgZm9yZWlnbiBleHBvcnQgbGF3cy4KKworYy4gR292ZXJuaW5nIExhdy4KK1RoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGdvdmVybmVkIGJ5IGFuZCBjb25zdHJ1ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBJbmRpYW5hLCBVU0EsIHdpdGhvdXQgZ2l2aW5nIGVmZmVjdCB0byAoaSkgaXRzIGNvbmZsaWN0IG9mIGxhd3MgcHJvdmlzaW9ucywgb3IgKGlpKSB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBmb3IgQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzLiBUbyB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywgYW55IGRpc3B1dGUgYXJpc2luZyB1bmRlciB0aGlzIEFncmVlbWVudCBvciByZWxhdGluZyB0byB0aGUgU29mdHdhcmUgc2hhbGwgYmUgcmVzb2x2ZWQgYnkgYSBjb3VydCBvZiBwcm9wZXIganVyaXNkaWN0aW9uIGluIENvbGxpbiBDb3VudHksIEluZGlhbmEsIFVuaXRlZCBTdGF0ZXMuCisKK2QuIEVudGlyZSBBZ3JlZW1lbnQuCitZb3UgYWdyZWUgdGhhdCB0aGlzIGlzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4geW91IGFuZCBCYXNpbGlzayBHYW1lcywgSW5jLiwgd2hpY2ggc3VwZXJzZWRlcyBhbnkgcHJpb3IgYWdyZWVtZW50LCB3aGV0aGVyIHdyaXR0ZW4gb3Igb3JhbCwgYW5kIGFsbCBvdGhlciBjb21tdW5pY2F0aW9ucyBiZXR3ZWVuIEJhc2lsaXNrIEdhbWVzLCBJbmMuIGFuZCB5b3UgcmVsYXRpbmcgdG8gdGhlIHN1YmplY3QgbWF0dGVyIG9mIHRoaXMgQWdyZWVtZW50LiAgSG93ZXZlciwgQmFzaWxpc2sgR2FtZXMsIEluYy4gcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgb2YgdGhpcyBsaWNlbnNlIGZyb20gdGltZSB0byB0aW1lIGFuZCB3aWxsIHBvc3Qgbm90aWNlIG9mIGNoYW5nZXMgc29tZXdoZXJlIG9uIHd3dy5iYXNpbGlza2dhbWVzLmNvbS4KKworZS4gUmVzZXJ2YXRpb24gb2YgcmlnaHRzLgorQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgaW4gdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkIGJ5IEJhc2lsaXNrIEdhbWVzLCBJbmMuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9ldGVybmFsX2xhbmRzIGIvbGljZW5zZXMvZXRlcm5hbF9sYW5kcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzdkYjQyCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvZXRlcm5hbF9sYW5kcwpAQCAtMCwwICsxLDYwIEBACitUaGUgRXRlcm5hbCBMYW5kcyBsaWNlbnNlIGlzIGEgc2xpZ2h0bHkgbW9kaWZpZWQgUVRQTCBsaWNlbnNlICh0aGUgUVRQTCBsaWNlbnNlIGNhbiBiZSBmb3VuZCBoZXJlIGh0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy9xdHBsLnBocCkKKworVGhlIEV0ZXJuYWwgTGFuZHMgQ2xpZW50IFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wCitDb3B5cmlnaHQgKEMpIDIwMDMsIFJhZHUgUHJpdmFudHUgYW5kIE1hdXJhIFByaXZhbnR1LgorRXZlcnlvbmUgaXMgcGVybWl0dGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhpcyBsaWNlbnNlIGRvY3VtZW50LiAKKworVGhlIGludGVudCBvZiB0aGlzIGxpY2Vuc2UgaXMgdG8gZXN0YWJsaXNoIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSB0aGUgc29mdHdhcmUgcmVndWxhdGVkIGJ5IHRoaXMgbGljZW5zZSB1bmRlciB0aGUgb3BlbiBzb3VyY2UgbW9kZWwuCisKK0RlZmluaXRpb25zOiAKK1NvZnR3YXJlIG1lYW5zIHRoZSBTb3VyY2UgQ29kZSAob3IgY29tcGlsZWQgYmluYXJ5KSBidXQgZG9lcyBub3QgaW5jbHVkZSBhbnl0aGluZyBlbHNlLgorQmluYXJ5IERhdGEgbWVhbnMgdGhlIGFydCAoMmQsIDNkLCBhbmltYXRpb25zLCBzb3VuZCwgbXVzaWMsIG1hcHMsIHN0b3JpZXMsIGV0Yy4pIGFuZCBhbnl0aGluZyB0aGF0IGlzIG5vdCBzb3VyY2Ugb3IgY29tcGlsZWQgY29kZS4gVGhlIEJpbmFyeSBEYXRhIGlzIHByb3BpZXRhcnksIGFuZCBzaG91bGQgbm90IGJlIHVzZWQgd2l0aG91dCBvdXIgcGVybWlzc2lvbi4KKworCitUaGlzIGxpY2Vuc2UgYXBwbGllcyB0byBhbnkgc29mdHdhcmUgY29udGFpbmluZyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIHRoYXQgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgRXRlcm5hbCBMYW5kcyBDbGllbnQgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAxLjAuIFN1Y2ggc29mdHdhcmUgaXMgaGVyZWluIHJlZmVycmVkIHRvIGFzIHRoZSBTb2Z0d2FyZS4gVGhpcyBsaWNlbnNlIGNvdmVycyBtb2RpZmljYXRpb24gYW5kIGRpc3RyaWJ1dGlvbiBvZiB0aGUgU29mdHdhcmUsIHVzZSBvZiB0aGlyZC1wYXJ0eSBhcHBsaWNhdGlvbiBwcm9ncmFtcyBiYXNlZCBvbiB0aGUgU29mdHdhcmUsIGFuZCBkZXZlbG9wbWVudCBvZiBmcmVlIHNvZnR3YXJlIHdoaWNoIHVzZXMgdGhlIFNvZnR3YXJlLgorCitHcmFudGVkIFJpZ2h0cworMS4gWW91IGFyZSBncmFudGVkIHRoZSBub24tZXhjbHVzaXZlIHJpZ2h0cyBzZXQgZm9ydGggaW4gdGhpcyBsaWNlbnNlIHByb3ZpZGVkIHlvdSBhZ3JlZSB0byBhbmQgY29tcGx5IHdpdGggYW55IGFuZCBhbGwgY29uZGl0aW9ucyBpbiB0aGlzIGxpY2Vuc2UuIFdob2xlIG9yIHBhcnRpYWwgZGlzdHJpYnV0aW9uIG9mIHRoZSBTb2Z0d2FyZSwgb3Igc29mdHdhcmUgaXRlbXMgdGhhdCBsaW5rIHdpdGggdGhlIFNvZnR3YXJlLCBpbiBhbnkgZm9ybSBzaWduaWZpZXMgYWNjZXB0YW5jZSBvZiB0aGlzIGxpY2Vuc2UuCisKKzIuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgaW4gdW5tb2RpZmllZCBmb3JtIHByb3ZpZGVkIHRoYXQgdGhlIGVudGlyZSBwYWNrYWdlLCBpbmNsdWRpbmcgLSBidXQgbm90IHJlc3RyaWN0ZWQgdG8gLSBjb3B5cmlnaHQsIHRyYWRlbWFyayBub3RpY2VzIGFuZCBkaXNjbGFpbWVycywgYXMgcmVsZWFzZWQgYnkgdGhlIGluaXRpYWwgZGV2ZWxvcGVyIG9mIHRoZSBTb2Z0d2FyZSwgaXMgZGlzdHJpYnV0ZWQuCisKKzMuIFlvdSBtYXkgbWFrZSBtb2RpZmljYXRpb25zIHRvIHRoZSBTb2Z0d2FyZSBhbmQgZGlzdHJpYnV0ZSB5b3VyIG1vZGlmaWNhdGlvbnMsIGluIGEgZm9ybSB0aGF0IGlzIHNlcGFyYXRlIGZyb20gdGhlIFNvZnR3YXJlLCBzdWNoIGFzIHBhdGNoZXMuIFRoZSBmb2xsb3dpbmcgcmVzdHJpY3Rpb25zIGFwcGx5IHRvIG1vZGlmaWNhdGlvbnM6CisKK2EuIE1vZGlmaWNhdGlvbnMgbXVzdCBub3QgYWx0ZXIgb3IgcmVtb3ZlIGFueSBjb3B5cmlnaHQgbm90aWNlcyBpbiB0aGUgU29mdHdhcmUuCisKK2IuIFdoZW4gbW9kaWZpY2F0aW9ucyB0byB0aGUgU29mdHdhcmUgYXJlIHJlbGVhc2VkIHVuZGVyIHRoaXMgbGljZW5zZSwgYSBub24tZXhjbHVzaXZlIHJveWFsdHktZnJlZSByaWdodCBpcyBncmFudGVkIHRvIHRoZSBpbml0aWFsIGRldmVsb3BlciBvZiB0aGUgU29mdHdhcmUgdG8gZGlzdHJpYnV0ZSB5b3VyIG1vZGlmaWNhdGlvbiBpbiBmdXR1cmUgdmVyc2lvbnMgb2YgdGhlIFNvZnR3YXJlIHByb3ZpZGVkIHN1Y2ggdmVyc2lvbnMgcmVtYWluIGF2YWlsYWJsZSB1bmRlciB0aGVzZSB0ZXJtcyBpbiBhZGRpdGlvbiB0byBhbnkgb3RoZXIgbGljZW5zZShzKSBvZiB0aGUgaW5pdGlhbCBkZXZlbG9wZXIuCisKK2MuIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorCis0LiBZb3UgbWF5IGRpc3RyaWJ1dGUgbWFjaGluZS1leGVjdXRhYmxlIGZvcm1zIG9mIHRoZSBTb2Z0d2FyZSBvciBtYWNoaW5lLWV4ZWN1dGFibGUgZm9ybXMgb2YgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhlIFNvZnR3YXJlLCBwcm92aWRlZCB0aGF0IHlvdSBtZWV0IHRoZXNlIHJlc3RyaWN0aW9uczoKKworYS4gWW91IG11c3QgaW5jbHVkZSB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQgaW4gdGhlIGRpc3RyaWJ1dGlvbi4KKworYi4gWW91IG11c3QgZW5zdXJlIHRoYXQgYWxsIHJlY2lwaWVudHMgb2YgdGhlIG1hY2hpbmUtZXhlY3V0YWJsZSBmb3JtcyBhcmUgYWxzbyBhYmxlIHRvIHJlY2VpdmUgdGhlIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUgdG8gdGhlIGRpc3RyaWJ1dGVkIFNvZnR3YXJlLCBpbmNsdWRpbmcgYWxsIG1vZGlmaWNhdGlvbnMsIHdpdGhvdXQgYW55IGNoYXJnZSBiZXlvbmQgdGhlIGNvc3RzIG9mIGRhdGEgdHJhbnNmZXIsIGFuZCBwbGFjZSBwcm9taW5lbnQgbm90aWNlcyBpbiB0aGUgZGlzdHJpYnV0aW9uIGV4cGxhaW5pbmcgdGhpcy4KKworYy4gWW91IG11c3QgZW5zdXJlIHRoYXQgYWxsIG1vZGlmaWNhdGlvbnMgaW5jbHVkZWQgaW4gdGhlIG1hY2hpbmUtZXhlY3V0YWJsZSBmb3JtcyBhcmUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UuCisKKzUuIFlvdSBtYXkgdXNlIHRoZSBvcmlnaW5hbCBvciBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGUgU29mdHdhcmUgdG8gY29tcGlsZSwgbGluayBhbmQgcnVuIGFwcGxpY2F0aW9uIHByb2dyYW1zIGxlZ2FsbHkgZGV2ZWxvcGVkIGJ5IHlvdSBvciBieSBvdGhlcnMuCisKKzYuIFlvdSBtYXkgZGV2ZWxvcCBhcHBsaWNhdGlvbiBwcm9ncmFtcywgcmV1c2FibGUgY29tcG9uZW50cyBhbmQgb3RoZXIgc29mdHdhcmUgaXRlbXMgdGhhdCBsaW5rIHdpdGggdGhlIG9yaWdpbmFsIG9yIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoZSBTb2Z0d2FyZS4gVGhlc2UgaXRlbXMsIHdoZW4gZGlzdHJpYnV0ZWQsIGFyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgcmVxdWlyZW1lbnRzOgorCithLiBZb3UgbXVzdCBlbnN1cmUgdGhhdCBhbGwgcmVjaXBpZW50cyBvZiBtYWNoaW5lLWV4ZWN1dGFibGUgZm9ybXMgb2YgdGhlc2UgaXRlbXMgYXJlIGFsc28gYWJsZSB0byByZWNlaXZlIGFuZCB1c2UgdGhlIGNvbXBsZXRlIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUgdG8gdGhlIGl0ZW1zIHdpdGhvdXQgYW55IGNoYXJnZSBiZXlvbmQgdGhlIGNvc3RzIG9mIGRhdGEgdHJhbnNmZXIuCisKK2IuIFlvdSBtdXN0IGV4cGxpY2l0bHkgbGljZW5zZSBhbGwgcmVjaXBpZW50cyBvZiB5b3VyIGl0ZW1zIHRvIHVzZSBhbmQgcmUtZGlzdHJpYnV0ZSBvcmlnaW5hbCBhbmQgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhlIGl0ZW1zIGluIGJvdGggbWFjaGluZS1leGVjdXRhYmxlIGFuZCBzb3VyY2UgY29kZSBmb3Jtcy4gVGhlIHJlY2lwaWVudHMgbXVzdCBiZSBhYmxlIHRvIGRvIHNvIHdpdGhvdXQgYW55IGNoYXJnZXMgd2hhdHNvZXZlciwgYW5kIHRoZXkgbXVzdCBiZSBhYmxlIHRvIHJlLWRpc3RyaWJ1dGUgdG8gYW55b25lIHRoZXkgY2hvb3NlLgorCitjLiBJZiB0aGUgaXRlbXMgYXJlIG5vdCBhdmFpbGFibGUgdG8gdGhlIGdlbmVyYWwgcHVibGljLCBhbmQgdGhlIGluaXRpYWwgZGV2ZWxvcGVyIG9mIHRoZSBTb2Z0d2FyZSByZXF1ZXN0cyBhIGNvcHkgb2YgdGhlIGl0ZW1zLCB0aGVuIHlvdSBtdXN0IHN1cHBseSBvbmUuCisKK1Jlc3RyaWN0aW9uczoKKzEuIFlvdSBhcmUgbm90IGFsbG93ZWQgdG8gdXNlIHRoZSBCaW5hcnkgRGF0YSB0aGF0IGNvbWVzIHdpdGggdGhlIE9mZmljaWFsIEV0ZXJuYWwgTGFuZHMgQ2xpZW50IHdpdGhvdXQgb3VyIHByaW9yIGFwcHJvdmFsLgorMi4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSBvdXIgQmluYXJ5IERhdGEgaW4geW91ciBtb2RpZmllZCB2ZXJzaW9ucywgd2l0aG91dCBvdXIgYXBwcm92YWwuCiszLiBZb3UgbWF5IG5vdCB1c2Ugb3VyIFRyYWRlbWFya3MgKHN1Y2ggYXMgRXRlcm5hbCBMYW5kcyhUTSkpIGluIG1vZGlmZWQgdmVyc2lvbnMsIHdpdGhvdXQgb3VyIGFwcHJvdmFsLiBZb3UgY2FuIChhbmQgbXVzdCkgYWRkIGEgbm90aWNlIHN0YXRpbmcgdGhhdCB0aGUgY29kZSBpcyBhIE1vZGlmaWVkIFZlcnNpb24gb2YgdGhlIHRoZSBFdGVybmFsIExhbmRzIE9mZmljaWFsIENsaWVudC4KKzQuIFlvdSBtYXkgbm90IHVzZSBtb2RpZmllZCB2ZXJzaW9ucyB0byBjb25uZWN0IHRvIHRoZSBFdGVybmFsIExhbmRzIHNlcnZlciwgd2l0aG91dCBvdXIgYXBwcm92YWwuCisKK0xpbWl0YXRpb25zIG9mIExpYWJpbGl0eQorSW4gbm8gZXZlbnQgc2hhbGwgdGhlIGluaXRpYWwgZGV2ZWxvcGVycyBvciBjb3B5cmlnaHQgaG9sZGVycyBiZSBsaWFibGUgZm9yIGFueSBkYW1hZ2VzIHdoYXRzb2V2ZXIsIGluY2x1ZGluZyAtIGJ1dCBub3QgcmVzdHJpY3RlZCB0byAtIGxvc3QgcmV2ZW51ZSBvciBwcm9maXRzIG9yIG90aGVyIGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBldmVuIGlmIHRoZXkgaGF2ZSBiZWVuIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcywgZXhjZXB0IHRvIHRoZSBleHRlbnQgaW52YXJpYWJsZSBsYXcsIGlmIGFueSwgcHJvdmlkZXMgb3RoZXJ3aXNlLgorCitObyBXYXJyYW50eQorVGhlIFNvZnR3YXJlIGFuZCB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQgYXJlIHByb3ZpZGVkIEFTIElTIHdpdGggTk8gV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIElOQ0xVRElORyBUSEUgV0FSUkFOVFkgT0YgREVTSUdOLCBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCitDaG9pY2Ugb2YgTGF3CitUaGlzIGxpY2Vuc2UgaXMgZ292ZXJuZWQgYnkgdGhlIExhd3Mgb2YgUGVubnN5bHZhbmlhLCBVU0EuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9leGxqYnJpcy1mcmVlIGIvbGljZW5zZXMvZXhsamJyaXMtZnJlZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTI1MDk1Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvZXhsamJyaXMtZnJlZQpAQCAtMCwwICsxLDE5IEBACitUaGlzIGFncmVlbWVudCBpcyAqb25seSogZm9yIHRoZSBmcmVlIGZvbnRzIHRoYXQgY2FuIGJlIGRvd25sb2FkZWQgKmRpcmVjdGx5KgorZnJvbSBteSBzaXRlLgorCisgICAgKiBUaGlzIGZvbnQgaXMgZnJlZSBmb3IgcGVyc29uYWwgYW5kIGNvbW1lcmNpYWwgdXNlCisgICAgKiBUaGUgZm9udCBmaWxlL3NvZnR3YXJlIG1heSBiZSBtb2RpZmllZCB0byBzdWl0IGRlc2lnbiBvZiBzeXN0ZW0KKyAgICAgIHJlcXVpcmVtZW50cywgYnV0IHN0cmljdGx5IGZvciB5b3VyIG93biAocGVyc29uYWwgb3IgY29tbWVyY2lhbCkgdXNlLiBZb3UKKyAgICAgIG1heSBub3Qgc2VsbCBvciBkaXN0cmlidXRlIGl0CisgICAgKiBFbWJlZGRpbmcgKGluIFBERidzLCBGbGFzaCBmaWxlcyBhbmQgcHJvZ3JhbXMpIGlzIGFsbG93ZWQKKyAgICAqIFlvdSBtYXkgdXNlIHRoaXMgZm9udCBmb3IgRm9udC1GYWNlIGVtYmVkZGluZywgYnV0IG9ubHkgaWYgeW91IHB1dCBhIGxpbmsKKyAgICAgIHRvIHd3dy5leGxqYnJpcy5ubCBvbiB5b3VyIHBhZ2UgYW5kL29yIHB1dCB0aGlzIG5vdGljZSAvKiBBIGZvbnQgYnkgSm9zCisgICAgICBCdWl2ZW5nYSAoZXhsamJyaXMpIC0+IHd3dy5leGxqYnJpcy5jb20gKi8gaW4geW91ciBDU1MgZmlsZSBhcyBuZWFyIGFzCisgICAgICBwb3NzaWJsZSB0byB0aGUgcGllY2Ugb2YgY29kZSB0aGF0IGRlY2xhcmVzIHRoZSBGb250LUZhY2UgZW1iZWRkaW5nIG9mCisgICAgICB0aGlzIGZvbnQuCisgICAgKiBUaGlzIGZvbnQgbWF5IG5vdCBiZSBkaXN0cmlidXRlZCBvciBzb2xkIC1ub3Qgb25saW5lIG5vciBvbiBhbnkgbWVkaWEtCisgICAgICB3aXRob3V0IG15IHBlcm1pc3Npb24KKyAgICAqIFRoaXMgZm9udCBpcyBhbmQgcmVtYWlucyAoZXZlbiB3aGVuIG1vZGlmaWVkKSB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5CisgICAgICBvZiBKb3MgQnVpdmVuZ2EKKyAgICAqIGV4bGpicmlzIEZvbnQgRm91bmRyeSBpcyBub3QgbGlhYmxlIGZvciBhbnkgZGFtYWdlIHJlc3VsdGluZyBmcm9tIHRoZSB1c2UKKyAgICAgIG9mIHRoaXMgZm9udApkaWZmIC0tZ2l0IGEvbGljZW5zZXMvZmFpcnVzZSBiL2xpY2Vuc2VzL2ZhaXJ1c2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc4ZDI3OQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL2ZhaXJ1c2UKQEAgLTAsMCArMSw1IEBACitJdCBpcyBiZWxpZXZlZCB0aGF0IHNvbWUgdXNlcyBvZiBjb3B5cmlnaHRlZCBtYXRlcmlhbCwgZS5nLiBzaG9ydAorcXVvdGF0aW9ucywgbWF5IHF1YWxpZnkgYXMgImZhaXIgdXNlIiB1bmRlciBVbml0ZWQgU3RhdGVzIGNvcHlyaWdodCBsYXcuCisKK05vdGUsIGhvd2V2ZXIsIHRoYXQgdGhlcmUgaXMgbm8gd29ybGQtd2lkZSBwcmluY2lwbGUgb2YgZmFpciB1c2U7IHdoYXQKK2tpbmRzIG9mIHVzZSBhcmUgY29uc2lkZXJlZCAiZmFpciIgdmFyaWVzIGZyb20gY291bnRyeSB0byBjb3VudHJ5LgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvZmFzdGEgYi9saWNlbnNlcy9mYXN0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDk4MmQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvZmFzdGEKQEAgLTAsMCArMSwyNiBAQAorICAgICBDb3B5cmlnaHQgMTk4OCwgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCAxOTk1LCBieSBXaWxsaWFtCisgICAgIFIuIFBlYXJzb24gYW5kIHRoZSBVbml2ZXJzaXR5IG9mIFZpcmdpbmlhLiAgQWxsIHJpZ2h0cworICAgICByZXNlcnZlZC4gVGhlIEZBU1RBIHByb2dyYW0gYW5kIGRvY3VtZW50YXRpb24gbWF5IG5vdCBiZSBzb2xkIG9yCisgICAgIGluY29ycG9yYXRlZCBpbnRvIGEgY29tbWVyY2lhbCBwcm9kdWN0LCBpbiB3aG9sZSBvciBpbiBwYXJ0LAorICAgICB3aXRob3V0IHdyaXR0ZW4gY29uc2VudCBvZiBXaWxsaWFtIFIuIFBlYXJzb24gYW5kIHRoZSBVbml2ZXJzaXR5CisgICAgIG9mIFZpcmdpbmlhLiAgRm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHBlcm1pc3Npb24gZm9yCisgICAgIHVzZSBvciByZXByb2R1Y3Rpb24sIHBsZWFzZSBjb250YWN0OgorCisJICAgICBEYXZpZCBIdWRzb24KKwkgICAgIEFzc2lzdGFudCBQcm92b3N0IGZvciBSZXNlYXJjaAorCSAgICAgVW5pdmVyc2l0eSBvZiBWaXJnaW5pYQorCSAgICAgUC5PLiBCb3ggNDAwMzAxCisJICAgICBDaGFybG90dGVzdmlsbGUsIFZBICAyMjkwNi05MDI1CisKKwkgICAgICg0MzQpIDkyNC0zNjA2CisKKyAgICAgQ29kZSBpbiB0aGUgc21pdGhfd2F0ZXJtYW5fc3NlMi5jIGFuZCBzbWl0aF93YXRlcm1hbl9zc2UyLmggZmlsZXMKKyAgICAgaXMgY29weXJpZ2h0IChjKSAyMDA2IGJ5IE1pY2hhZWwgRmFycmFyLgorCisgICAgIFRoaXMgcHJvZ3JhbSBtYXkgbm90IGJlIHNvbGQgb3IgaW5jb3Jwb3JhdGVkIGludG8gYSBjb21tZXJjaWFsCisgICAgIHByb2R1Y3QsIGluIHdob2xlIG9yIGluIHBhcnQsIHdpdGhvdXQgd3JpdHRlbiBjb25zZW50IG9mIE1pY2hhZWwKKyAgICAgRmFycmFyLiAgRm9yIGZ1cnRoZXIgaW5mb3JtYXRpb24gcmVnYXJkaW5nIHBlcm1pc3Npb24gZm9yIHVzZSBvcgorICAgICByZXByb2R1Y3Rpb24sIHBsZWFzZSBjb250YWN0OiBNaWNoYWVsIEZhcnJhciBhdAorICAgICBmYXJyYXIubWljaGFlbEBnbWFpbC5jb20uCisKKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvZmluY2h0diBiL2xpY2Vuc2VzL2ZpbmNodHYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NkZjc4ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL2ZpbmNodHYKQEAgLTAsMCArMSwxMiBAQAorTGljZW5zZSBBZ3JlZW1lbnQKKworCitMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIGFncmVlbWVudCwgR2Vvc3BpemEgZ3JhbnRzIHRoZSB1c2VyICJ0aGUgQ3VzdG9tZXIiIGEgcGVycGV0dWFsLCBub250cmFuc2ZlcmFibGUsIG5vbmV4Y2x1c2l2ZSBsaWNlbnNlIHRvIHVzZSBGaW5jaFRWICJ0aGUgU29mdHdhcmUiLiBUaGUgQ3VzdG9tZXIgbWF5IG5vdCBzZWxsIHVuYXV0aG9yaXplZCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlIHdpdGhvdXQgR2Vvc3BpemEncyBwZXJtaXNzaW9uLiBUaGlzIGFncmVlbWVudCBkb2VzIG5vdCBvYmxpZ2F0ZSBHZW9zcGl6YSB0byBwcm92aWRlIHRoZSBDdXN0b21lciB3aXRoIHVwZGF0ZXMgb3IgZW5oYW5jZW1lbnRzIHRvIHRoZSBTb2Z0d2FyZSBvciBmdXR1cmUgdmVyc2lvbnMgb2YgdGhlIFNvZnR3YXJlLiAKKyAgICAgICAgICAgICAgICAKK1RpdGxlLiBHZW9zcGl6YSByZXRhaW5zIG93bmVyc2hpcCBvZiBhbGwgb2YgR2Vvc3BpemEncyBleGlzdGluZyBjb3B5cmlnaHQsIHRyYWRlIHNlY3JldCwgcGF0ZW50LCB0cmFkZW1hcmssIGFuZCBhbnkgb3RoZXIgcHJvcHJpZXRhcnkgcmlnaHRzIChjb2xsZWN0aXZlbHkgIkdlb3NwaXphIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMiKSBpbiBhbmQgdG8gdGhlIFNvZnR3YXJlLCBpbmNsdWRpbmcgYWxsIG1vZGlmaWNhdGlvbnMgb3IgaW1wcm92ZW1lbnRzLiBDdXN0b21lciBhY2tub3dsZWRnZXMgdGhhdCBpdCByZWNlaXZlcyBvbmx5IGEgbGljZW5zZSB0byB1c2UgdGhlIFNlcnZlciBhbmQgU29mdHdhcmUgdW5kZXIgdGhpcyBhZ3JlZW1lbnQuCisKK0FkZGl0aW9uYWwgUmVzdHJpY3Rpb25zLiBDdXN0b21lciB3aWxsIG5vdCBtb2RpZnkgb3IgY2hhbmdlIHRoZSBTb2Z0d2FyZSB3aXRob3V0IEdlb3NwaXphJ3MgcHJpb3Igd3JpdHRlbiBjb25zZW50LiBDdXN0b21lciB3aWxsIG5vdCBkZWNvbXBpbGUsIGRpc2Fzc2VtYmxlLCBvciBvdGhlcndpc2UgcmV2ZXJzZSBlbmdpbmVlciB0aGUgU29mdHdhcmUuIEN1c3RvbWVyIGFncmVlcyB0aGF0IGl0IHdpbGwgbm90IHVzZSwgZGlzY2xvc2UsIG9yIG90aGVyd2lzZSBjb21tdW5pY2F0ZSBhbnkgaW5mb3JtYXRpb24gd2l0aCByZXNwZWN0IHRvIHRoZSBTb2Z0d2FyZSB0aGF0IG1pZ2h0IHJlYXNvbmFibHkgYmUgZXhwZWN0ZWQgdG8gZW5hYmxlIGNvcHlpbmcgb2YgYWxsIG9yIGFueSBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuIEN1c3RvbWVyIGFncmVlcyB0byB0YWtlIHJlYXNvbmFibGUgYWN0aW9ucyB0byBwcmV2ZW50IHRoZSBkaXNjbG9zdXJlIHRvIHRoaXJkIHBhcnRpZXMgb2YgYW55IGluZm9ybWF0aW9uIGlkZW50aWZpZWQgYnkgR2Vvc3BpemEgYXMgR2Vvc3BpemEgY29uZmlkZW50aWFsIG9yIHByb3ByaWV0YXJ5IGluZm9ybWF0aW9uLgorCitXYXJyYW50aWVzLCBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eSwgYW5kIEluZGVtbmlmaWNhdGlvbi4gVGhlIFNvZnR3YXJlIHdpbGwgYmUgZGVsaXZlcmVkIHRvIHRoZSBDdXN0b21lciAiYXMgaXMuIiAgR0VPU1BJWkEgTUFLRVMgTk8gV0FSUkFOVElFUywgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORyBXQVJSQU5USUVTIEFTIFRPIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gR2Vvc3BpemEgd2lsbCBub3QgYmUgbGlhYmxlIGZvciBzcGVjaWFsLCBwdW5pdGl2ZSwgaW5kaXJlY3QsIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIHVuZGVyIHRoaXMgYWdyZWVtZW50IHdoZXRoZXIgYXJpc2luZyBmcm9tIGNvbnRyYWN0IG9yIG5lZ2xpZ2VuY2UuIEluIG5vIGV2ZW50IHdpbGwgR2Vvc3BpemEncyBsaWFiaWxpdHkgdG8gQ3VzdG9tZXIgdW5kZXIgYW55IGNsYWltIGV4Y2VlZCB0aGUgdG90YWwgYW1vdW50IHBhaWQgdG8gR2Vvc3BpemEgYnkgQ3VzdG9tZXIgdW5kZXIgdGhpcyBhZ3JlZW1lbnQuIE5vIGNsYWltIG9yIGFjdGlvbiByZWxhdGluZyB0byB0aGlzIGFncmVlbWVudCBtYXkgYmUgaW5zdGl0dXRlZCBtb3JlIHRoYW4gdHdvICgyKSB5ZWFycyBhZnRlciB0aGUgZXZlbnQgZ2l2aW5nIHJpc2UgdG8gc3VjaCBhY3Rpb24gb3IgY2xhaW0uCisgICAgICAgICAgICAgICAgCitHZW5lcmFsIFByb3Zpc2lvbnMuIFdhc2hpbmd0b24gc3RhdGUgbGF3IHdpbGwgZ292ZXJuIHRoaXMgYWdyZWVtZW50LiBBIGRldGVybWluYXRpb24gdGhhdCBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQsIGlsbGVnYWwsIG9yIHVuZW5mb3JjZWFibGUgd2lsbCBub3QgYWZmZWN0IHRoZSBlbmZvcmNlYWJpbGl0eSBvZiBhbnkgb3RoZXIgcHJvdmlzaW9uLiBOZWl0aGVyIHBhcnR5IHdpbGwgYmUgZGVlbWVkIGFuIGFnZW50IG9mIHRoZSBvdGhlciBwYXJ0eSBmb3IgYW55IHB1cnBvc2UgYW5kIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgcGFydGllcyB3aWxsIG9ubHkgYmUgdGhhdCBvZiBpbmRlcGVuZGVudCBjb250cmFjdG9ycy4gQ3VzdG9tZXIgYWdyZWVzIHRoYXQgaXQgd2lsbCBjb21wbHkgd2l0aCBhbGwgYXBwbGljYWJsZSBVbml0ZWQgU3RhdGVzIGV4cG9ydCByZWd1bGF0aW9ucy4gQ3VzdG9tZXIgZnVydGhlciBhY2tub3dsZWRnZXMgdGhhdCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUgbWF5IGhhdmUgYmVlbiBkZXZlbG9wZWQgdXNpbmcgZnVuZGluZyBmcm9tIHRoZSBVbml0ZWQgU3RhdGVzIEdvdmVybm1lbnQuIFRoaXMgQWdyZWVtZW50IGlzIHN1YmplY3QgdG8gdGhlIGxpbWl0ZWQgcmlnaHRzIGdyYW50ZWQgdG8gdGhlIEdvdmVybm1lbnQgaW4gdGhlIGZ1bmRpbmcgYWdyZWVtZW50LiBBbnkgU29mdHdhcmUgc3VwcGxpZWQgZGlyZWN0bHkgdG8gdGhlIFVuaXRlZCBTdGF0ZXMgR292ZXJubWVudCBpcyBjbGFzc2lmaWVkIGFzICJyZXN0cmljdGVkIGNvbXB1dGVyIHNvZnR3YXJlIiBhcyBkZWZpbmVkIGJ5IHNlY3Rpb24gNTIuMjI3LTE5IG9mIHRoZSBGQVIgYW5kIHNlY3Rpb24gMjUyLjIyNy03MDEzIG9mIHRoZSBERkFSUy4gQWxsIG5vdGljZXMgYW5kIG90aGVyIGNvbW11bmljYXRpb25zIHJlcXVpcmVkIHVuZGVyIHRoaXMgYWdyZWVtZW50IHdpbGwgYmUgaW4gd3JpdGluZyBhbmQgZGVlbWVkIHRvIGhhdmUgYmVlbiByZWNlaXZlZCB3aGVuIHBlcnNvbmFsbHkgZGVsaXZlcmVkIG9yIHdoZW4gZGVwb3NpdGVkIGluIHRoZSBVbml0ZWQgU3RhdGVzIG1haWwgc2VudCByZWdpc3RlcmVkIG1haWwgYnkgZmlyc3QtY2xhc3MgcG9zdGFnZSBwcmVwYWlkLCBhZGRyZXNzZWQgYXMgc2V0IGZvcnRoIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhpcyBhZ3JlZW1lbnQuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9mbW9kIGIvbGljZW5zZXMvZm1vZApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODg2MDhkCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvZm1vZApAQCAtMCwwICsxLDI4IEBACitOb3RlOiBUaGlzIGxpY2Vuc2UgaXMgZnJvbSBkb2N1bWVudGF0aW9uL0xJQ0VOU0UudHh0IGluY2x1ZGVkIGluIGZtb2RhcGk0MzgwMmxpbnV4LnRhci5neiB3aXRoIEJTRCBhbmQgQlNELTIgc3RyaXBwZWQgb3V0IGZyb20gaXQKKworRk1PRCBFeCBTb3VuZFN5c3RlbSBDb3B5cmlnaHQgwqkgMjAwNS0yMDExIEZpcmVsaWdodCBUZWNobm9sb2dpZXMgUHR5LCBMdGQuCisKK0ZNT0QgTk9OLUNPTU1FUkNJQUwgTElDRU5TRQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJRiBZT1VSIFBST0RVQ1QgSVMgTk9UIElOVEVOREVEIEZPUiBDT01NRVJDSUFMIEdBSU4gQU5EIERPRVMgTk9UCitJTkNMVURFIFRIRSBGTU9EIExJQlJBUlkgRk9SIFJFU0FMRSwgTElDRU5TRSBPUiBPVEhFUiBDT01NRVJDSUFMCitESVNUUklCVVRJT04sIFRIRU4gVVNFIE9GIEZNT0QgSVMgRlJFRSBPRiBDSEFSR0UuICBUSEVSRSBBUkUgTk8KK0xJQ0VOU0UgRkVFUyBGT1IgTk9OLUNPTU1FUkNJQUwgQVBQTElDQVRJT05TLgorCitDT05ESVRJT05TL0xJTUlUQVRJT05TOgorLSBXSEVOIFVTSU5HIFRISVMgTElDRU5TRSwgVEhFIEZNT0QgTElCUkFSWSBDQU5OT1QgQkUgVVNFRCBGT1IKKyAgUkVTQUxFIE9SIE9USEVSIENPTU1FUkNJQUwgRElTVFJJQlVUSU9OCistIFRISVMgTElDRU5TRSBDQU5OT1QgQkUgVVNFRCBGT1IgUFJPRFVDVFMgV0hJQ0ggRE8gTk9UIE1BS0UKKyAgUFJPRklUIEJVVCBBUkUgU1RJTEwgQ09NTUVSQ0lBTExZIFJFTEVBU0VECistIFRISVMgTElDRU5TRSBDQU5OT1QgQkUgVVNFRCBGT1IgQ09NTUVSQ0lBTCBTRVJWSUNFUywgV0hFUkUgVEhFCisgIEVYRUNVVEFCTEUgQ09OVEFJTklORyBGTU9EIElTIE5PVCBTT0xELCBCVVQgVEhFIERBVEEgSVMuCistIFdIRU4gVVNJTkcgRk1PRCwgQSBDUkVESVQgTElORSBJUyBSRVFVSVJFRCBJTiBFSVRIRVIgRE9DVU1FTlRBVElPTiwKKyAgT1IgJ09OIFNDUkVFTicgRk9STUFUIChJRiBQT1NTSUJMRSkuIElUIFNIT1VMRCBDT05UQUlOIEFUIExFQVNUCisgIFRIRSBXT1JEUyBGTU9EIFNPVU5EIFNZU1RFTSBBTkQgRklSRUxJR0hUIFRFQ0hOT0xPR0lFUy4KKyAgTE9HT1MgQVJFIEFWQUlMQUJMRSBGT1IgQk9YIE9SIE1BTlVBTCBBUlQsIEJVVCBBUkUgTk9UIE1BTkRBTlRPUlkuCisgIEFOIEVYQU1QTEUgQ1JFRElUIENPVUxEIEJFOgorCisgIEZNT0QgU291bmQgU3lzdGVtLCBjb3B5cmlnaHQgwqkgRmlyZWxpZ2h0IFRlY2hub2xvZ2llcyBQdHksIEx0ZC4sIDE5OTQtMjAxMS4KKworICBOT1RFIFRISVMgSU4gQURWQU5DRSwgQVMgSVQgTVVTVCBCRSBET05FIEJFRk9SRSBTSElQUElORyBZT1VSCisgIFBST0RVQ1QgV0lUSCBGTU9ELgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvZm1vZC0zLjc1IGIvbGljZW5zZXMvZm1vZC0zLjc1Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhYzRlOWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9mbW9kLTMuNzUKQEAgLTAsMCArMSw0NSBAQAorTm90ZTogVGhpcyBsaWNlbnNlIGlzIGZyb20gUkVBRE1FLnR4dCBpbmNsdWRlZCBpbiBmbW9kYXBpMzc1bGludXgudGFyLmd6CisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZNT0QgMy43NQorICAgICAgICAgICAgICBDb3B5cmlnaHQgKGMpIEZpcmVsaWdodCBUZWNobm9sb2dpZXMgUHR5LCBMdGQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5OTQgLSAyMDA0CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaHR0cDovL3d3dy5mbW9kLm9yZworCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitGTU9EIEVuZCBVc2VyIExpY2Vuc2UgQWdyZWVtZW50CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZNT0QncyBuYW1lcywgc291cmNlcywgZG9jdW1lbnRhdGlvbiBhbmQgYmluYXJpZXMgY29udGFpbmVkIHdpdGhpbiB0aGUKK2Rpc3RyaWJ1dGVkIGFyY2hpdmUgYXJlIGNvcHlyaWdodCDCqSBGaXJlbGlnaHQgVGVjaG5vbG9naWVzLCBQdHksIEx0ZC4KKzE5OTQtMjAwNC4KKworVGhlIGNvbnRlbnRzIG9mIHRoZSBGTU9EIGRpc3RyaWJ1dGlvbiBhcmNoaXZlIG1heSBub3QgYmUgcmVkaXN0cmlidXRlZCwKK3JlcHJvZHVjZWQsIG1vZGlmaWVkLCB0cmFuc21pdHRlZCwgYnJvYWRjYXN0LCBwdWJsaXNoZWQgb3IgYWRhcHRlZCBpbiBhbnkKK3dheSwgc2hhcGUgb3IgZm9ybSwgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIHRoZSBvd25lciwKK0ZpcmVsaWdodCBUZWNobm9sb2dpZXMsIGJlIGl0IGJ5IHRhbmdpYmxlIG9yIG5vbiB0YW5naWJsZSBtZWRpYS4KK1RoZSBkeW5hbWljYWxseSBsaW5rYWJsZSBmaWxlcyBmcm9tIHRoZSBGTU9EIGRpc3RyaWJ1dGlvbiBhcmNoaXZlIG1heSBiZQorcmVkaXN0cmlidXRlZCB3aXRob3V0IHRoZSBhdXRob3JzIHByaW9yIHBlcm1pc3Npb24sIGFuZCBtdXN0IHJlbWFpbiB1bm1vZGlmaWVkLgorVGhlIHVzZSBvZiBkbGwgJ3N0YXRpYyBsaW5raW5nJyB0b29scyB0aGF0IGFpbSB0byBoaWRlIHRoZSBmbW9kIGxpYnJhcnkgYXJlCitmb3JiaWRkZW4uCisKK0ZNT0QgbWF5IG5vdCBiZSB1c2VkIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0LCBvciBwcm9kdWN0IHRoYXQgZGlyZWN0bHkgb3IKK2luZGlyZWN0bHkgcmVjZWl2ZXMgaW5jb21lIHdpdGggdGhlIGFpZCBvZiB0aGUgRk1PRCBzb3VuZCBsaWJyYXJ5LCB3aXRob3V0CithIGNvbW1lcmNpYWwgbGljZW5zZSBmcm9tIEZpcmVsaWdodCBUZWNobm9sb2dpZXMuICBSZWxlYXNpbmcgYSBwcm9kdWN0Cit3aXRob3V0IGEgY29tbWVyY2lhbCBsaWNlbnNlIGluIHRoaXMgaW5zdGFuY2UgaXMgYSBicmVhY2ggb2YgdGhlIEZNT0QgRVVMQQorYW5kIHBhcnRpZXMgd2hvIHZpb2xhdGUgdGhpcyBsaWNlbnNlIHdpbGwgYmUgcHJvc2VjdXRlZCB1bmRlciB0aGUgZnVsbAorZXh0ZW50IG9mIHRoZSBsYXcuCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKK2BgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKK0xJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUgorQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCitFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCitQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKK1BST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCitORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvZm9sZGluZy1hdC1ob21lIGIvbGljZW5zZXMvZm9sZGluZy1hdC1ob21lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNDIwZTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9mb2xkaW5nLWF0LWhvbWUKQEAgLTAsMCArMSw0MyBAQAorRm9sZGluZ0BIb21lIGRpc3RyaWJ1dGVkIHByb3RlaW4gc2VxdWVuY2UgZGVzaWduIGNsaWVudAorCitDb3B5cmlnaHQgMjAwMS0yMDA0LiAgU3RhbmZvcmQgVW5pdmVyc2l0eS4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworTGljZW5zZSBBZ3JlZW1lbnQ6CisKK1BsZWFzZSBjYXJlZnVsbHkgcmVhZCB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zCitiZWZvcmUgdXNpbmcgdGhpcyBzb2Z0d2FyZS4gVXNlIG9mIHRoaXMgc29mdHdhcmUgaW5kaWNhdGVzIAorYWNjZXB0YW5jZSBvZiB0aGlzIGxpY2Vuc2UgYWdyZWVtZW50IGFuZCBkaXNjbGFpbWVyIG9mIGFsbCAKK3dhcnJhbnRpZXMuCisKK0Rpc2NsYWltZXIgb2YgV2FycmFudHk6CisKK0lOIE5PIEVWRU5UIFNIQUxMIFNUQU5GT1JEIFVOSVZFUlNJVFkgQkUgTElBQkxFIFRPIEFOWSBQQVJUWSBGT1IgRElSRUNULCAKK0lORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIAorSU5DTFVESU5HIExPU1QgUFJPRklUUywgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFIAorQU5EIElUUyBET0NVTUVOVEFUSU9OLCBFVkVOIElGIFNUQU5GT1JEIFVOSVZFUlNJVFkgSEFTIEJFRU4gQURWSVNFRCBPRiAKK1RIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAgCitTVEFORk9SRCBVTklWRVJTSVRZIFNQRUNJRklDQUxMWSBESVNDTEFJTVMgQU5ZIFdBUlJBTlRJRVMsIElOQ0xVRElORywgCitCVVQgTk9UTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgCitBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBTT0ZUV0FSRSBBTkQgCitBQ0NPTVBBTllJTkcgRE9DVU1FTlRBVElPTiBQUk9WSURFRCBIRVJFVU5ERVIgSVMgUFJPVklERUQgCisiQVMgSVMiLiBGb2xkaW5nQGhvbWUgSEFTIE5PIE9CTElHQVRJT04gVE8gUFJPVklERSBNQUlOVEVOQU5DRSwgCitTVVBQT1JULCBVUERBVEVTLCBFTkhBTkNFTUVOVFMsIE9SIE1PRElGSUNBVElPTlMuCisKK1Jlc3RyaWN0aW9uczoKKworWW91IG1heSB1c2UgdGhpcyBzb2Z0d2FyZSBvbiBhIGNvbXB1dGVyIHN5c3RlbSBvbmx5IGlmIHlvdQorb3duIHRoZSBzeXN0ZW0gb3IgaGF2ZSB0aGUgcGVybWlzc2lvbiBvZiB0aGUgb3duZXIuCisKK1lvdSBtYXkgbm90IGFsdGVyIHRoZSBzb2Z0d2FyZSBvciBhc3NvY2lhdGVkIGRhdGEgZmlsZXMuCisKK1lvdSBtYXkgb25seSB1c2UgdW5tb2RpZmllZCB2ZXJzaW9ucyBvZiBGb2xkaW5nQGhvbWUgb2J0YWluZWQgCit0aHJvdWdoIGF1dGhvcml6ZWQgZGlzdHJpYnV0b3JzIHRvIGNvbm5lY3QgdG8gdGhlIEZvbGRpbmdASG9tZSAKK3NlcnZlcnMuIFVzZSBvZiBvdGhlciBzb2Z0d2FyZSB0byBjb25uZWN0IHRvIHRoZSBGb2xkaW5nQGhvbWUgCitzZXJ2ZXJzIGlzIHN0cmljdGx5IHByb2hpYml0ZWQuCisKK0Rpc3RyaWJ1dGlvbiBvZiB0aGlzIHNvZnR3YXJlIGlzIHByb2hpYml0ZWQuIEl0IG1heSBvbmx5IGJlIAorb2J0YWluZWQgYnkgZG93bmxvYWRpbmcgZnJvbSBTdGFuZm9yZCdzIHdlYiBzaXRlCisoaHR0cDovL2ZvbGRpbmcuc3RhbmZvcmQuZWR1IGFuZCBwYWdlcyBsaW5rZWQgdGhlcmVpbikuCisKKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvZnBpbmcgYi9saWNlbnNlcy9mcGluZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjEwYjM1Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvZnBpbmcKQEAgLTAsMCArMSwxNSBAQAorCisvKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3JtcyBhcmUgcGVybWl0dGVkCisgKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBhcmFncmFwaCBhcmUKKyAqIGR1cGxpY2F0ZWQgaW4gYWxsIHN1Y2ggZm9ybXMgYW5kIHRoYXQgYW55IGRvY3VtZW50YXRpb24sCisgKiBhZHZlcnRpc2luZyBtYXRlcmlhbHMsIGFuZCBvdGhlciBtYXRlcmlhbHMgcmVsYXRlZCB0byBzdWNoCisgKiBkaXN0cmlidXRpb24gYW5kIHVzZSBhY2tub3dsZWRnZSB0aGF0IHRoZSBzb2Z0d2FyZSB3YXMgZGV2ZWxvcGVkCisgKiBieSBTdGFuZm9yZCBVbml2ZXJzaXR5LiAgVGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbWF5IG5vdCBiZSB1c2VkIAorICogdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgCisgKiBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCmRpZmYgLS1naXQgYS9saWNlbnNlcy9mcmVlLW5vbmNvbW0gYi9saWNlbnNlcy9mcmVlLW5vbmNvbW0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE3MTIxMQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL2ZyZWUtbm9uY29tbQpAQCAtMCwwICsxIEBACitGcmVlIGZvciBub24tY29tbWVyY2lhbCB1c2UuICBDb21tZXJjaWFsIHVzZXJzIG11c3QgY29udGFjdCB0aGUgYXV0aG9ycy4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL2ZyZWVkaXN0IGIvbGljZW5zZXMvZnJlZWRpc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Y4M2U5MgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL2ZyZWVkaXN0CkBAIC0wLDAgKzEgQEAKK0ZyZWVseSBEaXN0cmlidXRhYmxlLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvZnJlZW1hcmtlciBiL2xpY2Vuc2VzL2ZyZWVtYXJrZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2E2MTdjYgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL2ZyZWVtYXJrZXIKQEAgLTAsMCArMSw0NiBAQAorRnJlZU1hcmtlciAxLnggd2FzIHJlbGVhc2VkIHVuZGVyIHRoZSBMR1BMIGxpY2Vuc2UuIExhdGVyLCBieSBjb21tdW5pdHkKK2NvbnNlbnN1cywgd2UgaGF2ZSBzd2l0Y2hlZCBvdmVyIHRvIGEgQlNELXN0eWxlIGxpY2Vuc2UuIEFzIG9mIEZyZWVNYXJrZXIKKzIuMnByZTEsIHRoZSBvcmlnaW5hbCBhdXRob3IsIEJlbmphbWluIEdlZXIsIGhhcyByZWxpbnF1aXNoZWQgdGhlIGNvcHlyaWdodCBpbgorYmVoYWxmIG9mIFZpc2lnb3RoIFNvZnR3YXJlIFNvY2lldHkuIFRoZSBjdXJyZW50IGNvcHlyaWdodCBob2xkZXIgaXMgdGhlCitWaXNpZ290aCBTb2Z0d2FyZSBTb2NpZXR5LgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NvcHlyaWdodCAoYykgMjAwMyBUaGUgVmlzaWdvdGggU29mdHdhcmUgU29jaWV0eS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisyLiAgVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sIGlmIGFueSwgbXVzdAorICAgIGluY2x1ZGUgdGhlIGZvbGxvd2luZyBhY2tub3dsZWdlbWVudDoKKyAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQorICAgICAgVmlzaWdvdGggU29mdHdhcmUgU29jaWV0eSAoaHR0cDovL3d3dy52aXNpZ290aHMub3JnLykuIgorICAgIEFsdGVybmF0ZWx5LCB0aGlzIGFja25vd2xlZ2VtZW50IG1heSBhcHBlYXIgaW4gdGhlIHNvZnR3YXJlIGl0c2VsZiwgaWYgYW5kCisgICAgd2hlcmV2ZXIgc3VjaCB0aGlyZC1wYXJ0eSBhY2tub3dsZWdlbWVudHMgbm9ybWFsbHkgYXBwZWFyLgorCiszLiAgTmVpdGhlciB0aGUgbmFtZSAiRnJlZU1hcmtlciIsICJWaXNpZ290aCIsIG5vciBhbnkgb2YgdGhlIG5hbWVzIG9mIHRoZQorICAgIHByb2plY3QgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbgorICAgIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IHZpc2lnb3Roc0B2aXNpZ290aHMub3JnLgorCis0LiAgUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIkZyZWVNYXJrZXIiIG9yCisgICAgIlZpc2lnb3RoIiBub3IgbWF5ICJGcmVlTWFya2VyIiBvciAiVmlzaWdvdGgiIGFwcGVhciBpbiB0aGVpciBuYW1lcworICAgIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBWaXNpZ290aCBTb2Z0d2FyZSBTb2NpZXR5LgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsCitJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5ECitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitWSVNJR09USCBTT0ZUV0FSRSBTT0NJRVRZIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAorSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCitCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwKK0VWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkgaW5kaXZpZHVhbHMgb24KK2JlaGFsZiBvZiB0aGUgVmlzaWdvdGggU29mdHdhcmUgU29jaWV0eS4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIFZpc2lnb3RoCitTb2Z0d2FyZSBTb2NpZXR5LCBwbGVhc2Ugc2VlIGh0dHA6Ly93d3cudmlzaWdvdGhzLm9yZy8KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL2ZyZWV0dHMgYi9saWNlbnNlcy9mcmVldHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkYjY2MTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9mcmVldHRzCkBAIC0wLDAgKzEsMzAgQEAKK1BvcnRpb25zIENvcHlyaWdodCAyMDAxLDIwMDIgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiAgCitQb3J0aW9ucyBDb3B5cmlnaHQgMTk5OS0yMDAxIExhbmd1YWdlIFRlY2hub2xvZ2llcyBJbnN0aXR1dGUsCitDYXJuZWdpZSBNZWxsb24gVW5pdmVyc2l0eS4gIAorQWxsIFJpZ2h0cyBSZXNlcnZlZC4gIFVzZSBpcyBzdWJqZWN0IHRvIGxpY2Vuc2UgdGVybXMuCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byB1c2UgYW5kIGRpc3RyaWJ1dGUKK3RoaXMgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZword2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLAorZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwgY29waWVzIG9mIHRoaXMgd29yaywgYW5kIHRvCitwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoaXMgd29yayBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8KK3RoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworIDEuIFRoZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YKKyAgICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgMi4gQW55IG1vZGlmaWNhdGlvbnMgbXVzdCBiZSBjbGVhcmx5IG1hcmtlZCBhcyBzdWNoLgorIDMuIE9yaWdpbmFsIGF1dGhvcnMnIG5hbWVzIGFyZSBub3QgZGVsZXRlZC4KKyA0LiBUaGUgYXV0aG9ycycgbmFtZXMgYXJlIG5vdCB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbgorICAgIHBlcm1pc3Npb24uCisKK1NVTiBNSUNST1NZU1RFTVMsIElOQy4sIENBUk5FR0lFIE1FTExPTiBVTklWRVJTSVRZIEFORCBUSEUKK0NPTlRSSUJVVE9SUyBUTyBUSElTIFdPUksgRElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUworU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQKK0ZJVE5FU1MsIElOIE5PIEVWRU5UIFNIQUxMIFNVTiBNSUNST1NZU1RFTVMsIElOQy4sIENBUk5FR0lFIE1FTExPTgorVU5JVkVSU0lUWSBOT1IgVEhFIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRgorVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SCitPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SCitQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorCmRpZmYgLS1naXQgYS9saWNlbnNlcy9mcm96ZW5ieXRlLWV1bGEgYi9saWNlbnNlcy9mcm96ZW5ieXRlLWV1bGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJhZDMzZgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL2Zyb3plbmJ5dGUtZXVsYQpAQCAtMCwwICsxLDM3IEBACitFTkQgVVNFUiBMSUNFTlNFIEFHUkVFTUVOVCAoRU5HTElTSCkKKworUGxlYXNlIHJlYWQgdGhlIGZvbGxvd2luZyBFbmQgVXNlciBMaWNlbnNlIEFncmVlbWVudCBjYXJlZnVsbHkuIEJ5IHByb2NlZWRpbmcKK3dpdGggdGhlIGluc3RhbGxhdGlvbiwgeW91IGFncmVlIHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIGFncmVlbWVudC4KK0lmIHlvdSBkbyBub3QgYWNjZXB0LCBwbGVhc2UgcXVpdCB0aGUgaW5zdGFsbGVyIGFuZCBkbyBub3QgaW5zdGFsbCB0aGUgZ2FtZS4KKworVGhlIGdhbWUgYW5kIHJlbGF0ZWQgc29mdHdhcmUgKGNvbGxlY3RpdmVseSB0aGUgIlNvZnR3YXJlIikgaXMgdGhlIGNvcHlyaWdodGVkCit3b3JrIG9mIEZyb3plbmJ5dGUgTHRkLCBhbmQgQWx0ZXJuYXRpdmUgR2FtZXMgTHRkLCBleGNlcHQgd2hlcmUgb3RoZXJ3aXNlIG5vdGVkLgorQWxsIFJpZ2h0cyBSZXNlcnZlZC4gQWxsIHVzZSBvZiB0aGUgU29mdHdhcmUgaXMgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMKK0VuZCBVc2VyIExpY2Vuc2UgQWdyZWVtZW50LiBZb3UgYXJlIG9ubHkgYWxsb3dlZCB0byB1c2UgdGhlIFNvZnR3YXJlIGZvciB5b3VyCitvd24gdXNlLiBBbnkgdXNlLCByZXByb2R1Y3Rpb24gb3IgcmVkaXN0cmlidXRpb24gb2YgdGhlIFNvZnR3YXJlIG5vdCBleHByZXNzbHkKK3N0YXRlZCBoZXJlaW4gb3IgaW4gb3RoZXIgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uLCBpcyBzdHJpY3RseSBwcm9oaWJpdGVkLgorCitUaGUgU29mdHdhcmUgaXMgcHJvdmlkZWQgImFzLWlzIiwgd2l0aG91dCBhbnkgd2FycmFudHkuIFRvIG1heGltdW0gZXh0ZW50CitwZXJtaXR0ZWQgYnkgdGhlIGFwcGxpY2FibGUgbGF3LCBpbiBubyBldmVudCBzaGFsbCBGcm96ZW5ieXRlIG9yIEFsdGVybmF0aXZlCitHYW1lcyBvciBhbnkgb2YgdGhlIGNvbXBvbmVudCBtYW51ZmFjdHVyZXJzIG9yIGxpY2Vuc29ycyBiZSBoZWxkIGxpYWJsZSBmb3IKK2FueSBkYW1hZ2VzIGFyaXNpbmcgZnJvbSB0aGUgdXNlIG9mIG9yIG1hbGZ1bmN0aW9uIG9mIHRoZSBTb2Z0d2FyZS4KKworWW91IGFyZSBhbGxvd2VkIHRvIGluc3RhbGwgdGhlIFNvZnR3YXJlIG9uIG9uZSBjb21wdXRlciBvbmx5LiBZb3UgYXJlIGFsbG93ZWQKK3RvIGNyZWF0ZSBvbmUgYmFja3VwIGNvcHkgb2YgdGhlIG1lZGlhIGRpc2Mgb3IgaW5zdGFsbGF0aW9uIGZpbGVzLiBBbGwgb3RoZXIKK2FjdGl2aXRpZXMgYXJlIGZvcmJpZGRlbi4gRnVydGhlcm1vcmUsIHlvdSBhcmUgZXhwbGljaXRseSBub3QgYWxsb3dlZCB0bworZGVjb21waWxlLCByZXByb2R1Y2UsIHJldmVyc2UgZW5naW5lZXIgb3IgaW4gb3RoZXIgd2F5IGRpc2Fzc2VtYmxlIHRoZSBTb2Z0d2FyZQorb3IgYW55IG9mIGl0cyBjb21wb25lbnRzLCBvciByZWRpc3RyaWJ1dGUgb3IgZXhwb3J0IHRoZSBTb2Z0d2FyZSBvciBpdHMKK2NvbXBvbmVudHMgaW4gYSB3YXkgdGhhdCB3b3VsZCByZXN1bHQgaW4gdmlvbGF0aW9uIG9mIGFueSByZWd1bGF0aW9ucyBvciBsYXdzLAorYW5kIHNwZWNpZmljYWxseSB0aGUgVS5TLiBleHBvcnQgbGF3cy4KKworRnJvemVuYnl0ZSByZXRhaW5zIHRoZSByaWdodCB0byBhbHRlciBhbmQgbW9kaWZ5IHRoZXNlIGxpY2Vuc2UgdGVybXMgaW4gYW55IHdheQorYXQgYW55IHRpbWUuCisKK0J5IGluc3RhbGxpbmcgb3Igb3RoZXJ3aXNlIHVzaW5nIHRoaXMgU29mdHdhcmUsIHlvdSBhY2tub3dsZWRnZSB0byBoYXZlIHJlYWQgYW5kCit1bmRlcnN0b29kIHRoZSB0ZXJtcyBpbiB0aGlzIGFncmVlbWVudCBhbmQgYWdyZWUgdG8gYmUgYm91bmQgYnkgdGhlc2UgdGVybXMuIElmCit5b3UgZG8gbm90IGFncmVlIHdpdGggdGhlIHRlcm1zLCBjYW5jZWwgdGhlIGluc3RhbGxhdGlvbi4KKworRnJvemVuYnl0ZSBMdGQuCitBbHRlcm5hdGl2ZSBHYW1lcyBMdGQuCisKK2h0dHA6Ly93d3cuZnJvemVuYnl0ZS5jb20KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL2dTT0FQIGIvbGljZW5zZXMvZ1NPQVAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTRkNzgzZgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL2dTT0FQCkBAIC0wLDAgKzEsNDkyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL1czQy8vRFREIEhUTUwgNC4wIFRyYW5zaXRpb25hbC8vRU4iCisgICAgICAgICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi9SRUMtaHRtbDQwL2xvb3NlLmR0ZCI+Cis8aHRtbD4KKzxtZXRhIG5hbWU9IkdFTkVSQVRPUiIgY29udGVudD0iVHRIIDMuNzIiPgorPG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9SVNPLTg4NTktMSI+CisgPHN0eWxlIHR5cGU9InRleHQvY3NzIj4gZGl2LnAgeyBtYXJnaW4tdG9wOiA3cHQ7fTwvc3R5bGU+CisgPHN0eWxlIHR5cGU9InRleHQvY3NzIj48IS0tCisgdGQgZGl2LmNvbXAgeyBtYXJnaW4tdG9wOiAtMC42ZXg7IG1hcmdpbi1ib3R0b206IC0xZXg7fQorIHRkIGRpdi5jb21iIHsgbWFyZ2luLXRvcDogLTAuNmV4OyBtYXJnaW4tYm90dG9tOiAtLjZleDt9CisgdGQgZGl2LmhyY29tcCB7IGxpbmUtaGVpZ2h0OiAwLjk7IG1hcmdpbi10b3A6IC0wLjhleDsgbWFyZ2luLWJvdHRvbTogLTFleDt9CisgdGQgZGl2Lm5vcm0ge2xpbmUtaGVpZ2h0Om5vcm1hbDt9Cisgc3Bhbi5yb21hbiB7Zm9udC1mYW1pbHk6IHNlcmlmOyBmb250LXN0eWxlOiBub3JtYWw7IGZvbnQtd2VpZ2h0OiBub3JtYWw7fQorIHNwYW4ub3ZlcmFjYzIge3Bvc2l0aW9uOiByZWxhdGl2ZTsgIGxlZnQ6IC44ZW07IHRvcDogLTEuMmV4O30KKyBzcGFuLm92ZXJhY2MxIHtwb3NpdGlvbjogcmVsYXRpdmU7ICBsZWZ0OiAuNmVtOyB0b3A6IC0xLjJleDt9IC0tPjwvc3R5bGU+CisKKworPHRpdGxlPiAgZ1NPQVAgUHVibGljIExpY2Vuc2U8L3RpdGxlPgorCis8aDEgYWxpZ249ImNlbnRlciI+PGI+Z1NPQVAgUHVibGljIExpY2Vuc2U8L2I+IDwvaDE+CisKKzxoMyBhbGlnbj0iY2VudGVyIj5WZXJzaW9uIDEuM2EgPC9oMz4KKworPGgzIGFsaWduPSJjZW50ZXIiPiA8L2gzPgorIFRoZSBnU09BUCBwdWJsaWMgbGljZW5zZSBpcyBkZXJpdmVkIGZyb20gdGhlIE1vemlsbGEgUHVibGljIExpY2Vuc2UgKE1QTDEuMSkuCitUaGUgc2VjdGlvbnMgdGhhdCB3ZXJlIGRlbGV0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgTVBMMS4xIHRleHQgYXJlIDx1PjEuMC4xPC91PiwKKzx1PjIuMS4oYyksKGQpPC91PiwgPHU+Mi4yLihjKSwoZCk8L3U+LCA8dT44LjIuKGIpPC91PiwgPHU+MTA8L3U+LCBhbmQgPHU+MTE8L3U+LiAgU2VjdGlvbiA8dT4zLjg8L3U+IHdhcworYWRkZWQuICBUaGUgbW9kaWZpZWQgc2VjdGlvbnMgYXJlIDx1PjIuMS4oYik8L3U+LCA8dT4yLjIuKGIpPC91PiwgPHU+My4yPC91PiAoc2ltcGxpZmllZCksCis8dT4zLjU8L3U+IChkZWxldGVkIHRoZSBsYXN0IHNlbnRlbmNlKSwgYW5kIDx1PjMuNjwvdT4gKHNpbXBsaWZpZWQpLgorCisgPGgyPjxhIG5hbWU9InR0aF9zRWMxIj4KKzE8L2E+Jm5ic3A7Jm5ic3A7REVGSU5JVElPTlMuPC9oMj4KKworCis8ZGwgY29tcGFjdD0iY29tcGFjdCI+CisKKwk8ZGQ+c2VwIDBtbTwvZGQ+CisgPGR0PjxiPjx1PjEuMC4xLjwvdT48L2I+PC9kdD4KKwk8ZGQ+PC9kZD4KKyA8ZHQ+PGI+MS4xLiAiQ29udHJpYnV0b3IiPC9iPjwvZHQ+CisJPGRkPgorbWVhbnMgZWFjaCBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZgorTW9kaWZpY2F0aW9ucy48L2RkPgorIDxkdD48Yj4xLjIuICJDb250cmlidXRvciBWZXJzaW9uIjwvYj48L2R0PgorCTxkZD4KK21lYW5zIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgcHJpb3IKK01vZGlmaWNhdGlvbnMgdXNlZCBieSBhIENvbnRyaWJ1dG9yLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0CitwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLjwvZGQ+CisgPGR0PjxiPjEuMy4gIkNvdmVyZWQgQ29kZSI8L2I+PC9kdD4KKwk8ZGQ+CittZWFucyB0aGUgT3JpZ2luYWwgQ29kZSwgb3IgTW9kaWZpY2F0aW9ucyBvciB0aGUgY29tYmluYXRpb24KK29mIHRoZSBPcmlnaW5hbCBDb2RlLCBhbmQgTW9kaWZpY2F0aW9ucywgaW4gZWFjaCBjYXNlCitpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi48L2RkPgorIDxkdD48Yj4xLjQuICJFbGVjdHJvbmljIERpc3RyaWJ1dGlvbiBNZWNoYW5pc20iPC9iPjwvZHQ+CisJPGRkPgorbWVhbnMgYSBtZWNoYW5pc20gZ2VuZXJhbGx5IGFjY2VwdGVkIGluIHRoZSBzb2Z0d2FyZSBkZXZlbG9wbWVudCBjb21tdW5pdHkgZm9yCit0aGUgZWxlY3Ryb25pYyB0cmFuc2ZlciBvZiBkYXRhLjwvZGQ+CisgPGR0PjxiPjEuNS4gIkV4ZWN1dGFibGUiPC9iPjwvZHQ+CisJPGRkPgorbWVhbnMgQ292ZXJlZCBDb2RlIGluIGFueSBmb3JtIG90aGVyIHRoYW4gU291cmNlIENvZGUuPC9kZD4KKyA8ZHQ+PGI+MS42LiAiSW5pdGlhbCBEZXZlbG9wZXIiPC9iPjwvZHQ+CisJPGRkPgorbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IGlkZW50aWZpZWQgYXMgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGluIHRoZQorU291cmNlIENvZGUgbm90aWNlIHJlcXVpcmVkIGJ5IDxiPkV4aGliaXQgQTwvYj4uPC9kZD4KKyA8ZHQ+PGI+MS43LiAiTGFyZ2VyIFdvcmsiPC9iPjwvZHQ+CisJPGRkPgorbWVhbnMgYSB3b3JrIHdoaWNoIGNvbWJpbmVzIENvdmVyZWQgQ29kZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QKK2dvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UuPC9kZD4KKyA8ZHQ+PGI+MS44LiAiTGljZW5zZSI8L2I+PC9kdD4KKwk8ZGQ+CittZWFucyB0aGlzIGRvY3VtZW50LjwvZGQ+CisgPGR0PjxiPjEuOC4xLiAiTGljZW5zYWJsZSI8L2I+PC9kdD4KKwk8ZGQ+CittZWFucyBoYXZpbmcgdGhlIHJpZ2h0IHRvIGdyYW50LCB0byB0aGUgbWF4aW11bSBleHRlbnQgcG9zc2libGUsIHdoZXRoZXIgYXQgdGhlCit0aW1lIG9mIHRoZSBpbml0aWFsIGdyYW50IG9yIHN1YnNlcXVlbnRseSBhY3F1aXJlZCwgYW55IGFuZCBhbGwgb2YgdGhlIHJpZ2h0cworY29udmV5ZWQgaGVyZWluLjwvZGQ+CisgPGR0PjxiPjEuOS4gIk1vZGlmaWNhdGlvbnMiPC9iPjwvZHQ+CisJPGRkPgorbWVhbnMgYW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIHN1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgZWl0aGVyIHRoZQorT3JpZ2luYWwgQ29kZSBvciBhbnkgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy4gV2hlbiBDb3ZlcmVkCitDb2RlIGlzIHJlbGVhc2VkIGFzIGEgc2VyaWVzIG9mIGZpbGVzLCBhIE1vZGlmaWNhdGlvbiBpczoKKworPGRsIGNvbXBhY3Q9ImNvbXBhY3QiPgorCisJPGRkPnNlcCAwbW08L2RkPgorIDxkdD48Yj5BLjwvYj48L2R0PgorCTxkZD4gQW55IGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIGNvbnRlbnRzIG9mIGEgZmlsZSBjb250YWluaW5nCitPcmlnaW5hbCBDb2RlIG9yIHByZXZpb3VzIE1vZGlmaWNhdGlvbnMuPC9kZD4KKyA8ZHQ+PGI+Qi48L2I+PC9kdD4KKwk8ZGQ+IEFueSBuZXcgZmlsZSB0aGF0IGNvbnRhaW5zIGFueSBwYXJ0IG9mIHRoZSBPcmlnaW5hbCBDb2RlLAorb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9ucy48L2RkPgorPC9kbD48L2RkPgorIDxkdD48Yj4xLjEwLiAiT3JpZ2luYWwgQ29kZSI8L2I+PC9kdD4KKwk8ZGQ+CittZWFucyBTb3VyY2UgQ29kZSBvZiBjb21wdXRlciBzb2Z0d2FyZSBjb2RlIHdoaWNoIGlzIGRlc2NyaWJlZCBpbiB0aGUgU291cmNlCitDb2RlIG5vdGljZSByZXF1aXJlZCBieSA8Yj5FeGhpYml0IEE8L2I+IGFzIE9yaWdpbmFsIENvZGUsIGFuZCB3aGljaCwgYXQgdGhlCit0aW1lIG9mIGl0cyByZWxlYXNlIHVuZGVyIHRoaXMgTGljZW5zZSBpcyBub3QgYWxyZWFkeSBDb3ZlcmVkIENvZGUgZ292ZXJuZWQgYnkKK3RoaXMgTGljZW5zZS48L2RkPgorIDxkdD48Yj4xLjEwLjEuICJQYXRlbnQgQ2xhaW1zIjwvYj48L2R0PgorCTxkZD4KK21lYW5zIGFueSBwYXRlbnQgY2xhaW0ocyksIG5vdyBvd25lZCBvciBoZXJlYWZ0ZXIgYWNxdWlyZWQsIGluY2x1ZGluZyB3aXRob3V0CitsaW1pdGF0aW9uLCBtZXRob2QsIHByb2Nlc3MsIGFuZCBhcHBhcmF0dXMgY2xhaW1zLCBpbiBhbnkgcGF0ZW50IExpY2Vuc2FibGUgYnkKK2dyYW50b3IuPC9kZD4KKyA8ZHQ+PGI+MS4xMS4gIlNvdXJjZSBDb2RlIjwvYj48L2R0PgorCTxkZD4KK21lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgQ292ZXJlZCBDb2RlIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucyB0byBpdCwKK2luY2x1ZGluZyBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbgorZmlsZXMsIHNjcmlwdHMgdXNlZCB0byBjb250cm9sIGNvbXBpbGF0aW9uIGFuZCBpbnN0YWxsYXRpb24gb2YgYW4gRXhlY3V0YWJsZSwKK29yIHNvdXJjZSBjb2RlIGRpZmZlcmVudGlhbCBjb21wYXJpc29ucyBhZ2FpbnN0IGVpdGhlciB0aGUgT3JpZ2luYWwgQ29kZSBvcgorYW5vdGhlciB3ZWxsIGtub3duLCBhdmFpbGFibGUgQ292ZXJlZCBDb2RlIG9mIHRoZSBDb250cmlidXRvcidzIGNob2ljZS4gVGhlCitTb3VyY2UgQ29kZSBjYW4gYmUgaW4gYSBjb21wcmVzc2VkIG9yIGFyY2hpdmFsIGZvcm0sIHByb3ZpZGVkIHRoZSBhcHByb3ByaWF0ZQorZGVjb21wcmVzc2lvbiBvciBkZS1hcmNoaXZpbmcgc29mdHdhcmUgaXMgd2lkZWx5IGF2YWlsYWJsZSBmb3Igbm8gY2hhcmdlLjwvZGQ+CisgPGR0PjxiPjEuMTIuICJZb3UiIChvciAiWW91ciIpPC9iPjwvZHQ+CisJPGRkPgorbWVhbnMgYW4gaW5kaXZpZHVhbCBvciBhIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciwgYW5kIGNvbXBseWluZword2l0aCBhbGwgb2YgdGhlIHRlcm1zIG9mLCB0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UKK2lzc3VlZCB1bmRlciBTZWN0aW9uIDxiPjYuMTwvYj4uICBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIGluY2x1ZGVzIGFueQorZW50aXR5IHdoaWNoIGNvbnRyb2xzLCBpcyBjb250cm9sbGVkIGJ5LCBvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIFlvdS4KK0ZvciBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJjb250cm9sIiBtZWFucyA8Yj4oYSk8L2I+IHRoZSBwb3dlciwgZGlyZWN0IG9yCitpbmRpcmVjdCwgdG8gY2F1c2UgdGhlIGRpcmVjdGlvbiBvciBtYW5hZ2VtZW50IG9mIHN1Y2ggZW50aXR5LCB3aGV0aGVyIGJ5Citjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIDxiPihiKTwvYj4gb3duZXJzaGlwIG9mIG1vcmUgdGhhbiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9mCit0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LjwvZGQ+Cis8L2RsPgorCisgPGgyPjxhIG5hbWU9InR0aF9zRWMyIj4KKzI8L2E+Jm5ic3A7Jm5ic3A7U09VUkNFIENPREUgTElDRU5TRS48L2gyPgorCis8ZGwgY29tcGFjdD0iY29tcGFjdCI+CisKKwk8ZGQ+c2VwIDBtbTwvZGQ+CisgPGR0PjxiPjIuMS4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIEdyYW50LjwvYj48L2R0PgorCTxkZD48YnIgLz4KK1RoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwKK25vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zOgorCis8ZGwgY29tcGFjdD0iY29tcGFjdCI+CisKKwk8ZGQ+c2VwIDBtbTwvZGQ+CisgPGR0PjxiPihhKTwvYj48L2R0PgorCTxkZD4KK3VuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgTGljZW5zYWJsZQorYnkgSW5pdGlhbCBEZXZlbG9wZXIgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZQorYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIENvZGUgKG9yIHBvcnRpb25zIHRoZXJlb2YpIHdpdGggb3Igd2l0aG91dAorTW9kaWZpY2F0aW9ucywgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kPC9kZD4KKyA8ZHQ+PGI+PHU+KGIpPC91PjwvYj48L2R0PgorCTxkZD4KK3VuZGVyIHBhdGVudHMgbm93IG9yIGhlcmVhZnRlciBvd25lZCBvciBjb250cm9sbGVkIGJ5IEluaXRpYWwgRGV2ZWxvcGVyLCB0bworbWFrZSwgaGF2ZSBtYWRlLCB1c2UgYW5kIHNlbGwgKCJvZmZlciB0byBzZWxsIGFuZCBpbXBvcnQiKSB0aGUgT3JpZ2luYWwgQ29kZSwKK01vZGlmaWNhdGlvbnMsIG9yIHBvcnRpb25zIHRoZXJlb2YsIGJ1dCBzb2xlbHkgdG8gdGhlIGV4dGVudCB0aGF0IGFueSBzdWNoCitwYXRlbnQgaXMgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gZW5hYmxlIFlvdSB0byB1dGlsaXplLCBhbG9uZSBvciBpbgorY29tYmluYXRpb24gd2l0aCBvdGhlciBzb2Z0d2FyZSwgdGhlIE9yaWdpbmFsIENvZGUsIE1vZGlmaWNhdGlvbnMsIG9yIGFueQorY29tYmluYXRpb24gb3IgcG9ydGlvbnMgdGhlcmVvZi48L2RkPgorIDxkdD48Yj48dT4oYyk8L3U+PC9iPjwvZHQ+CisJPGRkPjwvZGQ+CisgPGR0PjxiPjx1PihkKTwvdT48L2I+PC9kdD4KKwk8ZGQ+PC9kZD4KKzwvZGw+PC9kZD4KKyA8ZHQ+PGI+Mi4yLiBDb250cmlidXRvciBHcmFudC48L2I+PC9kdD4KKwk8ZGQ+PGJyIC8+CitTdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5CitncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UKKworPGRsIGNvbXBhY3Q9ImNvbXBhY3QiPgorCisJPGRkPnNlcCAwbW08L2RkPgorIDxkdD48Yj4oYSk8L2I+PC9kdD4KKwk8ZGQ+Cit1bmRlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIChvdGhlciB0aGFuIHBhdGVudCBvciB0cmFkZW1hcmspIExpY2Vuc2FibGUKK2J5IENvbnRyaWJ1dG9yLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZAorZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpCitlaXRoZXIgb24gYW4gdW5tb2RpZmllZCBiYXNpcywgd2l0aCBvdGhlciBNb2RpZmljYXRpb25zLCBhcyBDb3ZlcmVkIENvZGUgYW5kL29yCithcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZDwvZGQ+CisgPGR0PjxiPjx1PihiKTwvdT48L2I+PC9kdD4KKwk8ZGQ+Cit1bmRlciBwYXRlbnRzIG5vdyBvciBoZXJlYWZ0ZXIgb3duZWQgb3IgY29udHJvbGxlZCBieSBDb250cmlidXRvciwgdG8gbWFrZSwKK2hhdmUgbWFkZSwgdXNlIGFuZCBzZWxsICgib2ZmZXIgdG8gc2VsbCBhbmQgaW1wb3J0IikgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24KKyhvciBwb3J0aW9ucyB0aGVyZW9mKSwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55IHN1Y2ggcGF0ZW50IGlzCityZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBlbmFibGUgWW91IHRvIHV0aWxpemUsIGFsb25lIG9yIGluIGNvbWJpbmF0aW9uIHdpdGgKK290aGVyIHNvZnR3YXJlLCB0aGUgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgdGhlcmVvZikuPC9kZD4KKyA8ZHQ+PGI+PHU+KGMpPC91PjwvYj48L2R0PgorCTxkZD48L2RkPgorIDxkdD48Yj48dT4oZCk8L3U+PC9iPjwvZHQ+CisJPGRkPjwvZGQ+Cis8L2RsPjwvZGQ+Cis8L2RsPgorCisgPGgyPjxhIG5hbWU9InR0aF9zRWMzIj4KKzM8L2E+Jm5ic3A7Jm5ic3A7RElTVFJJQlVUSU9OIE9CTElHQVRJT05TLjwvaDI+CisKKzxkbCBjb21wYWN0PSJjb21wYWN0Ij4KKworCTxkZD5zZXAgMG1tPC9kZD4KKyA8ZHQ+PGI+My4xLiBBcHBsaWNhdGlvbiBvZiBMaWNlbnNlLjwvYj48L2R0PgorCTxkZD48YnIgLz4KK1RoZSBNb2RpZmljYXRpb25zIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5Cit0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIFNlY3Rpb24gPGI+Mi4yPC9iPi4gIFRoZQorU291cmNlIENvZGUgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgbWF5IGJlIGRpc3RyaWJ1dGVkIG9ubHkgdW5kZXIgdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2Ugb3IgYSBmdXR1cmUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgcmVsZWFzZWQgdW5kZXIgU2VjdGlvbiA8Yj42LjE8L2I+LCBhbmQgWW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgU291cmNlCitDb2RlIFlvdSBkaXN0cmlidXRlLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIGFueSBTb3VyY2UgQ29kZQordmVyc2lvbiB0aGF0IGFsdGVycyBvciByZXN0cmljdHMgdGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlCityZWNpcGllbnRzJyByaWdodHMgaGVyZXVuZGVyLiBIb3dldmVyLCBZb3UgbWF5IGluY2x1ZGUgYW4gYWRkaXRpb25hbCBkb2N1bWVudAorb2ZmZXJpbmcgdGhlIGFkZGl0aW9uYWwgcmlnaHRzIGRlc2NyaWJlZCBpbiBTZWN0aW9uIDxiPjMuNTwvYj4uPC9kZD4KKyA8ZHQ+PGI+PHU+My4yLjwvdT4gQXZhaWxhYmlsaXR5IG9mIFNvdXJjZSBDb2RlLjwvYj48L2R0PgorCTxkZD48YnIgLz4KK0FueSBNb2RpZmljYXRpb24gY3JlYXRlZCBieSBZb3Ugd2lsbCBiZSBwcm92aWRlZCB0byB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW4KK1NvdXJjZSBDb2RlIGZvcm0gYW5kIGFyZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgTGljZW5zZS48L2RkPgorIDxkdD48Yj4zLjMuIERlc2NyaXB0aW9uIG9mIE1vZGlmaWNhdGlvbnMuPC9iPjwvZHQ+CisJPGRkPjxiciAvPgorWW91IG11c3QgY2F1c2UgYWxsIENvdmVyZWQgQ29kZSB0byB3aGljaCBZb3UgY29udHJpYnV0ZSB0byBjb250YWluIGEgZmlsZQorZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgWW91IG1hZGUgdG8gY3JlYXRlIHRoYXQgQ292ZXJlZCBDb2RlIGFuZCB0aGUgZGF0ZSBvZgorYW55IGNoYW5nZS4gWW91IG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdCB0aGUgTW9kaWZpY2F0aW9uIGlzCitkZXJpdmVkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBmcm9tIE9yaWdpbmFsIENvZGUgcHJvdmlkZWQgYnkgdGhlIEluaXRpYWwKK0RldmVsb3BlciBhbmQgaW5jbHVkaW5nIHRoZSBuYW1lIG9mIHRoZSBJbml0aWFsIERldmVsb3BlciBpbiA8Yj4oYSk8L2I+IHRoZSBTb3VyY2UKK0NvZGUsIGFuZCA8Yj4oYik8L2I+IGluIGFueSBub3RpY2UgaW4gYW4gRXhlY3V0YWJsZSB2ZXJzaW9uIG9yIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbgoraW4gd2hpY2ggWW91IGRlc2NyaWJlIHRoZSBvcmlnaW4gb3Igb3duZXJzaGlwIG9mIHRoZSBDb3ZlcmVkIENvZGUuPC9kZD4KKyA8ZHQ+PGI+My40LiBJbnRlbGxlY3R1YWwgUHJvcGVydHkgTWF0dGVycy48L2I+PC9kdD4KKwk8ZGQ+CisKKzxkbCBjb21wYWN0PSJjb21wYWN0Ij4KKworCTxkZD5zZXAgMG1tPC9kZD4KKyA8ZHQ+PGI+KGEpIFRoaXJkIFBhcnR5IENsYWltcy48L2I+PC9kdD4KKwk8ZGQ+CitJZiBDb250cmlidXRvciBoYXMga25vd2xlZGdlIHRoYXQgYSBsaWNlbnNlIHVuZGVyIGEgdGhpcmQgcGFydHkncyBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyBpcyByZXF1aXJlZCB0byBleGVyY2lzZSB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgc3VjaCBDb250cmlidXRvcgordW5kZXIgU2VjdGlvbnMgPGI+Mi4xPC9iPiBvciA8Yj4yLjI8L2I+LCBDb250cmlidXRvciBtdXN0IGluY2x1ZGUgYSB0ZXh0IGZpbGUgd2l0aCB0aGUgU291cmNlCitDb2RlIGRpc3RyaWJ1dGlvbiB0aXRsZWQgIkxFR0FMIiB3aGljaCBkZXNjcmliZXMgdGhlIGNsYWltIGFuZCB0aGUgcGFydHkKK21ha2luZyB0aGUgY2xhaW0gaW4gc3VmZmljaWVudCBkZXRhaWwgdGhhdCBhIHJlY2lwaWVudCB3aWxsIGtub3cgd2hvbSB0bworY29udGFjdC4gSWYgQ29udHJpYnV0b3Igb2J0YWlucyBzdWNoIGtub3dsZWRnZSBhZnRlciB0aGUgTW9kaWZpY2F0aW9uIGlzIG1hZGUKK2F2YWlsYWJsZSBhcyBkZXNjcmliZWQgaW4gU2VjdGlvbiA8Yj4zLjI8L2I+LCBDb250cmlidXRvciBzaGFsbCBwcm9tcHRseSBtb2RpZnkgdGhlCitMRUdBTCBmaWxlIGluIGFsbCBjb3BpZXMgQ29udHJpYnV0b3IgbWFrZXMgYXZhaWxhYmxlIHRoZXJlYWZ0ZXIgYW5kIHNoYWxsIHRha2UKK290aGVyIHN0ZXBzIChzdWNoIGFzIG5vdGlmeWluZyBhcHByb3ByaWF0ZSBtYWlsaW5nIGxpc3RzIG9yIG5ld3Nncm91cHMpCityZWFzb25hYmx5IGNhbGN1bGF0ZWQgdG8gaW5mb3JtIHRob3NlIHdobyByZWNlaXZlZCB0aGUgQ292ZXJlZCBDb2RlIHRoYXQgbmV3Citrbm93bGVkZ2UgaGFzIGJlZW4gb2J0YWluZWQuPC9kZD4KKyA8ZHQ+PGI+KGIpIENvbnRyaWJ1dG9yIEFQSXMuPC9iPjwvZHQ+CisJPGRkPgorSWYgQ29udHJpYnV0b3IncyBNb2RpZmljYXRpb25zIGluY2x1ZGUgYW4gYXBwbGljYXRpb24gcHJvZ3JhbW1pbmcgaW50ZXJmYWNlIGFuZAorQ29udHJpYnV0b3IgaGFzIGtub3dsZWRnZSBvZiBwYXRlbnQgbGljZW5zZXMgd2hpY2ggYXJlIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvCitpbXBsZW1lbnQgdGhhdCBBUEksIENvbnRyaWJ1dG9yIG11c3QgYWxzbyBpbmNsdWRlIHRoaXMgaW5mb3JtYXRpb24gaW4gdGhlIExFR0FMCitmaWxlLjwvZGQ+CisgPGR0PjxiPihjKSBSZXByZXNlbnRhdGlvbnMuPC9iPjwvZHQ+CisJPGRkPgorQ29udHJpYnV0b3IgcmVwcmVzZW50cyB0aGF0LCBleGNlcHQgYXMgZGlzY2xvc2VkIHB1cnN1YW50IHRvIFNlY3Rpb24gPGI+CiszLjQoYSk8L2I+IGFib3ZlLCBDb250cmlidXRvciBiZWxpZXZlcyB0aGF0IENvbnRyaWJ1dG9yJ3MgTW9kaWZpY2F0aW9ucyBhcmUKK0NvbnRyaWJ1dG9yJ3Mgb3JpZ2luYWwgY3JlYXRpb24ocykgYW5kL29yIENvbnRyaWJ1dG9yIGhhcyBzdWZmaWNpZW50IHJpZ2h0cyB0bworZ3JhbnQgdGhlIHJpZ2h0cyBjb252ZXllZCBieSB0aGlzIExpY2Vuc2UuPC9kZD4KKzwvZGw+PC9kZD4KKyA8ZHQ+PGI+PHU+My41LjwvdT4gUmVxdWlyZWQgTm90aWNlcy48L2I+PC9kdD4KKwk8ZGQ+PGJyIC8+CitZb3UgbXVzdCBkdXBsaWNhdGUgdGhlIG5vdGljZSBpbiA8Yj5FeGhpYml0IEE8L2I+IGluIGVhY2ggZmlsZSBvZiB0aGUgU291cmNlCitDb2RlLiBJZiBpdCBpcyBub3QgcG9zc2libGUgdG8gcHV0IHN1Y2ggbm90aWNlIGluIGEgcGFydGljdWxhciBTb3VyY2UgQ29kZSBmaWxlCitkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbiBZb3UgbXVzdCBpbmNsdWRlIHN1Y2ggbm90aWNlIGluIGEgbG9jYXRpb24gKHN1Y2ggYXMKK2EgcmVsZXZhbnQgZGlyZWN0b3J5KSB3aGVyZSBhIHVzZXIgd291bGQgYmUgbGlrZWx5IHRvIGxvb2sgZm9yIHN1Y2ggYSBub3RpY2UuCitJZiBZb3UgY3JlYXRlZCBvbmUgb3IgbW9yZSBNb2RpZmljYXRpb24ocykgWW91IG1heSBhZGQgeW91ciBuYW1lIGFzIGEKK0NvbnRyaWJ1dG9yIHRvIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIDxiPkV4aGliaXQgQTwvYj4uIFlvdSBtdXN0IGFsc28gZHVwbGljYXRlCit0aGlzIExpY2Vuc2UgaW4gYW55IGRvY3VtZW50YXRpb24gZm9yIHRoZSBTb3VyY2UgQ29kZSB3aGVyZSBZb3UgZGVzY3JpYmUKK3JlY2lwaWVudHMnIHJpZ2h0cyBvciBvd25lcnNoaXAgcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgQ29kZS4gWW91IG1heSBjaG9vc2UKK3RvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkKK29ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBDb2RlLiBIb3dldmVyLCBZb3UgbWF5IGRvIHNvCitvbmx5IG9uIFlvdXIgb3duIGJlaGFsZiwgYW5kIG5vdCBvbiBiZWhhbGYgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIGFueQorQ29udHJpYnV0b3IuPC9kZD4KKyA8ZHQ+PGI+PHU+My42PC91Pi4gRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgVmVyc2lvbnMuPC9iPjwvZHQ+CisJPGRkPjxiciAvPgorWW91IG1heSBkaXN0cmlidXRlIENvdmVyZWQgQ29kZSBpbiBFeGVjdXRhYmxlIGZvcm0gb25seSBpZiB0aGUgcmVxdWlyZW1lbnRzCitvZiBTZWN0aW9uIDxiPjMuMTwvYj4tPGI+My41PC9iPiBoYXZlIGJlZW4gbWV0IGZvciB0aGF0IENvdmVyZWQgQ29kZS4gWW91IG1heSBkaXN0cmlidXRlIHRoZQorRXhlY3V0YWJsZSB2ZXJzaW9uIG9mIENvdmVyZWQgQ29kZSBvciBvd25lcnNoaXAgcmlnaHRzIHVuZGVyIGEgbGljZW5zZSBvZiBZb3VyCitjaG9pY2UsIHdoaWNoIG1heSBjb250YWluIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgdGhhdCBZb3UKK2FyZSBpbiBjb21wbGlhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhhdCB0aGUgbGljZW5zZSBmb3IgdGhlCitFeGVjdXRhYmxlIHZlcnNpb24gZG9lcyBub3QgYXR0ZW1wdCB0byBsaW1pdCBvciBhbHRlciB0aGUgcmVjaXBpZW50J3MgcmlnaHRzIGluCit0aGUgU291cmNlIENvZGUgdmVyc2lvbiBmcm9tIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIHRoaXMgTGljZW5zZS4gIElmIFlvdQorZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UgWW91IG11c3QgbWFrZSBpdAorYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UgYXJlIG9mZmVyZWQgYnkKK1lvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuICBJZiB5b3UKK2Rpc3RyaWJ1dGUgZXhlY3V0YWJsZSB2ZXJzaW9ucyBjb250YWluaW5nIENvdmVyZWQgQ29kZSBhcyBwYXJ0IG9mIGEgcHJvZHVjdCwKK3lvdSBtdXN0IHJlcHJvZHVjZSB0aGUgbm90aWNlIGluIDxiPkV4aGliaXQgQjwvYj4gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCitvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgcHJvZHVjdC48L2RkPgorIDxkdD48Yj4zLjcuIExhcmdlciBXb3Jrcy48L2I+PC9kdD4KKwk8ZGQ+PGJyIC8+CitZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIENvZGUgd2l0aCBvdGhlciBjb2RlIG5vdAorZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYQorc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCBZb3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzCitMaWNlbnNlIGFyZSBmdWxmaWxsZWQgZm9yIHRoZSBDb3ZlcmVkIENvZGUuPC9kZD4KKyA8ZHQ+PGI+PHU+My44LjwvdT4gUmVzdHJpY3Rpb25zLjwvYj48L2R0PgorCTxkZD48YnIgLz4KK1lvdSBtYXkgbm90IHJlbW92ZSBhbnkgcHJvZHVjdCBpZGVudGlmaWNhdGlvbiwgY29weXJpZ2h0LCBwcm9wcmlldGFyeSBub3RpY2VzIG9yIGxhYmVscyBmcm9tIGdTT0FQLjwvZGQ+Cis8L2RsPgorCisgPGgyPjxhIG5hbWU9InR0aF9zRWM0Ij4KKzQ8L2E+Jm5ic3A7Jm5ic3A7SU5BQklMSVRZIFRPIENPTVBMWSBEVUUgVE8gU1RBVFVURSBPUiBSRUdVTEFUSU9OLjwvaDI+CitJZiBpdCBpcyBpbXBvc3NpYmxlIGZvciBZb3UgdG8gY29tcGx5IHdpdGggYW55IG9mIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UKK3dpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgQ292ZXJlZCBDb2RlIGR1ZSB0byBzdGF0dXRlLCBqdWRpY2lhbCBvcmRlciwKK29yIHJlZ3VsYXRpb24gdGhlbiBZb3UgbXVzdDogPGI+KGEpPC9iPiBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHRvIHRoZQorbWF4aW11bSBleHRlbnQgcG9zc2libGU7IGFuZCA8Yj4oYik8L2I+IGRlc2NyaWJlIHRoZSBsaW1pdGF0aW9ucyBhbmQgdGhlIGNvZGUgdGhleQorYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgaW5jbHVkZWQgaW4gdGhlIExFR0FMIGZpbGUgZGVzY3JpYmVkIGluCitTZWN0aW9uIDxiPjMuNDwvYj4gYW5kIG11c3QgYmUgaW5jbHVkZWQgd2l0aCBhbGwgZGlzdHJpYnV0aW9ucyBvZiB0aGUgU291cmNlCitDb2RlLiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwcm9oaWJpdGVkIGJ5IHN0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaAorZGVzY3JpcHRpb24gbXVzdCBiZSBzdWZmaWNpZW50bHkgZGV0YWlsZWQgZm9yIGEgcmVjaXBpZW50IG9mIG9yZGluYXJ5IHNraWxsIHRvCitiZSBhYmxlIHRvIHVuZGVyc3RhbmQgaXQuCisKKyA8aDI+PGEgbmFtZT0idHRoX3NFYzUiPgorNTwvYT4mbmJzcDsmbmJzcDtBUFBMSUNBVElPTiBPRiBUSElTIExJQ0VOU0UuPC9oMj4KK1RoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGNvZGUgdG8gd2hpY2ggdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhhcyBhdHRhY2hlZCB0aGUKK25vdGljZSBpbiA8Yj5FeGhpYml0IEE8L2I+IGFuZCB0byByZWxhdGVkIENvdmVyZWQgQ29kZS4KKworIDxoMj48YSBuYW1lPSJ0dGhfc0VjNiI+Cis2PC9hPiZuYnNwOyZuYnNwO1ZFUlNJT05TIE9GIFRIRSBMSUNFTlNFLjwvaDI+CisKKzxkbCBjb21wYWN0PSJjb21wYWN0Ij4KKworCTxkZD5zZXAgMG1tPC9kZD4KKyA8ZHQ+PGI+Ni4xLiBOZXcgVmVyc2lvbnMuPC9iPjwvZHQ+CisJPGRkPjxiciAvPgorR3JhbnRvciBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UgZnJvbSB0aW1lIHRvCit0aW1lLiBFYWNoIHZlcnNpb24gd2lsbCBiZSBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLjwvZGQ+CisgPGR0PjxiPjYuMi4gRWZmZWN0IG9mIE5ldyBWZXJzaW9ucy48L2I+PC9kdD4KKwk8ZGQ+PGJyIC8+CitPbmNlIENvdmVyZWQgQ29kZSBoYXMgYmVlbiBwdWJsaXNoZWQgdW5kZXIgYSBwYXJ0aWN1bGFyIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsCitZb3UgbWF5IGFsd2F5cyBjb250aW51ZSB0byB1c2UgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoYXQgdmVyc2lvbi4gWW91IG1heSBhbHNvCitjaG9vc2UgdG8gdXNlIHN1Y2ggQ292ZXJlZCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mCit0aGUgTGljZW5zZS48L2RkPgorIDxkdD48Yj42LjMuIERlcml2YXRpdmUgV29ya3MuPC9iPjwvZHQ+CisJPGRkPjxiciAvPgorSWYgWW91IGNyZWF0ZSBvciB1c2UgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSAod2hpY2ggeW91IG1heSBvbmx5IGRvCitpbiBvcmRlciB0byBhcHBseSBpdCB0byBjb2RlIHdoaWNoIGlzIG5vdCBhbHJlYWR5IENvdmVyZWQgQ29kZSBnb3Zlcm5lZCBieSB0aGlzCitMaWNlbnNlKSwgWW91IG11c3QgPGI+KGEpPC9iPiByZW5hbWUgWW91ciBsaWNlbnNlIHNvIHRoYXQgdGhlIHBocmFzZSAiZ1NPQVAiIG9yCithbnkgY29uZnVzaW5nbHkgc2ltaWxhciBwaHJhc2UgZG8gbm90IGFwcGVhciBpbiB5b3VyIGxpY2Vuc2UgKGV4Y2VwdCB0byBub3RlCit0aGF0IHlvdXIgbGljZW5zZSBkaWZmZXJzIGZyb20gdGhpcyBMaWNlbnNlKSBhbmQgPGI+KGIpPC9iPiBvdGhlcndpc2UgbWFrZSBpdCBjbGVhcgordGhhdCBZb3VyIHZlcnNpb24gb2YgdGhlIGxpY2Vuc2UgY29udGFpbnMgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhlIGdTT0FQCitQdWJsaWMgTGljZW5zZS4gKEZpbGxpbmcgaW4gdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyLCBPcmlnaW5hbCBDb2RlIG9yCitDb250cmlidXRvciBpbiB0aGUgbm90aWNlIGRlc2NyaWJlZCBpbiA8Yj5FeGhpYml0IEE8L2I+IHNoYWxsIG5vdCBvZiB0aGVtc2VsdmVzCitiZSBkZWVtZWQgdG8gYmUgbW9kaWZpY2F0aW9ucyBvZiB0aGlzIExpY2Vuc2UuKTwvZGQ+Cis8L2RsPgorCisgPGgyPjxhIG5hbWU9InR0aF9zRWM3Ij4KKzc8L2E+Jm5ic3A7Jm5ic3A7RElTQ0xBSU1FUiBPRiBXQVJSQU5UWS48L2gyPgorQ09WRVJFRCBDT0RFIElTIFBST1ZJREVEIFVOREVSIFRISVMgTElDRU5TRSBPTiBBTiAiQVMgSVMiIEJBU0lTLCBXSVRIT1VUCitXQVJSQU5UWSBPRiBBTlkgS0lORCwgV0hFVEhFUiBFWFBSRVNTLCBJTVBMSUVEIE9SIFNUQVRVVE9SWSwgSU5DTFVESU5HLCBXSVRIT1VUCitMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgT0YgRklUTkVTUyBGT1IgQQorUEFSVElDVUxBUiBQVVJQT1NFLCBOT05JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkgSU5URUxMRUNUVUFMIFBST1BFUlRZCitSSUdIVFMsIEFORCBBTlkgV0FSUkFOVFkgVEhBVCBNQVkgQVJJU0UgQlkgUkVBU09OIE9GIFRSQURFIFVTQUdFLCBDVVNUT00sIE9SCitDT1VSU0UgT0YgREVBTElORy4gIFdJVEhPVVQgTElNSVRJTkcgVEhFIEZPUkVHT0lORywgWU9VIEFDS05PV0xFREdFIFRIQVQgVEhFCitTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEFUIFRIRSBBVVRIT1JTIERPIE5PVCBXQVJSQU5UIFRIRSBTT0ZUV0FSRQorV0lMTCBSVU4gVU5JTlRFUlJVUFRFRCBPUiBFUlJPUiBGUkVFLiAgTElNSVRFRCBMSUFCSUxJVFkgVEhFIEVOVElSRSBSSVNLIEFTIFRPCitSRVNVTFRTIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgU09GVFdBUkUgSVMgQVNTVU1FRCBCWSBZT1UuICBVTkRFUiBOTworQ0lSQ1VNU1RBTkNFUyBXSUxMIFRIRSBBVVRIT1JTIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNULCBJTkNJREVOVEFMLAorRVhFTVBMQVJZIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgS0lORCBPUiBOQVRVUkUgV0hBVFNPRVZFUiwgV0hFVEhFUgorQkFTRUQgT04gQ09OVFJBQ1QsIFdBUlJBTlRZLCBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIFNUUklDVCBMSUFCSUxJVFkgT1IKK09USEVSV0lTRSwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQU5ZIFdBWSBSRUxBVEVEIFRPIFRIRSBTT0ZUV0FSRSwgRVZFTiBJRiBUSEUKK0FVVEhPUlMgSEFWRSBCRUVOIEFEVklTRUQgT04gVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFIE9SIElGIFNVQ0ggREFNQUdFCitDT1VMRCBIQVZFIEJFRU4gUkVBU09OQUJMWSBGT1JFU0VFTiwgQU5EIE5PVFdJVEhTVEFORElORyBBTlkgRkFJTFVSRSBPRgorRVNTRU5USUFMIFBVUlBPU0UgT0YgQU5ZIEVYQ0xVU0lWRSBSRU1FRFkgUFJPVklERUQuICBTVUNIIExJTUlUQVRJT04gT04gREFNQUdFUworSU5DTFVERVMsIEJVVCBJUyBOT1QgTElNSVRFRCBUTywgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgTE9TVCBQUk9GSVRTLAorTE9TUyBPRiBEQVRBIE9SIFNPRlRXQVJFLCBXT1JLIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OIE9SCitJTVBBSVJNRU5UIE9GIE9USEVSIEdPT0RTLiAgSU4gTk8gRVZFTlQgV0lMTCBUSEUgQVVUSE9SUyBCRSBMSUFCTEUgRk9SIFRIRQorQ09TVFMgT0YgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBTT0ZUV0FSRSBPUiBTRVJWSUNFUy4gIFlPVSBBQ0tOT1dMRURHRSBUSEFUCitUSElTIFNPRlRXQVJFIElTIE5PVCBERVNJR05FRCBGT1IgVVNFIElOIE9OLUxJTkUgRVFVSVBNRU5UIElOIEhBWkFSRE9VUworRU5WSVJPTk1FTlRTIFNVQ0ggQVMgT1BFUkFUSU9OIE9GIE5VQ0xFQVIgRkFDSUxJVElFUywgQUlSQ1JBRlQgTkFWSUdBVElPTiBPUgorQ09OVFJPTCwgT1IgTElGRS1DUklUSUNBTCBBUFBMSUNBVElPTlMuICBUSEUgQVVUSE9SUyBFWFBSRVNTTFkgRElTQ0xBSU0gQU5ZCitMSUFCSUxJVFkgUkVTVUxUSU5HIEZST00gVVNFIE9GIFRIRSBTT0ZUV0FSRSBJTiBBTlkgU1VDSCBPTi1MSU5FIEVRVUlQTUVOVCBJTgorSEFaQVJET1VTIEVOVklST05NRU5UUyBBTkQgQUNDRVBUUyBOTyBMSUFCSUxJVFkgSU4gUkVTUEVDVCBPRiBBTlkgQUNUSU9OUyBPUgorQ0xBSU1TIEJBU0VEIE9OIFRIRSBVU0UgT0YgVEhFIFNPRlRXQVJFIElOIEFOWSBTVUNIIE9OLUxJTkUgRVFVSVBNRU5UIElOCitIQVpBUkRPVVMgRU5WSVJPTk1FTlRTIEJZIFlPVS4gIEZPUiBQVVJQT1NFUyBPRiBUSElTIFBBUkFHUkFQSCwgVEhFIFRFUk0KKyJMSUZFLUNSSVRJQ0FMIEFQUExJQ0FUSU9OIiBNRUFOUyBBTiBBUFBMSUNBVElPTiBJTiBXSElDSCBUSEUgRlVOQ1RJT05JTkcgT1IKK01BTEZVTkNUSU9OSU5HIE9GIFRIRSBTT0ZUV0FSRSBNQVkgUkVTVUxUIERJUkVDVExZIE9SIElORElSRUNUTFkgSU4gUEhZU0lDQUwKK0lOSlVSWSBPUiBMT1NTIE9GIEhVTUFOIExJRkUuICBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4KK0VTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gIE5PIFVTRSBPRiBBTlkgQ09WRVJFRCBDT0RFIElTIEFVVEhPUklaRUQKK0hFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLgorCisgPGgyPjxhIG5hbWU9InR0aF9zRWM4Ij4KKzg8L2E+Jm5ic3A7Jm5ic3A7VEVSTUlOQVRJT04uPC9oMj4KKworPGRsIGNvbXBhY3Q9ImNvbXBhY3QiPgorCisJPGRkPnNlcCAwbW08L2RkPgorIDxkdD48Yj44LjEuPC9iPjwvZHQ+CisJPGRkPgorVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYKK1lvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRlcm1zIGhlcmVpbiBhbmQgZmFpbCB0byBjdXJlIHN1Y2ggYnJlYWNoIHdpdGhpbiAzMAorZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgQ29kZSB3aGljaAorYXJlIHByb3Blcmx5IGdyYW50ZWQgc2hhbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlLiBQcm92aXNpb25zCit3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzCitMaWNlbnNlIHNoYWxsIHN1cnZpdmUuPC9kZD4KKyA8ZHQ+PGI+PHU+OC4yLjwvdT48L2I+PC9kdD4KKwk8ZGQ+PC9kZD4KKyA8ZHQ+PGI+OC4zLjwvYj48L2R0PgorCTxkZD4KK0lmIFlvdSBhc3NlcnQgYSBwYXRlbnQgaW5mcmluZ2VtZW50IGNsYWltIGFnYWluc3QgUGFydGljaXBhbnQgYWxsZWdpbmcgdGhhdAorc3VjaCBQYXJ0aWNpcGFudCdzIENvbnRyaWJ1dG9yIFZlcnNpb24gZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbmZyaW5nZXMgYW55CitwYXRlbnQgd2hlcmUgc3VjaCBjbGFpbSBpcyByZXNvbHZlZCAoc3VjaCBhcyBieSBsaWNlbnNlIG9yIHNldHRsZW1lbnQpIHByaW9yIHRvCit0aGUgaW5pdGlhdGlvbiBvZiBwYXRlbnQgaW5mcmluZ2VtZW50IGxpdGlnYXRpb24sIHRoZW4gdGhlIHJlYXNvbmFibGUgdmFsdWUgb2YKK3RoZSBsaWNlbnNlcyBncmFudGVkIGJ5IHN1Y2ggUGFydGljaXBhbnQgdW5kZXIgU2VjdGlvbnMgPGI+Mi4xPC9iPiBvciA8Yj4yLjI8L2I+CitzaGFsbCBiZSB0YWtlbiBpbnRvIGFjY291bnQgaW4gZGV0ZXJtaW5pbmcgdGhlIGFtb3VudCBvciB2YWx1ZSBvZiBhbnkgcGF5bWVudAorb3IgbGljZW5zZS48L2RkPgorIDxkdD48Yj44LjQuPC9iPjwvZHQ+CisJPGRkPiBJbiB0aGUgZXZlbnQgb2YgdGVybWluYXRpb24gdW5kZXIgU2VjdGlvbnMgPGI+OC4xPC9iPiBvcgorPGI+OC4yPC9iPiBhYm92ZSwgYWxsIGVuZCB1c2VyIGxpY2Vuc2UgYWdyZWVtZW50cyAoZXhjbHVkaW5nIGRpc3RyaWJ1dG9ycworYW5kIHJlc2VsbGVycykgd2hpY2ggaGF2ZSBiZWVuIHZhbGlkbHkgZ3JhbnRlZCBieSBZb3Ugb3IgYW55IGRpc3RyaWJ1dG9yCitoZXJldW5kZXIgcHJpb3IgdG8gdGVybWluYXRpb24gc2hhbGwgc3Vydml2ZSB0ZXJtaW5hdGlvbi48L2RkPgorPC9kbD4KKworIDxoMj48YSBuYW1lPSJ0dGhfc0VjOSI+Cis5PC9hPiZuYnNwOyZuYnNwO0xJTUlUQVRJT04gT0YgTElBQklMSVRZLjwvaDI+CitVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVCAoSU5DTFVESU5HCitORUdMSUdFTkNFKSwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgWU9VLCBUSEUgSU5JVElBTCBERVZFTE9QRVIsCitBTlkgT1RIRVIgQ09OVFJJQlVUT1IsIE9SIEFOWSBESVNUUklCVVRPUiBPRiBDT1ZFUkVEIENPREUsIE9SIEFOWSBTVVBQTElFUgorT0YgQU5ZIE9GIFNVQ0ggUEFSVElFUywgQkUgTElBQkxFIFRPIEFOWSBQRVJTT04gRk9SIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCwKK0lOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVAorTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRQorT1IgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4KK0lGIFNVQ0ggUEFSVFkgU0hBTEwgSEFWRSBCRUVOIElORk9STUVEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCitUSElTIExJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIE5PVCBBUFBMWSBUTyBMSUFCSUxJVFkgRk9SIERFQVRIIE9SCitQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWSdTIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFCitMQVcgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OCitPUiBMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSElTIEVYQ0xVU0lPTgorQU5EIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKyA8aDI+PGEgbmFtZT0idHRoX3NFYzEwIj4KKzEwPC9hPiZuYnNwOyZuYnNwOzx1PlUuUy4gR09WRVJOTUVOVCBFTkQgVVNFUlMuPC91PjwvaDI+CisKKyA8aDI+PGEgbmFtZT0idHRoX3NFYzExIj4KKzExPC9hPiZuYnNwOyZuYnNwOzx1Pk1JU0NFTExBTkVPVVMuPC91PjwvaDI+CisKKyA8aDI+PGEgbmFtZT0idHRoX3NFYzEyIj4KKzEyPC9hPiZuYnNwOyZuYnNwO1JFU1BPTlNJQklMSVRZIEZPUiBDTEFJTVMuPC9oMj4KK0FzIGJldHdlZW4gSW5pdGlhbCBEZXZlbG9wZXIgYW5kIHRoZSBDb250cmlidXRvcnMsIGVhY2ggcGFydHkgaXMgcmVzcG9uc2libGUKK2ZvciBjbGFpbXMgYW5kIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgb3V0IG9mIGl0cyB1dGlsaXphdGlvbgorb2YgcmlnaHRzIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgWW91IGFncmVlIHRvIHdvcmsgd2l0aCBJbml0aWFsIERldmVsb3BlciBhbmQKK0NvbnRyaWJ1dG9ycyB0byBkaXN0cmlidXRlIHN1Y2ggcmVzcG9uc2liaWxpdHkgb24gYW4gZXF1aXRhYmxlIGJhc2lzLiAgTm90aGluZworaGVyZWluIGlzIGludGVuZGVkIG9yIHNoYWxsIGJlIGRlZW1lZCB0byBjb25zdGl0dXRlIGFueSBhZG1pc3Npb24gb2YgbGlhYmlsaXR5LgorCis8ZGl2IGNsYXNzPSJwIj48IS0tLS0+PC9kaXY+CisKKzxoMj5FWEhJQklUIEEuPC9oMj4KKworPGRpdiBjbGFzcz0icCI+PCEtLS0tPjwvZGl2PgorIlRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIGdTT0FQIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4zCisodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUKK0xpY2Vuc2UuIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUgTGljZW5zZSBhdAorCis8YmxvY2txdW90ZT4KK2h0dHA6Ly93d3cuY3MuZnN1LmVkdS8mbmJzcDtlbmdlbGVuL3NvYXBsaWNlbnNlLmh0bWwKKzwvYmxvY2txdW90ZT4KK1NvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIKK2Jhc2lzLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiBTZWUgdGhlIExpY2Vuc2UKK2ZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuCisKKzxkaXYgY2xhc3M9InAiPjwhLS0tLT48L2Rpdj4KK1RoZSBPcmlnaW5hbCBDb2RlIG9mIHRoZSBnU09BUCBTb2Z0d2FyZSBpczoKK3N0ZHNvYXAuaCwgc3Rkc29hcDIuaCwgc3Rkc29hcC5jLCBzdGRzb2FwMi5jLCBzdGRzb2FwLmNwcCwgc3Rkc29hcDIuY3BwLCBzb2FwY3BwMi5oLCBzb2FwY3BwMi5jLAorc29hcGNwcDJfbGV4LmwsIHNvYXBjcHAyX3lhY2MueSwgZXJyb3IyLmgsIGVycm9yMi5jLAorc3ltYm9sMi5jLCBpbml0Mi5jLCBzb2FwZG9jMi5odG1sLCBhbmQgc29hcGRvYzIucGRmLCBodHRwZ2V0LmgsIGh0dHBnZXQuYywgc3RsLmgsIHN0bGRlcXVlLmgsIHN0bGxpc3QuaCwgc3RsdmVjdG9yLmgsIHN0bHNldC5oLgorCis8ZGl2IGNsYXNzPSJwIj48IS0tLS0+PC9kaXY+CitUaGUgSW5pdGlhbCBEZXZlbG9wZXIgb2YgdGhlIE9yaWdpbmFsIENvZGUgaXMgUm9iZXJ0IEEuIHZhbiBFbmdlbGVuLiAgUG9ydGlvbnMKK2NyZWF0ZWQgYnkgUm9iZXJ0IEEuIHZhbiBFbmdlbGVuIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNCBSb2JlcnQgQS4gdmFuCitFbmdlbGVuLCBHZW5pdmlhIGluYy4gIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKKzxkaXYgY2xhc3M9InAiPjwhLS0tLT48L2Rpdj4KK0NvbnRyaWJ1dG9yKHMpOgorCis8ZGwgY29tcGFjdD0iY29tcGFjdCI+CisgPGR0PjxiPiJfX19fX19fX19fX19fX19fX19fX19fX18uIjwvYj48L2R0PgorCTxkZD48L2RkPgorPC9kbD4KK1tOb3RlOiBUaGUgdGV4dCBvZiB0aGlzIEV4aGliaXQgQSBtYXkgZGlmZmVyIHNsaWdodGx5IGZvcm0gdGhlIHRleHQgb2YgdGhlCitub3RpY2VzIGluIHRoZSBTb3VyY2UgQ29kZSBmaWxlcyBvZiB0aGUgT3JpZ2luYWwgY29kZS4gIFlvdSBzaG91bGQgdXNlIHRoZSB0ZXh0CitvZiB0aGlzIEV4aGliaXQgQSByYXRoZXIgdGhhbiB0aGUgdGV4dCBmb3VuZCBpbiB0aGUgT3JpZ2luYWwgQ29kZSBTb3VyY2UgQ29kZQorZm9yIFlvdXIgTW9kaWZpY2F0aW9ucy5dCisKKzxkaXYgY2xhc3M9InAiPjwhLS0tLT48L2Rpdj4KKworPGgyPkVYSElCSVQgQi48L2gyPgorCis8ZGl2IGNsYXNzPSJwIj48IS0tLS0+PC9kaXY+CisiUGFydCBvZiB0aGUgc29mdHdhcmUgZW1iZWRkZWQgaW4gdGhpcyBwcm9kdWN0IGlzIGdTT0FQIHNvZnR3YXJlLgorCis8ZGl2IGNsYXNzPSJwIj48IS0tLS0+PC9kaXY+CitQb3J0aW9ucyBjcmVhdGVkIGJ5IGdTT0FQIGFyZSBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNyBSb2JlcnQgQS4gdmFuIEVuZ2VsZW4sCitHZW5pdmlhIGluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworPGRpdiBjbGFzcz0icCI+PCEtLS0tPjwvZGl2PgorVEhFIFNPRlRXQVJFIElOIFRISVMgUFJPRFVDVCBXQVMgSU4gUEFSVCBQUk9WSURFRCBCWSBHRU5JVklBIElOQyBBTkQgQU5ZCitFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCitESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKK1BST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UKK09SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYKK0FEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiIKKworPC9odG1sPgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvZ2FsYXh5aGFjayBiL2xpY2Vuc2VzL2dhbGF4eWhhY2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFlMmNkNwotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL2dhbGF4eWhhY2sKQEAgLTAsMCArMSw0IEBACitUaGUgYXJ0IGFuZCBtdXNpYyBhcmUgY29weXJpZ2h0IG9mIHRoZWlyIHJlc3BlY3RpdmUgYXV0aG9ycywgaWYgeW91IHdpc2ggdG8KK2NvcHkvc2VsbC91c2UgYXJ0IGZyb20gdGhlIGdhbWUgaW4gYW55IGNvbnRleHQgb3RoZXIgdGhhbiBHYWxheHlIYWNrIHRoZW4geW91CittdXN0IGZpbmQgb3V0IHdobyBjcmVhdGVkIHRoZSBwYXJ0aWN1bGFyIHBpY3R1cmUvYXVkaW8gZmlsZSB5b3Ugd2lzaCB0byB1c2UgYW5kCitjb250YWN0IHRoZW0gdG8gYXNrIGZvciB0aGVpciBwZXJtaXNzaW9uLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvZ2FtZXNzIGIvbGljZW5zZXMvZ2FtZXNzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkYmQzOGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9nYW1lc3MKQEAgLTAsMCArMSw0MiBAQAorR0FNRVNTIFVzZXIgTGljZW5zZSBBZ3JlZW1lbnQKKworQWxsIEdBTUVTUyByZXF1ZXN0b3JzIE1VU1QgYWdyZWUgdG8gdGhlIGZvbGxvd2luZyBsaWNlbnNlIAorYWdncmVtZW50IHdoaWNoIGNvdmVycyBhbGwgdmVyc2lvbnMgb2YgR0FNRVNTIChzb3VyY2UgY29kZSwgCithbmQgYmluYXJpZXMgZm9yIFdpbmRvd3MsIE1hY2ludG9zaCBhbmQgQ2hlbU9mZmljZSkuCitXaXRoIHJlZ2FyZCB0byB0aGUgYWIgaW5pdGlvIHF1YW50dW0gY2hlbWlzdHJ5IGNvZGUgR0FNRVNTLCAKK3RvZ2V0aGVyIHdpdGggaXRzIGFzc29jaWF0ZWQgZ3JhcGhpY3MgYW5kIHV0aWxpdHkgcHJvZ3JhbXMsIAord2l0aCB3aGljaCB5b3UgaGF2ZSBzdXBwbGllZCBtZSBhIGNvcHksIEkgYWdyZWUgdG8gdGhlIGZvbGxvd2luZyAKK2NvbmRpdGlvbnM6CisKKzEuIEkgd2lsbCBub3Qgc3VwcGx5IGEgY29weSBvZiB0aGUgY29kZSB0byBhbnlvbmUgb3V0c2lkZSBteSAKK2luc3RpdHV0aW9uIG9yIGNvcnBvcmF0aW9uIGZvciBhbnkgcmVhc29uIHdoYXRzb2V2ZXIuIEluc3RlYWQsIAorSSB3aWxsIHJlZmVyIGFueSByZXF1ZXN0cyBmb3IgY29waWVzIG9mIHRoZSBwcm9ncmFtIHRvIHlvdSBhdCAKK0lTVVFDRy4gVGhpcyBpbiBubyB3YXkgbGltaXRzIG15IG1ha2luZyBvZiBjb3BpZXMgb2YgdGhlIGNvZGUgCitmb3IgYmFja3VwIHB1cnBvc2VzLCBvciBmb3IgcnVubmluZyBvbiBtb3JlIHRoYW4gb25lIGNvbXB1dGVyIAorc3lzdGVtIGF0IG15IGluc3RpdHV0aW9uIG9yIGhvbWUuCisKKzIuIEkgdW5kZXJzdGFuZCB0aGF0IGNvcHlyaWdodCBvciBvd25lcnNoaXAgcmlnaHRzIHRvIEdBTUVTUyAKK2FyZSByZXRhaW5lZCBieSBJU1VRQ0cgYW5kIGNvbnRyaWJ1dG9ycyB0byB0aGUgR0FNRVNTIHBhY2thZ2UuIAorSSB3aWxsIG5vdCBpbmNvcnBvcmF0ZSBhbnkgcGFydCBvZiBHQU1FU1MgaW50byBhbnkgb3RoZXIgcHJvZ3JhbSAKK3N5c3RlbSwgZWl0aGVyIGZvciBzYWxlIG9yIGZvciBub24tcHJvZml0IGRpc3RyaWJ1dGlvbiwgd2l0aG91dCAKK3dyaXR0ZW4gcGVybWlzc2lvbiBmcm9tIElTVVFDRywKKworMy4gSSB1bmRlcnN0YW5kIHRoYXQgbm8gbGFyZ2UgcHJvZ3JhbSBzdWNoIGFzIEdBTUVTUyBjYW4gYmUgCitjb25zaWRlcmVkIHRvIGJlIGJ1ZyBmcmVlLCBhbmQgYWNjb3JkaW5nbHkgdGhlIElTVVFDRyBzdXBwbGllcyAKK3RoZSBHQU1FU1Mgc29mdHdhcmUgb24gYW4gImFzIGlzIiBiYXNpcywgd2l0aCBubyBhZGRpdGlvbmFsIAorcmVzcG9uc2liaWxpdHkgb3IgbGlhYmlsaXR5LAorCis0LiBJZiByZXN1bHRzIG9idGFpbmVkIHdpdGggR0FNRVNTIGFyZSBwdWJsaXNoZWQgaW4gdGhlIAorc2NpZW50aWZpYyBsaXRlcmF0dXJlLCBJIHdpbGwgcmVmZXJlbmNlIHRoZSBwcm9ncmFtIGZyb20gdGhlIAorYXJ0aWNsZSBNLlcuU2NobWlkdCwgSy5LLkJhbGRyaWRnZSwgSi5BLkJvYXR6LCBTLlQuRWxiZXJ0LCAKK00uUy5Hb3Jkb24sIEouSC5KZW5zZW4sIFMuS29zZWtpLCBOLk1hdHN1bmFnYSwgSy5BLk5ndXllbiwgCitTLkouU3UsIFQuTC5XaW5kdXMsIE0uRHVwdWlzLCBKLkEuTW9udGdvbWVyeSAKK0ouIENvbXB1dC4gQ2hlbS4gMTQsIDEzNDctMTM2MyAoMTk5MykuIFVzaW5nIHNwZWNpZmljIG1ldGhvZHMgCitpbmNsdWRlZCBpbiBHQU1FU1MgbWF5IHJlcXVpcmUgY2l0aW5nIGFkZGl0aW9uYWwgYXJ0aWNsZXMsIAorYXMgZGVzY3JpYmVkIGluIHRoZSBtYW51YWwuIEkgYWdyZWUgdG8gaG9ub3IgdGhlIHJlcXVlc3QgdG8gCitjaXRlIGFkZGl0aW9uYWwgcGFwZXJzLCBhcyBhcHByb3ByaWF0ZS4KKworNS4gVGhpcyBsaWNlbnNlIGlzIGNvbnNpZGVyZWQgYSAiUmVzZWFyY2ggR3JvdXAiIGxpY2Vuc2UuIAorVGh1cyBhbnlvbmUgZGlyZWN0bHkgYXNzb2NpYXRlZCB3aXRoIHlvdXIgcmVzZWFyY2ggZ3JvdXAgaXMgCitjb3ZlcmVkIGJ5IHRoZSBsaWNlbnNlIGFuZCBtYXkgc2hhcmUgeW91ciBjb3B5IG9mIEdBTUVTUyBvbiAKK2FsbCBvZiB5b3VyIGdyb3VwJ3MgY29tcHV0ZXIgcmVzb3VyY2VzLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvZ2NjLXJ1bnRpbWUtbGlicmFyeS1leGNlcHRpb24tMy4xIGIvbGljZW5zZXMvZ2NjLXJ1bnRpbWUtbGlicmFyeS1leGNlcHRpb24tMy4xCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxYjNjNjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9nY2MtcnVudGltZS1saWJyYXJ5LWV4Y2VwdGlvbi0zLjEKQEAgLTAsMCArMSw3MyBAQAorR0NDIFJVTlRJTUUgTElCUkFSWSBFWENFUFRJT04KKworVmVyc2lvbiAzLjEsIDMxIE1hcmNoIDIwMDkKKworQ29weXJpZ2h0IChDKSAyMDA5IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiA8aHR0cDovL2ZzZi5vcmcvPgorCitFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhpcworbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCitUaGlzIEdDQyBSdW50aW1lIExpYnJhcnkgRXhjZXB0aW9uICgiRXhjZXB0aW9uIikgaXMgYW4gYWRkaXRpb25hbAorcGVybWlzc2lvbiB1bmRlciBzZWN0aW9uIDcgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uCiszICgiR1BMdjMiKS4gSXQgYXBwbGllcyB0byBhIGdpdmVuIGZpbGUgKHRoZSAiUnVudGltZSBMaWJyYXJ5IikgdGhhdAorYmVhcnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIG9mIHRoZSBmaWxlIHN0YXRpbmcgdGhhdAordGhlIGZpbGUgaXMgZ292ZXJuZWQgYnkgR1BMdjMgYWxvbmcgd2l0aCB0aGlzIEV4Y2VwdGlvbi4KKworV2hlbiB5b3UgdXNlIEdDQyB0byBjb21waWxlIGEgcHJvZ3JhbSwgR0NDIG1heSBjb21iaW5lIHBvcnRpb25zIG9mCitjZXJ0YWluIEdDQyBoZWFkZXIgZmlsZXMgYW5kIHJ1bnRpbWUgbGlicmFyaWVzIHdpdGggdGhlIGNvbXBpbGVkCitwcm9ncmFtLiBUaGUgcHVycG9zZSBvZiB0aGlzIEV4Y2VwdGlvbiBpcyB0byBhbGxvdyBjb21waWxhdGlvbiBvZgorbm9uLUdQTCAoaW5jbHVkaW5nIHByb3ByaWV0YXJ5KSBwcm9ncmFtcyB0byB1c2UsIGluIHRoaXMgd2F5LCB0aGUKK2hlYWRlciBmaWxlcyBhbmQgcnVudGltZSBsaWJyYXJpZXMgY292ZXJlZCBieSB0aGlzIEV4Y2VwdGlvbi4KKworMC4gRGVmaW5pdGlvbnMuCisKK0EgZmlsZSBpcyBhbiAiSW5kZXBlbmRlbnQgTW9kdWxlIiBpZiBpdCBlaXRoZXIgcmVxdWlyZXMgdGhlIFJ1bnRpbWUKK0xpYnJhcnkgZm9yIGV4ZWN1dGlvbiBhZnRlciBhIENvbXBpbGF0aW9uIFByb2Nlc3MsIG9yIG1ha2VzIHVzZSBvZiBhbgoraW50ZXJmYWNlIHByb3ZpZGVkIGJ5IHRoZSBSdW50aW1lIExpYnJhcnksIGJ1dCBpcyBub3Qgb3RoZXJ3aXNlIGJhc2VkCitvbiB0aGUgUnVudGltZSBMaWJyYXJ5LgorCisiR0NDIiBtZWFucyBhIHZlcnNpb24gb2YgdGhlIEdOVSBDb21waWxlciBDb2xsZWN0aW9uLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbnMsIGdvdmVybmVkIGJ5IHZlcnNpb24gMyAob3IgYSBzcGVjaWZpZWQgbGF0ZXIgdmVyc2lvbikgb2YKK3RoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoR1BMKSB3aXRoIHRoZSBvcHRpb24gb2YgdXNpbmcgYW55CitzdWJzZXF1ZW50IHZlcnNpb25zIHB1Ymxpc2hlZCBieSB0aGUgRlNGLgorCisiR1BMLWNvbXBhdGlibGUgU29mdHdhcmUiIGlzIHNvZnR3YXJlIHdob3NlIGNvbmRpdGlvbnMgb2YgcHJvcGFnYXRpb24sCittb2RpZmljYXRpb24gYW5kIHVzZSB3b3VsZCBwZXJtaXQgY29tYmluYXRpb24gd2l0aCBHQ0MgaW4gYWNjb3JkIHdpdGgKK3RoZSBsaWNlbnNlIG9mIEdDQy4KKworIlRhcmdldCBDb2RlIiByZWZlcnMgdG8gb3V0cHV0IGZyb20gYW55IGNvbXBpbGVyIGZvciBhIHJlYWwgb3IgdmlydHVhbAordGFyZ2V0IHByb2Nlc3NvciBhcmNoaXRlY3R1cmUsIGluIGV4ZWN1dGFibGUgZm9ybSBvciBzdWl0YWJsZSBmb3IKK2lucHV0IHRvIGFuIGFzc2VtYmxlciwgbG9hZGVyLCBsaW5rZXIgYW5kL29yIGV4ZWN1dGlvbgorcGhhc2UuIE5vdHdpdGhzdGFuZGluZyB0aGF0LCBUYXJnZXQgQ29kZSBkb2VzIG5vdCBpbmNsdWRlIGRhdGEgaW4gYW55Citmb3JtYXQgdGhhdCBpcyB1c2VkIGFzIGEgY29tcGlsZXIgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uLCBvciB1c2VkCitmb3IgcHJvZHVjaW5nIGEgY29tcGlsZXIgaW50ZXJtZWRpYXRlIHJlcHJlc2VudGF0aW9uLgorCitUaGUgIkNvbXBpbGF0aW9uIFByb2Nlc3MiIHRyYW5zZm9ybXMgY29kZSBlbnRpcmVseSByZXByZXNlbnRlZCBpbgorbm9uLWludGVybWVkaWF0ZSBsYW5ndWFnZXMgZGVzaWduZWQgZm9yIGh1bWFuLXdyaXR0ZW4gY29kZSwgYW5kL29yIGluCitKYXZhIFZpcnR1YWwgTWFjaGluZSBieXRlIGNvZGUsIGludG8gVGFyZ2V0IENvZGUuIFRodXMsIGZvciBleGFtcGxlLAordXNlIG9mIHNvdXJjZSBjb2RlIGdlbmVyYXRvcnMgYW5kIHByZXByb2Nlc3NvcnMgbmVlZCBub3QgYmUgY29uc2lkZXJlZAorcGFydCBvZiB0aGUgQ29tcGlsYXRpb24gUHJvY2Vzcywgc2luY2UgdGhlIENvbXBpbGF0aW9uIFByb2Nlc3MgY2FuIGJlCit1bmRlcnN0b29kIGFzIHN0YXJ0aW5nIHdpdGggdGhlIG91dHB1dCBvZiB0aGUgZ2VuZXJhdG9ycyBvcgorcHJlcHJvY2Vzc29ycy4KKworQSBDb21waWxhdGlvbiBQcm9jZXNzIGlzICJFbGlnaWJsZSIgaWYgaXQgaXMgZG9uZSB1c2luZyBHQ0MsIGFsb25lIG9yCit3aXRoIG90aGVyIEdQTC1jb21wYXRpYmxlIHNvZnR3YXJlLCBvciBpZiBpdCBpcyBkb25lIHdpdGhvdXQgdXNpbmcgYW55Cit3b3JrIGJhc2VkIG9uIEdDQy4gRm9yIGV4YW1wbGUsIHVzaW5nIG5vbi1HUEwtY29tcGF0aWJsZSBTb2Z0d2FyZSB0bworb3B0aW1pemUgYW55IEdDQyBpbnRlcm1lZGlhdGUgcmVwcmVzZW50YXRpb25zIHdvdWxkIG5vdCBxdWFsaWZ5IGFzIGFuCitFbGlnaWJsZSBDb21waWxhdGlvbiBQcm9jZXNzLgorCisxLiBHcmFudCBvZiBBZGRpdGlvbmFsIFBlcm1pc3Npb24uCisKK1lvdSBoYXZlIHBlcm1pc3Npb24gdG8gcHJvcGFnYXRlIGEgd29yayBvZiBUYXJnZXQgQ29kZSBmb3JtZWQgYnkKK2NvbWJpbmluZyB0aGUgUnVudGltZSBMaWJyYXJ5IHdpdGggSW5kZXBlbmRlbnQgTW9kdWxlcywgZXZlbiBpZiBzdWNoCitwcm9wYWdhdGlvbiB3b3VsZCBvdGhlcndpc2UgdmlvbGF0ZSB0aGUgdGVybXMgb2YgR1BMdjMsIHByb3ZpZGVkIHRoYXQKK2FsbCBUYXJnZXQgQ29kZSB3YXMgZ2VuZXJhdGVkIGJ5IEVsaWdpYmxlIENvbXBpbGF0aW9uIFByb2Nlc3Nlcy4gWW91CittYXkgdGhlbiBjb252ZXkgc3VjaCBhIGNvbWJpbmF0aW9uIHVuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLAorY29uc2lzdGVudCB3aXRoIHRoZSBsaWNlbnNpbmcgb2YgdGhlIEluZGVwZW5kZW50IE1vZHVsZXMuCisKKzIuIE5vIFdlYWtlbmluZyBvZiBHQ0MgQ29weWxlZnQuCisKK1RoZSBhdmFpbGFiaWxpdHkgb2YgdGhpcyBFeGNlcHRpb24gZG9lcyBub3QgaW1wbHkgYW55IGdlbmVyYWwKK3ByZXN1bXB0aW9uIHRoYXQgdGhpcmQtcGFydHkgc29mdHdhcmUgaXMgdW5hZmZlY3RlZCBieSB0aGUgY29weWxlZnQKK3JlcXVpcmVtZW50cyBvZiB0aGUgbGljZW5zZSBvZiBHQ0MuCisKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL2dlYW50NCBiL2xpY2Vuc2VzL2dlYW50NApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTI2YzRlCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvZ2VhbnQ0CkBAIC0wLDAgKzEsNzMgQEAKK0dlYW50NCBTb2Z0d2FyZSBMaWNlbnNlCitWZXJzaW9uIDEuMCwgMjggSnVuZSAyMDA2CisKK0NvcHlyaWdodCAoYykgQ29weXJpZ2h0IEhvbGRlcnMgb2YgdGhlIEdlYW50NCBDb2xsYWJvcmF0aW9uLCAxOTk0LTIwMDYuCitTZWUgaHR0cDovL2Nlcm4uY2gvZ2VhbnQ0L2xpY2Vuc2UgZm9yIGRldGFpbHMgb24gdGhlIGNvcHlyaWdodCBob2xkZXJzLiAgQWxsCityaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIHVuZGVyIHRoaXMgbGljZW5zZSBhcmUgcmVzZXJ2ZWQuCisKK1RoaXMgc29mdHdhcmUgaW5jbHVkZXMgdm9sdW50YXJ5IGNvbnRyaWJ1dGlvbnMgbWFkZSB0byBHZWFudDQuCitTZWUgaHR0cDovL2Nlcm4uY2gvZ2VhbnQ0IGZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEdlYW50NC4KKworSW5zdGFsbGF0aW9uLCB1c2UsIHJlcHJvZHVjdGlvbiwgZGlzcGxheSwgbW9kaWZpY2F0aW9uIGFuZCByZWRpc3RyaWJ1dGlvbiBvZgordGhpcyBzb2Z0d2FyZSwgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIGFyZQorcGVybWl0dGVkIG9uIGEgbm9uLWV4Y2x1c2l2ZSBiYXNpcy4gQW55IGV4ZXJjaXNlIG9mIHJpZ2h0cyBieSB5b3UgdW5kZXIgdGhpcworbGljZW5zZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworMS4gUmVkaXN0cmlidXRpb25zIG9mIHRoaXMgc29mdHdhcmUsICBpbiB3aG9sZSBvciBpbiBwYXJ0LCAgd2l0aCAgb3Igd2l0aG91dAorICAgbW9kaWZpY2F0aW9uLCBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlc2UgbGljZW5zZQorICAgY29uZGl0aW9ucyAgaW4gIHRoaXMgIHNvZnR3YXJlLCAgdGhlICB1c2VyICBkb2N1bWVudGF0aW9uICBhbmQgIGFueSBvdGhlcgorICAgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0ZWQgc29mdHdhcmUuCisKKzIuIFRoZSB1c2VyIGRvY3VtZW50YXRpb24saWYgYW55LGluY2x1ZGVkIHdpdGggYSByZWRpc3RyaWJ1dGlvbixtdXN0IGluY2x1ZGUKKyAgIHRoZSBmb2xsb3dpbmcgbm90aWNlOiJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IE1lbWJlcnMKKyAgIG9mIHRoZSBHZWFudDQgQ29sbGFib3JhdGlvbiAoIGh0dHA6Ly9jZXJuLmNoL2dlYW50NCApLiIKKyAgIElmIHRoYXQgIGlzICB3aGVyZSAgdGhpcmQtcGFydHkgIGFja25vd2xlZGdtZW50cyAgbm9ybWFsbHkgIGFwcGVhciwgIHRoaXMKKyAgIGFja25vd2xlZGdtZW50ICBtdXN0ICBiZSAgcmVwcm9kdWNlZCAgaW4gIHRoZSAgbW9kaWZpZWQgIHZlcnNpb24gIG9mIHRoaXMKKyAgIHNvZnR3YXJlIGl0c2VsZi4KKworMy4gVGhlIG5hbWVzICJHZWFudDQiIGFuZCAiVGhlIEdlYW50NCB0b29sa2l0IiBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvcgorICAgcHJvbW90ZSBzb2Z0d2FyZSxvciBwcm9kdWN0cyBkZXJpdmVkIHRoZXJlZnJvbSwgZXhjZXB0IHdpdGggcHJpb3Igd3JpdHRlbgorICAgcGVybWlzc2lvbiAgYnkgIGxpY2Vuc2VAZ2VhbnQ0Lm9yZy4gIElmIHRoaXMgc29mdHdhcmUgaXMgcmVkaXN0cmlidXRlZCBpbgorICAgbW9kaWZpZWQgZm9ybSwgIHRoZSBuYW1lICBhbmQgIHJlZmVyZW5jZSBvZiAgdGhlIG1vZGlmaWVkIHZlcnNpb24gbXVzdCBiZQorICAgY2xlYXJseSBkaXN0aW5ndWlzaGFibGUgZnJvbSB0aGF0IG9mIHRoaXMgc29mdHdhcmUuCisKKzQuIFlvdSBhcmUgdW5kZXIgbm8gb2JsaWdhdGlvbiB0byBwcm92aWRlIGFueW9uZSB3aXRoICBhbnkgIG1vZGlmaWNhdGlvbnMgb2YKKyAgIHRoaXMgc29mdHdhcmUgdGhhdCB5b3UgbWF5IGRldmVsb3AsaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBidWcgZml4ZXMsCisgICBwYXRjaGVzLCAgdXBncmFkZXMgIG9yICBvdGhlciBlbmhhbmNlbWVudHMgb3IgZGVyaXZhdGl2ZXMgb2YgdGhlIGZlYXR1cmVzLAorICAgZnVuY3Rpb25hbGl0eSBvciBwZXJmb3JtYW5jZSBvZiB0aGlzIHNvZnR3YXJlLiBIb3dldmVyLCBpZiB5b3UgcHVibGlzaCBvcgorICAgZGlzdHJpYnV0ZSB5b3VyIG1vZGlmaWNhdGlvbnMgd2l0aG91dCAgY29udGVtcG9yYW5lb3VzbHkgIHJlcXVpcmluZyB1c2VycworICAgdG8gZW50ZXIgaW50byBhIHNlcGFyYXRlIHdyaXR0ZW4gbGljZW5zZSBhZ3JlZW1lbnQsICB0aGVuICB5b3UgYXJlIGRlZW1lZAorICAgdG8gaGF2ZSBncmFudGVkIGFsbCAgTWVtYmVycyAgYW5kIGFsbCAgQ29weXJpZ2h0IEhvbGRlcnMgIG9mICB0aGUgIEdlYW50NAorICAgQ29sbGFib3JhdGlvbiAgYSBsaWNlbnNlIHRvIHlvdXIgIG1vZGlmaWNhdGlvbnMsICBpbmNsdWRpbmcgbW9kaWZpY2F0aW9ucworICAgcHJvdGVjdGVkIGJ5IGFueSBwYXRlbnQgb3duZWQgYnkgeW91LHVuZGVyIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgbGljZW5zZS4KKworNS4gWW91IG1heSBub3QgaW5jbHVkZSAgdGhpcyAgc29mdHdhcmUgaW4gIHdob2xlIG9yIGluIHBhcnQgaW4gYW55IHBhdGVudCBvcgorICAgcGF0ZW50ICBhcHBsaWNhdGlvbiAgaW4gIHJlc3BlY3QgIG9mICBhbnkgIG1vZGlmaWNhdGlvbiAgb2YgdGhpcyBzb2Z0d2FyZQorICAgZGV2ZWxvcGVkIGJ5IHlvdS4KKworCis2LiBESVNDTEFJTUVSCisKKyBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBNRU1CRVJTIEFORCBDT1BZUklHSFQgSE9MREVSUyBPRiBUSEUgR0VBTlQ0CisgQ09MTEFCT1JBVElPTiBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywKKyBJTkNMVURJTkcsICBCVVQgTk9UIExJTUlURUQgVE8sICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgIE1FUkNIQU5UQUJJTElUWSwgIE9GCisgU0FUSVNGQUNUT1JZIFFVQUxJVFksICBBTkQgRklUTkVTUyAgRk9SICBBICBQQVJUSUNVTEFSIFBVUlBPU0UgIE9SICBVU0UgIEFSRQorIERJU0NMQUlNRUQuIFRIRSBNRU1CRVJTIE9GIFRIRSBHRUFOVDQgQ09MTEFCT1JBVElPTiBBTkQgQ09OVFJJQlVUT1JTIE1BS0UgTk8KKyBSRVBSRVNFTlRBVElPTiBUSEFUIFRIRSBTT0ZUV0FSRSBBTkQgTU9ESUZJQ0FUSU9OUyBUSEVSRU9GLFdJTEwgTk9UIElORlJJTkdFCisgQU5ZIFBBVEVOVCwgQ09QWVJJR0hULCBUUkFERSBTRUNSRVQgT1IgT1RIRVIgUFJPUFJJRVRBUlkgUklHSFQuCisKKzcuIExJTUlUQVRJT04gT0YgTElBQklMSVRZCisKKyBUSEUgIE1FTUJFUlMgIEFORCAgQ09QWVJJR0hUICAgSE9MREVSUyAgT0YgIFRIRSAgIEdFQU5UNCAgQ09MTEFCT1JBVElPTiAgQU5ECisgQ09OVFJJQlVUT1JTIFNIQUxMIEhBVkUgTk8gTElBQklMSVRZIEZPUiBESVJFQ1QsSU5ESVJFQ1QsU1BFQ0lBTCwgSU5DSURFTlRBTCwKKyBDT05TRVFVRU5USUFMLCAgRVhFTVBMQVJZLCAgT1IgUFVOSVRJVkUgREFNQUdFUyAgT0YgIEFOWSBDSEFSQUNURVIgSU5DTFVESU5HLAorIFdJVEhPVVQgTElNSVRBVElPTiwgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUywgTE9TUyBPRiBVU0UsCisgREFUQSBPUiBQUk9GSVRTLCAgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorIE9GIENPTlRSQUNULCAgV0FSUkFOVFksIFRPUlQgIChJTkNMVURJTkcgTkVHTElHRU5DRSksICBQUk9EVUNUIExJQUJJTElUWSAgT1IKKyBPVEhFUldJU0UsICBBUklTSU5HIElOICBBTlkgV0FZICBPVVQgT0YgVEhFIFVTRSAgT0YgIFRISVMgU09GVFdBUkUsICBFVkVOIElGCisgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis4LiBUaGlzIGxpY2Vuc2UgIHNoYWxsIHRlcm1pbmF0ZSB3aXRoIGltbWVkaWF0ZSBlZmZlY3QgYW5kIHdpdGhvdXQgbm90aWNlIGlmCisgICB5b3UgIGZhaWwgIHRvICBjb21wbHkgd2l0aCBhbnkgIG9mICB0aGUgdGVybXMgb2YgdGhpcyBsaWNlbnNlLCAgb3IgaWYgeW91CisgICBpbnN0aXR1dGUgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBNZW1iZXIgb3IgQ29weXJpZ2h0IEhvbGRlciBvZiB0aGUgR2VhbnQ0CisgICBDb2xsYWJvcmF0aW9uIHdpdGggcmVnYXJkIHRvIHRoaXMgc29mdHdhcmUuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9nbGVzdC1kYXRhIGIvbGljZW5zZXMvZ2xlc3QtZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDRkNzM5Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvZ2xlc3QtZGF0YQpAQCAtMCwwICsxLDI1IEBACis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0dsZXN0IEdhbWUgMi4wLjAgIExpY2Vuc2UKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitFeGNlcHQgd2hlcmUgb3RoZXJ3aXNlIG5vdGVkLCBhbGwgb2YgdGhlIGRvY3VtZW50YXRpb24sIG11bHRpbWVkaWEgYW5kIHNvZnR3YXJlIGluY2x1ZGVkIGluIHRoZSBHbGVzdCBHYW1lIHNldHVwIHBhY2thZ2UgaXMgY29weXJpZ2h0ZWQgYnkgVGhlIEdsZXN0IFRlYW0uCisKK0NvcHlyaWdodCAoQykgMjAwMS0yMDA2IFRoZSBHbGVzdCBUZWFtLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4gSW4gbm8gZXZlbnQgc2hhbGwgdGhlIGF1dGhvciBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4KKworVGhpcyBzb2Z0d2FyZSBtYXkgYmUgcmVkaXN0cmlidXRlZCBmcmVlbHksIGJ1dCBhbGwgcmVkaXN0cmlidXRpb25zIG11c3QgcmV0YWluIGFsbCBvY2N1cmVuY2VzIG9mIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB3ZWIgc2l0ZSBhZGRyZXNzZXMgdGhhdCBhcmUgY3VycmVudGx5IGluIHBsYWNlLgorCisKK2VtYWlsOiBjb250YWN0QGdsZXN0Lm9yZword2ViOiBodHRwOi8vd3d3LmdsZXN0Lm9yZy8KKworCitUaGUgR2xlc3QgVGVhbToKKworUHJvZ3JhbW1lcjogTWFydGnDsW8gRmlndWVyb2EKK1NvdW5kIGFydGlzdDogSm9zZSBMdWlzIEdvbnrDoWxlegorMkQgYW5kIDNEIGFydGlzdDogVHVjaG8gRmVybsOhbmRlegorMkQgYXJ0aXN0IGFuZCB3ZWI6IEpvc8OpIFphbm5pCitBbmltYXRpb246IEbDqWxpeCBNZW7DqW5kZXoKKzNEIGFydGlzdDogTWFyY29zIENhcnVuY2hvCmRpZmYgLS1naXQgYS9saWNlbnNlcy9nbGltcHNlIGIvbGljZW5zZXMvZ2xpbXBzZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDljMGUwCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvZ2xpbXBzZQpAQCAtMCwwICsxLDE0NSBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9XM0MvL0RURCBIVE1MIDMuMi8vRU4iPgorPEhUTUw+Cis8SEVBRD4KKyAgIDxUSVRMRT48L1RJVExFPgorICAgPE1FVEEgTkFNRT0iQXV0aG9yIiBDT05URU5UPSIiPgorICAgPE1FVEEgTkFNRT0iR0VORVJBVE9SIiBDT05URU5UPSJNb3ppbGxhLzMuMDFHb2xkIChXaW45NTsgSSkgW05ldHNjYXBlXSI+Cis8L0hFQUQ+Cis8Qk9EWSBiZ2NvbG9yPSIjZmZmZmRkIj4KKworPFA+PEZPTlQgU0laRT0rMj5HbGltcHNlL1dlYmdsaW1wc2UgU29mdHdhcmUgTGljZW5zaW5nIEFncmVlbWVudCA8L0ZPTlQ+PC9QPgorCis8UD5USElTIFNPRlRXQVJFIExJQ0VOU0lORyBBTkQgUk9ZQUxUWSBBR1JFRU1FTlQgKHRoaXMgJnF1b3Q7QWdyZWVtZW50JnF1b3Q7KQoraXMgbWFkZSBieSBhbmQgYmV0d2VlbiBJbnRlcm5ldCBXb3JrU2hvcCAoaGVyZWluYWZ0ZXIgJnF1b3Q7TGljZW5zb3ImcXVvdDspLAorYXMgcGVyIHJlc2FsZSBsaWNlbnNlIGdyYW50ZWQgYnkgVGhlIEFyaXpvbmEgQm9hcmQgb2YgUmVnZW50cyBmb3IgVGhlIFVuaXZlcnNpdHkKK29mIEFyaXpvbmEsIGFuZCAmcXVvdDtMaWNlbnNlZSZxdW90OywgYSBjb21wYW55IG9yIGluZGl2aWR1YWwgd2hvIGhhcyBwdXJjaGFzZWQKK3RoZSBTT0ZUV0FSRSBmcm9tIEludGVybmV0IFdvcmtzaG9wLjwvUD4KKworPFA+V0lUTkVTU0VUSDo8L1A+CisKKzxQPldIRVJFQVMsIExpY2Vuc29yIGlzIHRoZSBhdXRob3Igb2YsIG9yIGhhcyBhY3F1aXJlZCB0aGUgcmlnaHRzIHRvLCBjZXJ0YWluCitjb21wdXRlciBzb2Z0d2FyZSBwcm9ncmFtcywgZG9jdW1lbnRhdGlvbiwgYW5kIHJlbGF0ZWQgd3JpdHRlbiBtYXRlcmlhbHMKKyhjb2xsZWN0aXZlbHkgJnF1b3Q7U29mdHdhcmUmcXVvdDspIHNwZWNpZmljYWxseSBHbGltcHNlIGFuZCBXZWJnbGltcHNlLAorYW5kIExpY2Vuc2VlIGRlc2lyZXMgdG8gYWNxdWlyZSBhIHJpZ2h0IGFuZCBsaWNlbnNlIHRvIHVzZSBMaWNlbnNvcidzIFNvZnR3YXJlCit1bmRlciB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgc2V0IGZvcnRoIGhlcmVpbi48L1A+CisKKzxQPk5PVywgVEhFUkVGT1JFLCBpbiBjb25zaWRlcmF0aW9uIG9mIHRoZSBtdXR1YWwgY292ZW5hbnRzIGFuZCBwcmVtaXNlcworaGVyZWluIGNvbnRhaW5lZCwgdGhlIFBhcnRpZXMgaGVyZXRvIGFncmVlIGFzIGZvbGxvd3M6PC9QPgorCis8UD5JLiBMSUNFTlNFIDwvUD4KKworPFA+MS4xIFNjb3BlIG9mIExpY2Vuc2UgR3JhbnQuIEluIGNvbnNpZGVyYXRpb24gb2YgdGhlIGFncmVlbWVudCBvZiBMaWNlbnNlZQordG8gcGF5IHJveWFsdGllcyBoZXJldW5kZXIsIExpY2Vuc29yIGhlcmVieSBncmFudHMgdG8gTGljZW5zZWUgdGhlIG5vbmV4Y2x1c2l2ZSwKK25vbnRyYW5zZmVyYWJsZSByaWdodCBhbmQgbGljZW5zZSB0byB1c2UgTGljZW5zb3IncyBTb2Z0d2FyZSBzdWJqZWN0IHRvCit0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBhZ3JlZW1lbnQuIFRoZSBTb2Z0d2FyZSBpcyBsaWNlbnNlZCBmb3IKK3VzZSBzb2xlbHkgZm9yIExpY2Vuc2VlJ3MgaW50ZXJuYWwgYXBwbGljYXRpb25zIGluIHRoZSBub3JtYWwgY291cnNlIG9mCitMaWNlbnNlZSdzIGJ1c2luZXNzLiBObyByaWdodHMgdG8gc3VibGljZW5zZSBvciBtYXJrZXQgdGhlIFNvZnR3YXJlIG9yCitEb2N1bWVudGF0aW9uIGFyZSBncmFudGVkLiBBbGwgcmlnaHRzIG5vdCBzcGVjaWZpY2FsbHkgZ3JhbnRlZCB0byBMaWNlbnNlZQorYnkgdGhpcyBsaWNlbnNlIHNoYWxsIHJlbWFpbiBpbiBMaWNlbnNvci48L1A+CisKKzxQPjEuNCBSaWdodCB0byBDb3B5LiBMaWNlbnNlZSBzaGFsbCBub3QgY29weSB0aGUgU29mdHdhcmUsIGluIHdob2xlIG9yCitpbiBwYXJ0LCBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIGluIHRoaXMgc2VjdGlvbi4gVGhlIFNvZnR3YXJlIG1heQorYmUgY29waWVkIGluIHdob2xlIG9yIGluIHBhcnQsIGluIHByaW50ZWQgb3IgbWFjaGluZS1yZWFkYWJsZSBmb3JtLCBmb3IKK2FyY2hpdmFsIHN0b3JhZ2Ugb3IgZW1lcmdlbmN5IHJlc3RhcnQgcHVycG9zZXMsIG9yIHRvIHJlcGxhY2UgYSB3b3JuIGNvcHkuPC9QPgorCis8UD4xLjUgSWYgTGljZW5zZWUgb2J0YWlucyBzb3VyY2UgY29kZSB1bmRlciB0aGlzIGFncmVlbWVudCwgTGljZW5zZWUgYWdyZWVzCitpdCB3aWxsIG5vdCB1c2UgdGhlIHNvdXJjZSBjb2RlIG9yIGFueSBhc3NvY2lhdGVkIExpY2Vuc29yIHByb3ByaWV0YXJ5CitpbmZvcm1hdGlvbiBmb3IgYW55IHB1cnBvc2Ugb3RoZXIgdGhhbiBMaWNlbnNlZSdzIGludGVybmFsIG5lZWRzIGFuZCBpbgorcGFydGljdWxhciBub3QgZm9yIHRoZSBwdXJwb3NlIG9mIGRldmVsb3BtZW50IG9yIGRpc3RyaWJ1dGlvbiBvZiBhbnkgcHJvZHVjdAorb3IgcHJvZ3JhbSBzaW1pbGFyIHRvLCBvciBjb21wZXRpdGl2ZSB3aXRoLCB0aGUgU29mdHdhcmUuIDwvUD4KKworPFA+SUkuIFdBUlJBTlRZPC9QPgorCis8UD4yLjEgTElDRU5TT1IgTUFLRVMgTk8gV0FSUkFOVElFUywgRVhQUkVTUyBPUiBJTVBMSUVELCBBTkQgU1BFQ0lGSUNBTExZCitESVNDTEFJTVMgT1RIRVIgV0FSUkFOVElFUywgSU5DTFVESU5HIChXSVRIT1VUIExJTUlUQVRJT04pIEFOWSBXQVJSQU5UWQorT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBJTiBOTyBFVkVOVCBTSEFMTAorTElDRU5TT1IgQkUgTElBQkxFIEZPUiBBTlkgSU5DSURFTlRBTCwgSU5ESVJFQ1QsIFNQRUNJQUwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUywgT1IgRk9SIExPU1QgUFJPRklUUywgT1IgRk9SIExPU1QgREFUQSBPUiBET1dOVElNRSwgV0hFVEhFUiBPUgorTk9UIExJQ0VOU09SIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy48L1A+CisKKzxQPjIuMiBMSUNFTlNFRSBBR1JFRVMgVEhBVCBJVFMgU09MRSBSRU1FRFkgQUdBSU5TVCBMSUNFTlNPUiBPUiBJVFMgUkVQUkVTRU5UQVRJVkVTCitGT1IgTE9TUyBPUiBEQU1BR0UgQ0FVU0VEIEJZIEFOWSBERUZFQ1QgT1IgRkFJTFVSRSBPRiBUSEUgU09GVFdBUkUsIFJFR0FSRExFU1MKK09GIFRIRSBGT1JNIE9GIEFDVElPTiwgV0hFVEhFUiBJTiBDT05UUkFDVCwgVE9SVCwgSU5DTFVESU5HIE5FR0xJR0VOQ0UsCitTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRSwgU0hBTEwgQkUgKEkpIFRIRSBSRVBBSVIgT1IgUkVQTEFDRU1FTlQgT0YKK1RIRSBTT0ZUV0FSRSBPUiAoSUkpIElGIFNVQ0ggUkVQQUlSIENBTk5PVCBCRSBNQURFIE9SIEFOIEVRVUlWQUxFTlQgUkVQTEFDRU1FTlQKK0NBTk5PVCBCRSBQUk9WSURFRCwgVEhFIFJFRlVORCBPRiBBTU9VTlRTIFBSRVZJT1VTTFkgUEFJRCBCWSBMSUNFTlNFRS48L1A+CisKKzxQPklJSS4gT1BFUkFUSU5HIEVOVklST05NRU5UPC9QPgorCis8UD4zLjEgVGhpcyBBZ3JlZW1lbnQgaXMgYSBbQ1BVLCBTaXRlIG9yIHBlci1TZWF0XSBsaWNlbnNlLjwvUD4KKworPFA+My4yIEluIHRoZSBldmVudCB0aGlzIEFncmVlbWVudCBwZXJ0YWlucyB0byBhIENQVSBsaWNlbnNlOjwvUD4KKworPFA+My4yLjEgTGljZW5zZWUgc2hhbGwgaGF2ZSB0aGUgcmlnaHQgdG8gdXNlIHRoZSBTb2Z0d2FyZSBvbmx5IG9uIGEgc2luZ2xlCitkZXNpZ25hdGVkIHNpbmdsZSBjZW50cmFsIHByb2Nlc3NpbmcgdW5pdCBvciBtYWluZnJhbWUgY29tcHV0ZXIgYW5kIGl0cworYXNzb2NpYXRlZCBwZXJpcGhlcmFsIHVuaXRzLiA8L1A+CisKKzxQPklmIExpY2Vuc2VlIGhhcyBwdXJjaGFzZWQgYSBzaW5nbGUtZG9tYWluIGxpY2Vuc2UsIHRoZSBTb2Z0d2FyZSBzaGFsbAorYmUgbWFkZSBhY2Nlc3NpYmxlIHZpYSBhIHNpbmdsZSBJUCBhZGRyZXNzIGFuZC9vciBkb21haW4gbmFtZS4gVW5saW1pdGVkCitlbmQgdXNlcnMgbWF5IGFjY2VzcyB0aGUgU29mdHdhcmUgdGhyb3VnaCB0aGUgc2luZ2xlIGNlbnRyYWwgcHJvY2Vzc2luZwordW5pdCB3aGVyZSBpdCBpcyBydW5uaW5nLiBJZiBsaWNlbnNlZSBoYXMgcHVyY2hhc2VkIGEgMTAtZG9tYWluIG9yIDEwMC1kb21haW4KK2xpY2Vuc2UsIHVwIHRvIHRoYXQgbnVtYmVyIG9mIGFkZGl0aW9uYWwgSVAgYWRkcmVzc2VzIG9yIFZpcnR1YWwgRG9tYWlucworbWF5IGJlIGNvbmZpZ3VyZWQgZm9yIHVzZSB3aXRoIHRoZSBTb2Z0d2FyZS4gT3RoZXIgbnVtYmVycyBvZiBkb21haW5zIG1heQorYmUgYWdyZWVkIHVwb24gc2VwYXJhdGVseSBieSB0aGUgcGFydGllcy48L1A+CisKKzxQPjMuMyBJbiB0aGUgZXZlbnQgdGhpcyBBZ3JlZW1lbnQgcGVydGFpbnMgdG8gYSBTaXRlIGxpY2Vuc2UsIExpY2Vuc2VlCitoYXMgdGhlIHJpZ2h0IHRvIHVzZSB0aGUgU29mdHdhcmUgb24gYW55IHByb2Nlc3NvciBvciBtYWluZnJhbWUgY29tcHV0ZXIKK2FuZCBpdHMgYXNzb2NpYXRlZCBwZXJpcGhlcmFsIGVxdWlwbWVudCBvd25lZCBvciBvcGVyYXRlZCBieSBMaWNlbnNlZSBhdAorYSBzaW5nbGUgZ2VvZ3JhcGhpYyBsb2NhdGlvbi48L1A+CisKKzxQPjMuNCBJbiB0aGUgZXZlbnQgdGhpcyBBZ3JlZW1lbnQgcGVydGFpbnMgdG8gYSBwZXItU2VhdCBsaWNlbnNlLCBMaWNlbnNlZQoraGFzIHRoZSByaWdodCBmb3IgYSBzaW5nbGUgdXNlciB0byB1c2UgdGhlIHNvZnR3YXJlIG9uIGEgc2luZ2xlIGNvbXB1dGVyCitwZXIgU2VhdCBwdXJjaGFzZWQuIEluIHRoaXMgY2FzZSB0aGUgU29mdHdhcmUgd2lsbCBub3QgYmUgbWFkZSBhdmFpbGFibGUKK3RvIGFkZGl0aW9uYWwgdXNlcnMgdmlhIEludHJhbmV0IG9yIEludGVybmV0LCBidXQgd2lsbCBiZSB1c2VkIGxvY2FsbHkKK2J5IGVhY2ggbGljZW5zZWQgdXNlci48L1A+CisKKzxQPklWLiBST1lBTFRJRVMgQU5EIFBBWU1FTlRTPC9QPgorCis8UD40LjEgVGhpcyBhZ3JlZW1lbnQgdGFrZXMgZWZmZWN0IGFuZCBpcyBleGVjdXRlZCBvbmx5IHVwb24gcmVjZWlwdCBvZgorZnVsbCBQYXltZW50IGJ5IExpY2Vuc29yIGZyb20gTGljZW5zZWUuIFRoZSBhbW91bnQgc2hhbGwgYmUgYXMgYWNjb3JkaW5nCit0byB0aGUgcHVibGlzaGVkIHNjaGVkdWxlIG9uIHRoZSBMaWNlbnNvcidzIHdlYnNpdGUsIGh0dHA6Ly93ZWJnbGltcHNlLm5ldCwKK29yIGJ5IHNlcGFyYXRlIGFncmVlbWVudCBiZXR3ZWVuIExpY2Vuc29yIGFuZCBMaWNlbnNlZS48L1A+CisKKworPFA+Vi4gVEVSTSBBTkQgVEVSTUlOQVRJT048L1A+CisKKzxQPjcuMSBEaXNjcmV0aW9uYXJ5IFRlcm1pbmF0aW9uIGJ5IExpY2Vuc2VlLiBMaWNlbnNlZSwgYXQgaXRzIG9wdGlvbiwKK3NoYWxsIGhhdmUgdGhlIHJpZ2h0IHRvIHRlcm1pbmF0ZSB0aGlzIEFncmVlbWVudCB3aXRoIHJlc3BlY3QgdG8gYW55IGxpY2Vuc2UKK29yIHJpZ2h0IGdyYW50ZWQgaGVyZWluIGF0IGFueSB0aW1lIGFuZCBmcm9tIHRpbWUgdG8gdGltZSB3aXRoIHJlc3BlY3QKK3RvIGFueSBvZiB0aGUgTGljZW5zb3IgU29mdHdhcmUuIEFueSBzdWNoIHRlcm1pbmF0aW9uIHNoYWxsIGJlIG1hZGUgYnkKK3dyaXR0ZW4gbm90aWNlIHRvIExpY2Vuc29yIGFuZCBzaGFsbCBiZWNvbWUgZWZmZWN0aXZlIDkwIGRheXMgYWZ0ZXIgZ2l2aW5nCitzdWNoIG5vdGljZS4gSWYgc3VjaCB0ZXJtaW5hdGlvbiBpcyBtYWRlIGluIHdyaXRpbmcgd2l0aGluIDYwIGRheXMgb2YgcmVjZWl2aW5nCithY2Nlc3MgdG8gU29mdHdhcmUsIExpY2Vuc29yIHNoYWxsIHJlZnVuZCBhbW91bnRzIHBhaWQgYnkgTGljZW5zZWUgdG8gcHVyY2hhc2UKK1NvZnR3YXJlLiBBbnkgYW1vdW50cyBwYWlkIGJ5IExpY2Vuc2VlIGZvciBzdXBwb3J0IG9yIHNlcnZpY2VzIHNoYWxsIG5vdAorYmUgcmVmdW5kZWQuPC9QPgorCis8UD43LjIgRGlzY3JldGlvbmFyeSBUZXJtaW5hdGlvbiBieSBMaWNlbnNvci4gTGljZW5zb3IsIGF0IGl0cyBvcHRpb24sCitzaGFsbCBoYXZlIHRoZSByaWdodCB0byB0ZXJtaW5hdGUgdGhpcyBBZ3JlZW1lbnQgd2l0aGluIDYwIGRheXMgb2YgZXhlY3V0aW9uLAord2l0aCByZXNwZWN0IHRvIGFueSBsaWNlbnNlIG9yIHJpZ2h0IGdyYW50ZWQgaGVyZWluIHdpdGggcmVzcGVjdCB0byBhbnkKK29mIHRoZSBMaWNlbnNvciBTb2Z0d2FyZS4gQW55IHN1Y2ggdGVybWluYXRpb24gc2hhbGwgYmUgbWFkZSBieSB3cml0dGVuCitub3RpY2UgdG8gTGljZW5zZWUgYW5kIHNoYWxsIGJlY29tZSBlZmZlY3RpdmUgOTAgZGF5cyBhZnRlciBnaXZpbmcgc3VjaAorbm90aWNlLiBJZiBzdWNoIHRlcm1pbmF0aW9uIGlzIG1hZGUgYnkgTGljZW5zb3IsIExpY2Vuc29yIHNoYWxsIHJlZnVuZAorYWxsIGFtb3VudHMgcGFpZCBieSBMaWNlbnNlZSBpbiByZWxhdGlvbiB0byBTb2Z0d2FyZS4gPC9QPgorCis8UD5WSS4gR0VORVJBTDwvUD4KKworPFA+NS4xIEdvdmVybmluZyBMYXcgYW5kIEFyYml0cmF0aW9uLiBUaGUgdmFsaWRpdHksIGNvbnN0cnVjdGlvbiwgYW5kIHBlcmZvcm1hbmNlCitvZiB0aGlzIEFncmVlbWVudCBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgc3Vic3RhbnRpdmUgbGF3cyBvZiBBcml6b25hLgorVGhlIHBhcnRpZXMgYWdyZWUgdGhhdCBhbnkgZGlzcHV0ZSBhcmlzaW5nIHVuZGVyIHRoaXMgYWdyZWVtZW50IHNoYWxsIGJlCityZXNvbHZlZCBieSBhcmJpdHJhdGlvbiBwdXJzdWFudCB0byB0aGUgQXJpem9uYSBVbmlmb3JtIFJ1bGVzIG9mIFByb2NlZHVyZQorZm9yIEFyYml0cmF0aW9uLCBhbmQgdGhlIGxvY2F0aW9uIG9mIGFyYml0cmF0aW9uIHNoYWxsIGJlIFR1Y3NvbiwgQXJpem9uYS4KK1RoZSBkZWNpc2lvbiBvZiB0aGUgYXJiaXRyYXRvcihzKSBzaGFsbCBiZSBmaW5hbC48L1A+CisKKzxQPjUuMiBDb25mbGljdCBvZiBJbnRlcmVzdC4gVGhpcyBBZ3JlZW1lbnQgaXMgc3ViamVjdCB0byB0aGUgcHJvdmlzaW9ucworb2YgQS5SLlMuIDM4LTUxMSBhbmQgdGhlIFN0YXRlIG9mIEFyaXpvbmEgbWF5IGNhbmNlbCB0aGlzIENvbnRyYWN0IGlmIGFueQorcGVyc29uIHNpZ25pZmljYW50bHkgaW52b2x2ZWQgaW4gbmVnb3RpYXRpbmcsIGRyYWZ0aW5nLCBzZWN1cmluZyBvciBvYnRhaW5pbmcKK3RoaXMgQ29udHJhY3QgZm9yIG9yIG9uIGJlaGFsZiBvZiB0aGUgQXJpem9uYSBCb2FyZCBvZiBSZWdlbnRzIGJlY29tZXMKK2FuIGVtcGxveWVlIGluIGFueSBjYXBhY2l0eSBvZiBhbnkgb3RoZXIgcGFydHkgb3IgYSBjb25zdWx0YW50IHRvIGFueSBvdGhlcgorcGFydHkgd2l0aCByZWZlcmVuY2UgdG8gdGhlIHN1YmplY3QgbWF0dGVyIG9mIHRoaXMgQ29udHJhY3Qgd2hpbGUgdGhlIENvbnRyYWN0CitvciBhbnkgZXh0ZW5zaW9uIGhlcmVvZiBpcyBpbiBlZmZlY3QuPC9QPgorCis8UD41LjMgTm9uLWRpc2NyaW1pbmF0aW9uLiBUaGUgcGFydGllcyBhZ3JlZSB0byBiZSBib3VuZCBieSBhcHBsaWNhYmxlCitzdGF0ZSBhbmQgZmVkZXJhbCBydWxlcyBnb3Zlcm5pbmcgRXF1YWwgRW1wbG95bWVudCBPcHBvcnR1bml0eSBhbmQgTm9uLURpc2NyaW1pbmF0aW9uLjwvUD4KKworPC9CT0RZPgorPC9IVE1MPgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvZ2x1dCBiL2xpY2Vuc2VzL2dsdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWEyMjQ2OQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL2dsdXQKQEAgLTAsMCArMSwxNiBAQAorTk9USUNFOiAgVGhlIE9wZW5HTCBVdGlsaXR5IFRvb2xraXQgKEdMVVQpIGRpc3RyaWJ1dGlvbiBjb250YWlucyBzb3VyY2UKK2NvZGUgcHVibGlzaGVkIGluIGEgYm9vayB0aXRsZWQgIlByb2dyYW1taW5nIE9wZW5HTCBmb3IgdGhlIFggV2luZG93CitTeXN0ZW0iIChJU0JOOiAwLTIwMS00ODM1OS05KSBwdWJsaXNoZWQgYnkgQWRkaXNvbi1XZXNsZXkuICBUaGUKK3Byb2dyYW1zIGFuZCBhc3NvY2lhdGVkIGZpbGVzIGNvbnRhaW5lZCBpbiB0aGUgZGlzdHJpYnV0aW9uIHdlcmUKK2RldmVsb3BlZCBieSBNYXJrIEouIEtpbGdhcmQgYW5kIGFyZSBDb3B5cmlnaHQgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMTk5OAorYnkgTWFyayBKLiBLaWxnYXJkICh1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkKS4gIFRoZSBwcm9ncmFtcyBhcmUgbm90IGluIHRoZQorcHVibGljIGRvbWFpbiwgYnV0IHRoZXkgYXJlIGZyZWVseSBkaXN0cmlidXRhYmxlIHdpdGhvdXQgbGljZW5zaW5nCitmZWVzLiAgVGhlc2UgcHJvZ3JhbXMgYXJlIHByb3ZpZGVkIHdpdGhvdXQgZ3VhcmFudGVlIG9yIHdhcnJhbnRlZQorZXhwcmVzc2VkIG9yIGltcGxpZWQuCisKK0kgYWNrbm93bGVkZ2UgdGhlIGFzc2lzdGFuY2UgcHJvdmlkZWQgYnkgV2lsbGlhbSBNaXRjaGVsbCBpbiBkZXZlbG9waW5nCitHTFVUJ3MgImZiYyIgaW50ZXJmYWNlIGZvciB1c2UgYnkgdGhlIGY5MGdsIEZvcnRyYW4gOTAgYmluZGluZy4KKworLSBNYXJrIEtpbGdhcmQKKyAgQXVndXN0IDI4LCAxOTk4CisKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL2dtYXAgYi9saWNlbnNlcy9nbWFwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1MmQzMTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9nbWFwCkBAIC0wLDAgKzEsMzYgQEAKK0NvcHlyaWdodCAoYykgMjAwNSBHZW5lbnRlY2gsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1RoZSBEZXZlbG9wZXJzIG9mIHRoaXMgc29mdHdhcmUgYXJlIFRob21hcyBELiBXdSA8dHd1QGdlbmUuY29tPiBhbmQKK0NvbGluIEsuIFdhdGFuYWJlIDxja3dAZ2VuZS5jb20+LgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcKK2EgY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZQorIlBhY2thZ2UiKSwgdG8gdXNlLCBjb3B5LCBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIFBhY2thZ2UsCit3aXRob3V0IG1vZGlmaWNhdGlvbnMsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kCit0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFyZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsCitwb3J0aW9ucyBvZiB0aGUgUGFja2FnZS4gIERpc3RyaWJ1dGlvbiBvZiB0aGlzIFBhY2thZ2UgYXMgcGFydCBvZiBhCitjb21tZXJjaWFsIHNvZnR3YXJlIHByb2R1Y3QgcmVxdWlyZXMgcHJpb3IgYXJyYW5nZW1lbnQgd2l0aCB0aGUKK0RldmVsb3BlcnMuCisKK1Blcm1pc3Npb24gaXMgYWxzbyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KK29idGFpbmluZyBhIGNvcHkgb2YgdGhpcyBQYWNrYWdlLCB0byBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUKK1BhY2thZ2Ugb3IgYW55IHBvcnRpb24gb2YgaXQsIHByb3ZpZGVkIHRoYXQgeW91IHVzZSB0aGUgbW9kaWZpZWQKK1BhY2thZ2Ugb25seSB3aXRoaW4geW91ciBjb3Jwb3JhdGlvbiBvciBvcmdhbml6YXRpb24uICBEaXN0cmlidXRpb24gb2YKK2EgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIFBhY2thZ2UgcmVxdWlyZXMgcHJpb3IgYXJyYW5nZW1lbnQgd2l0aCB0aGUKK0RldmVsb3BlcnMuCisKK0dlbm9tZSBkYXRhYmFzZXMsIG1hcCBmaWxlcywgYW5kIG90aGVyIHJlc3VsdCBmaWxlcyBwcm9kdWNlZCBhcyBvdXRwdXQKK2Zyb20gc29mdHdhcmUgaW4gdGhpcyBQYWNrYWdlIGRvIG5vdCBhdXRvbWF0aWNhbGx5IGZhbGwgdW5kZXIgdGhlCitjb3B5cmlnaHQgb2YgdGhpcyBQYWNrYWdlLCBidXQgYmVsb25nIHRvIHdob2V2ZXIgZ2VuZXJhdGVkIHRoZW0sIGFuZAorbWF5IGJlIGRpc3RyaWJ1dGVkIGZyZWVseS4KKworSU4gTk8gRVZFTlQgU0hBTEwgR0VORU5URUNILCBJTkMuIEJFIExJQUJMRSBUTyBBTlkgUEFSVFkgRk9SIERJUkVDVCwKK0lORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIE9SIE9USEVSCitMSUFCSUxJVFksIElOQ0xVRElORyBMT1NUIFBST0ZJVFMsIEFSSVNJTkcgRlJPTSBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwKK0VYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCitHRU5FTlRFQ0gsIElOQy4gSEFTIE5PIE9CTElHQVRJT04gVE8gUFJPVklERSBNQUlOVEVOQU5DRSwgU1VQUE9SVCwKK1VQREFURVMsIEVOSEFOQ0VNRU5UUywgT1IgTU9ESUZJQ0FUSU9OUy4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL2dudXBsb3QgYi9saWNlbnNlcy9nbnVwbG90Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0MjhlMDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9nbnVwbG90CkBAIC0wLDAgKzEsMjcgQEAKK0NvcHlyaWdodCAxOTg2IC0gMTk5MywgMTk5OCAgIFRob21hcyBXaWxsaWFtcywgQ29saW4gS2VsbGV5CisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKK2RvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsCitwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZAordGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKK2luIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4KKworUGVybWlzc2lvbiB0byBtb2RpZnkgdGhlIHNvZnR3YXJlIGlzIGdyYW50ZWQsIGJ1dCBub3QgdGhlIHJpZ2h0IHRvCitkaXN0cmlidXRlIHRoZSBjb21wbGV0ZSBtb2RpZmllZCBzb3VyY2UgY29kZS4gIE1vZGlmaWNhdGlvbnMgYXJlIHRvCitiZSBkaXN0cmlidXRlZCBhcyBwYXRjaGVzIHRvIHRoZSByZWxlYXNlZCB2ZXJzaW9uLiAgUGVybWlzc2lvbiB0bworZGlzdHJpYnV0ZSBiaW5hcmllcyBwcm9kdWNlZCBieSBjb21waWxpbmcgbW9kaWZpZWQgc291cmNlcyBpcyBncmFudGVkLAorcHJvdmlkZWQgeW91CisgIDEuIGRpc3RyaWJ1dGUgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIG1vZGlmaWNhdGlvbnMgZnJvbSB0aGUKKyAgIHJlbGVhc2VkIHZlcnNpb24gaW4gdGhlIGZvcm0gb2YgYSBwYXRjaCBmaWxlIGFsb25nIHdpdGggdGhlIGJpbmFyaWVzLAorICAyLiBhZGQgc3BlY2lhbCB2ZXJzaW9uIGlkZW50aWZpY2F0aW9uIHRvIGRpc3Rpbmd1aXNoIHlvdXIgdmVyc2lvbgorICAgaW4gYWRkaXRpb24gdG8gdGhlIGJhc2UgcmVsZWFzZSB2ZXJzaW9uIG51bWJlciwKKyAgMy4gcHJvdmlkZSB5b3VyIG5hbWUgYW5kIGFkZHJlc3MgYXMgdGhlIHByaW1hcnkgY29udGFjdCBmb3IgdGhlCisgICBzdXBwb3J0IG9mIHlvdXIgbW9kaWZpZWQgdmVyc2lvbiwgYW5kCisgIDQuIHJldGFpbiBvdXIgY29udGFjdCBpbmZvcm1hdGlvbiBpbiByZWdhcmQgdG8gdXNlIG9mIHRoZSBiYXNlCisgICBzb2Z0d2FyZS4KK1Blcm1pc3Npb24gdG8gZGlzdHJpYnV0ZSB0aGUgcmVsZWFzZWQgdmVyc2lvbiBvZiB0aGUgc291cmNlIGNvZGUgYWxvbmcKK3dpdGggY29ycmVzcG9uZGluZyBzb3VyY2UgbW9kaWZpY2F0aW9ucyBpbiB0aGUgZm9ybSBvZiBhIHBhdGNoIGZpbGUgaXMKK2dyYW50ZWQgd2l0aCBzYW1lIHByb3Zpc2lvbnMgMiB0aHJvdWdoIDQgZm9yIGJpbmFyeSBkaXN0cmlidXRpb25zLgorCitUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkKK3RvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvZ29vZ2xlLWNocm9tZSBiL2xpY2Vuc2VzL2dvb2dsZS1jaHJvbWUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZkYmE1OQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL2dvb2dsZS1jaHJvbWUKQEAgLTAsMCArMSw4MzAgQEAKKyMgbHlueCAtZHVtcCBodHRwOi8vd3d3Lmdvb2dsZS5jb20vY2hyb21lL2ludGwvZW4vZXVsYV90ZXh0Lmh0bWwKKworR29vZ2xlIENocm9tZSBUZXJtcyBvZiBTZXJ2aWNlCisKKyAgIFRoZXNlIFRlcm1zIG9mIFNlcnZpY2UgYXBwbHkgdG8gdGhlIGV4ZWN1dGFibGUgY29kZSB2ZXJzaW9uIG9mIEdvb2dsZQorICAgQ2hyb21lLiBTb3VyY2UgY29kZSBmb3IgR29vZ2xlIENocm9tZSBpcyBhdmFpbGFibGUgZnJlZSBvZiBjaGFyZ2UgdW5kZXIKKyAgIG9wZW4gc291cmNlIHNvZnR3YXJlIGxpY2Vuc2UgYWdyZWVtZW50cyBhdAorICAgaHR0cDovL2NvZGUuZ29vZ2xlLmNvbS9jaHJvbWl1bS90ZXJtcy5odG1sLgorCisgICAxLiBZb3VyIHJlbGF0aW9uc2hpcCB3aXRoIEdvb2dsZQorCisgICAxLjEgWW91ciB1c2Ugb2YgR29vZ2xl4oCZcyBwcm9kdWN0cywgc29mdHdhcmUsIHNlcnZpY2VzIGFuZCB3ZWIgc2l0ZXMKKyAgIChyZWZlcnJlZCB0byBjb2xsZWN0aXZlbHkgYXMgdGhlIOKAnFNlcnZpY2Vz4oCdIGluIHRoaXMgZG9jdW1lbnQgYW5kCisgICBleGNsdWRpbmcgYW55IHNlcnZpY2VzIHByb3ZpZGVkIHRvIHlvdSBieSBHb29nbGUgdW5kZXIgYSBzZXBhcmF0ZQorICAgd3JpdHRlbiBhZ3JlZW1lbnQpIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIGEgbGVnYWwgYWdyZWVtZW50IGJldHdlZW4KKyAgIHlvdSBhbmQgR29vZ2xlLiDigJxHb29nbGXigJ0gbWVhbnMgR29vZ2xlIEluYy4sIHdob3NlIHByaW5jaXBhbCBwbGFjZSBvZgorICAgYnVzaW5lc3MgaXMgYXQgMTYwMCBBbXBoaXRoZWF0cmUgUGFya3dheSwgTW91bnRhaW4gVmlldywgQ0EgOTQwNDMsCisgICBVbml0ZWQgU3RhdGVzLiBUaGlzIGRvY3VtZW50IGV4cGxhaW5zIGhvdyB0aGUgYWdyZWVtZW50IGlzIG1hZGUgdXAsIGFuZAorICAgc2V0cyBvdXQgc29tZSBvZiB0aGUgdGVybXMgb2YgdGhhdCBhZ3JlZW1lbnQuCisKKyAgIDEuMiBVbmxlc3Mgb3RoZXJ3aXNlIGFncmVlZCBpbiB3cml0aW5nIHdpdGggR29vZ2xlLCB5b3VyIGFncmVlbWVudCB3aXRoCisgICBHb29nbGUgd2lsbCBhbHdheXMgaW5jbHVkZSwgYXQgYSBtaW5pbXVtLCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgc2V0CisgICBvdXQgaW4gdGhpcyBkb2N1bWVudC4gVGhlc2UgYXJlIHJlZmVycmVkIHRvIGJlbG93IGFzIHRoZSDigJxVbml2ZXJzYWwKKyAgIFRlcm1z4oCdLiBPcGVuIHNvdXJjZSBzb2Z0d2FyZSBsaWNlbnNlcyBmb3IgR29vZ2xlIENocm9tZSBzb3VyY2UgY29kZQorICAgY29uc3RpdHV0ZSBzZXBhcmF0ZSB3cml0dGVuIGFncmVlbWVudHMuIFRvIHRoZSBsaW1pdGVkIGV4dGVudCB0aGF0IHRoZQorICAgb3BlbiBzb3VyY2Ugc29mdHdhcmUgbGljZW5zZXMgZXhwcmVzc2x5IHN1cGVyc2VkZSB0aGVzZSBVbml2ZXJzYWwKKyAgIFRlcm1zLCB0aGUgb3BlbiBzb3VyY2UgbGljZW5zZXMgZ292ZXJuIHlvdXIgYWdyZWVtZW50IHdpdGggR29vZ2xlIGZvcgorICAgdGhlIHVzZSBvZiBHb29nbGUgQ2hyb21lIG9yIHNwZWNpZmljIGluY2x1ZGVkIGNvbXBvbmVudHMgb2YgR29vZ2xlCisgICBDaHJvbWUuCisKKyAgIDEuMyBZb3VyIGFncmVlbWVudCB3aXRoIEdvb2dsZSB3aWxsIGFsc28gaW5jbHVkZSB0aGUgdGVybXMgc2V0IGZvcnRoCisgICBiZWxvdyBpbiB0aGUgR29vZ2xlIENocm9tZSBBZGRpdGlvbmFsIFRlcm1zIG9mIFNlcnZpY2UgYW5kIHRlcm1zIG9mIGFueQorICAgTGVnYWwgTm90aWNlcyBhcHBsaWNhYmxlIHRvIHRoZSBTZXJ2aWNlcywgaW4gYWRkaXRpb24gdG8gdGhlIFVuaXZlcnNhbAorICAgVGVybXMuIEFsbCBvZiB0aGVzZSBhcmUgcmVmZXJyZWQgdG8gYmVsb3cgYXMgdGhlIOKAnEFkZGl0aW9uYWwgVGVybXPigJ0uCisgICBXaGVyZSBBZGRpdGlvbmFsIFRlcm1zIGFwcGx5IHRvIGEgU2VydmljZSwgdGhlc2Ugd2lsbCBiZSBhY2Nlc3NpYmxlIGZvcgorICAgeW91IHRvIHJlYWQgZWl0aGVyIHdpdGhpbiwgb3IgdGhyb3VnaCB5b3VyIHVzZSBvZiwgdGhhdCBTZXJ2aWNlLgorCisgICAxLjQgVGhlIFVuaXZlcnNhbCBUZXJtcywgdG9nZXRoZXIgd2l0aCB0aGUgQWRkaXRpb25hbCBUZXJtcywgZm9ybSBhCisgICBsZWdhbGx5IGJpbmRpbmcgYWdyZWVtZW50IGJldHdlZW4geW91IGFuZCBHb29nbGUgaW4gcmVsYXRpb24gdG8geW91cgorICAgdXNlIG9mIHRoZSBTZXJ2aWNlcy4gSXQgaXMgaW1wb3J0YW50IHRoYXQgeW91IHRha2UgdGhlIHRpbWUgdG8gcmVhZAorICAgdGhlbSBjYXJlZnVsbHkuIENvbGxlY3RpdmVseSwgdGhpcyBsZWdhbCBhZ3JlZW1lbnQgaXMgcmVmZXJyZWQgdG8gYmVsb3cKKyAgIGFzIHRoZSDigJxUZXJtc+KAnS4KKworICAgMS41IElmIHRoZXJlIGlzIGFueSBjb250cmFkaWN0aW9uIGJldHdlZW4gd2hhdCB0aGUgQWRkaXRpb25hbCBUZXJtcyBzYXkKKyAgIGFuZCB3aGF0IHRoZSBVbml2ZXJzYWwgVGVybXMgc2F5LCB0aGVuIHRoZSBBZGRpdGlvbmFsIFRlcm1zIHNoYWxsIHRha2UKKyAgIHByZWNlZGVuY2UgaW4gcmVsYXRpb24gdG8gdGhhdCBTZXJ2aWNlLgorCisgICAyLiBBY2NlcHRpbmcgdGhlIFRlcm1zCisKKyAgIDIuMSBJbiBvcmRlciB0byB1c2UgdGhlIFNlcnZpY2VzLCB5b3UgbXVzdCBmaXJzdCBhZ3JlZSB0byB0aGUgVGVybXMuCisgICBZb3UgbWF5IG5vdCB1c2UgdGhlIFNlcnZpY2VzIGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoZSBUZXJtcy4KKworICAgMi4yIFlvdSBjYW4gYWNjZXB0IHRoZSBUZXJtcyBieToKKworICAgKEEpIGNsaWNraW5nIHRvIGFjY2VwdCBvciBhZ3JlZSB0byB0aGUgVGVybXMsIHdoZXJlIHRoaXMgb3B0aW9uIGlzIG1hZGUKKyAgIGF2YWlsYWJsZSB0byB5b3UgYnkgR29vZ2xlIGluIHRoZSB1c2VyIGludGVyZmFjZSBmb3IgYW55IFNlcnZpY2U7IG9yCisKKyAgIChCKSBieSBhY3R1YWxseSB1c2luZyB0aGUgU2VydmljZXMuIEluIHRoaXMgY2FzZSwgeW91IHVuZGVyc3RhbmQgYW5kCisgICBhZ3JlZSB0aGF0IEdvb2dsZSB3aWxsIHRyZWF0IHlvdXIgdXNlIG9mIHRoZSBTZXJ2aWNlcyBhcyBhY2NlcHRhbmNlIG9mCisgICB0aGUgVGVybXMgZnJvbSB0aGF0IHBvaW50IG9ud2FyZHMuCisKKyAgIDMuIExhbmd1YWdlIG9mIHRoZSBUZXJtcworCisgICAzLjEgV2hlcmUgR29vZ2xlIGhhcyBwcm92aWRlZCB5b3Ugd2l0aCBhIHRyYW5zbGF0aW9uIG9mIHRoZSBFbmdsaXNoCisgICBsYW5ndWFnZSB2ZXJzaW9uIG9mIHRoZSBUZXJtcywgdGhlbiB5b3UgYWdyZWUgdGhhdCB0aGUgdHJhbnNsYXRpb24gaXMKKyAgIHByb3ZpZGVkIGZvciB5b3VyIGNvbnZlbmllbmNlIG9ubHkgYW5kIHRoYXQgdGhlIEVuZ2xpc2ggbGFuZ3VhZ2UKKyAgIHZlcnNpb25zIG9mIHRoZSBUZXJtcyB3aWxsIGdvdmVybiB5b3VyIHJlbGF0aW9uc2hpcCB3aXRoIEdvb2dsZS4KKworICAgMy4yIElmIHRoZXJlIGlzIGFueSBjb250cmFkaWN0aW9uIGJldHdlZW4gd2hhdCB0aGUgRW5nbGlzaCBsYW5ndWFnZQorICAgdmVyc2lvbiBvZiB0aGUgVGVybXMgc2F5cyBhbmQgd2hhdCBhIHRyYW5zbGF0aW9uIHNheXMsIHRoZW4gdGhlIEVuZ2xpc2gKKyAgIGxhbmd1YWdlIHZlcnNpb24gc2hhbGwgdGFrZSBwcmVjZWRlbmNlLgorCisgICA0LiBQcm92aXNpb24gb2YgdGhlIFNlcnZpY2VzIGJ5IEdvb2dsZQorCisgICA0LjEgR29vZ2xlIGhhcyBzdWJzaWRpYXJpZXMgYW5kIGFmZmlsaWF0ZWQgbGVnYWwgZW50aXRpZXMgYXJvdW5kIHRoZQorICAgd29ybGQgKOKAnFN1YnNpZGlhcmllcyBhbmQgQWZmaWxpYXRlc+KAnSkuIFNvbWV0aW1lcywgdGhlc2UgY29tcGFuaWVzIHdpbGwKKyAgIGJlIHByb3ZpZGluZyB0aGUgU2VydmljZXMgdG8geW91IG9uIGJlaGFsZiBvZiBHb29nbGUgaXRzZWxmLiBZb3UKKyAgIGFja25vd2xlZGdlIGFuZCBhZ3JlZSB0aGF0IFN1YnNpZGlhcmllcyBhbmQgQWZmaWxpYXRlcyB3aWxsIGJlIGVudGl0bGVkCisgICB0byBwcm92aWRlIHRoZSBTZXJ2aWNlcyB0byB5b3UuCisKKyAgIDQuMiBHb29nbGUgaXMgY29uc3RhbnRseSBpbm5vdmF0aW5nIGluIG9yZGVyIHRvIHByb3ZpZGUgdGhlIGJlc3QKKyAgIHBvc3NpYmxlIGV4cGVyaWVuY2UgZm9yIGl0cyB1c2Vycy4gWW91IGFja25vd2xlZGdlIGFuZCBhZ3JlZSB0aGF0IHRoZQorICAgZm9ybSBhbmQgbmF0dXJlIG9mIHRoZSBTZXJ2aWNlcyB3aGljaCBHb29nbGUgcHJvdmlkZXMgbWF5IGNoYW5nZSBmcm9tCisgICB0aW1lIHRvIHRpbWUgd2l0aG91dCBwcmlvciBub3RpY2UgdG8geW91LgorCisgICA0LjMgQXMgcGFydCBvZiB0aGlzIGNvbnRpbnVpbmcgaW5ub3ZhdGlvbiwgeW91IGFja25vd2xlZGdlIGFuZCBhZ3JlZQorICAgdGhhdCBHb29nbGUgbWF5IHN0b3AgKHBlcm1hbmVudGx5IG9yIHRlbXBvcmFyaWx5KSBwcm92aWRpbmcgdGhlCisgICBTZXJ2aWNlcyAob3IgYW55IGZlYXR1cmVzIHdpdGhpbiB0aGUgU2VydmljZXMpIHRvIHlvdSBvciB0byB1c2VycworICAgZ2VuZXJhbGx5IGF0IEdvb2dsZeKAmXMgc29sZSBkaXNjcmV0aW9uLCB3aXRob3V0IHByaW9yIG5vdGljZSB0byB5b3UuIFlvdQorICAgbWF5IHN0b3AgdXNpbmcgdGhlIFNlcnZpY2VzIGF0IGFueSB0aW1lLiBZb3UgZG8gbm90IG5lZWQgdG8KKyAgIHNwZWNpZmljYWxseSBpbmZvcm0gR29vZ2xlIHdoZW4geW91IHN0b3AgdXNpbmcgdGhlIFNlcnZpY2VzLgorCisgICA0LjQgWW91IGFja25vd2xlZGdlIGFuZCBhZ3JlZSB0aGF0IGlmIEdvb2dsZSBkaXNhYmxlcyBhY2Nlc3MgdG8geW91cgorICAgYWNjb3VudCwgeW91IG1heSBiZSBwcmV2ZW50ZWQgZnJvbSBhY2Nlc3NpbmcgdGhlIFNlcnZpY2VzLCB5b3VyIGFjY291bnQKKyAgIGRldGFpbHMgb3IgYW55IGZpbGVzIG9yIG90aGVyIGNvbnRlbnQgd2hpY2ggaXMgY29udGFpbmVkIGluIHlvdXIKKyAgIGFjY291bnQuCisKKyAgIDUuIFVzZSBvZiB0aGUgU2VydmljZXMgYnkgeW91CisKKyAgIDUuMSBZb3UgYWdyZWUgdG8gdXNlIHRoZSBTZXJ2aWNlcyBvbmx5IGZvciBwdXJwb3NlcyB0aGF0IGFyZSBwZXJtaXR0ZWQKKyAgIGJ5IChhKSB0aGUgVGVybXMgYW5kIChiKSBhbnkgYXBwbGljYWJsZSBsYXcsIHJlZ3VsYXRpb24gb3IgZ2VuZXJhbGx5CisgICBhY2NlcHRlZCBwcmFjdGljZXMgb3IgZ3VpZGVsaW5lcyBpbiB0aGUgcmVsZXZhbnQganVyaXNkaWN0aW9ucworICAgKGluY2x1ZGluZyBhbnkgbGF3cyByZWdhcmRpbmcgdGhlIGV4cG9ydCBvZiBkYXRhIG9yIHNvZnR3YXJlIHRvIGFuZAorICAgZnJvbSB0aGUgVW5pdGVkIFN0YXRlcyBvciBvdGhlciByZWxldmFudCBjb3VudHJpZXMpLgorCisgICA1LjIgWW91IGFncmVlIHRoYXQgeW91IHdpbGwgbm90IGVuZ2FnZSBpbiBhbnkgYWN0aXZpdHkgdGhhdCBpbnRlcmZlcmVzCisgICB3aXRoIG9yIGRpc3J1cHRzIHRoZSBTZXJ2aWNlcyAob3IgdGhlIHNlcnZlcnMgYW5kIG5ldHdvcmtzIHdoaWNoIGFyZQorICAgY29ubmVjdGVkIHRvIHRoZSBTZXJ2aWNlcykuCisKKyAgIDUuMyBVbmxlc3MgeW91IGhhdmUgYmVlbiBzcGVjaWZpY2FsbHkgcGVybWl0dGVkIHRvIGRvIHNvIGluIGEgc2VwYXJhdGUKKyAgIGFncmVlbWVudCB3aXRoIEdvb2dsZSwgeW91IGFncmVlIHRoYXQgeW91IHdpbGwgbm90IHJlcHJvZHVjZSwKKyAgIGR1cGxpY2F0ZSwgY29weSwgc2VsbCwgdHJhZGUgb3IgcmVzZWxsIHRoZSBTZXJ2aWNlcyBmb3IgYW55IHB1cnBvc2UuCisKKyAgIDUuNCBZb3UgYWdyZWUgdGhhdCB5b3UgYXJlIHNvbGVseSByZXNwb25zaWJsZSBmb3IgKGFuZCB0aGF0IEdvb2dsZSBoYXMKKyAgIG5vIHJlc3BvbnNpYmlsaXR5IHRvIHlvdSBvciB0byBhbnkgdGhpcmQgcGFydHkgZm9yKSBhbnkgYnJlYWNoIG9mIHlvdXIKKyAgIG9ibGlnYXRpb25zIHVuZGVyIHRoZSBUZXJtcyBhbmQgZm9yIHRoZSBjb25zZXF1ZW5jZXMgKGluY2x1ZGluZyBhbnkKKyAgIGxvc3Mgb3IgZGFtYWdlIHdoaWNoIEdvb2dsZSBtYXkgc3VmZmVyKSBvZiBhbnkgc3VjaCBicmVhY2guCisKKyAgIDYuIFByaXZhY3kgYW5kIHlvdXIgcGVyc29uYWwgaW5mb3JtYXRpb24KKworICAgNi4xIEZvciBpbmZvcm1hdGlvbiBhYm91dCBHb29nbGXigJlzIGRhdGEgcHJvdGVjdGlvbiBwcmFjdGljZXMsIHBsZWFzZQorICAgcmVhZCBHb29nbGXigJlzIHByaXZhY3kgcG9saWN5IGF0IGh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9wcml2YWN5Lmh0bWwgYW5kCisgICBhdCBodHRwOi8vd3d3Lmdvb2dsZS5jb20vY2hyb21lL2ludGwvZW4vcHJpdmFjeS5odG1sLiBUaGlzIHBvbGljeQorICAgZXhwbGFpbnMgaG93IEdvb2dsZSB0cmVhdHMgeW91ciBwZXJzb25hbCBpbmZvcm1hdGlvbiwgYW5kIHByb3RlY3RzIHlvdXIKKyAgIHByaXZhY3ksIHdoZW4geW91IHVzZSB0aGUgU2VydmljZXMuCisKKyAgIDYuMiBZb3UgYWdyZWUgdG8gdGhlIHVzZSBvZiB5b3VyIGRhdGEgaW4gYWNjb3JkYW5jZSB3aXRoIEdvb2dsZeKAmXMKKyAgIHByaXZhY3kgcG9saWNpZXMuCisKKyAgIDcuIENvbnRlbnQgaW4gdGhlIFNlcnZpY2VzCisKKyAgIDcuMSBZb3UgdW5kZXJzdGFuZCB0aGF0IGFsbCBpbmZvcm1hdGlvbiAoc3VjaCBhcyBkYXRhIGZpbGVzLCB3cml0dGVuCisgICB0ZXh0LCBjb21wdXRlciBzb2Z0d2FyZSwgbXVzaWMsIGF1ZGlvIGZpbGVzIG9yIG90aGVyIHNvdW5kcywKKyAgIHBob3RvZ3JhcGhzLCB2aWRlb3Mgb3Igb3RoZXIgaW1hZ2VzKSB3aGljaCB5b3UgbWF5IGhhdmUgYWNjZXNzIHRvIGFzCisgICBwYXJ0IG9mLCBvciB0aHJvdWdoIHlvdXIgdXNlIG9mLCB0aGUgU2VydmljZXMgYXJlIHRoZSBzb2xlCisgICByZXNwb25zaWJpbGl0eSBvZiB0aGUgcGVyc29uIGZyb20gd2hpY2ggc3VjaCBjb250ZW50IG9yaWdpbmF0ZWQuIEFsbAorICAgc3VjaCBpbmZvcm1hdGlvbiBpcyByZWZlcnJlZCB0byBiZWxvdyBhcyB0aGUg4oCcQ29udGVudC7igJ0KKworICAgNy4yIFlvdSBzaG91bGQgYmUgYXdhcmUgdGhhdCBDb250ZW50IHByZXNlbnRlZCB0byB5b3UgYXMgcGFydCBvZiB0aGUKKyAgIFNlcnZpY2VzLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGFkdmVydGlzZW1lbnRzIGluIHRoZSBTZXJ2aWNlcworICAgYW5kIHNwb25zb3JlZCBDb250ZW50IHdpdGhpbiB0aGUgU2VydmljZXMgbWF5IGJlIHByb3RlY3RlZCBieQorICAgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyB3aGljaCBhcmUgb3duZWQgYnkgdGhlIHNwb25zb3JzIG9yCisgICBhZHZlcnRpc2VycyB3aG8gcHJvdmlkZSB0aGF0IENvbnRlbnQgdG8gR29vZ2xlIChvciBieSBvdGhlciBwZXJzb25zIG9yCisgICBjb21wYW5pZXMgb24gdGhlaXIgYmVoYWxmKS4gWW91IG1heSBub3QgbW9kaWZ5LCByZW50LCBsZWFzZSwgbG9hbiwKKyAgIHNlbGwsIGRpc3RyaWJ1dGUgb3IgY3JlYXRlIGRlcml2YXRpdmUgd29ya3MgYmFzZWQgb24gdGhpcyBDb250ZW50CisgICAoZWl0aGVyIGluIHdob2xlIG9yIGluIHBhcnQpIHVubGVzcyB5b3UgaGF2ZSBiZWVuIHNwZWNpZmljYWxseSB0b2xkCisgICB0aGF0IHlvdSBtYXkgZG8gc28gYnkgR29vZ2xlIG9yIGJ5IHRoZSBvd25lcnMgb2YgdGhhdCBDb250ZW50LCBpbiBhCisgICBzZXBhcmF0ZSBhZ3JlZW1lbnQuCisKKyAgIDcuMyBHb29nbGUgcmVzZXJ2ZXMgdGhlIHJpZ2h0IChidXQgc2hhbGwgaGF2ZSBubyBvYmxpZ2F0aW9uKSB0bworICAgcHJlLXNjcmVlbiwgcmV2aWV3LCBmbGFnLCBmaWx0ZXIsIG1vZGlmeSwgcmVmdXNlIG9yIHJlbW92ZSBhbnkgb3IgYWxsCisgICBDb250ZW50IGZyb20gYW55IFNlcnZpY2UuIEZvciBzb21lIG9mIHRoZSBTZXJ2aWNlcywgR29vZ2xlIG1heSBwcm92aWRlCisgICB0b29scyB0byBmaWx0ZXIgb3V0IGV4cGxpY2l0IHNleHVhbCBjb250ZW50LiBUaGVzZSB0b29scyBpbmNsdWRlIHRoZQorICAgU2FmZVNlYXJjaCBwcmVmZXJlbmNlIHNldHRpbmdzIChzZWUKKyAgIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9oZWxwL2N1c3RvbWl6ZS5odG1sI3NhZmUpLiBJbiBhZGRpdGlvbiwgdGhlcmUgYXJlCisgICBjb21tZXJjaWFsbHkgYXZhaWxhYmxlIHNlcnZpY2VzIGFuZCBzb2Z0d2FyZSB0byBsaW1pdCBhY2Nlc3MgdG8KKyAgIG1hdGVyaWFsIHRoYXQgeW91IG1heSBmaW5kIG9iamVjdGlvbmFibGUuCisKKyAgIDcuNCBZb3UgdW5kZXJzdGFuZCB0aGF0IGJ5IHVzaW5nIHRoZSBTZXJ2aWNlcyB5b3UgbWF5IGJlIGV4cG9zZWQgdG8KKyAgIENvbnRlbnQgdGhhdCB5b3UgbWF5IGZpbmQgb2ZmZW5zaXZlLCBpbmRlY2VudCBvciBvYmplY3Rpb25hYmxlIGFuZAorICAgdGhhdCwgaW4gdGhpcyByZXNwZWN0LCB5b3UgdXNlIHRoZSBTZXJ2aWNlcyBhdCB5b3VyIG93biByaXNrLgorCisgICA3LjUgWW91IGFncmVlIHRoYXQgeW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIChhbmQgdGhhdCBHb29nbGUgaGFzCisgICBubyByZXNwb25zaWJpbGl0eSB0byB5b3Ugb3IgdG8gYW55IHRoaXJkIHBhcnR5IGZvcikgYW55IENvbnRlbnQgdGhhdAorICAgeW91IGNyZWF0ZSwgdHJhbnNtaXQgb3IgZGlzcGxheSB3aGlsZSB1c2luZyB0aGUgU2VydmljZXMgYW5kIGZvciB0aGUKKyAgIGNvbnNlcXVlbmNlcyBvZiB5b3VyIGFjdGlvbnMgKGluY2x1ZGluZyBhbnkgbG9zcyBvciBkYW1hZ2Ugd2hpY2ggR29vZ2xlCisgICBtYXkgc3VmZmVyKSBieSBkb2luZyBzby4KKworICAgOC4gUHJvcHJpZXRhcnkgcmlnaHRzCisKKyAgIDguMSBZb3UgYWNrbm93bGVkZ2UgYW5kIGFncmVlIHRoYXQgR29vZ2xlIChvciBHb29nbGXigJlzIGxpY2Vuc29ycykgb3duCisgICBhbGwgbGVnYWwgcmlnaHQsIHRpdGxlIGFuZCBpbnRlcmVzdCBpbiBhbmQgdG8gdGhlIFNlcnZpY2VzLCBpbmNsdWRpbmcKKyAgIGFueSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIHdoaWNoIHN1YnNpc3QgaW4gdGhlIFNlcnZpY2VzICh3aGV0aGVyCisgICB0aG9zZSByaWdodHMgaGFwcGVuIHRvIGJlIHJlZ2lzdGVyZWQgb3Igbm90LCBhbmQgd2hlcmV2ZXIgaW4gdGhlIHdvcmxkCisgICB0aG9zZSByaWdodHMgbWF5IGV4aXN0KS4KKworICAgOC4yIFVubGVzcyB5b3UgaGF2ZSBhZ3JlZWQgb3RoZXJ3aXNlIGluIHdyaXRpbmcgd2l0aCBHb29nbGUsIG5vdGhpbmcgaW4KKyAgIHRoZSBUZXJtcyBnaXZlcyB5b3UgYSByaWdodCB0byB1c2UgYW55IG9mIEdvb2dsZeKAmXMgdHJhZGUgbmFtZXMsIHRyYWRlCisgICBtYXJrcywgc2VydmljZSBtYXJrcywgbG9nb3MsIGRvbWFpbiBuYW1lcywgYW5kIG90aGVyIGRpc3RpbmN0aXZlIGJyYW5kCisgICBmZWF0dXJlcy4KKworICAgOC4zIElmIHlvdSBoYXZlIGJlZW4gZ2l2ZW4gYW4gZXhwbGljaXQgcmlnaHQgdG8gdXNlIGFueSBvZiB0aGVzZSBicmFuZAorICAgZmVhdHVyZXMgaW4gYSBzZXBhcmF0ZSB3cml0dGVuIGFncmVlbWVudCB3aXRoIEdvb2dsZSwgdGhlbiB5b3UgYWdyZWUKKyAgIHRoYXQgeW91ciB1c2Ugb2Ygc3VjaCBmZWF0dXJlcyBzaGFsbCBiZSBpbiBjb21wbGlhbmNlIHdpdGggdGhhdAorICAgYWdyZWVtZW50LCBhbnkgYXBwbGljYWJsZSBwcm92aXNpb25zIG9mIHRoZSBUZXJtcywgYW5kIEdvb2dsZSdzIGJyYW5kCisgICBmZWF0dXJlIHVzZSBndWlkZWxpbmVzIGFzIHVwZGF0ZWQgZnJvbSB0aW1lIHRvIHRpbWUuIFRoZXNlIGd1aWRlbGluZXMKKyAgIGNhbiBiZSB2aWV3ZWQgb25saW5lIGF0CisgICBodHRwOi8vd3d3Lmdvb2dsZS5jb20vcGVybWlzc2lvbnMvZ3VpZGVsaW5lcy5odG1sIChvciBzdWNoIG90aGVyIFVSTCBhcworICAgR29vZ2xlIG1heSBwcm92aWRlIGZvciB0aGlzIHB1cnBvc2UgZnJvbSB0aW1lIHRvIHRpbWUpLgorCisgICA4LjQgR29vZ2xlIGFja25vd2xlZGdlcyBhbmQgYWdyZWVzIHRoYXQgaXQgb2J0YWlucyBubyByaWdodCwgdGl0bGUgb3IKKyAgIGludGVyZXN0IGZyb20geW91IChvciB5b3VyIGxpY2Vuc29ycykgdW5kZXIgdGhlc2UgVGVybXMgaW4gb3IgdG8gYW55CisgICBDb250ZW50IHRoYXQgeW91IHN1Ym1pdCwgcG9zdCwgdHJhbnNtaXQgb3IgZGlzcGxheSBvbiwgb3IgdGhyb3VnaCwgdGhlCisgICBTZXJ2aWNlcywgaW5jbHVkaW5nIGFueSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIHdoaWNoIHN1YnNpc3QgaW4KKyAgIHRoYXQgQ29udGVudCAod2hldGhlciB0aG9zZSByaWdodHMgaGFwcGVuIHRvIGJlIHJlZ2lzdGVyZWQgb3Igbm90LCBhbmQKKyAgIHdoZXJldmVyIGluIHRoZSB3b3JsZCB0aG9zZSByaWdodHMgbWF5IGV4aXN0KS4gVW5sZXNzIHlvdSBoYXZlIGFncmVlZAorICAgb3RoZXJ3aXNlIGluIHdyaXRpbmcgd2l0aCBHb29nbGUsIHlvdSBhZ3JlZSB0aGF0IHlvdSBhcmUgcmVzcG9uc2libGUKKyAgIGZvciBwcm90ZWN0aW5nIGFuZCBlbmZvcmNpbmcgdGhvc2UgcmlnaHRzIGFuZCB0aGF0IEdvb2dsZSBoYXMgbm8KKyAgIG9ibGlnYXRpb24gdG8gZG8gc28gb24geW91ciBiZWhhbGYuCisKKyAgIDguNSBZb3UgYWdyZWUgdGhhdCB5b3Ugc2hhbGwgbm90IHJlbW92ZSwgb2JzY3VyZSwgb3IgYWx0ZXIgYW55CisgICBwcm9wcmlldGFyeSByaWdodHMgbm90aWNlcyAoaW5jbHVkaW5nIGNvcHlyaWdodCBhbmQgdHJhZGUgbWFyayBub3RpY2VzKQorICAgd2hpY2ggbWF5IGJlIGFmZml4ZWQgdG8gb3IgY29udGFpbmVkIHdpdGhpbiB0aGUgU2VydmljZXMuCisKKyAgIDguNiBVbmxlc3MgeW91IGhhdmUgYmVlbiBleHByZXNzbHkgYXV0aG9yaXplZCB0byBkbyBzbyBpbiB3cml0aW5nIGJ5CisgICBHb29nbGUsIHlvdSBhZ3JlZSB0aGF0IGluIHVzaW5nIHRoZSBTZXJ2aWNlcywgeW91IHdpbGwgbm90IHVzZSBhbnkKKyAgIHRyYWRlIG1hcmssIHNlcnZpY2UgbWFyaywgdHJhZGUgbmFtZSwgbG9nbyBvZiBhbnkgY29tcGFueSBvcgorICAgb3JnYW5pemF0aW9uIGluIGEgd2F5IHRoYXQgaXMgbGlrZWx5IG9yIGludGVuZGVkIHRvIGNhdXNlIGNvbmZ1c2lvbgorICAgYWJvdXQgdGhlIG93bmVyIG9yIGF1dGhvcml6ZWQgdXNlciBvZiBzdWNoIG1hcmtzLCBuYW1lcyBvciBsb2dvcy4KKworICAgOS4gTGljZW5zZSBmcm9tIEdvb2dsZQorCisgICA5LjEgR29vZ2xlIGdpdmVzIHlvdSBhIHBlcnNvbmFsLCB3b3JsZHdpZGUsIHJveWFsdHktZnJlZSwKKyAgIG5vbi1hc3NpZ25hYmxlIGFuZCBub24tZXhjbHVzaXZlIGxpY2Vuc2UgdG8gdXNlIHRoZSBzb2Z0d2FyZSBwcm92aWRlZAorICAgdG8geW91IGJ5IEdvb2dsZSBhcyBwYXJ0IG9mIHRoZSBTZXJ2aWNlcyBhcyBwcm92aWRlZCB0byB5b3UgYnkgR29vZ2xlCisgICAocmVmZXJyZWQgdG8gYXMgdGhlIOKAnFNvZnR3YXJl4oCdIGJlbG93KS4gVGhpcyBsaWNlbnNlIGlzIGZvciB0aGUgc29sZQorICAgcHVycG9zZSBvZiBlbmFibGluZyB5b3UgdG8gdXNlIGFuZCBlbmpveSB0aGUgYmVuZWZpdCBvZiB0aGUgU2VydmljZXMgYXMKKyAgIHByb3ZpZGVkIGJ5IEdvb2dsZSwgaW4gdGhlIG1hbm5lciBwZXJtaXR0ZWQgYnkgdGhlIFRlcm1zLgorCisgICA5LjIgU3ViamVjdCB0byBzZWN0aW9uIDEuMiwgeW91IG1heSBub3QgKGFuZCB5b3UgbWF5IG5vdCBwZXJtaXQgYW55b25lCisgICBlbHNlIHRvKSBjb3B5LCBtb2RpZnksIGNyZWF0ZSBhIGRlcml2YXRpdmUgd29yayBvZiwgcmV2ZXJzZSBlbmdpbmVlciwKKyAgIGRlY29tcGlsZSBvciBvdGhlcndpc2UgYXR0ZW1wdCB0byBleHRyYWN0IHRoZSBzb3VyY2UgY29kZSBvZiB0aGUKKyAgIFNvZnR3YXJlIG9yIGFueSBwYXJ0IHRoZXJlb2YsIHVubGVzcyB0aGlzIGlzIGV4cHJlc3NseSBwZXJtaXR0ZWQgb3IKKyAgIHJlcXVpcmVkIGJ5IGxhdywgb3IgdW5sZXNzIHlvdSBoYXZlIGJlZW4gc3BlY2lmaWNhbGx5IHRvbGQgdGhhdCB5b3UgbWF5CisgICBkbyBzbyBieSBHb29nbGUsIGluIHdyaXRpbmcuCisKKyAgIDkuMyBTdWJqZWN0IHRvIHNlY3Rpb24gMS4yLCB1bmxlc3MgR29vZ2xlIGhhcyBnaXZlbiB5b3Ugc3BlY2lmaWMKKyAgIHdyaXR0ZW4gcGVybWlzc2lvbiB0byBkbyBzbywgeW91IG1heSBub3QgYXNzaWduIChvciBncmFudCBhIHN1Yi1saWNlbnNlCisgICBvZikgeW91ciByaWdodHMgdG8gdXNlIHRoZSBTb2Z0d2FyZSwgZ3JhbnQgYSBzZWN1cml0eSBpbnRlcmVzdCBpbiBvcgorICAgb3ZlciB5b3VyIHJpZ2h0cyB0byB1c2UgdGhlIFNvZnR3YXJlLCBvciBvdGhlcndpc2UgdHJhbnNmZXIgYW55IHBhcnQgb2YKKyAgIHlvdXIgcmlnaHRzIHRvIHVzZSB0aGUgU29mdHdhcmUuCisKKyAgIDEwLiBDb250ZW50IGxpY2Vuc2UgZnJvbSB5b3UKKworICAgMTAuMSBZb3UgcmV0YWluIGNvcHlyaWdodCBhbmQgYW55IG90aGVyIHJpZ2h0cyB5b3UgYWxyZWFkeSBob2xkIGluCisgICBDb250ZW50IHdoaWNoIHlvdSBzdWJtaXQsIHBvc3Qgb3IgZGlzcGxheSBvbiBvciB0aHJvdWdoLCB0aGUgU2VydmljZXMuCisKKyAgIDExLiBTb2Z0d2FyZSB1cGRhdGVzCisKKyAgIDExLjEgVGhlIFNvZnR3YXJlIHdoaWNoIHlvdSB1c2UgbWF5IGF1dG9tYXRpY2FsbHkgZG93bmxvYWQgYW5kIGluc3RhbGwKKyAgIHVwZGF0ZXMgZnJvbSB0aW1lIHRvIHRpbWUgZnJvbSBHb29nbGUuIFRoZXNlIHVwZGF0ZXMgYXJlIGRlc2lnbmVkIHRvCisgICBpbXByb3ZlLCBlbmhhbmNlIGFuZCBmdXJ0aGVyIGRldmVsb3AgdGhlIFNlcnZpY2VzIGFuZCBtYXkgdGFrZSB0aGUgZm9ybQorICAgb2YgYnVnIGZpeGVzLCBlbmhhbmNlZCBmdW5jdGlvbnMsIG5ldyBzb2Z0d2FyZSBtb2R1bGVzIGFuZCBjb21wbGV0ZWx5CisgICBuZXcgdmVyc2lvbnMuIFlvdSBhZ3JlZSB0byByZWNlaXZlIHN1Y2ggdXBkYXRlcyAoYW5kIHBlcm1pdCBHb29nbGUgdG8KKyAgIGRlbGl2ZXIgdGhlc2UgdG8geW91KSBhcyBwYXJ0IG9mIHlvdXIgdXNlIG9mIHRoZSBTZXJ2aWNlcy4KKworICAgMTIuIEVuZGluZyB5b3VyIHJlbGF0aW9uc2hpcCB3aXRoIEdvb2dsZQorCisgICAxMi4xIFRoZSBUZXJtcyB3aWxsIGNvbnRpbnVlIHRvIGFwcGx5IHVudGlsIHRlcm1pbmF0ZWQgYnkgZWl0aGVyIHlvdSBvcgorICAgR29vZ2xlIGFzIHNldCBvdXQgYmVsb3cuCisKKyAgIDEyLjIgR29vZ2xlIG1heSBhdCBhbnkgdGltZSwgdGVybWluYXRlIGl0cyBsZWdhbCBhZ3JlZW1lbnQgd2l0aCB5b3UgaWY6CisKKyAgIChBKSB5b3UgaGF2ZSBicmVhY2hlZCBhbnkgcHJvdmlzaW9uIG9mIHRoZSBUZXJtcyAob3IgaGF2ZSBhY3RlZCBpbgorICAgbWFubmVyIHdoaWNoIGNsZWFybHkgc2hvd3MgdGhhdCB5b3UgZG8gbm90IGludGVuZCB0bywgb3IgYXJlIHVuYWJsZSB0bworICAgY29tcGx5IHdpdGggdGhlIHByb3Zpc2lvbnMgb2YgdGhlIFRlcm1zKTsgb3IKKworICAgKEIpIEdvb2dsZSBpcyByZXF1aXJlZCB0byBkbyBzbyBieSBsYXcgKGZvciBleGFtcGxlLCB3aGVyZSB0aGUKKyAgIHByb3Zpc2lvbiBvZiB0aGUgU2VydmljZXMgdG8geW91IGlzLCBvciBiZWNvbWVzLCB1bmxhd2Z1bCk7IG9yCisKKyAgIChDKSB0aGUgcGFydG5lciB3aXRoIHdob20gR29vZ2xlIG9mZmVyZWQgdGhlIFNlcnZpY2VzIHRvIHlvdSBoYXMKKyAgIHRlcm1pbmF0ZWQgaXRzIHJlbGF0aW9uc2hpcCB3aXRoIEdvb2dsZSBvciBjZWFzZWQgdG8gb2ZmZXIgdGhlIFNlcnZpY2VzCisgICB0byB5b3U7IG9yCisKKyAgIChEKSBHb29nbGUgaXMgdHJhbnNpdGlvbmluZyB0byBubyBsb25nZXIgcHJvdmlkaW5nIHRoZSBTZXJ2aWNlcyB0bworICAgdXNlcnMgaW4gdGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFyZSByZXNpZGVudCBvciBmcm9tIHdoaWNoIHlvdSB1c2UKKyAgIHRoZSBzZXJ2aWNlOyBvcgorCisgICAoRSkgdGhlIHByb3Zpc2lvbiBvZiB0aGUgU2VydmljZXMgdG8geW91IGJ5IEdvb2dsZSBpcywgaW4gR29vZ2xl4oCZcworICAgb3Bpbmlvbiwgbm8gbG9uZ2VyIGNvbW1lcmNpYWxseSB2aWFibGUuCisKKyAgIDEyLjMgTm90aGluZyBpbiB0aGlzIFNlY3Rpb24gc2hhbGwgYWZmZWN0IEdvb2dsZeKAmXMgcmlnaHRzIHJlZ2FyZGluZworICAgcHJvdmlzaW9uIG9mIFNlcnZpY2VzIHVuZGVyIFNlY3Rpb24gNCBvZiB0aGUgVGVybXMuCisKKyAgIDEyLjQgV2hlbiB0aGVzZSBUZXJtcyBjb21lIHRvIGFuIGVuZCwgYWxsIG9mIHRoZSBsZWdhbCByaWdodHMsCisgICBvYmxpZ2F0aW9ucyBhbmQgbGlhYmlsaXRpZXMgdGhhdCB5b3UgYW5kIEdvb2dsZSBoYXZlIGJlbmVmaXRlZCBmcm9tLAorICAgYmVlbiBzdWJqZWN0IHRvIChvciB3aGljaCBoYXZlIGFjY3J1ZWQgb3ZlciB0aW1lIHdoaWxzdCB0aGUgVGVybXMgaGF2ZQorICAgYmVlbiBpbiBmb3JjZSkgb3Igd2hpY2ggYXJlIGV4cHJlc3NlZCB0byBjb250aW51ZSBpbmRlZmluaXRlbHksIHNoYWxsCisgICBiZSB1bmFmZmVjdGVkIGJ5IHRoaXMgY2Vzc2F0aW9uLCBhbmQgdGhlIHByb3Zpc2lvbnMgb2YgcGFyYWdyYXBoIDE5LjcKKyAgIHNoYWxsIGNvbnRpbnVlIHRvIGFwcGx5IHRvIHN1Y2ggcmlnaHRzLCBvYmxpZ2F0aW9ucyBhbmQgbGlhYmlsaXRpZXMKKyAgIGluZGVmaW5pdGVseS4KKworICAgMTMuIEVYQ0xVU0lPTiBPRiBXQVJSQU5USUVTCisKKyAgIDEzLjEgTk9USElORyBJTiBUSEVTRSBURVJNUywgSU5DTFVESU5HIFNFQ1RJT05TIDEzIEFORCAxNCwgU0hBTEwKKyAgIEVYQ0xVREUgT1IgTElNSVQgR09PR0xF4oCZUyBXQVJSQU5UWSBPUiBMSUFCSUxJVFkgRk9SIExPU1NFUyBXSElDSCBNQVkKKyAgIE5PVCBCRSBMQVdGVUxMWSBFWENMVURFRCBPUiBMSU1JVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiBTT01FCisgICBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIENFUlRBSU4gV0FSUkFOVElFUyBPUgorICAgQ09ORElUSU9OUyBPUiBUSEUgTElNSVRBVElPTiBPUiBFWENMVVNJT04gT0YgTElBQklMSVRZIEZPUiBMT1NTIE9SCisgICBEQU1BR0UgQ0FVU0VEIEJZIE5FR0xJR0VOQ0UsIEJSRUFDSCBPRiBDT05UUkFDVCBPUiBCUkVBQ0ggT0YgSU1QTElFRAorICAgVEVSTVMsIE9SIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLiBBQ0NPUkRJTkdMWSwgT05MWSBUSEUKKyAgIExJTUlUQVRJT05TIFdISUNIIEFSRSBMQVdGVUwgSU4gWU9VUiBKVVJJU0RJQ1RJT04gV0lMTCBBUFBMWSBUTyBZT1UgQU5ECisgICBPVVIgTElBQklMSVRZIFdJTEwgQkUgTElNSVRFRCBUTyBUSEUgTUFYSU1VTSBFWFRFTlQgUEVSTUlUVEVEIEJZIExBVy4KKworICAgMTMuMiBZT1UgRVhQUkVTU0xZIFVOREVSU1RBTkQgQU5EIEFHUkVFIFRIQVQgWU9VUiBVU0UgT0YgVEhFIFNFUlZJQ0VTCisgICBJUyBBVCBZT1VSIFNPTEUgUklTSyBBTkQgVEhBVCBUSEUgU0VSVklDRVMgQVJFIFBST1ZJREVEICJBUyBJUyIgQU5EIOKAnEFTCisgICBBVkFJTEFCTEUu4oCdCisKKyAgIDEzLjMgSU4gUEFSVElDVUxBUiwgR09PR0xFLCBJVFMgU1VCU0lESUFSSUVTIEFORCBBRkZJTElBVEVTLCBBTkQgSVRTCisgICBMSUNFTlNPUlMgRE8gTk9UIFJFUFJFU0VOVCBPUiBXQVJSQU5UIFRPIFlPVSBUSEFUOgorCisgICAoQSkgWU9VUiBVU0UgT0YgVEhFIFNFUlZJQ0VTIFdJTEwgTUVFVCBZT1VSIFJFUVVJUkVNRU5UUywKKworICAgKEIpIFlPVVIgVVNFIE9GIFRIRSBTRVJWSUNFUyBXSUxMIEJFIFVOSU5URVJSVVBURUQsIFRJTUVMWSwgU0VDVVJFIE9SCisgICBGUkVFIEZST00gRVJST1IsCisKKyAgIChDKSBBTlkgSU5GT1JNQVRJT04gT0JUQUlORUQgQlkgWU9VIEFTIEEgUkVTVUxUIE9GIFlPVVIgVVNFIE9GIFRIRQorICAgU0VSVklDRVMgV0lMTCBCRSBBQ0NVUkFURSBPUiBSRUxJQUJMRSwgQU5ECisKKyAgIChEKSBUSEFUIERFRkVDVFMgSU4gVEhFIE9QRVJBVElPTiBPUiBGVU5DVElPTkFMSVRZIE9GIEFOWSBTT0ZUV0FSRQorICAgUFJPVklERUQgVE8gWU9VIEFTIFBBUlQgT0YgVEhFIFNFUlZJQ0VTIFdJTEwgQkUgQ09SUkVDVEVELgorCisgICAxMy40IEFOWSBNQVRFUklBTCBET1dOTE9BREVEIE9SIE9USEVSV0lTRSBPQlRBSU5FRCBUSFJPVUdIIFRIRSBVU0UgT0YKKyAgIFRIRSBTRVJWSUNFUyBJUyBET05FIEFUIFlPVVIgT1dOIERJU0NSRVRJT04gQU5EIFJJU0sgQU5EIFRIQVQgWU9VIFdJTEwKKyAgIEJFIFNPTEVMWSBSRVNQT05TSUJMRSBGT1IgQU5ZIERBTUFHRSBUTyBZT1VSIENPTVBVVEVSIFNZU1RFTSBPUiBPVEhFUgorICAgREVWSUNFIE9SIExPU1MgT0YgREFUQSBUSEFUIFJFU1VMVFMgRlJPTSBUSEUgRE9XTkxPQUQgT0YgQU5ZIFNVQ0gKKyAgIE1BVEVSSUFMLgorCisgICAxMy41IE5PIEFEVklDRSBPUiBJTkZPUk1BVElPTiwgV0hFVEhFUiBPUkFMIE9SIFdSSVRURU4sIE9CVEFJTkVEIEJZIFlPVQorICAgRlJPTSBHT09HTEUgT1IgVEhST1VHSCBPUiBGUk9NIFRIRSBTRVJWSUNFUyBTSEFMTCBDUkVBVEUgQU5ZIFdBUlJBTlRZCisgICBOT1QgRVhQUkVTU0xZIFNUQVRFRCBJTiBUSEUgVEVSTVMuCisKKyAgIDEzLjYgR09PR0xFIEZVUlRIRVIgRVhQUkVTU0xZIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBBTkQgQ09ORElUSU9OUworICAgT0YgQU5ZIEtJTkQsIFdIRVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTworICAgVEhFIElNUExJRUQgV0FSUkFOVElFUyBBTkQgQ09ORElUSU9OUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEKKyAgIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVC4KKworICAgMTQuIExJTUlUQVRJT04gT0YgTElBQklMSVRZCisKKyAgIDE0LjEgU1VCSkVDVCBUTyBPVkVSQUxMIFBST1ZJU0lPTiBJTiBQQVJBR1JBUEggMTMuMSBBQk9WRSwgWU9VCisgICBFWFBSRVNTTFkgVU5ERVJTVEFORCBBTkQgQUdSRUUgVEhBVCBHT09HTEUsIElUUyBTVUJTSURJQVJJRVMgQU5ECisgICBBRkZJTElBVEVTLCBBTkQgSVRTIExJQ0VOU09SUyBTSEFMTCBOT1QgQkUgTElBQkxFIFRPIFlPVSBGT1I6CisKKyAgIChBKSBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCBDT05TRVFVRU5USUFMIE9SCisgICBFWEVNUExBUlkgREFNQUdFUyBXSElDSCBNQVkgQkUgSU5DVVJSRUQgQlkgWU9VLCBIT1dFVkVSIENBVVNFRCBBTkQKKyAgIFVOREVSIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLi4gVEhJUyBTSEFMTCBJTkNMVURFLCBCVVQgTk9UIEJFIExJTUlURUQKKyAgIFRPLCBBTlkgTE9TUyBPRiBQUk9GSVQgKFdIRVRIRVIgSU5DVVJSRUQgRElSRUNUTFkgT1IgSU5ESVJFQ1RMWSksIEFOWQorICAgTE9TUyBPRiBHT09EV0lMTCBPUiBCVVNJTkVTUyBSRVBVVEFUSU9OLCBBTlkgTE9TUyBPRiBEQVRBIFNVRkZFUkVELAorICAgQ09TVCBPRiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTLCBPUiBPVEhFUgorICAgSU5UQU5HSUJMRSBMT1NTOworCisgICAoQikgQU5ZIExPU1MgT1IgREFNQUdFIFdISUNIIE1BWSBCRSBJTkNVUlJFRCBCWSBZT1UsIElOQ0xVRElORyBCVVQgTk9UCisgICBMSU1JVEVEIFRPIExPU1MgT1IgREFNQUdFIEFTIEEgUkVTVUxUIE9GOgorCisgICAoSSkgQU5ZIFJFTElBTkNFIFBMQUNFRCBCWSBZT1UgT04gVEhFIENPTVBMRVRFTkVTUywgQUNDVVJBQ1kgT1IKKyAgIEVYSVNURU5DRSBPRiBBTlkgQURWRVJUSVNJTkcsIE9SIEFTIEEgUkVTVUxUIE9GIEFOWSBSRUxBVElPTlNISVAgT1IKKyAgIFRSQU5TQUNUSU9OIEJFVFdFRU4gWU9VIEFORCBBTlkgQURWRVJUSVNFUiBPUiBTUE9OU09SIFdIT1NFIEFEVkVSVElTSU5HCisgICBBUFBFQVJTIE9OIFRIRSBTRVJWSUNFUzsKKworICAgKElJKSBBTlkgQ0hBTkdFUyBXSElDSCBHT09HTEUgTUFZIE1BS0UgVE8gVEhFIFNFUlZJQ0VTLCBPUiBGT1IgQU5ZCisgICBQRVJNQU5FTlQgT1IgVEVNUE9SQVJZIENFU1NBVElPTiBJTiBUSEUgUFJPVklTSU9OIE9GIFRIRSBTRVJWSUNFUyAoT1IKKyAgIEFOWSBGRUFUVVJFUyBXSVRISU4gVEhFIFNFUlZJQ0VTKTsKKworICAgKElJSSkgVEhFIERFTEVUSU9OIE9GLCBDT1JSVVBUSU9OIE9GLCBPUiBGQUlMVVJFIFRPIFNUT1JFLCBBTlkgQ09OVEVOVAorICAgQU5EIE9USEVSIENPTU1VTklDQVRJT05TIERBVEEgTUFJTlRBSU5FRCBPUiBUUkFOU01JVFRFRCBCWSBPUiBUSFJPVUdICisgICBZT1VSIFVTRSBPRiBUSEUgU0VSVklDRVM7CisKKyAgIChJVikgWU9VUiBGQUlMVVJFIFRPIFBST1ZJREUgR09PR0xFIFdJVEggQUNDVVJBVEUgQUNDT1VOVCBJTkZPUk1BVElPTjsKKworICAgKFYpIFlPVVIgRkFJTFVSRSBUTyBLRUVQIFlPVVIgUEFTU1dPUkQgT1IgQUNDT1VOVCBERVRBSUxTIFNFQ1VSRSBBTkQKKyAgIENPTkZJREVOVElBTDsKKworICAgMTQuMiBUSEUgTElNSVRBVElPTlMgT04gR09PR0xF4oCZUyBMSUFCSUxJVFkgVE8gWU9VIElOIFBBUkFHUkFQSCAxNC4xCisgICBBQk9WRSBTSEFMTCBBUFBMWSBXSEVUSEVSIE9SIE5PVCBHT09HTEUgSEFTIEJFRU4gQURWSVNFRCBPRiBPUiBTSE9VTEQKKyAgIEhBVkUgQkVFTiBBV0FSRSBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgQU5ZIFNVQ0ggTE9TU0VTIEFSSVNJTkcuCisKKyAgIDE1LiBDb3B5cmlnaHQgYW5kIHRyYWRlIG1hcmsgcG9saWNpZXMKKworICAgMTUuMSBJdCBpcyBHb29nbGXigJlzIHBvbGljeSB0byByZXNwb25kIHRvIG5vdGljZXMgb2YgYWxsZWdlZCBjb3B5cmlnaHQKKyAgIGluZnJpbmdlbWVudCB0aGF0IGNvbXBseSB3aXRoIGFwcGxpY2FibGUgaW50ZXJuYXRpb25hbCBpbnRlbGxlY3R1YWwKKyAgIHByb3BlcnR5IGxhdyAoaW5jbHVkaW5nLCBpbiB0aGUgVW5pdGVkIFN0YXRlcywgdGhlIERpZ2l0YWwgTWlsbGVubml1bQorICAgQ29weXJpZ2h0IEFjdCkgYW5kIHRvIHRlcm1pbmF0aW5nIHRoZSBhY2NvdW50cyBvZiByZXBlYXQgaW5mcmluZ2Vycy4KKyAgIERldGFpbHMgb2YgR29vZ2xl4oCZcyBwb2xpY3kgY2FuIGJlIGZvdW5kIGF0CisgICBodHRwOi8vd3d3Lmdvb2dsZS5jb20vZG1jYS5odG1sLgorCisgICAxNS4yIEdvb2dsZSBvcGVyYXRlcyBhIHRyYWRlIG1hcmsgY29tcGxhaW50cyBwcm9jZWR1cmUgaW4gcmVzcGVjdCBvZgorICAgR29vZ2xl4oCZcyBhZHZlcnRpc2luZyBidXNpbmVzcywgZGV0YWlscyBvZiB3aGljaCBjYW4gYmUgZm91bmQgYXQKKyAgIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbS90bV9jb21wbGFpbnQuaHRtbC4KKworICAgMTYuIEFkdmVydGlzZW1lbnRzCisKKyAgIDE2LjEgU29tZSBvZiB0aGUgU2VydmljZXMgYXJlIHN1cHBvcnRlZCBieSBhZHZlcnRpc2luZyByZXZlbnVlIGFuZCBtYXkKKyAgIGRpc3BsYXkgYWR2ZXJ0aXNlbWVudHMgYW5kIHByb21vdGlvbnMuIFRoZXNlIGFkdmVydGlzZW1lbnRzIG1heSBiZQorICAgdGFyZ2V0ZWQgdG8gdGhlIGNvbnRlbnQgb2YgaW5mb3JtYXRpb24gc3RvcmVkIG9uIHRoZSBTZXJ2aWNlcywgcXVlcmllcworICAgbWFkZSB0aHJvdWdoIHRoZSBTZXJ2aWNlcyBvciBvdGhlciBpbmZvcm1hdGlvbi4KKworICAgMTYuMiBUaGUgbWFubmVyLCBtb2RlIGFuZCBleHRlbnQgb2YgYWR2ZXJ0aXNpbmcgYnkgR29vZ2xlIG9uIHRoZQorICAgU2VydmljZXMgYXJlIHN1YmplY3QgdG8gY2hhbmdlIHdpdGhvdXQgc3BlY2lmaWMgbm90aWNlIHRvIHlvdS4KKworICAgMTYuMyBJbiBjb25zaWRlcmF0aW9uIGZvciBHb29nbGUgZ3JhbnRpbmcgeW91IGFjY2VzcyB0byBhbmQgdXNlIG9mIHRoZQorICAgU2VydmljZXMsIHlvdSBhZ3JlZSB0aGF0IEdvb2dsZSBtYXkgcGxhY2Ugc3VjaCBhZHZlcnRpc2luZyBvbiB0aGUKKyAgIFNlcnZpY2VzLgorCisgICAxNy4gT3RoZXIgY29udGVudAorCisgICAxNy4xIFRoZSBTZXJ2aWNlcyBtYXkgaW5jbHVkZSBoeXBlcmxpbmtzIHRvIG90aGVyIHdlYiBzaXRlcyBvciBjb250ZW50CisgICBvciByZXNvdXJjZXMuIEdvb2dsZSBtYXkgaGF2ZSBubyBjb250cm9sIG92ZXIgYW55IHdlYiBzaXRlcyBvcgorICAgcmVzb3VyY2VzIHdoaWNoIGFyZSBwcm92aWRlZCBieSBjb21wYW5pZXMgb3IgcGVyc29ucyBvdGhlciB0aGFuIEdvb2dsZS4KKworICAgMTcuMiBZb3UgYWNrbm93bGVkZ2UgYW5kIGFncmVlIHRoYXQgR29vZ2xlIGlzIG5vdCByZXNwb25zaWJsZSBmb3IgdGhlCisgICBhdmFpbGFiaWxpdHkgb2YgYW55IHN1Y2ggZXh0ZXJuYWwgc2l0ZXMgb3IgcmVzb3VyY2VzLCBhbmQgZG9lcyBub3QKKyAgIGVuZG9yc2UgYW55IGFkdmVydGlzaW5nLCBwcm9kdWN0cyBvciBvdGhlciBtYXRlcmlhbHMgb24gb3IgYXZhaWxhYmxlCisgICBmcm9tIHN1Y2ggd2ViIHNpdGVzIG9yIHJlc291cmNlcy4KKworICAgMTcuMyBZb3UgYWNrbm93bGVkZ2UgYW5kIGFncmVlIHRoYXQgR29vZ2xlIGlzIG5vdCBsaWFibGUgZm9yIGFueSBsb3NzCisgICBvciBkYW1hZ2Ugd2hpY2ggbWF5IGJlIGluY3VycmVkIGJ5IHlvdSBhcyBhIHJlc3VsdCBvZiB0aGUgYXZhaWxhYmlsaXR5CisgICBvZiB0aG9zZSBleHRlcm5hbCBzaXRlcyBvciByZXNvdXJjZXMsIG9yIGFzIGEgcmVzdWx0IG9mIGFueSByZWxpYW5jZQorICAgcGxhY2VkIGJ5IHlvdSBvbiB0aGUgY29tcGxldGVuZXNzLCBhY2N1cmFjeSBvciBleGlzdGVuY2Ugb2YgYW55CisgICBhZHZlcnRpc2luZywgcHJvZHVjdHMgb3Igb3RoZXIgbWF0ZXJpYWxzIG9uLCBvciBhdmFpbGFibGUgZnJvbSwgc3VjaAorICAgd2ViIHNpdGVzIG9yIHJlc291cmNlcy4KKworICAgMTguIENoYW5nZXMgdG8gdGhlIFRlcm1zCisKKyAgIDE4LjEgR29vZ2xlIG1heSBtYWtlIGNoYW5nZXMgdG8gdGhlIFVuaXZlcnNhbCBUZXJtcyBvciBBZGRpdGlvbmFsIFRlcm1zCisgICBmcm9tIHRpbWUgdG8gdGltZS4gV2hlbiB0aGVzZSBjaGFuZ2VzIGFyZSBtYWRlLCBHb29nbGUgd2lsbCBtYWtlIGEgbmV3CisgICBjb3B5IG9mIHRoZSBVbml2ZXJzYWwgVGVybXMgYXZhaWxhYmxlIGF0CisgICBodHRwOi8vd3d3Lmdvb2dsZS5jb20vY2hyb21lL2ludGwvZW4vZXVsYV90ZXh0Lmh0bWwgYW5kIGFueSBuZXcKKyAgIEFkZGl0aW9uYWwgVGVybXMgd2lsbCBiZSBtYWRlIGF2YWlsYWJsZSB0byB5b3UgZnJvbSB3aXRoaW4sIG9yIHRocm91Z2gsCisgICB0aGUgYWZmZWN0ZWQgU2VydmljZXMuCisKKyAgIDE4LjIgWW91IHVuZGVyc3RhbmQgYW5kIGFncmVlIHRoYXQgaWYgeW91IHVzZSB0aGUgU2VydmljZXMgYWZ0ZXIgdGhlCisgICBkYXRlIG9uIHdoaWNoIHRoZSBVbml2ZXJzYWwgVGVybXMgb3IgQWRkaXRpb25hbCBUZXJtcyBoYXZlIGNoYW5nZWQsCisgICBHb29nbGUgd2lsbCB0cmVhdCB5b3VyIHVzZSBhcyBhY2NlcHRhbmNlIG9mIHRoZSB1cGRhdGVkIFVuaXZlcnNhbCBUZXJtcworICAgb3IgQWRkaXRpb25hbCBUZXJtcy4KKworICAgMTkuIEdlbmVyYWwgbGVnYWwgdGVybXMKKworICAgMTkuMSBTb21ldGltZXMgd2hlbiB5b3UgdXNlIHRoZSBTZXJ2aWNlcywgeW91IG1heSAoYXMgYSByZXN1bHQgb2YsIG9yCisgICBpbiBjb25uZWN0aW9uIHdpdGggeW91ciB1c2Ugb2YgdGhlIFNlcnZpY2VzKSB1c2UgYSBzZXJ2aWNlIG9yIGRvd25sb2FkCisgICBhIHBpZWNlIG9mIHNvZnR3YXJlLCBvciBwdXJjaGFzZSBnb29kcywgd2hpY2ggYXJlIHByb3ZpZGVkIGJ5IGFub3RoZXIKKyAgIHBlcnNvbiBvciBjb21wYW55LiBZb3VyIHVzZSBvZiB0aGVzZSBvdGhlciBzZXJ2aWNlcywgc29mdHdhcmUgb3IgZ29vZHMKKyAgIG1heSBiZSBzdWJqZWN0IHRvIHNlcGFyYXRlIHRlcm1zIGJldHdlZW4geW91IGFuZCB0aGUgY29tcGFueSBvciBwZXJzb24KKyAgIGNvbmNlcm5lZC4gSWYgc28sIHRoZSBUZXJtcyBkbyBub3QgYWZmZWN0IHlvdXIgbGVnYWwgcmVsYXRpb25zaGlwIHdpdGgKKyAgIHRoZXNlIG90aGVyIGNvbXBhbmllcyBvciBpbmRpdmlkdWFscy4KKworICAgMTkuMiBUaGUgVGVybXMgY29uc3RpdHV0ZSB0aGUgd2hvbGUgbGVnYWwgYWdyZWVtZW50IGJldHdlZW4geW91IGFuZAorICAgR29vZ2xlIGFuZCBnb3Zlcm4geW91ciB1c2Ugb2YgdGhlIFNlcnZpY2VzIChidXQgZXhjbHVkaW5nIGFueSBzZXJ2aWNlcworICAgd2hpY2ggR29vZ2xlIG1heSBwcm92aWRlIHRvIHlvdSB1bmRlciBhIHNlcGFyYXRlIHdyaXR0ZW4gYWdyZWVtZW50KSwKKyAgIGFuZCBjb21wbGV0ZWx5IHJlcGxhY2UgYW55IHByaW9yIGFncmVlbWVudHMgYmV0d2VlbiB5b3UgYW5kIEdvb2dsZSBpbgorICAgcmVsYXRpb24gdG8gdGhlIFNlcnZpY2VzLgorCisgICAxOS4zIFlvdSBhZ3JlZSB0aGF0IEdvb2dsZSBtYXkgcHJvdmlkZSB5b3Ugd2l0aCBub3RpY2VzLCBpbmNsdWRpbmcKKyAgIHRob3NlIHJlZ2FyZGluZyBjaGFuZ2VzIHRvIHRoZSBUZXJtcywgYnkgZW1haWwsIHJlZ3VsYXIgbWFpbCwgb3IKKyAgIHBvc3RpbmdzIG9uIHRoZSBTZXJ2aWNlcy4KKworICAgMTkuNCBZb3UgYWdyZWUgdGhhdCBpZiBHb29nbGUgZG9lcyBub3QgZXhlcmNpc2Ugb3IgZW5mb3JjZSBhbnkgbGVnYWwKKyAgIHJpZ2h0IG9yIHJlbWVkeSB3aGljaCBpcyBjb250YWluZWQgaW4gdGhlIFRlcm1zIChvciB3aGljaCBHb29nbGUgaGFzCisgICB0aGUgYmVuZWZpdCBvZiB1bmRlciBhbnkgYXBwbGljYWJsZSBsYXcpLCB0aGlzIHdpbGwgbm90IGJlIHRha2VuIHRvIGJlCisgICBhIGZvcm1hbCB3YWl2ZXIgb2YgR29vZ2xl4oCZcyByaWdodHMgYW5kIHRoYXQgdGhvc2UgcmlnaHRzIG9yIHJlbWVkaWVzCisgICB3aWxsIHN0aWxsIGJlIGF2YWlsYWJsZSB0byBHb29nbGUuCisKKyAgIDE5LjUgSWYgYW55IGNvdXJ0IG9mIGxhdywgaGF2aW5nIHRoZSBqdXJpc2RpY3Rpb24gdG8gZGVjaWRlIG9uIHRoaXMKKyAgIG1hdHRlciwgcnVsZXMgdGhhdCBhbnkgcHJvdmlzaW9uIG9mIHRoZXNlIFRlcm1zIGlzIGludmFsaWQsIHRoZW4gdGhhdAorICAgcHJvdmlzaW9uIHdpbGwgYmUgcmVtb3ZlZCBmcm9tIHRoZSBUZXJtcyB3aXRob3V0IGFmZmVjdGluZyB0aGUgcmVzdCBvZgorICAgdGhlIFRlcm1zLiBUaGUgcmVtYWluaW5nIHByb3Zpc2lvbnMgb2YgdGhlIFRlcm1zIHdpbGwgY29udGludWUgdG8gYmUKKyAgIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KKworICAgMTkuNiBZb3UgYWNrbm93bGVkZ2UgYW5kIGFncmVlIHRoYXQgZWFjaCBtZW1iZXIgb2YgdGhlIGdyb3VwIG9mCisgICBjb21wYW5pZXMgb2Ygd2hpY2ggR29vZ2xlIGlzIHRoZSBwYXJlbnQgc2hhbGwgYmUgdGhpcmQgcGFydHkKKyAgIGJlbmVmaWNpYXJpZXMgdG8gdGhlIFRlcm1zIGFuZCB0aGF0IHN1Y2ggb3RoZXIgY29tcGFuaWVzIHNoYWxsIGJlCisgICBlbnRpdGxlZCB0byBkaXJlY3RseSBlbmZvcmNlLCBhbmQgcmVseSB1cG9uLCBhbnkgcHJvdmlzaW9uIG9mIHRoZSBUZXJtcworICAgd2hpY2ggY29uZmVycyBhIGJlbmVmaXQgb24gKG9yIHJpZ2h0cyBpbiBmYXZvciBvZikgdGhlbS4gT3RoZXIgdGhhbgorICAgdGhpcywgbm8gb3RoZXIgcGVyc29uIG9yIGNvbXBhbnkgc2hhbGwgYmUgdGhpcmQgcGFydHkgYmVuZWZpY2lhcmllcyB0bworICAgdGhlIFRlcm1zLgorCisgICAxOS43IFRoZSBUZXJtcywgYW5kIHlvdXIgcmVsYXRpb25zaGlwIHdpdGggR29vZ2xlIHVuZGVyIHRoZSBUZXJtcywKKyAgIHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBDYWxpZm9ybmlhIHdpdGhvdXQgcmVnYXJkCisgICB0byBpdHMgY29uZmxpY3Qgb2YgbGF3cyBwcm92aXNpb25zLiBZb3UgYW5kIEdvb2dsZSBhZ3JlZSB0byBzdWJtaXQgdG8KKyAgIHRoZSBleGNsdXNpdmUganVyaXNkaWN0aW9uIG9mIHRoZSBjb3VydHMgbG9jYXRlZCB3aXRoaW4gdGhlIGNvdW50eSBvZgorICAgU2FudGEgQ2xhcmEsIENhbGlmb3JuaWEgdG8gcmVzb2x2ZSBhbnkgbGVnYWwgbWF0dGVyIGFyaXNpbmcgZnJvbSB0aGUKKyAgIFRlcm1zLiBOb3R3aXRoc3RhbmRpbmcgdGhpcywgeW91IGFncmVlIHRoYXQgR29vZ2xlIHNoYWxsIHN0aWxsIGJlCisgICBhbGxvd2VkIHRvIGFwcGx5IGZvciBpbmp1bmN0aXZlIHJlbWVkaWVzIChvciBhbiBlcXVpdmFsZW50IHR5cGUgb2YKKyAgIHVyZ2VudCBsZWdhbCByZWxpZWYpIGluIGFueSBqdXJpc2RpY3Rpb24uCisKKyAgIDIwLiBBZGRpdGlvbmFsIFRlcm1zIGZvciBFeHRlbnNpb25zIGZvciBHb29nbGUgQ2hyb21lCisKKyAgIDIwLjEgVGhlc2UgdGVybXMgaW4gdGhpcyBzZWN0aW9uIGFwcGx5IGlmIHlvdSBpbnN0YWxsIGV4dGVuc2lvbnMgb24KKyAgIHlvdXIgY29weSBvZiBHb29nbGUgQ2hyb21lLiBFeHRlbnNpb25zIGFyZSBzbWFsbCBzb2Z0d2FyZSBwcm9ncmFtcywKKyAgIGRldmVsb3BlZCBieSBHb29nbGUgb3IgdGhpcmQgcGFydGllcywgdGhhdCBjYW4gbW9kaWZ5IGFuZCBlbmhhbmNlIHRoZQorICAgZnVuY3Rpb25hbGl0eSBvZiBHb29nbGUgQ2hyb21lLiBFeHRlbnNpb25zIG1heSBoYXZlIGdyZWF0ZXIgcHJpdmlsZWdlcworICAgdG8gYWNjZXNzIHlvdXIgYnJvd3NlciBvciB5b3VyIGNvbXB1dGVyIHRoYW4gcmVndWxhciB3ZWJwYWdlcywKKyAgIGluY2x1ZGluZyB0aGUgYWJpbGl0eSB0byByZWFkIGFuZCBtb2RpZnkgeW91ciBwcml2YXRlIGRhdGEuCisKKyAgIDIwLjIgRnJvbSB0aW1lIHRvIHRpbWUsIEdvb2dsZSBDaHJvbWUgbWF5IGNoZWNrIHdpdGggcmVtb3RlIHNlcnZlcnMKKyAgIChob3N0ZWQgYnkgR29vZ2xlIG9yIGJ5IHRoaXJkIHBhcnRpZXMpIGZvciBhdmFpbGFibGUgdXBkYXRlcyB0bworICAgZXh0ZW5zaW9ucywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBidWcgZml4ZXMgb3IgZW5oYW5jZWQKKyAgIGZ1bmN0aW9uYWxpdHkuIFlvdSBhZ3JlZSB0aGF0IHN1Y2ggdXBkYXRlcyB3aWxsIGJlIGF1dG9tYXRpY2FsbHkKKyAgIHJlcXVlc3RlZCwgZG93bmxvYWRlZCwgYW5kIGluc3RhbGxlZCB3aXRob3V0IGZ1cnRoZXIgbm90aWNlIHRvIHlvdS4KKworICAgMjAuMyBGcm9tIHRpbWUgdG8gdGltZSwgR29vZ2xlIG1heSBkaXNjb3ZlciBhbiBleHRlbnNpb24gdGhhdCB2aW9sYXRlcworICAgR29vZ2xlIGRldmVsb3BlciB0ZXJtcyBvciBvdGhlciBsZWdhbCBhZ3JlZW1lbnRzLCBsYXdzLCByZWd1bGF0aW9ucyBvcgorICAgcG9saWNpZXMuIEdvb2dsZSBDaHJvbWUgd2lsbCBwZXJpb2RpY2FsbHkgZG93bmxvYWQgYSBsaXN0IG9mIHN1Y2gKKyAgIGV4dGVuc2lvbnMgZnJvbSBHb29nbGXigJlzIHNlcnZlcnMuIFlvdSBhZ3JlZSB0aGF0IEdvb2dsZSBtYXkgcmVtb3RlbHkKKyAgIGRpc2FibGUgb3IgcmVtb3ZlIGFueSBzdWNoIGV4dGVuc2lvbiBmcm9tIHVzZXIgc3lzdGVtcyBpbiBpdHMgc29sZQorICAgZGlzY3JldGlvbi4KKworICAgMjEuIEFkZGl0aW9uYWwgVGVybXMgZm9yIEVudGVycHJpc2UgVXNlCisKKyAgIDIxLjEgSWYgeW91IGFyZSBhIGJ1c2luZXNzIGVudGl0eSwgdGhlbiB0aGUgaW5kaXZpZHVhbCBhY2NlcHRpbmcgb24KKyAgIGJlaGFsZiBvZiB0aGUgZW50aXR5IChmb3IgdGhlIGF2b2lkYW5jZSBvZiBkb3VidCwgZm9yIGJ1c2luZXNzCisgICBlbnRpdGllcywgaW4gdGhlc2UgVGVybXMsICJ5b3UiIG1lYW5zIHRoZSBlbnRpdHkpIHJlcHJlc2VudHMgYW5kCisgICB3YXJyYW50cyB0aGF0IGhlIG9yIHNoZSBoYXMgdGhlIGF1dGhvcml0eSB0byBhY3Qgb24geW91ciBiZWhhbGYsIHRoYXQKKyAgIHlvdSByZXByZXNlbnQgdGhhdCB5b3UgYXJlIGR1bHkgYXV0aG9yaXplZCB0byBkbyBidXNpbmVzcyBpbiB0aGUKKyAgIGNvdW50cnkgb3IgY291bnRyaWVzIHdoZXJlIHlvdSBvcGVyYXRlLCBhbmQgdGhhdCB5b3VyIGVtcGxveWVlcywKKyAgIG9mZmljZXJzLCByZXByZXNlbnRhdGl2ZXMsIGFuZCBvdGhlciBhZ2VudHMgYWNjZXNzaW5nIHRoZSBTZXJ2aWNlIGFyZQorICAgZHVseSBhdXRob3JpemVkIHRvIGFjY2VzcyBHb29nbGUgQ2hyb21lIGFuZCB0byBsZWdhbGx5IGJpbmQgeW91IHRvCisgICB0aGVzZSBUZXJtcy4KKworICAgMjEuMiBTdWJqZWN0IHRvIHRoZSBUZXJtcywgYW5kIGluIGFkZGl0aW9uIHRvIHRoZSBsaWNlbnNlIGdyYW50IGluCisgICBTZWN0aW9uIDksIEdvb2dsZSBncmFudHMgeW91IGEgbm9uLWV4Y2x1c2l2ZSwgbm9uLXRyYW5zZmVyYWJsZSBsaWNlbnNlCisgICB0byByZXByb2R1Y2UsIGRpc3RyaWJ1dGUsIGluc3RhbGwsIGFuZCB1c2UgR29vZ2xlIENocm9tZSBzb2xlbHkgb24KKyAgIG1hY2hpbmVzIGludGVuZGVkIGZvciB1c2UgYnkgeW91ciBlbXBsb3llZXMsIG9mZmljZXJzLCByZXByZXNlbnRhdGl2ZXMsCisgICBhbmQgYWdlbnRzIGluIGNvbm5lY3Rpb24gd2l0aCB5b3VyIGJ1c2luZXNzIGVudGl0eSwgYW5kIHByb3ZpZGVkIHRoYXQKKyAgIHRoZWlyIHVzZSBvZiBHb29nbGUgQ2hyb21lIHdpbGwgYmUgc3ViamVjdCB0byB0aGUgVGVybXMuCisKKyAgIEF1Z3VzdCAxMiwgMjAxMAorICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKworR29vZ2xlIENocm9tZSBBZGRpdGlvbmFsIFRlcm1zIG9mIFNlcnZpY2UKKworICAgTVBFR0xBCisKKyAgIFRISVMgUFJPRFVDVCBJUyBMSUNFTlNFRCBVTkRFUiBUSEUgQVZDIFBBVEVOVCBQT1JURk9MSU8gTElDRU5TRSBGT1IgVEhFCisgICBQRVJTT05BTCBBTkQgTk9OLUNPTU1FUkNJQUwgVVNFIE9GIEEgQ09OU1VNRVIgVE8gKGkpIEVOQ09ERSBWSURFTyBJTgorICAgQ09NUExJQU5DRSBXSVRIIFRIRSBBVkMgU1RBTkRBUkQgKCDigJxBVkMgVklERU/igJ0pIEFORC9PUiAoaWkpIERFQ09ERSBBVkMKKyAgIFZJREVPIFRIQVQgV0FTIEVOQ09ERUQgQlkgQSBDT05TVU1FUiBFTkdBR0VEIElOIEEgUEVSU09OQUwgQU5ECisgICBOT04tQ09NTUVSQ0lBTCBBQ1RJVklUWSBBTkQvT1IgV0FTIE9CVEFJTkVEIEZST00gQSBWSURFTyBQQVJUTkVSCisgICBMSUNFTlNFRCBUTyBQUk9WSURFIEFWQyBWSURFTy4gTk8gTElDRU5TRSBJUyBHUkFOVEVEIE9SIFNIQUxMIEJFCisgICBJTVBMSUVEIEZPUiBBTlkgT1RIRVIgVVNFLiBBRERJVElPTkFMIElORk9STUFUSU9OIE1BWSBCRSBPQlRBSU5FRCBGUk9NCisgICBNUEVHIExBLCBMLkwuQy4gU0VFIEhUVFA6Ly9XV1cuTVBFR0xBLkNPTS4KKworICAgQWRvYmUKKworICAgR29vZ2xlIENocm9tZSBtYXkgaW5jbHVkZSBvbmUgb3IgbW9yZSBjb21wb25lbnRzIHByb3ZpZGVkIGJ5IEFkb2JlCisgICBTeXN0ZW1zIEluY29ycG9yYXRlZCBhbmQgQWRvYmUgU29mdHdhcmUgSXJlbGFuZCBMaW1pdGVkIChjb2xsZWN0aXZlbHkKKyAgIOKAnEFkb2Jl4oCdKS4gWW91ciB1c2Ugb2YgdGhlIEFkb2JlIHNvZnR3YXJlIGFzIHByb3ZpZGVkIGJ5IEdvb2dsZSAo4oCcQWRvYmUKKyAgIFNvZnR3YXJl4oCdKSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCB0ZXJtcyAodGhlIOKAnEFkb2JlCisgICBUZXJtc+KAnSkuIFlvdSwgdGhlIGVudGl0eSByZWNlaXZpbmcgdGhlIEFkb2JlIFNvZnR3YXJlLCB3aWxsIGJlCisgICBoZXJlaW5hZnRlciByZWZlcnJlZCB0byBhcyDigJxTdWJsaWNlbnNlZS7igJ0KKworICAgMS4gTGljZW5zZSBSZXN0cmljdGlvbnMuCisKKyAgIChhKSBGbGFzaCBQbGF5ZXIsIFZlcnNpb24gMTAueCBpcyBkZXNpZ25lZCBvbmx5IGFzIGEgYnJvd3NlciBwbHVnLWluLgorICAgU3VibGljZW5zZWUgbWF5IG5vdCBtb2RpZnkgb3IgZGlzdHJpYnV0ZSB0aGlzIEFkb2JlIFNvZnR3YXJlIGZvciB1c2UgYXMKKyAgIGFueXRoaW5nIGJ1dCBhIGJyb3dzZXIgcGx1Zy1pbiBmb3IgcGxheWluZyBiYWNrIGNvbnRlbnQgb24gYSB3ZWIgcGFnZS4KKyAgIEZvciBleGFtcGxlLCBTdWJsaWNlbnNlZSB3aWxsIG5vdCBtb2RpZnkgdGhpcyBBZG9iZSBTb2Z0d2FyZSBpbiBvcmRlcgorICAgdG8gYWxsb3cgaW50ZXJvcGVyYXRpb24gd2l0aCBhcHBsaWNhdGlvbnMgdGhhdCBydW4gb3V0c2lkZSBvZiB0aGUKKyAgIGJyb3dzZXIgKGUuZy4sIHN0YW5kYWxvbmUgYXBwbGljYXRpb25zLCB3aWRnZXRzLCBkZXZpY2UgVUkpLgorCisgICAoYikgU3VibGljZW5zZWUgd2lsbCBub3QgZXhwb3NlIGFueSBBUElzIG9mIHRoZSBGbGFzaCBQbGF5ZXIsIFZlcnNpb24KKyAgIDEwLnggdGhyb3VnaCBhIGJyb3dzZXIgcGx1Zy1pbiBpbnRlcmZhY2UgaW4gc3VjaCBhIHdheSB0aGF0IGFsbG93cyBzdWNoCisgICBleHRlbnNpb24gdG8gYmUgdXNlZCB0byBwbGF5YmFjayBjb250ZW50IGZyb20gYSB3ZWIgcGFnZSBhcyBhCisgICBzdGFuZC1hbG9uZSBhcHBsaWNhdGlvbi4KKworICAgKGMpIFRoZSBDaHJvbWUtUmVhZGVyIFNvZnR3YXJlIG1heSBub3QgYmUgdXNlZCB0byByZW5kZXIgYW55IFBERiBvcgorICAgRVBVQiBkb2N1bWVudHMgdGhhdCB1dGlsaXplIGRpZ2l0YWwgcmlnaHRzIG1hbmFnZW1lbnQgcHJvdG9jb2xzIG9yCisgICBzeXN0ZW1zIG90aGVyIHRoYW4gQWRvYmUgRFJNLgorCisgICAoZCkgQWRvYmUgRFJNIG11c3QgYmUgZW5hYmxlZCBpbiB0aGUgQ2hyb21lLVJlYWRlciBTb2Z0d2FyZSBmb3IgYWxsCisgICBBZG9iZSBEUk0gcHJvdGVjdGVkIFBERiBhbmQgRVBVQiBkb2N1bWVudHMuCisKKyAgIChlKSBUaGUgQ2hyb21lLVJlYWRlciBTb2Z0d2FyZSBtYXkgbm90LCBvdGhlciB0aGFuIGFzIGV4cGxpY2l0bHkKKyAgIHBlcm1pdHRlZCBieSB0aGUgdGVjaG5pY2FsIHNwZWNpZmljYXRpb25zLCBkaXNhYmxlIGFueSBjYXBhYmlsaXRpZXMKKyAgIHByb3ZpZGVkIGJ5IEFkb2JlIGluIHRoZSBBZG9iZSBTb2Z0d2FyZSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bywKKyAgIHN1cHBvcnQgZm9yIFBERiBhbmQgRVBVQiBmb3JtYXRzIGFuZCBBZG9iZSBEUk0uCisKKyAgIDIuIEVsZWN0cm9uaWMgVHJhbnNtaXNzaW9uLiBTdWJsaWNlbnNlZSBtYXkgYWxsb3cgdGhlIGRvd25sb2FkIG9mIHRoZQorICAgQWRvYmUgU29mdHdhcmUgZnJvbSBhIHdlYiBzaXRlLCB0aGUgSW50ZXJuZXQsIGFuIGludHJhbmV0LCBvciBzaW1pbGFyCisgICB0ZWNobm9sb2d5IChhbiwg4oCcRWxlY3Ryb25pYyBUcmFuc21pc3Npb25z4oCdKSBwcm92aWRlZCB0aGF0IFN1YmxpY2Vuc2VlCisgICBhZ3JlZXMgdGhhdCBhbnkgZGlzdHJpYnV0aW9ucyBvZiB0aGUgQWRvYmUgU29mdHdhcmUgYnkgU3VibGljZW5zZWUsCisgICBpbmNsdWRpbmcgdGhvc2Ugb24gQ0QtUk9NLCBEVkQtUk9NIG9yIG90aGVyIHN0b3JhZ2UgbWVkaWEgYW5kCisgICBFbGVjdHJvbmljIFRyYW5zbWlzc2lvbnMsIGlmIGV4cHJlc3NseSBwZXJtaXR0ZWQsIHNoYWxsIGJlIHN1YmplY3QgdG8KKyAgIHJlYXNvbmFibGUgc2VjdXJpdHkgbWVhc3VyZXMgdG8gcHJldmVudCB1bmF1dGhvcml6ZWQgdXNlLiBXaXRoIHJlbGF0aW9uCisgICB0byBFbGVjdHJvbmljIFRyYW5zbWlzc2lvbnMgYXBwcm92ZWQgaGVyZXVuZGVyLCBTdWJsaWNlbnNlZSBhZ3JlZXMgdG8KKyAgIGVtcGxveSBhbnkgcmVhc29uYWJsZSB1c2UgcmVzdHJpY3Rpb25zIHNldCBieSBBZG9iZSwgaW5jbHVkaW5nIHRob3NlCisgICByZWxhdGVkIHRvIHNlY3VyaXR5IGFuZC9vciB0aGUgcmVzdHJpY3Rpb24gb2YgZGlzdHJpYnV0aW9uIHRvIGVuZCB1c2VycworICAgb2YgdGhlIFN1YmxpY2Vuc2VlIFByb2R1Y3QuCisKKyAgIDMuIEVVTEEgYW5kIERpc3RyaWJ1dGlvbiBUZXJtcy4KKworICAgKGEpIFN1YmxpY2Vuc2VlIHNoYWxsIGVuc3VyZSB0aGF0IHRoZSBBZG9iZSBTb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCB0bworICAgZW5kIHVzZXJzIHVuZGVyIGFuIGVuZm9yY2VhYmxlIGVuZCB1c2VyIGxpY2Vuc2UgYWdyZWVtZW50LCBpbiBmYXZvciBvZgorICAgU3VibGljZW5zZWUgYW5kIGl0cyBzdXBwbGllcnMgY29udGFpbmluZyBhdCBsZWFzdCBlYWNoIG9mIHRoZSBmb2xsb3dpbmcKKyAgIG1pbmltdW0gdGVybXMgKHRoZSDigJxFbmQtVXNlciBMaWNlbnNl4oCdKTogKGkpIGEgcHJvaGliaXRpb24gYWdhaW5zdAorICAgZGlzdHJpYnV0aW9uIGFuZCBjb3B5aW5nLCAoaWkpIGEgcHJvaGliaXRpb24gYWdhaW5zdCBtb2RpZmljYXRpb25zIGFuZAorICAgZGVyaXZhdGl2ZSB3b3JrcywgKGlpaSkgYSBwcm9oaWJpdGlvbiBhZ2FpbnN0IGRlY29tcGlsaW5nLCByZXZlcnNlCisgICBlbmdpbmVlcmluZywgZGlzYXNzZW1ibGluZywgYW5kIG90aGVyd2lzZSByZWR1Y2luZyB0aGUgQWRvYmUgU29mdHdhcmUKKyAgIHRvIGEgaHVtYW4tcGVyY2VpdmFibGUgZm9ybSwgKGl2KSBhIHByb3Zpc2lvbiBpbmRpY2F0aW5nIG93bmVyc2hpcCBvZgorICAgU3VibGljZW5zZWUgUHJvZHVjdCAoYXMgZGVmaW5lZCBpbiBTZWN0aW9uIDgpIGJ5IFN1YmxpY2Vuc2VlIGFuZCBpdHMKKyAgIGxpY2Vuc29ycywgKHYpIGEgZGlzY2xhaW1lciBvZiBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCwgcHVuaXRpdmUsCisgICBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBhbmQgKHZpKSBvdGhlciBpbmR1c3RyeSBzdGFuZGFyZCBkaXNjbGFpbWVycworICAgYW5kIGxpbWl0YXRpb25zLCBpbmNsdWRpbmcsIGFzIGFwcGxpY2FibGU6IGEgZGlzY2xhaW1lciBvZiBhbGwKKyAgIGFwcGxpY2FibGUgc3RhdHV0b3J5IHdhcnJhbnRpZXMsIHRvIHRoZSBmdWxsIGV4dGVudCBhbGxvd2VkIGJ5IGxhdy4KKworICAgKGIpIFN1YmxpY2Vuc2VlIHNoYWxsIGVuc3VyZSB0aGF0IHRoZSBBZG9iZSBTb2Z0d2FyZSBpcyBkaXN0cmlidXRlZCB0bworICAgU3VibGljZW5zZWXigJlzIGRpc3RyaWJ1dG9ycyB1bmRlciBhbiBlbmZvcmNlYWJsZSBkaXN0cmlidXRpb24gbGljZW5zZQorICAgYWdyZWVtZW50LCBpbiBmYXZvciBvZiBTdWJsaWNlbnNlZSBhbmQgaXRzIHN1cHBsaWVycyBjb250YWluaW5nIHRlcm1zCisgICBhcyBwcm90ZWN0aXZlIG9mIEFkb2JlIGFzIHRoZSBBZG9iZSBUZXJtcy4KKworICAgNC4gT3BlbnNvdXJjZS4gU3VibGljZW5zZWUgd2lsbCBub3QgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBncmFudCwgb3IKKyAgIHB1cnBvcnQgdG8gZ3JhbnQsIHRvIGFueSB0aGlyZCBwYXJ0eSBhbnkgcmlnaHRzIG9yIGltbXVuaXRpZXMgdW5kZXIKKyAgIEFkb2Jl4oCZcyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb3IgcHJvcHJpZXRhcnkgcmlnaHRzIHRoYXQgd2lsbCBzdWJqZWN0CisgICBzdWNoIGludGVsbGVjdHVhbCBwcm9wZXJ0eSB0byBhbiBvcGVuIHNvdXJjZSBsaWNlbnNlIG9yIHNjaGVtZSBpbiB3aGljaAorICAgdGhlcmUgaXMgb3IgY291bGQgYmUgaW50ZXJwcmV0ZWQgdG8gYmUgYSByZXF1aXJlbWVudCB0aGF0IGFzIGEKKyAgIGNvbmRpdGlvbiBvZiB1c2UsIG1vZGlmaWNhdGlvbiBhbmQvb3IgZGlzdHJpYnV0aW9uLCB0aGUgQWRvYmUgU29mdHdhcmUKKyAgIGJlOiAoaSkgZGlzY2xvc2VkIG9yIGRpc3RyaWJ1dGVkIGluIHNvdXJjZSBjb2RlIGZvcm07IChpaSkgbGljZW5zZWQgZm9yCisgICB0aGUgcHVycG9zZSBvZiBtYWtpbmcgZGVyaXZhdGl2ZSB3b3Jrczsgb3IgKGlpaSkgcmVkaXN0cmlidXRhYmxlIGF0IG5vCisgICBjaGFyZ2UuIEZvciBjbGFyaWZpY2F0aW9uIHB1cnBvc2VzLCB0aGUgZm9yZWdvaW5nIHJlc3RyaWN0aW9uIGRvZXMgbm90CisgICBwcmVjbHVkZSBTdWJsaWNlbnNlZSBmcm9tIGRpc3RyaWJ1dGluZywgYW5kIFN1YmxpY2Vuc2VlIHdpbGwgZGlzdHJpYnV0ZQorICAgdGhlIEFkb2JlIFNvZnR3YXJlIGFzIGJ1bmRsZWQgd2l0aCB0aGUgR29vZ2xlIFNvZnR3YXJlLCB3aXRob3V0IGNoYXJnZS4KKworICAgNS4gQWRkaXRpb25hbCBUZXJtcy4gV2l0aCByZXNwZWN0IHRvIGFueSB1cGRhdGUsIHVwZ3JhZGUsIG5ldyB2ZXJzaW9ucworICAgb2YgdGhlIEFkb2JlIFNvZnR3YXJlIChjb2xsZWN0aXZlbHkg4oCcVXBncmFkZXPigJ0pIHByb3ZpZGVkIHRvCisgICBTdWJsaWNlbnNlcywgQWRvYmUgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJlcXVpcmUgYWRkaXRpb25hbCB0ZXJtcyBhbmQKKyAgIGNvbmRpdGlvbnMgYXBwbGljYWJsZSBzb2xlbHkgdG8gdGhlIFVwZ3JhZGUgYW5kIGZ1dHVyZSB2ZXJzaW9ucworICAgdGhlcmVvZiwgYW5kIHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgc3VjaCByZXN0cmljdGlvbnMgYXJlIGltcG9zZWQgYnkKKyAgIEFkb2JlIG9uIGFsbCBsaWNlbnNlZXMgb2Ygc3VjaCBVcGdyYWRlLiBJZiBTdWJsaWNlbnNlZSBkb2VzIG5vdCBhZ3JlZQorICAgdG8gc3VjaCBhZGRpdGlvbmFsIHRlcm1zIG9yIGNvbmRpdGlvbnMsIFN1YmxpY2Vuc2VlIHdpbGwgaGF2ZSBubworICAgbGljZW5zZSByaWdodHMgd2l0aCByZXNwZWN0IHRvIHN1Y2ggVXBncmFkZSwgYW5kIFN1YmxpY2Vuc2Vl4oCZcyBsaWNlbnNlCisgICByaWdodHMgd2l0aCByZXNwZWN0IHRvIHRoZSBBZG9iZSBTb2Z0d2FyZSB3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5CisgICBvbiB0aGUgOTB0aCBkYXkgZnJvbSB0aGUgZGF0ZSBzdWNoIGFkZGl0aW9uYWwgdGVybXMgYXJlIG1hZGUgYXZhaWxhYmxlCisgICB0byBTdWJsaWNlbnNlZS4KKworICAgNi4gUHJvcHJpZXRhcnkgUmlnaHRzIE5vdGljZXMuIFN1YmxpY2Vuc2VlIHNoYWxsIG5vdCwgYW5kIHNoYWxsIHJlcXVpcmUKKyAgIGl0cyBkaXN0cmlidXRvcnMgbm90IHRvLCBkZWxldGUgb3IgaW4gYW55IG1hbm5lciBhbHRlciB0aGUgY29weXJpZ2h0CisgICBub3RpY2VzLCB0cmFkZW1hcmtzLCBsb2dvcyBvciByZWxhdGVkIG5vdGljZXMsIG9yIG90aGVyIHByb3ByaWV0YXJ5CisgICByaWdodHMgbm90aWNlcyBvZiBBZG9iZSAoYW5kIGl0cyBsaWNlbnNvcnMsIGlmIGFueSkgYXBwZWFyaW5nIG9uIG9yCisgICB3aXRoaW4gdGhlIEFkb2JlIFNvZnR3YXJlIG9yIGFjY29tcGFueWluZyBtYXRlcmlhbHMuCisKKyAgIDcuIFRlY2huaWNhbCBSZXF1aXJlbWVudHMuIFN1YmxpY2Vuc2VlIGFuZCBpdHMgZGlzdHJpYnV0b3JzIG1heSBvbmx5CisgICBkaXN0cmlidXRlIEFkb2JlIFNvZnR3YXJlIGFuZC9vciBVcGdyYWRlIG9uIGRldmljZXMgdGhhdCAoaSkgbWVldCB0aGUKKyAgIHRlY2huaWNhbCBzcGVjaWZpY2F0aW9ucyBwb3N0ZWQgb24KKyAgIGh0dHA6Ly93d3cuYWRvYmUuY29tL21vYmlsZS9saWNlbnNlZXMsIChvciBhIHN1Y2Nlc3NvciB3ZWIgc2l0ZQorICAgdGhlcmV0byksIGFuZCAoaWkpIGhhcyBiZWVuIHZlcmlmaWVkIGJ5IEFkb2JlIGFzIHNldCBmb3J0aCBiZWxvdy4KKworICAgOC4gVmVyaWZpY2F0aW9uIGFuZCBVcGRhdGUuIFN1YmxpY2Vuc2VlIG11c3Qgc3VibWl0IHRvIEFkb2JlIGVhY2gKKyAgIFN1YmxpY2Vuc2VlIHByb2R1Y3QgKGFuZCBlYWNoIHZlcnNpb24gdGhlcmVvZikgY29udGFpbmluZyB0aGUgQWRvYmUKKyAgIFNvZnR3YXJlIGFuZC9vciBVcGdyYWRlICjigJxTdWJsaWNlbnNlZSBQcm9kdWN04oCdKSB0aGF0IGRvIG5vdCBtZWV0IHRoZQorICAgRGV2aWNlIFZlcmlmaWNhdGlvbiBleGVtcHRpb24gY3JpdGVyaWEgdG8gYmUgY29tbXVuaWNhdGVkIGJ5IEdvb2dsZSwKKyAgIGZvciBBZG9iZSB0byB2ZXJpZnkuIFN1YmxpY2Vuc2VlIHNoYWxsIHBheSBmb3IgZWFjaCBzdWJtaXNzaW9uIG1hZGUgYnkKKyAgIFN1YmxpY2Vuc2VlIGJ5IHByb2N1cmluZyB2ZXJpZmljYXRpb24gcGFja2FnZXMgYXQgQWRvYmXigJlzIHRoZW4tY3VycmVudAorICAgdGVybXMgc2V0IGZvcnRoIGF0IGh0dHA6Ly9mbGFzaG1vYmlsZS5hZG9iZS5jb20vLiBTdWJsaWNlbnNlZSBQcm9kdWN0CisgICB0aGF0IGhhcyBub3QgcGFzc2VkIHZlcmlmaWNhdGlvbiBtYXkgbm90IGJlIGRpc3RyaWJ1dGVkLiBWZXJpZmljYXRpb24KKyAgIHdpbGwgYmUgYWNjb21wbGlzaGVkIGluIGFjY29yZGFuY2Ugd2l0aCBBZG9iZeKAmXMgdGhlbi1jdXJyZW50IHByb2Nlc3MKKyAgIGRlc2NyaWJlZCBhdCBodHRwOi8vZmxhc2htb2JpbGUuYWRvYmUuY29tLyAo4oCcVmVyaWZpY2F0aW9u4oCdKS4KKworICAgOS4gUHJvZmlsZXMgYW5kIERldmljZSBDZW50cmFsLiBTdWJsaWNlbnNlZSB3aWxsIGJlIHByb21wdGVkIHRvIGVudGVyCisgICBjZXJ0YWluIHByb2ZpbGUgaW5mb3JtYXRpb24gYWJvdXQgdGhlIFN1YmxpY2Vuc2VlIFByb2R1Y3RzIGVpdGhlciBhcworICAgcGFydCBvZiB0aGUgVmVyaWZpY2F0aW9uIHByb2Nlc3Mgb3Igc29tZSBvdGhlciBtZXRob2QsIGFuZCBTdWJsaWNlbnNlZQorICAgd2lsbCBwcm92aWRlIHN1Y2ggaW5mb3JtYXRpb24sIHRvIEFkb2JlLiBBZG9iZSBtYXkgKGkpIHVzZSBzdWNoIHByb2ZpbGUKKyAgIGluZm9ybWF0aW9uIGFzIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIHZlcmlmeSB0aGUgU3VibGljZW5zZWUgUHJvZHVjdAorICAgKGlmIHN1Y2ggcHJvZHVjdCBpcyBzdWJqZWN0IHRvIFZlcmlmaWNhdGlvbiksIGFuZCAoaWkpIGRpc3BsYXkgc3VjaAorICAgcHJvZmlsZSBpbmZvcm1hdGlvbiBpbiDigJxBZG9iZSBEZXZpY2UgSW50ZWxsaWdlbmNlIHN5c3RlbSzigJ0gbG9jYXRlZCBhdAorICAgaHR0cHM6Ly9kZXZpY2VzLmFkb2JlLmNvbS9wYXJ0bmVycG9ydGFsLywgYW5kIG1hZGUgYXZhaWxhYmxlIHRocm91Z2gKKyAgIEFkb2Jl4oCZcyBhdXRob3JpbmcgYW5kIGRldmVsb3BtZW50IHRvb2xzIGFuZCBzZXJ2aWNlcyB0byBlbmFibGUKKyAgIGRldmVsb3BlcnMgYW5kIGVuZCB1c2VycyB0byBzZWUgaG93IGNvbnRlbnQgb3IgYXBwbGljYXRpb25zIGFyZQorICAgZGlzcGxheWVkIGluIFN1YmxpY2Vuc2VlIFByb2R1Y3RzIChlLmcuIGhvdyB2aWRlbyBpbWFnZXMgYXBwZWFyIGluCisgICBjZXJ0YWluIHBob25lcykuCisKKyAgIDEwLiBFeHBvcnQuIFN1YmxpY2Vuc2VlIGFja25vd2xlZGdlcyB0aGF0IHRoZSBsYXdzIGFuZCByZWd1bGF0aW9ucyBvZgorICAgdGhlIFVuaXRlZCBTdGF0ZXMgcmVzdHJpY3QgdGhlIGV4cG9ydCBhbmQgcmUtZXhwb3J0IG9mIGNvbW1vZGl0aWVzIGFuZAorICAgdGVjaG5pY2FsIGRhdGEgb2YgVW5pdGVkIFN0YXRlcyBvcmlnaW4sIHdoaWNoIG1heSBpbmNsdWRlIHRoZSBBZG9iZQorICAgU29mdHdhcmUuIFN1YmxpY2Vuc2VlIGFncmVlcyB0aGF0IGl0IHdpbGwgbm90IGV4cG9ydCBvciByZS1leHBvcnQgdGhlCisgICBBZG9iZSBTb2Z0d2FyZSwgd2l0aG91dCB0aGUgYXBwcm9wcmlhdGUgVW5pdGVkIFN0YXRlcyBhbmQgZm9yZWlnbgorICAgZ292ZXJubWVudGFsIGNsZWFyYW5jZXMsIGlmIGFueS4KKworICAgMTEuIFRlY2hub2xvZ3kgUGFzcy10aHJvdWdoIFRlcm1zLgorCisgICAoYSkgRXhjZXB0IHB1cnN1YW50IHRvIGFwcGxpY2FibGUgcGVybWlzc2lvbnMgb3IgYWdyZWVtZW50cyB0aGVyZWZvciwKKyAgIGZyb20gb3Igd2l0aCB0aGUgYXBwbGljYWJsZSBwYXJ0aWVzLCBTdWJsaWNlbnNlZXMgc2hhbGwgbm90IHVzZSBhbmQKKyAgIHNoYWxsIG5vdCBhbGxvdyB0aGUgdXNlIG9mLCB0aGUgQWRvYmUgU29mdHdhcmUgZm9yIHRoZSBlbmNvZGluZyBvcgorICAgZGVjb2Rpbmcgb2YgbXAzIGF1ZGlvIG9ubHkgKC5tcDMpIGRhdGEgb24gYW55IG5vbi1wYyBkZXZpY2UgKGUuZy4sCisgICBtb2JpbGUgcGhvbmUgb3Igc2V0LXRvcCBib3gpLCBub3IgbWF5IHRoZSBtcDMgZW5jb2RlcnMgb3IgZGVjb2RlcnMKKyAgIGNvbnRhaW5lZCBpbiB0aGUgQWRvYmUgU29mdHdhcmUgYmUgdXNlZCBvciBhY2Nlc3NlZCBieSBhbnkgcHJvZHVjdAorICAgb3RoZXIgdGhhbiB0aGUgQWRvYmUgU29mdHdhcmUuIFRoZSBBZG9iZSBTb2Z0d2FyZSBtYXkgYmUgdXNlZCBmb3IgdGhlCisgICBlbmNvZGluZyBvciBkZWNvZGluZyBvZiBNUDMgZGF0YSBjb250YWluZWQgd2l0aGluIGEgc3dmIG9yIGZsdiBmaWxlLAorICAgd2hpY2ggY29udGFpbnMgdmlkZW8sIHBpY3R1cmUgb3Igb3RoZXIgZGF0YS4gU3VibGljZW5zZWUgc2hhbGwKKyAgIGFja25vd2xlZGdlIHRoYXQgdXNlIG9mIHRoZSBBZG9iZSBTb2Z0d2FyZSBmb3Igbm9uLVBDIGRldmljZXMsIGFzCisgICBkZXNjcmliZWQgaW4gdGhlIHByb2hpYml0aW9ucyBpbiB0aGlzIHNlY3Rpb24sIG1heSByZXF1aXJlIHRoZSBwYXltZW50CisgICBvZiBsaWNlbnNpbmcgcm95YWx0aWVzIG9yIG90aGVyIGFtb3VudHMgdG8gdGhpcmQgcGFydGllcyB3aG8gbWF5IGhvbGQKKyAgIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgcmVsYXRlZCB0byB0aGUgTVAzIHRlY2hub2xvZ3kgYW5kIHRoYXQKKyAgIEFkb2JlIG5vciBTdWJsaWNlbnNlZSBoYXMgbm90IHBhaWQgYW55IHJveWFsdGllcyBvciBvdGhlciBhbW91bnRzIG9uCisgICBhY2NvdW50IG9mIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgZm9yIHN1Y2ggdXNlLiBJZgorICAgU3VibGljZW5zZWUgcmVxdWlyZXMgYW4gTVAzIGVuY29kZXIgb3IgZGVjb2RlciBmb3Igc3VjaCB1c2UsCisgICBTdWJsaWNlbnNlZSBpcyByZXNwb25zaWJsZSBmb3Igb2J0YWluaW5nIHRoZSBuZWNlc3NhcnkgaW50ZWxsZWN0dWFsCisgICBwcm9wZXJ0eSBsaWNlbnNlLCBpbmNsdWRpbmcgYW55IGFwcGxpY2FibGUgcGF0ZW50IHJpZ2h0cy4KKworICAgKGIpIFN1YmxpY2Vuc2VlIHdpbGwgbm90IHVzZSwgY29weSwgcmVwcm9kdWNlIGFuZCBtb2RpZnkgKGkpIHRoZSBPbjIKKyAgIHNvdXJjZSBjb2RlIChwcm92aWRlZCBoZXJldW5kZXIgYXMgYSBjb21wb25lbnQgb2YgdGhlIFNvdXJjZSBDb2RlKSBhcworICAgbmVjZXNzYXJ5IHRvIGVuYWJsZSB0aGUgQWRvYmUgU29mdHdhcmUgdG8gZGVjb2RlIHZpZGVvIGluIHRoZSBGbGFzaAorICAgdmlkZW8gZmlsZSBmb3JtYXQgKC5mbHYgb3IgLmY0diksIGFuZCAoaWkpIHRoZSBTb3JlbnNvbiBTcGFyayBzb3VyY2UKKyAgIGNvZGUgKHByb3ZpZGVkIGhlcmV1bmRlciBhcyBhIGNvbXBvbmVudCBvZiB0aGUgU291cmNlIENvZGUpIGZvciB0aGUKKyAgIGxpbWl0ZWQgcHVycG9zZSBvZiBtYWtpbmcgYnVnIGZpeGVzIGFuZCBwZXJmb3JtYW5jZSBlbmhhbmNlbWVudHMgdG8gdGhlCisgICBBZG9iZSBTb2Z0d2FyZS4gQWxsIGNvZGVjcyBwcm92aWRlZCB3aXRoIHRoZSBBZG9iZSBTb2Z0d2FyZSBtYXkgb25seSBiZQorICAgdXNlZCBhbmQgZGlzdHJpYnV0ZWQgYXMgYW4gaW50ZWdyYXRlZCBwYXJ0IG9mIHRoZSBBZG9iZSBTb2Z0d2FyZSBhbmQKKyAgIG1heSBub3QgYmUgYWNjZXNzZWQgYnkgYW55IG90aGVyIGFwcGxpY2F0aW9uLCBpbmNsdWRpbmcgb3RoZXIgR29vZ2xlCisgICBhcHBsaWNhdGlvbnMuCisKKyAgIChjKSBUaGUgU291cmNlIENvZGUgbWF5IGJlIHByb3ZpZGVkIHdpdGggYW4gQUFDIGNvZGVjIGFuZC9vciBIRS1BQUMKKyAgIGNvZGVjICjigJx0aGUgQUFDIENvZGVj4oCdKS4gVXNlIG9mIHRoZSBBQUMgQ29kZWMgaXMgY29uZGl0aW9uZWQgb24KKyAgIFN1YmxpY2Vuc2VlIG9idGFpbmluZyBhIHByb3BlciBwYXRlbnQgbGljZW5zZSBjb3ZlcmluZyBuZWNlc3NhcnkKKyAgIHBhdGVudHMgYXMgcHJvdmlkZWQgYnkgVklBIExpY2Vuc2luZywgZm9yIGVuZCBwcm9kdWN0cyBvbiBvciBpbiB3aGljaAorICAgdGhlIEFBQyBDb2RlYyB3aWxsIGJlIHVzZWQuIFN1YmxpY2Vuc2VlIGFja25vd2xlZGdlcyBhbmQgYWdyZWVzIHRoYXQKKyAgIEFkb2JlIGlzIG5vdCBwcm92aWRpbmcgYSBwYXRlbnQgbGljZW5zZSBmb3IgYW4gQUFDIENvZGVjIHVuZGVyIHRoaXMKKyAgIEFncmVlbWVudCB0byBTdWJsaWNlbnNlZSBvciBpdHMgc3VibGljZW5zZWVzLgorCisgICAoZCkgVEhFIFNPVVJDRSBDT0RFIE1BWSBDT05UQUlOIENPREUgTElDRU5TRUQgVU5ERVIgVEhFIEFWQyBQQVRFTlQKKyAgIFBPUlRGT0xJTyBMSUNFTlNFIEZPUiBUSEUgUEVSU09OQUwgTk9OLUNPTU1FUkNJQUwgVVNFIE9GIEEgQ09OU1VNRVIgVE8KKyAgIChpKSBFTkNPREUgVklERU8gSU4gQ09NUExJQU5DRSBXSVRIIFRIRSBBVkMgU1RBTkRBUkQgKCJBVkMgVklERU8iKQorICAgQU5EL09SIChpaSkgREVDT0RFIEFWQyBWSURFTyBUSEFUIFdBUyBFTkNPREVEIEJZIEEgQ09OU1VNRVIgRU5HQUdFRCBJTgorICAgQSBQRVJTT05BTCBOT04tQ09NTUVSQ0lBTCBBQ1RJVklUWSBBTkQvT1IgV0FTIE9CVEFJTkVEIEZST00gQSBWSURFTworICAgUFJPVklERVIgTElDRU5TRUQgVE8gUFJPVklERSBBVkMgVklERU8uIE5PIExJQ0VOU0UgSVMgR1JBTlRFRCBPUiBXSUxMCisgICBCRSBJTVBMSUVEIEZPUiBBTlkgT1RIRVIgVVNFLiBBRERJVElPTkFMIElORk9STUFUSU9OIE1BWSBCRSBPQlRBSU5FRAorICAgRlJPTSBNUEVHIExBLCBMLkwuQy4gU2VlIGh0dHA6Ly93d3cubXBlZ2xhLmNvbQorCisgICAxMi4gVXBkYXRlLiBTdWJsaWNlbnNlZSB3aWxsIG5vdCBjaXJjdW12ZW50IEdvb2dsZeKAmXMgb3IgQWRvYmXigJlzIGVmZm9ydHMKKyAgIHRvIHVwZGF0ZSB0aGUgQWRvYmUgU29mdHdhcmUgaW4gYWxsIFN1YmxpY2Vuc2Vl4oCZcyBwcm9kdWN0cworICAgaW5jb3Jwb3JhdGluZyB0aGUgQWRvYmUgU29mdHdhcmUgYXMgYnVuZGxlZCB3aXRoIHRoZSBHb29nbGUgU29mdHdhcmUKKyAgICjigJxTdWJsaWNlbnNlZSBQcm9kdWN0c+KAnSkuCisKKyAgIDEzLiBBdHRyaWJ1dGlvbiBhbmQgUHJvcHJpZXRhcnkgTm90aWNlcy4gU3VibGljZW5zZWUgd2lsbCBsaXN0IHRoZQorICAgQWRvYmUgU29mdHdhcmUgaW4gcHVibGljbHkgYXZhaWxhYmxlIFN1YmxpY2Vuc2VlIFByb2R1Y3Qgc3BlY2lmaWNhdGlvbnMKKyAgIGFuZCBpbmNsdWRlIGFwcHJvcHJpYXRlIEFkb2JlIFNvZnR3YXJlIGJyYW5kaW5nIChzcGVjaWZpY2FsbHkgZXhjbHVkaW5nCisgICB0aGUgQWRvYmUgY29ycG9yYXRlIGxvZ28pIG9uIHRoZSBTdWJsaWNlbnNlZSBQcm9kdWN0IHBhY2thZ2luZyBvcgorICAgbWFya2V0aW5nIG1hdGVyaWFscyBpbiBhIG1hbm5lciBjb25zaXN0ZW50IHdpdGggYnJhbmRpbmcgb2Ygb3RoZXIgdGhpcmQKKyAgIHBhcnR5IHByb2R1Y3RzIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFN1YmxpY2Vuc2VlIFByb2R1Y3QuCisKKyAgIDE0LiBObyBXYXJyYW50eS4gVEhFIEFET0JFIFNPRlRXQVJFIElTIE1BREUgQVZBSUxBQkxFIFRPIFNVQkxJQ0VOU0VFCisgICBGT1IgVVNFIEFORCBSRVBST0RVQ1RJT04g4oCcQVMgSVPigJ0gQU5EIEFET0JFIE1BS0VTIE5PIFdBUlJBTlRZIEFTIFRPIElUUworICAgVVNFIE9SIFBFUkZPUk1BTkNFLiBBRE9CRSBBTkQgSVRTIFNVUFBMSUVSUyBETyBOT1QgQU5EIENBTk5PVCBXQVJSQU5UCisgICBUSEUgUEVSRk9STUFOQ0UgT1IgUkVTVUxUUyBPQlRBSU5FRCBCWSBVU0lORyBUSEUgQURPQkUgU09GVFdBUkUuIEVYQ0VQVAorICAgRk9SIEFOWSBXQVJSQU5UWSwgQ09ORElUSU9OLCBSRVBSRVNFTlRBVElPTiBPUiBURVJNIFRPIFRIRSBFWFRFTlQgVE8KKyAgIFdISUNIIFRIRSBTQU1FIENBTk5PVCBPUiBNQVkgTk9UIEJFIEVYQ0xVREVEIE9SIExJTUlURUQgQlkgTEFXCisgICBBUFBMSUNBQkxFIFRPIFNVQkxJQ0VOU0VFSU4gU1VCTElDRU5TRUXigJlTIEpVUklTRElDVElPTiwgQURPQkUgQU5EIElUUworICAgU1VQUExJRVJTIE1BS0UgTk8gV0FSUkFOVElFUywgQ09ORElUSU9OUywgUkVQUkVTRU5UQVRJT05TLCBPUiBURVJNUworICAgKEVYUFJFU1MgT1IgSU1QTElFRCBXSEVUSEVSIEJZIFNUQVRVVEUsIENPTU1PTiBMQVcsIENVU1RPTSwgVVNBR0UgT1IKKyAgIE9USEVSV0lTRSkgQVMgVE8gQU5ZIE1BVFRFUiBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OCisgICBOT05JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkgUklHSFRTLCBNRVJDSEFOVEFCSUxJVFksIElOVEVHUkFUSU9OLAorICAgU0FUSVNGQUNUT1JZIFFVQUxJVFksIE9SIEZJVE5FU1MgRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgICBTVUJMSUNFTlNFRSBBR1JFRVMgVEhBVCBTVUJMSUNFTlNFRSBTSEFMTCBOT1QgTUFLRSBBTlkgV0FSUkFOVFksCisgICBFWFBSRVNTIE9SIElNUExJRUQsIE9OIEJFSEFMRiBPRiBBRE9CRS4KKworICAgMTUuIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBJTiBOTyBFVkVOVCBXSUxMIEFET0JFIE9SIElUUyBTVVBQTElFUlMgQkUKKyAgIExJQUJMRSBUTyBTVUJMSUNFTlNFRSBGT1IgQU5ZIERBTUFHRVMsIENMQUlNUyBPUiBDT1NUUyBXSEFUU09FVkVSIE9SCisgICBBTlkgQ09OU0VRVUVOVElBTCwgSU5ESVJFQ1QsIE9SIElOQ0lERU5UQUwgREFNQUdFUywgT1IgQU5ZIExPU1QgUFJPRklUUworICAgT1IgTE9TVCBTQVZJTkdTLCBFVkVOIElGIEFOIEFET0JFIFJFUFJFU0VOVEFUSVZFIEhBUyBCRUVOIEFEVklTRUQgT0YKKyAgIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIExPU1MsIERBTUFHRVMsIENMQUlNUyBPUiBDT1NUUyBPUiBGT1IgQU5ZIENMQUlNCisgICBCWSBBTlkgVEhJUkQgUEFSVFkuIFRIRSBGT1JFR09JTkcgTElNSVRBVElPTlMgQU5EIEVYQ0xVU0lPTlMgQVBQTFkgVE8KKyAgIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXIElOIFNVQkxJQ0VOU0VF4oCZUyBKVVJJU0RJQ1RJT04uCisgICBBRE9CReKAmVMgQUdHUkVHQVRFIExJQUJJTElUWSBBTkQgVEhBVCBPRiBJVFMgU1VQUExJRVJTIFVOREVSIE9SIElOCisgICBDT05ORUNUSU9OIFdJVEggVEhJUyBBR1JFRU1FTlQgU0hBTEwgQkUgTElNSVRFRCBUTyBPTkUgVEhPVVNBTkQgRE9MTEFSUworICAgKFVTJDEsMDAwKS4gTm90aGluZyBjb250YWluZWQgaW4gdGhpcyBBZ3JlZW1lbnQgbGltaXRzIEFkb2Jl4oCZcworICAgbGlhYmlsaXR5IHRvIFN1YmxpY2Vuc2VlIGluIHRoZSBldmVudCBvZiBkZWF0aCBvciBwZXJzb25hbCBpbmp1cnkKKyAgIHJlc3VsdGluZyBmcm9tIEFkb2Jl4oCZcyBuZWdsaWdlbmNlIG9yIGZvciB0aGUgdG9ydCBvZiBkZWNlaXQgKGZyYXVkKS4KKyAgIEFkb2JlIGlzIGFjdGluZyBvbiBiZWhhbGYgb2YgaXRzIHN1cHBsaWVycyBmb3IgdGhlIHB1cnBvc2Ugb2YKKyAgIGRpc2NsYWltaW5nLCBleGNsdWRpbmcgYW5kL29yIGxpbWl0aW5nIG9ibGlnYXRpb25zLCB3YXJyYW50aWVzIGFuZAorICAgbGlhYmlsaXR5IGFzIHByb3ZpZGVkIGluIHRoaXMgQWdyZWVtZW50LCBidXQgaW4gbm8gb3RoZXIgcmVzcGVjdHMgYW5kCisgICBmb3Igbm8gb3RoZXIgcHVycG9zZS4KKworICAgMTYuIENvbnRlbnQgUHJvdGVjdGlvbiBUZXJtcworCisgICAoYSkgRGVmaW5pdGlvbnMuCisKKyAgIOKAnENvbXBsaWFuY2UgYW5kIFJvYnVzdG5lc3MgUnVsZXPigJ0gbWVhbnMgdGhlIGRvY3VtZW50IHNldHRpbmcgZm9ydGgKKyAgIGNvbXBsaWFuY2UgYW5kIHJvYnVzdG5lc3MgcnVsZXMgZm9yIHRoZSBBZG9iZSBTb2Z0d2FyZSBsb2NhdGVkIGF0CisgICBodHRwOi8vd3d3LmFkb2JlLmNvbS9tb2JpbGUvbGljZW5zZWVzLCBvciBhIHN1Y2Nlc3NvciB3ZWIgc2l0ZSB0aGVyZXRvLgorCisgICDigJxDb250ZW50IFByb3RlY3Rpb24gRnVuY3Rpb25z4oCdIG1lYW5zIHRob3NlIGFzcGVjdHMgb2YgdGhlIEFkb2JlCisgICBTb2Z0d2FyZSB0aGF0IGFyZSBkZXNpZ25lZCB0byBlbnN1cmUgY29tcGxpYW5jZSB3aXRoIHRoZSBDb21wbGlhbmNlIGFuZAorICAgUm9idXN0bmVzcyBSdWxlcywgYW5kIHRvIHByZXZlbnQgcGxheWJhY2ssIGNvcHlpbmcsIG1vZGlmaWNhdGlvbiwKKyAgIHJlZGlzdHJpYnV0aW9uIG9yIG90aGVyIGFjdGlvbnMgd2l0aCByZXNwZWN0IHRvIGRpZ2l0YWwgY29udGVudAorICAgZGlzdHJpYnV0ZWQgZm9yIGNvbnN1bXB0aW9uIGJ5IHVzZXJzIG9mIHRoZSBBZG9iZSBTb2Z0d2FyZSB3aGVuIHN1Y2gKKyAgIGFjdGlvbnMgYXJlIG5vdCBhdXRob3JpemVkIGJ5IHRoZSBvd25lcnMgb2Ygc3VjaCBkaWdpdGFsIGNvbnRlbnQgb3IgaXRzCisgICBsaWNlbnNlZCBkaXN0cmlidXRvcnMuCisKKyAgIOKAnENvbnRlbnQgUHJvdGVjdGlvbiBDb2Rl4oCdIG1lYW5zIGNvZGUgd2l0aGluIGNlcnRhaW4gZGVzaWduYXRlZCB2ZXJzaW9ucworICAgb2YgdGhlIEFkb2JlIFNvZnR3YXJlIHRoYXQgZW5hYmxlcyBjZXJ0YWluIENvbnRlbnQgUHJvdGVjdGlvbgorICAgRnVuY3Rpb25zLgorCisgICDigJxLZXnigJ0gbWVhbnMgYSBjcnlwdG9ncmFwaGljIHZhbHVlIGNvbnRhaW5lZCBpbiB0aGUgQWRvYmUgU29mdHdhcmUgZm9yCisgICB1c2UgaW4gZGVjcnlwdGluZyBkaWdpdGFsIGNvbnRlbnQuCisKKyAgIChiKSBMaWNlbnNlIFJlc3RyaWN0aW9ucy4gU3VibGljZW5zZWXigJlzIHJpZ2h0IHRvIGV4ZXJjaXNlIHRoZSBsaWNlbnNlcworICAgd2l0aCByZXNwZWN0IHRvIHRoZSBBZG9iZSBTb2Z0d2FyZSBpcyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcKKyAgIGFkZGl0aW9uYWwgcmVzdHJpY3Rpb25zIGFuZCBvYmxpZ2F0aW9ucy4gU3VibGljZW5zZWUgd2lsbCBlbnN1cmUgdGhhdAorICAgU3VibGljZW5zZWXigJlzIGN1c3RvbWVycyBjb21wbHkgd2l0aCB0aGVzZSByZXN0cmljdGlvbnMgYW5kIG9ibGlnYXRpb25zCisgICB0byB0aGUgc2FtZSBleHRlbnQgaW1wb3NlZCBvbiBTdWJsaWNlbnNlZSB3aXRoIHJlc3BlY3QgdG8gdGhlIEFkb2JlCisgICBTb2Z0d2FyZTsgYW55IGZhaWx1cmUgYnkgU3VibGljZW5zZWXigJlzIGN1c3RvbWVycyB0byBjb21wbHkgd2l0aCB0aGVzZQorICAgYWRkaXRpb25hbCByZXN0cmljdGlvbnMgYW5kIG9ibGlnYXRpb25zIHNoYWxsIGJlIHRyZWF0ZWQgYXMgYSBtYXRlcmlhbAorICAgYnJlYWNoIGJ5IFN1YmxpY2Vuc2VlLgorCisgICBiLjEuIFN1YmxpY2Vuc2VlIGFuZCBjdXN0b21lcnMgbWF5IG9ubHkgZGlzdHJpYnV0ZSB0aGUgQWRvYmUgU29mdHdhcmUKKyAgIHRoYXQgbWVldHMgdGhlIFJvYnVzdG5lc3MgYW5kIENvbXBsaWFuY2UgUnVsZXMgYXMgc28gY29uZmlybWVkIGJ5CisgICBTdWJsaWNlbnNlZSBkdXJpbmcgdGhlIHZlcmlmaWNhdGlvbiBwcm9jZXNzIGRlc2NyaWJlZCBhYm92ZSBpbiB0aGUKKyAgIEFkb2JlIFRlcm1zLgorCisgICBiLjIuIFN1YmxpY2Vuc2VlIHNoYWxsIG5vdCAoaSkgY2lyY3VtdmVudCB0aGUgQ29udGVudCBQcm90ZWN0aW9uCisgICBGdW5jdGlvbnMgb2YgZWl0aGVyIHRoZSBBZG9iZSBTb2Z0d2FyZSBvciBhbnkgcmVsYXRlZCBBZG9iZSBTb2Z0d2FyZQorICAgdGhhdCBpcyB1c2VkIHRvIGVuY3J5cHQgb3IgZGVjcnlwdCBkaWdpdGFsIGNvbnRlbnQgZm9yIGF1dGhvcml6ZWQKKyAgIGNvbnN1bXB0aW9uIGJ5IHVzZXJzIG9mIHRoZSBBZG9iZSBTb2Z0d2FyZSwgb3IgKGlpKSBkZXZlbG9wIG9yCisgICBkaXN0cmlidXRlIHByb2R1Y3RzIHRoYXQgYXJlIGRlc2lnbmVkIHRvIGNpcmN1bXZlbnQgdGhlIENvbnRlbnQKKyAgIFByb3RlY3Rpb24gRnVuY3Rpb25zIG9mIGVpdGhlciB0aGUgQWRvYmUgU29mdHdhcmUgb3IgYW55IEFkb2JlIFNvZnR3YXJlCisgICB0aGF0IGlzIHVzZWQgdG8gZW5jcnlwdCBvciBkZWNyeXB0IGRpZ2l0YWwgY29udGVudCBmb3IgYXV0aG9yaXplZAorICAgY29uc3VtcHRpb24gYnkgdXNlcnMgb2YgdGhlIEFkb2JlIFNvZnR3YXJlLgorCisgICAoYykgVGhlIEtleXMgYXJlIGhlcmVieSBkZXNpZ25hdGVkIGFzIEFkb2Jl4oCZcyBDb25maWRlbnRpYWwgSW5mb3JtYXRpb24sCisgICBhbmQgU3VibGljZW5zZWUgd2lsbCwgd2l0aCByZXNwZWN0IHRvIHRoZSBLZXlzLCBhZGhlcmUgdG8gQWRvYmXigJlzCisgICBTb3VyY2UgQ29kZSBIYW5kbGluZyBQcm9jZWR1cmUgKHRvIGJlIHByb3ZpZGVkIGJ5IEFkb2JlIHVwb24gcmVxdWVzdCkuCisKKyAgIChkKSBJbmp1bmN0aXZlIFJlbGllZi4gU3VibGljZW5zZWUgYWdyZWVzIHRoYXQgYSBicmVhY2ggb2YgdGhpcworICAgQWdyZWVtZW50IG1heSBjb21wcm9taXNlIHRoZSBDb250ZW50IFByb3RlY3Rpb24gRnVuY3Rpb25zIG9mIHRoZSBBZG9iZQorICAgU29mdHdhcmUgYW5kIG1heSBjYXVzZSB1bmlxdWUgYW5kIGxhc3RpbmcgaGFybSB0byB0aGUgaW50ZXJlc3RzIG9mCisgICBBZG9iZSBhbmQgb3duZXJzIG9mIGRpZ2l0YWwgY29udGVudCB0aGF0IHJlbHkgb24gc3VjaCBDb250ZW50CisgICBQcm90ZWN0aW9uIEZ1bmN0aW9ucywgYW5kIHRoYXQgbW9uZXRhcnkgZGFtYWdlcyBtYXkgYmUgaW5hZGVxdWF0ZSB0bworICAgY29tcGVuc2F0ZSBmdWxseSBmb3Igc3VjaCBoYXJtLiBUaGVyZWZvcmUsIFN1YmxpY2Vuc2VlIGZ1cnRoZXIgYWdyZWVzCisgICB0aGF0IEFkb2JlIG1heSBiZSBlbnRpdGxlZCB0byBzZWVrIGluanVuY3RpdmUgcmVsaWVmIHRvIHByZXZlbnQgb3IKKyAgIGxpbWl0IHRoZSBoYXJtIGNhdXNlZCBieSBhbnkgc3VjaCBicmVhY2gsIGluIGFkZGl0aW9uIHRvIG1vbmV0YXJ5CisgICBkYW1hZ2VzLgorCisgICAxNy4gSW50ZW5kZWQgVGhpcmQtcGFydHkgQmVuZWZpY2lhcnkuIEFkb2JlIFN5c3RlbXMgSW5jb3Jwb3JhdGVkIGFuZAorICAgQWRvYmUgU29mdHdhcmUgSXJlbGFuZCBMaW1pdGVkIGFyZSB0aGUgaW50ZW5kZWQgdGhpcmQtcGFydHkKKyAgIGJlbmVmaWNpYXJpZXMgb2YgR29vZ2xl4oCZcyBhZ3JlZW1lbnQgd2l0aCBTdWJsaWNlbnNlZSB3aXRoIHJlc3BlY3QgdG8KKyAgIHRoZSBBZG9iZSBTb2Z0d2FyZSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bywgdGhlIEFkb2JlIFRlcm1zLgorICAgU3VibGljZW5zZWUgYWdyZWVzLCBub3R3aXRoc3RhbmRpbmcgYW55dGhpbmcgdG8gdGhlIGNvbnRyYXJ5IGluIGl0cworICAgYWdyZWVtZW50IHdpdGggR29vZ2xlLCB0aGF0IEdvb2dsZSBtYXkgZGlzY2xvc2UgU3VibGljZW5zZWXigJlzIGlkZW50aXR5CisgICB0byBBZG9iZSBhbmQgY2VydGlmeSBpbiB3cml0aW5nIHRoYXQgU3VibGljZW5zZWUgaGFzIGVudGVyZWQgaW50byBhCisgICBsaWNlbnNlIGFncmVlbWVudCB3aXRoIEdvb2dsZSB3aGljaCBpbmNsdWRlcyB0aGUgQWRvYmUgVGVybXMuCisgICBTdWJsaWNlbnNlZSBtdXN0IGhhdmUgYW4gYWdyZWVtZW50IHdpdGggZWFjaCBvZiBpdHMgbGljZW5zZWVzLCBhbmQgaWYKKyAgIHN1Y2ggbGljZW5zZWVzIGFyZSBhbGxvd2VkIHRvIHJlZGlzdHJpYnV0ZSB0aGUgQWRvYmUgU29mdHdhcmUsIHN1Y2gKKyAgIGFncmVlbWVudCB3aWxsIGluY2x1ZGUgdGhlIEFkb2JlIFRlcm1zLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvZ29vZ2xlLXBpY2FzYSBiL2xpY2Vuc2VzL2dvb2dsZS1waWNhc2EKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY1NGM5NwotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL2dvb2dsZS1waWNhc2EKQEAgLTAsMCArMSw3MSBAQAorVGhhbmsgeW91IGZvciB0cnlpbmcgb3V0IHRoZSBQaWNhc2Egc29mdHdhcmUhIEJ5IHVzaW5nIHRoaXMgc29mdHdhcmUsIGluY2x1ZGluZyBjZXJ0YWluIHRoaXJkIHBhcnR5IHNvZnR3YXJlIG1hZGUgYXZhaWxhYmxlIGluIGNvbmp1bmN0aW9uIHdpdGggdGhpcyBzb2Z0d2FyZSBidXQgbm90IGluY2x1ZGluZyBzb2Z0d2FyZSBwcm92aWRlZCBpbiBzb3VyY2UgZm9ybSBhbmQgZXhwcmVzc2x5IGxpY2Vuc2VkIHVuZGVyIG90aGVyIHRlcm1zIGFzIHNldCBmb3J0aCBhdCBodHRwOi8vY29kZS5nb29nbGUuY29tLCAoIlBpY2FzYSBTb2Z0d2FyZSIpLCB5b3UgYWdyZWUgdG8gYWNjZXB0IGEgbGljZW5zZSB1bmRlciBhbmQgYmUgYm91bmQgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucyAgb2YgdGhpcyBhZ3JlZW1lbnQgKHRoZSAiQWdyZWVtZW50Iikgd2l0aCBQaWNhc2EgTExDIGFuZCBHb29nbGUgSW5jLiAoY29sbGVjdGl2ZWx5IHJlZmVycmVkIHRvIGhlcmVpbiBhcyDigJxHb29nbGXigJ0pOiAgIAorCitOb24tQ29tbWVyY2lhbCBVc2UgT25seSAKKworUGljYXNhIFNvZnR3YXJlIGlzIG1hZGUgYXZhaWxhYmxlIHRvIHlvdSBmb3IgeW91ciBub24tY29tbWVyY2lhbCB1c2Ugb25seS4gVGhpcyBtZWFucyB0aGF0IHlvdSBtYXkgdXNlIGl0IGF0IHdvcmsgb3IgYXQgaG9tZSwgYnV0IHlvdSBmaXJzdCBuZWVkIHRvIG9idGFpbiBHb29nbGUncyBwZXJtaXNzaW9uIGlmIHlvdSB3YW50IHRvIHNlbGwgdGhlIFBpY2FzYSBTb2Z0d2FyZSBvciBhbnkgaW5mb3JtYXRpb24sIHNlcnZpY2VzLCBvciBzb2Z0d2FyZSBhc3NvY2lhdGVkIHdpdGggb3IgZGVyaXZlZCBmcm9tIHRoZSBQaWNhc2EgU29mdHdhcmUsIG9yIGlmIHlvdSB3YW50IHRvIG1vZGlmeSwgY29weSAoZXhjZXB0IGFzIGV4cGxpY2l0bHkgcHJvdmlkZWQgYmVsb3cpLCBsaWNlbnNlLCBvciBjcmVhdGUgZGVyaXZhdGl2ZSB3b3JrcyBmcm9tIHRoZSBQaWNhc2EgU29mdHdhcmUgKGNvbGxlY3RpdmVseSwg4oCcQ29tbWVyY2lhbCBVc2XigJ0pLiAgCisKK0luIHRoZSBldmVudCB0aGF0IHlvdSB3b3VsZCBsaWtlIHRvIHVzZSB0aGUgUGljYXNhIFNvZnR3YXJlIGZvciBDb21tZXJjaWFsIFVzZSwgcGxlYXNlIGNvbnRhY3QgdXMgcmVxdWVzdGluZyBwZXJtaXNzaW9uIGZvciBzdWNoIENvbW1lcmNpYWwgVXNlIChhbmQgZGV0YWlsaW5nIHRoZSBzcGVjaWZpYyB0eXBlIG9mIENvbW1lcmNpYWwgVXNlIHJlcXVlc3RlZCkgYXQgaHR0cDovL3d3dy5nb29nbGUuY29tL3BpY2FzYXN1cHBvcnQuICBZb3UgbWF5IG5vdCB1c2UgdGhlIFBpY2FzYSBTb2Z0d2FyZSBpbiBhbnkgbWFubmVyIHRoYXQgY291bGQgZGFtYWdlLCBkaXNhYmxlLCBvdmVyYnVyZGVuLCBvciBpbXBhaXIgR29vZ2xl4oCZcyBzZXJ2aWNlcyAoZS5nLiwgeW91IG1heSBub3QgdXNlIHRoZSBQaWNhc2EgU29mdHdhcmUgaW4gYW4gYXV0b21hdGVkIG1hbm5lciksIG5vciBtYXkgeW91IHVzZSBQaWNhc2EgU29mdHdhcmUgaW4gYW55IG1hbm5lciB0aGF0IGNvdWxkIGludGVyZmVyZSB3aXRoIGFueSBvdGhlciBwYXJ0eSdzIHVzZSBhbmQgZW5qb3ltZW50IG9mIEdvb2dsZSdzIHNlcnZpY2VzLiAKKworVGhpcyBBZ3JlZW1lbnQgYWxsb3dzIHlvdSB0byBpbnN0YWxsIGFuZCB1c2UgdGhlIFBpY2FzYSBTb2Z0d2FyZSBvbiBhIHNpbmdsZSBjb21wdXRlci4gWW91IG1heSBtYWtlIGNvcGllcyBvZiB0aGUgUGljYXNhIFNvZnR3YXJlIGFuZCBkaXN0cmlidXRlIHN1Y2ggY29waWVzIHRvIG90aGVyIHBlcnNvbnMgZW1wbG95ZWQgYnkgeW91ciBlbXBsb3llcuKAmXMgb3JnYW5pemF0aW9uLCBwcm92aWRlZCB0aGF0IGVhY2ggc3VjaCByZWNpcGllbnQgaGFzIGhhZCBhbiBvcHBvcnR1bml0eSB0byByZXZpZXcgYW5kIGFncmVlcyB0byBiZSBib3VuZCBieSB0aGlzIEFncmVlbWVudCBwcmlvciB0byBhbnkgdXNlIG9mIHRoZSBQaWNhc2EgU29mdHdhcmUuICAgSWYgb3RoZXJzIGVtcGxveWVkIGJ5IHlvdXIgZW1wbG95ZXLigJlzIG9yZ2FuaXphdGlvbiBkbyBub3QgaGF2ZSB0aGlzIG9wcG9ydHVuaXR5IHRvIHJldmlldyBhbmQvb3IgZG8gbm90IGluZGl2aWR1YWxseSBhZ3JlZSB0byBiZSBib3VuZCBieSB0aGlzIEFncmVlbWVudCBhbmQgeW91IHdvdWxkIHN0aWxsIGxpa2UgdG8gZGlzdHJpYnV0ZSBjb3BpZXMgdG8gdGhlbSwgeW91IG1heSBkbyBzbyBwcm92aWRlZCB0aGF0IHlvdSBoYXZlIHRoZSBsZWdhbCByaWdodCB0byBiaW5kIHlvdXIgZW1wbG95ZXLigJlzIG9yZ2FuaXphdGlvbiBhbmQgb3RoZXJzIHdpdGhpbiB5b3VyIGVtcGxveWVy4oCZcyBvcmdhbml6YXRpb24gdG8gdGhpcyBBZ3JlZW1lbnQuICBJZiB5b3UgZG8gbm90IGhhdmUgdGhpcyByaWdodCBhbmQgdGhlIHJlY2lwaWVudHMgZG8gbm90IGhhdmUgYW4gb3Bwb3J0dW5pdHkgdG8gcmV2aWV3IGFuZC9vciBkbyBub3QgYWdyZWUgdG8gYmUgYm91bmQgYnkgdGhpcyBBZ3JlZW1lbnQsIHlvdSBtYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFBpY2FzYSBTb2Z0d2FyZSB0byB0aGVtLiAgSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyByZWdhcmRpbmcgdGhlIHRlcm1zIG9mIGRpc3RyaWJ1dGlvbiwgcGxlYXNlIGNvbnRhY3QgdXMgYXQgaHR0cDovL3d3dy5nb29nbGUuY29tL3BpY2FzYXN1cHBvcnQuCisKK0ZvciBlYWNoIGNvcHkgb2YgdGhlIFBpY2FzYSBTb2Z0d2FyZSBhdXRob3JpemVkIHVuZGVyIHRoaXMgbGljZW5zZSwgeW91IG1heSBtYWtlIG9uZSBiYWNrdXAgY29weSwgcHJvdmlkZWQgeW91ciBiYWNrdXAgY29weSBpcyBub3QgaW5zdGFsbGVkIG9yIHVzZWQgY29uY3VycmVudGx5IG9uIGRpZmZlcmVudCBjb21wdXRlcnMuIFlvdSBtdXN0IHJlcHJvZHVjZSBvbiBhbnkgc3VjaCBjb3B5IGFsbCBjb3B5cmlnaHQgbm90aWNlcyBhbmQgYW55IG90aGVyIHByb3ByaWV0YXJ5IGxlZ2VuZHMgb24gdGhlIG9yaWdpbmFsIGNvcHkgb2YgdGhlIFBpY2FzYSBTb2Z0d2FyZS4gR29vZ2xlIGlzIG5vdCBvYmxpZ2F0ZWQgdG8gcHJvdmlkZSBtYWludGVuYW5jZSwgc3VwcG9ydCwgb3IgdXBkYXRlcyB0byB5b3UgZm9yIHRoZSBQaWNhc2EgU29mdHdhcmUuICAKKworSWYgeW91IGhhdmUgY29tbWVudHMgb24gdGhlIFBpY2FzYSBTb2Z0d2FyZSBvciBpZGVhcyBvbiBob3cgdG8gaW1wcm92ZSBpdCwgcGxlYXNlIGNvbnRhY3QgdXMgYXQgaHR0cDovL3d3dy5nb29nbGUuY29tL3BpY2FzYXN1cHBvcnQuIFBsZWFzZSBub3RlIHRoYXQgYnkgZG9pbmcgc28sIHlvdSBhbHNvIGdyYW50IHRvIEdvb2dsZSBhbmQgdGhpcmQgcGFydGllcyBwZXJtaXNzaW9uIHRvIHVzZSBhbmQgaW5jb3Jwb3JhdGUgeW91ciBpZGVhcyBvciBjb21tZW50cyBpbnRvIHRoZSBQaWNhc2EgU29mdHdhcmUgKG9yIHRoaXJkIHBhcnR5IHNvZnR3YXJlKSB3aXRob3V0IGZ1cnRoZXIgY29tcGVuc2F0aW9uLiAKKworUHJvcGVyIFVzZSAKKworWW91IGFncmVlIHRoYXQgeW91IHdpbGwgdXNlIHRoZSBQaWNhc2EgU29mdHdhcmUgaW4gY29tcGxpYW5jZSB3aXRoIGFsbCBhcHBsaWNhYmxlIGxvY2FsLCBzdGF0ZSwgbmF0aW9uYWwsIGFuZCBpbnRlcm5hdGlvbmFsIGxhd3MsIHJ1bGVzIGFuZCByZWd1bGF0aW9ucywgaW5jbHVkaW5nIGFueSBsYXdzIHJlZ2FyZGluZyB0aGUgdHJhbnNtaXNzaW9uIG9mIHRlY2huaWNhbCBkYXRhIGV4cG9ydGVkIGZyb20geW91ciBjb3VudHJ5IG9mIHJlc2lkZW5jZS4gWW91IHNoYWxsIG5vdCBhZ3JlZSB0bywgYW5kIHNoYWxsIG5vdCBhdXRob3JpemUgb3IgZW5jb3VyYWdlIGFueSB0aGlyZCBwYXJ0eSB0bzogKGkpIHVzZSB0aGUgUGljYXNhIFNvZnR3YXJlIHRvIHVwbG9hZCwgdHJhbnNtaXQgb3Igb3RoZXJ3aXNlIGRpc3RyaWJ1dGUgYW55IGNvbnRlbnQgdGhhdCBpcyB1bmxhd2Z1bCwgZGVmYW1hdG9yeSwgaGFyYXNzaW5nLCBhYnVzaXZlLCBmcmF1ZHVsZW50LCBvYnNjZW5lLCBjb250YWlucyB2aXJ1c2VzLCBvciBpcyBvdGhlcndpc2Ugb2JqZWN0aW9uYWJsZTsgKGlpKSB1cGxvYWQsIHRyYW5zbWl0IG9yIG90aGVyd2lzZSBkaXN0cmlidXRlIGNvbnRlbnQgdGhhdCBpbmZyaW5nZXMgdXBvbiBhbm90aGVyIHBhcnR5J3MgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBvciBvdGhlciBwcm9wcmlldGFyeSwgY29udHJhY3R1YWwgb3IgZmlkdWNpYXJ5IHJpZ2h0cyBvciBvYmxpZ2F0aW9uczsgKGlpaSkgdXNlIHRoZSBQaWNhc2EgU29mdHdhcmUgZm9yIGFueSBmcmF1ZHVsZW50IG9yIGluYXBwcm9wcmlhdGUgcHVycG9zZTsgb3IgKGl2KSBhY3QgaW4gYW55IHdheSB0aGF0IHZpb2xhdGVzIHRoaXMgQWdyZWVtZW50LCBhcyBtYXkgYmUgcmV2aXNlZCBmcm9tIHRpbWUgdG8gdGltZS4gVmlvbGF0aW9uIG9mIGFueSBvZiB0aGUgZm9yZWdvaW5nIG1heSByZXN1bHQgaW4gaW1tZWRpYXRlIHRlcm1pbmF0aW9uIG9mIHRoaXMgbGljZW5zZSwgYW5kIG1heSBzdWJqZWN0IHlvdSB0byBzdGF0ZSwgbmF0aW9uYWwgYW5kL29yIGludGVybmF0aW9uYWwgcGVuYWx0aWVzIGFuZCBvdGhlciBsZWdhbCBjb25zZXF1ZW5jZXMuIAorCitBdXRvbWF0aWMgVXBkYXRlcyAKKworVGhlIFBpY2FzYSBTb2Z0d2FyZSBtYXkgY29tbXVuaWNhdGUgd2l0aCBHb29nbGUncyBzZXJ2ZXJzIHRvIGNoZWNrIGZvciBhdmFpbGFibGUgdXBkYXRlcyB0byB0aGUgUGljYXNhIFNvZnR3YXJlLCBzdWNoIGFzIGJ1ZyBmaXhlcywgcGF0Y2hlcywgZW5oYW5jZWQgZnVuY3Rpb25zLCBtaXNzaW5nIHBsdWctaW5zIGFuZCBuZXcgdmVyc2lvbnMgKGNvbGxlY3RpdmVseSwgIlVwZGF0ZXMiKS4gIER1cmluZyB0aGlzIHByb2Nlc3MsIHRoZSBQaWNhc2EgU29mdHdhcmUgY3JlYXRlcyBhIHJhbmRvbWx5IGdlbmVyYXRlZCBudW1iZXIgZm9yIHVwZGF0aW5nIHRoZSBzb2Z0d2FyZSwgd2hpY2ggaXMgbm90IGFzc29jaWF0ZWQgd2l0aCBhbnkgcGVyc29uYWxseSBpZGVudGlmeWluZyBpbmZvcm1hdGlvbi4gIFRoZSBQaWNhc2EgU29mdHdhcmUgc2VuZHMgR29vZ2xlIGEgcmVxdWVzdCBmb3IgdGhlIGxhdGVzdCBQaWNhc2EgU29mdHdhcmUgdmVyc2lvbiBpbmZvcm1hdGlvbi4gIElmIGEgbmV3ZXIgdmVyc2lvbiBpcyBhdmFpbGFibGUsIHRoZSBQaWNhc2EgU29mdHdhcmUgd2lsbCBnaXZlIHlvdSB0aGUgb3B0aW9uIG9mIGRvd25sb2FkaW5nIGl0LiBUaGUgUGljYXNhIFNvZnR3YXJlIGFza3MgZm9yIHBlcm1pc3Npb24gYmVmb3JlIGRvd25sb2FkaW5nIGFuIHVwZGF0ZWQgdmVyc2lvbi4gIElmIHlvdSB3aXNoIHRvIGRpc2FibGUgdGhlIGF1dG9tYXRlZCBjaGVjayBmb3IgdXBkYXRlcywgcGxlYXNlIHNlZSB0aGUgRkFRIFtodHRwOi8vcGljYXNhLmdvb2dsZS5jb20vc3VwcG9ydC9iaW4vYW5zd2VyLnB5P2Fuc3dlcj0xMTI0OV0gZm9yIGRldGFpbHMuIEJ5IGluc3RhbGxpbmcgdGhlIFBpY2FzYSBTb2Z0d2FyZSBhbmQgbm90IGRpc2FibGluZyB0aGUgYXV0b21hdGVkIGNoZWNrIGZvciBVcGRhdGVzLCB5b3UgaGVyZWJ5IGFncmVlIHRvIGF1dG9tYXRpY2FsbHkgcmVxdWVzdCBhbmQgcmVjZWl2ZSBVcGRhdGVzIGZyb20gR29vZ2xlJ3Mgc2VydmVycy4KKworSW50ZWxsZWN0dWFsIFByb3BlcnR5IAorCitZb3UgYWNrbm93bGVkZ2UgdGhhdCBHb29nbGUsIGl0cyBzdWJzaWRpYXJpZXMgYW5kIGFmZmlsaWF0ZXMsIGFuZC9vciB0aGlyZCBwYXJ0aWVzIG93biBhbGwgcmlnaHQsIHRpdGxlIGFuZCBpbnRlcmVzdCBpbiBhbmQgdG8gdGhlIFBpY2FzYSBTb2Z0d2FyZSwgcG9ydGlvbnMgdGhlcmVvZiwgYW5kIGFueSBzb2Z0d2FyZSBvciBvdGhlciBtYXRlcmlhbHMgKG5vdCBpbmNsdWRpbmcgdXNlciBwaG90b3Mgb3IgbWVzc2FnZSB0ZXh0KSBwcm92aWRlZCB0aHJvdWdoIG9yIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIFBpY2FzYSBTb2Z0d2FyZSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBhbGwgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cy4gWW91IGFncmVlIG5vdCB0byBtb2RpZnksIGFkYXB0LCB0cmFuc2xhdGUsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBmcm9tLCBkZWNvbXBpbGUsIHJldmVyc2UgZW5naW5lZXIsIGRpc2Fzc2VtYmxlIG9yIG90aGVyd2lzZSBhdHRlbXB0IHRvIGRlcml2ZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBQaWNhc2EgU29mdHdhcmUuIFlvdSBhbHNvIGFncmVlIHRvIG5vdCByZW1vdmUsIG9ic2N1cmUsIG9yIGFsdGVyIEdvb2dsZSdzIG9yIGFueSB0aGlyZCBwYXJ0eSdzIGNvcHlyaWdodCBub3RpY2UsIHRyYWRlbWFya3MsIG9yIG90aGVyIHByb3ByaWV0YXJ5IHJpZ2h0cyBub3RpY2VzIGFmZml4ZWQgdG8gb3IgY29udGFpbmVkIHdpdGhpbiBvciBhY2Nlc3NlZCBpbiBjb25qdW5jdGlvbiB3aXRoIG9yIHRocm91Z2ggdGhlIFBpY2FzYSBTb2Z0d2FyZS4gCisKK0Rpc2NsYWltZXIgb2YgV2FycmFudGllcyAKKworVG8gdGhlIGZ1bGxlc3QgZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywgR29vZ2xlIGFuZCBpdHMgbGljZW5zb3JzIGFuZCBzdXBwbGllcnMgZGlzY2xhaW0gYW55IHJlc3BvbnNpYmlsaXR5IGZvciBhbnkgaGFybSByZXN1bHRpbmcgZnJvbSB5b3VyIHVzZSBvZiB0aGUgUGljYXNhIFNvZnR3YXJlIGFuZC9vciBhbnkgdGhpcmQgcGFydHkgc29mdHdhcmUgYWNjZXNzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBvciB0aHJvdWdoIHRoZSBQaWNhc2EgU29mdHdhcmUuCisKK1RPIFRIRSBGVUxMRVNUIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRSBMQVcsIFRIRSBQSUNBU0EgU09GVFdBUkUgQU5EIEFOWSBUSElSRCBQQVJUWSBTT0ZUV0FSRSBNQURFIEFWQUlMQUJMRSBJTiBDT05KVU5DVElPTiBXSVRIIE9SIFRIUk9VR0ggVEhFIFBJQ0FTQSBTT0ZUV0FSRSBBUkUgUFJPVklERUQgIkFTIElTLCIgV0lUSCBOTyBXQVJSQU5USUVTLiBUTyBUSEUgRlVMTEVTVCBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLCBHT09HTEUgQU5EIElUUyBMSUNFTlNPUlMgQU5EIFNVUFBMSUVSUyBFWFBSRVNTTFkgRElTQ0xBSU0gKEEpIEFMTCBFWFBSRVNTLCBJTVBMSUVELCBBTkQgU1RBVFVUT1JZIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBBTkQgTk9OLUlORlJJTkdFTUVOVCBPRiBQUk9QUklFVEFSWSBSSUdIVFM7IEFORCAoQikgQU5ZIFdBUlJBTlRJRVMgUkVHQVJESU5HIFRIRSBTRUNVUklUWSwgUkVMSUFCSUxJVFksIFRJTUVMSU5FU1MsIEFORCBQRVJGT1JNQU5DRSBPRiBUSEUgUElDQVNBIFNPRlRXQVJFIEFORCBTVUNIIFRISVJEIFBBUlRZIFNPRlRXQVJFLiAKKworWU9VIFVOREVSU1RBTkQgQU5EIEFHUkVFIFRIQVQgWU9VIERPV05MT0FEIEFORC9PUiBVU0UgVEhFIFBJQ0FTQSBTT0ZUV0FSRSBBTkQgQUxMIFRISVJEIFBBUlRZIFNPRlRXQVJFIE1BREUgQVZBSUxBQkxFIElOIENPTkpVTkNUSU9OIFdJVEggT1IgVEhST1VHSCBUSEUgUElDQVNBIFNPRlRXQVJFIEFUIFlPVVIgT1dOIERJU0NSRVRJT04gQU5EIFJJU0sgQU5EIFRIQVQgWU9VIFdJTEwgQkUgU09MRUxZIFJFU1BPTlNJQkxFIEZPUiBBTlkgREFNQUdFUyBUTyBZT1VSIENPTVBVVEVSIFNZU1RFTSBPUiBMT1NTIE9GIERBVEEgVEhBVCBSRVNVTFRTIEZST00gVEhFIERPV05MT0FEIE9SIFVTRSBPRiBQSUNBU0EgU09GVFdBUkUgQU5EIFNVQ0ggVEhJUkQgUEFSVFkgU09GVFdBUkUuICBTT01FIFNUQVRFUyBPUiBPVEhFUiBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gVEhFIEFCT1ZFIEVYQ0xVU0lPTlMgTUFZIE5PVCBBUFBMWSBUTyBZT1UuIFlPVSBNQVkgQUxTTyBIQVZFIE9USEVSIFJJR0hUUyBUSEFUIFZBUlkgRlJPTSBTVEFURSBUTyBTVEFURSBBTkQgSlVSSVNESUNUSU9OIFRPIEpVUklTRElDVElPTi4gCisKK0xpbWl0YXRpb24gb2YgTGlhYmlsaXR5IAorCitVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIFNIQUxMIEdPT0dMRSwgSVRTIFNVQlNJRElBUklFUyBBTkQgQUZGSUxJQVRFUyBPUiBJVFMgTElDRU5TT1JTIEFORCBTVVBQTElFUlMgQkUgTElBQkxFIFRPIEFOWSBVU0VSIE9OIEFDQ09VTlQgT0YgVEhBVCBVU0VSJ1MgVVNFIE9SIE1JU1VTRSBPRiBUSEUgUElDQVNBIFNPRlRXQVJFLiBTVUNIIExJTUlUQVRJT04gT0YgTElBQklMSVRZIFNIQUxMIEFQUExZIFRPIFBSRVZFTlQgUkVDT1ZFUlkgT0YgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBBTkQgUFVOSVRJVkUgREFNQUdFUyBXSEVUSEVSIFNVQ0ggQ0xBSU0gSVMgQkFTRUQgT04gV0FSUkFOVFksIENPTlRSQUNULCBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSksIE9SIE9USEVSV0lTRS4gU1VDSCBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBTSEFMTCBBUFBMWSBXSEVUSEVSIFRIRSBEQU1BR0VTIEFSSVNFIEZST00gVVNFIE9SIE1JU1VTRSBPRiBBTkQgUkVMSUFOQ0UgT04gVEhFIFBJQ0FTQSBTT0ZUV0FSRSwgRlJPTSBJTkFCSUxJVFkgVE8gVVNFIFBJQ0FTQSBTT0ZUV0FSRSBPUiBGUk9NIFRIRSBJTlRFUlJVUFRJT04sIFNVU1BFTlNJT04sIE9SIFRFUk1JTkFUSU9OIE9GIFBJQ0FTQSBTT0ZUV0FSRSAoSU5DTFVESU5HIFNVQ0ggREFNQUdFUyBJTkNVUlJFRCBCWSBUSElSRCBQQVJUSUVTKS4gU1VDSCBMSU1JVEFUSU9OIFNIQUxMIEFQUExZIE5PVFdJVEhTVEFORElORyBBIEZBSUxVUkUgT0YgRVNTRU5USUFMIFBVUlBPU0UgT0YgQU5ZIExJTUlURUQgUkVNRURZIEFORCBUTyBUSEUgRlVMTEVTVCBFWFRFTlQgUEVSTUlUVEVEIEJZIExBVy4gIFNPTUUgU1RBVEVTIE9SIE9USEVSIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgRk9SIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSEUgQUJPVkUgTElNSVRBVElPTlMgQU5EIEVYQ0xVU0lPTlMgTUFZIE5PVCBBUFBMWSBUTyBZT1UuIAorCitGdXJ0aGVyIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5IAorCitJdCBpcyB5b3VyIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB0aGF0IHlvdSBvYnRhaW4gYWxsIGNvbnNlbnRzLCBhdXRob3JpemF0aW9ucyBhbmQgY2xlYXJhbmNlcyBpbiBhbnkgZGF0YSBvciBwaG90b2dyYXBocyBvd25lZCBvciBjb250cm9sbGVkIGJ5IHRoaXJkIHBhcnRpZXMgdGhhdCB5b3UgdHJhbnNtaXQsIGFjY2VzcyBvciBjb21tdW5pY2F0ZSB0byBvdGhlcnMgdXNpbmcgdGhlIFBpY2FzYSBTb2Z0d2FyZS4gR29vZ2xlIHdpbGwgbm90IGJlIGxpYWJsZSBpbiBhbnkgd2F5IChhKSBmb3IgYW55IGVycm9ycyBvciBvbWlzc2lvbnMgaW4gYW55IHBob3RvZ3JhcGhzIG9yIGRhdGEsIG9yIGZvciBhbnkgbG9zcyBvciBkYW1hZ2Ugb2YgYW55IGtpbmQgaW5jdXJyZWQgYXMgYSByZXN1bHQgb2YgYW55IGRhdGEgdHJhbnNtaXR0ZWQgdmlhIHRoZSBQaWNhc2EgU29mdHdhcmU7IChiKSBpZiB5b3UgYXJlIGV4cG9zZWQgdG8gcGhvdG9ncmFwaHMgb3IgZGF0YSB0aGF0IGFyZSBvZmZlbnNpdmUsIGluZGVjZW50IG9yIG9iamVjdGlvbmFibGU7IG9yIChjKSBmb3IgYW55IHZpb2xhdGlvbnMgb2YgY29weXJpZ2h0IG9yIG90aGVyIHByb3ByaWV0YXJ5IHJpZ2h0cyBhcyBhIHJlc3VsdCBvZiB5b3VyIHVzZSBvZiB0aGUgUGljYXNhIFNvZnR3YXJlLgorCitJbmRlbW5pZmljYXRpb24gCisKK0l0IGlzIHlvdXIgcmVzcG9uc2liaWxpdHkgdG8gYXNjZXJ0YWluIHdoZXRoZXIgYW55IGNvcHlyaWdodCBvciBvdGhlciBsaWNlbnNlcyBmb3IgdXNlIG9mIGNvbnRlbnQgYXJlIG5lY2Vzc2FyeSBhbmQgdG8gb2J0YWluIGFueSBzdWNoIGxpY2Vuc2VzLiAgWW91IGFncmVlIHRvIGNvcHksIGRpc3RyaWJ1dGUsIGRpc3BsYXksIGFuZCBtb2RpZnkgb25seSB0aG9zZSBtYXRlcmlhbHMgd2hpY2ggeW91IGhhdmUgdGhlIG5lY2Vzc2FyeSBwZXJtaXNzaW9uIHRvIHVzZS4gIFlvdSBhZ3JlZSB0byBob2xkIGhhcm1sZXNzIGFuZCBpbmRlbW5pZnkgR29vZ2xlIGFuZCBpdHMgc3Vic2lkaWFyaWVzLCBhZmZpbGlhdGVzLCBhbmQgdGhlaXIgcmVzcGVjdGl2ZSBvZmZpY2VycywgYWdlbnRzLCBhbmQgZW1wbG95ZWVzIGZyb20gYW5kIGFnYWluc3QgYW55IHRoaXJkIHBhcnR5IGNsYWltIGFyaXNpbmcgZnJvbSBvciBpbiBhbnkgd2F5IHJlbGF0ZWQgdG8geW91ciB1c2Ugb2YgdGhlIFBpY2FzYSBTb2Z0d2FyZSwgaW5jbHVkaW5nIGFueSBsaWFiaWxpdHkgb3IgZXhwZW5zZSBhcmlzaW5nIGZyb20gYWxsIGNsYWltcywgbG9zc2VzLCBkYW1hZ2VzIChhY3R1YWwgYW5kIGNvbnNlcXVlbnRpYWwpLCBzdWl0cywganVkZ21lbnRzLCBsaXRpZ2F0aW9uIGNvc3RzIGFuZCBhdHRvcm5leXMnIGZlZXMsIG9mIGV2ZXJ5IGtpbmQgYW5kIG5hdHVyZS4gSW4gc3VjaCBhIGNhc2UsIEdvb2dsZSB3aWxsIHByb3ZpZGUgeW91IHdpdGggd3JpdHRlbiBub3RpY2Ugb2Ygc3VjaCBjbGFpbSwgc3VpdCBvciBhY3Rpb24uICAKKworRGF0YSBQcmFjdGljZXMgYW5kIFByaXZhY3kgUG9saWN5CisKK1RoZSBQaWNhc2EgU29mdHdhcmUgZG9lcyBub3QgcmVxdWlyZSB5b3UgdG8gcHJvdmlkZSBhbnkgcGVyc29uYWxseSBpZGVudGlmeWluZyBpbmZvcm1hdGlvbiwgc3VjaCBhcyB5b3VyIG5hbWUgb3IgZW1haWwgYWRkcmVzcy4gSWYgeW91IHNlbmQgYSByZXF1ZXN0IHRvIEdvb2dsZeKAmXMgc2VydmVycywgd2UgcmVjb3JkIHN0YW5kYXJkIGxvZyBpbmZvcm1hdGlvbiwgaW5jbHVkaW5nIEludGVybmV0IFByb3RvY29sIGFkZHJlc3NlcyBhbmQgaW5mb3JtYXRpb24gcmVsYXRlZCB0byB5b3VyIHJlcXVlc3QuICBXZSBhbHNvIGxvZyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgaW5zdGFsbGF0aW9uIHByb2Nlc3MgYW5kIHlvdXIgc3lzdGVtIGFuZCBzZXR0aW5ncyB3aGVuIHlvdSBkb3dubG9hZCBQaWNhc2EuICBXZSB3aWxsIGFzayBiZWZvcmUgY29sbGVjdGluZyBwZXJzb25hbGx5IGlkZW50aWZ5aW5nIGluZm9ybWF0aW9uIGZyb20geW91IGFuZCBnaXZlIHlvdSBhbiBvcHBvcnR1bml0eSB0byBvcHQgb3V0LiBGb3IgYSBmdWxsIGRlc2NyaXB0aW9uIG9mIGhvdyBHb29nbGUgaGFuZGxlcyBwZXJzb25hbCBpbmZvcm1hdGlvbiwgcGxlYXNlIHNlZSB0aGUgR29vZ2xlIFByaXZhY3kgUG9saWN5IFtodHRwOi8vd3d3Lmdvb2dsZS5jb20vaW50bC9lbi9wcml2YWN5Lmh0bWxdIGFuZCB0aGUgcmVsYXRlZCBQaWNhc2EgRkFRcyBbaHR0cDovL3BpY2FzYS5nb29nbGUuY29tL3N1cHBvcnRdLgorCitBY2Nlc3NpbmcgT3RoZXIgU2l0ZXMgYW5kIFNlcnZlcnMgZnJvbSBQaWNhc2EKKworSWYgeW91IGFjY2VzcyB3ZWIgc2l0ZXMgb3Igc2VydmVycyBmcm9tIHRoZSBQaWNhc2Egd2Vic2l0ZSBvciB0aGUgUGljYXNhIFNvZnR3YXJlLCB5b3VyIGNvbXB1dGVyIHdpbGwgc2VuZCBzdGFuZGFyZCBsb2cgaW5mb3JtYXRpb24sIGluY2x1ZGluZyB5b3VyIElQIGFkZHJlc3MuICBUaGUgc2l0ZSB5b3UgdmlzaXQgbWF5IGxvZyB0aGlzIGluZm9ybWF0aW9uLiAgSWYgeW91IHVzZSB0aGUgUGljYXNhIHdlYnNpdGUgb3IgdGhlIFBpY2FzYSBTb2Z0d2FyZSB0byBsaW5rIHRvIGEgbWVyY2hhbnQgc2l0ZSB0aGF0IHJlcXVpcmVzIGEgbG9nLWluLCB5b3UgY2FuIG9wdCB0byBoYXZlIFBpY2FzYSBhbmQvb3IgR29vZ2xlIHNhdmUgYW4gZW5jcnlwdGVkIGNvcHkgb2YgeW91ciBsb2ctaW4gaW5mb3JtYXRpb24gb24geW91ciBjb21wdXRlci4KKworVS5TLiBHb3Zlcm5tZW50IFJlc3RyaWN0ZWQgUmlnaHRzCisKK1RoZSBQaWNhc2EgU29mdHdhcmUgYW5kIERvY3VtZW50YXRpb24gYXJlICJDb21tZXJjaWFsIEl0ZW1zLCIgYXMgdGhhdCB0ZXJtIGlzIGRlZmluZWQgYXQgNDggQy5GLlIuIMKnMi4xMDEsIGNvbnNpc3Rpbmcgb2YgIkNvbW1lcmNpYWwgQ29tcHV0ZXIgU29mdHdhcmUiIGFuZCAiQ29tbWVyY2lhbCBDb21wdXRlciBTb2Z0d2FyZSBEb2N1bWVudGF0aW9uLCIgYXMgc3VjaCB0ZXJtcyBhcmUgdXNlZCBpbiA0OCBDLkYuUi4gwqcxMi4yMTIgb3IgNDggQy5GLlIuIMKnMjI3LjcyMDIsIGFzIGFwcGxpY2FibGUuIENvbnNpc3RlbnQgd2l0aCA0OCBDLkYuUi4gwqcxMi4yMTIgb3IgNDggQy5GLlIuIMKnMjI3LjcyMDItMSB0aHJvdWdoIDIyNy43MjAyLTQsIGFzIGFwcGxpY2FibGUsIHRoZSBDb21tZXJjaWFsIENvbXB1dGVyIFNvZnR3YXJlIGFuZCBDb21tZXJjaWFsIENvbXB1dGVyIFNvZnR3YXJlIERvY3VtZW50YXRpb24gYXJlIGJlaW5nIGxpY2Vuc2VkIHRvIFUuUy4gR292ZXJubWVudCBlbmQgdXNlcnMgKGEpIG9ubHkgYXMgQ29tbWVyY2lhbCBJdGVtcyBhbmQgKGIpIHdpdGggb25seSB0aG9zZSByaWdodHMgYXMgYXJlIGdyYW50ZWQgdG8gYWxsIG90aGVyIGVuZCB1c2VycyBwdXJzdWFudCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgaGVyZWluLgorCitFeHBvcnQgQ29udHJvbHMgCisKK1RoZSBQaWNhc2EgU29mdHdhcmUgaXMgc3ViamVjdCB0byB0aGUgZXhwb3J0IGNvbnRyb2wgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBhbmQgYXBwbGljYWJsZSBleHBvcnQgYW5kIGltcG9ydCBjb250cm9sIGxhd3Mgb2Ygb3RoZXIgY291bnRyaWVzLiBZb3UgYWdyZWUgdG8gY29tcGx5IHdpdGggYW5kIHVzZSB0aGUgUGljYXNhIFNvZnR3YXJlIGluIGEgbWFubmVyIGNvbnNpc3RlbnQgd2l0aCBzdWNoIGFwcGxpY2FibGUgbGF3cy4gQWxsIHJpZ2h0cyB0byB1c2UgdGhlIFBpY2FzYSBTb2Z0d2FyZSBhcmUgZ3JhbnRlZCBvbiBjb25kaXRpb24gdGhhdCBzdWNoIHJpZ2h0cyBhcmUgZm9yZmVpdGVkIGlmIHlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRoaXMgQWdyZWVtZW50LgorCitNaXNjZWxsYW5lb3VzIFByb3Zpc2lvbnMgCisKK1RoaXMgQWdyZWVtZW50IHdpbGwgYmUgZ292ZXJuZWQgYnkgYW5kIGNvbnN0cnVlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEsIHdpdGhvdXQgZ2l2aW5nIGVmZmVjdCB0byB0aGUgY29uZmxpY3Qgb2YgbGF3cyBwcm92aXNpb25zIG9mIENhbGlmb3JuaWEgb3IgeW91ciBhY3R1YWwgc3RhdGUgb3IgY291bnRyeSBvZiByZXNpZGVuY2UuIFRoaXMgQWdyZWVtZW50IHdpbGwgbm90IGJlIGdvdmVybmVkIGJ5IHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcywgdGhlIGFwcGxpY2F0aW9uIG9mIHdoaWNoIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gIElmIGZvciBhbnkgcmVhc29uIGEgY291cnQgb2YgY29tcGV0ZW50IGp1cmlzZGljdGlvbiBmaW5kcyBhbnkgcHJvdmlzaW9uIG9yIHBvcnRpb24gb2YgdGhpcyBBZ3JlZW1lbnQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgdGhlIHJlbWFpbmRlciBvZiB0aGlzIEFncmVlbWVudCB3aWxsIGNvbnRpbnVlIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdC4gCisKK1RoaXMgQWdyZWVtZW50IGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YgYW5kIHN1cGVyc2VkZXMgYW5kIHJlcGxhY2VzIGFsbCBwcmlvciBvciBjb250ZW1wb3JhbmVvdXMgdW5kZXJzdGFuZGluZ3Mgb3IgYWdyZWVtZW50cywgd3JpdHRlbiBvciBvcmFsLCByZWdhcmRpbmcgc3VjaCBzdWJqZWN0IG1hdHRlci4gQW55IHdhaXZlciBvZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IHdpbGwgYmUgZWZmZWN0aXZlIG9ubHkgaWYgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IEdvb2dsZS4gCisKK1Rlcm1pbmF0aW9uCisKK0lGIFlPVSBXSVNIIFRPIFRFUk1JTkFURSBUSElTIEFHUkVFTUVOVCwgWU9VIE1BWSBTSU1QTFkgQ0VBU0UgVVNJTkcgVEhFIFBJQ0FTQSBTT0ZUV0FSRSBBTkQgRk9MTE9XIFRIRSBVTklOU1RBTEwgSU5TVFJVQ1RJT05TLiBHT09HTEUgUkVTRVJWRVMgVEhFIFJJR0hUIFRPIFRFUk1JTkFURSBUSElTIEFHUkVFTUVOVCBBTkQgWU9VUiBBVVRIT1JJWkFUSU9OIFRPIFVTRSBUSEUgUElDQVNBIFNPRlRXQVJFIEFUIEFOWSBUSU1FIFdJVEhPVVQgQ0FVU0UuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9nb29nbGVlYXJ0aCBiL2xpY2Vuc2VzL2dvb2dsZWVhcnRoCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyYTg5MTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9nb29nbGVlYXJ0aApAQCAtMCwwICsxLDE2MSBAQAorIyBmaWxlIGdlbmVyYXRlZCB1c2luZyB0aGUgZm9sbG93aW5nIGNvbW1hbmQgKG9wZW4gdGhlIGxpbmsgaW4gYnJvd3NlciBmb3IgdXAtdG8tZGF0ZSB2ZXJzaW9uIHdpdGggaHRtbCBsaW5rcykKKyMgbHlueCAtZHVtcCBodHRwOi8vd3d3Lmdvb2dsZS5jb20vaW50bC9lbi9oZWxwL3Rlcm1zX21hcHNfZWFydGguaHRtbAorCisgIEdvb2dsZSBNYXBzL0VhcnRoIFRlcm1zIG9mIFNlcnZpY2UKKworICAgQnkgZG93bmxvYWRpbmcsIGluc3RhbGxpbmcsIG9yIHVzaW5nIHRoZSBHb29nbGUgRWFydGggc29mdHdhcmUsCisgICBhY2Nlc3Npbmcgb3IgdXNpbmcgdGhlIEdvb2dsZSBNYXBzIHNlcnZpY2UgKHRvZ2V0aGVyLCB0aGUgIlByb2R1Y3RzIiBvcgorICAgIlNlcnZpY2VzIiksIG9yIGFjY2Vzc2luZyBvciB1c2luZyBhbnkgb2YgdGhlIGNvbnRlbnQgYXZhaWxhYmxlIHdpdGhpbgorICAgdGhlIFByb2R1Y3RzLCB5b3UgYWdyZWUgdG8gYmUgYm91bmQgYnkgdGhlIGZvbGxvd2luZzogKDEpIHRoZSBbMV1Hb29nbGUKKyAgIFRlcm1zIG9mIFNlcnZpY2UgKHRoZSAiVW5pdmVyc2FsIFRlcm1zIik7ICgyKSB0aGUgdGVybXMgZm91bmQgb24gb3VyCisgICBbMl1MZWdhbCBOb3RpY2VzIHBhZ2UgKHRoZSAiTGVnYWwgTm90aWNlcyIpOyBhbmQgKDMpIHRoZSBhZGRpdGlvbmFsCisgICB0ZXJtcyBhbmQgY29uZGl0aW9ucyBzZXQgZm9ydGggYmVsb3cgKHRoZSAiQWRkaXRpb25hbCBUZXJtcyIpLiBCZWZvcmUKKyAgIHlvdSBjb250aW51ZSwgeW91IHNob3VsZCByZWFkIGVhY2ggb2YgdGhlc2UgdGhyZWUgZG9jdW1lbnRzLCBhcworICAgdG9nZXRoZXIgdGhleSBmb3JtIGEgYmluZGluZyBhZ3JlZW1lbnQgYmV0d2VlbiB5b3UgYW5kIEdvb2dsZSByZWdhcmRpbmcKKyAgIHlvdXIgdXNlIG9mIHRoZSBQcm9kdWN0cy4gQ29sbGVjdGl2ZWx5LCB0aGUgVW5pdmVyc2FsIFRlcm1zLCB0aGUgTGVnYWwKKyAgIE5vdGljZXMsIGFuZCB0aGUgQWRkaXRpb25hbCBUZXJtcyBhcmUgcmVmZXJyZWQgdG8gYXMgdGhlICJUZXJtcyIuCisgICBBcyBhIGNvbmRpdGlvbiBvZiBkb3dubG9hZGluZywgYWNjZXNzaW5nLCBvciB1c2luZyB0aGUgUHJvZHVjdHMsIHlvdQorICAgYWxzbyBhZ3JlZSB0byB0aGUgdGVybXMgb2YgdGhlIFszXUdvb2dsZSBQcml2YWN5IFBvbGljeS4KKyAgIDEuIFVzZSBvZiB0aGUgUHJvZHVjdHMuIEdvb2dsZSBncmFudHMgeW91IGEgbm9uLWV4Y2x1c2l2ZSwKKyAgIG5vbi10cmFuc2ZlcmFibGUgbGljZW5zZSB0byBhY2Nlc3MgdGhlIEdvb2dsZSBNYXBzIHNlcnZpY2UsIHRvIGRvd25sb2FkCisgICBhbmQgdXNlIHRoZSBHb29nbGUgRWFydGggc29mdHdhcmUgYW5kIHNlcnZpY2UsIGFuZCB0byBhY2Nlc3MgdGhlCisgICBDb250ZW50IChhcyBkZWZpbmVkIGJlbG93KSB3aXRoaW4gdGhlIFByb2R1Y3RzIGFuZCBhY2NvcmRpbmcgdG8gdGhlCisgICBUZXJtcy4KKyAgIDIuIFJlc3RyaWN0aW9ucyBvbiBVc2UuIFVubGVzcyB5b3UgaGF2ZSByZWNlaXZlZCBwcmlvciB3cml0dGVuCisgICBhdXRob3JpemF0aW9uIGZyb20gR29vZ2xlIChvciwgYXMgYXBwbGljYWJsZSwgZnJvbSB0aGUgcHJvdmlkZXIgb2YKKyAgIHBhcnRpY3VsYXIgQ29udGVudCksIHlvdSBtdXN0IG5vdDoKKyAgIChhKSBhY2Nlc3Mgb3IgdXNlIHRoZSBQcm9kdWN0cyBvciBhbnkgQ29udGVudCB0aHJvdWdoIGFueSB0ZWNobm9sb2d5IG9yCisgICBtZWFucyBvdGhlciB0aGFuIHRob3NlIHByb3ZpZGVkIGluIHRoZSBQcm9kdWN0cywgb3IgdGhyb3VnaCBvdGhlcgorICAgZXhwbGljaXRseSBhdXRob3JpemVkIG1lYW5zIEdvb2dsZSBtYXkgZGVzaWduYXRlIChzdWNoIGFzIHRocm91Z2ggdGhlCisgICBbNF1Hb29nbGUgTWFwcy9Hb29nbGUgRWFydGggQVBJcyk7CisgICAoYikgY29weSwgdHJhbnNsYXRlLCBtb2RpZnksIG9yIG1ha2UgZGVyaXZhdGl2ZSB3b3JrcyBvZiB0aGUgQ29udGVudCBvcgorICAgYW55IHBhcnQgdGhlcmVvZjsKKyAgIChjKSByZWRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIHJlbnQsIHB1Ymxpc2gsIHNlbGwsIGFzc2lnbiwgbGVhc2UsCisgICBtYXJrZXQsIHRyYW5zZmVyLCBvciBvdGhlcndpc2UgbWFrZSB0aGUgUHJvZHVjdHMgb3IgQ29udGVudCBhdmFpbGFibGUKKyAgIHRvIHRoaXJkIHBhcnRpZXM7CisgICAoZCkgcmV2ZXJzZSBlbmdpbmVlciwgZGVjb21waWxlIG9yIG90aGVyd2lzZSBhdHRlbXB0IHRvIGV4dHJhY3QgdGhlCisgICBzb3VyY2UgY29kZSBvZiB0aGUgU2VydmljZSBvciBhbnkgcGFydCB0aGVyZW9mLCB1bmxlc3MgdGhpcyBpcworICAgZXhwcmVzc2x5IHBlcm1pdHRlZCBvciByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdzsKKyAgIChlKSB1c2UgdGhlIFByb2R1Y3RzIGluIGEgbWFubmVyIHRoYXQgZ2l2ZXMgeW91IG9yIGFueSBvdGhlciBwZXJzb24KKyAgIGFjY2VzcyB0byBtYXNzIGRvd25sb2FkcyBvciBidWxrIGZlZWRzIG9mIGFueSBDb250ZW50LCBpbmNsdWRpbmcgYnV0CisgICBub3QgbGltaXRlZCB0byBudW1lcmljYWwgbGF0aXR1ZGUgb3IgbG9uZ2l0dWRlIGNvb3JkaW5hdGVzLCBpbWFnZXJ5LAorICAgYW5kIHZpc2libGUgbWFwIGRhdGE7CisgICAoZikgZGVsZXRlLCBvYnNjdXJlLCBvciBpbiBhbnkgbWFubmVyIGFsdGVyIGFueSB3YXJuaW5nLCBub3RpY2UKKyAgIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGFueSBjb3B5cmlnaHQgb3Igb3RoZXIgcHJvcHJpZXRhcnkgcmlnaHRzCisgICBub3RpY2UpLCBvciBsaW5rIHRoYXQgYXBwZWFycyBpbiB0aGUgUHJvZHVjdHMgb3IgdGhlIENvbnRlbnQ7IG9yCisgICAoZykgdXNlIHRoZSBTZXJ2aWNlIG9yIENvbnRlbnQgd2l0aCBhbnkgcHJvZHVjdHMsIHN5c3RlbXMsIG9yCisgICBhcHBsaWNhdGlvbnMgZm9yIG9yIGluIGNvbm5lY3Rpb24gd2l0aCAoaSkgcmVhbCB0aW1lIG5hdmlnYXRpb24gb3IKKyAgIHJvdXRlIGd1aWRhbmNlLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIHR1cm4tYnktdHVybiByb3V0ZQorICAgZ3VpZGFuY2UgdGhhdCBpcyBzeW5jaHJvbml6ZWQgdG8gdGhlIHBvc2l0aW9uIG9mIGEgdXNlcidzCisgICBzZW5zb3ItZW5hYmxlZCBkZXZpY2U7IG9yIChpaSkgYW55IHN5c3RlbXMgb3IgZnVuY3Rpb25zIGZvciBhdXRvbWF0aWMKKyAgIG9yIGF1dG9ub21vdXMgY29udHJvbCBvZiB2ZWhpY2xlIGJlaGF2aW9yLgorICAgMy4gQXBwcm9wcmlhdGUgQ29uZHVjdDsgQ29tcGxpYW5jZSB3aXRoIExhdyBhbmQgR29vZ2xlIFBvbGljaWVzLiBZb3UKKyAgIGFncmVlIHRoYXQgeW91IGFyZSByZXNwb25zaWJsZSBmb3IgeW91ciBvd24gY29uZHVjdCBhbmQgY29udGVudCB3aGlsZQorICAgdXNpbmcgdGhlIFByb2R1Y3RzLCBhbmQgZm9yIGFueSBjb25zZXF1ZW5jZXMgdGhlcmVvZi4gWW91IGFncmVlIHRvIHVzZQorICAgdGhlIFByb2R1Y3RzIG9ubHkgZm9yIHB1cnBvc2VzIHRoYXQgYXJlIGxlZ2FsLCBwcm9wZXIgYW5kIGluIGFjY29yZGFuY2UKKyAgIHdpdGggdGhlIFRlcm1zIGFuZCBhbnkgYXBwbGljYWJsZSBwb2xpY2llcyBvciBndWlkZWxpbmVzIEdvb2dsZSBtYXkKKyAgIG1ha2UgYXZhaWxhYmxlLiBCeSB3YXkgb2YgZXhhbXBsZSwgYW5kIG5vdCBhcyBhIGxpbWl0YXRpb24sIHlvdSBhZ3JlZQorICAgdGhhdCB3aGVuIHVzaW5nIHRoZSBQcm9kdWN0cyBvciB0aGUgQ29udGVudCwgeW91IHdpbGwgbm90OgorICAgKGEpIGRlZmFtZSwgYWJ1c2UsIGhhcmFzcywgc3RhbGssIHRocmVhdGVuIG9yIG90aGVyd2lzZSB2aW9sYXRlIHRoZQorICAgbGVnYWwgcmlnaHRzIChzdWNoIGFzIHJpZ2h0cyBvZiBwcml2YWN5IGFuZCBwdWJsaWNpdHkpIG9mIG90aGVyczsKKyAgIChiKSB1cGxvYWQsIHBvc3QsIGVtYWlsLCB0cmFuc21pdCBvciBvdGhlcndpc2UgbWFrZSBhdmFpbGFibGUgYW55CisgICBpbmFwcHJvcHJpYXRlLCBkZWZhbWF0b3J5LCBvYnNjZW5lLCBvciB1bmxhd2Z1bCBjb250ZW50OworICAgKGMpIHVwbG9hZCwgcG9zdCwgdHJhbnNtaXQgb3Igb3RoZXJ3aXNlIG1ha2UgYXZhaWxhYmxlIGFueSBjb250ZW50IHRoYXQKKyAgIGluZnJpbmdlcyBhbnkgcGF0ZW50LCB0cmFkZW1hcmssIGNvcHlyaWdodCwgdHJhZGUgc2VjcmV0IG9yIG90aGVyCisgICBwcm9wcmlldGFyeSByaWdodCBvZiBhbnkgcGFydHksIHVubGVzcyB5b3UgYXJlIHRoZSBvd25lciBvZiB0aGUgcmlnaHRzLAorICAgb3IgaGF2ZSB0aGUgcGVybWlzc2lvbiBvZiB0aGUgb3duZXIgb3Igb3RoZXIgbGVnYWwganVzdGlmaWNhdGlvbiB0byB1c2UKKyAgIHN1Y2ggY29udGVudDsKKyAgIChkKSB1cGxvYWQsIHBvc3QsIGVtYWlsLCB0cmFuc21pdCBvciBvdGhlcndpc2UgbWFrZSBhdmFpbGFibGUgbWVzc2FnZXMKKyAgIHRoYXQgcHJvbW90ZSBweXJhbWlkIHNjaGVtZXMsIGNoYWluIGxldHRlcnMsIG9yIGRpc3J1cHRpdmUgY29tbWVyY2lhbAorICAgbWVzc2FnZXMgb3IgYWR2ZXJ0aXNlbWVudHM7CisgICAoZSkgdXBsb2FkLCBwb3N0LCBlbWFpbCwgdHJhbnNtaXQgb3Igb3RoZXJ3aXNlIG1ha2UgYXZhaWxhYmxlIGFueSBvdGhlcgorICAgY29udGVudCwgbWVzc2FnZSwgb3IgY29tbXVuaWNhdGlvbiBwcm9oaWJpdGVkIGJ5IGFwcGxpY2FibGUgbGF3LCB0aGUKKyAgIFRlcm1zIG9yIGFueSBhcHBsaWNhYmxlIFByb2R1Y3QgcG9saWNpZXMgb3IgZ3VpZGVsaW5lczsKKyAgIChmKSBkb3dubG9hZCBhbnkgZmlsZSBwb3N0ZWQgYnkgYW5vdGhlciB0aGF0IHlvdSBrbm93LCBvciByZWFzb25hYmx5CisgICBzaG91bGQga25vdywgY2Fubm90IGJlIGxlZ2FsbHkgZGlzdHJpYnV0ZWQgaW4gc3VjaCBtYW5uZXI7CisgICAoZykgaW1wZXJzb25hdGUgYW5vdGhlciBwZXJzb24gb3IgZW50aXR5LCBvciBmYWxzaWZ5IG9yIGRlbGV0ZSBhbnkKKyAgIGF1dGhvciBhdHRyaWJ1dGlvbnMgb3IgcHJvcHJpZXRhcnkgZGVzaWduYXRpb25zIG9yIGxhYmVscyBvZiB0aGUgb3JpZ2luCisgICBvciBzb3VyY2Ugb2YgQ29udGVudCwgc29mdHdhcmUgb3Igb3RoZXIgbWF0ZXJpYWw7CisgICAoaCkgcmVzdHJpY3Qgb3IgaW5oaWJpdCBhbnkgb3RoZXIgdXNlciBmcm9tIHVzaW5nIGFuZCBlbmpveWluZyB0aGUKKyAgIFByb2R1Y3RzIG9yIEdvb2dsZSBzZXJ2aWNlczsKKyAgIChpKSBpbnRlcmZlcmUgd2l0aCBvciBkaXNydXB0IEdvb2dsZSBzZXJ2aWNlcyBvciBzZXJ2ZXJzIG9yIG5ldHdvcmtzCisgICBjb25uZWN0ZWQgdG8gR29vZ2xlIHNlcnZpY2VzLCBvciBkaXNvYmV5IGFueSByZXF1aXJlbWVudHMsIHByb2NlZHVyZXMsCisgICBwb2xpY2llcyBvciByZWd1bGF0aW9ucyBvZiBuZXR3b3JrcyBjb25uZWN0ZWQgdG8gR29vZ2xlIHNlcnZpY2VzOworICAgKGopIHVzZSBhbnkgcm9ib3QsIHNwaWRlciwgc2l0ZSBzZWFyY2gvcmV0cmlldmFsIGFwcGxpY2F0aW9uLCBvciBvdGhlcgorICAgZGV2aWNlIHRvIHJldHJpZXZlIG9yIGluZGV4IGFueSBwb3J0aW9uIG9mIHRoZSBHb29nbGUgc2VydmljZXMgb3IKKyAgIENvbnRlbnQsIG9yIGNvbGxlY3QgaW5mb3JtYXRpb24gYWJvdXQgdXNlcnMgZm9yIGFueSB1bmF1dGhvcml6ZWQKKyAgIHB1cnBvc2U7CisgICAoaykgc3VibWl0IGNvbnRlbnQgdGhhdCBmYWxzZWx5IGV4cHJlc3NlcyBvciBpbXBsaWVzIHRoYXQgc3VjaCBjb250ZW50CisgICBpcyBzcG9uc29yZWQgb3IgZW5kb3JzZWQgYnkgR29vZ2xlOworICAgKGwpIGNyZWF0ZSB1c2VyIGFjY291bnRzIGJ5IGF1dG9tYXRlZCBtZWFucyBvciB1bmRlciBmYWxzZSBvcgorICAgZnJhdWR1bGVudCBwcmV0ZW5zZXM7CisgICAobSkgcHJvbW90ZSBvciBwcm92aWRlIGluc3RydWN0aW9uYWwgaW5mb3JtYXRpb24gYWJvdXQgaWxsZWdhbAorICAgYWN0aXZpdGllczsKKyAgIChuKSBwcm9tb3RlIHBoeXNpY2FsIGhhcm0gb3IgaW5qdXJ5IGFnYWluc3QgYW55IGdyb3VwIG9yIGluZGl2aWR1YWw7IG9yCisgICAobykgdHJhbnNtaXQgYW55IHZpcnVzZXMsIHdvcm1zLCBkZWZlY3RzLCBUcm9qYW4gaG9yc2VzLCBvciBhbnkgaXRlbXMKKyAgIG9mIGEgZGVzdHJ1Y3RpdmUgbmF0dXJlLgorICAgNC4gQ29udGVudCBpbiB0aGUgUHJvZHVjdHMuIEdvb2dsZSBNYXBzIGFuZCBHb29nbGUgRWFydGggYWxsb3cgeW91IHRvCisgICBhY2Nlc3MgYW5kIHZpZXcgYSB2YXJpZXR5IG9mIGNvbnRlbnQsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KKyAgIHBob3RvZ3JhcGhpYyBpbWFnZXJ5LCBtYXAgYW5kIHRlcnJhaW4gZGF0YSwgYnVzaW5lc3MgbGlzdGluZ3MsIHJldmlld3MsCisgICB0cmFmZmljLCBhbmQgb3RoZXIgcmVsYXRlZCBpbmZvcm1hdGlvbiBwcm92aWRlZCBieSBHb29nbGUsIGl0cworICAgbGljZW5zb3JzLCBhbmQgaXRzIHVzZXJzICh0aGUgIkNvbnRlbnQiKS4gQWRkaXRpb25hbGx5LCB5b3UgbWF5IGNob29zZQorICAgdG8gYWNjZXNzIG90aGVyIHRoaXJkIHBhcnR5IGNvbnRlbnQgbWFkZSBhdmFpbGFibGUgaW4gdGhlIFByb2R1Y3RzCisgICB0aHJvdWdoIEdvb2dsZSBzZXJ2aWNlcyBzdWNoIGFzIEdvb2dsZSBHYWRnZXRzLiBZb3UgdW5kZXJzdGFuZCBhbmQKKyAgIGFncmVlIHRvIHRoZSBmb2xsb3dpbmc6CisgICAoYSkgTWFwIGRhdGEsIHRyYWZmaWMsIGRpcmVjdGlvbnMsIGFuZCByZWxhdGVkIENvbnRlbnQgYXJlIHByb3ZpZGVkIGZvcgorICAgcGxhbm5pbmcgcHVycG9zZXMgb25seS4gWW91IG1heSBmaW5kIHRoYXQgd2VhdGhlciBjb25kaXRpb25zLAorICAgY29uc3RydWN0aW9uIHByb2plY3RzLCBjbG9zdXJlcywgb3Igb3RoZXIgZXZlbnRzIG1heSBjYXVzZSByb2FkCisgICBjb25kaXRpb25zIG9yIGRpcmVjdGlvbnMgdG8gZGlmZmVyIGZyb20gdGhlIG1hcCByZXN1bHRzLiBZb3Ugc2hvdWxkCisgICBleGVyY2lzZSBqdWRnbWVudCBpbiB5b3VyIHVzZSBvZiB0aGlzIENvbnRlbnQuCisgICAoYikgQnkgdXNpbmcgdGhlIFByb2R1Y3RzLCB5b3UgZG8gbm90IHJlY2VpdmUgYW55LCBhbmQgR29vZ2xlIGFuZC9vcgorICAgaXRzIGxpY2Vuc29ycyBhbmQgdXNlcnMgcmV0YWluIGFsbCBvd25lcnNoaXAgcmlnaHRzIGluIHRoZSBDb250ZW50LiBZb3UKKyAgIG1heSBub3QgdXNlLCBhY2Nlc3Mgb3IgYWxsb3cgb3RoZXJzIHRvIHVzZSBvciBhY2Nlc3MgdGhlIENvbnRlbnQgaW4gYW55CisgICBtYW5uZXIgbm90IHBlcm1pdHRlZCB1bmRlciB0aGUgVGVybXMsIHVubGVzcyB5b3UgaGF2ZSBiZWVuIHNwZWNpZmljYWxseQorICAgcGVybWl0dGVkIHRvIGRvIHNvIGJ5IEdvb2dsZSBvciBieSB0aGUgb3duZXIgb2YgdGhhdCBDb250ZW50LCBpbiBhCisgICBzZXBhcmF0ZSBhZ3JlZW1lbnQuCisgICAoYykgQ2VydGFpbiBDb250ZW50IGlzIHByb3ZpZGVkIHVuZGVyIFs1XWxpY2Vuc2UgZnJvbSB0aGlyZCBwYXJ0aWVzLAorICAgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBUZWxlIEF0bGFzIEIuVi4gKCJUZWxlIEF0bGFzIiksIGFuZCBpcworICAgc3ViamVjdCB0byBjb3B5cmlnaHQgYW5kIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgb3duZWQgYnkgb3IKKyAgIGxpY2Vuc2VkIHRvIFRlbGUgQXRsYXMgYW5kL29yIHN1Y2ggdGhpcmQgcGFydGllcy4gWW91IG1heSBiZSBoZWxkCisgICBsaWFibGUgZm9yIGFueSB1bmF1dGhvcml6ZWQgY29weWluZyBvciBkaXNjbG9zdXJlIG9mIHRoaXMgQ29udGVudC4gWW91cgorICAgdXNlIG9mIFRlbGUgQXRsYXMgQ29udGVudCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBwcmludGluZyBvciB1c2UKKyAgIGluIG1hcmtldGluZyBvciBwcm9tb3Rpb25hbCBtYXRlcmlhbHMsIGlzIHN1YmplY3QgdG8gYWRkaXRpb25hbAorICAgcmVzdHJpY3Rpb25zIGxvY2F0ZWQgaW4gdGhlIFs2XUxlZ2FsIE5vdGljZXMgcGFnZS4KKyAgIDUuIEFkZGl0aW9uYWwgVGVybXMgZm9yIEdvb2dsZSBFYXJ0aC4KKyAgIChhKSBFeHBvcnQgUmVzdHJpY3Rpb25zLiBUaGUgR29vZ2xlIEVhcnRoIHNvZnR3YXJlIGlzIHN1YmplY3QgdG8gVW5pdGVkCisgICBTdGF0ZXMgZXhwb3J0IGNvbnRyb2xzLiBCeSB1c2luZyB0aGUgR29vZ2xlIEVhcnRoIHNvZnR3YXJlLCB5b3UgYWdyZWUKKyAgIHRvIHVzZSB0aGUgc29mdHdhcmUgb25seSBmb3IgcHVycG9zZXMgdGhhdCBhcmUgbGVnYWwsIHByb3BlciBhbmQgaW4KKyAgIGFjY29yZGFuY2Ugd2l0aCB0aGVzZSBUZXJtcy4gU3BlY2lmaWNhbGx5LCB5b3UgYWdyZWUgdG8gY29tcGx5IHdpdGggYWxsCisgICBhcHBsaWNhYmxlIGV4cG9ydCBhbmQgcmVleHBvcnQgY29udHJvbCBsYXdzIGFuZCByZWd1bGF0aW9ucywgaW5jbHVkaW5nCisgICB0aGUgRXhwb3J0IEFkbWluaXN0cmF0aW9uIFJlZ3VsYXRpb25zICgiRUFSIikgbWFpbnRhaW5lZCBieSB0aGUgVS5TLgorICAgRGVwYXJ0bWVudCBvZiBDb21tZXJjZSwgYW5kIHRyYWRlIGFuZCBlY29ub21pYyBzYW5jdGlvbnMgbWFpbnRhaW5lZCBieQorICAgdGhlIFRyZWFzdXJ5IERlcGFydG1lbnQncyBPZmZpY2Ugb2YgRm9yZWlnbiBBc3NldHMgQ29udHJvbC4KKyAgIChiKSBBdXRvbWF0aWMgVXBkYXRlcy4gVGhlIEdvb2dsZSBFYXJ0aCBzb2Z0d2FyZSBtYXkgY29tbXVuaWNhdGUgd2l0aAorICAgR29vZ2xlIHNlcnZlcnMgZnJvbSB0aW1lIHRvIHRpbWUgdG8gY2hlY2sgZm9yIGF2YWlsYWJsZSB1cGRhdGVzIHRvIHRoZQorICAgc29mdHdhcmUsIHN1Y2ggYXMgYnVnIGZpeGVzLCBwYXRjaGVzLCBlbmhhbmNlZCBmdW5jdGlvbnMsIG1pc3NpbmcKKyAgIHBsdWctaW5zIGFuZCBuZXcgdmVyc2lvbnMgKGNvbGxlY3RpdmVseSwgIlVwZGF0ZXMiKS4gQnkgaW5zdGFsbGluZyB0aGUKKyAgIEdvb2dsZSBFYXJ0aCBzb2Z0d2FyZSwgeW91IGFncmVlIHRvIGF1dG9tYXRpY2FsbHkgcmVxdWVzdCBhbmQgcmVjZWl2ZQorICAgVXBkYXRlcy4KKyAgIDYuIERJU0NMQUlNRVIgT0YgV0FSUkFOVElFUyBBTkQgTElNSVRBVElPTlMgT04gTElBQklMSVRZLgorICAgKGEpIEdPT0dMRSBBTkQgSVRTIExJQ0VOU09SUyAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBURUxFIEFUTEFTCisgICBBTkQgSVRTIFNVUFBMSUVSUykgTUFLRSBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFCisgICBBQ0NVUkFDWSBPUiBDT01QTEVURU5FU1MgT0YgQU5ZIENPTlRFTlQgT1IgVEhFIFBST0RVQ1RTLgorICAgKGIpIFNVQkpFQ1QgVE8gU0VDVElPTiAxNC4xIE9GIFRIRSBHT09HTEUgVU5JVkVSU0FMIFRFUk1TLCBHT09HTEUgQU5ECisgICBJVFMgTElDRU5TT1JTIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRFTEUgQVRMQVMgQU5EIElUUworICAgU1VQUExJRVJTKSBESVNDTEFJTSBBTEwgV0FSUkFOVElFUyBJTiBDT05ORUNUSU9OIFdJVEggVEhFIENPTlRFTlQgQU5ECisgICBUSEUgUFJPRFVDVFMsIEFORCBXSUxMIE5PVCBCRSBMSUFCTEUgRk9SIEFOWSBEQU1BR0UgT1IgTE9TUyBSRVNVTFRJTkcKKyAgIEZST00gWU9VUiBVU0UgT0YgVEhFIENPTlRFTlQgT1IgVEhFIFBST0RVQ1RTLgorICAgNy4gVS5TLiBHb3Zlcm5tZW50IFJlc3RyaWN0ZWQgUmlnaHRzLiBJZiB0aGUgUHJvZHVjdHMgYXJlIGJlaW5nIHVzZWQgb3IKKyAgIGFjY2Vzc2VkIGJ5IG9yIG9uIGJlaGFsZiBvZiB0aGUgVW5pdGVkIFN0YXRlcyBnb3Zlcm5tZW50LCBzdWNoIHVzZSBpcworICAgc3ViamVjdCB0byBhZGRpdGlvbmFsIHRlcm1zIGxvY2F0ZWQgaW4gdGhlICJHb3Zlcm5tZW50IEVuZCBVc2VycyIKKyAgIHNlY3Rpb24gb2Ygb3VyIFs3XUxlZ2FsIE5vdGljZXMgcGFnZS4KKworUmVmZXJlbmNlcworCisgICAxLiBodHRwOi8vd3d3Lmdvb2dsZS5jb20vdGVybXNfb2Zfc2VydmljZS5odG1sCisgICAyLiBodHRwOi8vd3d3Lmdvb2dsZS5jb20vaW50bC9lbi11cy9oZWxwL2xlZ2Fsbm90aWNlc19tYXBzLmh0bWwKKyAgIDMuIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9wcml2YWN5cG9saWN5Lmh0bWwKKyAgIDQuIGh0dHA6Ly9jb2RlLmdvb2dsZS5jb20vYXBpcy9tYXBzL3Rlcm1zLmh0bWwKKyAgIDUuIGh0dHA6Ly93d3cuZ29vZ2xlLmNvbS9pbnRsL2VuLXVzL2hlbHAvbGVnYWxub3RpY2VzX21hcHMuaHRtbAorICAgNi4gaHR0cDovL3d3dy5nb29nbGUuY29tL2ludGwvZW4tdXMvaGVscC9sZWdhbG5vdGljZXNfbWFwcy5odG1sCisgICA3LiBodHRwOi8vd3d3Lmdvb2dsZS5jb20vaW50bC9lbi11cy9oZWxwL2xlZ2Fsbm90aWNlc19tYXBzLmh0bWwKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL2dyYXNzLWlwYWZvbnRzIGIvbGljZW5zZXMvZ3Jhc3MtaXBhZm9udHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzhlMWM1MgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL2dyYXNzLWlwYWZvbnRzCkBAIC0wLDAgKzEsMjggQEAKK1RoaXMgZG9jdW1lbnQgbXVzdCBiZSB1c2VkIGFzIHJlZmVyZW5jZS4gUGxlYXNlIGNvbnN1bHQgCisvdXNyL3NoYXJlL2RvYy9qYS1pcGFmb250cy1bdmVyc2lvbl0vbGljZW5zZS1pcGFmb250cy5ldWNqcC5nei4KKworLS0KKworVGVybXMgb2YgcmVkaXN0cmlidXRpb24gb2YgSVBBIChJbmZvcm1hdGlvbi10ZWNobm9sb2d5IFByb21vdGlvbiBBZ2VuY3ksCitKYXBhbikgZm9udHMKKworIkdSQVNTIEphcGFuIHdlYiBzaXRlIiAoaHR0cDovL3d3dy5ncmFzcy1qYXBhbi5vcmcvRk9TUzRHLykgYWRtaW5pc3RyYXRvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3JrbmV5IEluYy4sIEphcGFuCisKK1JlZGlzdHJpYnV0aW9uIG9mIElQQSBmb250cyAoaGVyZWluYWZ0ZXIgcmVmZXJyZWQgdG8gYXMgdGhlICJmb250cyIpLAord2hpY2ggaXMgZGVsaXZlcmVkIG9yIGRpc3RyaWJ1dGVkIGJ5ICJHUkFTUyBKYXBhbiB3ZWIgc2l0ZSIKKyhodHRwOi8vd3d3LmdyYXNzLWphcGFuLm9yZy9GT1NTNEcvKSBhZG1pbmlzdHJhdG9yIGFuZCBPcmtuZXkgSW5jLiwKK3Byb3ZpZGVkIGFzIGEgcGFydCBvZiBHUkFTUyBHSVMgLyBNYXBTZXJ2ZXIgLyBQb3N0R0lTIChoZXJlaW5hZnRlcgorcmVmZXJyZWQgdG8gYXMgdGhlICJzb2Z0d2FyZSIpLCBhY2hpZXZlbWVudHMgb2YgIk9wZW4gU291cmNlIEdJUyBQbGF0Zm9ybQorRGV2ZWxvcG1lbnQiIChJbmZvcm1hdGlvbi10ZWNobm9sb2d5IFByb21vdGlvbiBBZ2VuY3ksIEphcGFuLCBPcGVuCitTb2Z0d2FyZSBVdGlsaXphdGlvbiBJbmZyYXN0cnVjdHVyZSBJbXByb3ZlbWVudCBQcm9ncmFtLCAyMDAzKSBpcworcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKzEpIFJlZGlzdHJpYnV0aW9uIG9mIEZvbnRzIGlzIGFsbG93ZWQgb25seSB3aGVuIHVzZXJzIGJ1bmRsZSB0aGUgZm9udHMKK3RvIHJlZGlzdHJpYnV0ZWQgc29mdHdhcmUgYW5kIGF0dGFjaCB0aGlzIGRvY3VtZW50LgorMikgV2hlbiByZWRpc3RyaWJ1dGluZywgdXNlcnMgbXVzdCBleHByZXNzIHRoYXQgdGhlIGZvbnRzIGJlaW5nCityZWRpc3RyaWJ1dGVkIGlzIElQQSBmb250cyBjbGVhcmx5LgorMykgMSkgYW5kIDIpIGFsc28gYXBwbHkgdG8gbW9kaWZpZWQgSVBBIGZvbnRzIG9yIGRlcml2YXRpdmVzLgorNCkgIkdSQVNTIEphcGFuIHdlYiBzaXRlIiBhZG1pbmlzdHJhdG9yLCBPcmtuZXkgSW5jLiwgYW5kCitJbmZvcm1hdGlvbi10ZWNobm9sb2d5IFByb21vdGlvbiBBZ2VuY3ksIEphcGFuIGFyZSBub3QgbGlhYmxlIGZvcgorYW55IHByb2JsZW0gY2F1c2VkIGJ5IHRoZSBmb250cy4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL2dzbSBiL2xpY2Vuc2VzL2dzbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGZiYjNjCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvZ3NtCkBAIC0wLDAgKzEsMzUgQEAKK0NvcHlyaWdodCAxOTkyLCAxOTkzLCAxOTk0IGJ5IEp1dHRhIERlZ2VuZXIgYW5kIENhcnN0ZW4gQm9ybWFubiwKK1RlY2huaXNjaGUgVW5pdmVyc2l0YWV0IEJlcmxpbgorCitBbnkgdXNlIG9mIHRoaXMgc29mdHdhcmUgaXMgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UgaXMgbm90CityZW1vdmVkIGFuZCB0aGF0IG5laXRoZXIgdGhlIGF1dGhvcnMgbm9yIHRoZSBUZWNobmlzY2hlIFVuaXZlcnNpdGFldCBCZXJsaW4KK2FyZSBkZWVtZWQgdG8gaGF2ZSBtYWRlIGFueSByZXByZXNlbnRhdGlvbnMgYXMgdG8gdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMKK3NvZnR3YXJlIGZvciBhbnkgcHVycG9zZSBub3IgYXJlIGhlbGQgcmVzcG9uc2libGUgZm9yIGFueSBkZWZlY3RzIG9mCit0aGlzIHNvZnR3YXJlLiAgVEhFUkUgSVMgQUJTT0xVVEVMWSBOTyBXQVJSQU5UWSBGT1IgVEhJUyBTT0ZUV0FSRS4KKworQXMgYSBtYXR0ZXIgb2YgY291cnRlc3ksIHRoZSBhdXRob3JzIHJlcXVlc3QgdG8gYmUgaW5mb3JtZWQgYWJvdXQgdXNlcwordGhpcyBzb2Z0d2FyZSBoYXMgZm91bmQsIGFib3V0IGJ1Z3MgaW4gdGhpcyBzb2Z0d2FyZSwgYW5kIGFib3V0IGFueQoraW1wcm92ZW1lbnRzIHRoYXQgbWF5IGJlIG9mIGdlbmVyYWwgaW50ZXJlc3QuCisKK0JlcmxpbiwgMjguMTEuMTk5NAorSnV0dGEgRGVnZW5lcgorQ2Fyc3RlbiBCb3JtYW5uCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9PbworCitTaW5jZSB0aGUgb3JpZ2luYWwgdGVybXMgb2YgMTUgeWVhcnMgYWdvIG1heWJlIGRvIG5vdCBtYWtlIG91cgoraW50ZW50aW9ucyBjb21wbGV0ZWx5IGNsZWFyIGdpdmVuIHRvZGF5J3MgcmVmaW5lZCB1c2FnZSBvZiB0aGUgbGVnYWwKK3Rlcm1zLCB3ZSBhcHBlbmQgdGhpcyBhZGRpdGlvbmFsIHBlcm1pc3Npb246CisKKyAgICAgIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUKKyAgICAgIGZvciBhbnkgcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLAorICAgICAgcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZSBpcyBub3QgcmVtb3ZlZCBhbmQgdGhhdCBuZWl0aGVyCisgICAgICB0aGUgYXV0aG9ycyBub3IgdGhlIFRlY2huaXNjaGUgVW5pdmVyc2l0YWV0IEJlcmxpbiBhcmUKKyAgICAgIGRlZW1lZCB0byBoYXZlIG1hZGUgYW55IHJlcHJlc2VudGF0aW9ucyBhcyB0byB0aGUgc3VpdGFiaWxpdHkKKyAgICAgIG9mIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlIG5vciBhcmUgaGVsZCByZXNwb25zaWJsZQorICAgICAgZm9yIGFueSBkZWZlY3RzIG9mIHRoaXMgc29mdHdhcmUuICBUSEVSRSBJUyBBQlNPTFVURUxZIE5PCisgICAgICBXQVJSQU5UWSBGT1IgVEhJUyBTT0ZUV0FSRS4KKworQmVya2VsZXkvQnJlbWVuLCAwNS4wNC4yMDA5CitKdXR0YSBEZWdlbmVyCitDYXJzdGVuIEJvcm1hbm4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL2d1aWxkIGIvbGljZW5zZXMvZ3VpbGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE1MDZkMwotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL2d1aWxkCkBAIC0wLDAgKzEsOTMgQEAKK0xpY2Vuc2UgRm9yIEN1c3RvbWVyIFVzZSBvZiBTb2Z0d2FyZSBEZXZlbG9wZWQgYnkgR3VpbGQgU29mdHdhcmUsIEluYy4KKworSU1QT1JUQU5UIE5PVElDRSAtLSBSRUFEIENBUkVGVUxMWTogVGhpcyBMaWNlbnNlIEZvciBDdXN0b21lciBVc2Ugb2YgU29mdHdhcmUKK0RldmVsb3BlZCBieSBHdWlsZCBTb2Z0d2FyZSwgSW5jICgiTElDRU5TRSIpIGlzIHRoZSBhZ3JlZW1lbnQgd2hpY2ggZ292ZXJucwordXNlIG9mIHRoZSBzb2Z0d2FyZSBvZiBHdWlsZCBTb2Z0d2FyZSBDb3Jwb3JhdGlvbiBhbmQgaXRzIHN1YnNpZGlhcmllcworKCJHVUlMRCIpIGRvd25sb2FkYWJsZSBoZXJlZnJvbSwgaW5jbHVkaW5nIGNvbXB1dGVyIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkCitwcmludGVkIG1hdGVyaWFscyAoIlNPRlRXQVJFIikuIEJ5IGRvd25sb2FkaW5nLCBpbnN0YWxsaW5nLCBjb3B5aW5nLCBvcgorb3RoZXJ3aXNlIHVzaW5nIHRoZSBTT0ZUV0FSRSwgeW91IGFncmVlIHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzCitMSUNFTlNFLiBJZiB5b3UgZG8gbm90IGFncmVlIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExJQ0VOU0UsIGRvIG5vdCBkb3dubG9hZCB0aGUKK1NPRlRXQVJFLgorCisxLiBERUZJTklUSU9OUworCisxLjEgQ3VzdG9tZXIuIEN1c3RvbWVyIG1lYW5zIHRoZSBlbnRpdHkgb3IgaW5kaXZpZHVhbCB0aGF0IGRvd25sb2FkcyB0aGUKK1NPRlRXQVJFLgorCisyLiBHUkFOVCBPRiBMSUNFTlNFCisKKzIuMSBSaWdodHMgYW5kIExpbWl0YXRpb25zIG9mIEdyYW50LiBHVUlMRCBoZXJlYnkgZ3JhbnRzIEN1c3RvbWVyIHRoZQorZm9sbG93aW5nIG5vbi1leGNsdXNpdmUsIG5vbi10cmFuc2ZlcmFibGUgcmlnaHQgdG8gdXNlIHRoZSBTT0ZUV0FSRSwgd2l0aCB0aGUKK2ZvbGxvd2luZyBsaW1pdGF0aW9uczoKKworMi4xLjEgUmlnaHRzLiBDdXN0b21lciBtYXkgaW5zdGFsbCBhbmQgdXNlIG9uZSBjb3B5IG9mIHRoZSBTT0ZUV0FSRSBvbiBhCitzaW5nbGUgY29tcHV0ZXIsIGFuZCBleGNlcHQgZm9yIG1ha2luZyBvbmUgYmFjay11cCBjb3B5IG9mIHRoZSBTb2Z0d2FyZSwgbWF5Citub3Qgb3RoZXJ3aXNlIGNvcHkgdGhlIFNPRlRXQVJFLiBUaGlzIExJQ0VOU0Ugb2YgU09GVFdBUkUgbWF5IG5vdCBiZSBzaGFyZWQgb3IKK3VzZWQgY29uY3VycmVudGx5IG9uIGRpZmZlcmVudCBjb21wdXRlcnMuCisKKzIuMS4yIExpbWl0YXRpb25zLgorCitObyBSZXZlcnNlIEVuZ2luZWVyaW5nLiBDdXN0b21lciBtYXkgbm90IHJldmVyc2UgZW5naW5lZXIsIGRlY29tcGlsZSwgb3IKK2Rpc2Fzc2VtYmxlIHRoZSBTT0ZUV0FSRSwgbm9yIGF0dGVtcHQgaW4gYW55IG90aGVyIG1hbm5lciB0byBvYnRhaW4gdGhlIHNvdXJjZQorY29kZS4KKworTm8gU2VwYXJhdGlvbiBvZiBDb21wb25lbnRzLiBUaGUgU09GVFdBUkUgaXMgbGljZW5zZWQgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSXRzCitjb21wb25lbnQgcGFydHMgbWF5IG5vdCBiZSBzZXBhcmF0ZWQgZm9yIHVzZSBvbiBtb3JlIHRoYW4gb25lIGNvbXB1dGVyLCBub3IKK290aGVyd2lzZSB1c2VkIHNlcGFyYXRlbHkgZnJvbSB0aGUgb3RoZXIgcGFydHMuCisKK05vIFNhbGVzIE9yIFJlbnRhbC4gQ3VzdG9tZXIgbWF5IG5vdCBzZWxsLCByZW50IG9yIGxlYXNlIHRoZSBTT0ZUV0FSRSB0bworc29tZW9uZSBlbHNlLgorCiszLiBURVJNSU5BVElPTgorCitUaGlzIExJQ0VOU0Ugd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSBpZiBDdXN0b21lciBmYWlscyB0byBjb21wbHkgd2l0aCBhbnkKK29mIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBoZXJlb2YuIEluIHN1Y2ggZXZlbnQsIEN1c3RvbWVyIG11c3QgZGVzdHJveSBhbGwKK2NvcGllcyBvZiB0aGUgU09GVFdBUkUgYW5kIGFsbCBvZiBpdHMgY29tcG9uZW50IHBhcnRzLgorCis0LiBDT1BZUklHSFQKKworQWxsIHRpdGxlIGFuZCBjb3B5cmlnaHRzIGluIGFuZCB0byB0aGUgU09GVFdBUkUgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KK2FsbCBpbWFnZXMsIHBob3RvZ3JhcGhzLCBhbmltYXRpb25zLCB2aWRlbywgYXVkaW8sIG11c2ljLCB0ZXh0LCBhbmQgb3RoZXIKK2luZm9ybWF0aW9uIGluY29ycG9yYXRlZCBpbnRvIHRoZSBTT0ZUV0FSRSksIHRoZSBhY2NvbXBhbnlpbmcgcHJpbnRlZAorbWF0ZXJpYWxzLCBhbmQgYW55IGNvcGllcyBvZiB0aGUgU09GVFdBUkUsIGFyZSBvd25lZCBieSBHVUlMRCwgb3IgaXRzCitzdXBwbGllcnMuIFRoZSBTT0ZUV0FSRSBpcyBwcm90ZWN0ZWQgYnkgY29weXJpZ2h0IGxhd3MgYW5kIGludGVybmF0aW9uYWwKK3RyZWF0eSBwcm92aXNpb25zLiBBY2NvcmRpbmdseSwgQ3VzdG9tZXIgaXMgcmVxdWlyZWQgdG8gdHJlYXQgdGhlIFNPRlRXQVJFCitsaWtlIGFueSBvdGhlciBjb3B5cmlnaHRlZCBtYXRlcmlhbCwgZXhjZXB0IGFzIG90aGVyd2lzZSBhbGxvd2VkIHB1cnN1YW50IHRvCit0aGlzIExJQ0VOU0UgYW5kIHRoYXQgaXQgbWF5IG1ha2Ugb25lIGNvcHkgb2YgdGhlIFNPRlRXQVJFIHNvbGVseSBmb3IgYmFja3VwCitvciBhcmNoaXZlIHB1cnBvc2VzLgorCis1LiBBUFBMSUNBQkxFIExBVworCitUaGlzIGFncmVlbWVudCBzaGFsbCBiZSBkZWVtZWQgdG8gaGF2ZSBiZWVuIG1hZGUgaW4sIGFuZCBzaGFsbCBiZSBjb25zdHJ1ZWQKK3B1cnN1YW50IHRvLCB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgV2lzY29uc2luLgorCis2LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRJRVMgQU5EIExJTUlUQVRJT04gT04gTElBQklMSVRZCisKKzYuMSBObyBXYXJyYW50aWVzLiBUTyBUSEUgTUFYSU1VTSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLCBUSEUKK1NPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIEdVSUxEIEFORCBJVFMgU1VQUExJRVJTIERJU0NMQUlNIEFMTAorV0FSUkFOVElFUywgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElNUExJRUQKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworNi4yIE5vIExpYWJpbGl0eSBmb3IgQ29uc2VxdWVudGlhbCBEYW1hZ2VzLiBUTyBUSEUgTUFYSU1VTSBFWFRFTlQgUEVSTUlUVEVEIEJZCitBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgU0hBTEwgR1VJTEQgT1IgSVRTIFNVUFBMSUVSUyBCRSBMSUFCTEUgRk9SIEFOWQorU1BFQ0lBTCwgSU5DSURFTlRBTCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBXSEFUU09FVkVSIChJTkNMVURJTkcsCitXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgQlVTSU5FU1MgUFJPRklUUywgQlVTSU5FU1MKK0lOVEVSUlVQVElPTiwgTE9TUyBPRiBCVVNJTkVTUyBJTkZPUk1BVElPTiwgT1IgQU5ZIE9USEVSIFBFQ1VOSUFSWSBMT1NTKQorQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPRiBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBTT0ZUV0FSRSwgRVZFTiBJRiBHVUlMRCBIQVMKK0JFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCis3LiBNSVNDRUxMQU5FT1VTCisKK1RoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcworaXMgc3BlY2lmaWNhbGx5IGRpc2NsYWltZWQuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBMSUNFTlNFIGlzIGluY29uc2lzdGVudAord2l0aCwgb3IgY2Fubm90IGJlIGZ1bGx5IGVuZm9yY2VkIHVuZGVyLCB0aGUgbGF3LCBzdWNoIHByb3Zpc2lvbiB3aWxsIGJlCitjb25zdHJ1ZWQgYXMgbGltaXRlZCB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBiZSBjb25zaXN0ZW50IHdpdGggYW5kIGZ1bGx5CitlbmZvcmNlYWJsZSB1bmRlciB0aGUgbGF3LiBUaGlzIGFncmVlbWVudCBpcyB0aGUgZmluYWwsIGNvbXBsZXRlIGFuZCBleGNsdXNpdmUKK2FncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHJlbGF0aW5nIHRvIHRoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YsIGFuZAorc3VwZXJzZWRlcyBhbGwgcHJpb3Igb3IgY29udGVtcG9yYW5lb3VzIHVuZGVyc3RhbmRpbmdzIGFuZCBhZ3JlZW1lbnRzIHJlbGF0aW5nCit0byBzdWNoIHN1YmplY3QgbWF0dGVyLCB3aGV0aGVyIG9yYWwgb3Igd3JpdHRlbi4gQ3VzdG9tZXIgYWdyZWVzIHRoYXQgaXQgd2lsbAorbm90IHNoaXAsIHRyYW5zZmVyIG9yIGV4cG9ydCB0aGUgU09GVFdBUkUgaW50byBhbnkgY291bnRyeSwgb3IgdXNlIHRoZQorU09GVFdBUkUgaW4gYW55IG1hbm5lciwgcHJvaGliaXRlZCBieSB0aGUgVW5pdGVkIFN0YXRlcyBCdXJlYXUgb2YgRXhwb3J0CitBZG1pbmlzdHJhdGlvbiBvciBhbnkgZXhwb3J0IGxhd3MsIHJlc3RyaWN0aW9ucyBvciByZWd1bGF0aW9ucy4gVGhpcyBMSUNFTlNFCittYXkgb25seSBiZSBtb2RpZmllZCBpbiB3cml0aW5nIHNpZ25lZCBieSBhbiBhdXRob3JpemVkIG9mZmljZXIgb2YgR1VJTEQuCisKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL2hhc2hjYXQgYi9saWNlbnNlcy9oYXNoY2F0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhOGE1OTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9oYXNoY2F0CkBAIC0wLDAgKzEsMzEgQEAKK1B1cnBvc2UKKworU29mdHdhcmUgaGFzIGJlZW4gY3JlYXRlZCBmb3Igc2NpZW50aWZpYywgYW5hbHl6YXRpb24sIGRlbW9uc3RyYXRpb24gYW5kCitzcG9ydGl2ZSByZWFzb25zLiBJdCBpcyBhIGR1YWwtdXNlIHRvb2wgdW5kZXIgZmVkZXJhbCBnZXJtYW4gbGF3IGluIHRoZQorbWVhbmluZyBvZiB0aGUgQ29udmVudGlvbiBvbiBDeWJlcmNyaW1lLCBCdWRhcGVzdCwgMjMuWEkuMjAwMS4gVXNhZ2UKK3Jlc3RyaWN0ZWQgdG8gbGVnYWwgdXNlLgorCitMaWNlbnNlIGFncmVlbWVudAorCisxLiBBbGwgY29weXJpZ2h0cyB0byB0aGlzIHByb2dyYW0gYXJlIGV4Y2x1c2l2ZWx5IG93bmVkIGJ5IHRoZSBhdXRob3IgLS0KK2F0b20KKworMi4gWW91IG1heSBvbmx5IHVzZSB0aGlzIHNvZnR3YXJlIGZvciBsZWdhbCBwdXJwb3Nlcy4KKworMy4gVEhJUyBQUk9HUkFNIElTIERJU1RSSUJVVEVEICJBUyBJUyIuIE5PIFdBUlJBTlRZIE9GIEFOWSBLSU5EIElTCitFWFBSRVNTRUQgT1IgSU1QTElFRC4gWU9VIFVTRSBUSElTIFNPRlRXQVJFIEFUIFlPVVIgT1dOIFJJU0suIFRIRSBBVVRIT1IKK1dJTEwgTk9UIEJFIExJQUJMRSBGT1IgREFUQSBMT1NTLCBEQU1BR0VTLCBMT1NTIE9GIFBST0ZJVFMgT1IgQU5ZIE9USEVSCitLSU5EIE9GIExPU1MgV0hJTEUgVVNJTkcgT1IgTUlTVVNJTkcgVEhJUyBTT0ZUV0FSRS4KKworNC4gSWYgeW91ciBjb3VudHJpZXMgbGF3KHMpIGRvIG5vdCBhbGxvdyByZXN0cmljdGlvbnMgYXMgaW4gKDMuKSB5b3UKK25lZWQgdG8gZ2V0IGFuIGFkZGl0aW9uYWwsIHdyaXR0ZW4gYW5kIGluZGl2aWR1YWwgbGljZW5zZSBieSB0aGUKK2NvcHlyaWdodCBob2xkZXIgdG8gdXNlIHRoaXMgc29mdHdhcmUuIFVubGVzcyB5b3UgaGF2ZSBzdWNoIGEKK2xpY2Vuc2UsIHlvdSBhcmUgbm90IGFsbG93ZWQgdG8gdXNlIHRoZSBzb2Z0d2FyZS4KKworNS4gWW91IG1heSBub3QgcmVudCwgbGVhc2UsIHNlbGwsIG1vZGlmeSwgZGVjb21waWxlLCBkaXNhc3NlbWJsZSwgb3IgcmV2ZXJzZQorZW5naW5lZXIgdGhpcyBwcm9ncmFtIG9yIGFueSBzdWJzZXQgb2YgdGhpcyBwcm9ncmFtLiBBbnkgc3VjaCB1bmF1dGhvcml6ZWQKK3VzZSBzaGFsbCByZXN1bHQgaW4gaW1tZWRpYXRlIGFuZCBhdXRvbWF0aWMgdGVybWluYXRpb24gb2YgdGhpcyBsaWNlbnNlIGFuZAorbWF5IHJlc3VsdCBpbiBjcmltaW5hbCBhbmQvb3IgY2l2aWwgcHJvc2VjdXRpb24uCisKKzYuIFJlZGlzdHJpYnV0aW9uIG9mIHRoZSBvcmlnaW5hbCBwYWNrYWdlLCBpbiB3aG9sZSBvciBpbiBwYXJ0LCBvciBhIG1vZGlmaWVkCit2ZXJzaW9uIGFzIG5lZWRlZCBmb3IgZGlzdHJpYnV0aW9uIHBhY2thZ2luZyBpcyBwZXJtaXR0ZWQgd2l0aG91dCByZXN0cmljdGlvbnMuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9ocC1wcm9saWFudC1lc3NlbnRpYWxzIGIvbGljZW5zZXMvaHAtcHJvbGlhbnQtZXNzZW50aWFscwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iZWY3MzA5Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvaHAtcHJvbGlhbnQtZXNzZW50aWFscwpAQCAtMCwwICsxLDMzOCBAQAorCisKKwkJUFJPTElBTlQgRVNTRU5USUFMUyBTT0ZUV0FSRQorCisJCUVORCBVU0VSIExJQ0VOU0UgQUdSRUVNRU5UCisKK1BMRUFTRSBSRUFEIFRISVMgRU5EIFVTRVIgTElDRU5TRSBBR1JFRU1FTlQgKCJBR1JFRU1FTlQiKSBDQVJFRlVMTFkuICBUSElTCitBR1JFRU1FTlQgSVMgQSBMRUdBTCBBR1JFRU1FTlQgQkVUV0VFTiBZT1UgKEVJVEhFUiBBTiBJTkRJVklEVUFMIE9SIFNJTkdMRQorRU5USVRZKSAoIllPVSIpIEFORCBIRVdMRVRULVBBQ0tBUkQgQ09NUEFOWSAoIkhQIikuICBCWSBDTElDS0lORyBUSEUgIkFHUkVFIgorQlVUVE9OIEJFTE9XLCBDT1BZSU5HLCBJTlNUQUxMSU5HLCBPUiBPVEhFUldJU0UgVVNJTkcgVEhFIFNPRlRXQVJFLAorKGkpIFlPVSBETyBTTyBXSVRIIFRIRSBJTlRFTlQgVE8gRUxFQ1RST05JQ0FMTFkgIkVYRUNVVEUiIFRISVMgQUdSRUVNRU5ULCBBTkQKKyhpaSkgWU9VIEFHUkVFIFRPIEJFIEJPVU5EIEJZIEFORCBDT01QTFkgV0lUSCBUSEUgRk9MTE9XSU5HIFRFUk1TIEFORAorQ09ORElUSU9OUywgSU5DTFVESU5HIFRIRSBXQVJSQU5UWSBTVEFURU1FTlQsIEFTIFdFTEwgQVMgQU5ZIFRFUk1TIEFORAorQ09ORElUSU9OUyBDT05UQUlORUQgSU4gVEhFICJBTkNJTExBUlkgU09GVFdBUkUiIExJU1QuCisKK0lGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5ULAorKEEpIElGIFRISVMgQUdSRUVNRU5UIElTIERJU1BMQVlFRCBFTEVDVFJPTklDQUxMWSwgWU9VIE1BWSBJTkRJQ0FURSBSRUpFQ1RJT04KKyAgICBPRiBUSElTIEFHUkVFTUVOVCBCWSBDTElDS0lORyBUSEUgIkRJU0FHUkVFIiBCVVRUT047CisoQikgWU9VIFNIQUxMIE5PVCBJTlNUQUxMIFRIRSBTT0ZUV0FSRTsgQU5ECisoQykgSFAgRE9FUyBOT1QgR1JBTlQgWU9VIEFOWSBSSUdIVFMgVE8gVVNFIFRIRSBTT0ZUV0FSRS4KK05PVFdJVEhTVEFORElORyBUSEUgRk9SRUdPSU5HLCBJTlNUQUxMSU5HIE9SIE9USEVSV0lTRSBVU0lORyBUSEUgU09GVFdBUkUKK0lORElDQVRFUyBZT1VSIEFDQ0VQVEFOQ0UgT0YgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5ULgorSUYgWU9VIFBVUkNIQVNFRCBUSEUgU09GVFdBUkUsIFlPVSBNQVkgUkVUVVJOIFRIRSBTT0ZUV0FSRSBUTyBUSEUgUExBQ0UgT0YKK1BVUkNIQVNFIEZPUiBBIEZVTEwgUkVGVU5ELgorCitUSEUgU09GVFdBUkUgUFJPVklERUQgSEVSRUlOLCBJUyBQUk9WSURFRCBCWSBIUCBBTkQgQlkgVEhJUkQgUEFSVElFUywgSU5DTFVESU5HCitUSEUgT1BFTiBTT1VSQ0UgQ09NTVVOSVRZICgiQU5DSUxMQVJZIFNPRlRXQVJFIikuICBVU0UgT0YgVEhFIEhQIFNPRlRXQVJFLCBUSEUKK0FOQ0lMTEFSWSBTT0ZUV0FSRSwgQUNDT01QQU5ZSU5HIFBSSU5URUQgTUFURVJJQUxTLCBBTkQgVEhFICJPTkxJTkUiIE9SCitFTEVDVFJPTklDIERPQ1VNRU5UQVRJT04gKENPTExFQ1RJVkVMWSBUSEUgIlBST0RVQ1QiKSBJUyBDT05ESVRJT05FRCBVUE9OIEFORAorTElNSVRFRCBCWSBUSEUgRk9MTE9XSU5HIFRFUk1TIEFORCBDT05ESVRJT05TLCBJTkNMVURJTkcgVEhFICJBUyBJUyBXQVJSQU5UWQorU1RBVEVNRU5UIiBBTkQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRIRSBBTkNJTExBUlkgU09GVFdBUkUgTElDRU5TRQorQUdSRUVNRU5UUyAoIkFOQ0lMTEFSWSBTT0ZUV0FSRSBMSUNFTlNFUyIpLgorCitVU0UgT0YgQU5DSUxMQVJZIFNPRlRXQVJFIFNIQUxMIEJFIEdPVkVSTkVEIEJZIFRIRSBBTkNJTExBUlkgU09GVFdBUkUgTElDRU5TRSwKK0VYQ0VQVCBUSEFUIFRIRSBESVNDTEFJTUVSIE9GIFdBUlJBTlRJRVMgQU5EIExJTUlUQVRJT04gT0YgTElBQklMSVRJRVMKK1BST1ZJU0lPTlMgQ09OVEFJTkVEIElOIFRIRSAiQVMtSVMgV0FSUkFOVFkgU1RBVEVNRU5UIiBPRiBUSElTIEFHUkVFTUVOVCBTSEFMTAorQUxTTyBBUFBMWSBUTyBTVUNIIEFOQ0lMTEFSWSBTT0ZUV0FSRS4gIEhQIEhBUyBJREVOVElGSUVEIEFOQ0lMTEFSWSBTT0ZUV0FSRQorQlkgRUlUSEVSIE5PVElORyBUSEUgQU5DSUxMQVJZIFNPRlRXQVJFIFBST1ZJREVSIlMgT1dORVJTSElQIFdJVEhJTiBFQUNICitBTkNJTExBUlkgU09GVFdBUkUgUFJPR1JBTSBGSUxFIEFORC9PUiBCWSBQUk9WSURJTkcgTElDRU5TSU5HIElORk9STUFUSU9OIElOCitUSEUgIkFOQ0lMTEFSWSBTT0ZUV0FSRSIgTElTVC4gQlkgQUNDRVBUSU5HIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTCitBR1JFRU1FTlQsIFlPVSBBUkUgQUxTTyBBQ0NFUFRJTkcgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIEVBQ0ggQU5DSUxMQVJZCitTT0ZUV0FSRSBMSUNFTlNFIElOIFRIRSBBTkNJTExBUlkgU09GVFdBUkUgTElTVC4KKworSUYgQU5EIE9OTFkgSUYgVEhFIFBST0RVQ1QgSU5DTFVERVMgU09GVFdBUkUgTElDRU5TRUQgVU5ERVIgVEhFIEdOVSBHRU5FUkFMCitQVUJMSUMgTElDRU5TRSAoIkdQTCBTT0ZUV0FSRSIpLCBZT1UgTUFZIE9CVEFJTiBBIENPTVBMRVRFIE1BQ0hJTkUtUkVBREFCTEUKK0NPUFkgT0YgVEhFIEdQTCBTT0ZUV0FSRSBTT1VSQ0UgQ09ERSAoIkdQTCBTT1VSQ0UgQ09ERSIpIEJZIERPV05MT0FEIEZST00gQQorU0lURSBTUEVDSUZJRUQgSU4gVEhFIEZPTExPV0lORyBIUCBXRUJTSVRFOgorSFRUUDovL0gxODAwNC5XV1cxLkhQLkNPTS9QUk9EVUNUUy9TRVJWRVJTL1BST0xJQU5URVNTRU5USUFMUy9WQUxVRVBBQ0svTElDRU5TSU5HLkhUTUwuCitVUE9OIFlPVVIgV1JJVFRFTiBSRVFVRVNULCBIUCBXSUxMIFBST1ZJREUsIEZPUiBBIEZFRSBDT1ZFUklORyBUSEUgQ09TVCBPRgorRElTVFJJQlVUSU9OLCBBIENPTVBMRVRFIE1BQ0hJTkUtUkVBREFCTEUgQ09QWSBPRiBUSEUgR1BMIFNPVVJDRSBDT0RFLCBCWSBNQUlMLAorVE8gWU9VLiAgSU5GT1JNQVRJT04gQUJPVVQgSE9XIFRPIE1BS0UgQSBXUklUVEVOIFJFUVVFU1QgRk9SIEdQTCBTT1VSQ0UgQ09ERQorTUFZIEJFIEZPVU5EIEFUIFRIRSBGT0xMT1dJTkcgV0VCU0lURToKK0hUVFA6Ly9IMTgwMDQuV1dXMS5IUC5DT00vUFJPRFVDVFMvU0VSVkVSUy9QUk9MSUFOVEVTU0VOVElBTFMvVkFMVUVQQUNLL0xJQ0VOU0lORy5IVE1MIC4KKworCitMSUNFTlNFIFRFUk1TCisKK1NVQkpFQ1QgVE8gVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBBTlkgUklHSFRTLAorTElNSVRBVElPTlMgQU5EIE9CTElHQVRJT05TIFNFVCBGT1JUSCBJTiBUSEUgQU5DSUxMQVJZIFNPRlRXQVJFIExJQ0VOU0VTOgorCisxLglMSUNFTlNFIEdSQU5UCisKK2EuCUlGIFNPRlRXQVJFIERPRVMgTk9UIFJFUVVJUkUgQU4gQUNUSVZBVElPTiBLRVkuICBJZiB0aGUgU29mdHdhcmUgZG9lcworbm90IHJlcXVpcmUgYW4gQWN0aXZhdGlvbiBLZXkgYW5kIHByb3ZpZGVkIHRoYXQgWW91IGNvbXBseSB3aXRoIGFsbCB0aGUgdGVybXMKK2FuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50LCBIUCBncmFudHMgWW91IGEgbm9uLWV4Y2x1c2l2ZSwKK25vbi10cmFuc2ZlcmFibGUgKGV4Y2VwdCBhcyBwcm92aWRlZCBpbiBTZWN0aW9uIDE2KSwgd29ybGR3aWRlIChleGNlcHQgZm9yIHRoZQorY291bnRyaWVzIHJlZmVyZW5jZWQgIGluIFNlY3Rpb24gMTIpIGxpY2Vuc2UgdW5kZXIgSFAncyBjb3B5cmlnaHRzLCB0byBpbnN0YWxsLAorY29weSBvbiBhcyBtYW55IGNvbXB1dGVycyBhcyB5b3UgbmVlZCBmb3IgeW91ciBidXNpbmVzcywgdXNlLCBleGVjdXRlLCBtYWtlCithcmNoaXZhbCBvciBiYWNrdXAgY29waWVzLCBhbmQgZGlzcGxheSAoIlVzZSIpIHRoZSBvYmplY3QgY29kZSB2ZXJzaW9uIG9mIHRoZQorUHJvZHVjdCBvbiB0aGUgY29tcHV0ZXIocykgb24gd2hpY2ggdGhpcyBQcm9kdWN0IGlzIGluc3RhbGxlZCBhbmQgaW4gdGhlCitvcGVyYXRpbmcgZW52aXJvbm1lbnQgYXMgaWRlbnRpZmllZCBieSBIUCBpbiB0aGUgYWNjb21wYW55aW5nIG1hdGVyaWFscy4KKworYi4JSUYgU09GVFdBUkUgUkVRVUlSRVMgQU4gQUNUSVZBVElPTiBLRVkuICBJZiB0aGUgU29mdHdhcmUgcmVxdWlyZXMgYW4KK0FjdGl2YXRpb24gS2V5LCBhbmQgcHJvdmlkZWQgdGhhdCBZb3UgY29tcGx5IHdpdGggYWxsIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCit0aGlzIEFncmVlbWVudCwgdGhlbiBkZXBlbmRpbmcgdXBvbiB0aGUgc3BlY2lmaWMgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBZb3UKK2VtcGxveSwgSFAgZ3JhbnRzIFlvdSB0aGUgZm9sbG93aW5nIGxpY2Vuc2UgICgiTGljZW5zZSBUeXBlIikgYW5kIHJpZ2h0czoKKworCUF1dGhvcml6ZWQgQ29waWVzLiAgWW91IGFyZSBsaWNlbnNlZCB0byBpbnN0YWxsLCBtYWtlIEF1dGhvcml6ZWQgQ29waWVzCitvZiAoYXMgZGVmaW5lZCBpbiB0aGlzIHNlY3Rpb24pLCBleGVjdXRlLCBhbmQgZGlzcGxheSAoIlVzZSIpIHRoZSBvYmplY3QgY29kZQordmVyc2lvbiBvZiB0aGUgUHJvZHVjdCBvbiBhbiBlcXVpdmFsZW50IG51bWJlciBvZiBDb21wdXRlcnMsIEhvc3QvQ2xpZW50IFBhaXJzLAorQ29tcHV0ZXIgTm9kZXMsIG9yIENsdXN0ZXJlZCBDb21wdXRlcnMgKGFzIGRlZmluZWQgaW4gdGhlIHRhYmxlIGJlbG93KSBhcyB5b3UKK2hhdmUgQXV0aG9yaXplZCBDb3BpZXMuICBBdXRob3JpemVkIENvcGllcyBpcyBkZWZpbmVkIGFzIHRoZSBudW1iZXIgb2YgY29waWVzCit0aGF0IHlvdSBoYXZlIHBhaWQgZm9yIGFzIHN0YXRlZCBpbiB0aGUgaW52b2ljZSBvciBjb21wYXJhYmxlIGRvY3VtZW50CitldmlkZW5jaW5nIGFuIGF1dGhvcml6ZWQgcXVhbnRpdHkuCisKK0xJQ0VOU0UgVFlQRSAJU09GVFdBUkUgSU5TVEFMTFMgVE86CQlMSUNFTlNFRCBSSUdIVFMKKwkJKGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24pCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0NvbXB1dGVyCUEgY29tcHV0ZXIgCQkJWW91IGhhdmUgYSByaWdodCB0byBpbnN0YWxsCisJCQkJCQlhbmQgVXNlIHRoZSBQcm9kdWN0IG9uIGEgc2luZ2xlCisJCQkJCQljb21wdXRlci4gVGhlIGluc3RhbGxlZCBjb3B5CisJCQkJCQltYXkgbm90IGJlIHRyYW5zZmVycmVkIHRvIG9yCisJCQkJCQl1c2VkIG9uIGFueSBvdGhlciBjb21wdXRlci4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitOb2RlL0NsaWVudAlBIHNldCBvZiBjb21wdXRlcnMgd2l0aCBhCVlvdSBoYXZlIGEgcmlnaHQgdG8gaW5zdGFsbCBhbmQKKwkJbWluaW11bSBvZiBvbmUgaG9zdCBhbmQgb25lCVVzZSB0aGUgUHJvZHVjdCBvbiBhIEhvc3QvQ2xpZW50CisJCWNsaWVudCBjb25uZWN0ZWQgdG8gZWFjaAlQYWlyIG9yIGEgU2luZ2xlIE5vZGUuICBDb3BpZXMKKwkJb3RoZXIgKCJIb3N0L0NsaWVudCBQYWlyIiksCW9mIHRoZSBQcm9kdWN0IGluc3RhbGxlZCBvbiBhCisJCW9yIGluIGNlcnRhaW4gaW5zdGFuY2VzLCBhCUhvc3QvQ2xpZW50IFBhaXIgb3IgU2luZ2xlIE5vZGUKKwkJc2luZ2xlIGNvbXB1dGVyCQkJbWF5IG5vdCBiZSB0cmFuc2ZlcnJlZCB0byBhbnkKKwkJKCJTaW5nbGUgTm9kZSIpCQkJb3RoZXIgaG9zdCBvciBjbGllbnQgY29tcHV0ZXJzCisJCQkJCQlvciBvdGhlciBzaW5nbGUgbm9kZXMuIFlvdSBjYW4KKwkJCQkJCWNvbnRpbnVlIHRvIFVzZSB0aGUgUHJvZHVjdCBvbgorCQkJCQkJbGljZW5zZWQgY2xpZW50cyB3aGVuIGEgbmV3CisJCQkJCQlzZXJ2ZXIgaXMgaW50cm9kdWNlZCB0byB0aGUKKwkJCQkJCWxpY2Vuc2VkIGNsaWVudHMuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorQ2x1c3RlcgkJTW9yZSB0aGFuIHR3byBjb21wdXRlcnMJCVlvdSBoYXZlIGEgcmlnaHQgdG8gaW5zdGFsbCBhbmQKKwkJcGh5c2ljYWxseSBjb25uZWN0ZWQgdG9nZXRoZXIJVXNlIHRoZSBQcm9kdWN0IG9uIGVhY2gKKwkJaW4gYSBjbHVzdGVyIGNvbmZpZ3VyYXRpb24JQ2x1c3RlcmVkIENvbXB1dGVyLiBUaGUKKwkJKGVhY2ggb2Ygd2hpY2ggaXMgcmVmZXJyZWQgdG8JaW5zdGFsbGVkIGNvcHkgbWF5IG5vdCBiZQorCQlhcyAiQ2x1c3RlcmVkIENvbXB1dGVyIikJdHJhbnNmZXJyZWQgdG8gb3IgdXNlZCBvbiBhbnkKKwkJCQkJCW90aGVyIGNvbXB1dGVyLgorCisJCQorCVN0b3JhZ2UuICBZb3UgbWF5IGNvcHkgdGhlIFByb2R1Y3QgaW50byB0aGUgbG9jYWwgbWVtb3J5IG9yIHN0b3JhZ2UKK2RldmljZSBvZiB0aGUgaGFyZHdhcmUgY29uZmlndXJhdGlvbiBsb2FkZWQgd2l0aCB0aGUgQXV0aG9yaXplZCBDb3BpZXMuIFlvdSBtYXkKK2NvcHkgdGhlIFByb2R1Y3Qgb250byBhIHJlYXNvbmFibGUgbnVtYmVyIG9mIG5ldHdvcmsgc2VydmVycyBvciBhIHNlY3VyZQoraW50cmFuZXQgZm9yIHRoZSBzb2xlIHB1cnBvc2Ugb2YgZGlzdHJpYnV0aW5nIHRoZSBQcm9kdWN0IHRvIHRoZSBDb21wdXRlcnMsCitIb3N0L0NsaWVudCBQYWlycywgQ29tcHV0ZXIgTm9kZXMsIG9yIENsdXN0ZXJlZCBDb21wdXRlcnMuICBZb3UgbWF5IG1ha2UKK2FyY2hpdmFsIG9yIGJhY2stdXAgY29waWVzIG9mIHRoZSBQcm9kdWN0LiBZb3Ugc2hhbGwga2VlcCB0aGUgYWN0aXZhdGlvbiBrZXkKK3dpdGggdGhlIGhhcmR3YXJlIGNvbmZpZ3VyYXRpb24gdG8gd2hpY2ggdGhlIGFjdGl2YXRpb24ga2V5IGlzIGxpY2Vuc2VkLiBZb3UKK3Nob3VsZCBrZWVwIGNvcGllcyBvZiB0aGUgYWN0aXZhdGlvbiBrZXkgaW5mb3JtYXRpb24gZm9yIGZ1dHVyZSByZXRyaWV2YWwKK3B1cnBvc2VzLgorCisyLgkgTkVXIFJFTEVBU0VTLiAgIk5ldyBSZWxlYXNlIiBtZWFucyBhIHJlbGVhc2Ugb2YgdGhlIFByb2R1Y3QgdGhhdCBtYXkKK2NvbnRhaW4gZml4ZXMsIGNvcnJlY3Rpb25zLCBvciBtaW5vciBpbXByb3ZlbWVudHMgdG8gdGhlIFByb2R1Y3QuICBOZXcgUmVsZWFzZXMKK2FyZSBkaXN0cmlidXRlZCBmcm9tIHRpbWUgdG8gdGltZSBzb2xlbHkgYXQgdGhlIG9wdGlvbiBvZiBIUC4gIElmIEhQIG9mZmVycyBhCitOZXcgUmVsZWFzZSwgaXQgbWF5IGNvbWUgd2l0aCBpdHMgb3duIHRlcm1zIGFuZCBjb25kaXRpb25zLCBob3dldmVyIGlmIGl0IGRvZXMKK25vdCwgWW91IG1heSB1c2UgdGhlIE5ldyBSZWxlYXNlIG9ubHkgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMKK0FncmVlbWVudC4KKzMuCU5FVyBWRVJTSU9OUy4gICJOZXcgVmVyc2lvbiIgbWVhbnMgYSB2ZXJzaW9uIG9mIHRoZSBQcm9kdWN0IHRoYXQgbWF5Citjb250YWluIHNpZ25pZmljYW50IGNoYW5nZXMsIGVuaGFuY2VtZW50cywgYW5kL29yIGZ1bmN0aW9uYWwgaW1wcm92ZW1lbnRzIHRvCit0aGUgUHJvZHVjdC4gIE5ldyBWZXJzaW9ucyBhcmUgZGlzdHJpYnV0ZWQgc29sZWx5IGF0IHRoZSBvcHRpb24gb2YgSFAuICBJZiBIUAorb2ZmZXJzIGEgTmV3IFZlcnNpb24sIGl0IG1heSBjb21lIHdpdGggaXRzIG93biB0ZXJtcyBhbmQgY29uZGl0aW9ucywgaG93ZXZlcgoraWYgaXQgZG9lcyBub3QsIFlvdSBtYXkgdXNlIHRoZSBOZXcgVmVyc2lvbiBvbmx5IHVuZGVyIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworb2YgdGhpcyBBZ3JlZW1lbnQuCis0LglPV05FUlNISVAuICAgVGhlIFByb2R1Y3QgaXMgb3duZWQgYW5kIGNvcHlyaWdodGVkIGJ5IEhld2xldHQtUGFja2FyZAorRGV2ZWxvcG1lbnQgQ29tcGFueSwgTC5QLiwgSFAncyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgbWFuYWdlbWVudCBjb21wYW55LCBhbmQKK2J5IHRoaXJkIHBhcnR5IHN1cHBsaWVycywgZXhjZXB0IGZvciB0aGUgQW5jaWxsYXJ5IFNvZnR3YXJlLCB3aGljaCBpcyBvd25lZCBhbmQKK2NvcHlyaWdodGVkIGJ5IHRoZSBBbmNpbGxhcnkgU29mdHdhcmUgcHJvdmlkZXJzIGluZGljYXRlZCBpbiB0aGUgQU5DSUxMQVJZCitTT0ZUV0FSRSBsaXN0LiAgWW91ciByaWdodCB0byBVc2UgdGhlIFByb2R1Y3QgY29uZmVycyBubyB0aXRsZSBvciBvd25lcnNoaXAgYW5kCitpcyBub3QgYSBzYWxlIG9mIHRoZSBQcm9kdWN0IG9yIGFueSBwYXJ0IHRoZXJlb2YuICBUaGlyZCBwYXJ0eSBzdXBwbGllcnMgYW5kCitBbmNpbGxhcnkgU29mdHdhcmUgcHJvdmlkZXJzIGFyZSBpbnRlbmRlZCBiZW5lZmljaWFyaWVzIHVuZGVyIHRoaXMgQWdyZWVtZW50CithbmQgbWF5IHByb3RlY3QgdGhlaXIgcmlnaHRzIGluIHRoZWlyIHJlc3BlY3RpdmUgcG9ydGlvbnMgb2YgdGhlIFByb2R1Y3QKK2RpcmVjdGx5IGFnYWluc3QgWW91LgorNS4JVFJBTlNGRVIuIFdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBIUCwgb3IgdW5sZXNzCitzcGVjaWZpY2FsbHkgcGVybWl0dGVkIGluIHRoZSBBbmNpbGxhcnkgU29mdHdhcmUgTGljZW5zZSwgIFlvdSBoYXZlIG5vIHJpZ2h0CisoYSkgdG8gcmVudCwgbGVhc2UsIGxlbmQsIG9yIG90aGVyd2lzZSB0cmFuc2ZlciB0aGUgcmlnaHRzIHRvIHRoZSBQcm9kdWN0IHRvCithbnlvbmUgZWxzZTsgKGIpIHRvIFVzZSB0aGUgUHJvZHVjdCBmb3IgY29tbWVyY2lhbCB0aW1lc2hhcmluZyBvciBidXJlYXUgdXNlOworb3IgKGMpIHRvIGNvcHkgdGhlIFByb2R1Y3Qgb250byBhbnkgcHVibGljIG9yIGRpc3RyaWJ1dGVkIG5ldHdvcmsuCis2LgkgQ09QWVJJR0hULiAgVW5pdGVkIFN0YXRlcyBjb3B5cmlnaHQgbGF3cywgb3RoZXIgY291bnRyaWVzJyBjb3B5cmlnaHQKK2xhd3MsIGFuZCBpbnRlcm5hdGlvbmFsIHRyZWF0eSBwcm92aXNpb25zIHByb3RlY3QgdGhlIFByb2R1Y3QuICBZb3Ugc2hhbGwgbm90CityZW1vdmUgYW55IHByb2R1Y3QgaWRlbnRpZmljYXRpb24sIGNvcHlyaWdodCBub3RpY2VzLCBvciBwcm9wcmlldGFyeSBub3RpY2VzCitmcm9tIHRoZSBQcm9kdWN0LgorNy4JU1VQUE9SVC4gIFN1cHBvcnQgdGVybXMgYW5kIGNvbmRpdGlvbnMgYW5kIGNvbnRhY3QgaW5mb3JtYXRpb24gYXJlCitkZXRhaWxlZCBpbiB0aGUgV29ybGR3aWRlIExpbWl0ZWQgV2FycmFudHkgYW5kIFRlY2huaWNhbCBTdXBwb3J0IGZvciBJbmR1c3RyeQorU3RhbmRhcmQgU2VydmVyIFByb2R1Y3RzIHN0YXRlbWVudCAoIlN1cHBvcnQgU3RhdGVtZW50IiksIGEgY29weSBvZiB3aGljaCBpcworYXZhaWxhYmxlIG9uIHRoZSBIUCB3ZWIgc2l0ZSBhdCB3d3cuaHAuY29tLiAgU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhlCitTdXBwb3J0IFN0YXRlbWVudCwgZm9yIEhQIHNvZnR3YXJlIHByb2R1Y3RzIGluc3RhbGxlZCBvbiBIUCBjb21wdXRlcnMsCit0ZWNobmljYWwgc3VwcG9ydCBmb3IgcXVlc3Rpb25zIHJlZ2FyZGluZyBtZWRpYSBhbmQgUHJvZHVjdCBpbnN0YWxsYXRpb24gbWF5CitiZSBhdmFpbGFibGUgZm9yIGEgbmluZXR5ICg5MCkgZGF5IHBlcmlvZCBmcm9tIHRoZSBkYXRlIG9mIHB1cmNoYXNlIG9mIHRoZSBIUAorY29tcHV0ZXIgb24gd2hpY2ggdGhpcyBQcm9kdWN0IGlzIGluc3RhbGxlZCAoIlN1cHBvcnQgVGVybSIpLiAgVG8gYWNjZXNzIHRoaXMKK3N1cHBvcnQgaW4gTm9ydGggQW1lcmljYSwgY2FsbCB0aGUgSFAgVGVjaG5pY2FsIFN1cHBvcnQgUGhvbmUgQ2VudGVyIGF0CisxLTgwMC02NTItNjY3Mi4gIFRoaXMgc2VydmljZSBpcyBhdmFpbGFibGUgZHVyaW5nIG5vcm1hbCBidXNpbmVzcyBob3VycywKK01vbmRheSB0aHJvdWdoIEZyaWRheSwgZHVyaW5nIHRoZSBTdXBwb3J0IFRlcm0uICBPdXRzaWRlIE5vcnRoIEFtZXJpY2EsIGNhbGwKK3RoZSBuZWFyZXN0IEhQIFRlY2huaWNhbCBTdXBwb3J0IENlbnRlci4gIE5vIG90aGVyIHN1cHBvcnQsIGluY2x1ZGluZword2l0aG91dCBsaW1pdGF0aW9uIGFueSBvbi1zaXRlIHN1cHBvcnQsIGlzIHByb3ZpZGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LgorOC4JTElNSVRBVElPTiBPTiBSRVZFUlNFIEVOR0lORUVSSU5HLiAgUmV2ZXJzZSBlbmdpbmVlcmluZyBvZiBBbmNpbGxhcnkKK1NvZnR3YXJlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IGl0cyByZXNwZWN0aXZlIEFuY2lsbGFyeSBTb2Z0d2FyZSBMaWNlbnNlLiBBcworZm9yIHRoZSByZW1haW5kZXIgb2YgdGhlIFByb2R1Y3QsIFlvdSBzaGFsbCBub3QgbW9kaWZ5LCBkaXNhc3NlbWJsZSwgcmV2ZXJzZQorZW5naW5lZXIsIGRlY29tcGlsZSwgZGVjcnlwdCwgb3Igb3RoZXJ3aXNlIGF0dGVtcHQgdG8gYWNjZXNzIG9yIGRldGVybWluZSB0aGUKK3NvdXJjZSBjb2RlIG9mIHRoZSBQcm9kdWN0IHdpdGhvdXQgSFAncyBwcmlvciB3cml0dGVuIGNvbnNlbnQuICBXaGVyZSBZb3UgaGF2ZQorb3RoZXIgc3RhdHV0b3J5IHJpZ2h0cyB3aXRoIHJlZ2FyZCB0byBzb2Z0d2FyZSwgWW91IHNoYWxsIHByb3ZpZGUgSFAgd2l0aAorcmVhc29uYWJseSBkZXRhaWxlZCBpbmZvcm1hdGlvbiByZWdhcmRpbmcgYW55IGludGVuZGVkIGRpc2Fzc2VtYmx5IG9yCitkZWNvbXBpbGF0aW9uIG9mIHRoZSBQcm9kdWN0IHByaW9yIHRvIHBlcmZvcm1pbmcgc3VjaCBkaXNhc3NlbWJseSBvcgorZGVjb21waWxhdGlvbi4gIFlvdSBzaGFsbCBub3QgZGVjcnlwdCB0aGUgUHJvZHVjdCB1bmxlc3MgbmVjZXNzYXJ5IGZvciB0aGUKK2xpY2Vuc2VkIFVzZSBvZiB0aGUgUHJvZHVjdC4KKzkuCVJFU0VSVkFUSU9OIE9GIFJJR0hUUy4gIEhQLCBpdHMgdGhpcmQgcGFydHkgc3VwcGxpZXJzLCBhbmQgQW5jaWxsYXJ5CitTb2Z0d2FyZSBwcm92aWRlcnMgcmVzZXJ2ZSBhbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCB0byBZb3UgaW4gdGhpcworQWdyZWVtZW50LgorMTAuCVRFUk0gQU5EIFRFUk1JTkFUSU9OLiAgWW91IG1heSBleGVyY2lzZSB0aGUgcmlnaHRzIG9mIHRoaXMgQWdyZWVtZW50CithbmQgb2YgdGhlIEFuY2lsbGFyeSBTb2Z0d2FyZSBMaWNlbnNlcyBmb3IgYSBwZXJpb2Qgb2YgdGltZSBzdGFydGluZyBhdCBZb3VyCithY2NlcHRhbmNlIG9mIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhbmQgZm9yIHNvIGxvbmcgYXMKK1lvdSBtZWV0IHN1Y2ggdGVybXMgYW5kIGNvbmRpdGlvbnMgKCJUZXJtIikuICBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZywKK0hQIG1heSB0ZXJtaW5hdGUgWW91ciByaWdodCB0byBVc2UgdGhlIFByb2R1Y3QsIHVwb24gbm90aWNlLCBmb3IgWW91ciBmYWlsdXJlCit0byBjb21wbHkgd2l0aCBhbnkgc3VjaCB0ZXJtIG9yIGNvbmRpdGlvbi4gIEltbWVkaWF0ZWx5IHVwb24gdGVybWluYXRpb24sIFlvdQorc2hhbGwgcmVtb3ZlLCBkZXN0cm95LCBvciByZXR1cm4gdG8gSFAgYWxsIGNvcGllcyBvZiB0aGUgUHJvZHVjdCwgaW5jbHVkaW5nCit0aG9zZSBjb3BpZXMgb2YgdGhlIFByb2R1Y3QgdGhhdCBhcmUgbWVyZ2VkIGludG8gWW91ciBhZGFwdGF0aW9ucywgZXhjZXB0IGZvcgoraW5kaXZpZHVhbCBwaWVjZXMgb2YgZGF0YSBpbiBZb3VyIGRhdGFiYXNlLiAgV2l0aCBIUCdzIHByaW9yIHdyaXR0ZW4gY29uc2VudCwKK29uZSBjb3B5IG9mIHRoZSBQcm9kdWN0IG1heSBiZSByZXRhaW5lZCwgZm9yIGFyY2hpdmFsIHB1cnBvc2VzIG9ubHksIHN1YnNlcXVlbnQKK3RvIHRlcm1pbmF0aW9uLiAgWW91IG1heSB0ZXJtaW5hdGUgdGhpcyBBZ3JlZW1lbnQgYXQgYW55IHRpbWUgYnkgcmV0dXJuaW5nIG9yCitkZXN0cm95aW5nIHRoZSBQcm9kdWN0IHRvZ2V0aGVyIHdpdGggbWVyZ2VkIHBvcnRpb25zIGluIGFueSBmb3JtLgorMTEuCUNPTkZJREVOVElBTCBDT01QVVRFUiBTT0ZUV0FSRS4gIFZhbGlkIGxpY2Vuc2UgZnJvbSBIUCByZXF1aXJlZCBmb3IKK3Bvc3Nlc3Npb24sIHVzZSwgb3IgY29weWluZy4gIENvbnNpc3RlbnQgd2l0aCBGQVIgMTIuMjExIGFuZCAxMi4yMTIsIENvbW1lcmNpYWwKK0NvbXB1dGVyIFNvZnR3YXJlLCBDb21wdXRlciBTb2Z0d2FyZSBEb2N1bWVudGF0aW9uLCBhbmQgVGVjaG5pY2FsIERhdGEgZm9yCitDb21tZXJjaWFsIEl0ZW1zIGFyZSBsaWNlbnNlZCB0byB0aGUgVS5TLiBHb3Zlcm5tZW50IHVuZGVyIHZlbmRvcidzIHN0YW5kYXJkCitjb21tZXJjaWFsIGxpY2Vuc2UuCisxMi4JQ09NUExJQU5DRSBXSVRIIExBVy4gIFRoZSBQcm9kdWN0IGFuZCBhbnkgYXNzb2NpYXRlZCBoYXJkd2FyZSwKK3NvZnR3YXJlLCB0ZWNobm9sb2d5IG9yIHNlcnZpY2VzIG1heSBub3QgYmUgZXhwb3J0ZWQsIHJlZXhwb3J0ZWQsIHRyYW5zZmVycmVkCitvciBkb3dubG9hZGVkIHRvIHBlcnNvbnMgb3IgZW50aXRpZXMgbGlzdGVkIG9uIHRoZSBVLlMuIERlcGFydG1lbnQgb2YgQ29tbWVyY2UKK0RlbmllZCBQZXJzb25zIExpc3QsIEVudGl0eSBMaXN0IG9mIHByb2xpZmVyYXRpb24gY29uY2Vybiwgb3Igb24gYW55IFUuUy4KK1RyZWFzdXJ5IERlcGFydG1lbnQgRGVzaWduYXRlZCBOYXRpb25hbHMgZXhjbHVzaW9uIGxpc3QsIGFueSBjb3VudHJ5IHVuZGVyCitVLlMuIGVjb25vbWljIGVtYmFyZ28sIG9yIHRvIHBhcnRpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbnZvbHZlZCBpbiB0aGUKK2RldmVsb3BtZW50IG9yIHByb2R1Y3Rpb24gb2YgbnVjbGVhciwgY2hlbWljYWwsIGJpb2xvZ2ljYWwgd2VhcG9ucyBvciBpbgorbWlzc2lsZSB0ZWNobm9sb2d5IHByb2dyYW1zIGFzIHNwZWNpZmllZCBpbiB0aGUgVS5TLiBFeHBvcnQgQWRtaW5pc3RyYXRpb24KK1JlZ3VsYXRpb25zICgxNSBDRlIgNzQ0KS4gIEJ5IGFjY2VwdGluZyB0aGlzIEFncmVlbWVudCBZb3UgY29uZmlybSB0aGF0IFlvdQorYXJlIG5vdCAoaSkgbG9jYXRlZCBpbiAob3IgYSBuYXRpb25hbCByZXNpZGVudCBvZikgYW55IGNvdW50cnkgdW5kZXIgVS5TLgorZWNvbm9taWMgZW1iYXJnbywgKGlpKSBpZGVudGlmaWVkIG9uIGFueSBVLlMuIERlcGFydG1lbnQgb2YgQ29tbWVyY2UgRGVuaWVkCitQZXJzb25zIExpc3QsIEVudGl0eSBMaXN0IG9yIFRyZWFzdXJ5IERlcGFydG1lbnQgRGVzaWduYXRlZCBOYXRpb25hbHMgZXhjbHVzaW9uCitsaXN0LCBhbmQgKGlpaSkgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbnZvbHZlZCBpbiB0aGUgZGV2ZWxvcG1lbnQgb3IKK3Byb2R1Y3Rpb24gb2YgbnVjbGVhciwgY2hlbWljYWwsIGJpb2xvZ2ljYWwgd2VhcG9ucyBvciBpbiBtaXNzaWxlIHRlY2hub2xvZ3kKK3Byb2dyYW1zIGFzIHNwZWNpZmllZCBpbiB0aGUgVS5TLiBFeHBvcnQgQWRtaW5pc3RyYXRpb24gUmVndWxhdGlvbnMuCisxMy4JQVBQTElDQUJMRSBMQVcuIFRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGNvbnN0cnVlZCBpbiBhY2NvcmRhbmNlIHdpdGgKK3RoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBUZXhhcywgd2l0aG91dCByZWdhcmQgdG8gY29uZmxpY3Qgb2YgbGF3cyBwcmluY2lwbGVzLgorVGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzCitpcyBzcGVjaWZpY2FsbHkgZGlzY2xhaW1lZC4gIElmIHRoZSBQcm9kdWN0IHdhcyBhY3F1aXJlZCBvdXRzaWRlIHRoZSBVbml0ZWQKK1N0YXRlcywgdGhlbiBsb2NhbCBsYXcgbWF5IGFwcGx5LgorMTQuCVNFVkVSQUJJTElUWS4gIElmIGFueSB0ZXJtIG9yIHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBkZXRlcm1pbmVkCit0byBiZSBpbGxlZ2FsIG9yIHVuZW5mb3JjZWFibGUsIHRoZSB2YWxpZGl0eSBvciBlbmZvcmNlYWJpbGl0eSBvZiB0aGUgcmVtYWluZGVyCitvZiB0aGUgdGVybXMgb3IgcHJvdmlzaW9ucyBoZXJlaW4gd2lsbCByZW1haW4gdmFsaWQgYW5kIGluIGZ1bGwgZm9yY2UgYW5kCitlZmZlY3QuIEZhaWx1cmUgb3IgZGVsYXkgaW4gZW5mb3JjaW5nIGFueSByaWdodCBvciBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIG5vdCBiZSBkZWVtZWQgYSB3YWl2ZXIgb2Ygc3VjaCByaWdodCBvciBwcm92aXNpb24gd2l0aCByZXNwZWN0IHRvIGFueQorc3Vic2VxdWVudCBicmVhY2guIFByb3Zpc2lvbnMgaGVyZWluLCB3aGljaCBieSB0aGVpciBuYXR1cmUgZXh0ZW5kIGJleW9uZCB0aGUKK3Rlcm1pbmF0aW9uIG9mIHRoZSBsaWNlbnNlIGluIHRoZSBQcm9kdWN0LCB3aWxsIHJlbWFpbiBpbiBlZmZlY3QgdW50aWwKK2Z1bGZpbGxlZC4KKzE1LglDT05TRU5UIFRPIFVTRSBPRiBEQVRBLiBZb3UgYWdyZWUgdGhhdCBIUCBtYXkgY29sbGVjdCBhbmQgdXNlIHRlY2huaWNhbAoraW5mb3JtYXRpb24gdGhhdCBZb3UgcHJvdmlkZSBpbiBjb25uZWN0aW9uIHdpdGggWW91ciBVc2UgYW5kIHJlcXVlc3QgZm9yCit0ZWNobmljYWwgc3VwcG9ydCBvZiB0aGUgUHJvZHVjdCBmcm9tIEhQLCBob3dldmVyLCBIUCB3aWxsIG5vdCB1c2UgdGhpcworaW5mb3JtYXRpb24gaW4gYSBmb3JtIHRoYXQgcGVyc29uYWxseSBpZGVudGlmaWVzIFlvdS4KKzE2LglBU1NJR05NRU5ULiAgWW91IG1heSBub3QgYXNzaWduLCBzdWJsaWNlbnNlIG9yIHRyYW5zZmVyIHRoaXMgQWdyZWVtZW50LAordGhlIFByb2R1Y3QsIG9yIGFueSByaWdodHMgb3Igb2JsaWdhdGlvbnMgaGVyZXVuZGVyIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4KK2NvbnNlbnQgb2YgSFAuICBBbnkgc3VjaCBhdHRlbXB0ZWQgYXNzaWdubWVudCwgc3VibGljZW5zZSwgb3IgdHJhbnNmZXIgd2lsbCBiZQorbnVsbCBhbmQgdm9pZCwgYW5kIGluIHN1Y2ggZXZlbnQsIEhQIG1heSB0ZXJtaW5hdGUgdGhpcyBBZ3JlZW1lbnQgaW1tZWRpYXRlbHkuCitOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZywgWW91IG1heSBhc3NpZ24gdGhpcyBBZ3JlZW1lbnQgYW5kIHRoZSByaWdodHMKK2dyYW50ZWQgaGVyZXVuZGVyIHdpdGggdGhlIHRyYW5zZmVyIG9mIGFsbCBvciBzdWJzdGFudGlhbGx5IGFsbCBvZiBZb3VyCitidXNpbmVzcy4gIFRoZSByaWdodCB0byBhc3NpZ24gb3IgdHJhbnNmZXIgQW5jaWxsYXJ5IFNvZnR3YXJlIGlzIGdvdmVybmVkIGJ5Cit0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIEFuY2lsbGFyeSBTb2Z0d2FyZSBMaWNlbnNlcy4KKzE3LglFTlRJUkUgQUdSRUVNRU5ULiAgVGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbGwgQW5jaWxsYXJ5IFNvZnR3YXJlCitMaWNlbnNlcyBpbiB0aGUgQU5DSUxMQVJZIFNPRlRXQVJFIGxpc3QsIGlzIHRoZSBmaW5hbCwgY29tcGxldGUgYW5kIGV4Y2x1c2l2ZQorYWdyZWVtZW50IGJldHdlZW4gWW91IGFuZCBIUCByZWxhdGluZyB0byB0aGUgUHJvZHVjdCwgYW5kIHN1cGVyc2VkZXMgYW55CitwcmV2aW91cyBjb21tdW5pY2F0aW9ucywgcmVwcmVzZW50YXRpb25zLCBvciBhZ3JlZW1lbnRzIGJldHdlZW4gdGhlIHBhcnRpZXMsCit3aGV0aGVyIG9yYWwgb3Igd3JpdHRlbiwgcmVnYXJkaW5nIHRoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YuICBBbnkgYWRkaXRpb25hbAorb3IgZGlmZmVyZW50IHRlcm1zIGFuZCBjb25kaXRpb25zIG5vdCBleHByZXNzbHkgc2V0IGZvcnRoIGhlcmVpbiB3aWxsIG5vdAorYXBwbHkuICBUaGlzIEFncmVlbWVudCBtYXkgbm90IGJlIGNoYW5nZWQgZXhjZXB0IGJ5IGFuIGFtZW5kbWVudCBzaWduZWQgYnkgYW4KK2F1dGhvcml6ZWQgcmVwcmVzZW50YXRpdmUgb2YgYm90aCBZb3UgYW5kIEhQLiAgVG8gdGhlIGV4dGVudCB0aGUgdGVybXMgb2YgYW55CitIUCBwb2xpY2llcyBvciBwcm9ncmFtcyBmb3Igc3VwcG9ydCBzZXJ2aWNlcyBjb25mbGljdCB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzCitBZ3JlZW1lbnQsIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCBzaGFsbCBjb250cm9sLgorMTguCVdBUlJBTlRZCisKKwlhLglOTyBBQ1RJVkFUSU9OIEtFWSBSRVFVSVJFRCBTT0ZUV0FSRSAtIEFTLUlTIFdBUlJBTlRZIFNUQVRFTUVOVDoKKworCURJU0NMQUlNRVIuICBUTyBUSEUgRVhURU5UIEFMTE9XRUQgQlkgQVBQTElDQUJMRSBMQVcsIFRISVMgUFJPRFVDVCBBTkQKK1NVUFBPUlQgU0VSVklDRVMsIElGIEFOWSwgQVJFIFBST1ZJREVEIFRPIFlPVSAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVElFUyBPRgorQU5ZIEtJTkQsIFdIRVRIRVIgT1JBTCBPUiBXUklUVEVOLCBFWFBSRVNTIE9SIElNUExJRUQuICBIUCBTUEVDSUZJQ0FMTFkKK0RJU0NMQUlNUyBBTlkgSU1QTElFRCBXQVJSQU5USUVTIE9GIEFOWSBLSU5ELCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLAorV0FSUkFOVFkgT0YgTUVSQ0hBTlRBQklMSVRZLCBTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgTk9OLUlORlJJTkdFTUVOVCwgVElUTEUsCitBQ0NVUkFDWSBPRiBJTkZPUk1BVElPTkFMIENPTlRFTlQsIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBBQ0NVUkFDWQorT1IgQ09NUExFVEVORVNTIE9GIFJFU1BPTlNFUywgUkVTVUxUUywgT1IgV09SS01BTkxJS0UgRUZGT1JULCBMQUNLIE9GIFZJUlVTRVMsCitBTkQgTEFDSyBPRiBORUdMSUdFTkNFLCBBTEwgV0lUSCBSRUdBUkQgVE8gVEhFIFBST0RVQ1QsIEFORCBUSEUgUFJPVklTSU9OIE9GCitPUiBGQUlMVVJFIFRPIFBST1ZJREUgU1VQUE9SVCBTRVJWSUNFUy4gIElOIEFERElUSU9OLCBXSVRIT1VUIExJTUlUQVRJT04sCitUSEVSRSBJUyBOTyBXQVJSQU5UWSBPRiBRVUlFVCBFTkpPWU1FTlQsIFFVSUVUIFBPU1NFU1NJT04gQU5EIENPUlJFU1BPTkRFTkNFCitUTyBERVNDUklQVElPTiBXSVRIIFJFR0FSRCBUTyBUSEUgUFJPRFVDVC4gIFlPVSBBU1NVTUUgVEhFIEVOVElSRSBSSVNLIEFTIFRPCitUSEUgUkVTVUxUUyBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0RVQ1QuICBOTyBPUkFMIE9SIFdSSVRURU4gSU5GT1JNQVRJT04gT1IKK0FEVklDRSBHSVZFTiBCWSBIUCwgSFAiUyBBVVRIT1JJWkVEIFJFUFJFU0VOVEFUSVZFUywgT1IgQU5ZIE9USEVSIFBBUlRZIFNIQUxMCitDUkVBVEUgQSBXQVJSQU5UWSBPUiBBTUVORCBUSElTICJBUyBJUyIgV0FSUkFOVFkuICBTb21lIGp1cmlzZGljdGlvbnMgZG8gbm90CithbGxvdyBleGNsdXNpb25zIG9mIGltcGxpZWQgd2FycmFudGllcyBvciBjb25kaXRpb25zLCBzbyB0aGUgYWJvdmUgZXhjbHVzaW9uCittYXkgbm90IGFwcGx5IHRvIFlvdSB0byB0aGUgZXh0ZW50IHByb2hpYml0ZWQgYnkgc3VjaCBsb2NhbCBsYXdzLiBZb3UgbWF5IGhhdmUKK290aGVyIHJpZ2h0cyB0aGF0IHZhcnkgZnJvbSBjb3VudHJ5IHRvIGNvdW50cnksIHN0YXRlIHRvIHN0YXRlLCBvciBwcm92aW5jZSB0bworcHJvdmluY2UuCisKKwliLglBQ1RJVkFUSU9OIEtFWSBSRVFVSVJFRCBTT0ZUV0FSRSAtIExJTUlURUQgV0FSUkFOVFkuCisKK0hQIHdhcnJhbnRzIHRoYXQgdGhlIFByb2R1Y3Qgd2lsbCBwZXJmb3JtIHN1YnN0YW50aWFsbHkgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZQorYWNjb21wYW55aW5nIG1hdGVyaWFscyBmb3IgYSBwZXJpb2Qgb2YgbmluZXR5ICg5MCkgZGF5cyBmcm9tIHRoZSBkYXRlIG9mCitwdXJjaGFzZS4gIElmIGFuIGltcGxpZWQgd2FycmFudHkgb3IgY29uZGl0aW9uIGlzIGNyZWF0ZWQgYnkgWW91cgorc3RhdGUvanVyaXNkaWN0aW9uIGFuZCBmZWRlcmFsIG9yIHN0YXRlL3Byb3ZpbmNpYWwgbGF3IHByb2hpYml0cyBkaXNjbGFpbWVyIG9mCitpdCwgWW91IGFsc28gaGF2ZSBhbiBpbXBsaWVkIHdhcnJhbnR5IG9yIGNvbmRpdGlvbiwgQlVUIE9OTFkgQVMgVE8gREVGRUNUUyBGT1IKK1dISUNIIENMQUlNUyBBUkUgTUFERSBXSVRISU4gTklORVRZICg5MCkgREFZUyBGUk9NIFRIRSBEQVRFIE9GIFBVUkNIQVNFLiBBUyBUTworQU5ZIERFRkVDVFMgRElTQ09WRVJFRCBGT1IgV0hJQ0ggQSBDTEFJTSBJUyBOT1QgTUFERSBXSVRISU4gVEhFIE5JTkVUWS1EQVkKK1BFUklPRCwgVEhFUkUgSVMgTk8gV0FSUkFOVFkgT1IgQ09ORElUSU9OIE9GIEFOWSBLSU5ELgorU29tZSBzdGF0ZXMvanVyaXNkaWN0aW9ucyBkbyBub3QgYWxsb3cgbGltaXRhdGlvbnMgb24gaG93IGxvbmcgYW4gaW1wbGllZAord2FycmFudHkgb3IgY29uZGl0aW9uIGxhc3RzLCBzbyB0aGUgYWJvdmUgbGltaXRhdGlvbiBtYXkgbm90IGFwcGx5IHRvIFlvdS4KKworCURJU0NMQUlNRVIuICBUaGUgTGltaXRlZCBXYXJyYW50eSB0aGF0IGFwcGVhcnMgYWJvdmUgaXMgdGhlIG9ubHkKK2V4cHJlc3Mgd2FycmFudHkgbWFkZSB0byBZb3UgYW5kIGlzIHByb3ZpZGVkIGluIGxpZXUgb2YgYW55IG90aGVyIGV4cHJlc3MKK3dhcnJhbnRpZXMgb3IgaW1wbGllZCB3YXJyYW50ZWVzIChpZiBhbnkpIGNyZWF0ZWQgYnkgYW55IGRvY3VtZW50YXRpb24sCitwYWNrYWdpbmcgb3Igb3RoZXJ3aXNlLiAgRVhDRVBUIEZPUiBUSEUgTElNSVRFRCBXQVJSQU5UWSwgQU5EIFRPIFRIRSBNQVhJTVVNCitFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLCBIUCBBTkQgSVRTIFNVUFBMSUVSUyBQUk9WSURFIFRIRSBQUk9EVUNUCitBTkQgU1VQUE9SVCBTRVJWSUNFUyAoSUYgQU5ZKSAiQVMgSVMiIEFORCBXSVRIIEFMTCBGQVVMVFMsIEFORCBIRVJFQlkgRElTQ0xBSU0KK0FMTCBPVEhFUiBXQVJSQU5USUVTIEFORCBDT05ESVRJT05TLCBFSVRIRVIgRVhQUkVTUywgSU1QTElFRCBPUiBTVEFUVVRPUlksCitJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQU5ZIChJRiBBTlkpIElNUExJRUQgV0FSUkFOVElFUywgRFVUSUVTIE9SCitDT05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSwgT0YgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsCitTQVRJU0ZBQ1RPUlkgUVVBTElUWSwgTk9OLUlORlJJTkdFTUVOVCBPRiBUSVRMRSwgT0YgQUNDVVJBQ1kgT1IgQ09NUExFVEVORVNTCitPRiBSRVNQT05TRVMsIE9GIFJFU1VMVFMsIE9GIFdPUktNQU5MSUtFIEVGRk9SVCwgT0YgTEFDSyBPRiBWSVJVU0VTLCBBTkQgT0YKK0xBQ0sgT0YgTkVHTElHRU5DRSwgQUxMIFdJVEggUkVHQVJEIFRPIFRIRSBQUk9EVUNULCBBTkQgVEhFIFBST1ZJU0lPTlMgT0YgT1IKK0ZBSUxVUkUgVE8gUFJPVklERSBTVVBQT1JUIFNFUlZJQ0VTLiAgQUxTTywgVEhFUkUgSVMgTk8gV0FSUkFOVFkgT1IgQ09ORElUSU9OCitPRiBUSVRMRSwgUVVJRVQgRU5KT1lNRU5ULCBRVUlFVCBQT1NTRVNTSU9OLCBDT1JSRVNQT05ERU5DRSBUTyBERVNDUklQVElPTiwKK09SIE5PTi1JTkZSSU5HRU1FTlQgV0lUSCBSRUdBUkQgVE8gVEhFIFBST0RVQ1QuCisKKzE5LglMSU1JVEFUSU9OIE9GIExJQUJJTElUWS4KKworCWEuCSBGT1IgQUxMIFNPRlRXQVJFIFdIRVRIRVIgT1IgTk9UIEFOIEFDVElWQVRJT04gS0VZIElTIFJFUVVJUkVECisKK0VYQ0VQVCBUTyBUSEUgRVhURU5UIFBST0hJQklURUQgQlkgTE9DQUwgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIEhQIE9SIElUUworU1VCU0lESUFSSUVTLCBBRkZJTElBVEVTLCBESVJFQ1RPUlMsIE9GRklDRVJTLCBFTVBMT1lFRVMsIEFHRU5UUyBPUiBTVVBQTElFUlMKK0JFIExJQUJMRSBGT1IgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwgUFVOSVRJVkUsCitPUiBPVEhFUiBEQU1BR0VTIChJTkNMVURJTkcgTE9TVCBQUk9GSVQsIExPU1QgREFUQSwgT1IgRE9XTlRJTUUgQ09TVFMpIEFSSVNJTkcKK09VVCBPRiBUSEUgVVNFLCBUSEUgSU5BQklMSVRZIFRPIFVTRSwgT1IgVEhFIFJFU1VMVFMgT0YgVVNFIE9GIFRIRSBQUk9EVUNULAorV0hFVEhFUiBCQVNFRCBJTiBXQVJSQU5UWSwgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVIgTEVHQUwgVEhFT1JZLCBBTkQgV0hFVEhFUgorT1IgTk9UIEhQIFdBUyBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuICBUSEUgUFJPRFVDVCBJUyBOT1QKK0RFU0lHTkVELCBNQU5VRkFDVFVSRUQgT1IgSU5URU5ERUQgRk9SIFVTRSBJTiBUSEUgUExBTk5JTkcsIENPTlNUUlVDVElPTiwKK01BSU5URU5BTkNFLCBPUiBPUEVSQVRJT04gT0YgQSBOVUNMRUFSIEZBQ0lMSVRZLCBBSVJDUkFGVCBOQVZJR0FUSU9OIE9SCitBSVJDUkFGVCBDT01NVU5JQ0FUSU9OIFNZU1RFTVMsIEFJUiBUUkFGRklDIENPTlRST0wsIExJRkUgU1VQUE9SVCBNQUNISU5FUywKK09SIFdFQVBPTlMgU1lTVEVNUyAoQ09MTEVDVElWRUxZICJISUdIIFJJU0sgQVBQTElDQVRJT05TIikuICBZT1UgQVJFIFNPTEVMWQorTElBQkxFIElGIFRIRSBQUk9EVUNUIElTIFVTRUQgRk9SIEhJR0ggUklTSyBBUFBMSUNBVElPTlMsIEFORCBZT1UgU0hBTEwKK0lOREVNTklGWSwgREVGRU5EIEFORCBIT0xEIEhQIEhBUk1MRVNTIEZST00gQUxMIExPU1MsIERBTUFHRSwgRVhQRU5TRSBPUgorTElBQklMSVRZIElOIENPTk5FQ1RJT04gV0lUSCBTVUNIIFVTRS4gICBZT1UgQVNTVU1FIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBZT1VSCitVU0UgT0YgVEhFIFBST0RVQ1QuICBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT1IKK0xJTUlUQVRJT04gT0YgTElBQklMSVRZIEZPUiBJTkNJREVOVElBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRIRSBBQk9WRQorTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVSBUTyBUSEUgRVhURU5UIFBST0hJQklURUQgQlkgU1VDSCBMT0NBTCBMQVdTLgorCisJYi4JRk9SIFNPRlRXQVJFIFJFUVVJUklORyBBTiBBQ1RJVkFUSU9OIEtFWQorCitOb3R3aXRoc3RhbmRpbmcgYW55IGRhbWFnZXMgdGhhdCBZb3UgbWlnaHQgaW5jdXIgZm9yIGFueSByZWFzb24gd2hhdHNvZXZlcgorKGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbGwgZGFtYWdlcyByZWZlcmVuY2VkIGFib3ZlIGFuZCBhbGwgZGlyZWN0CitvciBnZW5lcmFsIGRhbWFnZXMpLCB0aGUgZW50aXJlIGxpYWJpbGl0eSBvZiBIUCBhbmQgYW55IG9mIGl0cyBzdXBwbGllcnMgdW5kZXIKK2FueSBwcm92aXNpb24gb2YgdGhpcyBFVUxBIGFuZCBZb3VyIGV4Y2x1c2l2ZSByZW1lZHkgZm9yIGFsbCBvZiB0aGUgZm9yZWdvaW5nCisoZXhjZXB0IGZvciBhbnkgcmVtZWR5IG9mIHJlcGFpciBvciByZXBsYWNlbWVudCBpZiBlbGVjdGVkIGJ5IEhQIHdpdGggcmVzcGVjdAordG8gYW55IGJyZWFjaCBvZiB0aGUgTGltaXRlZCBXYXJyYW50eSkgc2hhbGwgYmUgbGltaXRlZCB0byB0aGUgZ3JlYXRlciBvZiB0aGUKK2Ftb3VudCBhY3R1YWxseSBwYWlkIGJ5IFlvdSBmb3IgdGhlIFByb2R1Y3Qgb3IgVS5TLiAkNS4wMC4gIFRoZSBmb3JlZ29pbmcKK2xpbWl0YXRpb25zLCBleGNsdXNpb25zIGFuZCBkaXNjbGFpbWVycyAoaW5jbHVkaW5nIFdhcnJhbnR5IGFib3ZlKSBzaGFsbCBhcHBseQordG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdywgZXZlbiBpZiBhbnkgcmVtZWR5IGZhaWxzIG9mCitpdHMgZXNzZW50aWFsIHB1cnBvc2UuCisKK1JFVjA4LzUxLzAzCUVuZCBVc2VyIExpY2Vuc2UgQWdyZWVtZW50CmRpZmYgLS1naXQgYS9saWNlbnNlcy9odG1sYyBiL2xpY2Vuc2VzL2h0bWxjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5OWU2MjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9odG1sYwpAQCAtMCwwICsxLDY4IEBACitMRUdBTCBOT1RJQ0UKKworU29mdHdhcmU6IEh0bWxjLCB2ZXJzaW9uIDIuMjEgb2YgU2VwdGVtYmVyIDIwMDkuCitoZXJlaW5hZnRlciByZWZlcnJlZCB0byBhcyAidGhlIHNvZnR3YXJlIi4KKworVGhlIHNvZnR3YXJlIGhhcyBiZWVuIGRlc2lnbmVkIGFuZCBwcm9kdWNlZCBieSBQaWVycmUgV2VpcywKK3Jlc2VhcmNoIHdvcmtlciBmb3IgdGhlIEluc3RpdHV0IE5hdGlvbmFsIGRlIFJlY2hlcmNoZSBlbiBJbmZvcm1hdGlxdWUKK2V0IGVuIEF1dG9tYXRpcXVlIChJTlJJQSkgLSBEb21haW5lIGRlIFZvbHVjZWF1IC0gUm9jcXVlbmNvdXJ0IC0gNzgxNTMKK0xlIENoZXNuYXkgQ2VkZXggLSBGcmFuY2UuCisKK0lOUklBIGhvbGRzIGFsbCBvd25lcnNoaXAgcmlnaHRzIHRvIEh0bWxjLgorCitQcmVhbWJsZToKKworVGhlIHNvZnR3YXJlIGlzIGN1cnJlbnRseSBiZWluZyBkZXZlbG9wZWQgYW5kIElOUklBIGRlc2lyZXMKK3RoYXQgaXQgYmUgdXNlZCBieSB0aGUgc2NpZW50aWZpYyBjb21tdW5pdHkgc28gYXMgdG8gdGVzdCwgZXZhbHVhdGUKK2FuZCBkZXZlbG9wIGl0LiAgVG8gdGhpcyBlbmQsIElOUklBIGhhcyBkZWNpZGVkIHRvIGhhdmUgYSBwcm90b3R5cGUgb2YKK3RoZSBzb2Z0d2FyZSBkaXN0cmlidXRlZCBvbiB0aGUgSW50ZXJuZXQuCisKK2EtIEV4dGVudCBvZiB0aGUgcmlnaHRzIGdyYW50ZWQgYnkgdGhlIElOUklBIHRvIHRoZSB1c2VyIG9mIHRoZSBzb2Z0d2FyZToKKworSU5SSUEgZnJlZWx5IGdyYW50cyB0aGUgcmlnaHQgdG8gdXNlLCBtb2RpZnkgYW5kIGludGVncmF0ZSB0aGUKK3NvZnR3YXJlIGluIGFub3RoZXIgc29mdHdhcmUsIHByb3ZpZGVkIHRoYXQgYWxsIGRlcml2YXRpdmUgd29ya3MgYXJlCitkaXN0cmlidXRlZCB1bmRlciB0aGUgY29uZGl0aW9ucyBkZXNjcmliZWQgaW4gcG9pbnQgYi0gYmVsb3cuCisKK2ItIFJlcHJvZHVjdGlvbiBvZiB0aGUgc29mdHdhcmU6CisKK0lOUklBIGdyYW50cyBhbnkgdXNlciBvZiB0aGUgc29mdHdhcmUgdGhlIHJpZ2h0IHRvIHJlcHJvZHVjZSBpdCBzbyBhcwordG8gY2lyY3VsYXRlIGl0IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgc2FtZSBwdXJwb3NlcyBhbmQgY29uZGl0aW9ucyBhcwordGhvc2UgZGVmaW5lZCBhdCBwb2ludCBhLSBhYm92ZS4gIEFueSBjb3B5IG9mIHRoZSBzb2Z0d2FyZSBhbmQvb3IgcmVsZXZhbnQKK2RvY3VtZW50YXRpb24gbXVzdCBjb21wcmlzZSByZWZlcmVuY2UgdG8gdGhlIG93bmVyc2hpcCBvZiBJTlJJQSBhbmQKK3RoZSBwcmVzZW50IGZpbGUuCisKK1RoZSB1c2VyIHVuZGVydGFrZXMgdG8gZGlzdHJpYnV0ZSB0aGUgc29mdHdhcmUgZWl0aGVyIGFzIHVubW9kaWZpZWQKK3NvdXJjZSBmaWxlcywgaWRlbnRpY2FsIHRvIHRob3NlIG9yaWdpbmFsbHkgbWFkZSBwdWJsaWMgYnkgSU5SSUEsIG9yIGFzCitleGVjdXRhYmxlIGJpbmFyaWVzIG9idGFpbmVkIGJ5IGNvbXBpbGluZyB0aGUgb3JpZ2luYWwgc291cmNlIGZpbGVzLgorCitTb3VyY2UgZGlzdHJpYnV0aW9uIG9mIGRlcml2YXRpdmUgd29ya3Mgb2J0YWluZWQgYnkgbW9kaWZ5aW5nIHRoZQorc29mdHdhcmUgb3IgaW50ZWdyYXRpbmcgaXQgaW4gYW5vdGhlciBzb2Z0d2FyZSBpcyBhbGxvd2VkLCBvbmx5IGlmIHRoZQorZGlzdHJpYnV0aW9uIGNvbnNpc3RzIG9mIHRoZSB1bm1vZGlmaWVkLCBvcmlnaW5hbCBzb3VyY2UgZmlsZXMgZm9yIHRoZQorc29mdHdhcmUsIGFsb25nIHdpdGggZGlmZmVyZW5jZSBmaWxlcyAocGF0Y2hlcykgdG8gYmUgYXBwbGllZCBieSB0aGUKK3VzZXIgb2YgdGhlIGRlcml2YXRpdmUgd29yay4KKworQmluYXJ5IGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIHdvcmtzIG9idGFpbmVkIGJ5IG1vZGlmeWluZyB0aGUKK3NvZnR3YXJlIG9yIGludGVncmF0aW5nIGl0IGluIGFub3RoZXIgc29mdHdhcmUgaXMgYWxsb3dlZCwgb25seSBpZiB0aGUKK2Rpc3RyaWJ1dGlvbiBleHBsaWNpdGVseSBjb250YWlucyB0aGUgZm9sbG93aW5nIHNlbnRhbmNlCisKK2BgSHRtbGMgY29kZSBpcyB1c2VkIGludG8gdGhpcyBzb2Z0d2FyZTsgaHRtbGMgaXMgY29weXJpZ2h0ZWQgSU5SSUEKKyAgYW5kIGNhbiBiZSBkb3dubG9hZGVkIGZyb20gaHR0cDovL2h0bWxjLmlucmlhLmZyLy4nJworCitUeXBpY2FsIHBsYWNlIGZvciB0aGlzIHBocmFzZSBiZWluZyB0aGUgQWJvdXQtZGlhbG9nIGFuZCB0aGUKK2RvY3VtZW50YXRpb24gb2YgdGhlIGRlcml2YXRpdmUgd29yay4KKworQXMgcmVnYXJkcyBhbnkgb3RoZXIgdHlwZSBvZiBkaXN0cmlidXRpb24sIHRoZSB1c2VyIHVuZGVydGFrZXMgdG8KK2FwcGx5IHRvIG9idGFpbiB0aGUgZXhwcmVzcyBhcHByb3ZhbCBvZiBJTlJJQS4KKworYy0gR3VhcmFudGVlczoKKworUGxlYXNlIG5vdGUgdGhhdCB0aGUgc29mdHdhcmUgaXMgYSBwcm9kdWN0IGN1cnJlbnRseSBiZWluZyBkZXZlbG9wZWQuCitJTlJJQSBzaGFsbCBub3QgYmUgcmVzcG9uc2libGUgaW4gYW55IHdheSBjb25jZXJuaW5nIGNvbmZvcm1pdHksIGFuZCBpbgorcGFydGljdWxhciBzaGFsbCBub3QgYmUgbGlhYmxlIHNob3VsZCB0aGUgc29mdHdhcmUgbm90IGNvbXBseSB3aXRoIHRoZQorcmVxdWlyZW1lbnRzIG9mIHRoZSB1c2VyLCBJTlJJQSBub3QgYmVpbmcgb2JsaWdlZCB0byByZXBhaXIgYW55Citwb3NzaWJsZSBkaXJlY3Qgb3IgaW5kaXJlY3QgZGFtYWdlLgorCitkLSBEaXN0cmlidXRpb24gb2YgZmlsZXMgZ2VuZXJhdGVkIGJ5IEh0bWxjOgorCitJTlJJQSBmcmVlbHkgZ3JhbnRzIHRoZSByaWdodCB0byBkaXN0cmlidXRlIHRoZSBmaWxlcyBnZW5lcmF0ZWQKK2J5IEh0bWxjLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvaHlsYWZheHBsdXMgYi9saWNlbnNlcy9oeWxhZmF4cGx1cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGJlOWE0Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvaHlsYWZheHBsdXMKQEAgLTAsMCArMSwxNDAgQEAKKworCSAgICBIeWxhRkFYIEZhY3NpbWlsZSBTb2Z0d2FyZQorCisJQ29weXJpZ2h0IChjKSAxOTkwLTE5OTYgU2FtIExlZmZsZXIKKwlDb3B5cmlnaHQgKGMpIDE5OTEtMTk5NiBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisJSHlsYUZBWCBpcyBhIHRyYWRlbWFyayBvZiBTaWxpY29uIEdyYXBoaWNzLCBJbmMuCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUsIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUgYW5kIAoraXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLCBwcm92aWRlZAordGhhdCAoaSkgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2VzIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbgorYWxsIGNvcGllcyBvZiB0aGUgc29mdHdhcmUgYW5kIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiwgYW5kIChpaSkgdGhlIG5hbWVzIG9mCitTYW0gTGVmZmxlciBhbmQgU2lsaWNvbiBHcmFwaGljcyBtYXkgbm90IGJlIHVzZWQgaW4gYW55IGFkdmVydGlzaW5nIG9yCitwdWJsaWNpdHkgcmVsYXRpbmcgdG8gdGhlIHNvZnR3YXJlIHdpdGhvdXQgdGhlIHNwZWNpZmljLCBwcmlvciB3cml0dGVuCitwZXJtaXNzaW9uIG9mIFNhbSBMZWZmbGVyIGFuZCBTaWxpY29uIEdyYXBoaWNzLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTLUlTIiBBTkQgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgCitFWFBSRVNTLCBJTVBMSUVEIE9SIE9USEVSV0lTRSwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgQU5ZIAorV0FSUkFOVFkgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgCisKK0lOIE5PIEVWRU5UIFNIQUxMIFNBTSBMRUZGTEVSIE9SIFNJTElDT04gR1JBUEhJQ1MgQkUgTElBQkxFIEZPUgorQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgS0lORCwKK09SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywKK1dIRVRIRVIgT1IgTk9UIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIERBTUFHRSwgQU5EIE9OIEFOWSBUSEVPUlkgT0YgCitMSUFCSUxJVFksIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIAorT0YgVEhJUyBTT0ZUV0FSRS4KKworCitBY2tub3dsZWRnZW1lbnRzCistLS0tLS0tLS0tLS0tLS0tCitUaGUgcmVndWxhciBleHByZXNzaW9uIHN1cHBvcnQgaXMgYmFzZWQgb24gSGVucnkgU3BlbmNlcidzIFBPU0lYIDEwMDMuMgorY29tcGxpYW50IHJlZ2V4IHBhY2thZ2UgdGhhdCBoYXMgYGBDb3B5cmlnaHQgMTk5MiwgMTk5MywgMTk5NCBIZW5yeQorU3BlbmNlci4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuJycgQ29uc3VsdCByZWdleC9DT1BZUklHSFQgZm9yIHRoZSBmdWxsCitjb3B5cmlnaHQgbm90aWNlIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHNvZnR3YXJlLgorCitUaGUgY29kZSB0byByZWFkIFBDRiBmb250cyBpcyBkaXN0YW50bHkgcmVsYXRlZCB0byB0aGUgWDExUjUgY29kZQordGhhdCBpcyBgYENvcHlyaWdodCAxOTkwIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3knJzsgY29uc3VsdAorZmF4ZC9QQ0ZGb250LmMrKyBmb3IgdGhlIGZ1bGwgY29weXJpZ2h0IG5vdGljZS4KKworVGhlIHRleHRmbXQgcHJvZ3JhbSBpcyBkaXN0YW50bHkgcmVsYXRlZCB0byB0aGUgbHB0b3BzIHByb2dyYW0gd3JpdHRlbgorYnkgTmVsc29uIEJlZWJlOyB0aGVyZSB3YXMgbm8gY29weXJpZ2h0IG5vdGljZSBvbiB0aGUgdmVyc2lvbiBvZiB0aGUgY29kZQordGhhdCB0ZXh0Zm10IGdyZXcgb3V0IG9mLgorCitUaGUgY29uZmlnLmd1ZXNzIGFuZCBjb25maWcuc3ViIHNjcmlwdHMgYXJlIHBhcnQgb2YgdGhlIEdOVSBhdXRvY29uZgorcGFja2FnZSBhbmQgY292ZXJlZCBieSB0aGUgR05VIFB1YmxpYyBMaWNlbnNlIChHUEwpLiAgU2V2ZXJhbCBpZGVhcworaW4gdGhlIGNvbmZpZ3VyZSBzY3JpcHQgYXJlIGRpcmVjdGx5ICJib3Jyb3dlZCIgZnJvbSBhdXRvY29uZiAoYW5kIEkKK2hhdmUgdHJpZWQgdG8gbWFpbnRhaW4gYXMgbXVjaCBjb21wYXRpYmlsaXR5IGFzIHBvc3NpYmxlKS4KKworVGhlIFBDRiBmb250IGV0Yy9sdXRSUzE4LnBjZiBpbmNsdWRlZCBmb3IgdXNlIHdpdGggdGFnIGxpbmVzIGlzIGEKK2NvbXBpbGVkIHZlcnNpb24gb2YgYSBMdWNpZGFUeXBld3JpdGVyIGZvbnQgdGhhdCB3YXMgY29udHJpYnV0ZWQgdG8gWDExCitieSBCaWdlbG93ICYgSG9sbWVzLiAgUmVkaXN0cmlidXRpb24gb2YgdGhpcyBmb250IHJlcXVpcmVzIGluY2x1c2lvbiBvZgordGhpcyBjb3B5cmlnaHQgbm90aWNlOgorCisKKyAgICBOT1RJQ0UgVE8gVVNFUjogVGhlIHNvdXJjZSBjb2RlLCBpbmNsdWRpbmcgdGhlIGdseXBocyBvciBpY29ucyAKKyAgICBmb3JtaW5nIGEgcGFyIG9mIHRoZSBPUEVOIExPT0sgVE0gR3JhcGhpYyBVc2VyIEludGVyZmFjZSwgb24gdGhpcyAKKyAgICB0YXBlIGFuZCBpbiB0aGVzZSBmaWxlcyBpcyBjb3B5cmlnaHRlZCB1bmRlciBVLlMuIGFuZCBpbnRlcm5hdGlvbmFsCisgICAgbGF3cy4gU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBvZiBNb3VudGFpbiBWaWV3LCBDYWxpZm9ybmlhIG93bnMKKyAgICB0aGUgY29weXJpZ2h0IGFuZCBoYXMgZGVzaWduIHBhdGVudHMgcGVuZGluZyBvbiBtYW55IG9mIHRoZSBpY29ucy4gCisgICAgQVQmVCBpcyB0aGUgb3duZXIgb2YgdGhlIE9QRU4gTE9PSyB0cmFkZW1hcmsgYXNzb2NpYXRlZCB3aXRoIHRoZQorICAgIG1hdGVyaWFscyBvbiB0aGlzIHRhcGUuIFVzZXJzIGFuZCBwb3NzZXNzb3JzIG9mIHRoaXMgc291cmNlIGNvZGUgCisgICAgYXJlIGhlcmVieSBncmFudGVkIGEgbm9uZXhjbHVzaXZlLCByb3lhbHR5LWZyZWUgY29weXJpZ2h0IGFuZCAKKyAgICBkZXNpZ24gcGF0ZW50IGxpY2Vuc2UgdG8gdXNlIHRoaXMgY29kZSBpbiBpbmRpdmlkdWFsIGFuZCAKKyAgICBjb21tZXJjaWFsIHNvZnR3YXJlLiBBIHJveWFsdHktZnJlZSwgbm9uZXhjbHVzaXZlIHRyYWRlbWFyaworICAgIGxpY2Vuc2UgdG8gcmVmZXIgdG8gdGhlIGNvZGUgYW5kIG91dHB1dCBhcyAiT1BFTiBMT09LIiBjb21wYXRpYmxlIAorICAgIGlzIGF2YWlsYWJsZSBmcm9tIEFUJlQgaWYsIGFuZCBvbmx5IGlmLCB0aGUgYXBwZWFyYW5jZSBvZiB0aGUgCisgICAgaWNvbnMgb3IgZ2x5cGhzIGlzIG5vdCBjaGFuZ2VkIGluIGFueSBtYW5uZXIgZXhjZXB0IGFzIGFic29sdXRlbHkKKyAgICBuZWNlc3NhcnkgdG8gYWNjb21tb2RhdGUgdGhlIHN0YW5kYXJkIHJlc29sdXRpb24gb2YgdGhlIHNjcmVlbiBvcgorICAgIG90aGVyIG91dHB1dCBkZXZpY2UsIHRoZSBjb2RlIGFuZCBvdXRwdXQgaXMgbm90IGNoYW5nZWQgZXhjZXB0IGFzIAorICAgIGF1dGhvcml6ZWQgaGVyZWluLCBhbmQgdGhlIGNvZGUgYW5kIG91dHB1dCBpcyB2YWxpZGF0ZWQgYnkgQVQmVC4gCisgICAgQmlnZWxvdyAmIEhvbG1lcyBpcyB0aGUgb3duZXIgb2YgdGhlIEx1Y2lkYSAoUikgdHJhZGVtYXJrIGZvciB0aGUKKyAgICBmb250cyBhbmQgYml0LW1hcHBlZCBpbWFnZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBtYXRlcmlhbHMgb24gdGhpcyAKKyAgICB0YXBlLiBVc2VycyBhcmUgZ3JhbnRlZCBhIHJveWFsdHktZnJlZSwgbm9uZXhjbHVzaXZlIGxpY2Vuc2UgdG8gdXNlCisgICAgdGhlIHRyYWRlbWFyayBvbmx5IHRvIGlkZW50aWZ5IHRoZSBmb250cyBhbmQgYml0LW1hcHBlZCBpbWFnZXMgaWYsIAorICAgIGFuZCBvbmx5IGlmLCB0aGUgZm9udHMgYW5kIGJpdC1tYXBwZWQgaW1hZ2VzIGFyZSBub3QgbW9kaWZpZWQgaW4gYW55CisgICAgd2F5IGJ5IHRoZSB1c2VyLiAKKworCisgICAgQW55IHVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIG11c3QgaW5jbHVkZSwgaW4gdGhlIHVzZXIgZG9jdW1lbnRhdGlvbiAKKyAgICBhbmQgaW50ZXJuYWwgY29tbWVudHMgdG8gdGhlIGNvZGUsIG5vdGljZXMgdG8gdGhlIGVuZCB1c2VyIGFzICAKKyAgICBmb2xsb3dzOgorCisKKyAgICAoYykgQ29weXJpZ2h0IDE5ODkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBTdW4gZGVzaWduIHBhdGVudHMKKyAgICBwZW5kaW5nIGluIHRoZSBVLlMuIGFuZCBmb3JlaWduIGNvdW50cmllcy4gT1BFTiBMT09LIGlzIGEgCisgICAgdHJhZGVtYXJrIG9mIEFUJlQuIFVzZWQgYnkgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBvd25lcnMuCisKKworICAgIChjKSBDb3B5cmlnaHQgQmlnZWxvdyAmIEhvbG1lcyAxOTg2LCAxOTg1LiBMdWNpZGEgaXMgYSByZWdpc3RlcmVkIAorICAgIHRyYWRlbWFyayBvZiBCaWdlbG93ICYgSG9sbWVzLiBQZXJtaXNzaW9uIHRvIHVzZSB0aGUgTHVjaWRhIAorICAgIHRyYWRlbWFyayBpcyBoZXJlYnkgZ3JhbnRlZCBvbmx5IGluIGFzc29jaWF0aW9uIHdpdGggdGhlIGltYWdlcyAKKyAgICBhbmQgZm9udHMgZGVzY3JpYmVkIGluIHRoaXMgZmlsZS4KKworCisKKyAgICBTVU4gTUlDUk9TWVNURU1TLCBJTkMuLCBBVCZULCBBTkQgQklHRUxPVyAmIEhPTE1FUworICAgIE1BS0UgTk8gUkVQUkVTRU5UQVRJT05TIEFCT1VUIFRIRSBTVUlUQUJJTElUWSBPRgorICAgIFRISVMgU09VUkNFIENPREUgRk9SIEFOWSBQVVJQT1NFLiBJVCBJUyBQUk9WSURFRCAiQVMgSVMiIAorICAgIFdJVEhPVVQgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRZIE9GIEFOWSBLSU5ELiAKKyAgICBTVU4gIE1JQ1JPU1lTVEVNUywgSU5DLiwgQVQmVCBBTkQgQklHRUxPVyAgJiBIT0xNRVMsIAorICAgIFNFVkVSQUxMWSBBTkQgSU5ESVZJRFVBTExZLCBESVNDTEFJTSBBTEwgV0FSUkFOVElFUyAKKyAgICBXSVRIIFJFR0FSRCBUTyBUSElTIFNPVVJDRSBDT0RFLCBJTkNMVURJTkcgQUxMIElNUExJRUQKKyAgICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQorICAgIFBBUlRJQ1VMQVIgUFVSUE9TRS4gSU4gTk8gRVZFTlQgU0hBTEwgU1VOIE1JQ1JPU1lTVEVNUywKKyAgICBJTkMuLCBBVCZUIE9SIEJJR0VMT1cgJiBIT0xNRVMgQkUgTElBQkxFIEZPUiBBTlkKKyAgICBTUEVDSUFMLCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLAorICAgIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgICAgICAKKyAgICBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiAgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UKKyAgICBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04KKyAgICBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT1VSQ0UgQ09ERS4KKworCitUaGUgZmlsZXMgcmFtcHMuanBnLCBpdHVmYXhpY2MuYysrLCBhbmQgaXR1ZmF4aWNjLmggY2FtZSB3aXRoIHRoZQorZm9sbG93aW5nIGNvcHlyaWdodCBhbmQgbGljZW5zZS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitJVFVGQVhJQ0MKK0NvcHlyaWdodCAoYykgMjAwOSBNYXJ0aSBNYXJpYSBTYWd1ZXIKKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKK2NvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCit0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCit0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKK2FuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKworVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KK2FsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTAorVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCitGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCitERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIGdlbmZvbnRtYXAucHMgZmlsZSBpcyBjb3B5cmlnaHRlZC4uLiAiQ29weXJpZ2h0IChDKSAyMDAzIEFydGlmZXgKK1NvZnR3YXJlLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLiIgIEl0IGlzIGxpY2Vuc2VkIHVuZGVyIHRlcm1zIG9mIHRoZQorR1BMIHZlcnNpb24gMi4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL2lBU0wgYi9saWNlbnNlcy9pQVNMCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxZDhmYjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9pQVNMCkBAIC0wLDAgKzEsMzEgQEAKKworMS4gQ09QWVJJR0hUIE5PVElDRQorU29tZSBvciBhbGwgb2YgdGhpcyB3b3JrIC0gQ29weXJpZ2h0IMKpIDE5OTktMjAwMiwgSW50ZWwgQ29ycC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworMi4gTElDRU5TRQorCisyLjEuIFRoaXMgaXMgeW91ciBsaWNlbnNlIGZyb20gSW50ZWwgQ29ycC4gdW5kZXIgaXRzIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMuIFlvdSBtYXkgaGF2ZSBhZGRpdGlvbmFsIGxpY2Vuc2UgdGVybXMgZnJvbSB0aGUgcGFydHkgdGhhdCBwcm92aWRlZCB5b3UgdGhpcyBzb2Z0d2FyZSwgY292ZXJpbmcgeW91ciByaWdodCB0byB1c2UgdGhhdCBwYXJ0eSdzIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMuCisKKzIuMi4gSW50ZWwgZ3JhbnRzLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiAoIkxpY2Vuc2VlIikgb2J0YWluaW5nIGEgY29weSBvZiB0aGUgc291cmNlIGNvZGUgYXBwZWFyaW5nIGluIHRoaXMgZmlsZSAoIkNvdmVyZWQgQ29kZSIpIGFuIGlycmV2b2NhYmxlLCBwZXJwZXR1YWwsIHdvcmxkd2lkZSBsaWNlbnNlIHVuZGVyIEludGVsJ3MgY29weXJpZ2h0cyBpbiB0aGUgYmFzZSBjb2RlIGRpc3RyaWJ1dGVkIG9yaWdpbmFsbHkgYnkgSW50ZWwgKCJPcmlnaW5hbCBJbnRlbCBDb2RlIikgdG8gY29weSwgbWFrZSBkZXJpdmF0aXZlcywgZGlzdHJpYnV0ZSwgdXNlIGFuZCBkaXNwbGF5IGFueSBwb3J0aW9uIG9mIHRoZSBDb3ZlcmVkIENvZGUgaW4gYW55IGZvcm0sIHdpdGggdGhlIHJpZ2h0IHRvIHN1YmxpY2Vuc2Ugc3VjaCByaWdodHM7IGFuZAorCisyLjMuIEludGVsIGdyYW50cyBMaWNlbnNlZSBhIG5vbi1leGNsdXNpdmUgYW5kIG5vbi10cmFuc2ZlcmFibGUgcGF0ZW50IGxpY2Vuc2UgKHdpdGggdGhlIHJpZ2h0IHRvIHN1YmxpY2Vuc2UpLCB1bmRlciBvbmx5IHRob3NlIGNsYWltcyBvZiBJbnRlbCBwYXRlbnRzIHRoYXQgYXJlIGluZnJpbmdlZCBieSB0aGUgT3JpZ2luYWwgSW50ZWwgQ29kZSwgdG8gbWFrZSwgdXNlLCBzZWxsLCBvZmZlciB0byBzZWxsLCBhbmQgaW1wb3J0IHRoZSBDb3ZlcmVkIENvZGUgYW5kIGRlcml2YXRpdmUgd29ya3MgdGhlcmVvZiBzb2xlbHkgdG8gdGhlIG1pbmltdW0gZXh0ZW50IG5lY2Vzc2FyeSB0byBleGVyY2lzZSB0aGUgYWJvdmUgY29weXJpZ2h0IGxpY2Vuc2UsIGFuZCBpbiBubyBldmVudCBzaGFsbCB0aGUgcGF0ZW50IGxpY2Vuc2UgZXh0ZW5kIHRvIGFueSBhZGRpdGlvbnMgdG8gb3IgbW9kaWZpY2F0aW9ucyBvZiB0aGUgT3JpZ2luYWwgSW50ZWwgQ29kZS4gTm8gb3RoZXIgbGljZW5zZSBvciByaWdodCBpcyBncmFudGVkIGRpcmVjdGx5IG9yIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2U7IFRoZSBhYm92ZSBjb3B5cmlnaHQgYW5kIHBhdGVudCBsaWNlbnNlIGlzIGdyYW50ZWQgb25seSBpZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworMy4gQ09ORElUSU9OUworCiszLjEuIFJlZGlzdHJpYnV0aW9uIG9mIFNvdXJjZSB3aXRoIFJpZ2h0cyB0byBGdXJ0aGVyIERpc3RyaWJ1dGUgU291cmNlLiBSZWRpc3RyaWJ1dGlvbiBvZiBzb3VyY2UgY29kZSBvZiBhbnkgc3Vic3RhbnRpYWwgcG9ydGlvbiBvZiB0aGUgQ292ZXJlZCBDb2RlIG9yIG1vZGlmaWNhdGlvbiB3aXRoIHJpZ2h0cyB0byBmdXJ0aGVyIGRpc3RyaWJ1dGUgc291cmNlIG11c3QgaW5jbHVkZSB0aGUgYWJvdmUgQ29weXJpZ2h0IE5vdGljZSwgdGhlIGFib3ZlIExpY2Vuc2UsIHRoaXMgbGlzdCBvZiBDb25kaXRpb25zLCBhbmQgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFuZCBFeHBvcnQgQ29tcGxpYW5jZSBwcm92aXNpb24uIEluIGFkZGl0aW9uLCBMaWNlbnNlZSBtdXN0IGNhdXNlIGFsbCBDb3ZlcmVkIENvZGUgdG8gd2hpY2ggTGljZW5zZWUgY29udHJpYnV0ZXMgdG8gY29udGFpbiBhIGZpbGUgZG9jdW1lbnRpbmcgdGhlIGNoYW5nZXMgTGljZW5zZWUgbWFkZSB0byBjcmVhdGUgdGhhdCBDb3ZlcmVkIENvZGUgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuIExpY2Vuc2VlIG11c3QgaW5jbHVkZSBpbiB0aGF0IGZpbGUgdGhlIGRvY3VtZW50YXRpb24gb2YgYW55IGNoYW5nZXMgbWFkZSBieSBhbnkgcHJlZGVjZXNzb3IgTGljZW5zZWUuIExpY2Vuc2VlIG11c3QgaW5jbHVkZSBhIHByb21pbmVudCBzdGF0ZW1lbnQgdGhhdCB0aGUgbW9kaWZpY2F0aW9uIGlzIGRlcml2ZWQsIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGZyb20gT3JpZ2luYWwgSW50ZWwgQ29kZS4KKworMy4yLiBSZWRpc3RyaWJ1dGlvbiBvZiBTb3VyY2Ugd2l0aCBubyBSaWdodHMgdG8gRnVydGhlciBEaXN0cmlidXRlIFNvdXJjZS4gUmVkaXN0cmlidXRpb24gb2Ygc291cmNlIGNvZGUgb2YgYW55IHN1YnN0YW50aWFsIHBvcnRpb24gb2YgdGhlIENvdmVyZWQgQ29kZSBvciBtb2RpZmljYXRpb24gd2l0aG91dCByaWdodHMgdG8gZnVydGhlciBkaXN0cmlidXRlIHNvdXJjZSBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZyBEaXNjbGFpbWVyIGFuZCBFeHBvcnQgQ29tcGxpYW5jZSBwcm92aXNpb24gaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIGRpc3RyaWJ1dGlvbi4gSW4gYWRkaXRpb24sIExpY2Vuc2VlIG1heSBub3QgYXV0aG9yaXplIGZ1cnRoZXIgc3VibGljZW5zZSBvZiBzb3VyY2Ugb2YgYW55IHBvcnRpb24gb2YgdGhlIENvdmVyZWQgQ29kZSwgYW5kIG11c3QgaW5jbHVkZSB0ZXJtcyB0byB0aGUgZWZmZWN0IHRoYXQgdGhlIGxpY2Vuc2UgZnJvbSBMaWNlbnNlZSB0byBpdHMgbGljZW5zZWUgaXMgbGltaXRlZCB0byB0aGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGVtYm9kaWVkIGluIHRoZSBzb2Z0d2FyZSBMaWNlbnNlZSBwcm92aWRlcyB0byBpdHMgbGljZW5zZWUsIGFuZCBub3QgdG8gaW50ZWxsZWN0dWFsIHByb3BlcnR5IGVtYm9kaWVkIGluIG1vZGlmaWNhdGlvbnMgaXRzIGxpY2Vuc2VlIG1heSBtYWtlLgorCiszLjMuIFJlZGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUuIFJlZGlzdHJpYnV0aW9uIGluIGV4ZWN1dGFibGUgZm9ybSBvZiBhbnkgc3Vic3RhbnRpYWwgcG9ydGlvbiBvZiB0aGUgQ292ZXJlZCBDb2RlIG9yIG1vZGlmaWNhdGlvbiBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgQ29weXJpZ2h0IE5vdGljZSwgYW5kIHRoZSBmb2xsb3dpbmcgRGlzY2xhaW1lciBhbmQgRXhwb3J0IENvbXBsaWFuY2UgcHJvdmlzaW9uIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCiszLjQuIEludGVsIHJldGFpbnMgYWxsIHJpZ2h0LCB0aXRsZSwgYW5kIGludGVyZXN0IGluIGFuZCB0byB0aGUgT3JpZ2luYWwgSW50ZWwgQ29kZS4KKworMy41LiBOZWl0aGVyIHRoZSBuYW1lIEludGVsIG5vciBhbnkgb3RoZXIgdHJhZGVtYXJrIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgSW50ZWwgc2hhbGwgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSBvciByZWxhdGluZyB0byB0aGUgQ292ZXJlZCBDb2RlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uIGZyb20gSW50ZWwuCisKKzQuIERJU0NMQUlNRVIgQU5EIEVYUE9SVCBDT01QTElBTkNFCisKKzQuMS4gSU5URUwgTUFLRVMgTk8gV0FSUkFOVFkgT0YgQU5ZIEtJTkQgUkVHQVJESU5HIEFOWSBTT0ZUV0FSRSBQUk9WSURFRCBIRVJFLiBBTlkgU09GVFdBUkUgT1JJR0lOQVRJTkcgRlJPTSBJTlRFTCBPUiBERVJJVkVEIEZST00gSU5URUwgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTLCIgQU5EIElOVEVMIFdJTEwgTk9UIFBST1ZJREUgQU5ZIFNVUFBPUlQsIEFTU0lTVEFOQ0UsIElOU1RBTExBVElPTiwgVFJBSU5JTkcgT1IgT1RIRVIgU0VSVklDRVMuIElOVEVMIFdJTEwgTk9UIFBST1ZJREUgQU5ZIFVQREFURVMsIEVOSEFOQ0VNRU5UUyBPUiBFWFRFTlNJT05TLiBJTlRFTCBTUEVDSUZJQ0FMTFkgRElTQ0xBSU1TIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBOT05JTkZSSU5HRU1FTlQgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCis0LjIuIElOIE5PIEVWRU5UIFNIQUxMIElOVEVMIEhBVkUgQU5ZIExJQUJJTElUWSBUTyBMSUNFTlNFRSwgSVRTIExJQ0VOU0VFUyBPUiBBTlkgT1RIRVIgVEhJUkQgUEFSVFksIEZPUiBBTlkgTE9TVCBQUk9GSVRTLCBMT1NUIERBVEEsIExPU1MgT0YgVVNFIE9SIENPU1RTIE9GIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVMsIE9SIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRISVMgQUdSRUVNRU5ULCBVTkRFUiBBTlkgQ0FVU0UgT0YgQUNUSU9OIE9SIFRIRU9SWSBPRiBMSUFCSUxJVFksIEFORCBJUlJFU1BFQ1RJVkUgT0YgV0hFVEhFUiBJTlRFTCBIQVMgQURWQU5DRSBOT1RJQ0UgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhFU0UgTElNSVRBVElPTlMgU0hBTEwgQVBQTFkgTk9UV0lUSFNUQU5ESU5HIFRIRSBGQUlMVVJFIE9GIFRIRSBFU1NFTlRJQUwgUFVSUE9TRSBPRiBBTlkgTElNSVRFRCBSRU1FRFkuCisKKzQuMy4gTGljZW5zZWUgc2hhbGwgbm90IGV4cG9ydCwgZWl0aGVyIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGFueSBvZiB0aGlzIHNvZnR3YXJlIG9yIHN5c3RlbSBpbmNvcnBvcmF0aW5nIHN1Y2ggc29mdHdhcmUgd2l0aG91dCBmaXJzdCBvYnRhaW5pbmcgYW55IHJlcXVpcmVkIGxpY2Vuc2Ugb3Igb3RoZXIgYXBwcm92YWwgZnJvbSB0aGUgVS4gUy4gRGVwYXJ0bWVudCBvZiBDb21tZXJjZSBvciBhbnkgb3RoZXIgYWdlbmN5IG9yIGRlcGFydG1lbnQgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgR292ZXJubWVudC4gSW4gdGhlIGV2ZW50IExpY2Vuc2VlIGV4cG9ydHMgYW55IHN1Y2ggc29mdHdhcmUgZnJvbSB0aGUgVW5pdGVkIFN0YXRlcyBvciByZS1leHBvcnRzIGFueSBzdWNoIHNvZnR3YXJlIGZyb20gYSBmb3JlaWduIGRlc3RpbmF0aW9uLCBMaWNlbnNlZSBzaGFsbCBlbnN1cmUgdGhhdCB0aGUgZGlzdHJpYnV0aW9uIGFuZCBleHBvcnQvcmUtZXhwb3J0IG9mIHRoZSBzb2Z0d2FyZSBpcyBpbiBjb21wbGlhbmNlIHdpdGggYWxsIGxhd3MsIHJlZ3VsYXRpb25zLCBvcmRlcnMsIG9yIG90aGVyIHJlc3RyaWN0aW9ucyBvZiB0aGUgVS5TLiBFeHBvcnQgQWRtaW5pc3RyYXRpb24gUmVndWxhdGlvbnMuIExpY2Vuc2VlIGFncmVlcyB0aGF0IG5laXRoZXIgaXQgbm9yIGFueSBvZiBpdHMgc3Vic2lkaWFyaWVzIHdpbGwgZXhwb3J0L3JlLWV4cG9ydCBhbnkgdGVjaG5pY2FsIGRhdGEsIHByb2Nlc3MsIHNvZnR3YXJlLCBvciBzZXJ2aWNlLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCB0byBhbnkgY291bnRyeSBmb3Igd2hpY2ggdGhlIFVuaXRlZCBTdGF0ZXMgZ292ZXJubWVudCBvciBhbnkgYWdlbmN5IHRoZXJlb2YgcmVxdWlyZXMgYW4gZXhwb3J0IGxpY2Vuc2UsIG90aGVyIGdvdmVybm1lbnRhbCBhcHByb3ZhbCwgb3IgbGV0dGVyIG9mIGFzc3VyYW5jZSwgd2l0aG91dCBmaXJzdCBvYnRhaW5pbmcgc3VjaCBsaWNlbnNlLCBhcHByb3ZhbCBvciBsZXR0ZXIuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9pY2FjbGllbnQgYi9saWNlbnNlcy9pY2FjbGllbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTc2NjU3MQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL2ljYWNsaWVudApAQCAtMCwwICsxLDUgQEAKK0NJVFJJWChSKSBMSUNFTlNFIEFHUkVFTUVOVAorCitVc2Ugb2YgdGhpcyBjb21wb25lbnQgaXMgc3ViamVjdCB0byB0aGUgQ2l0cml4IGxpY2Vuc2UgY292ZXJpbmcgdGhlIENpdHJpeCBwcm9kdWN0KHMpIHdpdGggd2hpY2ggeW91IHdpbGwgYmUgdXNpbmcgdGhpcyBjb21wb25lbnQuIFRoaXMgY29tcG9uZW50IGlzIG9ubHkgbGljZW5zZWQgZm9yIHVzZSB3aXRoIHN1Y2ggQ2l0cml4IHByb2R1Y3QocykuCisKK0NUWF9jb2RlIEVQX1RfQTM0MzIwCmRpZmYgLS1naXQgYS9saWNlbnNlcy9pY3UgYi9saWNlbnNlcy9pY3UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTFkN2Q1OQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL2ljdQpAQCAtMCwwICsxLDM0IEBACitJQ1UgTGljZW5zZSAtIElDVSAxLjguMSBhbmQgbGF0ZXIKKworQ09QWVJJR0hUIEFORCBQRVJNSVNTSU9OIE5PVElDRQorCitDb3B5cmlnaHQgKGMpIDE5OTUtMjAwMyBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCBvdGhlcnMKK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCitjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlCisiU29mdHdhcmUiKSwgdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nCit3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsCitkaXN0cmlidXRlLCBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMKK3RvIHdob20gdGhlIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKK2NvcHlyaWdodCBub3RpY2UocykgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgb2YKK3RoZSBTb2Z0d2FyZSBhbmQgdGhhdCBib3RoIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlKHMpIGFuZCB0aGlzCitwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUworT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5UCitPRiBUSElSRCBQQVJUWSBSSUdIVFMuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIE9SCitIT0xERVJTIElOQ0xVREVEIElOIFRISVMgTk9USUNFIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBPUiBBTlkgU1BFQ0lBTAorSU5ESVJFQ1QgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORworRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKK05FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OCitXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworRXhjZXB0IGFzIGNvbnRhaW5lZCBpbiB0aGlzIG5vdGljZSwgdGhlIG5hbWUgb2YgYSBjb3B5cmlnaHQgaG9sZGVyCitzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwgdXNlCitvciBvdGhlciBkZWFsaW5ncyBpbiB0aGlzIFNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uCitvZiB0aGUgY29weXJpZ2h0IGhvbGRlci4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0FsbCB0cmFkZW1hcmtzIGFuZCByZWdpc3RlcmVkIHRyYWRlbWFya3MgbWVudGlvbmVkIGhlcmVpbiBhcmUgdGhlIHByb3BlcnR5IG9mIHRoZWlyIHJlc3BlY3RpdmUgb3duZXJzLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvaW1hZ2VtYWdpY2sgYi9saWNlbnNlcy9pbWFnZW1hZ2ljawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjU3ZGJkCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvaW1hZ2VtYWdpY2sKQEAgLTAsMCArMSwxMDMgQEAKK0JlZm9yZSB3ZSBnZXQgdG8gdGhlIHRleHQgb2YgdGhlIGxpY2Vuc2UsIGxldHMganVzdCByZXZpZXcgd2hhdCB0aGUgbGljZW5zZSBzYXlzIGluIHNpbXBsZSB0ZXJtczoKKworSXQgYWxsb3dzIHlvdSB0bzoKKworICAqIGZyZWVseSBkb3dubG9hZCBhbmQgdXNlIEltYWdlTWFnaWNrIHNvZnR3YXJlLCBpbiB3aG9sZSBvciBpbiBwYXJ0LCBmb3IgcGVyc29uYWwsIGNvbXBhbnkgaW50ZXJuYWwsIG9yIGNvbW1lcmNpYWwgcHVycG9zZXM7CisgICogdXNlIEltYWdlTWFnaWNrIHNvZnR3YXJlIGluIHBhY2thZ2VzIG9yIGRpc3RyaWJ1dGlvbnMgdGhhdCB5b3UgY3JlYXRlOworICAqIGxpbmsgYWdhaW5zdCBhIGxpYnJhcnkgdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZTsKKyAgKiBsaW5rIGNvZGUgdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSBhZ2FpbnN0IGEgbGlicmFyeSB1bmRlciB0aGlzIGxpY2Vuc2U7CisgICogbWVyZ2UgY29kZSBpbnRvIGEgd29yayB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlOworICAqIGV4dGVuZCBwYXRlbnQgZ3JhbnRzIHRvIGFueSBjb2RlIHVzaW5nIGNvZGUgdW5kZXIgdGhpcyBsaWNlbnNlOworICAqIGFuZCBleHRlbmQgcGF0ZW50IHByb3RlY3Rpb24uCisKK0l0IGZvcmJpZHMgeW91IHRvOgorCisgICogcmVkaXN0cmlidXRlIGFueSBwaWVjZSBvZiBJbWFnZU1hZ2ljay1vcmlnaW5hdGVkIHNvZnR3YXJlIHdpdGhvdXQgcHJvcGVyIGF0dHJpYnV0aW9uOworICAqIHVzZSBhbnkgbWFya3Mgb3duZWQgYnkgSW1hZ2VNYWdpY2sgU3R1ZGlvIExMQyBpbiBhbnkgd2F5IHRoYXQgbWlnaHQgc3RhdGUgb3IgaW1wbHkgdGhhdCBJbWFnZU1hZ2ljayBTdHVkaW8gTExDIGVuZG9yc2VzIHlvdXIgZGlzdHJpYnV0aW9uOworICAqIHVzZSBhbnkgbWFya3Mgb3duZWQgYnkgSW1hZ2VNYWdpY2sgU3R1ZGlvIExMQyBpbiBhbnkgd2F5IHRoYXQgbWlnaHQgc3RhdGUgb3IgaW1wbHkgdGhhdCB5b3UgY3JlYXRlZCB0aGUgSW1hZ2VNYWdpY2sgc29mdHdhcmUgaW4gcXVlc3Rpb24uCisKK0l0IHJlcXVpcmVzIHlvdSB0bzoKKworICAqIGluY2x1ZGUgYSBjb3B5IG9mIHRoZSBsaWNlbnNlIGluIGFueSByZWRpc3RyaWJ1dGlvbiB5b3UgbWF5IG1ha2UgdGhhdCBpbmNsdWRlcyBJbWFnZU1hZ2ljayBzb2Z0d2FyZTsKKyAgKiBwcm92aWRlIGNsZWFyIGF0dHJpYnV0aW9uIHRvIEltYWdlTWFnaWNrIFN0dWRpbyBMTEMgZm9yIGFueSBkaXN0cmlidXRpb25zIHRoYXQgaW5jbHVkZSBJbWFnZU1hZ2ljayBzb2Z0d2FyZS4KKworSXQgZG9lcyBub3QgcmVxdWlyZSB5b3UgdG86CisKKyAgKiBpbmNsdWRlIHRoZSBzb3VyY2Ugb2YgdGhlIEltYWdlTWFnaWNrIHNvZnR3YXJlIGl0c2VsZiwgb3Igb2YgYW55IG1vZGlmaWNhdGlvbnMgeW91IG1heSBoYXZlIG1hZGUgdG8gaXQsIGluIGFueSByZWRpc3RyaWJ1dGlvbiB5b3UgbWF5IGFzc2VtYmxlIHRoYXQgaW5jbHVkZXMgaXQ7CisgICogc3VibWl0IGNoYW5nZXMgdGhhdCB5b3UgbWFrZSB0byB0aGUgc29mdHdhcmUgYmFjayB0byB0aGUgSW1hZ2VNYWdpY2sgU3R1ZGlvIExMQyAodGhvdWdoIHN1Y2ggZmVlZGJhY2sgaXMgZW5jb3VyYWdlZCkuCisKK0EgZmV3IG90aGVyIGNsYXJpZmljYXRpb25zIGluY2x1ZGU6CisKKyAgKiBJbWFnZU1hZ2ljayBpcyBmcmVlbHkgYXZhaWxhYmxlIHdpdGhvdXQgY2hhcmdlOworICAqIHlvdSBtYXkgaW5jbHVkZSBJbWFnZU1hZ2ljayBvbiBhIERWRCBhcyBsb25nIGFzIHlvdSBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhlIGxpY2Vuc2U7CisgICogeW91IGNhbiBnaXZlIG1vZGlmaWVkIGNvZGUgYXdheSBmb3IgZnJlZSBvciBzZWxsIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgSW1hZ2VNYWdpY2sgbGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSByZXN1bHQgdW5kZXIgYSBkaWZmZXJlbnQgbGljZW5zZSwgYnV0IHlvdSBuZWVkIHRvIGFja25vd2xlZGdlIHRoZSB1c2Ugb2YgdGhlIEltYWdlTWFnaWNrIHNvZnR3YXJlOworICAqIHRoZSBsaWNlbnNlIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUgR1BMIFYzLgorICAqIHdoZW4gZXhwb3J0aW5nIHRoZSBJbWFnZU1hZ2ljayBzb2Z0d2FyZSwgcmV2aWV3IGl0cyBleHBvcnQgY2xhc3NpZmljYXRpb24uCisKK1Rlcm1zIGFuZCBDb25kaXRpb25zIGZvciBVc2UsIFJlcHJvZHVjdGlvbiwgYW5kIERpc3RyaWJ1dGlvbgorCitUaGUgbGVnYWxseSBiaW5kaW5nIGFuZCBhdXRob3JpdGF0aXZlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgYW5kIGRpc3RyaWJ1dGlvbiBvZiBJbWFnZU1hZ2ljayBmb2xsb3c6CisKK0NvcHlyaWdodCAxOTk5LTIwMTIgSW1hZ2VNYWdpY2sgU3R1ZGlvIExMQywgYSBub24tcHJvZml0IG9yZ2FuaXphdGlvbiBkZWRpY2F0ZWQgdG8gbWFraW5nIHNvZnR3YXJlIGltYWdpbmcgc29sdXRpb25zIGZyZWVseSBhdmFpbGFibGUuCisKKzEuIERlZmluaXRpb25zLgorCitMaWNlbnNlIHNoYWxsIG1lYW4gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciB1c2UsIHJlcHJvZHVjdGlvbiwgYW5kIGRpc3RyaWJ1dGlvbiBhcyBkZWZpbmVkIGJ5IFNlY3Rpb25zIDEgdGhyb3VnaCA5IG9mIHRoaXMgZG9jdW1lbnQuCisKK0xpY2Vuc29yIHNoYWxsIG1lYW4gdGhlIGNvcHlyaWdodCBvd25lciBvciBlbnRpdHkgYXV0aG9yaXplZCBieSB0aGUgY29weXJpZ2h0IG93bmVyIHRoYXQgaXMgZ3JhbnRpbmcgdGhlIExpY2Vuc2UuCisKK0xlZ2FsIEVudGl0eSBzaGFsbCBtZWFuIHRoZSB1bmlvbiBvZiB0aGUgYWN0aW5nIGVudGl0eSBhbmQgYWxsIG90aGVyIGVudGl0aWVzIHRoYXQgY29udHJvbCwgYXJlIGNvbnRyb2xsZWQgYnksIG9yIGFyZSB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIHRoYXQgZW50aXR5LiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgY29udHJvbCBtZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoIGVudGl0eSwgd2hldGhlciBieSBjb250cmFjdCBvciBvdGhlcndpc2UsIG9yIChpaSkgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzLCBvciAoaWlpKSBiZW5lZmljaWFsIG93bmVyc2hpcCBvZiBzdWNoIGVudGl0eS4KKworWW91IChvciBZb3VyKSBzaGFsbCBtZWFuIGFuIGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IGV4ZXJjaXNpbmcgcGVybWlzc2lvbnMgZ3JhbnRlZCBieSB0aGlzIExpY2Vuc2UuCisKK1NvdXJjZSBmb3JtIHNoYWxsIG1lYW4gdGhlIHByZWZlcnJlZCBmb3JtIGZvciBtYWtpbmcgbW9kaWZpY2F0aW9ucywgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBzb2Z0d2FyZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbiBzb3VyY2UsIGFuZCBjb25maWd1cmF0aW9uIGZpbGVzLgorCitPYmplY3QgZm9ybSBzaGFsbCBtZWFuIGFueSBmb3JtIHJlc3VsdGluZyBmcm9tIG1lY2hhbmljYWwgdHJhbnNmb3JtYXRpb24gb3IgdHJhbnNsYXRpb24gb2YgYSBTb3VyY2UgZm9ybSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBjb21waWxlZCBvYmplY3QgY29kZSwgZ2VuZXJhdGVkIGRvY3VtZW50YXRpb24sIGFuZCBjb252ZXJzaW9ucyB0byBvdGhlciBtZWRpYSB0eXBlcy4KKworV29yayBzaGFsbCBtZWFuIHRoZSB3b3JrIG9mIGF1dGhvcnNoaXAsIHdoZXRoZXIgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLCBtYWRlIGF2YWlsYWJsZSB1bmRlciB0aGUgTGljZW5zZSwgYXMgaW5kaWNhdGVkIGJ5IGEgY29weXJpZ2h0IG5vdGljZSB0aGF0IGlzIGluY2x1ZGVkIGluIG9yIGF0dGFjaGVkIHRvIHRoZSB3b3JrIChhbiBleGFtcGxlIGlzIHByb3ZpZGVkIGluIHRoZSBBcHBlbmRpeCBiZWxvdykuCisKK0Rlcml2YXRpdmUgV29ya3Mgc2hhbGwgbWVhbiBhbnkgd29yaywgd2hldGhlciBpbiBTb3VyY2Ugb3IgT2JqZWN0IGZvcm0sIHRoYXQgaXMgYmFzZWQgb24gKG9yIGRlcml2ZWQgZnJvbSkgdGhlIFdvcmsgYW5kIGZvciB3aGljaCB0aGUgZWRpdG9yaWFsIHJldmlzaW9ucywgYW5ub3RhdGlvbnMsIGVsYWJvcmF0aW9ucywgb3Igb3RoZXIgbW9kaWZpY2F0aW9ucyByZXByZXNlbnQsIGFzIGEgd2hvbGUsIGFuIG9yaWdpbmFsIHdvcmsgb2YgYXV0aG9yc2hpcC4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIExpY2Vuc2UsIERlcml2YXRpdmUgV29ya3Mgc2hhbGwgbm90IGluY2x1ZGUgd29ya3MgdGhhdCByZW1haW4gc2VwYXJhYmxlIGZyb20sIG9yIG1lcmVseSBsaW5rIChvciBiaW5kIGJ5IG5hbWUpIHRvIHRoZSBpbnRlcmZhY2VzIG9mLCB0aGUgV29yayBhbmQgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLgorCitDb250cmlidXRpb24gc2hhbGwgbWVhbiBhbnkgd29yayBvZiBhdXRob3JzaGlwLCBpbmNsdWRpbmcgdGhlIG9yaWdpbmFsIHZlcnNpb24gb2YgdGhlIFdvcmsgYW5kIGFueSBtb2RpZmljYXRpb25zIG9yIGFkZGl0aW9ucyB0byB0aGF0IFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCB0aGF0IGlzIGludGVudGlvbmFsbHkgc3VibWl0dGVkIHRvIExpY2Vuc29yIGZvciBpbmNsdXNpb24gaW4gdGhlIFdvcmsgYnkgdGhlIGNvcHlyaWdodCBvd25lciBvciBieSBhbiBpbmRpdmlkdWFsIG9yIExlZ2FsIEVudGl0eSBhdXRob3JpemVkIHRvIHN1Ym1pdCBvbiBiZWhhbGYgb2YgdGhlIGNvcHlyaWdodCBvd25lci4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGRlZmluaXRpb24sICJzdWJtaXR0ZWQiIG1lYW5zIGFueSBmb3JtIG9mIGVsZWN0cm9uaWMsIHZlcmJhbCwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9uIHNlbnQgdG8gdGhlIExpY2Vuc29yIG9yIGl0cyByZXByZXNlbnRhdGl2ZXMsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gY29tbXVuaWNhdGlvbiBvbiBlbGVjdHJvbmljIG1haWxpbmcgbGlzdHMsIHNvdXJjZSBjb2RlIGNvbnRyb2wgc3lzdGVtcywgYW5kIGlzc3VlIHRyYWNraW5nIHN5c3RlbXMgdGhhdCBhcmUgbWFuYWdlZCBieSwgb3Igb24gYmVoYWxmIG9mLCB0aGUgTGljZW5zb3IgZm9yIHRoZSBwdXJwb3NlIG9mIGRpc2N1c3NpbmcgYW5kIGltcHJvdmluZyB0aGUgV29yaywgYnV0IGV4Y2x1ZGluZyBjb21tdW5pY2F0aW9uIHRoYXQgaXMgY29uc3BpY3VvdXNseSBtYXJrZWQgb3Igb3RoZXJ3aXNlIGRlc2lnbmF0ZWQgaW4gd3JpdGluZyBieSB0aGUgY29weXJpZ2h0IG93bmVyIGFzIE5vdCBhIENvbnRyaWJ1dGlvbi4KKworQ29udHJpYnV0b3Igc2hhbGwgbWVhbiBMaWNlbnNvciBhbmQgYW55IGluZGl2aWR1YWwgb3IgTGVnYWwgRW50aXR5IG9uIGJlaGFsZiBvZiB3aG9tIGEgQ29udHJpYnV0aW9uIGhhcyBiZWVuIHJlY2VpdmVkIGJ5IExpY2Vuc29yIGFuZCBzdWJzZXF1ZW50bHkgaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yay4KKworMi4gR3JhbnQgb2YgQ29weXJpZ2h0IExpY2Vuc2UuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgZWFjaCBDb250cmlidXRvciBoZXJlYnkgZ3JhbnRzIHRvIFlvdSBhIHBlcnBldHVhbCwgd29ybGR3aWRlLCBub24tZXhjbHVzaXZlLCBuby1jaGFyZ2UsIHJveWFsdHktZnJlZSwgaXJyZXZvY2FibGUgY29weXJpZ2h0IGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBwcmVwYXJlIERlcml2YXRpdmUgV29ya3Mgb2YsIHB1YmxpY2x5IGRpc3BsYXksIHB1YmxpY2x5IHBlcmZvcm0sIHN1YmxpY2Vuc2UsIGFuZCBkaXN0cmlidXRlIHRoZSBXb3JrIGFuZCBzdWNoIERlcml2YXRpdmUgV29ya3MgaW4gU291cmNlIG9yIE9iamVjdCBmb3JtLgorCiszLiBHcmFudCBvZiBQYXRlbnQgTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgdG8gWW91IGEgcGVycGV0dWFsLCB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vLWNoYXJnZSwgcm95YWx0eS1mcmVlLCBpcnJldm9jYWJsZSBwYXRlbnQgbGljZW5zZSB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgb2ZmZXIgdG8gc2VsbCwgc2VsbCwgaW1wb3J0LCBhbmQgb3RoZXJ3aXNlIHRyYW5zZmVyIHRoZSBXb3JrLCB3aGVyZSBzdWNoIGxpY2Vuc2UgYXBwbGllcyBvbmx5IHRvIHRob3NlIHBhdGVudCBjbGFpbXMgbGljZW5zYWJsZSBieSBzdWNoIENvbnRyaWJ1dG9yIHRoYXQgYXJlIG5lY2Vzc2FyaWx5IGluZnJpbmdlZCBieSB0aGVpciBDb250cmlidXRpb24ocykgYWxvbmUgb3IgYnkgY29tYmluYXRpb24gb2YgdGhlaXIgQ29udHJpYnV0aW9uKHMpIHdpdGggdGhlIFdvcmsgdG8gd2hpY2ggc3VjaCBDb250cmlidXRpb24ocykgd2FzIHN1Ym1pdHRlZC4gSWYgWW91IGluc3RpdHV0ZSBwYXRlbnQgbGl0aWdhdGlvbiBhZ2FpbnN0IGFueSBlbnRpdHkgKGluY2x1ZGluZyBhIGNyb3NzLWNsYWltIG9yIGNvdW50ZXJjbGFpbSBpbiBhIGxhd3N1aXQpIGFsbGVnaW5nIHRoYXQgdGhlIFdvcmsgb3IgYSBDb250cmlidXRpb24gaW5jb3Jwb3JhdGVkIHdpdGhpbiB0aGUgV29yayBjb25zdGl0dXRlcyBkaXJlY3Qgb3IgY29udHJpYnV0b3J5IHBhdGVudCBpbmZyaW5nZW1lbnQsIHRoZW4gYW55IHBhdGVudCBsaWNlbnNlcyBncmFudGVkIHRvIFlvdSB1bmRlciB0aGlzIExpY2Vuc2UgZm9yIHRoYXQgV29yayBzaGFsbCB0ZXJtaW5hdGUgYXMgb2YgdGhlIGRhdGUgc3VjaCBsaXRpZ2F0aW9uIGlzIGZpbGVkLgorCis0LiBSZWRpc3RyaWJ1dGlvbi4gWW91IG1heSByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgdGhlcmVvZiBpbiBhbnkgbWVkaXVtLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9ucywgYW5kIGluIFNvdXJjZSBvciBPYmplY3QgZm9ybSwgcHJvdmlkZWQgdGhhdCBZb3UgbWVldCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKKyAgKiBZb3UgbXVzdCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBXb3JrIG9yIERlcml2YXRpdmUgV29ya3MgYSBjb3B5IG9mIHRoaXMgTGljZW5zZTsgYW5kCisgICogWW91IG11c3QgY2F1c2UgYW55IG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCBZb3UgY2hhbmdlZCB0aGUgZmlsZXM7IGFuZAorICAqIFlvdSBtdXN0IHJldGFpbiwgaW4gdGhlIFNvdXJjZSBmb3JtIG9mIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUsIGFsbCBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrLCBhbmQgYXR0cmlidXRpb24gbm90aWNlcyBmcm9tIHRoZSBTb3VyY2UgZm9ybSBvZiB0aGUgV29yaywgZXhjbHVkaW5nIHRob3NlIG5vdGljZXMgdGhhdCBkbyBub3QgcGVydGFpbiB0byBhbnkgcGFydCBvZiB0aGUgRGVyaXZhdGl2ZSBXb3JrczsgYW5kCisgICogSWYgdGhlIFdvcmsgaW5jbHVkZXMgYSAiTk9USUNFIiB0ZXh0IGZpbGUgYXMgcGFydCBvZiBpdHMgZGlzdHJpYnV0aW9uLCB0aGVuIGFueSBEZXJpdmF0aXZlIFdvcmtzIHRoYXQgWW91IGRpc3RyaWJ1dGUgbXVzdCBpbmNsdWRlIGEgcmVhZGFibGUgY29weSBvZiB0aGUgYXR0cmlidXRpb24gbm90aWNlcyBjb250YWluZWQgd2l0aGluIHN1Y2ggTk9USUNFIGZpbGUsIGV4Y2x1ZGluZyB0aG9zZSBub3RpY2VzIHRoYXQgZG8gbm90IHBlcnRhaW4gdG8gYW55IHBhcnQgb2YgdGhlIERlcml2YXRpdmUgV29ya3MsIGluIGF0IGxlYXN0IG9uZSBvZiB0aGUgZm9sbG93aW5nIHBsYWNlczogd2l0aGluIGEgTk9USUNFIHRleHQgZmlsZSBkaXN0cmlidXRlZCBhcyBwYXJ0IG9mIHRoZSBEZXJpdmF0aXZlIFdvcmtzOyB3aXRoaW4gdGhlIFNvdXJjZSBmb3JtIG9yIGRvY3VtZW50YXRpb24sIGlmIHByb3ZpZGVkIGFsb25nIHdpdGggdGhlIERlcml2YXRpdmUgV29ya3M7IG9yLCB3aXRoaW4gYSBkaXNwbGF5IGdlbmVyYXRlZCBieSB0aGUgRGVyaXZhdGl2ZSBXb3JrcywgaWYgYW5kIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgbm90aWNlcyBub3JtYWxseSBhcHBlYXIuIFRoZSBjb250ZW50cyBvZiB0aGUgTk9USUNFIGZpbGUgYXJlIGZvciBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzIG9ubHkgYW5kIGRvIG5vdCBtb2RpZnkgdGhlIExpY2Vuc2UuIFlvdSBtYXkgYWRkIFlvdXIgb3duIGF0dHJpYnV0aW9uIG5vdGljZXMgd2l0aGluIERlcml2YXRpdmUgV29ya3MgdGhhdCBZb3UgZGlzdHJpYnV0ZSwgYWxvbmdzaWRlIG9yIGFzIGFuIGFkZGVuZHVtIHRvIHRoZSBOT1RJQ0UgdGV4dCBmcm9tIHRoZSBXb3JrLCBwcm92aWRlZCB0aGF0IHN1Y2ggYWRkaXRpb25hbCBhdHRyaWJ1dGlvbiBub3RpY2VzIGNhbm5vdCBiZSBjb25zdHJ1ZWQgYXMgbW9kaWZ5aW5nIHRoZSBMaWNlbnNlLgorWW91IG1heSBhZGQgWW91ciBvd24gY29weXJpZ2h0IHN0YXRlbWVudCB0byBZb3VyIG1vZGlmaWNhdGlvbnMgYW5kIG1heSBwcm92aWRlIGFkZGl0aW9uYWwgb3IgZGlmZmVyZW50IGxpY2Vuc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHVzZSwgcmVwcm9kdWN0aW9uLCBvciBkaXN0cmlidXRpb24gb2YgWW91ciBtb2RpZmljYXRpb25zLCBvciBmb3IgYW55IHN1Y2ggRGVyaXZhdGl2ZSBXb3JrcyBhcyBhIHdob2xlLCBwcm92aWRlZCBZb3VyIHVzZSwgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBXb3JrIG90aGVyd2lzZSBjb21wbGllcyB3aXRoIHRoZSBjb25kaXRpb25zIHN0YXRlZCBpbiB0aGlzIExpY2Vuc2UuCisKKzUuIFN1Ym1pc3Npb24gb2YgQ29udHJpYnV0aW9ucy4gVW5sZXNzIFlvdSBleHBsaWNpdGx5IHN0YXRlIG90aGVyd2lzZSwgYW55IENvbnRyaWJ1dGlvbiBpbnRlbnRpb25hbGx5IHN1Ym1pdHRlZCBmb3IgaW5jbHVzaW9uIGluIHRoZSBXb3JrIGJ5IFlvdSB0byB0aGUgTGljZW5zb3Igc2hhbGwgYmUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgd2l0aG91dCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBvciBjb25kaXRpb25zLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGFib3ZlLCBub3RoaW5nIGhlcmVpbiBzaGFsbCBzdXBlcnNlZGUgb3IgbW9kaWZ5IHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgbGljZW5zZSBhZ3JlZW1lbnQgeW91IG1heSBoYXZlIGV4ZWN1dGVkIHdpdGggTGljZW5zb3IgcmVnYXJkaW5nIHN1Y2ggQ29udHJpYnV0aW9ucy4KKworNi4gVHJhZGVtYXJrcy4gVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZSBuYW1lcywgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgb3IgcHJvZHVjdCBuYW1lcyBvZiB0aGUgTGljZW5zb3IsIGV4Y2VwdCBhcyByZXF1aXJlZCBmb3IgcmVhc29uYWJsZSBhbmQgY3VzdG9tYXJ5IHVzZSBpbiBkZXNjcmliaW5nIHRoZSBvcmlnaW4gb2YgdGhlIFdvcmsgYW5kIHJlcHJvZHVjaW5nIHRoZSBjb250ZW50IG9mIHRoZSBOT1RJQ0UgZmlsZS4KKworNy4gRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gVW5sZXNzIHJlcXVpcmVkIGJ5IGFwcGxpY2FibGUgbGF3IG9yIGFncmVlZCB0byBpbiB3cml0aW5nLCBMaWNlbnNvciBwcm92aWRlcyB0aGUgV29yayAoYW5kIGVhY2ggQ29udHJpYnV0b3IgcHJvdmlkZXMgaXRzIENvbnRyaWJ1dGlvbnMpIG9uIGFuIEFTIElTIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFlvdSBhcmUgc29sZWx5IHJlc3BvbnNpYmxlIGZvciBkZXRlcm1pbmluZyB0aGUgYXBwcm9wcmlhdGVuZXNzIG9mIHVzaW5nIG9yIHJlZGlzdHJpYnV0aW5nIHRoZSBXb3JrIGFuZCBhc3N1bWUgYW55IHJpc2tzIGFzc29jaWF0ZWQgd2l0aCBZb3VyIGV4ZXJjaXNlIG9mIHBlcm1pc3Npb25zIHVuZGVyIHRoaXMgTGljZW5zZS4KKworOC4gTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIEluIG5vIGV2ZW50IGFuZCB1bmRlciBubyBsZWdhbCB0aGVvcnksIHdoZXRoZXIgaW4gdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBjb250cmFjdCwgb3Igb3RoZXJ3aXNlLCB1bmxlc3MgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgKHN1Y2ggYXMgZGVsaWJlcmF0ZSBhbmQgZ3Jvc3NseSBuZWdsaWdlbnQgYWN0cykgb3IgYWdyZWVkIHRvIGluIHdyaXRpbmcsIHNoYWxsIGFueSBDb250cmlidXRvciBiZSBsaWFibGUgdG8gWW91IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvZiBhbnkgY2hhcmFjdGVyIGFyaXNpbmcgYXMgYSByZXN1bHQgb2YgdGhpcyBMaWNlbnNlIG9yIG91dCBvZiB0aGUgdXNlIG9yIGluYWJpbGl0eSB0byB1c2UgdGhlIFdvcmsgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gZGFtYWdlcyBmb3IgbG9zcyBvZiBnb29kd2lsbCwgd29yayBzdG9wcGFnZSwgY29tcHV0ZXIgZmFpbHVyZSBvciBtYWxmdW5jdGlvbiwgb3IgYW55IGFuZCBhbGwgb3RoZXIgY29tbWVyY2lhbCBkYW1hZ2VzIG9yIGxvc3NlcyksIGV2ZW4gaWYgc3VjaCBDb250cmlidXRvciBoYXMgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZXMuCisKKzkuIEFjY2VwdGluZyBXYXJyYW50eSBvciBBZGRpdGlvbmFsIExpYWJpbGl0eS4gV2hpbGUgcmVkaXN0cmlidXRpbmcgdGhlIFdvcmsgb3IgRGVyaXZhdGl2ZSBXb3JrcyB0aGVyZW9mLCBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIGNoYXJnZSBhIGZlZSBmb3IsIGFjY2VwdGFuY2Ugb2Ygc3VwcG9ydCwgd2FycmFudHksIGluZGVtbml0eSwgb3Igb3RoZXIgbGlhYmlsaXR5IG9ibGlnYXRpb25zIGFuZC9vciByaWdodHMgY29uc2lzdGVudCB3aXRoIHRoaXMgTGljZW5zZS4gSG93ZXZlciwgaW4gYWNjZXB0aW5nIHN1Y2ggb2JsaWdhdGlvbnMsIFlvdSBtYXkgYWN0IG9ubHkgb24gWW91ciBvd24gYmVoYWxmIGFuZCBvbiBZb3VyIHNvbGUgcmVzcG9uc2liaWxpdHksIG5vdCBvbiBiZWhhbGYgb2YgYW55IG90aGVyIENvbnRyaWJ1dG9yLCBhbmQgb25seSBpZiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LCBkZWZlbmQsIGFuZCBob2xkIGVhY2ggQ29udHJpYnV0b3IgaGFybWxlc3MgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnksIG9yIGNsYWltcyBhc3NlcnRlZCBhZ2FpbnN0LCBzdWNoIENvbnRyaWJ1dG9yIGJ5IHJlYXNvbiBvZiB5b3VyIGFjY2VwdGluZyBhbnkgc3VjaCB3YXJyYW50eSBvciBhZGRpdGlvbmFsIGxpYWJpbGl0eS4KKworSG93IHRvIEFwcGx5IHRoZSBMaWNlbnNlIHRvIHlvdXIgV29yaworCitUbyBhcHBseSB0aGUgSW1hZ2VNYWdpY2sgTGljZW5zZSB0byB5b3VyIHdvcmssIGF0dGFjaCB0aGUgZm9sbG93aW5nIGJvaWxlcnBsYXRlIG5vdGljZSwgd2l0aCB0aGUgZmllbGRzIGVuY2xvc2VkIGJ5IGJyYWNrZXRzICJbXSIgcmVwbGFjZWQgd2l0aCB5b3VyIG93biBpZGVudGlmeWluZyBpbmZvcm1hdGlvbiAoZG9uJ3QgaW5jbHVkZSB0aGUgYnJhY2tldHMpLiBUaGUgdGV4dCBzaG91bGQgYmUgZW5jbG9zZWQgaW4gdGhlIGFwcHJvcHJpYXRlIGNvbW1lbnQgc3ludGF4IGZvciB0aGUgZmlsZSBmb3JtYXQuIFdlIGFsc28gcmVjb21tZW5kIHRoYXQgYSBmaWxlIG9yIGNsYXNzIG5hbWUgYW5kIGRlc2NyaXB0aW9uIG9mIHB1cnBvc2UgYmUgaW5jbHVkZWQgb24gdGhlIHNhbWUgInByaW50ZWQgcGFnZSIgYXMgdGhlIGNvcHlyaWdodCBub3RpY2UgZm9yIGVhc2llciBpZGVudGlmaWNhdGlvbiB3aXRoaW4gdGhpcmQtcGFydHkgYXJjaGl2ZXMuCisKKyAgIENvcHlyaWdodCBbeXl5eV0gW25hbWUgb2YgY29weXJpZ2h0IG93bmVyXQorCisgICBMaWNlbnNlZCB1bmRlciB0aGUgSW1hZ2VNYWdpY2sgTGljZW5zZSAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZQorICAgdGhpcyBmaWxlIGV4Y2VwdCBpbiBjb21wbGlhbmNlIHdpdGggdGhlIExpY2Vuc2UuICBZb3UgbWF5IG9idGFpbiBhIGNvcHkKKyAgIG9mIHRoZSBMaWNlbnNlIGF0CisKKyAgICAgaHR0cDovL3d3dy5pbWFnZW1hZ2ljay5vcmcvc2NyaXB0L2xpY2Vuc2UucGhwCisKKyAgIFVubGVzcyByZXF1aXJlZCBieSBhcHBsaWNhYmxlIGxhdyBvciBhZ3JlZWQgdG8gaW4gd3JpdGluZywgc29mdHdhcmUKKyAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBMaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKKyAgIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gIFNlZSB0aGUKKyAgIExpY2Vuc2UgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMgYW5kIGxpbWl0YXRpb25zCisgICB1bmRlciB0aGUgTGljZW5zZS4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL2luZm9ybWl4LWpkYmMgYi9saWNlbnNlcy9pbmZvcm1peC1qZGJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjljZjJiZjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9pbmZvcm1peC1qZGJjCkBAIC0wLDAgKzEsNjM4IEBACitJbmZvcm1peCBKREJDIERyaXZlcgorCitJbnRlcm5hdGlvbmFsIFByb2dyYW0gTGljZW5zZSBBZ3JlZW1lbnQKKworCitQYXJ0IDEgLSBHZW5lcmFsIFRlcm1zCisKKworUExFQVNFIFJFQUQgVEhJUyBBR1JFRU1FTlQgQ0FSRUZVTExZIEJFRk9SRSBVU0lORyBUSEUgUFJPR1JBTS4gSUJNIFdJTEwgTElDRU5TRQorVEhFIFBST0dSQU0gVE8gWU9VIE9OTFkgSUYgWU9VIEZJUlNUIEFDQ0VQVCBUSEUgVEVSTVMgT0YgVEhJUyBBR1JFRU1FTlQuIEJZCitVU0lORyBUSEUgUFJPR1JBTSBZT1UgQUdSRUUgVE8gVEhFU0UgVEVSTVMuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFIFRFUk1TIE9GCitUSElTIEFHUkVFTUVOVCwgUFJPTVBUTFkgUkVUVVJOIFRIRSBVTlVTRUQgUFJPR1JBTSBUTyBUSEUgUEFSVFkgKEVJVEhFUiBJQk0gT1IKK0lUUyBSRVNFTExFUikgRlJPTSBXSE9NIFlPVSBBQ1FVSVJFRCBJVCBUTyBSRUNFSVZFIEEgUkVGVU5EIE9GIFRIRSBBTU9VTlQgWU9VCitQQUlELgorCitUaGUgUHJvZ3JhbSBpcyBvd25lZCBieSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIG9yIG9uZSBvZgoraXRzIHN1YnNpZGlhcmllcyAoSUJNKSBvciBhbiBJQk0gc3VwcGxpZXIsIGFuZCBpcyBjb3B5cmlnaHRlZCBhbmQgbGljZW5zZWQsIG5vdAorc29sZC4KKworVGhlIHRlcm0gIlByb2dyYW0iIG1lYW5zIHRoZSBvcmlnaW5hbCBwcm9ncmFtIGFuZCBhbGwgd2hvbGUgb3IgcGFydGlhbCBjb3BpZXMgb2YKK2l0LiBBIFByb2dyYW0gY29uc2lzdHMgb2YgbWFjaGluZS1yZWFkYWJsZSBpbnN0cnVjdGlvbnMsIGl0cyBjb21wb25lbnRzLCBkYXRhLAorYXVkaW8tdmlzdWFsIGNvbnRlbnQgKHN1Y2ggYXMgaW1hZ2VzLCB0ZXh0LCByZWNvcmRpbmdzLCBvciBwaWN0dXJlcyksIGFuZAorcmVsYXRlZCBsaWNlbnNlZCBtYXRlcmlhbHMuCisKK1RoaXMgQWdyZWVtZW50IGluY2x1ZGVzIFBhcnQgMSAtIEdlbmVyYWwgVGVybXMsIFBhcnQgMiAtIENvdW50cnktdW5pcXVlIFRlcm1zLAorYW5kICJMaWNlbnNlIEluZm9ybWF0aW9uIiBhbmQgaXMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCByZWdhcmRpbmcgdGhlIHVzZSBvZgordGhpcyBQcm9ncmFtLCBhbmQgcmVwbGFjZXMgYW55IHByaW9yIG9yYWwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9ucyBiZXR3ZWVuIHlvdQorYW5kIElCTS4gVGhlIHRlcm1zIG9mIFBhcnQgMiBhbmQgTGljZW5zZSBJbmZvcm1hdGlvbiBtYXkgcmVwbGFjZSBvciBtb2RpZnkgdGhvc2UKK29mIFBhcnQgMS4KKworCisxLiBMaWNlbnNlCisKK1VzZSBvZiB0aGUgUHJvZ3JhbQorCitJQk0gZ3JhbnRzIHlvdSBhIG5vbmV4Y2x1c2l2ZSBsaWNlbnNlIHRvIHVzZSB0aGUgUHJvZ3JhbS4KKworWW91IG1heSAxKSB1c2UgdGhlIFByb2dyYW0gdG8gdGhlIGV4dGVudCBvZiBhdXRob3JpemF0aW9ucyB5b3UgaGF2ZSBhY3F1aXJlZCBhbmQKKzIpIG1ha2UgYW5kIGluc3RhbGwgY29waWVzIHRvIHN1cHBvcnQgdGhlIGxldmVsIG9mIHVzZSBhdXRob3JpemVkLCBwcm92aWRpbmcgeW91CityZXByb2R1Y2UgdGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIGFueSBvdGhlciBsZWdlbmRzIG9mIG93bmVyc2hpcCBvbiBlYWNoIGNvcHksCitvciBwYXJ0aWFsIGNvcHksIG9mIHRoZSBQcm9ncmFtLgorCitJZiB5b3UgYWNxdWlyZSB0aGlzIFByb2dyYW0gYXMgYSBwcm9ncmFtIHVwZ3JhZGUsIHlvdXIgYXV0aG9yaXphdGlvbiB0byB1c2UgdGhlCitQcm9ncmFtIGZyb20gd2hpY2ggeW91IHVwZ3JhZGVkIGlzIHRlcm1pbmF0ZWQuCisKK1lvdSB3aWxsIGVuc3VyZSB0aGF0IGFueW9uZSB3aG8gdXNlcyB0aGUgUHJvZ3JhbSBkb2VzIHNvIG9ubHkgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQuCisKK1lvdSBtYXkgbm90IDEpIHVzZSwgY29weSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGV4Y2VwdCBhcyBwcm92aWRlZAoraW4gdGhpcyBBZ3JlZW1lbnQ7IDIpIHJldmVyc2UgYXNzZW1ibGUsIHJldmVyc2UgY29tcGlsZSwgb3Igb3RoZXJ3aXNlIHRyYW5zbGF0ZQordGhlIFByb2dyYW0gZXhjZXB0IGFzIHNwZWNpZmljYWxseSBwZXJtaXR0ZWQgYnkgbGF3IHdpdGhvdXQgdGhlIHBvc3NpYmlsaXR5IG9mCitjb250cmFjdHVhbCB3YWl2ZXI7IG9yIDMpIHN1YmxpY2Vuc2UsIHJlbnQsIG9yIGxlYXNlIHRoZSBQcm9ncmFtLgorCitUcmFuc2ZlciBvZiBSaWdodHMgYW5kIE9ibGlnYXRpb25zCisKK1lvdSBtYXkgdHJhbnNmZXIgYWxsIHlvdXIgbGljZW5zZSByaWdodHMgYW5kIG9ibGlnYXRpb25zIHVuZGVyIGEgUHJvb2Ygb2YKK0VudGl0bGVtZW50IGZvciB0aGUgUHJvZ3JhbSB0byBhbm90aGVyIHBhcnR5IGJ5IHRyYW5zZmVycmluZyB0aGUgUHJvb2Ygb2YKK0VudGl0bGVtZW50IGFuZCBhIGNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIGFsbCBkb2N1bWVudGF0aW9uLiBUaGUgdHJhbnNmZXIgb2YKK3lvdXIgbGljZW5zZSByaWdodHMgYW5kIG9ibGlnYXRpb25zIHRlcm1pbmF0ZXMgeW91ciBhdXRob3JpemF0aW9uIHRvIHVzZSB0aGUKK1Byb2dyYW0gdW5kZXIgdGhlIFByb29mIG9mIEVudGl0bGVtZW50LgorCisKKzIuIFByb29mIG9mIEVudGl0bGVtZW50CisKK1RoZSBQcm9vZiBvZiBFbnRpdGxlbWVudCBmb3IgdGhpcyBQcm9ncmFtIGlzIGV2aWRlbmNlIG9mIHlvdXIgYXV0aG9yaXphdGlvbiB0bwordXNlIHRoaXMgUHJvZ3JhbSBhbmQgb2YgeW91ciBlbGlnaWJpbGl0eSBmb3Igd2FycmFudHkgc2VydmljZXMsIGZ1dHVyZSB1cGdyYWRlCitwcm9ncmFtIHByaWNlcyAoaWYgYW5ub3VuY2VkKSwgYW5kIHBvdGVudGlhbCBzcGVjaWFsIG9yIHByb21vdGlvbmFsCitvcHBvcnR1bml0aWVzLgorCisKKzMuIENoYXJnZXMgYW5kIFRheGVzCisKK0lCTSBkZWZpbmVzIHVzZSBmb3IgdGhlIFByb2dyYW0gZm9yIGNoYXJnaW5nIHB1cnBvc2VzIGFuZCBzcGVjaWZpZXMgaXQgaW4gdGhlCitQcm9vZiBvZiBFbnRpdGxlbWVudC4gQ2hhcmdlcyBhcmUgYmFzZWQgb24gZXh0ZW50IG9mIHVzZSBhdXRob3JpemVkLiBJZiB5b3Ugd2lzaAordG8gaW5jcmVhc2UgdGhlIGV4dGVudCBvZiB1c2UsIG5vdGlmeSBJQk0gb3IgaXRzIHJlc2VsbGVyIGFuZCBwYXkgYW55IGFwcGxpY2FibGUKK2NoYXJnZXMuIElCTSBkb2VzIG5vdCBnaXZlIHJlZnVuZHMgb3IgY3JlZGl0cyBmb3IgY2hhcmdlcyBhbHJlYWR5IGR1ZSBvciBwYWlkLgorCitJZiBhbnkgYXV0aG9yaXR5IGltcG9zZXMgYSBkdXR5LCB0YXgsIGxldnkgb3IgZmVlLCBleGNsdWRpbmcgdGhvc2UgYmFzZWQgb24KK0lCTSdzIG5ldCBpbmNvbWUsIHVwb24gdGhlIFByb2dyYW0gc3VwcGxpZWQgYnkgSUJNIHVuZGVyIHRoaXMgQWdyZWVtZW50LCB0aGVuCit5b3UgYWdyZWUgdG8gcGF5IHRoYXQgYW1vdW50IGFzIElCTSBzcGVjaWZpZXMgb3Igc3VwcGx5IGV4ZW1wdGlvbiBkb2N1bWVudGF0aW9uLgorCisKKzQuIExpbWl0ZWQgV2FycmFudHkKKworSUJNIHdhcnJhbnRzIHRoYXQgd2hlbiB0aGUgUHJvZ3JhbSBpcyB1c2VkIGluIHRoZSBzcGVjaWZpZWQgb3BlcmF0aW5nCitlbnZpcm9ubWVudCBpdCB3aWxsIGNvbmZvcm0gdG8gaXRzIHNwZWNpZmljYXRpb25zLiBJQk0gZG9lcyBub3Qgd2FycmFudAordW5pbnRlcnJ1cHRlZCBvciBlcnJvci1mcmVlIG9wZXJhdGlvbiBvZiB0aGUgUHJvZ3JhbSBvciB0aGF0IHdlIHdpbGwgY29ycmVjdCBhbGwKK1Byb2dyYW0gZGVmZWN0cy4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IgdGhlIHJlc3VsdHMgb2J0YWluZWQgZnJvbSB0aGUgdXNlIG9mCit0aGUgUHJvZ3JhbS4gVGhlIHdhcnJhbnR5IHBlcmlvZCBmb3IgdGhlIFByb2dyYW0gZXhwaXJlcyB3aGVuIGl0cyBQcm9ncmFtCitzZXJ2aWNlcyBhcmUgbm8gbG9uZ2VyIGF2YWlsYWJsZS4gVGhlIExpY2Vuc2UgSW5mb3JtYXRpb24gc3BlY2lmaWVzIHRoZSBkdXJhdGlvbgorb2YgUHJvZ3JhbSBzZXJ2aWNlcy4KKworRHVyaW5nIHRoZSB3YXJyYW50eSBwZXJpb2Qgd2FycmFudHkgc2VydmljZSBpcyBwcm92aWRlZCB3aXRob3V0IGNoYXJnZSBmb3IgdGhlCit1bm1vZGlmaWVkIHBvcnRpb24gb2YgdGhlIFByb2dyYW0gdGhyb3VnaCBkZWZlY3QtcmVsYXRlZCBQcm9ncmFtIHNlcnZpY2VzLgorUHJvZ3JhbSBzZXJ2aWNlcyBhcmUgYXZhaWxhYmxlIGZvciBhdCBsZWFzdCBvbmUgeWVhciBmb2xsb3dpbmcgdGhlIFByb2dyYW0ncworZ2VuZXJhbCBhdmFpbGFiaWxpdHkuIFRoZXJlZm9yZSwgdGhlIGR1cmF0aW9uIG9mIHdhcnJhbnR5IHNlcnZpY2UgZGVwZW5kcyBvbgord2hlbiB5b3Ugb2J0YWluIHlvdXIgbGljZW5zZS4gSWYgdGhlIFByb2dyYW0gZG9lcyBub3QgZnVuY3Rpb24gYXMgd2FycmFudGVkCitkdXJpbmcgdGhlIGZpcnN0IHllYXIgYWZ0ZXIgeW91IG9idGFpbiB5b3VyIGxpY2Vuc2UgYW5kIElCTSBpcyB1bmFibGUgdG8gcmVzb2x2ZQordGhlIHByb2JsZW0gYnkgcHJvdmlkaW5nIGEgY29ycmVjdGlvbiwgcmVzdHJpY3Rpb24sIG9yIGJ5cGFzcywgeW91IG1heSByZXR1cm4KK3RoZSBQcm9ncmFtIHRvIHRoZSBwYXJ0eSAoZWl0aGVyIElCTSBvciBpdHMgcmVzZWxsZXIpIGZyb20gd2hvbSB5b3UgYWNxdWlyZWQgaXQKK2FuZCByZWNlaXZlIGEgcmVmdW5kIGluIHRoZSBhbW91bnQgeW91IHBhaWQgZm9yIGl0LiBUbyBiZSBlbGlnaWJsZSwgeW91IG11c3QKK2hhdmUgYWNxdWlyZWQgdGhlIFByb2dyYW0gd2hpbGUgUHJvZ3JhbSBzZXJ2aWNlcyAocmVnYXJkbGVzcyBvZiB0aGUgcmVtYWluaW5nCitkdXJhdGlvbikgd2VyZSBhdmFpbGFibGUgZm9yIGl0LgorCitUSEVTRSBXQVJSQU5USUVTIEFSRSBZT1VSIEVYQ0xVU0lWRSBXQVJSQU5USUVTIEFORCBSRVBMQUNFIEFMTCBPVEhFUiBXQVJSQU5USUVTCitPUiBDT05ESVRJT05TLCBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCitQVVJQT1NFLgorCitUaGVzZSB3YXJyYW50aWVzIGdpdmUgeW91IHNwZWNpZmljIGxlZ2FsIHJpZ2h0cywgYW5kIHlvdSBtYXkgYWxzbyBoYXZlIG90aGVyCityaWdodHMgd2hpY2ggdmFyeSBmcm9tIGp1cmlzZGljdGlvbiB0byBqdXJpc2RpY3Rpb24uIFNvbWUganVyaXNkaWN0aW9ucyBkbyBub3QKK2FsbG93IHRoZSBleGNsdXNpb24gb3IgbGltaXRhdGlvbiBvZiBpbXBsaWVkIHdhcnJhbnRpZXMsIHNvIHRoZSBhYm92ZSBleGNsdXNpb24KK29yIGxpbWl0YXRpb24gbWF5IG5vdCBhcHBseSB0byB5b3UuIEluIHRoYXQgZXZlbnQgc3VjaCB3YXJyYW50aWVzIGFyZSBsaW1pdGVkIGluCitkdXJhdGlvbiB0byB0aGUgd2FycmFudHkgcGVyaW9kLiBObyB3YXJyYW50aWVzIGFwcGx5IGFmdGVyIHRoYXQgcGVyaW9kLgorCisKKzUuIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5CisKK0NpcmN1bXN0YW5jZXMgbWF5IGFyaXNlIHdoZXJlLCBiZWNhdXNlIG9mIGEgZGVmYXVsdCBvbiBJQk0ncyBwYXJ0IG9yIG90aGVyCitsaWFiaWxpdHksIHlvdSBhcmUgZW50aXRsZWQgdG8gcmVjb3ZlciBkYW1hZ2VzIGZyb20gSUJNLiBJbiBlYWNoIHN1Y2ggaW5zdGFuY2UsCityZWdhcmRsZXNzIG9mIHRoZSBiYXNpcyBvbiB3aGljaCB5b3UgbWF5IGJlIGVudGl0bGVkIHRvIGNsYWltIGRhbWFnZXMgZnJvbSBJQk0sCisoaW5jbHVkaW5nIGZ1bmRhbWVudGFsIGJyZWFjaCwgbmVnbGlnZW5jZSwgbWlzcmVwcmVzZW50YXRpb24sIG9yIG90aGVyIGNvbnRyYWN0CitvciB0b3J0IGNsYWltKSwgSUJNIGlzIGxpYWJsZSBmb3Igbm8gbW9yZSB0aGFuIDEpIGRhbWFnZXMgZm9yIGJvZGlseSBpbmp1cnkKKyhpbmNsdWRpbmcgZGVhdGgpIGFuZCBkYW1hZ2UgdG8gcmVhbCBwcm9wZXJ0eSBhbmQgdGFuZ2libGUgcGVyc29uYWwgcHJvcGVydHkgYW5kCisyKSB0aGUgYW1vdW50IG9mIGFueSBvdGhlciBhY3R1YWwgZGlyZWN0IGRhbWFnZXMgdXAgdG8gdGhlIGdyZWF0ZXIgb2YgVS5TLgorJDEwMCwwMDAgKG9yIGVxdWl2YWxlbnQgaW4geW91ciBsb2NhbCBjdXJyZW5jeSkgb3IgdGhlIGNoYXJnZXMgZm9yIHRoZSBQcm9ncmFtCit0aGF0IGlzIHRoZSBzdWJqZWN0IG9mIHRoZSBjbGFpbS4KKworSUJNIFdJTEwgTk9UIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIElORElSRUNUIERBTUFHRVMgT1IgRk9SCitBTlkgRUNPTk9NSUMgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcgTE9TVCBQUk9GSVRTIE9SIFNBVklOR1MpLCBFVkVOIElGCitJQk0sIE9SIElUUyBSRVNFTExFUiwgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBTT01FCitKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgSU5DSURFTlRBTCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyBUSEUgQUJPVkUgTElNSVRBVElPTiBPUiBFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTworWU9VLgorCitJQk0gd2lsbCBub3QgYmUgbGlhYmxlIGZvciAxKSBsb3NzIG9mLCBvciBkYW1hZ2UgdG8sIHlvdXIgcmVjb3JkcyBvciBkYXRhIG9yIDIpCithbnkgZGFtYWdlcyBjbGFpbWVkIGJ5IHlvdSBiYXNlZCBvbiBhbnkgdGhpcmQgcGFydHkgY2xhaW0uCisKK1RoaXMgbGltaXRhdGlvbiBvZiBsaWFiaWxpdHkgYWxzbyBhcHBsaWVzIHRvIGFueSBkZXZlbG9wZXIgb2YgYSBQcm9ncmFtIHN1cHBsaWVkCit0byBJQk0uIEl0IGlzIHRoZSBtYXhpbXVtIGZvciB3aGljaCBJQk0gYW5kIGl0cyBzdXBwbGllcnMgYXJlIGNvbGxlY3RpdmVseQorcmVzcG9uc2libGUuCisKKworNi4gR2VuZXJhbAorCitOb3RoaW5nIGluIHRoaXMgQWdyZWVtZW50IGFmZmVjdHMgYW55IHN0YXR1dG9yeSByaWdodHMgb2YgY29uc3VtZXJzIHRoYXQgY2Fubm90CitiZSB3YWl2ZWQgb3IgbGltaXRlZCBieSBjb250cmFjdC4KKworSUJNIG1heSB0ZXJtaW5hdGUgeW91ciBsaWNlbnNlIGlmIHlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzCitBZ3JlZW1lbnQuIElmIElCTSBkb2VzIHNvLCB5b3VyIGF1dGhvcml6YXRpb24gdG8gdXNlIHRoZSBQcm9ncmFtIGlzIGFsc28KK3Rlcm1pbmF0ZWQuCisKK1lvdSBhZ3JlZSB0byBjb21wbHkgd2l0aCBhcHBsaWNhYmxlIGV4cG9ydCBsYXdzIGFuZCByZWd1bGF0aW9ucy4KKworTmVpdGhlciB5b3Ugbm9yIElCTSB3aWxsIGJyaW5nIGEgbGVnYWwgYWN0aW9uIHVuZGVyIHRoaXMgQWdyZWVtZW50IG1vcmUgdGhhbiB0d28KK3llYXJzIGFmdGVyIHRoZSBjYXVzZSBvZiBhY3Rpb24gYXJvc2UgdW5sZXNzIG90aGVyd2lzZSBwcm92aWRlZCBieSBsb2NhbCBsYXcKK3dpdGhvdXQgdGhlIHBvc3NpYmlsaXR5IG9mIGNvbnRyYWN0dWFsIHdhaXZlciBvciBsaW1pdGF0aW9uLgorCitOZWl0aGVyIHlvdSBub3IgSUJNIGlzIHJlc3BvbnNpYmxlIGZvciBmYWlsdXJlIHRvIGZ1bGZpbGwgYW55IG9ibGlnYXRpb25zIGR1ZSB0bworY2F1c2VzIGJleW9uZCBpdHMgY29udHJvbC4KKworVGhlIGxhd3Mgb2YgdGhlIGNvdW50cnkgaW4gd2hpY2ggeW91IGFjcXVpcmUgdGhlIFByb2dyYW0gZ292ZXJuIHRoaXMgQWdyZWVtZW50LAorZXhjZXB0IDEpIGluIEF1c3RyYWxpYSwgdGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9yIFRlcnJpdG9yeSBpbiB3aGljaCB0aGUKK3RyYW5zYWN0aW9uIGlzIHBlcmZvcm1lZCBnb3Zlcm4gdGhpcyBBZ3JlZW1lbnQ7IDIpIGluIEFsYmFuaWEsIEFybWVuaWEsIEJlbGFydXMsCitCb3NuaWEvSGVyemVnb3ZpbmEsIEJ1bGdhcmlhLCBDcm9hdGlhLCBDemVjaCBSZXB1YmxpYywgR2VvcmdpYSwgSHVuZ2FyeSwKK0themFraHN0YW4sIEtpcmdoaXppYSwgRm9ybWVyIFl1Z29zbGF2IFJlcHVibGljIG9mIE1hY2Vkb25pYSAoRllST00pLCBNb2xkb3ZhLAorUG9sYW5kLCBSb21hbmlhLCBSdXNzaWEsIFNsb3ZhayBSZXB1YmxpYywgU2xvdmVuaWEsIFVrcmFpbmUsIGFuZCBGZWRlcmFsCitSZXB1YmxpYyBvZiBZdWdvc2xhdmlhLCB0aGUgbGF3cyBvZiBBdXN0cmlhIGdvdmVybiB0aGlzIEFncmVlbWVudDsgMykgaW4gdGhlCitVbml0ZWQgS2luZ2RvbSwgYWxsIGRpc3B1dGVzIHJlbGF0aW5nIHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYmUgZ292ZXJuZWQgYnkKK0VuZ2xpc2ggTGF3IGFuZCB3aWxsIGJlIHN1Ym1pdHRlZCB0byB0aGUgZXhjbHVzaXZlIGp1cmlzZGljdGlvbiBvZiB0aGUgRW5nbGlzaAorY291cnRzOyA0KSBpbiBDYW5hZGEsIHRoZSBsYXdzIGluIHRoZSBQcm92aW5jZSBvZiBPbnRhcmlvIGdvdmVybiB0aGlzIEFncmVlbWVudDsKK2FuZCA1KSBpbiB0aGUgVW5pdGVkIFN0YXRlcyBhbmQgUHVlcnRvIFJpY28sIGFuZCBQZW9wbGUncyBSZXB1YmxpYyBvZiBDaGluYSwgdGhlCitsYXdzIG9mIHRoZSBTdGF0ZSBvZiBOZXcgWW9yayBnb3Zlcm4gdGhpcyBBZ3JlZW1lbnQuCisKKworCitQYXJ0IDIgLSBDb3VudHJ5LXVuaXF1ZSBUZXJtcworCisKK0FVU1RSQUxJQToKKworTGltaXRlZCBXYXJyYW50eSAoU2VjdGlvbiA0KToKKworVGhlIGZvbGxvd2luZyBwYXJhZ3JhcGggaXMgYWRkZWQgdG8gdGhpcyBTZWN0aW9uOgorCitUaGUgd2FycmFudGllcyBzcGVjaWZpZWQgaW4gdGhpcyBTZWN0aW9uIGFyZSBpbiBhZGRpdGlvbiB0byBhbnkgcmlnaHRzIHlvdSBtYXkKK2hhdmUgdW5kZXIgdGhlIFRyYWRlIFByYWN0aWNlcyBBY3QgMTk3NCBvciBvdGhlciBsZWdpc2xhdGlvbiBhbmQgYXJlIG9ubHkKK2xpbWl0ZWQgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgdGhlIGFwcGxpY2FibGUgbGVnaXNsYXRpb24uCisKK0xpbWl0YXRpb24gb2YgTGlhYmlsaXR5IChTZWN0aW9uIDUpOgorCitUaGUgZm9sbG93aW5nIHBhcmFncmFwaCBpcyBhZGRlZCB0byB0aGlzIFNlY3Rpb246CisKK1doZXJlIElCTSBpcyBpbiBicmVhY2ggb2YgYSBjb25kaXRpb24gb3Igd2FycmFudHkgaW1wbGllZCBieSB0aGUgVHJhZGUgUHJhY3RpY2VzCitBY3QgMTk3NCwgSUJNJ3MgbGlhYmlsaXR5IGlzIGxpbWl0ZWQgdG8gdGhlIHJlcGFpciBvciByZXBsYWNlbWVudCBvZiB0aGUgZ29vZHMsCitvciB0aGUgc3VwcGx5IG9mIGVxdWl2YWxlbnQgZ29vZHMuIFdoZXJlIHRoYXQgY29uZGl0aW9uIG9yIHdhcnJhbnR5IHJlbGF0ZXMgdG8KK3JpZ2h0IHRvIHNlbGwsIHF1aWV0IHBvc3Nlc3Npb24gb3IgY2xlYXIgdGl0bGUsIG9yIHRoZSBnb29kcyBhcmUgb2YgYSBraW5kCitvcmRpbmFyaWx5IGFjcXVpcmVkIGZvciBwZXJzb25hbCwgZG9tZXN0aWMgb3IgaG91c2Vob2xkIHVzZSBvciBjb25zdW1wdGlvbiwgdGhlbgorbm9uZSBvZiB0aGUgbGltaXRhdGlvbnMgaW4gdGhpcyBwYXJhZ3JhcGggYXBwbHkuCisKKworRUdZUFQ6CisKK0xpbWl0YXRpb24gb2YgTGlhYmlsaXR5IChTZWN0aW9uIDUpOgorCitUaGUgZm9sbG93aW5nIHJlcGxhY2VzIGl0ZW0gMiBpbiB0aGUgZmlyc3QgcGFyYWdyYXBoIG9mIHRoaXMgU2VjdGlvbjoKKworMikgYXMgdG8gYW55IG90aGVyIGFjdHVhbCBkaXJlY3QgZGFtYWdlcywgSUJNJ3MgbGlhYmlsaXR5IHdpbGwgYmUgbGltaXRlZCB0byB0aGUKK3RvdGFsIGFtb3VudCB5b3UgcGFpZCBmb3IgdGhlIFByb2dyYW0gdGhhdCBpcyB0aGUgc3ViamVjdCBvZiB0aGUgY2xhaW0uCisKKworRlJBTkNFIDoKKworTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkgKFNlY3Rpb24gNSk6CisKK1RoZSBmb2xsb3dpbmcgcmVwbGFjZXMgdGhlIHNlY29uZCBzZW50ZW5jZSBpbiB0aGUgZmlyc3QgcGFyYWdyYXBoIG9mIHRoaXMKK1NlY3Rpb246CisKK0luIHN1Y2ggaW5zdGFuY2VzLCByZWdhcmRsZXNzIG9mIHRoZSBiYXNpcyBvbiB3aGljaCB5b3UgYXJlIGVudGl0bGVkIHRvIGNsYWltCitkYW1hZ2VzIGZyb20gSUJNLCBJQk0gaXMgbGlhYmxlIGZvciBubyBtb3JlIHRoYW4gMSkgZGFtYWdlcyBmb3IgYm9kaWx5IGluanVyeQorKGluY2x1ZGluZyBkZWF0aCkgYW5kIGRhbWFnZSB0byByZWFsIHByb3BlcnR5IGFuZCB0YW5naWJsZSBwZXJzb25hbCBwcm9wZXJ0eTsKK2FuZCAyKSB0aGUgYW1vdW50IG9mIGFueSBvdGhlciBhY3R1YWwgZGlyZWN0IGRhbWFnZXMgdXAgdG8gdGhlIGdyZWF0ZXIgb2YgYSkgRVVSCisxMDAsMDAwIChvciBlcXVpdmFsZW50IGluIGxvY2FsIGN1cnJlbmN5KSBvciBiKSB0aGUgY2hhcmdlcyBmb3IgdGhlIFByb2dyYW0KK3doaWNoIGlzIHRoZSBzdWJqZWN0IG9mIHRoZSBjbGFpbS4KKworCitHRVJNQU5ZOgorCitMaW1pdGVkIFdhcnJhbnR5IChTZWN0aW9uIDQpOgorCitUaGUgZm9sbG93aW5nIHBhcmFncmFwaHMgYXJlIGFkZGVkIHRvIHRoaXMgU2VjdGlvbjoKKworVGhlIG1pbmltdW0gd2FycmFudHkgcGVyaW9kIGZvciBQcm9ncmFtcyBpcyBzaXggbW9udGhzLgorCitJbiBjYXNlIGEgUHJvZ3JhbSBpcyBkZWxpdmVyZWQgd2l0aG91dCBTcGVjaWZpY2F0aW9ucywgd2Ugd2lsbCBvbmx5IHdhcnJhbnQgdGhhdAordGhlIFByb2dyYW0gaW5mb3JtYXRpb24gY29ycmVjdGx5IGRlc2NyaWJlcyB0aGUgUHJvZ3JhbSBhbmQgdGhhdCB0aGUgUHJvZ3JhbSBjYW4KK2JlIHVzZWQgYWNjb3JkaW5nIHRvIHRoZSBQcm9ncmFtIGluZm9ybWF0aW9uLiBZb3UgaGF2ZSB0byBjaGVjayB0aGUgdXNhYmlsaXR5CithY2NvcmRpbmcgdG8gdGhlIFByb2dyYW0gaW5mb3JtYXRpb24gd2l0aGluIHRoZSAibW9uZXktYmFjayBndWFyYW50eSIgcGVyaW9kLgorCitUaGUgZm9sbG93aW5nIHJlcGxhY2VzIHRoZSBmaXJzdCBzZW50ZW5jZSBvZiB0aGUgZmlyc3QgcGFyYWdyYXBoIG9mIHRoaXMKK1NlY3Rpb246CisKK1RoZSB3YXJyYW50eSBmb3IgYW4gSUJNIFByb2dyYW0gY292ZXJzIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBQcm9ncmFtIGZvciBpdHMKK25vcm1hbCB1c2UgYW5kIHRoZSBQcm9ncmFtJ3MgY29uZm9ybWl0eSB0byBpdHMgU3BlY2lmaWNhdGlvbnMuCisKK0xpbWl0YXRpb24gb2YgTGlhYmlsaXR5IChTZWN0aW9uIDUpOgorCitUaGUgZm9sbG93aW5nIHBhcmFncmFwaCBpcyBhZGRlZCB0byB0aGUgU2VjdGlvbjoKKworVGhlIGxpbWl0YXRpb25zIGFuZCBleGNsdXNpb25zIHNwZWNpZmllZCBpbiB0aGUgQWdyZWVtZW50IHdpbGwgbm90IGFwcGx5IHRvCitkYW1hZ2VzIGNhdXNlZCBieSBJQk0gd2l0aCBmcmF1ZCBvciBncm9zcyBuZWdsaWdlbmNlLCBhbmQgZm9yIGV4cHJlc3Mgd2FycmFudHkuCisKK0luIGl0ZW0gMiwgcmVwbGFjZSAiVS5TLiAkMTAwLDAwMCIgd2l0aCAiRVVSIDUwMCwwMDAiLgorCitUaGUgZm9sbG93aW5nIHNlbnRlbmNlIGlzIGFkZGVkIHRvIHRoZSBlbmQgb2YgaXRlbSAyIG9mIHRoZSBmaXJzdCBwYXJhZ3JhcGg6CisKK0lCTSdzIGxpYWJpbGl0eSB1bmRlciB0aGlzIGl0ZW0gaXMgbGltaXRlZCB0byB0aGUgdmlvbGF0aW9uIG9mIGVzc2VudGlhbAorY29udHJhY3R1YWwgdGVybXMgaW4gY2FzZXMgb2Ygb3JkaW5hcnkgbmVnbGlnZW5jZS4KKworCitJTkRJQToKKworTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkgKFNlY3Rpb24gNSk6CisKK1RoZSBmb2xsb3dpbmcgcmVwbGFjZXMgaXRlbXMgMSBhbmQgMiBpbiB0aGUgZmlyc3QgcGFyYWdyYXBoOgorCisxKSBsaWFiaWxpdHkgZm9yIGJvZGlseSBpbmp1cnkgKGluY2x1ZGluZyBkZWF0aCkgb3IgZGFtYWdlIHRvIHJlYWwgcHJvcGVydHkgYW5kCit0YW5naWJsZSBwZXJzb25hbCBwcm9wZXJ0eSB3aWxsIGJlIGxpbWl0ZWQgdG8gdGhhdCBjYXVzZWQgYnkgSUJNJ3MgbmVnbGlnZW5jZTsKK2FuZCAyKSBhcyB0byBhbnkgb3RoZXIgYWN0dWFsIGRhbWFnZSBhcmlzaW5nIGluIGFueSBzaXR1YXRpb24gaW52b2x2aW5nCitub25wZXJmb3JtYW5jZSBieSBJQk0gcHVyc3VhbnQgdG8sIG9yIGluIGFueSB3YXkgcmVsYXRlZCB0byB0aGUgc3ViamVjdCBvZiB0aGlzCitBZ3JlZW1lbnQsIElCTSdzIGxpYWJpbGl0eSB3aWxsIGJlIGxpbWl0ZWQgdG8gdGhlIGNoYXJnZSBwYWlkIGJ5IHlvdSBmb3IgdGhlCitpbmRpdmlkdWFsIFByb2dyYW0gdGhhdCBpcyB0aGUgc3ViamVjdCBvZiB0aGUgY2xhaW0uCisKK0dlbmVyYWwgKFNlY3Rpb24gNik6CisKK1RoZSBmb2xsb3dpbmcgcmVwbGFjZXMgdGhlIGZvdXJ0aCBwYXJhZ3JhcGggb2YgdGhpcyBTZWN0aW9uOgorCitJZiBubyBzdWl0IG9yIG90aGVyIGxlZ2FsIGFjdGlvbiBpcyBicm91Z2h0LCB3aXRoaW4gdHdvIHllYXJzIGFmdGVyIHRoZSBjYXVzZSBvZgorYWN0aW9uIGFyb3NlLCBpbiByZXNwZWN0IG9mIGFueSBjbGFpbSB0aGF0IGVpdGhlciBwYXJ0eSBtYXkgaGF2ZSBhZ2FpbnN0IHRoZQorb3RoZXIsIHRoZSByaWdodHMgb2YgdGhlIGNvbmNlcm5lZCBwYXJ0eSBpbiByZXNwZWN0IG9mIHN1Y2ggY2xhaW0gd2lsbCBiZQorZm9yZmVpdGVkIGFuZCB0aGUgb3RoZXIgcGFydHkgd2lsbCBzdGFuZCByZWxlYXNlZCBmcm9tIGl0cyBvYmxpZ2F0aW9ucyBpbgorcmVzcGVjdCBvZiBzdWNoIGNsYWltLgorCisKK0lSRUxBTkQ6CisKK0xpbWl0ZWQgV2FycmFudHkgKFNlY3Rpb24gNCk6CisKK1RoZSBmb2xsb3dpbmcgcGFyYWdyYXBoIGlzIGFkZGVkIHRvIHRoaXMgU2VjdGlvbjoKKworRXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCBpbiB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucywgYWxsIHN0YXR1dG9yeQorY29uZGl0aW9ucywgaW5jbHVkaW5nIGFsbCB3YXJyYW50aWVzIGltcGxpZWQsIGJ1dCB3aXRob3V0IHByZWp1ZGljZSB0byB0aGUKK2dlbmVyYWxpdHkgb2YgdGhlIGZvcmVnb2luZywgYWxsIHdhcnJhbnRpZXMgaW1wbGllZCBieSB0aGUgU2FsZSBvZiBHb29kcyBBY3QKKzE4OTMgb3IgdGhlIFNhbGUgb2YgR29vZHMgYW5kIFN1cHBseSBvZiBTZXJ2aWNlcyBBY3QgMTk4MCBhcmUgaGVyZWJ5IGV4Y2x1ZGVkLgorCitMaW1pdGF0aW9uIG9mIExpYWJpbGl0eSAoU2VjdGlvbiA1KToKKworVGhlIGZvbGxvd2luZyByZXBsYWNlcyBpdGVtcyAxIGFuZCAyIGluIHRoZSBmaXJzdCBwYXJhZ3JhcGggb2YgdGhpcyBTZWN0aW9uOgorCisxKSBkZWF0aCBvciBwZXJzb25hbCBpbmp1cnkgb3IgcGh5c2ljYWwgZGFtYWdlIHRvIHlvdXIgcmVhbCBwcm9wZXJ0eSBzb2xlbHkKK2NhdXNlZCBieSBJQk0ncyBuZWdsaWdlbmNlOyBhbmQgMikgdGhlIGFtb3VudCBvZiBhbnkgb3RoZXIgYWN0dWFsIGRpcmVjdAorZGFtYWdlcywgdXAgdG8gdGhlIGdyZWF0ZXIgb2YgRVVSIDEwMCwwMDAgaW4gcmVzcGVjdCBvZiBQcm9ncmFtcyBvciAxMjUgcGVyY2VudAorb2YgdGhlIGNoYXJnZXMgZm9yIHRoZSBQcm9ncmFtIHRoYXQgaXMgdGhlIHN1YmplY3Qgb2YgdGhlIGNsYWltIG9yIHdoaWNoCitvdGhlcndpc2UgZ2l2ZXMgcmlzZSB0byB0aGUgY2xhaW0uCisKK1RoZSBmb2xsb3dpbmcgcGFyYWdyYXBoIGlzIGFkZGVkIGF0IHRoZSBlbmQgb2YgdGhpcyBTZWN0aW9uOgorCitJQk0ncyBlbnRpcmUgbGlhYmlsaXR5IGFuZCB5b3VyIHNvbGUgcmVtZWR5LCB3aGV0aGVyIGluIGNvbnRyYWN0IG9yIGluIHRvcnQsIGluCityZXNwZWN0IG9mIGFueSBkZWZhdWx0IHdpbGwgYmUgbGltaXRlZCB0byBkYW1hZ2VzLgorCisKK0lUQUxZOgorCitMaW1pdGF0aW9uIG9mIExpYWJpbGl0eSAoU2VjdGlvbiA1KToKKworVGhlIGZvbGxvd2luZyByZXBsYWNlcyB0aGUgc2Vjb25kIHNlbnRlbmNlIGluIHRoZSBmaXJzdCBwYXJhZ3JhcGg6CisKK0luIGVhY2ggc3VjaCBpbnN0YW5jZSB1bmxlc3Mgb3RoZXJ3aXNlIHByb3ZpZGVkIGJ5IG1hbmRhdG9yeSBsYXcsIElCTSBpcyBsaWFibGUKK2ZvciBubyBtb3JlIHRoYW4gZGFtYWdlcyBmb3IgYm9kaWx5IGluanVyeSAoaW5jbHVkaW5nIGRlYXRoKSBhbmQgZGFtYWdlIHRvIHJlYWwKK3Byb3BlcnR5IGFuZCB0YW5naWJsZSBwZXJzb25hbCBwcm9wZXJ0eSBhbmQgMikgYXMgdG8gYW55IG90aGVyIGFjdHVhbCBkYW1hZ2UKK2FyaXNpbmcgaW4gYWxsIHNpdHVhdGlvbnMgaW52b2x2aW5nIG5vbi1wZXJmb3JtYW5jZSBieSBJQk0gcHVyc3VhbnQgdG8sIG9yIGluCithbnkgd2F5IHJlbGF0ZWQgdG8gdGhlIHN1YmplY3QgbWF0dGVyIG9mIHRoaXMgQWdyZWVtZW50LCBJQk0ncyBsaWFiaWxpdHksIHdpbGwKK2JlIGxpbWl0ZWQgdG8gdGhlIHRvdGFsIGFtb3VudCB5b3UgcGFpZCBmb3IgdGhlIFByb2dyYW0gdGhhdCBpcyB0aGUgc3ViamVjdCBvZgordGhlIGNsYWltLgorCisKK05FVyBaRUFMQU5EOgorCitMaW1pdGVkIFdhcnJhbnR5IChTZWN0aW9uIDQpOgorCitUaGUgZm9sbG93aW5nIHBhcmFncmFwaCBpcyBhZGRlZCB0byB0aGlzIFNlY3Rpb246CisKK1RoZSB3YXJyYW50aWVzIHNwZWNpZmllZCBpbiB0aGlzIFNlY3Rpb24gYXJlIGluIGFkZGl0aW9uIHRvIGFueSByaWdodHMgeW91IG1heQoraGF2ZSB1bmRlciB0aGUgQ29uc3VtZXIgR3VhcmFudGVlcyBBY3QgMTk5MyBvciBvdGhlciBsZWdpc2xhdGlvbiB3aGljaCBjYW5ub3QgYmUKK2V4Y2x1ZGVkIG9yIGxpbWl0ZWQuIFRoZSBDb25zdW1lciBHdWFyYW50ZWVzIEFjdCAxOTkzIHdpbGwgbm90IGFwcGx5IGluIHJlc3BlY3QKK29mIGFueSBnb29kcyBvciBzZXJ2aWNlcyB3aGljaCBJQk0gcHJvdmlkZXMsIGlmIHlvdSByZXF1aXJlIHRoZSBnb29kcyBvcgorc2VydmljZXMgZm9yIHRoZSBwdXJwb3NlcyBvZiBhIGJ1c2luZXNzIGFzIGRlZmluZWQgaW4gdGhhdCBBY3QuCisKK0xpbWl0YXRpb24gb2YgTGlhYmlsaXR5IChTZWN0aW9uIDUpOgorCitUaGUgZm9sbG93aW5nIHBhcmFncmFwaCBpcyBhZGRlZCB0byB0aGlzIFNlY3Rpb246CisKK1doZXJlIFByb2dyYW1zIGFyZSBub3QgYWNxdWlyZWQgZm9yIHRoZSBwdXJwb3NlcyBvZiBhIGJ1c2luZXNzIGFzIGRlZmluZWQgaW4gdGhlCitDb25zdW1lciBHdWFyYW50ZWVzIEFjdCAxOTkzLCB0aGUgbGltaXRhdGlvbnMgaW4gdGhpcyBTZWN0aW9uIGFyZSBzdWJqZWN0IHRvIHRoZQorbGltaXRhdGlvbnMgaW4gdGhhdCBBY3QuCisKKworUEVPUExFJ1MgUkVQVUJMSUMgT0YgQ0hJTkE6CisKK0NoYXJnZXMgKFNlY3Rpb24gMyk6CisKK1RoZSBmb2xsb3dpbmcgcGFyYWdyYXBoIGlzIGFkZGVkIHRvIHRoZSBTZWN0aW9uOgorCitBbGwgYmFua2luZyBjaGFyZ2VzIGluY3VycmVkIGluIHRoZSBQZW9wbGUncyBSZXB1YmxpYyBvZiBDaGluYSB3aWxsIGJlIGJvcm5lIGJ5Cit5b3UgYW5kIHRob3NlIGluY3VycmVkIG91dHNpZGUgdGhlIFBlb3BsZSdzIFJlcHVibGljIG9mIENoaW5hIHdpbGwgYmUgYm9ybmUgYnkKK0lCTS4KKworCitVTklURUQgS0lOR0RPTToKKworTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkgKFNlY3Rpb24gNSk6CisKK1RoZSBmb2xsb3dpbmcgcmVwbGFjZXMgaXRlbXMgMSBhbmQgMiBpbiB0aGUgZmlyc3QgcGFyYWdyYXBoIG9mIHRoaXMgU2VjdGlvbjoKKworMSkgZGVhdGggb3IgcGVyc29uYWwgaW5qdXJ5IG9yIHBoeXNpY2FsIGRhbWFnZSB0byB5b3VyIHJlYWwgcHJvcGVydHkgc29sZWx5CitjYXVzZWQgYnkgSUJNJ3MgbmVnbGlnZW5jZTsgMikgdGhlIGFtb3VudCBvZiBhbnkgb3RoZXIgYWN0dWFsIGRpcmVjdCBkYW1hZ2VzLCB1cAordG8gdGhlIGdyZWF0ZXIgb2YgUG91bmRzIFN0ZXJsaW5nIDc1LDAwMCBpbiByZXNwZWN0IG9mIFByb2dyYW1zIG9yIDEyNSBwZXJjZW50CitvZiB0aGUgY2hhcmdlcyBmb3IgdGhlIFByb2dyYW0gdGhhdCBpcyB0aGUgc3ViamVjdCBvZiB0aGUgY2xhaW0gb3Igd2hpY2gKK290aGVyd2lzZSBnaXZlcyByaXNlIHRvIHRoZSBjbGFpbS4KKworVGhlIGZvbGxvd2luZyBpdGVtIGlzIGFkZGVkOgorCiszKSBicmVhY2ggb2YgSUJNJ3Mgb2JsaWdhdGlvbnMgaW1wbGllZCBieSBTZWN0aW9uIDEyIG9mIHRoZSBTYWxlIG9mIEdvb2RzIEFjdAorMTk3OSBvciBTZWN0aW9uIDIgb2YgdGhlIFN1cHBseSBvZiBHb29kcyBhbmQgU2VydmljZXMgQWN0IDE5ODIuCisKK1RoZSBmb2xsb3dpbmcgcGFyYWdyYXBoIGlzIGFkZGVkIGF0IHRoZSBlbmQgb2YgdGhpcyBTZWN0aW9uOgorCitJQk0ncyBlbnRpcmUgbGlhYmlsaXR5IGFuZCB5b3VyIHNvbGUgcmVtZWR5LCB3aGV0aGVyIGluIGNvbnRyYWN0IG9yIGluIHRvcnQsIGluCityZXNwZWN0IG9mIGFueSBkZWZhdWx0IHdpbGwgYmUgbGltaXRlZCB0byBkYW1hZ2VzLgorCisKK1oxMjUtMzMwMS0xMCAxMi8wMSAoRXVybykKKworTElDRU5TRSBJTkZPUk1BVElPTgorCitUaGUgUHJvZ3JhbXMgbGlzdGVkIGJlbG93IGFyZSBsaWNlbnNlZCB1bmRlciB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zCitpbiBhZGRpdGlvbiB0byB0aG9zZSBvZiB0aGUgSW50ZXJuYXRpb25hbCBQcm9ncmFtIExpY2Vuc2UgQWdyZWVtZW50LgorCitQcm9ncmFtIE5hbWU6IElCTSBJbmZvcm1peCBDLUlTQU0gVjUuMTAKK1Byb2dyYW0gTnVtYmVyOiA1NzI0LUM0MgorQXV0aG9yaXphdGlvbiBmb3IgVXNlIG9uIEhvbWUvUG9ydGFibGUgQ29tcHV0ZXI6IDIKK1Byb2dyYW0gU2VydmljZXMgRW5kIERhdGU6IDIwMDMvMDQvMDUKKworUHJvZ3JhbSBOYW1lOiBJQk0gSW5mb3JtaXggQy1JU0FNIFY3LjIwLCBWNy4yMSwgVjcuMjIsIFY3LjIzLCBWNy4yNCwgVjcuMjYKK1Byb2dyYW0gTnVtYmVyOiA1NzI0LUM0MQorQXV0aG9yaXphdGlvbiBmb3IgVXNlIG9uIEhvbWUvUG9ydGFibGUgQ29tcHV0ZXI6IDIKK1Byb2dyYW0gU2VydmljZXMgRW5kIERhdGU6IDIwMDMvMDQvMDUKKworUHJvZ3JhbSBOYW1lOiBJQk0gSW5mb3JtaXggQy1JU0FNIERhdGFCbGFkZSBNb2R1bGUgVjEuMTAKK1Byb2dyYW0gTnVtYmVyOiA1NzI0LUM1NworQXV0aG9yaXphdGlvbiBmb3IgVXNlIG9uIEhvbWUvUG9ydGFibGUgQ29tcHV0ZXI6IDIKK1Byb2dyYW0gU2VydmljZXMgRW5kIERhdGU6IDIwMDMvMDQvMDUKKworUHJvZ3JhbSBOYW1lOiBJQk0gSW5mb3JtaXggQ29ubmVjdCBSdW50aW1lIFYyLjUwLCBWMi42MCwgVjIuNzAKK1Byb2dyYW0gTnVtYmVyOiA1NzI0LUMyNAorQXV0aG9yaXphdGlvbiBmb3IgVXNlIG9uIEhvbWUvUG9ydGFibGUgQ29tcHV0ZXI6IDIKK1Byb2dyYW0gU2VydmljZXMgRW5kIERhdGU6IDIwMDMvMDQvMDUKKworUHJvZ3JhbSBOYW1lOiBJQk0gSW5mb3JtaXggRGF0YSBEaXJlY3RvciBmb3IgV2ViIFYyLjAwCitQcm9ncmFtIE51bWJlcjogNTcyNC1DMjAKK0F1dGhvcml6YXRpb24gZm9yIFVzZSBvbiBIb21lL1BvcnRhYmxlIENvbXB1dGVyOiAyCitQcm9ncmFtIFNlcnZpY2VzIEVuZCBEYXRlOiAyMDAzLzA0LzA1CisKK1Byb2dyYW0gTmFtZTogSUJNIEluZm9ybWl4IERhdGFiYXNlIEFkbWluaXN0cmF0b3IgVjEuMDAKK1Byb2dyYW0gTnVtYmVyOiA1NzI0LUM1MworQXV0aG9yaXphdGlvbiBmb3IgVXNlIG9uIEhvbWUvUG9ydGFibGUgQ29tcHV0ZXI6IDIKK1Byb2dyYW0gU2VydmljZXMgRW5kIERhdGU6IDIwMDMvMDQvMDUKKworUHJvZ3JhbSBOYW1lOiBJQk0gSW5mb3JtaXggRW50ZXJwcmlzZSBHYXRld2F5IE1hbmFnZXIgVjcuMjEKK1Byb2dyYW0gTnVtYmVyOiA1NzI0LUMzMQorQXV0aG9yaXphdGlvbiBmb3IgVXNlIG9uIEhvbWUvUG9ydGFibGUgQ29tcHV0ZXI6IDIKK1Byb2dyYW0gU2VydmljZXMgRW5kIERhdGU6IDIwMDMvMDQvMDUKKworUHJvZ3JhbSBOYW1lOiBJQk0gSW5mb3JtaXggRW50ZXJwcmlzZSBHYXRld2F5IHdpdGggRFJEQSBWNy4zMQorUHJvZ3JhbSBOdW1iZXI6IDU3MjQtQzMxCitBdXRob3JpemF0aW9uIGZvciBVc2Ugb24gSG9tZS9Qb3J0YWJsZSBDb21wdXRlcjogMgorUHJvZ3JhbSBTZXJ2aWNlcyBFbmQgRGF0ZTogMjAwMy8wNC8wNQorCitQcm9ncmFtIE5hbWU6IElCTSBJbmZvcm1peCBFU1FMIGZvciBDT0JPTCBWNS4xMAorUHJvZ3JhbSBOdW1iZXI6IDU3MjQtQzY3CitBdXRob3JpemF0aW9uIGZvciBVc2Ugb24gSG9tZS9Qb3J0YWJsZSBDb21wdXRlcjogMgorUHJvZ3JhbSBTZXJ2aWNlcyBFbmQgRGF0ZTogMjAwMy8wNC8wNQorCitQcm9ncmFtIE5hbWU6IElCTSBJbmZvcm1peCBFU1FMIGZvciBDT0JPTCBWNy4yNQorUHJvZ3JhbSBOdW1iZXI6IDU3MjQtQzY4CitBdXRob3JpemF0aW9uIGZvciBVc2Ugb24gSG9tZS9Qb3J0YWJsZSBDb21wdXRlcjogMgorUHJvZ3JhbSBTZXJ2aWNlcyBFbmQgRGF0ZTogMjAwMy8wNC8wNQorCitQcm9ncmFtIE5hbWU6IElCTSBJbmZvcm1peCBFU1FML0MgRGV2ZWxvcG1lbnQgYW5kIFJ1bnRpbWUgVjUuMTAsIFY1LjExCitQcm9ncmFtIE51bWJlcjogNTcyNC1DNjcKK0F1dGhvcml6YXRpb24gZm9yIFVzZSBvbiBIb21lL1BvcnRhYmxlIENvbXB1dGVyOiAyCitQcm9ncmFtIFNlcnZpY2VzIEVuZCBEYXRlOiAyMDAzLzA0LzA1CisKK1Byb2dyYW0gTmFtZTogSUJNIEluZm9ybWl4IEV4Y2FsaWJ1ciBUZXh0IFNlYXJjaCBEYXRhQmxhZGUgTW9kdWxlIFYxLjMwCitQcm9ncmFtIE51bWJlcjogNTcyNC1DMjkKK0F1dGhvcml6YXRpb24gZm9yIFVzZSBvbiBIb21lL1BvcnRhYmxlIENvbXB1dGVyOiAyCitQcm9ncmFtIFNlcnZpY2VzIEVuZCBEYXRlOiAyMDAzLzA0LzA1CisKK1Byb2dyYW0gTmFtZTogSUJNIEluZm9ybWl4IEV4dGVuZGVkIFBhcmFsbGVsIFNlcnZlciBWOC4zMgorUHJvZ3JhbSBOdW1iZXI6IDU3MjQtQzE5CitBdXRob3JpemF0aW9uIGZvciBVc2Ugb24gSG9tZS9Qb3J0YWJsZSBDb21wdXRlcjogMgorUHJvZ3JhbSBTZXJ2aWNlcyBFbmQgRGF0ZTogMjAwMy8wNC8wNQorCitQcm9ncmFtIE5hbWU6IElCTSBJbmZvcm1peCBJbWFnZSBGb3VuZGF0aW9uIERhdGFCbGFkZSBNb2R1bGUgVjIuMDAKK1Byb2dyYW0gTnVtYmVyOiA1NzI0LUM1OQorQXV0aG9yaXphdGlvbiBmb3IgVXNlIG9uIEhvbWUvUG9ydGFibGUgQ29tcHV0ZXI6IDIKK1Byb2dyYW0gU2VydmljZXMgRW5kIERhdGU6IDIwMDMvMDQvMDUKKworUHJvZ3JhbSBOYW1lOiBJQk0gSW5mb3JtaXggSS1TcHkgVjIuMDAKK1Byb2dyYW0gTnVtYmVyOiA1NzI0LUMzMgorQXV0aG9yaXphdGlvbiBmb3IgVXNlIG9uIEhvbWUvUG9ydGFibGUgQ29tcHV0ZXI6IDIKK1Byb2dyYW0gU2VydmljZXMgRW5kIERhdGU6IDIwMDMvMDQvMDUKKworUHJvZ3JhbSBOYW1lOiBJQk0gSW5mb3JtaXggSkRCQyBEcml2ZXIgVjEuNTAKK1Byb2dyYW0gTnVtYmVyOiA1NzI0LUM0OAorQXV0aG9yaXphdGlvbiBmb3IgVXNlIG9uIEhvbWUvUG9ydGFibGUgQ29tcHV0ZXI6IDIKK1Byb2dyYW0gU2VydmljZXMgRW5kIERhdGU6IDIwMDMvMDQvMDUKKworUHJvZ3JhbSBOYW1lOiBJQk0gSW5mb3JtaXggSkRCQyBEcml2ZXIgLyBFbWJlZGRlZCBTUUxKIFYyLjAwLCBWMi4xMSwgVjIuMjAKK1Byb2dyYW0gTnVtYmVyOiA1NzI0LUMyNQorQXV0aG9yaXphdGlvbiBmb3IgVXNlIG9uIEhvbWUvUG9ydGFibGUgQ29tcHV0ZXI6IDIKK1Byb2dyYW0gU2VydmljZXMgRW5kIERhdGU6IDIwMDMvMDQvMDUKKworUHJvZ3JhbSBOYW1lOiBJQk0gSW5mb3JtaXggTWF4Q29ubmVjdCBWMS4wMAorUHJvZ3JhbSBOdW1iZXI6IDU3MjQtQzU2CitBdXRob3JpemF0aW9uIGZvciBVc2Ugb24gSG9tZS9Qb3J0YWJsZSBDb21wdXRlcjogMgorUHJvZ3JhbSBTZXJ2aWNlcyBFbmQgRGF0ZTogMjAwMy8wNC8wNQorCitQcm9ncmFtIE5hbWU6IElCTSBJbmZvcm1peCBNZXRhQ3ViZSBST0xBUCBPcHRpb24gQWdlbnRzLCBEaXJlY3QgQ2xpZW50cywKK0luZGlyZWN0IENsaWVudHMgVjQuMjAKK1Byb2dyYW0gTnVtYmVyOiA1NzI0LUM1MgorQXV0aG9yaXphdGlvbiBmb3IgVXNlIG9uIEhvbWUvUG9ydGFibGUgQ29tcHV0ZXI6IDIKK1Byb2dyYW0gU2VydmljZXMgRW5kIERhdGU6IDIwMDMvMDQvMDUKKworUHJvZ3JhbSBOYW1lOiBJQk0gSW5mb3JtaXggTkFHIEZpbmFuY2UgRGF0YUJsYWRlIE1vZHVsZSBWMS4xMAorUHJvZ3JhbSBOdW1iZXI6IDU3MjQtQzYwCitBdXRob3JpemF0aW9uIGZvciBVc2Ugb24gSG9tZS9Qb3J0YWJsZSBDb21wdXRlcjogMgorUHJvZ3JhbSBTZXJ2aWNlcyBFbmQgRGF0ZTogMjAwMy8wNC8wNQorCitQcm9ncmFtIE5hbWU6IElCTSBJbmZvcm1peCBORVQgVjUuMTAsIFY1LjExCitQcm9ncmFtIE51bWJlcjogNTcyNC1DNDUKK0F1dGhvcml6YXRpb24gZm9yIFVzZSBvbiBIb21lL1BvcnRhYmxlIENvbXB1dGVyOiAyCitQcm9ncmFtIFNlcnZpY2VzIEVuZCBEYXRlOiAyMDAzLzA0LzA1CisKK1Byb2dyYW0gTmFtZTogSUJNIEluZm9ybWl4IE9iamVjdCBUcmFuc2xhdG9yIFYyLjAwCitQcm9ncmFtIE51bWJlcjogNTcyNC1DMjYKK0F1dGhvcml6YXRpb24gZm9yIFVzZSBvbiBIb21lL1BvcnRhYmxlIENvbXB1dGVyOiAyCitQcm9ncmFtIFNlcnZpY2VzIEVuZCBEYXRlOiAyMDAzLzA0LzA1CisKK1Byb2dyYW0gTmFtZTogSUJNIEluZm9ybWl4IE9uTGluZSBWNS4xMCwgVjUuMTEKK1Byb2dyYW0gTnVtYmVyOiA1NzI0LUM0NworQXV0aG9yaXphdGlvbiBmb3IgVXNlIG9uIEhvbWUvUG9ydGFibGUgQ29tcHV0ZXI6IDIKK1Byb2dyYW0gU2VydmljZXMgRW5kIERhdGU6IDIwMDMvMDQvMDUKKworUHJvZ3JhbSBOYW1lOiBJQk0gSW5mb3JtaXggU0UgVjUuMTAKK1Byb2dyYW0gTnVtYmVyOiA1NzI0LUM0NAorQXV0aG9yaXphdGlvbiBmb3IgVXNlIG9uIEhvbWUvUG9ydGFibGUgQ29tcHV0ZXI6IDIKK1Byb2dyYW0gU2VydmljZXMgRW5kIERhdGU6IDIwMDMvMDQvMDUKKworUHJvZ3JhbSBOYW1lOiBJQk0gSW5mb3JtaXggU0UgVjcuMjAsIFY3LjIxLCBWNy4yMiwgVjcuMjMsIFY3LjI0LCBWNy4yNQorUHJvZ3JhbSBOdW1iZXI6IDU3MjQtQzQzCitBdXRob3JpemF0aW9uIGZvciBVc2Ugb24gSG9tZS9Qb3J0YWJsZSBDb21wdXRlcjogMgorUHJvZ3JhbSBTZXJ2aWNlcyBFbmQgRGF0ZTogMjAwMy8wNC8wNQorCitQcm9ncmFtIE5hbWU6IElCTSBJbmZvcm1peCBTZXJ2ZXIgQWRtaW5pc3RyYXRvciBWMS40MAorUHJvZ3JhbSBOdW1iZXI6IDU3MjQtQzI3CitBdXRob3JpemF0aW9uIGZvciBVc2Ugb24gSG9tZS9Qb3J0YWJsZSBDb21wdXRlcjogMgorUHJvZ3JhbSBTZXJ2aWNlcyBFbmQgRGF0ZTogMjAwMy8wNC8wNQorCitQcm9ncmFtIE5hbWU6IElCTSBJbmZvcm1peCBTcGF0aWFsIERhdGFCbGFkZSBNb2R1bGUgVjguMTEKK1Byb2dyYW0gTnVtYmVyOiA1NzI0LUM2MQorQXV0aG9yaXphdGlvbiBmb3IgVXNlIG9uIEhvbWUvUG9ydGFibGUgQ29tcHV0ZXI6IDIKK1Byb2dyYW0gU2VydmljZXMgRW5kIERhdGU6IDIwMDMvMDQvMDUKKworUHJvZ3JhbSBOYW1lOiBJQk0gSW5mb3JtaXggU1RBUiBWNS4xMCwgVjUuMTEKK1Byb2dyYW0gTnVtYmVyOiA1NzI0LUM0NgorQXV0aG9yaXphdGlvbiBmb3IgVXNlIG9uIEhvbWUvUG9ydGFibGUgQ29tcHV0ZXI6IDIKK1Byb2dyYW0gU2VydmljZXMgRW5kIERhdGU6IDIwMDMvMDQvMDUKKworUHJvZ3JhbSBOYW1lOiBJQk0gSW5mb3JtaXggVGltZVNlcmllcyBEYXRhQmxhZGUgTW9kdWxlIFY0LjAxLCBWNC4wMgorUHJvZ3JhbSBOdW1iZXI6IDU3MjQtQzYyCitBdXRob3JpemF0aW9uIGZvciBVc2Ugb24gSG9tZS9Qb3J0YWJsZSBDb21wdXRlcjogMgorUHJvZ3JhbSBTZXJ2aWNlcyBFbmQgRGF0ZTogMjAwMy8wNC8wNQorCitQcm9ncmFtIE5hbWU6IElCTSBJbmZvcm1peCBUaW1lU2VyaWVzIFJlYWwgVGltZSBMb2FkZXIgQnVuZGxlIFYxLjAwLCBWMS4wMSwKK1YxLjAyCitQcm9ncmFtIE51bWJlcjogNTcyNC1DNjMKK0F1dGhvcml6YXRpb24gZm9yIFVzZSBvbiBIb21lL1BvcnRhYmxlIENvbXB1dGVyOiAyCitQcm9ncmFtIFNlcnZpY2VzIEVuZCBEYXRlOiAyMDAzLzA0LzA1CisKK1Byb2dyYW0gTmFtZTogSUJNIEluZm9ybWl4IFZpZGVvIEZvdW5kYXRpb24gRGF0YUJsYWRlIE1vZHVsZSBWMi4wMAorUHJvZ3JhbSBOdW1iZXI6IDU3MjQtQzY0CitBdXRob3JpemF0aW9uIGZvciBVc2Ugb24gSG9tZS9Qb3J0YWJsZSBDb21wdXRlcjogMgorUHJvZ3JhbSBTZXJ2aWNlcyBFbmQgRGF0ZTogMjAwMy8wNC8wNQorCitQcm9ncmFtIE5hbWU6IElCTSBJbmZvcm1peCBXZWIgRGF0YUJsYWRlIE1vZHVsZSBWNC4xMiwgVjQuMTMKK1Byb2dyYW0gTnVtYmVyOiA1NzI0LUMzMAorQXV0aG9yaXphdGlvbiBmb3IgVXNlIG9uIEhvbWUvUG9ydGFibGUgQ29tcHV0ZXI6IDIKK1Byb2dyYW0gU2VydmljZXMgRW5kIERhdGU6IDIwMDMvMDQvMDUKKworUHJvZ3JhbSBOYW1lOiBJQk0gT2ZmaWNlIENvbm5lY3QgRW50ZXJwcmlzZSBXZWIgRWRpdGlvbiwgUHJvZmVzc2lvbmFsIFdlYgorRWRpdGlvbiwgUGVyc29uYWwgRWRpdGlvbiBWMy4wMAorUHJvZ3JhbSBOdW1iZXI6IDU3MjQtQzE1CitBdXRob3JpemF0aW9uIGZvciBVc2Ugb24gSG9tZS9Qb3J0YWJsZSBDb21wdXRlcjogMgorUHJvZ3JhbSBTZXJ2aWNlcyBFbmQgRGF0ZTogMjAwMy8wNC8wNQorCitFWFBMQU5BVElPTlMgT0YgVEVSTVM6CisKK0F1dGhvcml6YXRpb24gZm9yIFVzZSBvbiBIb21lL1BvcnRhYmxlIENvbXB1dGVyOgorIjEiIG1lYW5zIHRoYXQgdGhlIFByb2dyYW0gbWF5IGJlIHN0b3JlZCBvbiB0aGUgcHJpbWFyeSBtYWNoaW5lIGFuZCBhbm90aGVyCittYWNoaW5lLCBwcm92aWRlZCB0aGF0IHRoZSBQcm9ncmFtIGlzIG5vdCBpbiBhY3RpdmUgdXNlIG9uIGJvdGggbWFjaGluZXMgYXQgdGhlCitzYW1lIHRpbWUuCisiMiIgbWVhbnMgdGhhdCB5b3UgbWF5IG5vdCBjb3B5IGFuZCB1c2UgdGhpcyBQcm9ncmFtIG9uIGFub3RoZXIgY29tcHV0ZXIgd2l0aG91dAorcGF5aW5nIGFkZGl0aW9uYWwgbGljZW5zZSBmZWVzLgorCitQcm9ncmFtIFNlcnZpY2VzIEVuZCBEYXRlOgorVGhlIFByb2dyYW0gaXMgd2FycmFudGVkIGFuZCBwcm9ncmFtIHNlcnZpY2VzIHdpbGwgYmUgYXZhaWxhYmxlIHVudGlsIHRoZSBlbmQKK2RhdGUgc3BlY2lmaWVkIGFib3ZlLgorCitNb25leS1iYWNrIEd1YXJhbnRlZQorCitJZiBmb3IgYW55IHJlYXNvbiB5b3UgYXJlIGRpc3NhdGlzZmllZCB3aXRoIHRoZSBQcm9ncmFtLCByZXR1cm4gaXQgd2l0aGluIDMwCitkYXlzIGZyb20gdGhlIGludm9pY2UgZGF0ZSwgdG8gdGhlIHBhcnR5IChlaXRoZXIgSUJNIG9yIGl0cyByZXNlbGxlcikgZnJvbSB3aG9tCit5b3UgYWNxdWlyZWQgaXQsIGZvciBhIHJlZnVuZC4gVGhpcyBhcHBsaWVzIG9ubHkgdG8geW91ciBmaXJzdCBhY3F1aXNpdGlvbiBvZgordGhlIFByb2dyYW0uCisKK1NwZWNpZmllZCBPcGVyYXRpbmcgRW52aXJvbm1lbnQKKworVGhlIFByb2dyYW0ncyBzcGVjaWZpY2F0aW9ucyBhbmQgc3BlY2lmaWVkIG9wZXJhdGluZyBlbnZpcm9ubWVudCBpbmZvcm1hdGlvbiBtYXkKK2JlIGZvdW5kIGluIGRvY3VtZW50YXRpb24gYWNjb21wYW55aW5nIHRoZSBQcm9ncmFtLCBpZiBhdmFpbGFibGUsIHN1Y2ggYXMgYQorcmVhZC1tZSBmaWxlLCBvciBvdGhlciBpbmZvcm1hdGlvbiBwdWJsaXNoZWQgYnkgSUJNLCBzdWNoIGFzIGFuIGFubm91bmNlbWVudAorbGV0dGVyLgorCitQcm9ncmFtLXVuaXF1ZSBUZXJtcworCitQcm9ncmFtIFNlcnZpY2VzIEVuZCBEYXRlCisKK1Byb2dyYW0gU2VydmljZXMgYXJlIGF2YWlsYWJsZSBhdCBsZWFzdCB1bnRpbCB0aGUgZW5kIGRhdGUgc3BlY2lmaWVkIGFib3ZlLCBhbmQKK3dpbGwgZW5kIG9uIGEgbGF0ZXIgZGF0ZSBpZiBpbmRpY2F0ZWQgb24gdGhlIElCTSBJbmZvcm1peCBQcm9kdWN0IGFuZCBTdXBwb3J0CithcmVhIGF0IGh0dHA6Ly93d3cuaWJtLmNvbS9zb2Z0d2FyZS9kYXRhL2luZm9ybWl4LiBUbyBsb2NhdGUgdGhlIFByb2R1Y3QKK0xpZmVjeWNsZSwgY2xpY2sgb24gU3VwcG9ydCBmcm9tIHRoZSBsZWZ0IG5hdmlnYXRpb24gYmFyIHRvIGFjY2VzcyBUZWNoSW5mbworQ2VudGVyIGFuZCBvdGhlciBJQk0gc3VwcG9ydCBpbmZvcm1hdGlvbi4gV2hlbiBwcm9tcHRlZCwgZW50ZXIgeW91ciBUZWNoSW5mbworQ2VudGVyIFVzZXIgTmFtZSBhbmQgUGFzc3dvcmQuCisKK0xldmVsIG9mIFVzZQorCitZb3VyIHVzZSBvZiBhIFByb2dyYW0gbWF5IG5vdCBleGNlZWQgdGhlIGxldmVsIGRlZmluZWQgYnkgdGhlIG51bWJlciBvZiB1c2UKK2F1dGhvcml6YXRpb25zIHlvdSBoYXZlIGFjcXVpcmVkLiBUaGUgbGV2ZWwgb2YgdXNlIG9mIGEgUHJvZ3JhbSBpcyBzcGVjaWZpZWQgYnkKK29uZSBvZiB0aGUgZm9sbG93aW5nOgorCistIFNlcnZlciAtICJTZXJ2ZXIiIG1lYW5zIGEgc2VydmVyIG9uIHdoaWNoIHRoZSBQcm9ncmFtIGlzIGluc3RhbGxlZCBvcgorZXhlY3V0ZWQuCisKKy0gUHJvY2Vzc29yIC0gIlByb2Nlc3NvciIgbWVhbnMgYSBwcm9jZXNzb3IgdGhhdCBmb3JtcyBwYXJ0IG9mIHRoZSBzZXJ2ZXIgb24KK3doaWNoIHRoZSBQcm9ncmFtIGlzIGluc3RhbGxlZCBvciBleGVjdXRlZC4gWW91IG11c3QgYWNxdWlyZSBhIHVzZSBhdXRob3JpemF0aW9uCitmb3IgZWFjaCBzdWNoIFByb2Nlc3Nvci4KKworLSBDb25jdXJyZW50IFNlc3Npb24gLSBBIENvbmN1cnJlbnQgU2Vzc2lvbiwgYXQgYSBnaXZlbiBwb2ludCBpbiB0aW1lLCBpcyBlYWNoCitsb2dpY2FsIGNvbm5lY3Rpb24sIGV4aXN0aW5nIGF0IHRoYXQgdGltZSwgYmV0d2VlbiB0aGUgUHJvZ3JhbSBhbmQgYW4gZW5kIHVzZXIKK2ludGVyZmFjZSBkZXZpY2UuIEVhY2ggc3VjaCBleGlzdGluZyBjb25uZWN0aW9uIGlzIGNvdW50ZWQgYXMgYSBDb25jdXJyZW50CitTZXNzaW9uIHdoZXRoZXIgb3Igbm90IGl0IGlzIGFjdHVhbGx5IGluIHVzZS4gSWYgYW4gaW5kaXZpZHVhbCBlbmQgdXNlcgorZXN0YWJsaXNoZXMgbXVsdGlwbGUgY29ubmVjdGlvbnMsIGVhY2ggb25lIGlzIGNvdW50ZWQgYXMgYSBzZXBhcmF0ZSBDb25jdXJyZW50CitTZXNzaW9uLCBldmVuIGlmIHRoZXkgc2hhcmUgYSBjb21tb24gcGh5c2ljYWwgcGF0aHdheS4gVGhlIG51bWJlciBvZiBjb25uZWN0aW9ucworaXMgbm90IHJlZHVjZWQgYnkgYW55IHByb2dyYW0gb3IgbWFjaGluZSwgc3VjaCBhcyBhIGZyb250LWVuZCBzZXJ2ZXIgb3IKK211bHRpcGxleGVyLCB3aGljaCBtYXkgYmUgdXNlZCB0byBjb25jZW50cmF0ZSB0aGUgY29ubmVjdGlvbnMuIEVhY2ggYmF0Y2gKK3Byb2Nlc3MgYmVpbmcgZXhlY3V0ZWQgYXQgdGhlIHNhbWUgdGltZSBpcyBhbHNvIGNvbnNpZGVyZWQgdG8gYmUgYSBDb25jdXJyZW50CitTZXNzaW9uLgorCistIFJlZ2lzdGVyZWQgVXNlciAtIEEgUmVnaXN0ZXJlZCBVc2VyIG9mIGEgUHJvZ3JhbSBpcyBhIHNwZWNpZmljIGluZGl2aWR1YWwKK2F1dGhvcml6ZWQgYnkgeW91IHRvIHVzZSB0aGUgUHJvZ3JhbS4gU3VjaCBhbiBpbmRpdmlkdWFsIGlzIGEgUmVnaXN0ZXJlZCBVc2VyCit3aGV0aGVyIG9yIG5vdCB0aGV5IGFyZSBhY3R1YWxseSB1c2luZyB0aGUgUHJvZ3JhbS4KKworUnVudGltZSBQcm9ncmFtcworCitUaGUgZm9sbG93aW5nIHRlcm0gYXBwbGllcyBvbmx5IHRvIHRoZSBJQk0gSW5mb3JtaXggQ29ubmVjdCBSdW50aW1lIGFuZCBJQk0KK0luZm9ybWl4IEVTUUwvQyBSdW50aW1lIFByb2dyYW1zLgorCitZb3UgbWF5IG9ubHkgdXNlIHRoZSBQcm9ncmFtIGZvciBwcm9kdWN0aW9uLgorCisKKworVS5TLiBHb3Zlcm5tZW50IFVzZXJzIFJlc3RyaWN0ZWQgUmlnaHRzCisKK1UuUy4gR292ZXJubWVudCBVc2VycyBSZXN0cmljdGVkIFJpZ2h0cyAtIFVzZSwgZHVwbGljYXRpb24sIG9yIGRpc2Nsb3N1cmUKK3Jlc3RyaWN0ZWQgYnkgdGhlIEdTQSBBRFAgU2NoZWR1bGUgQ29udHJhY3Qgd2l0aCB0aGUgSUJNIENvcnBvcmF0aW9uLgorCitEL046IFNDVDEtRjhNTC0wMAorUC9OOiBDVDFGOE1MCmRpZmYgLS1naXQgYS9saWNlbnNlcy9pbm1vbi1zZmxvdyBiL2xpY2Vuc2VzL2lubW9uLXNmbG93Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0Y2FkYmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9pbm1vbi1zZmxvdwpAQCAtMCwwICsxLDE4MCBAQAorTElDRU5TRSBBR1JFRU1FTlQKKworUExFQVNFIFJFQUQgVEhJUyBMSUNFTlNFIEFHUkVFTUVOVCAoIkFHUkVFTUVOVCIpIENBUkVGVUxMWSBCRUZPUkUgUkVQUk9EVUNJTkcgT1IgSU4gQU5ZIFdBWQorVVRJTElaSU5HIFRIRSBzRmxvdyhSKSBTT0ZUV0FSRSAoIlNPRlRXQVJFIikgQU5EL09SIEFOWSBBQ0NPTVBBTllJTkcgRE9DVU1FTlRBVElPTgorKCJET0NVTUVOVEFUSU9OIikgQU5EL09SIFRIRSBSRUxBVEVEIFNQRUNJRklDQVRJT05TICgiU1BFQ0lGSUNBVElPTlMiKS4gIFlPVVIgUkVQUk9EVUNUSU9OCitPUiBVU0UgT0YgVEhFIFNPRlRXQVJFIEFORC9PUiBUSEUgRE9DVU1FTlRBVElPTiBBTkQvT1IgVEhFIFNQRUNJRklDQVRJT05TIENPTlNUSVRVVEVTIFlPVVIKK0FDQ0VQVEFOQ0UgT0YgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5ULiAgSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBCRSBCT1VORAorQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5ULCBZT1UgTUFZIE5PVCBSRVBST0RVQ0UgT1IgSU4gQU5ZIFdBWSBVVElMSVpFCitUSEUgU09GVFdBUkUgT1IgVEhFIERPQ1VNRU5UQVRJT04gT1IgVEhFIFNQRUNJRklDQVRJT05TLgorCisxLglEZWZpbml0aW9ucy4KKworIkRvY3VtZW50YXRpb24iIG1lYW5zIHRoZSB1c2VyIG1hbnVhbHMsIHRyYWluaW5nIG1hdGVyaWFscywgYW5kIG9wZXJhdGluZyBtYXRlcmlhbHMsIGlmIGFueSwKK0luTW9uIHByb3ZpZGVzIHRvIExpY2Vuc2VlIHVuZGVyIHRoaXMgQWdyZWVtZW50LgorCisiSW5Nb24iIG1lYW5zIEluTW9uIENvcnBvcmF0aW9uLCBpdHMgYWZmaWxpYXRlcyBhbmQgc3Vic2lkaWFyaWVzLgorCisiSW50ZWxsZWN0dWFsIFByb3BlcnR5IFJpZ2h0cyIgbWVhbnMgYW55IHRyYWRlIHNlY3JldHMsIHBhdGVudHMsIGluY2x1ZGluZyB3aXRob3V0CitsaW1pdGF0aW9uIGFueSBwYXRlbnRzIGNvdmVyaW5nIHRoZSBTb2Z0d2FyZSwgY29weXJpZ2h0cywga25vdy1ob3csIG1vcmFsIHJpZ2h0cyBhbmQKK3NpbWlsYXIgcmlnaHRzIG9mIGFueSB0eXBlIHVuZGVyIHRoZSBsYXdzIG9mIGFueSBnb3Zlcm5tZW50YWwgYXV0aG9yaXR5LCBkb21lc3RpYyBvcgorZm9yZWlnbiwgaW5jbHVkaW5nIGFsbCBhcHBsaWNhdGlvbnMgYW5kIHJlZ2lzdHJhdGlvbnMgcmVsYXRpbmcgdG8gYW55IG9mIHRoZSBmb3JlZ29pbmcuCisKKyJMaWNlbnNlZSBIYXJkd2FyZSIgbWVhbnMgYWxsIGNvbXB1dGVycywgcm91dGVycywgb3Igb3RoZXIgZXF1aXBtZW50IG93bmVkIG9yIGNvbnRyb2xsZWQgYnkKK29yIG9uIGJlaGFsZiBvZiBMaWNlbnNlZS4KKworIlByb2R1Y3RzIiBtZWFucyBhbnkgYW5kIGFsbCBzb2Z0d2FyZSBhcHBsaWNhdGlvbnMsIGNvbXB1dGVycywgcm91dGVycywgb3Igb3RoZXIgZXF1aXBtZW50CittYW51ZmFjdHVyZWQgYnkgb3Igb24gYmVoYWxmIG9mIExpY2Vuc2VlIGZvciB0aGUgcHVycG9zZSBvZiByZXNhbGUgb3IgbGVhc2UgdG8gYW55IG90aGVyCit0aGlyZCBwYXJ0eSwgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIGJ5IExpY2Vuc2VlIGZyZWUgb2YgY2hhcmdlLgorCisiU29mdHdhcmUiIG1lYW5zIHRoZSBzRmxvdyhSKSBzb2Z0d2FyZSBwcm9ncmFtcywgaW4gc291cmNlIG9yIGJpbmFyeSBjb2RlIGZvcm1hdCwgdGhhdAorTGljZW5zZWUgbGljZW5zZXMgZnJvbSBJbk1vbiB1bmRlciB0aGlzIEFncmVlbWVudCBhbmQgYW55IGJ1ZyBmaXhlcyBvciBlcnJvciBjb3JyZWN0aW9ucword2hpY2ggSW5Nb24gbWF5IHByb3ZpZGUgdG8gTGljZW5zZWUuCisKKyJTcGVjaWZpY2F0aW9ucyIgbWVhbnMgdGhlIHB1Ymxpc2hlZCBzcGVjaWZpY2F0aW9ucyBwcm92aWRlZCBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgYnkKK0luTW9uIGF0OiBodHRwOi8vd3d3LnNmbG93Lm9yZy4KKworIlRyYWRlbWFyayIgbWVhbnMgSW5Nb24ncyAic0Zsb3coUikiIHRyYWRlbWFyay4KKworMi4JTGljZW5zZSBHcmFudC4KKworMi4xCVNvZnR3YXJlLCBEb2N1bWVudGF0aW9uIGFuZCBTcGVjaWZpY2F0aW9ucyBMaWNlbnNlIEdyYW50LiAgSW5Nb24gaGVyZWJ5IGdyYW50cyB0bworTGljZW5zZWUsIHVuZGVyIGFsbCBvZiBJbk1vbidzIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBSaWdodHMgdGhlcmVpbiwgYSBwZXJwZXR1YWwgKHN1YmplY3QKK3RvIEluTW9uJ3MgdGVybWluYXRpb24gcmlnaHRzIHVuZGVyIFNlY3Rpb24gNyBiZWxvdyksIG5vbmV4Y2x1c2l2ZSwgcm95YWx0eS1mcmVlLCB3b3JsZHdpZGUsCit0cmFuc2ZlcmFibGUsIHN1YmxpY2Vuc2FibGUgbGljZW5zZSwgdG86ICAoaSkgdXNlIGFuZCByZXByb2R1Y2UgdGhlIFNvZnR3YXJlLCB0aGUKK0RvY3VtZW50YXRpb24sIGFuZCB0aGUgU3BlY2lmaWNhdGlvbnM7IChpaSkgbW9kaWZ5IHRoZSBTb2Z0d2FyZTsgKGlpaSkgaW1wbGVtZW50IHRoZQorU3BlY2lmaWNhdGlvbnMgaW4gdGhlIFByb2R1Y3RzOyAoaXYpIGluc3RhbGwgdGhlIFNvZnR3YXJlLCBvciBzb2Z0d2FyZSBpbiB3aGljaCB0aGUKK1NwZWNpZmljYXRpb25zIGhhdmUgYmVlbiBpbXBsZW1lbnRlZCwgb24gTGljZW5zZWUgSGFyZHdhcmUgYW5kIFByb2R1Y3RzLCBhbmQgKHYpIGRpc3RyaWJ1dGUKK2FueSBQcm9kdWN0cyB0aGF0IGluY2x1ZGUgdGhlIFNvZnR3YXJlLCB0aGUgRG9jdW1lbnRhdGlvbiwgb3Igc29mdHdhcmUgaW4gd2hpY2ggdGhlCitTcGVjaWZpY2F0aW9ucyBoYXZlIGJlZW4gaW1wbGVtZW50ZWQuCisKKzIuMglUcmFkZW1hcmsgTGljZW5zZS4gIEluTW9uIGhlcmVieSBncmFudHMgdG8gTGljZW5zZWUgYSBwZXJwZXR1YWwgKHN1YmplY3QgdG8gSW5Nb24ncwordGVybWluYXRpb24gcmlnaHRzIHVuZGVyIFNlY3Rpb24gNyBiZWxvdyksIG5vbmV4Y2x1c2l2ZSwgcm95YWx0eS1mcmVlLCB3b3JsZHdpZGUsCit0cmFuc2ZlcmFibGUsIHN1YmxpY2Vuc2FibGUgbGljZW5zZSB0byB1c2UgdGhlIFRyYWRlbWFyayBvbiBvciBpbiBjb25uZWN0aW9uIHdpdGggdGhlCitTb2Z0d2FyZSwgdGhlIERvY3VtZW50YXRpb24sIHRoZSBTcGVjaWZpY2F0aW9ucyBhbmQgYW55IHNvZnR3YXJlIHRoYXQgaW1wbGVtZW50cyB0aGUKK1NwZWNpZmljYXRpb25zLgorCisyLjMJUmVzdHJpY3Rpb25zLiAgTGljZW5zZWUgYWdyZWVzIHRoYXQgaXQgd2lsbCBub3QgdXNlIHRoZSBTb2Z0d2FyZSBpbiBhIHdheQoraW5jb25zaXN0ZW50IHdpdGggdGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDIuMS4gIEZ1cnRoZXIsIExpY2Vuc2VlIGFncmVlcyB0aGF0LCBpbgorZXhlcmNpc2luZyBpdHMgcmlnaHRzIHVuZGVyIHRoZSBsaWNlbnNlIGdyYW50ZWQgdG8gaXQgaW4gdGhpcyBBZ3JlZW1lbnQsIExpY2Vuc2VlIHdpbGw6CisoaSkgc3RyaWN0bHkgYWRoZXJlIHRvIGFuZCBmdWxseSBjb21wbHkgd2l0aCB0aGUgU3BlY2lmaWNhdGlvbnM7IChpaSkgdXNlIHRoZSBUcmFkZW1hcmssCithbmQgbm8gb3RoZXIgbWFyaywgdG8gaWRlbnRpZnkgdGhlIFNvZnR3YXJlLCB0aGUgRG9jdW1lbnRhdGlvbiwgdGhlIFNwZWNpZmljYXRpb25zIGFuZCBhbnkKK1Byb2R1Y3RzIHRoYXQgaW1wbGVtZW50IHRoZSBTcGVjaWZpY2F0aW9uczsgKGlpaSkgcGxhY2UsIGluIGEgZm9udCBvciBncmFwaGljIGRlc2lnbgorZGVzaWduYXRlZCBieSBJbk1vbiwgIHRoZSBwaHJhc2UgInNGbG93KFIpIiBvbiBhbnkgdGVjaG5pY2FsIGRvY3VtZW50YXRpb24sCitzYWxlcy9tYXJrZXRpbmcgbWF0ZXJpYWxzLCBjYXRhbG9ncywgb3Igb3RoZXIgc3VjaCBtYXRlcmlhbHMgcmVsYXRpbmcgdG8gcHJvZHVjdHMgaXQKK21hbnVmYWN0dXJlcyBvciBtYXJrZXRzIHdoaWNoIGl0IGhhcyBjb25maWd1cmVkIHRvIGJlIGNvbXBhdGlibGUgd2l0aCB0aGUgU29mdHdhcmUgb3IKK290aGVyd2lzZSBpbXBsZW1lbnQgdGhlIFNwZWNpZmljYXRpb25zOyAoaXYpIGluIGNvbm5lY3Rpb24gd2l0aCBhbnkgUHJvZHVjdHMgc2hpcHBlZCB0byBvcgorc29sZCBpbiBvdGhlciBjb3VudHJpZXMgdGhhdCBpbmNsdWRlIHRoZSBTb2Z0d2FyZSBvciBhbnkgc29mdHdhcmUgdGhhdCBpbXBsZW1lbnRzIHRoZQorU3BlY2lmaWNhdGlvbnMsIGNvbXBseSB3aXRoIHRoZSBwYXRlbnQgYW5kIHRyYWRlbWFyayBsYXdzIGFuZCBwcmFjdGljZSBvZiBzdWNoIG90aGVyCitjb3VudHJ5OyBhbmQgKHYpIG5vdCBhbHRlciBvciBpbXBhaXIgYW55IGFja25vd2xlZGdtZW50IG9mIGNvcHlyaWdodCBvciB0cmFkZW1hcmsgcmlnaHRzIG9mCitJbk1vbiB0aGF0IG1heSBhcHBlYXIgaW4gb3Igb24gdGhlIFNvZnR3YXJlLCB0aGUgRG9jdW1lbnRhdGlvbiBvciB0aGUgU3BlY2lmaWNhdGlvbnMuICBJbgordGhlIGV2ZW50IEluTW9uIGRldGVybWluZXMgdGhhdCBMaWNlbnNlZSBpcyBub3QgY29tcGx5aW5nIHdpdGggaXRzIG9ibGlnYXRpb25zIHVuZGVyCitjbGF1c2VzIChpKS0odikgYWJvdmUsIEluTW9uIHNoYWxsIG5vdGlmeSBMaWNlbnNlZSBvZiBzdWNoIG5vbi1jb21wbGlhbmNlLCBhbmQgaWYgTGljZW5zZWUKK2ZhaWxzIHRvIGNvcnJlY3Qgc3VjaCBub24tY29tcGxpYW5jZSB3aXRoaW4gdGhyZWUgKDMpIG1vbnRocywgSW5Nb24gbWF5IGltbWVkaWF0ZWx5Cit0ZXJtaW5hdGUgdGhpcyBBZ3JlZW1lbnQgYXMgcHJvdmlkZWQgdW5kZXIgcGFyYWdyYXBoIDcgYmVsb3cgYW5kIHB1cnN1ZSBhbnkgYW5kIGFsbAorYWN0aW9ucyBhbmQgcmVtZWRpZXMgYXMgaXQgZGVlbXMgbmVjZXNzYXJ5LCBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byBicmVhY2ggb2YKK2NvbnRyYWN0LgorCiszLglPd25lcnNoaXAuICBFeGNlcHQgZm9yIHRoZSBsaWNlbnNlIGV4cHJlc3NseSBncmFudGVkIGluIFNlY3Rpb24gMiwgSW5tb24gaGVyZWJ5CityZXRhaW5zIGFsbCByaWdodCwgdGl0bGUsIGFuZCBpbnRlcmVzdCBpbiBhbmQgdG8gdGhlIFRyYWRlbWFyayBhbmQgYWxsIGl0cyBJbnRlbGxlY3R1YWwKK1Byb3BlcnR5IFJpZ2h0cyBpbiB0aGUgU29mdHdhcmUsIHRoZSBEb2N1bWVudGF0aW9uIGFuZCB0aGUgU3BlY2lmaWNhdGlvbnMuICBMaWNlbnNlZQorb2J0YWlucyBubyByaWdodHMgaGVyZXVuZGVyIGluIHRoZSBUcmFkZW1hcmssIFNvZnR3YXJlLCBEb2N1bWVudGF0aW9uIG9yIFNwZWNpZmljYXRpb25zIGJ5CitpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlLiAgTGljZW5zZWUgYWNrbm93bGVkZ2VzIHRoYXQgdGhlIFRyYWRlbWFyaywgU29mdHdhcmUsCitEb2N1bWVudGF0aW9uIGFuZCBTcGVjaWZpY2F0aW9ucyBhcmUgYmVpbmcgbGljZW5zZWQgYW5kIG5vdCBzb2xkIHVuZGVyIHRoaXMgQWdyZWVtZW50LCBhbmQKK3RoYXQgdGhpcyBBZ3JlZW1lbnQgZG9lcyBub3QgdHJhbnNmZXIgdGl0bGUgaW4gdGhlIFRyYWRlbWFyaywgU29mdHdhcmUsIERvY3VtZW50YXRpb24gb3IKK1NwZWNpZmljYXRpb25zLCBvciBhbnkgY29weSB0aGVyZW9mLCB0byBMaWNlbnNlZS4KKworNC4JU3VwcG9ydC4gIElubW9uIHNoYWxsIGhhdmUgbm8gb2JsaWdhdGlvbiB1bmRlciB0aGlzIEFncmVlbWVudCB0byAoYSkgc3VwcGx5CittYWludGVuYW5jZSBvciBzdXBwb3J0LCBidWcgZml4ZXMgb3IgZXJyb3IgY29ycmVjdGlvbnMgdG8gdGhlIExpY2Vuc2VkIFNvZnR3YXJlLAorKGIpIHN1cHBseSBmdXR1cmUgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2VkIFNvZnR3YXJlIG9yIChjKSBwcm92aWRlIExpY2Vuc2VkIFNvZnR3YXJlCitkZXZlbG9wbWVudCB0b29scyB0byBMaWNlbnNlZS4KKworNS4JV2FycmFudHkuICBJTk1PTiBIRVJFQlkgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTLCBFSVRIRVIgRVhQUkVTUywgSU1QTElFRCBPUgorU1RBVFVUT1JZLCBXSVRIIFJFU1BFQ1QgVE8gVEhFIFRSQURFTUFSSywgVEhFIFNPRlRXQVJFLCBUSEUgRE9DVU1FTlRBVElPTiwgVEhFCitTUEVDSUZJQ0FUSU9OUy4gT1IgT1RIRVJXSVNFLCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OLUlORlJJTkdFTUVOVCBPRiBBTlkgSU5URUxMRUNUVUFMCitQUk9QRVJUWSBSSUdIVFMuCisKKzYuCUxpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiAgSU4gTk8gRVZFTlQgU0hBTEwgSU5NT04gT1IgSVRTIFNVUFBMSUVSUyBPUiBMSUNFTlNPUlMgQkUKK0xJQUJMRSBGT1IgQU5ZIENPTlNFUVVFTlRJQUwsIElOQ0lERU5UQUwsIFNQRUNJQUwsIElORElSRUNUIE9SIEVYRU1QTEFSWSBEQU1BR0VTIFdIQVRTT0VWRVIsCitXSEVUSEVSIFJFTEFURUQgVE8gT1IgQVJJU0lORyBPVVQgT0YgVEhJUyBBR1JFRU1FTlQsIFRIRSBUUkFERU1BUkssIFRIRSBTT0ZUV0FSRSwgVEhFCitET0NVTUVOVEFUSU9OLCBUSEUgU1BFQ0lGSUNBVElPTlMsIE9SIE9USEVSV0lTRSwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IKK0xPU1MgT0YgUFJPRklUUywgQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBMT1NTIE9GIERBVEEsIENPU1RTIE9GIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUKK0dPT0RTIE9SIFNFUlZJQ0VTIE9SIEZPUiBBTlkgQ0xBSU0gT1IgREVNQU5EIEFHQUlOU1QgTElDRU5TRUUgQlkgQU5ZIE9USEVSIFBBUlRZLCBPUiBPVEhFUgorUEVDVU5JQVJZIExPU1MsIEVWRU4gSUYgSU5NT04gSEFTIEJFRU4gQURWSVNFRCBPRiBPUiBLTk9XUyBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorREFNQUdFUy4KKworNy4JVGVybSBhbmQgVGVybWluYXRpb24uICBUaGUgdGVybSBvZiB0aGlzIEFncmVlbWVudCB3aWxsIGJlZ2luIG9uIHRoZSBFZmZlY3RpdmUgRGF0ZSwKK3doaWNoIHNoYWxsIGJlIGRlZW1lZCB0byBiZSB0aGUgZGF0ZSBvZiBkZWxpdmVyeSBvZiB0aGUgU29mdHdhcmUgYW5kL29yIERvY3VtZW50YXRpb24gYW5kL29yCitTcGVjaWZpY2F0aW9ucyB0byBMaWNlbnNlZSwgYW5kIHNoYWxsIGNvbnRpbnVlIGluZGVmaW5pdGVseSB1bmxlc3MgYW5kIHVudGlsIHRlcm1pbmF0ZWQgYnkKK0xpY2Vuc2VlJ3MgZ2l2aW5nIHdyaXR0ZW4gbm90aWNlIG9mIHRlcm1pbmF0aW9uIHRvIEluTW9uLCBvciBieSBJbk1vbiBwdXJzdWFudCB0byBJbk1vbidzCit0ZXJtaW5hdGlvbiByaWdodHMgYXMgc2V0IGZvcnRoIGluIFNlY3Rpb24gMi4zIGFib3ZlLiAgVXBvbiBhbnkgdGVybWluYXRpb24gb2YgdGhpcworQWdyZWVtZW50LCBMaWNlbnNlZSBzaGFsbCBjZWFzZSBleGVyY2lzaW5nIGl0cyBsaWNlbnNlIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCwKK2luY2x1ZGluZyB0aGUgcmlnaHQgdG8gZGlzdHJpYnV0ZSBQcm9kdWN0cyB0aGF0IGluY29ycG9yYXRlIHRoZSBTb2Z0d2FyZSBvciBEb2N1bWVudGF0aW9uCitvciB0aGF0IGltcGxlbWVudCB0aGUgU3BlY2lmaWNhdGlvbnMuICBUaGUgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBjb250YWluZWQgaW4gU2VjdGlvbnMgMSwKKzMsIDUsIDYsIDcsIGFuZCA4IHNoYWxsIHN1cnZpdmUgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgQWdyZWVtZW50LgorCis4LglHZW5lcmFsIFByb3Zpc2lvbnMuCisKKzguMQlBc3NpZ25tZW50LiAgVGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgYmluZGluZyB1cG9uIGFuZCBpbnVyZSB0byB0aGUgYmVuZWZpdCBvZiB0aGUKK3BhcnRpZXMgaGVyZXRvIGFuZCB0aGVpciBwZXJtaXR0ZWQgc3VjY2Vzc29ycyBhbmQgcGVybWl0dGVkIGFzc2lnbnMuICBJbk1vbiB3aWxsIGhhdmUgdGhlCityaWdodCB0byBhc3NpZ24gdGhpcyBBZ3JlZW1lbnQgd2l0aG91dCBub3RpY2UgdG8gTGljZW5zZWUuICBMaWNlbnNlZSBtYXkgYXNzaWduIG9yIHRyYW5zZmVyCisod2hldGhlciBieSBtZXJnZXIsIG9wZXJhdGlvbiBvZiBsYXcgb3IgaW4gYW55IG90aGVyIG1hbm5lcikgYW55IG9mIGl0cyByaWdodHMgb3IgZGVsZWdhdGUKK2FueSBvZiBpdHMgb2JsaWdhdGlvbnMgaGVyZXVuZGVyIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBJbk1vbiwgcHJvdmlkZWQgdGhlCithc3NpZ25lZSBhc3N1bWVzIGluIHdyaXRpbmcgYWxsIG9mIExpY2Vuc2VlJ3Mgb2JsaWdhdGlvbnMgaGVyZXVuZGVyLgorCis4LjIJTm90aWNlcy4gIEFsbCBub3RpY2VzIHBlcm1pdHRlZCBvciByZXF1aXJlZCB1bmRlciB0aGlzIEFncmVlbWVudCBzaGFsbCBiZSBpbgord3JpdGluZyBhbmQgc2hhbGwgYmUgZGVsaXZlcmVkIGluIHBlcnNvbiBvciBtYWlsZWQgYnkgZmlyc3QgY2xhc3MsIHJlZ2lzdGVyZWQgb3IgY2VydGlmaWVkCittYWlsLCBwb3N0YWdlIHByZXBhaWQsIHRvIHRoZSBhZGRyZXNzIG9mIHRoZSBwYXJ0eSBzcGVjaWZpZWQgaW4gdGhpcyBBZ3JlZW1lbnQgb3Igc3VjaAorb3RoZXIgYWRkcmVzcyBhcyBlaXRoZXIgcGFydHkgbWF5IHNwZWNpZnkgaW4gd3JpdGluZy4gIFN1Y2ggbm90aWNlIHNoYWxsIGJlIGRlZW1lZCB0byBoYXZlCitiZWVuIGdpdmVuIHVwb24gcmVjZWlwdC4KKworOC4zCU5vbi1XYWl2ZXIuICBObyB0ZXJtIG9yIHByb3Zpc2lvbiBoZXJlb2Ygc2hhbGwgYmUgZGVlbWVkIHdhaXZlZCwgYW5kIG5vIGJyZWFjaAorZXhjdXNlZCwgdW5sZXNzIHN1Y2ggd2FpdmVyIG9yIGNvbnNlbnQgc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IHRoZSBwYXJ0eSBjbGFpbWVkCit0byBoYXZlIHdhaXZlZCBvciBjb25zZW50ZWQuICBBbnkgY29uc2VudCBvciB3YWl2ZXIsIHdoZXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLCBzaGFsbCBub3QKK2NvbnN0aXR1dGUgYSBjb25zZW50IG9yIHdhaXZlciBvZiwgb3IgZXhjdXNlIGZvciBhbnkgc2VwYXJhdGUsIGRpZmZlcmVudCBvciBzdWJzZXF1ZW50CiticmVhY2guCisKKzguNAlJbmRlcGVuZGVudCBDb250cmFjdG9yLiAgVGhlIHBhcnRpZXMnIHJlbGF0aW9uc2hpcCBzaGFsbCBiZSBzb2xlbHkgdGhhdCBvZgoraW5kZXBlbmRlbnQgY29udHJhY3RvcnMsIGFuZCBub3RoaW5nIGNvbnRhaW5lZCBpbiB0aGlzIEFncmVlbWVudCBzaGFsbCBiZSBjb25zdHJ1ZWQgdG8gbWFrZQorZWl0aGVyIHBhcnR5IGFuIGFnZW50LCBwYXJ0bmVyLCByZXByZXNlbnRhdGl2ZSBvciBwcmluY2lwYWwgb2YgdGhlIG90aGVyIGZvciBhbnkgcHVycG9zZS4KKworOC41CUNob2ljZSBvZiBMYXcgYW5kIEZvcnVtLiAgVGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgZ292ZXJuZWQgYnkgYW5kIGNvbnN0cnVlZCB1bmRlcgordGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEsIHdpdGhvdXQgZ2l2aW5nIGVmZmVjdCB0byBzdWNoIHN0YXRlJ3MgY29uZmxpY3Qgb2YgbGF3cworcHJpbmNpcGxlcy4gIFRoZSBwYXJ0aWVzIGhlcmVieSBzdWJtaXQgdG8gdGhlIHBlcnNvbmFsIGp1cmlzZGljdGlvbiBvZiwgYW5kIGFncmVlIHRoYXQgYW55CitsZWdhbCBwcm9jZWVkaW5nIHdpdGggcmVzcGVjdCB0byBvciBhcmlzaW5nIHVuZGVyIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGJyb3VnaHQgaW4sIHRoZQorVW5pdGVkIFN0YXRlcyBEaXN0cmljdCBDb3VydCBmb3IgdGhlIE5vcnRoZXJuIERpc3RyaWN0IG9mIENhbGlmb3JuaWEgb3IgdGhlIHN0YXRlIGNvdXJ0cworb2YgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEgZm9yIHRoZSBDb3VudHkgb2YgU2FuIEZyYW5jaXNjby4KKworOC42CVUuUy4gR292ZXJubWVudCBMaWNlbnNlcy4gIFRoZSBTb2Z0d2FyZSBhbmQgRG9jdW1lbnRhdGlvbiBhcmUgY29uc2lkZXJlZCBhCisiY29tbWVyY2lhbCBpdGVtIiBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBhdCA0OCBDLkYuUiAyLjEwMSwgb3IgImNvbW1lcmNpYWwgY29tcHV0ZXIKK3NvZnR3YXJlIiBhbmQgImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUgZG9jdW1lbnRhdGlvbiIgYXMgc3VjaCB0ZXJtcyBhcmUgdXNlZCBpbgorNDggQy5GLlIgMTIuMjEyIG9mIHRoZSBGZWRlcmFsIEFjcXVpc2l0aW9uIFJlZ3VsYXRpb25zIGFuZCBpdHMgc3VjY2Vzc29ycywgYW5kCis0OCBDLkYuUi4gMjI3LjcyMDIgb2YgdGhlIERvRCBGQVIgU3VwcGxlbWVudCBhbmQgaXRzIHN1Y2Nlc3NvcnMuCisKKzguNwlTZXZlcmFiaWxpdHkuICBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSB1bmRlcgorYXBwbGljYWJsZSBsYXcsIHRoZW4gc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgZXhjbHVkZWQgZnJvbSB0aGlzIEFncmVlbWVudCBhbmQgdGhlIGJhbGFuY2UKK29mIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGludGVycHJldGVkIGFzIGlmIHN1Y2ggcHJvdmlzaW9uIHdlcmUgc28gZXhjbHVkZWQgYW5kIHNoYWxsIGJlCitlbmZvcmNlYWJsZSBpbiBhY2NvcmRhbmNlIHdpdGggaXRzIHRlcm1zLiAgVGhlIGNvdXJ0IGluIGl0cyBkaXNjcmV0aW9uIG1heSBzdWJzdGl0dXRlIGZvcgordGhlIGV4Y2x1ZGVkIHByb3Zpc2lvbiBhbiBlbmZvcmNlYWJsZSBwcm92aXNpb24gd2hpY2ggaW4gZWNvbm9taWMgc3Vic3RhbmNlIHJlYXNvbmFibHkKK2FwcHJveGltYXRlcyB0aGUgZXhjbHVkZWQgcHJvdmlzaW9uLgorCis4LjgJQ29tcGxpYW5jZSBXaXRoIExhdy4gIExpY2Vuc2VlIHNoYWxsIGNvbXBseSB3aXRoIGFsbCBhcHBsaWNhYmxlIGxhd3MgYW5kCityZWd1bGF0aW9ucyAoaW5jbHVkaW5nIHByaXZhY3kgbGF3cyBhbmQgcmVndWxhdGlvbnMpIGhhdmluZyBhcHBsaWNhdGlvbiB0byBvciBnb3Zlcm5pbmcgaXRzCisgdXNlIGFuZC9vciBvcGVyYXRpb24gb2YgdGhlIFNvZnR3YXJlIGFuZCBhZ3JlZXMgdG8gaW5kZW1uaWZ5IGFuZCBob2xkIEluTW9uIGhhcm1sZXNzIGZyb20KK2FuZCBhZ2FpbnN0IGFueSBjbGFpbXMsIGRhbWFnZXMsIGxvc3NlcyBvciBvYmxpZ2F0aW9ucyBzdWZmZXJlZCBvciBpbmN1cnJlZCBieSBJbk1vbgorYXJpc2luZyBmcm9tIGl0cyBmYWlsdXJlIHRvIHNvIGNvbXBseS4KKworOC45CUVudGlyZSBBZ3JlZW1lbnQ7IEFtZW5kbWVudC4gIFRoaXMgQWdyZWVtZW50IGNvbnN0aXR1dGVzIHRoZSBmaW5hbCwgY29tcGxldGUgYW5kCitlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YsIGFuZAorc3VwZXJzZWRlcyBhbnkgcHJldmlvdXMgcHJvcG9zYWxzLCBuZWdvdGlhdGlvbnMsIGFncmVlbWVudHMsIG9yIGFycmFuZ2VtZW50cywgd2hldGhlcgordmVyYmFsIG9yIHdyaXR0ZW4sIG1hZGUgYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gc3VjaCBzdWJqZWN0IG1hdHRlci4gIFRoaXMKK0FncmVlbWVudCBzaGFsbCBjb250cm9sIG92ZXIgYW55IGFkZGl0aW9uYWwgb3IgY29uZmxpY3RpbmcgdGVybXMgaW4gYW55IG9mIExpY2Vuc2VlJ3MKK3B1cmNoYXNlIG9yZGVycyBvciBvdGhlciBidXNpbmVzcyBmb3Jtcy4gIFRoaXMgQWdyZWVtZW50IG1heSBvbmx5IGJlIGFtZW5kZWQgb3IgbW9kaWZpZWQKK2J5IG11dHVhbCBhZ3JlZW1lbnQgb2YgYXV0aG9yaXplZCByZXByZXNlbnRhdGl2ZXMgb2YgdGhlIHBhcnRpZXMgaW4gd3JpdGluZy4KKworSW5Nb24gQ29ycC4KKzU4MCBDYWxpZm9ybmlhIFN0cmVldCwgNXRoIEZsb29yLCBTYW4gRnJhbmNpc2NvLCBDQSA5NDEwNAorUGhvbmU6ICg0MTUpIDI4My0zMjYwCitVUkw6ICAgd3d3LmlubW9uLmNvbQorRW1haWw6IGluZm9AaW5tb24uY29tCmRpZmYgLS1naXQgYS9saWNlbnNlcy9pbnRlbC1wc2IgYi9saWNlbnNlcy9pbnRlbC1wc2IKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMzMDlkMgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL2ludGVsLXBzYgpAQCAtMCwwICsxLDY5IEBACitMaWNlbnNlOgorCitDb3B5cmlnaHQgKGMpIDIwMDgsIEludGVsIENvcnBvcmF0aW9uLiAKK1BvcnRpb25zIChjKSwgSW1hZ2luYXRpb24gVGVjaG5vbG9naWVzLCBMdGQuIAorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworKioqKioqKioqKioqKioqKioqKioqKioKK1JlZGlzdHJpYnV0aW9uIGFuZCBVc2UKKyoqKioqKioqKioqKioqKioqKioqKioqICAKKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBiaW5hcnkgZm9ybSwgd2l0aG91dCBtb2RpZmljYXRpb24sIG9mIHRoZQorc29mdHdhcmUgY29kZSBwcm92aWRlZCB3aXRoIHRoaXMgbGljZW5zZSAok1NvZnR3YXJlPywgYXJlIHBlcm1pdHRlZAorcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworKiBSZWRpc3RyaWJ1dGlvbnMgbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMKK2xpY2Vuc2UgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorU29mdHdhcmUuCisKKyogTmVpdGhlciB0aGUgbmFtZSBvZiBJbnRlbCBDb3Jwb3JhdGlvbiBub3IgdGhlIG5hbWUgb2YgSW1hZ2luYXRpb24KK1RlY2hub2xvZ2llcywgTHRkIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCitmcm9tIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworKiBUaGUgU29mdHdhcmUgY2FuIG9ubHkgYmUgdXNlZCBpbiBjb25uZWN0aW9uIHdpdGggdGhlIEludGVsIGhhcmR3YXJlCitkZXNpZ25lZCB0byB1c2UgdGhlIFNvZnR3YXJlIGFzIG91dGxpbmVkIGluIHRoZSBkb2N1bWVudGF0aW9uLiBObworb3RoZXIgdXNlIGlzIGF1dGhvcml6ZWQuCisKKyogTm8gcmV2ZXJzZSBlbmdpbmVlcmluZywgZGVjb21waWxhdGlvbiwgb3IgZGlzYXNzZW1ibHkgb2YgdGhlCitTb2Z0d2FyZSBpcyBwZXJtaXR0ZWQuCisKKyogVGhlIFNvZnR3YXJlIG1heSBub3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGVybXMgZGlmZmVyZW50IHRoYW4gdGhpcworbGljZW5zZS4KKworKioqKioqKioqKioqKioqKioqKioqKioKK0xpbWl0ZWQgUGF0ZW50IExpY2Vuc2UKKyoqKioqKioqKioqKioqKioqKioqKioqICAKKworSW50ZWwgQ29ycG9yYXRpb24gZ3JhbnRzIGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlCitsaWNlbnNlIHVuZGVyIHBhdGVudHMgaXQgbm93IG9yIGhlcmVhZnRlciBvd25zIG9yIGNvbnRyb2xzIHRvIG1ha2UsCitoYXZlIG1hZGUsIHVzZSwgaW1wb3J0LCBvZmZlciB0byBzZWxsIGFuZCBzZWxsICiTVXRpbGl6ZT8gdGhlCitTb2Z0d2FyZSwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55IHN1Y2ggcGF0ZW50IGlzIG5lY2Vzc2FyeQordG8gVXRpbGl6ZSB0aGUgU29mdHdhcmUgYWxvbmUuICBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCithbnkgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhlIFNvZnR3YXJlLiAgTm8gaGFyZHdhcmUgcGVyIHNlIGlzCitsaWNlbnNlZCBoZXJldW5kZXIuCisKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitPd25lcnNoaXAgb2YgU29mdHdhcmUgYW5kIENvcHlyaWdodHMKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RpdGxlIHRvIGFsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlIHJlbWFpbnMgd2l0aCB0aGUgY29weXJpZ2h0Citob2xkZXJzLiBUaGUgU29mdHdhcmUgaXMgY29weXJpZ2h0ZWQgYW5kIHByb3RlY3RlZCBieSB0aGUgbGF3cyBvZiB0aGUKK1VuaXRlZCBTdGF0ZXMgYW5kIG90aGVyIGNvdW50cmllcywgYW5kIGludGVybmF0aW9uYWwgdHJlYXR5Citwcm92aXNpb25zLgorCisqKioqKioqKioqKgorRElTQ0xBSU1FUgorKioqKioqKioqKiogIAorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCitBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorT1dORVJTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCitEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKK1RIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyoqKgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvaW50ZWwtdWNvZGUgYi9saWNlbnNlcy9pbnRlbC11Y29kZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjVjMjY4Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvaW50ZWwtdWNvZGUKQEAgLTAsMCArMSwzNiBAQAorQ29weXJpZ2h0IChjKSA8MTk5NS0yMDEwPiwgSW50ZWwgQ29ycG9yYXRpb24uCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbi4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBiaW5hcnkgZm9ybSwgd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZQorcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAqIFJlZGlzdHJpYnV0aW9ucyBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlCisgICBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzCisgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAqIE5laXRoZXIgdGhlIG5hbWUgb2YgSW50ZWwgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgIHN1cHBsaWVycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCisgICB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgKiBObyByZXZlcnNlIGVuZ2luZWVyaW5nLCBkZWNvbXBpbGF0aW9uLCBvciBkaXNhc3NlbWJseSBvZiB0aGlzCisgICBzb2Z0d2FyZSBpcyBwZXJtaXR0ZWQuCisKKyAqICJCaW5hcnkgZm9ybSIgaW5jbHVkZXMgYW55IGZvcm1hdCBjb21tb25seSB1c2VkIGZvciBlbGVjdHJvbmljCisgICBjb252ZXlhbmNlIHdoaWNoIGlzIGEgcmV2ZXJzaWJsZSwgYml0LWV4YWN0IHRyYW5zbGF0aW9uIG9mIGJpbmFyeQorICAgcmVwcmVzZW50YXRpb24gdG8gQVNDSUkgb3IgSVNPIHRleHQsIGZvciBleGFtcGxlLCAidXVlbmNvZGUuIgorCitESVNDTEFJTUVSLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCitBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCitTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKK0RBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCitPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvaXBhZGljIGIvbGljZW5zZXMvaXBhZGljCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MzVjYWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9pcGFkaWMKQEAgLTAsMCArMSw2MiBAQAorQ29weXJpZ2h0IChjKSAyMDAyIE5hcmEgSW5zdGl0dXRlIG9mIFNjaWVuY2UgYW5kIFRlY2hub2xvZ3kuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK1VzZSwgcmVwcm9kdWN0aW9uLCBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoaXMgc29mdHdhcmUgaXMgcGVybWl0dGVkLiBBbnkgY29weSBvZgordGhpcyBzb2Z0d2FyZSwgd2hldGhlciBpbiBpdHMgb3JpZ2luYWwgZm9ybSBvciBtb2RpZmllZCwgbXVzdCBpbmNsdWRlIGJvdGggdGhlCithYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgZm9sbG93aW5nIHBhcmFncmFwaHMuCisKK05hcmEgSW5zdGl0dXRlIG9mIFNjaWVuY2UgYW5kIFRlY2hub2xvZ3kgKE5BSVNUKSwgdGhlIGNvcHlyaWdodCBob2xkZXJzLAorZGlzY2xhaW1zIGFsbCB3YXJyYW50aWVzIHdpdGggcmVnYXJkIHRvIHRoaXMgc29mdHdhcmUsIGluY2x1ZGluZyBhbGwgaW1wbGllZAord2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MsIGluIG5vIGV2ZW50IHNoYWxsIE5BSVNUIGJlIGxpYWJsZSBmb3IKK2FueSBzcGVjaWFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlcgorcmVzdWx0aW5nIGZyb20gbG9zcyBvZiB1c2UsIGRhdGEgb3IgcHJvZml0cywgd2hldGhlciBpbiBhbiBhY3Rpb24gb2YgY29udHJhY3QsCituZWdsaWdlbmNlIG9yIG90aGVyIHRvcnR1b3VzIGFjdGlvbiwgYXJpc2luZyBvdXQgb2Ygb3IgaW4gY29ubmVjdGlvbiB3aXRoIHRoZQordXNlIG9yIHBlcmZvcm1hbmNlIG9mIHRoaXMgc29mdHdhcmUuCisKK0EgbGFyZ2UgcG9ydGlvbiBvZiB0aGUgZGljdGlvbmFyeSBlbnRyaWVzIG9yaWdpbmF0ZSBmcm9tIElDT1QgRnJlZSBTb2Z0d2FyZS4gVGhlCitmb2xsb3dpbmcgY29uZGl0aW9ucyBmb3IgSUNPVCBGcmVlIFNvZnR3YXJlIGFwcGxpZXMgdG8gdGhlIGN1cnJlbnQgZGljdGlvbmFyeSBhcword2VsbC4KKworRWFjaCBVc2VyIG1heSBhbHNvIGZyZWVseSBkaXN0cmlidXRlIHRoZSBQcm9ncmFtLCB3aGV0aGVyIGluIGl0cyBvcmlnaW5hbCBmb3JtCitvciBtb2RpZmllZCwgdG8gYW55IHRoaXJkIHBhcnR5IG9yIHBhcnRpZXMsIFBST1ZJREVEIHRoYXQgdGhlIHByb3Zpc2lvbnMgb2YKK1NlY3Rpb24gMyAoIk5PIFdBUlJBTlRZIikgd2lsbCBBTFdBWVMgYXBwZWFyIG9uLCBvciBiZSBhdHRhY2hlZCB0bywgdGhlIFByb2dyYW0sCit3aGljaCBpcyBkaXN0cmlidXRlZCBzdWJzdGFudGlhbGx5IGluIHRoZSBzYW1lIGZvcm0gYXMgc2V0IG91dCBoZXJlaW4gYW5kIHRoYXQKK3N1Y2ggaW50ZW5kZWQgZGlzdHJpYnV0aW9uLCBpZiBhY3R1YWxseSBtYWRlLCB3aWxsIG5laXRoZXIgdmlvbGF0ZSBvciBvdGhlcndpc2UKK2NvbnRyYXZlbmUgYW55IG9mIHRoZSBsYXdzIGFuZCByZWd1bGF0aW9ucyBvZiB0aGUgY291bnRyaWVzIGhhdmluZyBqdXJpc2RpY3Rpb24KK292ZXIgdGhlIFVzZXIgb3IgdGhlIGludGVuZGVkIGRpc3RyaWJ1dGlvbiBpdHNlbGYuCisKK05PIFdBUlJBTlRZCisKK1RoZSBwcm9ncmFtIHdhcyBwcm9kdWNlZCBvbiBhbiBleHBlcmltZW50YWwgYmFzaXMgaW4gdGhlIGNvdXJzZSBvZiB0aGUgcmVzZWFyY2gKK2FuZCBkZXZlbG9wbWVudCBjb25kdWN0ZWQgZHVyaW5nIHRoZSBwcm9qZWN0IGFuZCBpcyBwcm92aWRlZCB0byB1c2VycyBhcyBzbworcHJvZHVjZWQgb24gYW4gZXhwZXJpbWVudGFsIGJhc2lzLiBBY2NvcmRpbmdseSwgdGhlIHByb2dyYW0gaXMgcHJvdmlkZWQgd2l0aG91dAorYW55IHdhcnJhbnR5IHdoYXRzb2V2ZXIsIHdoZXRoZXIgZXhwcmVzcywgaW1wbGllZCwgc3RhdHV0b3J5IG9yIG90aGVyd2lzZS4gVGhlCit0ZXJtICJ3YXJyYW50eSIgdXNlZCBoZXJlaW4gaW5jbHVkZXMsIGJ1dCBpcyBub3QgbGltaXRlZCB0bywgYW55IHdhcnJhbnR5IG9mIHRoZQorcXVhbGl0eSwgcGVyZm9ybWFuY2UsIG1lcmNoYW50YWJpbGl0eSBhbmQgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2Ugb2YKK3RoZSBwcm9ncmFtIGFuZCB0aGUgbm9uZXhpc3RlbmNlIG9mIGFueSBpbmZyaW5nZW1lbnQgb3IgdmlvbGF0aW9uIG9mIGFueSByaWdodAorb2YgYW55IHRoaXJkIHBhcnR5LgorCitFYWNoIHVzZXIgb2YgdGhlIHByb2dyYW0gd2lsbCBhZ3JlZSBhbmQgdW5kZXJzdGFuZCwgYW5kIGJlIGRlZW1lZCB0byBoYXZlIGFncmVlZAorYW5kIHVuZGVyc3Rvb2QsIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgd2hhdHNvZXZlciBmb3IgdGhlIHByb2dyYW0gYW5kLAorYWNjb3JkaW5nbHksIHRoZSBlbnRpcmUgcmlzayBhcmlzaW5nIGZyb20gb3Igb3RoZXJ3aXNlIGNvbm5lY3RlZCB3aXRoIHRoZQorcHJvZ3JhbSBpcyBhc3N1bWVkIGJ5IHRoZSB1c2VyLgorCitUaGVyZWZvcmUsIG5laXRoZXIgSUNPVCwgdGhlIGNvcHlyaWdodCBob2xkZXIsIG9yIGFueSBvdGhlciBvcmdhbml6YXRpb24gdGhhdAorcGFydGljaXBhdGVkIGluIG9yIHdhcyBvdGhlcndpc2UgcmVsYXRlZCB0byB0aGUgZGV2ZWxvcG1lbnQgb2YgdGhlIHByb2dyYW0gYW5kCit0aGVpciByZXNwZWN0aXZlIG9mZmljaWFscywgZGlyZWN0b3JzLCBvZmZpY2VycyBhbmQgb3RoZXIgZW1wbG95ZWVzIHNoYWxsIGJlCitoZWxkIGxpYWJsZSBmb3IgYW55IGFuZCBhbGwgZGFtYWdlcywgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGdlbmVyYWwsCitzcGVjaWFsLCBpbmNpZGVudGFsIGFuZCBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIGFyaXNpbmcgb3V0IG9mIG9yIG90aGVyd2lzZSBpbgorY29ubmVjdGlvbiB3aXRoIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUgcHJvZ3JhbSBvciBhbnkgcHJvZHVjdCwgbWF0ZXJpYWwKK29yIHJlc3VsdCBwcm9kdWNlZCBvciBvdGhlcndpc2Ugb2J0YWluZWQgYnkgdXNpbmcgdGhlIHByb2dyYW0sIHJlZ2FyZGxlc3Mgb2YKK3doZXRoZXIgdGhleSBoYXZlIGJlZW4gYWR2aXNlZCBvZiwgb3Igb3RoZXJ3aXNlIGhhZCBrbm93bGVkZ2Ugb2YsIHRoZQorcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzIGF0IGFueSB0aW1lIGR1cmluZyB0aGUgcHJvamVjdCBvciB0aGVyZWFmdGVyLiBFYWNoCit1c2VyIHdpbGwgYmUgZGVlbWVkIHRvIGhhdmUgYWdyZWVkIHRvIHRoZSBmb3JlZ29pbmcgYnkgaGlzIG9yIGhlciBjb21tZW5jZW1lbnQKK29mIHVzZSBvZiB0aGUgcHJvZ3JhbS4gVGhlIHRlcm0gInVzZSIgYXMgdXNlZCBoZXJlaW4gaW5jbHVkZXMsIGJ1dCBpcyBub3QKK2xpbWl0ZWQgdG8sIHRoZSB1c2UsIG1vZGlmaWNhdGlvbiwgY29weWluZyBhbmQgZGlzdHJpYnV0aW9uIG9mIHRoZSBwcm9ncmFtIGFuZAordGhlIHByb2R1Y3Rpb24gb2Ygc2Vjb25kYXJ5IHByb2R1Y3RzIGZyb20gdGhlIHByb2dyYW0uCisKK0luIHRoZSBjYXNlIHdoZXJlIHRoZSBwcm9ncmFtLCB3aGV0aGVyIGluIGl0cyBvcmlnaW5hbCBmb3JtIG9yIG1vZGlmaWVkLCB3YXMKK2Rpc3RyaWJ1dGVkIG9yIGRlbGl2ZXJlZCB0byBvciByZWNlaXZlZCBieSBhIHVzZXIgZnJvbSBhbnkgcGVyc29uLCBvcmdhbml6YXRpb24KK29yIGVudGl0eSBvdGhlciB0aGFuIElDT1QsIHVubGVzcyBpdCBtYWtlcyBvciBncmFudHMgaW5kZXBlbmRlbnRseSBvZiBJQ09UIGFueQorc3BlY2lmaWMgd2FycmFudHkgdG8gdGhlIHVzZXIgaW4gd3JpdGluZywgc3VjaCBwZXJzb24sIG9yZ2FuaXphdGlvbiBvciBlbnRpdHksCit3aWxsIGFsc28gYmUgZXhlbXB0ZWQgZnJvbSBhbmQgbm90IGJlIGhlbGQgbGlhYmxlIHRvIHRoZSB1c2VyIGZvciBhbnkgc3VjaAorZGFtYWdlcyBhcyBub3RlZCBhYm92ZSBhcyBmYXIgYXMgdGhlIHByb2dyYW0gaXMgY29uY2VybmVkLiAKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL2lwdzIxMDAtZncgYi9saWNlbnNlcy9pcHcyMTAwLWZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNTViMTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9pcHcyMTAwLWZ3CkBAIC0wLDAgKzEsNjIgQEAKK1RFUk1TIEFORCBDT05ESVRJT05TCitJTVBPUlRBTlQgLSBQTEVBU0UgUkVBRCBCRUZPUkUgSU5TVEFMTElORyBPUiBVU0lORyBUSElTIElOVEVMwq4gU09GVFdBUkUKKworRG8gbm90IHVzZSBvciBsb2FkIHRoaXMgZmlybXdhcmUgKHRoZSAiU29mdHdhcmUiKSB1bnRpbCB5b3UgaGF2ZSBjYXJlZnVsbHkgcmVhZCB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLiBCeSBsb2FkaW5nIG9yIHVzaW5nIHRoZSBTb2Z0d2FyZSwgeW91IGFncmVlIHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudC4gSWYgeW91IGRvIG5vdCB3aXNoIHRvIHNvIGFncmVlLCBkbyBub3QgaW5zdGFsbCBvciB1c2UgdGhlIFNvZnR3YXJlLgorCitMSUNFTlNFRVM6IFBsZWFzZSBub3RlOgorCisqIElmIHlvdSBhcmUgYW4gRW5kLVVzZXIsIG9ubHkgRXhoaWJpdCBBLCB0aGUgU09GVFdBUkUgTElDRU5TRSBBR1JFRU1FTlQsIGFwcGxpZXMuCisqIElmIHlvdSBhcmUgYW4gT3JpZ2luYWwgRXF1aXBtZW50IE1hbnVmYWN0dXJlciAoT0VNKSwgSW5kZXBlbmRlbnQgSGFyZHdhcmUgVmVuZG9yIChJSFYpLCBvciBJbmRlcGVuZGVudCBTb2Z0d2FyZSBWZW5kb3IgKElTViksIHRoaXMgY29tcGxldGUgQWdyZWVtZW50IGFwcGxpZXMuCisKK0ZvciBPRU1zLCBJSFZzLCBhbmQgSVNWczoKKworTElDRU5TRS4gVGhpcyBTb2Z0d2FyZSBpcyBsaWNlbnNlZCBmb3IgdXNlIG9ubHkgaW4gY29uanVuY3Rpb24gd2l0aCBJbnRlbCBjb21wb25lbnQgcHJvZHVjdHMuIFVzZSBvZiB0aGUgU29mdHdhcmUgaW4gY29uanVuY3Rpb24gd2l0aCBub24tSW50ZWwgY29tcG9uZW50IHByb2R1Y3RzIGlzIG5vdCBsaWNlbnNlZCBoZXJldW5kZXIuIFN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBJbnRlbCBncmFudHMgdG8geW91IGEgbm9uZXhjbHVzaXZlLCBub250cmFuc2ZlcmFibGUsIHdvcmxkd2lkZSwgZnVsbHkgcGFpZC11cCBsaWNlbnNlIHVuZGVyIEludGVsJ3MgY29weXJpZ2h0cyB0bzogKGkpIGNvcHkgdGhlIFNvZnR3YXJlIGludGVybmFsbHkgZm9yIHlvdXIgb3duIGRldmVsb3BtZW50IGFuZCBtYWludGVuYW5jZSBwdXJwb3NlczsgKGlpKSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSB0byB5b3VyIGVuZC11c2VycywgYnV0IG9ubHkgdW5kZXIgYSBsaWNlbnNlIGFncmVlbWVudCB3aXRoIHRlcm1zIGF0IGxlYXN0IGFzIHJlc3RyaWN0aXZlIGFzIHRob3NlIGNvbnRhaW5lZCBpbiBJbnRlbCdzIEZpbmFsLCBTaW5nbGUgVXNlciBMaWNlbnNlIEFncmVlbWVudCwgYXR0YWNoZWQgYXMgRXhoaWJpdCBBOyBhbmQgKGlpaSkgbW9kaWZ5LCBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBlbmQtdXNlciBkb2N1bWVudGF0aW9uIHdoaWNoIG1heSBhY2NvbXBhbnkgdGhlIFNvZnR3YXJlLCBidXQgb25seSBpbiBhc3NvY2lhdGlvbiB3aXRoIHRoZSBTb2Z0d2FyZS4KKworSWYgeW91IGFyZSBub3QgdGhlIGZpbmFsIG1hbnVmYWN0dXJlciBvciB2ZW5kb3Igb2YgYSBjb21wdXRlciBzeXN0ZW0gb3Igc29mdHdhcmUgcHJvZ3JhbSBpbmNvcnBvcmF0aW5nIHRoZSBTb2Z0d2FyZSwgdGhlbiB5b3UgbWF5IHRyYW5zZmVyIGEgY29weSBvZiB0aGUgU29mdHdhcmUsIGluY2x1ZGluZyBhbnkgcmVsYXRlZCBkb2N1bWVudGF0aW9uIChtb2RpZmllZCBvciB1bm1vZGlmaWVkKSB0byB5b3VyIHJlY2lwaWVudCBmb3IgdXNlIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIHByb3ZpZGVkIHN1Y2ggcmVjaXBpZW50IGFncmVlcyB0byBiZSBmdWxseSBib3VuZCBieSB0aGUgdGVybXMgaGVyZW9mLiBZb3Ugc2hhbGwgbm90IG90aGVyd2lzZSBhc3NpZ24sIHN1YmxpY2Vuc2UsIGxlYXNlLCBvciBpbiBhbnkgb3RoZXIgd2F5IHRyYW5zZmVyIG9yIGRpc2Nsb3NlIFNvZnR3YXJlIHRvIGFueSB0aGlyZCBwYXJ0eS4gWW91IG1heSBub3QsIG5vciBtYXkgeW91IGFzc2lzdCBhbnkgb3RoZXIgcGVyc29uIG9yIGVudGl0eSB0byBtb2RpZnksIHRyYW5zbGF0ZSwgY29udmVydCB0byBhbm90aGVyIHByb2dyYW1taW5nIGxhbmd1YWdlLCBkZWNvbXBpbGUsIHJldmVyc2UgZW5naW5lZXIsIG9yIGRpc2Fzc2VtYmxlIGFueSBwb3J0aW9uIG9mIHRoZSBTb2Z0d2FyZSBvciBvdGhlcndpc2UgYXR0ZW1wdCB0byBkZXJpdmUgc291cmNlIGNvZGUgZnJvbSBhbnkgb2JqZWN0IGNvZGUgbW9kdWxlcyBvZiB0aGUgU29mdHdhcmUgb3IgYW55IGludGVybmFsIGRhdGEgZmlsZXMgZ2VuZXJhdGVkIGJ5IHRoZSBTb2Z0d2FyZS4gWW91ciByaWdodHMgdG8gcmVkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBzaGFsbCBiZSBjb250aW5nZW50IHVwb24geW91ciBpbnN0YWxsYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaW4gaXRzIGVudGlyZXR5IGluIHRoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgU29mdHdhcmUuCisKK0NPTkZJREVOVElBTElUWS4gSWYgeW91IHdpc2ggdG8gaGF2ZSBhIHRoaXJkIHBhcnR5IGNvbnN1bHRhbnQgb3Igc3ViY29udHJhY3RvciAoIkNvbnRyYWN0b3IiKSBwZXJmb3JtIHdvcmsgb24geW91ciBiZWhhbGYgd2hpY2ggaW52b2x2ZXMgYWNjZXNzIHRvIG9yIHVzZSBvZiBTb2Z0d2FyZSwgeW91IHNoYWxsIG9idGFpbiBhIHdyaXR0ZW4gY29uZmlkZW50aWFsaXR5IGFncmVlbWVudCBmcm9tIHRoZSBDb250cmFjdG9yIHdoaWNoIGNvbnRhaW5zIHByb3Zpc2lvbnMgd2l0aCByZXNwZWN0IHRvIGFjY2VzcyB0byBvciB1c2Ugb2YgdGhlIFNvZnR3YXJlIG5vIGxlc3MgcmVzdHJpY3RpdmUgdGhhbiB0aG9zZSBzZXQgZm9ydGggaW4gdGhpcyBBZ3JlZW1lbnQgYW5kIGV4Y2x1ZGluZyBhbnkgZGlzdHJpYnV0aW9uIHJpZ2h0cywgYW5kIHVzZSBmb3IgYW55IG90aGVyIHB1cnBvc2UuIEV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgaGVyZWluLCB5b3Ugc2hhbGwgbm90IGRpc2Nsb3NlIHRoZSB0ZXJtcyBvciBleGlzdGVuY2Ugb2YgdGhpcyBBZ3JlZW1lbnQgb3IgdXNlIEludGVsJ3MgbmFtZSBpbiBhbnkgcHVibGljYXRpb25zLCBhZHZlcnRpc2VtZW50cywgb3Igb3RoZXIgYW5ub3VuY2VtZW50cyB3aXRob3V0IEludGVsJ3MgcHJpb3Igd3JpdHRlbiBjb25zZW50LiBZb3UgZG8gbm90IGhhdmUgYW55IHJpZ2h0cyB0byB1c2UgYW55IEludGVsIHRyYWRlbWFya3Mgb3IgbG9nb3MuCisKK09XTkVSU0hJUCBPRiBTT0ZUV0FSRSBBTkQgQ09QWVJJR0hUUy4gU29mdHdhcmUgYW5kIGFjY29tcGFueWluZyBtYXRlcmlhbHMsIGlmIGFueSwgYXJlIG93bmVkIGJ5IEludGVsIG9yIGl0cyBzdXBwbGllcnMgYW5kIGxpY2Vuc29ycyBhbmQgbWF5IGJlIHByb3RlY3RlZCBieSBjb3B5cmlnaHQsIHRyYWRlbWFyaywgcGF0ZW50IGFuZCB0cmFkZSBzZWNyZXQgbGF3IGFuZCBpbnRlcm5hdGlvbmFsIHRyZWF0aWVzLiBBbnkgcmlnaHRzLCBleHByZXNzIG9yIGltcGxpZWQsIGluIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgZW1ib2RpZWQgaW4gdGhlIGZvcmVnb2luZywgb3RoZXIgdGhhbiB0aG9zZSBzcGVjaWZpZWQgaW4gdGhpcyBBZ3JlZW1lbnQsIGFyZSByZXNlcnZlZCBieSBJbnRlbCBhbmQgaXRzIHN1cHBsaWVycyBhbmQgbGljZW5zb3JzIG9yIG90aGVyd2lzZSBhcyBzZXQgZm9ydGggaW4gYW55IGFwcGxpY2FibGUgb3BlbiBzb3VyY2UgbGljZW5zZSBhZ3JlZW1lbnQuIFlvdSB3aWxsIGtlZXAgdGhlIFNvZnR3YXJlIGZyZWUgb2YgbGllbnMsIGF0dGFjaG1lbnRzLCBhbmQgb3RoZXIgZW5jdW1icmFuY2VzLiBZb3UgYWdyZWUgbm90IHRvIHJlbW92ZSBhbnkgcHJvcHJpZXRhcnkgbm90aWNlcyBhbmQvb3IgYW55IGxhYmVscyBmcm9tIHRoZSBTb2Z0d2FyZSBhbmQgYWNjb21wYW55aW5nIG1hdGVyaWFscyB3aXRob3V0IHByaW9yIHdyaXR0ZW4gYXBwcm92YWwgYnkgSW50ZWwuCisKK0xJTUlUQVRJT04gT0YgTElBQklMSVRZLiBJTiBOTyBFVkVOVCBTSEFMTCBJTlRFTCBPUiBJVFMgU1VQUExJRVJTIEFORCBMSUNFTlNPUlMgQkUgTElBQkxFIEZPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIEZST00gQU5ZIENBVVNFIE9GIEFDVElPTiBPRiBBTlkgS0lORCAoSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIExPU1QgUFJPRklUUywgQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBPUiBMT1NUIElORk9STUFUSU9OKSBBUklTSU5HIE9VVCBPRiBUSEUgVVNFLCBNT0RJRklDQVRJT04sIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIElOVEVMIFNPRlRXQVJFLCBPUiBPVEhFUldJU0UsIE5PUiBGT1IgUFVOSVRJVkUsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIE9SIFNQRUNJQUwgREFNQUdFUyBPRiBBTlkgS0lORCwgRVZFTiBJRiBJTlRFTCBPUiBJVFMgU1VQUExJRVJTIEFORCBMSUNFTlNPUlMgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBTT01FIEpVUklTRElDVElPTlMgUFJPSElCSVQgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgTElBQklMSVRZIEZPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIENPTlNFUVVFTlRJQUwgT1IgSU5DSURFTlRBTCBEQU1BR0VTLCBTTyBDRVJUQUlOIExJTUlUQVRJT05TIE1BWSBOT1QgQVBQTFkuIFlPVSBNQVkgQUxTTyBIQVZFIE9USEVSIExFR0FMIFJJR0hUUyBUSEFUIFZBUlkgQkVUV0VFTiBKVVJJU0RJQ1RJT05TLgorCitFWENMVVNJT04gT0YgV0FSUkFOVElFUy4gVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFBPU1NJQkxZIFdJVEggRkFVTFRTLiBVTkxFU1MgRVhQUkVTU0xZIEFHUkVFRCBPVEhFUldJU0UsIElOVEVMIEFORCBJVFMgU1VQUExJRVJTIEFORCBMSUNFTlNPUlMgRElTQ0xBSU0gQU5ZIEFORCBBTEwgV0FSUkFOVElFUyBBTkQgR1VBUkFOVEVFUywgRVhQUkVTUywgSU1QTElFRCBPUiBPVEhFUldJU0UsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBOT05JTkZSSU5HRU1FTlQsIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBJbnRlbCBkb2VzIG5vdCB3YXJyYW50IG9yIGFzc3VtZSByZXNwb25zaWJpbGl0eSBmb3IgdGhlIGFjY3VyYWN5IG9yIGNvbXBsZXRlbmVzcyBvZiBhbnkgaW5mb3JtYXRpb24sIHRleHQsIGdyYXBoaWNzLCBsaW5rcyBvciBvdGhlciBpdGVtcyBjb250YWluZWQgd2l0aGluIHRoZSBTb2Z0d2FyZS4gWW91IGFzc3VtZSBhbGwgbGlhYmlsaXR5LCBmaW5hbmNpYWwgb3Igb3RoZXJ3aXNlLCBhc3NvY2lhdGVkIHdpdGggWW91ciB1c2Ugb3IgZGlzcG9zaXRpb24gb2YgdGhlIFNvZnR3YXJlLgorCitBUFBMSUNBQkxFIExBVy4gQ2xhaW1zIGFyaXNpbmcgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgU3RhdGUgb2YgQ2FsaWZvcm5pYV0sIGV4Y2x1ZGluZyBpdHMgcHJpbmNpcGxlcyBvZiBjb25mbGljdCBvZiBsYXdzIGFuZCB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBTYWxlIG9mIEdvb2RzLgorCitXQUlWRVIgQU5EIEFNRU5ETUVOVC4gTm8gbW9kaWZpY2F0aW9uLCBhbWVuZG1lbnQgb3Igd2FpdmVyIG9mIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgZWZmZWN0aXZlIHVubGVzcyBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgYW4gb2ZmaWNlciBvZiBJbnRlbC4gTm8gZmFpbHVyZSBvciBkZWxheSBpbiBleGVyY2lzaW5nIGFueSByaWdodCwgcG93ZXIsIG9yIHJlbWVkeSB1bmRlciB0aGlzIEFncmVlbWVudCBzaGFsbCBvcGVyYXRlIGFzIGEgd2FpdmVyIG9mIGFueSBzdWNoIHJpZ2h0LCBwb3dlciBvciByZW1lZHkuIFdpdGhvdXQgbGltaXRpbmcgdGhlIGZvcmVnb2luZywgdGVybXMgYW5kIGNvbmRpdGlvbnMgb24gYW55IHB1cmNoYXNlIG9yZGVycyBvciBzaW1pbGFyIG1hdGVyaWFscyBzdWJtaXR0ZWQgYnkgeW91IHRvIEludGVsLCBhbmQgYW55IHRlcm1zIGNvbnRhaW5lZCBpbiBJbnRlbHMgc3RhbmRhcmQgYWNrbm93bGVkZ21lbnQgZm9ybSB0aGF0IGFyZSBpbiBjb25mbGljdCB3aXRoIHRoZXNlIHRlcm1zLCBzaGFsbCBiZSBvZiBubyBmb3JjZSBvciBlZmZlY3QuCisKK1NFVkVSQUJJTElUWS4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBoZWxkIGJ5IGEgY291cnQgb2YgY29tcGV0ZW50IGp1cmlzZGljdGlvbiB0byBiZSBjb250cmFyeSB0byBsYXcsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIGNoYW5nZWQgYW5kIGludGVycHJldGVkIHNvIGFzIHRvIGJlc3QgYWNjb21wbGlzaCB0aGUgb2JqZWN0aXZlcyBvZiB0aGUgb3JpZ2luYWwgcHJvdmlzaW9uIHRvIHRoZSBmdWxsZXN0IGV4dGVudCBhbGxvd2VkIGJ5IGxhdyBhbmQgdGhlIHJlbWFpbmluZyBwcm92aXNpb25zIG9mIHRoaXMgQWdyZWVtZW50IHNoYWxsIHJlbWFpbiBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QuCisKK0VYUE9SVCBSRVNUUklDVElPTlMuIEVhY2ggcGFydHkgYWNrbm93bGVkZ2VzIHRoYXQgdGhlIFNvZnR3YXJlIGlzIHN1YmplY3QgdG8gYXBwbGljYWJsZSBpbXBvcnQgYW5kIGV4cG9ydCByZWd1bGF0aW9ucyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBhbmQgb2YgdGhlIGNvdW50cmllcyBpbiB3aGljaCBlYWNoIHBhcnR5IHRyYW5zYWN0cyBidXNpbmVzcywgc3BlY2lmaWNhbGx5IGluY2x1ZGluZyBVLlMuIEV4cG9ydCBBZG1pbmlzdHJhdGlvbiBBY3QgYW5kIEV4cG9ydCBBZG1pbmlzdHJhdGlvbiBSZWd1bGF0aW9ucy4gRWFjaCBwYXJ0eSBzaGFsbCBjb21wbHkgd2l0aCBzdWNoIGxhd3MgYW5kIHJlZ3VsYXRpb25zLCBhcyB3ZWxsIGFzIGFsbCBvdGhlciBsYXdzIGFuZCByZWd1bGF0aW9ucyBhcHBsaWNhYmxlIHRvIHRoZSBTb2Z0d2FyZS4gV2l0aG91dCBsaW1pdGluZyB0aGUgZ2VuZXJhbGl0eSBvZiB0aGUgZm9yZWdvaW5nLCBlYWNoIHBhcnR5IGFncmVlcyB0aGF0IGl0IHdpbGwgbm90IGV4cG9ydCwgcmUtZXhwb3J0LCB0cmFuc2ZlciBvciBkaXZlcnQgYW55IG9mIHRoZSBTb2Z0d2FyZSBvciB0aGUgZGlyZWN0IHByb2dyYW1zIHRoZXJlb2YgdG8gYW55IHJlc3RyaWN0ZWQgcGxhY2Ugb3IgcGFydHkgaW4gYWNjb3JkYW5jZSB3aXRoIFUuUy4gZXhwb3J0IHJlZ3VsYXRpb25zLiBOb3RlIHRoYXQgU29mdHdhcmUgY29udGFpbmluZyBlbmNyeXB0aW9uIG1heSBiZSBzdWJqZWN0IHRvIGFkZGl0aW9uYWwgcmVzdHJpY3Rpb25zLgorCitHT1ZFUk5NRU5UIFJFU1RSSUNURUQgUklHSFRTLiBUaGUgU29mdHdhcmUgaXMgcHJvdmlkZWQgd2l0aCAiUkVTVFJJQ1RFRCBSSUdIVFMuIiBVc2UsIGR1cGxpY2F0aW9uLCBvciBkaXNjbG9zdXJlIGJ5IHRoZSBHb3Zlcm5tZW50IGlzIHN1YmplY3QgdG8gcmVzdHJpY3Rpb25zIGFzIHNldCBmb3J0aCBpbiBGQVI1Mi4yMjctMTQgYW5kIERGQVIyNTIuMjI3LTcwMTMgZXQgc2VxLiBvciB0aGVpciBzdWNjZXNzb3JzLiBVc2Ugb2YgdGhlIFNvZnR3YXJlIGJ5IHRoZSBHb3Zlcm5tZW50IGNvbnN0aXR1dGVzIGFja25vd2xlZGdtZW50IG9mIEludGVsJ3MgcHJvcHJpZXRhcnkgcmlnaHRzIHRoZXJlaW4uIENvbnRyYWN0b3Igb3IgTWFudWZhY3R1cmVyIGlzIEludGVsIENvcnBvcmF0aW9uLCAyMjAwIE1pc3Npb24gQ29sbGVnZSBCbHZkLiwgU2FudGEgQ2xhcmEsIENBIDk1MDUyLgorCitURVJNSU5BVElPTiBPRiBUSEUgQUdSRUVNRU5ULiBJbnRlbCBtYXkgdGVybWluYXRlIHRoaXMgQWdyZWVtZW50IGlmIHlvdSB2aW9sYXRlIGl0cyB0ZXJtcy4gVXBvbiB0ZXJtaW5hdGlvbiwgeW91IHdpbGwgaW1tZWRpYXRlbHkgZGVzdHJveSB0aGUgU29mdHdhcmUgb3IgcmV0dXJuIGFsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlIHRvIEludGVsLgorCistLS0tLS0tLS0tCitFWEhJQklUICJBIgorCitTT0ZUV0FSRSBMSUNFTlNFIEFHUkVFTUVOVCAoRmluYWwsIFNpbmdsZSBVc2VyKQorCitJTVBPUlRBTlQgLSBSRUFEIEJFRk9SRSBDT1BZSU5HLCBJTlNUQUxMSU5HIE9SIFVTSU5HLiBEbyBub3QgdXNlIG9yIGxvYWQgdGhpcyBmaXJtd2FyZSBpbWFnZSAodGhlICJTb2Z0d2FyZSIpIHVudGlsIHlvdSBoYXZlIGNhcmVmdWxseSByZWFkIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMuIEJ5IGxvYWRpbmcgb3IgdXNpbmcgdGhlIFNvZnR3YXJlLCB5b3UgYWdyZWUgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LiBJZiB5b3UgZG8gbm90IHdpc2ggdG8gc28gYWdyZWUsIGRvIG5vdCBpbnN0YWxsIG9yIHVzZSB0aGUgU29mdHdhcmUuCisKK0xJQ0VOU0UuIFlvdSBtYXkgY29weSBhbmQgdXNlIHRoZSBTb2Z0d2FyZSwgc3ViamVjdCB0byB0aGVzZSBjb25kaXRpb25zOgorCisxLiBUaGlzIFNvZnR3YXJlIGlzIGxpY2Vuc2VkIGZvciB1c2Ugb25seSBpbiBjb25qdW5jdGlvbiB3aXRoIEludGVsIGNvbXBvbmVudCBwcm9kdWN0cy4gVXNlIG9mIHRoZSBTb2Z0d2FyZSBpbiBjb25qdW5jdGlvbiB3aXRoIG5vbi1JbnRlbCBjb21wb25lbnQgcHJvZHVjdHMgaXMgbm90IGxpY2Vuc2VkIGhlcmV1bmRlci4KKzIuIFlvdSBtYXkgbm90IGNvcHksIG1vZGlmeSwgcmVudCwgc2VsbCwgZGlzdHJpYnV0ZSBvciB0cmFuc2ZlciBhbnkgcGFydCBvZiB0aGUgU29mdHdhcmUgZXhjZXB0IGFzIHByb3ZpZGVkIGluIHRoaXMgQWdyZWVtZW50LCBhbmQgeW91IGFncmVlIHRvIHByZXZlbnQgdW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhlIFNvZnR3YXJlLgorMy4gWW91IG1heSBub3QgcmV2ZXJzZSBlbmdpbmVlciwgZGVjb21waWxlLCBvciBkaXNhc3NlbWJsZSB0aGUgU29mdHdhcmUuCis0LiBZb3UgbWF5IG5vdCBzdWJsaWNlbnNlIHRoZSBTb2Z0d2FyZS4KKzUuIFRoZSBTb2Z0d2FyZSBtYXkgY29udGFpbiB0aGUgc29mdHdhcmUgb3Igb3RoZXIgcHJvcGVydHkgb2YgdGhpcmQgcGFydHkgc3VwcGxpZXJzLgorCitPV05FUlNISVAgT0YgU09GVFdBUkUgQU5EIENPUFlSSUdIVFMuIFRpdGxlIHRvIGFsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlIHJlbWFpbnMgd2l0aCBJbnRlbCBvciBpdHMgc3VwcGxpZXJzLiBUaGUgU29mdHdhcmUgaXMgY29weXJpZ2h0ZWQgYW5kIHByb3RlY3RlZCBieSB0aGUgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBhbmQgb3RoZXIgY291bnRyaWVzLCBhbmQgaW50ZXJuYXRpb25hbCB0cmVhdHkgcHJvdmlzaW9ucy4gWW91IG1heSBub3QgcmVtb3ZlIGFueSBjb3B5cmlnaHQgbm90aWNlcyBmcm9tIHRoZSBTb2Z0d2FyZS4gSW50ZWwgbWF5IG1ha2UgY2hhbmdlcyB0byB0aGUgU29mdHdhcmUsIG9yIGl0ZW1zIHJlZmVyZW5jZWQgdGhlcmVpbiwgYXQgYW55IHRpbWUgd2l0aG91dCBub3RpY2UsIGJ1dCBpcyBub3Qgb2JsaWdhdGVkIHRvIHN1cHBvcnQgb3IgdXBkYXRlIHRoZSBTb2Z0d2FyZS4gRXhjZXB0IGFzIG90aGVyd2lzZSBleHByZXNzbHkgcHJvdmlkZWQsIEludGVsIGdyYW50cyBubyBleHByZXNzIG9yIGltcGxpZWQgcmlnaHQgdW5kZXIgSW50ZWwgcGF0ZW50cywgY29weXJpZ2h0cywgdHJhZGVtYXJrcywgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cy4gWW91IG1heSB0cmFuc2ZlciB0aGUgU29mdHdhcmUgb25seSBpZiBhIGNvcHkgb2YgdGhpcyBsaWNlbnNlIGFjY29tcGFuaWVzIHRoZSBTb2Z0d2FyZSBhbmQgdGhlIHJlY2lwaWVudCBhZ3JlZXMgdG8gYmUgZnVsbHkgYm91bmQgYnkgdGhlc2UgdGVybXMuCisKK0VYQ0xVU0lPTiBPRiBPVEhFUiBXQVJSQU5USUVTIEVYQ0VQVCBBUyBQUk9WSURFRCBBQk9WRSwgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRZIE9GIEFOWSBLSU5EIElOQ0xVRElORyBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgTk9OSU5GUklOR0VNRU5ULCBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gSW50ZWwgZG9lcyBub3Qgd2FycmFudCBvciBhc3N1bWUgcmVzcG9uc2liaWxpdHkgZm9yIHRoZSBhY2N1cmFjeSBvciBjb21wbGV0ZW5lc3Mgb2YgYW55IGluZm9ybWF0aW9uLCB0ZXh0LCBncmFwaGljcywgbGlua3Mgb3Igb3RoZXIgaXRlbXMgY29udGFpbmVkIHdpdGhpbiB0aGUgU29mdHdhcmUuCisKK0xJTUlUQVRJT04gT0YgTElBQklMSVRZLiBJTiBOTyBFVkVOVCBTSEFMTCBJTlRFTCBPUiBJVFMgU1VQUExJRVJTIEJFIExJQUJMRSBGT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiAoSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIExPU1QgUFJPRklUUywgQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBPUiBMT1NUIElORk9STUFUSU9OKSBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9GIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFNPRlRXQVJFLCBFVkVOIElGIElOVEVMIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gU09NRSBKVVJJU0RJQ1RJT05TIFBST0hJQklUIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBGT1IgSU1QTElFRCBXQVJSQU5USUVTIE9SIENPTlNFUVVFTlRJQUwgT1IgSU5DSURFTlRBTCBEQU1BR0VTLCBTTyBUSEUgQUJPVkUgTElNSVRBVElPTiBNQVkgTk9UIEFQUExZIFRPIFlPVS4gWU9VIE1BWSBBTFNPIEhBVkUgT1RIRVIgTEVHQUwgUklHSFRTIFRIQVQgVkFSWSBCRVRXRUVOIEpVUklTRElDVElPTlMuCisKK1RFUk1JTkFUSU9OIE9GIFRISVMgQUdSRUVNRU5ULiBJbnRlbCBtYXkgdGVybWluYXRlIHRoaXMgQWdyZWVtZW50IGF0IGFueSB0aW1lIGlmIHlvdSB2aW9sYXRlIGl0cyB0ZXJtcy4gVXBvbiB0ZXJtaW5hdGlvbiwgeW91IHdpbGwgaW1tZWRpYXRlbHkgZGVzdHJveSB0aGUgU29mdHdhcmUuCisKK0FQUExJQ0FCTEUgTEFXUy4gQ2xhaW1zIGFyaXNpbmcgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgQ2FsaWZvcm5pYSwgZXhjbHVkaW5nIGl0cyBwcmluY2lwbGVzIG9mIGNvbmZsaWN0IG9mIGxhd3MgYW5kIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlIFNhbGUgb2YgR29vZHMuIFlvdSBtYXkgbm90IGV4cG9ydCB0aGUgU29mdHdhcmUgaW4gdmlvbGF0aW9uIG9mIGFwcGxpY2FibGUgZXhwb3J0IGxhd3MgYW5kIHJlZ3VsYXRpb25zLiBJbnRlbCBpcyBub3Qgb2JsaWdhdGVkIHVuZGVyIGFueSBvdGhlciBhZ3JlZW1lbnRzIHVubGVzcyB0aGV5IGFyZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgYW4gYXV0aG9yaXplZCByZXByZXNlbnRhdGl2ZSBvZiBJbnRlbC4KKworR09WRVJOTUVOVCBSRVNUUklDVEVEIFJJR0hUUy4gVGhlIFNvZnR3YXJlIGlzIHByb3ZpZGVkIHdpdGggIlJFU1RSSUNURUQgUklHSFRTLiIgVXNlLCBkdXBsaWNhdGlvbiwgb3IgZGlzY2xvc3VyZSBieSB0aGUgR292ZXJubWVudCBpcyBzdWJqZWN0IHRvIHJlc3RyaWN0aW9ucyBhcyBzZXQgZm9ydGggaW4gRkFSNTIuMjI3LTE0IGFuZCBERkFSMjUyLjIyNy03MDEzIGV0IHNlcS4gb3IgdGhlaXIgc3VjY2Vzc29ycy4gVXNlIG9mIHRoZSBTb2Z0d2FyZSBieSB0aGUgR292ZXJubWVudCBjb25zdGl0dXRlcyBhY2tub3dsZWRnbWVudCBvZiBJbnRlbCdzIHByb3ByaWV0YXJ5IHJpZ2h0cyB0aGVyZWluLiBDb250cmFjdG9yIG9yIE1hbnVmYWN0dXJlciBpcyBJbnRlbCBDb3Jwb3JhdGlvbiwgMjIwMCBNaXNzaW9uIENvbGxlZ2UgQmx2ZC4sIFNhbnRhIENsYXJhLCBDQSA5NTA1Mi4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL2lwdzIyMDAtZncgYi9saWNlbnNlcy9pcHcyMjAwLWZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMjZjNjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9pcHcyMjAwLWZ3CkBAIC0wLDAgKzEsMjEwIEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFRFUk1TIEFORCBDT05ESVRJT05TCisgICAgSU1QT1JUQU5UIC0gUExFQVNFIFJFQUQgQkVGT1JFIElOU1RBTExJTkcgT1IgVVNJTkcgVEhJUyBJTlRFTChDKSBTT0ZUV0FSRQorCitEbyBub3QgdXNlIG9yIGxvYWQgdGhpcyBmaXJtd2FyZSAodGhlICJTb2Z0d2FyZSIpIHVudGlsIHlvdSBoYXZlIGNhcmVmdWxseSByZWFkCit0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zLiBCeSBsb2FkaW5nIG9yIHVzaW5nIHRoZSBTb2Z0d2FyZSwgeW91IGFncmVlCit0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQuIElmIHlvdSBkbyBub3Qgd2lzaCB0byBzbyBhZ3JlZSwgZG8gbm90IGluc3RhbGwKK29yIHVzZSB0aGUgU29mdHdhcmUuCisKK0xJQ0VOU0VFUzoKKworUGxlYXNlIG5vdGU6IAorCisqIElmIHlvdSBhcmUgYW4gRW5kLVVzZXIsIG9ubHkgRXhoaWJpdCBBLCB0aGUgU09GVFdBUkUgTElDRU5TRSBBR1JFRU1FTlQsCisgIGFwcGxpZXMuCisqIElmIHlvdSBhcmUgYW4gT3JpZ2luYWwgRXF1aXBtZW50IE1hbnVmYWN0dXJlciAoT0VNKSwgSW5kZXBlbmRlbnQgSGFyZHdhcmUKKyAgVmVuZG9yIChJSFYpLCBvciBJbmRlcGVuZGVudCBTb2Z0d2FyZSBWZW5kb3IgKElTViksIHRoaXMgY29tcGxldGUgQWdyZWVtZW50CisgIGFwcGxpZXMgCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZvciBPRU1zLCBJSFZzLCBhbmQgSVNWczoKKworTElDRU5TRS4gVGhpcyBTb2Z0d2FyZSBpcyBsaWNlbnNlZCBmb3IgdXNlIG9ubHkgaW4gY29uanVuY3Rpb24gd2l0aCBJbnRlbAorY29tcG9uZW50IHByb2R1Y3RzLiBVc2Ugb2YgdGhlIFNvZnR3YXJlIGluIGNvbmp1bmN0aW9uIHdpdGggbm9uLUludGVsIGNvbXBvbmVudAorcHJvZHVjdHMgaXMgbm90IGxpY2Vuc2VkIGhlcmV1bmRlci4gU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsCitJbnRlbCBncmFudHMgdG8geW91IGEgbm9uZXhjbHVzaXZlLCBub250cmFuc2ZlcmFibGUsIHdvcmxkd2lkZSwgZnVsbHkgcGFpZC11cAorbGljZW5zZSB1bmRlciBJbnRlbCdzIGNvcHlyaWdodHMgdG86IChpKSBjb3B5IHRoZSBTb2Z0d2FyZSBpbnRlcm5hbGx5IGZvciB5b3VyCitvd24gZGV2ZWxvcG1lbnQgYW5kIG1haW50ZW5hbmNlIHB1cnBvc2VzOyAoaWkpIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlCit0byB5b3VyIGVuZC11c2VycywgYnV0IG9ubHkgdW5kZXIgYSBsaWNlbnNlIGFncmVlbWVudCB3aXRoIHRlcm1zIGF0IGxlYXN0IGFzCityZXN0cmljdGl2ZSBhcyB0aG9zZSBjb250YWluZWQgaW4gSW50ZWwncyBGaW5hbCwgU2luZ2xlIFVzZXIgTGljZW5zZSBBZ3JlZW1lbnQsCithdHRhY2hlZCBhcyBFeGhpYml0IEE7IGFuZCAoaWlpKSBtb2RpZnksIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIGVuZC11c2VyCitkb2N1bWVudGF0aW9uIHdoaWNoIG1heSBhY2NvbXBhbnkgdGhlIFNvZnR3YXJlLCBidXQgb25seSBpbiBhc3NvY2lhdGlvbiB3aXRoCit0aGUgU29mdHdhcmUuICAKKworSWYgeW91IGFyZSBub3QgdGhlIGZpbmFsIG1hbnVmYWN0dXJlciBvciB2ZW5kb3Igb2YgYSBjb21wdXRlciBzeXN0ZW0gb3Igc29mdHdhcmUKK3Byb2dyYW0gaW5jb3Jwb3JhdGluZyB0aGUgU29mdHdhcmUsIHRoZW4geW91IG1heSB0cmFuc2ZlciBhIGNvcHkgb2YgdGhlCitTb2Z0d2FyZSwgaW5jbHVkaW5nIGFueSByZWxhdGVkIGRvY3VtZW50YXRpb24gKG1vZGlmaWVkIG9yIHVubW9kaWZpZWQpIHRvIHlvdXIKK3JlY2lwaWVudCBmb3IgdXNlIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIHByb3ZpZGVkIHN1Y2gKK3JlY2lwaWVudCBhZ3JlZXMgdG8gYmUgZnVsbHkgYm91bmQgYnkgdGhlIHRlcm1zIGhlcmVvZi4gWW91IHNoYWxsIG5vdCBvdGhlcndpc2UKK2Fzc2lnbiwgc3VibGljZW5zZSwgbGVhc2UsIG9yIGluIGFueSBvdGhlciB3YXkgdHJhbnNmZXIgb3IgZGlzY2xvc2UgU29mdHdhcmUgdG8KK2FueSB0aGlyZCBwYXJ0eS4gWW91IG1heSBub3QsIG5vciBtYXkgeW91IGFzc2lzdCBhbnkgb3RoZXIgcGVyc29uIG9yIGVudGl0eSB0bworbW9kaWZ5LCB0cmFuc2xhdGUsIGNvbnZlcnQgdG8gYW5vdGhlciBwcm9ncmFtbWluZyBsYW5ndWFnZSwgZGVjb21waWxlLCByZXZlcnNlCitlbmdpbmVlciwgb3IgZGlzYXNzZW1ibGUgYW55IHBvcnRpb24gb2YgdGhlIFNvZnR3YXJlIG9yIG90aGVyd2lzZSBhdHRlbXB0IHRvCitkZXJpdmUgc291cmNlIGNvZGUgZnJvbSBhbnkgb2JqZWN0IGNvZGUgbW9kdWxlcyBvZiB0aGUgU29mdHdhcmUgb3IgYW55IGludGVybmFsCitkYXRhIGZpbGVzIGdlbmVyYXRlZCBieSB0aGUgU29mdHdhcmUuIFlvdXIgcmlnaHRzIHRvIHJlZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUKK3NoYWxsIGJlIGNvbnRpbmdlbnQgdXBvbiB5b3VyIGluc3RhbGxhdGlvbiBvZiB0aGlzIEFncmVlbWVudCBpbiBpdHMgZW50aXJldHkgaW4KK3RoZSBzYW1lIGRpcmVjdG9yeSBhcyB0aGUgU29mdHdhcmUuCisKK0NPTlRSQUNUT1JTLiBGb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCBub3R3aXRoc3RhbmRpbmcgYW55dGhpbmcgCit0byB0aGUgY29udHJhcnkgaGVyZXVuZGVyLCBzb2xlbHkgd2l0aCByZXNwZWN0IHRvIHRoZSByZXF1aXJlbWVudHMgZm9yIAorY29tcGxpYW5jZSB3aXRoIHRoZSB0ZXJtcyBoZXJldW5kZXIsIGFueSBjb250cmFjdG9ycyBvciBjb25zdWx0YW50cyB0aGF0IFlvdSAKK3VzZSB0byBwZXJmb3JtIHRoZSB3b3JrIG9yIG90aGVyd2lzZSBhc3Npc3QgWW91IGluIHRoZSBkZXZlbG9wbWVudCBvciBwcm9kdWN0cyAKK3VzaW5nIHRoaXMgU29mdHdhcmUgc2hhbGwgYmUgZGVlbWVkIHRvIGJlIEVuZCBVc2VycyBhbmQgYWNjb3JkaW5nbHksIHVwb24gCityZWNlaXB0IG9mIHRoZSBTb2Z0d2FyZSwgc2hhbGwgYmUgYm91bmQgYnkgdGhlIHRlcm1zIG9mIEV4aGliaXQgQSwgU29mdHdhcmUgCitMaWNlbnNlIEFncmVlbWVudC4gTm8gYWRkaXRpb25hbCBhZ3JlZW1lbnQgYmV0d2VlbiBZb3UgYW5kIHN1Y2ggY29uc3VsdGFudHMgb3IgCitjb250cmFjdG9ycyBpcyByZXF1aXJlZCB1bmRlciB0aGlzIEFncmVlbWVudCB0byBkZXRhaWwgc3VjaCBjb21wbGlhbmNlLgorCitUUkFERU1BUktTLiBFeGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIGhlcmVpbiwgeW91IHNoYWxsIG5vdCB1c2UgSW50ZWwncyAKK25hbWUgaW4gYW55IHB1YmxpY2F0aW9ucywgYWR2ZXJ0aXNlbWVudHMsIG9yIG90aGVyIGFubm91bmNlbWVudHMgd2l0aG91dCAKK0ludGVsJ3MgcHJpb3Igd3JpdHRlbiBjb25zZW50LiBZb3UgZG8gbm90IGhhdmUgYW55IHJpZ2h0cyB0byB1c2UgYW55IEludGVsIAordHJhZGVtYXJrcyBvciBsb2dvcy4KKworT1dORVJTSElQIE9GIFNPRlRXQVJFIEFORCBDT1BZUklHSFRTLiBTb2Z0d2FyZSBhbmQgYWNjb21wYW55aW5nIG1hdGVyaWFscywgaWYKK2FueSwgYXJlIG93bmVkIGJ5IEludGVsIG9yIGl0cyBzdXBwbGllcnMgYW5kIGxpY2Vuc29ycyBhbmQgbWF5IGJlIHByb3RlY3RlZCBieQorY29weXJpZ2h0LCB0cmFkZW1hcmssIHBhdGVudCBhbmQgdHJhZGUgc2VjcmV0IGxhdyBhbmQgaW50ZXJuYXRpb25hbCB0cmVhdGllcy4gCitBbnkgcmlnaHRzLCBleHByZXNzIG9yIGltcGxpZWQsIGluIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgZW1ib2RpZWQgaW4gdGhlCitmb3JlZ29pbmcsIG90aGVyIHRoYW4gdGhvc2Ugc3BlY2lmaWVkIGluIHRoaXMgQWdyZWVtZW50LCBhcmUgcmVzZXJ2ZWQgYnkgSW50ZWwKK2FuZCBpdHMgc3VwcGxpZXJzIGFuZCBsaWNlbnNvcnMgb3Igb3RoZXJ3aXNlIGFzIHNldCBmb3J0aCBpbiBhbnkgYXBwbGljYWJsZQorb3BlbiBzb3VyY2UgbGljZW5zZSBhZ3JlZW1lbnQuIFlvdSB3aWxsIGtlZXAgdGhlIFNvZnR3YXJlIGZyZWUgb2YgbGllbnMsCithdHRhY2htZW50cywgYW5kIG90aGVyIGVuY3VtYnJhbmNlcy4gIFlvdSBhZ3JlZSBub3QgdG8gcmVtb3ZlIGFueSBwcm9wcmlldGFyeQorbm90aWNlcyBhbmQvb3IgYW55IGxhYmVscyBmcm9tIHRoZSBTb2Z0d2FyZSBhbmQgYWNjb21wYW55aW5nIG1hdGVyaWFscyB3aXRob3V0CitwcmlvciB3cml0dGVuIGFwcHJvdmFsIGJ5IEludGVsCisKK0xJTUlUQVRJT04gT0YgTElBQklMSVRZLiBJTiBOTyBFVkVOVCBTSEFMTCBJTlRFTCBPUiBJVFMgU1VQUExJRVJTIEFORCBMSUNFTlNPUlMKK0JFIExJQUJMRSBGT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBGUk9NIEFOWSBDQVVTRSBPRiBBQ1RJT04gT0YgQU5ZIEtJTkQKKyhJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgTE9TVCBQUk9GSVRTLCBCVVNJTkVTUyBJTlRFUlJVUFRJT04sIE9SIExPU1QKK0lORk9STUFUSU9OKSBBUklTSU5HIE9VVCBPRiBUSEUgVVNFLCBNT0RJRklDQVRJT04sIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFCitJTlRFTCBTT0ZUV0FSRSwgT1IgT1RIRVJXSVNFLCBOT1IgRk9SIFBVTklUSVZFLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBPUgorU1BFQ0lBTCBEQU1BR0VTIE9GIEFOWSBLSU5ELCBFVkVOIElGIElOVEVMIE9SIElUUyBTVVBQTElFUlMgQU5EIExJQ0VOU09SUyBIQVMKK0JFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiAgIFNPTUUgSlVSSVNESUNUSU9OUyBQUk9ISUJJVAorRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgTElBQklMSVRZIEZPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIENPTlNFUVVFTlRJQUwgT1IKK0lOQ0lERU5UQUwgREFNQUdFUywgU08gQ0VSVEFJTiBMSU1JVEFUSU9OUyBNQVkgTk9UIEFQUExZLiAgWU9VIE1BWSBBTFNPIEhBVkUKK09USEVSIExFR0FMIFJJR0hUUyBUSEFUIFZBUlkgQkVUV0VFTiBKVVJJU0RJQ1RJT05TLiAKKworRVhDTFVTSU9OIE9GIFdBUlJBTlRJRVMuICBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgUE9TU0lCTFkgV0lUSAorRkFVTFRTLiBVTkxFU1MgRVhQUkVTU0xZIEFHUkVFRCBPVEhFUldJU0UsIElOVEVMIEFORCBJVFMgU1VQUExJRVJTIEFORAorTElDRU5TT1JTIERJU0NMQUlNIEFOWSBBTkQgQUxMIFdBUlJBTlRJRVMgQU5EIEdVQVJBTlRFRVMsIEVYUFJFU1MsIElNUExJRUQgT1IKK09USEVSV0lTRSwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitOT05JTkZSSU5HRU1FTlQsIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgSW50ZWwgZG9lcyBub3Qgd2FycmFudAorb3IgYXNzdW1lIHJlc3BvbnNpYmlsaXR5IGZvciB0aGUgYWNjdXJhY3kgb3IgY29tcGxldGVuZXNzIG9mIGFueSBpbmZvcm1hdGlvbiwKK3RleHQsIGdyYXBoaWNzLCBsaW5rcyBvciBvdGhlciBpdGVtcyBjb250YWluZWQgd2l0aGluIHRoZSBTb2Z0d2FyZS4gIFlvdSBhc3N1bWUKK2FsbCBsaWFiaWxpdHksIGZpbmFuY2lhbCBvciBvdGhlcndpc2UsIGFzc29jaWF0ZWQgd2l0aCBZb3VyIHVzZSBvciBkaXNwb3NpdGlvbgorb2YgdGhlIFNvZnR3YXJlLgorCQkKK0FQUExJQ0FCTEUgTEFXLiBDbGFpbXMgYXJpc2luZyB1bmRlciB0aGlzIEFncmVlbWVudCBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUKK2xhd3Mgb2YgU3RhdGUgb2YgQ2FsaWZvcm5pYV0sIGV4Y2x1ZGluZyBpdHMgcHJpbmNpcGxlcyBvZiBjb25mbGljdCBvZiBsYXdzIGFuZAordGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgU2FsZSBvZiBHb29kcy4gIAorCitXQUlWRVIgQU5EIEFNRU5ETUVOVC4gTm8gbW9kaWZpY2F0aW9uLCBhbWVuZG1lbnQgb3Igd2FpdmVyIG9mIGFueSBwcm92aXNpb24gb2YKK3RoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGVmZmVjdGl2ZSB1bmxlc3MgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IGFuIG9mZmljZXIgb2YKK0ludGVsLiAgTm8gZmFpbHVyZSBvciBkZWxheSBpbiBleGVyY2lzaW5nIGFueSByaWdodCwgcG93ZXIsIG9yIHJlbWVkeSB1bmRlcgordGhpcyBBZ3JlZW1lbnQgc2hhbGwgb3BlcmF0ZSBhcyBhIHdhaXZlciBvZiBhbnkgc3VjaCByaWdodCwgcG93ZXIgb3IgcmVtZWR5LiAKK1dpdGhvdXQgbGltaXRpbmcgdGhlIGZvcmVnb2luZywgdGVybXMgYW5kIGNvbmRpdGlvbnMgb24gYW55IHB1cmNoYXNlIG9yZGVycyBvcgorc2ltaWxhciBtYXRlcmlhbHMgc3VibWl0dGVkIGJ5IHlvdSB0byBJbnRlbCwgYW5kIGFueSB0ZXJtcyBjb250YWluZWQgaW4gSW50ZWzCknMKK3N0YW5kYXJkIGFja25vd2xlZGdtZW50IGZvcm0gdGhhdCBhcmUgaW4gY29uZmxpY3Qgd2l0aCB0aGVzZSB0ZXJtcywgc2hhbGwgYmUgb2YKK25vIGZvcmNlIG9yIGVmZmVjdC4KKworU0VWRVJBQklMSVRZLiAgSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBoZWxkIGJ5IGEgY291cnQgb2YKK2NvbXBldGVudCBqdXJpc2RpY3Rpb24gdG8gYmUgY29udHJhcnkgdG8gbGF3LCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSBjaGFuZ2VkCithbmQgaW50ZXJwcmV0ZWQgc28gYXMgdG8gYmVzdCBhY2NvbXBsaXNoIHRoZSBvYmplY3RpdmVzIG9mIHRoZSBvcmlnaW5hbAorcHJvdmlzaW9uIHRvIHRoZSBmdWxsZXN0IGV4dGVudCBhbGxvd2VkIGJ5IGxhdyBhbmQgdGhlIHJlbWFpbmluZyBwcm92aXNpb25zIG9mCit0aGlzIEFncmVlbWVudCBzaGFsbCByZW1haW4gaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0LgorCitFWFBPUlQgUkVTVFJJQ1RJT05TLiAgRWFjaCBwYXJ0eSBhY2tub3dsZWRnZXMgdGhhdCB0aGUgU29mdHdhcmUgaXMgc3ViamVjdCB0bworYXBwbGljYWJsZSBpbXBvcnQgYW5kIGV4cG9ydCByZWd1bGF0aW9ucyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBhbmQgb2YgdGhlCitjb3VudHJpZXMgaW4gd2hpY2ggZWFjaCBwYXJ0eSB0cmFuc2FjdHMgYnVzaW5lc3MsIHNwZWNpZmljYWxseSBpbmNsdWRpbmcgVS5TLgorRXhwb3J0IEFkbWluaXN0cmF0aW9uIEFjdCBhbmQgRXhwb3J0IEFkbWluaXN0cmF0aW9uIFJlZ3VsYXRpb25zLiAgRWFjaCBwYXJ0eQorc2hhbGwgY29tcGx5IHdpdGggc3VjaCBsYXdzIGFuZCByZWd1bGF0aW9ucywgYXMgd2VsbCBhcyBhbGwgb3RoZXIgbGF3cyBhbmQKK3JlZ3VsYXRpb25zIGFwcGxpY2FibGUgdG8gdGhlIFNvZnR3YXJlLiAgV2l0aG91dCBsaW1pdGluZyB0aGUgZ2VuZXJhbGl0eSBvZiB0aGUKK2ZvcmVnb2luZywgZWFjaCBwYXJ0eSBhZ3JlZXMgdGhhdCBpdCB3aWxsIG5vdCBleHBvcnQsIHJlLWV4cG9ydCwgdHJhbnNmZXIgb3IKK2RpdmVydCBhbnkgb2YgdGhlIFNvZnR3YXJlIG9yIHRoZSBkaXJlY3QgcHJvZ3JhbXMgdGhlcmVvZiB0byBhbnkgcmVzdHJpY3RlZAorcGxhY2Ugb3IgcGFydHkgaW4gYWNjb3JkYW5jZSB3aXRoIFUuUy4gZXhwb3J0IHJlZ3VsYXRpb25zLiAgTm90ZSB0aGF0IFNvZnR3YXJlCitjb250YWluaW5nIGVuY3J5cHRpb24gbWF5IGJlIHN1YmplY3QgdG8gYWRkaXRpb25hbCByZXN0cmljdGlvbnMuCisKK0dPVkVSTk1FTlQgUkVTVFJJQ1RFRCBSSUdIVFMuIFRoZSBTb2Z0d2FyZSBpcyBwcm92aWRlZCB3aXRoICJSRVNUUklDVEVEIFJJR0hUUy4iCitVc2UsIGR1cGxpY2F0aW9uLCBvciBkaXNjbG9zdXJlIGJ5IHRoZSBHb3Zlcm5tZW50IGlzIHN1YmplY3QgdG8gcmVzdHJpY3Rpb25zIGFzCitzZXQgZm9ydGggaW4gRkFSNTIuMjI3LTE0IGFuZCBERkFSMjUyLjIyNy03MDEzIGV0IHNlcS4gb3IgdGhlaXIgc3VjY2Vzc29ycy4gVXNlCitvZiB0aGUgU29mdHdhcmUgYnkgdGhlIEdvdmVybm1lbnQgY29uc3RpdHV0ZXMgYWNrbm93bGVkZ21lbnQgb2YgSW50ZWwncworcHJvcHJpZXRhcnkgcmlnaHRzIHRoZXJlaW4uIENvbnRyYWN0b3Igb3IgTWFudWZhY3R1cmVyIGlzIEludGVsIENvcnBvcmF0aW9uLAorMjIwMCBNaXNzaW9uIENvbGxlZ2UgQmx2ZC4sIFNhbnRhIENsYXJhLCBDQSAgOTUwNTIuCisKK1RFUk1JTkFUSU9OIE9GIFRIRSBBR1JFRU1FTlQuIEludGVsIG1heSB0ZXJtaW5hdGUgdGhpcyBBZ3JlZW1lbnQgaWYgeW91IHZpb2xhdGUKK2l0cyB0ZXJtcy4gVXBvbiB0ZXJtaW5hdGlvbiwgeW91IHdpbGwgaW1tZWRpYXRlbHkgZGVzdHJveSB0aGUgU29mdHdhcmUgb3IKK3JldHVybiBhbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSB0byBJbnRlbC4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRVhISUJJVCAiQSIKKworU09GVFdBUkUgTElDRU5TRSBBR1JFRU1FTlQgKEZpbmFsLCBTaW5nbGUgVXNlcikKKworSU1QT1JUQU5UIC0gUkVBRCBCRUZPUkUgQ09QWUlORywgSU5TVEFMTElORyBPUiBVU0lORy4KKworRG8gbm90IHVzZSBvciBsb2FkIHRoaXMgZmlybXdhcmUgaW1hZ2UgKHRoZSAiU29mdHdhcmUiKSB1bnRpbCB5b3UgaGF2ZSBjYXJlZnVsbHkKK3JlYWQgdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gQnkgbG9hZGluZyBvciB1c2luZyB0aGUgU29mdHdhcmUsIHlvdQorYWdyZWUgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LiBJZiB5b3UgZG8gbm90IHdpc2ggdG8gc28gYWdyZWUsIGRvIG5vdAoraW5zdGFsbCBvciB1c2UgdGhlIFNvZnR3YXJlLgorCitMSUNFTlNFLiBZb3UgbWF5IGNvcHkgYW5kIHVzZSB0aGUgU29mdHdhcmUsIHN1YmplY3QgdG8gdGhlc2UgY29uZGl0aW9uczogCisxLiBUaGlzIFNvZnR3YXJlIGlzIGxpY2Vuc2VkIGZvciB1c2Ugb25seSBpbiBjb25qdW5jdGlvbiB3aXRoIEludGVsIGNvbXBvbmVudAorICAgcHJvZHVjdHMuIFVzZSBvZiB0aGUgU29mdHdhcmUgaW4gY29uanVuY3Rpb24gd2l0aCBub24tSW50ZWwgY29tcG9uZW50IAorICAgcHJvZHVjdHMgaXMgbm90IGxpY2Vuc2VkIGhlcmV1bmRlci4gCisyLiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHJlbnQsIHNlbGwsIGRpc3RyaWJ1dGUgb3IgdHJhbnNmZXIgYW55IHBhcnQgb2YgdGhlCisgICBTb2Z0d2FyZSBleGNlcHQgYXMgcHJvdmlkZWQgaW4gdGhpcyBBZ3JlZW1lbnQsIGFuZCB5b3UgYWdyZWUgdG8gcHJldmVudAorICAgdW5hdXRob3JpemVkIGNvcHlpbmcgb2YgdGhlIFNvZnR3YXJlLiAKKzMuIFlvdSBtYXkgbm90IHJldmVyc2UgZW5naW5lZXIsIGRlY29tcGlsZSwgb3IgZGlzYXNzZW1ibGUgdGhlIFNvZnR3YXJlLiAKKzQuIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2UgdGhlIFNvZnR3YXJlLiAKKzUuIFRoZSBTb2Z0d2FyZSBtYXkgY29udGFpbiB0aGUgc29mdHdhcmUgb3Igb3RoZXIgcHJvcGVydHkgb2YgdGhpcmQgcGFydHkKKyAgIHN1cHBsaWVycy4gCisKK09XTkVSU0hJUCBPRiBTT0ZUV0FSRSBBTkQgQ09QWVJJR0hUUy4gVGl0bGUgdG8gYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUKK3JlbWFpbnMgd2l0aCBJbnRlbCBvciBpdHMgc3VwcGxpZXJzLiBUaGUgU29mdHdhcmUgaXMgY29weXJpZ2h0ZWQgYW5kIHByb3RlY3RlZAorYnkgdGhlIGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgYW5kIG90aGVyIGNvdW50cmllcywgYW5kIGludGVybmF0aW9uYWwgdHJlYXR5Citwcm92aXNpb25zLiBZb3UgbWF5IG5vdCByZW1vdmUgYW55IGNvcHlyaWdodCBub3RpY2VzIGZyb20gdGhlIFNvZnR3YXJlLiBJbnRlbAorbWF5IG1ha2UgY2hhbmdlcyB0byB0aGUgU29mdHdhcmUsIG9yIGl0ZW1zIHJlZmVyZW5jZWQgdGhlcmVpbiwgYXQgYW55IHRpbWUKK3dpdGhvdXQgbm90aWNlLCBidXQgaXMgbm90IG9ibGlnYXRlZCB0byBzdXBwb3J0IG9yIHVwZGF0ZSB0aGUgU29mdHdhcmUuIEV4Y2VwdAorYXMgb3RoZXJ3aXNlIGV4cHJlc3NseSBwcm92aWRlZCwgSW50ZWwgZ3JhbnRzIG5vIGV4cHJlc3Mgb3IgaW1wbGllZCByaWdodCB1bmRlcgorSW50ZWwgcGF0ZW50cywgY29weXJpZ2h0cywgdHJhZGVtYXJrcywgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cy4KK1lvdSBtYXkgdHJhbnNmZXIgdGhlIFNvZnR3YXJlIG9ubHkgaWYgYSBjb3B5IG9mIHRoaXMgbGljZW5zZSBhY2NvbXBhbmllcyB0aGUgCitTb2Z0d2FyZSBhbmQgdGhlIHJlY2lwaWVudCBhZ3JlZXMgdG8gYmUgZnVsbHkgYm91bmQgYnkgdGhlc2UgdGVybXMuCisKK0VYQ0xVU0lPTiBPRiBPVEhFUiBXQVJSQU5USUVTIEVYQ0VQVCBBUyBQUk9WSURFRCBBQk9WRSwgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVECisiQVMgSVMiIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5UWSBPRiBBTlkgS0lORCBJTkNMVURJTkcKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBOT05JTkZSSU5HRU1FTlQsIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorUFVSUE9TRS4gSW50ZWwgZG9lcyBub3Qgd2FycmFudCBvciBhc3N1bWUgcmVzcG9uc2liaWxpdHkgZm9yIHRoZSBhY2N1cmFjeSBvcgorY29tcGxldGVuZXNzIG9mIGFueSBpbmZvcm1hdGlvbiwgdGV4dCwgZ3JhcGhpY3MsIGxpbmtzIG9yIG90aGVyIGl0ZW1zIGNvbnRhaW5lZAord2l0aGluIHRoZSBTb2Z0d2FyZS4KKworTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuIElOIE5PIEVWRU5UIFNIQUxMIElOVEVMIE9SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUgorQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiAoSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIExPU1QgUFJPRklUUywgQlVTSU5FU1MKK0lOVEVSUlVQVElPTiwgT1IgTE9TVCBJTkZPUk1BVElPTikgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPRiBPUiBJTkFCSUxJVFkgVE8KK1VTRSBUSEUgU09GVFdBUkUsIEVWRU4gSUYgSU5URUwgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorREFNQUdFUy4gU09NRSBKVVJJU0RJQ1RJT05TIFBST0hJQklUIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBGT1IKK0lNUExJRUQgV0FSUkFOVElFUyBPUiBDT05TRVFVRU5USUFMIE9SIElOQ0lERU5UQUwgREFNQUdFUywgU08gVEhFIEFCT1ZFCitMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLiBZT1UgTUFZIEFMU08gSEFWRSBPVEhFUiBMRUdBTCBSSUdIVFMgVEhBVCBWQVJZCitCRVRXRUVOIEpVUklTRElDVElPTlMuCisKK1RFUk1JTkFUSU9OIE9GIFRISVMgQUdSRUVNRU5ULiBJbnRlbCBtYXkgdGVybWluYXRlIHRoaXMgQWdyZWVtZW50IGF0IGFueSB0aW1lIGlmCit5b3UgdmlvbGF0ZSBpdHMgdGVybXMuIFVwb24gdGVybWluYXRpb24sIHlvdSB3aWxsIGltbWVkaWF0ZWx5IGRlc3Ryb3kgdGhlCitTb2Z0d2FyZS4KKworQVBQTElDQUJMRSBMQVdTLiBDbGFpbXMgYXJpc2luZyB1bmRlciB0aGlzIEFncmVlbWVudCBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUKK2xhd3Mgb2YgQ2FsaWZvcm5pYSwgZXhjbHVkaW5nIGl0cyBwcmluY2lwbGVzIG9mIGNvbmZsaWN0IG9mIGxhd3MgYW5kIHRoZSBVbml0ZWQKK05hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBTYWxlIG9mIEdvb2RzLiBZb3UgbWF5IG5vdCBleHBvcnQgdGhlCitTb2Z0d2FyZSBpbiB2aW9sYXRpb24gb2YgYXBwbGljYWJsZSBleHBvcnQgbGF3cyBhbmQgcmVndWxhdGlvbnMuIEludGVsIGlzIG5vdAorb2JsaWdhdGVkIHVuZGVyIGFueSBvdGhlciBhZ3JlZW1lbnRzIHVubGVzcyB0aGV5IGFyZSBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkKK2FuIGF1dGhvcml6ZWQgcmVwcmVzZW50YXRpdmUgCitvZiBJbnRlbC4KKworR09WRVJOTUVOVCBSRVNUUklDVEVEIFJJR0hUUy4gVGhlIFNvZnR3YXJlIGlzIHByb3ZpZGVkIHdpdGggIlJFU1RSSUNURUQgUklHSFRTLiIKK1VzZSwgZHVwbGljYXRpb24sIG9yIGRpc2Nsb3N1cmUgYnkgdGhlIEdvdmVybm1lbnQgaXMgc3ViamVjdCB0byByZXN0cmljdGlvbnMgYXMKK3NldCBmb3J0aCBpbiBGQVI1Mi4yMjctMTQgYW5kIERGQVIyNTIuMjI3LTcwMTMgZXQgc2VxLiBvciB0aGVpciBzdWNjZXNzb3JzLiBVc2UKK29mIHRoZSBTb2Z0d2FyZSBieSB0aGUgR292ZXJubWVudCBjb25zdGl0dXRlcyBhY2tub3dsZWRnbWVudCBvZiBJbnRlbCdzCitwcm9wcmlldGFyeSByaWdodHMgdGhlcmVpbi4gQ29udHJhY3RvciBvciBNYW51ZmFjdHVyZXIgaXMgSW50ZWwgQ29ycG9yYXRpb24sCisyMjAwIE1pc3Npb24gQ29sbGVnZSBCbHZkLiwgU2FudGEgQ2xhcmEsIENBIDk1MDUyLgorCisKKworCQkKKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvaXB3Mzk0NSBiL2xpY2Vuc2VzL2lwdzM5NDUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM4ZmI1ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL2lwdzM5NDUKQEAgLTAsMCArMSwzOSBAQAorQ29weXJpZ2h0IChjKSAyMDA2LCBJbnRlbCBDb3Jwb3JhdGlvbi4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uLiAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBiaW5hcnkgZm9ybSwgd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZQorbWV0OgorCisqIFJlZGlzdHJpYnV0aW9ucyBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlCisgIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMKKyAgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEludGVsIENvcnBvcmF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzIHN1cHBsaWVycworICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisqIE5vIHJldmVyc2UgZW5naW5lZXJpbmcsIGRlY29tcGlsYXRpb24sIG9yIGRpc2Fzc2VtYmx5IG9mIHRoaXMgc29mdHdhcmUKKyAgaXMgcGVybWl0dGVkLgorCitMaW1pdGVkIHBhdGVudCBsaWNlbnNlLiAgSW50ZWwgQ29ycG9yYXRpb24gZ3JhbnRzIGEgd29ybGQtd2lkZSwKK3JveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlIHVuZGVyIHBhdGVudHMgaXQgbm93IG9yIGhlcmVhZnRlcgorb3ducyBvciBjb250cm9scyB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgaW1wb3J0LCBvZmZlciB0byBzZWxsIGFuZAorc2VsbCAoIlV0aWxpemUiKSB0aGlzIHNvZnR3YXJlLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkKK3N1Y2ggcGF0ZW50IGlzIG5lY2Vzc2FyeSB0byBVdGlsaXplIHRoZSBzb2Z0d2FyZSBhbG9uZSwgb3IgaW4KK2NvbWJpbmF0aW9uIHdpdGggYW4gb3BlcmF0aW5nIHN5c3RlbSBsaWNlbnNlZCB1bmRlciBhbiBhcHByb3ZlZCBPcGVuCitTb3VyY2UgbGljZW5zZSBhcyBsaXN0ZWQgYnkgdGhlIE9wZW4gU291cmNlIEluaXRpYXRpdmUgYXQKK2h0dHA6Ly9vcGVuc291cmNlLm9yZy9saWNlbnNlcy4gIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QgYXBwbHkgdG8KK2FueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGlzIHNvZnR3YXJlLiAgTm8gaGFyZHdhcmUgcGVyCitzZSBpcyBsaWNlbnNlZCBoZXJldW5kZXIuCisKK0RJU0NMQUlNRVIuICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQKK0NPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywKK0JVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5ECitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCitDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCitPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECitPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKK1RPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUKK1VTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKK0RBTUFHRS4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL2l4cDR4eCBiL2xpY2Vuc2VzL2l4cDR4eApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGIzZWZjCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvaXhwNHh4CkBAIC0wLDAgKzEsMTcwIEBACitodHRwOi8vd3d3LmludGVsLmNvbS9kZXNpZ24vbmV0d29yay9zd3N1cC9ucF9zbGEvaXhwNDAwLmh0bQoraHR0cDovL3d3dy5pbnRlbC5jb20vZGVzaWduL25ldHdvcmsvcHJvZHVjdHMvbnBmYW1pbHkvaXhwNDI1c3dyMS5odG0KKworICAgICAgICAgICAgICAgICAgICAgIElOVEVMIFNPRlRXQVJFIExJQ0VOU0UgQUdSRUVNRU5UCisgICAgICAgICAgIElNUE9SVEFOVCAtIFJFQUQgQkVGT1JFIENPUFlJTkcsIElOU1RBTExJTkcgT1IgVVNJTkcuCisKKyAgIERPIE5PVCBVU0UgT1IgTE9BRCBUSElTIFNPRlRXQVJFIE9SIEFOWSBBU1NPQ0lBVEVEIE1BVEVSSUFMUworICAgKENPTExFQ1RJVkVMWSwgVEhFICJTT0ZUV0FSRSIpIFVOVElMIFlPVSBIQVZFIENBUkVGVUxMWSBSRUFEIFRIRQorICAgRk9MTE9XSU5HIFRFUk1TIEFORCBDT05ESVRJT05TLiBCWSBMT0FESU5HIE9SIFVTSU5HIFRIRSBTT0ZUV0FSRSwgWU9VCisgICBBUyBBTiBJTkRJVklEVUFMIEFORCBPTiBCRUhBTEYgT0YgWU9VUiBFTVBMT1lFUiAoIllPVSIpIEFHUkVFIFRPIFRIRQorICAgVEVSTVMgT0YgVEhJUyBBR1JFRU1FTlQuCisgICBJRiBZT1UgRE8gTk9UIFdJU0ggVE8gU08gQUdSRUUsIERPIE5PVCBJTlNUQUxMIE9SIFVTRSBUSEUgU09GVFdBUkUuCisgICBMSUNFTlNFOiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudAorICAgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgcmVzdHJpY3Rpb25zIGJlbG93LCBJbnRlbCBDb3Jwb3JhdGlvbgorICAgKCJJbnRlbCIpIGdyYW50cyB0byB5b3UgdGhlIGZvbGxvd2luZyBub24tZXhjbHVzaXZlLCBub24tdHJhbnNmZXJhYmxlLAorICAgbm9uLWFzc2lnbmFibGUsIHJveWFsdHktZnJlZSBjb3B5cmlnaHQgbGljZW5zZXMgaW4gdGhlIFNvZnR3YXJlOgorICAgKiAiUmVkaXN0cmlidXRhYmxlIENvZGUiIGluY2x1ZGVzIGFsbCBTb2Z0d2FyZSBFWENFUFQgZm9yIHRoZSBzb2Z0d2FyZQorICAgY29udGFpbmVkIGluIHRoZSBzdWJkaXJlY3RvcnkgIml4cDQyNV94c2NhbGVfc3cvc3JjL2Fkc2wiLiBTdWJqZWN0IHRvCisgICB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQsIFlvdSBtYXkgcmVwcm9kdWNlLCBjcmVhdGUKKyAgIGRlcml2YXRpdmUgd29ya3Mgb2YsIGFuZCBkaXN0cmlidXRlIFJlZGlzdHJpYnV0YWJsZSBDb2RlLCBpbgorICAgZXhlY3V0YWJsZSBvciBzb3VyY2UgZm9ybSwgT05MWSB3aXRoLCBvciBhcyBwYXJ0IG9mLCBZb3VyIFByb2R1Y3QgKGFzCisgICBkZWZpbmVkIGJlbG93KSwgc3ViamVjdCB0byB0aGUgcmVzdHJpY3Rpb25zIHNldCBmb3J0aCBpbiB0aGlzCisgICBBZ3JlZW1lbnQuIERpc3RyaWJ1dGlvbiBmb3IgYW55IG90aGVyIHB1cnBvc2Ugb3IgaW4gYW55IG90aGVyIG1hbm5lcgorICAgaXMgcHJvaGliaXRlZCB1bmRlciB0aGlzIGxpY2Vuc2UuCisgICAqIElmIHlvdSBoYXZlIGRvd25sb2FkZWQgdGhlIHZlcnNpb24gb2YgSVhQNDAwIFNvZnR3YXJlIHdpdGgKKyAgIGVuY3J5cHRpb24gU29mdHdhcmUsIGFsbCBTb2Z0d2FyZSBjb250YWluZWQgaW4gdGhlCisgICBpeHA0MjVBY2Nlc3NMaWJyYXJ5V2l0aENyeXB0b194X3kuemlwIChXaGVyZSB4IGFuZCB5IHJlcHJlc2VudCB0aGUKKyAgIHNwZWNpZmljIHZlcnNpb24gbnVtYmVyIG9mIHRoZSBzb2Z0d2FyZSkgaXMgYWxzbyBSZWRpc3RyaWJ1dGFibGUgQ29kZQorICAgRVhDRVBUIGZvciB0aGUgc29mdHdhcmUgY29udGFpbmVkIGluIHRoZSBzdWJkaXJlY3RvcnkKKyAgICJpeHA0MjVfeHNjYWxlX3N3L3NyYy9hZHNsLiIgTm90ZSB0aGF0IGFsbCBTb2Z0d2FyZSBpbiB0aGUKKyAgIGl4cDQyNUFjY2Vzc0xpYnJhcnlXaXRoQ3J5cHRvX3hfeS56aXAgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSBVLlMuCisgICBFeHBvcnQgQWRtaW5pc3RyYXRpb24gUmVndWxhdGlvbnMgYW5kIG90aGVyIFUuUy4gbGF3LCBhbmQgWW91IGFyZQorICAgcmVzcG9uc2libGUgZm9yIGNvbXBsaWFuY2Ugd2l0aCBzdWNoIGxhd3MgYW5kIHJlZ3VsYXRpb25zLgorICAgKiAiTm9uLVJlZGlzdHJpYnV0YWJsZSBDb2RlIiBpbmNsdWRlcyB0aGUgU29mdHdhcmUgY29udGFpbmVkIGluIHRoZQorICAgaXhwNDI1QWNjZXNzTGlicmFyeV94X3kuemlwIGFuZCBpeHA0MjVBY2Nlc3NMaWJyYXJ5V2l0aENyeXB0b194X3kuemlwCisgICBzdWJkaXJlY3RvcnkgIml4cDQyNV94c2NhbGVfc3cvc3JjL2Fkc2wuIiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQKKyAgIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQsIFlvdSBtYXkgcmVwcm9kdWNlIGFuZCBjcmVhdGUgZGVyaXZhdGl2ZQorICAgd29ya3Mgb2YgTm9uLVJlZGlzdHJpYnV0YWJsZSBDb2RlLCBhbmQgZGlzdHJpYnV0ZSBzdWNoIGRlcml2YXRpdmUKKyAgIHdvcmtzIG9ubHkgaW4gZXhlY3V0YWJsZSBmb3JtIGFuZCBPTkxZIHdpdGgsIG9yIGFzIHBhcnQgb2YsIFlvdXIKKyAgIFByb2R1Y3QsIHN1YmplY3QgdG8gdGhlIHJlc3RyaWN0aW9ucyBzZXQgZm9ydGggaW4gdGhpcyBBZ3JlZW1lbnQuCisgICBSZWRpc3RyaWJ1dGFibGUgQ29kZSBtYXkgTk9UIGJlIHJlZGlzdHJpYnV0ZWQgdG8gdGhpcmQgcGFydGllcyBpbgorICAgc291cmNlIGNvZGUgZm9ybSwgYW5kIG1heSBOT1QgYmUgZGlzdHJpYnV0ZWQgaWYgc3VjaCBkaXN0cmlidXRpb24KKyAgIHdvdWxkIG9ibGlnYXRlIFlvdSwgdW5kZXIgYW4gb3BlbiBzb3VyY2UgYWdyZWVtZW50IG9yIG90aGVyd2lzZSwgdG8KKyAgIG1ha2Ugc291cmNlIGNvZGUgYXZhaWxhYmxlIHRvIHRoaXJkIHBhcnRpZXMuIElmIHlvdSBkZXNpcmUgdG8KKyAgIHJlZGlzdHJpYnV0ZSB0aGUgTm9uLVJlZGlzdHJpYnV0YWJsZSBTb3VyY2UgQ29kZSwgcGxlYXNlIGNvbnRhY3QgSW50ZWwKKyAgIHRvIHJlcXVlc3QgaW5mb3JtYXRpb24uCisgICAiWW91ciBQcm9kdWN0IiBtdXN0IGJlOiAoMSkgYSBoYXJkd2FyZSBwcm9kdWN0IHRoYXQgaW5jbHVkZXMgYW4gSW50ZWwKKyAgIG5ldHdvcmsgcHJvY2Vzc29yICgiWW91ciBIYXJkd2FyZSBQcm9kdWN0Iik7IGFuZC9vciAoMikgc29mdHdhcmUgdGhhdAorICAgcnVucyBvbiBvciBpbnRlcmZhY2VzIHdpdGggYW4gSW50ZWwgbmV0d29yayBwcm9jZXNzb3I7IGFuZCB3aGljaCBhbHNvCisgICBpbmNsdWRlcyBhIHN1YnN0YW50aWFsIGFtb3VudCBvZiBzb2Z0d2FyZSBmdW5jdGlvbmFsaXR5LCBzb2Z0d2FyZQorICAgbW9kaWZpY2F0aW9ucyBhbmQvb3IgaGFyZHdhcmUgdGhhdCBkaWZmZXJlbnRpYXRlcyBpdCBmcm9tIHRoZSBTb2Z0d2FyZQorICAgYXMgcHJvdmlkZWQgYnkgSW50ZWwgKCJZb3VyIFNvZnR3YXJlIFByb2R1Y3QiKS4KKyAgIFJFU1RSSUNUSU9OUzoKKyAgIEFueSBhdXRob3JpemVkIGRpc3RyaWJ1dGlvbiBvZiB0aGUgU29mdHdhcmUgYW5kL29yIGRlcml2YXRpdmUgd29ya3MKKyAgIHRoZXJlb2YgaXMgYWxzbyBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogWW91OiAoaSkgZW50ZXIKKyAgIGludG8gYSB3cml0dGVuIGFncmVlbWVudCAoZW5mb3JjZWFibGUgInNocmluay13cmFwIiBvciAiY2xpY2sgdG8KKyAgIGFjY2VwdCIgbGljZW5zZXMgYXJlIHBlcm1pc3NpYmxlKSB3aXRoIHRoZSBlbnRpdHkgb3IgcGVyc29uIHRvIHdob20KKyAgIHlvdSBhcmUgZGlzdHJpYnV0aW5nIHN1Y2ggU29mdHdhcmUgdGhhdCBhcmUgbGVhc3QgYXMgcmVzdHJpY3RpdmUgYXMKKyAgIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyB5b3UgZW50ZXIgaW50byB3aXRoIHlvdXIgbGljZW5zZWVzIGZvcgorICAgZGlzdHJpYnV0aW9uIG9mIHlvdXIgc29mdHdhcmU7IChpaSkgYXJlIHNvbGVseSByZXNwb25zaWJsZSBmb3IgYW55CisgICB3YXJyYW50eSwgdXBkYXRlIG9yIHN1cHBvcnQgb2JsaWdhdGlvbiwgb3Igb3RoZXIgbGlhYmlsaXR5IHRoYXQgbWF5CisgICBhcmlzZSBmcm9tIFlvdXIgZGlzdHJpYnV0aW9uIG9mIFNvZnR3YXJlIGFuZC9vciBkZXJpdmF0aXZlIHdvcmtzOworICAgKGlpaSkgd2lsbCBub3QgbWFrZSBhbnkgc3RhdGVtZW50IHRoYXQgeW91ciBwcm9kdWN0IGlzIHdhcnJhbnRlZCwKKyAgICJjZXJ0aWZpZWQsIiBvciB0aGF0IGl0cyBwZXJmb3JtYW5jZSBpcyBndWFyYW50ZWVkLCBieSBJbnRlbDsgKGl2KQorICAgd2lsbCBub3QgdXNlIEludGVsJ3MgbmFtZSBvciB0cmFkZW1hcmtzIHRvIG1hcmtldCB5b3VyIHByb2R1Y3Qgd2l0aG91dAorICAgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIGFuIGF1dGhvcml6ZWQgcmVwcmVzZW50YXRpdmUgb2YgSW50ZWw7ICh2KSBzaGFsbAorICAgcHJvaGliaXQgZGlzYXNzZW1ibHkgYW5kIHJldmVyc2UgZW5naW5lZXJpbmcgb2YgYW55IGV4ZWN1dGFibGUKKyAgIFNvZnR3YXJlIGFuZC9vciBkZXJpdmF0aXZlIHdvcmtzIHRoZXJlb2Y7ICh2aSkgc2hhbGwgaW5kZW1uaWZ5LCBob2xkCisgICBoYXJtbGVzcywgYW5kIGRlZmVuZCBJbnRlbCAoaW5jbHVkaW5nIGl0cyBvZmZpY2VycywgZW1wbG95ZWVzLAorICAgZGlyZWN0b3JzLCBzdWJzaWRpYXJpZXMsIHJlcHJlc2VudGF0aXZlcywgYWZmaWxpYXRlcyBhbmQgYWdlbnRzKSBhbmQKKyAgIEludGVsJ3Mgc3VwcGxpZXJzIGZyb20gYW5kIGFnYWluc3QgYW55IGNsYWltcyBvciBsYXdzdWl0cywgaW5jbHVkaW5nCisgICBhdHRvcm5leSdzIGZlZXMgYW5kIGV4cGVuc2VzLCB0aGF0IGFyaXNlIG9yIHJlc3VsdCBmcm9tIHlvdXIKKyAgIGRpc3RyaWJ1dGlvbiBvZiBhbnkgU29mdHdhcmUgb3IgZGVyaXZhdGl2ZSB3b3JrcyB0aGVyZW9mLCBpbmNsdWRpbmcKKyAgIGFueSBsaWFiaWxpdGllcyBhcmlzaW5nIGZyb20gYW55IHBlcm1pdHRlZCBkaXN0cmlidXRpb24gdW5kZXIgYW55IG9wZW4KKyAgIHNvdXJjZSBsaWNlbnNlLgorICAgT1BFTiBTT1VSQ0UgU09GVFdBUkUgUkVTVFJJQ1RJT05TLiBVbmxlc3MgZXhwcmVzc2x5IHBlcm1pdHRlZAorICAgZWxzZXdoZXJlIGluIHRoaXMgbGljZW5zZSwgWW91IG1heSBub3QgY29tYmluZSBvciBkaXN0cmlidXRlIHRoZQorICAgU29mdHdhcmUgd2l0aCBPcGVuIFNvdXJjZSBTb2Z0d2FyZSAoYXMgZGVmaW5lZCBiZWxvdykgb3Igd2l0aCBzb2Z0d2FyZQorICAgZGV2ZWxvcGVkIHVzaW5nIE9wZW4gU291cmNlIFNvZnR3YXJlIChlLmcuLCB0b29scykgaW4gYSBtYW5uZXIgdGhhdAorICAgc3ViamVjdHMgSW50ZWwgb3IgYW55IHBvcnRpb24gb2YgdGhlIFNvZnR3YXJlIHByb3ZpZGUgYnkgSW50ZWwKKyAgIGhlcmV1bmRlciB0byBhbnkgbGljZW5zZSBvYmxpZ2F0aW9ucyBvZiBzdWNoIE9wZW4gU291cmNlIFNvZnR3YXJlLgorICAgIk9wZW4gU291cmNlIFNvZnR3YXJlIiBtZWFucyBhbnkgc29mdHdhcmUgbGljZW5zZWQgdW5kZXIgdGVybXMKKyAgIHJlcXVpcmluZyB0aGF0IG90aGVyIHNvZnR3YXJlIGNvbWJpbmVkIG9yIGRpc3RyaWJ1dGVkIHdpdGggc3VjaAorICAgc29mdHdhcmU6IChpKSBiZSBkaXNjbG9zZWQgb3IgZGlzdHJpYnV0ZWQgaW4gc291cmNlIGNvZGUgZm9ybTsgKGlpKSBiZQorICAgbGljZW5zZWQgb24gdGVybXMgaW5jb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LgorICAgTk8gU1VQUE9SVCBVTkRFUiBUSElTIExJQ0VOU0UgQUdSRUVNRU5ULiBJbnRlbCBoYXMgbm8gb2JsaWdhdGlvbiB0bworICAgc3VwcG9ydCB0aGUgU29mdHdhcmUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQuCisgICBFWFBPUlQuIFlvdSBzaGFsbCBOT1QgZXhwb3J0LCBlaXRoZXIgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgYW55CisgICBwcm9kdWN0LCBzZXJ2aWNlIG9yIHRlY2huaWNhbCBkYXRhIG9yIHN5c3RlbSBpbmNvcnBvcmF0aW5nIFNvZnR3YXJlCisgICB3aXRob3V0IGZpcnN0IG9idGFpbmluZyBhbnkgcmVxdWlyZWQgbGljZW5zZSBvciBvdGhlciBhcHByb3ZhbCBmcm9tCisgICB0aGUgVS4gUy4gRGVwYXJ0bWVudCBvZiBDb21tZXJjZSBvciBhbnkgb3RoZXIgYWdlbmN5IG9yIGRlcGFydG1lbnQgb2YKKyAgIHRoZSBVbml0ZWQgU3RhdGVzIEdvdmVybm1lbnQuIEluIHRoZSBldmVudCBhbnkgU29mdHdhcmUgaXMgZXhwb3J0ZWQKKyAgIGZyb20gdGhlIFVuaXRlZCBTdGF0ZXMgb3IgcmUtZXhwb3J0ZWQgZnJvbSBhIGZvcmVpZ24gZGVzdGluYXRpb24gYnkKKyAgIFlvdSwgWW91IHNoYWxsIGVuc3VyZSB0aGF0IHRoZSBkaXN0cmlidXRpb24gYW5kIGV4cG9ydC9yZS1leHBvcnQgb3IKKyAgIGltcG9ydCBvZiB0aGUgU29mdHdhcmUgaXMgaW4gY29tcGxpYW5jZSB3aXRoIGFsbCBsYXdzLCByZWd1bGF0aW9ucywKKyAgIG9yZGVycywgb3Igb3RoZXIgcmVzdHJpY3Rpb25zIG9mIHRoZSBVLlMuIEV4cG9ydCBBZG1pbmlzdHJhdGlvbgorICAgUmVndWxhdGlvbnMgYW5kIHRoZSBhcHByb3ByaWF0ZSBmb3JlaWduIGdvdmVybm1lbnQuIFlvdSBzaGFsbCBOT1QKKyAgIGV4cG9ydC9yZS1leHBvcnQgYW55IHRlY2huaWNhbCBkYXRhLCBwcm9jZXNzLCBwcm9kdWN0LCBvciBzZXJ2aWNlLAorICAgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgdG8gYW55IGNvdW50cnkgZm9yIHdoaWNoIHRoZSBVbml0ZWQgU3RhdGVzCisgICBnb3Zlcm5tZW50IG9yIGFueSBhZ2VuY3kgdGhlcmVvZiBvciB0aGUgZm9yZWlnbiBnb3Zlcm5tZW50IGZyb20gd2hlcmUKKyAgIGl0IGlzIHNoaXBwaW5nIHJlcXVpcmVzIGFuIGV4cG9ydCBsaWNlbnNlLCBvciBvdGhlciBnb3Zlcm5tZW50YWwKKyAgIGFwcHJvdmFsLCB3aXRob3V0IGZpcnN0IG9idGFpbmluZyBzdWNoIGxpY2Vuc2Ugb3IgYXBwcm92YWwuCisgICBPV05FUlNISVAgT0YgU09GVFdBUkUgQU5EIElOVEVMTEVDVFVBTCBQUk9QRVJUWS4gVGl0bGUgdG8gYWxsIGNvcGllcworICAgb2YgdGhlIFNvZnR3YXJlIGFuZCBhbnkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHRoZXJlaW4gcmVtYWlucyB3aXRoCisgICBJbnRlbCBvciBpdHMgc3VwcGxpZXJzLiBUaGUgU29mdHdhcmUgaXMgY29weXJpZ2h0ZWQgYW5kIHByb3RlY3RlZCBieQorICAgdGhlIGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMgYW5kIG90aGVyIGNvdW50cmllcywgYW5kIGJ5CisgICBpbnRlcm5hdGlvbmFsIHRyZWF0eSBwcm92aXNpb25zLiBZb3UgbWF5IG5vdCByZW1vdmUgYW55IGNvcHlyaWdodAorICAgbm90aWNlcyBmcm9tIHRoZSBTb2Z0d2FyZS4gSW50ZWwgbWF5IG1ha2UgY2hhbmdlcyB0byB0aGUgU29mdHdhcmUsIG9yCisgICB0byBpdGVtcyByZWZlcmVuY2VkIHRoZXJlaW4sIGF0IGFueSB0aW1lIHdpdGhvdXQgbm90aWNlLCBidXQgaXMgbm90CisgICBvYmxpZ2F0ZWQgdG8gc3VwcG9ydCBvciB1cGRhdGUgdGhlIFNvZnR3YXJlLiBFeGNlcHQgYXMgb3RoZXJ3aXNlCisgICBleHByZXNzbHkgcHJvdmlkZWQsIEludGVsIGdyYW50cyBubyBleHByZXNzIG9yIGltcGxpZWQgcmlnaHQgdW5kZXIKKyAgIEludGVsIHBhdGVudHMsIGNvcHlyaWdodHMsIHRyYWRlbWFya3MsIG9yIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQorICAgcmlnaHRzLiBZb3UgbWF5IG5vdCB0cmFuc2ZlciB0aGUgU29mdHdhcmUuCisgICBESVNDTEFJTUVSIE9GIFdBUlJBTlRJRVMuIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIFdJVEhPVVQgQU5ZCisgICBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQgSU5DTFVESU5HIFdBUlJBTlRJRVMgT0YKKyAgIE1FUkNIQU5UQUJJTElUWSwgTk9OSU5GUklOR0VNRU5ULCBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAgIEludGVsIGRvZXMgbm90IHdhcnJhbnQgb3IgYXNzdW1lIHJlc3BvbnNpYmlsaXR5IGZvciB0aGUgYWNjdXJhY3kgb3IKKyAgIGNvbXBsZXRlbmVzcyBvZiBhbnkgaW5mb3JtYXRpb24sIHRleHQsIGdyYXBoaWNzLCBsaW5rcyBvciBvdGhlciBpdGVtcworICAgY29udGFpbmVkIHdpdGhpbiB0aGUgU29mdHdhcmUuCisgICBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS4gSU4gTk8gRVZFTlQgU0hBTEwgSU5URUwgT1IgSVRTIFNVUFBMSUVSUyBCRQorICAgTElBQkxFIEZPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIChJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgTE9TVAorICAgUFJPRklUUywgQlVTSU5FU1MgSU5URVJSVVBUSU9OLCBPUiBMT1NUIElORk9STUFUSU9OKSBBUklTSU5HIE9VVCBPRgorICAgVEhFIFVTRSBPRiBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBTT0ZUV0FSRSwgRVZFTiBJRiBJTlRFTCBIQVMgQkVFTgorICAgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBTT01FIEpVUklTRElDVElPTlMKKyAgIFBST0hJQklUIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBGT1IgSU1QTElFRCBXQVJSQU5USUVTCisgICBPUiBDT05TRVFVRU5USUFMIE9SIElOQ0lERU5UQUwgREFNQUdFUywgU08gVEhFIEFCT1ZFIExJTUlUQVRJT04gTUFZCisgICBOT1QgQVBQTFkgVE8gWU9VLiBZT1UgTUFZIEFMU08gSEFWRSBPVEhFUiBMRUdBTCBSSUdIVFMgVEhBVCBWQVJZIEZST00KKyAgIEpVUklTRElDVElPTiBUTyBKVVJJU0RJQ1RJT04uCisgICBURVJNSU5BVElPTiBPRiBUSElTIEFHUkVFTUVOVC4gSW50ZWwgbWF5IHRlcm1pbmF0ZSB0aGlzIEFncmVlbWVudCBhdAorICAgYW55IHRpbWUgaWYgeW91IHZpb2xhdGUgaXRzIHRlcm1zLiBVcG9uIHRlcm1pbmF0aW9uLCB5b3Ugd2lsbAorICAgaW1tZWRpYXRlbHkgZGVzdHJveSB0aGUgU29mdHdhcmUgb3IgcmV0dXJuIGFsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlCisgICB0byBJbnRlbC4KKyAgIEFQUExJQ0FCTEUgTEFXUy4gQW55IGNsYWltcyBhcmlzaW5nIHVuZGVyIG9yIHJlbGF0aW5nIHRvIHRoaXMKKyAgIEFncmVlbWVudCBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgaW50ZXJuYWwgc3Vic3RhbnRpdmUgbGF3cyBvZiB0aGUKKyAgIFN0YXRlIG9mIERlbGF3YXJlIG9yIGZlZGVyYWwgY291cnRzIGxvY2F0ZWQgaW4gRGVsYXdhcmUsIHdpdGhvdXQKKyAgIHJlZ2FyZCB0byBwcmluY2lwbGVzIG9mIGNvbmZsaWN0IG9mIGxhd3MuIEVhY2ggUGFydHkgaGVyZWJ5IGFncmVlcyB0bworICAganVyaXNkaWN0aW9uIGFuZCB2ZW51ZSBpbiB0aGUgY291cnRzIG9mIHRoZSBTdGF0ZSBvZiBEZWxhd2FyZSBmb3IgYWxsCisgICBkaXNwdXRlcyBhbmQgbGl0aWdhdGlvbiBhcmlzaW5nIHVuZGVyIG9yIHJlbGF0aW5nIHRvIHRoaXMgQWdyZWVtZW50LgorICAgVGhlIFBhcnRpZXMgYWdyZWUgdGhhdCB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yCisgICB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIHNwZWNpZmljYWxseSBleGNsdWRlZCBmcm9tCisgICBhcHBsaWNhdGlvbiB0byB0aGlzIEFncmVlbWVudC4gVGhlIFBhcnRpZXMgY29uc2VudCB0byB0aGUgcGVyc29uYWwKKyAgIGp1cmlzZGljdGlvbiBvZiB0aGUgYWJvdmUgY291cnRzLiBJbiB0aGUgZXZlbnQgYW55IHByb2NlZWRpbmcgb3IKKyAgIGxhd3N1aXQgaXMgYnJvdWdodCBieSBJbnRlbCBvciBZb3UgaW4gY29ubmVjdGlvbiB3aXRoIHRoaXMgQWdyZWVtZW50LAorICAgdGhlIHByZXZhaWxpbmcgUGFydHkgaW4gc3VjaCBwcm9jZWVkaW5nIHNoYWxsIGJlIGVudGl0bGVkIHRvIHJlY2VpdmUKKyAgIGl0cyBjb3N0cywgZXhwZXJ0IHdpdG5lc3MgZmVlcyBhbmQgcmVhc29uYWJsZSBhdHRvcm5leXMnIGZlZXMsCisgICBpbmNsdWRpbmcgY29zdHMgYW5kIGZlZXMgb24gYXBwZWFsLiBJdCBpcyB1bmRlcnN0b29kIGFuZCBhZ3JlZWQgdGhhdCwKKyAgIG5vdHdpdGhzdGFuZGluZyBhbnkgb3RoZXIgcHJvdmlzaW9ucyBvZiB0aGlzIEFncmVlbWVudCwgYnJlYWNoIG9mIHRoZQorICAgIkxpY2Vuc2UiIG9yICJEaXN0cmlidXRpb24iIHNlY3Rpb25zIG9mIHRoaXMgQWdyZWVtZW50IGJ5IFlvdSB3aWxsCisgICBjYXVzZSBJbnRlbCBpcnJlcGFyYWJsZSBkYW1hZ2UgZm9yIHdoaWNoIHJlY292ZXJ5IG9mIG1vbmV5IGRhbWFnZXMKKyAgIHdvdWxkIGJlIGluYWRlcXVhdGUsIGFuZCB0aGF0IEludGVsIHRoZXJlZm9yZSBzaGFsbCBiZSBlbnRpdGxlZCB0bworICAgb2J0YWluIHRpbWVseSBpbmp1bmN0aXZlIHJlbGllZiB0byBwcm90ZWN0IHRoaXMgSW50ZWwncyByaWdodHMgdW5kZXIKKyAgIHRoaXMgQWdyZWVtZW50IGluIGFkZGl0aW9uIHRvIGFueSBhbmQgYWxsIHJlbWVkaWVzIGF2YWlsYWJsZSBhdCBsYXcuCisgICBHT1ZFUk5NRU5UIFJFU1RSSUNURUQgUklHSFRTLiBUaGUgU29mdHdhcmUgaXMgYSAiY29tbWVyY2lhbCBpdGVtIiBhcworICAgdGhhdCB0ZXJtIGlzIGRlZmluZWQgaW4gNDggQy5GLlIuIDIuMTAxLCBjb25zaXN0aW5nIG9mICJjb21tZXJjaWFsCisgICBjb21wdXRlciBzb2Z0d2FyZSIgYW5kICJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIGRvY3VtZW50YXRpb24iIGFzCisgICBzdWNoIHRlcm1zIGFyZSB1c2VkIGluIDQ4IEMuRi5SLiAxMi4yMTIuIENvbnNpc3RlbnQgd2l0aCA0OCBDLkYuUi4KKyAgIDEyLjIxMiBhbmQgNDggQy5GLlIgMjI3LjcyMDItMSB0aHJvdWdoIDIyNy43MjAyLTQsIFlvdSB3aWxsIHByb3ZpZGUKKyAgIHRoZSBTb2Z0d2FyZSB0byBVLlMuIEdvdmVybm1lbnQgYXMgYW4gRW5kIFVzZXIgb25seSBwdXJzdWFudCB0byB0aGUKKyAgIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoZXJlaW4uIFlvdSBzaGFsbCBwcm92aWRlIHRoZSBTb2Z0d2FyZSB0bworICAgZm9yZWlnbiBnb3Zlcm5tZW50cyBpbiBhbiBlcXVpdmFsZW50IG1hbm5lciBhcyBkZXNjcmliZWQgaW4gdGhpcworICAgU2VjdGlvbi4KKyAgIFJFVkVSU0UgRU5HSU5FRVJJTkcuIFlvdSBtYXkgbm90IHJldmVyc2UtYXNzZW1ibGUsIHJldmVyc2UtY29tcGlsZSwgb3IKKyAgIG90aGVyd2lzZSByZXZlcnNlLWVuZ2luZWVyIGFueSBzb2Z0d2FyZSBwcm92aWRlZCBzb2xlbHkgaW4gZXhlY3V0YWJsZQorICAgZm9ybS4KKyAgIEVOVElSRSBBR1JFRU1FTlQ7IE1PRElGSUNBVElPTi4gVGhpcyBBZ3JlZW1lbnQgY29uc3RpdHV0ZXMgdGhlIGVudGlyZQorICAgYWdyZWVtZW50IGJldHdlZW4gWW91IGFuZCBJbnRlbCBhbmQgc3VwZXJzZWRlcyBpbiB0aGVpciBlbnRpcmV0eSBhbnkKKyAgIGFuZCBhbGwgb3JhbCBvciB3cml0dGVuIGFncmVlbWVudHMgcHJldmlvdXNseSBleGlzdGluZyBiZXR3ZWVuIFlvdSBhbmQKKyAgIEludGVsIHdpdGggcmVzcGVjdCB0byB0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBGb3IgdGhlIGF2b2lkYW5jZSBvZgorICAgZG91YnQsIHRoaXMgQWdyZWVtZW50IHNoYWxsIGluIG5vIHdheSBzdXBlcnNlZGUgYW55IHRlcm1zIGFuZAorICAgY29uZGl0aW9ucyBvZiBhbnkgdGhpcmQtcGFydHkgc29mdHdhcmUgbGljZW5zZSBhZ3JlZW1lbnQuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9qYXJkaW5haW5zIGIvbGljZW5zZXMvamFyZGluYWlucwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YTk5MmEwCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvamFyZGluYWlucwpAQCAtMCwwICsxLDI1IEBACitFbmQgVXNlciBMaWNlbnNlIEFncmVlbWVudAorCisKKworVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBBUyBJUywgV0lUSE9VVCBBTlkgV0FSUkFOVFkgT0YgQU5ZIEtJTkQuIFlvdSBhc3N1bWUKK2FsbCByaXNrIGZvciBhbnkgZGFtYWdlIG9yIGxvc3MgdGhpcyBzb2Z0d2FyZSBtYXkgY2F1c2UuIFRoaXMgc29mdHdhcmUgaXMgbm90CityZXNwb25zaWJsZSBmb3IgYW55IGRhbWFnZSBvciBsb3NzIHRoaXMgc29mdHdhcmUgbWF5IGNhdXNlIGluY2x1ZGluZywgYnV0IG5vdAorbGltaXRlZCB0bywgZGFtYWdlIHRvIGV4aXN0aW5nIHNvZnR3YXJlLCB1c2VyJ3MgaGFyZHdhcmUsIG9yIGFueSBvdGhlciByZWFsCitvciBwZXJjZWl2ZWQgZGFtYWdlIG9yIGxvc3MuIElmIHRoZXJlIGlzIGFueSBkaXNwdXRlIHdoYXRzb2V2ZXIgcmVnYXJkaW5nIHRoZQordGVybXMgb2YgdGhpcyBhZ3JlZW1lbnQgb3IgdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLCBhbnkgc3VjaCBkaXNwdXRlIHdpbGwgYmUKK2RlY2lkZWQgYnkgYXJiaXRyYXRpb24uIEFyYml0cmF0aW9uIHNoYWxsIGJlIHRoZSBleGNsdXNpdmUgbWV0aG9kIG9mCityZXNvbHZpbmcgYW55IGNvbnRyb3ZlcnN5LCBkaXNwdXRlIG9yIGNsYWltIGFyaXNpbmcgb3V0IG9mIG9yIHJlbGF0aW5nIHRvCit0aGlzIGFncmVlbWVudC4gQW55IGFyYml0cmF0aW9uIGNvbmR1Y3RlZCBoZXJldW5kZXIgc2hhbGwgdGFrZSBwbGFjZSBpbgorQmFsdGltb3JlLCBNYXJ5bGFuZC4KKworCitUaGlzIGFncmVlbWVudCBvbmx5IGdyYW50cyB5b3UgdGhlIHJpZ2h0IHRvIGRvd25sb2FkIGFuZCB1c2UgdGhpcyBzb2Z0d2FyZQorZm9yIHlvdXIgb3duIHBlcnNvbmFsIHVzZS4gWW91IG1heSBub3QgZGlzdHJpYnV0ZSwgbW9kaWZ5LCBsZW5kLCBzaGFyZSBvcgorc2VsbCB0aGlzIHNvZnR3YXJlLgorCisKKworUGxlYXNlIHZpc2l0IGh0dHA6Ly93d3cuamFyZGluYWluczIuY29tLyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KKworSmFyZGluYWlucyAyISwgY29weXJpZ2h0IDIwMDYsIE1hZ2ljIENob3BzdGljayBHYW1lcy4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL2pheGVuIGIvbGljZW5zZXMvamF4ZW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE0MGE0MwotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL2pheGVuCkBAIC0wLDAgKzEsNTYgQEAKKy8qLS0gCisKKyAkSWQ6IGpheGVuLHYgMS4xIDIwMDQvMDkvMTcgMTM6NTg6NDUgYXh4byBFeHAgJAorCisgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgYm9iIG1jd2hpcnRlciAmIEphbWVzIFN0cmFjaGFuLgorIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgCisgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgYXJlIG1ldDoKKyAKKyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgCisgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGRpc2NsYWltZXIgdGhhdCBmb2xsb3dzIAorICAgIHRoZXNlIGNvbmRpdGlvbnMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyAKKyAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAzLiBUaGUgbmFtZSAiSmF4ZW4iIG11c3Qgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uICBGb3IKKyAgICB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGxpY2Vuc2VAamF4ZW4ub3JnLgorIAorIDQuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJKYXhlbiIsIG5vcgorICAgIG1heSAiSmF4ZW4iIGFwcGVhciBpbiB0aGVpciBuYW1lLCB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbgorICAgIGZyb20gdGhlIEpheGVuIFByb2plY3QgTWFuYWdlbWVudCAocG1AamF4ZW4ub3JnKS4KKyAKKyBJbiBhZGRpdGlvbiwgd2UgcmVxdWVzdCAoYnV0IGRvIG5vdCByZXF1aXJlKSB0aGF0IHlvdSBpbmNsdWRlIGluIHRoZSAKKyBlbmQtdXNlciBkb2N1bWVudGF0aW9uIHByb3ZpZGVkIHdpdGggdGhlIHJlZGlzdHJpYnV0aW9uIGFuZC9vciBpbiB0aGUgCisgc29mdHdhcmUgaXRzZWxmIGFuIGFja25vd2xlZGdlbWVudCBlcXVpdmFsZW50IHRvIHRoZSBmb2xsb3dpbmc6CisgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQorICAgICAgSmF4ZW4gUHJvamVjdCAoaHR0cDovL3d3dy5qYXhlbi5vcmcvKS4iCisgQWx0ZXJuYXRpdmVseSwgdGhlIGFja25vd2xlZGdtZW50IG1heSBiZSBncmFwaGljYWwgdXNpbmcgdGhlIGxvZ29zIAorIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LmpheGVuLm9yZy8KKworIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQKKyBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBKYXhlbiBBVVRIT1JTIE9SIFRIRSBQUk9KRUNUCisgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YKKyBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgU1VDSCBEQU1BR0UuCisKKyBUaGlzIHNvZnR3YXJlIGNvbnNpc3RzIG9mIHZvbHVudGFyeSBjb250cmlidXRpb25zIG1hZGUgYnkgbWFueSAKKyBpbmRpdmlkdWFscyBvbiBiZWhhbGYgb2YgdGhlIEpheGVuIFByb2plY3QgYW5kIHdhcyBvcmlnaW5hbGx5IAorIGNyZWF0ZWQgYnkgYm9iIG1jd2hpcnRlciA8Ym9iQHdlcmtlbi5jb20+IGFuZCAKKyBKYW1lcyBTdHJhY2hhbiA8anN0cmFjaGFuQGFwYWNoZS5vcmc+LiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIAorIEpheGVuIFByb2plY3QsIHBsZWFzZSBzZWUgPGh0dHA6Ly93d3cuamF4ZW4ub3JnLz4uCisgCisgKi8KKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvamxleCBiL2xpY2Vuc2VzL2psZXgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDc4MGJjZgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL2psZXgKQEAgLTAsMCArMSwxNyBAQAorUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSAKK3B1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiAKK2FsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhbmQgd2FycmFudHkgCitkaXNjbGFpbWVyIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0IHRoZSBuYW1lIG9mIHRoZSBhdXRob3JzIG9yIHRoZWlyIAorZW1wbG95ZXJzIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgCit3aXRob3V0IHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uIAorCisKK1RoZSBhdXRob3JzIGFuZCB0aGVpciBlbXBsb3llcnMgZGlzY2xhaW0gYWxsIHdhcnJhbnRpZXMgd2l0aCByZWdhcmQgdG8gdGhpcyBzb2Z0d2FyZSwgCitpbmNsdWRpbmcgYWxsIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MuIEluIG5vIGV2ZW50IHNoYWxsIHRoZSBhdXRob3JzIAorb3IgdGhlaXIgZW1wbG95ZXJzIGJlIGxpYWJsZSBmb3IgYW55IHNwZWNpYWwsIGluZGlyZWN0IG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBvciBhbnkgZGFtYWdlcyAKK3doYXRzb2V2ZXIgcmVzdWx0aW5nIGZyb20gbG9zcyBvZiB1c2UsIGRhdGEgb3IgcHJvZml0cywgd2hldGhlciBpbiBhbiBhY3Rpb24gb2YgY29udHJhY3QsIAorbmVnbGlnZW5jZSBvciBvdGhlciB0b3J0aW91cyBhY3Rpb24sIGFyaXNpbmcgb3V0IG9mIG9yIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgdXNlIG9yIAorcGVyZm9ybWFuY2Ugb2YgdGhpcyBzb2Z0d2FyZS4gCisKK0phdmEgaXMgYSB0cmFkZW1hcmsgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBSZWZlcmVuY2VzIHRvIHRoZSBKYXZhIHByb2dyYW1taW5nIGxhbmd1YWdlIGluIAorcmVsYXRpb24gdG8gSkxleCBhcmUgbm90IG1lYW50IHRvIGltcGx5IHRoYXQgU3VuIGVuZG9yc2VzIHRoaXMgcHJvZHVjdC4gCmRpZmYgLS1naXQgYS9saWNlbnNlcy9raW50ZXJiYXNkYiBiL2xpY2Vuc2VzL2tpbnRlcmJhc2RiCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzNGE1M2UKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9raW50ZXJiYXNkYgpAQCAtMCwwICsxLDM5IEBACitLSW50ZXJiYXNEQiBQeXRob24gRGF0YWJhc2UgTW9kdWxlIC0gTElDRU5TRQorCitUaGUgZm9sbG93aW5nIGNvbnRyaWJ1dG9ycyBob2xkIENvcHlyaWdodCAoQykgb3ZlciB0aGVpciByZXNwZWN0aXZlCitwb3J0aW9ucyBvZiBjb2RlIGFuZCBkb2N1bWVudGF0aW9uOgorCitbQXV0aG9yIG9mIG9yaWdpbmFsIHZlcnNpb247IG1haW50YWluZWQgdGhyb3VnaCB2ZXJzaW9uIDIuMDpdCisgIDE5OTgtMjAwMSBbYWxleF0gIEFsZXhhbmRlciBLdXpuZXRzb3YgICA8YWxleGFuQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4KKworW0F1dGhvciBvZiB+OTAlIG9mIGN1cnJlbnQgY29kZSBhbmQgMTAwJSBvZiBjdXJyZW50IGRvY3VtZW50YXRpb246XQorICAyMDAyLTIwMDQgW2Rzcl0gICBEYXZpZCBSdXNoYnkgICAgICAgICAgPHdvb2RzcGxpdHRlckByb2NrZXRtYWlsLmNvbT4KKworW1NpZ25pZmljYW50IENvbnRyaWJ1dG9yczpdCisgIDIwMDEtMjAwMiBbbWF6XSAgIE1hcmVrIElzYWxza2kgICAgICAgICA8a2ludGVyYmFzZGJAbWF6Lm51PgorICAgIE1hcmVrIG1hZGUgaW1wb3J0YW50IGZpcnN0IHN0ZXBzIGluIHJlbW92aW5nIHRoZSBsaW1pdGF0aW9ucyBvZgorICAgIHZlcnNpb24gMi4wIGluIHByZXBhcmF0aW9uIGZvciB2ZXJzaW9uIDMuMC4KKworICAyMDAxICAgICAgW2VhY10gICBFdmdlbnkgQS4gQ2hlcmthc2hpbiAgPGV1Z2VuZWFpQGljYy5ydT4KKyAgICBFdmdlbnkgd3JvdGUgdGhlIGZpcnN0IHZlcnNpb24gb2YgdGhlIGRpc3R1dGlscyBidWlsZCBzY3JpcHQsCisgICAgd2hpY2ggd2FzIGluY2x1ZGVkIGluIGEgMi54IHBvaW50IHJlbGVhc2UuCisKKyAgMjAwMS0yMDAyIFtqYW5lel0gSmFuZXogSmVyZSAgICAgICAgICAgIDxqYW5lei5qZXJlQHZvaWQuc2k+CisgICAgSmFuZXogY29udHJpYnV0ZWQgc2V2ZXJhbCBidWdmaXhlcywgaW5jbHVkaW5nIGZpeGVzIGZvciB0aGUgZGF0ZQorICAgIGFuZCB0aW1lIHBhcmFtZXRlciBjb252ZXJzaW9uIGNvZGUgaW4gcHJlcGFyYXRpb24gZm9yIHZlcnNpb24gMy4wLgorCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kCitpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIG9yIHJveWFsdHkKK2lzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhcnMKK2luIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcworcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbiBvciBwb3J0aW9ucwordGhlcmVvZiwgaW5jbHVkaW5nIG1vZGlmaWNhdGlvbnMsIHRoYXQgeW91IG1ha2UuCisKK1RoZSBhdXRob3JzIGRpc2NsYWltIGFsbCB3YXJyYW50aWVzIHdpdGggcmVnYXJkIHRvIHRoaXMgc29mdHdhcmUsCitpbmNsdWRpbmcgYWxsIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MuCitJbiBubyBldmVudCBzaGFsbCBhbnkgYXV0aG9yIGJlIGxpYWJsZSBmb3IgYW55IHNwZWNpYWwsIGluZGlyZWN0CitvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciByZXN1bHRpbmcKK2Zyb20gbG9zcyBvZiB1c2UsIGRhdGEgb3IgcHJvZml0cywgd2hldGhlciBpbiBhbiBhY3Rpb24gb2YKK2NvbnRyYWN0LCBuZWdsaWdlbmNlIG9yIG90aGVyIHRvcnRpb3VzIGFjdGlvbiwgYXJpc2luZyBvdXQgb2Ygb3IKK2luIGNvbm5lY3Rpb24gd2l0aCB0aGUgdXNlIG9yIHBlcmZvcm1hbmNlIG9mIHRoaXMgc29mdHdhcmUuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9rbmlnaHRzLWRlbW8gYi9saWNlbnNlcy9rbmlnaHRzLWRlbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y4MjM3NAotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL2tuaWdodHMtZGVtbwpAQCAtMCwwICsxLDE0MCBAQAorRW5kIFVzZXIgTGljZW5zZSBBZ3JlZW1lbnQKK1lPVSBTSE9VTEQgQ0FSRUZVTExZIFJFQUQgVEhFIEZPTExPV0lORyBFTkQgVVNFUiBMSUNFTlNFIEFHUkVFTUVOVAorQkVGT1JFIElOU1RBTExJTkcgVEhJUyBTT0ZUV0FSRSBQUk9HUkFNLiBCWSBJTlNUQUxMSU5HIE9SIE9USEVSV0lTRQorVVNJTkcgVEhFIFNPRlRXQVJFIFBST0dSQU0sIFlPVSBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUworQUdSRUVNRU5ULgorCitUaGlzIHNvZnR3YXJlIHByb2dyYW0gKHRoZSAiUHJvZ3JhbSIpLCBhbnkgcHJpbnRlZCBtYXRlcmlhbHMsIGFueQorb24tbGluZSBvciBlbGVjdHJvbmljIGRvY3VtZW50YXRpb24gKHRoZSAiTWFudWFscyIpLCBhbmQgYW55IGFuZCBhbGwKK2NvcGllcyBhbmQgZGVyaXZhdGl2ZSB3b3JrcyBvZiBzdWNoIHNvZnR3YXJlIHByb2dyYW0gYXJlIHRoZQorY29weXJpZ2h0ZWQgd29yayBvZiBMaW51eCBHYW1lIFB1Ymxpc2hpbmcgTFREIGFuZCBpdHMgbGljZW5zb3JzLiBBbGwKK3JpZ2h0cyByZXNlcnZlZCwgZXhjZXB0IGFzIGV4cHJlc3NseSBzdGF0ZWQgaGVyZWluLiBBbGwgdXNlIG9mIHRoZQorUHJvZ3JhbSBpcyBnb3Zlcm5lZCBieSB0aGUgdGVybXMgb2YgdGhpcyBFbmQgVXNlciBMaWNlbnNlIEFncmVlbWVudAorKCJMaWNlbnNlIEFncmVlbWVudCIpLiBUaGUgUHJvZ3JhbSBpcyBzb2xlbHkgZm9yIHVzZSBieSBlbmQgdXNlcnMKK2FjY29yZGluZyB0byB0aGUgdGVybXMgb2YgdGhlIExpY2VuY2UgQWdyZWVtZW50LiBBbnkgdXNlLCByZXByb2R1Y3Rpb24KK29yIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIG5vdCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIG9mCit0aGUgTGljZW5jZSBBZ3JlZW1lbnQgaXMgZXhwcmVzc2x5IHByb2hpYml0ZWQuCisKKzEuIExpbWl0ZWQgVXNlIExpY2Vuc2UuIExpbnV4IEdhbWUgUHVibGlzaGluZyAoIkxHUCIpIGhlcmVieSBncmFudHMsCithbmQgYnkgaW5zdGFsbGluZyB0aGUgUHJvZ3JhbSB5b3UgdGhlcmVieSBhY2NlcHQsIGEgbGltaXRlZCwKK25vbi1leGNsdXNpdmUgbGljZW5zZSBhbmQgcmlnaHQgdG8gaW5zdGFsbCBhbmQgdXNlIG9uZSAoMSkgY29weSBvZiB0aGUKK1Byb2dyYW0gZm9yIHlvdXIgdXNlIG9uIGVpdGhlciBhIGhvbWUsIGJ1c2luZXNzLCBvciBwb3J0YWJsZQorY29tcHV0ZXIuIFRoZSBQcm9ncmFtIGlzIGxpY2Vuc2VkIG5vdCBzb2xkLiBZb3VyIGxpY2Vuc2UgY29uZmVycyBubwordGl0bGUgb3Igb3duZXJzaGlwIGluIHRoZSBQcm9ncmFtLgorCisyLiBPd25lcnNoaXAuIEFsbCB0aXRsZSwgb3duZXJzaGlwIHJpZ2h0cyBhbmQgaW50ZWxsZWN0dWFsIHByb3BlcnR5CityaWdodHMgaW4gYW5kIHRvIHRoZSBQcm9ncmFtIGFuZCBhbnkgYW5kIGFsbCBjb3BpZXMgdGhlcmVvZiAoaW5jbHVkaW5nCitidXQgbm90IGxpbWl0ZWQgdG8gYW55IHRpdGxlcywgY29tcHV0ZXIgY29kZSwgdGhlbWVzLCBvYmplY3RzLAorY2hhcmFjdGVycywgY2hhcmFjdGVyIG5hbWVzLCBzdG9yaWVzLCBkaWFsb2csIGNhdGNoIHBocmFzZXMsCitsb2NhdGlvbnMsIGNvbmNlcHRzLCBhcnR3b3JrLCBhbmltYXRpb25zLCBzb3VuZHMsIG11c2ljYWwKK2NvbXBvc2l0aW9ucywgYXVkaW8tdmlzdWFsIGVmZmVjdHMsIG1ldGhvZHMgb2Ygb3BlcmF0aW9uLCBtb3JhbAorcmlnaHRzLCBhbmQgYW55IHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiwgYW5kICJhcHBsZXRzIiBpbmNvcnBvcmF0ZWQgaW50bwordGhlIFByb2dyYW0pIGFyZSBvd25lZCBieSBMR1AgYW5kIGl0cyBsaWNlbnNvcnMuIFRoZSBQcm9ncmFtIGlzCitwcm90ZWN0ZWQgYnkgdGhlIGNvcHlyaWdodCBsYXdzIG9mIHRoZSBVbml0ZWQgS2luZ2RvbSwgaW50ZXJuYXRpb25hbAorY29weXJpZ2h0IHRyZWF0aWVzIGFuZCBjb252ZW50aW9ucyBhbmQgb3RoZXIgbGF3cy4gQWxsIHJpZ2h0cyBhcmUKK3Jlc2VydmVkLiBUaGUgUHJvZ3JhbSBjb250YWlucyBjZXJ0YWluIGxpY2Vuc2VkIG1hdGVyaWFscyBhbmQgTEdQJ3MKK2xpY2Vuc29ycyBtYXkgcHJvdGVjdCB0aGVpciByaWdodHMgaW4gdGhlIGV2ZW50IG9mIGFueSB2aW9sYXRpb24gb2YKK3RoaXMgQWdyZWVtZW50LgorCiszLiBSZXNwb25zaWJpbGl0aWVzIG9mIEVuZCBVc2VyLgorQS4gU3ViamVjdCB0byB0aGUgR3JhbnQgb2YgTGljZW5zZSBoZXJlaW5hYm92ZSwgeW91IG1heSBub3QsIGluIHdob2xlCitvciBpbiBwYXJ0LCBjb3B5LCBwaG90b2NvcHksIHJlcHJvZHVjZSwgdHJhbnNsYXRlLCByZXZlcnNlIGVuZ2luZWVyLAorZGVyaXZlIHNvdXJjZSBjb2RlLCBtb2RpZnksIGRpc2Fzc2VtYmxlLCBkZWNvbXBpbGUsIGNyZWF0ZSBkZXJpdmF0aXZlCit3b3JrcyBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgb3IgcmVtb3ZlIGFueSBwcm9wcmlldGFyeSBub3RpY2VzIG9yCitsYWJlbHMgb24gdGhlIFByb2dyYW0gd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIExHUC4KK0IuIFRoZSBQcm9ncmFtIGlzIGxpY2Vuc2VkIHRvIHlvdSBhcyBhIHNpbmdsZSBwcm9kdWN0LiBJdHMgY29tcG9uZW50CitwYXJ0cyBtYXkgbm90IGJlIHNlcGFyYXRlZCBmb3IgdXNlIG9uIG1vcmUgdGhhbiBvbmUgY29tcHV0ZXIuCitDLiBZb3UgYXJlIGVudGl0bGVkIHRvIHVzZSB0aGUgUHJvZ3JhbSBmb3IgeW91ciBvd24gdXNlLCBidXQgeW91IGFyZQorbm90IGVudGl0bGVkIHRvOiAoaSkgc2VsbCwgZ3JhbnQgYSBzZWN1cml0eSBpbnRlcmVzdCBpbiBvciB0cmFuc2ZlcgorcmVwcm9kdWN0aW9ucyBvZiB0aGUgUHJvZ3JhbSB0byBvdGhlciBwYXJ0aWVzIGluIGFueSB3YXksIG5vciB0byByZW50LAorbGVhc2Ugb3IgbGljZW5zZSB0aGUgUHJvZ3JhbSB0byBvdGhlcnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbgorY29uc2VudCBvZiBMR1A7IG9yIChpaSkgZXhwbG9pdCB0aGUgUHJvZ3JhbSBvciBhbnkgb2YgaXRzIHBhcnRzIGZvcgorYW55IGNvbW1lcmNpYWwgcHVycG9zZSBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgdXNlIGF0IGEgY3liZXIKK2NhZmUsIGNvbXB1dGVyIGdhbWluZyBjZW50ZXIgb3IgYW55IG90aGVyIGxvY2F0aW9uLWJhc2VkIHNpdGUuIExHUCBtYXkKK29mZmVyIGEgc2VwYXJhdGUgU2l0ZSBMaWNlbnNlIEFncmVlbWVudCB0byBwZXJtaXQgeW91IHRvIG1ha2UgdGhlCitQcm9ncmFtIGF2YWlsYWJsZSBmb3IgY29tbWVyY2lhbCB1c2UuIENvbnRhY3QgTEdQIGZvciBkZXRhaWxzLgorCis0LiBQcm9ncmFtIFRyYW5zZmVyLiBZb3UgbWF5IHRyYW5zZmVyIGFsbCBvZiB5b3VyIHJpZ2h0cwordW5kZXIgdGhpcyBMaWNlbnNlIEFncmVlbWVudCwgcHJvdmlkZWQgdGhlIHJlY2lwaWVudCBhZ3JlZXMgdG8gdGhlCit0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LgorCis1LiBUZXJtaW5hdGlvbi4gVGhlIExpY2Vuc2UgQWdyZWVtZW50IGlzIGVmZmVjdGl2ZSB1bnRpbAordGVybWluYXRlZC4gWW91IG1heSB0ZXJtaW5hdGUgdGhlIExpY2Vuc2UgQWdyZWVtZW50IGF0IGFueSB0aW1lIGJ5CitkZXN0cm95aW5nIHRoZSBQcm9ncmFtLiBMR1AgbWF5LCBhdCBpdHMgZGlzY3JldGlvbiwgdGVybWluYXRlIHRoaXMKK0xpY2Vuc2UgQWdyZWVtZW50IGluIHRoZSBldmVudCB0aGF0IHlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIHRoZSB0ZXJtcworYW5kIGNvbmRpdGlvbnMgY29udGFpbmVkIGhlcmVpbi4gSW4gc3VjaCBldmVudCwgeW91IG11c3QgaW1tZWRpYXRlbHkKK2Rlc3Ryb3kgdGhlIFByb2dyYW0uCisKKzYuIEV4cG9ydCBDb250cm9scy4gVGhlIHByb2dyYW0gbWF5IG5vdCBiZSByZS1leHBvcnRlZCwgZG93bmxvYWRlZCwKK290aGVyd2lzZSBleHBvcnRlZCBpbnRvIChvciB0byBhIG5hdGlvbmFsIG9yIHJlc2lkZW50IG9mKSBhbnkgY291bnRyeQordG8gd2hvbSBpdCB3b3VsZCBiZSBpbGxlZ2FsIHRvIGV4cG9ydCB0aGUgUHJvZ3JhbSB1bmRlciBVSyBsYXcuCisKKzcuIExpbWl0ZWQgV2FycmFudHkuIEV4Y2VwdCBhcyBleHByZXNzbHkgYW5kIHVuYW1iaWd1b3VzbHkgc2V0IGZvcnRoCitpbiB0aGlzIHBhcmFncmFwaCA3LCBMR1AgYW5kIGl0cyBsaWNlbnNvcnMgZGlzY2xhaW0gYW55IHdhcnJhbnR5IGZvcgordGhlIFByb2dyYW0sIEVkaXRvciBhbmQgTWFudWFsKHMpLiBUaGUgUHJvZ3JhbSwgRWRpdG9yIGFuZCBNYW51YWwocykKK2FyZSBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCBlaXRoZXIgZXhwcmVzcworb3IgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHRoZSBpbXBsaWVkIHdhcnJhbnRpZXMgb2YKK21lcmNoYW50YWJpbGl0eSwgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UsIG9yCitub25pbmZyaW5nZW1lbnQuIFRoZSBlbnRpcmUgcmlzayBhcmlzaW5nIG91dCBvZiB1c2Ugb3IgcGVyZm9ybWFuY2Ugb2YKK3RoZSBQcm9ncmFtLCBFZGl0b3IsIGFuZCBNYW51YWwocykgcmVtYWlucyB3aXRoIHRoZSBVc2VyLCBob3dldmVyIExHUAord2FycmFudHMgdXAgdG8gYW5kIGluY2x1ZGluZyA5MCBkYXlzIGZyb20gdGhlIGRhdGUgb2YgeW91ciBwdXJjaGFzZSBvZgordGhlIFByb2dyYW0gdGhhdCB0aGUgbWVkaWEgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBzaGFsbCBiZSBmcmVlIGZyb20KK2RlZmVjdHMgaW4gbWF0ZXJpYWwgYW5kIHdvcmttYW5zaGlwLiBJbiB0aGUgZXZlbnQgdGhhdCB0aGUgbWVkaWEKK3Byb3ZlcyB0byBiZSBkZWZlY3RpdmUgZHVyaW5nIHRoYXQgdGltZSBwZXJpb2QsIGFuZCB1cG9uIHByZXNlbnRhdGlvbgordG8gTEdQIG9mIHByb29mIG9mIHB1cmNoYXNlIG9mIHRoZSBkZWZlY3RpdmUgUHJvZ3JhbSwgTEdQIHdpbGwgYXQgaXRzCitvcHRpb246IChpKSBjb3JyZWN0IGFueSBkZWZlY3Q7IChpaSkgcHJvdmlkZSBhIHJlcGxhY2VtZW50IGNvcHkgb2YgdGhlCitzYW1lIHByb2R1Y3Q7IG9yIChpaWkpIHJlZnVuZCB5b3VyIG1vbmV5LgorCis4LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gTkVJVEhFUiBMR1AsIElUUyBMSUNFTlNPUlMgTk9SIEFOWSBQQVJFTlQsCitTVUJTSURJQVJZIE9SIEFGRklMSUFURSBPRiBUSEUgRk9SRUdPSU5HIFNIQUxMIEJFIExJQUJMRSBJTiBBTlkgV0FZCitGT1IgTE9TUyBPUiBEQU1BR0UgT0YgQU5ZIEtJTkQgUkVTVUxUSU5HIEZST00gVEhFIFVTRSBPRiBUSEUgUFJPR1JBTSwKK0VESVRPUiwgQU5EIE1BTlVBTChTKSBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgTE9TUyBPRiBHT09EV0lMTCwKK1dPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSCitDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLgorCis5LiBFcXVpdGFibGUgUmVtZWRpZXMuIFlvdSBoZXJlYnkgYWdyZWUgdGhhdCBMR1Agd291bGQgYmUgaXJyZXBhcmFibHkKK2RhbWFnZWQgaWYgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgd2VyZSBub3Qgc3BlY2lmaWNhbGx5CitlbmZvcmNlZCwgYW5kIHRoZXJlZm9yZSB5b3UgYWdyZWUgdGhhdCBMR1Agc2hhbGwgYmUgZW50aXRsZWQsIHdpdGhvdXQKK2JvbmQsIG90aGVyIHNlY3VyaXR5LCBvciBwcm9vZiBvZiBkYW1hZ2VzLCB0byBhcHByb3ByaWF0ZSBlcXVpdGFibGUKK3JlbWVkaWVzIHdpdGggcmVzcGVjdCB0byBicmVhY2hlcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LCBpbgorYWRkaXRpb24gdG8gc3VjaCBvdGhlciByZW1lZGllcyBhcyBMR1AgbWF5IG90aGVyd2lzZSBoYXZlIGF2YWlsYWJsZSB0bworaXQgdW5kZXIgYXBwbGljYWJsZSBsYXdzLiBJbiB0aGUgZXZlbnQgdGhhdCBhbnkgbGl0aWdhdGlvbiBpcyBicm91Z2h0CitieSBlaXRoZXIgcGFydHkgaW4gY29ubmVjdGlvbiB3aXRoIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQsIHRoZQorcHJldmFpbGluZyBwYXJ0eSBpbiBzdWNoIGxpdGlnYXRpb24gc2hhbGwgYmUgZW50aXRsZWQgdG8gcmVjb3ZlciBmcm9tCit0aGUgb3RoZXIgcGFydHkgYWxsIHRoZSBjb3N0cywgYXR0b3JuZXkncyBmZWVzIGFuZCBvdGhlciBleHBlbnNlcworaW5jdXJyZWQgYnkgc3VjaCBwcmV2YWlsaW5nIHBhcnR5IGluIHRoZSBsaXRpZ2F0aW9uLgorCisxMC4gTGltaXRhdGlvbnMgb24gTGljZW5zZS4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IHNoYWxsCitwcmVjbHVkZSB5b3UgZnJvbSBtYWtpbmcgb3IgYXV0aG9yaXppbmcgdGhlIG1ha2luZyBvZiBjb3BpZXMgb2YKK3RoZSBQcm9ncmFtIHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IGFsbCBjb3BpZXMgYXJlIGNvbXBsZXRlIGFuZCBleGFjdAorY29waWVzIG9mIHRoZSBvcmlnaW5hbCwgaW5jbHVkaW5nIHRoaXMgbGljZW5zZS4KKworMTEuIE1pc2NlbGxhbmVvdXMuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgc2hhbGwgYmUgZGVlbWVkIHRvIGhhdmUgYmVlbgorbWFkZSBhbmQgZXhlY3V0ZWQgaW4gdGhlIFVuaXRlZCBLaW5nZG9tIGFuZCBhbnkgZGlzcHV0ZSBhcmlzaW5nCitoZXJldW5kZXIgc2hhbGwgYmUgcmVzb2x2ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBsYXdzIG9mIHRoZSBVSy4gWW91CithZ3JlZSB0aGF0IGFueSBjbGFpbSBhc3NlcnRlZCBpbiBhbnkgbGVnYWwgcHJvY2VlZGluZyBieSBvbmUgb2YgdGhlCitwYXJ0aWVzIGFnYWluc3QgdGhlIG90aGVyIHNoYWxsIGJlIGNvbW1lbmNlZCBhbmQgbWFpbnRhaW5lZCBpbiB0aGUKK2FwcHJvcHJpYXRlIGNvdXJ0IGxvY2F0ZWQgaW4gTm90dGluZ2hhbSwgRW5nbGFuZCwgaGF2aW5nIHN1YmplY3QKK21hdHRlciBqdXJpc2RpY3Rpb24gd2l0aCByZXNwZWN0IHRvIHRoZSBkaXNwdXRlIGJldHdlZW4gdGhlCitwYXJ0aWVzLiBUaGlzIExpY2Vuc2UgQWdyZWVtZW50IG1heSBiZSBhbWVuZGVkLCBhbHRlcmVkIG9yIG1vZGlmaWVkCitvbmx5IGJ5IGFuIGluc3RydW1lbnQgaW4gd3JpdGluZywgc3BlY2lmeWluZyBzdWNoIGFtZW5kbWVudCwKK2FsdGVyYXRpb24gb3IgbW9kaWZpY2F0aW9uLCBleGVjdXRlZCBieSBib3RoIHBhcnRpZXMuIEluIHRoZSBldmVudAordGhhdCBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgc2hhbGwgYmUgaGVsZCBieSBhIGNvdXJ0CitvciBvdGhlciB0cmlidW5hbCBvZiBjb21wZXRlbnQganVyaXNkaWN0aW9uIHNoYWxsIGJlIHVuZW5mb3JjZWFibGUsCitzdWNoIHByb3Zpc2lvbiB3aWxsIGJlIGVuZm9yY2VkIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXNzaWJsZSBhbmQKK3RoZSByZW1haW5pbmcgcG9ydGlvbnMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudCBzaGFsbCByZW1haW4gaW4gZnVsbAorZm9yY2UgYW5kIGVmZmVjdC4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBjb25zdGl0dXRlZCBhbmQgY29udGFpbnMgdGhlCitlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSBzdWJqZWN0CittYXR0ZXIgaGVyZW9mIGFuZCBzdXBlcnNlZGVzIGFueSBwcmlvciBvcmFsIG9yIHdyaXR0ZW4gYWdyZWVtZW50cy4gWW91CitoZXJlYnkgYWNrbm93bGVkZ2UgdGhhdCB5b3UgaGF2ZSByZWFkIGFuZCB1bmRlcnN0YW5kIHRoZSBmb3Jnb2luZworTGljZW5zZSBBZ3JlZW1lbnQgYW5kIGFncmVlIHRoYXQgdGhlIGFjdGlvbiBvZiBpbnN0YWxsaW5nIHRoZSBQcm9ncmFtCitpcyBhbiBleHByZXNzIGFja25vd2xlZGdtZW50IG9mIHlvdXIgYWdyZWVtZW50IHRvIGJlIGJvdW5kIGJ5IHRoZQordGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gWW91IGFsc28gYWNrbm93bGVkZ2UKK2FuZCBhZ3JlZSB0aGF0IHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgaXMgdGhlIGNvbXBsZXRlIGFuZCBleGNsdXNpdmUKK3N0YXRlbWVudCBvZiB0aGUgYWdyZWVtZW50IGJldHdlZW4geW91IGFuZCBMR1AgYW5kIHRoYXQgdGhpcyBMaWNlbnNlCitBZ3JlZW1lbnQgc3VwZXJzZWRlcyBhbnkgcHJpb3Igb3IgY29udGVtcG9yYW5lb3VzIGFncmVlbWVudCwgZWl0aGVyCitvcmFsIG9yIHdyaXR0ZW4sIGFuZCBhbnkgb3RoZXIgY29tbXVuaWNhdGlvbnMgYmV0d2VlbiB5b3UgYW5kIExHUC4KKworTGludXggR2FtZSBQdWJsaXNoaW5nIExURAorMTcgUm9zc2luZ3RvbiBSb2FkCitOb3R0aW5naGFtLCBORzIgNEhYLCBFbmdsYW5kCmRpZmYgLS1naXQgYS9saWNlbnNlcy9rdmlyYyBiL2xpY2Vuc2VzL2t2aXJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3NTI5NTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9rdmlyYwpAQCAtMCwwICsxLDI5OSBAQAorVGhpcyBpcyB0aGUgS1ZJcmMgSXJjIENsaWVudCBsaWNlbnNlLiBJdCBpcyBiYXNlZCBvbiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuCitJdCBjb250YWlucyBhbGwgdGhlIEdQTCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhbmQgYWRkcyBhIHNwZWNpYWwgZXhjZXB0aW9uCisoc2VlIFRlcm1zIGFuZCBDb25kaXRpb25zICwgY2xhdXNlIDEzKSB0byBpdHMgZGlzdHJpYnV0aW9uIGxpbWl0YXRpb25zLgorCitOb3RlIHRoYXQgdGhlIEdQTCBiZWxvdyBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQorRm91bmRhdGlvbiwgYnV0IHRoZSBpbnN0YW5jZSBvZiBjb2RlIHRoYXQgaXQgcmVmZXJzIHRvIGlzIGNvcHlyaWdodGVkIGJ5IE1lLgorCitUaGUgc291cmNlIGNvZGUgZm9yIGFsbCB2ZXJzaW9ucyBvZiBLVklyYyBpcyBmcmVlbHkKK2F2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lmt2aXJjLm5ldAorCitIYXZlIGZ1biEKK1N6eW1vbiBTdGVmYW5layA6KQorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorIFZlcnNpb24gMiwgSnVuZSAxOTkxCisgRXh0ZW5kZWQgYnkgU3p5bW9uIFN0ZWZhbmVrCisKKyBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuCisgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCisJCQkgICAgUHJlYW1ibGUKKworICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCitmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgaXQuICBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYworTGljZW5zZSBpcyBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UgZnJlZQorc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4gIFRoaXMKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UgYXBwbGllcyB0byBtb3N0IG9mIHRoZSBGcmVlIFNvZnR3YXJlCitGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlIGF1dGhvcnMgY29tbWl0IHRvCit1c2luZyBpdC4gIChTb21lIG90aGVyIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5Cit0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkLikgIFlvdSBjYW4gYXBwbHkgaXQgdG8KK3lvdXIgcHJvZ3JhbXMsIHRvby4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90CitwcmljZS4gIE91ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlcyBhcmUgZGVzaWduZWQgdG8gbWFrZSBzdXJlIHRoYXQgeW91CitoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yCit0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGNhbiBnZXQgaXQKK2lmIHlvdSB3YW50IGl0LCB0aGF0IHlvdSBjYW4gY2hhbmdlIHRoZSBzb2Z0d2FyZSBvciB1c2UgcGllY2VzIG9mIGl0CitpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKKyAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLgorVGhlc2UgcmVzdHJpY3Rpb25zIHRyYW5zbGF0ZSB0byBjZXJ0YWluIHJlc3BvbnNpYmlsaXRpZXMgZm9yIHlvdSBpZiB5b3UKK2Rpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeSBpdC4KKworICBGb3IgZXhhbXBsZSwgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHN1Y2ggYSBwcm9ncmFtLCB3aGV0aGVyCitncmF0aXMgb3IgZm9yIGEgZmVlLCB5b3UgbXVzdCBnaXZlIHRoZSByZWNpcGllbnRzIGFsbCB0aGUgcmlnaHRzIHRoYXQKK3lvdSBoYXZlLiAgWW91IG11c3QgbWFrZSBzdXJlIHRoYXQgdGhleSwgdG9vLCByZWNlaXZlIG9yIGNhbiBnZXQgdGhlCitzb3VyY2UgY29kZS4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyCityaWdodHMuCisKKyAgV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorKDIpIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2Ugd2hpY2ggZ2l2ZXMgeW91IGxlZ2FsIHBlcm1pc3Npb24gdG8gY29weSwKK2Rpc3RyaWJ1dGUgYW5kL29yIG1vZGlmeSB0aGUgc29mdHdhcmUuCisKKyAgQWxzbywgZm9yIGVhY2ggYXV0aG9yJ3MgcHJvdGVjdGlvbiBhbmQgb3Vycywgd2Ugd2FudCB0byBtYWtlIGNlcnRhaW4KK3RoYXQgZXZlcnlvbmUgdW5kZXJzdGFuZHMgdGhhdCB0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhpcyBmcmVlCitzb2Z0d2FyZS4gIElmIHRoZSBzb2Z0d2FyZSBpcyBtb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgd2UKK3dhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlIGlzIG5vdCB0aGUgb3JpZ2luYWwsIHNvCit0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbAorYXV0aG9ycycgcmVwdXRhdGlvbnMuCisKKyAgRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUKK3BhdGVudHMuICBXZSB3aXNoIHRvIGF2b2lkIHRoZSBkYW5nZXIgdGhhdCByZWRpc3RyaWJ1dG9ycyBvZiBhIGZyZWUKK3Byb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUKK3Byb2dyYW0gcHJvcHJpZXRhcnkuICBUbyBwcmV2ZW50IHRoaXMsIHdlIGhhdmUgbWFkZSBpdCBjbGVhciB0aGF0IGFueQorcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworICBUaGUgcHJlY2lzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW9uIGFuZAorbW9kaWZpY2F0aW9uIGZvbGxvdy4KKworCQkgICAgR05VIEdFTkVSQUwgUFVCTElDIExJQ0VOU0UKKyAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgIDAuIFRoaXMgTGljZW5zZSBhcHBsaWVzIHRvIGFueSBwcm9ncmFtIG9yIG90aGVyIHdvcmsgd2hpY2ggY29udGFpbnMKK2Egbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkCit1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiAgVGhlICJQcm9ncmFtIiwgYmVsb3csCityZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSIKK21lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6Cit0aGF0IGlzIHRvIHNheSwgYSB3b3JrIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gb3IgYSBwb3J0aW9uIG9mIGl0LAorZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucyBhbmQvb3IgdHJhbnNsYXRlZCBpbnRvIGFub3RoZXIKK2xhbmd1YWdlLiAgKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbiBpcyBpbmNsdWRlZCB3aXRob3V0IGxpbWl0YXRpb24gaW4KK3RoZSB0ZXJtICJtb2RpZmljYXRpb24iLikgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdAorY292ZXJlZCBieSB0aGlzIExpY2Vuc2U7IHRoZXkgYXJlIG91dHNpZGUgaXRzIHNjb3BlLiAgVGhlIGFjdCBvZgorcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbQoraXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUgUHJvZ3JhbSkuCitXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKK3NvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdQorY29uc3BpY3VvdXNseSBhbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhbiBhcHByb3ByaWF0ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcCBpbnRhY3QgYWxsIHRoZQorbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OworYW5kIGdpdmUgYW55IG90aGVyIHJlY2lwaWVudHMgb2YgdGhlIFByb2dyYW0gYSBjb3B5IG9mIHRoaXMgTGljZW5zZQorYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwgYW5kCit5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55IHBvcnRpb24KK29mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQKK2Rpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIG9yIHdvcmsgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb24gMQorYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UgY29uZGl0aW9uczoKKworICAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcworICAgIHN0YXRpbmcgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2UuCisKKyAgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KKyAgICB3aG9sZSBvciBpbiBwYXJ0IGNvbnRhaW5zIG9yIGlzIGRlcml2ZWQgZnJvbSB0aGUgUHJvZ3JhbSBvciBhbnkKKyAgICBwYXJ0IHRoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGFzIGEgd2hvbGUgYXQgbm8gY2hhcmdlIHRvIGFsbCB0aGlyZAorICAgIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgIGMpIElmIHRoZSBtb2RpZmllZCBwcm9ncmFtIG5vcm1hbGx5IHJlYWRzIGNvbW1hbmRzIGludGVyYWN0aXZlbHkKKyAgICB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoCisgICAgaW50ZXJhY3RpdmUgdXNlIGluIHRoZSBtb3N0IG9yZGluYXJ5IHdheSwgdG8gcHJpbnQgb3IgZGlzcGxheSBhbgorICAgIGFubm91bmNlbWVudCBpbmNsdWRpbmcgYW4gYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgYQorICAgIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZQorICAgIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIHByb2dyYW0gdW5kZXIKKyAgICB0aGVzZSBjb25kaXRpb25zLCBhbmQgdGVsbGluZyB0aGUgdXNlciBob3cgdG8gdmlldyBhIGNvcHkgb2YgdGhpcworICAgIExpY2Vuc2UuICAoRXhjZXB0aW9uOiBpZiB0aGUgUHJvZ3JhbSBpdHNlbGYgaXMgaW50ZXJhY3RpdmUgYnV0CisgICAgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbgorICAgIHRoZSBQcm9ncmFtIGlzIG5vdCByZXF1aXJlZCB0byBwcmludCBhbiBhbm5vdW5jZW1lbnQuKQorCitUaGVzZSByZXF1aXJlbWVudHMgYXBwbHkgdG8gdGhlIG1vZGlmaWVkIHdvcmsgYXMgYSB3aG9sZS4gIElmCitpZGVudGlmaWFibGUgc2VjdGlvbnMgb2YgdGhhdCB3b3JrIGFyZSBub3QgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtLAorYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluCit0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlCitzZWN0aW9ucyB3aGVuIHlvdSBkaXN0cmlidXRlIHRoZW0gYXMgc2VwYXJhdGUgd29ya3MuICBCdXQgd2hlbiB5b3UKK2Rpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZAorb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QgYmUgb24gdGhlIHRlcm1zIG9mCit0aGlzIExpY2Vuc2UsIHdob3NlIHBlcm1pc3Npb25zIGZvciBvdGhlciBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZQorZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtCit3aXRoIHRoZSBQcm9ncmFtIChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYSB3b3JrIGJhc2VkIG9uIGl0LAordW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gb25lIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCisKKyAgICBiKSBBY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyCisgICAgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZQorICAgIG1hY2hpbmUtcmVhZGFibGUgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bQorICAgIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKKworICAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyCisgICAgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLiAgKFRoaXMgYWx0ZXJuYXRpdmUgaXMKKyAgICBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdQorICAgIHJlY2VpdmVkIHRoZSBwcm9ncmFtIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB3aXRoIHN1Y2gKKyAgICBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKKworVGhlIHNvdXJjZSBjb2RlIGZvciBhIHdvcmsgbWVhbnMgdGhlIHByZWZlcnJlZCBmb3JtIG9mIHRoZSB3b3JrIGZvcgorbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuICBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UKK2NvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsIHBsdXMgYW55Cithc3NvY2lhdGVkIGludGVyZmFjZSBkZWZpbml0aW9uIGZpbGVzLCBwbHVzIHRoZSBzY3JpcHRzIHVzZWQgdG8KK2NvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gIEhvd2V2ZXIsIGFzIGEKK3NwZWNpYWwgZXhjZXB0aW9uLCB0aGUgc291cmNlIGNvZGUgZGlzdHJpYnV0ZWQgbmVlZCBub3QgaW5jbHVkZQorYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkKK2Zvcm0pIHdpdGggdGhlIG1ham9yIGNvbXBvbmVudHMgKGNvbXBpbGVyLCBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlCitvcGVyYXRpbmcgc3lzdGVtIG9uIHdoaWNoIHRoZSBleGVjdXRhYmxlIHJ1bnMsIHVubGVzcyB0aGF0IGNvbXBvbmVudAoraXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCitJZiBkaXN0cmlidXRpb24gb2YgZXhlY3V0YWJsZSBvciBvYmplY3QgY29kZSBpcyBtYWRlIGJ5IG9mZmVyaW5nCithY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50CithY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgc291cmNlIGNvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdAorY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KKworICA0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0KK2V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgdW5kZXIgdGhpcyBMaWNlbnNlLiAgQW55IGF0dGVtcHQKK290aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcwordm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLgorSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsIG9yIHJpZ2h0cywgZnJvbSB5b3UgdW5kZXIKK3RoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoCitwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgNS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK1Byb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCit0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworICA2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlCitQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tIHRoZQorb3JpZ2luYWwgbGljZW5zb3IgdG8gY29weSwgZGlzdHJpYnV0ZSBvciBtb2RpZnkgdGhlIFByb2dyYW0gc3ViamVjdCB0bwordGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvCit0aGlzIExpY2Vuc2UuCisKKyAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mIHBhdGVudAoraW5mcmluZ2VtZW50IG9yIGZvciBhbnkgb3RoZXIgcmVhc29uIChub3QgbGltaXRlZCB0byBwYXRlbnQgaXNzdWVzKSwKK2NvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3IKK290aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhleSBkbyBub3QKK2V4Y3VzZSB5b3UgZnJvbSB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuICBJZiB5b3UgY2Fubm90CitkaXN0cmlidXRlIHNvIGFzIHRvIHNhdGlzZnkgc2ltdWx0YW5lb3VzbHkgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzCitMaWNlbnNlIGFuZCBhbnkgb3RoZXIgcGVydGluZW50IG9ibGlnYXRpb25zLCB0aGVuIGFzIGEgY29uc2VxdWVuY2UgeW91CittYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiAgRm9yIGV4YW1wbGUsIGlmIGEgcGF0ZW50CitsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQgcm95YWx0eS1mcmVlIHJlZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtIGJ5CithbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4KK3RoZSBvbmx5IHdheSB5b3UgY291bGQgc2F0aXNmeSBib3RoIGl0IGFuZCB0aGlzIExpY2Vuc2Ugd291bGQgYmUgdG8KK3JlZnJhaW4gZW50aXJlbHkgZnJvbSBkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0uCisKK0lmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSB1bmRlcgorYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0bworYXBwbHkgYW5kIHRoZSBzZWN0aW9uIGFzIGEgd2hvbGUgaXMgaW50ZW5kZWQgdG8gYXBwbHkgaW4gb3RoZXIKK2NpcmN1bXN0YW5jZXMuCisKK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkKK3BhdGVudHMgb3Igb3RoZXIgcHJvcGVydHkgcmlnaHQgY2xhaW1zIG9yIHRvIGNvbnRlc3QgdmFsaWRpdHkgb2YgYW55CitzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mIHByb3RlY3RpbmcgdGhlCitpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMKK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAordGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAoraW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorCisgIDguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluCitjZXJ0YWluIGNvdW50cmllcyBlaXRoZXIgYnkgcGF0ZW50cyBvciBieSBjb3B5cmlnaHRlZCBpbnRlcmZhY2VzLCB0aGUKK29yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzIExpY2Vuc2UKK21heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZwordGhvc2UgY291bnRyaWVzLCBzbyB0aGF0IGRpc3RyaWJ1dGlvbiBpcyBwZXJtaXR0ZWQgb25seSBpbiBvciBhbW9uZworY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiAgSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzCit0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mIHRoaXMgTGljZW5zZS4KKworICA5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucworb2YgdGhlIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuICBTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsCitiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8KK2FkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gIElmIHRoZSBQcm9ncmFtCitzcGVjaWZpZXMgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2Ugd2hpY2ggYXBwbGllcyB0byBpdCBhbmQgImFueQorbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucworZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIgdmVyc2lvbiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24uICBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YKK3RoaXMgTGljZW5zZSwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUKK0ZvdW5kYXRpb24uCisKKyAgMTAuIElmIHlvdSB3aXNoIHRvIGluY29ycG9yYXRlIHBhcnRzIG9mIHRoZSBQcm9ncmFtIGludG8gb3RoZXIgZnJlZQorcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvcgordG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzIGNvcHlyaWdodGVkIGJ5IHRoZSBGcmVlCitTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMKK21ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91ciBkZWNpc2lvbiB3aWxsIGJlIGd1aWRlZCBieSB0aGUgdHdvIGdvYWxzCitvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kCitvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcgYW5kIHJldXNlIG9mIHNvZnR3YXJlIGdlbmVyYWxseS4KKworCQkJICAgIE5PIFdBUlJBTlRZCisKKyAgMTEuIEJFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZCitGT1IgVEhFIFBST0dSQU0sIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAgRVhDRVBUIFdIRU4KK09USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SIE9USEVSIFBBUlRJRVMKK1BST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VECitPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSBFTlRJUkUgUklTSyBBUworVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiAgU0hPVUxEIFRIRQorUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsCitSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxMi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTiBXUklUSU5HCitXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SCitSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLAorSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HCitPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVECitUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkKK1lPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSCitQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworICAxMy4gQXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgU3p5bW9uIFN0ZWZhbmVrIGdpdmVzIHBlcm1pc3Npb24gdG8gbGluayB0aGlzCitwcm9ncmFtIHdpdGggUXQgbm9uLWNvbW1lcmNpYWwgZWRpdGlvbiBmb3IgV2luZG93cywgYW5kIGRpc3RyaWJ1dGUgdGhlIHJlc3VsdGluZyBleGVjdXRhYmxlLAord2l0aG91dCBpbmNsdWRpbmcgdGhlIHNvdXJjZSBjb2RlIGZvciB0aGUgUXQgbm9uLWNvbW1lcmNpYWwgZWRpdGlvbiBpbiB0aGUgc291cmNlCitkaXN0cmlidXRpb24uIFRoZSBRdCBub24tY29tbWVyY2lhbCBlZGl0aW9uIGxpYnJhcnkgaXMgY292ZXJlZCBieSB0aGUgCitRdCBOb24tQ29tbWVyY2lhbCBsaWNlbnNlLiBTZWUgaHR0cDovL3d3dy50cm9sbHRlY2guY29tIGZvciBpbmZvcm1hdGlvbnMuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9reW9jZXJhLW1pdGEtcHBkcyBiL2xpY2Vuc2VzL2t5b2NlcmEtbWl0YS1wcGRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNiZjI2NTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9reW9jZXJhLW1pdGEtcHBkcwpAQCAtMCwwICsxLDIyOSBAQAorUGxlYXNlIHJlYWQgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgbGljZW5zZSBhZ3JlZW1lbnQgY2FyZWZ1bGx5LiBUaGlzCitpcyBhIGxlZ2FsbHkgYmluZGluZyBsaWNlbnNlIGFncmVlbWVudCBiZXR3ZWVuIHlvdSAodGhlICJ1c2VyIiBtZWFuaW5nIGVpdGhlcgorYW4gaW5kaXZpZHVhbCBvciBhIHNpbmdsZSBlbnRpdHkpIGFuZCBLeW9jZXJhIE1pdGEuIEJ5IHVzaW5nIHRoaXMgc29mdHdhcmUKKygiU29mdHdhcmUiKSB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoZSBmb2xsb3dpbmcgU29mdHdhcmUgTGljZW5zZQorQWdyZWVtZW50IGdyYW50aW5nIGEgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLgorCisKKyoqMS4gUHJvcGVydHkgUmlnaHRzCisKK1RoZSBTb2Z0d2FyZSBpcyBwcm90ZWN0ZWQgYnkgbmF0aW9uYWwgYW5kIGludGVybmF0aW9uYWwgY29weXJpZ2h0IGxhd3MgYW5kCitpbnRlcm5hdGlvbmFsIHRyZWF0eSBwcm92aXNpb25zLiBUaGUgU29mdHdhcmUgaXMgb3duZWQgYW5kIGNvcHlyaWdodGVkIGJ5CitLeW9jZXJhIE1pdGEuIFlvdXIgbGljZW5zZSBkb2VzIG5vdCBjb25mZXIgYW55IHRpdGxlIHRvLCBvciBvd25lcnNoaXAgaW4gdGhlCitTb2Z0d2FyZS4gTm8gcmlnaHRzIG9mIGFueSBraW5kIGluIHRoZSBTb2Z0d2FyZSBhcmUgdHJhbnNmZXJyZWQuIFRoZSB1c2Ugb2YKK3RoZSBTb2Z0d2FyZSBpcyBzdWJqZWN0IHRvIHRoZSBsaWNlbnNlIHRlcm1zIGluIHRoaXMgYWdyZWVtZW50LgorCisKKyoqMi4gVXNlIG9mIFNvZnR3YXJlKioKKworCitLeW9jZXJhIE1pdGEgZ3JhbnRzIHRoZSB1c2VyIGEgbGljZW5zZSB0byB1c2Ugb25lIGNvcHkgb2YgdGhlIFNvZnR3YXJlIG9uIG9uZQorb3IgbW9yZSBjb21wdXRlcnMgY29ubmVjdGVkIHRvIGFuIG9yaWdpbmFsID9LeW9jZXJhIE1pdGE/IHByaW50ZXIsIGNvcGllciBvcgorbXVsdGlmdW5jdGlvbmFsIGRldmljZS4gVXNlIG1lYW5zIGFueSBwZXJtYW5lbnQgb3IgdGVtcG9yYXJ5IHVzZSBvZiB0aGUKK1NvZnR3YXJlIGFuZCBpbmNsdWRlcyB0aGUgc3RvcmluZywgbG9hZGluZywgaW5zdGFsbGluZywgZXhlY3V0aW5nIG9yCitkaXNwbGF5aW5nIG9mIHRoZSBTb2Z0d2FyZSBvciB0aGUgcHJvY2Vzc2luZyBvZiBhbnkgZGF0YSBjb250YWluZWQgdGhlcmVpbi4KK1RoZSBTb2Z0d2FyZSBtYXkgbm90IGJlIHVzZWQgb24gYW55IG90aGVyIGhhcmR3YXJlIHVubGVzcyBzdWNoIHVzZSBpcyBncmFudGVkCitieSBhIHNlcGVyYXRlIGxpY2Vuc2UgYWdyZWVtZW50LgorCisKKyoqMy4gUmlnaHRzIHRvIGNvcHkgU29mdHdhcmUqKgorCisKKygxKSBUaGUgdXNlciBtYXkgb25seSBjb3B5IHRoZSBTb2Z0d2FyZSB3aGVyZSB0aGlzIGlzIGVzc2VudGlhbCB0byB1c2FnZS4gVGhpcworaW5jbHVkZXMgdGhlIGluc3RhbGxhdGlvbiBhbmQgbG9hZGluZyBvZiB0aGUgU29mdHdhcmUgaW50byB0aGUgdGVtcG9yYXJ5CittZW1vcnkgKGkuZS4gUkFNKS4KKworCisoMikgVGhlIHVzZXIgbWF5IG1ha2UgYW5kIHN0b3JlIG9uZSBiYWNrLXVwIGNvcHkgaWYgdGhpcyBpcyBuZWNlc3NhcnkgZm9yCitzZWN1cmluZyBsYXRlciB1c2UuIFRoZSBjb3B5IG11c3QgYmUgbWFya2VkIGFzIHN1Y2guIElmIHRoZSBTb2Z0d2FyZSBpcyB1c2VkCitpbiB0aGUgY291cnNlIG9mIGJ1c2luZXNzIGFuZCBpZiByb3V0aW5lIGJhY2stdXAgY29waWVzIG9mIGFsbCBkYXRhIGluY2x1ZGluZwordGhlIFNvZnR3YXJlIGFyZSBtYWRlIGZvciB0aGUgcHVycG9zZXMgb2Ygc2VjdXJpbmcgZGF0YSBhbmQgZW5zdXJpbmcgdGhhdCB0aGUKK2NvbXB1dGVyIHN5c3RlbSBjYW4gYmUgcmVhY3RpdmF0ZWQgcXVpY2tseSBhZnRlciBhIGJyZWFrZG93biwgb25seSBzbyBtYW55CitiYWNrLXVwIGNvcGllcyBtYXkgYmUgbWFkZSBhcyBhcmUgYXNib2x1dGVseSBlc3NlbnRpYWwuIFRoZXkgbWF5IGJlIHVzZWQgZm9yCithcmNoaXZhbCBwdXJwb3NlcyBvbmx5IQorCisKKygzKSBUaGUgdXNlciBtYXkgbm90IG1ha2UgYW55IGZ1cnRoZXIgY29waWVzLgorCisKKyg0KSBUaGUgdXNlciBtYXkgbm90IGRlY29tcGlsZSB0aGUgU29mdHdhcmUgZXhjZXB0IGFuZCBvbmx5IHRvIHRoZSBleHRlbnQgdGhhdAorc3VjaCBhY3Rpdml0eSBpcyBleHByZXNzaXZseSBwZXJtaXR0ZWQgYnkgbGF3LiBUaGUgdXNlciBtYXkgbm90IGFsdGVyIGFueQorYnJhbmQgbmFtZXMsIHNlcmlhbCBudW1iZXJzIG9yIG90aGVyIGNoYXJhY3RlcmlzdGljcyBpZGVudGlmeWluZyB0aGUgU29mdHdhcmUKK29yIGFueSBvdGhlciBsZWdhbCBpbmZvcm1hdGlvbi4KKworCisqKjQuIFRyYW5zZmVyIG9mIFNvZnR3YXJlKioKKworCisoMSkgVGhlIGxpY2Vuc2Ugd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB1cG9uIGFueSB0cmFuc2ZlciBvZiB0aGUgU29mdHdhcmUKK3RvIGEgdGhpcmQgcGFydHkuIFRoZSB0cmFuc2ZlcmVlIHdpbGwgYmUgcmVnYXJkZWQgYXMgdXNlciBpbiB0aGUgbWVhbmluZyBvZgordGhpcyBjb250cmFjdC4KKworCisoMikgVGhlIFNvZnR3YXJlIG1heSBvbmx5IGJlIHRyYW5zZmVycmVkIGlmIHRoZSB0cmFuc2ZlcmVlIGFjY2VwdHMgdGhlIHRlcm1zCithbmQgY29uZGl0aW9ucyBvZiB0aGlzIGxpY2Vuc2UgYWdyZWVtZW50LiBUaGUgdXNlciBpcyBvYmxpZ2VkIHRvIGluZm9ybSB0aGUKK3RyYW5zZmVyZWUgb2YgdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuIElmIHRoZSB1c2VyIGRvZXMgbm90IGhhdmUgYSBjb3B5IG9mCit0aGlzIGNvbnRyYWN0LCBoZSBtYXkgb2J0YWluIGEgbmV3IG9uZSBmcm9tIEt5b2NlcmEgTWl0YSBNaXRhIGF0IGhpcyBvd24KK2V4cGVuc2VzLgorCisKKygzKSBVcG9uIHRyYW5zZmVyIHRoZSB1c2VyIG11c3QgaW1tZWRpYXRlbHkgZGVzdHJveSBhbnkgY29waWVzIG9mIHRoZSBTb2Z0d2FyZQorb3IgcGFydHMgdGhlcmVvZiBpbmNsdWRpbmcgYW55IGNoYW5nZWQgb3IgbW9kaWZpZWQgY29waWVzIG9yIHBhcnRzIHRoZXJlb2YuCitUaGlzIGFsc28gYXBwbGllcyB0byBhbnkgYmFjay11cCBjb3BpZXMuCisKKworKDQpIFRoZSB1c2VyIG1heSBub3QgcmVudCwgbGVhc2Ugb3Igc3ViZGl2aWRlIGFueSByaWdodHMgZ3JhbnRlZCBieSB0aGlzCitsaWNlbnNlIG9yIHRyYW5zZmVyIG9yIGdyYW50IHN1YmxpY2Vuc2VzIHVubGVzcyBleHBsaWNpdGVseSBhbGxvd2VkIGluIHRoaXMKK2NvbnRyYWN0LgorCisKKyoqNS4gV2FycmFudHkqKgorCisKKygxKSBLeW9jZXJhIE1pdGE/cyBsaWFiaWxpdHkgaXMgbGltaXRlZCB0byBvcmlnaW5hbCBTb2Z0d2FyZS4KKworCisoMikgS3lvY2VyYSBNaXRhLCBob3dldmVyLCBoYXMgdGFrZW4gYWxsIHBvc3NpYmxlIGNhcmUgdG8gcHJvZHVjZSB0aGUgU29mdHdhcmUKK3RoYXQsIGF0IHRoZSB0aW1lIG9mIGRvd25sb2FkaW5nLCBpcyBmcmVlIGZyb20gZGVmZWN0cyBhbmQgZml0IGZvciBpdHMKK3BhcnRpY3VsYXIgcHVycG9zZS4gSW4gdGhlIHVubGlrZWx5IGV2ZW50IG9mIGFueSBkZWZpY2VuY2llcyBLeW9jZXJhIE1pdGEgd2lsbAorcmVtZWR5IHRoZSBmYXVsdCB3aXRoaW4gYSB3YXJyYW50eSBwZXJpb2Qgb2Ygc2l4IG1vbnRocy4gS3lvY2VyYSBNaXRhIG1heSBhdAoraXRzIHNvbGUgZGlzY3JldGlvbiBlaXRoZXIgcmVtZWR5IHRoZSBmYXVsdCBmcmVlIG9mIGNoYXJnZSBvciBwcm92aWRlIGEKK3JlcGxhY2VtZW50LgorCisKKygzKSBUaGUgd2FycmFudHkgcGVyaW9kIHN0YXJ0cyB1cG9uIHRoZSBkb3dubG9hZCBvZiB0aGUgU29mdHdhcmUuCisKKworKDQpIElmIGEgcmVtZWR5IG9mIHRoZSBmYXVsdCBpcyBpbXBvc3NpYmxlIHdpdGhpbiBhbiBhcHByb3ByaWF0ZSBwZXJpb2Qgb2YKK3RpbWUgb3IgdGhlIHJlbWVkeSBvciB0aGUgcmVwbGFjZW1lbnQgaXMgcmVnYXJkZWQgYXMgaW5lZmZlY3RpdmUsIHRoZSB1c2VyIG1heQorY2xhaW0gYSByZWR1Y3Rpb24gb2YgdGhlIHB1cmNoYXNlIHByaWNlIG9yIHRoZSByZWNpc3Npb24gb2YgdGhlIGNvbnRyYWN0LiBUaGUKK3JlbWVkeSBvciB0aGUgcmVwbGFjZW1lbnQgY2FuIG9ubHkgcmVnYXJkZWQgYXMgaW5lZmZlY3RpdmUgaWYgS3lvY2VyYSBNaXRhIGhhZAorc3VmZmljaWVudCBvcHBvcnR1bml0eSB0byByZW1lZHkgdGhlIGZhdWx0IGFuZCB0aGlzIHByb3ZlcyBpbXBvc3NpYmxlIG9yCitvdGhlcndpc2UgdW5yZWFzb25hYmxlLgorCisKKyg1KSBUaGUgd2FycmFudHkgaXMgbnVsbCBhbmQgdm9pZCBpZiB0aGUgU29mdHdhcmUgaGFzIGJlZW4gbWlzdXNlZCwgdXNlZCBmb3IKK3RoZSB3cm9uZyBwdXJwb3NlIG9yIHVzZWQgaW4gZGVmZWN0aXZlIGhhcmR3YXJlLgorCisKKyg2KSBGYXVsdHMgbXVzdCBub3QgYmUgcmVtZWRpZWQgYnkgdGhpcmQgcGFydGllcy4gSW4gdGhpcyBjYXNlIEt5b2NlcmEgTWl0YQorbWF5IGVpdGhlciByZXNjaW5kIHRoZSBjb250cmFjdCBvciBwcm92aWRlIGEgY29weSBvZiB0aGUgbmV3ZXN0IHZlcnNpb24gb2YgdGhlCitwcm9ncmFtLiBUaGlzIGRvZXMgbm90IGltcGx5IGFueSBwcm9sb25nYXRpb24gb2YgdGhlIHdhcnJhbnR5IHBlcmlvZC4KKworCisoNykgS3lvY2VyYSBNaXRhIGlzIG5vdCBsaWFibGUgZm9yIGFueSBmYXVsdHMgY2F1c2VkIGR1cmluZyBkb3dubG9hZGluZy4KKworCisqKjYuIExpbWl0YXRpb24gb2Ygd2FycmFudHkqKgorCisKKygxKSBTb2Z0d2FyZSBpcyB1c2VkIGF0IHRoZSB1c2VyJ3Mgb3duIHJpc2suIEt5b2NlcmEgTWl0YSBpcyBvbmx5IGxpYWJsZSBmb3IKK2FueSBmYXVsdHMgY2F1c2VkIGJ5IGdyb3NzIG5lZ2xpZ2VuY2Ugb3IgaW50ZW50aW9uYWwgYWN0cyBieSBLeW9jZXJhIE1pdGEuCisKKworKDIpIEt5b2NlcmEgTWl0YT9zIGxpYWJpbGl0eSBpcyBsaW1pdGVkIHRvIHRoZSBwdXJjaGFzZSBwcmljZS4KKworCisoMykgQW55IGxpYWJsaWxpdHkgZm9yIGxvc3Mgb2YgZGF0YSBpcyBsaW1pdGVkIHRvIHRob3NlIGV4cGVuc2VzIHdoaWNoIHdvdWxkCitub3JtYWx5IGJlIGluY3VycmVkIGluIHJldHJpZXZpbmcgZGF0YSBpZiByaXNrLWFwcHJvcHJpYXRlIGJhY2stdXAgY29waWVzIGhhZAorYmVlbiBtYWRlIG9uIGEgcmVndWxhciBiYXNpcyBidXQsIGluIGFueSBjYXNlLCBub3QgZXhjZWVkaW5nIHRoZSBsaW1pdAorc3BlY2lmaWVkIGluIHBhcmFnaCA2LCBzdWItcGFyYWdoIDIuCisKKworKDQpIEFueSBsaWFiaWxpdHkgdW5kZXIgdGhlIGV1cm9wZWFuIGxhd3MgY29uY2VybmluZyBwcm9kdWN0IExpYWJpbGl0eSBhcmUgbm90CitsaW1pdGVkIGJ5IHRoaXMgY29udHJhY3QuCisKKworKio3LiBFeGNsdXNpb24gb2YgbGlhYmlsaXR5KioKKworCitLeW9jZXJhIE1pdGEgaXMgbm90IGxpYWJsZSBmb3IgYW55IGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgbG9zcyBvZiBwcm9maXQgb3IKK2FueSBvdGhlciBsb3NzIHdoYXRzb2V2ZXIgcmVzdWx0aW5nIGZyb20gZGVmZWN0cyBpbiB0aGUgcHJvZ3JhbW0gZXZlbiBpZgorS3lvY2VyYSBNaXRhIGhhcyBiZWVuIGFkdmlzZWQgdGhlcmVvZi4gVGhpcyBsaW1pdGF0aW9uIG9mIHRoZSB3YXJyYW50eSBhcHBsaWVzCit0byBhbGwgZGFtYWdlcyBvZiBhbnkga2luZC4KKworCisqKjguIE9ibGlnYXRpb25zIHRvIGV4YW1pbmUgYW5kIHRvIG5vdGlmeSoqCisKKworKDEpIFRoZSB1c2VyIGlzIG9ibGlnZWQgdG8gZXhhbWluZSB0aGUgU29mdHdhcmUgZm9yIGFueSBldmlkZW50IGZhdWx0cy4gQW4KK2V2aWRlbnQgZmF1bHQgbWVhbnMgYSBmYXVsdCBvYnZpb3VzIHRvIHRoZSBhdmVyYWdlIHVzZXIuIFVubGVzcyBLeW9jZXJhIE1pdGEKK2lzIG5vdGlmaWVkIG9mIHN1Y2ggZmF1bHRzIHdpdGhpbiAxNCBkYXlzIG9mIGRvd25sb2FkaW5nIHRoZSBTb2Z0d2FyZSwgdGhlCit3YXJyYW50eSB3aWxsIGV4cGlyZS4KKworCisoMikgS3lvY2VyYSBNaXRhIGhhcyB0byBiZSBpbmZvcm1lZCBvZiBhbnkgb3RoZXIgZmF1bHQgd2l0aGluIGZvdXJ0ZWVuIGRheXMgb2YKK2l0cyBkaXNjb3ZlcnkuCisKKworKDMpIFRoaXMgbGljZW5zZSBkb2VzIG5vdCBlZmZlY3QgYW55IGZ1cnRoZXIgb2JsaWdhdGlvbnMgb2YgdGhlIHVzZXIgbm9ybWFsbHkKK293ZWQgaW4gdGhlIGNvdXJzZSBvZiBidXNpbmVzcy4KKworCisoNCkgSWYgdGhpcyBvYmxpZ2F0aW9uIGlzIHZpb2xhdGVkLCB0aGUgdXNlciB3aWxsIGJlIGRlZW1lZCB0byBoYXZlIGFjY2VwdGVkCit0aGUgU29mdHdhcmUgYXMgZmF1bHRsZXNzLgorCisKKyoqOS4gTm8gb3RoZXIgYXBwbGljYWJsZSBhZ3JlZW1lbnRzLCB3cml0dGVuIGZvcm0qKgorCisKKygxKSBUaGlzIGxpY2Vuc2UgZ292ZXJucyB0aGUgY29udHJhY3R1YWwgcmVsYXRpb24gYmV0d2VlbiBLeW9jZXJhIE1pdGEgYW5kIHRoZQordXNlciB3aXRoIHJlZ2FyZHMgdG8gdGhlIGNvbnRyYWN0dWFsIG9ibGlnYXRpb24gZXN0YWJsaXNoZWQgYnkgdGhpcyBsaWNlbnNlLgorVGhlcmUgYXJlIG5vIGZ1cnRoZXIgYWdyZWVtZW50cy4gQW55IHByaW9yIGNvbnRyYWN0cyBvciBhZ3JlZW1lbnRzIGFyZSBudWxsCithbmQgdm9pZCB1cG9uIGFjY2VwdGFuY2Ugb2YgdGhpcyBsaWNlbnNlLgorCisKKygyKSBBbnkgYWx0ZXJhdGlvbiBvZiB0aGlzIGxpY2Vuc2UgbXVzdCBiZSBtYWRlIGluIHdyaXRpbmcuIEFueSBhbHRlcmF0aW9uIG9mCit0aGlzIGNsYXVzZSBtdXN0IGFsc28gYmUgbWFkZSBpbiB3cml0aW5nLgorCisKKyoqMTAuIENvbmZpZGVudGlhbGl0eSoqCisKKworKDEpIFRoZSB1c2VyIGlzIG9ibGlnZWQgdG8gdGhlIGJlc3Qgb2YgaGlzIGFiaWxpdGllcyB0byB0YWtlIGFsbCByZWFzb25hYmxlCittZWFzdXJlcyB0byBwcmV2ZW50IGFueSB1bmF1dGhvcml6ZWQgcGVyc29ucyBmcm9tIG9idGFpbmluZyBhY2Nlc3MgdG8sIG9yCittYWtpbmcgYW55IGNvcHkgb2YsIG9yIG90aGVyd2lzZSBkaXNjbG9zaW5nIGFueSBpbmZvcm1hdGlvbiByZWdhcmRpbmcgb2YgdGhlCitTb2Z0d2FyZS4KKworCisoMikgSXQgaXMgYWdyZWVkIHRoYXQgYW55IGluZm9ybWF0aW9uIG9idGFpbmVkIGluIHRoZSBjb3Vyc2Ugb2YgdGhlIGNvbnRyYWN0Cit3aGljaCBjb3VsZCBiZSB1c2VkIGluIHRoZSBkZXZlbG9wbWVudCwgbWFudWZhY3R1cmUgb3Igc2FsZSBvZiBhbnkgU29mdHdhcmUgb3IKK2ZvciB0aGUgaW5mcmluZ2VtZW50IG9mIGFueSBjb3B5cmlnaHQgbGF3cyBzaGFsbCBiZSBrZXB0IGNvbmZpZGVudGlhbC4KKworCisqKjExLiBNaXNjZWxsYW5lb3VzKioKKworCisoMSkgQW55IG5vdGlmaWNhdGlvbiB0byBLeW9jZXJhIE1pdGEgc2hhbGwgYmUgbWFkZSBpbiB3cml0aW5nIHRvIHRoZSBmb2xsb3dpbmcKK2FkZHJlc3M6CisKKworS1lPQ0VSQSBNSVRBIEVVUk9QRSBCLlYuCisKK0hPRUtTVEVFTiA0MAorCisyMTMyIEhPT0ZET1JQLCBUSEUgTkVUSEVSTEFORFMKKworCisKKygyKSBBbGwgcmVsYXRpb25zIGJldHdlZW4gS1lPQ0VSQSBNSVRBIGFuZCB0aGUgY3VzdG9tZXIgc2hhbGwgYmUgZGVlbWVkIHRvCitoYXZlIGJlZW4gZnVsbHkgZ292ZXJuZWQgYnkgYW5kIGNvbnN0cnVlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGxhd3Mgb2YgdGhlCitOZXRoZXJsYW5kcywgdGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBWaWVubmEgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZQorSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIChDSVNHKSBiZWluZyBleGNsdWRlZC4KKworCisoMykgQWxsIGRpc3B1dGVzIGFyaXNpbmcgaW4gY29ubmVjdGlvbiB3aXRoIHRoaXMgd2FycmFudHkgc2hhbGwgYmUgZmluYWxseQorc2V0dGxlZCBieSB0aGUgY29tcGV0ZW50IGNvdXJ0IGluIEFtc3RlcmRhbSwgdGhlIE5ldGhlcmxhbmRzLCBhcyBmYXIgYXMKK2xlZ2FsbHkgcGVybWl0dGVkLgorCisKKyg0KSBUaGUgcHVycG9zZSBvZiBoZWFkaW5nIGluIHRoZXNlIHdhcnJhbnR5IHRlcm1zIGlzIG1lcmVseSB0byBwcm92aWRlZAorYmV0dGVyIG9yaWVudGF0aW9uLiBUaGV5IGFyZSBub3Qgc2lnbmlmaWNhbnQgZm9yIGludGVycHJldGluZyB0aGUgd2FycmFudHkKK3Rlcm1zLgorCisKKyg0KSBJZiBvbmUgb3IgbW9yZSBzdGlwdWxhdGlvbnMgb2YgdGhpcyB3YXJyYW50eSBhcmUgZW50aXJlbHkgb3IgcGFydGlhbGx5CitpbnZhbGlkLCBvciBpZiB0aGV5IGJlY29tZSBwYXJ0aWFsbHkgb3IgZW50aXJlbHkgaW52YWxpZCwgdGhpcyB3aWxsIG5vdCBhZmZlY3QKK3RoZSB2YWxpZGl0eSBvZiB0aGUgcmVtYWluaW5nIHN0aXB1bGF0aW9ucy4gVGhlIHN0aXB1bGF0aW9ucyB3aGljaCBoYXZlIGJlY29tZQoraW52YWxpZCBzaGFsbCBiZSByZXBsYWNlZCBieSBsZWdhbGx5IHZhbGlkIHJlZ3VsYXRpb25zLCB3aGljaCBtb3N0IGNsb3NlbHkKK2FwcHJveGltYXRlcyB0aGUgaW50ZW50IG9mIHRoZSBpbnZhbGlkIHN0aXB1bGF0aW9uLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvbGV2ZWUgYi9saWNlbnNlcy9sZXZlZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGI3YTJiCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvbGV2ZWUKQEAgLTAsMCArMSwxOSBAQAorLyoKKyAqIExFVkVFLCBvciBDYXB0YWluIFZpZGVvOyAgQSB2aSBjbG9uZQorICoKKyAqIENvcHlyaWdodCAoYykgMTk4Mi0xOTk3IERhdmlkIEwgUGFyc29ucworICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRob3V0IG9yCisgKiB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwYXJhZ3JhcGggYXJlIGR1cGxpY2F0ZWQgaW4gYWxsIHN1Y2gKKyAqIGZvcm1zIGFuZCB0aGF0IGFueSBkb2N1bWVudGF0aW9uLCBhZHZlcnRpc2luZyBtYXRlcmlhbHMsIGFuZAorICogb3RoZXIgbWF0ZXJpYWxzIHJlbGF0ZWQgdG8gc3VjaCBkaXN0cmlidXRpb24gYW5kIHVzZSBhY2tub3dsZWRnZQorICogdGhhdCB0aGUgc29mdHdhcmUgd2FzIGRldmVsb3BlZCBieSBEYXZpZCBMIFBhcnNvbnMgKG9yY0BwZWxsLmNoaS5pbC51cykuCisgKiBNeSBuYW1lIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVElCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRS4KKyAqLwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvbGhhIGIvbGljZW5zZXMvbGhhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhYzAyZTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9saGEKQEAgLTAsMCArMSwyNyBAQAorVGhpcyBsaWNlbnNlIGV4cGxhbmF0aW9uIHdhcyBkZXJpdmVkIGZyb20gdGhlIGNvcHlyaWdodCBub3RpY2UgZGlzdHJpYnV0ZWQKK3dpdGggdGhlIERlYmlhbiBwYWNrYWdlIG1haW50YWluZWQgYnkgQXRzdXNoaSBLQU1PU0hJREEgPGthbW9wQHBvc3QxLmNvbT4uCisKK1Vwc3RyZWFtIEF1dGhvcjogVHN1Z2lvIE9rYW1vdG8gPHRzdWdpb0BtdWMuYmlnbG9iZS5uZS5qcD4KKworQ29weXJpZ2h0OgorCisgT3JpZ2luYWwgTGljZW5zZSBTdGF0ZW1lbnQgKGluIEphcGFuZXNlKToKKworICAg44Gq44GK44CB44ON44OD44OI44Gn44Gu6YWN5LuY44Gv6Ieq55Sx44Gn44GZ44GM44CB44ON44OD44OI44Gr44Ki44Kv44K744K544Gn44GN44Gq44GE5pa577yI6ZuR6KqM44GK44KI44Gz44CBCisgICBDRC1ST00g44Gq44Gp44Gr44KI44KL77yJ44G444Gu6YWN5LuY44Gv44CB6YWN5LuY5YmN44Gr44GT44Gh44KJ44GrIEludGVyLU5ldCDjga7mlrnjgatFLU1haWwKKyAgIOOCkiDjgYrpoZjjgYTjgZfjgb7jgZnjgIIg44Gp44GT44Gd44GT44Gr44CB5o6y6LyJ44GZ44KL44Go44GE44GG5peo44GM44GC44KM44Gw57WQ5qeL44Gn44GZ44Gu44Gn44CCCisgICDjgb7jgZ/jgIHjgZ3jgozjgoLlh7rmnaXjgarjgYTpmpvjgavjga/jgIHlvozml6UgRS1NYWlsIOOCkuW/heOBmuOBiumhmOOBhOOBl+OBvuOBmeOAggorCisgVHJhbnNsYXRlZCBMaWNlbnNlIFN0YXRlbWVudCAodHJhbnNsYXRlZCBieSBHT1RPIE1hc2Fub3JpIDxnb3RvbUBkZWJpYW4ub3JnPik6CisKKyAgIEl0J3MgZnJlZSB0byBkaXN0cmlidXRlIG9uIHRoZSBuZXR3b3JrLCBidXQgaWYgeW91IGRpc3RyaWJ1dGUgZm9yCisgICB0aGUgcGVvcGxlIHdobyBjYW5ub3QgYWNjZXNzIHRoZSBuZXR3b3JrIChieSBtYWdhemluZSBvciBDRC1ST00pLAorICAgcGxlYXNlIHNlbmQgRS1NYWlsIChJbnRlci1OZXQgYWRkcmVzcykgdG8gdGhlIGF1dGhvciBiZWZvcmUgdGhlCisgICBkaXN0cmlidXRpb24uIFRoYXQncyB3ZWxsIHdoZXJlIHRoaXMgc29mdHdhcmUgaXMgYXBwZWFyZC4KKyAgIElmIHlvdSBjYW5ub3QgZG8sIHlvdSBtdXN0IHNlbmQgbWUgdGhlIEUtTWFpbCBsYXRlci4KKworIE9yaWdpbmFsIFNvdXJjZSBDb2RlIExpY2Vuc2UgU3RhdGVtZW50OgorCisgICAvKiAgICBDb3B5cmlnaHQgKEMpIE1DTUxYWFhJWCBZb29pY2hpLlRhZ2F3YSAgICAgICAgICAgICAgICAgICAgICAqLworICAgLyogICAgTW9kaWZpZWQgICAgICAgICAgICAgICAgTm9idXRha2EgV2F0YXpha2kgICAgICAgICAgICAgICAgICAgKi8KKyAgIC8qICAgICAgICAgICAgICAgICAgIFRoYW5rcyB0byBILllvc2hpemFraS4gKE1TLURPUyBMSGFyYykgICAgICAgICovCmRpZmYgLS1naXQgYS9saWNlbnNlcy9saWJlcnRhcy1mdyBiL2xpY2Vuc2VzL2xpYmVydGFzLWZ3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4YTI0MWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9saWJlcnRhcy1mdwpAQCAtMCwwICsxLDQyIEBACitGSVJNV0FSRSBMSUNFTlNFIFRFUk1TCisKKworQ29weXJpZ2h0IChjKSBNYXJ2ZWxsIEludGVybmF0aW9uYWwgTHRkLgorCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbi4gUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBiaW5hcnkgZm9ybSwgd2l0aG91dCBtb2RpZmljYXRpb24sIAorYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisqIFJlZGlzdHJpYnV0aW9ucyBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIGZvbGxvd2luZworICBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgCisgIGRpc3RyaWJ1dGlvbi4KKworKiBOZWl0aGVyIHRoZSBuYW1lIG9mIE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuIG5vciB0aGUgbmFtZXMgb2YgaXRzIAorICBzdXBwbGllcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIAorICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworKiBObyByZXZlcnNlIGVuZ2luZWVyaW5nLCBkZWNvbXBpbGF0aW9uLCBvciBkaXNhc3NlbWJseSBvZiB0aGlzIHNvZnR3YXJlIGlzIAorICBwZXJtaXR0ZWQuCisKK0xpbWl0ZWQgcGF0ZW50IGxpY2Vuc2UuIE1hcnZlbGwgSW50ZXJuYXRpb25hbCBMdGQuIGdyYW50cyBhIHdvcmxkLXdpZGUsIAorcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UgdW5kZXIgcGF0ZW50cyBpdCBub3cgb3IgaGVyZWFmdGVyIG93bnMgb3IKK2NvbnRyb2xzIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlLCBpbXBvcnQsIG9mZmVyIHRvIHNlbGwgYW5kIHNlbGwgKCJVdGlsaXplIikKK3RoaXMgc29mdHdhcmUsIGJ1dCBzb2xlbHkgdG8gdGhlIGV4dGVudCB0aGF0IGFueSBzdWNoIHBhdGVudCBpcyBuZWNlc3NhcnkgdG8KK1V0aWxpemUgdGhlIHNvZnR3YXJlIGFsb25lLCBvciBpbiBjb21iaW5hdGlvbiB3aXRoIGFuIG9wZXJhdGluZyBzeXN0ZW0KK2xpY2Vuc2VkIHVuZGVyIGFuIGFwcHJvdmVkIE9wZW4gU291cmNlIGxpY2Vuc2UgYXMgbGlzdGVkIGJ5IHRoZSBPcGVuIFNvdXJjZQorSW5pdGlhdGl2ZSBhdCBodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMuIFRoZSBwYXRlbnQgbGljZW5zZSBzaGFsbCBub3QKK2FwcGx5IHRvIGFueSBvdGhlciBjb21iaW5hdGlvbnMgd2hpY2ggaW5jbHVkZSB0aGlzIHNvZnR3YXJlLiBObyBoYXJkd2FyZSBwZXIKK3NlIGlzIGxpY2Vuc2VkIGhlcmV1bmRlci4KKworRElTQ0xBSU1FUi4gVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIAorQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQKK05PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQorUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SCitDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgCitFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIAorUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IAorT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIAorV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgCitPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIAorQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9saWJnY2MgYi9saWNlbnNlcy9saWJnY2MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTUyNGEzMQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL2xpYmdjYwpAQCAtMCwwICsxLDIzIEBACitHQ0MgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlcgordGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyCit2ZXJzaW9uLgorCitJbiBhZGRpdGlvbiB0byB0aGUgcGVybWlzc2lvbnMgaW4gdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB0aGUKK0ZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBnaXZlcyB5b3UgdW5saW1pdGVkIHBlcm1pc3Npb24gdG8gbGluayB0aGUKK2NvbXBpbGVkIHZlcnNpb24gb2YgdGhpcyBmaWxlIGludG8gY29tYmluYXRpb25zIHdpdGggb3RoZXIgcHJvZ3JhbXMsCithbmQgdG8gZGlzdHJpYnV0ZSB0aG9zZSBjb21iaW5hdGlvbnMgd2l0aG91dCBhbnkgcmVzdHJpY3Rpb24gY29taW5nCitmcm9tIHRoZSB1c2Ugb2YgdGhpcyBmaWxlLiAgKFRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHJlc3RyaWN0aW9ucworZG8gYXBwbHkgaW4gb3RoZXIgcmVzcGVjdHM7IGZvciBleGFtcGxlLCB0aGV5IGNvdmVyIG1vZGlmaWNhdGlvbiBvZgordGhlIGZpbGUsIGFuZCBkaXN0cmlidXRpb24gd2hlbiBub3QgbGlua2VkIGludG8gYSBjb21iaW5lCitleGVjdXRhYmxlLikKKworR0NDIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorZm9yIG1vcmUgZGV0YWlscy4KKworWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKK2Fsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORy4gIElmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUKK1NvZnR3YXJlIEZvdW5kYXRpb24sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEKKzAyMTEwLTEzMDEsIFVTQS4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL2xpYm1uZyBiL2xpY2Vuc2VzL2xpYm1uZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTBkNmI2Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvbGlibW5nCkBAIC0wLDAgKzEsNDcgQEAKKzxjb3B5cmlnaHQgbm90aWNlPgorCitGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgY29weXJpZ2h0IGFuZCBsaWNlbnNlLCAiQ29udHJpYnV0aW5nIEF1dGhvcnMiCitpcyBkZWZpbmVkIGFzIHRoZSBmb2xsb3dpbmcgc2V0IG9mIGluZGl2aWR1YWxzOgorCisgICA8YXV0aG9ycz4KKworVGhlIE1ORyBMaWJyYXJ5IGlzIHN1cHBsaWVkICJBUyBJUyIuICBUaGUgQ29udHJpYnV0aW5nIEF1dGhvcnMKK2Rpc2NsYWltIGFsbCB3YXJyYW50aWVzLCBleHByZXNzZWQgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCB3aXRob3V0CitsaW1pdGF0aW9uLCB0aGUgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIG9mIGZpdG5lc3MgZm9yIGFueQorcHVycG9zZS4gIFRoZSBDb250cmlidXRpbmcgQXV0aG9ycyBhc3N1bWUgbm8gbGlhYmlsaXR5IGZvciBkaXJlY3QsCitpbmRpcmVjdCwgaW5jaWRlbnRhbCwgc3BlY2lhbCwgZXhlbXBsYXJ5LCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsCit3aGljaCBtYXkgcmVzdWx0IGZyb20gdGhlIHVzZSBvZiB0aGUgTU5HIExpYnJhcnksIGV2ZW4gaWYgYWR2aXNlZCBvZgordGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlLgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCitzb3VyY2UgY29kZSwgb3IgcG9ydGlvbnMgaGVyZW9mLCBmb3IgYW55IHB1cnBvc2UsIHdpdGhvdXQgZmVlLCBzdWJqZWN0Cit0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvdXJjZSBjb2RlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOworICAgeW91IG11c3Qgbm90IGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4KKworMi4gQWx0ZXJlZCB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2ggYW5kIG11c3Qgbm90IGJlCisgICBtaXNyZXByZXNlbnRlZCBhcyBiZWluZyB0aGUgb3JpZ2luYWwgc291cmNlLgorCiszLiBUaGlzIENvcHlyaWdodCBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlCisgICBvciBhbHRlcmVkIHNvdXJjZSBkaXN0cmlidXRpb24uCisKK1RoZSBDb250cmlidXRpbmcgQXV0aG9ycyBzcGVjaWZpY2FsbHkgcGVybWl0LCB3aXRob3V0IGZlZSwgYW5kCitlbmNvdXJhZ2UgdGhlIHVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGFzIGEgY29tcG9uZW50IHRvIHN1cHBvcnRpbmcKK3RoZSBNTkcgYW5kIEpORyBmaWxlIGZvcm1hdCBpbiBjb21tZXJjaWFsIHByb2R1Y3RzLiAgSWYgeW91IHVzZSB0aGlzCitzb3VyY2UgY29kZSBpbiBhIHByb2R1Y3QsIGFja25vd2xlZGdtZW50IHdvdWxkIGJlIGhpZ2hseSBhcHByZWNpYXRlZC4KKworCitQYXJ0cyBvZiB0aGlzIHNvZnR3YXJlIGhhdmUgYmVlbiBhZGFwdGVkIGZyb20gdGhlIGxpYnBuZyBwYWNrYWdlLgorQWx0aG91Z2ggdGhpcyBsaWJyYXJ5IHN1cHBvcnRzIGFsbCBmZWF0dXJlcyBmcm9tIHRoZSBQTkcgc3BlY2lmaWNhdGlvbgorKGFzIE1ORyBkZXNjZW5kcyBmcm9tIGl0KSBpdCBkb2VzIG5vdCByZXF1aXJlIHRoZSBsaWJwbmcgcGFja2FnZS4KK0l0IGRvZXMgcmVxdWlyZSB0aGUgemxpYiBsaWJyYXJ5IGFuZCBvcHRpb25hbGx5IHRoZSBJSkcganBlZyBsaWJyYXJ5LAorYW5kL29yIHRoZSAibGl0dGxlLWNtcyIgbGlicmFyeSBieSBNYXJ0aSBNYXJpYSAoZGVwZW5kaW5nIG9uIHRoZQoraW5jbHVzaW9uIG9mIHN1cHBvcnQgZm9yIEpORyBhbmQgRnVsbC1Db2xvci1NYW5hZ2VtZW50IHJlc3BlY3RpdmVseS4KKworVGhpcyBsaWJyYXJ5J3MgZnVuY3Rpb24gaXMgcHJpbWFyaWx5IHRvIHJlYWQgYW5kIGRpc3BsYXkgTU5HCithbmltYXRpb25zLiBJdCBpcyBub3QgbWVhbnQgYXMgYSBmdWxsLWZlYXR1cmVkIGltYWdlLWVkaXRpbmcKK2NvbXBvbmVudCEgSXQgZG9lcyBob3dldmVyIG9mZmVyIGNyZWF0aW9uIGFuZCBlZGl0aW5nIGZ1bmN0aW9uYWxpdHkKK2F0IHRoZSBjaHVuayBsZXZlbC4KKyhmdXR1cmUgbW9kaWZpY2F0aW9ucyBtYXkgaW5jbHVkZSBzb21lIG1vcmUgc3VwcG9ydCBmb3IgY3JlYXRpb24KKyBhbmQgb3IgZWRpdGluZykKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL2xpYnBuZyBiL2xpY2Vuc2VzL2xpYnBuZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDRkZTNkCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvbGlicG5nCkBAIC0wLDAgKzEsOTAgQEAKK0NPUFlSSUdIVCBOT1RJQ0UsIERJU0NMQUlNRVIsIGFuZCBMSUNFTlNFOgorCitJZiB5b3UgbW9kaWZ5IGxpYnBuZyB5b3UgbWF5IGluc2VydCBhZGRpdGlvbmFsIG5vdGljZXMgaW1tZWRpYXRlbHkgZm9sbG93aW5nCit0aGlzIHNlbnRlbmNlLgorCitUaGlzIGNvZGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIGxpYnBuZyBsaWNlbnNlLgorCitsaWJwbmcgdmVyc2lvbnMgMS4yLjYsIEF1Z3VzdCAxNSwgMjAwNCwgdGhyb3VnaCAxLjUuMTIsIEp1bHkgMTEsIDIwMTIsIGFyZQorQ29weXJpZ2h0IChjKSAyMDA0LCAyMDA2LTIwMTIgR2xlbm4gUmFuZGVycy1QZWhyc29uLCBhbmQgYXJlCitkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHNhbWUgZGlzY2xhaW1lciBhbmQgbGljZW5zZSBhcyBsaWJwbmctMS4yLjUKK3dpdGggdGhlIGZvbGxvd2luZyBpbmRpdmlkdWFsIGFkZGVkIHRvIHRoZSBsaXN0IG9mIENvbnRyaWJ1dGluZyBBdXRob3JzOgorCisgICBDb3NtaW4gVHJ1dGEKKworbGlicG5nIHZlcnNpb25zIDEuMC43LCBKdWx5IDEsIDIwMDAsIHRocm91Z2ggMS4yLjUsIE9jdG9iZXIgMywgMjAwMiwgYXJlCitDb3B5cmlnaHQgKGMpIDIwMDAtMjAwMiBHbGVubiBSYW5kZXJzLVBlaHJzb24sIGFuZCBhcmUKK2Rpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgc2FtZSBkaXNjbGFpbWVyIGFuZCBsaWNlbnNlIGFzIGxpYnBuZy0xLjAuNgord2l0aCB0aGUgZm9sbG93aW5nIGluZGl2aWR1YWxzIGFkZGVkIHRvIHRoZSBsaXN0IG9mIENvbnRyaWJ1dGluZyBBdXRob3JzOgorCisgICBTaW1vbi1QaWVycmUgQ2FkaWV1eAorICAgRXJpYyBTLiBSYXltb25kCisgICBHaWxsZXMgVm9sbGFudAorCithbmQgd2l0aCB0aGUgZm9sbG93aW5nIGFkZGl0aW9ucyB0byB0aGUgZGlzY2xhaW1lcjoKKworICAgVGhlcmUgaXMgbm8gd2FycmFudHkgYWdhaW5zdCBpbnRlcmZlcmVuY2Ugd2l0aCB5b3VyIGVuam95bWVudCBvZiB0aGUKKyAgIGxpYnJhcnkgb3IgYWdhaW5zdCBpbmZyaW5nZW1lbnQuICBUaGVyZSBpcyBubyB3YXJyYW50eSB0aGF0IG91cgorICAgZWZmb3J0cyBvciB0aGUgbGlicmFyeSB3aWxsIGZ1bGZpbGwgYW55IG9mIHlvdXIgcGFydGljdWxhciBwdXJwb3NlcworICAgb3IgbmVlZHMuICBUaGlzIGxpYnJhcnkgaXMgcHJvdmlkZWQgd2l0aCBhbGwgZmF1bHRzLCBhbmQgdGhlIGVudGlyZQorICAgcmlzayBvZiBzYXRpc2ZhY3RvcnkgcXVhbGl0eSwgcGVyZm9ybWFuY2UsIGFjY3VyYWN5LCBhbmQgZWZmb3J0IGlzIHdpdGgKKyAgIHRoZSB1c2VyLgorCitsaWJwbmcgdmVyc2lvbnMgMC45NywgSmFudWFyeSAxOTk4LCB0aHJvdWdoIDEuMC42LCBNYXJjaCAyMCwgMjAwMCwgYXJlCitDb3B5cmlnaHQgKGMpIDE5OTgsIDE5OTksIDIwMDAgR2xlbm4gUmFuZGVycy1QZWhyc29uLCBhbmQgYXJlCitkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHNhbWUgZGlzY2xhaW1lciBhbmQgbGljZW5zZSBhcyBsaWJwbmctMC45NiwKK3dpdGggdGhlIGZvbGxvd2luZyBpbmRpdmlkdWFscyBhZGRlZCB0byB0aGUgbGlzdCBvZiBDb250cmlidXRpbmcgQXV0aG9yczoKKworICAgVG9tIExhbmUKKyAgIEdsZW5uIFJhbmRlcnMtUGVocnNvbgorICAgV2lsbGVtIHZhbiBTY2hhaWsKKworbGlicG5nIHZlcnNpb25zIDAuODksIEp1bmUgMTk5NiwgdGhyb3VnaCAwLjk2LCBNYXkgMTk5NywgYXJlCitDb3B5cmlnaHQgKGMpIDE5OTYsIDE5OTcgQW5kcmVhcyBEaWxnZXIKK0Rpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgc2FtZSBkaXNjbGFpbWVyIGFuZCBsaWNlbnNlIGFzIGxpYnBuZy0wLjg4LAord2l0aCB0aGUgZm9sbG93aW5nIGluZGl2aWR1YWxzIGFkZGVkIHRvIHRoZSBsaXN0IG9mIENvbnRyaWJ1dGluZyBBdXRob3JzOgorCisgICBKb2huIEJvd2xlcgorICAgS2V2aW4gQnJhY2V5CisgICBTYW0gQnVzaGVsbAorICAgTWFnbnVzIEhvbG1ncmVuCisgICBHcmVnIFJvZWxvZnMKKyAgIFRvbSBUYW5uZXIKKworbGlicG5nIHZlcnNpb25zIDAuNSwgTWF5IDE5OTUsIHRocm91Z2ggMC44OCwgSmFudWFyeSAxOTk2LCBhcmUKK0NvcHlyaWdodCAoYykgMTk5NSwgMTk5NiBHdXkgRXJpYyBTY2hhbG5hdCwgR3JvdXAgNDIsIEluYy4KKworRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGNvcHlyaWdodCBhbmQgbGljZW5zZSwgIkNvbnRyaWJ1dGluZyBBdXRob3JzIgoraXMgZGVmaW5lZCBhcyB0aGUgZm9sbG93aW5nIHNldCBvZiBpbmRpdmlkdWFsczoKKworICAgQW5kcmVhcyBEaWxnZXIKKyAgIERhdmUgTWFydGluZGFsZQorICAgR3V5IEVyaWMgU2NoYWxuYXQKKyAgIFBhdWwgU2NobWlkdAorICAgVGltIFdlZ25lcgorCitUaGUgUE5HIFJlZmVyZW5jZSBMaWJyYXJ5IGlzIHN1cHBsaWVkICJBUyBJUyIuICBUaGUgQ29udHJpYnV0aW5nIEF1dGhvcnMKK2FuZCBHcm91cCA0MiwgSW5jLiBkaXNjbGFpbSBhbGwgd2FycmFudGllcywgZXhwcmVzc2VkIG9yIGltcGxpZWQsCitpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgdGhlIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRhYmlsaXR5IGFuZCBvZgorZml0bmVzcyBmb3IgYW55IHB1cnBvc2UuICBUaGUgQ29udHJpYnV0aW5nIEF1dGhvcnMgYW5kIEdyb3VwIDQyLCBJbmMuCithc3N1bWUgbm8gbGlhYmlsaXR5IGZvciBkaXJlY3QsIGluZGlyZWN0LCBpbmNpZGVudGFsLCBzcGVjaWFsLCBleGVtcGxhcnksCitvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHdoaWNoIG1heSByZXN1bHQgZnJvbSB0aGUgdXNlIG9mIHRoZSBQTkcKK1JlZmVyZW5jZSBMaWJyYXJ5LCBldmVuIGlmIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlLgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCitzb3VyY2UgY29kZSwgb3IgcG9ydGlvbnMgaGVyZW9mLCBmb3IgYW55IHB1cnBvc2UsIHdpdGhvdXQgZmVlLCBzdWJqZWN0Cit0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworICAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc291cmNlIGNvZGUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQuCisKKyAgMi4gQWx0ZXJlZCB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2ggYW5kIG11c3Qgbm90CisgICAgIGJlIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb3VyY2UuCisKKyAgMy4gVGhpcyBDb3B5cmlnaHQgbm90aWNlIG1heSBub3QgYmUgcmVtb3ZlZCBvciBhbHRlcmVkIGZyb20KKyAgICAgYW55IHNvdXJjZSBvciBhbHRlcmVkIHNvdXJjZSBkaXN0cmlidXRpb24uCisKK1RoZSBDb250cmlidXRpbmcgQXV0aG9ycyBhbmQgR3JvdXAgNDIsIEluYy4gc3BlY2lmaWNhbGx5IHBlcm1pdCwgd2l0aG91dAorZmVlLCBhbmQgZW5jb3VyYWdlIHRoZSB1c2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBhcyBhIGNvbXBvbmVudCB0bworc3VwcG9ydGluZyB0aGUgUE5HIGZpbGUgZm9ybWF0IGluIGNvbW1lcmNpYWwgcHJvZHVjdHMuICBJZiB5b3UgdXNlIHRoaXMKK3NvdXJjZSBjb2RlIGluIGEgcHJvZHVjdCwgYWNrbm93bGVkZ21lbnQgaXMgbm90IHJlcXVpcmVkIGJ1dCB3b3VsZCBiZQorYXBwcmVjaWF0ZWQuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9saWJzdGRjKysgYi9saWNlbnNlcy9saWJzdGRjKysKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTg0Y2ExZAotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL2xpYnN0ZGMrKwpAQCAtMCwwICsxLDI1IEBACisvLyBUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgR05VIElTTyBDKysgTGlicmFyeS4gIFRoaXMgbGlicmFyeSBpcyBmcmVlCisvLyBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKKy8vIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisvLyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKKy8vIGFueSBsYXRlciB2ZXJzaW9uLgorCisvLyBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKy8vIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisvLyBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisvLyBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisvLyBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbG9uZworLy8gd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLiAgSWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorLy8gU29mdHdhcmUgRm91bmRhdGlvbiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLAorLy8gVVNBLgorCisvLyBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB5b3UgbWF5IHVzZSB0aGlzIGZpbGUgYXMgcGFydCBvZiBhIGZyZWUgc29mdHdhcmUKKy8vIGxpYnJhcnkgd2l0aG91dCByZXN0cmljdGlvbi4gIFNwZWNpZmljYWxseSwgaWYgb3RoZXIgZmlsZXMgaW5zdGFudGlhdGUKKy8vIHRlbXBsYXRlcyBvciB1c2UgbWFjcm9zIG9yIGlubGluZSBmdW5jdGlvbnMgZnJvbSB0aGlzIGZpbGUsIG9yIHlvdSBjb21waWxlCisvLyB0aGlzIGZpbGUgYW5kIGxpbmsgaXQgd2l0aCBvdGhlciBmaWxlcyB0byBwcm9kdWNlIGFuIGV4ZWN1dGFibGUsIHRoaXMKKy8vIGZpbGUgZG9lcyBub3QgYnkgaXRzZWxmIGNhdXNlIHRoZSByZXN1bHRpbmcgZXhlY3V0YWJsZSB0byBiZSBjb3ZlcmVkIGJ5CisvLyB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UuICBUaGlzIGV4Y2VwdGlvbiBkb2VzIG5vdCBob3dldmVyCisvLyBpbnZhbGlkYXRlIGFueSBvdGhlciByZWFzb25zIHdoeSB0aGUgZXhlY3V0YWJsZSBmaWxlIG1pZ2h0IGJlIGNvdmVyZWQgYnkKKy8vIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4KKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvbGlidGlmZiBiL2xpY2Vuc2VzL2xpYnRpZmYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYxNWUxYgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL2xpYnRpZmYKQEAgLTAsMCArMSwyMCBAQAorQ29weXJpZ2h0IChjKSA8eWVhcnM+IDxjb3B5cmlnaHQgaG9sZGVycz4KKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSwgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKK3Byb3ZpZGVkIHRoYXQgKGkpIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlcyBhbmQgdGhpcyBwZXJtaXNzaW9uCitub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlIGFuZCByZWxhdGVkIGRvY3VtZW50YXRpb24sCithbmQgKGlpKSB0aGUgbmFtZXMgb2YgPGNvcHlyaWdodCBob2xkZXJzPiBtYXkgbm90IGJlIHVzZWQgaW4gYW55CithZHZlcnRpc2luZyBvciBwdWJsaWNpdHkgcmVsYXRpbmcgdG8gdGhlIHNvZnR3YXJlIHdpdGhvdXQgdGhlIHNwZWNpZmljLAorcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIDxjb3B5cmlnaHQgaG9sZGVycz4uCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMtSVMiIEFORCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELAorRVhQUkVTUywgSU1QTElFRCBPUiBPVEhFUldJU0UsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIEFOWQorV0FSUkFOVFkgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCitJTiBOTyBFVkVOVCBTSEFMTCA8Y29weXJpZ2h0IGhvbGRlcnM+IEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsCitJTkNJREVOVEFMLCBJTkRJUkVDVCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIEtJTkQsIE9SIEFOWQorREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsCitXSEVUSEVSIE9SIE5PVCBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBEQU1BR0UsIEFORCBPTiBBTlkKK1RIRU9SWSBPRiBMSUFCSUxJVFksIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SCitQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvbHNvZiBiL2xpY2Vuc2VzL2xzb2YKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY4ODJiZgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL2xzb2YKQEAgLTAsMCArMSwyOCBAQAorZnRwOi8vbHNvZi5pdGFwLnB1cmR1ZS5lZHUvcHViL3Rvb2xzL3VuaXgvbHNvZi9GQVEjMS45CisKK0NvcHlyaWdodCAyMDAyIFB1cmR1ZSBSZXNlYXJjaCBGb3VuZGF0aW9uLCBXZXN0IExhZmF5ZXR0ZSwKK0luZGlhbmEgNDc5MDcuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitXcml0dGVuIGJ5IFZpY3RvciBBLiBBYmVsbAorCitUaGlzIHNvZnR3YXJlIGlzIG5vdCBzdWJqZWN0IHRvIGFueSBsaWNlbnNlIG9mIHRoZSBBbWVyaWNhbgorVGVsZXBob25lIGFuZCBUZWxlZ3JhcGggQ29tcGFueSBvciB0aGUgUmVnZW50cyBvZiB0aGUKK1VuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IKK2FueSBwdXJwb3NlIG9uIGFueSBjb21wdXRlciBzeXN0ZW0sIGFuZCB0byBhbHRlciBpdCBhbmQKK3JlZGlzdHJpYnV0ZSBpdCBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZworcmVzdHJpY3Rpb25zOgorCisxLiBOZWl0aGVyIHRoZSBhdXRob3JzIG5vciBQdXJkdWUgVW5pdmVyc2l0eSBhcmUgcmVzcG9uc2libGUKKyAgIGZvciBhbnkgY29uc2VxdWVuY2VzIG9mIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4KKworMi4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkLAorICAgZWl0aGVyIGJ5IGV4cGxpY2l0IGNsYWltIG9yIGJ5IG9taXNzaW9uLiAgQ3JlZGl0IHRvIHRoZQorICAgYXV0aG9ycyBhbmQgUHVyZHVlIFVuaXZlcnNpdHkgbXVzdCBhcHBlYXIgaW4gZG9jdW1lbnRhdGlvbgorICAgYW5kIHNvdXJjZXMuCisKKzMuIEFsdGVyZWQgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdAorICAgbm90IGJlIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4KKworNC4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9sdXJlIGIvbGljZW5zZXMvbHVyZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGM3YjBjCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvbHVyZQpAQCAtMCwwICsxLDI1IEBACitMdXJlIG9mIHRoZSBUZW1wdHJlc3MsIFBDIERPUyB2ZXJzaW9uICAgICAgICAgKEMpIFJldm9sdXRpb24gU29mdHdhcmUgTHRkIDE5OTItCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyAxKSBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhpcyBnYW1lIGZvciBmcmVlIG9uIGFueSBtZWRpdW0sIHByb3ZpZGVkIHRoaXMgbGljZW5zZSAKK2FuZCBhbGwgYXNzb2NpYXRlZCBjb3B5cmlnaHQgbm90aWNlcyBhbmQgZGlzY2xhaW1lcnMgYXJlIGxlZnQgaW50YWN0LgorCisgMikgWW91IG1heSBjaGFyZ2UgYSByZWFzb25hYmxlIGNvcHlpbmcgZmVlIGZvciB0aGlzIGFyY2hpdmUsIGFuZCBtYXkgZGlzdHJpYnV0ZQoraXQgaW4gYWdncmVnYXRlIGFzIHBhcnQgb2YgYSBsYXJnZXIgJiBwb3NzaWJseSBjb21tZXJjaWFsIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbgorKHN1Y2ggYXMgYSBMaW51eCBkaXN0cmlidXRpb24gb3IgbWFnYXppbmUgY292ZXJkaXNrKS4gWW91IG11c3QgcHJvdmlkZSBwcm9wZXIKK2F0dHJpYnV0aW9uIGFuZCBlbnN1cmUgdGhpcyBsaWNlbnNlIGFuZCBhbGwgYXNzb2NpYXRlZCBjb3B5cmlnaHQgbm90aWNlcywgYW5kCitkaXNjbGFpbWVycyBhcmUgbGVmdCBpbnRhY3QuCisKKyAzKSBZb3UgbWF5IG5vdCBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBnYW1lIGl0c2VsZi4gVGhpcyBpbmNsdWRlcyByZXNlbGxpbmcgdGhlCitnYW1lIGFzIGFuIGluZGl2aWR1YWwgaXRlbS4KKworIDQpIFlvdSBtYXkgbW9kaWZ5IHRoZSBnYW1lIGFzIHlvdSB3aXNoLiAgWW91IG1heSBhbHNvIGRpc3RyaWJ1dGUgbW9kaWZpZWQKK3ZlcnNpb25zIHVuZGVyIHRoZSB0ZXJtcyBzZXQgZm9ydGggaW4gdGhpcyBsaWNlbnNlLCBidXQgd2l0aCB0aGUgYWRkaXRpb25hbAorcmVxdWlyZW1lbnQgdGhhdCB0aGUgd29yayBpcyBtYXJrZWQgd2l0aCBhIHByb21pbmVudCBub3RpY2Ugd2hpY2ggc3RhdGVzIHRoYXQKK2l0IGlzIGEgbW9kaWZpZWQgdmVyc2lvbi4KKworIDUpIEFsbCBnYW1lIGNvbnRlbnQgaXMgKEMpIFJldm9sdXRpb24gU29mdHdhcmUgTHRkLgorCisgNikgVEhFIEdBTUVEQVRBIElOIFRISVMgQVJDSElWRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SCitJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORyBBTkQgTk9UIExJTUlURUQgVE8gQU5ZIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL21hYyBiL2xpY2Vuc2VzL21hYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMDk4YmRkCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvbWFjCkBAIC0wLDAgKzEsMzYgQEAKKyAgICAgICAgICAgICAgICAgIE1vbmtleSdzIEF1ZGlvIFNvdXJjZSBDb2RlIExpY2Vuc2UgQWdyZWVtZW50CisKKyAgIExpY2Vuc2UgQWdyZWVtZW50CisKKyAgIDEuIFRoZSBNb25rZXkncyBBdWRpbyBTREsgYW5kIHNvdXJjZSBjb2RlIGNhbiBiZSBmcmVlbHkgdXNlZCB0byBhZGQgQVBFCisgICBmb3JtYXQgcGxheWJhY2ssIGVuY29kaW5nLCBvciB0YWdnaW5nIHN1cHBvcnQgdG8gYW55IHByb2R1Y3QsIGZyZWUgb3IKKyAgIGNvbW1lcmNpYWwuICBVc2Ugb2YgdGhlIGNvZGUgZm9yIHByb3ByaWV0YXJ5IGVmZm9ydHMgdGhhdCBkb24ndCBzdXBwb3J0CisgICB0aGUgb2ZmaWNpYWwgQVBFIGZvcm1hdCByZXF1aXJlIHdyaXR0ZW4gY29uc2VudCBvZiB0aGUgYXV0aG9yLgorCisgICAyLiBNb25rZXkncyBBdWRpbyBzb3VyY2UgY2FuIGJlIGluY2x1ZGVkIGluIEdQTCBhbmQgb3Blbi1zb3VyY2Ugc29mdHdhcmUsCisgICBhbHRob3VnaCBNb25rZXkncyBBdWRpbyBpdHNlbGYgd2lsbCBub3QgYmUgc3ViamVjdGVkIHRvIGV4dGVybmFsIGxpY2Vuc2luZworICAgcmVxdWlyZW1lbnRzIG9yIG90aGVyIHZpcmFsIHNvdXJjZSByZXN0cmljdGlvbnMuCisKKyAgIDMuIENvZGUgY2hhbmdlcyBhbmQgaW1wcm92ZW1lbnRzIG11c3QgYmUgY29udHJpYnV0ZWQgYmFjayB0byB0aGUgTW9ua2V5J3MKKyAgIEF1ZGlvIHByb2plY3QgZnJlZSBmcm9tIHJlc3RyaWN0aW9ucyBvciByb3lhbHRpZXMgZm9yIHRoZSBzYWtlIG9mIHRoZQorICAgY29tbW9uIGdvb2QsIHVubGVzcyBleGVtcHRlZCBieSBleHByZXNzIHdyaXR0ZW4gY29uc2VudCBvZiB0aGUgYXV0aG9yLgorCisgICA0LiBBbnkgc291cmNlIGNvZGUsIGlkZWFzLCBvciBsaWJyYXJpZXMgdXNlZCBtdXN0IGJlIHBsYWlubHkgYWNrbm93bGVkZ2VkCisgICBpbiB0aGUgc29mdHdhcmUgdXNpbmcgdGhlIGNvZGUuCisKKyAgIDUuIEFsdGhvdWdoIHRoZSBzb2Z0d2FyZSBoYXMgYmVlbiB0ZXN0ZWQgdGhvcm91Z2hseSwgdGhlIGF1dGhvciBpcyBpbiBubworICAgd2F5IHJlc3BvbnNpYmxlIGZvciBkYW1hZ2VzIGR1ZSB0byBidWdzIG9yIG1pc3VzZS4KKworICAgNi4gSWYgeW91IGRvIG5vdCBjb21wbGV0ZWx5IGFncmVlIHdpdGggYWxsIG9mIHRoZSBwcmV2aW91cyBzdGlwdWxhdGlvbnMsCisgICB5b3UgbXVzdCBjZWFzZSB1c2luZyB0aGlzIHNvdXJjZSBjb2RlIGFuZCByZW1vdmUgaXQgZnJvbSB5b3VyIHN0b3JhZ2UKKyAgIGRldmljZS4KKworCisKKyAgIEFsbCByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGhlcmUgYXJlIHJlc2VydmVkIGJ5IE1hdHRoZXcgVC4gQXNobGFuZC4KKworCisKKyAtIEFsbCBtYXRlcmlhbHMgYW5kIHByb2dyYW1zIGNvcHlyaWdodGVkIChjKTIwMDAtMjAwNiBieSBNYXR0aGV3IFQuIEFzaGxhbmQgLQorCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSBBbGwgcmlnaHRzIHJlc2VydmVkLiAtCmRpZmYgLS1naXQgYS9saWNlbnNlcy9tYW1tb3RoIGIvbGljZW5zZXMvbWFtbW90aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2JhNDUzCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvbWFtbW90aApAQCAtMCwwICsxLDIwIEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExJQ0VOU0UgQUdSRUVNRU5UCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1RoZSAgTUFNTU9USCAgdXNlciAgYXV0b21hdGljYWxseSAgYWNjZXB0cyAgdGhlIGZvbGxvd2luZyB0ZXJtcyB3aGVuIHVzaW5nIHRoZSBwcm9ncmFtOgorCisoMSkgIFJlcG9ydCBlcnJvcnMsICBidWdzICBvciBtb2RpZmljYXJpb25zICBpbiB0aGUgcHJvZ3JhbSB0byBtYWluIGF1dGhvciwgQW5nZWwgUiBPcnRpeiwgZS1tYWlsOiBhcm9AY2JtLnVhbS5lcworCisoMikgIERvICBub3QgIHJlZGlzdHJpYnV0ZSAgdGhlICBwcm9ncmFtICBhbmQvb3IgaXRzIG1vZGlmaWNhdGlvbnMuIEludGVyZXN0ZWQgIHVzZXJzICBzaG91bGQgIGNvbnRhY3QgIGRpcmVjdGx5IHRvIHRoZSBhdXRob3IgaW4gb3JkZXIgdG8gb2J0YWluIGEgY29weSBvZiB0aGUgcHJvZ3JhbS4KKworKDMpICBUaGlzIGxpY2Vuc2UgaXMgZm9yICBzY2llbnRpZmljIG5vbi1wcm9maXQgYW5kICBub24tY29tbWVyY2lhbCB1c2Ugb25seS4gIEFueSBvdGhlciAgdXNlIG9mIHRoaXMgc29mdHdhcmUgZm9yIG90aGVyIHB1cnBvc2VzLCBhbG9uZSBvciAgaW50ZWdyYXRlZCAgaW50byBvdGhlciBzb2Z0d2FyZSwgIHJlcXVpcmVzIHRoZSBwcmlvciBjb25zZW50IG9mIHRoZSBhdXRob3IuCisKKyg0KSAgVGhlIGF1dGhvcnMgZG8gbm90IGFzc3VtZSBhbnkgcmVzcG9uc2liaWxpdHkgZm9yICB0aGUgbGljZW5zZWQgc29mdHdhcmUgYW5kIGl0cyB1c2UuIFRoZSBhdXRob3Igd2lsbCBub3QgYXNzdW1lIGFueSBsaWFiaWxpdHkKK2ZvciAgZGFtYWdlcyAgb2NjdXJyaW5nICB0aHJvdWdoICB0aGUgIHVzZSAgIG9mICB0aGUgIGxpY2Vuc2VkIHNvZnR3YXJlOyAgZG9lcyBub3QgZ3VhcmFudGVlIHRoZSAgc3VpdGFiaWxpdHkgb2YgdGhlIGxpY2Vuc2VkIHNvZnR3YXJlIGZvciAgYW55ICBhcHBsaWNhdGlvbjsgIGFuZCBkb2VzIG5vdCBwcm92aWRlIHN1cHBvcnQuCisKKyg1KSAgQWNrbm93bGVkZ2UgdGhlIHVzZSBvZiB0aGUgcHJvZ3JhbSBpbiBzY2llbnRpZmljIHB1YmxpY2F0aW9uczoKKworICAgICBPcnRpeiBBUiwgU3RyYXVzcyBDRSwgT2xtZWEgTy4KKyAgICAgTUFNTU9USCAoTWF0Y2hpbmcgbW9sZWN1bGFyIG1vZGVscyBvYnRhaW5lZCBmcm9tIHRoZW9yeSkKKyAgICAgQW4gYXV0b21hdGVkIG1ldGhvZCBmb3IgbW9kZWwgY29tcGFyaXNvbi4KKyAgICAgUHJvdGVpbiBTY2kuIDIwMDIgTm92OzExKDExKToyNjA2LTIxLgkJCmRpZmYgLS1naXQgYS9saWNlbnNlcy9tYW4tcGFnZXMgYi9saWNlbnNlcy9tYW4tcGFnZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA3OTRjYgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL21hbi1wYWdlcwpAQCAtMCwwICsxLDIxIEBACitDb3B5cmlnaHQgKGMpIDx5ZWFyPiA8Y29weXJpZ2h0IGhvbGRlcj4KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIG1ha2UgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoaXMKK21hbnVhbCBwcm92aWRlZCB0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcmUKK3ByZXNlcnZlZCBvbiBhbGwgY29waWVzLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGlzCittYW51YWwgdW5kZXIgdGhlIGNvbmRpdGlvbnMgZm9yIHZlcmJhdGltIGNvcHlpbmcsIHByb3ZpZGVkIHRoYXQgdGhlCitlbnRpcmUgcmVzdWx0aW5nIGRlcml2ZWQgd29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgYQorcGVybWlzc2lvbiBub3RpY2UgaWRlbnRpY2FsIHRvIHRoaXMgb25lLgorCitTaW5jZSB0aGUgTGludXgga2VybmVsIGFuZCBsaWJyYXJpZXMgYXJlIGNvbnN0YW50bHkgY2hhbmdpbmcsIHRoaXMKK21hbnVhbCBwYWdlIG1heSBiZSBpbmNvcnJlY3Qgb3Igb3V0LW9mLWRhdGUuICBUaGUgYXV0aG9yKHMpIGFzc3VtZSBubworcmVzcG9uc2liaWxpdHkgZm9yIGVycm9ycyBvciBvbWlzc2lvbnMsIG9yIGZvciBkYW1hZ2VzIHJlc3VsdGluZyBmcm9tCit0aGUgdXNlIG9mIHRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaGVyZWluLiAgVGhlIGF1dGhvcihzKSBtYXkgbm90CitoYXZlIHRha2VuIHRoZSBzYW1lIGxldmVsIG9mIGNhcmUgaW4gdGhlIHByb2R1Y3Rpb24gb2YgdGhpcyBtYW51YWwsCit3aGljaCBpcyBsaWNlbnNlZCBmcmVlIG9mIGNoYXJnZSwgYXMgdGhleSBtaWdodCB3aGVuIHdvcmtpbmcKK3Byb2Zlc3Npb25hbGx5LgorCitGb3JtYXR0ZWQgb3IgcHJvY2Vzc2VkIHZlcnNpb25zIG9mIHRoaXMgbWFudWFsLCBpZiB1bmFjY29tcGFuaWVkIGJ5Cit0aGUgc291cmNlLCBtdXN0IGFja25vd2xlZGdlIHRoZSBjb3B5cmlnaHQgYW5kIGF1dGhvcnMgb2YgdGhpcyB3b3JrLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvbWFuLXBhZ2VzLXBvc2l4IGIvbGljZW5zZXMvbWFuLXBhZ2VzLXBvc2l4Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4MzBkYjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9tYW4tcGFnZXMtcG9zaXgKQEAgLTAsMCArMSwyNSBAQAorVGhlIEluc3RpdHV0ZSBvZiBFbGVjdHJpY2FsIGFuZCBFbGVjdHJvbmljcyBFbmdpbmVlcnMgKElFRUUpIGFuZAorVGhlIE9wZW4gR3JvdXAsIGhhdmUgZ2l2ZW4gdXMgcGVybWlzc2lvbiB0byByZXByaW50IHBvcnRpb25zIG9mCit0aGVpciBkb2N1bWVudGF0aW9uLgorCitJbiB0aGUgZm9sbG93aW5nIHN0YXRlbWVudCwgdGhlIHBocmFzZSBgYHRoaXMgdGV4dCcnIHJlZmVycyB0bworcG9ydGlvbnMgb2YgdGhlIHN5c3RlbSBkb2N1bWVudGF0aW9uLgorCitQb3J0aW9ucyBvZiB0aGlzIHRleHQgYXJlIHJlcHJpbnRlZCBhbmQgcmVwcm9kdWNlZCBpbiBlbGVjdHJvbmljIGZvcm0KK2luIHRoZSBsaW51eC1tYW5wYWdlcyBwYWNrYWdlLCBmcm9tIElFRUUgU3RkIDEwMDMuMSAoVE0pLCAyMDAzIEVkaXRpb24sCitTdGFuZGFyZCBmb3IgSW5mb3JtYXRpb24gVGVjaG5vbG9neSAtLSBQb3J0YWJsZSBPcGVyYXRpbmcgU3lzdGVtCitJbnRlcmZhY2UgKFBPU0lYIChSKSksIFRoZSBPcGVuIEdyb3VwIEJhc2UgU3BlY2lmaWNhdGlvbnMgSXNzdWUgNiwKK0NvcHlyaWdodCAoQykgMjAwMS0yMDAzIGJ5IHRoZSBJbnN0aXR1dGUgb2YgRWxlY3RyaWNhbCBhbmQgRWxlY3Ryb25pY3MKK0VuZ2luZWVycywgSW5jIGFuZCBUaGUgT3BlbiBHcm91cC4gIEluIHRoZSBldmVudCBvZiBhbnkgZGlzY3JlcGFuY3kKK2JldHdlZW4gdGhlc2UgdmVyc2lvbnMgYW5kIHRoZSBvcmlnaW5hbCBJRUVFIGFuZCBUaGUgT3BlbiBHcm91cAorU3RhbmRhcmQsIHRoZSBvcmlnaW5hbCBJRUVFIGFuZCBUaGUgT3BlbiBHcm91cCBTdGFuZGFyZCBpcyB0aGUgcmVmZXJlZQorZG9jdW1lbnQuICBUaGUgb3JpZ2luYWwgU3RhbmRhcmQgY2FuIGJlIG9idGFpbmVkIG9ubGluZSBhdAoraHR0cDovL3d3dy5vcGVuZ3JvdXAub3JnL3VuaXgvb25saW5lLmh0bWwgLgorCitUaGlzIG5vdGljZSBzaGFsbCBhcHBlYXIgb24gYW55IHByb2R1Y3QgY29udGFpbmluZyB0aGlzIG1hdGVyaWFsLgorCitSZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIG1hdGVyaWFsIGlzIHBlcm1pdHRlZCBzbyBsb25nIGFzIHRoaXMgbm90aWNlIGFuZAordGhlIGNvcnJlc3BvbmRpbmcgbm90aWNlcyB3aXRoaW4gZWFjaCBQT1NJWCBtYW51YWwgcGFnZSBhcmUgcmV0YWluZWQgb24KK2FueSBkaXN0cmlidXRpb24sIGFuZCB0aGUgbnJvZmYgc291cmNlIGlzIGluY2x1ZGVkLiAgTW9kaWZpY2F0aW9ucyB0bwordGhlIHRleHQgYXJlIHBlcm1pdHRlZCBzbyBsb25nIGFzIGFueSBjb25mbGljdHMgd2l0aCB0aGUgc3RhbmRhcmQKK2FyZSBjbGVhcmx5IG1hcmtlZCBhcyBzdWNoIGluIHRoZSB0ZXh0LgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvbWFwbSBiL2xpY2Vuc2VzL21hcG0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU2YTZiOAotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL21hcG0KQEAgLTAsMCArMSwxNSBAQAorKiBDb3B5cmlnaHQgKEMpIDE5OTkgLSAyMDA0ICAgTWljaGFlbCBDLiBSaW5nCisqCisqIFRoaXMgc29mdHdhcmUgaXMgRnJlZXdhcmUuCisqCisqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKyogZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwKKyogcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcyBhbmQKKyogdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIKKyogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLgorCisqIFBlcm1pc3Npb24gdG8gbW9kaWZ5IHRoZSBzb2Z0d2FyZSBpcyBncmFudGVkLCBidXQgbm90IHRoZSByaWdodCB0bworKiBkaXN0cmlidXRlIHRoZSBtb2RpZmllZCBjb2RlLiAgTW9kaWZpY2F0aW9ucyBhcmUgdG8gYmUgZGlzdHJpYnV0ZWQKKyogYXMgcGF0Y2hlcyB0byByZWxlYXNlZCB2ZXJzaW9uLgorKgorKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9tYXJnaW5hbGhhY2tzIGIvbGljZW5zZXMvbWFyZ2luYWxoYWNrcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNDE2NzZjCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvbWFyZ2luYWxoYWNrcwpAQCAtMCwwICsxLDQxIEBACitMaWNlbnNlIGZvciBwcm9ncmFtcyBhdCBEYXZlU291cmNlIE1hcmdpbmFsIEhhY2tzOgoraHR0cDovL01hcmdpbmFsSGFja3MuY29tLworCitEaXNjbGFpbWVyOgorICAgIFRoZXNlIHByb2dyYW1zIGFyZW4ndCBwYWNrYWdlZCBpbiBhbnkgc29ydCBvZiB1c2VyLWZyaWVuZGx5IGZvcm1hdC4KKyAgICBXaGlsZSBtb3N0IG9mIGl0IGRvZXMgc29tZXRoaW5nIHRoYXQgSSBjb25zaWRlciB1c2VmdWwsIHBsZW50eSBvZiBpdCBpcyBvbGQgYW5kIHdyaXR0ZW4gcG9vcmx5IGFuZCAKK2xhY2tpbmcgZG9jdW1lbnRhdGlvbi4KKyAgICBMb3RzIG9mIHRoZSBwcm9ncmFtcyBoZXJlIGRvIG5vdCBmaXQgbXkgZGVmaW5pdGlvbiBvZiBUUlcuCisgICAgSWYgeW91J3JlIGxvb2tpbmcgdG8gd3JpdGUgYSBzY3JpcHQgbGlrZSBvbmUgb2YgdGhlc2UsIHllYS4KKyAgICBJZiB5b3UgZG9uJ3QgcHJvZ3JhbSwgdG91Z2ggbm9vZ2llcyBmb3IgeW91LgorICAgIE1ha2UgeW91ciBicm93c2VyIG5pY2UgYW5kIHdpZGUgdG8gbG9vayBhdCB0aGUgaW5kZXgsIG9yIHN1ZmZlciBhbiB1bnJlYWRhYmxlIHRhYmxlLgorCisgICAgSSByZWNvZ25pemUgdGhhdCB0aGlzIGxpY2Vuc2UgaXMgbm90IE9wZW5Tb3VyY2UsIHRoaXMgaXMgcXVpdGUgZGVsaWJlcmF0ZQorCitOb24tV2FycmFudHk6CisgICAgVGhlc2UgcHJvZ3JhbXMgY29tZSB3aXRoIGFic29sdXRlbHkgbm8gd2FycmFudHkuCisgICAgVGhlICdSYXRpbmcnIGFuZCAnV29ya3MgKFkvTiknIGNvbHVtbnMgaW4gdGhlIHNvZnR3YXJlIGluZGV4IGFyZSBubyBpbmRpY2F0aW9uIG9mIHRoZSBxdWFsaXR5IG9yIAorYWJpbGl0eSBvZiB0aGUgcHJvZ3JhbXMuCisgICAgVXNlIGF0IHlvdXIgb3duIHJpc2shCisKK0xpY2Vuc2UgZm9yIHVzZToKKyAgICBUaGUgcHJvZ3JhbXMgbWF5IGJlIHVzZWQgYW5kIGRpc3RyaWJ1dGVkICh3aXRoIHRoaXMgbGljZW5zZSkgZm9yIGZyZWUuCisgICAgVGhlIHByb2dyYW1zIG1heSBiZSBtb2RpZmllZCBhcyBsb25nIGFzIHRoZXkgcmV0YWluIHRoZSBvcmlnaW5hbCBsaWNlbnNlIGFuZCBhdXRob3IsIGNvcHlyaWdodCAKK2luZm9ybWF0aW9uLgorICAgIElmIHlvdSBtb2RpZnkgYW55IG9mIHRoZXNlIHByb2dyYW1zLCBwbGVhc2UgZS1tYWlsIHBhdGNoZXMgdG8gdGhlIHRoZSBhdXRob3IuCisgICAgKElmIHlvdSB0aGluayB0aGUgcGF0Y2ggaXNuJ3Qgb2YgZ2VuZXJhbCB1c2UsIHlvdSBjYW4ganVzdCBlbWFpbCBtZSBhYm91dCBpdCBmaXJzdCB0byBjaGVjaykKKyAgICBOb25lIG9mIHRoZSBwcm9ncmFtcyBjYW4gYmUgc29sZCBvciBpbmNsdWRlZCBpbiBhIHByb2R1Y3QgdGhhdCBpcyBzb2xkIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzb24gCitmcm9tIHRoZSBhdXRob3IuCisKK0NvcHlyaWdodDoKKyAgICBBbGwgdGhlc2UgcHJvZ3JhbXMgYXJlIGNvcHlyaWdodCBEYXZpZCBManVuZyBNYWRpc29uCisKK1doeToKKyAgICBJJ3ZlIG1hZGUgdGhpcyBzb2Z0d2FyZSBmcmVlbHkgYXZhaWxhYmxlIGZvciB0aGUgZm9sbG93aW5nIHJlYXNvbnM6CisKKyAgICAgICAxLiBJIGxpa2UgdG8gdGhpbmsgdGhhdCBJIHdyaXRlIHVzZWZ1bCBzb2Z0d2FyZSwgc28gSSB3YW50IG90aGVyIHBlb3BsZSB0byB1c2UgaXQuCisgICAgICAgMi4gSSBmZWx0IGxpa2UgaGVscGluZyBvdXQgYSBiaXQuIFRoaXMgaXMgbm90IGEgY29tbW9uIHRoaW5nIGZvciBtZSwgc28gZW5qb3kgaXQuCisgICAgICAgMy4gSSB1c2UgZnJlZSBzb2Z0d2FyZSwgYW5kIHdhbnRlZCB0byBnaXZlIHNvbWV0aGluZyBiYWNrLgorICAgICAgIDQuIEJ1dCBpZiB5b3Ugd2FudCB0byBoZWxwLCB5b3UgY2FuIHNlbmQgbW9uZXkgCisKKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvbWF0cGxvdGxpYiBiL2xpY2Vuc2VzL21hdHBsb3RsaWIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFhY2I2ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL21hdHBsb3RsaWIKQEAgLTAsMCArMSw0OSBAQAorTGljZW5zZSBhZ3JlZW1lbnQgZm9yIG1hdHBsb3RsaWIgPFZFUlNJT04+Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKzEuIFRoaXMgTElDRU5TRSBBR1JFRU1FTlQgaXMgYmV0d2VlbiBKb2huIEQuIEh1bnRlciAoIkpESCIpLCBhbmQgdGhlCitJbmRpdmlkdWFsIG9yIE9yZ2FuaXphdGlvbiAoIkxpY2Vuc2VlIikgYWNjZXNzaW5nIGFuZCBvdGhlcndpc2UgdXNpbmcKK21hdHBsb3RsaWIgc29mdHdhcmUgaW4gc291cmNlIG9yIGJpbmFyeSBmb3JtIGFuZCBpdHMgYXNzb2NpYXRlZAorZG9jdW1lbnRhdGlvbi4KKworMi4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudCwgSkRICitoZXJlYnkgZ3JhbnRzIExpY2Vuc2VlIGEgbm9uZXhjbHVzaXZlLCByb3lhbHR5LWZyZWUsIHdvcmxkLXdpZGUgbGljZW5zZQordG8gcmVwcm9kdWNlLCBhbmFseXplLCB0ZXN0LCBwZXJmb3JtIGFuZC9vciBkaXNwbGF5IHB1YmxpY2x5LCBwcmVwYXJlCitkZXJpdmF0aXZlIHdvcmtzLCBkaXN0cmlidXRlLCBhbmQgb3RoZXJ3aXNlIHVzZSBtYXRwbG90bGliIDxWRVJTSU9OPgorYWxvbmUgb3IgaW4gYW55IGRlcml2YXRpdmUgdmVyc2lvbiwgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgSkRIJ3MKK0xpY2Vuc2UgQWdyZWVtZW50IGFuZCBKREgncyBub3RpY2Ugb2YgY29weXJpZ2h0LCBpLmUuLCAiQ29weXJpZ2h0IChjKQorPFlFQVJTPiBKb2huIEQuIEh1bnRlcjsgQWxsIFJpZ2h0cyBSZXNlcnZlZCIgYXJlIHJldGFpbmVkIGluCittYXRwbG90bGliIDxWRVJTSU9OPiBhbG9uZSBvciBpbiBhbnkgZGVyaXZhdGl2ZSB2ZXJzaW9uIHByZXBhcmVkIGJ5CitMaWNlbnNlZS4KKworMy4gSW4gdGhlIGV2ZW50IExpY2Vuc2VlIHByZXBhcmVzIGEgZGVyaXZhdGl2ZSB3b3JrIHRoYXQgaXMgYmFzZWQgb24gb3IKK2luY29ycG9yYXRlcyBtYXRwbG90bGliIDxWRVJTSU9OPiBvciBhbnkgcGFydCB0aGVyZW9mLCBhbmQgd2FudHMgdG8KK21ha2UgdGhlIGRlcml2YXRpdmUgd29yayBhdmFpbGFibGUgdG8gb3RoZXJzIGFzIHByb3ZpZGVkIGhlcmVpbiwgdGhlbgorTGljZW5zZWUgaGVyZWJ5IGFncmVlcyB0byBpbmNsdWRlIGluIGFueSBzdWNoIHdvcmsgYSBicmllZiBzdW1tYXJ5IG9mCit0aGUgY2hhbmdlcyBtYWRlIHRvIG1hdHBsb3RsaWIgPFZFUlNJT04+LgorCis0LiBKREggaXMgbWFraW5nIG1hdHBsb3RsaWIgPFZFUlNJT04+IGF2YWlsYWJsZSB0byBMaWNlbnNlZSBvbiBhbiAiQVMKK0lTIiBiYXNpcy4gIEpESCBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUywgRVhQUkVTUyBPUgorSU1QTElFRC4gIEJZIFdBWSBPRiBFWEFNUExFLCBCVVQgTk9UIExJTUlUQVRJT04sIEpESCBNQUtFUyBOTyBBTkQKK0RJU0NMQUlNUyBBTlkgUkVQUkVTRU5UQVRJT04gT1IgV0FSUkFOVFkgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MKK0ZPUiBBTlkgUEFSVElDVUxBUiBQVVJQT1NFIE9SIFRIQVQgVEhFIFVTRSBPRiBNQVRQTE9UTElCIDxWRVJTSU9OPgorV0lMTCBOT1QgSU5GUklOR0UgQU5ZIFRISVJEIFBBUlRZIFJJR0hUUy4KKworNS4gSkRIIFNIQUxMIE5PVCBCRSBMSUFCTEUgVE8gTElDRU5TRUUgT1IgQU5ZIE9USEVSIFVTRVJTIE9GIE1BVFBMT1RMSUIKKzxWRVJTSU9OPiBGT1IgQU5ZIElOQ0lERU5UQUwsIFNQRUNJQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUgorTE9TUyBBUyBBIFJFU1VMVCBPRiBNT0RJRllJTkcsIERJU1RSSUJVVElORywgT1IgT1RIRVJXSVNFIFVTSU5HCitNQVRQTE9UTElCIDxWRVJTSU9OPiwgT1IgQU5ZIERFUklWQVRJVkUgVEhFUkVPRiwgRVZFTiBJRiBBRFZJU0VEIE9GCitUSEUgUE9TU0lCSUxJVFkgVEhFUkVPRi4KKworNi4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCB3aWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHVwb24gYSBtYXRlcmlhbAorYnJlYWNoIG9mIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4KKworNy4gTm90aGluZyBpbiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IHNoYWxsIGJlIGRlZW1lZCB0byBjcmVhdGUgYW55CityZWxhdGlvbnNoaXAgb2YgYWdlbmN5LCBwYXJ0bmVyc2hpcCwgb3Igam9pbnQgdmVudHVyZSBiZXR3ZWVuIEpESCBhbmQKK0xpY2Vuc2VlLiAgVGhpcyBMaWNlbnNlIEFncmVlbWVudCBkb2VzIG5vdCBncmFudCBwZXJtaXNzaW9uIHRvIHVzZSBKREgKK3RyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZSBpbiBhIHRyYWRlbWFyayBzZW5zZSB0byBlbmRvcnNlIG9yIHByb21vdGUKK3Byb2R1Y3RzIG9yIHNlcnZpY2VzIG9mIExpY2Vuc2VlLCBvciBhbnkgdGhpcmQgcGFydHkuCisKKzguIEJ5IGNvcHlpbmcsIGluc3RhbGxpbmcgb3Igb3RoZXJ3aXNlIHVzaW5nIG1hdHBsb3RsaWIgPFZFUlNJT04+LAorTGljZW5zZWUgYWdyZWVzIHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UKK0FncmVlbWVudC4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL21hdWkgYi9saWNlbnNlcy9tYXVpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0OGJmN2IKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9tYXVpCkBAIC0wLDAgKzEsMTU1IEBACitNb2FiIFNjaGVkdWxpbmcgU3lzdGVtIC0gRW5kIFVzZXIgT3BlbiBTb3VyY2UgTGljZW5zZQorCitUaGlzIHNvZnR3YXJlIGlzIGJhc2VkIG9uIHRoZSBNb2FiIFNjaGVkdWxpbmcgU3lzdGVtIHdoaWNoIHdhcyBjcmVhdGVkIGJ5IAorQ2x1c3RlciBSZXNvdXJjZXMsIEluYy4gIAorCitDb3B5cmlnaHQgKEMpIDE5OTktMjAwNSBDbHVzdGVyIFJlc291cmNlcywgSW5jLiwgYWxsIHJpZ2h0cyByZXNlcnZlZC4KKworTW9hYiBTY2hlZHVsaW5nIFN5c3RlbSBpcyBhIHRyYWRlbWFyayBvZiBDbHVzdGVyIFJlc291cmNlcywgSW5jLgorCitUaGlzIFNPRlRXQVJFIGlzIGJvdW5kIGJ5IGFuICdFbmQgVXNlciBPcGVuIFNvdXJjZScgTElDRU5TRSBmcm9tIENsdXN0ZXIKK1Jlc291cmNlcyBJbmMuICBUaGUgY29uZGl0aW9ucyBvZiB0aGUgJ0VuZCBVc2VyIE9wZW4gU291cmNlJyBMSUNFTlNFIGluY2x1ZGUsCitidXQgYXJlIG5vdCBsaW1pdGVkIHRvIHRoZSBjb25kaXRpb25zIGRlc2NyaWJlZCBiZWxvdy4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEIEFTIElTLCBBTkQgQ0xVU1RFUiBSRVNPVVJDRVMsIElOQy4gKENSSSkgQU5EIEFMTCAKK0NPTlRSSUJVVElORyBQQVJUSUVTIERJU0NMQUlNIEFMTCBXQVJSQU5USUVTIFJFTEFUSU5HIFRPIFRIRSBTT0ZUV0FSRSwgCitXSEVUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIEFOWSBJTVBMSUVEIAorV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgTkVJVEhFUgorQ1JJIE5PUiBBTllPTkUgSU5WT0xWRUQgSU4gVEhFIENSRUFUSU9OLCBQUk9EVUNUSU9OLCBPUiBERUxJVkVSWSBPRiBUSEUgCitTT0ZUV0FSRSBTSEFMTCBCRSBMSUFCTEUgRk9SIEFOWSBJTkRJUkVDVCwgQ09OU0VRVUVOVElBTCwgT1IgSU5DSURFTlRBTCAKK0RBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBTT0ZUV0FSRSBFVkVOIElGIENSSSAKK0hBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUyBPUiBDTEFJTVMuICBJTiBOTyBFVkVOVCAKK1NIQUxMIENSSSdTIExJQUJJTElUWSBGT1IgQU5ZIERBTUFHRVMgRVhDRUVEIFRIRSBDT05TSURFUkFUSU9OIFBBSUQgRk9SIFRIRSAKK0xJQ0VOU0UgVE8gVVNFIFRIRSBTT0ZUV0FSRSwgUkVHQVJETEVTUyBPRiBUSEUgRk9STSBPRiBDTEFJTS4gIFRIRSBQRVJTT04gT1IKK0VOVElUWSBVU0lORyBUSEUgU09GVFdBUkUgQkVBUlMgQUxMIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIAorT0YgVEhFIFNPRlRXQVJFLgorCitCeSBpbnN0YWxsaW5nIG9yIHVzaW5nIHRoaXMgU09GVFdBUkUgeW91IGFyZSBhY2NlcHRpbmcgYSBub24tZXhjbHVzaXZlICdFbmQKK1VzZXIgT3BlbiBTb3VyY2UnIExJQ0VOU0UgZnJvbSBDbHVzdGVyIFJlc291cmNlcyBJbmMuIGFuZCBhcmUgYm91bmQgdG8gYWJpZGUgYnkgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisxLiAgSW5jbHVzaW9uIG9mIE5vdGljZSBhbmQgRGlzY2xhaW1lcgorCisgIEFsbCBjb3BpZXMgb2YgdGhlIFNPRlRXQVJFLCB3aGV0aGVyIG9yIG5vdCBmb3IgcmVkaXN0cmlidXRpb24gYW5kIHdoZXRoZXIgCitvciBub3QgaW4gc291cmNlIGNvZGUgb3IgaW4gYmluYXJ5IGZvcm0gbXVzdCBpbmNsdWRlIGEgY29uc3BpY3VvdXMgYW5kIAorYXBwcm9wcmlhdGUgcHVibGljYXRpb24gb2YgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIuCisKKzIuIFVzYWdlCisKKyAgU291cmNlIGFuZC9vciBiaW5hcnkgZm9ybXMgb2YgdGhpcyBTT0ZUV0FSRSBtYXkgYmUgdXNlZCBieSBhbnkgJ0VuZCBVc2VyJworb3JnYW5pemF0aW9uIHB1cnN1YW50IHRvIHRoZSBjb25kaXRpb25zIG9mIHRoaXMgYW5kIG90aGVyIGFzc29jaWF0ZWQgTElDRU5TRVMKK2F0IG5vIGNoYXJnZSBhbmQgZm9yIGFuIHVubGltaXRlZCBwZXJpb2Qgb2YgdGltZS4gIEFuICdFbmQgVXNlcicgb3JnYW5pemF0aW9uCitpcyBkZWZpbmVkIGFzIGFuIG9yZ2FuaXphdGlvbiB0aGF0IGlzIHVzaW5nIHRoaXMgU09GVFdBUkUgb24gdGhlaXIgb3duIAorc3lzdGVtcyBhbmQgaXMgbm90IGNvbW1lcmNpYWxseSByZWRpc3RyaWJ1dGluZywgbW9kaWZ5aW5nLCBzdXBwb3J0aW5nLCBvciAKK3Byb3ZpZGluZyBvdGhlciBzZXJ2aWNlcyBzcGVjaWZpYyB0byB0aGlzIFNPRlRXQVJFIHRvIG90aGVyIG9yZ2FuaXphdGlvbnMgCitmb3IgcHJvZml0LgorCiszLiAgTW9kaWZpY2F0aW9ucworCisgIFNPRlRXQVJFIG1heSBiZSBmcmVlbHkgbW9kaWZpZWQgYnkgdGhlICdFbmQgVXNlcicgYXMgbmVjZXNzYXJ5IHRvIG1lZXQgdGhlCituZWVkcyBvZiB0aGUgJ0VuZCBVc2VyJyBMSUNFTlNFRSdTIHN5c3RlbS4gICdFbmQgVXNlcicgbWF5IHNvbGljaXQgdGhlCitzZXJ2aWNlcyBvZiBDbHVzdGVyIFJlc291cmNlcyBJbmMuIG9yICdBdXRob3JpemVkIERpc3RyaWJ1dGlvbiBhbmQgU2VydmljZXMKK1BhcnRuZXJzJyBvZiBDbHVzdGVyIFJlc291cmNlcyBJbmMuIHRoYXQgaGF2ZSByZWNlaXZlZCBleHByZXNzIHByaW9yIHdyaXR0ZW4KK2F1dGhvcml6YXRpb24gdG8gcmVkaXN0cmlidXRlLCBtb2RpZnkgb3IgcHJvdmlkZSBzZXJ2aWNlcyBmb3IgU09GVFdBUkUuCitBdmFpbGFibGUgc2VydmljZXMgaW5jbHVkZSBidXQgYXJlIG5vdCBsaW1pdGVkIHRvIHRlY2huaWNhbCBzdXBwb3J0LCAKK3RyYWluaW5nLCBjb25zdWx0YXRpb24gb3Igb3B0aW1pemF0aW9uIHNlcnZpY2VzLiAgJ0VuZCBVc2VyJyBtYXkgbm90IAorc29saWNpdCBvciByZWNlaXZlIHRoaXMgU09GVFdBUkUgb3Igc2VydmljZXMgYXNzb2NpYXRlZCB0byB0aGUgdXNlLCAKK2N1c3RvbWl6YXRpb24sIHRyYWluaW5nLCBkZXZlbG9wbWVudCwgb3Igc3VwcG9ydCBvbiB0aGlzIFNPRlRXQVJFIGZyb20gYW55IAorb3JnYW5pemF0aW9uIHRoYXQgaXMgbm90IGFuICdBdXRob3JpemVkIERpc3RyaWJ1dGlvbiBhbmQgU2VydmljZXMgUGFydG5lcicgCitvZiBDbHVzdGVyIFJlc291cmNlcyBJbmMuICBBbnkgb3JnYW5pemF0aW9uIHRoYXQgZGVzaXJlcyB0byBiZWNvbWUgYW4gCisnQXV0aG9yaXplZCBEaXN0cmlidXRpb24gYW5kIFNlcnZpY2VzIFBhcnRuZXInIG9mIENsdXN0ZXIgUmVzb3VyY2VzLCBJbmMuIAorbWF5IGNvbnRhY3QgdXMgYXQgc3VwcG9ydEBjbHVzdGVycmVzb3VyY2VzLmNvbS4gICdFbmQgVXNlcicgb3JnYW5pemF0aW9ucyAKK3RoYXQgZGVzaXJlIHNlcnZpY2VzIGZyb20gQ2x1c3RlciBSZXNvdXJjZXMgSW5jLiwgb3IgYW4gJ0F1dGhvcml6ZWQgCitEaXN0cmlidXRpb24gYW5kIFNlcnZpY2VzIFBhcnRuZXInIG1heSBjb250YWN0IHVzIHVzaW5nIHRoZSBzYW1lIGVtYWlsIAorbGlzdGVkIGFib3ZlLgorCis0LiAgRGlzdHJpYnV0aW9uCisKKyAgJ0VuZCBVc2VyJyBvcmdhbml6YXRpb25zIHRoYXQgYXJlIGFjYWRlbWljIGFuZCBnb3Zlcm5tZW50IGFnZW5jaWVzIG1heSAKK3JlZGlzdHJpYnV0ZSB0aGlzIFNPRlRXQVJFIHN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbiB0aGF0IHRoZSBkaXN0cmlidXRpb24gCitjb250YWlucyBjb25zcGljdW91cyBwdWJsaWNhdGlvbiBvZiB0aGUgYWNrbm93bGVkZ2VtZW50IHN0YXRlbWVudCBmb3VuZCAKK3dpdGhpbiB0aGUgTElDRU5TRSBhZ3JlZW1lbnQgZGlzdHJpYnV0ZWQgd2l0aCB0aGlzIFNPRlRXQVJFLgorCisgIE9yZ2FuaXphdGlvbnMgdGhhdCBhcmUgbm90IGFjYWRlbWljIGFuZCBnb3Zlcm5tZW50IGFnZW5jaWVzIGluY2x1ZGluZyAKK2NvbW1lcmNpYWwgYW5kIG90aGVyIGZvci1wcm9maXQgb3JnYW5pemF0aW9ucyBtYXkgbm90IHJlZGlzdHJpYnV0ZSB0aGlzIGNvZGUKK29yIGRlcml2YXRpb25zIG9mIHRoaXMgY29kZSBpbiBhbnkgZm9ybSB3aGF0c29ldmVyLCBpbmNsdWRpbmcgcGFydHMgb2YgCitTT0ZUV0FSRSBpbmNvcnBvcmF0ZWQgaW50byBvdGhlciBzb2Z0d2FyZSBwcm9ncmFtcyB3aXRob3V0IGV4cHJlc3Mgd3JpdHRlbiAKK3Blcm1pc3Npb24gZnJvbSBDbHVzdGVyIFJlc291cmNlcywgSW5jLgorCisgIFJlZGlzdHJpYnV0aW9uIG9mIHRoZSBTT0ZUV0FSRSBpbiBhbnkgZm9ybSB3aGF0c29ldmVyLCBpbmNsdWRpbmcgcGFydHMgb2YgCit0aGUgY29kZSB0aGF0IGFyZSBpbmNvcnBvcmF0ZWQgaW50byBvdGhlciBzb2Z0d2FyZSBwcm9ncmFtcywgbXVzdCBpbmNsdWRlIGEgCitjb25zcGljdW91cyBhbmQgYXBwcm9wcmlhdGUgcHVibGljYXRpb24gb2YgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisKKyAgJ1RoaXMgcHJvZHVjdCB3YXMgZGV2ZWxvcGVkIGJ5IENsdXN0ZXIgUmVzb3VyY2VzLCBJbmMuICBNb2FiIFNjaGVkdWxpbmcKK1N5c3RlbSBpcyBhIHRyYWRlbWFyayBvZiBDbHVzdGVyIFJlc291cmNlcywgSW5jLicKKworICBBbnkgcmVkaXN0cmlidXRpb24gb3IgbW9kaWZpY2F0aW9uIG9mIHRoZSBTT0ZUV0FSRSBtdXN0LCB3aGVuIGluc3RhbGxlZCwgCitkaXNwbGF5IHRoZSBhYm92ZSBsYW5ndWFnZSwgdGhlIGNvcHlyaWdodCBub3RpY2UsIGFuZCB0aGUgd2FycmFudHkgCitkaXNjbGFpbWVyLgorCisgIEVhY2ggdGltZSB0aGUgU09GVFdBUkUgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZSBTT0ZUV0FSRSkgaXMgCityZWRpc3RyaWJ1dGVkLCB0aGUgcmVjaXBpZW50IG11c3QgYXV0b21hdGljYWxseSByZWNlaXZlIHRoaXMgTElDRU5TRSwgCitjb3B5cmlnaHQgbm90aWNlLCBhbmQgdGhlIHdhcnJhbnR5IGRpc2NsYWltZXIgYXMgZGVzY3JpYmVkIGluIHRoaXMgbGljZW5zZSAKK2FncmVlbWVudCwgd2hpY2ggZ292ZXJuIHRoZSBhYmlsaXR5IHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSAKK1NPRlRXQVJFIHN1YmplY3QgdG8gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIGFuZCBoYXZlIHRoZSBjaG9pY2Ugb2YgCithY2NlcHRpbmcgb3IgZGVjbGluaW5nIHRoZSBMSUNFTlNFLiAgCisKKyAgQXMgdGhlIExJQ0VOU0VFLCB5b3Ugc2hhbGwgYXV0b21hdGljYWxseSBwcm92aWRlIHRoZSByZWNpcGllbnQgd2l0aCBhIAorY29weSBvZiB0aGlzIExJQ0VOU0UuICBGdXJ0aGVyIHJlc3RyaWN0aW9ucyBhcmUgbm90IHRvIGJlIGltcG9zZWQgb24gCityZWNpcGllbnRzIG9mIHRoZSBTT0ZUV0FSRSBieSB0aGUgTElDRU5TRUUgYmV5b25kIHRob3NlIGV4cHJlc3NseSBkZXNjcmliZWQgCitoZXJlaW4uCisKKzUuICBVc2Ugb2YgTW9kaWZpY2F0aW9ucworCisgIExJQ0VOU0VFUyB3aXRoIGEgcmVkaXN0cmlidXRpb24gYWdyZWVtZW50IHRoYXQgd2lzaCB0byBkaXN0cmlidXRlIHRoZWlyIAorbW9kaWZpY2F0aW9ucyAoaW5jbHVkaW5nIGdvdmVybm1lbnQgYW5kIGFjYWRlbWljIGluc3RpdHV0aW9ucykgbXVzdCBmaXJzdCAKK3NlbmQgYSBjb3B5IG9mIHRoZSBtb2RpZmljYXRpb25zIGFsb25nIHdpdGggYSBicmllZiBleHBsYW5hdGlvbiBvZiB3aHkgdGhlIAorbW9kaWZpY2F0aW9uIHdhcyBtYWRlIGFuZCB0aGUgcmVzdWx0aW5nIHBlcmZvcm1hbmNlIG9yIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIAorbW9kaWZpY2F0aW9ucyB0byBDbHVzdGVyIFJlc291cmNlcywgSW5jLiBhdCBzdXBwb3J0QGNsdXN0ZXJyZXNvdXJjZXMuY29tLiAgCitGYWlsdXJlIHRvIHNlbmQgYSBjb3B5IG9mIGRpc3RyaWJ1dGVkIG1vZGlmaWNhdGlvbnMgcmVuZGVycyB0aGUgTElDRU5TRSAKK2ludmFsaWQsIGFzIHdlbGwgYXMgYW55IExJQ0VOU0VTIGdyYW50ZWQgdG8gdGhpcmQgcGFydGllcyBzdWJzZXF1ZW50IHRvIHRoZSAKK2luY29ycG9yYXRpb24gb2YgdGhlIG1vZGlmaWNhdGlvbnMgaW50byBTT0ZUV0FSRS4gIEFueSBzdWNoIG1vZGlmaWNhdGlvbiBvZiAKK3RoZSBTT0ZUV0FSRSBtdXN0LCB3aGVuIGluc3RhbGxlZCwgZGlzcGxheSB0aGUgTElDRU5TRSwgdGhlIGNvcHlyaWdodCAKK25vdGljZSwgYW5kIHRoZSB3YXJyYW50eSBkaXNjbGFpbWVyIGFzIGRlc2NyaWJlZCBpbiB0aGUgTElDRU5TRSBhZ3JlZW1lbnQvcyAKK2Rpc3RyaWJ1dGVkIHdpdGggdGhpcyBTT0ZUV0FSRS4gVGhvc2Ugd2l0aG91dCBhIExJQ0VOU0UgdG8gcmVkaXN0cmlidXRlIG1heSAKK3NlbmQgbW9kaWZpY2F0aW9ucyB0byBDbHVzdGVyIFJlc291cmNlcyBmb3IgZXZhbHVhdGlvbiBhbmQgcG9zc2libGUgCitpbmNvcnBvcmF0aW9uIGludG8gU09GVFdBUkUuCisKKyAgQ29weXJpZ2h0IG93bmVycyBvZiBtb2RpZmljYXRpb25zIHRvIFNPRlRXQVJFIGhlcmVieSBncmFudCBDbHVzdGVyIAorUmVzb3VyY2VzLCBJbmMuIGEgbm9uLWV4Y2x1c2l2ZSwgcm95YWx0eS1mcmVlLCB3b3JsZHdpZGUsIGlycmV2b2NhYmxlIHJpZ2h0IAorYW5kIExJQ0VOU0UgdG8gaW5zdGFsbCwgdXNlLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLCBhbmQgcHJlcGFyZSBkZXJpdmF0aXZlIAord29ya3Mgb2Ygc2FpZCBtb2RpZmljYXRpb25zLiAgT25seSBvcmdhbml6YXRpb25zIHJlY2VpdmluZyBhbiBleHByZXNzIHByaW9yIAord3JpdHRlbiBleGNsdXNpb24gdG8gdGhpcyBjb25kaXRpb24gYXJlIGV4ZW1wdGVkIGZyb20gcHJvdmlkaW5nIHRoZXNlIAorbm9uLWV4Y2x1c2l2ZSByaWdodHMgdG8gQ2x1c3RlciBSZXNvdXJjZXMsIEluYy4KKworNi4gQ29tbXVuaWNhdGlvbnMgYWJvdXQgYW5kIEVuZG9yc2VtZW50IG9mIFNPRlRXQVJFIGFuZCBQcm9kdWN0cy9Tb2Z0d2FyZSAKK0Rlcml2ZWQgZnJvbSB0aGUgU09GVFdBUkUKKworICBUaGUgbmFtZSAnTW9hYiBTY2hlZHVsaW5nIFN5c3RlbScsICdNb2FiIFNjaGVkdWxlcicsIG9yIGFueSBvZiBpdHMgCit2YXJpYW50cyBtdXN0IG5vdCBvdGhlcndpc2UgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHRvIHByb21vdGUgcHJvZHVjdHMgCitkZXJpdmVkIGZyb20gdGhlIFNPRlRXQVJFIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gQ1JJLgorCisgIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSBvciBpbmNvcnBvcmF0aW5nIHRoZSBTT0ZUV0FSRSBpbiB3aG9sZSBvciBpbiBwYXJ0CitzaGFsbCBub3QgY29udGFpbiBhcyBwYXJ0IG9mIHRoZSBwcm9kdWN0J3MgbmFtZSBhbnkgZm9ybSBvZiB0aGUgdGVybXMgCisnQ2x1c3RlciBSZXNvdXJjZXMsIEluYy4nLCAnQ1JJJywgJ01vYWInLCAnTW9hYiBTY2hlZHVsaW5nIFN5c3RlbScsIAorJ01vYWIgU2NoZWR1bGVyJywgb3IgJ1N1cGVyY2x1c3RlciBEZXZlbG9wbWVudCBHcm91cCcgdW5sZXNzIHByaW9yIHdyaXR0ZW4gCitwZXJtaXNzaW9uIGhhcyBiZWVuIHJlY2VpdmVkIGZyb20gQ2x1c3RlciBSZXNvdXJjZXMsIEluYy4KKworICBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIGZvciBwcm9kdWN0cyB0aGF0IHVzZSBvciBpbmNvcnBvcmF0ZSBmZWF0dXJlcyBvZgordGhlIFNPRlRXQVJFIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDogJ1RoaXMgcHJvZHVjdAoraW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IENsdXN0ZXIgUmVzb3VyY2VzLCBJbmMuIGZvciB1c2UgaW4gdGhlIE1vYWIKK1NjaGVkdWxpbmcgU3lzdGVtLicKKworNy4gIEFjY2VwdGFuY2Ugb2YgdGhpcyBMSUNFTlNFCisKKyAgSXQgaXMgbm90IHJlcXVpcmVkIHRoYXQgeW91IGFjY2VwdCB0aGlzIExJQ0VOU0U7IGhvd2V2ZXIsIGlmIHlvdSBkbyBub3QgCithY2NlcHQgdGhlIHRlcm1zIG9mIHRoaXMgTElDRU5TRSwgeW91IGFyZSBwcm9oaWJpdGVkIGJ5IGxhdyBmcm9tIGluc3RhbGxpbmcsCit1c2luZywgbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgU09GVFdBUkUgb3IgYW55IG9mIGl0cyBkZXJpdmF0aXZlIAord29ya3MuICBUaGVyZWZvcmUsIGJ5IGluc3RhbGxpbmcsIHVzaW5nLCBtb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSAKK1NPRlRXQVJFIChvciBhbnkgb2YgaXRzIGRlcml2YXRpdmUgd29ya3MpLCB5b3UgaGF2ZSBhZ3JlZWQgdG8gdGhpcyBMSUNFTlNFIAorYW5kIGhhdmUgYWNjZXB0ZWQgYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4KKworICBJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIExJQ0VOU0UgaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYW55IAorcGFydGljdWxhciBjaXJjdW1zdGFuY2UsIHRoZSBiYWxhbmNlIG9mIHRoZSBMSUNFTlNFIHdpbGwgY29udGludWUgdG8gYXBwbHkuCisKKworCmRpZmYgLS1naXQgYS9saWNlbnNlcy9tZDJrNy1hc3lvdXdpc2ggYi9saWNlbnNlcy9tZDJrNy1hc3lvdXdpc2gKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEwNzAwNAotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL21kMms3LWFzeW91d2lzaApAQCAtMCwwICsxIEBACitZb3UgYXJlIGZyZWUgdG8gZG8gd2l0aCB0aGVzZSBpY29ucyBhcyB5b3Ugd2lzaCwgaW5jbHVkaW5nIHNlbGxpbmcsIGNvcHlpbmcsIG1vZGlmeWluZyBldGMuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9tZWthbml4IGIvbGljZW5zZXMvbWVrYW5peApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YjUzZmJiCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvbWVrYW5peApAQCAtMCwwICsxLDgyIEBACistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgTGV2ZWwgNyA6ICJNYW4sIEkgc3RpbGwgbGlrZSBNRUtBICEiIC0gSG93IHRvIHJlZ2lzdGVyCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyBUaGFua3MuIEluIHRoaXMgY2FzZSwgaWYgeW91IHdhbnQgdG8gaGVscCBmdXJ0aGVyIGRldmVsb3BtZW50IGFuZCBzdXBwb3J0CisgdGhlIGF1dGhvciwgeW91IGFyZSB3ZWxjb21lIHRvIHJlZ2lzdGVyIE1FS0EuCisKKyBUbyBkbyBzbywgeW91IHdpbGwgc2ltcGx5IGhhdmUgdG8gaGVscCB0aGUgU01TIFBvd2VyIGNhdXNlLiBUaGlzIGNhbiBiZQorIGRvbmUgYnkgc2V2ZXJhbCB3YXlzLiBUaGUgZmlyc3QgaXMgdG8gZG9uYXRlIFNlZ2EgOC1iaXQgY2FydHJpZGdlcyB0byB1cy4KKyBXZSB3b3VsZCBsb3ZlIHRoYXQuIERvbmF0aW5nIGhhcmR3YXJlIGlzIGV2ZW4gbW9yZSB3ZWxjb21lLiBJZiB5b3UgcGxhbgorIHRvIGRvbmF0ZSBhbnl0aGluZywgYmUgc3VyZSB0byBlLW1haWwgbWUgYmVmb3JlaGFuZC4gQW5kIHJlbWVtYmVyIGl0IGlzCisgbm90IGJlY2F1c2UgYSBnYW1lIG9yIGEgc3lzdGVtIGlzIGNvbW1vbiB0aGF0IEkgaGF2ZSBpdC4gSSBhbSBhY3R1YWxseQorIG1pc3NpbmcgYSBiaWxsaW9uIG9mIGNvbW1vbiBnYW1lIEkgd291bGQgbG92ZSB0byBnZXQuCisKKyBJZiB5b3UgY2Fubm90IGZpbmQgYW55IGNhcnRyaWRnZXMgdGhlbiB5b3UgY2FuIHNlbmQgbW9uZXkuIE1vbmV5IGhlbHBzCisgU01TIFBvd2VyIGluIGJ1eWluZyBjYXJ0cmlkZ2VzIHRvIGR1bXAgYW5kL29yIGZvciB0aGUgbXVzZXVtLCBhcyB3ZWxsIGFzCisgZ2V0dGluZyB3ZWlyZCBwaWVjZXMgb2YgcmVsYXRlZCBoYXJkd2FyZS4gRHVlIHRvIG1lIHRydXN0aW5nIHRoZSBjb29sCisgcGVvcGxlIHdobyBhcmUgaGFwcHkgdG8gaGVscCBhIGdyZWF0IGNhdXNlLCB0aGVyZSBpcyBubyBtb3JlIG1pbmltYWwKKyBhbW91bnQgdG8gc2VuZCB0byBnZXQgcmVnaXN0ZXJlZC4gU28gYmFzaWNhbGx5IGV2ZW4gaWYgeW91IHNlbmQgJDEgeW91Cisgd2lsbCBnZXQgcmVnaXN0ZXJlZC4gT2YgY291cnNlIHRoZSBtb3JlIHRoZSBiZXR0ZXIuIEkgaG9ubmVzdGx5IHRlbmQgdG8KKyBnZXQgZGVwcmVzc2VkIHdoZW4gc29tZW9uZSBzZW5kICQxIGZvciBhIGZvdXIteWVhcnMgd29yay4KKworIElmIHlvdSBkb24ndCBoYXZlIGFuIGlkZWEgb24gaG93IG11Y2ggeW91IG11c3Qgc2VuZCwgdGhlbiB5b3UgYXJlIG5vdCBvbgorIHRoZSByaWdodCB0cmFjay4gV2hhdCBtYXR0ZXIgaXMgdGhhdCB5b3UgYXJlIGhlbHBpbmcgYSBjYXVzZSwgYW5kIGZvciB0aGF0CisgcmVhc29uIHRoZSBtb3JlIGlzIGFsd2F5cyB0aGUgYmV0dGVyLiBEb24ndCBzdG9wIGZlZWRpbmcgeW91ciBjaGlsZHJlbiBvcgorIHBsYW4gdG8gc2VsbCB5b3VyIGhvdXNlIHRvIGRvbmF0ZSB0aGUgbW9uZXkgdG8gb3VyIGNhdXNlLCB0aG91Z2guIEp1c3QKKyB0aGluayBhYm91dCBob3cgbXVjaCAqeW91KiB3b3VsZCBwYXkgZm9yIHRoYXQgc29mdHdhcmUgaWYgaXQgd2FzIGNvbW1lcmNpYWwuCisKKyBJIGxpa2UgdG8gaGF2ZSBmdW4gd3JpdGluZyBkb2N1bWVudGF0aW9ucywgc28gaGVyZSBpcyBhIGZvcm11bGEgdG8KKyBjYWxjdWxhdGUgYSBnb29kIHByaWNlOgorICAgUCA9IChTIC8gKGsgKiA1KSkgKyAoTSAvIGspCisKKyBXaGVyZToKKyAgIFAgaXMgdGhlIHByaWNlIGEgbmljZSBndXkgd291bGQgcGF5LgorICAgUyBpcyB0aGUgc3BlZWQgb2YgeW91ciBDUFUuCisgICBNIGlzIHRoZSBhbW91bnQgb2YgbWVtb3J5IGluIHlvdXIgdmlkZW8gY2FyZC4KKyAgIGsgaXMgZGVmaW5lZCBhcyAzICogUGkgZm9yIHllYXIgMjAwMiwgYW5kIHdpbGwgaW5jcmVhc2Ugd2l0aCB0aW1lLgorICAgICAoYXBwcm94aW1hdGVseSA5LjQyNDcpCisKKyBGb3IgbXkgb3duIGNvbXB1dGVyOgorICAgUCA9ICgzNTAgLyAoMyAqIFBpICogNSkpICsgKDggLyAoMyAqIFBpKSkgPSA4LjI1JCAocHJldHR5IGNoZWFwKQorCisgQSBmYXN0ZXIgY29tcHV0ZXI6CisgICBQID0gKDE2MDAgLyAoMyAqIFBpICogNSkpICsgKDMyIC8gKDMgKiBQaSkpID0gMzcuMzQkIChvdWNoKQorCisgV2l0aCBpbi1iZXR3ZWVuIHByaWNlcyBmb3IgYXZlcmFnZSBjb21wdXRlcnMsIG9idmlvdXNseS4KKyBJc24ndCB0aGF0IGEgZ3JlYXQgaWRlYSB0byBhY2NvbW9kYXRlIHByb2dyYW1zIHByaWNlcyB0byB0aGUgc3BlZWQgb2YKKyB5b3VyIGNvbXB1dGVyID8gVGhlIHJpY2ggcGF5IG1vcmUgdGhhbiB0aGUgcG9vci4gOikKKworIE9mIGNvdXJzZSBpZiB5b3UgZW5kIHdpdGggc29tZXRoaW5nIGxpa2UgMTkuNTAgb3IgMjIuMjUgZG9uJ3QgYm90aGVyCisgc2VuZGluZyBjb2lucywgeW91IGNhbiByb3VuZCBpdCB1cC4gQW5kIG9mIGNvdXJzZSB5b3UgY2FuIHN0aWxsIHJvdW5kCisgaXQgdXAgd2l0aG91dCBhbnkgc3BlY2lmaWMgcmVhc29uLCBpdCB5b3UgZmVlbCBpdCBpcyB0b28gbXVjaCBvciB0b28KKyBsb3cgdG8gcGF5LiBJbiBmYWN0LCB5b3UgYXJlIHRoZSBvbmUgd2hvIGRlY2lkZS4KKworIFBsZWFzZSBkbyBub3Qgc2VuZCBjaGVja3MsIHNpbmNlIHRoZXkgYXJlIGV4cGVuc2l2ZSB0byBjYXNoIChmb3IgbWUpLgorIFBsZWFzZSBkbyBub3Qgc2VuZCBtb25leSBvcmRlcnMsIHNpbmNlIHRoZXkgYXJlIGV4cGVuc2l2ZSB0byBzZW5kIChmb3IgeW91KS4KKyBJbiBib3RoIGNhc2VzLCBpdCBpcyBub3Qgd29ydGggd2FzdGluZyBhIGxvdCBvZiBtb25leSBvbiBhIHNtYWxsIGRvbmF0aW9uLgorIENhc2ggaW4geW91ciBjb3VudHJ5IGN1cnJlbmN5IGlzIHVzdWFsbHkgYSBnb29kIHRoaW5nLgorIFBsZWFzZSBlLW1haWwgYmUgYmVmb3JlaGFuZCBpZiB5b3UgYXJlIHVuc3VyZSBhYm91dCBhbnl0aGluZy4KKworIE15IGFkZHJlc3MgaXM6ICAgIE9tYXIgQ29ybnV0CisgICAgICAgICAgICAgICAgICAgNDUgcnVlIFJlYmV2YWwKKyAgICAgICAgICAgICAgICAgICA3NTAxOSBQYXJpcworICAgICAgICAgICAgICAgICAgIEZyYW5jZQorCisgQW5kIEkgY2FuIGFsc28gcmVjZWl2ZSBtb25leSB3aXRoIFBheVBhbCAodmVyeSBwcmFjdGljYWwpLCB1bmRlciB0aGUKKyBmb2xsb3dpbmcgYWRkcmVzczogY29ybnV0IEAgbm9vcy5mci4KKworIEZpbmFsbHksIGlmIHlvdXIgbWFpbiBwcmV0ZXh0IGZvciBub3QgcmVnaXN0ZXJpbmcgaXMgbGF6eW5lc3MsIHRoZW4geW91Cisga25vdyB5b3Vyc2VsZiBpdCBpcyBub3QgYSB2YWxpZCBwcmV0ZXh0IDopCisKKyBJZiB5b3UgZG8gbm90IGFncmVlIHRoZXNlIHRlcm1zLCB0aGVuIHlvdSBjYW4gZGVsZXRlIHRoaXMgc29mdHdhcmUgbm93LCBhcworIGl0IHdpbGwgZGVzdHJveSB5b3VyIGNvbXB1dGVyIGFmdGVyIGEgY2VydGFpbiBhbW91bnQgb2YgdGltZSB1c2luZyBhIG5vbgorIHJlZ2lzdGVyZWQgdmVyc2lvbi4gQWxzbywgaWYgeW91IGhhdmUgZG9ncyBsaXZpbmcgaW4geW91ciBob3VzZSwgTUVLQSB3aWxsCisgYXV0b2RldGVjdCB0aGVtIGFuZCBraWxsIHRoZW0gYnkgc2VuZGluZyB1bHRyYSBzb25pYyB3YXZlcyB0aHJvdWdoIHRoZSBQQworIHNwZWFrZXJzLiBKdXN0IGRvbid0IHNheSBJIG1hZGUgaXQgZm9yIHRoZSBtb25leSwgcGxlYXNlLgorCisgUmVnaXN0ZXJlZCB1c2VycyB3aWxsIHJlY2VpdmUgaW5mb3JtYXRpb24gYW5kIG5ldyB2ZXJzaW9uIGJlZm9yZSBvdGhlcnMuCisgVGhleSB3aWxsIGFsc28gZ2V0IGFjY2VzcyB0byBST01zIG9uIFNNUyBQb3dlciwgb3RoZXIgdGhpbmdzIEkgbWF5Cisgc2hvdyBvZmYsIGFuZCBtb3JlIGltcG9ydGFudGx5OiBhIGNsZWFuIGNvbnNjaWVuY2UuCisKKyBFbmpveSEKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL21lbWUgYi9saWNlbnNlcy9tZW1lCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YTk5YjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9tZW1lCkBAIC0wLDAgKzEsMzIgQEAKKyAgICBDb3B5cmlnaHQgIChjKSAgMTk5NC0yMDA2ICBUaGUgIFJlZ2VudHMgIG9mIHRoZSAgVW5pdmVyc2l0eSBvZiAKKyAgICBDYWxpZm9ybmlhLiAgQWxsICBSaWdodHMgIFJlc2VydmVkLiAgICAgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgUGVybWlzc2lvbiAgdG8gdXNlLCAgY29weSwgIG1vZGlmeSwgIGFuZCAgZGlzdHJpYnV0ZSAgYW55IHBhcnQKKyAgICBvZiB0aGlzICBzb2Z0d2FyZSBmb3IgIGVkdWNhdGlvbmFsLCAgcmVzZWFyY2ggIGFuZCAgbm9uLXByb2ZpdCAKKyAgICBwdXJwb3NlcywgIHdpdGhvdXQgIGZlZSwgIGFuZCAgd2l0aG91dCBhIHdyaXR0ZW4gIGFncmVlbWVudCBpcyAKKyAgICBoZXJlYnkgIGdyYW50ZWQsICBwcm92aWRlZCAgdGhhdCB0aGUgIGFib3ZlICBjb3B5cmlnaHQgbm90aWNlLCAKKyAgICB0aGlzIHBhcmFncmFwaCAgYW5kIHRoZSBmb2xsb3dpbmcgIHRocmVlICBwYXJhZ3JhcGhzIGFwcGVhciBpbiAKKyAgICBhbGwgY29waWVzLiAgICAgICAgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICBUaG9zZSAgZGVzaXJpbmcgdG8gIGluY29ycG9yYXRlIHRoaXMgIHNvZnR3YXJlIGludG8gY29tbWVyY2lhbAorICAgIHByb2R1Y3RzICBvciB1c2UgZm9yICBjb21tZXJjaWFsICBwdXJwb3NlcyAgc2hvdWxkIGNvbnRhY3QgdGhlICAgICAKKyAgICBUZWNobm9sb2d5ICBUcmFuc2ZlciAgT2ZmaWNlLCAgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLCAgIFNhbiAKKyAgICBEaWVnbywgIDk1MDAgR2lsbWFuIERyaXZlLCAgTGEgSm9sbGEsICBDYWxpZm9ybmlhLCA5MjA5My0wOTEwLCAgICAgICAgIAorICAgIFBob25lOiAoODU4KSA1MzQtNTgxNS4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorICAgIElOICBOTyAgRVZFTlQgIFNIQUxMIFRIRSAgVU5JVkVSU0lUWSAgT0YgQ0FMSUZPUk5JQSAgQkUgTElBQkxFIAorICAgIFRPICBBTlkgIFBBUlRZIEZPUiAgRElSRUNULCAgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SICAgICAKKyAgICBDT05TRVFVRU5USUFMICBEQU1BR0VTLCAgSU5DTFVESU5HICBMT1NUIFBST0ZJVFMsIEFSSVNJTkcgIE9VVCAKKyAgICBPRiAgVEhFICBVU0UgIE9GICBUSElTICBTT0ZUV0FSRSwgIEVWRU4gIElGIFRIRSBVTklWRVJTSVRZICBPRiAKKyAgICBDQUxJRk9STklBICBIQVMgIEJFRU4gIEFEVklTRUQgIE9GICBUSEUgIFBPU1NJQklMSVRZICBPRiAgU1VDSCAKKyAgICBEQU1BR0UuCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKyAgICBUSEUgU09GVFdBUkUgIFBST1ZJREVEIEhFUkVVTkRFUiBJUyBPTiBBTiAgIkFTIElTIiBCQVNJUywgIEFORCAKKyAgICBUSEUgIFVOSVZFUlNJVFkgT0YgQ0FMSUZPUk5JQSAgSEFTICBOTyBPQkxJR0FUSU9OUyAgVE8gUFJPVklERSAgICAgICAgIAorICAgIE1BSU5URU5BTkNFLCBTVVBQT1JULCBVUERBVEVTLCBFTkhBTkNFTUVOVFMsIE9SIE1PRElGSUNBVElPTlMuICAKKyAgICBUSEUgVU5JVkVSU0lUWSAgT0YgQ0FMSUZPUk5JQSAgTUFLRVMgIE5PICBSRVBSRVNFTlRBVElPTlMgIEFORCAgICAgCisgICAgRVhURU5EUyAgTk8gIFdBUlJBTlRJRVMgIE9GICBBTlkgIEtJTkQsICBFSVRIRVIgIEVYUFJFU1NFRCAgT1IgCisgICAgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAgICBPRiAgTUVSQ0hBTlRBQklMSVRZICBPUiAgRklUTkVTUyBGT1IgQSAgUEFSVElDVUxBUiBQVVJQT1NFLCBPUiAKKyAgICBUSEFUICBUSEUgVVNFICBPRiBUSEUgTUFURVJJQUwgIFdJTEwgTk9UICBJTkZSSU5HRSBBTlkgUEFURU5ULCAgICAgICAgIAorICAgIFRSQURFTUFSSyBPUiBPVEhFUiBSSUdIVFMuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9tZXRhcGFja2FnZSBiL2xpY2Vuc2VzL21ldGFwYWNrYWdlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4MzE4MzkKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9tZXRhcGFja2FnZQpAQCAtMCwwICsxLDYgQEAKK1RoaXMgaXMgYSBtZXRhcGFja2FnZSB0aGF0IChpdHNlbGYpIGluc3RhbGxzIG5vIGZpbGVzLCB0aGVyZWZvcmUgbm8KK2xpY2Vuc2UgaXMgbmVlZGVkLgorCitUaGlzIGRvZXMgbm90IGluIGFueSB3YXkgaW1wbHkgdW5kZXIgd2hpY2ggbGljZW5zZXMgdGhlIHBhY2thZ2VzIGluIGl0CithcmUgZGlzdHJpYnV0ZWQuIENoZWNrIHRoZSBtZXRhcGFja2FnZSdzIGRlcGVuZGVuY2llcyBmb3IgdGhlaXIgYWN0dWFsCitsaWNlbnNlIHRlcm1zLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvbWluZHRlcm0gYi9saWNlbnNlcy9taW5kdGVybQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTEzNmUxCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvbWluZHRlcm0KQEAgLTAsMCArMSwyNDQgQEAKK1BDQTE1IHZlcnNpb24gMi4wCisKKwkJICAgQVBQR0FURSBORVRXT1JLIFNFQ1VSSVRZIEFCICAoIkFQUEdBVEUiKQorCisJCSAgICAgTUlORFRFUk0gRU5ELVVTRVIgTElDRU5TRSBBR1JFRU1FTlQKKwkJCSAgIChMSU1JVEVEIENPTU1FUkNJQUwgVVNFKQorCisKK1BMRUFTRSBSRVZJRVcgVEhFIEZPTExPV0lORyBURVJNUyBBTkQgQ09ORElUSU9OUyBQUklPUiBUTyBBQ0NFU1NJTkcsCitET1dOTE9BRElORyBBTkQvT1IgT1RIRVJXSVNFIFVTSU5HIEFOWSBPRiBUSEUgTElDRU5TRUQgUFJPRFVDVFMsIEFTIEhFUkVJTgorQUZURVIgREVGSU5FRC4KKworVEhFIFVTRSBPRiBUSEUgTElDRU5TRUQgUFJPRFVDVFMgQVMgV0VMTCBBUyBBTlkgVVBEQVRFUyBUSEVSRVRPIElTIFNVQkpFQ1QgVE8KK1RIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSEUgVEhJUyBMSUNFTlNFIEFHUkVFTUVOVCAoVEhFICJBR1JFRU1FTlQiKS4gQlkKK09QRU5JTkcgVEhFIFJFTEVWQU5UIFNPRlRXQVJFIFBBQ0tBR0UsIEJZIFNFTEVDVElORyBUSEUgW0FHUkVFRCBBTkQvT1IgQUNDRVBUXQorQlVUVE9OLCBET1dOTE9BRElORyBBTkQvT1IgT1RIRVJXSVNFIFVTSU5HIFRIRSBTT0ZUV0FSRSBPUiBBTlkgUE9SVElPTgorVEhFUkVPRiwgTElDRU5TRUUgKFRIRSBGSVJNLCBDT01QQU5ZIE9SIE9USEVSIFBFUlNPTiBIQVZJTkcgUkVDRUlWRUQgVEhFCitMSUNFTlNFRCBTT0ZUV0FSRSBQVVJTVUFOVCBUTyBBTiBPUkRFUiBPTiBUSEUgQVBQR0FURSBXRUIgU0lURSBPUiBPVEhFUldJU0UpCitBUkUgQUdSRUVJTkcgVE8gVEhFIEJPVU5EIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSEUgQUdSRUVNRU5UIEFORCBBUkUKK0VOVEVSSU5HIElOVE8gVEhFIEFHUkVFTUVOVCBXSVRIIEFQUEdBVEUgTkVUV09SSyBTRUNVUklUWSBBQiAoIkxJQ0VOU09SIiBvcgorIkFQUEdBVEUiKS4KKworCisxLglERUZJTklUSU9OUworCisJQXMgdXNlZCBpbiB0aGlzIEFncmVlbWVudCwgdGhlIGZvbGxvd2luZyB0ZXJtcyBzaGFsbCBoYXZlIHRoZQorCWZvbGxvd2luZyBtZWFuaW5nczoKKworMS4xCSJEZXNpZ25hdGVkIFVzZSIgbWVhbnMgdGhlIHVzZXMgZGVzY3JpYmVkIGluIFNlY3Rpb24gMi4zLgorCisxLjIJIkRvY3VtZW50YXRpb24iIG1lYW5zIHRoZSBtYXRlcmlhbHMgYW5kIGRvY3VtZW50cyByZWxldmFudCB0byB0aGUKKwlMaWNlbnNlZCBQcm9kdWN0cyBhbmQgcHJvdmlkZWQgYnkgQXBwR2F0ZQorCisxLjMJIkV2ZW50IG9mIERlZmF1bHQiIG1lYW5zIGFueSBldmVudCBzcGVjaWZpZWQgaW4gU2VjdGlvbiA3LjEuCisKKzEuNAkiTGljZW5zZSIgbWVhbnMgdGhlIGxpY2Vuc2UgdG8gdXNlIHRoZSBMaWNlbnNlZCBQcm9kdWN0cyBhcyBkZWZpbmVkIGluCisgICAgICAgIFNlY3Rpb24gMi4xLgorCisxLjUJIkxpY2Vuc2VkIFByb2R1Y3RzIiBtZWFucyB0aGUgc29mdHdhcmUgcHJvZHVjdCBNaW5kVGVybSBpbiBvYmplY3QgY29kZQorCWZvcm0gb25seS4gKFVzZSBvZiBzb3VyY2UgY29kZSBpcyBzdWJqZWN0IHRvIHRoZSBjb25kaXRpb25zIHNldCBmb3J0aAorCWluIHRoZSBNaW5kVGVybSBQdWJsaWMgU291cmNlIGxpY2Vuc2UgYWdyZWVtZW50LikKKworMS43CSJVc2FnZSwgVXNlIG9yIFVzZWQiIGluY2x1ZGVzIHRoZSBhY3Qgb2YgdHJhbnNmZXJyaW5nLCB0cmFuc21pdHRpbmcsCisJY29tcGlsaW5nLCBleGVjdXRpbmcsIGludGVycHJldGluZywgcHJvY2Vzc2luZyBvciBzdG9yaW5nIHRoZSBMaWNlbnNlZAorCVByb2R1Y3RzIHRocm91Z2ggdGhlIHVzZSBvZiBjb21wdXRlciBlcXVpcG1lbnQsIG9yIHRyYW5zZmVycmluZywKKwl0cmFuc21pdHRpbmcsIGNvbXBpbGluZywgZXhlY3V0aW5nLCBpbnRlcnByZXRpbmcsIHByb2Nlc3Npbmcgb3IKKwlzdG9yaW5nIGFueSBkYXRhIG9yIGluZm9ybWF0aW9uIHVzaW5nIHRoZSBMaWNlbnNlZCBQcm9kdWN0czsgYW5kL29yCisJZGlzcGxheWluZyBhbnkgcG9ydGlvbiBvZiB0aGUgTGljZW5zZWQgUHJvZHVjdHMgb3IgZGF0YSBvciBpbmZvcm1hdGlvbgorCWluIGNvbm5lY3Rpb24gd2l0aCBhbnkgb2YgdGhlc2UgYWN0aXZpdGllcy4KKworCisyLglHUkFOVCBPRiBMSUNFTlNFCisKKzIuMQlOb25leGNsdXNpdmUgTGljZW5zZQorCisJU3ViamVjdCB0byBMaWNlbnNlZSdzIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcworCUFncmVlbWVudCBMaWNlbnNlZSBpcyBoZXJlYnkgZ3JhbnRlZCBhIG5vbmV4Y2x1c2l2ZSwgbm9uLXRyYW5zZmVyYWJsZSwKKwlub24gYXNzaWduYWJsZSBhbmQgcm95YWx0eS1mcmVlIGxpY2Vuc2UgdG8gVXNlIHRoZSBMaWNlbnNlZCBQcm9kdWN0cworCWZvciBwdXJwb3NlcyBvZiB0aGUgRGVzaWduYXRlZCBVc2U7IHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IHRoaXMKKwlBZ3JlZW1lbnQgZG9lcyBub3QgZ3JhbnQgdG8gTGljZW5zZWUgYW55IHRpdGxlIG9yIHJpZ2h0IG9mIG93bmVyc2hpcAorCWluIG9yIHRvIHRoZSBMaWNlbnNlZCBQcm9kdWN0cy4KKworMi4yCVJpZ2h0IHRvIFV0aWxpemUgdGhlIERvY3VtZW50YXRpb24KKworCVN1YmplY3QgdG8gdGhlIHRlcm0gYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQsIEFwcEdhdGUgaGVyZWJ5CisJZ3JhbnRzIHRvIExpY2Vuc2VlLCBhbmQgTGljZW5zZWUgaGVyZWJ5IGFjY2VwdHMgZnJvbSBBcHBHYXRlLCBhCisJbm9uZXhjbHVzaXZlLCBub24tdHJhbnNmZXJhYmxlLCBub24gYXNzaWduYWJsZSBhbmQgcm95YWx0eS1mcmVlIHJpZ2h0CisJdG8gdXRpbGl6ZSB0aGUgRG9jdW1lbnRhdGlvbiBpbiBjb25uZWN0aW9uIHdpdGggdGhlIERlc2lnbmF0ZWQgVXNlIG9mCisJdGhlIExpY2Vuc2VkIFByb2R1Y3RzOyBwcm92aWRlZCwgaG93ZXZlciwgdGhhdCB0aGlzIEFncmVlbWVudCBkb2VzIG5vdAorCWdyYW50IHRvIExpY2Vuc2VlIGFueSB0aXRsZSBvciByaWdodCBvZiBvd25lcnNoaXAgaW4gb3IgdG8gdGhlCisJRG9jdW1lbnRhdGlvbi4gTGljZW5zZWUgc2hhbGwgbm90IGNvcHkgYW55IERvY3VtZW50YXRpb24sIGJ1dCBtYXkKKwlvYnRhaW4gYWRkaXRpb25hbCBjb3BpZXMgZnJvbSBBcHBHYXRlIGZvciB0aGUgYXBwbGljYWJsZSBjaGFyZ2VzCisJc3BlY2lmaWVkIGJ5IEFwcEdhdGUgZnJvbSB0aW1lIHRvIHRpbWUuCisKKzIuMwlVc2UKKworCVRoZSBMaWNlbnNlZCBQcm9kdWN0cyBtYXkgYmUgVXNlZCBvbmx5IGZvciBMaWNlbnNlZSdzIG93biBpbnRlcm5hbAorCWNvbXB1dGluZyByZXF1aXJlbWVudHMgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBzZXQKKwlmb3J0aCBoZXJlaW4gYW5kIHN0cmljdGx5IGxpbWl0ZWQgdG8gdGhlIG51bWJlciBvZiB1c2VycyBhcyBkZWZpbmVkCisJaGVyZS4gVGhlIExpY2Vuc2VkIFByb2R1Y3RzIGFyZSBmcmVlIHRvIHVzZSBieSBMaWNlbnNvciBpbiBhbnkKKwlvcmdhbml6YXRpb24sIGNvbW1lcmNpYWwgb3Igbm9uLWNvbW1lcmNpYWwsIGFjY29yZGluZyB0byB0aGlzIExpY2Vuc2UKKwlBZ3JlZW1lbnQgZm9yIHVwIHRvLCBidXQgbm90IGV4Y2VlZGluZywgMTAwIChvbmUgaHVuZHJlZCkgZGlzdGluY3QKKwl1c2Vycy4gQW55IG90aGVyIHVzZSByZXF1aXJlcyBhIENvbW1lcmNpYWwgTGljZW5zZSBBZ3JlZW1lbnQgd2hpY2ggY2FuCisJYmUgb2J0YWluZWQgYnkgcHVyY2hhc2luZyB0aGUgTGljZW5zZWQgUHJvZHVjdHMgZnJvbSBBcHBHYXRlLgorCisJTGljZW5zb3JzIHdpdGggYSBDb21tZXJjaWFsIExpY2Vuc2UgYWdyZWVtZW50IGNhbiBzdWJzY3JpYmUgdG8KKwlNYWludGVuYW5jZSBhbmQgU3VwcG9ydCBzZXJ2aWNlcyB0byBwZXJpb2RpY2FsbHkgcmVjZWl2ZSB1cGRhdGVkCisJdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2VkIFByb2R1Y3RzLCBnZXQgYWNjZXNzIHRvIHN1cHBvcnQgc2VydmljZXMKKwkod2ViLCBlLW1haWwgYW5kIHRlbGVwaG9uZSkgYW5kIHJlY2VpdmUgdXBkYXRlZCBzaWduZWQgdmVyc2lvbnMgb2YgdGhlCisJTWluZFRlcm0gYXBwbGV0LiBUaGVzZSBzZXJ2aWNlcyBhcmUgbm90IGF2YWlsYWJsZSB1bmRlciB0aGlzIGxpbWl0ZWQKKwlBZ3JlZW1lbnQuCisKKwlMaWNlbnNlZSBpcyBhbGxvd2VkIHRvIHVzZSB0aGUgTWluZFRlcm0gc291cmNlIGNvZGUgYWNjb3JkaW5nIHRvIHRoZQorCU1pbmRUZXJtIFB1YmxpYyBTb3VyY2UgbGljZW5zZSBhZ3JlZW1lbnQuIExpY2Vuc2VlIGlzIGFsbG93ZWQgdG8gdXNlCisJYW55IGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIExpY2Vuc2VkIFByb2R1Y3RzIGZvciBpdHMgb3duIGludGVybmFsCisJY29tcHV0aW5nIHJlcXVpcmVtZW50cyBhY2NvcmRpbmcgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMKKwlBZ3JlZW1lbnQuCisKKzMuCVRFUk0gT0YgTElDRU5TRQorCisJVGhlIExpY2Vuc2UgZ3JhbnRlZCBoZXJldW5kZXIgc2hhbGwgY29tbWVuY2UgdXBvbiBMaWNlbnNlZSdzCisJYWNjZXB0YW5jZSBvZiB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgaGVyZWluIGNvbnRhaW5lZCBhbmQgc2hhbGwKKwljb250aW51ZSBpbiBlZmZlY3QgdW5sZXNzIHRlcm1pbmF0ZWQgZWFybGllciBwdXJzdWFudCBoZXJldG8uCisKKworNC4gICAgICBOTyBDT1BZSU5HIEFORCBSRVNUUklDVEVEIFVTRQorCis0LjEJUmVzdHJpY3RlZCBVc2UKKworCUxpY2Vuc2VlIHNoYWxsIG5vdCBVc2UgdGhlIExpY2Vuc2VkIFByb2R1Y3RzIG9yIHRoZSBEb2N1bWVudGF0aW9uIGZvcgorCWFueSBwdXJwb3NlcyBvdGhlciB0aGFuIHRoZSBEZXNpZ25hdGVkIFVzZSBzcGVjaWZpZWQgaW4gU2VjdGlvbiAyCisJaGVyZW9mLiAKKworNC4yCU5vIENvcHlpbmcKKworCUxpY2Vuc2VlIG1heSBtYWtlLCBmcmVlIG9mIGNoYXJnZSwgY29waWVzIG9mIHRoZSBMaWNlbnNlZCBQcm9kdWN0cyBmb3IKKwl0aGUgRGVzaWduYXRlZCBVc2UsIGFyY2hpdmFsIG9yIGJhY2stdXAgcHVycG9zZXMuIExpY2Vuc2VlIHNoYWxsIG5vdAorCW1ha2UgYW55IGNvcHkgb2YgdGhlIExpY2Vuc2VkIFByb2R1Y3RzIGZvciBhIHVzZSB0aGF0IEFwcEdhdGUgaGFzIG5vdAorCWV4cHJlc3NseSBhcHByb3ZlZCB1bmRlciB0aGlzIEFncmVlbWVudC4gTGljZW5zZWUgc2hhbGwgbm90IFVzZSBvcgorCWFsbG93IHRoZSBMaWNlbnNlZCBQcm9kdWN0cyB0byBiZSBVc2VkLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBpbiBhbnkKKwltYW5uZXIgdGhhdCB3b3VsZCBlbmFibGUgaXRzIGN1c3RvbWVycyBvciBhbnkgb3RoZXIgcGVyc29uIG9yIGVudGl0eQorCXRvIGNvcHkgb3IgVXNlIGFueSBvZiB0aGUgTGljZW5zZWQgUHJvZHVjdHMuIENvcHlpbmcgb3IgcmVwcm9kdWN0aW9uCisJb2YgdGhlIExpY2Vuc2VkIFByb2R1Y3RzIHRvIGFueSBvdGhlciBzZXJ2ZXIgb3IgbG9jYXRpb24gb3IgbWVkaWEgZm9yCisJZnVydGhlciByZXByb2R1Y3Rpb24gb3IgcmVkaXN0cmlidXRpb24gaXMgZXhwcmVzc2x5IHByb2hpYml0ZWQuCisKKzQuMwlObyBUcmFuc2ZlciBvZiBMaWNlbnNlOyBObyBTdWJsaWNlbnNlCisKKwlMaWNlbnNlZSBzaGFsbCBub3QgYXNzaWduIG9yIHRyYW5zZmVyIHRoaXMgTGljZW5zZSwgb3IgbGljZW5zZSBvcgorCXN1YmxpY2Vuc2UgdGhlIFVzZSBvZiBhbGwgb3IgYW55IHBvcnRpb24gb2YgdGhlIExpY2Vuc2VkIFByb2R1Y3RzLCB0bworCWFueSBvdGhlciBwYXJ0eS4KKworNC40CU5vIE1vZGlmaWNhdGlvbiBvciBEZWNvbXBpbGF0aW9uCisKKwlMaWNlbnNlZSBzaGFsbCBub3QgbW9kaWZ5LCBkaXNhc3NlbWJsZSwgZGVjb21waWxlLCByZWNyZWF0ZSBvcgorCWdlbmVyYXRlIGFueSBMaWNlbnNlZCBQcm9kdWN0cyBvciBhbnkgcG9ydGlvbiBvciB2ZXJzaW9uIHRoZXJlb2YKKwl1bmxlc3MgYW5kIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIHVuZGVyIGFwcGxpY2FibGUgbWFuZGF0b3J5IGxhdy4KKworNC41CUV4cG9ydAorCisJTGljZW5zZWUgc2hhbGwgbm90IGV4cG9ydCBvciByZS1leHBvcnQgdGhlIExpY2Vuc2VkIFByb2R1Y3RzIG9yIHBlcm1pdAorCXRyYW5zc2hpcG1lbnQgdGhlcmVvZiwgZGlyZWN0bHkgb24gaW5kaXJlY3RseSwgdG8gYW55IGNvdW50cnkgdG8gdGhlCisJZXh0ZW50IHN1Y2ggY291bnRyeSByZXF1aXJlcyBhbiBleHBvcnQgbGljZW5zZSBvciBvdGhlciBnb3Zlcm5tZW50YWwKKwlhcHByb3ZhbCwgd2l0aG91dCBmaXJzdCBvYnRhaW5pbmcgc3VjaCBsaWNlbnNlIG9yIGFwcHJvdmFsLgorCis0LjYJUHJvcHJpZXRhcnkgTWFya2luZ3MKKworCUxpY2Vuc2VlIHNoYWxsIG5vdCByZW1vdmUsIGVyYXNlIG9yIGhpZGUgZnJvbSB2aWV3IGFueSBjb3B5cmlnaHQsCisJdHJhZGVtYXJrLCBjb25maWRlbnRpYWxpdHkgbm90aWNlLCBtYXJrIG9yIGxlZ2VuZCBhcHBlYXJpbmcgb24gYW55IG9mCisJdGhlIExpY2Vuc2VkIFByb2R1Y3RzIG9yIGFueSBmb3JtIG9mIG91dHB1dCBwcm9kdWNlZCBieSB0aGUgTGljZW5zZWQKKwlQcm9kdWN0cy4KKworCis1LglOTyBXQVJSQU5UWQorCisJQmVjYXVzZSB0aGUgTGljZW5zZWQgUHJvZHVjdHMgYXJlIGxpY2Vuc2VkIGZyZWUgb2YgY2hhcmdlLCB0aGVyZSBpcyBubworCXdhcnJhbnR5IGZvciB0aGUgTGljZW5zZWQgUHJvZ3JhbSwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkKKwlhcHBsaWNhYmxlIGxhdy4gQXBwR2F0ZSBwcm92aWRlcyB0aGUgTGljZW5zZWQgUHJvZHVjdHMgImFzIGlzIiB3aXRob3V0CisJd2FycmFudHkgb2YgYW55IGtpbmQsIGVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgaW5jbHVkaW5nLCBidXQgbm90CisJbGltaXRlZCB0bywgdGhlIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yCisJYSBwYXJ0aWN1bGFyIHB1cnBvc2UuIExpY2Vuc2VlIGFsb25lIGFjY2VwdHMgdGhlIGVudGlyZSByaXNrIGFzIHRvIHRoZQorCXF1YWxpdHkgYW5kIHBlcmZvcm1hbmNlIG9mIHRoZSBMaWNlbnNlZCBQcm9kdWN0cy4gIFNob3VsZCB0aGUgTGljZW5zZWQKKwlQcm9kdWN0cyBwcm92ZSBkZWZlY3RpdmUsIExpY2Vuc2VlICBhc3N1bWVzIHRoZSBjb3N0IG9mIGFsbCBuZWNlc3NhcnkKKwlzZXJ2aWNpbmcsIHJlcGFpciBvciBjb3JyZWN0aW9uLgorCisKKzYuCUxJTUlUQVRJT04gT0YgTElBQklMSVRZIEFORCBSRU1FRElFUworCisJSW4gbm8gZXZlbnQgc2hhbGwgQXBwR2F0ZSBiZSBsaWFibGUgZm9yIGFueSBsb3NzIG9mIG9yIGRhbWFnZSB0bworCXJldmVudWVzLCBwcm9maXRzIG9yIGdvb2R3aWxsIG9yIG90aGVyIHNwZWNpYWwsIGluY2lkZW50YWwsIGluZGlyZWN0CisJb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzIG9mIGFueSBraW5kLCByZXN1bHRpbmcgZnJvbSBpdHMgcGVyZm9ybWFuY2UKKwlvciBmYWlsdXJlIHRvIHBlcmZvcm0gcHVyc3VhbnQgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50IG9yIGFueQorCWV4aGliaXRzIGhlcmV0bywgb3IgcmVzdWx0aW5nIGZyb20gdGhlIGZ1cm5pc2hpbmcsIHBlcmZvcm1hbmNlLCBvciB1c2UKKwlvciBsb3NzIG9mIHVzZSwgbG9zcyBvZiBkYXRhIG9yIGxvc3Mgb2YgYW55IGxpY2Vuc2VkIHByb2R1Y3RzIG9yIG90aGVyCisJbWF0ZXJpYWxzIGRlbGl2ZXJlZCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSBpbnRlcnJ1cHRpb24KKwlvZiBidXNpbmVzcywgd2hldGhlciByZXN1bHRpbmcgZnJvbSBicmVhY2ggb2YgY29udHJhY3Qgb3IgYnJlYWNoIG9mCisJd2FycmFudHksIGV2ZW4gaWYgbGljZW5zZWUgaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaAorCWRhbWFnZXMuCisKKyAKKzcuCURFRkFVTFQgQU5EIFRFUk1JTkFUSU9OCisKKzcuMQlUZXJtaW5hdGlvbiBpbiBBZHZhbmNlIFVwb24gRGVmYXVsdAorCisJVGhpcyBBZ3JlZW1lbnQgbWF5IGJlIHRlcm1pbmF0ZWQgd2l0aCBpbW1lZGlhdGUgZWZmZWN0IHVwb24gdGhlCisJb2NjdXJyZW5jZSBvZiBhbnkgb2YgdGhlIGZvbGxvd2luZyBFdmVudHMgb2YgRGVmYXVsdDoKKworCShhKQkgQ292ZW5hbnRzCisKKwkJIFRoZSBmYWlsdXJlIG9yIG5lZ2xlY3Qgb2YgTGljZW5zZWUgdG8gb2JzZXJ2ZSwga2VlcCBvcgorCQkgcGVyZm9ybSBhbnkgb2YgdGhlIGNvdmVuYW50cywgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcworCQkgQWdyZWVtZW50LCB3aGVyZSBzdWNoIG5vbi1wZXJmb3JtYW5jZSBpcyBub3QgZnVsbHkgY3VyZWQgYnkKKwkJIExpY2Vuc2VlIHdpdGhpbiB0aGlydHkgKDMwKSBkYXlzIGFmdGVyIHdyaXR0ZW4gbm90aWNlIGZyb20KKwkJIEFwcEdhdGU7IG9yCisKKwkoYikJIEJhbmtydXB0Y3kKKworCQkgVGhlIGZpbGluZyBvZiBhIHBldGl0aW9uIGZvciBMaWNlbnNlZSdzIGJhbmtydXB0Y3ksIHdoZXRoZXIKKwkJIHZvbHVudGFyeSBvciBpbnZvbHVudGFyeSwgb3IgaWYgYW4gYXNzaWdubWVudCBvZiBMaWNlbnNlZSdzCisJCSBhc3NldHMgaXMgbWFkZSBmb3IgdGhlIGJlbmVmaXQgb2YgY3JlZGl0b3JzLCBvciBhIHRydXN0ZWUgb3IKKwkJIHJlY2VpdmVyIGlzIGFwcG9pbnRlZCB0byB0YWtlIGNoYXJnZSBvZiB0aGUgYnVzaW5lc3Mgb2YKKwkJIExpY2Vuc2VlIGZvciBhbnkgcmVhc29uLCBvciBpZiBMaWNlbnNlZSBiZWNvbWVzIGluc29sdmVudCBvcgorCQkgdm9sdW50YXJpbHkgb3IgaW52b2x1bnRhcmlseSBkaXNzb2x2ZWQuCisKKzcuMglPYmxpZ2F0aW9ucyBvbiBUZXJtaW5hdGlvbgorCisJRWZmZWN0aXZlIHdpdGggdGhlIGRhdGUgb2YgZXhwaXJhdGlvbiBvciBvdGhlciB0ZXJtaW5hdGlvbiBvZiB0aGlzCisJQWdyZWVtZW50LCBhbGwgVXNhZ2Ugb2YgdGhlIExpY2Vuc2VkIFByb2R1Y3RzIHNoYWxsIHRlcm1pbmF0ZSwgYW5kIGFsbAorCXJpZ2h0cyBvZiBMaWNlbnNlZSB1bmRlciB0aGlzIEFncmVlbWVudCBzaGFsbCBjZWFzZSwgc3BlY2lmaWNhbGx5CisJaW5jbHVkaW5nLCBidXQgd2l0aG91dCBsaW1pdGF0aW9uLCB0aGUgTGljZW5zZSBhbmQgYWxsIG90aGVyIHJpZ2h0cworCWdyYW50ZWQgdG8gTGljZW5zZWUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQuCisKKzcuMwlObyBXYWl2ZXIKKworCVRlcm1pbmF0aW9uIG9mIHRoZSBBZ3JlZW1lbnQgdW5kZXIgdGhpcyBTZWN0aW9uIHNoYWxsIGJlIGluIGFkZGl0aW9uCisJdG8sIGFuZCBub3QgYSB3YWl2ZXIgb2YsIGFueSByZW1lZHkgYXQgbGF3IG9yIGluIGVxdWl0eSBhdmFpbGFibGUgdG8KKwlBcHBHYXRlIGFyaXNpbmcgZnJvbSBMaWNlbnNlZSdzIGJyZWFjaCBvZiB0aGlzIEFncmVlbWVudC4KKworCis4LglNSVNDRUxMQU5FT1VTCisKKzguMQlOb3RpY2VzCisKKwlBbGwgbm90aWNlcywgcmVxdWVzdHMgYW5kIGRlbWFuZHMgZ2l2ZW4gdG8gb3IgbWFkZSB1cG9uIHRoZSBwYXJ0aWVzCisJc2hhbGwgYmUgaW4gd3JpdGluZyBhbmQgc2hhbGwgYmUgbWFpbGVkIHByb3Blcmx5IGFkZHJlc3NlZCwgcG9zdGFnZQorCXByZXBhaWQsIHJlZ2lzdGVyZWQgb3IgYSBjZXJ0aWZpZWQsIG9yIHBlcnNvbmFsbHkgZGVsaXZlcmVkIHRvIGVpdGhlcgorCXBhcnR5IGF0IHRoZSBhZGRyZXNzZXMgc3BlY2lmaWVkIGJ5IGVpdGhlciBwYXJ0eSwgdXBvbiBub3QgbGVzcyB0aGFuCisJdGVuICgxMCkgZGF5cyBub3RpY2UuIFN1Y2ggbm90aWNlIHNoYWxsIGJlIGRlZW1lZCByZWNlaXZlZCBieSB0aGUKKwljbG9zZSBvZiBidXNpbmVzcyBvbiB0aGUgZGF0ZSBzaG93biBvbiB0aGUgY2VydGlmaWVkIG9yIHJlZ2lzdGVyZWQKKwltYWlsIHJlY2VpcHQsIG9yIHdoZW4gaXQgaXMgYWN0dWFsbHkgcmVjZWl2ZWQsIHdoaWNoZXZlciBpcyBzb29uZXIuCisKKzguMglHb3Zlcm5pbmcgTGF3IGFuZCBKdXJpc2RpY3Rpb24KKworCVRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGdvdmVybmVkIGJ5IGFuZCBjb25zdHJ1ZWQgaW4gYWNjb3JkYW5jZSB3aXRoCisJdGhlIGxhd3Mgb2YgU3dlZGVuLCB3aXRob3V0IHJlZmVyZW5jZSB0byBpdHMgY29uZmxpY3RzIG9mIGxhdworCXByb3Zpc2lvbnMuIFRoZSBleGNsdXNpdmUganVyaXNkaWN0aW9uIGFuZCB2ZW51ZSBmb3IgYWxsIGxlZ2FsIGFjdGlvbnMKKwlyZWxhdGluZyB0byB0aGlzIEFncmVlbWVudCBzaGFsbCBiZSBpbiBjb3VydHMgb2YgY29tcGV0ZW50IHN1YmplY3QKKwltYXR0ZXIganVyaXNkaWN0aW9uIGxvY2F0ZWQgaW4gU3dlZGVuLgorCis4LjMJU2V2ZXJhYmlsaXR5CisKKwlJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGhlbGQgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlIGJ5CisJYW55IGFnZW5jeSBvZiBjb21wZXRlbnQganVyaXNkaWN0aW9uLCB0aGUgcmVtYWluaW5nIHByb3Zpc2lvbnMgc2hhbGwKKwluZXZlcnRoZWxlc3MgcmVtYWluIHZhbGlkLgorCmRpZmYgLS1naXQgYS9saWNlbnNlcy9tbWl4IGIvbGljZW5zZXMvbW1peApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iM2QwY2M0Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvbW1peApAQCAtMCwwICsxLDE4IEBACitUaGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgTU1JWHdhcmUgcGFja2FnZSAoYykgRG9uYWxkIEUgS251dGggMTk5OQorCisgICAgVGhpcyBmaWxlIG1heSBiZSBmcmVlbHkgY29waWVkIGFuZCBkaXN0cmlidXRlZCwgcHJvdmlkZWQgdGhhdAorICAgIG5vIGNoYW5nZXMgd2hhdHNvZXZlciBhcmUgbWFkZS4gQWxsIHVzZXJzIGFyZSBhc2tlZCB0byBoZWxwIGtlZXAKKyAgICB0aGUgTU1JWHdhcmUgZmlsZXMgY29uc2lzdGVudCBhbmQgYGB1bmNvcnJ1cHRlZCwnJworICAgIGlkZW50aWNhbCBldmVyeXdoZXJlIGluIHRoZSB3b3JsZC4gQ2hhbmdlcyBhcmUgcGVybWlzc2libGUgb25seQorICAgIGlmIHRoZSBtb2RpZmllZCBmaWxlIGlzIGdpdmVuIGEgbmV3IG5hbWUsIGRpZmZlcmVudCBmcm9tIHRoZSBuYW1lcyBvZgorICAgIGV4aXN0aW5nIGZpbGVzIGluIHRoZSBNTUlYd2FyZSBwYWNrYWdlLAorICAgIGFuZCBvbmx5IGlmIHRoZSBtb2RpZmllZCBmaWxlIGlzIGNsZWFybHkgaWRlbnRpZmllZAorICAgIGFzIG5vdCBiZWluZyBwYXJ0IG9mIHRoYXQgcGFja2FnZS4KKyAgICAoVGhlIENXRUIgc3lzdGVtIGhhcyBhIGBgY2hhbmdlIGZpbGUnJyBmYWNpbGl0eSBieQorICAgIHdoaWNoIHVzZXJzIGNhbiBlYXNpbHkgbWFrZSBtaW5vciBhbHRlcmF0aW9ucyB3aXRob3V0IG1vZGlmeWluZworICAgIHRoZSBtYXN0ZXIgc291cmNlIGZpbGVzIGluIGFueSB3YXkuIEV2ZXJ5Ym9keSBpcyBzdXBwb3NlZCB0byB1c2UKKyAgICBjaGFuZ2UgZmlsZXMgaW5zdGVhZCBvZiBjaGFuZ2luZyB0aGUgZmlsZXMuKQorICAgIFRoZSBhdXRob3IgaGFzIHRyaWVkIGhpcyBiZXN0IHRvIHByb2R1Y2UgY29ycmVjdCBhbmQgdXNlZnVsIHByb2dyYW1zLAorICAgIGluIG9yZGVyIHRvIGhlbHAgcHJvbW90ZSBjb21wdXRlciBzY2llbmNlIHJlc2VhcmNoLAorICAgIGJ1dCBubyB3YXJyYW50eSBvZiBhbnkga2luZCBzaG91bGQgYmUgYXNzdW1lZC4KKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvbW9kX2Zhc3RjZ2kgYi9saWNlbnNlcy9tb2RfZmFzdGNnaQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzU4ZDBkCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvbW9kX2Zhc3RjZ2kKQEAgLTAsMCArMSw0MiBAQAorVGhpcyBGYXN0Q0dJIGFwcGxpY2F0aW9uIGxpYnJhcnkgc291cmNlIGFuZCBvYmplY3QgY29kZSAodGhlCisiU29mdHdhcmUiKSBhbmQgaXRzIGRvY3VtZW50YXRpb24gKHRoZSAiRG9jdW1lbnRhdGlvbiIpIGFyZQorY29weXJpZ2h0ZWQgYnkgT3BlbiBNYXJrZXQsIEluYyAoIk9wZW4gTWFya2V0IikuICBUaGUgZm9sbG93aW5nIHRlcm1zCithcHBseSB0byBhbGwgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBTb2Z0d2FyZSBhbmQgRG9jdW1lbnRhdGlvbgordW5sZXNzIGV4cGxpY2l0bHkgZGlzY2xhaW1lZCBpbiBpbmRpdmlkdWFsIGZpbGVzLgorCitPcGVuIE1hcmtldCBwZXJtaXRzIHlvdSB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSwgYW5kIGxpY2Vuc2UKK3RoaXMgU29mdHdhcmUgYW5kIHRoZSBEb2N1bWVudGF0aW9uIHNvbGVseSBmb3IgdGhlIHB1cnBvc2Ugb2YKK2ltcGxlbWVudGluZyB0aGUgRmFzdENHSSBzcGVjaWZpY2F0aW9uIGRlZmluZWQgYnkgT3BlbiBNYXJrZXQgb3IKK2Rlcml2YXRpdmUgc3BlY2lmaWNhdGlvbnMgcHVibGljbHkgZW5kb3JzZWQgYnkgT3BlbiBNYXJrZXQgYW5kCitwcm9tdWxnYXRlZCBieSBhbiBvcGVuIHN0YW5kYXJkcyBvcmdhbml6YXRpb24gYW5kIGZvciBubyBvdGhlcgorcHVycG9zZSwgcHJvdmlkZWQgdGhhdCBleGlzdGluZyBjb3B5cmlnaHQgbm90aWNlcyBhcmUgcmV0YWluZWQgaW4gYWxsCitjb3BpZXMgYW5kIHRoYXQgdGhpcyBub3RpY2UgaXMgaW5jbHVkZWQgdmVyYmF0aW0gaW4gYW55IGRpc3RyaWJ1dGlvbnMuCisKK05vIHdyaXR0ZW4gYWdyZWVtZW50LCBsaWNlbnNlLCBvciByb3lhbHR5IGZlZSBpcyByZXF1aXJlZCBmb3IgYW55IG9mCit0aGUgYXV0aG9yaXplZCB1c2VzLiAgTW9kaWZpY2F0aW9ucyB0byB0aGlzIFNvZnR3YXJlIGFuZCBEb2N1bWVudGF0aW9uCittYXkgYmUgY29weXJpZ2h0ZWQgYnkgdGhlaXIgYXV0aG9ycyBhbmQgbmVlZCBub3QgZm9sbG93IHRoZSBsaWNlbnNpbmcKK3Rlcm1zIGRlc2NyaWJlZCBoZXJlLCBidXQgdGhlIG1vZGlmaWVkIFNvZnR3YXJlIGFuZCBEb2N1bWVudGF0aW9uIG11c3QKK2JlIHVzZWQgZm9yIHRoZSBzb2xlIHB1cnBvc2Ugb2YgaW1wbGVtZW50aW5nIHRoZSBGYXN0Q0dJIHNwZWNpZmljYXRpb24KK2RlZmluZWQgYnkgT3BlbiBNYXJrZXQgb3IgZGVyaXZhdGl2ZSBzcGVjaWZpY2F0aW9ucyBwdWJsaWNseSBlbmRvcnNlZAorYnkgT3BlbiBNYXJrZXQgYW5kIHByb211bGdhdGVkIGJ5IGFuIG9wZW4gc3RhbmRhcmRzIG9yZ2FuaXphdGlvbiBhbmQKK2ZvciBubyBvdGhlciBwdXJwb3NlLiAgSWYgbW9kaWZpY2F0aW9ucyB0byB0aGlzIFNvZnR3YXJlIGFuZAorRG9jdW1lbnRhdGlvbiBoYXZlIG5ldyBsaWNlbnNpbmcgdGVybXMsIHRoZSBuZXcgdGVybXMgbXVzdCBwcm90ZWN0IE9wZW4KK01hcmtldCdzIHByb3ByaWV0YXJ5IHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUgYW5kIERvY3VtZW50YXRpb24gdG8gdGhlCitzYW1lIGV4dGVudCBhcyB0aGVzZSBsaWNlbnNpbmcgdGVybXMgYW5kIG11c3QgYmUgY2xlYXJseSBpbmRpY2F0ZWQgb24KK3RoZSBmaXJzdCBwYWdlIG9mIGVhY2ggZmlsZSB3aGVyZSB0aGV5IGFwcGx5LgorCitPcGVuIE1hcmtldCBzaGFsbCByZXRhaW4gYWxsIHJpZ2h0LCB0aXRsZSBhbmQgaW50ZXJlc3QgaW4gYW5kIHRvIHRoZQorU29mdHdhcmUgYW5kIERvY3VtZW50YXRpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYWxsIHBhdGVudCwKK2NvcHlyaWdodCwgdHJhZGUgc2VjcmV0IGFuZCBvdGhlciBwcm9wcmlldGFyeSByaWdodHMuCisKK09QRU4gTUFSS0VUIE1BS0VTIE5PIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5UWSBXSVRIIFJFU1BFQ1QgVE8gVEhFCitTT0ZUV0FSRSBPUiBUSEUgRE9DVU1FTlRBVElPTiwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBBTlkKK1dBUlJBTlRZIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIElOCitOTyBFVkVOVCBTSEFMTCBPUEVOIE1BUktFVCBCRSBMSUFCTEUgVE8gWU9VIE9SIEFOWSBUSElSRCBQQVJUWSBGT1IgQU5ZCitEQU1BR0VTIEFSSVNJTkcgRlJPTSBPUiBSRUxBVElORyBUTyBUSElTIFNPRlRXQVJFIE9SIFRIRQorRE9DVU1FTlRBVElPTiwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBJTkRJUkVDVCwgU1BFQ0lBTCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIFNJTUlMQVIgREFNQUdFUywgSU5DTFVESU5HIExPU1QgUFJPRklUUyBPUgorTE9TVCBEQVRBLCBFVkVOIElGIE9QRU4gTUFSS0VUIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRVMuICBUSEUgU09GVFdBUkUgQU5EIERPQ1VNRU5UQVRJT04gQVJFIFBST1ZJREVEICJBUyBJUyIuCitPUEVOIE1BUktFVCBIQVMgTk8gTElBQklMSVRZIElOIENPTlRSQUNULCBUT1JULCBORUdMSUdFTkNFIE9SCitPVEhFUldJU0UgQVJJU0lORyBPVVQgT0YgVEhJUyBTT0ZUV0FSRSBPUiBUSEUgRE9DVU1FTlRBVElPTi4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL21vbG1vbCBiL2xpY2Vuc2VzL21vbG1vbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OGNhN2RiCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvbW9sbW9sCkBAIC0wLDAgKzEsMjIzIEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1PTE1PTCAyLjYKKyAgICAgICAgICAgICAgICAgICAgICBDb3B5cmlnaHQgYW5kIExlZ2FsIEluZm9ybWF0aW9uCisKKworRGF0ZTogTWF5IDIyLCAxOTk4CisKK01PTE1PTCBpcyBhIG1vbGVjdWxhciBncmFwaGljcyBwcm9ncmFtIGZvciBkaXNwbGF5aW5nLCBhbmFseXNpbmcsIGFuZAorbWFuaXB1bGF0aW5nIHRoZSB0aHJlZS1kaW1lbnNpb25hbCBzdHJ1Y3R1cmUgb2YgYmlvbG9naWNhbCBtYWNyb21vbGVjdWxlcywKK3dpdGggc3BlY2lhbCBlbXBoYXNpcyBvbiB0aGUgc3R1ZHkgb2YgcHJvdGVpbiBvciBETkEgc3RydWN0dXJlcyBkZXRlcm1pbmVkCitieSBOTVIuIFRoZSBmb2xsb3dpbmcgaXMgbGVnYWwgaW5mb3JtYXRpb24gcGVydGFpbmluZyB0byB0aGUgdXNlIG9mIHRoZQorTU9MTU9MIHByb2dyYW0uIEl0IGFwcGxpZXMgdG8gYWxsIE1PTE1PTCBzb3VyY2UgZmlsZXMsIGV4ZWN1dGFibGUgKGJpbmFyeSkKK2ZpbGVzLCBjb25maWd1cmF0aW9uIGZpbGVzLCBkb2N1bWVudGF0aW9uIGZpbGVzIGNvbnRhaW5lZCBpbiB0aGUgb2ZmaWNpYWwKK01PTE1PTCBhcmNoaXZlcy4gKENlcnRhaW4gcG9ydGlvbnMgcmVmZXIgdG8gY3VzdG9tIHZlcnNpb25zIG9mIHRoZQorc29mdHdhcmUsIHRoZXJlIGFyZSBzcGVjaWZpYyBydWxlcyBsaXN0ZWQgYmVsb3cgZm9yIHRoZXNlIHZlcnNpb25zIGFsc28uKQorQWxsIG9mIHRoZXNlIGFyZSByZWZlcnJlZCB0byBoZXJlIGFzICJ0aGUgc29mdHdhcmUiLgorCitUSElTIE5PVElDRSBNVVNUIEFDQ09NUEFOWSBBTEwgT0ZGSUNJQUwgT1IgQ1VTVE9NIE1PTE1PTCBGSUxFUy4gSVQgTUFZIE5PVAorQkUgUkVNT1ZFRCBPUiBNT0RJRklFRC4gVEhJUyBJTkZPUk1BVElPTiBQRVJUQUlOUyBUTyBBTEwgVVNFIE9GIFRIRSBQQUNLQUdFCitXT1JMRFdJREUuIFRISVMgRE9DVU1FTlQgU1VQRVJTRURFUyBBTEwgUFJFVklPVVMgTElDRU5TRVMgT1IgRElTVFJJQlVUSU9OCitQT0xJQ0lFUy4KKworCisgICAgICAgICAgICAgICAgICAgICAgICBJTVBPUlRBTlQgTEVHQUwgSU5GT1JNQVRJT04KKworUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIHRoZSB1c2VyIHRvIHVzZSB0aGUgTU9MTU9MIHByb2dyYW0gYW5kIGFsbAorYXNzb2NpYXRlZCBmaWxlcyBpbiB0aGlzIHBhY2thZ2UgZm9yIG1ha2luZyBjYWxjdWxhdGlvbnMgYW5kIGNyZWF0aW5nCitpbWFnZXMuIFRoZSB1c2Ugb2YgdGhlIHNvZnR3YXJlIGZvciB0aGlzIHB1cnBvc2UgaXMgZnJlZS4gVGhlIHVzZXIgcmV0YWlucworYWxsIHJpZ2h0cyB0byB0aGVzZSByZXN1bHRzIGFuZCBtYXkgdXNlIHRoZW0gZm9yIGFueSBwdXJwb3NlIGNvbW1lcmNpYWwgb3IKK25vbmNvbW1lcmNpYWwuIFdoZW4gcGxvdHMgcHJlcGFyZWQgYnkgTU9MTU9MIGFyZSB1c2VkIGluIGxlY3R1cmVzLAorcHVibGljYXRpb25zIG9yIG90aGVyIHNpbWlsYXIgb2NjYXNpb25zLCB0aGVuIGEgcmVmZXJlbmNlIHRvIHRoZSBhdXRob3JzCithbmQgdGhlIGZvbGxvd2luZyBwYXBlciBpcyB0byBiZSBtYWRlOgorCisgICBLb3JhZGksIFIuLCBCaWxsZXRlciwgTS4sIGFuZCBXw7x0aHJpY2gsIEsuICgxOTk2KQorICAgSiBNb2wgR3JhcGhpY3MsIDE0LCA1MS01NS4KKyAgIE1PTE1PTDogYSBwcm9ncmFtIGZvciBkaXNwbGF5IGFuZCBhbmFseXNpcyBvZgorICAgbWFjcm9tb2xlY3VsYXIgc3RydWN0dXJlcy4KKworVGhpcyBzb2Z0d2FyZSBwYWNrYWdlIGFuZCBhbGwgb2YgdGhlIGZpbGVzIGluIHRoaXMgYXJjaGl2ZSBhcmUgY29weXJpZ2h0ZWQKK2J5IEJSVUtFUi9TcGVjdHJvc3BpbiBhbmQgRVRIIFp1cmljaC4gVGhleSBtYXkgb25seSBiZSBkaXN0cmlidXRlZCBhbmQvb3IKK21vZGlmaWVkIGFjY29yZGluZyB0byB0aGUgZ3VpZGVsaW5lcyBsaXN0ZWQgYmVsb3cuIFRoZSBzcGlyaXQgb2YgdGhlCitndWlkZWxpbmVzIGJlbG93IGlzIHRvIHByb3ZpZGUgdGhlIGZ1bGwgTU9MTU9MIHBhY2thZ2UgZnJlZWx5IHRvIGFzIG1hbnkKK3VzZXJzIGFzIHBvc3NpYmxlLCBwcmV2ZW50IE1PTE1PTCB1c2VycyBhbmQgZGV2ZWxvcGVycyBmcm9tIGJlaW5nIHRha2VuCithZHZhbnRhZ2Ugb2YsIGVuaGFuY2UgdGhlIGxpZmUgcXVhbGl0eSBvZiB0aG9zZSB3aG8gY29tZSBpbiBjb250YWN0IHdpdGgKK01PTE1PTC4gVGhpcyBsZWdhbCBkb2N1bWVudCB3YXMgY3JlYXRlZCBzbyB0aGVzZSBnb2FscyBjb3VsZCBiZSByZWFsaXplZC4KK1lvdSBhcmUgbGVnYWxseSBib3VuZCB0byBmb2xsb3cgdGhlc2UgcnVsZXMsIGJ1dCB3ZSBob3BlIHlvdSB3aWxsIGZvbGxvdwordGhlbSBhcyBhIG1hdHRlciBvZiBldGhpY3MsIHJhdGhlciB0aGFuIGZlYXIgb2YgbGl0aWdhdGlvbi4KKworTm8gcG9ydGlvbiBvZiB0aGlzIHBhY2thZ2UgbWF5IGJlIHNlcGFyYXRlZCBmcm9tIHRoZSBwYWNrYWdlIGFuZAorZGlzdHJpYnV0ZWQgc2VwYXJhdGVseSBvdGhlciB0aGFuIHVuZGVyIHRoZSBjb25kaXRpb25zIHNwZWNpZmllZCBpbiB0aGUKK2d1aWRlbGluZXMgYmVsb3cuCisKK1RoaXMgcGFja2FnZSBtYXkgb25seSBiZSBidW5kbGVkIGluIG90aGVyIHNvZnR3YXJlIHBhY2thZ2VzIHdpdGggdGhlCitleHBsaWNpdCBwZXJtaXNzaW9uIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVycy4KKworVGhpcyBwYWNrYWdlIG1heSBvbmx5IGJlIGluY2x1ZGVkIGluIHNvZnR3YXJlIGNvbXBpbGF0aW9ucyB1c2luZyBtZWRpYSBzdWNoCithcywgYnV0IG5vdCBsaW1pdGVkIHRvLCBmbG9wcHkgZGlzaywgQ0QtUk9NLCB0YXBlIGJhY2t1cCwgb3B0aWNhbCBkaXNrcywKK2hhcmQgZGlza3MsIG9yIG1lbW9yeSBjYXJkcyB3aXRoIHRoZSBleHBsaWNpdCBwZXJtaXNzaW9uIG9mIHRoZSBjb3B5cmlnaHQKK2hvbGRlcnMuCisKK1RoZSB1c2VyIGlzIGdyYW50ZWQgdGhlIHByaXZpbGVnZSB0byBtb2RpZnkgYW5kIGNvbXBpbGUgdGhlIHNvdXJjZSBmb3IKK3RoZWlyIG93biBwZXJzb25hbCB1c2UgaW4gYW55IGZhc2hpb24gdGhleSBzZWUgZml0LiBXaGF0IHlvdSBkbyB3aXRoIHRoZQorc29mdHdhcmUgaW4geW91ciBvd24gaG9tZSBpcyB5b3VyIGJ1c2luZXNzLgorCitJZiB0aGUgdXNlciB3aXNoZXMgdG8gZGlzdHJpYnV0ZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIHNvZnR3YXJlLAorZG9jdW1lbnRhdGlvbiBvciBvdGhlciBwYXJ0cyBvZiB0aGUgcGFja2FnZSAoaGVyZSBhZnRlciByZWZlcnJlZCB0byBhcworYSAiY3VzdG9tIHZlcnNpb24iKSB0aGV5IG11c3QgZm9sbG93IHRoZSBndWlkZWxpbmVzIGxpc3RlZCBiZWxvdy4gVGhlc2UKK2d1aWRlbGluZXMgaGF2ZSBiZWVuIGVzdGFibGlzaGVkIHRvIHByb21vdGUgdGhlIGdyb3d0aCBvZiBNT0xNT0wgYW5kCitwcmV2ZW50IGRpZmZpY3VsdGllcyBmb3IgdXNlcnMgYW5kIGRldmVsb3BlcnMgYWxpa2UuIFBsZWFzZSBmb2xsb3cgdGhlbQorY2FyZWZ1bGx5IGZvciB0aGUgYmVuZWZpdCBvZiBhbGwgY29uY2VybmVkIHdoZW4gY3JlYXRpbmcgYSBjdXN0b20gdmVyc2lvbi4KKworWW91IG1heSBub3QgaW5jb3Jwb3JhdGUgYW55IHBvcnRpb24gb2YgdGhlIE1PTE1PTCBzb3VyY2UgY29kZSBpbiBhbnkKK3NvZnR3YXJlIG90aGVyIHRoYW4gYSBjdXN0b20gdmVyc2lvbiBvZiBNT0xNT0wgd2l0aG91dCB0aGUgZXhwbGljaXQKK3Blcm1pc3Npb24gb2YgdGhlIGNvcHlyaWdodCBob2xkZXJzLiBIb3dldmVyIGF1dGhvcnMgd2hvIGNvbnRyaWJ1dGUgc291cmNlCit0byBNT0xNT0wgbWF5IHN0aWxsIHJldGFpbiBhbGwgcmlnaHRzIHRvIHVzZSB0aGVpciBjb250cmlidXRlZCBjb2RlIGZvciBhbnkKK3B1cnBvc2UgYXMgZGVzY3JpYmVkIGJlbG93LgorCitUaGUgdXNlciBpcyBlbmNvdXJhZ2VkIHRvIHNlbmQgZW5oYW5jZW1lbnRzIGFuZCBidWcgZml4ZXMgdG8gdGhlIE1PTE1PTAorYXV0aG9ycywgYnV0IHRoZSBhdXRob3JzIGFyZSBpbiBubyB3YXkgcmVxdWlyZWQgdG8gdXRpbGl6ZSB0aGVzZQorZW5oYW5jZW1lbnRzIG9yIGZpeGVzLiBCeSBzZW5kaW5nIG1hdGVyaWFsIHRvIHRoZSBhdXRob3JzLCB0aGUgY29udHJpYnV0b3IKK2Fzc2VydHMgdGhhdCBoZSBvd25zIHRoZSBtYXRlcmlhbHMgb3IgaGFzIHRoZSByaWdodCB0byBkaXN0cmlidXRlIHRoZXNlCittYXRlcmlhbHMuIEhlIGF1dGhvcml6ZXMgdGhlIE1PTE1PTCBhdXRob3JzIHRvIHVzZSB0aGUgbWF0ZXJpYWxzIGFueSB3YXkKK3RoZXkgbGlrZS4gVGhlIGNvbnRyaWJ1dG9yIHN0aWxsIHJldGFpbnMgcmlnaHRzIHRvIHRoZSBkb25hdGVkIG1hdGVyaWFsLAorYnV0IGJ5IGRvbmF0aW5nIHlvdSBncmFudCBlcXVhbCByaWdodHMgdG8gdGhlIE1PTE1PTCBhdXRob3JzLiBUaGUgTU9MTU9MCithdXRob3JzIGRvbid0IGhhdmUgdG8gdXNlIHRoZSBtYXRlcmlhbCwgYnV0IGlmIHdlIGRvLCB5b3UgZG8gbm90IGFjcXVpcmUKK2FueSByaWdodHMgcmVsYXRlZCB0byBNT0xNT0wuIFdlIHdpbGwgZ2l2ZSB5b3UgY3JlZGl0IGlmIGFwcGxpY2FibGUuCisKKworICAgICAgICAgICAgICAgICAgICBHRU5FUkFMIFJVTEVTIEZPUiBBTEwgRElTVFJJQlVUSU9OCisKK1RoZSBwZXJtaXNzaW9uIHRvIGRpc3RyaWJ1dGUgdGhpcyBwYWNrYWdlIHVuZGVyIGNlcnRhaW4gdmVyeSBzcGVjaWZpYworY29uZGl0aW9ucyBpcyBncmFudGVkIGluIGFkdmFuY2UsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGFuZCBmb2xsb3dpbmcKK2NvbmRpdGlvbnMgYXJlIG1ldC4KKworVGhlc2UgYXJjaGl2ZXMgbXVzdCBub3QgYmUgcmUtYXJjaGl2ZWQgdXNpbmcgYSBkaWZmZXJlbnQgbWV0aG9kIHdpdGhvdXQgdGhlCitleHBsaWNpdCBwZXJtaXNzaW9uIG9mIHRoZSBhdXRob3JzLiBZb3UgbWF5IHJlbmFtZSB0aGUgYXJjaGl2ZXMgb25seSB0bworbWVldCB0aGUgZmlsZSBuYW1lIGNvbnZlbnRpb25zIG9mIHlvdXIgc3lzdGVtIG9yIHRvIGF2b2lkIGZpbGUgbmFtZQorZHVwbGljYXRpb25zIGJ1dCB3ZSBhc2sgdGhhdCB5b3UgdHJ5IHRvIGtlZXAgZmlsZSBuYW1lcyBhcyBzaW1pbGFyIHRvIHRoZQorb3JpZ2luYWxzIGFzIHBvc3NpYmxlLgorCitZb3UgbXVzdCBkaXN0cmlidXRlIGEgZnVsbCBwYWNrYWdlIG9mIGFyY2hpdmVzIGFzIGRlc2NyaWJlZCBpbiB0aGUgbmV4dAorc2VjdGlvbi4KKworTm9uY29tbWVyY2lhbCBkaXN0cmlidXRpb24gKHN1Y2ggYXMgYSB1c2VyIGNvcHlpbmcgdGhlIHNvZnR3YXJlIGZvciBhCitwZXJzb25hbCBmcmllbmQgb3IgY29sbGVhZ3VlIGFuZCBub3QgY2hhcmdpbmcgbW9uZXkgb3Igc2VydmljZXMgZm9yIHRoYXQKK2NvcHkpIGhhcyBubyBvdGhlciByZXN0cmljdGlvbnMuIEFsbCBmb3JtcyBvZiBjb21tZXJjaWFsIGRpc3RyaWJ1dGlvbgorYXJlIG9ubHkgYWxsb3dlZCB3aXRoIGV4cGxpY2l0IHBlcm1pc3Npb24gb2YgdGhlIGNvcHlyaWdodCBob2xkZXJzLgorCitUaGUgY29weXJpZ2h0IGhvbGRlcnMgcmVzZXJ2ZSB0aGUgcmlnaHQgdG8gd2l0aGRyYXcgZGlzdHJpYnV0aW9uIHByaXZpbGVnZXMKK2Zyb20gYW55IGdyb3VwLCBpbmRpdmlkdWFsLCBvciBvcmdhbml6YXRpb24gZm9yIGFueSByZWFzb24uCisKKworICAgICAgICAgICAgICAgICAgICAgICBERUZJTklUSU9OIE9GICJGVUxMIFBBQ0tBR0UiCisKK01PTE1PTCBpcyBjb250YWluZWQgaW4gMyBhcmNoaXZlcyBmb3IgZWFjaCBoYXJkd2FyZSBwbGF0Zm9ybS4gMSkgQW4KK2V4ZWN1dGFibGUgYXJjaGl2ZSwgMikgQSBkb2N1bWVudGF0aW9uIGFyY2hpdmUsIDMpIFNvdXJjZSBjb2RlIGFyY2hpdmUuCisKK0EgImZ1bGwgcGFja2FnZSIgaXMgZGVmaW5lZCBhcyBvbmUgb2YgdGhlIGZvbGxvd2luZyBidW5kbGUgb3B0aW9uczoKKyAgIDEgIEFsbCBhcmNoaXZlcyAoZXhlY3V0YWJsZSwgZG9jcywgc291cmNlKQorICAgMiAgVXNlciBhcmNoaXZlcyAoZXhlY3V0YWJsZSwgZG9jcyBidXQgbm8gc291cmNlKQorICAgMyAgUHJvZ3JhbW1lciBhcmNoaXZlcyAoc291cmNlLCBkb2NzIGJ1dCBubyBleGVjdXRhYmxlKQorCitNT0xNT0wgaXMgb2ZmaWNpYWxseSBkaXN0cmlidXRlZCBmb3IgU0dJIHJ1bm5pbmcgSVJJWDsgU3VuIHJ1bm5pbmcgU3VuT1M7CitJQk0gcnVubmluZyBBSVg7IGFuZCBERUMgcnVubmluZyBEaWdpdGFsIFVOSVguIE90aGVyIHN5c3RlbXMgbWF5IGJlIGFkZGVkCitpbiB0aGUgZnV0dXJlLgorCitEaXN0cmlidXRvcnMgbmVlZCBub3Qgc3VwcG9ydCBhbGwgcGxhdGZvcm1zIGJ1dCBmb3IgZWFjaCBwbGF0Zm9ybSB5b3UKK3N1cHBvcnQgeW91IG11c3QgZGlzdHJpYnV0ZSBhIGZ1bGwgcGFja2FnZS4KKworCisgICAgICAgICAgICAgIENPTkRJVElPTlMgRk9SIERJU1RSSUJVVElPTiBPRiBPUklHSU5BTCBWRVJTSU9OCisKK09uLWxpbmUgc2VydmljZXMgbWF5IGRpc3RyaWJ1dGUgdGhlIE1PTE1PTCBhcmNoaXZlcyB1bmRlciB0aGUgY29uZGl0aW9ucworZm9sbG93aW5nIHRoaXMgc2VjdGlvbi4KKworVGhlIGFyY2hpdmVzIG11c3QgYWxsIGJlIGVhc2lseSBhdmFpbGFibGUgb24gdGhlIHNlcnZpY2UgYW5kIHNob3VsZCBiZQorZ3JvdXBlZCB0b2dldGhlciBpbiBhIHNpbWlsYXIgb24tbGluZSBhcmVhLgorCitJdCBpcyBzdHJvbmdseSByZXF1ZXN0ZWQgdGhhdCBvcGVyYXRvcnMgcmVtb3ZlIHByaW9yIHZlcnNpb25zIG9mIE1PTE1PTCB0bworYXZvaWQgdXNlciBjb25mdXNpb24gYW5kIHNpbXBsaWZ5IG9yIG1pbmltaXplIG91ciBzdXBwb3J0IGVmZm9ydHMuIFRoZXkKK3Nob3VsZCBhbHNvIG5vdGlmeSB0aGUgTU9MTU9MIGF1dGhvcnMgc28gdGhhdCB0aGV5IGNhbiBiZSBpbmZvcm1lZCBhYm91dAorbmV3IHZlcnNpb25zLgorCitUaGUgb24tbGluZSBzZXJ2aWNlIG1heSBvbmx5IGNoYXJnZSBzdGFuZGFyZCB1c2FnZSByYXRlcyBmb3IgdGhlIHRpbWUKK3JlcXVpcmVkIHRvIGRvd25sb2FkIHRoaXMgc29mdHdhcmUuIEEgcHJlbWl1bSBtYXkgbm90IGJlIGNoYXJnZWQgZm9yIHRoaXMKK3BhY2thZ2UuCisKKworICAgICAgICAgICAgICBDT05ESVRJT05TIEZPUiBESVNUUklCVVRJT04gT0YgQ1VTVE9NIFZFUlNJT05TCisKK1lvdSBtYXkgZGlzdHJpYnV0ZSBjdXN0b20gY29tcGlsZWQgdmVyc2lvbnMgb25seSBpZiB5b3UgY29tcGx5IHdpdGggdGhlCitmb2xsb3dpbmcgY29uZGl0aW9ucy4gVGhlc2UgY29uZGl0aW9ucyBhbHNvIGFwcGx5IHRvIGN1c3RvbSBkb2N1bWVudGF0aW9uCitiYXNlZCBvbiBvdXIgZmlsZXMuCisKKyAgICAgTWFyayB5b3VyIHZlcnNpb24gY2xlYXJseSBvbiBhbGwgbW9kaWZpZWQgZmlsZXMgc3RhdGluZyB0aGlzIHRvIGJlIGEKK21vZGlmaWVkIGFuZCB1bm9mZmljaWFsIHZlcnNpb24uCisgICAgIE1ha2UgYWxsIG9mIHlvdXIgbW9kaWZpY2F0aW9ucyB0byBNT0xNT0wgZnJlZWx5IGFuZCBwdWJsaWNseQorYXZhaWxhYmxlLgorICAgICBZb3UgbXVzdCBwcm92aWRlIGFsbCBNT0xNT0wgc3VwcG9ydCBmb3IgYWxsIHVzZXJzIHdobyB1c2UgeW91ciBjdXN0b20KK3ZlcnNpb24uIFRoZSBNT0xNT0wgYXV0aG9ycyBhcmUgbm90IG9ibGlnYXRlZCB0byBwcm92aWRlIHlvdSBvciB5b3VyIHVzZXJzCithbnkgdGVjaG5pY2FsIHN1cHBvcnQuCisgICAgIFlvdSBtdXN0IHByb3ZpZGUgZG9jdW1lbnRhdGlvbiBmb3IgYW55IGFuZCBhbGwgbW9kaWZpY2F0aW9ucyB0aGF0IHlvdQoraGF2ZSBtYWRlIHRvIHRoZSBwcm9ncmFtIHRoYXQgeW91IGFyZSBkaXN0cmlidXRpbmcuCisgICAgIEluY2x1ZGUgY2xlYXIgYW5kIG9idmlvdXMgaW5mb3JtYXRpb24gb24gaG93IHRvIG9idGFpbiB0aGUgb2ZmaWNpYWwKK01PTE1PTC4KKyAgICAgSW5jbHVkZSBjb250YWN0IGFuZCBzdXBwb3J0IGluZm9ybWF0aW9uIGZvciB5b3VyIHZlcnNpb24uIEluY2x1ZGUKK3RoaXMgaW5mb3JtYXRpb24gaW4gdGhlIHByaW50TXNnKCkgZnVudGlvbiBvZiB0aGUgc291cmNlIGZpbGUgTW9sTW9sLmMKK2FuZCBpbnN1cmUgdGhhdCB0aGUgcHJvZ3JhbSBwcm9taW5lbnRseSBkaXNwbGF5cyB0aGlzIGluZm9ybWF0aW9uLiBJbmNsdWRlCithbGwgY3JlZGl0cyBhbmQgY3JlZGl0IHNjcmVlbnMgZm9yIHRoZSBvZmZpY2lhbCB2ZXJzaW9uLgorICAgICBJbmNsdWRlIGEgY29weSBvZiB0aGlzIGRvY3VtZW50LgorCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRElTQ0xBSU1FUgorCitUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGFzIGlzIHdpdGhvdXQgYW55IGd1YXJhbnRlZXMgb3Igd2FycmFudHkuCitBbHRob3VnaCB0aGUgYXV0aG9ycyBoYXZlIGF0dGVtcHRlZCB0byBmaW5kIGFuZCBjb3JyZWN0IGFueSBidWdzIGluIHRoZQorcGFja2FnZSwgdGhleSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBhbnkgZGFtYWdlIG9yIGxvc3NlcyBvZiBhbnkga2luZAorY2F1c2VkIGJ5IHRoZSB1c2Ugb3IgbWlzdXNlIG9mIHRoZSBwYWNrYWdlLiBUaGUgYXV0aG9ycyBhcmUgdW5kZXIgbm8KK29ibGlnYXRpb24gdG8gcHJvdmlkZSBzZXJ2aWNlLCBjb3JyZWN0aW9ucywgb3IgdXBncmFkZXMgdG8gdGhpcyBwYWNrYWdlLgorCisKK1tFbmQgb2YgTGVnYWwgSW5mb3JtYXRpb25dCisKKworSWYgeW91IGhhdmUgYW55IHByb2JsZW1zIHdpdGggdGhlIHByb2dyYW0sIHRoZSBNT0xNT0wgcGVvcGxlIHdvdWxkIGxpa2UKK3RvIGhlYXIgYWJvdXQgdGhlbS4gQWxzbywgaWYgeW91IGhhdmUgYW55IGNvbW1lbnRzLCBxdWVzdGlvbnMgb3IKK2VuaGFuY2VtZW50cywgcGxlYXNlIGNvbnRhY3QgdGhlIE1PTE1PTCBhdXRob3JzIHVuZGVyIHRoZSBFLW1haWwgYWRkcmVzcworbW9sbW9sQG1vbC5iaW9sLmV0aHouY2guCisKKyAgIElucXVpcmllcyBtYXkgYmUgbWFkZSB0bzoKKworICAgU3BlY3Ryb3NwaW4gQUcKKyAgIFJldG8gS29yYWRpCisgICBJbmR1c3RyaWVzdHIuIDI2CisgICBDSC04MTE3IEZhZWxsYW5kZW4KKyAgIFN3aXR6ZXJsYW5kCisKKyAgIG9yOgorCisgICBJbnN0aXR1dCBmdWVyIE1vbGVrdWxhcmJpb2xvZ2llIHVuZCBCaW9waHlzaWsKKyAgIFJldG8gS29yYWRpIG9yIE1hcnRpbiBCaWxsZXRlcgorICAgRVRIIEhvZW5nZ2VyYmVyZworICAgQ0gtODA5MyBadWVyaWNoCisgICBTd2l0emVybGFuZAorCitUaGUgY3VycmVudCB2ZXJzaW9uIG9mIE1PTE1PTCBpcyBhbHdheXMgYXZhaWxhYmxlIG9uIHRoZSBmb2xsb3dpbmcgbWFzdGVyCitzZXJ2ZXJzOgorCisgICBmdHA6Ly9mdHAubW9sLmJpb2wuZXRoei5jaAorICAgZnRwOi8vZnRwLnNwZWN0cm9zcGluLmNoCisgICBmdHA6Ly9mdHAuYnJ1a2VyLmRlCisKK1NlZSB0aGUgUkVBRE1FIGZpbGUgZm9yIG1vcmUgZGV0YWlsZWQgaW5zdHJ1Y3Rpb25zIGFib3V0IGRvd25sb2FkaW5nIGFuZAoraW5zdGFsbGluZyB0aGUgcHJvZ3JhbS4KKworVGFwZXMgYW5kIHByaW50ZWQgbWFudWFscyBhcmUgYXZhaWxhYmxlIG9uIHJlcXVlc3QgZnJvbSB0aGUgc2Vjb25kIGFkZHJlc3MKK2dpdmVuIGFib3ZlLgorCitNb3JlIGluZm9ybWF0aW9uIGNhbiBiZSBmb3VuZCBhdDoKKworICAgaHR0cDovL3d3dy5tb2wuYmlvbC5ldGh6LmNoL3d1dGhyaWNoL3NvZnR3YXJlL21vbG1vbC8KKworVXNlcnMgYXJlIGVuY291cmFnZWQgdG8gcmVnaXN0ZXIgYXQgbW9sbW9sQG1vbC5iaW9sLmV0aHouY2gsIHNvIHRoYXQgdGhleQorY2FuIGJlIGluZm9ybWVkIG9mIG5ldyB2ZXJzaW9ucy4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL21vbHNjcmlwdCBiL2xpY2Vuc2VzL21vbHNjcmlwdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGRkNzFjCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvbW9sc2NyaXB0CkBAIC0wLDAgKzEsMjUgQEAKK01vbFNjcmlwdCB2Mi4xOiBBY2FkZW1pYyBsaWNlbnNlCitUaGlzIGlzIGEgbGljZW5zZSBmb3IgTW9sU2NyaXB0LCBhY2FkZW1pYyBzb2Z0d2FyZSB2ZXJzaW9uIDIuMSAoY29weXJpZ2h0IMKpIDE5OTctMTk5OCBQZXIgSi4gS3JhdWxpcyksIGEgcHJvZ3JhbSBmb3IgY3JlYXRpbmcgaW1hZ2VzIG9mIG1vbGVjdWxhciBzdHJ1Y3R1cmVzLgorCitUaGlzIGxpY2Vuc2UgaXMgdG8gYmUgc2lnbmVkIGJ5IHlvdSAoaGVyZWluYWZ0ZXIgcmVmZXJyZWQgdG8gYXMgdGhlICJMSUNFTlNFRSIpLCBhbmQgc3VibWl0dGVkIHRvIEF2YXRhciBTb2Z0d2FyZSBBQiAoaGVyZWluYWZ0ZXIgcmVmZXJyZWQgdG8gYXMgdGhlICJMSUNFTlNPUiIpLiBUaGUgY29tcHV0ZXIgcHJvZ3JhbSwgaW5jbHVkaW5nIHNvdXJjZSBjb2RlIGFuZCBkb2N1bWVudGF0aW9uLCBhcyB3ZWxsIGFzIGFueSBtb2RpZmljYXRpb25zIG9yIGRlcml2YXRpdmUgd29ya3MgbWFkZSBieSB0aGUgTElDRU5TRUUsIGFyZSBoZXJlaW5hZnRlciByZWZlcnJlZCB0byBjb2xsZWN0aXZlbHkgYXMgdGhlICJTT0ZUV0FSRSIuCisKK1Rlcm1zCisxLiBBIG5vbi1leGNsdXNpdmUsIG5vbi10cmFuc2ZlcmFibGUgbGljZW5zZSBpcyBncmFudGVkIHRvIHRoZSBMSUNFTlNFRSB0byBpbnN0YWxsIGFuZCB1c2UgdGhlIFNPRlRXQVJFIG9uIGFuIGFwcHJvcHJpYXRlIGNvbXB1dGVyIHN5c3RlbSBvciBzeXN0ZW1zIGxvY2F0ZWQgYXQgTElDRU5TRUUncyBpbnN0aXR1dGlvbiB0byB3aGljaCB0aGUgTElDRU5TRUUgaGFzIGF1dGhvcml6ZWQgYWNjZXNzLiBVc2Ugb2YgdGhlIFNPRlRXQVJFIGlzIHJlc3RyaWN0ZWQgdG8gTElDRU5TRUUgYW5kIGNvbGxhYm9yYXRvcnMgYXQgaGlzIGluc3RpdHV0aW9uIHdobyBoYXZlIGFncmVlZCB0byBhY2NlcHQgdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZS4KKworMi4gVGhlIExJQ0VOU09SIHJldGFpbnMgb3duZXJzaGlwIG9mIHRoZSBTT0ZUV0FSRSBkZWxpdmVyZWQgdG8gTElDRU5TRUUuIEFueSBtb2RpZmljYXRpb25zIG9yIGRlcml2YXRpdmUgd29ya3MgYmFzZWQgb24gdGhlIFNPRlRXQVJFIGFyZSBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIFNPRlRXQVJFIGFuZCBvd25lcnNoaXAgdGhlcmVvZiBpcyByZXRhaW5lZCBieSB0aGUgTElDRU5TT1IsIGFuZCBhcmUgdG8gYmUgbWFkZSBhdmFpbGFibGUgdG8gaGltIHVwb24gcmVxdWVzdC4KKworMy4gVGhlIExJQ0VOU0VFIG1heSBtYWtlIGEgcmVhc29uYWJsZSBudW1iZXIgb2YgY29waWVzIG9mIHRoZSBTT0ZUV0FSRSBmb3IgdGhlIHB1cnBvc2VzIG9mIGJhY2t1cCwgbWFpbnRlbmFuY2Ugb2YgdGhlIFNPRlRXQVJFLCBvciBkZXZlbG9wbWVudCBvZiBkZXJpdmF0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBTT0ZUV0FSRS4gVGhlc2UgYWRkaXRpb25hbCBjb3BpZXMgd2lsbCBjYXJyeSB0aGUgY29weXJpZ2h0IG5vdGljZSBhbmQgd2lsbCBiZSBjb250cm9sbGVkIGJ5IHRoaXMgbGljZW5zZS4KKworNC4gVGhlIExJQ0VOU0VFIHNoYWxsIG5vdCB1c2UgU09GVFdBUkUgZm9yIGFueSBwdXJwb3NlIChyZXNlYXJjaCBvciBvdGhlcndpc2UpIHRoYXQgaXMgc3VwcG9ydGVkIGJ5IGEgImZvciBwcm9maXQiIG9yZ2FuaXphdGlvbiB3aXRob3V0IHByaW9yIHdyaXR0ZW4gYXV0aG9yaXphdGlvbiBmcm9tIHRoZSBMSUNFTlNPUi4KKworNS4gVGhlIExJQ0VOU0VFIHNoYWxsIG5vdCBkaXNjbG9zZSBpbiBhbnkgZm9ybSBlaXRoZXIgdGhlIGRlbGl2ZXJlZCBTT0ZUV0FSRSBvciBhbnkgbW9kaWZpY2F0aW9ucyBvciBkZXJpdmF0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBTT0ZUV0FSRSB0byB0aGlyZCBwYXJ0aWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uIGZyb20gdGhlIExJQ0VOU09SLgorCis2LiBJZiB0aGUgTElDRU5TRUUgcmVjZWl2ZXMgYSByZXF1ZXN0IHRvIGZ1cm5pc2ggYWxsIG9yIGFueSBwb3J0aW9uIG9mIHRoZSBTT0ZUV0FSRSB0byBhbnkgdGhpcmQgcGFydHksIGhlIHdpbGwgbm90IGZ1bGZpbGwgc3VjaCBhIHJlcXVlc3QsIGFuZCB3aWxsIHJlZmVyIGl0IGluIHdyaXRpbmcgdG8gdGhlIExJQ0VOU09SLgorCis3LiBUaGUgTElDRU5TRUUgYWdyZWVzIHRoYXQgdGhlIFNPRlRXQVJFIGlzIGZ1cm5pc2hlZCBvbiBhbiAiYXMgaXMiIGJhc2lzLCBhbmQgdGhhdCB0aGUgTElDRU5TT1IgaW4gbm8gd2F5IHdhcnJhbnRzIHRoZSBTT0ZUV0FSRSBvciBhbnkgb2YgaXRzIHJlc3VsdHMgYW5kIGlzIGluIG5vIHdheSBsaWFibGUgZm9yIGFueSB1c2UgTElDRU5TRUUgbWFrZXMgb2YgdGhlIFNPRlRXQVJFLgorCis4LiBMSUNFTlNFRSBhZ3JlZXMgdGhhdCBhbnkgcmVwb3J0cyBvciBwdWJsaWNhdGlvbnMgb2YgcmVzdWx0cyBvYnRhaW5lZCB3aXRoIHRoZSBTT0ZUV0FSRSB3aWxsIGFja25vd2xlZGdlIGl0cyB1c2UgYnkgYW4gYXBwcm9wcmlhdGUgY2l0YXRpb24uIFRoaXMgd291bGQgcmVmZXIgdG8gdGhlIGZvbGxvd2luZyBwdWJsaWNhdGlvbjoKKworICAgIFBlciBKLiBLcmF1bGlzLCAiTU9MU0NSSVBUOiBBIFByb2dyYW0gdG8gUHJvZHVjZSBCb3RoIERldGFpbGVkIGFuZCBTY2hlbWF0aWMgUGxvdHMgb2YgUHJvdGVpbiBTdHJ1Y3R1cmVzIiwgSm91cm5hbCBvZiBBcHBsaWVkIENyeXN0YWxsb2dyYXBoeSAoMTk5MSkgdm9sIDI0LCBwcCA5NDYtOTUwLiAKKworOS4gVGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZSBzaGFsbCBub3QgYmUgbGltaXRlZCBpbiB0aW1lLiAKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL21vbmdyZWwgYi9saWNlbnNlcy9tb25ncmVsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ZDAzMzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9tb25ncmVsCkBAIC0wLDAgKzEsNTQgQEAKK1lvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIKK2VpdGhlciB0aGUgdGVybXMgb2YgdGhlIEdQTCBvciB0aGUgY29uZGl0aW9ucyBiZWxvdzoKKworMS4gWW91IG1heSBtYWtlIGFuZCBnaXZlIGF3YXkgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBzb3VyY2UgZm9ybSBvZiB0aGUKKyAgIHNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIHByb3ZpZGVkIHRoYXQgeW91IGR1cGxpY2F0ZSBhbGwgb2YgdGhlCisgICBvcmlnaW5hbCBjb3B5cmlnaHQgbm90aWNlcyBhbmQgYXNzb2NpYXRlZCBkaXNjbGFpbWVycy4KKworMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9mIHRoZSBzb2Z0d2FyZSBpbiBhbnkgd2F5LCBwcm92aWRlZCB0aGF0CisgICB5b3UgZG8gYXQgbGVhc3QgT05FIG9mIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgYSkgcGxhY2UgeW91ciBtb2RpZmljYXRpb25zIGluIHRoZSBQdWJsaWMgRG9tYWluIG9yIG90aGVyd2lzZSBtYWtlIHRoZW0KKyAgICAgRnJlZWx5IEF2YWlsYWJsZSwgc3VjaCBhcyBieSBwb3N0aW5nIHNhaWQgbW9kaWZpY2F0aW9ucyB0byBVc2VuZXQgb3IgYW4KKyAgICAgZXF1aXZhbGVudCBtZWRpdW0sIG9yIGJ5IGFsbG93aW5nIHRoZSBhdXRob3IgdG8gaW5jbHVkZSB5b3VyCisgICAgIG1vZGlmaWNhdGlvbnMgaW4gdGhlIHNvZnR3YXJlLgorCisgICAgIGIpIHVzZSB0aGUgbW9kaWZpZWQgc29mdHdhcmUgb25seSB3aXRoaW4geW91ciBjb3Jwb3JhdGlvbiBvcgorICAgICAgICBvcmdhbml6YXRpb24uCisKKyAgICAgYykgcmVuYW1lIGFueSBub24tc3RhbmRhcmQgZXhlY3V0YWJsZXMgc28gdGhlIG5hbWVzIGRvIG5vdCBjb25mbGljdCB3aXRoCisgICAgIHN0YW5kYXJkIGV4ZWN1dGFibGVzLCB3aGljaCBtdXN0IGFsc28gYmUgcHJvdmlkZWQuCisKKyAgICAgZCkgbWFrZSBvdGhlciBkaXN0cmlidXRpb24gYXJyYW5nZW1lbnRzIHdpdGggdGhlIGF1dGhvci4KKworMy4gWW91IG1heSBkaXN0cmlidXRlIHRoZSBzb2Z0d2FyZSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlCisgICBmb3JtLCBwcm92aWRlZCB0aGF0IHlvdSBkbyBhdCBsZWFzdCBPTkUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgICBhKSBkaXN0cmlidXRlIHRoZSBleGVjdXRhYmxlcyBhbmQgbGlicmFyeSBmaWxlcyBvZiB0aGUgc29mdHdhcmUsCisgICAgIHRvZ2V0aGVyIHdpdGggaW5zdHJ1Y3Rpb25zIChpbiB0aGUgbWFudWFsIHBhZ2Ugb3IgZXF1aXZhbGVudCkgb24gd2hlcmUKKyAgICAgdG8gZ2V0IHRoZSBvcmlnaW5hbCBkaXN0cmlidXRpb24uCisKKyAgICAgYikgYWNjb21wYW55IHRoZSBkaXN0cmlidXRpb24gd2l0aCB0aGUgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2Ugb2YgdGhlCisgICAgIHNvZnR3YXJlLgorCisgICAgIGMpIGdpdmUgbm9uLXN0YW5kYXJkIGV4ZWN1dGFibGVzIG5vbi1zdGFuZGFyZCBuYW1lcywgd2l0aAorICAgICAgICBpbnN0cnVjdGlvbnMgb24gd2hlcmUgdG8gZ2V0IHRoZSBvcmlnaW5hbCBzb2Z0d2FyZSBkaXN0cmlidXRpb24uCisKKyAgICAgZCkgbWFrZSBvdGhlciBkaXN0cmlidXRpb24gYXJyYW5nZW1lbnRzIHdpdGggdGhlIGF1dGhvci4KKworNC4gWW91IG1heSBtb2RpZnkgYW5kIGluY2x1ZGUgdGhlIHBhcnQgb2YgdGhlIHNvZnR3YXJlIGludG8gYW55IG90aGVyCisgICBzb2Z0d2FyZSAocG9zc2libHkgY29tbWVyY2lhbCkuICBCdXQgc29tZSBmaWxlcyBpbiB0aGUgZGlzdHJpYnV0aW9uCisgICBhcmUgbm90IHdyaXR0ZW4gYnkgdGhlIGF1dGhvciwgc28gdGhhdCB0aGV5IGFyZSBub3QgdW5kZXIgdGhpcyB0ZXJtcy4KKworNS4gVGhlIHNjcmlwdHMgYW5kIGxpYnJhcnkgZmlsZXMgc3VwcGxpZWQgYXMgaW5wdXQgdG8gb3IgcHJvZHVjZWQgYXMgCisgICBvdXRwdXQgZnJvbSB0aGUgc29mdHdhcmUgZG8gbm90IGF1dG9tYXRpY2FsbHkgZmFsbCB1bmRlciB0aGUKKyAgIGNvcHlyaWdodCBvZiB0aGUgc29mdHdhcmUsIGJ1dCBiZWxvbmcgdG8gd2hvbWV2ZXIgZ2VuZXJhdGVkIHRoZW0sIAorICAgYW5kIG1heSBiZSBzb2xkIGNvbW1lcmNpYWxseSwgYW5kIG1heSBiZSBhZ2dyZWdhdGVkIHdpdGggdGhpcworICAgc29mdHdhcmUuCisKKzYuIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUgorICAgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQKKyAgIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAgIFBVUlBPU0UuCisKKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvbW9wYWM3IGIvbGljZW5zZXMvbW9wYWM3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ZGYwYmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9tb3BhYzcKQEAgLTAsMCArMSwxNyBAQAorVGhlIG9yaWdpbmFsIGNvcHlyaWdodCBub3RpY2Ugb2YgTU9QQUM3OgorCitDCitDICAgICAgICAgTm90aWNlIG9mIFB1YmxpYyBEb21haW4gbmF0dXJlIG9mIE1PUEFDCitDCitDICAgICAgJ1RoaXMgY29tcHV0ZXIgcHJvZ3JhbSBpcyBhIHdvcmsgb2YgdGhlIFVuaXRlZCBTdGF0ZXMKK0MgICAgICAgR292ZXJubWVudCBhbmQgYXMgc3VjaCBpcyBub3Qgc3ViamVjdCB0byBwcm90ZWN0aW9uIGJ5CitDICAgICAgIGNvcHlyaWdodCAoMTcgVS5TLkMuICMgMTA1LikgIEFueSBwZXJzb24gd2hvIGZyYXVkdWxlbnRseQorQyAgICAgICBwbGFjZXMgYSBjb3B5cmlnaHQgbm90aWNlIG9yIGRvZXMgYW55IG90aGVyIGFjdCBjb250cmFyeQorQyAgICAgICB0byB0aGUgcHJvdmlzaW9ucyBvZiAxNyBVLlMuIENvZGUgNTA2KGMpIHNoYWxsIGJlIHN1YmplY3QKK0MgICAgICAgdG8gdGhlIHBlbmFsdGllcyBwcm92aWRlZCB0aGVyZWluLiAgVGhpcyBub3RpY2Ugc2hhbGwgbm90CitDICAgICAgIGJlIGFsdGVyZWQgb3IgcmVtb3ZlZCBmcm9tIHRoaXMgc29mdHdhcmUgYW5kIGlzIHRvIGJlIG9uCitDICAgICAgIGFsbCByZXByb2R1Y3Rpb25zLicKK0MKKworQ2hhbmdlcyBtYWRlIHRvIE1PUEFDNyBjb2RlIGluIHRoaXMgd29yayBtYXkgYmUgdXNlZC9kaXN0cmlidXRlZCB1bmRlciB0aGUKK3NhbWUgcnVsZXMgYXMgdGhlIG9yaWdpbmFsIE1PUEFDNyBwYWNrYWdlOyB0aGlzIHdvcmsgaXMgaW4gUHVibGljIERvbWFpbi4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL21wZzEyMy1lbCBiL2xpY2Vuc2VzL21wZzEyMy1lbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2IzOWNiCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvbXBnMTIzLWVsCkBAIC0wLDAgKzEsMTUgQEAKK1RoaXMgIHByb2dyYW0gaXMgIGZyZWUgIHNvZnR3YXJlIGFuZCAgY29tZXMgIHdpdGggYWJzb2x1dGVseSAgTk8KK1dBUlJBTlRZLiAgIFRoZSAgYXV0aG9yICBpcyAgbm90IHJlc3BvbnNpYmxlICBmb3IgIGFueSAgcG9zc2libGUKK2RlZmVjdHMgIGNhdXNlZCBieSB0aGlzICBzb2Z0d2FyZS4gIFlvdSAgY2FuIGZyZWVseSAgbW9kaWZ5IHRoaXMKK3Byb2dyYW0gIGZvciAgeW91ciBjb252ZW5pZW5jZS4gICBCdXQgIGlmICB5b3UgIHdhbnQgdG8gIHB1Ymxpc2gKK21vZGlmaWVkIHByb2dyYW0sICBwbGVhc2UgdGVsbCBtZSBiZWZvcmUgIGFubm91bmNlbWVudC4gIFRha2UgaXQKK2Vhc3kgdG8gd3JpdGUgbWUgY29tbWVudHMgYW5kIGJ1Zy1yZXBvcnRzLgorCQkJCQkJeXV1amlAZ2VudGVpLm9yZworCivjgZPjga7jg5fjg63jgrDjg6njg6Djga/jg5Xjg6rjg7zjgr3jg5Xjg4jjgqbjgqfjgqLjgajjgZfjgabphY3luIPjgZfjgb7jgZnjgILjgZPjga7jg5fjg63jgrDjg6kKK+ODoOOBruWIqeeUqOOBq+OCiOOBo+OBpueUn+OBmOOBn+OBhOOBi+OBquOCi+e1kOaenOOBq+WvvuOBl+OBpuOCguS9nOiAheOBr+iyrOS7u+OCkuiyoOOBhOOBvuOBmwor44KT44CC44Kz44Oh44Oz44OI44KE44OQ44Kw44Os44Od44O844OI44Gv44GK44GK44GE44Gr5q2T6L+O44GX44G+44GZ44Gu44Gn5b6h5rCX6Lu944Gr5b6h6YCj57WhCivjgY/jgaDjgZXjgYTjgILjgb7jgZ/jg5fjg63jgrDjg6njg6Djgavlr77jgZnjgovlgIvkurrnmoTjgarkv67mraPjga/oh6rnlLHjgavjgZfjgabpoILjgYTjgabmp4sKK+OBhOOBvuOBm+OCk+OBjOOAgeOBneOCjOOCkuWFrOmWi+OBl+OBn+OBhOWgtOWQiOOBr+engeOBvuOBp+W+oemAo+e1oeOBj+OBoOOBleOBhOOAgumAo+e1oeOBr+S7pQor5LiL44Gu44Ki44OJ44Os44K544G+44Gn44GK6aGY44GE44GX44G+44GZKDIwMTEvMeePvuWcqCnjgIIKKwkJCQkJCXl1dWppQGdlbnRlaS5vcmcKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL21wbHVzLWZvbnRzIGIvbGljZW5zZXMvbXBsdXMtZm9udHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzUxZDAwNAotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL21wbHVzLWZvbnRzCkBAIC0wLDAgKzEsMTYgQEAKK00rIEZPTlRTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb3B5cmlnaHQgKEMpIDIwMDMtMjAwNiBNKyBGT05UUyBQUk9KRUNUCisKKy0KKworTElDRU5TRV9FCisKKworCisKK1RoZXNlIGZvbnRzIGFyZSBmcmVlIHNvZnR3YXJlcy4KK1VubGltaXRlZCBwZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gdXNlLCBjb3B5LCBhbmQgZGlzdHJpYnV0ZSBpdCwgd2l0aAorb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGVpdGhlciBjb21tZXJjaWFsbHkgYW5kIG5vbmNvbW1lcmNpYWxseS4KK1RIRVNFIEZPTlRTIEFSRSBQUk9WSURFRCAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkuCisKKworaHR0cDovL21wbHVzLWZvbnRzLnNvdXJjZWZvcmdlLmpwL21wbHVzLW91dGxpbmUtZm9udHMvCmRpZmYgLS1naXQgYS9saWNlbnNlcy9tc2VydiBiL2xpY2Vuc2VzL21zZXJ2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4ZGNhN2IKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9tc2VydgpAQCAtMCwwICsxLDM1IEBACitBbGwgb2YgdGhlIGRvY3VtZW50YXRpb24gYW5kIHNvZnR3YXJlIGluY2x1ZGVkIGluIHRoZSBNc2VydiByZWxlYXNlcyBpcworY29weXJpZ2h0ZWQgYnkgSmFtZXMgUG9uZGVyIDxqYW1lc0BzcXVpc2gubmV0Pi4KKworQ29weXJpZ2h0IDE5OTktMjAwMyBKYW1lcyBQb25kZXIuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKK21ldDoKKworKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisqIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSwKKyAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSBKYW1lcyBQb25kZXIuIgorCisqIE5laXRoZXIgdGhlIG5hbWUgb2YgbXlzZWxmIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZAorICB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAorICBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKKyAgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VECisgIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL215c3BlbGwtZW5fQ0EtS2V2aW5BdGtpbnNvbiBiL2xpY2Vuc2VzL215c3BlbGwtZW5fQ0EtS2V2aW5BdGtpbnNvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYjI5NDUxCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvbXlzcGVsbC1lbl9DQS1LZXZpbkF0a2luc29uCkBAIC0wLDAgKzEsMTAgQEAKKyAgQ29weXJpZ2h0IDIwMDAgYnkgS2V2aW4gQXRraW5zb24KKworICBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoZXNlIHdvcmQKKyAgbGlzdHMsIHRoZSBhc3NvY2lhdGVkIHNjcmlwdHMsIHRoZSBvdXRwdXQgY3JlYXRlZCBmcm9tIHRoZSBzY3JpcHRzLAorICBhbmQgaXRzIGRvY3VtZW50YXRpb24gZm9yIGFueSBwdXJwb3NlIGlzIGhlcmVieSBncmFudGVkIHdpdGhvdXQgZmVlLAorICBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhcnMgaW4gYWxsIGNvcGllcyBhbmQKKyAgdGhhdCBib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4KKyAgc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiBLZXZpbiBBdGtpbnNvbiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMKKyAgYWJvdXQgdGhlIHN1aXRhYmlsaXR5IG9mIHRoaXMgYXJyYXkgZm9yIGFueSBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZAorICAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvbXlzcGVsbC1ydV9SVS1BTGV4YW5kZXJMZWJlZGV2IGIvbGljZW5zZXMvbXlzcGVsbC1ydV9SVS1BTGV4YW5kZXJMZWJlZGV2Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3YWJmNjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9teXNwZWxsLXJ1X1JVLUFMZXhhbmRlckxlYmVkZXYKQEAgLTAsMCArMSwyMCBAQAorTElDRU5TRSBUeHQKKz09PT09PT09PT09PQorVGhlIG1haW4gY29tcG9uZW50cyBvZiBSVVMtSVNQRUxMIHBhY2thZ2U6CisKKyAgICAqIHRoZSBSdXNzaWFuIGFmZml4IGZpbGUgKHJ1c3NpYW4uYWZmLmtvaSkgYW5kCisgICAgKiBhIHNldCBvZiBkaWN0aW9uYXJpZXMgKGJhc2Uua29pLCBhYmJyZXYua29pLCBjb21wdXRlci5rb2ksCisgICAgICBmb3JfbmFtZS5rb2ksIGdlb2dyYXBoeS5rb2ksIHJhcmUua29pLCBzY2llbmNlLmtvaSkKKworaW4gdGhlaXIgb3JpZ2luYWwgZW5jb2RpbmcgKGtvaTgtcikgYW5kIGFueSBvdGhlciBlbmNvZGluZyBwcm9kdWNlZAorZnJvbSBpdCBhcyB3ZWxsIGFzIGFmZml4IGZpbGUgYW5kIGRpY3Rpb25hcmllcyBwcmVwYXJlZCBmcm9tIHRoZQorYWJvdmUgZmlsZXMgZm9yIE15U3BlbGwgc3BlbGwgY2hlY2tlciBhcmUgY29weXJpZ2h0IChjKSAxOTk3LTIwMDQKK2J5IEFsZXhhbmRlciBMZWJlZGV2LgorCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgcmVkaXN0cmlidXRlIGlzIGdyYW50ZWQuICBQZXJtaXNzaW9uIHRvCityZWRpc3RyaWJ1dGUgbW9kaWZpY2F0aW9ucyBpbiBwYXRjaCBmb3JtIGlzIGdyYW50ZWQuICBQZXJtaXNzaW9uCit0byByZWRpc3RyaWJ1dGUgYmluYXJpZXMgbWFkZSBvZiBtb2RpZmllZCBzb3VyY2VzIGlzIGdyYW50ZWQuCitBbGwgb3RoZXIgcmlnaHRzIHJlc2VydmVkLgorCitBbGV4YW5kZXIgTGViZWRldgorPHN3YW5Ac2NvbjE1NS5waHlzLm1zdS5zdT4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL25hbWQgYi9saWNlbnNlcy9uYW1kCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxZTlkNTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9uYW1kCkBAIC0wLDAgKzEsMTQ0IEBACisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgICAgICAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICBOQU1EIE1vbGVjdWxhciBEeW5hbWljcyBTb2Z0d2FyZSAgICAgICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgIE5vbi1FeGNsdXNpdmUsIE5vbi1Db21tZXJjaWFsIFVzZSBMaWNlbnNlICAgICAgICAgICAgICB8Cit8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCisKK1Vwb24gZXhlY3V0aW9uIG9mIHRoaXMgQWdyZWVtZW50IGJ5IHRoZSBwYXJ0eSBpZGVudGlmaWVkIGJlbG93ICgiTGljZW5zZWUiKSwgCitUaGUgQm9hcmQgb2YgVHJ1c3RlZXMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgICgiSWxsaW5vaXMiKSwgb24gYmVoYWxmIAorb2YgVGhlIFRoZW9yZXRpY2FsIGFuZCBDb21wdXRhdGlvbmFsIEJpb3BoeXNpY3MgR3JvdXAgKCJUQ0JHIikgaW4gdGhlIEJlY2ttYW4KK0luc3RpdHV0ZSwgd2lsbCBwcm92aWRlIHRoZSBOQU1EIG1vbGVjdWxhciBkeW5hbWljcyBzb2Z0d2FyZSAoIk5BTUQiKSBpbgorRXhlY3V0YWJsZSBDb2RlIGFuZC9vciBTb3VyY2UgQ29kZSBmb3JtICgiU29mdHdhcmUiKSB0byBMaWNlbnNlZSwgc3ViamVjdCB0bwordGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gRm9yIHB1cnBvc2VzIG9mIHRoaXMgQWdyZWVtZW50LAorRXhlY3V0YWJsZSBDb2RlIGlzIHRoZSBjb21waWxlZCBjb2RlLCB3aGljaCBpcyByZWFkeSB0byBydW4gb24gTGljZW5zZWUncworY29tcHV0ZXIuIFNvdXJjZSBjb2RlIGNvbnNpc3RzIG9mIGEgc2V0IG9mIGZpbGVzIHdoaWNoIGNvbnRhaW4gdGhlIGFjdHVhbAorcHJvZ3JhbSBjb21tYW5kcyB0aGF0IGFyZSBjb21waWxlZCB0byBmb3JtIHRoZSBFeGVjdXRhYmxlIENvZGUuCisKKzEuIFRoZSBTb2Z0d2FyZSBpcyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb3duZWQgYnkgSWxsaW5vaXMsIGFuZCBhbGwgcmlnaHQsIAordGl0bGUgYW5kIGludGVyZXN0LCBpbmNsdWRpbmcgY29weXJpZ2h0LCByZW1haW4gd2l0aCBJbGxpbm9pcy4gIElsbGlub2lzIAorZ3JhbnRzLCBhbmQgTGljZW5zZWUgaGVyZWJ5IGFjY2VwdHMsIGEgcmVzdHJpY3RlZCwgbm9uLWV4Y2x1c2l2ZSwgCitub24tdHJhbnNmZXJhYmxlIGxpY2Vuc2UgdG8gdXNlIHRoZSBTb2Z0d2FyZSBmb3IgYWNhZGVtaWMsIHJlc2VhcmNoIGFuZCAKK2ludGVybmFsIGJ1c2luZXNzIHB1cnBvc2VzIG9ubHksIGUuZy4gbm90IGZvciBjb21tZXJjaWFsIHVzZSAoc2VlIENsYXVzZSA3IAorYmVsb3cpLCB3aXRob3V0IGEgZmVlLgorCisyLiBMaWNlbnNlZSBtYXksIGF0IGl0cyBvd24gZXhwZW5zZSwgY3JlYXRlIGFuZCBmcmVlbHkgZGlzdHJpYnV0ZSAKK2NvbXBsaW1lbnRhcnkgd29ya3MgdGhhdCBpbnRlcm9wZXJhdGUgd2l0aCB0aGUgU29mdHdhcmUsIGRpcmVjdGluZyBvdGhlcnMgdG8gCit0aGUgVENCRyBzZXJ2ZXIgdG8gbGljZW5zZSBhbmQgb2J0YWluIHRoZSBTb2Z0d2FyZSBpdHNlbGYuIExpY2Vuc2VlIG1heSwgYXQgCitpdHMgb3duIGV4cGVuc2UsIG1vZGlmeSB0aGUgU29mdHdhcmUgdG8gbWFrZSBkZXJpdmF0aXZlIHdvcmtzLiAgRXhjZXB0IGFzIAorZXhwbGljaXRseSBwcm92aWRlZCBiZWxvdywgdGhpcyBMaWNlbnNlIHNoYWxsIGFwcGx5IHRvIGFueSBkZXJpdmF0aXZlIHdvcmsgCithcyBpdCBkb2VzIHRvIHRoZSBvcmlnaW5hbCBTb2Z0d2FyZSBkaXN0cmlidXRlZCBieSBJbGxpbm9pcy4gIEFueSBkZXJpdmF0aXZlIAord29yayBzaG91bGQgYmUgY2xlYXJseSBtYXJrZWQgYW5kIHJlbmFtZWQgdG8gbm90aWZ5IHVzZXJzIHRoYXQgaXQgaXMgYSAKK21vZGlmaWVkIHZlcnNpb24gYW5kIG5vdCB0aGUgb3JpZ2luYWwgU29mdHdhcmUgZGlzdHJpYnV0ZWQgYnkgSWxsaW5vaXMuICAKK0xpY2Vuc2VlIGFncmVlcyB0byByZXByb2R1Y2UgdGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIG90aGVyIHByb3ByaWV0YXJ5IAorbWFya2luZ3Mgb24gYW55IGRlcml2YXRpdmUgd29yayBhbmQgdG8gaW5jbHVkZSBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvZiBzdWNoIAord29yayB0aGUgYWNrbm93bGVkZ2VtZW50OgorCisiVGhpcyBzb2Z0d2FyZSBpbmNsdWRlcyBjb2RlIGRldmVsb3BlZCBieSB0aGUgVGhlb3JldGljYWwgYW5kIENvbXB1dGF0aW9uYWwKKyBCaW9waHlzaWNzIEdyb3VwIGluIHRoZSBCZWNrbWFuIEluc3RpdHV0ZSBmb3IgQWR2YW5jZWQgU2NpZW5jZSBhbmQKKyBUZWNobm9sb2d5IGF0IHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzIGF0IFVyYmFuYS1DaGFtcGFpZ24uIgorCitMaWNlbnNlZSBtYXkgcmVkaXN0cmlidXRlIHdpdGhvdXQgcmVzdHJpY3Rpb24gd29ya3Mgd2l0aCB1cCB0byAxLzIgb2YgdGhlaXIgCitub24tY29tbWVudCBzb3VyY2UgY29kZSBkZXJpdmVkIGZyb20gYXQgbW9zdCAxLzEwIG9mIHRoZSBub24tY29tbWVudCBzb3VyY2UgCitjb2RlIGRldmVsb3BlZCBieSBJbGxpbm9pcyBhbmQgY29udGFpbmVkIGluIHRoZSBTb2Z0d2FyZSwgcHJvdmlkZWQgdGhhdCB0aGUgCithYm92ZSBkaXJlY3Rpb25zIGZvciBub3RpY2UgYW5kIGFja25vd2xlZGdlbWVudCBhcmUgb2JzZXJ2ZWQuICBBbnkgb3RoZXIgCitkaXN0cmlidXRpb24gb2YgdGhlIFNvZnR3YXJlIG9yIGFueSBkZXJpdmF0aXZlIHdvcmsgcmVxdWlyZXMgYSBzZXBhcmF0ZSAKK2xpY2Vuc2Ugd2l0aCBJbGxpbm9pcy4gIExpY2Vuc2VlIG1heSBjb250YWN0IElsbGlub2lzIChuYW1kQGtzLnVpdWMuZWR1KSB0byAKK25lZ290aWF0ZSBhbiBhcHByb3ByaWF0ZSBsaWNlbnNlIGZvciBzdWNoIGRpc3RyaWJ1dGlvbi4KKworMy4gRXhjZXB0IGFzIGV4cHJlc3NseSBzZXQgZm9ydGggaW4gdGhpcyBBZ3JlZW1lbnQsIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgCisiQVMgSVMiIEFORCBJTExJTk9JUyBNQUtFUyBOTyBSRVBSRVNFTlRBVElPTlMgQU5EIEVYVEVORFMgTk8gV0FSUkFOVElFUyBPRiAKK0FOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFdBUlJBTlRJRVMgCitPUiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SIFRIQVQgVEhFIFVTRSBPRiAKK1RIRSBTT0ZUV0FSRSBXSUxMIE5PVCBJTkZSSU5HRSBBTlkgUEFURU5ULCBUUkFERU1BUkssIE9SIE9USEVSIFJJR0hUUy4gCitMSUNFTlNFRSBBU1NVTUVTIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUkVTVUxUUyBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIAorU09GVFdBUkUgQU5EL09SIEFTU09DSUFURUQgTUFURVJJQUxTLiAgTElDRU5TRUUgQUdSRUVTIFRIQVQgVU5JVkVSU0lUWSBTSEFMTCAKK05PVCBCRSBIRUxEIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIENPTlNFUVVFTlRJQUwsIE9SIElOQ0lERU5UQUwgCitEQU1BR0VTIFdJVEggUkVTUEVDVCBUTyBBTlkgQ0xBSU0gQlkgTElDRU5TRUUgT1IgQU5ZIFRISVJEIFBBUlRZIE9OIEFDQ09VTlQgCitPRiBPUiBBUklTSU5HIEZST00gVEhJUyBBR1JFRU1FTlQgT1IgVVNFIE9GIFRIRSBTT0ZUV0FSRSBBTkQvT1IgQVNTT0NJQVRFRCAKK01BVEVSSUFMUy4KKworNC4gTGljZW5zZWUgdW5kZXJzdGFuZHMgdGhlIFNvZnR3YXJlIGlzIHByb3ByaWV0YXJ5IHRvIElsbGlub2lzLiBMaWNlbnNlZSAgCithZ3JlZXMgdG8gdGFrZSBhbGwgcmVhc29uYWJsZSBzdGVwcyB0byBpbnN1cmUgdGhhdCB0aGUgU29mdHdhcmUgaXMgIAorcHJvdGVjdGVkIGFuZCBzZWN1cmVkIGZyb20gdW5hdXRob3JpemVkIGRpc2Nsb3N1cmUsIHVzZSwgb3IgcmVsZWFzZSBhbmQgIAord2lsbCB0cmVhdCBpdCB3aXRoIGF0IGxlYXN0IHRoZSBzYW1lIGxldmVsIG9mIGNhcmUgYXMgTGljZW5zZWUgd291bGQgdXNlIHRvICAKK3Byb3RlY3QgYW5kIHNlY3VyZSBpdHMgb3duIHByb3ByaWV0YXJ5IGNvbXB1dGVyIHByb2dyYW1zIGFuZC9vciBpbmZvcm1hdGlvbiwgCitidXQgdXNpbmcgbm8gbGVzcyB0aGFuIGEgcmVhc29uYWJsZSBzdGFuZGFyZCBvZiBjYXJlLiAgTGljZW5zZWUgYWdyZWVzIHRvIAorcHJvdmlkZSB0aGUgU29mdHdhcmUgb25seSB0byBhbnkgb3RoZXIgcGVyc29uIG9yIGVudGl0eSB3aG8gaGFzIHJlZ2lzdGVyZWQgCit3aXRoIElsbGlub2lzLiBJZiBsaWNlbnNlZSBpcyBub3QgcmVnaXN0ZXJpbmcgYXMgYW4gaW5kaXZpZHVhbCBidXQgYXMgYW4gCitpbnN0aXR1dGlvbiBvciBjb3Jwb3JhdGlvbiBlYWNoIG1lbWJlciBvZiB0aGUgaW5zdGl0dXRpb24gb3IgY29ycG9yYXRpb24gCit3aG8gaGFzIGFjY2VzcyB0byBvciB1c2VzIFNvZnR3YXJlIG11c3QgYWdyZWUgdG8gYW5kIGFiaWRlIGJ5IHRoZSB0ZXJtcyAKK29mIHRoaXMgbGljZW5zZS4gSWYgTGljZW5zZWUgYmVjb21lcyBhd2FyZSBvZiBhbnkgdW5hdXRob3JpemVkIGxpY2Vuc2luZywgCitjb3B5aW5nIG9yIHVzZSBvZiB0aGUgU29mdHdhcmUsIExpY2Vuc2VlIHNoYWxsIHByb21wdGx5IG5vdGlmeSBJbGxpbm9pcyAKK2luIHdyaXRpbmcuIExpY2Vuc2VlIGV4cHJlc3NseSBhZ3JlZXMgdG8gdXNlIHRoZSBTb2Z0d2FyZSBvbmx5IGluIHRoZSAKK21hbm5lciBhbmQgZm9yIHRoZSBzcGVjaWZpYyB1c2VzIGF1dGhvcml6ZWQgaW4gdGhpcyBBZ3JlZW1lbnQuCisKKzUuIEJ5IHVzaW5nIG9yIGNvcHlpbmcgdGhpcyBTb2Z0d2FyZSwgTGljZW5zZWUgYWdyZWVzIHRvIGFiaWRlIGJ5IHRoZSAgCitjb3B5cmlnaHQgbGF3IGFuZCBhbGwgb3RoZXIgYXBwbGljYWJsZSBsYXdzIG9mIHRoZSBVLlMuIGluY2x1ZGluZywgYnV0IG5vdCAgCitsaW1pdGVkIHRvLCBleHBvcnQgY29udHJvbCBsYXdzIGFuZCB0aGUgdGVybXMgb2YgdGhpcyBsaWNlbnNlLiBJbGxpbm9pcyAgCitzaGFsbCBoYXZlIHRoZSByaWdodCB0byB0ZXJtaW5hdGUgdGhpcyBsaWNlbnNlIGltbWVkaWF0ZWx5IGJ5IHdyaXR0ZW4gIAorbm90aWNlIHVwb24gTGljZW5zZWUncyBicmVhY2ggb2YsIG9yIG5vbi1jb21wbGlhbmNlIHdpdGgsIGFueQordGVybXMgb2YgdGhlIGxpY2Vuc2UuIExpY2Vuc2VlIG1heSBiZSBoZWxkIGxlZ2FsbHkgcmVzcG9uc2libGUgZm9yIGFueSAgCitjb3B5cmlnaHQgaW5mcmluZ2VtZW50IHRoYXQgaXMgY2F1c2VkIG9yIGVuY291cmFnZWQgYnkgaXRzIGZhaWx1cmUgdG8gIAorYWJpZGUgYnkgdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZS4gVXBvbiB0ZXJtaW5hdGlvbiwgTGljZW5zZWUgYWdyZWVzIHRvICAKK2Rlc3Ryb3kgYWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUgaW4gaXRzIHBvc3Nlc3Npb24gYW5kIHRvIHZlcmlmeSBzdWNoICAKK2Rlc3RydWN0aW9uIGluIHdyaXRpbmcuCisKKzYuIFRoZSB1c2VyIGFncmVlcyB0aGF0IGFueSByZXBvcnRzIG9yIHB1Ymxpc2hlZCByZXN1bHRzIG9idGFpbmVkIHdpdGggIAordGhlIFNvZnR3YXJlIHdpbGwgYWNrbm93bGVkZ2UgaXRzIHVzZSBieSB0aGUgYXBwcm9wcmlhdGUgY2l0YXRpb24gYXMgIAorZm9sbG93czoKKworIk5BTUQgd2FzIGRldmVsb3BlZCBieSB0aGUgVGhlb3JldGljYWwgYW5kIENvbXB1dGF0aW9uYWwgQmlvcGh5c2ljcyBHcm91cCBpbgorIHRoZSBCZWNrbWFuIEluc3RpdHV0ZSBmb3IgQWR2YW5jZWQgU2NpZW5jZSBhbmQgVGVjaG5vbG9neSBhdCB0aGUgVW5pdmVyc2l0eQorIG9mIElsbGlub2lzIGF0IFVyYmFuYS1DaGFtcGFpZ24uIgorCitBbnkgcHVibGlzaGVkIHdvcmsgd2hpY2ggdXRpbGl6ZXMgTkFNRCBzaGFsbCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgcmVmZXJlbmNlOgorCisiTGF4bWlrYW50IEthbGUsIFJvYmVydCBTa2VlbCwgTWlsaW5kIEJoYW5kYXJrYXIsIFJvYmVydCBCcnVubmVyLAorIEF0dGlsYSBHdXJzb3ksIE5lYWwgS3Jhd2V0eiwgSmFtZXMgUGhpbGxpcHMsIEFyaXRvbW8gU2hpbm96YWtpLAorIEtyaXNobmFuIFZhcmFkYXJhamFuLCBhbmQgS2xhdXMgU2NodWx0ZW4uIE5BTUQyOiBHcmVhdGVyIHNjYWxhYmlsaXR5CisgZm9yIHBhcmFsbGVsIG1vbGVjdWxhciBkeW5hbWljcy4gIEouIENvbXAuIFBoeXMuLCAxNTE6MjgzLTMxMiwgMTk5OS4iCisKK0VsZWN0cm9uaWMgZG9jdW1lbnRzIHdpbGwgaW5jbHVkZSBhIGRpcmVjdCBsaW5rIHRvIHRoZSBvZmZpY2lhbCBOQU1EIHBhZ2UgIAorYXQgaHR0cDovL3d3dy5rcy51aXVjLmVkdS9SZXNlYXJjaC9uYW1kLworCis3LiBDb21tZXJjaWFsIHVzZSBvZiB0aGUgU29mdHdhcmUsIG9yIGRlcml2YXRpdmUgd29ya3MgYmFzZWQgdGhlcmVvbiwgIAorUkVRVUlSRVMgQSBDT01NRVJDSUFMIExJQ0VOU0UuICBTaG91bGQgTGljZW5zZWUgd2lzaCB0byBtYWtlIGNvbW1lcmNpYWwgCit1c2Ugb2YgdGhlIFNvZnR3YXJlLCBMaWNlbnNlZSB3aWxsIGNvbnRhY3QgSWxsaW5vaXMgKG5hbWRAa3MudWl1Yy5lZHUpIHRvIAorbmVnb3RpYXRlIGFuIGFwcHJvcHJpYXRlIGxpY2Vuc2UgZm9yIHN1Y2ggdXNlLiBDb21tZXJjaWFsIHVzZSBpbmNsdWRlczogCisoMSkgaW50ZWdyYXRpb24gb2YgYWxsIG9yIHBhcnQgb2YgdGhlIFNvZnR3YXJlIGludG8gYSBwcm9kdWN0IGZvciBzYWxlLCAKK2xlYXNlIG9yIGxpY2Vuc2UgYnkgb3Igb24gYmVoYWxmIG9mIExpY2Vuc2VlIHRvIHRoaXJkIHBhcnRpZXMsIG9yIAorKDIpIGRpc3RyaWJ1dGlvbiBvZiB0aGUgU29mdHdhcmUgdG8gdGhpcmQgcGFydGllcyB0aGF0IG5lZWQgaXQgdG8gCitjb21tZXJjaWFsaXplIHByb2R1Y3Qgc29sZCBvciBsaWNlbnNlZCBieSBvciBvbiBiZWhhbGYgb2YgTGljZW5zZWUuCisKKzguIEdvdmVybm1lbnQgUmlnaHRzLiBCZWNhdXNlIHN1YnN0YW50aWFsIGdvdmVybm1lbnRhbCBmdW5kcyBoYXZlIGJlZW4gIAordXNlZCBpbiB0aGUgZGV2ZWxvcG1lbnQgb2YgTkFNRCwgYW55IHBvc3Nlc3Npb24sIHVzZSBvciBzdWJsaWNlbnNlIG9mIHRoZSAgCitTb2Z0d2FyZSBieSBvciB0byB0aGUgVW5pdGVkIFN0YXRlcyBnb3Zlcm5tZW50IHNoYWxsIGJlIHN1YmplY3QgdG8gc3VjaCAgCityZXF1aXJlZCByZXN0cmljdGlvbnMuCisKKzkuIE5BTUQgaXMgYmVpbmcgZGlzdHJpYnV0ZWQgYXMgYSByZXNlYXJjaCBhbmQgdGVhY2hpbmcgdG9vbCBhbmQgYXMgIAorc3VjaCwgVENCRyBlbmNvdXJhZ2VzIGNvbnRyaWJ1dGlvbnMgZnJvbSB1c2VycyBvZiB0aGUgY29kZSB0aGF0IG1pZ2h0LCBhdCAgCitJbGxpbm9pcycgc29sZSBkaXNjcmV0aW9uLCBiZSB1c2VkIG9yIGluY29ycG9yYXRlZCB0byBtYWtlIHRoZSBiYXNpYyAgCitvcGVyYXRpbmcgZnJhbWV3b3JrIG9mIHRoZSBTb2Z0d2FyZSBhIG1vcmUgc3RhYmxlLCBmbGV4aWJsZSwgYW5kL29yIHVzZWZ1bCAgCitwcm9kdWN0LiAgTGljZW5zZWVzIHdobyBjb250cmlidXRlIHRoZWlyIGNvZGUgdG8gYmVjb21lIGFuIGludGVybmFsICAKK3BvcnRpb24gb2YgdGhlIFNvZnR3YXJlIGFncmVlIHRoYXQgc3VjaCBjb2RlIG1heSBiZSBkaXN0cmlidXRlZCBieSAgCitJbGxpbm9pcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBtYXkgYmUgcmVxdWlyZWQgdG8gc2lnbiBhbiAgCisiQWdyZWVtZW50IFJlZ2FyZGluZyBDb250cmlidXRvcnkgQ29kZSBmb3IgTkFNRCBTb2Z0d2FyZSIgYmVmb3JlIElsbGlub2lzICAKK2NhbiBhY2NlcHQgaXQgKGNvbnRhY3QgbmFtZEBrcy51aXVjLmVkdSBmb3IgYSBjb3B5KS4KKworVU5ERVJTVE9PRCBBTkQgQUdSRUVELgorCisKK0NvbnRhY3QgSW5mb3JtYXRpb246CisKK1RoZSBiZXN0IGNvbnRhY3QgcGF0aCBmb3IgbGljZW5zaW5nIGlzc3VlcyBpcyBieSBlLW1haWwgdG8gIAorbmFtZEBrcy51aXVjLmVkdSBvciBzZW5kIGNvcnJlc3BvbmRlbmNlIHRvOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOQU1EIFRlYW0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhlb3JldGljYWwgYW5kIENvbXB1dGF0aW9uYWwgQmlvcGh5c2ljcyBHcm91cAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCZWNrbWFuIEluc3RpdHV0ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbml2ZXJzaXR5IG9mIElsbGlub2lzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDQwNSBOb3J0aCBNYXRoZXdzIE1DLTI1MQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVcmJhbmEsIElsbGlub2lzIDYxODAxIFVTQQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGQVg6ICgyMTcpIDI0NC02MDc4CisKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL25hdXR5IGIvbGljZW5zZXMvbmF1dHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM0M2I4OAotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL25hdXR5CkBAIC0wLDAgKzEsMyBAQAorQ29weXJpZ2h0ICgxOTg0LTIwMTApIEJyZW5kYW4gTWNLYXkuIEFsbCByaWdodHMgcmVzZXJ2ZWQuIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdpdmVuIGZvciB1c2UgYW5kL29yIGRpc3RyaWJ1dGlvbiB3aXRoIHRoZSBleGNlcHRpb24gb2Ygc2FsZSBmb3IgcHJvZml0IG9yIGFwcGxpY2F0aW9uIHdpdGggbm9udHJpdmlhbCBtaWxpdGFyeSBzaWduaWZpY2FuY2UuIFlvdSBtdXN0IG5vdCByZW1vdmUgdGhpcyBjb3B5cmlnaHQgbm90aWNlLCBhbmQgeW91IG11c3QgZG9jdW1lbnQgYW55IGNoYW5nZXMgdGhhdCB5b3UgbWFrZSB0byB0aGlzIHByb2dyYW0uIFRoaXMgc29mdHdhcmUgaXMgc3ViamVjdCB0byB0aGlzIGNvcHlyaWdodCBvbmx5LCBpcnJlc3BlY3RpdmUgb2YgYW55IGNvcHlyaWdodCBhdHRhY2hlZCB0byBhbnkgcGFja2FnZSBvZiB3aGljaCB0aGlzIGlzIGEgcGFydC4gCisgCitBYnNvbHV0ZWx5IG5vIGd1YXJhbnRlZXMgb3Igd2FycmFudGllcyBhcmUgbWFkZSBjb25jZXJuaW5nIHRoZSBzdWl0YWJpbGl0eSwgY29ycmVjdG5lc3MsIG9yIGFueSBvdGhlciBhc3BlY3Qgb2YgdGhpcyBwcm9ncmFtLiBBbnkgdXNlIGlzIGF0IHlvdXIgb3duIHJpc2suClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvbmV0aGFjayBiL2xpY2Vuc2VzL25ldGhhY2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjMxMThiZAotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL25ldGhhY2sKQEAgLTAsMCArMSw4NyBAQAorTkVUSEFDSyBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFIAorKENvcHlyaWdodCAxOTg5IE0uIFN0ZXBoZW5zb24pIAorKEJhc2VkIG9uIHRoZSBCSVNPTiBnZW5lcmFsIHB1YmxpYyBsaWNlbnNlLCBjb3B5cmlnaHQgMTk4OCBSaWNoYXJkIE0uCitTdGFsbG1hbikgCitFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhpcworbGljZW5zZSwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLiBZb3UgY2FuIGFsc28gdXNlIHRoaXMgd29yZGluZwordG8gbWFrZSB0aGUgdGVybXMgZm9yIG90aGVyIHByb2dyYW1zLiAKK1RoZSBsaWNlbnNlIGFncmVlbWVudHMgb2YgbW9zdCBzb2Z0d2FyZSBjb21wYW5pZXMga2VlcCB5b3UgYXQgdGhlIG1lcmN5CitvZiB0aG9zZSBjb21wYW5pZXMuIEJ5IGNvbnRyYXN0LCBvdXIgZ2VuZXJhbCBwdWJsaWMgbGljZW5zZSBpcyBpbnRlbmRlZAordG8gZ2l2ZSBldmVyeW9uZSB0aGUgcmlnaHQgdG8gc2hhcmUgTmV0SGFjay4gVG8gbWFrZSBzdXJlIHRoYXQgeW91IGdldAordGhlIHJpZ2h0cyB3ZSB3YW50IHlvdSB0byBoYXZlLCB3ZSBuZWVkIHRvIG1ha2UgcmVzdHJpY3Rpb25zIHRoYXQgZm9yYmlkCithbnlvbmUgdG8gZGVueSB5b3UgdGhlc2UgcmlnaHRzIG9yIHRvIGFzayB5b3UgdG8gc3VycmVuZGVyIHRoZSByaWdodHMuCitIZW5jZSB0aGlzIGxpY2Vuc2UgYWdyZWVtZW50LiAKKworU3BlY2lmaWNhbGx5LCB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSByaWdodCB0byBnaXZlIGF3YXkKK2NvcGllcyBvZiBOZXRIYWNrLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlIG9yIGVsc2UgY2FuIGdldCBpdCBpZgoreW91IHdhbnQgaXQsIHRoYXQgeW91IGNhbiBjaGFuZ2UgTmV0SGFjayBvciB1c2UgcGllY2VzIG9mIGl0IGluIG5ldyBmcmVlCitwcm9ncmFtcywgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuIAorCitUbyBtYWtlIHN1cmUgdGhhdCBldmVyeW9uZSBoYXMgc3VjaCByaWdodHMsIHdlIGhhdmUgdG8gZm9yYmlkIHlvdSB0bworZGVwcml2ZSBhbnlvbmUgZWxzZSBvZiB0aGVzZSByaWdodHMuIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZQorY29waWVzIG9mIE5ldEhhY2ssIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdCB5b3UKK2hhdmUuIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGF0IHRoZXksIHRvbywgcmVjZWl2ZSBvciBjYW4gZ2V0IHRoZSBzb3VyY2UKK2NvZGUuIEFuZCB5b3UgbXVzdCB0ZWxsIHRoZW0gdGhlaXIgcmlnaHRzLiAKKworQWxzbywgZm9yIG91ciBvd24gcHJvdGVjdGlvbiwgd2UgbXVzdCBtYWtlIGNlcnRhaW4gdGhhdCBldmVyeW9uZSBmaW5kcworb3V0IHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIE5ldEhhY2suIElmIE5ldEhhY2sgaXMgbW9kaWZpZWQgYnkKK3NvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZSB3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0Cit0aGV5IGhhdmUgaXMgbm90IHdoYXQgd2UgZGlzdHJpYnV0ZWQuIAorCitUaGVyZWZvcmUgd2UgKE1pa2UgU3RlcGhlbnNvbiBhbmQgb3RoZXIgaG9sZGVycyBvZiBOZXRIYWNrIGNvcHlyaWdodHMpCittYWtlIHRoZSBmb2xsb3dpbmcgdGVybXMgd2hpY2ggc2F5IHdoYXQgeW91IG11c3QgZG8gdG8gYmUgYWxsb3dlZCB0bworZGlzdHJpYnV0ZSBvciBjaGFuZ2UgTmV0SGFjay4gCisKK0NPUFlJTkcgUE9MSUNJRVMgCitZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIE5ldEhhY2sgc291cmNlIGNvZGUgYXMKK3lvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBrZWVwIGludGFjdCB0aGUgbm90aWNlcworb24gYWxsIGZpbGVzIHRoYXQgcmVmZXIgdG8gY29weXJpZ2h0cywgdG8gdGhpcyBMaWNlbnNlIEFncmVlbWVudCwgYW5kIHRvCit0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7IGFuZCBnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZQorTmV0SGFjayBwcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IGFsb25nIHdpdGggdGhlIHByb2dyYW0uIAorWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiBOZXRIYWNrIG9yIGFueSBwb3J0aW9uIG9mIGl0LCBhbmQKK2NvcHkgYW5kIGRpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIHVuZGVyIHRoZSB0ZXJtcyBvZiBQYXJhZ3JhcGggMQorYWJvdmUgKGluY2x1ZGluZyBkaXN0cmlidXRpbmcgdGhpcyBMaWNlbnNlIEFncmVlbWVudCksIHByb3ZpZGVkIHRoYXQgeW91CithbHNvIGRvIHRoZSBmb2xsb3dpbmc6IAorYSkgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIHN0YXRpbmcgdGhhdCB5b3UKK2NoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlOyBhbmQgCisKK2IpIGNhdXNlIHRoZSB3aG9sZSBvZiBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4KK3dob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgYSBkZXJpdmF0aXZlIG9mIE5ldEhhY2sgb3IgYW55IHBhcnQKK3RoZXJlb2YsIHRvIGJlIGxpY2Vuc2VkIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQgcGFydGllcyBvbiB0ZXJtcworaWRlbnRpY2FsIHRvIHRob3NlIGNvbnRhaW5lZCBpbiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IChleGNlcHQgdGhhdCB5b3UKK21heSBjaG9vc2UgdG8gZ3JhbnQgbW9yZSBleHRlbnNpdmUgd2FycmFudHkgcHJvdGVjdGlvbiB0byBzb21lIG9yIGFsbAordGhpcmQgcGFydGllcywgYXQgeW91ciBvcHRpb24pIAorCitjKSBZb3UgbWF5IGNoYXJnZSBhIGRpc3RyaWJ1dGlvbiBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YKK3RyYW5zZmVycmluZyBhIGNvcHksIGFuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5Citwcm90ZWN0aW9uIGluIGV4Y2hhbmdlIGZvciBhIGZlZS4gCisKK1lvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSBOZXRIYWNrIChvciBhIHBvcnRpb24gb3IgZGVyaXZhdGl2ZSBvZiBpdCwKK3VuZGVyIFBhcmFncmFwaCAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mCitQYXJhZ3JhcGhzIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzogCithKSBhY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2gKK211c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFBhcmFncmFwaHMgMSBhbmQgMiBhYm92ZTsgb3IsIAorCitiKSBhY2NvbXBhbnkgaXQgd2l0aCBmdWxsIGluZm9ybWF0aW9uIGFzIHRvIGhvdyB0byBvYnRhaW4gdGhlIGNvbXBsZXRlCittYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlIGZyb20gYW4gYXBwcm9wcmlhdGUgYXJjaGl2ZSBzaXRlLiAoVGhpcworYWx0ZXJuYXRpdmUgaXMgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbi4pIAorCitGb3IgdGhlc2UgcHVycG9zZXMsIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG1lYW5zIGVpdGhlciB0aGUgZnVsbCBzb3VyY2UKK2Rpc3RyaWJ1dGlvbiBhcyBvcmlnaW5hbGx5IHJlbGVhc2VkIG92ZXIgVXNlbmV0IG9yIHVwZGF0ZWQgY29waWVzIG9mIHRoZQorZmlsZXMgaW4gdGhpcyBkaXN0cmlidXRpb24gdXNlZCB0byBjcmVhdGUgdGhlIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUuIAorCisKK1lvdSBtYXkgbm90IGNvcHksIHN1YmxpY2Vuc2UsIGRpc3RyaWJ1dGUgb3IgdHJhbnNmZXIgTmV0SGFjayBleGNlcHQgYXMKK2V4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LiBBbnkgYXR0ZW1wdCBvdGhlcndpc2UKK3RvIGNvcHksIHN1YmxpY2Vuc2UsIGRpc3RyaWJ1dGUgb3IgdHJhbnNmZXIgTmV0SGFjayBpcyB2b2lkIGFuZCB5b3VyCityaWdodHMgdG8gdXNlIHRoZSBwcm9ncmFtIHVuZGVyIHRoaXMgTGljZW5zZSBhZ3JlZW1lbnQgc2hhbGwgYmUKK2F1dG9tYXRpY2FsbHkgdGVybWluYXRlZC4gSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb21wdXRlcgorc29mdHdhcmUgcHJvZ3JhbXMgZnJvbSB5b3Ugd2l0aCB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IHdpbGwgbm90IGhhdmUKK3RoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMgcmVtYWluIGluIGZ1bGwKK2NvbXBsaWFuY2UuIAorU3RhdGVkIHBsYWlubHk6IFlvdSBhcmUgcGVybWl0dGVkIHRvIG1vZGlmeSBOZXRIYWNrLCBvciBvdGhlcndpc2UgdXNlCitwYXJ0cyBvZiBOZXRIYWNrLCBwcm92aWRlZCB0aGF0IHlvdSBjb21wbHkgd2l0aCB0aGUgY29uZGl0aW9ucyBzcGVjaWZpZWQKK2Fib3ZlOyBpbiBwYXJ0aWN1bGFyLCB5b3VyIG1vZGlmaWVkIE5ldEhhY2sgb3IgcHJvZ3JhbSBjb250YWluaW5nIHBhcnRzCitvZiBOZXRIYWNrIG11c3QgcmVtYWluIGZyZWVseSBhdmFpbGFibGUgYXMgcHJvdmlkZWQgaW4gdGhpcyBMaWNlbnNlCitBZ3JlZW1lbnQuIEluIG90aGVyIHdvcmRzLCBnbyBhaGVhZCBhbmQgc2hhcmUgTmV0SGFjaywgYnV0IGRvbid0IHRyeSB0bworc3RvcCBhbnlvbmUgZWxzZSBmcm9tIHNoYXJpbmcgaXQgZmFydGhlci4gCmRpZmYgLS1naXQgYS9saWNlbnNlcy9uZXRsb2dvIGIvbGljZW5zZXMvbmV0bG9nbwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjJlMjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvbmV0bG9nbwpAQCAtMCwwICsxLDE3NyBAQAorCisgIENvcHlyaWdodCBJbmZvcm1hdGlvbgorCitOZXRMb2dvIDIuMS4wIFVzZXIgTWFudWFsICAgCisKK0NvcHlyaWdodCAxOTk5IGJ5IFVyaSBXaWxlbnNreS4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworVGhlIE5ldExvZ28gc29mdHdhcmUsIG1vZGVscyBhbmQgZG9jdW1lbnRhdGlvbiBhcmUgZGlzdHJpYnV0ZWQgZnJlZSBvZgorY2hhcmdlIGZvciB1c2UgYnkgdGhlIHB1YmxpYyB0byBleHBsb3JlIGFuZCBjb25zdHJ1Y3QgbW9kZWxzLiBQZXJtaXNzaW9uCit0byBjb3B5IG9yIG1vZGlmeSB0aGUgTmV0TG9nbyBzb2Z0d2FyZSwgbW9kZWxzIGFuZCBkb2N1bWVudGF0aW9uIGZvcgorZWR1Y2F0aW9uYWwgYW5kIHJlc2VhcmNoIHB1cnBvc2VzIG9ubHkgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieQorZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGlzIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBvcmlnaW5hbCBhdXRob3IncworbmFtZSBhcHBlYXJzIG9uIGFsbCBjb3BpZXMgYW5kIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gRm9yIGFueSBvdGhlcgordXNlcyBvZiB0aGlzIHNvZnR3YXJlLCBpbiBvcmlnaW5hbCBvciBtb2RpZmllZCBmb3JtLCBpbmNsdWRpbmcgYnV0IG5vdAorbGltaXRlZCB0byBkaXN0cmlidXRpb24gaW4gd2hvbGUgb3IgaW4gcGFydCwgc3BlY2lmaWMgcHJpb3IgcGVybWlzc2lvbgorbXVzdCBiZSBvYnRhaW5lZCBmcm9tIFVyaSBXaWxlbnNreS4gVGhlIHNvZnR3YXJlLCBtb2RlbHMgYW5kCitkb2N1bWVudGF0aW9uIHNoYWxsIG5vdCBiZSB1c2VkLCByZXdyaXR0ZW4sIG9yIGFkYXB0ZWQgYXMgdGhlIGJhc2lzIG9mIGEKK2NvbW1lcmNpYWwgc29mdHdhcmUgb3IgaGFyZHdhcmUgcHJvZHVjdCB3aXRob3V0IGZpcnN0IG9idGFpbmluZworYXBwcm9wcmlhdGUgbGljZW5zZXMgZnJvbSBVcmkgV2lsZW5za3kuIFdlIG1ha2Ugbm8gcmVwcmVzZW50YXRpb25zIGFib3V0Cit0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuIEl0IGlzIHByb3ZpZGVkICJhcyBpcyIKK3dpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorCitUbyByZWZlcmVuY2UgdGhpcyBzb2Z0d2FyZSBpbiBhY2FkZW1pYyBwdWJsaWNhdGlvbnMsIHBsZWFzZSB1c2U6CitXaWxlbnNreSwgVS4gKDE5OTkpLiBOZXRMb2dvLiBodHRwOi8vY2NsLm5vcnRod2VzdGVybi5lZHUvbmV0bG9nby8uCitDZW50ZXIgZm9yIENvbm5lY3RlZCBMZWFybmluZyBhbmQgQ29tcHV0ZXItQmFzZWQgTW9kZWxpbmcsIE5vcnRod2VzdGVybgorVW5pdmVyc2l0eSwgRXZhbnN0b24sIElMLgorCitUaGUgcHJvamVjdCBncmF0ZWZ1bGx5IGFja25vd2xlZGdlcyB0aGUgc3VwcG9ydCBvZiB0aGUgTmF0aW9uYWwgU2NpZW5jZQorRm91bmRhdGlvbiAoUkVQUCBhbmQgUk9MRSBQcm9ncmFtcykgLS0gZ3JhbnQgbnVtYmVycyBSRUMgIzk4MTQ2ODIgYW5kCitSRUMgIzAxMjYyMjcuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGb3IgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uLCBOZXRMb2dvIHVzZXMgdGhlIE1lcnNlbm5lVHdpc3RlckZhc3QgY2xhc3MKK2J5IFNlYW4gTHVrZS4gVGhlIGNvcHlyaWdodCBmb3IgdGhhdCBjb2RlIGlzIGFzIGZvbGxvd3M6CisKK0NvcHlyaWdodCAoYykgMjAwMyBieSBTZWFuIEx1a2UuCitQb3J0aW9ucyBjb3B5cmlnaHQgKGMpIDE5OTMgYnkgTWljaGFlbCBMZWN1eWVyLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAgICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAgICAgIGRpc3RyaWJ1dGlvbi4KKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGNvcHlyaWdodCBvd25lcnMsIHRoZWlyIGVtcGxveWVycywgbm9yIHRoZQorICAgICAgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAgICAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbgorICAgICAgcGVybWlzc2lvbi4gCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTCitJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKK1RPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQorUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCitPV05FUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCitTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKK1RPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKK1BST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCitORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKK1NPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworUGFydHMgb2YgTmV0TG9nbyAoc3BlY2lmaWNhbGx5LCB0aGUgcmFuZG9tLWdhbW1hIHByaW1pdGl2ZSkgYXJlIGJhc2VkIG9uCitjb2RlIGZyb20gdGhlIENvbHQgbGlicmFyeSAoaHR0cDovL2hvc2NoZWsuaG9tZS5jZXJuLmNoL2hvc2NoZWsvY29sdC8pLgorVGhlIGNvcHlyaWdodCBmb3IgdGhhdCBjb2RlIGlzIGFzIGZvbGxvd3M6CisKK0NvcHlyaWdodCAxOTk5IENFUk4gLSBFdXJvcGVhbiBPcmdhbml6YXRpb24gZm9yIE51Y2xlYXIgUmVzZWFyY2guCitQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBkaXN0cmlidXRlIGFuZCBzZWxsIHRoaXMgc29mdHdhcmUgYW5kCitpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsCitwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0Citib3RoIHRoYXQgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4KK3N1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4gQ0VSTiBtYWtlcyBubyByZXByZXNlbnRhdGlvbnMgYWJvdXQgdGhlCitzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZS4gSXQgaXMgcHJvdmlkZWQgImFzIGlzIgord2l0aG91dCBleHByZXNzZWQgb3IgaW1wbGllZCB3YXJyYW50eS4KKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK05ldExvZ28gdXNlcyB0aGUgTVJKIEFkYXB0ZXIgbGlicmFyeSwgd2hpY2ggaXMgQ29weXJpZ2h0IChjKSAyMDAzIFN0ZXZlCitSb3kgPHNyb3lAcm95ZGVzaWduLm5ldD4uIFRoZSBsaWJyYXJ5IGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBMR1BMIChMZXNzZXIKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UpLiBUaGUgdGV4dCBvZiB0aGF0IGxpY2Vuc2UgaXMgaW5jbHVkZWQgaW4gdGhlCisiZG9jcyIgZm9sZGVyIHdoaWNoIGFjY29tcGFuaWVzIHRoZSBOZXRMb2dvIGRvd25sb2FkLCBhbmQgaXMgYWxzbworYXZhaWxhYmxlIGZyb20gaHR0cDovL3d3dy5nbnUub3JnL2NvcHlsZWZ0L2xlc3Nlci5odG1sLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworRm9yIG1vdmllLW1ha2luZywgTmV0TG9nbyB1c2VzIGNvZGUgYWRhcHRlZCBmcm9tCitzaW0udXRpbC5tZWRpYS5Nb3ZpZUVuY29kZXIuamF2YSBieSBTZWFuIEx1a2UsIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZQorTUFTT04gT3BlbiBTb3VyY2UgTGljZW5zZS4gVGhlIGNvcHlyaWdodCBmb3IgdGhhdCBjb2RlIGlzIGFzIGZvbGxvd3M6CisKK1RoaXMgc29mdHdhcmUgaXMgQ29weXJpZ2h0IDIwMDMgYnkgU2VhbiBMdWtlLiBQb3J0aW9ucyBDb3B5cmlnaHQgMjAwMyBieQorR2FicmllbCBDYXRhbGluIEJhbGFuLCBMaXZpdSBQYW5haXQsIFNlYW4gUGF1cywgYW5kIERhbiBLdWVicmljaC4gQWxsCitSaWdodHMgUmVzZXJ2ZWQuCisKK0RldmVsb3BlZCBpbiBDb25qdW5jdGlvbiB3aXRoIHRoZSBHZW9yZ2UgTWFzb24gVW5pdmVyc2l0eSBDZW50ZXIgZm9yCitTb2NpYWwgQ29tcGxleGl0eQorCitCeSB1c2luZyB0aGUgc291cmNlIGNvZGUsIGJpbmFyeSBjb2RlIGZpbGVzLCBvciByZWxhdGVkIGRhdGEgaW5jbHVkZWQgaW4KK3RoaXMgZGlzdHJpYnV0aW9uLCB5b3UgYWdyZWUgdG8gdGhlIGZvbGxvd2luZyB0ZXJtcyBvZiB1c2FnZSBmb3IgdGhpcworc29mdHdhcmUgZGlzdHJpYnV0aW9uLiBBbGwgYnV0IGEgZmV3IHNvdXJjZSBjb2RlIGZpbGVzIGluIHRoaXMKK2Rpc3RyaWJ1dGlvbiBmYWxsIHVuZGVyIHRoaXMgbGljZW5zZTsgdGhlIGV4Y2VwdGlvbnMgY29udGFpbiBvcGVuIHNvdXJjZQorbGljZW5zZXMgZW1iZWRkZWQgaW4gdGhlIHNvdXJjZSBjb2RlIGZpbGVzIHRoZW1zZWx2ZXMuIEluIHRoaXMgbGljZW5zZQordGhlIEF1dGhvcnMgbWVhbnMgdGhlIENvcHlyaWdodCBIb2xkZXJzIGxpc3RlZCBhYm92ZSwgYW5kIHRoZSBsaWNlbnNlCitpdHNlbGYgaXMgQ29weXJpZ2h0IDIwMDMgYnkgU2VhbiBMdWtlLgorCitUaGUgQXV0aG9ycyBoZXJlYnkgZ3JhbnQgeW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlCitsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXM6CisKK3RvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUKK2FsbCBvciBhbnkgcG9ydGlvbiBvZiB0aGUgc291cmNlIGNvZGUgb3IgYmluYXJ5IGZvcm0gb2YgdGhpcyBzb2Z0d2FyZSBvcgorcmVsYXRlZCBkYXRhIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb25zLCBvciBhcyBwYXJ0IG9mIGEgbGFyZ2VyIHdvcms7CithbmQgdW5kZXIgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgdGhlIEF1dGhvcnMsCit0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSBhbmQgc2VsbCAoIlV0aWxpemUiKSBhbGwgb3IgYW55IHBvcnRpb24gb2YgdGhlCitzb3VyY2UgY29kZSBvciBiaW5hcnkgZm9ybSBvZiB0aGlzIHNvZnR3YXJlIG9yIHJlbGF0ZWQgZGF0YSwgYnV0IHNvbGVseQordG8gdGhlIGV4dGVudCB0aGF0IGFueSBzdWNoIHBhdGVudCBpcyByZWFzb25hYmx5IG5lY2Vzc2FyeSB0byBlbmFibGUgeW91Cit0byBVdGlsaXplIGFsbCBvciBhbnkgcG9ydGlvbiBvZiB0aGUgc291cmNlIGNvZGUgb3IgYmluYXJ5IGZvcm0gb2YgdGhpcworc29mdHdhcmUgb3IgcmVsYXRlZCBkYXRhLCBhbmQgbm90IHRvIGFueSBncmVhdGVyIGV4dGVudCB0aGF0IG1heSBiZQorbmVjZXNzYXJ5IHRvIFV0aWxpemUgZnVydGhlciBtb2RpZmljYXRpb25zIG9yIGNvbWJpbmF0aW9ucy4KKworSW4gcmV0dXJuIHlvdSBhZ3JlZSB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisKK0lmIHlvdSByZWRpc3RyaWJ1dGUgYWxsIG9yIGFueSBwb3J0aW9uIG9mIHRoZSBzb3VyY2UgY29kZSBvZiB0aGlzCitzb2Z0d2FyZSBvciByZWxhdGVkIGRhdGEsIGl0IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZAordGhpcyBsaWNlbnNlIGFuZCBkaXNjbGFpbWVyLiBJZiB5b3UgcmVkaXN0cmlidXRlIGFsbCBvciBhbnkgcG9ydGlvbiBvZgordGhpcyBjb2RlIGluIGJpbmFyeSBmb3JtLCB5b3UgbXVzdCBpbmNsdWRlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlCithbmQgdGhpcyBsaWNlbnNlIGFuZCBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlcgorbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbiwgYW5kIG11c3QgaW5kaWNhdGUgdGhlIHVzZSBvZgordGhpcyBzb2Z0d2FyZSBpbiBhIHByb21pbmVudCwgcHVibGljYWxseSBhY2Nlc3NpYmxlIGxvY2F0aW9uIG9mIHRoZQorbGFyZ2VyIHdvcmsuIFlvdSBtdXN0IG5vdCB1c2UgdGhlIEF1dGhvcnMncyBuYW1lcyB0byBlbmRvcnNlIG9yIHByb21vdGUKK3Byb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgdGhlIHNwZWNpZmljIHByaW9yIHdyaXR0ZW4KK3Blcm1pc3Npb24gb2YgdGhlIEF1dGhvcnMuCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTCitPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuCitJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUywgTk9SIFRIRUlSIEVNUExPWUVSUywKK05PUiBHRU9SR0UgTUFTT04gVU5JVkVSU0lUWSwgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCitGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCitERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitGb3IgbW92aWUtbWFraW5nLCBOZXRMb2dvIHVzZXMgY29kZSBhZGFwdGVkIGZyb20gSnBlZ0ltYWdlc1RvTW92aWUuamF2YQorYnkgU3VuIE1pY3Jvc3lzdGVtcy4gVGhlIGNvcHlyaWdodCBmb3IgdGhhdCBjb2RlIGlzIGFzIGZvbGxvd3M6CisKK0NvcHlyaWdodCAoYykgMTk5OS0yMDAxIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKworU3VuIGdyYW50cyB5b3UgKCJMaWNlbnNlZSIpIGEgbm9uLWV4Y2x1c2l2ZSwgcm95YWx0eSBmcmVlLCBsaWNlbnNlIHRvCit1c2UsIG1vZGlmeSBhbmQgcmVkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgaW4gc291cmNlIGFuZCBiaW5hcnkgY29kZQorZm9ybSwgcHJvdmlkZWQgdGhhdCBpKSB0aGlzIGNvcHlyaWdodCBub3RpY2UgYW5kIGxpY2Vuc2UgYXBwZWFyIG9uIGFsbAorY29waWVzIG9mIHRoZSBzb2Z0d2FyZTsgYW5kIGlpKSBMaWNlbnNlZSBkb2VzIG5vdCB1dGlsaXplIHRoZSBzb2Z0d2FyZQoraW4gYSBtYW5uZXIgd2hpY2ggaXMgZGlzcGFyYWdpbmcgdG8gU3VuLgorCitUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICJBUyBJUywiIHdpdGhvdXQgYSB3YXJyYW50eSBvZiBhbnkga2luZC4gQUxMCitFWFBSRVNTIE9SIElNUExJRUQgQ09ORElUSU9OUywgUkVQUkVTRU5UQVRJT05TIEFORCBXQVJSQU5USUVTLCBJTkNMVURJTkcKK0FOWSBJTVBMSUVEIFdBUlJBTlRZIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCitQVVJQT1NFIE9SIE5PTi1JTkZSSU5HRU1FTlQsIEFSRSBIRVJFQlkgRVhDTFVERUQuIFNVTiBBTkQgSVRTIExJQ0VOU09SUworU0hBTEwgTk9UIEJFIExJQUJMRSBGT1IgQU5ZIERBTUFHRVMgU1VGRkVSRUQgQlkgTElDRU5TRUUgQVMgQSBSRVNVTFQgT0YKK1VTSU5HLCBNT0RJRllJTkcgT1IgRElTVFJJQlVUSU5HIFRIRSBTT0ZUV0FSRSBPUiBJVFMgREVSSVZBVElWRVMuIElOIE5PCitFVkVOVCBXSUxMIFNVTiBPUiBJVFMgTElDRU5TT1JTIEJFIExJQUJMRSBGT1IgQU5ZIExPU1QgUkVWRU5VRSwgUFJPRklUCitPUiBEQVRBLCBPUiBGT1IgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgQ09OU0VRVUVOVElBTCwgSU5DSURFTlRBTCBPUgorUFVOSVRJVkUgREFNQUdFUywgSE9XRVZFUiBDQVVTRUQgQU5EIFJFR0FSRExFU1MgT0YgVEhFIFRIRU9SWSBPRgorTElBQklMSVRZLCBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9GIE9SIElOQUJJTElUWSBUTyBVU0UgU09GVFdBUkUsIEVWRU4KK0lGIFNVTiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKK1RoaXMgc29mdHdhcmUgaXMgbm90IGRlc2lnbmVkIG9yIGludGVuZGVkIGZvciB1c2UgaW4gb24tbGluZSBjb250cm9sIG9mCithaXJjcmFmdCwgYWlyIHRyYWZmaWMsIGFpcmNyYWZ0IG5hdmlnYXRpb24gb3IgYWlyY3JhZnQgY29tbXVuaWNhdGlvbnM7CitvciBpbiB0aGUgZGVzaWduLCBjb25zdHJ1Y3Rpb24sIG9wZXJhdGlvbiBvciBtYWludGVuYW5jZSBvZiBhbnkgbnVjbGVhcgorZmFjaWxpdHkuIExpY2Vuc2VlIHJlcHJlc2VudHMgYW5kIHdhcnJhbnRzIHRoYXQgaXQgd2lsbCBub3QgdXNlIG9yCityZWRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGZvciBzdWNoIHB1cnBvc2VzLgorCmRpZmYgLS1naXQgYS9saWNlbnNlcy9uZXRwZXJmIGIvbGljZW5zZXMvbmV0cGVyZgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjNjZWIyCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvbmV0cGVyZgpAQCAtMCwwICsxLDQzIEBACisKKyAKKyAgICAgICAgICAgICAgQ29weXJpZ2h0IChDKSAxOTkzIEhld2xldHQtUGFja2FyZCBDb21wYW55CisgICAgICAgICAgICAgICAgICAgICAgICAgQUxMIFJJR0hUUyBSRVNFUlZFRC4KKyAKKyAgVGhlIGVuY2xvc2VkIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIGluY2x1ZGVzIGNvcHlyaWdodGVkIHdvcmtzCisgIG9mIEhld2xldHQtUGFja2FyZCBDby4gRm9yIGFzIGxvbmcgYXMgeW91IGNvbXBseSB3aXRoIHRoZSBmb2xsb3dpbmcKKyAgbGltaXRhdGlvbnMsIHlvdSBhcmUgaGVyZWJ5IGF1dGhvcml6ZWQgdG8gKGkpIHVzZSwgcmVwcm9kdWNlLCBhbmQKKyAgbW9kaWZ5IHRoZSBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiwgYW5kIHRvIChpaSkgZGlzdHJpYnV0ZSB0aGUKKyAgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24sIGluY2x1ZGluZyBtb2RpZmljYXRpb25zLCBmb3IKKyAgbm9uLWNvbW1lcmNpYWwgcHVycG9zZXMgb25seS4KKyAgICAgIAorICAxLiAgVGhlIGVuY2xvc2VkIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIGlzIG1hZGUgYXZhaWxhYmxlIGF0IG5vCisgICAgICBjaGFyZ2UgaW4gb3JkZXIgdG8gYWR2YW5jZSB0aGUgZ2VuZXJhbCBkZXZlbG9wbWVudCBvZgorICAgICAgaGlnaC1wZXJmb3JtYW5jZSBuZXR3b3JraW5nIHByb2R1Y3RzLgorIAorICAyLiAgWW91IG1heSBub3QgZGVsZXRlIGFueSBjb3B5cmlnaHQgbm90aWNlcyBjb250YWluZWQgaW4gdGhlCisgICAgICBzb2Z0d2FyZSBvciBkb2N1bWVudGF0aW9uLiBBbGwgaGFyZCBjb3BpZXMsIGFuZCBjb3BpZXMgaW4KKyAgICAgIHNvdXJjZSBjb2RlIG9yIG9iamVjdCBjb2RlIGZvcm0sIG9mIHRoZSBzb2Z0d2FyZSBvcgorICAgICAgZG9jdW1lbnRhdGlvbiAoaW5jbHVkaW5nIG1vZGlmaWNhdGlvbnMpIG11c3QgY29udGFpbiBhdCBsZWFzdAorICAgICAgb25lIG9mIHRoZSBjb3B5cmlnaHQgbm90aWNlcy4KKyAKKyAgMy4gIFRoZSBlbmNsb3NlZCBzb2Z0d2FyZSBhbmQgZG9jdW1lbnRhdGlvbiBoYXMgbm90IGJlZW4gc3ViamVjdGVkCisgICAgICB0byB0ZXN0aW5nIGFuZCBxdWFsaXR5IGNvbnRyb2wgYW5kIGlzIG5vdCBhIEhld2xldHQtUGFja2FyZCBDby4KKyAgICAgIHByb2R1Y3QuIEF0IGEgZnV0dXJlIHRpbWUsIEhld2xldHQtUGFja2FyZCBDby4gbWF5IG9yIG1heSBub3QKKyAgICAgIG9mZmVyIGEgdmVyc2lvbiBvZiB0aGUgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24gYXMgYSBwcm9kdWN0LgorICAKKyAgNC4gIFRIRSBTT0ZUV0FSRSBBTkQgRE9DVU1FTlRBVElPTiBJUyBQUk9WSURFRCAiQVMgSVMiLgorICAgICAgSEVXTEVUVC1QQUNLQVJEIENPTVBBTlkgRE9FUyBOT1QgV0FSUkFOVCBUSEFUIFRIRSBVU0UsCisgICAgICBSRVBST0RVQ1RJT04sIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIFNPRlRXQVJFIE9SCisgICAgICBET0NVTUVOVEFUSU9OIFdJTEwgTk9UIElORlJJTkdFIEEgVEhJUkQgUEFSVFknUyBJTlRFTExFQ1RVQUwKKyAgICAgIFBST1BFUlRZIFJJR0hUUy4gSFAgRE9FUyBOT1QgV0FSUkFOVCBUSEFUIFRIRSBTT0ZUV0FSRSBPUgorICAgICAgRE9DVU1FTlRBVElPTiBJUyBFUlJPUiBGUkVFLiBIUCBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMsCisgICAgICBFWFBSRVNTIEFORCBJTVBMSUVELCBXSVRIIFJFR0FSRCBUTyBUSEUgU09GVFdBUkUgQU5EIFRIRQorICAgICAgRE9DVU1FTlRBVElPTi4gSFAgU1BFQ0lGSUNBTExZIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBPRgorICAgICAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAgCisgIDUuICBIRVdMRVRULVBBQ0tBUkQgQ09NUEFOWSBXSUxMIE5PVCBJTiBBTlkgRVZFTlQgQkUgTElBQkxFIEZPUiBBTlkKKyAgICAgIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgICAgICAoSU5DTFVESU5HIExPU1QgUFJPRklUUykgUkVMQVRFRCBUTyBBTlkgVVNFLCBSRVBST0RVQ1RJT04sCisgICAgICBNT0RJRklDQVRJT04sIE9SIERJU1RSSUJVVElPTiBPRiBUSEUgU09GVFdBUkUgT1IgRE9DVU1FTlRBVElPTi4KKyAKKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvbmV3cmVsaWMgYi9saWNlbnNlcy9uZXdyZWxpYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Yjg5NjM1Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvbmV3cmVsaWMKQEAgLTAsMCArMSwzNyBAQAorQ29weXJpZ2h0IChjKSAyMDEwLTIwMTEgTmV3IFJlbGljLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitDZXJ0YWluIGludmVudGlvbnMgZGlzY2xvc2VkIGluIHRoaXMgZmlsZSBtYXkgYmUgY2xhaW1lZCB3aXRoaW4KK3BhdGVudHMgb3duZWQgb3IgcGF0ZW50IGFwcGxpY2F0aW9ucyBmaWxlZCBieSBOZXcgUmVsaWMsIEluYy4gb3IgdGhpcmQKK3BhcnRpZXMuCisKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgbm90aWNlLCBOZXcgUmVsaWMgZ3JhbnRzIHlvdSBhCitub25leGNsdXNpdmUsIG5vbnRyYW5zZmVyYWJsZSBsaWNlbnNlLCB3aXRob3V0IHRoZSByaWdodCB0bworc3VibGljZW5zZSwgdG8gKGEpIGluc3RhbGwgYW5kIGV4ZWN1dGUgb25lIGNvcHkgb2YgdGhlc2UgZmlsZXMgb24gYW55CitudW1iZXIgb2Ygd29ya3N0YXRpb25zIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgeW91IGFuZCAoYikgZGlzdHJpYnV0ZQordmVyYmF0aW0gY29waWVzIG9mIHRoZXNlIGZpbGVzIHRvIHRoaXJkIHBhcnRpZXMuICBBcyBhIGNvbmRpdGlvbiB0byB0aGUKK2ZvcmVnb2luZyBncmFudCwgeW91IG11c3QgcHJvdmlkZSB0aGlzIG5vdGljZSBhbG9uZyB3aXRoIGVhY2ggY29weSB5b3UKK2Rpc3RyaWJ1dGUgYW5kIHlvdSBtdXN0IG5vdCByZW1vdmUsIGFsdGVyLCBvciBvYnNjdXJlIHRoaXMgbm90aWNlLiBBbGwKK290aGVyIHVzZSwgcmVwcm9kdWN0aW9uLCBtb2RpZmljYXRpb24sIGRpc3RyaWJ1dGlvbiwgb3Igb3RoZXIKK2V4cGxvaXRhdGlvbiBvZiB0aGVzZSBmaWxlcyBpcyBzdHJpY3RseSBwcm9oaWJpdGVkLCBleGNlcHQgYXMgbWF5IGJlIHNldAorZm9ydGggaW4gYSBzZXBhcmF0ZSB3cml0dGVuIGxpY2Vuc2UgYWdyZWVtZW50IGJldHdlZW4geW91IGFuZCBOZXcKK1JlbGljLiAgVGhlIHRlcm1zIG9mIGFueSBzdWNoIGxpY2Vuc2UgYWdyZWVtZW50IHdpbGwgY29udHJvbCBvdmVyIHRoaXMKK25vdGljZS4gIFRoZSBsaWNlbnNlIHN0YXRlZCBhYm92ZSB3aWxsIGJlIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlZCBhbmQKK3Jldm9rZWQgaWYgeW91IGV4Y2VlZCBpdHMgc2NvcGUgb3IgdmlvbGF0ZSBhbnkgb2YgdGhlIHRlcm1zIG9mIHRoaXMKK25vdGljZS4KKworVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRoZSB0cmFkZSBuYW1lcywKK3RyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHByb2R1Y3QgbmFtZXMgb2YgTmV3IFJlbGljLCBleGNlcHQgYXMKK3JlcXVpcmVkIGZvciByZWFzb25hYmxlIGFuZCBjdXN0b21hcnkgdXNlIGluIGRlc2NyaWJpbmcgdGhlIG9yaWdpbiBvZgordGhpcyBmaWxlIGFuZCByZXByb2R1Y2luZyB0aGUgY29udGVudCBvZiB0aGlzIG5vdGljZS4gIFlvdSBtYXkgbm90CittYXJrIG9yIGJyYW5kIHRoaXMgZmlsZSB3aXRoIGFueSB0cmFkZSBuYW1lLCB0cmFkZW1hcmtzLCBzZXJ2aWNlCittYXJrcywgb3IgcHJvZHVjdCBuYW1lcyBvdGhlciB0aGFuIHRoZSBvcmlnaW5hbCBicmFuZCAoaWYgYW55KQorcHJvdmlkZWQgYnkgTmV3IFJlbGljLgorCitVbmxlc3Mgb3RoZXJ3aXNlIGV4cHJlc3NseSBhZ3JlZWQgYnkgTmV3IFJlbGljIGluIGEgc2VwYXJhdGUgd3JpdHRlbgorbGljZW5zZSBhZ3JlZW1lbnQsIHRoZXNlIGZpbGVzIGFyZSBwcm92aWRlZCBBUyBJUywgV0lUSE9VVCBXQVJSQU5UWSBPRgorQU5ZIEtJTkQsIGluY2x1ZGluZyB3aXRob3V0IGFueSBpbXBsaWVkIHdhcnJhbnRpZXMgb2YgTUVSQ0hBTlRBQklMSVRZLAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFRJVExFLCBvciBOT04tSU5GUklOR0VNRU5ULiAgQXMgYQorY29uZGl0aW9uIHRvIHlvdXIgdXNlIG9mIHRoZXNlIGZpbGVzLCB5b3UgYXJlIHNvbGVseSByZXNwb25zaWJsZSBmb3IKK3N1Y2ggdXNlLiBOZXcgUmVsaWMgd2lsbCBoYXZlIG5vIGxpYWJpbGl0eSB0byB5b3UgZm9yIGRpcmVjdCwKK2luZGlyZWN0LCBjb25zZXF1ZW50aWFsLCBpbmNpZGVudGFsLCBzcGVjaWFsLCBvciBwdW5pdGl2ZSBkYW1hZ2VzIG9yCitmb3IgbG9zdCBwcm9maXRzIG9yIGRhdGEuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9uZXd0b24gYi9saWNlbnNlcy9uZXd0b24KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTg4ZmFkMwotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL25ld3RvbgpAQCAtMCwwICsxLDMyIEBACitOZXd0b24gR2FtZSBEeW5hbWljcyBTREsgTGljZW5zZSBWZXJzaW9uIDEuNTMKK0NvcHlyaWdodCAyMDAzLTIwMDYgTmV3dG9uIEdhbWUgRHluYW1pY3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK0xJTUlURUQgV0FSUkFOVFkKK1RoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgImFzLWlzIiwgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorSW4gbm8gZXZlbnQgc2hhbGwgdGhlIGF1dGhvciBiZSBoZWxkIGxpYWJsZSBmb3IgYW55IGRhbWFnZXMgYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4KK1RoaXMgaXMgYSBjb250cmFjdC4gQnkgYWNjZXB0aW5nIHRoZSBOZXd0b24gR2FtZSBEeW5hbWljcyBTREsgKHRoZSBTT0ZUV0FSRSksCit5b3UgKGVpdGhlciBhbiBpbmRpdmlkdWFsIG9yIGEgc2luZ2xlIGVudGl0eSwgdGhlIExJQ0VOU0VFKSBhY2NlcHQgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgbGljZW5zaW5nIGFncmVlbWVudC4KKworSWYgdGhlIExJQ0VOU0VFIGRvZXMgbm90IGFjY2VwdCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHRoZW4gTElDRU5TRUUgbXVzdCBub3QgYWNjZXB0IHRoZSBTT0ZUV0FSRS4KK0lmIGF0IGEgbGF0ZXIgdGltZSB0aGUgTElDRU5TRUUgZGVjaWRlcyBub3QgdG8gY29udGludWUgbGljZW5zaW5nIHRoZSBTT0ZUV0FSRSB1bmRlciB0aGVzZSB0ZXJtcyBhbmQKK2NvbmRpdGlvbnMsIHRoZW4gdGhlIExJQ0VOU0VFIG11c3QgZGVsZXRlIHBlcm1hbmVudGx5IGFsbCBmaWxlcyBjb25zdGl0dXRpbmcgdGhlIFNPRlRXQVJFLgorCisKK0xJQ0VOU0UgQUdSRUVNRU5UCitOZXd0b24gR2FtZSBEeW5hbWljcyBMaW1pdGVkIGdyYW50cyB0byB0aGUgTElDRU5TRUUgYW5kIHRoZSBMSUNFTlNFRSBoZXJlYnkgYWNjZXB0cyBhIHBlcnBldHVhbAorbm9udHJhbnNmZXJhYmxlIGFuZCBub25leGNsdXNpdmUgbGljZW5zZSB0byB1c2UgYW5kIGRpc3RyaWJ1dGUgdGhlIFNPRlRXQVJFLCBmb3IgYW55IHB1cnBvc2UuCitJbiBhZGRpdGlvbiwgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFwcGx5OgorCisxKSBUaGUgTElDRU5TRUUgbWF5IG5vdCB1c2UgdGhlIFNPRlRXQVJFIHRvIHJldmVyc2UgZW5naW5lZXIgdGhlIGNvbXB1dGVyIGFsZ29yaXRobSB1c2VkIGJ5IHRoZSBTT0ZUV0FSRS4KKzIpIFRoZSBvcmlnaW4gb2YgdGhlIFNPRlRXQVJFIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkOyBJZiB0aGUgTElDRU5TRUUgdXNlcyB0aGUgU09GVFdBUkUgdG8gZGlzdHJpYnV0ZQorICAgYSBwcm9kdWN0LCB0aGUgTElDRU5TRUUgbXVzdCBub3QgY2xhaW0gdGhhdCBIZSBvciBTaGUgd3JvdGUgdGhlIG9yaWdpbmFsIFNPRlRXQVJFLgorMykgVGhlIExJQ0VOU0VFIGFncmVlcyB0byBjcmVkaXQgdGhlIHVzZSBvZiB0aGUgTmV3dG9uIEdhbWUgRHluYW1pY3MgaW4gYW55IHByb2dyYW0gaW5mb3JtYXRpb24sCisgICBpbmNsdWRpbmcgY3JlZGl0IHNjcmVlbnMsICJBYm91dCIgZGlhbG9ncywgcHJvZ3JhbSBub3RlcyBvciBpbnN0cnVjdGlvbnMgYW5kIHNocmluay13cmFwcGVkIHBhY2thZ2luZy4KKzQpIFRoZSBMSUNFTlNFRSBtYXkgbm90IHJlZGlzdHJpYnV0ZSB0aGUgU09GVFdBUkUsIGV4Y2VwdCBhcyBwYXJ0IG9mIGEgY29tcGlsZWQgc29mdHdhcmUgcHJvZ3JhbSB0aGF0IGlzCisgICBub3QgaXRzZWxmIGEgcGh5c2ljcyBsaWJyYXJ5LgorNSkgVGhlIExJQ0VOU0VFIGFncmVlcyB0byBub3RpZnkgd3d3Lm5ld3RvbmR5bmFtaWNzLmNvbSBvZiBhbnkgcHJvZHVjdHMsIGNvbW1lcmNpYWwsIHNoYXJld2FyZSBvciBmcmVlCisgICB0aGF0IGluY29ycG9yYXRlIHRoZSBOZXd0b24gR2FtZSBEeW5hbWljcyB0ZWNobm9sb2d5LgorCisKK0p1bGlvIEplcmV6IGFuZCBBbGFpbiBTdWVybworaHR0cDovL3d3dy5uZXd0b25keW5hbWljcy5jb20KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL25vbWFjaGluZSBiL2xpY2Vuc2VzL25vbWFjaGluZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWQ1MDJkCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvbm9tYWNoaW5lCkBAIC0wLDAgKzEsMzAxIEBACitFbmQtVXNlciBMaWNlbnNlIEFncmVlbWVudAorCitOb01hY2hpbmUgLSBSb21lIC0gSXRhbHkKKworTm9NYWNoaW5lIE5YIFByb2R1Y3RzIExpY2Vuc2UKKworQ29weXJpZ2h0IChjKSAyMDAyLTIwMDcgTm9NYWNoaW5lLiBBbGwgUmlnaHRzIFJlc2VydmVkLgorCitEbyBub3QgaW5zdGFsbCBvciB1c2UgTlggcHJvZHVjdHMgdW50aWwgeW91IGhhdmUgcmVhZCBhbmQgYWNjZXB0ZWQgdGhpcworQWdyZWVtZW50LiBCeSBpbnN0YWxsaW5nIG9yIHVzaW5nIE5YIHByb2R1Y3RzIHlvdSBhY2NlcHQgdGhpcyBBZ3JlZW1lbnQuCisKK0lmIHlvdSBkbyBub3QgYWdyZWUgdG8gdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZSwgeW91IG11c3Qgbm90IGluc3RhbGwKK29yIHVzZSB0aGUgTm9NYWNoaW5lIE5YIHByb2R1Y3RzLiBXaGVuIGFwcGxpY2FibGUgeW91IG1heSByZXR1cm4gTlgKK3Byb2R1Y3QgeW91IHB1cmNoYXNlZCwgaW5jbHVkaW5nIGFsbCBwYWNrYWdpbmcsIG1lZGlhLCBhbmQgZG9jdW1lbnRhdGlvbiwKK3RvIHRoZSBwbGFjZSBvZiBwdXJjaGFzZSBmb3IgYSByZWZ1bmQsIHByb3ZpZGVkIHRoYXQgdGhlIHJldHVybiBpcyBtYWRlCit3aXRoaW4gdGVuIGRheXMgb2YgdGhlIGRhdGUgb2YgcHVyY2hhc2UuCisKKzEuIExpY2Vuc2VlCisKKyJMaWNlbnNlZSIgaXMgdGhlIHBlcnNvbiwgY29tcGFueSBvciBlbnRpdHkgd2hvIHVzZXMgdGhpcyBOWCBQcm9kdWN0LgorVGhlIExpY2Vuc2VlIG11c3QgYWNjZXB0IGFuZCBhZ3JlZSB0byB0aGlzIEFncmVlbWVudCBiZWZvcmUgaW5zdGFsbGluZworb3IgdXNpbmcgdGhlIE5YIFByb2R1Y3QuCisKKzIuIExpY2Vuc2Ugb2YgTm9NYWNoaW5lIE5YIFByb2R1Y3QKKworU3ViamVjdCB0byB0aGUgb3RoZXIgcHJvdmlzaW9ucyBvZiB0aGlzIEFncmVlbWVudCwgTm9NYWNoaW5lIGdyYW50cyB0bworTGljZW5zZWUgYSBub25leGNsdXNpdmUsIG5vbnRyYW5zZmVyYWJsZSBsaWNlbnNlICgidGhlIExpY2Vuc2UiKSB0byB1c2UKK3RoZSBOWCBQcm9kdWN0IG9uIGEgc2luZ2xlIGNvbXB1dGVyIHN5c3RlbS4gQWRkaXRpb25hbGx5LCB0aGlzIHByb2R1Y3QKK21heSBiZSBpbnN0YWxsZWQgb24gbW9yZSB0aGFuIG9uZSBjb21wdXRlciBzeXN0ZW0gaW4gYSBub24tY29tbWVyY2lhbAorc2V0dGluZy4gUmlnaHRzIHRvIE5vTWFjaGluZSBub3QgZXhwcmVzc2x5IGdyYW50ZWQgdG8gTGljZW5zZWUgaW4gdGhpcworQWdyZWVtZW50IGFyZSByZXNlcnZlZCBieSBOb01hY2hpbmUuCisKKzMuIE5YIFByb2R1Y3QKKworVGhlICJOWCBQcm9kdWN0IiBpbmNsdWRlcyB0aGUgTlggU29mdHdhcmUgKE5YIENsaWVudCwgTlggU2VydmVyLCBOWAorU2VydmVyIE1hbmFnZXIsIE5YIFdlYiBDb21wYW5pb24gYW55IGVkaXRpb24gYW5kIGFkZC1vbiBzb2Z0d2FyZSkgYW5kLAorZGVwZW5kaW5nIG9uIHRoZSBwcm9kdWN0LCBhIExpY2Vuc2UgQ2VydGlmaWNhdGUuCisKKzQuIE5YIFNvZnR3YXJlCisKK1RoZSAiTlggU29mdHdhcmUiIGluY2x1ZGVzIHRocmVlIGNhdGVnb3JpZXMgb2YgY29tcHV0ZXIgcHJvZ3JhbXM6CitDb21tZXJjaWFsIFNvZnR3YXJlIGRldmVsb3BlZCBieSBOb01hY2hpbmUsIE9wZW4gU291cmNlIFNvZnR3YXJlCitkZXZlbG9wZWQgYnkgTm9NYWNoaW5lLCBUaGlyZCBQYXJ0eSBPcGVuIFNvdXJjZSBTb2Z0d2FyZS4gVGhlIHRlcm0KKyJTb2Z0d2FyZSIgaXMgdXNlZCB0byBtZWFuIGFueSBvciBhbGwgb2YgdGhlIENvbW1lcmNpYWwsIE9wZW4gU291cmNlLAorYW5kIFRoaXJkIFBhcnR5IFNvZnR3YXJlLgorCis0LjEgQ29tbWVyY2lhbCBOb01hY2hpbmUgU29mdHdhcmUKKworTm9NYWNoaW5lIENvbW1lcmNpYWwgU29mdHdhcmUgY29uc2lzdHMgb2YgdGhlIGZvbGxvd2luZyBjb21wdXRlciBwcm9ncmFtcwordGhhdCBoYXZlIGJlZW4gZGV2ZWxvcGVkIGJ5IE5vTWFjaGluZToKKworIC0gbnhzZXJ2ZXIKKyAtIG54bm9kZQorIC0gbnhtYW5hZ2VyCisgLSBueGNsaWVudAorIC0gbnhhcHBsZXQKKworTm9NYWNoaW5lIG93bnMgdGhlIGNvcHlyaWdodHMgYW5kIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbiBhbmQgdG8gZWFjaAoraXRlbSBvZiBOb01hY2hpbmUgQ29tbWVyY2lhbCBTb2Z0d2FyZS4gUmVkaXN0cmlidXRpb24gb2YgTlggU2VydmVyCitzb2Z0d2FyZSBpcyBmb3JiaWRkZW4gd2l0aG91dCB3cml0dGVuIHBlcm1pc3Npb24gYnkgTm9NYWNoaW5lLgorUmVkaXN0cmlidXRpb24gb2YgTlggQ2xpZW50IHNvZnR3YXJlLCBpbmNsdWRpbmcgY29tbWVyY2lhbCBDbG9zZWQgU291cmNlCitwYWNrYWdlcywgaXMgYWxsb3dlZCwgZnJlZSBvZiBjaGFyZ2UsIGZvciBjb21tZXJjaWFsIGFuZCBub24tY29tbWVyY2lhbAordXNlIHByb3ZpZGluZyBhbnkgY29weXJpZ2h0IG5vdGljZXMgdGhhdCBwZXJ0YWluIHRvIHRoZSBvcmlnaW5zIG9mIHRoZQorU29mdHdhcmUgYXJlIG5vdCBhbHRlcmVkIGluIGFueSB3YXkgb3IgcmVtb3ZlZC4KKworTm8gbW9kaWZpY2F0aW9uLCBhZGFwdGF0aW9uLCB0cmFuc2xhdGlvbiBvZiB0aGUgc29mdHdhcmUgaXMgcGVybWl0dGVkLAoraW5jbHVkaW5nIG1vZGlmaWNhdGlvbiB0byB0aGUgZ3JhcGhpY2FsIGNvbnRlbnRzLCB3aXRob3V0IHNwZWNpZmljIGFuZAorcHJpb3IgcGVybWlzc2lvbiBmcm9tIE5vTWFjaGluZS4KKworNC4yIE9wZW4gU291cmNlIE5vTWFjaGluZSBTb2Z0d2FyZQorCitPcGVuIFNvdXJjZSBOb01hY2hpbmUgU29mdHdhcmUgY29uc2lzdHMgb2YgcGFja2FnZXMgZGV2ZWxvcGVkIGJ5IE5vTWFjaGluZQorZm9yIGluY2x1c2lvbiBpbiBOWCBwcm9kdWN0cy4gTm9NYWNoaW5lIE9wZW4gU291cmNlIHNvZnR3YXJlIHBhY2thZ2VzCithbmQgbW9kaWZpY2F0aW9ucyB0byBleGlzdGluZyBPcGVuIFNvdXJjZSBwYWNrYWdlcyBhcmUgcmVsZWFzZWQgYnkKK05vTWFjaGluZSB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuIFRoZSBsaWNlbnNlCitnb3Zlcm5zIHRoZSBzb2Z0d2FyZSBhbmQgdGhlIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiwgbW9kaWZpY2F0aW9uLCBhbmQKK3VzZSBvZiB0aGUgc29mdHdhcmUuIFNvdXJjZSBjb2RlIG9mIHRoZSBPcGVuIFNvdXJjZSBzb2Z0d2FyZSBwYWNrYWdlcworaXMgaW5jbHVkZWQgYW5kIGRpc3RyaWJ1dGVkIHRvIExpY2Vuc2VlLCBjb25zaXN0ZW50IHdpdGggdGhlIHJlcXVpcmVtZW50cworb2YgdGhlIGxpY2Vuc2UgYWdyZWVtZW50LiBPcGVuIFNvdXJjZSBTb2Z0d2FyZSBkZXZlbG9wZWQgYnkgTm9NYWNoaW5lCitpcyBvd25lZCBieSBOb01hY2hpbmUgYW5kIGRpc3RyaWJ1dGVkIGJ5IE5vTWFjaGluZSB0byBMaWNlbnNlZSBmb3IgdXNlCitieSBMaWNlbnNlZS4gTm9NYWNoaW5lIHJlbGVhc2VzIGFzIE9wZW4gU291cmNlIHNvZnR3YXJlIHRoZSBmb2xsb3dpbmcKK3BhY2thZ2VzOgorCisgLSBueHByb3h5CisgLSBueGNvbXAKKyAtIG54Y29tcGV4dAorIC0gbnhzc2gKKyAtIG54dWV4ZWMKKyAtIG54c3Bvb2wKKyAtIG54c2Vuc29yCisgLSBueC1YMTEKKyAtIG54d2luCisgLSBueGF1dGgKKyAtIG54YWdlbnQKKyAtIG54dmlld2VyCisgLSBueGRlc2t0b3AKKyAtIG54ZXNkCisgLSBueHNjcmlwdHMKKyAtIG54Y29tcHNoCisgLSBueGtpbGwKKyAtIG54c2VydmljZQorIC0gbnhidWlsZGVyCisKKzQuMyBUaGlyZCBQYXJ0eSBPcGVuIFNvdXJjZSBTb2Z0d2FyZQorCitNYW55IG9mIHRoZSBTb2Z0d2FyZSBQcm9ncmFtcyBpbmNsdWRlZCBpbiB0aGUgU29mdHdhcmUgYXJlIGRpc3RyaWJ1dGVkCit1bmRlciB0aGUgdGVybXMgb2YgYWdyZWVtZW50cyB3aXRoIHRoaXJkIHBhcnRpZXMgKCJUaGlyZCBQYXJ0eSBBZ3JlZW1lbnRzIikKK3doaWNoIG1heSBleHBhbmQgb3IgbGltaXQgeW91ciByaWdodHMgdG8gdXNlIGNlcnRhaW4gU29mdHdhcmUgUHJvZ3JhbXMKK2FzIHNldCBmb3J0aCBpbiBTZWN0aW9uIDIuIENlcnRhaW4gU29mdHdhcmUgUHJvZ3JhbXMgbWF5IGJlIGxpY2Vuc2VkCisob3Igc3VibGljZW5zZWQpIHVuZGVyIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQgb3RoZXIgc2ltaWxhcgorb3BlbiBzb3VyY2UgbGljZW5zZSBhZ3JlZW1lbnRzICgiT1NMQXMiKSB3aGljaCwgYW1vbmcgb3RoZXIgcmlnaHRzLAorcGVybWl0IHRoZSBjb3B5aW5nLCBtb2RpZmljYXRpb24gYW5kIHJlZGlzdHJpYnV0aW9uIG9mIGNlcnRhaW4gU29mdHdhcmUKK1Byb2dyYW1zLCBvciBwb3J0aW9ucyB0aGVyZW9mLCBhbmQgZ2l2ZSBhY2Nlc3MgdG8gdGhlIHNvdXJjZSBjb2RlIG9mCitjZXJ0YWluIFNvZnR3YXJlIFByb2dyYW1zLCBvciBwb3J0aW9ucyB0aGVyZW9mLiBJbiBhZGRpdGlvbiwgY2VydGFpbgorU29mdHdhcmUgUHJvZ3JhbXMsIG9yIHBvcnRpb25zIHRoZXJlb2YsIG1heSBiZSBsaWNlbnNlZCAob3Igc3VibGljZW5zZWQpCit1bmRlciB0ZXJtcyBzdHJpY3RlciB0aGFuIHRob3NlIHNldCBmb3J0aCBpbiBTZWN0aW9uIDIuIFRoZSBUaGlyZCBQYXJ0eQorQWdyZWVtZW50cywgcmVsYXRlZCBvbmxpbmUgZG9jdW1lbnRhdGlvbiwgc291cmNlIGNvZGUsIGFuZCBvdGhlciBpbmZvcm1hdGlvbgorYWJvdXQgc3VjaCBTb2Z0d2FyZSBQcm9ncmFtcyBhcmUgYXZhaWxhYmxlIGF0IHRoZSByZWxldmFudCB3ZWJzaXRlczoKKworIC0gQ3lnd2luIFtDeWd3aW4gTGljZW5zZSwgaHR0cDovL3d3dy5jeWd3aW4uY29tL10KKyAtIFhGcmVlODYgW1hGcmVlODYgTGljZW5zZSwgaHR0cDovL3d3dy54ZnJlZS5vcmcvXQorIC0gT3BlblNTSCBbT3BlblNTSCBMaWNlbnNlLCBodHRwOi8vd3d3Lm9wZW5zc2gub3JnL10KKyAtIFJEZXNrdG9wIFtHUEwsIGh0dHA6Ly93d3cucmRlc2t0b3Aub3JnL10KKyAtIFRpZ2h0Vk5DIFtHUEwsIGh0dHA6Ly93d3cudGlnaHR2bmMub3JnL10KKyAtIENVUFMgW0dQTCwgaHR0cDovL3d3dy5jdXBzLm9yZy9dCisgLSBTQU1CQSBbR1BMLCBodHRwOi8vd3d3LnNhbWJhLm5ldC9dCisgLSBFU0QgW0dQTCwgaHR0cDovL3d3dy50dXgub3JnL35yaWNkdWRlL0Vzb3VuRC5odG1sXQorIC0gR0tyZWxsTSBbR1BMLCBodHRwOi8vd3d3LmdrcmVsbG0ubmV0L10KKyAtIFNRTGl0ZSBbU1FMaXRlIExpY2Vuc2UsIGh0dHA6Ly93d3cuc3FsaXRlLm9yZy9dIAorCitVcG9uIHJlcXVlc3QgTm9NYWNoaW5lIHdpbGwgZGVsaXZlciBhbGwgdGhlIHJlbGF0aXZlIHRoaXJkLXBhcnR5IHNvdXJjZQorY29kZSwgY29uc2lzdGVudCB3aXRoIHRoZSBsaWNlbnNpbmcgdGVybXMgb2YgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLCBhbmQKK2RvY3VtZW50YXRpb24gYXQgdGhlIGNvc3Qgb2YgdGhlIHBvc3RhZ2UgY2hhcmdlcyBpbmN1cnJlZC4KKworWW91IGFja25vd2xlZGdlIHRoYXQgeW91IGhhdmUgcmVhZCwgdW5kZXJzdG9vZCBhbmQgYWdyZWVkIHRvIHRoZSB0ZXJtcworYW5kIGNvbmRpdGlvbnMgb2YgZWFjaCBzdWNoIFRoaXJkIFBhcnR5IEFncmVlbWVudC4gVG8gdGhlIGV4dGVudCBhbnkKK1RoaXJkIFBhcnR5IEFncmVlbWVudHMgcmVxdWlyZSB0aGF0IExpY2Vuc29yIHByb3ZpZGUgcmlnaHRzIHRvIHVzZSwgY29weQorb3IgbW9kaWZ5IGEgU29mdHdhcmUgUHJvZ3JhbSB0aGF0IGFyZSBicm9hZGVyIHRoYW4gdGhlIHJpZ2h0cyBncmFudGVkCitpbiBTZWN0aW9uIDIsIHRoZW4gc3VjaCByaWdodHMgc2hhbGwgdGFrZSBwcmVjZWRlbmNlIG92ZXIgdGhlIHJpZ2h0cworYW5kIHJlc3RyaWN0aW9ucyBncmFudGVkIGluIHRoaXMgQWdyZWVtZW50IHNvbGVseSBmb3Igc3VjaCBTb2Z0d2FyZQorUHJvZ3JhbXMuCisKK0xpY2Vuc2VkLCBOb3QgU29sZCBPcGVuIFNvdXJjZSBTb2Z0d2FyZSwgTm9NYWNoaW5lIFNvZnR3YXJlIGFuZCBUaGlyZAorUGFydHkgU29mdHdhcmUgYXJlIG5vdCBzb2xkLCBidXQgYXJlIGxpY2Vuc2VkIGFuZCBkaXN0cmlidXRlZCB0byBMaWNlbnNlZS4KK0FueSByZWZlcmVuY2UgdG8gdGhlIHB1cmNoYXNlIG9yIHNhbGUgb2YgdGhlIE5YIFByb2R1Y3QgbWVhbnMsIHdpdGggcmVzcGVjdAordG8gdGhlIE5YIFNvZnR3YXJlIGFuZCBUaGlyZCBQYXJ0eSBTb2Z0d2FyZSwgYSBwdXJjaGFzZSBvciBzYWxlIG9mIHRoZQorYXBwbGljYWJsZSBsaWNlbnNlcy4gVGhlIGxpY2Vuc2UgZmVlcyBmb3Igc3VjaCBsaWNlbnNlcyBhcmUgaW5jbHVkZWQgaW4KK3RoZSBOWCBwcm9kdWN0IHB1cmNoYXNlIHByaWNlLiBObyBmZWUgaXMgY2hhcmdlZCBmb3IgYW55IE9wZW4gU291cmNlCitTb2Z0d2FyZSBsaWNlbnNlLCBidXQgYSBmZWUgZm9yIGRpc3RyaWJ1dGlvbiAoZS5nLiwgdHJhbnNmZXJyaW5nIGEgY29weQorb3IgY29waWVzIHRvIExpY2Vuc2VlKSBpcyBpbmNsdWRlZCBpbiB0aGUgTlggcHJvZHVjdCBwdXJjaGFzZSBwcmljZS4KK093bmVyc2hpcCBvZiBjb3BpZXMgb2YgT3BlbiBTb3VyY2UgU29mdHdhcmUsIE5vTWFjaGluZSBTb2Z0d2FyZSBhbmQgVGhpcmQKK1BhcnR5IFNvZnR3YXJlIGlzIGdvdmVybmVkIGJ5IHRoZSBhcHBsaWNhYmxlIGxpY2Vuc2UgYWdyZWVtZW50LgorCitNYWludGVuYW5jZSBSZWxlYXNlcyBBbGwgbWFpbnRlbmFuY2UgcmVsZWFzZXMsIGZpeGVzLCBwYXRjaGVzLCB3b3JrLWFyb3VuZAorc29sdXRpb25zLCB1cGdyYWRlcywgYW5kIHVwZGF0ZXMgZm9yIG9yIHRvIHRoZSBPcGVuIFNvdXJjZSBTb2Z0d2FyZSwKK05vTWFjaGluZSBTb2Z0d2FyZSBhbmQgVGhpcmQgUGFydHkgU29mdHdhcmUgbWFkZSBhdmFpbGFibGUgYnkgTm9NYWNoaW5lCitvciBpdHMgZGlzdHJpYnV0b3JzLCBPRU1zLCBWQVJzIG9yIG90aGVyIHJlc2VsbGVycyB0byBMaWNlbnNlZSBzaGFsbCBiZQorZGVlbWVkIHBhcnQgb2YgdGhlIE5vTWFjaGluZSBTb2Z0d2FyZSwgVGhpcmQgUGFydHkgU29mdHdhcmUgb3IgT3BlbgorU291cmNlIFNvZnR3YXJlIGFzIGFwcGxpY2FibGUsIGFuZCBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGlzIEFncmVlbWVudAorYW5kIHRoZSBsaWNlbnNlIGFncmVlbWVudHMgcmVmZXJyZWQgdG8gaGVyZWluLCB1bmxlc3MgYSBkaWZmZXJlbnQgbGljZW5zZQorYWdyZWVtZW50IGlzIHByb3ZpZGVkIHdpdGggb3IgbWFkZSBhcHBsaWNhYmxlIHRvIHN1Y2ggbWFpbnRlbmFuY2UgcmVsZWFzZXMsCitmaXhlcywgcGF0Y2hlcywgd29yay1hcm91bmQgc29sdXRpb25zLCB1cGdyYWRlcywgYW5kIHVwZGF0ZXMuCisKKzUuIERvY3VtZW50YXRpb24KKworIkRvY3VtZW50YXRpb24iIG1lYW5zIHRoZSBvbmxpbmUgZG9jdW1lbnRhdGlvbiBhbmQgcHJpbnRlZCBkb2N1bWVudGF0aW9uLAoraWYgYW55LCBwcm92aWRlZCB0byBMaWNlbnNlZSBpbiBjb25uZWN0aW9uIHdpdGggTlgsIGV4Y2VwdCBmb3IgZG9jdW1lbnRhdGlvbgorcHJvdmlkZWQgdW5kZXIgdGhpcmQgcGFydHkgb3Igb3BlbiBzb3VyY2UgbGljZW5zZXMgYXMgcHJvdmlkZWQgaW4gU2VjdGlvbnMKKzQuMiBhbmQgNC4zIGFib3ZlLiBXaGVuZXZlciB0aGUgY29udGV4dCByZWFzb25hYmx5IHBlcm1pdHMsIGFueSByZWZlcmVuY2UKK2luIHRoaXMgQWdyZWVtZW50IHRvIE5vTWFjaGluZSBTb2Z0d2FyZSBzaGFsbCBhbHNvIGFwcGx5IHRvIERvY3VtZW50YXRpb24uCitUaGUgRG9jdW1lbnRhdGlvbiBtYXkgYmUgdXNlZCBieSBMaWNlbnNlZSwgYnV0IG9ubHkgaW4gY29ubmVjdGlvbiB3aXRoCit0aGlzIE5YIFByb2R1Y3QuCisKKzYuIE5vTWFjaGluZSBBcnR3b3JrCisKKyJOb01hY2hpbmUgQXJ0d29yayIgaW5jbHVkZXMgdGhlIFshTV0gbG9nbywgdGhlIE5vTWFjaGluZSBhbmQgTlggbG9nb3MsCitpbmNsdWRlZCBpY29uIHNldHMsIGFuZCBvdGhlciB0cmFkZW1hcmtzLiBOb01hY2hpbmUgaG9sZHMgYWxsIHJpZ2h0cywKK2luY2x1ZGluZyB0aGUgcmlnaHQgb2YgZGlzdHJpYnV0aW9uLCB0byBOb01hY2hpbmUgQXJ0d29yay4KKworNy4gTGltaXRlZCBXYXJyYW50eQorCitNZWRpYSBBbmQgRG9jdW1lbnRhdGlvbi4gTm9NYWNoaW5lIHdhcnJhbnRzIHRoYXQgaWYgdGhlIE5YIFByb2R1Y3QgbWVkaWEKK29yIHByaW50ZWQgZG9jdW1lbnRhdGlvbiwgaWYgYW55LCBwcm92aWRlZCBieSBOb01hY2hpbmUgYXJlIGluIGEgZGFtYWdlZAorb3IgcGh5c2ljYWxseSBkZWZlY3RpdmUgY29uZGl0aW9uIHdoZW4gZGVsaXZlcmVkIGFuZCBpZiB0aGV5IGFyZSByZXR1cm5lZAordG8gTm9NYWNoaW5lIChwb3N0YWdlIHByZXBhaWQpIHdpdGhpbiAzMCBkYXlzIG9mIHRoZSBkYXRlIG9mIHB1cmNoYXNlLAordGhlbiBOb01hY2hpbmUgd2lsbCBwcm92aWRlIExpY2Vuc2VlIHdpdGggcmVwbGFjZW1lbnRzIGF0IG5vIGNoYXJnZS4KKworTm9NYWNoaW5lIFNvZnR3YXJlLiBOb01hY2hpbmUgd2FycmFudHMgdGhhdCBpZiB0aGUgTm9NYWNobmUgU29mdHdhcmUKK2ZhaWxzIHRvIHN1YnN0YW50aWFsbHkgY29uZm9ybSB0byB0aGUgc3BlY2lmaWNhdGlvbnMgaW4gdGhlIERvY3VtZW50YXRpb24KK29yIHRvIGFueSBvdGhlciBOb01hY2hpbmUgU29mdHdhcmUgc3BlY2lmaWNhdGlvbnMgcHVibGlzaGVkIGJ5IE5vTWFjaGluZQorYW5kIGlmIHRoZSBub25jb25mb3JtaXR5IGlzIHJlcG9ydGVkIGluIHdyaXRpbmcgYnkgTGljZW5zZWUgdG8gTm9NYWNoaW5lCit3aXRoaW4gMzAgZGF5cyBmcm9tIHRoZSBkYXRlIHRoZSBMaWNlbnNlIGlzIHB1cmNoYXNlZCwgdGhlbiBOb01hY2hpbmUKK3NoYWxsIGVpdGhlciByZW1lZHkgdGhlIG5vbmNvbmZvcm1pdHkgb3Igb2ZmZXIgdG8gcmVmdW5kIHRoZSBwdXJjaGFzZQorcHJpY2UgdG8gTGljZW5zZWUgdXBvbiBhIHJldHVybiBvZiB0aGUgTlggUHJvZHVjdCAoaW5jbHVkaW5nIGFsbCBwYWNrYWdpbmcsCittZWRpYSwgYW5kIGRvY3VtZW50YXRpb24pIHRvIE5vTWFjaGluZS4gSW4gdGhlIGV2ZW50IG9mIGEgcmVmdW5kLCB0aGUKK0xpY2Vuc2Ugc2hhbGwgdGVybWluYXRlLgorCitUaGlyZCBQYXJ0eSBTb2Z0d2FyZS4gV2FycmFudGllcywgaWYgYW55LCBhcHBsaWNhYmxlIHRvIFRoaXJkIFBhcnR5CitTb2Z0d2FyZSB3aWxsIGJlIHRoZSB3YXJyYW50aWVzIG1hZGUgYnkgdGhlIHRoaXJkIHBhcnR5IGxpY2Vuc29ycyBpbgordGhlIGFwcGxpY2FibGUgbGljZW5zZSBhZ3JlZW1lbnRzLgorCitPcGVuIFNvdXJjZSBTb2Z0d2FyZS4gUHVyc3VhbnQgdG8gdGhlIHZhcmlvdXMgb3BlbiBzb3VyY2UgbGljZW5zZXMKK3RoZXJlIGlzIG5vIHdhcnJhbnR5IGFwcGxpY2FibGUgdG8gT3BlbiBTb3VyY2UgU29mdHdhcmUuCisKKzguIERpc2NsYWltZXJzIEFuZCBMaW1pdGF0aW9ucworCitEaXNjbGFpbWVyIE9mIFdhcnJhbnRpZXMuIE5PTUFDSElORSBNQUtFUyBOTyBXQVJSQU5UWSwgUFJPTUlTRSBPUgorUkVQUkVTRU5UQVRJT04gTk9UIEVYUFJFU1NMWSBTRVQgRk9SVEggSU4gVEhJUyBBR1JFRU1FTlQuIEVYQ0VQVCBBUworRVhQUkVTU0xZIFdBUlJBTlRFRCBIRVJFSU4sIFRIRSBOWCBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIFdJVEhPVVQKK1dBUlJBTlRZIE9SIFJFUFJFU0VOVEFUSU9OIE9GIEFOWSBLSU5ELiBOT01BQ0hJTkUgTUFLRVMgTk8gV0FSUkFOVFkgT1IKK1JFUFJFU0VOVEFUSU9OIFdJVEggUkVTUEVDVCBUTyBUSElSRCBQQVJUWSBTT0ZUV0FSRS4gT1BFTiBTT1VSQ0UgU09GVFdBUkUKK0lTIFBST1ZJREVEICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPUiBSRVBSRVNFTlRBVElPTiBPRiBBTlkgS0lORC4KK05PTUFDSElORSBESVNDTEFJTVMgQU5EIEVYQ0xVREVTIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgSU5DTFVESU5HLCBXSVRIT1VUCitMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE5PTklORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZCitBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIE5PTUFDSElORSBET0VTIE5PVCBXQVJSQU5UIFRIQVQKK0FOWSBUSEUgU09GVFdBUkUgV0lMTCBTQVRJU0ZZIExJQ0VOU0VFJ1MgUkVRVUlSRU1FTlRTIE9SIFRIQVQgSVQgSVMKK1dJVEhPVVQgREVGRUNUIE9SIEVSUk9SIE9SIFRIQVQgVEhFIE9QRVJBVElPTiBUSEVSRU9GIFdJTEwgQkUgVU5JTlRFUlJVUFRFRC4KK1RISVMgQUdSRUVNRU5UIEdJVkVTIExJQ0VOU0VFIFNQRUNJRklDIExFR0FMIFJJR0hUUy4gTElDRU5TRUUgTUlHSFQKK0hBVkUgT1RIRVIgUklHSFRTLCBXSElDSCBWQVJZIEZST00gU1RBVEUvSlVSSVNESUNUSU9OIFRPIFNUQVRFL0pVUklTRElDVElPTi4KKworTGltaXRhdGlvbiBPbiBMaWFiaWxpdHkuIFRIRSBBR0dSRUdBVEUgTElBQklMSVRZIE9GIE5PTUFDSElORSBBUklTSU5HCitGUk9NIE9SIFJFTEFUSU5HIFRPIFRISVMgQUdSRUVNRU5UIE9SIEFOWSBPRiBUSEUgU09GVFdBUkUgKFJFR0FSRExFU1MKK09GIFRIRSBGT1JNIE9GIEFDVElPTiBPUiBDTEFJTSAtIEUuRy4sIENPTlRSQUNULCBXQVJSQU5UWSwgVE9SVCwgU1RSSUNUCitMSUFCSUxJVFksIE1BTFBSQUNUSUNFLCBGUkFVRCBBTkQvT1IgT1RIRVJXSVNFKSBTSEFMTCBOT1QgRVhDRUVEIFRIRQorVE9UQUwgUEFZTUVOVCBNQURFIEJZIExJQ0VOU0VFIFRPIFBVUkNIQVNFIFRISVMgTlggUFJPRFVDVC4gTk9NQUNISU5FCitTSEFMTCBOT1QgSU4gQU5ZIENBU0UgQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCwKK0lORElSRUNUIE9SIFBVTklUSVZFIERBTUFHRVMsIE9SIEZPUiBMT1NTIE9GIFBST0ZJVCwgUkVWRU5VRSwgREFUQSwgT1IKK1BST0dSQU1TLCBFVkVOIElGIE5vTWFjaGluZSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBUSEVSRU9GLgorQmVjYXVzZSBzb21lIHN0YXRlcy9qdXJpc2RpY3Rpb25zIGRvIG5vdCBhbGxvdyB0aGUgZXhjbHVzaW9uIG9yIGxpbWl0YXRpb24KK29mIGxpYWJpbGl0eSwgdGhlIGFib3ZlIGxpbWl0YXRpb24gbWlnaHQgbm90IGFwcGx5LgorCitSZXNwb25zaWJpbGl0eSBGb3IgRGVjaXNpb25zLiBMaWNlbnNlZSBpcyByZXNwb25zaWJsZSBmb3IgZGVjaXNpb25zCittYWRlIGFuZCBhY3Rpb25zIHRha2VuIGJhc2VkIG9uIHRoZSBTb2Z0d2FyZS4KKworTm9uLVBhcnRpZXMuIFRoZSBvZmZpY2VycywgZGlyZWN0b3JzLCBlbXBsb3llZXMsIHNoYXJlaG9sZGVycyBhbmQKK3JlcHJlc2VudGF0aXZlcyBvZiBOb01hY2hpbmUgYXJlIG5vdCBwYXJ0aWVzIHRvIHRoaXMgQWdyZWVtZW50IGFuZCBzaGFsbAoraGF2ZSBubyBvYmxpZ2F0aW9uIG9yIGxpYWJpbGl0eSB0byBMaWNlbnNlZSByZWxhdGluZyB0byB0aGlzIEFncmVlbWVudAorb3IgdGhlIFNvZnR3YXJlLgorCis5LiBTb2xlIFJlbWVkeSBBbmQgQWxsb2NhdGlvbiBPZiBSaXNrCisKK0xJQ0VOU0VFJ1MgU09MRSBBTkQgRVhDTFVTSVZFIFJFTUVEWSBJUyBTRVQgRk9SVEggSU4gVEhJUyBBR1JFRU1FTlQuCitUaGlzIEFncmVlbWVudCBkZWZpbmVzIGEgbXV0dWFsbHkgYWdyZWVkLXVwb24gYWxsb2NhdGlvbiBvZiByaXNrIGFuZAordGhlIExpY2Vuc2UgZmVlcyByZWZsZWN0IHN1Y2ggYWxsb2NhdGlvbiBvZiByaXNrLgorCisxMC4gU3VwcG9ydAorCitOb3RoaW5nIGluIHRoaXMgQWdyZWVtZW50IGVudGl0bGVzIExpY2Vuc2VlIHRvIGFueSBzdXBwb3J0LCBtYWludGVuYW5jZQorb3IgbmV3IHZlcnNpb25zIG9yIGRpc3RyaWJ1dGlvbnMgb2YgYW55IFNvZnR3YXJlLiBMaWNlbnNlZSBtYXkgY29udGFjdAorTm9NYWNoaW5lIHRvIGRldGVybWluZSB0aGUgYXZhaWxhYmlsaXR5IG9mIHN1cHBvcnQsIG1haW50ZW5hbmNlIGFuZCBuZXcKK3ZlcnNpb25zIGFuZCBkaXN0cmlidXRpb25zIG9mIFNvZnR3YXJlLCBhbmQgdGhlIGZlZXMsIHRlcm1zIGFuZCBjb25kaXRpb25zCithcHBsaWNhYmxlIHRoZXJlIHRvLgorCisxMS4gR292ZXJuaW5nIExhdworCitUaGlzIEFncmVlbWVudCBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUgc3RhdGUgb2YgSXRhbHkgd2l0aG91dAorZ2l2aW5nIGVmZmVjdCB0byBjb25mbGljdCBvciBjaG9pY2Ugb2YgbGF3IHByaW5jaXBsZXMuIFRoZSBwYXJ0aWVzIGFncmVlCit0byBleGNsdWRlIGFwcGxpY2F0aW9uIG9mIHRoZSAiVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMKK2ZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIiB0byB0aGlzIEFncmVlbWVudC4gQW55IGxpdGlnYXRpb24KK2JldHdlZW4gdGhlIHBhcnRpZXMgc2hhbGwgYmUgY29uZHVjdGVkIGV4Y2x1c2l2ZWx5IGluIFJvbWUgc3RhdGUgY291cnRzLgorVGhlIHBhcnRpZXMgYWdyZWUgYW5kIHN1Ym1pdCB0byBzdWNoIGV4Y2x1c2l2ZSBqdXJpc2RpY3Rpb24gYW5kIHZlbnVlLgorCisxMi4gRW50aXJlIEFncmVlbWVudAorCitUaGlzIEFncmVlbWVudCBzZXRzIGZvcnRoIHRoZSBlbnRpcmUgdW5kZXJzdGFuZGluZyBhbmQgYWdyZWVtZW50IGJldHdlZW4KK3RoZSBwYXJ0aWVzIHJlbGF0aW5nIHRvIHRoZSBzdWJqZWN0IG1hdHRlciBvZiB0aGlzIEFncmVlbWVudCBhbmQgbWF5IGJlCithbWVuZGVkIG9ubHkgaW4gYSB3cml0aW5nIHNpZ25lZCBieSBib3RoIHBhcnRpZXMuIE5vIHZlbmRvciwgZGlzdHJpYnV0b3IsCitPRU0sIFZBUiwgcmVzZWxsZXIsIGRlYWxlciwgcmV0YWlsZXIsIHNhbGVzIHBlcnNvbiBvciBvdGhlciBwZXJzb24gaXMKK2F1dGhvcml6ZWQgYnkgTm9NYWNoaW5lIHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudCBvciB0byBtYWtlIGFueSB3YXJyYW50eSwKK3JlcHJlc2VudGF0aW9uIG9yIHByb21pc2Ugd2hpY2ggaXMgZGlmZmVyZW50IHRoYW4sIG9yIGluIGFkZGl0aW9uIHRvLAordGhlIHdhcnJhbnRpZXMsIHJlcHJlc2VudGF0aW9ucyBhbmQgcHJvbWlzZXMgb2YgdGhpcyBBZ3JlZW1lbnQuCisKKzEzLiBUZXJtaW5hdGlvbgorCitUaGUgTGljZW5zZSBzaGFsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSBpZiBMaWNlbnNlZSBtYXRlcmlhbGx5IGJyZWFjaGVzCit0aGlzIEFncmVlbWVudC4gVXBvbiB0ZXJtaW5hdGlvbiBvZiB0aGUgTGljZW5zZSwgTGljZW5zZWUgc2hhbGwgY2Vhc2UKK2FsbCB1c2Ugb2YgdGhlIE5YIFNvZnR3YXJlIGFuZCBzaGFsbCBkZXN0cm95IGFsbCBjb3BpZXMgb2YgdGhlIE5YIFNvZnR3YXJlCit3aXRoaW4gdGhlIHBvc3Nlc3Npb24gb3IgY29udHJvbCBvZiBMaWNlbnNlZSBhbmQgc2hhbGwgcmV0dXJuIHRoZSBvcmlnaW5hbAorTlggU29mdHdhcmUgbWVkaWEgYW5kIERvY3VtZW50YXRpb24sIGlmIGFueSwgdG8gTm9NYWNoaW5lLgorCisxNC4gRXhwb3J0IExhd3MKKworTGljZW5zZWUgc2hhbGwgbm90IGV4cG9ydCwgZGlzY2xvc2Ugb3IgZGlzdHJpYnV0ZSBhbnkgU29mdHdhcmUgaW4gdmlvbGF0aW9uCitvZiBhbnkgYXBwbGljYWJsZSBsYXdzIG9yIHJlZ3VsYXRpb25zLCBpbmNsdWRpbmcgdGhlIGV4cG9ydCBsYXdzIGFuZAorcmVndWxhdGlvbnMgb2YgSXRhbHksIGFuZCBzaGFsbCBjb21wbHkgd2l0aCBhbGwgc3VjaCBsYXdzIGFuZCByZWd1bGF0aW9ucy4KKworMTUuIENvbnN0cnVjdGlvbgorCitJbiB0aGUgY29uc3RydWN0aW9uIGFuZCBpbnRlcnByZXRhdGlvbiBvZiB0aGlzIEFncmVlbWVudCwgbm8gcnVsZSBvZgorc3RyaWN0IGNvbnN0cnVjdGlvbiBzaGFsbCBhcHBseSBhZ2FpbnN0IGVpdGhlciBwYXJ0eS4KKworMTYuIFNldmVyYWJpbGl0eQorCitJZiBhbnkgcHJvdmlzaW9uIGluIHRoaXMgQWdyZWVtZW50IGlzIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZSBvciBjb250cmFyeQordG8gYXBwbGljYWJsZSBsYXcsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIGNvbnN0cnVlZCwgbGltaXRlZCwgb3IgYWx0ZXJlZCwKK2FzIG5lY2Vzc2FyeSwgdG8gZWxpbWluYXRlIHRoZSBpbnZhbGlkaXR5IG9yIHVuZW5mb3JjZWFiaWxpdHkgb3IgdGhlCitjb25mbGljdCB3aXRoIGFwcGxpY2FibGUgbGF3LCBhbmQgYWxsIG90aGVyIHByb3Zpc2lvbnMgb2YgdGhpcyBBZ3JlZW1lbnQKK3NoYWxsIHJlbWFpbiBpbiBlZmZlY3QuCisKK05vTWFjaGluZSdzIEVuZCBVc2VyIExpY2Vuc2UgQWdyZWVtZW50IGlzIHN1YmplY3QgdG8gcmV2aXNpb25zLiBQbGVhc2UKK3NlZSBodHRwOi8vd3d3Lm5vbWFjaGluZS5jb20gZm9yIGFueSB1cGRhdGVzCmRpZmYgLS1naXQgYS9saWNlbnNlcy9ub3dlYiBiL2xpY2Vuc2VzL25vd2ViCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxZjMzODQKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9ub3dlYgpAQCAtMCwwICsxLDIyIEBACitOb3dlYiBpcyBjb3B5cmlnaHQgMTk4OS0yMDAwIGJ5IE5vcm1hbiBSYW1zZXkuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitOb3dlYiBpcyBwcm90ZWN0ZWQgYnkgY29weXJpZ2h0LiAgSXQgaXMgbm90IHB1YmxpYy1kb21haW4KK3NvZnR3YXJlIG9yIHNoYXJld2FyZSwgYW5kIGl0IGlzIG5vdCBwcm90ZWN0ZWQgYnkgYSBgYGNvcHlsZWZ0JycKK2FncmVlbWVudCBsaWtlIHRoZSBvbmUgdXNlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgorCitOb3dlYiBpcyBhdmFpbGFibGUgZnJlZSBmb3IgYW55IHVzZSBpbiBhbnkgZmllbGQgb2YgZW5kZWF2b3IuICBZb3UgbWF5CityZWRpc3RyaWJ1dGUgbm93ZWIgaW4gd2hvbGUgb3IgaW4gcGFydCBwcm92aWRlZCB5b3UgYWNrbm93bGVkZ2UgaXRzCitzb3VyY2UgYW5kIGluY2x1ZGUgdGhpcyBDT1BZUklHSFQgZmlsZS4gIFlvdSBtYXkgbW9kaWZ5IG5vd2ViIGFuZAorY3JlYXRlIGRlcml2ZWQgd29ya3MsIHByb3ZpZGVkIHlvdSByZXRhaW4gdGhpcyBjb3B5cmlnaHQgbm90aWNlLCBidXQKK3RoZSByZXN1bHQgbWF5IG5vdCBiZSBjYWxsZWQgbm93ZWIgd2l0aG91dCBteSB3cml0dGVuIGNvbnNlbnQuCisKK1lvdSBtYXkgc2VsbCBub3dlYiBpZiB5b3Ugd2lzaC4gIEZvciBleGFtcGxlLCB5b3UgbWF5IHNlbGwgYSBDRC1ST00KK2luY2x1ZGluZyBub3dlYi4KKworWW91IG1heSBzZWxsIGEgZGVyaXZlZCB3b3JrLCBwcm92aWRlZCB0aGF0IGFsbCBzb3VyY2UgY29kZSBmb3IgeW91cgorZGVyaXZlZCB3b3JrIGlzIGF2YWlsYWJsZSwgYXQgbm8gYWRkaXRpb25hbCBjaGFyZ2UsIHRvIGFueW9uZSB3aG8gYnV5cworeW91ciBkZXJpdmVkIHdvcmsgaW4gYW55IGZvcm0uICBZb3UgbXVzdCBnaXZlIHBlcm1pc3NvbiBmb3Igc2FpZAorc291cmNlIGNvZGUgdG8gYmUgdXNlZCBhbmQgbW9kaWZpZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgbGljZW5zZS4KK1lvdSBtdXN0IHN0YXRlIGNsZWFybHkgdGhhdCB5b3VyIHdvcmsgdXNlcyBvciBpcyBiYXNlZCBvbiBub3dlYiBhbmQKK3RoYXQgbm93ZWIgaXMgYXZhaWxhYmxlIGZyZWUgb2YgY2hhbmdlLiAgWW91IG11c3QgYWxzbyByZXF1ZXN0IHRoYXQKK2J1ZyByZXBvcnRzIG9uIHlvdXIgd29yayBiZSByZXBvcnRlZCB0byB5b3UuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9vYXNpcyBiL2xpY2Vuc2VzL29hc2lzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0M2EzYTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9vYXNpcwpAQCAtMCwwICsxLDU1IEBACisgICAgICAgICAgTElDRU5TRSBvZiBWRUMsIFNBUEksIERJTVMgYW5kIEFzc29jaWF0ZWQgUHJvZ3JhbXMKKworQ09QWVJJR0hUIE5PVElDRToKKworQ29weXJpZ2h0IChjKSAxOTg1LTIwMDIsCisgICAgICAgICAgICAgIFJlc2VhcmNoIGdyb3VwIG9uIE1ldGhvZHMgb2YgU29sdmluZyBDcnlzdGFsIFN0cnVjdHVyZXMsCisgICAgICAgICAgICAgIEluc3RpdHV0ZSBvZiBQaHlzaWNzLCBDaGluZXNlIEFjYWRlbXkgb2YgU2NpZW5jZXMuCisgICAgICAgICAgICAgIEFsbCByaWdodHMgcmVzZXJ2ZWQuCitBdXRob3JzOgorICAgICAgICAgVkVDCisgICAgICAgICAgICAgV2FuIFpoZW5nLWh1YSwgTGl1IFl1LWRvbmcsIEZ1IFpoZW5nLXFpbmcsIExpIFlhbmcsCisgICAgICAgICAgICAgQ2hlbmcgVGluZy16aHUsIExpIEZhbmctaHVhICYgRmFuIEhhaS1mdQorICAgICAgICAgU0FQSQorICAgICAgICAgICAgIFpoZW5nIENoYW8tZGUsIEd1IFl1YW4teGluLCBXYW4gWmhlbmctaHVhLCBZYW8gSmlhLXhpbmcgJgorICAgICAgICAgICAgIEZhbiBIYWktZnUKKyAgICAgICAgIERJTVMKKyAgICAgICAgICAgICBGdSBaaGVuZy1xaW5nLCBMaSBZYW5nLCBMaXUgWXUtZG9uZyAmIEZhbiBIYWktZnUKKworTElDRU5TRSBBR1JFRU1FTlQ6CisKK0luIGNvbnNpZGVyYXRpb24gb2YgYmVpbmcgYWxsb3dlZCB0byBjb3B5IGFuZC9vciB1c2UgdGhpcyBzb2Z0d2FyZSwKK3RoZSB1c2VyIGFncmVlcyB0byBiZSBib3VuZCBieSB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlCitBZ3JlZW1lbnQgYXMgIkxpY2Vuc2VlLiIgIFRoaXMgQWdyZWVtZW50IGdpdmVzIHlvdSwgdGhlIExJQ0VOU0VFLAorY2VydGFpbiByaWdodHMgYW5kIG9ibGlnYXRpb25zLiAgQnkgdXNpbmcgdGhlIHNvZnR3YXJlLCB5b3UgaW5kaWNhdGUKK3RoYXQgeW91IGhhdmUgcmVhZCwgdW5kZXJzdG9vZCwgYW5kIHdpbGwgY29tcGx5IHdpdGggdGhlIGZvbGxvd2luZwordGVybXMgYW5kIGNvbmRpdGlvbnMuCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gdXNlIG9yIGNvcHkgdGhlc2UgcHJvZ3JhbXMgZm9yIGFjYWRlbWljCitwdXJwb3NlLCBwcm92aWRlZCB0aGUgdGV4dCBvZiB0aGlzIE5PVElDRSAodG8gaW5jbHVkZSBDT1BZUklHSFQKK05PVElDRSwgTElDRU5TRSBBR1JFRU1FTlQsIGFuZCBESVNDTEFJTUVSKSBpcyByZXRhaW5lZCB3aXRoIGFsbAorY29waWVzLiAgUGVybWlzc2lvbiB0byBtb2RpZnkgdGhlIGNvZGUgYW5kIHRvIGRpc3RyaWJ1dGUgbW9kaWZpZWQgY29kZQoraXMgZ3JhbnRlZCwgcHJvdmlkZWQgdGhlIHRleHQgb2YgdGhpcyBOT1RJQ0UgaXMgcmV0YWluZWQsIGEgbm90aWNlCit0aGF0IHRoZSBjb2RlIHdhcyBtb2RpZmllZCBpcyBpbmNsdWRlZCB3aXRoIHRoZSBhYm92ZSBDT1BZUklHSFQgTk9USUNFCithbmQgd2l0aCB0aGUgQ09QWVJJR0hUIE5PVElDRSBpbiBhbnkgbW9kaWZpZWQgZmlsZXMsIGFuZCB0aGF0IHRoaXMKK2ZpbGUgKCJMSUNFTlNFIikgaXMgZGlzdHJpYnV0ZWQgd2l0aCB0aGUgbW9kaWZpZWQgY29kZS4KKworVGl0bGUgdG8gY29weXJpZ2h0IHRvIHRoaXMgc29mdHdhcmUgYW5kIGl0cyBkZXJpdmF0aXZlcyBhbmQgdG8gYW55Cithc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gc2hhbGwgYXQgYWxsIHRpbWVzIHJlbWFpbiB3aXRoIExpY2Vuc29yIGFuZAorTElDRU5TRUUgYWdyZWVzIHRvIHByZXNlcnZlIHRoZSBzYW1lLiAgTm90aGluZyBpbiB0aGlzIEFncmVlbWVudCBzaGFsbAorYmUgY29uc3RydWVkIGFzIGNvbmZlcnJpbmcgcmlnaHRzIHRvIHVzZSBpbiBhZHZlcnRpc2luZywgcHVibGljaXR5IG9yCitvdGhlcndpc2UgYW55IHRyYWRlbWFyayBvZiB0aGUgbmFtZSBvZiB0aGUgSW5zdGl0dXRlIG9mIFBoeXNpY3MsIENoaW5lc2UKK0FjYWRlbXkgb2YgU2NpZW5jZXMuCisKK0RJU0NMQUlNRVI6CisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IKK0lNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKK09GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCitJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCitOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCitEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKK1RIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL29saXZpYSBiL2xpY2Vuc2VzL29saXZpYQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGU4NWY0Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvb2xpdmlhCkBAIC0wLDAgKzEsOCBAQAorUmVsYXRpbmcgb3JnYW5pemF0aW9ucyBhbmQgYXV0aG9yIGhhdmUgTm8gbGlhYmlsaXR5IGZvciBhbnkgbG9zcyBvZiBwcm9maXRzCit3aGF0ZXZlciBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHByb2R1Y3QuIFBlcm1pc3Npb24gdG8gdXNlIGFuZCBjb3B5IHRoaXMKK3NvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBpcyBoZXJlYnkgZ3JhbnRlZC4KK1RoaXMgc29mdHdhcmUgaXMgZnJlZSB0byBiZSBtb2RpZmllZCBvbmx5IGZvciBhY2FkZW1pYyBwdXJwb3NlIGFuZCBwZXJzb25hbCB1c2UuCitIb3dldmVyLCBXZSBkbyBOb3QgYXNzdW1lIHJlc3BvbnNpYmlsaXR5IGZvciBhbnkgcGVyc29uYWxseSBjdXN0b21pemVkIHZlcnNpb25zLgorCisgICAgICAgICAgICAgICAgICBDb3B5cmlnaHQgKGMpIDIwMTAgT2xpdmlhIERldmVsb3BlciBUZWFtLCBIb2trYWlkbyBVbml2ZXJzaXR5LgorCmRpZmYgLS1naXQgYS9saWNlbnNlcy9vcGVuYWZzLWtyYjUtYSBiL2xpY2Vuc2VzL29wZW5hZnMta3JiNS1hCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4MmIyZDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9vcGVuYWZzLWtyYjUtYQpAQCAtMCwwICsxLDI0IEBACisvKgorICogQ29weXJpZ2h0IDE5OTIsIDIwMDIgYnkgdGhlIE1hc3NhY2h1c2V0dHMgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3kuCisgKiBBbGwgUmlnaHRzIFJlc2VydmVkLgorICoKKyAqIEV4cG9ydCBvZiB0aGlzIHNvZnR3YXJlIGZyb20gdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYSBtYXkKKyAqICAgcmVxdWlyZSBhIHNwZWNpZmljIGxpY2Vuc2UgZnJvbSB0aGUgVW5pdGVkIFN0YXRlcyBHb3Zlcm5tZW50LgorICogICBJdCBpcyB0aGUgcmVzcG9uc2liaWxpdHkgb2YgYW55IHBlcnNvbiBvciBvcmdhbml6YXRpb24gY29udGVtcGxhdGluZworICogICBleHBvcnQgdG8gb2J0YWluIHN1Y2ggYSBsaWNlbnNlIGJlZm9yZSBleHBvcnRpbmcuCisgKiAKKyAqIFdJVEhJTiBUSEFUIENPTlNUUkFJTlQsIHBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZAorICogZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kCisgKiB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgYm90aCB0aGF0IGNvcHlyaWdodCBub3RpY2UgYW5kCisgKiB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24sIGFuZCB0aGF0CisgKiB0aGUgbmFtZSBvZiBNLkkuVC4gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IgcHVibGljaXR5IHBlcnRhaW5pbmcKKyAqIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgorICogcGVybWlzc2lvbi4gIEZ1cnRoZXJtb3JlIGlmIHlvdSBtb2RpZnkgdGhpcyBzb2Z0d2FyZSB5b3UgbXVzdCBsYWJlbAorICogeW91ciBzb2Z0d2FyZSBhcyBtb2RpZmllZCBzb2Z0d2FyZSBhbmQgbm90IGRpc3RyaWJ1dGUgaXQgaW4gc3VjaCBhCisgKiBmYXNoaW9uIHRoYXQgaXQgbWlnaHQgYmUgY29uZnVzZWQgd2l0aCB0aGUgb3JpZ2luYWwgTS5JLlQuIHNvZnR3YXJlLgorICogTS5JLlQuIG1ha2VzIG5vIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YKKyAqIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3MKKyAqIG9yIGltcGxpZWQgd2FycmFudHkuCisgKi8KKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvb3BlbmtuaWdodHMgYi9saWNlbnNlcy9vcGVua25pZ2h0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTIzMzM5Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvb3BlbmtuaWdodHMKQEAgLTAsMCArMSwzNSBAQAorUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAordGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciwgYW5kIGFja25vd2xlZGdlbWVudHMuCisKKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKK3RoaXMgbGlzdCBvZiBjb25kaXRpb25zLCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIsIGFuZCBhY2tub3dsZWRnZW1lbnRzIGluCit0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgT3BlbiBLbmlnaHRzLCB0aGlzIHByb2plY3Qgbm9yIHRoZSBuYW1lcworb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCit0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitESVNDTEFJTUVSOgorVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiCitBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKK0RJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECitPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCitUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitBY2tub3dsZWRnZW1lbnQgb2YgQmlvd2FyZSdzIENvbnRyaWJ1dGlvbiBhbmQgSW50ZWxsZWN0dWFsIFByb3BlcnR5OgorVGhpcyBwcm9ncmFtIGFuZCBtYXRlcmlhbCBpcyBpbnRlbmRlZCB0byBleGFtaW5lLCBwcm9kdWNlIG9yIG1vZGlmeSBkYXRhCitzdHJ1Y3R1cmVzIHdoaWNoIG1heSBiZSB1c2VkIGJ5IEJpb3dhcmUncyBOZXZlcndpbnRlciBOaWdodHMgcHJvZ3JhbXMuCitJbnB1dHMgdG8gdGhpcyBwcm9ncmFtIG1heSBpbmNsdWRlIGRhdGEgcHJvZHVjZWQgYnkgQmlvd2FyZSBvciBpdHMgcGFydG5lcnMKK2FzIHBhcnQgb2YgdGhlIE5ldmVyd2ludGVyIE5pZ2h0cyBwcm9kdWN0IG9yIGl0cyBleHBhbnNpb25zIGFuZCBzZXF1YWxzLgorV2hlbiB0aGUgb3V0cHV0IGRhdGEgc3RydWN0dXJlcyBmcm9tIHRoaXMgcHJvZ3JhbSBhcmUgc28gdXNlZCBhbmQvb3IgYXJlIG1hZGUKK3dpdGggc3VjaCBpbnB1dHMsIHRoZW4gdGhlIHRlcm1zIG9mIHRoZSBCaW93YXJlIE5ldmVyd2ludGVyIE5pZ2h0cyBFbmQgVXNlcgorTGljZW5zZSBBZ3JlZW1lbnRzIGdvdmVybmluZyB0aGUgcHJvZHVjdGlvbiBhbmQgdXNlIG9mIHN1Y2ggZGF0YSBzdHJ1Y3R1cmVzCitzdGlsbCBhcHBseS4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL29wZW5tYXJrZXQgYi9saWNlbnNlcy9vcGVubWFya2V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwZDUxNjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9vcGVubWFya2V0CkBAIC0wLDAgKzEsMjQgQEAKK09QRU4gTUFSS0VULCBJTkMuIExpY2Vuc2UKKworT3BlbiBNYXJrZXQgcGVybWl0cyB5b3UgdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUsIGFuZCBsaWNlbnNlCit0aGlzIFNvZnR3YXJlIGFuZCB0aGUgRG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UsIHByb3ZpZGVkIHRoYXQKK2V4aXN0aW5nIGNvcHlyaWdodCBub3RpY2VzIGFyZSByZXRhaW5lZCBpbiBhbGwgY29waWVzIGFuZCB0aGF0IHRoaXMKK25vdGljZSBpcyBpbmNsdWRlZCB2ZXJiYXRpbSBpbiBhbnkgZGlzdHJpYnV0aW9ucy4gIE5vIHdyaXR0ZW4KK2FncmVlbWVudCwgbGljZW5zZSwgb3Igcm95YWx0eSBmZWUgaXMgcmVxdWlyZWQgZm9yIGFueSBvZiB0aGUKK2F1dGhvcml6ZWQgdXNlcy4gIE1vZGlmaWNhdGlvbnMgdG8gdGhpcyBTb2Z0d2FyZSBhbmQgRG9jdW1lbnRhdGlvbiBtYXkKK2JlIGNvcHlyaWdodGVkIGJ5IHRoZWlyIGF1dGhvcnMgYW5kIG5lZWQgbm90IGZvbGxvdyB0aGUgbGljZW5zaW5nCit0ZXJtcyBkZXNjcmliZWQgaGVyZS4gIElmIG1vZGlmaWNhdGlvbnMgdG8gdGhpcyBTb2Z0d2FyZSBhbmQKK0RvY3VtZW50YXRpb24gaGF2ZSBuZXcgbGljZW5zaW5nIHRlcm1zLCB0aGUgbmV3IHRlcm1zIG11c3QgYmUgY2xlYXJseQoraW5kaWNhdGVkIG9uIHRoZSBmaXJzdCBwYWdlIG9mIGVhY2ggZmlsZSB3aGVyZSB0aGV5IGFwcGx5LgorCitPUEVOIE1BUktFVCBNQUtFUyBOTyBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVFkgV0lUSCBSRVNQRUNUIFRPIFRIRQorU09GVFdBUkUgT1IgVEhFIERPQ1VNRU5UQVRJT04sIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZCitXQVJSQU5UWSBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBJTgorTk8gRVZFTlQgU0hBTEwgT1BFTiBNQVJLRVQgQkUgTElBQkxFIFRPIFlPVSBPUiBBTlkgVEhJUkQgUEFSVFkgRk9SIEFOWQorREFNQUdFUyBBUklTSU5HIEZST00gT1IgUkVMQVRJTkcgVE8gVEhJUyBTT0ZUV0FSRSBPUiBUSEUKK0RPQ1VNRU5UQVRJT04sIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBTSU1JTEFSIERBTUFHRVMsIElOQ0xVRElORyBMT1NUIFBST0ZJVFMgT1IKK0xPU1QgREFUQSwgRVZFTiBJRiBPUEVOIE1BUktFVCBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0VTLiAgVEhFIFNPRlRXQVJFIEFORCBET0NVTUVOVEFUSU9OIEFSRSBQUk9WSURFRCAiQVMgSVMiLgorT1BFTiBNQVJLRVQgSEFTIE5PIExJQUJJTElUWSBJTiBDT05UUkFDVCwgVE9SVCwgTkVHTElHRU5DRSBPUgorT1RIRVJXSVNFIEFSSVNJTkcgT1VUIE9GIFRISVMgU09GVFdBUkUgT1IgVEhFIERPQ1VNRU5UQVRJT04uCmRpZmYgLS1naXQgYS9saWNlbnNlcy9vcGVucGJzIGIvbGljZW5zZXMvb3BlbnBicwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzk4NjRhCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvb3BlbnBicwpAQCAtMCwwICsxLDc2IEBACisKKyAgICAgICAgT3BlblBCUyAoUG9ydGFibGUgQmF0Y2ggU3lzdGVtKSB2Mi4zIFNvZnR3YXJlIExpY2Vuc2UKKworQ29weXJpZ2h0IChjKSAxOTk5LTIwMDIgVmVyaWRpYW4gSW5mb3JtYXRpb24gU29sdXRpb25zLCBJbmMuCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0ZvciBhIGxpY2Vuc2UgdG8gdXNlIG9yIHJlZGlzdHJpYnV0ZSB0aGUgT3BlblBCUyBzb2Z0d2FyZSB1bmRlciBjb25kaXRpb25zCitvdGhlciB0aGFuIHRob3NlIGRlc2NyaWJlZCBiZWxvdywgb3IgdG8gcHVyY2hhc2Ugc3VwcG9ydCBmb3IgdGhpcyBzb2Z0d2FyZSwKK3BsZWFzZSBjb250YWN0IFZlcmlkaWFuIFN5c3RlbXMsIFBCUyBQcm9kdWN0cyBEZXBhcnRtZW50ICgiTGljZW5zb3IiKSBhdDoKKworICAgd3d3Lk9wZW5QQlMub3JnICArMSA2NTAgOTY3LTQ2NzUgICAgICAgICAgICAgICAgICBzYWxlc0BPcGVuUEJTLm9yZworICAgICAgICAgICAgICAgICAgICAgICA4NzcgOTAyLTRQQlMgKFVTIHRvbGwtZnJlZSkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGxpY2Vuc2UgY292ZXJzIHVzZSBvZiB0aGUgT3BlblBCUyB2Mi4zIHNvZnR3YXJlICh0aGUgIlNvZnR3YXJlIikgYXQKK3lvdXIgc2l0ZSBvciBsb2NhdGlvbiwgYW5kLCBmb3IgY2VydGFpbiB1c2VycywgcmVkaXN0cmlidXRpb24gb2YgdGhlCitTb2Z0d2FyZSB0byBvdGhlciBzaXRlcyBhbmQgbG9jYXRpb25zLiAgVXNlIGFuZCByZWRpc3RyaWJ1dGlvbiBvZgorT3BlblBCUyB2Mi4zIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLAorYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IGFsbCBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldC4KK0FmdGVyIERlY2VtYmVyIDMxLCAyMDAzLCBvbmx5IGNvbmRpdGlvbnMgMy02IG11c3QgYmUgbWV0OgorCisxLiBDb21tZXJjaWFsIGFuZC9vciBub24tY29tbWVyY2lhbCB1c2Ugb2YgdGhlIFNvZnR3YXJlIGlzIHBlcm1pdHRlZAorICAgcHJvdmlkZWQgYSBjdXJyZW50IHNvZnR3YXJlIHJlZ2lzdHJhdGlvbiBpcyBvbiBmaWxlIGF0IHd3dy5PcGVuUEJTLm9yZy4KKyAgIElmIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGNvbnRyaWJ1dGVzIHRvIGEgcHVibGljYXRpb24sIHByb2R1Y3QsIG9yCisgICBzZXJ2aWNlLCBwcm9wZXIgYXR0cmlidXRpb24gbXVzdCBiZSBnaXZlbjsgc2VlIHd3dy5PcGVuUEJTLm9yZy9jcmVkaXQuaHRtbAorCisyLiBSZWRpc3RyaWJ1dGlvbiBpbiBhbnkgZm9ybSBpcyBvbmx5IHBlcm1pdHRlZCBmb3Igbm9uLWNvbW1lcmNpYWwsCisgICBub24tcHJvZml0IHB1cnBvc2VzLiAgVGhlcmUgY2FuIGJlIG5vIGNoYXJnZSBmb3IgdGhlIFNvZnR3YXJlIG9yIGFueQorICAgc29mdHdhcmUgaW5jb3Jwb3JhdGluZyB0aGUgU29mdHdhcmUuICBGdXJ0aGVyLCB0aGVyZSBjYW4gYmUgbm8KKyAgIGV4cGVjdGF0aW9uIG9mIHJldmVudWUgZ2VuZXJhdGVkIGFzIGEgY29uc2VxdWVuY2Ugb2YgcmVkaXN0cmlidXRpbmcKKyAgIHRoZSBTb2Z0d2FyZS4KKworMy4gQW55IFJlZGlzdHJpYnV0aW9uIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlCisgICBhbmQgdGhlIGFja25vd2xlZGdtZW50IGNvbnRhaW5lZCBpbiBwYXJhZ3JhcGggNiwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMKKyAgIGFuZCB0aGUgZGlzY2xhaW1lciBjb250YWluZWQgaW4gcGFyYWdyYXBoIDcuCisKKzQuIEFueSBSZWRpc3RyaWJ1dGlvbiBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UgYW5kIHRoZSBhY2tub3dsZWRnbWVudCBjb250YWluZWQgaW4gcGFyYWdyYXBoIDYsIHRoaXMgbGlzdCBvZgorICAgY29uZGl0aW9ucyBhbmQgdGhlIGRpc2NsYWltZXIgY29udGFpbmVkIGluIHBhcmFncmFwaCA3IGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworNS4gUmVkaXN0cmlidXRpb25zIGluIGFueSBmb3JtIG11c3QgYmUgYWNjb21wYW5pZWQgYnkgaW5mb3JtYXRpb24gb24gaG93IHRvCisgICBvYnRhaW4gY29tcGxldGUgc291cmNlIGNvZGUgZm9yIHRoZSBPcGVuUEJTIHNvZnR3YXJlIGFuZCBhbnkKKyAgIG1vZGlmaWNhdGlvbnMgYW5kL29yIGFkZGl0aW9ucyB0byB0aGUgT3BlblBCUyBzb2Z0d2FyZS4gIFRoZSBzb3VyY2UgY29kZQorICAgbXVzdCBlaXRoZXIgYmUgaW5jbHVkZWQgaW4gdGhlIGRpc3RyaWJ1dGlvbiBvciBiZSBhdmFpbGFibGUgZm9yIG5vIG1vcmUKKyAgIHRoYW4gdGhlIGNvc3Qgb2YgZGlzdHJpYnV0aW9uIHBsdXMgYSBub21pbmFsIGZlZSwgYW5kIGFsbCBtb2RpZmljYXRpb25zCisgICBhbmQgYWRkaXRpb25zIHRvIHRoZSBTb2Z0d2FyZSBtdXN0IGJlIGZyZWVseSByZWRpc3RyaWJ1dGFibGUgYnkgYW55IHBhcnR5CisgICAoaW5jbHVkaW5nIExpY2Vuc29yKSB3aXRob3V0IHJlc3RyaWN0aW9uLgorCis2LiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoZSBTb2Z0d2FyZSBtdXN0CisgICBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisKKyAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSBOQVNBIEFtZXMgUmVzZWFyY2ggQ2VudGVyLAorICAgIExhd3JlbmNlIExpdmVybW9yZSBOYXRpb25hbCBMYWJvcmF0b3J5LCBhbmQgVmVyaWRpYW4gSW5mb3JtYXRpb24gU29sdXRpb25zLAorICAgIEluYy4gIFZpc2l0IHd3dy5PcGVuUEJTLm9yZyBmb3IgT3BlblBCUyBzb2Z0d2FyZSBzdXBwb3J0LAorICAgIHByb2R1Y3RzLCBhbmQgaW5mb3JtYXRpb24uIgorCis3LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELiBBTlkgRVhQUkVTUworT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5EIE5PTi1JTkZSSU5HRU1FTlQKK0FSRSBFWFBSRVNTTFkgRElTQ0xBSU1FRC4KKworSU4gTk8gRVZFTlQgU0hBTEwgVkVSSURJQU4gQ09SUE9SQVRJT04sIElUUyBBRkZJTElBVEVEIENPTVBBTklFUywgT1IgVEhFCitVLlMuIEdPVkVSTk1FTlQgT1IgQU5ZIE9GIElUUyBBR0VOQ0lFUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QgT1IgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwKK09SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKK0xJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HCitORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsCitFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCitUaGlzIGxpY2Vuc2Ugd2lsbCBiZSBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUgQ29tbW9ud2VhbHRoIG9mIFZpcmdpbmlhLAord2l0aG91dCByZWZlcmVuY2UgdG8gaXRzIGNob2ljZSBvZiBsYXcgcnVsZXMuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9vcGVuc3BtbCBiL2xpY2Vuc2VzL29wZW5zcG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQxMGY4NWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9vcGVuc3BtbApAQCAtMCwwICsxLDUzIEBACitWZXJzaW9uIDAuMSwgQXByaWwgMjAwMworCitDb3B5cmlnaHQgwqkgMjAwMyBXYXZlc2V0IFRlY2hub2xvZ2llcywgSW5jLiAgNjAzNCBXZXN0IENvdXJ0eWFyZCBEcml2ZSwgU3VpdGUKKzIxMCwgQXVzdGluLCBUZXhhcyA3ODczMCBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwKK2FyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZGlzY2xhaW1lcnMgaW4gU2VjdGlvbnMgNiBhbmQgNyBiZWxvdy4KKworICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBkaXNjbGFpbWVycyBpbiBTZWN0aW9ucyA2IGFuZCA3IGJlbG93IGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgMy4gVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sIGlmIGFueSwgbXVzdAorICAgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorCisJICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgV2F2ZXNldCBUZWNobm9sb2dpZXMsCisJICBJbmMuICh3d3cud2F2ZXNldC5jb20pLiIKKworCSAgQWx0ZXJuYXRlbHksIHRoaXMgYWNrbm93bGVkZ21lbnQgbWF5IGFwcGVhciBpbiB0aGUgc29mdHdhcmUgaXRzZWxmLCBpZiBhbmQKKwkgIHdoZXJldmVyIHN1Y2ggdGhpcmQtcGFydHkgYWNrbm93bGVkZ21lbnRzIG5vcm1hbGx5IGFwcGVhci4KKworICAgNC4gVGhlIG5hbWVzICJXYXZlc2V0IiBhbmQgIldhdmVzZXQgVGVjaG5vbG9naWVzLCBJbmMuIiBtdXN0IG5vdCBiZSB1c2VkIHRvCisgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCB0aGUgcHJpb3IKKyAgIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiBXYXZlc2V0LiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorICAgd3d3LndhdmVzZXQuY29tLgorCisgICA1LiBQcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSBtYXkgbm90IGJlIGNhbGxlZCAiV2F2ZXNldCIsIG5vciBtYXkKKyAgICJXYXZlc2V0IiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mCisgICBXYXZlc2V0LgorCisgICA2LiBOTyBXQVJSQU5UWQorCisJICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1NFRCBPUiBJTVBMSUVECisJICBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorCSAgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKworICAgNy4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkKKworCSAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFdBVkVTRVQgT1IgSVRTIExJQ0VOU09SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisJICBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKwkgIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorCSAgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKwkgIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorCSAgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorCSAgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorCSAgU1VDSCBEQU1BR0UuCisKK0VuZCBvZiBUZXJtcyBhbmQgQ29uZGl0aW9ucwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvb3BlbnNzbCBiL2xpY2Vuc2VzL29wZW5zc2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDAyNzc4OAotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL29wZW5zc2wKQEAgLTAsMCArMSwxMjcgQEAKKworICBMSUNFTlNFIElTU1VFUworICA9PT09PT09PT09PT09PQorCisgIFRoZSBPcGVuU1NMIHRvb2xraXQgc3RheXMgdW5kZXIgYSBkdWFsIGxpY2Vuc2UsIGkuZS4gYm90aCB0aGUgY29uZGl0aW9ucyBvZgorICB0aGUgT3BlblNTTCBMaWNlbnNlIGFuZCB0aGUgb3JpZ2luYWwgU1NMZWF5IGxpY2Vuc2UgYXBwbHkgdG8gdGhlIHRvb2xraXQuCisgIFNlZSBiZWxvdyBmb3IgdGhlIGFjdHVhbCBsaWNlbnNlIHRleHRzLiBBY3R1YWxseSBib3RoIGxpY2Vuc2VzIGFyZSBCU0Qtc3R5bGUKKyAgT3BlbiBTb3VyY2UgbGljZW5zZXMuIEluIGNhc2Ugb2YgYW55IGxpY2Vuc2UgaXNzdWVzIHJlbGF0ZWQgdG8gT3BlblNTTAorICBwbGVhc2UgY29udGFjdCBvcGVuc3NsLWNvcmVAb3BlbnNzbC5vcmcuCisKKyAgT3BlblNTTCBMaWNlbnNlCisgIC0tLS0tLS0tLS0tLS0tLQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorICogQ29weXJpZ2h0IChjKSAxOTk4LTIwMDQgVGhlIE9wZW5TU0wgUHJvamVjdC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworICogICAgc29mdHdhcmUgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ21lbnQ6CisgKiAgICAiVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgT3BlblNTTCBQcm9qZWN0CisgKiAgICBmb3IgdXNlIGluIHRoZSBPcGVuU1NMIFRvb2xraXQuIChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisgKgorICogNC4gVGhlIG5hbWVzICJPcGVuU1NMIFRvb2xraXQiIGFuZCAiT3BlblNTTCBQcm9qZWN0IiBtdXN0IG5vdCBiZSB1c2VkIHRvCisgKiAgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiBGb3Igd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdAorICogICAgb3BlbnNzbC1jb3JlQG9wZW5zc2wub3JnLgorICoKKyAqIDUuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJPcGVuU1NMIgorICogICAgbm9yIG1heSAiT3BlblNTTCIgYXBwZWFyIGluIHRoZWlyIG5hbWVzIHdpdGhvdXQgcHJpb3Igd3JpdHRlbgorICogICAgcGVybWlzc2lvbiBvZiB0aGUgT3BlblNTTCBQcm9qZWN0LgorICoKKyAqIDYuIFJlZGlzdHJpYnV0aW9ucyBvZiBhbnkgZm9ybSB3aGF0c29ldmVyIG11c3QgcmV0YWluIHRoZSBmb2xsb3dpbmcKKyAqICAgIGFja25vd2xlZGdtZW50OgorICogICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE9wZW5TU0wgUHJvamVjdAorICogICAgZm9yIHVzZSBpbiB0aGUgT3BlblNTTCBUb29sa2l0IChodHRwOi8vd3d3Lm9wZW5zc2wub3JnLykiCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgT3BlblNTTCBQUk9KRUNUIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgT3BlblNTTCBQUk9KRUNUIE9SCisgKiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQKKyAqIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKgorICogVGhpcyBwcm9kdWN0IGluY2x1ZGVzIGNyeXB0b2dyYXBoaWMgc29mdHdhcmUgd3JpdHRlbiBieSBFcmljIFlvdW5nCisgKiAoZWF5QGNyeXB0c29mdC5jb20pLiAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIHdyaXR0ZW4gYnkgVGltCisgKiBIdWRzb24gKHRqaEBjcnlwdHNvZnQuY29tKS4KKyAqCisgKi8KKworIE9yaWdpbmFsIFNTTGVheSBMaWNlbnNlCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworLyogQ29weXJpZ2h0IChDKSAxOTk1LTE5OTggRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgcGFja2FnZSBpcyBhbiBTU0wgaW1wbGVtZW50YXRpb24gd3JpdHRlbgorICogYnkgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pLgorICogVGhlIGltcGxlbWVudGF0aW9uIHdhcyB3cml0dGVuIHNvIGFzIHRvIGNvbmZvcm0gd2l0aCBOZXRzY2FwZXMgU1NMLgorICogCisgKiBUaGlzIGxpYnJhcnkgaXMgZnJlZSBmb3IgY29tbWVyY2lhbCBhbmQgbm9uLWNvbW1lcmNpYWwgdXNlIGFzIGxvbmcgYXMKKyAqIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgYWhlYXJlZCB0by4gIFRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXBwbHkgdG8gYWxsIGNvZGUgZm91bmQgaW4gdGhpcyBkaXN0cmlidXRpb24sIGJlIGl0IHRoZSBSQzQsIFJTQSwKKyAqIGxoYXNoLCBERVMsIGV0Yy4sIGNvZGU7IG5vdCBqdXN0IHRoZSBTU0wgY29kZS4gIFRoZSBTU0wgZG9jdW1lbnRhdGlvbgorICogaW5jbHVkZWQgd2l0aCB0aGlzIGRpc3RyaWJ1dGlvbiBpcyBjb3ZlcmVkIGJ5IHRoZSBzYW1lIGNvcHlyaWdodCB0ZXJtcworICogZXhjZXB0IHRoYXQgdGhlIGhvbGRlciBpcyBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkuCisgKiAKKyAqIENvcHlyaWdodCByZW1haW5zIEVyaWMgWW91bmcncywgYW5kIGFzIHN1Y2ggYW55IENvcHlyaWdodCBub3RpY2VzIGluCisgKiB0aGUgY29kZSBhcmUgbm90IHRvIGJlIHJlbW92ZWQuCisgKiBJZiB0aGlzIHBhY2thZ2UgaXMgdXNlZCBpbiBhIHByb2R1Y3QsIEVyaWMgWW91bmcgc2hvdWxkIGJlIGdpdmVuIGF0dHJpYnV0aW9uCisgKiBhcyB0aGUgYXV0aG9yIG9mIHRoZSBwYXJ0cyBvZiB0aGUgbGlicmFyeSB1c2VkLgorICogVGhpcyBjYW4gYmUgaW4gdGhlIGZvcm0gb2YgYSB0ZXh0dWFsIG1lc3NhZ2UgYXQgcHJvZ3JhbSBzdGFydHVwIG9yCisgKiBpbiBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3IgdGV4dHVhbCkgcHJvdmlkZWQgd2l0aCB0aGUgcGFja2FnZS4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgY3J5cHRvZ3JhcGhpYyBzb2Z0d2FyZSB3cml0dGVuIGJ5CisgKiAgICAgRXJpYyBZb3VuZyAoZWF5QGNyeXB0c29mdC5jb20pIgorICogICAgVGhlIHdvcmQgJ2NyeXB0b2dyYXBoaWMnIGNhbiBiZSBsZWZ0IG91dCBpZiB0aGUgcm91aW5lcyBmcm9tIHRoZSBsaWJyYXJ5CisgKiAgICBiZWluZyB1c2VkIGFyZSBub3QgY3J5cHRvZ3JhcGhpYyByZWxhdGVkIDotKS4KKyAqIDQuIElmIHlvdSBpbmNsdWRlIGFueSBXaW5kb3dzIHNwZWNpZmljIGNvZGUgKG9yIGEgZGVyaXZhdGl2ZSB0aGVyZW9mKSBmcm9tIAorICogICAgdGhlIGFwcHMgZGlyZWN0b3J5IChhcHBsaWNhdGlvbiBjb2RlKSB5b3UgbXVzdCBpbmNsdWRlIGFuIGFja25vd2xlZGdlbWVudDoKKyAqICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgd3JpdHRlbiBieSBUaW0gSHVkc29uICh0amhAY3J5cHRzb2Z0LmNvbSkiCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgRVJJQyBZT1VORyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqIAorICogVGhlIGxpY2VuY2UgYW5kIGRpc3RyaWJ1dGlvbiB0ZXJtcyBmb3IgYW55IHB1YmxpY2FsbHkgYXZhaWxhYmxlIHZlcnNpb24gb3IKKyAqIGRlcml2YXRpdmUgb2YgdGhpcyBjb2RlIGNhbm5vdCBiZSBjaGFuZ2VkLiAgaS5lLiB0aGlzIGNvZGUgY2Fubm90IHNpbXBseSBiZQorICogY29waWVkIGFuZCBwdXQgdW5kZXIgYW5vdGhlciBkaXN0cmlidXRpb24gbGljZW5jZQorICogW2luY2x1ZGluZyB0aGUgR05VIFB1YmxpYyBMaWNlbmNlLl0KKyAqLworCmRpZmYgLS1naXQgYS9saWNlbnNlcy9vcmFjbGUtamF2YS1kb2N1bWVudGF0aW9uIGIvbGljZW5zZXMvb3JhY2xlLWphdmEtZG9jdW1lbnRhdGlvbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjRiNzRhCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvb3JhY2xlLWphdmEtZG9jdW1lbnRhdGlvbgpAQCAtMCwwICsxLDU5IEBACitPUkFDTEUgIENPUlBPUkFUSU9OICAoIk9SQUNMRSIpIElTIFdJTExJTkcgVE8gTElDRU5TRSBUSElTIFNQRUNJRklDQVRJT04gVE8gWU9VIE9OTFkgVVBPTiBUSEUgQ09ORElUSU9OIFRIQVQgWU9VIEFDQ0VQVCBBTEwgT0YgVEhFIFRFUk1TIENPTlRBSU5FRCBJTiBUSElTIEFHUkVFTUVOVC4gUExFQVNFIFJFQUQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIENBUkVGVUxMWS4gQlkgRE9XTkxPQURJTkcgVEhJUyBTUEVDSUZJQ0FUSU9OLCBZT1UgQUNDRVBUIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSEUgQUdSRUVNRU5ULiBJRiBZT1UgQVJFIE5PVCBXSUxMSU5HIFRPIEJFIEJPVU5EIEJZIElULCBTRUxFQ1QgVEhFICJERUNMSU5FIiBCVVRUT04gQVQgVEhFIEJPVFRPTSBPRiBUSElTIFBBR0UuCisKK1NwZWNpZmljYXRpb246IEpBVkEgUExBVEZPUk0sIFNUQU5EQVJEIEVESVRJT04gKCJTcGVjaWZpY2F0aW9uIikKK1ZlcnNpb246IDYKK1N0YXR1czogRmluYWwgUmVsZWFzZQorUmVsZWFzZTogRGVjZW1iZXIgNywgMjAwNgorCitDb3B5cmlnaHQgMjAxMCBPcmFjbGUgQ29ycG9yYXRpb24sIDUwMCBPcmFjbGUgUGFya3dheSwKK1JlZHdvb2QgU2hvcmVzLCBDYWxpZm9ybmlhIDk0MDY1LCBVU0EuCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitMSU1JVEVEIExJQ0VOU0UgR1JBTlRTCisKKzEuIExpY2Vuc2UgZm9yIEV2YWx1YXRpb24gUHVycG9zZXMuCitPcmFjbGUgaGVyZWJ5IGdyYW50cyB5b3UgYSBmdWxseS1wYWlkLCBub24tZXhjbHVzaXZlLCBub24tdHJhbnNmZXJhYmxlLCB3b3JsZHdpZGUsIGxpbWl0ZWQgbGljZW5zZSAod2l0aG91dCB0aGUgcmlnaHQgdG8gc3VibGljZW5zZSksIHVuZGVyIE9yYWNsZSdzIGFwcGxpY2FibGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyB0byB2aWV3LCBkb3dubG9hZCwgdXNlIGFuZCByZXByb2R1Y2UgdGhlIFNwZWNpZmljYXRpb24gb25seSBmb3IgdGhlIHB1cnBvc2Ugb2YgaW50ZXJuYWwgZXZhbHVhdGlvbi4gVGhpcyBpbmNsdWRlcyAoaSkgZGV2ZWxvcGluZyBhcHBsaWNhdGlvbnMgaW50ZW5kZWQgdG8gcnVuIG9uIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBTcGVjaWZpY2F0aW9uLCBwcm92aWRlZCB0aGF0IHN1Y2ggYXBwbGljYXRpb25zIGRvIG5vdCB0aGVtc2VsdmVzIGltcGxlbWVudCBhbnkgcG9ydGlvbihzKSBvZiB0aGUgU3BlY2lmaWNhdGlvbiwgYW5kIChpaSkgZGlzY3Vzc2luZyB0aGUgU3BlY2lmaWNhdGlvbiB3aXRoIGFueSB0aGlyZCBwYXJ0eTsgYW5kIChpaWkpIGV4Y2VycHRpbmcgYnJpZWYgcG9ydGlvbnMgb2YgdGhlIFNwZWNpZmljYXRpb24gaW4gb3JhbCBvciB3cml0dGVuIGNvbW11bmljYXRpb25zIHdoaWNoIGRpc2N1c3MgdGhlIFNwZWNpZmljYXRpb24gcHJvdmlkZWQgdGhhdCBzdWNoIGV4Y2VycHRzIGRvIG5vdCBpbiB0aGUgYWdncmVnYXRlIGNvbnN0aXR1dGUgYSBzaWduaWZpY2FudCBwb3J0aW9uIG9mIHRoZSBTcGVjaWZpY2F0aW9uLgorCisyLiBMaWNlbnNlIGZvciB0aGUgRGlzdHJpYnV0aW9uIG9mIENvbXBsaWFudCBJbXBsZW1lbnRhdGlvbnMuCitPcmFjbGUgYWxzbyBncmFudHMgeW91IGEgcGVycGV0dWFsLCBub24tZXhjbHVzaXZlLCBub24tdHJhbnNmZXJhYmxlLCB3b3JsZHdpZGUsIGZ1bGx5IHBhaWQtdXAsIHJveWFsdHkgZnJlZSwgbGltaXRlZCBsaWNlbnNlICh3aXRob3V0IHRoZSByaWdodCB0byBzdWJsaWNlbnNlKSB1bmRlciBhbnkgYXBwbGljYWJsZSBjb3B5cmlnaHRzIG9yLCBzdWJqZWN0IHRvIHRoZSBwcm92aXNpb25zIG9mIHN1YnNlY3Rpb24gNCBiZWxvdywgcGF0ZW50IHJpZ2h0cyBpdCBtYXkgaGF2ZSBjb3ZlcmluZyB0aGUgU3BlY2lmaWNhdGlvbiB0byBjcmVhdGUgYW5kL29yIGRpc3RyaWJ1dGUgYW4gSW5kZXBlbmRlbnQgSW1wbGVtZW50YXRpb24gb2YgdGhlIFNwZWNpZmljYXRpb24gdGhhdDogKGEpIGZ1bGx5IGltcGxlbWVudHMgdGhlIFNwZWNpZmljYXRpb24gaW5jbHVkaW5nIGFsbCBpdHMgcmVxdWlyZWQgaW50ZXJmYWNlcyBhbmQgZnVuY3Rpb25hbGl0eTsgKGIpIGRvZXMgbm90IG1vZGlmeSwgc3Vic2V0LCBzdXBlcnNldCBvciBvdGhlcndpc2UgZXh0ZW5kIHRoZSBMaWNlbnNvciBOYW1lIFNwYWNlLCBvciBpbmNsdWRlIGFueSBwdWJsaWMgb3IgcHJvdGVjdGVkIHBhY2thZ2VzLCBjbGFzc2VzLCBKYXZhIGludGVyZmFjZXMsIGZpZWxkcyBvciBtZXRob2RzIHdpdGhpbiB0aGUgTGljZW5zb3IgTmFtZSBTcGFjZSBvdGhlciB0aGFuIHRob3NlIHJlcXVpcmVkL2F1dGhvcml6ZWQgYnkgdGhlIFNwZWNpZmljYXRpb24gb3IgU3BlY2lmaWNhdGlvbnMgYmVpbmcgaW1wbGVtZW50ZWQ7IGFuZCAoYykgcGFzc2VzIHRoZSBUZWNobm9sb2d5IENvbXBhdGliaWxpdHkgS2l0IChpbmNsdWRpbmcgc2F0aXNmeWluZyB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoZSBhcHBsaWNhYmxlIFRDSyBVc2VycyBHdWlkZSkgZm9yIHN1Y2ggU3BlY2lmaWNhdGlvbiAoIkNvbXBsaWFudCBJbXBsZW1lbnRhdGlvbiIpLiBJbiBhZGRpdGlvbiwgdGhlIGZvcmVnb2luZyBsaWNlbnNlIGlzIGV4cHJlc3NseSBjb25kaXRpb25lZCBvbiB5b3VyIG5vdCBhY3Rpbmcgb3V0c2lkZSBpdHMgc2NvcGUuIE5vIGxpY2Vuc2UgaXMgZ3JhbnRlZCBoZXJldW5kZXIgZm9yIGFueSBvdGhlciBwdXJwb3NlIChpbmNsdWRpbmcsIGZvciBleGFtcGxlLCBtb2RpZnlpbmcgdGhlIFNwZWNpZmljYXRpb24sIG90aGVyIHRoYW4gdG8gdGhlIGV4dGVudCBvZiB5b3VyIGZhaXIgdXNlIHJpZ2h0cywgb3IgZGlzdHJpYnV0aW5nIHRoZSBTcGVjaWZpY2F0aW9uIHRvIHRoaXJkIHBhcnRpZXMpLiBBbHNvLCBubyByaWdodCwgdGl0bGUsIG9yIGludGVyZXN0IGluIG9yIHRvIGFueSB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvciB0cmFkZSBuYW1lcyBvZiBPcmFjbGUgb3IgT3JhY2xlJ3MgbGljZW5zb3JzIGlzIGdyYW50ZWQgaGVyZXVuZGVyLiBKYXZhLCBhbmQgSmF2YS1yZWxhdGVkIGxvZ29zLCBtYXJrcyBhbmQgbmFtZXMgYXJlIHRyYWRlbWFya3Mgb3IgcmVnaXN0ZXJlZCB0cmFkZW1hcmtzIG9mIE9yYWNsZSBDb3Jwb3JhdGlvbiBpbiB0aGUgVS5TLiBhbmQgb3RoZXIgY291bnRyaWVzLgorCiszLiBQYXNzLXRocm91Z2ggQ29uZGl0aW9ucy4KK1lvdSBuZWVkIG5vdCBpbmNsdWRlIGxpbWl0YXRpb25zIChhKS0oYykgZnJvbSB0aGUgcHJldmlvdXMgcGFyYWdyYXBoIG9yIGFueSBvdGhlciBwYXJ0aWN1bGFyICJwYXNzIHRocm91Z2giIHJlcXVpcmVtZW50cyBpbiBhbnkgbGljZW5zZSBZb3UgZ3JhbnQgY29uY2VybmluZyB0aGUgdXNlIG9mIHlvdXIgSW5kZXBlbmRlbnQgSW1wbGVtZW50YXRpb24gb3IgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIGl0LiBIb3dldmVyLCBleGNlcHQgd2l0aCByZXNwZWN0IHRvIEluZGVwZW5kZW50IEltcGxlbWVudGF0aW9ucyAoYW5kIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGVtKSB0aGF0IHNhdGlzZnkgbGltaXRhdGlvbnMgKGEpLShjKSBmcm9tIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGgsIFlvdSBtYXkgbmVpdGhlcjogKGEpIGdyYW50IG9yIG90aGVyd2lzZSBwYXNzIHRocm91Z2ggdG8geW91ciBsaWNlbnNlZXMgYW55IGxpY2Vuc2VzIHVuZGVyIE9yYWNsZSdzIGFwcGxpY2FibGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0czsgbm9yIChiKSBhdXRob3JpemUgeW91ciBsaWNlbnNlZXMgdG8gbWFrZSBhbnkgY2xhaW1zIGNvbmNlcm5pbmcgdGhlaXIgaW1wbGVtZW50YXRpb24ncyBjb21wbGlhbmNlIHdpdGggdGhlIFNwZWNpZmljYXRpb24gaW4gcXVlc3Rpb24uCisKKzQuIFJlY2lwcm9jaXR5IENvbmNlcm5pbmcgUGF0ZW50IExpY2Vuc2VzLgorYS4gV2l0aCByZXNwZWN0IHRvIGFueSBwYXRlbnQgY2xhaW1zIGNvdmVyZWQgYnkgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB1bmRlciBzdWJwYXJhZ3JhcGggMiBhYm92ZSB0aGF0IHdvdWxkIGJlIGluZnJpbmdlZCBieSBhbGwgdGVjaG5pY2FsbHkgZmVhc2libGUgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBTcGVjaWZpY2F0aW9uLCBzdWNoIGxpY2Vuc2UgaXMgY29uZGl0aW9uZWQgdXBvbiB5b3VyIG9mZmVyaW5nIG9uIGZhaXIsIHJlYXNvbmFibGUgYW5kIG5vbi1kaXNjcmltaW5hdG9yeSB0ZXJtcywgdG8gYW55IHBhcnR5IHNlZWtpbmcgaXQgZnJvbSBZb3UsIGEgcGVycGV0dWFsLCBub24tZXhjbHVzaXZlLCBub24tdHJhbnNmZXJhYmxlLCB3b3JsZHdpZGUgbGljZW5zZSB1bmRlciBZb3VyIHBhdGVudCByaWdodHMgd2hpY2ggYXJlIG9yIHdvdWxkIGJlIGluZnJpbmdlZCBieSBhbGwgdGVjaG5pY2FsbHkgZmVhc2libGUgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBTcGVjaWZpY2F0aW9uIHRvIGRldmVsb3AsIGRpc3RyaWJ1dGUgYW5kIHVzZSBhIENvbXBsaWFudCBJbXBsZW1lbnRhdGlvbi4KKworYi4gV2l0aCByZXNwZWN0IHRvIGFueSBwYXRlbnQgY2xhaW1zIG93bmVkIGJ5IE9yYWNsZSBhbmQgY292ZXJlZCBieSB0aGUgbGljZW5zZSBncmFudGVkIHVuZGVyIHN1YnBhcmFncmFwaCAyLCB3aGV0aGVyIG9yIG5vdCB0aGVpciBpbmZyaW5nZW1lbnQgY2FuIGJlIGF2b2lkZWQgaW4gYSB0ZWNobmljYWxseSBmZWFzaWJsZSBtYW5uZXIgd2hlbiBpbXBsZW1lbnRpbmcgdGhlIFNwZWNpZmljYXRpb24sIHN1Y2ggbGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgd2l0aCByZXNwZWN0IHRvIHN1Y2ggY2xhaW1zIGlmIFlvdSBpbml0aWF0ZSBhIGNsYWltIGFnYWluc3QgT3JhY2xlIHRoYXQgaXQgaGFzLCBpbiB0aGUgY291cnNlIG9mIHBlcmZvcm1pbmcgaXRzIHJlc3BvbnNpYmlsaXRpZXMgYXMgdGhlIFNwZWNpZmljYXRpb24gTGVhZCwgaW5kdWNlZCBhbnkgb3RoZXIgZW50aXR5IHRvIGluZnJpbmdlIFlvdXIgcGF0ZW50IHJpZ2h0cy4KKworYy4gQWxzbyB3aXRoIHJlc3BlY3QgdG8gYW55IHBhdGVudCBjbGFpbXMgb3duZWQgYnkgT3JhY2xlIGFuZCBjb3ZlcmVkIGJ5IHRoZSBsaWNlbnNlIGdyYW50ZWQgdW5kZXIgc3VicGFyYWdyYXBoIDIgYWJvdmUsIHdoZXJlIHRoZSBpbmZyaW5nZW1lbnQgb2Ygc3VjaCBjbGFpbXMgY2FuIGJlIGF2b2lkZWQgaW4gYSB0ZWNobmljYWxseSBmZWFzaWJsZSBtYW5uZXIgd2hlbiBpbXBsZW1lbnRpbmcgdGhlIFNwZWNpZmljYXRpb24gc3VjaCBsaWNlbnNlLCB3aXRoIHJlc3BlY3QgdG8gc3VjaCBjbGFpbXMsIHNoYWxsIHRlcm1pbmF0ZSBpZiBZb3UgaW5pdGlhdGUgYSBjbGFpbSBhZ2FpbnN0IE9yYWNsZSB0aGF0IGl0cyBtYWtpbmcsIGhhdmluZyBtYWRlLCB1c2luZywgb2ZmZXJpbmcgdG8gc2VsbCwgc2VsbGluZyBvciBpbXBvcnRpbmcgYSBDb21wbGlhbnQgSW1wbGVtZW50YXRpb24gaW5mcmluZ2VzIFlvdXIgcGF0ZW50IHJpZ2h0cy4KKworNS4gRGVmaW5pdGlvbnMuCitGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgQWdyZWVtZW50OiAiSW5kZXBlbmRlbnQgSW1wbGVtZW50YXRpb24iIHNoYWxsIG1lYW4gYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFNwZWNpZmljYXRpb24gdGhhdCBuZWl0aGVyIGRlcml2ZXMgZnJvbSBhbnkgb2YgT3JhY2xlJ3Mgc291cmNlIGNvZGUgb3IgYmluYXJ5IGNvZGUgbWF0ZXJpYWxzIG5vciwgZXhjZXB0IHdpdGggYW4gYXBwcm9wcmlhdGUgYW5kIHNlcGFyYXRlIGxpY2Vuc2UgZnJvbSBPcmFjbGUsIGluY2x1ZGVzIGFueSBvZiBPcmFjbGUncyBzb3VyY2UgY29kZSBvciBiaW5hcnkgY29kZSBtYXRlcmlhbHM7ICJMaWNlbnNvciBOYW1lIFNwYWNlIiBzaGFsbCBtZWFuIHRoZSBwdWJsaWMgY2xhc3Mgb3IgaW50ZXJmYWNlIGRlY2xhcmF0aW9ucyB3aG9zZSBuYW1lcyBiZWdpbiB3aXRoICJqYXZhIiwgImphdmF4IiwgImNvbS5zdW4iIG9yIHRoZWlyIGVxdWl2YWxlbnRzIGluIGFueSBzdWJzZXF1ZW50IG5hbWluZyBjb252ZW50aW9uIGFkb3B0ZWQgYnkgT3JhY2xlIHRocm91Z2ggdGhlIEphdmEgQ29tbXVuaXR5IFByb2Nlc3MsIG9yIGFueSByZWNvZ25pemVkIHN1Y2Nlc3NvcnMgb3IgcmVwbGFjZW1lbnRzIHRoZXJlb2Y7IGFuZCAiVGVjaG5vbG9neSBDb21wYXRpYmlsaXR5IEtpdCIgb3IgIlRDSyIgc2hhbGwgbWVhbiB0aGUgdGVzdCBzdWl0ZSBhbmQgYWNjb21wYW55aW5nIFRDSyBVc2VyJ3MgR3VpZGUgcHJvdmlkZWQgYnkgT3JhY2xlIHdoaWNoIGNvcnJlc3BvbmRzIHRvIHRoZSBTcGVjaWZpY2F0aW9uIGFuZCB0aGF0IHdhcyBhdmFpbGFibGUgZWl0aGVyIChpKSBmcm9tIE9yYWNsZSdzIDEyMCBkYXlzIGJlZm9yZSB0aGUgZmlyc3QgcmVsZWFzZSBvZiBZb3VyIEluZGVwZW5kZW50IEltcGxlbWVudGF0aW9uIHRoYXQgYWxsb3dzIGl0cyB1c2UgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMsIG9yIChpaSkgbW9yZSByZWNlbnRseSB0aGFuIDEyMCBkYXlzIGZyb20gc3VjaCByZWxlYXNlIGJ1dCBhZ2FpbnN0IHdoaWNoIFlvdSBlbGVjdCB0byB0ZXN0IFlvdXIgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNwZWNpZmljYXRpb24uCisKK1RoaXMgQWdyZWVtZW50IHdpbGwgdGVybWluYXRlIGltbWVkaWF0ZWx5IHdpdGhvdXQgbm90aWNlIGZyb20gT3JhY2xlIGlmIHlvdSBicmVhY2ggdGhlIEFncmVlbWVudCBvciBhY3Qgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgYWJvdmUuCisKK0RJU0NMQUlNRVIgT0YgV0FSUkFOVElFUworCitUSEUgU1BFQ0lGSUNBVElPTiBJUyBQUk9WSURFRCAiQVMgSVMiLiBPUkFDTEUgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8sIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgTk9OLUlORlJJTkdFTUVOVCAoSU5DTFVESU5HIEFTIEEgQ09OU0VRVUVOQ0UgT0YgQU5ZIFBSQUNUSUNFIE9SIElNUExFTUVOVEFUSU9OIE9GIFRIRSBTUEVDSUZJQ0FUSU9OKSwgT1IgVEhBVCBUSEUgQ09OVEVOVFMgT0YgVEhFIFNQRUNJRklDQVRJT04gQVJFIFNVSVRBQkxFIEZPUiBBTlkgUFVSUE9TRS4gVGhpcyBkb2N1bWVudCBkb2VzIG5vdCByZXByZXNlbnQgYW55IGNvbW1pdG1lbnQgdG8gcmVsZWFzZSBvciBpbXBsZW1lbnQgYW55IHBvcnRpb24gb2YgdGhlIFNwZWNpZmljYXRpb24gaW4gYW55IHByb2R1Y3QuIEluIGFkZGl0aW9uLCB0aGUgU3BlY2lmaWNhdGlvbiBjb3VsZCBpbmNsdWRlIHRlY2huaWNhbCBpbmFjY3VyYWNpZXMgb3IgdHlwb2dyYXBoaWNhbCBlcnJvcnMuCisKK0xJTUlUQVRJT04gT0YgTElBQklMSVRZCisKK1RPIFRIRSBFWFRFTlQgTk9UIFBST0hJQklURUQgQlkgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIE9SQUNMRSBPUiBJVFMgTElDRU5TT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERBTUFHRVMsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIExPU1QgUkVWRU5VRSwgUFJPRklUUyBPUiBEQVRBLCBPUiBGT1IgU1BFQ0lBTCwgSU5ESVJFQ1QsIENPTlNFUVVFTlRJQUwsIElOQ0lERU5UQUwgT1IgUFVOSVRJVkUgREFNQUdFUywgSE9XRVZFUiBDQVVTRUQgQU5EIFJFR0FSRExFU1MgT0YgVEhFIFRIRU9SWSBPRiBMSUFCSUxJVFksIEFSSVNJTkcgT1VUIE9GIE9SIFJFTEFURUQgSU4gQU5ZIFdBWSBUTyBZT1VSIEhBVklORywgSU1QRUxFTUVOVElORyBPUiBPVEhFUldJU0UgVVNJTkcgVVNJTkcgVEhFIFNQRUNJRklDQVRJT04sIEVWRU4gSUYgT1JBQ0xFIEFORC9PUiBJVFMgTElDRU5TT1JTIEhBVkUgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFlvdSB3aWxsIGluZGVtbmlmeSwgaG9sZCBoYXJtbGVzcywgYW5kIGRlZmVuZCBPcmFjbGUgYW5kIGl0cyBsaWNlbnNvcnMgZnJvbSBhbnkgY2xhaW1zIGFyaXNpbmcgb3IgcmVzdWx0aW5nIGZyb206IChpKSB5b3VyIHVzZSBvZiB0aGUgU3BlY2lmaWNhdGlvbjsgKGlpKSB0aGUgdXNlIG9yIGRpc3RyaWJ1dGlvbiBvZiB5b3VyIEphdmEgYXBwbGljYXRpb24sIGFwcGxldCBhbmQvb3IgaW1wbGVtZW50YXRpb247IGFuZC9vciAoaWlpKSBhbnkgY2xhaW1zIHRoYXQgbGF0ZXIgdmVyc2lvbnMgb3IgcmVsZWFzZXMgb2YgYW55IFNwZWNpZmljYXRpb24gZnVybmlzaGVkIHRvIHlvdSBhcmUgaW5jb21wYXRpYmxlIHdpdGggdGhlIFNwZWNpZmljYXRpb24gcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoaXMgbGljZW5zZS4KKworUkVTVFJJQ1RFRCBSSUdIVFMgTEVHRU5ECisKK1UuUy4gR292ZXJubWVudDogSWYgdGhpcyBTcGVjaWZpY2F0aW9uIGlzIGJlaW5nIGFjcXVpcmVkIGJ5IG9yIG9uIGJlaGFsZiBvZiB0aGUgVS5TLiBHb3Zlcm5tZW50IG9yIGJ5IGEgVS5TLiBHb3Zlcm5tZW50IHByaW1lIGNvbnRyYWN0b3Igb3Igc3ViY29udHJhY3RvciAoYXQgYW55IHRpZXIpLCB0aGVuIHRoZSBHb3Zlcm5tZW50J3MgcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSBhbmQgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gc2hhbGwgYmUgb25seSBhcyBzZXQgZm9ydGggaW4gdGhpcyBsaWNlbnNlOyB0aGlzIGlzIGluIGFjY29yZGFuY2Ugd2l0aCA0OCBDLkYuUi4gMjI3LjcyMDEgdGhyb3VnaCAyMjcuNzIwMi00IChmb3IgRGVwYXJ0bWVudCBvZiBEZWZlbnNlIChEb0QpIGFjcXVpc2l0aW9ucykgYW5kIHdpdGggNDggQy5GLlIuIDIuMTAxIGFuZCAxMi4yMTIgKGZvciBub24tRG9EIGFjcXVpc2l0aW9ucykuCisKK1JFUE9SVAorCitJZiB5b3UgcHJvdmlkZSBPcmFjbGUgd2l0aCBhbnkgY29tbWVudHMgb3Igc3VnZ2VzdGlvbnMgY29uY2VybmluZyB0aGUgU3BlY2lmaWNhdGlvbiAoIkZlZWRiYWNrIiksIHlvdSBoZXJlYnk6IChpKSBhZ3JlZSB0aGF0IHN1Y2ggRmVlZGJhY2sgaXMgcHJvdmlkZWQgb24gYSBub24tcHJvcHJpZXRhcnkgYW5kIG5vbi1jb25maWRlbnRpYWwgYmFzaXMsIGFuZCAoaWkpIGdyYW50IE9yYWNsZSBhIHBlcnBldHVhbCwgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCBmdWxseSBwYWlkLXVwLCBpcnJldm9jYWJsZSBsaWNlbnNlLCB3aXRoIHRoZSByaWdodCB0byBzdWJsaWNlbnNlIHRocm91Z2ggbXVsdGlwbGUgbGV2ZWxzIG9mIHN1YmxpY2Vuc2VlcywgdG8gaW5jb3Jwb3JhdGUsIGRpc2Nsb3NlLCBhbmQgdXNlIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgRmVlZGJhY2sgZm9yIGFueSBwdXJwb3NlLgorCitHRU5FUkFMIFRFUk1TCisKK0FueSBhY3Rpb24gcmVsYXRlZCB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJlIGdvdmVybmVkIGJ5IENhbGlmb3JuaWEgbGF3IGFuZCBjb250cm9sbGluZyBVLlMuIGZlZGVyYWwgbGF3LiBUaGUgVS5OLiBDb252ZW50aW9uIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGFuZCB0aGUgY2hvaWNlIG9mIGxhdyBydWxlcyBvZiBhbnkganVyaXNkaWN0aW9uIHdpbGwgbm90IGFwcGx5LgorCitUaGUgU3BlY2lmaWNhdGlvbiBpcyBzdWJqZWN0IHRvIFUuUy4gZXhwb3J0IGNvbnRyb2wgbGF3cyBhbmQgbWF5IGJlIHN1YmplY3QgdG8gZXhwb3J0IG9yIGltcG9ydCByZWd1bGF0aW9ucyBpbiBvdGhlciBjb3VudHJpZXMuIExpY2Vuc2VlIGFncmVlcyB0byBjb21wbHkgc3RyaWN0bHkgd2l0aCBhbGwgc3VjaCBsYXdzIGFuZCByZWd1bGF0aW9ucyBhbmQgYWNrbm93bGVkZ2VzIHRoYXQgaXQgaGFzIHRoZSByZXNwb25zaWJpbGl0eSB0byBvYnRhaW4gc3VjaCBsaWNlbnNlcyB0byBleHBvcnQsIHJlLWV4cG9ydCBvciBpbXBvcnQgYXMgbWF5IGJlIHJlcXVpcmVkIGFmdGVyIGRlbGl2ZXJ5IHRvIExpY2Vuc2VlLgorCitUaGlzIEFncmVlbWVudCBpcyB0aGUgcGFydGllcycgZW50aXJlIGFncmVlbWVudCByZWxhdGluZyB0byBpdHMgc3ViamVjdCBtYXR0ZXIuIEl0IHN1cGVyc2VkZXMgYWxsIHByaW9yIG9yIGNvbnRlbXBvcmFuZW91cyBvcmFsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbnMsIHByb3Bvc2FscywgY29uZGl0aW9ucywgcmVwcmVzZW50YXRpb25zIGFuZCB3YXJyYW50aWVzIGFuZCBwcmV2YWlscyBvdmVyIGFueSBjb25mbGljdGluZyBvciBhZGRpdGlvbmFsIHRlcm1zIG9mIGFueSBxdW90ZSwgb3JkZXIsIGFja25vd2xlZGdtZW50LCBvciBvdGhlciBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIHBhcnRpZXMgcmVsYXRpbmcgdG8gaXRzIHN1YmplY3QgbWF0dGVyIGR1cmluZyB0aGUgdGVybSBvZiB0aGlzIEFncmVlbWVudC4gTm8gbW9kaWZpY2F0aW9uIHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYmUgYmluZGluZywgdW5sZXNzIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSBhbiBhdXRob3JpemVkIHJlcHJlc2VudGF0aXZlIG9mIGVhY2ggcGFydHkuCisKK1Jldi4gT2N0b2JlciwgMjAxMApkaWZmIC0tZ2l0IGEvbGljZW5zZXMvb3JhY2xlLWphdmEtZG9jdW1lbnRhdGlvbi03IGIvbGljZW5zZXMvb3JhY2xlLWphdmEtZG9jdW1lbnRhdGlvbi03Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4Mjk3MTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9vcmFjbGUtamF2YS1kb2N1bWVudGF0aW9uLTcKQEAgLTAsMCArMSw5NSBAQAorT1JBQ0xFIEFNRVJJQ0EsIElOQy4gKCJPUkFDTEUiKSBJUyBXSUxMSU5HIFRPIExJQ0VOU0UgVEhJUyBTUEVDSUZJQ0FUSU9OCitUTyBZT1UgT05MWSBVUE9OIFRIRSBDT05ESVRJT04gVEhBVCBZT1UgQUNDRVBUIEFMTCBPRiBUSEUgVEVSTVMgQ09OVEFJTkVEIElOIFRISVMgQUdSRUVNRU5ULiBQTEVBU0UgUkVBRCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQgQ0FSRUZVTExZLiBCWSBET1dOTE9BRElORyBUSElTIFNQRUNJRklDQVRJT04sIFlPVSBBQ0NFUFQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRIRSBBR1JFRU1FTlQuIElGIFlPVSBBUkUgTk9UIFdJTExJTkcgVE8gQkUgQk9VTkQgQlkgSVQsIFNFTEVDVCBUSEUgIkRFQ0xJTkUiIEJVVFRPTiBBVCBUSEUgQk9UVE9NIE9GIFRISVMgUEFHRS4KKworCitTcGVjaWZpY2F0aW9uOiBKU1ItMzM2IEphdmEodG0pIFNFIDcgUmVsZWFzZSBDb250ZW50cyAoIlNwZWNpZmljYXRpb24iKQorCisKK1ZlcnNpb246IDcKKworCitTdGF0dXM6IEZpbmFsIFJlbGVhc2UKKworCitSZWxlYXNlOiBKdWx5IDIwMTEKKworCitDb3B5cmlnaHQgMjAxMSBPcmFjbGUgQW1lcmljYSwgSW5jLiBhbmQvb3IgaXRzIGFmZmlsaWF0ZXMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCis1MDAgT3JhY2xlIFBhcmt3YXkgTS9TIDVvcDcsIENhbGlmb3JuaWEgOTQwNjUsIFUuUy5BCisKKworTElNSVRFRCBMSUNFTlNFIEdSQU5UUworCisKKzEuIExpY2Vuc2UgZm9yIEV2YWx1YXRpb24gUHVycG9zZXMuIE9yYWNsZSBoZXJlYnkgZ3JhbnRzIHlvdSBhIGZ1bGx5LXBhaWQsIG5vbi1leGNsdXNpdmUsIG5vbi10cmFuc2ZlcmFibGUsIHdvcmxkd2lkZSwgbGltaXRlZCBsaWNlbnNlICh3aXRob3V0IHRoZSByaWdodCB0byBzdWJsaWNlbnNlKSwgdW5kZXIgT3JhY2xlJ3MgYXBwbGljYWJsZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIHRvIHZpZXcsIGRvd25sb2FkLCB1c2UgYW5kIHJlcHJvZHVjZSB0aGUgU3BlY2lmaWNhdGlvbiBvbmx5IGZvciB0aGUgcHVycG9zZSBvZiBpbnRlcm5hbCBldmFsdWF0aW9uLiBUaGlzIGluY2x1ZGVzIChpKSBkZXZlbG9waW5nIGFwcGxpY2F0aW9ucyBpbnRlbmRlZCB0byBydW4gb24gYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFNwZWNpZmljYXRpb24sIHByb3ZpZGVkIHRoYXQgc3VjaCBhcHBsaWNhdGlvbnMgZG8gbm90IHRoZW1zZWx2ZXMgaW1wbGVtZW50IGFueSBwb3J0aW9uKHMpIG9mIHRoZSBTcGVjaWZpY2F0aW9uLCBhbmQgKGlpKSBkaXNjdXNzaW5nIHRoZSBTcGVjaWZpY2F0aW9uIHdpdGggYW55IHRoaXJkIHBhcnR5OyBhbmQgKGlpaSkgZXhjZXJwdGluZyBicmllZiBwb3J0aW9ucyBvZiB0aGUgU3BlY2lmaWNhdGlvbiBpbiBvcmFsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbnMgd2hpY2ggZGlzY3VzcyB0aGUgU3BlY2lmaWNhdGlvbiBwcm92aWRlZCB0aGF0IHN1Y2ggZXhjZXJwdHMgZG8gbm90IGluIHRoZSBhZ2dyZWdhdGUgY29uc3RpdHV0ZSBhIHNpZ25pZmljYW50IHBvcnRpb24gb2YgdGhlIFNwZWNpZmljYXRpb24uCisKKworMi4gTGljZW5zZSBmb3IgdGhlIERpc3RyaWJ1dGlvbiBvZiBDb21wbGlhbnQgSW1wbGVtZW50YXRpb25zLiBPcmFjbGUgYWxzbyBncmFudHMgeW91IGEgcGVycGV0dWFsLCBub24tZXhjbHVzaXZlLCBub24tdHJhbnNmZXJhYmxlLCB3b3JsZHdpZGUsIGZ1bGx5IHBhaWQtdXAsIHJveWFsdHkgZnJlZSwgbGltaXRlZCBsaWNlbnNlICh3aXRob3V0IHRoZSByaWdodCB0byBzdWJsaWNlbnNlKSB1bmRlciBhbnkgYXBwbGljYWJsZSBjb3B5cmlnaHRzIG9yLCBzdWJqZWN0IHRvIHRoZSBwcm92aXNpb25zIG9mIHN1YnNlY3Rpb24gNCBiZWxvdywgcGF0ZW50IHJpZ2h0cyBpdCBtYXkgaGF2ZSBjb3ZlcmluZyB0aGUgU3BlY2lmaWNhdGlvbiB0byBjcmVhdGUgYW5kL29yIGRpc3RyaWJ1dGUgYW4gSW5kZXBlbmRlbnQgSW1wbGVtZW50YXRpb24gb2YgdGhlIFNwZWNpZmljYXRpb24gdGhhdDogKGEpIGZ1bGx5IGltcGxlbWVudHMgdGhlIFNwZWNpZmljYXRpb24gaW5jbHVkaW5nIGFsbCBpdHMgcmVxdWlyZWQgaW50ZXJmYWNlcyBhbmQgZnVuY3Rpb25hbGl0eTsgKGIpIGRvZXMgbm90IG1vZGlmeSwgc3Vic2V0LCBzdXBlcnNldCBvciBvdGhlcndpc2UgZXh0ZW5kIHRoZSBMaWNlbnNvciBOYW1lIFNwYWNlLCBvciBpbmNsdWRlIGFueSBwdWJsaWMgb3IgcHJvdGVjdGVkIHBhY2thZ2VzLCBjbGFzc2VzLCBKYXZhIGludGVyZmFjZXMsIGZpZWxkcyBvciBtZXRob2RzIHdpdGhpbiB0aGUgTGljZW5zb3IgTmFtZSBTcGFjZSBvdGhlciB0aGFuIHRob3NlIHJlcXVpcmVkL2F1dGhvcml6ZWQgYnkgdGhlIFNwZWNpZmljYXRpb24gb3IgU3BlY2lmaWNhdGlvbnMgYmVpbmcgaW1wbGVtZW50ZWQ7IGFuZCAoYykgcGFzc2VzIHRoZSBUZWNobm9sb2d5IENvbXBhdGliaWxpdHkgS2l0IChpbmNsdWRpbmcgc2F0aXNmeWluZyB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoZSBhcHBsaWNhYmxlIFRDSyBVc2VycyBHdWlkZSkgZm9yIHN1Y2ggU3BlY2lmaWNhdGlvbiAoIkNvbXBsaWFudCBJbXBsZW1lbnRhdGlvbiIpLiBJbiBhZGRpdGlvbiwgdGhlIGZvcmVnb2luZyBsaWNlbnNlIGlzIGV4cHJlc3NseSBjb25kaXRpb25lZCBvbiB5b3VyIG5vdCBhY3Rpbmcgb3V0c2lkZSBpdHMgc2NvcGUuCitObyBsaWNlbnNlIGlzIGdyYW50ZWQgaGVyZXVuZGVyIGZvciBhbnkgb3RoZXIgcHVycG9zZSAoaW5jbHVkaW5nLCBmb3IgZXhhbXBsZSwgbW9kaWZ5aW5nIHRoZSBTcGVjaWZpY2F0aW9uLCBvdGhlciB0aGFuIHRvIHRoZSBleHRlbnQgb2YgeW91ciBmYWlyIHVzZSByaWdodHMsIG9yIGRpc3RyaWJ1dGluZyB0aGUgU3BlY2lmaWNhdGlvbiB0byB0aGlyZCBwYXJ0aWVzKS4gIEFsc28sIG5vIHJpZ2h0LCB0aXRsZSwgb3IgaW50ZXJlc3QgaW4gb3IgdG8gYW55IHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHRyYWRlIG5hbWVzIG9mIE9yYWNsZSBvciBPcmFjbGUncyBsaWNlbnNvcnMgaXMgZ3JhbnRlZCBoZXJldW5kZXIuICBKYXZhLCBhbmQgSmF2YS1yZWxhdGVkIGxvZ29zLCBtYXJrcyBhbmQgbmFtZXMgYXJlIHRyYWRlbWFya3Mgb3IgcmVnaXN0ZXJlZCB0cmFkZW1hcmtzIG9mIE9yYWNsZSBpbiB0aGUgVS5TLiBhbmQgb3RoZXIgY291bnRyaWVzLgorCisKKzMuIFBhc3MtdGhyb3VnaCBDb25kaXRpb25zLiBZb3UgbmVlZCBub3QgaW5jbHVkZSBsaW1pdGF0aW9ucyAoYSktKGMpIGZyb20gdGhlIHByZXZpb3VzIHBhcmFncmFwaCBvciBhbnkgb3RoZXIgcGFydGljdWxhciAicGFzcyB0aHJvdWdoIiByZXF1aXJlbWVudHMgaW4gYW55IGxpY2Vuc2UgWW91IGdyYW50IGNvbmNlcm5pbmcgdGhlIHVzZSBvZiB5b3VyIEluZGVwZW5kZW50IEltcGxlbWVudGF0aW9uIG9yIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSBpdC4gSG93ZXZlciwgZXhjZXB0IHdpdGggcmVzcGVjdCB0byBJbmRlcGVuZGVudCBJbXBsZW1lbnRhdGlvbnMgKGFuZCBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlbSkgdGhhdCBzYXRpc2Z5IGxpbWl0YXRpb25zIChhKS0oYykgZnJvbSB0aGUgcHJldmlvdXMgcGFyYWdyYXBoLCBZb3UgbWF5IG5laXRoZXI6IChhKSBncmFudCBvciBvdGhlcndpc2UgcGFzcyB0aHJvdWdoIHRvIHlvdXIgbGljZW5zZWVzIGFueSBsaWNlbnNlcyB1bmRlciBPcmFjbGUncyBhcHBsaWNhYmxlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHM7IG5vciAoYikgYXV0aG9yaXplIHlvdXIgbGljZW5zZWVzIHRvIG1ha2UgYW55IGNsYWltcyBjb25jZXJuaW5nIHRoZWlyIGltcGxlbWVudGF0aW9uJ3MgY29tcGxpYW5jZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uIGluIHF1ZXN0aW9uLgorCisKKzQuIFJlY2lwcm9jaXR5IENvbmNlcm5pbmcgUGF0ZW50IExpY2Vuc2VzLgorCisKK2EuIFdpdGggcmVzcGVjdCB0byBhbnkgcGF0ZW50IGNsYWltcyBjb3ZlcmVkIGJ5IHRoZSBsaWNlbnNlIGdyYW50ZWQgdW5kZXIgc3VicGFyYWdyYXBoIDIgYWJvdmUgdGhhdCB3b3VsZCBiZSBpbmZyaW5nZWQgYnkgYWxsIHRlY2huaWNhbGx5IGZlYXNpYmxlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgU3BlY2lmaWNhdGlvbiwgc3VjaCBsaWNlbnNlIGlzIGNvbmRpdGlvbmVkIHVwb24geW91ciBvZmZlcmluZyBvbiBmYWlyLCByZWFzb25hYmxlIGFuZCBub24tZGlzY3JpbWluYXRvcnkgdGVybXMsIHRvIGFueSBwYXJ0eSBzZWVraW5nIGl0IGZyb20gWW91LCBhIHBlcnBldHVhbCwgbm9uLWV4Y2x1c2l2ZSwgbm9uLXRyYW5zZmVyYWJsZSwgd29ybGR3aWRlIGxpY2Vuc2UgdW5kZXIgWW91ciBwYXRlbnQgcmlnaHRzIHdoaWNoIGFyZSBvciB3b3VsZCBiZSBpbmZyaW5nZWQgYnkgYWxsIHRlY2huaWNhbGx5IGZlYXNpYmxlIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgU3BlY2lmaWNhdGlvbiB0byBkZXZlbG9wLCBkaXN0cmlidXRlIGFuZCB1c2UgYSBDb21wbGlhbnQgSW1wbGVtZW50YXRpb24uCisKKworYiBXaXRoIHJlc3BlY3QgdG8gYW55IHBhdGVudCBjbGFpbXMgb3duZWQgYnkgT3JhY2xlIGFuZCBjb3ZlcmVkIGJ5IHRoZSBsaWNlbnNlIGdyYW50ZWQgdW5kZXIgc3VicGFyYWdyYXBoIDIsIHdoZXRoZXIgb3Igbm90IHRoZWlyIGluZnJpbmdlbWVudCBjYW4gYmUgYXZvaWRlZCBpbiBhIHRlY2huaWNhbGx5IGZlYXNpYmxlIG1hbm5lciB3aGVuIGltcGxlbWVudGluZyB0aGUgU3BlY2lmaWNhdGlvbiwgc3VjaCBsaWNlbnNlIHNoYWxsIHRlcm1pbmF0ZSB3aXRoIHJlc3BlY3QgdG8gc3VjaCBjbGFpbXMgaWYgWW91IGluaXRpYXRlIGEgY2xhaW0gYWdhaW5zdCBPcmFjbGUgdGhhdCBpdCBoYXMsIGluIHRoZSBjb3Vyc2Ugb2YgcGVyZm9ybWluZyBpdHMgcmVzcG9uc2liaWxpdGllcyBhcyB0aGUgU3BlY2lmaWNhdGlvbiBMZWFkLCBpbmR1Y2VkIGFueSBvdGhlciBlbnRpdHkgdG8gaW5mcmluZ2UgWW91ciBwYXRlbnQgcmlnaHRzLgorCisKK2MgQWxzbyB3aXRoIHJlc3BlY3QgdG8gYW55IHBhdGVudCBjbGFpbXMgb3duZWQgYnkgT3JhY2xlIGFuZCBjb3ZlcmVkIGJ5IHRoZSBsaWNlbnNlIGdyYW50ZWQgdW5kZXIgc3VicGFyYWdyYXBoIDIgYWJvdmUsIHdoZXJlIHRoZSBpbmZyaW5nZW1lbnQgb2Ygc3VjaCBjbGFpbXMgY2FuIGJlIGF2b2lkZWQgaW4gYSB0ZWNobmljYWxseSBmZWFzaWJsZSBtYW5uZXIgd2hlbiBpbXBsZW1lbnRpbmcgdGhlIFNwZWNpZmljYXRpb24gc3VjaCBsaWNlbnNlLCB3aXRoIHJlc3BlY3QgdG8gc3VjaCBjbGFpbXMsIHNoYWxsIHRlcm1pbmF0ZSBpZiBZb3UgaW5pdGlhdGUgYSBjbGFpbSBhZ2FpbnN0IE9yYWNsZSB0aGF0IGl0cyBtYWtpbmcsIGhhdmluZyBtYWRlLCB1c2luZywgb2ZmZXJpbmcgdG8gc2VsbCwgc2VsbGluZyBvciBpbXBvcnRpbmcgYSBDb21wbGlhbnQgSW1wbGVtZW50YXRpb24gaW5mcmluZ2VzIFlvdXIgcGF0ZW50IHJpZ2h0cy4KKworCis1LiBEZWZpbml0aW9ucy4gRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIEFncmVlbWVudDogIkluZGVwZW5kZW50CitJbXBsZW1lbnRhdGlvbiIgc2hhbGwgbWVhbiBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3BlY2lmaWNhdGlvbiB0aGF0IG5laXRoZXIgZGVyaXZlcyBmcm9tIGFueSBvZiBPcmFjbGUncyBzb3VyY2UgY29kZSBvciBiaW5hcnkgY29kZSBtYXRlcmlhbHMgbm9yLCBleGNlcHQgd2l0aCBhbiBhcHByb3ByaWF0ZSBhbmQgc2VwYXJhdGUgbGljZW5zZSBmcm9tIE9yYWNsZSwgaW5jbHVkZXMgYW55IG9mIE9yYWNsZSdzIHNvdXJjZSBjb2RlIG9yIGJpbmFyeSBjb2RlIG1hdGVyaWFsczsgIkxpY2Vuc29yIE5hbWUgU3BhY2UiIHNoYWxsIG1lYW4gdGhlIHB1YmxpYyBjbGFzcyBvciBpbnRlcmZhY2UgZGVjbGFyYXRpb25zIHdob3NlIG5hbWVzIGJlZ2luIHdpdGggImphdmEiLCAiamF2YXgiLCAiY29tLnN1biIgb3IgdGhlaXIgZXF1aXZhbGVudHMgaW4gYW55IHN1YnNlcXVlbnQgbmFtaW5nIGNvbnZlbnRpb24gYWRvcHRlZCBieSBPcmFjbGUgdGhyb3VnaCB0aGUgSmF2YSBDb21tdW5pdHkgUHJvY2Vzcywgb3IgYW55IHJlY29nbml6ZWQgc3VjY2Vzc29ycyBvciByZXBsYWNlbWVudHMgdGhlcmVvZjsgYW5kICJUZWNobm9sb2d5IENvbXBhdGliaWxpdHkgS2l0IiBvciAiVENLIiBzaGFsbCBtZWFuIHRoZSB0ZXN0IHN1aXRlIGFuZCBhY2NvbXBhbnlpbmcgVENLIFVzZXIncyBHdWlkZSBwcm92aWRlZCBieSBPcmFjbGUgd2hpY2ggY29ycmVzcG9uZHMgdG8gdGhlIFNwZWNpZmljYXRpb24gYW5kIHRoYXQgd2FzIGF2YWlsYWJsZSBlaXRoZXIgKGkpIGZyb20gT3JhY2xlIDEyMCBkYXlzIGJlZm9yZSB0aGUgZmlyc3QgcmVsZWFzZSBvZiBZb3VyIEluZGVwZW5kZW50IEltcGxlbWVudGF0aW9uIHRoYXQgYWxsb3dzIGl0cyB1c2UgZm9yIGNvbW1lcmNpYWwgcHVycG9zZXMsIG9yIChpaSkgbW9yZSByZWNlbnRseSB0aGFuIDEyMCBkYXlzIGZyb20gc3VjaCByZWxlYXNlIGJ1dCBhZ2FpbnN0IHdoaWNoIFlvdSBlbGVjdCB0byB0ZXN0IFlvdXIgaW1wbGVtZW50YXRpb24gb2YgdGhlIFNwZWNpZmljYXRpb24uCisKKworVGhpcyBBZ3JlZW1lbnQgd2lsbCB0ZXJtaW5hdGUgaW1tZWRpYXRlbHkgd2l0aG91dCBub3RpY2UgZnJvbSBPcmFjbGUgaWYgeW91IGJyZWFjaCB0aGUgQWdyZWVtZW50IG9yIGFjdCBvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGUgbGljZW5zZXMgZ3JhbnRlZCBhYm92ZS4KKworCitESVNDTEFJTUVSIE9GIFdBUlJBTlRJRVMKKworCitUSEUgU1BFQ0lGSUNBVElPTiBJUyBQUk9WSURFRCAiQVMgSVMiLiBPUkFDTEUgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SCitXQVJSQU5USUVTLCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPLCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE5PTi1JTkZSSU5HRU1FTlQgKElOQ0xVRElORyBBUyBBIENPTlNFUVVFTkNFIE9GIEFOWSBQUkFDVElDRSBPUiBJTVBMRU1FTlRBVElPTiBPRiBUSEUgU1BFQ0lGSUNBVElPTiksIE9SIFRIQVQgVEhFIENPTlRFTlRTIE9GIFRIRSBTUEVDSUZJQ0FUSU9OIEFSRSBTVUlUQUJMRSBGT1IgQU5ZIFBVUlBPU0UuIFRoaXMgZG9jdW1lbnQgZG9lcyBub3QgcmVwcmVzZW50IGFueSBjb21taXRtZW50IHRvIHJlbGVhc2Ugb3IgaW1wbGVtZW50IGFueSBwb3J0aW9uIG9mIHRoZSBTcGVjaWZpY2F0aW9uIGluIGFueSBwcm9kdWN0LiBJbiBhZGRpdGlvbiwgdGhlIFNwZWNpZmljYXRpb24gY291bGQgaW5jbHVkZSB0ZWNobmljYWwgaW5hY2N1cmFjaWVzIG9yIHR5cG9ncmFwaGljYWwgZXJyb3JzLgorCisKK0xJTUlUQVRJT04gT0YgTElBQklMSVRZCisKKworVE8gVEhFIEVYVEVOVCBOT1QgUFJPSElCSVRFRCBCWSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgT1JBQ0xFIE9SIElUUyBMSUNFTlNPUlMgQkUgTElBQkxFIEZPUiBBTlkgREFNQUdFUywgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgTE9TVCBSRVZFTlVFLCBQUk9GSVRTIE9SIERBVEEsIE9SIEZPUiBTUEVDSUFMLCBJTkRJUkVDVCwgQ09OU0VRVUVOVElBTCwgSU5DSURFTlRBTCBPUiBQVU5JVElWRSBEQU1BR0VTLCBIT1dFVkVSIENBVVNFRCBBTkQgUkVHQVJETEVTUyBPRiBUSEUgVEhFT1JZIE9GIExJQUJJTElUWSwgQVJJU0lORyBPVVQgT0YgT1IgUkVMQVRFRCBJTiBBTlkgV0FZIFRPIFlPVVIgSEFWSU5HLCBJTVBMRU1FTlRJTkcgT1IgT1RIRVJXSVNFIFVTSU5HIFRIRSBTUEVDSUZJQ0FUSU9OLCBFVkVOIElGIE9SQUNMRSBBTkQvT1IgSVRTIExJQ0VOU09SUyBIQVZFIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCitZb3Ugd2lsbCBpbmRlbW5pZnksIGhvbGQgaGFybWxlc3MsIGFuZCBkZWZlbmQgT3JhY2xlIGFuZCBpdHMgbGljZW5zb3JzIGZyb20gYW55IGNsYWltcyBhcmlzaW5nIG9yIHJlc3VsdGluZyBmcm9tOiAoaSkgeW91ciB1c2Ugb2YgdGhlIFNwZWNpZmljYXRpb247IChpaSkgdGhlIHVzZSBvciBkaXN0cmlidXRpb24gb2YgeW91ciBKYXZhIGFwcGxpY2F0aW9uLCBhcHBsZXQgYW5kL29yIGltcGxlbWVudGF0aW9uOyBhbmQvb3IgKGlpaSkgYW55IGNsYWltcyB0aGF0IGxhdGVyIHZlcnNpb25zIG9yIHJlbGVhc2VzIG9mIGFueSBTcGVjaWZpY2F0aW9uIGZ1cm5pc2hlZCB0byB5b3UgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGlzIGxpY2Vuc2UuCisKKworUkVTVFJJQ1RFRCBSSUdIVFMgTEVHRU5ECisKKworVS5TLiBHb3Zlcm5tZW50OiBJZiB0aGlzIFNwZWNpZmljYXRpb24gaXMgYmVpbmcgYWNxdWlyZWQgYnkgb3Igb24gYmVoYWxmIG9mIHRoZSBVLlMuIEdvdmVybm1lbnQgb3IgYnkgYSBVLlMuIEdvdmVybm1lbnQgcHJpbWUgY29udHJhY3RvciBvciBzdWJjb250cmFjdG9yIChhdCBhbnkgdGllciksIHRoZW4gdGhlIEdvdmVybm1lbnQncyByaWdodHMgaW4gdGhlIFNvZnR3YXJlIGFuZCBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBzaGFsbCBiZSBvbmx5IGFzIHNldCBmb3J0aCBpbiB0aGlzIGxpY2Vuc2U7IHRoaXMgaXMgaW4gYWNjb3JkYW5jZSB3aXRoIDQ4IEMuRi5SLiAyMjcuNzIwMSB0aHJvdWdoIDIyNy43MjAyLTQgKGZvciBEZXBhcnRtZW50IG9mIERlZmVuc2UgKERvRCkgYWNxdWlzaXRpb25zKSBhbmQgd2l0aCA0OCBDLkYuUi4gMi4xMDEgYW5kIDEyLjIxMiAoZm9yIG5vbi1Eb0QgYWNxdWlzaXRpb25zKS4KKworCitSRVBPUlQKKworCitJZiB5b3UgcHJvdmlkZSBPcmFjbGUgd2l0aCBhbnkgY29tbWVudHMgb3Igc3VnZ2VzdGlvbnMgY29uY2VybmluZyB0aGUgU3BlY2lmaWNhdGlvbiAoIkZlZWRiYWNrIiksIHlvdSBoZXJlYnk6IChpKSBhZ3JlZSB0aGF0IHN1Y2ggRmVlZGJhY2sgaXMgcHJvdmlkZWQgb24gYSBub24tcHJvcHJpZXRhcnkgYW5kIG5vbi1jb25maWRlbnRpYWwgYmFzaXMsIGFuZCAoaWkpIGdyYW50IE9yYWNsZSBhIHBlcnBldHVhbCwgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCBmdWxseSBwYWlkLXVwLCBpcnJldm9jYWJsZSBsaWNlbnNlLCB3aXRoIHRoZSByaWdodCB0byBzdWJsaWNlbnNlIHRocm91Z2ggbXVsdGlwbGUgbGV2ZWxzIG9mIHN1YmxpY2Vuc2VlcywgdG8gaW5jb3Jwb3JhdGUsIGRpc2Nsb3NlLCBhbmQgdXNlIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgRmVlZGJhY2sgZm9yIGFueSBwdXJwb3NlLgorCisKK0dFTkVSQUwgVEVSTVMKKworCitBbnkgYWN0aW9uIHJlbGF0ZWQgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBiZSBnb3Zlcm5lZCBieSBDYWxpZm9ybmlhIGxhdyBhbmQgY29udHJvbGxpbmcgVS5TLiBmZWRlcmFsIGxhdy4gVGhlIFUuTi4gQ29udmVudGlvbiBmb3IgdGhlIEludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBhbmQgdGhlIGNob2ljZSBvZiBsYXcgcnVsZXMgb2YgYW55IGp1cmlzZGljdGlvbiB3aWxsIG5vdCBhcHBseS4KKworCitUaGUgU3BlY2lmaWNhdGlvbiBpcyBzdWJqZWN0IHRvIFUuUy4gZXhwb3J0IGNvbnRyb2wgbGF3cyBhbmQgbWF5IGJlIHN1YmplY3QgdG8gZXhwb3J0IG9yIGltcG9ydCByZWd1bGF0aW9ucyBpbiBvdGhlciBjb3VudHJpZXMuIExpY2Vuc2VlIGFncmVlcyB0byBjb21wbHkgc3RyaWN0bHkgd2l0aCBhbGwgc3VjaCBsYXdzIGFuZCByZWd1bGF0aW9ucyBhbmQgYWNrbm93bGVkZ2VzIHRoYXQgaXQgaGFzIHRoZSByZXNwb25zaWJpbGl0eSB0byBvYnRhaW4gc3VjaCBsaWNlbnNlcyB0byBleHBvcnQsIHJlLWV4cG9ydCBvciBpbXBvcnQgYXMgbWF5IGJlIHJlcXVpcmVkIGFmdGVyIGRlbGl2ZXJ5IHRvIExpY2Vuc2VlLgorCisKK1RoaXMgQWdyZWVtZW50IGlzIHRoZSBwYXJ0aWVzJyBlbnRpcmUgYWdyZWVtZW50IHJlbGF0aW5nIHRvIGl0cyBzdWJqZWN0IG1hdHRlci4gSXQgc3VwZXJzZWRlcyBhbGwgcHJpb3Igb3IgY29udGVtcG9yYW5lb3VzIG9yYWwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9ucywgcHJvcG9zYWxzLCBjb25kaXRpb25zLCByZXByZXNlbnRhdGlvbnMgYW5kIHdhcnJhbnRpZXMgYW5kIHByZXZhaWxzIG92ZXIgYW55IGNvbmZsaWN0aW5nIG9yIGFkZGl0aW9uYWwgdGVybXMgb2YgYW55IHF1b3RlLCBvcmRlciwgYWNrbm93bGVkZ21lbnQsIG9yIG90aGVyIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgcGFydGllcyByZWxhdGluZyB0byBpdHMgc3ViamVjdCBtYXR0ZXIgZHVyaW5nIHRoZSB0ZXJtIG9mIHRoaXMgQWdyZWVtZW50LiBObyBtb2RpZmljYXRpb24gdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBiZSBiaW5kaW5nLCB1bmxlc3MgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IGFuIGF1dGhvcml6ZWQgcmVwcmVzZW50YXRpdmUgb2YgZWFjaCBwYXJ0eS4KKworCitSZXYuIE5vdmVtYmVyIDExLCAyMDEwCisKK09yYWNsZS9GaW5hbC9GdWxsCmRpZmYgLS1naXQgYS9saWNlbnNlcy9vcmFjbGUtamRiYyBiL2xpY2Vuc2VzL29yYWNsZS1qZGJjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkYWE4NDUKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9vcmFjbGUtamRiYwpAQCAtMCwwICsxLDIyMiBAQAorT3JhY2xlIFRlY2hub2xvZ3kgTmV0d29yayBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uIExpY2Vuc2UgVGVybXMKKworRXhwb3J0IENvbnRyb2xzIG9uIHRoZSBQcm9ncmFtcworU2VsZWN0aW5nIHRoZSAiQWNjZXB0IExpY2Vuc2UgQWdyZWVtZW50IiBidXR0b24gaXMgYSBjb25maXJtYXRpb24gb2YgeW91cgorYWdyZWVtZW50IHRoYXQgeW91IGNvbXBseSwgbm93IGFuZCBkdXJpbmcgdGhlIHRyaWFsIHRlcm0sIHdpdGggZWFjaCBvZiB0aGUKK2ZvbGxvd2luZyBzdGF0ZW1lbnRzOgorCistWW91IGFyZSBub3QgYSBjaXRpemVuLCBuYXRpb25hbCwgb3IgcmVzaWRlbnQgb2YsIGFuZCBhcmUgbm90IHVuZGVyIGNvbnRyb2wgb2YsCit0aGUgZ292ZXJubWVudCBvZiBDdWJhLCBJcmFuLCBTdWRhbiwgTGlieWEsIE5vcnRoIEtvcmVhLCBTeXJpYSwgbm9yIGFueSBjb3VudHJ5Cit0byB3aGljaCB0aGUgVW5pdGVkIFN0YXRlcyBoYXMgcHJvaGliaXRlZCBleHBvcnQuCistWW91IHdpbGwgbm90IGRvd25sb2FkIG9yIG90aGVyd2lzZSBleHBvcnQgb3IgcmUtZXhwb3J0IHRoZSBQcm9ncmFtcywgZGlyZWN0bHkKK29yIGluZGlyZWN0bHksIHRvIHRoZSBhYm92ZSBtZW50aW9uZWQgY291bnRyaWVzIG5vciB0byBjaXRpemVucywgbmF0aW9uYWxzIG9yCityZXNpZGVudHMgb2YgdGhvc2UgY291bnRyaWVzLgorLVlvdSBhcmUgbm90IGxpc3RlZCBvbiB0aGUgVW5pdGVkIFN0YXRlcyBEZXBhcnRtZW50IG9mIFRyZWFzdXJ5IGxpc3RzIG9mCitTcGVjaWFsbHkgRGVzaWduYXRlZCBOYXRpb25hbHMsIFNwZWNpYWxseSBEZXNpZ25hdGVkIFRlcnJvcmlzdHMsIGFuZCBTcGVjaWFsbHkKK0Rlc2lnbmF0ZWQgTmFyY290aWMgVHJhZmZpY2tlcnMsIG5vciBhcmUgeW91IGxpc3RlZCBvbiB0aGUgVW5pdGVkIFN0YXRlcworRGVwYXJ0bWVudCBvZiBDb21tZXJjZSBUYWJsZSBvZiBEZW5pYWwgT3JkZXJzLgorCitZb3Ugd2lsbCBub3QgZG93bmxvYWQgb3Igb3RoZXJ3aXNlIGV4cG9ydCBvciByZS1leHBvcnQgdGhlIFByb2dyYW1zLCBkaXJlY3RseSBvcgoraW5kaXJlY3RseSwgdG8gcGVyc29ucyBvbiB0aGUgYWJvdmUgbWVudGlvbmVkIGxpc3RzLgorCitZb3Ugd2lsbCBub3QgdXNlIHRoZSBQcm9ncmFtcyBmb3IsIGFuZCB3aWxsIG5vdCBhbGxvdyB0aGUgUHJvZ3JhbXMgdG8gYmUgdXNlZAorZm9yLCBhbnkgcHVycG9zZXMgcHJvaGliaXRlZCBieSBVbml0ZWQgU3RhdGVzIGxhdywgaW5jbHVkaW5nLCB3aXRob3V0CitsaW1pdGF0aW9uLCBmb3IgdGhlIGRldmVsb3BtZW50LCBkZXNpZ24sIG1hbnVmYWN0dXJlIG9yIHByb2R1Y3Rpb24gb2YgbnVjbGVhciwKK2NoZW1pY2FsIG9yIGJpb2xvZ2ljYWwgd2VhcG9ucyBvZiBtYXNzIGRlc3RydWN0aW9uLgorCitFWFBPUlQgUkVTVFJJQ1RJT05TCitZb3UgYWdyZWUgdGhhdCBVLlMuIGV4cG9ydCBjb250cm9sIGxhd3MgYW5kIG90aGVyIGFwcGxpY2FibGUgZXhwb3J0IGFuZCBpbXBvcnQKK2xhd3MgZ292ZXJuIHlvdXIgdXNlIG9mIHRoZSBwcm9ncmFtcywgaW5jbHVkaW5nIHRlY2huaWNhbCBkYXRhOyBhZGRpdGlvbmFsCitpbmZvcm1hdGlvbiBjYW4gYmUgZm91bmQgb24gT3JhY2xlwq4ncyBHbG9iYWwgVHJhZGUgQ29tcGxpYW5jZSB3ZWIgc2l0ZQorKGh0dHA6Ly93d3cub3JhY2xlLmNvbS9wcm9kdWN0cy9leHBvcnQpLgorCitZb3UgYWdyZWUgdGhhdCBuZWl0aGVyIHRoZSBwcm9ncmFtcyBub3IgYW55IGRpcmVjdCBwcm9kdWN0IHRoZXJlb2Ygd2lsbCBiZQorZXhwb3J0ZWQsIGRpcmVjdGx5LCBvciBpbmRpcmVjdGx5LCBpbiB2aW9sYXRpb24gb2YgdGhlc2UgbGF3cywgb3Igd2lsbCBiZSB1c2VkCitmb3IgYW55IHB1cnBvc2UgcHJvaGliaXRlZCBieSB0aGVzZSBsYXdzIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBudWNsZWFyLAorY2hlbWljYWwsIG9yIGJpb2xvZ2ljYWwgd2VhcG9ucyBwcm9saWZlcmF0aW9uLgorCitPcmFjbGUgRW1wbG95ZWVzOiBVbmRlciBubyBjaXJjdW1zdGFuY2VzIGFyZSBPcmFjbGUgRW1wbG95ZWVzIGF1dGhvcml6ZWQgdG8KK2Rvd25sb2FkIHNvZnR3YXJlIGZvciB0aGUgcHVycG9zZSBvZiBkaXN0cmlidXRpbmcgaXQgdG8gY3VzdG9tZXJzLiBPcmFjbGUKK3Byb2R1Y3RzIGFyZSBhdmFpbGFibGUgdG8gZW1wbG95ZWVzIGZvciBpbnRlcm5hbCB1c2Ugb3IgZGVtb25zdHJhdGlvbiBwdXJwb3Nlcworb25seS4gSW4ga2VlcGluZyB3aXRoIE9yYWNsZSdzIHRyYWRlIGNvbXBsaWFuY2Ugb2JsaWdhdGlvbnMgdW5kZXIgVS5TLiBhbmQKK2FwcGxpY2FibGUgbXVsdGlsYXRlcmFsIGxhdywgZmFpbHVyZSB0byBjb21wbHkgd2l0aCB0aGlzIHBvbGljeSBjb3VsZCByZXN1bHQgaW4KK2Rpc2NpcGxpbmFyeSBhY3Rpb24gdXAgdG8gYW5kIGluY2x1ZGluZyB0ZXJtaW5hdGlvbi4KKworTm90ZTogWW91IGFyZSBib3VuZCBieSB0aGUgT3JhY2xlIFRlY2hub2xvZ3kgTmV0d29yayAoIk9UTiIpIExpY2Vuc2UgQWdyZWVtZW50Cit0ZXJtcy4gVGhlIE9UTiBMaWNlbnNlIEFncmVlbWVudCB0ZXJtcyBhbHNvIGFwcGx5IHRvIGFsbCB1cGRhdGVzIHlvdSByZWNlaXZlCit1bmRlciB5b3VyIFRlY2hub2xvZ3kgVHJhY2sgc3Vic2NyaXB0aW9uLgorCitUaGUgT1ROIExpY2Vuc2UgQWdyZWVtZW50IHRlcm1zIGJlbG93IHN1cGVyY2VkZSBhbnkgc2hyaW5rd3JhcCBsaWNlbnNlIG9uIHRoZQorT1ROIFRlY2hub2xvZ3kgVHJhY2sgc29mdHdhcmUgQ0RzIGFuZCBwcmV2aW91cyBPVE4gTGljZW5zZSB0ZXJtcyAoaW5jbHVkaW5nIHRoZQorT3JhY2xlIFByb2dyYW0gTGljZW5zZSBhcyBtb2RpZmllZCBieSB0aGUgT1ROIFByb2dyYW0gVXNlIENlcnRpZmljYXRlKS4KKworT3JhY2xlIFRlY2hub2xvZ3kgTmV0d29yayBEZXZlbG9wbWVudCBhbmQgRGlzdHJpYnV0aW9uIExpY2Vuc2UgQWdyZWVtZW50CisKKworIldlLCIgInVzLCIgYW5kICJvdXIiIHJlZmVycyB0byBPcmFjbGUgVVNBLCBJbmMuLCBmb3IgYW5kIG9uIGJlaGFsZiBvZiBpdHNlbGYKK2FuZCBpdHMgc3Vic2lkaWFyaWVzIGFuZCBhZmZpbGlhdGVzIHVuZGVyIGNvbW1vbiBjb250cm9sLiAiWW91IiBhbmQgInlvdXIiCityZWZlcnMgdG8gdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgd2lzaGVzIHRvIHVzZSB0aGUgcHJvZ3JhbXMgZnJvbSBPcmFjbGUuCisiUHJvZ3JhbXMiIHJlZmVycyB0byB0aGUgc29mdHdhcmUgcHJvZHVjdCB5b3Ugd2lzaCB0byBkb3dubG9hZCBhbmQgdXNlIGFuZAorcHJvZ3JhbSBkb2N1bWVudGF0aW9uLiAiTGljZW5zZSIgcmVmZXJzIHRvIHlvdXIgcmlnaHQgdG8gdXNlIHRoZSBwcm9ncmFtcyB1bmRlcgordGhlIHRlcm1zIG9mIHRoaXMgYWdyZWVtZW50LiBUaGlzIGFncmVlbWVudCBpcyBnb3Zlcm5lZCBieSB0aGUgc3Vic3RhbnRpdmUgYW5kCitwcm9jZWR1cmFsIGxhd3Mgb2YgQ2FsaWZvcm5pYS4gWW91IGFuZCBPcmFjbGUgYWdyZWUgdG8gc3VibWl0IHRvIHRoZSBleGNsdXNpdmUKK2p1cmlzZGljdGlvbiBvZiwgYW5kIHZlbnVlIGluLCB0aGUgY291cnRzIG9mIFNhbiBGcmFuY2lzY28sIFNhbiBNYXRlbywgb3IgU2FudGEKK0NsYXJhIGNvdW50aWVzIGluIENhbGlmb3JuaWEgaW4gYW55IGRpc3B1dGUgYXJpc2luZyBvdXQgb2Ygb3IgcmVsYXRpbmcgdG8gdGhpcworYWdyZWVtZW50LgorCitXZSBhcmUgd2lsbGluZyB0byBsaWNlbnNlIHRoZSBwcm9ncmFtcyB0byB5b3Ugb25seSB1cG9uIHRoZSBjb25kaXRpb24gdGhhdCB5b3UKK2FjY2VwdCBhbGwgb2YgdGhlIHRlcm1zIGNvbnRhaW5lZCBpbiB0aGlzIGFncmVlbWVudC4gUmVhZCB0aGUgdGVybXMgY2FyZWZ1bGx5CithbmQgc2VsZWN0IHRoZSAiQWNjZXB0IiBidXR0b24gYXQgdGhlIGJvdHRvbSBvZiB0aGUgcGFnZSB0byBjb25maXJtIHlvdXIKK2FjY2VwdGFuY2UuIElmIHlvdSBhcmUgbm90IHdpbGxpbmcgdG8gYmUgYm91bmQgYnkgdGhlc2UgdGVybXMsIHNlbGVjdCB0aGUgIkRvCitOb3QgQWNjZXB0IiBidXR0b24gYW5kIHRoZSByZWdpc3RyYXRpb24gcHJvY2VzcyB3aWxsIG5vdCBjb250aW51ZS4KKworTGljZW5zZSBSaWdodHMKK1dlIGdyYW50IHlvdSBhIG5vbmV4Y2x1c2l2ZSwgbm9udHJhbnNmZXJhYmxlIGxpbWl0ZWQgbGljZW5zZSB0byB1c2UgdGhlIHByb2dyYW1zCitmb3IgcHVycG9zZXMgb2YgZGV2ZWxvcGluZyB5b3VyIGFwcGxpY2F0aW9ucy4gWW91IG1heSBhbHNvIGRpc3RyaWJ1dGUgdGhlCitwcm9ncmFtcyB3aXRoIHlvdXIgYXBwbGljYXRpb25zIHRvIHlvdXIgY3VzdG9tZXJzLiBJZiB5b3Ugd2FudCB0byB1c2UgdGhlCitwcm9ncmFtcyBmb3IgYW55IHB1cnBvc2Ugb3RoZXIgdGhhbiBhcyBleHByZXNzbHkgcGVybWl0dGVkIHVuZGVyIHRoaXMgYWdyZWVtZW50Cit5b3UgbXVzdCBjb250YWN0IHVzLCBvciBhbiBPcmFjbGUgcmVzZWxsZXIsIHRvIG9idGFpbiB0aGUgYXBwcm9wcmlhdGUgbGljZW5zZS4KK1dlIG1heSBhdWRpdCB5b3VyIHVzZSBvZiB0aGUgcHJvZ3JhbXMuIFByb2dyYW0gZG9jdW1lbnRhdGlvbiBpcyBlaXRoZXIgc2hpcHBlZAord2l0aCB0aGUgcHJvZ3JhbXMsIG9yIGRvY3VtZW50YXRpb24gbWF5IGFjY2Vzc2VkIG9ubGluZSBhdAoraHR0cDovL290bi5vcmFjbGUuY29tL2RvY3MuCisKK093bmVyc2hpcCBhbmQgUmVzdHJpY3Rpb25zCitXZSByZXRhaW4gYWxsIG93bmVyc2hpcCBhbmQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBpbiB0aGUgcHJvZ3JhbXMuIFlvdQorbWF5IG1ha2UgYSBzdWZmaWNpZW50IG51bWJlciBvZiBjb3BpZXMgb2YgdGhlIHByb2dyYW1zIGZvciB0aGUgbGljZW5zZWQgdXNlIGFuZAorb25lIGNvcHkgb2YgdGhlIHByb2dyYW1zIGZvciBiYWNrdXAgcHVycG9zZXMuCisKK1lvdSBtYXkgbm90OgorLSB1c2UgdGhlIHByb2dyYW1zIGZvciBhbnkgcHVycG9zZSBvdGhlciB0aGFuIGFzIHByb3ZpZGVkIGFib3ZlOworLSBkaXN0cmlidXRlIHRoZSBwcm9ncmFtcyB1bmxlc3MgYWNjb21wYW5pZWQgd2l0aCB5b3VyIGFwcGxpY2F0aW9uczsKKy0gY2hhcmdlIHlvdXIgZW5kIHVzZXJzIGZvciB1c2Ugb2YgdGhlIHByb2dyYW1zOworLSByZW1vdmUgb3IgbW9kaWZ5IGFueSBwcm9ncmFtIG1hcmtpbmdzIG9yIGFueSBub3RpY2Ugb2Ygb3VyIHByb3ByaWV0YXJ5IHJpZ2h0czsKKy0gdXNlIHRoZSBwcm9ncmFtcyB0byBwcm92aWRlIHRoaXJkIHBhcnR5IHRyYWluaW5nIG9uIHRoZSBjb250ZW50IGFuZC9vcgorZnVuY3Rpb25hbGl0eSBvZiB0aGUgcHJvZ3JhbXMsIGV4Y2VwdCBmb3IgdHJhaW5pbmcgeW91ciBsaWNlbnNlZCB1c2VyczsKKy0gYXNzaWduIHRoaXMgYWdyZWVtZW50IG9yIGdpdmUgdGhlIHByb2dyYW1zLCBwcm9ncmFtIGFjY2VzcyBvciBhbiBpbnRlcmVzdCBpbgordGhlIHByb2dyYW1zIHRvIGFueSBpbmRpdmlkdWFsIG9yIGVudGl0eSBleGNlcHQgYXMgcHJvdmlkZWQgdW5kZXIgdGhpcworYWdyZWVtZW50OworLSBjYXVzZSBvciBwZXJtaXQgcmV2ZXJzZSBlbmdpbmVlcmluZyAodW5sZXNzIHJlcXVpcmVkIGJ5IGxhdyBmb3IKK2ludGVyb3BlcmFiaWxpdHkpLCBkaXNhc3NlbWJseSBvciBkZWNvbXBpbGF0aW9uIG9mIHRoZSBwcm9ncmFtczsKKy0gZGlzY2xvc2UgcmVzdWx0cyBvZiBhbnkgcHJvZ3JhbSBiZW5jaG1hcmsgdGVzdHMgd2l0aG91dCBvdXIgcHJpb3IgY29uc2VudDsgb3IsCistIHVzZSBhbnkgT3JhY2xlIG5hbWUsIHRyYWRlbWFyayBvciBsb2dvLgorCitQcm9ncmFtIERpc3RyaWJ1dGlvbgorV2UgZ3JhbnQgeW91IGEgbm9uZXhjbHVzaXZlLCBub250cmFuc2ZlcmFibGUgcmlnaHQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUKK3Byb2dyYW1zIHRvIHlvdXIgZW5kIHVzZXJzIHByb3ZpZGVkIHRoYXQgeW91IGRvIG5vdCBjaGFyZ2UgeW91ciBlbmQgdXNlcnMgZm9yCit1c2Ugb2YgdGhlIHByb2dyYW1zIGFuZCBwcm92aWRlZCB5b3VyIGVuZCB1c2VycyBtYXkgb25seSB1c2UgdGhlIHByb2dyYW1zIHRvIHJ1bgoreW91ciBhcHBsaWNhdGlvbnMgZm9yIHRoZWlyIGJ1c2luZXNzIG9wZXJhdGlvbnMuIFByaW9yIHRvIGRpc3RyaWJ1dGluZyB0aGUKK3Byb2dyYW1zIHlvdSBzaGFsbCByZXF1aXJlIHlvdXIgZW5kIHVzZXJzIHRvIGV4ZWN1dGUgYW4gYWdyZWVtZW50IGJpbmRpbmcgdGhlbQordG8gdGVybXMgY29uc2lzdGVudCB3aXRoIHRob3NlIGNvbnRhaW5lZCBpbiB0aGlzIHNlY3Rpb24gYW5kIHRoZSBzZWN0aW9ucyBvZgordGhpcyBhZ3JlZW1lbnQgZW50aXRsZWQgIkxpY2Vuc2UgUmlnaHRzLCIgIk93bmVyc2hpcCBhbmQgUmVzdHJpY3Rpb25zLCIKKyJFeHBvcnQsIiAiRGlzY2xhaW1lciBvZiBXYXJyYW50aWVzIGFuZCBFeGNsdXNpdmUgUmVtZWRpZXMsIiAiTm8gVGVjaG5pY2FsCitTdXBwb3J0LCIgIkVuZCBvZiBBZ3JlZW1lbnQsIiAiUmVsYXRpb25zaGlwIEJldHdlZW4gdGhlIFBhcnRpZXMsIiBhbmQgIk9wZW4KK1NvdXJjZS4iIFlvdSBtdXN0IGFsc28gaW5jbHVkZSBhIHByb3Zpc2lvbiBzdGF0aW5nIHRoYXQgeW91ciBlbmQgdXNlcnMgc2hhbGwKK2hhdmUgbm8gcmlnaHQgdG8gZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbXMsIGFuZCBhIHByb3Zpc2lvbiBzcGVjaWZ5aW5nIHVzIGFzIGEKK3RoaXJkIHBhcnR5IGJlbmVmaWNpYXJ5IG9mIHRoZSBhZ3JlZW1lbnQuIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIG9idGFpbmluZwordGhlc2UgYWdyZWVtZW50cyB3aXRoIHlvdXIgZW5kIHVzZXJzLgorCitZb3UgYWdyZWUgdG86IChhKSBkZWZlbmQgYW5kIGluZGVtbmlmeSB1cyBhZ2FpbnN0IGFsbCBjbGFpbXMgYW5kIGRhbWFnZXMgY2F1c2VkCitieSB5b3VyIGRpc3RyaWJ1dGlvbiBvZiB0aGUgcHJvZ3JhbXMgaW4gYnJlYWNoIG9mIHRoaXMgYWdyZWVtZW50cyBhbmQvb3IgZmFpbHVyZQordG8gaW5jbHVkZSB0aGUgcmVxdWlyZWQgY29udHJhY3R1YWwgcHJvdmlzaW9ucyBpbiB5b3VyIGVuZCB1c2VyIGFncmVlbWVudCBhcworc3RhdGVkIGFib3ZlOyAoYikga2VlcCBleGVjdXRlZCBlbmQgdXNlciBhZ3JlZW1lbnRzIGFuZCByZWNvcmRzIG9mIGVuZCB1c2VyCitpbmZvcm1hdGlvbiBpbmNsdWRpbmcgbmFtZSwgYWRkcmVzcywgZGF0ZSBvZiBkaXN0cmlidXRpb24gYW5kIGlkZW50aXR5IG9mCitwcm9ncmFtcyBkaXN0cmlidXRlZDsgKGMpIGFsbG93IHVzIHRvIGluc3BlY3QgeW91ciBlbmQgdXNlciBhZ3JlZW1lbnRzIGFuZAorcmVjb3JkcyB1cG9uIHJlcXVlc3Q7IGFuZCwgKGQpIGVuZm9yY2UgdGhlIHRlcm1zIG9mIHlvdXIgZW5kIHVzZXIgYWdyZWVtZW50cyBzbworYXMgdG8gZWZmZWN0IGEgdGltZWx5IGN1cmUgb2YgYW55IGVuZCB1c2VyIGJyZWFjaCwgYW5kIHRvIG5vdGlmeSB1cyBvZiBhbnkKK2JyZWFjaCBvZiB0aGUgdGVybXMuCisKK0V4cG9ydAorWW91IGFncmVlIHRoYXQgVS5TLiBleHBvcnQgY29udHJvbCBsYXdzIGFuZCBvdGhlciBhcHBsaWNhYmxlIGV4cG9ydCBhbmQgaW1wb3J0CitsYXdzIGdvdmVybiB5b3VyIHVzZSBvZiB0aGUgcHJvZ3JhbXMsIGluY2x1ZGluZyB0ZWNobmljYWwgZGF0YTsgYWRkaXRpb25hbAoraW5mb3JtYXRpb24gY2FuIGJlIGZvdW5kIG9uIE9yYWNsZSdzIEdsb2JhbCBUcmFkZSBDb21wbGlhbmNlIHdlYiBzaXRlIGxvY2F0ZWQgYXQKK2h0dHA6Ly93d3cub3JhY2xlLmNvbS9wcm9kdWN0cy9leHBvcnQvaW5kZXguaHRtbD9jb250ZW50Lmh0bWwuIFlvdSBhZ3JlZSB0aGF0CituZWl0aGVyIHRoZSBwcm9ncmFtcyBub3IgYW55IGRpcmVjdCBwcm9kdWN0IHRoZXJlb2Ygd2lsbCBiZSBleHBvcnRlZCwgZGlyZWN0bHksCitvciBpbmRpcmVjdGx5LCBpbiB2aW9sYXRpb24gb2YgdGhlc2UgbGF3cywgb3Igd2lsbCBiZSB1c2VkIGZvciBhbnkgcHVycG9zZQorcHJvaGliaXRlZCBieSB0aGVzZSBsYXdzIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBudWNsZWFyLCBjaGVtaWNhbCwgb3IKK2Jpb2xvZ2ljYWwgd2VhcG9ucyBwcm9saWZlcmF0aW9uLgorCitEaXNjbGFpbWVyIG9mIFdhcnJhbnR5IGFuZCBFeGNsdXNpdmUgUmVtZWRpZXMKKworVEhFIFBST0dSQU1TIEFSRSBQUk9WSURFRCAiQVMgSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQuIFdFIEZVUlRIRVIKK0RJU0NMQUlNIEFMTCBXQVJSQU5USUVTLCBFWFBSRVNTIEFORCBJTVBMSUVELCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBBTlkKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SCitOT05JTkZSSU5HRU1FTlQuCisKK0lOIE5PIEVWRU5UIFNIQUxMIFdFIEJFIExJQUJMRSBGT1IgQU5ZIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBQVU5JVElWRQorT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBPUiBEQU1BR0VTIEZPUiBMT1NTIE9GIFBST0ZJVFMsIFJFVkVOVUUsIERBVEEgT1IgREFUQQorVVNFLCBJTkNVUlJFRCBCWSBZT1UgT1IgQU5ZIFRISVJEIFBBUlRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBJTiBDT05UUkFDVCBPUgorVE9SVCwgRVZFTiBJRiBXRSBIQVZFIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBPVVIKK0VOVElSRSBMSUFCSUxJVFkgRk9SIERBTUFHRVMgSEVSRVVOREVSIFNIQUxMIElOIE5PIEVWRU5UIEVYQ0VFRCBPTkUgVEhPVVNBTkQKK0RPTExBUlMgKFUuUy4gJDEsMDAwKS4KKworTm8gVGVjaG5pY2FsIFN1cHBvcnQKK091ciB0ZWNobmljYWwgc3VwcG9ydCBvcmdhbml6YXRpb24gd2lsbCBub3QgcHJvdmlkZSB0ZWNobmljYWwgc3VwcG9ydCwgcGhvbmUKK3N1cHBvcnQsIG9yIHVwZGF0ZXMgdG8geW91IGZvciB0aGUgcHJvZ3JhbXMgbGljZW5zZWQgdW5kZXIgdGhpcyBhZ3JlZW1lbnQuCisKK1Jlc3RyaWN0ZWQgUmlnaHRzCitJZiB5b3UgZGlzdHJpYnV0ZSBhIGxpY2Vuc2UgdG8gdGhlIFVuaXRlZCBTdGF0ZXMgZ292ZXJubWVudCwgdGhlIHByb2dyYW1zLAoraW5jbHVkaW5nIGRvY3VtZW50YXRpb24sIHNoYWxsIGJlIGNvbnNpZGVyZWQgY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBhbmQKK3lvdSB3aWxsIHBsYWNlIGEgbGVnZW5kLCBpbiBhZGRpdGlvbiB0byBhcHBsaWNhYmxlIGNvcHlyaWdodCBub3RpY2VzLCBvbiB0aGUKK2RvY3VtZW50YXRpb24sIGFuZCBvbiB0aGUgbWVkaWEgbGFiZWwsIHN1YnN0YW50aWFsbHkgc2ltaWxhciB0byB0aGUgZm9sbG93aW5nOgorTk9USUNFIE9GIFJFU1RSSUNURUQgUklHSFRTCisiUHJvZ3JhbXMgZGVsaXZlcmVkIHN1YmplY3QgdG8gdGhlIERPRCBGQVIgU3VwcGxlbWVudCBhcmUgJ2NvbW1lcmNpYWwgY29tcHV0ZXIKK3NvZnR3YXJlJyBhbmQgdXNlLCBkdXBsaWNhdGlvbiwgYW5kIGRpc2Nsb3N1cmUgb2YgdGhlIHByb2dyYW1zLCBpbmNsdWRpbmcKK2RvY3VtZW50YXRpb24sIHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIGxpY2Vuc2luZyByZXN0cmljdGlvbnMgc2V0IGZvcnRoIGluIHRoZQorYXBwbGljYWJsZSBPcmFjbGUgbGljZW5zZSBhZ3JlZW1lbnQuIE90aGVyd2lzZSwgcHJvZ3JhbXMgZGVsaXZlcmVkIHN1YmplY3QgdG8KK3RoZSBGZWRlcmFsIEFjcXVpc2l0aW9uIFJlZ3VsYXRpb25zIGFyZSAncmVzdHJpY3RlZCBjb21wdXRlciBzb2Z0d2FyZScgYW5kIHVzZSwKK2R1cGxpY2F0aW9uLCBhbmQgZGlzY2xvc3VyZSBvZiB0aGUgcHJvZ3JhbXMsIGluY2x1ZGluZyBkb2N1bWVudGF0aW9uLCBzaGFsbCBiZQorc3ViamVjdCB0byB0aGUgcmVzdHJpY3Rpb25zIGluIEZBUiA1Mi4yMjctMTksIENvbW1lcmNpYWwgQ29tcHV0ZXIKK1NvZnR3YXJlLVJlc3RyaWN0ZWQgUmlnaHRzIChKdW5lIDE5ODcpLiBPcmFjbGUgVVNBLCBJbmMuLCA1MDAgT3JhY2xlIFBhcmt3YXksCitSZWR3b29kIENpdHksIENBIDk0MDY1LiIKKworRW5kIG9mIEFncmVlbWVudAorWW91IG1heSB0ZXJtaW5hdGUgdGhpcyBhZ3JlZW1lbnQgYnkgZGVzdHJveWluZyBhbGwgY29waWVzIG9mIHRoZSBwcm9ncmFtcy4gV2UKK2hhdmUgdGhlIHJpZ2h0IHRvIHRlcm1pbmF0ZSB5b3VyIHJpZ2h0IHRvIHVzZSB0aGUgcHJvZ3JhbXMgaWYgeW91IGZhaWwgdG8gY29tcGx5Cit3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcyBhZ3JlZW1lbnQsIGluIHdoaWNoIGNhc2UgeW91IHNoYWxsIGRlc3Ryb3kgYWxsCitjb3BpZXMgb2YgdGhlIHByb2dyYW1zLgorCitSZWxhdGlvbnNoaXAgQmV0d2VlbiB0aGUgUGFydGllcworVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHlvdSBhbmQgdXMgaXMgdGhhdCBvZiBsaWNlbnNlZS9saWNlbnNvci4gTmVpdGhlciBwYXJ0eQord2lsbCByZXByZXNlbnQgdGhhdCBpdCBoYXMgYW55IGF1dGhvcml0eSB0byBhc3N1bWUgb3IgY3JlYXRlIGFueSBvYmxpZ2F0aW9uLAorZXhwcmVzcyBvciBpbXBsaWVkLCBvbiBiZWhhbGYgb2YgdGhlIG90aGVyIHBhcnR5LCBub3IgdG8gcmVwcmVzZW50IHRoZSBvdGhlcgorcGFydHkgYXMgYWdlbnQsIGVtcGxveWVlLCBmcmFuY2hpc2VlLCBvciBpbiBhbnkgb3RoZXIgY2FwYWNpdHkuIE5vdGhpbmcgaW4gdGhpcworYWdyZWVtZW50IHNoYWxsIGJlIGNvbnN0cnVlZCB0byBsaW1pdCBlaXRoZXIgcGFydHkncyByaWdodCB0byBpbmRlcGVuZGVudGx5CitkZXZlbG9wIG9yIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhhdCBpcyBmdW5jdGlvbmFsbHkgc2ltaWxhciB0byB0aGUgb3RoZXIgcGFydHkncworcHJvZHVjdHMsIHNvIGxvbmcgYXMgcHJvcHJpZXRhcnkgaW5mb3JtYXRpb24gb2YgdGhlIG90aGVyIHBhcnR5IGlzIG5vdCBpbmNsdWRlZAoraW4gc3VjaCBzb2Z0d2FyZS4KKworT3BlbiBTb3VyY2UKKyJPcGVuIFNvdXJjZSIgc29mdHdhcmUgLSBzb2Z0d2FyZSBhdmFpbGFibGUgd2l0aG91dCBjaGFyZ2UgZm9yIHVzZSwgbW9kaWZpY2F0aW9uCithbmQgZGlzdHJpYnV0aW9uIC0gaXMgb2Z0ZW4gbGljZW5zZWQgdW5kZXIgdGVybXMgdGhhdCByZXF1aXJlIHRoZSB1c2VyIHRvIG1ha2UKK3RoZSB1c2VyJ3MgbW9kaWZpY2F0aW9ucyB0byB0aGUgT3BlbiBTb3VyY2Ugc29mdHdhcmUgb3IgYW55IHNvZnR3YXJlIHRoYXQgdGhlCit1c2VyICdjb21iaW5lcycgd2l0aCB0aGUgT3BlbiBTb3VyY2Ugc29mdHdhcmUgZnJlZWx5IGF2YWlsYWJsZSBpbiBzb3VyY2UgY29kZQorZm9ybS4gSWYgeW91IHVzZSBPcGVuIFNvdXJjZSBzb2Z0d2FyZSBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBwcm9ncmFtcywgeW91IG11c3QKK2Vuc3VyZSB0aGF0IHlvdXIgdXNlIGRvZXMgbm90OiAoaSkgY3JlYXRlLCBvciBwdXJwb3J0IHRvIGNyZWF0ZSwgb2JsaWdhdGlvbnMgb2YKK3VzIHdpdGggcmVzcGVjdCB0byB0aGUgT3JhY2xlIHByb2dyYW1zOyBvciAoaWkpIGdyYW50LCBvciBwdXJwb3J0IHRvIGdyYW50LCB0bworYW55IHRoaXJkIHBhcnR5IGFueSByaWdodHMgdG8gb3IgaW1tdW5pdGllcyB1bmRlciBvdXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9yCitwcm9wcmlldGFyeSByaWdodHMgaW4gdGhlIE9yYWNsZSBwcm9ncmFtcy4gRm9yIGV4YW1wbGUsIHlvdSBtYXkgbm90IGRldmVsb3AgYQorc29mdHdhcmUgcHJvZ3JhbSB1c2luZyBhbiBPcmFjbGUgcHJvZ3JhbSBhbmQgYW4gT3BlbiBTb3VyY2UgcHJvZ3JhbSB3aGVyZSBzdWNoCit1c2UgcmVzdWx0cyBpbiBhIHByb2dyYW0gZmlsZShzKSB0aGF0IGNvbnRhaW5zIGNvZGUgZnJvbSBib3RoIHRoZSBPcmFjbGUgcHJvZ3JhbQorYW5kIHRoZSBPcGVuIFNvdXJjZSBwcm9ncmFtIChpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGxpYnJhcmllcykgaWYgdGhlIE9wZW4KK1NvdXJjZSBwcm9ncmFtIGlzIGxpY2Vuc2VkIHVuZGVyIGEgbGljZW5zZSB0aGF0IHJlcXVpcmVzIGFueSAibW9kaWZpY2F0aW9ucyIgYmUKK21hZGUgZnJlZWx5IGF2YWlsYWJsZS4gWW91IGFsc28gbWF5IG5vdCBjb21iaW5lIHRoZSBPcmFjbGUgcHJvZ3JhbSB3aXRoIHByb2dyYW1zCitsaWNlbnNlZCB1bmRlciB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKCJHUEwiKSBpbiBhbnkgbWFubmVyIHRoYXQgY291bGQKK2NhdXNlLCBvciBjb3VsZCBiZSBpbnRlcnByZXRlZCBvciBhc3NlcnRlZCB0byBjYXVzZSwgdGhlIE9yYWNsZSBwcm9ncmFtIG9yIGFueQorbW9kaWZpY2F0aW9ucyB0aGVyZXRvIHRvIGJlY29tZSBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGUgR1BMLgorCitFbnRpcmUgQWdyZWVtZW50CitZb3UgYWdyZWUgdGhhdCB0aGlzIGFncmVlbWVudCBpcyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGZvciB0aGUgcHJvZ3JhbXMgYW5kCitsaWNlbnNlcywgYW5kIHRoaXMgYWdyZWVtZW50IHN1cGVyc2VkZXMgYWxsIHByaW9yIG9yIGNvbnRlbXBvcmFuZW91cyBhZ3JlZW1lbnRzCitvciByZXByZXNlbnRhdGlvbnMuIElmIGFueSB0ZXJtIG9mIHRoaXMgYWdyZWVtZW50IGlzIGZvdW5kIHRvIGJlIGludmFsaWQgb3IKK3VuZW5mb3JjZWFibGUsIHRoZSByZW1haW5pbmcgcHJvdmlzaW9ucyB3aWxsIHJlbWFpbiBlZmZlY3RpdmUuCisKK0xhc3QgdXBkYXRlZDogMDMvMDkvMDUKKworU2hvdWxkIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgY29uY2VybmluZyB0aGlzIExpY2Vuc2UgQWdyZWVtZW50LCBvciBpZiB5b3UKK2Rlc2lyZSB0byBjb250YWN0IE9yYWNsZSBmb3IgYW55IHJlYXNvbiwgcGxlYXNlIHdyaXRlOgorT3JhY2xlIFVTQSwgSW5jLgorNTAwIE9yYWNsZSBQYXJrd2F5LAorUmVkd29vZCBDaXR5LCBDQSA5NDA2NQorCitPcmFjbGUgbWF5IGNvbnRhY3QgeW91IHRvIGFzayBpZiB5b3UgaGFkIGEgc2F0aXNmYWN0b3J5IGV4cGVyaWVuY2UgaW5zdGFsbGluZworYW5kIHVzaW5nIHRoaXMgT1ROIHNvZnR3YXJlIGRvd25sb2FkLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvb3R0ZXIgYi9saWNlbnNlcy9vdHRlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNDE1OGQ5Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvb3R0ZXIKQEAgLTAsMCArMSwzMCBAQAorT3R0ZXIgYW5kIE1BQ0UgTGVnYWwgSW5mb3JtYXRpb24KKworTm92ZW1iZXIgMjEsIDIwMDEuCisKK1RoaXMgaW5mb3JtYXRpb24gcmVmZXJzIHRvIHRoZSBPdHRlciBhbmQgTUFDRSBhdXRvbWF0ZWQgZGVkdWN0aW9uCitzb2Z0d2FyZSwgY3JlYXRlZCBhdCBBcmdvbm5lIE5hdGlvbmFsIExhYm9yYXRvcnkuCisKK0NvcHlyaWdodHMKKworVGhlIFVuaXZlcnNpdHkgb2YgQ2hpY2FnbyBoYXMgZGVjbGluZWQgdG8gYXNzZXJ0IGl0cworY29weXJpZ2h0cyBpbiB0aGlzIHNvZnR3YXJlLiAgSXQgbWF5IGJlIHVzZWQgYnkgdGhlIHB1YmxpYyB3aXRob3V0CityZXN0cmljdGlvbiBhbmQgaXMgYXZhaWxhYmxlIGJ5IGRvd25sb2FkIGF0IHd3dy5tY3MuYW5sLmdvdi9BUi9vdHRlci8uCisKK0xpY2Vuc2UKKworVGhpcyBtYXRlcmlhbCByZXN1bHRlZCBmcm9tIHdvcmsgZGV2ZWxvcGVkIHVuZGVyIGEgVS5TLiBHb3Zlcm5tZW50IGNvbnRyYWN0IAorYW5kIGlzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBsaWNlbnNlOiB0aGUgR292ZXJubWVudCBpcyBncmFudGVkIGZvciAKK2l0c2VsZiBhbmQgdGhlIHB1YmxpYyBhIHBhaWQtdXAsIG5vbmV4Y2x1c2l2ZSwgaXJyZXZvY2FibGUgd29ybGR3aWRlIAorbGljZW5zZSBpbiB0aGlzIG1hdGVyaWFsIHRvIHJlcHJvZHVjZSwgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzLCBkaXN0cmlidXRlIAorY29waWVzIHRvIHRoZSBwdWJsaWMsIGFuZCBwZXJmb3JtIHB1YmxpY2x5IGFuZCBkaXNwbGF5IHB1YmxpY2x5LgorCitEaXNjbGFpbWVyCisKK05FSVRIRVIgVEhFIFVOSVRFRCBTVEFURVMgR09WRVJOTUVOVCBOT1IgQU5ZIEFHRU5DWSBUSEVSRU9GLCBOT1IgQU5ZIE9GIAorVEhFSVIgRU1QTE9ZRUVTIE9SIE9GRklDRVJTLCBNQUtFUyBBTlkgIFdBUlJBTlRZLCBFWFBSRVNTIE9SIElNUExJRUQsIE9SIAorQVNTVU1FUyBBTlkgTEVHQUwgTElBQklMSVRZIE9SIFJFU1BPTlNJQklMSVRZIEZPUiBUSEUgQUNDVVJBQ1ksIAorQ09NUExFVEVORVNTLCBPUiBVU0VGVUxORVNTIE9GIEFOWSBJTkZPUk1BVElPTiwgQVBQQVJBVFVTLCBQUk9EVUNULCBPUiAKK1BST0NFU1MgRElTQ0xPU0VELCBPUiBSRVBSRVNFTlRTIFRIQVQgSVRTIFVTRSBXT1VMRCBOT1QgSU5GUklOR0UgUFJJVkFURUxZIAorT1dORUQgUklHSFRTLgorCmRpZmYgLS1naXQgYS9saWNlbnNlcy9wYXJhdmlldyBiL2xpY2Vuc2VzL3BhcmF2aWV3Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3MjdjNmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9wYXJhdmlldwpAQCAtMCwwICsxLDgyIEBACitUaGUgUGFyYVZpZXcgRGlzdHJpYnV0aW9uIGluY2x1ZGVzIGNvbnRyaWJ1dGlvbnMgZnJvbSBzZXZlcmFsIGdyb3Vwcy4KK0luZGl2aWR1YWwgY29tcG9uZW50cyByZWZlcmVuY2Ugb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQKK25vdGljZXMuICBUaGUgbm90aWNlcyBjb3JyZXNwb25kIHRvIEtpdHdhcmUsIEluYy4sIExvcyBBbGFtb3MgTmF0aW9uYWwKK0xhYm9yYXRvcnksIGFuZCBTYW5kaWEgQ29ycG9yYXRpb24sIHJlc3BlY3RpdmVseS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NvcHlyaWdodCAoYykgMjAwMC0yMDA1IEtpdHdhcmUgSW5jLiAyOCBDb3Jwb3JhdGUgRHJpdmUsIFN1aXRlIDIwNCwKK0NsaWZ0b24gUGFyaywgTlksIDEyMDY1LCBVU0EuCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKK21ldDoKKworICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICAgZGlzdHJpYnV0aW9uLgorCisgKiBOZWl0aGVyIHRoZSBuYW1lIG9mIEtpdHdhcmUgbm9yIHRoZSBuYW1lcyBvZiBhbnkgY29udHJpYnV0b3JzIG1heQorICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCisgKiBNb2RpZmllZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdAorICAgbm90IGJlIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCitBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IKK0NPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCitQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GCitMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORworTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCitTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NvcHlyaWdodCAoYykgMjAwMi0yMDA1IExvcyBBbGFtb3MgTmF0aW9uYWwgTGFib3JhdG9yeQorCitUaGlzIHNvZnR3YXJlIGFuZCBhbmNpbGxhcnkgaW5mb3JtYXRpb24ga25vd24gYXMgdnRrX2V4dCAoYW5kIGhlcmVpbgorY2FsbGVkICJTT0ZUV0FSRSIpIGlzIG1hZGUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBkZXNjcmliZWQgYmVsb3cuCitUaGUgU09GVFdBUkUgaGFzIGJlZW4gYXBwcm92ZWQgZm9yIHJlbGVhc2Ugd2l0aCBhc3NvY2lhdGVkIExBX0NDCitOdW1iZXIgOTktNDQsIGdyYW50ZWQgYnkgTG9zIEFsYW1vcyBOYXRpb25hbCBMYWJvcmF0b3J5IGluIEp1bHkgMTk5OS4KKworVW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQsIHRoaXMgU09GVFdBUkUgaGFzIGJlZW4gYXV0aG9yZWQgYnkgYW4KK2VtcGxveWVlIG9yIGVtcGxveWVlcyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLCBvcGVyYXRvciBvZiB0aGUKK0xvcyBBbGFtb3MgTmF0aW9uYWwgTGFib3JhdG9yeSB1bmRlciBDb250cmFjdCBOby4gVy03NDA1LUVORy0zNiB3aXRoCit0aGUgVW5pdGVkIFN0YXRlcyBEZXBhcnRtZW50IG9mIEVuZXJneS4KKworVGhlIFVuaXRlZCBTdGF0ZXMgR292ZXJubWVudCBoYXMgcmlnaHRzIHRvIHVzZSwgcmVwcm9kdWNlLCBhbmQKK2Rpc3RyaWJ1dGUgdGhpcyBTT0ZUV0FSRS4gIFRoZSBwdWJsaWMgbWF5IGNvcHksIGRpc3RyaWJ1dGUsIHByZXBhcmUKK2Rlcml2YXRpdmUgd29ya3MgYW5kIHB1YmxpY2x5IGRpc3BsYXkgdGhpcyBTT0ZUV0FSRSB3aXRob3V0IGNoYXJnZSwKK3Byb3ZpZGVkIHRoYXQgdGhpcyBOb3RpY2UgYW5kIGFueSBzdGF0ZW1lbnQgb2YgYXV0aG9yc2hpcCBhcmUKK3JlcHJvZHVjZWQgb24gYWxsIGNvcGllcy4KKworTmVpdGhlciB0aGUgVS4gUy4gR292ZXJubWVudCwgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSwgbm9yIHRoZQorQWR2YW5jZWQgQ29tcHV0aW5nIExhYm9yYXRvcnkgbWFrZXMgYW55IHdhcnJhbnR5LCBlaXRoZXIgZXhwcmVzcyBvcgoraW1wbGllZCwgbm9yIGFzc3VtZXMgYW55IGxpYWJpbGl0eSBvciByZXNwb25zaWJpbGl0eSBmb3IgdGhlIHVzZSBvZgordGhpcyBTT0ZUV0FSRS4KKworSWYgU09GVFdBUkUgaXMgbW9kaWZpZWQgdG8gcHJvZHVjZSBkZXJpdmF0aXZlIHdvcmtzLCBzdWNoIG1vZGlmaWVkCitTT0ZUV0FSRSBzaG91bGQgYmUgY2xlYXJseSBtYXJrZWQsIHNvIGFzIG5vdCB0byBjb25mdXNlIGl0IHdpdGggdGhlCit2ZXJzaW9uIGF2YWlsYWJsZSBmcm9tIExvcyBBbGFtb3MgTmF0aW9uYWwgTGFib3JhdG9yeS4KKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK0NvcHlyaWdodCAoYykgMjAwMy0yMDA1IFNhbmRpYSBDb3Jwb3JhdGlvbgorCitVbmRlciB0aGUgdGVybXMgb2YgQ29udHJhY3QgREUtQUMwNC05NEFMODUwMDAsIHRoZXJlIGlzIGEKK25vbi1leGNsdXNpdmUgbGljZW5zZSBmb3IgdXNlIG9mIHRoaXMgd29yayBieSBvciBvbiBiZWhhbGYgb2YgdGhlCitVLlMuIEdvdmVybm1lbnQuICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLAord2l0aCBvciB3aXRob3V0IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoaXMgTm90aWNlCithbmQgYW55IHN0YXRlbWVudCBvZiBhdXRob3JzaGlwIGFyZSByZXByb2R1Y2VkIG9uIGFsbCBjb3BpZXMuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvcGVuZ3V6emxlIGIvbGljZW5zZXMvcGVuZ3V6emxlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZTA2NDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9wZW5ndXp6bGUKQEAgLTAsMCArMSw0NyBAQAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKK1Blbmd1enpsZSBWZXJzaW9uIDEuMAorYnkgTWFyaWUgQ2Fyb2xpbmUgUGF2b2luZQorTm92ZW1iZXIgMywgMjAwMAorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFNvZnR3YXJlIExpY2Vuc2UgQWdyZWVtZW50CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSU1QT1JUQU5UCisKK1JlYWQgdGhpcyBhZ3JlZW1lbnQgYmVmb3JlIGluc3RhbGxpbmcgb3IgdXNpbmcgdGhlIFNvZnR3YXJlLiBJbnN0YWxsaW5nCithbmQvb3IgdXNpbmcgdGhlIFNvZnR3YXJlIG9uIHlvdXIgY29tcHV0ZXIgaW5kaWNhdGVzIHlvdXIgYWNjZXB0YW5jZSBvZgordGhlc2UgdGVybXMuIAorCitZT1UgTUFZCisKKyAgICAgIDEuICBVc2UgdGhlIFNvZnR3YXJlIHdpdGhvdXQgY2hhcmdlIG9uIGFzIG1hbnkgc3lzdGVtcyBhcyB5b3Ugd2lzaCwKKworICAgICAgMi4gIFNoYXJlIHRoZSBTb2Z0d2FyZSB3aXRoIG90aGVycyBmb3IgdGhlaXIgcGVyc29uYWwgdXNlLCBidXQgb25seQorICAgICAgICAgIGlmIHlvdSBzaGFyZSBpdCBpbnRhY3QsIHdpdGhvdXQgYW55IGNoYW5nZXMgb3IgbW9kaWZpY2F0aW9ucyBvZgorICAgICAgICAgIGFueSBraW5kLCBhbmQgY29tcGxldGUgd2l0aCBhbGwgaXQncyBkb2N1bWVudGF0aW9uIGFuZCBhc3NvY2lhdGVkCisgICAgICAgICAgZmlsZXMuIFlvdSBtdXN0IHBhc3MgaXQgb24gZXhhY3RseSBpbiB0aGUgc2FtZSBmb3JtIGFzIHdlIHJlbGVhc2UKKyAgICAgICAgICBpdCwgb3Igbm90IHBhc3MgaXQgb24gYXQgYWxsLAorCisgICAgICAzLiAgVmVuZG9ycyBtYXkgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgZnJlZSBvZiBjaGFyZ2UgYnkgZWxlY3Ryb25pYworICAgICAgICAgIG9yIG90aGVyIG1lYW5zIGZvciB0aGUgcHVycG9zZSBvZiB0ZWNobmljYWwgc3VwcG9ydCwgYnV0IG1heSBub3QKKyAgICAgICAgICBpbmNsdWRlIHRoZSBTb2Z0d2FyZSBpbiB0aGVpciBwcm9kdWN0cyB3aXRob3V0IG91ciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1lPVSBNQVkgTk9UCisKKyAgICAgIDEuICBVc2UgdGhlIFNvZnR3YXJlIGluIGFueSB3YXkgZXhjZXB0IGFzIHByb3ZpZGVkIGluIHRoaXMgYWdyZWVtZW50LAorCisgICAgICAyLiAgTW9kaWZ5LCBhbHRlciwgY29weSwgdHJhbnNmZXIsIG9yIHJlcHJvZHVjZSB0aGUgU29mdHdhcmUgaW4gYW55CisgICAgICAgICAgd2F5LCBleGNlcHQgYXMgZXhwcmVzc2x5IGFsbG93ZWQgaW4gdGhpcyBhZ3JlZW1lbnQsCisKKyAgICAgIDMuICBDaGFyZ2UgYW55IGtpbmQgb2YgZmVlIGZvciBkaXN0cmlidXRpbmcgdGhlIFNvZnR3YXJlIHdpdGhvdXQgb3VyCisgICAgICAgICAgd3JpdHRlbiBwZXJtaXNzaW9uLAorCisgICAgICA0LiAgVXNlIHRoZSBTb2Z0d2FyZSBmb3IgY29tbWVyY2lhbCBwdXJwb3NlcyB3aXRob3V0IG91ciBwZXJtaXNzaW9uLAorCisKK1Blbmd1enpsZSAxLjAgSVMgREVMSVZFUkVEIE9OIEFOICJBUy1JUyIgQkFTSVMgQU5EIFRIRSBBVVRIT1IgU0hBTEwgTk9UIEJFIExJQUJMRSAKK0ZPUiBBTlkgSU5ESVJFQ1QsIENPTlNFUVVFTlRJQUwsIFNQRUNJQUwsIFBVTklUSVZFLCBPUiBJTkNJREVOVEFMIERBTUFHRVMgT1IKK0RBTUFHRVMgRFVFIFRPIExPU1QgUFJPRklUUywgREFUQSwgT1IgSU5GT1JNQVRJT04gQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUgorQU5ZIFFVQUxJVFkgT1IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9wZXJmb3JjZSBiL2xpY2Vuc2VzL3BlcmZvcmNlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVjYmQ4ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9wZXJmb3JjZQpAQCAtMCwwICsxLDEzIEBACisvKgorICogLytcCisgKiArXCAgIENvcHlyaWdodCAxOTkzLTIwMDIgQ2hyaXN0b3BoZXIgU2Vpd2FsZCBhbmQgUGVyZm9yY2UgU29mdHdhcmUsIEluYy4KKyAqIFwrLworICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGphbS4KKyAqCisgKiBMaWNlbnNlIGlzIGhlcmVieSBncmFudGVkIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGFuZCBkaXN0cmlidXRlIGl0CisgKiBmcmVlbHksIGFzIGxvbmcgYXMgdGhpcyBjb3B5cmlnaHQgbm90aWNlIGlzIHJldGFpbmVkIGFuZCBtb2RpZmljYXRpb25zCisgKiBhcmUgY2xlYXJseSBtYXJrZWQuCisgKgorICogQUxMIFdBUlJBTlRJRVMgQVJFIEhFUkVCWSBESVNDTEFJTUVELgorICovCmRpZmYgLS1naXQgYS9saWNlbnNlcy9wZXRyaWZ5IGIvbGljZW5zZXMvcGV0cmlmeQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTllN2ZlCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvcGV0cmlmeQpAQCAtMCwwICsxLDIxIEBACitDb3B5cmlnaHQgKGMpIDE5OTkgVGhlIFVuaXZlcnNpdGF0IFBvbGl0ZWNuaWNhIGRlIENhdGFsdW55YS4gQWxsCityaWdodHMgcmVzZXJ2ZWQuIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIHdpdGhvdXQgd3JpdHRlbgorYWdyZWVtZW50IGFuZCB3aXRob3V0IGxpY2Vuc2Ugb3Igcm95YWx0eSBmZWVzLCB0byB1c2UsIGNvcHksIG1vZGlmeSwKK2FuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSwKK3Byb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcgdHdvCitwYXJhZ3JhcGhzIGFwcGVhciBpbiBhbGwgY29waWVzIG9mIHRoaXMgc29mdHdhcmUuCisKKworSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFVOSVZFUlNJVEFUIFBPTElURUNOSUNBIERFIENBVEFMVU5ZQSBCRSBMSUFCTEUKK1RPIEFOWSBQQVJUWSBGT1IgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUgQU5EIElUUworRE9DVU1FTlRBVElPTiwgRVZFTiBJRiBUSEUgVU5JVkVSU0lUQVQgUE9MSVRFQ05JQ0EgREUgQ0FUQUxVTllBIEhBUworQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitUSEUgVU5JVkVSU0lUQVQgUE9MSVRFQ05JQ0EgREUgQ0FUQUxVTllBIFNQRUNJRklDQUxMWSBESVNDTEFJTVMgQU5ZCitXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gVEhFIFNPRlRXQVJFCitQUk9WSURFRCBIRVJFVU5ERVIgSVMgT04gQU4gIkFTIElTIiBCQVNJUywgQU5EIFRIRSBVTklWRVJTSVRBVAorUE9MSVRFQ05JQ0EgREUgQ0FUQUxVTllBIEhBUyBOTyBPQkxJR0FUSU9OIFRPIFBST1ZJREUgTUFJTlRFTkFOQ0UsCitTVVBQT1JULCBVUERBVEVTLCBFTkhBTkNFTUVOVFMsIE9SIE1PRElGSUNBVElPTlMuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9waGFzZXIgYi9saWNlbnNlcy9waGFzZXIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAzYTU3YQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL3BoYXNlcgpAQCAtMCwwICsxLDI4MCBAQAorU29mdHdhcmU6IFBIQVNFUgorVmVyc2lvbjogMS4zCisKK1RoaXMgRW5kIFVzZXIgTGljZW5jZSBBZ3JlZW1lbnQgaXMgYSBsZWdhbCBhZ3JlZW1lbnQgYmV0d2VlbiB5b3UgdGhlCisiTGljZW5zZWUiIChpbiB5b3VyIGNhcGFjaXR5IGFzIGFuIGluZGl2aWR1YWwgYW5kIGFzIGFuIGFnZW50IGZvciB5b3VyCitpbnN0aXR1dGlvbiBvciBvdGhlciBlbnRpdHkpIAorYW5kCitDYW1icmlkZ2UgVW5pdmVyc2l0eSBUZWNobmljYWwgU2VydmljZXMgTGltaXRlZCAoIkNVVFMiKSB3aG9zZSByZWdpc3RlcmVkCitvZmZpY2UgaXMgYXQgMTYgTWlsbCBMYW5lLCBDYW1icmlkZ2UsIENCMiAxU0IgVUsuCisKK0NVVFMgaXMgYSBjb21wYW55IHdob2xseSBvd25lZCBieSB0aGUgQ2hhbmNlbGxvciwgTWFzdGVycyBhbmQgU2Nob2xhcnMgb2YgdGhlCitVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSB3aGljaCBob2xkcyB0aXRsZSBpbiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzCitpbmNsdWRpbmcgaW4gdGhlIFNvZnR3YXJlIGFuZCBjYXJyaWVzIG9uIHRyYWRpbmcsIGJ1c2luZXNzIGFuZCB0ZWNobm9sb2d5Cit0cmFuc2ZlciB0cmFuc2FjdGlvbnMgb24gYmVoYWxmIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbWJyaWRnZS4KKworQ1VUUyBpcyB0aGUgZW50aXJlIGxlZ2FsIGFuZCBiZW5lZmljaWFsIG93bmVyIGFuZCBsaWNlbnNvciBvZiB0aGUgU29mdHdhcmUgYW5kCitkZXNpcmVzIHRvIGdyYW50IG9uIHRoZSBTb2Z0d2FyZSBub24tZXhjbHVzaXZlLCByZXN0cmljdGVkLXVzZSBsaWNlbmNlcyBmb3IKK2luLWhvdXNlIHVzZSB0byBhcHByb3ByaWF0ZSBhY2FkZW1pYyBhbmQgbm9uLWNvbW1lcmNpYWwgdGhpcmQgcGFydGllcy4gIAorCitEb3dubG9hZGluZyB0aGUgU29mdHdhcmUgZnJvbSBpdHMgaW50ZXJuZXQgcHVibGljYXRpb24gc2l0ZSAocmVzdHJpY3RlZCBhY2Nlc3MKK3ZpYSB1c2VyIElEIGFuZCBwYXNzd29yZCkgYXQKK2h0dHA6Ly93d3ctc3RydWN0bWVkLmNpbXIuY2FtLmFjLnVrL3BoYXNlci9kb3dubG9hZC5odG1sLCBpbnN0YWxsaW5nLCBvcgordXNpbmcgb2YgdGhlIFNvZnR3YXJlIGJ5IHlvdSBpbmRpY2F0ZXMgeW91ciBhZ3JlZW1lbnQgdG8gYmUgYm91bmQgYnkgdGhlIHRlcm1zCithbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudC4gIElmIHlvdSBkbyBub3QgYWdyZWUgdG8gdGhlc2UgdGVybXMgYW5kCitjb25kaXRpb25zLCBkbyBub3QgZG93bmxvYWQsIGluc3RhbGwgb3IgdXNlIHRoZSBTb2Z0d2FyZS4KKworQUdSRUVEIFRFUk1TCisKKzEuIERFRklOSVRJT05TCisKKzEuMSBJbiB0aGlzIEFncmVlbWVudCB0aGUgZm9sbG93aW5nIHdvcmRzIGFuZCBwaHJhc2VzIHNoYWxsLCB1bmxlc3MgdGhlCitjb250ZXh0IG90aGVyd2lzZSByZXF1aXJlcywgaGF2ZSB0aGUgZm9sbG93aW5nIG1lYW5pbmdzOgorCitDb21tZW5jZW1lbnQgRGF0ZSBtZWFucyB0aGUgaW5pdGlhbCBkYXRlIG9mIGRvd25sb2FkIG9mIHRoZSBTb2Z0d2FyZSBmcm9tIGl0cworaW50ZXJuZXQgcHVibGljYXRpb24gc2l0ZSBieSB0aGUgTGljZW5zZWU7IAorCitEZXJpdmF0aXZlcyBtZWFucyBjb21wdXRlciBwcm9ncmFtcyBpbiBtYWNoaW5lIHJlYWRhYmxlIG9iamVjdCBjb2RlIG9yIHNvdXJjZQorY29kZSBmb3JtIGRldmVsb3BlZCBvciBvdGhlcndpc2UgYWNxdWlyZWQgYnkgdGhlIExpY2Vuc2VlIHdoaWNoIGFyZSBhCittb2RpZmljYXRpb24gb2YsIGVuaGFuY2VtZW50IHRvLCBkZXJpdmVkIGZyb20gb3IgYmFzZWQgdXBvbiB0aGUgU29mdHdhcmU7CisKK0ludGVsbGVjdHVhbCBQcm9wZXJ0eSBSaWdodHMgbWVhbnMgYWxsIHBhdGVudHMsIGNvcHlyaWdodHMsIGRlc2lnbiByaWdodHMsCit0cmFkZSBtYXJrcywgc2VydmljZSBtYXJrcywgdHJhZGUgc2VjcmV0cywga25vdy1ob3csIGRhdGFiYXNlIHJpZ2h0cyBhbmQgb3RoZXIKK3JpZ2h0cyBpbiB0aGUgbmF0dXJlIG9mIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKHdoZXRoZXIgcmVnaXN0ZXJlZCBvcgordW5yZWdpc3RlcmVkKSBhbmQgYWxsIGFwcGxpY2F0aW9ucyBmb3IgdGhlIHNhbWUsIGFueXdoZXJlIGluIHRoZSB3b3JsZDsKKworUGFydGllcyBtZWFucyBDVVRTIGFuZCB0aGUgTGljZW5zZWUgYW5kICJQYXJ0eSIgc2hhbGwgbWVhbiBlaXRoZXIgb2YgdGhlbTsKKworU29mdHdhcmUgbWVhbnMgdGhlIGNvbXB1dGVyIHByb2dyYW0gYW5kIHZlcnNpb24gbGlzdGVkIGF0IHRoZSBoZWFkIG9mIHRoaXMKK0FncmVlbWVudC4KKworMi4gR1JBTlQgT0YgTElDRU5DRQorCisyLjEgQ1VUUyBoZXJlYnkgZ3JhbnRzIHRvIHRoZSBMaWNlbnNlZSBhbmQgdGhlIExpY2Vuc2VlIGhlcmVieSBhY2NlcHRzIGEKK25vbi1leGNsdXNpdmUsIG5vbi10cmFuc2ZlcmFibGUsIHJveWFsdHktZnJlZSBsaWNlbmNlLCBjb21tZW5jaW5nIG9uIHRoZQorQ29tbWVuY2VtZW50IERhdGUgYW5kIGZvciBhIHRlcm0gb2YgZml2ZSB5ZWFycyB0aGVyZWZyb20sIHRvIGRvd25sb2FkLCBpbnN0YWxsCithbmQgdXNlIHRoZSBTb2Z0d2FyZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnM6CisKKyhhKSB0aGUgTGljZW5zZWUgbWF5IHVzZSB0aGUgU29mdHdhcmUgc29sZWx5IGZvciBpdHMgaW50ZXJuYWwgdXNlIGFuZCB0aGUKK0xpY2Vuc2VlIHNoYWxsIG5vdCBzZWxsLCBnaXZlLCBkaXNjbG9zZSwgbGVuZCwgdHJhbnNmZXIsIHN1YmxpY2Vuc2Ugb3IKK290aGVyd2lzZSBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSB0byBhbnkgdGhpcmQgcGFydHksIG9yIGFsbG93IHRoZSBTb2Z0d2FyZSB0bworYmUgYWNjZXNzZWQgb3ZlciB0aGUgaW50ZXJuZXQgb3IgaW4gYW55IG90aGVyIG1hbm5lciB0aGF0IHdvdWxkIGFsbG93IGFjY2VzcwordG8gdGhlIFNvZnR3YXJlIGJ5IGFueW9uZSBvdGhlciB0aGFuIHRoZSBMaWNlbnNlZSdzIGVtcGxveWVlcyAoYW5kIGNvbnN1bHRhbnRzCithbmQgY29udHJhY3RvcnMgcHJvdmlkZWQgc3VjaCB1c2UgaXMgc29sZWx5IGZvciB0aGUgTGljZW5zZWUncyBpbnRlcm5hbCB1c2UKK2FuZCBzdWJqZWN0IHRvIHRoZSBwcm92aXNpb25zIG9mIHRoaXMgQWdyZWVtZW50KTsgCisKKyhiKSB0aGUgTGljZW5zZWUgbWF5IGNyZWF0ZSBEZXJpdmF0aXZlcyBzb2xlbHkgZm9yIGl0cyBvd24gaW50ZXJuYWwgdXNlIGJ1dAorc2hhbGwgbm90IGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIG9yIGFueSBEZXJpdmF0aXZlcyBpbiB3aG9sZSBvciBpbiBwYXJ0IHRvCithbnkgdGhpcmQgcGFydHk7IAorCisoYykgdGhlIFNvZnR3YXJlIG1heSBiZSBpbnN0YWxsZWQgYW5kIHVzZWQgb25seSBvbiBjb21wdXRlcnMgb3duZWQgb3IgbGVhc2VkCitieSB0aGUgTGljZW5zZWU7CisKKyhkKSB0aGUgTGljZW5zZWUgbWF5IGNvcHkgdGhlIFNvZnR3YXJlIHNvbGVseSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0bworZXhlcmNpc2UgdGhpcyBMaWNlbmNlLCBhbmQgZm9yIGJhY2t1cCwgZGlzYXN0ZXIgcmVjb3ZlcnkgYW5kIGFyY2hpdmFsCitwdXJwb3NlcywgcHJvdmlkZWQgdGhhdCB0aGUgTGljZW5zZWUgc2hhbGwgcmV0YWluIG9uIGFsbCBjb3BpZXMgb2YgdGhlCitTb2Z0d2FyZSB0aGUgZm9sbG93aW5nIGNvcHlyaWdodCBub3RpY2U6IMKpIDIwMDAtMjAwNS4gQ2FtYnJpZGdlIFVuaXZlcnNpdHkKK1RlY2huaWNhbCBTZXJ2aWNlcyBMaW1pdGVkLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworMy4gSU5URUxMRUNUVUFMIFBST1BFUlRZIFJJR0hUUworCiszLjEgVGhlIExpY2Vuc2VlIGFja25vd2xlZGdlcyB0aGF0IGFsbCBJbnRlbGxlY3R1YWwgUHJvcGVydHkgUmlnaHRzIGluIHRoZQorU29mdHdhcmUgYW5kIGFueSBjb3BpZXMgdGhlcmVvZiBiZWxvbmcgYW5kIHNoYWxsIGJlbG9uZyB0byBDVVRTIGFuZCB0aGUKK0xpY2Vuc2VlIHNoYWxsIGhhdmUgbm8gcmlnaHRzIGluIG9yIHRvIHRoZSBTb2Z0d2FyZSBvdGhlciB0aGFuIHRoZSByaWdodCB0bwordXNlIGl0IGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhlIExpY2VuY2UgaW4gdGhpcyBBZ3JlZW1lbnQuCisKKzMuMiBUaXRsZSB0byBhbmQgb3duZXJzaGlwIG9mIGFueSBwb3J0aW9uIG9mIHRoZSBTb2Z0d2FyZSBpbmNvcnBvcmF0ZWQgaW50bworRGVyaXZhdGl2ZXMgc2hhbGwgYXQgYWxsIHRpbWVzIHJlbWFpbiB3aXRoIENVVFMgYW5kIHRoZSBMaWNlbnNlZSBzaGFsbCBub3QKK2hhdmUgYW55IHRpdGxlIG9yIG93bmVyc2hpcCBpbnRlcmVzdCB0aGVyZWluLgorCiszLjMgVGl0bGUgdG8gYW5kIG93bmVyc2hpcCBvZiBhbnkgcG9ydGlvbiBvZiBEZXJpdmF0aXZlcyBjcmVhdGVkIGJ5IHRoZQorTGljZW5zZWUgYW5kIG5vdCBvd25lZCBieSBDVVRTIHB1cnN1YW50IHRvIENsYXVzZXMgMy4xIGFuZCAzLjIgYWJvdmUgc2hhbGwgYmUKK2hlbGQgYnkgdGhlIExpY2Vuc2VlLiAgTm90aGluZyBjb250YWluZWQgaW4gdGhpcyBMaWNlbmNlIHNoYWxsIGJlIGNvbnN0cnVlZCB0bworbGltaXQgQ1VUUyByaWdodHMgdG8gbW9kaWZ5IG9yIHRvIGRldmVsb3Agb3RoZXIgZGVyaXZhdGl2ZXMgb2YgdGhlIFNvZnR3YXJlCit3aGljaCBhcmUgc2ltaWxhciB0byBvciBvZmZlciB0aGUgc2FtZSBvciBzaW1pbGFyIGltcHJvdmVtZW50cyBhcyBhbnkKK0Rlcml2YXRpdmVzIGRldmVsb3BlZCBieSB0aGUgTGljZW5zZWUuCisKKzMuNCBFcnJvciBmaXhlcywgYnVnIGZpeGVzLCB0ZWNobmljYWwgc3VnZ2VzdGlvbnMsIGNvbW1lbnRzIGFuZCBzdWdnZXN0ZWQKK2ltcHJvdmVtZW50cyB0byB0aGUgU29mdHdhcmUgYW5kIGl0cyBjb2RlIGFyZSB3ZWxjb21lIGJ5IHRoZSBhdXRob3JzIG9mIHRoZQorU29mdHdhcmUgYW5kIENVVFMsIGFuZCBpbiBhZ3JlZWluZyB0byBwcm92aWRlIHRoZXNlIHRvIHRoZSBhdXRob3JzIG9yIHRvIENVVFMKK3RoZSBMaWNlbnNlZSBoZXJlYnkgYXNzaWducyB0aGUgSW50ZWxsZWN0dWFsIFByb3BlcnR5IFJpZ2h0cyBpbiBlcnJvciBmaXhlcywKK2J1ZyBmaXhlcywgb3IgdGVjaG5pY2FsIGltcHJvdmVtZW50cyB0byBDVVRTIHdoaWNoIGFyZSBjb21tdW5pY2F0ZWQgaW4gYW55CittYW5uZXIgb3IgbWVkaXVtIHRvIHRoZSBhdXRob3JzIG9mIHRoZSBTb2Z0d2FyZSBvciBDVVRTIHdpdGggYSByZXNlcnZhdGlvbiBvZgordXNlIG9mIHRob3NlIGltcHJvdmVtZW50cyBhbmQgc3VnZ2VzdGlvbnMgYnkgdGhlIExpY2Vuc2VlIHN1YmplY3QgdG8gdGhlIHRlcm1zCithbmQgY29uZGl0aW9ucyBvZiB0aGUgTGljZW5jZSBpbiB0aGlzIEFncmVlbWVudC4KKworNC4gTk8gTUFJTlRFTkFOQ0UgT1IgU1VQUE9SVAorCis0LjEgQ1VUUyBpcyB1bmRlciBubyBvYmxpZ2F0aW9uIHdoYXRzb2V2ZXIgdG86CisKKyhhKSBwcm92aWRlIG1haW50ZW5hbmNlIG9yIHN1cHBvcnQgZm9yIHRoZSBTb2Z0d2FyZTsgb3IKKworKGIpIG5vdGlmeSB0aGUgTGljZW5zZWUgb2YgZXJyb3IgZml4ZXMsIGJ1ZyBmaXhlcywgcGF0Y2hlcywgb3IgdXBncmFkZXMgdG8KK3RoZSBmZWF0dXJlcywgZnVuY3Rpb25hbGl0eSBvciBwZXJmb3JtYW5jZSBvZiB0aGUgU29mdHdhcmUgKCJFbmhhbmNlbWVudHMiKQorKGlmIGFueSksIHdoZXRoZXIgZGV2ZWxvcGVkIGJ5IENVVFMgb3IgdGhpcmQgcGFydGllcy4gIElmLCBpbiBpdHMgc29sZQorZGlzY3JldGlvbiwgQ1VUUyBtYWtlcyBhbiBFbmhhbmNlbWVudCBhdmFpbGFibGUgdG8gdGhlIExpY2Vuc2VlIGFuZCBDVVRTIGRvZXMKK25vdCBzZXBhcmF0ZWx5IGVudGVyIGludG8gYSB3cml0dGVuIGxpY2VuY2UgYWdyZWVtZW50IHdpdGggdGhlIExpY2Vuc2VlCityZWxhdGluZyB0byBzdWNoIGJ1ZyBmaXgsIHBhdGNoIG9yIHVwZ3JhZGUsIHRoZW4gaXQgc2hhbGwgYmUgZGVlbWVkCitpbmNvcnBvcmF0ZWQgaW50byB0aGUgU29mdHdhcmUgYW5kIHN1YmplY3QgdG8gdGhpcyBBZ3JlZW1lbnQuCisKKzUuIERJU0NMQUlNRVIgT0YgV0FSUkFOVElFUworCis1LjEgQ1VUUyB3YXJyYW50cyB0aGF0IHRoZSBTb2Z0d2FyZSB3aWxsIGNvbmZvcm0gc3Vic3RhbnRpYWxseSB3aXRoIGl0cworZnVuY3Rpb25hbCBzcGVjaWZpY2F0aW9ucy4gIE90aGVyd2lzZSB0aGUgU29mdHdhcmUgaXMgc3VwcGxpZWQgImFzIGlzIiB3aXRob3V0Cit3YXJyYW50eSBvZiBhbnkga2luZC4gIENVVFMsIGl0cyBsaWNlbnNvcnMgYW5kIGl0cyBlbXBsb3llZXM6CisKKyhhKSBkaXNjbGFpbSBhbnkgd2FycmFudGllcywgZXhwcmVzcyBvciBpbXBsaWVkLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvCithbnkgaW1wbGllZCB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSwgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UsCit0aXRsZSBvciBub24taW5mcmluZ2VtZW50IG9mIHRoaXJkIHBhcnR5IHJpZ2h0czsKKworKGIpIGRvIG5vdCBhc3N1bWUgYW55IGxlZ2FsIGxpYWJpbGl0eSBvciByZXNwb25zaWJpbGl0eSBmb3IgdGhlIGFjY3VyYWN5LAorY29tcGxldGVuZXNzLCBvciB1c2VmdWxuZXNzIG9mIHRoZSBTb2Z0d2FyZTsKKworKGMpIGRvIG5vdCByZXByZXNlbnQgdGhhdCB1c2Ugb2YgdGhlIFNvZnR3YXJlIHdpbGwgbm90IGluZnJpbmdlIHByaXZhdGVseQorb3duZWQgcmlnaHRzOworCisoZCkgZG8gbm90IHdhcnJhbnQgdGhhdCB0aGUgU29mdHdhcmUgd2lsbCBmdW5jdGlvbiB1bmludGVycnVwdGVkLCB0aGF0IGl0IGlzCitlcnJvci1mcmVlIG9yIHRoYXQgYW55IGVycm9ycyB3aWxsIGJlIGNvcnJlY3RlZC4KKworNi4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkKKworNi4xIFRoZSBTb2Z0d2FyZSBpcyBwcm92aWRlZCBmb3IgYWNhZGVtaWMgbm9uLWNvbW1lcmNpYWwgcHVycG9zZXMgb25seS4KK1RoZXJlZm9yZSwgaW4gbm8gZXZlbnQgd2lsbCBDVVRTIG9yIGl0cyBsaWNlbnNvcnMgb3IgaXRzIGVtcGxveWVlcyBiZSBsaWFibGUKK3RvIHRoZSBMaWNlbnNlZSBmb3IgYW55IGluZGlyZWN0LCBpbmNpZGVudGFsLCBjb25zZXF1ZW50aWFsLCBzcGVjaWFsIG9yCitwdW5pdGl2ZSBkYW1hZ2VzIG9mIGFueSBraW5kIG9yIG5hdHVyZSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBsb3NzIG9mCitwcm9maXRzIG9yIGxvc3Mgb2YgZGF0YSwgZm9yIGFueSByZWFzb24gd2hhdHNvZXZlciwgd2hldGhlciBzdWNoIGxpYWJpbGl0eSBpcworYXNzZXJ0ZWQgb24gdGhlIGJhc2lzIG9mIGNvbnRyYWN0LCB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSBvciBzdHJpY3QKK2xpYWJpbGl0eSksIG9yIG90aGVyd2lzZSwgZXZlbiBpZiBDVVRTIGhhcyBiZWVuIHdhcm5lZCBvZiB0aGUgcG9zc2liaWxpdHkgb2YKK3N1Y2ggbG9zcyBvciBkYW1hZ2VzLgorCis2LjIgVGhlIGxpbWl0YXRpb25zIGFuZCBleGNsdXNpb25zIGluIHRoaXMgQWdyZWVtZW50IHNoYWxsIG5vdCBhcHBseSBpbgorcmVzcGVjdCBvZiBjbGFpbXMgZm9yIHBlcnNvbmFsIGluanVyeSBvciBkZWF0aCBjYXVzZWQgYnkgdGhlIG5lZ2xpZ2VuY2Ugb2YKK0NVVFMsIGl0cyBsaWNlbnNvcnMgb3IgaXRzIGVtcGxveWVlcyBvciBpbiByZXNwZWN0IG9mIGZyYXVkIG9yIGZyYXVkdWxlbnQKK21pc3JlcHJlc2VudGF0aW9uLiAgCisKKzcuIElOREVNTklUWQorCis3LjEgVGhlIExpY2Vuc2VlIHNoYWxsIGluZGVtbmlmeSBDVVRTLCB0aGUgU29mdHdhcmUgYXV0aG9ycywgdGhlIFNvZnR3YXJlCitzcG9uc29ycywgYW5kIHRoZWlyIGFnZW50cywgb2ZmaWNlcnMsIGFuZCBlbXBsb3llZXMsIGFnYWluc3QgYW55IGFuZCBhbGwKK2NsYWltcywgc3VpdHMsIGxvc3NlcywgZGFtYWdlcywgY29zdHMsIGZlZXMsIGFuZCBleHBlbnNlcyBhcmlzaW5nIG91dCBvZiBvciBpbgorY29ubmVjdGlvbiB3aXRoIGFueSBjbGFpbSBvciB0aHJlYXRlbmVkIGNsYWltIGJ5IGFueSB0aGlyZCBwYXJ0eSByZWxhdGluZyB0bworb3IgYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhlIFNvZnR3YXJlIGJ5IHRoZSBMaWNlbnNlZS4gIFRoZSBMaWNlbnNlZSBzaGFsbAorcGF5IGFsbCBjb3N0cyBpbmN1cnJlZCBieSBDVVRTIGluIGVuZm9yY2luZyB0aGlzIHByb3Zpc2lvbi4KKworOC4gVEVSTSBBTkQgVEVSTUlOQVRJT04KKworOC4xIFRoaXMgQWdyZWVtZW50IGFuZCB0aGUgTGljZW5jZSBncmFudGVkIGhlcmVpbiBzaGFsbCBjb21lIGludG8gZWZmZWN0CitvbiB0aGUgQ29tbWVuY2VtZW50IERhdGUgYW5kIHdpbGwgY29udGludWUgZm9yIHRoZSBkdXJhdGlvbiBvZiBmaXZlIHllYXJzCit0aGVyZWZyb20gdW5sZXNzIHRlcm1pbmF0ZWQgYnkgQ1VUUyBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQuICBJZiB0aGUKK0xpY2Vuc2VlIGJyZWFjaGVzIGFueSB0ZXJtIG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgZmFpbHMgdG8gY3VyZSBzdWNoIGJyZWFjaAord2l0aGluIHRoaXJ0eSAoMzApIGRheXMgb2YgdGhlIGRhdGUgb2Ygd3JpdHRlbiBub3RpY2UsIHRoaXMgQWdyZWVtZW50IHNoYWxsCitpbW1lZGlhdGVseSB0ZXJtaW5hdGUuICBVcG9uIHN1Y2ggdGVybWluYXRpb24gdGhlIExpY2Vuc2VlIHNoYWxsIGltbWVkaWF0ZWx5CitjZWFzZSB1c2luZyB0aGUgU29mdHdhcmUsIHJldHVybiB0byBDVVRTIG9yIGRlc3Ryb3kgYWxsIGNvcGllcyBvZiB0aGUKK1NvZnR3YXJlLCBhbmQgcHJvdmlkZSBDVVRTIHdpdGggd3JpdHRlbiBjZXJ0aWZpY2F0aW9uIG9mIHRoZSBMaWNlbnNlZSdzCitjb21wbGlhbmNlIHdpdGggdGhlIGZvcmVnb2luZy4gIFRlcm1pbmF0aW9uIHNoYWxsIG5vdCByZWxpZXZlIHRoZSBMaWNlbnNlZQorZnJvbSBpdHMgb2JsaWdhdGlvbnMgYXJpc2luZyBwcmlvciB0byBzdWNoIHRlcm1pbmF0aW9uLiAgTm90d2l0aHN0YW5kaW5nIGFueQorcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IHRvIHRoZSBjb250cmFyeSwgU2VjdGlvbnMgMywgNSwgNiwgNywgOCwgOSwgMTAsCisxMywgMTQgYW5kIDE4IHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQuICAKKworOS4gQ09ORklERU5USUFMSVRZCisKKzkuMSBUaGUgTGljZW5zZWUgYWdyZWVzIGFuZCB1bmRlcnRha2VzIHRoYXQgZHVyaW5nIHRoZSB0ZXJtIG9mIHRoZSBMaWNlbmNlIGluCit0aGlzIEFncmVlbWVudCBhbmQgdGhlcmVhZnRlciBpdCB3aWxsIGtlZXAgY29uZmlkZW50aWFsIGFsbCwgYW5kIHdpbGwgbm90IHVzZQorZm9yIGl0cyBvd24gcHVycG9zZXMgbm9yIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDVVRTIGRpc2Nsb3NlIHRvCithbnkgdGhpcmQgcGFydHkgYW55IGluZm9ybWF0aW9uIG9mIGEgY29uZmlkZW50aWFsIG5hdHVyZSAoaW5jbHVkaW5nIHRyYWRlCitzZWNyZXRzIGFuZCBpbmZvcm1hdGlvbiBvZiBjb21tZXJjaWFsIHZhbHVlKSB3aGljaCBtYXkgYmVjb21lIGtub3duIHRvIHRoZQorTGljZW5zZWUgYW5kIHdoaWNoIHJlbGF0ZXMgdG8gQ1VUUyB1bmxlc3Mgc3VjaCBpbmZvcm1hdGlvbiBpcyBwdWJsaWMga25vd2xlZGdlCitvciBhbHJlYWR5IGtub3duIHRvIHRoZSBMaWNlbnNlZSBhdCB0aGUgdGltZSBvZiBkaXNjbG9zdXJlIG9yIHN1YnNlcXVlbnRseQorYmVjb21lcyBwdWJsaWMga25vd2xlZGdlIG90aGVyIGJ5IGJyZWFjaCBvZiB0aGUgTGljZW5jZSBpbiB0aGlzIEFncmVlbWVudCBvcgorc3Vic2VxdWVudGx5IGNvbWVzIGxhd2Z1bGx5IGludG8gdGhlIHBvc3Nlc3Npb24gb2YgdGhlIExpY2Vuc2VlIGZyb20gYSB0aGlyZAorcGFydHkuCisKKzEwLiBOTyBTVUJMSUNFTlNJTkcgQU5EIE5PIEFTU0lHTk1FTlQgCisKKzEwLjEgVGhlIExpY2Vuc2VlIHNoYWxsIGhhdmUgbm8gcmlnaHQgdG8gc3ViLWxpY2Vuc2Ugb3IgdG8gYXNzaWduLAordHJhbnNmZXIsIGNoYXJnZSBvciBkZWFsIGluIGFueSBvdGhlciBtYW5uZXIgdGhlIGJlbmVmaXQgb3IgYnVyZGVuIG9mIHRoZQorTGljZW5jZSBpbiB0aGlzIEFncmVlbWVudCBpbiB3aG9sZSBvciBpbiBwYXJ0IG9yIHRvIGFsbG93IHRoZSBTb2Z0d2FyZSB0bworYmVjb21lIHRoZSBzdWJqZWN0IG9mIGFueSBjaGFyZ2UsIGxpZW4gb3IgZW5jdW1icmFuY2Ugd2l0aG91dCB0aGUgcHJpb3IKK3dyaXR0ZW4gY29uc2VudCBvZiBDVVRTIHN1Y2ggY29uc2VudCBtYXkgYmUgd2l0aGhlbGQgd2l0aG91dCBnaXZpbmcgYW55CityZWFzb25zLgorCisxMS4gV0FJVkVSCisKKzExLjEgTm8gZm9yYmVhcmFuY2Ugb3IgZGVsYXkgYnkgZWl0aGVyIHBhcnR5IGluIGVuZm9yY2luZyBpdHMgcmlnaHRzIHdpbGwKK3ByZWp1ZGljZSBvciByZXN0cmljdCB0aGUgcmlnaHRzIG9mIHRoYXQgcGFydHksIGFuZCBubyB3YWl2ZXIgb2YgYW55IHN1Y2gKK3JpZ2h0cyBvciBvZiBhbnkgYnJlYWNoIG9mIGFueSBjb250cmFjdHVhbCB0ZXJtcyB3aWxsIGJlIGRlZW1lZCB0byBiZSBhIHdhaXZlcgorb2YgYW55IG90aGVyIHJpZ2h0IG9yIG9mIGFueSBsYXRlciBicmVhY2guCisKKzEyLiBTRVZFUkFCSUxJVFkKKworMTIuMSBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoZSBMaWNlbmNlIGluIHRoaXMgQWdyZWVtZW50IGlzIGp1ZGdlZCB0byBiZQoraWxsZWdhbCBvciB1bmVuZm9yY2VhYmxlLCB0aGUgY29udGludWF0aW9uIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdCBvZiB0aGUKK3JlbWFpbmRlciBvZiB0aGUgcHJvdmlzaW9ucyB3aWxsIG5vdCBiZSBwcmVqdWRpY2VkLgorCisxMy4gTk8gQUdFTkNZIE9SIFBBUlRORVJTSElQCisKKzEzLjEgTm90aGluZyBjb250YWluZWQgb3IgaW1wbGllZCBpbiB0aGlzIEFncmVlbWVudCBjb25zdGl0dXRlcyBhIFBhcnR5IHRoZQorcGFydG5lciwgYWdlbnQsIG9yIGxlZ2FsIHJlcHJlc2VudGF0aXZlIG9mIGFub3RoZXIgcGFydHkgb3Igb2YgdGhlIG90aGVyIFBhcnR5Citmb3IgYW55IHB1cnBvc2Ugb3IgY3JlYXRlcyBhbnkgcGFydG5lcnNoaXAsIGFnZW5jeSBvciB0cnVzdCwgYW5kIG5vIFBhcnR5IGhhcworYW55IGF1dGhvcml0eSB0byBiaW5kIHRoZSBvdGhlciBQYXJ0eSBpbiBhbnkgd2F5LgorCisxNC4gVEhFIENPTlRSQUNUUyAoUklHSFRTIE9GIFRISVJEIFBBUlRJRVMpIEFDVCAxOTk5CisKKzE0LjEgVGhlIENvbnRyYWN0cyAoUmlnaHRzIG9mIFRoaXJkIFBhcnRpZXMpIEFjdCAxOTk5IHNoYWxsIG5vdCBhcHBseSB0bwordGhpcyBBZ3JlZW1lbnQgYW5kIG5vdGhpbmcgaW4gdGhpcyBBZ3JlZW1lbnQgc2hhbGwgY29uZmVyIG9yIHB1cnBvcnQgdG8gY29uZmVyCitvbiBvciBvcGVyYXRlIHRvIGdpdmUgYW55IHRoaXJkIFBhcnR5IGFueSBiZW5lZml0IG9yIGFueSByaWdodCB0byBlbmZvcmNlIGFueQordGVybSBvZiB0aGlzIEFncmVlbWVudC4KKworMTUuIE5PVElDRVMKKworMTUuMSBBbnkgbm90aWNlIHRvIGJlIGdpdmVuIHVuZGVyIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kCitkZWxpdmVyZWQgYnkgaGFuZCwgcHJlcGFpZCByZWdpc3RlcmVkIHBvc3Qgb3IgZmFjc2ltaWxlIHRvIGEgUGFydHkgYXQgdGhlCithZGRyZXNzIHNldCBvdXQgYXQgdGhlIGhlYWQgb2YgdGhpcyBBZ3JlZW1lbnQgb3IgdG8gc3VjaCBvdGhlciBhZGRyZXNzIG9yIGZheAorbnVtYmVyIGFzIGFueSBQYXJ0eSBtYXkgc3BlY2lmeSBpbiB3cml0aW5nIHRvIGFub3RoZXIuICBOb3RpY2VzIGFyZSBkZWVtZWQgdG8KK2hhdmUgYmVlbiBnaXZlbjoKKworKGEpIGlmIGRlbGl2ZXJlZCBieSBoYW5kLCBhdCB0aGUgdGltZSBvZiBkZWxpdmVyeSB1bmxlc3MgZGVsaXZlcmVkIGFmdGVyIDVwbQoraW4gdGhlIHBsYWNlIG9mIHJlY2VpcHQgb3Igb24gYSBub24tYnVzaW5lc3MgZGF5LCBpbiB3aGljaCBjYXNlIHRoZSBub3RpY2UgaXMKK2RlZW1lZCB0byBoYXZlIGJlZW4gZ2l2ZW4gYXQgOWFtIHRoZSBuZXh0IGJ1c2luZXNzIGRheTsKKworKGIpIGlmIHNlbnQgYnkgcmVnaXN0ZXJlZCBwb3N0IGZyb20gd2l0aGluIHRoZSBVbml0ZWQgS2luZ2RvbSwgdGhyZWUKK2J1c2luZXNzIGRheXMgYWZ0ZXIgcG9zdGluZyAob3Igc2V2ZW4gYnVzaW5lc3MgZGF5cyBpZiBwb3N0ZWQgZnJvbSBvdXRzaWRlIHRoZQorVW5pdGVkIEtpbmdkb20pOyBhbmQKKworKGMpIGlmIHNlbnQgYnkgZmFjc2ltaWxlLCBhdCB0aGUgdGltZSB0aGUgZmFjc2ltaWxlIGlzIHJlY2VpdmVkIHNob3duIGluCit0aGUgdHJhbnNtaXNzaW9uIHJlcG9ydCBhcyB0aGUgdGltZSB0aGF0IHRoZSB3aG9sZSBmYWNzaW1pbGUgd2FzIHNlbnQgdW5sZXNzCityZWNlaXZlZCBhZnRlciA1cG0gaW4gdGhlIHBsYWNlIG9mIHJlY2VpcHQgb3Igb24gYSBub24tYnVzaW5lc3MgZGF5LCBpbiB3aGljaAorY2FzZSB0aGUgbm90aWNlIGlzIGRlZW1lZCB0byBoYXZlIGJlZW4gZ2l2ZW4gYXQgOWFtIHRoZSBuZXh0IGJ1c2luZXNzIGRheS4KK0FueSBub3RpY2Ugc2VydmVkIGJ5IGZhY3NpbWlsZSB0cmFuc21pc3Npb24gc2hhbGwgYmUgY29uZmlybWVkIGJ5IHBvc3QuCisKKzE2LiBFTlRJUkUgQUdSRUVNRU5UCisKKzE2LjEgVGhpcyBBZ3JlZW1lbnQgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYW5kIHVuZGVyc3RhbmRpbmcgb2YgdGhlCitQYXJ0aWVzIGFuZCBzdXBlcnNlZGVzIGFsbCBuZWdvdGlhdGlvbnMsIHVuZGVyc3RhbmRpbmdzIG9yIHByZXZpb3VzIGFncmVlbWVudAorYmV0d2VlbiB0aGUgUGFydGllcyByZWxhdGluZyB0byB0aGUgc3ViamVjdCBtYXR0ZXIgb2YgdGhpcyBBZ3JlZW1lbnQuCisKKzE3LiBHT1ZFUk5JTkcgTEFXCisKKzE3LjEgVGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBkb2N1bWVudHMgdG8gYmUgZW50ZXJlZCBpbnRvIHB1cnN1YW50IHRvIGl0CitzaGFsbCBiZSBnb3Zlcm5lZCBieSBhbmQgY29uc3RydWVkIGluIGFjY29yZGFuY2Ugd2l0aCBFbmdsaXNoIGxhdyBhbmQgZWFjaAorUGFydHkgaXJyZXZvY2FibHkgc3VibWl0cyB0byB0aGUgZXhjbHVzaXZlIGp1cmlzZGljdGlvbiBvZiB0aGUgY291cnRzIG9mCitFbmdsYW5kIG92ZXIgYW55IGNsYWltIG9yIG1hdHRlciBhcmlzaW5nIHVuZGVyIG9yIGluIGNvbm5lY3Rpb24gd2l0aCB0aGlzCitBZ3JlZW1lbnQgYW5kIHRoZSBkb2N1bWVudHMgZW50ZXJlZCBpbnRvIHB1cnN1YW50IHRvIGl0LgorCisxOC4gRVhQT1JUIENPTlRST0wgUkVHVUxBVElPTlMKKworMTguMSAnRXhwb3J0IENvbnRyb2wgUmVndWxhdGlvbnMnIG1lYW5zIGFueSBVbml0ZWQgTmF0aW9ucyB0cmFkZSBzYW5jdGlvbnMKK29yIEVVIG9yIFVLIGxlZ2lzbGF0aW9uIG9yIHJlZ3VsYXRpb24sIGZyb20gdGltZSB0byB0aW1lIGluIGZvcmNlLCB3aGljaAoraW1wb3NlIGFybXMgZW1iYXJnb2VzIG9yIGNvbnRyb2wgb2YgZXhwb3J0IG9mIGdvb2RzLCB0ZWNobm9sb2d5IG9yIHNvZnR3YXJlLgorCisxOC4yIFRoZSBMaWNlbnNlZSBzaGFsbCBlbnN1cmUgdGhhdCwgaW4gdXNpbmcgdGhlIFNvZnR3YXJlIGl0IHNoYWxsIG5vdCBhbmQKK25vciBzaGFsbCBpdHMgZW1wbG95ZWVzIGJyZWFjaCBvciBjb21wcm9taXNlIGRpcmVjdGx5IG9mIGluZGlyZWN0bHkgY29tcGxpYW5jZQord2l0aCBhbnkgRXhwb3J0IENvbnRyb2wgUmVndWxhdGlvbnMuCisKKworCitJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIG9yIGZlZWRiYWNrIGNvbmNlcm5pbmcgdGhlIFNvZnR3YXJlLCBjb250YWN0CitVbml2ZXJzaXR5IG9mIENhbWJyaWRnZSwgRGVwYXJ0bWVudCBvZiBIYWVtYXRvbG9neSwgQ2FtYnJpZGdlIEluc3RpdHV0ZSBmb3IKK01lZGljYWwgUmVzZWFyY2gsIFdlbGxjb21lIFRydXN0L01SQyBCdWlsZGluZywgQ2FtYnJpZGdlIENCMiAwWFkgVUsuICAKK0F0dG46IFByb2Zlc3NvciBSYW5keSBSZWFkLCBvciB2aWEgZW1haWwgYXQgY2ltci1waGFzZXJAbGlzdHMuY2FtLmFjLnVrCisKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL3BoYXNlci1jb20gYi9saWNlbnNlcy9waGFzZXItY29tCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjMWIzYTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9waGFzZXItY29tCkBAIC0wLDAgKzEsMjkwIEBACitTb2Z0d2FyZTogUEhBU0VSCitWZXJzaW9uOiAxLjMKKworVGhpcyBFbmQgVXNlciBMaWNlbmNlIEFncmVlbWVudCAoIkFncmVlbWVudCIpIGlzIGEgbGVnYWwgYWdyZWVtZW50IGJldHdlZW4KK3lvdXIgY29tcGFueSB0aGUgIkxpY2Vuc2VlIiAKK2FuZAorQ0FNQlJJREdFIFVOSVZFUlNJVFkgVEVDSE5JQ0FMIFNFUlZJQ0VTIExJTUlURUQgKCJDVVRTIikgd2hvc2UgcmVnaXN0ZXJlZAorb2ZmaWNlIGlzIGF0IDE2IE1pbGwgTGFuZSwgQ2FtYnJpZGdlLCBDQjIgMVNCIFVLLgorCitDVVRTIGlzIGEgY29tcGFueSB3aG9sbHkgb3duZWQgYnkgdGhlIENoYW5jZWxsb3IsIE1hc3RlcnMgYW5kIFNjaG9sYXJzIG9mIHRoZQorVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2Ugd2hpY2ggaG9sZHMgdGl0bGUgaW4gaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cworaW5jbHVkaW5nIGluIHRoZSBTb2Z0d2FyZSBhbmQgY2FycmllcyBvbiB0cmFkaW5nLCBidXNpbmVzcyBhbmQgdGVjaG5vbG9neQordHJhbnNmZXIgdHJhbnNhY3Rpb25zIG9uIGJlaGFsZiBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UuCisKK0NVVFMgaXMgdGhlIGVudGlyZSBsZWdhbCBhbmQgYmVuZWZpY2lhbCBvd25lciBhbmQgbGljZW5zb3Igb2YgdGhlIFNvZnR3YXJlIGFuZAoraXMgd2lsbGluZyB0byBsaWNlbnNlIHVzZSBvZiB0aGUgU29mdHdhcmUgYnkgdGhlIExpY2Vuc2VlLiAgQXMgYSBjb25kaXRpb24KK3ByZWNlZGVudCB0byB0aGUgZXhlY3V0aW9uIGFuZCBwZXJmb3JtYW5jZSBvZiB0aGlzIExpY2VuY2UsIHRoZSBMaWNlbnNlZQorKGFuZC9vciBhbnkgb2YgaXRzIEFmZmlsaWF0ZXMsIGlmIGFwcGxpY2FibGUsIHRoZSBMaWNlbnNlZSBhbmQgaXRzIEFmZmlsaWF0ZXMKK2NvbGxlY3RpdmVseSByZWZlcnJlZCB0byBhcyB0aGUgIkxpY2Vuc2VlIiBmb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgQWdyZWVtZW50KQord2lsbCBoYXZlIHBhaWQgdXAgYW5udWFsIGZlZXMgdG8gdGhlIFBIRU5JWCBJbmR1c3RyeSBDb25zb3J0aXVtIGZvciB1c2Ugb2YKK3NvZnR3YXJlLCBpbmNsdWRpbmcgdGhlIFNvZnR3YXJlIHdoaWNoIGlzIHRoZSBzdWJqZWN0IG9mIHRoZSBMaWNlbmNlIGluIHRoaXMKK0FncmVlbWVudCwgd2hpY2ggaGFzIGJlZW4gYXNzZW1ibGVkIGZvciB0aGUgUEhFTklYIEluZHVzdHJ5IENvbnNvcnRpdW0uCisKK0Rvd25sb2FkaW5nIHRoZSBTb2Z0d2FyZSBmcm9tIGl0cyBpbnRlcm5ldCBwdWJsaWNhdGlvbiBzaXRlIChyZXN0cmljdGVkIGFjY2VzcwordmlhIHVzZXIgSUQgYW5kIHBhc3N3b3JkKSBhdAoraHR0cDovL3d3dy1zdHJ1Y3RtZWQuY2ltci5jYW0uYWMudWsvcGhhc2VyL2Rvd25sb2FkLmh0bWwsIGluc3RhbGxpbmcsIG9yIHVzZQorb2YgdGhlIFNvZnR3YXJlIGJ5IHRoZSBMaWNlbnNlZSBpbmRpY2F0ZXMgdGhlIExpY2Vuc2VlJ3MgYWdyZWVtZW50IHRvIGJlIGJvdW5kCitieSB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQuICBJZiB0aGUgTGljZW5zZWUgZG9lcyBub3QgYWdyZWUKK3RvIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zLCB0aGUgTGljZW5zZWUgbWF5IG5vdCBkb3dubG9hZCwgaW5zdGFsbCBvciB1c2UKK3RoZSBTb2Z0d2FyZS4KKworQUdSRUVEIFRFUk1TCisKKzEuIERFRklOSVRJT05TCisKKzEuMSBJbiB0aGlzIEFncmVlbWVudCB0aGUgZm9sbG93aW5nIHdvcmRzIGFuZCBwaHJhc2VzIHNoYWxsLCB1bmxlc3MgdGhlCitjb250ZXh0IG90aGVyd2lzZSByZXF1aXJlcywgaGF2ZSB0aGUgZm9sbG93aW5nIG1lYW5pbmdzOgorCitDb21tZW5jZW1lbnQgRGF0ZSBtZWFucyB0aGUgaW5pdGlhbCBkYXRlIG9mIGRvd25sb2FkIG9mIHRoZSBTb2Z0d2FyZSBmcm9tIGl0cworaW50ZXJuZXQgcHVibGljYXRpb24gc2l0ZSBieSB0aGUgTGljZW5zZWU7IAorCitEZXJpdmF0aXZlcyBtZWFucyBjb21wdXRlciBwcm9ncmFtcyBpbiBtYWNoaW5lIHJlYWRhYmxlIG9iamVjdCBjb2RlIG9yIHNvdXJjZQorY29kZSBmb3JtIGRldmVsb3BlZCBvciBvdGhlcndpc2UgYWNxdWlyZWQgYnkgdGhlIExpY2Vuc2VlIHdoaWNoIGFyZSBhCittb2RpZmljYXRpb24gb2YsIGVuaGFuY2VtZW50IHRvLCBkZXJpdmVkIGZyb20gb3IgYmFzZWQgdXBvbiB0aGUgU29mdHdhcmU7CisKK0ZlZSBtZWFucyB0aGUgYW5udWFsIGxpY2VuY2UgZmVlIHBheWFibGUgYnkgdGhlIExpY2Vuc2VlIHRvIHRoZSBQSEVOSVgKK0luZHVzdHJ5IENvbnNvcnRpdW07CisKK0ludGVsbGVjdHVhbCBQcm9wZXJ0eSBSaWdodHMgbWVhbnMgYWxsIHBhdGVudHMsIGNvcHlyaWdodHMsIGRlc2lnbiByaWdodHMsCit0cmFkZSBtYXJrcywgc2VydmljZSBtYXJrcywgdHJhZGUgc2VjcmV0cywga25vdy1ob3csIGRhdGFiYXNlIHJpZ2h0cyBhbmQgb3RoZXIKK3JpZ2h0cyBpbiB0aGUgbmF0dXJlIG9mIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKHdoZXRoZXIgcmVnaXN0ZXJlZCBvcgordW5yZWdpc3RlcmVkKSBhbmQgYWxsIGFwcGxpY2F0aW9ucyBmb3IgdGhlIHNhbWUsIGFueXdoZXJlIGluIHRoZSB3b3JsZDsKKworUGFydGllcyBtZWFucyBDVVRTIGFuZCB0aGUgTGljZW5zZWUgYW5kICJQYXJ0eSIgc2hhbGwgbWVhbiBlaXRoZXIgb2YgdGhlbTsKKworU29mdHdhcmUgbWVhbnMgdGhlIGNvbXB1dGVyIHByb2dyYW0gYW5kIHZlcnNpb24gbGlzdGVkIGF0IHRoZSBoZWFkIG9mIHRoaXMKK0FncmVlbWVudC4KKworMi4gR1JBTlQgT0YgTElDRU5DRQorCisyLjEgSW4gY29uc2lkZXJhdGlvbiBvZiB0aGUgRmVlLCBDVVRTIGhlcmVieSBncmFudHMgdG8gdGhlIExpY2Vuc2VlIGEKK25vbi1leGNsdXNpdmUsIG5vbi10cmFuc2ZlcmFibGUsIHJveWFsdHktZnJlZSBsaWNlbmNlLCBjb21tZW5jaW5nIG9uIHRoZQorQ29tbWVuY2VtZW50IERhdGUgYW5kIGZvciB0aGUgZHVyYXRpb24gb2YgcGF5bWVudCBvZiB0aGUgRmVlLCB0byBkb3dubG9hZCwKK2luc3RhbGwgYW5kIHVzZSB0aGUgU29mdHdhcmUgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zOgorCisoYSkgdGhlIExpY2Vuc2VlIG1heSB1c2UgdGhlIFNvZnR3YXJlIHNvbGVseSBmb3IgaXRzIGludGVybmFsIHVzZSBhbmQgdGhlCitMaWNlbnNlZSBzaGFsbCBub3Qgc2VsbCwgZ2l2ZSwgZGlzY2xvc2UsIGxlbmQsIHRyYW5zZmVyLCBzdWJsaWNlbnNlIG9yCitvdGhlcndpc2UgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgdG8gYW55IHRoaXJkIHBhcnR5LCBvciBhbGxvdyB0aGUgU29mdHdhcmUgdG8KK2JlIGFjY2Vzc2VkIG92ZXIgdGhlIGludGVybmV0IG9yIGluIGFueSBvdGhlciBtYW5uZXIgdGhhdCB3b3VsZCBhbGxvdyBhY2Nlc3MKK3RvIHRoZSBTb2Z0d2FyZSBieSBhbnlvbmUgb3RoZXIgdGhhbiB0aGUgTGljZW5zZWUncyBlbXBsb3llZXMgKGFuZCBjb25zdWx0YW50cworYW5kIGNvbnRyYWN0b3JzIHByb3ZpZGVkIHN1Y2ggdXNlIGlzIHNvbGVseSBmb3IgdGhlIExpY2Vuc2VlJ3MgaW50ZXJuYWwgdXNlCithbmQgc3ViamVjdCB0byB0aGUgcHJvdmlzaW9ucyBvZiB0aGlzIEFncmVlbWVudCk7IAorCisoYikgdGhlIExpY2Vuc2VlIG1heSBjcmVhdGUgRGVyaXZhdGl2ZXMgc29sZWx5IGZvciBpdHMgb3duIGludGVybmFsIHVzZSBidXQKK3NoYWxsIG5vdCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBvciBhbnkgRGVyaXZhdGl2ZXMgaW4gd2hvbGUgb3IgaW4gcGFydCB0bworYW55IHRoaXJkIHBhcnR5OyAKKworKGMpIHRoZSBTb2Z0d2FyZSBtYXkgYmUgaW5zdGFsbGVkIGFuZCB1c2VkIG9ubHkgb24gY29tcHV0ZXJzIG93bmVkIG9yIGxlYXNlZAorYnkgdGhlIExpY2Vuc2VlOworCisoZCkgdGhlIExpY2Vuc2VlIG1heSBjb3B5IHRoZSBTb2Z0d2FyZSBzb2xlbHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8KK2V4ZXJjaXNlIHRoaXMgTGljZW5jZSwgYW5kIGZvciBiYWNrdXAsIGRpc2FzdGVyIHJlY292ZXJ5IGFuZCBhcmNoaXZhbAorcHVycG9zZXMsIHByb3ZpZGVkIHRoYXQgdGhlIExpY2Vuc2VlIHNoYWxsIHJldGFpbiBvbiBhbGwgY29waWVzIG9mIHRoZQorU29mdHdhcmUgdGhlIGZvbGxvd2luZyBjb3B5cmlnaHQgbm90aWNlOiDCqSAyMDAwLTIwMDUuIENhbWJyaWRnZSBVbml2ZXJzaXR5CitUZWNobmljYWwgU2VydmljZXMgTGltaXRlZC4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKKzMuIElOVEVMTEVDVFVBTCBQUk9QRVJUWSBSSUdIVFMKKworMy4xIFRoZSBMaWNlbnNlZSBhY2tub3dsZWRnZXMgdGhhdCBhbGwgSW50ZWxsZWN0dWFsIFByb3BlcnR5IFJpZ2h0cyBpbiB0aGUKK1NvZnR3YXJlIGJlbG9uZyBhbmQgc2hhbGwgYmVsb25nIHRvIENVVFMgYW5kIHRoZSBMaWNlbnNlZSBzaGFsbCBoYXZlIG5vIHJpZ2h0cworaW4gb3IgdG8gdGhlIFNvZnR3YXJlIG90aGVyIHRoYW4gdGhlIHJpZ2h0IHRvIHVzZSBpdCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlCit0ZXJtcyBvZiB0aGUgTGljZW5jZSBpbiB0aGlzIEFncmVlbWVudC4KKworMy4yIFRpdGxlIHRvIGFuZCBvd25lcnNoaXAgb2YgYW55IHBvcnRpb24gb2YgdGhlIFNvZnR3YXJlIGluY29ycG9yYXRlZCBpbnRvCitEZXJpdmF0aXZlcyBzaGFsbCBhdCBhbGwgdGltZXMgcmVtYWluIHdpdGggQ1VUUyBhbmQgdGhlIExpY2Vuc2VlIHNoYWxsIG5vdAoraGF2ZSBhbnkgdGl0bGUgb3Igb3duZXJzaGlwIGludGVyZXN0IHRoZXJlaW4uCisKKzMuMyBUaXRsZSB0byBhbmQgb3duZXJzaGlwIG9mIGFueSBwb3J0aW9uIG9mIERlcml2YXRpdmVzIGNyZWF0ZWQgYnkgdGhlCitMaWNlbnNlZSBhbmQgbm90IG93bmVkIGJ5IENVVFMgcHVyc3VhbnQgdG8gQ2xhdXNlcyAzLjEgYW5kIDMuMiBhYm92ZSBzaGFsbCBiZQoraGVsZCBieSB0aGUgTGljZW5zZWUuICBOb3RoaW5nIGNvbnRhaW5lZCBpbiB0aGlzIExpY2VuY2Ugc2hhbGwgYmUgY29uc3RydWVkIHRvCitsaW1pdCBDVVRTIHJpZ2h0cyB0byBtb2RpZnkgb3IgdG8gZGV2ZWxvcCBvdGhlciBkZXJpdmF0aXZlcyBvZiB0aGUgU29mdHdhcmUKK3doaWNoIGFyZSBzaW1pbGFyIHRvIG9yIG9mZmVyIHRoZSBzYW1lIG9yIHNpbWlsYXIgaW1wcm92ZW1lbnRzIGFzIGFueQorRGVyaXZhdGl2ZXMgZGV2ZWxvcGVkIGJ5IHRoZSBMaWNlbnNlZS4KKworMy40IEVycm9yIGZpeGVzLCBidWcgZml4ZXMsIHRlY2huaWNhbCBzdWdnZXN0aW9ucywgY29tbWVudHMgYW5kIHN1Z2dlc3RlZAoraW1wcm92ZW1lbnRzIHRvIHRoZSBTb2Z0d2FyZSBhbmQgaXRzIGNvZGUgYXJlIHdlbGNvbWUgYnkgdGhlIGF1dGhvcnMgb2YgdGhlCitTb2Z0d2FyZSBhbmQgQ1VUUywgYW5kIGluIGFncmVlaW5nIHRvIHByb3ZpZGUgdGhlc2UgdG8gdGhlIGF1dGhvcnMgb3IgdG8gQ1VUUwordGhlIExpY2Vuc2VlIGhlcmVieSBhc3NpZ25zIHRoZSBJbnRlbGxlY3R1YWwgUHJvcGVydHkgUmlnaHRzIGluIGVycm9yIGZpeGVzLAorYnVnIGZpeGVzLCBvciB0ZWNobmljYWwgaW1wcm92ZW1lbnRzIHRvIENVVFMgd2hpY2ggYXJlIGNvbW11bmljYXRlZCBpbiBhbnkKK21hbm5lciBvciBtZWRpdW0gdG8gdGhlIGF1dGhvcnMgb2YgdGhlIFNvZnR3YXJlIG9yIENVVFMgd2l0aCBhIHJlc2VydmF0aW9uIG9mCit1c2Ugb2YgdGhvc2UgaW1wcm92ZW1lbnRzIGFuZCBzdWdnZXN0aW9ucyBieSB0aGUgTGljZW5zZWUgc3ViamVjdCB0byB0aGUgdGVybXMKK2FuZCBjb25kaXRpb25zIG9mIHRoZSBMaWNlbmNlIGluIHRoaXMgQWdyZWVtZW50LgorCis0LiBOTyBNQUlOVEVOQU5DRSBPUiBTVVBQT1JUCisKKzQuMSBDVVRTIGlzIHVuZGVyIG5vIG9ibGlnYXRpb24gd2hhdHNvZXZlciB0bzoKKworKGEpIHByb3ZpZGUgbWFpbnRlbmFuY2Ugb3Igc3VwcG9ydCBmb3IgdGhlIFNvZnR3YXJlOyBvcgorCisoYikgbm90aWZ5IHRoZSBMaWNlbnNlZSBvZiBlcnJvciBmaXhlcywgYnVnIGZpeGVzLCBwYXRjaGVzLCBvciB1cGdyYWRlcyB0bwordGhlIGZlYXR1cmVzLCBmdW5jdGlvbmFsaXR5IG9yIHBlcmZvcm1hbmNlIG9mIHRoZSBTb2Z0d2FyZSAoIkVuaGFuY2VtZW50cyIpCisoaWYgYW55KSwgd2hldGhlciBkZXZlbG9wZWQgYnkgQ1VUUyBvciB0aGlyZCBwYXJ0aWVzLiAgSWYsIGluIGl0cyBzb2xlCitkaXNjcmV0aW9uLCBDVVRTIG1ha2VzIGFuIEVuaGFuY2VtZW50IGF2YWlsYWJsZSB0byB0aGUgTGljZW5zZWUgYW5kIENVVFMgZG9lcworbm90IHNlcGFyYXRlbHkgZW50ZXIgaW50byBhIHdyaXR0ZW4gbGljZW5jZSBhZ3JlZW1lbnQgd2l0aCB0aGUgTGljZW5zZWUKK3JlbGF0aW5nIHRvIHN1Y2ggYnVnIGZpeCwgcGF0Y2ggb3IgdXBncmFkZSwgdGhlbiBpdCBzaGFsbCBiZSBkZWVtZWQKK2luY29ycG9yYXRlZCBpbnRvIHRoZSBTb2Z0d2FyZSBhbmQgc3ViamVjdCB0byB0aGlzIEFncmVlbWVudC4KKworNS4gRElTQ0xBSU1FUiBPRiBXQVJSQU5USUVTCisKKzUuMSBDVVRTIHdhcnJhbnRzIHRoYXQgdGhlIFNvZnR3YXJlIHdpbGwgY29uZm9ybSBzdWJzdGFudGlhbGx5IHdpdGggaXRzCitmdW5jdGlvbmFsIHNwZWNpZmljYXRpb25zLiAgT3RoZXJ3aXNlIHRoZSBTb2Z0d2FyZSBpcyBzdXBwbGllZCAiYXMgaXMiIHdpdGhvdXQKK3dhcnJhbnR5IG9mIGFueSBraW5kLiAgQ1VUUywgaXRzIGxpY2Vuc29ycyBhbmQgaXRzIGVtcGxveWVlczoKKworKGEpIGRpc2NsYWltIGFueSB3YXJyYW50aWVzLCBleHByZXNzIG9yIGltcGxpZWQsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8KK2FueSBpbXBsaWVkIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRhYmlsaXR5LCBmaXRuZXNzIGZvciBhIHBhcnRpY3VsYXIgcHVycG9zZSwKK3RpdGxlIG9yIG5vbi1pbmZyaW5nZW1lbnQgb2YgdGhpcmQgcGFydHkgcmlnaHRzOworCisoYikgZG8gbm90IGFzc3VtZSBhbnkgbGVnYWwgbGlhYmlsaXR5IG9yIHJlc3BvbnNpYmlsaXR5IGZvciB0aGUgYWNjdXJhY3ksCitjb21wbGV0ZW5lc3MsIG9yIHVzZWZ1bG5lc3Mgb2YgdGhlIFNvZnR3YXJlOworCisoYykgZG8gbm90IHJlcHJlc2VudCB0aGF0IHVzZSBvZiB0aGUgU29mdHdhcmUgd2lsbCBub3QgaW5mcmluZ2UgcHJpdmF0ZWx5Citvd25lZCByaWdodHM7CisKKyhkKSBkbyBub3Qgd2FycmFudCB0aGF0IHRoZSBTb2Z0d2FyZSB3aWxsIGZ1bmN0aW9uIHVuaW50ZXJydXB0ZWQsIHRoYXQgaXQgaXMKK2Vycm9yLWZyZWUgb3IgdGhhdCBhbnkgZXJyb3JzIHdpbGwgYmUgY29ycmVjdGVkLgorCis2LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWQorCis2LjEgSW4gbm8gZXZlbnQgd2lsbCBDVVRTIG9yIGl0cyBsaWNlbnNvcnMgb3IgaXRzIGVtcGxveWVlcyBiZSBsaWFibGUgdG8KK3RoZSBMaWNlbnNlZSBmb3IgYW55IGluZGlyZWN0LCBpbmNpZGVudGFsLCBjb25zZXF1ZW50aWFsLCBzcGVjaWFsIG9yIHB1bml0aXZlCitkYW1hZ2VzIG9mIGFueSBraW5kIG9yIG5hdHVyZSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBsb3NzIG9mIHByb2ZpdHMgb3IKK2xvc3Mgb2YgZGF0YSwgZm9yIGFueSByZWFzb24gd2hhdHNvZXZlciwgd2hldGhlciBzdWNoIGxpYWJpbGl0eSBpcyBhc3NlcnRlZCBvbgordGhlIGJhc2lzIG9mIGNvbnRyYWN0LCB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSBvciBzdHJpY3QgbGlhYmlsaXR5KSwgb3IKK290aGVyd2lzZSwgZXZlbiBpZiBDVVRTIGhhcyBiZWVuIHdhcm5lZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBsb3NzIG9yCitkYW1hZ2VzLiAgSW4gbm8gZXZlbnQgc2hhbGwgQ1VUUycgbGlhYmlsaXR5IGFyaXNpbmcgZnJvbSBvciBpbiBjb25uZWN0aW9uIHdpdGgKK3RoaXMgQWdyZWVtZW50IGV4Y2VlZCBhIHN1bSBlcXVpdmFsZW50IHRvIHRoZSBhbm51YWwgRmVlIHBhaWQgYnkgdGhlIExpY2Vuc2VlCit0byB0aGUgUEhFTklYIEluZHVzdHJ5IENvbnNvcnRpdW0gZm9yIHVzZSBvZiB0aGUgU29mdHdhcmUuCisKKzYuMiBUaGUgbGltaXRhdGlvbnMgYW5kIGV4Y2x1c2lvbnMgaW4gdGhpcyBBZ3JlZW1lbnQgc2hhbGwgbm90IGFwcGx5IGluCityZXNwZWN0IG9mIGNsYWltcyBmb3IgcGVyc29uYWwgaW5qdXJ5IG9yIGRlYXRoIGNhdXNlZCBieSB0aGUgbmVnbGlnZW5jZSBvZgorQ1VUUywgaXRzIGxpY2Vuc29ycyBvciBpdHMgZW1wbG95ZWVzIG9yIGluIHJlc3BlY3Qgb2YgZnJhdWQgb3IgZnJhdWR1bGVudAorbWlzcmVwcmVzZW50YXRpb24uCisKKzcuIElOREVNTklUWQorCis3LjEgVGhlIExpY2Vuc2VlIHNoYWxsIGluZGVtbmlmeSBDVVRTLCB0aGUgU29mdHdhcmUgYXV0aG9ycywgdGhlIFNvZnR3YXJlCitzcG9uc29ycywgYW5kIHRoZWlyIGFnZW50cywgb2ZmaWNlcnMsIGFuZCBlbXBsb3llZXMsIGFnYWluc3QgYW55IGFuZCBhbGwKK2NsYWltcywgc3VpdHMsIGxvc3NlcywgZGFtYWdlcywgY29zdHMsIGZlZXMsIGFuZCBleHBlbnNlcyBhcmlzaW5nIG91dCBvZiBvciBpbgorY29ubmVjdGlvbiB3aXRoIGFueSBjbGFpbSBvciB0aHJlYXRlbmVkIGNsYWltIGJ5IGFueSB0aGlyZCBwYXJ0eSByZWxhdGluZyB0bworb3IgYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhlIFNvZnR3YXJlIGJ5IHRoZSBMaWNlbnNlZS4gIFRoZSBMaWNlbnNlZSBzaGFsbAorcGF5IGFsbCBjb3N0cyBpbmN1cnJlZCBieSBDVVRTIGluIGVuZm9yY2luZyB0aGlzIHByb3Zpc2lvbi4KKworOC4gVEVSTSBBTkQgVEVSTUlOQVRJT04KKworOC4xIFRoaXMgQWdyZWVtZW50IGFuZCB0aGUgTGljZW5jZSBncmFudGVkIGhlcmVpbiBzaGFsbCBjb21lIGludG8gZWZmZWN0CitvbiB0aGUgQ29tbWVuY2VtZW50IERhdGUgYW5kIHdpbGwgY29udGludWUgZm9yIHRoZSBkdXJhdGlvbiBvZiBwYXltZW50IG9mIHRoZQorRmVlIHVubGVzcyB0ZXJtaW5hdGVkIGJ5IENVVFMgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50LiAgSWYgdGhlCitMaWNlbnNlZSBicmVhY2hlcyBhbnkgdGVybSBvZiB0aGlzIEFncmVlbWVudCwgYW5kIGZhaWxzIHRvIGN1cmUgc3VjaCBicmVhY2gKK3dpdGhpbiB0aGlydHkgKDMwKSBkYXlzIG9mIHRoZSBkYXRlIG9mIHdyaXR0ZW4gbm90aWNlLCB0aGlzIEFncmVlbWVudCBzaGFsbAoraW1tZWRpYXRlbHkgdGVybWluYXRlLiAgVXBvbiBzdWNoIHRlcm1pbmF0aW9uIHRoZSBMaWNlbnNlZSBzaGFsbCBpbW1lZGlhdGVseQorY2Vhc2UgdXNpbmcgdGhlIFNvZnR3YXJlLCByZXR1cm4gdG8gQ1VUUyBvciBkZXN0cm95IGFsbCBjb3BpZXMgb2YgdGhlCitTb2Z0d2FyZSwgYW5kIHByb3ZpZGUgQ1VUUyB3aXRoIHdyaXR0ZW4gY2VydGlmaWNhdGlvbiBvZiB0aGUgTGljZW5zZWUncworY29tcGxpYW5jZSB3aXRoIHRoZSBmb3JlZ29pbmcuICBUZXJtaW5hdGlvbiBzaGFsbCBub3QgcmVsaWV2ZSB0aGUgTGljZW5zZWUKK2Zyb20gaXRzIG9ibGlnYXRpb25zIGFyaXNpbmcgcHJpb3IgdG8gc3VjaCB0ZXJtaW5hdGlvbi4gIE5vdHdpdGhzdGFuZGluZyBhbnkKK3Byb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCB0byB0aGUgY29udHJhcnksIFNlY3Rpb25zIDMsIDUsIDYsIDcsIDgsIDksIDEwLAorMTMsIDE0IGFuZCAxOCBzaGFsbCBzdXJ2aXZlIHRlcm1pbmF0aW9uIG9mIHRoaXMgQWdyZWVtZW50LiAgCisKKzkuIENPTkZJREVOVElBTElUWQorCis5LjEgVGhlIExpY2Vuc2VlIGFncmVlcyBhbmQgdW5kZXJ0YWtlcyB0aGF0IGR1cmluZyB0aGUgdGVybSBvZiB0aGUgTGljZW5jZSBpbgordGhpcyBBZ3JlZW1lbnQgYW5kIHRoZXJlYWZ0ZXIgaXQgd2lsbCBrZWVwIGNvbmZpZGVudGlhbCBhbGwsIGFuZCB3aWxsIG5vdCB1c2UKK2ZvciBpdHMgb3duIHB1cnBvc2VzIG5vciB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgQ1VUUyBkaXNjbG9zZSB0bworYW55IHRoaXJkIHBhcnR5IGFueSBpbmZvcm1hdGlvbiBvZiBhIGNvbmZpZGVudGlhbCBuYXR1cmUgKGluY2x1ZGluZyB0cmFkZQorc2VjcmV0cyBhbmQgaW5mb3JtYXRpb24gb2YgY29tbWVyY2lhbCB2YWx1ZSkgd2hpY2ggbWF5IGJlY29tZSBrbm93biB0byB0aGUKK0xpY2Vuc2VlIGFuZCB3aGljaCByZWxhdGVzIHRvIENVVFMgdW5sZXNzIHN1Y2ggaW5mb3JtYXRpb24gaXMgcHVibGljIGtub3dsZWRnZQorb3IgYWxyZWFkeSBrbm93biB0byB0aGUgTGljZW5zZWUgYXQgdGhlIHRpbWUgb2YgZGlzY2xvc3VyZSBvciBzdWJzZXF1ZW50bHkKK2JlY29tZXMgcHVibGljIGtub3dsZWRnZSBvdGhlciBieSBicmVhY2ggb2YgdGhlIExpY2VuY2UgaW4gdGhpcyBBZ3JlZW1lbnQgb3IKK3N1YnNlcXVlbnRseSBjb21lcyBsYXdmdWxseSBpbnRvIHRoZSBwb3NzZXNzaW9uIG9mIHRoZSBMaWNlbnNlZSBmcm9tIGEgdGhpcmQKK3BhcnR5LgorCisxMC4gTk8gU1VCTElDRU5TSU5HIEFORCBOTyBBU1NJR05NRU5UIAorCisxMC4xIFRoZSBMaWNlbnNlZSBzaGFsbCBoYXZlIG5vIHJpZ2h0IHRvIHN1Yi1saWNlbnNlIG9yIHRvIGFzc2lnbiwKK3RyYW5zZmVyLCBjaGFyZ2Ugb3IgZGVhbCBpbiBhbnkgb3RoZXIgbWFubmVyIHRoZSBiZW5lZml0IG9yIGJ1cmRlbiBvZiB0aGUKK0xpY2VuY2UgaW4gdGhpcyBBZ3JlZW1lbnQgaW4gd2hvbGUgb3IgaW4gcGFydCBvciB0byBhbGxvdyB0aGUgU29mdHdhcmUgdG8KK2JlY29tZSB0aGUgc3ViamVjdCBvZiBhbnkgY2hhcmdlLCBsaWVuIG9yIGVuY3VtYnJhbmNlIHdpdGhvdXQgdGhlIHByaW9yCit3cml0dGVuIGNvbnNlbnQgb2YgQ1VUUyBzdWNoIGNvbnNlbnQgbWF5IGJlIHdpdGhoZWxkIHdpdGhvdXQgZ2l2aW5nIGFueQorcmVhc29ucy4KKworMTEuIFdBSVZFUgorCisxMS4xIE5vIGZvcmJlYXJhbmNlIG9yIGRlbGF5IGJ5IGVpdGhlciBwYXJ0eSBpbiBlbmZvcmNpbmcgaXRzIHJpZ2h0cyB3aWxsCitwcmVqdWRpY2Ugb3IgcmVzdHJpY3QgdGhlIHJpZ2h0cyBvZiB0aGF0IHBhcnR5LCBhbmQgbm8gd2FpdmVyIG9mIGFueSBzdWNoCityaWdodHMgb3Igb2YgYW55IGJyZWFjaCBvZiBhbnkgY29udHJhY3R1YWwgdGVybXMgd2lsbCBiZSBkZWVtZWQgdG8gYmUgYSB3YWl2ZXIKK29mIGFueSBvdGhlciByaWdodCBvciBvZiBhbnkgbGF0ZXIgYnJlYWNoLgorCisxMi4gU0VWRVJBQklMSVRZCisKKzEyLjEgSWYgYW55IHByb3Zpc2lvbiBvZiB0aGUgTGljZW5jZSBpbiB0aGlzIEFncmVlbWVudCBpcyBqdWRnZWQgdG8gYmUKK2lsbGVnYWwgb3IgdW5lbmZvcmNlYWJsZSwgdGhlIGNvbnRpbnVhdGlvbiBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3Qgb2YgdGhlCityZW1haW5kZXIgb2YgdGhlIHByb3Zpc2lvbnMgd2lsbCBub3QgYmUgcHJlanVkaWNlZC4KKworMTMuIE5PIEFHRU5DWSBPUiBQQVJUTkVSU0hJUAorCisxMy4xIE5vdGhpbmcgY29udGFpbmVkIG9yIGltcGxpZWQgaW4gdGhpcyBBZ3JlZW1lbnQgY29uc3RpdHV0ZXMgYSBQYXJ0eSB0aGUKK3BhcnRuZXIsIGFnZW50LCBvciBsZWdhbCByZXByZXNlbnRhdGl2ZSBvZiBhbm90aGVyIHBhcnR5IG9yIG9mIHRoZSBvdGhlciBQYXJ0eQorZm9yIGFueSBwdXJwb3NlIG9yIGNyZWF0ZXMgYW55IHBhcnRuZXJzaGlwLCBhZ2VuY3kgb3IgdHJ1c3QsIGFuZCBubyBQYXJ0eSBoYXMKK2FueSBhdXRob3JpdHkgdG8gYmluZCB0aGUgb3RoZXIgUGFydHkgaW4gYW55IHdheS4KKworMTQuIFRIRSBDT05UUkFDVFMgKFJJR0hUUyBPRiBUSElSRCBQQVJUSUVTKSBBQ1QgMTk5OQorCisxNC4xIFRoZSBDb250cmFjdHMgKFJpZ2h0cyBvZiBUaGlyZCBQYXJ0aWVzKSBBY3QgMTk5OSBzaGFsbCBub3QgYXBwbHkgdG8KK3RoaXMgQWdyZWVtZW50IGFuZCBub3RoaW5nIGluIHRoaXMgQWdyZWVtZW50IHNoYWxsIGNvbmZlciBvciBwdXJwb3J0IHRvIGNvbmZlcgorb24gb3Igb3BlcmF0ZSB0byBnaXZlIGFueSB0aGlyZCBQYXJ0eSBhbnkgYmVuZWZpdCBvciBhbnkgcmlnaHQgdG8gZW5mb3JjZSBhbnkKK3Rlcm0gb2YgdGhpcyBBZ3JlZW1lbnQgZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCBpbiB0aGlzIEFncmVlbWVudC4KKworMTUuIE5PVElDRVMKKworMTUuMSBBbnkgbm90aWNlIHRvIGJlIGdpdmVuIHVuZGVyIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGluIHdyaXRpbmcgYW5kCitkZWxpdmVyZWQgYnkgaGFuZCwgcHJlcGFpZCByZWdpc3RlcmVkIHBvc3Qgb3IgZmFjc2ltaWxlIHRvIGEgUGFydHkgYXQgdGhlCithZGRyZXNzIHNldCBvdXQgYXQgdGhlIGhlYWQgb2YgdGhpcyBBZ3JlZW1lbnQgb3IgdG8gc3VjaCBvdGhlciBhZGRyZXNzIG9yIGZheAorbnVtYmVyIGFzIGFueSBQYXJ0eSBtYXkgc3BlY2lmeSBpbiB3cml0aW5nIHRvIGFub3RoZXIuICBOb3RpY2VzIGFyZSBkZWVtZWQgdG8KK2hhdmUgYmVlbiBnaXZlbjoKKworKGEpIGlmIGRlbGl2ZXJlZCBieSBoYW5kLCBhdCB0aGUgdGltZSBvZiBkZWxpdmVyeSB1bmxlc3MgZGVsaXZlcmVkIGFmdGVyIDVwbQoraW4gdGhlIHBsYWNlIG9mIHJlY2VpcHQgb3Igb24gYSBub24tYnVzaW5lc3MgZGF5LCBpbiB3aGljaCBjYXNlIHRoZSBub3RpY2UgaXMKK2RlZW1lZCB0byBoYXZlIGJlZW4gZ2l2ZW4gYXQgOWFtIHRoZSBuZXh0IGJ1c2luZXNzIGRheTsKKworKGIpIGlmIHNlbnQgYnkgcmVnaXN0ZXJlZCBwb3N0IGZyb20gd2l0aGluIHRoZSBVbml0ZWQgS2luZ2RvbSwgdGhyZWUKK2J1c2luZXNzIGRheXMgYWZ0ZXIgcG9zdGluZyAob3Igc2V2ZW4gYnVzaW5lc3MgZGF5cyBpZiBwb3N0ZWQgZnJvbSBvdXRzaWRlIHRoZQorVW5pdGVkIEtpbmdkb20pOyBhbmQKKworKGMpIGlmIHNlbnQgYnkgZmFjc2ltaWxlLCBhdCB0aGUgdGltZSB0aGUgZmFjc2ltaWxlIGlzIHJlY2VpdmVkIHNob3duIGluCit0aGUgdHJhbnNtaXNzaW9uIHJlcG9ydCBhcyB0aGUgdGltZSB0aGF0IHRoZSB3aG9sZSBmYWNzaW1pbGUgd2FzIHNlbnQgdW5sZXNzCityZWNlaXZlZCBhZnRlciA1cG0gaW4gdGhlIHBsYWNlIG9mIHJlY2VpcHQgb3Igb24gYSBub24tYnVzaW5lc3MgZGF5LCBpbiB3aGljaAorY2FzZSB0aGUgbm90aWNlIGlzIGRlZW1lZCB0byBoYXZlIGJlZW4gZ2l2ZW4gYXQgOWFtIHRoZSBuZXh0IGJ1c2luZXNzIGRheS4KK0FueSBub3RpY2Ugc2VydmVkIGJ5IGZhY3NpbWlsZSB0cmFuc21pc3Npb24gc2hhbGwgYmUgY29uZmlybWVkIGJ5IHBvc3QuCisKKzE2LiBFTlRJUkUgQUdSRUVNRU5UCisKKzE2LjEgVGhpcyBBZ3JlZW1lbnQgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYW5kIHVuZGVyc3RhbmRpbmcgb2YKK3RoZSBQYXJ0aWVzIGFuZCBzdXBlcnNlZGVzIGFsbCBuZWdvdGlhdGlvbnMsIHVuZGVyc3RhbmRpbmdzIG9yIHByZXZpb3VzCithZ3JlZW1lbnQgYmV0d2VlbiB0aGUgUGFydGllcyByZWxhdGluZyB0byB0aGUgc3ViamVjdCBtYXR0ZXIgb2YgdGhpcworQWdyZWVtZW50LgorCisxNy4gR09WRVJOSU5HIExBVworCisxNy4xIFRoaXMgQWdyZWVtZW50IGFuZCBhbnkgZG9jdW1lbnRzIHRvIGJlIGVudGVyZWQgaW50byBwdXJzdWFudCB0byBpdAorc2hhbGwgYmUgZ292ZXJuZWQgYnkgYW5kIGNvbnN0cnVlZCBpbiBhY2NvcmRhbmNlIHdpdGggRW5nbGlzaCBsYXcgYW5kIGVhY2gKK1BhcnR5IGlycmV2b2NhYmx5IHN1Ym1pdHMgdG8gdGhlIGV4Y2x1c2l2ZSBqdXJpc2RpY3Rpb24gb2YgdGhlIGNvdXJ0cyBvZgorRW5nbGFuZCBvdmVyIGFueSBjbGFpbSBvciBtYXR0ZXIgYXJpc2luZyB1bmRlciBvciBpbiBjb25uZWN0aW9uIHdpdGggdGhpcworQWdyZWVtZW50IGFuZCB0aGUgZG9jdW1lbnRzIGVudGVyZWQgaW50byBwdXJzdWFudCB0byBpdC4KKworMTguIEVYUE9SVCBDT05UUk9MIFJFR1VMQVRJT05TCisKKzE4LjEgJ0V4cG9ydCBDb250cm9sIFJlZ3VsYXRpb25zJyBtZWFucyBhbnkgVW5pdGVkIE5hdGlvbnMgdHJhZGUgc2FuY3Rpb25zCitvciBFVSBvciBVSyBsZWdpc2xhdGlvbiBvciByZWd1bGF0aW9uLCBmcm9tIHRpbWUgdG8gdGltZSBpbiBmb3JjZSwgd2hpY2gKK2ltcG9zZSBhcm1zIGVtYmFyZ29lcyBvciBjb250cm9sIG9mIGV4cG9ydCBvZiBnb29kcywgdGVjaG5vbG9neSBvciBzb2Z0d2FyZS4KKworMTguMiBUaGUgTGljZW5zZWUgc2hhbGwgZW5zdXJlIHRoYXQsIGluIHVzaW5nIHRoZSBTb2Z0d2FyZSBpdCBzaGFsbCBub3QgYW5kCitub3Igc2hhbGwgaXRzIGVtcGxveWVlcyBvciBjb25zdWx0YW50cyBvciBjb250cmFjdG9ycyBicmVhY2ggb3IgY29tcHJvbWlzZQorZGlyZWN0bHkgb2YgaW5kaXJlY3RseSBjb21wbGlhbmNlIHdpdGggYW55IEV4cG9ydCBDb250cm9sIFJlZ3VsYXRpb25zLgorCisKKworSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBvciBmZWVkYmFjayBjb25jZXJuaW5nIHRoZSBTb2Z0d2FyZSwgY29udGFjdAorVW5pdmVyc2l0eSBvZiBDYW1icmlkZ2UsIERlcGFydG1lbnQgb2YgSGFlbWF0b2xvZ3ksIENhbWJyaWRnZSBJbnN0aXR1dGUgZm9yCitNZWRpY2FsIFJlc2VhcmNoLCBXZWxsY29tZSBUcnVzdC9NUkMgQnVpbGRpbmcsIENhbWJyaWRnZSBDQjIgMFhZIFVLLiAgCitBdHRuOiBQcm9mZXNzb3IgUmFuZHkgUmVhZCwgb3IgdmlhIGVtYWlsIGF0IGNpbXItcGhhc2VyQGxpc3RzLmNhbS5hYy51aworCmRpZmYgLS1naXQgYS9saWNlbnNlcy9waHJhY2sgYi9saWNlbnNlcy9waHJhY2sKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2YxNDZmYQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL3BocmFjawpAQCAtMCwwICsxLDIxIEBACitDb3B5bm93IERpc2NsYWltZXIgSW5mb3JtYXRpb24KKyBUaGUgY29udGVudHMgb2YgYWxsIG1hdGVyaWFsIGF2YWlsYWJsZSBvbiB0aGlzIEludGVybmV0IHNpdGUgYXJlIGNvcHlyaWdodGVkIGJ5IFBocmFjayBJbmMuIAordW5sZXNzIG90aGVyd2lzZSBpbmRpY2F0ZWQuCisgCisgUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIHF1b3RlIG9yIHJlcHJvZHVjZSBwYXJ0cyBvciBhIHdob2xlIGFydGljbGUgYXMgbG9uZyBhcyB0aGUgcmVmZXJlbmNlIHRvIAoraHR0cDovL3d3dy5waHJhY2sub3JnIGFuZCBhZGVxdWF0ZSBjcmVkaXQgdG8gdGhlIGF1dGhvciBpcyBnaXZlbiAoY29weW5vdykuCisgCisgQWxsIGluZm9ybWF0aW9uIGluIFBocmFjayBNYWdhemluZSBpcywgdG8gdGhlIGJlc3Qgb2YgdGhlIGFiaWxpdHkgb2YgdGhlIGVkaXRvcnMgYW5kIAorY29udHJpYnV0b3JzLCB0cnV0aGZ1bCBhbmQgYWNjdXJhdGUuIFdoZW4gcG9zc2libGUsIGFsbCBmYWN0cyBhcmUgY2hlY2tlZCwgYWxsIGNvZGUgaXMgY29tcGlsZWQuIAorSG93ZXZlciwgd2UgYXJlIG5vdCBvbW5pc2NpZW50IChoZWxsLCB3ZSBkb24ndCBldmVuIGdldCBwYWlkKS4gSXQgaXMgZW50aXJlbHkgcG9zc2libGUgc29tZXRoaW5nIAorY29udGFpbmVkIHdpdGhpbiB0aGlzIHB1YmxpY2F0aW9uIGlzIGluY29ycmVjdCBpbiBzb21lIHdheS4gSWYgdGhpcyBpcyB0aGUgY2FzZSwgcGxlYXNlIGRyb3AgdXMgCitzb21lIGVtYWlsIHNvIHRoYXQgd2UgY2FuIGNvcnJlY3QgaXQgaW4gYSBmdXR1cmUgaXNzdWUuCisgCisgQWxzbywga2VlcCBpbiBtaW5kIHRoYXQgUGhyYWNrIE1hZ2F6aW5lIGFjY2VwdHMgbm8gcmVzcG9uc2liaWxpdHkgZm9yIHRoZSBlbnRpcmVseSBzdHVwaWQgKG9yIAoraWxsZWdhbCkgdGhpbmdzIHBlb3BsZSBtYXkgZG8gd2l0aCB0aGUgaW5mb3JtYXRpb24gY29udGFpbmVkIGhlcmVpbi4gUGhyYWNrIGlzIGEgY29tcGVuZGl1bSBvZiAKK2tub3dsZWRnZSwgd2lzZG9tLCB3aXQsIGFuZCBzYXNzLiBXZSBuZWl0aGVyIGFkdm9jYXRlLCBjb25kb25lIG5vciBwYXJ0aWNpcGF0ZSBpbiBhbnkgc29ydCBvZiAKK2lsbGljaXQgYmVoYXZpb3IuIEJ1dCB3ZSB3aWxsIHNpdCBiYWNrIGFuZCB3YXRjaC4KKyAKKyBMYXN0bHksIGl0IGJlYXJzIG1lbnRpb25pbmcgdGhhdCB0aGUgb3BpbmlvbnMgdGhhdCBtYXkgYmUgZXhwcmVzc2VkIGluIHRoZSBhcnRpY2xlcyBvZiBQaHJhY2sgCitNYWdhemluZSBhcmUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIHRoZWlyIGF1dGhvcnMuCisgVGhlc2Ugb3BpbmlvbnMgZG8gbm90IG5lY2Vzc2FyaWx5IHJlcHJlc2VudCB0aG9zZSBvZiB0aGUgUGhyYWNrIFN0YWZmLiAKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL3BocmFwIGIvbGljZW5zZXMvcGhyYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGUxZGYxMQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL3BocmFwCkBAIC0wLDAgKzEsMjEwIEBACitBQ0FERU1JQyBVU0VSIEFHUkVFTUVOVAorCitQbGVhc2UgcmVhZCB0aGUgZW50aXJlIGFncmVlbWVudCwgZmlsbCBpbiB0aGUgaW5mb3JtYXRpb24gaW4gdGhlCitpbmRpY2F0ZWQgcG9zaXRpb25zIChzdWNoIGFzICJOQU1FOiIpLCBhbmQgcmV0dXJuIHRoZSBlbnRpcmUgZG9jdW1lbnQKK3RvIHRoZSBpbmRpY2F0ZWQgcGVvcGxlLiAgUGxlYXNlIHNlbmQgdGhlIGRvY3VtZW50IGFzIHRoZSBtZXNzYWdlLS1ub3QKK2FzIGFuIGF0dGFjaG1lbnQuCisKK1BocmFwOiAgQSBwcm9ncmFtIGZvciBhc3NlbWJsaW5nIEROQSBzZXF1ZW5jZSBkYXRhLgorCitTd2F0OiAgQSBwcm9ncmFtIGZvciBzZWFyY2hpbmcgb25lIG9yIG1vcmUgRE5BIG9yIHByb3RlaW4gcXVlcnkgc2VxdWVuY2VzCithZ2FpbnN0IGEgc2VxdWVuY2UgZGF0YWJhc2UsIHVzaW5nIChhbiBlZmZpY2llbnQgaW1wbGVtZW50YXRpb24gb2YpIHRoZQorU21pdGgtV2F0ZXJtYW4tR290b2ggYWxnb3JpdGhtLgorCitDcm9zc19NYXRjaDogIEEgZ2VuZXJhbC1wdXJwb3NlIHV0aWxpdHkgYmFzZWQgb24gU3dhdCBmb3IgY29tcGFyaW5nIGFueQordHdvIHNldHMgb2YgKGxvbmcgb3Igc2hvcnQpIEROQSBzZXF1ZW5jZXMuCisKK1BocmVkOiAgQSBwcm9ncmFtIHRoYXQgcmVhZHMgRE5BIHNlcXVlbmNlciB0cmFjZSBkYXRhLCBjYWxscyBiYXNlcywKK2Fzc2lnbnMgcXVhbGl0eSB2YWx1ZXMgdG8gdGhlIGJhc2VzLCBhbmQgd3JpdGVzIHRoZSBiYXNlIGNhbGxzIGFuZCBxdWFsaXR5Cit2YWx1ZXMgdG8gb3V0cHV0IGZpbGVzLgorCitDb25zZWQ6ICBBIHByb2dyYW0gZm9yIHZpZXdpbmcgYW5kIGVkaXRpbmcgUGhyYXAgYXNzZW1ibGllcy4KKworVG8gcmVjZWl2ZSBhbnkgb2YgdGhlc2UgcHJvZ3JhbXMgeW91IHdpbGwgbmVlZCB0byBhZ3JlZSB0byB0aGUgZm9sbG93aW5nCitjb25kaXRpb25zLiBUaGV5IHNob3VsZCBiZSB0YWtlbiBzZXJpb3VzbHkhCisKKzEpIFlvdSBhZ3JlZSB0byByZWFkIHRoZSBkb2N1bWVudGF0aW9uLiAgV2Ugd2VsY29tZSBmZWVkYmFjayBvbiBhbnkKK2luYWNjdXJhY2llcy4KKworMikgWW91IGFncmVlIHRvIHJlcG9ydCBhbnkgYnVncyB0byB1cy4gIChUbyBmaXggYnVncywgd2Ugd2lsbCBuZWVkCitmcm9tIHlvdSBhIGRhdGFzZXQgYW5kIGEgcHJvY2VkdXJlIHRoYXQgcmVwcm9kdWNlcyB0aGUgcHJvYmxlbTsgYnV0IGRvCitub3Qgc2VuZCBkYXRhc2V0cyB3aXRob3V0IGZpcnN0IGVtYWlsaW5nIHVzIHRvIGRlc2NyaWJlIHRoZSBuYXR1cmUgb2YKK3RoZSBidWcuKQorCiszKSBZb3UgYWdyZWUgbm90IHRvIG1ha2UgdGhlIHByb2dyYW1zIChpbmNsdWRpbmcgc291cmNlIGNvZGUsCitleGVjdXRhYmxlcywgb3IgYW55IHBhcnQgdGhlcmVvZiwgaW4gbW9kaWZpZWQgb3IgdW5tb2RpZmllZCBmb3JtKQorYXZhaWxhYmxlIHRvIGFueW9uZSBvdXRzaWRlIHlvdXIgZ3JvdXAsIGFuZCBub3QgdG8gcHV0IHRoZW0gd2hlcmUgdGhleQorbWF5IGJlIGFjY2Vzc2libGUgdG8gb3V0c2lkZSBpbmRpdmlkdWFscyB3aXRob3V0IHlvdXIgZGlyZWN0IGtub3dsZWRnZQorKGUuZy4gb24gYSBjb21wdXRlciB0byB3aGljaCBwZW9wbGUgb3V0c2lkZSB5b3VyIGdyb3VwIGhhdmUgbG9naW4KK3ByaXZpbGVnZXMpLiAgVGhlIGRvY3VtZW50YXRpb24gaG93ZXZlciBtYXkgYmUgZnJlZWx5IGRpc3RyaWJ1dGVkLgorUmVmZXIgYW55IHJlcXVlc3RzIGZvciB0aGUgcHJvZ3JhbXMgdG8gdGhlIGF1dGhvcnMuICBJZiB5b3UgYXJlCitvcGVyYXRpbmcgYSBjb21wdXRlciBmYWNpbGl0eSB3aGljaCBwcm92aWRlcyBhY2Nlc3MgdG8gc2V2ZXJhbAoraW5kZXBlbmRlbnQgaW52ZXN0aWdhdG9ycywgeW91IGFncmVlIHRvIHNldCB0aGUgcGVybWlzc2lvbnMgb24gdGhlCitleGVjdXRhYmxlcyBhbmQgc291cmNlIGNvZGUgdG8gYWxsb3cgZXhlY3V0ZSBidXQgbm90IHJlYWQgYWNjZXNzLCBzbwordGhhdCB0aGUgcHJvZ3JhbXMgbWF5IG5vdCBiZSBjb3BpZWQuIEludmVzdGlnYXRvcnMgd2hvIHdhbnQgY29waWVzIG9mCit0aGUgc29mdHdhcmUgZm9yIHRoZWlyIG93biB1c2UgbXVzdCByZXR1cm4gYSBzZXBhcmF0ZSBjb3B5IG9mIHRoaXMKK2FncmVlbWVudC4KKworNCkgWW91IGFncmVlIG5vdCB0byB1c2UgdGhlIHByb2dyYW1zIGZvciBhbnkgY29tbWVyY2lhbCBwdXJwb3NlLAoraW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBjb21tZXJjaWFsbHkgcmVzdHJpY3RlZCBzZXF1ZW5jaW5nCisoZGVmaW5lZCBhcyBzZXF1ZW5jaW5nIGZvciB3aGljaCBhIGNvbXBhbnkgcmV0YWlucyBwYXRlbnRpbmcgb3IKK2xpY2Vuc2luZyByaWdodHMgcmVnYXJkaW5nIHRoZSBzZXF1ZW5jZSwgb3IgdGhlIHJpZ2h0IHRvIHJlc3RyaWN0IG9yCitkZWxheSBkaXNzZW1pbmF0aW9uIG9mIHRoZSBzZXF1ZW5jZTsgd2l0aCB0aGUgc29sZSBleGNlcHRpb24gdGhhdAorc2VxdWVuY2luZyBpcyBub3QgY29uc2lkZXJlZCB0byBiZSBjb21tZXJjaWFsbHkgcmVzdHJpY3RlZCBpZiBpdCBpcworZmVkZXJhbGx5IGZ1bmRlZCBhbmQgdGhlIGludmVzdGlnYXRvcnMgYWRvcHQgdGhlIGRhdGEgcmVsZWFzZSBwb2xpY2llcworZW5kb3JzZWQgYXQgdGhlIFdlbGxjb21lIFRydXN0LXNwb25zb3JlZCBCZXJtdWRhIG1lZXRpbmcsCitpLmUuIGltbWVkaWF0ZSByZWxlYXNlIG9mIGRhdGEgYXMgaXQgaXMgZ2VuZXJhdGVkKS4KKyBbSWYgeW91IHdpc2ggdG8gb2J0YWluIHRoZSBzb2Z0d2FyZSBmb3IgY29tbWVyY2lhbGx5IHJlc3RyaWN0ZWQKK3NlcXVlbmNpbmcgb3IgYW55IG90aGVyIGNvbW1lcmNpYWwgcHVycG9zZXMsIHlvdSB3aWxsIG5lZWQgdG8gZXhlY3V0ZQorYSBzZXBhcmF0ZSBsaWNlbnNpbmcgYWdyZWVtZW50IHdpdGggdGhlIFVuaXZlcnNpdHkgb2YgV2FzaGluZ3RvbiBhbmQKK3BheSBhIGZlZS4gSW4gdGhhdCBjYXNlIHBsZWFzZSBjb250YWN0OgorCitMaXNhIEhlaW56CitVbml2ZXJzaXR5IG9mIFdhc2hpbmd0b24gVGVjaFRyYW5zZmVyLCBEaWdpdGFsIFZlbnR1cmVzCitCb3ggMzU0OTkwCis0MzExLTExdGggQXZlbnVlIE5FLCBTdWl0ZSA1MDAKK1NlYXR0bGUsIFdBICA5ODEwNS00NjA4CisKK2h0dHA6Ly9kZXB0cy53YXNoaW5ndG9uLmVkdS90ZWNodHJhbgorCisyMDYtNjE2LTM0NTEgIEZBWDogMjA2LTYxNi0zMzIyCitzd3hmckB1Lndhc2hpbmd0b24uZWR1CisKK0RvIG5vdCBjb250YWN0IGhlciBpZiB0aGUgYWNhZGVtaWMgbGljZW5zZSBhcHBsaWVzLl0KKworNSkgWW91IGFja25vd2xlZGdlIHRoYXQgdGhlIHNvZnR3YXJlIGlzIGV4cGVyaW1lbnRhbCBpbiBuYXR1cmUgYW5kIGlzCitzdXBwbGllZCAiQVMgSVMiLCB3aXRob3V0IG9ibGlnYXRpb24gYnkgdGhlIGF1dGhvcnMgb3IgdGhlIFVuaXZlcnNpdHkKK29mIFdhc2hpbmd0b24gdG8gcHJvdmlkZSBhY2NvbXBhbnlpbmcgc2VydmljZXMgb3Igc3VwcG9ydC4gIFRoZSBlbnRpcmUKK3Jpc2sgYXMgdG8gdGhlIHF1YWxpdHkgYW5kIHBlcmZvcm1hbmNlIG9mIHRoZSBTb2Z0d2FyZSBpcyB3aXRoIHlvdS4KK1VXIEFORCBUSEUgQVVUSE9SUyBFWFBSRVNTTFkgRElTQ0xBSU0gQU5ZIEFORCBBTEwgV0FSUkFOVElFUworUkVHQVJESU5HIFRIRSBTT0ZUV0FSRSwgV0hFVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UCitMSU1JVEVEIFRPIFdBUlJBTlRJRVMgUEVSVEFJTklORyBUTyBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUyBGT1IgQQorUEFSVElDVUxBUiBQVVJQT1NFLgorCis2KSBBbGwgbWVtYmVycyBvZiB5b3VyIGdyb3VwIHdpdGggYWNjZXNzIHRvIHRoZSBzb2Z0d2FyZSBhZ3JlZSB0byB0aGUKK3NhbWUgY29uZGl0aW9ucy4KKworCisKK0hhdmluZyByZWFkIHRoZSBhYm92ZSwgaWYgeW91IGFyZSBzdGlsbCBpbnRlcmVzdGVkIGluIG9idGFpbmluZyB0aGUKK3Byb2dyYW1zLCBwbGVhc2UgcmV0dXJuIGEgY29weSBvZiB0aGlzIGVudGlyZSBtZXNzYWdlICh3aGljaCBNVVNUIGJlCitpbmNsdWRlZCBzbyB0aGF0IGl0IGlzIGNsZWFyIHdoYXQgeW91IGFyZSBhZ3JlZWluZyB0bykgYnkgZW1haWwKK3RvZ2V0aGVyIHdpdGggdGhlIGZvbGxvd2luZyBpbmZvcm1hdGlvbjoKKworTkFNRTogWW91ciBuYW1lIGluIGZpcnN0IG5hbWUvbGFzdCBuYW1lIG9yZGVyLgorCitOQU1FOiAgCisKKworRXhhbXBsZToKK05BTUU6IEpvaG4gRHJhY3VsYQorKFBsZWFzZSBkbyBub3QgdXNlIGFsbCBjYXBpdGFscyBzdWNoIGFzIEpvaG4gRFJBQ1VMQSkKKworQUNLTk9XTEVER0VNRU5UOiBBbiBhY2tub3dsZWRnZW1lbnQgdGhhdCB5b3UgYW5kIHRoZSBtZW1iZXJzIG9mIHlvdXIKK2dyb3VwIGFncmVlIHRvIHRoZXNlIGNvbmRpdGlvbnMuCisKK0FDS05PV0xFREdFTUVOVDoKKworRXhhbXBsZToKK0FDS05PV0xFREdFTUVOVDogSSBhZ3JlZSB0byB0aGUgbGljZW5zZS4KKworUFJPR1JBTVM6IFdoaWNoIHByb2dyYW1zIHlvdSB3YW50IChwaHJhcCxjcm9zc19tYXRjaCwgYW5kIHN3YXQgYXJlCitkaXN0cmlidXRlZCB0b2dldGhlcikuIFlvdSBtdXN0IGNjIHRoZSBtZXNzYWdlIHRvIGVhY2ggYXBwcm9wcmlhdGUKK2luZGl2aWR1YWwgKEJyZW50IEV3aW5nLCBEYXZpZCBHb3Jkb24sIGFuZC9vciBQaGlsIEdyZWVuKSBhdCB0aGUgZW1haWwKK2FkZHJlc3NlcyBiZWxvdyBzbyB0aGF0IHRoZXkgd2lsbCBrbm93IHRvIHNlbmQgeW91IHRoZSBhcHByb3ByaWF0ZQorcHJvZ3JhbS4KKworUFJPR1JBTVM6CisKK0V4YW1wbGU6CitQUk9HUkFNUzogcGhyZWQsIHBocmFwLCBjb25zZWQKKworSU5TVElUVVRJT046IFlvdXIgYWNhZGVtaWMgb3IgZ292ZXJubWVudCBpbnN0aXR1dGlvbiAoZ2l2ZSBmdWxsIG5hbWUsCitub3QgYWJicmV2aWF0aW9uKQorCitJTlNUSVRVVElPTjogCisKK0V4YW1wbGU6CitJTlNUSVRVVElPTjogIFVuaXZlcnNpdHkgb2YgTG93ZXIgVHJhbnN5bHZhbmlhCisKK0RFUEFSVE1FTlQ6IFlvdXIgZGVwYXJ0bWVudAorCitERVBBUlRNRU5UOgorCitFeGFtcGxlOgorREVQQVJUTUVOVDogIERlcGFydG1lbnQgb2YgSGVtYXRvbG9neQorCitFTUFJTDogWW91ciBlbWFpbCBhZGRyZXNzIGZvciBhbGwgZnV0dXJlIGNvcnJlc3BvbmRlbmNlLiBJZGVhbGx5IHRoaXMKK3Nob3VsZCBiZSBhIFVuaXggY29tcHV0ZXIgcnVubmluZyBhIGdlbmVyaWMgbWFpbCBwcm9ncmFtLCBzaW5jZQorc2V2ZXJhbCBvZiB0aGUgcHJvZ3JhbXMgYXJlIHNlbnQgYXMgdXVlbmNvZGVkIGZpbGVzIHdoaWNoIG1heSBiZQorY29ycnVwdGVkIGJ5IHNvbWUgbWFpbCBwcm9ncmFtcy4KKyAgSWYgdGhpcyBhZGRyZXNzIGlzIG5vdCBhdCB0aGUgaW5zdGl0dXRpb24gJiBkZXBhcnRtZW50IGxpc3RlZCBhYm92ZSwKK3BsZWFzZSBleHBsYWluIHRoZSBkaXNjcmVwYW5jeS4KKworRU1BSUw6IAorCitFeGFtcGxlOgorRU1BSUw6IGpvaG4uZHJhY3VsYUB1dHJhbnMuZWR1CisKK09TOiAoQ29uc2VkIHJlcXVlc3RvcnMgb25seSkgV2hpY2ggcGxhdGZvcm0ocykgeW91IHdhbnQgQ29uc2VkIGZvcjoKK3NvbGFyaXMgMi41LjEsIHNvbGFyaXMgMi42LCBzb2xhcmlzIDIuNyAoc29sYXJpcyA3KSwgc29sYXJpcyA4LAorc29sYXJpcyA5LCBkaWdpdGFsIHVuaXggNC4wIChvciBiZXR0ZXIpLCBocC11eCAxMS54LCBzZ2kgaXJpeCA2LjIsCis2LjMsIDYuNCwgb3IgNi41LCBsaW51eCAobm9ybWFsIDMyIGJpdCkgKFJlZGhhdCA3LjEtMSBvciBiZXR0ZXIpLAorbGludXggKEl0YW5pdW0pLCBsaW51eCAoQU1ENjQpLCBpYm0gYWl4IDUuMiAob3IgYmV0dGVyKSwgbWFjb3N4IDEwLjIKKyhEYXJ3aW4ga2VybmVsIDYuMCkgKG9yIGJldHRlciksIG9yIHNvbGFyaXMtaW50ZWwgKDIuOCBvciBiZXR0ZXIpLgorCitPUzoKKworRXhhbXBsZToKK09TOiBocHV4CisKK05vdGU6IENvbnNlZCBpcyBub3QgYXZhaWxhYmxlIGZvciBQQydzIHJ1bm5pbmcgV2luZG93cywgWFAsIE5ULCBvcgorMjAwMC4KKworSVA6IChDb25zZWQgcmVxdWVzdG9ycyBvbmx5KSBUaGUgaXAgYWRkcmVzcyBvZiB0aGUgY29tcHV0ZXIgb24gd2hpY2gKK3lvdSB3aWxsIGJlIHJ1bm5pbmcgYSB3ZWIgYnJvd3NlciB0byBkb3dubG9hZCBjb25zZWQuICBUaGlzIGRvZXMgbm90CitoYXZlIHRvIGJlIHRoZSBzYW1lIGNvbXB1dGVyIGFzIHRoZSBvbmUgb24gd2hpY2ggeW91IHdpbGwgcnVuIGNvbnNlZC4KK1BsZWFzZSB2aWV3IHBhZ2UKK2h0dHA6Ly9ib3plbWFuLm1idC53YXNoaW5ndG9uLmVkdS9jb25zZWQvZmluZF9pcF9hZGRyZXNzLmh0bWwKK3doaWNoIHdpbGwgdGVsbCB5b3Ugd2hhdCBteSBjb21wdXRlciB0aGlua3MgaXMgeW91ciBpcCBhZGRyZXNzLgorCisoRXZlbiBpZiB5b3UgdGhpbmsgeW91IGtub3cgeW91ciBpcCBhZGRyZXNzLCBmaXJld2FsbHMgYW5kIHByb3hpZXMgY2FuCitjYXVzZSB5b3VyIGJyb3dzZXIgdG8gdHJhbnNtaXQgYSBkaWZmZXJlbnQgaXAgYWRkcmVzcywgYW5kIHRodXMgbXkKK3dlYnNlcnZlciB3b3VsZCBkZW55IHlvdSBhY2Nlc3MgdG8gY29uc2VkLiAgU28gaXQgd291bGQgYmUgYSBnb29kIGlkZWEKK3RvIHZpZXcgdGhlIHBhZ2UgYWJvdmUgYW5kIHNlbmQgbWUgdGhlIGlwIGFkZHJlc3MgaXQgc2hvd3MsIGV2ZW4gaWYKK3RoaXMgaXNuJ3QgeW91ciByZWFsIGlwIGFkZHJlc3MuKQorCitJUDoKKworRXhhbXBsZToKK0lQOiAxMjMuNDkuNzQuODAKKworCitJZiB5b3Ugd2FudCBDb25zZWQvQXV0b2ZpbmlzaCwgeW91IG11c3QgaW5jbHVkZSBPUyBhbmQgSVAgKGFib3ZlKS4KK0NvbnNlZCBjYW5ub3QgYmUgb2J0YWluZWQgd2l0aG91dCB0aGVtLgorCitQbGVhc2UgcmV0dXJuIHRoaXMgZW50aXJlIGFncmVlbWVudCBzbyBpdCBpcyBjbGVhciB3aGF0IHlvdSBhcmUKK2FncmVlaW5nIHRvLgorCitQbGVhc2Ugc2VuZCBhbGwgb2YgdGhpcywgaW5jbHVkaW5nIHRoZSBhZ3JlZW1lbnQsIGFzIHBhcnQgb2YgdGhlCitlbWFpbCBtZXNzYWdlLS1ub3QgYXMgYW4gYXR0YWNobWVudC4gIAorCitTZW5kIGl0IHRvIGVhY2ggb2YgdGhlIHJlbGV2YW50IGluZGl2aWR1YWxzIGJlbG93OgorCitDb250YWN0cyBmb3Igb2J0YWluaW5nIHRoZSBwcm9ncmFtcyBhbmQgZm9yIHF1ZXN0aW9ucywgYnVnIHJlcG9ydHMsCitzdWdnZXN0aW9uczoKKworICAgICAgUGhyYXAvY3Jvc3NfbWF0Y2gvc3dhdDogIFBoaWwgR3JlZW4sIHBoZyAoYXQpIHUud2FzaGluZ3Rvbi5lZHUKKyAgICAgIFBocmVkOiBCcmVudCBFd2luZywgYmdlIChhdCkgdS53YXNoaW5ndG9uLmVkdQorICAgICAgQ29uc2VkOiBEYXZpZCBHb3Jkb24sIGdvcmRvbiAoYXQpIGdlbm9tZS53YXNoaW5ndG9uLmVkdQorCit3aGVyZSB0aGUgIiAoYXQpICIgaXMgcmVwbGFjZWQgYnkgIkAiLgorCitJdCBjYW4gdGFrZSB1cCB0byAyIHdlZWtzIGZvciBhIGxpY2Vuc2UgYXBwbGljYXRpb24gdG8gYmUgcHJvY2Vzc2VkLAorc28gcGxlYXNlIGJlIHBhdGllbnQuCisKKworCisKKworCmRpZmYgLS1naXQgYS9saWNlbnNlcy9wa2NyYWNrIGIvbGljZW5zZXMvcGtjcmFjawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmUyZjJiCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvcGtjcmFjawpAQCAtMCwwICsxLDMgQEAKK1RoaXMgcGFja2FnZSB3YXMgd3JpdHRlbiBhbmQgaXMgY29weXJpZ2h0IGJ5IFBldGVyIENvbnJhZCA8Y29ucmFkQHVuaXgtYWcudW5pLWtsLmRlPi4gQ29tbWVyY2lhbCB1c2UgaW4gYW55IGZvcm0gaXMgCitzdHJpY3RseSBmb3JiaWRkZW4hIFlvdSBtYXkgdXNlIHBhcnRzIG9mIHRoZSBjb2RlIGluIHlvdXIgb3duIHByb2dyYW1zIGZvciBub24tY29tbWVyY2lhbCB1c2UgaW4gY2FzZSB5b3UgY2xlYXJseSBzdGF0ZSAKK3doZXJlIHlvdSBnb3QgaXQuIERvIG5vdCByZWxlYXNlIHNvZnR3YXJlIHVzaW5nIHBhcnRzIG9mIHRoZSBjb2RlIHdpdGhvdXQgdGhlIGF1dGhvcidzIGV4cGxpY2l0IGNvbnNlbnQuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9wbWQgYi9saWNlbnNlcy9wbWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDllOTFkMAotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL3BtZApAQCAtMCwwICsxLDMxIEBACitDb3B5cmlnaHQgKGMpIDIwMDMsIEluZm9FdGhlciwgTExDCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKK21ldDoKKworICAgICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKK25vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Citub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCitkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICAgICogVGhlIGVuZC11c2VyIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24sIGlmCithbnksIG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAgICAgICJUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGluIHBhcnQgYnkgc3VwcG9ydCBmcm9tCit0aGUgRGVmZW5zZSBBZHZhbmNlZCBSZXNlYXJjaCBQcm9qZWN0IEFnZW5jeSAoREFSUEEpIgorICAgICogTmVpdGhlciB0aGUgbmFtZSBvZiBJbmZvRXRoZXIsIExMQyBub3IgdGhlIG5hbWVzIG9mIGl0cworY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KK3RoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTCitJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKK1RPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQorUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSCitPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKK0VYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKK1BST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRgorTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcKK05FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUworU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvcG9zdGFsMiBiL2xpY2Vuc2VzL3Bvc3RhbDIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUyZTE3YwotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL3Bvc3RhbDIKQEAgLTAsMCArMSwyMTEgQEAKK1NvZnR3YXJlIExpY2Vuc2UgQWdyZWVtZW50CisKKzEuCVJFQUQgVEhFIEZPTExPV0lORyBURVJNUyBBTkQgQ09ORElUSU9OUyBDQVJFRlVMTFkgQkVGT1JFCitJTlNUQUxMSU5HIFRIRSBQUk9HUkFNLiBUSElTIFNPRlRXQVJFIExJQ0VOU0UgQUdSRUVNRU5UIElTIEEgTEVHQUwKK0FHUkVFTUVOVCBCRVRXRUVOIFlPVSAoQU4gSU5ESVZJRFVBTCBPUiBBIFNJTkdMRSBFTlRJVFkgIllPVSIpIE9OIE9ORQorSEFORCwgQU5EIFJXUywgSU5DLiBBTkQgSVRTIFNVQlNJRElBUklFUywgQU5EIEFGRklMSUFURVMgKENPTExFQ1RJVkVMWQorUkVGRVJSRUQgVE8gQVMgIkNPTVBBTlkiKSBPTiBUSEUgT1RIRVIgSEFORCwgRk9SIFRIRSBTT0ZUV0FSRSBQUk9EVUNUCitFTlRJVExFRCAiUE9TVEFMIDIsIiBXSElDSCBJTkNMVURFUyBDT01QVVRFUiBTT0ZUV0FSRSBBTkQgQU5ZIEFTU09DSUFURUQKK01FRElBIEFORC9PUiBQUklOVEVEIE1BVEVSSUFMUyAoVE9HRVRIRVIgQ0FMTEVEICJQUk9HUkFNIikuIEJZIE9QRU5JTkcKK1RIRSBQQUNLQUdJTkcgTUFURVJJQUxTIEZPUiBUSEUgUFJPR1JBTSwgT1IgSU5TVEFMTElORywgQ09QWUlORywgT1IKK09USEVSV0lTRSBVU0lORyBUSEUgUFJPR1JBTSwgWU9VIEFDS05PV0xFREdFIFRIQVQgWU9VIEhBVkUgUkVBRCBUSElTCitTT0ZUV0FSRSBMSUNFTlNFIEFHUkVFTUVOVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgSVRTIFRFUk1TLglJRiBZT1UKK0RPIE5PVCBBR1JFRSBUTyBUSEUgVEVSTVMgT0YgVEhJUyBTT0ZUV0FSRSBMSUNFTlNFIEFHUkVFTUVOVCwgRE8gTk9UCitJTlNUQUxMIE9SIFVTRSBUSEUgUFJPR1JBTSBBTkQgREVMRVRFIEFMTCBDT1BJRVMgSU4gWU9VUiBQT1NTRVNTSU9OLgorMi4JQ29tcGFueSBncmFudHMgeW91IGEgbm9uLWV4Y2x1c2l2ZSwgbm9uLXRyYW5zZmVyYWJsZSBsaWNlbnNlIHRvCit1c2UgdGhlIFByb2dyYW0sIGJ1dCByZXRhaW5zIGFsbCBwcm9wZXJ0eSByaWdodHMgaW4gdGhlIFByb2dyYW0gYW5kIGFsbAorY29waWVzIHRoZXJlb2YuICBZb3UgbWF5IGluc3RhbGwgdGhlIFByb2dyYW0gb24gYSBzaW5nbGUgY29tcHV0ZXIgZm9yCit1c2UgYnkgYSBzaW5nbGUsIHBhcnRpY3VsYXIgdXNlci4gIEFsbCByaWdodHMgbm90IHNwZWNpZmljYWxseSBncmFudGVkCit1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQgYnkgQ29tcGFueSBhbmQsIGFzIGFwcGxpY2FibGUsCitDb21wYW55J3MgbGljZW5zb3JzLiBUaGlzIFByb2dyYW0gaXMgbGljZW5zZWQsIG5vdCBzb2xkLCBmb3IgeW91ciB1c2UuCitZb3VyIGxpY2Vuc2UgY29uZmVycyBubyB0aXRsZSBvciBvd25lcnNoaXAgaW4gdGhpcyBQcm9ncmFtIGFuZCBzaG91bGQKK25vdCBiZSBjb25zdHJ1ZWQgYXMgYSBzYWxlIG9mIGFueSByaWdodHMgaW4gdGhpcyBQcm9ncmFtLgorMy4JWW91IGFja25vd2xlZGdlIHRoYXQgdGhlIFByb2dyYW0gaW4gc291cmNlIGNvZGUgZm9ybSByZW1haW5zIGEKK2NvbmZpZGVudGlhbCB0cmFkZSBzZWNyZXQgb2YgQ29tcGFueS4gWW91IGFncmVlIG5vdCB0byBtb2RpZnkgb3IgYXR0ZW1wdAordG8gcmV2ZXJzZSBlbmdpbmVlciwgZGVjb21waWxlLCBvciBkaXNhc3NlbWJsZSB0aGUgUHJvZ3JhbSwgZXhjZXB0IGFuZAorb25seSB0byB0aGUgZXh0ZW50IHRoYXQgc3VjaCBhY3Rpdml0eSBpcyBleHByZXNzbHkgcGVybWl0dGVkIGJ5CithcHBsaWNhYmxlIGxhdyBub3R3aXRoc3RhbmRpbmcgdGhpcyBsaW1pdGF0aW9uLgorNC4JT1dORVJTSElQLiBBbGwgcmlnaHQsIHRpdGxlIGFuZCBpbnRlcmVzdCBhbmQgaW50ZWxsZWN0dWFsCitwcm9wZXJ0eSByaWdodHMgaW4gYW5kIHRvIHRoZSBQcm9ncmFtIChpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvIGFueQordGl0bGVzLCBjb21wdXRlciBjb2RlLCB0aGVtZXMsIG9iamVjdHMsIGNoYXJhY3RlcnMsIGNoYXJhY3RlciBuYW1lcywKK3N0b3JpZXMsIGRpYWxvZywgY2F0Y2ggcGhyYXNlcywgbG9jYXRpb25zLCBjb25jZXB0cywgYXJ0d29yaywgaW1hZ2VzLAorcGhvdG9ncmFwaHMsIGFuaW1hdGlvbnMsIHZpZGVvLCBzb3VuZHMsIGF1ZGlvLXZpc3VhbCBlZmZlY3RzLCBtdXNpYywKK211c2ljYWwgY29tcG9zaXRpb25zLCB0ZXh0IGFuZCAiYXBwbGV0cywiIGluY29ycG9yYXRlZCBpbnRvIHRoZQorUHJvZ3JhbSksIHRoZSBhY2NvbXBhbnlpbmcgcHJpbnRlZCBtYXRlcmlhbHMsIGFuZCBhbnkgY29waWVzIG9mIHRoZQorUHJvZ3JhbSwgYXJlIG93bmVkIGJ5IENvbXBhbnkgb3IgaXRzIGxpY2Vuc29ycy4gVGhpcyBBZ3JlZW1lbnQgZ3JhbnRzCit5b3Ugbm8gcmlnaHRzIHRvIHVzZSBzdWNoIGNvbnRlbnQgb3RoZXIgdGhhbiBhcyBwYXJ0IG9mIHRoZSBQcm9ncmFtLiBBbGwKK3JpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlIHJlc2VydmVkIGJ5CitDb21wYW55LgorNS4JVGhpcyBBZ3JlZW1lbnQgaXMgZWZmZWN0aXZlIHVwb24geW91ciBvcGVuaW5nIG9mIHRoZSBwYWNrYWdpbmcKK21hdGVyaWFscywgaW5zdGFsbGF0aW9uLCBvciB5b3VyIGZpcnN0IHVzZSBvZiB0aGUgUHJvZ3JhbSBhbmQgc2hhbGwKK2NvbnRpbnVlIHVudGlsIHJldm9rZWQgYnkgQ29tcGFueSBvciB1bnRpbCB5b3UgYnJlYWNoIGFueSB0ZXJtIGhlcmVvZjsKK3Vwb24gdGVybWluYXRpb24geW91IGFncmVlIHRvIGRlc3Ryb3kgb3IgZGVsZXRlIGFsbCBjb3BpZXMgb2YgdGhlCitQcm9ncmFtIGluIHlvdXIgcG9zc2Vzc2lvbi4KKzYuCUV4Y2VwdCBhcyBzcGVjaWZpY2FsbHkgc2V0IGZvcnRoIGhlcmVpbiwgeW91IHNoYWxsIG5vdCBtb2RpZnkKK3RoZSBQcm9ncmFtIG9yIG1lcmdlIHRoZSBQcm9ncmFtIGludG8gYW5vdGhlciBjb21wdXRlciBwcm9ncmFtIChleGNlcHQKK3RvIHRoZSBleHRlbnQgdGhlIFByb2dyYW0gaXMgbWFkZSB0byBvcGVyYXRlIHdpdGhpbiBhIGNvbXB1dGVyIG9wZXJhdGluZworc3lzdGVtIGFuZCBpbiBjb25uZWN0aW9uIHdpdGggb3RoZXIgY29tcHV0ZXIgcHJvZ3JhbXMpIG9yIGNyZWF0ZQorZGVyaXZhdGl2ZSB3b3JrcyBiYXNlZCB1cG9uIHRoZSBQcm9ncmFtLiAgU3ViamVjdCB0byB0aGUgdGVybXMgYW5kCitjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50IGFuZCBzbyBsb25nIGFzIHlvdSBmdWxseSBjb21wbHkgYXQgYWxsCit0aW1lcyB3aXRoIGFsbCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQsIENvbXBhbnkKK2dyYW50cyB5b3UgYSBsaW1pdGVkLCByZXZvY2FibGUsIG5vbi1leGNsdXNpdmUgYW5kIGxpbWl0ZWQgcmlnaHQgdG8KK2NyZWF0ZSBmb3IgdGhlIFByb2dyYW0gKGJ1dCBzcGVjaWZpY2FsbHkgZXhjbHVkaW5nIHRoZSByaWdodCB0byB1c2UgYW55Citzb2Z0d2FyZSBjb2RlIGZyb20gdGhlIFByb2dyYW0pIHlvdXIgb3duIG1vZGlmaWNhdGlvbnMgYW5kIGxldmVscworKCJEZXJpdmF0aXZlIE1hdGVyaWFscyIpIHdoaWNoIHNoYWxsIG9wZXJhdGUgc29sZWx5IHdpdGggdGhlIFByb2dyYW0gYW5kCitub3QgYW55IG90aGVyIHZlcnNpb24gb2YgdGhlIFByb2dyYW0sIGluY2x1ZGluZywgZGVtb3Mgb3IgdXBkYXRlZAordmVyc2lvbnMuICBZb3UgcmVwcmVzZW50IGFuZCB3YXJyYW50IHRoYXQgdGhlIERlcml2YXRpdmUgTWF0ZXJpYWxzIHNoYWxsCisoaSkgbm90IGluZnJpbmdlIG9uIHRoZSByaWdodHMgb2YgYW55IHRoaXJkIHBhcnRpZXM7IChpaSkgbm90IGJlCitsaWJlbG91cywgZGVmYW1hdG9yeSwgb2JzY2VuZSwgZmFsc2UsIG1pc2xlYWRpbmcsIG9yIG90aGVyd2lzZSBpbGxlZ2FsCitvciB1bmxhd2Z1bDsgKGlpaSkgbm90IGJlIGRvd25sb2FkZWQsIHNoaXBwZWQsIHRyYW5zZmVycmVkLCBleHBvcnRlZCBvcgorcmUtZXhwb3J0ZWQgaW4gdmlvbGF0aW9uIG9mIGFueSBsYXdzIGdvdmVybmluZyBzdWNoIG1hdHRlcnMsIGluY2x1ZGluZwordGhlIFUuUy4gRXhwb3J0IEFkbWluaXN0cmF0aW9uIEFjdDsgKGl2KSBub3QgYmUgcmVudGVkLCBzb2xkLCBsZWFzZWQsCitsaWNlbnNlZCwgc3VibGljZW5zZWQsIG9yIG90aGVyd2lzZSBjb21tZXJjaWFsbHkgZXhwbG9pdGVkLiAgWW91IHNoYWxsCitmdWxseSBpbmRlbW5pZnkgdGhlIENvbXBhbnkgYW5kIGl0cyBkaXN0cmlidXRvcnMsIGxpY2Vuc29ycywgbGljZW5zZWVzCithbmQgdGhlaXIgcmVzcGVjdGl2ZSBvZmZpY2VycywgZGlyZWN0b3JzLCAgaW4gY29ubmVjdGlvbiB3aXRoIGFueSBhbmQKK2FsbCBjbGFpbXMgYXJpc2luZyBmcm9tIG9yIGJhc2VkIG9uIHRoZSBEZXJpdmF0aXZlIE1hdGVyaWFscy4gIFlvdQorYWNrbm93bGVkZ2UgdGhhdCB5b3UgYXJlIG9ubHkgZ3JhbnRlZCBhIGxpY2Vuc2UgdG8gY3JlYXRlIHRoZSBEZXJpdmF0aXZlCitNYXRlcmlhbHMgYW5kIHRoYXQgeW91IHNoYWxsIG5vdCBvd24gdGhlIERlcml2YXRpdmUgTWF0ZXJpYWxzLglBbnkKK2JyZWFjaCBvZiB0aGlzIEFncmVlbWVudCBieSB5b3Ugc2hhbGwgcmVzdWx0IGluIHRoZSBhdXRvbWF0aWMKK3Rlcm1pbmF0aW9uIG9mIHN1Y2ggbGljZW5zZSwgd2l0aG91dCBub3RpY2Ugb3IgYW55IGZ1cnRoZXIgYWN0aW9uLCBhbmQKK3lvdSBzaGFsbCBub3QgaGF2ZSBhbnkgcmlnaHQgdG8gdXNlIHRoZSBQcm9ncmFtIG9yIGFueSBEZXJpdmF0aXZlCitNYXRlcmlhbHMuCis3LglEbyBub3QgcnVuLCB1c2UsIG9yIGluc3RhbGwgdGhlIFByb2dyYW0gaWYgeW91IHJlc2lkZSBpbiBhCitjb3VudHJ5IHRvIHdoaWNoIHRoZSB1c2Ugb3IgaW5zdGFsbGF0aW9uIG9mIHRoZSBQcm9ncmFtIHdvdWxkIHZpb2xhdGUKK1UuUy4gZXhwb3J0IGxhd3Mgb3IgcmVndWxhdGlvbnMsIGFuZCBkbyBub3QgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpbgordmlvbGF0aW9uIG9mIHN1Y2ggbGF3cyBvciByZWd1bGF0aW9ucy4gVGhlIFByb2dyYW0gbWF5IG5vdCBiZQordHJhbnNmZXJyZWQgb3Igb3RoZXJ3aXNlIGV4cG9ydGVkIG9yIHJlLWV4cG9ydGVkIGludG8gKG9yIHRvIGEgbmF0aW9uYWwKK29yIHJlc2lkZW50IG9mKSBhbnkgY291bnRyeSB0byB3aGljaCB0aGUgVS5TLiBoYXMgZW1iYXJnb2VkIGdvb2RzIG9yIHRvCithbnlvbmUgb24gdGhlIFUuUy4gVHJlYXN1cnkgRGVwYXJ0bWVudCBsaXN0IG9mIFNwZWNpYWxseSBEZXNpZ25hdGVkCitOYXRpb25hbHMgb3IgdGhlIFUuUy4gQ29tbWVyY2UgRGVwYXJ0bWVudCdzIFRhYmxlIG9mIERlbnkgT3JkZXJzLiBJZiB5b3UKK2RvIG5vdCBtZWV0IHRoZXNlIGNyaXRlcmlhIG9yIGFyZSBub3Qgc3VyZSwgZG8gbm90IHJ1biBvciBpbnN0YWxsIHRoZQorc29mdHdhcmUgYW5kIGRlc3Ryb3kgYW55IGNvcGllcyBpbiB5b3VyIHBvc3Nlc3Npb24uICBJZiB5b3UgbGl2ZSBpbiBzdWNoCithIGNvdW50cnksIG5vIGxpY2Vuc2UgaXMgZ3JhbnRlZCBoZXJldW5kZXIuCis4LglUbyB0aGUgbWF4aW11bSBleHRlbnQgYWxsb3dlZCBieSBsYXcsIENvbXBhbnksIGl0cyBsaWNlbnNvcnMgYW5kCitzdWJjb250cmFjdG9ycyBkbyBub3Qgd2FycmFudCBhbnkgY29ubmVjdGlvbiB0bywgdHJhbnNtaXNzaW9uIG92ZXIsIG9yCityZXN1bHRzIG9yIHVzZSBvZiwgYW55IG5ldHdvcmsgY29ubmVjdGlvbiBvciBmYWNpbGl0aWVzIHByb3ZpZGVkIChvcgorZmFpbGVkIHRvIGJlIHByb3ZpZGVkKSB0aHJvdWdoIHRoZSBQcm9ncmFtLiBZb3UgYXJlIHJlc3BvbnNpYmxlIGZvcgorYXNzZXNzaW5nIHlvdXIgb3duIGNvbXB1dGVyIG5lZWRzIGFuZCwgaWYgYXBwbGljYWJsZSwgdHJhbnNtaXNzaW9uCituZXR3b3JrIG5lZWRzLCBhbmQgdGhlIHJlc3VsdHMgdG8gYmUgb2J0YWluZWQgdGhlcmVmcm9tLiBZT1UgRVhQUkVTU0xZCitBR1JFRSBUSEFUIFVTRSBPRiBUSEUgUFJPR1JBTSBJUyBBVCBZT1VSIFNPTEUgUklTSy4gVEhFIFBST0dSQU0gSVMKK1BST1ZJREVEIE9OIEFOICJBUyBJUywiICJBUyBBVkFJTEFCTEUiIEJBU0lTLCBVTkxFU1MgU1VDSCBXQVJSQU5USUVTIEFSRQorTEVHQUxMWSBJTkNBUEFCTEUgT0YgRVhDTFVTSU9OLiBFWENFUFQgV0lUSCBSRVNQRUNUIFRPIFRIRSBMSU1JVEVECitDRC1ST00gV0FSUkFOVFkgQVMgU0VUIEZPUlRIIElOIFNFQ1RJT04gOSBCRUxPVywgQ09NUEFOWSBBTkQgSVRTCitMSUNFTlNPUlMgRElTQ0xBSU0gQUxMIFdBUlJBTlRJRVMgQU5EIENPTkRJVElPTlMsIFdIRVRIRVIgT1JBTCBPUgorV1JJVFRFTiwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIEFOWSBJTVBMSUVECitXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UsIE5PTi1JTkZSSU5HRU1FTlQgT0YgVEhJUkQgUEFSVFkgUklHSFRTLCBBTkQgVEhPU0UgQVJJU0lORyBGUk9NCitBIENPVVJTRSBPRiBERUFMSU5HIE9SIFVTQUdFIE9GIFRSQURFLCBSRUdBUkRJTkcgVEhFIFBST0dSQU0uIENPTVBBTlkKK0FORCBJVFMgTElDRU5TT1JTIEFTU1VNRSBOTyBSRVNQT05TSUJJTElUWSBGT1IgQU5ZIERBTUFHRVMgU1VGRkVSRUQgQlkKK1lPVSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIExPU1MgT0YgREFUQSwgSVRFTVMgT1IgT1RIRVIKK01BVEVSSUFMUyBGUk9NIERFTEFZUywgTk9OLURFTElWRVJJRVMsIEVSUk9SUywgQ0FVU0VEIEJZIENPTVBBTlksIElUUworTElDRU5TT1JTLCBMSUNFTlNFRSBBTkQvT1IgU1VCQ09OVFJBQ1RPUlMsIE9SIEJZIFlPVVIgT1dOIEVSUk9SUyBBTkQvT1IKK09NSVNTSU9OUy4gQ29tcGFueSBhbmQgaXRzIExpY2Vuc29ycyBtYWtlIG5vIHdhcnJhbnR5IHdpdGggcmVzcGVjdCB0bworYW55IHJlbGF0ZWQgc29mdHdhcmUgb3IgaGFyZHdhcmUgdXNlZCBvciBwcm92aWRlZCBieSBDb21wYW55IGluCitjb25uZWN0aW9uIHdpdGggdGhlIFByb2dyYW0gZXhjZXB0IGFzIGV4cHJlc3NseSBzZXQgZm9ydGggYWJvdmUuCis5LglMSU1JVEVEIENELVJPTSBXQVJSQU5UWS4gTm90d2l0aHN0YW5kaW5nIGFueXRoaW5nIHRvIHRoZQorY29udHJhcnkgY29udGFpbmVkIGhlcmVpbiwgYW5kIHNvbGVseSB3aXRoIHJlc3BlY3QgdG8gUHJvZ3JhbXMKK2Rpc3RyaWJ1dGVkIG9uIENELVJPTSwgQ29tcGFueSB3YXJyYW50cyB0byB0aGUgb3JpZ2luYWwgY29uc3VtZXIKK3B1cmNoYXNlciBvZiB0aGlzIFByb2dyYW0gb24gQ0QtUk9NIHRoYXQgdGhlIHJlY29yZGluZyBtZWRpdW0gb24gd2hpY2gKK3RoZSBQcm9ncmFtIGlzIHJlY29yZGVkIHdpbGwgYmUgZnJlZSBmcm9tIGRlZmVjdHMgaW4gbWF0ZXJpYWwgYW5kCit3b3JrbWFuc2hpcCBmb3IgOTAgZGF5cyBmcm9tIHRoZSBkYXRlIG9mIHB1cmNoYXNlLiBJZiB0aGUgcmVjb3JkaW5nCittZWRpdW0gaXMgZm91bmQgZGVmZWN0aXZlIHdpdGhpbiA5MCBkYXlzIG9mIG9yaWdpbmFsIHB1cmNoYXNlLCB5b3UgbWF5CityZXR1cm4gdGhlIFByb2dyYW0gYW5kIGFsbCBhY2NvbXBhbnlpbmcgbWF0ZXJpYWxzIGFsb25nIHdpdGggeW91cgorb3JpZ2luYWwgcmVjZWlwdCB0byB0aGUgcGxhY2UgeW91IG9idGFpbmVkIGl0IGZvciBhIGZ1bGwgcmVmdW5kIG9yCityZXBsYWNlbWVudCwgc3ViamVjdCB0byBzdWNoIHJldGFpbGVycyByZXR1cm4gcG9saWN5LiBUaGlzIHdhcnJhbnR5IGlzCitsaW1pdGVkIHRvIHRoZSByZWNvcmRpbmcgbWVkaXVtIGNvbnRhaW5pbmcgdGhlIFByb2dyYW0gYXMgb3JpZ2luYWxseQorcHJvdmlkZWQgYnkgQ29tcGFueSBhbmQgaXMgbm90IGFwcGxpY2FibGUgdG8gbm9ybWFsIHdlYXIgYW5kIHRlYXIuIFRoaXMKK3dhcnJhbnR5IHNoYWxsIG5vdCBiZSBhcHBsaWNhYmxlIGFuZCBzaGFsbCBiZSB2b2lkIGlmIHRoZSBkZWZlY3QgaGFzCithcmlzZW4gdGhyb3VnaCBhYnVzZSwgbWlzdHJlYXRtZW50LCBvciBuZWdsZWN0LiBBbnkgaW1wbGllZCB3YXJyYW50aWVzCitwcmVzY3JpYmVkIGJ5IHN0YXR1dGUgYXJlIGV4cHJlc3NseSBsaW1pdGVkIHRvIHRoZSA5MC1kYXkgcGVyaW9kCitkZXNjcmliZWQgYWJvdmUuCisxMC4JTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuICBZT1UgQUNLTk9XTEVER0UgQU5EIEFHUkVFIFRIQVQgQ09NUEFOWQorQU5EIElUUyBMSUNFTlNPUlMgU0hBTEwgTk9UIEFTU1VNRSBPUiBIQVZFIEFOWSBMSUFCSUxJVFkgRk9SIEFOWSBBQ1RJT04KK0JZIENPTVBBTlkgT1IgSVRTIENPTlRFTlQgUFJPVklERVJTLCBPVEhFUiBQQVJUSUNJUEFOVFMgT1IgT1RIRVIKK0xJQ0VOU09SUyBXSVRIIFJFU1BFQ1QgVE8gQ09ORFVDVCwgQ09NTVVOSUNBVElPTiBPUiBDT05URU5UIE9GIFRIRQorUFJPR1JBTS4gQ09NUEFOWSBBTkQgSVRTIExJQ0VOU09SUyBTSEFMTCBOT1QgQkUgTElBQkxFIEZPUiBBTlkgSU5ESVJFQ1QsCitJTkNJREVOVEFMLCBTUEVDSUFMLCBQVU5JVElWRSwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKK1JFU1VMVElORyBGUk9NIFBPU1NFU1NJT04sIFVTRSwgT1IgTUFMRlVOQ1RJT04gT0YgVEhFIFBST0dSQU0sIElOQ0xVRElORworREFNQUdFUyBUTyBQUk9QRVJUWSwgTE9TUyBPRiBHT09EV0lMTCwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTgorQU5ELCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBMQVcsIERBTUFHRVMgRk9SIFBFUlNPTkFMIElOSlVSSUVTLCBFVkVOCitJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIEVYQ0VQVCBBUyBFWFBSRVNTTFkKK1BST1ZJREVEIEhFUkVJTiwgQ09NUEFOWSdTIEFORCBJVFMgTElDRU5TT1JTJyBFTlRJUkUgTElBQklMSVRZIFRPIFlPVQorQU5EIFlPVVIgRVhDTFVTSVZFIFJFTUVEWSBGT1IgQU5ZIEJSRUFDSCBPRiBUSElTIEFHUkVFTUVOVCBJUyBMSU1JVEVECitTT0xFTFkgVE8gVEhFIFRPVEFMIEFNT1VOVCBQQUlEIEJZIFlPVSBGT1IgVEhFIFBST0dSQU0sIElGIEFOWS4gQkVDQVVTRQorU09NRSBTVEFURVMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgRk9SCitDRVJUQUlOIERBTUFHRVMsIElOIFNVQ0ggU1RBVEVTIENPTVBBTlknUyBBTkQgSVRTIExJQ0VOU09SUycgTElBQklMSVRZCitJUyBMSU1JVEVEIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIExBVy4KKzExLglJTkpVTkNUSU9OLiBCZWNhdXNlIENvbXBhbnkgd291bGQgYmUgaXJyZXBhcmFibHkgZGFtYWdlZCBpZiB0aGUKK3Rlcm1zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgd2VyZSBub3Qgc3BlY2lmaWNhbGx5IGVuZm9yY2VkLCB5b3UKK2FncmVlIHRoYXQgQ29tcGFueSBzaGFsbCBiZSBlbnRpdGxlZCwgd2l0aG91dCBib25kLCBvdGhlciBzZWN1cml0eSBvcgorcHJvb2Ygb2YgZGFtYWdlcywgdG8gYXBwcm9wcmlhdGUgZXF1aXRhYmxlIHJlbWVkaWVzIHdpdGggcmVzcGVjdCB0bworYnJlYWNoZXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGluIGFkZGl0aW9uIHRvIHN1Y2ggb3RoZXIgcmVtZWRpZXMgYXMKK0NvbXBhbnkgbWF5IG90aGVyd2lzZSBoYXZlIHVuZGVyIGFwcGxpY2FibGUgbGF3cy4KKzEyLglJTkRFTU5JVFkuIEF0IENvbXBhbnkncyByZXF1ZXN0LCB5b3UgYWdyZWUgdG8gZGVmZW5kLCBpbmRlbW5pZnkKK2FuZCBob2xkIGhhcm1sZXNzIENvbXBhbnksIGl0cyBhZmZpbGlhdGVzLCBjb250cmFjdG9ycywgb2ZmaWNlcnMsCitkaXJlY3RvcnMsIGVtcGxveWVlcywgYWdlbnRzLCBsaWNlbnNvcnMsIGxpY2Vuc2VlcywgZGlzdHJpYnV0b3JzLAorY29udGVudCBwcm92aWRlcnMsIGFuZCBvdGhlciB1c2VycyBvZiB0aGUgUHJvZ3JhbSwgZnJvbSBhbGwgZGFtYWdlcywKK2xvc3NlcywgbGlhYmlsaXRpZXMsIGNsYWltcyBhbmQgZXhwZW5zZXMsIGluY2x1ZGluZyBhdHRvcm5leXMnIGZlZXMsCithcmlzaW5nIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgZnJvbSB5b3VyIGFjdHMgYW5kIG9taXNzaW9ucyB0byBhY3QgaW4KK3VzaW5nIHRoZSBQcm9ncmFtIHB1cnN1YW50IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgQWdyZWVtZW50IG9yIGFueQorYnJlYWNoIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgYnkgeW91LiBDb21wYW55IHJlc2VydmVzIHRoZSByaWdodCwgYXQKK2l0cyBvd24gZXhwZW5zZSwgdG8gYXNzdW1lIHRoZSBleGNsdXNpdmUgZGVmZW5zZSBhbmQgY29udHJvbCBvZiBhbnkKK21hdHRlciBvdGhlcndpc2Ugc3ViamVjdCB0byBpbmRlbW5pZmljYXRpb24gYnkgeW91IGhlcmV1bmRlciwgYW5kIGluCitzdWNoIGV2ZW50LCB5b3Ugc2hhbGwgaGF2ZSBubyBmdXJ0aGVyIG9ibGlnYXRpb24gdG8gcHJvdmlkZQoraW5kZW1uaWZpY2F0aW9uIGZvciBzdWNoIG1hdHRlci4KKzEzLglVLlMuIEdPVkVSTk1FTlQgUkVTVFJJQ1RFRCBSSUdIVFMuIFRoZSBQcm9ncmFtIGFuZCBkb2N1bWVudGF0aW9uCitoYXZlIGJlZW4gZGV2ZWxvcGVkIGVudGlyZWx5IGF0IHByaXZhdGUgZXhwZW5zZSBhbmQgYXJlIHByb3ZpZGVkIGFzCisiQ29tbWVyY2lhbCBDb21wdXRlciBTb2Z0d2FyZSIgb3IgInJlc3RyaWN0ZWQgY29tcHV0ZXIgc29mdHdhcmUuIiBVc2UsCitkdXBsaWNhdGlvbiBvciBkaXNjbG9zdXJlIGJ5IHRoZSBVLlMuIEdvdmVybm1lbnQgb3IgYSBVLlMuIEdvdmVybm1lbnQKK3N1YmNvbnRyYWN0b3IgaXMgc3ViamVjdCB0byB0aGUgcmVzdHJpY3Rpb25zIHNldCBmb3J0aCBpbiBzdWJwYXJhZ3JhcGgKKyhjKSgxKShpaSkgb2YgdGhlIFJpZ2h0cyBpbiBUZWNobmljYWwgRGF0YSBhbmQgQ29tcHV0ZXIgU29mdHdhcmUgY2xhdXNlcworaW4gREZBUlMgMjUyLjIyNy03MDEzIG9yIGFzIHNldCBmb3J0aCBpbiBzdWJwYXJhZ3JhcGggKGMpKDEpIGFuZCAoMikgb2YKK3RoZSBDb21tZXJjaWFsIENvbXB1dGVyIFNvZnR3YXJlIFJlc3RyaWN0ZWQgUmlnaHRzIGNsYXVzZXMgYXQgRkFSCis1Mi4yMjctMTksIGFzIGFwcGxpY2FibGUuIFRoZSBDb250cmFjdG9yIC8gTWFudWZhY3R1cmVyIGlzIFJXUywgSW5jLiBQTworNjQzMDksIFR1Y3NvbiwgQVogIDg1NzI4LgorMTQuCVRFUk1JTkFUSU9OLiBXaXRob3V0IHByZWp1ZGljZSB0byBhbnkgb3RoZXIgcmlnaHRzIG9mIENvbXBhbnksCit0aGlzIExpY2Vuc2UgQWdyZWVtZW50IGFuZCB5b3VyIHJpZ2h0IHRvIHVzZSB0aGUgUHJvZ3JhbSBtYXkKK2F1dG9tYXRpY2FsbHkgdGVybWluYXRlIHdpdGhvdXQgbm90aWNlIGZyb20gQ29tcGFueSBpZiB5b3UgZmFpbCB0bworY29tcGx5IHdpdGggYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCwgb3IgYW55IHRlcm1zIGFuZCBjb25kaXRpb25zCithc3NvY2lhdGVkIHdpdGggdGhlIFByb2dyYW0uIEluIHN1Y2ggZXZlbnQsIHlvdSBtdXN0IGRlc3Ryb3kgYWxsIGNvcGllcworb2YgdGhpcyBQcm9ncmFtIGFuZCBhbGwgb2YgaXRzIGNvbXBvbmVudCBwYXJ0cy4KKzE1LglHRU5FUkFMIFBST1ZJU0lPTlMuIFlvdSBtYXkgbm90IHVzZSwgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLAorcmVudCwgc2VsbCwgYXNzaWduIG9yIHRyYW5zZmVyIHRoZSByaWdodHMgb3Igb2JsaWdhdGlvbnMgZ3JhbnRlZCB0byB5b3UKK2luIHRoaXMgQWdyZWVtZW50LCBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIGluIHRoaXMgQWdyZWVtZW50LiBBbnkKK2Fzc2lnbm1lbnQgaW4gdmlvbGF0aW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIHZvaWQsIGV4Y2VwdCB0aGF0IHlvdSBtYXkKK3RyYW5zZmVyIHlvdXIgUHJvZ3JhbSB0byBhbm90aGVyIHBlcnNvbiBwcm92aWRlZCB0aGF0IHBlcnNvbiBhY2NlcHRzIHRoZQordGVybXMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudC4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcworaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlIGZvciBhbnkgcmVhc29uLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZQorcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLCBhbmQgc3VjaAorZGVjaXNpb24gc2hhbGwgbm90IGFmZmVjdCB0aGUgZW5mb3JjZWFiaWxpdHkgb2Y6IChpKSBzdWNoIHByb3Zpc2lvbgordW5kZXIgb3RoZXIgY2lyY3Vtc3RhbmNlcywgb3IgKGlpKSB0aGUgcmVtYWluaW5nIHByb3Zpc2lvbnMgaGVyZW9mIHVuZGVyCithbGwgY2lyY3Vtc3RhbmNlcy4gQ29tcGFueSdzIGZhaWx1cmUgdG8gZW5mb3JjZSBhdCBhbnkgdGltZSBhbnkgb2YgdGhlCitwcm92aXNpb25zIG9mIHRoaXMgQWdyZWVtZW50IHNoYWxsIGluIG5vIHdheSBiZSBjb25zdHJ1ZWQgdG8gYmUgYQorcHJlc2VudCBvciBmdXR1cmUgd2FpdmVyIG9mIHN1Y2ggcHJvdmlzaW9ucywgbm9yIGluIGFueSB3YXkgYWZmZWN0IHRoZQorcmlnaHQgb2YgYW55IHBhcnR5IHRvIGVuZm9yY2UgZWFjaCBhbmQgZXZlcnkgc3VjaCBwcm92aXNpb24gdGhlcmVhZnRlci4KK1RoZSBleHByZXNzIHdhaXZlciBieSBDb21wYW55IG9mIGFueSBwcm92aXNpb24sIGNvbmRpdGlvbiBvciByZXF1aXJlbWVudAorb2YgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgbm90IGNvbnN0aXR1dGUgYSB3YWl2ZXIgb2YgYW55IGZ1dHVyZSBvYmxpZ2F0aW9uCit0byBjb21wbHkgd2l0aCBzdWNoIHByb3Zpc2lvbiwgY29uZGl0aW9uIG9yIHJlcXVpcmVtZW50LiBOb3R3aXRoc3RhbmRpbmcKK2FueXRoaW5nIGVsc2UgaW4gdGhpcyBBZ3JlZW1lbnQsIG5vIGRlZmF1bHQsIGRlbGF5IG9yIGZhaWx1cmUgdG8gcGVyZm9ybQorb24gdGhlIHBhcnQgb2YgQ29tcGFueSBzaGFsbCBiZSBjb25zaWRlcmVkIGEgYnJlYWNoIG9mIHRoaXMgQWdyZWVtZW50IGlmCitzdWNoIGRlZmF1bHQsIGRlbGF5IG9yIGZhaWx1cmUgdG8gcGVyZm9ybSBpcyBzaG93biB0byBiZSBkdWUgdG8gY2F1c2VzCitiZXlvbmQgdGhlIHJlYXNvbmFibGUgY29udHJvbCBvZiBDb21wYW55LiBUaGlzIEFncmVlbWVudCBzaGFsbCBiZQorZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIEFyaXpvbmEgYW5kIHRoZSBVbml0ZWQgU3RhdGVzCit3aXRob3V0IHJlZ2FyZCB0byBpdHMgY29uZmxpY3RzIG9mIGxhd3MgcnVsZXMgYW5kIHlvdSBjb25zZW50IHRvIHRoZQorZXhjbHVzaXZlIGp1cmlzZGljdGlvbiBvZiB0aGUgc3RhdGUgYW5kIGZlZGVyYWwgY291cnRzIGluIFBpbWEgQ291bnR5LAorQXJpem9uYS4gVGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUKK0ludGVybmF0aW9uYWwgU2FsZSBvZiBHb29kcyBzaGFsbCBub3QgYXBwbHkgdG8gdGhpcyBBZ3JlZW1lbnQuIFRoaXMKK0FncmVlbWVudCByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgY29uY2VybmluZyB0aGlzIExpY2Vuc2UKK0FncmVlbWVudCBiZXR3ZWVuIHlvdSBhbmQgQ29tcGFueS4KKworSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBjb25jZXJuaW5nIHRoaXMgbGljZW5zZSwgeW91IG1heSBjb250YWN0IFJXUworYXQgUE8gQm94IDY0MzA5LCBUdWNzb24sIEFaIDg1NzI4CisKK1Bvc3RhbChUTSkgMiDCqSAyMDAyIFJXUywgSW5jLiAgRGV2ZWxvcGVkIGJ5IFJXUywgSW5jLiAgUHVibGlzaGVkIGJ5CitNZWRpdW0gUmFyZSwgTExDLiAgVW5yZWFsKFRNKSBFbmdpbmUgwqkgMTk5Ny0yMDAyIEVwaWMgR2FtZXMsIEluYy4gIEFsbAorUmlnaHRzIFJlc2VydmVkLiAgTWF0aEVuZ2luZSBLYXJtYSAgwqkgMjAwMiBNYXRoRW5naW5lIFBMQy4gUG9zdGFsLAorUG9zdGFsIDIsIHRoZSBQb3N0YWwgMiBsb2dvLCBSdW5uaW5nIFdpdGggU2Npc3NvcnMsIGFuZCB0aGUgUnVubmluZyBXaXRoCitTY2lzc29ycyBsb2dvIGFyZSB0cmFkZW1hcmtzIG9yIHJlZ2lzdGVyZWQgdHJhZGVtYXJrcyBvZiBSV1MsIEluYy4gRXBpYworR2FtZXMgYW5kIFVucmVhbCBhcmUgcmVnaXN0ZXJlZCB0cmFkZW1hcmtzIG9yIHRyYWRlbWFya3Mgb2YgRXBpYyBHYW1lcywKK0luYywgdXNlZCB1bmRlciBsaWNlbnNlLiAgTWF0aEVuZ2luZSBhbmQgS2FybWEgYW5kIHRoZSBNYXRoRW5naW5lIGFuZAorS2FybWEgbG9nb3MgYXJlIHJlZ2lzdGVyZWQgdHJhZGVtYXJrcyBvciB0cmFkZW1hcmtzIG9mIE1hdGhFbmdpbmUgUExDLAordXNlZCB1bmRlciBsaWNlbnNlLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL3Bvc3RlciBiL2xpY2Vuc2VzL3Bvc3RlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZTAyZmU2Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvcG9zdGVyCkBAIC0wLDAgKzEsMiBAQAorUG9zdGVyIHdhcyB3cml0dGVuIGJ5IEpvcyB2YW4gRWlqbmRob3ZlbiBpbiAxOTk1LCBhbmQgaGFzIGJlZW4gcG9wdWxhciBhbW9uZyBQb3N0U2NyaXB0IHVzZXJzIGV2ZXIgc2luY2UuIAorUGxlYXNlIG5vdGUgdGhhdCBKb3MgaXMgbm8gbG9uZ2VyIGF0IEVpbmRob3ZlbiBVbml2IG9mIFRlY2hub2xvZ3ksIGFuZCB0aGUgZW1haWwgYWRkcmVzcyBAZWxlLnR1ZS5ubCBpcyBubyBsb25nZXIgdmFsaWQuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9wb3ZsZWdhbC0zLjYgYi9saWNlbnNlcy9wb3ZsZWdhbC0zLjYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjYzMzk4ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL3BvdmxlZ2FsLTMuNgpAQCAtMCwwICsxLDIzNyBAQAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUE9WLVJheSBMaWNlbmNlIEFncmVlbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgR0VORVJBTCBMSUNFTlNFIEFHUkVFTUVOVAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZPUiBQRVJTT05BTCBVU0UKKyAgICAgICAgICAgICAgICAgIFBlcnNpc3RlbmNlIG9mIFZpc2lvbiBSYXkgVHJhY2VyIChQT1YtUmF5KQorICAgICAgICAgICAgICAgVmVyc2lvbiAzLjYgTGljZW5zZSBhbmQgVGVybXMgJiBDb25kaXRpb25zIG9mIFVzZQorICAgICAgICAgICAgICAgICAgICAgICAgICB2ZXJzaW9uIG9mIDEgRmVicnVhcnkgMjAwNQorICAgICAgICAgICAgICAgICAgICAgICAgIChhbHNvIGtub3duIGFzIFBPVkxFR0FMLkRPQykKKworUGxlYXNlIHJlYWQgdGhyb3VnaCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBsaWNlbnNlIGNhcmVmdWxseS4gVGhpcworbGljZW5zZSBpcyBhIGJpbmRpbmcgbGVnYWwgYWdyZWVtZW50IGJldHdlZW4geW91LCB0aGUgJ1VzZXInIChhbiBpbmRpdmlkdWFsCitvciBzaW5nbGUgZW50aXR5KSBhbmQgUGVyc2lzdGVuY2Ugb2YgVmlzaW9uIFJheXRyYWNlciBQdHkuIEx0ZC4gQUNOIDEwNSA4OTEKKzg3MCAoaGVyZWluIGFsc28gcmVmZXJyZWQgdG8gYXMgdGhlICJDb21wYW55IiksIGEgY29tcGFueSBpbmNvcnBvcmF0ZWQgaW4gdGhlCitzdGF0ZSBvZiBWaWN0b3JpYSwgQXVzdHJhbGlhLCBmb3IgdGhlIHByb2R1Y3Qga25vd24gYXMgdGhlICJQZXJzaXN0ZW5jZSBvZgorVmlzaW9uIFJheSBUcmFjZXIiLCBhbHNvIHJlZmVycmVkIHRvIGhlcmVpbiBhcyAnUE9WLVJheScuCisKK1lPVVIgQVRURU5USU9OIElTIFBBUlRJQ1VMQVJMWSBEUkFXTiBUTyBUSEUgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWSBBTkQgTk8KK0xJQUJJTElUWSBBTkQgSU5ERU1OSVRZIFBST1ZJU0lPTlMuIFRPIFVTRSBUSEUgUEVSU0lTVEVOQ0UgT0YgVklTSU9OIFJBWQorVFJBQ0VSICgiUE9WLVJBWSIpIFlPVSBNVVNUIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBTRVQKK09VVCBJTiBUSElTIERPQ1VNRU5ULiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIEFMTCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YKK1VTRSBPRiBQT1YtUkFZIFNFVCBPVVQgSU4gVEhJUyBMSUNFTlNFIEFHUkVFTUVOVCwgT1IgSUYgU1VDSCBURVJNUyBBTkQKK0NPTkRJVElPTlMgQVJFIE5PVCBCSU5ESU5HIE9OIFlPVSBJTiBZT1VSIEpVUklTRElDVElPTiwgVEhFTiBZT1UgTUFZIE5PVCBVU0UKK1BPVi1SQVkgSU4gQU5ZIE1BTk5FUi4gVEhJUyBHRU5FUkFMIExJQ0VOU0UgQUdSRUVNRU5UIE1VU1QgQUNDT01QQU5ZIEFMTAorUE9WLVJBWSBGSUxFUyBXSEVUSEVSIElOIFRIRUlSIE9GRklDSUFMIE9SIENVU1RPTSBWRVJTSU9OIEZPUk0uIElUIE1BWSBOT1QgQkUKK1JFTU9WRUQgT1IgTU9ESUZJRUQuIFRISVMgR0VORVJBTCBMSUNFTlNFIEFHUkVFTUVOVCBHT1ZFUk5TIFRIRSBVU0UgT0YKK1BPVi1SQVkgV09STERXSURFLiBUSElTIERPQ1VNRU5UIFNVUEVSU0VERVMgQU5EIFJFUExBQ0VTIEFMTCBQUkVWSU9VUyBHRU5FUkFMCitMSUNFTlNFUy4KKworSU5UUk9EVUNUSU9OCisKK1RoaXMgZG9jdW1lbnQgcGVydGFpbnMgdG8gdGhlIHVzZSBvZiB0aGUgUGVyc2lzdGVuY2Ugb2YgVmlzaW9uIFJheSBUcmFjZXIKKyhhbHNvIGtub3duIGFzIFBPVi1SYXkpLiBJdCBhcHBsaWVzIHRvIGFsbCBQT1YtUmF5IHByb2dyYW0gc291cmNlIGZpbGVzLAorZXhlY3V0YWJsZSAoYmluYXJ5KSBmaWxlcywgc2NlbmUgZmlsZXMsIGRvY3VtZW50YXRpb24gZmlsZXMsIGhlbHAgZmlsZXMsCitiaXRtYXBzIGFuZCBvdGhlciBQT1YtUmF5IGZpbGVzIGNvbnRhaW5lZCBpbiBvZmZpY2lhbCBDb21wYW55IGFyY2hpdmVzLAord2hldGhlciBpbiBmdWxsIG9yIGFueSBwYXJ0IHRoZXJlb2YsIGFuZCBhcmUgaGVyZWluIHJlZmVycmVkIHRvIGFzIHRoZQorIlNvZnR3YXJlIi4gVGhlIENvbXBhbnkgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIHJldmlzZSB0aGVzZSBydWxlcyBpbiBmdXR1cmUKK3ZlcnNpb25zIGFuZCB0byBtYWtlIGFkZGl0aW9uYWwgcnVsZXMgdG8gYWRkcmVzcyBuZXcgY2lyY3Vtc3RhbmNlcyBhdCBhbnkKK3RpbWUuIFN1Y2ggcnVsZXMsIHdoZW4gbWFkZSwgd2lsbCBiZSBwb3N0ZWQgaW4gYSByZXZpc2VkIGxpY2Vuc2UgZmlsZSwgdGhlCitsYXRlc3QgdmVyc2lvbiBvZiB3aGljaCBpcyBhdmFpbGFibGUgZnJvbSB0aGUgQ29tcGFueSB3ZWJzaXRlIGF0CitodHRwOi8vd3d3LnBvdnJheS5vcmcvcG92bGVnYWwuaHRtbC4KKworVVNBR0UgUFJPVklTSU9OUworCitTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIGFncmVlbWVudCwgcGVybWlzc2lvbiBpcyBncmFudGVkCit0byB0aGUgVXNlciB0byB1c2UgdGhlIFNvZnR3YXJlIGFuZCBpdHMgYXNzb2NpYXRlZCBmaWxlcyB0byBjcmVhdGUgYW5kIHJlbmRlcgoraW1hZ2VzLiBUaGUgY3JlYXRvciBvZiBhIHNjZW5lIGZpbGUgcmV0YWlucyBhbGwgcmlnaHRzIHRvIGFueSBzY2VuZSBmaWxlcwordGhleSBjcmVhdGUsIGFuZCBhbnkgaW1hZ2VzIGdlbmVyYXRlZCBieSB0aGUgU29mdHdhcmUgZnJvbSB0aGVtLiBTdWJqZWN0IHRvCit0aGUgb3RoZXIgdGVybXMgb2YgdGhpcyBsaWNlbnNlLCB0aGUgVXNlciBpcyBwZXJtaXR0ZWQgdG8gdXNlIHRoZSBTb2Z0d2FyZSBpbgorYSBwcm9maXQtbWFraW5nIGVudGVycHJpc2UsIHByb3ZpZGVkIHN1Y2ggcHJvZml0IGFyaXNlcyBwcmltYXJpbHkgZnJvbSB1c2Ugb2YKK3RoZSBTb2Z0d2FyZSBhbmQgbm90IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBTb2Z0d2FyZSBvciBhIHdvcmsgaW5jbHVkaW5nCit0aGUgU29mdHdhcmUgaW4gd2hvbGUgb3IgcGFydC4KKworUGxlYXNlIHJlZmVyIHRvIGh0dHA6Ly93d3cucG92cmF5Lm9yZy9wb3ZsZWdhbC5odG1sIGZvciBsaWNlbnNlcyBjb3ZlcmluZworZGlzdHJpYnV0aW9uIG9mIHRoZSBTb2Z0d2FyZSBhbmQgd29ya3MgaW5jbHVkaW5nIHRoZSBTb2Z0d2FyZS4KKworVGhlIFVzZXIgaXMgYWxzbyBncmFudGVkIHRoZSByaWdodCB0byB1c2UgdGhlIHNjZW5lIGZpbGVzLCBmb250cywgYml0bWFwcywKK2FuZCBpbmNsdWRlIGZpbGVzIGRpc3RyaWJ1dGVkIGluIHRoZSBJTkNMVURFIGFuZCBTQ0VORVNcSU5DREVNTyBzdWItCitkaXJlY3RvcmllcyBvZiB0aGUgU29mdHdhcmUgaW4gdGhlaXIgb3duIHNjZW5lcy4gU3VjaCBwZXJtaXNzaW9uIGRvZXMgbm90CitleHRlbmQgdG8gYW55IG90aGVyIGZpbGVzIGluIHRoZSBTQ0VORVMgZGlyZWN0b3J5IG9yIGl0cyBzdWItZGlyZWN0b3JpZXMuIFRoZQorU0NFTkVTIGZpbGVzIGFyZSBmb3IgdGhlIFVzZXIncyBlbmpveW1lbnQgYW5kIGVkdWNhdGlvbiBidXQgbWF5IG5vdCBiZSB0aGUKK2Jhc2lzIG9mIGFueSBkZXJpdmF0aXZlIHdvcmtzIHVubGVzcyB0aGUgZmlsZSBpbiBxdWVzdGlvbiBleHBsaWNpdGx5IGdyYW50cworcGVybWlzc2lvbiB0byBkbyBzdWNoLgorCitUaGlzIGxpY2VuY2UgZG9lcyBub3QgZ3JhbnQgYW55IHJpZ2h0IG9mIHJlLWRpc3RyaWJ1dGlvbiBvciB1c2UgaW4gYW55IG1hbm5lcgorb3RoZXIgdGhhbiB0aGUgYWJvdmUuIFRoZSBDb21wYW55IGhhcyBzZXBhcmF0ZSBsaWNlbnNlIGRvY3VtZW50cyB0aGF0IGFwcGx5Cit0byBvdGhlciB1c2VzIChzdWNoIGFzIHJlLWRpc3RyaWJ1dGlvbiB2aWEgdGhlIGludGVybmV0IG9yIG9uIENEKSA7IHBsZWFzZQordmlzaXQgaHR0cDovL3d3dy5wb3ZyYXkub3JnL3BvdmxlZ2FsLmh0bWwgZm9yIGxpbmtzIHRvIHRoZXNlLiBJbiBwYXJ0aWN1bGFyCit5b3UgYXJlIGFkdmlzZWQgdGhhdCB0aGUgc2FsZSwgbGVhc2UsIG9yIHJlbnRhbCBvZiB0aGUgU29mdHdhcmUgaW4gYW55IGZvcm0KK3dpdGhvdXQgd3JpdHRlbiBhdXRob3JpdHkgZnJvbSB0aGUgQ29tcGFueSBpcyBleHBsaWNpdGx5IHByb2hpYml0ZWQuCisKK05vdHdpdGhzdGFuZGluZyBhbnl0aGluZyBpbiB0aGUgdGhlIGJhbGFuY2Ugb2YgdGhpcyBsaWNlbmNlIGFncmVlbWVudCwKK25vdGhpbmcgaW4gdGhpcyBsaWNlbmNlIGFncmVlbWVudCBwZXJtaXRzIHRoZSBpbnN0YWxsYXRpb24gb3IgdXNlIG9mIHRoZQorU29mdHdhcmUgaW4gY29uanVuY3Rpb24gd2l0aCBhbnkgcHJvZHVjdCAoaW5jbHVkaW5nIHNvZnR3YXJlKSBwcm9kdWNlZAorb3IgZGlzdHJpYnV0ZWQgYnkgYW55IHBhcnR5IHdobyBpcywgb3IgaGFzIGJlZW4sIGluIHZpb2xhdGlvbiBvZiB0aGlzCitsaWNlbmNlIGFncmVlbWVudCBvciBvZiB0aGUgZGlzdHJpYnV0aW9uIGxpY2VuY2UKKyAgKGh0dHA6Ly93d3cucG92cmF5Lm9yZy9kaXN0cmlidXRpb24tbGljZW5zZS5odG1sKQorKG9yIGFueSBlYXJsaWVyIG9yIGxhdGVyIHZlcnNpb25zIG9mIHRob3NlIGRvY3VtZW50cykgdW5sZXNzOgorCisgICBhLiB0aGUgQ29tcGFueSBoYXMgZXhwbGljaXRseSByZWxlYXNlZCB0aGF0IHBhcnR5IGluIHdyaXRpbmcgZnJvbSB0aGUKKyAgICAgIGNvbnNlcXVlbmNlcyBvZiB0aGVpciBub24gY29tcGxpYW5jZTsgb3IKKyAgIGIuIGJvdGggb2YgdGhlIGZvbGxvd2luZyBhcmUgdHJ1ZToKKyAgICAgICAgIGkuIHRoZSBpbnN0YWxsYXRpb24gb3IgdXNlIG9mIHRoZSBTb2Z0d2FyZSBpcyB3aXRob3V0IHRoZSBVc2VyCisgICAgICAgICAgICBiZWluZyBhd2FyZSBvZiB0aGUgYWJvdmVtZW50aW9uZWQgdmlvbGF0aW9uOyBhbmQKKyAgICAgICAgaWkuIHRoZSBpbnN0YWxsYXRpb24gb3IgdXNlIG9mIHRoZSBTb2Z0d2FyZSBpcyBub3QgYSByZXN1bHQgKHdoZXRoZXIKKyAgICAgICAgICAgIGRpcmVjdCBvciBpbmRpcmVjdCkgb2YgYW55IHJlcXVlc3Qgb3IgYWN0aW9uIG9mIHRoZSBhYm92ZW1lbnRpb25lZAorICAgICAgICAgICAgcGFydHkgKG9yIGFueSBvZiBpdHMgcHJvZHVjdHMpLCBhbnkgYWdlbnQgb2YgdGhhdCBwYXJ0eSAob3IgYW55IG9mCisgICAgICAgICAgICB0aGVpciBwcm9kdWN0cyksIG9yIGFueSBwZXJzb24ocykgaW52b2x2ZWQgaW4gc3VwcGx5aW5nIGFueSBzdWNoCisgICAgICAgICAgICBwcm9kdWN0IHRvIHRoZSBVc2VyLgorCitDT1BZUklHSFQKKworQ29weXJpZ2h0IMKpIDE5OTEtMjAwMywgUGVyc2lzdGVuY2Ugb2YgVmlzaW9uIFRlYW0uCitDb3B5cmlnaHQgwqkgMjAwMy0yMDA0LCBQZXJzaXN0ZW5jZSBvZiBWaXNpb24gUmF5dHJhY2VyIFB0eS4gTHRkLgorV2luZG93cyB2ZXJzaW9uIENvcHlyaWdodCDCqSAxOTk2LTIwMDMsIENocmlzdG9waGVyIENhc29uLgorCitDb3B5cmlnaHQgc3Vic2lzdHMgaW4gdGhpcyBTb2Z0d2FyZSB3aGljaCBpcyBwcm90ZWN0ZWQgYnkgQXVzdHJhbGlhbiBhbmQKK2ludGVybmF0aW9uYWwgY29weXJpZ2h0IGxhd3MuIFRoZSBTb2Z0d2FyZSBpcyBOT1QgUFVCTElDIERPTUFJTi4KKworTm90aGluZyBpbiB0aGlzIGFncmVlbWVudCBzaGFsbCBnaXZlIHlvdSBhbnkgcmlnaHRzIGluIHJlc3BlY3Qgb2YgdGhlCitpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2YgdGhlIENvbXBhbnkgYW5kIHlvdSBhY2tub3dsZWRnZSB0aGF0IHlvdSBkbyBub3QKK2FjcXVpcmUgYW55IHJpZ2h0cyBpbiByZXNwZWN0IG9mIHN1Y2ggaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cy4gWW91CithY2tub3dsZWRnZSB0aGF0IHRoZSBTb2Z0d2FyZSBpcyB0aGUgdmFsdWFibGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IG9mIHRoZQorQ29tcGFueSBhbmQgdGhhdCBpZiB5b3UgdXNlLCBtb2RpZnkgb3IgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgZm9yCit1bmF1dGhvcml6ZWQgcHVycG9zZXMgb3IgaW4gYW4gdW5hdXRob3JpemVkIG1hbm5lciAob3IgY2F1c2Ugb3IgYWxsb3cgdGhlCitmb3Jnb2luZyB0byBvY2N1ciksIHlvdSB3aWxsIGJlIGxpYWJsZSB0byB0aGUgQ29tcGFueSBmb3IgYW55IGRhbWFnZXMgaXQgbWF5CitzdWZmZXIgKGFuZCB3aGljaCB5b3UgYWNrbm93bGVkZ2UgaXQgbWF5IHN1ZmZlcikgYXMgd2VsbCBhcyBzdGF0dXRvcnkgZGFtYWdlcwordG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBsYXcgYW5kIGFsc28gdGhhdCB5b3UgbWF5IGJlIGxpYWJsZSB0bworY3JpbWluYWwgcHJvc2VjdXRpb24uIFlvdSBpbmRlbW5pZnkgdGhlIENvbXBhbnkgYW5kIHRoZSBhdXRob3JzIG9mIHRoZQorU29mdHdhcmUgZm9yIGV2ZXJ5IHNpbmdsZSBjb25zZXF1ZW5jZSBmbG93aW5nIGZyb20gdGhlIGFmb3JlbWVudGlvbmVkIGV2ZW50cy4KKworRElTQ0xBSU1FUiBPRiBXQVJSQU5UWQorCitUaGlzIFNvZnR3YXJlIGlzIHByb3ZpZGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIHdpdGhvdXQgd2FycmFudHkgb2YgYW55IGtpbmQsCitleHByZXNzIG9yIGltcGxpZWQsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIGFueSBpbXBsaWVkIHdhcnJhbnRpZXMgb2YKK21lcmNoYW50YWJpbGl0eSwgZml0bmVzcyBmb3IgYSBwYXJ0aWN1bGFyIHB1cnBvc2UgYW5kIG5vbi1pbmZyaW5nZW1lbnQgb2YKK2ludGVsbGVjdHVhbCBwcm9wZXJ0eSBvZiBhbnkgdGhpcmQgcGFydHkuIFRoaXMgU29mdHdhcmUgaGFzIGluaGVyZW50CitsaW1pdGF0aW9ucyBpbmNsdWRpbmcgZGVzaWduIGZhdWx0cyBhbmQgcHJvZ3JhbW1pbmcgYnVncy4gVGhlIGVudGlyZSByaXNrIGFzCit0byB0aGUgcXVhbGl0eSBhbmQgcGVyZm9ybWFuY2Ugb2YgdGhlIFNvZnR3YXJlIGlzIGJvcm5lIGJ5IHlvdSwgYW5kIGl0IGlzCit5b3VyIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB0aGF0IGl0IGRvZXMgd2hhdCB5b3UgcmVxdWlyZSBpdCB0byBkbyBwcmlvciB0bwordXNpbmcgaXQgZm9yIGFueSBwdXJwb3NlIChvdGhlciB0aGFuIHRlc3RpbmcgaXQpLCBhbmQgcHJpb3IgdG8gZGlzdHJpYnV0aW5nCitpdCBpbiBhbnkgZmFzaGlvbi4gU2hvdWxkIHRoZSBTb2Z0d2FyZSBwcm92ZSBkZWZlY3RpdmUsIHlvdSBhZ3JlZSB0aGF0IHlvdQorYWxvbmUgYXNzdW1lIHRoZSBlbnRpcmUgY29zdCByZXN1bHRpbmcgaW4gYW55IHdheSBmcm9tIHN1Y2ggZGVmZWN0LgorCitUaGlzIGRpc2NsYWltZXIgb2Ygd2FycmFudHkgY29uc3RpdHV0ZXMgYW4gZXNzZW50aWFsIGFuZCBtYXRlcmlhbCB0ZXJtIG9mCit0aGlzIGFncmVlbWVudC4gSWYgeW91IGRvIG5vdCBvciBjYW5ub3QgYWNjZXB0IHRoaXMsIG9yIGlmIGl0IGlzCit1bmVuZm9yY2VhYmxlIGluIHlvdXIganVyaXNkaWN0aW9uLCB0aGVuIHlvdSBtYXkgbm90IHVzZSB0aGUgU29mdHdhcmUgaW4gYW55CittYW5uZXIuCisKK05PIExJQUJJTElUWQorCitXaGVuIHlvdSB1c2UgdGhlIFNvZnR3YXJlIHlvdSBhY2tub3dsZWRnZSBhbmQgYWNjZXB0IHRoYXQgeW91IGRvIHNvIGF0IHlvdXIKK3NvbGUgcmlzay4gWW91IGFncmVlIHRoYXQgdW5kZXIgbm8gY2lyY3Vtc3RhbmNlcyBzaGFsbCB5b3UgaGF2ZSBhbnkgY2xhaW0KK2FnYWluc3QgdGhlIENvbXBhbnkgb3IgYW55b25lIGFzc29jaWF0ZWQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB3aXRoIHRoZQorQ29tcGFueSB3aGV0aGVyIGFzIGVtcGxveWVlLCBzdWJjb250cmFjdG9yLCBhZ2VudCwgcmVwcmVzZW50YXRpdmUsCitjb25zdWx0YW50LCBsaWNlbnNlZSBvciBvdGhlcndpc2UgKCJDb21wYW55IEFzc29jaWF0ZXMiKSBmb3IgYW55IGxvc3MsCitkYW1hZ2VzLCBoYXJtLCBpbmp1cnksIGV4cGVuc2UsIHdvcmsgc3RvcHBhZ2UsIGxvc3Mgb2YgYnVzaW5lc3MgaW5mb3JtYXRpb24sCitidXNpbmVzcyBpbnRlcnJ1cHRpb24sIGNvbXB1dGVyIGZhaWx1cmUgb3IgbWFsZnVuY3Rpb24gd2hpY2ggbWF5IGJlIHN1ZmZlcmVkCitieSB5b3Ugb3IgYnkgYW55IHRoaXJkIHBhcnR5IGZyb20gYW55IGNhdXNlIHdoYXRzb2V2ZXIsIGhvd3NvZXZlciBhcmlzaW5nLCBpbgorY29ubmVjdGlvbiB3aXRoIHlvdXIgdXNlIG9yIGRpc3RyaWJ1dGlvbiBvZiB0aGUgU29mdHdhcmUgZXZlbiB3aGVyZSB0aGUKK0NvbXBhbnkgd2VyZSBhd2FyZSwgb3Igb3VnaHQgdG8gaGF2ZSBiZWVuIGF3YXJlLCBvZiB0aGUgcG90ZW50aWFsIG9mIHN1Y2gKK2xvc3MuIERhbWFnZXMgcmVmZXJyZWQgdG8gYWJvdmUgc2hhbGwgaW5jbHVkZSBkaXJlY3QsIGluZGlyZWN0LCBnZW5lcmFsLAorc3BlY2lhbCwgaW5jaWRlbnRhbCwgcHVuaXRpdmUgYW5kL29yIGNvbnNlcXVlbnRpYWwuCisKK1RoaXMgZGlzY2xhaW1lciBvZiBsaWFiaWxpdHkgY29uc3RpdHV0ZXMgYW4gZXNzZW50aWFsIGFuZCBtYXRlcmlhbCB0ZXJtIG9mCit0aGlzIGFncmVlbWVudC4gSWYgeW91IGRvIG5vdCBvciBjYW5ub3QgYWNjZXB0IHRoaXMsIG9yIGlmIGl0IGlzCit1bmVuZm9yY2VhYmxlIGluIHlvdXIganVyaXNkaWN0aW9uLCB0aGVuIHlvdSBtYXkgbm90IHVzZSB0aGUgU29mdHdhcmUuCisKK0lOREVNTklUWQorCitZb3UgaW5kZW1uaWZ5IHRoZSBDb21wYW55IGFuZCBDb21wYW55IEFzc29jaWF0ZXMgYW5kIGhvbGQgdGhlbSBoYXJtbGVzcworYWdhaW5zdCBhbnkgY2xhaW1zIHdoaWNoIG1heSBhcmlzZSBmcm9tIGFueSBsb3NzLCBkYW1hZ2VzLCBoYXJtLCBpbmp1cnksCitleHBlbnNlLCB3b3JrIHN0b3BwYWdlLCBsb3NzIG9mIGJ1c2luZXNzIGluZm9ybWF0aW9uLCBidXNpbmVzcyBpbnRlcnJ1cHRpb24sCitjb21wdXRlciBmYWlsdXJlIG9yIG1hbGZ1bmN0aW9uLCB3aGljaCBtYXkgYmUgc3VmZmVyZWQgYnkgeW91IG9yIGFueSBvdGhlcgorcGFydHkgd2hhdHNvZXZlciBhcyBhIGNvbnNlcXVlbmNlIG9mIGFueSBhY3Qgb3Igb21pc3Npb24gb2YgdGhlIENvbXBhbnkKK2FuZC9vciBDb21wYW55IEFzc29jaWF0ZXMsIHdoZXRoZXIgbmVnbGlnZW50IG9yIG5vdCwgYXJpc2luZyBvdXQgb2YgeW91ciB1c2UKK2FuZC9vciBkaXN0cmlidXRpb24gb2YgdGhlIFNvZnR3YXJlLCBvciBmcm9tIGFueSBvdGhlciBjYXVzZSB3aGF0c29ldmVyLAoraG93c29ldmVyIGFyaXNpbmcsIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgU29mdHdhcmUuIFRoZXNlIHByb3Zpc2lvbnMgYXJlCitiaW5kaW5nIG9uIHlvdXIgZXN0YXRlLCBoZWlycywgZXhlY3V0b3JzLCBsZWdhbCBzdWNjZXNzb3JzLCBhZG1pbmlzdHJhdG9ycywKK3BhcmVudHMgYW5kL29yIGd1YXJkaWFucy4KKworVGhpcyBpbmRlbW5pZmljYXRpb24gY29uc3RpdHV0ZXMgYW4gZXNzZW50aWFsIGFuZCBtYXRlcmlhbCB0ZXJtIG9mIHRoaXMKK2FncmVlbWVudC4gSWYgeW91IGRvIG5vdCBvciBjYW5ub3QgYWNjZXB0IHRoaXMsIG9yIGlmIGl0IGlzIHVuZW5mb3JjZWFibGUgaW4KK3lvdXIganVyaXNkaWN0aW9uLCB0aGVuIHlvdSBtYXkgbm90IHVzZSB0aGUgU29mdHdhcmUuCisKK0hJR0ggUklTSyBBQ1RJVklUSUVTCisKK1RoaXMgU29mdHdhcmUgYW5kIHRoZSBvdXRwdXQgcHJvZHVjZWQgYnkgdGhpcyBTb2Z0d2FyZSBpcyBub3QgZmF1bHQtdG9sZXJhbnQKK2FuZCBpcyBub3QgZGVzaWduZWQsIG1hbnVmYWN0dXJlZCBvciBpbnRlbmRlZCBmb3IgdXNlIGFzIG9uLWxpbmUgY29udHJvbAorZXF1aXBtZW50IGluIGhhemFyZG91cyBlbnZpcm9ubWVudHMgcmVxdWlyaW5nIGZhaWwtc2FmZSBwZXJmb3JtYW5jZSwgaW4gd2hpY2gKK3RoZSBmYWlsdXJlIG9mIHRoZSBTb2Z0d2FyZSBjb3VsZCBsZWFkIG9yIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdG8gZGVhdGgsCitwZXJzb25hbCBpbmp1cnksIG9yIHNldmVyZSBwaHlzaWNhbCBvciBlbnZpcm9ubWVudGFsIGRhbWFnZSAoIkhpZ2ggUmlzaworQWN0aXZpdGllcyIpLiBUaGUgQ29tcGFueSBzcGVjaWZpY2FsbHkgZGlzY2xhaW1zIGFueSBleHByZXNzIG9yIGltcGxpZWQKK3dhcnJhbnR5IG9mIGZpdG5lc3MgZm9yIEhpZ2ggUmlzayBBY3Rpdml0aWVzIGFuZCBleHBsaWNpdGx5IHByb2hpYml0cyB0aGUgdXNlCitvZiB0aGUgU29mdHdhcmUgZm9yIHN1Y2ggcHVycG9zZXMuCisKK0NSWVBUT0dSQVBISUMgU0lHTklORyBPRiBET0NVTUVOVFMKKworQ2hhbmdlcyB0byB0aGlzIEFncmVlbWVudCBhbmQgZG9jdW1lbnRzIGlzc3VlZCB1bmRlciBpdHMgYXV0aG9yaXR5IG1heSBiZQorY3J5cHRvZ3JhcGhpY2FsbHkgc2lnbmVkIGJ5IHRoZSBQT1YtUmF5IFRlYW0gQ28tb3JkaW5hdG9yJ3MgcHJpdmF0ZSBQR1Aga2V5LgorSW4gdGhlIGFic2VuY2Ugb2YgZXZpZGVuY2UgdG8gdGhlIGNvbnRyYXJ5LCBzdWNoIGRvY3VtZW50cyBzaGFsbCBiZSBjb25zaWRlcmVkLAordW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCB0byBiZSBhdXRoZW50aWMgcHJvdmlkZWQgdGhlIHNpZ25hdHVyZSBpcwordmFsaWQuIFRoZSBtYXN0ZXIgY29weSBvZiB0aGlzIEFncmVlbWVudCBhdCBodHRwOi8vd3d3LnBvdnJheS5vcmcvcG92bGVnYWwuaHRtbAord2lsbCBhbHNvIGJlIHNpZ25lZCBieSB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIHRoZSB0ZWFtLWNvb3JkaW5hdG9yJ3Mga2V5LgorCitUaGUgcHVibGljIGtleSBmb3IgdGhlIFBPVi1SYXkgVGVhbS1jb29yZGluYXRvciBjYW4gYmUgcmV0cmlldmVkIGZyb20gdGhlCitsb2NhdGlvbiBodHRwczovL3NlY3VyZS5wb3ZyYXkub3JnL2tleXMvLiBUaGUgY3VycmVudCBmaW5nZXJwcmludCBmb3IgaXQgaXMKK0I0REQgOTMyQSBDMDgwIEMzQTMgNkVBMiA5OTUyIERCMDQgNEE3NCA5OTAxIDQ1MTguCisKK01JU0NFTExBTkVPVVMKKworVGhpcyBBZ3JlZW1lbnQgY29uc3RpdHV0ZXMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHRoaXMgbGljZW5zZS4KK0FueSBjaGFuZ2VzIHRvIHRoaXMgYWdyZWVtZW50IG11c3QgYmUgaW4gd3JpdGluZyBhbmQgbWF5IHRha2UgdGhlIGZvcm0gb2YKK25vdGlmaWNhdGlvbnMgYnkgdGhlIENvbXBhbnkgdG8geW91LCBvciB0aHJvdWdoIHBvc3Rpbmcgbm90aWZpY2F0aW9ucyBvbiB0aGUKK0NvbXBhbnkgd2Vic2l0ZS4gVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFIEJZIEFOWSBQRVJTT04gT1IgRU5USVRZIElTCitFWFBSRVNTTFkgTUFERSBDT05ESVRJT05BTCBPTiBUSEVJUiBBQ0NFUFRBTkNFIE9GIFRIRSBURVJNUyBTRVQgRk9SVEggSEVSRUlOLgorCitFeGNlcHQgd2hlcmUgZXhwbGljaXRseSBzdGF0ZWQgb3RoZXJ3aXNlIGhlcmVpbiwgaWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzCitBZ3JlZW1lbnQgaXMgZm91bmQgdG8gYmUgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlLCB0aGUgaW52YWxpZGl0eSBvcgordW5lbmZvcmNlYWJpbGl0eSBvZiBzdWNoIHByb3Zpc2lvbiBzaGFsbCBub3QgYWZmZWN0IHRoZSBvdGhlciBwcm92aXNpb25zIG9mCit0aGlzIGFncmVlbWVudCwgYW5kIGFsbCBwcm92aXNpb25zIG5vdCBhZmZlY3RlZCBieSBzdWNoIGludmFsaWRpdHkgb3IKK3VuZW5mb3JjZWFiaWxpdHkgc2hhbGwgcmVtYWluIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdC4gSW4gc3VjaCBjYXNlcyB5b3UKK2FncmVlIHRvIGF0dGVtcHQgdG8gc3Vic3RpdHV0ZSBmb3IgZWFjaCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgcHJvdmlzaW9uIGEKK3ZhbGlkIG9yIGVuZm9yY2VhYmxlIHByb3Zpc2lvbiB3aGljaCBhY2hpZXZlcyB0byB0aGUgZ3JlYXRlc3QgZXh0ZW50Citwb3NzaWJsZSwgdGhlIG9iamVjdGl2ZXMgYW5kIGludGVudGlvbiBvZiB0aGUgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlCitwcm92aXNpb24uIFRoZSB2YWxpZGl0eSBhbmQgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBhZ3JlZW1lbnQgd2lsbCBiZSBnb3Zlcm5lZAorYnkgdGhlIGxhd3Mgb2YgQXVzdHJhbGlhIGluIHRoZSBzdGF0ZSBvZiBWaWN0b3JpYSAoZXhjZXB0IGZvciBjb25mbGljdCBvZiBsYXcKK3Byb3Zpc2lvbnMpLgorCitDT05UQUNUIElORk9STUFUSU9OCisKK0xpY2Vuc2UgaW5xdWlyaWVzIGNhbiBiZSBtYWRlIHZpYSBlbWFpbDsgcGxlYXNlIHVzZSB0aGUgZm9sbG93aW5nIGFkZHJlc3MKKyhidXQgc2VlIGJlbG93IHByaW9yIHRvIGVtYWlsaW5nKSA6CisKKyAgdGVhbS1jb29yZC1bdGhyZWUtbGV0dGVyIG1vbnRoXS1bZm91ci1kaWdpdCB5ZWFyXUBwb3ZyYXkub3JnCisKK2ZvciBleGFtcGxlLCB0ZWFtLWNvb3JkLWp1bi0yMDA0QHBvdnJheS5vcmcgc2hvdWxkIGJlIHVzZWQgaWYgYXQgdGhlIHRpbWUgeW91CitzZW5kIHRoZSBlbWFpbCBpdCBpcyB0aGUgbW9udGggb2YgSnVuZSAyMDA0LiBUaGUgY2hhbmdpbmcgZW1haWwgYWRkcmVzc2VzIGFyZQorbmVjZXNzYXJ5IHRvIGNvbWJhdCBzcGFtIGFuZCBlbWFpbCB2aXJ1c2VzLiBPbGQgZW1haWwgYWRkcmVzc2VzIG1heSBiZSBkZWxldGVkCithdCBvdXIgZGlzY3JldGlvbi4KKworTm90ZSB0aGF0IHRoZSBhYm92ZSBhZGRyZXNzIG1heSBjaGFuZ2UgZm9yIHJlYXNvbnMgb3RoZXIgdGhhbiB0aGF0IGdpdmVuIGFib3ZlOworcGxlYXNlIGNoZWNrIHRoZSB2ZXJzaW9uIG9mIHRoaXMgZG9jdW1lbnQgYXQgaHR0cDovL3d3dy5wb3ZyYXkub3JnL3BvdmxlZ2FsLmh0bWwKK2ZvciB0aGUgY3VycmVudCBhZGRyZXNzLiBOb3RlIHRoYXQgeW91ciBpbmFiaWxpdHkgb3IgZmFpbHVyZSB0byBjb250YWN0IHVzCitmb3IgYW55IHJlYXNvbiBpcyBub3QgYW4gZXhjdXNlIGZvciB2aW9sYXRpbmcgdGhpcyBsaWNlbmNlLgorCitEbyBOT1Qgc2VuZCBhbnkgYXR0YWNobWVudHMgb2YgYW55IHNvcnQgb3RoZXIgdGhhbiBieSBwcmlvciBhcnJhbmdlbWVudC4KK0VNQUlMIE1FU1NBR0VTIElOQ0xVRElORyBBVFRBQ0hNRU5UUyBXSUxMIEJFIERFTEVURUQgVU5SRUFELgorCitUaGUgZm9sbG93aW5nIHBvc3RhbCBhZGRyZXNzIGlzIG9ubHkgZm9yIG9mZmljaWFsIGxpY2Vuc2UgYnVzaW5lc3MuIFBsZWFzZQorbm90ZSB0aGF0IGl0IGlzIHByZWZlcnJlZCB0aGF0IGluaXRpYWwgcXVlcmllcyBhYm91dCBsaWNlbnNpbmcgYmUgbWFkZSB2aWEKK2VtYWlsIDsgcG9zdGFsIG1haWwgc2hvdWxkIG9ubHkgYmUgdXNlZCB3aGVuIGVtYWlsIGlzIG5vdCBwb3NzaWJsZSwgb3Igd2hlbgord3JpdHRlbiBkb2N1bWVudHMgYXJlIGJlaW5nIGV4Y2hhbmdlZCBieSBwcmlvciBhcnJhbmdlbWVudC4KKworIFBlcnNpc3RlbmNlIG9mIFZpc2lvbiBSYXl0cmFjZXIgUHR5LiBMdGQuCisgUE8gQm94IDQwNworIFdpbGxpYW1zdG93biwKKyBWaWN0b3JpYSAzMDE2CisgQXVzdHJhbGlhCmRpZmYgLS1naXQgYS9saWNlbnNlcy9wcm9jaGVjayBiL2xpY2Vuc2VzL3Byb2NoZWNrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5MzM3OWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9wcm9jaGVjawpAQCAtMCwwICsxLDIzMCBAQAorCisKKwkgIFBST0NIRUNLIC0gU3RlcmVvY2hlbWljYWwgUXVhbGl0eSBvZiBQcm90ZWluIFN0cnVjdHVyZXMKKyAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisJCQlhbmQgQVFVQSBmb3IgUFJPQ0hFQ0stTk1SCisgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKwkJCUNPTkZJREVOVElBTElUWSBBR1JFRU1FTlQKKwkJCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCisKK0luIHJlZ2FyZCB0byB0aGUgUFJPQ0hFQ0sgc3VpdGUgb2YgcHJvZ3JhbXMsIHNwZWNpZmllZCBpbiBBcHBlbmRpeCAxCitoZXJld2l0aCBhbmQgdGhlIEFRVUEgc3VpdGUgb2YgcHJvZ3JhbXMgc3BlY2lmaWVkIGluIEFwcGVuZGl4IDIgaGVyZXdpdGgKKyh0aGUgU29mdHdhcmUpIHN1cHBsaWVkIHRvIHVzLCB0aGUgY29weXJpZ2h0IGFuZCBvdGhlciBpbnRlbGxlY3R1YWwKK3Byb3BlcnR5IHJpZ2h0cyB0byB3aGljaCBiZWxvbmcgdG8gdGhlIGF1dGhvcnMsIHdlCisKKyAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKwordW5kZXJ0YWtlIHRvIHRoZSBhdXRob3JzIHRoYXQgd2Ugc2hhbGwgYmUgYm91bmQgYnkgdGhlIGZvbGxvd2luZyB0ZXJtcyBhbmQKK2NvbmRpdGlvbnM6LQorCisxLiBXZSB3aWxsIHJlY2VpdmUgdGhlIFNvZnR3YXJlIGFuZCBhbnkgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGluIGNvbmZpZGVuY2UKK2FuZCB3aWxsIG5vdCB1c2UgdGhlIHNhbWUgZXhjZXB0IGZvciB0aGUgcHVycG9zZSBvZiB0aGUgZGVwYXJ0bWVudCdzIG93biAKK3Jlc2VhcmNoLiBUaGUgU29mdHdhcmUgd2lsbCBiZSB1c2VkIG9ubHkgYnkgc3VjaCBvZiBvdXIgb2ZmaWNlcnMgb3IKK2VtcGxveWVlcyB0byB3aG9tIGl0IG11c3QgcmVhc29uYWJseSBiZSBjb21tdW5pY2F0ZWQgdG8gZW5hYmxlIHVzIHRvCit1bmRlcnRha2Ugb3VyIHJlc2VhcmNoIGFuZCB3aG8gYWdyZWUgdG8gYmUgYm91bmQgYnkgdGhlIHNhbWUgY29uZmlkZW5jZS4KK1RoZSBkZXBhcnRtZW50IHNoYWxsIHByb2N1cmUgYW5kIGVuZm9yY2Ugc3VjaCBhZ3JlZW1lbnQgZnJvbSBpdHMgc3RhZmYgZm9yCit0aGUgYmVuZWZpdCBvZiB0aGUgYXV0aG9ycy4KKworMi4gVGhlIHB1YmxpY2F0aW9uIG9mIHJlc2VhcmNoIHVzaW5nIHRoZSBTb2Z0d2FyZSBtdXN0IHJlZmVyZW5jZQorCisgICAiTGFza293c2tpIFIgQSwgTWFjQXJ0aHVyIE0gVywgTW9zcyBEIFMgJiBUaG9ybnRvbiBKIE0gKDE5OTMpLiBQUk9DSEVDSzoKKyAgIGEgcHJvZ3JhbSB0byBjaGVjayB0aGUgc3RlcmVvY2hlbWljYWwgcXVhbGl0eSBvZiBwcm90ZWluCisgICBzdHJ1Y3R1cmVzLiBKLiBBcHBsLiAgQ3J5c3QuLCAyNiwgMjgzLTI5MS4iCisKK2FuZAorCisgICAiUnVsbG1hbm4gSiBBIEMgKDE5OTYpLiBBUVVBLCBDb21wdXRlciBQcm9ncmFtLCBEZXBhcnRtZW50IG9mIE5NUgorICAgU3BlY3Ryb3Njb3B5LCBCaWp2b2V0IENlbnRlciBmb3IgQmlvbW9sZWN1bGFyIFJlc2VhcmNoLCBVdHJlY2h0CisgICBVbml2ZXJzaXR5LCBUaGUgTmV0aGVybGFuZHMuIgorCisKKzMuIFJlc2VhcmNoIHNoYWxsIHRha2UgcGxhY2Ugc29sZWx5IGF0IHRoZSBkZXBhcnRtZW50J3MgcHJlbWlzZXMgYXQKKworICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworCis0LiBBbGwgZm9ybXMgb2YgdGhlIFNvZnR3YXJlIHdpbGwgYmUga2VwdCBpbiBhIHJlYXNvbmFibHkgc2VjdXJlIHBsYWNlIHRvCitwcmV2ZW50IHVuYXV0aG9yaXNlZCBhY2Nlc3MuCisKKzUuIEVhY2ggY29weSBvZiB0aGUgU29mdHdhcmUgb3IsIGlmIG5vdCBwcmFjdGljYWJsZSB0aGVuLCBhbnkgcGFja2FnZQorYXNzb2NpYXRlZCB0aGVyZXdpdGggc2hhbGwgYmUgc3VpdGFibHkgbWFya2VkIChhbmQgc3VjaCBtYXJraW5nIG1haW50YWluZWQpIAord2l0aCB0aGUgZm9sbG93aW5nIGNvcHlyaWdodCBub3RpY2U6ICIgQ29weXJpZ2h0IDE5OTIgTSBXIE1hY0FydGh1ciwgUiBBCitMYXNrb3dza2ksIEQgUyBNb3NzLCBKIEEgQyBSdWxsbWFubiAmIEogTSBUaG9ybnRvbiBBbGwgUmlnaHRzIFJlc2VydmVkIi4KKworNi4gVGhlIFNvZnR3YXJlIG1heSBiZSBtb2RpZmllZCBidXQgYW55IGNoYW5nZXMgbWFkZSBzaGFsbCBiZSBtYWRlCithdmFpbGFibGUgdG8gdGhlIGF1dGhvcnMuCisKKzcuIFRoZSBTb2Z0d2FyZSBzaGFsbCBiZSB1c2VkIGV4Y2x1c2l2ZWx5IGZvciBhY2FkZW1pYyB0ZWFjaGluZyBhbmQKK3Jlc2VhcmNoLiBUaGUgU29mdHdhcmUgd2lsbCBub3QgYmUgdXNlZCBmb3IgYW55IGNvbW1lcmNpYWwgcmVzZWFyY2ggb3IKK3Jlc2VhcmNoIGFzc29jaWF0ZWQgd2l0aCBhbiBpbmR1c3RyaWFsIGNvbXBhbnkuCisKKzguIFRoZSBjb25maWRlbnRpYWxpdHkgb2JsaWdhdGlvbiBpbiBwYXJhZ3JhcGggb25lIHNoYWxsIG5vdCBhcHBseToKKworICAgKGkpICB0byBpbmZvcm1hdGlvbiBhbmQgZGF0YSBrbm93biB0byB0aGUgZGVwYXJ0bWVudCBhdCB0aGUgdGltZSBvZgorCXJlY2VpcHQgaGVyZXVuZGVyIChhcyBldmlkZW5jZWQgYnkgaXRzIHdyaXR0ZW4gcmVjb3Jkcyk7CisKKyAgKGlpKQl0byBpbmZvcm1hdGlvbiBhbmQgZGF0YSB3aGljaCB3YXMgYXQgdGhlIHRpbWUgb2YgcmVjZWlwdCBpbiB0aGUgCisJcHVibGljIGRvbWFpbiBvciB0aGVyZWFmdGVyIGJlY29tZXMgc28gdGhyb3VnaCBubyB3cm9uZ2Z1bCBhY3Qgb2YKKwl0aGUgZGVwYXJ0bWVudDsKKworIChpaWkpCXRvIGluZm9ybWF0aW9uIGFuZCBkYXRhIHdoaWNoIHRoZSBkZXBhcnRtZW50IHJlY2VpdmVzIGZyb20gYSB0aGlyZAorCXBhcnR5IG5vdCBpbiBicmVhY2ggb2YgYW55IG9ibGlnYXRpb24gb2YgY29uZmlkZW50aWFsaXR5IG93ZWQgdG8KKwl0aGUgYXV0aG9ycy4KKworCisKK1BsZWFzZSBzaWduIHRoaXMgVW5kZXJ0YWtpbmcgYW5kIHJldHVybiBhIGNvcHkgb2YgaXQgdG8gaW5kaWNhdGUgdGhhdCB5b3UgCitoYXZlIHJlYWQsIHVuZGVyc3Rvb2QgYW5kIGFjY2VwdGVkIHRoZSBhYm92ZSB0ZXJtcy4KKworCisKKwkJICAgICAgRm9yIGFuZCBvbiBiZWhhbGYgb2YgX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKworCQkgICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisJCSAgICAgCisJCSAgICAgIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uCisKKwkJICAgICAgRGF0ZWQgLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4KKworCisKKworQVBQRU5ESVggMSAtIERFVEFJTFMgT0YgVEhFIFBST0NIRUNLIFNVSVRFIE9GIFBST0dSQU1TIFBST1ZJREVEICh2LjMuNC4zKQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpbGVzIHRvIGJlIGluY2x1ZGVkCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgICAgICAgICAxLiBhbmdsZW4uZiAgICAgICAgICAgIH0KKyAgICAgICAgIDIuIGFuZ2xlbi5pbmMgICAgICAgICAgfQorICAgICAgICAgMy4gYnBsb3QuZiAgICAgICAgICAgICB9CisgICAgICAgICA0LiBicGxvdC5pbmMgICAgICAgICAgIH0KKyAgICAgICAgIDUuIGJya2Nsbi5wYXIgICAgICAgICAgfQorICAgICAgICAgNi4gY2xlYW4uZiAgICAgICAgICAgICB9CisgICAgICAgICA3LiBnZmFjMnBkYi5mICAgICAgICAgIH0KKyAgICAgICAgIDguIGdmYWMycGRiLmluYyAgICAgICAgfQorICAgICAgICAgOS4gbXBsb3QuZiAgICAgICAgICAgICB9CisgICAgICAgIDEwLiBtcGxvdC5pbmMgICAgICAgICAgIH0gU291cmNlIHByb2dyYW0gZmlsZXMKKyAgICAgICAgMTEuIG5iLmMgICAgICAgICAgICAgICAgfQorICAgICAgICAxMi4gcHBsb3QuZiAgICAgICAgICAgICB9CisgICAgICAgIDEzLiBwcGxvdC5pbmMgICAgICAgICAgIH0KKyAgICAgICAgMTQuIHBzLmYgICAgICAgICAgICAgICAgfQorICAgICAgICAxNS4gcm1zZGV2LmYgICAgICAgICAgICB9CisgICAgICAgIDE2LiBybXNkZXYuaW5jICAgICAgICAgIH0KKyAgICAgICAgMTcuIHNlY3N0ci5mICAgICAgICAgICAgfQorICAgICAgICAxOC4gc3N0cnVjLnBhciAgICAgICAgICB9CisgICAgICAgIDE5LiB0cGxvdC5mICAgICAgICAgICAgIH0KKyAgICAgICAgMjAuIHRwbG90LmluYyAgICAgICAgICAgfQorICAgICAgICAyMS4gdmlvbDJwZGIuZiAgICAgICAgICB9CisgICAgICAgIDIyLiB2aW9sMnBkYi5pbmMgICAgICAgIH0KKyAgICAgICAgMjMuIHZwbG90LmYgICAgICAgICAgICAgfQorICAgICAgICAyNC4gdnBsb3QuaW5jICAgICAgICAgICB9CisgICAgICAgIDI1LiBnZmFjMnBkYi5zY3IgICAgICAgIH0KKyAgICAgICAgMjYuIHByb2NoZWNrLmNvbSAgICAgIH0KKyAgICAgICAgMjcuIHByb2NoZWNrLnNjciAgICAgIH0KKyAgICAgICAgMjguIHByb2NoZWNrX2NvbXAuY29tIH0KKyAgICAgICAgMjkuIHByb2NoZWNrX2NvbXAuc2NyIH0KKyAgICAgICAgMzAuIHByb2NoZWNrX25tci5zY3IgIH0KKyAgICAgICAgMzEuIHByb3Bsb3QuY29tICAgICAgIH0KKyAgICAgICAgMzIuIHByb3Bsb3Quc2NyICAgICAgIH0gU2NyaXB0IGZpbGVzCisgICAgICAgIDMzLiBwcm9wbG90X2NvbXAuc2NyICB9CisgICAgICAgIDM0LiBwcm9wbG90X25tci5zY3IgICB9CisgICAgICAgIDM1LiBwcm9wbG90X2NvbXAuY29tICB9CisgICAgICAgIDM2LiBwcm9zdWIuY29tICAgICAgICB9CisgICAgICAgIDM3LiBzZXR1cC5jb20gICAgICAgICB9CisgICAgICAgIDM4LiBzZXR1cC5zY3IgICAgICAgICB9CisgICAgICAgIDM5LiB2aW9sMnBkYi5zY3IgICAgICB9CisgICAgICAgIDQwLiBjb252YXguZm9yICAgICAgICAgfQorICAgICAgICA0MS4gcHJvY29tcC5jb20gICAgICAgIH0gSW5zdGFsbGF0aW9uIGZpbGVzCisgICAgICAgIDQyLiBwcm9jb21wLnNjciAgICAgICAgfQorICAgICAgICA0My4gbWFuaW5zdC5wcyAgICAgICB9CisgICAgICAgIDQ0LiBtYW51YWwudGFyLlogICAgIH0gRG9jdW1lbnRhdGlvbiBmaWxlcworICAgICAgICA0NS4gbm1yX21hbnVhbC50YXIuWiB9CisgICAgICAgIDQ2LiBwcm9jaGVjay5kYXQgICAgICAgfQorICAgICAgICA0Ny4gcHJvY2hlY2sucHJtICAgICAgIH0gRGF0YQorICAgICAgICA0OC4gcHJvY2hlY2tfY29tcC5wcm0gIH0gZmlsZXMKKyAgICAgICAgNDkuIHByb2NoZWNrX25tci5wcm0gICB9CisKKworQVBQRU5ESVggMiAtIERFVEFJTFMgT0YgVEhFIEFRVUEgU1VJVEUgT0YgUFJPR1JBTVMgUFJPVklERUQgKHYuMC40MCkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0ZpbGVzIHRvIGJlIGluY2x1ZGVkCistLS0tLS0tLS0tLS0tLS0tLS0tLQorCitTb3VyY2UgZmlsZXM6LQorLS0tLS0tLS0tLS0tCisKK0FxdWFDYWxjLmMgICAgICAgICAgICBBcXVhQ2FsYy5oCisgICAgICAgICAgICAgICAgICAgICAgQXF1YURhdGEuaAorQXF1YURpc3QuYyAgICAgICAgICAgIEFxdWFEaXN0LmggICAgCitBcXVhRmlsZXMuYyAgICAgICAgICAgQXF1YUZpbGVzLmggICAgIAorQXF1YUZ1bmN0cy5jICAgICAgICAgIEFxdWFGdW5jdHMuaCAgICAgIAorQXF1YUZ1bmN0c19iaW9zeW0uYyAgIEFxdWFGdW5jdHNfYmlvc3ltLmggICAgICAgICAgICAgCitBcXVhRnVuY3RzX2N2LmMgICAgICAgQXF1YUZ1bmN0c19jdi5oICAgICAgICAgCitBcXVhRnVuY3RzX2lvLmMgICAgICAgQXF1YUZ1bmN0c19pby5oICAgICAgICAgCitBcXVhRnVuY3RzX3BkYi5jICAgICAgQXF1YUZ1bmN0c19wZGIuaCAgICAgICAgICAKK0FxdWFGdW5jdHNfcGRibXIuYyAgICBBcXVhRnVuY3RzX3BkYm1yLmggICAgICAgICAgICAKK0FxdWFIb3cuYyAgICAgICAgICAgICBBcXVhSG93LmgKKyAgICAgICAgICAgICAgICAgICAgICBBcXVhTWFjcm9zLmggICAKK0FxdWFQc2V1ZG8uYyAgICAgICAgICBBcXVhUHNldWRvLmggICAgICAKK0FxdWFTdHJ1Y3NldC5jICAgICAgICBBcXVhU3RydWNzZXQuaAorICAgICAgICAgICAgICAgICAgICAgIEFxdWFUeXBlcy5oICAgICAgICAKK0FxdWFXaGF0LmMgICAgICAgICAgICBBcXVhV2hhdC5oICAgIAorUWV4dC5jICAgICAgICAgICAgICAgIFFleHQuaAorUmFuZ2UuYyAgICAgICAgICAgICAgIFJhbmdlLmgKKyAgICAgICAgICAgICAgICAgICAgICBjdl9zdWJzLmggCisKK1NjcmlwdCBmaWxlczotCistLS0tLS0tLS0tLS0KK1JlYWROcnYucG0qICAgICAgICAgICBjb252RElBTkF0b3JzcmVzdHIgICAgcWRiZXh0KgorYXFkcnN0KiAgICAgICAgICAgICAgIGNvbnZESVNHRU9kaXN0cmVzdHIgICBxZ3Vlc3NjKgorYXFwYyogICAgICAgICAgICAgICAgIGNvbnZESVNHRU90b3JzcmVzdHIgICBxZ3Vlc3NyKgorYXFwY3NlbCAgICAgICAgICAgICAgIGNvbnZNUlRBQkxFICAgICAgICAgICBxaGVscCoKK2FxdWFuYWwucGwqICAgICAgICAgICBjb252WFBMT1JkaXN0cmVzdHIgICAgcW1vZHIqCitjbGVhbjAqICAgICAgICAgICAgICAgY29udlhQTE9SdG9yc3Jlc3RyICAgIHFzcGxpdHIqCitjb252QklPU1lNZGlzdHJlc3RyICAgbWFrZWNtbSogICAgICAgICAgICAgIHFzdW1tKgorY29udkJJT1NZTXRvcnNyZXN0ciAgIHFjb252ZXJ0KiAgICAgICAgICAgICBxc3VtbV9hdXgxKgorY29udkRJQU5BZGlzdHJlc3RyICAgIHFjb252ciogICAgICAgICAgICAgICBxc3VtbV9hdXgyKgorCitEb2N1bWVudGF0aW9uOi0KKy0tLS0tLS0tLS0tLS0KK1JFQURNRSAgICAgICAgICAgICAgICAgbW9kZWxzLnR4dCAgICAgICAgICAgICBxY29udnIudHh0CithcXBjLnR4dCAgICAgICAgICAgICAgIG1yLnR4dCAgICAgICAgICAgICAgICAgcWRiZXh0LnR4dAorYXF1YV9zZXR1cC50eHQgICAgICAgICBuYW1lcy50eHQgICAgICAgICAgICAgIHFleHQudHh0CitiaW9zeW0udHh0ICAgICAgICAgICAgIG92ZXJ2aWV3LnR4dCAgICAgICAgICAgcWhlbHAudHh0CitjaGFpbnMudHh0ICAgICAgICAgICAgIHBlcmwudHh0ICAgICAgICAgICAgICAgcXN1bW0udHh0Citjb252ZXJzaW9uLnR4dCAgICAgICAgIHByb2NoZWNrLnR4dCAgICAgICAgICAgcmVzdHJhaW50X2Zvcm1hdC50eHQKK2RiYXMudHh0ICAgICAgICAgICAgICAgcWFuYWwudHh0ICAgICAgICAgICAgICBzZXR1cC50eHQKK2ludHJvLnR4dCAgICAgICAgICAgICAgcWNsZWFuLnR4dCAgICAgICAgICAgICB0b3JzaW9uLnR4dAorbG9nLnR4dCAgICAgICAgICAgICAgICBxY29udmVydC50eHQgICAgICAgICAgIHhwbG9yLnR4dAorCitFeHRyYXM6LQorLS0tLS0tCitqb2lucGRiKiAgICAgICAgICAgICAgIHNwbGl0cGRiKgorCisKKworUGxlYXNlIGNvbXBsZXRlIHRoZSBhYm92ZSBmb3JtLCBzaWduIGl0LCBhbmQgdGhlbiBzZW5kIG9yIGZheCB0bzotCisKKworUm9tYW4gTGFza293c2tpCitFdXJvcGVhbiBCaW9pbmZvcm1hdGljcyBJbnN0aXR1dGUsCitXZWxsY29tZSBUcnVzdCBHZW5vbWUgQ2FtcHVzLAorSGlueHRvbiwKK0NhbWJyaWRnZSwgQ0IxMCAxU0QsCitVbml0ZWQgS2luZ2RvbQorIAorRmF4Oi0gKzQ0ICgwKTEyMjMgNDk0IDQ2OAorCitJZiB5b3UgaGF2ZSBhbnkgcHJvYmxlbXMgZWl0aGVyIGluc3RhbGxpbmcgdGhlIHNvZnR3YXJlIG9yIHJ1bm5pbmcgaXQsCitwbGVhc2UgZS1tYWlsIHlvdXIgcHJvYmxlbXMgdG86LQorCisgICAgcm9tYW5AZWJpLmFjLnVrCisKK1F1ZXN0aW9ucyBhYm91dCBBUVVBIHNob3VsZCBiZSBkaXJlY3RlZCB0byBUb24gUnVsbG1hbm4gYXQKKworICAgICAgcnVsbEBubXIuY2hlbS5ydXUubmwKKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvcHNpcHJlZCBiL2xpY2Vuc2VzL3BzaXByZWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y3OTdkMQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL3BzaXByZWQKQEAgLTAsMCArMSw4OSBAQAorUExFQVNFIFJFQUQgVEhFIEZPTExPV0lORyBMSUNFTlNFIEFHUkVFTUVOVC4gQlkgVVNJTkcgVEhFIFBST0dSQU0gWU9VIEFSRQorQUNLTk9XTEVER0lORyBUSEUgRkFDVCBUSEFUIFlPVSBBR1JFRSBUTyBUSEUgVEVSTVMgT1VUTElORUQgSU4gVEhJUworQUdSRUVNRU5ULiBVU0VSUyBXSVNISU5HIFRPIFVTRSBUSEUgU09GVFdBUkUgRk9SIENPTU1FUkNJQUwgQUNUSVZJVElFUworTk9UIENPVkVSRUQgQlkgVEhJUyBBR1JFRU1FTlQgU0hPVUxEIFNFTkQgRS1NQUlMIFRPOiBkdGpAY3MudWNsLmFjLnVrCisKKyogTk9URSBSRUNFTlQgQ0hBTkdFUyBUTyBQQVJBR1JBUEggOCAqCisKKworCisgUFNJUFJFRDIgLSBQUk9URUlOIFNFQ09OREFSWSBTVFJVQ1RVUkUgUFJFRElDVElPTiBQUk9HUkFNIEJZIEQuVC5KT05FUworIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworICAgICAgICAgICAgICAgICAgICAgICAgICBHRU5FUkFMIExJQ0VOU0UgJgorICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLQorCisJCSAgICAgQ09ORklERU5USUFMSVRZIEFHUkVFTUVOVAorCQkgICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworCisKK0luIHJlZ2FyZCB0byB0aGUgcHJvdGVpbiBzdHJ1Y3R1cmUgcHJlZGljdGlvbiBwcm9ncmFtIChQU0lQUkVEMikKK2hlcmV3aXRoICh0aGUgU29mdHdhcmUpIHRoZSBjb3B5cmlnaHQgYW5kIG90aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eQorcmlnaHRzIHRvIHdoaWNoIGJlbG9uZyB0byB0aGUgQXV0aG9yKHMpLgorCitBbnkgdXNlciAodGhlIFVzZXIpIG9mIHRoZSBwcm9ncmFtIHVuZGVydGFrZXMgdG8gdGhlIENvcHlyaWdodCBob2xkZXIgdGhhdCBoZQorb3Igc2hlIHNoYWxsIGJlIGJvdW5kIGJ5IHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnM6LQorCisxLiBUaGUgVXNlciB3aWxsIHJlY2VpdmUgdGhlIFNvZnR3YXJlIGFuZCBhbnkgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGluCitjb25maWRlbmNlIGFuZCB3aWxsIG5vdCB1c2UgdGhlIHNhbWUgZXhjZXB0IGZvciB0aGUgcHVycG9zZSBvZiB0aGVpciBvd24gCityZXNlYXJjaC4gVGhlIFNvZnR3YXJlIHdpbGwgYmUgdXNlZCBvbmx5IGJ5IHN1Y2ggb2YgdGhlIFVzZXIncyBvZmZpY2VycyBvcgorZW1wbG95ZWVzIHRvIHdob20gaXQgbXVzdCByZWFzb25hYmx5IGJlIGNvbW11bmljYXRlZCB0byBlbmFibGUgdGhlbSB0bwordW5kZXJ0YWtlIHRoZWlyIHJlc2VhcmNoIGFuZCB3aG8gYWdyZWUgdG8gYmUgYm91bmQgYnkgdGhlIHNhbWUgY29uZmlkZW5jZS4KK1RoZSBVc2VyIHNoYWxsIHByb2N1cmUgYW5kIGVuZm9yY2Ugc3VjaCBhZ3JlZW1lbnQgZnJvbSBoaXMgb3IgaGVyIHN0YWZmIGZvcgordGhlIGJlbmVmaXQgb2YgdGhlIENvcHlyaWdodCBob2xkZXIuCisKKzIuIFRoZSBwdWJsaWNhdGlvbiBvZiByZXNlYXJjaCB1c2luZyB0aGUgU29mdHdhcmUgbXVzdCBpbmNsdWRlIGFuCithcHByb3ByaWF0ZSBjaXRhdGlvbiB0byB0aGUgbWV0aG9kOgorCitKb25lcywgRC5ULiAoMTk5OSkgUHJvdGVpbiBzZWNvbmRhcnkgc3RydWN0dXJlIHByZWRpY3Rpb24gYmFzZWQgb24KK3Bvc2l0aW9uLXNwZWNpZmljIHNjb3JpbmcgbWF0cmljZXMuIEouIE1vbC4gQmlvbC4gMjkyOjE5NS0yMDIuCisKKzMuIEFsbCBmb3JtcyBvZiB0aGUgU29mdHdhcmUgd2lsbCBiZSBrZXB0IGluIGEgcmVhc29uYWJseSBzZWN1cmUgcGxhY2UgdG8KK3ByZXZlbnQgdW5hdXRob3Jpc2VkIGFjY2Vzcy4KKworNC4gRWFjaCBjb3B5IG9mIHRoZSBTb2Z0d2FyZSBvciwgaWYgbm90IHByYWN0aWNhYmxlIHRoZW4sIGFueSBwYWNrYWdlCithc3NvY2lhdGVkIHRoZXJld2l0aCBzaGFsbCBiZSBzdWl0YWJseSBtYXJrZWQgKGFuZCBzdWNoIG1hcmtpbmcgbWFpbnRhaW5lZCkgCit3aXRoIHRoZSBmb2xsb3dpbmcgY29weXJpZ2h0IG5vdGljZTogIkNvcHlyaWdodCAyMDAwIEQuVC5Kb25lcy4gQWxsIFJpZ2h0cworUmVzZXJ2ZWQuIi4KKworNS4gVGhlIFNvZnR3YXJlIG1heSBiZSBtb2RpZmllZCwgYnV0IGFueSBjaGFuZ2VzIG1hZGUgc2hhbGwgYmUgY29tbXVuaWNhdGVkCit0byB0aGUgQXV0aG9yKHMpIGFuZCBtYWRlIGZyZWVseSBhdmFpbGFibGUuCisKKzYuIFRoZSBTb2Z0d2FyZSBtYXkgbm90IGJlIHNvbGQgYXMgYSBzdGFuZGFsb25lIHBhY2thZ2UsIG9yIGluY29ycG9yYXRlZCBpbnRvCithIGNvbW1lcmNpYWwgc29mdHdhcmUgcGFja2FnZSB3aXRob3V0IHRoZSB3cml0dGVuIHBlcm1pc3Npb24gb2YgdGhlIENvcHlyaWdodAoraG9sZGVyLiBUaGUgU29mdHdhcmUgbWF5IGJlIHVzZWQgZnJlZWx5IGZvciBpbmRpdmlkdWFsIGFjYWRlbWljIG9yIGNvbW1lcmNpYWwKK3Jlc2VhcmNoLiBUaGUgU29mdHdhcmUgbWF5IGFsc28gYmUgbWFkZSBmcmVlbHkgYXZhaWxhYmxlIGZvciB0cmFpbmluZyBvcgordGVhY2hpbmcgcHVycG9zZXMuCisKKzcuIFRoZSByZXN1bHRzIHByb2R1Y2VkIGJ5IHRoZSBTb2Z0d2FyZSBtYXkgbm90IGJlIGluY29ycG9yYXRlZCBpbnRvIGFueQorZGF0YSBiYW5rcyBvciBkYXRhYmFzZXMgd2hpY2ggYXJlIHN1YmplY3QgdG8gdGhlIHBheW1lbnQgb2YgYWNjZXNzIG9yCitsaWNlbnNlIGZlZXMgd2l0aG91dCB0aGUgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBDb3B5cmlnaHQgaG9sZGVyLgorCis4LiBUaGUgU29mdHdhcmUgbWF5IGJlIG1hZGUgYXZhaWxhYmxlIHRvIHVzZXJzIG92ZXIgYSBsb2NhbCBuZXR3b3JrIG9yCit3aWRlIGFyZWEgbmV0d29yayAoaW5jbHVkaW5nIHRoZSBJbnRlcm5ldCksIGJ1dCBvbmx5IGlmIGFjY2VzcyBpcyBncmFudGVkCitmcmVlIG9mIGNoYXJnZSB0byBhbGwgYXV0aG9yaXNlZCB1c2Vycy4gSW5jb3Jwb3JhdGlvbiBvZiB0aGUgU29mdHdhcmUgaW50bworYSBjb21tZXJjaWFsIFdlYiBzaXRlIG9yIG90aGVyIGZlZSBwYXlpbmcgc2VydmljZSBpcyBub3QgYWxsb3dlZCB3aXRob3V0Cit0aGUgd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZSBDb3B5cmlnaHQgaG9sZGVyLiBJZiBQU0lQUkVEIHJlc3VsdHMgYXJlCityZXR1cm5lZCB0byB0aGUgdXNlciB2aWEgc3VjaCBhIG5ldHdvcmsgc2VydmljZSwgdGhlbiBhIHN1aXRhYmxlCithY2tub3dsZWRnZW1lbnQgb2YgdGhlIFBTSVBSRUQgbWV0aG9kIG11c3QgYmUgcmV0dXJuZWQgc29tZXdoZXJlIGluIHRoZQorb3V0cHV0IHRleHQuCisKKzkuIFRoZSBjb25maWRlbnRpYWxpdHkgb2JsaWdhdGlvbiBpbiBwYXJhZ3JhcGggb25lIHNoYWxsIG5vdCBhcHBseToKKworICAgKGkpICB0byBpbmZvcm1hdGlvbiBhbmQgZGF0YSBrbm93biB0byB0aGUgVXNlciBhdCB0aGUgdGltZSBvZgorCXJlY2VpcHQgaGVyZXVuZGVyIChhcyBldmlkZW5jZWQgYnkgaXRzIHdyaXR0ZW4gcmVjb3Jkcyk7CisKKyAgKGlpKQl0byBpbmZvcm1hdGlvbiBhbmQgZGF0YSB3aGljaCB3YXMgYXQgdGhlIHRpbWUgb2YgcmVjZWlwdCBpbiB0aGUgCisJcHVibGljIGRvbWFpbiBvciB0aGVyZWFmdGVyIGJlY29tZXMgc28gdGhyb3VnaCBubyB3cm9uZ2Z1bCBhY3Qgb2YKKwl0aGUgVXNlcjsKKworIChpaWkpCXRvIGluZm9ybWF0aW9uIGFuZCBkYXRhIHdoaWNoIHRoZSBVc2VyIHJlY2VpdmVzIGZyb20gYSB0aGlyZAorCXBhcnR5IG5vdCBpbiBicmVhY2ggb2YgYW55IG9ibGlnYXRpb24gb2YgY29uZmlkZW50aWFsaXR5IG93ZWQgdG8KKwl0aGUgQXV0aG9yKHMpLgorCisxMC4gVGhlIFVzZXIgdW5kZXJzdGFuZHMgdGhhdCB0aGUgU29mdHdhcmUgaXMgc3VwcGxpZWQgImFzIGlzIi4gTm8gd2FycmFudHkKKyAgIGFzIHRvIGl0cyBmaXRuZXNzIG9yIHN1aXRhYmlsaXR5IGZvciBhbnkgcHVycG9zZSB3aGF0c29ldmVyIGlzIG1hZGUgb3IKKyAgIGltcGxpZWQuIEluIG5vIGV2ZW50IHNoYWxsIHRoZSBBdXRob3Iocykgb3IgQ29weXJpZ2h0IGhvbGRlciBiZSBoZWxkCisgICByZXNwb25zaWJsZSBmb3IgYW55IGRpcmVjdCBvciBpbmRpcmVjdCBkYW1hZ2VzIGFyaXNpbmcgdGhyb3VnaCB0aGUgdXNlCisgICBvZiB0aGUgU29mdHdhcmUuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9wc3V0aWxzIGIvbGljZW5zZXMvcHN1dGlscwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZTgwM2JlCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvcHN1dGlscwpAQCAtMCwwICsxLDM5IEBACitUaGUgY29uc3RpdHVlbnQgZmlsZXMgb2YgdGhpcyBwYWNrYWdlIGxpc3RlZCBiZWxvdyBhcmUgY29weXJpZ2h0IChDKSAxOTkxLTE5OTUKK0FuZ3VzIEouIEMuIER1Z2dhbi4KKworTElDRU5TRSAgICAgICAgICBNYWtlZmlsZS5tc2MgICAgIE1ha2VmaWxlLm50ICAgICAgTWFrZWZpbGUub3MyCitNYWtlZmlsZS51bml4ICAgIFJFQURNRSAgICAgICAgICAgY29uZmlnLmggICAgICAgICBkZXNjcmlwLm1tcworZXBzZmZpdC5jICAgICAgICBlcHNmZml0Lm1hbiAgICAgIGV4dHJhY3RyZXMubWFuICAgZXh0cmFjdHJlcy5wbAorZml4ZGxzcnBzLm1hbiAgICBmaXhkbHNycHMucGwgICAgIGZpeGZtcHMubWFuICAgICAgZml4Zm1wcy5wbAorZml4bWFjcHMubWFuICAgICBmaXhtYWNwcy5wbCAgICAgIGZpeHBzZGl0cHMubWFuICAgZml4cHNkaXRwcy5wbAorZml4cHNwcHMubWFuICAgICBmaXhwc3Bwcy5wbCAgICAgIGZpeHNjcmliZXBzLm1hbiAgZml4c2NyaWJlcHMucGwKK2ZpeHRwcHMubWFuICAgICAgZml4dHBwcy5wbCAgICAgICBmaXh3Zndwcy5tYW4gICAgIGZpeHdmd3BzLnBsCitmaXh3cHBzLm1hbiAgICAgIGZpeHdwcHMucGwgICAgICAgZml4d3dwcy5tYW4gICAgICBmaXh3d3BzLnBsCitnZXRhZm0gICAgICAgICAgIGdldGFmbS5tYW4gICAgICAgaW5jbHVkZXJlcy5tYW4gICBpbmNsdWRlcmVzLnBsCittYWtldGV4dCAgICAgICAgIHBhdGNobGV2LmgJICBwc2Jvb2suYyAgICAgICAgIHBzYm9vay5tYW4KK3BzZXJyb3IuYyAgICAgICAgcHNlcnJvci5oICAgICAgICBwc21lcmdlLm1hbiAgICAgIHBzbWVyZ2UucGwKK3BzbnVwLmMgICAgICAgICAgcHNudXAubWFuCSAgcHNyZXNpemUuYyAgICAgICBwc3Jlc2l6ZS5tYW4KK3Bzc2VsZWN0LmMgICAgICAgcHNzZWxlY3QubWFuCSAgcHNzcGVjLmMgICAgICAgICBwc3NwZWMuaAorcHN0b3BzLmMgICAgICAgICBwc3RvcHMubWFuICAgICAgIHBzdXRpbC5jICAgICAgICAgcHN1dGlsLmgKK3Nob3djaGFyCisKK1RoZXkgbWF5IGJlIGNvcGllZCBhbmQgdXNlZCBmb3IgYW55IHB1cnBvc2UgKGluY2x1ZGluZyBkaXN0cmlidXRpb24gYXMgcGFydCBvZgorYSBmb3ItcHJvZml0IHByb2R1Y3QpLCBwcm92aWRlZDoKKworMSkgVGhlIG9yaWdpbmFsIGF0dHJpYnV0aW9uIG9mIHRoZSBwcm9ncmFtcyBpcyBjbGVhcmx5IGRpc3BsYXllZCBpbiB0aGUgcHJvZHVjdAorICAgYW5kL29yIGRvY3VtZW50YXRpb24sIGV2ZW4gaWYgdGhlIHByb2dyYW1zIGFyZSBtb2RpZmllZCBhbmQvb3IgcmVuYW1lZCBhcworICAgcGFydCBvZiB0aGUgcHJvZHVjdC4KKworMikgVGhlIG9yaWdpbmFsIHNvdXJjZSBjb2RlIG9mIHRoZSBwcm9ncmFtcyBpcyBwcm92aWRlZCBmcmVlIG9mIGNoYXJnZSAoZXhjZXB0CisgICBmb3IgcmVhc29uYWJsZSBkaXN0cmlidXRpb24gY29zdHMpLiBGb3IgYSBkZWZpbml0aW9uIG9mIHJlYXNvbmFibGUKKyAgIGRpc3RyaWJ1dGlvbiBjb3N0cywgc2VlIHRoZSBHbnUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBvciBMYXJyeSBXYWxsJ3MKKyAgIEFydGlzdGljIExpY2Vuc2UgKHByb3ZpZGVkIHdpdGggdGhlIFBlcmwgNCBraXQpLiBUaGUgR1BMIGFuZCBBcnRpc3RpYworICAgTGljZW5zZSBpbiBOTyBXQVkgYWZmZWN0IHRoaXMgbGljZW5zZTsgdGhleSBhcmUgbWVyZWx5IHVzZWQgYXMgZXhhbXBsZXMgb2YKKyAgIHRoZSBzcGlyaXQgaW4gd2hpY2ggaXQgaXMgaW50ZW5kZWQuCisKKzMpIFRoZXNlIHByb2dyYW1zIGFyZSBwcm92aWRlZCAiYXMtaXMiLiBObyB3YXJyYW50eSBvciBndWFyYW50ZWUgb2YgdGhlaXIKKyAgIGZpdG5lc3MgZm9yIGFueSBwYXJ0aWN1bGFyIHRhc2sgaXMgcHJvdmlkZWQuIFVzZSBvZiB0aGVzZSBwcm9ncmFtcyBpcworICAgY29tcGxldGVseSBhdCB5b3VyIG93biByaXNrLgorCitCYXNpY2FsbHksIEkgZG9uJ3QgbWluZCBob3cgeW91IHVzZSB0aGUgcHJvZ3JhbXMgc28gbG9uZyBhcyB5b3UgYWNrbm93bGVkZ2UKK3RoZSBhdXRob3IsIGFuZCBnaXZlIHBlb3BsZSB0aGUgb3JpZ2luYWxzIGlmIHRoZXkgd2FudCB0aGVtLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvcHVibGljLWRvbWFpbiBiL2xpY2Vuc2VzL3B1YmxpYy1kb21haW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjE4MzNjMwotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL3B1YmxpYy1kb21haW4KQEAgLTAsMCArMSBAQAorU29mdHdhcmUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4uCmRpZmYgLS1naXQgYS9saWNlbnNlcy9weW1vbCBiL2xpY2Vuc2VzL3B5bW9sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3NjRlYzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9weW1vbApAQCAtMCwwICsxLDUwIEBACisKKyBPcGVuLVNvdXJjZSBQeU1PTCBDb3B5cmlnaHQgTm90aWNlCisgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisgVGhlIE9wZW4tU291cmNlIFB5TU9MIHNvdXJjZSBjb2RlIGlzIGNvcHlyaWdodGVkLCBidXQgeW91IGNhbiBmcmVlbHkKKyB1c2UgYW5kIGNvcHkgaXQgYXMgbG9uZyBhcyB5b3UgZG9uJ3QgY2hhbmdlIG9yIHJlbW92ZSBhbnkgb2YgdGhlCisgQ29weXJpZ2h0IG5vdGljZXMuIFRoZSBPcGVuLVNvdXJjZSBQeU1PTCBwcm9kdWN0IGlzIG1hZGUgYXZhaWxhYmxlCisgdW5kZXIgdGhlIGZvbGxvd2luZyBvcGVuLXNvdXJjZSBsaWNlbnNlIHRlcm1zOgorCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIE9wZW4tU291cmNlIFB5TU9MIGlzIENvcHlyaWdodCAoQykgU2Nocm9kaW5nZXIsIExMQy4KKworIEFsbCBSaWdodHMgUmVzZXJ2ZWQKKworIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUsIGFuZCBkaXN0cmlidXRlIG1vZGlmaWVkCisgdmVyc2lvbnMgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgaXRzIGJ1aWx0LWluIGRvY3VtZW50YXRpb24gZm9yIGFueQorIHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorIGNvcHlyaWdodCBub3RpY2UgYXBwZWFycyBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhlIGNvcHlyaWdodAorIG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLAorIGFuZCB0aGF0IHRoZSBuYW1lIG9mIFNjaHJvZGluZ2VyLCBMTEMgbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKKyBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMsCisgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorCisgU0NIUk9ESU5HRVIsIExMQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwKKyBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOCisgTk8gRVZFTlQgU0hBTEwgU0NIUk9ESU5HRVIsIExMQyBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBJTkRJUkVDVCBPUgorIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MKKyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UKKyBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUKKyBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKyBQeU1PTCBUcmFkZW1hcmsgTm90aWNlCisgPT09PT09PT09PT09PT09PT09PT09PQorCisgUHlNT0woVE0pIGlzIGEgdHJhZGVtYXJrIG9mIFNjaHJvZGluZ2VyLCBMTEMuIERlcml2YXRpdmUKKyBzb2Z0d2FyZSB3aGljaCBjb250YWlucyBQeU1PTCBzb3VyY2UgY29kZSBtdXN0IGJlIHBsYWlubHkKKyBkaXN0aW5ndWlzaGVkIGZyb20gYW55IGFuZCBhbGwgUHlNT0wgcHJvZHVjdHMgZGlzdHJpYnV0ZWQgYnkgU2Nocm9kaW5nZXIsCisgTExDIGluIGFsbCBwdWJsaWNpdHksIGFkdmVydGlzaW5nLCBhbmQgZG9jdW1lbnRhdGlvbi4KKworIFRoZSBzbG9nYW5zLCAiSW5jbHVkZXMgUHlNT0woVE0pLiIsICJCYXNlZCBvbiBQeU1PTChUTSkgdGVjaG5vbG9neS4iLAorICJDb250YWlucyBQeU1PTChUTSkgc291cmNlIGNvZGUuIiwgYW5kICJCdWlsdCB1c2luZyBQeU1PTChUTSkuIiwgbWF5CisgYmUgdXNlZCBpbiBhZHZlcnRpc2luZywgcHVibGljaXR5LCBhbmQgZG9jdW1lbnRhdGlvbiBvZiBkZXJpdmF0aXZlCisgc29mdHdhcmUgcHJvdmlkZWQgdGhhdCB0aGUgbm90aWNlLCAiUHlNT0wgaXMgYSB0cmFkZW1hcmsgb2YgU2Nocm9kaW5nZXIsCisgTExDLiIsIGlzIGluY2x1ZGVkIGluIGEgZm9vdG5vdGUgb3IgYXQgdGhlIGVuZCBvZiB0aGUKKyBkb2N1bWVudC4KKworIEFsbCBvdGhlciBlbmRvcnNlbWVudHMgZW1wbG95aW5nIHRoZSBQeU1PTCB0cmFkZW1hcmsgcmVxdWlyZSBzcGVjaWZpYywKKyB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL3B5c3FsaXRlIGIvbGljZW5zZXMvcHlzcWxpdGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU4ZjQwNwotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL3B5c3FsaXRlCkBAIC0wLDAgKzEsMjUgQEAKKyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gXyBfICAgICAgIAorIyAgICAgICAgICAgICAgICAgICAgICBfIF9fICBfICAgXyBfX18gIF9fIF98IChfKSB8XyBfX18gCisjICAgICAgICAgICAgICAgICAgICAgfCAnXyBcfCB8IHwgLyBfX3wvIF9gIHwgfCB8IF9fLyBfIFwKKyMgICAgICAgICAgICAgICAgICAgICB8IHxfKSB8IHxffCBcX18gXCAoX3wgfCB8IHwgfHwgIF9fLworIyAgICAgICAgICAgICAgICAgICAgIHwgLl9fLyBcX18sIHxfX18vXF9fLCB8X3xffFxfX1xfX198CisjICAgICAgICAgICAgICAgICAgICAgfF98ICAgIHxfX18vICAgICAgICB8X3wgICAgICAgICAgICAKKyMKKyMgICAgICAgICAgICAgICBBIERCIEFQSSB2Mi4wIGNvbXBhdGlibGUgaW50ZXJmYWNlIHRvIFNRTGl0ZQorIyAgICAgICAgICAgICAgICAgICAgICAgRW1iZWRkZWQgUmVsYXRpb25hbCBEYXRhYmFzZS4KKyMgICAgICAgICAgICAgICAgICAgICAgICAgIENvcHlyaWdodCAoYykgMjAwMS0yMDAyCisjICAgICAgICAgICAgICAgICAgIE1pY2hhZWwgT3dlbnMgPG1pa2VAbWlrZXNjbHV0dGVyLmNvbT4KKyMKKyMgVGhpcyBtb2R1bGUgd2FzIGluc3BpcmVkIGJ5IE15U1FMZGIgUHl0aG9uIGludGVyZmFjZSB0byBNeVNRTC4gTXVjaCBvZiB0aGUKKyMgc291cmNlIGNvZGUgcmVsYXRlZCB0byBQeXRob24gZXh0ZW5zaW9uIHdyaXRpbmcgaW4gdGhpcyBtb2R1bGUgd2FzIGRvbmUgd2l0aAorIyB0aGUgaGVscCBvZiBNeVNRTGRiLiBNYW55IHRoYW5rcyB0byBBbmR5IER1c3RtYW4gZm9yIGhpcyBleGVjZWxsZW50IHdvcmsgd2l0aAorIyBNeVNRTGRiLgorIworIyBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGFuZCBpdHMKKyMgZG9jdW1lbnRhdGlvbiBmb3IgYW55IHB1cnBvc2UgYW5kIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0CisjIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIGFuZCB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQKKyMgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBzdXBwb3J0aW5nIGRvY3VtZW50YXRpb24uCisjCisjIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQgV0lUSE9VVAorIyBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUworIyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9xZXJhZGlhbnQgYi9saWNlbnNlcy9xZXJhZGlhbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmM2M2I2NgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL3FlcmFkaWFudApAQCAtMCwwICsxLDQ0IEBACisJTElNSVRFRCBVU0UgU09GVFdBUkUgTElDRU5TRSBBR1JFRU1FTlQKKworVGhpcyBMaW1pdGVkIFVzZSBTb2Z0d2FyZSBMaWNlbnNlIEFncmVlbWVudCAodGhlICJBZ3JlZW1lbnQiKSBpcyBhIGxlZ2FsIGFncmVlbWVudCBiZXR3ZWVuIHlvdSwgdGhlIGVuZC11c2VyLCBhbmQgSWQgU29mdHdhcmUsIEluYy4gKCJJRCIpLiAgQlkgQ09OVElOVUlORyBUSEUgSU5TVEFMTEFUSU9OIE9GIFRISVMgU09GVFdBUkUgKFRIRSAiU09GVFdBUkUiKSwgQlkgTE9BRElORyBPUiBSVU5OSU5HIFRIRSBTT0ZUV0FSRSwgT1IgQlkgUExBQ0lORyBPUiBDT1BZSU5HIFRIRSBTT0ZUV0FSRSBPTlRPIFlPVVIgQ09NUFVURVIgSEFSRCBEUklWRSwgQ09NUFVURVIgUkFNIE9SIE9USEVSIFNUT1JBR0UsIFlPVSBBUkUgQUdSRUVJTkcgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgQUdSRUVNRU5ULgorCisxLglHcmFudCBvZiBMaWNlbnNlLiAgU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIHByb3Zpc2lvbnMgb2YgdGhpcyBBZ3JlZW1lbnQsIElEIGdyYW50cyB0byB5b3UgdGhlIG5vbi1leGNsdXNpdmUgYW5kIGxpbWl0ZWQgcmlnaHQgdG8gdXNlIHRoZSBTb2Z0d2FyZSBvbmx5IGluIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgZm9ybS4gVGhlIHRlcm0gIlNvZnR3YXJlIiBpbmNsdWRlcyBhbGwgZWxlbWVudHMgb2YgdGhlIFNvZnR3YXJlLiBZb3UgYXJlIG5vdCByZWNlaXZpbmcgYW55IG93bmVyc2hpcCBvciBwcm9wcmlldGFyeSByaWdodCwgdGl0bGUgb3IgaW50ZXJlc3QgaW4gb3IgdG8gdGhlIFNvZnR3YXJlIG9yIHRoZSBjb3B5cmlnaHRzLCB0cmFkZW1hcmtzLCBvciBvdGhlciByaWdodHMgcmVsYXRlZCB0aGVyZXRvLiAgRm9yIHB1cnBvc2VzIG9mIHRoZSBmaXJzdCBzZW50ZW5jZSBvZiAgdGhpcyBzZWN0aW9uLCAidXNlIiBtZWFucyBsb2FkaW5nIHRoZSBTb2Z0d2FyZSBpbnRvIFJBTSBhbmQvb3Igb250byBjb21wdXRlciBoYXJkIGRyaXZlLCBhcyB3ZWxsIGFzIGluc3RhbGxhdGlvbiBvZiB0aGUgU29mdHdhcmUgb24gYSBoYXJkIGRpc2sgb3Igb3RoZXIgc3RvcmFnZSBkZXZpY2UgYW5kIG1lYW5zIHRoZSB1c2VzIHBlcm1pdHRlZCBpbiBzZWN0aW9uIDMuIGhlcmVpbmJlbG93LiAgWW91IGFncmVlIHRoYXQgdGhlIFNvZnR3YXJlIHdpbGwgbm90IGJlIHNoaXBwZWQsIHRyYW5zZmVycmVkIG9yIGV4cG9ydGVkIGludG8gYW55IGNvdW50cnkgaW4gdmlvbGF0aW9uIG9mIHRoZSBVLlMuIEV4cG9ydCBBZG1pbmlzdHJhdGlvbiBBY3QgKG9yIGFueSBvdGhlciBsYXcgZ292ZXJuaW5nIHN1Y2ggbWF0dGVycykgYnkgeW91IG9yIGFueW9uZSBhdCB5b3VyIGRpcmVjdGlvbiBhbmQgdGhhdCB5b3Ugd2lsbCBub3QgdXRpbGl6ZSBhbmQgd2lsbCBub3QgYXV0aG9yaXplIGFueW9uZSB0byB1dGlsaXplLCBpbiBhbnkgb3RoZXIgbWFubmVyLCB0aGUgU29mdHdhcmUgaW4gdmlvbGF0aW9uIG9mIGFueSBhcHBsaWNhYmxlIGxhdy4gIFRoZSBTb2Z0d2FyZSBzaGFsbCBub3QgYmUgZG93bmxvYWRlZCBvciBvdGhlcndpc2UgZXhwb3J0ZWQgb3IgcmVleHBvcnRlZCBpbnRvIChvciB0byBhIG5hdGlvbmFsIG9yIHJlc2lkZW50IG9mKSBhbnkgY291bnRyeSB0byB3aGljaCB0aGUgVS5TLiBoYXMgZW1iYXJnb2VkIGdvb2RzIG9yIHRvIGFueW9uZSBvciBpbnRvIGFueSBjb3VudHJ5IHdoby93aGljaCBhcmUgcHJvaGliaXRlZCwgYnkgYXBwbGljYWJsZSBsYXcsIGZyb20gcmVjZWl2aW5nIHN1Y2ggcHJvcGVydHkuCisKKzIuCVByb2hpYml0aW9ucy4gWW91LCB3aGV0aGVyIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIHNoYWxsIG5vdCBkbyBhbnkgb2YgdGhlIGZvbGxvd2luZyBhY3RzOgorCithLglyZW50IHRoZSBTb2Z0d2FyZTsKKworYi4Jc2VsbCB0aGUgU29mdHdhcmU7CisKK2MuCWxlYXNlIG9yIGxlbmQgdGhlIFNvZnR3YXJlOworCitkLglkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSAoZXhjZXB0IGFzIHBlcm1pdHRlZCBieSBzZWN0aW9uIDMuIGhlcmVpbmJlbG93KTsKKworZS4JaW4gYW55IG90aGVyIG1hbm5lciBhbmQgdGhyb3VnaCBhbnkgbWVkaXVtIHdoYXRzb2V2ZXIgY29tbWVyY2lhbGx5IGV4cGxvaXQgdGhlIFNvZnR3YXJlIG9yIHVzZSB0aGUgU29mdHdhcmUgZm9yIGFueSBjb21tZXJjaWFsIHB1cnBvc2U7CisKK2YuCWRpc2Fzc2VtYmxlLCByZXZlcnNlIGVuZ2luZWVyLCBkZWNvbXBpbGUsIG1vZGlmeSBvciBhbHRlciB0aGUgU29mdHdhcmU7CisKK2cuCXRyYW5zbGF0ZSB0aGUgU29mdHdhcmU7CisKK2guCXJlcHJvZHVjZSBvciBjb3B5IHRoZSBTb2Z0d2FyZSAoZXhjZXB0IGFzIHBlcm1pdHRlZCBieSBzZWN0aW9uIDMuIGhlcmVpbmJlbG93KTsKKworaS4JcHVibGljbHkgZGlzcGxheSB0aGUgU29mdHdhcmU7CisKK2ouCXByZXBhcmUgb3IgZGV2ZWxvcCBkZXJpdmF0aXZlIHdvcmtzIGJhc2VkIHVwb24gdGhlIFNvZnR3YXJlOyBvcgorCitrLglyZW1vdmUgb3IgYWx0ZXIgYW55IGxlZ2FsIG5vdGljZXMgb3Igb3RoZXIgbWFya2luZ3Mgb3IgbGVnZW5kcywgc3VjaCBhcyB0cmFkZW1hcmsgYW5kIGNvcHlyaWdodCBub3RpY2VzLCBhZmZpeGVkIG9uIG9yIHdpdGhpbiB0aGUgU29mdHdhcmUuCisKKworMy4JUGVybWl0dGVkIFVzZXMuICBTbyBsb25nIGFzIHRoaXMgQWdyZWVtZW50IGFjY29tcGFuaWVzIGVhY2ggY29weSB5b3UgbWFrZSBvZiB0aGUgU29mdHdhcmUsIGFuZCBzbyBsb25nIGFzIHlvdSBmdWxseSBjb21wbHksIGF0IGFsbCB0aW1lcywgd2l0aCB0aGlzIEFncmVlbWVudCwgSUQgZ3JhbnRzIHRvIHlvdSB0aGUgbm9uLWV4Y2x1c2l2ZSBhbmQgbGltaXRlZCByaWdodCB0byBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgU29mdHdhcmUgZnJlZSBvZiBjaGFyZ2UgZm9yIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzIGJ5IGVsZWN0cm9uaWMgbWVhbnMgb25seSBhbmQgdGhlIG5vbi1leGNsdXNpdmUgYW5kIGxpbWl0ZWQgcmlnaHQgdG8gdXNlIHRoZSBTb2Z0d2FyZSB0byBjcmVhdGUgeW91ciBvd24gbW9kaWZpY2F0aW9ucyBmb3Igb3BlcmF0aW9uIG9ubHkgd2l0aCB0aGUgZnVsbCB2ZXJzaW9uIG9mIHRoZSBzb2Z0d2FyZSBnYW1lIFFVQUtFIElJSSBBUkVOQTsgcHJvdmlkZWQsIGhvd2V2ZXIsIHlvdSBzaGFsbCBub3QgbWFrZSBhbnkgbW9kaWZpY2F0aW9ucyB1bmxlc3MgYW5kIHVudGlsIHlvdSBoYXZlIGFncmVlZCB0byBiZSBib3VuZCBieSB0aGUgdGVybXMgb2YgdGhlIExJTUlURUQgVVNFIFNPRlRXQVJFIExJQ0VOU0UgQUdSRUVNRU5UIHdoaWNoIGFjY29tcGFuaWVzIHRoZSBmdWxsIHZlcnNpb24gb2YgUVVBS0UgSUlJIEFSRU5BLiAgT3RoZXIgdGhhbiB0aGUgZWxlY3Ryb25pYyBjb3BpZXMgcGVybWl0dGVkIGFib3ZlLCB5b3UgbWF5IG1ha2Ugb25seSB0aGUgZm9sbG93aW5nIGNvcGllcyBvZiB0aGUgU29mdHdhcmU6IChpKSB5b3UgbWF5IGNvcHkgdGhlIFNvZnR3YXJlIG9udG8geW91ciBjb21wdXRlciBoYXJkIGRyaXZlOyAoaWkpIHlvdSBtYXkgY29weSB0aGUgU29mdHdhcmUgZnJvbSB5b3VyIGNvbXB1dGVyIGhhcmQgZHJpdmUgaW50byB5b3VyIGNvbXB1dGVyIFJBTTsgYW5kIChpaWkpIHlvdSBtYXkgbWFrZSBvbmUgKDEpICJiYWNrLXVwIiBvciBhcmNoaXZhbCBjb3B5IG9mIHRoZSBTb2Z0d2FyZSBvbiBvbmUgKDEpIGhhcmQgZGlzay4gWW91IHNoYWxsIG5vdCB1c2UsIGNvcHkgb3IgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgaW4gYW55IGluZnJpbmdpbmcgbWFubmVyIG9yIGluIGFueSBtYW5uZXIgd2hpY2ggdmlvbGF0ZXMgYW55IGxhdyBvciAgdGhpcmQgcGFydHkgcmlnaHQgYW5kIHlvdSBzaGFsbCBub3QgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgdG9nZXRoZXIgd2l0aCBhbnkgbWF0ZXJpYWwgd2hpY2ggaW5mcmluZ2VzIGFnYWluc3QgYW55IHRoaXJkIHBhcnR5IHJpZ2h0IG9yIHdoaWNoIGlzIGxpYmVsb3VzLCBkZWZhbWF0b3J5LCBvYnNjZW5lLCBmYWxzZSwgbWlzbGVhZGluZywgb3Igb3RoZXJ3aXNlIGlsbGVnYWwgb3IgdW5sYXdmdWwuIElEIHJlc2VydmVzIGFsbCByaWdodHMgbm90IGdyYW50ZWQgaW4gdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbGwgcmlnaHRzIHRvIElEJ3MgdHJhZGVtYXJrcy4gWW91IHNoYWxsIG5vdCBjb21tZXJjaWFsbHkgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUuCisKKzQuCUludGVsbGVjdHVhbCBQcm9wZXJ0eSBSaWdodHMuICBUaGUgU29mdHdhcmUgYW5kIGFsbCBjb3B5cmlnaHRzLCB0cmFkZW1hcmtzIGFuZCBhbGwgb3RoZXIgY29uY2VpdmFibGUgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyByZWxhdGVkIHRvIHRoZSBTb2Z0d2FyZSBhcmUgb3duZWQgYnkgSUQgYW5kIGFyZSBwcm90ZWN0ZWQgYnkgVW5pdGVkIFN0YXRlcyBjb3B5cmlnaHQgbGF3cywgaW50ZXJuYXRpb25hbCB0cmVhdHkgcHJvdmlzaW9ucyBhbmQgYWxsIGFwcGxpY2FibGUgbGF3LCBzdWNoIGFzIHRoZSBMYW5oYW0gQWN0LiAgWW91IG11c3QgdHJlYXQgdGhlIFNvZnR3YXJlIGxpa2UgYW55IG90aGVyIGNvcHlyaWdodGVkIG1hdGVyaWFsLCBhcyByZXF1aXJlZCBieSAxNyBVLlMuQy4gwqcxMDEgZXQgc2VxLiBhbmQgb3RoZXIgYXBwbGljYWJsZSBsYXcuICBZb3UgYWdyZWUgdG8gdXNlIHlvdXIgYmVzdCBlZmZvcnRzIHRvIHNlZSB0aGF0IGFueSB1c2VyIG9mIHRoZSBTb2Z0d2FyZSBsaWNlbnNlZCBoZXJldW5kZXIgY29tcGxpZXMgd2l0aCB0aGlzIEFncmVlbWVudC4gIFlvdSBhZ3JlZSB0aGF0IHlvdSBhcmUgcmVjZWl2aW5nIGEgY29weSBvZiB0aGUgU29mdHdhcmUgYnkgbGljZW5zZSBvbmx5IGFuZCBub3QgYnkgc2FsZSBhbmQgdGhhdCB0aGUgImZpcnN0IHNhbGUiIGRvY3RyaW5lIG9mIDE3IFUuUy5DLiDCpzEwOSBkb2VzIG5vdCBhcHBseSB0byB5b3VyIHJlY2VpcHQgb3IgdXNlIG9mIHRoZSBTb2Z0d2FyZS4KKworNS4JTk8gV0FSUkFOVElFUy4gIElEIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUywgV0hFVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBXSVRIIFJFU1BFQ1QgVE8gVEhFIFNPRlRXQVJFLiAgSUQgRE9FUyBOT1QgV0FSUkFOVCBUSEFUIFRIRSBPUEVSQVRJT04gT0YgVEhFIFNPRlRXQVJFIFdJTEwgQkUgVU5JTlRFUlJVUFRFRCBPUiBFUlJPUiBGUkVFIE9SIFRIQVQgVEhFIFNPRlRXQVJFIFdJTEwgTUVFVCBZT1VSIFNQRUNJRklDIFJFUVVJUkVNRU5UUy4gIEFERElUSU9OQUwgU1RBVEVNRU5UUywgV0hFVEhFUiBPUkFMIE9SIFdSSVRURU4sIERPIE5PVCBDT05TVElUVVRFIFdBUlJBTlRJRVMgQlkgSUQgQU5EIFNIT1VMRCBOT1QgQkUgUkVMSUVEIFVQT04uICBUSElTIFNFQ1RJT04gNS4gU0hBTEwgU1VSVklWRSBDQU5DRUxMQVRJT04gT1IgVEVSTUlOQVRJT04gT0YgVEhJUyBBR1JFRU1FTlQuCisKKzYuCUdvdmVybmluZyBMYXcsIFZlbnVlLCBJbmRlbW5pdHkgYW5kIExpYWJpbGl0eSBMaW1pdGF0aW9uLiAgVGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgY29uc3RydWVkIGluIGFjY29yZGFuY2Ugd2l0aCBhbmQgZ292ZXJuZWQgYnkgdGhlIGFwcGxpY2FibGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgVGV4YXMgYW5kIGFwcGxpY2FibGUgVW5pdGVkIFN0YXRlcyBmZWRlcmFsIGxhdy4gIENvcHlyaWdodCBhbmQgb3RoZXIgcHJvcHJpZXRhcnkgbWF0dGVycyB3aWxsIGJlIGdvdmVybmVkIGJ5IFVuaXRlZCBTdGF0ZXMgbGF3cyBhbmQgaW50ZXJuYXRpb25hbCB0cmVhdGllcy4gIEV4Y2x1c2l2ZSB2ZW51ZSBmb3IgYWxsIGxpdGlnYXRpb24gcmVnYXJkaW5nIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGluIERhbGxhcyBDb3VudHksIFRleGFzIGFuZCB5b3UgYWdyZWUgdG8gc3VibWl0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIGNvdXJ0cyBpbiBEYWxsYXMsIFRleGFzIGZvciBhbnkgc3VjaCBsaXRpZ2F0aW9uLiBZb3UgYWdyZWUgdG8gaW5kZW1uaWZ5LCBkZWZlbmQgYW5kIGhvbGQgaGFybWxlc3MgSUQgYW5kIElEJ3Mgb2ZmaWNlcnMsIGVtcGxveWVlcywgZGlyZWN0b3JzLCBhZ2VudHMsIGxpY2Vuc2VlcyAoZXhjbHVkaW5nIHlvdSksIHN1Y2Nlc3NvcnMgYW5kIGFzc2lnbnMgZnJvbSBhbmQgYWdhaW5zdCBhbGwgbG9zc2VzLCBsYXdzdWl0cywgZGFtYWdlcywgY2F1c2VzIG9mIGFjdGlvbiBhbmQgY2xhaW1zIHJlbGF0aW5nIHRvIGFuZC9vciBhcmlzaW5nIGZyb20geW91ciBicmVhY2ggb2YgdGhpcyBBZ3JlZW1lbnQgYW5kL29yIHlvdXIgZGlzdHJpYnV0aW9uIG9yIG90aGVyIHVzZSBvZiB0aGUgU29mdHdhcmUuICBZb3UgYWdyZWUgdGhhdCB5b3VyIHVuYXV0aG9yaXplZCB1c2Ugb2YgdGhlIFNvZnR3YXJlLCBvciBhbnkgcGFydCB0aGVyZW9mLCBtYXkgaW1tZWRpYXRlbHkgYW5kIGlycmVwYXJhYmx5IGRhbWFnZSBJRCBzdWNoIHRoYXQgSUQgY291bGQgbm90IGJlIGFkZXF1YXRlbHkgY29tcGVuc2F0ZWQgc29sZWx5IGJ5IGEgbW9uZXRhcnkgYXdhcmQgYW5kIHRoYXQgYXQgSUQncyBvcHRpb24gSUQgc2hhbGwgYmUgZW50aXRsZWQgdG8gYW4gaW5qdW5jdGl2ZSBvcmRlciwgaW4gYWRkaXRpb24gdG8gYWxsIG90aGVyIGF2YWlsYWJsZSByZW1lZGllcyBpbmNsdWRpbmcgYSBtb25ldGFyeSBhd2FyZCwgYXBwcm9wcmlhdGVseSByZXN0cmFpbmluZyBhbmQvb3IgIHByb2hpYml0aW5nIHN1Y2ggdW5hdXRob3JpemVkIHVzZSB3aXRob3V0IHRoZSBuZWNlc3NpdHkgb2YgSUQgcG9zdGluZyBib25kIG9yIG90aGVyIHNlY3VyaXR5LiBJTiBBTlkgQ0FTRSwgSUQgQU5EIElEJ1MgT0ZGSUNFUlMsIEVNUExPWUVFUywgRElSRUNUT1JTLCBBR0VOVFMsIExJQ0VOU0VFUywgU1VCTElDRU5TRUVTLCBTVUNDRVNTT1JTIEFORCBBU1NJR05TIFNIQUxMIE5PVCBCRSBMSUFCTEUgRk9SIExPU1MgT0YgREFUQSwgTE9TUyBPRiBQUk9GSVRTLCBMT1NUIFNBVklOR1MsIFNQRUNJQUwsIElOQ0lERU5UQUwsIENPTlNFUVVFTlRJQUwsIElORElSRUNULCBQVU5JVElWRSBPUiBPVEhFUiBTSU1JTEFSIERBTUFHRVMgQVJJU0lORyBGUk9NIEFOWSBBTExFR0VEIENMQUlNIEZPUiBCUkVBQ0ggT0YgV0FSUkFOVFksIEJSRUFDSCBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSwgU1RSSUNUIFBST0RVQ1QgTElBQklMSVRZLCBPUiBPVEhFUiBMRUdBTCBUSEVPUlkgRVZFTiBJRiBJRCBPUiBJVFMgQUdFTlRTIEhBVkUgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMgT1IgRVZFTiBJRiBTVUNIIERBTUFHRVMgQVJFIEZPUkVTRUVBQkxFLCBPUiBMSUFCTEUgRk9SIEFOWSBDTEFJTSBCWSBBTlkgT1RIRVIgUEFSVFkuICBTb21lIGp1cmlzZGljdGlvbnMgZG8gbm90IGFsbG93IHRoZSBleGNsdXNpb24gb3IgbGltaXRhdGlvbiBvZiBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc28gdGhlIGFib3ZlIGxpbWl0YXRpb24gb3IgZXhjbHVzaW9uIG1heSBub3QgYXBwbHkgdG8geW91LiBUaGlzIFNlY3Rpb24gNi4gc2hhbGwgc3Vydml2ZSBjYW5jZWxsYXRpb24gb3IgdGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQuCisKKzcuCVUuUy4gR292ZXJubWVudCBSZXN0cmljdGVkIFJpZ2h0cy4gVG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlLCB0aGUgVW5pdGVkIFN0YXRlcyBHb3Zlcm5tZW50IHNoYWxsIG9ubHkgaGF2ZSB0aG9zZSByaWdodHMgdG8gdXNlIHRoZSBTb2Z0d2FyZSBhcyBleHByZXNzbHkgc3RhdGVkIGFuZCBleHByZXNzbHkgbGltaXRlZCBhbmQgcmVzdHJpY3RlZCBpbiB0aGlzIEFncmVlbWVudCwgYXMgcHJvdmlkZWQgaW4gNDggQy5GLlIuIMKnwqcgMjI3LjcyMDEgdGhyb3VnaCAyMjcuNzIwNCwgaW5jbHVzaXZlLgorCis4LglHZW5lcmFsIFByb3Zpc2lvbnMuICBOZWl0aGVyIHRoaXMgQWdyZWVtZW50IG5vciBhbnkgcGFydCBvciBwb3J0aW9uIGhlcmVvZiBzaGFsbCBiZSBhc3NpZ25lZCBvciBzdWJsaWNlbnNlZCBieSB5b3UuICBJRCBtYXkgYXNzaWduIGl0cyByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgaW4gSUQncyBzb2xlIGRpc2NyZXRpb24uICBTaG91bGQgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBiZSBoZWxkIHRvIGJlIHZvaWQsIGludmFsaWQsIHVuZW5mb3JjZWFibGUgb3IgaWxsZWdhbCBieSBhIGNvdXJ0IG9mIGNvbXBldGVudCBqdXJpc2RpY3Rpb24sIHRoZSB2YWxpZGl0eSBhbmQgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIG90aGVyIHByb3Zpc2lvbnMgc2hhbGwgbm90IGJlIGFmZmVjdGVkIHRoZXJlYnkuICBJZiBhbnkgcHJvdmlzaW9uIGlzIGRldGVybWluZWQgdG8gYmUgdW5lbmZvcmNlYWJsZSBieSBhIGNvdXJ0IG9mIGNvbXBldGVudCBqdXJpc2RpY3Rpb24sIHlvdSBhZ3JlZSB0byBhIG1vZGlmaWNhdGlvbiBvZiBzdWNoIHByb3Zpc2lvbiB0byBwcm92aWRlIGZvciBlbmZvcmNlbWVudCBvZiB0aGUgcHJvdmlzaW9uJ3MgaW50ZW50LCB0byB0aGUgZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdy4gIEZhaWx1cmUgb2YgSUQgdG8gZW5mb3JjZSBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IHNoYWxsIG5vdCBjb25zdGl0dXRlIG9yIGJlIGNvbnN0cnVlZCBhcyBhIHdhaXZlciBvZiBzdWNoIHByb3Zpc2lvbiBvciBvZiB0aGUgcmlnaHQgdG8gZW5mb3JjZSBzdWNoIHByb3Zpc2lvbi4gIEltbWVkaWF0ZWx5IHVwb24geW91ciBmYWlsdXJlIHRvIGNvbXBseSB3aXRoIG9yIGJyZWFjaCBvZiBhbnkgdGVybSBvciBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQsIFRISVMgQUdSRUVNRU5UIEFORCBZT1VSIExJQ0VOU0UgU0hBTEwgQVVUT01BVElDQUxMWSBURVJNSU5BVEUsIFdJVEhPVVQgTk9USUNFLCBBTkQgSUQgTUFZIFBVUlNVRSBBTEwgUkVMSUVGIEFORCBSRU1FRElFUyBBR0FJTlNUIFlPVSBXSElDSCBBUkUgQVZBSUxBQkxFIFVOREVSIEFQUExJQ0FCTEUgTEFXIEFORC9PUiBUSElTIEFHUkVFTUVOVC4gICBJbiB0aGUgZXZlbnQgdGhpcyBBZ3JlZW1lbnQgaXMgdGVybWluYXRlZCwgeW91IHNoYWxsIGhhdmUgbm8gcmlnaHQgdG8gdXNlIHRoZSBTb2Z0d2FyZSwgaW4gYW55IG1hbm5lciwgYW5kIHlvdSBzaGFsbCBpbW1lZGlhdGVseSBkZXN0cm95IGFsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlIGluIHlvdXIgcG9zc2Vzc2lvbiwgY3VzdG9keSBvciBjb250cm9sLgorCitZT1UgQUNLTk9XTEVER0UgVEhBVCBZT1UgSEFWRSBSRUFEIFRISVMgQUdSRUVNRU5ULCBZT1UgVU5ERVJTVEFORCBUSElTIEFHUkVFTUVOVCwgQU5EIFVOREVSU1RBTkQgVEhBVCBCWSBDT05USU5VSU5HIFRIRSBJTlNUQUxMQVRJT04gT0YgVEhFIFNPRlRXQVJFLCBCWSBMT0FESU5HIE9SIFJVTk5JTkcgVEhFIFNPRlRXQVJFLCBPUiBCWSBQTEFDSU5HIE9SIENPUFlJTkcgVEhFIFNPRlRXQVJFIE9OVE8gWU9VUiBDT01QVVRFUiBIQVJEIERSSVZFIE9SIFJBTSwgWU9VIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVC4gIFlPVSBGVVJUSEVSIEFHUkVFIFRIQVQsIEVYQ0VQVCBGT1IgV1JJVFRFTiBTRVBBUkFURSBBR1JFRU1FTlRTIEJFVFdFRU4gSUQgQU5EIFlPVSwgVEhJUyBBR1JFRU1FTlQgSVMgQSBDT01QTEVURSBBTkQgRVhDTFVTSVZFIFNUQVRFTUVOVCBPRiBUSEUgUklHSFRTIEFORCBMSUFCSUxJVElFUyBPRiBUSEUgUEFSVElFUyBIRVJFVE8uICBUSElTIEFHUkVFTUVOVCBTVVBFUlNFREVTIEFMTCBQUklPUiBPUkFMIEFHUkVFTUVOVFMsIFBST1BPU0FMUyBPUiBVTkRFUlNUQU5ESU5HUywgQU5EIEFOWSBPVEhFUiBDT01NVU5JQ0FUSU9OUyBCRVRXRUVOIElEIEFORCBZT1UgUkVMQVRJTkcgVE8gVEhFIFNVQkpFQ1QgTUFUVEVSIE9GIFRISVMgQUdSRUVNRU5ULgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvcWxvZ2ljLWZpYnJlLWNoYW5uZWwtZmlybXdhcmUgYi9saWNlbnNlcy9xbG9naWMtZmlicmUtY2hhbm5lbC1maXJtd2FyZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNjY5YWUwCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvcWxvZ2ljLWZpYnJlLWNoYW5uZWwtZmlybXdhcmUKQEAgLTAsMCArMSwzOSBAQAorQ29weXJpZ2h0IChjKSAgMjAwMy0yMDA2IFFMb2dpYyBDb3Jwb3JhdGlvbgorUUxvZ2ljIExpbnV4IEZpYnJlIENoYW5uZWwgSEJBIEZpcm13YXJlCisKK1lvdSBtYXkgcmVkaXN0cmlidXRlIHRoZSBoYXJkd2FyZSBzcGVjaWZpYyBmaXJtd2FyZSBiaW5hcnkgZmlsZQordW5kZXIgdGhlIGZvbGxvd2luZyB0ZXJtczoKKworCTEuIFJlZGlzdHJpYnV0aW9uIG9mIHNvdXJjZSBjb2RlIChvbmx5IGlmIGFwcGxpY2FibGUpLAorCSAgIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YKKwkgICBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKwkyLiBSZWRpc3RyaWJ1dGlvbiBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKwkgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlCisJICAgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyCisJICAgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworCTMuIFRoZSBuYW1lIG9mIFFMb2dpYyBDb3Jwb3JhdGlvbiBtYXkgbm90IGJlIHVzZWQgdG8KKwkgICBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKwkgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbgorCitSRUdBUkRMRVNTIE9GIFdIQVQgTElDRU5TSU5HIE1FQ0hBTklTTSBJUyBVU0VEIE9SIEFQUExJQ0FCTEUsCitUSElTIFBST0dSQU0gSVMgUFJPVklERUQgQlkgUUxPR0lDIENPUlBPUkFUSU9OICJBUyBJUycnIEFORCBBTlkKK0VYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBCitQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IKK0JFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCitFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKK1RPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKK0RBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKK09SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworVVNFUiBBQ0tOT1dMRURHRVMgQU5EIEFHUkVFUyBUSEFUIFVTRSBPRiBUSElTIFBST0dSQU0gV0lMTCBOT1QKK0NSRUFURSBPUiBHSVZFIEdST1VORFMgRk9SIEEgTElDRU5TRSBCWSBJTVBMSUNBVElPTiwgRVNUT1BQRUwsIE9SCitPVEhFUldJU0UgSU4gQU5ZIElOVEVMTEVDVFVBTCBQUk9QRVJUWSBSSUdIVFMgKFBBVEVOVCwgQ09QWVJJR0hULAorVFJBREUgU0VDUkVULCBNQVNLIFdPUkssIE9SIE9USEVSIFBST1BSSUVUQVJZIFJJR0hUKSBFTUJPRElFRCBJTgorQU5ZIE9USEVSIFFMT0dJQyBIQVJEV0FSRSBPUiBTT0ZUV0FSRSBFSVRIRVIgU09MRUxZIE9SIElOCitDT01CSU5BVElPTiBXSVRIIFRISVMgUFJPR1JBTS4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL3FwYWdlIGIvbGljZW5zZXMvcXBhZ2UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmU1MjFmNwotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL3FwYWdlCkBAIC0wLDAgKzEsMTA5IEBACitFbmQgVXNlciBMaWNlbnNlIEFncmVlbWVudCBmb3IgUXVpY2tQYWdlIFNvZnR3YXJlCisKK0dSQU5ULgorCisgICAgIFN1YmplY3QgdG8gdGhlIHByb3Zpc2lvbnMgY29udGFpbmVkIGhlcmVpbiwgUXBhZ2UgU29sdXRpb25zICgiQXV0aG9yIikKKyAgICAgaGVyZWJ5IGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlIGxpY2Vuc2UgdG8gdXNlIGl0cyBhY2NvbXBhbnlpbmcKKyAgICAgcHJvcHJpZXRhcnkgc29mdHdhcmUgcHJvZHVjdCBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uICgiU29mdHdhcmUiKQorICAgICBmcmVlIG9mIGNoYXJnZSBwdXJzdWFudCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQuCisgICAgIFlvdSBhcmUgbm90IGVudGl0bGVkIHRvIHN1cHBvcnQgb3IgdGVsZXBob25lIGFzc2lzdGFuY2UgaW4gY29ubmVjdGlvbgorICAgICB3aXRoIHlvdXIgdXNlIG9mIHRoZSBTb2Z0d2FyZS4KKworU09GVFdBUkUgQU5EIERPQ1VNRU5UQVRJT04uCisKKyAgICAgVGhlIEF1dGhvciBzaGFsbCBmdXJuaXNoIHRoZSBTb2Z0d2FyZSB0byB5b3UgZWxlY3Ryb25pY2FsbHkgaW4gc291cmNlCisgICAgIGNvZGUgZm9ybS4gVGhpcyBsaWNlbnNlIGRvZXMgbm90IGdyYW50IHlvdSBhbnkgcmlnaHQgdG8gYW55IGVuaGFuY2VtZW50CisgICAgIG9yIHVwZGF0ZSB0byB0aGUgU29mdHdhcmUgYW5kIERvY3VtZW50YXRpb24uCisKK1VTRSBSRVNUUklDVElPTlMuCisKKyAgICAgWW91IG1heSB1c2UsIGNvcHksIGFuZCBtb2RpZnkgdGhlIFNvZnR3YXJlIGluIHNvdXJjZSBjb2RlIG9yIG9iamVjdAorICAgICBjb2RlIGZvcm0sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisJbyBJZiB0aGUgU29mdHdhcmUgaXMgbW9kaWZpZWQsIGFueSBTb2Z0d2FyZSBjb250YWluaW5nCisJICBtb2RpZmljYXRpb25zIG11c3QgcHJvbWluZW50bHkgc3RhdGUgaW4gdGhlIG1vZGlmaWVkIHByb2R1Y3QKKwkgIG9yIGRvY3VtZW50YXRpb24gKGkpIHRoYXQgaXQgaGFzIGJlZW4gbW9kaWZpZWQsIChpaSkgdGhlCisJICBpZGVudGl0eSBvZiB0aGUgcGVyc29uIG9yIGVudGl0eSB0aGF0IG1hZGUgdGhlIG1vZGlmaWNhdGlvbnMsCisJICBhbmQgKGlpaSkgdGhlIGRhdGUgdGhlIG1vZGlmaWNhdGlvbnMgd2VyZSBtYWRlLgorCisJbyBFYWNoIGNvcHkgb2YgdGhlIFNvZnR3YXJlIG1hZGUgYnkgeW91IHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlCisJICB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCBhbmQgc2hhbGwgY29udGFpbiBhbGwgb2YgdGhlIEF1dGhvcidzCisJICBub3RpY2VzIHJlZ2FyZGluZyBjb3B5cmlnaHRzLCB0cmFkZW1hcmtzIGFuZCBvdGhlciBwcm9wcmlldGFyeQorCSAgcmlnaHRzIGFzIGNvbnRhaW5lZCBpbiB0aGUgU29mdHdhcmUgb3JpZ2luYWxseSBwcm92aWRlZCB0byB5b3UuCisKKwlvIFRoZSBTb2Z0d2FyZSBtYXkgbm90IGJlIHRyYW5zZmVycmVkIHRvIGFueSB0aGlyZCBwYXJ0eSB1bmxlc3MKKwkgIHN1Y2ggdGhpcmQgcGFydHkgcmVjZWl2ZXMgYSBjb3B5IG9mIHRoaXMgQWdyZWVtZW50IGFuZCBhZ3JlZXMKKwkgIHRvIGJlIGJvdW5kIGJ5IGFsbCBvZiBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuCisKKwlvIFRoZSBTb2Z0d2FyZSBvciBhbnkgbW9kaWZpY2F0aW9ucyBvciBkZXJpdmF0aW9ucyB0aGVyZW9mIG1heQorCSAgbm90IGJlIHRyYW5zZmVycmVkIHRvIGFueSB0aGlyZCBwYXJ0eSB1bmRlciBhbnkgb3RoZXIgbGljZW5zZQorCSAgYWdyZWVtZW50IHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gdGhlIEF1dGhvci4KKworVElUTEUuCisKKyAgICAgVGl0bGUsIG93bmVyc2hpcCByaWdodHMsIGFuZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGluIGFuZCB0bworICAgICB0aGUgU29mdHdhcmUgc2hhbGwgcmVtYWluIHdpdGggdGhlIEF1dGhvci4gIFRoZSBTb2Z0d2FyZSBpcyBwcm90ZWN0ZWQKKyAgICAgYnkgdGhlIGNvcHlyaWdodCBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIGFuZCBpbnRlcm5hdGlvbmFsIGNvcHlyaWdodAorICAgICB0cmVhdGllcy4KKworQ09OVEVOVC4KKworICAgICBUaXRsZSwgb3duZXJzaGlwIHJpZ2h0cywgYW5kIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaW4gYW5kIHRvCisgICAgIHRoZSBjb250ZW50IGFjY2Vzc2VkIHRocm91Z2ggdGhlIFNvZnR3YXJlIGlzIHRoZSBwcm9wZXJ0eSBvZiB0aGUKKyAgICAgYXBwbGljYWJsZSBjb250ZW50IG93bmVyIGFuZCBtYXkgYmUgcHJvdGVjdGVkIGJ5IGFwcGxpY2FibGUgY29weXJpZ2h0CisgICAgIG9yIG90aGVyIGxhdy4gIFRoaXMgTGljZW5zZSBnaXZlcyB5b3Ugbm8gcmlnaHRzIHRvIHN1Y2ggY29udGVudC4KKworRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS4KKworICAgICBTaW5jZSB0aGUgU29mdHdhcmUgaXMgcHJvdmlkZWQgZnJlZSBvZiBjaGFyZ2UsIHRoZSBTb2Z0d2FyZSBpcworICAgICBwcm92aWRlZCBvbiBhbiAiQVMgSVMiIGJhc2lzLCB3aXRob3V0IHdhcnJhbnR5IG9mIGFueSBraW5kLCBpbmNsdWRpbmcKKyAgICAgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSB3YXJyYW50aWVzIG9mIG1lcmNoYW50YWJpbGl0eSwgZml0bmVzcyBmb3IgYQorICAgICBwYXJ0aWN1bGFyIHB1cnBvc2UgYW5kIG5vbi1pbmZyaW5nZW1lbnQuIFRoZSBlbnRpcmUgcmlzayBhcyB0byB0aGUKKyAgICAgcXVhbGl0eSBhbmQgcGVyZm9ybWFuY2Ugb2YgdGhlIFNvZnR3YXJlIGlzIGJvcm5lIGJ5IHlvdS4gU2hvdWxkIHRoZQorICAgICBTb2Z0d2FyZSBwcm92ZSBkZWZlY3RpdmUsIHlvdSwgYW5kIG5vdCB0aGUgQXV0aG9yIGFzc3VtZSB0aGUgZW50aXJlCisgICAgIGNvc3Qgb2YgYW55IHNlcnZpY2UgYW5kIHJlcGFpci4gVGhpcyBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGNvbnN0aXR1dGVzCisgICAgIGFuIGVzc2VudGlhbCBwYXJ0IG9mIHRoZSBhZ3JlZW1lbnQuCisKK0xJTUlUQVRJT04gT0YgTElBQklMSVRZLgorCisgICAgIFVOREVSIE5PIENJUkNVTVNUQU5DRVMgQU5EIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgVE9SVCwgQ09OVFJBQ1QsIE9SCisgICAgIE9USEVSV0lTRSwgU0hBTEwgUVBBR0UgU09MVVRJT05TIE9SIElUUyBTVVBQTElFUlMgUkVTRUxMRVJTLCBPUgorICAgICBMSUNFTlNFRVMgQkUgTElBQkxFIFRPIFlPVSBPUiBBTlkgT1RIRVIgUEVSU09OIEZPUiBBTlkgRElSRUNULAorICAgICBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWQorICAgICBDSEFSQUNURVIgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1MgT0YgR09PRFdJTEwsCisgICAgIFNUT1BQQUdFLCBDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUgorICAgICBDT01NRVJDSUFMIERBTUFHRVMgT1IgTE9TU0VTLCBFVkVOIElGIFFQQUdFIFNPTFVUSU9OUyBTSEFMTCBIQVZFIEJFRU4KKyAgICAgSU5GT1JNRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUywgT1IgRk9SIEFOWSBDTEFJTSBCWSBBTlkKKyAgICAgT1RIRVIgUEFSVFkuCisKK0VYUE9SVCBDT05UUk9MUy4KKworICAgICBZb3UgbWF5IG5vdCBkb3dubG9hZCBvciBvdGhlcndpc2UgZXhwb3J0IG9yIHJlZXhwb3J0IHRoZSBTb2Z0d2FyZSBvcgorICAgICBhbnkgdW5kZXJseWluZyBpbmZvcm1hdGlvbiBvciB0ZWNobm9sb2d5IGV4Y2VwdCBpbiBmdWxsIGNvbXBsaWFuY2UKKyAgICAgd2l0aCBhbGwgVW5pdGVkIFN0YXRlcyBhbmQgb3RoZXIgYXBwbGljYWJsZSBsYXdzIGFuZCByZWd1bGF0aW9ucy4gQnkKKyAgICAgZG93bmxvYWRpbmcgb3IgdXNpbmcgdGhlIFNvZnR3YXJlLCB5b3UgYXJlIGFncmVlaW5nIHRvIHRoZSBmb3JlZ29pbmcuCisKK1RFUk1JTkFUSU9OLgorCisgICAgIFRoaXMgQWdyZWVtZW50IHNoYWxsIGF1dG9tYXRpY2FsbHkgdGVybWluYXRlIHVwb24gZmFpbHVyZSBieSB5b3UgdG8KKyAgICAgY29tcGx5IHdpdGggaXRzIHRlcm1zLCBpbiB3aGljaCBjYXNlIHlvdSBzaGFsbCBpbW1lZGlhdGVseSBkaXNjb250aW51ZQorICAgICB0aGUgdXNlIG9mIHRoZSBTb2Z0d2FyZSBhbmQgc2hhbGwgd2l0aGluIHRlbiAoMTApIGRheXMgcmV0dXJuIHRvIHRoZQorICAgICBBdXRob3Igb3IgZGVzdHJveSBhbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZS4gIFlvdSBtYXkgYWxzbyB0ZXJtaW5hdGUKKyAgICAgdGhpcyBBZ3JlZW1lbnQgYXQgYW55IHRpbWUgYnkgZGVzdHJveWluZyB0aGUgU29mdHdhcmUgYW5kIGFsbCBjb3BpZXMKKyAgICAgdGhlcmVvZi4KKworTUlTQ0VMTEFORU9VUy4KKworICAgICBUaGlzIEFncmVlbWVudCByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhbmQgZXhjbHVzaXZlIHN0YXRlbWVudCBvZiB0aGUKKyAgICAgYWdyZWVtZW50cyBjb25jZXJuaW5nIHRoaXMgbGljZW5zZSBiZXR3ZWVuIHRoZSBwYXJ0aWVzLiBJdCBtYXkgYmUKKyAgICAgYW1lbmRlZCBvbmx5IGJ5IGEgd3JpdGluZyBleGVjdXRlZCBieSBib3RoIHBhcnRpZXMuIElmIGFueSBwcm92aXNpb24KKyAgICAgb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlIGZvciBhbnkgcmVhc29uLCBzdWNoCisgICAgIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQKKyAgICAgZW5mb3JjZWFibGUsIGFuZCBzdWNoIGRlY2lzaW9uIHNoYWxsIG5vdCBhZmZlY3QgdGhlIGVuZm9yY2VhYmlsaXR5IChpKQorICAgICBvZiBzdWNoIHByb3Zpc2lvbiB1bmRlciBvdGhlciBjaXJjdW1zdGFuY2VzIG9yIChpaSkgb2YgdGhlIHJlbWFpbmluZworICAgICBwcm92aXNpb25zIGhlcmVvZiB1bmRlciBhbGwgY2lyY3Vtc3RhbmNlcy4gSGVhZGluZ3Mgc2hhbGwgbm90IGJlCisgICAgIGNvbnNpZGVyZWQgaW4gaW50ZXJwcmV0aW5nIHRoaXMgQWdyZWVtZW50LiBUaGlzIEFncmVlbWVudCBzaGFsbCBiZQorICAgICBnb3Zlcm5lZCBieSBhbmQgY29uc3RydWVkIHVuZGVyIHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBDYWxpZm9ybmlhLAorICAgICBleGNlcHQgYXMgZ292ZXJuZWQgYnkgRmVkZXJhbCBsYXcuIFRoaXMgQWdyZWVtZW50IHdpbGwgbm90IGJlIGdvdmVybmVkCisgICAgIGJ5IHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9mIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwKKyAgICAgU2FsZSBvZiBHb29kcywgdGhlIGFwcGxpY2F0aW9uIG9mIHdoaWNoIGlzIGhlcmVieSBleHByZXNzbHkgZXhjbHVkZWQuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9xcG9wcGVyIGIvbGljZW5zZXMvcXBvcHBlcgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjRjZDllCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvcXBvcHBlcgpAQCAtMCwwICsxLDE0MSBAQAorUXBvcHBlcih0bSkgaXMgbGljZW5zZWQgYnkgUVVBTENPTU0gSW5jb3Jwb3JhdGVkIHVuZGVyIHRoZSBmb2xsb3dpbmcKKyAgICB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gIEFOWSBVU0UgT0YgUVBPUFBFUiBDT05TVElUVVRFUyBBR1JFRU1FTlQgVE8KKyAgICBUSEVTRSBURVJNUy4KKworMS4gIFdhcnJhbnR5IERpc2NsYWltZXIuICBRUE9QUEVSIFNPRlRXQVJFIElTIFBST1ZJREVEIFRPIFRIRSBVU0VSICJBUworICAgIElTLiIgUVVBTENPTU0gTUFLRVMgTk8gV0FSUkFOVElFUywgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgV0lUSAorICAgIFJFU1BFQ1QgVE8gVEhFIFFQT1BQRVIgU09GVFdBUkUgQU5EL09SIEFTU09DSUFURUQgTUFURVJJQUxTCisgICAgUFJPVklERUQgVE8gVEhFIFVTRVIsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gQU5ZIFdBUlJBTlRZIE9GCisgICAgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBBR0FJTlNUCisgICAgSU5GUklOR0VNRU5ULiAgUVVBTENPTU0gZG9lcyBub3Qgd2FycmFudCB0aGF0IHRoZSBmdW5jdGlvbnMKKyAgICBjb250YWluZWQgaW4gdGhlIHNvZnR3YXJlIHdpbGwgbWVldCB5b3VyIHJlcXVpcmVtZW50cywgb3IgdGhhdCB0aGUKKyAgICBvcGVyYXRpb24gb2YgdGhlIHNvZnR3YXJlIHdpbGwgYmUgdW5pbnRlcnJ1cHRlZCBvciBlcnJvci1mcmVlLCBvcgorICAgIHRoYXQgZGVmZWN0cyBpbiB0aGUgc29mdHdhcmUgd2lsbCBiZSBjb3JyZWN0ZWQuICBGdXJ0aGVybW9yZSwKKyAgICBRVUFMQ09NTSBkb2VzIG5vdCB3YXJyYW50IG9yIG1ha2UgYW55IHJlcHJlc2VudGF0aW9ucyByZWdhcmRpbmcKKyAgICB0aGUgdXNlIG9yIHRoZSByZXN1bHRzIG9mIHRoZSB1c2Ugb2YgdGhlIHNvZnR3YXJlIG9yIGFueQorICAgIGRvY3VtZW50YXRpb24gcHJvdmlkZWQgdGhlcmV3aXRoIGluIHRlcm1zIG9mIHRoZWlyIGNvcnJlY3RuZXNzLAorICAgIGFjY3VyYWN5LCByZWxpYWJpbGl0eSwgb3Igb3RoZXJ3aXNlLiAgTm8gb3JhbCBvciB3cml0dGVuCisgICAgaW5mb3JtYXRpb24gb3IgYWR2aWNlIGdpdmVuIGJ5IFFVQUxDT01NIG9yIGEgUVVBTENPTU0KKyAgICByZXByZXNlbnRhdGl2ZSBzaGFsbCBjcmVhdGUgYSB3YXJyYW50eSBvciBpbiBhbnkgd2F5IGluY3JlYXNlIHRoZQorICAgIHNjb3BlIG9mIHRoaXMgd2FycmFudHkuCisKKzIuICBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gIFFVQUxDT01NIEFORCBJVFMgTElDRU5TT1JTIEFSRSBOT1QgTElBQkxFCisgICAgRk9SIEFOWSBDTEFJTVMgT1IgREFNQUdFUyBXSEFUU09FVkVSIEFSSVNJTkcgSU4gQ09OTkVDVElPTiBXSVRICisgICAgVEhFIFFQT1BQRVIgU09GVFdBUkUsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gUFJPUEVSVFkKKyAgICBEQU1BR0UsIFBFUlNPTkFMIElOSlVSWSwgSU5URUxMRUNUVUFMIFBST1BFUlRZIElORlJJTkdFTUVOVCwgTE9TUworICAgIE9GIFBST0ZJVFMsIE9SIElOVEVSUlVQVElPTiBPRiBCVVNJTkVTUywgT1IgRk9SIEFOWSBTUEVDSUFMLAorICAgIENPTlNFUVVFTlRJQUwgT1IgSU5DSURFTlRBTCBEQU1BR0VTLCBIT1dFVkVSIENBVVNFRCwgV0hFVEhFUgorICAgIEFSSVNJTkcgT1VUIE9GIEJSRUFDSCBPRiBXQVJSQU5UWSwgQ09OVFJBQ1QsIFRPUlQgKElOQ0xVRElORworICAgIE5FR0xJR0VOQ0UpLCBTVFJJQ1QgTElBQklMSVRZLCBPUiBPVEhFUldJU0UuCisKKzMuICBVc2luZyBhbmQgRGlzdHJpYnV0aW5nIFFwb3BwZXIuICBJZiBhIHBhcnR5IGFncmVlcyB0byB0aGVzZSB0ZXJtcworICAgIGFuZCBjb25kaXRpb25zLCBzdWNoIHBhcnR5IG1heSBjb3B5IGFuZCB1c2UgUXBvcHBlciBmb3IgYW55CisgICAgcHVycG9zZSwgYW5kIGRpc3RyaWJ1dGUgdW5tb2RpZmllZCBjb21wbGV0ZSBjb3BpZXMgb2YgUXBvcHBlciB0bworICAgIGFueSB0aGlyZCBwYXJ0eSBwcm92aWRlZCB0aGF0IHN1Y2ggdGhpcmQgcGFydHkgbXVzdCBhZ3JlZSB0byB0aGVzZQorICAgIHRlcm1zIGFuZCBjb25kaXRpb25zIHByaW9yIHRvIGFueSB1c2Ugb2YgUXBvcHBlci4gIEZhaWx1cmUgdG8KKyAgICBpbmNsdWRlIHRoZXNlIGxpY2Vuc2UgdGVybXMgd2hlbiBkaXN0cmlidXRpbmcgUXBvcHBlciBzaGFsbCBiZSBhCisgICAgbWF0ZXJpYWwgYnJlYWNoIG9mIHRoaXMgYWdyZWVtZW50LCBhbmQgdGhlIHBhcnR5IGNvbW1pdHRpbmcgc3VjaAorICAgIGJyZWFjaCBzaGFsbCBkZWZlbmQgYW5kIGluZGVtbmlmeSBRVUFMQ09NTSBJbmNvcnBvcmF0ZWQgYWdhaW5zdAorICAgIGFsbCBjbGFpbXMsIGxvc3NlcywgbGlhYmlsaXRpZXMsIGRhbWFnZXMsIGNvc3RzIGFuZCBleHBlbnNlcywKKyAgICBpbmNsdWRpbmcgYXR0b3JuZXkncyBmZWVzLCB3aGljaCBRVUFMQ09NTSBtYXkgaW5jdXIgaW4gY29ubmVjdGlvbgorICAgIHdpdGggc3VjaCBicmVhY2guCisKKzQuICBNb2RpZnlpbmcgUXBvcHBlci4gIFFwb3BwZXIgY29uc2lzdHMgb2YgKGkpIGludGVsbGVjdHVhbCBwcm9wZXJ0eQorICAgIG93bmVkIGJ5IFFVQUxDT01NIEluY29ycG9yYXRlZCwgYW5kIChpaSkgaW50ZWxsZWN0dWFsIHByb3BlcnR5CisgICAgb3duZWQgYnkgdGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFueQorICAgIG1vZGlmaWNhdGlvbnMgdG8gdGhlIFUuQy4tb3duZWQgcG9ydGlvbnMgb2YgUXBvcHBlciBhcmUgc3ViamVjdCB0bworICAgIHRoZSBwcm92aXNpb25zIG9mIFNlY3Rpb24gNyBiZWxvdy4gIEEgcGFydHkgdG8gdGhpcyBhZ3JlZW1lbnQgbWF5CisgICAgY3JlYXRlIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFFVQUxDT01NLW93bmVkIHBvcnRpb25zIG9mIHRoZQorICAgIFFwb3BwZXIgc29mdHdhcmUsIGRpc3RyaWJ1dGUgc3VjaCBkZXJpdmF0aXZlIHdvcmtzIHRvIHRoaXJkCisgICAgcGFydGllcywgYW5kIHBlcm1pdCBzdWNoIHRoaXJkIHBhcnRpZXMgdG8gY29weSBhbmQgdXNlIHN1Y2gKKyAgICBkZXJpdmF0aXZlIHdvcmtzIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6IAorICAgIAorICAgIChhKSAgVGhlIHByb3RvY29sIGdyZWV0aW5nIGJhbm5lciBhbmQgdGhlIENBUEEgSU1QTEVNRU5UQVRJT04KKyAgICAgICAgIHJlc3BvbnNlIHRhZyBtdXN0IGluY2x1ZGUgY2xlYXIgbm90aWZpY2F0aW9uIHRoYXQgUXBvcHBlciBoYXMKKyAgICAgICAgIGJlZW4gbW9kaWZpZWQgKGZvciBleGFtcGxlLAorICAgICAgICAgIkZvb1BvcHBlci1ieS1Gb28tTmV0d29ya3MtaGFja2VkLWZyb20tUXBvcHBlci00LjAiKS4gCisgICAgCisgICAgKGIpICBEZXRhaWxlZCBub3RpZmljYXRpb24gb2YgYWxsIG1vZGlmaWNhdGlvbnMgbXVzdCBiZSBjbGVhcmx5IGFuZAorICAgICAgICAgY29uc3BpY3VvdXNseSBpbmNsdWRlZCB3aXRoaW4gdGhlIG1vZGlmaWVkIHNvdXJjZSBmaWxlcywgYW5kIAorICAgICAgICAgaW4gYSBzZXBhcmF0ZSBkb2N1bWVudC4gIEFsbCBvZiB0aGUgc291cmNlIGZpbGVzIGFuZCB0aGUgCisgICAgICAgICBkb2N1bWVudCBkZXNjcmliaW5nIHRoZSBjaGFuZ2VzIG11c3QgYmUgZGlzdHJpYnV0ZWQgd2l0aCB0aGUKKyAgICAgICAgIG1vZGlmaWVkIHNvZnR3YXJlLiAKKyAgICAKKyAgICAoYykgIFdoZW4gZGlzdHJpYnV0aW5nIHRoZSBtb2RpZmllZCBzb2Z0d2FyZSB0aGUgZGlzdHJpYnV0aW5nIHBhcnR5CisgICAgICAgICBtdXN0IGNsZWFybHkgYW5kIGNvbnNwaWN1b3VzbHkgY29tbXVuaWNhdGUgdG8gYWxsIHJlY2lwaWVudHMKKyAgICAgICAgIHRoYXQgdGhlIG1vZGlmaWVkIHNvZnR3YXJlIGlzIHByb2R1Y2VkIGJ5IHRoZSBwYXJ0eSB0aGF0CisgICAgICAgICBtb2RpZmllZCB0aGUgc29mdHdhcmUgYW5kIGlzIG5vdCBhIFFVQUxDT01NIHByb2R1Y3QuIAorCisgICAgKGQpICBUaGUgdGVybSAiUXBvcHBlciIgc2hhbGwgbm90IGJlIHVzZWQgaW4gY29ubmVjdGlvbiB3aXRoIHRoZQorICAgICAgICAgbW9kaWZpZWQgc29mdHdhcmUgZXhjZXB0IGluIGEgcHVyZWx5IGZhY3R1YWwgbWFubmVyIHdoZW4KKyAgICAgICAgIGRlc2NyaWJpbmcgdGhlIGhpc3Rvcnkgb3IgZGV2ZWxvcG1lbnQgb2YgdGhlIHNvZnR3YXJlLgorCisgICAgKGUpICBUaGUgbW9kaWZpZWQgc29mdHdhcmUgbXVzdCBiZSBsaWNlbnNlZCB0byBlbmQgdXNlcnMgdXNpbmcgYQorICAgICAgICAgbGljZW5zZSBhZ3JlZW1lbnQgd2hpY2ggZXhwcmVzc2x5IHN0YXRlcyB0aGF0IHBvcnRpb25zIG9mIHRoZQorICAgICAgICAgbW9kaWZpZWQgc29mdHdhcmUgYXJlIGJhc2VkIG9uIGNvZGUgb3duZWQgYnkgUVVBTENPTU0gCisgICAgICAgICBJbmNvcnBvcmF0ZWQsIHRoYXQgc3VjaCBRVUFMQ09NTSBjb2RlIGlzIG9ubHkgcHJvdmlkZWQgb24gdGhlCisgICAgICAgICB0ZXJtcyBzdGF0ZWQgaW4gdGhpcyBhZ3JlZW1lbnQsIGFuZCB0aGF0IFFVQUxDT01NIGJlYXJzIG5vIAorICAgICAgICAgcmVzcG9uc2liaWxpdHkgd2hhdHNvZXZlciBmb3IgYW55IG1vZGlmaWNhdGlvbnMgdG8gdGhlIFFVQUxDT01NCisgICAgICAgICBjb2RlLgorCisgICAgKGYpICBUaGUgbW9kaWZ5aW5nIHBhcnR5IHNoYWxsIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IFFVQUxDT01NIAorICAgICAgICAgSW5jb3Jwb3JhdGVkIGFnYWluc3QgYWxsIGNsYWltcywgbG9zc2VzLCBsaWFiaWxpdGllcywgZGFtYWdlcywKKyAgICAgICAgIGNvc3RzIGFuZCBleHBlbnNlcywgaW5jbHVkaW5nIGF0dG9ybmV5J3MgZmVlcywgd2hpY2ggUVVBTENPTU0KKyAgICAgICAgIG1heSBpbmN1ciBpbiBjb25uZWN0aW9uIHdpdGggYW55IGludGVsbGVjdHVhbCBwcm9wZXJ0eSAKKyAgICAgICAgIGluZnJpbmdlbWVudCBvciBzaW1pbGFyIGNsYWltIHJlbGF0ZWQgdG8gdGhlIG1vZGlmaWVkIAorICAgICAgICAgc29mdHdhcmUsIGlmIHN1Y2ggY2xhaW0gaXMgcmVsYXRlZCB0byB0aGF0IHBhcnR5J3MgCisgICAgICAgICBtb2RpZmljYXRpb25zLgorCis1LiAgTm90aWNlcy4gIFFVQUxDT01NIGlzIGEgcmVnaXN0ZXJlZCB0cmFkZW1hcmsgYW5kIHJlZ2lzdGVyZWQgc2VydmljZQorICAgIG1hcmsgb2YgUVVBTENPTU0gSW5jb3Jwb3JhdGVkLiAgUXBvcHBlciBpcyBhIHRyYWRlbWFyayBvZiBRVUFMQ09NTQorICAgIEluY29ycG9yYXRlZC4gIFFVQUxDT01NIGRvZXMgbm90IGdyYW50IGFueSBwYXJ0eSB0aGUgcmlnaHQgdG8gdXNlCisgICAgc3VjaCBtYXJrcyBvbiBhbnkgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGUgUXBvcHBlciBzb2Z0d2FyZS4gIEFsbAorICAgIG90aGVyIHRyYWRlbWFya3MgYW5kIHNlcnZpY2UgbWFya3MgYXJlIHRoZSBwcm9wZXJ0eSBvZiB0aGVpcgorICAgIHJlc3BlY3RpdmUgb3duZXJzLiAgVGhlIFFwb3BwZXIgc29mdHdhcmUsIGV4Y2x1ZGluZyB0aGUgcG9ydGlvbnMKKyAgICBvd25lZCBieSB0aGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLCBpcyBDb3B5cmlnaHQKKyAgICAxOTkzLTIwMDYgUVVBTENPTU0gSW5jb3Jwb3JhdGVkLiAgQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQKKyAgICBoZXJlaW4gYXJlIHJlc2VydmVkIGJ5IFFVQUxDT01NLgorCis2LiAgR2VuZXJhbC4gIFRoaXMgYWdyZWVtZW50IGlzIGdvdmVybmVkIGFuZCBpbnRlcnByZXRlZCBpbiBhY2NvcmRhbmNlCisgICAgd2l0aCB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgQ2FsaWZvcm5pYSB3aXRob3V0IGdpdmluZyBlZmZlY3QgdG8KKyAgICBpdHMgY29uZmxpY3Qgb2YgbGF3cyBwcm92aXNpb25zLiAgQW55IGNsYWltIGFyaXNpbmcgb3V0IG9mIG9yCisgICAgcmVsYXRlZCB0byB0aGlzIGFncmVlbWVudCBtdXN0IGJlIGJyb3VnaHQgZXhjbHVzaXZlbHkgaW4gdGhlIHN0YXRlCisgICAgb3IgZmVkZXJhbCBjb3VydHMgbG9jYXRlZCBpbiBTYW4gRGllZ28gQ291bnR5LCBDYWxpZm9ybmlhLiAgVGhlCisgICAgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUKKyAgICBvZiBHb29kcyBpcyBleHByZXNzbHkgZGlzY2xhaW1lZC4gIElmIGFueSBwcm92aXNpb24gb2YgdGhpcworICAgIGFncmVlbWVudCBzaGFsbCBiZSBpbnZhbGlkLCB0aGUgdmFsaWRpdHkgb2YgdGhlICByZW1haW5pbmcKKyAgICBwcm92aXNpb25zIG9mIHRoaXMgYWdyZWVtZW50IHNoYWxsIG5vdCBiZSBhZmZlY3RlZC4gIFRoaXMKKyAgICBhZ3JlZW1lbnQgaXMgdGhlIGVudGlyZSBhbmQgZXhjbHVzaXZlIGFncmVlbWVudCBiZXR3ZWVuIFFVQUxDT01NCisgICAgYW5kIGFueSB1c2VyIG9mIHRoZSBRcG9wcGVyIHNvZnR3YXJlIHdpdGggcmVzcGVjdCB0byB0aGUgc29mdHdhcmUKKyAgICBhbmQgc3VwZXJzZWRlcyBhbGwgcHJpb3IgYWdyZWVtZW50cyAod2hldGhlciB3cml0dGVuIG9yIG9yYWwpIGFuZAorICAgIG90aGVyIGNvbW11bmljYXRpb25zIHJlbGF0ZWQgdG8gdGhlIHNvZnR3YXJlLgorCis3LiAgSU1QT1JUQU5ULgorCisgICAgVGhpcyBzb2Z0d2FyZSBwcm9ncmFtIGNvbnRhaW5zIGNvZGUsIGFuZC9vciBkZXJpdmF0aXZlcyBvcgorICAgIG1vZGlmaWNhdGlvbnMgb2YgY29kZSBvcmlnaW5hdGluZyBmcm9tIHRoZSBzb2Z0d2FyZSBwcm9ncmFtCisgICAgIlBvcHBlci4iIFBvcHBlciBpcyAoYykgQ29weXJpZ2h0IDE5ODktMTk5MSBUaGUgUmVnZW50cyBvZiB0aGUKKyAgICBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsIEFsbCBSaWdodHMgUmVzZXJ2ZWQuICBQb3BwZXIgd2FzIAorICAgIGNyZWF0ZWQgYnkgQXVzdGluIFNoZWx0b24sIEluZm9ybWF0aW9uIFN5c3RlbXMgYW5kIFRlY2hub2xvZ3ksCisgICAgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLCBCZXJrZWxleS4gIFBlcm1pc3Npb24gZnJvbSB0aGUgUmVnZW50cyBvZgorICAgIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEgdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlCisgICAgdGhlICJQb3BwZXIiIHNvZnR3YXJlIGNvbnRhaW5lZCBoZXJlaW4gZm9yIGFueSBwdXJwb3NlLCB3aXRob3V0CisgICAgZmVlLCBhbmQgd2l0aG91dCBhIHdyaXR0ZW4gYWdyZWVtZW50IGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZAorICAgIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGFyYWdyYXBoIGFuZCB0aGUgCisgICAgZm9sbG93aW5nIHR3byBwYXJhZ3JhcGhzIGFwcGVhciBpbiBhbGwgY29waWVzLiAgSE9XRVZFUiwgQURESVRJT05BTAorICAgIFBFUk1JU1NJT05TIE1BWSBCRSBORUNFU1NBUlkgRlJPTSBPVEhFUiBQRVJTT05TIE9SIEVOVElUSUVTLCBUTworICAgIFVTRSBERVJJVkFUSVZFUyBPUiBNT0RJRklDQVRJT05TIE9GIFBPUFBFUi4KKworICAgIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBVTklWRVJTSVRZIE9GIENBTElGT1JOSUEgQkUgTElBQkxFIFRPIEFOWQorICAgIFBBUlRZIEZPUiBESVJFQ1QsIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMCisgICAgREFNQUdFUywgSU5DTFVESU5HIExPU1QgUFJPRklUUywgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPRiBUSEUKKyAgICBQT1BQRVIgU09GVFdBUkUsIE9SIElUUyBERVJJVkFUSVZFUyBPUiBNT0RJRklDQVRJT05TLCBBTkQgSVRTCisgICAgRE9DVU1FTlRBVElPTiwgRVZFTiBJRiBUSEUgVU5JVkVSU0lUWSBPRiBDQUxJRk9STklBIEhBUyBCRUVOCisgICAgQURWSVNFRCBPRiBUSEUgUE9TU0lCTElUWSBPRiBTVUNIIERBTUFHRS4KKworICAgIFRIRSBVTklWRVJTSVRZIE9GIENBTElGT1JOSUEsIFNQRUNJRklDQUxMWSBESVNDTEFJTVMgQU5ZIAorICAgIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgICAgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFRIRSAKKyAgICBQT1BQRVIgU09GVFdBUkUgUFJPVklERUQgSEVSRVVOREVSIElTIE9OIEFOICJBUyBJUyIgQkFTSVMsIEFORCBUSEUKKyAgICBVTklWRVJTSVRZIE9GIENBTElGT1JOSUEgSEFTIE5PIE9CTElHQVRJT05TIFRPIFBST1ZJREUKKyAgICBNQUlOVEVOQU5DRSwgU1VQUE9SVCwgVVBEQVRFUywgRU5DSEFOQ0VNRU5UUywgT1IgTU9ESUZJQ0FUSU9OUy4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL3F1YWtlMS1kZW1vZGF0YSBiL2xpY2Vuc2VzL3F1YWtlMS1kZW1vZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ODZiNWI4Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvcXVha2UxLWRlbW9kYXRhCkBAIC0wLDAgKzEsMTc1IEBACitTSEFSRVdBUkUgVkVSU0lPTjogUVVBS0UKK0xJTUlURUQgVVNFIFNPRlRXQVJFIExJQ0VOU0UgQUdSRUVNRU5UCisKKyAgICAgICAgVGhpcyBMaW1pdGVkIFVzZSBTb2Z0d2FyZSBMaWNlbnNlIEFncmVlbWVudCAodGhlICJBZ3JlZW1lbnQiKSBpcyBhCisgICAgICAgIGxlZ2FsIGFncmVlbWVudCBiZXR3ZWVuIHlvdSwgdGhlIGVuZC11c2VyLCBhbmQgaWQgU29mdHdhcmUsIEluYy4KKyAgICAgICAgKCJJRCIpLiAgQnkgY29udGludWluZyB0aGUgaW5zdGFsbGF0aW9uIG9mIHRoaXMgZ2FtZSBwcm9ncmFtLCBieQorICAgICAgICBsb2FkaW5nIG9yIHJ1bm5pbmcgdGhlIGdhbWUsIG9yIGJ5IHBsYWNpbmcgb3IgY29weWluZyB0aGUgZ2FtZQorICAgICAgICBwcm9ncmFtIG9udG8geW91ciBjb21wdXRlciBoYXJkIGRyaXZlLCB5b3UgYXJlIGFncmVlaW5nIHRvIGJlIGJvdW5kCisgICAgICAgIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudC4KKworSUQgU09GVFdBUkUgTElDRU5TRQorCisgICAgICAgIDEuICAgICAgR3JhbnQgb2YgTGljZW5zZS4gIElEIGdyYW50cyB0byB5b3UgdGhlIGxpbWl0ZWQgcmlnaHQgdG8gdXNlCisgICAgICAgIG9uZSAoMSkgY29weSBvZiB0aGUgZW5jbG9zZWQgb3IgZm9yZWdvaW5nIElkIFNvZnR3YXJlIGdhbWUgcHJvZ3JhbQorICAgICAgICAodGhlICJTb2Z0d2FyZSIpLCB3aGljaCBpcyB0aGUgc2hhcmV3YXJlIHZlcnNpb24gb3IgZXBpc29kZSBvbmUgb2YKKyAgICAgICAgdGhlIGdhbWUgcHJvZ3JhbS4gIEZvciBwdXJwb3NlcyBvZiB0aGlzIHNlY3Rpb24sICJ1c2UiIG1lYW5zIGxvYWRpbmcKKyAgICAgICAgdGhlIFNvZnR3YXJlIGludG8gUkFNLCBhcyB3ZWxsIGFzIGluc3RhbGxhdGlvbiBvbiBhIGhhcmQgZGlzayBvcgorICAgICAgICBvdGhlciBzdG9yYWdlIGRldmljZS4gWW91IGFncmVlIHRoYXQgdGhlIFNvZnR3YXJlIHdpbGwgbm90IGJlCisgICAgICAgIHNoaXBwZWQsIHRyYW5zZmVycmVkIG9yIGV4cG9ydGVkIGludG8gYW55IGNvdW50cnkgaW4gdmlvbGF0aW9uIG9mCisgICAgICAgIHRoZSBVLlMuIEV4cG9ydCBBZG1pbmlzdHJhdGlvbiBBY3QgKG9yIGFueSBvdGhlciBsYXcgZ292ZXJuaW5nIHN1Y2gKKyAgICAgICAgbWF0dGVycykgYW5kIHRoYXQgeW91IHdpbGwgbm90IHV0aWxpemUsIGluIGFueSBvdGhlciBtYW5uZXIsIHRoZQorICAgICAgICBTb2Z0d2FyZSBpbiB2aW9sYXRpb24gb2YgYW55IGFwcGxpY2FibGUgbGF3LgorCisgICAgICAgIDIuICAgICAgQ29tbWVyY2lhbCBVc2UgaXMgUHJvaGliaXRlZC4gIFVuZGVyIG5vIGNpcmN1bXN0YW5jZXMgc2hhbGwKKyAgICAgICAgeW91LCB0aGUgZW5kLXVzZXIsIGJlIHBlcm1pdHRlZCwgYWxsb3dlZCBvciBhdXRob3JpemVkIHRvCisgICAgICAgIGNvbW1lcmNpYWxseSBleHBsb2l0IHRoZSBTb2Z0d2FyZSwgb3IgYW55IHBvcnRpb24gdGhlcmVvZiwgc3VjaAorCWFzIGEgc2NyZWVuIGRpc3BsYXkgb3IgYSBzY3JlZW5zaG90LiAgTmVpdGhlciB5b3Ugbm9yIGFueW9uZSBhdCB5b3VyCisgICAgICAgIGRpcmVjdGlvbiBzaGFsbCBkbyBhbnkgb2YgdGhlIGZvbGxvd2luZyBhY3RzOgorCisgICAgICAgIGEuICAgICAgUmVudCB0aGUgU29mdHdhcmU7CisKKyAgICAgICAgYi4gICAgICBTZWxsIHRoZSBTb2Z0d2FyZTsKKworICAgICAgICBjLiAgICAgIExlYXNlIG9yIGxlbmQgdGhlIFNvZnR3YXJlOworCisgICAgICAgIGQuICAgICAgT2ZmZXIgdGhlIFNvZnR3YXJlIG9uIGEgcGF5LXBlci1wbGF5IGJhc2lzOworCisgICAgICAgIGUuICAgICAgRGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgZm9yIG1vbmV5IG9yIGFueSBvdGhlcgorICAgICAgICAgICAgICAgIGNvbnNpZGVyYXRpb247IG9yCisKKyAgICAgICAgZi4gICAgICBJbiBhbnkgb3RoZXIgbWFubmVyIGFuZCB0aHJvdWdoIGFueSBtZWRpdW0KKyAgICAgICAgICAgICAgICB3aGF0c29ldmVyIGNvbW1lcmNpYWxseSBleHBsb2l0IHRoZSBTb2Z0d2FyZSBvciB1c2UKKyAgICAgICAgICAgICAgICB0aGUgU29mdHdhcmUgZm9yIGFueSBjb21tZXJjaWFsIHB1cnBvc2UuCisKKyAgICAgICAgMy4gICAgICBBZGRpdGlvbmFsIFByb2hpYml0ZWQgVXNlcy4gIE5laXRoZXIgeW91LCBub3IgYW55b25lIGF0IHlvdXIKKyAgICAgICAgZGlyZWN0aW9uLCBzaGFsbCB0YWtlIHRoZSBmb2xsb3dpbmcgYWN0aW9uIGluIHJlZ2FyZCB0byB0aGUKKyAgICAgICAgU29mdHdhcmUsIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YsIHN1Y2ggYXMgYSBzY3JlZW4gZGlzcGxheSBvcgorCWEgc2NyZWVuc2hvdDoKKworICAgICAgICBhLiAgICAgIE1vZGlmeSwgZGlzYXNzZW1ibGUsIHJldmVyc2UgZW5naW5lZXIgb3IgZGVjb21waWxlCisgICAgICAgICAgICAgICAgdGhlIFNvZnR3YXJlOworCisgICAgICAgIGIuICAgICAgVHJhbnNsYXRlIHRoZSBTb2Z0d2FyZTsKKworICAgICAgICBjLiAgICAgIFJlcHJvZHVjZSB0aGUgU29mdHdhcmU7CisKKyAgICAgICAgZC4gICAgICBQdWJsaWNseSBkaXNwbGF5IHRoZSBTb2Z0d2FyZTsgb3IKKworICAgICAgICBlLiAgICAgIFByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBiYXNlZCB1cG9uIHRoZSBTb2Z0d2FyZS4KKworCTQuCVVzZSBvZiBPdGhlciBNYXRlcmlhbCBpcyBQcm9oaWJpdGVkLiAgVXNlLCBpbiBhbnkgbWFubmVyLCBvZgorCXRoZSB0cmFkZW1hcmtzLCBzdWNoIGFzIFF1YWtlKHRtKSBhbmQgdGhlIE5JTihyKSBsb2dvLCBsb2dvcywgc3ltYm9scywKKwlhcnQgd29yaywgaW1hZ2VzLCBzY3JlZW4gZGlzcGxheXMgb3Igc2NyZWVuc2hvdHMsIHNvdW5kIGVmZmVjdHMsIG11c2ljLAorCWFuZCBvdGhlciBzdWNoIG1hdGVyaWFsIGNvbnRhaW5lZCB3aXRoaW4sIGdlbmVyYXRlZCBieSBvciByZWxhdGluZyB0bworCXRoZSBTb2Z0d2FyZSBpcyBwcm9oaWJpdGVkLgorCisJNS4gICAgICBSZXN0cmljdGlvbnMgQXBwbHkgdG8gVGhpcmQgUGFydGllcy4gIFRoZSBwcm9oaWJpdGlvbnMgYW5kCisgICAgICAgIHJlc3RyaWN0aW9ucyBkZXNjcmliZWQgaGVyZWluIGFwcGx5IHRvIGFueW9uZSBpbiBwb3NzZXNzaW9uIG9mCisJdGhlIFNvZnR3YXJlLgorCisgICAgICAgIDYuICAgICAgUGVybWl0dGVkIERpc3RyaWJ1dGlvbi4gU28gbG9uZyBhcyB0aGlzIEFncmVlbWVudAorICAgICAgICBhY2NvbXBhbmllcyB0aGUgU29mdHdhcmUgYXQgYWxsIHRpbWVzLCBJRCBncmFudHMgdG8gUHJvdmlkZXJzIHRoZQorICAgICAgICBsaW1pdGVkIHJpZ2h0IHRvIGRpc3RyaWJ1dGUsIGZyZWUgb2YgY2hhcmdlLCBleGNlcHQgbm9ybWFsIGFjY2VzcworICAgICAgICBmZWVzLCBhbmQgYnkgZWxlY3Ryb25pYyBtZWFucyBvbmx5LCB0aGUgU29mdHdhcmU7IHByb3ZpZGVkLCBob3dldmVyLAorICAgICAgICB0aGUgU29mdHdhcmUgbXVzdCBiZSBzbyBlbGVjdHJvbmljYWxseSBkaXN0cmlidXRlZCBvbmx5IGluIGEKKyAgICAgICAgY29tcHJlc3NlZCBmb3JtYXQuIFRoZSB0ZXJtICJQcm92aWRlcnMsIiBhcyB1c2VkIGluIHRoZSBmb3JlZ29pbmcKKyAgICAgICAgc2VudGVuY2UsIHNoYWxsIG1lYW4gcGVyc29ucyB3aG9zZSBidXNpbmVzcyBpdCBpcyB0byBwcm92aWRlCisgICAgICAgIHNlcnZpY2VzIG9uIHRoZSBJbnRlcm5ldCwgb24gY29tbWVyY2lhbCBvbmxpbmUgbmV0d29ya3MsIG9yIG9uIHRoZQorICAgICAgICBCQlMuIEFueW9uZSB3aG8gcmVjZWl2ZXMgdGhlIFNvZnR3YXJlIGZyb20gYSBQcm92aWRlciBzaGFsbCBiZQorICAgICAgICBsaW1pdGVkIHRvIGFsbCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQuIEZ1cnRoZXIsCisgICAgICAgIElEIGdyYW50cyB0byB5b3UsIHRoZSBlbmQtdXNlciwgdGhlIGxpbWl0ZWQgcmlnaHQgdG8gZGlzdHJpYnV0ZSwKKyAgICAgICAgZnJlZSBvZiBjaGFyZ2Ugb25seSwgdGhlIFNvZnR3YXJlIGFzIGEgd2hvbGUuCisKKyAgICAgICAgNy4gICAgICBDb3B5cmlnaHQuIFRoZSBTb2Z0d2FyZSBpcyBvd25lZCBieSBJRCBhbmQgaXMgcHJvdGVjdGVkIGJ5CisgICAgICAgIFVuaXRlZCBTdGF0ZXMgY29weXJpZ2h0IGxhd3MgYW5kIGludGVybmF0aW9uYWwgdHJlYXR5IHByb3Zpc2lvbnMuCisgICAgICAgIFlvdSBtdXN0IHRyZWF0IHRoZSBTb2Z0d2FyZSBsaWtlIGFueSBvdGhlciBjb3B5cmlnaHRlZCBtYXRlcmlhbCwKKyAgICAgICAgZXhjZXB0IHRoYXQgeW91IG1heSBtYWtlIGNvcGllcyBvZiB0aGUgU29mdHdhcmUgdG8gZ2l2ZSB0byBvdGhlcgorICAgICAgICBwZXJzb25zLiBZb3UgbWF5IG5vdCBjaGFyZ2Ugb3IgcmVjZWl2ZSBhbnkgY29uc2lkZXJhdGlvbiBmcm9tIGFueQorICAgICAgICBvdGhlciBwZXJzb24gZm9yIHRoZSByZWNlaXB0IG9yIHVzZSBvZiB0aGUgU29mdHdhcmUuIFlvdSBhZ3JlZSB0bworICAgICAgICB1c2UgeW91ciBiZXN0IGVmZm9ydHMgdG8gc2VlIHRoYXQgYW55IHVzZXIgb2YgdGhlIFNvZnR3YXJlIGxpY2Vuc2VkCisgICAgICAgIGhlcmV1bmRlciBjb21wbGllcyB3aXRoIHRoaXMgQWdyZWVtZW50LgorCisgICAgICAgIDguICAgICAgTGltaXRlZCBXYXJyYW50eS4gSUQgd2FycmFudHMgdGhhdCBpZiBwcm9wZXJseSBpbnN0YWxsZWQgYW5kCisgICAgICAgIG9wZXJhdGVkIG9uIGEgY29tcHV0ZXIgZm9yIHdoaWNoIGl0IGlzIGRlc2lnbmVkLCB0aGUgU29mdHdhcmUgd2lsbAorICAgICAgICBwZXJmb3JtIHN1YnN0YW50aWFsbHkgaW4gYWNjb3JkYW5jZSB3aXRoIGl0cyBkZXNpZ25lZCBwdXJwb3NlIGZvciBhCisgICAgICAgIHBlcmlvZCBvZiBuaW5ldHkgKDkwKSBkYXlzIGZyb20gdGhlIGRhdGUgdGhlIFNvZnR3YXJlIGlzIGZpcnN0CisgICAgICAgIG9idGFpbmVkIGJ5IGFuIGVuZC11c2VyLiBJRCdzIGVudGlyZSBsaWFiaWxpdHkgYW5kIHlvdXIgZXhjbHVzaXZlCisgICAgICAgIHJlbWVkeSBzaGFsbCBiZSwgYXQgSUQncyBvcHRpb24sIGVpdGhlciAoYSkgcmV0dXJuIG9mIHRoZSByZXRhaWwKKyAgICAgICAgcHJpY2UgcGFpZCwgaWYgYW55LCBvciAoYikgcmVwYWlyIG9yIHJlcGxhY2VtZW50IG9mIHRoZSBTb2Z0d2FyZQorICAgICAgICB0aGF0IGRvZXMgbm90IG1lZXQgSUQncyBMaW1pdGVkIFdhcnJhbnR5LiBUbyBtYWtlIGEgd2FycmFudHkgY2xhaW0sCisgICAgICAgIHJldHVybiB0aGUgU29mdHdhcmUgdG8gdGhlIHBvaW50IG9mIHB1cmNoYXNlLCBhY2NvbXBhbmllZCBieSBwcm9vZgorICAgICAgICBvZiBwdXJjaGFzZSwgeW91ciBuYW1lLCB5b3VyIGFkZHJlc3MsIGFuZCBhIHN0YXRlbWVudCBvZiBkZWZlY3QsIG9yCisgICAgICAgIHJldHVybiB0aGUgU29mdHdhcmUgd2l0aCB0aGUgYWJvdmUgaW5mb3JtYXRpb24gdG8gSUQuICBUaGlzIExpbWl0ZWQKKyAgICAgICAgV2FycmFudHkgaXMgdm9pZCBpZiBmYWlsdXJlIG9mIHRoZSBTb2Z0d2FyZSBoYXMgcmVzdWx0ZWQgaW4gd2hvbGUKKyAgICAgICAgb3IgaW4gcGFydCBmcm9tIGFjY2lkZW50LCBhYnVzZSwgbWlzYXBwbGljYXRpb24gb3IgdmlvbGF0aW9uIG9mIHRoaXMKKyAgICAgICAgQWdyZWVtZW50LiBBbnkgcmVwbGFjZW1lbnQgU29mdHdhcmUgd2lsbCBiZSB3YXJyYW50ZWQgZm9yIHRoZQorICAgICAgICByZW1haW5kZXIgb2YgdGhlIG9yaWdpbmFsIHdhcnJhbnR5IHBlcmlvZCBvciB0aGlydHkgKDMwKSBkYXlzLAorICAgICAgICB3aGljaGV2ZXIgaXMgbG9uZ2VyLiBUaGlzIHdhcnJhbnR5IGFsbG9jYXRlcyByaXNrcyBvZiBwcm9kdWN0CisgICAgICAgIGZhaWx1cmUgYmV0d2VlbiBMaWNlbnNlZSBhbmQgSUQuIElEJ3MgcHJvZHVjdCBwcmljaW5nIHJlZmxlY3RzIHRoaXMKKyAgICAgICAgYWxsb2NhdGlvbiBvZiByaXNrIGFuZCB0aGUgbGltaXRhdGlvbnMgb2YgbGlhYmlsaXR5IGNvbnRhaW5lZCBpbgorICAgICAgICB0aGlzIHdhcnJhbnR5LgorCisgICAgICAgIDkuICAgICAgTk8gT1RIRVIgV0FSUkFOVElFUy4gSUQgRElTQ0xBSU1TIEFMTCBPVEhFUiAgV0FSUkFOVElFUywKKyAgICAgICAgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTywgSU1QTElFRAorICAgICAgICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIHBBUlRJQ1VMQVIgUFVSUE9TRQorICAgICAgICBXSVRIIFJFU1BFQ1QgVE8gVEhFIFNPRlRXQVJFIEFORCBUSEUgQUNDT01QQU5ZSU5HIFdSSVRURU4gTUFURVJJQUxTLAorICAgICAgICBJRiBBTlkuIFRISVMgTElNSVRFRCBXQVJSQU5UWSBHSVZFUyBZT1UgU1BFQ0lGSUMgTEVHQUwgUklHSFRTLiBZT1UKKyAgICAgICAgTUFZIEhBVkUgT1RIRVJTIFdISUNIIFZBUlkgRlJPTSBKVVJJU0RJQ1RJT04gVE8gSlVSSVNESUNUSU9OLiBJRAorICAgICAgICBET0VTIE5PVCBXQVJSQU5UIFRIQVQgVEhFIE9QRVJBVElPTiBPRiBUSEUgU09GVFdBUkUgV0lMTCBCRQorICAgICAgICBVTklOVEVSUlVQVEVELCBFUlJPUiBGUkVFIE9SIE1FRVQgTElDRU5TRUUnUyBTUEVDSUZJQyBSRVFVSVJFTUVOVFMuCisgICAgICAgIFRIRSBXQVJSQU5UWSBTRVQgRk9SVEggQUJPVkUgSVMgSU4gTElFVSBPRiBBTEwgT1RIRVIgRVhQUkVTUworICAgICAgICBXQVJSQU5USUVTIFdIRVRIRVIgT1JBTCBPUiBXUklUVEVOLiBUSEUgQUdFTlRTLCBFTVBMT1lFRVMsCisgICAgICAgIERJU1RSSUJVVE9SUywgQU5EIERFQUxFUlMgT0YgSUQgQVJFIE5PVCBBVVRIT1JJWkVEIFRPIE1BS0UKKyAgICAgICAgTU9ESUZJQ0FUSU9OUyBUTyBUSElTIFdBUlJBTlRZLCBPUiBBRERJVElPTkFMIFdBUlJBTlRJRVMgT04gQkVIQUxGCisgICAgICAgIE9GIElELiBBRERJVElPTkFMIFNUQVRFTUVOVFMgU1VDSCBBUyBERUFMRVIgQURWRVJUSVNJTkcgT1IKKyAgICAgICAgUFJFU0VOVEFUSU9OUywgV0hFVEhFUiBPUkFMIE9SIFdSSVRURU4sIERPIE5PVCBDT05TVElUVVRFIFdBUlJBTlRJRVMKKyAgICAgICAgQlkgSUQgQU5EIFNIT1VMRCBOT1QgQkUgUkVMSUVEIFVQT04uCisKKyAgICAgICAgMTAuICAgICAgRXhjbHVzaXZlIFJlbWVkaWVzLiBZb3UgYWdyZWUgdGhhdCB5b3VyIGV4Y2x1c2l2ZSByZW1lZHkKKyAgICAgICAgYWdhaW5zdCBJRCwgaXRzIGFmZmlsaWF0ZXMsIGNvbnRyYWN0b3JzLCBzdXBwbGllcnMsIGFuZCBhZ2VudHMgZm9yCisgICAgICAgIGxvc3Mgb3IgZGFtYWdlIGNhdXNlZCBieSBhbnkgZGVmZWN0IG9yIGZhaWx1cmUgaW4gdGhlIFNvZnR3YXJlCisgICAgICAgIHJlZ2FyZGxlc3Mgb2YgdGhlIGZvcm0gb2YgYWN0aW9uLCB3aGV0aGVyIGluIGNvbnRyYWN0LHRvcnQsCisgICAgICAgIGluY2x1ZGluZyBuZWdsaWdlbmNlLCBzdHJpY3QgbGlhYmlsaXR5IG9yIG90aGVyd2lzZSwgc2hhbGwgYmUgdGhlCisgICAgICAgIHJldHVybiBvZiB0aGUgcmV0YWlsIHB1cmNoYXNlIHByaWNlIHBhaWQsIGlmIGFueSwgb3IgcmVwbGFjZW1lbnQgb2YKKyAgICAgICAgdGhlIFNvZnR3YXJlLiBUaGlzIEFncmVlbWVudCBzaGFsbCBiZSBjb25zdHJ1ZWQgaW4gYWNjb3JkYW5jZSB3aXRoCisgICAgICAgIGFuZCBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgVGV4YXMuIENvcHlyaWdodCBhbmQgb3RoZXIKKyAgICAgICAgcHJvcHJpZXRhcnkgbWF0dGVycyB3aWxsIGJlIGdvdmVybmVkIGJ5IFVuaXRlZCBTdGF0ZXMgbGF3cyBhbmQKKyAgICAgICAgaW50ZXJuYXRpb25hbCB0cmVhdGllcy4gSU4gQU5ZIENBU0UsIElEIFNIQUxMIE5PVCBCRSBMSUFCTEUgRk9SIExPU1MKKyAgICAgICAgT0YgREFUQSwgTE9TUyBPRiBQUk9GSVRTLCBMT1NUIFNBVklOR1MsIFNQRUNJQUwsIElOQ0lERU5UQUwsCisgICAgICAgIENPTlNFUVVFTlRJQUwsIElORElSRUNUIE9SIE9USEVSIFNJTUlMQVIgREFNQUdFUyBBUklTSU5HIEZST00gQlJFQUNICisgICAgICAgIE9GIFdBUlJBTlRZLCBCUkVBQ0ggT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UsIE9SIE9USEVSIExFR0FMIFRIRU9SWQorICAgICAgICBFVkVOIElGIElEIE9SIElUUyBBR0VOVCBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICisgICAgICAgIERBTUFHRVMsIE9SIEZPUiBBTlkgQ0xBSU0gQlkgQU5ZIE9USEVSIFBBUlRZLiBTb21lIGp1cmlzZGljdGlvbnMgZG8KKyAgICAgICAgbm90IGFsbG93IHRoZSBleGNsdXNpb24gb3IgbGltaXRhdGlvbiBvZiBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwKKyAgICAgICAgZGFtYWdlcywgc28gdGhlIGFib3ZlIGxpbWl0YXRpb24gb3IgZXhjbHVzaW9uIG1heSBub3QgYXBwbHkgdG8geW91LgorCisgICAgICAgIDExLiAgICAgR2VuZXJhbCBQcm92aXNpb25zLiBOZWl0aGVyIHRoaXMgQWdyZWVtZW50IG5vciBhbnkgcGFydCBvcgorICAgICAgICBwb3J0aW9uIGhlcmVvZiBzaGFsbCBiZSBhc3NpZ25lZCBvciBzdWJsaWNlbnNlZCwgZXhjZXB0IGFzIGRlc2NyaWJlZAorICAgICAgICBoZXJlaW4uIFNob3VsZCBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGJlIGhlbGQgdG8gYmUgdm9pZCwKKyAgICAgICAgaW52YWxpZCwgdW5lbmZvcmNlYWJsZSBvciBpbGxlZ2FsIGJ5IGEgY291cnQsIHRoZSB2YWxpZGl0eSBhbmQKKyAgICAgICAgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIG90aGVyIHByb3Zpc2lvbnMgc2hhbGwgbm90IGJlIGFmZmVjdGVkIHRoZXJlYnkuCisJSWYgYW55IHByb3Zpc2lvbiBpcyBkZXRlcm1pbmVkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHlvdSBhZ3JlZSB0byBhCisJbW9kaWZpY2F0aW9uIG9mIHN1Y2ggcHJvdmlzaW9uIHRvIHByb3ZpZGUgZm9yIGVuZm9yY2VtZW50IG9mIHRoZQorCXByb3Zpc2lvbidzIGludGVudCwgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcuICBGYWlsdXJlCisJb2YgYSBwYXJ0eSB0byBlbmZvcmNlIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgbm90CisJY29uc3RpdHV0ZSBvciBiZSBjb25zdHJ1ZWQgYXMgYSB3YWl2ZXIgb2Ygc3VjaCBwcm92aXNpb24gb3Igb2YgdGhlCisJcmlnaHQgdG8gZW5mb3JjZSBzdWNoIHByb3Zpc2lvbi4gSWYgeW91IGZhaWwgdG8gY29tcGx5IHdpdGggYW55IHRlcm1zCisJb2YgdGhpcyBBZ3JlZW1lbnQsIFlPVVIgTElDRU5TRSBJUyBBVVRPTUFUSUNBTExZIFRFUk1JTkFURUQuCisKKyAgICAgICAgWU9VIEFDS05PV0xFREdFIFRIQVQgWU9VIEhBVkUgUkVBRCBUSElTIEFHUkVFTUVOVCwgWU9VIFVOREVSU1RBTkQKKyAgICAgICAgVEhJUyBBR1JFRU1FTlQsIEFORCBVTkRFUlNUQU5EIFRIQVQgQlkgQ09OVElOVUlORyBUSEUgSU5TVEFMTEFUSU9OCisgICAgICAgIE9GIFRIRSBTT0ZUV0FSRSwgQlkgTE9BRElORyBPUiBSVU5OSU5HIFRIRSBTT0ZUV0FSRSwgT1IgQlkgUExBQ0lORworICAgICAgICBPUiBDT1BZSU5HIFRIRSBTT0ZUV0FSRSBPTlRPIFlPVVIgQ09NUFVURVIgSEFSRCBEUklWRSwgWU9VIEFHUkVFIFRPCisgICAgICAgIEJFIEJPVU5EIEJZIFRISVMgQUdSRUVNRU5UJ1MgVEVSTVMgQU5EIENPTkRJVElPTlMuIFlPVSBGVVJUSEVSCisgICAgICAgIEFHUkVFIFRIQVQsIEVYQ0VQVCBGT1IgV1JJVFRFTiBTRVBBUkFURSBBR1JFRU1FTlRTIEJFVFdFRU4gSUQgQU5ECisgICAgICAgIFlPVSwgVEhJUyBBR1JFRU1FTlQgSVMgQSBDT01QTEVURSBBTkQgRVhDTFVTSVZFIFNUQVRFTUVOVCBPRiBUSEUKKyAgICAgICAgUklHSFRTIEFORCBMSUFCSUxJVElFUyBPRiBUSEUgUEFSVElFUy4gVEhJUyBBR1JFRU1FTlQgU1VQRVJTRURFUworICAgICAgICBBTEwgUFJJT1IgT1JBTCBBR1JFRU1FTlRTLCBQUk9QT1NBTFMgT1IgVU5ERVJTVEFORElOR1MsIEFORCBBTlkKKyAgICAgICAgT1RIRVIgQ09NTVVOSUNBVElPTlMgQkVUV0VFTiBJRCBBTkQgWU9VIFJFTEFUSU5HIFRPIFRIRSBTVUJKRUNUCisgICAgICAgIE1BVFRFUiBPRiBUSElTIEFHUkVFTUVOVC4KKworSnVuZSAyMSwgMTk5NgorCitTSEFSRVdBUkUgVkVSU0lPTjogUVVBS0UgTElNSVRFRCBVU0UgU09GVFdBUkUgTElDRU5TRSBBR1JFRU1FTlQKKyhEV0M6ZHc6MzQwNi4wMDI0OkRXQ1xkb2M6MTE2MykKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL3F1YWtlMi1kZW1vZGF0YSBiL2xpY2Vuc2VzL3F1YWtlMi1kZW1vZGF0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMzc1OTYzCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvcXVha2UyLWRlbW9kYXRhCkBAIC0wLDAgKzEsNjQgQEAKKwlMSU1JVEVEIFVTRSBTT0ZUV0FSRSBERU1PIExJQ0VOU0UgQUdSRUVNRU5UCisKKyAgICAgVGhpcyBMaW1pdGVkIFVzZSBTb2Z0d2FyZSBEZW1vIExpY2Vuc2UgQWdyZWVtZW50ICh0aGUgIkFncmVlbWVudCIpIGlzIGEgbGVnYWwgYWdyZWVtZW50IGJldHdlZW4geW91LCB0aGUgZW5kLXVzZXIsIGFuZCBJZCBTb2Z0d2FyZSwgSW5jLiAoIklEIikuICBCWSBDT05USU5VSU5HIFRIRSBJTlNUQUxMQVRJT04gT0YgVEhJUyBHQU1FIFBST0dSQU0gRU5USVRMRUQgUVVBS0UgSUksIEJZIExPQURJTkcgT1IgUlVOTklORyBUSEUgR0FNRSBQUk9HUkFNLCBPUiBCWSBQTEFDSU5HIE9SIENPUFlJTkcgVEhFIEdBTUUgUFJPR1JBTSBPTlRPIFlPVVIgQ09NUFVURVIgSEFSRCBEUklWRSwgQ09NUFVURVIgUkFNIE9SIE9USEVSIFNUT1JBR0UsIFlPVSBBUkUgQUdSRUVJTkcgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgQUdSRUVNRU5ULgorCisgICAgIDEuICBHcmFudCBvZiBMaWNlbnNlLiAgSUQgZ3JhbnRzIHRvIHlvdSB0aGUgbm9uLWV4Y2x1c2l2ZSBsaW1pdGVkIHJpZ2h0IHRvIHVzZSB0aGlzIElkIFNvZnR3YXJlIGdhbWUgcHJvZ3JhbSBpbiBleGVjdXRhYmxlIG9yIG9iamVjdCBjb2RlIGZvcm0gb25seSAodGhlICJTb2Z0d2FyZSIpLCB3aGljaCBpcyB0aGUgZGVtbyB2ZXJzaW9uIG9mIHRoZSBTb2Z0d2FyZSwgZm9yIG5vbi1jb21tZXJjaWFsLCByZWNyZWF0aW9uYWwgcHVycG9zZXMuICBUaGUgdGVybSAiU29mdHdhcmUiIGluY2x1ZGVzIGFsbCBlbGVtZW50cyBvZiB0aGUgU29mdHdhcmUgc3VjaCBhcyBkYXRhIGZpbGVzIGFuZCBzY3JlZW4gZGlzcGxheXMuICBZb3UgYXJlIG5vdCByZWNlaXZpbmcgYW55IG93bmVyc2hpcCBvciBwcm9wcmlldGFyeSByaWdodCwgdGl0bGUgb3IgaW50ZXJlc3QgaW4gb3IgdG8gdGhlIFNvZnR3YXJlIG9yIHRoZSBjb3B5cmlnaHQsIHRyYWRlbWFya3MsIG9yIG90aGVyIHJpZ2h0cyByZWxhdGVkIHRoZXJldG8uICBGb3IgcHVycG9zZXMgb2YgdGhpcyBzZWN0aW9uLCAidXNlIiBtZWFucyBsb2FkaW5nIHRoZSBTb2Z0d2FyZSBpbnRvIFJBTSBhbmQvb3Igb250byBjb21wdXRlciBoYXJkIGRyaXZlLCBhcyB3ZWxsIGFzIGluc3RhbGxhdGlvbiBvZiB0aGUgU29mdHdhcmUgb24gYSBoYXJkIGRpc2sgb3Igb3RoZXIgc3RvcmFnZSBkZXZpY2UuICBZb3UgYWdyZWUgdGhhdCB0aGUgU29mdHdhcmUgd2lsbCBub3QgYmUgc2hpcHBlZCwgdHJhbnNmZXJyZWQgb3IgZXhwb3J0ZWQgaW50byBhbnkgY291bnRyeSBpbiB2aW9sYXRpb24gb2YgdGhlIFUuUy4gRXhwb3J0IEFkbWluaXN0cmF0aW9uIEFjdCAob3IgYW55IG90aGVyIGxhdyBnb3Zlcm5pbmcgc3VjaCBtYXR0ZXJzKSBieSB5b3Ugb3IgYW55b25lIGF0IHlvdXIgZGlyZWN0aW9uIGFuZCB0aGF0IHlvdSB3aWxsIG5vdCB1dGlsaXplIGFuZCB3aWxsIG5vdCBhdXRob3JpemUgYW55b25lIHRvIHV0aWxpemUsIGluIGFueSBvdGhlciBtYW5uZXIsIHRoZSBTb2Z0d2FyZSBpbiB2aW9sYXRpb24gb2YgYW55IGFwcGxpY2FibGUgbGF3LiAgVGhlIFNvZnR3YXJlIG1heSBub3QgYmUgZG93bmxvYWRlZCBvciBvdGhlcndpc2UgZXhwb3J0ZWQgb3IgcmVleHBvcnRlZCBpbnRvIChvciB0byBhIG5hdGlvbmFsIG9yIHJlc2lkZW50IG9mKSBhbnkgY291bnRyeSB0byB3aGljaCB0aGUgVS5TLiBoYXMgZW1iYXJnb2VkIGdvb2RzIG9yIHRvIGFueW9uZSBvciBpbnRvIGFueSBjb3VudHJ5IHdoby93aGljaCBhcmUgcHJvaGliaXRlZCwgYnkgYXBwbGljYWJsZSBsYXcsIGZyb20gcmVjZWl2aW5nIHN1Y2ggcHJvcGVydHkuCisKKyAgICAgMi4gIFByb2hpYml0aW9ucy4gWW91LCBlaXRoZXIgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgc2hhbGwgbm90IGRvIGFueSBvZiB0aGUgZm9sbG93aW5nIGFjdHM6CisKKyAgICAgYS4gIHJlbnQgdGhlIFNvZnR3YXJlOworCisgICAgIGIuICBzZWxsIHRoZSBTb2Z0d2FyZTsKKworICAgICBjLiAgbGVhc2Ugb3IgbGVuZCB0aGUgU29mdHdhcmU7CisKKyAgICAgZC4gIG9mZmVyIHRoZSBTb2Z0d2FyZSBvbiBhID9wYXktcGVyLXBsYXk/IGJhc2lzOworCisgICAgIGUuICBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSAoZXhjZXB0IGJ5IGVsZWN0cm9uaWMgbWVhbnMsIGFzCisgICAgICAgICBwZXJtaXR0ZWQgYnkgc2VjdGlvbiAzLiBoZXJlaW5iZWxvdykgYnkgYW55IG1lYW5zLAorICAgICAgICAgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gZGlyZWN0IG1haWwsIHJldGFpbCwgbWFpbAorICAgICAgICAgb3JkZXIgb3Igb3RoZXIgbWVhbnM7CisKKyAgICAgZi4gIGluIGFueSBvdGhlciBtYW5uZXIgYW5kIHRocm91Z2ggYW55IG1lZGl1bSB3aGF0c29ldmVyCisgICAgICAgICBjb21tZXJjaWFsbHkgZXhwbG9pdCB0aGUgU29mdHdhcmUgb3IgdXNlIHRoZSBTb2Z0d2FyZQorICAgICAgICAgZm9yIGFueSBjb21tZXJjaWFsIHB1cnBvc2U7CisKKyAgICAgZy4gIGRpc2Fzc2VtYmxlLCByZXZlcnNlIGVuZ2luZWVyLCBkZWNvbXBpbGUsIG1vZGlmeSBvcgorICAgICAgICAgYWx0ZXIgdGhlIFNvZnR3YXJlOworCisgICAgIGguICB0cmFuc2xhdGUgdGhlIFNvZnR3YXJlOworCisgICAgIGkuICByZXByb2R1Y2Ugb3IgY29weSB0aGUgU29mdHdhcmUgKGV4Y2VwdCBhcyBwZXJtaXR0ZWQgYnkKKyAgICAgICAgIHNlY3Rpb24gMy4gaGVyZWluYmVsb3cpOworCisgICAgIGouICBwdWJsaWNseSBkaXNwbGF5IHRoZSBTb2Z0d2FyZTsgb3IKKworICAgICBrLiAgcHJlcGFyZSBvciBkZXZlbG9wIGRlcml2YXRpdmUgd29ya3MgYmFzZWQgdXBvbiB0aGUKKyAgICAgICAgIFNvZnR3YXJlLgorCisgICAgIDMuICBQZXJtaXR0ZWQgRWxlY3Ryb25pYyBEaXN0cmlidXRpb24gYW5kIENvcHlpbmcuICBTbyBsb25nIGFzIHRoaXMgQWdyZWVtZW50IGFjY29tcGFuaWVzIHRoZSBTb2Z0d2FyZSBhdCBhbGwgdGltZXMsIElEIGdyYW50cyB0byB5b3UgdGhlIGxpbWl0ZWQgcmlnaHQgdG8gZGlzdHJpYnV0ZSwgZnJlZSBvZiBjaGFyZ2UgYW5kIGJ5IGVsZWN0cm9uaWMgbWVhbnMgb25seSwgdGhlIFNvZnR3YXJlLiAgQW55b25lIHdobyByZWNlaXZlcyB0aGUgU29mdHdhcmUgZnJvbSBQcm92aWRlciwgYXMgZGVmaW5lZCBiZWxvdywgc2hhbGwgYmUgbGltaXRlZCB0byBhbGwgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50LiAgVGhlIHRlcm0gIlByb3ZpZGVyIiBzaGFsbCBtZWFuIGFuIGVuZHVzZXIgd2hvIGluc3RhbGxzIGEgY29weSBvZiB0aGUgU29mdHdhcmUgb24gaGlzL2l0cyBzZXJ2ZXIgYW5kIGFsbG93cyBvdGhlciBlbmR1c2VycyB0byBkb3dubG9hZCBhIGNvcHkgb2YgdGhlIFNvZnR3YXJlIGZyb20gc3VjaCBzZXJ2ZXIuICBZb3UgbWF5IG1ha2Ugb25seSB0aGUgZm9sbG93aW5nIGNvcGllcyBvZiB0aGUgU29mdHdhcmU6ICAoaSkgeW91IG1heSBkb3dubG9hZCB0aGUgU29mdHdhcmUgZnJvbSB0aGUgSW50ZXJuZXQgYW5kIG9udG8geW91ciBjb21wdXRlciBoYXJkIGRyaXZlOyAoaWkpIHlvdSBtYXkgY29weSB0aGUgU29mdHdhcmUgZnJvbSB5b3VyIGNvbXB1dGVyIGhhcmQgZHJpdmUgaW50byB5b3VyIGNvbXB1dGVyIFJBTTsgYW5kIChpaWkpIHlvdSBtYXkgbWFrZSBvbmUgKDEpICJiYWNrIHVwIiBvciBhcmNoaXZhbCBjb3B5IG9mIHRoZSBTb2Z0d2FyZSBvbiBvbmUgKDEpIGhhcmQgZGlzay4KKworICAgICA0LiAgQ29weXJpZ2h0LiAgVGhlIFNvZnR3YXJlIGFuZCBhbGwgY29weXJpZ2h0cywgdHJhZGVtYXJrcyBhbmQgYWxsIG90aGVyIGNvbmNlaXZhYmxlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgcmVsYXRlZCB0byB0aGUgU29mdHdhcmUgYXJlIG93bmVkIGJ5IElEIGFuZCBhcmUgcHJvdGVjdGVkIGJ5IFVuaXRlZCBTdGF0ZXMgY29weXJpZ2h0IGxhd3MsIGludGVybmF0aW9uYWwgdHJlYXR5IHByb3Zpc2lvbnMgYW5kIGFsbCBhcHBsaWNhYmxlIGxhdywgc3VjaCBhcyB0aGUgTGFuaGFtIEFjdC4gIFlvdSBtdXN0IHRyZWF0IHRoZSBTb2Z0d2FyZSBsaWtlIGFueSBvdGhlciBjb3B5cmlnaHRlZCBtYXRlcmlhbCwgYXMgcmVxdWlyZWQgYnkgMTcgVS5TLkMuLCBzZWN0aW9uIDEwMSBldCBzZXEuIGFuZCBvdGhlciBhcHBsaWNhYmxlIGxhdy4gIFlvdSBhZ3JlZSB0byB1c2UgeW91ciBiZXN0IGVmZm9ydHMgdG8gc2VlIHRoYXQgYW55IHVzZXIgb2YgdGhlIFNvZnR3YXJlIGxpY2Vuc2VkIGhlcmV1bmRlciBjb21wbGllcyB3aXRoIHRoaXMgQWdyZWVtZW50LiAgWW91IGFncmVlIHRoYXQgeW91IGFyZSByZWNlaXZpbmcgYSBjb3B5IG9mIHRoZSBTb2Z0d2FyZSBieSBsaWNlbnNlIG9ubHkgYW5kIG5vdCBieSBzYWxlIGFuZCB0aGF0IHRoZSAiZmlyc3Qgc2FsZSIgZG9jdHJpbmUgb2YgMTcgVS5TLkMuIHNlY3Rpb24gMTA5IGRvZXMgbm90IGFwcGx5IHRvIHlvdXIgcmVjZWlwdCBvciB1c2Ugb2YgdGhlIFNvZnR3YXJlLgorCis1LglOTyBXQVJSQU5USUVTLiAgSUQgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTLCBXSEVUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIFdJVEggUkVTUEVDVCBUTyBUSEUgU09GVFdBUkUuICBJRCBET0VTIE5PVCBXQVJSQU5UIFRIQVQgVEhFIE9QRVJBVElPTiBPRiBUSEUgU09GVFdBUkUgV0lMTCBCRSBVTklOVEVSUlVQVEVEIE9SIEVSUk9SIEZSRUUgT1IgVEhBVCBUSEUgU09GVFdBUkUgV0lMTCBNRUVUIFlPVVIgU1BFQ0lGSUMgUkVRVUlSRU1FTlRTLiAgQURESVRJT05BTCBTVEFURU1FTlRTIFNVQ0ggQVMgUFJFU0VOVEFUSU9OUywgV0hFVEhFUiBPUkFMIE9SIFdSSVRURU4sIERPIE5PVCBDT05TVElUVVRFIFdBUlJBTlRJRVMgQlkgSUQgQU5EIFNIT1VMRCBOT1QgQkUgUkVMSUVEIFVQT04uCisKKzYuCVZlbnVlIGFuZCBMaWFiaWxpdHkgTGltaXRhdGlvbi4gIFRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGNvbnN0cnVlZCBpbiBhY2NvcmRhbmNlIHdpdGggYW5kIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBUZXhhcyBhbmQgVS5TLiBmZWRlcmFsIGxhdy4gIENvcHlyaWdodCBhbmQgb3RoZXIgcHJvcHJpZXRhcnkgbWF0dGVycyB3aWxsIGJlIGdvdmVybmVkIGJ5IFVuaXRlZCBTdGF0ZXMgbGF3cyBhbmQgaW50ZXJuYXRpb25hbCB0cmVhdGllcy4gIEV4Y2x1c2l2ZSB2ZW51ZSBmb3IgYWxsIGxpdGlnYXRpb24gcmVnYXJkaW5nIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGluIERhbGxhcyBDb3VudHksIFRleGFzIGFuZCB5b3UgYWdyZWUgdG8gc3VibWl0IHRvIHRoZSBqdXJpc2RpY3Rpb24gb2YgdGhlIGNvdXJ0cyBpbiBEYWxsYXMsIFRleGFzIGZvciBhbnkgc3VjaCBsaXRpZ2F0aW9uLiAgSU4gQU5ZIENBU0UsIE5FSVRIRVIgSUQgTk9SIElEJ1MgT0ZGSUNFUlMsIEVNUExPWUVFUywgRElSRUNUT1JTLCBBR0VOVFMsIExJQ0VOU0VFUywgU1VCTElDRU5TRUVTLCBTVUNDRVNTT1JTIE9SIEFTU0lHTlMgU0hBTEwgQkUgTElBQkxFIEZPUiBMT1NTIE9GIERBVEEsIExPU1MgT0YgUFJPRklUUywgTE9TVCBTQVZJTkdTLCBTUEVDSUFMLCBJTkNJREVOVEFMLCBDT05TRVFVRU5USUFMLCBJTkRJUkVDVCwgUFVOSVRJVkUgT1IgT1RIRVIgU0lNSUxBUiBEQU1BR0VTIEFSSVNJTkcgRlJPTSBCUkVBQ0ggT0YgV0FSUkFOVFksIEJSRUFDSCBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSwgU1RSSUNUIFBST0RVQ1QgIExJQUJJTElUWSwgT1IgT1RIRVIgTEVHQUwgVEhFT1JZIEVWRU4gSUYgSUQgT1IgSVRTIEFHRU5UIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUyBPUiBFVkVOIElGIFNVQ0ggREFNQUdFUyBBUkUgRk9SRVNFRUFCTEUsIE9SIExJQUJMRSBGT1IgQU5ZIENMQUlNIEJZIEFOWSBPVEhFUiBQQVJUWS4gIFNvbWUganVyaXNkaWN0aW9ucyBkbyBub3QgYWxsb3cgdGhlIGV4Y2x1c2lvbiBvciBsaW1pdGF0aW9uIG9mIGluY2lkZW50YWwgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzbyB0aGUgYWJvdmUgbGltaXRhdGlvbiBvciBleGNsdXNpb24gbWF5IG5vdCBhcHBseSB0byB5b3UuCisKKzcuCVUuUy4gR292ZXJubWVudCBSZXN0cmljdGVkIFJpZ2h0cy4gVG8gdGhlIGV4dGVudCBhcHBsaWNhYmxlLCB0aGUgVW5pdGVkIFN0YXRlcyBHb3Zlcm5tZW50IHNoYWxsIG9ubHkgaGF2ZSB0aG9zZSByaWdodHMgdG8gdXNlIHRoZSBTb2Z0d2FyZSBhcyBleHByZXNzbHkgc3RhdGVkIGFuZCBleHByZXNzbHkgbGltaXRlZCBhbmQgcmVzdHJpY3RlZCBpbiB0aGlzIEFncmVlbWVudCwgYXMgcHJvdmlkZWQgaW4gNDggQy5GLlIuIHNlY3Rpb25zIDIyNy43MjAyLTEgdGhyb3VnaCAyMjcuNzIwNCwgaW5jbHVzaXZlLgorCis4LglHZW5lcmFsIFByb3Zpc2lvbnMuICBBIGNvcHkgb2YgYWxsIG5vdGljZXMgb3Igb3RoZXIgY29ycmVzcG9uZGVuY2Ugd2hpY2ggeW91IHNlbmQgdG8gSUQgc2hhbGwgYWxzbyBiZSBzZW50IGJ5IHlvdSB0byBJRCdzIGNvdW5zZWw6CisKK0QuIFdhZGUgQ2xvdWQsIEpyLgorSElFUlNDSEUsIE1BUlRFTlMsIEhBWVdBUkQsIERSQUtFTEVZICYgVVJCQUNILCBQLkMuCisxNTMwMyBEYWxsYXMgUGFya3dheSwgU3VpdGUgNzAwCitEYWxsYXMsIFRYIDc1MjQ4CisoOTcyKSA3MDEtNzAwMAorRmFjc2ltaWxlOiAgICg5NzIpIDcwMS04NzY1CisKK05laXRoZXIgdGhpcyBBZ3JlZW1lbnQgbm9yIGFueSBwYXJ0IG9yIHBvcnRpb24gaGVyZW9mIHNoYWxsIGJlIGFzc2lnbmVkIG9yIHN1YmxpY2Vuc2VkIGJ5IHlvdS4gIElEIG1heSBhc3NpZ24gaXRzIHJpZ2h0cyB1bmRlciB0aGlzIEFncmVlbWVudCBpbiBJRCdzIHNvbGUgZGlzY3JldGlvbi4gIFNob3VsZCBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGJlIGhlbGQgdG8gYmUgdm9pZCwgaW52YWxpZCwgdW5lbmZvcmNlYWJsZSBvciBpbGxlZ2FsIGJ5IGEgY291cnQsIHRoZSB2YWxpZGl0eSBhbmQgZW5mb3JjZWFiaWxpdHkgb2YgdGhlIG90aGVyIHByb3Zpc2lvbnMgc2hhbGwgbm90IGJlIGFmZmVjdGVkIHRoZXJlYnkuICBJZiBhbnkgcHJvdmlzaW9uIGlzIGRldGVybWluZWQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgeW91IGFncmVlIHRvIGEgbW9kaWZpY2F0aW9uIG9mIHN1Y2ggcHJvdmlzaW9uIHRvIHByb3ZpZGUgZm9yIGVuZm9yY2VtZW50IG9mIHRoZSBwcm92aXNpb24ncyBpbnRlbnQsIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3LiAgRmFpbHVyZSBvZiBJRCB0byBlbmZvcmNlIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgbm90IGNvbnN0aXR1dGUgb3IgYmUgY29uc3RydWVkIGFzIGEgd2FpdmVyIG9mIHN1Y2ggcHJvdmlzaW9uIG9yIG9mIHRoZSByaWdodCB0byBlbmZvcmNlIHN1Y2ggcHJvdmlzaW9uLiAgSWYgeW91IGZhaWwgdG8gY29tcGx5IHdpdGggYW55IHRlcm0gb2YgdGhpcyBBZ3JlZW1lbnQsIFlPVVIgTElDRU5TRSBJUyBBVVRPTUFUSUNBTExZIFRFUk1JTkFURUQsIFdJVEhPVVQgTk9USUNFLiAgSW4gdGhlIGV2ZW50IHRoaXMgQWdyZWVtZW50IGlzIHRlcm1pbmF0ZWQsIHlvdSBzaGFsbCBoYXZlIG5vIHJpZ2h0IHRvIHVzZSB0aGUgU29mdHdhcmUsIGluIGFueSBtYW5uZXIgYW5kIHlvdSBzaGFsbCBpbW1lZGlhdGVseSBkZXN0cm95IGFsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlIGluIHlvdXIgcG9zc2Vzc2lvbiwgY3VzdG9keSBvciBjb250cm9sLiAgWW91IGFncmVlIHRoYXQgeW91ciB1bmF1dGhvcml6ZWQgdXNlIG9mIGFueSBJRCBwcm9wZXJ0eSwgd2hldGhlciBpbiB3aG9sZSBvciBpbiBwYXJ0LCB3b3VsZCBpbW1lZGlhdGVseSBhbmQgaXJyZXBhcmFibHkgZGFtYWdlIElEIHN1Y2ggdGhhdCBJRCBjb3VsZCBub3QgYmUgYWRlcXVhdGVseSBjb21wZW5zYXRlZCBieSBhbiBhd2FyZCBvZiBtb25ldGFyeSBkYW1hZ2VzLCBhbmQgaW4gdGhlIGV2ZW50IG9mIHN1Y2ggdGhyZWF0ZW5lZCBvciBhY3R1YWwgdW5hdXRob3JpemVkIHVzZSBJRCBzaGFsbCBiZSBlbnRpdGxlZCB0byBhbiBpbmp1bmN0aXZlIG9yZGVyIGFwcHJvcHJpYXRlbHkgcmVzdHJhaW5pbmcgYW5kL29yIHByb2hpYml0aW5nIHN1Y2ggdW5hdXRob3JpemVkIHVzZSB3aXRob3V0IHRoZSBuZWNlc3NpdHkgb2YgSUQgcG9zdGluZyBib25kIG9yIG90aGVyIHNlY3VyaXR5LgorCitZT1UgQUNLTk9XTEVER0UgVEhBVCBZT1UgSEFWRSBSRUFEIFRISVMgQUdSRUVNRU5ULCBZT1UgVU5ERVJTVEFORCBUSElTIEFHUkVFTUVOVCwgQU5EIFVOREVSU1RBTkQgVEhBVCBCWSBDT05USU5VSU5HIFRIRSBJTlNUQUxMQVRJT04gT0YgVEhFIFNPRlRXQVJFLCBCWSBMT0FESU5HIE9SIFJVTk5JTkcgVEhFIFNPRlRXQVJFLCBPUiBCWSBQTEFDSU5HIE9SIENPUFlJTkcgVEhFIFNPRlRXQVJFIE9OVE8gWU9VUiBDT01QVVRFUiBIQVJEIERSSVZFIE9SIFJBTSwgWU9VIEFHUkVFIFRPIEJFIEJPVU5EIEJZIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIEFHUkVFTUVOVC4gIFlPVSBGVVJUSEVSIEFHUkVFIFRIQVQsIEVYQ0VQVCBGT1IgV1JJVFRFTiBTRVBBUkFURSBBR1JFRU1FTlRTIEJFVFdFRU4gSUQgQU5EIFlPVSwgVEhJUyBBR1JFRU1FTlQgSVMgQSBDT01QTEVURSBBTkQgRVhDTFVTSVZFIFNUQVRFTUVOVCBPRiBUSEUgUklHSFRTIEFORCBMSUFCSUxJVElFUyBPRiBUSEUgUEFSVElFUyBIRVJFVE8uICBUSElTIEFHUkVFTUVOVCBTVVBFUlNFREVTIEFMTCBQUklPUiBPUkFMIEFHUkVFTUVOVFMsIFBST1BPU0FMUyBPUiBVTkRFUlNUQU5ESU5HUywgQU5EIEFOWSBPVEhFUiBDT01NVU5JQ0FUSU9OUyBCRVRXRUVOIElEIEFORCBZT1UgUkVMQVRJTkcgVE8gVEhFIFNVQkpFQ1QgTUFUVEVSIE9GIFRISVMgQUdSRUVNRU5ULgorCisKKworRmVicnVhcnkgMTYsIDE5OTggKDk6MjJhbSkKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL3F1ZWVuIGIvbGljZW5zZXMvcXVlZW4KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc3M2UzYgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL3F1ZWVuCkBAIC0wLDAgKzEsMzUgQEAKK1RoZSBMZWdhbCBTdHVmZjoKKworUHJlYW1ibGU6CisgIEJhc2ljYWxseSwgZ2l2ZSB0aGlzIGdhbWUgYXdheSwgc2hhcmUgaXQgd2l0aCB5b3VyIGZyaWVuZHMuIERvbid0IHJlbW92ZSB0aGlzCitSZWFkbWUsIG9yIHByZXRlbmQgdGhhdCB5b3Ugd3JvdGUgaXQuIFlvdSBjYW4gaW5jbHVkZSBpdCBpbiBhIHNvZnR3YXJlCitjb2xsZWN0aW9uLCBsaWtlIGEgTGludXggZGlzdHJpYnV0aW9uIG9yIGNvdmVyZGlzayAod2hpY2ggbWF5IGJlIHNvbGQpLCBidXQKK3VzaW5nIGl0IGluIHRoaW5ncyBsaWtlIGNvbW1lcmNpYWwgYWR2ZW50dXJlIGdhbWUgY29sbGVjdGlvbnMgd2l0aG91dCBhc2tpbmcgaXMKK2p1c3QgcGxheWluZyBkaXJ0eS4gWW91IGNhbiBtb2RpZnkgdGhlIGdhbWVkYXRhIGZvciBzdWNoIHB1cnBvc2VzIGFzIGNvbXByZXNzaW5nCithdWRpby4gVGhpcyBwcmVhbWJsZSBpcyBub3QgbGVnYWxseSBiaW5kaW5nLCBidXQgaXMgdG8gY2xhcmlmeSB0aGUgaW50ZW50IG9mCit0aGUgZm9sbG93aW5nIGxpY2VuY2UuCisKK0xpY2VuY2U6CisgMSkgWW91IG1heSBkaXN0cmlidXRlIHRoaXMgZ2FtZSBmb3IgZnJlZSBvbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGlzIFJlYWRtZQorYW5kIGFsbCBhc3NvY2lhdGVkIGNvcHlyaWdodCBub3RpY2VzIGFuZCBkaXNjbGFpbWVycyBhcmUgbGVmdCBpbnRhY3QuCisKKyAyKSBZb3UgbWF5IGNoYXJnZSBhIHJlYXNvbmFibGUgY29weWluZyBmZWUgZm9yIHRoaXMgYXJjaGl2ZSwgYW5kIG1heQorZGlzdHJpYnV0ZSBpdCBpbiBhZ2dyZWdhdGUgYXMgcGFydCBvZiBhIGxhcmdlciBhbmQgcG9zc2libHkgY29tbWVyY2lhbCBzb2Z0d2FyZQorZGlzdHJpYnV0aW9uIChzdWNoIGFzIGEgTGludXggZGlzdHJpYnV0aW9uIG9yIG1hZ2F6aW5lIGNvdmVyZGlzaykuIFlvdSBtdXN0Citwcm92aWRlIHByb3BlciBhdHRyaWJ1dGlvbiBhbmQgZW5zdXJlIHRoYXQgdGhpcyBSZWFkbWUgYW5kIGFsbCBhc3NvY2lhdGVkCitjb3B5cmlnaHQgbm90aWNlcyBhbmQgZGlzY2xhaW1lcnMgYXJlIGxlZnQgaW50YWN0LgorCisgMykgWW91IG1heSBub3QgY2hhcmdlIGEgZmVlIGZvciB0aGUgZ2FtZSBpdHNlbGYuIFRoaXMgaW5jbHVkZXMgcmVzZWxsaW5nIHRoZQorZ2FtZSBhcyBhbiBpbmRpdmlkdWFsIGl0ZW0uCisKKyA0KSBZb3UgbWF5IG1vZGlmeSB0aGUgZ2FtZSBhcyB5b3Ugd2lzaC4gIFlvdSBtYXkgYWxzbyBkaXN0cmlidXRlIG1vZGlmaWVkCit2ZXJzaW9ucyB1bmRlciB0aGUgdGVybXMgc2V0IGZvcnRoIGluIHRoaXMgbGljZW5jZSwgYnV0IHdpdGggdGhlIGFkZGl0aW9uYWwKK3JlcXVpcmVtZW50IHRoYXQgdGhlIHdvcmsgaXMgbWFya2VkIHdpdGggYSBwcm9taW5lbnQgbm90aWNlIHdoaWNoIHN0YXRlcyB0aGF0CitpdCBpcyBhIG1vZGlmaWVkIHZlcnNpb24uCisKKyA1KSBBbGwgZ2FtZSBjb250ZW50IGlzIChDKSBKb2huIFBhc3NmaWVsZCBhbmQgU3RldmVuIFN0YW1hdGlhZGlzLgorICAgIFRoZSBTY3VtbVZNIGVuZ2luZSBpcyAoQykgVGhlIFNjdW1tVk0gVGVhbSAod3d3LnNjdW1tdm0ub3JnKS4KKworIDYpIFRIRSBHQU1FIERBVEEgSU4gVEhJUyBBUkNISVZFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKK0lNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HIEFORCBOT1QgTElNSVRFRCBUTyBBTlkgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvcXd0IGIvbGljZW5zZXMvcXd0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNDIyY2UKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9xd3QKQEAgLTAsMCArMSw1NDMgQEAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUXd0IExpY2Vuc2UKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIFZlcnNpb24gMS4wLCBKYW51YXJ5IDEsIDIwMDMKKworVGhlIFF3dCBsaWJyYXJ5IGFuZCBpbmNsdWRlZCBwcm9ncmFtcyBhcmUgcHJvdmlkZWQgdW5kZXIgdGhlIHRlcm1zCitvZiB0aGUgR05VIExFU1NFUiBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFIChMR1BMKSB3aXRoIHRoZSBmb2xsb3dpbmcKK2V4Y2VwdGlvbnM6CisKKyAgICAxLiBXaWRnZXRzIHRoYXQgYXJlIHN1YmNsYXNzZWQgZnJvbSBRd3Qgd2lkZ2V0cyBkbyBub3QKKyAgICAgICBjb25zdGl0dXRlIGEgZGVyaXZhdGl2ZSB3b3JrLgorCisgICAgMi4gU3RhdGljIGxpbmtpbmcgb2YgYXBwbGljYXRpb25zIGFuZCB3aWRnZXRzIHRvIHRoZQorICAgICAgIFF3dCBsaWJyYXJ5IGRvZXMgbm90IGNvbnN0aXR1dGUgYSBkZXJpdmF0aXZlIHdvcmsKKyAgICAgICBhbmQgZG9lcyBub3QgcmVxdWlyZSB0aGUgYXV0aG9yIHRvIHByb3ZpZGUgc291cmNlCisgICAgICAgY29kZSBmb3IgdGhlIGFwcGxpY2F0aW9uIG9yIHdpZGdldCwgdXNlIHRoZSBzaGFyZWQKKyAgICAgICBRd3QgbGlicmFyaWVzLCBvciBsaW5rIHRoZWlyIGFwcGxpY2F0aW9ucyBvcgorICAgICAgIHdpZGdldHMgYWdhaW5zdCBhIHVzZXItc3VwcGxpZWQgdmVyc2lvbiBvZiBRd3QuCisgIAorICAgICAgIElmIHlvdSBsaW5rIHRoZSBhcHBsaWNhdGlvbiBvciB3aWRnZXQgdG8gYSBtb2RpZmllZAorICAgICAgIHZlcnNpb24gb2YgUXd0LCB0aGVuIHRoZSBjaGFuZ2VzIHRvIFF3dCBtdXN0IGJlIAorICAgICAgIHByb3ZpZGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgTEdQTCBpbiBzZWN0aW9ucworICAgICAgIDEsIDIsIGFuZCA0LgorICAKKyAgICAzLiBZb3UgZG8gbm90IGhhdmUgdG8gcHJvdmlkZSBhIGNvcHkgb2YgdGhlIFF3dCBsaWNlbnNlCisgICAgICAgd2l0aCBwcm9ncmFtcyB0aGF0IGFyZSBsaW5rZWQgdG8gdGhlIFF3dCBsaWJyYXJ5LCBub3IKKyAgICAgICBkbyB5b3UgaGF2ZSB0byBpZGVudGlmeSB0aGUgUXd0IGxpY2Vuc2UgaW4geW91cgorICAgICAgIHByb2dyYW0gb3IgZG9jdW1lbnRhdGlvbiBhcyByZXF1aXJlZCBieSBzZWN0aW9uIDYKKyAgICAgICBvZiB0aGUgTEdQTC4KKworCisgICAgICAgSG93ZXZlciwgcHJvZ3JhbXMgbXVzdCBzdGlsbCBpZGVudGlmeSB0aGVpciB1c2Ugb2YgUXd0LgorICAgICAgIFRoZSBmb2xsb3dpbmcgZXhhbXBsZSBzdGF0ZW1lbnQgY2FuIGJlIGluY2x1ZGVkIGluIHVzZXIKKyAgICAgICBkb2N1bWVudGF0aW9uIHRvIHNhdGlzZnkgdGhpcyByZXF1aXJlbWVudDoKKworICAgICAgICAgICBbcHJvZ3JhbS93aWRnZXRdIGlzIGJhc2VkIGluIHBhcnQgb24gdGhlIHdvcmsgb2YKKyAgICAgICAgICAgdGhlIFF3dCBwcm9qZWN0IChodHRwOi8vcXd0LnNmLm5ldCkuCisKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKKworCQkgIEdOVSBMRVNTRVIgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorCQkgICAgICAgVmVyc2lvbiAyLjEsIEZlYnJ1YXJ5IDE5OTkKKworIENvcHlyaWdodCAoQykgMTk5MSwgMTk5OSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4KKyAgICAgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworIG9mIHRoaXMgbGljZW5zZSBkb2N1bWVudCwgYnV0IGNoYW5naW5nIGl0IGlzIG5vdCBhbGxvd2VkLgorCitbVGhpcyBpcyB0aGUgZmlyc3QgcmVsZWFzZWQgdmVyc2lvbiBvZiB0aGUgTGVzc2VyIEdQTC4gIEl0IGFsc28gY291bnRzCisgYXMgdGhlIHN1Y2Nlc3NvciBvZiB0aGUgR05VIExpYnJhcnkgUHVibGljIExpY2Vuc2UsIHZlcnNpb24gMiwgaGVuY2UKKyB0aGUgdmVyc2lvbiBudW1iZXIgMi4xLl0KKworCQkJICAgIFByZWFtYmxlCisKKyAgVGhlIGxpY2Vuc2VzIGZvciBtb3N0IHNvZnR3YXJlIGFyZSBkZXNpZ25lZCB0byB0YWtlIGF3YXkgeW91cgorZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiAgQnkgY29udHJhc3QsIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKK0xpY2Vuc2VzIGFyZSBpbnRlbmRlZCB0byBndWFyYW50ZWUgeW91ciBmcmVlZG9tIHRvIHNoYXJlIGFuZCBjaGFuZ2UKK2ZyZWUgc29mdHdhcmUtLXRvIG1ha2Ugc3VyZSB0aGUgc29mdHdhcmUgaXMgZnJlZSBmb3IgYWxsIGl0cyB1c2Vycy4KKworICBUaGlzIGxpY2Vuc2UsIHRoZSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgYXBwbGllcyB0byBzb21lCitzcGVjaWFsbHkgZGVzaWduYXRlZCBzb2Z0d2FyZSBwYWNrYWdlcy0tdHlwaWNhbGx5IGxpYnJhcmllcy0tb2YgdGhlCitGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gYW5kIG90aGVyIGF1dGhvcnMgd2hvIGRlY2lkZSB0byB1c2UgaXQuICBZb3UKK2NhbiB1c2UgaXQgdG9vLCBidXQgd2Ugc3VnZ2VzdCB5b3UgZmlyc3QgdGhpbmsgY2FyZWZ1bGx5IGFib3V0IHdoZXRoZXIKK3RoaXMgbGljZW5zZSBvciB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpcyB0aGUgYmV0dGVyCitzdHJhdGVneSB0byB1c2UgaW4gYW55IHBhcnRpY3VsYXIgY2FzZSwgYmFzZWQgb24gdGhlIGV4cGxhbmF0aW9ucyBiZWxvdy4KKworICBXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSBvZiB1c2UsCitub3QgcHJpY2UuICBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0Cit5b3UgaGF2ZSB0aGUgZnJlZWRvbSB0byBkaXN0cmlidXRlIGNvcGllcyBvZiBmcmVlIHNvZnR3YXJlIChhbmQgY2hhcmdlCitmb3IgdGhpcyBzZXJ2aWNlIGlmIHlvdSB3aXNoKTsgdGhhdCB5b3UgcmVjZWl2ZSBzb3VyY2UgY29kZSBvciBjYW4gZ2V0CitpdCBpZiB5b3Ugd2FudCBpdDsgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgYW5kIHVzZSBwaWVjZXMgb2YKK2l0IGluIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3UgYXJlIGluZm9ybWVkIHRoYXQgeW91IGNhbiBkbwordGhlc2UgdGhpbmdzLgorCisgIFRvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQKK2Rpc3RyaWJ1dG9ycyB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlc2UKK3JpZ2h0cy4gIFRoZXNlIHJlc3RyaWN0aW9ucyB0cmFuc2xhdGUgdG8gY2VydGFpbiByZXNwb25zaWJpbGl0aWVzIGZvcgoreW91IGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgbGlicmFyeSBvciBpZiB5b3UgbW9kaWZ5IGl0LgorCisgIEZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIGxpYnJhcnksIHdoZXRoZXIgZ3JhdGlzCitvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMgdGhhdCB3ZSBnYXZlCit5b3UuICBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlCitjb2RlLiAgSWYgeW91IGxpbmsgb3RoZXIgY29kZSB3aXRoIHRoZSBsaWJyYXJ5LCB5b3UgbXVzdCBwcm92aWRlCitjb21wbGV0ZSBvYmplY3QgZmlsZXMgdG8gdGhlIHJlY2lwaWVudHMsIHNvIHRoYXQgdGhleSBjYW4gcmVsaW5rIHRoZW0KK3dpdGggdGhlIGxpYnJhcnkgYWZ0ZXIgbWFraW5nIGNoYW5nZXMgdG8gdGhlIGxpYnJhcnkgYW5kIHJlY29tcGlsaW5nCitpdC4gIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyIHJpZ2h0cy4KKworICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggYSB0d28tc3RlcCBtZXRob2Q6ICgxKSB3ZSBjb3B5cmlnaHQgdGhlCitsaWJyYXJ5LCBhbmQgKDIpIHdlIG9mZmVyIHlvdSB0aGlzIGxpY2Vuc2UsIHdoaWNoIGdpdmVzIHlvdSBsZWdhbAorcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIGxpYnJhcnkuCisKKyAgVG8gcHJvdGVjdCBlYWNoIGRpc3RyaWJ1dG9yLCB3ZSB3YW50IHRvIG1ha2UgaXQgdmVyeSBjbGVhciB0aGF0Cit0aGVyZSBpcyBubyB3YXJyYW50eSBmb3IgdGhlIGZyZWUgbGlicmFyeS4gIEFsc28sIGlmIHRoZSBsaWJyYXJ5IGlzCittb2RpZmllZCBieSBzb21lb25lIGVsc2UgYW5kIHBhc3NlZCBvbiwgdGhlIHJlY2lwaWVudHMgc2hvdWxkIGtub3cKK3RoYXQgd2hhdCB0aGV5IGhhdmUgaXMgbm90IHRoZSBvcmlnaW5hbCB2ZXJzaW9uLCBzbyB0aGF0IHRoZSBvcmlnaW5hbAorYXV0aG9yJ3MgcmVwdXRhdGlvbiB3aWxsIG5vdCBiZSBhZmZlY3RlZCBieSBwcm9ibGVtcyB0aGF0IG1pZ2h0IGJlCitpbnRyb2R1Y2VkIGJ5IG90aGVycy4KKwwKKyAgRmluYWxseSwgc29mdHdhcmUgcGF0ZW50cyBwb3NlIGEgY29uc3RhbnQgdGhyZWF0IHRvIHRoZSBleGlzdGVuY2Ugb2YKK2FueSBmcmVlIHByb2dyYW0uICBXZSB3aXNoIHRvIG1ha2Ugc3VyZSB0aGF0IGEgY29tcGFueSBjYW5ub3QKK2VmZmVjdGl2ZWx5IHJlc3RyaWN0IHRoZSB1c2VycyBvZiBhIGZyZWUgcHJvZ3JhbSBieSBvYnRhaW5pbmcgYQorcmVzdHJpY3RpdmUgbGljZW5zZSBmcm9tIGEgcGF0ZW50IGhvbGRlci4gIFRoZXJlZm9yZSwgd2UgaW5zaXN0IHRoYXQKK2FueSBwYXRlbnQgbGljZW5zZSBvYnRhaW5lZCBmb3IgYSB2ZXJzaW9uIG9mIHRoZSBsaWJyYXJ5IG11c3QgYmUKK2NvbnNpc3RlbnQgd2l0aCB0aGUgZnVsbCBmcmVlZG9tIG9mIHVzZSBzcGVjaWZpZWQgaW4gdGhpcyBsaWNlbnNlLgorCisgIE1vc3QgR05VIHNvZnR3YXJlLCBpbmNsdWRpbmcgc29tZSBsaWJyYXJpZXMsIGlzIGNvdmVyZWQgYnkgdGhlCitvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFRoaXMgbGljZW5zZSwgdGhlIEdOVSBMZXNzZXIKK0dlbmVyYWwgUHVibGljIExpY2Vuc2UsIGFwcGxpZXMgdG8gY2VydGFpbiBkZXNpZ25hdGVkIGxpYnJhcmllcywgYW5kCitpcyBxdWl0ZSBkaWZmZXJlbnQgZnJvbSB0aGUgb3JkaW5hcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZS4gIFdlIHVzZQordGhpcyBsaWNlbnNlIGZvciBjZXJ0YWluIGxpYnJhcmllcyBpbiBvcmRlciB0byBwZXJtaXQgbGlua2luZyB0aG9zZQorbGlicmFyaWVzIGludG8gbm9uLWZyZWUgcHJvZ3JhbXMuCisKKyAgV2hlbiBhIHByb2dyYW0gaXMgbGlua2VkIHdpdGggYSBsaWJyYXJ5LCB3aGV0aGVyIHN0YXRpY2FsbHkgb3IgdXNpbmcKK2Egc2hhcmVkIGxpYnJhcnksIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgdHdvIGlzIGxlZ2FsbHkgc3BlYWtpbmcgYQorY29tYmluZWQgd29yaywgYSBkZXJpdmF0aXZlIG9mIHRoZSBvcmlnaW5hbCBsaWJyYXJ5LiAgVGhlIG9yZGluYXJ5CitHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHRoZXJlZm9yZSBwZXJtaXRzIHN1Y2ggbGlua2luZyBvbmx5IGlmIHRoZQorZW50aXJlIGNvbWJpbmF0aW9uIGZpdHMgaXRzIGNyaXRlcmlhIG9mIGZyZWVkb20uICBUaGUgTGVzc2VyIEdlbmVyYWwKK1B1YmxpYyBMaWNlbnNlIHBlcm1pdHMgbW9yZSBsYXggY3JpdGVyaWEgZm9yIGxpbmtpbmcgb3RoZXIgY29kZSB3aXRoCit0aGUgbGlicmFyeS4KKworICBXZSBjYWxsIHRoaXMgbGljZW5zZSB0aGUgIkxlc3NlciIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBiZWNhdXNlIGl0Citkb2VzIExlc3MgdG8gcHJvdGVjdCB0aGUgdXNlcidzIGZyZWVkb20gdGhhbiB0aGUgb3JkaW5hcnkgR2VuZXJhbAorUHVibGljIExpY2Vuc2UuICBJdCBhbHNvIHByb3ZpZGVzIG90aGVyIGZyZWUgc29mdHdhcmUgZGV2ZWxvcGVycyBMZXNzCitvZiBhbiBhZHZhbnRhZ2Ugb3ZlciBjb21wZXRpbmcgbm9uLWZyZWUgcHJvZ3JhbXMuICBUaGVzZSBkaXNhZHZhbnRhZ2VzCithcmUgdGhlIHJlYXNvbiB3ZSB1c2UgdGhlIG9yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1hbnkKK2xpYnJhcmllcy4gIEhvd2V2ZXIsIHRoZSBMZXNzZXIgbGljZW5zZSBwcm92aWRlcyBhZHZhbnRhZ2VzIGluIGNlcnRhaW4KK3NwZWNpYWwgY2lyY3Vtc3RhbmNlcy4KKworICBGb3IgZXhhbXBsZSwgb24gcmFyZSBvY2Nhc2lvbnMsIHRoZXJlIG1heSBiZSBhIHNwZWNpYWwgbmVlZCB0bworZW5jb3VyYWdlIHRoZSB3aWRlc3QgcG9zc2libGUgdXNlIG9mIGEgY2VydGFpbiBsaWJyYXJ5LCBzbyB0aGF0IGl0IGJlY29tZXMKK2EgZGUtZmFjdG8gc3RhbmRhcmQuICBUbyBhY2hpZXZlIHRoaXMsIG5vbi1mcmVlIHByb2dyYW1zIG11c3QgYmUKK2FsbG93ZWQgdG8gdXNlIHRoZSBsaWJyYXJ5LiAgQSBtb3JlIGZyZXF1ZW50IGNhc2UgaXMgdGhhdCBhIGZyZWUKK2xpYnJhcnkgZG9lcyB0aGUgc2FtZSBqb2IgYXMgd2lkZWx5IHVzZWQgbm9uLWZyZWUgbGlicmFyaWVzLiAgSW4gdGhpcworY2FzZSwgdGhlcmUgaXMgbGl0dGxlIHRvIGdhaW4gYnkgbGltaXRpbmcgdGhlIGZyZWUgbGlicmFyeSB0byBmcmVlCitzb2Z0d2FyZSBvbmx5LCBzbyB3ZSB1c2UgdGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLgorCisgIEluIG90aGVyIGNhc2VzLCBwZXJtaXNzaW9uIHRvIHVzZSBhIHBhcnRpY3VsYXIgbGlicmFyeSBpbiBub24tZnJlZQorcHJvZ3JhbXMgZW5hYmxlcyBhIGdyZWF0ZXIgbnVtYmVyIG9mIHBlb3BsZSB0byB1c2UgYSBsYXJnZSBib2R5IG9mCitmcmVlIHNvZnR3YXJlLiAgRm9yIGV4YW1wbGUsIHBlcm1pc3Npb24gdG8gdXNlIHRoZSBHTlUgQyBMaWJyYXJ5IGluCitub24tZnJlZSBwcm9ncmFtcyBlbmFibGVzIG1hbnkgbW9yZSBwZW9wbGUgdG8gdXNlIHRoZSB3aG9sZSBHTlUKK29wZXJhdGluZyBzeXN0ZW0sIGFzIHdlbGwgYXMgaXRzIHZhcmlhbnQsIHRoZSBHTlUvTGludXggb3BlcmF0aW5nCitzeXN0ZW0uCisKKyAgQWx0aG91Z2ggdGhlIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIExlc3MgcHJvdGVjdGl2ZSBvZiB0aGUKK3VzZXJzJyBmcmVlZG9tLCBpdCBkb2VzIGVuc3VyZSB0aGF0IHRoZSB1c2VyIG9mIGEgcHJvZ3JhbSB0aGF0IGlzCitsaW5rZWQgd2l0aCB0aGUgTGlicmFyeSBoYXMgdGhlIGZyZWVkb20gYW5kIHRoZSB3aGVyZXdpdGhhbCB0byBydW4KK3RoYXQgcHJvZ3JhbSB1c2luZyBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIExpYnJhcnkuCisKKyAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKK21vZGlmaWNhdGlvbiBmb2xsb3cuICBQYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gYQorIndvcmsgYmFzZWQgb24gdGhlIGxpYnJhcnkiIGFuZCBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgbGlicmFyeSIuICBUaGUKK2Zvcm1lciBjb250YWlucyBjb2RlIGRlcml2ZWQgZnJvbSB0aGUgbGlicmFyeSwgd2hlcmVhcyB0aGUgbGF0dGVyIG11c3QKK2JlIGNvbWJpbmVkIHdpdGggdGhlIGxpYnJhcnkgaW4gb3JkZXIgdG8gcnVuLgorDAorCQkgIEdOVSBMRVNTRVIgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgMC4gVGhpcyBMaWNlbnNlIEFncmVlbWVudCBhcHBsaWVzIHRvIGFueSBzb2Z0d2FyZSBsaWJyYXJ5IG9yIG90aGVyCitwcm9ncmFtIHdoaWNoIGNvbnRhaW5zIGEgbm90aWNlIHBsYWNlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlciBvcgorb3RoZXIgYXV0aG9yaXplZCBwYXJ0eSBzYXlpbmcgaXQgbWF5IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZgordGhpcyBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAoYWxzbyBjYWxsZWQgInRoaXMgTGljZW5zZSIpLgorRWFjaCBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKKyAgQSAibGlicmFyeSIgbWVhbnMgYSBjb2xsZWN0aW9uIG9mIHNvZnR3YXJlIGZ1bmN0aW9ucyBhbmQvb3IgZGF0YQorcHJlcGFyZWQgc28gYXMgdG8gYmUgY29udmVuaWVudGx5IGxpbmtlZCB3aXRoIGFwcGxpY2F0aW9uIHByb2dyYW1zCisod2hpY2ggdXNlIHNvbWUgb2YgdGhvc2UgZnVuY3Rpb25zIGFuZCBkYXRhKSB0byBmb3JtIGV4ZWN1dGFibGVzLgorCisgIFRoZSAiTGlicmFyeSIsIGJlbG93LCByZWZlcnMgdG8gYW55IHN1Y2ggc29mdHdhcmUgbGlicmFyeSBvciB3b3JrCit3aGljaCBoYXMgYmVlbiBkaXN0cmlidXRlZCB1bmRlciB0aGVzZSB0ZXJtcy4gIEEgIndvcmsgYmFzZWQgb24gdGhlCitMaWJyYXJ5IiBtZWFucyBlaXRoZXIgdGhlIExpYnJhcnkgb3IgYW55IGRlcml2YXRpdmUgd29yayB1bmRlcgorY29weXJpZ2h0IGxhdzogdGhhdCBpcyB0byBzYXksIGEgd29yayBjb250YWluaW5nIHRoZSBMaWJyYXJ5IG9yIGEKK3BvcnRpb24gb2YgaXQsIGVpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQKK3N0cmFpZ2h0Zm9yd2FyZGx5IGludG8gYW5vdGhlciBsYW5ndWFnZS4gIChIZXJlaW5hZnRlciwgdHJhbnNsYXRpb24gaXMKK2luY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbiB0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pCisKKyAgIlNvdXJjZSBjb2RlIiBmb3IgYSB3b3JrIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBvZiB0aGUgd29yayBmb3IKK21ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiAgRm9yIGEgbGlicmFyeSwgY29tcGxldGUgc291cmNlIGNvZGUgbWVhbnMKK2FsbCB0aGUgc291cmNlIGNvZGUgZm9yIGFsbCBtb2R1bGVzIGl0IGNvbnRhaW5zLCBwbHVzIGFueSBhc3NvY2lhdGVkCitpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24KK2FuZCBpbnN0YWxsYXRpb24gb2YgdGhlIGxpYnJhcnkuCisKKyAgQWN0aXZpdGllcyBvdGhlciB0aGFuIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGFyZSBub3QKK2NvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gIFRoZSBhY3Qgb2YKK3J1bm5pbmcgYSBwcm9ncmFtIHVzaW5nIHRoZSBMaWJyYXJ5IGlzIG5vdCByZXN0cmljdGVkLCBhbmQgb3V0cHV0IGZyb20KK3N1Y2ggYSBwcm9ncmFtIGlzIGNvdmVyZWQgb25seSBpZiBpdHMgY29udGVudHMgY29uc3RpdHV0ZSBhIHdvcmsgYmFzZWQKK29uIHRoZSBMaWJyYXJ5IChpbmRlcGVuZGVudCBvZiB0aGUgdXNlIG9mIHRoZSBMaWJyYXJ5IGluIGEgdG9vbCBmb3IKK3dyaXRpbmcgaXQpLiAgV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBMaWJyYXJ5IGRvZXMKK2FuZCB3aGF0IHRoZSBwcm9ncmFtIHRoYXQgdXNlcyB0aGUgTGlicmFyeSBkb2VzLgorICAKKyAgMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgTGlicmFyeSdzCitjb21wbGV0ZSBzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdAoreW91IGNvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgYW4KK2FwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0CithbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueQord2FycmFudHk7IGFuZCBkaXN0cmlidXRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUKK0xpYnJhcnkuCisKKyAgWW91IG1heSBjaGFyZ2UgYSBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEgY29weSwKK2FuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEKK2ZlZS4KKwwKKyAgMi4gWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB0aGUgTGlicmFyeSBvciBhbnkgcG9ydGlvbgorb2YgaXQsIHRodXMgZm9ybWluZyBhIHdvcmsgYmFzZWQgb24gdGhlIExpYnJhcnksIGFuZCBjb3B5IGFuZAorZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxCithYm92ZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgorCisgICAgYSkgVGhlIG1vZGlmaWVkIHdvcmsgbXVzdCBpdHNlbGYgYmUgYSBzb2Z0d2FyZSBsaWJyYXJ5LgorCisgICAgYikgWW91IG11c3QgY2F1c2UgdGhlIGZpbGVzIG1vZGlmaWVkIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGMpIFlvdSBtdXN0IGNhdXNlIHRoZSB3aG9sZSBvZiB0aGUgd29yayB0byBiZSBsaWNlbnNlZCBhdCBubworICAgIGNoYXJnZSB0byBhbGwgdGhpcmQgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgZCkgSWYgYSBmYWNpbGl0eSBpbiB0aGUgbW9kaWZpZWQgTGlicmFyeSByZWZlcnMgdG8gYSBmdW5jdGlvbiBvciBhCisgICAgdGFibGUgb2YgZGF0YSB0byBiZSBzdXBwbGllZCBieSBhbiBhcHBsaWNhdGlvbiBwcm9ncmFtIHRoYXQgdXNlcworICAgIHRoZSBmYWNpbGl0eSwgb3RoZXIgdGhhbiBhcyBhbiBhcmd1bWVudCBwYXNzZWQgd2hlbiB0aGUgZmFjaWxpdHkKKyAgICBpcyBpbnZva2VkLCB0aGVuIHlvdSBtdXN0IG1ha2UgYSBnb29kIGZhaXRoIGVmZm9ydCB0byBlbnN1cmUgdGhhdCwKKyAgICBpbiB0aGUgZXZlbnQgYW4gYXBwbGljYXRpb24gZG9lcyBub3Qgc3VwcGx5IHN1Y2ggZnVuY3Rpb24gb3IKKyAgICB0YWJsZSwgdGhlIGZhY2lsaXR5IHN0aWxsIG9wZXJhdGVzLCBhbmQgcGVyZm9ybXMgd2hhdGV2ZXIgcGFydCBvZgorICAgIGl0cyBwdXJwb3NlIHJlbWFpbnMgbWVhbmluZ2Z1bC4KKworICAgIChGb3IgZXhhbXBsZSwgYSBmdW5jdGlvbiBpbiBhIGxpYnJhcnkgdG8gY29tcHV0ZSBzcXVhcmUgcm9vdHMgaGFzCisgICAgYSBwdXJwb3NlIHRoYXQgaXMgZW50aXJlbHkgd2VsbC1kZWZpbmVkIGluZGVwZW5kZW50IG9mIHRoZQorICAgIGFwcGxpY2F0aW9uLiAgVGhlcmVmb3JlLCBTdWJzZWN0aW9uIDJkIHJlcXVpcmVzIHRoYXQgYW55CisgICAgYXBwbGljYXRpb24tc3VwcGxpZWQgZnVuY3Rpb24gb3IgdGFibGUgdXNlZCBieSB0aGlzIGZ1bmN0aW9uIG11c3QKKyAgICBiZSBvcHRpb25hbDogaWYgdGhlIGFwcGxpY2F0aW9uIGRvZXMgbm90IHN1cHBseSBpdCwgdGhlIHNxdWFyZQorICAgIHJvb3QgZnVuY3Rpb24gbXVzdCBzdGlsbCBjb21wdXRlIHNxdWFyZSByb290cy4pCisKK1RoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiAgSWYKK2lkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIExpYnJhcnksCithbmQgY2FuIGJlIHJlYXNvbmFibHkgY29uc2lkZXJlZCBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgd29ya3MgaW4KK3RoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2UKK3NlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gIEJ1dCB3aGVuIHlvdQorZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2ggaXMgYSB3b3JrIGJhc2VkCitvbiB0aGUgTGlicmFyeSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YKK3RoaXMgTGljZW5zZSwgd2hvc2UgcGVybWlzc2lvbnMgZm9yIG90aGVyIGxpY2Vuc2VlcyBleHRlbmQgdG8gdGhlCitlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUKK2l0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QKK3lvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlIGludGVudCBpcyB0bworZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yCitjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBMaWJyYXJ5Cit3aXRoIHRoZSBMaWJyYXJ5IChvciB3aXRoIGEgd29yayBiYXNlZCBvbiB0aGUgTGlicmFyeSkgb24gYSB2b2x1bWUgb2YKK2Egc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyCit0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIDMuIFlvdSBtYXkgb3B0IHRvIGFwcGx5IHRoZSB0ZXJtcyBvZiB0aGUgb3JkaW5hcnkgR05VIEdlbmVyYWwgUHVibGljCitMaWNlbnNlIGluc3RlYWQgb2YgdGhpcyBMaWNlbnNlIHRvIGEgZ2l2ZW4gY29weSBvZiB0aGUgTGlicmFyeS4gIFRvIGRvCit0aGlzLCB5b3UgbXVzdCBhbHRlciBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UsIHNvCit0aGF0IHRoZXkgcmVmZXIgdG8gdGhlIG9yZGluYXJ5IEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLCB2ZXJzaW9uIDIsCitpbnN0ZWFkIG9mIHRvIHRoaXMgTGljZW5zZS4gIChJZiBhIG5ld2VyIHZlcnNpb24gdGhhbiB2ZXJzaW9uIDIgb2YgdGhlCitvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBoYXMgYXBwZWFyZWQsIHRoZW4geW91IGNhbiBzcGVjaWZ5Cit0aGF0IHZlcnNpb24gaW5zdGVhZCBpZiB5b3Ugd2lzaC4pICBEbyBub3QgbWFrZSBhbnkgb3RoZXIgY2hhbmdlIGluCit0aGVzZSBub3RpY2VzLgorDAorICBPbmNlIHRoaXMgY2hhbmdlIGlzIG1hZGUgaW4gYSBnaXZlbiBjb3B5LCBpdCBpcyBpcnJldmVyc2libGUgZm9yCit0aGF0IGNvcHksIHNvIHRoZSBvcmRpbmFyeSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIGFsbAorc3Vic2VxdWVudCBjb3BpZXMgYW5kIGRlcml2YXRpdmUgd29ya3MgbWFkZSBmcm9tIHRoYXQgY29weS4KKworICBUaGlzIG9wdGlvbiBpcyB1c2VmdWwgd2hlbiB5b3Ugd2lzaCB0byBjb3B5IHBhcnQgb2YgdGhlIGNvZGUgb2YKK3RoZSBMaWJyYXJ5IGludG8gYSBwcm9ncmFtIHRoYXQgaXMgbm90IGEgbGlicmFyeS4KKworICA0LiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgKG9yIGEgcG9ydGlvbiBvcgorZGVyaXZhdGl2ZSBvZiBpdCwgdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0KK3VuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIHByb3ZpZGVkIHRoYXQgeW91IGFjY29tcGFueQoraXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlIHNvdXJjZSBjb2RlLCB3aGljaAorbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhCittZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2UuCisKKyAgSWYgZGlzdHJpYnV0aW9uIG9mIG9iamVjdCBjb2RlIGlzIG1hZGUgYnkgb2ZmZXJpbmcgYWNjZXNzIHRvIGNvcHkKK2Zyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlCitzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIHNhdGlzZmllcyB0aGUgcmVxdWlyZW1lbnQgdG8KK2Rpc3RyaWJ1dGUgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKK2NvbXBlbGxlZCB0byBjb3B5IHRoZSBzb3VyY2UgYWxvbmcgd2l0aCB0aGUgb2JqZWN0IGNvZGUuCisKKyAgNS4gQSBwcm9ncmFtIHRoYXQgY29udGFpbnMgbm8gZGVyaXZhdGl2ZSBvZiBhbnkgcG9ydGlvbiBvZiB0aGUKK0xpYnJhcnksIGJ1dCBpcyBkZXNpZ25lZCB0byB3b3JrIHdpdGggdGhlIExpYnJhcnkgYnkgYmVpbmcgY29tcGlsZWQgb3IKK2xpbmtlZCB3aXRoIGl0LCBpcyBjYWxsZWQgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiLiAgU3VjaCBhCit3b3JrLCBpbiBpc29sYXRpb24sIGlzIG5vdCBhIGRlcml2YXRpdmUgd29yayBvZiB0aGUgTGlicmFyeSwgYW5kCit0aGVyZWZvcmUgZmFsbHMgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgIEhvd2V2ZXIsIGxpbmtpbmcgYSAid29yayB0aGF0IHVzZXMgdGhlIExpYnJhcnkiIHdpdGggdGhlIExpYnJhcnkKK2NyZWF0ZXMgYW4gZXhlY3V0YWJsZSB0aGF0IGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGUgTGlicmFyeSAoYmVjYXVzZSBpdAorY29udGFpbnMgcG9ydGlvbnMgb2YgdGhlIExpYnJhcnkpLCByYXRoZXIgdGhhbiBhICJ3b3JrIHRoYXQgdXNlcyB0aGUKK2xpYnJhcnkiLiAgVGhlIGV4ZWN1dGFibGUgaXMgdGhlcmVmb3JlIGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlLgorU2VjdGlvbiA2IHN0YXRlcyB0ZXJtcyBmb3IgZGlzdHJpYnV0aW9uIG9mIHN1Y2ggZXhlY3V0YWJsZXMuCisKKyAgV2hlbiBhICJ3b3JrIHRoYXQgdXNlcyB0aGUgTGlicmFyeSIgdXNlcyBtYXRlcmlhbCBmcm9tIGEgaGVhZGVyIGZpbGUKK3RoYXQgaXMgcGFydCBvZiB0aGUgTGlicmFyeSwgdGhlIG9iamVjdCBjb2RlIGZvciB0aGUgd29yayBtYXkgYmUgYQorZGVyaXZhdGl2ZSB3b3JrIG9mIHRoZSBMaWJyYXJ5IGV2ZW4gdGhvdWdoIHRoZSBzb3VyY2UgY29kZSBpcyBub3QuCitXaGV0aGVyIHRoaXMgaXMgdHJ1ZSBpcyBlc3BlY2lhbGx5IHNpZ25pZmljYW50IGlmIHRoZSB3b3JrIGNhbiBiZQorbGlua2VkIHdpdGhvdXQgdGhlIExpYnJhcnksIG9yIGlmIHRoZSB3b3JrIGlzIGl0c2VsZiBhIGxpYnJhcnkuICBUaGUKK3RocmVzaG9sZCBmb3IgdGhpcyB0byBiZSB0cnVlIGlzIG5vdCBwcmVjaXNlbHkgZGVmaW5lZCBieSBsYXcuCisKKyAgSWYgc3VjaCBhbiBvYmplY3QgZmlsZSB1c2VzIG9ubHkgbnVtZXJpY2FsIHBhcmFtZXRlcnMsIGRhdGEKK3N0cnVjdHVyZSBsYXlvdXRzIGFuZCBhY2Nlc3NvcnMsIGFuZCBzbWFsbCBtYWNyb3MgYW5kIHNtYWxsIGlubGluZQorZnVuY3Rpb25zICh0ZW4gbGluZXMgb3IgbGVzcyBpbiBsZW5ndGgpLCB0aGVuIHRoZSB1c2Ugb2YgdGhlIG9iamVjdAorZmlsZSBpcyB1bnJlc3RyaWN0ZWQsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBpcyBsZWdhbGx5IGEgZGVyaXZhdGl2ZQord29yay4gIChFeGVjdXRhYmxlcyBjb250YWluaW5nIHRoaXMgb2JqZWN0IGNvZGUgcGx1cyBwb3J0aW9ucyBvZiB0aGUKK0xpYnJhcnkgd2lsbCBzdGlsbCBmYWxsIHVuZGVyIFNlY3Rpb24gNi4pCisKKyAgT3RoZXJ3aXNlLCBpZiB0aGUgd29yayBpcyBhIGRlcml2YXRpdmUgb2YgdGhlIExpYnJhcnksIHlvdSBtYXkKK2Rpc3RyaWJ1dGUgdGhlIG9iamVjdCBjb2RlIGZvciB0aGUgd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiA2LgorQW55IGV4ZWN1dGFibGVzIGNvbnRhaW5pbmcgdGhhdCB3b3JrIGFsc28gZmFsbCB1bmRlciBTZWN0aW9uIDYsCit3aGV0aGVyIG9yIG5vdCB0aGV5IGFyZSBsaW5rZWQgZGlyZWN0bHkgd2l0aCB0aGUgTGlicmFyeSBpdHNlbGYuCisMCisgIDYuIEFzIGFuIGV4Y2VwdGlvbiB0byB0aGUgU2VjdGlvbnMgYWJvdmUsIHlvdSBtYXkgYWxzbyBjb21iaW5lIG9yCitsaW5rIGEgIndvcmsgdGhhdCB1c2VzIHRoZSBMaWJyYXJ5IiB3aXRoIHRoZSBMaWJyYXJ5IHRvIHByb2R1Y2UgYQord29yayBjb250YWluaW5nIHBvcnRpb25zIG9mIHRoZSBMaWJyYXJ5LCBhbmQgZGlzdHJpYnV0ZSB0aGF0IHdvcmsKK3VuZGVyIHRlcm1zIG9mIHlvdXIgY2hvaWNlLCBwcm92aWRlZCB0aGF0IHRoZSB0ZXJtcyBwZXJtaXQKK21vZGlmaWNhdGlvbiBvZiB0aGUgd29yayBmb3IgdGhlIGN1c3RvbWVyJ3Mgb3duIHVzZSBhbmQgcmV2ZXJzZQorZW5naW5lZXJpbmcgZm9yIGRlYnVnZ2luZyBzdWNoIG1vZGlmaWNhdGlvbnMuCisKKyAgWW91IG11c3QgZ2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggZWFjaCBjb3B5IG9mIHRoZSB3b3JrIHRoYXQgdGhlCitMaWJyYXJ5IGlzIHVzZWQgaW4gaXQgYW5kIHRoYXQgdGhlIExpYnJhcnkgYW5kIGl0cyB1c2UgYXJlIGNvdmVyZWQgYnkKK3RoaXMgTGljZW5zZS4gIFlvdSBtdXN0IHN1cHBseSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiAgSWYgdGhlIHdvcmsKK2R1cmluZyBleGVjdXRpb24gZGlzcGxheXMgY29weXJpZ2h0IG5vdGljZXMsIHlvdSBtdXN0IGluY2x1ZGUgdGhlCitjb3B5cmlnaHQgbm90aWNlIGZvciB0aGUgTGlicmFyeSBhbW9uZyB0aGVtLCBhcyB3ZWxsIGFzIGEgcmVmZXJlbmNlCitkaXJlY3RpbmcgdGhlIHVzZXIgdG8gdGhlIGNvcHkgb2YgdGhpcyBMaWNlbnNlLiAgQWxzbywgeW91IG11c3QgZG8gb25lCitvZiB0aGVzZSB0aGluZ3M6CisKKyAgICBhKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZworICAgIG1hY2hpbmUtcmVhZGFibGUgc291cmNlIGNvZGUgZm9yIHRoZSBMaWJyYXJ5IGluY2x1ZGluZyB3aGF0ZXZlcgorICAgIGNoYW5nZXMgd2VyZSB1c2VkIGluIHRoZSB3b3JrICh3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyCisgICAgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSk7IGFuZCwgaWYgdGhlIHdvcmsgaXMgYW4gZXhlY3V0YWJsZSBsaW5rZWQKKyAgICB3aXRoIHRoZSBMaWJyYXJ5LCB3aXRoIHRoZSBjb21wbGV0ZSBtYWNoaW5lLXJlYWRhYmxlICJ3b3JrIHRoYXQKKyAgICB1c2VzIHRoZSBMaWJyYXJ5IiwgYXMgb2JqZWN0IGNvZGUgYW5kL29yIHNvdXJjZSBjb2RlLCBzbyB0aGF0IHRoZQorICAgIHVzZXIgY2FuIG1vZGlmeSB0aGUgTGlicmFyeSBhbmQgdGhlbiByZWxpbmsgdG8gcHJvZHVjZSBhIG1vZGlmaWVkCisgICAgZXhlY3V0YWJsZSBjb250YWluaW5nIHRoZSBtb2RpZmllZCBMaWJyYXJ5LiAgKEl0IGlzIHVuZGVyc3Rvb2QKKyAgICB0aGF0IHRoZSB1c2VyIHdobyBjaGFuZ2VzIHRoZSBjb250ZW50cyBvZiBkZWZpbml0aW9ucyBmaWxlcyBpbiB0aGUKKyAgICBMaWJyYXJ5IHdpbGwgbm90IG5lY2Vzc2FyaWx5IGJlIGFibGUgdG8gcmVjb21waWxlIHRoZSBhcHBsaWNhdGlvbgorICAgIHRvIHVzZSB0aGUgbW9kaWZpZWQgZGVmaW5pdGlvbnMuKQorCisgICAgYikgVXNlIGEgc3VpdGFibGUgc2hhcmVkIGxpYnJhcnkgbWVjaGFuaXNtIGZvciBsaW5raW5nIHdpdGggdGhlCisgICAgTGlicmFyeS4gIEEgc3VpdGFibGUgbWVjaGFuaXNtIGlzIG9uZSB0aGF0ICgxKSB1c2VzIGF0IHJ1biB0aW1lIGEKKyAgICBjb3B5IG9mIHRoZSBsaWJyYXJ5IGFscmVhZHkgcHJlc2VudCBvbiB0aGUgdXNlcidzIGNvbXB1dGVyIHN5c3RlbSwKKyAgICByYXRoZXIgdGhhbiBjb3B5aW5nIGxpYnJhcnkgZnVuY3Rpb25zIGludG8gdGhlIGV4ZWN1dGFibGUsIGFuZCAoMikKKyAgICB3aWxsIG9wZXJhdGUgcHJvcGVybHkgd2l0aCBhIG1vZGlmaWVkIHZlcnNpb24gb2YgdGhlIGxpYnJhcnksIGlmCisgICAgdGhlIHVzZXIgaW5zdGFsbHMgb25lLCBhcyBsb25nIGFzIHRoZSBtb2RpZmllZCB2ZXJzaW9uIGlzCisgICAgaW50ZXJmYWNlLWNvbXBhdGlibGUgd2l0aCB0aGUgdmVyc2lvbiB0aGF0IHRoZSB3b3JrIHdhcyBtYWRlIHdpdGguCisKKyAgICBjKSBBY2NvbXBhbnkgdGhlIHdvcmsgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdAorICAgIGxlYXN0IHRocmVlIHllYXJzLCB0byBnaXZlIHRoZSBzYW1lIHVzZXIgdGhlIG1hdGVyaWFscworICAgIHNwZWNpZmllZCBpbiBTdWJzZWN0aW9uIDZhLCBhYm92ZSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUKKyAgICB0aGFuIHRoZSBjb3N0IG9mIHBlcmZvcm1pbmcgdGhpcyBkaXN0cmlidXRpb24uCisKKyAgICBkKSBJZiBkaXN0cmlidXRpb24gb2YgdGhlIHdvcmsgaXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weQorICAgIGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCBvZmZlciBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZSBhYm92ZQorICAgIHNwZWNpZmllZCBtYXRlcmlhbHMgZnJvbSB0aGUgc2FtZSBwbGFjZS4KKworICAgIGUpIFZlcmlmeSB0aGF0IHRoZSB1c2VyIGhhcyBhbHJlYWR5IHJlY2VpdmVkIGEgY29weSBvZiB0aGVzZQorICAgIG1hdGVyaWFscyBvciB0aGF0IHlvdSBoYXZlIGFscmVhZHkgc2VudCB0aGlzIHVzZXIgYSBjb3B5LgorCisgIEZvciBhbiBleGVjdXRhYmxlLCB0aGUgcmVxdWlyZWQgZm9ybSBvZiB0aGUgIndvcmsgdGhhdCB1c2VzIHRoZQorTGlicmFyeSIgbXVzdCBpbmNsdWRlIGFueSBkYXRhIGFuZCB1dGlsaXR5IHByb2dyYW1zIG5lZWRlZCBmb3IKK3JlcHJvZHVjaW5nIHRoZSBleGVjdXRhYmxlIGZyb20gaXQuICBIb3dldmVyLCBhcyBhIHNwZWNpYWwgZXhjZXB0aW9uLAordGhlIG1hdGVyaWFscyB0byBiZSBkaXN0cmlidXRlZCBuZWVkIG5vdCBpbmNsdWRlIGFueXRoaW5nIHRoYXQgaXMKK25vcm1hbGx5IGRpc3RyaWJ1dGVkIChpbiBlaXRoZXIgc291cmNlIG9yIGJpbmFyeSBmb3JtKSB3aXRoIHRoZSBtYWpvcgorY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvbgord2hpY2ggdGhlIGV4ZWN1dGFibGUgcnVucywgdW5sZXNzIHRoYXQgY29tcG9uZW50IGl0c2VsZiBhY2NvbXBhbmllcwordGhlIGV4ZWN1dGFibGUuCisKKyAgSXQgbWF5IGhhcHBlbiB0aGF0IHRoaXMgcmVxdWlyZW1lbnQgY29udHJhZGljdHMgdGhlIGxpY2Vuc2UKK3Jlc3RyaWN0aW9ucyBvZiBvdGhlciBwcm9wcmlldGFyeSBsaWJyYXJpZXMgdGhhdCBkbyBub3Qgbm9ybWFsbHkKK2FjY29tcGFueSB0aGUgb3BlcmF0aW5nIHN5c3RlbS4gIFN1Y2ggYSBjb250cmFkaWN0aW9uIG1lYW5zIHlvdSBjYW5ub3QKK3VzZSBib3RoIHRoZW0gYW5kIHRoZSBMaWJyYXJ5IHRvZ2V0aGVyIGluIGFuIGV4ZWN1dGFibGUgdGhhdCB5b3UKK2Rpc3RyaWJ1dGUuCisMCisgIDcuIFlvdSBtYXkgcGxhY2UgbGlicmFyeSBmYWNpbGl0aWVzIHRoYXQgYXJlIGEgd29yayBiYXNlZCBvbiB0aGUKK0xpYnJhcnkgc2lkZS1ieS1zaWRlIGluIGEgc2luZ2xlIGxpYnJhcnkgdG9nZXRoZXIgd2l0aCBvdGhlciBsaWJyYXJ5CitmYWNpbGl0aWVzIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZSwgYW5kIGRpc3RyaWJ1dGUgc3VjaCBhIGNvbWJpbmVkCitsaWJyYXJ5LCBwcm92aWRlZCB0aGF0IHRoZSBzZXBhcmF0ZSBkaXN0cmlidXRpb24gb2YgdGhlIHdvcmsgYmFzZWQgb24KK3RoZSBMaWJyYXJ5IGFuZCBvZiB0aGUgb3RoZXIgbGlicmFyeSBmYWNpbGl0aWVzIGlzIG90aGVyd2lzZQorcGVybWl0dGVkLCBhbmQgcHJvdmlkZWQgdGhhdCB5b3UgZG8gdGhlc2UgdHdvIHRoaW5nczoKKworICAgIGEpIEFjY29tcGFueSB0aGUgY29tYmluZWQgbGlicmFyeSB3aXRoIGEgY29weSBvZiB0aGUgc2FtZSB3b3JrCisgICAgYmFzZWQgb24gdGhlIExpYnJhcnksIHVuY29tYmluZWQgd2l0aCBhbnkgb3RoZXIgbGlicmFyeQorICAgIGZhY2lsaXRpZXMuICBUaGlzIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZQorICAgIFNlY3Rpb25zIGFib3ZlLgorCisgICAgYikgR2l2ZSBwcm9taW5lbnQgbm90aWNlIHdpdGggdGhlIGNvbWJpbmVkIGxpYnJhcnkgb2YgdGhlIGZhY3QKKyAgICB0aGF0IHBhcnQgb2YgaXQgaXMgYSB3b3JrIGJhc2VkIG9uIHRoZSBMaWJyYXJ5LCBhbmQgZXhwbGFpbmluZworICAgIHdoZXJlIHRvIGZpbmQgdGhlIGFjY29tcGFueWluZyB1bmNvbWJpbmVkIGZvcm0gb2YgdGhlIHNhbWUgd29yay4KKworICA4LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIGxpbmsgd2l0aCwgb3IgZGlzdHJpYnV0ZQordGhlIExpYnJhcnkgZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuICBBbnkKK2F0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSwgbGluayB3aXRoLCBvcgorZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyCityaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiAgSG93ZXZlciwgcGFydGllcyB3aG8gaGF2ZSByZWNlaXZlZCBjb3BpZXMsCitvciByaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzCit0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaCBwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgOS4gWW91IGFyZSBub3QgcmVxdWlyZWQgdG8gYWNjZXB0IHRoaXMgTGljZW5zZSwgc2luY2UgeW91IGhhdmUgbm90CitzaWduZWQgaXQuICBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvcgorZGlzdHJpYnV0ZSB0aGUgTGlicmFyeSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gIFRoZXNlIGFjdGlvbnMgYXJlCitwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuICBUaGVyZWZvcmUsIGJ5Cittb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBMaWJyYXJ5IChvciBhbnkgd29yayBiYXNlZCBvbiB0aGUKK0xpYnJhcnkpLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kCithbGwgaXRzIHRlcm1zIGFuZCBjb25kaXRpb25zIGZvciBjb3B5aW5nLCBkaXN0cmlidXRpbmcgb3IgbW9kaWZ5aW5nCit0aGUgTGlicmFyeSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworICAxMC4gRWFjaCB0aW1lIHlvdSByZWRpc3RyaWJ1dGUgdGhlIExpYnJhcnkgKG9yIGFueSB3b3JrIGJhc2VkIG9uIHRoZQorTGlicmFyeSksIHRoZSByZWNpcGllbnQgYXV0b21hdGljYWxseSByZWNlaXZlcyBhIGxpY2Vuc2UgZnJvbSB0aGUKK29yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUsIGxpbmsgd2l0aCBvciBtb2RpZnkgdGhlIExpYnJhcnkKK3N1YmplY3QgdG8gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuICBZb3UgbWF5IG5vdCBpbXBvc2UgYW55IGZ1cnRoZXIKK3Jlc3RyaWN0aW9ucyBvbiB0aGUgcmVjaXBpZW50cycgZXhlcmNpc2Ugb2YgdGhlIHJpZ2h0cyBncmFudGVkIGhlcmVpbi4KK1lvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHdpdGgKK3RoaXMgTGljZW5zZS4KKwwKKyAgMTEuIElmLCBhcyBhIGNvbnNlcXVlbmNlIG9mIGEgY291cnQganVkZ21lbnQgb3IgYWxsZWdhdGlvbiBvZiBwYXRlbnQKK2luZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksCitjb25kaXRpb25zIGFyZSBpbXBvc2VkIG9uIHlvdSAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yCitvdGhlcndpc2UpIHRoYXQgY29udHJhZGljdCB0aGUgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIHRoZXkgZG8gbm90CitleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiAgSWYgeW91IGNhbm5vdAorZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5IHlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhpcworTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdQorbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBMaWJyYXJ5IGF0IGFsbC4gIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudAorbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgTGlicmFyeSBieQorYWxsIHRob3NlIHdobyByZWNlaXZlIGNvcGllcyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IHRocm91Z2ggeW91LCB0aGVuCit0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvCityZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBMaWJyYXJ5LgorCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYW55CitwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gYXBwbHksCithbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlciBjaXJjdW1zdGFuY2VzLgorCitJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UgYW55CitwYXRlbnRzIG9yIG90aGVyIHByb3BlcnR5IHJpZ2h0IGNsYWltcyBvciB0byBjb250ZXN0IHZhbGlkaXR5IG9mIGFueQorc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZQoraW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0gd2hpY2ggaXMKK2ltcGxlbWVudGVkIGJ5IHB1YmxpYyBsaWNlbnNlIHByYWN0aWNlcy4gIE1hbnkgcGVvcGxlIGhhdmUgbWFkZQorZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZAordGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50IGFwcGxpY2F0aW9uIG9mIHRoYXQKK3N5c3RlbTsgaXQgaXMgdXAgdG8gdGhlIGF1dGhvci9kb25vciB0byBkZWNpZGUgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcKK3RvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdAoraW1wb3NlIHRoYXQgY2hvaWNlLgorCitUaGlzIHNlY3Rpb24gaXMgaW50ZW5kZWQgdG8gbWFrZSB0aG9yb3VnaGx5IGNsZWFyIHdoYXQgaXMgYmVsaWV2ZWQgdG8KK2JlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgorCisgIDEyLiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIExpYnJhcnkgaXMgcmVzdHJpY3RlZCBpbgorY2VydGFpbiBjb3VudHJpZXMgZWl0aGVyIGJ5IHBhdGVudHMgb3IgYnkgY29weXJpZ2h0ZWQgaW50ZXJmYWNlcywgdGhlCitvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIExpYnJhcnkgdW5kZXIgdGhpcyBMaWNlbnNlIG1heSBhZGQKK2FuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbiBleGNsdWRpbmcgdGhvc2UgY291bnRyaWVzLAorc28gdGhhdCBkaXN0cmlidXRpb24gaXMgcGVybWl0dGVkIG9ubHkgaW4gb3IgYW1vbmcgY291bnRyaWVzIG5vdCB0aHVzCitleGNsdWRlZC4gIEluIHN1Y2ggY2FzZSwgdGhpcyBMaWNlbnNlIGluY29ycG9yYXRlcyB0aGUgbGltaXRhdGlvbiBhcyBpZgord3JpdHRlbiBpbiB0aGUgYm9keSBvZiB0aGlzIExpY2Vuc2UuCisKKyAgMTMuIFRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24gbWF5IHB1Ymxpc2ggcmV2aXNlZCBhbmQvb3IgbmV3Cit2ZXJzaW9ucyBvZiB0aGUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuCitTdWNoIG5ldyB2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sCitidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCisKK0VhY2ggdmVyc2lvbiBpcyBnaXZlbiBhIGRpc3Rpbmd1aXNoaW5nIHZlcnNpb24gbnVtYmVyLiAgSWYgdGhlIExpYnJhcnkKK3NwZWNpZmllcyBhIHZlcnNpb24gbnVtYmVyIG9mIHRoaXMgTGljZW5zZSB3aGljaCBhcHBsaWVzIHRvIGl0IGFuZAorImFueSBsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcgdGhlIHRlcm1zIGFuZAorY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieQordGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4gIElmIHRoZSBMaWJyYXJ5IGRvZXMgbm90IHNwZWNpZnkgYQorbGljZW5zZSB2ZXJzaW9uIG51bWJlciwgeW91IG1heSBjaG9vc2UgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkKK3RoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisMCisgIDE0LiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgTGlicmFyeSBpbnRvIG90aGVyIGZyZWUKK3Byb2dyYW1zIHdob3NlIGRpc3RyaWJ1dGlvbiBjb25kaXRpb25zIGFyZSBpbmNvbXBhdGlibGUgd2l0aCB0aGVzZSwKK3dyaXRlIHRvIHRoZSBhdXRob3IgdG8gYXNrIGZvciBwZXJtaXNzaW9uLiAgRm9yIHNvZnR3YXJlIHdoaWNoIGlzCitjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZQorU29mdHdhcmUgRm91bmRhdGlvbjsgd2Ugc29tZXRpbWVzIG1ha2UgZXhjZXB0aW9ucyBmb3IgdGhpcy4gIE91cgorZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscyBvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cworb2YgYWxsIGRlcml2YXRpdmVzIG9mIG91ciBmcmVlIHNvZnR3YXJlIGFuZCBvZiBwcm9tb3RpbmcgdGhlIHNoYXJpbmcKK2FuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisKKwkJCSAgICBOTyBXQVJSQU5UWQorCisgIDE1LiBCRUNBVVNFIFRIRSBMSUJSQVJZIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTworV0FSUkFOVFkgRk9SIFRIRSBMSUJSQVJZLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4KK0VYQ0VQVCBXSEVOIE9USEVSV0lTRSBTVEFURUQgSU4gV1JJVElORyBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EL09SCitPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIExJQlJBUlkgIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWQorS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRQorTElCUkFSWSBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgTElCUkFSWSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUKK1RIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICAxNi4gSU4gTk8gRVZFTlQgVU5MRVNTIFJFUVVJUkVEIEJZIEFQUExJQ0FCTEUgTEFXIE9SIEFHUkVFRCBUTyBJTgorV1JJVElORyBXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkKK0FORC9PUiBSRURJU1RSSUJVVEUgVEhFIExJQlJBUlkgQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VCitGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRQorTElCUkFSWSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORworUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFlPVSBPUiBUSElSRCBQQVJUSUVTIE9SIEEKK0ZBSUxVUkUgT0YgVEhFIExJQlJBUlkgVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBTT0ZUV0FSRSksIEVWRU4gSUYKK1NVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKK0RBTUFHRVMuCisKKwkJICAgICBFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKKwwKKyAgICAgICAgICAgSG93IHRvIEFwcGx5IFRoZXNlIFRlcm1zIHRvIFlvdXIgTmV3IExpYnJhcmllcworCisgIElmIHlvdSBkZXZlbG9wIGEgbmV3IGxpYnJhcnksIGFuZCB5b3Ugd2FudCBpdCB0byBiZSBvZiB0aGUgZ3JlYXRlc3QKK3Bvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB3ZSByZWNvbW1lbmQgbWFraW5nIGl0IGZyZWUgc29mdHdhcmUgdGhhdAorZXZlcnlvbmUgY2FuIHJlZGlzdHJpYnV0ZSBhbmQgY2hhbmdlLiAgWW91IGNhbiBkbyBzbyBieSBwZXJtaXR0aW5nCityZWRpc3RyaWJ1dGlvbiB1bmRlciB0aGVzZSB0ZXJtcyAob3IsIGFsdGVybmF0aXZlbHksIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKK29yZGluYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UpLgorCisgIFRvIGFwcGx5IHRoZXNlIHRlcm1zLCBhdHRhY2ggdGhlIGZvbGxvd2luZyBub3RpY2VzIHRvIHRoZSBsaWJyYXJ5LiAgSXQgaXMKK3NhZmVzdCB0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5Citjb252ZXkgdGhlIGV4Y2x1c2lvbiBvZiB3YXJyYW50eTsgYW5kIGVhY2ggZmlsZSBzaG91bGQgaGF2ZSBhdCBsZWFzdCB0aGUKKyJjb3B5cmlnaHQiIGxpbmUgYW5kIGEgcG9pbnRlciB0byB3aGVyZSB0aGUgZnVsbCBub3RpY2UgaXMgZm91bmQuCisKKyAgICA8b25lIGxpbmUgdG8gZ2l2ZSB0aGUgbGlicmFyeSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuPgorICAgIENvcHlyaWdodCAoQykgPHllYXI+ICA8bmFtZSBvZiBhdXRob3I+CisKKyAgICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgICAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICAgIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICAgIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisKKyAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKKworQWxzbyBhZGQgaW5mb3JtYXRpb24gb24gaG93IHRvIGNvbnRhY3QgeW91IGJ5IGVsZWN0cm9uaWMgYW5kIHBhcGVyIG1haWwuCisKK1lvdSBzaG91bGQgYWxzbyBnZXQgeW91ciBlbXBsb3llciAoaWYgeW91IHdvcmsgYXMgYSBwcm9ncmFtbWVyKSBvciB5b3VyCitzY2hvb2wsIGlmIGFueSwgdG8gc2lnbiBhICJjb3B5cmlnaHQgZGlzY2xhaW1lciIgZm9yIHRoZSBsaWJyYXJ5LCBpZgorbmVjZXNzYXJ5LiAgSGVyZSBpcyBhIHNhbXBsZTsgYWx0ZXIgdGhlIG5hbWVzOgorCisgIFlveW9keW5lLCBJbmMuLCBoZXJlYnkgZGlzY2xhaW1zIGFsbCBjb3B5cmlnaHQgaW50ZXJlc3QgaW4gdGhlCisgIGxpYnJhcnkgYEZyb2InIChhIGxpYnJhcnkgZm9yIHR3ZWFraW5nIGtub2JzKSB3cml0dGVuIGJ5IEphbWVzIFJhbmRvbSBIYWNrZXIuCisKKyAgPHNpZ25hdHVyZSBvZiBUeSBDb29uPiwgMSBBcHJpbCAxOTkwCisgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCisKK1RoYXQncyBhbGwgdGhlcmUgaXMgdG8gaXQhCisKKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvcmFkZW9uLXVjb2RlIGIvbGljZW5zZXMvcmFkZW9uLXVjb2RlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwMjkzNzkKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9yYWRlb24tdWNvZGUKQEAgLTAsMCArMSw1MSBAQAorQ29weXJpZ2h0IChDKSAyMDA5LTIwMTIgIEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUkVESVNUUklCVVRJT046IFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgYW55IGxpY2Vuc2UgZmVlcywKK3RvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weSBvZiB0aGlzIG1pY3JvY29kZSAodGhlICJTb2Z0d2FyZSIpLCB0bworaW5zdGFsbCwgcmVwcm9kdWNlLCBjb3B5IGFuZCBkaXN0cmlidXRlIGNvcGllcywgaW4gYmluYXJ5IGZvcm0gb25seSwgb2YKK3RoZSBTb2Z0d2FyZSBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUgU29mdHdhcmUgaXMgcHJvdmlkZWQgdG8KK2RvIHRoZSBzYW1lLCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCitObyByZXZlcnNlIGVuZ2luZWVyaW5nLCBkZWNvbXBpbGF0aW9uLCBvciBkaXNhc3NlbWJseSBvZiB0aGlzIFNvZnR3YXJlCitpcyBwZXJtaXR0ZWQuCisKK1JlZGlzdHJpYnV0aW9ucyBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcworcGVybWlzc2lvbiBub3RpY2UsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXJzIGFuZCBub3RpY2VzIGluIHRoZQorU29mdHdhcmUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCitTb2Z0d2FyZS4KKworRElTQ0xBSU1FUjogVEhFIFVTRSBPRiBUSEUgU09GVFdBUkUgSVMgQVQgWU9VUiBTT0xFIFJJU0suICBUSEUgU09GVFdBUkUKK0lTIFBST1ZJREVEICJBUyBJUyIgQU5EIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQgQU5EIENPUFlSSUdIVAorSE9MREVSIEFORCBJVFMgTElDRU5TT1JTIEVYUFJFU1NMWSBESVNDTEFJTSBBTEwgV0FSUkFOVElFUywgRVhQUkVTUyBBTkQKK0lNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT04tSU5GUklOR0VNRU5ULgorQ09QWVJJR0hUIEhPTERFUiBBTkQgSVRTIExJQ0VOU09SUyBETyBOT1QgV0FSUkFOVCBUSEFUIFRIRSBTT0ZUV0FSRSBXSUxMCitNRUVUIFlPVVIgUkVRVUlSRU1FTlRTLCBPUiBUSEFUIFRIRSBPUEVSQVRJT04gT0YgVEhFIFNPRlRXQVJFIFdJTEwgQkUKK1VOSU5URVJSVVBURUQgT1IgRVJST1ItRlJFRS4gIFRIRSBFTlRJUkUgUklTSyBBU1NPQ0lBVEVEIFdJVEggVEhFIFVTRSBPRgorVEhFIFNPRlRXQVJFIElTIEFTU1VNRUQgQlkgWU9VLiAgRlVSVEhFUk1PUkUsIENPUFlSSUdIVCBIT0xERVIgQU5EIElUUworTElDRU5TT1JTIERPIE5PVCBXQVJSQU5UIE9SIE1BS0UgQU5ZIFJFUFJFU0VOVEFUSU9OUyBSRUdBUkRJTkcgVEhFIFVTRQorT1IgVEhFIFJFU1VMVFMgT0YgVEhFIFVTRSBPRiBUSEUgU09GVFdBUkUgSU4gVEVSTVMgT0YgSVRTIENPUlJFQ1RORVNTLAorQUNDVVJBQ1ksIFJFTElBQklMSVRZLCBDVVJSRU5UTkVTUywgT1IgT1RIRVJXSVNFLgorCitESVNDTEFJTUVSOiBVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIElOQ0xVRElORyBORUdMSUdFTkNFLCBTSEFMTCBDT1BZUklHSFQKK0hPTERFUiBBTkQgSVRTIExJQ0VOU09SUyBPUiBJVFMgRElSRUNUT1JTLCBPRkZJQ0VSUywgRU1QTE9ZRUVTIE9SIEFHRU5UUworKCJBVVRIT1JJWkVEIFJFUFJFU0VOVEFUSVZFUyIpIEJFIExJQUJMRSBGT1IgQU5ZIElOQ0lERU5UQUwsIElORElSRUNULAorU1BFQ0lBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORyBEQU1BR0VTIEZPUiBMT1NTIE9GIEJVU0lORVNTCitQUk9GSVRTLCBCVVNJTkVTUyBJTlRFUlJVUFRJT04sIExPU1MgT0YgQlVTSU5FU1MgSU5GT1JNQVRJT04sIEFORCBUSEUKK0xJS0UpIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UsIE1JU1VTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBTT0ZUV0FSRSwKK0JSRUFDSCBPUiBERUZBVUxULCBJTkNMVURJTkcgVEhPU0UgQVJJU0lORyBGUk9NIElORlJJTkdFTUVOVCBPUiBBTExFR0VECitJTkZSSU5HRU1FTlQgT0YgQU5ZIFBBVEVOVCwgVFJBREVNQVJLLCBDT1BZUklHSFQgT1IgT1RIRVIgSU5URUxMRUNUVUFMCitQUk9QRVJUWSBSSUdIVCBFVkVOIElGIENPUFlSSUdIVCBIT0xERVIgQU5EIElUUyBBVVRIT1JJWkVECitSRVBSRVNFTlRBVElWRVMgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiAgSU4KK05PIEVWRU5UIFNIQUxMIENPUFlSSUdIVCBIT0xERVIgT1IgSVRTIEFVVEhPUklaRUQgUkVQUkVTRU5UQVRJVkVTIFRPVEFMCitMSUFCSUxJVFkgRk9SIEFMTCBEQU1BR0VTLCBMT1NTRVMsIEFORCBDQVVTRVMgT0YgQUNUSU9OIChXSEVUSEVSIElOCitDT05UUkFDVCwgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpIE9SIE9USEVSV0lTRSkgRVhDRUVEIFRIRSBBTU9VTlQgT0YKK1VTJDEwLgorCitOb3RpY2U6ICBUaGUgU29mdHdhcmUgaXMgc3ViamVjdCB0byBVbml0ZWQgU3RhdGVzIGV4cG9ydCBsYXdzIGFuZAorcmVndWxhdGlvbnMuICBZb3UgYWdyZWUgdG8gY29tcGx5IHdpdGggYWxsIGRvbWVzdGljIGFuZCBpbnRlcm5hdGlvbmFsCitleHBvcnQgbGF3cyBhbmQgcmVndWxhdGlvbnMgdGhhdCBhcHBseSB0byB0aGUgU29mdHdhcmUsIGluY2x1ZGluZyBidXQKK25vdCBsaW1pdGVkIHRvIHRoZSBFeHBvcnQgQWRtaW5pc3RyYXRpb24gUmVndWxhdGlvbnMgYWRtaW5pc3RlcmVkIGJ5IHRoZQorVS5TLiBEZXBhcnRtZW50IG9mIENvbW1lcmNlIGFuZCBJbnRlcm5hdGlvbmFsIFRyYWZmaWMgaW4gQXJtIFJlZ3VsYXRpb25zCithZG1pbmlzdGVyZWQgYnkgdGhlIFUuUy4gRGVwYXJ0bWVudCBvZiBTdGF0ZS4gIFRoZXNlIGxhd3MgaW5jbHVkZQorcmVzdHJpY3Rpb25zIG9uIGRlc3RpbmF0aW9ucywgZW5kIHVzZXJzIGFuZCBlbmQgdXNlLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvcmFsaW5rLWZpcm13YXJlIGIvbGljZW5zZXMvcmFsaW5rLWZpcm13YXJlCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5YjI3ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9yYWxpbmstZmlybXdhcmUKQEAgLTAsMCArMSwzOSBAQAorQ29weXJpZ2h0IChjKSAyMDA3LCBSYWxpbmsgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24uICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIGJpbmFyeSBmb3JtLCB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCittZXQ6CisKKyogUmVkaXN0cmlidXRpb25zIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUKKyAgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscworICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqIE5laXRoZXIgdGhlIG5hbWUgb2YgUmFsaW5rIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAgc3VwcGxpZXJzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyogTm8gcmV2ZXJzZSBlbmdpbmVlcmluZywgZGVjb21waWxhdGlvbiwgb3IgZGlzYXNzZW1ibHkgb2YgdGhpcyBzb2Z0d2FyZQorICBpcyBwZXJtaXR0ZWQuCisKK0xpbWl0ZWQgcGF0ZW50IGxpY2Vuc2UuIFJhbGluayBUZWNobm9sb2d5IENvcnBvcmF0aW9uIGdyYW50cyBhIHdvcmxkLXdpZGUsCityb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSB1bmRlciBwYXRlbnRzIGl0IG5vdyBvciBoZXJlYWZ0ZXIKK293bnMgb3IgY29udHJvbHMgdG8gbWFrZSwgaGF2ZSBtYWRlLCB1c2UsIGltcG9ydCwgb2ZmZXIgdG8gc2VsbCBhbmQKK3NlbGwgKCJVdGlsaXplIikgdGhpcyBzb2Z0d2FyZSwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55CitzdWNoIHBhdGVudCBpcyBuZWNlc3NhcnkgdG8gVXRpbGl6ZSB0aGUgc29mdHdhcmUgYWxvbmUsIG9yIGluCitjb21iaW5hdGlvbiB3aXRoIGFuIG9wZXJhdGluZyBzeXN0ZW0gbGljZW5zZWQgdW5kZXIgYW4gYXBwcm92ZWQgT3BlbgorU291cmNlIGxpY2Vuc2UgYXMgbGlzdGVkIGJ5IHRoZSBPcGVuIFNvdXJjZSBJbml0aWF0aXZlIGF0CitodHRwOi8vb3BlbnNvdXJjZS5vcmcvbGljZW5zZXMuICBUaGUgcGF0ZW50IGxpY2Vuc2Ugc2hhbGwgbm90IGFwcGx5IHRvCithbnkgb3RoZXIgY29tYmluYXRpb25zIHdoaWNoIGluY2x1ZGUgdGhpcyBzb2Z0d2FyZS4gIE5vIGhhcmR3YXJlIHBlcgorc2UgaXMgbGljZW5zZWQgaGVyZXVuZGVyLgorCitESVNDTEFJTUVSLiAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5ECitDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsCitCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORAorRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKK0JVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SCitUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFCitVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNICitEQU1BR0UuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9yYyBiL2xpY2Vuc2VzL3JjCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZTA1ODgKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9yYwpAQCAtMCwwICsxLDI2IEBACisvKgorICogQ29weXJpZ2h0IDE5OTEsIDIwMDEsIDIwMDIgYnkgQnlyb24gUmFraXR6aXMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgbm90IHN1YmplY3QgdG8gYW55IGxpY2Vuc2Ugb2YgdGhlIEFtZXJpY2FuIFRlbGVwaG9uZQorICogYW5kIFRlbGVncmFwaCBDb21wYW55IG9yIG9mIHRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKgorICogUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGFueW9uZSB0byB1c2UgdGhpcyBzb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2Ugb24KKyAqIGFueSBjb21wdXRlciBzeXN0ZW0sIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0IGZyZWVseSwgc3ViamVjdAorICogdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisgKgorICogMS4gVGhlIGF1dGhvciBpcyBub3QgcmVzcG9uc2libGUgZm9yIHRoZSBjb25zZXF1ZW5jZXMgb2YgdXNlIG9mIHRoaXMKKyAqICAgIHNvZnR3YXJlLCBubyBtYXR0ZXIgaG93IGF3ZnVsLCBldmVuIGlmIHRoZXkgYXJpc2UgZnJvbSBmbGF3cyBpbiBpdC4KKyAqCisgKiAyLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQsIGVpdGhlciBieQorICogICAgZXhwbGljaXQgY2xhaW0gb3IgYnkgb21pc3Npb24uICBTaW5jZSBmZXcgdXNlcnMgZXZlciByZWFkIHNvdXJjZXMsCisgKiAgICBjcmVkaXRzIG11c3QgYXBwZWFyIGluIHRoZSBkb2N1bWVudGF0aW9uLgorICoKKyAqIDMuIEFsdGVyZWQgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmUKKyAqICAgIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gIFNpbmNlIGZldyB1c2VycworICogICAgZXZlciByZWFkIHNvdXJjZXMsIGNyZWRpdHMgbXVzdCBhcHBlYXIgaW4gdGhlIGRvY3VtZW50YXRpb24uCisgKgorICogNC4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQuCisgKgorICogICAgW3RoaXMgY29weXJpZ2h0IG5vdGljZSBpcyBhZGFwdGVkIGZyb20gSGVucnkgU3BlbmNlcidzCisgKiAgICAiYXdmIiBjb3B5cmlnaHQgbm90aWNlLl0KKyAqLwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvcmVnZXhwLVVvZlQgYi9saWNlbnNlcy9yZWdleHAtVW9mVApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZjY4NWUwCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvcmVnZXhwLVVvZlQKQEAgLTAsMCArMSwxNiBAQAorQ29weXJpZ2h0IChjKSAxOTg2IGJ5IFVuaXZlcnNpdHkgb2YgVG9yb250by4KK1dyaXR0ZW4gYnkgSGVucnkgU3BlbmNlci4gIE5vdCBkZXJpdmVkIGZyb20gbGljZW5zZWQgc29mdHdhcmUuCisKK1Blcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorcHVycG9zZSBvbiBhbnkgY29tcHV0ZXIgc3lzdGVtLCBhbmQgdG8gcmVkaXN0cmlidXRlIGl0IGZyZWVseSwKK3N1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKKzEuIFRoZSBhdXRob3IgaXMgbm90IHJlc3BvbnNpYmxlIGZvciB0aGUgY29uc2VxdWVuY2VzIG9mIHVzZSBvZgorCXRoaXMgc29mdHdhcmUsIG5vIG1hdHRlciBob3cgYXdmdWwsIGV2ZW4gaWYgdGhleSBhcmlzZQorCWZyb20gZGVmZWN0cyBpbiBpdC4KKworMi4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvZnR3YXJlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkLCBlaXRoZXIKKwlieSBleHBsaWNpdCBjbGFpbSBvciBieSBvbWlzc2lvbi4KKworMy4gQWx0ZXJlZCB2ZXJzaW9ucyBtdXN0IGJlIHBsYWlubHkgbWFya2VkIGFzIHN1Y2gsIGFuZCBtdXN0IG5vdAorCWJlIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL3JlcG96ZSBiL2xpY2Vuc2VzL3JlcG96ZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDkyMzJhCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvcmVwb3plCkBAIC0wLDAgKzEsNDIgQEAKK0xpY2Vuc2UKKworICBMaWNlbnNlCisKKyAgICBBIGNvcHlyaWdodCBub3RpY2UgYWNjb21wYW5pZXMgdGhpcyBsaWNlbnNlIGRvY3VtZW50IHRoYXQgaWRlbnRpZmllcworICAgIHRoZSBjb3B5cmlnaHQgaG9sZGVycy4KKworICAgIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUKKyAgICBtZXQ6CisKKyAgICAxLiAgUmVkaXN0cmlidXRpb25zIGluIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhY2NvbXBhbnlpbmcKKwljb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcKKwlkaXNjbGFpbWVyLgorCisgICAgMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWNjb21wYW55aW5nCisJY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nCisJZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisJd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorCisgICAgMy4gIE5hbWVzIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBtdXN0IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IKKwlwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3IKKwl3cml0dGVuIHBlcm1pc3Npb24gZnJvbSB0aGUgY29weXJpZ2h0IGhvbGRlcnMuCisKKyAgICA0LiAgSWYgYW55IGZpbGVzIGFyZSBtb2RpZmllZCwgeW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvCisJY2FycnkgcHJvbWluZW50IG5vdGljZXMgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQKKwl0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorCisgICAgRGlzY2xhaW1lcgorCisgICAgICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5ECisgICAgICBBTlkgRVhQUkVTU0VEIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAgICAgIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQorICAgICAgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCisgICAgICBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgICAgICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAgICAgIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAgICAgIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OCisgICAgICBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IKKyAgICAgIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRgorICAgICAgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgICAgICBTVUNIIERBTUFHRS4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL3JpY2hhcmRzb24gYi9saWNlbnNlcy9yaWNoYXJkc29uCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwZjZkMWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9yaWNoYXJkc29uCkBAIC0wLDAgKzEsNiBAQAorTk9USUNFOiBUaGlzIGlzIGZyZWUgc29mdHdhcmUgYW5kIHRoZSBzb3VyY2UgY29kZSBpcyBmcmVlbHkKK2F2YWlsYWJsZS4gWW91IGFyZSBmcmVlIHRvIHJlZGlzdHJpYnV0ZSBvciBtb2RpZnkgdW5kZXIgdGhlCitjb25kaXRpb25zIHRoYXQgKDEpIHRoaXMgbm90aWNlIGlzIG5vdCByZW1vdmVkIG9yIG1vZGlmaWVkCitpbiBhbnkgd2F5IGFuZCAoMikgYW55IG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoZSBwcm9ncmFtIGFyZQorYWxzbyBhdmFpbGFibGUgZm9yIGZyZWUuCisgICAgICAgICAgICAgICoqIEFic29sdXRlbHkgbm8gV2FycmFudHkgKioKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL3Jpbmd0b25ldG9vbHMgYi9saWNlbnNlcy9yaW5ndG9uZXRvb2xzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjODk3MTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9yaW5ndG9uZXRvb2xzCkBAIC0wLDAgKzEsMzAgQEAKKworCitMSUNFTlNFIGZvciBSaW5ndG9uZXRvb2xzCisKK1lvdSBtYXkgTk9UIHVzZSB0aGlzIGluIGFueSBraW5kIG9mIGNvbW1lcmNpYWwgZW52aXJvbm1lbnQKK3dpdGhvdXQgcGVybWlzc2lvbiBvZiB0aGUgYXV0aG9yIChNaWNoYWVsIEtvaG4pLgorCitZb3UgbWF5IE5PVCB1c2UgYW55IHBhcnQgb2YgdGhlIGNvZGUgZm9yIGFub3RoZXIgcHJvamVjdAorZWl0aGVyIGNvbW1lcmljYWwgb3Igb3BlbiB3aXRob3V0IHBlcm1pc3Npb24gb2YgdGhlCithdXRob3IuCisKK1lvdSBhcmUgZnJlZSB0byBkaXN0cmlidXRlIHRoaXMgcHJvZ3JhbSB1bm1vZGlmaWVkIHdpdGgKK2FueSBjb21waWxhdGlvbiBjZCBvciBvcGVyYXRpbmcgc3lzdGVtIGRpc3RyaWJ1dGlvbgorKHRoaXMgaW5jbHVkZXMgdGhlIExpbnV4IG9wZXJhdGluZyBzeXN0ZW1zLCBGcmVlQlNELAorU29sYXJpcywgb3Igd2hvZXZlciB3YW50cyB0byBkaXN0cmlidXRlIGl0KS4gIFlvdSBtYXkKK2Fsc28gZGlzdHJpYnV0ZSB0aGlzIG9uIHlvdXIgb3duIHdlYnNpdGUuCisKK1JlYWxseSB0aGUgcmVhc29uIGZvciB0aGlzIGxpY2Vuc2UgaXMgSSBkb24ndCB0aGluayBpdCdzCitmYWlyIGZvciBzb21lb25lIHRvIG1ha2UgYSB0cnVjayBsb2FkIG9mIG1vbmV5IG9mZiB0aGlzCitwcm9ncmFtIHdpdGhvdXQgY29tcGVuc2F0aW5nIG1lIHdpdGggYXQgbGVhc3QgYSBzbWFsbCBkb25hdGlvbgorZm9yIHRoZSBob3VycyBJIHB1dCBpbnRvIHRoaXMgcHJvZ3JhbS4gIEJlIG5pY2UgYW5kIGlmIHlvdQord2FudCB0byBtYWtlIG1vbmV5IG9uIHRoaXMganVzdCBtYWtlIGEgc21hbGwgZG9uYXRpb24gdG8gbWUuCisKKzopCisKK0ZvciB0aGUgcmVzdCBvZiB5b3UuLiBGUkVFIFJJTkdUT05FUyBGT1IgQUxMIQorCisKKworCmRpZmYgLS1naXQgYS9saWNlbnNlcy9yb3NldHRhIGIvbGljZW5zZXMvcm9zZXR0YQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGJiZGRmCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvcm9zZXR0YQpAQCAtMCwwICsxLDMwIEBACitSb3NldHRhOiBBY2FkZW1pYyBMaWNlbnNlCitMaWNlbnNlIHRleHQKKworUm9zZXR0YSBTb2Z0d2FyZQorQWNhZGVtaWMgTGljZW5zZSBBZ3JlZW1lbnQKKworVGhlIFJvc2V0dGEgc29mdHdhcmUgKCJTb2Z0d2FyZSIpIGhhcyBiZWVuIGRldmVsb3BlZCBieSB0aGUgY29udHJpYnV0aW5nIHJlc2VhcmNoZXJzIGFuZCBpbnN0aXR1dGlvbnMgb2YgdGhlIFJvc2V0dGEgQ29tbW9ucyAoIkRldmVsb3BlcnMiKSBhbmQgbWFkZSBhdmFpbGFibGUgdGhyb3VnaCB0aGUgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uICgiVVciKSBmb3IgeW91ciBpbnRlcm5hbCwgbm9uLXByb2ZpdCByZXNlYXJjaCB1c2UuIAorCitUaGUgUm9zZXR0YSBDb21tb25zIGN1cnJlbnRseSBjb25zaXN0cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uLCBVbml2ZXJzaXR5IG9mIE5vcnRoIENhcm9saW5hIGF0IENoYXBlbCBIaWxsLCBKb2hucyBIb3BraW5zIFVuaXZlcnNpdHksIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSBTYW50YSBDcnV6LCBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEgU2FuIEZyYW5jaXNjbywgTmV3IFlvcmsgVW5pdmVyc2l0eSwgRnJlZCBIdXRjaGluc29uIENhbmNlciBSZXNlYXJjaCBDZW50ZXIsIFZhbmRlcmJpbHQgVW5pdmVyc2l0eSwgUm9zZXR0YSBEZXNpZ24gR3JvdXAgTExDLCBIZWJyZXcgVW5pdmVyc2l0eSwgTG9zIEFsYW1vcyBOYXRpb25hbCBMYWIsIElJTUNCLCBTdGFuZm9yZCBVbml2ZXJzaXR5LCBVbml2ZXJzaXR5IG9mIEthbnNhcywgRVRIIFp1cmljaCBhbmQgV2FzaGluZ3RvbiBVbml2ZXJzaXR5LCBTdC4gTG91aXMuIEZvciBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBSb3NldHRhIENvbW1vbnMsIHBsZWFzZSBzZWUgd3d3LnJvc2V0dGFjb21tb25zLm9yZy4KKworVGhlIFNvZnR3YXJlIHdhcyBkZXZlbG9wZWQgdGhyb3VnaCBzdXBwb3J0IG9mIGEgdmFyaWV0eSBvZiBmdW5kaW5nIHNvdXJjZXMsIGluY2x1ZGluZyB0aGUgTmF0aW9uYWwgSW5zdGl0dXRlcyBvZiBIZWFsdGgsIEh1bWFuIEZyb250aWVyIFNjaWVuY2UgUHJvZ3JhbSBHcmFudCwgTmF0aW9uYWwgU2NpZW5jZSBGb3VuZGF0aW9uLCBPZmZpY2Ugb2YgTmF2YWwgUmVzZWFyY2gsIFBhY2thcmQgRm91bmRhdGlvbiwgdGhlIERhbW9uIFJ1bnlvbiBDYW5jZXIgUmVzZWFyY2ggRm91bmRhdGlvbiwgSmFuZSBDb2ZmaW4gQ2hpbGRzIEZvdW5kYXRpb24sIExvcyBBbGFtb3MgTmF0aW9uYWwgTGFiLCBhbmQgdGhlIEhvd2FyZCBIdWdoZXMgTWVkaWNhbCBJbnN0aXR1dGUgKEhITUkpLiAKKworVVcgYW5kIHRoZSBEZXZlbG9wZXJzIGFsbG93IHJlc2VhcmNoZXJzIGF0IHlvdXIgSW5zdGl0dXRpb24gdG8gcnVuLCBkaXNwbGF5LCBjb3B5IGFuZCBtb2RpZnkgU29mdHdhcmUgb24gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorCisxLiBUaGUgU29mdHdhcmUgcmVtYWlucyBhdCB5b3VyIEluc3RpdHV0aW9uIGFuZCBpcyBub3QgcHVibGlzaGVkLCBkaXN0cmlidXRlZCwgb3Igb3RoZXJ3aXNlIHRyYW5zZmVycmVkIG9yIG1hZGUgYXZhaWxhYmxlIHRvIG90aGVyIHRoYW4gSW5zdGl0dXRpb24gZW1wbG95ZWVzIGFuZCBzdHVkZW50cyBpbnZvbHZlZCBpbiByZXNlYXJjaCB1bmRlciB5b3VyIHN1cGVydmlzaW9uLiAKKworMi4gWW91IGFncmVlIHRvIG1ha2UgcmVzdWx0cyBnZW5lcmF0ZWQgdXNpbmcgU29mdHdhcmUgYXZhaWxhYmxlIHRvIG90aGVyIGFjYWRlbWljIHJlc2VhcmNoZXJzIGZvciBub24tcHJvZml0IHJlc2VhcmNoIHB1cnBvc2VzLiBJZiBZb3Ugd2lzaCB0byBvYnRhaW4gU29mdHdhcmUgZm9yIGFueSBjb21tZXJjaWFsIHB1cnBvc2VzLCBpbmNsdWRpbmcgZmVlLWJhc2VkIHNlcnZpY2UgcHJvamVjdHMsIFlvdSB3aWxsIG5lZWQgdG8gZXhlY3V0ZSBhIHNlcGFyYXRlIGxpY2Vuc2luZyBhZ3JlZW1lbnQgd2l0aCB0aGUgVW5pdmVyc2l0eSBvZiBXYXNoaW5ndG9uIGFuZCBwYXkgYSBmZWUuIEluIHRoYXQgY2FzZSBwbGVhc2UgY29udGFjdDogbGljZW5zZUB1Lndhc2hpbmd0b24uZWR1CisKKzMuIFlvdSByZXRhaW4gaW4gU29mdHdhcmUgYW5kIGFueSBtb2RpZmljYXRpb25zIHRvIFNvZnR3YXJlLCB0aGUgY29weXJpZ2h0LCB0cmFkZW1hcmssIG9yIG90aGVyIG5vdGljZXMgcGVydGFpbmluZyB0byBTb2Z0d2FyZSBhcyBwcm92aWRlZCBieSBVVyBhbmQgRGV2ZWxvcGVycy4KKworNC4gWW91IHByb3ZpZGUgdGhlIERldmVsb3BlcnMgd2l0aCBmZWVkYmFjayBvbiB0aGUgdXNlIG9mIHRoZSBTb2Z0d2FyZSBpbiB5b3VyIHJlc2VhcmNoLCBhbmQgdGhhdCB0aGUgRGV2ZWxvcGVycyBhbmQgVVcgYXJlIHBlcm1pdHRlZCB0byB1c2UgYW55IGluZm9ybWF0aW9uIFlvdSBwcm92aWRlIGluIG1ha2luZyBjaGFuZ2VzIHRvIHRoZSBTb2Z0d2FyZS4gQWxsIGJ1ZyByZXBvcnRzIGFuZCB0ZWNobmljYWwgcXVlc3Rpb25zIHNoYWxsIGJlIHNlbnQgdG8gdGhlIGVtYWlsIGFkZHJlc3M6IGdlbmVyYWwtc3VwcG9ydEByb3NldHRhY29tbW9ucy5vcmcKKworNS4gWW91IGFja25vd2xlZGdlIHRoYXQgdGhlIERldmVsb3BlcnMsIFVXIGFuZCBpdHMgbGljZW5zZWVzIG1heSBkZXZlbG9wIG1vZGlmaWNhdGlvbnMgdG8gU29mdHdhcmUgdGhhdCBtYXkgYmUgc3Vic3RhbnRpYWxseSBzaW1pbGFyIHRvIHlvdXIgbW9kaWZpY2F0aW9ucyBvZiBTb2Z0d2FyZSwgYW5kIHRoYXQgdGhlIERldmVsb3BlcnMsIFVXIGFuZCBpdHMgbGljZW5zZWVzIHNoYWxsIG5vdCBiZSBjb25zdHJhaW5lZCBpbiBhbnkgd2F5IGJ5IFlvdSBpbiBEZXZlbG9wZXLigJlzLCBVV+KAmXMgb3IgaXRzIGxpY2Vuc2Vlc+KAmSB1c2Ugb3IgbWFuYWdlbWVudCBvZiBzdWNoIG1vZGlmaWNhdGlvbnMuIFlvdSBhY2tub3dsZWRnZSB0aGUgcmlnaHQgb2YgdGhlIERldmVsb3BlcnMgYW5kIFVXIHRvIHByZXBhcmUgYW5kIHB1Ymxpc2ggbW9kaWZpY2F0aW9ucyB0byBTb2Z0d2FyZSB0aGF0IG1heSBiZSBzdWJzdGFudGlhbGx5IHNpbWlsYXIgb3IgZnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8geW91ciBtb2RpZmljYXRpb25zIGFuZCBpbXByb3ZlbWVudHMsIGFuZCBpZiBZb3Ugb2J0YWluIHBhdGVudCBwcm90ZWN0aW9uIGZvciBhbnkgbW9kaWZpY2F0aW9uIG9yIGltcHJvdmVtZW50IHRvIFNvZnR3YXJlIFlvdSBhZ3JlZSBub3QgdG8gYWxsZWdlIG9yIGVuam9pbiBpbmZyaW5nZW1lbnQgb2YgeW91ciBwYXRlbnQgYnkgdGhlIERldmVsb3BlcnMsIFVXIG9yIGJ5IGFueSBvZiBVV+KAmXMgbGljZW5zZWVzIG9idGFpbmluZyBtb2RpZmljYXRpb25zIG9yIGltcHJvdmVtZW50cyB0byBTb2Z0d2FyZSBmcm9tIHRoZSBVVyBvciB0aGUgRGV2ZWxvcGVycy4KKworNi4gWW91IGFncmVlIHRvIGFja25vd2xlZGdlIHRoZSBjb250cmlidXRpb24gRGV2ZWxvcGVycyBhbmQgU29mdHdhcmUgbWFrZSB0byB5b3VyIHJlc2VhcmNoLCBhbmQgY2l0ZSBhcHByb3ByaWF0ZSByZWZlcmVuY2VzIGFib3V0IHRoZSBTb2Z0d2FyZSBpbiB5b3VyIHB1YmxpY2F0aW9ucy4gCisKKzcuIEFueSByaXNrIGFzc29jaWF0ZWQgd2l0aCB1c2luZyB0aGUgU29mdHdhcmUgYXQgeW91ciBpbnN0aXR1dGlvbiBpcyB3aXRoIFlvdSBhbmQgeW91ciBJbnN0aXR1dGlvbi4gU29mdHdhcmUgaXMgZXhwZXJpbWVudGFsIGluIG5hdHVyZSBhbmQgaXMgbWFkZSBhdmFpbGFibGUgYXMgYSByZXNlYXJjaCBjb3VydGVzeSAiQVMgSVMsIiB3aXRob3V0IG9ibGlnYXRpb24gYnkgVVcgdG8gcHJvdmlkZSBhY2NvbXBhbnlpbmcgc2VydmljZXMgb3Igc3VwcG9ydC4gCisKKzguIFVXIEFORCBUSEUgREVWRUxPUEVSUyBFWFBSRVNTTFkgRElTQ0xBSU0gQU5ZIEFORCBBTEwgV0FSUkFOVElFUyBSRUdBUkRJTkcgVEhFIFNPRlRXQVJFLCBXSEVUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBXQVJSQU5USUVTIFBFUlRBSU5JTkcgVE8gTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCmRpZmYgLS1naXQgYS9saWNlbnNlcy9zYXhwYXRoIGIvbGljZW5zZXMvc2F4cGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNmZhZTQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvc2F4cGF0aApAQCAtMCwwICsxLDU2IEBACisvKi0tIAorCisgJElkOiBzYXhwYXRoLHYgMS4xIDIwMDQvMDkvMTcgMTM6NTg6NDUgYXh4byBFeHAgJAorCisgQ29weXJpZ2h0IChDKSAyMDAwLTIwMDIgd2Vya2VuIGRpZ2l0YWwuCisgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAKKyBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyBhcmUgbWV0OgorIAorIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucywgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAKKyAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZGlzY2xhaW1lciB0aGF0IGZvbGxvd3MgCisgICAgdGhlc2UgY29uZGl0aW9ucyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIAorICAgIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworIDMuIFRoZSBuYW1lICJTQVhQYXRoIiBtdXN0IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAgRm9yCisgICAgd3JpdHRlbiBwZXJtaXNzaW9uLCBwbGVhc2UgY29udGFjdCBsaWNlbnNlQHNheHBhdGgub3JnLgorIAorIDQuIFByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIG1heSBub3QgYmUgY2FsbGVkICJTQVhQYXRoIiwgbm9yCisgICAgbWF5ICJTQVhQYXRoIiBhcHBlYXIgaW4gdGhlaXIgbmFtZSwgd2l0aG91dCBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24KKyAgICBmcm9tIHRoZSBTQVhQYXRoIFByb2plY3QgTWFuYWdlbWVudCAocG1Ac2F4cGF0aC5vcmcpLgorIAorIEluIGFkZGl0aW9uLCB3ZSByZXF1ZXN0IChidXQgZG8gbm90IHJlcXVpcmUpIHRoYXQgeW91IGluY2x1ZGUgaW4gdGhlIAorIGVuZC11c2VyIGRvY3VtZW50YXRpb24gcHJvdmlkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24gYW5kL29yIGluIHRoZSAKKyBzb2Z0d2FyZSBpdHNlbGYgYW4gYWNrbm93bGVkZ2VtZW50IGVxdWl2YWxlbnQgdG8gdGhlIGZvbGxvd2luZzoKKyAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlCisgICAgICBTQVhQYXRoIFByb2plY3QgKGh0dHA6Ly93d3cuc2F4cGF0aC5vcmcvKS4iCisgQWx0ZXJuYXRpdmVseSwgdGhlIGFja25vd2xlZGdtZW50IG1heSBiZSBncmFwaGljYWwgdXNpbmcgdGhlIGxvZ29zIAorIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3LnNheHBhdGgub3JnLworCisgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAorIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFNBWFBhdGggQVVUSE9SUyBPUiBUSEUgUFJPSkVDVAorIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorIFNVQ0ggREFNQUdFLgorCisgVGhpcyBzb2Z0d2FyZSBjb25zaXN0cyBvZiB2b2x1bnRhcnkgY29udHJpYnV0aW9ucyBtYWRlIGJ5IG1hbnkgCisgaW5kaXZpZHVhbHMgb24gYmVoYWxmIG9mIHRoZSBTQVhQYXRoIFByb2plY3QgYW5kIHdhcyBvcmlnaW5hbGx5IAorIGNyZWF0ZWQgYnkgYm9iIG1jd2hpcnRlciA8Ym9iQHdlcmtlbi5jb20+IGFuZCAKKyBKYW1lcyBTdHJhY2hhbiA8anN0cmFjaGFuQGFwYWNoZS5vcmc+LiAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gdGhlIAorIFNBWFBhdGggUHJvamVjdCwgcGxlYXNlIHNlZSA8aHR0cDovL3d3dy5zYXhwYXRoLm9yZy8+LgorIAorICovCisKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL3NjaWxhYiBiL2xpY2Vuc2VzL3NjaWxhYgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjQzYzg2Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvc2NpbGFiCkBAIC0wLDAgKzEsMTU2IEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNDSUxBQiBMaWNlbnNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqKioqKioqKioqCisKKzEtIFByZWZhY2UKKyoqKioqKioqKioKKworVGhlIGFpbSBvZiB0aGlzIGxpY2Vuc2UgaXMgdG8gbGF5IGRvd24gdGhlIGNvbmRpdGlvbnMgZW5hYmxpbmcgeW91IHRvCit1c2UsIG1vZGlmeSBhbmQgY2lyY3VsYXRlIHRoZSBTT0ZUV0FSRS4gSG93ZXZlciwgSU5SSUEgYW5kIEVOUEMgcmVtYWluCit0aGUgYXV0aG9ycyBvZiB0aGUgU09GVFdBUkUgYW5kIHNvIHJldGFpbiBwcm9wZXJ0eSByaWdodHMgYW5kIHRoZSB1c2UKK29mIGFsbCBhbmNpbGxhcnkgcmlnaHRzLgorCisyLSBEZWZpbml0aW9ucworKioqKioqKioqKioqKioKKworVGhlIFNPRlRXQVJFIGlzIGRlZmluZWQgYXMgYWxsIHN1Y2Nlc3NpdmUgdmVyc2lvbnMgb2YgU0NJTEFCIHNvZnR3YXJlCithbmQgdGhlaXIgZG9jdW1lbnRhdGlvbiB0aGF0IGhhdmUgYmVlbiBkZXZlbG9wZWQgYnkgSU5SSUEgYW5kIEVOUEMuCisKK1NDSUxBQiBERVJJVkVEIFNPRlRXQVJFIGlzIGRlZmluZWQgYXMgYWxsIG9yIHBhcnQgb2YgdGhlIFNPRlRXQVJFIHRoYXQKK3lvdSBoYXZlIG1vZGlmaWVkIGFuZC9vciB0cmFuc2xhdGVkIGFuZC9vciBhZGFwdGVkLgorCitTQ0lMQUIgQ09NUE9TSVRFIFNPRlRXQVJFIGlzIGRlZmluZWQgYXMgYWxsIG9yIGEgcGFydCBvZiB0aGUgU09GVFdBUkUKK3RoYXQgeW91IGhhdmUgaW50ZXJmYWNlZCB3aXRoIGEgc29mdHdhcmUsIGFuIGFwcGxpY2F0aW9uIHBhY2thZ2Ugb3IgYQordG9vbGJveCBvZiB3aGljaCB5b3UgYXJlIG93bmVyIG9yIGVudGl0bGVkIGJlbmVmaWNpYXJ5LgorCiszLSBPYmplY3QgYW5kIGNvbmRpdGlvbnMgb2YgdGhlIFNPRlRXQVJFIGxpY2Vuc2UKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCithKSBJTlJJQSBhbmQgRU5QQyBhdXRob3JpemUgeW91IGZyZWUgb2YgY2hhcmdlLCB0byByZXByb2R1Y2UgdGhlCitTT0ZUV0FSRSBzb3VyY2UgYW5kL29yIG9iamVjdCBjb2RlIG9uIGFueSBwcmVzZW50IGFuZCBmdXR1cmUgc3VwcG9ydCwKK3dpdGhvdXQgcmVzdHJpY3Rpb24sIHByb3ZpZGluZyB0aGUgZm9sbG93aW5nIHJlZmVyZW5jZSBhcHBlYXJzIGluIGFsbAordGhlIGNvcGllczogU2NpbGFiIChjKUlOUklBLUVOUEMuCisKK2IpIElOUklBIGFuZCBFTlBDIGF1dGhvcml6ZSB5b3UgZnJlZSBvZiBjaGFyZ2UgdG8gY29ycmVjdCBhbnkgYnVncywKK2NhcnJ5IG91dCBhbnkgbW9kaWZpY2F0aW9ucyByZXF1aXJlZCBmb3IgdGhlIHBvcnRpbmcgb2YgdGhlIFNPRlRXQVJFCithbmQgdG8gY2Fycnkgb3V0IGFueSB1c3VhbCBmdW5jdGlvbmFsIG1vZGlmaWNhdGlvbiBvciBjb3JyZWN0aW9uLAorcHJvdmlkaW5nIHlvdSBpbnNlcnQgYSBwYXRjaCBmaWxlIG9yIHlvdSBpbmRpY2F0ZSBieSBhbnkgb3RoZXIKK2VxdWl2YWxlbnQgbWVhbnMgdGhlIG5hdHVyZSBhbmQgZGF0ZSBvZiB0aGUgbW9kaWZpY2F0aW9uIG9yIHRoZQorY29ycmVjdGlvbiwgb24gdGhlIGNvcnJlc3BvbmRpbmcgZmlsZShzKSBvZiB0aGUgU09GVFdBUkUuCisKK2MpIElOUklBIGFuZCBFTlBDIGF1dGhvcml6ZSB5b3UgZnJlZSBvZiBjaGFyZ2UgdG8gdXNlIHRoZSBTT0ZUV0FSRQorc291cmNlIGFuZC9vciBvYmplY3QgY29kZSwgd2l0aG91dCByZXN0cmljdGlvbiwgcHJvdmlkaW5nIHRoZQorZm9sbG93aW5nIHJlZmVyZW5jZSBhcHBlYXJzIGluIGFsbCB0aGUgY29waWVzOiBTY2lsYWIgKGMpSU5SSUEtRU5QQy4KKworZCkgSU5SSUEgYW5kIEVOUEMgYXV0aG9yaXplIHlvdSBmcmVlIG9mIGNoYXJnZSB0byBjaXJjdWxhdGUgYW5kCitkaXN0cmlidXRlLCBmcmVlIG9mIGNoYXJnZSBvciBmb3IgYSBmZWUsIHRoZSBTT0ZUV0FSRSBzb3VyY2UgYW5kL29yCitvYmplY3QgY29kZSwgaW5jbHVkaW5nIHRoZSBTT0ZUV0FSRSBtb2RpZmllZCBpbiBhY2NvcmRhbmNlIHdpdGgKK2Fib3ZlLW1lbnRpb25lZCBhcnRpY2xlIDMgYiksIG9uIGFueSBwcmVzZW50IGFuZCBmdXR1cmUgc3VwcG9ydCwKK3Byb3ZpZGluZzoKKworLSB0aGUgZm9sbG93aW5nIHJlZmVyZW5jZSBhcHBlYXJzIGluIGFsbCB0aGUgY29waWVzOiBTY2lsYWIKKyAgKGMpSU5SSUEtRU5QQy4KKworLSB0aGUgU09GVFdBUkUgaXMgY2lyY3VsYXRlZCBvciBkaXN0cmlidXRlZCB1bmRlciB0aGUgcHJlc2VudCBsaWNlbnNlLgorCistIHBhdGNoIGZpbGVzIG9yIGZpbGVzIGNvbnRhaW5pbmcgZXF1aXZhbGVudCBtZWFucyBpbmRpY2F0aW5nIHRoZQorICBuYXR1cmUgYW5kIHRoZSBkYXRlIG9mIHRoZSBtb2RpZmljYXRpb24gb3IgdGhlIGNvcnJlY3Rpb24gdG8gdGhlCisgIFNPRlRXQVJFIGZpbGUocykgY29uY2VybmVkIGFyZSBmcmVlbHkgY2lyY3VsYXRlZC4KKworNC0gT2JqZWN0IGFuZCBjb25kaXRpb25zIG9mIHRoZSBERVJJVkVEIFNPRlRXQVJFIGxpY2Vuc2UKKyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK2EpIElOUklBIGFuZCBFTlBDIGF1dGhvcml6ZSB5b3UgZnJlZSBvZiBjaGFyZ2UgdG8gcmVwcm9kdWNlIGFuZCBtb2RpZnkKK2FuZC9vciB0cmFuc2xhdGUgYW5kL29yIGFkYXB0IGFsbCBvciBwYXJ0IG9mIHRoZSBzb3VyY2UgYW5kL29yIHRoZQorb2JqZWN0IGNvZGUgb2YgdGhlIFNPRlRXQVJFLCBwcm92aWRpbmcgYSBwYXRjaCBmaWxlIGluZGljYXRpbmcgdGhlCitkYXRlIGFuZCB0aGUgbmF0dXJlIG9mIHRoZSBtb2RpZmljYXRpb24gYW5kL29yIHRoZSB0cmFuc2xhdGlvbiBhbmQvb3IKK3RoZSBhZGFwdGF0aW9uIGFuZCB0aGUgbmFtZSBvZiB0aGVpciBhdXRob3IgaW4gdGhlIFNPRlRXQVJFIGZpbGUocykKK2NvbmNlcm5lZCBpcyBpbnNlcnRlZC4gVGhlIFNPRlRXQVJFIHRodXMgbW9kaWZpZWQgaXMgZGVmaW5lZCBhcworREVSSVZFRCBTT0ZUV0FSRS4gVGhlIElOUklBIGF1dGhvcml6ZXMgeW91IGZyZWUgb2YgY2hhcmdlIHRvIHVzZSB0aGUKK3NvdXJjZSBhbmQvb3Igb2JqZWN0IGNvZGUgb2YgdGhlIFNPRlRXQVJFLCB3aXRob3V0IHJlc3RyaWN0aW9uLAorcHJvdmlkaW5nIHRoZSBmb2xsb3dpbmcgcmVmZXJlbmNlIGFwcGVhcnMgaW4gYWxsIHRoZSBjb3BpZXM6IFNjaWxhYgorKGMpSU5SSUEtRU5QQy4KKworYikgSU5SSUEgYW5kIEVOUEMgYXV0aG9yaXplIHlvdSBmcmVlIG9mIGNoYXJnZSB0byB1c2UgdGhlIFNPRlRXQVJFCitzb3VyY2UgYW5kL29yIG9iamVjdCBjb2RlIG1vZGlmaWVkIGFjY29yZGluZyB0byBhcnRpY2xlIDQtYSkgYWJvdmUsCit3aXRob3V0IHJlc3RyaWN0aW9uLCBwcm92aWRpbmcgdGhlIGZvbGxvd2luZyByZWZlcmVuY2UgYXBwZWFycyBpbiBhbGwKK3RoZSBjb3BpZXM6ICJTY2lsYWIgaW5zaWRlIChjKUlOUklBLUVOUEMiLgorCitjKSBUaGUgSU5SSUEgYW5kIHRoZSBFTlBDIGF1dGhvcml6ZSB5b3UgZnJlZSBvZiBjaGFyZ2UgdG8gY2lyY3VsYXRlCithbmQgZGlzdHJpYnV0ZSBmb3Igbm8gY2hhcmdlLCBmb3Igbm9uLWNvbW1lcmNpYWwgcHVycG9zZXMgdGhlIHNvdXJjZQorYW5kL29yIG9iamVjdCBjb2RlIG9mIERFUklWRUQgU09GVFdBUkUgb24gYW55IHByZXNlbnQgYW5kIGZ1dHVyZQorc3VwcG9ydCwgcHJvdmlkaW5nOgorCistIHRoZSByZWZlcmVuY2UgIiBTY2lsYWIgaW5zaWRlIChjKUlOUklBLUVOUEMgICIgaXMgcHJvbWluZW50bHkKKyAgbWVudGlvbmVkOworCistIHRoZSBERVJJVkVEIFNPRlRXQVJFIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSBwcmVzZW50IGxpY2Vuc2U7CisKKy0gdGhlIHJlY2lwaWVudHMgb2YgdGhlIGRpc3RyaWJ1dGlvbiBjYW4gYWNjZXNzIHRoZSBTT0ZUV0FSRSAgY29kZQorICBzb3VyY2U7CisKKy0gdGhlIERFUklWRUQgU09GVFdBUkUgaXMgZGlzdHJpYnV0ZWQgdW5kZXIgYSBuYW1lIG90aGVyIHRoYW4gU0NJTEFCLgorCitkKSBBbnkgY29tbWVyY2lhbCB1c2Ugb3IgY2lyY3VsYXRpb24gb2YgdGhlIERFUklWRUQgU09GVFdBUkUgc2hhbGwKK2hhdmUgYmVlbiBwcmV2aW91c2x5IGF1dGhvcml6ZWQgYnkgSU5SSUEgYW5kIEVOUEMuCisKKzUtIE9iamVjdCBhbmQgY29uZGl0aW9ucyBvZiB0aGUgbGljZW5zZSBjb25jZXJuaW5nIENPTVBPU0lURSBTT0ZUV0FSRQorKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK2EpIElOUklBIGFuZCBFTlBDIGF1dGhvcml6ZSB5b3UgdG8gcmVwcm9kdWNlIGFuZCBpbnRlcmZhY2UgYWxsIG9yIHBhcnQKK29mIHRoZSBTT0ZUV0FSRSB3aXRoIGFsbCBvciBwYXJ0IG9mIG90aGVyIHNvZnR3YXJlLCBhcHBsaWNhdGlvbgorcGFja2FnZXMgb3IgdG9vbGJveGVzIG9mIHdoaWNoIHlvdSBhcmUgb3duZXIgb3IgZW50aXRsZWQgYmVuZWZpY2lhcnkKK2luIG9yZGVyIHRvIG9idGFpbiBDT01QT1NJVEUgU09GVFdBUkUuCisKK2IpIElOUklBIGFuZCBFTlBDIGF1dGhvcml6ZSB5b3UgZnJlZSwgb2YgY2hhcmdlLCB0byB1c2UgdGhlIFNPRlRXQVJFCitzb3VyY2UgYW5kL29yIG9iamVjdCBjb2RlIGluY2x1ZGVkIGluIHRoZSBDT01QT1NJVEUgU09GVFdBUkUsIHdpdGhvdXQKK3Jlc3RyaWN0aW9uLCBwcm92aWRpbmcgdGhlIGZvbGxvd2luZyBzdGF0ZW1lbnQgYXBwZWFycyBpbiBhbGwgdGhlCitjb3BpZXM6ICJjb21wb3NpdGUgc29mdHdhcmUgdXNpbmcgU2NpbGFiIChjKUlOUklBLUVOUEMgZnVuY3Rpb25hbGl0eSIuCisKK2MpIElOUklBIGFuZCBFTlBDIGF1dGhvcml6ZSB5b3UsIGZyZWUgb2YgY2hhcmdlLCB0byBjaXJjdWxhdGUgYW5kCitkaXN0cmlidXRlIGZvciBubyBjaGFyZ2UsIGZvciBwdXJwb3NlcyBvdGhlciB0aGFuIGNvbW1lcmNpYWwsIHRoZQorc291cmNlIGFuZC9vciBvYmplY3QgY29kZSBvZiBDT01QT1NJVEUgU09GVFdBUkUgb24gYW55IHByZXNlbnQgYW5kCitmdXR1cmUgc3VwcG9ydCwgcHJvdmlkaW5nOgorCistIHRoZSBmb2xsb3dpbmcgcmVmZXJlbmNlIGlzIHByb21pbmVudGx5IG1lbnRpb25lZDogImNvbXBvc2l0ZQorICBzb2Z0d2FyZSB1c2luZyBTY2lsYWIgKGMpSU5SSUEtRU5QQyBmdW5jdGlvbmFsaXR5ICI7CisKKy0gdGhlIFNPRlRXQVJFIGluY2x1ZGVkIGluIENPTVBPU0lURSBTT0ZUV0FSRSBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUKKyAgcHJlc2VudCBsaWNlbnNlIDsKKworLSByZWNpcGllbnRzIG9mIHRoZSBkaXN0cmlidXRpb24gaGF2ZSBhY2Nlc3MgdG8gdGhlIFNPRlRXQVJFICBzb3VyY2UKKyAgY29kZTsKKworLSB0aGUgQ09NUE9TSVRFIFNPRlRXQVJFIGlzIGRpc3RyaWJ1dGVkIHVuZGVyIGEgbmFtZSBvdGhlciB0aGFuCisgIFNDSUxBQi4KKworZSkgQW55IGNvbW1lcmNpYWwgdXNlIG9yIGRpc3RyaWJ1dGlvbiBvZiBDT01QT1NJVEUgU09GVFdBUkUgc2hhbGwgaGF2ZQorYmVlbiBwcmV2aW91c2x5IGF1dGhvcml6ZWQgYnkgSU5SSUEgYW5kIEVOUEMuCisKKzYtIExpbWl0YXRpb24gb2YgdGhlIHdhcnJhbnR5CisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorCitFeGNlcHQgd2hlbiBtZW50aW9uZWQgb3RoZXJ3aXNlIGluIHdyaXRpbmcsIHRoZSBTT0ZUV0FSRSBpcyBzdXBwbGllZAorYXMgaXMsIHdpdGggbm8gZXhwbGljaXQgb3IgaW1wbGljaXQgd2FycmFudHksIGluY2x1ZGluZyB3YXJyYW50aWVzIG9mCitjb21tZXJjaWFsaXphdGlvbiBvciBhZGFwdGF0aW9uLiBZb3UgYXNzdW1lIGFsbCByaXNrcyBjb25jZXJuaW5nIHRoZQorcXVhbGl0eSBvciB0aGUgZWZmZWN0cyBvZiB0aGUgU09GVFdBUkUgYW5kIGl0cyB1c2UuIElmIHRoZSBTT0ZUV0FSRSBpcworZGVmZWN0aXZlLCB5b3Ugd2lsbCBiZWFyIHRoZSBjb3N0cyBvZiBhbGwgcmVxdWlyZWQgc2VydmljZXMsCitjb3JyZWN0aW9ucyBvciByZXBhaXJzLgorCis3LSBDb25zZW50CisqKioqKioqKioqCisKK1doZW4geW91IGFjY2VzcyBhbmQgdXNlIHRoZSBTT0ZUV0FSRSwgeW91IGFyZSBwcmVzdW1lZCB0byBiZSBhd2FyZSBvZgorYW5kIHRvIGhhdmUgYWNjZXB0ZWQgYWxsIHRoZSByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIHRoZSBwcmVzZW50CitsaWNlbnNlLgorCis4LSBCaW5kaW5nIGVmZmVjdAorKioqKioqKioqKioqKioqKioKKworVGhpcyBsaWNlbnNlIGhhcyB0aGUgYmluZGluZyB2YWx1ZSBvZiBhIGNvbnRyYWN0LgorWW91IGFyZSBub3QgcmVzcG9uc2libGUgZm9yIHJlc3BlY3Qgb2YgdGhlIGxpY2Vuc2UgYnkgYSB0aGlyZCBwYXJ0eS4KKworOS0gQXBwbGljYWJsZSBsYXcKKyoqKioqKioqKioqKioqKioqCisKK1RoZSBwcmVzZW50IGxpY2Vuc2UgYW5kIGl0cyBlZmZlY3RzIGFyZSBzdWJqZWN0IHRvIEZyZW5jaCBsYXcgYW5kIHRoZQorY29tcGV0ZW50IEZyZW5jaCBjb3VydHMuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9zZWxmaHRtbCBiL2xpY2Vuc2VzL3NlbGZodG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZmVjZTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9zZWxmaHRtbApAQCAtMCwwICsxLDY5IEBACitodHRwOi8vc2VsZmh0bWwudGVhbW9uZS5kZS9lZGl0b3JpYWwvY29weXJpZ2h0Lmh0bQorCisKK1VyaGViZXJyZWNodAorCitEaWUgVGV4dGUgdm9uIFNFTEZIVE1MIHNpbmQgZHVyY2ggZGFzIFVyaGViZXJyZWNodCBnZXNjaMO8dHp0LiBEYXMgVmVyd2VuZGVuIHZvbgorVGV4dGVuIGF1cyBTRUxGSFRNTCBhdWYgZWlnZW5lbiBXZWJzZWl0ZW4gb2RlciBpbiBhbmRlcmVuIE1lZGllbiB2ZXJsZXR6dCBkYXMKK1VyaGViZXJyZWNodCB1bmQgd2lyZCBiZWkgRW50ZGVja2VuIHp1bsOkY2hzdCBwZXJzw7ZubGljaCBkdXJjaCBkZW4gQXV0b3IKK2FiZ2VtYWhudCAoa29zdGVubG9zKS4gU29sbHRlIGRhcyBuaWNodHMgYmV3aXJrZW4sIHdpcmQgYW53YWx0bGljaCBhYmdlbWFobnQKKyhrb3N0ZW5wZmxpY2h0aWcpLiBTb2xsdGUgYXVjaCBkYXMgbmljaHRzIGJld2lya2VuLCB3ZXJkZW4gZ2VyaWNodGxpY2hlCitTY2hyaXR0ZSBlaW5nZWxlaXRldC4gIERhIFNFTEZIVE1MIGF1Y2ggYWxzIEJ1Y2ggZXJzY2hlaW50LCBlbnRzdGVoZW4gaW0gRmFsbGUKK3ZvbiBUZXh0a2xhdSBhdcOfZXJkZW0gUmVjaHRzYW5zcHLDvGNoZSBkZXMgQnVjaHZlcmxhZ3MuCisKK1dlYi1BbndlbmRlciB3ZXJkZW4gZGF6dSBlcm11dGlndCwgZW50ZGVja3RlIFZlcnN0w7bDn2UgYW4gZGllIFNFTEZIVE1MIFJlZGFrdGlvbgorKE1haWwtQWRyZXNzZSBzaWVoZSBTZWl0ZW5lbmRlKSB6dSBtZWxkZW4uIFNpZSBoZWxmZW4gZGFkdXJjaCwgZGllIFF1YWxpdMOkdCB2b24KK1NFTEZIVE1MIHp1IHNpY2hlcm4gdW5kIGRhcyBSZWNodHNiZXd1c3N0c2VpbiB2b24gTGV1dGVuIHp1IHNjaMOkcmZlbiwgZGllCittZWluZW4sIGVzIHNlaSBhbGxlcyBlcmxhdWJ0LCB3ZW5uIG1hbiBudXIgd2lzc2UsIHdpZSBDb3B5JlBhc3RlIGZ1bmt0aW9uaWVydC4KKworRWluemVsbmUgRGluZ2UgYXVzIFNFTEZIVE1MIGTDvHJmZW4gYWxsZXJkaW5ncyBkdXJjaGF1cyBrb3BpZXJ0IHVuZCDDvGJlcm5vbW1lbgord2VyZGVuLiBFaW56ZWxoZWl0ZW4gZGF6dSBmaW5kZW4gU2llIGF1ZiBkZXIgU2VpdGVbMV1Iw6R1ZmlnIGdlc3RlbGx0ZW4gRnJhZ2VuCit6dSBTRUxGSFRNTC4KKworCitXZWl0ZXJnYWJlIHVuZCBXaWVkZXJ2ZXLDtmZmZW50bGljaHVuZworCitEYXMgS29waWVyZW4gdW5kIFdlaXRlcmdlYmVuIGRlcyBEb2t1bWVudHMgaXN0IGVybGF1YnQuIEJlZGluZ3VuZyBpc3QsIGRhc3MgZGFzCitEb2t1bWVudCBzdGV0cyBpbiB2b2xsc3TDpG5kaWdlciBGb3JtIChtaXQgYWxsZW4gRGF0ZWllbikgdW5kIGluIHVudmVyw6RuZGVydGVyCitGb3JtIGtvcGllcnQgdW5kIHdlaXRlcmdlZ2ViZW4gd2lyZC4gRGllIEFuemFobCBlcmxhdWJ0ZXIgS29waWVuIGlzdAordW5iZWdyZW56dC4KKworRGFzIFZlcsO2ZmZlbnRsaWNoZW4gaW0gV2ViLCBpbiBJbnRyYW5ldHMsIGluIE9ubGluZS1EaWVuc3RlbiwgTWFpbGJveGVuIG9kZXIKK8OkaG5saWNoZW4gTWVkaWVuIGlzdCBlcmxhdWJ0LiBFYmVuZmFsbHMgZXJsYXVidCBpc3QgZGFzIFZlcsO2ZmZlbnRsaWNoZW4gYXVmCitEYXRlbnRyw6RnZXJuIHdpZSBDRC1ST01zIG9kZXIgRFZEcywgYXVjaCB3ZW5uIGRpZXNlIERhdGVudHLDpGdlciBrb21tZXJ6aWVsbAorb3JpZW50aWVydCBzaW5kLiBCZWkga29tbWVyemllbGxlbiBEYXRlbnRyw6RnZXJuIGJlc3RlaHQgamVkb2NoIGRpZQorRWluc2NocsOkbmt1bmcsIGRhc3MgU0VMRkhUTUwgZG9ydCBudXIgVGVpbCBlaW5lciBTYW1tbHVuZyBzZWluIGRhcmYgKHouQi4KKyJhbGxlcyBmw7xyIGRpZSBlaWdlbmUgSG9tZXBhZ2UiIC0gbWl0IFNvZnR3YXJlLCBEb2t1bWVudGF0aW9uIHVzdy4pLCBuaWNodAoramVkb2NoIGRlciB6ZW50cmFsZSB2ZXJ0cmllYmVuZSBJbmhhbHQuIEJlaSBuaWNodC1rb21tZXJ6aWVsbGVuIERhdGVudHLDpGdlcm4KKyh6LkIuIFNjaMO8bGVyLURpc3RyaWJ1dGlvbmVuIHp1bSBTZWxic3Rrb3N0ZW5wcmVpcykgZGFyZiBTRUxGSFRNTCBkYWdlZ2VuIGF1Y2gKK3plbnRyYWxlciBEYXRlbnRyw6RnZXJpbmhhbHQgc2Vpbi4KKworQmVkaW5ndW5nIGJlaSBhbGxlbiBWZXLDtmZmZW50bGljaHVuZ2VuIGlzdCwgZGFzcyBkYXMgRG9rdW1lbnQgc3RldHMgaW4KK3ZvbGxzdMOkbmRpZ2VyIEZvcm0gKG1pdCBhbGxlbiBEYXRlaWVuKSB1bmQgaW4gdW52ZXLDpG5kZXJ0ZXIgRm9ybSB2ZXLDtmZmZW50bGljaHQKK3dpcmQuIE5pY2h0IGVybGF1YnQgaXN0IGRhcyBFaW5iZXR0ZW4gaW4gZnJlbWRlIEZyYW1lc2V0cy4gRWJlbmZhbGxzIG5pY2h0CitlcmxhdWJ0IGlzdCBkYXMgRWluZsO8Z2VuIHZvbiBGcmVtZHdlcmJ1bmcgaW4gU0VMRkhUTUwsIHouQi4gQmFubmVyLVdlcmJ1bmcuCisKK0RhcyDDhG5kZXJuIGRlcyBEb2t1bWVudHMgaXN0IGdlbmVyZWxsIG5pY2h0IGVybGF1YnQuIERhcyBnaWx0IHNvd29obCBmw7xyIGRlbgorSW5oYWx0IGFscyBhdWNoIGbDvHIgZGFzIERhdGVpZm9ybWF0LiBBdWNoIGRhcyBFbnRmZXJuZW4gdW5saWVic2FtZXIgUGFzc2FnZW4KK2lzdCBuaWNodCBlcmxhdWJ0LiBFaW56aWdlIEF1c25haG1lOiBzaWVoZSBbMl1TRUxGSFRNTCBhbnBhc3Nlbi4gV2VpdGVyZQorQXVzbmFobWVuIHdpZSB6LkIuIMOEbmRlcnVuZ2VuIGF1ZmdydW5kIGp1cmlzdGlzY2hlciBQcm9ibGVtZSBzaW5kIG1pdCBkZXIKK1NFTEZIVE1MIFJlZGFrdGlvbiAoTWFpbC1BZHJlc3NlIHNpZWhlIFNlaXRlbmVuZGUpIGFienVrbMOkcmVuLgorCitCZWkgVmVyw7ZmZmVudGxpY2h1bmcgdm9uIFNFTEZIVE1MIGF1ZiBDRC1ST00gb2RlciB2ZXJnbGVpY2hiYXJlbiBEYXRlbnRyw6RnZXJuCitpc3QgZXMgZWluZSBmZWluZSBHZXN0ZSwgZGVtIEF1dG9yIGVpbiBCZWxlZ2V4ZW1wbGFyIHp1a29tbWVuIHp1IGxhc3Nlbi4gU2VuZGVuCitTaWUgZGllc2VzIHBlciBQb3N0IGFuOiBUZWFtT25lLCB6LkhkLiBTdGVmYW4gTcO8bnosIEFpZGVuYmFjaHN0ci4gMzIsIEQtODEzNzkKK03DvG5jaGVuLgorCisKK0F1c25haG1lbgorCitXYXMgaW0gdm9yYW5nZWhlbmRlbiBVbnRlcmFic2Nobml0dCBXZWl0ZXJnYWJlIHVuZCBXaWVkZXJ2ZXLDtmZmZW50bGljaHVuZworZXJsYXVidCB3aXJkLCBnaWx0IG5pY2h0LCB3ZW5uIGRpZSBVbWdlYnVuZyAoei5CLiBkZXIgw7xicmlnZSBJbmhhbHQgZGVyIENELVJPTQorb2RlciBkZXIgw7xicmlnZSBJbmhhbHQgZGVzIFdlYi1BbmdlYm90cykgaWxsZWdhbGUsIHZvbGtzdmVyaGV0emVuZGUgb2RlcgorcmFzc2lzdGlzY2hlIEluaGFsdGUgaGF0LiBOYW1lbnRsaWNoIHZlcmJvdGVuIGlzdCBkYXMgWnVzYW1tZW5icmluZ2VuIHZvbgorU0VMRkhUTUwgbWl0IG5hemlzdGlzY2hlbiBJbmhhbHRlbiwga2luZGVycG9ybm9ncmFmaXNjaGVuIEluaGFsdGVuIG9kZXIKK2Z1bmRhbWVudGFsaXN0aXNjaC1yZWxpZ2nDtnNlbiBJbmhhbHRlbi4KKworCitbMV0gaHR0cDovL3NlbGZodG1sLnRlYW1vbmUuZGUvZWRpdG9yaWFsL3NlbGZodG1sZmFxLmh0bQorWzJdIGh0dHA6Ly9zZWxmaHRtbC50ZWFtb25lLmRlL2VkaXRvcmlhbC9oaW53ZWlzZS5odG0jYW5wYXNzZW4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL3Nob3V0Y2FzdCBiL2xpY2Vuc2VzL3Nob3V0Y2FzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmM2Y2Q3Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvc2hvdXRjYXN0CkBAIC0wLDAgKzEsMjkgQEAKK0xpY2Vuc2UgRmVlcywgV2FycmFudGllcyAmIERpc2NsYWltZXJzLCBDb3B5cmlnaHQgYW5kIFRyYWRlbWFya3MKKworIEJ5IHVzaW5nIFNob3V0Y2FzdC5jb20sIHlvdSBhZ3JlZSB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGNvbmNlcm5pbmcgdXNhYmlsaXR5IGFuZCBsaWFiaWxpdHkgb2YgTnVsbHNvZnQsIEluYy4gCisgCisgTnVsbHNvZnQsIEluYy4gZ3JhbnRzIGEgcmV2b2thYmxlLCBuby1jaGFyZ2UgbGljZW5zZSBmb3IgdXNlIG9mIFNob3V0Y2FzdCBTZXJ2ZXIgZm9yIGFueSB1c2UuIAorCisgVW5sZXNzIGV4cGxpY2l0bHkgc3RhdGVkIGluIHdyaXRpbmcsIE51bGxzb2Z0LCBJbmMuIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gZGlzdHJpYnV0ZSBhbnkgb2YgaXRzIHNvZnR3YXJlIGluIGFueSBmb3JtLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvLCBlbGVjdHJvbmljIAoraW5mb3JtYXRpb24gc2VydmljZSBkaXN0cmlidXRpb24sIGJ1bGxldGluIGJvYXJkIGRpc3RyaWJ1dGlvbiwgYW5kIG1hZ25ldGljIG9yIG9wdGljYWwgbWVkaXVtIGRpc3RyaWJ1dGlvbi4gCisKKyBOdWxsc29mdCwgSW5jLiBpcyBub3QgcmVzcG9uc2libGUgZm9yIGFueSBkYW1hZ2UgdG8gdGhlIHB1cmNoYXNlcidzIGNvbXB1dGVyIHN5c3RlbSBvciBkYXRhIGFuZCBpbiBubyBldmVudCB3aWxsIE51bGxzb2Z0LCBJbmMuLCBpdHMgb2ZmaWNlcnMsIGRpcmVjdG9ycywgZW1wbG95ZWVzIG9yIAorYWdlbnRzIGJlIHJlc3BvbnNpYmxlIHRvIHRoZSBwdXJjaGFzZXIgZm9yIGFueSBjb25zZXF1ZW50aWFsLCBpbmNpZGVudGFsLCBvciBpbmRpcmVjdCBkYW1hZ2VzIChpbmNsdWRpbmcgZGFtYWdlcyBmb3IgbG9zcyBvZiBidXNpbmVzcyBwcm9maXRzLCBidXNpbmVzcyBpbnRlcnJ1cHRpb24sIGxvc3MgCitvZiBidXNpbmVzcyBpbmZvcm1hdGlvbiBhbmQgdGhlIGxpa2UpIGFyaXNpbmcgb3V0IG9mIHRoZSB1c2Ugb3IgaW5hYmlsaXR5IHRvIHVzZSB0aGUgTnVsbHNvZnQsIEluYy4gcHJvZHVjdHMsIG9yIHRoZSBTaG91dGNhc3QuY29tIHNlcnZlciwgZXZlbiBpZiBOdWxsc29mdCwgSW5jLiBoYXMgYmVlbiAKK2FkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlcy4gQmVjYXVzZSBzb21lIHN0YXRlcyBkbyBub3QgYWxsb3cgdGhlIGV4Y2x1c2lvbiBvciBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eSBmb3IgY29uc2VxdWVudGlhbCBvciBpbmNpZGVudGFsIGRhbWFnZXMsIHRoZSBhYm92ZSAKK2xpbWl0YXRpb25zIG1heSBub3QgYXBwbHkgdG8geW91LiAKKworIFlvdSBjYW4gcGFydGljaXBhdGUgaW4gU2hvdXRjYXN0LmNvbSBicm9hZGNhc3RzIHRoYXQgd2UgaW5kZXggb24gb3VyIHNpdGVzLCBidXQgcGxlYXNlIHJlbWVtYmVyIHRoYXQgTnVsbHNvZnQgZG9lcyBub3QgY3JlYXRlLCBlbmRvcnNlLCBvciBzcG9uc29yIHNhaWQgYnJvYWRjYXN0cy4gSWYgCit5b3UgZG93bmxvYWQgYW55IHRoaXJkLXBhcnR5IG1hdGVyaWFscyB0aGF0IHdlIGluZGV4IG9yIHN1cHBvcnQsIHlvdSBkbyBzbyBjb21wbGV0ZWx5IGF0IHlvdXIgb3duIHJpc2suIElmIHlvdSBwbGFuIHRvIGRvd25sb2FkIGFueSBzb2Z0d2FyZSwgcGxlYXNlIGJlIHN1cmUgdG8gcmVhZCB0aGUgCitjb3B5cmlnaHQgYW5kIGxpY2Vuc2luZyBpbmZvcm1hdGlvbiBmaXJzdC4gCisKKyBOdWxsc29mdCwgSW5jLiBpcyBub3QgcmVzcG9uc2libGUgZm9yIHRoZSBjb250ZW50IG9mIHdoYXQgaXMgYnJvYWRjYXN0IHV0aWxpemluZyBTaG91dGNhc3QuY29tLiBOdWxsc29mdCwgSW5jLiBiZWxpZXZlcyBpbiB0aGUgRmlyc3QgQW1lbmRtZW50IHRvIHRoZSBVUyBDb25zdGl0dXRpb24gYW5kIAord2lsbCBub3QgcmV2aWV3IG9yIGNlbnNvciBhbnkgYnJvYWRjYXN0LiBUaG9zZSB3aG8gbGlzdGVuIHRvIGFueSBicm9hZGNhc3QgbGlzdGVkIG9yIHNlcnZlZCBoZXJlaW4gYXNzdW1lIGFsbCByaXNrIG9mIGJlaW5nIG9mZmVuZGVkIG9yIHN1ZmZlcmluZyBhbnkgb3RoZXIgZm9ybSBvZiAKK2RhbWFnZS4gCisKKyAiV2luYW1wLCIgIk5pdHJhbmUsIiAiU2hvdXRjYXN0IiBhcmUgQ29weXJpZ2h0ICkgMTk5OC0yMDAyIGJ5IE51bGxzb2Z0LCBJbmMuIAorCisgQW1vbmcgdGhlIHRyYWRlbWFya3MgYW5kIHNlcnZpY2UgbWFya3Mgb3duZWQgYnkgTnVsbHNvZnQsIEluYy4gYXJlIE51bGxzb2Z0LCB0aGUgTnVsbHNvZnQgbG9nbywgV2luYW1wLCB3aW5hbXAuY29tLCBOaXRyYW5lLCBTaG91dGNhc3QuY29tLCB0aGUgcmVzcGVjdGl2ZSBsb2dvcyBvZiB0aGUgCitzaXRlcyBhbmQgdGhlIGN1cmlvdXMgV2luYW1wIG1vdHRvLCAiV2luYW1wLCBpdCByZWFsbHkgd2hpcHMgdGhlIGxsYW1hJ3MgYXNzISIgCisKKyBUaGUgImxvb2siIGFuZCAiZmVlbCIgb2Ygb3VyIHNpdGVzIGFsc28gYXJlIE51bGxzb2Z0IHRyYWRlbWFya3MuIFRoaXMgaW5jbHVkZXMgb3VyIGNvbG9yIGNvbWJpbmF0aW9ucywgYnV0dG9uIHNoYXBlcywgbGF5b3V0LCBhbmQgYWxsIG90aGVyIGdyYXBoaWNhbCBlbGVtZW50cy4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL3NpbXBzZXJ2ZXItdGVzdCBiL2xpY2Vuc2VzL3NpbXBzZXJ2ZXItdGVzdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTkzMWRjCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvc2ltcHNlcnZlci10ZXN0CkBAIC0wLDAgKzEsMTg0IEBACitTaW1wU2VydmVyIHRlc3QgcmVsZWFzZXMgTGljZW5zZSBBZ3JlZW1lbnQKKworVGhpcyBBZ3JlZW1lbnQgc2V0cyBmb3J0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGVzdCByZWxlYXNlcyAKKyhhbHNvIGNhbGxlZCBiZXRhIHZlcnNpb25zKSBvZiB0aGUgc29mdHdhcmUga25vd24gYXMgU2ltcFNlcnZlciB3aWxsIGJlIGxpY2Vuc2VkIAorYnkgU2Vjd2F5IFNBUkwgKCJTZWN3YXkiKSB0byB5b3UgKCJMaWNlbnNlZSIpIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHRlc3QgCitwZXJpb2QuIAorCitJTVBPUlRBTlQ6IEJZIENMSUNLSU5HIFRIRSBBQ0NFUFRBTkNFIEJVVFRPTiBPUiBJTlNUQUxMSU5HIE9SIFVTSU5HIE9SIAorRElTVFJJQlVUSU5HIFNJTVBTRVJWRVIgQkVUQSBWRVJTSU9OUyAoVEhFICJQUk9EVUNUIikgT1IgQU5ZIE9GIElUUyBGSUxFUyAoVEhFIAorIlBBQ0tBR0UiKSwgVEhFIElORElWSURVQUwgT1IgRU5USVRZIExJQ0VOU0lORyBUSEUgUFJPRFVDVCAoIkxJQ0VOU0VFIikgSVMgCitDT05TRU5USU5HIFRPIEJFIEJPVU5EIEJZIEFORCBJUyBCRUNPTUlORyBBIFBBUlRZIFRPIFRISVMgQUdSRUVNRU5ULiBJRiBMSUNFTlNFRSAKK0RPRVMgTk9UIEFHUkVFIFRPIEFMTCBPRiBUSEUgVEVSTVMgT0YgVEhJUyBBR1JFRU1FTlQsIFRIRSBCVVRUT04gSU5ESUNBVElORyBOT04tCitBQ0NFUFRBTkNFIE1VU1QgQkUgU0VMRUNURUQsIEFORCBMSUNFTlNFRSBNVVNUIE5PVCBJTlNUQUxMIE9SIERJU1RSSUJVVEUgT1IgVVNFIAorVEhFIFNPRlRXQVJFLiAKKworCitUZXJtcyBvZiB0aGUgbGljZW5zZSBhZ3JlZW1lbnQKKworMS4JTElDRU5TRSBBR1JFRU1FTlQuICBUaGlzIGxpY2Vuc2UgYWdyZWVtZW50IGdvdmVybnMgdGhlIG9idGFpbmluZywgdXNlLCAKK2R1cGxpY2F0aW9uLCBkaXN0cmlidXRpb24sIGFuZCBtb2RpZmljYXRpb24gb2YgdGhlIFByb2R1Y3QgYW5kIGl0cyBwYWNrYWdlLiBVc2UsIAorZHVwbGljYXRpb24sIGRpc3RyaWJ1dGlvbiBvciBtb2RpZmljYXRpb24gb2YgdGhlIFByb2R1Y3QgYW5kIGl0cyBwYWNrYWdlIGltcGxpZXMgCit0aGUgYWNjZXB0YXRpb24gb2YgdGhpcyBsaWNlbnNlIGFncmVlbWVudC4gIAorCisyLglMSUNFTlNFIEdSQU5ULiAKK2EuCVNlY3dheSBncmFudHMgTGljZW5zZWUgYSBub24tZXhjbHVzaXZlIGFuZCBub24tdHJhbnNmZXJhYmxlIGxpY2Vuc2UgdG8gCityZXByb2R1Y2UgYW5kIHVzZSBmb3IgcGVyc29uYWwgcHVycG9zZXMgdGhlIGV4ZWN1dGFibGUgY29kZSB2ZXJzaW9uIG9mIHRoZSAKK1Byb2R1Y3QgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgdGVzdCBwZXJpb2QsIHByb3ZpZGVkIGFueSBjb3B5IG11c3QgY29udGFpbiBhbGwgCitvZiB0aGUgb3JpZ2luYWwgcHJvcHJpZXRhcnkgbm90aWNlcy4gCitiLglUaGlzIGxpY2Vuc2UgZG9lcyBub3QgZW50aXRsZSBMaWNlbnNlZSB0byByZWNlaXZlIGZyb20gU2Vjd2F5IGhhcmQtY29weSAKK2RvY3VtZW50YXRpb24sIHRlY2huaWNhbCBzdXBwb3J0LCB0ZWxlcGhvbmUgYXNzaXN0YW5jZSwgb3IgZW5oYW5jZW1lbnRzIG9yIAordXBkYXRlcyB0byB0aGUgUHJvZHVjdC4KK2MuCUxpY2Vuc2VlIG1heSBub3QgY3VzdG9taXplIHRoZSBQcm9kdWN0IHVubGVzcyBoZSBoYXMgcmVjZWl2ZWQgYSB3cml0dGVuIAorYWdyZWVtZW50IGZyb20gU2Vjd2F5LiBJbiB0aGlzIGNhc2UsIHRoZSBleGFjdCB0ZXJtcyBhbmQgZXh0ZW5kcyBvZiB0aGlzIAorY3VzdG9taXphdGlvbiBhcmUgdG8gYmUgZm91bmQgaW4gdGhlIHdyaXR0ZW4gYWdyZWVtZW50LiAKK2QuCUxpY2Vuc2VlIG1heSBub3QgcmVkaXN0cmlidXRlIHRoZSBQcm9kdWN0IHVubGVzcyBmb3IgcGVyc29uYWwgb3IgCitpbnRlcm5hbCBidXNpbmVzcyBwdXJwb3Nlcy4gUmVkaXN0cmlidXRpb24gbXVzdCBiZSBmcmVlIGV4Y2VwdCBwb3NzaWJseSBmb3IgCittZWRpYSBvciBiYW5kd2lkdGggY29zdHMsIGFuZCByZWRpc3RyaWJ1dGVkIGZpbGVzIG11c3QgYmUgdGhlIG9yaWdpbmFsIHBhY2thZ2UgCithcyBvYnRhaW5lZCBmcm9tIFNlY3dheSwgd2l0aG91dCBhbnkgbW9kaWZpY2F0aW9uLiBEaXN0cmlidXRpb24gb2YgdGhlIFByb2R1Y3QgCitvciBpdHMgcGFja2FnZSBhZ2dyZWdhdGVkIHdpdGggb3RoZXIgcHJvZ3JhbXMgYXMgcGFydCBvZiBhIGxhcmdlciAocG9zc2libHkgCitjb21tZXJjaWFsKSBzb2Z0d2FyZSBkaXN0cmlidXRpb24gbWF5IGJlIHBlcm1pdHRlZCBieSBhIHdyaXR0ZW4gYWdyZWVtZW50IGZyb20gCitTZWN3YXkuIFN1Y2ggZGlzdHJpYnV0aW9uIGlzIGFsc28gZ292ZXJuZWQgYnkgdGVybXMgb2YgdGhpcyBsaWNlbnNlIGFncmVlbWVudCAKK3BsdXMgYW1lbmRtZW50cyBwb3NzaWJseSBtYWRlIGJ5IHRoZSB3cml0dGVuIGFncmVlbWVudC4KKworMy4JUkVTVFJJQ1RJT05TLiAKK2EuCUV4Y2VwdCBhcyBvdGhlcndpc2UgZXhwcmVzc2x5IHBlcm1pdHRlZCBpbiB0aGlzIEFncmVlbWVudCwgTGljZW5zZWUgbWF5IAorbm90OiAKK2kuCW1vZGlmeSBvciBjcmVhdGUgYW55IGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFByb2R1Y3Qgb3IgZG9jdW1lbnRhdGlvbiwgCitpbmNsdWRpbmcgdHJhbnNsYXRpb24gb3IgbG9jYWxpemF0aW9uCitpaS4JcmVkaXN0cmlidXRlLCBlbmN1bWJlciwgc2VsbCwgcmVudCwgbGVhc2UsIHN1YmxpY2Vuc2UsIG9yIG90aGVyd2lzZSAKK3RyYW5zZmVyIHJpZ2h0cyB0byB0aGUgUHJvZHVjdAoraWlpLglyZW1vdmUgb3IgYWx0ZXIgYW55IHRyYWRlbWFyaywgbG9nbywgY29weXJpZ2h0IG9yIG90aGVyIHByb3ByaWV0YXJ5IAorbm90aWNlcywgbGVnZW5kcywgc3ltYm9scyBvciBsYWJlbHMgaW4gdGhlIFByb2R1Y3QKK2l2LglwdWJsaXNoIGFueSByZXN1bHRzIG9mIGJlbmNobWFyayB0ZXN0cyBvciBldmFsdWF0aW9uIG9yIHJldmVyc2UgCitlbmdpbmVlcmluZyAoc2VlIGJlbG93KSBydW4gb24gdGhlIFByb2R1Y3QgdG8gYSB0aGlyZCBwYXJ0eSB3aXRob3V0IFNlY3dheSdzIAorcHJpb3Igd3JpdHRlbiBjb25zZW50LCB3aGljaCBjYW5ub3QgYmUgcmVmdXNlZCB3aXRob3V0IGFueSAgdmFsaWQgcmVhc29uLiAKK2IuCURlY29tcGlsYXRpb24sIGRpc2Fzc2VtYmx5LCByZXZlcnNlIGVuZ2luZWVyaW5nIG9yIGFueSBhdHRlbXB0IHRvIGRlcml2ZSAKK3RoZSBzb3VyY2UgY29kZSBmb3IgdGhlIFByb2R1Y3QgaXMgYWxsb3dlZCBmb3IgcGVyc29uYWwgdmVyaWZpY2F0aW9uIHB1cnBvc2VzIAorb25seS4gCisKKzQuCUZFRVMuIAorYS4JVGhlcmUgaXMgbm8gbGljZW5zZSBmZWUgZm9yIHRoZSBQcm9kdWN0LiAKK2IuCUlmIExpY2Vuc2VlIHdpc2hlcyB0byByZWNlaXZlIHRoZSBQcm9kdWN0IG9uIG1lZGlhLCB0aGVyZSBtYXkgYmUgYSBzbWFsbCAKK2NoYXJnZSBmb3IgdGhlIG1lZGlhIGFuZCBmb3Igc2hpcHBpbmcgYW5kIGhhbmRsaW5nLiBMaWNlbnNlZSBpcyByZXNwb25zaWJsZSBmb3IgCithbnkgYW5kIGFsbCB0YXhlcy4gCisKKzUuCVRFUk1JTkFUSU9OLiAKK2EuCVdpdGhvdXQgcHJlanVkaWNlIHRvIGFueSBvdGhlciByaWdodHMsIExpY2Vuc29yIG1heSB0ZXJtaW5hdGUgdGhpcyAKK0FncmVlbWVudCAxKSBhdCB0aGUgZW5kIG9mIHRoZSB0ZXN0IHBlcmlvZCwgYXMgZml4ZWQgYnkgTGljZW5zb3IgYW5kIHBvc3RlZCB0byAKK2l0cyBXZWIgc2l0ZSBvbiB0aGUgSW50ZXJuZXQgb3IgMikgaWYgTGljZW5zZWUgYnJlYWNoZXMgYW55IG9mIGl0cyB0ZXJtcyBhbmQgCitjb25kaXRpb25zLiBVcG9uIHRlcm1pbmF0aW9uLCBMaWNlbnNlZSBzaGFsbCBkZXN0cm95IGFsbCBjb3BpZXMgb2YgdGhlIFByb2R1Y3QuCisKKzYuCVBST1BSSUVUQVJZIFJJR0hUUy4gCithLglUaXRsZSwgb3duZXJzaGlwIHJpZ2h0cywgYW5kIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaW4gdGhlIFByb2R1Y3QgCitzaGFsbCByZW1haW4gaW4gU2Vjd2F5IGFuZC9vciBpdHMgc3VwcGxpZXJzLiAKK2IuCUxpY2Vuc2VlIGFja25vd2xlZGdlcyBzdWNoIG93bmVyc2hpcCBhbmQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyAKK2FuZCB3aWxsIG5vdCB0YWtlIGFueSBhY3Rpb24gdG8gamVvcGFyZGl6ZSwgbGltaXQgb3IgaW50ZXJmZXJlIGluIGFueSBtYW5uZXIgCit3aXRoIFNlY3dheSdzIG9yIGl0cyBzdXBwbGllcnMnIG93bmVyc2hpcCBvZiBvciByaWdodHMgd2l0aCByZXNwZWN0IHRvIHRoZSAKK1Byb2R1Y3QuIAorYy4JVGhlIFByb2R1Y3QgaXMgcHJvdGVjdGVkIGJ5IGNvcHlyaWdodCBhbmQgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IAorbGF3cyBhbmQgYnkgaW50ZXJuYXRpb25hbCB0cmVhdGllcy4gCitkLglUaXRsZSBhbmQgcmVsYXRlZCByaWdodHMgaW4gdGhlIGNvbnRlbnQgYWNjZXNzZWQgdGhyb3VnaCB0aGUgUHJvZHVjdCBpcyAKK3RoZSBwcm9wZXJ0eSBvZiB0aGUgYXBwbGljYWJsZSBjb250ZW50IG93bmVyIGFuZCBpcyBwcm90ZWN0ZWQgYnkgYXBwbGljYWJsZSBsYXcuIAorVGhlIGxpY2Vuc2UgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBnaXZlcyBMaWNlbnNlZSBubyByaWdodHMgdG8gc3VjaCAKK2NvbnRlbnQuICAKK2UuCVRoZSBuYW1lcyBTZWN3YXkgb3IgU2ltcCBvciBTaW1wU2VydmVyIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIAorcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gCitwZXJtaXNzaW9uLgorCis3LglESVNDTEFJTUVSIE9GIFdBUlJBTlRZLiAKK0JFQ0FVU0UgVEhFIFBST0dSQU0gSVMgTElDRU5TRUQgRlJFRSBPRiBDSEFSR0UsIFRIRVJFIElTIE5PIFdBUlJBTlRZIEZPUiBUSEUgCitQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCAKK0lOIFdSSVRJTkcgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORC9PUiBPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIFBST0dSQU0gIkFTIAorSVMiIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgCitOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgCitQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIAorUFJPR1JBTSBJUyBXSVRIIFlPVS4gU0hPVUxEIFRIRSBQUk9HUkFNIFBST1ZFIERFRkVDVElWRSwgWU9VIEFTU1VNRSBUSEUgQ09TVCBPRiAKK0FMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworOC4JTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuIAorVE8gVEhFIE1BWElNVU0gRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTCBMSUNFTlNPUiBPUiAKK0lUUyBTVVBQTElFUlMgT1IgUkVTRUxMRVJTIEJFIExJQUJMRSBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIAorQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT0YgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPRFVDVCwgCitJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgCitDT01QVVRFUiBGQUlMVVJFIE9SIE1BTEZVTkNUSU9OLCBPUiBBTlkgQU5EIEFMTCBPVEhFUiBDT01NRVJDSUFMIERBTUFHRVMgT1IgCitMT1NTRVMsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgVEhFUkVPRiwgQU5EIFJFR0FSRExFU1MgT0YgVEhFIExFR0FMIAorT1IgRVFVSVRBQkxFIFRIRU9SWSAoQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFKSBVUE9OIFdISUNIIFRIRSBDTEFJTSBJUyBCQVNFRC4gCitJTiBBTlkgQ0FTRSwgTElDRU5TT1InUyBFTlRJUkUgTElBQklMSVRZIFVOREVSIEFOWSBQUk9WSVNJT04gT0YgVEhJUyBBR1JFRU1FTlQgCitTSEFMTCBOT1QgRVhDRUVEIElOIFRIRSBBR0dSRUdBVEUgVEhFIFNVTSBPRiBUSEUgRkVFUyBMSUNFTlNFRSBQQUlEIEZPUiBUSElTIAorTElDRU5TRSAoSUYgQU5ZKSBBTkQgRkVFUyBGT1IgU1VQUE9SVCBPRiBUSEUgUFJPRFVDVCBSRUNFSVZFRCBCWSBTRUNXQVkgVU5ERVIgQSAKK1NFUEFSQVRFIFNVUFBPUlQgQUdSRUVNRU5UIChJRiBBTlkpLCBXSVRIIFRIRSBFWENFUFRJT04gT0YgREVBVEggT1IgUEVSU09OQUwgCitJTkpVUlkgQ0FVU0VEIEJZIFRIRSBORUdMSUdFTkNFIE9GIExJQ0VOU09SIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgCitQUk9ISUJJVFMgVEhFIExJTUlUQVRJT04gT0YgREFNQUdFUyBJTiBTVUNIIENBU0VTLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIAorQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTLCBTTyAKK1RISVMgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QgQkUgQVBQTElDQUJMRS4gU0VDV0FZIElTIE5PVCBSRVNQT05TSUJMRSAKK0ZPUiBBTlkgTElBQklMSVRZIEFSSVNJTkcgT1VUIE9GIENPTlRFTlQgUFJPVklERUQgQlkgTElDRU5TRUUgT1IgQSBUSElSRCBQQVJUWSAKK1RIQVQgSVMgQUNDRVNTRUQgVEhST1VHSCBUSEUgUFJPRFVDVCBBTkQvT1IgQU5ZIE1BVEVSSUFMIExJTktFRCBUSFJPVUdIIFNVQ0ggCitDT05URU5ULiAKKworOS4JRU5DUllQVElPTi4gCitUaGUgUHJvZHVjdCBjb250YWluaW5nIGVuY3J5cHRpb24gYWxnb3JpdGhtcyB0aGF0IG1heSBiZSBmb3JiaWRkZW4gYnkgY2VydGFpbiAKK2xlZ2lzbGF0aW9ucyBvciBpbiBjZXJ0YWluIHBhcnRzIG9mIHRoZSBXb3JsZCwgTGljZW5zZWUgbXVzdCBlbnN1cmUgaGltc2VsZiB0aGF0IAoraGUgaGFzIHRoZSBsZWdhbCByaWdodCB0byBpbXBvcnQgYW5kL29yIHVzZSB0aGUgUHJvZHVjdC4gV2hlbiByZWRpc3RyaWJ1dGluZyAKK2NvcGllcyBvZiB0aGUgUHJvZHVjdCBpbiBhY2NvcmRhbmNlIHdpdGggMS4gYW5kIDIuLCB0aGUgTGljZW5zZWUgc2hhbGwgYWxzbyAKK2Vuc3VyZSB0aGF0IGhlIGhhcyB0aGUgbGVnYWwgcmlnaHQgdG8gcmVkaXN0cmlidXRlIHN1Y2ggY29waWVzLCBlc3BlY2lhbGx5IHdoZW4gCitleHBvcnRpbmcgdGhlbS4gCisKKzEwLglISUdIIFJJU0sgQUNUSVZJVElFUy4gCitUaGUgUHJvZHVjdCBpcyBub3QgZmF1bHQtdG9sZXJhbnQgYW5kIGlzIG5vdCBkZXNpZ25lZCwgbWFudWZhY3R1cmVkIG9yIGludGVuZGVkIAorZm9yIHVzZSBvciByZXNhbGUgYXMgb24tbGluZSBjb250cm9sIGVxdWlwbWVudCBpbiBoYXphcmRvdXMgZW52aXJvbm1lbnRzIAorcmVxdWlyaW5nIGZhaWwtc2FmZSBwZXJmb3JtYW5jZSwgc3VjaCBhcyBpbiB0aGUgb3BlcmF0aW9uIG9mIG51Y2xlYXIgZmFjaWxpdGllcywgCithaXJjcmFmdCBuYXZpZ2F0aW9uIG9yIGNvbW11bmljYXRpb24gc3lzdGVtcywgYWlyIHRyYWZmaWMgY29udHJvbCwgZGlyZWN0IGxpZmUgCitzdXBwb3J0IG1hY2hpbmVzLCBvciB3ZWFwb25zIHN5c3RlbXMsIGluIHdoaWNoIHRoZSBmYWlsdXJlIG9mIHRoZSBQcm9kdWN0IGNvdWxkIAorbGVhZCBkaXJlY3RseSB0byBkZWF0aCwgcGVyc29uYWwgaW5qdXJ5LCBvciBzZXZlcmUgcGh5c2ljYWwgb3IgZW52aXJvbm1lbnRhbCAKK2RhbWFnZSAoIkhpZ2ggUmlzayBBY3Rpdml0aWVzIikuIEFjY29yZGluZ2x5LCBMaWNlbnNvciBhbmQgaXRzIHN1cHBsaWVycyAKK3NwZWNpZmljYWxseSBkaXNjbGFpbSBhbnkgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5IG9mIGZpdG5lc3MgZm9yIEhpZ2ggUmlzayAKK0FjdGl2aXRpZXMuIExpY2Vuc2VlIGFncmVlcyB0aGF0IExpY2Vuc29yIGFuZCBpdHMgc3VwcGxpZXJzIHdpbGwgbm90IGJlIGxpYWJsZSAKK2ZvciBhbnkgY2xhaW1zIG9yIGRhbWFnZXMgYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhlIFByb2R1Y3QgaW4gc3VjaCAKK2FwcGxpY2F0aW9ucy4gIAorCisxMS4JTUlTQ0VMTEFORU9VUy4gCithLglUaGlzIEFncmVlbWVudCBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzIAorY29uY2VybmluZyB0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiAKK2IuCVRoaXMgQWdyZWVtZW50IG1heSBiZSBhbWVuZGVkIG9ubHkgYnkgYSB3cml0aW5nIHNpZ25lZCBieSBib3RoIHBhcnRpZXMuIAorYy4JRXhjZXB0IHRvIHRoZSBleHRlbnQgYXBwbGljYWJsZSBsYXcsIGlmIGFueSwgcHJvdmlkZXMgb3RoZXJ3aXNlLCB0aGlzIAorQWdyZWVtZW50IHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIEZyYW5jZS4KK2QuCSBJZiBhbnkgcHJvdmlzaW9uIGluIHRoaXMgQWdyZWVtZW50IHNob3VsZCBiZSBoZWxkIGlsbGVnYWwgb3IgCit1bmVuZm9yY2VhYmxlIGJ5IGEgY291cnQgaGF2aW5nIGp1cmlzZGljdGlvbiwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgbW9kaWZpZWQgCit0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byByZW5kZXIgaXQgZW5mb3JjZWFibGUgd2l0aG91dCBsb3NpbmcgaXRzIGludGVudCwgb3IgCitzZXZlcmVkIGZyb20gdGhpcyBBZ3JlZW1lbnQgaWYgbm8gc3VjaCBtb2RpZmljYXRpb24gaXMgcG9zc2libGUsIGFuZCBvdGhlciAKK3Byb3Zpc2lvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgcmVtYWluIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdC4gCitlLglUaGUgY29udHJvbGxpbmcgbGFuZ3VhZ2Ugb2YgdGhpcyBBZ3JlZW1lbnQgaXMgRnJlbmNoLiBJZiBMaWNlbnNlZSBoYXMgCityZWNlaXZlZCBhIHRyYW5zbGF0aW9uIGludG8gYW5vdGhlciBsYW5ndWFnZSwgaXQgaGFzIGJlZW4gcHJvdmlkZWQgZm9yIAorTGljZW5zZWUncyBjb252ZW5pZW5jZSBvbmx5LiAKK2YuCUEgd2FpdmVyIGJ5IGVpdGhlciBwYXJ0eSBvZiBhbnkgdGVybSBvciBjb25kaXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQgb3IgCithbnkgYnJlYWNoIHRoZXJlb2YsIGluIGFueSBvbmUgaW5zdGFuY2UsIHNoYWxsIG5vdCB3YWl2ZSBzdWNoIHRlcm0gb3IgY29uZGl0aW9uIAorb3IgYW55IHN1YnNlcXVlbnQgYnJlYWNoIHRoZXJlb2YuIAorZy4JVGhlIHByb3Zpc2lvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgd2hpY2ggcmVxdWlyZSBvciBjb250ZW1wbGF0ZSAKK3BlcmZvcm1hbmNlIGFmdGVyIHRoZSBleHBpcmF0aW9uIG9yIHRlcm1pbmF0aW9uIG9mIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIAorZW5mb3JjZWFibGUgbm90d2l0aHN0YW5kaW5nIHNhaWQgZXhwaXJhdGlvbiBvciB0ZXJtaW5hdGlvbi4gCitoLglMaWNlbnNlZSBtYXkgbm90IGFzc2lnbiBvciBvdGhlcndpc2UgdHJhbnNmZXIgYnkgb3BlcmF0aW9uIG9mIGxhdyBvciAKK290aGVyd2lzZSB0aGlzIEFncmVlbWVudCBvciBhbnkgcmlnaHRzIG9yIG9ibGlnYXRpb25zIGhlcmVpbiBleGNlcHQgaW4gdGhlIGNhc2UgCitvZiBhIG1lcmdlciBvciB0aGUgc2FsZSBvZiBhbGwgb3Igc3Vic3RhbnRpYWxseSBhbGwgb2YgTGljZW5zZWUncyBhc3NldHMgdG8gCithbm90aGVyIGVudGl0eS4gCitpLglUaGlzIEFncmVlbWVudCBzaGFsbCBiZSBiaW5kaW5nIHVwb24gYW5kIHNoYWxsIGludXJlIHRvIHRoZSBiZW5lZml0IG9mIAordGhlIHBhcnRpZXMsIHRoZWlyIHN1Y2Nlc3NvcnMgYW5kIHBlcm1pdHRlZCBhc3NpZ25zLiAKK2ouCU5laXRoZXIgcGFydHkgc2hhbGwgYmUgaW4gZGVmYXVsdCBvciBiZSBsaWFibGUgZm9yIGFueSBkZWxheSwgZmFpbHVyZSBpbiAKK3BlcmZvcm1hbmNlIChleGNlcHRpbmcgdGhlIG9ibGlnYXRpb24gdG8gcGF5KSBvciBpbnRlcnJ1cHRpb24gb2Ygc2VydmljZSAKK3Jlc3VsdGluZyBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGZyb20gYW55IGNhdXNlIGJleW9uZCBpdHMgcmVhc29uYWJsZSBjb250cm9sLiAKK2suCVRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBMaWNlbnNvciBhbmQgTGljZW5zZWUgaXMgdGhhdCBvZiBpbmRlcGVuZGVudCAKK2NvbnRyYWN0b3JzIGFuZCBuZWl0aGVyIExpY2Vuc2VlIG5vciBpdHMgYWdlbnRzIHNoYWxsIGhhdmUgYW55IGF1dGhvcml0eSB0byBiaW5kIAorTGljZW5zb3IgaW4gYW55IHdheS4gCitsLglJZiBhbnkgZGlzcHV0ZSBhcmlzZXMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHRoZSBwcmV2YWlsaW5nIHBhcnR5IHNoYWxsIAorYmUgcmVpbWJ1cnNlZCBieSB0aGUgb3RoZXIgcGFydHkgZm9yIGFueSBhbmQgYWxsIGxlZ2FsIGZlZXMgYW5kIGNvc3RzIGFzc29jaWF0ZWQgCit0aGVyZXdpdGguIAorbS4JVGhlIGhlYWRpbmdzIHRvIHRoZSBzZWN0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBhcmUgdXNlZCBmb3IgY29udmVuaWVuY2UgCitvbmx5IGFuZCBzaGFsbCBoYXZlIG5vIHN1YnN0YW50aXZlIG1lYW5pbmcuIAorbi4JTGljZW5zb3IgbWF5IHVzZSBMaWNlbnNlZSdzIG5hbWUgaW4gYW55IGN1c3RvbWVyIHJlZmVyZW5jZSBsaXN0IG9yIGluIAorYW55IHByZXNzIHJlbGVhc2UgaXNzdWVkIGJ5IExpY2Vuc29yIHJlZ2FyZGluZyB0aGUgbGljZW5zaW5nIG9mIHRoZSBQcm9kdWN0IAorYW5kL29yIHByb3ZpZGUgTGljZW5zZWUncyBuYW1lIGFuZCB0aGUgbmFtZXMgb2YgdGhlIFByb2R1Y3QgbGljZW5zZWQgYnkgTGljZW5zZWUgCit0byB0aGlyZCBwYXJ0aWVzLiAKKworCisKK1tlbmQuXQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL3NpcCBiL2xpY2Vuc2VzL3NpcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjg2ZTY4Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvc2lwCkBAIC0wLDAgKzEsNDUgQEAKK1JJVkVSQkFOSyBDT01QVVRJTkcgTElNSVRFRCBMSUNFTlNFIEFHUkVFTUVOVCBGT1IgU0lQIDQuMy4xCisKKzEuIFRoaXMgTElDRU5TRSBBR1JFRU1FTlQgaXMgYmV0d2VlbiBSaXZlcmJhbmsgQ29tcHV0aW5nIExpbWl0ZWQKKygiUml2ZXJiYW5rIiksIGFuZCB0aGUgSW5kaXZpZHVhbCBvciBPcmdhbml6YXRpb24gKCJMaWNlbnNlZSIpIGFjY2Vzc2luZworYW5kIG90aGVyd2lzZSB1c2luZyBTSVAgNC4zLjEgc29mdHdhcmUgaW4gc291cmNlIG9yIGJpbmFyeSBmb3JtIGFuZCBpdHMKK2Fzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbi4KKworMi4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlIEFncmVlbWVudCwgUml2ZXJiYW5rCitoZXJlYnkgZ3JhbnRzIExpY2Vuc2VlIGEgbm9uZXhjbHVzaXZlLCByb3lhbHR5LWZyZWUsIHdvcmxkLXdpZGUgbGljZW5zZQordG8gcmVwcm9kdWNlLCBhbmFseXplLCB0ZXN0LCBwZXJmb3JtIGFuZC9vciBkaXNwbGF5IHB1YmxpY2x5LCBwcmVwYXJlCitkZXJpdmF0aXZlIHdvcmtzLCBkaXN0cmlidXRlLCBhbmQgb3RoZXJ3aXNlIHVzZSBTSVAgNC4zLjEgYWxvbmUgb3IgaW4KK2FueSBkZXJpdmF0aXZlIHZlcnNpb24sIHByb3ZpZGVkLCBob3dldmVyLCB0aGF0IFJpdmVyYmFuaydzIExpY2Vuc2UKK0FncmVlbWVudCBhbmQgUml2ZXJiYW5rJ3Mgbm90aWNlIG9mIGNvcHlyaWdodCwgaS5lLiwgIkNvcHlyaWdodCAoYykgMjAwNAorUml2ZXJiYW5rIENvbXB1dGluZyBMaW1pdGVkOyBBbGwgUmlnaHRzIFJlc2VydmVkIiBhcmUgcmV0YWluZWQgaW4KK1NJUCA0LjMuMSBhbG9uZSBvciBpbiBhbnkgZGVyaXZhdGl2ZSB2ZXJzaW9uIHByZXBhcmVkIGJ5IExpY2Vuc2VlLgorCiszLiBJbiB0aGUgZXZlbnQgTGljZW5zZWUgcHJlcGFyZXMgYSBkZXJpdmF0aXZlIHdvcmsgdGhhdCBpcyBiYXNlZCBvbgorb3IgaW5jb3Jwb3JhdGVzIFNJUCA0LjMuMSBvciBhbnkgcGFydCB0aGVyZW9mLCBhbmQgd2FudHMgdG8gbWFrZQordGhlIGRlcml2YXRpdmUgd29yayBhdmFpbGFibGUgdG8gb3RoZXJzIGFzIHByb3ZpZGVkIGhlcmVpbiwgdGhlbgorTGljZW5zZWUgaGVyZWJ5IGFncmVlcyB0byBpbmNsdWRlIGluIGFueSBzdWNoIHdvcmsgYSBicmllZiBzdW1tYXJ5IG9mCit0aGUgY2hhbmdlcyBtYWRlIHRvIFNJUCA0LjMuMS4KKworNC4gUml2ZXJiYW5rIGlzIG1ha2luZyBTSVAgNC4zLjEgYXZhaWxhYmxlIHRvIExpY2Vuc2VlIG9uIGFuICJBUyBJUyIKK2Jhc2lzLiAgUklWRVJCQU5LIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiBXQVJSQU5USUVTLCBFWFBSRVNTIE9SCitJTVBMSUVELiAgQlkgV0FZIE9GIEVYQU1QTEUsIEJVVCBOT1QgTElNSVRBVElPTiwgUklWRVJCQU5LIE1BS0VTIE5PIEFORAorRElTQ0xBSU1TIEFOWSBSRVBSRVNFTlRBVElPTiBPUiBXQVJSQU5UWSBPRiBNRVJDSEFOVEFCSUxJVFkgT1IgRklUTkVTUworRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgVEhBVCBUSEUgVVNFIE9GIFNJUCA0LjMuMSBXSUxMIE5PVAorSU5GUklOR0UgQU5ZIFRISVJEIFBBUlRZIFJJR0hUUy4KKworNS4gUklWRVJCQU5LIFNIQUxMIE5PVCBCRSBMSUFCTEUgVE8gTElDRU5TRUUgT1IgQU5ZIE9USEVSIFVTRVJTIE9GCitTSVAgNC4zLjEgRk9SIEFOWSBJTkNJREVOVEFMLCBTUEVDSUFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgTE9TUworQVMgQSBSRVNVTFQgT0YgTU9ESUZZSU5HLCBESVNUUklCVVRJTkcsIE9SIE9USEVSV0lTRSBVU0lORyBTSVAgNC4zLjEsCitPUiBBTlkgREVSSVZBVElWRSBUSEVSRU9GLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIFRIRVJFT0YuCisKKzYuIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB1cG9uIGEgbWF0ZXJpYWwKK2JyZWFjaCBvZiBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMuCisKKzcuIE5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIEFncmVlbWVudCBzaGFsbCBiZSBkZWVtZWQgdG8gY3JlYXRlIGFueQorcmVsYXRpb25zaGlwIG9mIGFnZW5jeSwgcGFydG5lcnNoaXAsIG9yIGpvaW50IHZlbnR1cmUgYmV0d2VlbiBSaXZlcmJhbmsKK2FuZCBMaWNlbnNlZS4gIFRoaXMgTGljZW5zZSBBZ3JlZW1lbnQgZG9lcyBub3QgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UKK1JpdmVyYmFuayB0cmFkZW1hcmtzIG9yIHRyYWRlIG5hbWUgaW4gYSB0cmFkZW1hcmsgc2Vuc2UgdG8gZW5kb3JzZSBvcgorcHJvbW90ZSBwcm9kdWN0cyBvciBzZXJ2aWNlcyBvZiBMaWNlbnNlZSwgb3IgYW55IHRoaXJkIHBhcnR5LgorCis4LiBCeSBjb3B5aW5nLCBpbnN0YWxsaW5nIG9yIG90aGVyd2lzZSB1c2luZyBTSVAgNC4zLjEsIExpY2Vuc2VlCithZ3JlZXMgdG8gYmUgYm91bmQgYnkgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9za3lwZS00LjAuMC43LWNvcHlyaWdodCBiL2xpY2Vuc2VzL3NreXBlLTQuMC4wLjctY29weXJpZ2h0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYwNzEyZjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9za3lwZS00LjAuMC43LWNvcHlyaWdodApAQCAtMCwwICsxLDIyNyBAQAorU2t5cGUgRW5kIFVzZXIgTGljZW5zZSBBZ3JlZW1lbnQKKworSU1QT1JUQU5UIOKAkyBQTEVBU0UgUkVBRCBDQVJFRlVMTFkKKworUGxlYXNlIG5vdGUgdGhlIGZvbGxvd2luZyBwcmVsaW1pbmFyeSB0ZXJtcywgd2hpY2ggdXNlIHNvbWUgb2YgdGhlIGRlZmluaXRpb25zIHNldCBvdXQgaW4gcGFyYWdyYXBoIDEgYmVsb3c6CisKK05vIEVtZXJnZW5jeSBDYWxsczogU2t5cGUgU29mdHdhcmUgZG9lcyBub3QgYW5kIGRvZXMgbm90IGludGVuZCB0byBzdXBwb3J0IG9yIGNhcnJ5IGVtZXJnZW5jeSBjYWxscy4gUGxlYXNlIGFsc28gc2VlIHBhcmFncmFwaHMgMy42IGFuZCA2LjIgYmVsb3cuCisKK1RoaXMgQWdyZWVtZW50OlRoaXMgQWdyZWVtZW50LCBhbmQgYW55IG5ldyB2ZXJzaW9ucywgYmV0d2VlbiBTa3lwZSBhbmQgWW91LCBjb3ZlcnMgYWxsIFlvdXIgdXNlIG9mIFNreXBlIFNvZnR3YXJlIGZyb20gYW55IHRlcm1pbmFscyB3aGVyZSBTa3lwZSBTb2Z0d2FyZSBoYXMgYmVlbiBpbnN0YWxsZWQsIGJ5IFlvdSBvciBieSB0aGlyZCBwYXJ0aWVzLiBZb3UgY2FuIGFjY2VwdCB0aGlzIEFncmVlbWVudCBieSBjbGlja2luZyBvbiB0aGUgQUNDRVBUIGJ1dHRvbiBvciBzaW1pbGFyIGJ1dHRvbnMgb3IgbGlua3MgYXMgbWF5IGJlIGRlc2lnbmF0ZWQgYnkgU2t5cGUuCisKK0FkZGl0aW9uYWwgVGVybXM6WW91ciBhZ3JlZW1lbnQgd2l0aCBTa3lwZSB3aWxsIGFsc28gaW5jbHVkZSB0aGUgQWRkaXRpb25hbCBUZXJtcyAoYXMgZGVmaW5lZCBiZWxvdykuIFRoZSBBZGRpdGlvbmFsIFRlcm1zIHNoYWxsIGluY2x1ZGUsIGJ1dCBhcmUgbm90IGxpbWl0ZWQgdG8sIHRoZSB0ZXJtcyBhbmQgcG9saWNpZXMgc2V0IG91dCBpbiBwYXJhZ3JhcGggNyBiZWxvdy4gSW4gb3JkZXIgdG8gdXNlIHRoZSBTa3lwZSBTZXJ2aWNlcywgWW91IG11c3QgYWNjZXB0IHRoZSBBZGRpdGlvbmFsIFRlcm1zLiBZb3UgY2FuIGFjY2VwdCB0aGUgQWRkaXRpb25hbCBUZXJtcyBieSAoaSkgY2xpY2tpbmcgdG8gYWNjZXB0IG9yIGFncmVlIHdoZXJlIHRoaXMgb3B0aW9uIGlzIG1hZGUgYXZhaWxhYmxlIHRvIFlvdSwgb3IgKGlpKSBieSBhY3R1YWxseSB1c2luZyB0aGUgU2t5cGUgU2VydmljZXMsIGluIHdoaWNoIGNhc2UgWW91IGFja25vd2xlZGdlIGFuZCBhZ3JlZSB0aGF0IFNreXBlIHdpbGwgdHJlYXQgc3VjaCB1c2UgYXMgYWNjZXB0YW5jZSBvZiB0aGUgYXBwbGljYWJsZSB0ZXJtcy4gWW91IGFja25vd2xlZGdlIGFuZCBhZ3JlZSB0aGF0IGJ5IGFjY2VwdGluZyB0aGlzIEFncmVlbWVudCBhbmQgdGhlIEFkZGl0aW9uYWwgVGVybXMgeW91IGFyZSBlbnRlcmluZyBpbnRvIGEgbGVnYWxseSBiaW5kaW5nIGNvbnRyYWN0LCB3aGljaCBjb2xsZWN0aXZlbHkgaXMgcmVmZXJyZWQgdG8gYmVsb3cgYXMgdGhlIOKAnFRlcm1z4oCdLiBJZiB0aGVyZSBpcyBhbnkgY29udHJhZGljdGlvbiBiZXR3ZWVuIHRoZSBBZGRpdGlvbmFsIFRlcm1zIGFuZCB0aGlzIEFncmVlbWVudCwgdGhlbiB0aGUgQWRkaXRpb25hbCBUZXJtcyBzaGFsbCB0YWtlIHByZWNlZGVuY2UgaW4gcmVsYXRpb24gdG8gdGhlIHJlbGV2YW50IFNreXBlIFNlcnZpY2UuIFlvdSBzaG91bGQgcHJpbnQgb2ZmIG9yIHNhdmUgYSBjb3B5IG9mIHRoZSBUZXJtcyBmb3IgeW91ciByZWNvcmRzLgorCitFbGVjdHJvbmljIFNpZ25hdHVyZShzKTogWW91IGhlcmVieSBhZ3JlZSB0byB0aGUgdXNlIG9mIGVsZWN0cm9uaWMgY29tbXVuaWNhdGlvbiBpbiBvcmRlciB0byBlbnRlciBpbnRvIGNvbnRyYWN0cywgcGxhY2Ugb3JkZXJzIGFuZCBjcmVhdGUgb3RoZXIgcmVjb3JkcyBhbmQgdG8gdGhlIGVsZWN0cm9uaWMgZGVsaXZlcnkgb2Ygbm90aWNlcywgcG9saWNpZXMgYW5kIHJlY29yZHMgb2YgdHJhbnNhY3Rpb25zIGluaXRpYXRlZCBvciBjb21wbGV0ZWQgdGhyb3VnaCB0aGUgU2t5cGUgU29mdHdhcmUuIEZ1cnRoZXJtb3JlLCBZb3UgaGVyZWJ5IHdhaXZlIGFueSByaWdodHMgb3IgcmVxdWlyZW1lbnRzIHVuZGVyIGFueSBsYXdzIG9yIHJlZ3VsYXRpb25zIGluIGFueSBqdXJpc2RpY3Rpb24gd2hpY2ggcmVxdWlyZSBhbiBvcmlnaW5hbCAobm9uLWVsZWN0cm9uaWMpIHNpZ25hdHVyZSBvciBkZWxpdmVyeSBvciByZXRlbnRpb24gb2Ygbm9uLWVsZWN0cm9uaWMgcmVjb3JkcywgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgdW5kZXIgYXBwbGljYWJsZSBtYW5kYXRvcnkgbGF3LgorCitKdXJpc2RpY3Rpb27igJlzIFJlc3RyaWN0aW9uczogSWYgdGhlIGxhdyBvZiBZb3VyIGNvdW50cnkgcHJvaGliaXRzIFlvdSBmcm9tIGRvd25sb2FkaW5nIG9yIHVzaW5nIFNreXBlIFNvZnR3YXJlIGJlY2F1c2UgWW91IGFyZSB1bmRlciB0aGUgYWdlIGxpbWl0IG9yIGJlY2F1c2UgdGhlIFNreXBlIFNlcnZpY2VzIGFyZSBub3QgYWxsb3dlZCBpbiBZb3VyIGNvdW50cnksIHBsZWFzZSBkb27igJl0IHVzZSBpdC4gCisKK1RhYmxlIG9mIGNvbnRlbnRzOgorRGVmaW5pdGlvbnMgCitMaWNlbnNlIGFuZCBSZXN0cmljdGlvbnMgCitXaGF0IFlvdSBzaG91bGQgYW5kIHNob3VsZCBub3QgZXhwZWN0IGZyb20gU2t5cGUgCitXaGF0IHdlIGV4cGVjdCBmcm9tIFlvdSAKK1Rlcm0sIFRlcm1pbmF0aW9uLCBVcGRhdGVzIAorRGlzY2xhaW1lciBvZiBXYXJyYW50aWVzIGFuZCBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eSAKK0FkZGl0aW9uYWwgVGVybXMgCitNaXNjZWxsYW5lb3VzIAorCisxLiBEZWZpbml0aW9ucyAKKzEuMSBUaGUgZm9sbG93aW5nIHRlcm1zIGFuZCBleHByZXNzaW9ucyBzaGFsbCBoYXZlIHRoZSBmb2xsb3dpbmcgbWVhbmluZ3M6CisKK0FkZGl0aW9uYWwgVGVybXM6IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBhbmQgcG9saWNpZXMgYXBwbGljYWJsZSB0byBZb3VyIHVzZSBvZiB0aGUgU2t5cGUgU29mdHdhcmUgYW5kIHRoZSBTa3lwZSBTZXJ2aWNlcywgaW4gYWRkaXRpb24gdG8gdGhpcyBBZ3JlZW1lbnQuCisKK0FmZmlsaWF0ZTogYW55IGNvcnBvcmF0aW9uLCBjb21wYW55IG9yIG90aGVyIGVudGl0eSB0aGF0IGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGgsIFNreXBlLiBGb3IgdGhlIHB1cnBvc2Ugb2YgdGhpcyBkZWZpbml0aW9uLCB0aGUgd29yZCAiY29udHJvbCIgc2hhbGwgbWVhbiB0aGUgZGlyZWN0IG9yIGluZGlyZWN0IG93bmVyc2hpcCBvZiBtb3JlIHRoYW4gZmlmdHkgcGVyY2VudCAoNTAlKSBvZiB0aGUgb3V0c3RhbmRpbmcgdm90aW5nIHN0b2NrIG9mIHRoZSBjb3Jwb3JhdGlvbiwgY29tcGFueSwgb3Igb3RoZXIgZW50aXR5LgorCitBZ3JlZW1lbnQ6IHRoaXMgRW5kIFVzZXIgTGljZW5zZSBBZ3JlZW1lbnQsIGFzIG1heSBiZSByZW5ld2VkIGFuZC9vciBhbWVuZGVkIGZyb20gdGltZSB0byB0aW1lLgorCitCcm9hZGNhc3QgVG9TOiBoYXMgdGhlIG1lYW5pbmcgZ2l2ZW4gdG8gaXQgaW4gcGFyYWdyYXBoIDIuOS4KKworQ29udGVudDogbWVhbnMgYW55IGFuZCBhbGwgY29udGVudCBjb25zaXN0aW5nIG9mIHRleHQsIHNvdW5kcywgcGljdHVyZXMsIHBob3RvcywgdmlkZW8gYW5kL29yIGFueSB0eXBlIG9mIGluZm9ybWF0aW9uIG9yIGNvbW11bmljYXRpb25zLgorCitEb2N1bWVudGF0aW9uOiBhbnkgb25saW5lIG9yIG90aGVyd2lzZSBlbmNsb3NlZCBkb2N1bWVudGF0aW9uIHByb3ZpZGVkIGJ5IFNreXBlLgorCitFZmZlY3RpdmUgRGF0ZTogdGhlIGRhdGUgb24gd2hpY2ggdGhpcyBBZ3JlZW1lbnQgaXMgZW50ZXJlZCBpbnRvIGJ5IGNsaWNraW5nIG9uIHRoZSBBQ0NFUFQgYnV0dG9uIGFzIHN0YXRlZCBhYm92ZSBvciB1cG9uIGluc3RhbGxhdGlvbiBvciB1c2Ugb2YgdGhlIFNreXBlIFNvZnR3YXJlIGJ5IFlvdSwgd2hpY2hldmVyIG9jY3VycyBlYXJsaWVyLgorCitFbWVyZ2VuY3kgU2VydmljZShzKTogbWVhbnMgc2VydmljZXMgdGhhdCBjb25uZWN0IGEgdXNlciB0byBlbWVyZ2VuY3kgc2VydmljZXMgcGVyc29ubmVsIG9yIHB1YmxpYyBzYWZldHkgYW5zd2VyaW5nIHBvaW50cyBwdXJzdWFudCB0byBhcHBsaWNhYmxlIGxvY2FsIGFuZCBvciBuYXRpb25hbCByZWd1bGF0b3J5IHJlcXVpcmVtZW50cy4KKworSVAgUmlnaHRzOiBtZWFucyAoaSkgcGF0ZW50cywgcGVuZGluZyBwYXRlbnQgYXBwbGljYXRpb25zLCBkZXNpZ25zLCB0cmFkZSBtYXJrcyBhbmQgdHJhZGUgbmFtZXMgKHdoZXRoZXIgcmVnaXN0ZXJlZCBvciB1bnJlZ2lzdGVyZWQpLCBjb3B5cmlnaHQgYW5kIHJlbGF0ZWQgcmlnaHRzLCBkYXRhYmFzZSByaWdodHMsIGtub3dob3cgYW5kIGNvbmZpZGVudGlhbCBpbmZvcm1hdGlvbjsgKGlpKSBhbGwgb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBhbmQgc2ltaWxhciBvciBlcXVpdmFsZW50IHJpZ2h0cyBhbnl3aGVyZSBpbiB0aGUgd29ybGQgd2hpY2ggY3VycmVudGx5IGV4aXN0IG9yIGFyZSByZWNvZ25pc2VkIGluIHRoZSBmdXR1cmU7IGFuZCAoaWlpKSBhcHBsaWNhdGlvbnMsIGV4dGVuc2lvbnMgYW5kIHJlbmV3YWxzIGluIHJlbGF0aW9uIHRvIGFueSBzdWNoIHJpZ2h0cy4KKworUGFzc3dvcmQ6IHJlZmVycyB0byBhIGNvZGUgWW91IHNlbGVjdCwgd2hpY2gsIGluIGNvbWJpbmF0aW9uIHdpdGggdGhlIFVzZXIgSUQsIGdpdmVzIFlvdSBhY2Nlc3MgdG8gWW91ciBVc2VyIEFjY291bnQuCisKK1NreXBlOiByZWZlcnMgdG8gdGhlIGNvbXBhbnkgZXN0YWJsaXNoZWQgdW5kZXIgdGhlIGxhd3Mgb2YgTHV4ZW1ib3VyZywgU2t5cGUgU29mdHdhcmUgUy5hLnIubCwgd2l0aCBpdHMgYWRkcmVzcyBhdCAyMi8yNCBCb3VsZXZhcmQgUm95YWwgTC0yNDQ5IEx1eGVtYm91cmcgKEIxMDA0NjcpLCBWQVQgbm8uIChMVTIwMTgwMjM5KS4KKworU2t5cGUgQVBJOiBhcHBsaWNhdGlvbiBwcm9ncmFtIGludGVyZmFjZSBjb25zaXN0aW5nIG9mIHRoZSBzZXQgb2Ygcm91dGluZXMgdXRpbGl6ZWQgYnkgdGhlIFNreXBlIFNvZnR3YXJlIHRvIHByb3ZpZGUgdGhlIFNreXBlIFNvZnR3YXJlIGZ1bmN0aW9uYWxpdHkgZm9yIGEgZ2l2ZW4gcGxhdGZvcm0gb3Igb3BlcmF0aW5nIHN5c3RlbSwgU2t5cGUgQVBJIGJlaW5nIGluY2x1ZGVkIGluIG9yIGxpbmtlZCB0byB0aGUgU2t5cGUgU29mdHdhcmUgYXMgd2VsbCBhcyBhbnkgZnV0dXJlIHZlcnNpb25zLCBpbXByb3ZlbWVudHMsIGRldmVsb3BtZW50cywgcHJvZ3JhbW1pbmcgZml4ZXMsIHVwZGF0ZXMgYW5kIHVwZ3JhZGVzIHRoZXJlb2YuCisKK1NreXBlIE9ubGluZSBNYXRlcmlhbDogdGhlIFNreXBlIGJ1dHRvbnMgYW5kIHdpZGdldHMgYXZhaWxhYmxlIGZvciBkb3dubG9hZCBvbiB0aGUgU2t5cGUgV2Vic2l0ZSBhdCBodHRwOi8vd3d3LnNreXBlLmNvbS9zaGFyZS9idXR0b25zLywgYXMgc3VjaCBtYXkgYmUgY2hhbmdlZCBmcm9tIHRpbWUgdG8gdGltZSBieSBTa3lwZSBpbiBpdHMgc29sZSBkaXNjcmV0aW9uLgorCitTa3lwZSBQcm9tb3Rpb25hbCBNYXRlcmlhbHM6IGFueSBhbmQgYWxsIHRyYWRlbWFya3MsIG5hbWVzLCBzaWducywgbG9nb3MsIGJhbm5lcnMsIGFuZCBhbnkgb3RoZXIgbWF0ZXJpYWxzLCBpbiB3aGF0ZXZlciBmb3JtLCBvd25lZCBhbmQvb3IgdXNlZCBieSBTa3lwZSBmb3IgdGhlIHByb21vdGlvbiBvZiBpdHMgY29tcGFueSwgaXRzIHByb2R1Y3RzIGFuZCBhY3Rpdml0aWVzLCBvdGhlciB0aGFuIHRoZSBTa3lwZSBPbmxpbmUgTWF0ZXJpYWwuIAorCitTa3lwZSBTZXJ2aWNlczogdGhlIFNreXBlIFdlYnNpdGUgYW5kIGFueSBvdGhlciBwcm9kdWN0cyBhbmQgc2VydmljZXMgbWFkZSBhdmFpbGFibGUgdG8gWW91IGJ5IFNreXBlIG9yIGl0cyBBZmZpbGlhdGVzLCBpbiBhZGRpdGlvbiB0byB0aGUgU2t5cGUgU29mdHdhcmUuCisKK1NreXBlIFNvZnR3YXJlOiB0aGUgc29mdHdhcmUgZGlzdHJpYnV0ZWQgYnkgU2t5cGUgZm9yIGludGVybmV0IGNvbW11bmljYXRpb24gYXBwbGljYXRpb25zLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSBTa3lwZSBBUEksIFVJIGFuZCBEb2N1bWVudGF0aW9uLCBhcyB3ZWxsIGFzIGFueSBmdXR1cmUgdmVyc2lvbnMsIGltcHJvdmVtZW50cywgZGV2ZWxvcG1lbnRzLCBwcm9ncmFtbWluZyBmaXhlcywgdXBkYXRlcyBhbmQgdXBncmFkZXMgdGhlcmVvZi4KKworU2t5cGUgU3RhZmY6IHRoZSBvZmZpY2VycywgZGlyZWN0b3JzLCBlbXBsb3llZXMgYW5kIGFnZW50cyBvZiBTa3lwZSBvciBpdHMgQWZmaWxpYXRlcywgb3IgYW55IG90aGVyIHBlcnNvbnMgaGlyZWQgYnkgU2t5cGUgb3IgaXRzIEFmZmlsaWF0ZXMuCisKK1NreXBlIFdlYnNpdGU6IGFueSBhbmQgYWxsIGVsZW1lbnRzLCBjb250ZW50cyBhbmQgdGhlIOKAmGxvb2sgYW5kIGZlZWzigJkgb2YgdGhlIHdlYnNpdGUgYXZhaWxhYmxlIHVuZGVyIHRoZSBVUkwsIHd3dy5za3lwZS5jb20gLCDigJMgYW1vbmcgb3RoZXIgVVJM4oCZcyDigJMsIGZyb20gd2hpY2ggd2Vic2l0ZSB0aGUgU2t5cGUgU29mdHdhcmUgY2FuIGJlIGRvd25sb2FkZWQuCisKK1Rlcm1zOiBoYXMgdGhlIG1lYW5pbmcgZ2l2ZW4gaW4gdGhlIOKAnEFkZGl0aW9uYWwgVGVybXPigJ0gcHJlbGltaW5hcnkgdGVybSBhYm92ZS4KKworVUk6IHRoZSB1c2VyIGludGVyZmFjZSBvZiB0aGUgU2t5cGUgU29mdHdhcmUuCisKK1VzZXIgQWNjb3VudDogcmVmZXJzIHRvIHRoZSBhY2NvdW50IHdpdGggVXNlciBJRCBhbmQgUGFzc3dvcmQgdGhhdCBZb3UgY3JlYXRlIGZvciBZb3VyIHVzZSBvZiB0aGUgU2t5cGUgU29mdHdhcmUuCisKK1VzZXIgSUQ6IHJlZmVycyB0byBhbiBpZGVudGlmaWNhdGlvbiBjb2RlIFlvdSBzZWxlY3RlZCwgd2hpY2ggaW4gY29tYmluYXRpb24gd2l0aCB0aGUgUGFzc3dvcmQsIGdpdmVzIGFjY2VzcyB0byBZb3VyIFVzZXIgQWNjb3VudC4KKworWW91OiBZb3UsIHRoZSBlbmQgdXNlciBvZiB0aGUgU2t5cGUgU29mdHdhcmUsIGFsc28gdXNlZCBpbiB0aGUgZm9ybSDigJxZb3Vy4oCdIHdoZXJlIGFwcGxpY2FibGUuCisKKworMS4yIFJlZmVyZW5jZXMgdG8gdGhlIHNpbmd1bGFyIGluY2x1ZGUgdGhlIHBsdXJhbCBhbmQgdmljZSB2ZXJzYSwgYW5kIHJlZmVyZW5jZXMgdG8gb25lIGdlbmRlciBpbmNsdWRlIHRoZSBvdGhlciBnZW5kZXIuCisKKzEuMyBBbnkgcGhyYXNlIGludHJvZHVjZWQgYnkgdGhlIGV4cHJlc3Npb25zIOKAnGluY2x1ZGluZ+KAnSwg4oCcaW5jbHVkZeKAnSwg4oCcaW4gcGFydGljdWxhcuKAnSBvciBhbnkgc2ltaWxhciBleHByZXNzaW9uIHNoYWxsIGJlIGNvbnN0cnVlZCBhcyBpbGx1c3RyYXRpdmUgYW5kIHNoYWxsIG5vdCBsaW1pdCB0aGUgc2Vuc2Ugb2YgdGhlIHdvcmRzIHByZWNlZGluZyB0aG9zZSB0ZXJtcy4gCisKKzIuIExpY2Vuc2UgYW5kIFJlc3RyaWN0aW9ucyAKKzIuMSBMaWNlbnNlOiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCwgU2t5cGUgaGVyZWJ5IGdyYW50cyBZb3UgYSBsaW1pdGVkLCBwZXJzb25hbCwgbm9uLWNvbW1lcmNpYWwsIG5vbi1leGNsdXNpdmUsIG5vbi1zdWJsaWNlbnNhYmxlLCBub24tYXNzaWduYWJsZSwgZnJlZSBvZiBjaGFyZ2UgbGljZW5zZSB0byBkb3dubG9hZCwgaW5zdGFsbCBhbmQgdXNlIHRoZSBTa3lwZSBTb2Z0d2FyZSBvbiBZb3VyIGNvbXB1dGVyLCBwaG9uZSBvciBQREEgZm9yIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcGVyc29uYWxseSB1c2luZyB0aGUgaW50ZXJuZXQgY29tbXVuaWNhdGlvbiBhcHBsaWNhdGlvbnMgcHJvdmlkZWQgYnkgU2t5cGUgYW5kIGFueSBvdGhlciBhcHBsaWNhdGlvbnMgdGhhdCBtYXkgYmUgZXhwbGljaXRseSBwcm92aWRlZCBieSBTa3lwZS4gWW91IGFyZSBhbGxvd2VkIHRvIHVzZSB0aGUgU2t5cGUgU29mdHdhcmUgYXQgdW5pdmVyc2l0eSBvciBhbnkgb3RoZXIgZWR1Y2F0aW9uYWwgaW5zdGl0dXRpb24sIHN1YmplY3QgdG8gcGFyYWdyYXBoIDQuNCBiZWxvdyBhbmQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50IGFuZCBhbnkgYXBwbGljYWJsZSBBZGRpdGlvbmFsIFRlcm1zLiBZb3UgYXJlIGFsbG93ZWQgdG8gdXNlIHRoZSBTa3lwZSBTb2Z0d2FyZSBhdCB3b3JrIHRvIG1ha2UgY29tbXVuaWNhdGlvbnMgcmVsYXRpbmcgdG8gWW91ciBidXNpbmVzcyBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBhcHBsaWNhYmxlIEFkZGl0aW9uYWwgVGVybXMgKHN1Y2ggYXMgdGhlIFRlcm1zIG9mIFNlcnZpY2UgcmVmZXJyZWQgdG8gaW4gcGFyYWdyYXBoIDcgYmVsb3cgaWYgWW91IHVzZSB0aGUgcGF5YWJsZSBWb0lQIHByb2R1Y3RzIGFuZC9vciBhcmUgYSBNZW1iZXIgb3IgYW4gQWRtaW5pc3RyYXRvciBvZiBhIEJ1c2luZXNzIENvbnRyb2wgUGFuZWwpLgorCisyLjIgTm8gR3JhbnRpbmcgb2YgUmlnaHRzIHRvIFRoaXJkIFBhcnRpZXM6IFlvdSB3aWxsIG5vdCBzZWxsLCBhc3NpZ24sIHJlbnQsIGxlYXNlLCBkaXN0cmlidXRlLCBleHBvcnQsIGltcG9ydCwgYWN0IGFzIGFuIGludGVybWVkaWFyeSBvciBwcm92aWRlciwgb3Igb3RoZXJ3aXNlIGdyYW50IHJpZ2h0cyB0byB0aGlyZCBwYXJ0aWVzIHdpdGggcmVnYXJkIHRvIHRoZSBTa3lwZSBTb2Z0d2FyZSBvciBhbnkgcGFydCB0aGVyZW9mLgorCisyLjMgTm8gTW9kaWZpY2F0aW9uczogWW91IHdpbGwgbm90IHVuZGVydGFrZSwgY2F1c2UsIHBlcm1pdCBvciBhdXRob3JpemUgdGhlIG1vZGlmaWNhdGlvbiwgY3JlYXRpb24gb2YgZGVyaXZhdGl2ZSB3b3JrcywgdHJhbnNsYXRpb24sIHJldmVyc2UgZW5naW5lZXJpbmcsIGRlY29tcGlsaW5nLCBkaXNhc3NlbWJsaW5nIG9yIGhhY2tpbmcgb2YgdGhlIFNreXBlIFNvZnR3YXJlIG9yIGFueSBwYXJ0IHRoZXJlb2YgZXhjZXB0IHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IGxhdy4KKworMi40IFRoaXJkIFBhcnRpZXM6IFRoZSBTa3lwZSBTb2Z0d2FyZSBtYXkgYmUgaW5jb3Jwb3JhdGVkIGludG8sIGFuZCBtYXkgaW5jb3Jwb3JhdGUgaXRzZWxmLCBzb2Z0d2FyZSBhbmQgb3RoZXIgdGVjaG5vbG9neSBvd25lZCBhbmQgY29udHJvbGxlZCBieSB0aGlyZCBwYXJ0aWVzLiBBbnkgc3VjaCB0aGlyZCBwYXJ0eSBzb2Z0d2FyZSBvciB0ZWNobm9sb2d5IHRoYXQgaXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBTa3lwZSBTb2Z0d2FyZSBmYWxscyB1bmRlciB0aGUgc2NvcGUgb2YgdGhpcyBBZ3JlZW1lbnQuIEFueSBhbmQgYWxsIG90aGVyIHRoaXJkIHBhcnR5IHNvZnR3YXJlIG9yIHRlY2hub2xvZ3kgdGhhdCBtYXkgYmUgZGlzdHJpYnV0ZWQgdG9nZXRoZXIgd2l0aCB0aGUgU2t5cGUgU29mdHdhcmUgd2lsbCBiZSBzdWJqZWN0IHRvIFlvdSBleHBsaWNpdGx5IGFjY2VwdGluZyBhIGxpY2Vuc2UgYWdyZWVtZW50IHdpdGggdGhhdCB0aGlyZCBwYXJ0eS4gWW91IGFja25vd2xlZGdlIGFuZCBhZ3JlZSB0aGF0IFlvdSB3aWxsIG5vdCBlbnRlciBpbnRvIGEgY29udHJhY3R1YWwgcmVsYXRpb25zaGlwIHdpdGggU2t5cGUgb3IgaXRzIEFmZmlsaWF0ZXMgcmVnYXJkaW5nIHN1Y2ggdGhpcmQgcGFydHkgc29mdHdhcmUgb3IgdGVjaG5vbG9neSBhbmQgeW91IHdpbGwgbG9vayBzb2xlbHkgdG8gdGhlIGFwcGxpY2FibGUgdGhpcmQgcGFydHkgYW5kIG5vdCB0byBTa3lwZSBvciBpdHMgQWZmaWxpYXRlcyB0byBlbmZvcmNlIGFueSBvZiB5b3VyIHJpZ2h0cy4KKworMi41IEV4Y2x1c2l2ZSBPd25lcnNoaXA6IEFueSBhbmQgYWxsIElQIFJpZ2h0cyBpbiB0aGUgU2t5cGUgU29mdHdhcmUsIHRoZSBTa3lwZSBXZWJzaXRlLCB0aGUgU2t5cGUgT25saW5lIE1hdGVyaWFsIGFuZCB0aGUgU2t5cGUgUHJvbW90aW9uYWwgTWF0ZXJpYWxzIGFyZSBhbmQgc2hhbGwgcmVtYWluIHRoZSBleGNsdXNpdmUgcHJvcGVydHkgb2YgU2t5cGUgYW5kL29yIGl0cyBsaWNlbnNvcnMuIE5vdGhpbmcgaW4gdGhpcyBBZ3JlZW1lbnQgaW50ZW5kcyB0byB0cmFuc2ZlciBhbnkgc3VjaCBJUCBSaWdodHMgdG8sIG9yIHRvIHZlc3QgYW55IHN1Y2ggSVAgUmlnaHRzIGluLCBZb3UuIFlvdSBhcmUgb25seSBlbnRpdGxlZCB0byB0aGUgbGltaXRlZCB1c2Ugb2YgdGhlIElQIFJpZ2h0cyBncmFudGVkIHRvIFlvdSBpbiB0aGlzIEFncmVlbWVudC4gWW91IHdpbGwgbm90IHRha2UgYW55IGFjdGlvbiB0byBqZW9wYXJkaXplLCBsaW1pdCBvciBpbnRlcmZlcmUgd2l0aCBTa3lwZeKAmXMgSVAgUmlnaHRzLiBBbnkgdW5hdXRob3JpemVkIHVzZSBvZiBTa3lwZeKAmXMgSVAgUmlnaHRzIGlzIGEgdmlvbGF0aW9uIG9mIHRoaXMgQWdyZWVtZW50IGFzIHdlbGwgYXMgYSB2aW9sYXRpb24gb2YgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3MgYW5kIHRyZWF0aWVzLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGNvcHlyaWdodCBsYXdzIGFuZCB0cmFkZW1hcmsgbGF3cy4gQWxsIHRpdGxlIGFuZCBJUCBSaWdodHMgaW4gYW5kIHRvIGFueSB0aGlyZCBwYXJ0eSBjb250ZW50IHRoYXQgaXMgbm90IGNvbnRhaW5lZCBpbiB0aGUgU2t5cGUgU29mdHdhcmUsIGJ1dCBtYXkgYmUgYWNjZXNzZWQgdGhyb3VnaCB1c2Ugb2YgdGhlIFNreXBlIFNvZnR3YXJlLCBpcyB0aGUgcHJvcGVydHkgb2YgdGhlIHJlc3BlY3RpdmUgY29udGVudCBvd25lcnMgYW5kIG1heSBiZSBwcm90ZWN0ZWQgYnkgYXBwbGljYWJsZSBjb3B5cmlnaHQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3MgYW5kIHRyZWF0aWVzLgorCisyLjYgTm8gUmVtb3ZhbCBvZiBOb3RpY2VzOiBZb3UgYWdyZWUgdGhhdCBZb3Ugd2lsbCBub3QgcmVtb3ZlLCBvYnNjdXJlLCBtYWtlIGlsbGVnaWJsZSBvciBhbHRlciBhbnkgbm90aWNlcyBvciBpbmRpY2F0aW9ucyBvZiB0aGUgSVAgUmlnaHRzIGFuZC9vciBTa3lwZeKAmXMgcmlnaHRzIGFuZCBvd25lcnNoaXAgdGhlcmVvZiwgd2hldGhlciBzdWNoIG5vdGljZSBvciBpbmRpY2F0aW9ucyBhcmUgYWZmaXhlZCBvbiwgY29udGFpbmVkIGluIG9yIG90aGVyd2lzZSBjb25uZWN0ZWQgdG8gYW55IG1hdGVyaWFscy4KKworMi43IFVzZSBvZiBTa3lwZSBBUEkuCisKKzIuNy4xIFlvdSBtYXkgbWFrZSB1c2Ugb2YgdGhlIFNreXBlIEFQSSBwcm92aWRlZCB0aGF0OgorCisoaSkgWW91IGNvbXBseSB3aXRoIHRoZSBTa3lwZSBBUEkgVGVybXMgb2YgVXNlIGF0IGh0dHA6Ly93d3cuc2t5cGUuY29tL2xlZ2FsL3Rlcm1zL2FwaS8gOyAKKworKGlpKSBZb3VyIHVzZSBvZiB0aGUgU2t5cGUgQVBJIGlzIGZvciBsZWdpdGltYXRlIHB1cnBvc2VzIG9ubHkgYW5kIHNoYWxsIG5vdCBhZHZlcnNlbHkgYWZmZWN0IHRoZSBmdW5jdGlvbmFsaXR5IG9yIHBlcmZvcm1hbmNlIG9mIHRoZSBTa3lwZSBTb2Z0d2FyZSBvciBzZXJ2aWNlcyBwcm92aWRlZCBieSBTa3lwZTsgYW5kCisKKyhpaWkpIFlvdSB3aWxsIG1vbml0b3IgdGhlIFNreXBlIFdlYnNpdGUgaW4gb3JkZXIgdG8gZW5zdXJlIHRoYXQgWW91IGFyZSBhd2FyZSBvZiBhbnkgY2hhbmdlcyBpbiB0aGUgU2t5cGUgQVBJIFRlcm1zIG9mIFVzZS4gSWYgc3VjaCBjaGFuZ2VzIGFyZSBub3QgYWNjZXB0YWJsZSB0byBZb3UsIFlvdSB3aWxsIGltbWVkaWF0ZWx5IHN0b3AgdXNpbmcgdGhlIFNreXBlIEFQSSBhbmQsIHdoZXJlIGFwcGxpY2FibGUsIHRoZSBTa3lwZSBTb2Z0d2FyZS4gCisKKzIuNy4yIElmIFlvdSBhcmUgaW50ZXJlc3RlZCBpbiB1c2luZyB0aGUgU2t5cGUgQVBJIGZvciBhIHB1cnBvc2Ugd2hpY2ggaXMgbm90IHBlcm1pdHRlZCB1bmRlciB0aGlzIEFncmVlbWVudCBvciB0aGUgU2t5cGUgQVBJIFRlcm1zIG9mIFVzZSwgWW91IHdpbGwgaGF2ZSB0byBvYnRhaW4gU2t5cGXigJlzIHByaW9yIHdyaXR0ZW4gY29uc2VudCBhbmQgZXhwbGljaXRseSBhZ3JlZSB1cG9uIGFueSBmdXJ0aGVyIGNvbW1lcmNpYWwgdGVybXMuCisKKzIuOCBTa3lwZSBQcm9tb3Rpb25hbCBNYXRlcmlhbHM6IE5vdGhpbmcgaW4gdGhpcyBBZ3JlZW1lbnQgd2lsbCBnaXZlIFlvdSBhbnkgcmlnaHQgdG8gdXNlIHRoZSBTa3lwZSBQcm9tb3Rpb25hbCBNYXRlcmlhbHMuIAorCisyLjkgQnJvYWRjYXN0cyBVc2luZyBTa3lwZSBTb2Z0d2FyZTogTkV4Y2VwdCBhcyBleHByZXNzbHkgcGVybWl0dGVkIGluIHRoZSBCcm9hZGNhc3QgVGVybXMgYW5kIENvbmRpdGlvbnMgYXQgaHR0cDovL3d3dy5za3lwZS5jb20vbGVnYWwvdGVybXMvYnJvYWRjYXN0LyAoIkJyb2FkY2FzdCBUb1MiKSwgWW91IGFyZSBub3QgYWxsb3dlZCB0byB1c2UgdGhlIFNreXBlIFNvZnR3YXJlIGluIGNvbm5lY3Rpb24gd2l0aCBhbnkgQnJvYWRjYXN0cyAoYXMgZGVmaW5lZCBpbiBzdWNoIEJyb2FkY2FzdCBUb1MpLgorCiszLiBXaGF0IFlvdSBzaG91bGQgYW5kIHNob3VsZCBub3QgZXhwZWN0IGZyb20gU2t5cGUgCiszLjEgTm8gV2FycmFudGllczpJbnN0YWxsaW5nIFNreXBlIFNvZnR3YXJlIGVuYWJsZXMgWW91IHRvIGNvbW11bmljYXRlIHdpdGggb3RoZXIgcGVvcGxlLiBTa3lwZSBjYW5ub3QgZ3VhcmFudGVlIHRoYXQgWW91IHdpbGwgYWx3YXlzIGJlIGFibGUgdG8gY29tbXVuaWNhdGUgd2l0aCBvdGhlciBwZW9wbGUsIG5vciBjYW4gU2t5cGUgZ3VhcmFudGVlIHRoYXQgWW91IGNhbiBjb21tdW5pY2F0ZSB3aXRob3V0IGRpc3J1cHRpb25zLCBkZWxheXMgb3IgY29tbXVuaWNhdGlvbi1yZWxhdGVkIGZsYXdzIG9yIHRoYXQgYWxsIFlvdXIgY29tbXVuaWNhdGlvbnMgc2hhbGwgYWx3YXlzIGJlIGRlbGl2ZXJlZCB0byBvdGhlciBwZW9wbGUuCisKKzMuMiBDb250ZW50CiszLjIuMSBDb250ZW50IG9mIENvbW11bmljYXRpb25zOlRoZSBjb250ZW50IG9mIHRoZSBjb21tdW5pY2F0aW9uIHNwcmVhZCBieSB0aGUgdXNlIG9mIHRoZSBTa3lwZSBTb2Z0d2FyZSBpcyBlbnRpcmVseSB0aGUgcmVzcG9uc2liaWxpdHkgb2YgdGhlIHBlcnNvbiBmcm9tIHdob20gc3VjaCBjb250ZW50IG9yaWdpbmF0ZWQuIFlvdSB1bmRlcnN0YW5kLCB0aGVyZWZvcmUsIHRoYXQgYnkgdXNpbmcgdGhlIFNreXBlIFNvZnR3YXJlIGFuZCB0aGUgU2t5cGUgU2VydmljZXMgWW91IG1heSBiZSBleHBvc2VkIHRvIGNvbnRlbnQgdGhhdCBpcyBvZmZlbnNpdmUsIGhhcm1mdWwgdG8gbWlub3JzLCBpbmRlY2VudCBvciBvdGhlcndpc2Ugb2JqZWN0aW9uYWJsZSwgYW5kIHRoYXQgWW91IHVzZSB0aGUgU2t5cGUgU29mdHdhcmUgYW5kIHRoZSBTa3lwZSBTZXJ2aWNlcyBhdCBZb3VyIG93biByaXNrLgorCiszLjIuMiBZb3UgYWNrbm93bGVkZ2UgYW5kIGFncmVlIHRoYXQgWW91IGFyZSBzb2xlbHkgcmVzcG9uc2libGUgZm9yIGFueSBDb250ZW50IHRoYXQgWW91IHVwbG9hZCwgc3VibWl0LCBwb3N0LCB0cmFuc21pdCBvciBkaXNwbGF5IHRocm91Z2ggdGhlIFNreXBlIFNvZnR3YXJlICjigJxVc2XigJ0gb3Ig4oCcVXNlZOKAnSkgYW5kIHRoYXQgU2t5cGUgaXMgbm90IHJlc3BvbnNpYmxlIHRvIFlvdSBvciBhbnkgdGhpcmQgcGFydHkgZm9yIGFueSBDb250ZW50IHRoYXQgaXMgVXNlZCBieSBZb3Ugb3IgYW55IG90aGVyIFNreXBlIFNvZnR3YXJlIHVzZXIuCisKKzMuMi4zIFRoaXJkIFBhcnR5IElQIFJpZ2h0czogWW91IGFncmVlIHRoYXQgWW91IHNoYWxsIG5vdCBVc2UgYW55IENvbnRlbnQgdGhhdCBpcyBzdWJqZWN0IHRvIGFueSB0aGlyZCBwYXJ0eSBJUCBSaWdodHMsIHVubGVzcyB5b3UgaGF2ZSBhIGxpY2VuY2Ugb3Igc3BlY2lmaWMgcGVybWlzc2lvbiBmcm9tIHRoZSBvd25lciB0byBVc2Ugc3VjaCB0aGlyZCBwYXJ0eSBjb250ZW50LCBhbmQgdG8gZ3JhbnQgU2t5cGUgdGhlIGxpY2VuY2Ugc2V0IG91dCBpbiBwYXJhZ3JhcGggMy4yLjQgYmVsb3cuCisKKzMuMi40IExpY2VuY2U6IFlvdSBoZXJlYnkgZ3JhbnQgdG8gU2t5cGUgYSBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIHBlcnBldHVhbCwgaXJyZXZvY2FibGUsIHJveWFsdHktZnJlZSwgc3VibGljZW5zYWJsZSBhbmQgdHJhbnNmZXJhYmxlIGxpY2VuY2UgdG8gVXNlIHRoZSBDb250ZW50IGluIGFueSBtZWRpYSBpbiBjb25uZWN0aW9uIHdpdGggdGhlIFNreXBlIFNlcnZpY2VzLgorCiszLjIuNSBSZW1vdmFsIG9mIENvbnRlbnQ6IFNreXBlIHJlc2VydmVzIHRoZSByaWdodCAoYnV0IHNoYWxsIGhhdmUgbm8gb2JsaWdhdGlvbikgdG8gZGVjaWRlIHdoZXRoZXIgYW55IENvbnRlbnQgdGhhdCBZb3UgVXNlIGNvbXBsaWVzIHdpdGggdGhpcyBBZ3JlZW1lbnQgYW5kIGFueSBBZGRpdGlvbmFsIFRlcm1zLiBTa3lwZSBtYXkgaW4gaXRzIHNvbGUgZGlzY3JldGlvbiByZW1vdmUgc3VjaCBDb250ZW50IGFuZC9vciB0ZXJtaW5hdGUgdGhpcyBBZ3JlZW1lbnQgYW5kIFlvdXIgVXNlciBBY2NvdW50IGlmIFlvdSBVc2UgYW55IENvbnRlbnQgdGhhdCBpcyBpbiBicmVhY2ggb2YgdGhpcyBBZ3JlZW1lbnQgYW5kL29yIGFueSBBZGRpdGlvbmFsIFRlcm1zIGF0IGFueSB0aW1lIGFuZCB3aXRob3V0IHByaW9yIG5vdGljZSB0byBZb3UuCisKKzMuMyBVdGlsaXphdGlvbiBvZiBZb3VyIENvbXB1dGVyOlNreXBlIFNvZnR3YXJlIG1heSB1dGlsaXplIHRoZSBwcm9jZXNzb3IgYW5kIGJhbmR3aWR0aCBvZiB0aGUgY29tcHV0ZXIgKG9yIG90aGVyIGFwcGxpY2FibGUgZGV2aWNlKSBZb3UgYXJlIHV0aWxpemluZywgZm9yIHRoZSBsaW1pdGVkIHB1cnBvc2Ugb2YgZmFjaWxpdGF0aW5nIHRoZSBjb21tdW5pY2F0aW9uIGJldHdlZW4gWW91IGFuZCB0aGlyZCBwYXJ0aWVzLiBTa3lwZSB3aWxsIHVzZSBpdHMgY29tbWVyY2lhbGx5IHJlYXNvbmFibGUgZWZmb3J0cyB0byBwcm90ZWN0IHRoZSBwcml2YWN5IGFuZCBpbnRlZ3JpdHkgb2YgdGhlIGNvbXB1dGVyIHJlc291cmNlcyAob3Igb3RoZXIgYXBwbGljYWJsZSBkZXZpY2UpIFlvdSBhcmUgdXRpbGl6aW5nIGFuZCBvZiBZb3VyIGNvbW11bmljYXRpb24sIGhvd2V2ZXIgU2t5cGUgY2Fubm90IGdpdmUgYW55IHdhcnJhbnRpZXMgaW4gdGhpcyByZXNwZWN0LgorCiszLjQgTmV3IFZlcnNpb25zIG9mIHRoZSBTa3lwZSBTb2Z0d2FyZTpTa3lwZSwgaW4gaXRzIHNvbGUgZGlzY3JldGlvbiwgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIGFkZCBhZGRpdGlvbmFsIGZlYXR1cmVzIG9yIGZ1bmN0aW9ucywgb3IgdG8gcHJvdmlkZSBwcm9ncmFtbWluZyBmaXhlcywgdXBkYXRlcyBhbmQgdXBncmFkZXMsIHRvIHRoZSBTa3lwZSBTb2Z0d2FyZS4gU2t5cGUgaGFzIG5vIG9ibGlnYXRpb24gdG8gbWFrZSBhdmFpbGFibGUgdG8gWW91IGFueSBzdWJzZXF1ZW50IHZlcnNpb25zIG9mIHRoZSBTa3lwZSBTb2Z0d2FyZS4gWW91IG1heSBoYXZlIHRvIGVudGVyIGludG8gYSByZW5ld2VkIHZlcnNpb24gb2YgdGhpcyBBZ3JlZW1lbnQsIGluIHRoZSBldmVudCB5b3Ugd2FudCB0byBkb3dubG9hZCwgaW5zdGFsbCBvciB1c2UgYSBuZXcgdmVyc2lvbiBvZiB0aGUgU2t5cGUgU29mdHdhcmUuIAorCiszLjUgU3VzcGVuc2lvbjogU2t5cGUgbWF5LCBpbiBpdHMgc29sZSBkaXNjcmV0aW9uIGFuZCB0byB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIHdpdGhpbiBZb3VyIGp1cmlzZGljdGlvbiwgbW9kaWZ5IG9yIGRpc2NvbnRpbnVlIG9yIHN1c3BlbmQgWW91ciBhYmlsaXR5IHRvIHVzZSBhbnkgdmVyc2lvbiBvZiB0aGUgU2t5cGUgU29mdHdhcmUsIGFuZC9vciBkaXNhYmxlIGFueSBTa3lwZSBTb2Z0d2FyZSBZb3UgbWF5IGFscmVhZHkgaGF2ZSBhY2Nlc3NlZCBvciBpbnN0YWxsZWQgd2l0aG91dCBhbnkgbm90aWNlIHRvIFlvdSwgZm9yIHRoZSByZXBhaXIsIGltcHJvdmVtZW50LCBhbmQvb3IgdXBncmFkZSBvZiB0aGUgdW5kZXJseWluZyB0ZWNobm9sb2d5IG9yIGZvciBhbnkgb3RoZXIganVzdGlmaWFibGUgcmVhc29uLCBpbmNsdWRpbmcgYnV0IG5vdCBsaW1pdGVkIHRvLCBjaXJjdW1zdGFuY2VzIHdoZXJlIFlvdSwgYXQgU2t5cGXigJlzIGRpc2NyZXRpb24sIGFyZSBpbiBicmVhY2ggb2YgdGhlIFRlcm1zLCBjcmVhdGluZyBwcm9ibGVtcywgcG9zc2libGUgbGVnYWwgbGlhYmlsaXRpZXMsIG9yIGVuZ2FnaW5nIGluIGZyYXVkdWxlbnQsIGltbW9yYWwgb3IgaWxsZWdhbCBhY3Rpdml0aWVzLCBvciBmb3Igb3RoZXIgc2ltaWxhciByZWFzb25zLgorCiszLjYgTm8gRW1lcmdlbmN5IENhbGxzOiBUaGUgU2t5cGUgU29mdHdhcmUgaXMgbm90IGludGVuZGVkIHRvIHN1cHBvcnQgb3IgY2FycnkgZW1lcmdlbmN5IGNhbGxzIHRvIGFueSB0eXBlIG9mIGhvc3BpdGFsLCBsYXcgZW5mb3JjZW1lbnQgYWdlbmN5LCBtZWRpY2FsIGNhcmUgdW5pdCBvciBhbnkgb3RoZXIga2luZCBvZiBFbWVyZ2VuY3kgU2VydmljZS4gWW91IGFja25vd2xlZGdlIGFuZCBhZ3JlZSB0aGF0OiAoaSkgU2t5cGUgaXMgbm90IHJlcXVpcmVkIHRvIG9mZmVyIGFjY2VzcyB0byBFbWVyZ2VuY3kgU2VydmljZXMgdW5kZXIgYW55IGFwcGxpY2FibGUgbG9jYWwgYW5kL29yIG5hdGlvbmFsIHJ1bGVzLCByZWd1bGF0aW9uIG9yIGxhdzsgKGlpKSBZb3UgbXVzdCBtYWtlIGFkZGl0aW9uYWwgYXJyYW5nZW1lbnRzIHRvIGFjY2VzcyBFbWVyZ2VuY3kgU2VydmljZXMgYW5kIGl0IGlzIFlvdXIgcmVzcG9uc2liaWxpdHkgdG8gcHVyY2hhc2UgKHNlcGFyYXRlbHkgZnJvbSB0aGUgU2t5cGUgU29mdHdhcmUpLCB0cmFkaXRpb25hbCB3aXJlbGVzcyBvciBsYW5kbGluZSB0ZWxlcGhvbmUgc2VydmljZXMgdG8gb2J0YWluIHN1Y2ggYWNjZXNzOyBhbmQgKGlpaSkgU2t5cGUgaXMgbm90IGEgcmVwbGFjZW1lbnQgZm9yIFlvdXIgcHJpbWFyeSB0ZWxlcGhvbmUgc2VydmljZS4KKworNC4gV2hhdCB3ZSBleHBlY3QgZnJvbSBZb3UgCis0LjEgTGF3ZnVsIHB1cnBvc2VzOiBZb3Ugd2lsbCB1c2UgdGhlIFNreXBlIFNvZnR3YXJlIHNvbGVseSBmb3IgbGF3ZnVsIHB1cnBvc2VzLiBJbiB0aGlzIHJlc3BlY3QgWW91IG1heSBub3QsIHdpdGhvdXQgbGltaXRhdGlvbiAoYSkgaW50ZXJjZXB0IG9yIG1vbml0b3IsIGRhbWFnZSBvciBtb2RpZnkgYW55IGNvbW11bmljYXRpb24gd2hpY2ggaXMgbm90IGludGVuZGVkIGZvciBZb3U7IChiKSB1c2UgYW55IHR5cGUgb2Ygc3BpZGVyLCB2aXJ1cywgd29ybSwgdHJvamFuLWhvcnNlLCB0aW1lIGJvbWIgb3IgYW55IG90aGVyIGNvZGVzIG9yIGluc3RydWN0aW9ucyB0aGF0IGFyZSBkZXNpZ25lZCB0byBkaXN0b3J0LCBkZWxldGUsIGRhbWFnZSBvciBkaXNhc3NlbWJsZSB0aGUgU2t5cGUgU29mdHdhcmUgb3IgdGhlIGNvbW11bmljYXRpb247IChjKSBzZW5kIGFueSB1bnNvbGljaXRlZCBjb21tdW5pY2F0aW9uIG5vdCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcgKGQpIGV4cG9zZSBhbnkgdGhpcmQgcGFydHkgdG8gbWF0ZXJpYWwgd2hpY2ggaXMgb2ZmZW5zaXZlLCBoYXJtZnVsIHRvIG1pbm9ycywgaW5kZWNlbnQgb3Igb3RoZXJ3aXNlIG9iamVjdGlvbmFibGUgaW4gYW55IHdheTsgKGUpIHVzZSB0aGUgU2t5cGUgU29mdHdhcmUgdG8gY2F1c2Ugb3IgaW50ZW5kIHRvIGNhdXNlIGVtYmFycmFzc21lbnQgb3IgZGlzdHJlc3MgdG8sIG9yIHRvIHRocmVhdGVuLCBoYXJhc3Mgb3IgaW52YWRlIHRoZSBwcml2YWN5IG9mLCBhbnkgdGhpcmQgcGFydHk7IG9yIChmKSB1c2UgKGluY2x1ZGluZyBhcyBwYXJ0IG9mIHlvdXIgU2t5cGUgTmFtZSkgYW55IG1hdGVyaWFsIG9yIGNvbnRlbnQgdGhhdCBpcyBzdWJqZWN0IHRvIGFueSB0aGlyZCBwYXJ0eSBwcm9wcmlldGFyeSByaWdodHMsIHVubGVzcyB5b3UgaGF2ZSBhIGxpY2VuY2Ugb3IgcGVybWlzc2lvbiBmcm9tIHRoZSBvd25lciBvZiBzdWNoIHJpZ2h0cy4KKworNC4yIFJlcHJlc2VudGF0aW9uczogWW91IHJlcHJlc2VudCBhbmQgd2FycmFudCB0aGF0IFlvdSBhcmUgYXV0aG9yaXplZCB0byBlbnRlciBpbnRvIGFuZCBjb21wbHkgd2l0aCB0aGUgVGVybXMuIEZ1cnRoZXJtb3JlLCBZb3UgcmVwcmVzZW50IGFuZCB3YXJyYW50IHRoYXQgWW91IHdpbGwgYXQgYW55IGFuZCBhbGwgdGltZXMgbWVldCB3aXRoIFlvdXIgb2JsaWdhdGlvbnMgdW5kZXIgdGhlIFRlcm1zLCBhcyB3ZWxsIGFzIGFueSBhbmQgYWxsIGxhd3MsIHJlZ3VsYXRpb25zIGFuZCBwb2xpY2llcyB0aGF0IG1heSBhcHBseSB0byB0aGUgdXNlIG9mIHRoZSBTa3lwZSBTb2Z0d2FyZSBhbmQvb3IgdGhlIFNreXBlIFNlcnZpY2VzLgorCis0LjMgSW5kZW1uaWZpY2F0aW9uOiBZT1UgQUdSRUUgVE8gSU5ERU1OSUZZLCBERUZFTkQgQU5EIEhPTEQgU0tZUEUgQU5EIElUUyBBRkZJTElBVEVTIEhBUk1MRVNTIEZST00gQU5EIEFHQUlOU1QgQU5ZIEFORCBBTEwgTElBQklMSVRZIEFORCBDT1NUUywgSU5DTFVESU5HIFJFQVNPTkFCTEUgQVRUT1JORVlT4oCZIEZFRVMgSU5DVVJSRUQgQlkgU1VDSCBQQVJUSUVTLCBJTiBDT05ORUNUSU9OIFdJVEggT1IgQVJJU0lORyBPVVQgT0YgWU9VUiAoQSkgVklPTEFUSU9OIE9SIEJSRUFDSCBPRiBBTlkgVEVSTSBPRiBUSElTIEFHUkVFTUVOVCBPUiBBTlkgQVBQTElDQUJMRSBMQVcgT1IgUkVHVUxBVElPTiwgV0hFVEhFUiBPUiBOT1QgUkVGRVJFTkNFRCBIRVJFSU4sIE9SIChCKSBWSU9MQVRJT04gT0YgQU5ZIFJJR0hUUyBPRiBBTlkgVEhJUkQgUEFSVFksIE9SIChDKSBVU0UgT1IgTUlTVVNFIE9GIFRIRSBTS1lQRSBTT0ZUV0FSRSwgT1IgKEQpIENPTU1VTklDQVRJT04gU1BSRUFEIEJZIE1FQU5TIE9GIFRIRSBTS1lQRSBTT0ZUV0FSRS4KKworNC40IFV0aWxpemF0aW9uIG9mIFlvdXIgQ29tcHV0ZXI6IElmIFlvdXIgdXNlIG9mIHRoZSBTa3lwZSBTb2Z0d2FyZSBpcyBkZXBlbmRhbnQgdXBvbiB0aGUgdXNlIG9mIGEgcHJvY2Vzc29yIGFuZCBiYW5kd2lkdGggb3duZWQgb3IgY29udHJvbGxlZCBieSBhIHRoaXJkIHBhcnR5LCBZb3UgYWNrbm93bGVkZ2UgYW5kIGFncmVlIHRoYXQgWW91ciBsaWNlbmNlIHRvIHVzZSB0aGUgU2t5cGUgU29mdHdhcmUgaXMgc3ViamVjdCB0byBZb3Ugb2J0YWluaW5nIGNvbnNlbnQgZnJvbSB0aGUgcmVsZXZhbnQgdGhpcmQgcGFydHkgZm9yIHN1Y2ggdXNlLiBZb3UgcmVwcmVzZW50IGFuZCB3YXJyYW50IHRoYXQgYnkgYWNjZXB0aW5nIHRoaXMgQWdyZWVtZW50IGFuZCB1c2luZyB0aGUgU2t5cGUgU29mdHdhcmUsIFlvdSBoYXZlIG9idGFpbmVkIHN1Y2ggY29uc2VudC4KKworNC41IEV4cG9ydCBSZXN0cmljdGlvbnM6IFNreXBlIFNvZnR3YXJlIG1heSBiZSBzdWJqZWN0IHRvIGludGVybmF0aW9uYWwgcnVsZXMgdGhhdCBnb3Zlcm4gdGhlIGV4cG9ydCBvZiBzb2Z0d2FyZS4gWW91IHNoYWxsIGNvbXBseSB3aXRoIGFsbCBhcHBsaWNhYmxlIGludGVybmF0aW9uYWwgYW5kIG5hdGlvbmFsIGxhd3MgdGhhdCBhcHBseSB0byB0aGUgU2t5cGUgU29mdHdhcmUgYXMgd2VsbCBhcyBlbmQtdXNlciwgZW5kLXVzZSBhbmQgZGVzdGluYXRpb24gcmVzdHJpY3Rpb25zIGlzc3VlZCBieSBuYXRpb25hbCBnb3Zlcm5tZW50cy4gVGhpcyBzb2Z0d2FyZSBpcyBjb250cm9sbGVkIHVuZGVyIEVDQ04gNUQ5OTIuYi4xIG9mIHRoZSBFeHBvcnQgQWRtaW5pc3RyYXRpb24gUmVndWxhdGlvbnMgKOKAnEVBUuKAnSkgcGVyIENDQVRTICMgRzA0Nzk3MyBhbmQgdGh1cyBtYXkgbm90IGJlIGV4cG9ydGVkIG9yIHJlIGV4cG9ydGVkIHRvIG9yIGRvd25sb2FkZWQgYnkgYW55IHBlcnNvbiBpbiBhbnkgY291bnRyaWVzIGNvbnRyb2xsZWQgZm9yIGFudGkgdGVycm9yaXNtIHJlYXNvbnMgdW5kZXIgdGhlIEVBUiwgd2hpY2ggaW5jbHVkZSBJcmFuLCBOb3J0aCBLb3JlYSwgQ3ViYSwgU3lyaWEgYW5kIFN1ZGFuLiBFQVIgNzQyLjE1KGEpLCBUaXRsZSAxNSBDb2RlIG9mIEZlZGVyYWwgUmVndWxhdGlvbnMuIE1vcmVvdmVyLCB0aGUgc29mdHdhcmUgbWF5IG5vdCBiZSBleHBvcnRlZCBvciByZSBleHBvcnRlZCB0byBvciBkb3dubG9hZGVkIGJ5IGFueSBwZXJzb24gb3IgZW50aXR5IHN1YmplY3QgdG8gVVMgc2FuY3Rpb25zIHJlZ2FyZGxlc3Mgb2YgbG9jYXRpb24uIFNlZSBodHRwOi8vd3d3LmJpcy5kb2MuZ292L0NvbXBsaWFuY2VBbmRFbmZvcmNlbWVudC9MaXN0c1RvQ2hlY2suaHRtIGFuZCBFQVIgUGFydCA3MzYuIFNreXBlIGlzIG1ha2luZyB0aGlzIHNvZnR3YXJlIGF2YWlsYWJsZSB0byBZb3UgZm9yIGRvd25sb2FkIG9ubHkgb24gdGhlIGNvbmRpdGlvbiB0aGF0IFlvdSBjZXJ0aWZ5IHRoYXQgWW91IGFyZSBub3Qgc3VjaCBhIHBlcnNvbiBvciBlbnRpdHkgYW5kIHRoYXQgdGhlIGRvd25sb2FkIGlzIG5vdCBvdGhlcndpc2UgaW4gdmlvbGF0aW9uIG9mIFVTIGV4cG9ydCBjb250cm9sIGFuZCBzYW5jdGlvbnMgcmVndWxhdGlvbnMuCisKKzQuNiBHb3Zlcm5tZW50IFVzZXJzOiBUaGUgU2t5cGUgU29mdHdhcmUgYW5kIERvY3VtZW50YXRpb24gYXJlICJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIiBhbmQgImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUgZG9jdW1lbnRhdGlvbiwiIHJlc3BlY3RpdmVseSwgYXMgc3VjaCB0ZXJtcyBhcmUgdXNlZCBpbiBVbml0ZWQgU3RhdGVzIEZlZGVyYWwgQWNxdWlzaXRpb24gUmVndWxhdGlvbnMgU2VjdGlvbiAxMi4yMTIuIEFueSB1c2UsIGR1cGxpY2F0aW9uIG9yIGRpc2Nsb3N1cmUgb2YgdGhlIFNreXBlIFNvZnR3YXJlIG9yIHRoZSBEb2N1bWVudGF0aW9uIGJ5IG9yIG9uIGJlaGFsZiBvZiB0aGUgVS5TLiBHb3Zlcm5tZW50IGlzIHN1YmplY3QgdG8gcmVzdHJpY3Rpb25zIGFzIHNldCBmb3J0aCBpbiB0aGlzIEFncmVlbWVudC4KKworNS4gVGVybSwgVGVybWluYXRpb24sIFVwZGF0ZXMgCis1LjEgVGVybTogVGhpcyBBZ3JlZW1lbnQgd2lsbCBiZSBlZmZlY3RpdmUgYXMgb2YgdGhlIEVmZmVjdGl2ZSBEYXRlIGFuZCB3aWxsIHJlbWFpbiBlZmZlY3RpdmUgdW50aWwgdGVybWluYXRlZCBieSBlaXRoZXIgU2t5cGUgb3IgWW91IGFzIHNldCBvdXQgYmVsb3cuIFRoZSBBZGRpdGlvbmFsIFRlcm1zIHdpbGwgYmUgZWZmZWN0aXZlIGFzIG9mIHRoZSBkYXRlIHVwb24gd2hpY2ggdGhleSBhcmUgYWNjZXB0ZWQgYnkgWW91IG9yIFlvdSB1c2UgdGhlIHJlbGV2YW50IFNreXBlIFNlcnZpY2UgKGFzIGFwcGxpY2FibGUpLCBhbmQgd2lsbCByZW1haW4gZWZmZWN0aXZlIHVudGlsIHRlcm1pbmF0ZWQgYnkgZWl0aGVyIFNreXBlIG9yIFlvdSBhcyBzZXQgb3V0IGJlbG93IGFuZC9vciBpbiB0aGUgYXBwbGljYWJsZSB0ZXJtcy4KKworNS4yIFRlcm1pbmF0aW9uOllvdSBtYXkgdGVybWluYXRlIHRoZSBUZXJtcyB3aXRoIGltbWVkaWF0ZSBlZmZlY3QgYXQgYW55IHRpbWUuIFdpdGhvdXQgbGltaXRpbmcgb3RoZXIgcmVtZWRpZXMsIFNreXBlIG1heSBsaW1pdCwgc3VzcGVuZCwgb3IgdGVybWluYXRlIHRoaXMgbGljZW5zZSBhbmQgWW91ciB1c2Ugb2YgU2t5cGUgU29mdHdhcmUgYW5kIFNreXBlIFNlcnZpY2VzLCBwcm9oaWJpdCBhY2Nlc3MgdG8gdGhlIFNreXBlIFdlYnNpdGUgYW5kIGRlbGV0ZSBZb3VyIFVzZXIgQWNjb3VudCBhbmQvb3IgVXNlciBJRCwgd2l0aCBpbW1lZGlhdGUgZWZmZWN0LCBhdXRvbWF0aWNhbGx5IGFuZCB3aXRob3V0IHJlY291cnNlIHRvIHRoZSBjb3VydHMsIGlmIHdlIHRoaW5rIHRoYXQgWW91IGFyZSBpbiBicmVhY2ggb2YgdGhlIFRlcm1zLCBjcmVhdGluZyBwcm9ibGVtcywgbGVnYWwgbGlhYmlsaXRpZXMgKGFjdHVhbCBvciBwb3RlbnRpYWwpLCBpbmZyaW5naW5nIHNvbWVvbmUgZWxzZeKAmXMgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cywgZW5nYWdpbmcgaW4gZnJhdWR1bGVudCwgaW1tb3JhbCBvciBpbGxlZ2FsIGFjdGl2aXRpZXMsIG9yIGZvciBvdGhlciBzaW1pbGFyIHJlYXNvbnMuIFNreXBlIHNoYWxsIGVmZmVjdCBzdWNoIHRlcm1pbmF0aW9uIGJ5IHByb3ZpZGluZyBub3RpY2UgdG8gWW91IHRvIHRoZSBlbWFpbCBhZGRyZXNzIFlvdSBoYXZlIHByb3ZpZGVkLCBhbmQvb3IgYnkgcHJldmVudGluZyBZb3VyIGFjY2VzcyB0byBZb3VyIFVzZXIgQWNjb3VudC4gV2UgcmVzZXJ2ZSB0aGUgcmlnaHQgdG8gY2FuY2VsIFVzZXIgQWNjb3VudHMgdGhhdCBoYXZlIGJlZW4gaW5hY3RpdmUgZm9yIG1vcmUgdGhhbiBvbmUgKDEpIHllYXIuCisKKzUuMyBDb25zZXF1ZW5jZXMgb2YgVGVybWluYXRpb246IFVwb24gdGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQgYW5kIHRoZSBBZGRpdGlvbmFsIFRlcm1zOiAoYSkgYWxsIGxpY2Vuc2VzIGFuZCByaWdodHMgdG8gdXNlIHRoZSBTa3lwZSBTb2Z0d2FyZSBhbmQgdGhlIFNreXBlIFNlcnZpY2VzIHNoYWxsIGltbWVkaWF0ZWx5IHRlcm1pbmF0ZTsgKGIpIFlvdSB3aWxsIGltbWVkaWF0ZWx5IGNlYXNlIGFueSBhbmQgYWxsIHVzZSBvZiB0aGUgU2t5cGUgU29mdHdhcmUgYW5kIFNreXBlIFNlcnZpY2VzOyBhbmQgKGMpIFlvdSB3aWxsIGltbWVkaWF0ZWx5IHJlbW92ZSB0aGUgU2t5cGUgU29mdHdhcmUgZnJvbSBhbGwgaGFyZCBkcml2ZXMsIG5ldHdvcmtzIGFuZCBvdGhlciBzdG9yYWdlIG1lZGlhIGFuZCBkZXN0cm95IGFsbCBjb3BpZXMgb2YgdGhlIFNreXBlIFNvZnR3YXJlIGluIFlvdXIgcG9zc2Vzc2lvbiBvciB1bmRlciBZb3VyIGNvbnRyb2wuCisKKzUuNCBOZXcgVmVyc2lvbnM6IFNreXBlIHJlc2VydmVzIHRoZSByaWdodCB0byBjaGFuZ2UgdGhpcyBBZ3JlZW1lbnQgYXQgYW55IHRpbWUgYnkgcHVibGlzaGluZyB0aGUgcmV2aXNlZCBBZ3JlZW1lbnQgb24gdGhlIFNreXBlIFdlYnNpdGUuIFRoZSByZXZpc2VkIEFncmVlbWVudCBzaGFsbCBiZWNvbWUgZWZmZWN0aXZlIHdpdGhpbiB0aGlydHkgKDMwKSBkYXlzIG9mIHN1Y2ggcHVibGljYXRpb24sIHVubGVzcyBZb3UgZXhwcmVzc2x5IGFjY2VwdCB0aGUgcmV2aXNlZCBBZ3JlZW1lbnQgZWFybGllciBieSBjbGlja2luZyBvbiB0aGUgYWNjZXB0IGJ1dHRvbi4gWW91ciBleHByZXNzIGFjY2VwdGFuY2Ugb3IgWW91ciBjb250aW51ZWQgdXNlIG9mIHRoZSBTa3lwZSBTb2Z0d2FyZSBhZnRlciBleHBpcnkgb2YgdGhlIG5vdGljZSBwZXJpb2Qgb2YgdGhpcnR5ICgzMCkgZGF5cywgc2hhbGwgY29uc3RpdHV0ZSBZb3VyIGFjY2VwdGFuY2UgdG8gYmUgYm91bmQgYnkgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSByZXZpc2VkIEFncmVlbWVudC4gWW91IGNhbiBmaW5kIHRoZSBsYXRlc3QgdmVyc2lvbiBvZiB0aGlzIEFncmVlbWVudCBhdCBodHRwOi8vd3d3LnNreXBlLmNvbS9sZWdhbC9ldWxhIC4gU2t5cGUgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIGNoYW5nZSBhbnkgb2YgdGhlIEFkZGl0aW9uYWwgVGVybXMgZnJvbSB0aW1lIHRvIHRpbWUgYW5kIHN1Y2ggY2hhbmdlcyBzaGFsbCBiZWNvbWUgZWZmZWN0aXZlIGVpdGhlciB3aXRoaW4gdGhpcnR5ICgzMCkgZGF5cyBvZiBwdWJsaWNhdGlvbiBvZiB0aGUgcmV2aXNlZCB2ZXJzaW9uIG9uIHRoZSBTa3lwZSBXZWJzaXRlICh1bmxlc3MgWW91IGV4cHJlc3NseSBhY2NlcHQgdGhlIHJldmlzZWQgdGVybXMgZWFybGllciBieSBjbGlja2luZyBvbiB0aGUgYWNjZXB0IGJ1dHRvbiBpZiB0aGlzIG9wdGlvbiBpcyBtYWRlIGF2YWlsYWJsZSksIG9yIHdpdGhpbiB0aGUgdGltZWZyYW1lIHNldCBvdXQgaW4gdGhlIGFwcGxpY2FibGUgdGVybXMgaWYgZGlmZmVyZW50LgorCis2LiBEaXNjbGFpbWVyIG9mIFdhcnJhbnRpZXMgYW5kIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5IAorNi4xIE5vIFdhcnJhbnRpZXM6IFRIRSBTS1lQRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCDigJxBUyBJU+KAnSBXSVRIIE5PIFdBUlJBTlRJRVMgV0hBVFNPRVZFUjsgU0tZUEUgRE9FUyBOT1QsIEVJVEhFUiBFWFBSRVNTRUQsIElNUExJRUQgT1IgU1RBVFVUT1JZLCBNQUtFIEFOWSBXQVJSQU5USUVTLCBDTEFJTVMgT1IgUkVQUkVTRU5UQVRJT05TIFdJVEggUkVTUEVDVCBUTyBUSEUgU0tZUEUgU09GVFdBUkUsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgUVVBTElUWSwgUEVSRk9STUFOQ0UsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgT1IgRklUTkVTUyBGT1IgVVNFIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU0tZUEUgRlVSVEhFUiBET0VTIE5PVCBSRVBSRVNFTlQgT1IgV0FSUkFOVCBUSEFUIFRIRSBTS1lQRSBTT0ZUV0FSRSBXSUxMIEFMV0FZUyBCRSBBVkFJTEFCTEUsIEFDQ0VTU0lCTEUsIFVOSU5URVJSVVBURUQsIFRJTUVMWSwgU0VDVVJFLCBBQ0NVUkFURSwgQ09NUExFVEUgQU5EIEVSUk9SLUZSRUUgT1IgV0lMTCBPUEVSQVRFIFdJVEhPVVQgUEFDS0VUIExPU1MsIE5PUiBET0VTIFNLWVBFIFdBUlJBTlQgQU5ZIENPTk5FQ1RJT04gVE8gT1IgVFJBTlNNSVNTSU9OIEZST00gVEhFIElOVEVSTkVULCBPUiBBTlkgUVVBTElUWSBPRiBDQUxMUyBNQURFIFRIUk9VR0ggVEhFIFNLWVBFIFNPRlRXQVJFLgorCis2LjIgU3BlY2lmaWMgRGlzY2xhaW1lciBPZiBMaWFiaWxpdHkgRm9yIEVtZXJnZW5jeSBTZXJ2aWNlczogU0tZUEUgRE9FUyBOT1QgUFJPVklERSBDT05ORUNUSU9OUyBUTyBFTUVSR0VOQ1kgU0VSVklDRVMgVklBIFRIRSBTS1lQRSBTT0ZUV0FSRS4gTkVJVEhFUiBTS1lQRSBOT1IgSVRTIE9GRklDRVJTLCBFTVBMT1lFRVMgT1IgQUZGSUxJQVRFUyBNQVkgQkUgSEVMRCBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFLCBPUiBMT1NTLCAoQU5EIFlPVSBIRVJFQlkgV0FJVkUgQU5ZIEFORCBBTEwgU1VDSCBDTEFJTVMgT1IgQ0FVU0VTIE9GIEFDVElPTiksIEFSSVNJTkcgRlJPTSBPUiBSRUxBVElORyBUTyBZT1VSIElOQUJJTElUWSBUTyBVU0UgVEhFIFNLWVBFIFNPRlRXQVJFIFRPIENPTlRBQ1QgRU1FUkdFTkNZIFNFUlZJQ0VTLCBBTkQgWU9VUiBGQUlMVVJFIFRPIE1BS0UgQURESVRJT05BTCBBUlJBTkdFTUVOVFMgVE8gQUNDRVNTIEVNRVJHRU5DWSBTRVJWSUNFUyBJTiBBQ0NPUkRBTkNFIFdJVEggUEFSQUdSQVBIIDMuNiBBQk9WRS4KKworNi4zIFlvdXIgb3duIFJpc2s6IFlvdSBhY2tub3dsZWRnZSBhbmQgYWdyZWUgdGhhdCB0aGUgZW50aXJlIHJpc2sgYXJpc2luZyBvdXQgb2YgWW91ciB1c2Ugb2YgdGhlIFNreXBlIFNvZnR3YXJlIHJlbWFpbnMgd2l0aCBZb3UsIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwZXJtaXR0ZWQgYnkgbGF3LgorCis2LjQgTm8gTGlhYmlsaXR5OiBUaGUgU2t5cGUgU29mdHdhcmUgaXMgYmVpbmcgcHJvdmlkZWQgdG8gWW91IGZyZWUgb2YgY2hhcmdlLiBBQ0NPUkRJTkdMWSwgWU9VIEFDS05PV0xFREdFIEFORCBBR1JFRSBUSEFUIFNLWVBFLCBJVFMgQUZGSUxJQVRFUywgSVRTIExJQ0VOU09SUyBBTkQgVEhFIFNLWVBFIFNUQUZGIFdJTEwgSEFWRSBOTyBMSUFCSUxJVFkgSU4gQ09OTkVDVElPTiBXSVRIIE9SIEFSSVNJTkcgRlJPTSBZT1VSIFVTRSBPRiBUSEUgU0tZUEUgU09GVFdBUkUsIEFTIFNFVCBGT1JUSCBCRUxPVy4gWU9VUiBPTkxZIFJJR0hUIE9SIFJFTUVEWSBXSVRIIFJFU1BFQ1QgVE8gQU5ZIFBST0JMRU1TIE9SIERJU1NBVElTRkFDVElPTiBXSVRIIFRIRSBTS1lQRSBTT0ZUV0FSRSBJUyBUTyBJTU1FRElBVEVMWSBERUlOU1RBTEwgQU5EIENFQVNFIFVTRSBPRiBTVUNIIFNLWVBFIFNPRlRXQVJFLgorCis2LjUgTGltaXRhdGlvbiBvZiBMaWFiaWxpdHk6IElOIE5PIEVWRU5UIFNIQUxMIFNLWVBFLCBJVFMgQUZGSUxJQVRFUywgSVRTIExJQ0VOU09SUyBPUiBUSEUgU0tZUEUgU1RBRkYgQkUgTElBQkxFLCBXSEVUSEVSIElOIENPTlRSQUNULCBXQVJSQU5UWSwgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBQUk9EVUNUIExJQUJJTElUWSBPUiBBTlkgT1RIRVIgRk9STSBPRiBMSUFCSUxJVFksIEZPUjoKKworNi41LjEgQU5ZIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBBTlkgTE9TUyBPRiBPUiBDT1JSVVBUSU9OIFRPIERBVEEsIElOVEVSUlVQVElPTiwgQ09NUFVURVIgRkFJTFVSRSBPUiBQRUNVTklBUlkgTE9TUykgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBTS1lQRSBTT0ZUV0FSRTsgQU5ECisKKzYuNS4yIEFOWSBMT1NTIE9GIElOQ09NRSwgQlVTSU5FU1MgT1IgUFJPRklUUyAoV0hFVEhFUiBESVJFQ1QgT1IgSU5ESVJFQ1QpIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgU0tZUEUgU09GVFdBUkU7CisKKzYuNS4zIEFOWSBMT1NTIE9SIERBTUFHRSBXSElDSCBNQVkgQkUgSU5DVVJSRUQgQlkgWU9VIEFTIEEgUkVTVUxUIE9GOworCisoSSkgQU5ZIERJU1JVUFRJT05TIE9SIERFTEFZUyBJTiBBTlkgQ09NTVVOSUNBVElPTiBXSEVOIFVTSU5HIFRIRSBTS1lQRSBTT0ZUV0FSRTsKKworKElJKSBUSEUgU1VTUEVOU0lPTiBPUiBURVJNSU5BVElPTiBPRiBUSElTIEFHUkVFTUVOVCBCWSBZT1UgT1IgQlkgU0tZUEUgRk9SIEFOWSBSRUFTT047IEFORAorCisoSUlJKSBUSEUgUkVMRUFTRSBPUiBUSEUgREVDSVNJT04gTk9UIFRPIFJFTEVBU0UgTkVXIFZFUlNJT05TIE9GIFRIRSBTS1lQRSBTT0ZUV0FSRSBUTyBZT1UuCisKKzYuNiBUSEUgTElNSVRBVElPTlMgT04gU0tZUEXigJlTIExJQUJJTElUWSBUTyBZT1UgSU4gUEFSQUdSQVBIIDYuNSBBQk9WRSBTSEFMTCBBUFBMWSBXSEVUSEVSIE9SIE5PVCBTS1lQRSwgSVRTIEFGRklMSUFURVMgT1IgVEhFIFNLWVBFIFNUQUZGIEhBVkUgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIExPU1NFUyBPUiBEQU1BR0VTIEFSSVNJTkcuCisKKzYuNyBOT1RISU5HIElOIFRISVMgQUdSRUVNRU5UIElTIElOVEVOREVEIFRPIEVYQ0xVREUgT1IgUkVTVFJJQ1QgT1IgU0hBTEwgQkUgQ09OU1RSVUVEIEFTIEVYQ0xVRElORyBPUiBSRVNUUklDVElORyBUSEUgTElBQklMSVRZIE9GIFNLWVBFIEZPUiAoSSkgVEhFIERFQVRIIE9SIFBFUlNPTkFMIElOSlVSWSBDQVVTRUQgQlkgVEhFIE5FR0xJR0VOQ0UgT0YgU0tZUEUsIFRIRSBTS1lQRSBTVEFGRiBPUiBJVFMgQUdFTlRTLCBPUiAoSUkpIEFOWSBMSUFCSUxJVFkgV0hJQ0ggQ0FOTk9UIEJFIExJTUlURUQgT1IgRVhDTFVERUQgQlkgTEFXLgorCis2LjggSnVyaXNkaWN0aW9u4oCZcyBMaW1pdGF0aW9uczogQXMgc29tZSBqdXJpc2RpY3Rpb25zIGRvIG5vdCBhbGxvdyBzb21lIG9mIHRoZSBleGNsdXNpb25zIG9yIGxpbWl0YXRpb25zIGFzIHNldCBmb3J0aCBhYm92ZSwgc29tZSBvZiB0aGVzZSBleGNsdXNpb25zIG9yIGxpbWl0YXRpb25zIG1heSBub3QgYXBwbHkgdG8gWW91LiBJbiBzdWNoIGV2ZW50IHRoZSBsaWFiaWxpdHkgd2lsbCBiZSBsaW1pdGVkIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZSB3aXRoaW4gdGhlIGFwcGxpY2FibGUgbGVnaXNsYXRpb24uCisKKzcuIEFkZGl0aW9uYWwgVGVybXMgCis3LjEgSW4gYWRkaXRpb24gdG8gdGhpcyBBZ3JlZW1lbnQsIFlvdSBoYXZlIHRvIGNvbXBseSB3aXRoIHRoZSBmb2xsb3dpbmcgQWRkaXRpb25hbCBUZXJtcyB3aGVuIHJlY2VpdmluZyB0aGUgU2t5cGUgU29mdHdhcmUgYW5kIHRoZSBTa3lwZSBTZXJ2aWNlcy4gV2UgZXhwZWN0IFlvdSB0byByZWFkIHRoZXNlIEFkZGl0aW9uYWwgVGVybXMgY2FyZWZ1bGx5LCBhbGwgb2Ygd2hpY2ggYXJlIG1hZGUgcGFydCBvZiB0aGlzIEFncmVlbWVudDoKKwor4oCiIFRoZSBTa3lwZSBFdGlxdWV0dGUgaHR0cDovL3d3dy5za3lwZS5jb20vbGVnYWwvdGVybXMvZXRpcXVldHRlIHByb3ZpZGVzIGd1aWRlbGluZXMgdG8gdHJlYXQgcHJvcGVybHkgYW5kIHJlc3BlY3RmdWxseSB0aGUgb3RoZXIgbWVtYmVycyBvZiBTa3lwZeKAmXMgY29tbXVuaXR5LgorCivigKIgRGlzdHJpYnV0aW9uIG9mIFNreXBlIFNvZnR3YXJlLiBZb3UgYXJlIG5vdCBhbGxvd2VkIHRvIGRpc3RyaWJ1dGUgdGhlIFNreXBlIFNvZnR3YXJlIG9yIGFueSBwYXJ0IHRoZXJlb2YgaW4gYSBDRC1ST00sIERWRCBvciBvdGhlciBzaW1pbGFyIHBoeXNpY2FsIG1lZGlhIHVubGVzcyBZb3UgY29tcGx5IHdpdGggdGhlIERpc3RyaWJ1dGlvbiBUZXJtcyBhdCBodHRwOi8vd3d3LnNreXBlLmNvbS9sZWdhbC9wcm9tb3RlL2Rpc3RyaWJ1dGUvLiBBbnkgb3RoZXIgZGlzdHJpYnV0aW9uIG9mIHRoZSBTa3lwZSBTb2Z0d2FyZSBpcyBzdWJqZWN0IHRvIHBhcmFncmFwaCA3LjIgYmVsb3cuCisKK+KAoiBTa3lwZSBBUEkuIFlvdSBhcmUgbm90IGFsbG93ZWQgdG8gdXNlIHRoZSBTa3lwZSBBUEkgdW5sZXNzIFlvdSBjb21wbHkgd2l0aCB0aGUgQVBJIFRlcm1zIGF0IGh0dHA6Ly93d3cuc2t5cGUuY29tL2xlZ2FsL3Rlcm1zL2FwaS8uCisKK+KAoiBTa3lwZSBPbmxpbmUgTWF0ZXJpYWwuIFlvdSBhcmUgbm90IGFsbG93ZWQgdG8gdXNlIHRoZSBTa3lwZSBPbmxpbmUgTWF0ZXJpYWwgdW5sZXNzIFlvdSBjb21wbHkgd2l0aCB0aGUgT25saW5lIE1hdGVyaWFsIFRlcm1zIGF0IGh0dHA6Ly93d3cuc2t5cGUuY29tL2NvbXBhbnkvbGVnYWwvcHJvbW90ZS9tYXRlcmlhbHMvLgorCivigKIgUGF5YWJsZSBWb0lQIHByb2R1Y3RzIGFyZSBwcm92aWRlZCBieSBTa3lwZSBDb21tdW5pY2F0aW9ucyBTLmEuci5sLiBhbmQgYXJlIHN1YmplY3QgdG8gdGhlIFRlcm1zIG9mIFNlcnZpY2UgYXQgaHR0cDovL3d3dy5za3lwZS5jb20vbGVnYWwvdGVybXMvdm9pcC8uCisKK+KAoiBUaGUgdXNlIG9mIHd3dy5za3lwZS5jb20gd2Vic2l0ZSBpcyBzdWJqZWN0IHRvIHRoZSBUZXJtcyBvZiBVc2Ugd2l0aCBTa3lwZSBUZWNobm9sb2dpZXMgU0EgYXQgaHR0cDovL3d3dy5za3lwZS5jb20vbGVnYWwvdGVybXMvd2ViLy4KKwor4oCiIElmIFlvdSB3YW50IHRvIHByb3ZpZGUgY2hhcmdlYWJsZSBzZXJ2aWNlcyB0byBvdGhlciBTa3lwZSBTb2Z0d2FyZSB1c2VycyB0aHJvdWdoIHRoZSBTa3lwZSBTb2Z0d2FyZSBhcyBhIHNlcnZpY2UgcHJvdmlkZXIsIFlvdSB3aWxsIG5lZWQgdG8gY29tcGx5IHdpdGggdGhlIFNlcnZpY2UgUHJvdmlkZXIgQWdyZWVtZW50IHdpdGggU2t5cGUgQ29tbXVuaWNhdGlvbnMgU2Euci5sLiBhdCBodHRwOi8vd3d3LnNreXBlLmNvbS9pbnRsL2VuL2xlZ2FsL3Rlcm1zL2NhbGxzZXJ2aWNlcHJvdmlkZXIuCisKK+KAoiBJZiB5b3Ugd2FudCB0byB1c2UgU2t5cGUgUHJlbWl1bSBDYWxsIFNlcnZpY2UgdGhlbiBZb3Ugd2lsbCBuZWVkIHRvIGNvbXBseSB3aXRoIHRoZSBUZXJtcyBvZiBTZXJ2aWNlIGZvciBTa3lwZSBQcmVtaXVtIENhbGwgKEJldGEpIGF0IGh0dHA6Ly93d3cuc2t5cGUuY29tL2xlZ2FsL3Rlcm1zL2NhbGxzZXJ2aWNlcy8uCisKK+KAoiBZb3Ugd2lsbCBuZWVkIHRvIGNvbXBseSB3aXRoIHRoZSBCcm9hZGNhc3QgVG9TIGF0IGh0dHA6Ly93d3cuc2t5cGUuY29tL2xlZ2FsL3Rlcm1zL2Jyb2FkY2FzdCBpZiBZb3Ugd2FudCB0byB1c2UgdGhlIFNreXBlIFNvZnR3YXJlIGluIGNvbm5lY3Rpb24gd2l0aCBhbnkgQnJvYWRjYXN0IChhcyBkZWZpbmVkIGluIHN1Y2ggQnJvYWRjYXN0IFRvUykuCisKKzcuMiBBbnkgb3RoZXIgZXhjZXB0aW9uczogSWYgWW91IGFyZSBpbnRlcmVzdGVkIGluIGRvaW5nIGFueXRoaW5nIHdoaWNoIGlzIG5vdCBwZXJtaXR0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgb3IgYnkgb25lIG9mIHRoZSBhYm92ZSBBZGRpdGlvbmFsIFRlcm1zLCBZb3Ugd2lsbCBoYXZlIHRvIG9idGFpbiBTa3lwZeKAmXMgcHJpb3Igd3JpdHRlbiBjb25zZW50IGFuZCBleHBsaWNpdGx5IGFncmVlIHVwb24gYW55IGZ1cnRoZXIgdGVybXMuCisKKzcuMyBZb3VyIENvbmZpZGVudGlhbCBJbmZvcm1hdGlvbiBhbmQgWW91ciBQcml2YWN5OiBTa3lwZSBpcyBjb21taXR0ZWQgdG8gcmVzcGVjdGluZyBZb3VyIHByaXZhY3kgYW5kIHRoZSBjb25maWRlbnRpYWxpdHkgb2YgWW91ciBwZXJzb25hbCBkYXRhLiBUaGUgUHJpdmFjeSBQb2xpY3kgYXQgaHR0cDovL3d3dy5za3lwZS5jb20vbGVnYWwvcHJpdmFjeSBzZXRzIG91dCBob3cgU2t5cGUgbWF5IHVzZSBZb3VyIHBlcnNvbmFsIGRhdGEsIHRoZSB0cmFmZmljIGRhdGEgYW5kIHRoZSBjb250ZW50IGNvbnRhaW5lZCBpbiBZb3VyIGNvbW11bmljYXRpb24ocykuIElmIFlvdSBvYmplY3QgdG8gWW91ciBpbmZvcm1hdGlvbiBiZWluZyB1c2VkIGluIHRoZSB3YXkgc2V0IG91dCBpbiB0aGUgUHJpdmFjeSBQb2xpY3kgdGhlbiBwbGVhc2UgZG8gbm90IHVzZSB0aGUgU2t5cGUgU2VydmljZXMuCisKKzguIE1pc2NlbGxhbmVvdXMgCis4LjEgRW50aXJlIEFncmVlbWVudDogVGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBUZXJtcyBjb25zdGl0dXRlIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4gWW91IGFuZCBTa3lwZSB3aXRoIHJlc3BlY3QgdG8gdGhlIHN1YmplY3QgbWF0dGVyIGhlcmVvZiBhbmQgd2lsbCBzdXBlcnNlZGUgYW5kIHJlcGxhY2UgYWxsIHByaW9yIHVuZGVyc3RhbmRpbmdzIGFuZCBhZ3JlZW1lbnRzLCBpbiB3aGF0ZXZlciBmb3JtLCByZWdhcmRpbmcgdGhlIHN1YmplY3QgbWF0dGVyLiBOb3RoaW5nIGluIHRoaXMgY2xhdXNlIHNoYWxsIGV4Y2x1ZGUgb3IgcmVzdHJpY3QgdGhlIGxpYWJpbGl0eSBvZiBlaXRoZXIgWW91IG9yIFNreXBlIGFyaXNpbmcgb3V0IG9mIGZyYXVkIG9yIGZyYXVkdWxlbnQgbWlzcmVwcmVzZW50YXRpb24uCisKKzguMiBQYXJ0aWFsIEludmFsaWRpdHk6IElmIGFueSBwcm92aXNpb24gb2YgdGhlIFRlcm1zLCBvciBhbnkgcGFydCBvZiBhIHByb3Zpc2lvbiwgaXMgZm91bmQgYnkgYW55IGNvdXJ0IG9yIGFkbWluaXN0cmF0aXZlIGJvZHkgb2YgY29tcGV0ZW50IGp1cmlzZGljdGlvbiB0byBiZSBpbGxlZ2FsLCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUsIGFuZCB0aGUgcHJvdmlzaW9uIChvciBwYXJ0LXByb3Zpc2lvbikgaW4gcXVlc3Rpb24gaXMgbm90IG9mIGEgZnVuZGFtZW50YWwgbmF0dXJlIHRvIHRoZSBUZXJtcyBhcyBhIHdob2xlLCB0aGUgbGVnYWxpdHksIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhlIFRlcm1zIChpbmNsdWRpbmcgdGhlIHJlbWFpbmRlciBvZiB0aGUgdGVybSB3aGljaCBjb250YWlucyB0aGUgcmVsZXZhbnQgcHJvdmlzaW9uKSBzaGFsbCBub3QgYmUgYWZmZWN0ZWQuCisKKzguMyBObyB3YWl2ZXI6IFRoZSBmYWlsdXJlIHRvIGV4ZXJjaXNlLCBvciBkZWxheSBpbiBleGVyY2lzaW5nLCBhIHJpZ2h0LCBwb3dlciBvciByZW1lZHkgcHJvdmlkZWQgYnkgdGhlIFRlcm1zIG9yIGJ5IGxhdyBzaGFsbCBub3QgY29uc3RpdHV0ZSBhIHdhaXZlciBvZiB0aGF0IHJpZ2h0LCBwb3dlciBvciByZW1lZHkuIElmIFNreXBlIHdhaXZlcyBhIGJyZWFjaCBvZiBhbnkgcHJvdmlzaW9uIG9mIHRoZSBUZXJtcyB0aGlzIHNoYWxsIG5vdCBvcGVyYXRlIGFzIGEgd2FpdmVyIG9mIGEgc3Vic2VxdWVudCBicmVhY2ggb2YgdGhhdCBwcm92aXNpb24sIG9yIGFzIGEgd2FpdmVyIG9mIGEgYnJlYWNoIG9mIGFueSBvdGhlciBwcm92aXNpb24uCisKKzguNCBBc3NpZ25tZW50OiBZb3UgYXJlIG5vdCBhbGxvd2VkIHRvIGFzc2lnbiB0aGUgVGVybXMgb3IgYW55IHJpZ2h0cyBoZXJldW5kZXIuIFNreXBlIGlzIGFsbG93ZWQgYXQgaXRzIHNvbGUgZGlzY3JldGlvbiB0byBhc3NpZ24gdGhlIFRlcm1zIG9yIGFueSByaWdodHMgaGVyZXVuZGVyIHRvIGFueSB0aGlyZCBwYXJ0eSwgd2l0aG91dCBnaXZpbmcgcHJpb3Igbm90aWNlLgorCis4LjUgQXBwbGljYWJsZSBMYXcgYW5kIENvbXBldGVudCBDb3VydDogVGhlIFRlcm1zIHNoYWxsIGJlIGdvdmVybmVkIGJ5IGFuZCBpbnRlcnByZXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGxhd3Mgb2YgTHV4ZW1ib3VyZyBhbmQgc2hhbGwgYmUgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBjb3VydHMgb2YgdGhlIGRpc3RyaWN0IG9mIEx1eGVtYm91cmcuCisKKzguNiBMYW5ndWFnZTogVGhlIG9yaWdpbmFsIEVuZ2xpc2ggdmVyc2lvbiBvZiB0aGUgVGVybXMgbWF5IGhhdmUgYmVlbiB0cmFuc2xhdGVkIGludG8gb3RoZXIgbGFuZ3VhZ2VzLiBJbiB0aGUgZXZlbnQgb2YgaW5jb25zaXN0ZW5jeSBvciBkaXNjcmVwYW5jeSBiZXR3ZWVuIHRoZSBFbmdsaXNoIHZlcnNpb24gYW5kIGFueSBvdGhlciBsYW5ndWFnZSB2ZXJzaW9uLCB0aGUgRW5nbGlzaCBsYW5ndWFnZSB2ZXJzaW9uIHNoYWxsIHByZXZhaWwuCisKKzguNyBTdXJ2aXZhbDogVGhlIHRlcm1zIG9mIHBhcmFncmFwaHMgMi41LCA1IGFuZCA2IG9mIHRoaXMgQWdyZWVtZW50LCBhbmQgYW55IG90aGVyIHByb3Zpc2lvbiBvZiB0aGUgQWRkaXRpb25hbCBUZXJtcyB3aGljaCBpcyBleHByZXNzZWQgdG8gc3Vydml2ZSBvciBvcGVyYXRlIGluIHRoZSBldmVudCBvZiB0ZXJtaW5hdGlvbiwgc2hhbGwgc3Vydml2ZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIEFncmVlbWVudCBhbmQgdGhlIGFwcGxpY2FibGUgQWRkaXRpb25hbCBUZXJtcyBmb3Igd2hhdGV2ZXIgcmVhc29uLgorCis4LjggQVZDL0guMjY0IE5vdGljZTogSWYgdGhlIFNreXBlIFNvZnR3YXJlIGlzIHVzZWQgdG8gbWFrZSB2aWRlbyBjYWxscyAoaSkgYmV0d2VlbiBZb3VyIHBlcnNvbmFsIGNvbXB1dGVyIGFuZCBhIGRldmljZSB0aGF0IGlzIG5vdCBhIHBlcnNvbmFsIGNvbXB1dGVyIG9yIChpaSkgYmV0d2VlbiBkZXZpY2VzIHRoYXQgYXJlIG5vdCBwZXJzb25hbCBjb21wdXRlcnMsIHRoZSBBVkMvSC4yNjQgY29kZWMgbWF5IGJlIHVzZWQgdG8gZmFjaWxpdGF0ZSB2aWRlbyBmdW5jdGlvbmFsaXR5IGluIHdoaWNoIGNhc2UgdGhlIGZvbGxvd2luZyBub3RpY2UgYXBwbGllczogVEhFIEFWQyBWSURFTyBGVU5DVElPTkFMSVRZIElOIFRISVMgUFJPRFVDVCBJUyBMSUNFTlNFRCBVTkRFUiBUSEUgQVZDIFBBVEVOVCBQT1JURk9MSU8gTElDRU5TRSBGT1IgVEhFIFBFUlNPTkFMIEFORCBOT05DT01NRVJDSUFMIFVTRSBPRiBBIENPTlNVTUVSIFRPIChpKSBFTkNPREUgVklERU8gSU4gQ09NUExJQU5DRSBXSVRIIFRIRSBBVkMgU1RBTkRBUkQgKOKAnEFWQyBWSURFT+KAnSkgQU5EL09SIChpaSkgREVDT0RFIEFWQyBWSURFTyBUSEFUIFdBUyBFTkNPREVEIEJZIEEgQ09OU1VNRVIgRU5HQUdFRCBJTiBBIFBFUlNPTkFMIEFORCBOT04tQ09NTUVSQ0lBTCBBQ1RJVklUWSBBTkQvT1IgV0FTIE9CVEFJTkVEIEZST00gQSBWSURFTyBQUk9WSURFUiBMSUNFTlNFRCBUTyBQUk9WSURFIEFWQyBWSURFTy4gTk8gTElDRU5TRSBJUyBHUkFOVEVEIE9SIFNIQUxMIEJFIElNUExJRUQgRk9SIEFOWSBPVEhFUiBVU0UuIEFERElUSU9OQUwgSU5GT1JNQVRJT04gTUFZIEJFIE9CVEFJTkVEIEZST00gTVBFRyBMQSwgTC5MLkMuIFNFRSBIVFRQOi8vV1dXLk1QRUdMQS5DT00uCisKK1lPVSBFWFBSRVNTTFkgQUNLTk9XTEVER0UgVEhBVCBZT1UgSEFWRSBSRUFEIFRISVMgQUdSRUVNRU5UIEFORCBVTkRFUlNUQU5EIFRIRSBSSUdIVFMsIE9CTElHQVRJT05TLCBURVJNUyBBTkQgQ09ORElUSU9OUyBTRVQgRk9SVEggSEVSRUlOLiBCWSBDTElDS0lORyBPTiBUSEUgQUNDRVBUIEJVVFRPTiBBTkQvT1IgQ09OVElOVUlORyBUTyBJTlNUQUxMIFRIRSBTS1lQRSBTT0ZUV0FSRSwgWU9VIEVYUFJFU1NMWSBDT05TRU5UIFRPIEJFIEJPVU5EIEJZIElUUyBURVJNUyBBTkQgQ09ORElUSU9OUyBBTkQgR1JBTlQgVE8gU0tZUEUgVEhFIFJJR0hUUyBTRVQgRk9SVEggSEVSRUlOLgorCivCqSBTa3lwZSDigJMgTGFzdCByZXZpc2VkOiBNYXkgMjAwOQpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvc2t5cGUtNC4wLjAuNy10aGlyZC1wYXJ0eV9hdHRyaWJ1dGlvbnMudHh0IGIvbGljZW5zZXMvc2t5cGUtNC4wLjAuNy10aGlyZC1wYXJ0eV9hdHRyaWJ1dGlvbnMudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NmM2MDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9za3lwZS00LjAuMC43LXRoaXJkLXBhcnR5X2F0dHJpYnV0aW9ucy50eHQKQEAgLTAsMCArMSwxNjUgQEAKK1RoaXMgY29weSBvZiB0aGUgbGlicG5nIG5vdGljZXMgaXMgcHJvdmlkZWQgZm9yIHlvdXIgY29udmVuaWVuY2UuICBJbiBjYXNlIG9mCithbnkgZGlzY3JlcGFuY3kgYmV0d2VlbiB0aGlzIGNvcHkgYW5kIHRoZSBub3RpY2VzIGluIHRoZSBmaWxlIHBuZy5oIHRoYXQgaXMKK2luY2x1ZGVkIGluIHRoZSBsaWJwbmcgZGlzdHJpYnV0aW9uLCB0aGUgbGF0dGVyIHNoYWxsIHByZXZhaWwuCisKK0NPUFlSSUdIVCBOT1RJQ0UsIERJU0NMQUlNRVIsIGFuZCBMSUNFTlNFOgorCitJZiB5b3UgbW9kaWZ5IGxpYnBuZyB5b3UgbWF5IGluc2VydCBhZGRpdGlvbmFsIG5vdGljZXMgaW1tZWRpYXRlbHkgZm9sbG93aW5nCit0aGlzIHNlbnRlbmNlLgorCitUaGlzIGNvZGUgaXMgcmVsZWFzZWQgdW5kZXIgdGhlIGxpYnBuZyBsaWNlbnNlLgorCitsaWJwbmcgdmVyc2lvbnMgMS4yLjYsIEF1Z3VzdCAxNSwgMjAwNCwgdGhyb3VnaCAxLjUuMTAsIE1hcmNoIDI5LCAyMDEyLCBhcmUKK0NvcHlyaWdodCAoYykgMjAwNCwgMjAwNi0yMDExIEdsZW5uIFJhbmRlcnMtUGVocnNvbiwgYW5kIGFyZQorZGlzdHJpYnV0ZWQgYWNjb3JkaW5nIHRvIHRoZSBzYW1lIGRpc2NsYWltZXIgYW5kIGxpY2Vuc2UgYXMgbGlicG5nLTEuMi41Cit3aXRoIHRoZSBmb2xsb3dpbmcgaW5kaXZpZHVhbCBhZGRlZCB0byB0aGUgbGlzdCBvZiBDb250cmlidXRpbmcgQXV0aG9ycworCisgICBDb3NtaW4gVHJ1dGEKKworbGlicG5nIHZlcnNpb25zIDEuMC43LCBKdWx5IDEsIDIwMDAsIHRocm91Z2ggMS4yLjUgLSBPY3RvYmVyIDMsIDIwMDIsIGFyZQorQ29weXJpZ2h0IChjKSAyMDAwLTIwMDIgR2xlbm4gUmFuZGVycy1QZWhyc29uLCBhbmQgYXJlCitkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHNhbWUgZGlzY2xhaW1lciBhbmQgbGljZW5zZSBhcyBsaWJwbmctMS4wLjYKK3dpdGggdGhlIGZvbGxvd2luZyBpbmRpdmlkdWFscyBhZGRlZCB0byB0aGUgbGlzdCBvZiBDb250cmlidXRpbmcgQXV0aG9ycworCisgICBTaW1vbi1QaWVycmUgQ2FkaWV1eAorICAgRXJpYyBTLiBSYXltb25kCisgICBHaWxsZXMgVm9sbGFudAorCithbmQgd2l0aCB0aGUgZm9sbG93aW5nIGFkZGl0aW9ucyB0byB0aGUgZGlzY2xhaW1lcjoKKworICAgVGhlcmUgaXMgbm8gd2FycmFudHkgYWdhaW5zdCBpbnRlcmZlcmVuY2Ugd2l0aCB5b3VyIGVuam95bWVudCBvZiB0aGUKKyAgIGxpYnJhcnkgb3IgYWdhaW5zdCBpbmZyaW5nZW1lbnQuICBUaGVyZSBpcyBubyB3YXJyYW50eSB0aGF0IG91cgorICAgZWZmb3J0cyBvciB0aGUgbGlicmFyeSB3aWxsIGZ1bGZpbGwgYW55IG9mIHlvdXIgcGFydGljdWxhciBwdXJwb3NlcworICAgb3IgbmVlZHMuICBUaGlzIGxpYnJhcnkgaXMgcHJvdmlkZWQgd2l0aCBhbGwgZmF1bHRzLCBhbmQgdGhlIGVudGlyZQorICAgcmlzayBvZiBzYXRpc2ZhY3RvcnkgcXVhbGl0eSwgcGVyZm9ybWFuY2UsIGFjY3VyYWN5LCBhbmQgZWZmb3J0IGlzIHdpdGgKKyAgIHRoZSB1c2VyLgorCitsaWJwbmcgdmVyc2lvbnMgMC45NywgSmFudWFyeSAxOTk4LCB0aHJvdWdoIDEuMC42LCBNYXJjaCAyMCwgMjAwMCwgYXJlCitDb3B5cmlnaHQgKGMpIDE5OTgsIDE5OTkgR2xlbm4gUmFuZGVycy1QZWhyc29uLCBhbmQgYXJlCitkaXN0cmlidXRlZCBhY2NvcmRpbmcgdG8gdGhlIHNhbWUgZGlzY2xhaW1lciBhbmQgbGljZW5zZSBhcyBsaWJwbmctMC45NiwKK3dpdGggdGhlIGZvbGxvd2luZyBpbmRpdmlkdWFscyBhZGRlZCB0byB0aGUgbGlzdCBvZiBDb250cmlidXRpbmcgQXV0aG9yczoKKworICAgVG9tIExhbmUKKyAgIEdsZW5uIFJhbmRlcnMtUGVocnNvbgorICAgV2lsbGVtIHZhbiBTY2hhaWsKKworbGlicG5nIHZlcnNpb25zIDAuODksIEp1bmUgMTk5NiwgdGhyb3VnaCAwLjk2LCBNYXkgMTk5NywgYXJlCitDb3B5cmlnaHQgKGMpIDE5OTYsIDE5OTcgQW5kcmVhcyBEaWxnZXIKK0Rpc3RyaWJ1dGVkIGFjY29yZGluZyB0byB0aGUgc2FtZSBkaXNjbGFpbWVyIGFuZCBsaWNlbnNlIGFzIGxpYnBuZy0wLjg4LAord2l0aCB0aGUgZm9sbG93aW5nIGluZGl2aWR1YWxzIGFkZGVkIHRvIHRoZSBsaXN0IG9mIENvbnRyaWJ1dGluZyBBdXRob3JzOgorCisgICBKb2huIEJvd2xlcgorICAgS2V2aW4gQnJhY2V5CisgICBTYW0gQnVzaGVsbAorICAgTWFnbnVzIEhvbG1ncmVuCisgICBHcmVnIFJvZWxvZnMKKyAgIFRvbSBUYW5uZXIKKworbGlicG5nIHZlcnNpb25zIDAuNSwgTWF5IDE5OTUsIHRocm91Z2ggMC44OCwgSmFudWFyeSAxOTk2LCBhcmUKK0NvcHlyaWdodCAoYykgMTk5NSwgMTk5NiBHdXkgRXJpYyBTY2hhbG5hdCwgR3JvdXAgNDIsIEluYy4KKworRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIGNvcHlyaWdodCBhbmQgbGljZW5zZSwgIkNvbnRyaWJ1dGluZyBBdXRob3JzIgoraXMgZGVmaW5lZCBhcyB0aGUgZm9sbG93aW5nIHNldCBvZiBpbmRpdmlkdWFsczoKKworICAgQW5kcmVhcyBEaWxnZXIKKyAgIERhdmUgTWFydGluZGFsZQorICAgR3V5IEVyaWMgU2NoYWxuYXQKKyAgIFBhdWwgU2NobWlkdAorICAgVGltIFdlZ25lcgorCitUaGUgUE5HIFJlZmVyZW5jZSBMaWJyYXJ5IGlzIHN1cHBsaWVkICJBUyBJUyIuICBUaGUgQ29udHJpYnV0aW5nIEF1dGhvcnMKK2FuZCBHcm91cCA0MiwgSW5jLiBkaXNjbGFpbSBhbGwgd2FycmFudGllcywgZXhwcmVzc2VkIG9yIGltcGxpZWQsCitpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgdGhlIHdhcnJhbnRpZXMgb2YgbWVyY2hhbnRhYmlsaXR5IGFuZCBvZgorZml0bmVzcyBmb3IgYW55IHB1cnBvc2UuICBUaGUgQ29udHJpYnV0aW5nIEF1dGhvcnMgYW5kIEdyb3VwIDQyLCBJbmMuCithc3N1bWUgbm8gbGlhYmlsaXR5IGZvciBkaXJlY3QsIGluZGlyZWN0LCBpbmNpZGVudGFsLCBzcGVjaWFsLCBleGVtcGxhcnksCitvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHdoaWNoIG1heSByZXN1bHQgZnJvbSB0aGUgdXNlIG9mIHRoZSBQTkcKK1JlZmVyZW5jZSBMaWJyYXJ5LCBldmVuIGlmIGFkdmlzZWQgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggZGFtYWdlLgorCitQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCitzb3VyY2UgY29kZSwgb3IgcG9ydGlvbnMgaGVyZW9mLCBmb3IgYW55IHB1cnBvc2UsIHdpdGhvdXQgZmVlLCBzdWJqZWN0Cit0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworMS4gVGhlIG9yaWdpbiBvZiB0aGlzIHNvdXJjZSBjb2RlIG11c3Qgbm90IGJlIG1pc3JlcHJlc2VudGVkLgorCisyLiBBbHRlcmVkIHZlcnNpb25zIG11c3QgYmUgcGxhaW5seSBtYXJrZWQgYXMgc3VjaCBhbmQgbXVzdCBub3QKKyAgIGJlIG1pc3JlcHJlc2VudGVkIGFzIGJlaW5nIHRoZSBvcmlnaW5hbCBzb3VyY2UuCisKKzMuIFRoaXMgQ29weXJpZ2h0IG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueQorICAgc291cmNlIG9yIGFsdGVyZWQgc291cmNlIGRpc3RyaWJ1dGlvbi4KKworVGhlIENvbnRyaWJ1dGluZyBBdXRob3JzIGFuZCBHcm91cCA0MiwgSW5jLiBzcGVjaWZpY2FsbHkgcGVybWl0LCB3aXRob3V0CitmZWUsIGFuZCBlbmNvdXJhZ2UgdGhlIHVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGFzIGEgY29tcG9uZW50IHRvCitzdXBwb3J0aW5nIHRoZSBQTkcgZmlsZSBmb3JtYXQgaW4gY29tbWVyY2lhbCBwcm9kdWN0cy4gIElmIHlvdSB1c2UgdGhpcworc291cmNlIGNvZGUgaW4gYSBwcm9kdWN0LCBhY2tub3dsZWRnbWVudCBpcyBub3QgcmVxdWlyZWQgYnV0IHdvdWxkIGJlCithcHByZWNpYXRlZC4KKworCitBICJwbmdfZ2V0X2NvcHlyaWdodCIgZnVuY3Rpb24gaXMgYXZhaWxhYmxlLCBmb3IgY29udmVuaWVudCB1c2UgaW4gImFib3V0IgorYm94ZXMgYW5kIHRoZSBsaWtlOgorCisgICBwcmludGYoIiVzIixwbmdfZ2V0X2NvcHlyaWdodChOVUxMKSk7CisKK0Fsc28sIHRoZSBQTkcgbG9nbyAoaW4gUE5HIGZvcm1hdCwgb2YgY291cnNlKSBpcyBzdXBwbGllZCBpbiB0aGUKK2ZpbGVzICJwbmdiYXIucG5nIiBhbmQgInBuZ2Jhci5qcGcgKDg4eDMxKSBhbmQgInBuZ25vdy5wbmciICg5OHgzMSkuCisKK0xpYnBuZyBpcyBPU0kgQ2VydGlmaWVkIE9wZW4gU291cmNlIFNvZnR3YXJlLiAgT1NJIENlcnRpZmllZCBPcGVuIFNvdXJjZSBpcyBhCitjZXJ0aWZpY2F0aW9uIG1hcmsgb2YgdGhlIE9wZW4gU291cmNlIEluaXRpYXRpdmUuCisKK0dsZW5uIFJhbmRlcnMtUGVocnNvbgorZ2xlbm5ycCBhdCB1c2Vycy5zb3VyY2Vmb3JnZS5uZXQKK01hcmNoIDI5LCAyMDEyCisKKworCisKK1RoaXMgc29mdHdhcmUgaXMgYmFzZWQgaW4gcGFydCBvbiB0aGUgd29yayBvZiB0aGUgSW5kZXBlbmRlbnQgSlBFRyBHcm91cAorCisKKworSGFyZkJ1enogd2FzIHByZXZpb3VzbHkgbGljZW5zZWQgdW5kZXIgZGlmZmVyZW50IGxpY2Vuc2VzLiAgVGhpcyB3YXMKK2NoYW5nZWQgaW4gSmFudWFyeSAyMDA4LiAgSWYgeW91IG5lZWQgdG8gcmVsaWNlbnNlIHlvdXIgb2xkIGNvcGllcywKK2NvbnN1bHQgdGhlIGFubm91bmNlbWVudCBvZiB0aGUgbGljZW5zZSBjaGFuZ2Ugb24gdGhlIGludGVybmV0LgorT3RoZXIgdGhhbiB0aGF0LCBlYWNoIGNvcHkgb2YgSGFyZkJ1enogaXMgbGljZW5zZWQgdW5kZXIgdGhlIENPUFlJTkcKK2ZpbGUgaW5jbHVkZWQgd2l0aCBpdC4gIFRoZSBhY3R1YWwgbGljZW5zZSBmb2xsb3dzOgorCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIHdpdGhvdXQgd3JpdHRlbiBhZ3JlZW1lbnQgYW5kIHdpdGhvdXQKK2xpY2Vuc2Ugb3Igcm95YWx0eSBmZWVzLCB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSwgcHJvdmlkZWQgdGhhdCB0aGUKK2Fib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBmb2xsb3dpbmcgdHdvIHBhcmFncmFwaHMgYXBwZWFyIGluCithbGwgY29waWVzIG9mIHRoaXMgc29mdHdhcmUuCisKK0lOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgSE9MREVSIEJFIExJQUJMRSBUTyBBTlkgUEFSVFkgRk9SCitESVJFQ1QsIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKK0FSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSBBTkQgSVRTIERPQ1VNRU5UQVRJT04sIEVWRU4KK0lGIFRIRSBDT1BZUklHSFQgSE9MREVSIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0gKK0RBTUFHRS4KKworVEhFIENPUFlSSUdIVCBIT0xERVIgU1BFQ0lGSUNBTExZIERJU0NMQUlNUyBBTlkgV0FSUkFOVElFUywgSU5DTFVESU5HLAorQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgVEhFIFNPRlRXQVJFIFBST1ZJREVEIEhFUkVVTkRFUiBJUworT04gQU4gIkFTIElTIiBCQVNJUywgQU5EIFRIRSBDT1BZUklHSFQgSE9MREVSIEhBUyBOTyBPQkxJR0FUSU9OIFRPCitQUk9WSURFIE1BSU5URU5BTkNFLCBTVVBQT1JULCBVUERBVEVTLCBFTkhBTkNFTUVOVFMsIE9SIE1PRElGSUNBVElPTlMuCisKKworCisKK0Rpc2NsYWltZXIgZm9yIFJvYmVydCBQZW5uZXIncyBFYXNpbmcgRXF1YXRpb25zIGxpY2Vuc2U6CisKK1RFUk1TIE9GIFVTRSAtIEVBU0lORyBFUVVBVElPTlMKKworT3BlbiBzb3VyY2UgdW5kZXIgdGhlIEJTRCBMaWNlbnNlLgorCitDb3B5cmlnaHQgwqkgMjAwMSBSb2JlcnQgUGVubmVyCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAgICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIGF1dGhvciBub3IgdGhlIG5hbWVzIG9mIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworCitFbmQKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL3NreXBlLWV1bGEgYi9saWNlbnNlcy9za3lwZS1ldWxhCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5ZmI5NDMKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9za3lwZS1ldWxhCkBAIC0wLDAgKzEsODkgQEAKK1NreXBlIEVuZCBVc2VyIExpY2Vuc2UgQWdyZWVtZW50CitJTVBPUlRBTlQg4oCTIFBMRUFTRSBSRUFEIENBUkVGVUxMWQorCisqIElNUE9SVEFOVDogdmVyc2lvbiBmcmFuw6dhaXNlIHN1ciAoRnJlbmNoIHZlcnNpb24gYXZhaWxhYmxlIGF0KQorICBodHRwOi8vd3d3LnNreXBlLmNvbS9nby9ldWxhLWZyCisqIElNUE9SVEFOVDog5rOo5oSP77ya566A5L2T5Lit5paH44CK5pyA57uI55So5oi36K645Y+v5Y2P6K6u44CL5Zyo5q2k5rWP6KeIIChTaW1wbGlmaWVkIENoaW5lc2UgdmVyc2lvbgorICBhdmFpbGFibGUgYXQpIGh0dHA6Ly93d3cuc2t5cGUuY29tL2dvL2V1bGEtc2MKKworTm8gRW1lcmdlbmN5IENhbGxzOiBUaGUgU2t5cGUgc29mdHdhcmUgaXMgbm90IGludGVuZGVkIHRvIHN1cHBvcnQgb3IgY2FycnkgZW1lcmdlbmN5IGNhbGxzIHRvIGFueSB0eXBlIG9mIGhvc3BpdGFsLCBsYXcgZW5mb3JjZW1lbnQgYWdlbmN5LCBtZWRpY2FsIGNhcmUgdW5pdCBvciBhbnkgb3RoZXIga2luZCBvZiBlbWVyZ2VuY3kgc2VydmljZXMuIEFkZGl0aW9uYWwgYXJyYW5nZW1lbnRzIG11c3QgYmUgbWFkZSB0byBhY2Nlc3MgZW1lcmdlbmN5IHNlcnZpY2VzLiBJdCBpcyB5b3VyIHJlc3BvbnNpYmlsaXR5IHRvIHB1cmNoYXNlLCBzZXBhcmF0ZWx5IGZyb20gU2t5cGUgU29mdHdhcmUsIHRyYWRpdGlvbmFsIHdpcmVsZXNzIG9yIGxhbmRsaW5lIHRlbGVwaG9uZSBzZXJ2aWNlIHRoYXQgb2ZmZXJzIGFjY2VzcyB0byBlbWVyZ2VuY3kgc2VydmljZXMuCisKK1RoaXMgQWdyZWVtZW50OiBUaGlzIGFncmVlbWVudCwgYW5kIGFueSBuZXcgdmVyc2lvbnMsIGJldHdlZW4gU2t5cGUgU29mdHdhcmUgUy5hLnIubCAoU2t5cGUpIGFuZCB5b3UsIGNvdmVycyBhbGwgeW91ciB1c2Ugb2YgU2t5cGUgU29mdHdhcmUgZnJvbSBhbnkgdGVybWluYWxzIHdoZXJlIFNreXBlIFNvZnR3YXJlIGhhcyBiZWVuIGluc3RhbGxlZCwgYnkgeW91IG9yIGJ5IHRoaXJkIHBhcnRpZXMsIGFuZCBieSB1c2luZyBTa3lwZSBzb2Z0d2FyZSB5b3UgYWNjZXB0IHRoZSBmb2xsb3dpbmcuCisKK0p1cmlzZGljdGlvbuKAmXMgUmVzdHJpY3Rpb25zOiBJZiB0aGUgbGF3IG9mIHlvdXIgY291bnRyeSBwcm9oaWJpdHMgeW91IGZyb20gZG93bmxvYWRpbmcgb3IgdXNpbmcgb3VyIHNvZnR3YXJlIGJlY2F1c2UgeW914oCZcmUgdW5kZXIgdGhlIGFnZSBsaW1pdCBvciBiZWNhdXNlIG91ciBwcm9kdWN0cyBhcmUgbm90IGFsbG93ZWQgaW4geW91ciBjb3VudHJ5LCBwbGVhc2UgZG9u4oCZdCB1c2UgaXQuCisKK0xpY2Vuc2UgYW5kIFJlc3RyaWN0aW9ucworTGljZW5zZS4gU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIFNreXBlIGhlcmVieSBncmFudHMgeW91IGEgbGltaXRlZCwgcGVyc29uYWwsIG5vbi1jb21tZXJjaWFsLCBub24tZXhjbHVzaXZlLCBub24tc3VibGljZW5zYWJsZSwgbm9uLWFzc2lnbmFibGUsIGZyZWUgb2YgY2hhcmdlIGxpY2Vuc2UgdG8gZG93bmxvYWQsIGluc3RhbGwgYW5kIHVzZSB0aGUgU2t5cGUgU29mdHdhcmUgb24geW91ciBjb21wdXRlciwgcGhvbmUgb3IgUERBIGZvciB0aGUgc29sZSBwdXJwb3NlIG9mIHBlcnNvbmFsbHkgdXNpbmcgdGhlIGludGVybmV0IGNvbW11bmljYXRpb24gYXBwbGljYXRpb25zIHByb3ZpZGVkIGJ5IFNreXBlIGFuZCBhbnkgb3RoZXIgYXBwbGljYXRpb25zIHRoYXQgbWF5IGJlIGV4cGxpY2l0bHkgcHJvdmlkZWQgYnkgU2t5cGUuIEZvciB0aGUgYXZvaWRhbmNlIG9mIGRvdWJ0LCB5b3UgYXJlIGFsbG93ZWQgdG8gdXNlIFNreXBlIHNvZnR3YXJlIGF0IHdvcmssIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQuIFRoZSBTa3lwZSBzb2Z0d2FyZSBpcyB0aGUgc29mdHdhcmUgZGlzdHJpYnV0ZWQgYnkgU2t5cGUgZm9yIGludGVybmV0IGNvbW11bmljYXRpb24gYXBwbGljYXRpb25zLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSBTa3lwZSBBUEksIFVJIGFuZCBkb2N1bWVudGF0aW9uIChvbmxpbmUgb3Igb2ZmbGluZSksIGFzIHdlbGwgYXMgYW55IGZ1dHVyZSBwcm9ncmFtbWluZyBmaXhlcywgdXBkYXRlcyBhbmQgdXBncmFkZXMgdGhlcmVvZi4KKworTm8gTW9kaWZpY2F0aW9ucy4gWW91IHdpbGwgbm90IHVuZGVydGFrZSwgY2F1c2UsIHBlcm1pdCBvciBhdXRob3JpemUgdGhlIG1vZGlmaWNhdGlvbiwgY3JlYXRpb24gb2YgZGVyaXZhdGl2ZSB3b3JrcywgdHJhbnNsYXRpb24sIHJldmVyc2UgZW5naW5lZXJpbmcsIGRlY29tcGlsaW5nLCBkaXNhc3NlbWJsaW5nIG9yIGhhY2tpbmcgb2YgdGhlIFNreXBlIFNvZnR3YXJlIG9yIGFueSBwYXJ0IHRoZXJlb2YuCisKK1RoaXJkIFBhcnRpZXMuIFRoZSBTa3lwZSBTb2Z0d2FyZSBtYXkgYmUgaW5jb3Jwb3JhdGVkIGludG8sIGFuZCBtYXkgaW5jb3Jwb3JhdGUgaXRzZWxmLCBzb2Z0d2FyZSBhbmQgb3RoZXIgdGVjaG5vbG9neSBvd25lZCBhbmQgY29udHJvbGxlZCBieSB0aGlyZCBwYXJ0aWVzLiBBbnkgc3VjaCB0aGlyZCBwYXJ0eSBzb2Z0d2FyZSBvciB0ZWNobm9sb2d5IHRoYXQgaXMgaW5jb3Jwb3JhdGVkIGluIHRoZSBTa3lwZSBTb2Z0d2FyZSBmYWxscyB1bmRlciB0aGUgc2NvcGUgb2YgdGhpcyBBZ3JlZW1lbnQuCisKK0V4Y2x1c2l2ZSBPd25lcnNoaXAuIEFueSBhbmQgYWxsIElQIHJpZ2h0cyB0byBvciBhcmlzaW5nIGZyb20gdGhlIFNreXBlIFNvZnR3YXJlIGFyZSBhbmQgc2hhbGwgcmVtYWluIHRoZSBleGNsdXNpdmUgcHJvcGVydHkgb2YgU2t5cGUgYW5kL29yIGl0cyBsaWNlbnNvcnMuIE5vdGhpbmcgaW4gdGhpcyBBZ3JlZW1lbnQgaW50ZW5kcyB0byB0cmFuc2ZlciBhbnkgc3VjaCBJUCByaWdodHMgdG8sIG9yIHRvIHZlc3QgYW55IHN1Y2ggSVAgcmlnaHRzIGluLCB5b3UuIFlvdSBhcmUgb25seSBlbnRpdGxlZCB0byB0aGUgbGltaXRlZCB1c2Ugb2YgdGhlIElQIHJpZ2h0cyBncmFudGVkIHRvIHlvdSBpbiB0aGlzIEFncmVlbWVudC4gWW91IHdpbGwgbm90IHRha2UgYW55IGFjdGlvbiB0byBqZW9wYXJkaXplLCBsaW1pdCBvciBpbnRlcmZlcmUgd2l0aCBTa3lwZeKAmXMgSVAgcmlnaHRzLiBBbnkgdW5hdXRob3JpemVkIHVzZSBvZiBTa3lwZeKAmXMgSVAgcmlnaHRzIGlzIGEgdmlvbGF0aW9uIG9mIHRoaXMgQWdyZWVtZW50IGFzIHdlbGwgYXMgYSB2aW9sYXRpb24gb2YgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3MgYW5kIHRyZWF0aWVzLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIGNvcHlyaWdodCBsYXdzIGFuZCB0cmFkZW1hcmsgbGF3cy4gQWxsIHRpdGxlIGFuZCBJUCByaWdodHMgaW4gYW5kIHRvIGFueSB0aGlyZCBwYXJ0eSBjb250ZW50IHRoYXQgaXMgbm90IGNvbnRhaW5lZCBpbiB0aGUgU2t5cGUgU29mdHdhcmUsIGJ1dCBtYXkgYmUgYWNjZXNzZWQgdGhyb3VnaCB1c2Ugb2YgdGhlIFNreXBlIFNvZnR3YXJlLCBpcyB0aGUgcHJvcGVydHkgb2YgdGhlIHJlc3BlY3RpdmUgY29udGVudCBvd25lcnMgYW5kIG1heSBiZSBwcm90ZWN0ZWQgYnkgYXBwbGljYWJsZSBjb3B5cmlnaHQgb3Igb3RoZXIgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGxhd3MgYW5kIHRyZWF0aWVzLgorCitBZGRpdGlvbmFsIFRlcm1zCitUaGUgZm9sbG93aW5nIHBvbGljaWVzIGFyZSBpbmNvcnBvcmF0ZWQgaW50byB0aGlzIEFncmVlbWVudCBhbmQgcHJvdmlkZSBhZGRpdGlvbmFsIHRlcm1zIGFuZCBjb25kaXRpb25zOgorCitUaGUgU2t5cGUgRXRpcXVldHRlIHByb3ZpZGVzIGd1aWRlbGluZXMgdG8gdHJlYXQgcHJvcGVybHkgYW5kIHJlc3BlY3RmdWxseSB0aGUgb3RoZXIgbWVtYmVycyBvZiBTa3lwZeKAmXMgY29tbXVuaXR5CitEaXN0cmlidXRpb24gb2YgU2t5cGUgU29mdHdhcmUuIFlvdSB3aWxsIG5vdCBzZWxsLCBhc3NpZ24sIHJlbnQsIGxlYXNlLCBkaXN0cmlidXRlLCBleHBvcnQsIGltcG9ydCwgYWN0IGFzIGFuIGludGVybWVkaWFyeSBvciBwcm92aWRlciwgb3Igb3RoZXJ3aXNlIGdyYW50IHJpZ2h0cyB0byB0aGlyZCBwYXJ0aWVzIHdpdGggcmVnYXJkIHRvIHRoZSBTa3lwZSBTb2Z0d2FyZSBvciBhbnkgcGFydCB0aGVyZW9mLiBGb3IgdGhlIHJpZ2h0IHRvIGRpc3RyaWJ1dGUgeW91IHdpbGwgaGF2ZSB0byBhZ3JlZSB0byBhbmQgbWVldCB3aXRoIHRoZSBEaXN0cmlidXRpb24gVGVybXMKK1NreXBlIEFQSS4gVW5kZXIgdGhpcyBBZ3JlZW1lbnQgeW91IGFyZSBub3QgYWxsb3dlZCB0byB1c2UgdGhlIFNreXBlIEFQSSB1bmxlc3MgeW91IGFncmVlZCB0byBhbmQgY29tcGx5IHdpdGggdGhlIEFQSSBUZXJtcyBvZiBVc2UKK1NreXBlIFByb21vdGlvbmFsIE1hdGVyaWFscy4gTm90aGluZyBpbiB0aGlzIEFncmVlbWVudCB3aWxsIGdpdmUgeW91IGFueSByaWdodCB0byB1c2UgdGhlIFNreXBlIFByb21vdGlvbmFsIE1hdGVyaWFscy4KK1lvdXIgQ29uZmlkZW50aWFsIEluZm9ybWF0aW9uIGFuZCBZb3VyIFByaXZhY3kuIFNreXBlIGlzIGNvbW1pdHRlZCB0byByZXNwZWN0aW5nIHlvdXIgcHJpdmFjeSBhbmQgdGhlIGNvbmZpZGVudGlhbGl0eSBvZiB5b3VyIHBlcnNvbmFsIGRhdGEuIFRoZSBQcml2YWN5IFBvbGljeSBzZXRzIG91dCBob3cgU2t5cGUgbWF5IHVzZSBvZiB5b3VyIHBlcnNvbmFsIGRhdGEsIHRoZSB0cmFmZmljIGRhdGEgYXMgd2VsbCBhcyB0aGUgY29udGVudCBjb250YWluZWQgaW4geW91ciBjb21tdW5pY2F0aW9uKHMpLgorVGhlIGZvbGxvd2luZyBhZ3JlZW1lbnRzIGFyZSByZWxhdGVkIHRvIGFkZGl0aW9uYWwgc2VydmljZXMgcHJvdmlkZWQgYnkgU2t5cGXigJlzIGFmZmlsaWF0ZXM6CisKK0FkZGl0aW9uYWwgc2VydmljZXMgKFNreXBlSW4sIFNreXBlT3V0LCBWb2ljZW1haWwsIFNreXBlY2FzdHMsIGV0Yy4pIGFyZSBwcm92aWRlZCBieSBTa3lwZSBDb21tdW5pY2F0aW9ucyBzLmEuci5sLiBhbmQgc3ViamVjdCB0byB0aGUgVGVybXMgb2YgU2VydmljZQorVGhlIHVzZSBvZiB3d3cuc2t5cGUuY29tIHdlYnNpdGUgaXMgc3ViamVjdCB0byB0aGUgVGVybXMgb2YgVXNlCitBbnkgb3RoZXIgZXhjZXB0aW9ucy4gSWYgeW91IGFyZSBpbnRlcmVzdGVkIGluIGRvaW5nIGFueXRoaW5nIGVsc2UgdGhhbiBwZXJtaXR0ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgb3IgYnkgb25lIG9mIHRoZSBhYm92ZSBhZ3JlZW1lbnRzLCB5b3Ugd2lsbCBoYXZlIHRvIG9idGFpbiBTa3lwZeKAmXMgcHJpb3Igd3JpdHRlbiBjb25zZW50IGFuZCBleHBsaWNpdGx5IGFncmVlIHVwb24gYW55IGZ1cnRoZXIgKGNvbW1lcmNpYWwpIHRlcm1zLgorCitXaGF0IHlvdSBzaG91bGQgYW5kIHNob3VsZCBub3QgZXhwZWN0IGZyb20gU2t5cGUKK05vIFdhcnJhbnRpZXMuIEluc3RhbGxpbmcgU2t5cGUgU29mdHdhcmUgZW5hYmxlcyB5b3UgdG8gY29tbXVuaWNhdGUgd2l0aCBvdGhlciBTa3lwZSBTb2Z0d2FyZSB1c2Vycy4gU2t5cGUgY2Fubm90IGd1YXJhbnRlZSB0aGF0IHlvdSB3aWxsIGFsd2F5cyBiZSBhYmxlIHRvIGNvbW11bmljYXRlIHdpdGggb3RoZXIgU2t5cGUgU29mdHdhcmUgdXNlcnMsIG5vciBjYW4gU2t5cGUgZ3VhcmFudGVlIHRoYXQgeW91IGNhbiBjb21tdW5pY2F0ZSB3aXRob3V0IGRpc3J1cHRpb25zLCBkZWxheXMgb3IgY29tbXVuaWNhdGlvbi1yZWxhdGVkIGZsYXdzIG9yIHRoYXQgYWxsIHlvdXIgY29tbXVuaWNhdGlvbnMgc2hhbGwgYWx3YXlzIGJlIGRlbGl2ZXJlZCB0byBvdGhlciBTa3lwZSBTb2Z0d2FyZSB1c2Vycy4gU2t5cGUgd2lsbCBub3QgYmUgbGlhYmxlIGZvciBhbnkgc3VjaCBkaXNydXB0aW9ucywgZGVsYXlzIG9yIG90aGVyIG9taXNzaW9ucyBpbiBhbnkgY29tbXVuaWNhdGlvbiBleHBlcmllbmNlZCB3aGVuIHVzaW5nIFNreXBlIFNvZnR3YXJlLgorCitDb250ZW50IG9mIENvbW11bmljYXRpb25zLiBZb3UgYWNrbm93bGVkZ2UgYW5kIHVuZGVyc3RhbmQgdGhhdCB0aGUgY29udGVudCBvZiB0aGUgY29tbXVuaWNhdGlvbiBzcHJlYWQgYnkgdGhlIHVzZSBvZiB0aGUgU2t5cGUgU29mdHdhcmUgaXMgZW50aXJlbHkgdGhlIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSBwZXJzb24gZnJvbSB3aG9tIHN1Y2ggY29udGVudCBvcmlnaW5hdGVkLiBZb3UsIHRoZXJlZm9yZSwgbWF5IGJlIGV4cG9zZWQgdG8gY29udGVudCB0aGF0IGlzIG9mZmVuc2l2ZSwgaGFybWZ1bCB0byBtaW5vcnMsIGluZGVjZW50IG9yIG90aGVyd2lzZSBvYmplY3Rpb25hYmxlLiBTa3lwZSB3aWxsIG5vdCBiZSBsaWFibGUgZm9yIGFueSB0eXBlIG9mIGNvbW11bmljYXRpb24gc3ByZWFkIGJ5IG1lYW5zIG9mIHRoZSBTa3lwZSBTb2Z0d2FyZS4KKworVXRpbGl6YXRpb24gb2YgWW91ciBDb21wdXRlci4gU2t5cGUgU29mdHdhcmUgbWF5IHV0aWxpemUgdGhlIHByb2Nlc3NvciBhbmQgYmFuZHdpZHRoIG9mIHRoZSBjb21wdXRlciAob3Igb3RoZXIgYXBwbGljYWJsZSBkZXZpY2UpIHlvdSBhcmUgdXRpbGl6aW5nLCBmb3IgdGhlIGxpbWl0ZWQgcHVycG9zZSBvZiBmYWNpbGl0YXRpbmcgdGhlIGNvbW11bmljYXRpb24gYmV0d2VlbiBTa3lwZSBTb2Z0d2FyZSB1c2Vycy4gU2t5cGUgU29mdHdhcmUgd2lsbCB1c2UgaXRzIGNvbW1lcmNpYWxseSByZWFzb25hYmxlIGVmZm9ydHMgdG8gcHJvdGVjdCB0aGUgcHJpdmFjeSBhbmQgaW50ZWdyaXR5IG9mIHRoZSBjb21wdXRlciByZXNvdXJjZXMgKG9yIG90aGVyIGFwcGxpY2FibGUgZGV2aWNlKSB5b3UgYXJlIHV0aWxpemluZyBhbmQgb2YgeW91ciBjb21tdW5pY2F0aW9uLCBob3dldmVyIFNreXBlIGNhbm5vdCBnaXZlIGFueSB3YXJyYW50aWVzIGluIHRoaXMgcmVzcGVjdC4KKworTmV3IFZlcnNpb25zIG9mIHRoZSBTa3lwZSBTb2Z0d2FyZS4gU2t5cGUsIGluIGl0cyBzb2xlIGRpc2NyZXRpb24sIHJlc2VydmVzIHRoZSByaWdodCB0byBhZGQgYWRkaXRpb25hbCBmZWF0dXJlcyBvciBmdW5jdGlvbnMsIG9yIHRvIHByb3ZpZGUgcHJvZ3JhbW1pbmcgZml4ZXMsIHVwZGF0ZXMgYW5kIHVwZ3JhZGVzLCB0byB0aGUgU2t5cGUgU29mdHdhcmUuIFNreXBlLCBpbiBpdHMgc29sZSBkaXNjcmV0aW9uLCBtYXkgbW9kaWZ5IG9yIGRpc2NvbnRpbnVlIG9yIHN1c3BlbmQgeW91ciBhYmlsaXR5IHRvIHVzZSBhbnkgdmVyc2lvbiBvZiB0aGUgU2t5cGUgU29mdHdhcmUsIGFuZC9vciBkaXNhYmxlIGFueSBTa3lwZSBTb2Z0d2FyZSB5b3UgbWF5IGFscmVhZHkgaGF2ZSBhY2Nlc3NlZCBvciBpbnN0YWxsZWQgd2l0aG91dCBhbnkgbm90aWNlIHRvIHlvdSwgZm9yIHRoZSByZXBhaXIsIGltcHJvdmVtZW50LCBhbmQvb3IgdXBncmFkZSBvZiB0aGUgdW5kZXJseWluZyB0ZWNobm9sb2d5IG9yIGZvciBhbnkgb3RoZXIganVzdGlmaWFibGUgcmVhc29uLCBTa3lwZSB3aWxsIG5vdCBhY2NlcHQgYW55IGxpYWJpbGl0eSBpbiByZWxhdGlvbiB0byB0aGUgZGlyZWN0IG9yIGluZGlyZWN0IGRhbWFnZXMgY2F1c2VkIGJ5IHRoZSByZWxlYXNlIGFuZC9vciB0aGUgYWJzZW5jZSBvZiByZWxlYXNlIG9mIG5ldyB2ZXJzaW9ucyBvZiB0aGUgU2t5cGUgU29mdHdhcmUuCisKK1doYXQgd2UgZXhwZWN0IGZyb20geW91CitMYXdmdWwgcHVycG9zZXMuIFlvdSB3aWxsIGF0IGFueSBhbmQgYWxsIHRpbWVzIG1lZXQgd2l0aCB5b3VyIG9ibGlnYXRpb25zIGhlcmV1bmRlciwgYXMgd2VsbCBhcyBhbnkgYW5kIGFsbCBsYXdzLCByZWd1bGF0aW9ucyBhbmQgcG9saWNpZXMgdGhhdCBtYXkgYXBwbHkgdG8gdGhlIHVzZSBvZiB0aGUgU2t5cGUgU29mdHdhcmUgaW4geW91ciBjb3VudHJ5LCBpbmNsdWRpbmcgYXBwbGljYWJsZSBydWxlcyB0aGF0IGdvdmVybiB0aGUgZXhwb3J0IG9yIGltcG9ydCBvZiBzb2Z0d2FyZS4gWW91IHdpbGwgdXNlIHRoZSBTa3lwZSBTb2Z0d2FyZSBzb2xlbHkgZm9yIGxhd2Z1bCBwdXJwb3Nlcy4gSW4gdGhpcyByZXNwZWN0IHlvdSBtYXkgbm90LCB3aXRob3V0IGxpbWl0YXRpb24gKGEpIGludGVyY2VwdCBvciBtb25pdG9yLCBkYW1hZ2Ugb3IgbW9kaWZ5IGFueSBjb21tdW5pY2F0aW9uIHdoaWNoIGlzIG5vdCBpbnRlbmRlZCBmb3IgeW91LCAoYikgdXNlIGFueSB0eXBlIG9mIHNwaWRlciwgdmlydXMsIHdvcm0sIHRyb2phbi1ob3JzZSwgdGltZSBib21iIG9yIGFueSBvdGhlciBjb2RlcyBvciBpbnN0cnVjdGlvbnMgdGhhdCBhcmUgZGVzaWduZWQgdG8gZGlzdG9ydCwgZGVsZXRlLCBkYW1hZ2Ugb3IgZGlzYXNzZW1ibGUgdGhlIFNreXBlIFNvZnR3YXJlIG9yIHRoZSBjb21tdW5pY2F0aW9uLCAoYykgc2VuZCBhbnkgdW5zb2xpY2l0ZWQgY29tbWVyY2lhbCBjb21tdW5pY2F0aW9uIG5vdCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsIChkKSBleHBvc2UgYW55IG90aGVyIHVzZXIgdG8gbWF0ZXJpYWwgd2hpY2ggaXMgb2ZmZW5zaXZlLCBoYXJtZnVsIHRvIG1pbm9ycywgaW5kZWNlbnQgb3Igb3RoZXJ3aXNlIG9iamVjdGlvbmFibGUgb3IgKGUpIGVuZGFuZ2VyIGFueSBwYXJ0IG9mIGFueSBzeXN0ZW0gb3IgSW50ZXJuZXQgY29ubmVjdGlvbiBvZiBTa3lwZSBvciBhbnkgdGhpcmQgcGFydHkuCisKK0luZGVtbmlmaWNhdGlvbi4gWW91IGFncmVlIG9uIGRlbWFuZCB0byBpbmRlbW5pZnksIGRlZmVuZCBhbmQgaG9sZCBTa3lwZSwgYWZmaWxpYXRlcyBhbmQgU2t5cGUgc3RhZmYgaGFybWxlc3MgZnJvbSBhbmQgYWdhaW5zdCBhbnkgYW5kIGFsbCBsaWFiaWxpdHkgYW5kIGNvc3RzLCBpbmNsdWRpbmcgcmVhc29uYWJsZSBhdHRvcm5leXPigJkgZmVlcyBpbmN1cnJlZCBieSBzdWNoIHBhcnRpZXMsIGluIGNvbm5lY3Rpb24gd2l0aCBvciBhcmlzaW5nIG91dCBvZiB5b3VyIChhKSB2aW9sYXRpb24gb3IgYnJlYWNoIG9mIGFueSB0ZXJtIG9mIHRoaXMgQWdyZWVtZW50IG9yIGFueSBhcHBsaWNhYmxlIGxhdyBvciByZWd1bGF0aW9uLCB3aGV0aGVyIG9yIG5vdCByZWZlcmVuY2VkIGhlcmVpbiwgb3IgKGIpIHZpb2xhdGlvbiBvZiBhbnkgcmlnaHRzIG9mIGFueSB0aGlyZCBwYXJ0eSwgb3IgKGMpIHVzZSBvciBtaXN1c2Ugb2YgdGhlIFNreXBlIFNvZnR3YXJlLCBvciAoZCkgY29tbXVuaWNhdGlvbiBzcHJlYWQgYnkgbWVhbnMgb2YgdGhlIFNreXBlIFNvZnR3YXJlLgorCitUZXJtLCBUZXJtaW5hdGlvbiwgVXBkYXRlcworVGVybS4gVGhpcyBBZ3JlZW1lbnQgd2lsbCBiZSBlZmZlY3RpdmUgYXMgb2YgdGhlIGRhdGUgeW91IGZpcnN0IGluc3RhbGwgU2t5cGUgc29mdHdhcmUgYW5kIHdpbGwgcmVtYWluIGVmZmVjdGl2ZSB1bnRpbCB0ZXJtaW5hdGVkIGJ5IGVpdGhlciBTa3lwZSBvciB5b3UgYXMgc2V0IGZvcnRoIGJlbG93LgorCitUZXJtaW5hdGlvbiBZb3UgbWF5IHRlcm1pbmF0ZSB0aGlzIEFncmVlbWVudCB3aXRoIGltbWVkaWF0ZSBlZmZlY3QgYXQgYW55IHRpbWUuIFdpdGhvdXQgbGltaXRpbmcgb3RoZXIgcmVtZWRpZXMsIFNreXBlIG1heSBsaW1pdCwgc3VzcGVuZCwgb3IgdGVybWluYXRlIHRoaXMgbGljZW5zZSBhbmQgeW91ciB1c2Ugb2YgU2t5cGUgU29mdHdhcmUsIHByb2hpYml0IGFjY2VzcyB0byBTa3lwZSBXZWJzaXRlIGFuZCBkZWxldGUgeW91ciB1c2VyIGFjY291bnQgYW5kL29yIHVzZXIgSUQsIHdpdGggaW1tZWRpYXRlIGVmZmVjdCwgaWYgd2UgdGhpbmsgdGhhdCB5b3UgYXJlIGluIGJyZWFjaCBvZiB0aGlzIEFncmVlbWVudCwgY3JlYXRpbmcgcHJvYmxlbXMsIGxlZ2FsIGxpYWJpbGl0aWVzIChhY3R1YWwgb3IgcG90ZW50aWFsKSwgYWN0aW5nIGluY29uc2lzdGVudGx5IHdpdGggdGhlIGxldHRlciBvciBzcGlyaXQgb2Ygb3VyIHBvbGljaWVzLCB3aGljaCBjYW4gYmUgZm91bmQgYXQgd3d3LnNreXBlLmNvbS9jb21wYW55L2xlZ2FsL3Rlcm1zL2V0aXF1ZXR0ZS5odG1sLCBpbmZyaW5naW5nIHNvbWVvbmUgZWxzZeKAmXMgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cywgZW5nYWdpbmcgaW4gZnJhdWR1bGVudCwgaW1tb3JhbCBvciBpbGxlZ2FsIGFjdGl2aXRpZXMsIG9yIGZvciBvdGhlciBzaW1pbGFyIHJlYXNvbnMuIFNreXBlIHNoYWxsIGVmZmVjdCBzdWNoIHRlcm1pbmF0aW9uIGJ5IHByb3ZpZGluZyBub3RpY2UgdG8geW91IHRvIHRoZSBlbWFpbCBhZGRyZXNzIHlvdSBoYXZlIHByb3ZpZGVkIChpZiBhbnkpLCBhbmQvb3IgYnkgcHJldmVudGluZyB5b3VyIGFjY2VzcyB0byB5b3VyIGFjY291bnQuIFdlIHJlc2VydmUgdGhlIHJpZ2h0IHRvIGNhbmNlbCB1c2VyIGFjY291bnRzIHRoYXQgaGF2ZSBiZWVuIGluYWN0aXZlIGZvciBtb3JlIHRoYW4gb25lICgxKSB5ZWFyLgorCitVcG9uIHRlcm1pbmF0aW9uIG9mIHRoaXMgQWdyZWVtZW50LCAoYSkgYWxsIGxpY2Vuc2VzIGFuZCByaWdodHMgdG8gdXNlIHRoZSBTa3lwZSBTb2Z0d2FyZSBzaGFsbCBpbW1lZGlhdGVseSB0ZXJtaW5hdGUsIGFuZCAoYikgeW91IHdpbGwgaW1tZWRpYXRlbHkgY2Vhc2UgYW55IGFuZCBhbGwgdXNlIG9mIHRoZSBTa3lwZSBTb2Z0d2FyZSwgYW5kIChjKSB5b3Ugd2lsbCBpbW1lZGlhdGVseSByZW1vdmUgdGhlIFNreXBlIFNvZnR3YXJlIGZyb20gYWxsIGhhcmQgZHJpdmVzLCBuZXR3b3JrcyBhbmQgb3RoZXIgc3RvcmFnZSBtZWRpYSBhbmQgZGVzdHJveSBhbGwgY29waWVzIG9mIHRoZSBTa3lwZSBTb2Z0d2FyZSBpbiB5b3VyIHBvc3Nlc3Npb24gb3IgdW5kZXIgeW91ciBjb250cm9sLgorCitTa3lwZSB3aWxsIG5vdCBiZSBsaWFibGUgaW4gcmVzcGVjdCBvZiBhbnkgZGFtYWdlIGNhdXNlZCBieSB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQuCisKK1VwZGF0ZS4gU2t5cGUgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIEFncmVlbWVudCBhdCBhbnkgdGltZSBieSBwdWJsaXNoaW5nIHRoZSByZXZpc2VkIEFncmVlbWVudCBvbiB0aGUgU2t5cGUgV2Vic2l0ZS4gVGhlIHJldmlzZWQgQWdyZWVtZW50IHNoYWxsIGJlY29tZSBlZmZlY3RpdmUgd2l0aGluIHRoaXJ0eSAoMzApIGRheXMgb2Ygc3VjaCBwdWJsaWNhdGlvbiBvciBwcm92aXNpb24gdG8geW91LCB1bmxlc3MgeW91IGV4cHJlc3NseSBhY2NlcHQgdGhlIHJldmlzZWQgQWdyZWVtZW50IGVhcmxpZXIgYnkgY2xpY2tpbmcgb24gdGhlIGFjY2VwdCBidXR0b24uIFlvdXIgZXhwcmVzcyBhY2NlcHRhbmNlIG9yIHlvdXIgY29udGludWVkIHVzZSBvZiB0aGUgU2t5cGUgU29mdHdhcmUgYWZ0ZXIgZXhwaXJ5IG9mIHRoZSBub3RpY2UgcGVyaW9kIG9mIHRoaXJ0eSAoMzApIGRheXMsIHNoYWxsIGNvbnN0aXR1dGUgeW91ciBhY2NlcHRhbmNlIHRvIGJlIGJvdW5kIGJ5IHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgcmV2aXNlZCBBZ3JlZW1lbnQuIFlvdSBjYW4gZmluZCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgYXQgd3d3LnNreXBlLmNvbS9jb21wYW55L2xlZ2FsL2V1bGEuCisKK0Rpc2NsYWltZXIgb2YgV2FycmFudGllcyBhbmQgTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkKK05vIHdhcnJhbnRpZXMuIFRIRSBTS1lQRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCDigJxBUyBJU+KAnSBXSVRIIEFMTCBGQVVMVCBBTkQgV0lUSCBOTyBXQVJSQU5USUVTIFdIQVRTT0VWRVI7IFNLWVBFIERPRVMgTk9ULCBFSVRIRVIgRVhQUkVTU0VELCBJTVBMSUVEIE9SIFNUQVRVVE9SWSwgTUFLRSBBTlkgV0FSUkFOVElFUywgQ0xBSU1TIE9SIFJFUFJFU0VOVEFUSU9OUyBXSVRIIFJFU1BFQ1QgVE8gVEhFIFNLWVBFIFNPRlRXQVJFLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFFVQUxJVFksIFBFUkZPUk1BTkNFLCBOT04tSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIE9SIEZJVE5FU1MgRk9SIFVTRSBPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU0tZUEUgRlVSVEhFUiBET0VTIE5PVCBSRVBSRVNFTlQgT1IgV0FSUkFOVCBUSEFUIFRIRSBTS1lQRSBTT0ZUV0FSRSBXSUxMIEFMV0FZUyBCRSBBVkFJTEFCTEUsIEFDQ0VTU0lCTEUsIFVOSU5URVJSVVBURUQsIFRJTUVMWSwgU0VDVVJFLCBBQ0NVUkFURSwgQ09NUExFVEUgQU5EIEVSUk9SLUZSRUUgT1IgV0lMTCBPUEVSQVRFIFdJVEhPVVQgUEFDS0VUIExPU1MsIE5PUiBET0VTIFNLWVBFIFdBUlJBTlQgQU5ZIENPTk5FQ1RJT04gVE8gT1IgVFJBTlNNSVNTSU9OIEZST00gVEhFIElOVEVSTkVULCBPUiBBTlkgUVVBTElUWSBPRiBDQUxMUyBNQURFIFRIUk9VR0ggVEhFIFNLWVBFIFNPRlRXQVJFLgorCitTcGVjaWZpYyBEaXNjbGFpbWVyIG9mIExpYWJpbGl0eSBmb3IgRW1lcmdlbmN5IFNlcnZpY2VzLiBTa3lwZSBkb2VzIG5vdCBwcm92aWRlIGNvbm5lY3Rpb25zIHRvIGVtZXJnZW5jeSBzZXJ2aWNlcyBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBTa3lwZSBTb2Z0d2FyZS4gTmVpdGhlciBTa3lwZSBub3IgaXRzIG9mZmljZXJzIG9yIGVtcGxveWVlcyBtYXkgYmUgaGVsZCBsaWFibGUgZm9yIGFueSBjbGFpbSwgZGFtYWdlLCBvciBsb3NzLCBhbmQgeW91IGhlcmVieSB3YWl2ZSBhbnkgYW5kIGFsbCBzdWNoIGNsYWltcyBvciBjYXVzZXMgb2YgYWN0aW9uLCBhcmlzaW5nIGZyb20gb3IgcmVsYXRpbmcgdG8gdGhlIHVzZSBvZiBTa3lwZSBTb2Z0d2FyZSB0byBjb250YWN0IGVtZXJnZW5jeSBzZXJ2aWNlc+KAmSBwZXJzb25uZWwuCisKK1lvdXIgb3duIFJpc2suIFlvdSBhY2tub3dsZWRnZSBhbmQgYWdyZWUgdGhhdCB0aGUgZW50aXJlIHJpc2sgYXJpc2luZyBvdXQgb2YgdGhlIHVzZSBvciBwZXJmb3JtYW5jZSBvZiB0aGUgU2t5cGUgU29mdHdhcmUgcmVtYWlucyB3aXRoIHlvdSwgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBsYXcuCisKK05vIExpYWJpbGl0eS4gVGhlIFNreXBlIFNvZnR3YXJlIGlzIGJlaW5nIHByb3ZpZGVkIHRvIHlvdSBmcmVlIG9mIGNoYXJnZS4gQUNDT1JESU5HTFksIFlPVSBBQ0tOT1dMRURHRSBBTkQgQUdSRUUgVEhBVCBTS1lQRSwgSVRTIEFGRklMSUFURVMsIElUUyBMSUNFTlNPUlMgQU5EIFRIRSBTS1lQRSBTVEFGRiBXSUxMIEhBVkUgTk8gTElBQklMSVRZIElOIENPTk5FQ1RJT04gV0lUSCBPUiBBUklTSU5HIEZST00gWU9VUiBVU0UgT0YgVEhFIFNLWVBFIFNPRlRXQVJFLCBBUyBTRVQgRk9SVEggQkVMT1cuIFlPVVIgT05MWSBSSUdIVCBPUiBSRU1FRFkgV0lUSCBSRVNQRUNUIFRPIEFOWSBQUk9CTEVNUyBPUiBESVNTQVRJU0ZBQ1RJT04gV0lUSCBUSEUgU0tZUEUgU09GVFdBUkUgSVMgVE8gSU1NRURJQVRFTFkgVU5JTlNUQUxMIEFORCBDRUFTRSBVU0UgT0YgU1VDSCBTS1lQRSBTT0ZUV0FSRS4KKworTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIElOIE5PIEVWRU5UIFNIQUxMIFNLWVBFLCBJVFMgQUZGSUxJQVRFUywgSVRTIExJQ0VOU09SUyBPUiBUSEUgU0tZUEUgU1RBRkYgQkUgTElBQkxFLCBXSEVUSEVSIElOIENPTlRSQUNULCBXQVJSQU5UWSwgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBQUk9EVUNUIExJQUJJTElUWSBPUiBBTlkgT1RIRVIgRk9STSBPRiBMSUFCSUxJVFksIEZPUiBBTlkgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OIEFOWSBMT1NTIE9GIE9SIENPUlJVUFRJT04gVE8gREFUQSwgSU5URVJSVVBUSU9OLCBDT01QVVRFUiBGQUlMVVJFIE9SIFBFQ1VOSUFSWSBMT1NTKSBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFIFNLWVBFIFNPRlRXQVJFLCBFVkVOIElGIFNLWVBFLCBJVFMgQUZGSUxJQVRFUyBPUiBUSEUgU0tZUEUgU1RBRkYgSEFWRSBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworSnVyaXNkaWN0aW9uIExpbWl0YXRpb25zLiBBcyBzb21lIGp1cmlzZGljdGlvbnMgZG8gbm90IGFsbG93IHNvbWUgb2YgdGhlIGV4Y2x1c2lvbnMgb3IgbGltaXRhdGlvbnMgYXMgc2V0IGZvcnRoIGFib3ZlLCBzb21lIG9mIHRoZXNlIGV4Y2x1c2lvbnMgb3IgbGltaXRhdGlvbnMgbWF5IG5vdCBhcHBseSB0byB5b3UuIEluIHN1Y2ggZXZlbnQgdGhlIGxpYWJpbGl0eSB3aWxsIGJlIGxpbWl0ZWQgYXMgZmFyIGFzIGxlZ2FsbHkgcG9zc2libGUgdW5kZXIgdGhlIGFwcGxpY2FibGUgbGVnaXNsYXRpb24uCisKK01pc2NlbGxhbmVvdXMKK0VudGlyZSBBZ3JlZW1lbnQuIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCBjb25zdGl0dXRlIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4geW91IGFuZCBTa3lwZSB3aXRoIHJlc3BlY3QgdG8gdGhlIHN1YmplY3QgbWF0dGVyIGhlcmVvZiBhbmQgd2lsbCBzdXBlcnNlZGUgYW5kIHJlcGxhY2UgYWxsIHByaW9yIHVuZGVyc3RhbmRpbmdzIGFuZCBhZ3JlZW1lbnRzLCBpbiB3aGF0ZXZlciBmb3JtLCByZWdhcmRpbmcgdGhlIHN1YmplY3QgbWF0dGVyLgorCitQYXJ0aWFsIEludmFsaWRpdHkuIFNob3VsZCBhbnkgdGVybSBvciBwcm92aXNpb24gaGVyZW9mIGJlIGRlZW1lZCBpbnZhbGlkLCB2b2lkIG9yIGVuZm9yY2VhYmxlIGVpdGhlciBpbiBpdHMgZW50aXJldHkgb3IgaW4gYSBwYXJ0aWN1bGFyIGFwcGxpY2F0aW9uLCB0aGUgcmVtYWluZGVyIG9mIHRoaXMgQWdyZWVtZW50IHNoYWxsIG5vbmV0aGVsZXNzIHJlbWFpbiBpbiBmdWxsIGZvcmNlIGFuZCBlZmZlY3QuCisKK05vIHdhaXZlci4gSWYgU2t5cGUgZG9lcyBub3QgdGFrZSBhY3Rpb24gYWdhaW5zdCBhbGwgYnJlYWNoZXMgb2YgdGhlc2UgQWdyZWVtZW50LCBpdCBkb2VzIG5vdCBtZWFuIHRoYXQgaXMgd2FpdmVzIGl0cyByaWdodCBhdCBhIGxhdGVyIHRpbWUgdG8gZW5mb3JjZSB0aGUgc2FtZS4KKworQXNzaWdubWVudCBZb3UgYXJlIG5vdCBhbGxvd2VkIHRvIGFzc2lnbiB0aGlzIEFncmVlbWVudCBvciBhbnkgcmlnaHRzIGhlcmV1bmRlci4gU2t5cGUgaXMgYWxsb3dlZCBhdCBpdHMgc29sZSBkaXNjcmV0aW9uIHRvIGFzc2lnbiB0aGlzIEFncmVlbWVudCBvciBhbnkgcmlnaHRzIGhlcmV1bmRlciB0byBhbnkgdGhpcmQgcGFydHksIHdpdGhvdXQgZ2l2aW5nIHByaW9yIG5vdGljZS4KKworQXBwbGljYWJsZSBMYXcgYW5kIENvbXBldGVudCBDb3VydC4gVGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgZ292ZXJuZWQgYnkgYW5kIGNvbnN0cnVlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIGxhd3Mgb2YgTHV4ZW1ib3VyZyB3aXRob3V0IGdpdmluZyBlZmZlY3QgdG8gYW55IGNvbmZsaWN0IG9mIGxhd3Mgb3IgcHJvdmlzaW9ucyB3aGV0aGVyIGNvbnRhaW5lZCBpbiBMdXhlbWJvdXJnIGxhdyBvciB0aGUgbGF3cyBvZiB5b3VyIGN1cnJlbnQgc3RhdGUgb3IgY291bnRyeSBvZiByZXNpZGVuY2UuIEFueSBsZWdhbCBwcm9jZWVkaW5ncyBhcmlzaW5nIG91dCBvZiBvciByZWxhdGluZyB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJlIHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgY291cnRzIG9mIHRoZSBkaXN0cmljdCBvZiBMdXhlbWJvdXJnLgorCitMYW5ndWFnZS4gVGhlIG9yaWdpbmFsIEVuZ2xpc2ggdmVyc2lvbiBvZiB0aGlzIEFncmVlbWVudCBtYXkgaGF2ZSBiZWVuIHRyYW5zbGF0ZWQgaW50byBvdGhlciBsYW5ndWFnZXMuIEluIHRoZSBldmVudCBvZiBpbmNvbnNpc3RlbmN5IG9yIGRpc2NyZXBhbmN5IGJldHdlZW4gdGhlIEVuZ2xpc2ggdmVyc2lvbiBhbmQgYW55IG90aGVyIGxhbmd1YWdlIHZlcnNpb24gb2YgdGhpcyBBZ3JlZW1lbnQsIHRoZSBFbmdsaXNoIGxhbmd1YWdlIHZlcnNpb24gc2hhbGwgcHJldmFpbC4KKworwqkgU2t5cGUg4oCTIExhc3QgcmV2aXNlZDogMTUuMDMgMjAwNy4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL3NvbHZlIGIvbGljZW5zZXMvc29sdmUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWRjMmMyNwotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL3NvbHZlCkBAIC0wLDAgKzEsMTggQEAKKworU09MVkUvUkVTT0xWRSBMaWNlbnNpbmcgSW5mb3JtYXRpb24KK1UuUy4gVW5pdmVyc2l0aWVzLCBub24tcHJvZml0cywgb3RoZXIgbm9uLWdvdmVybm1lbnRhbCBpbnN0aXR1dGlvbnMKKworQSBvbmUtdGltZSAkNTAwIGxpY2Vuc2UgZmVlIGlzIGdvb2QgZm9yIHZlcnNpb25zIDIuMDAgdG8gMi45OSBmb3IgYWxsIG1hY2hpbmVzIGF0IHlvdXIgaW5zdGl0dXRpb24uIFlvdSBjYW4gZ2V0IGEgZnJlZSA0NS1kYXkgdHJpYWwgbGljZW5zZSwgdG9vLgorVS5TLiBHb3Zlcm5tZW50IGluc3RpdHV0aW9ucworCitGb3IgVS5TLiBnb3Zlcm5tZW50IGluc3RpdHV0aW9ucywgdGhlIFNPTFZFL1JFU09MVkUgbGljZW5zZSBpcyBmcmVlIG9mIGNoYXJnZS4gT25lIGxpY2Vuc2UgaXMgZ29vZCBmb3IgdmVyc2lvbnMgMi4wMCB0byAyLjk5IGZvciBhbGwgbWFjaGluZXMgYXQgeW91ciBpbnN0aXR1dGlvbi4KK1UuUy4gQ29tbWVyY2lhbCBpbnN0aXR1dGlvbnMKKworQ29udGFjdCB0aGUgTG9zIEFsYW1vcyBUZWNobm9sb2d5IFRyYW5zZmVyIERpdmlzaW9uIGZvciBjb21tZXJjaWFsIGxpY2Vuc2VzLiBZb3UgY2FuIGdldCBhIGZyZWUgNDUtZGF5IHRyaWFsIGxpY2Vuc2UgaWYgeW91IHdpc2guCitOb24tVS5TLiBOb24tY29tbWVyY2lhbCBpbnN0aXR1dGlvbnMKKworQSBvbmUtdGltZSAkNjAwIGxpY2Vuc2UgYW5kIGV4cG9ydCBmZWUgaXMgZ29vZCBmb3IgdmVyc2lvbnMgMi4wMCB0byAyLjk5IGZvciBhbGwgbWFjaGluZXMgYXQgeW91ciBpbnN0aXR1dGlvbi4KK05vbi1VLlMuIENvbW1lcmNpYWwgaW5zdGl0dXRpb25zCisKK0NvbnRhY3QgdGhlIExvcyBBbGFtb3MgVGVjaG5vbG9neSBUcmFuc2ZlciBEaXZpc2lvbiBmb3Igbm9uLVUuUy4gY29tbWVyY2lhbCBsaWNlbnNlcy4KKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvc3Bhcmt5IGIvbGljZW5zZXMvc3Bhcmt5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NDUxZGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9zcGFya3kKQEAgLTAsMCArMSwxNCBAQAorVGhlIGZvbGxvd2luZyBjb3B5cmlnaHQsIGxpY2Vuc2UgYW5kIGRpc2NsYWltZXIgYXBwbGllcyB0byB0aGUgZGlzdHJpYnV0ZWQgCitTcGFya3kgc291cmNlIGNvZGUsIGRvY3VtZW50YXRpb24gYW5kIGJpbmFyaWVzLgorQ29weXJpZ2h0IChjKSAxOTg5LTIwMDIsIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gQWxsIHJpZ2h0cyAKK3Jlc2VydmVkLgorUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIHVzZSBhbmQgY29weSB0aGUgU3Bhcmt5IGNvZGUsIAorZG9jdW1lbnRhdGlvbiBhbmQgYmluYXJpZXMuIEFsbCBjb3BpZXMgbXVzdCBpbmNsdWRlIHRoaXMgY29weXJpZ2h0LCBsaWNlbnNlLCAKK2FuZCBkaXNjbGFpbWVyLgorVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IgCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgCitBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIAorTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwgCitPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTIElOIFRIRSAKK1NPRlRXQVJFLiAKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL3NwaWRlcm9hayBiL2xpY2Vuc2VzL3NwaWRlcm9hawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OWE3ZjFmCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvc3BpZGVyb2FrCkBAIC0wLDAgKzEsODkgQEAKK1Rlcm1zIG9mIFVzZS4KKworVEVSTVMgT0YgVVNFCisKK0xhc3QgdXBkYXRlZDogTm92ZW1iZXIgMjgsIDIwMDcKKworUExFQVNFIFJFQUQgVEhFU0UgVEVSTVMgT0YgVVNFIENBUkVGVUxMWSBCRUZPUkUgVVNJTkcgVEhJUyBXRUJTSVRFLgorCitXZWxjb21lIHRvIHRoZSBTcGlkZXJPYWsgd2Vic2l0ZSAoIlNpdGUiKS4gU3BpZGVyT2FrIG1haW50YWlucyB0aGlzIFNpdGUgdG8gcHJvdmlkZSBnZW5lcmFsIGluZm9ybWF0aW9uIHRvIG91ciB2aXNpdG9ycy4gQWxsIHVzZSBvZiB0aGlzIFNpdGUgaXMgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHRlcm1zIGFuZCBjb25kaXRpb25zICgiVGVybXMgb2YgVXNlIikuIEJ5IGFjY2Vzc2luZyBhbmQgYnJvd3NpbmcgdGhpcyBTaXRlLCB5b3UgYWdyZWUgdG8gYmUgYm91bmQgYnkgdGhlc2UgVGVybXMgb2YgVXNlLgorCitGZWF0dXJlcyBTdWJqZWN0IHRvIFNlcGFyYXRlIFRlcm1zLiBTb21lIG9mIHRoZSBmZWF0dXJlcyBvZmZlcmVkIHRocm91Z2ggU3BpZGVyT2FrLCBzdWNoIGFzIG91ciBkYXRhIHN0b3JhZ2Ugc2VydmljZXMsIGFyZSBzdWJqZWN0IHRvIHRlcm1zIG9mIHVzZSwgcnVsZXMgYW5kIHBvbGljaWVzIGluIGFkZGl0aW9uIHRvIG9yIGluIGxpZXUgb2YgdGhlc2UgVGVybXMgb2YgVXNlLiBJZiB5b3UgY2hvb3NlIHRvIHVzZSB0aG9zZSBmZWF0dXJlcywgeW91IGFncmVlIHRoYXQgeW91ciB1c2Ugb2YgdGhvc2UgZmVhdHVyZXMgd2lsbCBiZSBzdWJqZWN0IHRvIHN1Y2ggYWRkaXRpb25hbCBvciBzZXBhcmF0ZSB0ZXJtcyBvZiB1c2UsIHJ1bGVzIGFuZC9vciBwb2xpY2llcywgYXMgYXBwbGljYWJsZS4KKworQ29weXJpZ2h0LiBUaGlzIFNpdGUsIGluY2x1ZGluZyBhbGwgdGV4dCwgaW1hZ2VzLCBzb2Z0d2FyZSBhbmQgb3RoZXIgY29udGVudCBjb250YWluZWQgaGVyZWluLCBpcyB0aGUgcHJvcGVydHkgb2YgU3BpZGVyT2FrIG9yIGl0cyBzdXBwbGllcnMgYW5kIGlzIHByb3RlY3RlZCBieSBVbml0ZWQgU3RhdGVzIGFuZCBpbnRlcm5hdGlvbmFsIGNvcHlyaWdodCBsYXdzLiBUaGUgY29tcGlsYXRpb24gYW5kIGFycmFuZ2VtZW50IG9mIGFsbCBjb250ZW50IG9uIHRoaXMgU2l0ZSBpcyB0aGUgZXhjbHVzaXZlIHByb3BlcnR5IG9mIFNwaWRlck9hayBhbmQgaXMgcHJvdGVjdGVkIGJ5IFVuaXRlZCBTdGF0ZXMgYW5kIGludGVybmF0aW9uYWwgY29weXJpZ2h0IGxhd3MuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1RyYWRlbWFya3MuIEFsbCBTcGlkZXJPYWsgbWFya3MsIGdyYXBoaWNzLCBsb2dvcywgZGVzaWducyBhbmQgdHJhZGUgbmFtZXMgdXNlZCBhbmQgZGlzcGxheWVkIG9uIHRoaXMgU2l0ZSBhcmUgc2VydmljZSBtYXJrcyBvciB0cmFkZW1hcmtzIG9mIFNwaWRlck9hayBhbmQgYXJlIHRoZSBzb2xlIGFuZCBleGNsdXNpdmUgcHJvcGVydHkgb2YgU3BpZGVyT2FrLiBUaGUgImxvb2sgYW5kIGZlZWwiIG9mIHRoaXMgU2l0ZSBjb25zdGl0dXRlcyBwcm9wcmlldGFyeSB0cmFkZSBkcmVzcyBvZiBTcGlkZXJPYWsuIEFsbCBvdGhlciB0cmFkZW1hcmtzIG5vdCBvd25lZCBieSBTcGlkZXJPYWsgdGhhdCBhcHBlYXIgb24gdGhpcyBTaXRlIGFyZSB0aGUgcHJvcGVydHkgb2YgdGhlaXIgcmVzcGVjdGl2ZSBvd25lcnMuIFlvdSBtYXkgbm90IHVzZSBhbnkgc3VjaCBtYXJrcyBmb3IgYW55IHB1cnBvc2Ugd2hhdHNvZXZlciB3aXRob3V0IHRoZSBleHByZXNzIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbiBvZiB0aGUgb3duZXIuCisKK1NwaWRlck9hayBJbnRlbGxlY3R1YWwgUHJvcGVydHkuIFNwaWRlck9hayBncmFudHMgeW91IGEgcGVyc29uYWwsIG5vbi1leGNsdXNpdmUsIG5vbi10cmFuc2ZlcmFibGUsIGxpbWl0ZWQgbGljZW5zZSwgZXhlcmNpc2FibGUgc29sZWx5IGR1cmluZyB0aGUgdGVybSBvZiB0aGlzIEFncmVlbWVudCwgdG8gdXNlIFNwaWRlck9hayB0ZWNobm9sb2d5IGFuZCBzb2Z0d2FyZSBmdXJuaXNoZWQgdG8geW91IGJ5IFNwaWRlck9hayAoY29sbGVjdGl2ZWx5LCAiU3BpZGVyT2FrIEludGVsbGVjdHVhbCBQcm9wZXJ0eSIpIHNvbGVseSBmb3IgdGhlIHB1cnBvc2Ugb2YgYWNjZXNzaW5nIGFuZCB1c2luZyB0aGUgU2VydmljZXMuIFlvdSBzaGFsbCBoYXZlIG5vIHJpZ2h0IHRvIHVzZSB0aGUgU3BpZGVyT2FrIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBmb3IgYW55IHB1cnBvc2Ugb3RoZXIgdGhhbiBhY2Nlc3NpbmcgYW5kIHVzaW5nIHRoZSBTZXJ2aWNlcy4gWW91IHNoYWxsIG5vdCAoYSkgY29weSwgcmVwcm9kdWNlLCBtb2RpZnksIGFkYXB0LCBjcmVhdGUgYW55IGRlcml2YXRpdmUgd29ya3MgZnJvbSwgZGlzdHJpYnV0ZSwgdHJhbnNtaXQgb3Igb3RoZXJ3aXNlIGV4cGxvaXQgdGhlIFNwaWRlck9hayBJbnRlbGxlY3R1YWwgUHJvcGVydHkgb3IgKGIpIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgcmV2ZXJzZSBlbmdpbmVlciwgZGVjb21waWxlLCBkaXNhc3NlbWJsZSBvciBvdGhlcndpc2UgYXR0ZW1wdCB0byBkZXJpdmUgc291cmNlIGNvZGUgb3Igb3RoZXIgdHJhZGUgc2VjcmV0cyBmcm9tIGFueSBvZiB0aGUgU3BpZGVyT2FrIEludGVsbGVjdHVhbCBQcm9wZXJ0eS4gRXhjZXB0IGZvciB0aGUgcmlnaHRzIGV4cHJlc3NseSBncmFudGVkIGFib3ZlLCBhbGwgcmlnaHRzLCB0aXRsZSBhbmQgaW50ZXJlc3QgaW4gYW5kIHRvIHRoZSBTcGlkZXJPYWsgSW50ZWxsZWN0dWFsIFByb3BlcnR5IHNoYWxsIHJlbWFpbiBzb2xlbHkgd2l0aCBhbmQgYXJlIGhlcmVieSByZXNlcnZlZCB0byBTcGlkZXJPYWsuCisKK1VzZSBvZiBTaXRlOyBSZXN0cmljdGlvbnMuIFlvdSBtYXkgdmlldyBhbmQgcHJpbnQgbWF0ZXJpYWwgZGlzcGxheWVkIG9uIHRoaXMgU2l0ZSBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczogKGEpIHRoZSBtYXRlcmlhbHMgbWF5IGJlIHVzZWQgc29sZWx5IGZvciB5b3VyIG93biwgcGVyc29uYWwgaW5mb3JtYXRpb24gYW5kIG5vdCBmb3IgY29tbWVyY2lhbCB1c2U7IGFuZCAoYikgeW91IG11c3QgcmV0YWluIHdpdGhvdXQgbW9kaWZpY2F0aW9uIGFsbCBjb3B5cmlnaHQsIHRyYWRlbWFyayBhbmQgb3RoZXIgcHJvcHJpZXRhcnkgbm90aWNlcyBhZmZpeGVkIHRvIG9yIGNvbnRhaW5lZCBpbiB0aGUgbWF0ZXJpYWxzIHlvdSBwcmludCBhbmQgYWxsIGNvcGllcyB0aGVyZW9mLiBZb3UgbWF5IG5vdCBjb3B5IG9yIG90aGVyd2lzZSB1c2UgdGhpcyBTaXRlIG9yIGFueSBwb3J0aW9uIGhlcmVvZiwgZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCBhYm92ZS4gWW91IG1heSBub3QgcmVwcm9kdWNlLCBkb3dubG9hZCwgcmVwdWJsaXNoLCBmcmFtZSwgdHJhbnNtaXQsIGRpc3RyaWJ1dGUsIHNlbGwsIGxpY2Vuc2UsIG1vZGlmeSwgYWx0ZXIsIHJldmVyc2UgZW5naW5lZXIgb3IgcHJlcGFyZSBkZXJpdmF0aXZlIHdvcmtzIGZyb20gdGhpcyBTaXRlIG9yIGFueSBwb3J0aW9uIGhlcmVvZiwgZXhjZXB0IHdpdGggdGhlIGV4cHJlc3MgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIFNwaWRlck9hay4gVXNlIG9mIHNwaWRlcnMsIGRhdGEgbWluaW5nIHRvb2xzLCByb2JvdHMgYW5kIHNpbWlsYXIgZGF0YSBnYXRoZXJpbmcgYW5kIGV4dHJhY3Rpb24gdG9vbHMgaXMgZXhwcmVzc2x5IHByb2hpYml0ZWQsIGV4Y2VwdCBieSBwdWJsaWNseSBhdmFpbGFibGUgSW50ZXJuZXQgc2VhcmNoIGVuZ2luZSBwb3J0YWxzIHNvbGVseSBmb3IgcHVycG9zZXMgb2YgaW5kZXhpbmcgdGhpcyBTaXRlLiBJbiB0aGUgZXZlbnQgeW91IGxpbmsgdG8gdGhpcyBTaXRlLCB5b3UgYWdyZWUgdG8gcmVtb3ZlIGFueSBzdWNoIGxpbmtzIHRvIHRoaXMgU2l0ZSAob3IgYW55IHBvcnRpb24gaGVyZW9mKSB0byB3aGljaCBTcGlkZXJPYWsgb2JqZWN0cyBwcm9tcHRseSB1cG9uIHJlcXVlc3QuIE5vdGhpbmcgY29udGFpbmVkIGluIHRoaXMgU2l0ZSBzaGFsbCBiZSBjb25zdHJ1ZWQgYXMgY29uZmVycmluZyBieSBpbXBsaWNhdGlvbiwgZXN0b3BwZWwgb3Igb3RoZXJ3aXNlIGFueSBsaWNlbnNlIG9yIHJpZ2h0IHVuZGVyIGFueSBjb3B5cmlnaHQsIHBhdGVudCwgdHJhZGVtYXJrIG9yIG90aGVyIHByb3ByaWV0YXJ5IGludGVyZXN0IG9mIFNwaWRlck9hayBvciBhbnkgdGhpcmQgcGFydHkuIEFueSByaWdodHMgbm90IGV4cHJlc3NseSBncmFudGVkIGhlcmVpbiBhcmUgcmVzZXJ2ZWQuCisKK0luZGVtbmlmaWNhdGlvbi4gWW91IGFncmVlIHRvIGluZGVtbmlmeSwgZGVmZW5kIGFuZCBob2xkIGhhcm1sZXNzIFNwaWRlck9haywgaXRzIGFmZmlsaWF0ZXMgYW5kIHRoZWlyIHJlc3BlY3RpdmUgZGlyZWN0b3JzLCBvZmZpY2VycywgZW1wbG95ZWVzIGFuZCBhZ2VudHMsIGxpY2Vuc29ycywgcmVwcmVzZW50YXRpdmVzIGFuZCB0aGlyZCBwYXJ0eSBwcm92aWRlcnMgdG8gdGhpcyBTaXRlIGZyb20gYW5kIGFnYWluc3QgYWxsIGxvc3NlcywgZXhwZW5zZXMsIGRhbWFnZXMgYW5kIGNvc3RzLCBpbmNsdWRpbmcgcmVhc29uYWJsZSBhdHRvcm5leXMnIGZlZXMsIHJlc3VsdGluZyBmcm9tIGFueSB2aW9sYXRpb24gb2YgdGhlc2UgVGVybXMgb2YgVXNlIGJ5IHlvdSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBhbnkgYnJlYWNoIG9yIGFsbGVnZWQgYnJlYWNoIG9mIGFueSBvZiB5b3VyIHJlcHJlc2VudGF0aW9ucywgd2FycmFudGllcyBvciB1bmRlcnRha2luZ3MgaGVyZXVuZGVyLiBTcGlkZXJPYWsgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIGFzc3VtZSwgYXQgaXRzIHNvbGUgZXhwZW5zZSwgdGhlIGV4Y2x1c2l2ZSBkZWZlbnNlIGFuZCBjb250cm9sIG9mIGFueSBtYXR0ZXIgc3ViamVjdCB0byBpbmRlbW5pZmljYXRpb24gYnkgeW91LCBpbiB3aGljaCBldmVudCB5b3Ugd2lsbCBmdWxseSBjb29wZXJhdGUgd2l0aCBTcGlkZXJPYWsgaW4gYXNzZXJ0aW5nIGFueSBhdmFpbGFibGUgZGVmZW5zZXMuCisKK05vdGljZSBhbmQgUHJvY2VkdXJlIGZvciBNYWtpbmcgQ2xhaW1zIG9mIEluZnJpbmdlbWVudC4gU3BpZGVyT2FrIHJlc3BlY3RzIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb2Ygb3RoZXJzLCBhbmQgd2UgYXNrIG91ciB1c2VycyB0byBkbyB0aGUgc2FtZS4gSWYgeW91IGJlbGlldmUgeW91ciBjb3B5cmlnaHRlZCBtYXRlcmlhbHMgaGF2ZSBiZWVuIGNvcGllZCBpbiBhIHdheSB0aGF0IGNvbnN0aXR1dGVzIGNvcHlyaWdodCBpbmZyaW5nZW1lbnQsIHBsZWFzZSBmb2xsb3cgb3VyIFByb2NlZHVyZSBmb3IgTWFraW5nIENsYWltcyBvZiBDb3B5cmlnaHQsIHdoaWNoIGluY2x1ZGVzIGluc3RydWN0aW9ucyBvbiBob3cgdG8gY29udGFjdCB1cyB0byByZXBvcnQgcG9zc2libGUgY29weXJpZ2h0IGluZnJpbmdlbWVudCBieSBvdXIgdXNlcnMuIEFMTCBJTlFVSVJJRVMgTk9UIFJFTEFUSU5HIFRPIFNVQ0ggQSBDTEFJTSBXSUxMIE5PVCBSRUNFSVZFIEEgUkVTUE9OU0UuCisKK05vIFJlbmRlcmluZyBvZiBBZHZpY2UuIFRoZSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gb3IgbWFkZSBhdmFpbGFibGUgdGhyb3VnaCB0aGlzIFNpdGUgaXMgcHJvdmlkZWQgZm9yIGluZm9ybWF0aW9uYWwgcHVycG9zZXMgb25seSBhbmQgc2hvdWxkIG5vdCBiZSBjb25zdHJ1ZWQgYXMgcmVuZGVyaW5nIGNvbnN1bHRpbmcsIHRlY2huaWNhbCwgc2VjdXJpdHksIGVuZ2luZWVyaW5nLCBsZWdhbCBvciBvdGhlciBwcm9mZXNzaW9uYWwgYWR2aWNlIG9mIGFueSBraW5kLiBZb3VyIHVzZSBvZiB0aGlzIFNpdGUgZG9lcyBub3QgZ2l2ZSByaXNlIHRvIGEgY2xpZW50LCBhZHZpc29yeSwgZmlkdWNpYXJ5IG9yIHByb2Zlc3Npb25hbCBzZXJ2aWNlcyByZWxhdGlvbnNoaXAgYmV0d2VlbiB5b3UgYW5kIFNwaWRlck9hay4KKworQWNjdXJhY3kgb2YgSW5mb3JtYXRpb24uIFdoaWxlIFNwaWRlck9hayB1c2VzIHJlYXNvbmFibGUgZWZmb3J0cyB0byBmdXJuaXNoIGFjY3VyYXRlIGFuZCB1cC10by1kYXRlIGluZm9ybWF0aW9uLCBTcGlkZXJPYWsgZG9lcyBub3Qgd2FycmFudCB0aGF0IGFueSBpbmZvcm1hdGlvbiBjb250YWluZWQgaW4gb3IgbWFkZSBhdmFpbGFibGUgdGhyb3VnaCB0aGlzIFNpdGUgaXMgYWNjdXJhdGUsIGNvbXBsZXRlLCByZWxpYWJsZSwgY3VycmVudCBvciBlcnJvci1mcmVlLiBTcGlkZXJPYWsgYXNzdW1lcyBubyBsaWFiaWxpdHkgb3IgcmVzcG9uc2liaWxpdHkgZm9yIGFueSBlcnJvcnMgb3Igb21pc3Npb25zIGluIHRoZSBjb250ZW50IG9mIHRoaXMgU2l0ZSBvciBzdWNoIG90aGVyIG1hdGVyaWFscyBvciBjb21tdW5pY2F0aW9ucy4KKworRGlzY2xhaW1lciBvZiBXYXJyYW50aWVzIGFuZCBMaW1pdGF0aW9ucyBvZiBMaWFiaWxpdHkuIFRISVMgU0lURSBJUyBQUk9WSURFRCBCWSBTUElERVJPQUsgT04gQU4gIkFTIElTIiBBTkQgIkFTIEFWQUlMQUJMRSIgQkFTSVMuIFVTRSBPRiBUSElTIFNJVEUgSVMgQVQgWU9VUiBTT0xFIFJJU0suIFRPIFRIRSBGVUxMIEVYVEVOVCBQRVJNSVNTSUJMRSBCWSBBUFBMSUNBQkxFIExBVywgU1BJREVST0FLIEFORCBJVFMgQUZGSUxJQVRFUyBBTkQgU1VQUExJRVJTIERJU0NMQUlNIEFMTCBXQVJSQU5USUVTLCBXSEVUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBTWVNURU0gSU5URUdSQVRJT04sIFRJVExFIEFORCBOT05JTkZSSU5HRU1FTlQuIFdJVEhPVVQgTElNSVRJTkcgVEhFIEZPUkVHT0lORywgU1BJREVST0FLIEFORCBJVFMgQUZGSUxJQVRFUyBBTkQgU1VQUExJRVJTIE1BS0UgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMgT0YgQU5ZIEtJTkQgQVMgVE8gVEhFIE9QRVJBVElPTiBPUiBBVkFJTEFCSUxJVFkgT0YgVEhJUyBTSVRFIE9SIFRIRSBJTkZPUk1BVElPTiwgQ09OVEVOVCwgTUFURVJJQUxTLCBQUk9EVUNUUyBPUiBTRVJWSUNFUyBJTkNMVURFRCBPTiBPUiBNQURFIEFWQUlMQUJMRSBUSFJPVUdIIFRISVMgU0lURS4gU1BJREVST0FLIERPRVMgTk9UIFdBUlJBTlQgVEhBVCBUSElTIFNJVEUgV0lMTCBCRSBVTklOVEVSUlVQVEVEIE9SIFNFQ1VSRSwgT1IgVEhBVCBUSElTIFNJVEUgSVMgRlJFRSBPRiBWSVJVU0VTIE9SIE9USEVSIEhBUk1GVUwgQ09NUE9ORU5UUy4KKworU1BJREVST0FLIEFORCBJVFMgQUZGSUxJQVRFUyBBTkQgU1VQUExJRVJTIFdJTEwgTk9UIEJFIExJQUJMRSBGT1IgQU5ZIERBTUFHRVMgT0YgQU5ZIEtJTkQgQVJJU0lORyBGUk9NIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9GIFRISVMgU0lURSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFBVTklUSVZFIEFORCBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBMT1NTIE9GIFBST0ZJVFMsIEdPT0RXSUxMLCBEQVRBIE9SIFVTRSksIEVWRU4gSUYgU1VDSCBQQVJUSUVTIEhBVkUgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRIRSBGT1JFR09JTkcgTElNSVRBVElPTiBTSEFMTCBBUFBMWSBSRUdBUkRMRVNTIE9GIFRIRSBGT1JNIE9GIEFDVElPTiBBTkQgV0hFVEhFUiBJTiBDT05UUkFDVCwgQlJFQUNIIE9GIFdBUlJBTlRZLCBUT1JULCBORUdMSUdFTkNFLCBTVFJJQ1QgTElBQklMSVRZIE9SIE9USEVSV0lTRS4gQ0VSVEFJTiBTVEFURSBMQVdTIERPIE5PVCBBTExPVyBMSU1JVEFUSU9OUyBPTiBJTVBMSUVEIFdBUlJBTlRJRVMgT1IgVEhFIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GIENFUlRBSU4gREFNQUdFUy4gSUYgVEhFU0UgTEFXUyBBUFBMWSBUTyBZT1UsIFlPVSBNSUdIVCBIQVZFIEFERElUSU9OQUwgUklHSFRTLiBJRiBZT1UgQVJFIERJU1NBVElTRklFRCBXSVRIIFRISVMgU0lURSBPUiBBTlkgUE9SVElPTiBIRVJFT0YsIE9SIFdJVEggQU5ZIE9GIFRIRVNFIFRFUk1TIE9GIFVTRSwgWU9VUiBTT0xFIEFORCBFWENMVVNJVkUgUkVNRURZIElTIFRPIERJU0NPTlRJTlVFIFVTSU5HIFRISVMgU0lURS4KKworTGlua3MgdG8gVGhpcmQgUGFydHkgV2Vic2l0ZXMuIEZvciB5b3VyIGNvbnZlbmllbmNlLCB0aGlzIFNpdGUgbWF5IHByb3ZpZGUgaHlwZXJsaW5rcyB0byB3ZWJzaXRlcywgc2VydmVycyBhbmQgb3RoZXIgcmVzb3VyY2VzIG1haW50YWluZWQgYnkgdGhpcmQgcGFydGllcyBvdmVyIHdoaWNoIFNwaWRlck9hayBkb2VzIG5vdCBoYXZlIGNvbnRyb2wsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBtZXNzYWdlIGJvYXJkcyBhbmQvb3IgbGlua3MgdG8gV2ViIHNpdGVzIG9yIHBhZ2VzIHRoYXQgYXJlIGZyYW1lZCB3aXRoaW4gdGhpcyBTaXRlLiBFdmVuIGlmIHN1Y2ggbWF0ZXJpYWxzIGFyZSBmcmFtZWQgd2l0aGluIHRoaXMgU2l0ZSBhbmQgYXBwZWFyIHRvIGJlIGEgcGFydCBvZiB0aGlzIFNpdGUsIFNwaWRlck9hayBkb2VzIG5vdCBldmFsdWF0ZSwgZW5kb3JzZSBvciBndWFyYW50ZWUgY29udGVudCBmb3VuZCBpbiBzdWNoIHNpdGVzLiBTcGlkZXJPYWsgZG9lcyBub3QgYXNzdW1lIGFueSByZXNwb25zaWJpbGl0eSBvciBsaWFiaWxpdHkgZm9yIHRoZSBhY3Rpb25zLCBwcm9kdWN0cywgc2VydmljZXMgb3IgY29udGVudCBvZiB0aGVzZSBzaXRlcyBvciB0aGUgcGFydGllcyB0aGF0IG9wZXJhdGUgdGhlbS4gWW91IHNob3VsZCBjYXJlZnVsbHkgcmV2aWV3IHRoZWlyIHByaXZhY3kgc3RhdGVtZW50cyBhbmQgb3RoZXIgY29uZGl0aW9ucyBvZiB1c2UuIFlvdXIgdXNlIG9mIHRoZXNlIHNpdGVzIGlzIGVudGlyZWx5IGF0IHlvdXIgb3duIHJpc2suCisKK0ZlZWRiYWNrIGFuZCBPdGhlciBTdWJtaXNzaW9ucy4gQWxsIGNvbW1lbnRzLCBmZWVkYmFjaywgc3VnZ2VzdGlvbnMsIGlkZWFzIGFuZCBzaW1pbGFyIHN1Ym1pc3Npb25zIGZ1cm5pc2hlZCB0byBTcGlkZXJPYWsgaW4gY29ubmVjdGlvbiB3aXRoIHlvdXIgdXNlIG9mIHRoaXMgU2l0ZSBzaGFsbCBiZSBkZWVtZWQgYXNzaWduZWQgdG8gYW5kIHNoYWxsIHJlbWFpbiB0aGUgZXhjbHVzaXZlIHByb3BlcnR5IG9mIFNwaWRlck9hay4gTm8gc3VjaCBzdWJtaXNzaW9ucyBzaGFsbCBiZSBzdWJqZWN0IHRvIGFueSBvYmxpZ2F0aW9uIG9mIGNvbmZpZGVuY2Ugb24gdGhlIHBhcnQgb2YgU3BpZGVyT2FrLCBhbmQgU3BpZGVyT2FrIHNoYWxsIGJlIGVudGl0bGVkIHRvIHVucmVzdHJpY3RlZCB1c2UgYW5kIGRpc2Nsb3N1cmUgb2Ygc3VjaCBzdWJtaXNzaW9ucyB0aHJvdWdob3V0IHRoZSB3b3JsZCBmb3IgYW55IHB1cnBvc2Ugd2hhdHNvZXZlciwgY29tbWVyY2lhbCBvciBvdGhlcndpc2UsIHdpdGhvdXQgYW55IG9ibGlnYXRpb24gdG8gY29tcGVuc2F0ZSB5b3UgZm9yIHN1Y2ggdXNlIG9yIGRpc2Nsb3N1cmUuIFlvdSByZXByZXNlbnQgdGhhdCB5b3UgaGF2ZSB0aGUgbGF3ZnVsIHJpZ2h0IHRvIGZ1cm5pc2ggc3VjaCBzdWJtaXNzaW9ucyB0byBTcGlkZXJPYWsgYW5kIGFncmVlIHRoYXQgeW91IHdpbGwgbm90IHN1Ym1pdCBhbnkgaW5mb3JtYXRpb24gdW5sZXNzIHlvdSBhcmUgbGVnYWxseSBlbnRpdGxlZCB0byBkbyBzby4KKworVGVybWluYXRpb24gb3IgU3VzcGVuc2lvbiBvZiBBY2Nlc3M7IE1vZGlmaWNhdGlvbnMgdG8gU2l0ZS4gU3BpZGVyT2FrIHJlc2VydmVzIHRoZSByaWdodCB0byB0ZXJtaW5hdGUsIHN1c3BlbmQgb3Igb3RoZXJ3aXNlIHJlc3RyaWN0IHlvdXIgYWNjZXNzIHRvIHRoaXMgU2l0ZSwgb3IgYW55IHBvcnRpb24gaGVyZW9mLCB3aXRoIG9yIHdpdGhvdXQgbm90aWNlIGF0IGFueSB0aW1lIGZvciBhbnkgcmVhc29uIHdoYXRzb2V2ZXIgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIHlvdXIgdmlvbGF0aW9uIG9mIHRoZXNlIFRlcm1zIG9mIFVzZSBvciBhbnkgaW5hcHByb3ByaWF0ZSBvciB1bmxhd2Z1bCBiZWhhdmlvciBvbiB5b3VyIHBhcnQuIEluIGFkZGl0aW9uLCBTcGlkZXJPYWsgcmVzZXJ2ZXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSBvciBkaXNjb250aW51ZSB0aGlzIFNpdGUgb3IgYW55IHBvcnRpb24gaGVyZW9mIGF0IGFueSB0aW1lIHdpdGggb3Igd2l0aG91dCBub3RpY2UuIFNwaWRlck9hayBzaGFsbCBub3QgYmUgbGlhYmxlIHRvIHlvdSBvciBhbnkgdGhpcmQgcGFydHkgZm9yIGFueSBzdWNoIHRlcm1pbmF0aW9uLCBzdXNwZW5zaW9uLCByZXN0cmljdGlvbiwgbW9kaWZpY2F0aW9uIG9yIGRpc2NvbnRpbnVhbmNlLgorCitEaXNwdXRlIFJlc29sdXRpb24uIEFueSBjb250cm92ZXJzeSBvciBjbGFpbSBhcmlzaW5nIG91dCBvZiBvciByZWxhdGluZyB0byB0aGVzZSBUZXJtcyBvZiBVc2Ugb3IgYnJlYWNoIGhlcmVvZiwgb3Igb3RoZXJ3aXNlIHJlbGF0aW5nIHRvIHRoaXMgU2l0ZSAod2l0aCB0aGUgZXhjZXB0aW9uIG9mIGluanVuY3RpdmUgcmVsaWVmIHNvdWdodCBieSBTcGlkZXJPYWsgZm9yIGFueSB2aW9sYXRpb24gb2YgU3BpZGVyT2FrJ3MgcHJvcHJpZXRhcnkgcmlnaHRzKSwgc2hhbGwgYmUgc2V0dGxlZCBieSBiaW5kaW5nIGFyYml0cmF0aW9uIGFkbWluaXN0ZXJlZCBieSB0aGUgQW1lcmljYW4gQXJiaXRyYXRpb24gQXNzb2NpYXRpb24gaW4gYWNjb3JkYW5jZSB3aXRoIGl0cyB0aGVuLWN1cnJlbnQgcnVsZXMuIFRoZSBhcmJpdHJhdGlvbiBzaGFsbCBiZSBkZWNpZGVkIGJ5IG9uZSAoMSkgYXJiaXRyYXRvciwgd2hvIHNoYWxsIGJlIGFuIGF0dG9ybmV5IGhhdmluZyBleHBlcmllbmNlIGFuZCBmYW1pbGlhcml0eSB3aXRoIGluZm9ybWF0aW9uIHRlY2hub2xvZ3kgZGlzcHV0ZXMuIFRoZSBsYW5ndWFnZSBvZiB0aGUgYXJiaXRyYXRpb24gc2hhbGwgYmUgRW5nbGlzaC4gVGhlIGxvY2F0aW9uIG9mIGFyYml0cmF0aW9uIHNoYWxsIGJlIENoaWNhZ28sIElsbGlub2lzLCBVU0EuIFRoZSBhcmJpdHJhdG9yIG1heSBhd2FyZCB0byB0aGUgcHJldmFpbGluZyBwYXJ0eSwgaWYgYW55LCBhcyBkZXRlcm1pbmVkIGJ5IHRoZSBhcmJpdHJhdG9yLCBpdHMgY29zdHMgYW5kIGV4cGVuc2VzLCBpbmNsdWRpbmcgcmVhc29uYWJsZSBhdHRvcm5leXMnIGZlZXMuIEV4Y2VwdCBhcyBtYXkgYmUgcmVxdWlyZWQgYnkgbGF3LCBuZWl0aGVyIGEgcGFydHkgbm9yIGFuIGFyYml0cmF0b3IgbWF5IGRpc2Nsb3NlIHRoZSBleGlzdGVuY2UsIGNvbnRlbnQgb3IgcmVzdWx0cyBvZiBhbnkgYXJiaXRyYXRpb24gaGVyZXVuZGVyIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBib3RoIHBhcnRpZXMuIFRvIHRoZSBmdWxsZXN0IGV4dGVudCBwZXJtaXR0ZWQgYnkgYXBwbGljYWJsZSBsYXcsIG5vIHN1Y2ggYXJiaXRyYXRpb24gc2hhbGwgYmUgam9pbmVkIHRvIGFuIGFyYml0cmF0aW9uIGludm9sdmluZyBhbnkgb3RoZXIgcGFydHkgc3ViamVjdCB0byB0aGVzZSBUZXJtcyBvZiBVc2UsIHdoZXRoZXIgdGhyb3VnaCBjbGFzcyBhcmJpdHJhdGlvbiBwcm9jZWVkaW5ncyBvciBvdGhlcndpc2UuIEVhY2ggcGFydHkgaGVyZWJ5IHdhaXZlcyBpdHMgcmlnaHQgdG8gYSB0cmlhbCBieSBqdXJ5IGZvciBhbnkgZGlzcHV0ZXMgYmV0d2VlbiB0aGUgcGFydGllcy4KKworQXBwbGljYWJsZSBMYXdzOyBFeGNsdXNpdmUgSnVyaXNkaWN0aW9uLiBTcGlkZXJPYWsgbWFpbnRhaW5zIHRoaXMgU2l0ZSBpbiB0aGUgVVNBLiBTcGlkZXJPYWsgbWFrZXMgbm8gcmVwcmVzZW50YXRpb24gdGhhdCB0aGlzIFNpdGUgb3IgYW55IGNvbnRlbnQgb24gb3IgYWNjZXNzZWQgdGhyb3VnaCB0aGlzIFNpdGUgaXMgYXBwcm9wcmlhdGUgb3IgYXZhaWxhYmxlIGZvciB1c2UgaW4gb3RoZXIganVyaXNkaWN0aW9ucy4gWW91IGFyZSByZXNwb25zaWJsZSBmb3IgY29tcGxpYW5jZSB3aXRoIGFsbCBsb2NhbCBsYXdzIGFuZCByZWd1bGF0aW9ucywgYXMgYXBwbGljYWJsZS4gVXNlIG9mIHRoaXMgU2l0ZSBhbmQgYW55IGRpc3B1dGUgYXJpc2luZyB0aGVyZWZyb20gc2hhbGwgYmUgZ292ZXJuZWQgYnkgdGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIElsbGlub2lzLCBVU0EsIHdpdGhvdXQgcmVnYXJkIHRvIHByaW5jaXBsZXMgb2YgY29uZmxpY3Qgb2YgbGF3cy4gU1VCSkVDVCBUTyBUSEUgRElTUFVURSBSRVNPTFVUSU9OIFBST0NFRFVSRVMgU0VUIEZPUlRIIEFCT1ZFLCBBTlkgTEVHQUwgQUNUSU9OIE9SIFBST0NFRURJTkcgQVJJU0lORyBPVVQgT0YgT1IgUkVMQVRJTkcgVE8gVEhFU0UgVEVSTVMgT0YgVVNFIE9SIFlPVVIgQUNDRVNTIFRPIE9SIFVTRSBPRiBUSElTIFNJVEUgU0hBTEwgQkUgSU5TVElUVVRFRCBPTkxZIElOIEEgU1RBVEUgT1IgRkVERVJBTCBDT1VSVCBMT0NBVEVEIElOIENISUNBR08sIENPT0sgQ09VTlRZLCBJTExJTk9JUywgQU5EIFlPVSBFWFBSRVNTTFkgQ09OU0VOVCBUTyBUSEUgRVhDTFVTSVZFIEpVUklTRElDVElPTiBPRiBTVUNIIENPVVJUUy4KKworTW9kaWZpY2F0aW9ucy4gU3BpZGVyT2FrIHJlc2VydmVzIHRoZSByaWdodCB0byBtb2RpZnkgdGhlc2UgVGVybXMgb2YgVXNlIGF0IGFueSB0aW1lIHVwb24gcG9zdGluZy4gQnkgY29udGludWluZyB0byB1c2UgdGhpcyBTaXRlIGFmdGVyIGFueSBjaGFuZ2VzIGFyZSBwb3N0ZWQsIHlvdSBhcmUgc2lnbmlmeWluZyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlIHJldmlzZWQgdGVybXMgYW5kIGNvbmRpdGlvbnMsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB5b3UgaGF2ZSByZXZpZXdlZCB0aGVtLiBQbGVhc2UgdmlzaXQgdGhpcyBwYWdlIHJlZ3VsYXJseSB0byByZXZpZXcgdGhlIHRoZW4tY3VycmVudCBUZXJtcyBvZiBVc2UgdG8gd2hpY2ggeW91IGFyZSBib3VuZC4KKworUHJpdmFjeS4gUGxlYXNlIHJldmlldyBvdXIgUHJpdmFjeSBQb2xpY3ksIHdoaWNoIGFsc28gZ292ZXJucyB5b3VyIHZpc2l0IHRvIHRoaXMgU2l0ZSBhbmQgaXMgaW5jb3Jwb3JhdGVkIGhlcmVpbiBieSByZWZlcmVuY2UsIHRvIHVuZGVyc3RhbmQgb3VyIHByYWN0aWNlcy4KKworRW50aXJlIEFncmVlbWVudC4gVGhlc2UgVGVybXMgb2YgVXNlLCB0b2dldGhlciB3aXRoIHRoZSBTcGlkZXJPYWsgUHJpdmFjeSBQb2xpY3ksIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4geW91IGFuZCBTcGlkZXJPYWsgZ292ZXJuaW5nIHlvdXIgdXNlIG9mIHRoaXMgU2l0ZSBhbmQgc3VwZXJzZWRlcyBhbnkgcHJpb3IgYWdyZWVtZW50cyBiZXR3ZWVuIHlvdSBhbmQgU3BpZGVyT2FrIHdpdGggcmVzcGVjdCB0byB0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBOb3R3aXRoc3RhbmRpbmcgdGhlIGZvcmVnb2luZywgYXMgc3RhdGVkIGFib3ZlLCB5b3UgYWxzbyBtYXkgYmUgc3ViamVjdCB0byBhZGRpdGlvbmFsIG9yIHNlcGFyYXRlIHRlcm1zIG9mIHVzZSwgcnVsZXMgYW5kL29yIHBvbGljaWVzIHRoYXQgbWF5IGFwcGx5IHdoZW4geW91IHVzZSBjZXJ0YWluIGZlYXR1cmVzIG1hZGUgYXZhaWxhYmxlIHRocm91Z2ggdGhpcyBTaXRlLgorCitNaXNjZWxsYW5lb3VzLiBJZiB0aGVyZSBpcyBhIGRldGVybWluYXRpb24gdGhhdCBhbnkgcHJvdmlzaW9uIG9mIHRoZXNlIFRlcm1zIG9mIFVzZSBpcyBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIHRoYXQgZGV0ZXJtaW5hdGlvbiB3aWxsIG5vdCBhZmZlY3QgdGhlIHJlc3Qgb2YgdGhlc2UgVGVybXMgb2YgVXNlLCBhbmQgdGhlc2UgVGVybXMgb2YgVXNlIHNoYWxsIGJlIGRlZW1lZCBhbWVuZGVkIHRvIHRoZSBtaW5pbXVtIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSB0aGVtIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4gVGhlIGZhaWx1cmUgb2YgU3BpZGVyT2FrIHRvIGV4ZXJjaXNlIG9yIGVuZm9yY2UgYW55IHJpZ2h0IG9yIHByb3Zpc2lvbiBvZiB0aGVzZSBUZXJtcyBvZiBVc2Ugc2hhbGwgbm90IGNvbnN0aXR1dGUgYSB3YWl2ZXIgb2Ygc3VjaCByaWdodCBvciBwcm92aXNpb24uIFJlZ2FyZGxlc3Mgb2YgYW55IHN0YXR1dGUgb3IgbGF3IHRvIHRoZSBjb250cmFyeSwgYW55IGNsYWltIG9yIGNhdXNlIG9mIGFjdGlvbiBhZ2FpbnN0IFNwaWRlck9hayBhcmlzaW5nIG91dCBvZiBvciByZWxhdGVkIHRvIHVzZSBvZiB0aGlzIFNpdGUgb3IgdW5kZXIgdGhlc2UgVGVybXMgb2YgVXNlIG11c3QgYmUgZmlsZWQgd2l0aGluIG9uZSAoMSkgeWVhciBhZnRlciBzdWNoIGNsYWltIG9yIGNhdXNlIG9mIGFjdGlvbiBhcm9zZSBvciBiZSBmb3JldmVyIGJhcnJlZC4gVGhlIHNlY3Rpb24gdGl0bGVzIGluIHRoZXNlIFRlcm1zIG9mIFVzZSBhcmUgZm9yIGNvbnZlbmllbmNlIG9ubHkgYW5kIGhhdmUgbm8gbGVnYWwgb3IgY29udHJhY3R1YWwgZWZmZWN0LgorCitDb25zZW50IHRvIEVsZWN0cm9uaWMgRGVsaXZlcnkgb2YgTm90aWNlcy4gV2hlbiB5b3UgdmlzaXQgU3BpZGVyT2FrIG9yIHNlbmQgZS1tYWlscyB0byB1cywgeW91IGFyZSBjb21tdW5pY2F0aW5nIHdpdGggdXMgZWxlY3Ryb25pY2FsbHkuIFlvdSBjb25zZW50IHRvIHJlY2VpdmUgY29tbXVuaWNhdGlvbnMgZnJvbSB1cyBlbGVjdHJvbmljYWxseSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBieSBlLW1haWwgb3IgYnkgcG9zdGluZyBub3RpY2VzIG9uIHRoaXMgU2l0ZS4gWW91IGFncmVlIHRoYXQgYWxsIGFncmVlbWVudHMsIG5vdGljZXMsIGRpc2Nsb3N1cmVzIGFuZCBvdGhlciBjb21tdW5pY2F0aW9ucyB0aGF0IHdlIHByb3ZpZGUgdG8geW91IGVsZWN0cm9uaWNhbGx5IHNhdGlzZnkgYW55IGxlZ2FsIHJlcXVpcmVtZW50IHRoYXQgc3VjaCBjb21tdW5pY2F0aW9ucyBiZSBpbiB3cml0aW5nLiBUbyB3aXRoZHJhdyB5b3VyIGNvbnNlbnQgdG8gcmVjZWl2ZSBub3RpY2VzIGVsZWN0cm9uaWNhbGx5LCB5b3UgbXVzdCBub3RpZnkgdXMgb2YgeW91ciB3aXRoZHJhd2FsIG9mIHN1Y2ggY29uc2VudCBhbmQgZGlzY29udGludWUgeW91ciB1c2Ugb2YgdGhpcyBTaXRlLgorCitNaW5vcnMuIFRoaXMgU2l0ZSBpcyBub3QgaW50ZW5kZWQgZm9yIHVzZSBieSBvciBhdmFpbGFiaWxpdHkgdG8gbWlub3JzIHVuZGVyIHRoZSBhZ2Ugb2YgMTQuIElGIFlPVSBBUkUgVU5ERVIgMTQgWUVBUlMgT0YgQUdFLCBZT1UgTUFZIE5PVCBBQ0NFU1MgT1IgVVNFIFRISVMgU0lURS4gQnkgVVNJTkcgVEhJUyBTSVRFLCBZT1UgUkVQUkVTRU5UIFRPIFNQSURFUk9BSyBUSEFUIFlPVSBBUkUgMTQgWUVBUlMgT0YgQUdFIE9SIE9MREVSLiBJRiBZT1UgQVJFIFVOREVSIFRIRSBBR0UgT0YgMTgsIFlPVSBIRVJFQlkgUkVQUkVTRU5UIFRIQVQgWU9VIEFSRSBVU0lORyBUSElTIFNJVEUgV0lUSCBUSEUgQ09OU0VOVCBPRiBZT1VSIFBBUkVOVCBPUiBMRUdBTCBHVUFSRElBTiwgQU5EIFlPVVIgUEFSRU5UIE9SIExFR0FMIEdVQVJESUFOIEhFUkVCWSBBR1JFRVMgT04gWU9VUiBCRUhBTEYgVE8gQkUgTEVHQUxMWSBCT1VORCBCWSBUSEVTRSBURVJNUyBPRiBVU0UuCisKK0NvbnRhY3QgSW5mb3JtYXRpb24uIElmIHlvdSBoYXZlIGFueSBxdWVzdGlvbnMgcmVnYXJkaW5nIHRoaXMgU2l0ZSwgcGxlYXNlIGNvbnRhY3QgU3BpZGVyT2FrIGF0IHRlcm1zb2Z1c2VAc3BpZGVyb2FrLmNvbSBhbmQgaW5jbHVkZSB0aGUgZm9sbG93aW5nIHN0YXRlbWVudCBpbiB0aGUgc3ViamVjdCBsaW5lOiAiU3BpZGVyT2FrIFRlcm1zIG9mIFVzZSBRdWVzdGlvbiIuCisKKworUFJPQ0VEVVJFIEZPUiBNQUtJTkcgQ0xBSU1TIE9GIENPUFlSSUdIVCBJTkZSSU5HRU1FTlQKKworUHVyc3VhbnQgdG8gVGl0bGUgMTcsIFVuaXRlZCBTdGF0ZXMgQ29kZSwgU2VjdGlvbiA1MTIoYykoMiksIGFsbCBub3RpZmljYXRpb25zIG9mIGNsYWltZWQgY29weXJpZ2h0IGluZnJpbmdlbWVudCBvbiB0aGlzIFNpdGUgc2hvdWxkIGJlIHNlbnQgT05MWSB0byBvdXIgRGVzaWduYXRlZCBBZ2VudC4KKworTk9URTogVEhFIEZPTExPV0lORyBJTkZPUk1BVElPTiBJUyBQUk9WSURFRCBTT0xFTFkgRk9SIE5PVElGWUlORyBTUElERVJPQUsgVEhBVCBZT1VSIENPUFlSSUdIVEVEIE1BVEVSSUFMIE1BWSBIQVZFIEJFRU4gSU5GUklOR0VEIEJZIE9VUiBVU0VSUy4gRG8gbm90IHNlbmQgYW55IGlucXVpcmllcyB1bnJlbGF0ZWQgdG8gY29weXJpZ2h0IGluZnJpbmdlbWVudCAoZS5nLiwgcmVxdWVzdHMgZm9yIHRlY2huaWNhbCBhc3Npc3RhbmNlIG9yIGN1c3RvbWVyIHNlcnZpY2UpIHRvIHRoZSBjb250YWN0IGxpc3RlZCBiZWxvdy4gWW91IHdpbGwgbm90IHJlY2VpdmUgYSByZXNwb25zZSBpZiBzZW50IHRvIHRoYXQgY29udGFjdC4KKworV3JpdHRlbiBub3RpZmljYXRpb24gbXVzdCBiZSBzdWJtaXR0ZWQgdG8gdGhlIGZvbGxvd2luZyBEZXNpZ25hdGVkIEFnZW50OgorCitTZXJ2aWNlIFByb3ZpZGVyKHMpOiBTcGlkZXJPYWsKKworTmFtZSBvZiBBZ2VudCBEZXNpZ25hdGVkIHRvIFJlY2VpdmUgTm90aWZpY2F0aW9uIG9mIENsYWltZWQgSW5mcmluZ2VtZW50OiBFdGhhbiBPYmVybWFuCisKK0Z1bGwgQWRkcmVzcyBvZiBEZXNpZ25hdGVkIEFnZW50IHRvIFdoaWNoIE5vdGlmaWNhdGlvbiBTaG91bGQgYmUgU2VudDoKKworU3BpZGVyT2FrLCBJbmMuCis1NTUgSHVlaGwgUm9hZAorTm9ydGhicm9vaywgSUwgNjAwNjIKK1RlbGVwaG9uZSBOdW1iZXIgb2YgRGVzaWduYXRlZCBBZ2VudDogODQ3LjU2NC44OTAwCisKK0ZhY3NpbWlsZSBOdW1iZXIgb2YgRGVzaWduYXRlZCBBZ2VudDogODQ3LjU2NC4xMjAyCisKK0VtYWlsIEFkZHJlc3Mgb2YgRGVzaWduYXRlZCBBZ2VudDogY29weXJpZ2h0QHNwaWRlcm9hay5jb20KKworVW5kZXIgVGl0bGUgMTcsIFVuaXRlZCBTdGF0ZXMgQ29kZSwgU2VjdGlvbiA1MTIoYykoMykoQSksIHRoZSBOb3RpZmljYXRpb24gb2YgQ2xhaW1lZCBJbmZyaW5nZW1lbnQgbXVzdCBpbmNsdWRlIHRoZSBmb2xsb3dpbmc6CisKK0FuIGVsZWN0cm9uaWMgb3IgcGh5c2ljYWwgc2lnbmF0dXJlIG9mIHRoZSBvd25lciBvciBvZiB0aGUgcGVyc29uIGF1dGhvcml6ZWQgdG8gYWN0IG9uIGJlaGFsZiBvZiB0aGUgb3duZXIgb2YgdGhlIGNvcHlyaWdodCBpbnRlcmVzdDsKK0lkZW50aWZpY2F0aW9uIG9mIHRoZSBjb3B5cmlnaHRlZCB3b3JrIChvciB3b3JrcykgdGhhdCB5b3UgY2xhaW0gaGFzIGJlZW4gaW5mcmluZ2VkOworQSBkZXNjcmlwdGlvbiBvZiB0aGUgbWF0ZXJpYWwgdGhhdCB5b3UgY2xhaW0gaXMgaW5mcmluZ2luZywgYW5kIHRoZSBsb2NhdGlvbiB3aGVyZSB0aGUgb3JpZ2luYWwgb3IgYW4gYXV0aG9yaXplZCBjb3B5IG9mIHRoZSBjb3B5cmlnaHRlZCB3b3JrIGV4aXN0cyAoZm9yIGV4YW1wbGUsIHRoZSBVUkwgb2YgdGhlIHBhZ2Ugb2YgdGhlIHdlYnNpdGUgd2hlcmUgaXQgaXMgbGF3ZnVsbHkgcG9zdGVkOyB0aGUgbmFtZSwgZWRpdGlvbiBhbmQgcGFnZXMgb2YgYSBib29rIGZyb20gd2hpY2ggYW4gZXhjZXJwdCB3YXMgY29waWVkOyBldGMuKTsKK0EgY2xlYXIgZGVzY3JpcHRpb24gb2Ygd2hlcmUgdGhlIGluZnJpbmdpbmcgbWF0ZXJpYWwgaXMgbG9jYXRlZCBvbiBvdXIgd2Vic2l0ZSwgaW5jbHVkaW5nIGFzIGFwcGxpY2FibGUgaXRzIFVSTCwgc28gdGhhdCB3ZSBjYW4gbG9jYXRlIHRoZSBtYXRlcmlhbDsKK1lvdXIgYWRkcmVzcywgdGVsZXBob25lIG51bWJlciBhbmQgZS1tYWlsIGFkZHJlc3M7CitBIHN0YXRlbWVudCB0aGF0IHlvdSBoYXZlIGEgZ29vZCBmYWl0aCBiZWxpZWYgdGhhdCB0aGUgZGlzcHV0ZWQgdXNlIGlzIG5vdCBhdXRob3JpemVkIGJ5IHRoZSBjb3B5cmlnaHQgb3duZXIsIGl0cyBhZ2VudCBvciB0aGUgbGF3OyBhbmQKK0Egc3RhdGVtZW50IGJ5IHlvdSwgbWFkZSB1bmRlciBwZW5hbHR5IG9mIHBlcmp1cnksIHRoYXQgdGhlIGFib3ZlIGluZm9ybWF0aW9uIGluIHlvdXIgbm90aWNlIGlzIGFjY3VyYXRlIGFuZCB0aGF0IHlvdSBhcmUgdGhlIGNvcHlyaWdodCBvd25lciBvciBhdXRob3JpemVkIHRvIGFjdCBvbiB0aGUgY29weXJpZ2h0IG93bmVyJ3MgYmVoYWxmLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvc3Bpbi1jb21tZXJjaWFsIGIvbGljZW5zZXMvc3Bpbi1jb21tZXJjaWFsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ZjJjMTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9zcGluLWNvbW1lcmNpYWwKQEAgLTAsMCArMSwyOTQgQEAKK0xVQ0VOVCBURUNITk9MT0dJRVMgSU5DLgorU1BJTiBTT0ZUV0FSRSBQVUJMSUMgTElDRU5TRSBBR1JFRU1FTlQKKworUExFQVNFIFJFQUQgVEhJUyBBR1JFRU1FTlQgQ0FSRUZVTExZIEJFRk9SRSBQUk9DRUVESU5HLgorQlkgQ0xJQ0tJTkcgT04gVEhFICJBQ0NFUFQiIEJVVFRPTiBCRUxPVywgT1IgQlkgRE9XTkxPQURJTkcsCitJTlNUQUxMSU5HLCBVU0lORywgQ09QWUlORywgTU9ESUZZSU5HIE9SIERJU1RSSUJVVElORyBUSEUKK1NPRlRXQVJFIE9SIERFUklWQVRJVkUgV09SS1MgVEhFUkVPRiwgWU9VIEFSRSBDT05TRU5USU5HIFRPCitCRSBCT1VORCBCWSBUSElTIEFHUkVFTUVOVC4KK0lGIFlPVSBETyBOT1QgQUdSRUUgVE8gQUxMIE9GIFRIRSBURVJNUyBPRiBUSElTIEFHUkVFTUVOVCwKK0NMSUNLIE9OIFRIRSAiRE8gTk9UIEFDQ0VQVCIgQlVUVE9OIEJFTE9XIEFORCBUSEUKK0lOU1RBTExBVElPTi9ET1dOTE9BRCBQUk9DRVNTIFdJTEwgTk9UIENPTlRJTlVFLgorCisxLiBERUZJTklUSU9OUworMS4xCisiQWdyZWVtZW50IiBtZWFucyB0aGlzIEx1Y2VudCBUZWNobm9sb2dpZXMgSW5jLiBTUElOIFNvZnR3YXJlIFB1YmxpYyBMaWNlbnNlIEFncmVlbWVudC4KKworMS4yCisiQ29udHJpYnV0b3IocykiIG1lYW5zIGFueSBpbmRpdmlkdWFsIG9yIGVudGl0eSB0aGF0IGNyZWF0ZXMgb3IgY29udHJpYnV0ZXMgdG8gYQorTW9kaWZpY2F0aW9uIG9mIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZS4KKworMS4zIAorIkxpY2Vuc2VlIiBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGVudGVyaW5nIGludG8gYW5kIGV4ZXJjaXNpbmcgcmlnaHRzCit1bmRlciB0aGlzIEFncmVlbWVudCBvciBmdXR1cmUgdmVyc2lvbnMgdGhlcmVvZi4KK0ZvciB0aGUgcHVycG9zZXMgaGVyZXVuZGVyLCBMaWNlbnNlZSBpbmNsdWRlcyBhbnkgZW50aXR5IHRoYXQgY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksCitvciBpcyB1bmRlciBjb21tb24gY29udHJvbCB3aXRoIExpY2Vuc2VlLiAgRm9yIHB1cnBvc2VzIG9mIHRoaXMgZGVmaW5pdGlvbiwgImNvbnRyb2wiCittZWFucyAoaSkgdGhlIHBvd2VyLCBkaXJlY3Qgb3IgaW5kaXJlY3QsIHRvIGNhdXNlIHRoZSBkaXJlY3Rpb24gb3IgbWFuYWdlbWVudCBvZiBzdWNoCitlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlOworb3IgKGlpKSBvd25lcnNoaXAgb2YgZmlmdHkgcGVyY2VudCAoNTAlKSBvciBtb3JlIG9mIHRoZSBjb250cm9sbGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbAorb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LiAgTGljZW5zZWUgaXMgYWxzbyByZWZlcnJlZCB0byBoZXJlaW4gYXMgIllvdSIuCisKKzEuNAorIkxpY2Vuc2VkIFNvZnR3YXJlIiBtZWFucyB0aGUgT3JpZ2luYWwgU29mdHdhcmUsIE1vZGlmaWNhdGlvbnMsIG9yIGFueSBjb21iaW5hdGlvbgorb2YgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIGFuZCBNb2RpZmljYXRpb25zLgorCisxLjUKKyJMVUNFTlQiIG1lYW5zIEx1Y2VudCBUZWNobm9sb2dpZXMgSW5jLiwgYSBEZWxhd2FyZSBjb3Jwb3JhdGlvbiBoYXZpbmcgYW4gb2ZmaWNlCithdCA2MDAgTW91bnRhaW4gQXZlLiwgTXVycmF5IEhpbGwsIE5KIDA3OTc0LCBpdHMgcmVsYXRlZCBjb21wYW5pZXMgYW5kL29yIGFmZmlsaWF0ZXMuCisKKzEuNgorIlNQSU4gU29mdHdhcmUiIG1lYW5zIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIGxvZ2ljIG1vZGVsIGNoZWNraW5nIHN5c3RlbSBuYW1lZCBTUElOLAorZGV2ZWxvcGVkLCBjb3B5cmlnaHRlZCwgYW5kIGRpc3RyaWJ1dGVkIGJ5IExVQ0VOVC4KKworMS43CisiTW9kaWZpY2F0aW9uKHMpIiBtZWFucyBhbnkgYWRkaXRpb24sIGRlbGV0aW9uLCBjaGFuZ2UsIG9yIGltcHJvdmVtZW50IHRvIHRoZSBPcmlnaW5hbAorU29mdHdhcmUgb3IgcHJpb3IgTW9kaWZpY2F0aW9ucyB0aGVyZXRvLiAgTW9kaWZpY2F0aW9ucyBkbyBub3QgaW5jbHVkZSBhZGRpdGlvbnMgdG8gdGhlCitPcmlnaW5hbCBTb2Z0d2FyZSBvciBwcmlvciBNb2RpZmljYXRpb25zIHdoaWNoIChpKSBhcmUgc2VwYXJhdGUgbW9kdWxlcyBvZiBzb2Z0d2FyZSB3aGljaAorbWF5IGJlIGRpc3RyaWJ1dGVkIGluIGNvbmp1bmN0aW9uIHdpdGggTGljZW5zZWQgU29mdHdhcmU7IG9yIChpaSkgYXJlIG5vdCBkZXJpdmF0aXZlIHdvcmtzCitvZiB0aGUgTGljZW5zZWQgU29mdHdhcmUgaXRzZWxmLgorCisxLjgKKyJPYmplY3QgQ29kZSIgbWVhbnMgbWFjaGluZSByZWFkYWJsZSBzb2Z0d2FyZSBjb2RlLgorCisxLjkKKyJPcmlnaW5hbCBDb250cmlidXRvciIgbWVhbnMgTFVDRU5ULgorCisxLjEwCisiT3JpZ2luYWwgU29mdHdhcmUiIG1lYW5zIHRoZSBTUElOIFNvZnR3YXJlLCBpbiBib3RoIFNvdXJjZSBDb2RlIGZvcm0gYW5kIE9iamVjdCBDb2RlCitmb3JtLCBhbmQgYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBhcyBvcmlnaW5hbGx5IGRldmVsb3BlZCBieSBPcmlnaW5hbCBDb250cmlidXRvciwKK2FuZCBhcyBvcmlnaW5hbGx5IGZ1cm5pc2hlZCB1bmRlciB0aGlzIEFncmVlbWVudC4KKworMS4xMQorIlJlY2lwaWVudCIgbWVhbnMgYW55IGluZGl2aWR1YWwgb3IgbGVnYWwgZW50aXR5IHJlY2VpdmluZyB0aGUgTGljZW5zZWQgU29mdHdhcmUgdW5kZXIKK3RoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYWxsIENvbnRyaWJ1dG9ycywgb3IgcmVjZWl2aW5nIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSB1bmRlcgorYW5vdGhlciBsaWNlbnNlIGFncmVlbWVudCBhcyBhdXRob3JpemVkIGhlcmVpbi4KKworMS4xMgorIlNvdXJjZSBDb2RlIiBtZWFucyBodW1hbiByZWFkYWJsZSBzb2Z0d2FyZSBjb2RlLgorCisyLjAgR1JBTlQgb2YgUmlnaHRzCisyLjEKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LCBPcmlnaW5hbCBDb250cmlidXRvciBncmFudHMgdG8gTGljZW5zZWUsIGEgcm95YWx0eS1mcmVlLCBub25leGNsdXNpdmUsCitub24tdHJhbnNmZXJhYmxlLCB3b3JsZHdpZGUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zLCB0byB1c2UsIHJlcHJvZHVjZSwKK21vZGlmeSwgZXhlY3V0ZSwgZGlzcGxheSwgcGVyZm9ybSwgZGlzdHJpYnV0ZSBhbmQgc3VibGljZW5zZSwgdGhlIE9yaWdpbmFsIFNvZnR3YXJlICh3aXRoIG9yIHdpdGhvdXQKK01vZGlmaWNhdGlvbnMpIGluIFNvdXJjZSBDb2RlIGZvcm0gYW5kL29yIE9iamVjdCBDb2RlIGZvcm0gZm9yIGNvbW1lcmNpYWwgYW5kL29yIG5vbi1jb21tZXJjaWFsIHB1cnBvc2VzCitzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudC4gIFRoaXMgZ3JhbnQgaW5jbHVkZXMgYSBub25leGNsdXNpdmUgYW5kIG5vbi10cmFuc2ZlcmFibGUgbGljZW5zZSB1bmRlcgorYW55IHBhdGVudHMgd2hpY2ggT3JpZ2luYWwgQ29udHJpYnV0b3IgaGFzIGEgcmlnaHQgdG8gbGljZW5zZSBhbmQgd2hpY2gsIGJ1dCBmb3IgdGhpcyBsaWNlbnNlLCBhcmUgdW5hdm9pZGFibHkKK2FuZCBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkgdGhlIGV4ZWN1dGlvbiBvZiB0aGUgaW5oZXJlbnQgZnVuY3Rpb25hbGl0eSBvZiB0aGUgT3JpZ2luYWwgU29mdHdhcmUgaW4gdGhlIGZvcm0KK2Z1cm5pc2hlZCB1bmRlciB0aGlzIEFncmVlbWVudC4gTm90aGluZyBjb250YWluZWQgaGVyZWluIHNoYWxsIGJlIGNvbnN0cnVlZCBhcyBjb25mZXJyaW5nIGJ5IGltcGxpY2F0aW9uLAorZXN0b3BwZWwgb3Igb3RoZXJ3aXNlIGFueSBsaWNlbnNlIG9yIHJpZ2h0IHVuZGVyIGFueSBleGlzdGluZyBvciBmdXR1cmUgcGF0ZW50IGNsYWltIHdoaWNoIGlzIGRpcmVjdGVkIHRvIGEKK2NvbWJpbmF0aW9uIG9mIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSB3aXRoIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGFueSBvdGhlciBzb2Z0d2FyZSBwcm9ncmFtcywKK29yIGEgY29tYmluYXRpb24gb2YgaGFyZHdhcmUgc3lzdGVtcyBvdGhlciB0aGFuIHRoZSBjb21iaW5hdGlvbiBvZiB0aGUgT3JpZ2luYWwgU29mdHdhcmUgYW5kIHRoZSBoYXJkd2FyZSBvcgorZmlybXdhcmUgaW50byB3aGljaCB0aGUgT3JpZ2luYWwgU29mdHdhcmUgaXMgbG9hZGVkLiBEaXN0cmlidXRpb24gb2YgTGljZW5zZWQgU29mdHdhcmUgdG8gdGhpcmQgcGFydGllcyBwdXJzdWFudAordG8gdGhpcyBncmFudCBzaGFsbCBiZSBzdWJqZWN0IHRvIHRoZSBzYW1lIHRlcm1zIGFuZCBjb25kaXRpb25zIGFzIHNldCBmb3J0aCBpbiB0aGlzIEFncmVlbWVudCwgYW5kIG1heSwgYXQgeW91cgorb3B0aW9uLCBpbmNsdWRlIGEgcmVhc29uYWJsZSBjaGFyZ2UgZm9yIHRoZSBjb3N0IG9mIGFueSBtZWRpYS4gIFlvdSBtYXkgYWxzbywgYXQgeW91ciBvcHRpb24sIGNoYXJnZSBmb3IgYW55CitvdGhlciBzb2Z0d2FyZSwgcHJvZHVjdCBvciBzZXJ2aWNlIHdoaWNoIGluY2x1ZGVzIG9yIGluY29ycG9yYXRlcyB0aGUgT3JpZ2luYWwgU29mdHdhcmUgYXMgYSBwYXJ0IHRoZXJlb2YuCisKKzIuMgorU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQsIGVhY2ggQ29udHJpYnV0b3IgZ3JhbnRzIHRvIExpY2Vuc2VlLCBhIHJveWFsdHktZnJlZSwgbm9uZXhjbHVzaXZlLCBub24tCit0cmFuc2ZlcmFibGUsIHdvcmxkd2lkZSBsaWNlbnNlLCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIHRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksCitleGVjdXRlLCBkaXNwbGF5LCBwZXJmb3JtLCBkaXN0cmlidXRlIGFuZCBzdWJsaWNlbnNlLCBNb2RpZmljYXRpb25zIGNyZWF0ZWQgYnkgc3VjaCBDb250cmlidXRvciBpbiBTb3VyY2UgQ29kZQorZm9ybSBhbmQvb3IgT2JqZWN0IENvZGUgZm9ybSBmb3IgY29tbWVyY2lhbCBhbmQvb3Igbm9uLWNvbW1lcmNpYWwgcHVycG9zZXMgc3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcworQWdyZWVtZW50LiAgVGhpcyBncmFudCBpbmNsdWRlcyBhIG5vbmV4Y2x1c2l2ZSBhbmQgbm9uLXRyYW5zZmVyYWJsZSBsaWNlbnNlIHVuZGVyIGFueSBwYXRlbnRzIHdoaWNoIHN1Y2gKK0NvbnRyaWJ1dG9yIGhhcyBhIHJpZ2h0IHRvIGxpY2Vuc2UgYW5kIHdoaWNoLCBidXQgZm9yIHRoaXMgbGljZW5zZSwgYXJlIHVuYXZvaWRhYmx5IGFuZCBuZWNlc3NhcmlseSBpbmZyaW5nZWQgYnkKK3RoZSBleGVjdXRpb24gb2YgdGhlIGluaGVyZW50IGZ1bmN0aW9uYWxpdHkgb2YgdGhlIE1vZGlmaWNhdGlvbnMgaW4gdGhlIGZvcm0gZnVybmlzaGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LgorTm90aGluZyBjb250YWluZWQgaGVyZWluIHNoYWxsIGJlIGNvbnN0cnVlZCBhcyBjb25mZXJyaW5nIGJ5IGltcGxpY2F0aW9uLCBlc3RvcHBlbCBvciBvdGhlcndpc2UgYW55IGxpY2Vuc2Ugb3IKK3JpZ2h0IHVuZGVyIGFueSBleGlzdGluZyAgb3IgZnV0dXJlIHBhdGVudCBjbGFpbSB3aGljaCBpcyBkaXJlY3RlZCB0byBhIGNvbWJpbmF0aW9uIG9mIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZQorTW9kaWZpY2F0aW9ucyB3aXRoIHRoZSBmdW5jdGlvbmFsaXR5IG9mIGFueSBvdGhlciBzb2Z0d2FyZSBwcm9ncmFtcywgb3IgYSBjb21iaW5hdGlvbiBvZiBoYXJkd2FyZSBzeXN0ZW1zCitvdGhlciB0aGFuIHRoZSBjb21iaW5hdGlvbiBvZiBNb2RpZmljYXRpb25zIGFuZCB0aGUgaGFyZHdhcmUgb3IgZmlybXdhcmUgaW50byB3aGljaCB0aGUgTW9kaWZpY2F0aW9ucyBhcmUKK2xvYWRlZC4gICBEaXN0cmlidXRpb24gb2YgTW9kaWZpY2F0aW9ucyB0byB0aGlyZCBwYXJ0aWVzIHB1cnN1YW50IHRvIHRoaXMgZ3JhbnQgc2hhbGwgYmUgc3ViamVjdCB0byB0aGUgc2FtZSB0ZXJtcworYW5kIGNvbmRpdGlvbnMgYXMgc2V0IGZvcnRoIGluIHRoaXMgQWdyZWVtZW50LCBhbmQgbWF5LCBhdCB5b3VyIG9wdGlvbiwgaW5jbHVkZSBhIHJlYXNvbmFibGUgY2hhcmdlIGZvciB0aGUgY29zdAorb2YgYW55IG1lZGlhLiAgWW91IG1heSBhbHNvLCBhdCB5b3VyIG9wdGlvbiwgY2hhcmdlIGZvciBhbnkgb3RoZXIgc29mdHdhcmUsIHByb2R1Y3Qgb3Igc2VydmljZSB3aGljaCBpbmNsdWRlcyBvcgoraW5jb3Jwb3JhdGVzIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSBhcyBhIHBhcnQgdGhlcmVvZi4KKworMy4wIERJU1RSSUJVVElPTiBPQkxJR0FUSU9OUworMy4xCitNb2RpZmljYXRpb25zIHdoaWNoIFlvdSBjcmVhdGUgb3IgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUgYXJlIGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCBhbmQKK211c3QgYmUgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIHRoaXMgQWdyZWVtZW50IGluIGF0IGxlYXN0IHRoZSBzYW1lIGZvcm0gYXMgdGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YKK0xpY2Vuc2VkIFNvZnR3YXJlIGZ1cm5pc2hlZCBoZXJldW5kZXIuICBBbnkgZGlzdHJpYnV0aW9uIGJ5IFlvdSBvZiB0aGUgU291cmNlIENvZGUgdmVyc2lvbiBvZiBMaWNlbnNlZAorU29mdHdhcmUgbXVzdCBiZSBtYWRlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudCBvciBhbnkgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgdW5kZXIKK1NlY3Rpb24gMTEuMCwgYW5kIFlvdSBtdXN0IGluY2x1ZGUgYSBjb3B5IG9mIHRoaXMgQWdyZWVtZW50IHdpdGggZWFjaCBhbmQgZXZlcnkgY29weSBvZiBzdWNoIFNvdXJjZSBDb2RlCit2ZXJzaW9uIG9mIExpY2Vuc2VkIFNvZnR3YXJlIHdoaWNoIFlvdSBkaXN0cmlidXRlLiAgWW91IG1heSBub3Qgb2ZmZXIgb3IgaW1wb3NlIGFueSB0ZXJtcyBvbiBhbnkgc3VjaAorU291cmNlIENvZGUgdmVyc2lvbiBvZiBMaWNlbnNlZCBTb2Z0d2FyZSB0aGF0IGFsdGVycyBvciByZXN0cmljdHMgdGhlIHRlcm1zIG9mIHRoZSBhcHBsaWNhYmxlIHZlcnNpb24gb2YgdGhpcworQWdyZWVtZW50IG9yIHRoZSBSZWNpcGllbnRzIiByaWdodHMgYW5kIG9ibGlnYXRpb25zIGhlcmV1bmRlci4KKworMy4yCitZb3UgbXVzdCBjYXVzZSBhbGwgTGljZW5zZWQgU29mdHdhcmUgdG8gd2hpY2ggWW91IGNvbnRyaWJ1dGUsIGkuZS4gWW91ciBNb2RpZmljYXRpb25zLCB0byBjb250YWluIGEgY2xlYXIKK2lkZW50aWZpY2F0aW9uLCBlLmcuLCBhIHNlcGFyYXRlIGZpbGUsIGRvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIG1hZGUgYnkgWW91IGFuZCBpZGVudGlmeWluZyBZb3UgYXMgdGhlCitDb250cmlidXRvciB0aGF0IHJlYXNvbmFibHkgYWxsb3dzIHN1YnNlcXVlbnQgUmVjaXBpZW50cyB0byBpZGVudGlmeSB0aGUgb3JpZ2luYXRvciBvZiB0aGUgTW9kaWZpY2F0aW9uLiAgVG8gdGhlCitleHRlbnQgWW91IGNyZWF0ZSBhdCBsZWFzdCBvbmUgTW9kaWZpY2F0aW9uLCBZb3UgbWF5IGFkZCBZb3VyIG5hbWUgYXMgYSBDb250cmlidXRvciB0byB0aGUgcmVxdWlzaXRlIG5vdGljZQorZGVzY3JpYmVkIGluIFNlY3Rpb24gMy4zLgorCiszLjMKK1dpdGggcmVzcGVjdCB0byBZb3VyIGRpc3RyaWJ1dGlvbiBvZiBMaWNlbnNlZCBTb2Z0d2FyZSAob3IgYW55IHBvcnRpb24gdGhlcmVvZiksIFlvdSBtdXN0IGluY2x1ZGUgdGhlIGZvbGxvd2luZworaW5mb3JtYXRpb24gaW4gYSBjb25zcGljdW91cyBsb2NhdGlvbiBnb3Zlcm5pbmcgc3VjaCBkaXN0cmlidXRpb24gKGUuZy4sIGEgc2VwYXJhdGUgZmlsZSkgYW5kIG9uIGFsbCBjb3BpZXMgb2YgYW55CitTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mIExpY2Vuc2VkIFNvZnR3YXJlIFlvdSBkaXN0cmlidXRlOgorIlRoZSBjb250ZW50cyBoZXJlaW4gaW5jbHVkZXMgc29mdHdhcmUgaW5pdGlhbGx5IGRldmVsb3BlZCBieSBCZWxsIExhYm9yYXRvcmllcywgTHVjZW50IFRlY2hub2xvZ2llcyBJbmMuLAorYW5kIGlzIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoZSBMdWNlbnQgVGVjaG5vbG9naWVzIEluYy4gU1BJTiBTb2Z0d2FyZSBQdWJsaWMgTGljZW5zZSBBZ3JlZW1lbnQuCitBIGNvcHkgb2YgdGhlIFNQSU4gU29mdHdhcmUgUHVibGljIExpY2Vuc2UgQWdyZWVtZW50IGlzIGF2YWlsYWJsZSBhdDoKKworaHR0cDovL2NtLmJlbGwtbGFicy5jb20vY20vY3Mvd2hhdC9zcGluL1NQSU5fcHVibGljX2xpY2Vuc2UudHh0CisKK29yIGJ5IGNvbnRhY3RpbmcgTHVjZW50IFRlY2hub2xvZ2llcyBhdCBzcGluX2xpc3RAcmVzZWFyY2guYmVsbC1sYWJzLmNvbS4KKworQWxsIHNvZnR3YXJlIGRpc3RyaWJ1dGVkIHVuZGVyIHN1Y2ggQWdyZWVtZW50IGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsCitXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBlaXRoZXIgZXhwcmVzcyBvciBpbXBsaWVkLiAgU2VlIHRoZSBTUElOIFNvZnR3YXJlCitQdWJsaWMgTGljZW5zZSBBZ3JlZW1lbnQgZm9yIHRoZSBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgYWxsIHJpZ2h0cywgb2JsaWdhdGlvbnMKK2FuZCBsaW1pdGF0aW9ucyB1bmRlciBzdWNoIEFncmVlbWVudC4KK1BvcnRpb25zIG9mIHRoZSBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgTHVjZW50IFRlY2hub2xvZ2llcyBJbmMuIGFyZSBDb3B5cmlnaHQgMTk4OS0yMDAxLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KK0NvbnRyaWJ1dG9yKHMpOl9fX19fX19fX19fX19fX19fX19fX19fX19fXyIKKworMy40CitZb3UgbWF5IGRpc3RyaWJ1dGUgTGljZW5zZWQgU29mdHdhcmUgaW4gT2JqZWN0IENvZGUgZm9ybSB1c2luZyB0aGlzIEFncmVlbWVudCwgb3IgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIKK2Nob2ljZSBwcm92aWRlZCB0aGF0IFlvdSBhcmUgaW4gY29tcGxpYW5jZSB3aXRoIHRoaXMgQWdyZWVtZW50IGFuZCBZb3VyIGxpY2Vuc2U6IChhKSBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcworYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQ7IChiKSBkb2VzIG5vdCBsaW1pdCBvciBhbHRlciB0aGUgUmVjaXBpZW50InMgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBpbiB0aGUgU291cmNlCitDb2RlIHZlcnNpb24gb2YgdGhlIExpY2Vuc2VkIFNvZnR3YXJlIHNldCBmb3J0aCBpbiB0aGlzIEFncmVlbWVudDsgKGMpIHN0YXRlcyB0aGF0IHRoZSBTb3VyY2UgQ29kZSB2ZXJzaW9uIG9mCit0aGUgTGljZW5zZWQgU29mdHdhcmUgaXMgYXZhaWxhYmxlIGZyb20gWW91LCBhbmQgZGVzY3JpYmVzIGhvdyB0byBpdCBtYXkgYmUgb2J0YWluZWQgYnkgUmVjaXBpZW50OyAoZCkKK2VmZmVjdGl2ZWx5IGRpc2NsYWltcyBvbiBiZWhhbGYgb2YgT3JpZ2luYWwgQ29udHJpYnV0b3IgYW5kIGFsbCBDb250cmlidXRvcnMgYWxsIHdhcnJhbnRpZXMgYW5kIGNvbmRpdGlvbnMsCitleHByZXNzIG9yIGltcGxpZWQsIGluY2x1ZGluZyB3YXJyYW50aWVzIG9yIGNvbmRpdGlvbnMgb2YgdGl0bGUgb3Igbm9uLWluZnJpbmdlbWVudCwgYW5kIGltcGxpZWQgd2FycmFudGllcyBvcgorY29uZGl0aW9ucyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhciBwdXJwb3NlOyAoZSkgZWZmZWN0aXZlbHkgZXhjbHVkZXMgb24gYmVoYWxmIG9mIE9yaWdpbmFsCitDb250cmlidXRvciBhbmQgYWxsIENvbnRyaWJ1dG9ycyBhbGwgbGlhYmlsaXR5IGZvciBkYW1hZ2VzLCBpbmNsdWRpbmcgZGlyZWN0LCBpbmRpcmVjdCwgc3BlY2lhbCwgaW5jaWRlbnRhbCwgYW5kCitjb25zZXF1ZW50aWFsIGRhbWFnZXM7IGFuZCAoZikgY2xlYXJseSBzdGF0ZXMgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIG9mZmVyZWQgYnkKK1lvdSBhbG9uZSwgbm90IGJ5IE9yaWdpbmFsIENvbnRyaWJ1dG9yIG9yIGFueSBvdGhlciBDb250cmlidXRvci4gIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IE9yaWdpbmFsCitDb250cmlidXRvciBvciBhbnkgb3RoZXIgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgT3JpZ2luYWwgQ29udHJpYnV0b3Igb3IgYW55IG90aGVyIENvbnRyaWJ1dG9yCithcyByZXN1bHQgb2YgYW55IHN1Y2ggZGlmZmVyaW5nIHRlcm1zIFlvdSBvZmZlciBpbiBZb3VyIGxpY2Vuc2UuCisKKzMuNQorWW91IG1heSBub3QgdXNlIHRoZSBuYW1lcyAiTHVjZW50IFRlY2hub2xvZ2llcyIsICJCZWxsIExhYnMiIG9yIGFueSBvdGhlciBuYW1lIGFzc29jaWF0ZWQgd2l0aCBMVUNFTlQKK29yIGFueSBMVUNFTlQgdHJhZGVtYXJrIGZvciBhbnkgcHVycG9zZXMgb3RoZXIgdGhhbiBhcyBzcGVjaWZpY2FsbHkgcHJvdmlkZWQgaW4gU2VjdGlvbiAzLjAuCisKKzMuNgorWW91IG11c3QgaW5jbHVkZSBhbGwgb2YgdGhlIG9yaWdpbmFsIGNvcHlyaWdodCwgbGFiZWxzIG9yIG90aGVyIG5vdGljZXMgb24gdGhlIExpY2Vuc2VkIFNvZnR3YXJlIG9uIGFueSBjb3BpZXMgb2YKK3RoZSBMaWNlbnNlZCBTb2Z0d2FyZSB3aGljaCBZb3UgbWFrZTsgYW5kIGluY2x1ZGUgd2l0aCB0aGUgZGlzdHJpYnV0aW9uIG9mIGFueSBNb2RpZmljYXRpb25zIFlvdSBjcmVhdGUgYQorY29weSAob3IgYW4gb2ZmZXIgdG8gcHJvdmlkZSBzdWNoIGEgY29weSBhdCBubyBjaGFyZ2UpIG9mIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSwgb24gdGhlIHNhbWUgdGVybXMgYXMgc2V0IGZvcnRoCitpbiB0aGlzIEFncmVlbWVudC4KKworMy43CitXaGlsZSB0aGlzIEFncmVlbWVudCBjb250ZW1wbGF0ZXMgdGhlIGNvbW1lcmNpYWwgdXNlIGFuZCBkaXN0cmlidXRpb24gb2YgTGljZW5zZWQgU29mdHdhcmUsIGNvbW1lcmNpYWwKK2Rpc3RyaWJ1dG9ycyBvZiBzb2Z0d2FyZSBtYXksIGZvciBhIHZhcmlldHkgb2YgcmVhc29ucywgYWNjZXB0IGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyB3aXRoIHJlc3BlY3QgdG8gY3VzdG9tZXJzLAorbGljZW5zZWVzLCBidXNpbmVzcyBwYXJ0bmVycyBhbmQgdGhlIGxpa2UuICBBcyBzdWNoLCBpZiBZb3Ugb3IgYW55IENvbnRyaWJ1dG9yIGluY2x1ZGUgTGljZW5zZWQgU29mdHdhcmUgaW4gYQorY29tbWVyY2lhbCBvZmZlcmluZyAoIkNvbW1lcmNpYWwgQ29udHJpYnV0b3IiKSwgc3VjaCBDb21tZXJjaWFsIENvbnRyaWJ1dG9yIGFncmVlcyB0byBkZWZlbmQgYW5kCitpbmRlbW5pZnkgT3JpZ2luYWwgQ29udHJpYnV0b3IgYW5kIGFsbCBvdGhlciBDb250cmlidXRvcnMgIChjb2xsZWN0aXZlbHkgIkluZGVtbmlmaWVkIENvbnRyaWJ1dG9ycyIpIGFnYWluc3QKK2FueSBsaWFiaWxpdHksIGxvc3NlcywgZGFtYWdlcyBhbmQgY29zdHMgYXJpc2luZyBmcm9tIGNsYWltcywgbGF3c3VpdHMgYW5kIG90aGVyIGxlZ2FsIGFjdGlvbnMgYnJvdWdodCBieSBhbnkKK3RoaXJkIHBhcnR5IGFnYWluc3QgdGhlIEluZGVtbmlmaWVkIENvbnRyaWJ1dG9ycyB0byB0aGUgZXh0ZW50IGNhdXNlZCBieSB0aGUgYWN0cyBvciBvbWlzc2lvbnMgb2Ygc3VjaAorQ29tbWVyY2lhbCBDb250cmlidXRvciBpbiBjb25uZWN0aW9uIHdpdGggaXRzIHVzZSBvciBkaXN0cmlidXRpb24gb2YgTGljZW5zZWQgU29mdHdhcmUgaW4gYSBjb21tZXJjaWFsCitvZmZlcmluZyBvZiBhbnkga2luZC4KKworNC4wIE1PRElGSUNBVElPTlMuCitZb3UgYWdyZWUgdG8gcHJvdmlkZSB0aGUgT3JpZ2luYWwgQ29udHJpYnV0b3IsIGF0IGl0cyByZXF1ZXN0LCB3aXRoIGEgY29weSBvZiB0aGUgY29tcGxldGUKK1NvdXJjZSBDb2RlIHZlcnNpb24sIE9iamVjdCBDb2RlIHZlcnNpb24gYW5kIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBmb3IgTW9kaWZpY2F0aW9ucyBjcmVhdGVkIG9yIGNvbnRyaWJ1dGVkIHRvIGJ5CitZb3UuICBPcmlnaW5hbCBDb250cmlidXRvciBhbmQvb3Igb3RoZXIgQ29udHJpYnV0b3JzIHNoYWxsIGhhdmUgdW5yZXN0cmljdGVkLCBub25leGNsdXNpdmUsIHdvcmxkd2lkZSwgcGVycGV0dWFsLAorcm95YWx0eS1mcmVlIHJpZ2h0cywgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSBZb3VyIE1vZGlmaWNhdGlvbnMsIGFuZCB0bworZ3JhbnQgdGhpcmQgcGFydGllcyB0aGUgcmlnaHQgdG8gZG8gc28sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gYXMgYSBwYXJ0IG9mIG9yIHdpdGggdGhlIExpY2Vuc2VkIFNvZnR3YXJlOyBhbmQKK09yaWdpbmFsIENvbnRyaWJ1dG9yIGFuZC9vciBvdGhlciBDb250cmlidXRvcnMgc2hhbGwgaGF2ZSB0aGUgcmlnaHQgdG8gbGljZW5zZSBvciB0byBvdGhlcndpc2UgdHJhbnNmZXIgdG8gdGhpcmQgcGFydGllcworWW91ciAgTW9kaWZpY2F0aW9ucyB3aXRob3V0IG5vdGljZSwgb2JsaWdhdGlvbiBvciByZWNvdXJzZSB0byBZb3UuICBZb3UgZ3JhbnQgdG8gT3JpZ2luYWwgQ29udHJpYnV0b3IsIENvbnRyaWJ1dG9ycworYW5kIHRoZWlyIHJlc3BlY3RpdmUgbGljZW5zZWVzIGFsbCByaWdodHMgYW5kIGxpY2Vuc2VzIChpbmNsdWRpbmcgcGF0ZW50cykgYXMgYXJlIG5lY2Vzc2FyeSB0byBpbmNvcnBvcmF0ZSB0aGUKK01vZGlmaWNhdGlvbnMgY3JlYXRlZCBvciBjb250cmlidXRlIGJ5IFlvdSBpbnRvIHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSBhbmQgdG8gdXNlLCBkaXN0cmlidXRlIG9yIG90aGVyd2lzZSBleHBsb2l0CitzdWNoIExpY2Vuc2VkIFNvZnR3YXJlIHdpdGhvdXQgcGF5bWVudCBvciBhY2NvdW50aW5nIHRvIFlvdS4KKworNS4wICBUSVRMRS4KK1RpdGxlLCBvd25lcnNoaXAgcmlnaHRzLCBhbmQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBpbiB0aGUgT3JpZ2luYWwgU29mdHdhcmUgc2hhbGwgcmVtYWluIGluIHRoZQorT3JpZ2luYWwgQ29udHJpYnV0b3IuIE9yaWdpbmFsIENvbnRyaWJ1dG9yIGFuZC9vciB0aGUgb3RoZXIgQ29udHJpYnV0b3JzIHJlc2VydmUgYWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgdG8KK1lvdSwgYW5kIG5vIG90aGVyIGxpY2Vuc2VzIGFyZSBncmFudGVkIG9yIGltcGxpZWQuCitUaGUgTGljZW5zZWQgU29mdHdhcmUgaXMgcHJvdGVjdGVkIGJ5IGNvcHlyaWdodCBsYXdzIGFuZCB0cmVhdGllcy4KKworNi4wICBURVJNSU5BVElPTgorNi4xCitUaGUgbGljZW5zZXMgYW5kIHJpZ2h0cyBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IHNoYWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmIChpKSBZb3UgZmFpbCB0byBjb21wbHkKK3dpdGggYWxsIG9mIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBoZXJlaW47IG9yIChpaSkgWW91IGluaXRpYXRlIG9yIHBhcnRpY2lwYXRlIGluIGFueSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgYWN0aW9uCithZ2FpbnN0IE9yaWdpbmFsIENvbnRyaWJ1dG9yIGFuZC9vciBhbm90aGVyIENvbnRyaWJ1dG9yLgorCis2LjIKK1RoZSByaWdodHMgYW5kIG9ibGlnYXRpb25zIG9mIHRoZSBwYXJ0aWVzIGhlcmV0byB3aGljaCBieSB0aGVpciBuYXR1cmUgd291bGQgY29udGludWUgYmV5b25kIHRlcm1pbmF0aW9uIG9mIHRoaXMKK0FncmVlbWVudCBzaGFsbCBzdXJ2aXZlIGFuZCBjb250aW51ZSBhZnRlciBhbnkgc3VjaCB0ZXJtaW5hdGlvbiBvZiB0aGlzIEFncmVlbWVudC4KKworNi4zCitVcG9uIHRlcm1pbmF0aW9uIGZvciBhbnkgcmVhc29uLCBZb3UgbXVzdCBkZXN0cm95IGFsbCBjb3BpZXMgb2YgdGhlIExpY2Vuc2VkIFNvZnR3YXJlIGluIHlvdXIgcG9zc2Vzc2lvbi4gIEFsbAorc3VibGljZW5zZXMgb2YgTGljZW5zZWQgU29mdHdhcmUgd2hpY2ggd2VyZSB2YWxpZGx5IGdyYW50ZWQgYnkgWW91IHRvIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgc2hhbGwKK3N1cnZpdmUgc3VjaCB0ZXJtaW5hdGlvbi4KKworNy4wIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkuCitZT1UgVU5ERVJTVEFORCBBTkQgQUNLTk9XTEVER0UgVEhBVCwgVE8gVEhFCitGVUxMRVNUIEVYVEVOVCBQRVJNSVRURUQgQlkgTEFXLCBUSEUgTElDRU5TRUQgU09GVFdBUkUgSVMgTElDRU5TRUQgVU5ERVIgVEhJUworQUdSRUVNRU5UIEZSRUUgT0YgQ0hBUkdFIE9OIEFOICJBUyBJUyIgQkFTSVMgV0lUSCBBTEwgRkFVTFRTLCBMQVRFTlQgQU5EIFBBVEVOVAorQU5EIFdJVEhPVVQgQU5ZIFdBUlJBTlRZIE9GIEFOWSBUWVBFLiBPUklHSU5BTCBDT05UUklCVVRPUiBBTkQgVEhFIE9USEVSCitDT05UUklCVVRPUlMgTUFLRSBOTyBSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUywgRVhQUkVTU0VEIE9SIElNUExJRUQuICBCWQorV0FZIE9GIEVYQU1QTEUsIEJVVCBOT1QgT0YgTElNSVRBVElPTiwgT1JJR0lOQUwgQ09OVFJJQlVUT1IgQU5EIFRIRSBPVEhFUgorQ09OVFJJQlVUT1JTIE1BS0UgTk8gUkVQUkVTRU5UQVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBCitQQVJUSUNVTEFSIFBVUlBPU0UgT1IgVEhBVCBUSEUgVVNFIE9GIFRIRSBMSUNFTlNFRCBTT0ZUV0FSRSBXSUxMIE5PVCBJTkZSSU5HRSBBTlkKK1BBVEVOVCBPUiBPVEhFUiBJTlRFTExFQ1RVQUwgUFJPUEVSVFkgUklHSFQgT0YgQU5ZIFRISVJEIFBBUlRZIEFORCBJVCBTSEFMTCBCRQorVEhFIFNPTEUgUkVTUE9OU0lCSUxJVFkgT0YgWU9VIFRPIE1BS0UgU1VDSCBERVRFUk1JTkFUSU9OIEFTIElTIE5FQ0VTU0FSWSBXSVRICitSRVNQRUNUIFRPIFRIRSBBQ1FVSVNJVElPTiBPRiBMSUNFTlNFUyBVTkRFUiBQQVRFTlRTIE9SIE9USEVSIElOVEVMTEVDVFVBTAorUFJPUEVSVFkgUklHSFRTIE9GIFRISVJEIFBBUlRJRVMuIE9SSUdJTkFMIENPTlRSSUJVVE9SIEFORCBUSEUgT1RIRVIKK0NPTlRSSUJVVE9SUyBETyBOT1QgV0FSUkFOVCBUSEFUIFRIRSBGVU5DVElPTlMgT0YgVEhFIExJQ0VOU0VEIFNPRlRXQVJFIFdJTEwKK01FRVQgWU9VUiBSRVFVSVJFTUVOVFMgT1IgVEhBVCBMSUNFTlNFRCBTT0ZUV0FSRSBPUEVSQVRJT04gV0lMTCBCRSBFUlJPUi1GUkVFCitPUiBVTklOVEVSUlVQVEVELiAgWU9VIEFTU1VNRSBUSEUgUklTSyBPRiBBTlkgQU5EIEFMTCBEQU1BR0UgT1IgTE9TUyBGUk9NIFVTRSwgT1IKK0lOQUJJTElUWSBUTyBVU0UsIFRIRSBMSUNFTlNFRCBTT0ZUV0FSRS4gIE9SSUdJTkFMIENPTlRSSUJVVE9SIEFORCBUSEUgT1RIRVIKK0NPTlRSSUJVVE9SUyBCRUFSIE5PIFJFU1BPTlNJQklMSVRZIEZPUiBDT1JSRUNUSU5HIFRIRSBMSUNFTlNFRCBTT0ZUV0FSRSwKK1NVUFBMWUlORyBBU1NJU1RBTkNFIEZPUiBGSVhJTkcsIE9SIEZPUiBDT01NVU5JQ0FUSU5HIEtOT1dOIEVSUk9SUyBUTyBZT1UKK1BFUlRBSU5JTkcgVE8gVEhFIExJQ0VOU0VEIFNPRlRXQVJFIEZVUk5JU0hFRCBIRVJFVU5ERVIuCisKK09SSUdJTkFMIENPTlRSSUJVVE9SIEFORCBUSEUgT1RIRVIgQ09OVFJJQlVUT1JTIFNIQUxMIE5PVCBCRSBIRUxEIFRPIEFOWQorTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBBTlkgUEFURU5UIElORlJJTkdFTUVOVCBPUiBBTlkgT1RIRVIgQ0xBSU0gTUFERSBCWSBZT1UKK09SIEFOWSBUSElSRCBQQVJUWSBPTiBBQ0NPVU5UIE9GLCBPUiBBUklTSU5HIEZST00gVEhFIFVTRSBPRiwgVEhFIExJQ0VOU0VECitTT0ZUV0FSRSBQUk9WSURFRCBIRVJFVU5ERVIuCisKK1NPTUUgU1RBVEVTIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQgV0FSUkFOVElFUywgU08gVEhFIEFCT1ZFCitFWENMVVNJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuICBZT1UgTUFZIEFMU08gSEFWRSBPVEhFUiBSSUdIVFMgV0hJQ0ggVkFSWSBGUk9NCitKVVJJU0RJQ1RJT04gVE8gSlVSSVNESUNUSU9OLgorCis4LjAgIExJTUlUQVRJT04gT0YgTElBQklMSVRZLgorVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBBTkQgVU5ERVIgTk8gTEVHQUwgVEhFT1JZLAorVE9SVCwgQ09OVFJBQ1QsIE9SIE9USEVSV0lTRSwgU0hBTEwgT1JJR0lOQUwgQ09OVFJJQlVUT1IgQU5EL09SIFRIRSBPVEhFUgorQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBUTyBZT1UgT1IgQU5ZIE9USEVSIFRISVJEIFBBUlRZIEZPUiBEQU1BR0VTIE9GIEFOWSBLSU5ECitJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBXSEFUU09FVkVSIElOQ0xVRElORywgV0lUSE9VVAorTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUgorTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgVEhFCitPUklHSU5BTCBDT05UUklCVVRPUiBBTkQvT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SUyBTSEFMTCBIQVZFIEJFRU4gSU5GT1JNRUQgT0YKK1RIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMsIE9SIEZPUiBBTlkgQ0xBSU0gQlkgQU5ZIE9USEVSIFBBUlRZLgorRlVSVEhFUk1PUkUsIFNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OIE9GCitJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhJUyBMSU1JVEFUSU9OIEFORCBFWENMVVNJT04gTUFZIE5PVAorQVBQTFkgVE8gWU9VLiAgVE8gVEhFIEVYVEVOVCBUSEFUIEFOWSBFWENMVVNJT04gT0YgREFNQUdFUyBBQk9WRSBJUyBOT1QgVkFMSUQsIFlPVQorQUdSRUUgVEhBVCBJTiBOTyBFVkVOVCBXSUxMIE9SSUdJTkFMIENPTlRSSUJVVE9SIlMgQU5EIEFMTCBPVEhFUiBDT05UUklCVVRPUlMiCitUT1RBTCBMSUFCSUxJVFkgVU5ERVIgT1IgUkVMQVRFRCBUTyBUSElTIEFHUkVFTUVOVCBFWENFRUQgT05FIFRIT1VTQU5EIERPTExBUlMKKygkMTAwMC4wMCBVUykuCisKKzkuMCAgRVhQT1JUIENPTlRST0wuCitZb3UgYWNrbm93bGVkZ2UgdGhhdCB0aGUgTGljZW5zZWQgU29mdHdhcmUgaGVyZXVuZGVyIGlzICJwdWJsaWNseSBhdmFpbGFibGUiIGFzIHRoZQordGVybSBpcyBkZWZpbmVkIHVuZGVyIHRoZSBVbml0ZWQgU3RhdGVzIGV4cG9ydCBhZG1pbmlzdHJhdGlvbiByZWd1bGF0aW9ucyBhbmQgaXMgbm90IHN1YmplY3QgdG8gZXhwb3J0IGNvbnRyb2wgdW5kZXIKK3N1Y2ggbGF3cyBhbmQgcmVndWxhdGlvbnMuICBIb3dldmVyLCBpZiBZb3UgbW9kaWZ5IHRoZSBMaWNlbnNlZCBTb2Z0d2FyZSB0byBjaGFuZ2UgKG9yIG90aGVyd2lzZSBhZmZlY3QpIHN1Y2gKK3B1YmxpY2x5IGF2YWlsYWJsZSBzdGF0dXMgWW91IGFncmVlIHRoYXQgWW91IGFsb25lIGFyZSByZXNwb25zaWJsZSBmb3IgY29tcGxpYW5jZSB3aXRoIHRoZSBVbml0ZWQgU3RhdGVzIGV4cG9ydAorYWRtaW5pc3RyYXRpb24gcmVndWxhdGlvbnMgYW5kIGhlcmVieSBpbmRlbW5pZnkgdGhlIE9yaWdpbmFsIENvbnRyaWJ1dG9yIGFuZCBhbGwgb3RoZXIgQ29udHJpYnV0b3JzIGZvciBhbnkgbGlhYmlsaXR5CitpbmN1cnJlZCBhcyBhIHJlc3VsdCBvZiBZb3VyIGFjdGlvbnMgd2hpY2ggcmVzdWx0ZWQgaW4gYW55IGNoYW5nZSBpbiB0aGUgZXhwb3J0IHN0YXR1cyBvZiB0aGUgTGljZW5zZWQgU29mdHdhcmUgYXMKK2Z1cm5pc2hlZCBoZXJldW5kZXIuCisKKzEwLjAgIFUuUy4gR09WRVJOTUVOVCBSSUdIVFMuCitZb3UgbWF5IG9ubHkgYWNxdWlyZSB0aGUgTGljZW5zZWQgU29mdHdhcmUgb24gYmVoYWxmIG9mLCBvciBmb3IgZGVsaXZlcnkKK3RvLCBhbnkgcGFydCBvZiB0aGUgVW5pdGVkIFN0YXRlcyBHb3Zlcm5tZW50LCBpZiB0aGUgTGljZW5zZWQgU29mdHdhcmUgaXMgdHJlYXRlZCBhcyBjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlCithbmQgbGljZW5zZWQgdG8gdGhlIEdvdmVybm1lbnQgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50LCBwdXJzdWFudCB0byB0aGUgcG9saWNpZXMgc3RhdGVkIGluCis0OCBDLkYuUi4gU2VjdGlvbiAxMi4yMTIgKE9jdG9iZXIgMTk5NSkgb3IgNDggQy5GLlIuIFNlY3Rpb24gMjI3LjcyMDIgKEp1bmUgMTk5NSksIGFzIGFwcGxpY2FibGUuCisKKzExLjAgTElDRU5TRSBWRVJTSU9OUy4KK0xVQ0VOVCwgYXQgaXRzIHNvbGUgZGlzY3JldGlvbiwgbWF5IGZyb20gdGltZSB0byB0aW1lIHB1Ymxpc2ggYSByZXZpc2VkIGFuZC9vciBuZXcKK3ZlcnNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgKGVhY2ggc3VjaCByZXZpc2VkIG9yIG5ldyB2ZXJzaW9uIHNoYWxsIGNhcnJ5IGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIpIHdoaWNoCitzaGFsbCBnb3Zlcm4gIGFsbCBjb3BpZXMgb2YgTGljZW5zZWQgU29mdHdhcmUgZG93bmxvYWRlZCBhZnRlciB0aGUgcG9zdGluZyBvZiBzdWNoIHJldmlzZWQgb3IgbmV3IHZlcnNpb24gb2YgdGhpcworQWdyZWVtZW50LgorCisxMi4wICBNSVNDRUxMQU5FT1VTLgorVGhpcyBBZ3JlZW1lbnQgc2V0cyBmb3J0aCB0aGUgZW50aXJlIGFncmVlbWVudCBhbmQgdW5kZXJzdGFuZGluZyBiZXR3ZWVuIHRoZSBwYXJ0aWVzCithcyB0byB0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mIGFuZCBtZXJnZXMgYWxsIHByaW9yIGRpc2N1c3Npb25zIGJldHdlZW4gdGhlbS4gVGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgZ292ZXJuZWQgYnkKK3RoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBOZXcgWW9yaywgVVNBLCBleGNsdWRpbmcgaXRzIGNvbmZsaWN0IG9mIGxhdyBwcm92aXNpb25zLiAgVGhlIGFwcGxpY2F0aW9uIG9mIHRoZSBVbml0ZWQKK05hdGlvbnMgQ29udmVudGlvbiBvZiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLgorWU9VUiBET1dOTE9BRCwgSU5TVEFMTEFUSU9OIEFORCBVU0UsIE1PRElGSUNBVElPTiBPUiBESVNUUklCVVRJT04gT0YgVEhFIExJQ0VOU0VEIFNPRlRXQVJFIElTCitFWFBSRVNTTFkgTUFERSBDT05ESVRJT05BTCBPTiBZT1VSIEFTU0VOVCBUTyBUSEUgVEVSTVMgU0VUIEZPUlRIIEhFUkVJTi4gWW91IGZ1cnRoZXIKK2FncmVlIGFuZCBhY2tub3dsZWRnZSB0aGF0IGJ5IGNsaWNraW5nIG9uIHRoZSAiQUNDRVBUIiBidXR0b24gYmVsb3csIFlvdSBzaGFsbCBoYXZlIG1hbmlmZXN0ZWQgYWNjZXB0YW5jZSB0bworZW50ZXIgaW50byB0aGlzIEFncmVlbWVudCBhbmQgc2hhbGwgYmUgZGVlbWVkIHRvIGhhdmUgbWFudWFsbHkgc2lnbmVkIGFuZCBleGVjdXRlZCB0aGlzIEFncmVlbWVudCBtYWtpbmcgdGhpcyBhbgorZW5mb3JjZWFibGUgQWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMuICBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgc3VjaAorcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4KK1lPVSBBQ0tOT1dMRURHRSBUSEFUIFlPVSBIQVZFIFJFQUQgVEhJUyBBR1JFRU1FTlQgQU5EIFVOREVSU1RBTkQgSVQsIEFORCBUSEFUCitCWSBDTElDS0lORyBPTiBUSEUgIkFDQ0VQVCIgQlVUVE9OIEJFTE9XIEFORCBJTlNUQUxMSU5HL0RPV05MT0FESU5HIFRIRQorU09GVFdBUkUgWU9VIEFDQ0VQVCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5ULgorCitTUElOIFNvZnR3YXJlIFB1YmxpYyBMaWNlbnNlICIgVmVyc2lvbiAxLjAgIiAwNS8xNS8wMQpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvc3Bpbi1lZHVjYXRpb25hbCBiL2xpY2Vuc2VzL3NwaW4tZWR1Y2F0aW9uYWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2MzNWJiOAotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL3NwaW4tZWR1Y2F0aW9uYWwKQEAgLTAsMCArMSw1IEBACitDb3B5cmlnaHQgKGMpIDE5ODktMjAwMyBieSBMdWNlbnQgVGVjaG5vbG9naWVzLCBCZWxsIExhYm9yYXRvcmllcy4KK0FsbCBSaWdodHMgUmVzZXJ2ZWQuICBUaGlzIHNvZnR3YXJlIGlzIGZvciBlZHVjYXRpb25hbCBwdXJwb3NlcyBvbmx5LgorTm8gZ3VhcmFudGVlIHdoYXRzb2V2ZXIgaXMgZXhwcmVzc2VkIG9yIGltcGxpZWQgYnkgdGhlIGRpc3RyaWJ1dGlvbiBvZgordGhpcyBjb2RlLiAgUGVybWlzc2lvbiBpcyBnaXZlbiB0byBkaXN0cmlidXRlIHRoaXMgY29kZSBwcm92aWRlZCB0aGF0Cit0aGlzIGludHJvZHVjdG9yeSBtZXNzYWdlIGlzIG5vdCByZW1vdmVkIGFuZCBubyBtb25pZXMgYXJlIGV4Y2hhbmdlZC4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL3N0YWRlbiBiL2xpY2Vuc2VzL3N0YWRlbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmU3NzI5Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvc3RhZGVuCkBAIC0wLDAgKzEsNzYgQEAKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1RoZSBTdGFkZW4gUGFja2FnZQorCitDb3B5cmlnaHQgKGMpIDIwMDMgTUVESUNBTCBSRVNFQVJDSCBDT1VOQ0lMCitBbGwgcmlnaHRzIHJlc2VydmVkCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCAKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorCisgICAuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgCit0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorCisgICAuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgCit0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIAorYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAgIC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgTUVESUNBTCBSRVNFQVJDSCBDT1VOQ0lMLCBUSEUgTEFCT1JBVE9SWSBPRiAKK01PTEVDVUxBUiBCSU9MT0dZIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIAorcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gCitwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgCitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIAorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiAKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgCitMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIAorU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK1BvcnRpb25zIG9mIHRoaXMgY29kZSBoYXZlIGJlZW4gbW9kaWZpZWQgYnkgdGhlIFdlbGxjb21lIFRydXN0IFNhbmdlcgorSW5zdGl0dXRlIChHZW5vbWUgUmVzZWFyY2ggTGltaXRlZCkuIEluIHNvbWUgY2FzZXMgZW50aXJlbHkgbmV3Citwcm9ncmFtcyBhbmQvb3Igc291cmNlIGZpbGVzIGhhdmUgYmVlbiBjcmVhdGVkLiBUaGVzZSBhcmUgbGljZW5jZWQKK3VuZGVyIGVzc2VudGlhbGx5IHRoZSBzYW1lIGNvbmRpdGlvbnMgYXMgdGhlIE1SQyBjb2RlICh3aXRoIGp1c3QgbmFtZQorY2hhbmdlcykuCisKK1RoZSBmb2xsb3dpbmcgbGljZW5jZSBvbmx5IGFwcGxpZXMgdG8gZmlsZXMgYmVhcmluZyB0aGUgR2Vub21lCitSZXNlYXJjaCBMaW1pdGVkIGNvcHlyaWdodCBub3RpY2U6CisKKworCitDb3B5cmlnaHQgKGMpIDIwMDQgR0VOT01FIFJFU0VBUkNIIExJTUlURUQKK0FsbCByaWdodHMgcmVzZXJ2ZWQKKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0IAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisKKyAgIC4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKK3RoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisKKyAgIC4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCAKK3RoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gCithbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworICAgLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBHRU5PTUUgUkVTRUFSQ0ggTElNSVRFRCwgdGhlIFdFTExDT01FIFRSVVNUCitTQU5HRVIgSU5TVElUVVRFIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIAorcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gCitwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgCitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIAorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiAKK0FOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgCitMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gCitBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAKKyhJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIAorU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9saWNlbnNlcy9zdGFyZG9jay1pbWFnZXMgYi9saWNlbnNlcy9zdGFyZG9jay1pbWFnZXMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGIzNWRkMgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL3N0YXJkb2NrLWltYWdlcwpAQCAtMCwwICsxLDI0IEBACitUaGVzZSB3ZWF0aGVyIGltYWdlcyBhcmUgKGMpIDIwMDMgYnkgU3RhcmRvY2sgQ29ycG9yYXRpb24uICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitQZXJtaXNzaW9uOgorU3RhcmRvY2sgZ2l2ZXMgeW91IHBlcm1pc3Npb24gdG8gZGlzdHJpYnV0ZSB0aGVzZSBpbWFnZXMgYW5kIG9yIGljb25zIGZyZWVseSBhcworbG9uZyBhcyB0aGlzIHBlcm1pc3Npb24gZG9jdW1lbnQgaXMgaW5jbHVkZWQuCisKK0FsbG93ZWQgVXNlczoKK1lvdSBtYXkgdXNlIHRoZXNlIGltYWdlcyB3aXRoIGFueSBTdGFyZG9jayByZWxhdGVkIHByb2R1Y3QgKHN1Y2ggYXMgY3JlYXRpbmcgRGVza3RvcFgKK29iamVjdHMgb3IgT2JqZWN0RG9jayBvciBwbHVnaW5zKS4KKworSW4gYWRkaXRpb24sIFN0YXJkb2NrIGxpY2Vuc2VzIHRoaXMgZm9yIHVzZSB3aXRoIGNvbnRlbnQgdGhhdCBpcyBwcm92aWRlZCBmcmVlIG9mIGNoYXJnZQorYW5kIGlzIG5vdCBjb25uZWN0ZWQgdG8gYSBjb21tZXJjaWFsIHNvZnR3YXJlIHByb2R1Y3QuIFlvdSBtYXkgdXNlIHRoZXNlIGltYWdlcyBmb3Igc2tpbnMsCit0aGVtZXMsIGFuZCBvdGhlciBjb250ZW50IGZvciBmcmVld2FyZSBzb2Z0d2FyZSBldmVuIGlmIGl0IGlzIGNvbXBldGl0aXZlIGluIG5hdHVyZSB3aXRoCitTdGFyZG9jaydzIG9mZmVyaW5ncyBhcyBsb25nIGFzIHRoZSBjb3B5cmlnaHQgbm90aWNlcyBhcmUgaW5jbHVkZWQuIFlvdSBtYXkgbm90LCBob3dldmVyLAorYnVuZGxlIHRoZXNlIGltYWdlcyBpbiBhbnkgd2F5IHdpdGggYW55IHNvZnR3YXJlIHByb2R1Y3Qgd2l0aG91dCBTdGFyZG9jaydzIGV4cHJlc3MgcGVybWlzc2lvbi4KKworWW91IG1heSB1c2UgdGhlc2UgaW1hZ2VzIGluIHlvdXIgd2Vic2l0ZSBvciBwcm9kdWN0IGFzIGxvbmcgYXMgdGhpcyBwZXJtaXNzaW9uLnR4dCBpcyBsaW5rZWQKK3NvbWV3aGVyZSBhbG9uZyB3aXRoIFN0YXJkb2NrJ3MgY29weXJpZ2h0IG5vdGljZSB3aXRoIGEgbGluayB0byBTdGFyZG9jaydzIGhvbWVwYWdlOiBodHRwOi8vd3d3LnN0YXJkb2NrLmNvbS4KKworRGVzaWduZWQgVXNlOgorVGhlc2Ugd2VhdGhlciBpbWFnZXMgYXJlIGRlc2lnbmVkIHRvIHByb3ZpZGUgdGhlIHZhcmlvdXMgd2VhdGhlciBjb25kaXRpb25zIHJlcG9ydGVkCitieSB3ZWF0aGVyIHNlcnZpY2VzLiBJdCB3YXMgY3JlYXRlZCBmb3IgdXNlIHdpdGggU3RhcmRvY2sgRGVza3RvcFggKGh0dHA6Ly93d3cuZGVza3RvcHgubmV0KQorYW5kIFN0YXJkb2NrIE9iamVjdERvY2sgKGh0dHA6Ly93d3cub2JqZWN0ZG9jay5jb20pIGJvdGggb2Ygd2hpY2ggYWxsb3cgdXNlcnMgdG8gbW9uaXRvciB0aGUKK3dlYXRoZXIgY29uZGl0aW9ucyBmcm9tIHRoZWlyIGRlc2t0b3AuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9zdW4tYmNsYS1qMmVlLWRlcGxveW1lbnQgYi9saWNlbnNlcy9zdW4tYmNsYS1qMmVlLWRlcGxveW1lbnQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ0NTQzZAotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL3N1bi1iY2xhLWoyZWUtZGVwbG95bWVudApAQCAtMCwwICsxLDE5OSBAQAorU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiAKK0JpbmFyeSBDb2RlIExpY2Vuc2UgQWdyZWVtZW50CisKK1JFQUQgVEhFIFRFUk1TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBBTlkgUFJPVklERUQgU1VQUExFTUVOCitUQUwgTElDRU5TRSBURVJNUyAoQ09MTEVDVElWRUxZICJBR1JFRU1FTlQiKSBDQVJFRlVMTFkgQkVGTworUkUgT1BFTklORyBUSEUgU09GVFdBUkUgTUVESUEgUEFDS0FHRS4gIEJZIE9QRU5JTkcgVEhFIFNPRlQKK1dBUkUgTUVESUEgUEFDS0FHRSwgWU9VIEFHUkVFIFRPIFRIRSBURVJNUyBPRiBUSElTIEFHUkVFTUVOCitULiAgSUYgWU9VIEFSRSBBQ0NFU1NJTkcgVEhFIFNPRlRXQVJFIEVMRUNUUk9OSUNBTExZLCBJTkRJQworQVRFIFlPVVIgQUNDRVBUQU5DRSBPRiBUSEVTRSBURVJNUyBCWSBTRUxFQ1RJTkcgVEhFICJBQ0NFUFQKKyIgQlVUVE9OIEFUIFRIRSBFTkQgT0YgVEhJUyBBR1JFRU1FTlQuICBJRiBZT1UgRE8gTk9UIEFHUkVFCisgVE8gQUxMIFRIRVNFIFRFUk1TLCBQUk9NUFRMWSBSRVRVUk4gVEhFIFVOVVNFRCBTT0ZUV0FSRSBUTworIFlPVVIgUExBQ0UgT0YgUFVSQ0hBU0UgRk9SIEEgUkVGVU5EIE9SLCBJRiBUSEUgU09GVFdBUkUgSVMKKyBBQ0NFU1NFRCBFTEVDVFJPTklDQUxMWSwgU0VMRUNUIFRIRSAiREVDTElORSIgQlVUVE9OIEFUIFRICitFIEVORCBPRiBUSElTIEFHUkVFTUVOVC4gCisKKzEuICBMSUNFTlNFIFRPIFVTRS4gIFN1biBncmFudHMgeW91IGEgbm9uLWV4Y2x1c2l2ZSBhbmQgbm9uCistdHJhbnNmZXJhYmxlIGxpY2Vuc2UgZm9yIHRoZSBpbnRlcm5hbCB1c2Ugb25seSBvZiB0aGUgYWNjbworbXBhbnlpbmcgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24gYW5kIGFueSBlcnJvciBjb3JyZWN0aW8KK25zIHByb3ZpZGVkIGJ5IFN1biAoY29sbGVjdGl2ZWx5ICJTb2Z0d2FyZSIpLCBieSB0aGUgbnVtYmVyCisgb2YgdXNlcnMgYW5kIHRoZSBjbGFzcyBvZiBjb21wdXRlciBoYXJkd2FyZSBmb3Igd2hpY2ggdGhlIAorY29ycmVzcG9uZGluZyBmZWUgaGFzIGJlZW4gcGFpZC4gCisKKzIuICBSRVNUUklDVElPTlMuICBTb2Z0d2FyZSBpcyBjb25maWRlbnRpYWwgYW5kIGNvcHlyaWdodGVkCisuIFRpdGxlIHRvIFNvZnR3YXJlIGFuZCBhbGwgYXNzb2NpYXRlZCBpbnRlbGxlY3R1YWwgcHJvcGVydAoreSByaWdodHMgaXMgcmV0YWluZWQgYnkgU3VuIGFuZC9vciBpdHMgbGljZW5zb3JzLiAgRXhjZXB0IGEKK3Mgc3BlY2lmaWNhbGx5IGF1dGhvcml6ZWQgaW4gYW55IFN1cHBsZW1lbnRhbCBMaWNlbnNlIFRlcm1zCissIHlvdSBtYXkgbm90IG1ha2UgY29waWVzIG9mIFNvZnR3YXJlLCBvdGhlciB0aGFuIGEgc2luZ2xlIAorY29weSBvZiBTb2Z0d2FyZSBmb3IgYXJjaGl2YWwgcHVycG9zZXMuICBVbmxlc3MgZW5mb3JjZW1lbnQKKyBpcyBwcm9oaWJpdGVkIGJ5IGFwcGxpY2FibGUgbGF3LCB5b3UgbWF5IG5vdCBtb2RpZnksIGRlY29tCitwaWxlLCBvciByZXZlcnNlIGVuZ2luZWVyIFNvZnR3YXJlLiAgTGljZW5zZWUgYWNrbm93bGVkZ2VzIAordGhhdCBMaWNlbnNlZCBTb2Z0d2FyZSBpcyBub3QgZGVzaWduZWQgb3IgaW50ZW5kZWQgZm9yIHVzZSAKK2luIHRoZSBkZXNpZ24sIGNvbnN0cnVjdGlvbiwgb3BlcmF0aW9uIG9yIG1haW50ZW5hbmNlIG9mIGFuCit5IG51Y2xlYXIgZmFjaWxpdHkuIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gZGlzY2xhaW1zIGFueSBleAorcHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eSBvZiBmaXRuZXNzIGZvciBzdWNoIHVzZXMuICAgTm8gcmkKK2dodCwgdGl0bGUgb3IgaW50ZXJlc3QgaW4gb3IgdG8gYW55IHRyYWRlbWFyaywgc2VydmljZSBtYXJrCissIGxvZ28gb3IgdHJhZGUgbmFtZSBvZiBTdW4gb3IgaXRzIGxpY2Vuc29ycyBpcyBncmFudGVkIHVuZAorZXIgdGhpcyBBZ3JlZW1lbnQuIAorCiszLiAgTElNSVRFRCBXQVJSQU5UWS4gIFN1biB3YXJyYW50cyB0byB5b3UgdGhhdCBmb3IgYSBwZXJpbworZCBvZiBuaW5ldHkgKDkwKSBkYXlzIGZyb20gdGhlIGRhdGUgb2YgcHVyY2hhc2UsIGFzIGV2aWRlbmMKK2VkIGJ5IGEgY29weSBvZiB0aGUgcmVjZWlwdCwgdGhlIG1lZGlhIG9uIHdoaWNoIFNvZnR3YXJlIGlzCisgZnVybmlzaGVkIChpZiBhbnkpIHdpbGwgYmUgZnJlZSBvZiBkZWZlY3RzIGluIG1hdGVyaWFscyBhbgorZCB3b3JrbWFuc2hpcCB1bmRlciBub3JtYWwgdXNlLiAgRXhjZXB0IGZvciB0aGUgZm9yZWdvaW5nLCAKK1NvZnR3YXJlIGlzIHByb3ZpZGVkICJBUyBJUyIuICBZb3VyIGV4Y2x1c2l2ZSByZW1lZHkgYW5kIFN1CituJ3MgZW50aXJlIGxpYWJpbGl0eSB1bmRlciB0aGlzIGxpbWl0ZWQgd2FycmFudHkgd2lsbCBiZSBhdAorIFN1bidzIG9wdGlvbiB0byByZXBsYWNlIFNvZnR3YXJlIG1lZGlhIG9yIHJlZnVuZCB0aGUgZmVlIHAKK2FpZCBmb3IgU29mdHdhcmUuIAorCis0LiAgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS4gIFVOTEVTUyBTUEVDSUZJRUQgSU4gVEhJUyBBR1JFRQorTUVOVCwgQUxMIEVYUFJFU1MgT1IgSU1QTElFRCBDT05ESVRJT05TLCBSRVBSRVNFTlRBVElPTlMgQU4KK0QgV0FSUkFOVElFUywgSU5DTFVESU5HIEFOWSBJTVBMSUVEIFdBUlJBTlRZIE9GIE1FUkNIQU5UQUJJCitMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tSU5GUklOR0VNRU5UIAorQVJFIERJU0NMQUlNRUQsIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFRIQVQgVEhFU0UgRElTQ0xBSU1FUlMKKyBBUkUgSEVMRCBUTyBCRSBMRUdBTExZIElOVkFMSUQuIAorCis1LiAgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuICBUTyBUSEUgRVhURU5UIE5PVCBQUk9ISUJJVEVEIAorQlkgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIFNVTiBPUiBJVFMgTElDRU5TT1JTIEJFIExJQUJMRSBGT1IKKyBBTlkgTE9TVCBSRVZFTlVFLCBQUk9GSVQgT1IgREFUQSwgT1IgRk9SIFNQRUNJQUwsIElORElSRUNUCissIENPTlNFUVVFTlRJQUwsIElOQ0lERU5UQUwgT1IgUFVOSVRJVkUgREFNQUdFUywgSE9XRVZFUiBDQQorVVNFRCBSRUdBUkRMRVNTIE9GIFRIRSBUSEVPUlkgT0YgTElBQklMSVRZLCBBUklTSU5HIE9VVCBPRiAKK09SIFJFTEFURUQgVE8gVEhFIFVTRSBPRiBPUiBJTkFCSUxJVFkgVE8gVVNFIFNPRlRXQVJFLCBFVkVOCisgSUYgU1VOIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUworLiAgSW4gbm8gZXZlbnQgd2lsbCBTdW4ncyBsaWFiaWxpdHkgdG8geW91LCB3aGV0aGVyIGluIGNvbnQKK3JhY3QsIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgb3Igb3RoZXJ3aXNlLCBleGNlZWQgdGhlCisgYW1vdW50IHBhaWQgYnkgeW91IGZvciBTb2Z0d2FyZSB1bmRlciB0aGlzIEFncmVlbWVudC4gIFRoZQorIGZvcmVnb2luZyBsaW1pdGF0aW9ucyB3aWxsIGFwcGx5IGV2ZW4gaWYgdGhlIGFib3ZlIHN0YXRlZCAKK3dhcnJhbnR5IGZhaWxzIG9mIGl0cyBlc3NlbnRpYWwgcHVycG9zZS4gCisKKzYuICBUZXJtaW5hdGlvbi4gIFRoaXMgQWdyZWVtZW50IGlzIGVmZmVjdGl2ZSB1bnRpbCB0ZXJtaW5hCit0ZWQuICBZb3UgbWF5IHRlcm1pbmF0ZSB0aGlzIEFncmVlbWVudCBhdCBhbnkgdGltZSBieSBkZXN0cgorb3lpbmcgYWxsIGNvcGllcyBvZiBTb2Z0d2FyZS4gIFRoaXMgQWdyZWVtZW50IHdpbGwgdGVybWluYXQKK2UgaW1tZWRpYXRlbHkgd2l0aG91dCBub3RpY2UgZnJvbSBTdW4gaWYgeW91IGZhaWwgdG8gY29tcGx5Cisgd2l0aCBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50LiAgVXBvbiBUZXJtaW5hdGlvbiwgeQorb3UgbXVzdCBkZXN0cm95IGFsbCBjb3BpZXMgb2YgU29mdHdhcmUuIAorCis3LiAgRXhwb3J0IFJlZ3VsYXRpb25zLiBBbGwgU29mdHdhcmUgYW5kIHRlY2huaWNhbCBkYXRhIGRlbAoraXZlcmVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSBzdWJqZWN0IHRvIFVTIGV4cG9ydCBjb250cm8KK2wgbGF3cyBhbmQgbWF5IGJlIHN1YmplY3QgdG8gZXhwb3J0IG9yIGltcG9ydCByZWd1bGF0aW9ucyBpCituIG90aGVyIGNvdW50cmllcy4gIFlvdSBhZ3JlZSB0byBjb21wbHkgc3RyaWN0bHkgd2l0aCBhbGwgcwordWNoIGxhd3MgYW5kIHJlZ3VsYXRpb25zIGFuZCBhY2tub3dsZWRnZSB0aGF0IHlvdSBoYXZlIHRoZSAKK3Jlc3BvbnNpYmlsaXR5IHRvIG9idGFpbiBzdWNoIGxpY2Vuc2VzIHRvIGV4cG9ydCwgcmUtZXhwb3J0CissIG9yIGltcG9ydCBhcyBtYXkgYmUgcmVxdWlyZWQgYWZ0ZXIgZGVsaXZlcnkgdG8geW91LiAKKworOC4gIFUuUy4gR292ZXJubWVudCBSZXN0cmljdGVkIFJpZ2h0cy4gIElmIFNvZnR3YXJlIGlzIGJlaW4KK2cgYWNxdWlyZWQgYnkgb3Igb24gYmVoYWxmIG9mIHRoZSBVLlMuIEdvdmVybm1lbnQgb3IgYnkgYSBVCisuUy4gR292ZXJubWVudCBwcmltZSBjb250cmFjdG9yIG9yIHN1YmNvbnRyYWN0b3IgKGF0IGFueSB0aQorZXIpLCB0aGVuIHRoZSBHb3Zlcm5tZW50J3MgcmlnaHRzIGluIFNvZnR3YXJlIGFuZCBhY2NvbXBhbnkKK2luZyBkb2N1bWVudGF0aW9uIHdpbGwgYmUgb25seSBhcyBzZXQgZm9ydGggaW4gdGhpcyBBZ3JlZW1lCitudDsgdGhpcyBpcyBpbiBhY2NvcmRhbmNlIHdpdGggNDggQ0ZSIDIyNy43MjAxIHRocm91Z2ggMjI3LgorNzIwMi00IChmb3IgRGVwYXJ0bWVudCBvZiBEZWZlbnNlIChET0QpIGFjcXVpc2l0aW9ucykgYW5kIHcKK2l0aCA0OCBDRlIgMi4xMDEgYW5kIDEyLjIxMiAoZm9yIG5vbi1ET0QgYWNxdWlzaXRpb25zKS4gCisKKzkuICBHb3Zlcm5pbmcgTGF3LiAgQW55IGFjdGlvbiByZWxhdGVkIHRvIHRoaXMgQWdyZWVtZW50IHdpCitsbCBiZSBnb3Zlcm5lZCBieSBDYWxpZm9ybmlhIGxhdyBhbmQgY29udHJvbGxpbmcgVS5TLiBmZWRlcgorYWwgbGF3LiAgTm8gY2hvaWNlIG9mIGxhdyBydWxlcyBvZiBhbnkganVyaXNkaWN0aW9uIHdpbGwgYXAKK3BseS4gCisKKzEwLiBTZXZlcmFiaWxpdHkuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaGVsCitkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHRoaXMgQWdyZWVtZW50IHdpbGwgcmVtYWluIGluIGVmZmVjdAorIHdpdGggdGhlIHByb3Zpc2lvbiBvbWl0dGVkLCB1bmxlc3Mgb21pc3Npb24gd291bGQgZnJ1c3RyYXQKK2UgdGhlIGludGVudCBvZiB0aGUgcGFydGllcywgaW4gd2hpY2ggY2FzZSB0aGlzIEFncmVlbWVudCB3CitpbGwgaW1tZWRpYXRlbHkgdGVybWluYXRlLiAKKworMTEuIEludGVncmF0aW9uLiAgVGhpcyBBZ3JlZW1lbnQgaXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmUKK3R3ZWVuIHlvdSBhbmQgU3VuIHJlbGF0aW5nIHRvIGl0cyBzdWJqZWN0IG1hdHRlci4gIEl0IHN1cGVyCitzZWRlcyBhbGwgcHJpb3Igb3IgY29udGVtcG9yYW5lb3VzIG9yYWwgb3Igd3JpdHRlbiBjb21tdW5pYworYXRpb25zLCBwcm9wb3NhbHMsIHJlcHJlc2VudGF0aW9ucyBhbmQgd2FycmFudGllcyBhbmQgcHJldmEKK2lscyBvdmVyIGFueSBjb25mbGljdGluZyBvciBhZGRpdGlvbmFsIHRlcm1zIG9mIGFueSBxdW90ZSwgCitvcmRlciwgYWNrbm93bGVkZ21lbnQsIG9yIG90aGVyIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgcAorYXJ0aWVzIHJlbGF0aW5nIHRvIGl0cyBzdWJqZWN0IG1hdHRlciBkdXJpbmcgdGhlIHRlcm0gb2YgdGgKK2lzIEFncmVlbWVudC4gIE5vIG1vZGlmaWNhdGlvbiBvZiB0aGlzIEFncmVlbWVudCB3aWxsIGJlIGJpCituZGluZywgdW5sZXNzIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSBhbiBhdXRob3JpemVkIHJlcHJlcworZW50YXRpdmUgb2YgZWFjaCBwYXJ0eS4gCisKK0pBVkEoVE0pIElOVEVSRkFDRSBDTEFTU0VTIAorSjJFRShUTSkgREVQTE9ZTUVOVCBTUEVDSUZJQ0FUSU9OIElOVEVSRkFDRSBDTEFTU0VTIDEuMQorU1VQUExFTUVOVEFMIExJQ0VOU0UgVEVSTVMKKworVGhlc2Ugc3VwcGxlbWVudGFsIGxpY2Vuc2UgdGVybXMgKCJTdXBwbGVtZW50YWwgVGVybXMiKSBhZGQKKyB0byBvciBtb2RpZnkgdGhlIHRlcm1zIG9mIHRoZSBCaW5hcnkgQ29kZSBMaWNlbnNlIEFncmVlbWVuCit0IChjb2xsZWN0aXZlbHksIHRoZSAiQWdyZWVtZW50IikuIENhcGl0YWxpemVkIHRlcm1zIG5vdCBkZQorZmluZWQgaW4gdGhlc2UgU3VwcGxlbWVudGFsIFRlcm1zIHNoYWxsIGhhdmUgdGhlIHNhbWUgbWVhbmkKK25ncyBhc2NyaWJlZCB0byB0aGVtIGluIHRoZSBBZ3JlZW1lbnQuIFRoZXNlIFN1cHBsZW1lbnRhbCBUCitlcm1zIHNoYWxsIHN1cGVyc2VkZSBhbnkgaW5jb25zaXN0ZW50IG9yIGNvbmZsaWN0aW5nIHRlcm1zIAoraW4gdGhlIEFncmVlbWVudCwgb3IgaW4gYW55IGxpY2Vuc2UgY29udGFpbmVkIHdpdGhpbiB0aGUgU28KK2Z0d2FyZS4gCisKKzEuIFNvZnR3YXJlIEludGVybmFsIFVzZSBhbmQgRGV2ZWxvcG1lbnQgTGljZW5zZSBHcmFudC4gU3ViCitqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCwgaW5jbHVkaQorbmcsIGJ1dCBub3QgbGltaXRlZCB0byBTZWN0aW9uIDMgKEphdmEoVE0pIFRlY2hub2xvZ3kgUmVzdHIKK2ljdGlvbnMpIG9mIHRoZXNlIFN1cHBsZW1lbnRhbCBUZXJtcywgU3VuIGdyYW50cyB5b3UgYSBub24tCitleGNsdXNpdmUsIG5vbi10cmFuc2ZlcmFibGUsIGxpbWl0ZWQgbGljZW5zZSB0byByZXByb2R1Y2UgaQorbnRlcm5hbGx5IGFuZCB1c2UgaW50ZXJuYWxseSB0aGUgYmluYXJ5IGZvcm0gb2YgdGhlIFNvZnR3YXIKK2UsIGNvbXBsZXRlIGFuZCB1bm1vZGlmaWVkLCBmb3IgdGhlIHNvbGUgcHVycG9zZSBvZiBkZXNpZ25pCituZywgZGV2ZWxvcGluZyBhbmQgdGVzdGluZyB5b3VyIEphdmEgYXBwbGV0cyBhbmQgYXBwbGljYXRpbworbnMgKCJQcm9ncmFtcyIpLiAKKworMi4gTGljZW5zZSB0byBEaXN0cmlidXRlIFNvZnR3YXJlLiAgSW4gYWRkaXRpb24gdG8gdGhlIGxpY2UKK25zZSBncmFudGVkIGluIFNlY3Rpb24gMSAoU29mdHdhcmUgSW50ZXJuYWwgVXNlIGFuZCBEZXZlbG9wCittZW50IExpY2Vuc2UgR3JhbnQpIG9mIHRoZXNlIFN1cHBsZW1lbnRhbCBUZXJtcywgc3ViamVjdCB0bworIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGJ1dCAKK25vdCBsaW1pdGVkIHRvIFNlY3Rpb24gMyAoSmF2YSBUZWNobm9sb2d5IFJlc3RyaWN0aW9ucyksIFN1CituIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlLCBub24tdHJhbnNmZXJhYmxlLCBsaW1pdGVkIGxpYworZW5zZSB0byByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGluIGJpbmFyeSBmb3IKK20gb25seSwgcHJvdmlkZWQgdGhhdCB5b3UgKGkpIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGNvbXBsCitldGUgYW5kIHVubW9kaWZpZWQgYW5kIG9ubHkgYnVuZGxlZCBhcyBwYXJ0IG9mIHlvdXIgUHJvZ3JhbQorcywgKGlpKSBkbyBub3QgZGlzdHJpYnV0ZSBhZGRpdGlvbmFsIHNvZnR3YXJlIGludGVuZGVkIHRvIHIKK2VwbGFjZSBhbnkgY29tcG9uZW50KHMpIG9mIHRoZSBTb2Z0d2FyZSwgKGlpaSkgZG8gbm90IHJlbW92CitlIG9yIGFsdGVyIGFueSBwcm9wcmlldGFyeSBsZWdlbmRzIG9yIG5vdGljZXMgY29udGFpbmVkIGluIAordGhlIFNvZnR3YXJlLCAoaXYpIG9ubHkgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgc3ViamVjdCB0byAKK2EgbGljZW5zZSBhZ3JlZW1lbnQgdGhhdCBwcm90ZWN0cyBTdW4ncyBpbnRlcmVzdHMgY29uc2lzdGVuCit0IHdpdGggdGhlIHRlcm1zIGNvbnRhaW5lZCBpbiB0aGlzIEFncmVlbWVudCwgYW5kICh2KSBhZ3JlZQorIHRvIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IFN1biBhbmQgaXRzIGxpY2Vuc29ycyBmcm9tIGFuZCBhZ2EKK2luc3QgYW55IGRhbWFnZXMsIGNvc3RzLCBsaWFiaWxpdGllcywgc2V0dGxlbWVudCBhbW91bnRzIGFuCitkL29yIGV4cGVuc2VzIChpbmNsdWRpbmcgYXR0b3JuZXlzJyBmZWVzKSBpbmN1cnJlZCBpbiBjb25uZQorY3Rpb24gd2l0aCBhbnkgY2xhaW0sIGxhd3N1aXQgb3IgYWN0aW9uIGJ5IGFueSB0aGlyZCBwYXJ0eSAKK3RoYXQgYXJpc2VzIG9yIHJlc3VsdHMgZnJvbSB0aGUgdXNlIG9yIGRpc3RyaWJ1dGlvbiBvZiBhbnkgCithbmQgYWxsIFByb2dyYW1zIGFuZC9vciBTb2Z0d2FyZS4gCisKKzMuIEphdmEgVGVjaG5vbG9neSBSZXN0cmljdGlvbnMuIFlvdSBtYXkgbm90IG1vZGlmeSB0aGUgSmF2CithIFBsYXRmb3JtIEludGVyZmFjZSAoIkpQSSIsIGlkZW50aWZpZWQgYXMgY2xhc3NlcyBjb250YWluZQorZCB3aXRoaW4gdGhlICJqYXZhIiBwYWNrYWdlIG9yIGFueSBzdWJwYWNrYWdlcyBvZiB0aGUgImphdmEKKyIgcGFja2FnZSksIGJ5IGNyZWF0aW5nIGFkZGl0aW9uYWwgY2xhc3NlcyB3aXRoaW4gdGhlIEpQSSBvCityIG90aGVyd2lzZSBjYXVzaW5nIHRoZSBhZGRpdGlvbiB0byBvciBtb2RpZmljYXRpb24gb2YgdGhlIAorY2xhc3NlcyBpbiB0aGUgSlBJLiAgSW4gdGhlIGV2ZW50IHRoYXQgeW91IGNyZWF0ZSBhbiBhZGRpdGkKK29uYWwgY2xhc3MgYW5kIGFzc29jaWF0ZWQgQVBJKHMpIHdoaWNoIChpKSBleHRlbmRzIHRoZSBmdW5jCit0aW9uYWxpdHkgb2YgdGhlIEphdmEgUGxhdGZvcm0sIGFuZCAoaWkpIGlzIGV4cG9zZWQgdG8gdGhpcgorZCBwYXJ0eSBzb2Z0d2FyZSBkZXZlbG9wZXJzIGZvciB0aGUgcHVycG9zZSBvZiBkZXZlbG9waW5nIGEKK2RkaXRpb25hbCBzb2Z0d2FyZSB3aGljaCBpbnZva2VzIHN1Y2ggYWRkaXRpb25hbCBBUEksIHlvdSBtCit1c3QgcHJvbXB0bHkgcHVibGlzaCBicm9hZGx5IGFuIGFjY3VyYXRlIHNwZWNpZmljYXRpb24gZm9yIAorc3VjaCBBUEkgZm9yIGZyZWUgdXNlIGJ5IGFsbCBkZXZlbG9wZXJzLiBZb3UgbWF5IG5vdCBjcmVhdGUKKywgb3IgYXV0aG9yaXplIHlvdXIgbGljZW5zZWVzIHRvIGNyZWF0ZSBhZGRpdGlvbmFsIGNsYXNzZXMsCisgaW50ZXJmYWNlcywgb3Igc3VicGFja2FnZXMgdGhhdCBhcmUgaW4gYW55IHdheSBpZGVudGlmaWVkIAorYXMgImphdmEiLCAiamF2YXgiLCAic3VuIiBvciBzaW1pbGFyIGNvbnZlbnRpb24gYXMgc3BlY2lmaWUKK2QgYnkgU3VuIGluIGFueSBuYW1pbmcgY29udmVudGlvbiBkZXNpZ25hdGlvbi4gCisKKzQuIFRyYWRlbWFya3MgYW5kIExvZ29zLiBZb3UgYWNrbm93bGVkZ2UgYW5kIGFncmVlIGFzIGJldHdlCitlbiB5b3UgYW5kIFN1biB0aGF0IFN1biBvd25zIHRoZSBTVU4sIFNPTEFSSVMsIEpBVkEsIEpJTkksIAorRk9SVEUsIGFuZCBpUExBTkVUIHRyYWRlbWFya3MgYW5kIGFsbCBTVU4sIFNPTEFSSVMsIEpBVkEsIEoKK0lOSSwgRk9SVEUsIGFuZCBpUExBTkVULXJlbGF0ZWQgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgCitsb2dvcyBhbmQgb3RoZXIgYnJhbmQgZGVzaWduYXRpb25zICgiU3VuIE1hcmtzIiksIGFuZCB5b3UgYQorZ3JlZSB0byBjb21wbHkgd2l0aCB0aGUgU3VuIFRyYWRlbWFyayBhbmQgTG9nbyBVc2FnZSBSZXF1aXIKK2VtZW50cyBjdXJyZW50bHkgbG9jYXRlZCBhdCBodHRwOi8vd3d3LnN1bi5jb20vcG9saWNpZXMvdHJhCitkZW1hcmtzLiBBbnkgdXNlIHlvdSBtYWtlIG9mIHRoZSBTdW4gTWFya3MgaW51cmVzIHRvIFN1bidzIAorYmVuZWZpdC4gCisKKzUuIFNvdXJjZSBDb2RlLiBTb2Z0d2FyZSBtYXkgY29udGFpbiBzb3VyY2UgY29kZSB0aGF0IGlzIHByCitvdmlkZWQgc29sZWx5IGZvciByZWZlcmVuY2UgcHVycG9zZXMgcHVyc3VhbnQgdG8gdGhlIHRlcm1zIAorb2YgdGhpcyBBZ3JlZW1lbnQuICBTb3VyY2UgY29kZSBtYXkgbm90IGJlIHJlZGlzdHJpYnV0ZWQgdW4KK2xlc3MgZXhwcmVzc2x5IHByb3ZpZGVkIGZvciBpbiB0aGlzIEFncmVlbWVudC4gCisKKzYuICBUZXJtaW5hdGlvbiBmb3IgSW5mcmluZ2VtZW50LiAgRWl0aGVyIHBhcnR5IG1heSB0ZXJtaW5hCit0ZSB0aGlzIEFncmVlbWVudCBpbW1lZGlhdGVseSBzaG91bGQgYW55IFNvZnR3YXJlIGJlY29tZSwgbworciBpbiBlaXRoZXIgcGFydHkncyBvcGluaW9uIGJlIGxpa2VseSB0byBiZWNvbWUsIHRoZSBzdWJqZWMKK3Qgb2YgYSBjbGFpbSBvZiBpbmZyaW5nZW1lbnQgb2YgYW55IGludGVsbGVjdHVhbCBwcm9wZXJ0eSByCitpZ2h0LiAKKworRm9yIGlucXVpcmllcyBwbGVhc2UgY29udGFjdDogU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiA0MTUwIE4KK2V0d29yayBDaXJjbGUsIFNhbnRhIENsYXJhLCBDYWxpZm9ybmlhIDk1MDU0LiAKXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9saWNlbnNlcy9zdW4tYmNsYS1qMm1lIGIvbGljZW5zZXMvc3VuLWJjbGEtajJtZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTNhNGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvc3VuLWJjbGEtajJtZQpAQCAtMCwwICsxLDMzOSBAQAorRU5USVRMRU1FTlQKK2ZvcgorU09GVFdBUkUKKworVEhJUyBFTlRJVExFTUVOVCBFVklERU5DRVMgWU9VUiBMSUNFTlNFIFRPIFVTRSBUSEUgU1VOCitTT0ZUV0FSRSBTRVQgRk9SVEggQkVMT1cgVU5ERVIgVEhFIFRFUk1TIE9GIFRIRSBTVU4KK01JQ1JPU1lTVEVNUywgSU5DLiBTT0ZUV0FSRSBMSUNFTlNFIEFHUkVFTUVOVC4KKworTGljZW5zZWUvQ29tcGFueTogRW50aXR5IHJlY2VpdmluZyBTb2Z0d2FyZS4KKworRWZmZWN0aXZlIERhdGU6ICBEYXRlIFN1biBkZWxpdmVycyB0aGUgU29mdHdhcmUgdG8gWW91LgorCitTb2Z0d2FyZTogIEoyTUUgV2lyZWxlc3MgVG9vbGtpdCAyLjIgUGF0Y2guCisKK0hvc3QgU29mdHdhcmU6IFRoZSBzb2Z0d2FyZSBwcm9kdWN0IGRlc2NyaWJlZCBpbiB0aGUKK1NvZnR3YXJlJ3MgZG9jdW1lbnRhdGlvbiBmb3Igd2hpY2ggdGhlIFNvZnR3YXJlIGlzCitpbnRlbmRlZCB0byBiZSB1c2VkLgorCitQZXJtaXR0ZWQgVXNlOiAgVGhlIFBlcm1pdHRlZCBVc2Ugc2hhbGwgYmUgdGhlIHNhbWUgYXMKK3RoZSBwZXJtaXR0ZWQgdXNlIGluIFlvdXIgSG9zdCBTb2Z0d2FyZSdzIHNvZnR3YXJlCitsaWNlbnNlIGFncmVlbWVudC4gIFNvZnR3YXJlIG1heSBvbmx5IGJlIHVzZWQgaW4KK2Nvbmp1bmN0aW9uIHdpdGggdGhlIEhvc3QgU29mdHdhcmUuICBVc2Ugb2YgdGhlCitTb2Z0d2FyZSBvbiBhIHN0YW5kLWFsb25lIGJhc2lzIGlzIG5vdCBwZXJtaXR0ZWQgdW5kZXIKK3RoaXMgbGljZW5zZS4gIElmIFlvdSBkbyBub3QgaGF2ZSBhIHZhbGlkIGxpY2Vuc2UgdG8KK3VzZSB0aGUgSG9zdCBTb2Z0d2FyZSwgWW91IGhhdmUgbm8gbGljZW5zZSB0byB1c2UgdGhlCitTb2Z0d2FyZSBmb3IgYW55IHB1cnBvc2UuCisKK0xpY2Vuc2UgVGVybTogIFRoZSBMaWNlbnNlIFRlcm0gc2hhbGwgYmUgdGhlIHNhbWUgYXMKK3RoZSBsaWNlbnNlIHRlcm0gc2V0IGZvcnRoIGluIHlvdXIgSG9zdCBTb2Z0d2FyZSdzCitzb2Z0d2FyZSBsaWNlbnNlIGFncmVlbWVudC4KKworTGljZW5zZWQgVW5pdDogVGhlIExpY2Vuc2VkIFVuaXQgc2hhbGwgYmUgdGhlIHNhbWUgYXMKK3RoZSBsaWNlbnNlZCB1bml0IHNldCBmb3J0aCBpbiB5b3VyIEhvc3QgU29mdHdhcmUncworc29mdHdhcmUgbGljZW5zZSBhZ3JlZW1lbnQuCisKK0xpY2Vuc2VkIFVuaXQgQ291bnQ6IFRoZSBMaWNlbnNlIFVuaXQgQ291bnQgc2hhbGwgYmUKK3RoZSBzYW1lIGFzIHRoZSBsaWNlbnNlZCB1bml0IGNvdW50IHNldCBmb3J0aCBpbiB5b3VyCitIb3N0IFNvZnR3YXJlJ3Mgc29mdHdhcmUgbGljZW5zZSBhZ3JlZW1lbnQuCisKKworU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiAoIlN1biIpCitTT0ZUV0FSRSBMSUNFTlNFIEFHUkVFTUVOVAorCitSRUFEIFRIRSBURVJNUyBPRiBUSElTIEFHUkVFTUVOVCAoIkFHUkVFTUVOVCIpCitDQVJFRlVMTFkgQkVGT1JFIE9QRU5JTkcgU09GVFdBUkUgTUVESUEgUEFDS0FHRS4gQlkKK09QRU5JTkcgU09GVFdBUkUgTUVESUEgUEFDS0FHRSwgWU9VIEFHUkVFIFRPIFRIRSBURVJNUworT0YgVEhJUyBBR1JFRU1FTlQuIElGIFlPVSBBUkUgQUNDRVNTSU5HIFNPRlRXQVJFCitFTEVDVFJPTklDQUxMWSwgSU5ESUNBVEUgWU9VUiBBQ0NFUFRBTkNFIE9GIFRIRVNFCitURVJNUyBCWSBTRUxFQ1RJTkcgVEhFICJBQ0NFUFQiIEJVVFRPTiBBVCBUSEUgRU5EIE9GCitUSElTIEFHUkVFTUVOVC4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBBTEwgT0YgVEhFCitURVJNUywgUFJPTVBUTFkgUkVUVVJOIFRIRSBVTlVTRUQgU09GVFdBUkUgVE8gWU9VUgorUExBQ0UgT0YgUFVSQ0hBU0UgRk9SIEEgUkVGVU5EIE9SLCBJRiBTT0ZUV0FSRSBJUworQUNDRVNTRUQgRUxFQ1RST05JQ0FMTFksIFNFTEVDVCBUSEUgIkRFQ0xJTkUiIChPUgorIkVYSVQiKSBCVVRUT04gQVQgVEhFIEVORCBPRiBUSElTIEFHUkVFTUVOVC4gSUYgWU9VCitIQVZFIFNFUEFSQVRFTFkgQUdSRUVEIFRPIExJQ0VOU0UgVEVSTVMgKCJNQVNURVIKK1RFUk1TIikgRk9SIFlPVVIgTElDRU5TRSBUTyBUSElTIFNPRlRXQVJFLCBUSEVOCitTRUNUSU9OUyAxLTUgT0YgVEhJUyBBR1JFRU1FTlQgKCJTVVBQTEVNRU5UQUwgTElDRU5TRQorVEVSTVMiKSBTSEFMTCBTVVBQTEVNRU5UIEFORCBTVVBFUlNFREUgVEhFIE1BU1RFUgorVEVSTVMgSU4gUkVMQVRJT04gVE8gVEhJUyBTT0ZUV0FSRS4KKworMS4JRGVmaW5pdGlvbnMuCisKKyhhKSAJIkVudGl0bGVtZW50IiBtZWFucyB0aGUgY29sbGVjdGl2ZSBzZXQgb2YKK2FwcGxpY2FibGUgZG9jdW1lbnRzIGF1dGhvcml6ZWQgYnkgU3VuIGV2aWRlbmNpbmcgeW91cgorb2JsaWdhdGlvbiB0byBwYXkgYXNzb2NpYXRlZCBmZWVzIChpZiBhbnkpIGZvciB0aGUKK2xpY2Vuc2UsIGFzc29jaWF0ZWQgU2VydmljZXMsIGFuZCB0aGUgYXV0aG9yaXplZCBzY29wZQorb2YgdXNlIG9mIFNvZnR3YXJlIHVuZGVyIHRoaXMgQWdyZWVtZW50LgorCisoYikgCSJMaWNlbnNlZCBVbml0IiBtZWFucyB0aGUgdW5pdCBvZiBtZWFzdXJlIGJ5Cit3aGljaCB5b3VyIHVzZSBvZiBTb2Z0d2FyZSBhbmQvb3IgU2VydmljZSBpcyBsaWNlbnNlZCwKK2FzIGRlc2NyaWJlZCBpbiB5b3VyIEVudGl0bGVtZW50LgorCisoYykJIlBlcm1pdHRlZCBVc2UiIG1lYW5zIHRoZSBsaWNlbnNlZCBTb2Z0d2FyZQordXNlKHMpIGF1dGhvcml6ZWQgaW4gdGhpcyBBZ3JlZW1lbnQgYXMgc3BlY2lmaWVkIGluCit5b3VyIEVudGl0bGVtZW50LiBUaGUgUGVybWl0dGVkIFVzZSBmb3IgYW55IGJ1bmRsZWQKK1N1biBzb2Z0d2FyZSBub3Qgc3BlY2lmaWVkIGluIHlvdXIgRW50aXRsZW1lbnQgd2lsbCBiZQorZXZhbHVhdGlvbiB1c2UgYXMgcHJvdmlkZWQgaW4gU2VjdGlvbiAzLgorCisoZCkgCSJTZXJ2aWNlIiBtZWFucyB0aGUgc2VydmljZShzKSB0aGF0IFN1biBvciBpdHMKK2RlbGVnYXRlIHdpbGwgcHJvdmlkZSwgaWYgYW55LCBhcyBzZWxlY3RlZCBpbiB5b3VyCitFbnRpdGxlbWVudCBhbmQgYXMgZnVydGhlciBkZXNjcmliZWQgaW4gdGhlIGFwcGxpY2FibGUKK3NlcnZpY2UgbGlzdGluZ3MgYXQgd3d3LnN1bi5jb20vc2VydmljZS9zZXJ2aWNlbGlzdC4KKworKGUpIAkiU29mdHdhcmUiIG1lYW5zIHRoZSBTdW4gc29mdHdhcmUgZGVzY3JpYmVkIGluCit5b3VyIEVudGl0bGVtZW50LiBBbHNvLCBjZXJ0YWluIHNvZnR3YXJlIG1heSBiZQoraW5jbHVkZWQgZm9yIGV2YWx1YXRpb24gdXNlIHVuZGVyIFNlY3Rpb24gMy4KKworKGYpCSJZb3UiIGFuZCAiWW91ciIgbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgbGVnYWwKK2VudGl0eSBzcGVjaWZpZWQgaW4gdGhlIEVudGl0bGVtZW50LCBvciBmb3IgZXZhbHVhdGlvbgorcHVycG9zZXMsIHRoZSBlbnRpdHkgcGVyZm9ybWluZyB0aGUgZXZhbHVhdGlvbi4KKworMi4JTGljZW5zZSBHcmFudCBhbmQgRW50aXRsZW1lbnQuCisKK1N1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHlvdXIgRW50aXRsZW1lbnQsIFN1biBncmFudHMKK3lvdSBhIG5vbmV4Y2x1c2l2ZSwgbm9udHJhbnNmZXJhYmxlIGxpbWl0ZWQgbGljZW5zZSB0bwordXNlIFNvZnR3YXJlIGZvciBpdHMgUGVybWl0dGVkIFVzZSBmb3IgdGhlIGxpY2Vuc2UKK3Rlcm0uIFlvdXIgRW50aXRsZW1lbnQgd2lsbCBzcGVjaWZ5IChhKSBTb2Z0d2FyZQorbGljZW5zZWQsIChiKSB0aGUgUGVybWl0dGVkIFVzZSwgKGMpIHRoZSBsaWNlbnNlIHRlcm0sCithbmQgKGQpIHRoZSBMaWNlbnNlZCBVbml0cy4KKworQWRkaXRpb25hbGx5LCBpZiB5b3VyIEVudGl0bGVtZW50IGluY2x1ZGVzIFNlcnZpY2VzLAordGhlbiBpdCB3aWxsIGFsc28gc3BlY2lmeSB0aGUgKGUpIFNlcnZpY2UgYW5kIChmKQorc2VydmljZSB0ZXJtLgorCitJZiB5b3VyIHJpZ2h0cyB0byBTb2Z0d2FyZSBvciBTZXJ2aWNlcyBhcmUgbGltaXRlZCBpbgorZHVyYXRpb24gYW5kIHRoZSBkYXRlIHN1Y2ggcmlnaHRzIGJlZ2luIGlzIG90aGVyIHRoYW4KK3RoZSBwdXJjaGFzZSBkYXRlLCB5b3VyIEVudGl0bGVtZW50IHdpbGwgcHJvdmlkZSB0aGF0CitiZWdpbm5pbmcgZGF0ZShzKS4KKworVGhlIEVudGl0bGVtZW50IG1heSBkZWxpdmVyZWQgdG8geW91IGluIHZhcmlvdXMgd2F5cworZGVwZW5kaW5nIG9uIHRoZSBtYW5uZXIgaW4gd2hpY2ggeW91IG9idGFpbiBTb2Z0d2FyZQorYW5kIFNlcnZpY2VzLCBmb3IgZXhhbXBsZSwgdGhlIEVudGl0bGVtZW50IG1heSBiZQorcHJvdmlkZWQgaW4geW91ciByZWNlaXB0LCBpbnZvaWNlIG9yIHlvdXIgY29udHJhY3QKK3dpdGggU3VuIG9yIGF1dGhvcml6ZWQgU3VuIHJlc2VsbGVyLiBJdCBtYXkgYWxzbyBiZSBpbgorZWxlY3Ryb25pYyBmb3JtYXQgaWYgeW91IGRvd25sb2FkIFNvZnR3YXJlLgorCiszLglQZXJtaXR0ZWQgVXNlLgorCitBcyBzZWxlY3RlZCBpbiB5b3VyIEVudGl0bGVtZW50LCBvbmUgb3IgbW9yZSBvZiB0aGUKK2ZvbGxvd2luZyBQZXJtaXR0ZWQgVXNlcyB3aWxsIGFwcGx5IHRvIHlvdXIgdXNlIG9mCitTb2Z0d2FyZS4gVW5sZXNzIHlvdSBoYXZlIGFuIEVudGl0bGVtZW50IHRoYXQKK2V4cHJlc3NseSBwZXJtaXRzIGl0LCB5b3UgbWF5IG5vdCB1c2UgU29mdHdhcmUgZm9yIGFueQorb2YgdGhlIG90aGVyIFBlcm1pdHRlZCBVc2VzLiBJZiB5b3UgZG9uJ3QgaGF2ZSBhbgorRW50aXRsZW1lbnQsIG9yIGlmIHlvdXIgRW50aXRsZW1lbnQgZG9lc24ndCBjb3ZlcgorYWRkaXRpb25hbCBzb2Z0d2FyZSBkZWxpdmVyZWQgdG8geW91LCB0aGVuIHN1Y2gKK3NvZnR3YXJlIGlzIGZvciB5b3VyIEV2YWx1YXRpb24gVXNlLgorCisoYSkgRXZhbHVhdGlvbiBVc2UuIFlvdSBtYXkgZXZhbHVhdGUgU29mdHdhcmUKK2ludGVybmFsbHkgZm9yIGEgcGVyaW9kIG9mIDkwIGRheXMgZnJvbSB5b3VyIGZpcnN0Cit1c2UuCisKKyhiKSBSZXNlYXJjaCBhbmQgSW5zdHJ1Y3Rpb25hbCBVc2UuIFlvdSBtYXkgdXNlCitTb2Z0d2FyZSBpbnRlcm5hbGx5IHRvIGRlc2lnbiwgZGV2ZWxvcCBhbmQgdGVzdCwgYW5kCithbHNvIHRvIHByb3ZpZGUgaW5zdHJ1Y3Rpb24gb24gc3VjaCB1c2VzLgorCisoYykgSW5kaXZpZHVhbCBVc2UuIFlvdSBtYXkgdXNlIFNvZnR3YXJlIGludGVybmFsbHkKK2ZvciBwZXJzb25hbCwgaW5kaXZpZHVhbCB1c2UuCisKKyhkKSBDb21tZXJjaWFsIFVzZS4gWW91IG1heSB1c2UgU29mdHdhcmUgaW50ZXJuYWxseQorZm9yIHlvdXIgb3duIGNvbW1lcmNpYWwgcHVycG9zZXMuCisKKyhlKSBTZXJ2aWNlIFByb3ZpZGVyIFVzZS4gWW91IG1heSBtYWtlIFNvZnR3YXJlCitmdW5jdGlvbmFsaXR5IGFjY2Vzc2libGUgKGJ1dCBub3QgYnkgcHJvdmlkaW5nCitTb2Z0d2FyZSBpdHNlbGYgb3IgdGhyb3VnaCBvdXRzb3VyY2luZyBzZXJ2aWNlcykgdG8KK3lvdXIgZW5kIHVzZXJzIGluIGFuIGV4dHJhbmV0IGRlcGxveW1lbnQsIGJ1dCBub3QgdG8KK3lvdXIgYWZmaWxpYXRlZCBjb21wYW5pZXMgb3IgdG8gZ292ZXJubWVudCBhZ2VuY2llcy4KKworNC4JTGljZW5zZWQgVW5pdHMuCisKK1lvdXIgUGVybWl0dGVkIFVzZSBpcyBsaW1pdGVkIHRvIHRoZSBudW1iZXIgb2YKK0xpY2Vuc2VkIFVuaXRzIHN0YXRlZCBpbiB5b3VyIEVudGl0bGVtZW50LiBJZiB5b3UKK3JlcXVpcmUgYWRkaXRpb25hbCBMaWNlbnNlZCBVbml0cywgeW91IHdpbGwgbmVlZAorYWRkaXRpb25hbCBFbnRpdGxlbWVudChzKS4KKworNS4JUmVzdHJpY3Rpb25zLgorCisoYSkgVGhlIGNvcGllcyBvZiBTb2Z0d2FyZSBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhpcworQWdyZWVtZW50IGFyZSBsaWNlbnNlZCwgbm90IHNvbGQsIHRvIHlvdSBieSBTdW4uIFN1bgorcmVzZXJ2ZXMgYWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQuIChiKSBZb3UgbWF5CittYWtlIGEgc2luZ2xlIGFyY2hpdmFsIGNvcHkgb2YgU29mdHdhcmUsIGJ1dCBvdGhlcndpc2UKK21heSBub3QgY29weSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIFNvZnR3YXJlLiBIb3dldmVyCitpZiB0aGUgU3VuIGRvY3VtZW50YXRpb24gYWNjb21wYW55aW5nIFNvZnR3YXJlIGxpc3RzCitzcGVjaWZpYyBwb3J0aW9ucyBvZiBTb2Z0d2FyZSwgc3VjaCBhcyBoZWFkZXIgZmlsZXMsCitjbGFzcyBsaWJyYXJpZXMsIHJlZmVyZW5jZSBzb3VyY2UgY29kZSwgYW5kL29yCityZWRpc3RyaWJ1dGFibGUgZmlsZXMsIHRoYXQgbWF5IGJlIGhhbmRsZWQKK2RpZmZlcmVudGx5LCB5b3UgbWF5IGRvIHNvIG9ubHkgYXMgcHJvdmlkZWQgaW4gdGhlIFN1bgorZG9jdW1lbnRhdGlvbi4gKGMpIFlvdSBtYXkgbm90IHJlbnQsIGxlYXNlLCBsZW5kIG9yCitlbmN1bWJlciBTb2Z0d2FyZS4gKGQpIFVubGVzcyBlbmZvcmNlbWVudCBpcworcHJvaGliaXRlZCBieSBhcHBsaWNhYmxlIGxhdywgeW91IG1heSBub3QgZGVjb21waWxlLAorb3IgcmV2ZXJzZSBlbmdpbmVlciBTb2Z0d2FyZS4gKGUpIFRoZSB0ZXJtcyBhbmQKK2NvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgd2lsbCBhcHBseSB0byBhbnkKK1NvZnR3YXJlIHVwZGF0ZXMsIHByb3ZpZGVkIHRvIHlvdSBhdCBTdW4ncyBkaXNjcmV0aW9uLAordGhhdCByZXBsYWNlIGFuZC9vciBzdXBwbGVtZW50IHRoZSBvcmlnaW5hbCBTb2Z0d2FyZSwKK3VubGVzcyBzdWNoIHVwZGF0ZSBjb250YWlucyBhIHNlcGFyYXRlIGxpY2Vuc2UuIChmKQorWW91IG1heSBub3QgcHVibGlzaCBvciBwcm92aWRlIHRoZSByZXN1bHRzIG9mIGFueQorYmVuY2htYXJrIG9yIGNvbXBhcmlzb24gdGVzdHMgcnVuIG9uIFNvZnR3YXJlIHRvIGFueQordGhpcmQgcGFydHkgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBjb25zZW50IG9mIFN1bi4KKyhnKSBTb2Z0d2FyZSBpcyBjb25maWRlbnRpYWwgYW5kIGNvcHlyaWdodGVkLiAoaCkKK1VubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkLCBpZiBTb2Z0d2FyZSBpcyBkZWxpdmVyZWQKK3dpdGggZW1iZWRkZWQgb3IgYnVuZGxlZCBzb2Z0d2FyZSB0aGF0IGVuYWJsZXMKK2Z1bmN0aW9uYWxpdHkgb2YgU29mdHdhcmUsIHlvdSBtYXkgbm90IHVzZSBzdWNoCitzb2Z0d2FyZSBvbiBhIHN0YW5kLWFsb25lIGJhc2lzIG9yIHVzZSBhbnkgcG9ydGlvbiBvZgorc3VjaCBzb2Z0d2FyZSB0byBpbnRlcm9wZXJhdGUgd2l0aCBhbnkgcHJvZ3JhbShzKQorb3RoZXIgdGhhbiBTb2Z0d2FyZS4gKGkpIFNvZnR3YXJlIG1heSBjb250YWluIHByb2dyYW1zCit0aGF0IHBlcmZvcm0gYXV0b21hdGVkIGNvbGxlY3Rpb24gb2Ygc3lzdGVtIGRhdGEKK2FuZC9vciBhdXRvbWF0ZWQgc29mdHdhcmUgdXBkYXRpbmcgc2VydmljZXMuIFN5c3RlbQorZGF0YSBjb2xsZWN0ZWQgdGhyb3VnaCBzdWNoIHByb2dyYW1zIG1heSBiZSB1c2VkIGJ5CitTdW4sIGl0cyBzdWJjb250cmFjdG9ycywgYW5kIGl0cyBzZXJ2aWNlIGRlbGl2ZXJ5CitwYXJ0bmVycyBmb3IgdGhlIHB1cnBvc2Ugb2YgcHJvdmlkaW5nIHlvdSB3aXRoIHJlbW90ZQorc3lzdGVtIHNlcnZpY2VzIGFuZC9vciBpbXByb3ZpbmcgU3VuJ3Mgc29mdHdhcmUgYW5kCitzeXN0ZW1zLiAoaikgU29mdHdhcmUgaXMgbm90IGRlc2lnbmVkLCBsaWNlbnNlZCBvcgoraW50ZW5kZWQgZm9yIHVzZSBpbiB0aGUgZGVzaWduLCBjb25zdHJ1Y3Rpb24sCitvcGVyYXRpb24gb3IgbWFpbnRlbmFuY2Ugb2YgYW55IG51Y2xlYXIgZmFjaWxpdHkgYW5kCitTdW4gYW5kIGl0cyBsaWNlbnNvcnMgZGlzY2xhaW0gYW55IGV4cHJlc3Mgb3IgaW1wbGllZAord2FycmFudHkgb2YgZml0bmVzcyBmb3Igc3VjaCB1c2VzLiAoaykgTm8gcmlnaHQsIHRpdGxlCitvciBpbnRlcmVzdCBpbiBvciB0byBhbnkgdHJhZGVtYXJrLCBzZXJ2aWNlIG1hcmssIGxvZ28KK29yIHRyYWRlIG5hbWUgb2YgU3VuIG9yIGl0cyBsaWNlbnNvcnMgaXMgZ3JhbnRlZCB1bmRlcgordGhpcyBBZ3JlZW1lbnQuCisKKzYuCVRlcm0gYW5kIFRlcm1pbmF0aW9uLgorCitUaGUgbGljZW5zZSBhbmQgc2VydmljZSB0ZXJtIGFyZSBzZXQgZm9ydGggaW4geW91cgorRW50aXRsZW1lbnQocykuIFlvdXIgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHdpbGwKK3Rlcm1pbmF0ZSBpbW1lZGlhdGVseSB3aXRob3V0IG5vdGljZSBmcm9tIFN1biBpZiB5b3UKK21hdGVyaWFsbHkgYnJlYWNoIGl0IG9yIHRha2UgYW55IGFjdGlvbiBpbiBkZXJvZ2F0aW9uCitvZiBTdW4ncyBhbmQvb3IgaXRzIGxpY2Vuc29ycycgcmlnaHRzIHRvIFNvZnR3YXJlLiBTdW4KK21heSB0ZXJtaW5hdGUgdGhpcyBBZ3JlZW1lbnQgc2hvdWxkIGFueSBTb2Z0d2FyZQorYmVjb21lLCBvciBpbiBTdW4ncyByZWFzb25hYmxlIG9waW5pb24gbGlrZWx5IHRvCitiZWNvbWUsIHRoZSBzdWJqZWN0IG9mIGEgY2xhaW0gb2YgaW50ZWxsZWN0dWFsCitwcm9wZXJ0eSBpbmZyaW5nZW1lbnQgb3IgdHJhZGUgc2VjcmV0CittaXNhcHByb3ByaWF0aW9uLiBVcG9uIHRlcm1pbmF0aW9uLCB5b3Ugd2lsbCBjZWFzZSB1c2UKK29mLCBhbmQgZGVzdHJveSwgU29mdHdhcmUgYW5kIGNvbmZpcm0gY29tcGxpYW5jZSBpbgord3JpdGluZyB0byBTdW4uIFNlY3Rpb25zIDEsIDUsIDYsIDcsIGFuZCA5LTE1IHdpbGwKK3N1cnZpdmUgdGVybWluYXRpb24gb2YgdGhlIEFncmVlbWVudC4KKworNy4JSmF2YSBDb21wYXRpYmlsaXR5IGFuZCBPcGVuIFNvdXJjZS4KKworU29mdHdhcmUgbWF5IGNvbnRhaW4gSmF2YSB0ZWNobm9sb2d5LiBZb3UgbWF5IG5vdAorY3JlYXRlIGFkZGl0aW9uYWwgY2xhc3NlcyB0bywgb3IgbW9kaWZpY2F0aW9ucyBvZiwgdGhlCitKYXZhIHRlY2hub2xvZ3ksIGV4Y2VwdCB1bmRlciBjb21wYXRpYmlsaXR5CityZXF1aXJlbWVudHMgYXZhaWxhYmxlIHVuZGVyIGEgc2VwYXJhdGUgYWdyZWVtZW50CithdmFpbGFibGUgYXQgd3d3LmphdmEubmV0LgorCitTdW4gc3VwcG9ydHMgYW5kIGJlbmVmaXRzIGZyb20gdGhlIGdsb2JhbCBjb21tdW5pdHkgb2YKK29wZW4gc291cmNlIGRldmVsb3BlcnMsIGFuZCB0aGFua3MgdGhlIGNvbW11bml0eSBmb3IKK2l0cyBpbXBvcnRhbnQgY29udHJpYnV0aW9ucyBhbmQgb3BlbiBzdGFuZGFyZHMtYmFzZWQKK3RlY2hub2xvZ3ksIHdoaWNoIFN1biBoYXMgYWRvcHRlZCBpbnRvIG1hbnkgb2YgaXRzCitwcm9kdWN0cy4KKworUGxlYXNlIG5vdGUgdGhhdCBwb3J0aW9ucyBvZiBTb2Z0d2FyZSBtYXkgYmUgcHJvdmlkZWQKK3dpdGggbm90aWNlcyBhbmQgb3BlbiBzb3VyY2UgbGljZW5zZXMgZnJvbSBzdWNoCitjb21tdW5pdGllcyBhbmQgdGhpcmQgcGFydGllcyB0aGF0IGdvdmVybiB0aGUgdXNlIG9mCit0aG9zZSBwb3J0aW9ucywgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciBkbworbm90IGFsdGVyIGFueSByaWdodHMgYW5kIG9ibGlnYXRpb25zIHlvdSBtYXkgaGF2ZQordW5kZXIgc3VjaCBvcGVuIHNvdXJjZSBsaWNlbnNlcywgaG93ZXZlciwgdGhlCitkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGFuZCBsaW1pdGF0aW9uIG9mIGxpYWJpbGl0eQorcHJvdmlzaW9ucyBpbiB0aGlzIEFncmVlbWVudCB3aWxsIGFwcGx5IHRvIGFsbAorU29mdHdhcmUgaW4gdGhpcyBkaXN0cmlidXRpb24uCisKKzguIAlMaW1pdGVkIFdhcnJhbnR5LgorCitTdW4gd2FycmFudHMgdG8geW91IHRoYXQgZm9yIGEgcGVyaW9kIG9mIDkwIGRheXMgZnJvbQordGhlIGRhdGUgb2YgcHVyY2hhc2UsIGFzIGV2aWRlbmNlZCBieSBhIGNvcHkgb2YgdGhlCityZWNlaXB0LCB0aGUgbWVkaWEgb24gd2hpY2ggU29mdHdhcmUgaXMgZnVybmlzaGVkIChpZgorYW55KSB3aWxsIGJlIGZyZWUgb2YgZGVmZWN0cyBpbiBtYXRlcmlhbHMgYW5kCit3b3JrbWFuc2hpcCB1bmRlciBub3JtYWwgdXNlLiBFeGNlcHQgZm9yIHRoZQorZm9yZWdvaW5nLCBTb2Z0d2FyZSBpcyBwcm92aWRlZCAiQVMgSVMiLiBZb3VyCitleGNsdXNpdmUgcmVtZWR5IGFuZCBTdW4ncyBlbnRpcmUgbGlhYmlsaXR5IHVuZGVyIHRoaXMKK2xpbWl0ZWQgd2FycmFudHkgd2lsbCBiZSBhdCBTdW4ncyBvcHRpb24gdG8gcmVwbGFjZQorU29mdHdhcmUgbWVkaWEgb3IgcmVmdW5kIHRoZSBmZWUgcGFpZCBmb3IgU29mdHdhcmUuCitTb21lIHN0YXRlcyBkbyBub3QgYWxsb3cgbGltaXRhdGlvbnMgb24gY2VydGFpbgoraW1wbGllZCB3YXJyYW50aWVzLCBzbyB0aGUgYWJvdmUgbWF5IG5vdCBhcHBseSB0byB5b3UuCitUaGlzIGxpbWl0ZWQgd2FycmFudHkgZ2l2ZXMgeW91IHNwZWNpZmljIGxlZ2FsIHJpZ2h0cy4KK1lvdSBtYXkgaGF2ZSBvdGhlcnMsIHdoaWNoIHZhcnkgZnJvbSBzdGF0ZSB0byBzdGF0ZS4KKworOS4JRGlzY2xhaW1lciBvZiBXYXJyYW50eS4KKworVU5MRVNTIFNQRUNJRklFRCBJTiBUSElTIEFHUkVFTUVOVCwgQUxMIEVYUFJFU1MgT1IKK0lNUExJRUQgQ09ORElUSU9OUywgUkVQUkVTRU5UQVRJT05TIEFORCBXQVJSQU5USUVTLAorSU5DTFVESU5HIEFOWSBJTVBMSUVEIFdBUlJBTlRZIE9GIE1FUkNIQU5UQUJJTElUWSwKK0ZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HRU1FTlQKK0FSRSBESVNDTEFJTUVELCBFWENFUFQgVE8gVEhFIEVYVEVOVCBUSEFUIFRIRVNFCitESVNDTEFJTUVSUyBBUkUgSEVMRCBUTyBCRSBMRUdBTExZIElOVkFMSUQuCisKKzEwLiAJTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuCisKK1RPIFRIRSBFWFRFTlQgTk9UIFBST0hJQklURUQgQlkgTEFXLCBJTiBOTyBFVkVOVCBXSUxMCitTVU4gT1IgSVRTIExJQ0VOU09SUyBCRSBMSUFCTEUgRk9SIEFOWSBMT1NUIFJFVkVOVUUsCitQUk9GSVQgT1IgREFUQSwgT1IgRk9SIFNQRUNJQUwsIElORElSRUNULAorQ09OU0VRVUVOVElBTCwgSU5DSURFTlRBTCBPUiBQVU5JVElWRSBEQU1BR0VTLCBIT1dFVkVSCitDQVVTRUQgUkVHQVJETEVTUyBPRiBUSEUgVEhFT1JZIE9GIExJQUJJTElUWSwgQVJJU0lORworT1VUIE9GIE9SIFJFTEFURUQgVE8gVEhFIFVTRSBPRiBPUiBJTkFCSUxJVFkgVE8gVVNFCitTT0ZUV0FSRSwgRVZFTiBJRiBTVU4gSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gSW4gbm8gZXZlbnQgd2lsbCBTdW4ncworbGlhYmlsaXR5IHRvIHlvdSwgd2hldGhlciBpbiBjb250cmFjdCwgdG9ydCAoaW5jbHVkaW5nCituZWdsaWdlbmNlKSwgb3Igb3RoZXJ3aXNlLCBleGNlZWQgdGhlIGFtb3VudCBwYWlkIGJ5Cit5b3UgZm9yIFNvZnR3YXJlIHVuZGVyIHRoaXMgQWdyZWVtZW50LiBUaGUgZm9yZWdvaW5nCitsaW1pdGF0aW9ucyB3aWxsIGFwcGx5IGV2ZW4gaWYgdGhlIGFib3ZlIHN0YXRlZAord2FycmFudHkgZmFpbHMgb2YgaXRzIGVzc2VudGlhbCBwdXJwb3NlLiBTb21lIHN0YXRlcworZG8gbm90IGFsbG93IHRoZSBleGNsdXNpb24gb2YgaW5jaWRlbnRhbCBvcgorY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBzbyBzb21lIG9mIHRoZSB0ZXJtcyBhYm92ZSBtYXkKK25vdCBiZSBhcHBsaWNhYmxlIHRvIHlvdS4KKworMTEuIAlFeHBvcnQgUmVndWxhdGlvbnMuCisKK0FsbCBTb2Z0d2FyZSwgZG9jdW1lbnRzLCB0ZWNobmljYWwgZGF0YSwgYW5kIGFueSBvdGhlcgorbWF0ZXJpYWxzIGRlbGl2ZXJlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgc3ViamVjdAordG8gVS5TLiBleHBvcnQgY29udHJvbCBsYXdzIGFuZCBtYXkgYmUgc3ViamVjdCB0bworZXhwb3J0IG9yIGltcG9ydCByZWd1bGF0aW9ucyBpbiBvdGhlciBjb3VudHJpZXMuIFlvdQorYWdyZWUgdG8gY29tcGx5IHN0cmljdGx5IHdpdGggdGhlc2UgbGF3cyBhbmQKK3JlZ3VsYXRpb25zIGFuZCBhY2tub3dsZWRnZSB0aGF0IHlvdSBoYXZlIHRoZQorcmVzcG9uc2liaWxpdHkgdG8gb2J0YWluIGFueSBsaWNlbnNlcyB0byBleHBvcnQsCityZS1leHBvcnQsIG9yIGltcG9ydCBhcyBtYXkgYmUgcmVxdWlyZWQgYWZ0ZXIgZGVsaXZlcnkKK3RvIHlvdS4KKworMTIuIAlVLlMuIEdvdmVybm1lbnQgUmVzdHJpY3RlZCBSaWdodHMuCisKK0lmIFNvZnR3YXJlIGlzIGJlaW5nIGFjcXVpcmVkIGJ5IG9yIG9uIGJlaGFsZiBvZiB0aGUKK1UuUy4gR292ZXJubWVudCBvciBieSBhIFUuUy4gR292ZXJubWVudCBwcmltZQorY29udHJhY3RvciBvciBzdWJjb250cmFjdG9yIChhdCBhbnkgdGllciksIHRoZW4gdGhlCitHb3Zlcm5tZW50J3MgcmlnaHRzIGluIFNvZnR3YXJlIGFuZCBhY2NvbXBhbnlpbmcKK2RvY3VtZW50YXRpb24gd2lsbCBiZSBvbmx5IGFzIHNldCBmb3J0aCBpbiB0aGlzCitBZ3JlZW1lbnQ7IHRoaXMgaXMgaW4gYWNjb3JkYW5jZSB3aXRoIDQ4IENGUiAyMjcuNzIwMQordGhyb3VnaCAyMjcuNzIwMi00IChmb3IgRGVwYXJ0bWVudCBvZiBEZWZlbnNlIChET0QpCithY3F1aXNpdGlvbnMpIGFuZCB3aXRoIDQ4IENGUiAyLjEwMSBhbmQgMTIuMjEyIChmb3IKK25vbi1ET0QgYWNxdWlzaXRpb25zKS4KKworMTMuIAlHb3Zlcm5pbmcgTGF3LgorCitBbnkgYWN0aW9uIHJlbGF0ZWQgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBiZSBnb3Zlcm5lZAorYnkgQ2FsaWZvcm5pYSBsYXcgYW5kIGNvbnRyb2xsaW5nIFUuUy4gZmVkZXJhbCBsYXcuIE5vCitjaG9pY2Ugb2YgbGF3IHJ1bGVzIG9mIGFueSBqdXJpc2RpY3Rpb24gd2lsbCBhcHBseS4KKworMTQuIAlTZXZlcmFiaWxpdHkuCisKK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaGVsZCB0byBiZQordW5lbmZvcmNlYWJsZSwgdGhpcyBBZ3JlZW1lbnQgd2lsbCByZW1haW4gaW4gZWZmZWN0Cit3aXRoIHRoZSBwcm92aXNpb24gb21pdHRlZCwgdW5sZXNzIG9taXNzaW9uIHdvdWxkCitmcnVzdHJhdGUgdGhlIGludGVudCBvZiB0aGUgcGFydGllcywgaW4gd2hpY2ggY2FzZQordGhpcyBBZ3JlZW1lbnQgd2lsbCBpbW1lZGlhdGVseSB0ZXJtaW5hdGUuCisKKzE1LiAJSW50ZWdyYXRpb24uCisKK1RoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYW55IHRlcm1zIGNvbnRhaW5lZCBpbiB5b3VyCitFbnRpdGxlbWVudCwgaXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB5b3UgYW5kCitTdW4gcmVsYXRpbmcgdG8gaXRzIHN1YmplY3QgbWF0dGVyLiBJdCBzdXBlcnNlZGVzIGFsbAorcHJpb3Igb3IgY29udGVtcG9yYW5lb3VzIG9yYWwgb3Igd3JpdHRlbgorY29tbXVuaWNhdGlvbnMsIHByb3Bvc2FscywgcmVwcmVzZW50YXRpb25zIGFuZAord2FycmFudGllcyBhbmQgcHJldmFpbHMgb3ZlciBhbnkgY29uZmxpY3Rpbmcgb3IKK2FkZGl0aW9uYWwgdGVybXMgb2YgYW55IHF1b3RlLCBvcmRlciwgYWNrbm93bGVkZ21lbnQsCitvciBvdGhlciBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIHBhcnRpZXMgcmVsYXRpbmcgdG8KK2l0cyBzdWJqZWN0IG1hdHRlciBkdXJpbmcgdGhlIHRlcm0gb2YgdGhpcyBBZ3JlZW1lbnQuCitObyBtb2RpZmljYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQgd2lsbCBiZSBiaW5kaW5nLAordW5sZXNzIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSBhbiBhdXRob3JpemVkCityZXByZXNlbnRhdGl2ZSBvZiBlYWNoIHBhcnR5LgorCitQbGVhc2UgY29udGFjdCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIDQxNTAgTmV0d29yaworQ2lyY2xlLCBTYW50YSBDbGFyYSwgQ2FsaWZvcm5pYSA5NTA1NCBpZiB5b3UgaGF2ZQorcXVlc3Rpb25zLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvc3VuLWJjbGEtamFpIGIvbGljZW5zZXMvc3VuLWJjbGEtamFpCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyMmIwMWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9zdW4tYmNsYS1qYWkKQEAgLTAsMCArMSw1MCBAQAorU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorQmluYXJ5IENvZGUgTGljZW5zZSBBZ3JlZW1lbnQKK0pBVkEgQURWQU5DRUQgSU1BR0lORyBBUEksIFZFUlNJT04gMS4xLjIKKworUkVBRCBUSEUgVEVSTVMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIEFOWSBQUk9WSURFRCBTVVBQTEVNRU5UQUwgTElDRU5TRSBURVJNUyAoQ09MTEVDVElWRUxZICJBR1JFRU1FTlQiKSBDQVJFRlVMTFkgQkVGT1JFIE9QRU5JTkcgVEhFIFNPRlRXQVJFIE1FRElBIFBBQ0tBR0UuICBCWSBPUEVOSU5HIFRIRSBTT0ZUV0FSRSBNRURJQSBQQUNLQUdFLCBZT1UgQUdSRUUgVE8gVEhFIFRFUk1TIE9GIFRISVMgQUdSRUVNRU5ULiAgSUYgWU9VIEFSRSBBQ0NFU1NJTkcgVEhFIFNPRlRXQVJFIEVMRUNUUk9OSUNBTExZLCBJTkRJQ0FURSBZT1VSIEFDQ0VQVEFOQ0UgT0YgVEhFU0UgVEVSTVMgQlkgU0VMRUNUSU5HIFRIRSAiQUNDRVBUIiBCVVRUT04gQVQgVEhFIEVORCBPRiBUSElTIEFHUkVFTUVOVC4gIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gQUxMIFRIRVNFIFRFUk1TLCBQUk9NUFRMWSBSRVRVUk4gVEhFIFVOVVNFRCBTT0ZUV0FSRSBUTyBZT1VSIFBMQUNFIE9GIFBVUkNIQVNFIEZPUiBBIFJFRlVORCBPUiwgSUYgVEhFIFNPRlRXQVJFIElTIEFDQ0VTU0VEIEVMRUNUUk9OSUNBTExZLCBTRUxFQ1QgVEhFICJERUNMSU5FIiBCVVRUT04gQVQgVEhFIEVORCBPRiBUSElTIEFHUkVFTUVOVC4KKworMS4gIExJQ0VOU0UgVE8gVVNFLiAgU3VuIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlIGFuZCBub24tdHJhbnNmZXJhYmxlIGxpY2Vuc2UgZm9yIHRoZSBpbnRlcm5hbCB1c2Ugb25seSBvZiB0aGUgYWNjb21wYW55aW5nIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIGFuZCBhbnkgZXJyb3IgY29ycmVjdGlvbnMgcHJvdmlkZWQgYnkgU3VuIChjb2xsZWN0aXZlbHkgIlNvZnR3YXJlIiksIGJ5IHRoZSBudW1iZXIgb2YgdXNlcnMgYW5kIHRoZSBjbGFzcyBvZiBjb21wdXRlciBoYXJkd2FyZSBmb3Igd2hpY2ggdGhlIGNvcnJlc3BvbmRpbmcgZmVlIGhhcyBiZWVuIHBhaWQuCisKKzIuICBSRVNUUklDVElPTlMuICBTb2Z0d2FyZSBpcyBjb25maWRlbnRpYWwgYW5kIGNvcHlyaWdodGVkLiBUaXRsZSB0byBTb2Z0d2FyZSBhbmQgYWxsIGFzc29jaWF0ZWQgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBpcyByZXRhaW5lZCBieSBTdW4gYW5kL29yIGl0cyBsaWNlbnNvcnMuICBFeGNlcHQgYXMgc3BlY2lmaWNhbGx5IGF1dGhvcml6ZWQgaW4gYW55IFN1cHBsZW1lbnRhbCBMaWNlbnNlIFRlcm1zLCB5b3UgbWF5IG5vdCBtYWtlIGNvcGllcyBvZiBTb2Z0d2FyZSwgb3RoZXIgdGhhbiBhIHNpbmdsZSBjb3B5IG9mIFNvZnR3YXJlIGZvciBhcmNoaXZhbCBwdXJwb3Nlcy4gIFVubGVzcyBlbmZvcmNlbWVudCBpcyBwcm9oaWJpdGVkIGJ5IGFwcGxpY2FibGUgbGF3LCB5b3UgbWF5IG5vdCBtb2RpZnksIGRlY29tcGlsZSwgb3IgcmV2ZXJzZSBlbmdpbmVlciBTb2Z0d2FyZS4gIFlvdSBhY2tub3dsZWRnZSB0aGF0IFNvZnR3YXJlIGlzIG5vdCBkZXNpZ25lZCwgbGljZW5zZWQgb3IgaW50ZW5kZWQgZm9yIHVzZSBpbiB0aGUgZGVzaWduLCBjb25zdHJ1Y3Rpb24sIG9wZXJhdGlvbiBvciBtYWludGVuYW5jZSBvZiBhbnkgbnVjbGVhciBmYWNpbGl0eS4gIFN1biBkaXNjbGFpbXMgYW55IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eSBvZiBmaXRuZXNzIGZvciBzdWNoIHVzZXMuICBObyByaWdodCwgdGl0bGUgb3IgaW50ZXJlc3QgaW4gb3IgdG8gYW55IHRyYWRlbWFyaywgc2VydmljZSBtYXJrLCBsb2dvIG9yIHRyYWRlIG5hbWUgb2YgU3VuIG9yIGl0cyBsaWNlbnNvcnMgaXMgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudC4KKworMy4gTElNSVRFRCBXQVJSQU5UWS4gIFN1biB3YXJyYW50cyB0byB5b3UgdGhhdCBmb3IgYSBwZXJpb2Qgb2YgbmluZXR5ICg5MCkgZGF5cyBmcm9tIHRoZSBkYXRlIG9mIHB1cmNoYXNlLCBhcyBldmlkZW5jZWQgYnkgYSBjb3B5IG9mIHRoZSByZWNlaXB0LCB0aGUgbWVkaWEgb24gd2hpY2ggU29mdHdhcmUgaXMgZnVybmlzaGVkIChpZiBhbnkpIHdpbGwgYmUgZnJlZSBvZiBkZWZlY3RzIGluIG1hdGVyaWFscyBhbmQgd29ya21hbnNoaXAgdW5kZXIgbm9ybWFsIHVzZS4gIEV4Y2VwdCBmb3IgdGhlIGZvcmVnb2luZywgU29mdHdhcmUgaXMgcHJvdmlkZWQgIkFTIElTIi4gIFlvdXIgZXhjbHVzaXZlIHJlbWVkeSBhbmQgU3VuJ3MgZW50aXJlIGxpYWJpbGl0eSB1bmRlciB0aGlzIGxpbWl0ZWQgd2FycmFudHkgd2lsbCBiZSBhdCBTdW4ncyBvcHRpb24gdG8gcmVwbGFjZSBTb2Z0d2FyZSBtZWRpYSBvciByZWZ1bmQgdGhlIGZlZSBwYWlkIGZvciBTb2Z0d2FyZS4KKworNC4gIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkuICBVTkxFU1MgU1BFQ0lGSUVEIElOIFRISVMgQUdSRUVNRU5ULCBBTEwgRVhQUkVTUyBPUiBJTVBMSUVEIENPTkRJVElPTlMsIFJFUFJFU0VOVEFUSU9OUyBBTkQgV0FSUkFOVElFUywgSU5DTFVESU5HIEFOWSBJTVBMSUVEIFdBUlJBTlRZIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdFTUVOVCBBUkUgRElTQ0xBSU1FRCwgRVhDRVBUIFRPIFRIRSBFWFRFTlQgVEhBVCBUSEVTRSBESVNDTEFJTUVSUyBBUkUgSEVMRCBUTyBCRSBMRUdBTExZIElOVkFMSUQuCisKKzUuICBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS4gIFRPIFRIRSBFWFRFTlQgTk9UIFBST0hJQklURUQgQlkgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIFNVTiBPUiBJVFMgTElDRU5TT1JTIEJFIExJQUJMRSBGT1IgQU5ZIExPU1QgUkVWRU5VRSwgUFJPRklUIE9SIERBVEEsIE9SIEZPUiBTUEVDSUFMLCBJTkRJUkVDVCwgQ09OU0VRVUVOVElBTCwgSU5DSURFTlRBTCBPUiBQVU5JVElWRSBEQU1BR0VTLCBIT1dFVkVSIENBVVNFRCBSRUdBUkRMRVNTIE9GIFRIRSBUSEVPUlkgT0YgTElBQklMSVRZLCBBUklTSU5HIE9VVCBPRiBPUiBSRUxBVEVEIFRPIFRIRSBVU0UgT0YgT1IgSU5BQklMSVRZIFRPIFVTRSBTT0ZUV0FSRSwgRVZFTiBJRiBTVU4gSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiAgSW4gbm8gZXZlbnQgd2lsbCBTdW4ncyBsaWFiaWxpdHkgdG8geW91LCB3aGV0aGVyIGluIGNvbnRyYWN0LCB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIG9yIG90aGVyd2lzZSwgZXhjZWVkIHRoZSBhbW91bnQgcGFpZCBieSB5b3UgZm9yIFNvZnR3YXJlIHVuZGVyIHRoaXMgQWdyZWVtZW50LiAgVGhlIGZvcmVnb2luZyBsaW1pdGF0aW9ucyB3aWxsIGFwcGx5IGV2ZW4gaWYgdGhlIGFib3ZlIHN0YXRlZCB3YXJyYW50eSBmYWlscyBvZiBpdHMgZXNzZW50aWFsIHB1cnBvc2UuCisKKzYuICBUZXJtaW5hdGlvbi4gIFRoaXMgQWdyZWVtZW50IGlzIGVmZmVjdGl2ZSB1bnRpbCB0ZXJtaW5hdGVkLiAgWW91IG1heSB0ZXJtaW5hdGUgdGhpcyBBZ3JlZW1lbnQgYXQgYW55IHRpbWUgYnkgZGVzdHJveWluZyBhbGwgY29waWVzIG9mIFNvZnR3YXJlLiAgVGhpcyBBZ3JlZW1lbnQgd2lsbCB0ZXJtaW5hdGUgaW1tZWRpYXRlbHkgd2l0aG91dCBub3RpY2UgZnJvbSBTdW4gaWYgeW91IGZhaWwgdG8gY29tcGx5IHdpdGggYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudC4gIFVwb24gVGVybWluYXRpb24sIHlvdSBtdXN0IGRlc3Ryb3kgYWxsIGNvcGllcyBvZiBTb2Z0d2FyZS4KKworNy4gRXhwb3J0IFJlZ3VsYXRpb25zLiBBbGwgU29mdHdhcmUgYW5kIHRlY2huaWNhbCBkYXRhIGRlbGl2ZXJlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgc3ViamVjdCB0byBVUyBleHBvcnQgY29udHJvbCBsYXdzIGFuZCBtYXkgYmUgc3ViamVjdCB0byBleHBvcnQgb3IgaW1wb3J0IHJlZ3VsYXRpb25zIGluIG90aGVyIGNvdW50cmllcy4gIFlvdSBhZ3JlZSB0byBjb21wbHkgc3RyaWN0bHkgd2l0aCBhbGwgc3VjaCBsYXdzIGFuZCByZWd1bGF0aW9ucyBhbmQgYWNrbm93bGVkZ2UgdGhhdCB5b3UgaGF2ZSB0aGUgcmVzcG9uc2liaWxpdHkgdG8gb2J0YWluIHN1Y2ggbGljZW5zZXMgdG8gZXhwb3J0LCByZS1leHBvcnQsIG9yIGltcG9ydCBhcyBtYXkgYmUgcmVxdWlyZWQgYWZ0ZXIgZGVsaXZlcnkgdG8geW91LgorCis4LiAgIFUuUy4gR292ZXJubWVudCBSZXN0cmljdGVkIFJpZ2h0cy4gIElmIFNvZnR3YXJlIGlzIGJlaW5nIGFjcXVpcmVkIGJ5IG9yIG9uIGJlaGFsZiBvZiB0aGUgVS5TLiBHb3Zlcm5tZW50IG9yIGJ5IGEgVS5TLiBHb3Zlcm5tZW50IHByaW1lIGNvbnRyYWN0b3Igb3Igc3ViY29udHJhY3RvciAoYXQgYW55IHRpZXIpLCB0aGVuIHRoZSBHb3Zlcm5tZW50J3MgcmlnaHRzIGluIFNvZnR3YXJlIGFuZCBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiB3aWxsIGJlIG9ubHkgYXMgc2V0IGZvcnRoIGluIHRoaXMgQWdyZWVtZW50OyB0aGlzIGlzIGluIGFjY29yZGFuY2Ugd2l0aCA0OCBDRlIgMjI3LjcyMDEgdGhyb3VnaCAyMjcuNzIwMi00IChmb3IgRGVwYXJ0bWVudCBvZiBEZWZlbnNlIChET0QpIGFjcXVpc2l0aW9ucykgYW5kIHdpdGggNDggQ0ZSIDIuMTAxIGFuZCAxMi4yMTIgKGZvciBub24tRE9EIGFjcXVpc2l0aW9ucykuCisKKzkuICBHb3Zlcm5pbmcgTGF3LiAgQW55IGFjdGlvbiByZWxhdGVkIHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYmUgZ292ZXJuZWQgYnkgQ2FsaWZvcm5pYSBsYXcgYW5kIGNvbnRyb2xsaW5nIFUuUy4gZmVkZXJhbCBsYXcuICBObyBjaG9pY2Ugb2YgbGF3IHJ1bGVzIG9mIGFueSBqdXJpc2RpY3Rpb24gd2lsbCBhcHBseS4KKworMTAuICBTZXZlcmFiaWxpdHkuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCB0aGlzIEFncmVlbWVudCB3aWxsIHJlbWFpbiBpbiBlZmZlY3Qgd2l0aCB0aGUgcHJvdmlzaW9uIG9taXR0ZWQsIHVubGVzcyBvbWlzc2lvbiB3b3VsZCBmcnVzdHJhdGUgdGhlIGludGVudCBvZiB0aGUgcGFydGllcywgaW4gd2hpY2ggY2FzZSB0aGlzIEFncmVlbWVudCB3aWxsIGltbWVkaWF0ZWx5IHRlcm1pbmF0ZS4KKworMTEuICBJbnRlZ3JhdGlvbi4gIFRoaXMgQWdyZWVtZW50IGlzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4geW91IGFuZCBTdW4gcmVsYXRpbmcgdG8gaXRzIHN1YmplY3QgbWF0dGVyLiAgSXQgc3VwZXJzZWRlcyBhbGwgcHJpb3Igb3IgY29udGVtcG9yYW5lb3VzIG9yYWwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9ucywgcHJvcG9zYWxzLCByZXByZXNlbnRhdGlvbnMgYW5kIHdhcnJhbnRpZXMgYW5kIHByZXZhaWxzIG92ZXIgYW55IGNvbmZsaWN0aW5nIG9yIGFkZGl0aW9uYWwgdGVybXMgb2YgYW55IHF1b3RlLCBvcmRlciwgYWNrbm93bGVkZ21lbnQsIG9yIG90aGVyIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgcGFydGllcyByZWxhdGluZyB0byBpdHMgc3ViamVjdCBtYXR0ZXIgZHVyaW5nIHRoZSB0ZXJtIG9mIHRoaXMgQWdyZWVtZW50LiAgTm8gbW9kaWZpY2F0aW9uIG9mIHRoaXMgQWdyZWVtZW50IHdpbGwgYmUgYmluZGluZywgdW5sZXNzIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSBhbiBhdXRob3JpemVkIHJlcHJlc2VudGF0aXZlIG9mIGVhY2ggcGFydHkuCisKK0RFVkVMT1BNRU5UIFRPT0xTCitKQVZBIEFEVkFOQ0VEIElNQUdJTkcsIFZFUlNJT04gMS4xLjIKK1NVUFBMRU1FTlRBTCBMSUNFTlNFIFRFUk1TCisKK1RoZXNlIHN1cHBsZW1lbnRhbCBsaWNlbnNlIHRlcm1zICgiU3VwcGxlbWVudGFsIFRlcm1zIikgYWRkIHRvIG9yIG1vZGlmeSB0aGUgdGVybXMgb2YgdGhlIEJpbmFyeSBDb2RlIExpY2Vuc2UgQWdyZWVtZW50IChjb2xsZWN0aXZlbHksIHRoZSAiQWdyZWVtZW50IikuIENhcGl0YWxpemVkIHRlcm1zIG5vdCBkZWZpbmVkIGluIHRoZXNlIFN1cHBsZW1lbnRhbCBUZXJtcyBzaGFsbCBoYXZlIHRoZSBzYW1lIG1lYW5pbmdzIGFzY3JpYmVkIHRvIHRoZW0gaW4gdGhlIEFncmVlbWVudC4gVGhlc2UgU3VwcGxlbWVudGFsIFRlcm1zIHNoYWxsIHN1cGVyc2VkZSBhbnkgaW5jb25zaXN0ZW50IG9yIGNvbmZsaWN0aW5nIHRlcm1zIGluIHRoZSBBZ3JlZW1lbnQsIG9yIGluIGFueSBsaWNlbnNlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFNvZnR3YXJlLgorCisxLiBTb2Z0d2FyZSBJbnRlcm5hbCBVc2UgYW5kIERldmVsb3BtZW50IExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byBTZWN0aW9uIDMgKEphdmEoVE0pIFRlY2hub2xvZ3kgUmVzdHJpY3Rpb25zKSBvZiB0aGVzZSBTdXBwbGVtZW50YWwgVGVybXMsIFN1biBncmFudHMgeW91IGEgbm9uLWV4Y2x1c2l2ZSwgbm9uLXRyYW5zZmVyYWJsZSwgbGltaXRlZCBsaWNlbnNlIHRvIHJlcHJvZHVjZSBpbnRlcm5hbGx5IGFuZCB1c2UgaW50ZXJuYWxseSB0aGUgYmluYXJ5IGZvcm0gb2YgdGhlIFNvZnR3YXJlIGNvbXBsZXRlIGFuZCB1bm1vZGlmaWVkIGZvciB0aGUgc29sZSBwdXJwb3NlIG9mIGRlc2lnbmluZywgZGV2ZWxvcGluZyBhbmQgdGVzdGluZyB5b3VyIEphdmEgYXBwbGV0cyBhbmQgYXBwbGljYXRpb25zIGludGVuZGVkIHRvIHJ1biBvbiB0aGUgSmF2YSBwbGF0Zm9ybSAoIlByb2dyYW1zIikuCisKKzIuIExpY2Vuc2UgdG8gRGlzdHJpYnV0ZSBTb2Z0d2FyZS4gIEluIGFkZGl0aW9uIHRvIHRoZSBsaWNlbnNlIGdyYW50ZWQgaW4gU2VjdGlvbiAxIChTb2Z0d2FyZSBJbnRlcm5hbCBVc2UgYW5kIERldmVsb3BtZW50IExpY2Vuc2UgR3JhbnQpIG9mIHRoZXNlIFN1cHBsZW1lbnRhbCBUZXJtcywgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gU2VjdGlvbiAzIChKYXZhIFRlY2hub2xvZ3kgUmVzdHJpY3Rpb25zKSBvZiB0aGVzZSBTdXBwbGVtZW50YWwgVGVybXMsIFN1biBncmFudHMgeW91IGEgbm9uLWV4Y2x1c2l2ZSwgbm9uLXRyYW5zZmVyYWJsZSwgbGltaXRlZCBsaWNlbnNlIHRvIHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgaW4gYmluYXJ5IGNvZGUgZm9ybSBvbmx5LCBwcm92aWRlZCB0aGF0IHlvdSAoaSkgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgY29tcGxldGUgYW5kIHVubW9kaWZpZWQgYW5kIG9ubHkgYnVuZGxlZCBhcyBwYXJ0IG9mIHlvdXIgUHJvZ3JhbXMsIChpaSkgZG8gbm90IGRpc3RyaWJ1dGUgYWRkaXRpb25hbCBzb2Z0d2FyZSBpbnRlbmRlZCB0byByZXBsYWNlIGFueSBjb21wb25lbnQocykgb2YgdGhlIFNvZnR3YXJlLCAoaWlpKSBkbyBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueSBwcm9wcmlldGFyeSBsZWdlbmRzIG9yIG5vdGljZXMgY29udGFpbmVkIGluIHRoZSBTb2Z0d2FyZSwgKGl2KSBvbmx5IGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIHN1YmplY3QgdG8gYSBsaWNlbnNlIGFncmVlbWVudCB0aGF0IHByb3RlY3RzIFN1bidzIGludGVyZXN0cyBjb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIGNvbnRhaW5lZCBpbiB0aGlzIEFncmVlbWVudCwgYW5kICh2KSBhZ3JlZSB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBTdW4gYW5kIGl0cyBsaWNlbnNvcnMgZnJvbSBhbmQgYWdhaW5zdCBhbnkgZGFtYWdlcywgY29zdHMsIGxpYWJpbGl0aWVzLCBzZXR0bGVtZW50IGFtb3VudHMgYW5kL29yIGV4cGVuc2VzIChpbmNsdWRpbmcgYXR0b3JuZXlzJyBmZWVzKSBpbmN1cnJlZCBpbiBjb25uZWN0aW9uIHdpdGggYW55IGNsYWltLCBsYXdzdWl0IG9yIGFjdGlvbiBieSBhbnkgdGhpcmQgcGFydHkgdGhhdCBhcmlzZXMgb3IgcmVzdWx0cyBmcm9tIHRoZSB1c2Ugb3IgZGlzdHJpYnV0aW9uIG9mIGFueSBhbmQgYWxsIFByb2dyYW1zIGFuZC9vciBTb2Z0d2FyZS4KKworMy4gSmF2YSBUZWNobm9sb2d5IFJlc3RyaWN0aW9ucy4gWW91IG1heSBub3QgbW9kaWZ5IHRoZSBKYXZhIFBsYXRmb3JtIEludGVyZmFjZSAoIkpQSSIsIGlkZW50aWZpZWQgYXMgY2xhc3NlcyBjb250YWluZWQgd2l0aGluIHRoZSAiamF2YSIgcGFja2FnZSBvciBhbnkgc3VicGFja2FnZXMgb2YgdGhlICJqYXZhIiBwYWNrYWdlKSwgYnkgY3JlYXRpbmcgYWRkaXRpb25hbCBjbGFzc2VzIHdpdGhpbiB0aGUgSlBJIG9yIG90aGVyd2lzZSBjYXVzaW5nIHRoZSBhZGRpdGlvbiB0byBvciBtb2RpZmljYXRpb24gb2YgdGhlIGNsYXNzZXMgaW4gdGhlIEpQSS4gIEluIHRoZSBldmVudCB0aGF0IHlvdSBjcmVhdGUgYW4gYWRkaXRpb25hbCBjbGFzcyBhbmQgYXNzb2NpYXRlZCBBUEkocykgd2hpY2ggKGkpIGV4dGVuZHMgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIEphdmEgcGxhdGZvcm0sIGFuZCAoaWkpIGlzIGV4cG9zZWQgdG8gdGhpcmQgcGFydHkgc29mdHdhcmUgZGV2ZWxvcGVycyBmb3IgdGhlIHB1cnBvc2Ugb2YgZGV2ZWxvcGluZyBhZGRpdGlvbmFsIHNvZnR3YXJlIHdoaWNoIGludm9rZXMgc3VjaCBhZGRpdGlvbmFsIEFQSSwgeW91IG11c3QgcHJvbXB0bHkgcHVibGlzaCBicm9hZGx5IGFuIGFjY3VyYXRlIHNwZWNpZmljYXRpb24gZm9yIHN1Y2ggQVBJIGZvciBmcmVlIHVzZSBieSBhbGwgZGV2ZWxvcGVycy4gWW91IG1heSBub3QgY3JlYXRlLCBvciBhdXRob3JpemUgeW91ciBsaWNlbnNlZXMgdG8gY3JlYXRlLCBhZGRpdGlvbmFsIGNsYXNzZXMsIGludGVyZmFjZXMsIG9yIHN1YnBhY2thZ2VzIHRoYXQgYXJlIGluIGFueSB3YXkgaWRlbnRpZmllZCBhcyAiamF2YSIsICJqYXZheCIsICJzdW4iIG9yIHNpbWlsYXIgY29udmVudGlvbiBhcyBzcGVjaWZpZWQgYnkgU3VuIGluIGFueSBuYW1pbmcgY29udmVudGlvbiBkZXNpZ25hdGlvbi4KKworNC4gIEphdmEgUnVudGltZSBBdmFpbGFiaWxpdHkuICBSZWZlciB0byB0aGUgYXBwcm9wcmlhdGUgdmVyc2lvbiBvZiB0aGUgSmF2YSBSdW50aW1lIEVudmlyb25tZW50IGJpbmFyeSBjb2RlIGxpY2Vuc2UgKGN1cnJlbnRseSBsb2NhdGVkIGF0IGh0dHA6Ly93d3cuamF2YS5zdW4uY29tL2pkay9pbmRleC5odG1sKSBmb3IgdGhlIGF2YWlsYWJpbGl0eSBvZiBydW50aW1lIGNvZGUgd2hpY2ggbWF5IGJlIGRpc3RyaWJ1dGVkIHdpdGggSmF2YSBhcHBsZXRzIGFuZCBhcHBsaWNhdGlvbnMuCisKKzUuIFRyYWRlbWFya3MgYW5kIExvZ29zLiBZb3UgYWNrbm93bGVkZ2UgYW5kIGFncmVlIGFzIGJldHdlZW4geW91IGFuZCBTdW4gdGhhdCBTdW4gb3ducyB0aGUgU1VOLCBTT0xBUklTLCBKQVZBLCBKSU5JLCBGT1JURSwgU1RBUk9GRklDRSwgU1RBUlBPUlRBTCBhbmQgaVBMQU5FVCB0cmFkZW1hcmtzIGFuZCBhbGwgU1VOLCBTT0xBUklTLCBKQVZBLCBKSU5JLCBGT1JURSwgU1RBUk9GRklDRSwgU1RBUlBPUlRBTCBhbmQgaVBMQU5FVC1yZWxhdGVkIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIGxvZ29zIGFuZCBvdGhlciBicmFuZCBkZXNpZ25hdGlvbnMgKCJTdW4gTWFya3MiKSwgYW5kIHlvdSBhZ3JlZSB0byBjb21wbHkgd2l0aCB0aGUgU3VuIFRyYWRlbWFyayBhbmQgTG9nbyBVc2FnZSBSZXF1aXJlbWVudHMgY3VycmVudGx5IGxvY2F0ZWQgYXQgaHR0cDovL3d3dy5zdW4uY29tL3BvbGljaWVzL3RyYWRlbWFya3MuIEFueSB1c2UgeW91IG1ha2Ugb2YgdGhlIFN1biBNYXJrcyBpbnVyZXMgdG8gU3VuJ3MgYmVuZWZpdC4KKworNi4gU291cmNlIENvZGUuIFNvZnR3YXJlIG1heSBjb250YWluIHNvdXJjZSBjb2RlIHRoYXQgaXMgcHJvdmlkZWQgc29sZWx5IGZvciByZWZlcmVuY2UgcHVycG9zZXMgcHVyc3VhbnQgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LiAgU291cmNlIGNvZGUgbWF5IG5vdCBiZSByZWRpc3RyaWJ1dGVkIHVubGVzcyBleHByZXNzbHkgcHJvdmlkZWQgZm9yIGluIHRoaXMgQWdyZWVtZW50LgorCis3LiAgVGVybWluYXRpb24gZm9yIEluZnJpbmdlbWVudC4gIEVpdGhlciBwYXJ0eSBtYXkgdGVybWluYXRlIHRoaXMgQWdyZWVtZW50IGltbWVkaWF0ZWx5IHNob3VsZCBhbnkgU29mdHdhcmUgYmVjb21lLCBvciBpbiBlaXRoZXIgcGFydHkncyBvcGluaW9uIGJlIGxpa2VseSB0byBiZWNvbWUsIHRoZSBzdWJqZWN0IG9mIGEgY2xhaW0gb2YgaW5mcmluZ2VtZW50IG9mIGFueSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHQuCisKK0ZvciBpbnF1aXJpZXMgcGxlYXNlIGNvbnRhY3Q6IFN1biBNaWNyb3N5c3RlbXMsIEluYy4sLiAgIDQxNTAgTmV0d29yayBDaXJjbGUsIFNhbnRhIENsYXJhLCBDYWxpZm9ybmlhIDk1MDU0LCBVLlMuQQorKEZvcm0gSUQjMDExODAxKQpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvc3VuLWJjbGEtamF2YS12bSBiL2xpY2Vuc2VzL3N1bi1iY2xhLWphdmEtdm0KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmNlODY3YQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL3N1bi1iY2xhLWphdmEtdm0KQEAgLTAsMCArMSwzMzQgQEAKKyAgIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gIEJpbmFyeSBDb2RlIExpY2Vuc2UgQWdyZWVtZW50CisKK1JFQUQgIFRIRSAgVEVSTVMgIE9GICBUSElTICAgQUdSRUVNRU5UICAgQU5EICBBTlkgICBQUk9WSURFRAorU1VQUExFTUVOVEFMICAgTElDRU5TRSAgVEVSTVMgICAoQ09MTEVDVElWRUxZICAgIkFHUkVFTUVOVCIpCitDQVJFRlVMTFkgIEJFRk9SRSAgT1BFTklORyBUSEUgU09GVFdBUkUgIE1FRElBICBQQUNLQUdFLiAgQlkKK09QRU5JTkcgVEhFIFNPRlRXQVJFICBNRURJQSAgUEFDS0FHRSwgWU9VIEFHUkVFIFRPIFRIRSBURVJNUworT0YgIFRISVMgIEFHUkVFTUVOVC4gIElGICBZT1UgIEFSRSAgQUNDRVNTSU5HICBUSEUgIFNPRlRXQVJFCitFTEVDVFJPTklDQUxMWSwgIElORElDQVRFIFlPVVIgIEFDQ0VQVEFOQ0UgT0YgVEhFU0UgVEVSTVMgQlkKK1NFTEVDVElORyBUSEUgIkFDQ0VQVCIgQlVUVE9OIEFUIFRIRSBFTkQgT0YgVEhJUyAgQUdSRUVNRU5ULgorSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBBTEwgVEhFU0UgVEVSTVMsIFBST01QVExZICBSRVRVUk4gVEhFCitVTlVTRUQgIFNPRlRXQVJFIFRPIFlPVVIgUExBQ0UgT0YgUFVSQ0hBU0UgIEZPUiBBIFJFRlVORCBPUiwKK0lGIFRIRSAgU09GVFdBUkUgIElTICBBQ0NFU1NFRCAgRUxFQ1RST05JQ0FMTFksICBTRUxFQ1QgIFRIRQorIkRFQ0xJTkUiIEJVVFRPTiBBVCBUSEUgRU5EIE9GIFRISVMgQUdSRUVNRU5ULgorCisxLiAgTElDRU5TRSBUTyBVU0UuICBTdW4gZ3JhbnRzIHlvdSBhIG5vbi1leGNsdXNpdmUgYW5kIG5vbi0KK3RyYW5zZmVyYWJsZSAgbGljZW5zZSAgZm9yICB0aGUgIGludGVybmFsICB1c2UgIG9ubHkgIG9mIHRoZQorYWNjb21wYW55aW5nICAgc29mdHdhcmUgIGFuZCAgZG9jdW1lbnRhdGlvbiAgYW5kICBhbnkgIGVycm9yCitjb3JyZWN0aW9ucyAgcHJvdmlkZWQgYnkgU3VuICAoY29sbGVjdGl2ZWx5ICAiU29mdHdhcmUiKSwgYnkKK3RoZSBudW1iZXIgb2YgdXNlcnMgYW5kIHRoZSBjbGFzcyBvZiBjb21wdXRlciAgaGFyZHdhcmUgIGZvcgord2hpY2ggdGhlIGNvcnJlc3BvbmRpbmcgZmVlIGhhcyBiZWVuIHBhaWQuCisKKzIuICBSRVNUUklDVElPTlMuICBTb2Z0d2FyZSBpcyBjb25maWRlbnRpYWwgYW5kIGNvcHlyaWdodGVkLgorVGl0bGUgdG8gU29mdHdhcmUgYW5kIGFsbCBhc3NvY2lhdGVkICBpbnRlbGxlY3R1YWwgIHByb3BlcnR5CityaWdodHMgaXMgcmV0YWluZWQgIGJ5IFN1biBhbmQvb3IgaXRzICBsaWNlbnNvcnMuICBFeGNlcHQgYXMKK3NwZWNpZmljYWxseSAgYXV0aG9yaXplZCBpbiBhbnkgU3VwcGxlbWVudGFsICBMaWNlbnNlIFRlcm1zLAoreW91IG1heSBub3QgbWFrZSAgY29waWVzIG9mICBTb2Z0d2FyZSwgIG90aGVyICB0aGFuIGEgc2luZ2xlCitjb3B5IG9mIFNvZnR3YXJlIGZvciBhcmNoaXZhbCBwdXJwb3Nlcy4gIFVubGVzcyAgZW5mb3JjZW1lbnQKK2lzICBwcm9oaWJpdGVkICBieSAgYXBwbGljYWJsZSAgbGF3LCAgeW91ICBtYXkgIG5vdCAgbW9kaWZ5LAorZGVjb21waWxlLCAgIG9yICAgcmV2ZXJzZSAgIGVuZ2luZWVyICAgIFNvZnR3YXJlLiAgIExpY2Vuc2VlCithY2tub3dsZWRnZXMgIHRoYXQgIExpY2Vuc2VkICBTb2Z0d2FyZSAgaXMgbm90ICBkZXNpZ25lZCAgb3IKK2ludGVuZGVkIGZvciB1c2UgaW4gdGhlIGRlc2lnbiwgIGNvbnN0cnVjdGlvbiwgIG9wZXJhdGlvbiBvcgorbWFpbnRlbmFuY2Ugb2YgYW55IG51Y2xlYXIgZmFjaWxpdHkuICBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCitkaXNjbGFpbXMgIGFueSBleHByZXNzIG9yIGltcGxpZWQgIHdhcnJhbnR5ICBvZiBmaXRuZXNzICBmb3IKK3N1Y2ggIHVzZXMuICBObyAgcmlnaHQsICB0aXRsZSAgb3IgIGludGVyZXN0ICBpbiBvciAgdG8gIGFueQordHJhZGVtYXJrLCAgc2VydmljZSAgbWFyaywgbG9nbyBvciB0cmFkZSAgbmFtZSBvZiBTdW4gb3IgaXRzCitsaWNlbnNvcnMgaXMgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudC4KKworMy4gIExJTUlURUQgV0FSUkFOVFkuICBTdW4gd2FycmFudHMgdG8geW91IHRoYXQgZm9yIGEgcGVyaW9kCitvZiBuaW5ldHkgKDkwKSBkYXlzIGZyb20gdGhlIGRhdGUgb2YgcHVyY2hhc2UsIGFzICBldmlkZW5jZWQKK2J5IGEgY29weSBvZiB0aGUgIHJlY2VpcHQsICB0aGUgbWVkaWEgb24gd2hpY2ggIFNvZnR3YXJlICBpcworZnVybmlzaGVkIChpZiBhbnkpIHdpbGwgYmUgZnJlZSBvZiBkZWZlY3RzIGluIG1hdGVyaWFscyAgYW5kCit3b3JrbWFuc2hpcCAgdW5kZXIgIG5vcm1hbCAgdXNlLiAgRXhjZXB0IGZvciB0aGUgIGZvcmVnb2luZywKK1NvZnR3YXJlIGlzICBwcm92aWRlZCAgIkFTIElTIi4gIFlvdXIgIGV4Y2x1c2l2ZSAgcmVtZWR5IGFuZAorU3VuJ3MgZW50aXJlICBsaWFiaWxpdHkgdW5kZXIgdGhpcyBsaW1pdGVkICB3YXJyYW50eSB3aWxsIGJlCithdCBTdW4ncyBvcHRpb24gdG8gcmVwbGFjZSAgU29mdHdhcmUgbWVkaWEgb3IgcmVmdW5kIHRoZSBmZWUKK3BhaWQgZm9yIFNvZnR3YXJlLgorCis0LiAgRElTQ0xBSU1FUiAgIE9GICBXQVJSQU5UWS4gIFVOTEVTUyAgIFNQRUNJRklFRCAgSU4gIFRISVMKK0FHUkVFTUVOVCwgICAgQUxMICAgIEVYUFJFU1MgICAgT1IgICAgSU1QTElFRCAgICBDT05ESVRJT05TLAorUkVQUkVTRU5UQVRJT05TICAgQU5EICBXQVJSQU5USUVTLCAgIElOQ0xVRElORyAgQU5ZICBJTVBMSUVECitXQVJSQU5UWSAgT0YgIE1FUkNIQU5UQUJJTElUWSwgICBGSVRORVNTICBGT1IgIEEgIFBBUlRJQ1VMQVIKK1BVUlBPU0UgT1IgIE5PTi1JTkZSSU5HRU1FTlQgIEFSRSBESVNDTEFJTUVELCAgRVhDRVBUIFRPIFRIRQorRVhURU5UICBUSEFUICBUSEVTRSAgRElTQ0xBSU1FUlMgIEFSRSAgSEVMRCAgVE8gIEJFICBMRUdBTExZCitJTlZBTElELgorCis1LiAgTElNSVRBVElPTiBPRiAgTElBQklMSVRZLiAgVE8gVEhFIEVYVEVOVCBOT1QgIFBST0hJQklURUQKK0JZIExBVywgSU4gTk8gRVZFTlQgV0lMTCBTVU4gT1IgSVRTICBMSUNFTlNPUlMgQkUgTElBQkxFIEZPUgorQU5ZIExPU1QgUkVWRU5VRSwgUFJPRklUIE9SIERBVEEsIE9SIEZPUiBTUEVDSUFMLCAgSU5ESVJFQ1QsCitDT05TRVFVRU5USUFMLCAgIElOQ0lERU5UQUwgIE9SICBQVU5JVElWRSAgREFNQUdFUywgIEhPV0VWRVIKK0NBVVNFRCBSRUdBUkRMRVNTIE9GIFRIRSBUSEVPUlkgT0YgTElBQklMSVRZLCBBUklTSU5HIE9VVCBPRgorT1IgUkVMQVRFRCBUTyBUSEUgVVNFIE9GIE9SIElOQUJJTElUWSBUTyBVU0UgU09GVFdBUkUsICBFVkVOCitJRiBTVU4gSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KK0luICBubyAgZXZlbnQgIHdpbGwgIFN1bidzICBsaWFiaWxpdHkgIHRvICB5b3UsICB3aGV0aGVyICBpbgorY29udHJhY3QsIHRvcnQgKGluY2x1ZGluZyAgbmVnbGlnZW5jZSksIG9yIG90aGVyd2lzZSwgZXhjZWVkCit0aGUgYW1vdW50IHBhaWQgYnkgeW91IGZvciAgU29mdHdhcmUgIHVuZGVyIHRoaXMgIEFncmVlbWVudC4KK1RoZSAgZm9yZWdvaW5nICBsaW1pdGF0aW9ucyAgd2lsbCAgYXBwbHkgIGV2ZW4gaWYgdGhlICBhYm92ZQorc3RhdGVkIHdhcnJhbnR5IGZhaWxzIG9mIGl0cyBlc3NlbnRpYWwgcHVycG9zZS4KKworNi4gIFRlcm1pbmF0aW9uLiAgIFRoaXMgICBBZ3JlZW1lbnQgICBpcyAgIGVmZmVjdGl2ZSAgIHVudGlsCit0ZXJtaW5hdGVkLiAgWW91IG1heSB0ZXJtaW5hdGUgdGhpcyBBZ3JlZW1lbnQgYXQgYW55IHRpbWUgYnkKK2Rlc3Ryb3lpbmcgIGFsbCAgY29waWVzIG9mICBTb2Z0d2FyZS4gIFRoaXMgIEFncmVlbWVudCAgd2lsbAordGVybWluYXRlIGltbWVkaWF0ZWx5IHdpdGhvdXQgbm90aWNlIGZyb20gU3VuIGlmIHlvdSBmYWlsIHRvCitjb21wbHkgICB3aXRoICBhbnkgICBwcm92aXNpb24gICBvZiAgdGhpcyAgIEFncmVlbWVudC4gIFVwb24KK1Rlcm1pbmF0aW9uLCB5b3UgbXVzdCBkZXN0cm95IGFsbCBjb3BpZXMgb2YgU29mdHdhcmUuCisKKzcuICBFeHBvcnQgIFJlZ3VsYXRpb25zLiAgQWxsIFNvZnR3YXJlICBhbmQgIHRlY2huaWNhbCAgZGF0YQorZGVsaXZlcmVkICB1bmRlciB0aGlzICBBZ3JlZW1lbnQgIGFyZSAgc3ViamVjdCAgdG8gVVMgZXhwb3J0Citjb250cm9sICBsYXdzICBhbmQgIG1heSAgYmUgIHN1YmplY3QgIHRvICBleHBvcnQgIG9yICBpbXBvcnQKK3JlZ3VsYXRpb25zICAgaW4gIG90aGVyICAgY291bnRyaWVzLiAgWW91ICBhZ3JlZSAgdG8gIGNvbXBseQorc3RyaWN0bHkgd2l0aCBhbGwgc3VjaCBsYXdzIGFuZCByZWd1bGF0aW9ucyBhbmQgIGFja25vd2xlZGdlCit0aGF0IHlvdSBoYXZlIHRoZSAgcmVzcG9uc2liaWxpdHkgdG8gb2J0YWluIHN1Y2ggbGljZW5zZXMgdG8KK2V4cG9ydCwgIHJlLWV4cG9ydCwgIG9yICBpbXBvcnQgIGFzIG1heSAgYmUgIHJlcXVpcmVkICBhZnRlcgorZGVsaXZlcnkgdG8geW91LgorCis4LiAgVS5TLiAgR292ZXJubWVudCAgIFJlc3RyaWN0ZWQgIFJpZ2h0cy4gIElmICBTb2Z0d2FyZSAgaXMKK2JlaW5nIGFjcXVpcmVkIGJ5IG9yIG9uIGJlaGFsZiBvZiB0aGUgVS5TLiAgR292ZXJubWVudCBvciBieQorYSBVLlMuICBHb3Zlcm5tZW50IHByaW1lIGNvbnRyYWN0b3Igb3Igc3ViY29udHJhY3RvciAoYXQgYW55Cit0aWVyKSwgIHRoZW4gIHRoZSAgIEdvdmVybm1lbnQncyAgIHJpZ2h0cyAgaW4gIFNvZnR3YXJlICBhbmQKK2FjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIHdpbGwgYmUgb25seSBhcyBzZXQgZm9ydGggaW4gdGhpcworQWdyZWVtZW50OyAgdGhpcyAgaXMgaW4gIGFjY29yZGFuY2UgIHdpdGggIDQ4ICBDRlIgIDIyNy43MjAxCit0aHJvdWdoICAgMjI3LjcyMDItNCAgIChmb3IgICBEZXBhcnRtZW50ICBvZiAgRGVmZW5zZSAgKERPRCkKK2FjcXVpc2l0aW9ucykgIGFuZCB3aXRoIDQ4IENGUiAyLjEwMSBhbmQgMTIuMjEyIChmb3Igbm9uLURPRAorYWNxdWlzaXRpb25zKS4KKworOS4gIEdvdmVybmluZyAgTGF3LiAgQW55IGFjdGlvbiAgcmVsYXRlZCAgdG8gdGhpcyAgQWdyZWVtZW50Cit3aWxsIGJlIGdvdmVybmVkICBieSAgQ2FsaWZvcm5pYSAgbGF3IGFuZCAgY29udHJvbGxpbmcgIFUuUy4KK2ZlZGVyYWwgIGxhdy4gIE5vIGNob2ljZSAgb2YgbGF3ICBydWxlcyBvZiBhbnkgIGp1cmlzZGljdGlvbgord2lsbCBhcHBseS4KKworMTAuICBTZXZlcmFiaWxpdHkuICBJZiBhbnkgIHByb3Zpc2lvbiBvZiB0aGlzICBBZ3JlZW1lbnQgIGlzCitoZWxkIHRvIGJlICB1bmVuZm9yY2VhYmxlLCAgdGhpcyAgQWdyZWVtZW50ICB3aWxsICByZW1haW4gaW4KK2VmZmVjdCB3aXRoIHRoZSBwcm92aXNpb24gIG9taXR0ZWQsICB1bmxlc3MgIG9taXNzaW9uICB3b3VsZAorZnJ1c3RyYXRlICB0aGUgIGludGVudCBvZiB0aGUgIHBhcnRpZXMsICBpbiB3aGljaCAgY2FzZSB0aGlzCitBZ3JlZW1lbnQgd2lsbCBpbW1lZGlhdGVseSB0ZXJtaW5hdGUuCisKKzExLiAgSW50ZWdyYXRpb24uICBUaGlzICBBZ3JlZW1lbnQgIGlzIHRoZSBlbnRpcmUgIGFncmVlbWVudAorYmV0d2VlbiAgeW91IGFuZCBTdW4gIHJlbGF0aW5nICB0byBpdHMgIHN1YmplY3QgIG1hdHRlci4gIEl0CitzdXBlcnNlZGVzICBhbGwgIHByaW9yIG9yICBjb250ZW1wb3JhbmVvdXMgIG9yYWwgb3IgIHdyaXR0ZW4KK2NvbW11bmljYXRpb25zLCAgcHJvcG9zYWxzLCAgcmVwcmVzZW50YXRpb25zICBhbmQgd2FycmFudGllcworYW5kIHByZXZhaWxzIG92ZXIgYW55IGNvbmZsaWN0aW5nIG9yIGFkZGl0aW9uYWwgdGVybXMgb2YgYW55CitxdW90ZSwgb3JkZXIsIGFja25vd2xlZGdtZW50LCBvciBvdGhlciBjb21tdW5pY2F0aW9uIGJldHdlZW4KK3RoZSBwYXJ0aWVzICByZWxhdGluZyB0byBpdHMgc3ViamVjdCAgbWF0dGVyIGR1cmluZyB0aGUgdGVybQorb2YgdGhpcyBBZ3JlZW1lbnQuICBObyAgbW9kaWZpY2F0aW9uICBvZiB0aGlzIEFncmVlbWVudCB3aWxsCitiZSBiaW5kaW5nLCAgdW5sZXNzIGluIHdyaXRpbmcgIGFuZCBzaWduZWQgYnkgYW4gIGF1dGhvcml6ZWQKK3JlcHJlc2VudGF0aXZlIG9mIGVhY2ggcGFydHkuCisKK0pBVkFUTSAyIFNPRlRXQVJFIERFVkVMT1BNRU5UIEtJVCAoSjJTREspLCBTVEFOREFSRCBFRElUSU9OLAorVkVSU0lPTiAxLjQuMV9YIFNVUFBMRU1FTlRBTCBMSUNFTlNFIFRFUk1TCisKK1RoZXNlIHN1cHBsZW1lbnRhbCBsaWNlbnNlIHRlcm1zICgiU3VwcGxlbWVudGFsICBUZXJtcyIpIGFkZAordG8gb3IgbW9kaWZ5IHRoZSB0ZXJtcyBvZiB0aGUgQmluYXJ5IENvZGUgTGljZW5zZSAgQWdyZWVtZW50CisoY29sbGVjdGl2ZWx5LCAgIHRoZSAgIkFncmVlbWVudCIpLiAgQ2FwaXRhbGl6ZWQgIHRlcm1zICBub3QKK2RlZmluZWQgIGluIHRoZXNlICBTdXBwbGVtZW50YWwgIFRlcm1zICBzaGFsbCAgaGF2ZSB0aGUgc2FtZQorbWVhbmluZ3MgICBhc2NyaWJlZCAgIHRvICB0aGVtICAgaW4gIHRoZSAgIEFncmVlbWVudC4gIFRoZXNlCitTdXBwbGVtZW50YWwgIFRlcm1zICBzaGFsbCAgc3VwZXJzZWRlICBhbnkgIGluY29uc2lzdGVudCAgb3IKK2NvbmZsaWN0aW5nICB0ZXJtcyAgaW4gIHRoZSAgQWdyZWVtZW50LCAgb3IgaW4gIGFueSAgbGljZW5zZQorY29udGFpbmVkIHdpdGhpbiB0aGUgU29mdHdhcmUuCisKKzEuICBTb2Z0d2FyZSAgSW50ZXJuYWwgVXNlIGFuZCAgRGV2ZWxvcG1lbnQgIExpY2Vuc2UgIEdyYW50LgorU3ViamVjdCAgdG8gdGhlICB0ZXJtcyAgYW5kICBjb25kaXRpb25zICBvZiB0aGlzICBBZ3JlZW1lbnQsCitpbmNsdWRpbmcsICBidXQgbm90ICBsaW1pdGVkIHRvICBTZWN0aW9uIDQgKEphdmEgIFRlY2hub2xvZ3kKK1Jlc3RyaWN0aW9ucykgb2YgdGhlc2UgU3VwcGxlbWVudGFsICBUZXJtcywgU3VuIGdyYW50cyB5b3UgYQorbm9uLWV4Y2x1c2l2ZSwgIG5vbi0gIHRyYW5zZmVyYWJsZSwgIGxpbWl0ZWQgbGljZW5zZSB3aXRob3V0CitmZWVzIHRvIHJlcHJvZHVjZSAgaW50ZXJuYWxseSBhbmQgdXNlIGludGVybmFsbHkgIHRoZSBiaW5hcnkKK2Zvcm0gb2YgdGhlIFNvZnR3YXJlICBjb21wbGV0ZSBhbmQgIHVubW9kaWZpZWQgIGZvciB0aGUgc29sZQorcHVycG9zZSAgb2YgIGRlc2lnbmluZywgIGRldmVsb3BpbmcgIGFuZCAgdGVzdGluZyAgeW91ciBKYXZhCithcHBsZXRzICBhbmQgIGFwcGxpY2F0aW9ucyAgaW50ZW5kZWQgIHRvICBydW4gIG9uICB0aGUgIEphdmEKK3BsYXRmb3JtICgiUHJvZ3JhbXMiKS4KKworMi4gIExpY2Vuc2UgdG8gIERpc3RyaWJ1dGUgIFNvZnR3YXJlLiAgU3ViamVjdCAgdG8gdGhlIHRlcm1zCithbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQKK3RvICBTZWN0aW9uICA0ICAoSmF2YSAgVGVjaG5vbG9neSAgIFJlc3RyaWN0aW9ucykgIG9mICB0aGVzZQorU3VwcGxlbWVudGFsICAgVGVybXMsICBTdW4gIGdyYW50cyAgIHlvdSAgYSAgIG5vbi1leGNsdXNpdmUsCitub24tdHJhbnNmZXJhYmxlLCAgbGltaXRlZCBsaWNlbnNlIHdpdGhvdXQgZmVlcyB0byByZXByb2R1Y2UKK2FuZCAgIGRpc3RyaWJ1dGUgICB0aGUgIFNvZnR3YXJlLCAgIHByb3ZpZGVkICB0aGF0ICAoaSkgIHlvdQorZGlzdHJpYnV0ZSAgdGhlIFNvZnR3YXJlICBjb21wbGV0ZSAgYW5kICB1bm1vZGlmaWVkICAodW5sZXNzCitvdGhlcndpc2UgIHNwZWNpZmllZCBpbiB0aGUgYXBwbGljYWJsZSBSRUFETUUgZmlsZSkgYW5kIG9ubHkKK2J1bmRsZWQgIGFzIHBhcnQgb2YsIGFuZCBmb3IgdGhlIHNvbGUgIHB1cnBvc2UgIG9mICBydW5uaW5nLAoreW91ciBQcm9ncmFtcywgKGlpKSB0aGUgUHJvZ3JhbXMgYWRkIHNpZ25pZmljYW50IGFuZCBwcmltYXJ5CitmdW5jdGlvbmFsaXR5ICB0byB0aGUgU29mdHdhcmUsICAoaWlpKSB5b3UgZG8gbm90IGRpc3RyaWJ1dGUKK2FkZGl0aW9uYWwgIHNvZnR3YXJlIGludGVuZGVkIHRvIHJlcGxhY2UgYW55IGNvbXBvbmVudChzKSBvZgordGhlIFNvZnR3YXJlICh1bmxlc3MgIG90aGVyd2lzZSAgc3BlY2lmaWVkIGluIHRoZSBhcHBsaWNhYmxlCitSRUFETUUgICBmaWxlKSwgICAoaXYpICB5b3UgIGRvICBub3QgIHJlbW92ZSAgb3IgIGFsdGVyICBhbnkKK3Byb3ByaWV0YXJ5ICBsZWdlbmRzIG9yIG5vdGljZXMgIGNvbnRhaW5lZCBpbiB0aGUgIFNvZnR3YXJlLAorKHYpIHlvdSBvbmx5ICBkaXN0cmlidXRlICB0aGUgU29mdHdhcmUgIHN1YmplY3QgdG8gYSBsaWNlbnNlCithZ3JlZW1lbnQgdGhhdCBwcm90ZWN0cyBTdW4ncyBpbnRlcmVzdHMgIGNvbnNpc3RlbnQgd2l0aCB0aGUKK3Rlcm1zICBjb250YWluZWQgIGluIHRoaXMgIEFncmVlbWVudCwgIGFuZCAodmkpIHlvdSBhZ3JlZSB0bworZGVmZW5kIGFuZCBpbmRlbW5pZnkgU3VuIGFuZCBpdHMgbGljZW5zb3JzICBmcm9tIGFuZCBhZ2FpbnN0CithbnkgZGFtYWdlcywgY29zdHMsICBsaWFiaWxpdGllcywgIHNldHRsZW1lbnQgYW1vdW50cyBhbmQvb3IKK2V4cGVuc2VzIChpbmNsdWRpbmcgIGF0dG9ybmV5cycgZmVlcykgaW5jdXJyZWQgaW4gY29ubmVjdGlvbgord2l0aCBhbnkgY2xhaW0sICBsYXdzdWl0ICBvciBhY3Rpb24gYnkgYW55IHRoaXJkICBwYXJ0eSB0aGF0CithcmlzZXMgb3IgcmVzdWx0cyAgZnJvbSB0aGUgdXNlIG9yICBkaXN0cmlidXRpb24gIG9mIGFueSBhbmQKK2FsbCBQcm9ncmFtcyAgYW5kL29yICBTb2Z0d2FyZS4gICh2aSkgaW5jbHVkZSB0aGUgIGZvbGxvd2luZworc3RhdGVtZW50ICBhcyBwYXJ0IG9mIHByb2R1Y3QgIGRvY3VtZW50YXRpb24gICh3aGV0aGVyICBoYXJkCitjb3B5ICBvciAgZWxlY3Ryb25pYyksICBhcyBhIHBhcnQgIG9mIGEgIGNvcHlyaWdodCAgcGFnZSAgb3IKK3Byb3ByaWV0YXJ5ICByaWdodHMgbm90aWNlIHBhZ2UsIGluIGFuICJBYm91dCIgYm94IG9yIGluIGFueQorb3RoZXIgZm9ybSByZWFzb25hYmx5IGRlc2lnbmVkIHRvIG1ha2UgdGhlIHN0YXRlbWVudCB2aXNpYmxlCit0byAgdXNlcnMgIG9mIHRoZSAgU29mdHdhcmU6ICAiVGhpcyAgcHJvZHVjdCAgaW5jbHVkZXMgIGNvZGUKK2xpY2Vuc2VkICBmcm9tIFJTQSAgU2VjdXJpdHksICBJbmMuIiwgYW5kICh2aWkpICBpbmNsdWRlIHRoZQorc3RhdGVtZW50LCAiU29tZSBwb3J0aW9ucyBsaWNlbnNlZCBmcm9tIElCTSBhcmUgYXZhaWxhYmxlIGF0CitodHRwOi8vb3NzLnNvZnR3YXJlLmlibS5jb20vaWN1NGovIi4KKworMy4gIExpY2Vuc2UgdG8gRGlzdHJpYnV0ZSAgUmVkaXN0cmlidXRhYmxlcy4gIFN1YmplY3QgdG8gdGhlCit0ZXJtcyBhbmQgIGNvbmRpdGlvbnMgb2YgdGhpcyAgQWdyZWVtZW50LCAgaW5jbHVkaW5nIGJ1dCBub3QKK2xpbWl0ZWQgdG8gU2VjdGlvbiA0IChKYXZhIFRlY2hub2xvZ3kgUmVzdHJpY3Rpb25zKSBvZiB0aGVzZQorU3VwcGxlbWVudGFsICAgVGVybXMsICBTdW4gIGdyYW50cyAgIHlvdSAgYSAgIG5vbi1leGNsdXNpdmUsCitub24tdHJhbnNmZXJhYmxlLCAgbGltaXRlZCBsaWNlbnNlIHdpdGhvdXQgZmVlcyB0byByZXByb2R1Y2UKK2FuZCAgZGlzdHJpYnV0ZSAgdGhvc2UgIGZpbGVzICBzcGVjaWZpY2FsbHkgICBpZGVudGlmaWVkICBhcworcmVkaXN0cmlidXRhYmxlICAgIGluICAgIHRoZSAgICBTb2Z0d2FyZSAgICAiUkVBRE1FIiAgICBmaWxlCisoIlJlZGlzdHJpYnV0YWJsZXMiKSAgcHJvdmlkZWQgdGhhdDogIChpKSB5b3UgZGlzdHJpYnV0ZSB0aGUKK1JlZGlzdHJpYnV0YWJsZXMgIGNvbXBsZXRlIGFuZCB1bm1vZGlmaWVkICAodW5sZXNzIG90aGVyd2lzZQorc3BlY2lmaWVkIGluIHRoZSAgYXBwbGljYWJsZSAgUkVBRE1FIGZpbGUpLCBhbmQgb25seSBidW5kbGVkCithcyBwYXJ0IG9mIFByb2dyYW1zLCAoaWkpIHlvdSBkbyBub3QgIGRpc3RyaWJ1dGUgIGFkZGl0aW9uYWwKK3NvZnR3YXJlICBpbnRlbmRlZCAgdG8gIHN1cGVyc2VkZSAgYW55ICBjb21wb25lbnQocykgIG9mIHRoZQorUmVkaXN0cmlidXRhYmxlcyAgICh1bmxlc3MgICBvdGhlcndpc2UgICBzcGVjaWZpZWQgICBpbiAgdGhlCithcHBsaWNhYmxlICBSRUFETUUgIGZpbGUpLCAgKGlpaSkgeW91IGRvIG5vdCByZW1vdmUgb3IgYWx0ZXIKK2FueSAgcHJvcHJpZXRhcnkgIGxlZ2VuZHMgb3Igbm90aWNlcyAgY29udGFpbmVkIGluIG9yIG9uIHRoZQorUmVkaXN0cmlidXRhYmxlcywgICAgKGl2KSAgIHlvdSAgICBvbmx5ICAgIGRpc3RyaWJ1dGUgICAgdGhlCitSZWRpc3RyaWJ1dGFibGVzICAgcHVyc3VhbnQgIHRvICBhICBsaWNlbnNlICBhZ3JlZW1lbnQgIHRoYXQKK3Byb3RlY3RzIFN1bidzIGludGVyZXN0cyBjb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIGNvbnRhaW5lZAoraW4gdGhlIEFncmVlbWVudCwgICh2KSB5b3UgYWdyZWUgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgU3VuCithbmQgaXRzICBsaWNlbnNvcnMgIGZyb20gYW5kICBhZ2FpbnN0ICBhbnkgIGRhbWFnZXMsICBjb3N0cywKK2xpYWJpbGl0aWVzLCAgc2V0dGxlbWVudCBhbW91bnRzIGFuZC9vciBleHBlbnNlcyAgKGluY2x1ZGluZworYXR0b3JuZXlzJyAgZmVlcykgIGluY3VycmVkICBpbiAgY29ubmVjdGlvbiAgd2l0aCBhbnkgY2xhaW0sCitsYXdzdWl0IG9yIGFjdGlvbiBieSBhbnkgdGhpcmQgcGFydHkgdGhhdCAgYXJpc2VzIG9yIHJlc3VsdHMKK2Zyb20gdGhlIHVzZSBvciBkaXN0cmlidXRpb24gb2YgYW55IGFuZCBhbGwgUHJvZ3JhbXMgIGFuZC9vcgorU29mdHdhcmUsICAodmkpIGluY2x1ZGUgdGhlICBmb2xsb3dpbmcgIHN0YXRlbWVudCBhcyBwYXJ0IG9mCitwcm9kdWN0IGRvY3VtZW50YXRpb24gICh3aGV0aGVyIGhhcmQgY29weSBvciBlbGVjdHJvbmljKSwgYXMKK2EgcGFydCBvZiBhICBjb3B5cmlnaHQgIHBhZ2Ugb3IgIHByb3ByaWV0YXJ5ICByaWdodHMgIG5vdGljZQorcGFnZSwgaW4gYW4gICJBYm91dCIgIGJveCBvciBpbiBhbnkgIG90aGVyICBmb3JtICByZWFzb25hYmx5CitkZXNpZ25lZCAgdG8gbWFrZSB0aGUgIHN0YXRlbWVudCAgdmlzaWJsZSAgdG8gIHVzZXJzICBvZiB0aGUKK1NvZnR3YXJlOiAgIlRoaXMgcHJvZHVjdCAgaW5jbHVkZXMgIGNvZGUgIGxpY2Vuc2VkICBmcm9tIFJTQQorU2VjdXJpdHksICBJbmMuIiwgYW5kICh2aWkpICBpbmNsdWRlICB0aGUgIHN0YXRlbWVudCwgICJTb21lCitwb3J0aW9ucyAgICBsaWNlbnNlZCAgICBmcm9tICAgIElCTSAgIGFyZSAgICBhdmFpbGFibGUgICAgYXQKK2h0dHA6Ly9vc3Muc29mdHdhcmUuaWJtLmNvbS9pY3U0ai8iLgorCis0LiAgSmF2YSAgVGVjaG5vbG9neSAgUmVzdHJpY3Rpb25zLiAgWW91IG1heSBub3QgIG1vZGlmeSB0aGUKK0phdmEgIFBsYXRmb3JtICBJbnRlcmZhY2UgICgiSlBJIiwgICBpZGVudGlmaWVkICBhcyAgY2xhc3NlcworY29udGFpbmVkICB3aXRoaW4gdGhlICJqYXZhIiAgcGFja2FnZSBvciBhbnkgIHN1YnBhY2thZ2VzIG9mCit0aGUgImphdmEiIHBhY2thZ2UpLCBieSBjcmVhdGluZyAgYWRkaXRpb25hbCAgY2xhc3NlcyB3aXRoaW4KK3RoZSBKUEkgb3Igb3RoZXJ3aXNlIGNhdXNpbmcgdGhlIGFkZGl0aW9uIHRvIG9yIG1vZGlmaWNhdGlvbgorb2YgdGhlICBjbGFzc2VzIGluIHRoZSBKUEkuICBJbiB0aGUgZXZlbnQgdGhhdCB5b3UgY3JlYXRlIGFuCithZGRpdGlvbmFsIGNsYXNzIGFuZCBhc3NvY2lhdGVkIEFQSShzKSB3aGljaCAoaSkgZXh0ZW5kcyB0aGUKK2Z1bmN0aW9uYWxpdHkgIG9mIHRoZSBKYXZhICBwbGF0Zm9ybSwgYW5kIChpaSkgaXMgZXhwb3NlZCB0bwordGhpcmQgIHBhcnR5ICAgc29mdHdhcmUgICBkZXZlbG9wZXJzICAgZm9yICB0aGUgIHB1cnBvc2UgIG9mCitkZXZlbG9waW5nIGFkZGl0aW9uYWwgc29mdHdhcmUgd2hpY2ggaW52b2tlcyBzdWNoIGFkZGl0aW9uYWwKK0FQSSwgIHlvdSAgbXVzdCAgIHByb21wdGx5ICAgcHVibGlzaCAgIGJyb2FkbHkgIGFuICBhY2N1cmF0ZQorc3BlY2lmaWNhdGlvbiAgZm9yIHN1Y2ggQVBJIGZvciBmcmVlIHVzZSBieSBhbGwgIGRldmVsb3BlcnMuCitZb3UgbWF5IG5vdCBjcmVhdGUsIG9yIGF1dGhvcml6ZSAgeW91ciAgbGljZW5zZWVzIHRvIGNyZWF0ZSwKK2FkZGl0aW9uYWwgIGNsYXNzZXMsICBpbnRlcmZhY2VzLCBvciBzdWJwYWNrYWdlcyB0aGF0IGFyZSBpbgorYW55IHdheSAgaWRlbnRpZmllZCAgYXMgImphdmEiLCAgImphdmF4IiwgICJzdW4iIG9yICBzaW1pbGFyCitjb252ZW50aW9uICBhcyAgc3BlY2lmaWVkICBieSBTdW4gaW4gYW55ICBuYW1pbmcgIGNvbnZlbnRpb24KK2Rlc2lnbmF0aW9uLgorCis1LiAgTm90aWNlIG9mICBBdXRvbWF0aWMgIFNvZnR3YXJlICBVcGRhdGVzICBmcm9tICBTdW4uICBZb3UKK2Fja25vd2xlZGdlICB0aGF0IHRoZSBTb2Z0d2FyZSBtYXkgIGF1dG9tYXRpY2FsbHkgIGRvd25sb2FkLAoraW5zdGFsbCwgIGFuZCAgZXhlY3V0ZSAgIGFwcGxldHMsICAgYXBwbGljYXRpb25zLCAgIHNvZnR3YXJlCitleHRlbnNpb25zLCAgYW5kIHVwZGF0ZWQgIHZlcnNpb25zIG9mIHRoZSBTb2Z0d2FyZSAgZnJvbSBTdW4KKygiU29mdHdhcmUgIFVwZGF0ZXMiKSwgIHdoaWNoICBtYXkgIHJlcXVpcmUgIHlvdSAgdG8gIGFjY2VwdAordXBkYXRlZCAgIHRlcm1zICAgYW5kICAgY29uZGl0aW9ucyAgIGZvciAgIGluc3RhbGxhdGlvbi4gIElmCithZGRpdGlvbmFsICAgdGVybXMgIGFuZCAgY29uZGl0aW9ucyAgYXJlICBub3QgIHByZXNlbnRlZCAgb24KK2luc3RhbGxhdGlvbiwgIHRoZSBTb2Z0d2FyZSAgVXBkYXRlcyB3aWxsIGJlIGNvbnNpZGVyZWQgcGFydAorb2YgdGhlIFNvZnR3YXJlIGFuZCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgIGNvbmRpdGlvbnMgIG9mCit0aGUgQWdyZWVtZW50LgorCis2LiAgTm90aWNlIG9mIEF1dG9tYXRpYyBEb3dubG9hZHMuICBZb3UgYWNrbm93bGVkZ2UgdGhhdCwgYnkKK3lvdXIgdXNlIG9mIHRoZSBTb2Z0d2FyZSBhbmQvb3IgYnkgcmVxdWVzdGluZyAgc2VydmljZXMgdGhhdAorcmVxdWlyZSB1c2Ugb2YgdGhlIFNvZnR3YXJlLCB0aGUgU29mdHdhcmUgbWF5ICBhdXRvbWF0aWNhbGx5Citkb3dubG9hZCwgIGluc3RhbGwsIGFuZCBleGVjdXRlIHNvZnR3YXJlICBhcHBsaWNhdGlvbnMgIGZyb20KK3NvdXJjZXMgIG90aGVyICB0aGFuIFN1biAgKCJPdGhlciAgU29mdHdhcmUiKS4gIFN1biBtYWtlcyBubworcmVwcmVzZW50YXRpb25zICBvZiBhIHJlbGF0aW9uc2hpcCAgb2YgYW55IGtpbmQgdG8gbGljZW5zb3JzCitvZiBPdGhlciAgU29mdHdhcmUuICBUTyBUSEUgRVhURU5UIE5PVCBQUk9ISUJJVEVEIEJZIExBVywgSU4KK05PIEVWRU5UIFdJTEwgU1VOIE9SIElUUyAgTElDRU5TT1JTICBCRSBMSUFCTEUgIEZPUiBBTlkgTE9TVAorUkVWRU5VRSwgICBQUk9GSVQgIE9SICBEQVRBLCAgT1IgIEZPUiAgIFNQRUNJQUwsICAgSU5ESVJFQ1QsCitDT05TRVFVRU5USUFMLCAgIElOQ0lERU5UQUwgIE9SICBQVU5JVElWRSAgREFNQUdFUywgIEhPV0VWRVIKK0NBVVNFRCBSRUdBUkRMRVNTIE9GIFRIRSBUSEVPUlkgT0YgTElBQklMSVRZLCBBUklTSU5HIE9VVCBPRgorT1IgUkVMQVRFRCBUTyBUSEUgVVNFIE9GIE9SIElOQUJJTElUWSBUTyBVU0UgT1RIRVIgU09GVFdBUkUsCitFVkVOIElGIFNVTiBIQVMgIEJFRU4gIEFEVklTRUQgIE9GIFRIRSAgUE9TU0lCSUxJVFkgIE9GIFNVQ0gKK0RBTUFHRVMuCisKKzcuICBEaXN0cmlidXRpb24gIGJ5ICBQdWJsaXNoZXJzLiAgVGhpcyBzZWN0aW9uICBwZXJ0YWlucyB0bworeW91ciAgZGlzdHJpYnV0aW9uIG9mIHRoZSBTb2Z0d2FyZSB3aXRoIHlvdXIgcHJpbnRlZCBib29rIG9yCittYWdhemluZSAoYXMgdGhvc2UgdGVybXMgYXJlIGNvbW1vbmx5IHVzZWQgaW4gdGhlICBpbmR1c3RyeSkKK3JlbGF0aW5nIHRvIEphdmEgdGVjaG5vbG9neSAoIlB1YmxpY2F0aW9uIikuICBTdWJqZWN0IHRvIGFuZAorY29uZGl0aW9uZWQgdXBvbiB5b3VyIGNvbXBsaWFuY2Ugd2l0aCB0aGUgIHJlc3RyaWN0aW9ucyAgYW5kCitvYmxpZ2F0aW9ucyAgY29udGFpbmVkIGluIHRoZSAgQWdyZWVtZW50LCBpbiBhZGRpdGlvbiB0byB0aGUKK2xpY2Vuc2UgIGdyYW50ZWQgaW4gUGFyYWdyYXBoIDEgYWJvdmUsIFN1biBoZXJlYnkgIGdyYW50cyB0bworeW91ICBhICBub24tZXhjbHVzaXZlLCAgIG5vbnRyYW5zZmVyYWJsZSAgbGltaXRlZCAgcmlnaHQgIHRvCityZXByb2R1Y2UgIGNvbXBsZXRlIGFuZCB1bm1vZGlmaWVkIGNvcGllcyBvZiB0aGUgU29mdHdhcmUgb24KK2VsZWN0cm9uaWMgIG1lZGlhICAodGhlICAiTWVkaWEiKSAgZm9yIHRoZSBzb2xlICBwdXJwb3NlICBvZgoraW5jbHVzaW9uIGFuZCBkaXN0cmlidXRpb24gd2l0aCB5b3VyIFB1YmxpY2F0aW9uKHMpLCBzdWJqZWN0Cit0byB0aGUgIGZvbGxvd2luZyAgdGVybXM6ICAoaSkgWW91IG1heSAgbm90ICBkaXN0cmlidXRlICB0aGUKK1NvZnR3YXJlIG9uIGEgc3RhbmQtYWxvbmUgYmFzaXM7IGl0IG11c3QgYmUgZGlzdHJpYnV0ZWQgd2l0aAoreW91ciAgIFB1YmxpY2F0aW9uKHMpOyAgIChpaSkgICBZb3UgIGFyZSAgIHJlc3BvbnNpYmxlICAgZm9yCitkb3dubG9hZGluZyAgdGhlIFNvZnR3YXJlIGZyb20gdGhlIGFwcGxpY2FibGUgIFN1biB3ZWIgc2l0ZTsKKyhpaWkpIFlvdSBtdXN0IHJlZmVyIHRvIHRoZSAgU29mdHdhcmUgIGFzIEphdmFUTSAyICBTb2Z0d2FyZQorRGV2ZWxvcG1lbnQgS2l0LCBTdGFuZGFyZCAgRWRpdGlvbiwgIFZlcnNpb24gMS40LjE7IChpdikgVGhlCitTb2Z0d2FyZSBtdXN0IGJlIHJlcHJvZHVjZWQgIGluIGl0cyBlbnRpcmV0eSBhbmQgd2l0aG91dCBhbnkKK21vZGlmaWNhdGlvbiAgd2hhdHNvZXZlciAoaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIHRoZQorQmluYXJ5ICBDb2RlICAgTGljZW5zZSAgYW5kICAgU3VwcGxlbWVudGFsICAgTGljZW5zZSAgIFRlcm1zCithY2NvbXBhbnlpbmcgIHRoZSBTb2Z0d2FyZSBhbmQgIHByb3ByaWV0YXJ5ICByaWdodHMgIG5vdGljZXMKK2NvbnRhaW5lZCAgaW4gdGhlICBTb2Z0d2FyZSk7ICAodikgIFRoZSAgTWVkaWEgIGxhYmVsICBzaGFsbAoraW5jbHVkZSAgdGhlICBmb2xsb3dpbmcgIGluZm9ybWF0aW9uOiAgQ29weXJpZ2h0ICAyMDAyLCAgU3VuCitNaWNyb3N5c3RlbXMsICBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgVXNlIGlzIHN1YmplY3QgdG8KK2xpY2Vuc2UgIHRlcm1zLiAgU3VuLCAgU3VuICAgTWljcm9zeXN0ZW1zLCAgIHRoZSAgU3VuICBsb2dvLAorU29sYXJpcywgIEphdmEsIHRoZSBKYXZhICBDb2ZmZWUgIEN1cCAgbG9nbywgIEoyU0UgLCBhbmQgYWxsCit0cmFkZW1hcmtzICBhbmQgIGxvZ29zICBiYXNlZCAgb24gIEphdmEgIGFyZSAgdHJhZGVtYXJrcyAgb3IKK3JlZ2lzdGVyZWQgdHJhZGVtYXJrcyBvZiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuICBpbiB0aGUgVS5TLgorYW5kIG90aGVyIGNvdW50cmllcy4gIFRoaXMgaW5mb3JtYXRpb24gbXVzdCBiZSBwbGFjZWQgb24gdGhlCitNZWRpYSAgbGFiZWwgaW4gc3VjaCBhIG1hbm5lciAgYXMgdG8gb25seSAgYXBwbHkgIHRvIHRoZSBTdW4KK1NvZnR3YXJlOyAgKHZpKSBZb3UgbXVzdCBjbGVhcmx5ICBpZGVudGlmeSAgdGhlICBTb2Z0d2FyZSBhcworU3VuJ3MgIHByb2R1Y3Qgb24gdGhlIE1lZGlhICBob2xkZXIgb3IgTWVkaWEgIGxhYmVsLCBhbmQgeW91CittYXkgbm90ICBzdGF0ZSBvciAgaW1wbHkgIHRoYXQgIFN1biBpcyAgcmVzcG9uc2libGUgIGZvciBhbnkKK3RoaXJkLXBhcnR5ICBzb2Z0d2FyZSAgY29udGFpbmVkIG9uIHRoZSBNZWRpYTsgKHZpaSkgWW91IG1heQorbm90IGluY2x1ZGUgYW55IHRoaXJkIHBhcnR5ICBzb2Z0d2FyZSBvbiB0aGUgTWVkaWEgIHdoaWNoIGlzCitpbnRlbmRlZCB0byBiZSBhIHJlcGxhY2VtZW50IG9yIHN1YnN0aXR1dGUgZm9yIHRoZSBTb2Z0d2FyZTsKKyh2aWlpKSBZb3Ugc2hhbGwgaW5kZW1uaWZ5IFN1biBmb3IgYWxsIGRhbWFnZXMgIGFyaXNpbmcgZnJvbQoreW91ciAgZmFpbHVyZSAgdG8gIGNvbXBseSAgd2l0aCAgdGhlICByZXF1aXJlbWVudHMgIG9mICB0aGlzCitBZ3JlZW1lbnQuICBJbiBhZGRpdGlvbiwgeW91IHNoYWxsIGRlZmVuZCwgYXQgeW91ciAgZXhwZW5zZSwKK2FueSBhbmQgYWxsIGNsYWltcyBicm91Z2h0IGFnYWluc3QgU3VuIGJ5IHRoaXJkIHBhcnRpZXMsIGFuZAorc2hhbGwgIHBheSBhbGwgIGRhbWFnZXMgIGF3YXJkZWQgIGJ5IGEgIGNvdXJ0ICBvZiAgY29tcGV0ZW50CitqdXJpc2RpY3Rpb24sIG9yIHN1Y2ggc2V0dGxlbWVudCAgYW1vdW50ICBuZWdvdGlhdGVkIGJ5IHlvdSwKK2FyaXNpbmcgb3V0IG9mIG9yIGluIGNvbm5lY3Rpb24gd2l0aCB5b3VyIHVzZSwgIHJlcHJvZHVjdGlvbgorb3IgIGRpc3RyaWJ1dGlvbiAgb2YgdGhlICBTb2Z0d2FyZSAgYW5kL29yIHRoZSAgUHVibGljYXRpb24uCitZb3VyICBvYmxpZ2F0aW9uICB0byAgcHJvdmlkZSAgIGluZGVtbmlmaWNhdGlvbiAgdW5kZXIgIHRoaXMKK3NlY3Rpb24gIHNoYWxsIGFyaXNlICBwcm92aWRlZCAgdGhhdCBTdW46ICAoaSkgIHByb3ZpZGVzIHlvdQorcHJvbXB0ICBub3RpY2Ugb2YgdGhlIGNsYWltOyAoaWkpIGdpdmVzIHlvdSBzb2xlICBjb250cm9sIG9mCit0aGUgZGVmZW5zZSBhbmQgc2V0dGxlbWVudCBvZiB0aGUgY2xhaW07IChpaWkpIHByb3ZpZGVzIHlvdSwKK2F0IHlvdXIgZXhwZW5zZSwgd2l0aCBhbGwgYXZhaWxhYmxlIGluZm9ybWF0aW9uLCAgYXNzaXN0YW5jZQorYW5kICBhdXRob3JpdHkgIHRvIGRlZmVuZDsgYW5kIChpdikgaGFzIG5vdCAgY29tcHJvbWlzZWQgIG9yCitzZXR0bGVkIHN1Y2ggY2xhaW0gd2l0aG91dCB5b3VyIHByaW9yICB3cml0dGVuICBjb25zZW50OyBhbmQKKyhpeCkgWW91IHNoYWxsICBwcm92aWRlICBTdW4gd2l0aCBhIHdyaXR0ZW4gIG5vdGljZSBmb3IgZWFjaAorUHVibGljYXRpb247ICAgc3VjaCAgbm90aWNlICBzaGFsbCAgIGluY2x1ZGUgIHRoZSAgZm9sbG93aW5nCitpbmZvcm1hdGlvbjogICgxKSB0aXRsZSBvZiAgUHVibGljYXRpb24sICAoMikgYXV0aG9yKHMpLCAoMykKK2RhdGUgb2YgIFB1YmxpY2F0aW9uLCAgYW5kICg0KSAgSVNCTiBvciBJU1NOICBudW1iZXJzLiAgU3VjaAorbm90aWNlIHNoYWxsIGJlIHNlbnQgdG8gU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiwgNDE1MCBOZXR3b3JrCitDaXJjbGUsIE0vUyBVU0NBMTItMTEwLCBTYW50YSBDbGFyYSwgQ2FsaWZvcm5pYSA5NTA1NCwgVS5TLkEKKywgQXR0ZW50aW9uOiAgQ29udHJhY3RzIEFkbWluaXN0cmF0aW9uLgorCis4LiAgVHJhZGVtYXJrcyAgYW5kICBMb2dvcy4gIFlvdSAgYWNrbm93bGVkZ2UgIGFuZCAgYWdyZWUgYXMKK2JldHdlZW4gIHlvdSBhbmQgU3VuIHRoYXQgU3VuIG93bnMgdGhlIFNVTiwgIFNPTEFSSVMsICBKQVZBLAorSklOSSwgRk9SVEUsIGFuZCBpUExBTkVUICB0cmFkZW1hcmtzICBhbmQgYWxsIFNVTiwgIFNPTEFSSVMsCitKQVZBLCBKSU5JLCBGT1JURSwgYW5kIGlQTEFORVQtcmVsYXRlZCAgdHJhZGVtYXJrcywgIHNlcnZpY2UKK21hcmtzLCBsb2dvcyBhbmQgb3RoZXIgYnJhbmQgZGVzaWduYXRpb25zICgiU3VuIE1hcmtzIiksIGFuZAoreW91IGFncmVlIHRvIGNvbXBseSAgd2l0aCB0aGUgU3VuICBUcmFkZW1hcmsgIGFuZCBMb2dvIFVzYWdlCitSZXF1aXJlbWVudHMgICAgICAgICAgY3VycmVudGx5ICAgICAgICAgIGxvY2F0ZWQgICAgICAgICAgYXQKK2h0dHA6Ly93d3cuc3VuLmNvbS9wb2xpY2llcy90cmFkZW1hcmtzLiAgQW55IHVzZSB5b3UgbWFrZSBvZgordGhlIFN1biBNYXJrcyBpbnVyZXMgdG8gU3VuJ3MgYmVuZWZpdC4KKworOS4gIFNvdXJjZSBDb2RlLiAgU29mdHdhcmUgIG1heSBjb250YWluICBzb3VyY2UgY29kZSB0aGF0IGlzCitwcm92aWRlZCBzb2xlbHkgZm9yIHJlZmVyZW5jZSBwdXJwb3NlcyBwdXJzdWFudCB0byB0aGUgdGVybXMKK29mIHRoaXMgIEFncmVlbWVudC4gIFNvdXJjZSAgY29kZSAgbWF5IG5vdCBiZSAgcmVkaXN0cmlidXRlZAordW5sZXNzIGV4cHJlc3NseSBwcm92aWRlZCBmb3IgaW4gdGhpcyBBZ3JlZW1lbnQuCisKKzEwLiAgVGVybWluYXRpb24gICBmb3IgICBJbmZyaW5nZW1lbnQuICBFaXRoZXIgICBwYXJ0eSAgIG1heQordGVybWluYXRlICB0aGlzICBBZ3JlZW1lbnQgIGltbWVkaWF0ZWx5ICBzaG91bGQgYW55IFNvZnR3YXJlCitiZWNvbWUsIG9yIGluIGVpdGhlciAgcGFydHkncyAgb3BpbmlvbiAgYmUgbGlrZWx5IHRvIGJlY29tZSwKK3RoZSBzdWJqZWN0IG9mIGEgY2xhaW0gb2YgaW5mcmluZ2VtZW50ICBvZiBhbnkgIGludGVsbGVjdHVhbAorcHJvcGVydHkgcmlnaHQuCisKK0ZvciBpbnF1aXJpZXMgcGxlYXNlIGNvbnRhY3Q6ICBTdW4gTWljcm9zeXN0ZW1zLCAgSW5jLiwgNDE1MAorTmV0d29yayAgQ2lyY2xlLCAgU2FudGEgIENsYXJhLCAgIENhbGlmb3JuaWEgICA5NTA1NCwgIFUuUy5BCisoTEZJIzEyMDA4MC9Gb3JtIElEIzAxMTgwMSkKKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvc3VuLWJjbGEtamltaSBiL2xpY2Vuc2VzL3N1bi1iY2xhLWppbWkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjIwNjYwOAotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL3N1bi1iY2xhLWppbWkKQEAgLTAsMCArMSw0OSBAQAorU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorQmluYXJ5IENvZGUgTGljZW5zZSBBZ3JlZW1lbnQKKworUkVBRCBUSEUgVEVSTVMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIEFOWSBQUk9WSURFRCBTVVBQTEVNRU5UQUwgTElDRU5TRSBURVJNUyAoQ09MTEVDVElWRUxZICJBR1JFRU1FTlQiKSBDQVJFRlVMTFkgQkVGT1JFIERPV05MT0FESU5HIE9SIFVTSU5HIFRIRSBTT0ZUV0FSRS4gQlkgRE9XTkxPQURJTkcgT1IgVVNJTkcgVEhFIFNPRlRXQVJFLCBZT1UgQUdSRUUgVE8gVEhFIFRFUk1TIE9GIFRISVMgQUdSRUVNRU5ULiBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIEFMTCBUSEVTRSBURVJNUywgWU9VIEFSRSBOT1QgQVVUSE9SSVpFRCBUTyBET1dOTE9BRCBPUiBVU0UgVEhFIFNPRlRXQVJFIElOIEFOWSBNQU5ORVIuCisKKzEuIExJQ0VOU0UgVE8gVVNFLiAgU3VuIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlIGFuZCBub24tdHJhbnNmZXJhYmxlIGxpY2Vuc2UgZm9yIHRoZSBpbnRlcm5hbCB1c2Ugb25seSwgZm9yIHRoZSBhY2NvbXBhbnlpbmcgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24gKGNvbGxlY3RpdmVseSAiU29mdHdhcmUiKS4gVGhpcyBpcyBhIG9uZSB0aW1lIGNvZGUgZHJvcCBhbmQgd2lsbCBub3QgYmUgdXBkYXRlZCBvciBvdGhlcndpc2Ugc3VwcG9ydGVkIGJ5IFN1bi4KKworMi4gUkVTVFJJQ1RJT05TIFNvZnR3YXJlIGlzIGNvbmZpZGVudGlhbCBhbmQgY29weXJpZ2h0ZWQuIFRpdGxlIHRvIFNvZnR3YXJlIGFuZCBhbGwgYXNzb2NpYXRlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGlzIHJldGFpbmVkIGJ5IFN1biBhbmQvb3IgaXRzIGxpY2Vuc29ycy4gRXhjZXB0IGFzIHNwZWNpZmljYWxseSBhdXRob3JpemVkIGluIGFueSBTdXBwbGVtZW50YWwgTGljZW5zZSBUZXJtcywgeW91IG1heSBub3QgbWFrZSBjb3BpZXMgb2YgU29mdHdhcmUsIG90aGVyIHRoYW4gYSBzaW5nbGUgY29weSBvZiBTb2Z0d2FyZSBmb3IgYXJjaGl2YWwgcHVycG9zZXMuIFVubGVzcyBlbmZvcmNlbWVudCBpcyBwcm9oaWJpdGVkIGJ5IGFwcGxpY2FibGUgbGF3LCB5b3UgbWF5IG5vdCBtb2RpZnksIGRlY29tcGlsZSwgcmV2ZXJzZSBlbmdpbmVlciBTb2Z0d2FyZS4KKworMy4gTElNSVRFRCBXQVJSQU5UWS4gU3VuIHdhcnJhbnRzIHRvIHlvdSB0aGF0IGZvciBhIHBlcmlvZCBvZiBuaW5ldHkgKDkwKSBkYXlzIGZyb20gdGhlIGRhdGUgb2YgcHVyY2hhc2UsIGFzIGV2aWRlbmNlZCBieSBhIGNvcHkgb2YgdGhlIHJlY2VpcHQsIHRoZSBtZWRpYSBvbiB3aGljaCBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgKGlmIGFueSkgd2lsbCBiZSBmcmVlIG9mIGRlZmVjdHMgaW4gbWF0ZXJpYWxzIGFuZCB3b3JrbWFuc2hpcCB1bmRlciBub3JtYWwgdXNlLiBFeGNlcHQgZm9yIHRoZSBmb3JlZ29pbmcsIFNvZnR3YXJlIGlzIHByb3ZpZGVkICJBUyBJUyIuIFlvdXIgZXhjbHVzaXZlIHJlbWVkeSBhbmQgU3VuJ3MgZW50aXJlIGxpYWJpbGl0eSB1bmRlciB0aGlzIGxpbWl0ZWQgd2FycmFudHkgd2lsbCBiZSBhdCBTdW4ncyBvcHRpb24gdG8gcmVwbGFjZSBTb2Z0d2FyZSBtZWRpYSBvciByZWZ1bmQgdGhlIGZlZSBwYWlkIGZvciBTb2Z0d2FyZS4KKworNC4gRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS4gVU5MRVNTIFNQRUNJRklFRCBJTiBUSElTIEFHUkVFTUVOVCwgQUxMIEVYUFJFU1MgT1IgSU1QTElFRCBDT05ESVRJT05TLCBSRVBSRVNFTlRBVElPTlMgQU5EIFdBUlJBTlRJRVMsIElOQ0xVRElORyBBTlkgSU1QTElFRCBXQVJSQU5UWSBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUiBOT04tSU5GUklOR0VNRU5ULCBBUkUgRElTQ0xBSU1FRCwgRVhDRVBUIFRPIFRIRSBFWFRFTlQgVEhBVCBUSEVTRSBESVNDTEFJTUVSUyBBUkUgSEVMRCBUTyBCRSBMRUdBTExZIElOVkFMSUQuIFlPVSBBQ0tOT1dMRURHRSBUSEFUIFNPRlRXQVJFIElTIE5PVCBERVNJR05FRCBPUiBJTlRFTkRFRCBGT1IgVVNFIElOIFRIRSBERVNJR04sIENPTlNUUlVDVElPTiwgT1BFUkFUSU9OLCBPUiBNQUlOVEVOQU5DRSBPRiBBTlkgTlVDTEVBUiBGQUNJTElUWS4gU1VOIERJU0NMQUlNUyBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRZIE9GIEZJVE5FU1MgRk9SIFNVQ0ggVVNFUy4KKworNS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuIFRPIFRIRSBFWFRFTlQgTk9UIFBST0hJQklURUQgQlkgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIFNVTiBPUiBJVFMgTElDRU5TT1JTIEJFIExJQUJMRSBGT1IgQU5ZIExPU1QgUkVWRU5VRSwgUFJPRklUIE9SIERBVEEsIE9SIEZPUiBTUEVDSUFMLCBJTkRJUkVDVCwgQ09OU0VRVUVOVElBTCwgSU5DSURFTlRBTCBPUiBQVU5JVElWRSBEQU1BR0VTLCBIT1dFVkVSIENBVVNFRCBSRUdBUkRMRVNTIE9GIFRIRSBUSEVPUlkgT0YgTElBQklMSVRZLCBBUklTSU5HIE9VVCBPRiBPUiBSRUxBVEVEIFRPIFRIRSBVU0UgT0YgT1IgSU5BQklMSVRZIFRPIFVTRSBTT0ZUV0FSRSwgRVZFTiBJRiBTVU4gSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiBJbiBubyBldmVudCB3aWxsIFN1bidzIGxpYWJpbGl0eSB0byB5b3UsIHdoZXRoZXIgaW4gY29udHJhY3QsIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgb3Igb3RoZXJ3aXNlLCBleGNlZWQgdGhlIGFtb3VudAorcGFpZCBieSB5b3UgZm9yIFNvZnR3YXJlIHVuZGVyIHRoaXMgQWdyZWVtZW50LiBUaGUgZm9yZWdvaW5nIGxpbWl0YXRpb25zIHdpbGwgYXBwbHkgZXZlbiBpZiB0aGUgYWJvdmUgc3RhdGVkIHdhcnJhbnR5IGZhaWxzIG9mIGl0cyBlc3NlbnRpYWwgcHVycG9zZS4KKworNi4gVGVybWluYXRpb24uIFRoaXMgQWdyZWVtZW50IGlzIGVmZmVjdGl2ZSB1bnRpbCB0ZXJtaW5hdGVkLiBZb3UgbWF5IHRlcm1pbmF0ZSB0aGlzIEFncmVlbWVudCBhdCBhbnkgdGltZSBieSBkZXN0cm95aW5nIGFsbCBjb3BpZXMgb2YgU29mdHdhcmUuIFRoaXMgQWdyZWVtZW50IHdpbGwgdGVybWluYXRlIGltbWVkaWF0ZWx5IHdpdGhvdXQgbm90aWNlIGZyb20gU3VuIGlmIHlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQuIFVwb24gVGVybWluYXRpb24sIHlvdSBtdXN0IGRlc3Ryb3kgYWxsIGNvcGllcyBvZiBTb2Z0d2FyZS4KKworNy4gRXhwb3J0IFJlZ3VsYXRpb25zLiBBbGwgU29mdHdhcmUgYW5kIHRlY2huaWNhbCBkYXRhIGRlbGl2ZXJlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgc3ViamVjdCB0byBVUyBleHBvcnQgY29udHJvbCBsYXdzIGFuZCBtYXkgYmUgc3ViamVjdCB0byBleHBvcnQgb3IgaW1wb3J0IHJlZ3VsYXRpb25zIGluIG90aGVyIGNvdW50cmllcy4gWW91IGFncmVlIHRvIGNvbXBseSBzdHJpY3RseSB3aXRoIGFsbCBzdWNoIGxhd3MgYW5kIHJlZ3VsYXRpb25zIGFuZCBhY2tub3dsZWRnZSB0aGF0IHlvdSBoYXZlIHRoZSByZXNwb25zaWJpbGl0eSB0byBvYnRhaW4gc3VjaCBsaWNlbnNlcyB0byBleHBvcnQsIHJlLWV4cG9ydCwgb3IgaW1wb3J0IGFzIG1heSBiZSByZXF1aXJlZCBhZnRlciBkZWxpdmVyeSB0byB5b3UuCisKKzguIFUuUy4gR292ZXJubWVudCBSZXN0cmljdGVkIFJpZ2h0cy4gVXNlLCBkdXBsaWNhdGlvbiwgb3IgZGlzY2xvc3VyZSBieSB0aGUgVS5TLiBHb3Zlcm5tZW50IGlzIHN1YmplY3QgdG8gcmVzdHJpY3Rpb25zIHNldCBmb3J0aCBpbiB0aGlzIEFncmVlbWVudCBhbmQgYXMgcHJvdmlkZWQgaW4gREZBUlMgMjI3LjcyMDItMSAoYSkgYW5kIDIyNy43MjAyLTMoYSkgKDE5OTUpLCBERkFSUyAyNTIuMjI3LTcwMTMgKGMpKDEpKGlpKShPY3QgMTk4OCksIEZBUiAxMi4yMTIgKGEpICgxOTk1KSwgRkFSIDUyLjIyNy0xOSAoSnVuZSAxOTg3KSwgb3IgRkFSIDUyLjIyNy0xNChBTFQgSUlJKSAoSnVuZSAxOTg3KSwgYXMgYXBwbGljYWJsZS4KKworOS4gR292ZXJuaW5nIExhdy4gQW55IGFjdGlvbiByZWxhdGVkIHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYmUgZ292ZXJuZWQgYnkgQ2FsaWZvcm5pYSBsYXcgYW5kIGNvbnRyb2xsaW5nIFUuUy4gZmVkZXJhbCBsYXcuIE5vIGNob2ljZSBvZiBsYXcgcnVsZXMgb2YgYW55IGp1cmlzZGljdGlvbiB3aWxsIGFwcGx5LgorCisxMC4gU2V2ZXJhYmlsaXR5LiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgVGhpcyBBZ3JlZW1lbnQgd2lsbCByZW1haW4gaW4gZWZmZWN0IHdpdGggdGhlIHByb3Zpc2lvbiBvbWl0dGVkLCB1bmxlc3Mgb21pc3Npb24gd291bGQgZnJ1c3RyYXRlIHRoZSBpbnRlbnQgb2YgdGhlIHBhcnRpZXMsIGluIHdoaWNoIGNhc2UgdGhpcyBBZ3JlZW1lbnQgd2lsbCBpbW1lZGlhdGVseSB0ZXJtaW5hdGUuCisKKzExLiBJbnRlZ3JhdGlvbi4gVGhpcyBBZ3JlZW1lbnQgaXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB5b3UgYW5kIFN1biByZWxhdGluZyB0byBpdHMgc3ViamVjdCBtYXR0ZXIuIEl0IHN1cGVyc2VkZXMgYWxsIHByaW9yIG9yIGNvbnRlbXBvcmFuZW91cyBvcmFsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbnMsIHByb3Bvc2FscywgcmVwcmVzZW50YXRpb25zIGFuZCB3YXJyYW50aWVzIGFuZCBwcmV2YWlscyBvdmVyIGFueSBjb25mbGljdGluZyBvciBhZGRpdGlvbmFsIHRlcm1zIG9mIGFueSBxdW90ZSwgb3JkZXIsIGFja25vd2xlZGdtZW50LCBvciBvdGhlciBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIHBhcnRpZXMgcmVsYXRpbmcgdG8gaXRzIHN1YmplY3QgbWF0dGVyIGR1cmluZyB0aGUgdGVybSBvZiB0aGlzIEFncmVlbWVudC4gTm8gbW9kaWZpY2F0aW9uIG9mIHRoaXMgQWdyZWVtZW50IHdpbGwgYmUgYmluZGluZywgdW5sZXNzIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSBhbiBhdXRob3JpemVkIHJlcHJlc2VudGF0aXZlIG9mIGVhY2ggcGFydHkuCisKK0ZvciBpbnF1aXJpZXMgcGxlYXNlIGNvbnRhY3Q6IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gOTAxIFNhbiBBbnRvbmlvIFJvYWQsIFBhbG8gQWx0bywgQ2FsaWZvcm5pYSA5NDMwMworCisKKworSklNSSBTREssIFZlcnNpb24gMi4wCitTVVBQTEVNRU5UQUwgTElDRU5TRSBURVJNUworCitUaGVzZSBzdXBwbGVtZW50YWwgdGVybXMgKCJTdXBwbGVtZW50IikgYWRkIHRvIHRoZSB0ZXJtcyBvZiB0aGUgQmluYXJ5IENvZGUgTGljZW5zZSBBZ3JlZW1lbnQgKCJBZ3JlZW1lbnQiKS4gQ2FwaXRhbGl6ZWQgdGVybXMgbm90IGRlZmluZWQgaGVyZWluIHNoYWxsIGhhdmUgdGhlIHNhbWUgbWVhbmluZ3MgYXNjcmliZWQgdG8gdGhlbSBpbiB0aGUgQWdyZWVtZW50LiBUaGUgU3VwcGxlbWVudCB0ZXJtcyBzaGFsbCBzdXBlcnNlZGUgYW55IGluY29uc2lzdGVudCBvciBjb25mbGljdGluZyB0ZXJtcyBpbiB0aGUgQWdyZWVtZW50LgorCisxLiBMaW1pdGVkIExpY2Vuc2UgR3JhbnQuCisKK2EuIFNvZnR3YXJlIERldmVsb3BtZW50IExpY2Vuc2UuIFN1YmplY3QgdG8geW91ciBvYmxpZ2F0aW9uIHRvIGluZGVtbmlmeSBTdW4gcHVyc3VhbnQgdG8gU2VjdGlvbiAzIGJlbG93LCBTdW4gZ3JhbnRzIHRvIHlvdSBhIG5vbi1leGNsdXNpdmUsIG5vbi10cmFuc2ZlcmFibGUgbGltaXRlZCBsaWNlbnNlIHRvIHVzZSB0aGUgU29mdHdhcmUgd2l0aG91dCBmZWUgZm9yIGV2YWx1YXRpb24gb2YgdGhlIFNvZnR3YXJlIGFuZCBmb3IgZGV2ZWxvcG1lbnQgb2YgSmF2YShUTSkgYXBwbGV0cyBhbmQgYXBwbGljYXRpb25zIHByb3ZpZGVkIHRoYXQgeW91IG1heSBub3QgcmUtZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgaW4gd2hvbGUgb3IgaW4gcGFydCwgZXhjZXB0IGFzIHByb3ZpZGVkIGluIFNlY3Rpb24gMS5iIGJlbG93LiBUaGUgU29mdHdhcmUgbWF5IGNvbnRhaW4gc291cmNlIGNvZGUgd2hpY2ggaXMgcHJvdmlkZWQgZm9yIHJlZmVyZW5jZSBwdXJwb3NlcyBvbmx5LCBhbmQgbWF5IG5vdCBiZSBtb2RpZmllZCAoZXhjZXB0IGZvciB0aGUgcHVycG9zZSBvZiBjb3JyZWN0aW5nIGVycm9ycykgb3IgcmVkaXN0cmlidXRlZC4KKworYi4gTGljZW5zZSB0byBEaXN0cmlidXRlIFJ1bnRpbWUuIFN1YmplY3QgdG8geW91ciBvYmxpZ2F0aW9uIHRvIGluZGVtbmlmeSBTdW4gcHVyc3VhbnQgdG8gU2VjdGlvbiAzIGJlbG93LCBTdW4gZ3JhbnRzIHRvIHlvdSBhIG5vbi1leGNsdXNpdmUsIG5vbi10cmFuc2ZlcmFibGUgbGltaXRlZCwgcm95YWx0eS1mcmVlIGxpY2Vuc2UgdG8gcmVwcm9kdWNlLCBkaXN0cmlidXRlIG9mZmVyIHRvIHNlbGwgYW5kIHNlbGwgdGhlIFNvZnR3YXJlIHByb3ZpZGVkIHRoYXQgeW91OiAoaSlkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBjb21wbGV0ZSBhbmQgdW5tb2RpZmllZCAoZXhjZXB0IGZvciBlcnJvciBjb3JyZWN0aW9ucyksIG9ubHkgYXMgcGFydCBvZiwgYW5kIGZvciB0aGUgc29sZSBwdXJwb3NlIG9mIHJ1bm5pbmcsIHlvdXIgSmF2YSBhcHBsZXQgb3IgYXBwbGljYXRpb24gKCJQcm9ncmFtIikgaW50byB3aGljaCB0aGUgU29mdHdhcmUgaXMgaW5jb3Jwb3JhdGVkOyAoaWkpIGRvIG5vdCBkaXN0cmlidXRlIGFkZGl0aW9uYWwgc29mdHdhcmUgaW50ZW5kZWQgdG8gcmVwbGFjZSBhbnkgY29tcG9uZW50KHMpIG9mIHRoZSBTb2Z0d2FyZTsgKGlpaSkgZG8gbm90IHJlbW92ZSBvciBhbHRlciBhbnkgcHJvcHJpZXRhcnkgbGVnZW5kcyBvciBub3RpY2VzIGNvbnRhaW5lZCBpbiB0aGUgU29mdHdhcmU7IChpdikgb25seSBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIHN1YmplY3QgdG8gYSBsaWNlbnNlIGFncmVlbWVudCB0aGF0IHByb3RlY3RzIFN1bidzIGludGVyZXN0cyBjb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIGNvbnRhaW5lZCBoZXJlaW47IGFuZCAodikgbWF5IG5vdCBjcmVhdGUsIG9yIGF1dGhvcml6ZSB5b3VyIGxpY2Vuc2VlcyB0byBjcmVhdGUgYWRkaXRpb25hbCBjbGFzc2VzLCBpbnRlcmZhY2VzLCBvciBzdWJwYWNrYWdlcyB0aGF0IGFyZSBjb250YWluZWQgaW4gdGhlICJqYXZhIiBvciAic3VuIiBwYWNrYWdlcyBvciBzaW1pbGFyIGFzICEKK3NwZWNpZmllZCBieSBTdW4gaW4gYW55IGNsYXNzIGZpbGUgbmFtaW5nIGNvbnZlbnRpb24uCisKKyAyLiBKYXZhIFBsYXRmb3JtIEludGVyZmFjZS4gSW4gdGhlIGV2ZW50IHRoYXQgTGljZW5zZWUgY3JlYXRlcyBhbiBhZGRpdGlvbmFsIEFQSShzKSB3aGljaDogKGkpIGV4dGVuZHMgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgYSBKYXZhIEVudmlyb25tZW50OyBhbmQsIChpaSkgaXMgZXhwb3NlZCB0byB0aGlyZCBwYXJ0eSBzb2Z0d2FyZSBkZXZlbG9wZXJzIGZvciB0aGUgcHVycG9zZSBvZiBkZXZlbG9waW5nIGFkZGl0aW9uYWwgc29mdHdhcmUgd2hpY2ggaW52b2tlcyBzdWNoIGFkZGl0aW9uYWwgQVBJLCBMaWNlbnNlZSBtdXN0IHByb21wdGx5IHB1Ymxpc2ggYnJvYWRseSBhbiBhY2N1cmF0ZSBzcGVjaWZpY2F0aW9uIGZvciBzdWNoIEFQSSBmb3IgZnJlZSB1c2UgYnkgYWxsIGRldmVsb3BlcnMuCisKKzMuSW5kZW1uaXR5IHRvIFN1bi4gQXMgYSBjb25kaXRpb24gcHJlY2VkZW50IHRvIGVhY2ggbGljZW5zZSBncmFudCBpbiB0aGlzIEFncmVlbWVudCwgeW91IGFncmVlIHRvIGluZGVtbmlmeSwgaG9sZCBoYXJtbGVzcywgYW5kIGRlZmVuZCBTdW4gYW5kIGl0cyBsaWNlbnNvcnMgZnJvbSBhbmQgYWdhaW5zdCBhbnkgYW5kIGFsbCBjbGFpbXMsIGxhd3N1aXRzLCBsaWFiaWxpdGllcywgZGVtYW5kcyBhbmQgZXhwZW5zZXMgKGluY2x1ZGluZyBhdHRvcm5leXMnIGZlZXMpLCB0aGF0IGFyaXNlIG9yIHJlc3VsdCBmcm9tIHRoZSB1c2Ugb3IgZGlzdHJpYnV0aW9uIG9mIHRoZSBTb2Z0d2FyZSBvciB0aGUgUHJvZ3JhbSwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiwgdGhvc2UgYnJvdWdodCBieSBVbmlzeXMgQ29ycG9yYXRpb24sIGl0cyBzdWNjZXNzb3JzIGFuZCBhc3NpZ25zLCB3aXRoIHJlc3BlY3QgdG8gVS5TLiBQYXRlbnQgTnVtYmVyIDQsNTU4LDMwMiBhbmQgYWxsIGZvcmVpZ24gY291bnRlcnBhcnRzIHRoZXJldG8gd2hpY2ggVW5pc3lzIENvcnBvcmF0aW9uIG1heSBub3cgaGF2ZSBvciBhY3F1aXJlIGluIHRoZSBmdXR1cmUgKHRoZSAiTFpXIFBhdGVudHMiKSByZWxhdGluZyB0byB5b3VyIG1ha2luZywgdXNpbmcsIHNlbGxpbmcsIGxpY2Vuc2luZywgaW1wb3J0aW5nLCBvZmZlcmluZyB0byBzZWxsLCBvciBvdGhlcndpc2UgdHJhbnNmZXJyaW5nIHRoZSBHSUYgZW5jb2RpbmcgYW5kL29yIGRlY29kaW5nIGZlYXR1cmUgb2YgdGhlIFNvZnR3YXJlIG9yIHRoZSBQcm9ncmFtLiBUaGlzIEFncmVlbWVudCBkb2VzIG5vdCBncmFudCBhbnkgcmlnaHRzIHRvIHlvdSB3aXRoIHJlc3BlY3QgdG8gdGhlIExaVyBQYXRlbnRzLgorCis0LiBUcmFkZW1hcmtzIGFuZCBMb2dvcy4gVGhpcyBBZ3JlZW1lbnQgZG9lcyBub3QgYXV0aG9yaXplIHlvdSB0byB1c2UgYW55IFN1biBuYW1lLCB0cmFkZW1hcmsgb3IgbG9nby4gTGljZW5zZWUgYWNrbm93bGVkZ2VzIGFzIGJldHdlZW4gaXQgYW5kIFN1biB0aGF0IFN1biBvd25zIHRoZSBKYXZhIHRyYWRlbWFyayBhbmQgYWxsIEphdmEtcmVsYXRlZCB0cmFkZW1hcmtzLCBsb2dvcyBhbmQgaWNvbnMgaW5jbHVkaW5nIHRoZSBDb2ZmZWUgQ3VwIGFuZCBEdWtlICgiSmF2YSBNYXJrcyIpIGFuZCBhZ3JlZXMgdG8gY29tcGx5IHdpdGggdGhlIEphdmEgVHJhZGVtYXJrIEd1aWRlbGluZXMgYXQgaHR0cDovL2phdmEuc3VuLmNvbS90cmFkZW1hcmtzLmh0bWwuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9zdW4tYmNsYS1qbWYgYi9saWNlbnNlcy9zdW4tYmNsYS1qbWYKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTljNWU0OQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL3N1bi1iY2xhLWptZgpAQCAtMCwwICsxLDE1MiBAQAorSmF2YVRNIE1lZGlhIEZyYW1ld29yayAoSk1GKSAyLjEueAorQmluYXJ5IENvZGUgTGljZW5zZSBBZ3JlZW1lbnQKKworUkVBRCBUSEUgVEVSTVMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIEFOWSBQUk9WSURFRCBTVVBQTEVNRU5UQUwgTElDRU5TRSBURVJNUyAoQ09MTEVDVElWRUxZIAorIkFHUkVFTUVOVCIpIENBUkVGVUxMWSBCRUZPUkUgT1BFTklORyBUSEUgU09GVFdBUkUgTUVESUEgUEFDS0FHRS4gQlkgT1BFTklORyBUSEUgU09GVFdBUkUgCitNRURJQSBQQUNLQUdFLCBZT1UgQUdSRUUgVE8gVEhFIFRFUk1TIE9GIFRISVMgQUdSRUVNRU5ULiBJRiBZT1UgQVJFIEFDQ0VTU0lORyBUSEUgU09GVFdBUkUgCitFTEVDVFJPTklDQUxMWSwgSU5ESUNBVEUgWU9VUiBBQ0NFUFRBTkNFIE9GIFRIRVNFIFRFUk1TIEJZIFNFTEVDVElORyBUSEUgIkFDQ0VQVCIgQlVUVE9OIEFUIAorVEhFIEVORCBPRiBUSElTIEFHUkVFTUVOVC4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBBTEwgT0YgVEhFIFRFUk1TLCBQUk9NUFRMWSBSRVRVUk4gVEhFIAorVU5VU0VEIFNPRlRXQVJFIFRPIFlPVVIgUExBQ0UgT0YgUFVSQ0hBU0UgRk9SIEEgUkVGVU5EIE9SLCBJRiBUSEUgU09GVFdBUkUgSVMgQUNDRVNTRUQgCitFTEVDVFJPTklDQUxMWSwgU0VMRUNUIFRIRSAiREVDTElORSIgQlVUVE9OIEFUIFRIRSBFTkQgT0YgVEhJUyBBR1JFRU1FTlQuCisKKzEuIExpY2Vuc2UgdG8gVXNlLiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuICgiU3VuIikgZ3JhbnRzIHlvdSBhIG5vbi1leGNsdXNpdmUgYW5kIAorbm9uLXRyYW5zZmVyYWJsZSBsaWNlbnNlIGZvciB0aGUgaW50ZXJuYWwgdXNlIG9ubHkgb2YgdGhlIGFjY29tcGFueWluZyBzb2Z0d2FyZSBhbmQgCitkb2N1bWVudGF0aW9uIGFuZCBhbnkgZXJyb3IgY29ycmVjdGlvbnMgcHJvdmlkZWQgYnkgU3VuIChjb2xsZWN0aXZlbHkgIlNvZnR3YXJlIiksIGJ5IHRoZSAKK251bWJlciBvZiB1c2VycyBhbmQgdGhlIGNsYXNzIG9mIGNvbXB1dGVyIGhhcmR3YXJlIGZvciB3aGljaCB0aGUgY29ycmVzcG9uZGluZyBmZWUgaGFzIGJlZW4gCitwYWlkLgorCisyLiBSZXN0cmljdGlvbnMuIFNvZnR3YXJlIGlzIGNvbmZpZGVudGlhbCBhbmQgY29weXJpZ2h0ZWQuIFRpdGxlIHRvIFNvZnR3YXJlIGFuZCBhbGwgCithc3NvY2lhdGVkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaXMgcmV0YWluZWQgYnkgU3VuIGFuZC9vciBpdHMgbGljZW5zb3JzLiBFeGNlcHQgYXMgCitzcGVjaWZpY2FsbHkgYXV0aG9yaXplZCBpbiBhbnkgU3VwcGxlbWVudGFsIExpY2Vuc2UgVGVybXMsIHlvdSBtYXkgbm90IG1ha2UgY29waWVzIG9mIAorU29mdHdhcmUsIG90aGVyIHRoYW4gYSBzaW5nbGUgY29weSBvZiBTb2Z0d2FyZSBmb3IgYXJjaGl2YWwgcHVycG9zZXMuIFVubGVzcyBlbmZvcmNlbWVudCBpcyAKK3Byb2hpYml0ZWQgYnkgYXBwbGljYWJsZSBsYXcsIHlvdSBtYXkgbm90IG1vZGlmeSwgZGVjb21waWxlLCBvciByZXZlcnNlIGVuZ2luZWVyIFNvZnR3YXJlLiAKK1lvdSBhY2tub3dsZWRnZSB0aGF0IFNvZnR3YXJlIGlzIG5vdCBkZXNpZ25lZCBvciBpbnRlbmRlZCBmb3IgdXNlIGluIHRoZSBkZXNpZ24sIAorY29uc3RydWN0aW9uLCBvcGVyYXRpb24gb3IgbWFpbnRlbmFuY2Ugb2YgYW55IG51Y2xlYXIgZmFjaWxpdHkuIFN1biBkaXNjbGFpbXMgYW55IGV4cHJlc3Mgb3IgCitpbXBsaWVkIHdhcnJhbnR5IG9mIGZpdG5lc3MgZm9yIHN1Y2ggdXNlcy4gTm8gcmlnaHQsIHRpdGxlIG9yIGludGVyZXN0IGluIG9yIHRvIGFueSAKK3RyYWRlbWFyaywgc2VydmljZSBtYXJrLCBsb2dvIG9yIHRyYWRlIG5hbWUgb2YgU3VuIG9yIGl0cyBsaWNlbnNvcnMgaXMgZ3JhbnRlZCB1bmRlciB0aGlzIAorQWdyZWVtZW50LgorCiszLiBMaW1pdGVkIFdhcnJhbnR5LiBTdW4gd2FycmFudHMgdG8geW91IHRoYXQgZm9yIGEgcGVyaW9kIG9mIG5pbmV0eSAoOTApIGRheXMgZnJvbSB0aGUgZGF0ZSAKK29mIHB1cmNoYXNlLCBhcyBldmlkZW5jZWQgYnkgYSBjb3B5IG9mIHRoZSByZWNlaXB0LCB0aGUgbWVkaWEgb24gd2hpY2ggU29mdHdhcmUgaXMgZnVybmlzaGVkIAorKGlmIGFueSkgd2lsbCBiZSBmcmVlIG9mIGRlZmVjdHMgaW4gbWF0ZXJpYWxzIGFuZCB3b3JrbWFuc2hpcCB1bmRlciBub3JtYWwgdXNlLiBFeGNlcHQgZm9yIAordGhlIGZvcmVnb2luZywgU29mdHdhcmUgaXMgcHJvdmlkZWQgIkFTIElTIi4gWW91ciBleGNsdXNpdmUgcmVtZWR5IGFuZCBTdW4ncyBlbnRpcmUgCitsaWFiaWxpdHkgdW5kZXIgdGhpcyBsaW1pdGVkIHdhcnJhbnR5IHdpbGwgYmUgYXQgU3VuJ3Mgb3B0aW9uIHRvIHJlcGxhY2UgU29mdHdhcmUgbWVkaWEgb3IgCityZWZ1bmQgdGhlIGZlZSBwYWlkIGZvciBTb2Z0d2FyZS4KKworNC4gRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS4gVU5MRVNTIFNQRUNJRklFRCBJTiBUSElTIEFHUkVFTUVOVCwgQUxMIEVYUFJFU1MgT1IgSU1QTElFRCAKK0NPTkRJVElPTlMsIFJFUFJFU0VOVEFUSU9OUyBBTkQgV0FSUkFOVElFUywgSU5DTFVESU5HIEFOWSBJTVBMSUVEIFdBUlJBTlRZIE9GIAorTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tSU5GUklOR0VNRU5UIEFSRSBESVNDTEFJTUVELCBFWENFUFQgCitUTyBUSEUgRVhURU5UIFRIQVQgVEhFU0UgRElTQ0xBSU1FUlMgQVJFIEhFTEQgVE8gQkUgTEVHQUxMWSBJTlZBTElELgorCis1LiBMSU1JVEFUSU9OIE9GIExJQUJJTElUWS4gVE8gVEhFIEVYVEVOVCBOT1QgUFJPSElCSVRFRCBCWSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgU1VOIE9SIElUUyAKK0xJQ0VOU09SUyBCRSBMSUFCTEUgRk9SIEFOWSBMT1NUIFJFVkVOVUUsIFBST0ZJVCBPUiBEQVRBLCBPUiBGT1IgU1BFQ0lBTCwgSU5ESVJFQ1QsIAorQ09OU0VRVUVOVElBTCwgSU5DSURFTlRBTCBPUiBQVU5JVElWRSBEQU1BR0VTLCBIT1dFVkVSIENBVVNFRCBSRUdBUkRMRVNTIE9GIFRIRSBUSEVPUlkgT0YgCitMSUFCSUxJVFksIEFSSVNJTkcgT1VUIE9GIE9SIFJFTEFURUQgVE8gVEhFIFVTRSBPRiBPUiBJTkFCSUxJVFkgVE8gVVNFIFNPRlRXQVJFLCBFVkVOIElGIFNVTiAKK0hBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gSW4gbm8gZXZlbnQgd2lsbCBTdW4ncyBsaWFiaWxpdHkgdG8gCit5b3UsIHdoZXRoZXIgaW4gY29udHJhY3QsIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgb3Igb3RoZXJ3aXNlLCBleGNlZWQgdGhlIGFtb3VudCBwYWlkIAorYnkgeW91IGZvciBTb2Z0d2FyZSB1bmRlciB0aGlzIEFncmVlbWVudC4gVGhlIGZvcmVnb2luZyBsaW1pdGF0aW9ucyB3aWxsIGFwcGx5IGV2ZW4gaWYgdGhlIAorYWJvdmUgc3RhdGVkIHdhcnJhbnR5IGZhaWxzIG9mIGl0cyBlc3NlbnRpYWwgcHVycG9zZS4KKworNi4gVGVybWluYXRpb24uIFRoaXMgQWdyZWVtZW50IGlzIGVmZmVjdGl2ZSB1bnRpbCB0ZXJtaW5hdGVkLiBZb3UgbWF5IHRlcm1pbmF0ZSB0aGlzIAorQWdyZWVtZW50IGF0IGFueSB0aW1lIGJ5IGRlc3Ryb3lpbmcgYWxsIGNvcGllcyBvZiBTb2Z0d2FyZS4gVGhpcyBBZ3JlZW1lbnQgd2lsbCB0ZXJtaW5hdGUgCitpbW1lZGlhdGVseSB3aXRob3V0IG5vdGljZSBmcm9tIFN1biBpZiB5b3UgZmFpbCB0byBjb21wbHkgd2l0aCBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgCitBZ3JlZW1lbnQuIFVwb24gVGVybWluYXRpb24sIHlvdSBtdXN0IGRlc3Ryb3kgYWxsIGNvcGllcyBvZiBTb2Z0d2FyZS4KKworNy4gRXhwb3J0IFJlZ3VsYXRpb25zLiBBbGwgU29mdHdhcmUgYW5kIHRlY2huaWNhbCBkYXRhIGRlbGl2ZXJlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgCitzdWJqZWN0IHRvIFVTIGV4cG9ydCBjb250cm9sIGxhd3MgYW5kIG1heSBiZSBzdWJqZWN0IHRvIGV4cG9ydCBvciBpbXBvcnQgcmVndWxhdGlvbnMgaW4gCitvdGhlciBjb3VudHJpZXMuIFlvdSBhZ3JlZSB0byBjb21wbHkgc3RyaWN0bHkgd2l0aCBhbGwgc3VjaCBsYXdzIGFuZCByZWd1bGF0aW9ucyBhbmQgCithY2tub3dsZWRnZSB0aGF0IHlvdSBoYXZlIHRoZSByZXNwb25zaWJpbGl0eSB0byBvYnRhaW4gc3VjaCBsaWNlbnNlcyB0byBleHBvcnQsIHJlLWV4cG9ydCwgCitvciBpbXBvcnQgYXMgbWF5IGJlIHJlcXVpcmVkIGFmdGVyIGRlbGl2ZXJ5IHRvIHlvdS4KKworOC4gVS5TLiBHb3Zlcm5tZW50IFJlc3RyaWN0ZWQgUmlnaHRzLiBJZiBTb2Z0d2FyZSBpcyBiZWluZyBhY3F1aXJlZCBieSBvciBvbiBiZWhhbGYgb2YgdGhlIAorVS5TLiBHb3Zlcm5tZW50IG9yIGJ5IGEgVS5TLiBHb3Zlcm5tZW50IHByaW1lIGNvbnRyYWN0b3Igb3Igc3ViY29udHJhY3RvciAoYXQgYW55IHRpZXIpLCAKK3RoZW4gdGhlIEdvdmVybm1lbnQncyByaWdodHMgaW4gU29mdHdhcmUgYW5kIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIHdpbGwgYmUgb25seSBhcyBzZXQgCitmb3J0aCBpbiB0aGlzIEFncmVlbWVudDsgdGhpcyBpcyBpbiBhY2NvcmRhbmNlIHdpdGggNDggQy5GLlIuIDIyNy43MjAyLTQgKGZvciBEZXBhcnRtZW50IG9mIAorRGVmZW5zZSAoRE9EKSBhY3F1aXNpdGlvbnMpIGFuZCB3aXRoIDQ4IENGUiAyLjEwMSBhbmQgMTIuMjEyIChmb3Igbm9uLURPRCBhY3F1aXNpdGlvbnMpLgorCis5LiBHb3Zlcm5pbmcgTGF3LiBBbnkgYWN0aW9uIHJlbGF0ZWQgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBiZSBnb3Zlcm5lZCBieSBDYWxpZm9ybmlhIGxhdyAKK2FuZCBjb250cm9sbGluZyBVLlMuIGZlZGVyYWwgbGF3LiBObyBjaG9pY2Ugb2YgbGF3IHJ1bGVzIG9mIGFueSBqdXJpc2RpY3Rpb24gd2lsbCBhcHBseS4KKworMTAuIFNldmVyYWJpbGl0eS4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHRoaXMgCitBZ3JlZW1lbnQgd2lsbCByZW1haW4gaW4gZWZmZWN0IHdpdGggdGhlIHByb3Zpc2lvbiBvbWl0dGVkLCB1bmxlc3Mgb21pc3Npb24gd291bGQgZnJ1c3RyYXRlIAordGhlIGludGVudCBvZiB0aGUgcGFydGllcywgaW4gd2hpY2ggY2FzZSB0aGlzIEFncmVlbWVudCB3aWxsIGltbWVkaWF0ZWx5IHRlcm1pbmF0ZS4KKworMTEuIEludGVncmF0aW9uLiBUaGlzIEFncmVlbWVudCBpcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHlvdSBhbmQgU3VuIHJlbGF0aW5nIHRvIGl0cyAKK3N1YmplY3QgbWF0dGVyLiBJdCBzdXBlcnNlZGVzIGFsbCBwcmlvciBvciBjb250ZW1wb3JhbmVvdXMgb3JhbCBvciB3cml0dGVuIGNvbW11bmljYXRpb25zLCAKK3Byb3Bvc2FscywgcmVwcmVzZW50YXRpb25zIGFuZCB3YXJyYW50aWVzIGFuZCBwcmV2YWlscyBvdmVyIGFueSBjb25mbGljdGluZyBvciBhZGRpdGlvbmFsIAordGVybXMgb2YgYW55IHF1b3RlLCBvcmRlciwgYWNrbm93bGVkZ21lbnQsIG9yIG90aGVyIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgcGFydGllcyAKK3JlbGF0aW5nIHRvIGl0cyBzdWJqZWN0IG1hdHRlciBkdXJpbmcgdGhlIHRlcm0gb2YgdGhpcyBBZ3JlZW1lbnQuIE5vIG1vZGlmaWNhdGlvbiBvZiB0aGlzIAorQWdyZWVtZW50IHdpbGwgYmUgYmluZGluZywgdW5sZXNzIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSBhbiBhdXRob3JpemVkIHJlcHJlc2VudGF0aXZlIG9mIAorZWFjaCBwYXJ0eS4KKworSmF2YVRNIE1lZGlhIEZyYW1ld29yayAoSk1GKSAyLjEueAorU3VwcGxlbWVudGFsIExpY2Vuc2UgVGVybXMKKworVGhlc2Ugc3VwcGxlbWVudGFsIGxpY2Vuc2UgdGVybXMgKCJTdXBwbGVtZW50YWwgVGVybXMiKSBhZGQgdG8gb3IgbW9kaWZ5IHRoZSB0ZXJtcyBvZiB0aGUgCitCaW5hcnkgQ29kZSBMaWNlbnNlIEFncmVlbWVudCAoY29sbGVjdGl2ZWx5LCB0aGUgIkFncmVlbWVudCIpLiBDYXBpdGFsaXplZCB0ZXJtcyBub3QgZGVmaW5lZCAKK2luIHRoZXNlIFN1cHBsZW1lbnRhbCBUZXJtcyBzaGFsbCBoYXZlIHRoZSBzYW1lIG1lYW5pbmdzIGFzY3JpYmVkIHRvIHRoZW0gaW4gdGhlIEFncmVlbWVudC4gCitUaGVzZSBTdXBwbGVtZW50YWwgVGVybXMgc2hhbGwgc3VwZXJzZWRlIGFueSBpbmNvbnNpc3RlbnQgb3IgY29uZmxpY3RpbmcgdGVybXMgaW4gdGhlIAorQWdyZWVtZW50LCBvciBpbiBhbnkgbGljZW5zZSBjb250YWluZWQgd2l0aGluIHRoZSBTb2Z0d2FyZS4KKworMS4gU29mdHdhcmUgSW50ZXJuYWwgVXNlIGFuZCBEZXZlbG9wbWVudCBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAKK29mIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byBTZWN0aW9uIDMgKEphdmEgVGVjaG5vbG9neSBSZXN0cmljdGlvbnMpIG9mIAordGhlc2UgU3VwcGxlbWVudGFsIFRlcm1zLCBTdW4gZ3JhbnRzIHlvdSBhIG5vbi1leGNsdXNpdmUsIG5vbi10cmFuc2ZlcmFibGUsIGxpbWl0ZWQgbGljZW5zZSAKK3RvIHJlcHJvZHVjZSBpbnRlcm5hbGx5IGFuZCB1c2UgaW50ZXJuYWxseSB0aGUgYmluYXJ5IGZvcm0gb2YgdGhlIFNvZnR3YXJlLCBjb21wbGV0ZSBhbmQgCit1bm1vZGlmaWVkLCBmb3IgdGhlIHNvbGUgcHVycG9zZSBvZiBkZXNpZ25pbmcsIGRldmVsb3BpbmcgYW5kIHRlc3RpbmcgeW91ciBKYXZhIGFwcGxldHMgYW5kIAorYXBwbGljYXRpb25zICgiUHJvZ3JhbXMiKS4KKworMi4gTGljZW5zZSB0byBEaXN0cmlidXRlIFNvZnR3YXJlLiBJbiBhZGRpdGlvbiB0byB0aGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMSAoU29mdHdhcmUgCitJbnRlcm5hbCBVc2UgYW5kIERldmVsb3BtZW50IExpY2Vuc2UgR3JhbnQpIG9mIHRoZXNlIFN1cHBsZW1lbnRhbCBUZXJtcywgc3ViamVjdCB0byB0aGUgCit0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bywgU2VjdGlvbiAzIChKYXZhIAorVGVjaG5vbG9neSBSZXN0cmljdGlvbnMpIG9mIHRoZXNlIFN1cHBsZW1lbnRhbCBUZXJtcywgU3VuIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlLCAKK25vbi10cmFuc2ZlcmFibGUsIGxpbWl0ZWQgbGljZW5zZSB0byByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGluIGJpbmFyeSBjb2RlIAorZm9ybSBvbmx5LCBwcm92aWRlZCB0aGF0IHlvdTogKGkpIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGNvbXBsZXRlIGFuZCB1bm1vZGlmaWVkLCBleGNlcHQgCit0aGF0IHlvdSBtYXkgb21pdCB0aG9zZSBmaWxlcyBzcGVjaWZpY2FsbHkgaWRlbnRpZmllZCBhcyJvcHRpb25hbCIgaW4gdGhlIFNvZnR3YXJlICJSRUFETUUiIAorZmlsZSwgd2hpY2ggaW5jbHVkZSBzYW1wbGVzLCBkb2N1bWVudHMsIGFuZCBiaW4gZmlsZXMsIG9yIHRoYXQgYXJlIHJlbW92YWJsZSBieSB1c2luZyB0aGUgCitTb2Z0d2FyZSBjdXN0b21pemVyIHRvb2wgcHJvdmlkZWQsIG9ubHkgYXMgcGFydCBvZiBhbmQgZm9yIHRoZSBzb2xlIHB1cnBvc2Ugb2YgcnVubmluZyB5b3VyIAorUHJvZ3JhbSBpbnRvIHdoaWNoIHRoZSBTb2Z0d2FyZSBpcyBpbmNvcnBvcmF0ZWQ7IChpaSkgZG8gbm90IGRpc3RyaWJ1dGUgYWRkaXRpb25hbCBzb2Z0d2FyZSAKK2ludGVuZGVkIHRvIHJlcGxhY2UgYW55IGNvbXBvbmVudHMgb2YgdGhlIFNvZnR3YXJlOyAoaWlpKSBkbyBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueSAKK3Byb3ByaWV0YXJ5IGxlZ2VuZHMgb3Igbm90aWNlcyBjb250YWluZWQgaW4gdGhlIFNvZnR3YXJlOyAoaXYpIG9ubHkgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgCitzdWJqZWN0IHRvIGEgbGljZW5zZSBhZ3JlZW1lbnQgdGhhdCBwcm90ZWN0cyBTdW4ncyBpbnRlcmVzdHMgY29uc2lzdGVudCB3aXRoIHRoZSB0ZXJtcyAKK2NvbnRhaW5lZCBpbiB0aGlzIEFncmVlbWVudDsgYW5kICh2KSBhZ3JlZSB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBTdW4gYW5kIGl0cyBsaWNlbnNvcnMgCitmcm9tIGFuZCBhZ2FpbnN0IGFueSBkYW1hZ2VzLCBjb3N0cywgbGlhYmlsaXRpZXMsIHNldHRsZW1lbnQgYW1vdW50cyBvciBleHBlbnNlcywgaW5jbHVkaW5nIAorYXR0b3JuZXlzJyBmZWVzLCBpbmN1cnJlZCBpbiBjb25uZWN0aW9uIHdpdGggYW55IGNsYWltLCBsYXdzdWl0IG9yIGFjdGlvbiBieSBhbnkgdGhpcmQgcGFydHkgCit0aGF0IGFyaXNlcyBvciByZXN1bHRzIGZyb20gdGhlIHVzZSBvciBkaXN0cmlidXRpb24gb2YgYW55IGFuZCBhbGwgUHJvZ3JhbXMgb3IgU29mdHdhcmUuCisKKzMuIEphdmEgVGVjaG5vbG9neSBSZXN0cmljdGlvbnMuIFlvdSBtYXkgbm90IG1vZGlmeSB0aGUgSmF2YSBQbGF0Zm9ybSBJbnRlcmZhY2UgKCJKUEkiLCAKK2lkZW50aWZpZWQgYXMgY2xhc3NlcyBjb250YWluZWQgd2l0aGluIHRoZSAiamF2YSIgcGFja2FnZSBvciBhbnkgc3VicGFja2FnZXMgb2YgdGhlICJqYXZhIiAKK3BhY2thZ2UpLCBieSBjcmVhdGluZyBhZGRpdGlvbmFsIGNsYXNzZXMgd2l0aGluIHRoZSBKUEkgb3Igb3RoZXJ3aXNlIGNhdXNpbmcgdGhlIGFkZGl0aW9uIHRvIAorb3IgbW9kaWZpY2F0aW9uIG9mIHRoZSBjbGFzc2VzIGluIHRoZSBKUEkuIEluIHRoZSBldmVudCB0aGF0IHlvdSBjcmVhdGUgYW4gYWRkaXRpb25hbCBjbGFzcyAKK2FuZCBhc3NvY2lhdGVkIEFQSSdzLCB3aGljaDogKGkpIGV4dGVuZHMgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIEphdmEgcGxhdGZvcm0sIGFuZCAoaWkpIGlzIAorZXhwb3NlZCB0byB0aGlyZCBwYXJ0eSBzb2Z0d2FyZSBkZXZlbG9wZXJzIGZvciB0aGUgcHVycG9zZSBvZiBkZXZlbG9waW5nIGFkZGl0aW9uYWwgc29mdHdhcmUgCit3aGljaCBpbnZva2VzIHN1Y2ggYWRkaXRpb25hbCBBUEksIHlvdSBtdXN0IHByb21wdGx5IHB1Ymxpc2ggYnJvYWRseSBhbiBhY2N1cmF0ZSAKK3NwZWNpZmljYXRpb24gZm9yIHN1Y2ggQVBJIGZvciBmcmVlIHVzZSBieSBhbGwgZGV2ZWxvcGVycy4gWW91IG1heSBub3QgY3JlYXRlLCBvciBhdXRob3JpemUgCit5b3VyIGxpY2Vuc2VlcyB0byBjcmVhdGUgYWRkaXRpb25hbCBjbGFzc2VzLCBpbnRlcmZhY2VzLCBwYWNrYWdlcyBvciBzdWJwYWNrYWdlcyB0aGF0IGFyZSBpbiAKK2FueSB3YXkgaWRlbnRpZmllZCBhcyAiamF2YSIsICJqYXZheCIsICJzdW4iIG9yIHNpbWlsYXIgY29udmVudGlvbiBhcyBzcGVjaWZpZWQgYnkgU3VuIGluIAorYW55IGNsYXNzIGZpbGUgbmFtaW5nIGNvbnZlbnRpb24gZGVzaWduYXRpb24uCisKKzQuIEphdmEgUnVudGltZSBBdmFpbGFiaWxpdHkuIFJlZmVyIHRvIHRoZSBhcHByb3ByaWF0ZSB2ZXJzaW9uIG9mIHRoZSBKYXZhIFJ1bnRpbWUgCitFbnZpcm9ubWVudCBiaW5hcnkgY29kZSBsaWNlbnNlIChjdXJyZW50bHkgbG9jYXRlZCBhdCAKK2h0dHA6Ly93d3cuamF2YS5zdW4uY29tL2pkay9pbmRleC5odG1sKSBmb3IgdGhlIGF2YWlsYWJpbGl0eSBvZiBydW50aW1lIGNvZGUgd2hpY2ggbWF5IGJlIAorZGlzdHJpYnV0ZWQgd2l0aCBKYXZhIGFwcGxldHMgYW5kIGFwcGxpY2F0aW9ucy4KKworNS4gVHJhZGVtYXJrcyBhbmQgTG9nb3MuIFlvdSBhY2tub3dsZWRnZSBhbmQgYWdyZWUgYXMgYmV0d2VlbiB5b3UgYW5kIFN1biB0aGF0IFN1biBvd25zIHRoZSAKK1NVTiwgU09MQVJJUywgSkFWQSwgSklOSSwgRk9SVEUsIFNUQVJPRkZJQ0UsIFNUQVJQT1JUQUwgYW5kIGlQTEFORVQgdHJhZGVtYXJrcyBhbmQgYWxsIFNVTiwgCitTT0xBUklTLCBKQVZBLCBKSU5JLCBGT1JURSwgU1RBUk9GRklDRSwgU1RBUlBPUlRBTCBhbmQgaVBMQU5FVC1yZWxhdGVkIHRyYWRlbWFya3MsIHNlcnZpY2UgCittYXJrcywgbG9nb3MgYW5kIG90aGVyIGJyYW5kIGRlc2lnbmF0aW9ucyAoIlN1biBNYXJrcyIpLCBhbmQgeW91IGFncmVlIHRvIGNvbXBseSB3aXRoIHRoZSAKK1N1biBUcmFkZW1hcmsgYW5kIExvZ28gVXNhZ2UgUmVxdWlyZW1lbnRzIGN1cnJlbnRseSBsb2NhdGVkIGF0IAoraHR0cDovL3d3dy5zdW4uY29tL3BvbGljaWVzL3RyYWRlbWFya3MuIEFueSB1c2UgeW91IG1ha2Ugb2YgdGhlIFN1biBNYXJrcyBpbnVyZXMgdG8gU3VuJ3MgCitiZW5lZml0LgorCis2LiBTb3VyY2UgQ29kZS4gU29mdHdhcmUgbWF5IGNvbnRhaW4gc291cmNlIGNvZGUgdGhhdCBpcyBwcm92aWRlZCBzb2xlbHkgZm9yIHJlZmVyZW5jZSAKK3B1cnBvc2VzIHB1cnN1YW50IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudC4gU291cmNlIGNvZGUgbWF5IG5vdCBiZSByZWRpc3RyaWJ1dGVkIAordW5sZXNzIGV4cHJlc3NseSBwcm92aWRlZCBmb3IgaW4gdGhpcyBBZ3JlZW1lbnQuCisKKzcuIFRlcm1pbmF0aW9uIGZvciBJbmZyaW5nZW1lbnQuIEVpdGhlciBwYXJ0eSBtYXkgdGVybWluYXRlIHRoaXMgQWdyZWVtZW50IGltbWVkaWF0ZWx5IAorc2hvdWxkIGFueSBTb2Z0d2FyZSBiZWNvbWUsIG9yIGluIGVpdGhlciBwYXJ0eSdzIG9waW5pb24gYmUgbGlrZWx5IHRvIGJlY29tZSwgdGhlIHN1YmplY3Qgb2YgCithIGNsYWltIG9mIGluZnJpbmdlbWVudCBvZiBhbnkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0LgorCitGb3IgaW5xdWlyaWVzIHBsZWFzZSBjb250YWN0OiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIDQxNTAgTmV0d29yayBDaXJjbGUsIFNhbnRhIENsYXJhLCAKK0NhbGlmb3JuaWEgOTUwNTQuCisKK0xGSSMgMTI5NjIxL0Zvcm0gSUQjMDExODAxCmRpZmYgLS1naXQgYS9saWNlbnNlcy9zdW4tYmNsYS1qbWkgYi9saWNlbnNlcy9zdW4tYmNsYS1qbWkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWY2ZmEzMgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL3N1bi1iY2xhLWptaQpAQCAtMCwwICsxLDE0NCBAQAorU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiAKK1NvZnR3YXJlIExpY2Vuc2UgQWdyZWVtZW50CisKK1JFQUQgVEhFIFRFUk1TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBBTlkgUFJPVklERUQgU1VQUExFTUVOVEFMIExJQ0VOU0UgVEVSTVMgCisoQ09MTEVDVElWRUxZICJBR1JFRU1FTlQiKSBDQVJFRlVMTFkgQkVGT1JFIE9QRU5JTkcgVEhFIFNPRlRXQVJFIE1FRElBIFBBQ0tBR0UuICAKK0JZIE9QRU5JTkcgVEhFIFNPRlRXQVJFIE1FRElBIFBBQ0tBR0UsIFlPVSBBR1JFRSBUTyBUSEUgVEVSTVMgT0YgVEhJUyBBR1JFRU1FTlQuICAKK0lGIFlPVSBBUkUgQUNDRVNTSU5HIFRIRSBTT0ZUV0FSRSBFTEVDVFJPTklDQUxMWSwgSU5ESUNBVEUgWU9VUiBBQ0NFUFRBTkNFIAorT0YgVEhFU0UgVEVSTVMgQlkgU0VMRUNUSU5HIFRIRSAiQUNDRVBUIiBCVVRUT04gQVQgVEhFIEVORCBPRiBUSElTIEFHUkVFTUVOVC4gIAorSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBBTEwgVEhFU0UgVEVSTVMsIFBST01QVExZIFJFVFVSTiBUSEUgVU5VU0VEIFNPRlRXQVJFIAorVE8gWU9VUiBQTEFDRSBPRiBQVVJDSEFTRSBGT1IgQSBSRUZVTkQgT1IsIElGIFRIRSBTT0ZUV0FSRSBJUyBBQ0NFU1NFRCBFTEVDVFJPTklDQUxMWSwgCitTRUxFQ1QgVEhFICJERUNMSU5FIiBCVVRUT04gQVQgVEhFIEVORCBPRiBUSElTIEFHUkVFTUVOVC4gCisKKzEuIExJQ0VOU0UgVE8gVVNFLiAgU3VuIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlIGFuZCBub24tdHJhbnNmZXJhYmxlIGxpY2Vuc2UgCitmb3IgdGhlIGludGVybmFsIHVzZSBvbmx5IG9mIHRoZSBhY2NvbXBhbnlpbmcgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24gYW5kIGFueSAKK2Vycm9yIGNvcnJlY3Rpb25zIHByb3ZpZGVkIGJ5IFN1biAoY29sbGVjdGl2ZWx5ICJTb2Z0d2FyZSIpLCBieSB0aGUgbnVtYmVyIG9mIHVzZXJzIAorYW5kIHRoZSBjbGFzcyBvZiBjb21wdXRlciBoYXJkd2FyZSBmb3Igd2hpY2ggdGhlIGNvcnJlc3BvbmRpbmcgZmVlIGhhcyBiZWVuIHBhaWQuIAorCisyLiBSRVNUUklDVElPTlMuICBTb2Z0d2FyZSBpcyBjb25maWRlbnRpYWwgYW5kIGNvcHlyaWdodGVkLiBUaXRsZSB0byBTb2Z0d2FyZSBhbmQgYWxsIAorYXNzb2NpYXRlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGlzIHJldGFpbmVkIGJ5IFN1biBhbmQvb3IgaXRzIGxpY2Vuc29ycy4gIAorRXhjZXB0IGFzIHNwZWNpZmljYWxseSBhdXRob3JpemVkIGluIGFueSBTdXBwbGVtZW50YWwgTGljZW5zZSBUZXJtcywgeW91IG1heSBub3QgbWFrZSAKK2NvcGllcyBvZiBTb2Z0d2FyZSwgb3RoZXIgdGhhbiBhIHNpbmdsZSBjb3B5IG9mIFNvZnR3YXJlIGZvciBhcmNoaXZhbCBwdXJwb3Nlcy4gIAorVW5sZXNzIGVuZm9yY2VtZW50IGlzIHByb2hpYml0ZWQgYnkgYXBwbGljYWJsZSBsYXcsIHlvdSBtYXkgbm90IG1vZGlmeSwgZGVjb21waWxlLCAKK29yIHJldmVyc2UgZW5naW5lZXIgU29mdHdhcmUuICBMaWNlbnNlZSBhY2tub3dsZWRnZXMgdGhhdCBMaWNlbnNlZCBTb2Z0d2FyZSBpcyBub3QgCitkZXNpZ25lZCBvciBpbnRlbmRlZCBmb3IgdXNlIGluIHRoZSBkZXNpZ24sIGNvbnN0cnVjdGlvbiwgb3BlcmF0aW9uIG9yIG1haW50ZW5hbmNlIAorb2YgYW55IG51Y2xlYXIgZmFjaWxpdHkuIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gZGlzY2xhaW1zIGFueSBleHByZXNzIG9yIGltcGxpZWQgCit3YXJyYW50eSBvZiBmaXRuZXNzIGZvciBzdWNoIHVzZXMuICAgTm8gcmlnaHQsIHRpdGxlIG9yIGludGVyZXN0IGluIG9yIHRvIGFueSB0cmFkZW1hcmssCitzZXJ2aWNlIG1hcmssIGxvZ28gb3IgdHJhZGUgbmFtZSBvZiBTdW4gb3IgaXRzIGxpY2Vuc29ycyBpcyBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LiAKKworMy4gTElNSVRFRCBXQVJSQU5UWS4gIFN1biB3YXJyYW50cyB0byB5b3UgdGhhdCBmb3IgYSBwZXJpb2Qgb2YgbmluZXR5ICg5MCkgZGF5cyAKK2Zyb20gdGhlIGRhdGUgb2YgcHVyY2hhc2UsIGFzIGV2aWRlbmNlZCBieSBhIGNvcHkgb2YgdGhlIHJlY2VpcHQsIHRoZSBtZWRpYSBvbiB3aGljaCAKK1NvZnR3YXJlIGlzIGZ1cm5pc2hlZCAoaWYgYW55KSB3aWxsIGJlIGZyZWUgb2YgZGVmZWN0cyBpbiBtYXRlcmlhbHMgYW5kIHdvcmttYW5zaGlwIAordW5kZXIgbm9ybWFsIHVzZS4gIEV4Y2VwdCBmb3IgdGhlIGZvcmVnb2luZywgU29mdHdhcmUgaXMgcHJvdmlkZWQgIkFTIElTIi4gIAorWW91ciBleGNsdXNpdmUgcmVtZWR5IGFuZCBTdW4ncyBlbnRpcmUgbGlhYmlsaXR5IHVuZGVyIHRoaXMgbGltaXRlZCB3YXJyYW50eSB3aWxsIGJlIAorYXQgU3VuJ3Mgb3B0aW9uIHRvIHJlcGxhY2UgU29mdHdhcmUgbWVkaWEgb3IgcmVmdW5kIHRoZSBmZWUgcGFpZCBmb3IgU29mdHdhcmUuIAorCis0LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZLiAgVU5MRVNTIFNQRUNJRklFRCBJTiBUSElTIEFHUkVFTUVOVCwgQUxMIEVYUFJFU1MgT1IgSU1QTElFRCAKK0NPTkRJVElPTlMsIFJFUFJFU0VOVEFUSU9OUyBBTkQgV0FSUkFOVElFUywgSU5DTFVESU5HIEFOWSBJTVBMSUVEIFdBUlJBTlRZIAorT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tSU5GUklOR0VNRU5UIEFSRSBESVNDTEFJTUVELCAKK0VYQ0VQVCBUTyBUSEUgRVhURU5UIFRIQVQgVEhFU0UgRElTQ0xBSU1FUlMgQVJFIEhFTEQgVE8gQkUgTEVHQUxMWSBJTlZBTElELiAKKworNS4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuICBUTyBUSEUgRVhURU5UIE5PVCBQUk9ISUJJVEVEIEJZIExBVywgSU4gTk8gRVZFTlQgV0lMTCAKK1NVTiBPUiBJVFMgTElDRU5TT1JTIEJFIExJQUJMRSBGT1IgQU5ZIExPU1QgUkVWRU5VRSwgUFJPRklUIE9SIERBVEEsIE9SIEZPUiBTUEVDSUFMLCAKK0lORElSRUNULCBDT05TRVFVRU5USUFMLCBJTkNJREVOVEFMIE9SIFBVTklUSVZFIERBTUFHRVMsIEhPV0VWRVIgQ0FVU0VEIFJFR0FSRExFU1MgCitPRiBUSEUgVEhFT1JZIE9GIExJQUJJTElUWSwgQVJJU0lORyBPVVQgT0YgT1IgUkVMQVRFRCBUTyBUSEUgVVNFIE9GIE9SIElOQUJJTElUWSBUTyBVU0UgCitTT0ZUV0FSRSwgRVZFTiBJRiBTVU4gSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiAgCitJbiBubyBldmVudCB3aWxsIFN1bidzIGxpYWJpbGl0eSB0byB5b3UsIHdoZXRoZXIgaW4gY29udHJhY3QsIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgCitvciBvdGhlcndpc2UsIGV4Y2VlZCB0aGUgYW1vdW50IHBhaWQgYnkgeW91IGZvciBTb2Z0d2FyZSB1bmRlciB0aGlzIEFncmVlbWVudC4gIAorVGhlIGZvcmVnb2luZyBsaW1pdGF0aW9ucyB3aWxsIGFwcGx5IGV2ZW4gaWYgdGhlIGFib3ZlIHN0YXRlZCB3YXJyYW50eSBmYWlscyBvZiBpdHMgCitlc3NlbnRpYWwgcHVycG9zZS4gCisKKzYuIFRlcm1pbmF0aW9uLiAgVGhpcyBBZ3JlZW1lbnQgaXMgZWZmZWN0aXZlIHVudGlsIHRlcm1pbmF0ZWQuICBZb3UgbWF5IHRlcm1pbmF0ZSAKK3RoaXMgQWdyZWVtZW50IGF0IGFueSB0aW1lIGJ5IGRlc3Ryb3lpbmcgYWxsIGNvcGllcyBvZiBTb2Z0d2FyZS4gIFRoaXMgQWdyZWVtZW50IHdpbGwgCit0ZXJtaW5hdGUgaW1tZWRpYXRlbHkgd2l0aG91dCBub3RpY2UgZnJvbSBTdW4gaWYgeW91IGZhaWwgdG8gY29tcGx5IHdpdGggYW55IHByb3Zpc2lvbiAKK29mIHRoaXMgQWdyZWVtZW50LiAgVXBvbiBUZXJtaW5hdGlvbiwgeW91IG11c3QgZGVzdHJveSBhbGwgY29waWVzIG9mIFNvZnR3YXJlLiAKKworNy4gRXhwb3J0IFJlZ3VsYXRpb25zLiBBbGwgU29mdHdhcmUgYW5kIHRlY2huaWNhbCBkYXRhIGRlbGl2ZXJlZCB1bmRlciB0aGlzIEFncmVlbWVudCAKK2FyZSBzdWJqZWN0IHRvIFVTIGV4cG9ydCBjb250cm9sIGxhd3MgYW5kIG1heSBiZSBzdWJqZWN0IHRvIGV4cG9ydCBvciBpbXBvcnQgcmVndWxhdGlvbnMgCitpbiBvdGhlciBjb3VudHJpZXMuICBZb3UgYWdyZWUgdG8gY29tcGx5IHN0cmljdGx5IHdpdGggYWxsIHN1Y2ggbGF3cyBhbmQgcmVndWxhdGlvbnMgCithbmQgYWNrbm93bGVkZ2UgdGhhdCB5b3UgaGF2ZSB0aGUgcmVzcG9uc2liaWxpdHkgdG8gb2J0YWluIHN1Y2ggbGljZW5zZXMgdG8gZXhwb3J0LCAKK3JlLWV4cG9ydCwgb3IgaW1wb3J0IGFzIG1heSBiZSByZXF1aXJlZCBhZnRlciBkZWxpdmVyeSB0byB5b3UuIAorCis4LiBVLlMuIEdvdmVybm1lbnQgUmVzdHJpY3RlZCBSaWdodHMuICBJZiBTb2Z0d2FyZSBpcyBiZWluZyBhY3F1aXJlZCBieSBvciBvbiBiZWhhbGYgCitvZiB0aGUgVS5TLiBHb3Zlcm5tZW50IG9yIGJ5IGEgVS5TLiBHb3Zlcm5tZW50IHByaW1lIGNvbnRyYWN0b3Igb3Igc3ViY29udHJhY3RvciAKKyhhdCBhbnkgdGllciksIHRoZW4gdGhlIEdvdmVybm1lbnQncyByaWdodHMgaW4gU29mdHdhcmUgYW5kIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIAord2lsbCBiZSBvbmx5IGFzIHNldCBmb3J0aCBpbiB0aGlzIEFncmVlbWVudDsgdGhpcyBpcyBpbiBhY2NvcmRhbmNlIHdpdGggNDggQ0ZSIDIyNy43MjAxIAordGhyb3VnaCAyMjcuNzIwMi00IChmb3IgRGVwYXJ0bWVudCBvZiBEZWZlbnNlIChET0QpIGFjcXVpc2l0aW9ucykgYW5kIHdpdGggNDggQ0ZSIDIuMTAxIAorYW5kIDEyLjIxMiAoZm9yIG5vbi1ET0QgYWNxdWlzaXRpb25zKS4gCisKKzkuIEdvdmVybmluZyBMYXcuICBBbnkgYWN0aW9uIHJlbGF0ZWQgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBiZSBnb3Zlcm5lZCBieSBDYWxpZm9ybmlhIAorbGF3IGFuZCBjb250cm9sbGluZyBVLlMuIGZlZGVyYWwgbGF3LiAgTm8gY2hvaWNlIG9mIGxhdyBydWxlcyBvZiBhbnkganVyaXNkaWN0aW9uIAord2lsbCBhcHBseS4gCisKKzEwLiBTZXZlcmFiaWxpdHkuIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCAKK3RoaXMgQWdyZWVtZW50IHdpbGwgcmVtYWluIGluIGVmZmVjdCB3aXRoIHRoZSBwcm92aXNpb24gb21pdHRlZCwgdW5sZXNzIG9taXNzaW9uIHdvdWxkIAorZnJ1c3RyYXRlIHRoZSBpbnRlbnQgb2YgdGhlIHBhcnRpZXMsIGluIHdoaWNoIGNhc2UgdGhpcyBBZ3JlZW1lbnQgd2lsbCBpbW1lZGlhdGVseSB0ZXJtaW5hdGUuIAorCisxMS4gSW50ZWdyYXRpb24uICBUaGlzIEFncmVlbWVudCBpcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHlvdSBhbmQgU3VuIHJlbGF0aW5nIAordG8gaXRzIHN1YmplY3QgbWF0dGVyLiAgSXQgc3VwZXJzZWRlcyBhbGwgcHJpb3Igb3IgY29udGVtcG9yYW5lb3VzIG9yYWwgb3Igd3JpdHRlbiAKK2NvbW11bmljYXRpb25zLCBwcm9wb3NhbHMsIHJlcHJlc2VudGF0aW9ucyBhbmQgd2FycmFudGllcyBhbmQgcHJldmFpbHMgb3ZlciBhbnkgY29uZmxpY3RpbmcgCitvciBhZGRpdGlvbmFsIHRlcm1zIG9mIGFueSBxdW90ZSwgb3JkZXIsIGFja25vd2xlZGdtZW50LCBvciBvdGhlciBjb21tdW5pY2F0aW9uIGJldHdlZW4gCit0aGUgcGFydGllcyByZWxhdGluZyB0byBpdHMgc3ViamVjdCBtYXR0ZXIgZHVyaW5nIHRoZSB0ZXJtIG9mIHRoaXMgQWdyZWVtZW50LiAgCitObyBtb2RpZmljYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQgd2lsbCBiZSBiaW5kaW5nLCB1bmxlc3MgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IAorYW4gYXV0aG9yaXplZCByZXByZXNlbnRhdGl2ZSBvZiBlYWNoIHBhcnR5LiAKKworSkFWQVRNIElOVEVSRkFDRSBDTEFTU0VTCitKQVZBIE1FVEFEQVRBIElOVEVSRkFDRSAoIkpNSSIpLCBWRVJTSU9OIDEuMCwgU0FNUExFIENMQVNTIElOVEVSRkFDRVMgCitTVVBQTEVNRU5UQUwgTElDRU5TRSBURVJNUworCitUaGVzZSBzdXBwbGVtZW50YWwgbGljZW5zZSB0ZXJtcyAoIlN1cHBsZW1lbnRhbCBUZXJtcyIpIGFkZCB0byBvciBtb2RpZnkgdGhlIHRlcm1zIAorb2YgdGhlIFNvZnR3YXJlIExpY2Vuc2UgQWdyZWVtZW50IChjb2xsZWN0aXZlbHksIHRoZSAiQWdyZWVtZW50IikuIENhcGl0YWxpemVkIHRlcm1zIAorbm90IGRlZmluZWQgaW4gdGhlc2UgU3VwcGxlbWVudGFsIFRlcm1zIHNoYWxsIGhhdmUgdGhlIHNhbWUgbWVhbmluZ3MgYXNjcmliZWQgdG8gdGhlbSAKK2luIHRoZSBBZ3JlZW1lbnQuIFRoZXNlIFN1cHBsZW1lbnRhbCBUZXJtcyBzaGFsbCBzdXBlcnNlZGUgYW55IGluY29uc2lzdGVudCBvciBjb25mbGljdGluZyAKK3Rlcm1zIGluIHRoZSBBZ3JlZW1lbnQsIG9yIGluIGFueSBsaWNlbnNlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFNvZnR3YXJlLiAKKworMS4gU29mdHdhcmUgSW50ZXJuYWwgVXNlIGFuZCBEZXZlbG9wbWVudCBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyAKK29mIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0byBTZWN0aW9uIDMgKEphdmEgVGVjaG5vbG9neSBSZXN0cmljdGlvbnMpIAorb2YgdGhlc2UgU3VwcGxlbWVudGFsIFRlcm1zLCBTdW4gZ3JhbnRzIHlvdSBhIG5vbi1leGNsdXNpdmUsIG5vbi10cmFuc2ZlcmFibGUsIGxpbWl0ZWQgCitsaWNlbnNlIHRvIHJlcHJvZHVjZSBpbnRlcm5hbGx5IGFuZCB1c2UgaW50ZXJuYWxseSB0aGUgU29mdHdhcmUsIGNvbXBsZXRlIGFuZCB1bm1vZGlmaWVkLCAKK2ZvciB0aGUgc29sZSBwdXJwb3NlIG9mIGRlc2lnbmluZywgZGV2ZWxvcGluZywgdGVzdGluZyBhbmQgcnVubmluZyB5b3VyIEphdmEgYXBwbGV0cyAKK2FuZCBhcHBsaWNhdGlvbnMuIEZvciBjbGFyaWZpY2F0aW9uLCB0aGUgU29mdHdhcmUgd2lsbCBiZSBjb25zaWRlcmVkIHVubW9kaWZpZWQgaWYgeW91IGhhdmUgCitjb21waWxlZCB0aGUgU29mdHdhcmUgdXNpbmcgYSBjb21wbGlhbnQgSmF2YSBjb21waWxlci4KKworMi4gTGljZW5zZSB0byBEaXN0cmlidXRlIFNvZnR3YXJlLiAgSW4gYWRkaXRpb24gdG8gdGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDEgCisoU29mdHdhcmUgSW50ZXJuYWwgVXNlIGFuZCBEZXZlbG9wbWVudCBMaWNlbnNlIEdyYW50KSBvZiB0aGVzZSBTdXBwbGVtZW50YWwgVGVybXMsIAorc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgCit0byBTZWN0aW9uIDMgKEphdmEgVGVjaG5vbG9neSBSZXN0cmljdGlvbnMpLCBTdW4gZ3JhbnRzIHlvdSBhIG5vbi1leGNsdXNpdmUsIAorbm9uLXRyYW5zZmVyYWJsZSwgbGltaXRlZCBsaWNlbnNlIHRvIHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgcHJvdmlkZWQgCit0aGF0IHlvdSAoaSkgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgY29tcGxldGUgYW5kIHVubW9kaWZpZWQgYW5kIG9ubHkgYnVuZGxlZCBhcyBwYXJ0IAorb2YgeW91ciBQcm9ncmFtcywgKGlpKSBkbyBub3QgZGlzdHJpYnV0ZSBhZGRpdGlvbmFsIHNvZnR3YXJlIGludGVuZGVkIHRvIHJlcGxhY2UgYW55IAorY29tcG9uZW50KHMpIG9mIHRoZSBTb2Z0d2FyZSwgKGlpaSkgZG8gbm90IHJlbW92ZSBvciBhbHRlciBhbnkgcHJvcHJpZXRhcnkgbGVnZW5kcyAKK29yIG5vdGljZXMgY29udGFpbmVkIGluIHRoZSBTb2Z0d2FyZSwgKGl2KSBvbmx5IGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIHN1YmplY3QgdG8gYSBsaWNlbnNlIAorYWdyZWVtZW50IHRoYXQgcHJvdGVjdHMgU3VuJ3MgaW50ZXJlc3RzIGNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMgY29udGFpbmVkIAoraW4gdGhpcyBBZ3JlZW1lbnQsIGFuZCAodikgYWdyZWUgdG8gZGVmZW5kIGFuZCBpbmRlbW5pZnkgU3VuIGFuZCBpdHMgbGljZW5zb3JzIGZyb20gCithbmQgYWdhaW5zdCBhbnkgZGFtYWdlcywgY29zdHMsIGxpYWJpbGl0aWVzLCBzZXR0bGVtZW50IGFtb3VudHMgYW5kL29yIGV4cGVuc2VzIChpbmNsdWRpbmcgCithdHRvcm5leXMnIGZlZXMpIGluY3VycmVkIGluIGNvbm5lY3Rpb24gd2l0aCBhbnkgY2xhaW0sIGxhd3N1aXQgb3IgYWN0aW9uIGJ5IGFueSB0aGlyZCAKK3BhcnR5IHRoYXQgYXJpc2VzIG9yIHJlc3VsdHMgZnJvbSB0aGUgdXNlIG9yIGRpc3RyaWJ1dGlvbiBvZiBhbnkgYW5kIGFsbCBQcm9ncmFtcyBhbmQvb3IgCitTb2Z0d2FyZS4gCisKKzMuIEphdmEgVGVjaG5vbG9neSBSZXN0cmljdGlvbnMuIFlvdSBtYXkgbm90IG1vZGlmeSB0aGUgSmF2YSBQbGF0Zm9ybSBJbnRlcmZhY2UgCisoIkpQSSIsIGlkZW50aWZpZWQgYXMgY2xhc3NlcyBjb250YWluZWQgd2l0aGluIHRoZSAiamF2YSIgcGFja2FnZSBvciBhbnkgc3VicGFja2FnZXMgb2YgCit0aGUgImphdmEiIHBhY2thZ2UpLCBieSBjcmVhdGluZyBhZGRpdGlvbmFsIGNsYXNzZXMgd2l0aGluIHRoZSBKUEkgb3Igb3RoZXJ3aXNlIGNhdXNpbmcgCit0aGUgYWRkaXRpb24gdG8gb3IgbW9kaWZpY2F0aW9uIG9mIHRoZSBjbGFzc2VzIGluIHRoZSBKUEkuIEluIHRoZSBldmVudCB0aGF0IHlvdSBjcmVhdGUgCithbiBhZGRpdGlvbmFsIGNsYXNzIGFuZCBhc3NvY2lhdGVkIEFQSShzKSB3aGljaCAoaSkgZXh0ZW5kcyB0aGUgZnVuY3Rpb25hbGl0eSBvZiB0aGUgSmF2YSAKK1BsYXRmb3JtLCBhbmQgKGlpKSBpcyBleHBvc2VkIHRvIHRoaXJkIHBhcnR5IHNvZnR3YXJlIGRldmVsb3BlcnMgZm9yIHRoZSBwdXJwb3NlIAorb2YgZGV2ZWxvcGluZyBhZGRpdGlvbmFsIHNvZnR3YXJlIHdoaWNoIGludm9rZXMgc3VjaCBhZGRpdGlvbmFsIEFQSSwgeW91IG11c3QgcHJvbXB0bHkgCitwdWJsaXNoIGJyb2FkbHkgYW4gYWNjdXJhdGUgc3BlY2lmaWNhdGlvbiBmb3Igc3VjaCBBUEkgZm9yIGZyZWUgdXNlIGJ5IGFsbCBkZXZlbG9wZXJzLiAKK1lvdSBtYXkgbm90IGNyZWF0ZSwgb3IgYXV0aG9yaXplIHlvdXIgbGljZW5zZWVzIHRvIGNyZWF0ZSBhZGRpdGlvbmFsIGNsYXNzZXMsIGludGVyZmFjZXMsIAorb3Igc3VicGFja2FnZXMgdGhhdCBhcmUgaW4gYW55IHdheSBpZGVudGlmaWVkIGFzICJqYXZhIiwgImphdmF4IiwgInN1biIgb3Igc2ltaWxhciAKK2NvbnZlbnRpb24gYXMgc3BlY2lmaWVkIGJ5IFN1biBpbiBhbnkgbmFtaW5nIGNvbnZlbnRpb24gZGVzaWduYXRpb24uIAorCis0LiBUcmFkZW1hcmtzIGFuZCBMb2dvcy4gWW91IGFja25vd2xlZGdlIGFuZCBhZ3JlZSBhcyBiZXR3ZWVuIHlvdSBhbmQgU3VuIHRoYXQgU3VuIG93bnMgCit0aGUgU1VOLCBTT0xBUklTLCBKQVZBLCBKSU5JLCBGT1JURSwgYW5kIGlQTEFORVQgdHJhZGVtYXJrcyBhbmQgYWxsIFNVTiwgU09MQVJJUywgSkFWQSwgCitKSU5JLCBGT1JURSwgYW5kIGlQTEFORVQtcmVsYXRlZCB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBsb2dvcyBhbmQgb3RoZXIgYnJhbmQgCitkZXNpZ25hdGlvbnMgKCJTdW4gTWFya3MiKSwgYW5kIHlvdSBhZ3JlZSB0byBjb21wbHkgd2l0aCB0aGUgU3VuIFRyYWRlbWFyayBhbmQgTG9nbyBVc2FnZSAKK1JlcXVpcmVtZW50cyBjdXJyZW50bHkgbG9jYXRlZCBhdCBodHRwOi8vd3d3LnN1bi5jb20vcG9saWNpZXMvdHJhZGVtYXJrcy4gQW55IHVzZSB5b3UgCittYWtlIG9mIHRoZSBTdW4gTWFya3MgaW51cmVzIHRvIFN1bidzIGJlbmVmaXQuIAorCis1LiBUZXJtaW5hdGlvbiBmb3IgSW5mcmluZ2VtZW50LiBFaXRoZXIgcGFydHkgbWF5IHRlcm1pbmF0ZSB0aGlzIEFncmVlbWVudCBpbW1lZGlhdGVseSAKK3Nob3VsZCBhbnkgU29mdHdhcmUgYmVjb21lLCBvciBpbiBlaXRoZXIgcGFydHkncyBvcGluaW9uIGJlIGxpa2VseSB0byBiZWNvbWUsIHRoZSBzdWJqZWN0IAorb2YgYSBjbGFpbSBvZiBpbmZyaW5nZW1lbnQgb2YgYW55IGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodC4gCisKK0ZvciBpbnF1aXJpZXMgcGxlYXNlIGNvbnRhY3Q6IAorU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiA0MTUwIE5ldHdvcmsgQ2lyY2xlLCBTYW50YSBDbGFyYSwgQ2FsaWZvcm5pYSA5NTA1NC4gCisoTEZJIzExNTAyNS9Gb3JtIElEIzAxMTgwMSkKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL3N1bi1iY2xhLWptcyBiL2xpY2Vuc2VzL3N1bi1iY2xhLWptcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjM5ZThlCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvc3VuLWJjbGEtam1zCkBAIC0wLDAgKzEsMjQwIEBACisKKyAgICAgICAgICAgICAgICAgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorICAgICAgICAgICAgIEJpbmFyeSBDb2RlIExpY2Vuc2UgQWdyZWVtZW50CisKKyAgIFJFQUQgVEhFIFRFUk1TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBBTlkgUFJPVklERUQKKyAgIFNVUFBMRU1FTlRBTCBMSUNFTlNFIFRFUk1TIChDT0xMRUNUSVZFTFkKKyAgICJBR1JFRU1FTlQiKSBDQVJFRlVMTFkgQkVGT1JFIE9QRU5JTkcgVEhFIFNPRlRXQVJFCisgICBNRURJQSBQQUNLQUdFLiAgQlkgT1BFTklORyBUSEUgU09GVFdBUkUgTUVESUEKKyAgIFBBQ0tBR0UsIFlPVSBBR1JFRSBUTyBUSEUgVEVSTVMgT0YgVEhJUworICAgQUdSRUVNRU5ULiAgSUYgWU9VIEFSRSBBQ0NFU1NJTkcgVEhFIFNPRlRXQVJFCisgICBFTEVDVFJPTklDQUxMWSwgSU5ESUNBVEUgWU9VUiBBQ0NFUFRBTkNFIE9GIFRIRVNFCisgICBURVJNUyBCWSBTRUxFQ1RJTkcgVEhFICJBQ0NFUFQiIEJVVFRPTiBBVCBUSEUgRU5ECisgICBPRiBUSElTIEFHUkVFTUVOVC4gIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gQUxMCisgICBUSEVTRSBURVJNUywgUFJPTVBUTFkgUkVUVVJOIFRIRSBVTlVTRUQgU09GVFdBUkUKKyAgIFRPIFlPVVIgUExBQ0UgT0YgUFVSQ0hBU0UgRk9SIEEgUkVGVU5EIE9SLCBJRiBUSEUKKyAgIFNPRlRXQVJFIElTIEFDQ0VTU0VEIEVMRUNUUk9OSUNBTExZLCBTRUxFQ1QgVEhFCisgICAiREVDTElORSIgQlVUVE9OIEFUIFRIRSBFTkQgT0YgVEhJUyBBR1JFRU1FTlQuCisKKyAgIDEuICBMSUNFTlNFIFRPIFVTRS4gIFN1biBncmFudHMgeW91IGEKKyAgIG5vbi1leGNsdXNpdmUgYW5kIG5vbi10cmFuc2ZlcmFibGUgbGljZW5zZSBmb3IgdGhlCisgICBpbnRlcm5hbCB1c2Ugb25seSBvZiB0aGUgYWNjb21wYW55aW5nIHNvZnR3YXJlIGFuZAorICAgZG9jdW1lbnRhdGlvbiBhbmQgYW55IGVycm9yIGNvcnJlY3Rpb25zIHByb3ZpZGVkCisgICBieSBTdW4gKGNvbGxlY3RpdmVseSAiU29mdHdhcmUiKSwgYnkgdGhlIG51bWJlciBvZgorICAgdXNlcnMgYW5kIHRoZSBjbGFzcyBvZiBjb21wdXRlciBoYXJkd2FyZSBmb3Igd2hpY2gKKyAgIHRoZSBjb3JyZXNwb25kaW5nIGZlZSBoYXMgYmVlbiBwYWlkLgorCisgICAyLiAgUkVTVFJJQ1RJT05TLiAgU29mdHdhcmUgaXMgY29uZmlkZW50aWFsIGFuZAorICAgY29weXJpZ2h0ZWQuIFRpdGxlIHRvIFNvZnR3YXJlIGFuZCBhbGwgYXNzb2NpYXRlZAorICAgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyBpcyByZXRhaW5lZCBieSBTdW4KKyAgIGFuZC9vciBpdHMgbGljZW5zb3JzLiAgRXhjZXB0IGFzIHNwZWNpZmljYWxseQorICAgYXV0aG9yaXplZCBpbiBhbnkgU3VwcGxlbWVudGFsIExpY2Vuc2UgVGVybXMsIHlvdQorICAgbWF5IG5vdCBtYWtlIGNvcGllcyBvZiBTb2Z0d2FyZSwgb3RoZXIgdGhhbiBhCisgICBzaW5nbGUgY29weSBvZiBTb2Z0d2FyZSBmb3IgYXJjaGl2YWwgcHVycG9zZXMuCisgICBVbmxlc3MgZW5mb3JjZW1lbnQgaXMgcHJvaGliaXRlZCBieSBhcHBsaWNhYmxlCisgICBsYXcsIHlvdSBtYXkgbm90IG1vZGlmeSwgZGVjb21waWxlLCBvciByZXZlcnNlCisgICBlbmdpbmVlciBTb2Z0d2FyZS4gIFlvdSBhY2tub3dsZWRnZSB0aGF0IFNvZnR3YXJlCisgICBpcyBub3QgZGVzaWduZWQsIGxpY2Vuc2VkIG9yIGludGVuZGVkIGZvciB1c2UgaW4KKyAgIHRoZSBkZXNpZ24sIGNvbnN0cnVjdGlvbiwgb3BlcmF0aW9uIG9yIG1haW50ZW5hbmNlCisgICBvZiBhbnkgbnVjbGVhciBmYWNpbGl0eS4gIFN1biBkaXNjbGFpbXMgYW55CisgICBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkgb2YgZml0bmVzcyBmb3Igc3VjaAorICAgdXNlcy4gIE5vIHJpZ2h0LCB0aXRsZSBvciBpbnRlcmVzdCBpbiBvciB0byBhbnkKKyAgIHRyYWRlbWFyaywgc2VydmljZSBtYXJrLCBsb2dvIG9yIHRyYWRlIG5hbWUgb2YgU3VuCisgICBvciBpdHMgbGljZW5zb3JzIGlzIGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQuCisKKyAgIDMuIExJTUlURUQgV0FSUkFOVFkuICBTdW4gd2FycmFudHMgdG8geW91IHRoYXQgZm9yCisgICBhIHBlcmlvZCBvZiBuaW5ldHkgKDkwKSBkYXlzIGZyb20gdGhlIGRhdGUgb2YKKyAgIHB1cmNoYXNlLCBhcyBldmlkZW5jZWQgYnkgYSBjb3B5IG9mIHRoZSByZWNlaXB0LAorICAgdGhlIG1lZGlhIG9uIHdoaWNoIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCAoaWYgYW55KQorICAgd2lsbCBiZSBmcmVlIG9mIGRlZmVjdHMgaW4gbWF0ZXJpYWxzIGFuZAorICAgd29ya21hbnNoaXAgdW5kZXIgbm9ybWFsIHVzZS4gIEV4Y2VwdCBmb3IgdGhlCisgICBmb3JlZ29pbmcsIFNvZnR3YXJlIGlzIHByb3ZpZGVkICJBUyBJUyIuICBZb3VyCisgICBleGNsdXNpdmUgcmVtZWR5IGFuZCBTdW4ncyBlbnRpcmUgbGlhYmlsaXR5IHVuZGVyCisgICB0aGlzIGxpbWl0ZWQgd2FycmFudHkgd2lsbCBiZSBhdCBTdW4ncyBvcHRpb24gdG8KKyAgIHJlcGxhY2UgU29mdHdhcmUgbWVkaWEgb3IgcmVmdW5kIHRoZSBmZWUgcGFpZCBmb3IKKyAgIFNvZnR3YXJlLgorCisgICA0LiAgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS4gIFVOTEVTUyBTUEVDSUZJRUQgSU4KKyAgIFRISVMgQUdSRUVNRU5ULCBBTEwgRVhQUkVTUyBPUiBJTVBMSUVEIENPTkRJVElPTlMsCisgICBSRVBSRVNFTlRBVElPTlMgQU5EIFdBUlJBTlRJRVMsIElOQ0xVRElORyBBTlkKKyAgIElNUExJRUQgV0FSUkFOVFkgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBCisgICBQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdFTUVOVCBBUkUKKyAgIERJU0NMQUlNRUQsIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFRIQVQgVEhFU0UKKyAgIERJU0NMQUlNRVJTIEFSRSBIRUxEIFRPIEJFIExFR0FMTFkgSU5WQUxJRC4KKworICAgNS4gIExJTUlUQVRJT04gT0YgTElBQklMSVRZLiAgVE8gVEhFIEVYVEVOVCBOT1QKKyAgIFBST0hJQklURUQgQlkgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIFNVTiBPUiBJVFMKKyAgIExJQ0VOU09SUyBCRSBMSUFCTEUgRk9SIEFOWSBMT1NUIFJFVkVOVUUsIFBST0ZJVAorICAgT1IgREFUQSwgT1IgRk9SIFNQRUNJQUwsIElORElSRUNULCBDT05TRVFVRU5USUFMLAorICAgSU5DSURFTlRBTCBPUiBQVU5JVElWRSBEQU1BR0VTLCBIT1dFVkVSIENBVVNFRAorICAgUkVHQVJETEVTUyBPRiBUSEUgVEhFT1JZIE9GIExJQUJJTElUWSwgQVJJU0lORyBPVVQKKyAgIE9GIE9SIFJFTEFURUQgVE8gVEhFIFVTRSBPRiBPUiBJTkFCSUxJVFkgVE8gVVNFCisgICBTT0ZUV0FSRSwgRVZFTiBJRiBTVU4gSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUKKyAgIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gIEluIG5vIGV2ZW50IHdpbGwKKyAgIFN1bidzIGxpYWJpbGl0eSB0byB5b3UsIHdoZXRoZXIgaW4gY29udHJhY3QsIHRvcnQKKyAgIChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIG9yIG90aGVyd2lzZSwgZXhjZWVkIHRoZQorICAgYW1vdW50IHBhaWQgYnkgeW91IGZvciBTb2Z0d2FyZSB1bmRlciB0aGlzCisgICBBZ3JlZW1lbnQuICBUaGUgZm9yZWdvaW5nIGxpbWl0YXRpb25zIHdpbGwgYXBwbHkKKyAgIGV2ZW4gaWYgdGhlIGFib3ZlIHN0YXRlZCB3YXJyYW50eSBmYWlscyBvZiBpdHMKKyAgIGVzc2VudGlhbCBwdXJwb3NlLgorCisgICA2LiAgVGVybWluYXRpb24uICBUaGlzIEFncmVlbWVudCBpcyBlZmZlY3RpdmUKKyAgIHVudGlsIHRlcm1pbmF0ZWQuICBZb3UgbWF5IHRlcm1pbmF0ZSB0aGlzCisgICBBZ3JlZW1lbnQgYXQgYW55IHRpbWUgYnkgZGVzdHJveWluZyBhbGwgY29waWVzIG9mCisgICBTb2Z0d2FyZS4gIFRoaXMgQWdyZWVtZW50IHdpbGwgdGVybWluYXRlCisgICBpbW1lZGlhdGVseSB3aXRob3V0IG5vdGljZSBmcm9tIFN1biBpZiB5b3UgZmFpbCB0bworICAgY29tcGx5IHdpdGggYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudC4gIFVwb24KKyAgIFRlcm1pbmF0aW9uLCB5b3UgbXVzdCBkZXN0cm95IGFsbCBjb3BpZXMgb2YKKyAgIFNvZnR3YXJlLgorCisgICA3LiBFeHBvcnQgUmVndWxhdGlvbnMuIEFsbCBTb2Z0d2FyZSBhbmQgdGVjaG5pY2FsCisgICBkYXRhIGRlbGl2ZXJlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgc3ViamVjdCB0bworICAgVVMgZXhwb3J0IGNvbnRyb2wgbGF3cyBhbmQgbWF5IGJlIHN1YmplY3QgdG8KKyAgIGV4cG9ydCBvciBpbXBvcnQgcmVndWxhdGlvbnMgaW4gb3RoZXIgY291bnRyaWVzLgorICAgWW91IGFncmVlIHRvIGNvbXBseSBzdHJpY3RseSB3aXRoIGFsbCBzdWNoIGxhd3MKKyAgIGFuZCByZWd1bGF0aW9ucyBhbmQgYWNrbm93bGVkZ2UgdGhhdCB5b3UgaGF2ZSB0aGUKKyAgIHJlc3BvbnNpYmlsaXR5IHRvIG9idGFpbiBzdWNoIGxpY2Vuc2VzIHRvIGV4cG9ydCwKKyAgIHJlLWV4cG9ydCwgb3IgaW1wb3J0IGFzIG1heSBiZSByZXF1aXJlZCBhZnRlcgorICAgZGVsaXZlcnkgdG8geW91LgorCisgICA4LiAgIFUuUy4gR292ZXJubWVudCBSZXN0cmljdGVkIFJpZ2h0cy4gIElmCisgICBTb2Z0d2FyZSBpcyBiZWluZyBhY3F1aXJlZCBieSBvciBvbiBiZWhhbGYgb2YgdGhlCisgICBVLlMuIEdvdmVybm1lbnQgb3IgYnkgYSBVLlMuIEdvdmVybm1lbnQgcHJpbWUKKyAgIGNvbnRyYWN0b3Igb3Igc3ViY29udHJhY3RvciAoYXQgYW55IHRpZXIpLCB0aGVuCisgICB0aGUgR292ZXJubWVudCdzIHJpZ2h0cyBpbiBTb2Z0d2FyZSBhbmQKKyAgIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIHdpbGwgYmUgb25seSBhcyBzZXQKKyAgIGZvcnRoIGluIHRoaXMgQWdyZWVtZW50OyB0aGlzIGlzIGluIGFjY29yZGFuY2UKKyAgIHdpdGggNDggQ0ZSIDIyNy43MjAxIHRocm91Z2ggMjI3LjcyMDItNCAoZm9yCisgICBEZXBhcnRtZW50IG9mIERlZmVuc2UgKERPRCkgYWNxdWlzaXRpb25zKSBhbmQgd2l0aAorICAgNDggQ0ZSIDIuMTAxIGFuZCAxMi4yMTIgKGZvciBub24tRE9ECisgICBhY3F1aXNpdGlvbnMpLgorCisgICA5LiAgR292ZXJuaW5nIExhdy4gIEFueSBhY3Rpb24gcmVsYXRlZCB0byB0aGlzCisgICBBZ3JlZW1lbnQgd2lsbCBiZSBnb3Zlcm5lZCBieSBDYWxpZm9ybmlhIGxhdyBhbmQKKyAgIGNvbnRyb2xsaW5nIFUuUy4gZmVkZXJhbCBsYXcuICBObyBjaG9pY2Ugb2YgbGF3CisgICBydWxlcyBvZiBhbnkganVyaXNkaWN0aW9uIHdpbGwgYXBwbHkuCisKKyAgIDEwLiAgU2V2ZXJhYmlsaXR5LiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMKKyAgIEFncmVlbWVudCBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHRoaXMKKyAgIEFncmVlbWVudCB3aWxsIHJlbWFpbiBpbiBlZmZlY3Qgd2l0aCB0aGUgcHJvdmlzaW9uCisgICBvbWl0dGVkLCB1bmxlc3Mgb21pc3Npb24gd291bGQgZnJ1c3RyYXRlIHRoZQorICAgaW50ZW50IG9mIHRoZSBwYXJ0aWVzLCBpbiB3aGljaCBjYXNlIHRoaXMKKyAgIEFncmVlbWVudCB3aWxsIGltbWVkaWF0ZWx5IHRlcm1pbmF0ZS4KKworICAgMTEuICBJbnRlZ3JhdGlvbi4gIFRoaXMgQWdyZWVtZW50IGlzIHRoZSBlbnRpcmUKKyAgIGFncmVlbWVudCBiZXR3ZWVuIHlvdSBhbmQgU3VuIHJlbGF0aW5nIHRvIGl0cworICAgc3ViamVjdCBtYXR0ZXIuICBJdCBzdXBlcnNlZGVzIGFsbCBwcmlvciBvcgorICAgY29udGVtcG9yYW5lb3VzIG9yYWwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9ucywKKyAgIHByb3Bvc2FscywgcmVwcmVzZW50YXRpb25zIGFuZCB3YXJyYW50aWVzIGFuZAorICAgcHJldmFpbHMgb3ZlciBhbnkgY29uZmxpY3Rpbmcgb3IgYWRkaXRpb25hbCB0ZXJtcworICAgb2YgYW55IHF1b3RlLCBvcmRlciwgYWNrbm93bGVkZ21lbnQsIG9yIG90aGVyCisgICBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIHBhcnRpZXMgcmVsYXRpbmcgdG8gaXRzCisgICBzdWJqZWN0IG1hdHRlciBkdXJpbmcgdGhlIHRlcm0gb2YgdGhpcyBBZ3JlZW1lbnQuCisgICBObyBtb2RpZmljYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQgd2lsbCBiZSBiaW5kaW5nLAorICAgdW5sZXNzIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSBhbiBhdXRob3JpemVkCisgICByZXByZXNlbnRhdGl2ZSBvZiBlYWNoIHBhcnR5LgorCisgICAgICAgICAgICAgICBKQVZBKFRNKSBJTlRFUkZBQ0UgQ0xBU1NFUworICAgICAgICBKQVZBIE1FU1NBR0UgU0VSVklDRSAoSk1TKSwgVkVSU0lPTiAxLjEKKyAgICAgICAgICAgICAgIFNVUFBMRU1FTlRBTCBMSUNFTlNFIFRFUk1TCisKKyAgIFRoZXNlIHN1cHBsZW1lbnRhbCBsaWNlbnNlIHRlcm1zICgiU3VwcGxlbWVudGFsCisgICBUZXJtcyIpIGFkZCB0byBvciBtb2RpZnkgdGhlIHRlcm1zIG9mIHRoZSBCaW5hcnkKKyAgIENvZGUgTGljZW5zZSBBZ3JlZW1lbnQgKGNvbGxlY3RpdmVseSwgdGhlCisgICAiQWdyZWVtZW50IikuIENhcGl0YWxpemVkIHRlcm1zIG5vdCBkZWZpbmVkIGluCisgICB0aGVzZSBTdXBwbGVtZW50YWwgVGVybXMgc2hhbGwgaGF2ZSB0aGUgc2FtZQorICAgbWVhbmluZ3MgYXNjcmliZWQgdG8gdGhlbSBpbiB0aGUgQWdyZWVtZW50LiBUaGVzZQorICAgU3VwcGxlbWVudGFsIFRlcm1zIHNoYWxsIHN1cGVyc2VkZSBhbnkKKyAgIGluY29uc2lzdGVudCBvciBjb25mbGljdGluZyB0ZXJtcyBpbiB0aGUKKyAgIEFncmVlbWVudCwgb3IgaW4gYW55IGxpY2Vuc2UgY29udGFpbmVkIHdpdGhpbiB0aGUKKyAgIFNvZnR3YXJlLgorCisgICAxLiBTb2Z0d2FyZSBJbnRlcm5hbCBVc2UgYW5kIERldmVsb3BtZW50IExpY2Vuc2UKKyAgIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzCisgICBBZ3JlZW1lbnQsIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvIFNlY3Rpb24gMworICAgKEphdmEgVGVjaG5vbG9neSBSZXN0cmljdGlvbnMpIG9mIHRoZXNlCisgICBTdXBwbGVtZW50YWwgVGVybXMsIFN1biBncmFudHMgeW91IGEKKyAgIG5vbi1leGNsdXNpdmUsIG5vbi10cmFuc2ZlcmFibGUsIGxpbWl0ZWQgbGljZW5zZQorICAgdG8gcmVwcm9kdWNlIGludGVybmFsbHkgYW5kIHVzZSBpbnRlcm5hbGx5IHRoZQorICAgYmluYXJ5IGZvcm0gb2YgdGhlIFNvZnR3YXJlLCBjb21wbGV0ZSBhbmQKKyAgIHVubW9kaWZpZWQsIGZvciB0aGUgc29sZSBwdXJwb3NlIG9mIGRlc2lnbmluZywKKyAgIGRldmVsb3BpbmcgYW5kIHRlc3RpbmcgeW91ciBKYXZhIGFwcGxldHMgYW5kCisgICBhcHBsaWNhdGlvbnMgKCJQcm9ncmFtcyIpLgorCisgICAyLiBMaWNlbnNlIHRvIERpc3RyaWJ1dGUgU29mdHdhcmUuICBJbiBhZGRpdGlvbiB0bworICAgdGhlIGxpY2Vuc2UgZ3JhbnRlZCBpbiBTZWN0aW9uIDEgKFNvZnR3YXJlCisgICBJbnRlcm5hbCBVc2UgYW5kIERldmVsb3BtZW50IExpY2Vuc2UgR3JhbnQpIG9mCisgICB0aGVzZSBTdXBwbGVtZW50YWwgVGVybXMsIHN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZAorICAgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGJ1dCBub3QKKyAgIGxpbWl0ZWQgdG8gU2VjdGlvbiAzIChKYXZhIFRlY2hub2xvZ3kKKyAgIFJlc3RyaWN0aW9ucyksIFN1biBncmFudHMgeW91IGEgbm9uLWV4Y2x1c2l2ZSwKKyAgIG5vbi10cmFuc2ZlcmFibGUsIGxpbWl0ZWQgbGljZW5zZSB0byByZXByb2R1Y2UgYW5kCisgICBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBpbiBiaW5hcnkgZm9ybSBvbmx5LAorICAgcHJvdmlkZWQgdGhhdCB5b3UgKGkpIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlCisgICBjb21wbGV0ZSBhbmQgdW5tb2RpZmllZCBhbmQgb25seSBidW5kbGVkIGFzIHBhcnQKKyAgIG9mIHlvdXIgUHJvZ3JhbXMsIChpaSkgZG8gbm90IGRpc3RyaWJ1dGUKKyAgIGFkZGl0aW9uYWwgc29mdHdhcmUgaW50ZW5kZWQgdG8gcmVwbGFjZSBhbnkKKyAgIGNvbXBvbmVudChzKSBvZiB0aGUgU29mdHdhcmUsIChpaWkpIGRvIG5vdCByZW1vdmUKKyAgIG9yIGFsdGVyIGFueSBwcm9wcmlldGFyeSBsZWdlbmRzIG9yIG5vdGljZXMKKyAgIGNvbnRhaW5lZCBpbiB0aGUgU29mdHdhcmUsIChpdikgb25seSBkaXN0cmlidXRlCisgICB0aGUgU29mdHdhcmUgc3ViamVjdCB0byBhIGxpY2Vuc2UgYWdyZWVtZW50IHRoYXQKKyAgIHByb3RlY3RzIFN1bidzIGludGVyZXN0cyBjb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zCisgICBjb250YWluZWQgaW4gdGhpcyBBZ3JlZW1lbnQsIGFuZCAodikgYWdyZWUgdG8KKyAgIGRlZmVuZCBhbmQgaW5kZW1uaWZ5IFN1biBhbmQgaXRzIGxpY2Vuc29ycyBmcm9tCisgICBhbmQgYWdhaW5zdCBhbnkgZGFtYWdlcywgY29zdHMsIGxpYWJpbGl0aWVzLAorICAgc2V0dGxlbWVudCBhbW91bnRzIGFuZC9vciBleHBlbnNlcyAoaW5jbHVkaW5nCisgICBhdHRvcm5leXMnIGZlZXMpIGluY3VycmVkIGluIGNvbm5lY3Rpb24gd2l0aCBhbnkKKyAgIGNsYWltLCBsYXdzdWl0IG9yIGFjdGlvbiBieSBhbnkgdGhpcmQgcGFydHkgdGhhdAorICAgYXJpc2VzIG9yIHJlc3VsdHMgZnJvbSB0aGUgdXNlIG9yIGRpc3RyaWJ1dGlvbiBvZgorICAgYW55IGFuZCBhbGwgUHJvZ3JhbXMgYW5kL29yIFNvZnR3YXJlLgorCisgICAzLiBKYXZhIFRlY2hub2xvZ3kgUmVzdHJpY3Rpb25zLiBZb3UgbWF5IG5vdAorICAgbW9kaWZ5IHRoZSBKYXZhIFBsYXRmb3JtIEludGVyZmFjZSAoIkpQSSIsCisgICBpZGVudGlmaWVkIGFzIGNsYXNzZXMgY29udGFpbmVkIHdpdGhpbiB0aGUgImphdmEiCisgICBwYWNrYWdlIG9yIGFueSBzdWJwYWNrYWdlcyBvZiB0aGUgImphdmEiIHBhY2thZ2UpLAorICAgYnkgY3JlYXRpbmcgYWRkaXRpb25hbCBjbGFzc2VzIHdpdGhpbiB0aGUgSlBJIG9yCisgICBvdGhlcndpc2UgY2F1c2luZyB0aGUgYWRkaXRpb24gdG8gb3IgbW9kaWZpY2F0aW9uCisgICBvZiB0aGUgY2xhc3NlcyBpbiB0aGUgSlBJLiAgSW4gdGhlIGV2ZW50IHRoYXQgeW91CisgICBjcmVhdGUgYW4gYWRkaXRpb25hbCBjbGFzcyBhbmQgYXNzb2NpYXRlZCBBUEkocykKKyAgIHdoaWNoIChpKSBleHRlbmRzIHRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoZSBKYXZhCisgICBQbGF0Zm9ybSwgYW5kIChpaSkgaXMgZXhwb3NlZCB0byB0aGlyZCBwYXJ0eQorICAgc29mdHdhcmUgZGV2ZWxvcGVycyBmb3IgdGhlIHB1cnBvc2Ugb2YgZGV2ZWxvcGluZworICAgYWRkaXRpb25hbCBzb2Z0d2FyZSB3aGljaCBpbnZva2VzIHN1Y2ggYWRkaXRpb25hbAorICAgQVBJLCB5b3UgbXVzdCBwcm9tcHRseSBwdWJsaXNoIGJyb2FkbHkgYW4gYWNjdXJhdGUKKyAgIHNwZWNpZmljYXRpb24gZm9yIHN1Y2ggQVBJIGZvciBmcmVlIHVzZSBieSBhbGwKKyAgIGRldmVsb3BlcnMuIFlvdSBtYXkgbm90IGNyZWF0ZSwgb3IgYXV0aG9yaXplIHlvdXIKKyAgIGxpY2Vuc2VlcyB0byBjcmVhdGUgYWRkaXRpb25hbCBjbGFzc2VzLAorICAgaW50ZXJmYWNlcywgb3Igc3VicGFja2FnZXMgdGhhdCBhcmUgaW4gYW55IHdheQorICAgaWRlbnRpZmllZCBhcyAiamF2YSIsICJqYXZheCIsICJzdW4iIG9yIHNpbWlsYXIKKyAgIGNvbnZlbnRpb24gYXMgc3BlY2lmaWVkIGJ5IFN1biBpbiBhbnkgbmFtaW5nCisgICBjb252ZW50aW9uIGRlc2lnbmF0aW9uLgorCisgICA0LiBUcmFkZW1hcmtzIGFuZCBMb2dvcy4gWW91IGFja25vd2xlZGdlIGFuZCBhZ3JlZQorICAgYXMgYmV0d2VlbiB5b3UgYW5kIFN1biB0aGF0IFN1biBvd25zIHRoZSBTVU4sCisgICBTT0xBUklTLCBKQVZBLCBKSU5JLCBGT1JURSwgU1RBUk9GRklDRSwgU1RBUlBPUlRBTAorICAgYW5kIGlQTEFORVQgdHJhZGVtYXJrcyBhbmQgYWxsIFNVTiwgU09MQVJJUywgSkFWQSwKKyAgIEpJTkksIEZPUlRFLCBTVEFST0ZGSUNFLCBTVEFSUE9SVEFMIGFuZAorICAgaVBMQU5FVC1yZWxhdGVkIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIGxvZ29zCisgICBhbmQgb3RoZXIgYnJhbmQgZGVzaWduYXRpb25zICgiU3VuIE1hcmtzIiksIGFuZAorICAgeW91IGFncmVlIHRvIGNvbXBseSB3aXRoIHRoZSBTdW4gVHJhZGVtYXJrIGFuZAorICAgTG9nbyBVc2FnZSBSZXF1aXJlbWVudHMgY3VycmVudGx5IGxvY2F0ZWQgYXQKKyAgIGh0dHA6Ly93d3cuc3VuLmNvbS9wb2xpY2llcy90cmFkZW1hcmtzLiBBbnkgdXNlCisgICB5b3UgbWFrZSBvZiB0aGUgU3VuIE1hcmtzIGludXJlcyB0byBTdW4ncyBiZW5lZml0LgorCisgICA1LiBTb3VyY2UgQ29kZS4gU29mdHdhcmUgbWF5IGNvbnRhaW4gc291cmNlIGNvZGUKKyAgIHRoYXQgaXMgcHJvdmlkZWQgc29sZWx5IGZvciByZWZlcmVuY2UgcHVycG9zZXMKKyAgIHB1cnN1YW50IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudC4gIFNvdXJjZQorICAgY29kZSBtYXkgbm90IGJlIHJlZGlzdHJpYnV0ZWQgdW5sZXNzIGV4cHJlc3NseQorICAgcHJvdmlkZWQgZm9yIGluIHRoaXMgQWdyZWVtZW50LgorCisgICA2LiBUZXJtaW5hdGlvbiBmb3IgSW5mcmluZ2VtZW50LiAgRWl0aGVyIHBhcnR5IG1heQorICAgdGVybWluYXRlIHRoaXMgQWdyZWVtZW50IGltbWVkaWF0ZWx5IHNob3VsZCBhbnkKKyAgIFNvZnR3YXJlIGJlY29tZSwgb3IgaW4gZWl0aGVyIHBhcnR5J3Mgb3BpbmlvbiBiZQorICAgbGlrZWx5IHRvIGJlY29tZSwgdGhlIHN1YmplY3Qgb2YgYSBjbGFpbSBvZgorICAgaW5mcmluZ2VtZW50IG9mIGFueSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHQuCisKKyAgIEZvciBpbnF1aXJpZXMgcGxlYXNlIGNvbnRhY3Q6IFN1biBNaWNyb3N5c3RlbXMsCisgICBJbmMuICA5MDEgU2FuIEFudG9uaW8gUm9hZCwgUGFsbyBBbHRvLCBDYWxpZm9ybmlhCisgICA5NDMwMworICAgKExGSSMxMTE3NTUvRm9ybSBJRCMwMTE4MDEpCisKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL3N1bi1iY2xhLWpzYXBpIGIvbGljZW5zZXMvc3VuLWJjbGEtanNhcGkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTM1NWRkMQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL3N1bi1iY2xhLWpzYXBpCkBAIC0wLDAgKzEsMTc0IEBACisgICAgICAgICAgICAgICAgICAgICAgICAgIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gCisgICAgICAgICAgICAgICAgICAgICAgQmluYXJ5IENvZGUgTGljZW5zZSBBZ3JlZW1lbnQKKworUkVBRCBUSEUgVEVSTVMgT0YgVEhJUyBBR1JFRU1FTlQgQU5EIEFOWSBQUk9WSURFRCBTVVBQTEVNRU5UQUwgTElDRU5TRQorVEVSTVMgKENPTExFQ1RJVkVMWSAiQUdSRUVNRU5UIikgQ0FSRUZVTExZIEJFRk9SRSBPUEVOSU5HIFRIRSBTT0ZUV0FSRQorTUVESUEgUEFDS0FHRS4gIEJZIE9QRU5JTkcgVEhFIFNPRlRXQVJFIE1FRElBIFBBQ0tBR0UsIFlPVSBBR1JFRSBUTyBUSEUKK1RFUk1TIE9GIFRISVMgQUdSRUVNRU5ULiAgSUYgWU9VIEFSRSBBQ0NFU1NJTkcgVEhFIFNPRlRXQVJFCitFTEVDVFJPTklDQUxMWSwgSU5ESUNBVEUgWU9VUiBBQ0NFUFRBTkNFIE9GIFRIRVNFIFRFUk1TIEJZIFNFTEVDVElORworVEhFICJBQ0NFUFQiIEJVVFRPTiBBVCBUSEUgRU5EIE9GIFRISVMgQUdSRUVNRU5ULiAgSUYgWU9VIERPIE5PVCBBR1JFRQorVE8gQUxMIFRIRVNFIFRFUk1TLCBQUk9NUFRMWSBSRVRVUk4gVEhFIFVOVVNFRCBTT0ZUV0FSRSBUTyBZT1VSIFBMQUNFCitPRiBQVVJDSEFTRSBGT1IgQSBSRUZVTkQgT1IsIElGIFRIRSBTT0ZUV0FSRSBJUyBBQ0NFU1NFRAorRUxFQ1RST05JQ0FMTFksIFNFTEVDVCBUSEUgIkRFQ0xJTkUiIEJVVFRPTiBBVCBUSEUgRU5EIE9GIFRISVMKK0FHUkVFTUVOVC4KKworMS4gIExJQ0VOU0UgVE8gVVNFLiAgU3VuIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlIGFuZAorbm9uLXRyYW5zZmVyYWJsZSBsaWNlbnNlIGZvciB0aGUgaW50ZXJuYWwgdXNlIG9ubHkgb2YgdGhlIGFjY29tcGFueWluZworc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24gYW5kIGFueSBlcnJvciBjb3JyZWN0aW9ucyBwcm92aWRlZCBieSBTdW4KKyhjb2xsZWN0aXZlbHkgIlNvZnR3YXJlIiksIGJ5IHRoZSBudW1iZXIgb2YgdXNlcnMgYW5kIHRoZSBjbGFzcyBvZgorY29tcHV0ZXIgaGFyZHdhcmUgZm9yIHdoaWNoIHRoZSBjb3JyZXNwb25kaW5nIGZlZSBoYXMgYmVlbiBwYWlkLgorCisyLiAgUkVTVFJJQ1RJT05TLiAgU29mdHdhcmUgaXMgY29uZmlkZW50aWFsIGFuZCBjb3B5cmlnaHRlZC4gVGl0bGUgdG8KK1NvZnR3YXJlIGFuZCBhbGwgYXNzb2NpYXRlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGlzIHJldGFpbmVkIGJ5CitTdW4gYW5kL29yIGl0cyBsaWNlbnNvcnMuICBFeGNlcHQgYXMgc3BlY2lmaWNhbGx5IGF1dGhvcml6ZWQgaW4gYW55CitTdXBwbGVtZW50YWwgTGljZW5zZSBUZXJtcywgeW91IG1heSBub3QgbWFrZSBjb3BpZXMgb2YgU29mdHdhcmUsIG90aGVyCit0aGFuIGEgc2luZ2xlIGNvcHkgb2YgU29mdHdhcmUgZm9yIGFyY2hpdmFsIHB1cnBvc2VzLiAgVW5sZXNzCitlbmZvcmNlbWVudCBpcyBwcm9oaWJpdGVkIGJ5IGFwcGxpY2FibGUgbGF3LCB5b3UgbWF5IG5vdCBtb2RpZnksCitkZWNvbXBpbGUsIG9yIHJldmVyc2UgZW5naW5lZXIgU29mdHdhcmUuICBZb3UgYWNrbm93bGVkZ2UgdGhhdCBTb2Z0d2FyZQoraXMgbm90IGRlc2lnbmVkLCBsaWNlbnNlZCBvciBpbnRlbmRlZCBmb3IgdXNlIGluIHRoZSBkZXNpZ24sCitjb25zdHJ1Y3Rpb24sIG9wZXJhdGlvbiBvciBtYWludGVuYW5jZSBvZiBhbnkgbnVjbGVhciBmYWNpbGl0eS4gIFN1bgorZGlzY2xhaW1zIGFueSBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkgb2YgZml0bmVzcyBmb3Igc3VjaCB1c2VzLiAgTm8KK3JpZ2h0LCB0aXRsZSBvciBpbnRlcmVzdCBpbiBvciB0byBhbnkgdHJhZGVtYXJrLCBzZXJ2aWNlIG1hcmssIGxvZ28gb3IKK3RyYWRlIG5hbWUgb2YgU3VuIG9yIGl0cyBsaWNlbnNvcnMgaXMgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudC4KKworMy4gTElNSVRFRCBXQVJSQU5UWS4gIFN1biB3YXJyYW50cyB0byB5b3UgdGhhdCBmb3IgYSBwZXJpb2Qgb2YgbmluZXR5CisoOTApIGRheXMgZnJvbSB0aGUgZGF0ZSBvZiBwdXJjaGFzZSwgYXMgZXZpZGVuY2VkIGJ5IGEgY29weSBvZiB0aGUKK3JlY2VpcHQsIHRoZSBtZWRpYSBvbiB3aGljaCBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgKGlmIGFueSkgd2lsbCBiZSBmcmVlCitvZiBkZWZlY3RzIGluIG1hdGVyaWFscyBhbmQgd29ya21hbnNoaXAgdW5kZXIgbm9ybWFsIHVzZS4gIEV4Y2VwdCBmb3IKK3RoZSBmb3JlZ29pbmcsIFNvZnR3YXJlIGlzIHByb3ZpZGVkICJBUyBJUyIuICBZb3VyIGV4Y2x1c2l2ZSByZW1lZHkgYW5kCitTdW4ncyBlbnRpcmUgbGlhYmlsaXR5IHVuZGVyIHRoaXMgbGltaXRlZCB3YXJyYW50eSB3aWxsIGJlIGF0IFN1bidzCitvcHRpb24gdG8gcmVwbGFjZSBTb2Z0d2FyZSBtZWRpYSBvciByZWZ1bmQgdGhlIGZlZSBwYWlkIGZvciBTb2Z0d2FyZS4KKworNC4gIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkuICBVTkxFU1MgU1BFQ0lGSUVEIElOIFRISVMgQUdSRUVNRU5ULCBBTEwKK0VYUFJFU1MgT1IgSU1QTElFRCBDT05ESVRJT05TLCBSRVBSRVNFTlRBVElPTlMgQU5EIFdBUlJBTlRJRVMsCitJTkNMVURJTkcgQU5ZIElNUExJRUQgV0FSUkFOVFkgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBCitQQVJUSUNVTEFSIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdFTUVOVCBBUkUgRElTQ0xBSU1FRCwgRVhDRVBUIFRPIFRIRQorRVhURU5UIFRIQVQgVEhFU0UgRElTQ0xBSU1FUlMgQVJFIEhFTEQgVE8gQkUgTEVHQUxMWSBJTlZBTElELgorCis1LiAgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuICBUTyBUSEUgRVhURU5UIE5PVCBQUk9ISUJJVEVEIEJZIExBVywgSU4KK05PIEVWRU5UIFdJTEwgU1VOIE9SIElUUyBMSUNFTlNPUlMgQkUgTElBQkxFIEZPUiBBTlkgTE9TVCBSRVZFTlVFLAorUFJPRklUIE9SIERBVEEsIE9SIEZPUiBTUEVDSUFMLCBJTkRJUkVDVCwgQ09OU0VRVUVOVElBTCwgSU5DSURFTlRBTCBPUgorUFVOSVRJVkUgREFNQUdFUywgSE9XRVZFUiBDQVVTRUQgUkVHQVJETEVTUyBPRiBUSEUgVEhFT1JZIE9GIExJQUJJTElUWSwKK0FSSVNJTkcgT1VUIE9GIE9SIFJFTEFURUQgVE8gVEhFIFVTRSBPRiBPUiBJTkFCSUxJVFkgVE8gVVNFIFNPRlRXQVJFLAorRVZFTiBJRiBTVU4gSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiAgSW4gbm8KK2V2ZW50IHdpbGwgU3VuJ3MgbGlhYmlsaXR5IHRvIHlvdSwgd2hldGhlciBpbiBjb250cmFjdCwgdG9ydCAoaW5jbHVkaW5nCituZWdsaWdlbmNlKSwgb3Igb3RoZXJ3aXNlLCBleGNlZWQgdGhlIGFtb3VudCBwYWlkIGJ5IHlvdSBmb3IgU29mdHdhcmUKK3VuZGVyIHRoaXMgQWdyZWVtZW50LiAgVGhlIGZvcmVnb2luZyBsaW1pdGF0aW9ucyB3aWxsIGFwcGx5IGV2ZW4gaWYgdGhlCithYm92ZSBzdGF0ZWQgd2FycmFudHkgZmFpbHMgb2YgaXRzIGVzc2VudGlhbCBwdXJwb3NlLgorCis2LiAgVGVybWluYXRpb24uICBUaGlzIEFncmVlbWVudCBpcyBlZmZlY3RpdmUgdW50aWwgdGVybWluYXRlZC4gIFlvdQorbWF5IHRlcm1pbmF0ZSB0aGlzIEFncmVlbWVudCBhdCBhbnkgdGltZSBieSBkZXN0cm95aW5nIGFsbCBjb3BpZXMgb2YKK1NvZnR3YXJlLiAgVGhpcyBBZ3JlZW1lbnQgd2lsbCB0ZXJtaW5hdGUgaW1tZWRpYXRlbHkgd2l0aG91dCBub3RpY2UKK2Zyb20gU3VuIGlmIHlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQuCitVcG9uIFRlcm1pbmF0aW9uLCB5b3UgbXVzdCBkZXN0cm95IGFsbCBjb3BpZXMgb2YgU29mdHdhcmUuCisKKzcuIEV4cG9ydCBSZWd1bGF0aW9ucy4gQWxsIFNvZnR3YXJlIGFuZCB0ZWNobmljYWwgZGF0YSBkZWxpdmVyZWQgdW5kZXIKK3RoaXMgQWdyZWVtZW50IGFyZSBzdWJqZWN0IHRvIFVTIGV4cG9ydCBjb250cm9sIGxhd3MgYW5kIG1heSBiZSBzdWJqZWN0Cit0byBleHBvcnQgb3IgaW1wb3J0IHJlZ3VsYXRpb25zIGluIG90aGVyIGNvdW50cmllcy4gIFlvdSBhZ3JlZSB0bworY29tcGx5IHN0cmljdGx5IHdpdGggYWxsIHN1Y2ggbGF3cyBhbmQgcmVndWxhdGlvbnMgYW5kIGFja25vd2xlZGdlIHRoYXQKK3lvdSBoYXZlIHRoZSByZXNwb25zaWJpbGl0eSB0byBvYnRhaW4gc3VjaCBsaWNlbnNlcyB0byBleHBvcnQsCityZS1leHBvcnQsIG9yIGltcG9ydCBhcyBtYXkgYmUgcmVxdWlyZWQgYWZ0ZXIgZGVsaXZlcnkgdG8geW91LgorCis4LiAgIFUuUy4gR292ZXJubWVudCBSZXN0cmljdGVkIFJpZ2h0cy4gIElmIFNvZnR3YXJlIGlzIGJlaW5nIGFjcXVpcmVkCitieSBvciBvbiBiZWhhbGYgb2YgdGhlIFUuUy4gR292ZXJubWVudCBvciBieSBhIFUuUy4gR292ZXJubWVudCBwcmltZQorY29udHJhY3RvciBvciBzdWJjb250cmFjdG9yIChhdCBhbnkgdGllciksIHRoZW4gdGhlIEdvdmVybm1lbnQncyByaWdodHMKK2luIFNvZnR3YXJlIGFuZCBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiB3aWxsIGJlIG9ubHkgYXMgc2V0IGZvcnRoIGluCit0aGlzIEFncmVlbWVudDsgdGhpcyBpcyBpbiBhY2NvcmRhbmNlIHdpdGggNDggQ0ZSIDIyNy43MjAxIHRocm91Z2gKKzIyNy43MjAyLTQgKGZvciBEZXBhcnRtZW50IG9mIERlZmVuc2UgKERPRCkgYWNxdWlzaXRpb25zKSBhbmQgd2l0aCA0OAorQ0ZSIDIuMTAxIGFuZCAxMi4yMTIgKGZvciBub24tRE9EIGFjcXVpc2l0aW9ucykuCisKKzkuICBHb3Zlcm5pbmcgTGF3LiAgQW55IGFjdGlvbiByZWxhdGVkIHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYmUKK2dvdmVybmVkIGJ5IENhbGlmb3JuaWEgbGF3IGFuZCBjb250cm9sbGluZyBVLlMuIGZlZGVyYWwgbGF3LiAgTm8gY2hvaWNlCitvZiBsYXcgcnVsZXMgb2YgYW55IGp1cmlzZGljdGlvbiB3aWxsIGFwcGx5LgorCisxMC4gIFNldmVyYWJpbGl0eS4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBoZWxkIHRvIGJlCit1bmVuZm9yY2VhYmxlLCB0aGlzIEFncmVlbWVudCB3aWxsIHJlbWFpbiBpbiBlZmZlY3Qgd2l0aCB0aGUgcHJvdmlzaW9uCitvbWl0dGVkLCB1bmxlc3Mgb21pc3Npb24gd291bGQgZnJ1c3RyYXRlIHRoZSBpbnRlbnQgb2YgdGhlIHBhcnRpZXMsIGluCit3aGljaCBjYXNlIHRoaXMgQWdyZWVtZW50IHdpbGwgaW1tZWRpYXRlbHkgdGVybWluYXRlLgorCisxMS4gIEludGVncmF0aW9uLiAgVGhpcyBBZ3JlZW1lbnQgaXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB5b3UKK2FuZCBTdW4gcmVsYXRpbmcgdG8gaXRzIHN1YmplY3QgbWF0dGVyLiAgSXQgc3VwZXJzZWRlcyBhbGwgcHJpb3Igb3IKK2NvbnRlbXBvcmFuZW91cyBvcmFsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbnMsIHByb3Bvc2FscywKK3JlcHJlc2VudGF0aW9ucyBhbmQgd2FycmFudGllcyBhbmQgcHJldmFpbHMgb3ZlciBhbnkgY29uZmxpY3Rpbmcgb3IKK2FkZGl0aW9uYWwgdGVybXMgb2YgYW55IHF1b3RlLCBvcmRlciwgYWNrbm93bGVkZ21lbnQsIG9yIG90aGVyCitjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIHBhcnRpZXMgcmVsYXRpbmcgdG8gaXRzIHN1YmplY3QgbWF0dGVyIGR1cmluZwordGhlIHRlcm0gb2YgdGhpcyBBZ3JlZW1lbnQuICBObyBtb2RpZmljYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQgd2lsbCBiZQorYmluZGluZywgdW5sZXNzIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSBhbiBhdXRob3JpemVkIHJlcHJlc2VudGF0aXZlCitvZiBlYWNoIHBhcnR5LgorCisgSkFWQShUTSkgU1BFRUNIIEFQSSAoSlNBUEkpIFNQRUNJRklDQVRJT04gSU1QTEVNRVRBVElPTiwgVkVSU0lPTgorCQkJICAgIDEuMAorCQlTVVBQTEVNRU5UQUwgTElDRU5TRSBURVJNUworCitUaGVzZSBzdXBwbGVtZW50YWwgbGljZW5zZSB0ZXJtcyAoIlN1cHBsZW1lbnRhbCBUZXJtcyIpIGFkZCB0byBvcgorbW9kaWZ5IHRoZSB0ZXJtcyBvZiB0aGUgQmluYXJ5IENvZGUgTGljZW5zZSBBZ3JlZW1lbnQgKGNvbGxlY3RpdmVseSwKK3RoZSAiQWdyZWVtZW50IikuIENhcGl0YWxpemVkIHRlcm1zIG5vdCBkZWZpbmVkIGluIHRoZXNlIFN1cHBsZW1lbnRhbAorVGVybXMgc2hhbGwgaGF2ZSB0aGUgc2FtZSBtZWFuaW5ncyBhc2NyaWJlZCB0byB0aGVtIGluIHRoZSBBZ3JlZW1lbnQuCitUaGVzZSBTdXBwbGVtZW50YWwgVGVybXMgc2hhbGwgc3VwZXJzZWRlIGFueSBpbmNvbnNpc3RlbnQgb3IKK2NvbmZsaWN0aW5nIHRlcm1zIGluIHRoZSBBZ3JlZW1lbnQsIG9yIGluIGFueSBsaWNlbnNlIGNvbnRhaW5lZCB3aXRoaW4KK3RoZSBTb2Z0d2FyZS4KKworMS4gU29mdHdhcmUgSW50ZXJuYWwgVXNlIGFuZCBEZXZlbG9wbWVudCBMaWNlbnNlIEdyYW50LiBTdWJqZWN0IHRvIHRoZQordGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvCitTZWN0aW9uIDMgKEphdmEoVE0pIFRlY2hub2xvZ3kgUmVzdHJpY3Rpb25zKSBvZiB0aGVzZSBTdXBwbGVtZW50YWwKK1Rlcm1zLCBTdW4gZ3JhbnRzIHlvdSBhIG5vbi1leGNsdXNpdmUsIG5vbi10cmFuc2ZlcmFibGUsIGxpbWl0ZWQKK2xpY2Vuc2UgdG8gcmVwcm9kdWNlIGludGVybmFsbHkgYW5kIHVzZSBpbnRlcm5hbGx5IHRoZSBiaW5hcnkgZm9ybSBvZgordGhlIFNvZnR3YXJlLCBjb21wbGV0ZSBhbmQgdW5tb2RpZmllZCwgZm9yIHRoZSBzb2xlIHB1cnBvc2Ugb2YKK2Rlc2lnbmluZywgZGV2ZWxvcGluZyBhbmQgdGVzdGluZyB5b3VyIEphdmEgYXBwbGV0cyBhbmQgYXBwbGljYXRpb25zCisoIlByb2dyYW1zIikuCisKKzIuIExpY2Vuc2UgdG8gRGlzdHJpYnV0ZSBTb2Z0d2FyZS4gIEluIGFkZGl0aW9uIHRvIHRoZSBsaWNlbnNlIGdyYW50ZWQKK2luIFNlY3Rpb24gMSAoU29mdHdhcmUgSW50ZXJuYWwgVXNlIGFuZCBEZXZlbG9wbWVudCBMaWNlbnNlIEdyYW50KSBvZgordGhlc2UgU3VwcGxlbWVudGFsIFRlcm1zLCBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzCitBZ3JlZW1lbnQsIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gU2VjdGlvbiAzIChKYXZhIFRlY2hub2xvZ3kKK1Jlc3RyaWN0aW9ucyksIFN1biBncmFudHMgeW91IGEgbm9uLWV4Y2x1c2l2ZSwgbm9uLXRyYW5zZmVyYWJsZSwKK2xpbWl0ZWQgbGljZW5zZSB0byByZXByb2R1Y2UgYW5kIGRpc3RyaWJ1dGUgdGhlIFNvZnR3YXJlIGluIGJpbmFyeSBmb3JtCitvbmx5LCBwcm92aWRlZCB0aGF0IHlvdSAoaSkgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgY29tcGxldGUgYW5kCit1bm1vZGlmaWVkIGFuZCBvbmx5IGJ1bmRsZWQgYXMgcGFydCBvZiB5b3VyIFByb2dyYW1zLCAoaWkpIGRvIG5vdAorZGlzdHJpYnV0ZSBhZGRpdGlvbmFsIHNvZnR3YXJlIGludGVuZGVkIHRvIHJlcGxhY2UgYW55IGNvbXBvbmVudChzKSBvZgordGhlIFNvZnR3YXJlLCAoaWlpKSBkbyBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueSBwcm9wcmlldGFyeSBsZWdlbmRzIG9yCitub3RpY2VzIGNvbnRhaW5lZCBpbiB0aGUgU29mdHdhcmUsIChpdikgb25seSBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZQorc3ViamVjdCB0byBhIGxpY2Vuc2UgYWdyZWVtZW50IHRoYXQgcHJvdGVjdHMgU3VuJ3MgaW50ZXJlc3RzIGNvbnNpc3RlbnQKK3dpdGggdGhlIHRlcm1zIGNvbnRhaW5lZCBpbiB0aGlzIEFncmVlbWVudCwgYW5kICh2KSBhZ3JlZSB0byBkZWZlbmQgYW5kCitpbmRlbW5pZnkgU3VuIGFuZCBpdHMgbGljZW5zb3JzIGZyb20gYW5kIGFnYWluc3QgYW55IGRhbWFnZXMsIGNvc3RzLAorbGlhYmlsaXRpZXMsIHNldHRsZW1lbnQgYW1vdW50cyBhbmQvb3IgZXhwZW5zZXMgKGluY2x1ZGluZyBhdHRvcm5leXMnCitmZWVzKSBpbmN1cnJlZCBpbiBjb25uZWN0aW9uIHdpdGggYW55IGNsYWltLCBsYXdzdWl0IG9yIGFjdGlvbiBieSBhbnkKK3RoaXJkIHBhcnR5IHRoYXQgYXJpc2VzIG9yIHJlc3VsdHMgZnJvbSB0aGUgdXNlIG9yIGRpc3RyaWJ1dGlvbiBvZiBhbnkKK2FuZCBhbGwgUHJvZ3JhbXMgYW5kL29yIFNvZnR3YXJlLgorCiszLiBKYXZhIFRlY2hub2xvZ3kgUmVzdHJpY3Rpb25zLiBZb3UgbWF5IG5vdCBtb2RpZnkgdGhlIEphdmEgUGxhdGZvcm0KK0ludGVyZmFjZSAoIkpQSSIsIGlkZW50aWZpZWQgYXMgY2xhc3NlcyBjb250YWluZWQgd2l0aGluIHRoZSAiamF2YSIKK3BhY2thZ2Ugb3IgYW55IHN1YnBhY2thZ2VzIG9mIHRoZSAiamF2YSIgcGFja2FnZSksIGJ5IGNyZWF0aW5nCithZGRpdGlvbmFsIGNsYXNzZXMgd2l0aGluIHRoZSBKUEkgb3Igb3RoZXJ3aXNlIGNhdXNpbmcgdGhlIGFkZGl0aW9uIHRvCitvciBtb2RpZmljYXRpb24gb2YgdGhlIGNsYXNzZXMgaW4gdGhlIEpQSS4gIEluIHRoZSBldmVudCB0aGF0IHlvdQorY3JlYXRlIGFuIGFkZGl0aW9uYWwgY2xhc3MgYW5kIGFzc29jaWF0ZWQgQVBJKHMpIHdoaWNoIChpKSBleHRlbmRzIHRoZQorZnVuY3Rpb25hbGl0eSBvZiB0aGUgSmF2YSBQbGF0Zm9ybSwgYW5kIChpaSkgaXMgZXhwb3NlZCB0byB0aGlyZCBwYXJ0eQorc29mdHdhcmUgZGV2ZWxvcGVycyBmb3IgdGhlIHB1cnBvc2Ugb2YgZGV2ZWxvcGluZyBhZGRpdGlvbmFsIHNvZnR3YXJlCit3aGljaCBpbnZva2VzIHN1Y2ggYWRkaXRpb25hbCBBUEksIHlvdSBtdXN0IHByb21wdGx5IHB1Ymxpc2ggYnJvYWRseSBhbgorYWNjdXJhdGUgc3BlY2lmaWNhdGlvbiBmb3Igc3VjaCBBUEkgZm9yIGZyZWUgdXNlIGJ5IGFsbCBkZXZlbG9wZXJzLiBZb3UKK21heSBub3QgY3JlYXRlLCBvciBhdXRob3JpemUgeW91ciBsaWNlbnNlZXMgdG8gY3JlYXRlIGFkZGl0aW9uYWwKK2NsYXNzZXMsIGludGVyZmFjZXMsIG9yIHN1YnBhY2thZ2VzIHRoYXQgYXJlIGluIGFueSB3YXkgaWRlbnRpZmllZCBhcworImphdmEiLCAiamF2YXgiLCAic3VuIiBvciBzaW1pbGFyIGNvbnZlbnRpb24gYXMgc3BlY2lmaWVkIGJ5IFN1biBpbiBhbnkKK25hbWluZyBjb252ZW50aW9uIGRlc2lnbmF0aW9uLgorCis0LiBUcmFkZW1hcmtzIGFuZCBMb2dvcy4gWW91IGFja25vd2xlZGdlIGFuZCBhZ3JlZSBhcyBiZXR3ZWVuIHlvdSBhbmQKK1N1biB0aGF0IFN1biBvd25zIHRoZSBTVU4sIFNPTEFSSVMsIEpBVkEsIEpJTkksIEZPUlRFLCBhbmQgaVBMQU5FVAordHJhZGVtYXJrcyBhbmQgYWxsIFNVTiwgU09MQVJJUywgSkFWQSwgSklOSSwgRk9SVEUsIGFuZCBpUExBTkVULXJlbGF0ZWQKK3RyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIGxvZ29zIGFuZCBvdGhlciBicmFuZCBkZXNpZ25hdGlvbnMgKCJTdW4KK01hcmtzIiksIGFuZCB5b3UgYWdyZWUgdG8gY29tcGx5IHdpdGggdGhlIFN1biBUcmFkZW1hcmsgYW5kIExvZ28gVXNhZ2UKK1JlcXVpcmVtZW50cyBjdXJyZW50bHkgbG9jYXRlZCBhdAoraHR0cDovL3d3dy5zdW4uY29tL3BvbGljaWVzL3RyYWRlbWFya3MuIEFueSB1c2UgeW91IG1ha2Ugb2YgdGhlIFN1bgorTWFya3MgaW51cmVzIHRvIFN1bidzIGJlbmVmaXQuCisKKzUuIFNvdXJjZSBDb2RlLiBTb2Z0d2FyZSBtYXkgY29udGFpbiBzb3VyY2UgY29kZSB0aGF0IGlzIHByb3ZpZGVkCitzb2xlbHkgZm9yIHJlZmVyZW5jZSBwdXJwb3NlcyBwdXJzdWFudCB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQuCitTb3VyY2UgY29kZSBtYXkgbm90IGJlIHJlZGlzdHJpYnV0ZWQgdW5sZXNzIGV4cHJlc3NseSBwcm92aWRlZCBmb3IgaW4KK3RoaXMgQWdyZWVtZW50LgorCis2LiAgVGVybWluYXRpb24gZm9yIEluZnJpbmdlbWVudC4gIEVpdGhlciBwYXJ0eSBtYXkgdGVybWluYXRlIHRoaXMKK0FncmVlbWVudCBpbW1lZGlhdGVseSBzaG91bGQgYW55IFNvZnR3YXJlIGJlY29tZSwgb3IgaW4gZWl0aGVyIHBhcnR5J3MKK29waW5pb24gYmUgbGlrZWx5IHRvIGJlY29tZSwgdGhlIHN1YmplY3Qgb2YgYSBjbGFpbSBvZiBpbmZyaW5nZW1lbnQgb2YKK2FueSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHQuCisKK0ZvciBpbnF1aXJpZXMgcGxlYXNlIGNvbnRhY3Q6IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gIDkwMSBTYW4gQW50b25pbworUm9hZCwgUGFsbyBBbHRvLCBDYWxpZm9ybmlhIDk0MzAzIChMRkkjMTA4OTMxL0Zvcm0gSUQjMDExODAxKQpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvc3VuLWJjbGEtanNyMjIzIGIvbGljZW5zZXMvc3VuLWJjbGEtanNyMjIzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2YWFiOTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9zdW4tYmNsYS1qc3IyMjMKQEAgLTAsMCArMSwxMTcgQEAKK1N1biBNaWNyb3N5c3RlbXMsIEluYy4gKCJTdW4iKSBFTlRJVExFTUVOVCBmb3IgU09GVFdBUkUKKworTGljZW5zZWUvQ29tcGFueTogRW50aXR5IHJlY2VpdmluZyBTb2Z0d2FyZS4KKworRWZmZWN0aXZlIERhdGU6IERhdGUgb2YgZGVsaXZlcnkgb2YgdGhlIFNvZnR3YXJlIHRvIFlvdS4KKworU29mdHdhcmU6IFNjcmlwdGluZyBmb3IgdGhlIEphdmEgUGxhdGZvcm0gUmVmZXJlbmNlIEltcGxlbWVudGF0aW9uIDEuMC4KKworTGljZW5zZSBUZXJtOiAgUGVycGV0dWFsIChzdWJqZWN0IHRvIHRlcm1pbmF0aW9uIHVuZGVyIHRoZSBTTEEpLgorCitMaWNlbnNlZCBVbml0OiBTb2Z0d2FyZSBDb3B5LgorCitMaWNlbnNlZCB1bml0IENvdW50OiBVbmxpbWl0ZWQuCisKK1Blcm1pdHRlZCBVc2VzOiAKKworMS4gWW91IG1heSByZXByb2R1Y2UgYW5kIHVzZSB0aGUgU29mdHdhcmUgZm9yIFlvdXIgb3duIEluZGl2aWR1YWwsIENvbW1lcmNpYWwgYW5kIFJlc2VhcmNoIGFuZCBJbnN0cnVjdGlvbmFsIFVzZSBvbmx5IGZvciB0aGUgcHVycG9zZXMgb2YgZGVzaWduaW5nLCBkZXZlbG9waW5nLCB0ZXN0aW5nLCBhbmQgcnVubmluZyBZb3VyIGFwcGxldHMgYW5kIGFwcGxpY2F0aW9ucyAoIlByb2dyYW1zIikuCisKKzIuIEphdmEgVGVjaG5vbG9neSBSZXN0cmljdGlvbnMuICBZb3UgbWF5IG5vdCBjcmVhdGUsIG1vZGlmeSwgb3IgY2hhbmdlIHRoZSBiZWhhdmlvciBvZiwgb3IgYXV0aG9yaXplIFlvdXIgbGljZW5zZWVzIHRvIGNyZWF0ZSwgbW9kaWZ5LCBvciBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mLCBjbGFzc2VzLCBpbnRlcmZhY2VzLCBvciBzdWJwYWNrYWdlcyB0aGF0IGFyZSBpbiBhbnkgd2F5IGlkZW50aWZpZWQgYXMgImphdmEiLCAiamF2YXgiLCAic3VuIiBvciBzaW1pbGFyIGNvbnZlbnRpb24gYXMgc3BlY2lmaWVkIGJ5IFN1biBpbiBhbnkgbmFtaW5nIGNvbnZlbnRpb24gZGVzaWduYXRpb24uCisKKworU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiAoIlN1biIpCitTT0ZUV0FSRSBMSUNFTlNFIEFHUkVFTUVOVAorCitSRUFEIFRIRSBURVJNUyBPRiBUSElTIEFHUkVFTUVOVCAoIkFHUkVFTUVOVCIpIENBUkVGVUxMWSBCRUZPUkUgT1BFTklORyBTT0ZUV0FSRSBNRURJQSBQQUNLQUdFLiBCWSBPUEVOSU5HIFNPRlRXQVJFIE1FRElBIFBBQ0tBR0UsIFlPVSBBR1JFRSBUTyBUSEUgVEVSTVMgT0YgVEhJUyBBR1JFRU1FTlQuIElGIFlPVSBBUkUgQUNDRVNTSU5HIFNPRlRXQVJFIEVMRUNUUk9OSUNBTExZLCBJTkRJQ0FURSBZT1VSIEFDQ0VQVEFOQ0UgT0YgVEhFU0UgVEVSTVMgQlkgU0VMRUNUSU5HIFRIRSAiQUNDRVBUIiBCVVRUT04gQVQgVEhFIEVORCBPRiBUSElTIEFHUkVFTUVOVC4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBBTEwgT0YgVEhFIFRFUk1TLCBQUk9NUFRMWSBSRVRVUk4gVEhFIFVOVVNFRCBTT0ZUV0FSRSBUTyBZT1VSIFBMQUNFIE9GIFBVUkNIQVNFIEZPUiBBIFJFRlVORCBPUiwgSUYgU09GVFdBUkUgSVMgQUNDRVNTRUQgRUxFQ1RST05JQ0FMTFksIFNFTEVDVCBUSEUgIkRFQ0xJTkUiIChPUiAiRVhJVCIpIEJVVFRPTiBBVCBUSEUgRU5EIE9GIFRISVMgQUdSRUVNRU5ULiBJRiBZT1UgSEFWRSBTRVBBUkFURUxZIEFHUkVFRCBUTyBMSUNFTlNFIFRFUk1TICgiTUFTVEVSIFRFUk1TIikgRk9SIFlPVVIgTElDRU5TRSBUTyBUSElTIFNPRlRXQVJFLCBUSEVOIFNFQ1RJT05TIDEtNiBPRiBUSElTIEFHUkVFTUVOVCAoIlNVUFBMRU1FTlRBTCBMSUNFTlNFIFRFUk1TIikgU0hBTEwgU1VQUExFTUVOVCBBTkQgU1VQRVJTRURFIFRIRSBNQVNURVIgVEVSTVMgSU4gUkVMQVRJT04gVE8gVEhJUyBTT0ZUV0FSRS4KKworMS4JRGVmaW5pdGlvbnMuCisKKyhhKSAJIkVudGl0bGVtZW50IiBtZWFucyB0aGUgY29sbGVjdGl2ZSBzZXQgb2YgYXBwbGljYWJsZSBkb2N1bWVudHMgYXV0aG9yaXplZCBieSBTdW4gZXZpZGVuY2luZyB5b3VyIG9ibGlnYXRpb24gdG8gcGF5IGFzc29jaWF0ZWQgZmVlcyAoaWYgYW55KSBmb3IgdGhlIGxpY2Vuc2UsIGFzc29jaWF0ZWQgU2VydmljZXMsIGFuZCB0aGUgYXV0aG9yaXplZCBzY29wZSBvZiB1c2Ugb2YgU29mdHdhcmUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQuCisKKyhiKSAJIkxpY2Vuc2VkIFVuaXQiIG1lYW5zIHRoZSB1bml0IG9mIG1lYXN1cmUgYnkgd2hpY2ggeW91ciB1c2Ugb2YgU29mdHdhcmUgYW5kL29yIFNlcnZpY2UgaXMgbGljZW5zZWQsIGFzIGRlc2NyaWJlZCBpbiB5b3VyIEVudGl0bGVtZW50LgorCisoYykJIlBlcm1pdHRlZCBVc2UiIG1lYW5zIHRoZSBsaWNlbnNlZCBTb2Z0d2FyZSB1c2UocykgYXV0aG9yaXplZCBpbiB0aGlzIEFncmVlbWVudCBhcyBzcGVjaWZpZWQgaW4geW91ciBFbnRpdGxlbWVudC4gVGhlIFBlcm1pdHRlZCBVc2UgZm9yIGFueSBidW5kbGVkIFN1biBzb2Z0d2FyZSBub3Qgc3BlY2lmaWVkIGluIHlvdXIgRW50aXRsZW1lbnQgd2lsbCBiZSBldmFsdWF0aW9uIHVzZSBhcyBwcm92aWRlZCBpbiBTZWN0aW9uIDMuCisKKyhkKSAJIlNlcnZpY2UiIG1lYW5zIHRoZSBzZXJ2aWNlKHMpIHRoYXQgU3VuIG9yIGl0cyBkZWxlZ2F0ZSB3aWxsIHByb3ZpZGUsIGlmIGFueSwgYXMgc2VsZWN0ZWQgaW4geW91ciBFbnRpdGxlbWVudCBhbmQgYXMgZnVydGhlciBkZXNjcmliZWQgaW4gdGhlIGFwcGxpY2FibGUgc2VydmljZSBsaXN0aW5ncyBhdCB3d3cuc3VuLmNvbS9zZXJ2aWNlL3NlcnZpY2VsaXN0LgorCisoZSkgCSJTb2Z0d2FyZSIgbWVhbnMgdGhlIFN1biBzb2Z0d2FyZSBkZXNjcmliZWQgaW4geW91ciBFbnRpdGxlbWVudC4gQWxzbywgY2VydGFpbiBzb2Z0d2FyZSBtYXkgYmUgaW5jbHVkZWQgZm9yIGV2YWx1YXRpb24gdXNlIHVuZGVyIFNlY3Rpb24gMy4gCisKKyhmKQkiWW91IiBhbmQgIllvdXIiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGxlZ2FsIGVudGl0eSBzcGVjaWZpZWQgaW4gdGhlIEVudGl0bGVtZW50LCBvciBmb3IgZXZhbHVhdGlvbiBwdXJwb3NlcywgdGhlIGVudGl0eSBwZXJmb3JtaW5nIHRoZSBldmFsdWF0aW9uLgorCisyLglMaWNlbnNlIEdyYW50IGFuZCBFbnRpdGxlbWVudC4KKworU3ViamVjdCB0byB0aGUgdGVybXMgb2YgeW91ciBFbnRpdGxlbWVudCwgU3VuIGdyYW50cyB5b3UgYSBub25leGNsdXNpdmUsIG5vbnRyYW5zZmVyYWJsZSBsaW1pdGVkIGxpY2Vuc2UgdG8gdXNlIFNvZnR3YXJlIGZvciBpdHMgUGVybWl0dGVkIFVzZSBmb3IgdGhlIGxpY2Vuc2UgdGVybS4gWW91ciBFbnRpdGxlbWVudCB3aWxsIHNwZWNpZnkgKGEpIFNvZnR3YXJlIGxpY2Vuc2VkLCAoYikgdGhlIFBlcm1pdHRlZCBVc2UsIChjKSB0aGUgbGljZW5zZSB0ZXJtLCBhbmQgKGQpIHRoZSBMaWNlbnNlZCBVbml0cy4gCisKK0FkZGl0aW9uYWxseSwgaWYgeW91ciBFbnRpdGxlbWVudCBpbmNsdWRlcyBTZXJ2aWNlcywgdGhlbiBpdCB3aWxsIGFsc28gc3BlY2lmeSB0aGUgKGUpIFNlcnZpY2UgYW5kIChmKSBzZXJ2aWNlIHRlcm0uIAorCitJZiB5b3VyIHJpZ2h0cyB0byBTb2Z0d2FyZSBvciBTZXJ2aWNlcyBhcmUgbGltaXRlZCBpbiBkdXJhdGlvbiBhbmQgdGhlIGRhdGUgc3VjaCByaWdodHMgYmVnaW4gaXMgb3RoZXIgdGhhbiB0aGUgcHVyY2hhc2UgZGF0ZSwgeW91ciBFbnRpdGxlbWVudCB3aWxsIHByb3ZpZGUgdGhhdCBiZWdpbm5pbmcgZGF0ZShzKS4KKworVGhlIEVudGl0bGVtZW50IG1heSBiZSBkZWxpdmVyZWQgdG8geW91IGluIHZhcmlvdXMgd2F5cyBkZXBlbmRpbmcgb24gdGhlIG1hbm5lciBpbiB3aGljaCB5b3Ugb2J0YWluIFNvZnR3YXJlIGFuZCBTZXJ2aWNlcywgZm9yIGV4YW1wbGUsIHRoZSBFbnRpdGxlbWVudCBtYXkgYmUgcHJvdmlkZWQgaW4geW91ciByZWNlaXB0LCBpbnZvaWNlIG9yIHlvdXIgY29udHJhY3Qgd2l0aCBTdW4gb3IgYXV0aG9yaXplZCBTdW4gcmVzZWxsZXIuIEl0IG1heSBhbHNvIGJlIGluIGVsZWN0cm9uaWMgZm9ybWF0IGlmIHlvdSBkb3dubG9hZCBTb2Z0d2FyZS4KKworMy4JUGVybWl0dGVkIFVzZS4KKworQXMgc2VsZWN0ZWQgaW4geW91ciBFbnRpdGxlbWVudCwgb25lIG9yIG1vcmUgb2YgdGhlIGZvbGxvd2luZyBQZXJtaXR0ZWQgVXNlcyB3aWxsIGFwcGx5IHRvIHlvdXIgdXNlIG9mIFNvZnR3YXJlLiBVbmxlc3MgeW91IGhhdmUgYW4gRW50aXRsZW1lbnQgdGhhdCBleHByZXNzbHkgcGVybWl0cyBpdCwgeW91IG1heSBub3QgdXNlIFNvZnR3YXJlIGZvciBhbnkgb2YgdGhlIG90aGVyIFBlcm1pdHRlZCBVc2VzLiBJZiB5b3UgZG9uJ3QgaGF2ZSBhbiBFbnRpdGxlbWVudCwgb3IgaWYgeW91ciBFbnRpdGxlbWVudCBkb2Vzbid0IGNvdmVyIGFkZGl0aW9uYWwgc29mdHdhcmUgZGVsaXZlcmVkIHRvIHlvdSwgdGhlbiBzdWNoIHNvZnR3YXJlIGlzIGZvciB5b3VyIEV2YWx1YXRpb24gVXNlLgorCisoYSkgRXZhbHVhdGlvbiBVc2UuIFlvdSBtYXkgZXZhbHVhdGUgU29mdHdhcmUgaW50ZXJuYWxseSBmb3IgYSBwZXJpb2Qgb2YgOTAgZGF5cyBmcm9tIHlvdXIgZmlyc3QgdXNlLiAKKworKGIpIFJlc2VhcmNoIGFuZCBJbnN0cnVjdGlvbmFsIFVzZS4gWW91IG1heSB1c2UgU29mdHdhcmUgaW50ZXJuYWxseSB0byBkZXNpZ24sIGRldmVsb3AgYW5kIHRlc3QsIGFuZCBhbHNvIHRvIHByb3ZpZGUgaW5zdHJ1Y3Rpb24gb24gc3VjaCB1c2VzLgorCisoYykgSW5kaXZpZHVhbCBVc2UuIFlvdSBtYXkgdXNlIFNvZnR3YXJlIGludGVybmFsbHkgZm9yIHBlcnNvbmFsLCBpbmRpdmlkdWFsIHVzZS4KKworKGQpIENvbW1lcmNpYWwgVXNlLiBZb3UgbWF5IHVzZSBTb2Z0d2FyZSBpbnRlcm5hbGx5IGZvciB5b3VyIG93biBjb21tZXJjaWFsIHB1cnBvc2VzLiAKKworKGUpIFNlcnZpY2UgUHJvdmlkZXIgVXNlLiBZb3UgbWF5IG1ha2UgU29mdHdhcmUgZnVuY3Rpb25hbGl0eSBhY2Nlc3NpYmxlIChidXQgbm90IGJ5IHByb3ZpZGluZyBTb2Z0d2FyZSBpdHNlbGYgb3IgdGhyb3VnaCBvdXRzb3VyY2luZyBzZXJ2aWNlcykgdG8geW91ciBlbmQgdXNlcnMgaW4gYW4gZXh0cmFuZXQgZGVwbG95bWVudCwgYnV0IG5vdCB0byB5b3VyIGFmZmlsaWF0ZWQgY29tcGFuaWVzIG9yIHRvIGdvdmVybm1lbnQgYWdlbmNpZXMuCisKKzQuCUxpY2Vuc2VkIFVuaXRzLgorCitZb3VyIFBlcm1pdHRlZCBVc2UgaXMgbGltaXRlZCB0byB0aGUgbnVtYmVyIG9mIExpY2Vuc2VkIFVuaXRzIHN0YXRlZCBpbiB5b3VyIEVudGl0bGVtZW50LiBJZiB5b3UgcmVxdWlyZSBhZGRpdGlvbmFsIExpY2Vuc2VkIFVuaXRzLCB5b3Ugd2lsbCBuZWVkIGFkZGl0aW9uYWwgRW50aXRsZW1lbnQocykuCisKKzUuCVJlc3RyaWN0aW9ucy4KKworKGEpIFRoZSBjb3BpZXMgb2YgU29mdHdhcmUgcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSBsaWNlbnNlZCwgbm90IHNvbGQsIHRvIHlvdSBieSBTdW4uIFN1biByZXNlcnZlcyBhbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZC4gKGIpIFlvdSBtYXkgbWFrZSBhIHNpbmdsZSBhcmNoaXZhbCBjb3B5IG9mIFNvZnR3YXJlLCBidXQgb3RoZXJ3aXNlIG1heSBub3QgY29weSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIFNvZnR3YXJlLiBIb3dldmVyIGlmIHRoZSBTdW4gZG9jdW1lbnRhdGlvbiBhY2NvbXBhbnlpbmcgU29mdHdhcmUgbGlzdHMgc3BlY2lmaWMgcG9ydGlvbnMgb2YgU29mdHdhcmUsIHN1Y2ggYXMgaGVhZGVyIGZpbGVzLCBjbGFzcyBsaWJyYXJpZXMsIHJlZmVyZW5jZSBzb3VyY2UgY29kZSwgYW5kL29yIHJlZGlzdHJpYnV0YWJsZSBmaWxlcywgdGhhdCBtYXkgYmUgaGFuZGxlZCBkaWZmZXJlbnRseSwgeW91IG1heSBkbyBzbyBvbmx5IGFzIHByb3ZpZGVkIGluIHRoZSBTdW4gZG9jdW1lbnRhdGlvbi4gKGMpIFlvdSBtYXkgbm90IHJlbnQsIGxlYXNlLCBsZW5kIG9yIGVuY3VtYmVyIFNvZnR3YXJlLiAoZCkgVW5sZXNzIGVuZm9yY2VtZW50IGlzIHByb2hpYml0ZWQgYnkgYXBwbGljYWJsZSBsYXcsIHlvdSBtYXkgbm90IGRlY29tcGlsZSwgb3IgcmV2ZXJzZSBlbmdpbmVlciBTb2Z0d2FyZS4gKGUpIFRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCB3aWxsIGFwcGx5IHRvIGFueSBTb2Z0d2FyZSB1cGRhdGVzLCBwcm92aWRlZCB0byB5b3UgYXQgU3VuJ3MgZGlzY3JldGlvbiwgdGhhdCByZXBsYWNlIGFuZC9vciBzdXBwbGVtZW50IHRoZSBvcmlnaW5hbCBTb2Z0d2FyZSwgdW5sZXNzIHN1Y2ggdXBkYXRlIGNvbnRhaW5zIGEgc2VwYXJhdGUgbGljZW5zZS4gKGYpIFlvdSBtYXkgbm90IHB1Ymxpc2ggb3IgcHJvdmlkZSB0aGUgcmVzdWx0cyBvZiBhbnkgYmVuY2htYXJrIG9yIGNvbXBhcmlzb24gdGVzdHMgcnVuIG9uIFNvZnR3YXJlIHRvIGFueSB0aGlyZCBwYXJ0eSB3aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgU3VuLiAoZykgU29mdHdhcmUgaXMgY29uZmlkZW50aWFsIGFuZCBjb3B5cmlnaHRlZC4gKGgpIFVubGVzcyBvdGhlcndpc2Ugc3BlY2lmaWVkLCBpZiBTb2Z0d2FyZSBpcyBkZWxpdmVyZWQgd2l0aCBlbWJlZGRlZCBvciBidW5kbGVkIHNvZnR3YXJlIHRoYXQgZW5hYmxlcyBmdW5jdGlvbmFsaXR5IG9mIFNvZnR3YXJlLCB5b3UgbWF5IG5vdCB1c2Ugc3VjaCBzb2Z0d2FyZSBvbiBhIHN0YW5kLWFsb25lIGJhc2lzIG9yIHVzZSBhbnkgcG9ydGlvbiBvZiBzdWNoIHNvZnR3YXJlIHRvIGludGVyb3BlcmF0ZSB3aXRoIGFueSBwcm9ncmFtKHMpIG90aGVyIHRoYW4gU29mdHdhcmUuIChpKSBTb2Z0d2FyZSBtYXkgY29udGFpbiBwcm9ncmFtcyB0aGF0IHBlcmZvcm0gYXV0b21hdGVkIGNvbGxlY3Rpb24gb2Ygc3lzdGVtIGRhdGEgYW5kL29yIGF1dG9tYXRlZCBzb2Z0d2FyZSB1cGRhdGluZyBzZXJ2aWNlcy4gU3lzdGVtIGRhdGEgY29sbGVjdGVkIHRocm91Z2ggc3VjaCBwcm9ncmFtcyBtYXkgYmUgdXNlZCBieSBTdW4sIGl0cyBzdWJjb250cmFjdG9ycywgYW5kIGl0cyBzZXJ2aWNlIGRlbGl2ZXJ5IHBhcnRuZXJzIGZvciB0aGUgcHVycG9zZSBvZiBwcm92aWRpbmcgeW91IHdpdGggcmVtb3RlIHN5c3RlbSBzZXJ2aWNlcyBhbmQvb3IgaW1wcm92aW5nIFN1bidzIHNvZnR3YXJlIGFuZCBzeXN0ZW1zLiAoaikgU29mdHdhcmUgaXMgbm90IGRlc2lnbmVkLCBsaWNlbnNlZCBvciBpbnRlbmRlZCBmb3IgdXNlIGluIHRoZSBkZXNpZ24sIGNvbnN0cnVjdGlvbiwgb3BlcmF0aW9uIG9yIG1haW50ZW5hbmNlIG9mIGFueSBudWNsZWFyIGZhY2lsaXR5IGFuZCBTdW4gYW5kIGl0cyBsaWNlbnNvcnMgZGlzY2xhaW0gYW55IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eSBvZiBmaXRuZXNzIGZvciBzdWNoIHVzZXMuIChrKSBObyByaWdodCwgdGl0bGUgb3IgaW50ZXJlc3QgaW4gb3IgdG8gYW55IHRyYWRlbWFyaywgc2VydmljZSBtYXJrLCBsb2dvIG9yIHRyYWRlIG5hbWUgb2YgU3VuIG9yIGl0cyBsaWNlbnNvcnMgaXMgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudC4KKworNi4JVGVybSBhbmQgVGVybWluYXRpb24uIAorCitUaGUgbGljZW5zZSBhbmQgc2VydmljZSB0ZXJtIGFyZSBzZXQgZm9ydGggaW4geW91ciBFbnRpdGxlbWVudChzKS4gWW91ciByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgd2lsbCB0ZXJtaW5hdGUgaW1tZWRpYXRlbHkgd2l0aG91dCBub3RpY2UgZnJvbSBTdW4gaWYgeW91IG1hdGVyaWFsbHkgYnJlYWNoIGl0IG9yIHRha2UgYW55IGFjdGlvbiBpbiBkZXJvZ2F0aW9uIG9mIFN1bidzIGFuZC9vciBpdHMgbGljZW5zb3JzJyByaWdodHMgdG8gU29mdHdhcmUuIFN1biBtYXkgdGVybWluYXRlIHRoaXMgQWdyZWVtZW50IHNob3VsZCBhbnkgU29mdHdhcmUgYmVjb21lLCBvciBpbiBTdW4ncyByZWFzb25hYmxlIG9waW5pb24gbGlrZWx5IHRvIGJlY29tZSwgdGhlIHN1YmplY3Qgb2YgYSBjbGFpbSBvZiBpbnRlbGxlY3R1YWwgcHJvcGVydHkgaW5mcmluZ2VtZW50IG9yIHRyYWRlIHNlY3JldCBtaXNhcHByb3ByaWF0aW9uLiBVcG9uIHRlcm1pbmF0aW9uLCB5b3Ugd2lsbCBjZWFzZSB1c2Ugb2YsIGFuZCBkZXN0cm95LCBTb2Z0d2FyZSBhbmQgY29uZmlybSBjb21wbGlhbmNlIGluIHdyaXRpbmcgdG8gU3VuLiBTZWN0aW9ucyAxLCA1LCA2LCA3LCBhbmQgOS0xNSB3aWxsIHN1cnZpdmUgdGVybWluYXRpb24gb2YgdGhlIEFncmVlbWVudC4KKworNy4JSmF2YSBDb21wYXRpYmlsaXR5IGFuZCBPcGVuIFNvdXJjZS4KKworU29mdHdhcmUgbWF5IGNvbnRhaW4gSmF2YSB0ZWNobm9sb2d5LiBZb3UgbWF5IG5vdCBjcmVhdGUgYWRkaXRpb25hbCBjbGFzc2VzIHRvLCBvciBtb2RpZmljYXRpb25zIG9mLCB0aGUgSmF2YSB0ZWNobm9sb2d5LCBleGNlcHQgdW5kZXIgY29tcGF0aWJpbGl0eSByZXF1aXJlbWVudHMgYXZhaWxhYmxlIHVuZGVyIGEgc2VwYXJhdGUgYWdyZWVtZW50IGF2YWlsYWJsZSBhdCB3d3cuamF2YS5uZXQuCisKK1N1biBzdXBwb3J0cyBhbmQgYmVuZWZpdHMgZnJvbSB0aGUgZ2xvYmFsIGNvbW11bml0eSBvZiBvcGVuIHNvdXJjZSBkZXZlbG9wZXJzLCBhbmQgdGhhbmtzIHRoZSBjb21tdW5pdHkgZm9yIGl0cyBpbXBvcnRhbnQgY29udHJpYnV0aW9ucyBhbmQgb3BlbiBzdGFuZGFyZHMtYmFzZWQgdGVjaG5vbG9neSwgd2hpY2ggU3VuIGhhcyBhZG9wdGVkIGludG8gbWFueSBvZiBpdHMgcHJvZHVjdHMuCisKK1BsZWFzZSBub3RlIHRoYXQgcG9ydGlvbnMgb2YgU29mdHdhcmUgbWF5IGJlIHByb3ZpZGVkIHdpdGggbm90aWNlcyBhbmQgb3BlbiBzb3VyY2UgbGljZW5zZXMgZnJvbSBzdWNoIGNvbW11bml0aWVzIGFuZCB0aGlyZCBwYXJ0aWVzIHRoYXQgZ292ZXJuIHRoZSB1c2Ugb2YgdGhvc2UgcG9ydGlvbnMsIGFuZCBhbnkgbGljZW5zZXMgZ3JhbnRlZCBoZXJldW5kZXIgZG8gbm90IGFsdGVyIGFueSByaWdodHMgYW5kIG9ibGlnYXRpb25zIHlvdSBtYXkgaGF2ZSB1bmRlciBzdWNoIG9wZW4gc291cmNlIGxpY2Vuc2VzLCBob3dldmVyLCB0aGUgZGlzY2xhaW1lciBvZiB3YXJyYW50eSBhbmQgbGltaXRhdGlvbiBvZiBsaWFiaWxpdHkgcHJvdmlzaW9ucyBpbiB0aGlzIEFncmVlbWVudCB3aWxsIGFwcGx5IHRvIGFsbCBTb2Z0d2FyZSBpbiB0aGlzIGRpc3RyaWJ1dGlvbi4KKworOC4gCUxpbWl0ZWQgV2FycmFudHkuIAorCitTdW4gd2FycmFudHMgdG8geW91IHRoYXQgZm9yIGEgcGVyaW9kIG9mIDkwIGRheXMgZnJvbSB0aGUgZGF0ZSBvZiBwdXJjaGFzZSwgYXMgZXZpZGVuY2VkIGJ5IGEgY29weSBvZiB0aGUgcmVjZWlwdCwgdGhlIG1lZGlhIG9uIHdoaWNoIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCAoaWYgYW55KSB3aWxsIGJlIGZyZWUgb2YgZGVmZWN0cyBpbiBtYXRlcmlhbHMgYW5kIHdvcmttYW5zaGlwIHVuZGVyIG5vcm1hbCB1c2UuIEV4Y2VwdCBmb3IgdGhlIGZvcmVnb2luZywgU29mdHdhcmUgaXMgcHJvdmlkZWQgIkFTIElTIi4gWW91ciBleGNsdXNpdmUgcmVtZWR5IGFuZCBTdW4ncyBlbnRpcmUgbGlhYmlsaXR5IHVuZGVyIHRoaXMgbGltaXRlZCB3YXJyYW50eSB3aWxsIGJlIGF0IFN1bidzIG9wdGlvbiB0byByZXBsYWNlIFNvZnR3YXJlIG1lZGlhIG9yIHJlZnVuZCB0aGUgZmVlIHBhaWQgZm9yIFNvZnR3YXJlLiBTb21lIHN0YXRlcyBkbyBub3QgYWxsb3cgbGltaXRhdGlvbnMgb24gY2VydGFpbiBpbXBsaWVkIHdhcnJhbnRpZXMsIHNvIHRoZSBhYm92ZSBtYXkgbm90IGFwcGx5IHRvIHlvdS4gVGhpcyBsaW1pdGVkIHdhcnJhbnR5IGdpdmVzIHlvdSBzcGVjaWZpYyBsZWdhbCByaWdodHMuIFlvdSBtYXkgaGF2ZSBvdGhlcnMsIHdoaWNoIHZhcnkgZnJvbSBzdGF0ZSB0byBzdGF0ZS4KKworOS4JRGlzY2xhaW1lciBvZiBXYXJyYW50eS4gCisKK1VOTEVTUyBTUEVDSUZJRUQgSU4gVEhJUyBBR1JFRU1FTlQsIEFMTCBFWFBSRVNTIE9SIElNUExJRUQgQ09ORElUSU9OUywgUkVQUkVTRU5UQVRJT05TIEFORCBXQVJSQU5USUVTLCBJTkNMVURJTkcgQU5ZIElNUExJRUQgV0FSUkFOVFkgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBPUiBOT04tSU5GUklOR0VNRU5UIEFSRSBESVNDTEFJTUVELCBFWENFUFQgVE8gVEhFIEVYVEVOVCBUSEFUIFRIRVNFIERJU0NMQUlNRVJTIEFSRSBIRUxEIFRPIEJFIExFR0FMTFkgSU5WQUxJRC4gCisKKzEwLiAJTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuIAorCitUTyBUSEUgRVhURU5UIE5PVCBQUk9ISUJJVEVEIEJZIExBVywgSU4gTk8gRVZFTlQgV0lMTCBTVU4gT1IgSVRTIExJQ0VOU09SUyBCRSBMSUFCTEUgRk9SIEFOWSBMT1NUIFJFVkVOVUUsIFBST0ZJVCBPUiBEQVRBLCBPUiBGT1IgU1BFQ0lBTCwgSU5ESVJFQ1QsIENPTlNFUVVFTlRJQUwsIElOQ0lERU5UQUwgT1IgUFVOSVRJVkUgREFNQUdFUywgSE9XRVZFUiBDQVVTRUQgUkVHQVJETEVTUyBPRiBUSEUgVEhFT1JZIE9GIExJQUJJTElUWSwgQVJJU0lORyBPVVQgT0YgT1IgUkVMQVRFRCBUTyBUSEUgVVNFIE9GIE9SIElOQUJJTElUWSBUTyBVU0UgU09GVFdBUkUsIEVWRU4gSUYgU1VOIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gSW4gbm8gZXZlbnQgd2lsbCBTdW4ncyBsaWFiaWxpdHkgdG8geW91LCB3aGV0aGVyIGluIGNvbnRyYWN0LCB0b3J0IChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIG9yIG90aGVyd2lzZSwgZXhjZWVkIHRoZSBhbW91bnQgcGFpZCBieSB5b3UgZm9yIFNvZnR3YXJlIHVuZGVyIHRoaXMgQWdyZWVtZW50LiBUaGUgZm9yZWdvaW5nIGxpbWl0YXRpb25zIHdpbGwgYXBwbHkgZXZlbiBpZiB0aGUgYWJvdmUgc3RhdGVkIHdhcnJhbnR5IGZhaWxzIG9mIGl0cyBlc3NlbnRpYWwgcHVycG9zZS4gU29tZSBzdGF0ZXMgZG8gbm90IGFsbG93IHRoZSBleGNsdXNpb24gb2YgaW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMsIHNvIHNvbWUgb2YgdGhlIHRlcm1zIGFib3ZlIG1heSBub3QgYmUgYXBwbGljYWJsZSB0byB5b3UuIAorCisxMS4gCUV4cG9ydCBSZWd1bGF0aW9ucy4gCisKK0FsbCBTb2Z0d2FyZSwgZG9jdW1lbnRzLCB0ZWNobmljYWwgZGF0YSwgYW5kIGFueSBvdGhlciBtYXRlcmlhbHMgZGVsaXZlcmVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSBzdWJqZWN0IHRvIFUuUy4gZXhwb3J0IGNvbnRyb2wgbGF3cyBhbmQgbWF5IGJlIHN1YmplY3QgdG8gZXhwb3J0IG9yIGltcG9ydCByZWd1bGF0aW9ucyBpbiBvdGhlciBjb3VudHJpZXMuIFlvdSBhZ3JlZSB0byBjb21wbHkgc3RyaWN0bHkgd2l0aCB0aGVzZSBsYXdzIGFuZCByZWd1bGF0aW9ucyBhbmQgYWNrbm93bGVkZ2UgdGhhdCB5b3UgaGF2ZSB0aGUgcmVzcG9uc2liaWxpdHkgdG8gb2J0YWluIGFueSBsaWNlbnNlcyB0byBleHBvcnQsIHJlLWV4cG9ydCwgb3IgaW1wb3J0IGFzIG1heSBiZSByZXF1aXJlZCBhZnRlciBkZWxpdmVyeSB0byB5b3UuIAorCisxMi4gCVUuUy4gR292ZXJubWVudCBSZXN0cmljdGVkIFJpZ2h0cy4gCisKK0lmIFNvZnR3YXJlIGlzIGJlaW5nIGFjcXVpcmVkIGJ5IG9yIG9uIGJlaGFsZiBvZiB0aGUgVS5TLiBHb3Zlcm5tZW50IG9yIGJ5IGEgVS5TLiBHb3Zlcm5tZW50IHByaW1lIGNvbnRyYWN0b3Igb3Igc3ViY29udHJhY3RvciAoYXQgYW55IHRpZXIpLCB0aGVuIHRoZSBHb3Zlcm5tZW50J3MgcmlnaHRzIGluIFNvZnR3YXJlIGFuZCBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiB3aWxsIGJlIG9ubHkgYXMgc2V0IGZvcnRoIGluIHRoaXMgQWdyZWVtZW50OyB0aGlzIGlzIGluIGFjY29yZGFuY2Ugd2l0aCA0OCBDRlIgMjI3LjcyMDEgdGhyb3VnaCAyMjcuNzIwMi00IChmb3IgRGVwYXJ0bWVudCBvZiBEZWZlbnNlIChET0QpIGFjcXVpc2l0aW9ucykgYW5kIHdpdGggNDggQ0ZSIDIuMTAxIGFuZCAxMi4yMTIgKGZvciBub24tRE9EIGFjcXVpc2l0aW9ucykuIAorCisxMy4gCUdvdmVybmluZyBMYXcuIAorCitBbnkgYWN0aW9uIHJlbGF0ZWQgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBiZSBnb3Zlcm5lZCBieSBDYWxpZm9ybmlhIGxhdyBhbmQgY29udHJvbGxpbmcgVS5TLiBmZWRlcmFsIGxhdy4gTm8gY2hvaWNlIG9mIGxhdyBydWxlcyBvZiBhbnkganVyaXNkaWN0aW9uIHdpbGwgYXBwbHkuIAorCisxNC4gCVNldmVyYWJpbGl0eS4gCisKK0lmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCB0aGlzIEFncmVlbWVudCB3aWxsIHJlbWFpbiBpbiBlZmZlY3Qgd2l0aCB0aGUgcHJvdmlzaW9uIG9taXR0ZWQsIHVubGVzcyBvbWlzc2lvbiB3b3VsZCBmcnVzdHJhdGUgdGhlIGludGVudCBvZiB0aGUgcGFydGllcywgaW4gd2hpY2ggY2FzZSB0aGlzIEFncmVlbWVudCB3aWxsIGltbWVkaWF0ZWx5IHRlcm1pbmF0ZS4KKworMTUuIAlJbnRlZ3JhdGlvbi4gCisKK1RoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcgYW55IHRlcm1zIGNvbnRhaW5lZCBpbiB5b3VyIEVudGl0bGVtZW50LCBpcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHlvdSBhbmQgU3VuIHJlbGF0aW5nIHRvIGl0cyBzdWJqZWN0IG1hdHRlci4gSXQgc3VwZXJzZWRlcyBhbGwgcHJpb3Igb3IgY29udGVtcG9yYW5lb3VzIG9yYWwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9ucywgcHJvcG9zYWxzLCByZXByZXNlbnRhdGlvbnMgYW5kIHdhcnJhbnRpZXMgYW5kIHByZXZhaWxzIG92ZXIgYW55IGNvbmZsaWN0aW5nIG9yIGFkZGl0aW9uYWwgdGVybXMgb2YgYW55IHF1b3RlLCBvcmRlciwgYWNrbm93bGVkZ21lbnQsIG9yIG90aGVyIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgcGFydGllcyByZWxhdGluZyB0byBpdHMgc3ViamVjdCBtYXR0ZXIgZHVyaW5nIHRoZSB0ZXJtIG9mIHRoaXMgQWdyZWVtZW50LiBObyBtb2RpZmljYXRpb24gb2YgdGhpcyBBZ3JlZW1lbnQgd2lsbCBiZSBiaW5kaW5nLCB1bmxlc3MgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IGFuIGF1dGhvcml6ZWQgcmVwcmVzZW50YXRpdmUgb2YgZWFjaCBwYXJ0eS4KKworUGxlYXNlIGNvbnRhY3QgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiA0MTUwIE5ldHdvcmsgQ2lyY2xlLCBTYW50YSBDbGFyYSwgQ2FsaWZvcm5pYSA5NTA1NCBpZiB5b3UgaGF2ZSBxdWVzdGlvbnMuCmRpZmYgLS1naXQgYS9saWNlbnNlcy9zdW4tYmNsYS1qdGEgYi9saWNlbnNlcy9zdW4tYmNsYS1qdGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEyNTZjYgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL3N1bi1iY2xhLWp0YQpAQCAtMCwwICsxLDEzMSBAQAorU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorQmluYXJ5IENvZGUgTGljZW5zZSBBZ3JlZW1lbnQKKworIAorCitSRUFEIFRIRSBURVJNUyBPRiBUSElTIEFHUkVFTUVOVCBBTkQgQU5ZIFBST1ZJREVEIFNVUFBMRU1FTlRBTCBMSUNFTlNFIFRFUk1TIAorKENPTExFQ1RJVkVMWSAiQUdSRUVNRU5UIikgQ0FSRUZVTExZIEJFRk9SRSBPUEVOSU5HIFRIRSBTT0ZUV0FSRSBNRURJQSBQQUNLQUdFLiAgCitCWSBPUEVOSU5HIFRIRSBTT0ZUV0FSRSBNRURJQSBQQUNLQUdFLCBZT1UgQUdSRUUgVE8gVEhFIFRFUk1TIE9GIFRISVMgQUdSRUVNRU5ULiAKKyBJRiBZT1UgQVJFIEFDQ0VTU0lORyBUSEUgU09GVFdBUkUgRUxFQ1RST05JQ0FMTFksIElORElDQVRFIFlPVVIgQUNDRVBUQU5DRSBPRiAKK1RIRVNFIFRFUk1TIEJZIFNFTEVDVElORyBUSEUgIkFDQ0VQVCIgQlVUVE9OIEFUIFRIRSBFTkQgT0YgVEhJUyBBR1JFRU1FTlQuICBJRiAKK1lPVSBETyBOT1QgQUdSRUUgVE8gQUxMIFRIRVNFIFRFUk1TLCBQUk9NUFRMWSBSRVRVUk4gVEhFIFVOVVNFRCBTT0ZUV0FSRSBUTyBZT1VSIAorUExBQ0UgT0YgUFVSQ0hBU0UgRk9SIEEgUkVGVU5EIE9SLCBJRiBUSEUgU09GVFdBUkUgSVMgQUNDRVNTRUQgRUxFQ1RST05JQ0FMTFksIAorU0VMRUNUIFRIRSAiREVDTElORSIgQlVUVE9OIEFUIFRIRSBFTkQgT0YgVEhJUyBBR1JFRU1FTlQuIDEuICBMSUNFTlNFIFRPIFVTRS4gIAorU3VuIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlIGFuZCBub24tdHJhbnNmZXJhYmxlIGxpY2Vuc2UgZm9yIHRoZSBpbnRlcm5hbCB1c2UgCitvbmx5IG9mIHRoZSBhY2NvbXBhbnlpbmcgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24gYW5kIGFueSBlcnJvciBjb3JyZWN0aW9ucyAKK3Byb3ZpZGVkIGJ5IFN1biAoY29sbGVjdGl2ZWx5ICJTb2Z0d2FyZSIpLCBieSB0aGUgbnVtYmVyIG9mIHVzZXJzIGFuZCB0aGUgY2xhc3MgCitvZiBjb21wdXRlciBoYXJkd2FyZSBmb3Igd2hpY2ggdGhlIGNvcnJlc3BvbmRpbmcgZmVlIGhhcyBiZWVuIHBhaWQuIDIuICAKK1JFU1RSSUNUSU9OUy4gIFNvZnR3YXJlIGlzIGNvbmZpZGVudGlhbCBhbmQgY29weXJpZ2h0ZWQuIFRpdGxlIHRvIFNvZnR3YXJlIGFuZCAKK2FsbCBhc3NvY2lhdGVkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgaXMgcmV0YWluZWQgYnkgU3VuIGFuZC9vciBpdHMgCitsaWNlbnNvcnMuICBFeGNlcHQgYXMgc3BlY2lmaWNhbGx5IGF1dGhvcml6ZWQgaW4gYW55IFN1cHBsZW1lbnRhbCBMaWNlbnNlIFRlcm1zLCAKK3lvdSBtYXkgbm90IG1ha2UgY29waWVzIG9mIFNvZnR3YXJlLCBvdGhlciB0aGFuIGEgc2luZ2xlIGNvcHkgb2YgU29mdHdhcmUgZm9yIAorYXJjaGl2YWwgcHVycG9zZXMuICBVbmxlc3MgZW5mb3JjZW1lbnQgaXMgcHJvaGliaXRlZCBieSBhcHBsaWNhYmxlIGxhdywgeW91IG1heSAKK25vdCBtb2RpZnksIGRlY29tcGlsZSwgb3IgcmV2ZXJzZSBlbmdpbmVlciBTb2Z0d2FyZS4gIExpY2Vuc2VlIGFja25vd2xlZGdlcyB0aGF0IAorTGljZW5zZWQgU29mdHdhcmUgaXMgbm90IGRlc2lnbmVkIG9yIGludGVuZGVkIGZvciB1c2UgaW4gdGhlIGRlc2lnbiwgCitjb25zdHJ1Y3Rpb24sIG9wZXJhdGlvbiBvciBtYWludGVuYW5jZSBvZiBhbnkgbnVjbGVhciBmYWNpbGl0eS4gU3VuIAorTWljcm9zeXN0ZW1zLCBJbmMuIGRpc2NsYWltcyBhbnkgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5IG9mIGZpdG5lc3MgZm9yIHN1Y2ggCit1c2VzLiAgIE5vIHJpZ2h0LCB0aXRsZSBvciBpbnRlcmVzdCBpbiBvciB0byBhbnkgdHJhZGVtYXJrLCBzZXJ2aWNlIG1hcmssIGxvZ28gCitvciB0cmFkZSBuYW1lIG9mIFN1biBvciBpdHMgbGljZW5zb3JzIGlzIGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQuIDMuIAorTElNSVRFRCBXQVJSQU5UWS4gIFN1biB3YXJyYW50cyB0byB5b3UgdGhhdCBmb3IgYSBwZXJpb2Qgb2YgbmluZXR5ICg5MCkgZGF5cyAKK2Zyb20gdGhlIGRhdGUgb2YgcHVyY2hhc2UsIGFzIGV2aWRlbmNlZCBieSBhIGNvcHkgb2YgdGhlIHJlY2VpcHQsIHRoZSBtZWRpYSBvbiAKK3doaWNoIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCAoaWYgYW55KSB3aWxsIGJlIGZyZWUgb2YgZGVmZWN0cyBpbiBtYXRlcmlhbHMgYW5kIAord29ya21hbnNoaXAgdW5kZXIgbm9ybWFsIHVzZS4gIEV4Y2VwdCBmb3IgdGhlIGZvcmVnb2luZywgU29mdHdhcmUgaXMgcHJvdmlkZWQgCisiQVMgSVMiLiAgWW91ciBleGNsdXNpdmUgcmVtZWR5IGFuZCBTdW4ncyBlbnRpcmUgbGlhYmlsaXR5IHVuZGVyIHRoaXMgbGltaXRlZCAKK3dhcnJhbnR5IHdpbGwgYmUgYXQgU3VuJ3Mgb3B0aW9uIHRvIHJlcGxhY2UgU29mdHdhcmUgbWVkaWEgb3IgcmVmdW5kIHRoZSBmZWUgCitwYWlkIGZvciBTb2Z0d2FyZS4gNC4gIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkuICBVTkxFU1MgU1BFQ0lGSUVEIElOIFRISVMgCitBR1JFRU1FTlQsIEFMTCBFWFBSRVNTIE9SIElNUExJRUQgQ09ORElUSU9OUywgUkVQUkVTRU5UQVRJT05TIEFORCBXQVJSQU5USUVTLCAKK0lOQ0xVRElORyBBTlkgSU1QTElFRCBXQVJSQU5UWSBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiAKK1BVUlBPU0UgT1IgTk9OLUlORlJJTkdFTUVOVCBBUkUgRElTQ0xBSU1FRCwgRVhDRVBUIFRPIFRIRSBFWFRFTlQgVEhBVCBUSEVTRSAKK0RJU0NMQUlNRVJTIEFSRSBIRUxEIFRPIEJFIExFR0FMTFkgSU5WQUxJRC4gNS4gIExJTUlUQVRJT04gT0YgTElBQklMSVRZLiAgVE8gVEhFIAorRVhURU5UIE5PVCBQUk9ISUJJVEVEIEJZIExBVywgSU4gTk8gRVZFTlQgV0lMTCBTVU4gT1IgSVRTIExJQ0VOU09SUyBCRSBMSUFCTEUgCitGT1IgQU5ZIExPU1QgUkVWRU5VRSwgUFJPRklUIE9SIERBVEEsIE9SIEZPUiBTUEVDSUFMLCBJTkRJUkVDVCwgQ09OU0VRVUVOVElBTCwgCitJTkNJREVOVEFMIE9SIFBVTklUSVZFIERBTUFHRVMsIEhPV0VWRVIgQ0FVU0VEIFJFR0FSRExFU1MgT0YgVEhFIFRIRU9SWSBPRiAKK0xJQUJJTElUWSwgQVJJU0lORyBPVVQgT0YgT1IgUkVMQVRFRCBUTyBUSEUgVVNFIE9GIE9SIElOQUJJTElUWSBUTyBVU0UgU09GVFdBUkUsIAorRVZFTiBJRiBTVU4gSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiAgSW4gbm8gZXZlbnQgCit3aWxsIFN1bidzIGxpYWJpbGl0eSB0byB5b3UsIHdoZXRoZXIgaW4gY29udHJhY3QsIHRvcnQgKGluY2x1ZGluZyBuZWdsaWdlbmNlKSwgCitvciBvdGhlcndpc2UsIGV4Y2VlZCB0aGUgYW1vdW50IHBhaWQgYnkgeW91IGZvciBTb2Z0d2FyZSB1bmRlciB0aGlzIEFncmVlbWVudC4gIAorVGhlIGZvcmVnb2luZyBsaW1pdGF0aW9ucyB3aWxsIGFwcGx5IGV2ZW4gaWYgdGhlIGFib3ZlIHN0YXRlZCB3YXJyYW50eSBmYWlscyBvZiAKK2l0cyBlc3NlbnRpYWwgcHVycG9zZS4gNi4gIFRlcm1pbmF0aW9uLiAgVGhpcyBBZ3JlZW1lbnQgaXMgZWZmZWN0aXZlIHVudGlsIAordGVybWluYXRlZC4gIFlvdSBtYXkgdGVybWluYXRlIHRoaXMgQWdyZWVtZW50IGF0IGFueSB0aW1lIGJ5IGRlc3Ryb3lpbmcgYWxsIAorY29waWVzIG9mIFNvZnR3YXJlLiAgVGhpcyBBZ3JlZW1lbnQgd2lsbCB0ZXJtaW5hdGUgaW1tZWRpYXRlbHkgd2l0aG91dCBub3RpY2UgCitmcm9tIFN1biBpZiB5b3UgZmFpbCB0byBjb21wbHkgd2l0aCBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50LiAgVXBvbiAKK1Rlcm1pbmF0aW9uLCB5b3UgbXVzdCBkZXN0cm95IGFsbCBjb3BpZXMgb2YgU29mdHdhcmUuIDcuIEV4cG9ydCBSZWd1bGF0aW9ucy4gQWxsIAorU29mdHdhcmUgYW5kIHRlY2huaWNhbCBkYXRhIGRlbGl2ZXJlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUgc3ViamVjdCB0byBVUyAKK2V4cG9ydCBjb250cm9sIGxhd3MgYW5kIG1heSBiZSBzdWJqZWN0IHRvIGV4cG9ydCBvciBpbXBvcnQgcmVndWxhdGlvbnMgaW4gb3RoZXIgCitjb3VudHJpZXMuICBZb3UgYWdyZWUgdG8gY29tcGx5IHN0cmljdGx5IHdpdGggYWxsIHN1Y2ggbGF3cyBhbmQgcmVndWxhdGlvbnMgYW5kIAorYWNrbm93bGVkZ2UgdGhhdCB5b3UgaGF2ZSB0aGUgcmVzcG9uc2liaWxpdHkgdG8gb2J0YWluIHN1Y2ggbGljZW5zZXMgdG8gZXhwb3J0LCAKK3JlLWV4cG9ydCwgb3IgaW1wb3J0IGFzIG1heSBiZSByZXF1aXJlZCBhZnRlciBkZWxpdmVyeSB0byB5b3UuIDguICAgVS5TLiAKK0dvdmVybm1lbnQgUmVzdHJpY3RlZCBSaWdodHMuICBJZiBTb2Z0d2FyZSBpcyBiZWluZyBhY3F1aXJlZCBieSBvciBvbiBiZWhhbGYgb2YgCit0aGUgVS5TLiBHb3Zlcm5tZW50IG9yIGJ5IGEgVS5TLiBHb3Zlcm5tZW50IHByaW1lIGNvbnRyYWN0b3Igb3Igc3ViY29udHJhY3RvciAKKyhhdCBhbnkgdGllciksIHRoZW4gdGhlIEdvdmVybm1lbnQncyByaWdodHMgaW4gU29mdHdhcmUgYW5kIGFjY29tcGFueWluZyAKK2RvY3VtZW50YXRpb24gd2lsbCBiZSBvbmx5IGFzIHNldCBmb3J0aCBpbiB0aGlzIEFncmVlbWVudDsgdGhpcyBpcyBpbiBhY2NvcmRhbmNlIAord2l0aCA0OCBDRlIgMjI3LjcyMDEgdGhyb3VnaCAyMjcuNzIwMi00IChmb3IgRGVwYXJ0bWVudCBvZiBEZWZlbnNlIChET0QpIAorYWNxdWlzaXRpb25zKSBhbmQgd2l0aCA0OCBDRlIgMi4xMDEgYW5kIDEyLjIxMiAoZm9yIG5vbi1ET0QgYWNxdWlzaXRpb25zKS4gOS4gIAorR292ZXJuaW5nIExhdy4gIEFueSBhY3Rpb24gcmVsYXRlZCB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJlIGdvdmVybmVkIGJ5IAorQ2FsaWZvcm5pYSBsYXcgYW5kIGNvbnRyb2xsaW5nIFUuUy4gZmVkZXJhbCBsYXcuICBObyBjaG9pY2Ugb2YgbGF3IHJ1bGVzIG9mIGFueSAKK2p1cmlzZGljdGlvbiB3aWxsIGFwcGx5LiAxMC4gIFNldmVyYWJpbGl0eS4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCAKK2lzIGhlbGQgdG8gYmUgdW5lbmZvcmNlYWJsZSwgdGhpcyBBZ3JlZW1lbnQgd2lsbCByZW1haW4gaW4gZWZmZWN0IHdpdGggdGhlIAorcHJvdmlzaW9uIG9taXR0ZWQsIHVubGVzcyBvbWlzc2lvbiB3b3VsZCBmcnVzdHJhdGUgdGhlIGludGVudCBvZiB0aGUgcGFydGllcywgaW4gCit3aGljaCBjYXNlIHRoaXMgQWdyZWVtZW50IHdpbGwgaW1tZWRpYXRlbHkgdGVybWluYXRlLiAxMS4gIEludGVncmF0aW9uLiAgVGhpcyAKK0FncmVlbWVudCBpcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHlvdSBhbmQgU3VuIHJlbGF0aW5nIHRvIGl0cyBzdWJqZWN0CittYXR0ZXIuICBJdCBzdXBlcnNlZGVzIGFsbCBwcmlvciBvciBjb250ZW1wb3JhbmVvdXMgb3JhbCBvciB3cml0dGVuIAorY29tbXVuaWNhdGlvbnMsIHByb3Bvc2FscywgcmVwcmVzZW50YXRpb25zIGFuZCB3YXJyYW50aWVzIGFuZCBwcmV2YWlscyBvdmVyIGFueSAKK2NvbmZsaWN0aW5nIG9yIGFkZGl0aW9uYWwgdGVybXMgb2YgYW55IHF1b3RlLCBvcmRlciwgYWNrbm93bGVkZ21lbnQsIG9yIG90aGVyIAorY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHJlbGF0aW5nIHRvIGl0cyBzdWJqZWN0IG1hdHRlciBkdXJpbmcgdGhlIHRlcm0gCitvZiB0aGlzIEFncmVlbWVudC4gIE5vIG1vZGlmaWNhdGlvbiBvZiB0aGlzIEFncmVlbWVudCB3aWxsIGJlIGJpbmRpbmcsIHVubGVzcyBpbiAKK3dyaXRpbmcgYW5kIHNpZ25lZCBieSBhbiBhdXRob3JpemVkIHJlcHJlc2VudGF0aXZlIG9mIGVhY2ggcGFydHkuIEpBVkFUTSAKK0lOVEVSRkFDRSBDTEFTU0VTIEpBVkEgVFJBTlNBQ1RJT04gQVBJIChKVEEpLCBWRVJTSU9OIDEuMC4xQiwgTUFJTlRFTkFOQ0UgCitSRUxFQVNFU1VQUExFTUVOVEFMIExJQ0VOU0UgVEVSTVMgVGhlc2Ugc3VwcGxlbWVudGFsIGxpY2Vuc2UgdGVybXMgCisoIlN1cHBsZW1lbnRhbCBUZXJtcyIpIGFkZCB0byBvciBtb2RpZnkgdGhlIHRlcm1zIG9mIHRoZSBCaW5hcnkgQ29kZSBMaWNlbnNlIAorQWdyZWVtZW50IChjb2xsZWN0aXZlbHksIHRoZSAiQWdyZWVtZW50IikuIENhcGl0YWxpemVkIHRlcm1zIG5vdCBkZWZpbmVkIGluIAordGhlc2UgU3VwcGxlbWVudGFsIFRlcm1zIHNoYWxsIGhhdmUgdGhlIHNhbWUgbWVhbmluZ3MgYXNjcmliZWQgdG8gdGhlbSBpbiB0aGUgCitBZ3JlZW1lbnQuIFRoZXNlIFN1cHBsZW1lbnRhbCBUZXJtcyBzaGFsbCBzdXBlcnNlZGUgYW55IGluY29uc2lzdGVudCBvciAKK2NvbmZsaWN0aW5nIHRlcm1zIGluIHRoZSBBZ3JlZW1lbnQsIG9yIGluIGFueSBsaWNlbnNlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIAorU29mdHdhcmUuIDEuIFNvZnR3YXJlIEludGVybmFsIFVzZSBhbmQgRGV2ZWxvcG1lbnQgTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgCit0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8gU2VjdGlvbiAzIAorKEphdmEgVGVjaG5vbG9neSBSZXN0cmljdGlvbnMpIG9mIHRoZXNlIFN1cHBsZW1lbnRhbCBUZXJtcywgU3VuIGdyYW50cyB5b3UgYSAKK25vbi1leGNsdXNpdmUsIG5vbi10cmFuc2ZlcmFibGUsIGxpbWl0ZWQgbGljZW5zZSB0byByZXByb2R1Y2UgaW50ZXJuYWxseSBhbmQgdXNlIAoraW50ZXJuYWxseSB0aGUgYmluYXJ5IGZvcm0gb2YgdGhlIFNvZnR3YXJlLCBjb21wbGV0ZSBhbmQgdW5tb2RpZmllZCwgZm9yIHRoZSAKK3NvbGUgcHVycG9zZSBvZiBkZXNpZ25pbmcsIGRldmVsb3BpbmcgYW5kIHRlc3RpbmcgeW91ciBKYXZhIGFwcGxldHMgYW5kIAorYXBwbGljYXRpb25zICgiUHJvZ3JhbXMiKS4gMi4gTGljZW5zZSB0byBEaXN0cmlidXRlIFNvZnR3YXJlLiAgSW4gYWRkaXRpb24gdG8gCit0aGUgbGljZW5zZSBncmFudGVkIGluIFNlY3Rpb24gMSAoU29mdHdhcmUgSW50ZXJuYWwgVXNlIGFuZCBEZXZlbG9wbWVudCBMaWNlbnNlIAorR3JhbnQpIG9mIHRoZXNlIFN1cHBsZW1lbnRhbCBUZXJtcywgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyAKK0FncmVlbWVudCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBTZWN0aW9uIDMgKEphdmEgVGVjaG5vbG9neSAKK1Jlc3RyaWN0aW9ucyksIFN1biBncmFudHMgeW91IGEgbm9uLWV4Y2x1c2l2ZSwgbm9uLXRyYW5zZmVyYWJsZSwgbGltaXRlZCBsaWNlbnNlIAordG8gcmVwcm9kdWNlIGFuZCBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBpbiBiaW5hcnkgZm9ybSBvbmx5LCBwcm92aWRlZCB0aGF0IHlvdSAKKyhpKSBkaXN0cmlidXRlIHRoZSBTb2Z0d2FyZSBjb21wbGV0ZSBhbmQgdW5tb2RpZmllZCBhbmQgb25seSBidW5kbGVkIGFzIHBhcnQgb2YgCit5b3VyIFByb2dyYW1zLCAoaWkpIGRvIG5vdCBkaXN0cmlidXRlIGFkZGl0aW9uYWwgc29mdHdhcmUgaW50ZW5kZWQgdG8gcmVwbGFjZSAKK2FueSBjb21wb25lbnQocykgb2YgdGhlIFNvZnR3YXJlLCAoaWlpKSBkbyBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueSBwcm9wcmlldGFyeSAKK2xlZ2VuZHMgb3Igbm90aWNlcyBjb250YWluZWQgaW4gdGhlIFNvZnR3YXJlLCAoaXYpIG9ubHkgZGlzdHJpYnV0ZSB0aGUgU29mdHdhcmUgCitzdWJqZWN0IHRvIGEgbGljZW5zZSBhZ3JlZW1lbnQgdGhhdCBwcm90ZWN0cyBTdW4ncyBpbnRlcmVzdHMgY29uc2lzdGVudCB3aXRoIHRoZSAKK3Rlcm1zIGNvbnRhaW5lZCBpbiB0aGlzIEFncmVlbWVudCwgYW5kICh2KSBhZ3JlZSB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBTdW4gYW5kIAoraXRzIGxpY2Vuc29ycyBmcm9tIGFuZCBhZ2FpbnN0IGFueSBkYW1hZ2VzLCBjb3N0cywgbGlhYmlsaXRpZXMsIHNldHRsZW1lbnQgCithbW91bnRzIGFuZC9vciBleHBlbnNlcyAoaW5jbHVkaW5nIGF0dG9ybmV5cycgZmVlcykgaW5jdXJyZWQgaW4gY29ubmVjdGlvbiB3aXRoIAorYW55IGNsYWltLCBsYXdzdWl0IG9yIGFjdGlvbiBieSBhbnkgdGhpcmQgcGFydHkgdGhhdCBhcmlzZXMgb3IgcmVzdWx0cyBmcm9tIHRoZSAKK3VzZSBvciBkaXN0cmlidXRpb24gb2YgYW55IGFuZCBhbGwgUHJvZ3JhbXMgYW5kL29yIFNvZnR3YXJlLiAzLiBKYXZhIFRlY2hub2xvZ3kgCitSZXN0cmljdGlvbnMuIFlvdSBtYXkgbm90IG1vZGlmeSB0aGUgSmF2YSBQbGF0Zm9ybSBJbnRlcmZhY2UgKCJKUEkiLCBpZGVudGlmaWVkIAorYXMgY2xhc3NlcyBjb250YWluZWQgd2l0aGluIHRoZSAiamF2YSIgcGFja2FnZSBvciBhbnkgc3VicGFja2FnZXMgb2YgdGhlICJqYXZhIiAKK3BhY2thZ2UpLCBieSBjcmVhdGluZyBhZGRpdGlvbmFsIGNsYXNzZXMgd2l0aGluIHRoZSBKUEkgb3Igb3RoZXJ3aXNlIGNhdXNpbmcgdGhlIAorYWRkaXRpb24gdG8gb3IgbW9kaWZpY2F0aW9uIG9mIHRoZSBjbGFzc2VzIGluIHRoZSBKUEkuICBJbiB0aGUgZXZlbnQgdGhhdCB5b3UgCitjcmVhdGUgYW4gYWRkaXRpb25hbCBjbGFzcyBhbmQgYXNzb2NpYXRlZCBBUEkocykgd2hpY2ggKGkpIGV4dGVuZHMgdGhlIAorZnVuY3Rpb25hbGl0eSBvZiB0aGUgSmF2YSBQbGF0Zm9ybSwgYW5kIChpaSkgaXMgZXhwb3NlZCB0byB0aGlyZCBwYXJ0eSBzb2Z0d2FyZSAKK2RldmVsb3BlcnMgZm9yIHRoZSBwdXJwb3NlIG9mIGRldmVsb3BpbmcgYWRkaXRpb25hbCBzb2Z0d2FyZSB3aGljaCBpbnZva2VzIHN1Y2ggCithZGRpdGlvbmFsIEFQSSwgeW91IG11c3QgcHJvbXB0bHkgcHVibGlzaCBicm9hZGx5IGFuIGFjY3VyYXRlIHNwZWNpZmljYXRpb24gZm9yIAorc3VjaCBBUEkgZm9yIGZyZWUgdXNlIGJ5IGFsbCBkZXZlbG9wZXJzLiBZb3UgbWF5IG5vdCBjcmVhdGUsIG9yIGF1dGhvcml6ZSB5b3VyIAorbGljZW5zZWVzIHRvIGNyZWF0ZSBhZGRpdGlvbmFsIGNsYXNzZXMsIGludGVyZmFjZXMsIG9yIHN1YnBhY2thZ2VzIHRoYXQgYXJlIGluIAorYW55IHdheSBpZGVudGlmaWVkIGFzICJqYXZhIiwgImphdmF4IiwgInN1biIgb3Igc2ltaWxhciBjb252ZW50aW9uIGFzIHNwZWNpZmllZCAKK2J5IFN1biBpbiBhbnkgbmFtaW5nIGNvbnZlbnRpb24gZGVzaWduYXRpb24uIDQuIFRyYWRlbWFya3MgYW5kIExvZ29zLiBZb3UgCithY2tub3dsZWRnZSBhbmQgYWdyZWUgYXMgYmV0d2VlbiB5b3UgYW5kIFN1biB0aGF0IFN1biBvd25zIHRoZSBTVU4sIFNPTEFSSVMsIAorSkFWQSwgSklOSSwgRk9SVEUsIGFuZCBpUExBTkVUIHRyYWRlbWFya3MgYW5kIGFsbCBTVU4sIFNPTEFSSVMsIEpBVkEsIEpJTkksIAorRk9SVEUsIGFuZCBpUExBTkVULXJlbGF0ZWQgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgbG9nb3MgYW5kIG90aGVyIGJyYW5kIAorZGVzaWduYXRpb25zICgiU3VuIE1hcmtzIiksIGFuZCB5b3UgYWdyZWUgdG8gY29tcGx5IHdpdGggdGhlIFN1biBUcmFkZW1hcmsgYW5kIAorTG9nbyBVc2FnZSBSZXF1aXJlbWVudHMgY3VycmVudGx5IGxvY2F0ZWQgYXQgCitodHRwOi8vd3d3LnN1bi5jb20vcG9saWNpZXMvdHJhZGVtYXJrcy4gQW55IHVzZSB5b3UgbWFrZSBvZiB0aGUgU3VuIE1hcmtzIGludXJlcyAKK3RvIFN1bidzIGJlbmVmaXQuIDUuIFNvdXJjZSBDb2RlLiBTb2Z0d2FyZSBtYXkgY29udGFpbiBzb3VyY2UgY29kZSB0aGF0IGlzIAorcHJvdmlkZWQgc29sZWx5IGZvciByZWZlcmVuY2UgcHVycG9zZXMgcHVyc3VhbnQgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LiAgCitTb3VyY2UgY29kZSBtYXkgbm90IGJlIHJlZGlzdHJpYnV0ZWQgdW5sZXNzIGV4cHJlc3NseSBwcm92aWRlZCBmb3IgaW4gdGhpcyAKK0FncmVlbWVudC4gNi4gVGVybWluYXRpb24gZm9yIEluZnJpbmdlbWVudC4gIEVpdGhlciBwYXJ0eSBtYXkgdGVybWluYXRlIHRoaXMgCitBZ3JlZW1lbnQgaW1tZWRpYXRlbHkgc2hvdWxkIGFueSBTb2Z0d2FyZSBiZWNvbWUsIG9yIGluIGVpdGhlciBwYXJ0eSdzIG9waW5pb24gCitiZSBsaWtlbHkgdG8gYmVjb21lLCB0aGUgc3ViamVjdCBvZiBhIGNsYWltIG9mIGluZnJpbmdlbWVudCBvZiBhbnkgaW50ZWxsZWN0dWFsIAorcHJvcGVydHkgcmlnaHQuIEZvciBpbnF1aXJpZXMgcGxlYXNlIGNvbnRhY3Q6IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gNDE1MCAKK05ldHdvcmsgQ2lyY2xlLCBTYW50YSBDbGFyYSwgQ2FsaWZvcm5pYSA5NTA1NC4gKExGSSMxMjEwNDkvRm9ybSBJRCMwMTE4MDEpClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvc3VuLWJjbGEtanZtc3RhdCBiL2xpY2Vuc2VzL3N1bi1iY2xhLWp2bXN0YXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUwOTc3NQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL3N1bi1iY2xhLWp2bXN0YXQKQEAgLTAsMCArMSwxNzEgQEAKK1N1biBNaWNyb3N5c3RlbXMsIEluYy4KK0JpbmFyeSBDb2RlIExpY2Vuc2UgQWdyZWVtZW50CisKK1JFQUQgVEhFIFRFUk1TIE9GIFRISVMgQUdSRUVNRU5UIEFORCBBTlkgUFJPVklERUQgU1VQUExFTUVOVEFMIExJQ0VOU0UKK1RFUk1TIChDT0xMRUNUSVZFTFkgIkFHUkVFTUVOVCIpIENBUkVGVUxMWSBCRUZPUkUgT1BFTklORyBUSEUgU09GVFdBUkUKK01FRElBIFBBQ0tBR0UuICBCWSBPUEVOSU5HIFRIRSBTT0ZUV0FSRSBNRURJQSBQQUNLQUdFLCBZT1UgQUdSRUUgVE8KK1RIRSBURVJNUyBPRiBUSElTIEFHUkVFTUVOVC4gIElGIFlPVSBBUkUgQUNDRVNTSU5HIFRIRSBTT0ZUV0FSRQorRUxFQ1RST05JQ0FMTFksIElORElDQVRFIFlPVVIgQUNDRVBUQU5DRSBPRiBUSEVTRSBURVJNUyBCWSBTRUxFQ1RJTkcKK1RIRSAiQUNDRVBUIiBCVVRUT04gQVQgVEhFIEVORCBPRiBUSElTIEFHUkVFTUVOVC4gIElGIFlPVSBETyBOT1QgQUdSRUUKK1RPIEFMTCBUSEVTRSBURVJNUywgUFJPTVBUTFkgUkVUVVJOIFRIRSBVTlVTRUQgU09GVFdBUkUgVE8gWU9VUiBQTEFDRQorT0YgUFVSQ0hBU0UgRk9SIEEgUkVGVU5EIE9SLCBJRiBUSEUgU09GVFdBUkUgSVMgQUNDRVNTRUQKK0VMRUNUUk9OSUNBTExZLCBTRUxFQ1QgVEhFICJERUNMSU5FIiBCVVRUT04gQVQgVEhFIEVORCBPRiBUSElTCitBR1JFRU1FTlQuCisKKzEuICBMSUNFTlNFIFRPIFVTRS4KKyAgU3VuIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlIGFuZCBub24tdHJhbnNmZXJhYmxlIGxpY2Vuc2UgZm9yIHRoZQorICBpbnRlcm5hbCB1c2Ugb25seSBvZiB0aGUgYWNjb21wYW55aW5nIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIGFuZAorICBhbnkgZXJyb3IgY29ycmVjdGlvbnMgcHJvdmlkZWQgYnkgU3VuIChjb2xsZWN0aXZlbHkgIlNvZnR3YXJlIiksIGJ5CisgIHRoZSBudW1iZXIgb2YgdXNlcnMgYW5kIHRoZSBjbGFzcyBvZiBjb21wdXRlciBoYXJkd2FyZSBmb3Igd2hpY2ggdGhlCisgIGNvcnJlc3BvbmRpbmcgZmVlIGhhcyBiZWVuIHBhaWQuCisKKzIuICBSRVNUUklDVElPTlMuCisgIFNvZnR3YXJlIGlzIGNvbmZpZGVudGlhbCBhbmQgY29weXJpZ2h0ZWQuIFRpdGxlIHRvIFNvZnR3YXJlIGFuZCBhbGwKKyAgYXNzb2NpYXRlZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGlzIHJldGFpbmVkIGJ5IFN1biBhbmQvb3IKKyAgaXRzIGxpY2Vuc29ycy4gIEV4Y2VwdCBhcyBzcGVjaWZpY2FsbHkgYXV0aG9yaXplZCBpbiBhbnkKKyAgU3VwcGxlbWVudGFsIExpY2Vuc2UgVGVybXMsIHlvdSBtYXkgbm90IG1ha2UgY29waWVzIG9mIFNvZnR3YXJlLAorICBvdGhlciB0aGFuIGEgc2luZ2xlIGNvcHkgb2YgU29mdHdhcmUgZm9yIGFyY2hpdmFsIHB1cnBvc2VzLiAgVW5sZXNzCisgIGVuZm9yY2VtZW50IGlzIHByb2hpYml0ZWQgYnkgYXBwbGljYWJsZSBsYXcsIHlvdSBtYXkgbm90IG1vZGlmeSwKKyAgZGVjb21waWxlLCBvciByZXZlcnNlIGVuZ2luZWVyIFNvZnR3YXJlLiAgTGljZW5zZWUgYWNrbm93bGVkZ2VzIHRoYXQKKyAgU29mdHdhcmUgaXMgbm90IGRlc2lnbmVkIG9yIGludGVuZGVkIGZvciB1c2UgaW4gdGhlIGRlc2lnbiwKKyAgY29uc3RydWN0aW9uLCBvcGVyYXRpb24gb3IgbWFpbnRlbmFuY2Ugb2YgYW55IG51Y2xlYXIgZmFjaWxpdHkuIFN1bgorICBNaWNyb3N5c3RlbXMsIEluYy4gZGlzY2xhaW1zIGFueSBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkgb2YKKyAgZml0bmVzcyBmb3Igc3VjaCB1c2VzLiAgIE5vIHJpZ2h0LCB0aXRsZSBvciBpbnRlcmVzdCBpbiBvciB0byBhbnkKKyAgdHJhZGVtYXJrLCBzZXJ2aWNlIG1hcmssIGxvZ28gb3IgdHJhZGUgbmFtZSBvZiBTdW4gb3IgaXRzIGxpY2Vuc29ycworICBpcyBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LgorCiszLiAgTElNSVRFRCBXQVJSQU5UWS4KKyAgU3VuIHdhcnJhbnRzIHRvIHlvdSB0aGF0IGZvciBhIHBlcmlvZCBvZiBuaW5ldHkgKDkwKSBkYXlzIGZyb20gdGhlCisgIGRhdGUgb2YgcHVyY2hhc2UsIGFzIGV2aWRlbmNlZCBieSBhIGNvcHkgb2YgdGhlIHJlY2VpcHQsIHRoZSBtZWRpYSBvbgorICB3aGljaCBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgKGlmIGFueSkgd2lsbCBiZSBmcmVlIG9mIGRlZmVjdHMgaW4KKyAgbWF0ZXJpYWxzIGFuZCB3b3JrbWFuc2hpcCB1bmRlciBub3JtYWwgdXNlLiAgRXhjZXB0IGZvciB0aGUgZm9yZWdvaW5nLAorICBTb2Z0d2FyZSBpcyBwcm92aWRlZCAiQVMgSVMiLiAgWW91ciBleGNsdXNpdmUgcmVtZWR5IGFuZCBTdW4ncyBlbnRpcmUKKyAgbGlhYmlsaXR5IHVuZGVyIHRoaXMgbGltaXRlZCB3YXJyYW50eSB3aWxsIGJlIGF0IFN1bidzIG9wdGlvbiB0bworICByZXBsYWNlIFNvZnR3YXJlIG1lZGlhIG9yIHJlZnVuZCB0aGUgZmVlIHBhaWQgZm9yIFNvZnR3YXJlLgorCis0LiAgRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS4KKyAgVU5MRVNTIFNQRUNJRklFRCBJTiBUSElTIEFHUkVFTUVOVCwgQUxMIEVYUFJFU1MgT1IgSU1QTElFRCBDT05ESVRJT05TLAorICBSRVBSRVNFTlRBVElPTlMgQU5EIFdBUlJBTlRJRVMsIElOQ0xVRElORyBBTlkgSU1QTElFRCBXQVJSQU5UWSBPRgorICBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SCisgIE5PTi1JTkZSSU5HRU1FTlQgQVJFIERJU0NMQUlNRUQsIEVYQ0VQVCBUTyBUSEUgRVhURU5UIFRIQVQgVEhFU0UKKyAgRElTQ0xBSU1FUlMgQVJFIEhFTEQgVE8gQkUgTEVHQUxMWSBJTlZBTElELgorCis1LiAgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuCisgIFRPIFRIRSBFWFRFTlQgTk9UIFBST0hJQklURUQgQlkgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIFNVTiBPUiBJVFMKKyAgTElDRU5TT1JTIEJFIExJQUJMRSBGT1IgQU5ZIExPU1QgUkVWRU5VRSwgUFJPRklUIE9SIERBVEEsIE9SIEZPUgorICBTUEVDSUFMLCBJTkRJUkVDVCwgQ09OU0VRVUVOVElBTCwgSU5DSURFTlRBTCBPUiBQVU5JVElWRSBEQU1BR0VTLAorICBIT1dFVkVSIENBVVNFRCBSRUdBUkRMRVNTIE9GIFRIRSBUSEVPUlkgT0YgTElBQklMSVRZLCBBUklTSU5HIE9VVCBPRgorICBPUiBSRUxBVEVEIFRPIFRIRSBVU0UgT0YgT1IgSU5BQklMSVRZIFRPIFVTRSBTT0ZUV0FSRSwgRVZFTiBJRiBTVU4KKyAgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiAgSW4gbm8gZXZlbnQKKyAgd2lsbCBTdW4ncyBsaWFiaWxpdHkgdG8geW91LCB3aGV0aGVyIGluIGNvbnRyYWN0LCB0b3J0IChpbmNsdWRpbmcKKyAgbmVnbGlnZW5jZSksIG9yIG90aGVyd2lzZSwgZXhjZWVkIHRoZSBhbW91bnQgcGFpZCBieSB5b3UgZm9yCisgIFNvZnR3YXJlIHVuZGVyIHRoaXMgQWdyZWVtZW50LiAgVGhlIGZvcmVnb2luZyBsaW1pdGF0aW9ucyB3aWxsIGFwcGx5CisgIGV2ZW4gaWYgdGhlIGFib3ZlIHN0YXRlZCB3YXJyYW50eSBmYWlscyBvZiBpdHMgZXNzZW50aWFsIHB1cnBvc2UuCisKKzYuICBUZXJtaW5hdGlvbi4KKyAgVGhpcyBBZ3JlZW1lbnQgaXMgZWZmZWN0aXZlIHVudGlsIHRlcm1pbmF0ZWQuICBZb3UgbWF5IHRlcm1pbmF0ZSB0aGlzCisgIEFncmVlbWVudCBhdCBhbnkgdGltZSBieSBkZXN0cm95aW5nIGFsbCBjb3BpZXMgb2YgU29mdHdhcmUuICBUaGlzCisgIEFncmVlbWVudCB3aWxsIHRlcm1pbmF0ZSBpbW1lZGlhdGVseSB3aXRob3V0IG5vdGljZSBmcm9tIFN1biBpZiB5b3UKKyAgZmFpbCB0byBjb21wbHkgd2l0aCBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50LiAgVXBvbgorICBUZXJtaW5hdGlvbiwgeW91IG11c3QgZGVzdHJveSBhbGwgY29waWVzIG9mIFNvZnR3YXJlLgorCis3LiAgRXhwb3J0IFJlZ3VsYXRpb25zLgorICBBbGwgU29mdHdhcmUgYW5kIHRlY2huaWNhbCBkYXRhIGRlbGl2ZXJlZCB1bmRlciB0aGlzIEFncmVlbWVudCBhcmUKKyAgc3ViamVjdCB0byBVUyBleHBvcnQgY29udHJvbCBsYXdzIGFuZCBtYXkgYmUgc3ViamVjdCB0byBleHBvcnQgb3IKKyAgaW1wb3J0IHJlZ3VsYXRpb25zIGluIG90aGVyIGNvdW50cmllcy4gIFlvdSBhZ3JlZSB0byBjb21wbHkgc3RyaWN0bHkKKyAgd2l0aCBhbGwgc3VjaCBsYXdzIGFuZCByZWd1bGF0aW9ucyBhbmQgYWNrbm93bGVkZ2UgdGhhdCB5b3UgaGF2ZSB0aGUKKyAgcmVzcG9uc2liaWxpdHkgdG8gb2J0YWluIHN1Y2ggbGljZW5zZXMgdG8gZXhwb3J0LCByZS1leHBvcnQsIG9yCisgIGltcG9ydCBhcyBtYXkgYmUgcmVxdWlyZWQgYWZ0ZXIgZGVsaXZlcnkgdG8geW91LgorCis4LiAgVS5TLiBHb3Zlcm5tZW50IFJlc3RyaWN0ZWQgUmlnaHRzLgorICBJZiBTb2Z0d2FyZSBpcyBiZWluZyBhY3F1aXJlZCBieSBvciBvbiBiZWhhbGYgb2YgdGhlIFUuUy4gR292ZXJubWVudAorICBvciBieSBhIFUuUy4gR292ZXJubWVudCBwcmltZSBjb250cmFjdG9yIG9yIHN1YmNvbnRyYWN0b3IgKGF0IGFueQorICB0aWVyKSwgdGhlbiB0aGUgR292ZXJubWVudCdzIHJpZ2h0cyBpbiBTb2Z0d2FyZSBhbmQgYWNjb21wYW55aW5nCisgIGRvY3VtZW50YXRpb24gd2lsbCBiZSBvbmx5IGFzIHNldCBmb3J0aCBpbiB0aGlzIEFncmVlbWVudDsgdGhpcyBpcworICBpbiBhY2NvcmRhbmNlIHdpdGggNDggQ0ZSIDIyNy43MjAxIHRocm91Z2ggMjI3LjcyMDItNCAoZm9yCisgIERlcGFydG1lbnQgb2YgRGVmZW5zZSAoRE9EKSBhY3F1aXNpdGlvbnMpIGFuZCB3aXRoIDQ4IENGUiAyLjEwMSBhbmQKKyAgMTIuMjEyIChmb3Igbm9uLURPRCBhY3F1aXNpdGlvbnMpLgorCis5LiAgR292ZXJuaW5nIExhdy4KKyAgQW55IGFjdGlvbiByZWxhdGVkIHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYmUgZ292ZXJuZWQgYnkgQ2FsaWZvcm5pYQorICBsYXcgYW5kIGNvbnRyb2xsaW5nIFUuUy4gZmVkZXJhbCBsYXcuICBObyBjaG9pY2Ugb2YgbGF3IHJ1bGVzIG9mIGFueQorICBqdXJpc2RpY3Rpb24gd2lsbCBhcHBseS4KKworMTAuIFNldmVyYWJpbGl0eS4KKyAgSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHRoaXMKKyAgQWdyZWVtZW50IHdpbGwgcmVtYWluIGluIGVmZmVjdCB3aXRoIHRoZSBwcm92aXNpb24gb21pdHRlZCwgdW5sZXNzCisgIG9taXNzaW9uIHdvdWxkIGZydXN0cmF0ZSB0aGUgaW50ZW50IG9mIHRoZSBwYXJ0aWVzLCBpbiB3aGljaCBjYXNlCisgIHRoaXMgQWdyZWVtZW50IHdpbGwgaW1tZWRpYXRlbHkgdGVybWluYXRlLgorCisxMS4gSW50ZWdyYXRpb24uCisgIFRoaXMgQWdyZWVtZW50IGlzIHRoZSBlbnRpcmUgYWdyZWVtZW50IGJldHdlZW4geW91CisgIGFuZCBTdW4gcmVsYXRpbmcgdG8gaXRzIHN1YmplY3QgbWF0dGVyLiAgSXQgc3VwZXJzZWRlcyBhbGwgcHJpb3IKKyAgb3IgY29udGVtcG9yYW5lb3VzIG9yYWwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9ucywgcHJvcG9zYWxzLAorICByZXByZXNlbnRhdGlvbnMgYW5kIHdhcnJhbnRpZXMgYW5kIHByZXZhaWxzIG92ZXIgYW55IGNvbmZsaWN0aW5nCisgIG9yIGFkZGl0aW9uYWwgdGVybXMgb2YgYW55IHF1b3RlLCBvcmRlciwgYWNrbm93bGVkZ21lbnQsIG9yIG90aGVyCisgIGNvbW11bmljYXRpb24gYmV0d2VlbiB0aGUgcGFydGllcyByZWxhdGluZyB0byBpdHMgc3ViamVjdCBtYXR0ZXIKKyAgZHVyaW5nIHRoZSB0ZXJtIG9mIHRoaXMgQWdyZWVtZW50LiAgTm8gbW9kaWZpY2F0aW9uIG9mIHRoaXMKKyAgQWdyZWVtZW50IHdpbGwgYmUgYmluZGluZywgdW5sZXNzIGluIHdyaXRpbmcgYW5kIHNpZ25lZCBieSBhbgorICBhdXRob3JpemVkIHJlcHJlc2VudGF0aXZlIG9mIGVhY2ggcGFydHkuCisKK0ZvciBpbnF1aXJpZXMgcGxlYXNlIGNvbnRhY3Q6CitTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCis0MTUwIE5ldHdvcmsgQ2lyY2xlCitTYW50YSBDbGFyYSwgQ2FsaWZvcm5pYSA5NTA1NC4KKworCitERVZFTE9QTUVOVCBUT09MUworCitKVk1TVEFUIDMuMAorCitTVVBQTEVNRU5UQUwgTElDRU5TRSBURVJNUworCitUaGVzZSBzdXBwbGVtZW50YWwgbGljZW5zZSB0ZXJtcyAoIlN1cHBsZW1lbnRhbCBUZXJtcyIpIGFkZCB0byBvcgorbW9kaWZ5IHRoZSB0ZXJtcyBvZiB0aGUgQmluYXJ5IENvZGUgTGljZW5zZSBBZ3JlZW1lbnQgKGNvbGxlY3RpdmVseSwKK3RoZSAiQWdyZWVtZW50IikuIENhcGl0YWxpemVkIHRlcm1zIG5vdCBkZWZpbmVkIGluIHRoZXNlIFN1cHBsZW1lbnRhbAorVGVybXMgc2hhbGwgaGF2ZSB0aGUgc2FtZSBtZWFuaW5ncyBhc2NyaWJlZCB0byB0aGVtIGluIHRoZQorQWdyZWVtZW50LiBUaGVzZSBTdXBwbGVtZW50YWwgVGVybXMgc2hhbGwgc3VwZXJzZWRlIGFueSBpbmNvbnNpc3RlbnQKK29yIGNvbmZsaWN0aW5nIHRlcm1zIGluIHRoZSBCaW5hcnkgQ29kZSBMaWNlbnNlIEFncmVlbWVudCwgb3IgaW4gYW55CitsaWNlbnNlIGNvbnRhaW5lZCB3aXRoaW4gdGhlIFNvZnR3YXJlLgorCitBLiBTb2Z0d2FyZSBJbnRlcm5hbCBVc2UgYW5kIERldmVsb3BtZW50IExpY2Vuc2UgR3JhbnQuCisgIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgQWdyZWVtZW50LCBpbmNsdWRpbmcsCisgIGJ1dCBub3QgbGltaXRlZCB0byBTZWN0aW9uIEIgKEphdmEgVGVjaG5vbG9neSBSZXN0cmljdGlvbnMpIG9mIHRoZXNlCisgIFN1cHBsZW1lbnRhbCBUZXJtcywgU3VuIGdyYW50cyB5b3UgYSBub24tZXhjbHVzaXZlLCBub24tdHJhbnNmZXJhYmxlLAorICBsaW1pdGVkIGxpY2Vuc2UgdG8gcmVwcm9kdWNlIGludGVybmFsbHkgYW5kIHVzZSBpbnRlcm5hbGx5IHRoZSBiaW5hcnkKKyAgZm9ybSBvZiB0aGUgU29mdHdhcmUgY29tcGxldGUgYW5kIHVubW9kaWZpZWQgZm9yIHRoZSBzb2xlIHB1cnBvc2Ugb2YKKyAgZGVzaWduaW5nLCBkZXZlbG9waW5nIGFuZCB0ZXN0aW5nIHlvdXIgSmF2YSBhcHBsZXRzIGFuZCBhcHBsaWNhdGlvbnMKKyAgaW50ZW5kZWQgdG8gcnVuIG9uIHRoZSBKYXZhIHBsYXRmb3JtICgiUHJvZ3JhbXMiKS4KKworQi4gSmF2YSBUZWNobm9sb2d5IFJlc3RyaWN0aW9ucy4KKyAgWW91IG1heSBub3QgY3JlYXRlLCBtb2RpZnksIG9yIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YsIG9yIGF1dGhvcml6ZSB5b3VyCisgIGxpY2Vuc2VlcyB0byBjcmVhdGUsIG1vZGlmeSwgb3IgY2hhbmdlIHRoZSBiZWhhdmlvciBvZiwgY2xhc3NlcywKKyAgaW50ZXJmYWNlcywgb3Igc3VicGFja2FnZXMgdGhhdCBhcmUgaW4gYW55IHdheSBpZGVudGlmaWVkIGFzICJqYXZhIiwKKyAgImphdmF4IiwgInN1biIgb3Igc2ltaWxhciBjb252ZW50aW9uIGFzIHNwZWNpZmllZCBieSBTdW4gaW4gYW55IG5hbWluZworICBjb252ZW50aW9uIGRlc2lnbmF0aW9uLgorCitDLiBUcmFkZW1hcmtzIGFuZCBMb2dvcy4KKyAgWW91IGFja25vd2xlZGdlIGFuZCBhZ3JlZSBhcyBiZXR3ZWVuIHlvdSBhbmQgU3VuIHRoYXQgU3VuIG93bnMgdGhlCisgIFNVTiwgU09MQVJJUywgSkFWQSwgSklOSSwgRk9SVEUsIGFuZCBpUExBTkVUIHRyYWRlbWFya3MgYW5kIGFsbCBTVU4sCisgIFNPTEFSSVMsIEpBVkEsIEpJTkksIEZPUlRFLCBhbmQgaVBMQU5FVC1yZWxhdGVkIHRyYWRlbWFya3MsIHNlcnZpY2UKKyAgbWFya3MsIGxvZ29zIGFuZCBvdGhlciBicmFuZCBkZXNpZ25hdGlvbnMgKCJTdW4gTWFya3MiKSwgYW5kIHlvdSBhZ3JlZQorICB0byBjb21wbHkgd2l0aCB0aGUgU3VuIFRyYWRlbWFyayBhbmQgTG9nbyBVc2FnZSBSZXF1aXJlbWVudHMgY3VycmVudGx5CisgIGxvY2F0ZWQgYXQgaHR0cDovL3d3dy5zdW4uY29tL3BvbGljaWVzL3RyYWRlbWFya3MuIEFueSB1c2UgeW91IG1ha2Ugb2YKKyAgdGhlIFN1biBNYXJrcyBpbnVyZXMgdG8gU3VuJ3MgYmVuZWZpdC4KKworRC4gU291cmNlIENvZGUuCisgIFNvZnR3YXJlIG1heSBjb250YWluIHNvdXJjZSBjb2RlIHRoYXQgaXMgcHJvdmlkZWQgc29sZWx5IGZvciByZWZlcmVuY2UKKyAgcHVycG9zZXMgcHVyc3VhbnQgdG8gdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LiAgU291cmNlIGNvZGUgbWF5IG5vdAorICBiZSByZWRpc3RyaWJ1dGVkIHVubGVzcyBleHByZXNzbHkgcHJvdmlkZWQgZm9yIGluIHRoaXMgQWdyZWVtZW50LgorCitFLiBUZXJtaW5hdGlvbiBmb3IgSW5mcmluZ2VtZW50LgorICBFaXRoZXIgcGFydHkgbWF5IHRlcm1pbmF0ZSB0aGlzIEFncmVlbWVudCBpbW1lZGlhdGVseSBzaG91bGQgYW55CisgIFNvZnR3YXJlIGJlY29tZSwgb3IgaW4gZWl0aGVyIHBhcnR5J3Mgb3BpbmlvbiBiZSBsaWtlbHkgdG8gYmVjb21lLCB0aGUKKyAgc3ViamVjdCBvZiBhIGNsYWltIG9mIGluZnJpbmdlbWVudCBvZiBhbnkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0LgorCitGb3IgaW5xdWlyaWVzIHBsZWFzZSBjb250YWN0OgorU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorNDE1MCBOZXR3b3JrIENpcmNsZSwgU2FudGEgQ2xhcmEKK0NhbGlmb3JuaWEgOTUwNTQKKworKExGSSMxNDM3MTUvRm9ybSBJRCMwMTE4MDEpCmRpZmYgLS1naXQgYS9saWNlbnNlcy9zdW4tY3NsIGIvbGljZW5zZXMvc3VuLWNzbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTc1YzhiCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvc3VuLWNzbApAQCAtMCwwICsxLDExNzEgQEAKKyBTVU4gQ09NTVVOSVRZIFNPVVJDRSBMSUNFTlNFIFZlcnNpb24gMi4zIChSZXYuICBEYXRlIEZlYi4KKyAyMywgMTk5OSkKKyAKKyBSRUNJVEFMUworIAorIE9yaWdpbmFsIENvbnRyaWJ1dG9yIGhhcyBkZXZlbG9wZWQgU3BlY2lmaWNhdGlvbnMgYW5kIFNvdXJjZQorIENvZGUgaW1wbGVtZW50YXRpb25zIG9mIGNlcnRhaW4gVGVjaG5vbG9neTsgYW5kCisgCisgT3JpZ2luYWwgQ29udHJpYnV0b3IgZGVzaXJlcyB0byBsaWNlbnNlIHRoZSBUZWNobm9sb2d5IHRvIGEKKyBsYXJnZSBjb21tdW5pdHkgdG8gZmFjaWxpdGF0ZSByZXNlYXJjaCwgaW5ub3ZhdGlvbiBhbmQKKyBwcm9kdWN0IGRldmVsb3BtZW50IHdoaWxlIG1haW50YWluaW5nIGNvbXBhdGliaWxpdHkgb2Ygc3VjaAorIHByb2R1Y3RzIHdpdGggdGhlIFRlY2hub2xvZ3kgYXMgZGVsaXZlcmVkIGJ5IE9yaWdpbmFsCisgQ29udHJpYnV0b3I7IGFuZAorIAorIE9yaWdpbmFsIENvbnRyaWJ1dG9yIGRlc2lyZXMgdG8gbGljZW5zZSBjZXJ0YWluIFN1bgorIFRyYWRlbWFya3MgZm9yIHRoZSBwdXJwb3NlIG9mIGJyYW5kaW5nIHByb2R1Y3RzIHRoYXQgYXJlCisgY29tcGF0aWJsZSB3aXRoIHRoZSByZWxldmFudCBUZWNobm9sb2d5IGRlbGl2ZXJlZCBieQorIE9yaWdpbmFsIENvbnRyaWJ1dG9yOyBhbmQKKyAKKyBZb3UgZGVzaXJlIHRvIGxpY2Vuc2UgdGhlIFRlY2hub2xvZ3kgYW5kIHBvc3NpYmx5IGNlcnRhaW4KKyBTdW4gVHJhZGVtYXJrcyBmcm9tIE9yaWdpbmFsIENvbnRyaWJ1dG9yIG9uIHRoZSB0ZXJtcyBhbmQKKyBjb25kaXRpb25zIHNwZWNpZmllZCBpbiB0aGlzIExpY2Vuc2UuCisgCisgSW4gY29uc2lkZXJhdGlvbiBmb3IgdGhlIG11dHVhbCBjb3ZlbmFudHMgY29udGFpbmVkIGhlcmVpbiwKKyBZb3UgYW5kIE9yaWdpbmFsIENvbnRyaWJ1dG9yIGFncmVlIGFzIGZvbGxvd3M6CisgCisgQUdSRUVNRU5UCisgCisgMS4gIEludHJvZHVjdGlvbi4gIFRoZSBTdW4gQ29tbXVuaXR5IFNvdXJjZSBMaWNlbnNlIGFuZAorIGVmZmVjdGl2ZSBhdHRhY2htZW50cyAoIkxpY2Vuc2UiKSBtYXkgaW5jbHVkZSBmaXZlIGRpc3RpbmN0CisgbGljZW5zZXM6ICBSZXNlYXJjaCBVc2UsIFRDSywgSW50ZXJuYWwgRGVwbG95bWVudCBVc2UsCisgQ29tbWVyY2lhbCBVc2UgYW5kIFRyYWRlbWFyayBMaWNlbnNlLiAgVGhlIFJlc2VhcmNoIFVzZQorIGxpY2Vuc2UgaXMgZWZmZWN0aXZlIHdoZW4gWW91IGNsaWNrIGFuZCBhY2NlcHQgdGhpcyBMaWNlbnNlLgorIFRoZSBUQ0sgYW5kIEludGVybmFsIERlcGxveW1lbnQgVXNlIGxpY2Vuc2VzIGFyZSBlZmZlY3RpdmUKKyB3aGVuIFlvdSBjbGljayBhbmQgYWNjZXB0IHRoaXMgTGljZW5zZSwgdW5sZXNzIG90aGVyd2lzZQorIHNwZWNpZmllZCBpbiB0aGUgVENLIGFuZCBJbnRlcm5hbCBEZXBsb3ltZW50IFVzZQorIGF0dGFjaG1lbnRzLiAgVGhlIENvbW1lcmNpYWwgVXNlIGFuZCBUcmFkZW1hcmsgbGljZW5zZXMgbXVzdAorIGJlIHNpZ25lZCBieSBZb3UgYW5kIE9yaWdpbmFsIENvbnRyaWJ1dG9yIGluIG9yZGVyIHRvIGJlY29tZQorIGVmZmVjdGl2ZS4gIE9uY2UgZWZmZWN0aXZlLCB0aGVzZSBsaWNlbnNlcyBhbmQgdGhlCisgYXNzb2NpYXRlZCByZXF1aXJlbWVudHMgYW5kIHJlc3BvbnNpYmlsaXRpZXMgYXJlIGN1bXVsYXRpdmUuCisgQ2FwaXRhbGl6ZWQgdGVybXMgdXNlZCBpbiB0aGlzIExpY2Vuc2UgYXJlIGRlZmluZWQgaW4gdGhlCisgR2xvc3NhcnkuCisgCisgMi4gIExpY2Vuc2UgR3JhbnRzLgorIAorIDIuMSBPcmlnaW5hbCBDb250cmlidXRvciBHcmFudC4gIFN1YmplY3QgdG8gWW91ciBjb21wbGlhbmNlCisgd2l0aCBTZWN0aW9ucyAzLCA4LjEwIGFuZCBBdHRhY2htZW50IEEgb2YgdGhpcyBMaWNlbnNlLAorIE9yaWdpbmFsIENvbnRyaWJ1dG9yIGdyYW50cyB0byBZb3UgYSB3b3JsZHdpZGUsCisgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHRvIHRoZSBleHRlbnQgb2YKKyBPcmlnaW5hbCBDb250cmlidXRvcidzIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBSaWdodHMgY292ZXJpbmcKKyB0aGUgT3JpZ2luYWwgQ29kZSwgVXBncmFkZWQgQ29kZSBhbmQgU3BlY2lmaWNhdGlvbnMsIHRvIGRvCisgdGhlIGZvbGxvd2luZzoKKyAKKyBhKSBSZXNlYXJjaCBVc2UgTGljZW5zZToKKyAKKyAoaSkgdXNlLCByZXByb2R1Y2UgYW5kIG1vZGlmeSB0aGUgT3JpZ2luYWwgQ29kZSwgVXBncmFkZWQKKyBDb2RlIGFuZCBTcGVjaWZpY2F0aW9ucyB0byBjcmVhdGUgTW9kaWZpY2F0aW9ucyBhbmQKKyBSZWZvcm1hdHRlZCBTcGVjaWZpY2F0aW9ucyBmb3IgUmVzZWFyY2ggVXNlIGJ5IFlvdSwKKyAKKyAoaWkpIHB1Ymxpc2ggYW5kIGRpc3BsYXkgT3JpZ2luYWwgQ29kZSwgVXBncmFkZWQgQ29kZSBhbmQKKyBTcGVjaWZpY2F0aW9ucyB3aXRoLCBvciBhcyBwYXJ0IG9mIE1vZGlmaWNhdGlvbnMsIGFzCisgcGVybWl0dGVkIHVuZGVyIFNlY3Rpb24gMy4xIGIpIGJlbG93LAorIAorIChpaWkpIHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgT3JpZ2luYWwgQ29kZSBhbmQKKyBVcGdyYWRlZCBDb2RlIHRvIExpY2Vuc2VlcyBhbmQgc3R1ZGVudHMgZm9yIFJlc2VhcmNoIFVzZSBieQorIFlvdSwKKyAKKyAoaXYpIGNvbXBpbGUsIHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBPcmlnaW5hbCBDb2RlIGFuZAorIFVwZ3JhZGVkIENvZGUgaW4gRXhlY3V0YWJsZSBmb3JtLCBhbmQgUmVmb3JtYXR0ZWQKKyBTcGVjaWZpY2F0aW9ucyB0byBhbnlvbmUgZm9yIFJlc2VhcmNoIFVzZSBieSBZb3UuCisgCisgYikgT3RoZXIgdGhhbiB0aGUgbGljZW5zZXMgZXhwcmVzc2x5IGdyYW50ZWQgaW4gdGhpcworIExpY2Vuc2UsIE9yaWdpbmFsIENvbnRyaWJ1dG9yIHJldGFpbnMgYWxsIHJpZ2h0LCB0aXRsZSwgYW5kCisgaW50ZXJlc3QgaW4gT3JpZ2luYWwgQ29kZSBhbmQgVXBncmFkZWQgQ29kZSBhbmQKKyBTcGVjaWZpY2F0aW9ucy4KKyAKKyAyLjIgWW91ciBHcmFudHMuCisgCisgYSkgVG8gT3RoZXIgTGljZW5zZWVzLiAgWW91IGhlcmVieSBncmFudCB0byBlYWNoIExpY2Vuc2VlIGEKKyBsaWNlbnNlIHRvIFlvdXIgRXJyb3IgQ29ycmVjdGlvbnMgYW5kIFNoYXJlZCBNb2RpZmljYXRpb25zLAorIG9mIHRoZSBzYW1lIHNjb3BlIGFuZCBleHRlbnQgYXMgT3JpZ2luYWwgQ29udHJpYnV0b3IncworIGxpY2Vuc2VzIHVuZGVyIFNlY3Rpb24gMi4xIGEpIGFib3ZlIHJlbGF0aXZlIHRvIFJlc2VhcmNoCisgVXNlLCBBdHRhY2htZW50IEMgcmVsYXRpdmUgdG8gSW50ZXJuYWwgRGVwbG95bWVudCBVc2UsIGFuZAorIEF0dGFjaG1lbnQgRCByZWxhdGl2ZSB0byBDb21tZXJjaWFsIFVzZS4KKyAKKyBiKSBUbyBPcmlnaW5hbCBDb250cmlidXRvci4gIFlvdSBoZXJlYnkgZ3JhbnQgdG8gT3JpZ2luYWwKKyBDb250cmlidXRvciBhIHdvcmxkd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlLAorIHBlcnBldHVhbCBhbmQgaXJyZXZvY2FibGUgbGljZW5zZSwgdG8gdGhlIGV4dGVudCBvZiBZb3VyCisgSW50ZWxsZWN0dWFsIFByb3BlcnR5IFJpZ2h0cyBjb3ZlcmluZyBZb3VyIEVycm9yCisgQ29ycmVjdGlvbnMsIFNoYXJlZCBNb2RpZmljYXRpb25zIGFuZCBSZWZvcm1hdHRlZAorIFNwZWNpZmljYXRpb25zLCB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5IGFuZAorIGRpc3RyaWJ1dGUgWW91ciBFcnJvciBDb3JyZWN0aW9ucywgU2hhcmVkIE1vZGlmaWNhdGlvbnMgYW5kCisgUmVmb3JtYXR0ZWQgU3BlY2lmaWNhdGlvbnMsIGluIGFueSBmb3JtLCBpbmNsdWRpbmcgdGhlIHJpZ2h0CisgdG8gc3VibGljZW5zZSBzdWNoIHJpZ2h0cyB0aHJvdWdoIG11bHRpcGxlIHRpZXJzIG9mCisgZGlzdHJpYnV0aW9uLgorIAorIGMpIE90aGVyIHRoYW4gdGhlIGxpY2Vuc2VzIGV4cHJlc3NseSBncmFudGVkIGluIFNlY3Rpb25zIDIuMgorIGEpIGFuZCBiKSBhYm92ZSwgYW5kIHRoZSByZXN0cmljdGlvbiBzZXQgZm9ydGggaW4gU2VjdGlvbgorIDMuMSBkKShpdikgYmVsb3csIFlvdSByZXRhaW4gYWxsIHJpZ2h0LCB0aXRsZSwgYW5kIGludGVyZXN0CisgaW4gWW91ciBFcnJvciBDb3JyZWN0aW9ucywgU2hhcmVkIE1vZGlmaWNhdGlvbnMgYW5kCisgUmVmb3JtYXR0ZWQgU3BlY2lmaWNhdGlvbnMuCisgCisgMi4zIENvbnRyaWJ1dG9yIE1vZGlmaWNhdGlvbnMuICBZb3UgbWF5IHVzZSwgcmVwcm9kdWNlLAorIG1vZGlmeSwgZGlzcGxheSBhbmQgZGlzdHJpYnV0ZSBDb250cmlidXRvciBFcnJvcgorIENvcnJlY3Rpb25zLCBTaGFyZWQgTW9kaWZpY2F0aW9ucyBhbmQgUmVmb3JtYXR0ZWQKKyBTcGVjaWZpY2F0aW9ucywgb2J0YWluZWQgYnkgWW91IHVuZGVyIHRoaXMgTGljZW5zZSwgdG8gdGhlCisgc2FtZSBzY29wZSBhbmQgZXh0ZW50IGFzIHdpdGggT3JpZ2luYWwgQ29kZSwgVXBncmFkZWQgQ29kZQorIGFuZCBTcGVjaWZpY2F0aW9ucy4KKyAKKyAyLjQgU3ViY29udHJhY3RpbmcuICBZb3UgbWF5IGRlbGl2ZXIgdGhlIFNvdXJjZSBDb2RlIG9mCisgQ292ZXJlZCBDb2RlIHRvIG90aGVyIExpY2Vuc2VlcyBoYXZpbmcgYXQgbGVhc3QgYSBSZXNlYXJjaAorIFVzZSBsaWNlbnNlLCBmb3IgdGhlIHNvbGUgcHVycG9zZSBvZiBmdXJuaXNoaW5nIGRldmVsb3BtZW50Cisgc2VydmljZXMgdG8gWW91IGluIGNvbm5lY3Rpb24gd2l0aCBZb3VyIHJpZ2h0cyBncmFudGVkIGluCisgdGhpcyBMaWNlbnNlLiAgQWxsIHN1Y2ggTGljZW5zZWVzIG11c3QgZXhlY3V0ZSBhcHByb3ByaWF0ZQorIGRvY3VtZW50cyB3aXRoIHJlc3BlY3QgdG8gc3VjaCB3b3JrIGNvbnNpc3RlbnQgd2l0aCB0aGUKKyB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UsIGFuZCBhY2tub3dsZWRnaW5nIHRoZWlyCisgd29yay1tYWRlLWZvci1oaXJlIHN0YXR1cyBvciBhc3NpZ25pbmcgZXhjbHVzaXZlIHJpZ2h0IHRvCisgdGhlIHdvcmsgcHJvZHVjdCBhbmQgYXNzb2NpYXRlZCBJbnRlbGxlY3R1YWwgUHJvcGVydHkgUmlnaHRzCisgdG8gWW91LgorIAorIDMuICBSZXF1aXJlbWVudHMgYW5kIFJlc3BvbnNpYmlsaXRpZXMuICAzLjEgUmVzZWFyY2ggVXNlCisgTGljZW5zZS4gIEFzIGEgY29uZGl0aW9uIG9mIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBncmFudGVkCisgdW5kZXIgU2VjdGlvbiAyLjEgYSkgYWJvdmUsIFlvdSBhZ3JlZSB0byBjb21wbHkgd2l0aCB0aGUKKyBmb2xsb3dpbmc6CisgCisgYSkgWW91ciBDb250cmlidXRpb24gdG8gdGhlIENvbW11bml0eS4gIEFsbCBFcnJvcgorIENvcnJlY3Rpb25zIGFuZCBTaGFyZWQgTW9kaWZpY2F0aW9ucyB3aGljaCBZb3UgY3JlYXRlIG9yCisgY29udHJpYnV0ZSB0byBhcmUgYXV0b21hdGljYWxseSBzdWJqZWN0IHRvIHRoZSBsaWNlbnNlcworIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAyLjIgYWJvdmUuICBZb3UgYXJlIGVuY291cmFnZWQgdG8KKyBsaWNlbnNlIGFsbCBvZiBZb3VyIG90aGVyIE1vZGlmaWNhdGlvbnMgdW5kZXIgU2VjdGlvbiAyLjIgYXMKKyBTaGFyZWQgTW9kaWZpY2F0aW9ucywgYnV0IGFyZSBub3QgcmVxdWlyZWQgdG8gZG8gc28uICBZb3UKKyBhZ3JlZSB0byBub3RpZnkgT3JpZ2luYWwgQ29udHJpYnV0b3Igb2YgYW55IGVycm9ycyBpbiB0aGUKKyBTcGVjaWZpY2F0aW9uLgorIAorIGIpIFNvdXJjZSBDb2RlIEF2YWlsYWJpbGl0eS4gIFlvdSBhZ3JlZSB0byBwcm92aWRlIGFsbCBZb3VyCisgRXJyb3IgQ29ycmVjdGlvbnMgdG8gT3JpZ2luYWwgQ29udHJpYnV0b3IgYXMgc29vbiBhcworIHJlYXNvbmFibHkgcHJhY3RpY2FibGUgYW5kLCBpbiBhbnkgZXZlbnQsIHByaW9yIHRvIEludGVybmFsCisgRGVwbG95bWVudCBVc2Ugb3IgQ29tbWVyY2lhbCBVc2UsIGlmIGFwcGxpY2FibGUuICBPcmlnaW5hbAorIENvbnRyaWJ1dG9yIG1heSwgYXQgaXRzIGRpc2NyZXRpb24sIHBvc3QgU291cmNlIENvZGUgZm9yCisgWW91ciBFcnJvciBDb3JyZWN0aW9ucyBhbmQgU2hhcmVkIE1vZGlmaWNhdGlvbnMgb24gdGhlCisgQ29tbXVuaXR5IFdlYnNlcnZlci4gIFlvdSBtYXkgYWxzbyBwb3N0IEVycm9yIENvcnJlY3Rpb25zCisgYW5kIFNoYXJlZCBNb2RpZmljYXRpb25zIG9uIGEgd2ViLXNlcnZlciBvZiBZb3VyIGNob2ljZTsKKyBwcm92aWRlZCwgdGhhdCBZb3UgbXVzdCB0YWtlIHJlYXNvbmFibGUgcHJlY2F1dGlvbnMgdG8KKyBlbnN1cmUgdGhhdCBvbmx5IExpY2Vuc2VlcyBoYXZlIGFjY2VzcyB0byBzdWNoIEVycm9yCisgQ29ycmVjdGlvbnMgYW5kIFNoYXJlZCBNb2RpZmljYXRpb25zLiAgU3VjaCBwcmVjYXV0aW9ucworIHNoYWxsIGluY2x1ZGUsIHdpdGhvdXQgbGltaXRhdGlvbiwgYSBwYXNzd29yZCBwcm90ZWN0aW9uCisgc2NoZW1lIGxpbWl0ZWQgdG8gTGljZW5zZWVzIGFuZCBhIGNsaWNrLW9uLCBkb3dubG9hZAorIGNlcnRpZmljYXRpb24gb2YgTGljZW5zZWUgc3RhdHVzIHJlcXVpcmVkIG9mIHRob3NlCisgYXR0ZW1wdGluZyB0byBkb3dubG9hZCBmcm9tIHRoZSBzZXJ2ZXIuICBBbiBleGFtcGxlIG9mIGFuCisgYWNjZXB0YWJsZSBjZXJ0aWZpY2F0aW9uIGlzIGF0dGFjaGVkIGFzIEF0dGFjaG1lbnQgQS0yLgorIAorIGMpIE5vdGljZXMuICBBbGwgRXJyb3IgQ29ycmVjdGlvbnMgYW5kIFNoYXJlZCBNb2RpZmljYXRpb25zCisgWW91IGNyZWF0ZSBvciBjb250cmlidXRlIHRvIG11c3QgaW5jbHVkZSBhIGZpbGUgZG9jdW1lbnRpbmcKKyB0aGUgYWRkaXRpb25zIGFuZCBjaGFuZ2VzIFlvdSBtYWRlIGFuZCB0aGUgZGF0ZSBvZiBzdWNoCisgYWRkaXRpb25zIGFuZCBjaGFuZ2VzLiAgWW91IG11c3QgYWxzbyBpbmNsdWRlIHRoZSBub3RpY2Ugc2V0CisgZm9ydGggaW4gQXR0YWNobWVudCBBLTEgaW4gdGhlIGZpbGUgaGVhZGVyLiAgSWYgaXQgaXMgbm90CisgcG9zc2libGUgdG8gcHV0IHRoZSBub3RpY2UgaW4gYSBwYXJ0aWN1bGFyIFNvdXJjZSBDb2RlIGZpbGUKKyBkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbiBZb3UgbXVzdCBpbmNsdWRlIHRoZSBub3RpY2UgaW4gYQorIGxvY2F0aW9uIChzdWNoIGFzIGEgcmVsZXZhbnQgZGlyZWN0b3J5IGZpbGUpLCB3aGVyZSBhCisgcmVjaXBpZW50IHdvdWxkIGJlIG1vc3QgbGlrZWx5IHRvIGxvb2sgZm9yIHN1Y2ggYSBub3RpY2UuCisgCisgZCkgUmVkaXN0cmlidXRpb24uCisgCisgKGkpIFNvdXJjZS4gIENvdmVyZWQgQ29kZSBtYXkgYmUgZGlzdHJpYnV0ZWQgaW4gU291cmNlIENvZGUKKyBmb3JtIG9ubHkgdG8gYW5vdGhlciBMaWNlbnNlZSAoZXhjZXB0IGZvciBzdHVkZW50cyBhcworIHByb3ZpZGVkIGJlbG93KS4gIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24KKyBhbnkgQ292ZXJlZCBDb2RlIHRoYXQgYWx0ZXIgdGhlIHJpZ2h0cywgcmVxdWlyZW1lbnRzLCBvcgorIHJlc3BvbnNpYmlsaXRpZXMgb2Ygc3VjaCBMaWNlbnNlZS4gIFlvdSBtYXkgZGlzdHJpYnV0ZQorIENvdmVyZWQgQ29kZSB0byBzdHVkZW50cyBmb3IgdXNlIGluIGNvbm5lY3Rpb24gd2l0aCB0aGVpcgorIGNvdXJzZSB3b3JrIGFuZCByZXNlYXJjaCBwcm9qZWN0cyB1bmRlcnRha2VuIGF0IGFjY3JlZGl0ZWQKKyBlZHVjYXRpb25hbCBpbnN0aXR1dGlvbnMuICBTdWNoIHN0dWRlbnRzIG5lZWQgbm90IGJlCisgTGljZW5zZWVzLCBidXQgbXVzdCBiZSBnaXZlbiBhIGNvcHkgb2YgdGhlIG5vdGljZSBzZXQgZm9ydGgKKyBpbiBBdHRhY2htZW50IEEtMyBhbmQgc3VjaCBub3RpY2UgbXVzdCBhbHNvIGJlIGluY2x1ZGVkIGluIGEKKyBmaWxlIGhlYWRlciBvciBwcm9taW5lbnQgbG9jYXRpb24gaW4gdGhlIFNvdXJjZSBDb2RlIG1hZGUKKyBhdmFpbGFibGUgdG8gc3VjaCBzdHVkZW50cy4KKyAKKyAoaWkpIEV4ZWN1dGFibGUuICBZb3UgbWF5IGRpc3RyaWJ1dGUgRXhlY3V0YWJsZSB2ZXJzaW9uKHMpCisgb2YgQ292ZXJlZCBDb2RlIHRvIExpY2Vuc2VlcyBhbmQgb3RoZXIgdGhpcmQgcGFydGllcyBvbmx5CisgZm9yIHRoZSBwdXJwb3NlIG9mIGV2YWx1YXRpb24gYW5kIGNvbW1lbnQgaW4gY29ubmVjdGlvbiB3aXRoCisgUmVzZWFyY2ggVXNlIGJ5IFlvdSBhbmQgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlLCBidXQKKyB3aGljaCBsaW1pdHMgdXNlIG9mIHN1Y2ggRXhlY3V0YWJsZSB2ZXJzaW9uKHMpIG9mIENvdmVyZWQKKyBDb2RlIG9ubHkgdG8gdGhhdCBwdXJwb3NlLgorIAorIChpaWkpIE1vZGlmaWVkIENsYXNzLEludGVyZmFjZSBhbmQgUGFja2FnZSBOYW1pbmcuICBJbgorIGNvbm5lY3Rpb24gd2l0aCBSZXNlYXJjaCBVc2UgYnkgWW91IG9ubHksIFlvdSBtYXkgdXNlCisgT3JpZ2luYWwgQ29udHJpYnV0b3IncyBjbGFzcywgaW50ZXJmYWNlIGFuZCBwYWNrYWdlIG5hbWVzCisgb25seSB0byBhY2N1cmF0ZWx5IHJlZmVyZW5jZSBvciBpbnZva2UgdGhlIFNvdXJjZSBDb2RlIGZpbGVzCisgWW91IG1vZGlmeS4gIE9yaWdpbmFsIENvbnRyaWJ1dG9yIGdyYW50cyB0byBZb3UgYSBsaXRtaXRlZAorIGxpY2Vuc2UgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgZm9yIHN1Y2ggcHVycG9zZXMuCisgCisgKGl2KSBZb3UgZXhwcmVzc2x5IGFncmVlIHRoYXQgYW55IGRpc3RyaWJ1dGlvbiwgaW4gd2hvbGUgb3IKKyBpbiBwYXJ0LCBvZiBNb2RpZmljYXRpb25zIGRldmVsb3BlZCBieSBZb3Ugc2hhbGwgb25seSBiZQorIGRvbmUgcHVyc3VhbnQgdG8gdGhlIHRlcm0gYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLgorIAorIGUpIEV4dGVuc2lvbnMuCisgCisgKGkpIENvdmVyZWQgQ29kZS4gIFlvdSBtYXkgbm90IGluY2x1ZGUgYW55IFNvdXJjZSBDb2RlIG9mCisgQ29tbXVuaXR5IENvZGUgaW4gYW55IEV4dGVuc2lvbnM7CisgCisgKGlpKSBQdWJsaWNhdGlvbi4gIE5vIGxhdGVyIHRoYW4gdGhlIGRhdGUgb24gd2hpY2ggWW91IGZpcnN0CisgZGlzdHJpYnV0ZSBzdWNoIEV4dGVuc2lvbiBmb3IgQ29tbWVyY2lhbCBVc2UsIFlvdSBtdXN0CisgcHVibGlzaCB0byB0aGUgaW5kdXN0cnksIG9uIGEgbm9uLWNvbmZpZGVudGlhbCBiYXNpcyBhbmQKKyBmcmVlIG9mIGFsbCBjb3B5cmlnaHQgcmVzdHJpY3Rpb25zIHdpdGggcmVzcGVjdCB0bworIHJlcHJvZHVjdGlvbiBhbmQgdXNlLCBhbiBhY2N1cmF0ZSBhbmQgY3VycmVudCBzcGVjaWZpY2F0aW9uCisgZm9yIGFueSBFeHRlbnNpb24uICBJbiBhZGRpdGlvbiwgWW91IG11c3QgbWFrZSBhdmFpbGFibGUgYW4KKyBhcHByb3ByaWF0ZSB0ZXN0IHN1aXRlLCBwdXJzdWFudCB0byB0aGUgc2FtZSByaWdodHMgYXMgdGhlCisgc3BlY2lmaWNhdGlvbiwgc3VmZmljaWVudGx5IGRldGFpbGVkIHRvIGFsbG93IGFueSB0aGlyZAorIHBhcnR5IHJlYXNvbmFibHkgc2tpbGxlZCBpbiB0aGUgdGVjaG5vbG9neSB0byBwcm9kdWNlCisgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBFeHRlbnNpb24gY29tcGF0aWJsZSB3aXRoIHRoZQorIHNwZWNpZmljYXRpb24uICBTdWNoIHRlc3Qgc3VpdGVzIG11c3QgYmUgbWFkZSBhdmFpbGFibGUgYXMKKyBzb29uIGFzIHJlYXNvbmFibHkgcHJhY3RpY2FibGUgYnV0LCBpbiBubyBldmVudCwgbGF0ZXIgdGhhbgorIG5pbmV0eSAoOTApIGRheXMgYWZ0ZXIgWW91ciBmaXJzdCBDb21tZXJjaWFsIFVzZSBvZiB0aGUKKyBFeHRlbnNpb24uICBZb3UgbXVzdCB1c2UgcmVhc29uYWJsZSBlZmZvcnRzIHRvIHByb21wdGx5CisgY2xhcmlmeSBhbmQgY29ycmVjdCB0aGUgc3BlY2lmaWNhdGlvbiBhbmQgdGhlIHRlc3Qgc3VpdGUKKyB1cG9uIHdyaXR0ZW4gcmVxdWVzdCBieSBPcmlnaW5hbCBDb250cmlidXRvci4KKyAKKyAoaWlpKSBPcGVuLiAgWW91IGFncmVlIHRvIHJlZnJhaW4gZnJvbSBlbmZvcmNpbmcgYW55CisgSW50ZWxsZWN0dWFsIFByb3BlcnR5IFJpZ2h0cyBZb3UgbWF5IGhhdmUgY292ZXJpbmcgYW55CisgaW50ZXJmYWNlKHMpIG9mIFlvdXIgRXh0ZW5zaW9uLCB3aGljaCB3b3VsZCBwcmV2ZW50IHRoZQorIGltcGxlbWVudGF0aW9uIG9mIHN1Y2ggaW50ZXJmYWNlKHMpIGJ5IE9yaWdpbmFsIENvbnRyaWJ1dG9yCisgb3IgYW55IExpY2Vuc2VlLiAgVGhpcyBvYmxpZ2F0aW9uIGRvZXMgbm90IHByZXZlbnQgWW91IGZyb20KKyBlbmZvcmNpbmcgYW55IEludGVsbGVjdHVhbCBQcm9wZXJ0eSBSaWdodCBZb3UgaGF2ZSB0aGF0Cisgd291bGQgb3RoZXJ3aXNlIGJlIGluZnJpbmdlZCBieSBhbiBpbXBsZW1lbnRhdGlvbiBvZiBZb3VyCisgRXh0ZW5zaW9uLgorIAorIChpdikgQ2xhc3MsIEludGVyZmFjZSBhbmQgUGFja2FnZSBOYW1pbmcuICBZb3UgbWF5IG5vdCBhZGQKKyBhbnkgcGFja2FnZXMsIG9yIGFueSBwdWJsaWMgb3IgcHJvdGVjdGVkIGNsYXNzZXMgb3IKKyBpbnRlcmZhY2VzIHdpdGggbmFtZXMgdGhhdCBvcmlnaW5hdGUgb3IgbWlnaHQgYXBwZWFyIHRvCisgb3JpZ2luYXRlIGZyb20gT3JpZ2luYWwgQ29udHJpYnV0b3IgaW5jbHVkaW5nLCB3aXRob3V0CisgbGltaXRhdGlvbiwgcGFja2FnZSBvciBjbGFzcyBuYW1lcyB3aGljaCBiZWdpbiB3aXRoICJzdW4iLAorICJqYXZhIiwgImphdmF4IiwgImppbmkiLCAibmV0LmppbmkiLCAiY29tLnN1biIgb3IgdGhlaXIKKyBlcXVpdmFsZW50cyBpbiBhbnkgc3Vic2VxdWVudCBjbGFzcywgaW50ZXJmYWNlIGFuZC8gb3IKKyBwYWNrYWdlIG5hbWluZyBjb252ZW50aW9uIGFkb3B0ZWQgYnkgT3JpZ2luYWwgQ29udHJpYnV0b3IuCisgSXQgaXMgc3BlY2lmaWNhbGx5IHN1Z2dlc3RlZCB0aGF0IFlvdSBuYW1lIGFueSBuZXcgcGFja2FnZXMKKyB1c2luZyB0aGUgIlVuaXF1ZSBQYWNrYWdlIE5hbWluZyBDb252ZW50aW9uIiBhcyBkZXNjcmliZWQgaW4KKyAiVGhlIEphdmEgTGFuZ3VhZ2UgU3BlY2lmaWNhdGlvbiIgYnkgSmFtZXMgR29zbGluZywgQmlsbAorIEpveSwgYW5kIEd1eSBTdGVlbGUsIElTQk4gMC0yMDEtNjM0NTEtMSwgQXVndXN0IDE5OTYuCisgU2VjdGlvbiA3LjcgIlVuaXF1ZSBQYWNrYWdlIE5hbWVzIiwgb24gcGFnZSAxMjUgb2YgdGhpcworIHNwZWNpZmljYXRpb24gd2hpY2ggc3RhdGVzLCBpbiBwYXJ0OgorIAorICJZb3UgZm9ybSBhIHVuaXF1ZSBwYWNrYWdlIG5hbWUgYnkgZmlyc3QgaGF2aW5nIChvcgorIGJlbG9uZ2luZyB0byBhbiBvcmdhbml6YXRpb24gdGhhdCBoYXMpIGFuIEludGVybmV0IGRvbWFpbgorIG5hbWUsIHN1Y2ggYXMgInN1bi5jb20iLiAgWW91IHRoZW4gcmV2ZXJzZSB0aGUgbmFtZSwKKyBjb21wb25lbnQgYnkgY29tcG9uZW50LCB0byBvYnRhaW4sIGluIHRoaXMgZXhhbXBsZSwKKyAiQ29tLnN1biIsIGFuZCB1c2UgdGhpcyBhcyBhIHByZWZpeCBmb3IgWW91ciBwYWNrYWdlIG5hbWVzLAorIHVzaW5nIGEgY29udmVudGlvbiBkZXZlbG9wZWQgd2l0aGluIFlvdXIgb3JnYW5pemF0aW9uIHRvCisgZnVydGhlciBhZG1pbmlzdGVyIHBhY2thZ2UgbmFtZXMuIgorIAorIDMuMiBBZGRpdGlvbmFsIFJlcXVpcmVtZW50cyBhbmQgUmVzcG9uc2liaWxpdGllcy4gIEFueQorIGFkZGl0aW9uYWwgcmVxdWlyZW1lbnRzIGFuZCByZXNwb25zaWJpbGl0aWVzIHJlbGF0aW5nIHRvIHRoZQorIFRlY2hub2xvZ3kgYXJlIGxpc3RlZCBpbiBBdHRhY2htZW50IEYgKEFkZGl0aW9uYWwKKyBSZXF1aXJlbWVudHMgYW5kIFJlc3BvbnNpYmlsaXRpZXMpLCBpZiBhcHBsaWNhYmxlLCBhbmQgYXJlCisgaGVyZWJ5IGluY29ycG9yYXRlZCBpbnRvIHRoaXMgU2VjdGlvbiAzLgorIAorIDQuICBWZXJzaW9ucyBvZiB0aGUgTGljZW5zZS4KKyAKKyA0LjEgTGljZW5zZSBWZXJzaW9ucy4gIE9yaWdpbmFsIENvbnRyaWJ1dG9yIG1heSBwdWJsaXNoCisgcmV2aXNlZCB2ZXJzaW9ucyBvZiB0aGUgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gIEVhY2gKKyB2ZXJzaW9uIHdpbGwgYmUgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4KKyAKKyA0LjIgRWZmZWN0LiAgT25jZSBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiBDb3ZlcmVkIENvZGUgaGFzCisgYmVlbiBwcm92aWRlZCB1bmRlciBhIHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsIFlvdSBtYXkgYWx3YXlzCisgY29udGludWUgdG8gdXNlIHN1Y2ggQ292ZXJlZCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0CisgdmVyc2lvbiBvZiB0aGUgTGljZW5zZS4gIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2gKKyBDb3ZlcmVkIENvZGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YKKyB0aGUgTGljZW5zZS4gIE5vIG9uZSBvdGhlciB0aGFuIE9yaWdpbmFsIENvbnRyaWJ1dG9yIGhhcyB0aGUKKyByaWdodCB0byBwcm9tdWxnYXRlIExpY2Vuc2UgdmVyc2lvbnMuCisgCisgNS4gIERpc2NsYWltZXIgb2YgV2FycmFudHkuCisgCisgNS4xIENPVkVSRUQgQ09ERSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgIkFTIElTLCIKKyBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELAorIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFIENPVkVSRUQKKyBDT0RFIElTIEZSRUUgT0YgREVGRUNUUywgTUVSQ0hBTlRBQkxFLCBGSVQgRk9SIEEgUEFSVElDVUxBUgorIFBVUlBPU0UgT1IgTk9OLUlORlJJTkdJTkcuICBZT1UgQUdSRUUgVE8gQkVBUiBUSEUgRU5USVJFCisgUklTSyBJTiBDT05ORUNUSU9OIFdJVEggWU9VUiBVU0UgQU5EIERJU1RSSUJVVElPTiBPRiBDT1ZFUkVECisgQ09ERSBVTkRFUiBUSElTIExJQ0VOU0UuICBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkKKyBDT05TVElUVVRFUyBBTiBFU1NFTlRJQUwgUEFSVCBPRiBUSElTIExJQ0VOU0UuICBOTyBVU0UgT0YKKyBBTlkgQ09WRVJFRCBDT0RFIElTIEFVVEhPUklaRUQgSEVSRVVOREVSIEVYQ0VQVCBTVUJKRUNUIFRPCisgVEhJUyBESVNDTEFJTUVSLgorIAorIDUuMiBZb3UgYWNrbm93bGVkZ2UgdGhhdCBPcmlnaW5hbCBDb2RlLCBVcGdyYWRlZCBDb2RlIGFuZAorIFNwZWNpZmljYXRpb25zIGFyZSBub3QgZGVzaWduZWQgb3IgaW50ZW5kZWQgZm9yIHVzZSBpbiAoaSkKKyBvbi1saW5lIGNvbnRyb2wgb2YgYWlyY3JhZnQsIGFpciB0cmFmZmljLCBhaXJjcmFmdAorIG5hdmlnYXRpb24gb3IgYWlyY3JhZnQgY29tbXVuaWNhdGlvbnM7IG9yIChpaSkgaW4gdGhlCisgZGVzaWduLCBjb25zdHJ1Y3Rpb24sIG9wZXJhdGlvbiBvciBtYWludGVuYW5jZSBvZiBhbnkKKyBudWNsZWFyIGZhY2lsaXR5LiAgT3JpZ2luYWwgQ29udHJpYnV0b3IgZGlzY2xhaW1zIGFueQorIGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eSBvZiBmaXRuZXNzIGZvciBzdWNoIHVzZXMuCisgCisgNi4gIFRlcm1pbmF0aW9uLgorIAorIDYuMSBCeSBZb3UuICBZb3UgbWF5IHRlcm1pbmF0ZSB0aGlzIFJlc2VhcmNoIFVzZSBsaWNlbnNlIGF0CisgYW55dGltZSBieSBwcm92aWRpbmcgd3JpdHRlbiBub3RpY2UgdG8gT3JpZ2luYWwgQ29udHJpYnV0b3IuCisgCisgNi4yIEJ5IE9yaWdpbmFsIENvbnRyaWJ1dG9yLiAgVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzCisgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGU6CisgCisgKGkpIGF1dG9tYXRpY2FsbHkgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGhlIHRlcm1zIG9mCisgdGhpcyBMaWNlbnNlIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YKKyByZWNlaXB0IG9mIHdyaXR0ZW4gbm90aWNlIG9mIHRoZSBicmVhY2g7CisgCisgKGlpKSBpbW1lZGlhdGVseSBpbiB0aGUgZXZlbnQgb2YgY2lyY3Vtc3RhbmNlcyBzcGVjaWZpZWQgaW4KKyBTZWN0aW9ucyA3LjEgYW5kIDguNDsgb3IKKyAKKyAoaWlpKSBhdCBPcmlnaW5hbCBDb250cmlidXRvcidzIGRpc2NyZXRpb24gdXBvbiBhbnkgYWN0aW9uCisgaW5pdGlhdGVkIGluIHRoZSBmaXJzdCBpbnN0YW5jZSBieSBZb3UgYWxsZWdpbmcgdGhhdCB1c2Ugb3IKKyBkaXN0cmlidXRpb24gYnkgT3JpZ2luYWwgQ29udHJpYnV0b3Igb3IgYW55IExpY2Vuc2VlLCBvZgorIE9yaWdpbmFsIENvZGUsIFVwZ3JhZGVkIENvZGUsIEVycm9yIENvcnJlY3Rpb25zIG9yIFNoYXJlZAorIE1vZGlmaWNhdGlvbnMgY29udHJpYnV0ZWQgYnkgWW91LCBvciBTcGVjaWZpY2F0aW9ucywKKyBpbmZyaW5nZSBhIHBhdGVudCBvd25lZCBvciBjb250cm9sbGVkIGJ5IFlvdS4KKyAKKyA2LjMgRWZmZWN0aXZlIG9mIFRlcm1pbmF0aW9uLiAgVXBvbiB0ZXJtaW5hdGlvbiwgWW91IGFncmVlCisgdG8gZGlzY29udGludWUgdXNlIGFuZCByZXR1cm4gb3IgZGVzdHJveSBhbGwgY29waWVzIG9mCisgQ292ZXJlZCBDb2RlIGluIHlvdXIgcG9zc2Vzc2lvbi4gIEFsbCBzdWJsaWNlbnNlcyB0byB0aGUKKyBDb3ZlcmVkIENvZGUgd2hpY2ggeW91IGhhdmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbCBzdXJ2aXZlCisgYW55IHRlcm1pbmF0aW9uIG9mIHRoaXMgTGljZW5zZS4gIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyCisgbmF0dXJlLCBzaG91bGQgcmVtYWluIGluIGVmZmVjdCBiZXlvbmQgdGhlIHRlcm1pbmF0aW9uIG9mCisgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sCisgU2VjdGlvbnMgMi4yLCAzLCA1LCA3IGFuZCA4LgorIAorIDYuNCBFYWNoIHBhcnR5IHdhaXZlcyBhbmQgcmVsZWFzZXMgdGhlIG90aGVyIGZyb20gYW55IGNsYWltCisgdG8gY29tcGVuc2F0aW9uIG9yIGluZGVtbml0eSBmb3IgcGVybWl0dGVkIG9yIGxhd2Z1bAorIHRlcm1pbmF0aW9uIG9mIHRoZSBidXNpbmVzcyByZWxhdGlvbnNoaXAgZXN0YWJsaXNoZWQgYnkgdGhpcworIExpY2Vuc2UuCisgCisgNy4gIExpYWJpbGl0eS4KKyAKKyA3LjEgSW5mcmluZ2VtZW50LiAgU2hvdWxkIGFueSBvZiB0aGUgT3JpZ2luYWwgQ29kZSwgVXBncmFkZWQKKyBDb2RlLCBUQ0sgb3IgU3BlY2lmaWNhdGlvbnMgKCJNYXRlcmlhbHMiKSBiZWNvbWUgdGhlIHN1YmplY3QKKyBvZiBhIGNsYWltIG9mIGluZnJpbmdlbWVudCwgT3JpZ2luYWwgQ29udHJpYnV0b3IgbWF5LCBhdCBpdHMKKyBzb2xlIG9wdGlvbiwgKGkpIGF0dGVtcHQgdG8gcHJvY3VyZSB0aGUgcmlnaHRzIG5lY2Vzc2FyeSBmb3IKKyBZb3UgdG8gY29udGludWUgdXNpbmcgdGhlIE1hdGVyaWFscywgKGlpKSBtb2RpZnkgdGhlCisgTWF0ZXJpYWxzIHNvIHRoYXQgdGhleSBhcmUgbm8gbG9uZ2VyIGluZnJpbmdpbmcsIG9yIChpaWkpCisgdGVybWluYXRlIFlvdXIgcmlnaHQgdG8gdXNlIHRoZSBNYXRlcmlhbHMsIGltbWVkaWF0ZWx5IHVwb24KKyB3cml0dGVuIG5vdGljZSwgYW5kIHJlZnVuZCB0byBZb3UgdGhlIGFtb3VudCwgaWYgYW55LCBoYXZpbmcKKyB0aGVuIGFjdHVhbGx5IGJlZW4gcGFpZCBieSBZb3UgdG8gT3JpZ2luYWwgQ29udHJpYnV0b3IgZm9yCisgdGhlIE9yaWdpbmFsIENvZGUsIFVwZ3JhZGVkIENvZGUgYW5kIFRDSywgZGVwcmVjaWF0ZWQgb24gYQorIHN0cmFpZ2h0IGxpbmUsIGZpdmUgeWVhciBiYXNpcy4KKyAKKyA3LjIgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkuICBUTyBUSEUgRlVMTCBFWFRFTlQgQUxMT1dFRCBCWQorIEFQUExJQ0FCTEUgTEFXLCBPUklHSU5BTCBDT05UUklCVVRPUidzIExJQUJJTElUWSBUTyBZT1UgRk9SCisgQ0xBSU1TIFJFTEFUSU5HIFRPIFRISVMgTElDRU5TRSwgV0hFVEhFUiBGT1IgQlJFQUNIIE9SIElOCisgVE9SVCwgU0hBTEwgQkUgTElNSVRFRCBUTyBPTkUgSFVORFJFRCBQRVJDRU5UICgxMDAlKSBPRiBUSEUKKyBBTU9VTlQgSEFWSU5HIFRIRU4gQUNUVUFMTFkgQkVFTiBQQUlEIEJZIFlPVSBUTyBPUklHSU5BTAorIENPTlRSSUJVVE9SIEZPUiBBTEwgQ09QSUVTIExJQ0VOU0VEIEhFUkVVTkRFUiBPRiBUSEUKKyBQQVJUSUNVTEFSIElURU1TIEdJVklORyBSSVNFIFRPIFNVQ0ggQ0xBSU0sIElGIEFOWS4gIElOIE5PCisgRVZFTlQgV0lMTCBZT1UgKFJFTEFUSVZFIFRPIFlPVVIgU0hBUkVEIE1PRElGSUNBVElPTlMgT1IKKyBFUlJPUiBDT1JSRUNUSU9OUykgT1IgU1VOIEJFIExJQUJMRSBGT1IgQU5ZIElORElSRUNULAorIFBVTklUSVZFLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBJTgorIENPTk5FQ1RJT04gV0lUSCBPUiBBUklTSU5HIE9VVCBPRiBUSElTIExJQ0VOU0UgKElOQ0xVRElORywKKyBXSVRIT1VUIExJTUlUQVRJT04sIExPU1MgT0YgUFJPRklUUywgVVNFLCBEQVRBLCBPUiBPVEhFUgorIEVDT05PTUlDIEFEVkFOVEFHRSksIEhPV0VWRVIgSVQgQVJJU0VTIEFORCBPTiBBTlkgVEhFT1JZIE9GCisgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBGT1IgQ09OVFJBQ1QsIFNUUklDVAorIExJQUJJTElUWSBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSkgT1IgT1RIRVJXSVNFLAorIFdIRVRIRVIgT1IgTk9UIFlPVSBPUiBPUklHSU5BTCBDT05UUklCVVRPUiBIQVMgQkVFTiBBRFZJU0VECisgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFIEFORCBOT1RXSVRIU1RBTkRJTkcgVEhFCisgRkFJTFVSRSBPRiBFU1NFTlRJQUwgUFVSUE9TRSBPRiBBTlkgUkVNRURZLgorIAorIDguICBNaXNjZWxsYW5lb3VzLgorIAorIDguMSBUcmFkZW1hcmsuICBZb3UgYWdyZWUgdG8gY29tcGx5IHdpdGggdGhlIHRoZW4gY3VycmVudAorIFN1biBUcmFkZW1hcmsgJiBMb2dvIFVzYWdlIFJlcXVpcmVtZW50cyBhY2Nlc3NpYmxlIHRocm91Z2gKKyB0aGUgU0NTTCBXZWJwYWdlLiAgRXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCBpbiB0aGUKKyBMaWNlbnNlLCBZb3UgYXJlIGdyYW50ZWQgbm8gcmlnaHQsIHRpdGxlIG9yIGxpY2Vuc2UgdG8sIG9yCisgaW50ZXJlc3QgaW4sIGFueSBTdW4gVHJhZGVtYXJrcy4gIFlvdSBhZ3JlZSBub3QgdG8gKGkpCisgY2hhbGxlbmdlIE9yaWdpbmFsIENvbnRyaWJ1dG9yJ3Mgb3duZXJzaGlwIG9yIHVzZSBvZiBTdW4KKyBUcmFkZW1hcmtzOyAoaWkpIGF0dGVtcHQgdG8gcmVnaXN0ZXIgYW55IFN1biBUcmFkZW1hcmtzLCBvcgorIGFueSBtYXJrIG9yIGxvZ28gc3Vic3RhbnRpYWxseSBzaW1pbGFyIHRoZXJldG87IG9yIChpaWkpCisgaW5jb3Jwb3JhdGUgYW55IFN1biBUcmFkZW1hcmtzIGludG8geW91ciBvd24gdHJhZGVtYXJrcywKKyBwcm9kdWN0IG5hbWVzLCBzZXJ2aWNlIG1hcmtzLCBjb21wYW55IG5hbWVzLCBvciBkb21haW4KKyBuYW1lcy4KKyAKKyA4LjIgSW50ZWdyYXRpb24uICBUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUKKyBhZ3JlZW1lbnQgY29uY2VybmluZyB0aGUgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLgorIAorIDguMyBBc3NpZ25tZW50LiAgT3JpZ2luYWwgQ29udHJpYnV0b3IgbWF5IGFzc2lnbiB0aGlzCisgTGljZW5zZSwgYW5kIGl0cyByaWdodHMgYW5kIG9ibGlnYXRpb25zIGhlcmV1bmRlciwgaW4gaXRzCisgc29sZSBkaXNjcmV0aW9uLiAgWW91IG1heSBhc3NpZ24gdGhlIFJlc2VhcmNoIFVzZSBwb3J0aW9ucworIG9mIHRoaXMgTGljZW5zZSB0byBhIHRoaXJkIHBhcnR5IHVwb24gcHJpb3Igd3JpdHRlbiBub3RpY2UKKyB0byBPcmlnaW5hbCBDb250cmlidXRvciAod2hpY2ggbWF5IGJlIHByb3ZpZGVkIHZpYSB0aGUKKyBDb21tdW5pdHkgV2ViLVNlcnZlcikuICBZb3UgbWF5IG5vdCBhc3NpZ24gdGhlIENvbW1lcmNpYWwKKyBVc2UgbGljZW5zZSBvciBUQ0sgbGljZW5zZSwgaW5jbHVkaW5nIGJ5IHdheSBvZiBtZXJnZXIKKyAocmVnYXJkbGVzcyBvZiB3aGV0aGVyIFlvdSBhcmUgdGhlIHN1cnZpdmluZyBlbnRpdHkpIG9yCisgYWNxdWlzaXRpb24sIHdpdGhvdXQgT3JpZ2luYWwgQ29udHJpYnV0b3IncyBwcmlvciB3cml0dGVuCisgY29uc2VudC4KKyAKKyA4LjQgU2V2ZXJhYmlsaXR5LiAgSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZAorIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkKKyB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0IGVuZm9yY2VhYmxlLgorIE5vdHdpdGhzdGFuZGluZyB0aGUgZm9yZWdvaW5nLCBpZiBZb3UgYXJlIHByb2hpYml0ZWQgYnkgbGF3CisgZnJvbSBmdWxseSBhbmQgc3BlY2lmaWNhbGx5IGNvbXBseWluZyB3aXRoIFNlY3Rpb25zIDIuMiBvcgorIDMsIHRoaXMgTGljZW5zZSB3aWxsIGltbWVkaWF0ZWx5IHRlcm1pbmF0ZSBhbmQgWW91IG11c3QKKyBpbW1lZGlhdGVseSBkaXNjb250aW51ZSBhbnkgdXNlIG9mIENvdmVyZWQgQ29kZS4KKyAKKyA4LjUgR292ZXJuaW5nIExhdy4gIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUKKyBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIGFuZCB0aGUgU3RhdGUgb2YgQ2FsaWZvcm5pYSwgYXMKKyBhcHBsaWVkIHRvIGNvbnRyYWN0cyBlbnRlcmVkIGludG8gYW5kIHRvIGJlIHBlcmZvcm1lZCBpbgorIENhbGlmb3JuaWEgYmV0d2VlbiBDYWxpZm9ybmlhIHJlc2lkZW50cy4gIFRoZSBhcHBsaWNhdGlvbiBvZgorIHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIENvbnRyYWN0cyBmb3IgdGhlCisgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4KKyAKKyA4LjYgRGlzcHV0ZSBSZXNvbHV0aW9uLgorIAorIGEpIEFueSBkaXNwdXRlIGFyaXNpbmcgb3V0IG9mIG9yIHJlbGF0aW5nIHRvIHRoaXMgTGljZW5zZQorIHNoYWxsIGJlIGZpbmFsbHkgc2V0dGxlZCBieSBhcmJpdHJhdGlvbiBhcyBzZXQgb3V0IGhlcmVpbiwKKyBleGNlcHQgdGhhdCBlaXRoZXIgcGFydHkgbWF5IGJyaW5nIGFueSBhY3Rpb24sIGluIGEgY291cnQgb2YKKyBjb21wZXRlbnQganVyaXNkaWN0aW9uICh3aGljaCBqdXJpc2RpY3Rpb24gc2hhbGwgYmUKKyBleGNsdXNpdmUpLCB3aXRoIHJlc3BlY3QgdG8gYW55IGRpc3B1dGUgcmVsYXRpbmcgdG8gc3VjaAorIHBhcnR5J3MgSW50ZWxsZWN0dWFsIFByb3BlcnR5IFJpZ2h0cyBvciB3aXRoIHJlc3BlY3QgdG8gWW91cgorIGNvbXBsaWFuY2Ugd2l0aCB0aGUgVENLIGxpY2Vuc2UuICBBcmJpdHJhdGlvbiBzaGFsbCBiZQorIGFkbWluaXN0ZXJlZDogIChpKSBieSB0aGUgQW1lcmljYW4gQXJiaXRyYXRpb24gQXNzb2NpYXRpb24KKyAoQUFBKSwgKGlpKSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHJ1bGVzIG9mIHRoZSBVbml0ZWQKKyBOYXRpb25zIENvbW1pc3Npb24gb24gSW50ZXJuYXRpb25hbCBUcmFkZSBMYXcgKFVOQ0lUUkFMKQorICh0aGUgIlJ1bGVzIikgaW4gZWZmZWN0IGF0IHRoZSB0aW1lIG9mIGFyYml0cmF0aW9uIGFzCisgbW9kaWZpZWQgaGVyZWluOyBhbmQgKGlpaSkgdGhlIGFyYml0cmF0b3Igd2lsbCBhcHBseSB0aGUKKyBzdWJzdGFudGl2ZSBsYXdzIG9mIENhbGlmb3JuaWEgYW5kIFVuaXRlZCBTdGF0ZXMuICBKdWRnZW1lbnQKKyB1cG9uIHRoZSBhd2FyZCByZW5kZXJlZCBieSB0aGUgYXJiaXRyYXRvciBtYXkgYmUgZW50ZXJlZCBpbgorIGFueSBjb3VydCBoYXZpbmcganVyaXNkaWN0aW9uIHRvIGVuZm9yY2Ugc3VjaCBhd2FyZC4KKyAKKyBiKSBBbGwgYXJiaXRyYXRpb24gcHJvY2VlZGluZ3Mgc2hhbGwgYmUgY29uZHVjdGVkIGluIEVuZ2xpc2gKKyAgYnkgYSBzaW5nbGUgYXJiaXRyYXRvciBzZWxlY3RlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlCisgIFJ1bGVzLCB3aG8gbXVzdCBiZSBmbHVlbnQgaW4gRW5nbGlzaCBhbmQgYmUgZWl0aGVyIGEKKyAgcmV0aXJlZCBqdWRnZSBvciBwcmFjdGljaW5nIGF0dG9ybmV5IGhhdmluZyBhdCBsZWFzdCB0ZW4KKyAgKDEwKSB5ZWFycyBsaXRpZ2F0aW9uIGV4cGVyaWVuY2UgYW5kIGJlIHJlYXNvbmFibHkgZmFtaWxpYXIKKyAgd2l0aCB0aGUgdGVjaG5vbG9neSBtYXR0ZXJzIHJlbGF0aXZlIHRvIHRoZSBkaXNwdXRlLgorICBVbmxlc3Mgb3RoZXJ3aXNlIGFncmVlZCwgYXJiaXRyYXRpb24gdmVudWUgc2hhbGwgYmUgaW4KKyAgTG9uZG9uLCBUb2t5bywgb3IgU2FuIEZyYW5jaXNjbywgd2hpY2hldmVyIGlzIGNsb3Nlc3QgdG8KKyAgZGVmZW5kYW50J3MgcHJpbmNpcGFsIGJ1c2luZXNzIG9mZmljZS4gIFRoZSBhcmJpdHJhdG9yIG1heQorICBhd2FyZCBtb25ldGFyeSBkYW1hZ2VzIG9ubHkgYW5kIG5vdGhpbmcgc2hhbGwgcHJlY2x1ZGUKKyAgZWl0aGVyIHBhcnR5IGZyb20gc2Vla2luZyBwcm92aXNpb25hbCBvciBlbWVyZ2VuY3kgcmVsaWVmCisgIGZyb20gYSBjb3VydCBvZiBjb21wZXRlbnQganVyaXNkaWN0aW9uLiAgVGhlIGFyYml0cmF0b3IKKyAgc2hhbGwgaGF2ZSBubyBhdXRob3JpdHkgdG8gYXdhcmQgZGFtYWdlcyBpbiBleGNlc3Mgb2YgdGhvc2UKKyAgcGVybWl0dGVkIGluIHRoaXMgTGljZW5zZSBhbmQgYW55IHN1Y2ggYXdhcmQgaW4gZXhjZXNzIGlzCisgIHZvaWQuICBBbGwgYXdhcmRzIHdpbGwgYmUgcGF5YWJsZSBpbiBVLlMuICBkb2xsYXJzIGFuZCBtYXkKKyAgaW5jbHVkZSwgZm9yIHRoZSBwcmV2YWlsaW5nIHBhcnR5IChpKSBwcmUtanVkZ21lbnQgYXdhcmQKKyAgaW50ZXJlc3QsIChpaSkgcmVhc29uYWJsZSBhdHRvcm5leXMnIGZlZXMgaW5jdXJyZWQgaW4KKyAgY29ubmVjdGlvbiB3aXRoIHRoZSBhcmJpdHJhdGlvbiwgYW5kIChpaWkpIHJlYXNvbmFibGUgY29zdHMKKyAgYW5kIGV4cGVuc2VzIGluY3VycmVkIGluIGVuZm9yY2luZyB0aGUgYXdhcmQuICBUaGUKKyAgYXJiaXRyYXRvciB3aWxsIG9yZGVyIGVhY2ggcGFydHkgdG8gcHJvZHVjZSBpZGVudGlmaWVkCisgIGRvY3VtZW50cyBhbmQgcmVzcG9uZCB0byBubyBtb3JlIHRoYW4gdHdlbnR5LWZpdmUgc2luZ2xlCisgIHF1ZXN0aW9uIGludGVycm9nYXRvcmllcy4KKyAKKyA4LjcgQ29uc3RydWN0aW9uLiAgQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQKKyB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUKKyBkcmFmdGVyIHNoYWxsIG5vdCBhcHBseSB0byB0aGlzIExpY2Vuc2UuCisgCisgOC44IFUuUy4gIEdvdmVybm1lbnQgRW5kIFVzZXJzLiAgVGhlIENvdmVyZWQgQ29kZSBpcyBhCisgImNvbW1lcmNpYWwgaXRlbSwiIGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluIDQ4IEMuRi5SLgorIDIuMTAxIChPY3QuICAxOTk1KSwgY29uc2lzdGluZyBvZiAiY29tbWVyY2lhbCBjb21wdXRlcgorIHNvZnR3YXJlIiBhbmQgImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUgZG9jdW1lbnRhdGlvbiwiCisgYXMgc3VjaCB0ZXJtcyBhcmUgdXNlZCBpbiA0OCBDLkYuUi4gIDEyLjIxMiAoU2VwdC4gIDE5OTUpLgorIENvbnNpc3RlbnQgd2l0aCA0OCBDLkYuUi4gIDEyLjIxMiBhbmQgNDggQy5GLlIuICAyMjcuNzIwMi0xCisgdGhyb3VnaCAyMjcuNzIwMi00IChKdW5lIDE5OTUpLCBhbGwgVS5TLiAgR292ZXJubWVudCBFbmQKKyBVc2VycyBhY3F1aXJlIENvdmVyZWQgQ29kZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIHNldCBmb3J0aAorIGhlcmVpbi4gIFlvdSBhZ3JlZSB0byBwYXNzIHRoaXMgbm90aWNlIHRvIFlvdXIgbGljZW5zZWVzLgorIAorIDguOSBQcmVzcyBBbm5vdW5jZW1lbnRzLiAgQWxsIHByZXNzIGFubm91bmNlbWVudHMgcmVsYXRpdmUKKyB0byB0aGUgZXhlY3V0aW9uIG9mIHRoaXMgTGljZW5zZSBtdXN0IGJlIHJldmlld2VkIGFuZAorIGFwcHJvdmVkIGJ5IE9yaWdpbmFsIENvbnRyaWJ1dG9yIGFuZCBZb3UgcHJpb3IgdG8gcmVsZWFzZS4KKyAKKyA4LjEwIEludGVybmF0aW9uYWwgVXNlLgorIAorIGEpIEV4cG9ydC9JbXBvcnQgbGF3cy4gIENvdmVyZWQgQ29kZSBpcyBzdWJqZWN0IHRvIFUuUy4KKyBleHBvcnQgY29udHJvbCBsYXdzIGFuZCBtYXkgYmUgc3ViamVjdCB0byBleHBvcnQgb3IgaW1wb3J0CisgcmVndWxhdGlvbnMgaW4gb3RoZXIgY291bnRyaWVzLiAgRWFjaCBwYXJ0eSBhZ3JlZXMgdG8gY29tcGx5Cisgc3RyaWN0bHkgd2l0aCBhbGwgc3VjaCBsYXdzIGFuZCByZWd1bGF0aW9ucyBhbmQgYWNrbm93bGVkZ2VzCisgdGhlaXIgcmVzcG9uc2liaWxpdHkgdG8gb2J0YWluIHN1Y2ggbGljZW5zZXMgdG8gZXhwb3J0LAorIHJlLWV4cG9ydCwgb3IgaW1wb3J0IGFzIG1heSBiZSByZXF1aXJlZC4gIFlvdSBhZ3JlZSB0byBwYXNzCisgdGhlc2Ugb2JsaWdhdGlvbnMgdG8gWW91ciBsaWNlbnNlZXMuCisgCisgYikgSW50ZWxsZWN0dWFsIFByb3BlcnR5IFByb3RlY3Rpb24uICBEdWUgdG8gbGltaXRlZAorIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBwcm90ZWN0aW9uIGFuZCBlbmZvcmNlbWVudCBpbiBjZXJ0YWluCisgY291bnRyaWVzLCBZb3UgYWdyZWUgbm90IHRvIHJlZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgQ29kZSwKKyBVcGdyYWRlZCBDb2RlLCBUQ0sgYW5kIFNwZWNpZmljYXRpb25zIHRvIGFueSBjb3VudHJ5IG90aGVyCisgdGhhbiB0aGUgbGlzdCBvZiByZXN0cmljdGVkIGNvdW50cmllcyBvbiB0aGUgU0NTTCBXZWJwYWdlLgorIAorIDguMTEgTGFuZ3VhZ2UuICBUaGlzIExpY2Vuc2UgaXMgaW4gdGhlIEVuZ2xpc2ggbGFuZ3VhZ2UKKyBvbmx5LCB3aGljaCBsYW5ndWFnZSBzaGFsbCBiZSBjb250cm9sbGluZyBpbiBhbGwgcmVzcGVjdHMsCisgYW5kIGFsbCB2ZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UgaW4gYW55IG90aGVyIGxhbmd1YWdlIHNoYWxsCisgYmUgZm9yIGFjY29tbW9kYXRpb24gb25seSBhbmQgc2hhbGwgbm90IGJlIGJpbmRpbmcgb24gdGhlCisgcGFydGllcyB0byB0aGlzIExpY2Vuc2UuICBBbGwgY29tbXVuaWNhdGlvbnMgYW5kIG5vdGljZXMKKyBtYWRlIG9yIGdpdmVuIHB1cnN1YW50IHRvIHRoaXMgTGljZW5zZSwgYW5kIGFsbAorIGRvY3VtZW50YXRpb24gYW5kIHN1cHBvcnQgdG8gYmUgcHJvdmlkZWQsIHVubGVzcyBvdGhlcndpc2UKKyBub3RlZCwgc2hhbGwgYmUgaW4gdGhlIEVuZ2xpc2ggbGFuZ3VhZ2UuCisgCisgUExFQVNFIFJFQUQgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRSBDQVJFRlVMTFkuICBCWQorIENMSUNLSU5HIE9OIFRIRSAiQUNDRVBUIiBCVVRUT04gQkVMT1cgWU9VIEFSRSBBQ0NFUFRJTkcgQU5ECisgQUdSRUVJTkcgVE8gVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgTElDRU5TRSBXSVRICisgU1VOIE1JQ1JPU1lTVEVNUywgSU5DLiAgSUYgWU9VIEFSRSBBR1JFRUlORyBUTyBUSElTIExJQ0VOU0UKKyBPTiBCRUhBTEYgT0YgQSBDT01QQU5ZLCBZT1UgUkVQUkVTRU5UIFRIQVQgWU9VIEFSRQorIEFVVEhPUklaRUQgVE8gQklORCBUSEUgQ09NUEFOWSBUTyBTVUNIIEEgTElDRU5TRS4gIFdIRVRIRVIKKyBZT1UgQVJFIEFDVElORyBPTiBZT1VSIE9XTiBCRUhBTEYsIE9SIFJFUFJFU0VOVElORyBBCisgQ09NUEFOWSwgWU9VIE1VU1QgQkUgT0YgTUFKT1JJVFkgQUdFIEFORCBCRSBPVEhFUldJU0UKKyBDT01QRVRFTlQgVE8gRU5URVIgSU5UTyBDT05UUkFDVFMuICBJRiBZT1UgRE8gTk9UIE1FRVQgVEhJUworIENSSVRFUklBIE9SIFlPVSBETyBOT1QgQUdSRUUgVE8gQU5ZIE9GIFRIRSBURVJNUyBBTkQKKyBDT05ESVRJT05TIE9GIFRISVMgTElDRU5TRSwgQ0xJQ0sgT04gVEhFIFJFSkVDVCBCVVRUT04gVE8KKyBFWElULgorIAorIEFDQ0VQVCBSRUpFQ1QKKyAKKyAKKyAKKyAKKyAKKyAKKyAKKyAKKyAKKyAKKyBHTE9TU0FSWQorIAorIDEuICAiQ29tbWVyY2lhbCBVc2UiIG1lYW5zIGFueSB1c2UgKGV4Y2x1ZGluZyBJbnRlcm5hbAorIERlcGxveW1lbnQgVXNlKSBvciBkaXN0cmlidXRpb24sIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgb2YKKyBDb21wbGlhbnQgQ292ZXJlZCBDb2RlIGJ5IFlvdSB0byBhbnkgdGhpcmQgcGFydHksIGFsb25lIG9yCisgYnVuZGxlZCB3aXRoIGFueSBvdGhlciBzb2Z0d2FyZSBvciBoYXJkd2FyZSwgZm9yIGRpcmVjdCBvcgorIGluZGlyZWN0IGNvbW1lcmNpYWwgb3Igc3RyYXRlZ2ljIGdhaW4gb3IgYWR2YW50YWdlLCBzdWJqZWN0CisgdG8gZXhlY3V0aW9uIG9mIEF0dGFjaG1lbnQgRCBieSBZb3UgYW5kIE9yaWdpbmFsCisgQ29udHJpYnV0b3IuCisgCisgMi4gICJDb21tdW5pdHkgQ29kZSIgbWVhbnMgdGhlIE9yaWdpbmFsIENvZGUsIFVwZ3JhZGVkIENvZGUsCisgRXJyb3IgQ29ycmVjdGlvbnMsIFNoYXJlZCBNb2RpZmljYXRpb25zLCBvciBhbnkgY29tYmluYXRpb24KKyB0aGVyZW9mLgorIAorIDMuICAiQ29tbXVuaXR5IFdlYnNlcnZlcihzKSIgbWVhbnMgdGhlIHdlYnNlcnZlcnMgZGVzaWduYXRlZAorIGJ5IE9yaWdpbmFsIENvbnRyaWJ1dG9yIGZvciBwb3N0aW5nIEVycm9yIENvcnJlY3Rpb25zIGFuZAorIFNoYXJlZCBNb2RpZmljYXRpb25zLgorIAorIDQuICAiQ29tcGxpYW50IENvdmVyZWQgQ29kZSIgbWVhbnMgQ292ZXJlZCBDb2RlIHRoYXQKKyBjb21wbGllcyB3aXRoIHRoZSByZXF1aXJlbWVudHMgb2YgdGhlIFRDSy4KKyAKKyA1LiAgIkNvbnRyaWJ1dG9yIiBtZWFucyBlYWNoIExpY2Vuc2VlIHRoYXQgY3JlYXRlcyBvcgorIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBhbnkgRXJyb3IgQ29ycmVjdGlvbiBvcgorIFNoYXJlZCBNb2RpZmljYXRpb24uCisgCisgNi4gICJDb3ZlcmVkIENvZGUiIG1lYW5zIHRoZSBPcmlnaW5hbCBDb2RlLCBVcGdyYWRlZCBDb2RlLAorIE1vZGlmaWNhdGlvbnMsIG9yIGFueSBjb21iaW5hdGlvbiB0aGVyZW9mLgorIAorIDcuICAiRXJyb3IgQ29ycmVjdGlvbiIgbWVhbnMgYW55IGNoYW5nZSBtYWRlIHRvIENvbW11bml0eQorIENvZGUgd2hpY2ggY29uZm9ybXMgdG8gdGhlIFNwZWNpZmljYXRpb24gYW5kIGNvcnJlY3RzIHRoZQorIGFkdmVyc2UgZWZmZWN0IG9mIGEgZmFpbHVyZSBvZiBDb21tdW5pdHkgQ29kZSB0byBwZXJmb3JtIGFueQorIGZ1bmN0aW9uIHNldCBmb3J0aCBpbiBvciByZXF1aXJlZCBieSB0aGUgU3BlY2lmaWNhdGlvbnMuCisgCisgNy4gICJFeGVjdXRhYmxlIiBtZWFucyBDb3ZlcmVkIENvZGUgdGhhdCBoYXMgYmVlbiBjb252ZXJ0ZWQKKyB0byBhIGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UgQ29kZS4KKyAKKyA5LiAgIkV4dGVuc2lvbihzKSIgbWVhbnMgYW55IGFkZGl0aW9uYWwgY2xhc3NlcyBvciBvdGhlcgorIHByb2dyYW1taW5nIGNvZGUgYW5kL29yIGludGVyZmFjZXMgZGV2ZWxvcGVkIGJ5IG9yIGZvciBZb3UKKyB3aGljaDogIChpKSBhcmUgZGVzaWduZWQgZm9yIHVzZSB3aXRoIHRoZSBUZWNobm9sb2d5OyAoaWkpCisgY29uc3RpdHV0ZSBhbiBBUEkgZm9yIGEgbGlicmFyeSBvZiBjb21wdXRpbmcgZnVuY3Rpb25zIG9yCisgc2VydmljZXM7IGFuZCAoaWlpKSBhcmUgZGlzY2xvc2VkIHRvIHRoaXJkIHBhcnR5IHNvZnR3YXJlCisgZGV2ZWxvcGVycyBmb3IgdGhlIHB1cnBvc2Ugb2YgZGV2ZWxvcGluZyBzb2Z0d2FyZSB3aGljaAorIGludm9rZXMgc3VjaCBhZGRpdGlvbmFsIGNsYXNzZXMgb3Igb3RoZXIgcHJvZ3JhbW1pbmcgY29kZQorIGFuZC9vciBpbnRlcmZhY2VzLiAgVGhlIGZvcmVnb2luZyBzaGFsbCBub3QgYXBwbHkgdG8KKyBzb2Z0d2FyZSBkZXZlbG9wbWVudCBieSBZb3VyIHN1YmNvbnRyYWN0b3JzIHRvIGJlCisgZXhjbHVzaXZlbHkgdXNlZCBieSBZb3UuCisgCisgMTAuICAiSW50ZWxsZWN0dWFsIFByb3BlcnR5IFJpZ2h0cyIgbWVhbnMgd29ybGR3aWRlCisgc3RhdHV0b3J5IGFuZCBjb21tb24gbGF3IHJpZ2h0cyBhc3NvY2lhdGVkIHNvbGVseSB3aXRoIChpKQorIHBhdGVudHMgYW5kIHBhdGVudCBhcHBsaWNhdGlvbnM7IChpaSkgd29ya3Mgb2YgYXV0aG9yc2hpcAorIGluY2x1ZGluZyBjb3B5cmlnaHRzLCBjb3B5cmlnaHQgYXBwbGljYXRpb25zLCBjb3B5cmlnaHQKKyByZWdpc3RyYXRpb25zIGFuZCAibW9yYWwgcmlnaHRzIjsgKGlpaSkgdGhlIHByb3RlY3Rpb24gb2YKKyB0cmFkZSBhbmQgaW5kdXN0cmlhbCBzZWNyZXRzIGFuZCBjb25maWRlbnRpYWwgaW5mb3JtYXRpb247CisgYW5kIChpdikgZGl2aXNpb25zLCBjb250aW51YXRpb25zLCByZW5ld2FscywgYW5kCisgcmUtaXNzdWFuY2VzIG9mIHRoZSBmb3JlZ29pbmcgbm93IGV4aXN0aW5nIG9yIGFjcXVpcmVkIGluCisgdGhlIGZ1dHVyZS4KKyAKKyAxMS4gICJJbnRlcm5hbCBEZXBsb3ltZW50IFVzZSIgbWVhbnMgdXNlIG9mIENvbXBsaWFudAorIENvdmVyZWQgQ29kZSAoZXhjbHVkaW5nIFJlc2VhcmNoIFVzZSkgd2l0aGluIFlvdXIgYnVzaW5lc3MKKyBvciBvcmdhbml6YXRpb24gb25seSBieSBZb3VyIGVtcGxveWVlcyBhbmQvb3IgYWdlbnRzLAorIHN1YmplY3QgdG8gZXhlY3V0aW9uIG9mIEF0dGFjaG1lbnQgQyBieSBZb3UgYW5kIE9yaWdpbmFsCisgQ29udHJpYnV0b3IsIGlmIHJlcXVpcmVkLgorIAorIDEyLiAgIkxpY2Vuc2VlIiBtZWFucyBhbnkgcGFydHkgdGhhdCBoYXMgZW50ZXJlZCBpbnRvIGFuZAorIGhhcyBpbiBlZmZlY3QgYSB2ZXJzaW9uIG9mIHRoaXMgTGljZW5zZSB3aXRoIE9yaWdpbmFsCisgQ29udHJpYnV0b3IuCisgCisgMTMuICAiTW9kaWZpY2F0aW9uKHMpIiBtZWFucyAoaSkgYW55IGNoYW5nZSB0byBDb3ZlcmVkIENvZGU7CisgKGlpKSBhbnkgbmV3IGZpbGUgb3Igb3RoZXIgcmVwcmVzZW50YXRpb24gb2YgY29tcHV0ZXIKKyBwcm9ncmFtIHN0YXRlbWVudHMgdGhhdCBjb250YWlucyBhbnkgcG9ydGlvbiBvZiBDb3ZlcmVkCisgQ29kZTsgYW5kL29yIChpaWkpIGFueSBuZXcgU291cmNlIENvZGUgaW1wbGVtZW50aW5nIGFueQorIHBvcnRpb24gb2YgdGhlIFNwZWNpZmljYXRpb25zLgorIAorIDE0LiAgIk9yaWdpbmFsIENvZGUiIG1lYW5zIHRoZSBpbml0aWFsIFNvdXJjZSBDb2RlIGZvciB0aGUKKyBUZWNobm9sb2d5IGFzIGRlc2NyaWJlZCBvbiB0aGUgVGVjaG5vbG9neSBEb3dubG9hZCBTaXRlLgorIAorIDE1LiAgIk9yaWdpbmFsIENvbnRyaWJ1dG9yIiBtZWFucyBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuLAorIGl0cyBhZmZpbGlhdGVzIGFuZCBpdHMgc3VjY2Vzc29ycyBhbmQgYXNzaWducy4KKyAKKyAxNi4gICJSZWZvcm1hdHRlZCBTcGVjaWZpY2F0aW9ucyIgbWVhbnMgYW55IHJldmlzaW9uIHRvIHRoZQorIFNwZWNpZmljYXRpb25zIHdoaWNoIHRyYW5zbGF0ZXMgb3IgcmVmb3JtYXRzIHRoZQorIFNwZWNpZmljYXRpb25zIChhcyBmb3IgZXhhbXBsZSBpbiBjb25uZWN0aW9uIHdpdGggWW91cgorIGRvY3VtZW50YXRpb24pIGJ1dCB3aGljaCBkb2VzIG5vdCBhbHRlciwgc3Vic2V0IG9yIHN1cGVyc2V0CisgdGhlIGZ1bmN0aW9uYWwgb3Igb3BlcmF0aW9uYWwgYXNwZWN0cyBvZiB0aGUgU3BlY2lmaWNhdGlvbnMuCisgCisgMTcuICAiUmVzZWFyY2ggVXNlIiBtZWFucyB1c2UgYW5kIGRpc3RyaWJ1dGlvbiBvZiBDb3ZlcmVkCisgQ29kZSBvbmx5IGZvciBZb3VyIHJlc2VhcmNoLCBkZXZlbG9wbWVudCwgZWR1Y2F0aW9uYWwgb3IKKyBwZXJzb25hbCBhbmQgaW5kaXZpZHVhbCB1c2UsIGFuZCBleHByZXNzbHkgZXhjbHVkZXMgSW50ZXJuYWwKKyBEZXBsb3ltZW50IFVzZSBhbmQgQ29tbWVyY2lhbCBVc2UuCisgCisgMTguICAiU0NTTCBXZWJwYWdlIiBtZWFucyB0aGUgU3VuIENvbW11bml0eSBTb3VyY2UgbGljZW5zZQorIHdlYnBhZ2UgbG9jYXRlZCBhdCBodHRwOi8vc3VuLmNvbS9zb2Z0d2FyZS9jb21tdW5pdHlzb3VyY2UsCisgb3Igc3VjaCBvdGhlciB1cmwgdGhhdCBTdW4gbWF5IGRlc2lnbmF0ZSBmcm9tIHRpbWUgdG8gdGltZS4KKyAKKyAxOS4gICJTaGFyZWQgTW9kaWZpY2F0aW9ucyIgbWVhbnMgTW9kaWZpY2F0aW9ucyBwcm92aWRlZCBieQorIFlvdSwgYXQgWW91ciBvcHRpb24sIHB1cnN1YW50IHRvIFNlY3Rpb24gMi4yLCBvciByZWNlaXZlZCBieQorIFlvdSBmcm9tIGEgQ29udHJpYnV0b3IgcHVyc3VhbnQgdG8gU2VjdGlvbiAyLjMuCisgCisgMjAuICAiU291cmNlIENvZGUiIG1lYW5zIGNvbXB1dGVyIHByb2dyYW0gc3RhdGVtZW50cyB3cml0dGVuCisgaW4gYW55IGhpZ2gtbGV2ZWwsIHJlYWRhYmxlIGZvcm0gc3VpdGFibGUgZm9yIG1vZGlmaWNhdGlvbgorIGFuZCBkZXZlbG9wbWVudC4KKyAKKyAyMS4gICJTcGVjaWZpY2F0aW9ucyIgbWVhbnMgdGhlIHNwZWNpZmljYXRpb25zIGZvciB0aGUKKyBUZWNobm9sb2d5IGFuZCBvdGhlciBkb2N1bWVudGF0aW9uLCBhcyBkZXNpZ25hdGVkIG9uIHRoZQorIFRlY2hub2xvZ3kgRG93bmxvYWQgU2l0ZSwgYXMgbWF5IGJlIHJldmlzZWQgYnkgT3JpZ2luYWwKKyBDb250cmlidXRvciBmcm9tIHRpbWUgdG8gdGltZS4KKyAKKyAyMi4gICJTdW4gVHJhZGVtYXJrcyIgbWVhbnMgT3JpZ2luYWwgQ29udHJpYnV0b3IncyBTVU4sCisgSkFWQSwgYW5kIEpJTkkgdHJhZGVtYXJrcyBhbmQgbG9nb3MsIHdoZXRoZXIgbm93IHVzZWQgb3IKKyBhZG9wdGVkIGluIHRoZSBmdXR1cmUuICAyMy4gICJUZWNobm9sb2d5IiBtZWFucyB0aGUKKyB0ZWNobm9sb2d5IGRlc2NyaWJlZCBpbiBBdHRhY2htZW50IEIsIGFuZCBVcGdyYWRlcy4KKyAKKyAyNC4gICJUZWNobm9sb2d5IENvbXBhdGliaWxpdHkgS2l0IiBvciAiVENLIiBtZWFucyB0aGUgdGVzdAorIHByb2dyYW1zLCBwcm9jZWR1cmVzIGFuZC9vciBvdGhlciByZXF1aXJlbWVudHMsIGRlc2lnbmF0ZWQKKyBieSBPcmlnaW5hbCBDb250cmlidXRvciBmb3IgdXNlIGluIHZlcmlmeWluZyBjb21wbGlhbmNlIG9mCisgQ292ZXJlZCBDb2RlIHdpdGggdGhlIFNwZWNpZmljYXRpb25zLCBpbiBjb25qdW5jdGlvbiB3aXRoCisgdGhlIE9yaWdpbmFsIENvZGUgYW5kIFVwZ3JhZGVkIENvZGUuICBPcmlnaW5hbCBDb250cmlidXRvcgorIG1heSwgaW4gaXRzIHNvbGUgZGlzY3JldGlvbiBhbmQgZnJvbSB0aW1lIHRvIHRpbWUsIHJldmlzZSBhCisgVENLIHRvIGNvcnJlY3QgZXJyb3JzIGFuZC9vciBvbWlzc2lvbnMgYW5kIGluIGNvbm5lY3Rpb24KKyB3aXRoIFVwZ3JhZGVzLgorIAorIDI1LiAgIlRlY2hub2xvZ3kgRG93bmxvYWQgU2l0ZSIgbWVhbnMgdGhlIHNpdGUocykgZGVzaWduYXRlZAorIGJ5IE9yaWdpbmFsIENvbnRyaWJ1dG9yIGZvciBhY2Nlc3MgdG8gdGhlIE9yaWdpbmFsIENvZGUsCisgVXBncmFkZWQgQ29kZSwgVENLIGFuZCBTcGVjaWZpY2F0aW9ucy4KKyAKKyAyNi4gICJVcGdyYWRlKHMpIiBtZWFucyBuZXcgdmVyc2lvbnMgb2YgVGVjaG5vbG9neQorIGRlc2lnbmF0ZWQgZXhjbHVzaXZlbHkgYnkgT3JpZ2luYWwgQ29udHJpYnV0b3IgYXMgYW4KKyAiVXBncmFkZSIgYW5kIHJlbGVhc2VkIGJ5IE9yaWdpbmFsIENvbnRyaWJ1dG9yIGZyb20gdGltZSB0bworIHRpbWUuCisgCisgMjcuICAiVXBncmFkZWQgQ29kZSIgbWVhbnMgdGhlIFNvdXJjZSBDb2RlIGZvciBVcGdyYWRlcywKKyBwb3NzaWJseSBpbmNsdWRpbmcgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IENvbnRyaWJ1dG9ycy4KKyAKKyAyOC4gICJZb3UocikiIG1lYW5zIGFuIGluZGl2aWR1YWwsIG9yIGEgbGVnYWwgZW50aXR5IGFjdGluZworIGJ5IGFuZCB0aHJvdWdoIGFuIGluZGl2aWR1YWwgb3IgaW5kaXZpZHVhbHMsIGV4ZXJjaXNpbmcKKyByaWdodHMgZWl0aGVyIHVuZGVyIHRoaXMgTGljZW5zZSBvciB1bmRlciBhIGZ1dHVyZSB2ZXJzaW9uCisgb2YgdGhpcyBMaWNlbnNlIGlzc3VlZCBwdXJzdWFudCB0byBTZWN0aW9uIDQuMS4gIEZvciBsZWdhbAorIGVudGl0aWVzLCAiWW91KHIpIiBpbmNsdWRlcyBhbnkgZW50aXR5IHRoYXQgYnkgbWFqb3JpdHkKKyB2b3RpbmcgaW50ZXJlc3QgY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyCisgY29tbW9uIGNvbnRyb2wgd2l0aCBZb3UuCisgCisgQVRUQUNITUVOVCBBCisgCisgUkVRVUlSRUQgTk9USUNFUworIAorIAorIEFUVEFDSE1FTlQgQS0xCisgCisgUkVRVUlSRUQgSU4gQUxMIENBU0VTCisgCisgIlRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUsIG9yIHRoZSBmaWxlcyBpbmNsdWRlZCB3aXRoIHRoaXMKKyBmaWxlLCBhcmUgc3ViamVjdCB0byB0aGUgY3VycmVudCB2ZXJzaW9uIG9mIFN1biBDb21tdW5pdHkKKyBTb3VyY2UgTGljZW5zZSBmb3IgW2ZpbGwgaW4gbmFtZSBvZiBhcHBsaWNhYmxlIFRlY2hub2xvZ3ldCisgKHRoZSAiTGljZW5zZSIpOyBZb3UgbWF5IG5vdCB1c2UgdGhpcyBmaWxlIGV4Y2VwdCBpbgorIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gIFlvdSBtYXkgb2J0YWluIGEgY29weSBvZiB0aGUKKyBMaWNlbnNlIGF0IGh0dHA6Ly9zdW4uY29tL3NvZnR3YXJlL2NvbW11bml0eXNvdXJjZS4gIFNlZSB0aGUKKyBMaWNlbnNlIGZvciB0aGUgcmlnaHRzLCBvYmxpZ2F0aW9ucyBhbmQgbGltaXRhdGlvbnMKKyBnb3Zlcm5pbmcgdXNlIG9mIHRoZSBjb250ZW50cyBvZiB0aGUgZmlsZS4KKyAKKyAKKyBUaGUgT3JpZ2luYWwgYW5kIFVwZ3JhZGVkIENvZGUgaXMgW2ZpbGwgaW4gbmFtZSBhbmQgdmVyc2lvbgorIG9mIGFwcGxpY2FibGUgVGVjaG5vbG9neV0uICBUaGUgZGV2ZWxvcGVyIG9mIHRoZSBPcmlnaW5hbAorIGFuZCBVcGdyYWRlZCBDb2RlIGlzIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gIFN1bgorIE1pY3Jvc3lzdGVtcywgSW5jLiAgb3ducyB0aGUgY29weXJpZ2h0cyBpbiB0aGUgcG9ydGlvbnMgaXQKKyBjcmVhdGVkLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAKKyAKKyBDb250cmlidXRvcihzKToKKyBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworIAorIEFzc29jaWF0ZWQgVGVzdCBTdWl0ZShzKSBMb2NhdGlvbjoKKyBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworIAorIAorIAorIEFUVEFDSE1FTlQgQS0yCisgCisgU0FNUExFIExJQ0VOU0VFIENFUlRJRklDQVRJT04KKyAKKyAiQnkgY2xpY2tpbmcgdGhlIGBBZ3JlZScgYnV0dG9uIGJlbG93LCBZb3UgY2VydGlmeSB0aGF0IFlvdQorIGFyZSBhIExpY2Vuc2VlIGluIGdvb2Qgc3RhbmRpbmcgdW5kZXIgdGhlIFN1biBDb21tdW5pdHkKKyBTb3VyY2UgTGljZW5zZSwgW2ZpbGwgaW4gYXBwbGljYWJsZSBUZWNobm9sb2d5IGFuZCBWZXJzaW9uXQorICgiTGljZW5zZSIpIGFuZCB0aGF0IFlvdXIgYWNjZXNzLCB1c2UgYW5kIGRpc3RyaWJ1dGlvbiBvZgorIGNvZGUgYW5kIGluZm9ybWF0aW9uIFlvdSBtYXkgb2J0YWluIGF0IHRoaXMgc2l0ZSBpcyBzdWJqZWN0CisgdG8gdGhlIExpY2Vuc2UuIgorIAorIAorIAorIEFUVEFDSE1FTlQgQS0zCisgCisgUkVRVUlSRUQgU1RVREVOVCBOT1RJRklDQVRJT04KKyAKKyAiVGhpcyBzb2Z0d2FyZSBhbmQgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGhhcyBiZWVuIG9idGFpbmVkCisgYnkgeW91ciBlZHVjYXRpb25hbCBpbnN0aXR1dGlvbiBzdWJqZWN0IHRvIHRoZSBTdW4gQ29tbXVuaXR5CisgU291cmNlIExpY2Vuc2UsIFtmaWxsIGluIGFwcGxpY2FibGUgVGVjaG5vbG9neV0uICBZb3UgaGF2ZQorIGJlZW4gcHJvdmlkZWQgYWNjZXNzIHRvIHRoZSBzb2Z0d2FyZSBhbmQgcmVsYXRlZAorIGRvY3VtZW50YXRpb24gZm9yIHVzZSBvbmx5IGluIGNvbm5lY3Rpb24gd2l0aCB5b3VyIGNvdXJzZQorIHdvcmsgYW5kIHJlc2VhcmNoIGFjdGl2aXRpZXMgYXMgYSBtYXRyaWN1bGF0ZWQgc3R1ZGVudCBvZgorIHlvdXIgZWR1Y2F0aW9uYWwgaW5zdGl0dXRpb24uICBBbnkgb3RoZXIgdXNlIGlzIGV4cHJlc3NseQorIHByb2hpYml0ZWQuCisgCisgVEhJUyBTT0ZUV0FSRSBBTkQgUkVMQVRFRCBET0NVTUVOVEFUSU9OIENPTlRBSU5TIFBST1BSSUVUQVJZCisgTUFURVJJQUwgT0YgU1VOIE1JQ1JPU1lTVEVNUywgSU5DLCBXSElDSCBBUkUgUFJPVEVDVEVEIEJZCisgVkFSSU9VUyBJTlRFTExFQ1RVQUwgUFJPUEVSVFkgUklHSFRTLgorIAorIFlvdSBtYXkgbm90IHVzZSB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUKKyBMaWNlbnNlLiAgWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZSBMaWNlbnNlIG9uIHRoZSB3ZWIgYXQKKyBodHRwOi8vc3VuLmNvbS9zb2Z0d2FyZS9jb21tdW5pdHlzb3VyY2UuIgorIAorIAorIAorIEFUVEFDSE1FTlQgQgorIAorIEphdmEodG0pIDIgU0RLIFRlY2hub2xvZ3kKKyAKKyBEZXNjcmlwdGlvbiBvZiAiVGVjaG5vbG9neSIKKyAKKyBKYXZhKHRtKSAyIFNESyBUZWNobm9sb2d5IHYuMS4yIGFzIGRlc2NyaWJlZCBvbiB0aGUKKyBUZWNobm9sb2d5IERvd25sb2FkIFNpdGUuCisgCisgCisgCisgQVRUQUNITUVOVCBDCisgCisgSU5URVJOQUwgREVQTE9ZTUVOVCBVU0UKKyAKKyBUaGlzIEF0dGFjaG1lbnQgQyBpcyBvbmx5IGVmZmVjdGl2ZSBmb3IgdGhlIFRlY2hub2xvZ3kKKyBzcGVjaWZpZWQgaW4gQXR0YWNobWVudCBCLCB1cG9uIGV4ZWN1dGlvbiBvZiBBdHRhY2htZW50IEQKKyAoQ29tbWVyY2lhbCBVc2UgTGljZW5zZSkgaW5jbHVkaW5nIHRoZSByZXF1aXJlbWVudCB0byBwYXkKKyByb3lhbHRpZXMuICBJbiB0aGUgZXZlbnQgb2YgYSBjb25mbGljdCBiZXR3ZWVuIHRoZSB0ZXJtcyBvZgorIHRoaXMgQXR0YWNobWVudCBDIGFuZCBBdHRhY2htZW50IEQsIHRoZSB0ZXJtcyBvZiBBdHRhY2htZW50CisgRCBzaGFsbCBnb3Zlcm4uCisgCisgMS4gIEludGVybmFsIERlcGxveW1lbnQgTGljZW5zZSBHcmFudC4gIFN1YmplY3QgdG8gWW91cgorIGNvbXBsaWFuY2Ugd2l0aCBTZWN0aW9uIDIgYmVsb3csIGFuZCBTZWN0aW9uIDguMTAgb2YgdGhlCisgUmVzZWFyY2ggVXNlIGxpY2Vuc2U7IGluIGFkZGl0aW9uIHRvIHRoZSBSZXNlYXJjaCBVc2UKKyBsaWNlbnNlIGFuZCB0aGUgVENLIGxpY2Vuc2UsIE9yaWdpbmFsIENvbnRyaWJ1dG9yIGdyYW50cyB0bworIFlvdSBhIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlLCB0byB0aGUgZXh0ZW50IG9mCisgT3JpZ2luYWwgQ29udHJpYnV0b3IncyBJbnRlbGxlY3R1YWwgUHJvcGVydHkgUmlnaHRzIGNvdmVyaW5nCisgdGhlIE9yaWdpbmFsIENvZGUsIFVwZ3JhZGVkIENvZGUgYW5kIFNwZWNpZmljYXRpb25zLCB0byBkbworIHRoZSBmb2xsb3dpbmc6CisgCisgYSkgcmVwcm9kdWNlIGFuZCBkaXN0cmlidXRlIGludGVybmFsbHksIE9yaWdpbmFsIENvZGUgYW5kCisgVXBncmFkZWQgQ29kZSBhcyBwYXJ0IG9mIENvbXBsaWFudCBDb3ZlcmVkIENvZGUsIGFuZAorIFNwZWNpZmljYXRpb25zLCBmb3IgSW50ZXJuYWwgRGVwbG95bWVudCBVc2UsCisgCisgYikgY29tcGlsZSBzdWNoIE9yaWdpbmFsIENvZGUgYW5kIFVwZ3JhZGVkIENvZGUsIGFzIHBhcnQgb2YKKyBDb21wbGlhbnQgQ292ZXJlZCBDb2RlLCBhbmQgcmVwcm9kdWNlIGFuZCBkaXN0cmlidXRlCisgaW50ZXJuYWxseSB0aGUgc2FtZSBpbiBFeGVjdXRhYmxlIGZvcm0gZm9yIEludGVybmFsCisgRGVwbG95bWVudCBVc2UsIGFuZAorIAorIGMpIHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBpbnRlcm5hbGx5LCBSZWZvcm1hdHRlZAorIFNwZWNpZmljYXRpb25zIGZvciB1c2UgaW4gY29ubmVjdGlvbiB3aXRoIEludGVybmFsCisgRGVwbG95bWVudCBVc2UuCisgCisgMi4gIEFkZGl0aW9uYWwgUmVxdWlyZW1lbnRzIGFuZCBSZXNwb25zaWJpbGl0aWVzLiAgSW4KKyBhZGRpdGlvbiB0byB0aGUgcmVxdWlyZW1lbnRzIGFuZCByZXNwb25zaWJpbGl0aWVzIGRlc2NyaWJlZAorIHVuZGVyIFNlY3Rpb24gMy4xIG9mIHRoZSBSZXNlYXJjaCBVc2UgbGljZW5zZSwgYW5kIGFzIGEKKyBjb25kaXRpb24gdG8gZXhlcmNpc2luZyB0aGUgcmlnaHRzIGdyYW50ZWQgdW5kZXIgU2VjdGlvbiAzCisgYWJvdmUsIFlvdSBhZ3JlZSB0byB0aGUgZm9sbG93aW5nIGFkZGl0aW9uYWwgcmVxdWlyZW1lbnRzCisgYW5kIHJlc3BvbnNpYmlsaXRpZXM6CisgCisgMi4xIENvbXBhdGliaWxpdHkuICBBbGwgQ292ZXJlZCBDb2RlIG11c3QgYmUgQ29tcGxpYW50CisgQ292ZXJlZCBDb2RlIHByaW9yIHRvIGFueSBJbnRlcm5hbCBEZXBsb3ltZW50IFVzZSBvcgorIENvbW1lcmNpYWwgVXNlLCB3aGV0aGVyIG9yaWdpbmF0aW5nIHdpdGggWW91IG9yIGFjcXVpcmVkCisgZnJvbSBhIHRoaXJkIHBhcnR5LiAgU3VjY2Vzc2Z1bCBjb21wYXRpYmlsaXR5IHRlc3RpbmcgbXVzdAorIGJlIGNvbXBsZXRlZCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFRDSyBMaWNlbnNlLiAgSWYgWW91CisgbWFrZSBhbnkgZnVydGhlciBNb2RpZmljYXRpb25zIHRvIGFueSBDb3ZlcmVkIENvZGUKKyBwcmV2aW91c2x5IGRldGVybWluZWQgdG8gYmUgQ29tcGxpYW50IENvdmVyZWQgQ29kZSwgeW91IG11c3QKKyBlbnN1cmUgdGhhdCBpdCBjb250aW51ZXMgdG8gYmUgQ29tcGxpYW50IENvdmVyZWQgQ29kZS4KKyAKKyAKKyAKKyBBVFRBQ0hNRU5UIEQgQ09NTUVSQ0lBTCBVU0UgTElDRU5TRQorIAorIDEuICBFZmZlY3QuICBUaGlzIEF0dGFjaG1lbnQgRCBpcyBlZmZlY3RpdmUgb25seSBpZiBzaWduZWQKKyBiZWxvdyBieSBZb3UgYW5kIE9yaWdpbmFsIENvbnRyaWJ1dG9yLCBhbmQgYXBwbGllcyB0byBZb3VyCisgQ29tbWVyY2lhbCBVc2Ugb2YgT3JpZ2luYWwgQ29kZSBhbmQgVXBncmFkZWQgQ29kZS4KKyAKKyAyLiAgVGVybS4gIFVwb24gZXhlY3V0aW9uIG9mIHRoaXMgQXR0YWNobWVudCBEIGJ5IFlvdSBhbmQKKyBPcmlnaW5hbCBDb250cmlidXRvciwgdGhpcyBDb21tZXJjaWFsIFVzZSBsaWNlbnNlIHNoYWxsIGhhdmUKKyBhbiBpbml0aWFsIHRlcm0gb2YgMyB5ZWFycyBhbmQgc2hhbGwgYXV0b21hdGljYWxseSByZW5ldyBmb3IKKyBhZGRpdGlvbmFsIG9uZSB5ZWFyIHRlcm1zIHVubGVzcyBlaXRoZXIgcGFydHkgcHJvdmlkZXMKKyBub3RpY2UgdG8gdGhlIG90aGVyIG5vIGxlc3MgdGhhbiA2MCBkYXlzIHByaW9yIHRvIGFuCisgYW5uaXZlcnNhcnkgZGF0ZS4KKyAKKyAzLiAgQ29tbWVyY2lhbCBVc2UgTGljZW5zZSBHcmFudC4gIFN1YmplY3QgdG8gWW91cgorIGNvbXBsaWFuY2Ugd2l0aCBTZWN0aW9uIDQgYmVsb3csIFNlY3Rpb24gOC4xMCBvZiB0aGUKKyBSZXNlYXJjaCBVc2UgbGljZW5zZSwgYW5kIHRoZSBUQ0sgbGljZW5zZTsgaW4gYWRkaXRpb24gdG8KKyB0aGUgUmVzZWFyY2ggVXNlIGxpY2Vuc2UsIHRoZSBUQ0sgbGljZW5zZSwgYW5kIHRoZSBJbnRlcm5hbAorIERlcGxveW1lbnQgVXNlIGxpY2Vuc2UsIE9yaWdpbmFsIENvbnRyaWJ1dG9yIGdyYW50cyB0byBZb3UgYQorIHdvcmxkd2lkZSwgbm9uLWV4Y2x1c2l2ZSwgbm9uLXRyYW5zZmVyYWJsZSBsaWNlbnNlLCB0byB0aGUKKyBleHRlbnQgb2YgT3JpZ2luYWwgQ29udHJpYnV0b3IncyBJbnRlbGxlY3R1YWwgUHJvcGVydHkKKyBSaWdodHMgY292ZXJpbmcgdGhlIE9yaWdpbmFsIENvZGUsIFVwZ3JhZGVkIENvZGUgYW5kCisgU3BlY2lmaWNhdGlvbnMsIHRvIGRvIHRoZSBmb2xsb3dpbmc6CisgCisgYSkgcmVwcm9kdWNlIGFuZCBkaXN0cmlidXRlIENvbXBsaWFudCBDb3ZlcmVkIENvZGU7CisgCisgYikgY29tcGlsZSBDb21wbGlhbnQgQ292ZXJlZCBDb2RlIGFuZCByZXByb2R1Y2UgYW5kCisgZGlzdHJpYnV0ZSB0aGUgc2FtZSBpbiBFeGVjdXRhYmxlIGZvcm0gdGhyb3VnaCBtdWx0aXBsZQorIHRpZXJzIG9mIGRpc3RyaWJ1dGlvbjsgYW5kCisgCisgYykgcmVwcm9kdWNlIGFuZCBkaXN0cmlidXRlIFJlZm9ybWF0dGVkIFNwZWNpZmljYXRpb25zIGluCisgYXNzb2NpYXRpb24gd2l0aCBDb21wbGlhbnQgQ292ZXJlZCBDb2RlLgorIAorIDQuICBBZGRpdGlvbmFsIFJlcXVpcmVtZW50cyBhbmQgUmVzcG9uc2liaWxpdGllcy4gIEluCisgYWRkaXRpb24gdG8gdGhlIHJlcXVpcmVtZW50cyBhbmQgcmVzcG9uc2liaWxpdGllcyBzcGVjaWZpZWQKKyBpbiB0aGUgUmVzZWFyY2ggVXNlIGxpY2Vuc2UsIHRoZSBUQ0sgbGljZW5zZSBhbmQgdGhlCisgSW50ZXJuYWwgRGVwbG95bWVudCBsaWNlbnNlLCBhbmQgYXMgYSBjb25kaXRpb24gdG8KKyBleGVyY2lzaW5nIHRoZSByaWdodHMgZ3JhbnRlZCBpbiBTZWN0aW9uIDMgYWJvdmUsIFlvdSBhZ3JlZQorIHRvIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCByZXF1aXJlbWVudHMgYW5kCisgcmVzcG9uc2liaWxpdGllczoKKyAKKyBhKSBEaXN0cmlidXRpb24gb2YgU291cmNlIENvZGUuICBTb3VyY2UgQ29kZSBvZiBDb21wbGlhbnQKKyBDb3ZlcmVkIENvZGUgbWF5IGJlIGRpc3RyaWJ1dGVkIG9ubHkgdG8gYW5vdGhlciBMaWNlbnNlZSBvZgorIHRoZSBzYW1lIFRlY2hub2xvZ3kuCisgCisgYikgRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgQ29kZS4gIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUKKyBFeGVjdXRhYmxlIHZlcnNpb24ocykgb2YgQ29tcGxpYW50IENvdmVyZWQgQ29kZSB1bmRlciBhCisgbGljZW5zZSBvZiBZb3VyIGNob2ljZSwgd2hpY2ggbWF5IGNvbnRhaW4gdGVybXMgZGlmZmVyZW50CisgZnJvbSB0aGlzIExpY2Vuc2UsIHByb3ZpZGVkIChpKSB0aGF0IFlvdSBhcmUgaW4gY29tcGxpYW5jZQorIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgYW5kIChpaSkgWW91IG11c3QgbWFrZSBpdAorIGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcworIExpY2Vuc2UgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBub3QgYnkgT3JpZ2luYWwKKyBDb250cmlidXRvciBvciBhbnkgb3RoZXIgQ29udHJpYnV0b3IuCisgCisgYykgQnJhbmRpbmcuICBQcm9kdWN0cyBpbnRlZ3JhdGluZyBDb21wbGlhbnQgQ292ZXJlZCBDb2RlCisgdXNlZCBmb3IgQ29tbWVyY2lhbCBVc2UgbXVzdCBiZSBicmFuZGVkIHdpdGggdGhlIFRlY2hub2xvZ3kKKyBjb21wbGlhbmNlIGxvZ28gdW5kZXIgYSBzZXBhcmF0ZSB0cmFkZW1hcmsgbGljZW5zZSByZXF1aXJlZAorIHRvIGJlIGV4ZWN1dGVkIGJ5IFlvdSBhbmQgT3JpZ2luYWwgQ29udHJpYnV0b3IgY29uY3VycmVudAorIHdpdGggZXhlY3V0aW9uIG9mIHRoaXMgQXR0YWNobWVudCBELgorIAorIDUuICBJbmRlbW5pdHkvTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuICBUaGUgcHJvdmlzaW9ucyBvZgorIFNlY3Rpb24gNy4xIG9mIHRoZSBSZXNlYXJjaCBVc2UgbGljZW5zZSBhcmUgc3VwZXJzZWRlZCBieQorIHRoZSBmb2xsb3dpbmc6CisgCisgYSkgWW91ciBJbmRlbW5pdHkgT2JsaWdhdGlvbi4gIFlvdSBoZXJlYnkgYWdyZWUgdG8gZGVmZW5kLAorIGF0IFlvdXIgZXhwZW5zZSwgYW55IGxlZ2FsIHByb2NlZWRpbmcgYnJvdWdodCBhZ2FpbnN0CisgT3JpZ2luYWwgQ29udHJpYnV0b3Igb3IgYW55IExpY2Vuc2VlIHRvIHRoZSBleHRlbnQgaXQgaXMKKyBiYXNlZCBvbiBhIGNsYWltOiAgKGkpIHRoYXQgdGhlIHVzZSwgcmVwcm9kdWN0aW9uIG9yCisgZGlzdHJpYnV0aW9uIG9mIGFueSBvZiBZb3VyIEVycm9yIENvcnJlY3Rpb25zIG9yIFNoYXJlZAorIE1vZGlmaWNhdGlvbnMgaXMgYW4gaW5mcmluZ2VtZW50IG9mIGEgdGhpcmQgcGFydHkgdHJhZGUKKyBzZWNyZXQgb3IgYSBjb3B5cmlnaHQgaW4gYSBjb3VudHJ5IHRoYXQgaXMgYSBzaWduYXRvcnkgdG8KKyB0aGUgQmVybmUgQ29udmVudGlvbjsgKGlpKSBhcmlzaW5nIGluIGNvbm5lY3Rpb24gd2l0aCBhbnkKKyByZXByZXNlbnRhdGlvbiwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSwgbGlhYmlsaXR5IG9yCisgb3RoZXIgbGljZW5zZSB0ZXJtcyBZb3UgbWF5IG9mZmVyIGluIGNvbm5lY3Rpb24gd2l0aCBhbnkKKyBDb3ZlcmVkIENvZGU7IG9yIChpaWkpIGFyaXNpbmcgZnJvbSBZb3VyIENvbW1lcmNpYWwgVXNlIG9mCisgQ292ZXJlZCBDb2RlLCBvdGhlciB0aGFuIGEgY2xhaW0gY292ZXJlZCBieSBTZWN0aW9uIDUuYikKKyBiZWxvdywgb3IgYSBwYXRlbnQgY2xhaW0gYmFzZWQgc29sZWx5IG9uIENvdmVyZWQgQ29kZSBub3QKKyBwcm92aWRlZCBieSBZb3UuICBZb3Ugd2lsbCBwYXkgYWxsIGRhbWFnZXMgY29zdHMgYW5kIGZlZXMKKyBhd2FyZGVkIGJ5IGEgY291cnQgb2YgY29tcGV0ZW50IGp1cmlzZGljdGlvbiwgb3Igc3VjaAorIHNldHRsZW1lbnQgYW1vdW50IG5lZ290aWF0ZWQgYnkgWW91LCBhdHRyaWJ1dGFibGUgdG8gc3VjaAorIGNsYWltLgorIAorIGIpIE9yaWdpbmFsIENvbnRyaWJ1dG9yJ3MgSW5kZW1uaXR5IE9ibGlnYXRpb24uICBPcmlnaW5hbAorIENvbnRyaWJ1dG9yIHdpbGwgZGVmZW5kLCBhdCBpdHMgZXhwZW5zZSwgYW55IGxlZ2FsCisgcHJvY2VlZGluZyBicm91Z2h0IGFnYWluc3QgWW91LCB0byB0aGUgZXh0ZW50IGl0IGlzIGJhc2VkIG9uCisgYSBjbGFpbSB0aGF0IFlvdXIgYXV0aG9yaXplZCBDb21tZXJjaWFsIFVzZSBvZiBPcmlnaW5hbCBDb2RlCisgYW5kIFVwZ3JhZGVkIENvZGUgaXMgYW4gaW5mcmluZ2VtZW50IG9mIGEgdGhpcmQgcGFydHkgdHJhZGUKKyBzZWNyZXQgb3IgYSBjb3B5cmlnaHQgaW4gYSBjb3VudHJ5IHRoYXQgaXMgYSBzaWduYXRvcnkgdG8KKyB0aGUgQmVybmUgQ29udmVudGlvbiwgYW5kIHdpbGwgcGF5IGFsbCBkYW1hZ2VzIGNvc3RzIGFuZAorIGZlZXMgYXdhcmRlZCBieSBhIGNvdXJ0IG9mIGNvbXBldGVudCBqdXJpc2RpY3Rpb24sIG9yIHN1Y2gKKyBzZXR0bGVtZW50IGFtb3VudCBuZWdvdGlhdGVkIGJ5IE9yaWdpbmFsIENvbnRyaWJ1dG9yLAorIGF0dHJpYnV0YWJsZSB0byBzdWNoIGNsYWltLiAgVGhlIGZvcmVnb2luZyBzaGFsbCBub3QgYXBwbHkKKyB0byBhbnkgY2xhaW1zIG9mIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmZyaW5nZW1lbnQgYmFzZWQKKyB1cG9uIHRoZSBjb21iaW5hdGlvbiBvZiBjb2RlIG9yIGRvY3VtZW50YXRpb24gc3VwcGxpZWQgYnkKKyBPcmlnaW5hbCBDb250cmlidXRvciB3aXRoIGNvZGUsIHRlY2hub2xvZ3kgb3IgZG9jdW1lbnRhdGlvbgorIGZyb20gb3RoZXIgc291cmNlcy4KKyAKKyBjKSBSaWdodCBvZiBJbnRlcnZlbnRpb24uICBPcmlnaW5hbCBDb250cmlidXRvciB3aWxsIGhhdmUKKyB0aGUgcmlnaHQsIGJ1dCBub3QgdGhlIG9ibGlnYXRpb24sIHRvIGRlZmVuZCBZb3UsIGF0CisgT3JpZ2luYWwgQ29udHJpYnV0b3IncyBleHBlbnNlLCBpbiBjb25uZWN0aW9uIHdpdGggYSBjbGFpbQorIHRoYXQgWW91ciBDb21tZXJjaWFsIFVzZSBvZiBPcmlnaW5hbCBDb2RlIGFuZCBVcGdyYWRlZCBDb2RlCisgaXMgYW4gaW5mcmluZ2VtZW50IG9mIGEgdGhpcmQgcGFydHkgcGF0ZW50IGFuZCB3aWxsLCBpZgorIE9yaWdpbmFsIENvbnRyaWJ1dG9yIGNob29zZXMgdG8gZGVmZW5kIFlvdSwgcGF5IGFsbCBkYW1hZ2VzCisgY29zdHMgYW5kIGZlZXMgYXdhcmRlZCBieSBhIGNvdXJ0IG9mIGNvbXBldGVudCBqdXJpc2RpY3Rpb24sCisgb3Igc3VjaCBzZXR0bGVtZW50IGFtb3VudCBuZWdvdGlhdGVkIGJ5IE9yaWdpbmFsCisgQ29udHJpYnV0b3IsIGF0dHJpYnV0YWJsZSB0byBzdWNoIGNsYWltLgorIAorIGQpIFByZXJlcXVpc2l0ZXMuICBVbmRlciBTZWN0aW9ucyA1LmIpIGFuZCBjKSBhYm92ZSwgWW91CisgbXVzdCwgYW5kIHVuZGVyIFNlY3Rpb24gNS5hKSBhYm92ZSwgT3JpZ2luYWwgQ29udHJpYnV0b3Igb3IKKyBhbnkgTGljZW5zZWUgbXVzdDogIChpKSBwcm92aWRlIG5vdGljZSBvZiB0aGUgY2xhaW0gcHJvbXB0bHkKKyB0byB0aGUgcGFydHkgcHJvdmlkaW5nIGFuIGluZGVtbml0eTsgKGlpKSBnaXZlIHRoZQorIGluZGVtbmlmeWluZyBwYXJ0eSBzb2xlIGNvbnRyb2wgb2YgdGhlIGRlZmVuc2UgYW5kCisgc2V0dGxlbWVudCBvZiB0aGUgY2xhaW07IChpaWkpIHByb3ZpZGUgdGhlIGluZGVtbmlmeWluZworIHBhcnR5LCBhdCBpbmRlbW5pZnlpbmcgcGFydHkncyBleHBlbnNlLCBhbGwgYXZhaWxhYmxlCisgaW5mb3JtYXRpb24sIGFzc2lzdGFuY2UgYW5kIGF1dGhvcml0eSB0byBkZWZlbmQ7IGFuZCAoaXYpCisgbm90IGhhdmUgY29tcHJvbWlzZWQgb3Igc2V0dGxlZCBzdWNoIGNsYWltIG9yIHByb2NlZWRpbmcKKyB3aXRob3V0IHRoZSBpbmRlbW5pZnlpbmcgcGFydHkncyBwcmlvciB3cml0dGVuIGNvbnNlbnQuCisgCisgZSkgQWRkaXRpb25hbCBSZW1lZGllcy4gIFNob3VsZCBhbnkgT3JpZ2luYWwgQ29kZSwgVXBncmFkZWQKKyBDb2RlLCBUQ0ssIFNwZWNpZmljYXRpb25zLCBvciBNb2RpZmljYXRpb25zIGJlY29tZSwgb3IgaW4KKyB0aGUgaW5kZW1uaWZ5aW5nIHBhcnR5J3Mgb3BpbmlvbiBiZSBsaWtlbHkgdG8gYmVjb21lLCB0aGUKKyBzdWJqZWN0IG9mIGEgY2xhaW0gb2YgaW5mcmluZ2VtZW50IGZvciB3aGljaCBpbmRlbW5pdHkgaXMKKyBwcm92aWRlZCBhYm92ZSwgdGhlIGluZGVtbmlmeWluZyBwYXJ0eSBtYXksIGF0IGl0cyBzb2xlCisgb3B0aW9uLCBhdHRlbXB0IHRvIHByb2N1cmUgb24gcmVhc29uYWJsZSB0ZXJtcyB0aGUgcmlnaHRzCisgbmVjZXNzYXJ5IGZvciB0aGUgaW5kZW1uaWZpZWQgcGFydHkgdG8gZXhlcmNpc2UgaXRzIGxpY2Vuc2UKKyByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byB0aGUgaW5mcmluZ2luZworIGl0ZW1zLCBvciB0byBtb2RpZnkgdGhlIGluZnJpbmdpbmcgaXRlbXMgc28gdGhhdCB0aGV5IGFyZSBubworIGxvbmdlciBpbmZyaW5naW5nIHdpdGhvdXQgc3Vic3RhbnRpYWxseSBpbXBhaXJpbmcgdGhlaXIKKyBmdW5jdGlvbiBvciBwZXJmb3JtYW5jZS4gIElmIHRoZSBpbmRlbW5pZnlpbmcgcGFydHkgaXMKKyB1bmFibGUgdG8gZG8gdGhlIGZvcmVnb2luZyBhZnRlciByZWFzb25hYmxlIGVmZm9ydHMsIHRoZW4KKyB0aGUgaW5kZW1uaWZ5aW5nIHBhcnR5IG1heSBzZW5kIGEgbm90aWNlIG9mIHN1Y2ggaW5hYmlsaXR5CisgdG8gdGhlIGluZGVtbmlmaWVkIHBhcnR5IHRvZ2V0aGVyIHdpdGggYSByZWZ1bmQgb2YgYW55CisgbGljZW5zZSBmZWVzIHJlY2VpdmVkIGJ5IHRoZSBpbmRlbW5pZnlpbmcgcGFydHkgZnJvbSB0aGUKKyBpbmRlbW5pZmllZCBwYXJ0eSBmb3IgdGhlIGluZnJpbmdpbmcgaXRlbXMgYXBwbGljYWJsZSB0byB0aGUKKyBpbmRlbW5pZmllZCBwYXJ0eSdzIGZ1dHVyZSB1c2Ugb3IgZGlzdHJpYnV0aW9uIG9mIHN1Y2gKKyBpbmZyaW5naW5nIGl0ZW1zLCBpbiB3aGljaCBjYXNlIHRoZSBpbmRlbW5pZiB5aW5nIHBhcnR5IHdpbGwKKyBub3QgYmUgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyByZXN1bHRpbmcgZnJvbSBpbmZyaW5naW5nCisgYWN0aXZpdHkgd2l0aCByZXNwZWN0IHRvIHRoZSBpbmZyaW5naW5nIGl0ZW1zIG9jY3VycmluZworIGFmdGVyIHN1Y2ggbm90aWNlIGFuZCByZWZ1bmQuCisgCisgNi4gIFN1cHBvcnQgUHJvZ3JhbXMuCisgCisgU3VwcG9ydCB0byBZb3UuICBUZWNobmljYWwgc3VwcG9ydCBpcyBub3QgcHJvdmlkZWQgdG8gWW91IGJ5CisgT3JpZ2luYWwgQ29udHJpYnV0b3IgdW5kZXIgdGhpcyBMaWNlbnNlLiAgWW91IG1heSBjb250cmFjdAorIGZvciBvbmUgb3IgbW9yZSBzdXBwb3J0IHByb2dyYW1zIGZyb20gT3JpZ2luYWwgQ29udHJpYnV0b3IKKyByZWxhdGluZyB0byB0aGUgVGVjaG5vbG9neSB3aGljaCBhcmUgZGVzY3JpYmVkIG9uIHRoZSBTQ1NMCisgV2VicGFnZS4KKyAKKyBDdXN0b21lciBTdXBwb3J0LiAgWW91IGFyZSByZXNwb25zaWJsZSBmb3IgcHJvdmlkaW5nCisgdGVjaG5pY2FsIGFuZCBtYWludGVuYW5jZSBzdXBwb3J0IHNlcnZpY2VzIHRvIFlvdXIgY3VzdG9tZXJzCisgZm9yIFlvdXIgcHJvZHVjdHMgYW5kIHNlcnZpY2VzIGluY29ycG9yYXRpbmcgdGhlIENvbXBsaWFudAorIENvdmVyZWQgY29kZS4KKyAKKyA3LiAgUm95YWx0aWVzIGFuZCBQYXltZW50cy4KKyAKKyBUZWNobm9sb2d5IHNwZWNpZmllZCBpbiBBdHRhY2htZW50IEIuCisgCisgCisgRmllbGQgb2YgVXNlOl9fX19fX19fX19fX19fX19fX19fCisgCisgUm95YWx0eSBwZXIgVW5pdCAkX19fX19fX19fX19fXworIAorIAorIGIpIFJveWFsdHkgUGF5bWVudHMuICBQYXltZW50IG9mIHJveWFsdGllcyBzaGFsbCBiZSBtYWRlCisgcXVhcnRlcmx5LCBzaGFsbCBiZSBkdWUgdGhpcnR5ICgzMCkgZGF5cyBmb2xsb3dpbmcgdGhlIGVuZAorIG9mIHRoZSBjYWxlbmRhciBxdWFydGVyIHRvIHdoaWNoIHRoZXkgcmVsYXRlIGFuZCBzaGFsbCBiZQorIHN1Ym1pdHRlZCB3aXRoIGEgd3JpdHRlbiBzdGF0ZW1lbnQgZG9jdW1lbnRpbmcgdGhlIGJhc2lzIGZvcgorIHRoZSByb3lhbHR5IGNhbGN1bGF0aW9uLgorIAorIAorIGMpIFRheGVzLiAgQWxsIHBheW1lbnRzIHJlcXVpcmVkIGJ5IHRoaXMgTGljZW5zZSBzaGFsbCBiZQorIG1hZGUgaW4gVW5pdGVkIFN0YXRlcyBkb2xsYXJzLCBhcmUgZXhjbHVzaXZlIG9mIHRheGVzLCBhbmQKKyBMaWNlbnNlZSBhZ3JlZXMgdG8gYmVhciBhbmQgYmUgcmVzcG9uc2libGUgZm9yIHRoZSBwYXltZW50Cisgb2YgYWxsIHN1Y2ggdGF4ZXMsIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCBhbGwgc2FsZXMsCisgdXNlLCByZW50YWwgcmVjZWlwdCwgcGVyc29uYWwgcHJvcGVydHkgb3Igb3RoZXIgdGF4ZXMgYW5kCisgdGhlaXIgZXF1aXZhbGVudHMgd2hpY2ggbWF5IGJlIGxldmllZCBvciBhc3Nlc3NlZCBpbgorIGNvbm5lY3Rpb24gd2l0aCB0aGlzIExpY2Vuc2UgKGV4Y2x1ZGluZyBvbmx5IHRheGVzIGJhc2VkIG9uCisgT3JpZ2luYWwgQ29udHJpYnV0b3IncyBuZXQgaW5jb21lKS4gIFRvIHRoZSBleHRlbnQgTGljZW5zZWUKKyBpcyByZXF1aXJlZCB0byB3aXRoaG9sZCB0YXhlcyBiYXNlZCB1cG9uIE9yaWdpbmFsCisgQ29udHJpYnV0b3IncyBpbmNvbWUgaW4gYW55IGNvdW50cnksIFlvdSBhZ3JlZSB0byBwcm92aWRlCisgT3JpZ2luYWwgQ29udHJpYnV0b3Igd2l0aCB3cml0dGVuIGV2aWRlbmNlIG9mIHN1Y2gKKyB3aXRoaG9sZGluZywgc3VpdGFibGUgZm9yIE9yaWdpbmFsIENvbnRyaWJ1dG9yIHRvIG9idGFpbiBhCisgdGF4IGNyZWRpdCBpbiB0aGUgVW5pdGVkIFN0YXRlcy4KKyAKKyBkKSBSZWNvcmRzLiAgWW91IGFncmVlIHRvIG1haW50YWluIGFjY291bnQgYm9va3MgYW5kIHJlY29yZHMKKyBjb25zaXN0ZW50IHdpdGggR2VuZXJhbGx5IEFjY2VwdGVkIEFjY291bnRpbmcgUHJpbmNpcGxlcworIGFwcHJvcHJpYXRlIHRvIFlvdXIgZG9taWNpbGUsIGFzIG1heSBiZSBpbiBlZmZlY3QgZnJvbSB0aW1lCisgdG8gdGltZSwgc3VmZmljaWVudCB0byBhbGxvdyB0aGUgY29ycmVjdG5lc3Mgb2YgdGhlCisgcm95YWx0aWVzIHJlcXVpcmVkIHRvIGJlIHBhaWQgcHVyc3VhbnQgdG8gdGhpcyBMaWNlbnNlIHRvIGJlCisgZGV0ZXJtaW5lZC4KKyAKKyBlKSBBdWRpdCBSaWdodHMuICBPcmlnaW5hbCBDb250cmlidXRvciBzaGFsbCBoYXZlIHRoZSByaWdodAorIHRvIGF1ZGl0IHN1Y2ggYWNjb3VudHMgdXBvbiByZWFzb25hYmxlIHByaW9yIG5vdGljZSB1c2luZyBhbgorIGluZGVwZW5kZW50IGF1ZGl0b3Igb2YgT3JpZ2luYWwgQ29udHJpYnV0b3IncyBjaG9pY2UgKHRoZQorICJBdWRpdG9yIikuICBUaGUgQXVkaXRvciBzaGFsbCBiZSBib3VuZCB0byBrZWVwIGNvbmZpZGVudGlhbAorIHRoZSBkZXRhaWxzIG9mIFlvdXIgYnVzaW5lc3MgYWZmYWlycyBhbmQgdG8gbGltaXQgZGlzY2xvc3VyZQorIG9mIHRoZSByZXN1bHRzIG9mIGFueSBhdWRpdCB0byB0aGUgc3VmZmljaWVuY3kgb2YgdGhlCisgYWNjb3VudHMgYW5kIHRoZSBhbW91bnQsIGlmIGFueSwgb2YgYSBwYXltZW50IGFkanVzdG1lbnQKKyB0aGF0IHNob3VsZCBiZSBtYWRlLiAgU3VjaCBhdWRpdHMgc2hhbGwgbm90IG9jY3VyIG1vcmUgdGhhbgorIG9uY2UgZWFjaCB5ZWFyICh1bmxlc3MgZGlzY3JlcGFuY2llcyBhcmUgZGlzY292ZXJlZCBpbgorIGV4Y2VzcyBvZiB0aGUgZml2ZSBwZXJjZW50ICg1JSkgdGhyZXNob2xkIHNldCBmb3J0aCBpbgorIFNlY3Rpb24gNy5mKSBiZWxvdywgaW4gd2hpY2ggY2FzZSB0d28gY29uc2VjdXRpdmUgcXVhcnRlcnMKKyBwZXIgeWVhciBtYXkgYmUgYXVkaXRlZCkuICBFeGNlcHQgYXMgc2V0IGZvcnRoIGluIFNlY3Rpb24KKyA3LmYpIGJlbG93LCBPcmlnaW5hbCBDb250cmlidXRvciBzaGFsbCBiZWFyIGFsbCBjb3N0cyBhbmQKKyBleHBlbnNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGV4ZXJjaXNlIG9mIGl0cyByaWdodHMgdG8KKyBhdWRpdC4KKyAKKyBmKSBQYXltZW50IEVycm9ycy4gIEluIHRoZSBldmVudCB0aGF0IGFueSBlcnJvcnMgaW4gcGF5bWVudHMKKyBzaGFsbCBiZSBkZXRlcm1pbmVkLCBzdWNoIGVycm9ycyBzaGFsbCBiZSBjb3JyZWN0ZWQgYnkKKyBhcHByb3ByaWF0ZSBhZGp1c3RtZW50IGluIHBheW1lbnQgZm9yIHRoZSBxdWFydGVybHkgcGVyaW9kCisgZHVyaW5nIHdoaWNoIHRoZSBlcnJvciBpcyBkaXNjb3ZlcmVkLiAgSW4gdGhlIGV2ZW50IG9mIGFuCisgdW5kZXJwYXltZW50IG9mIG1vcmUgdGhhbiBmaXZlIHBlcmNlbnQgKDUlKSBvZiB0aGUgcHJvcGVyCisgYW1vdW50IG93ZWQsIHVwb24gc3VjaCB1bmRlcnBheW1lbnQgYmVpbmcgcHJvcGVybHkKKyBkZXRlcm1pbmVkIGJ5IHRoZSBBdWRpdG9yLCBZb3UgYWdyZWUgdG8gcmVpbWJ1cnNlIE9yaWdpbmFsCisgQ29udHJpYnV0b3IgdGhlIGFtb3VudCBvZiB0aGUgdW5kZXJwYXltZW50IGFuZCBhbGwKKyByZWFzb25hYmxlIGNvc3RzIGFuZCBleHBlbnNlcyBhc3NvY2lhdGVkIHdpdGggdGhlIGV4ZXJjaXNlCisgb2YgaXRzIHJpZ2h0cyB0byBhdWRpdCwgYW5kIGludGVyZXN0IG9uIHRoZSBvdmVyZHVlIGFtb3VudAorIGF0IHRoZSBtYXhpbXVtIGFsbG93YWJsZSBpbnRlcmVzdCByYXRlIGZyb20gdGhlIGRhdGUgb2YKKyBhY2NydWFsIG9mIHN1Y2ggb2JsaWdhdGlvbi4KKyAKKyA4LiAgTm90aWNlIG9mIEJyZWFjaCBvciBJbmZyaW5nZW1lbnQuICBFYWNoIHBhcnR5IHNoYWxsCisgbm90aWZ5IHRoZSBvdGhlciBpbW1lZGlhdGVseSBpbiB3cml0aW5nIHdoZW4gaXQgYmVjb21lcworIGF3YXJlIG9mIGFueSBicmVhY2ggb3IgdmlvbGF0aW9uIG9mIHRoZSB0ZXJtcyBvZiB0aGlzCisgTGljZW5zZSwgb3Igd2hlbiBZb3UgYmVjb21lIGF3YXJlIG9mIGFueSBwb3RlbnRpYWwgb3IgYWN0dWFsCisgaW5mcmluZ2VtZW50IGJ5IGEgdGhpcmQgcGFydHkgb2YgdGhlIFRlY2hub2xvZ3kgb3IgU3VuJ3MKKyBJbnRlbGxlY3R1YWwgUHJvcGVydHkgUmlnaHRzIHRoZXJlaW4uCisgCisgOS4gIFByb3ByaWV0YXJ5IFJpZ2h0cyBOb3RpY2VzLiAgWW91IG1heSBub3QgcmVtb3ZlIGFueQorIGNvcHlyaWdodCBub3RpY2VzLCB0cmFkZW1hcmsgbm90aWNlcyBvciBvdGhlciBwcm9wcmlldGFyeQorIGxlZ2VuZHMgb2YgT3JpZ2luYWwgQ29udHJpYnV0b3Igb3IgaXRzIHN1cHBsaWVycyBjb250YWluZWQKKyBvbiBvciBpbiB0aGUgT3JpZ2luYWwgQ29kZSwgVXBncmFkZWQgQ29kZSBhbmQKKyBTcGVjaWZpY2F0aW9ucy4KKyAKKyAxMC4gIE5vdGljZXMuICBBbGwgd3JpdHRlbiBub3RpY2VzIHJlcXVpcmVkIGJ5IHRoaXMgTGljZW5zZQorIG11c3QgYmUgZGVsaXZlcmVkIGluIHBlcnNvbiBvciBieSBtZWFucyBldmlkZW5jZWQgYnkgYQorIGRlbGl2ZXJ5IHJlY2VpcHQgYW5kIHdpbGwgYmUgZWZmZWN0aXZlIHVwb24gcmVjZWlwdCBieSB0aGUKKyBwZXJzb25zIGF0IHRoZSBhZGRyZXNzZXMgc3BlY2lmaWVkIGJlbG93LgorIAorIAorIE9yaWdpbmFsIENvbnRyaWJ1dG9yOiAgWW91OgorIAorIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgCisgOTAxIFNhbiBBbnRvbmlvIFJvYWQgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisgCisgUGFsbyBBbHRvLCBDYWxpZm9ybmlhIDk0MzAzIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworIAorIEF0dG4uOiAgVlAsIFN1biBTb2Z0d2FyZSBhbmQgVGVjaG5vbG9neSBTYWxlcworIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fXworIAorIGNjOiAgU3VuIFNvZnR3YXJlIGFuZCBUZWNobm9sb2d5LCBHZW5lcmFsIENvdW5zZWwKKyAKKyAxMS4gIERpc2NsYWltZXIgb2YgQWdlbmN5LiAgVGhlIHJlbGF0aW9uc2hpcCBjcmVhdGVkIGhlcmVieQorIGlzIHRoYXQgb2YgbGljZW5zb3IgYW5kIGxpY2Vuc2VlIGFuZCB0aGUgcGFydGllcyBoZXJlYnkKKyBhY2tub3dsZWRnZSBhbmQgYWdyZWUgdGhhdCBub3RoaW5nIGhlcmVpbiBzaGFsbCBiZSBkZWVtZWQgdG8KKyBjb25zdGl0dXRlIFlvdSBhcyBhIGZyYW5jaGlzZWUgb2YgT3JpZ2luYWwgQ29udHJpYnV0b3IuICBZb3UKKyBoZXJlYnkgd2FpdmUgdGhlIGJlbmVmaXQgb2YgYW55IHN0YXRlIG9yIGZlZGVyYWwgc3RhdHV0ZXMKKyBkZWFsaW5nIHdpdGggdGhlIGVzdGFibGlzaG1lbnQgYW5kIHJlZ3VsYXRpb24gb2YgZnJhbmNoaXNlcy4KKyAKKyBBZ3JlZWQ6CisgCisgWW91OiAgT3JpZ2luYWwgQ29udHJpYnV0b3I6CisgCisgX19fX19fX19fX19fX19fX19fX19fX19fX19fX18gU3VuIE1pY3Jvc3lzdGVtcywgSW5jLgorIAorIChZb3VyIE5hbWUpIEJ5Ol9fX19fX19fX19fX19fX19fX19fX19fXworIEJ5Ol9fX19fX19fX19fX19fX19fX19fX19fXworIAorIFRpdGxlX19fX19fX19fX19fX19fX19fX19fX19fXyBUaXRsZTpfX19fX19fX19fX19fX19fX19fX18KKyAKKyBEYXRlOl9fX19fX19fX19fX19fX19fX19fX19fX18gRGF0ZTpfX19fX19fX19fX19fX19fX19fX19fCisgCisgCisgCisgCisgQVRUQUNITUVOVCBFIFRFQ0hOT0xPR1kgQ09NUEFUSUJJTElUWSBLSVQKKyAKKyBUaGUgZm9sbG93aW5nIGxpY2Vuc2UgaXMgZWZmZWN0aXZlIGZvciB0aGUgSmF2YSh0bSkyIFNESworIFZlcnNpb24gMS4yIFRlY2hub2xvZ3kgQ29tcGF0aWJpbGl0eSBLaXQgb25seSB1cG9uIGV4ZWN1dGlvbgorIG9mIGEgc2VwYXJhdGUgc3VwcG9ydCBhZ3JlZW1lbnQgYmV0d2VlbiBZb3UgYW5kIE9yaWdpbmFsCisgQ29udHJpYnV0b3IgKHN1YmplY3QgdG8gYW4gYW5udWFsIGZlZSkgYXMgZGVzY3JpYmVkIG9uIHRoZQorIFNDU0wgV2VicGFnZS4gIFRoZSBUZWNobm9sb2d5IENvbXBhdGliaWxpdHkgS2l0IGZvciB0aGUKKyBUZWNobm9sb2d5IHNwZWNpZmllZCBpbiBBdHRhY2htZW50IEIgbWF5IGJlIGFjY2Vzc2VkIGF0IHRoZQorIFRlY2hub2xvZ3kgRG93bmxvYWQgU2l0ZSBvbmx5IHVwb24gZXhlY3V0aW9uIG9mIHRoZSBzdXBwb3J0CisgYWdyZWVtZW50LgorIAorIDEuICBUQ0sgTGljZW5zZS4KKyAKKyBhKSBTdWJqZWN0IHRvIHRoZSByZXN0cmljdGlvbnMgc2V0IGZvcnRoIGluIFNlY3Rpb24gMS5iCisgYmVsb3cgYW5kIFNlY3Rpb24gOC4xMCBvZiB0aGUgUmVzZWFyY2ggVXNlIGxpY2Vuc2UsIGluCisgYWRkaXRpb24gdG8gdGhlIFJlc2VhcmNoIFVzZSBsaWNlbnNlLCBPcmlnaW5hbCBDb250cmlidXRvcgorIGdyYW50cyB0byBZb3UgYSB3b3JsZHdpZGUsIG5vbi1leGNsdXNpdmUsIG5vbi10cmFuc2ZlcmFibGUKKyBsaWNlbnNlLCB0byB0aGUgZXh0ZW50IG9mIE9yaWdpbmFsIENvbnRyaWJ1dG9yJ3MKKyBJbnRlbGxlY3R1YWwgUHJvcGVydHkgUmlnaHRzIGluIHRoZSBUQ0sgKHdpdGhvdXQgdGhlIHJpZ2h0CisgdG8gc3VibGljZW5zZSksIHRvIHVzZSB0aGUgVENLIHRvIGRldmVsb3AgYW5kIHRlc3QgQ292ZXJlZAorIENvZGUuCisgCisgYikgVENLIFVzZSBSZXN0cmljdGlvbnMuICBZb3UgYXJlIG5vdCBhdXRob3JpemVkIHRvIGNyZWF0ZQorIGRlcml2YXRpdmUgd29ya3Mgb2YgdGhlIFRDSyBvciB1c2UgdGhlIFRDSyB0byB0ZXN0IGFueQorIGltcGxlbWVudGF0aW9uIG9mIHRoZSBTcGVjaWZpY2F0aW9uIHRoYXQgaXMgbm90IENvdmVyZWQKKyBDb2RlLiAgWW91IG1heSBub3QgcHVibGlzaCB5b3VyIHRlc3QgcmVzdWx0cyBvciBtYWtlIGNsYWltcworIG9mIGNvbXBhcmF0aXZlIGNvbXBhdGliaWxpdHkgd2l0aCByZXNwZWN0IHRvIG90aGVyCisgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBTcGVjaWZpY2F0aW9uLiAgSW4gY29uc2lkZXJhdGlvbiBmb3IKKyB0aGUgbGljZW5zZSBncmFudCBpbiBTZWN0aW9uIDEuYSBhYm92ZSB5b3UgYWdyZWUgbm90IHRvCisgZGV2ZWxvcCB5b3VyIG93biB0ZXN0cyB3aGljaCBhcmUgaW50ZW5kZWQgdG8gdmFsaWRhdGUKKyBjb25mb3JtYXRpb24gd2l0aCB0aGUgU3BlY2lmaWNhdGlvbi4KKyAKKyAyLiAgUmVxdWlyZW1lbnRzIGZvciBEZXRlcm1pbmluZyBDb21wbGlhbmNlLgorIAorIDIuMSBEZWZpbml0aW9ucy4KKyAKKyBhKSAiQWRkZWQgVmFsdWUiIG1lYW5zIGNvZGUgd2hpY2g6CisgCisgKGkpIGhhcyBhIHByaW5jaXBhbCBwdXJwb3NlIHdoaWNoIGlzIHN1YnN0YW50aWFsbHkgZGlmZmVyZW50CisgZnJvbSB0aGF0IG9mIHRoZSBzdGFuZC1hbG9uZSBUZWNobm9sb2d5OworIAorIChpaSkgcmVwcmVzZW50cyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgYW5kIHZhbHVlCisgZW5oYW5jZW1lbnQgdG8gdGhlIFRlY2hub2xvZ3k7CisgCisgKGlpaSkgb3BlcmF0ZXMgaW4gY29uanVuY3Rpb24gd2l0aCB0aGUgVGVjaG5vbG9neTsgYW5kCisgCisgKGl2KSBpcyBub3QgbWFya2V0ZWQgYXMgYSB0ZWNobm9sb2d5IHdoaWNoIHJlcGxhY2VzIG9yCisgc3Vic3RpdHV0ZXMgZm9yIHRoZSBUZWNobm9sb2d5LgorIAorIGIpICJKYXZhIENsYXNzZXMiIG1lYW5zIHRoZSBzcGVjaWZpYyBjbGFzcyBsaWJyYXJpZXMKKyBhc3NvY2lhdGVkIHdpdGggZWFjaCBUZWNobm9sb2d5IGRlZmluZWQgaW4gQXR0YWNobWVudCBCLgorIAorIGMpICJKYXZhIFJ1bnRpbWUgSW50ZXJwcmV0ZXIiIG1lYW5zIHRoZSBwcm9ncmFtKHMpIHdoaWNoCisgaW1wbGVtZW50IHRoZSBKYXZhIHZpcnR1YWwgbWFjaGluZSBmb3IgdGhlIFRlY2hub2xvZ3kgYXMKKyBkZWZpbmVkIGluIHRoZSBTcGVjaWZpY2F0aW9uLgorIAorIGQpICJQbGF0Zm9ybSBEZXBlbmRlbnQgUGFydCIgbWVhbnMgdGhvc2UgT3JpZ2luYWwgQ29kZSBhbmQKKyBVcGdyYWRlZCBDb2RlIGZpbGVzIG9mIHRoZSBUZWNobm9sb2d5IHdoaWNoIGFyZSBub3QgaW4gYQorICJzaGFyZSIgZGlyZWN0b3J5IG9yIHN1YmRpcmVjdG9yeSB0aGVyZW9mLgorIAorIGUpICJTaGFyZWQgUGFydCIgbWVhbnMgdGhvc2UgT3JpZ2luYWwgQ29kZSBhbmQgVXBncmFkZWQgQ29kZQorIGZpbGVzIG9mIHRoZSBUZWNobm9sb2d5IHdoaWNoIGFyZSBpZGVudGlmaWVkIGFzICJzaGFyZWQiIChvcgorIHdvcmRzIG9mIHNpbWlsYXIgbWVhbmluZykgb3Igd2hpY2ggYXJlIGluIGFueSAic2hhcmUiCisgZGlyZWN0b3J5IG9yIHN1YmRpcmVjdG9yeSB0aGVyZW9mLCBleGNlcHQgdGhvc2UgZmlsZXMKKyBzcGVjaWZpY2FsbHkgZGVzaWduYXRlZCBieSBPcmlnaW5hbCBDb250cmlidXRvciBhcworIG1vZGlmaWFibGUuCisgCisgZikgIlVzZXIncyBHdWlkZSIgbWVhbnMgdGhlIHVzZXJzIGd1aWRlIGZvciB0aGUgVENLIHdoaWNoCisgU3VuIG1ha2VzIGF2YWlsYWJsZSB0byBZb3UgdG8gcHJvdmlkZSBkaXJlY3Rpb24gaW4gaG93IHRvCisgcnVuIHRoZSBUQ0sgYW5kIHByb3Blcmx5IGludGVycHJldCB0aGUgcmVzdWx0cywgYXMgbWF5IGJlCisgcmV2aXNlZCBieSBTdW4gZnJvbSB0aW1lIHRvIHRpbWUuCisgCisgMi4yIERldmVsb3BtZW50IFJlc3RyaWN0aW9ucy4gIENvbXBsaWFudCBDb3ZlcmVkIENvZGU6CisgCisgYSkgbXVzdCBpbmNsdWRlIEFkZGVkIFZhbHVlOworIAorIGIpIG11c3QgZnVsbHkgY29tcGx5IHdpdGggdGhlIFNwZWNpZmljYXRpb25zIGZvciB0aGUKKyBUZWNobm9sb2d5IHNwZWNpZmllZCBpbiBBdHRhY2htZW50IEI7CisgCisgYykgbXVzdCBpbmNsdWRlIHRoZSBTaGFyZWQgUGFydCwgY29tcGxldGUgYW5kIHVubW9kaWZpZWQ7CisgCisgZCkgbWF5IG5vdCBtb2RpZnkgdGhlIGZ1bmN0aW9uYWwgYmVoYXZpb3Igb2YgdGhlIEphdmEKKyBSdW50aW1lIEludGVycHJldGVyIG9yIHRoZSBKYXZhIENsYXNzZXM7CisgCisgZSkgbWF5IG5vdCBtb2RpZnksIHN1YnNldCBvciBzdXBlcnNldCB0aGUgaW50ZXJmYWNlcyBvZiB0aGUKKyBKYXZhIFJ1bnRpbWUgSW50ZXJwcmV0ZXIgb3IgdGhlIEphdmEgQ2xhc3NlczsKKyAKKyBmKSBtYXkgbm90IHN1YnNldCBvciBzdXBlcnNldCB0aGUgSmF2YSBDbGFzc2VzOyBhbmQKKyAKKyBnKSBtYXkgbm90IG1vZGlmeSBvciBleHRlbmQgdGhlIHJlcXVpcmVkIHB1YmxpYyBjbGFzcyBvcgorIHB1YmxpYyBpbnRlcmZhY2UgZGVjbGFyYXRpb25zIHdob3NlIG5hbWVzIGJlZ2luIHdpdGggImphdmEiLAorICJqYXZheCIsICJqaW5pIiwgIm5ldC5qaW5pIiwgInN1bi5ob3RqYXZhIiwgIkNPTS5zdW4iIG9yCisgdGhlaXIgZXF1aXZhbGVudHMgaW4gYW55IHN1YnNlcXVlbnQgbmFtaW5nIGNvbnZlbnRpb24uCisgCisgMi4zIENvbXBhdGliaWxpdHkgVGVzdGluZy4gIFN1Y2Nlc3NmdWwgY29tcGF0aWJpbGl0eSB0ZXN0aW5nCisgbXVzdCBiZSBjb21wbGV0ZWQgYnkgWW91LCBvciBhdCBPcmlnaW5hbCBDb250cmlidXRvcidzCisgb3B0aW9uLCBhIHRoaXJkIHBhcnR5IGRlc2lnbmF0ZWQgYnkgT3JpZ2luYWwgQ29udHJpYnV0b3IsIHRvCisgY29uZHVjdCBzdWNoIHRlc3RzLCBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIFVzZXIncyBHdWlkZSwgYW5kCisgdXNpbmcgdGhlIG1vc3QgY3VycmVudCB2ZXJzaW9uIG9mIHRoZSBhcHBsaWNhYmxlIFRDSworIGF2YWlsYWJsZSBmcm9tIE9yaWdpbmFsIENvbnRyaWJ1dG9yIG9uZSBodW5kcmVkIHR3ZW50eSAoMTIwKQorIGRheXMgKHR3byBodW5kcmVkIGZvcnR5IFsyNDBdIGRheXMgaW4gdGhlIGNhc2Ugb2Ygc2lsaWNvbgorIGltcGxlbWVudGF0aW9ucykgcHJpb3IgdG86ICAoaSkgWW91ciBJbnRlcm5hbCBEZXBsb3ltZW50CisgVXNlOyBhbmQgKGlpKSBlYWNoIHJlbGVhc2Ugb2YgQ29tcGxpYW50IENvdmVyZWQgQ29kZSBieSBZb3UKKyBmb3IgQ29tbWVyY2lhbCBVc2UuICBJbiB0aGUgZXZlbnQgdGhhdCBZb3UgZWxlY3QgdG8gdXNlIGEKKyB2ZXJzaW9uIG9mIFVwZ3JhZGVkIENvZGUgdGhhdCBpcyBuZXdlciB0aGFuIHRoYXQgd2hpY2ggaXMKKyByZXF1aXJlZCB1bmRlciB0aGlzIFNlY3Rpb24gMi4zLCB0aGVuIFlvdSBhZ3JlZSB0byBwYXNzIHRoZQorIHZlcnNpb24gb2YgdGhlIFRDSyB0aGF0IGNvcnJlc3BvbmRzIHRvIHN1Y2ggbmV3ZXIgdmVyc2lvbiBvZgorIFVwZ3JhZGVkIENvZGUuCisgCisgMi40IFRlc3QgUmVzdWx0cy4gIFlvdSBhZ3JlZSB0byBwcm92aWRlIHRvIE9yaWdpbmFsCisgQ29udHJpYnV0b3Igb3IgdGhlIHRoaXJkIHBhcnR5IHRlc3QgZmFjaWxpdHkgaWYgYXBwbGljYWJsZSwKKyBZb3VyIHRlc3QgcmVzdWx0cyB0aGF0IGRlbW9uc3RyYXRlIHRoYXQgQ292ZXJlZCBDb2RlIGlzCisgQ29tcGxpYW50IENvdmVyZWQgQ29kZSBhbmQgdGhhdCBPcmlnaW5hbCBDb250cmlidXRvciBtYXkKKyBwdWJsaXNoIG9yIG90aGVyd2lzZSBkaXN0cmlidXRlIHN1Y2ggdGVzdCByZXN1bHRzLgorIApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL3N1bi1qMnNsIGIvbGljZW5zZXMvc3VuLWoyc2wKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjUwOGEzOAotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL3N1bi1qMnNsCkBAIC0wLDAgKzEsMTIzIEBACitKYXZhVE0gMiwgU3RhbmRhcmQgRWRpdGlvbiAoSjJTRVRNKSBTcGVjaWZpY2F0aW9uICgiU3BlY2lmaWNhdGlvbiIpCitWZXJzaW9uOiAxLjQKK1N0YXR1czogRkNTCitSZWxlYXNlOiBGZWJydWFyeSAxMywgMjAwMgorCitDb3B5cmlnaHQgMjAwMiBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuCis5MDEgU2FuIEFudG9uaW8gUm9hZCwgUGFsbyBBbHRvLCBDYWxpZm9ybmlhIDk0MzAzLCBVLlMuQS4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK05PVElDRQorCitUaGUgU3BlY2lmaWNhdGlvbiBpcyBwcm90ZWN0ZWQgYnkgY29weXJpZ2h0IGFuZCB0aGUgaW5mb3JtYXRpb24KK2Rlc2NyaWJlZCB0aGVyZWluIG1heSBiZSBwcm90ZWN0ZWQgYnkgb25lIG9yIG1vcmUgVS5TLiBwYXRlbnRzLCBmb3JlaWduCitwYXRlbnRzLCBvciBwZW5kaW5nIGFwcGxpY2F0aW9ucy4gIEV4Y2VwdCBhcyBwcm92aWRlZCB1bmRlciB0aGUKK2ZvbGxvd2luZyBsaWNlbnNlLCBubyBwYXJ0IG9mIHRoZSBTcGVjaWZpY2F0aW9uIG1heSBiZSByZXByb2R1Y2VkIGluIGFueQorZm9ybSBieSBhbnkgbWVhbnMgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBhdXRob3JpemF0aW9uIG9mIFN1bgorTWljcm9zeXN0ZW1zLCBJbmMuICgiU3VuIikgYW5kIGl0cyBsaWNlbnNvcnMsIGlmIGFueS4gIEFueSB1c2Ugb2YgdGhlCitTcGVjaWZpY2F0aW9uIGFuZCB0aGUgaW5mb3JtYXRpb24gZGVzY3JpYmVkIHRoZXJlaW4gd2lsbCBiZSBnb3Zlcm5lZCBieQordGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgbGljZW5zZSBhbmQgdGhlIEV4cG9ydCBDb250cm9sCitHdWlkZWxpbmVzIGFzIHNldCBmb3J0aCBpbiB0aGUgVGVybXMgb2YgVXNlIG9uIFN1bidzIHdlYnNpdGUuICBCeQordmlld2luZywgZG93bmxvYWRpbmcgb3Igb3RoZXJ3aXNlIGNvcHlpbmcgdGhlIFNwZWNpZmljYXRpb24sIHlvdSBhZ3JlZQordGhhdCB5b3UgaGF2ZSByZWFkLCB1bmRlcnN0b29kLCBhbmQgd2lsbCBjb21wbHkgd2l0aCBhbGwgb2YgdGhlIHRlcm1zCithbmQgY29uZGl0aW9ucyBzZXQgZm9ydGggaGVyZWluLgorCitTdW4gaGVyZWJ5IGdyYW50cyB5b3UgYSBmdWxseS1wYWlkLCBub24tZXhjbHVzaXZlLCBub24tdHJhbnNmZXJhYmxlLAord29ybGR3aWRlLCBsaW1pdGVkIGxpY2Vuc2UgKHdpdGhvdXQgdGhlIHJpZ2h0IHRvIHN1YmxpY2Vuc2UpLCB1bmRlcgorU3VuJ3MgaW50ZWxsZWN0dWFsIHByb3BlcnR5IHJpZ2h0cyB0aGF0IGFyZSBlc3NlbnRpYWwgdG8gcHJhY3RpY2UgdGhlCitTcGVjaWZpY2F0aW9uLCB0byBpbnRlcm5hbGx5IHByYWN0aWNlIHRoZSBTcGVjaWZpY2F0aW9uIGZvciB0aGUgcHVycG9zZQorb2YgZGVzaWduaW5nIGFuZCBkZXZlbG9waW5nIHlvdXIgSmF2YSBhcHBsZXRzIGFuZCBhcHBsaWNhdGlvbnMgaW50ZW5kZWQKK3RvIHJ1biBvbiB0aGUgSmF2YSBwbGF0Zm9ybSBvciBjcmVhdGluZyBhIGNsZWFuIHJvb20gaW1wbGVtZW50YXRpb24gb2YKK3RoZSBTcGVjaWZpY2F0aW9uIHRoYXQ6IChpKSBpbmNsdWRlcyBhIGNvbXBsZXRlIGltcGxlbWVudGF0aW9uIG9mIHRoZQorY3VycmVudCB2ZXJzaW9uIG9mIHRoZSBTcGVjaWZpY2F0aW9uLCB3aXRob3V0IHN1YnNldHRpbmcgb3IKK3N1cGVyc2V0dGluZzsgKGlpKSBpbXBsZW1lbnRzIGFsbCBvZiB0aGUgaW50ZXJmYWNlcyBhbmQgZnVuY3Rpb25hbGl0eSBvZgordGhlIFNwZWNpZmljYXRpb24gd2l0aG91dCBzdWJzZXR0aW5nIG9yIHN1cGVyc2V0dGluZzsgKGlpaSkgaW5jbHVkZXMgYQorY29tcGxldGUgaW1wbGVtZW50YXRpb24gb2YgYW55IG9wdGlvbmFsIGNvbXBvbmVudHMgKGFzIGRlZmluZWQgYnkgdGhlCitTcGVjaWZpY2F0aW9uKSB3aGljaCB5b3UgY2hvb3NlIHRvIGltcGxlbWVudCwgd2l0aG91dCBzdWJzZXR0aW5nIG9yCitzdXBlcnNldHRpbmc7IChpdikgaW1wbGVtZW50cyBhbGwgb2YgdGhlIGludGVyZmFjZXMgYW5kIGZ1bmN0aW9uYWxpdHkgb2YKK3N1Y2ggb3B0aW9uYWwgY29tcG9uZW50cywgd2l0aG91dCBzdWJzZXR0aW5nIG9yIHN1cGVyc2V0dGluZzsgKHYpIGRvZXMKK25vdCBhZGQgYW55IGFkZGl0aW9uYWwgcGFja2FnZXMsIGNsYXNzZXMgb3IgaW50ZXJmYWNlcyB0byB0aGUgImphdmEuKiIKK29yICJqYXZheC4qIiBwYWNrYWdlcyBvciBzdWJwYWNrYWdlcyBvciBvdGhlciBwYWNrYWdlcyBkZWZpbmVkIGJ5IHRoZQorU3BlY2lmaWNhdGlvbjsgKHZpKSBzYXRpc2ZpZXMgYWxsIHRlc3RpbmcgcmVxdWlyZW1lbnRzIGF2YWlsYWJsZSBmcm9tCitTdW4gcmVsYXRpbmcgdG8gdGhlIG1vc3QgcmVjZW50bHkgcHVibGlzaGVkIHZlcnNpb24gb2YgdGhlIFNwZWNpZmljYXRpb24KK3NpeCAoNikgbW9udGhzIHByaW9yIHRvIGFueSByZWxlYXNlIG9mIHRoZSBjbGVhbiByb29tIGltcGxlbWVudGF0aW9uIG9yCit1cGdyYWRlIHRoZXJldG87ICh2aWkpIGRvZXMgbm90IGRlcml2ZSBmcm9tIGFueSBTdW4gc291cmNlIGNvZGUgb3IKK2JpbmFyeSBjb2RlIG1hdGVyaWFsczsgYW5kICh2aWlpKSBkb2VzIG5vdCBpbmNsdWRlIGFueSBTdW4gc291cmNlIGNvZGUKK29yIGJpbmFyeSBjb2RlIG1hdGVyaWFscyB3aXRob3V0IGFuIGFwcHJvcHJpYXRlIGFuZCBzZXBhcmF0ZSBsaWNlbnNlCitmcm9tIFN1bi4gVGhlIFNwZWNpZmljYXRpb24gY29udGFpbnMgdGhlIHByb3ByaWV0YXJ5IGluZm9ybWF0aW9uIG9mIFN1bgorYW5kIG1heSBvbmx5IGJlIHVzZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBsaWNlbnNlIHRlcm1zIHNldCBmb3J0aAoraGVyZWluLiBUaGlzIGxpY2Vuc2Ugd2lsbCB0ZXJtaW5hdGUgaW1tZWRpYXRlbHkgd2l0aG91dCBub3RpY2UgZnJvbSBTdW4KK2lmIHlvdSBmYWlsIHRvIGNvbXBseSB3aXRoIGFueSBwcm92aXNpb24gb2YgdGhpcyBsaWNlbnNlLiAgVXBvbgordGVybWluYXRpb24gb3IgZXhwaXJhdGlvbiBvZiB0aGlzIGxpY2Vuc2UsIHlvdSBtdXN0IGNlYXNlIHVzZSBvZiBvcgorZGVzdHJveSB0aGUgU3BlY2lmaWNhdGlvbi4KKworVFJBREVNQVJLUworCitObyByaWdodCwgdGl0bGUsIG9yIGludGVyZXN0IGluIG9yIHRvIGFueSB0cmFkZW1hcmtzLCBzZXJ2aWNlIG1hcmtzLCBvcgordHJhZGUgbmFtZXMgb2YgU3VuIG9yIFN1bidzIGxpY2Vuc29ycyBpcyBncmFudGVkIGhlcmV1bmRlci4gIFN1biwgU3VuCitNaWNyb3N5c3RlbXMsIHRoZSBTdW4gbG9nbywgSmF2YSwgSjJTRSwgYW5kIHRoZSBKYXZhIENvZmZlZSBDdXAgTG9nbyBhcmUKK3RyYWRlbWFya3Mgb3IgcmVnaXN0ZXJlZCB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlCitVLlMuIGFuZCBvdGhlciBjb3VudHJpZXMuCisKK0RJU0NMQUlNRVIgT0YgV0FSUkFOVElFUworCitUSEUgU1BFQ0lGSUNBVElPTiBJUyBQUk9WSURFRCAiQVMgSVMiLiAgU1VOIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUgorV0FSUkFOVElFUywgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTywKK1dBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IKK05PTi1JTkZSSU5HRU1FTlQgVEhBVCBUSEUgQ09OVEVOVFMgT0YgVEhFIFNQRUNJRklDQVRJT04gQVJFIFNVSVRBQkxFIEZPUgorQU5ZIFBVUlBPU0UgT1IgVEhBVCBBTlkgUFJBQ1RJQ0UgT1IgSU1QTEVNRU5UQVRJT04gT0YgU1VDSCBDT05URU5UUyBXSUxMCitOT1QgSU5GUklOR0UgQU5ZIFRISVJEIFBBUlRZIFBBVEVOVFMsIENPUFlSSUdIVFMsIFRSQURFIFNFQ1JFVFMgT1IgT1RIRVIKK1JJR0hUUy4gIFRoaXMgZG9jdW1lbnQgZG9lcyBub3QgcmVwcmVzZW50IGFueSBjb21taXRtZW50IHRvIHJlbGVhc2Ugb3IKK2ltcGxlbWVudCBhbnkgcG9ydGlvbiBvZiB0aGUgU3BlY2lmaWNhdGlvbiBpbiBhbnkgcHJvZHVjdC4KKworVEhFIFNQRUNJRklDQVRJT04gQ09VTEQgSU5DTFVERSBURUNITklDQUwgSU5BQ0NVUkFDSUVTIE9SIFRZUE9HUkFQSElDQUwKK0VSUk9SUy4gIENIQU5HRVMgQVJFIFBFUklPRElDQUxMWSBBRERFRCBUTyBUSEUgSU5GT1JNQVRJT04gVEhFUkVJTjsKK1RIRVNFIENIQU5HRVMgV0lMTCBCRSBJTkNPUlBPUkFURUQgSU5UTyBORVcgVkVSU0lPTlMgT0YgVEhFCitTUEVDSUZJQ0FUSU9OLCBJRiBBTlkuICBTVU4gTUFZIE1BS0UgSU1QUk9WRU1FTlRTIEFORC9PUiBDSEFOR0VTIFRPIFRIRQorUFJPRFVDVChTKSBBTkQvT1IgVEhFIFBST0dSQU0oUykgREVTQ1JJQkVEIElOIFRIRSBTUEVDSUZJQ0FUSU9OIEFUIEFOWQorVElNRS4gIEFueSB1c2Ugb2Ygc3VjaCBjaGFuZ2VzIGluIHRoZSBTcGVjaWZpY2F0aW9uIHdpbGwgYmUgZ292ZXJuZWQgYnkKK3RoZSB0aGVuLWN1cnJlbnQgbGljZW5zZSBmb3IgdGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGUKK1NwZWNpZmljYXRpb24uCisKK0xJTUlUQVRJT04gT0YgTElBQklMSVRZCisKK1RPIFRIRSBFWFRFTlQgTk9UIFBST0hJQklURUQgQlkgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIFNVTiBPUiBJVFMKK0xJQ0VOU09SUyBCRSBMSUFCTEUgRk9SIEFOWSBEQU1BR0VTLCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBMT1NUCitSRVZFTlVFLCBQUk9GSVRTIE9SIERBVEEsIE9SIEZPUiBTUEVDSUFMLCBJTkRJUkVDVCwgQ09OU0VRVUVOVElBTCwKK0lOQ0lERU5UQUwgT1IgUFVOSVRJVkUgREFNQUdFUywgSE9XRVZFUiBDQVVTRUQgQU5EIFJFR0FSRExFU1MgT0YgVEhFCitUSEVPUlkgT0YgTElBQklMSVRZLCBBUklTSU5HIE9VVCBPRiBPUiBSRUxBVEVEIFRPIEFOWSBGVVJOSVNISU5HLAorUFJBQ1RJQ0lORywgTU9ESUZZSU5HIE9SIEFOWSBVU0UgT0YgVEhFIFNQRUNJRklDQVRJT04sIEVWRU4gSUYgU1VOCitBTkQvT1IgSVRTIExJQ0VOU09SUyBIQVZFIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSAorREFNQUdFUy4KKworWW91IHdpbGwgaW5kZW1uaWZ5LCBob2xkIGhhcm1sZXNzLCBhbmQgZGVmZW5kIFN1biBhbmQgaXRzIGxpY2Vuc29ycyBmcm9tCithbnkgY2xhaW1zIGFyaXNpbmcgb3IgcmVzdWx0aW5nIGZyb206IChpKSB5b3VyIHVzZSBvZiB0aGUgU3BlY2lmaWNhdGlvbjsKKyhpaSkgdGhlIHVzZSBvciBkaXN0cmlidXRpb24gb2YgeW91ciBKYXZhIGFwcGxpY2F0aW9uLCBhcHBsZXQgYW5kL29yCitjbGVhbiByb29tIGltcGxlbWVudGF0aW9uOyBhbmQvb3IgKGlpaSkgYW55IGNsYWltcyB0aGF0IGxhdGVyIHZlcnNpb25zCitvciByZWxlYXNlcyBvZiBhbnkgU3BlY2lmaWNhdGlvbiBmdXJuaXNoZWQgdG8geW91IGFyZSBpbmNvbXBhdGlibGUgd2l0aAordGhlIFNwZWNpZmljYXRpb24gcHJvdmlkZWQgdG8geW91IHVuZGVyIHRoaXMgbGljZW5zZS4KKworUkVTVFJJQ1RFRCBSSUdIVFMgTEVHRU5ECisKK1UuUy4gR292ZXJubWVudDogSWYgdGhpcyBTcGVjaWZpY2F0aW9uIGlzIGJlaW5nIGFjcXVpcmVkIGJ5IG9yIG9uIGJlaGFsZgorb2YgdGhlIFUuUy4gR292ZXJubWVudCBvciBieSBhIFUuUy4gR292ZXJubWVudCBwcmltZSBjb250cmFjdG9yIG9yCitzdWJjb250cmFjdG9yIChhdCBhbnkgdGllciksIHRoZW4gdGhlIEdvdmVybm1lbnQncyByaWdodHMgaW4gdGhlCitTb2Z0d2FyZSBhbmQgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gc2hhbGwgYmUgb25seSBhcyBzZXQgZm9ydGggaW4KK3RoaXMgbGljZW5zZTsgdGhpcyBpcyBpbiBhY2NvcmRhbmNlIHdpdGggNDggQy5GLlIuIDIyNy43MjAxIHRocm91Z2gKKzIyNy43MjAyLTQgKGZvciBEZXBhcnRtZW50IG9mIERlZmVuc2UgKERvRCkgYWNxdWlzaXRpb25zKSBhbmQgd2l0aCA0OAorQy5GLlIuIDIuMTAxIGFuZCAxMi4yMTIgKGZvciBub24tRG9EIGFjcXVpc2l0aW9ucykuCisKK1JFUE9SVAorCitZb3UgbWF5IHdpc2ggdG8gcmVwb3J0IGFueSBhbWJpZ3VpdGllcywgaW5jb25zaXN0ZW5jaWVzIG9yIGluYWNjdXJhY2llcworeW91IG1heSBmaW5kIGluIGNvbm5lY3Rpb24gd2l0aCB5b3VyIHVzZSBvZiB0aGUgU3BlY2lmaWNhdGlvbgorKCJGZWVkYmFjayIpLiBUbyB0aGUgZXh0ZW50IHRoYXQgeW91IHByb3ZpZGUgU3VuIHdpdGggYW55IEZlZWRiYWNrLCB5b3UKK2hlcmVieTogKGkpIGFncmVlIHRoYXQgc3VjaCBGZWVkYmFjayBpcyBwcm92aWRlZCBvbiBhIG5vbi1wcm9wcmlldGFyeQorYW5kIG5vbi1jb25maWRlbnRpYWwgYmFzaXMsIGFuZCAoaWkpIGdyYW50IFN1biBhIHBlcnBldHVhbCwKK25vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgZnVsbHkgcGFpZC11cCwgaXJyZXZvY2FibGUgbGljZW5zZSwgd2l0aCB0aGUKK3JpZ2h0IHRvIHN1YmxpY2Vuc2UgdGhyb3VnaCBtdWx0aXBsZSBsZXZlbHMgb2Ygc3VibGljZW5zZWVzLCB0bworaW5jb3Jwb3JhdGUsIGRpc2Nsb3NlLCBhbmQgdXNlIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgRmVlZGJhY2sgZm9yIGFueQorcHVycG9zZSByZWxhdGVkIHRvIHRoZSBTcGVjaWZpY2F0aW9uIGFuZCBmdXR1cmUgdmVyc2lvbnMsCitpbXBsZW1lbnRhdGlvbnMsIGFuZCB0ZXN0IHN1aXRlcyB0aGVyZW9mLgorCisoTEZJIzExMTEzMS9Gb3JtIElEIzAxMTgwMSkKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL3N1bi1qMnNsLTYgYi9saWNlbnNlcy9zdW4tajJzbC02Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjMDIyZjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9zdW4tajJzbC02CkBAIC0wLDAgKzEsMjQ0IEBACitTVU4gTUlDUk9TWVNURU1TLCBJTkMuICgiU1VOIikgSVMgV0lMTElORyBUTyBMSUNFTlNFIAorVEhJUyBTUEVDSUZJQ0FUSU9OIFRPIFlPVSBPTkxZIFVQT04gVEhFIENPTkRJVElPTiBUSEFUIAorWU9VIEFDQ0VQVCBBTEwgT0YgVEhFIFRFUk1TIENPTlRBSU5FRCBJTiBUSElTIAorQUdSRUVNRU5ULiBQTEVBU0UgUkVBRCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgCitUSElTIEFHUkVFTUVOVCBDQVJFRlVMTFkuIEJZIERPV05MT0FESU5HIFRISVMgCitTUEVDSUZJQ0FUSU9OLCBZT1UgQUNDRVBUIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiAKK1RIRSBBR1JFRU1FTlQuIElGIFlPVSBBUkUgTk9UIFdJTExJTkcgVE8gQkUgQk9VTkQgQlkgCitJVCwgU0VMRUNUIFRIRSAiREVDTElORSIgQlVUVE9OIEFUIFRIRSBCT1RUT00gT0YgVEhJUyAKK1BBR0UuCisKK1NwZWNpZmljYXRpb246ICBKQVZBIFBMQVRGT1JNLCBTVEFOREFSRCBFRElUSU9OIAorKCJTcGVjaWZpY2F0aW9uIikKKworVmVyc2lvbjogIDYKKworU3RhdHVzOiAgRmluYWwgUmVsZWFzZQorCitSZWxlYXNlOiAgRGVjZW1iZXIgNywgMjAwNgorCitDb3B5cmlnaHQgMjAwNiAgIFNVTiBNSUNST1NZU1RFTVMsIElOQy4KKzQxNTAgTmV0d29yayBDaXJjbGUsIFNhbnRhIENsYXJhLCBDYWxpZm9ybmlhIDk1MDU0LCAKK1UuUy5BCitBbGwgcmlnaHRzIHJlc2VydmVkLiAKKworTElNSVRFRCBMSUNFTlNFIEdSQU5UUworCisxLiBMaWNlbnNlIGZvciBFdmFsdWF0aW9uIFB1cnBvc2VzLiBTdW4gaGVyZWJ5IGdyYW50cyAKK3lvdSBhIGZ1bGx5LXBhaWQsIG5vbi1leGNsdXNpdmUsIG5vbi10cmFuc2ZlcmFibGUsIAord29ybGR3aWRlLCBsaW1pdGVkIGxpY2Vuc2UgKHdpdGhvdXQgdGhlIHJpZ2h0IHRvIAorc3VibGljZW5zZSksIHVuZGVyIFN1bidzICBhcHBsaWNhYmxlIGludGVsbGVjdHVhbCAKK3Byb3BlcnR5IHJpZ2h0cyB0byB2aWV3LCBkb3dubG9hZCwgdXNlIGFuZCByZXByb2R1Y2UgCit0aGUgU3BlY2lmaWNhdGlvbiBvbmx5IGZvciB0aGUgcHVycG9zZSBvZiBpbnRlcm5hbCAKK2V2YWx1YXRpb24uICBUaGlzIGluY2x1ZGVzIChpKSBkZXZlbG9waW5nIGFwcGxpY2F0aW9ucyAKK2ludGVuZGVkIHRvIHJ1biBvbiBhbiBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgCitTcGVjaWZpY2F0aW9uLCBwcm92aWRlZCB0aGF0IHN1Y2ggYXBwbGljYXRpb25zIGRvIG5vdCAKK3RoZW1zZWx2ZXMgaW1wbGVtZW50IGFueSBwb3J0aW9uKHMpIG9mIHRoZSAKK1NwZWNpZmljYXRpb24sIGFuZCAoaWkpIGRpc2N1c3NpbmcgdGhlIFNwZWNpZmljYXRpb24gCit3aXRoIGFueSB0aGlyZCBwYXJ0eTsgYW5kIChpaWkpIGV4Y2VycHRpbmcgYnJpZWYgCitwb3J0aW9ucyBvZiB0aGUgU3BlY2lmaWNhdGlvbiBpbiBvcmFsIG9yIHdyaXR0ZW4gCitjb21tdW5pY2F0aW9ucyB3aGljaCBkaXNjdXNzIHRoZSBTcGVjaWZpY2F0aW9uIAorcHJvdmlkZWQgdGhhdCBzdWNoIGV4Y2VycHRzIGRvIG5vdCBpbiB0aGUgYWdncmVnYXRlIAorY29uc3RpdHV0ZSBhIHNpZ25pZmljYW50IHBvcnRpb24gb2YgdGhlIFNwZWNpZmljYXRpb24uCisKKzIuIExpY2Vuc2UgZm9yIHRoZSBEaXN0cmlidXRpb24gb2YgQ29tcGxpYW50IAorSW1wbGVtZW50YXRpb25zLiBTdW4gIGFsc28gZ3JhbnRzIHlvdSBhIHBlcnBldHVhbCwgCitub24tZXhjbHVzaXZlLCBub24tdHJhbnNmZXJhYmxlLCB3b3JsZHdpZGUsIGZ1bGx5IAorcGFpZC11cCwgcm95YWx0eSBmcmVlLCBsaW1pdGVkIGxpY2Vuc2UgKHdpdGhvdXQgdGhlIAorcmlnaHQgdG8gc3VibGljZW5zZSkgdW5kZXIgYW55IGFwcGxpY2FibGUgY29weXJpZ2h0cyAKK29yLCBzdWJqZWN0IHRvIHRoZSBwcm92aXNpb25zIG9mIHN1YnNlY3Rpb24gNCBiZWxvdywgCitwYXRlbnQgcmlnaHRzIGl0IG1heSBoYXZlIGNvdmVyaW5nIHRoZSBTcGVjaWZpY2F0aW9uIAordG8gY3JlYXRlIGFuZC9vciBkaXN0cmlidXRlIGFuIEluZGVwZW5kZW50IAorSW1wbGVtZW50YXRpb24gb2YgdGhlIFNwZWNpZmljYXRpb24gdGhhdDogKGEpIGZ1bGx5IAoraW1wbGVtZW50cyB0aGUgU3BlY2lmaWNhdGlvbiBpbmNsdWRpbmcgYWxsIGl0cyAKK3JlcXVpcmVkIGludGVyZmFjZXMgYW5kIGZ1bmN0aW9uYWxpdHk7IChiKSBkb2VzIG5vdCAKK21vZGlmeSwgc3Vic2V0LCBzdXBlcnNldCBvciBvdGhlcndpc2UgZXh0ZW5kIHRoZSAKK0xpY2Vuc29yIE5hbWUgU3BhY2UsIG9yIGluY2x1ZGUgYW55IHB1YmxpYyBvciAKK3Byb3RlY3RlZCBwYWNrYWdlcywgY2xhc3NlcywgSmF2YSBpbnRlcmZhY2VzLCBmaWVsZHMgCitvciBtZXRob2RzIHdpdGhpbiB0aGUgTGljZW5zb3IgTmFtZSBTcGFjZSBvdGhlciB0aGFuIAordGhvc2UgcmVxdWlyZWQvYXV0aG9yaXplZCBieSB0aGUgU3BlY2lmaWNhdGlvbiBvciAKK1NwZWNpZmljYXRpb25zIGJlaW5nIGltcGxlbWVudGVkOyBhbmQgKGMpIHBhc3NlcyB0aGUgCitUZWNobm9sb2d5IENvbXBhdGliaWxpdHkgS2l0IChpbmNsdWRpbmcgc2F0aXNmeWluZyB0aGUgCityZXF1aXJlbWVudHMgb2YgdGhlIGFwcGxpY2FibGUgVENLIFVzZXJzIEd1aWRlKSBmb3IgCitzdWNoIFNwZWNpZmljYXRpb24gKCJDb21wbGlhbnQgSW1wbGVtZW50YXRpb24iKS4gIEluIAorYWRkaXRpb24sIHRoZSBmb3JlZ29pbmcgbGljZW5zZSBpcyBleHByZXNzbHkgCitjb25kaXRpb25lZCBvbiB5b3VyIG5vdCBhY3Rpbmcgb3V0c2lkZSBpdHMgc2NvcGUuICBObyAKK2xpY2Vuc2UgaXMgZ3JhbnRlZCBoZXJldW5kZXIgZm9yIGFueSBvdGhlciBwdXJwb3NlIAorKGluY2x1ZGluZywgZm9yIGV4YW1wbGUsIG1vZGlmeWluZyB0aGUgU3BlY2lmaWNhdGlvbiwgCitvdGhlciB0aGFuIHRvIHRoZSBleHRlbnQgb2YgeW91ciBmYWlyIHVzZSByaWdodHMsIG9yIAorZGlzdHJpYnV0aW5nIHRoZSBTcGVjaWZpY2F0aW9uIHRvIHRoaXJkIHBhcnRpZXMpLiAgCitBbHNvLCBubyByaWdodCwgdGl0bGUsIG9yIGludGVyZXN0IGluIG9yIHRvIGFueSAKK3RyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIHRyYWRlIG5hbWVzIG9mIFN1biBvciAKK1N1bidzIGxpY2Vuc29ycyBpcyBncmFudGVkIGhlcmV1bmRlci4gIEphdmEsIGFuZCAKK0phdmEtcmVsYXRlZCBsb2dvcywgbWFya3MgYW5kIG5hbWVzIGFyZSB0cmFkZW1hcmtzIG9yIAorcmVnaXN0ZXJlZCB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIAorVS5TLiBhbmQgb3RoZXIgY291bnRyaWVzLgorCiszLiBQYXNzLXRocm91Z2ggQ29uZGl0aW9ucy4gWW91IG5lZWQgbm90IGluY2x1ZGUgCitsaW1pdGF0aW9ucyAoYSktKGMpIGZyb20gdGhlIHByZXZpb3VzIHBhcmFncmFwaCBvciBhbnkgCitvdGhlciBwYXJ0aWN1bGFyICJwYXNzIHRocm91Z2giIHJlcXVpcmVtZW50cyBpbiBhbnkgCitsaWNlbnNlIFlvdSBncmFudCBjb25jZXJuaW5nIHRoZSB1c2Ugb2YgeW91ciAKK0luZGVwZW5kZW50IEltcGxlbWVudGF0aW9uIG9yIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSAKK2l0LiAgSG93ZXZlciwgZXhjZXB0IHdpdGggcmVzcGVjdCB0byBJbmRlcGVuZGVudCAKK0ltcGxlbWVudGF0aW9ucyAoYW5kIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGVtKSB0aGF0IAorc2F0aXNmeSBsaW1pdGF0aW9ucyAoYSktKGMpIGZyb20gdGhlIHByZXZpb3VzIAorcGFyYWdyYXBoLCBZb3UgbWF5IG5laXRoZXI6ICAoYSkgZ3JhbnQgb3Igb3RoZXJ3aXNlIAorcGFzcyB0aHJvdWdoIHRvIHlvdXIgbGljZW5zZWVzIGFueSBsaWNlbnNlcyB1bmRlciAKK1N1bidzICBhcHBsaWNhYmxlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHM7IG5vciAKKyhiKSBhdXRob3JpemUgeW91ciBsaWNlbnNlZXMgdG8gbWFrZSBhbnkgY2xhaW1zIAorY29uY2VybmluZyB0aGVpciBpbXBsZW1lbnRhdGlvbidzIGNvbXBsaWFuY2Ugd2l0aCB0aGUgCitTcGVjaWZpY2F0aW9uIGluIHF1ZXN0aW9uLgorCis0LiBSZWNpcHJvY2l0eSBDb25jZXJuaW5nIFBhdGVudCBMaWNlbnNlcy4gIAorCisJYS4gIFdpdGggcmVzcGVjdCB0byBhbnkgcGF0ZW50IGNsYWltcyBjb3ZlcmVkIAorYnkgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB1bmRlciBzdWJwYXJhZ3JhcGggMiBhYm92ZSB0aGF0IAord291bGQgYmUgaW5mcmluZ2VkIGJ5IGFsbCB0ZWNobmljYWxseSBmZWFzaWJsZSAKK2ltcGxlbWVudGF0aW9ucyBvZiB0aGUgU3BlY2lmaWNhdGlvbiwgc3VjaCBsaWNlbnNlIGlzIAorY29uZGl0aW9uZWQgdXBvbiB5b3VyIG9mZmVyaW5nIG9uIGZhaXIsIHJlYXNvbmFibGUgYW5kIAorbm9uLWRpc2NyaW1pbmF0b3J5IHRlcm1zLCB0byBhbnkgcGFydHkgc2Vla2luZyBpdCBmcm9tIAorWW91LCBhIHBlcnBldHVhbCwgbm9uLWV4Y2x1c2l2ZSwgbm9uLXRyYW5zZmVyYWJsZSwgCit3b3JsZHdpZGUgbGljZW5zZSB1bmRlciBZb3VyIHBhdGVudCByaWdodHMgd2hpY2ggYXJlIAorb3Igd291bGQgYmUgaW5mcmluZ2VkIGJ5IGFsbCB0ZWNobmljYWxseSBmZWFzaWJsZSAKK2ltcGxlbWVudGF0aW9ucyBvZiB0aGUgU3BlY2lmaWNhdGlvbiB0byBkZXZlbG9wLCAKK2Rpc3RyaWJ1dGUgYW5kIHVzZSBhIENvbXBsaWFudCBJbXBsZW1lbnRhdGlvbi4KKworCWIgIFdpdGggcmVzcGVjdCB0byBhbnkgcGF0ZW50IGNsYWltcyBvd25lZCBieSAKK1N1biBhbmQgY292ZXJlZCBieSB0aGUgbGljZW5zZSBncmFudGVkIHVuZGVyIAorc3VicGFyYWdyYXBoIDIsIHdoZXRoZXIgb3Igbm90IHRoZWlyIGluZnJpbmdlbWVudCBjYW4gCitiZSBhdm9pZGVkIGluIGEgdGVjaG5pY2FsbHkgZmVhc2libGUgbWFubmVyIHdoZW4gCitpbXBsZW1lbnRpbmcgdGhlIFNwZWNpZmljYXRpb24sIHN1Y2ggbGljZW5zZSBzaGFsbCAKK3Rlcm1pbmF0ZSB3aXRoIHJlc3BlY3QgdG8gc3VjaCBjbGFpbXMgaWYgWW91IGluaXRpYXRlIAorYSBjbGFpbSBhZ2FpbnN0IFN1biB0aGF0IGl0IGhhcywgaW4gdGhlIGNvdXJzZSBvZiAKK3BlcmZvcm1pbmcgaXRzIHJlc3BvbnNpYmlsaXRpZXMgYXMgdGhlIFNwZWNpZmljYXRpb24gCitMZWFkLCBpbmR1Y2VkIGFueSBvdGhlciBlbnRpdHkgdG8gaW5mcmluZ2UgWW91ciBwYXRlbnQgCityaWdodHMuCisKKwljICBBbHNvIHdpdGggcmVzcGVjdCB0byBhbnkgcGF0ZW50IGNsYWltcyAKK293bmVkIGJ5IFN1biBhbmQgY292ZXJlZCBieSB0aGUgbGljZW5zZSBncmFudGVkIHVuZGVyIAorc3VicGFyYWdyYXBoIDIgYWJvdmUsIHdoZXJlIHRoZSBpbmZyaW5nZW1lbnQgb2Ygc3VjaCAKK2NsYWltcyBjYW4gYmUgYXZvaWRlZCBpbiBhIHRlY2huaWNhbGx5IGZlYXNpYmxlIG1hbm5lciAKK3doZW4gaW1wbGVtZW50aW5nIHRoZSBTcGVjaWZpY2F0aW9uIHN1Y2ggbGljZW5zZSwgd2l0aCAKK3Jlc3BlY3QgdG8gc3VjaCBjbGFpbXMsIHNoYWxsIHRlcm1pbmF0ZSBpZiBZb3UgCitpbml0aWF0ZSBhIGNsYWltIGFnYWluc3QgU3VuICB0aGF0IGl0cyBtYWtpbmcsIGhhdmluZyAKK21hZGUsIHVzaW5nLCBvZmZlcmluZyB0byBzZWxsLCBzZWxsaW5nIG9yIGltcG9ydGluZyBhIAorQ29tcGxpYW50IEltcGxlbWVudGF0aW9uIGluZnJpbmdlcyBZb3VyIHBhdGVudCByaWdodHMuCisKKzUuIERlZmluaXRpb25zLiBGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgQWdyZWVtZW50OiAgCisiSW5kZXBlbmRlbnQgSW1wbGVtZW50YXRpb24iIHNoYWxsIG1lYW4gYW4gCitpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3BlY2lmaWNhdGlvbiB0aGF0IG5laXRoZXIgCitkZXJpdmVzIGZyb20gYW55IG9mIFN1bidzICBzb3VyY2UgY29kZSBvciBiaW5hcnkgY29kZSAKK21hdGVyaWFscyBub3IsIGV4Y2VwdCB3aXRoIGFuIGFwcHJvcHJpYXRlIGFuZCBzZXBhcmF0ZSAKK2xpY2Vuc2UgZnJvbSBTdW4sIGluY2x1ZGVzIGFueSBvZiBTdW4ncyAgc291cmNlIGNvZGUgCitvciBiaW5hcnkgY29kZSBtYXRlcmlhbHM7ICJMaWNlbnNvciBOYW1lIFNwYWNlIiBzaGFsbCAKK21lYW4gdGhlIHB1YmxpYyBjbGFzcyBvciBpbnRlcmZhY2UgZGVjbGFyYXRpb25zIHdob3NlIAorbmFtZXMgYmVnaW4gd2l0aCAiamF2YSIsICJqYXZheCIsICJjb20uc3VuIiAgb3IgdGhlaXIgCitlcXVpdmFsZW50cyBpbiBhbnkgc3Vic2VxdWVudCBuYW1pbmcgY29udmVudGlvbiAKK2Fkb3B0ZWQgYnkgU3VuICB0aHJvdWdoIHRoZSBKYXZhIENvbW11bml0eSBQcm9jZXNzLCBvciAKK2FueSByZWNvZ25pemVkIHN1Y2Nlc3NvcnMgb3IgcmVwbGFjZW1lbnRzIHRoZXJlb2Y7IGFuZCAKKyJUZWNobm9sb2d5IENvbXBhdGliaWxpdHkgS2l0IiBvciAiVENLIiBzaGFsbCBtZWFuIHRoZSAKK3Rlc3Qgc3VpdGUgYW5kIGFjY29tcGFueWluZyBUQ0sgVXNlcidzIEd1aWRlIHByb3ZpZGVkIAorYnkgU3VuICB3aGljaCBjb3JyZXNwb25kcyB0byB0aGUgU3BlY2lmaWNhdGlvbiBhbmQgCit0aGF0IHdhcyBhdmFpbGFibGUgZWl0aGVyIChpKSBmcm9tIFN1bidzIDEyMCBkYXlzIAorYmVmb3JlIHRoZSBmaXJzdCByZWxlYXNlIG9mIFlvdXIgSW5kZXBlbmRlbnQgCitJbXBsZW1lbnRhdGlvbiB0aGF0IGFsbG93cyBpdHMgdXNlIGZvciBjb21tZXJjaWFsIAorcHVycG9zZXMsIG9yIChpaSkgbW9yZSByZWNlbnRseSB0aGFuIDEyMCBkYXlzIGZyb20gCitzdWNoIHJlbGVhc2UgYnV0IGFnYWluc3Qgd2hpY2ggWW91IGVsZWN0IHRvIHRlc3QgWW91ciAKK2ltcGxlbWVudGF0aW9uIG9mIHRoZSBTcGVjaWZpY2F0aW9uLgorCitUaGlzIEFncmVlbWVudCB3aWxsIHRlcm1pbmF0ZSBpbW1lZGlhdGVseSB3aXRob3V0IAorbm90aWNlIGZyb20gU3VuIGlmIHlvdSBicmVhY2ggdGhlIEFncmVlbWVudCBvciBhY3QgCitvdXRzaWRlIHRoZSBzY29wZSBvZiB0aGUgbGljZW5zZXMgZ3JhbnRlZCBhYm92ZS4KKworRElTQ0xBSU1FUiBPRiBXQVJSQU5USUVTIAorCitUSEUgU1BFQ0lGSUNBVElPTiBJUyBQUk9WSURFRCAiQVMgSVMiLiBTVU4gTUFLRVMgTk8gCitSRVBSRVNFTlRBVElPTlMgT1IgV0FSUkFOVElFUywgRUlUSEVSIEVYUFJFU1MgT1IgCitJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPLCBXQVJSQU5USUVTIE9GIAorTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgCitOT04tSU5GUklOR0VNRU5UIChJTkNMVURJTkcgQVMgQSBDT05TRVFVRU5DRSBPRiBBTlkgCitQUkFDVElDRSBPUiBJTVBMRU1FTlRBVElPTiBPRiBUSEUgU1BFQ0lGSUNBVElPTiksIE9SIAorVEhBVCBUSEUgQ09OVEVOVFMgT0YgVEhFIFNQRUNJRklDQVRJT04gQVJFIFNVSVRBQkxFIAorRk9SIEFOWSBQVVJQT1NFLiAgVGhpcyBkb2N1bWVudCBkb2VzIG5vdCByZXByZXNlbnQgYW55IAorY29tbWl0bWVudCB0byByZWxlYXNlIG9yIGltcGxlbWVudCBhbnkgcG9ydGlvbiBvZiB0aGUgCitTcGVjaWZpY2F0aW9uIGluIGFueSBwcm9kdWN0LiBJbiBhZGRpdGlvbiwgdGhlIAorU3BlY2lmaWNhdGlvbiBjb3VsZCBpbmNsdWRlIHRlY2huaWNhbCBpbmFjY3VyYWNpZXMgb3IgCit0eXBvZ3JhcGhpY2FsIGVycm9ycy4KKworTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgCisKK1RPIFRIRSBFWFRFTlQgTk9UIFBST0hJQklURUQgQlkgTEFXLCBJTiBOTyBFVkVOVCBXSUxMIAorU1VOIE9SIElUUyBMSUNFTlNPUlMgQkUgTElBQkxFIEZPUiBBTlkgREFNQUdFUywgCitJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBMT1NUIFJFVkVOVUUsIFBST0ZJVFMgT1IgCitEQVRBLCBPUiBGT1IgU1BFQ0lBTCwgSU5ESVJFQ1QsIENPTlNFUVVFTlRJQUwsIAorSU5DSURFTlRBTCBPUiBQVU5JVElWRSBEQU1BR0VTLCBIT1dFVkVSIENBVVNFRCBBTkQgCitSRUdBUkRMRVNTIE9GIFRIRSBUSEVPUlkgT0YgTElBQklMSVRZLCBBUklTSU5HIE9VVCBPRiAKK09SIFJFTEFURUQgSU4gQU5ZIFdBWSBUTyBZT1VSIEhBVklORywgSU1QRUxFTUVOVElORyBPUiAKK09USEVSV0lTRSBVU0lORyBVU0lORyAgVEhFIFNQRUNJRklDQVRJT04sIEVWRU4gSUYgU1VOIAorQU5EL09SIElUUyBMSUNFTlNPUlMgSEFWRSBCRUVOIEFEVklTRUQgT0YgVEhFIAorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLiAKK1lvdSB3aWxsIGluZGVtbmlmeSwgaG9sZCBoYXJtbGVzcywgYW5kIGRlZmVuZCBTdW4gYW5kIAoraXRzIGxpY2Vuc29ycyBmcm9tIGFueSBjbGFpbXMgYXJpc2luZyBvciByZXN1bHRpbmcgCitmcm9tOiAoaSkgeW91ciB1c2Ugb2YgdGhlIFNwZWNpZmljYXRpb247IChpaSkgdGhlIHVzZSAKK29yIGRpc3RyaWJ1dGlvbiBvZiB5b3VyIEphdmEgYXBwbGljYXRpb24sIGFwcGxldCAKK2FuZC9vciBpbXBsZW1lbnRhdGlvbjsgYW5kL29yIChpaWkpIGFueSBjbGFpbXMgdGhhdCAKK2xhdGVyIHZlcnNpb25zIG9yIHJlbGVhc2VzIG9mIGFueSBTcGVjaWZpY2F0aW9uIAorZnVybmlzaGVkIHRvIHlvdSBhcmUgaW5jb21wYXRpYmxlIHdpdGggdGhlIAorU3BlY2lmaWNhdGlvbiBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhpcyBsaWNlbnNlLiAKKworUkVTVFJJQ1RFRCBSSUdIVFMgTEVHRU5EIAorCitVLlMuIEdvdmVybm1lbnQ6IElmIHRoaXMgU3BlY2lmaWNhdGlvbiBpcyBiZWluZyAKK2FjcXVpcmVkIGJ5IG9yIG9uIGJlaGFsZiBvZiB0aGUgVS5TLiBHb3Zlcm5tZW50IG9yIGJ5IAorYSBVLlMuIEdvdmVybm1lbnQgcHJpbWUgY29udHJhY3RvciBvciBzdWJjb250cmFjdG9yIAorKGF0IGFueSB0aWVyKSwgdGhlbiB0aGUgR292ZXJubWVudCdzIHJpZ2h0cyBpbiB0aGUgCitTb2Z0d2FyZSBhbmQgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24gc2hhbGwgYmUgb25seSAKK2FzIHNldCBmb3J0aCBpbiB0aGlzIGxpY2Vuc2U7IHRoaXMgaXMgaW4gYWNjb3JkYW5jZSAKK3dpdGggNDggQy5GLlIuIDIyNy43MjAxIHRocm91Z2ggMjI3LjcyMDItNCAoZm9yIAorRGVwYXJ0bWVudCBvZiBEZWZlbnNlIChEb0QpIGFjcXVpc2l0aW9ucykgYW5kIHdpdGggNDggCitDLkYuUi4gMi4xMDEgYW5kIDEyLjIxMiAoZm9yIG5vbi1Eb0QgYWNxdWlzaXRpb25zKS4gCisKK1JFUE9SVAorCitJZiB5b3UgcHJvdmlkZSBTdW4gd2l0aCBhbnkgY29tbWVudHMgb3Igc3VnZ2VzdGlvbnMgCitjb25jZXJuaW5nIHRoZSBTcGVjaWZpY2F0aW9uICgiRmVlZGJhY2siKSwgeW91IGhlcmVieTogCisoaSkgYWdyZWUgdGhhdCBzdWNoIEZlZWRiYWNrIGlzIHByb3ZpZGVkIG9uIGEgCitub24tcHJvcHJpZXRhcnkgYW5kIG5vbi1jb25maWRlbnRpYWwgYmFzaXMsIGFuZCAoaWkpIAorZ3JhbnQgU3VuIGEgcGVycGV0dWFsLCBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIGZ1bGx5IAorcGFpZC11cCwgaXJyZXZvY2FibGUgbGljZW5zZSwgd2l0aCB0aGUgcmlnaHQgdG8gCitzdWJsaWNlbnNlIHRocm91Z2ggbXVsdGlwbGUgbGV2ZWxzIG9mIHN1YmxpY2Vuc2VlcywgdG8gCitpbmNvcnBvcmF0ZSwgZGlzY2xvc2UsIGFuZCB1c2Ugd2l0aG91dCBsaW1pdGF0aW9uIHRoZSAKK0ZlZWRiYWNrIGZvciBhbnkgcHVycG9zZS4KKworR0VORVJBTCBURVJNUworCitBbnkgYWN0aW9uIHJlbGF0ZWQgdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBiZSBnb3Zlcm5lZCAKK2J5IENhbGlmb3JuaWEgbGF3IGFuZCBjb250cm9sbGluZyBVLlMuIGZlZGVyYWwgbGF3LiAKK1RoZSBVLk4uIENvbnZlbnRpb24gZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgCitHb29kcyBhbmQgdGhlIGNob2ljZSBvZiBsYXcgcnVsZXMgb2YgYW55IGp1cmlzZGljdGlvbiAKK3dpbGwgbm90IGFwcGx5LgorCitUaGUgU3BlY2lmaWNhdGlvbiBpcyBzdWJqZWN0IHRvIFUuUy4gZXhwb3J0IGNvbnRyb2wgCitsYXdzIGFuZCBtYXkgYmUgc3ViamVjdCB0byBleHBvcnQgb3IgaW1wb3J0IAorcmVndWxhdGlvbnMgaW4gb3RoZXIgY291bnRyaWVzLiBMaWNlbnNlZSBhZ3JlZXMgdG8gCitjb21wbHkgc3RyaWN0bHkgd2l0aCBhbGwgc3VjaCBsYXdzIGFuZCByZWd1bGF0aW9ucyBhbmQgCithY2tub3dsZWRnZXMgdGhhdCBpdCBoYXMgdGhlIHJlc3BvbnNpYmlsaXR5IHRvIG9idGFpbiAKK3N1Y2ggbGljZW5zZXMgdG8gZXhwb3J0LCByZS1leHBvcnQgb3IgaW1wb3J0IGFzIG1heSBiZSAKK3JlcXVpcmVkIGFmdGVyIGRlbGl2ZXJ5IHRvIExpY2Vuc2VlLgorCitUaGlzIEFncmVlbWVudCBpcyB0aGUgcGFydGllcycgZW50aXJlIGFncmVlbWVudCAKK3JlbGF0aW5nIHRvIGl0cyBzdWJqZWN0IG1hdHRlci4gSXQgc3VwZXJzZWRlcyBhbGwgCitwcmlvciBvciBjb250ZW1wb3JhbmVvdXMgb3JhbCBvciB3cml0dGVuIAorY29tbXVuaWNhdGlvbnMsIHByb3Bvc2FscywgY29uZGl0aW9ucywgcmVwcmVzZW50YXRpb25zIAorYW5kIHdhcnJhbnRpZXMgYW5kIHByZXZhaWxzIG92ZXIgYW55IGNvbmZsaWN0aW5nIG9yIAorYWRkaXRpb25hbCB0ZXJtcyBvZiBhbnkgcXVvdGUsIG9yZGVyLCAgYWNrbm93bGVkZ21lbnQsIAorb3Igb3RoZXIgY29tbXVuaWNhdGlvbiBiZXR3ZWVuIHRoZSBwYXJ0aWVzIHJlbGF0aW5nIHRvIAoraXRzIHN1YmplY3QgbWF0dGVyIGR1cmluZyB0aGUgdGVybSBvZiB0aGlzIEFncmVlbWVudC4gCitObyBtb2RpZmljYXRpb24gdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBiZSBiaW5kaW5nLCAKK3VubGVzcyBpbiB3cml0aW5nIGFuZCBzaWduZWQgYnkgYW4gYXV0aG9yaXplZCAKK3JlcHJlc2VudGF0aXZlIG9mIGVhY2ggcGFydHkuCisKKworCitSZXYuIEFwcmlsLCAyMDA2CisKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL3N1bi1qZGwgYi9saWNlbnNlcy9zdW4tamRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2YjExNzEKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9zdW4tamRsCkBAIC0wLDAgKzEsMzMyIEBACitKQVZBIERJU1RSSUJVVElPTiBMSUNFTlNFIChWRVIuIDEuMCkKK0phdmEgM0QKKworSS4gTElDRU5TRSBHUkFOVFMsIFRFUk1TIEFORCBSRVNUUklDVElPTlMKKworMS4wIEdlbmVyYWwgTGljZW5zZSBUZXJtcy4gVGhpcyBKYXZhIERpc3RyaWJ1dGlvbiBMaWNlbnNlICgiSkRMIikgaXMKK2JldHdlZW4gU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiAoIlN1biIpIGFuZCBZb3Ugd2hlcmUgIllvdSIgbWVhbnMgdGhlCitpbmRpdmlkdWFsIG9yIGxlZ2FsIGVudGl0eSBleGVyY2lzaW5nIHJpZ2h0cyB1bmRlciB0aGlzCitKREwuICJUZWNobm9sb2d5IiBtZWFucyB0aGUgZm9sbG93aW5nIGFzIHByb3ZpZGVkIHVuZGVyIHRoaXMgSkRMOiAoaSkKK3RoZSBzb3VyY2UgY29kZSBhbmQgYmluYXJ5IGNvZGUgZnJvbSB0aGUgUmVmZXJlbmNlIEltcGxlbWVudGF0aW9uCisoIlJJIikgb2YgdGhlIEphdmEgM0RUTSB2ZXJzaW9uIDEuMyBTcGVjaWZpY2F0aW9uICh0aGUKKyJTcGVjaWZpY2F0aW9uIikgYW5kIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiwgYWxsIGFzIHJldmlzZWQgb3IgdXBncmFkZWQKK2FuZCBtYWRlIGF2YWlsYWJsZSBoZXJldW5kZXI7IGFuZCAoaWkpIHRoZSBhc3NvY2lhdGVkIHRlY2hub2xvZ3kKK2NvbXBhdGliaWxpdHkga2l0ICgiVENLIikuIFRoZSBUQ0sgY29udGFpbnMgdGhlIFRDSyBkb2N1bWVudGF0aW9uLAordXNlcidzIGd1aWRlICgiVENLIFVzZXIncyBHdWlkZSIpLCB0ZXN0IHRvb2xzIGFuZCB0ZXN0IHN1aXRlCithc3NvY2lhdGVkIHdpdGggdGhlIFNwZWNpZmljYXRpb24sIGFzIHJldmlzZWQgb3IgdXBncmFkZWQgYnkgU3VuLiBUaGUKK1RDSyBpcyBwcm92aWRlZCBzbyB0aGF0IFlvdSBtYXkgZGV0ZXJtaW5lIGlmIFlvdXIgaW1wbGVtZW50YXRpb24gaXMKK2NvbXBsaWFudCB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uLiAiTW9kaWZpY2F0aW9ucyIgbWVhbnMgYW55IChpKSBjaGFuZ2UKK29yIGFkZGl0aW9uIHRvIG9yIGRlcml2YXRpdmUgb2YgdGhlIFRlY2hub2xvZ3k7IG9yIChpaSkgbmV3IHNvdXJjZSBvcgorb2JqZWN0IGNvZGUgaW1wbGVtZW50aW5nIHRoZSBTcGVjaWZpY2F0aW9uIGZvciB0aGUKK1RlY2hub2xvZ3kuICJDb21tZXJjaWFsIFVzZSIgbWVhbnM6IChpKSBZb3VyIHVzZSBvZiB0aGUgUkkgYW5kL29yCitNb2RpZmljYXRpb25zIGFzIHBhcnQgb2YgYSBDb21wYXRpYmxlIEltcGxlbWVudGF0aW9uIHdpdGhpbiBZb3VyCitidXNpbmVzcyBvciBvcmdhbml6YXRpb24sIGJ1dCBvbmx5IGJ5IFlvdXIgZW1wbG95ZWVzIG9yIGFnZW50czsgYW5kL29yCisoaWkpIGFueSB1c2Ugb3IgZGlzdHJpYnV0aW9uLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5IGJ5IFlvdSBvZiB0aGUgUkkKK2FuZC9vciBNb2RpZmljYXRpb25zIGFzIHBhcnQgb2YgYSBDb21wYXRpYmxlIEltcGxlbWVudGF0aW9uIHRvIGFueQordGhpcmQgcGFydHksIGFsb25lIG9yIGJ1bmRsZWQgd2l0aCBhbnkgb3RoZXIgc29mdHdhcmUgb3IgaGFyZHdhcmUsIGZvcgorZGlyZWN0IG9yIGluZGlyZWN0IGNvbW1lcmNpYWwgb3Igc3RyYXRlZ2ljIGdhaW4gb3IgYWR2YW50YWdlLiBCeSBZb3VyCit1c2Ugb3IgZGlzdHJpYnV0aW9uIG9mIHRoZSBUZWNobm9sb2d5IGFuZCBNb2RpZmljYXRpb25zLCBZb3UgYWdyZWUgdG8KK3RoZSB0ZXJtcyBvZiB0aGlzIEpETC4KKworMi4wIExpY2Vuc2UgR3JhbnRzLCBSZXN0cmljdGlvbnMgYW5kIFRlcm1pbmF0aW9uLgorCisyLjEgQ29tbWVyY2lhbCBVc2UgYW5kIEludGVybmFsIERlcGxveW1lbnQgTGljZW5zZSBHcmFudHMuIFN1YmplY3QgdG8KK3RoZSB0ZXJtcyBvZiB0aGlzIEpETCwgU3VuIGdyYW50cyB0byBZb3UsIHRvIHRoZSBleHRlbnQgb2YgU3VuJ3MKK2xpY2Vuc2FibGUgY29weXJpZ2h0cywgcGF0ZW50cyBhbmQgdHJhZGUgc2VjcmV0cyBpbiB0aGUgUkksIGEgbGltaXRlZCwKK25vbi1leGNsdXNpdmUsIG5vbi10cmFuc2ZlcmFibGUsIHdvcmxkd2lkZSBhbmQgcm95YWx0eS1mcmVlIGxpY2Vuc2UgdG8KK21vZGlmeSwgY29tcGlsZSwgcmVwcm9kdWNlLCBkaXN0cmlidXRlLCBpbnRlcm5hbGx5IHVzZSBhbmQgaW50ZXJuYWxseQorZGVwbG95IGNvZGUgYW5kIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiBmcm9tIHRoZSBSSSBhbmQvb3IgTW9kaWZpY2F0aW9ucworZm9yIENvbW1lcmNpYWwgVXNlLCBidXQgb25seSBhcyBwYXJ0IG9mIFlvdXIgb3duIENvbXBhdGlibGUKK0ltcGxlbWVudGF0aW9uIChhcyBkZWZpbmVkIGJlbG93KSwgYW5kIG9ubHkgaWYgWW91IG1ha2Ugc3VjaAorZGlzdHJpYnV0aW9ucyBhcyBmb2xsb3dzOgorCisoaSkgU291cmNlIENvZGUuIFlvdSBjYW4gb25seSBkaXN0cmlidXRlIHNvdXJjZSBjb2RlIGZvciB0aGUgUkkgYW5kCitNb2RpZmljYXRpb25zIHVuZGVyIGFsbCBvZiB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6IChhKSBZb3UgbWFrZSBzdWNoCitkaXN0cmlidXRpb24gdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgSkRMOyAoYikgd2l0aG91dCBvZmZlcmluZyBvcgoraW1wb3NpbmcgYW55IGRpZmZlcmVudCB0ZXJtczsgKGMpIHRvIGEgcmVjZWlwaWVudCB3aG8gaGFzIGFjY2VwdGVkIHRoZQordGVybXMgb2YgdGhpcyBKREw7IGFuZCAoZCkgWW91IHByb3ZpZGUgYSBjb3B5IG9mIHRoaXMgSkRMIHRvIGVhY2ggc3VjaAorcmVjZWlwaWVudDsKKworKGlpKSBCaW5hcnkgQ29kZS4gWW91IGNhbiBkaXN0cmlidXRlIGJpbmFyeSBjb2RlIGZvciB0aGUgUkkgYW5kCitNb2RpZmljYXRpb25zIGJ1dCBvbmx5IHVuZGVyIGxpY2Vuc2UgdGVybXMgd2hpY2ggKGEpIGhhdmUgYmVlbgorYWNjZXB0ZWQgYnkgdGhlIHJlY2VpcGllbnQ7IChiKSBhcmUgY29uc2lzdGVudCwgYW5kIG5vdCBjb25mbGljdGluZywKK3dpdGggdGhlIHRlcm1zIG9mIHRoZSBKREw7IGFuZCAoYykgd2hlcmUgc3VjaCB0ZXJtcyBhcmUgbm8gbGVzcworcHJvdGVjdGl2ZSBvZiBTdW4gdGhhbiB0aGUgdGVybXMgb2YgdGhpcyBKREwuCisKKzIuMiBUQ0sgTGljZW5zZSBHcmFudC4gU3ViamVjdCB0byB0aGUgdGVybXMgb2YgdGhpcyBKREwsIFN1biBncmFudHMgdG8KK1lvdSwgdG8gdGhlIGV4dGVudCBvZiBTdW4ncyBsaWNlbnNhYmxlIGNvcHlyaWdodHMsIHBhdGVudHMgYW5kIHRyYWRlCitzZWNyZXRzIGluIHRoZSBUQ0ssIGEgbGltaXRlZCwgbm9uLWV4Y2x1c2l2ZSwgbm9uLXRyYW5zZmVyYWJsZSwKK3dvcmxkd2lkZSBhbmQgcm95YWx0eS1mcmVlIGxpY2Vuc2UgdG8gaW50ZXJuYWxseSB1c2UgdGhlIFRDSyBmb3IgdGhlCitzb2xlIHB1cnBvc2Ugb2YgZGV2ZWxvcGluZyBhbmQgdGVzdGluZyBZb3VyIENvbXBhdGlibGUgSW1wbGVtZW50YXRpb25zCisoYXMgZGVmaW5lZCBiZWxvdykuCisKKzIuMi4xIFRDSyBNYXN0ZXIgU3VwcG9ydCBBZ3JlZW1lbnQuIElmIHlvdSBkZXNpcmUgc3VwcG9ydCBmb3IgdGhlIFRDSywKK1lvdSBtYXkgZXhlY3V0ZSBhIHNlcGFyYXRlIFRDSyBtYXN0ZXIgc3VwcG9ydCB3aXRoIFN1biBhcyBkZXNjcmliZWQgb24KK3RoZSBUZWNobm9sb2d5IFNpdGUgb3Igb24gc3VjaCBvdGhlciBVUkwgYXMgU3VuIG1heSBkZXNpZ25hdGUgZnJvbQordGltZSB0byB0aW1lLgorCisyLjIuMiBUQ0sgVXNlIFRlcm1zLiBZb3VyIFRDSyBsaWNlbnNlIGdyYW50IGhlcmV1bmRlciBpcyBleHByZXNzbHkKK2NvbmRpdGlvbmVkIHVwb24geW91ciBjb250aW51ZWQgYWRoZXJhbmNlIHRvIHRoZSBmb2xsb3dpbmcKK3Jlc3RyaWN0aW9uczoKKworKGkpIFlvdSBtYXkgbm90IHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgVENLIHRvIGFueSB0aGlyZCBwYXJ0eQorZXhjZXB0IGZvciBhbnkgc3BlY2lmaWMgVENLIGNvZGUgZmlsZXMgaWRlbnRpZmllZCBhcyByZWRpc3RyaWJ1dGFibGVzCitpbiB0aGUgVENLIFVzZXIncyBHdWlkZSAoIlJlZGlzdHJpYnV0YWJsZXMiKSwgYnV0IG9ubHk6IChhKSBhcyBwYXJ0IG9mCithIFRDSyBBZGFwdG9yIGFjY29tcGFueWluZyBhIENvbXBhdGlibGUgSW1wbGVtZW50YXRpb24gKHdoZXJlIGEgIlRDSworQWRhcHRvciIgbWVhbnMgYSBwcm9ncmFtIHRoYXQgZWZmZWN0cyBpbnRlcm9wZXJhYmlsaXR5IGJldHdlZW4gdGhlIFRDSworYW5kIHRoZSBDb21wYXRpYmxlIEltcGxlbWVudGF0aW9uKTsgYW5kIChiKSBwdXJzdWFudCB0byBhIGxpY2Vuc2UKK2FncmVlbWVudCB0aGF0IHByb3RlY3RzIFN1bidzIGludGVyZXN0cyBjb25zaXN0ZW50IHdpdGggdGhlIHRlcm1zIG9mCit0aGUgSkRMOworCisoaWkpIFlvdSBtYXkgbm90IGNyZWF0ZSBkZXJpdmF0aXZlIHdvcmtzIG9mIHRoZSBUQ0sgbm9yIG9mIGFueSBvZiBpdHMKK2NvbXBvbmVudHMgZXhjZXB0IGZvciB0aGUgUmVkaXN0cmlidXRhYmxlcyBpbiBhIFRDSyBBZGFwdG9yOworCisoaWlpKSBZb3UgbWF5IG5vdCBkaXNhc3NlbWJsZSBvciBkZWNvbXBpbGUgYmluYXJ5IHBvcnRpb25zIG9mIHRoZQorVENLJ3MgdGVzdCBzdWl0ZXMgb3IgdGVzdCB0b29scyBvciBvdGhlcndpc2UgYXR0ZW1wdCB0byBkZXJpdmUgdGhlCitzb3VyY2UgY29kZSBmcm9tIHN1Y2ggYmluYXJ5IHBvcnRpb25zOworCisoaXYpIFlvdSBtYXkgbm90IGRldmVsb3Agb3RoZXIgdGVzdCBzdWl0ZXMgaW50ZW5kZWQgdG8gdmFsaWRhdGUKK2NvbXBhdGliaWxpdHkgd2l0aCB0aGUgU3BlY2lmaWNhdGlvbiB0byB3aGljaCB0aGUgVENLIGxpY2Vuc2VkCitoZXJldW5kZXIgY29ycmVzcG9uZHM7CisKKyh2KSBZb3UgbWF5IG5vdCB1c2UgdGhlIFRDSyB0byB0ZXN0IGEgdGhpcmQgcGFydHkncyBwcm9kdWN0OworCisodmkpIFlvdSBtYXkgbm90IG1ha2UgQ29tbWVyY2lhbCBVc2Ugb2YgY29kZSB3aGljaCBpbXBsZW1lbnRzIGFueQorcG9ydGlvbiBvZiB0aGUgU3BlY2lmaWNhdGlvbiB1bmxlc3Mgc3VjaCBjb2RlIGlzIGluY2x1ZGVkIGluIGEKK0NvbXBhdGlibGUgSW1wbGVtZW50YXRpb247CisKKyh2aWkpIFlvdSBtYXkgZGlzY2xvc2UgVGVzdCBSZXBvcnRzICh3aGVyZSAiVGVzdCBSZXBvcnRzIiBtZWFucyB0aG9zZQorcmVwb3J0cyBnZW5lcmF0ZWQgYnkgdGhlIFRDSyB3aGljaCBpZGVudGlmeSBvbmx5IGNvbmZpZ3VyYXRpb24KK2luZm9ybWF0aW9uIGFuZCB0aGUgc3RhdHVzIG9mIGluZGl2aWR1YWwgb3IgYWdncmVnYXRlIHRlc3QgZXhlY3V0aW9ucykKK2ZvciBhbiBpbXBsZW1lbnRhdGlvbiB3aGljaCBZb3UgYXJlIGF0dGVtcHRpbmcgdG8gY2VydGlmaWVkIGluCithY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIG9mIHRoaXMgSkRMIGZvciB0aGUgc29sZSBwdXJwb3NlIG9mIG1ha2luZworWW91ciBpbXBsZW1lbnRhdGlvbiBhIENvbXBhdGlibGUgSW1wbGVtZW50YXRpb24sIGJ1dCB5b3UgbWF5IG5vdCBtYWtlCithbnkgY2xhaW1zIG9mIGNvbXBhcmF0aXZlIGNvbXBhdGliaWxpdHkgbm9yIGRpc2Nsb3NlIGFueSBvdGhlciBUQ0sKK3Rlc3RpbmcgaW5mb3JtYXRpb24gdG8gYW55IHBhcnR5LiBGb3IgZXhhbXBsZSwgWW91IGNhbm5vdCBjbGFpbSB0aGF0CitZb3VyIGltcGxlbWVudGF0aW9uIGlzICJuZWFybHkgY29tcGF0aWJsZSIgb3IgIjk4JSBjb21wYXRpYmxlLiIgV2hlbgorWW91IHNoYXJlIFRlc3QgUmVwb3J0cyBpbiBhbnkgcHVibGljIGZvcnVtLCBpbmNsdWRpbmcgbWFpbGluZyBsaXN0cywKK21hcmtldGluZyBtYXRlcmlhbCBvciBwcmVzcyByZWxlYXNlcywgYW5kIFlvdXIgaW1wbGVtZW50YXRpb24gaXMgbm90IGEKK0NvbXBhdGlibGUgSW1wbGVtZW50YXRpb24sIFlvdSBtdXN0IHN0YXRlIHRoYXQgWW91ciBpbXBsZW1lbnRhdGlvbiBpcworIm5vdCBjb21wYXRpYmxlOyIgYW5kCisKKyh2aWlpKSBZb3Ugd2lsbCBwcm90ZWN0IHRoZSBUQ0sgYXMgY29uZmlkZW50aWFsIGluZm9ybWF0aW9uIG9mIFN1bgorYW5kLCBleGNlcHQgYXMgZXhwcmVzc2x5IGF1dGhvcml6ZWQgaGVyZWluLCBZb3UgbWF5IG5vdCBkaXNjbG9zZSB0aGUKK1RDSyB0byBhbnkgdGhpcmQgcGFydHkuIFRoaXMgb2JsaWdhdGlvbiBvZiBjb25maWRlbnRpYWxpdHkgd2l0aAorcmVzcGVjdCB0byB0aGUgVENLIHdpbGwgc3Vydml2ZSBhbnkgdGVybWluYXRpb24gb3IgZXhwaXJhdGlvbiBvZiB0aGlzCitKREwuCisKKzIuMyBUZXJtIGFuZCBUZXJtaW5hdGlvbi4gVGhpcyBKREwgc2hhbGwgaGF2ZSBhbiBpbml0aWFsIHRlcm0gb2YgdHdvCisoMikgeWVhcnMgYWZ0ZXIgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgSkRMIGFuZCBzaGFsbCB0aGVyZWFmdGVyCithdXRvbWF0aWNhbGx5IHJlbmV3IGZvciBhZGRpdGlvbmFsIG9uZSB5ZWFyIHRlcm1zIHVubGVzcyBlaXRoZXIgcGFydHkKK3Byb3ZpZGVzIG5vdGljZSB0byB0aGUgb3RoZXIgcGFydHkgc2l4dHkgKDYwKSBkYXlzIHByaW9yIHRvIGFuCithbm5pdmVyc2FyeSBkYXRlLiBUaGUgbGljZW5zZSBncmFudHMgb2YgdGhpcyBKREwsIGFyZSBleHByZXNzbHkKK2NvbmRpdGlvbmVkIHVwb24gWW91ciBub3QgYWN0aW5nIG91dHNpZGUgdGhlaXIgc2NvcGUsIGFuZCBZb3VyCitjb250aW51ZWQgY29tcGxpYW5jZSB3aXRoIHRoZSBtYXRlcmlhbCBwcm92aXNpb25zIG9mIHRoaXMgSkRMLiBBbGwKK2xpY2Vuc2UgZ3JhbnRzIHVuZGVyIHRoaXMgSkRMIHdpbGwgYXV0b21hdGljYWxseSBhbmQgaW1tZWRpYXRlbHkgYmUKK3Jldm9rZWQgd2l0aG91dCBub3RpY2UgaWYgWW91IGZhaWwgdG8gc28gY29tcGx5LiBVcG9uIHRlcm1pbmF0aW9uIG9yCitleHBpcmF0aW9uIG9mIHRoaXMgSkRMLCBZb3UgbXVzdCBkaXNjb250aW51ZSBhbGwgdXNlIGFuZCBkaXN0cmlidXRpb24KK29mIHRoZSBUZWNobm9sb2d5IGFuZCBhbnkgQ29tcGF0aWJsZSBJbXBsZW1lbnRhdGlvbiBsaWNlbnNlZCB1bmRlcgordGhpcyBKREwuIEFsbCBzdWJsaWNlbnNlcyBZb3UgaGF2ZSBwcm9wZXJseSBncmFudGVkIGhlcmV1bmRlciBzaGFsbAorc3Vydml2ZSB0ZXJtaW5hdGlvbiBvciBleHBpcmF0aW9uIG9mIFlvdXIgcmlnaHRzIHVuZGVyIHRoZQorSkRMLiBQcm92aXNpb25zIHdoaWNoIHNob3VsZCwgYnkgdGhlaXIgbmF0dXJlLCByZW1haW4gaW4gZWZmZWN0IGFmdGVyCit0ZXJtaW5hdGlvbiBvciBleHBpcmF0aW9uIHNoYWxsIHN1cnZpdmUsIGluY2x1ZGluZywgd2l0aG91dAorbGltaXRhdGlvbiwgdGhlIHByb3Zpc2lvbnMgb2YgQXJ0aWNsZSBJSSAoR2VuZXJhbCBUZXJtcykgYW5kIHRoZSBUQ0sKK2NvbmZpZGVudGlhbGl0eSBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEpETC4KKworMi40IEdlbmVyYWwgTGljZW5zZSBSZXN0cmljdGlvbnMuIFNvbWUgcG9ydGlvbnMgb2YgdGhlIFRlY2hub2xvZ3kgYXJlCitwcm92aWRlZCB3aXRoIG5vdGljZXMgYW5kL29yIG9wZW4gc291cmNlIG9yIG90aGVyIGxpY2Vuc2VzIGZyb20gb3RoZXIKK3BhcnRpZXMgd2hpY2ggZ292ZXJuIHRoZSB1c2Ugb2YgdGhvc2UgcG9ydGlvbnMuIFlvdXIgdXNlIG9yCitkaXN0cmlidXRpb24gb2YgZW5jcnlwdGlvbiB0ZWNobm9sb2d5IGNvbnRhaW5lZCB3aXRoaW4gdGhlIFRlY2hubG9neQoraXMgc3ViamVjdCB0byBhbGwgYXBwbGljYWJsZSBnb3Zlcm5tZW50YWwgcmVndWxhdGlvbnMgb2YgdGhlIFVuaXRlZAorU3RhdGVzIG9mIEFtZXJpY2EgYW5kIHRoZSBjb3VudHJ5IHdoZXJlIHRoZSBUZWNobm9sb2d5IGlzCitkZXBsb3llZC4gWW91IGFncmVlIHRvIGNvbXBseSB3aXRoIHRoZSBVLlMuIGV4cG9ydCBjb250cm9scyBhbmQgdHJhZGUKK2xhd3Mgb2Ygb3RoZXIgY291bnRyaWVzIHRoYXQgYXBwbHkgdG8gdGhlIFRlY2hub2xvZ3kgYW5kIENvbXBhdGlibGUKK0ltcGxlbWVudGF0aW9ucy4gWW91IGFja25vd2xlZGdlIHRoYXQgdGhlIFRlY2hub2xvZ3kgaXMgbm90IGRlc2lnbmVkLAorbGljZW5zZWQgb3IgaW50ZW5kZWQgZm9yIHVzZSBpbiB0aGUgZGVzaWduLCBjb25zdHJ1Y3Rpb24sIG9wZXJhdGlvbiBvcgorbWFpbnRlbmFuY2Ugb2YgYW55IG51Y2xlYXIgZmFjaWxpdHkuIE90aGVyIHRoYW4gdGhlIHJpZ2h0cyBncmFudGVkCitoZXJlaW4sIFN1biByZXRhaW5zIGFsbCByaWdodHMsIHRpdGxlLCBhbmQgaW50ZXJlc3QgaW4gdGhlIFRlY2hubG9neS4KKworMy4wIENvbXBhdGliaWxpdHkgYW5kIFVzZSBvZiB0aGUgVENLLgorCiszLjEgQ29tcGF0aWJsZSBJbXBsZW1lbnRhdGlvbiBUQ0sgUmVxdWlyZW1lbnRzLiBZb3VyIHVzZSBvZiB0aGUgUkkKK2FuZC9vciBNb2RpZmljYXRpb25zIGFzIHBhcnQgb2YgYW4gaW1wbGVtZW50YXRpb24gb2YgdGhlIFNwZWNpZmljYXRpb24KK2lzIGEgIkNvbXBhdGlibGUgSW1wbGVtZW50YXRpb24iIGlmIHRoZSBpbXBsZW1lbnRhdGlvbiBtZWV0cyB0aGUKK2ZvbGxvd2luZyByZXF1aXJlbWVudHM6CisKKzMuMS4xIEEgQ29tcGF0aWJsZSBJbXBsZW1lbnRhdGlvbiBtdXN0IGNvbXBseSB3aXRoIHRoZSBmdWxsCitTcGVjaWZpY2F0aW9uLCBpbmNsdWRpbmcgYWxsIGl0cyByZXF1aXJlZCBpbnRlcmZhY2VzIGFuZAorZnVuY3Rpb25hbGl0eTsKKworMy4xLjIgQSBDb21wYXRpYmxlIEltcGxlbWVudGF0aW9uIG11c3QgZWl0aGVyOiAoaSkgcGFzcyB0aGUgbW9zdAorY3VycmVudCBjb21wYXRpYmlsaXR5IHJlcXVpcmVtZW50cyAoYXMgZGVmaW5lZCBieSB0aGUgVENLIFVzZXIncworR3VpZGUpIHdoaWNoIHdlcmUgbWFkZSBhdmFpbGFibGUgYnkgU3VuIG9uZSBodW5kcmVkIHR3ZW50eSAoMTIwKSBkYXlzCitiZWZvcmUgZmlyc3QgY29tbWVyY2lhbCBzaGlwbWVudCAoIkZDUyIpIG9mIGVhY2ggdmVyc2lvbiBvZiB0aGUKK0NvbXBhdGlibGUgSW1wbGVtZW50YXRpb24gKGVnLiBpZiBZb3VyIEZDUyB3YXMgRGVjZW1iZXIgMzEsIDIwMDMsIFlvdQorbXVzdCBoYXZlIHBhc3NlZCB0aGUgbW9zdCBjdXJyZW50IHZlcnNpb24gb2YgdGhlIFRDSyBhcyBvZiBTZXB0ZW1iZXIKKzIsIDIwMDMpOyBvciAoaWkpIGF0IFlvdXIgb3B0aW9uLCBwYXNzIGFsbCB0aGUgY29tcGF0aWJpbGl0eQorcmVxdWlyZW1lbnRzIG9mIGEgbmV3ZXIgdmVyc2lvbiBvZiB0aGUgVENLIGFuZCBpdHMgYXNzb2NpYXRlZCBUQ0sKK1VzZXIncyBHdWlkZTsKKworMy4xLjMgQSBDb21wYXRpYmxlIEltcGxlbWVudGF0aW9uIG1heSBub3QgbW9kaWZ5IHRoZSBmdW5jdGlvbmFsCitiZWhhdmlvciBvZiB0aGUgIkphdmEgQ2xhc3NlcyIgd2hpY2ggbWVhbnMgdGhlIHNwZWNpZmljIGNsYXNzCitsaWJyYXJpZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBUZWNobm9sb2d5OyBhbmQKKworMy4xLjQgQSBDb21wYXRpYmxlIEltcGxlbWVudGF0aW9uIG1heSBub3QgbW9kaWZ5LCBzdWJzZXQsIHN1cGVyc2V0IG9yCitvdGhlcndpc2UgZXh0ZW5kIHRoZSBMaWNlbnNvciBOYW1lIFNwYWNlLCBub3IgaW5jbHVkZSBhbnkgcHVibGljIG9yCitwcm90ZWN0ZWQgcGFja2FnZXMsIGNsYXNzZXMsIEphdmEgaW50ZXJmYWNlcywgZmllbGRzIG9yIG1ldGhvZHMgd2l0aGluCit0aGUgTGljZW5zb3IgTmFtZSBTcGFjZSBvdGhlciB0aGFuIHRob3NlIHJlcXVpcmVkIGFuZC9vciBhdXRob3JpemVkIGJ5Cit0aGUgU3BlY2lmaWNhdGlvbi4gIkxpY2Vuc29yIE5hbWUgU3BhY2UiIG1lYW5zIHRoZSBwdWJsaWMgY2xhc3Mgb3IKK2ludGVyZmFjZSBkZWNsYXJhdGlvbnMgd2hvc2UgbmFtZXMgYmVnaW4gd2l0aCAiamF2YSIsICJqYXZheCIsCisiY29tLnN1biIgb3IgdGhlaXIgZXF1aXZhbGVudHMgaW4gYW55IHN1YnNlcXVlbnQgbmFtaW5nIGNvbnZlbnRpb24KK2Fkb3B0ZWQgYnkgU3VuIHRocm91Z2ggdGhlIEphdmEgQ29tbXVuaXR5IFByb2Nlc3MsIG9yIGFueSByZWNvZ25pemVkCitzdWNjZXNzb3JzIG9yIHJlcGxhY2VtZW50cyB0aGVyZW9mLgorCiszLjIgU2VsZi1DZXJ0aWZpY2F0aW9uIGZvciBDb21wYXRpYmlsaXR5LiBZb3Ugc2hhbGwgc2VsZi1jZXJ0aWZ5IHRoYXQKK1lvdXIgQ29tcGF0aWJsZSBJbXBsZW1lbnRhdGlvbiBwYXNzZXMgdGhlIGFwcGxpY2FibGUgVENLIGFzIHNldCBmb3J0aAorYWJvdmUsIGlmIGFuZCB3aGVuIFlvdXIgQ29tcGF0aWJsZSBJbXBsZW1lbnRhdGlvbiBpbiBmYWN0IGRvZXMgc28sCitwcm92aWRlZCB0aGF0OgorCiszLjIuMSBJZiBTdW4gcG9saWN5IGFsc28gcmVxdWlyZXMgdmVyaWZpY2F0aW9uIG9mIGNvbXBhdGliaWxpdHkgZm9yCitZb3VyIENvbXBhdGlibGUgSW1wbGVtZW50YXRpb24gdGhlbiBZb3Ugc2hhbGwsIHByaW9yIHRvIHRoZSBGQ1Mgb2YgdGhlCitDb21wYXRpYmxlIEltcGxlbWVudGF0aW9uLCBzdWJtaXQgdmVyaWZpY2F0aW9uIG9mIGNvbXBhdGliaWxpdHkgdG8gU3VuCitvciB0byBhbiBpbmRlcGVuZGVudCB0ZXN0IGZhY2lsaXR5IGRlc2lnbmF0ZWQgYnkgU3VuLiBJZiBzdWNoCit2ZXJpZmljYXRpb24gaXMgYnkgYW4gaW5kZXBlbmRlbnQgdGVzdCBmYWNpbGl0eSwgdGhlbiB0aGUgcmVhc29uYWJsZQorY29zdHMgb2Ygc3VjaCBhY3Rpdml0eSAoaW5jbHVkaW5nIGFueSBhcHBsaWNhYmxlIGZlZXMpIHNoYWxsIGJlIGF0CitZb3VyIGV4cGVuc2UuIFN1biBtYXkgcHVibGlzaCBvciBvdGhlcndpc2UgZGlzY2xvc2UgWW91ciB0ZXN0IHJlc3VsdHMuCisKKzMuMi4yIFVwb24gdGhpcnR5ICgzMCkgZGF5cyB3cml0dGVuIG5vdGljZSBieSBTdW4sIGFuZCBubyBtb3JlIHRoYW4KK3R3byAoMikgdGltZXMgcGVyIGNhbGVuZGFyIHllYXIsIFlvdSBzaGFsbCBwZXJtaXQgU3VuIG9yIGl0cworYXV0aG9yaXplZCByZXByZXNlbnRhdGl2ZSB0byBpbnNwZWN0IGFuZCB0ZXN0IGFueSBDb21wYXRpYmxlCitJbXBsZW1lbnRhdGlvbiB3aGljaCBoYXMgYmVlbiBzZWxmLWNlcnRpZmllZCBwZXIgdGhpcyBzdWJzZWN0aW9uIDMuMgordG8gZW5zdXJlIHRoYXQgc3VjaCBDb21wYXRpYmxlIEltcGxlbWVudGF0aW9uIG1lZXRzIHRoZSBjb21wYXRpYmlsaXR5CithbmQgb3RoZXIgcmVxdWlyZW1lbnRzIGZvciBhIENvbXBhdGlibGUgSW1wbGVtZW50YXRpb24gYXMgc2V0IGZvcnRoCitoZXJlaW4uIFRoZSByZWFzb25hYmxlIGNvc3RzIG9mIHN1Y2ggaW5zcGVjdGlvbiBzaGFsbCBiZSBhdCBTdW4ncworZXhwZW5zZTsgcHJvdmlkZWQsIGhvd2V2ZXIsIHRoYXQgWW91IHNoYWxsIHJlaW1idXJzZSBTdW4gZm9yIHN1Y2gKK2Nvc3RzIGlmIHRoZSBpbnNwZWN0aW9uIHJldmVhbHMgdGhhdCB0aGUgQ29tcGF0aWJsZSBJbXBsZW1lbnRhdGlvbgorZG9lcyBub3QgbWVldCBzdWNoIHJlcXVpcmVtZW50cyBhbmQgdGhlc2UgZGVmaWNpZW5jaWVzIGFyZSBub3QgY3VyZWQKK3dpdGhpbiB0aGlydHkgKDMwKSBkYXlzLgorCis0LjAgRmVlcyBhbmQgUm95YWx0aWVzLiBUaGVyZSBhcmUgbm8gZmVlcyBvciByb3lhbGl0ZXMgYXNzb2NpYXRlZCB3aXRoCit0aGUgbGljZW5zZSBncmFudHMgZm9yIHRoZSBUZWNobm9sb2d5IGxpY2Vuc2VkIHVuZGVyIHRoaXMgSkRMLgorCitJSS4gR0VORVJBTCBURVJNUworCis1LjAgTm8gV2FycmFudHkuIFRIRSBURUNITk9MT0dZIEFORC9PUiBNT0RJRklDQVRJT05TIEFSRSBQUk9WSURFRCAiQVMKK0lTIiwgV0lUSE9VVCBXQVJSQU5USUVTIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUywgSU1QTElFRCBPUgorU1RBVFVUT1JZIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBXQVJSQU5USUVTIFRIQVQgVEhFCitURUNITk9MT0dZIEFORC9PUiBNT0RJRklDQVRJT05TIEFSRSBGUkVFIE9GIERFRkVDVFMsIE1FUkNIQU5UQUJMRSwgRklUCitGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SIE5PTi1JTkZSSU5HSU5HIE9GIFRISVJEIFBBUlRZIFJJR0hUUy4gWU9VCitBR1JFRSBUSEFUIFlPVSBCRUFSIFRIRSBFTlRJUkUgUklTSyBJTiBDT05ORUNUSU9OIFdJVEggWU9VUiBVU0UgQU5ECitESVNUUklCVVRJT04gT0YgQU5ZIEFORCBBTEwgVEVDSE5PTE9HWSBBTkQvT1IgTU9ESUZJQ0FUSU9OUyBBUkUgVU5ERVIKK1RISVMgSkRMLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIFBFUk1JVCBUSEUgRVhDTFVTSU9OIE9GIElNUExJRUQKK1dBUlJBTlRJRVMgU08gVEhFIEFCT1ZFIEVYQ0xVU0lPTlMgTUFZIE5PVCBBUFBMWSBUTyBZT1UKKworNi4wIEluZnJpbmdlbWVudCBDbGFpbXMuIFN1biBtYXkgdGVybWluYXRlIHRoaXMgSkRMLCBpbiBTdW4ncyBzb2xlCitkaXNjcmV0aW9uLCB1cG9uIGFueSBhY3Rpb24gaW5pdGlhdGVkIGJ5IFlvdSBhbGxlZ2luZyB0aGF0IHRoZSB1c2Ugb3IKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgVGVjaG5vbG9neSBhbmQvb3IgTW9kaWZpY2F0aW9ucyBieSBTdW4sIG9yIGFueQorb3RoZXIgbGljZW5zZWUgb2YgdGhlIFRlY2hub2xvZ3kgYW5kL29yIE1vZGlmaWNhdGlvbnMsIGluZnJpbmdlcyBhCitwYXRlbnQgb3duZWQgb3IgY29udHJvbGxlZCBieSBZb3UuIEluIGFkZGl0aW9uLCBpZiBhbnkgcG9ydGlvbiBvZiwgb3IKK2Z1bmN0aW9uYWxpdHkgaW1wbGVtZW50ZWQgYnksIHRoZSBUZWNobm9sb2d5IGJlY29tZXMgdGhlIHN1YmplY3Qgb2YgYQorY2xhaW0gb3IgdGhyZWF0ZW5lZCBjbGFpbSBvZiBpbmZyaW5nZW1lbnQgKCJBZmZlY3RlZCBNYXRlcmlhbHMiKSwgU3VuCittYXksIGF0IGl0cyBzb2xlIG9wdGlvbiwgKGkpIGF0dGVtcHQgdG8gcHJvY3VyZSB0aGUgcmlnaHRzIG5lY2Vzc2FyeQorZm9yIFlvdSB0byBjb250aW51ZSB1c2luZyB0aGUgQWZmZWN0ZWQgTWF0ZXJpYWxzLCAoaWkpIG1vZGlmeSB0aGUKK0FmZmVjdGVkIE1hdGVyaWFscyBzbyB0aGF0IHRoZXkgYXJlIG5vIGxvbmdlciBpbmZyaW5naW5nLCBvciAoaWlpKQoraW1tZWRpYXRlbHkgc3VzcGVuZCBZb3VyIHJpZ2h0cyB0byB1c2UgYW5kIGRpc3RyaWJ1dGUgdGhlIEFmZmVjdGVkCitNYXRlcmlhbHMgdW5kZXIgdGhpcyBKREwgYnkgcG9zdGluZyBvZiBub3RpY2Ugb2Ygc3VzcGVuc2lvbiBvbiB0aGUKK1RlY2hub2xvZ3kgU2l0ZSwgYW5kIHJlZnVuZCB0b1lvdSB0aGUgYW1vdW50LCBpZiBhbnksIGhhdmluZyB0aGVuCithY3R1YWxseSBiZWVuIHBhaWQgYnkgWW91IHRvIFN1biB1bmRlciB0aGlzIEpETCwgb24gYSBzdHJhaWdodCBsaW5lLAorZml2ZSB5ZWFyIGJhc2lzIC4KKworNy4wIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LiBTdW4gd2lsbCBiZSBub3QgYmUgbGlhYmxlIGZvciBhbnkgY2xhaW1zCityZWxhdGluZyB0bywgb3IgYXJpc2luZyBvdXQgb2YsIHRoaXMgSkRMLCB3aGV0aGVyIGluIHRvcnQsIGNvbnRyYWN0IG9yCitvdGhlcndpc2UsIGluIGFuIGFtb3VudCBpbiBleGNlc3Mgb2YgYW55IGFubnVhbCBsaWNlbnNlIGZlZXMgWW91IHBhaWQKK3RvIFN1biBmb3IgdGhlIFRlY2hub2xvZ3kuIElOIE5PIEVWRU5UIFdJTEwgU1VOIEJFIExJQUJMRSBGT1IgQU5ZCitJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgQ09OU0VRVUVOVElBTCBPUiBQVU5JVElWRSBEQU1BR0VTIElOCitDT05ORUNUSU9OIFdJVEggT1IgQVJJU0lORyBPVVQgT0YgVEhJUyBKREwgKElOQ0xVRElORywgV0lUSE9VVAorTElNSVRBVElPTiwgTE9TUyBPRiBQUk9GSVRTLCBVU0UsIERBVEEsIE9SIEVDT05PTUlDIEFEVkFOVEFHRSBPRiBBTlkKK1NPUlQpLCBIT1dFVkVSIElUIEFSSVNFUyBBTkQgVU5ERVIgQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFkgKGluY2x1ZGluZworbmVnbGlnZW5jZSksIFJFR0FSRExFU1MgT0YgV0hFVEhFUiBPUiBOT1QgU1VOIEhBUyBCRUVOIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gRlVSVEhFUk1PUkUsIExJQUJJTElUWSBVTkRFUiBUSElTIEpETAorU0hBTEwgQkUgU08gTElNSVRFRCBBTkQgRVhDTFVERUQsIE5PVFdJVEhTVEFORElORyBGQUlMVVJFIE9GIFRIRQorRVNTRU5USUFMIFBVUlBPU0UgT0YgQU5ZIFJFTUVEWS4gVE8gVEhFIEVYVEVOVCBBTlkgSU5ESVJFQ1QsIFBVTklUSVZFLAorU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIFlPVSBJTkNVUiBGT1IgQU5ZIFJFQVNPTgorV0hBVFNPRVZFUiBDQU5OT1QgQkUgRElTQ0xBSU1FRCBUSEVOIFRIRSBFTlRJUkUgTElBQklMSVRZIE9GIFNVTiBVTkRFUgorQU5ZIFBST1ZJU0lPTiBPRiBUSElTIEpETCwgQU5EIFlPVVIgRVhDTFVTSVZFIFJFTUVEWSBGT1IgQU5ZIFNVQ0gKK0RBTUFHRVMsIFNIQUxMIEJFIExJTUlURUQgVE8gVEhFIEdSRUFURVIgT0YgVEhFIEFNT1VOVCBBQ1RBTExZIFBBSUQgQlkKK1lPVSBGT1IgVEhFIFRFQ0hOT0xPR1kgT1IgRklWRSBIVU5EUkVEIFVTIERPTExBUlMsIFdISUNIRVZFUiBJUworR1JFQVRFUi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBQRVJNSVQgVEhFIEVYQ0xVU0lPTiBPUiBMSU1JVEFUSU9OCitPRiBJTkNJREVOVEFMUyBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgU08gVEhFIEFCT1ZFIEVYQ0xVU0lPTiBBTkQKK0xJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzguMCBTdXBwb3J0LiBTdW4gZG9lcyBub3QgcHJvdmlkZSBhbnkgc3VwcG9ydCBmb3IgdGhlIFRlY2hub2xvZ3kgb3IKK3RoZSBUQ0sgdG8gZWl0aGVyIFlvdSBvciBZb3VyIGN1c3RvbWVycyB1bmRlciB0aGlzIEpETC4gU3VwcG9ydCBmb3IKK3RoZSBUQ0sgaXMgcHJvdmlkZWQgdW5kZXIgYSBzZXBhcmF0ZSBUQ0sgbWFzdGVyIHN1cHBvcnQgYWdyZWVtZW50LiBJZgorWW91IGRlc2lyZSBzdXBwb3J0IGZvciB0aGUgUkksIFlvdSBtYXkgY29udGFjdCBTdW4uIFlvdSBhcmUgc29sZWx5CityZXBvbnNpYmxlIGZvciBwcm92aWRpbmcgYWxsIHN1cHBvcnQgdG8gWW91ciBjdXN0b21lcnMgd2l0aCByZXNwZWN0IHRvCit0aGUgVGVjaG5vbG9neSwgVENLLCBNb2RpZmljYXRpb25zIGFuZC9vciBDb21wYXRpYmxlIEltcGxlbWVudGF0aW9uLgorCis5LjAgTWFya2V0aW5nIGFuZCBQcmVzcyBBbm5vdW5jZW1lbnRzLiBZb3VyIGluaXRpYWwgcHJlc3MgYW5ub3VuY2VtZW50Citjb25jZXJuaW5nIGV4ZWN1dGlvbiBvZiB0aGlzIEpETCBtdXN0IGJlIHJldmlld2VkIGFuZCBhcHByb3ZlZCBieSBTdW4KK3ByaW9yIHRvIGl0cyByZWxlYXNlLiBZb3UgaGVyZWJ5IGF1dGhvcml6ZXMgU3VuIHRvIGluY2x1ZGUgWW91IGluIGEKK3B1Ymxpc2hlZCBsaXN0IG9mIGxpY2Vuc2VlcyBvZiB0aGUgVGVjaG5vbG9neS4gU3VuIHNoYWxsIGFsc28gYmUKK2F1dGhvcml6ZWQgdG8gdXNlIFlvdXIgbmFtZSBpbiBhZHZlcnRpc2luZywgbWFya2V0aW5nIGNvbGxhdGVyYWwsIGFuZAorY3VzdG9tZXIgc3VjY2VzcyBzdG9yaWVzIHByZXBhcmVkIGJ5IG9yIG9uIGJlaGFsZiBvZiBTdW4gZm9yIHRoZQorVGVjaG5vbG9neSBzdWJqZWN0IHRvIFlvdXIgcHJpb3IgYXBwcm92YWwsIHN1Y2ggYXBwcm92YWwgbm90IHRvIGJlCit1bnJlYXNvbmFibHkgd2l0aGhlbGQgb3IgZGVsYXllZC4KKworMTAuMCBOb3RpY2VzLiBBbGwgbm90aWNlcyByZXF1aXJlZCBieSB0aGlzIEpETCBtdXN0IGJlIGluIHdyaXRpbmcuIFN1bgorc2hhbGwgZGVsaXZlciBub3RpY2UgdG8gWW91IHZpYSBlaXRoZXIgZS1tYWlsIG9yIGJ5IHBoeXNpY2FsIG1haWwKK2Jhc2VkIG9uIHRoZSBpbmZvcm1hdGlvbiBZb3UgcHJvdmlkZWQgdG8gU3VuIHdoZW4geW91IGFjY2VwdGVkIHRoaXMKK0pETC4gTm90aWNlcyBieSBZb3UgdG8gU3VuIHdpbGwgYmUgZWZmZWN0aXZlIG9ubHkgdXBvbiByZWNlaXB0IGJ5IFN1bgorYXQgdGhlIGZvbGxvd2luZyBwaHlzaWNhbCBhZGRyZXNzZXM6IFN1biBNaWNyb3N5c3RlbXMsIEluYy4sIDQxNTAKK05ldHdvcmsgQ2lyY2xlLCBTYW50YSBDbGFyYSwgQ2FsaWZvcm5pYSA5NTA1NCwgQXR0bi46IFN1biBTb2Z0d2FyZSBWUAorb2YgU2FsZXMsIGNjOiBHZW5lcmFsIENvdW5zZWwsIGNjOiBQcm9kdWN0IExhdyBMZWdhbCBEZXBhcnRtZW50IG9yIHRvCitzdWNoIGRpZmZlcmVudCBhZGRyZXNzIGFzIFN1biBwcm92aWRlcyBvbiB0aGUgVGVjaG5vbG9neSBTaXRlIGZvciBzdWNoCitwdXJwb3NlLgorCisxMS4wIFByb3ByaWV0YXJ5IFJpZ2h0cyBOb3RpY2VzIGFuZCBCcmFuZGluZyBSZXF1aXJlbWVudHMuIFRoZXJlIGFyZQorbm8gc3BlY2lmaWMgYnJhbmRpbmcgcmVxdWlyZW1lbnRzIGFzc29jaWF0ZWQgd2l0aCB0aGUgVGVjaG5vbG9neSB1bmRlcgordGhpcyBKREwuIFlvdSBtYXkgbm90IHJlbW92ZSBhbnkgY29weXJpZ2h0IG5vdGljZXMsIHRyYWRlbWFyayBub3RpY2VzCitvciBvdGhlciBwcm9wcmlldGFyeSBsZWdlbmRzIG9mIFN1biBvciBpdHMgc3VwcGxpZXJzIGNvbnRhaW5lZCBvbiBvcgoraW4gdGhlIFRlY2hub2xvZ3ksIGluY2x1ZGluZyBhbnkgbm90aWNlcyBvZiBsaWNlbnNlcyBmb3Igb3BlbiBzb3VyY2UKK2NvbXBvbmVudHMuIFlvdSBhZ3JlZSB0byBjb21wbHkgd2l0aCB0aGUgU3VuIFRyYWRlbWFyayBhbmQgTG9nbyBVc2FnZQorUmVxdWlyZW1lbnRzIGN1cnJlbnRseSBsb2NhdGVkIGF0CitodHRwOi8vd3d3LnN1bi5jb20vcG9saWNpZXMvdHJhZGVtYXJrcy4gRXhjZXB0IGFzIHByb3ZpZGVkIGluIHRoaXMKK0pETCwgbm8gcmlnaHQsIHRpdGxlIG9yIGludGVyZXN0IHRvIFN1bidzIHRyYWRlbWFya3MsIGJyYW5kcyBvciBsb2dvcworaXMgZ3JhbnRlZCBoZXJlaW4uCisKKzEyLjAgVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2Vycy4gVGhlIFRlY2hub2xvZ3kgYW5kIE1vZGlmaWNhdGlvbnMgYXJlIGEKKyJjb21tZXJjaWFsIGl0ZW0sIiBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbiA0OCBDLkYuUi4gMi4xMDEKKyhPY3QuIDE5OTUpLCBjb25zaXN0aW5nIG9mICJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIiBhbmQKKyJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIGRvY3VtZW50YXRpb24sIiBhcyBzdWNoIHRlcm1zIGFyZSB1c2VkCitpbiA0OCBDLkYuUi4gMTIuMjEyIChTZXB0LiAxOTk1KS4gQ29uc2lzdGVudCB3aXRoIDQ4IEMuRi5SLiAxMi4yMTIgYW5kCis0OCBDLkYuUi4gMjI3LjcyMDItMSB0aHJvdWdoIDIyNy43MjAyLTQgKEp1bmUgMTk5NSksIGFsbAorVS5TLiBHb3Zlcm5tZW50IEVuZCBVc2VycyBhY3F1aXJlIFRlY2hub2xvZ3kgYW5kL29yIE1vZGlmaWNhdGlvbnMgd2l0aAorb25seSB0aG9zZSByaWdodHMgc2V0IGZvcnRoIGhlcmVpbi4gWW91IGFncmVlIHRvIHBhc3MgdGhpcyBub3RpY2UgdG8KK1lvdXIgbGljZW5zZWVzLgorCisxMy4wIE1pc2NlbGxhbmVvdXMuIFRoaXMgSkRMIGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBVbml0ZWQKK1N0YXRlcyBhbmQgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEsIGFzIGFwcGxpZWQgdG8gY29udHJhY3RzIGVudGVyZWQKK2ludG8gYW5kIHBlcmZvcm1lZCBpbiBDYWxpZm9ybmlhIGJldHdlZW4gQ2FsaWZvcm5pYSByZXNpZGVudHMuIFRoZQorcmVsYXRpb25zaGlwIGNyZWF0ZWQgdW5kZXIgdGhpcyBKREwgaXMgdGhhdCBvZiBsaWNlbnNvciBhbmQgbGljZW5zZWUKK2FuZCBkb2VzIG5vdCBjcmVhdGUgYW55IG90aGVyIHJlbGF0aW9uc2hpcCBzdWNoIGFzIGEgcGFydG5lcnNoaXAsCitmcmFuY2hpc2UsIGpvaW50IHZlbnR1cmUsIGFnZW5jeSBvciBlbXBsb3ltZW50IHJlbGF0aW9uc2hpcCBiZXR3ZWVuCit0aGUgcGFydGllcy4gVGhpcyBKREwgbWF5IG5vdCBiZSBhc3NpZ25lZCBvciB0cmFuc2ZlcnJlZCBieSBlaXRoZXIKK3BhcnR5IHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiB0aGUgb3RoZXIgcGFydHksIHdoaWNoCitjb25zZW50IHNoYWxsIG5vdCBiZSB1bnJlYXNvbmFibHkgd2l0aGhlbGQgb3IgZGVsYXllZCwgZXhjZXB0IHRoYXQgU3VuCittYXkgYXNzaWduOiAoaSkgdG8gYW4gYWZmaWxpYXRlZCBjb21wYW55LCBvciAoaWkpIGluIHRoZSBldmVudCBvZiBhCittZXJnZXIsIGFjcXVpc2l0aW9uIG9yIHNhbGUgb2YgYWxsIG9yIHN1YnN0YW50aWFsbHkgYWxsIG9mIHRoZSBhc3NldHMKK29mIFN1bi4gQW55IGV4cHJlc3Mgd2FpdmVyIG9yIGZhaWx1cmUgdG8gZXhlcmNpc2UgcHJvbXB0bHkgYW55IHJpZ2h0Cit1bmRlciB0aGlzIEFncmVlbWVudCB3aWxsIG5vdCBjcmVhdGUgYSBjb250aW51aW5nIHdhaXZlciBub3IgYW55CitleHBlY3RhdGlvbiBvZiBub24tZW5mb3JjZW1lbnQuIFRoZSBkaXNjbGFpbWVyIG9mIHdhcnJhbnRpZXMgYW5kCitsaW1pdGF0aW9ucyBvZiBsaWFiaWxpdHkgY29uc3RpdHV0ZSBhbiBlc3NlbnRpYWwgYmFzaXMgb2YgdGhlIGJhcmdhaW4KK2luIHRoaXMgSkRMLiBUaGlzIEpETCByZXByZXNlbnRzIHRoZSBjb21wbGV0ZSBhZ3JlZW1lbnQgb2YgdGhlIHBhcnRpZXMKK2NvbmNlcm5pbmcgdGhlIHN1YmplY3QgbWF0dGVyIGhlcmVvZiBhbmQgbWF5IG5vdCBiZSBtb2RpZmllZCBvcgorYW1lbmRlZCBpbiB3aG9sZSBvciBwYXJ0LCBleGNlcHQgYnkgYSB3cml0dGVuIGluc3RydW1lbnQgc2lnbmVkIGJ5IHRoZQorcGFydGllcycgYXV0aG9yaXplZCByZXByZXNlbnRhdGl2ZXMuIE5vdGhpbmcgaGVyZWluIHNoYWxsIHN1cGVyc2VkZSBvcgorbW9kaWZ5IHRoZSB0ZXJtcyBvZiBhbnkgc2VwYXJhdGUgc2lnbmVkIHdyaXR0ZW4gbGljZW5zZSBhZ3JlZW1lbnQgWW91CittYXkgaGF2ZSBleGVjdXRlZCB3aXRoIFN1biByZWdhcmRpbmcgdGhlIFRlY2hub2xvZ3kuCisKK1lPVTogICAgQnk6ICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXyAgICAgICAgTmFtZTogIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKKyAgICAgICAgVGl0bGU6IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18gICAgICAgRGF0ZTogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvc3VuLWpybCBiL2xpY2Vuc2VzL3N1bi1qcmwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ1ZTRhMgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL3N1bi1qcmwKQEAgLTAsMCArMSwxMTMgQEAKK0pBVkEgUkVTRUFSQ0ggTElDRU5TRQorCitWZXJzaW9uIDEuMgorCitJLiBERUZJTklUSU9OUy4KKworIkxpY2Vuc2VlICIgbWVhbnMgWW91IGFuZCBhbnkgb3RoZXIgcGFydHkgdGhhdCBoYXMgZW50ZXJlZCBpbnRvIGFuZCBoYXMgaW4gZWZmZWN0IGEgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UuCisKKyJNb2RpZmljYXRpb25zIiBtZWFucyBhbnkgKGEpIGNoYW5nZSBvciBhZGRpdGlvbiB0byB0aGUgVGVjaG5vbG9neSBvciAoYikgbmV3IHNvdXJjZSBvciBvYmplY3QgY29kZSBpbXBsZW1lbnRpbmcgYW55IHBvcnRpb24gb2YgdGhlIFRlY2hub2xvZ3kuCisKKyJTdW4iIG1lYW5zIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYW5kIGl0cyBzdWNjZXNzb3JzIGFuZCBhc3NpZ25lZXMuCisKKyJSZXNlYXJjaCBVc2UiIG1lYW5zIHJlc2VhcmNoLCBldmFsdWF0aW9uLCBvciBkZXZlbG9wbWVudCBmb3IgdGhlIHB1cnBvc2Ugb2YgYWR2YW5jaW5nIGtub3dsZWRnZSwgdGVhY2hpbmcsIGxlYXJuaW5nLCBvciBjdXN0b21pemluZyB0aGUgVGVjaG5vbG9neSBvciAKK01vZGlmaWNhdGlvbnMgZm9yIHBlcnNvbmFsIHVzZS4gUmVzZWFyY2ggVXNlIGV4cHJlc3NseSBleGNsdWRlcyB1c2Ugb3IgZGlzdHJpYnV0aW9uIGZvciBkaXJlY3Qgb3IgaW5kaXJlY3QgY29tbWVyY2lhbCAoaW5jbHVkaW5nIHN0cmF0ZWdpYykgZ2FpbiBvciAKK2FkdmFudGFnZS4KKworIlRlY2hub2xvZ3kiIG1lYW5zIHRoZSBzb3VyY2UgY29kZSwgb2JqZWN0IGNvZGUgYW5kIHNwZWNpZmljYXRpb25zIG9mIHRoZSB0ZWNobm9sb2d5IG1hZGUgYXZhaWxhYmxlIGJ5IFN1biBwdXJzdWFudCB0byB0aGlzIExpY2Vuc2UuCisKKyJUZWNobm9sb2d5IFNpdGUiIG1lYW5zIHRoZSB3ZWJzaXRlIGRlc2lnbmF0ZWQgYnkgU3VuIGZvciBhY2Nlc3NpbmcgdGhlIFRlY2hub2xvZ3kuCisKKyJZb3UiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIGV4ZWN1dGluZyB0aGlzIExpY2Vuc2Ugb3IgdGhlIGxlZ2FsIGVudGl0eSBvciBlbnRpdGllcyByZXByZXNlbnRlZCBieSB0aGUgaW5kaXZpZHVhbCBleGVjdXRpbmcgdGhpcyBMaWNlbnNlLgorCitJSS4gUFVSUE9TRS4KKworU3VuIGlzIGxpY2Vuc2luZyB0aGUgVGVjaG5vbG9neSB1bmRlciB0aGlzIEphdmEgUmVzZWFyY2ggTGljZW5zZSAodGhlICJMaWNlbnNlIikgdG8gcHJvbW90ZSByZXNlYXJjaCwgZWR1Y2F0aW9uLCBpbm5vdmF0aW9uLCBhbmQgZGV2ZWxvcG1lbnQgdXNpbmcgdGhlIAorVGVjaG5vbG9neS4KKworQ09NTUVSQ0lBTCBVU0UgQU5EIERJU1RSSUJVVElPTiBPRiBURUNITk9MT0dZIEFORCBNT0RJRklDQVRJT05TIElTIFBFUk1JVFRFRCBPTkxZIFVOREVSIFRIRSBKQVZBIERJU1RSSUJVVElPTiBMSUNFTlNFIE9SIEEgU1VOIENPTU1FUkNJQUwgTElDRU5TRSBBVkFJTEFCTEUgCitBVCBodHRwOi8vd3d3LnN1bi5jb20vc29mdHdhcmUvY29tbXVuaXR5c291cmNlLgorCitJSUkuIFJFU0VBUkNIIFVTRSBSSUdIVFMuCisKK0EuIExpY2Vuc2UgR3JhbnQuIFN1YmplY3QgdG8gdGhlIGNvbmRpdGlvbnMgY29udGFpbmVkIGhlcmVpbiwgU3VuIGdyYW50cyB0byBZb3UgYSBub24tZXhjbHVzaXZlLCBub24tdHJhbnNmZXJhYmxlLCB3b3JsZHdpZGUsIGFuZCByb3lhbHR5LWZyZWUgbGljZW5zZSB0byBkbyAKK3RoZSBmb2xsb3dpbmcgZm9yIFlvdXIgUmVzZWFyY2ggVXNlIG9ubHk6CisKKzEuIFJlcHJvZHVjZSwgY3JlYXRlIE1vZGlmaWNhdGlvbnMgb2YsIGFuZCB1c2UgdGhlIFRlY2hub2xvZ3kgYWxvbmUsIG9yIHdpdGggTW9kaWZpY2F0aW9uczsKKworMi4gU2hhcmUgc291cmNlIGNvZGUgb2YgdGhlIFRlY2hub2xvZ3kgYWxvbmUsIG9yIHdpdGggTW9kaWZpY2F0aW9ucywgd2l0aCBvdGhlciBMaWNlbnNlZXM7CisKKzMuIERpc3RyaWJ1dGUgb2JqZWN0IGNvZGUgb2YgdGhlIFRlY2hub2xvZ3ksIGFsb25lLCBvciB3aXRoIE1vZGlmaWNhdGlvbnMsIHRvIGFueSB0aGlyZCBwYXJ0aWVzIGZvciBSZXNlYXJjaCBVc2Ugb25seSwgdW5kZXIgYSBsaWNlbnNlIG9mIFlvdXIgY2hvaWNlIHRoYXQgCitpcyBjb25zaXN0ZW50IHdpdGggdGhpcyBMaWNlbnNlOyBhbmQgcHVibGlzaCBwYXBlcnMgYW5kIGJvb2tzIGRpc2N1c3NpbmcgdGhlIFRlY2hub2xvZ3kgd2hpY2ggbWF5IGluY2x1ZGUgcmVsZXZhbnQgZXhjZXJwdHMgdGhhdCBkbyBub3QgaW4gdGhlIGFnZ3JlZ2F0ZSAKK2NvbnN0aXR1dGUgYSBzaWduaWZpY2FudCBwb3J0aW9uIG9mIHRoZSBUZWNobm9sb2d5LgorCitCLiBSZXNpZHVhbCBSaWdodHMuIFlvdSBtYXkgdXNlIGFueSBpbmZvcm1hdGlvbiBpbiBpbnRhbmdpYmxlIGZvcm0gdGhhdCB5b3UgcmVtZW1iZXIgYWZ0ZXIgYWNjZXNzaW5nIHRoZSBUZWNobm9sb2d5LCBleGNlcHQgd2hlbiBzdWNoIHVzZSB2aW9sYXRlcyBTdW4ncyAKK2NvcHlyaWdodHMgb3IgcGF0ZW50IHJpZ2h0cy4KKworQy4gTm8gSW1wbGllZCBMaWNlbnNlcy4gT3RoZXIgdGhhbiB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZWluLCBTdW4gcmV0YWlucyBhbGwgcmlnaHRzLCB0aXRsZSwgYW5kIGludGVyZXN0IGluIFRlY2hub2xvZ3ksIGFuZCBZb3UgcmV0YWluIGFsbCByaWdodHMsIHRpdGxlLCAKK2FuZCBpbnRlcmVzdCBpbiBZb3VyIE1vZGlmaWNhdGlvbnMgYW5kIGFzc29jaWF0ZWQgc3BlY2lmaWNhdGlvbnMsIHN1YmplY3QgdG8gdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworSVYuIElOVEVMTEVDVFVBTCBQUk9QRVJUWSBSRVFVSVJFTUVOVFMKKworQXMgYSBjb25kaXRpb24gdG8gWW91ciBMaWNlbnNlLCBZb3UgYWdyZWUgdG8gY29tcGx5IHdpdGggdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnMgYW5kIHJlc3BvbnNpYmlsaXRpZXM6CisKK0EuIE5vdGljZXMuIFlvdSB3aWxsIG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55IGNvcHlyaWdodCBvciBvdGhlciBwcm9wcmlldGFyeSBub3RpY2VzIGluIGFueSBUZWNobm9sb2d5IHRoYXQgWW91IGRpc3RyaWJ1dGUuIFRoZSBzdGF0ZW1lbnQsICJVc2UgYW5kIAorRGlzdHJpYnV0aW9uIGlzIHN1YmplY3QgdG8gdGhlIEphdmEgUmVzZWFyY2ggTGljZW5zZSBhdmFpbGFibGUgYXQgaHR0cDovL2phdmEzZC5kZXYuamF2YS5uZXQvanJsLmh0bWwsIiBtdXN0IGFwcGVhciBwcm9taW5lbnRseSBpbiB0aGUgc291cmNlIGNvZGUgYW5kIAorc3BlY2lmaWNhdGlvbnMgb2YgdGhlIFRlY2hub2xvZ3kgYW5kIFlvdXIgTW9kaWZpY2F0aW9ucywgYW5kIGluIHRoZSBzYW1lIGZpbGUgYXMgYWxsIFlvdXIgY29weXJpZ2h0IGFuZCBvdGhlciBwcm9wcmlldGFyeSBub3RpY2VzIGZvciBvYmplY3QgY29kZS4KKworQi4gTGljZW5zZWUgRXhjaGFuZ2VzLiBBbnkgVGVjaG5vbG9neSBhbmQgTW9kaWZpY2F0aW9ucyBZb3UgcmVjZWl2ZSBmcm9tIGFueSBMaWNlbnNlZSBhcmUgZ292ZXJuZWQgYnkgdGhpcyBMaWNlbnNlLgorCitWLiBHRU5FUkFMIFRFUk1TLgorCitBLiBEaXNjbGFpbWVyIE9mIFdhcnJhbnRpZXMuCisKK1RIRSBURUNITk9MT0dZIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVElFUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBURUNITk9MT0dZIAorSVMgRlJFRSBPRiBERUZFQ1RTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SIE5PTi1JTkZSSU5HSU5HIE9GIFRISVJEIFBBUlRZIFJJR0hUUy4gWU9VIEFHUkVFIFRIQVQgWU9VIEJFQVIgVEhFIEVOVElSRSBSSVNLIElOIAorQ09OTkVDVElPTiBXSVRIIFlPVVIgVVNFIEFORCBESVNUUklCVVRJT04gT0YgQU5ZIEFORCBBTEwgVEVDSE5PTE9HWSBVTkRFUiBUSElTIExJQ0VOU0UuCisKK0IuIEluZnJpbmdlbWVudDsgTGltaXRhdGlvbiBPZiBMaWFiaWxpdHkuCisKKzEuIElmIGFueSBwb3J0aW9uIG9mLCBvciBmdW5jdGlvbmFsaXR5IGltcGxlbWVudGVkIGJ5LCB0aGUgVGVjaG5vbG9neSBiZWNvbWVzIHRoZSBzdWJqZWN0IG9mIGEgY2xhaW0gb3IgdGhyZWF0ZW5lZCBjbGFpbSBvZiBpbmZyaW5nZW1lbnQgKCJBZmZlY3RlZCAKK01hdGVyaWFscyIpLCBTdW4gbWF5LCBpbiBpdHMgdW5yZXN0cmljdGVkIGRpc2NyZXRpb24sIHN1c3BlbmQgWW91ciByaWdodHMgdG8gdXNlIGFuZCBkaXN0cmlidXRlIHRoZSBBZmZlY3RlZCBNYXRlcmlhbHMgdW5kZXIgdGhpcyBMaWNlbnNlLiBTdWNoIHN1c3BlbnNpb24gCitvZiByaWdodHMgd2lsbCBiZSBlZmZlY3RpdmUgaW1tZWRpYXRlbHkgdXBvbiBTdW4ncyBwb3N0aW5nIG9mIG5vdGljZSBvZiBzdXNwZW5zaW9uIG9uIHRoZSBUZWNobm9sb2d5IFNpdGUuCisKKzIuIElOIE5PIEVWRU5UIFdJTEwgU1VOIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIFBVTklUSVZFLCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgSU4gQ09OTkVDVElPTiBXSVRIIE9SIEFSSVNJTkcgT1VUIE9GIAorVEhJUyBMSUNFTlNFIChJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgTE9TUyBPRiBQUk9GSVRTLCBVU0UsIERBVEEsIE9SIEVDT05PTUlDIEFEVkFOVEFHRSBPRiBBTlkgU09SVCksIEhPV0VWRVIgSVQgQVJJU0VTIEFORCBPTiBBTlkgVEhFT1JZIE9GIAorTElBQklMSVRZIChpbmNsdWRpbmcgbmVnbGlnZW5jZSksIFdIRVRIRVIgT1IgTk9UIFNVTiBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gTElBQklMSVRZIFVOREVSIFRISVMgU0VDVElPTiBWLkIuMiBTSEFMTCBCRSBTTyAKK0xJTUlURUQgQU5EIEVYQ0xVREVELCBOT1RXSVRIU1RBTkRJTkcgRkFJTFVSRSBPRiBUSEUgRVNTRU5USUFMIFBVUlBPU0UgT0YgQU5ZIFJFTUVEWS4KKworQy4gVGVybWluYXRpb24uCisKKzEuIFlvdSBtYXkgdGVybWluYXRlIHRoaXMgTGljZW5zZSBhdCBhbnkgdGltZSBieSBub3RpZnlpbmcgU3VuIGluIHdyaXRpbmcuCisKKzIuIEFsbCBZb3VyIHJpZ2h0cyB3aWxsIHRlcm1pbmF0ZSB1bmRlciB0aGlzIExpY2Vuc2UgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggYW55IG9mIGl0cyBtYXRlcmlhbCB0ZXJtcyBvciBjb25kaXRpb25zIGFuZCBkbyBub3QgY3VyZSBzdWNoIGZhaWx1cmUgd2l0aGluIAordGhpcnR5ICgzMCkgZGF5cyBhZnRlciBiZWNvbWluZyBhd2FyZSBvZiBzdWNoIG5vbmNvbXBsaWFuY2UuCisKKzMuIFVwb24gdGVybWluYXRpb24sIFlvdSBtdXN0IGRpc2NvbnRpbnVlIGFsbCB1c2VzIGFuZCBkaXN0cmlidXRpb24gb2YgdGhlIFRlY2hub2xvZ3ksIGFuZCBhbGwgcHJvdmlzaW9ucyBvZiB0aGlzIFNlY3Rpb24gViAoIkdlbmVyYWwgVGVybXMiKSBzaGFsbCBzdXJ2aXZlIAordGVybWluYXRpb24uCisKK0QuIE1pc2NlbGxhbmVvdXMuCisKKzEuIFRyYWRlbWFyay4gWW91IGFncmVlIHRvIGNvbXBseSB3aXRoIFN1bidzIFRyYWRlbWFyayAmIExvZ28gVXNhZ2UgUmVxdWlyZW1lbnRzLCBhcyBtb2RpZmllZCBmcm9tIHRpbWUgdG8gdGltZSwgYXZhaWxhYmxlIGF0IHRoZSBUZWNobm9sb2d5IFNpdGUuIEV4Y2VwdCBhcyAKK2V4cHJlc3NseSBwcm92aWRlZCBpbiB0aGlzIExpY2Vuc2UsIFlvdSBhcmUgZ3JhbnRlZCBubyByaWdodHMgaW4gb3IgdG8gYW55IFN1biB0cmFkZW1hcmtzIG5vdyBvciBoZXJlYWZ0ZXIgdXNlZCBvciBsaWNlbnNlZCBieSBTdW4uCisKKzIuIEludGVncmF0aW9uLiBUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IG9mIHRoZSBwYXJ0aWVzIGNvbmNlcm5pbmcgdGhlIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4KKworMy4gU2V2ZXJhYmlsaXR5LiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUgCit1bmxlc3MgdG8gZG8gc28gd291bGQgZGVmZWF0IHRoZSBpbnRlbnQgb2YgdGhlIHBhcnRpZXMsIGluIHdoaWNoIGNhc2UsIHRoaXMgTGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUuCisKKzQuIEdvdmVybmluZyBMYXcuIFRoaXMgTGljZW5zZSBpcyBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUgVW5pdGVkIFN0YXRlcyBhbmQgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEsIGFzIGFwcGxpZWQgdG8gY29udHJhY3RzIGVudGVyZWQgaW50byBhbmQgcGVyZm9ybWVkIAoraW4gQ2FsaWZvcm5pYSBiZXR3ZWVuIENhbGlmb3JuaWEgcmVzaWRlbnRzLiBJbiBubyBldmVudCBzaGFsbCB0aGlzIExpY2Vuc2UgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIuCisKKzUuIEV4cG9ydCBDb250cm9sLiBBcyBmdXJ0aGVyIGRlc2NyaWJlZCBhdCBodHRwOi8vd3d3LnN1bi5jb20vaXRzLCB5b3UgYWdyZWUgdG8gY29tcGx5IHdpdGggdGhlIFUuUy4gZXhwb3J0IGNvbnRyb2xzIGFuZCB0cmFkZSBsYXdzIG9mIG90aGVyIGNvdW50cmllcyB0aGF0IAorYXBwbHkgdG8gVGVjaG5vbG9neSBhbmQgTW9kaWZpY2F0aW9ucy4KKworUkVBRCBBTEwgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRSBDQVJFRlVMTFkgQkVGT1JFIEFDQ0VQVElORy4KKworQlkgQ0xJQ0tJTkcgT04gVEhFIFlFUyBCVVRUT04gQkVMT1csIFlPVSBBUkUgQUNDRVBUSU5HIEFORCBBR1JFRUlORyBUTyBBQklERSBCWSBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBMSUNFTlNFLiBZT1UgTVVTVCBCRSBBVCBMRUFTVCAxOCBZRUFSUyBPRiAKK0FHRSBBTkQgT1RIRVJXSVNFIENPTVBFVEVOVCBUTyBFTlRFUiBJTlRPIENPTlRSQUNUUy4KKworSUYgWU9VIERPIE5PVCBNRUVUIFRIRVNFIENSSVRFUklBLCBPUiBZT1UgRE8gTk9UIEFHUkVFIFRPIEFOWSBPRiBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLCBDTElDSyBPTiBUSEUgTk8gQlVUVE9OIEFORCBFWElUIE5PVy4KKworSmF2YSBSZXNlYXJjaCBMaWNlbnNlIDA1LzIwLzA0CisKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL3N1bi1qc3I2NyBiL2xpY2Vuc2VzL3N1bi1qc3I2NwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTg3ZGMzCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvc3VuLWpzcjY3CkBAIC0wLDAgKzEsMjA5IEBACitTVU4gTUlDUk9TWVNURU1TLCBJTkMuICgiU1VOIikgSVMgV0lMTElORyBUTyBMSUNFTlNFIFRISVMgU1BFQ0lGSUNBVElPTiBUTyBZT1UgCitPTkxZIFVQT04gVEhFIENPTkRJVElPTiBUSEFUIFlPVSBBQ0NFUFQgQUxMIE9GIFRIRSBURVJNUyBDT05UQUlORUQgSU4gVEhJUyAKK0FHUkVFTUVOVC4gUExFQVNFIFJFQUQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgQUdSRUVNRU5UIENBUkVGVUxMWS4gQlkgCitET1dOTE9BRElORyBUSElTIFNQRUNJRklDQVRJT04sIFlPVSBBQ0NFUFQgVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRIRSAKK0FHUkVFTUVOVC4gSUYgWU9VIEFSRSBOT1QgV0lMTElORyBUTyBCRSBCT1VORCBCWSBJVCwgU0VMRUNUIFRIRSAiREVDTElORSIgQlVUVE9OIAorQVQgVEhFIEJPVFRPTSBPRiBUSElTIFBBR0UuCisKKworU3BlY2lmaWNhdGlvbjogSlNSIDY3IEphdmEgQVBJcyBmb3IgWE1MIE1lc3NhZ2luZyAxLjAgKCJTcGVjaWZpY2F0aW9uIikKKworCitWZXJzaW9uOiAxLjMKKworCitTdGF0dXM6IEZpbmFsIFJlbGVhc2UKKworCitSZWxlYXNlOiAgNyBBcHJpbCAyMDA2CisKKworQ29weXJpZ2h0IDIwMDYgU1VOIE1JQ1JPU1lTVEVNUywgSU5DLgorCis0MTUwIE5ldHdvcmsgQ2lyY2xlLCBTYW50YSBDbGFyYSwgQ2FsaWZvcm5pYSA5NTA1NCwgVS5TLkEKKworQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworCitMSU1JVEVEIExJQ0VOU0UgR1JBTlRTCisKKworMS4gTGljZW5zZSBmb3IgRXZhbHVhdGlvbiBQdXJwb3Nlcy4gU3VuIGhlcmVieSBncmFudHMgeW91IGEgZnVsbHktcGFpZCwgCitub24tZXhjbHVzaXZlLCBub24tdHJhbnNmZXJhYmxlLCB3b3JsZHdpZGUsIGxpbWl0ZWQgbGljZW5zZSAod2l0aG91dCB0aGUgcmlnaHQgCit0byBzdWJsaWNlbnNlKSwgdW5kZXIgU3VuJ3MgYXBwbGljYWJsZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIHRvIHZpZXcsIAorZG93bmxvYWQsIHVzZSBhbmQgcmVwcm9kdWNlIHRoZSBTcGVjaWZpY2F0aW9uIG9ubHkgZm9yIHRoZSBwdXJwb3NlIG9mIGludGVybmFsIAorZXZhbHVhdGlvbi4gVGhpcyBpbmNsdWRlcyAoaSkgZGV2ZWxvcGluZyBhcHBsaWNhdGlvbnMgaW50ZW5kZWQgdG8gcnVuIG9uIGFuIAoraW1wbGVtZW50YXRpb24gb2YgdGhlIFNwZWNpZmljYXRpb24sIHByb3ZpZGVkIHRoYXQgc3VjaCBhcHBsaWNhdGlvbnMgZG8gbm90IAordGhlbXNlbHZlcyBpbXBsZW1lbnQgYW55IHBvcnRpb24ocykgb2YgdGhlIFNwZWNpZmljYXRpb24sIGFuZCAoaWkpIGRpc2N1c3NpbmcgCit0aGUgU3BlY2lmaWNhdGlvbiB3aXRoIGFueSB0aGlyZCBwYXJ0eTsgYW5kIChpaWkpIGV4Y2VycHRpbmcgYnJpZWYgcG9ydGlvbnMgb2YgCit0aGUgU3BlY2lmaWNhdGlvbiBpbiBvcmFsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbnMgd2hpY2ggZGlzY3VzcyB0aGUgCitTcGVjaWZpY2F0aW9uIHByb3ZpZGVkIHRoYXQgc3VjaCBleGNlcnB0cyBkbyBub3QgaW4gdGhlIGFnZ3JlZ2F0ZSBjb25zdGl0dXRlIGEgCitzaWduaWZpY2FudCBwb3J0aW9uIG9mIHRoZSBTcGVjaWZpY2F0aW9uLgorCisKKzIuIExpY2Vuc2UgZm9yIHRoZSBEaXN0cmlidXRpb24gb2YgQ29tcGxpYW50IEltcGxlbWVudGF0aW9ucy4gU3VuIGFsc28gZ3JhbnRzIAoreW91IGEgcGVycGV0dWFsLCBub24tZXhjbHVzaXZlLCBub24tdHJhbnNmZXJhYmxlLCB3b3JsZHdpZGUsIGZ1bGx5IHBhaWQtdXAsIAorcm95YWx0eSBmcmVlLCBsaW1pdGVkIGxpY2Vuc2UgKHdpdGhvdXQgdGhlIHJpZ2h0IHRvIHN1YmxpY2Vuc2UpIHVuZGVyIGFueSAKK2FwcGxpY2FibGUgY29weXJpZ2h0cyBvciwgc3ViamVjdCB0byB0aGUgcHJvdmlzaW9ucyBvZiBzdWJzZWN0aW9uIDQgYmVsb3csIAorcGF0ZW50IHJpZ2h0cyBpdCBtYXkgaGF2ZSBjb3ZlcmluZyB0aGUgU3BlY2lmaWNhdGlvbiB0byBjcmVhdGUgYW5kL29yIGRpc3RyaWJ1dGUgCithbiBJbmRlcGVuZGVudCBJbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3BlY2lmaWNhdGlvbiB0aGF0OiAoYSkgZnVsbHkgaW1wbGVtZW50cyAKK3RoZSBTcGVjaWZpY2F0aW9uIGluY2x1ZGluZyBhbGwgaXRzIHJlcXVpcmVkIGludGVyZmFjZXMgYW5kIGZ1bmN0aW9uYWxpdHk7IChiKSAKK2RvZXMgbm90IG1vZGlmeSwgc3Vic2V0LCBzdXBlcnNldCBvciBvdGhlcndpc2UgZXh0ZW5kIHRoZSBMaWNlbnNvciBOYW1lIFNwYWNlLCAKK29yIGluY2x1ZGUgYW55IHB1YmxpYyBvciBwcm90ZWN0ZWQgcGFja2FnZXMsIGNsYXNzZXMsIEphdmEgaW50ZXJmYWNlcywgZmllbGRzIG9yIAorbWV0aG9kcyB3aXRoaW4gdGhlIExpY2Vuc29yIE5hbWUgU3BhY2Ugb3RoZXIgdGhhbiB0aG9zZSByZXF1aXJlZC9hdXRob3JpemVkIGJ5IAordGhlIFNwZWNpZmljYXRpb24gb3IgU3BlY2lmaWNhdGlvbnMgYmVpbmcgaW1wbGVtZW50ZWQ7IGFuZCAoYykgcGFzc2VzIHRoZSAKK1RlY2hub2xvZ3kgQ29tcGF0aWJpbGl0eSBLaXQgKGluY2x1ZGluZyBzYXRpc2Z5aW5nIHRoZSByZXF1aXJlbWVudHMgb2YgdGhlIAorYXBwbGljYWJsZSBUQ0sgVXNlcnMgR3VpZGUpIGZvciBzdWNoIFNwZWNpZmljYXRpb24gKCJDb21wbGlhbnQgSW1wbGVtZW50YXRpb24iKS4gCitJbiBhZGRpdGlvbiwgdGhlIGZvcmVnb2luZyBsaWNlbnNlIGlzIGV4cHJlc3NseSBjb25kaXRpb25lZCBvbiB5b3VyIG5vdCBhY3RpbmcgCitvdXRzaWRlIGl0cyBzY29wZS4gTm8gbGljZW5zZSBpcyBncmFudGVkIGhlcmV1bmRlciBmb3IgYW55IG90aGVyIHB1cnBvc2UgCisoaW5jbHVkaW5nLCBmb3IgZXhhbXBsZSwgbW9kaWZ5aW5nIHRoZSBTcGVjaWZpY2F0aW9uLCBvdGhlciB0aGFuIHRvIHRoZSBleHRlbnQgCitvZiB5b3VyIGZhaXIgdXNlIHJpZ2h0cywgb3IgZGlzdHJpYnV0aW5nIHRoZSBTcGVjaWZpY2F0aW9uIHRvIHRoaXJkIHBhcnRpZXMpLiAKK0Fsc28sIG5vIHJpZ2h0LCB0aXRsZSwgb3IgaW50ZXJlc3QgaW4gb3IgdG8gYW55IHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIG9yIAordHJhZGUgbmFtZXMgb2YgU3VuIG9yIFN1bidzIGxpY2Vuc29ycywgU3VuIG9yIHRoZSBTdW4ncyBsaWNlbnNvcnMgaXMgZ3JhbnRlZCAKK2hlcmV1bmRlci4gSmF2YSwgYW5kIEphdmEtcmVsYXRlZCBsb2dvcywgbWFya3MgYW5kIG5hbWVzIGFyZSB0cmFkZW1hcmtzIG9yIAorcmVnaXN0ZXJlZCB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFUuUy4gYW5kIG90aGVyIGNvdW50cmllcy4KKworCiszLiBQYXNzLXRocm91Z2ggQ29uZGl0aW9ucy4gWW91IG5lZWQgbm90IGluY2x1ZGUgbGltaXRhdGlvbnMgKGEpLShjKSBmcm9tIHRoZSAKK3ByZXZpb3VzIHBhcmFncmFwaCBvciBhbnkgb3RoZXIgcGFydGljdWxhciAicGFzcyB0aHJvdWdoIiByZXF1aXJlbWVudHMgaW4gYW55IAorbGljZW5zZSBZb3UgZ3JhbnQgY29uY2VybmluZyB0aGUgdXNlIG9mIHlvdXIgSW5kZXBlbmRlbnQgSW1wbGVtZW50YXRpb24gb3IgCitwcm9kdWN0cyBkZXJpdmVkIGZyb20gaXQuIEhvd2V2ZXIsIGV4Y2VwdCB3aXRoIHJlc3BlY3QgdG8gSW5kZXBlbmRlbnQgCitJbXBsZW1lbnRhdGlvbnMgKGFuZCBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhlbSkgdGhhdCBzYXRpc2Z5IGxpbWl0YXRpb25zIAorKGEpLShjKSBmcm9tIHRoZSBwcmV2aW91cyBwYXJhZ3JhcGgsIFlvdSBtYXkgbmVpdGhlcjogKGEpIGdyYW50IG9yIG90aGVyd2lzZSAKK3Bhc3MgdGhyb3VnaCB0byB5b3VyIGxpY2Vuc2VlcyBhbnkgbGljZW5zZXMgdW5kZXIgU3VuJ3MgYXBwbGljYWJsZSBpbnRlbGxlY3R1YWwgCitwcm9wZXJ0eSByaWdodHM7IG5vciAoYikgYXV0aG9yaXplIHlvdXIgbGljZW5zZWVzIHRvIG1ha2UgYW55IGNsYWltcyBjb25jZXJuaW5nIAordGhlaXIgaW1wbGVtZW50YXRpb24ncyBjb21wbGlhbmNlIHdpdGggdGhlIFNwZWMgaW4gcXVlc3Rpb24uCisKKworNC4gUmVjaXByb2NpdHkgQ29uY2VybmluZyBQYXRlbnQgTGljZW5zZXMuCisKKworYS4gV2l0aCByZXNwZWN0IHRvIGFueSBwYXRlbnQgY2xhaW1zIGNvdmVyZWQgYnkgdGhlIGxpY2Vuc2UgZ3JhbnRlZCB1bmRlciAKK3N1YnBhcmFncmFwaCAyIGFib3ZlIHRoYXQgd291bGQgYmUgaW5mcmluZ2VkIGJ5IGFsbCB0ZWNobmljYWxseSBmZWFzaWJsZSAKK2ltcGxlbWVudGF0aW9ucyBvZiB0aGUgU3BlY2lmaWNhdGlvbiwgc3VjaCBsaWNlbnNlIGlzIGNvbmRpdGlvbmVkIHVwb24geW91ciAKK29mZmVyaW5nIG9uIGZhaXIsIHJlYXNvbmFibGUgYW5kIG5vbi1kaXNjcmltaW5hdG9yeSB0ZXJtcywgdG8gYW55IHBhcnR5IHNlZWtpbmcgCitpdCBmcm9tIFlvdSwgYSBwZXJwZXR1YWwsIG5vbi1leGNsdXNpdmUsIG5vbi10cmFuc2ZlcmFibGUsIHdvcmxkd2lkZSBsaWNlbnNlIAordW5kZXIgWW91ciBwYXRlbnQgcmlnaHRzIHdoaWNoIGFyZSBvciB3b3VsZCBiZSBpbmZyaW5nZWQgYnkgYWxsIHRlY2huaWNhbGx5IAorZmVhc2libGUgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBTcGVjaWZpY2F0aW9uIHRvIGRldmVsb3AsIGRpc3RyaWJ1dGUgYW5kIHVzZSBhIAorQ29tcGxpYW50IEltcGxlbWVudGF0aW9uLgorCisKK2IgV2l0aCByZXNwZWN0IHRvIGFueSBwYXRlbnQgY2xhaW1zIG93bmVkIGJ5IFN1biBhbmQgY292ZXJlZCBieSB0aGUgbGljZW5zZSAKK2dyYW50ZWQgdW5kZXIgc3VicGFyYWdyYXBoIDIsIHdoZXRoZXIgb3Igbm90IHRoZWlyIGluZnJpbmdlbWVudCBjYW4gYmUgYXZvaWRlZCAKK2luIGEgdGVjaG5pY2FsbHkgZmVhc2libGUgbWFubmVyIHdoZW4gaW1wbGVtZW50aW5nIHRoZSBTcGVjaWZpY2F0aW9uLCBzdWNoIAorbGljZW5zZSBzaGFsbCB0ZXJtaW5hdGUgd2l0aCByZXNwZWN0IHRvIHN1Y2ggY2xhaW1zIGlmIFlvdSBpbml0aWF0ZSBhIGNsYWltIAorYWdhaW5zdCBTdW4gdGhhdCBpdCBoYXMsIGluIHRoZSBjb3Vyc2Ugb2YgcGVyZm9ybWluZyBpdHMgcmVzcG9uc2liaWxpdGllcyBhcyB0aGUgCitTcGVjaWZpY2F0aW9uIExlYWQsIGluZHVjZWQgYW55IG90aGVyIGVudGl0eSB0byBpbmZyaW5nZSBZb3VyIHBhdGVudCByaWdodHMuCisKKworYyBBbHNvIHdpdGggcmVzcGVjdCB0byBhbnkgcGF0ZW50IGNsYWltcyBvd25lZCBieSBTdW4gYW5kIGNvdmVyZWQgYnkgdGhlIGxpY2Vuc2UgCitncmFudGVkIHVuZGVyIHN1YnBhcmFncmFwaCwgd2hlcmUgdGhlIGluZnJpbmdlbWVudCBvZiBzdWNoIGNsYWltcyBjYW4gYmUgYXZvaWRlZCAKK2luIGEgdGVjaG5pY2FsbHkgZmVhc2libGUgbWFubmVyIHdoZW4gaW1wbGVtZW50aW5nIHRoZSBTcGVjaWZpY2F0aW9uIHN1Y2ggCitsaWNlbnNlLCB3aXRoIHJlc3BlY3QgdG8gc3VjaCBjbGFpbXMsIHNoYWxsIHRlcm1pbmF0ZSBpZiBZb3UgaW5pdGlhdGUgYSBjbGFpbSAKK2FnYWluc3QgU3VuIHRoYXQgaXRzIG1ha2luZywgaGF2aW5nIG1hZGUsIHVzaW5nLCBvZmZlcmluZyB0byBzZWxsLCBzZWxsaW5nIG9yIAoraW1wb3J0aW5nIGEgQ29tcGxpYW50IEltcGxlbWVudGF0aW9uIGluZnJpbmdlcyBZb3VyIHBhdGVudCByaWdodHMuCisKKworNS4gRGVmaW5pdGlvbnMuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBBZ3JlZW1lbnQ6ICJJbmRlcGVuZGVudCBJbXBsZW1lbnRhdGlvbiIgCitzaGFsbCBtZWFuIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBTcGVjaWZpY2F0aW9uIHRoYXQgbmVpdGhlciBkZXJpdmVzIGZyb20gYW55IAorb2YgU3VuJ3Mgc291cmNlIGNvZGUgb3IgYmluYXJ5IGNvZGUgbWF0ZXJpYWxzIG5vciwgZXhjZXB0IHdpdGggYW4gYXBwcm9wcmlhdGUgCithbmQgc2VwYXJhdGUgbGljZW5zZSBmcm9tIFN1biwgaW5jbHVkZXMgYW55IG9mIFN1bidzIHNvdXJjZSBjb2RlIG9yIGJpbmFyeSBjb2RlIAorbWF0ZXJpYWxzOyAiTGljZW5zb3IgTmFtZSBTcGFjZSIgc2hhbGwgbWVhbiB0aGUgcHVibGljIGNsYXNzIG9yIGludGVyZmFjZSAKK2RlY2xhcmF0aW9ucyB3aG9zZSBuYW1lcyBiZWdpbiB3aXRoICJqYXZhIiwgImphdmF4IiwgImNvbS5zdW4iIG9yIHRoZWlyIAorZXF1aXZhbGVudHMgaW4gYW55IHN1YnNlcXVlbnQgbmFtaW5nIGNvbnZlbnRpb24gYWRvcHRlZCBieSBTdW4gdGhyb3VnaCB0aGUgSmF2YSAKK0NvbW11bml0eSBQcm9jZXNzLCBvciBhbnkgcmVjb2duaXplZCBzdWNjZXNzb3JzIG9yIHJlcGxhY2VtZW50cyB0aGVyZW9mOyBhbmQgCisiVGVjaG5vbG9neSBDb21wYXRpYmlsaXR5IEtpdCIgb3IgIlRDSyIgc2hhbGwgbWVhbiB0aGUgdGVzdCBzdWl0ZSBhbmQgCithY2NvbXBhbnlpbmcgVENLIFVzZXIncyBHdWlkZSBwcm92aWRlZCBieSBTdW4gd2hpY2ggY29ycmVzcG9uZHMgdG8gdGhlIAorU3BlY2lmaWNhdGlvbiBhbmQgdGhhdCB3YXMgYXZhaWxhYmxlIGVpdGhlciAoaSkgZnJvbSBTdW4gMTIwIGRheXMgYmVmb3JlIHRoZSAKK2ZpcnN0IHJlbGVhc2Ugb2YgWW91ciBJbmRlcGVuZGVudCBJbXBsZW1lbnRhdGlvbiB0aGF0IGFsbG93cyBpdHMgdXNlIGZvciAKK2NvbW1lcmNpYWwgcHVycG9zZXMsIG9yIChpaSkgbW9yZSByZWNlbnRseSB0aGFuIDEyMCBkYXlzIGZyb20gc3VjaCByZWxlYXNlIGJ1dCAKK2FnYWluc3Qgd2hpY2ggWW91IGVsZWN0IHRvIHRlc3QgWW91ciBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgU3BlY2lmaWNhdGlvbi4KKworCitUaGlzIEFncmVlbWVudCB3aWxsIHRlcm1pbmF0ZSBpbW1lZGlhdGVseSB3aXRob3V0IG5vdGljZSBmcm9tIFN1biBpZiB5b3UgYnJlYWNoIAordGhlIEFncmVlbWVudCBvciBhY3Qgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgYWJvdmUuCisKKworRElTQ0xBSU1FUiBPRiBXQVJSQU5USUVTCisKKworVEhFIFNQRUNJRklDQVRJT04gSVMgUFJPVklERUQgIkFTIElTIi4gU1VOIE1BS0VTIE5PIFJFUFJFU0VOVEFUSU9OUyBPUiAKK1dBUlJBTlRJRVMsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8sIFdBUlJBTlRJRVMgCitPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBOT04tSU5GUklOR0VNRU5UIAorKElOQ0xVRElORyBBUyBBIENPTlNFUVVFTkNFIE9GIEFOWSBQUkFDVElDRSBPUiBJTVBMRU1FTlRBVElPTiBPRiBUSEUgCitTUEVDSUZJQ0FUSU9OKSwgT1IgVEhBVCBUSEUgQ09OVEVOVFMgT0YgVEhFIFNQRUNJRklDQVRJT04gQVJFIFNVSVRBQkxFIEZPUiBBTlkgCitQVVJQT1NFLiBUaGlzIGRvY3VtZW50IGRvZXMgbm90IHJlcHJlc2VudCBhbnkgY29tbWl0bWVudCB0byByZWxlYXNlIG9yIGltcGxlbWVudCAKK2FueSBwb3J0aW9uIG9mIHRoZSBTcGVjaWZpY2F0aW9uIGluIGFueSBwcm9kdWN0LiBJbiBhZGRpdGlvbiwgdGhlIFNwZWNpZmljYXRpb24gCitjb3VsZCBpbmNsdWRlIHRlY2huaWNhbCBpbmFjY3VyYWNpZXMgb3IgdHlwb2dyYXBoaWNhbCBlcnJvcnMuCisKKworTElNSVRBVElPTiBPRiBMSUFCSUxJVFkKKworCitUTyBUSEUgRVhURU5UIE5PVCBQUk9ISUJJVEVEIEJZIExBVywgSU4gTk8gRVZFTlQgV0lMTCBTVU4gT1IgSVRTIExJQ0VOU09SUyBCRSAKK0xJQUJMRSBGT1IgQU5ZIERBTUFHRVMsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04sIExPU1QgUkVWRU5VRSwgUFJPRklUUyBPUiAKK0RBVEEsIE9SIEZPUiBTUEVDSUFMLCBJTkRJUkVDVCwgQ09OU0VRVUVOVElBTCwgSU5DSURFTlRBTCBPUiBQVU5JVElWRSBEQU1BR0VTLCAKK0hPV0VWRVIgQ0FVU0VEIEFORCBSRUdBUkRMRVNTIE9GIFRIRSBUSEVPUlkgT0YgTElBQklMSVRZLCBBUklTSU5HIE9VVCBPRiBPUiAKK1JFTEFURUQgSU4gQU5ZIFdBWSBUTyBZT1VSIEhBVklORywgSU1QTEVNRU5USU5HIE9SIE9USEVSV0lTRSBVU0lORyBUSEUgCitTUEVDSUZJQ0FUSU9OLCBFVkVOIElGIFNVTiBBTkQvT1IgSVRTIExJQ0VOU09SUyBIQVZFIEJFRU4gQURWSVNFRCBPRiBUSEUgCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKK1lvdSB3aWxsIGluZGVtbmlmeSwgaG9sZCBoYXJtbGVzcywgYW5kIGRlZmVuZCBTdW4gYW5kIGl0cyBsaWNlbnNvcnMgZnJvbSBhbnkgCitjbGFpbXMgYXJpc2luZyBvciByZXN1bHRpbmcgZnJvbTogKGkpIHlvdXIgdXNlIG9mIHRoZSBTcGVjaWZpY2F0aW9uOyAoaWkpIHRoZSAKK3VzZSBvciBkaXN0cmlidXRpb24gb2YgeW91ciBKYXZhIGFwcGxpY2F0aW9uLCBhcHBsZXQgYW5kL29yIGltcGxlbWVudGF0aW9uOyAKK2FuZC9vciAoaWlpKSBhbnkgY2xhaW1zIHRoYXQgbGF0ZXIgdmVyc2lvbnMgb3IgcmVsZWFzZXMgb2YgYW55IFNwZWNpZmljYXRpb24gCitmdXJuaXNoZWQgdG8geW91IGFyZSBpbmNvbXBhdGlibGUgd2l0aCB0aGUgU3BlY2lmaWNhdGlvbiBwcm92aWRlZCB0byB5b3UgdW5kZXIgCit0aGlzIGxpY2Vuc2UuCisKKworUkVTVFJJQ1RFRCBSSUdIVFMgTEVHRU5ECisKKworVS5TLiBHb3Zlcm5tZW50OiBJZiB0aGlzIFNwZWNpZmljYXRpb24gaXMgYmVpbmcgYWNxdWlyZWQgYnkgb3Igb24gYmVoYWxmIG9mIHRoZSAKK1UuUy4gR292ZXJubWVudCBvciBieSBhIFUuUy4gR292ZXJubWVudCBwcmltZSBjb250cmFjdG9yIG9yIHN1YmNvbnRyYWN0b3IgKGF0IAorYW55IHRpZXIpLCB0aGVuIHRoZSBHb3Zlcm5tZW50J3MgcmlnaHRzIGluIHRoZSBTb2Z0d2FyZSBhbmQgYWNjb21wYW55aW5nIAorZG9jdW1lbnRhdGlvbiBzaGFsbCBiZSBvbmx5IGFzIHNldCBmb3J0aCBpbiB0aGlzIGxpY2Vuc2U7IHRoaXMgaXMgaW4gYWNjb3JkYW5jZSAKK3dpdGggNDggQy5GLlIuIDIyNy43MjAxIHRocm91Z2ggMjI3LjcyMDItNCAoZm9yIERlcGFydG1lbnQgb2YgRGVmZW5zZSAoRG9EKSAKK2FjcXVpc2l0aW9ucykgYW5kIHdpdGggNDggQy5GLlIuIDIuMTAxIGFuZCAxMi4yMTIgKGZvciBub24tRG9EIGFjcXVpc2l0aW9ucykuCisKKworUkVQT1JUCisKKworSWYgeW91IHByb3ZpZGUgU3VuIHdpdGggYW55IGNvbW1lbnRzIG9yIHN1Z2dlc3Rpb25zIGNvbmNlcm5pbmcgdGhlIFNwZWNpZmljYXRpb24gCisoIkZlZWRiYWNrIiksIHlvdSBoZXJlYnk6IChpKSBhZ3JlZSB0aGF0IHN1Y2ggRmVlZGJhY2sgaXMgcHJvdmlkZWQgb24gYSAKK25vbi1wcm9wcmlldGFyeSBhbmQgbm9uLWNvbmZpZGVudGlhbCBiYXNpcywgYW5kIChpaSkgZ3JhbnQgU3VuIGEgcGVycGV0dWFsLCAKK25vbi1leGNsdXNpdmUsIHdvcmxkd2lkZSwgZnVsbHkgcGFpZC11cCwgaXJyZXZvY2FibGUgbGljZW5zZSwgd2l0aCB0aGUgcmlnaHQgdG8gCitzdWJsaWNlbnNlIHRocm91Z2ggbXVsdGlwbGUgbGV2ZWxzIG9mIHN1YmxpY2Vuc2VlcywgdG8gaW5jb3Jwb3JhdGUsIGRpc2Nsb3NlLCAKK2FuZCB1c2Ugd2l0aG91dCBsaW1pdGF0aW9uIHRoZSBGZWVkYmFjayBmb3IgYW55IHB1cnBvc2UuCisKKworR0VORVJBTCBURVJNUworCisKK0FueSBhY3Rpb24gcmVsYXRlZCB0byB0aGlzIEFncmVlbWVudCB3aWxsIGJlIGdvdmVybmVkIGJ5IENhbGlmb3JuaWEgbGF3IGFuZCAKK2NvbnRyb2xsaW5nIFUuUy4gZmVkZXJhbCBsYXcuIFRoZSBVLk4uIENvbnZlbnRpb24gZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgCitHb29kcyBhbmQgdGhlIGNob2ljZSBvZiBsYXcgcnVsZXMgb2YgYW55IGp1cmlzZGljdGlvbiB3aWxsIG5vdCBhcHBseS4KKworCitUaGUgU3BlY2lmaWNhdGlvbiBpcyBzdWJqZWN0IHRvIFUuUy4gZXhwb3J0IGNvbnRyb2wgbGF3cyBhbmQgbWF5IGJlIHN1YmplY3QgdG8gCitleHBvcnQgb3IgaW1wb3J0IHJlZ3VsYXRpb25zIGluIG90aGVyIGNvdW50cmllcy4gTGljZW5zZWUgYWdyZWVzIHRvIGNvbXBseSAKK3N0cmljdGx5IHdpdGggYWxsIHN1Y2ggbGF3cyBhbmQgcmVndWxhdGlvbnMgYW5kIGFja25vd2xlZGdlcyB0aGF0IGl0IGhhcyB0aGUgCityZXNwb25zaWJpbGl0eSB0byBvYnRhaW4gc3VjaCBsaWNlbnNlcyB0byBleHBvcnQsIHJlLWV4cG9ydCBvciBpbXBvcnQgYXMgbWF5IGJlIAorcmVxdWlyZWQgYWZ0ZXIgZGVsaXZlcnkgdG8gTGljZW5zZWUuCisKKworVGhpcyBBZ3JlZW1lbnQgaXMgdGhlIHBhcnRpZXMnIGVudGlyZSBhZ3JlZW1lbnQgcmVsYXRpbmcgdG8gaXRzIHN1YmplY3QgbWF0dGVyLiAKK0l0IHN1cGVyc2VkZXMgYWxsIHByaW9yIG9yIGNvbnRlbXBvcmFuZW91cyBvcmFsIG9yIHdyaXR0ZW4gY29tbXVuaWNhdGlvbnMsIAorcHJvcG9zYWxzLCBjb25kaXRpb25zLCByZXByZXNlbnRhdGlvbnMgYW5kIHdhcnJhbnRpZXMgYW5kIHByZXZhaWxzIG92ZXIgYW55IAorY29uZmxpY3Rpbmcgb3IgYWRkaXRpb25hbCB0ZXJtcyBvZiBhbnkgcXVvdGUsIG9yZGVyLCBhY2tub3dsZWRnbWVudCwgb3Igb3RoZXIgCitjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIHBhcnRpZXMgcmVsYXRpbmcgdG8gaXRzIHN1YmplY3QgbWF0dGVyIGR1cmluZyB0aGUgdGVybSAKK29mIHRoaXMgQWdyZWVtZW50LiBObyBtb2RpZmljYXRpb24gdG8gdGhpcyBBZ3JlZW1lbnQgd2lsbCBiZSBiaW5kaW5nLCB1bmxlc3MgaW4gCit3cml0aW5nIGFuZCBzaWduZWQgYnkgYW4gYXV0aG9yaXplZCByZXByZXNlbnRhdGl2ZSBvZiBlYWNoIHBhcnR5LgorCisKKworCitSZXYuIEphbnVhcnksIDIwMDYKKworU3VuL0ZpbmFsL0Z1bGwKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL3N1bi1qc3I5MyBiL2xpY2Vuc2VzL3N1bi1qc3I5MwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTcyNmE1Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvc3VuLWpzcjkzCkBAIC0wLDAgKzEsNDUgQEAKK0phdmFUTSBBUEkgZm9yIFhNTCBSZWdpc3RyaWVzIChKQVhSKSBTcGVjaWZpY2F0aW9uICgiU3BlY2lmaWNhdGlvbiIpCitWZXJzaW9uOiAxLjAKK1N0YXR1czogRkNTCitSZWxlYXNlOiBKdW5lIDExLCAyMDAyCisKK0NvcHlyaWdodCAyMDAyIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKworNDE1MCBOZXR3b3JrIENpcmNsZSwgU2FudGEgQ2xhcmEsIENhbGlmb3JuaWEgOTUwNTQsIFUuUy5BCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitOT1RJQ0U7IExJTUlURUQgTElDRU5TRSBHUkFOVFMKKworU3VuIGhlcmVieSBncmFudHMgeW91IGEgZnVsbHktcGFpZCwgbm9uLWV4Y2x1c2l2ZSwgbm9uLXRyYW5zZmVyYWJsZSwgd29ybGR3aWRlLCBsaW1pdGVkIGxpY2Vuc2UgKHdpdGhvdXQgdGhlIHJpZ2h0IHRvIHN1YmxpY2Vuc2UpLCB1bmRlciB0aGUgU3BlY2lmaWNhdGlvbiBMZWFkJ3MgYXBwbGljYWJsZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIHRvIHZpZXcsIGRvd25sb2FkLCB1c2UgYW5kIHJlcHJvZHVjZSB0aGUgU3BlY2lmaWNhdGlvbiBvbmx5IGZvciB0aGUgcHVycG9zZSBvZiBpbnRlcm5hbCBldmFsdWF0aW9uLCB3aGljaCBzaGFsbCBiZSB1bmRlcnN0b29kIHRvIGluY2x1ZGUgZGV2ZWxvcGluZyBhcHBsaWNhdGlvbnMgaW50ZW5kZWQgdG8gcnVuIG9uIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBTcGVjaWZpY2F0aW9uIHByb3ZpZGVkIHRoYXQgc3VjaCBhcHBsaWNhdGlvbnMgZG8gbm90IHRoZW1zZWx2ZXMgaW1wbGVtZW50IGFueSBwb3J0aW9uKHMpIG9mIHRoZSBTcGVjaWZpY2F0aW9uLgorCitTdW4gYWxzbyBncmFudHMgeW91IGEgcGVycGV0dWFsLCBub24tZXhjbHVzaXZlLCB3b3JsZHdpZGUsIGZ1bGx5IHBhaWQtdXAsIHJveWFsdHkgZnJlZSwgbGltaXRlZCBsaWNlbnNlICh3aXRob3V0IHRoZSByaWdodCB0byBzdWJsaWNlbnNlKSB1bmRlciBhbnkgYXBwbGljYWJsZSBjb3B5cmlnaHRzIG9yIHBhdGVudCByaWdodHMgaXQgbWF5IGhhdmUgaW4gdGhlIFNwZWNpZmljYXRpb24gdG8gY3JlYXRlIGFuZC9vciBkaXN0cmlidXRlIGFuIEluZGVwZW5kZW50IEltcGxlbWVudGF0aW9uIG9mIHRoZSBTcGVjaWZpY2F0aW9uIHRoYXQ6IChpKSBmdWxseSBpbXBsZW1lbnRzIHRoZSBTcGVjKHMpIGluY2x1ZGluZyBhbGwgaXRzIHJlcXVpcmVkIGludGVyZmFjZXMgYW5kIGZ1bmN0aW9uYWxpdHk7IChpaSkgZG9lcyBub3QgbW9kaWZ5LCBzdWJzZXQsIHN1cGVyc2V0IG9yIG90aGVyd2lzZSBleHRlbmQgdGhlIExpY2Vuc29yIE5hbWUgU3BhY2UsIG9yIGluY2x1ZGUgYW55IHB1YmxpYyBvciBwcm90ZWN0ZWQgcGFja2FnZXMsIGNsYXNzZXMsIEphdmEgaW50ZXJmYWNlcywgZmllbGRzIG9yIG1ldGhvZHMgd2l0aGluIHRoZSBMaWNlbnNvciBOYW1lIFNwYWNlIG90aGVyIHRoYW4gdGhvc2UgcmVxdWlyZWQvYXV0aG9yaXplZCBieSB0aGUgU3BlY2lmaWNhdGlvbiBvciBTcGVjaWZpY2F0aW9ucyBiZWluZyBpbXBsZW1lbnRlZDsgYW5kIChpaWkpIHBhc3NlcyB0aGUgVENLIChpbmNsdWRpbmcgc2F0aXNmeWluZyB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoZSBhcHBsaWNhYmxlIFRDSyBVc2VycyBHdWlkZSkgZm9yIHN1Y2ggU3BlY2lmaWNhdGlvbi4gVGhlIGZvcmVnb2luZyBsaWNlbnNlIGlzIGV4cHJlc3NseSBjb25kaXRpb25lZCBvbiB5b3VyIG5vdCBhY3Rpbmcgb3V0c2lkZSBpdHMgc2NvcGUuIE5vIGxpY2Vuc2UgaXMgZ3JhbnRlZCBoZXJldW5kZXIgZm9yIGFueSBvdGhlciBwdXJwb3NlLgorCitZb3UgbmVlZCBub3QgaW5jbHVkZSBsaW1pdGF0aW9ucyAoaSktKGlpaSkgZnJvbSB0aGUgcHJldmlvdXMgcGFyYWdyYXBoIG9yIGFueSBvdGhlciBwYXJ0aWN1bGFyICJwYXNzIHRocm91Z2giIHJlcXVpcmVtZW50cyBpbiBhbnkgbGljZW5zZSBZb3UgZ3JhbnQgY29uY2VybmluZyB0aGUgdXNlIG9mIHlvdXIgSW5kZXBlbmRlbnQgSW1wbGVtZW50YXRpb24gb3IgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIGl0LiBIb3dldmVyLCBleGNlcHQgd2l0aCByZXNwZWN0IHRvIGltcGxlbWVudGF0aW9ucyBvZiB0aGUgU3BlY2lmaWNhdGlvbiAoYW5kIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGVtKSBieSB0aGUgeW91ciBsaWNlbnNlZSB0aGF0IHNhdGlzZnkgbGltaXRhdGlvbnMgKGkpLShpaWkpIGZyb20gdGhlIHByZXZpb3VzIHBhcmFncmFwaCwgWW91IG1heSBuZWl0aGVyOiAoYSkgZ3JhbnQgb3Igb3RoZXJ3aXNlIHBhc3MgdGhyb3VnaCB0byB5b3VyIGxpY2Vuc2VlcyBhbnkgbGljZW5zZXMgdW5kZXIgU3VuJ3MgYXBwbGljYWJsZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzOyBub3IgKGIpIGF1dGhvcml6ZSB5b3VyIGxpY2Vuc2VlcyB0byBtYWtlIGFueSBjbGFpbXMgY29uY2VybmluZyB0aGVpciBpbXBsZW1lbnRhdGlvbidzIGNvbXBsaWFuY2Ugd2l0aCB0aGUgU3BlYyBpbiBxdWVzdGlvbi4KKworRm9yIHRoZSBwdXJwb3NlcyBvZiB0aGlzIEFncmVlbWVudDogIkluZGVwZW5kZW50IEltcGxlbWVudGF0aW9uIiBzaGFsbCBtZWFuIGFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBTcGVjaWZpY2F0aW9uIHRoYXQgbmVpdGhlciBkZXJpdmVzIGZyb20gYW55IG9mIFN1bidzIHNvdXJjZSBjb2RlIG9yIGJpbmFyeSBjb2RlIG1hdGVyaWFscyBub3IsIGV4Y2VwdCB3aXRoIGFuIGFwcHJvcHJpYXRlIGFuZCBzZXBhcmF0ZSBsaWNlbnNlIGZyb20gU3VuLCBpbmNsdWRlcyBhbnkgb2YgU3VuJ3Mgc291cmNlIGNvZGUgb3IgYmluYXJ5IGNvZGUgbWF0ZXJpYWxzOyBhbmQgIkxpY2Vuc29yIE5hbWUgU3BhY2UiIHNoYWxsIG1lYW4gdGhlIHB1YmxpYyBjbGFzcyBvciBpbnRlcmZhY2UgZGVjbGFyYXRpb25zIHdob3NlIG5hbWVzIGJlZ2luIHdpdGggImphdmEiLCAiamF2YXgiLCAiY29tLnN1biIgb3IgdGhlaXIgZXF1aXZhbGVudHMgaW4gYW55IHN1YnNlcXVlbnQgbmFtaW5nIGNvbnZlbnRpb24gYWRvcHRlZCBieSBTdW4gdGhyb3VnaCB0aGUgSmF2YSBDb21tdW5pdHkgUHJvY2Vzcywgb3IgYW55IHJlY29nbml6ZWQgc3VjY2Vzc29ycyBvciByZXBsYWNlbWVudHMgdGhlcmVvZi4KKworVGhpcyBBZ3JlZW1lbnQgd2lsbCB0ZXJtaW5hdGUgaW1tZWRpYXRlbHkgd2l0aG91dCBub3RpY2UgZnJvbSBTdW4gaWYgeW91IGZhaWwgdG8gY29tcGx5IHdpdGggYW55IG1hdGVyaWFsIHByb3Zpc2lvbiBvZiBvciBhY3Qgb3V0c2lkZSB0aGUgc2NvcGUgb2YgdGhlIGxpY2Vuc2VzIGdyYW50ZWQgYWJvdmUuCisKK1RSQURFTUFSS1MKKworTm8gcmlnaHQsIHRpdGxlLCBvciBpbnRlcmVzdCBpbiBvciB0byBhbnkgdHJhZGVtYXJrcywgc2VydmljZSBtYXJrcywgb3IgdHJhZGUgbmFtZXMgb2YgU3VuIG9yIFN1bidzIGxpY2Vuc29ycyBpcyBncmFudGVkIGhlcmV1bmRlci4gU3VuLCBTdW4gTWljcm9zeXN0ZW1zLCB0aGUgU3VuIGxvZ28sIEphdmEsIGFuZCB0aGUgSmF2YSBDb2ZmZWUgQ3VwIGxvZ28gYXJlIHRyYWRlbWFya3Mgb3IgcmVnaXN0ZXJlZCB0cmFkZW1hcmtzIG9mIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gaW4gdGhlIFUuUy4gYW5kIG90aGVyIGNvdW50cmllcy4KKworRElTQ0xBSU1FUiBPRiBXQVJSQU5USUVTCisKK1RIRSBTUEVDSUZJQ0FUSU9OIElTIFBST1ZJREVEICJBUyBJUyIuICBTVU4gTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8sIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgTk9OLUlORlJJTkdFTUVOVCwgVEhBVCBUSEUgQ09OVEVOVFMgT0YgVEhFIFNQRUNJRklDQVRJT04gQVJFIFNVSVRBQkxFIEZPUiBBTlkgUFVSUE9TRSBPUiBUSEFUIEFOWSBQUkFDVElDRSBPUiBJTVBMRU1FTlRBVElPTiBPRiBTVUNIIENPTlRFTlRTIFdJTEwgTk9UIElORlJJTkdFIEFOWSBUSElSRCBQQVJUWSBQQVRFTlRTLCBDT1BZUklHSFRTLCBUUkFERSBTRUNSRVRTIE9SIE9USEVSIFJJR0hUUy4gIFRoaXMgZG9jdW1lbnQgZG9lcyBub3QgcmVwcmVzZW50IGFueSBjb21taXRtZW50IHRvIHJlbGVhc2Ugb3IgaW1wbGVtZW50IGFueSBwb3J0aW9uIG9mIHRoZSBTcGVjaWZpY2F0aW9uIGluIGFueSBwcm9kdWN0LgorCitUSEUgU1BFQ0lGSUNBVElPTiBDT1VMRCBJTkNMVURFIFRFQ0hOSUNBTCBJTkFDQ1VSQUNJRVMgT1IgVFlQT0dSQVBISUNBTCBFUlJPUlMuICBDSEFOR0VTIEFSRSBQRVJJT0RJQ0FMTFkgQURERUQgVE8gVEhFIElORk9STUFUSU9OIFRIRVJFSU47IFRIRVNFIENIQU5HRVMgV0lMTCBCRSBJTkNPUlBPUkFURUQgSU5UTyBORVcgVkVSU0lPTlMgT0YgVEhFIFNQRUNJRklDQVRJT04sIElGIEFOWS4gIFNVTiBNQVkgTUFLRSBJTVBST1ZFTUVOVFMgQU5EL09SIENIQU5HRVMgVE8gVEhFIFBST0RVQ1QoUykgQU5EL09SIFRIRSBQUk9HUkFNKFMpIERFU0NSSUJFRCBJTiBUSEUgU1BFQ0lGSUNBVElPTiBBVCBBTlkgVElNRS4gIEFueSB1c2Ugb2Ygc3VjaCBjaGFuZ2VzIGluIHRoZSBTcGVjaWZpY2F0aW9uIHdpbGwgYmUgZ292ZXJuZWQgYnkgdGhlIHRoZW4tY3VycmVudCBsaWNlbnNlIGZvciB0aGUgYXBwbGljYWJsZSB2ZXJzaW9uIG9mIHRoZSBTcGVjaWZpY2F0aW9uLgorCitMSU1JVEFUSU9OIE9GIExJQUJJTElUWQorCitUTyBUSEUgRVhURU5UIE5PVCBQUk9ISUJJVEVEIEJZIExBVywgSU4gTk8gRVZFTlQgV0lMTCBTVU4gT1IgSVRTIExJQ0VOU09SUyBCRSBMSUFCTEUgRk9SIEFOWSBEQU1BR0VTLCBJTkNMVURJTkcgV0lUSE9VVCBMSU1JVEFUSU9OLCBMT1NUIFJFVkVOVUUsIFBST0ZJVFMgT1IgREFUQSwgT1IgRk9SIFNQRUNJQUwsIElORElSRUNULCBDT05TRVFVRU5USUFMLCBJTkNJREVOVEFMIE9SIFBVTklUSVZFIERBTUFHRVMsIEhPV0VWRVIgQ0FVU0VEIEFORCBSRUdBUkRMRVNTIE9GIFRIRSBUSEVPUlkgT0YgTElBQklMSVRZLCBBUklTSU5HIE9VVCBPRiBPUiBSRUxBVEVEIFRPIEFOWSBGVVJOSVNISU5HLCBQUkFDVElDSU5HLCBNT0RJRllJTkcgT1IgQU5ZIFVTRSBPRiBUSEUgU1BFQ0lGSUNBVElPTiwgRVZFTiBJRiBTVU4gQU5EL09SIElUUyBMSUNFTlNPUlMgSEFWRSBCRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4KKworWW91IHdpbGwgaW5kZW1uaWZ5LCBob2xkIGhhcm1sZXNzLCBhbmQgZGVmZW5kIFN1biBhbmQgaXRzIGxpY2Vuc29ycyBmcm9tIGFueSBjbGFpbXMgYXJpc2luZyBvciByZXN1bHRpbmcgZnJvbTogKGkpIHlvdXIgdXNlIG9mIHRoZSBTcGVjaWZpY2F0aW9uOyAoaWkpIHRoZSB1c2Ugb3IgZGlzdHJpYnV0aW9uIG9mIHlvdXIgSmF2YSBhcHBsaWNhdGlvbiwgYXBwbGV0IGFuZC9vciBjbGVhbiByb29tIGltcGxlbWVudGF0aW9uOyBhbmQvb3IgKGlpaSkgYW55IGNsYWltcyB0aGF0IGxhdGVyIHZlcnNpb25zIG9yIHJlbGVhc2VzIG9mIGFueSBTcGVjaWZpY2F0aW9uIGZ1cm5pc2hlZCB0byB5b3UgYXJlIGluY29tcGF0aWJsZSB3aXRoIHRoZSBTcGVjaWZpY2F0aW9uIHByb3ZpZGVkIHRvIHlvdSB1bmRlciB0aGlzIGxpY2Vuc2UuCisKK1JFU1RSSUNURUQgUklHSFRTIExFR0VORAorCitVLlMuIEdvdmVybm1lbnQ6IElmIHRoaXMgU3BlY2lmaWNhdGlvbiBpcyBiZWluZyBhY3F1aXJlZCBieSBvciBvbiBiZWhhbGYgb2YgdGhlIFUuUy4gR292ZXJubWVudCBvciBieSBhIFUuUy4gR292ZXJubWVudCBwcmltZSBjb250cmFjdG9yIG9yIHN1YmNvbnRyYWN0b3IgKGF0IGFueSB0aWVyKSwgdGhlbiB0aGUgR292ZXJubWVudCdzIHJpZ2h0cyBpbiB0aGUgU29mdHdhcmUgYW5kIGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIHNoYWxsIGJlIG9ubHkgYXMgc2V0IGZvcnRoIGluIHRoaXMgbGljZW5zZTsgdGhpcyBpcyBpbiBhY2NvcmRhbmNlIHdpdGggNDggQy5GLlIuIDIyNy43MjAxIHRocm91Z2ggMjI3LjcyMDItNCAoZm9yIERlcGFydG1lbnQgb2YgRGVmZW5zZSAoRG9EKSBhY3F1aXNpdGlvbnMpIGFuZCB3aXRoIDQ4IEMuRi5SLiAyLjEwMSBhbmQgMTIuMjEyIChmb3Igbm9uLURvRCBhY3F1aXNpdGlvbnMpLgorCitSRVBPUlQKKworWW91IG1heSB3aXNoIHRvIHJlcG9ydCBhbnkgYW1iaWd1aXRpZXMsIGluY29uc2lzdGVuY2llcyBvciBpbmFjY3VyYWNpZXMgeW91IG1heSBmaW5kIGluIGNvbm5lY3Rpb24gd2l0aCB5b3VyIHVzZSBvZiB0aGUgU3BlY2lmaWNhdGlvbiAoIkZlZWRiYWNrIikuIFRvIHRoZSBleHRlbnQgdGhhdCB5b3UgcHJvdmlkZSBTdW4gd2l0aCBhbnkgRmVlZGJhY2ssIHlvdSBoZXJlYnk6IChpKSBhZ3JlZSB0aGF0IHN1Y2ggRmVlZGJhY2sgaXMgcHJvdmlkZWQgb24gYSBub24tcHJvcHJpZXRhcnkgYW5kIG5vbi1jb25maWRlbnRpYWwgYmFzaXMsIGFuZCAoaWkpIGdyYW50IFN1biBhIHBlcnBldHVhbCwgbm9uLWV4Y2x1c2l2ZSwgd29ybGR3aWRlLCBmdWxseSBwYWlkLXVwLCBpcnJldm9jYWJsZSBsaWNlbnNlLCB3aXRoIHRoZSByaWdodCB0byBzdWJsaWNlbnNlIHRocm91Z2ggbXVsdGlwbGUgbGV2ZWxzIG9mIHN1YmxpY2Vuc2VlcywgdG8gaW5jb3Jwb3JhdGUsIGRpc2Nsb3NlLCBhbmQgdXNlIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUgRmVlZGJhY2sgZm9yIGFueSBwdXJwb3NlIHJlbGF0ZWQgdG8gdGhlIFNwZWNpZmljYXRpb24gYW5kIGZ1dHVyZSB2ZXJzaW9ucywgaW1wbGVtZW50YXRpb25zLCBhbmQgdGVzdCBzdWl0ZXMgdGhlcmVvZi4gCmRpZmYgLS1naXQgYS9saWNlbnNlcy9zdW4tcnBjIGIvbGljZW5zZXMvc3VuLXJwYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzU1Yzg5Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvc3VuLXJwYwpAQCAtMCwwICsxLDMwIEBACisvKgorICogU3VuIFJQQyBpcyBhIHByb2R1Y3Qgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBhbmQgaXMgcHJvdmlkZWQgZm9yCisgKiB1bnJlc3RyaWN0ZWQgdXNlIHByb3ZpZGVkIHRoYXQgdGhpcyBsZWdlbmQgaXMgaW5jbHVkZWQgb24gYWxsIHRhcGUKKyAqIG1lZGlhIGFuZCBhcyBhIHBhcnQgb2YgdGhlIHNvZnR3YXJlIHByb2dyYW0gaW4gd2hvbGUgb3IgcGFydC4gIFVzZXJzCisgKiBtYXkgY29weSBvciBtb2RpZnkgU3VuIFJQQyB3aXRob3V0IGNoYXJnZSwgYnV0IGFyZSBub3QgYXV0aG9yaXplZAorICogdG8gbGljZW5zZSBvciBkaXN0cmlidXRlIGl0IHRvIGFueW9uZSBlbHNlIGV4Y2VwdCBhcyBwYXJ0IG9mIGEgcHJvZHVjdCBvcgorICogcHJvZ3JhbSBkZXZlbG9wZWQgYnkgdGhlIHVzZXIgb3Igd2l0aCB0aGUgZXhwcmVzcyB3cml0dGVuIGNvbnNlbnQgb2YKKyAqIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKyAqCisgKiBTVU4gUlBDIElTIFBST1ZJREVEIEFTIElTIFdJVEggTk8gV0FSUkFOVElFUyBPRiBBTlkgS0lORCBJTkNMVURJTkcgVEhFCisgKiBXQVJSQU5USUVTIE9GIERFU0lHTiwgTUVSQ0hBTlRJQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UsIE9SIEFSSVNJTkcgRlJPTSBBIENPVVJTRSBPRiBERUFMSU5HLCBVU0FHRSBPUiBUUkFERSBQUkFDVElDRS4KKyAqCisgKiBTdW4gUlBDIGlzIHByb3ZpZGVkIHdpdGggbm8gc3VwcG9ydCBhbmQgd2l0aG91dCBhbnkgb2JsaWdhdGlvbiBvbiB0aGUKKyAqIHBhcnQgb2YgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiB0byBhc3Npc3QgaW4gaXRzIHVzZSwgY29ycmVjdGlvbiwKKyAqIG1vZGlmaWNhdGlvbiBvciBlbmhhbmNlbWVudC4KKyAqCisgKiBTVU4gTUlDUk9TWVNURU1TLCBJTkMuIFNIQUxMIEhBVkUgTk8gTElBQklMSVRZIFdJVEggUkVTUEVDVCBUTyBUSEUKKyAqIElORlJJTkdFTUVOVCBPRiBDT1BZUklHSFRTLCBUUkFERSBTRUNSRVRTIE9SIEFOWSBQQVRFTlRTIEJZIFNVTiBSUEMKKyAqIE9SIEFOWSBQQVJUIFRIRVJFT0YuCisgKgorICogSW4gbm8gZXZlbnQgd2lsbCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJlIGxpYWJsZSBmb3IgYW55IGxvc3QgcmV2ZW51ZQorICogb3IgcHJvZml0cyBvciBvdGhlciBzcGVjaWFsLCBpbmRpcmVjdCBhbmQgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBldmVuIGlmCisgKiBTdW4gaGFzIGJlZW4gYWR2aXNlZCBvZiB0aGUgcG9zc2liaWxpdHkgb2Ygc3VjaCBkYW1hZ2VzLgorICoKKyAqIFN1biBNaWNyb3N5c3RlbXMsIEluYy4KKyAqIDI1NTAgR2FyY2lhIEF2ZW51ZQorICogTW91bnRhaW4gVmlldywgQ2FsaWZvcm5pYSAgOTQwNDMKKyAqLworCmRpZmYgLS1naXQgYS9saWNlbnNlcy9zdXM0LWNvcHlyaWdodCBiL2xpY2Vuc2VzL3N1czQtY29weXJpZ2h0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmMWM4OTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy9zdXM0LWNvcHlyaWdodApAQCAtMCwwICsxLDI3IEBACitDb3B5cmlnaHQgwqkgMjAwOCBieSB0aGUgSW5zdGl0dXRlIG9mIEVsZWN0cmljYWwgYW5kIEVsZWN0cm9uaWNzIEVuZ2luZWVycywgSW5jLgorYW5kIFRoZSBPcGVuIEdyb3VwCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitQdWJsaXNoZWQgMSBEZWNlbWJlciAyMDA4IGJ5IHRoZSBJRUVFIGFuZCBUaGUgT3BlbiBHcm91cC4KKworTm8gcGFydCBvZiB0aGlzIHB1YmxpY2F0aW9uIG1heSBiZSByZXByb2R1Y2VkIGluIGFueSBmb3JtLCBpbiBhbiBlbGVjdHJvbmljCityZXRyaWV2YWwgc3lzdGVtIG9yIG90aGVyd2lzZSwgd2l0aG91dCB0aGUgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIG9mIHRoZQorcHVibGlzaGVyLiBQZXJtaXNzaW9uIHRvIHJlcHJvZHVjZSBhbGwgb3IgYW55IHBhcnQgb2YgdGhpcyBzdGFuZGFyZCBtdXN0IGJlIHdpdGgKK3RoZSBjb25zZW50IG9mIGJvdGggY29weXJpZ2h0IGhvbGRlcnMgYW5kIG1heSBiZSBzdWJqZWN0IHRvIGEgbGljZW5zZSBmZWUuIEJvdGgKK2NvcHlyaWdodCBob2xkZXJzIHdpbGwgbmVlZCB0byBiZSBzYXRpc2ZpZWQgdGhhdCB0aGUgb3RoZXIgaGFzIGdyYW50ZWQKK3Blcm1pc3Npb24uIFJlcXVlc3RzIHNob3VsZCBiZSBzZW50IGJ5IGVtYWlsIHRvCithdXN0aW4tZ3JvdXAtcGVybWlzc2lvbnNAb3Blbmdyb3VwLm9yZy4KKworVGhpcyBzdGFuZGFyZCBoYXMgYmVlbiBwcmVwYXJlZCBieSB0aGUgQXVzdGluIEdyb3VwLiBGZWVkYmFjayByZWxhdGluZyB0byB0aGUKK21hdGVyaWFsIGNvbnRhaW5lZCB3aXRoaW4gdGhpcyBzdGFuZGFyZCBtYXkgYmUgc3VibWl0dGVkIGJ5IHVzaW5nIHRoZSBBdXN0aW4KK0dyb3VwIHdlYiBzaXRlIGF0IHd3dy5vcGVuZ3JvdXAub3JnL2F1c3Rpbi9kZWZlY3Rmb3JtLmh0bWwuCisKK0NvcHlyaWdodHMKKworVGhpcyBkb2N1bWVudCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgSUVFRSBhbmQgVGhlIE9wZW4gR3JvdXAuIEl0IGlzIG1hZGUKK2F2YWlsYWJsZSBmb3IgYSB3aWRlIHZhcmlldHkgb2YgYm90aCBwdWJsaWMgYW5kIHByaXZhdGUgdXNlcy4gVGhlc2UgaW5jbHVkZSBib3RoCit1c2UsIGJ5IHJlZmVyZW5jZSwgaW4gbGF3cyBhbmQgcmVndWxhdGlvbnMsIGFuZCB1c2UgaW4gcHJpdmF0ZSBzZWxmLXJlZ3VsYXRpb24sCitzdGFuZGFyZGl6YXRpb24sIGFuZCB0aGUgcHJvbW90aW9uIG9mIGVuZ2luZWVyaW5nIHByYWN0aWNlcyBhbmQgbWV0aG9kcy4gQnkKK21ha2luZyB0aGlzIGRvY3VtZW50IGF2YWlsYWJsZSBmb3IgdXNlIGFuZCBhZG9wdGlvbiBieSBwdWJsaWMgYXV0aG9yaXRpZXMgYW5kCitwcml2YXRlIHVzZXJzLCB0aGUgSUVFRSBhbmQgVGhlIE9wZW4gR3JvdXAgZG8gbm90IHdhaXZlIGFueSByaWdodHMgaW4gY29weXJpZ2h0Cit0byB0aGlzIGRvY3VtZW50LgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvc3dpc3MtcHJvdCBiL2xpY2Vuc2VzL3N3aXNzLXByb3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJmNmYzOQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL3N3aXNzLXByb3QKQEAgLTAsMCArMSwxNDIgQEAKK0JhY2tncm91bmQgYW5kIHJhdGlvbmFsZQorCisgQWxtb3N0IHNpbmNlIGl0cyBjcmVhdGlvbiBieSBBbW9zIEJhaXJvY2ggaW4gMTk4NiwgdGhlIFNXSVNTLVBST1QgcHJvdGVpbiBzZXF1ZW5jZSBkYXRhYmFzZSBoYXMgYmVlbiBhIGNvbGxhYm9yYXRpdmUgZWZmb3J0IG9mIHRoZSBEZXBhcnRtZW50IG9mIE1lZGljYWwgQmlvY2hlbWlzdHJ5IG9mIHRoZSBVbml2ZXJzaXR5IG9mIEdlbmV2YSBhbmQgd2hhdCB3YXMgdGhlbiBjYWxsZWQgdGhlIERhdGEgTGlicmFyeSBncm91cCBvZiB0aGUgRXVyb3BlYW4gTW9sZWN1bGFyIEJpb2xvZ3kgTGFib3JhdG9yeSAoRU1CTCkgaW4gSGVpZGVsYmVyZyAoR2VybWFueSkuIEluIDE5OTQsIHRoZSBhY3Rpdml0aWVzIG9mIHRoZSBEYXRhIExpYnJhcnkgd2VyZSBicm9hZGVuZWQgYW5kIGluY29ycG9yYXRlZCBpbiBhIG5ldyBPdXRzdGF0aW9uIG9mIEVNQkwsIHRoZSBFdXJvcGVhbiBCaW9pbmZvcm1hdGljcyBJbnN0aXR1dGUgKEVCSSkgaW4gSGlueHRvbiAoVUspLiBJbiBBcHJpbCB0aGlzIHllYXIsIHRoZSBTV0lTUy1QUk9UIGdyb3VwIGluIEdlbmV2YSBqb2luZWQgYSBuZXcgYWNhZGVtaWMgaW5zdGl0dXRpb24sIHRoZSBTd2lzcyBJbnN0aXR1dGUgb2YgQmlvaW5mb3JtYXRpY3MgKFNJQiksIHdoaWNoIGl0IGhlbHBlZCB0byBjcmVhdGUuIFNXSVNTLVBST1QgaXMgdGhlcmVmb3JlIGFuIGVxdWFsIHBhcnRuZXJzaGlwIG9mIHRoZSBTSUIgYW5kIEVCSS9FTUJMLiBUaGUgZm91bmRlciwgQW1vcyBCYWlyb2NoLCBpcyB1bHRpbWF0ZWx5IHJlc3BvbnNpYmxlIGZvciB0aGUgc2NpZW50aWZpYyBjb250ZW50IGFuZCBmb3JtYXQgb2YgU1dJU1MtUFJPVC4KKworIFRoZSBlbm9ybW91cyBncm93dGggaW4gdGhlIHF1YW50aXR5IG9mIHNlcXVlbmNlIGFuZCBjaGFyYWN0ZXJpemF0aW9uIGRhdGEgaGFzIG1hZGUgdGhlIHRhc2sgb2YgcHJvZHVjaW5nIGFuIGFubm90YXRlZCBhbmQgY29tcHJlaGVuc2l2ZSBwcm90ZWluIHNlcXVlbmNlIGRhdGFiYXNlIGEgbWFqb3IgY2hhbGxlbmdlLiBXaGlsZSBhdXRvbWF0aW9uIG9mIHNvbWUgYXNwZWN0cyBvZiB0aGlzIHdvcmsgaGFzIG1hZGUgaXQgcG9zc2libGUgdG8gb2J0YWluIHNpZ25pZmljYW50IHByb2dyZXNzIGluIHByb2R1Y3Rpdml0eSwgaXQgbm9uZXRoZWxlc3MgcmVtYWlucyBhIHRhc2sgd2hpY2ggaXMgaW50ZW5zaXZlIGluIHRlcm1zIG9mIGh1bWFuIHJlc291cmNlcywgYW5kIHdoaWNoIHJlcXVpcmVzIGFuIGluY3JlYXNpbmcgYW1vdW50IG9mIGV4cGVydGlzZS4gUmVjZW50IHllYXJzIGhhdmUgc2hvd24gdGhhdCBwdWJsaWMgZnVuZGluZyBmb3Igc3VjaCBhbiBhY3Rpdml0eSBpcyBub3QgZ29pbmcgdG8ga2VlcCBwYWNlIHdpdGggaXRzIGZpbmFuY2lhbCByZXF1aXJlbWVudHMuIER1cmluZyB0aGUgc2FtZSBwZXJpb2QsIHRoZSBpbXBvcnRhbmNlIG9mIGhpZ2ggcXVhbGl0eSBhbm5vdGF0aW9uIGZvciBhbGwga2luZHMgb2YgbGlmZSBzY2llbmNlcyByZXNlYXJjaCBhY3Rpdml0aWVzIGhhcyBncm93bi4gV2UgYXJlIHRoZXJlZm9yZSBmYWNlZCB3aXRoIHRoZSBwYXJhZG94aWNhbCBzaXR1YXRpb24gd2hlcmUgbm8gbWFqb3IgbGlmZSBzY2llbmNlcyByZXNlYXJjaCBsYWIgY2FuIGZ1bmN0aW9uIHdpdGhvdXQgYSBkYXRhYmFzZSBzdWNoIGFzIFNXSVNTLVBST1QsIHlldCB0aGUgZXhpc3RlbmNlIGFuZCBjb250aW51ZWQgZGV2ZWxvcG1lbnQgb2Ygc3VjaCBhIHJlc291cmNlIGlzIGluIGplb3BhcmR5LgorCisgV2UgYmVsaWV2ZSB0aGF0IHRoZSBvbmx5IGZlYXNpYmxlIHNvbHV0aW9uIHRvIHRoaXMgcHJvYmxlbSBpcyB0byBvYnRhaW4gYWRkaXRpb25hbCBmdW5kcyB0aHJvdWdoIHRoZSBwYXltZW50IG9mIHllYXJseSBsaWNlbnNlIGZlZXMgYnkgbm9uLWFjYWRlbWljIHVzZXJzIGZvciBhY2Nlc3MgdG8gU1dJU1MtUFJPVC4gV2UgaGF2ZSwgdGhlcmVmb3JlLCBleHBsb3JlZCBsZWdhbCBhbmQgb3JnYW5pemF0aW9uYWwgc29sdXRpb25zIHRvIGFjaGlldmUgdGhpcyBnb2FsLiBBZnRlciBjYXJlZnVsIGNvbnNpZGVyYXRpb24gb2YgYWxsIHBvdGVudGlhbCBvcHRpb25zLCB3ZSBoYXZlIHBsYW5uZWQgdGhlIGZvbGxvd2luZyBzb2x1dGlvbjoKKworIFN0YXJ0aW5nIGluIFNlcHRlbWJlciAxOTk4LCB3ZSBpbnRlbmQgdG8gaW1wbGVtZW50IGEgc3lzdGVtIG9mIGFuIGFubnVhbCBzdWJzY3JpcHRpb24gZmVlIGZvciBjb21tZXJjaWFsIHVzZSBvZiB0aGUgZGF0YWJhc2UuIEJvdGggU0lCIGFuZCBFQkkgd2lsbCBtYW5kYXRlIGEgbmV3IGNvbXBhbnksIEdlbmV2YSBCaW9pbmZvcm1hdGljcyAoR2VuZUJpbykgdG8gYWN0IGFzIHRoZWlyIHJlcHJlc2VudGF0aXZlIGZvciB0aGUgcHVycG9zZSBvZiBjb25jbHVkaW5nIHRoZSBuZWNlc3NhcnkgbGljZW5zZSBhZ3JlZW1lbnRzIGFuZCBsZXZ5aW5nIHRoZSBmZWVzLgorCisgV2Ugd2lsbCBkZXNjcmliZSBoZXJlIGluIGRldGFpbCB0aGUgY29uc2VxdWVuY2VzIG9mIHRoaXMgY2hhbmdlLiBUaGUgbW9zdCBpbXBvcnRhbnQgdGFrZS1ob21lIG1lc3NhZ2UgaXMgdGhhdCB0aGVzZSBjaGFuZ2VzIHNob3VsZCBub3QgaGF2ZSBhbnkgaW1wYWN0IG9uIHRoZSB3YXkgU1dJU1MtUFJPVCBpcyBhY2Nlc3NlZCBvciByZWRpc3RyaWJ1dGVkLiBBY2FkZW1pYyB1c2VycyB3aWxsIG5vdCBiZSBhZmZlY3RlZCBieSB0aGVzZSBjaGFuZ2VzLiBJbmR1c3RyaWFsIGVuZC11c2VycyB3aWxsIGFsc28gbm90IGRpcmVjdGx5IGJlIGFmZmVjdGVkIGFzIGxvbmcgYXMgdGhlaXIgZW1wbG95ZXIgcGF5cyB0aGUgbGljZW5zZSBmZWUuIFRoZSBzYW1lIGhvbGRzIHRydWUgZm9yIGJpb2luZm9ybWF0aWNzIGNvbXBhbmllcy4gQWNhZGVtaWMgc29mdHdhcmUgb3IgZGF0YWJhc2UgZGV2ZWxvcGVycyBhcyB3ZWxsIGFzIHByb3ZpZGVycyBvZiBkYXRhYmFzZSBkaXN0cmlidXRpb24gc2VydmljZXMgd2lsbCBiZSBvbmx5IG1pbmltYWxseSBhZmZlY3RlZCBieSB0aGVzZSBjaGFuZ2VzLiBXZSBob3BlIHRvIGJlIGFibGUgdG8ga2VlcCB0aGUgc3Bpcml0IG9mIFNXSVNTLVBST1QgYWxpdmUgYW5kIGF0IHRoZSBzYW1lIHRpbWUgZW5zdXJlIGl0cyBsb25nLXRlcm0gZmluYW5jaWFsIHN1cnZpdmFsLiBXZSBzaW5jZXJlbHkgaG9wZSBhbmQgYmVsaWV2ZSB0aGF0IGluIHRoZSBuZXh0IHR3byB5ZWFycyB0aGUgb25seSBjaGFuZ2UgdGhhdCB3aWxsIG1hdHRlciB3aWxsIGJlIHRoZSBpbmNyZWFzZSBpbiBzY29wZSBhbmQgdGltZWxpbmVzcyBvZiB0aGUgZGF0YWJhc2UuCisKK0hvdyBhcmUgdGhlc2UgbmV3IGZ1bmRzIGdvaW5nIHRvIGJlIHVzZWQ/CisKKyBUaGUgZnVuZHMgb2J0YWluZWQgdGhyb3VnaCBsaWNlbnNpbmcgb2YgU1dJU1MtUFJPVCB0byBpbmR1c3RyaWFsIHVzZXJzIHdpbGwgYmUgdXNlZCBieSBib3RoIFNJQiBhbmQgRUJJIHRvIGNvbnRyaWJ1dGUgdG8gdGhlIGZ1cnRoZXIgZGV2ZWxvcG1lbnQgb2YgdGhlIGRhdGFiYXNlLiBJbiBwYXJ0aWN1bGFyLCBuZXcgYW5ub3RhdGlvbiBhbmQgcHJvZ3JhbW1pbmcgc3VwcG9ydCBwb3NpdGlvbnMgd2lsbCBiZSBjcmVhdGVkLiBXZSB3aWxsIGFsc28gaGlyZSBwZXJzb25zIHdob3NlIHRhc2sgd2lsbCBiZSB0byBpbnRlcmFjdCB3aXRoIHVzZXJzIGFuZCB0byBmdXJ0aGVyIGVuaGFuY2UgdGhlIHN1Y2Nlc3NmdWwgZGlhbG9nIHRoYXQgaGFzIGJlZW4gZXN0YWJsaXNoZWQgYmV0d2VlbiBTV0lTUy1QUk9UIGFuZCB0aGUgc2NpZW50aXN0cyB3aG8gYXJlIGNvbnRyaWJ1dGluZyB0aGUgaW5mb3JtYXRpb24gdGhhdCBpcyB1c2VkIHRvIGJ1aWxkIHRoZSBkYXRhYmFzZS4gVGhlIGdyb3d0aCBvZiB0aGUgU1dJU1MtUFJPVCBzdGFmZiB3aWxsIGFsbG93IHVzIHRvIGhpcmUgc3BlY2lhbGl6ZWQgYW5ub3RhdG9ycyB3aXRoIGEgbGFyZ2VyIGtub3dsZWRnZSBzcHJlYWQgKG1lZGljaW5lLCBwaGFybWFjb2xvZ3ksIHZpcm9sb2d5LCBldGMuKSB0aGFuIGlzIGN1cnJlbnRseSByZXByZXNlbnRlZCBhbW9uZyBvdXIgc3RhZmYuCisKK1doZW4gY2FuIHlvdSBleHBlY3QgdGhlc2UgbmV3IGRldmVsb3BtZW50cyB0byBlbmhhbmNlIHRoZSBpbXBhY3Qgb2YgU1dJU1MtUFJPVD8KKworIEl0IHRha2VzIGFib3V0IGEgeWVhciB0byB0cmFpbiBhbiBhbm5vdGF0b3IuIEFzIG5ldyBmdW5kcyB3aWxsIG5vdCBiZSBnZW5lcmF0ZWQgYmVmb3JlIHRoZSBsYXN0IHF1YXJ0ZXIgb2YgMTk5OCwgbW9zdCBjaGFuZ2VzIHdpbGwgb25seSBiZSBhcHBhcmVudCBpbiB0aGUgbGFzdCBtb250aHMgb2YgMTk5OS4gTmV2ZXJ0aGVsZXNzLCB3ZSBiZWxpZXZlIHRoYXQgYmVmb3JlIHRoZSByZWxlYXNlIG9mICJTV0lTUy1QUk9UIDIwMDAiLCB3ZSB3aWxsIGhhdmUgYWNoaWV2ZWQgYSBudW1iZXIgb2Ygc3BlY2lmaWMgZ29hbHMuIFdlIHdpbGwgaGF2ZSBhbW9uZyBvdGhlciB0aGluZ3M6CisKKyAgRmluaXNoZWQgdGhlIGZpcnN0IHBhc3Mgb2YgdGhlIGNvbXBsZXRlIGFubm90YXRpb24gb2YgdGhlIHByb3RlaW5zIGVuY29kZWQgaW4gYSBudW1iZXIgb2YgY29tcGxldGUgZ2Vub21lcywgYW5kIGluIHBhcnRpY3VsYXIgdGhvc2Ugb2YgRS5jb2xpLCBCLnN1YnRpbGlzLCBNLmphbm5hc2NoaWkgYW5kIHllYXN0IChTLmNlcmV2aXNpYWUpOworCisgIE1hZGUgYSBzdWJzdGFudGlhbCBlZmZvcnQgdG93YXJkIHRoZSBmdWxsIGFubm90YXRpb24gb2YgaHVtYW4gYW5kIHJvZGVudCBwcm90ZWluczsKKworICBTaWduaWZpY2FudGx5IGluY3JlYXNlZCB0aGUgc3BlZWQgb2YgYW5ub3RhdGlvbiBzbyBhcyB0byBiZSBhYmxlIHRvIGFubm90YXRlIGtleSBtZW1iZXJzIG9mIG5ldyBwcm90ZWluIGZhbWlsaWVzIGFzIHNvb24gYXMgdGhleSBiZWNvbWUgYXZhaWxhYmxlOworCisgIENoYW5nZWQgdGhlIHRheG9ub215IGN1cnJlbnRseSB1c2VkIGluIFNXSVNTLVBST1QgdG8gdGhhdCB1c2VkIGJ5IHRoZSBETkEgZGF0YWJhc2VzCisKKyAgQ29udmVydGVkIHRoZSAiQUxMIFVQUEVSIENBU0UiIGZvcm1hdCBjdXJyZW50bHkgdXNlZCB0byBhIG1vcmUgYXBwZWFsaW5nIGFuZCB1c2VyLXJlYWRhYmxlICJNaXhlZCBDYXNlIiBmb3JtYXQ7CisKKyAgQ3JlYXRlZCBtaXJyb3Igc2l0ZXMgb2YgdGhlIFdXVyBFeFBBU3kgc2VydmVyIHNvIGFzIHRvIHByb3ZpZGUgdXNlcnMgaW4gZXZlcnkgcGFydCBvZiB0aGUgd29ybGQgd2l0aCBhIGNvbXByZWhlbnNpdmUgZGF0YWJhc2UgYW5kIHNvZnR3YXJlIGVudmlyb25tZW50IGZvciBwcm90ZWluIHN0dWRpZXMuCisKK1doeSB0aGUgZnVuZGluZyBtb2RlbCBvZiBTV0lTUy1QUk9UIGlzIG5vdCBhcHBsaWNhYmxlIHRvIG51Y2xlb3RpZGUgc2VxdWVuY2UgZGF0YWJhc2VzCisKKyBXZSBjb25zaWRlciB0aGF0IHRoZSBmdW5kaW5nIG1vZGVsIHRoYXQgaGFzIHRvIGJlIGFkb3B0ZWQgdG8gc2VjdXJlIHRoZSB2aWFiaWxpdHkgb2YgU1dJU1MtUFJPVCBpcyBub3QgYXBwbGljYWJsZSB0byB0aGUgaW50ZXJuYXRpb25hbCBudWNsZW90aWRlIHNlcXVlbmNlIGRhdGFiYXNlcyAoRU1CTC9HZW5CYW5rL0REQkopLCBldmVuIHRob3VnaCB0aGVzZSBhcmUgYWxzbyBjdXJhdGVkLiBOdWNsZW90aWRlIHNlcXVlbmNlcywgZnJvbSB3aGljaCBTV0lTUy1QUk9UIGVudHJpZXMgYXJlIGRlcml2ZWQsIG11c3QgcmVtYWluIGluIHRoZSBwdWJsaWMgZG9tYWluIGluIHJlY29nbml0aW9uIG9mIHRoZSBmYWN0IHRoYXQgdGhleSBhcmUgdGhlIHByaW1hcnkgZGF0YSwgYW5kIGhhdmUgYmVlbiBzdWJtaXR0ZWQgdG8gcHVibGljLWRvbWFpbiBjb2xsZWN0aW9ucyBieSBpbmRpdmlkdWFsIHNjaWVudGlzdHMuIFRoaXMgc2FtZSBjb25zaWRlcmF0aW9uIGhvbGRzIGZvciBwcmltYXJ5IGRhdGFiYXNlcyBvZiBtYWNyb21vbGVjdWxhciBzdHJ1Y3R1cmVzIChzdWNoIGFzIFBEQikuCisKK1dpbGwgdGhlcmUgYmUgY2hhbmdlcyBvbiB0aGUgd2F5IFNXSVNTLVBST1QgY2FuIGJlIGFjY2Vzc2VkPworCisgVGhlIHRha2UtaG9tZSBtZXNzYWdlIGlzOiBpZiB5b3UgYXJlIGEgdXNlciBvZiBTV0lTUy1QUk9UIGZyb20gYSBub24tcHJvZml0IG9yZ2FuaXphdGlvbiwgeW91IHdpbGwgbm90IGJlIGFmZmVjdGVkIGJ5IHRoZXNlIGNoYW5nZXMuIElmIHlvdSBhcmUgYSBmb3ItcHJvZml0IHVzZXIsIHlvdSBzaG91bGQgbm90IGJlIGRpcmVjdGx5IGFmZmVjdGVkLCBidXQgeW91ciBjb21wYW55IHdpbGwgaGF2ZSB0byBwYXkgYSB5ZWFybHkgbGljZW5zZSBmZWUgdG8gYWxsb3cgeW91IGFuZCB5b3VyIGNvbGxlYWd1ZXMgdG8gbWFrZSB1c2Ugb2YgdGhlIGRhdGFiYXNlLiBMZWdhbGx5LCBTV0lTUy1QUk9UIHdpbGwgYmUgY29weXJpZ2h0ZWQsIHNvIHRoYXQgaXQgY2FuIGJlIGxlZ2FsbHkgcHJvdGVjdGVkIGFnYWluc3QgdW5hdXRob3JpemVkIHVzZS4KKworIFdlIGFyZSBwbGFubmluZyBubyBtYWpvciBjaGFuZ2VzIGluIHRoZSBwcm9jZWR1cmVzIGN1cnJlbnRseSB1c2VkIGZvciBhY2Nlc3MuIFdlIGFyZSBhd2FyZSB0aGF0IFNXSVNTLVBST1QgaXMgcmVkaXN0cmlidXRlZCBpbiBtYW55IGRpZmZlcmVudCBmb3JtcyBhbmQgbWVkaWEgYnkgbnVtZXJvdXMgb3JnYW5pemF0aW9ucyBhbmQgYmlvaW5mb3JtYXRpY3MgY29tcGFuaWVzIGFyb3VuZCB0aGUgd29ybGQsIGFuZCB3ZSBoYXZlIGRlY2lkZWQgdG8ga2VlcCB0aGUgY3VycmVudCBzeXN0ZW0gaW4gcGxhY2UuIFRoZXJlIHdpbGwgYmUgbm8gcGFzc3dvcmQgc2NoZW1lIGFuZCBubyBsaW1pdGF0aW9uIG9uIGFjY2Vzcy4gVGhlIHdob2xlIHN5c3RlbSB3aWxsIGJlIGJhc2VkIG9uIHRydXN0LiBXaGF0IHRoaXMgbWVhbnMgaXMgdGhhdCB3ZSB0cnVzdCBjb21tZXJjaWFsIGNvbXBhbmllcyB0byBjb250cmlidXRlIHRvIHRoZSBmaW5hbmNpYWwgaGVhbHRoIG9mIHRoZSBkYXRhYmFzZSBieSBwYXlpbmcgdGhlaXIgeWVhcmx5IHN1YnNjcmlwdGlvbi4gV2Ugd2lsbCwgb2YgY291cnNlLCBjaGVjayBhbnkgZXhhbXBsZXMgb2YgZmxhZ3JhbnQgYWJ1c2UuIElmIHlvdSBhcmUgYW4gYWNhZGVtaWMgdXNlciBvZiBTV0lTUy1QUk9UIHlvdSBzaG91bGQgbm90IHNlZSBhbnkgY2hhbmdlcyBvdGhlciB0aGFuIGltcHJvdmVtZW50cyBzdWNoIGFzIHRob3NlIGxpc3RlZCBhYm92ZSBhbmQgdGhlIGZhY3QgdGhhdCBTV0lTUy1QUk9UIGVudHJpZXMgd2lsbCBub3cgY29udGFpbiBhIHN0YXRlbWVudCB3aGljaCB3aWxsIHByb2JhYmx5IGxvb2sgdmVyeSBtdWNoIGxpa2UgdGhpcyBvbmU6CisKKyAgQ0MgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICBDQyAgIFRoaXMgU1dJU1MtUFJPVCBlbnRyeSBpcyBjb3B5cmlnaHQuIEl0IGlzIHByb2R1Y2VkIHRocm91Z2ggYSBjb2xsYWJvcmF0aW9uCisgIENDICAgYmV0d2VlbiAgdGhlIFN3aXNzIEluc3RpdHV0ZSBvZiBCaW9pbmZvcm1hdGljcyAgYW5kIHRoZSAgRU1CTCBPdXRzdGF0aW9uIC0KKyAgQ0MgICB0aGUgRXVyb3BlYW4gQmlvaW5mb3JtYXRpY3MgSW5zdGl0dXRlLiAgVGhlcmUgYXJlIG5vICByZXN0cmljdGlvbnMgb24gIGl0cworICBDQyAgIHVzZSAgYnkgIG5vbi1wcm9maXQgIGluc3RpdHV0aW9ucyBhcyBsb25nICBhcyBpdHMgY29udGVudCAgaXMgIGluICBubyAgd2F5CisgIENDICAgbW9kaWZpZWQgYW5kIHRoaXMgc3RhdGVtZW50IGlzIG5vdCByZW1vdmVkLiAgVXNhZ2UgIGJ5ICBhbmQgZm9yIGNvbW1lcmNpYWwKKyAgQ0MgICBlbnRpdGllcyByZXF1aXJlcyBhIGxpY2Vuc2UgYWdyZWVtZW50IChTZWUgaHR0cDovL3d3dy5pc2Itc2liLmNoL2Fubm91bmNlLworICBDQyAgIG9yIHNlbmQgYW4gZW1haWwgdG8gbGljZW5zZUBpc2Itc2liLmNoKS4KKyAgQ0MgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCisgU3VjaCBhIHN0YXRlbWVudCB3aWxsIGFwcGVhciBpbiB0aGUgbWFqb3JpdHkgb2YgU1dJU1MtUFJPVCBlbnRyaWVzLCBob3dldmVyIGl0IHdpbGwgbm90IGFwcGVhciBpbiBhbnkgZW50cnkgd2hvc2Ugc2VxdWVuY2Ugb3JpZ2luYXRlcyBzb2xlbHkgZnJvbSBkaXJlY3QgcHJvdGVpbiBzZXF1ZW5jaW5nIG9yIGZyb20gdGhlIHRyYW5zbGF0aW9uIG9mIGEgRE5BIHNlcXVlbmNlIHdoaWNoIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGludGVybmF0aW9uYWwgbnVjbGVvdGlkZSBzZXF1ZW5jZSBkYXRhYmFzZSAoRU1CTC9HZW5CYW5rL0REQkopLiBUaGlzIGRlY2lzaW9uIHdhcyB0YWtlbiB0byBhbGxvdyBpbmR1c3RyaWFsIHVzZXJzIHRoYXQgaGF2ZSBzdWJtaXR0ZWQgcHJvdGVpbiBzZXF1ZW5jZXMgdG8gcmV0cmlldmUgdGhlbSB3aXRob3V0IGFueSBsZWdhbCBjb25zZXF1ZW5jZXMuCisKK0lzIFNXSVNTLVBST1QgcmVsZWFzZSAzNiBzdGlsbCBpbiBwdWJsaWMgZG9tYWluPworCisgVG8gZmFjaWxpdGF0ZSB0aGUgdHJhbnNpdGlvbiBmb3IgYWxsIHVzZXJzLCB0aGUgU1dJU1MtUFJPVCByZWxlYXNlIDM2IHdpbGwgcmVtYWluIGNvbXBsZXRlbHkgaW4gdGhlIHB1YmxpYyBkb21haW4gYW5kIGlzIG5vdCBzdWJqZWN0IHRvIGFueSBvZiB0aGUgY2hhbmdlcyBtZW50aW9uZWQgaW4gdGhpcyBkb2N1bWVudC4KKworUmVkaXN0cmlidXRpb24gb2YgU1dJU1MtUFJPVAorCisgVGhlcmUgYXJlIG1hbnkgd2F5cyBpbiB3aGljaCBhbGwgb3IgcGFydCBvZiBTV0lTUy1QUk9UIGNhbiBiZSByZWRpc3RyaWJ1dGVkLiBUaGUgbW9zdCBjb21tb24gY2FzZXMgYXJlIHRoZSBmb2xsb3dpbmc6CisKKyAgRGlzdHJpYnV0aW9uIG9mIHRoZSBlbnRpcmUgZGF0YWJhc2UgYnkgRlRQOworCisgIERpc3RyaWJ1dGlvbiBvZiB0aGUgZW50aXJlIGRhdGFiYXNlIG9uIENELVJPTSwgZWl0aGVyIGluIGl0cyBvcmlnaW5hbCBmb3JtYXQgb3IgcmVmb3JtYXR0ZWQgYW5kIGluZGV4ZWQgdG8gYmUgdXNlZCB3aXRoIGEgc3BlY2lmaWMgc29mdHdhcmUgcGFja2FnZTsKKworICBBY2Nlc3MgdG8gc3BlY2lmaWMgZW50cmllcyB1c2luZyBhIFdXVyBzZXJ2ZXIuCisKKyBXZSBhcmUgYXdhcmUgdGhhdCBtYW55IGFjYWRlbWljIGluc3RpdHV0aW9ucyBhbmQgc29mdHdhcmUgY29tcGFuaWVzIHJlZGlzdHJpYnV0ZSBTV0lTUy1QUk9UIGFuZCB3ZSB0aGVyZWZvcmUgd2FudCB0byBtaW5pbWl6ZSBkaXNydXB0aW9uIG9mIHRoZSBleGlzdGluZyBzY2hlbWVzLiBJZiB5b3UgYXJlIHJlZGlzdHJpYnV0aW5nIFNXSVNTLVBST1Qgb3IgbWFraW5nIGl0IGF2YWlsYWJsZSB0byBhbGwgdXNlcnMgb24gdGhlIEludGVybmV0IHlvdSBuZWVkIHRvIGV4cGxpY2l0bHkgYXNrIHBlcm1pc3Npb24gdG8gZG8gc28gYnkgcmVnaXN0ZXJpbmcgeW91ciBzZXJ2aWNlIHdpdGggZWl0aGVyIHRoZSBTSUIgb3IgdGhlIEVCSS4gU3VjaCBhIHBlcm1pc3Npb24gd2lsbCBiZSBncmFudGVkIGlmIHlvdSBhZ3JlZSB0byBvYnNlcnZlIHRoZSBmb2xsb3dpbmcgcnVsZXM6CisKKyAgSW4gdGhlIGNhc2Ugb2YgYSBXV1cgb3IgRlRQIHNlcnZlciwgeW91IGFyZSBhc2tlZCB0byBtYWtlIGF2YWlsYWJsZSB0byBTSUIgb3IgdGhlIEVCSSB0aGF0IHBhcnQgb2YgeW91ciBsb2cgZmlsZXMgdGhhdCBzcGVjaWZpY2FsbHkgZGVhbHMgd2l0aCBhY2Nlc3MgdG8gU1dJU1MtUFJPVC4gU3VjaCBpbmZvcm1hdGlvbiBzaG91bGQgYmUgcHJvdmlkZWQgYXQgbGVhc3QgdHdpY2UgYSB5ZWFyLiBTSUIgYW5kIEVCSSB3aWxsIHRoZW4gaW5mb3JtIEdlbmVCaW8gb2YgYWNjZXNzIHRvIFNXSVNTLVBST1QgYnkgY29tcGFuaWVzIHRoYXQgaGF2ZSBub3QgeWV0IHBhaWQgdGhlaXIgeWVhcmx5IGxpY2Vuc2UgZmVlLiBBcGFydCBmcm9tIHRoaXMgc3BlY2lmaWMgdXNlIGFuZCB0aGF0IG9mIGJ1aWxkaW5nIHN0YXRpc3RpY3Mgb2YgZ2xvYmFsIHVzYWdlIG9mIFNXSVNTLVBST1QsIHRoaXMgaW5mb3JtYXRpb24gd2lsbCBub3QgYmUgdXNlZCBpbiBhbnkgb3RoZXIgd2F5LCBub3Igd2lsbCBpdCBiZSBtYWRlIGF2YWlsYWJsZSB0byB0aGlyZCBwYXJ0aWVzLgorCisgIEluIHRoZSBjYXNlIG9mIENELVJPTSBkaXN0cmlidXRpb24sIHlvdSBhcmUgYXNrZWQgdG8gcHJvdmlkZSB0aGUgbGlzdCBvZiB0aGUgZm9yLXByb2ZpdCBpbnN0aXR1dGlvbnMgdG8gd2hpY2ggc3VjaCBDRC1ST01TIHdlcmUgZGlzdHJpYnV0ZWQuIFN1Y2ggYSBsaXN0IHNob3VsZCBiZSBwcm92aWRlZCBhdCBsZWFzdCB0d2ljZSBhIHllYXIuCisKKyAgWW91IG11c3QgdXBkYXRlIHRoZSBjb3B5IG9mIFNXSVNTLVBST1QgdGhhdCB5b3UgbWFrZSBhdmFpbGFibGUgb24gYSB0aW1lbHkgYmFzaXMuIEZvciBhbiBGVFAgc2VydmljZSwgeW91IHNob3VsZCBwcm92aWRlIHRoZSBsYXN0IGZ1bGwgdXBkYXRlIG9mIHRoZSBkYXRhYmFzZSBhdCB0aGUgbGF0ZXN0IHRocmVlIHdlZWtzIGFmdGVyIGl0IGhhcyBiZWVuIHJlbGVhc2VkLiBGb3IgQ0QtUk9NIGRpc3RyaWJ1dGlvbiwgeW91IHNob3VsZCBwcm92aWRlIGEgbWluaW11bSBvZiB0d28gdXBkYXRlcyBwZXIgeWVhci4gRm9yIGEgV1dXIHNlcnZlciB5b3Ugc2hvdWxkIHByb3ZpZGUgdGhlIGxhdGVzdCBkYXRhYmFzZSBubyBtb3JlIHRoYW4gb25lIG1vbnRoIGFmdGVyIGl0IGJlY29tZXMgYXZhaWxhYmxlIG9uIHRoZSBvZmZpY2lhbCBXV1cgc2VydmVycyBvZiBTSUIgYW5kIEVCSS4gSXQgZ29lcyB3aXRob3V0IHNheWluZyB0aGF0IGJ5IHJlZ2lzdGVyaW5nIHlvdXIgc2VydmljZSwgeW91IHdpbGwgZGlyZWN0bHkgcmVjZWl2ZSBmcm9tIFNJQiBvciBFQkkgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGF2YWlsYWJpbGl0eSBvZiBtYWpvciBhbmQgd2Vla2x5IHJlbGVhc2VzIHNvIGFzIHRvIGhlbHAgeW91IHRvIGNvbXBseSB3aXRoIHRoaXMgcmVxdWVzdC4gVGhpcyBjb25kaXRpb24gaXMgcHVyZWx5IG1hZGUgb24gYmVoYWxmIG9mIHVzZXJzIG9mIHRoZSBkYXRhYmFzZTogbW9zdCBleGlzdGluZyBzZXJ2ZXJzIGFscmVhZHkgcHJvdmlkZSB1cC10by1kYXRlIGluZm9ybWF0aW9uLCBidXQgaW4gYSByZWNlbnQgc3VydmV5LCB3ZSBmb3VuZCBvbmUgb3IgdHdvIHNlcnZpY2VzIHRoYXQgd2VyZSBvZmZlcmluZyByZWxlYXNlcyBkYXRpbmcgYmFjayBtb3JlIHRoYW4gMTggbW9udGhzLgorCisgIFlvdSBzaG91bGQgbm90IHJlZGlzdHJpYnV0ZSBTV0lTUy1QUk9UIGluIGEgZm9ybWF0IG90aGVyIHRoYW4gdGhvc2UgbGlzdGVkIGhlcmVhZnRlciB3aXRob3V0IHRoZSBleHBsaWNpdCBjb25zZW50IG9mIFNJQi9FQkkuIFRoZSBmb3JtYXRzIHRoYXQgYXJlIGFjY2VwdGVkIGJ5IGRlZmF1bHQsIGluIGFkZGl0aW9uIHRvIHRoZSBvcmlnaW5hbCBmb3JtYXQsIGFyZSB0aG9zZSBrbm93biBhcyAnQVNOLjEnIGFuZCBhcyAnR0NHJy4gWW91IGNhbiBhbHNvIG1ha2UgU1dJU1MtUFJPVCBhdmFpbGFibGUgaW4gJ0ZBU1RBJyBvciAnQmxhc3QnIGZvcm1hdHMgYXMgbG9uZyBhcyB5b3UgYWxzbyBwcm92aWRlIGEgdmVyc2lvbiB0aGF0IGluY2x1ZGVzIGFsbCBhbm5vdGF0aW9ucyBpbiB0aGUgYWdyZWVkIGZvcm1hdHMuIEFnYWluLCB0aGlzIHJlcXVlc3QgaXMgbWFkZSBvbiBiZWhhbGYgb2YgdXNlcnMsIHdobyBhcmUgY29uZnVzZWQgYXMgdG8gd2hhdCB0eXBlIG9mIGluZm9ybWF0aW9uIGlzIGF2YWlsYWJsZSBpbiBTV0lTUy1QUk9UIHdoZW4gdGhlIGRhdGFiYXNlIGlzIHJlZm9ybWF0dGVkIGFuZCBzb21lIG9mIGl0cyBzdHJ1Y3R1cmUgaXMgbG9zdCBhZnRlciBzdWNoIGEgdHJhbnNmb3JtYXRpb24uIEl0IGlzIGZhaXIgdG8gc2F5IHRoYXQgU0lCL0VCSSB3aWxsIGxvb2sgcG9zaXRpdmVseSBpbnRvIGFueSByZXF1ZXN0IGZvciByZWRpc3RyaWJ1dGlvbiB3aGljaCBrZWVwcyB0aGUgc3RydWN0dXJlIG9mIHRoZSBkYXRhYmFzZSwgYW5kIHdpbGwgcmVzcG9uZCBuZWdhdGl2ZWx5IG9ubHkgaW4gdGhlIHJhcmUgY2FzZXMgd2hlcmUgdGhlIGludGVncml0eSBvZiB0aGUgc3RydWN0dXJlIGlzIGRlZ3JhZGVkLgorCisgIFlvdSBzaG91bGQgbWFrZSBhdmFpbGFibGUgdG8gdXNlcnMgb2YgU1dJU1MtUFJPVCB0byB3aG9tIHlvdSByZWRpc3RyaWJ1dGUgdGhlIGRhdGFiYXNlIHNvbWUgaW5mb3JtYXRpb24gaXRlbXMgdGhhdCB3aWxsIGJlIHByb3ZpZGVkIGJ5IFNJQiBhbmQgRUJJLiBUaGVzZSBpbmZvcm1hdGlvbiBpdGVtcyBhcmUgbWVhbnQgdG8gYnJpZWZseSBkZXNjcmliZSB0aGUgZGF0YWJhc2UgYW5kIGl0cyBjb250ZW50OyB0byBwb2ludCBvdXQgdGhlIG9yaWdpbmFsIHNpdGVzIChTSUIgYW5kIEVCSSkgd2hlcmUgdGhlIGRhdGFiYXNlIGNhbiBiZSBvYnRhaW5lZDsgYW5kIHRvIHN1bW1hcml6ZSB0aGUgcHJpbmNpcGxlIG9mIHRoZSBuZXcgbGljZW5zaW5nIHN5c3RlbS4gV2Ugd2lsbCB0YWlsb3IgdGhlc2UgaW5mb3JtYXRpb24gaXRlbXMgdG8gdGhlIHNwZWNpZmljIHRlY2huaWNhbCByZXF1aXJlbWVudHMgb2YgeW91ciBkaXN0cmlidXRpb24gc3lzdGVtLiBGb3IgZXhhbXBsZTogaWYgeW91IGhhdmUgYSBXV1cgc2VydmVyIHJ1bm5pbmcgU1JTLCB3ZSB3aWxsIHByb3ZpZGUgdGhlICdJVCcgZmlsZSB0aGF0IGRlc2NyaWJlcyBTV0lTUy1QUk9UIG9yLCBpZiB5b3UgaGF2ZSBhIEZUUCBzZXJ2ZXIsIHdlIHdpbGwgcHJvdmlkZSB0aGUgJ3JlYWRtZScgZmlsZSB0byBiZSBzdG9yZWQgaW4gdGhlIFNXSVNTLVBST1QgZGlyZWN0b3J5LgorCitJbmNvcnBvcmF0aW9uIG9mIFNXSVNTLVBST1QgaW4gYSBzaW1pbGFyaXR5IHNlYXJjaCBzZXJ2aWNlCisKKyBXaGF0IHdlIGRpc2N1c3MgaGVyZSBhcmUgc2VydmljZXMgdGhhdCBhbGxvdyB1c2VycyB0byBkZXRlY3Qgc2ltaWxhcml0aWVzIGJldHdlZW4gYSAndGVzdCcgc2VxdWVuY2UgYW5kIHRoZSBzZXF1ZW5jZXMgc3RvcmVkIGluIG9uZSBvciBtb3JlIHNlcXVlbmNlIGRhdGFiYXNlcy4gTW9zdCBzZXJ2aWNlcyBvZiB0aGF0IGtpbmQgYXJlIHRob3NlIGJhc2VkIG9uIHRoZSB3ZWxsLWtub3duIEZBU1RBIG9yIEJsYXN0IHNlcmllcyBvZiBwcm9ncmFtcy4gVGhlIHNhbWUgY29uZGl0aW9ucyBhbHNvIGFwcGx5IHRvIHByb3RlaW4gaWRlbnRpZmljYXRpb24gc2VydmljZXMgKGUuZy4gcHJvdGVvbWljcyB0b29scyB1c2VkIGluIHRoZSBjb250ZXh0IG9mIG1hc3Mgc3BlY3Ryb21ldHJ5IChNUykgb3IgMkQtUEFHRSkgYXMgd2VsbCBhcyBzZXJ2aWNlcyBiYXNlZCBvbiB0aGUgaWRlbnRpZmljYXRpb24gb2YgcHJvdGVpbiBmYW1pbGllcyAoZS5nLiBQUk9TSVRFLCBCTE9DS1MsIFBmYW0sIGV0Yy4pLgorCisgVGhlcmUgYXJlIGEgbnVtYmVyIG9mIGNhc2VzIHRvIGNvbnNpZGVyOgorCisgIElmIHlvdSBhcmUgYW4gYWNhZGVtaWMgaW5zdGl0dXRpb24gcHJvdmlkaW5nIHN1Y2ggYSBzZXJ2aWNlIHRvIGludGVybmFsIHVzZXJzIG9mIHlvdXIgaW5zdGl0dXRpb24sIHlvdSBkbyBub3QgbmVlZCB0byBkbyBhbnl0aGluZywgbm90IGV2ZW4gcmVnaXN0ZXIgeW91ciBzZXJ2aWNlOworCisgIElmIHlvdSBhcmUgYW4gYWNhZGVtaWMgaW5zdGl0dXRpb24gcHJvdmlkaW5nIHN1Y2ggYSBzZXJ2aWNlIG9uIHRoZSBJbnRlcm5ldCB0byBhbnkgdXNlcnMgZWl0aGVyIGFjYWRlbWljIG9yIGluZHVzdHJpYWwsIHlvdSBuZWVkIHRvIHJlZ2lzdGVyIHlvdXIgc2VydmljZSB3aXRoIFNJQi9FQkkgYW5kIG9ic2VydmUgdGhlIGZvbGxvd2luZyBydWxlczoKKworICAgWW91ciBzZWFyY2ggc2VydmljZSBzaG91bGQgb2ZmZXIgYSB2ZXJzaW9uIG9mIFNXSVNTLVBST1QgdGhhdCBpcyBub3QgbW9yZSB0aGFuIDIgbW9udGhzIG9sZGVyIHRoYW4gdGhhdCBhdmFpbGFibGUgb24gdGhlIG9mZmljaWFsIFdXVyBzZXJ2ZXJzIG9mIFNJQiBhbmQgRUJJLiBJZiBmb3IgdGVjaG5pY2FsIHJlYXNvbnMsIHlvdSBhcmUgbm90IGFibGUgdG8gY29tcGx5IHdpdGggdGhpcyByZXF1ZXN0LCB3ZSBtYXksIG9uIGEgY2FzZSBieSBjYXNlIGJhc2lzLCBkZWNpZGUgdG8gcmVsYXggdGhpcyBydWxlLgorCisgIFRoZSBvdXRwdXQgcHJvZHVjZWQgYnkgeW91ciBzZWFyY2ggZW5naW5lIHNob3VsZCBleHBsaWNpdGx5IHN0YXRlIHdoYXQgdmVyc2lvbiBvZiBTV0lTUy1QUk9UIHdhcyB1c2VkIHRvIGRvIHRoZSBzZWFyY2ggKEV4YW1wbGU6ICdSZWxlYXNlIDM2IHdpdGggdXBkYXRlcyB1cCB0byBPY3RvYmVyIDI0LCAxOTk4JykuCisKKyBXaGlsZSB0aGlzIHNlZW1zIHNpbWlsYXIgdG8gdGhlIGNhc2UgZGlzY3Vzc2VkIHByZXZpb3VzbHkgKHNlcnZpY2VzIHJlZGlzdHJpYnV0aW5nIG9yIHByb3ZpZGluZyBhY2Nlc3MgdG8gU1dJU1MtUFJPVCBlbnRyaWVzKSwgdGhlcmUgaXMgYW4gaW1wb3J0YW50IGRpZmZlcmVuY2UuIFlvdSBkbyBub3QgbmVlZCB0byBwcm92aWRlIHRvIFNJQiBvciBFQkkgdGhlIGxvZyBmaWxlIG9mIHN1Y2ggYSBzZXJ2aWNlIGFzIGxvbmcgYXMgeW91ciBzaW1pbGFyaXR5IHNlYXJjaCBzZXJ2aWNlIGRvZXMgbm90IGRpcmVjdGx5IHByb3ZpZGUsIGFzIGl0cyBvdXRwdXQsIGFueSBTV0lTUy1QUk9UIGVudHJ5LiBUaGlzIGlzIHRoZSBjYXNlIG9mIG1vc3QgZXhpc3RpbmcgcHJvZ3JhbXMsIHN1Y2ggYXMgQmxhc3Qgb3IgRkFTVEEuCisKKyBJZiB5b3Ugd2FudCB0byBjcmVhdGUgbGlua3MgZnJvbSB0aGUgcmVzdWx0cyBvZiBhIHNlYXJjaCB0byB0aGUgZnVsbCBkaXNwbGF5IG9mIHRoZSByZWxldmFudCBTV0lTUy1QUk9UIGVudHJpZXMsIHlvdSBhcmUgZW5jb3VyYWdlZCB0byBkbyBzby4gV2Ugc3BlY2lmaWNhbGx5IGVuY291cmFnZSB5b3UgdG8gbWFrZSB0aGVzZSBsaW5rcyB0byB0aGUgb3JpZ2luYWwgZW50cmllcyBvbiB0aGUgU0lCIG9yIEVCSSBXV1cgc2VydmVycywgYXMgdGhlc2Ugd2lsbCBhbHdheXMgY29udGFpbiB0aGUgbW9zdCB1cC10by1kYXRlIGluZm9ybWF0aW9uLiBIb3dldmVyLCBpZiB5b3Ugd2FudCB0byBwcm92aWRlIGxpbmtzIHRvIGEgY29weSBvZiBTV0lTUy1QUk9UIHN0b3JlZCBvbiB5b3VyIGxvY2FsIHNlcnZlciwgeW91IGNhbiBhbHNvIGRvIHNvLCBidXQgaW4gdGhhdCBjYXNlIHlvdSB3aWxsIGJlY29tZSBhIHJlZGlzdHJpYnV0b3Igb2YgU1dJU1MtUFJPVCBhbmQgdGhlIHJ1bGVzIGluIHRoZSByZWxldmFudCBzZWN0aW9uIG9mIHRoaXMgZG9jdW1lbnQgd2lsbCBiZSBhcHBsaWNhYmxlLgorCisKK1VzZSBvZiBTV0lTUy1QUk9UIGFzIHRoZSBwcmltYXJ5IHJlc291cmNlIGZvciBhIGRlcml2ZWQgZGF0YWJhc2Ugb3IgaW5mb3JtYXRpb24gc2VydmljZQorCisgV2UgZGlzdGluZ3Vpc2ggaGVyZSB0aHJlZSB0eXBlcyBvZiB1c2FnZToKKworICBpbnRlZ3JhdGlvbiBvZiBhbGwgb2YgU1dJU1MtUFJPVCBpbnRvIGFub3RoZXIgZGF0YWJhc2UgKGV4YW1wbGU6IEVudHJleiBvciBPV0wpOworCisgIGludGVncmF0aW9uIG9mIHBhcnQgb2YgU1dJU1MtUFJPVCBpbnRvIGEgc3BlY2lhbGl6ZWQgZGF0YWJhc2UgKGV4YW1wbGVzOiBBbXNEYiwgR2VuZUNhcmRzLCBFY29HZW5lLCBldGMuKTsKKworICBpbnRlZ3JhdGlvbiBvZiBTV0lTUy1QUk9UIGludG8gYSBzcGVjaWFsaXplZCBpbmZvcm1hdGlvbiBzZXJ2aWNlLiBFeGFtcGxlczogUHJvRG9tLCB3aGljaCBzaG93cyB0aGUgZG9tYWluIG9yZ2FuaXphdGlvbiBvZiBTV0lTUy1QUk9UIGVudHJpZXMsIG9yIFByb3RvTWFwIHdoaWNoIGNsdXN0ZXJzIGVudHJpZXMgYnkgZmFtaWxpZXMgb24gdGhlIGJhc2lzIG9mIHNpbWlsYXJpdHkuCisKKyBJbnRlZ3JhdGlvbiBvZiBhbGwgb2YgU1dJU1MtUFJPVCBpbnRvIGFub3RoZXIgZGF0YWJhc2Ugd2lsbCByZXF1aXJlIGV4cGxpY2l0IHBlcm1pc3Npb24gZnJvbSBTSUIvRUJJLiBTdWNoIHBlcm1pc3Npb24gd2lsbCBvbmx5IGJlIGdyYW50ZWQgaWYgdGhlcmUgaXMgYSB2YWxpZCBzY2llbnRpZmljIG9yIHRlY2huaWNhbCByZWFzb24gdG8gZW5jYXBzdWxhdGUgdGhlIGVudGlyZSBjb250ZW50IG9mIFNXSVNTLVBST1QgaW50byBhIG5ldyByZXNvdXJjZS4gSW4gdGhlIGV2ZW50IHRoYXQgc3VjaCBwZXJtaXNzaW9uIGlzIGdyYW50ZWQgeW91IHdpbGwgYmVjb21lIGEgcmVkaXN0cmlidXRvciBvZiBTV0lTUy1QUk9UIGFuZCB0aGUgcnVsZXMgaW4gdGhlIHJlbGV2YW50IHNlY3Rpb24gb2YgdGhpcyBkb2N1bWVudCB3aWxsIGJlIGFwcGxpY2FibGUuCisKKworIEludGVncmF0aW9uIG9mIHBhcnQgb2YgU1dJU1MtUFJPVCBpbnRvIGEgc3BlY2lhbGl6ZWQgZGF0YWJhc2UgaXMgZW5jb3VyYWdlZC4gSG93ZXZlciwgaWYgeW91IGFyZSB1c2luZyBvciBpbnRlbmQgdG8gdXNlIFNXSVNTLVBST1QgZW50cmllcyBvciBwYXJ0IG9mIFNXSVNTLVBST1QgZW50cmllcywgeW91IG5lZWQgdG8gY29udGFjdCBTSUIgb3IgRUJJIHRvIGdldCBhbiBleHBsaWNpdCBwZXJtaXNzaW9uIHRvIGRvIHNvLiBZb3Ugd2lsbCBiZSBhc2tlZCB0byBkZXNjcmliZSB0aGUgc2NvcGUgb2YgeW91ciBkYXRhYmFzZSwgd2hhdCBwYXJ0IG9mIFNXSVNTLVBST1QgeW91IHdhbnQgdG8gaW5jb3Jwb3JhdGUgYW5kIGhvdyB0aGUgaW5mb3JtYXRpb24gd2lsbCBiZSBwcmVzZW50ZWQgYW5kIGRpc3RyaWJ1dGVkLgorCisKKyBTZXJ2aWNlcyB0aGF0IG1ha2UgdXNlIG9mIFNXSVNTLVBST1QgdG8gYnVpbGQgYW4gaW5mb3JtYXRpb24gcmVzb3VyY2UgYXJlIGJvdW5kIGJ5IHRoZSBzYW1lIHJ1bGVzIGFzIHRob3NlIGRlc2NyaWJlZCBmb3Igc2ltaWxhcml0eSBzZWFyY2ggc2VydmljZXMuIEhvd2V2ZXIgd2UgZG8gbm90IHdhbnQgdG8gaGluZGVyIHNlcnZpY2VzIHN1Y2ggYXMgUHJvRG9tIG9yIFByb3RvTWFwLCB3aGljaCByZXF1aXJlcyBodWdlIGNvbXB1dGluZyByZXNvdXJjZXMgdG8gcHJvZHVjZSBhIG5ldyByZWxlYXNlLiBXZSB3aWxsIHRoZXJlZm9yZSBjb25zaWRlciByZWxheGluZyB0aGUgdGltZSBjb25zdHJhaW50cyBmb3Igc3VjaCBzZXJ2aWNlcyBvbiBhIGNhc2UgcGVyIGNhc2UgYmFzaXMsIG9uIGV4cGxpY2l0IHJlcXVlc3QuCisKKworVXNlIG9mIFNXSVNTLVBST1QgaW4gYW4gZWR1Y2F0aW9uYWwgY29udGV4dAorCisgVXNlIG9mIFNXSVNTLVBST1QgZm9yIGVkdWNhdGlvbmFsIHB1cnBvc2UgaXMgYWN0aXZlbHkgZW5jb3VyYWdlZC4gQXMgYSBtZW1iZXIgb2YgYW4gYWNhZGVtaWMgaW5zdGl0dXRpb24geW91IGNhbiB1c2UgU1dJU1MtUFJPVCBpbiBhbnkgY291cnNlcyBvciBzZW1pbmFycyB3aXRoIG5vIHJlc3RyaWN0aW9uIHdoYXRzb2V2ZXIuIElmIHlvdSBvcmdhbml6ZSBjb3Vyc2VzIHRoYXQgYXJlIGF0dGVuZGVkIGJ5IGluZHVzdHJpYWwgdXNlcnMgeW91IGNhbiBtYWtlIHRoZW0gYXdhcmUgb2YgdGhlIGZvbGxvd2luZyBzdGF0ZW1lbnQ6CisKKyBJbmR1c3RyaWFsIHBhcnRpY2lwYW50cyBpbiBjb3Vyc2VzIGFuZCBzZW1pbmFycyBhcmUgZnJlZSB0byBtYWtlIHVzZSBvZiBTV0lTUy1QUk9UIGR1cmluZyB0aGUgY291cnNlIG9yIHNlbWluYXIgaXJyZXNwZWN0aXZlIG9mIHdoZXRoZXIgb3Igbm90IHRoZWlyIGVtcGxveWVyIGlzIGN1cnJlbnRseSBzdWJzY3JpYmluZyB0byB0aGUgZGF0YWJhc2UuCisKKyBXZSBhbHNvIGVuY291cmFnZSB1c2Ugb2YgdGhlIGRhdGFiYXNlcyBmb3IgZWR1Y2F0aW9uYWwgcHVycG9zZSBieSBleGVtcHRpbmcgY29tcGFuaWVzIHdob3NlIHB1cnBvc2UgaXMgdG8gb3JnYW5pemUgY291cnNlcyBhbmQvb3Igc2VtaW5hcnMgZm9yIHRoZSBMaWZlIFNjaWVuY2VzIGNvbW11bml0eSBmcm9tIHRoZSBvYmxpZ2F0aW9uIG9mIHBheWluZyBmb3IgYSB5ZWFybHkgc3Vic2NyaXB0aW9uLiBTdWNoIGNvbXBhbmllcyBuZWVkIHRvIGNvbnRhY3QgU0lCIG9yIEVCSSB0byByZWdpc3Rlci4gVGhleSBhcmUgYXNrZWQgdG8gcHJvdmlkZSB0aGUgY2hhcnRlciBvZiB0aGVpciBvcmdhbml6YXRpb24gc28gYXMgdG8gZW5zdXJlIHRoYXQgdGhleSBhcmUgYWN0aXZlbHkgZW5nYWdlZCBpbiBzdWNoIGVkdWNhdGlvbmFsIGFjdGl2aXRpZXMgYW5kIHRoYXQgdGhleSBhcmUgbm90IHVzaW5nIGEgcGVyaXBoZXJhbCBlZHVjYXRpb25hbCBhY3Rpdml0eSBhcyB0byBnZXQgZXhlbXB0ZWQgZnJvbSBwYXlpbmcgdGhlaXIgc3Vic2NyaXB0aW9uIQorCitNYWtpbmcgcmVmZXJlbmNlIHRvIFNXSVNTLVBST1QgZW50cmllcworCisgVGhlcmUgYXJlIG5vIHJlc3RyaWN0aW9ucyBvbiBlaXRoZXIgYWNhZGVtaWMgb3IgaW5kdXN0cmlhbCB1c2VycyBtYWtpbmcgcmVmZXJlbmNlcyB0byBTV0lTUy1QUk9UIGVudHJpZXMgaW4gYW55IGZvcm0gb2YgcHVibGljYXRpb25zLCBwcmludGVkIG9yIGVsZWN0cm9uaWMuIFdlIG9ubHkgd2FudCB0byB0YWtlIHRoaXMgb3Bwb3J0dW5pdHkgdG8gcmVtaW5kIHlvdSBhZ2FpbiAoYnV0IGJlbGlldmUgdXMsIHRoaXMgaXMgbmVlZGVkISkgdGhhdCB3aGVuIHlvdSBjaXRlIGEgZGF0YWJhc2UgZW50cnkgeW91IG5lZWQgdG8gY2l0ZSB0aGUgcHJpbWFyeSBhY2Nlc3Npb24gbnVtYmVyIG9mIHRoYXQgZW50cnkuIEFjY2Vzc2lvbiBudW1iZXJzIGFyZSBmaXhlZCBpZGVudGlmaWVycywgZW50cnkgbmFtZXMgYXJlIG5vdC4gT2YgY291cnNlLCB5b3UgY2FuIGluY2x1ZGUgdGhlIGVudHJ5IG5hbWUgaW4gdGhlIGNpdGF0aW9uIG9mIGFuIGVudHJ5LCBidXQgdGhlIGFjY2Vzc2lvbiBudW1iZXIgaXMgdGhlIHByaW1hcnkgbWVhbiBvZiBpZGVudGlmaWNhdGlvbiBvZiBhbiBlbnRyeSBhbmQgc2hvdWxkIGFsd2F5cyBiZSB1c2VkLgorCitJbmNvcnBvcmF0aW5nIFNXSVNTLVBST1QgaW5mb3JtYXRpb24gb3IgZW50cmllcyBpbiBwcmludGVkIHB1YmxpY2F0aW9ucworCisgSWYgeW91IGFyZSB3cml0aW5nIGEgYm9vaywgYSBib29rIGNoYXB0ZXIgb3IgYW4gYXJ0aWNsZSBhbmQgeW91IHdhbnQgdG8gaWxsdXN0cmF0ZSBpdCB3aXRoIG9uZSBvciBtb3JlIGZpZ3VyZXMgcmVwcmVzZW50aW5nIFNXSVNTLVBST1QgZW50cmllcyBvciBleGNlcnB0cyBvZiBlbnRyaWVzLCB5b3UgYXJlIGVuY291cmFnZWQgdG8gZG8gc28gYW5kIGRvIG5vdCBuZWVkIHRvIGFzayBmb3IgcGVybWlzc2lvbi4gSG93ZXZlciBpZiB5b3UgaW50ZW5kIHRvIHB1Ymxpc2ggYSBib29rIHdoaWNoIGNvbnRhaW5zIHRoZSBwcmludG91dCBvZiBhIHNpZ25pZmljYW50IG51bWJlciBvZiBlbnRyaWVzIGZyb20gdGhlIGRhdGFiYXNlLCB5b3UgbmVlZCB0byBhc2sgZXhwbGljaXRseSBmb3IgcGVybWlzc2lvbi4gV2UgaW50ZW5kIHRvIGdyYW50IHBlcm1pc3Npb25zLCBidXQgd2Ugd2FudCB0byBtYWtlIGEgZGlzdGluY3Rpb24gYmV0d2VlbiBpbGx1c3RyYXRpbmcgYW4gYXJ0aWNsZSBvciBhIGJvb2sgd2l0aCBleGNlcnB0cyBmcm9tIHRoZSBkYXRhYmFzZSAod2hpY2ggaXMgZW5jb3VyYWdlZCkgYW5kIHByaW50aW5nIGEgYm9vayB3aGljaCBzb2xlbHkgb3Igc3Vic3RhbnRpYWxseSBjb25zaXN0cyBvZiBwcmludG91dHMgZnJvbSB0aGUgZGF0YWJhc2UuCisKKworRm9yIG1vcmUgaW5mb3JtYXRpb24uLi4KKworIElmIGFmdGVyIGhhdmluZyByZWFkIHRoaXMgZG9jdW1lbnQsIHlvdSBzdGlsbCBoYXZlIHF1ZXN0aW9ucywgeW91IGNhbiBzZW5kIGFuIGVtYWlsIHRvIHRoZSBmb2xsb3dpbmcgYWRkcmVzc2VzOgorCisgIEdlbmVyYWwgaW5mb3JtYXRpb246IGluZm9AaXNiLXNpYi5jaAorCisgIExpY2Vuc2luZyBpbmZvcm1hdGlvbjogbGljZW5zZUBpc2Itc2liLmNoClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvc3ppcCBiL2xpY2Vuc2VzL3N6aXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGViMDQ0YwotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL3N6aXAKQEAgLTAsMCArMSwzMyBAQAorVGhlIFNaSVAgU2NpZW5jZSBEYXRhIExvc3NsZXNzIENvbXByZXNzaW9uIFByb2dyYW0gaXMgQ29weXJpZ2h0IChDKSAyMDAxIFNjaWVuY2UKKyYgVGVjaG5vbG9neSBDb3Jwb3JhdGlvbiBAIFVOTS4gIEFsbCByaWdodHMgcmVsZWFzZWQuICBDb3B5cmlnaHQgKEMpIDIwMDMgTG93ZWxsCitILiBNaWxlcyBhbmQgSmFjayBBLiBWZW5icnV4LiAgTGljZW5zZWQgdG8gSUNzIENvcnAuIGZvciBkaXN0cmlidXRpb24gYnkgdGhlCitVbml2ZXJzaXR5IG9mIElsbGlub2lzJyBOYXRpb25hbCBDZW50ZXIgZm9yIFN1cGVyY29tcHV0aW5nIEFwcGxpY2F0aW9ucyBhcyBhCitwYXJ0IG9mIHRoZSBIREYgZGF0YSBzdG9yYWdlIGFuZCByZXRyaWV2YWwgZmlsZSBmb3JtYXQgYW5kIHNvZnR3YXJlIGxpYnJhcnkKK3Byb2R1Y3RzIHBhY2thZ2UuICBBbGwgcmlnaHRzIHJlc2VydmVkLiAgRG8gbm90IG1vZGlmeSBvciB1c2UgZm9yIG90aGVyCitwdXJwb3Nlcy4KKworU1pJUCBpbXBsZW1lbnRzIGFuIGV4dGVuZGVkIFJpY2UgYWRhcHRpdmUgbG9zc2xlc3MgY29tcHJlc3Npb24gYWxnb3JpdGhtCitmb3Igc2FtcGxlIGRhdGEuICBUaGUgcHJpbWFyeSBhbGdvcml0aG0gd2FzIGRldmVsb3BlZCBieSBSLiBGLiBSaWNlIGF0CitKZXQgUHJvcHVsc2lvbiBMYWJvcmF0b3J5LiAgCisKK1NaSVAgZW1ib2RpZXMgY2VydGFpbiBpbnZlbnRpb25zIHBhdGVudGVkIGJ5IHRoZSBOYXRpb25hbCBBZXJvbmF1dGljcyAmCitTcGFjZSBBZG1pbmlzdHJhdGlvbi4gIFVuaXRlZCBTdGF0ZXMgUGF0ZW50IE5vcy4gNSw0NDgsNjQyLCA1LDY4NywyNTUsCithbmQgNSw4MjIsNDU3IGhhdmUgYmVlbiBsaWNlbnNlZCB0byBJQ3MgQ29ycC4gZm9yIGRpc3RyaWJ1dGlvbiB3aXRoIHRoZQorSERGIGRhdGEgc3RvcmFnZSBhbmQgcmV0cmlldmFsIGZpbGUgZm9ybWF0IGFuZCBzb2Z0d2FyZSBsaWJyYXJ5IHByb2R1Y3RzLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmV2b2NhYmxlIChpbiB0aGUgZXZlbnQgb2YgYnJlYWNoIGJ5IHRoZSB1c2VyIG9yIGlmIHJlcXVpcmVkIGJ5IGxhdyksIAorcm95YWx0eS1mcmVlLCBub25leGNsdXNpdmUgc3VibGljZW5zZSB0byB1c2UgU1pJUCBkZWNvbXByZXNzaW9uIHNvZnR3YXJlIAorcm91dGluZXMgYW5kIHVuZGVybHlpbmcgcGF0ZW50cyBpcyBoZXJlYnkgZ3JhbnRlZCBieSBJQ3MgQ29ycC4gdG8gYWxsIHVzZXJzIAorb2YgYW5kIGluIGNvbmp1bmN0aW9uIHdpdGggSERGIGRhdGEgc3RvcmFnZSBhbmQgcmV0cmlldmFsIGZpbGUgZm9ybWF0IGFuZCAKK3NvZnR3YXJlIGxpYnJhcnkgcHJvZHVjdHMuCisKK1Jldm9jYWJsZSAoaW4gdGhlIGV2ZW50IG9mIGJyZWFjaCBieSB0aGUgdXNlciBvciBpZiByZXF1aXJlZCBieSBsYXcpLCAKK3JveWFsdHktZnJlZSwgbm9uZXhjbHVzaXZlIHN1YmxpY2Vuc2UgdG8gdXNlIFNaSVAgY29tcHJlc3Npb24gc29mdHdhcmUgCityb3V0aW5lcyBhbmQgdW5kZXJseWluZyBwYXRlbnRzIGZvciBub24tY29tbWVyY2lhbCwgc2NpZW50aWZpYyB1c2Ugb25seSAKK2lzIGhlcmVieSBncmFudGVkIGJ5IElDcyBDb3JwLiB0byB1c2VycyBvZiBhbmQgaW4gY29uanVuY3Rpb24gd2l0aCBIREYgCitkYXRhIHN0b3JhZ2UgYW5kIHJldHJpZXZhbCBmaWxlIGZvcm1hdCBhbmQgc29mdHdhcmUgbGlicmFyeSBwcm9kdWN0cy4KKworRm9yIGNvbW1lcmNpYWwgdXNlIGxpY2Vuc2UgdG8gU1pJUCBjb21wcmVzc2lvbiBzb2Z0d2FyZSByb3V0aW5lcyBhbmQgdW5kZXJseWluZyAKK3BhdGVudHMgcGxlYXNlIGNvbnRhY3QgSUNzIENvcnAuIGF0IElDcyBDb3JwLiwgNzIxIExvY2hzYSBTdHJlZXQsIFN1aXRlIDgsCitQb3N0IEZhbGxzLCBJRCA4Mzg1NC4gICgyMDgpIDI2Mi0yMDA4LgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvdGFudWtpLWNvbW11bml0eSBiL2xpY2Vuc2VzL3RhbnVraS1jb21tdW5pdHkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlhOTgwZgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL3RhbnVraS1jb21tdW5pdHkKQEAgLTAsMCArMSwzNTggQEAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy0tLS0tLS0tLS0tLS0tLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAgICAgICAgICAgICAgICAgICBUYW51a2kgU29mdHdhcmUsIEluYy4gCisgICAgICAgICAgICAgICAgIENvbW11bml0eSBTb2Z0d2FyZSBMaWNlbnNlIEFncmVlbWVudAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWZXJzaW9uIDEuMAorCitJTVBPUlRBTlQtUkVBRCBDQVJFRlVMTFk6IFRoaXMgbGljZW5zZSBhZ3JlZW1lbnQgaXMgYSBsZWdhbCBhZ3JlZW1lbnQKK2JldHdlZW4geW91IGFuZCBUYW51a2kgU29mdHdhcmUsIEluYy4oIlRTSSIpLCB3aGljaCBpbmNsdWRlcyBjb21wdXRlcgorc29mdHdhcmUsIGFzc29jaWF0ZWQgbWVkaWEsIHByaW50ZWQgbWF0ZXJpYWxzLCBhbmQgbWF5IGluY2x1ZGUgb25saW5lCitvciBlbGVjdHJvbmljIGRvY3VtZW50YXRpb24gKCBTb2Z0d2FyZSApLiAgUExFQVNFIFJFQUQgVEhJUyBBR1JFRU1FTlQKK0NBUkVGVUxMWSBCRUZPUkUgWU9VIElOU1RBTEwsIENPUFksIERPV05MT0FEIE9SIFVTRSBUSEUgU09GVFdBUkUKK0FDQ09NUEFOWUlORyBUSElTIFBBQ0tBR0UuCisKK1NlY3Rpb24gMSAtIEdyYW50IG9mIExpY2Vuc2UKKworQ29tbXVuaXR5IGVkaXRpb25zIG9mIHRoZSBTb2Z0d2FyZSBhcmUgbWFkZSBhdmFpbGFibGUgb24gdGhlIEdOVQorR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwgVmVyc2lvbiAyICgiR1BMdjIiKSwgaW5jbHVkZWQgaW4gU2VjdGlvbiAzIG9mCit0aGlzIGxpY2Vuc2UgZG9jdW1lbnQuICBBbGwgc2VjdGlvbnMgb2YgdGhlIENvbW11bml0eSBTb2Z0d2FyZSBMaWNlbnNlCitBZ3JlZW1lbnQgbXVzdCBiZSBjb21wbGllZCB3aXRoIGluIGFkZGl0aW9uIHRvIHRob3NlIG9mIHRoZSBHUEx2Mi4KKworCitTZWN0aW9uIDIgLSBZb3VyIE9ibGlnYXRpb25zCisKK0EgY29weSBvZiB0aGlzIGxpY2Vuc2UgbXVzdCBiZSBkaXN0cmlidXRlZCBpbiBmdWxsIHdpdGggdGhlIFByb2R1Y3QKK2luIGEgbG9jYXRpb24gdGhhdCBpcyBvYnZpb3VzIHRvIFlvdXIgY3VzdG9tZXJzLiAgVGhlIFNvZnR3YXJlCitQcm9ncmFtIG1heSBub3QgYmUgbW9kaWZpZWQsIG5vciBtYXkgdGhlIFByb2R1Y3QgaW4gYW55IHdheSBvYmZ1c2NhdGUKK29yIG9ic3RydWN0IHRoZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBsaWNlbnNlIGluZm9ybWF0aW9uIGRpc3BsYXllZCBpbgordGhlIGNvbnNvbGUgYW5kIGxvZyBmaWxlcyBieSB0aGUgU29mdHdhcmUgUHJvZ3JhbSBvbiBzdGFydHVwLiAKKworCitTZWN0aW9uIDMgLSBHUEx2MiBMaWNlbnNlIEFncmVlbWVudAorCisgICAgICAgICAgICAgICAgICAgICAgICBHTlUgR0VORVJBTCBQVUJMSUMgTElDRU5TRQorICAgICAgICAgICAgICAgICAgICAgICAgICAgVmVyc2lvbiAyLCBKdW5lIDE5OTEKKworICAgICAgICAgQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorICAgICAgIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBCisKKyAgICBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YKKyAgICB0aGlzIGxpY2Vuc2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworICAgIFByZWFtYmxlCisKKyAgICBUaGUgbGljZW5zZXMgZm9yIG1vc3Qgc29mdHdhcmUgYXJlIGRlc2lnbmVkIHRvIHRha2UgYXdheSB5b3VyCisgICAgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsCisgICAgUHVibGljIExpY2Vuc2UgaXMgaW50ZW5kZWQgdG8gZ3VhcmFudGVlIHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQKKyAgICBjaGFuZ2UgZnJlZSBzb2Z0d2FyZS0tdG8gbWFrZSBzdXJlIHRoZSBzb2Z0d2FyZSBpcyBmcmVlIGZvciBhbGwKKyAgICBpdHMgdXNlcnMuIFRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUKKyAgICBTb2Z0d2FyZSBGb3VuZGF0aW9uJ3Mgc29mdHdhcmUgYW5kIHRvIGFueSBvdGhlciBwcm9ncmFtIHdob3NlCisgICAgYXV0aG9ycyBjb21taXQgdG8gdXNpbmcgaXQuICAoU29tZSBvdGhlciBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24KKyAgICBzb2Z0d2FyZSBpcyBjb3ZlcmVkIGJ5IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgaW5zdGVhZC4pIFlvdSBjYW4gYXBwbHkgaXQgdG8geW91ciBwcm9ncmFtcywgdG9vLgorCisgICAgV2hlbiB3ZSBzcGVhayBvZiBmcmVlIHNvZnR3YXJlLCB3ZSBhcmUgcmVmZXJyaW5nIHRvIGZyZWVkb20sIG5vdAorICAgIHByaWNlLiBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0CisgICAgeW91IGhhdmUgdGhlIGZyZWVkb20gdG8gZGlzdHJpYnV0ZSBjb3BpZXMgb2YgZnJlZSBzb2Z0d2FyZSAoYW5kCisgICAgY2hhcmdlIGZvciB0aGlzIHNlcnZpY2UgaWYgeW91IHdpc2gpLCB0aGF0IHlvdSByZWNlaXZlIHNvdXJjZSBjb2RlCisgICAgb3IgY2FuIGdldCBpdCBpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IKKyAgICB1c2UgcGllY2VzIG9mIGl0IGluIG5ldyBmcmVlIHByb2dyYW1zOyBhbmQgdGhhdCB5b3Uga25vdyB5b3UgY2FuCisgICAgZG8gdGhlc2UgdGhpbmdzLgorCisgICAgVG8gcHJvdGVjdCB5b3VyIHJpZ2h0cywgd2UgbmVlZCB0byBtYWtlIHJlc3RyaWN0aW9ucyB0aGF0IGZvcmJpZAorICAgIGFueW9uZSB0byBkZW55IHlvdSB0aGVzZSByaWdodHMgb3IgdG8gYXNrIHlvdSB0byBzdXJyZW5kZXIgdGhlCisgICAgcmlnaHRzLiBUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcworICAgIGZvciB5b3UgaWYgeW91IGRpc3RyaWJ1dGUgY29waWVzIG9mIHRoZSBzb2Z0d2FyZSwgb3IgaWYgeW91IG1vZGlmeQorICAgIGl0LgorCisgICAgRm9yIGV4YW1wbGUsIGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiBzdWNoIGEgcHJvZ3JhbSwgd2hldGhlcgorICAgIGdyYXRpcyBvciBmb3IgYSBmZWUsIHlvdSBtdXN0IGdpdmUgdGhlIHJlY2lwaWVudHMgYWxsIHRoZSByaWdodHMKKyAgICB0aGF0IHlvdSBoYXZlLiBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuCisgICAgZ2V0IHRoZSBzb3VyY2UgY29kZS4gQW5kIHlvdSBtdXN0IHNob3cgdGhlbSB0aGVzZSB0ZXJtcyBzbyB0aGV5CisgICAga25vdyB0aGVpciByaWdodHMuCisKKyAgICBXZSBwcm90ZWN0IHlvdXIgcmlnaHRzIHdpdGggdHdvIHN0ZXBzOgorCisgICAgKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZAorICAgICgyKSBvZmZlciB5b3UgdGhpcyBsaWNlbnNlIHdoaWNoIGdpdmVzIHlvdSBsZWdhbCBwZXJtaXNzaW9uIHRvCisgICAgY29weSwgZGlzdHJpYnV0ZSBhbmQvb3IgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKworICAgIEFsc28sIGZvciBlYWNoIGF1dGhvcidzIHByb3RlY3Rpb24gYW5kIG91cnMsIHdlIHdhbnQgdG8gbWFrZQorICAgIGNlcnRhaW4gdGhhdCBldmVyeW9uZSB1bmRlcnN0YW5kcyB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IGZvcgorICAgIHRoaXMgZnJlZSBzb2Z0d2FyZS4gSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZQorICAgIGFuZCBwYXNzZWQgb24sIHdlIHdhbnQgaXRzIHJlY2lwaWVudHMgdG8ga25vdyB0aGF0IHdoYXQgdGhleSBoYXZlCisgICAgaXMgbm90IHRoZSBvcmlnaW5hbCwgc28gdGhhdCBhbnkgcHJvYmxlbXMgaW50cm9kdWNlZCBieSBvdGhlcnMKKyAgICB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbCBhdXRob3JzJyByZXB1dGF0aW9ucy4KKworICAgIEZpbmFsbHksIGFueSBmcmVlIHByb2dyYW0gaXMgdGhyZWF0ZW5lZCBjb25zdGFudGx5IGJ5IHNvZnR3YXJlCisgICAgcGF0ZW50cy4gV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlCisgICAgcHJvZ3JhbSB3aWxsIGluZGl2aWR1YWxseSBvYnRhaW4gcGF0ZW50IGxpY2Vuc2VzLCBpbiBlZmZlY3QgbWFraW5nCisgICAgdGhlIHByb2dyYW0gcHJvcHJpZXRhcnkuIFRvIHByZXZlbnQgdGhpcywgd2UgaGF2ZSBtYWRlIGl0IGNsZWFyCisgICAgdGhhdCBhbnkgcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90CisgICAgbGljZW5zZWQgYXQgYWxsLgorCisgICAgVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQKKyAgICBtb2RpZmljYXRpb24gZm9sbG93LgorICAgIEdOVSBHRU5FUkFMIFBVQkxJQyBMSUNFTlNFCisgICAgVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIENPUFlJTkcsIERJU1RSSUJVVElPTiBBTkQgTU9ESUZJQ0FUSU9OCisKKyAgICAwLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgcHJvZ3JhbSBvciBvdGhlciB3b3JrIHdoaWNoCisgICAgY29udGFpbnMgYSBub3RpY2UgcGxhY2VkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVyIHNheWluZyBpdCBtYXkgYmUKKyAgICBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBUaGUKKyAgICAiUHJvZ3JhbSIsIGJlbG93LCByZWZlcnMgdG8gYW55IHN1Y2ggcHJvZ3JhbSBvciB3b3JrLCBhbmQgYSAid29yaworICAgIGJhc2VkIG9uIHRoZSBQcm9ncmFtIiBtZWFucyBlaXRoZXIgdGhlIFByb2dyYW0gb3IgYW55IGRlcml2YXRpdmUKKyAgICB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6IHRoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUKKyAgICBQcm9ncmFtIG9yIGEgcG9ydGlvbiBvZiBpdCwgZWl0aGVyIHZlcmJhdGltIG9yIHdpdGggbW9kaWZpY2F0aW9ucworICAgIGFuZC9vciB0cmFuc2xhdGVkIGludG8gYW5vdGhlciBsYW5ndWFnZS4gKEhlcmVpbmFmdGVyLCB0cmFuc2xhdGlvbgorICAgIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbiB0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pIEVhY2gKKyAgICBsaWNlbnNlZSBpcyBhZGRyZXNzZWQgYXMgInlvdSIuCisKKyAgICBBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlCisgICAgbm90IGNvdmVyZWQgYnkgdGhpcyBMaWNlbnNlOyB0aGV5IGFyZSBvdXRzaWRlIGl0cyBzY29wZS4gVGhlIGFjdAorICAgIG9mIHJ1bm5pbmcgdGhlIFByb2dyYW0gaXMgbm90IHJlc3RyaWN0ZWQsIGFuZCB0aGUgb3V0cHV0IGZyb20gdGhlCisgICAgUHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uCisgICAgdGhlIFByb2dyYW0gKGluZGVwZW5kZW50IG9mIGhhdmluZyBiZWVuIG1hZGUgYnkgcnVubmluZyB0aGUKKyAgICBQcm9ncmFtKS4gV2hldGhlciB0aGF0IGlzIHRydWUgZGVwZW5kcyBvbiB3aGF0IHRoZSBQcm9ncmFtIGRvZXMuCisKKyAgICAxLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBQcm9ncmFtJ3MKKyAgICBzb3VyY2UgY29kZSBhcyB5b3UgcmVjZWl2ZSBpdCwgaW4gYW55IG1lZGl1bSwgcHJvdmlkZWQgdGhhdCB5b3UKKyAgICBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuCisgICAgYXBwcm9wcmlhdGUgY29weXJpZ2h0IG5vdGljZSBhbmQgZGlzY2xhaW1lciBvZiB3YXJyYW50eTsga2VlcAorICAgIGludGFjdCBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZQorICAgIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OyBhbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUKKyAgICBQcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgUHJvZ3JhbS4KKworICAgIFlvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksCisgICAgYW5kIHlvdSBtYXkgYXQgeW91ciBvcHRpb24gb2ZmZXIgd2FycmFudHkgcHJvdGVjdGlvbiBpbiBleGNoYW5nZQorICAgIGZvciBhIGZlZS4KKworICAgIDIuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIFByb2dyYW0gb3IgYW55CisgICAgcG9ydGlvbiBvZiBpdCwgdGh1cyBmb3JtaW5nIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgYW5kIGNvcHkKKyAgICBhbmQgZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YKKyAgICBTZWN0aW9uIDEgYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCBhbGwgb2YgdGhlc2UKKyAgICBjb25kaXRpb25zOgorCisgICAgYSkgWW91IG11c3QgY2F1c2UgdGhlIG1vZGlmaWVkIGZpbGVzIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzCisgICAgc3RhdGluZyB0aGF0IHlvdSBjaGFuZ2VkIHRoZSBmaWxlcyBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4KKworICAgIGIpIFlvdSBtdXN0IGNhdXNlIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwgdGhhdCBpbgorICAgIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgZGVyaXZlZCBmcm9tIHRoZSBQcm9ncmFtIG9yIGFueQorICAgIHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseQorICAgIHdoZW4gcnVuLCB5b3UgbXVzdCBjYXVzZSBpdCwgd2hlbiBzdGFydGVkIHJ1bm5pbmcgZm9yIHN1Y2gKKyAgICBpbnRlcmFjdGl2ZSB1c2UgaW4gdGhlIG1vc3Qgb3JkaW5hcnkgd2F5LCB0byBwcmludCBvciBkaXNwbGF5IGFuCisgICAgYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhCisgICAgbm90aWNlIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlCisgICAgYSB3YXJyYW50eSkgYW5kIHRoYXQgdXNlcnMgbWF5IHJlZGlzdHJpYnV0ZSB0aGUgcHJvZ3JhbSB1bmRlcgorICAgIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzCisgICAgTGljZW5zZS4gKEV4Y2VwdGlvbjogaWYgdGhlIFByb2dyYW0gaXRzZWxmIGlzIGludGVyYWN0aXZlIGJ1dCBkb2VzCisgICAgbm90IG5vcm1hbGx5IHByaW50IHN1Y2ggYW4gYW5ub3VuY2VtZW50LCB5b3VyIHdvcmsgYmFzZWQgb24gdGhlCisgICAgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKKworICAgIFRoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgbW9kaWZpZWQgd29yayBhcyBhIHdob2xlLiBJZgorICAgIGlkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlCisgICAgUHJvZ3JhbSwgYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlCisgICAgd29ya3MgaW4gdGhlbXNlbHZlcywgdGhlbiB0aGlzIExpY2Vuc2UsIGFuZCBpdHMgdGVybXMsIGRvIG5vdAorICAgIGFwcGx5IHRvIHRob3NlIHNlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4KKyAgICBCdXQgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGUgc2FtZSBzZWN0aW9ucyBhcyBwYXJ0IG9mIGEgd2hvbGUgd2hpY2gKKyAgICBpcyBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0sIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIHdob2xlIG11c3QKKyAgICBiZSBvbiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIKKyAgICBsaWNlbnNlZXMgZXh0ZW5kIHRvIHRoZSBlbnRpcmUgd2hvbGUsIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5CisgICAgcGFydCByZWdhcmRsZXNzIG9mIHdobyB3cm90ZSBpdC4KKworICAgIFRodXMsIGl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IKKyAgICBjb250ZXN0IHlvdXIgcmlnaHRzIHRvIHdvcmsgd3JpdHRlbiBlbnRpcmVseSBieSB5b3U7IHJhdGhlciwgdGhlCisgICAgaW50ZW50IGlzIHRvIGV4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YKKyAgICBkZXJpdmF0aXZlIG9yIGNvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIFByb2dyYW0uCisKKyAgICBJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZQorICAgIFByb2dyYW0gd2l0aCB0aGUgUHJvZ3JhbSAob3Igd2l0aCBhIHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pIG9uCisgICAgYSB2b2x1bWUgb2YgYSBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbiBtZWRpdW0gZG9lcyBub3QgYnJpbmcgdGhlCisgICAgb3RoZXIgd29yayB1bmRlciB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCisgICAgMy4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhIHdvcmsgYmFzZWQgb24gaXQsCisgICAgdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zCisgICAgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUKKyAgICBmb2xsb3dpbmc6CisKKyAgICBhKSBBY2NvbXBhbnkgaXQgd2l0aCB0aGUgY29tcGxldGUgY29ycmVzcG9uZGluZyBtYWNoaW5lLXJlYWRhYmxlCisgICAgc291cmNlIGNvZGUsIHdoaWNoIG11c3QgYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zCisgICAgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZQorICAgIGludGVyY2hhbmdlOyBvciwKKworICAgIGIpIEFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlCisgICAgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIKKyAgICBjb3N0IG9mIHBoeXNpY2FsbHkgcGVyZm9ybWluZyBzb3VyY2UgZGlzdHJpYnV0aW9uLCBhIGNvbXBsZXRlCisgICAgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNvdXJjZSBjb2RlLCB0byBiZQorICAgIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtCisgICAgY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgaW50ZXJjaGFuZ2U7IG9yLAorCisgICAgYykgQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIKKyAgICB0byBkaXN0cmlidXRlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUuIChUaGlzIGFsdGVybmF0aXZlIGlzCisgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gd2l0aCBzdWNoCisgICAgYW4gb2ZmZXIsIGluIGFjY29yZCB3aXRoIFN1YnNlY3Rpb24gYiBhYm92ZS4pCisKKyAgICBUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsKKyAgICBmb3IgbWFraW5nIG1vZGlmaWNhdGlvbnMgdG8gaXQuIEZvciBhbiBleGVjdXRhYmxlIHdvcmssIGNvbXBsZXRlCisgICAgc291cmNlIGNvZGUgbWVhbnMgYWxsIHRoZSBzb3VyY2UgY29kZSBmb3IgYWxsIG1vZHVsZXMgaXQgY29udGFpbnMsCisgICAgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cworICAgIHVzZWQgdG8gY29udHJvbCBjb21waWxhdGlvbiBhbmQgaW5zdGFsbGF0aW9uIG9mIHRoZSBleGVjdXRhYmxlLgorICAgIEhvd2V2ZXIsIGFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHRoZSBzb3VyY2UgY29kZSBkaXN0cmlidXRlZCBuZWVkCisgICAgbm90IGluY2x1ZGUgYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyCisgICAgc291cmNlIG9yIGJpbmFyeSBmb3JtKSB3aXRoIHRoZSBtYWpvciBjb21wb25lbnRzIChjb21waWxlciwKKyAgICBrZXJuZWwsIGFuZCBzbyBvbikgb2YgdGhlIG9wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUKKyAgICBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQgaXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgorCisgICAgSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZworICAgIGFjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQKKyAgICBhY2Nlc3MgdG8gY29weSB0aGUgc291cmNlIGNvZGUgZnJvbSB0aGUgc2FtZSBwbGFjZSBjb3VudHMgYXMKKyAgICBkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QKKyAgICBjb21wZWxsZWQgdG8gY29weSB0aGUgc291cmNlIGFsb25nIHdpdGggdGhlIG9iamVjdCBjb2RlLgorCisgICAgNC4gWW91IG1heSBub3QgY29weSwgbW9kaWZ5LCBzdWJsaWNlbnNlLCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtCisgICAgZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuIEFueSBhdHRlbXB0CisgICAgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGlzCisgICAgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcworICAgIExpY2Vuc2UuIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsCisgICAgZnJvbSB5b3UgdW5kZXIgdGhpcyBMaWNlbnNlIHdpbGwgbm90IGhhdmUgdGhlaXIgbGljZW5zZXMKKyAgICB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaCBwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKyAgICA1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3QKKyAgICBzaWduZWQgaXQuIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5CisgICAgb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBvciBpdHMgZGVyaXZhdGl2ZSB3b3Jrcy4gVGhlc2UgYWN0aW9ucworICAgIGFyZSBwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuCisgICAgVGhlcmVmb3JlLCBieSBtb2RpZnlpbmcgb3IgZGlzdHJpYnV0aW5nIHRoZSBQcm9ncmFtIChvciBhbnkgd29yaworICAgIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSwgeW91IGluZGljYXRlIHlvdXIgYWNjZXB0YW5jZSBvZiB0aGlzCisgICAgTGljZW5zZSB0byBkbyBzbywgYW5kIGFsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsCisgICAgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZyB0aGUgUHJvZ3JhbSBvciB3b3JrcyBiYXNlZCBvbiBpdC4KKworICAgIDYuIEVhY2ggdGltZSB5b3UgcmVkaXN0cmlidXRlIHRoZSBQcm9ncmFtIChvciBhbnkgd29yayBiYXNlZCBvbgorICAgIHRoZSBQcm9ncmFtKSwgdGhlIHJlY2lwaWVudCBhdXRvbWF0aWNhbGx5IHJlY2VpdmVzIGEgbGljZW5zZSBmcm9tCisgICAgdGhlIG9yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtCisgICAgc3ViamVjdCB0byB0aGVzZSB0ZXJtcyBhbmQgY29uZGl0aW9ucy4gWW91IG1heSBub3QgaW1wb3NlIGFueQorICAgIGZ1cnRoZXIgcmVzdHJpY3Rpb25zIG9uIHRoZSByZWNpcGllbnRzJyBleGVyY2lzZSBvZiB0aGUgcmlnaHRzCisgICAgZ3JhbnRlZCBoZXJlaW4uIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZQorICAgIGJ5IHRoaXJkIHBhcnRpZXMgdG8gdGhpcyBMaWNlbnNlLgorCisgICAgNy4gSWYsIGFzIGEgY29uc2VxdWVuY2Ugb2YgYSBjb3VydCBqdWRnbWVudCBvciBhbGxlZ2F0aW9uIG9mCisgICAgcGF0ZW50IGluZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8KKyAgICBwYXRlbnQgaXNzdWVzKSwgY29uZGl0aW9ucyBhcmUgaW1wb3NlZCBvbiB5b3UgKHdoZXRoZXIgYnkgY291cnQKKyAgICBvcmRlciwgYWdyZWVtZW50IG9yIG90aGVyd2lzZSkgdGhhdCBjb250cmFkaWN0IHRoZSBjb25kaXRpb25zIG9mCisgICAgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdCBleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcworICAgIExpY2Vuc2UuIElmIHlvdSBjYW5ub3QgZGlzdHJpYnV0ZSBzbyBhcyB0byBzYXRpc2Z5IHNpbXVsdGFuZW91c2x5CisgICAgeW91ciBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIExpY2Vuc2UgYW5kIGFueSBvdGhlciBwZXJ0aW5lbnQKKyAgICBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdSBtYXkgbm90IGRpc3RyaWJ1dGUgdGhlCisgICAgUHJvZ3JhbSBhdCBhbGwuIEZvciBleGFtcGxlLCBpZiBhIHBhdGVudCBsaWNlbnNlIHdvdWxkIG5vdCBwZXJtaXQKKyAgICByb3lhbHR5LWZyZWUgcmVkaXN0cmlidXRpb24gb2YgdGhlIFByb2dyYW0gYnkgYWxsIHRob3NlIHdobworICAgIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4gdGhlIG9ubHkKKyAgICB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCBpdCBhbmQgdGhpcyBMaWNlbnNlIHdvdWxkIGJlIHRvIHJlZnJhaW4KKyAgICBlbnRpcmVseSBmcm9tIGRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbS4KKworICAgIElmIGFueSBwb3J0aW9uIG9mIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGludmFsaWQgb3IgdW5lbmZvcmNlYWJsZQorICAgIHVuZGVyIGFueSBwYXJ0aWN1bGFyIGNpcmN1bXN0YW5jZSwgdGhlIGJhbGFuY2Ugb2YgdGhlIHNlY3Rpb24gaXMKKyAgICBpbnRlbmRlZCB0byBhcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseQorICAgIGluIG90aGVyIGNpcmN1bXN0YW5jZXMuCisKKyAgICBJdCBpcyBub3QgdGhlIHB1cnBvc2Ugb2YgdGhpcyBzZWN0aW9uIHRvIGluZHVjZSB5b3UgdG8gaW5mcmluZ2UKKyAgICBhbnkgcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eQorICAgIG9mIGFueSBzdWNoIGNsYWltczsgdGhpcyBzZWN0aW9uIGhhcyB0aGUgc29sZSBwdXJwb3NlIG9mCisgICAgcHJvdGVjdGluZyB0aGUgaW50ZWdyaXR5IG9mIHRoZSBmcmVlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbiBzeXN0ZW0sCisgICAgd2hpY2ggaXMgaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiBNYW55IHBlb3BsZSBoYXZlCisgICAgbWFkZSBnZW5lcm91cyBjb250cmlidXRpb25zIHRvIHRoZSB3aWRlIHJhbmdlIG9mIHNvZnR3YXJlCisgICAgZGlzdHJpYnV0ZWQgdGhyb3VnaCB0aGF0IHN5c3RlbSBpbiByZWxpYW5jZSBvbiBjb25zaXN0ZW50CisgICAgYXBwbGljYXRpb24gb2YgdGhhdCBzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlCisgICAgaWYgaGUgb3Igc2hlIGlzIHdpbGxpbmcgdG8gZGlzdHJpYnV0ZSBzb2Z0d2FyZSB0aHJvdWdoIGFueSBvdGhlcgorICAgIHN5c3RlbSBhbmQgYSBsaWNlbnNlZSBjYW5ub3QgaW1wb3NlIHRoYXQgY2hvaWNlLgorCisgICAgVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkCisgICAgdG8gYmUgYSBjb25zZXF1ZW5jZSBvZiB0aGUgcmVzdCBvZiB0aGlzIExpY2Vuc2UuCisKKyAgICA4LiBJZiB0aGUgZGlzdHJpYnV0aW9uIGFuZC9vciB1c2Ugb2YgdGhlIFByb2dyYW0gaXMgcmVzdHJpY3RlZCBpbgorICAgIGNlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsCisgICAgdGhlIG9yaWdpbmFsIGNvcHlyaWdodCBob2xkZXIgd2hvIHBsYWNlcyB0aGUgUHJvZ3JhbSB1bmRlciB0aGlzCisgICAgTGljZW5zZSBtYXkgYWRkIGFuIGV4cGxpY2l0IGdlb2dyYXBoaWNhbCBkaXN0cmlidXRpb24gbGltaXRhdGlvbgorICAgIGV4Y2x1ZGluZyB0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5CisgICAgaW4gb3IgYW1vbmcgY291bnRyaWVzIG5vdCB0aHVzIGV4Y2x1ZGVkLiBJbiBzdWNoIGNhc2UsIHRoaXMKKyAgICBMaWNlbnNlIGluY29ycG9yYXRlcyB0aGUgbGltaXRhdGlvbiBhcyBpZiB3cml0dGVuIGluIHRoZSBib2R5IG9mCisgICAgdGhpcyBMaWNlbnNlLgorCisgICAgOS4gVGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcKKyAgICB2ZXJzaW9ucyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gU3VjaCBuZXcKKyAgICB2ZXJzaW9ucyB3aWxsIGJlIHNpbWlsYXIgaW4gc3Bpcml0IHRvIHRoZSBwcmVzZW50IHZlcnNpb24sIGJ1dCBtYXkKKyAgICBkaWZmZXIgaW4gZGV0YWlsIHRvIGFkZHJlc3MgbmV3IHByb2JsZW1zIG9yIGNvbmNlcm5zLgorCisgICAgRWFjaCB2ZXJzaW9uIGlzIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIElmIHRoZQorICAgIFByb2dyYW0gc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMKKyAgICB0byBpdCBhbmQgImFueSBsYXRlciB2ZXJzaW9uIiwgeW91IGhhdmUgdGhlIG9wdGlvbiBvZiBmb2xsb3dpbmcKKyAgICB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZWl0aGVyIG9mIHRoYXQgdmVyc2lvbiBvciBvZiBhbnkgbGF0ZXIKKyAgICB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBJZiB0aGUgUHJvZ3JhbQorICAgIGRvZXMgbm90IHNwZWNpZnkgYSB2ZXJzaW9uIG51bWJlciBvZiB0aGlzIExpY2Vuc2UsIHlvdSBtYXkgY2hvb3NlCisgICAgYW55IHZlcnNpb24gZXZlciBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKworICAgIDEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyCisgICAgZnJlZSBwcm9ncmFtcyB3aG9zZSBkaXN0cmlidXRpb24gY29uZGl0aW9ucyBhcmUgZGlmZmVyZW50LCB3cml0ZQorICAgIHRvIHRoZSBhdXRob3IgdG8gYXNrIGZvciBwZXJtaXNzaW9uLiBGb3Igc29mdHdhcmUgd2hpY2ggaXMKKyAgICBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZQorICAgIFNvZnR3YXJlIEZvdW5kYXRpb247IHdlIHNvbWV0aW1lcyBtYWtlIGV4Y2VwdGlvbnMgZm9yIHRoaXMuIE91cgorICAgIGRlY2lzaW9uIHdpbGwgYmUgZ3VpZGVkIGJ5IHRoZSB0d28gZ29hbHMgb2YgcHJlc2VydmluZyB0aGUgZnJlZQorICAgIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kIG9mIHByb21vdGluZworICAgIHRoZSBzaGFyaW5nIGFuZCByZXVzZSBvZiBzb2Z0d2FyZSBnZW5lcmFsbHkuCisgICAgCisgICAgTk8gV0FSUkFOVFkKKworICAgIDExLiBCRUNBVVNFIFRIRSBQUk9HUkFNIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRSBJUyBOTworICAgIFdBUlJBTlRZIEZPUiBUSEUgUFJPR1JBTSwgVE8gVEhFIEVYVEVOVCBQRVJNSVRURUQgQlkgQVBQTElDQUJMRQorICAgIExBVy4gRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUworICAgIEFORC9PUiBPVEhFUiBQQVJUSUVTIFBST1ZJREUgVEhFIFBST0dSQU0gIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZCisgICAgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBCVVQgTk9UCisgICAgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAgICBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQKKyAgICBQRVJGT1JNQU5DRSBPRiBUSEUgUFJPR1JBTSBJUyBXSVRIIFlPVS4gU0hPVUxEIFRIRSBQUk9HUkFNIFBST1ZFCisgICAgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIKKyAgICBPUiBDT1JSRUNUSU9OLgorCisgICAgMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4KKyAgICBXUklUSU5HIFdJTEwgQU5ZIENPUFlSSUdIVCBIT0xERVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZCisgICAgTU9ESUZZIEFORC9PUiBSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRQorICAgIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwKKyAgICBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SCisgICAgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBMT1NTIE9GCisgICAgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UKKyAgICBPUiBUSElSRCBQQVJUSUVTIE9SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggQU5ZCisgICAgT1RIRVIgUFJPR1JBTVMpLCBFVkVOIElGIFNVQ0ggSE9MREVSIE9SIE9USEVSIFBBUlRZIEhBUyBCRUVOCisgICAgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCisgICAgRU5EIE9GIFRFUk1TIEFORCBDT05ESVRJT05TCisKKworU2VjdGlvbiA0IC0gM3JkIFBhcnR5IENvbXBvbmVudHMKKworKDEpIFRoZSBTb2Z0d2FyZSBQcm9ncmFtIGluY2x1ZGVzIHNvZnR3YXJlIGFuZCBkb2N1bWVudGF0aW9uIGNvbXBvbmVudHMKK2RldmVsb3BlZCBpbiBwYXJ0IGJ5IFNpbHZlciBFZ2cgVGVjaG5vbG9neSwgSW5jLigiU0VUIikgcHJpb3IgdG8KKzIwMDEuICBBbGwgU0VUIGNvbXBvbmVudHMgd2VyZSByZWxlYXNlZCB1bmRlciB0aGUgZm9sbG93aW5nIGxpY2Vuc2UuCisKKyAgICBDb3B5cmlnaHQgKGMpIDIwMDEgU2lsdmVyIEVnZyBUZWNobm9sb2d5CisgICAgCisgICAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24KKyAgICBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbgorICAgIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgCisgICAgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cyB0byB1c2UsIAorICAgIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1Yi1saWNlbnNlLCBhbmQvb3IgCisgICAgc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAgICBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyAKKyAgICBjb25kaXRpb25zOgorICAgIAorICAgIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIHNoYWxsIGJlCisgICAgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgICAgCisgICAgVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIAorICAgIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyAKKyAgICBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCAKKyAgICBOT04tSU5GUklOR0VNRU5ULiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgCisgICAgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUiBMSUFCSUxJVFksIAorICAgIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyAKKyAgICBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgICAgT1RIRVIgREVBTElOR1MgSU4gVEhFIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvdGFyc25hcCBiL2xpY2Vuc2VzL3RhcnNuYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmM4ZTM4ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL3RhcnNuYXAKQEAgLTAsMCArMSwyMSBAQAorVW5sZXNzIHNwZWNpZmllZCBvdGhlcndpc2UgaW4gaW5kaXZpZHVhbCBmaWxlcywgdGhlIGNvbnRlbnRzIG9mIHRoaXMKK3BhY2thZ2UgaXMgY292ZXJlZCBieSB0aGUgZm9sbG93aW5nIGNvcHlyaWdodCwgbGljZW5zZSwgYW5kIGRpc2NsYWltZXI6CisKK0NvcHlyaWdodCAyMDA2LCAyMDA3LCAyMDA4LCAyMDA5IENvbGluIFBlcmNpdmFsCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRob3V0IG1vZGlmaWNhdGlvbiwKK2lzIHBlcm1pdHRlZCBmb3IgdGhlIHNvbGUgcHVycG9zZSBvZiB1c2luZyB0aGUgInRhcnNuYXAiIGJhY2t1cCBzZXJ2aWNlCitwcm92aWRlZCBieSBDb2xpbiBQZXJjaXZhbC4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS9saWNlbnNlcy90Y2x0ayBiL2xpY2Vuc2VzL3RjbHRrCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiM2FiZDMKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy90Y2x0awpAQCAtMCwwICsxLDM5IEBACis8Y29weXJpZ2h0IG5vdGljZT4KKworVGhlIGZvbGxvd2luZyB0ZXJtcyBhcHBseSB0byBhbGwgZmlsZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzb2Z0d2FyZQordW5sZXNzIGV4cGxpY2l0bHkgZGlzY2xhaW1lZCBpbiBpbmRpdmlkdWFsIGZpbGVzLgorCitUaGUgYXV0aG9ycyBoZXJlYnkgZ3JhbnQgcGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgZGlzdHJpYnV0ZSwKK2FuZCBsaWNlbnNlIHRoaXMgc29mdHdhcmUgYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSwgcHJvdmlkZWQKK3RoYXQgZXhpc3RpbmcgY29weXJpZ2h0IG5vdGljZXMgYXJlIHJldGFpbmVkIGluIGFsbCBjb3BpZXMgYW5kIHRoYXQgdGhpcworbm90aWNlIGlzIGluY2x1ZGVkIHZlcmJhdGltIGluIGFueSBkaXN0cmlidXRpb25zLiBObyB3cml0dGVuIGFncmVlbWVudCwKK2xpY2Vuc2UsIG9yIHJveWFsdHkgZmVlIGlzIHJlcXVpcmVkIGZvciBhbnkgb2YgdGhlIGF1dGhvcml6ZWQgdXNlcy4KK01vZGlmaWNhdGlvbnMgdG8gdGhpcyBzb2Z0d2FyZSBtYXkgYmUgY29weXJpZ2h0ZWQgYnkgdGhlaXIgYXV0aG9ycworYW5kIG5lZWQgbm90IGZvbGxvdyB0aGUgbGljZW5zaW5nIHRlcm1zIGRlc2NyaWJlZCBoZXJlLCBwcm92aWRlZCB0aGF0Cit0aGUgbmV3IHRlcm1zIGFyZSBjbGVhcmx5IGluZGljYXRlZCBvbiB0aGUgZmlyc3QgcGFnZSBvZiBlYWNoIGZpbGUgd2hlcmUKK3RoZXkgYXBwbHkuCisKK0lOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1JTIE9SIERJU1RSSUJVVE9SUyBCRSBMSUFCTEUgVE8gQU5ZIFBBUlRZCitGT1IgRElSRUNULCBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCitBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIElUUyBET0NVTUVOVEFUSU9OLCBPUiBBTlkKK0RFUklWQVRJVkVTIFRIRVJFT0YsIEVWRU4gSUYgVEhFIEFVVEhPUlMgSEFWRSBCRUVOIEFEVklTRUQgT0YgVEhFCitQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKworVEhFIEFVVEhPUlMgQU5EIERJU1RSSUJVVE9SUyBTUEVDSUZJQ0FMTFkgRElTQ0xBSU0gQU5ZIFdBUlJBTlRJRVMsCitJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCitGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwgQU5EIE5PTi1JTkZSSU5HRU1FTlQuICBUSElTIFNPRlRXQVJFCitJUyBQUk9WSURFRCBPTiBBTiAiQVMgSVMiIEJBU0lTLCBBTkQgVEhFIEFVVEhPUlMgQU5EIERJU1RSSUJVVE9SUyBIQVZFCitOTyBPQkxJR0FUSU9OIFRPIFBST1ZJREUgTUFJTlRFTkFOQ0UsIFNVUFBPUlQsIFVQREFURVMsIEVOSEFOQ0VNRU5UUywgT1IKK01PRElGSUNBVElPTlMuCisKK0dPVkVSTk1FTlQgVVNFOiBJZiB5b3UgYXJlIGFjcXVpcmluZyB0aGlzIHNvZnR3YXJlIG9uIGJlaGFsZiBvZiB0aGUKK1UuUy4gZ292ZXJubWVudCwgdGhlIEdvdmVybm1lbnQgc2hhbGwgaGF2ZSBvbmx5ICJSZXN0cmljdGVkIFJpZ2h0cyIKK2luIHRoZSBzb2Z0d2FyZSBhbmQgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGFzIGRlZmluZWQgaW4gdGhlIEZlZGVyYWwKK0FjcXVpc2l0aW9uIFJlZ3VsYXRpb25zIChGQVJzKSBpbiBDbGF1c2UgNTIuMjI3LjE5IChjKSAoMikuICBJZiB5b3UKK2FyZSBhY3F1aXJpbmcgdGhlIHNvZnR3YXJlIG9uIGJlaGFsZiBvZiB0aGUgRGVwYXJ0bWVudCBvZiBEZWZlbnNlLCB0aGUKK3NvZnR3YXJlIHNoYWxsIGJlIGNsYXNzaWZpZWQgYXMgIkNvbW1lcmNpYWwgQ29tcHV0ZXIgU29mdHdhcmUiIGFuZCB0aGUKK0dvdmVybm1lbnQgc2hhbGwgaGF2ZSBvbmx5ICJSZXN0cmljdGVkIFJpZ2h0cyIgYXMgZGVmaW5lZCBpbiBDbGF1c2UKKzI1Mi4yMjctNzAxMyAoYykgKDEpIG9mIERGQVJzLiAgTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsIHRoZQorYXV0aG9ycyBncmFudCB0aGUgVS5TLiBHb3Zlcm5tZW50IGFuZCBvdGhlcnMgYWN0aW5nIGluIGl0cyBiZWhhbGYKK3Blcm1pc3Npb24gdG8gdXNlIGFuZCBkaXN0cmlidXRlIHRoZSBzb2Z0d2FyZSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlCit0ZXJtcyBzcGVjaWZpZWQgaW4gdGhpcyBsaWNlbnNlLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvdGNwX3dyYXBwZXJzX2xpY2Vuc2UgYi9saWNlbnNlcy90Y3Bfd3JhcHBlcnNfbGljZW5zZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWFiNmMxCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvdGNwX3dyYXBwZXJzX2xpY2Vuc2UKQEAgLTAsMCArMSwzMSBAQAorLS0tLS1CRUdJTiBQR1AgU0lHTkVEIE1FU1NBR0UtLS0tLQorCitBcyBvZiBKdW5lIDEsIDIwMDEsIHRoZSB0ZXh0IGJlbG93IGNvbnN0aXR1dGVzIHRoZSBUQ1AgV3JhcHBlcnMgbGljZW5zZS4KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorKiBDb3B5cmlnaHQgMTk5NSBieSBXaWV0c2UgVmVuZW1hLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gIFNvbWUgaW5kaXZpZHVhbAorKiBmaWxlcyBtYXkgYmUgY292ZXJlZCBieSBvdGhlciBjb3B5cmlnaHRzLgorKgorKiBUaGlzIG1hdGVyaWFsIHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gYW5kIGNvbXBpbGVkIGJ5IFdpZXRzZSBWZW5lbWEgYXQKKyogRWluZGhvdmVuIFVuaXZlcnNpdHkgb2YgVGVjaG5vbG9neSwgVGhlIE5ldGhlcmxhbmRzLCBpbiAxOTkwLCAxOTkxLAorKiAxOTkyLCAxOTkzLCAxOTk0IGFuZCAxOTk1LgorKgorKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhpcyBlbnRpcmUgY29weXJpZ2h0IG5vdGljZQorKiBpcyBkdXBsaWNhdGVkIGluIGFsbCBzdWNoIGNvcGllcy4KKyoKKyogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAiYXMgaXMiIGFuZCB3aXRob3V0IGFueSBleHByZXNzZWQgb3IgaW1wbGllZAorKiB3YXJyYW50aWVzLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgdGhlIGltcGxpZWQgd2FycmFudGllcyBvZgorKiBtZXJjaGFudGliaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGFueSBwYXJ0aWN1bGFyIHB1cnBvc2UuCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKy0tLS0tQkVHSU4gUEdQIFNJR05BVFVSRS0tLS0tCitWZXJzaW9uOiAyLjYuM2kKK0NoYXJzZXQ6IG5vY29udgorCitpUUNWQXdVQk94bzNYOXlBOHFiVk1ueTVBUUhUOHdQOUZaT3RXeEVNNFNNajRTajlRZXpNRVJ6MzFuNWZkMHBDCitqVURueXptb3NPdWRNL2lGbHY2WWZ5UjgyMGFOdk5OSStBZHRnV1lSUFZIb2NWTk9yWmNtdTdJQURPOGhsVS8vCit2OEJlQkUwYmRqZVZtT1FZUlFmWGd0M0oycTBiOHg4UTVhL0xDTFZMaDhrNkRGR2c4QWZFYkxEUVdoaTFKaVhDCiswSnNhQjhjclIzTT0KKz0wQU1XCistLS0tLUVORCBQR1AgU0lHTkFUVVJFLS0tLS0KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL3RlYW1zcGVhazMgYi9saWNlbnNlcy90ZWFtc3BlYWszCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NDA1ODgKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy90ZWFtc3BlYWszCkBAIC0wLDAgKzEsNDM4IEBACitUZWFtU3BlYWsgMy54IEVuZCBVc2VyIExpY2Vuc2UgQWdyZWVtZW50CitSZXZpc2VkOiBEZWNlbWJlciAxc3QsIDIwMDkKKworVEhJUyBJUyBBIExFR0FMIEFHUkVFTUVOVCBiZXR3ZWVuICJ5b3UiLCB0aGUgaW5kaXZpZHVhbCwgY29tcGFueSwgb3IKK29yZ2FuaXphdGlvbiB1dGlsaXppbmcgVGVhbVNwZWFrIGJyYW5kIHNvZnR3YXJlLCBUZWFtU3BlYWsgU3lzdGVtcyBHbWJILAorYSBLcnVlbiwgR2VybWFueSBiYXNlZCBjb21wYW55LCBhbmQgVHJpdG9uIENJICYgQXNzb2NpYXRlcywgSW5jLiwgYQorQ2FsaWZvcm5pYSwgVVNBIGJhc2VkIENvcnBvcmF0aW9uLgorCitVU0UgT0YgVEVBTVNQRUFLIFNPRlRXQVJFIElORElDQVRFUyBZT1VSIEFDQ0VQVEFOQ0UgT0YgVEhFU0UgVEVSTVMuCisKK0FzIHVzZWQgaW4gdGhpcyBBZ3JlZW1lbnQsIHRoZSB0ZXJtICJUZWFtU3BlYWsgc29mdHdhcmUiIG1lYW5zIFRlYW1TcGVhawordmVyc2lvbiAzLnggdm9pY2UgY29tbXVuaWNhdGlvbiBzb2Z0d2FyZSwgYm90aCBjbGllbnQgYW5kIHNlcnZlciwgYXMKK21hZGUgYXZhaWxhYmxlIGZyb20gd3d3LlRlYW1TcGVhay5jb20gdG9nZXRoZXIgd2l0aCBhbnkgYW5kIGFsbAorZW5oYW5jZW1lbnRzLCB1cGdyYWRlcywgb3IgdXBkYXRlcyB0aGF0IG1heSBiZSBwcm92aWRlZCB0byB5b3UgYnkKK1RlYW1TcGVhayBTeXN0ZW1zIEdtYkguCisKKzEuIEFQUExJQ0FCTEUgTEFXCisKK0FsbCB0ZXJtcyBpbiB0aGlzIEFncmVlbWVudCByZWxhdGluZyB0byBvd25lcnNoaXAsIGRpc3RyaWJ1dGlvbiwKK3Byb2hpYml0ZWQgY29uZHVjdCwgb3IgdXBncmFkZXMgdG8gVGVhbVNwZWFrIHNvZnR3YXJlLCBzcGVjaWZpY2FsbHkKK1NlY3Rpb25zIDIsIDYsIDExLCBhbmQgMTIsIHdpbGwgYmUgaGFuZGxlZCBieSBUZWFtU3BlYWsgU3lzdGVtcyBHbWJIIGluCithY2NvcmRhbmNlIHdpdGggdGhlIGxhd3Mgb2YgS3J1ZW4sIEdlcm1hbnkuCisKK1RyaXRvbiBDSSAmIEFzc29jaWF0ZXMsIEluYy4sIGlzIFRlYW1TcGVhayBTeXN0ZW1zIEdtYkgncyBvZmZpY2lhbAorc2FsZXMsIGxpY2Vuc2luZywgYW5kIGJpbGxpbmcgcGFydG5lciBmb3IgVGVhbVNwZWFrIHNvZnR3YXJlLiBBcyBzdWNoLAorYWxsIHRlcm1zIGluIHRoaXMgQWdyZWVtZW50IHJlbGF0aW5nIHRvIFRlYW1TcGVhayBzYWxlcywgYmlsbGluZywKK2NvbXBsaWFuY2Ugd2l0aCBsaWNlbnNpbmcsIGluY2x1ZGluZyByZWxhdGVkIGlzc3VlcyBzdWNoIGFzIHBpcmFjeSBvcgorYmFubmluZyBvZiBzZXJ2ZXJzLCB3aWxsIGJlIGhhbmRsZWQgYnkgVHJpdG9uIENJICYgQXNzb2NpYXRlcywgSW5jLiBpbgorYWNjb3JkYW5jZSB3aXRoIHRoZSBsYXdzIHdpdGhpbiB0aGUgU3RhdGUgb2YgQ2FsaWZvcm5pYSwgVVNBLgorCisyLiBPV05FUlNISVAKKworT3duZXJzaGlwIG9mIFRlYW1TcGVhayBzb2Z0d2FyZSBhbmQgYW55IGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uIHNoYWxsCithdCBhbGwgdGltZXMgcmVtYWluIHdpdGggVGVhbVNwZWFrIFN5c3RlbXMgR21iSC4gVGhpcyBBZ3JlZW1lbnQgZG9lcyBub3QKK2NvbnN0aXR1dGUgdGhlIHNhbGUgb2YgVGVhbVNwZWFrIHNvZnR3YXJlIG9yIGFueSBhY2NvbXBhbnlpbmcKK2RvY3VtZW50YXRpb24sIG9yIGFueSBwb3J0aW9uIHRoZXJlb2YuIFdpdGhvdXQgbGltaXRpbmcgdGhlIGdlbmVyYWxpdHkKK29mIHRoZSBmb3JlZ29pbmcsIHlvdSBkbyBub3QgcmVjZWl2ZSBhbnkgcmlnaHRzIHRvIGFueSBwYXRlbnRzLAorY29weXJpZ2h0cywgdHJhZGUgc2VjcmV0cywgdHJhZGVtYXJrcyBvciBvdGhlciBpbnRlbGxlY3R1YWwgcHJvcGVydHkKK3JpZ2h0cyByZWxhdGluZyB0byBUZWFtU3BlYWsgc29mdHdhcmUgb3IgYW55IGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uLgorQWxsIHJpZ2h0cyBub3QgZXhwcmVzc2x5IGdyYW50ZWQgdG8geW91IHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZQorcmVzZXJ2ZWQgYnkgVGVhbVNwZWFrIFN5c3RlbXMgR21iSC4KKworMy4gREVGSU5JVElPTlMKKworMy4xIFRlYW1TcGVhayBDbGllbnQgYW5kIFNlcnZlcgorVGVhbVNwZWFrIHNvZnR3YXJlIGNvbnNpc3RzIG9mIGJvdGggYSBUZWFtU3BlYWsgQ2xpZW50IGFuZCBUZWFtU3BlYWsKK1NlcnZlciBhcHBsaWNhdGlvbi4gVGhlIFRlYW1TcGVhayBTZXJ2ZXIgaXMgdGhlIGFwcGxpY2F0aW9uIHdoaWNoIGFjdHMKK2FzIGEgaG9zdCBhbmQgYWxsb3dzIHR3byBvciBtb3JlIGNsaWVudCBjb25uZWN0aW9ucyB0byBjb21tdW5pY2F0ZSB3aXRoCitvbmUgYW5vdGhlci4gVGhlIFRlYW1TcGVhayBDbGllbnQgaXMgdGhlIGFwcGxpY2F0aW9uIHdoaWNoIGNvbm5lY3RzIHRvCit0aGUgVGVhbVNwZWFrIFNlcnZlciBhbmQgY29udGFpbnMgZW5kLXVzZXIgZnVuY3Rpb25hbGl0eSB3aGljaCBpbmNsdWRlcworaW5pdGlhdGluZyBhIGRhdGEgc3RyZWFtIGZvciB2b2ljZSBjb21tdW5pY2F0aW9uIHdpdGggYW5vdGhlciBjbGllbnQKK2Nvbm5lY3Rpb24uIFNhbXBsZSBzY3JlZW5zaG90cyBvZiBib3RoIHRoZSBUZWFtU3BlYWsgQ2xpZW50IGFuZCBTZXJ2ZXIKK2FwcGxpY2F0aW9ucyBjYW4gYmUgZm91bmQgYXQgaHR0cDovL3d3dy50ZWFtc3BlYWsuY29tLz9wYWdlPXNjcmVlbnNob3RzLgorCiszLjIgVGVhbVNwZWFrIFNvZnR3YXJlIERldmVsb3BtZW50IEtpdCAoVGVhbVNwZWFrIFNESykKK1RlYW1TcGVhayBzb2Z0d2FyZSBtYXkgYWxzbyBjb25zaXN0IG9mIGEgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IG9yCitTREsuIFRoZSBUZWFtU3BlYWsgU0RLIGlzIGEgc2V0IG9mIGRldmVsb3BtZW50IHRvb2xzIGFuZCBkb2N1bWVudGF0aW9uCit3aGljaCBhbGxvd3Mgc29mdHdhcmUgZW5naW5lZXJzIHRvIGNyZWF0ZSBjdXN0b21pemVkIG9yIGludGVncmF0ZWQKK2FwcGxpY2F0aW9ucyB0eXBpY2FsbHkgYXMgcGFydCBvZiBhbiBleGlzdGluZyBwcm9kdWN0IG9yIHNlcnZpY2UuIFRoZQorVGVhbVNwZWFrIFNESyBpbmNsdWRlcyBBUEkgaW5mb3JtYXRpb24sIHNhbXBsZSBjb2RlLCB0b29scywKK2RvY3VtZW50YXRpb24sIGFuZCBvdGhlciByZWxhdGVkIGl0ZW1zLgorCiszLjMgVGVhbVNwZWFrIFZpcnR1YWwgU2VydmVyCitBIFRlYW1TcGVhayBWaXJ0dWFsIFNlcnZlciBpcyBhbnkgaW5zdGFuY2Ugd2l0aGluIHRoZSBUZWFtU3BlYWsgU2VydmVyCithcHBsaWNhdGlvbiAoYmluYXJ5IGV4ZWN1dGFibGUpIHdoaWNoIGFsbG93cyB0aGUgVGVhbVNwZWFrIENsaWVudAorYXBwbGljYXRpb24gdG8gY29ubmVjdC4gQSBzaW5nbGUgZXhlY3V0ZWQgVGVhbVNwZWFrIFNlcnZlciBhcHBsaWNhdGlvbgorKGJpbmFyeSBleGVjdXRhYmxlKSB3aWxsIGJ5IGRlZmF1bHQgY3JlYXRlIGEgc2luZ2xlIFZpcnR1YWwgU2VydmVyLgorSG93ZXZlciwgdGhlIFRlYW1TcGVhayBTZXJ2ZXIgYXBwbGljYXRpb24gaXMgY2FwYWJsZSBvZiBjcmVhdGluZyBhbmQKK2hvc3RpbmcgbXVsdGlwbGUgVmlydHVhbCBTZXJ2ZXJzIHdpdGhpbiBhbnkgc2luZ2xlIHJ1bm5pbmcgYmluYXJ5CitleGVjdXRhYmxlLCB3aGVyZSBlYWNoIHNlcnZlciBjb250YWlucyBpdHMgb3duIGNvbmZpZ3VyYXRpb24gcHJvcGVydGllcword2hpY2ggdG8gdGhlIGVuZC11c2VyIG1heSBhcHBlYXIgdG8gYWN0IGFzIGEgc3RhbmQtYWxvbmUgc2VydmVyLgorCiszLjQgVGVhbVNwZWFrIFNlcnZlciBTbG90CitBIFRlYW1TcGVhayBTZXJ2ZXIgU2xvdCAob3IganVzdCAic2xvdCIpIGlzIHV0aWxpemVkIHdoZW4gYSBzaW5nbGUKK1RlYW1TcGVhayBDbGllbnQgY29ubmVjdGlvbiBpcyBlc3RhYmxpc2hlZCB0byBhbnkgZ2l2ZW4gVGVhbVNwZWFrCitWaXJ0dWFsIFNlcnZlci4gVGhlIG1heGltdW0gInNsb3RzIiBvciAic2xvdCBjb3VudCIgY2FuIGJlIGluZGl2aWR1YWxseQorY29uZmlndXJlZCBmb3IgZWFjaCBWaXJ0dWFsIFNlcnZlciBhbmQgZGVmaW5lcyB0aGUgbWF4aW11bSBudW1iZXIgb2YKK3VzZXJzIHRoYXQgY2FuIHNpbXVsdGFuZW91c2x5IGNvbm5lY3QgdG8gdGhhdCBWaXJ0dWFsIFNlcnZlciBhdCBhbnkKK2dpdmVuIHRpbWUuIEZvciBleGFtcGxlLCBhIFZpcnR1YWwgU2VydmVyIGNvbmZpZ3VyZWQgZm9yIDEwIHNsb3RzIHdpbGwKK2FsbG93IHVwIHRvIDEwIHNpbXVsdGFuZW91cyB1c2VyIGNvbm5lY3Rpb25zIGJlZm9yZSBpdCBnZW5lcmF0ZXMgYQorInNlcnZlciBmdWxsIiBlcnJvciBtZXNzYWdlIHRvIHRoZSAxMXRoIHVzZXIgYXR0ZW1wdGluZyB0byBjb25uZWN0IHRvCit0aGUgc2FtZSBWaXJ0dWFsIFNlcnZlci4KKworMy41IENvbW1lcmNpYWwgRW50aXR5CitBIGNvbW1lcmNpYWwgZW50aXR5IGlzIGFuIGluZGl2aWR1YWwsIGNvbXBhbnksIG9yIG9yZ2FuaXphdGlvbiB3aGljaAorZGVtb25zdHJhdGVzICh0eXBpY2FsbHkgdmlhIGJ1dCBub3QgbGltaXRlZCB0byBhIHdlYnNpdGUpIHRoYXQgaXQgaXMgaW4KK2J1c2luZXNzIHRvIHR1cm4gYSBwcm9maXQgb2YgYW55IGtpbmQ7IGJlIGl0IG1vbmV0YXJ5LCBmcm9tIGRpcmVjdCBzYWxlcworb3IgcmVudGFsIGZlZXMsIGFkdmVydGlzaW5nIHByb2ZpdCwgb3IgdGhyb3VnaCB0aGUgcHJpdmlsZWdlZCB1c2Ugb2YKK2ludGFuZ2libGUgZ29vZHMgYW5kIHNlcnZpY2VzLgorCitFeGFtcGxlIG9mIGEgQ29tbWVyY2lhbCBFbnRpdHk6CitBIGhvc3RpbmcgY29tcGFueSBvciBvcmdhbml6YXRpb24gd2hpY2ggY2hhcmdlcyBhIG1vbnRobHkgZmVlIGZvciB0aGUKK3VzZSBvZiBhIFRlYW1TcGVhayBzZXJ2ZXIgT1IgYSBob3N0aW5nIGNvbXBhbnkgb3Igb3JnYW5pemF0aW9uIHdoaWNoCitkb2VzIE5PVCBjaGFyZ2UgYSBtb250aGx5IGZlZSBmb3IgdGhlIHVzZSBvZiBhIFRlYW1TcGVhayBzZXJ2ZXIgYnV0CitlYXJucyBzdWJzdGFudGlhbCBwcm9maXQgZnJvbSBhZHZlcnRpc2luZywgb3IgZnJvbSBvdGhlciBwcm9kdWN0cyBvcgorc2VydmljZXMgb2YgYW55IGtpbmQuCisKK0V4YW1wbGUgb2YgYSBDb21tZXJjaWFsIEVudGl0eSBwcm9maXRpbmcgZnJvbSBhZHZlcnRpc2luZzoKK0FuIG9yZ2FuaXphdGlvbiBhZHZlcnRpc2luZyBmb3IgcHJvZHVjdHMgb3Igc2VydmljZXMgb2ZmZXJlZCBieSBhCitob3N0aW5nIGNvbXBhbnkgaW4gZXhjaGFuZ2UgZm9yIHRoZSB1c2Ugb2YgYSBUZWFtU3BlYWsgc2VydmVyIG1lYW5zIHRoZQoraG9zdGluZyBjb21wYW55IHdpbGwgYmUgY29uc2lkZXJlZCB0byBiZSBhIGNvbW1lcmNpYWwgZW50aXR5LCBldmVuIGlmCit0aGV5IGNob29zZSBub3QgdG8gY2hhcmdlIGFueXRoaW5nIGF0IGFsbCBmb3IgdGhlIHVzZSBvZiBhbnkgb2YgdGhlaXIKK1RlYW1TcGVhayBzZXJ2ZXJzLiBUaGlzIHNpdHVhdGlvbiBpcyBjb21tb25seSByZWZlcnJlZCB0byBhcyBhIGNsYW4gb3IKK2d1aWxkICJzcG9uc29yc2hpcCIuCisKK0V4YW1wbGUgb2YgYSBDb21tZXJjaWFsIEVudGl0eSBwcm9maXRpbmcgZnJvbSBpbnRhbmdpYmxlIGdvb2RzOgorQSAicGF5bWVudCIgaXMgbWFkZSB0byBhbiBpbmRpdmlkdWFsIG9yIGhvc3RpbmcgY29tcGFueSB1c2luZyB2aXJ0dWFsCitjdXJyZW5jeSAoZ29sZCwgZXRjLikgd2l0aGluIGEgcG9wdWxhciBtYXNzaXZlbHkgbXVsdGlwbGF5ZXIgb25saW5lIGdhbWUKKyhNTU9HKSBpbiBleGNoYW5nZSBmb3IgdGhlIHVzZSBvZiBhIFRlYW1TcGVhayBzZXJ2ZXIgbWVhbnMgdGhlCitpbmRpdmlkdWFsIG9yIGhvc3RpbmcgY29tcGFueSB3aWxsIGJlIGNvbnNpZGVyZWQgdG8gYmUgYSBjb21tZXJjaWFsIGVudGl0eS4KKworMy42IE5vbi1Qcm9maXQgRW50aXR5CitBIG5vbi1wcm9maXQgZW50aXR5IGlzIGFuIGluZGl2aWR1YWwgb3Igb3JnYW5pemF0aW9uIHdoaWNoIGRvZXMgTk9UCit1dGlsaXplIFRlYW1TcGVhayBzb2Z0d2FyZSBmb3IgcHJvZml0IG9mIGFueSBraW5kOyBiZSBpdCBtb25ldGFyeSwgZnJvbQorZGlyZWN0IHNhbGVzIG9yIHJlbnRhbCBmZWVzLCBhZHZlcnRpc2luZyBwcm9maXQsIG9yIGludGFuZ2libGUgZ29vZHMgYW5kCitzZXJ2aWNlcy4KKworRXhhbXBsZSAxOiBBIGNsYW4gb3IgZ3VpbGQgaG9zdGluZyBhIFRlYW1TcGVhayBzZXJ2ZXIgZm9yIHRoZWlyIG93bgorcHJpdmF0ZSB1c2Ugd2hpbGUgY29tcGx5aW5nIHdpdGggYWxsIHRlcm1zIGFuZCBjb25kaXRpb25zIHNldCBmb3J0aCBpbgorU2VjdGlvbiA1LjEgb2YgdGhpcyBBZ3JlZW1lbnQuCisKK0V4YW1wbGUgMjogQW4gaW5kaXZpZHVhbCBob3N0aW5nIGEgVGVhbVNwZWFrIHNlcnZlciBmb3IgcHJpdmF0ZSB1c2UgdG8KK2NvbW11bmljYXRlIHdpdGggZnJpZW5kcyBvciBmYW1pbHkgb3ZlciB0aGUgSW50ZXJuZXQgd2hpbGUgY29tcGx5aW5nCit3aXRoIGFsbCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBzZXQgZm9ydGggaW4gU2VjdGlvbiA1LjEgb2YgdGhpcyBBZ3JlZW1lbnQuCisKKzQuIExJQ0VOU0UgRkVFUworCitCYXNlZCBvbiB0aGUgZGVmaW5pdGlvbnMgYWJvdmUsIGxpY2Vuc2UgZmVlcyBtYXkgYmUgYXBwbGljYWJsZSB0bworZW50aXRpZXMgdXRpbGl6aW5nIHRoZSBUZWFtU3BlYWsgU2VydmVyIGFwcGxpY2F0aW9uLiBMaWNlbnNlIGZlZXMgYXJlCitOT1QgYXBwbGljYWJsZSB0byB0aGUgVGVhbVNwZWFrIENsaWVudCBhcHBsaWNhdGlvbi4gQWxsIENvbW1lcmNpYWwKK0VudGl0aWVzIHVzaW5nIHRoZSBUZWFtU3BlYWsgU2VydmVyIGFwcGxpY2F0aW9uIGZvciBhbnkgcmVhc29uIG11c3QgcGF5CithIGxpY2Vuc2UgZmVlLCByZWdhcmRsZXNzIG9mIHdoZXRoZXIgb3Igbm90IHRoZXkgY2hvb3NlIHRvIGNoYXJnZSBmZWVzCitmb3IgdGhlIHVzZSBvZiB0aGVpciBzZXJ2ZXJzLiBOb24tUHJvZml0IEVudGl0aWVzIHVzaW5nIHRoZSBUZWFtU3BlYWsKK1NlcnZlciBhcHBsaWNhdGlvbiBkbyBub3QgbmVlZCB0byBwYXkgYSBsaWNlbnNlIGZlZTsgaG93ZXZlciwgdGhlc2UKK2VudGl0aWVzIG11c3QgY29tcGx5IHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHNldCBmb3J0aCBpbiB0aGUKK0xpY2Vuc2UgVHlwZXMgYXBwbGljYWJsZSB0byBOb24tUHJvZml0IEVudGl0aWVzIGJlbG93LiBJZiB5b3UgYXJlCit1bmNlcnRhaW4gYXMgdG8gd2hldGhlciB5b3UgcXVhbGlmeSBhcyBhIE5vbi1Qcm9maXQgRW50aXR5IHlvdSBtdXN0Citjb250YWN0IFRyaXRvbiBDSSAmIEFzc29jaWF0ZXMsIEluYy4gdmlhIGUtbWFpbCBhdCBzYWxlc0B0cml0b25jaWEuY29tCitvciB2aWEgaHR0cDovL3N1cHBvcnQudHJpdG9uY2lhLmNvbS4KKworNS4gTElDRU5TRSBUWVBFUworCis1LjEuIE5vbi1Qcm9maXQgTGljZW5zZTogVW5yZWdpc3RlcmVkCitUaGlzIGxpY2Vuc2UgdHlwZSBpcyBmb3IgYW4gaW5kaXZpZHVhbCBvciBvcmdhbml6YXRpb24gd2hpY2ggaXMKK25vbi1wcm9maXQgaW4gbmF0dXJlLCBhbmQgZG9lcyBub3QgcmVxdWlyZSByZWdpc3RyYXRpb24gb24gb3VyIHdlYnNpdGUKK25vciBhIGxpY2Vuc2Uga2V5LiBBbiBpbmRpdmlkdWFsIG9yIG9yZ2FuaXphdGlvbiBvcGVyYXRpbmcgdW5kZXIgdGhpcworbGljZW5zZSBtYXkgaW5zdGFsbCBhbmQgdXNlIFRlYW1TcGVhayBzb2Z0d2FyZSBvbiBvbmUgb3IgbW9yZSBwaHlzaWNhbAorbWFjaGluZXMsIHdpdGhvdXQgcGF5aW5nIGEgbGljZW5zZSBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworY29uZGl0aW9ucyBhcmUgbWV0OgorYS4gVGhlIGluZGl2aWR1YWwgb3Igb3JnYW5pemF0aW9uIG11c3QgYmUgbm9uLXByb2ZpdCBpbiBuYXR1cmUuCitUZWFtU3BlYWsgU3lzdGVtcyBHbWJIIGFuZCBUcml0b24gQ0kgJiBBc3NvY2lhdGVzLCBJbmMuIHJlc2VydmUgdGhlCityaWdodCB0byBhc3Nlc3MgYW5kIGRldGVybWluZSBpZiBhbnkgaW5kaXZpZHVhbCBvciBvcmdhbml6YXRpb24gaXMKK25vbi1wcm9maXQgaW4gbmF0dXJlLgorYi4gVGhlIGluZGl2aWR1YWwgb3Igb3JnYW5pemF0aW9uIG1heSBob3N0IHVwIHRvIDMyIHNsb3RzIHVzaW5nIG9ubHkgMQorVmlydHVhbCBTZXJ2ZXIgZm9yIHRoZWlyIGVudGlyZSBvcGVyYXRpb24uIEV4Y2VlZGluZyB0aGUgdXNlIG9mIDMyIHNsb3RzCitvciAxIFZpcnR1YWwgU2VydmVyIG92ZXIgbXVsdGlwbGUgcGh5c2ljYWwgbWFjaGluZXMgb3BlcmF0ZWQgYnkgdGhlIHNhbWUKK2luZGl2aWR1YWwgb3Igb3JnYW5pemF0aW9uIGlzIHN0cmljdGx5IHByb2hpYml0ZWQuCisKKzUuMi4gTm9uLVByb2ZpdCBMaWNlbnNlOiBSZWdpc3RlcmVkCitUaGlzIGxpY2Vuc2UgdHlwZSBpcyBmb3IgYW4gaW5kaXZpZHVhbCBvciBvcmdhbml6YXRpb24gd2hpY2ggaXMKK25vbi1wcm9maXQgaW4gbmF0dXJlLCBhbmQgcmVxdWlyZXMgcmVnaXN0cmF0aW9uIG9uIG91ciB3ZWJzaXRlIGFuZCB0aGUKK3VzZSBvZiBhIGxpY2Vuc2Uga2V5LiBBbiBpbmRpdmlkdWFsIG9yIG9yZ2FuaXphdGlvbiBvcGVyYXRpbmcgdW5kZXIgdGhpcworbGljZW5zZSBtYXkgaW5zdGFsbCBhbmQgdXNlIFRlYW1TcGVhayBzb2Z0d2FyZSBvbiBvbmUgb3IgbW9yZSBwaHlzaWNhbAorbWFjaGluZXMsIHdpdGhvdXQgcGF5aW5nIGEgbGljZW5zZSBmZWUsIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZworY29uZGl0aW9ucyBhcmUgbWV0OgorYS4gVGhlIGluZGl2aWR1YWwgb3Igb3JnYW5pemF0aW9uIG11c3QgcmVnaXN0ZXIgdGhlaXIgb3BlcmF0aW9uIGFuZAorYXBwbHkgZm9yIHRoaXMgbGljZW5zZSB0eXBlIHZpYSBUcml0b24gQ0kgJiBBc3NvY2lhdGVzLCBJbmMuJ3Mgd2Vic2l0ZQorYXQgaHR0cHM6Ly9zYWxlcy50cml0b25jaWEuY29tL3VzZXJzL3JlZ2lzdGVyLnBocC4KK2IuIFRoZSBpbmRpdmlkdWFsIG9yIG9yZ2FuaXphdGlvbiBtdXN0IGJlIG5vbi1wcm9maXQgaW4gbmF0dXJlLgorVGVhbVNwZWFrIFN5c3RlbXMgR21iSCBhbmQgVHJpdG9uIENJICYgQXNzb2NpYXRlcywgSW5jLiByZXNlcnZlIHRoZQorcmlnaHQgdG8gYXNzZXNzIGFuZCBkZXRlcm1pbmUgaWYgYW55IGluZGl2aWR1YWwgb3Igb3JnYW5pemF0aW9uIGlzCitub24tcHJvZml0IGluIG5hdHVyZS4KK2MuIFRoZSBpbmRpdmlkdWFsIG9yIG9yZ2FuaXphdGlvbiBtYXkgaG9zdCB1cCB0byA1MTIgc2xvdHMgdXNpbmcgYQorbWF4aW11bSBvZiAxMCBWaXJ0dWFsIFNlcnZlcnMgZm9yIHRoZWlyIGVudGlyZSBvcGVyYXRpb24uIEFueQorY29tYmluYXRpb24gb2Ygc2xvdHMgb3IgVmlydHVhbCBTZXJ2ZXJzIG92ZXIgbXVsdGlwbGUgcGh5c2ljYWwgbWFjaGluZXMKK2lzIGFsbG93ZWQsIGFzIGxvbmcgYXMgdGhlIGluZGl2aWR1YWwgb3Igb3JnYW5pemF0aW9uIGRvZXMgbm90IGV4Y2VlZAorNTEyIHNsb3RzIG9yIDEwIFZpcnR1YWwgU2VydmVycy4gVGhpcyBpcyBhbHNvIGVuZm9yY2VkIGJ5IHRoZSBsaWNlbnNlCitrZXkgd2hpY2ggaXMgaXNzdWVkIGFmdGVyIHRoZSByZWdpc3RyYXRpb24gYW5kIGFwcHJvdmFsIHByb2Nlc3MgaGFzIGJlZW4KK2NvbXBsZXRlZC4KKworNS4zLiBDb21tZXJjaWFsIExpY2Vuc2UgZm9yIEFUSFBzIChBdXRob3JpemVkIFRlYW1TcGVhayBIb3N0IFByb3ZpZGVycyk6CitSZWN1cnMgTW9udGhseQorQW4gQXV0aG9yaXplZCBUZWFtU3BlYWsgSG9zdCBQcm92aWRlciBMaWNlbnNlIG9yIEFUSFAgTGljZW5zZSBpcyBhCitsaWNlbnNlIHJlcXVpcmluZyByZWN1cnJpbmcgbW9udGhseSBmZWVzLiBBVEhQIExpY2Vuc2VzIGFyZSBpc3N1ZWQgdG8KK0NvbW1lcmNpYWwgRW50aXRpZXMgKGFuIGluZGl2aWR1YWwsIGNvbXBhbnksIG9yIG9yZ2FuaXphdGlvbikgd2hpY2ggcmVudAorVGVhbVNwZWFrIHNlcnZlcnMgdG8gb3RoZXJzIGZvciBwcm9maXQgb2YgYW55IGtpbmQ7IGJlIGl0IG1vbmV0YXJ5LCBmcm9tCitkaXJlY3Qgc2FsZXMgb3IgcmVudGFsIGZlZXMsIGFkdmVydGlzaW5nIHByb2ZpdCwgb3IgdGhyb3VnaCB0aGUKK3ByaXZpbGVnZWQgdXNlIG9mIGludGFuZ2libGUgZ29vZHMgYW5kIHNlcnZpY2VzLiBBVEhQcyBhcmUgQ29tbWVyY2lhbAorRW50aXRpZXMgd2hpY2ggdHlwaWNhbGx5IGNoYXJnZSB0aGVpciBjdXN0b21lcnMgYSBtb250aGx5IGZlZSBmb3IgdGhlCit1c2Ugb2YgYSBUZWFtU3BlYWsgVmlydHVhbCBTZXJ2ZXIgb3IgaW5jbHVkZSB0aGUgVmlydHVhbCBTZXJ2ZXIgYXMgcGFydAorb2Ygb3RoZXIgc2VydmljZXMgb3Igb2ZmZXJpbmdzIHRvIHRoZWlyIGN1c3RvbWVycyBmcmVlIG9mIGNoYXJnZS4KK0NvbW1lcmNpYWwgRW50aXRpZXMgb3BlcmF0aW5nIHVuZGVyIHRoZSBBdXRob3JpemVkIFRlYW1TcGVhayBIb3N0CitQcm92aWRlciBMaWNlbnNlIG1heSBpbnN0YWxsIGFuZCB1c2UgVGVhbVNwZWFrIHNvZnR3YXJlIG9uIG9uZSBvciBtb3JlCitwaHlzaWNhbCBtYWNoaW5lcywgYW5kIG11c3QgYWRoZXJlIHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKK2EuIEFUSFBzIG11c3QgcmVnaXN0ZXIgZm9yIGFuIGFjY291bnQgb24gVHJpdG9uIENJICYgQXNzb2NpYXRlcywgSW5jLidzCit3ZWJzaXRlIGF0IGh0dHBzOi8vc2FsZXMudHJpdG9uY2lhLmNvbS91c2Vycy9yZWdpc3Rlci5waHAuCitiLiBBVEhQcyBhcmUgc3ViamVjdCB0byByZWN1cnJpbmcsIG1vbnRobHkgbGljZW5zaW5nIGZlZXMgYmFzZWQgb24gdGhlCithdmVyYWdlIHNsb3QgY291bnQgY29uZmlndXJlZCBvbiBlYWNoIFZpcnR1YWwgU2VydmVyIGhvc3RlZCBieSB0aGUgQVRIUAorZHVyaW5nIHRoZSBwcmV2aW91cyBtb250aCAoZS5nLiAtIGlmIGEgVmlydHVhbCBTZXJ2ZXIgcmVwb3J0cyBiZWluZworY29uZmlndXJlZCBmb3IgNTAgU2xvdHMgZHVyaW5nIDE1IG91dCBvZiAzMCBkYXlzIG9mIHRoZSBwcmV2aW91cyBtb250aCwKK3RoZSBWaXJ0dWFsIFNlcnZlciB3aWxsIGJlIGJpbGxlZCBhdCAyNSBTbG90cykuIFRoZXNlIGxpY2Vuc2luZyBmZWVzIGFyZQorY29tcGxldGVseSBpbmRpZmZlcmVudCB0byB3aGV0aGVyIG9yIG5vdCBhbiBBVEhQJ3MgY3VzdG9tZXIgbWFrZXMgdXNlIG9mCit0aGVpciBWaXJ0dWFsIFNlcnZlci4KK2MuIEFUSFBzIGFyZSBiaWxsZWQgbW9udGhseSwgaW4gYXJyZWFycywgYnkgVHJpdG9uIENJICYgQXNzb2NpYXRlcywgSW5jLgorQWxsIGludm9pY2VzIGFyZSB0eXBpY2FsbHkgc2VudCBvbiB0aGUgMXN0IG9yIDJuZCBkYXkgb2YgZXZlcnkgbW9udGggdmlhCitlbWFpbCBhbmQgYXJlIGFsc28gcG9zdGVkIHRvIHRoZSBBVEhQJ3Mgb25saW5lIGFjY291bnQgdmlhIFRyaXRvbiBDSSAmCitBc3NvY2lhdGVzLCBJbmMuJ3Mgd2Vic2l0ZSBhdCBodHRwOi8vc2FsZXMudHJpdG9uY2lhLmNvbS4KK2QuIFBheW1lbnRzIGFyZSBkdWUgMTUgZGF5cyBhZnRlciBhbnkgaW52b2ljZSBpcyBnZW5lcmF0ZWQgKE5FVCAxNSkuIEl0CitpcyB0aGUgQVRIUCdzIHJlc3BvbnNpYmlsaXR5IHRvIGVuc3VyZSB0aGF0IHRoZWlyIGludm9pY2UgaXMgcmVjZWl2ZWQ7Cit3aGV0aGVyIGJ5IHRoZSBwcmltYXJ5IGVtYWlsIGFkZHJlc3MgcmVnaXN0ZXJlZCB0byB0aGUgQVRIUCdzIG9ubGluZQorYWNjb3VudCBvciBieSBhIHJlcHJlc2VudGF0aXZlIG9mIHRoZSBBVEhQIGVuc3VyaW5nIHRoYXQgdGhlIEFUSFAncworb25saW5lIGFjY291bnQgaXMgbG9nZ2VkIGludG8gb3IgY2hlY2tlZCBlYWNoIG1vbnRoIGZvciBuZXcgaW52b2ljZXMuCitlLiBBVEhQcyB3aG8gYmVjb21lIDMwIG9yIG1vcmUgZGF5cyBwYXN0IGR1ZSBvbiB0aGVpciBpbnZvaWNlIG1heSBoYXZlCit0aGVpciBUZWFtU3BlYWsgU2VydmVycyBiYW5uZWQgZHVlIHRvIG5vbi1wYXltZW50LgorZi4gQVRIUHMgd2hvIGNvbnNpc3RlbnRseSBmYWlsIHRvIHBheSB0aGVpciBpbnZvaWNlcyBvbiB0aW1lIGFyZSBzdWJqZWN0Cit0byBoYXZpbmcgdGhlaXIgYWNjb3VudCBvciBsaWNlbnNlIHN1c3BlbmRlZCBvciByZXZva2VkLgorZy4gTmV3IEFUSFBzIGFja25vd2xlZGdlIHRoYXQgdGhlcmUgd2lsbCBiZSBhICQ1MCBzZXR1cCBmZWUgaW4gYWRkaXRpb24KK3RvIGEgbWluaW11bSBtb250aGx5IGxpY2Vuc2UgZmVlIG9mICQyNSBmb3IgYSBtaW5pbXVtIHNsb3QgY291bnQgb2YgMjAwLgoraC4gQVRIUHMgYWNrbm93bGVkZ2UgdGhhdCBpbnZvaWNlcyBtYXkgb2NjYXNpb25hbGx5IHJlZmxlY3QgaW5hY2N1cmF0ZQorZGF0YSBkdWUgdG8gaW5jb3JyZWN0bHkgY29uZmlndXJlZCBzbG90IGNvdW50cyBvbiBsaWNlbnNlZCBWaXJ0dWFsCitTZXJ2ZXJzIChlLmcuIC0gdGVzdCBzZXJ2ZXJzIGFjY2lkZW50YWxseSBjcmVhdGVkIHdpdGggaGlnaCBzbG90IGNvdW50cywKK29yIGR1cGxpY2F0ZSBkYXRhIHJlcG9ydGVkIGJhY2sgdG8gVGVhbVNwZWFrIFN5c3RlbXMgR21iSCBkdXJpbmcgZGF0YQorY2VudGVyIG1pZ3JhdGlvbnMsIGV0Yy4pLiBBcyBzdWNoLCBpbnZvaWNlcyBhcmUgc3ViamVjdCB0byByZXZpZXcgYnkKK2JvdGggdGhlIEFUSFAgYW5kIFRyaXRvbiBDSSAmIEFzc29jaWF0ZXMsIEluYy4gRXZlcnkgZWZmb3J0IHdpbGwgYmUgbWFkZQorYnkgVHJpdG9uIENJICYgQXNzb2NpYXRlcywgSW5jLiB0byBkZXRlcm1pbmUgdGhlIGJlc3QgY291cnNlIG9mIGFjdGlvbgord2hlbiBjb3JyZWN0aW5nIG9yIG1vZGlmeWluZyBhbiBpbnZvaWNlLgoraS4gQVRIUHMgYWNrbm93bGVkZ2UgdGhhdCBzbG90IGNvdW50IGRhdGEgZm9yIGVhY2ggVmlydHVhbCBTZXJ2ZXIgaG9zdGVkCitieSB0aGUgQVRIUCBpcyByZXBvcnRlZCBkYWlseSB0byBUZWFtU3BlYWsgU3lzdGVtcyBHbWJIJ3MgdHJhY2tpbmcKK3NlcnZlciBsb2NhdGVkIGF0IHdlYnBvc3QudGVhbXNwZWFrLm9yZyAoSVAgNjIuMTQ2LjYzLjgyKSBmb3IgdGhlCitwdXJwb3NlIG9mIHRyYWNraW5nIGFuZCBiaWxsaW5nIHRoZSBBVEhQIGFjY29yZGluZ2x5Lgorai4gQVRIUHMgbWF5IG5vdCB1dGlsaXplIGZpcmV3YWxscyBvciBhbnkgb3RoZXIgdG9vbHMgdG8gcHJldmVudAorY29tbXVuaWNhdGlvbiBmcm9tIHRoZWlyIGxpY2Vuc2VkIFZpcnR1YWwgU2VydmVycyB0byBUZWFtU3BlYWsgU3lzdGVtcworR21iSCdzIHRyYWNraW5nIHNlcnZlciBsb2NhdGVkIGF0IHdlYnBvc3QudGVhbXNwZWFrLm9yZyAoSVAKKzYyLjE0Ni42My44MikuIEFsbCBvdXRib3VuZCB0cmFmZmljLCBib3RoIFRDUCBhbmQgVURQLCBtdXN0IGJlIG1hZGUKK2F2YWlsYWJsZSB0byB0aGUgdHJhY2tpbmcgc2VydmVyIEFORCB0aGUgb3JnYW5pemF0aW9uIG11c3QgZW5zdXJlIHRoYXQKK0ROUyBpcyBmdW5jdGlvbmluZyBwcm9wZXJseSBhbmQgaXMgYWJsZSB0byByZXNvbHZlIHRoZSBob3N0bmFtZQord2VicG9zdC50ZWFtc3BlYWsub3JnIGF0IGFsbCB0aW1lcyBvbiBhbGwgcGh5c2ljYWwgbWFjaGluZXMgd2hlcmUKK1ZpcnR1YWwgU2VydmVycyBhcmUgYmVpbmcgaG9zdGVkLgoraC4gQVRIUHMgbWF5IGFsbG93IHJlc2VsbGVycyB0byBzZWxsIHRoZWlyIFRlYW1TcGVhayBWaXJ0dWFsIFNlcnZlcnM7Citob3dldmVyLCB0aGUgQVRIUCBtdXN0IGVuc3VyZSB0aGF0IGFsbCBvZiB0aGVpciBWaXJ0dWFsIFNlcnZlciBJUHMgYXJlCitsaWNlbnNlZCBhdCBhbGwgdGltZXMuIFJlc2VsbGVycyBhcmUgbm90IHJlcXVpcmVkIHRvIHJlZ2lzdGVyIGFuZAorcHVyY2hhc2UgYSBzZXBhcmF0ZSBBVEhQIGxpY2Vuc2UgZm9yIHRoZW1zZWx2ZXMgYXMgbG9uZyBhcyBhbGwgVmlydHVhbAorU2VydmVycyBzb2xkIGJ5IHRoZSByZXNlbGxlciBhcmUgbGljZW5zZWQgdGhyb3VnaCB0aGUgQVRIUC4KKworNS40LiBDb21tZXJjaWFsIExpY2Vuc2U6IEFubnVhbCBBY3RpdmF0aW9uCitBIENvbW1lcmNpYWwgTGljZW5zZSBpcyBhIGxpY2Vuc2UgcmVxdWlyaW5nIGFubnVhbCBhY3RpdmF0aW9uLgorQ29tbWVyY2lhbCBMaWNlbnNlcyBhcmUgaXNzdWVkIHRvIENvbW1lcmNpYWwgRW50aXRpZXMgKGFuIGluZGl2aWR1YWwsCitjb21wYW55LCBvciBvcmdhbml6YXRpb24pIHdoaWNoIHV0aWxpemUgVGVhbVNwZWFrIHNlcnZlcnMgaW4gYQorY29tbWVyY2lhbCBlbnZpcm9ubWVudCBidXQgYXJlIG5vdCBpbiB0aGUgYnVzaW5lc3Mgb2YgaG9zdGluZyBvciByZW50aW5nCitzZXJ2ZXJzIHRvIG90aGVycyBmb3IgYSByZWN1cnJpbmcgZmVlLiBFeGFtcGxlcyBpbmNsdWRlLCBidXQgYXJlIG5vdAorbGltaXRlZCB0bywgSW50ZXJuZXQgQ2FmZXMgb3Igc21hbGwgYnVzaW5lc3NlcyB1c2luZyBUZWFtU3BlYWsgZm9yCitpbnRlcm5hbCBjb21tdW5pY2F0aW9uLiBDb21tZXJjaWFsIEVudGl0aWVzIG9wZXJhdGluZyB1bmRlciB0aGUKK0NvbW1lcmNpYWwgTGljZW5zZSBtdXN0IGFkaGVyZSB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CithLiBDb21tZXJjaWFsIEVudGl0aWVzIG11c3QgcmVnaXN0ZXIgZm9yIGFuIGFjY291bnQgb24gVHJpdG9uIENJICYKK0Fzc29jaWF0ZXMsIEluYy4ncyB3ZWJzaXRlIGF0CitodHRwczovL3NhbGVzLnRyaXRvbmNpYS5jb20vdXNlcnMvcmVnaXN0ZXIucGhwLgorYi4gVXBvbiBleHBpcmF0aW9uIG9mIHRoZSBhbm51YWwgbGljZW5zZWQgdGVybSwgdGhlIENvbW1lcmNpYWwgRW50aXR5CittdXN0IHB1cmNoYXNlIGFuIGFkZGl0aW9uYWwgeWVhciBvZiBhY3RpdmF0aW9uIGluIG9yZGVyIHRvIGNvbnRpbnVlCit1c2luZyBUZWFtU3BlYWsuCitjLiBDb21tZXJjaWFsIEVudGl0aWVzIG1heSB1dGlsaXplIHRoZWlyIGxpY2Vuc2Ugb24gbXVsdGlwbGUgcGh5c2ljYWwKK21hY2hpbmVzLCBwcm92aWRlZCB0aGUgQ29tbWVyY2lhbCBFbnRpdHkgYWJpZGVzIGJ5IHRoZSBsaW1pdGF0aW9ucyBvbgoraXRzIHB1cmNoYXNlZCBzbG90cyBhbmQgdGhlIG1heGltdW0gbnVtYmVyIG9mIFZpcnR1YWwgU2VydmVycyBmb3Igd2hpY2gKK3RoZXkgYXJlIGxpY2Vuc2VkLgorZC4gQ29tbWVyY2lhbCBFbnRpdGllcyBjYW5ub3QgcmUtc2VsbCBhbnkgcG9ydGlvbiBvZiB0aGVpciBsaWNlbnNlZAorc2xvdHMgb3IgVmlydHVhbCBTZXJ2ZXJzIHRvIG90aGVycyBmb3IgYSByZWN1cnJpbmcgZmVlIG9mIGFueSBraW5kLgorCis1LjUgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IEludGVncmF0aW9uIExpY2Vuc2Ugb3IgIlNESyBJbnRlZ3JhdGlvbgorTGljZW5zZSIKK0EgU29mdHdhcmUgRGV2ZWxvcG1lbnQgS2l0IEludGVncmF0aW9uIExpY2Vuc2Ugb3IgU0RLIEludGVncmF0aW9uCitMaWNlbnNlIGlzIGEgbGljZW5zZSB3aGljaCBtYXkgcmVxdWlyZSBhIG9uZS10aW1lIGZlZSwgcmVjdXJyaW5nIGZlZXMsCitvciBvdGhlciBwcmUtZGV0ZXJtaW5lZCBmZWVzLiBTREsgSW50ZWdyYXRpb24gTGljZW5zZXMgYXJlIHR5cGljYWxseQoraXNzdWVkIHRvIENvbW1lcmNpYWwgRW50aXRpZXMgKGFuIGluZGl2aWR1YWwsIGNvbXBhbnksIG9yIG9yZ2FuaXphdGlvbikKK3doaWNoIHV0aWxpemUgVGVhbVNwZWFrIHNvZnR3YXJlIHRvIGNyZWF0ZSBjdXN0b21pemVkIG9yIGludGVncmF0ZWQKK2FwcGxpY2F0aW9ucyBhcyBwYXJ0IG9mIGFuIGV4aXN0aW5nIHByb2R1Y3Qgb3Igc2VydmljZS4gQ29tbWVyY2lhbAorRW50aXRpZXMgb3BlcmF0aW5nIHVuZGVyIHRoZSBTREsgSW50ZWdyYXRpb24gTGljZW5zZSBtdXN0IGFkaGVyZSB0byB0aGUKK2ZvbGxvd2luZyBjb25kaXRpb25zOgorYS4gWW91IG1heSB1c2UgdGhlIFRlYW1TcGVhayBTREsgd2l0aCBvbmx5IG9uZSBwcm9kdWN0IGF0IGEgdGltZS4gQW55CitpbnRlbnQgdG8gdXRpbGl6ZSB0aGUgVGVhbVNwZWFrIFNESyB3aXRoIGEgZGlmZmVyZW50IHByb2R1Y3Qgd2lsbAorY29uc3RpdHV0ZSBhIG5ldyBBZ3JlZW1lbnQsIGFuZCBuZXcgbGljZW5zZSBmZWVzIG1heSBhcHBseS4KK2IuIFlvdSBtYXkgTk9UIGRpc3RyaWJ1dGUsIHNlbGwsIGxlYXNlLCByZW50LCBsZW5kLCBvciBzdWJsaWNlbnNlIGFueQorcGFydCBvZiB0aGUgVGVhbVNwZWFrIFNESyB0byBhbnkgdGhpcmQgcGFydHkgd2l0aG91dCBwcmlvciB3cml0dGVuCitjb25zZW50IGZyb20gVGVhbVNwZWFrIFN5c3RlbXMgR21iSCBvciBUcml0b24gQ0kgJiBBc3NvY2lhdGVzLCBJbmMuCitjLiBZb3UgbWF5IE5PVCB1c2UgdGhlIFRlYW1TcGVhayBTREsgdG8gZGVzaWduIG9yIGRldmVsb3Agc29mdHdhcmUgdG8KK3VwbG9hZCBvciBvdGhlcndpc2UgdHJhbnNtaXQgYW55IG1hdGVyaWFsIGNvbnRhaW5pbmcgc29mdHdhcmUgdmlydXNlcyBvcgorb3RoZXIgY29tcHV0ZXIgY29kZSwgZmlsZXMgb3IgcHJvZ3JhbXMgZGVzaWduZWQgdG8gaW50ZXJydXB0LCBkZXN0cm95LAorb3IgbGltaXQgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgYW55IHNvZnR3YXJlIG9yIGhhcmR3YXJlLgorZC4gWW91IG1heSBOT1QgcmVwcmVzZW50IHRoYXQgdGhlIHByb2dyYW1zIHlvdSBkZXZlbG9wIHVzaW5nIHRoZQorVGVhbVNwZWFrIFNESyBhcmUgY2VydGlmaWVkIG9yIG90aGVyd2lzZSBlbmRvcnNlZCBieSBlaXRoZXIgVGVhbVNwZWFrCitTeXN0ZW1zIEdtYkggb3IgVHJpdG9uIENJICYgQXNzb2NpYXRlcywgSW5jLgorZS4gWW91IG1heSBOT1QgdXNlIHRoZSBUZWFtU3BlYWsgbmFtZSBvciBhbnkgb3RoZXIgdHJhZGVtYXJrcyBvZgorVGVhbVNwZWFrIFN5c3RlbXMgR21iSCBpbiBjb25uZWN0aW9uIHdpdGggcHJvZ3JhbXMgdGhhdCB5b3UgZGV2ZWxvcAordXNpbmcgdGhlIFRlYW1TcGVhayBTREsgd2l0aG91dCBwcmlvciB3cml0dGVuIGNvbnNlbnQgZnJvbSBUZWFtU3BlYWsKK1N5c3RlbXMgR21iSCBvciBUcml0b24gQ0kgJiBBc3NvY2lhdGVzLCBJbmMuCisKKzYuIERJU1RSSUJVVElPTiBWSUEgVEhFIElOVEVSTkVUCisKK1RoZSBwcmVmZXJyZWQgbWV0aG9kIG9mIGRpc3RyaWJ1dGlvbiBvZiBUZWFtU3BlYWsgc29mdHdhcmUgb3ZlciB0aGUKK0ludGVybmV0IGlzIHZpYSBUZWFtU3BlYWsgU3lzdGVtcyBHbWJIJ3Mgb2ZmaWNpYWwgd2Vic2l0ZSBhdAord3d3LlRlYW1TcGVhay5jb20uIFlvdSBtYXkgbm90IGRpc3RyaWJ1dGUgVGVhbVNwZWFrIHNvZnR3YXJlIG90aGVyd2lzZQorb3ZlciB0aGUgSW50ZXJuZXQsIHVubGVzcyB5b3Ugb2J0YWluIHByaW9yIHdyaXR0ZW4gY29uc2VudCBmcm9tCitUZWFtU3BlYWsgU3lzdGVtcyBHbWJIIG9yIFRyaXRvbiBDSSAmIEFzc29jaWF0ZXMsIEluYy4gdG8gZG8gc28uCisKKzcuIFRISVJEIFBBUlRZIERJU1RSSUJVVElPTiBQUk9ISUJJVEVECisKK0Rpc3RyaWJ1dGlvbiBvZiBUZWFtU3BlYWsgc29mdHdhcmUgYnkgeW91IHRvIHRoaXJkIHBhcnRpZXMgKGUuZy4gLQorcHVibGlzaGVycywgbWFnYXppbmVzLCB0aGlyZCBwYXJ0eSBwcm9kdWN0cywgZXRjLikgaXMgYWxzbyBoZXJlYnkKK2V4cHJlc3NseSBwcm9oaWJpdGVkIHVubGVzcyB5b3Ugb2J0YWluIHByaW9yIHdyaXR0ZW4gY29uc2VudCBmcm9tCitUZWFtU3BlYWsgU3lzdGVtcyBHbWJIIG9yIFRyaXRvbiBDSSAmIEFzc29jaWF0ZXMsIEluYy4gdG8gZG8gc28uCisKKzguIFRFUk1JTkFUSU9OCitUZWFtU3BlYWsgU3lzdGVtcyBHbWJIIG9yIFRyaXRvbiBDSSAmIEFzc29jaWF0ZXMsIEluYy4gcmVzZXJ2ZXMgdGhlCityaWdodCB0byB0ZXJtaW5hdGUgeW91ciBsaWNlbnNlIGZvciBUZWFtU3BlYWsgc29mdHdhcmUgYXQgYW55IHRpbWUgb3IKK2ZvciBhbnkgcmVhc29uLiBZb3VyIGxpY2Vuc2UgbWF5IGFsc28gYmUgdGVybWluYXRlZCBpZiB5b3UgYXJlIGluIGJyZWFjaAorb2YgYW55IG9mIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBzZXQgZm9ydGggaW4gdGhpcyBBZ3JlZW1lbnQuIFVwb24KK3Rlcm1pbmF0aW9uLCB5b3Ugc2hhbGwgaW1tZWRpYXRlbHkgZGlzY29udGludWUgdXNpbmcgVGVhbVNwZWFrIHNvZnR3YXJlCithbmQgZGVzdHJveSBhbGwgY29waWVzIGFuZCByZWxhdGVkIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbiB5b3VyCitwb3NzZXNzaW9uLCBjdXN0b2R5IG9yIGNvbnRyb2wuCisKKzkuIEJJTExJTkcKK1RyaXRvbiBDSSAmIEFzc29jaWF0ZXMsIEluYy4sIGlzIFRlYW1TcGVhayBTeXN0ZW1zIEdtYkgncyBvZmZpY2lhbAorc2FsZXMsIGxpY2Vuc2luZywgYW5kIGJpbGxpbmcgcGFydG5lciBmb3IgVGVhbVNwZWFrIHNvZnR3YXJlLiBBcyBzdWNoLAorYWxsIGJpbGxpbmcgbWF0dGVycyBmb3IgQ29tbWVyY2lhbCBFbnRpdGllcyBhcmUgaGFuZGxlZCBieSBUcml0b24gQ0kgJgorQXNzb2NpYXRlcywgSW5jLiBBbnkgaW5xdWlyaWVzIHJlbGF0aW5nIHRvIGJpbGxpbmcgbXVzdCBiZSBlLW1haWxlZCB0bworc2FsZXNAdHJpdG9uY2lhLmNvbSBvciBzdWJtaXR0ZWQgdmlhIFRyaXRvbiBDSSAmIEFzc29jaWF0ZXMsIEluYy4ncwordGlja2V0IHN5c3RlbSBhdCBodHRwOi8vc3VwcG9ydC50cml0b25jaWEuY29tLgorCisxMC4gUFJJQ0lORworVGVhbVNwZWFrIHNvZnR3YXJlIHByaWNpbmcgaW5mb3JtYXRpb24gZm9yIENvbW1lcmNpYWwgRW50aXRpZXMgY2FuIGJlCitmb3VuZCBvbiBUcml0b24gQ0kgJiBBc3NvY2lhdGVzLCBJbmMuJ3Mgd2Vic2l0ZSBhdAoraHR0cDovL3NhbGVzLnRyaXRvbmNpYS5jb20vcHJpY2luZy5waHAuCisKKzExLiBQUk9ISUJJVEVEIENPTkRVQ1QKKworWW91IHJlcHJlc2VudCBhbmQgd2FycmFudCB0aGF0IHlvdSB3aWxsIG5vdCB2aW9sYXRlIGFueSBvZiB0aGUgdGVybXMgYW5kCitjb25kaXRpb25zIHNldCBmb3J0aCBpbiB0aGlzIEFncmVlbWVudCBhbmQgdGhhdDoKKworYS4gWW91IHdpbGwgbm90OiAoSSkgcmV2ZXJzZSBlbmdpbmVlciwgZGVjb21waWxlLCBkaXNhc3NlbWJsZSwgZGVyaXZlCit0aGUgc291cmNlIGNvZGUgb2YsIG1vZGlmeSwgb3IgY3JlYXRlIGRlcml2YXRpdmUgd29ya3MgZnJvbSBUZWFtU3BlYWsKK3NvZnR3YXJlOyBvciAoSUkpIHVzZSwgY29weSwgbW9kaWZ5LCBhbHRlciwgb3IgdHJhbnNmZXIsIGVsZWN0cm9uaWNhbGx5CitvciBvdGhlcndpc2UsIFRlYW1TcGVhayBzb2Z0d2FyZSBvciBhbnkgb2YgdGhlIGFjY29tcGFueWluZworZG9jdW1lbnRhdGlvbiBleGNlcHQgYXMgZXhwcmVzc2x5IHBlcm1pdHRlZCBpbiB0aGlzIEFncmVlbWVudDsgb3IgKElJSSkKK3JlZGlzdHJpYnV0ZSwgc2VsbCwgcmVudCwgbGVhc2UsIHN1YmxpY2Vuc2UsIG9yIG90aGVyd2lzZSB0cmFuc2ZlcgorcmlnaHRzIHRvIFRlYW1TcGVhayBzb2Z0d2FyZSB3aGV0aGVyIGluIGEgc3RhbmQtYWxvbmUgY29uZmlndXJhdGlvbiBvcgorYXMgaW5jb3Jwb3JhdGVkIHdpdGggb3RoZXIgc29mdHdhcmUgY29kZSB3cml0dGVuIGJ5IGFueSBwYXJ0eSBleGNlcHQgYXMKK2V4cHJlc3NseSBwZXJtaXR0ZWQgaW4gdGhpcyBBZ3JlZW1lbnQuCitiLiBZb3Ugd2lsbCBub3QgdXNlIFRlYW1TcGVhayBzb2Z0d2FyZSB0byBlbmdhZ2UgaW4gb3IgYWxsb3cgb3RoZXJzIHRvCitlbmdhZ2UgaW4gYW55IGlsbGVnYWwgYWN0aXZpdHkuCitjLiBZb3Ugd2lsbCBub3QgZW5nYWdlIGluIHVzZSBvZiBUZWFtU3BlYWsgc29mdHdhcmUgdGhhdCB3aWxsIGludGVyZmVyZQord2l0aCBvciBkYW1hZ2UgdGhlIG9wZXJhdGlvbiBvZiB0aGUgc2VydmljZXMgb2YgdGhpcmQgcGFydGllcyBieQorb3ZlcmJ1cmRlbmluZyBvciBkaXNhYmxpbmcgbmV0d29yayByZXNvdXJjZXMgdGhyb3VnaCBhdXRvbWF0ZWQgcXVlcmllcywKK2V4Y2Vzc2l2ZSB1c2FnZSBvciBzaW1pbGFyIGNvbmR1Y3QuCitkLiBZb3Ugd2lsbCBub3QgdXNlIFRlYW1TcGVhayBzb2Z0d2FyZSB0byBlbmdhZ2UgaW4gYW55IGFjdGl2aXR5IHRoYXQKK3dpbGwgdmlvbGF0ZSB0aGUgcmlnaHRzIG9mIHRoaXJkIHBhcnRpZXMsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLAordGhyb3VnaCB0aGUgdXNlLCBwdWJsaWMgZGlzcGxheSwgcHVibGljIHBlcmZvcm1hbmNlLCByZXByb2R1Y3Rpb24sCitkaXN0cmlidXRpb24sIG9yIG1vZGlmaWNhdGlvbiBvZiBjb21tdW5pY2F0aW9ucyBvciBtYXRlcmlhbHMgdGhhdAoraW5mcmluZ2UgY29weXJpZ2h0cywgdHJhZGVtYXJrcywgcHVibGljaXR5IHJpZ2h0cywgcHJpdmFjeSByaWdodHMsIG90aGVyCitwcm9wcmlldGFyeSByaWdodHMsIG9yIHJpZ2h0cyBhZ2FpbnN0IGRlZmFtYXRpb24gb2YgdGhpcmQgcGFydGllcy4KK2UuIFlvdSB3aWxsIG5vdCB0cmFuc2ZlciBUZWFtU3BlYWsgc29mdHdhcmUgb3IgdXRpbGl6ZSBUZWFtU3BlYWsKK3NvZnR3YXJlIGluIGNvbWJpbmF0aW9uIHdpdGggdGhpcmQgcGFydHkgc29mdHdhcmUgYXV0aG9yZWQgYnkgeW91IG9yCitvdGhlcnMgdG8gY3JlYXRlIGFuIGludGVncmF0ZWQgc29mdHdhcmUgcHJvZ3JhbSB3aGljaCB5b3UgdHJhbnNmZXIgdG8KK3VucmVsYXRlZCB0aGlyZCBwYXJ0aWVzIHVubGVzcyB5b3Ugb2J0YWluIHByaW9yIHdyaXR0ZW4gY29uc2VudCBmcm9tCitUZWFtU3BlYWsgU3lzdGVtcyBHbWJIIG9yIFRyaXRvbiBDSSAmIEFzc29jaWF0ZXMsIEluYy4gdG8gZG8gc28uCisKKzEyLiBVUEdSQURFUywgVVBEQVRFUyBBTkQgRU5IQU5DRU1FTlRTCisKK0FsbCB1cGdyYWRlcywgdXBkYXRlcyBvciBlbmhhbmNlbWVudHMgb2YgVGVhbVNwZWFrIHNvZnR3YXJlIHNoYWxsIGJlCitkZWVtZWQgdG8gYmUgcGFydCBvZiBUZWFtU3BlYWsgc29mdHdhcmUgYW5kIHdpbGwgYmUgc3ViamVjdCB0byB0aGlzCitBZ3JlZW1lbnQuCisKKzEzLiBMRUdFTkRTIEFORCBOT1RJQ0VTCisKK1lvdSBhZ3JlZSB0aGF0IHlvdSB3aWxsIG5vdCByZW1vdmUgb3IgYWx0ZXIgYW55IHRyYWRlbWFyaywgbG9nbywKK2NvcHlyaWdodCBvciBvdGhlciBwcm9wcmlldGFyeSBub3RpY2VzLCBsZWdlbmRzLCBzeW1ib2xzIG9yIGxhYmVscyBpbgorVGVhbVNwZWFrIHNvZnR3YXJlIG9yIGFueSBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbi4KKworMTQuIFRFUk0gQU5EIFRFUk1JTkFUSU9OCisKK1RoaXMgQWdyZWVtZW50IGlzIGVmZmVjdGl2ZSB1cG9uIHlvdXIgYWNjZXB0YW5jZSBhcyBwcm92aWRlZCBoZXJlaW4gYW5kCit3aWxsIHJlbWFpbiBpbiBmb3JjZSB1bnRpbCB0ZXJtaW5hdGVkLiBOb24tUHJvZml0IEVudGl0aWVzIG1heSB0ZXJtaW5hdGUKK3RoZSBsaWNlbnNlcyBncmFudGVkIGluIHRoaXMgQWdyZWVtZW50IGF0IGFueSB0aW1lIGJ5IGRlc3Ryb3lpbmcKK1RlYW1TcGVhayBzb2Z0d2FyZSBhbmQgYW55IGFjY29tcGFueWluZyBkb2N1bWVudGF0aW9uLCB0b2dldGhlciB3aXRoIGFueQorYW5kIGFsbCBjb3BpZXMgdGhlcmVvZi4gQ29tbWVyY2lhbCBFbnRpdGllcyBtYXkgdGVybWluYXRlIHRoZSBsaWNlbnNlcworZ3JhbnRlZCBpbiB0aGlzIEFncmVlbWVudCBhdCBhbnkgdGltZSBieSBjb250YWN0aW5nIFRyaXRvbiBDSSAmCitBc3NvY2lhdGVzLCBJbmMuIHZpYSBlLW1haWwgYXQgc2FsZXNAdHJpdG9uY2lhLmNvbSBvciB2aWEKK2h0dHA6Ly9zdXBwb3J0LnRyaXRvbmNpYS5jb20uIFRoZSBsaWNlbnNlcyBncmFudGVkIGluIHRoaXMgQWdyZWVtZW50Cit3aWxsIHRlcm1pbmF0ZSBhdXRvbWF0aWNhbGx5IGlmIHlvdSBicmVhY2ggYW55IG9mIGl0cyB0ZXJtcyBvcgorY29uZGl0aW9ucyBvciBhbnkgb2YgdGhlIHRlcm1zIG9yIGNvbmRpdGlvbnMgb2YgYW55IG90aGVyIGFncmVlbWVudAorYmV0d2VlbiB5b3UgYW5kIFRlYW1TcGVhayBTeXN0ZW1zIEdtYkggb3IgVHJpdG9uIENJICYgQXNzb2NpYXRlcywgSW5jLgorCisxNS4gU09GVFdBUkUgU1VHR0VTVElPTlMKKworVGVhbVNwZWFrIFN5c3RlbXMgR21iSCB3ZWxjb21lcyBzdWdnZXN0aW9ucyBmb3IgZW5oYW5jaW5nIFRlYW1TcGVhaworc29mdHdhcmUgYW5kIGFueSBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiB0aGF0IG1heSByZXN1bHQgaW4gY29tcHV0ZXIKK3Byb2dyYW1zLCByZXBvcnRzLCBwcmVzZW50YXRpb25zLCBkb2N1bWVudHMsIGlkZWFzIG9yIGludmVudGlvbnMKK3JlbGF0aW5nIG9yIHVzZWZ1bCB0byBUZWFtU3BlYWsgU3lzdGVtcyBHbWJIJ3MgYnVzaW5lc3MuIFlvdSBhY2tub3dsZWRnZQordGhhdCBhbGwgdGl0bGUsIG93bmVyc2hpcCByaWdodHMsIGFuZCBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzCitjb25jZXJuaW5nIHN1Y2ggc3VnZ2VzdGlvbnMgc2hhbGwgYmVjb21lIHRoZSBleGNsdXNpdmUgcHJvcGVydHkgb2YKK1RlYW1TcGVhayBTeXN0ZW1zIEdtYkggYW5kIG1heSBiZSB1c2VkIGZvciBpdHMgYnVzaW5lc3MgcHVycG9zZXMgaW4gaXRzCitzb2xlIGRpc2NyZXRpb24gd2l0aG91dCBhbnkgcGF5bWVudCBvciBhY2NvdW50aW5nIHRvIHlvdS4KKworMTYuIE1JU0NFTExBTkVPVVMKKworVGhpcyBBZ3JlZW1lbnQgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcworY29uY2VybmluZyBUZWFtU3BlYWsgc29mdHdhcmUsIGFuZCBpcyBzdWJqZWN0IHRvIGNoYW5nZSBieSBUZWFtU3BlYWsKK1N5c3RlbXMgR21iSCBvciBUcml0b24gQ0kgJiBBc3NvY2lhdGVzLCBJbmMuIGF0IGFueSB0aW1lLiBJZiBhbnkKK3Byb3Zpc2lvbiBpbiB0aGlzIEFncmVlbWVudCBzaG91bGQgYmUgaGVsZCBpbGxlZ2FsIG9yIHVuZW5mb3JjZWFibGUgYnkgYQorY291cnQgb2YgY29tcGV0ZW50IGp1cmlzZGljdGlvbiwgc3VjaCBwcm92aXNpb24gc2hhbGwgYmUgbW9kaWZpZWQgdG8gdGhlCitleHRlbnQgbmVjZXNzYXJ5IHRvIHJlbmRlciBpdCBlbmZvcmNlYWJsZSB3aXRob3V0IGxvc2luZyBpdHMgaW50ZW50LCBvcgorc2V2ZXJlZCBmcm9tIHRoaXMgQWdyZWVtZW50IGlmIG5vIHN1Y2ggbW9kaWZpY2F0aW9uIGlzIHBvc3NpYmxlLCBhbmQKK290aGVyIHByb3Zpc2lvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgc2hhbGwgcmVtYWluIGluIGZ1bGwgZm9yY2UgYW5kCitlZmZlY3QuIEEgd2FpdmVyIGJ5IGVpdGhlciBwYXJ0eSBvZiBhbnkgdGVybSBvciBjb25kaXRpb24gb2YgdGhpcworQWdyZWVtZW50IG9yIGFueSBicmVhY2ggdGhlcmVvZiwgaW4gYW55IG9uZSBpbnN0YW5jZSwgc2hhbGwgbm90IHdhaXZlCitzdWNoIHRlcm0gb3IgY29uZGl0aW9uIG9yIGFueSBzdWJzZXF1ZW50IGJyZWFjaCB0aGVyZW9mLgorCisxNy4gRElTQ0xBSU1FUiBPRiBXQVJSQU5UWQorCitURUFNU1BFQUsgU09GVFdBUkUgSVMgUFJPVklERUQgT04gQU4gIkFTIElTIiBCQVNJUywgV0lUSE9VVCBXQVJSQU5UWSBPRgorQU5ZIEtJTkQsIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRQorV0FSUkFOVElFUyBUSEFUIElUIElTIEZSRUUgT0YgREVGRUNUUywgVklSVVMgRlJFRSwgQUJMRSBUTyBPUEVSQVRFIE9OIEFOCitVTklOVEVSUlVQVEVEIEJBU0lTLCBNRVJDSEFOVEFCTEUsIEZJVCBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgT1IKK05PTi1JTkZSSU5HSU5HLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMCitQQVJUIE9GIFRISVMgTElDRU5TRSBBTkQgQUdSRUVNRU5ULiBOTyBVU0UgT0YgVEVBTVNQRUFLIFNPRlRXQVJFIElTCitBVVRIT1JJWkVEIEhFUkVVTkRFUiBFWENFUFQgVU5ERVIgVEhJUyBESVNDTEFJTUVSLgorCisxOC4gTElNSVRBVElPTiBPRiBMSUFCSUxJVFkKKworVE8gVEhFIE1BWElNVU0gRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVywgSU4gTk8gRVZFTlQgV0lMTAorVEVBTVNQRUFLIFNZU1RFTVMgR01CSCBOT1IgVFJJVE9OIENJICYgQVNTT0NJQVRFUywgSU5DLiBCRSBMSUFCTEUgRk9SCitBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUCitPRiBUSEUgVVNFIE9GIE9SIElOQUJJTElUWSBUTyBVU0UgVEVBTVNQRUFLIFNPRlRXQVJFLCBJTkNMVURJTkcsIFdJVEhPVVQKK0xJTUlUQVRJT04sIERBTUFHRVMgRk9SIExPU1QgUFJPRklUUywgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwKK0NPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUworT1IgTE9TU0VTLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIFRIRVJFT0YsIEFORCBSRUdBUkRMRVNTIE9GCitUSEUgTEVHQUwgT1IgRVFVSVRBQkxFIFRIRU9SWSAoQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFKSBVUE9OIFdISUNICitUSEUgQ0xBSU0gSVMgQkFTRUQuIElOIEFOWSBDQVNFLCBURUFNU1BFQUsgU1lTVEVNUycgT1IgVFJJVE9OIENJICYKK0FTU09DSUFURVMsIElOQy4nUyBDT0xMRUNUSVZFIExJQUJJTElUWSBVTkRFUiBBTlkgUFJPVklTSU9OIE9GIFRISVMKK0xJQ0VOU0UgU0hBTEwgTk9UIEVYQ0VFRCBJTiBUSEUgQUdHUkVHQVRFIFRIRSBTVU0gT0YgVEhFIEZFRVMgKElGIEFOWSkKK1lPVSBQQUlEIEZPUiBUSElTIExJQ0VOU0UuCmRpZmYgLS1naXQgYS9saWNlbnNlcy90a01PTyBiL2xpY2Vuc2VzL3RrTU9PCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4ODllODIKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy90a01PTwpAQCAtMCwwICsxLDIwIEBACit0a01PTy1saWdodCBpcyBDb3B5cmlnaHQgKGMpIEFuZHJldyBXaWxzb24gMTk5NCwxOTk1LDE5OTYsMTk5NywxOTk4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDE5OTksMjAwMCwyMDAxCisKKwlBbGwgUmlnaHRzIFJlc2VydmVkCisKK1Blcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIHByaXZhdGUsIGFjYWRlbWljCithbmQgbm9uLWNvbW1lcmNpYWwgdXNlLiBObyBjb21tZXJjaWFsIG9yIHByb2ZpdGFibGUgdXNlIG9mIHRoaXMKK3NvZnR3YXJlIG1heSBiZSBtYWRlIHdpdGhvdXQgdGhlIHByaW9yIHBlcm1pc3Npb24gb2YgdGhlIGF1dGhvci4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBTkRSRVcgV0lMU09OIGBgQVMgSVMnJyBBTkQgQU5ZCitFWFBSRVNTRUQgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKK1RIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBTkRSRVcgV0lMU09OIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVAorT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SCitCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwKK1dIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFCitPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLAorRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL3RvcnF1ZS0yLjUgYi9saWNlbnNlcy90b3JxdWUtMi41Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxZDliZDIKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy90b3JxdWUtMi41CkBAIC0wLDAgKzEsODQgQEAKKyAgICAgICAgICAgICAgICAgICAgIFRPUlFVRSB2Mi41KyBTb2Z0d2FyZSBMaWNlbnNlIHYxLjEgCisKK0NvcHlyaWdodCAoYykgMjAxMC0yMDExIEFkYXB0aXZlIENvbXB1dGluZyBFbnRlcnByaXNlcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiAKKworVXNlIHRoaXMgbGljZW5zZSB0byB1c2Ugb3IgcmVkaXN0cmlidXRlIHRoZSBUT1JRVUUgc29mdHdhcmUgdjIuNSsgYW5kIGxhdGVyIHZlcnNpb25zLiAKKworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0ZvciBmcmVlIHN1cHBvcnQgZm9yIFRPUlFVRSB1c2VycywgcXVlc3Rpb25zIHNob3VsZCBiZSBlbWFpbGVkIHRvIHRoZSBjb21tdW5pdHkgb2YgCitUT1JRVUUgdXNlcnMgYXQgdG9ycXVldXNlcnNAc3VwZXJjbHVzdGVyLm9yZy4gVXNlcnMgY2FuIGFsc28gc3Vic2NyaWJlIHRvIHRoZSB1c2VyIAorbWFpbGluZyBsaXN0IGF0IGh0dHA6Ly93d3cuc3VwZXJjbHVzdGVyLm9yZy9tYWlsbWFuL2xpc3RpbmZvL3RvcnF1ZXVzZXJzLiAKKworQ3VzdG9tZXJzIHVzaW5nIFRPUlFVRSB0aGF0IGFsc28gYXJlIGxpY2Vuc2VkIHVzZXJzIG9mIE1vYWIgYnJhbmRlZCBzb2Z0d2FyZSBmcm9tIAorQWRhcHRpdmUgQ29tcHV0aW5nIEluYy4gY2FuIGdldCBUT1JRVUUgc3VwcG9ydCBmcm9tIEFkYXB0aXZlIENvbXB1dGluZyB2aWE6IAorCisgICAgIEVtYWlsOiB0b3JxdWUtc3VwcG9ydEBhZGFwdGl2ZWNvbXB1dGluZy5jb20uIAorCisgICAgIFBob25lOiAoODAxKSA3MTctMzcwMCAKKworICAgICBXZWI6IHd3dy5hZGFwdGl2ZWNvbXB1dGluZy5jb20gd3d3LmNsdXN0ZXJyZXNvdXJjZXMuY29tIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGlzIGxpY2Vuc2UgY292ZXJzIHVzZSBvZiB0aGUgVE9SUVVFIHYyLjUgc29mdHdhcmUgKHRoZSAiU29mdHdhcmUiKSBhdCB5b3VyIHNpdGUgb3IgCitsb2NhdGlvbiwgYW5kLCBmb3IgY2VydGFpbiB1c2VycywgcmVkaXN0cmlidXRpb24gb2YgdGhlIFNvZnR3YXJlIHRvIG90aGVyIHNpdGVzIGFuZCAKK2xvY2F0aW9ucy4gIExhdGVyIHZlcnNpb25zIG9mIFRPUlFVRSBhcmUgYWxzbyBjb3ZlcmVkIGJ5IHRoaXMgbGljZW5zZS4gCitVc2UgYW5kIHJlZGlzdHJpYnV0aW9uIG9mIFRPUlFVRSB2Mi41IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgCittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCBhbGwgb2YgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQuIAorCisxLiAgQW55IFJlZGlzdHJpYnV0aW9uIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGUgCisgICAgYWNrbm93bGVkZ21lbnQgY29udGFpbmVkIGluIHBhcmFncmFwaCA1LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGRpc2NsYWltZXIgCisgICAgY29udGFpbmVkIGluIHBhcmFncmFwaCA1LiAKKworMi4gIEFueSBSZWRpc3RyaWJ1dGlvbiBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhlIAorICAgIGFja25vd2xlZGdtZW50IGNvbnRhaW5lZCBpbiBwYXJhZ3JhcGggNCwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBkaXNjbGFpbWVyIAorICAgIGNvbnRhaW5lZCBpbiBwYXJhZ3JhcGggNSBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggCisgICAgdGhlIGRpc3RyaWJ1dGlvbi4gCisKKzMuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYW55IGZvcm0gbXVzdCBiZSBhY2NvbXBhbmllZCBieSBpbmZvcm1hdGlvbiBvbiBob3cgdG8gb2J0YWluIAorICAgIGNvbXBsZXRlIHNvdXJjZSBjb2RlIGZvciBUT1JRVUUgYW5kIGFueSBtb2RpZmljYXRpb25zIGFuZC9vciBhZGRpdGlvbnMgdG8gCisgICAgVE9SUVVFLiBUaGUgc291cmNlIGNvZGUgbXVzdCBlaXRoZXIgYmUgaW5jbHVkZWQgaW4gdGhlIGRpc3RyaWJ1dGlvbiBvciBiZSBhdmFpbGFibGUgCisgICAgZm9yIG5vIG1vcmUgdGhhbiB0aGUgY29zdCBvZiBkaXN0cmlidXRpb24gcGx1cyBhIG5vbWluYWwgZmVlLCBhbmQgYWxsIG1vZGlmaWNhdGlvbnMgYW5kIAorICAgIGFkZGl0aW9ucyB0byB0aGUgU29mdHdhcmUgbXVzdCBiZSBmcmVlbHkgcmVkaXN0cmlidXRhYmxlIGJ5IGFueSBwYXJ0eSAoaW5jbHVkaW5nIAorICAgIExpY2Vuc29yKSB3aXRob3V0IHJlc3RyaWN0aW9uLiAKKworNC4gIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhlIFNvZnR3YXJlIG11c3QgZGlzcGxheSB0aGUgCisgICAgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OiAKKworICAgICAgIlRPUlFVRSBpcyBhIG1vZGlmaWNhdGlvbiBvZiBPcGVuUEJTIHdoaWNoIHdhcyBkZXZlbG9wZWQgYnkgTkFTQSBBbWVzIAorICAgICAgIFJlc2VhcmNoIENlbnRlciwgTGF3cmVuY2UgTGl2ZXJtb3JlIE5hdGlvbmFsIExhYm9yYXRvcnksIGFuZCBWZXJpZGlhbiAKKyAgICAgICBJbmZvcm1hdGlvbiBTb2x1dGlvbnMsIEluYy4gVmlzaXQgd3d3LmNsdXN0ZXJyZXNvdXJjZXMuY29tL3Byb2R1Y3RzLyBmb3IgbW9yZSAKKyAgICAgICBpbmZvcm1hdGlvbiBhYm91dCBUT1JRVUUgYW5kIHRvIGRvd25sb2FkIFRPUlFVRS4gCisKKyAgICAgICBGb3IgaW5mb3JtYXRpb24gYWJvdXQgTW9hYiBicmFuZGVkIHByb2R1Y3RzIGFuZCBzbyByZWNlaXZlIHN1cHBvcnQgZnJvbSBBZGFwdGl2ZSAKKyAgICAgICBDb21wdXRpbmcgZm9yIFRPUlFVRSwgc2VlIHd3dy5hZGFwdGl2ZWNvbXB1dGluZy5jb20u4oCdIAorCis1LiBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIAorCisgICAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELiAKKyAgICAgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgCisgICAgIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLCBGSVRORVNTIEZPUiBBIAorICAgICBQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBOT04tSU5GUklOR0VNRU5UIEFSRSBFWFBSRVNTTFkgCisgICAgIERJU0NMQUlNRUQuIAorCisgICAgIElOIE5PIEVWRU5UIFNIQUxMIEFEQVBUSVZFIENPTVBVVElORyBFTlRFUlBSSVNFUywgSU5DLiAKKyAgICAgQ09SUE9SQVRJT04sIElUUyBBRkZJTElBVEVEIENPTVBBTklFUywgT1IgVEhFIFUuUy4gR09WRVJOTUVOVCBPUiAKKyAgICAgQU5ZIE9GIElUUyBBR0VOQ0lFUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QgT1IgSU5ESVJFQ1QsIAorICAgICBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAKKyAgICAgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIAorICAgICBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgCisgICAgIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiAKKyAgICAgQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIAorICAgICBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCAKKyAgICAgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisKK1RoaXMgbGljZW5zZSB3aWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIFV0YWgsIHdpdGhvdXQgcmVmZXJlbmNlIHRvIGl0cyBjaG9pY2Ugb2YgbGF3IAorcnVsZXMuIAorCitOb3RlIDE6IFRPUlFVRSBpcyBkZXZlbG9wZWQgZnJvbSBhbiBlYXJsaWVyIHZlcnNpb24gdjIuMyBvZiBPcGVuUEJTLiBUT1JRVUUgaGFzIAorYmVlbiBkZXZlbG9wZWQgYmV5b25kIE9wZW5QQlMgdjIuMy4gVGhlIE9wZW5QQlMgdjIuMyBsaWNlbnNlIGFuZCBPcGVuUEJTIHNvZnR3YXJlIAorY2FuIGJlIG9idGFpbmVkIGF0OiAKKworaHR0cDovL3d3dy5wYnN3b3Jrcy5jb20vUmVzTGliU2VhcmNoUmVzdWx0LmFzcHg/a2V5d29yZHM9b3BlbnBicyZpbmR1c3RyeT1BbGwmcHJvIAorZHVjdF9zZXJ2aWNlPUFsbCZjYXRlZ29yeT1GcmVlJTIwU29mdHdhcmUlMjBEb3dubG9hZHMmb3JkZXJfYnk9dGl0bGUuIFVzZXJzIG9mIAorVE9SUVVFIHNob3VsZCBjb21wbHkgd2l0aCB0aGUgVE9SUVVFIGxpY2Vuc2UgYXMgd2VsbCBhcyB0aGUgT3BlblBCUyBsaWNlbnNlLiAKKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvdHJ1ZWNyeXB0LTMuMCBiL2xpY2Vuc2VzL3RydWVjcnlwdC0zLjAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYwODkwNgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL3RydWVjcnlwdC0zLjAKQEAgLTAsMCArMSwxNjggQEAKK1RydWVDcnlwdCBMaWNlbnNlIFZlcnNpb24gMy4wCisKKworU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhpcyBsaWNlbnNlIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgQkFTSVMgV0lUSE9VVCBXQVJSQU5USUVTIE9GIEFOWSBLSU5ELiBUSEUgQVVUSE9SUyBBTkQgRElTVFJJQlVUT1JTIE9GIFRIRSBTT0ZUV0FSRSBESVNDTEFJTSBBTlkgTElBQklMSVRZLiBBTllPTkUgV0hPIFVTRVMsIENPUElFUywgTU9ESUZJRVMsIE9SIChSRSlESVNUUklCVVRFUyBBTlkgUEFSVCBPRiBUSEUgU09GVFdBUkUgSVMsIEJZIFNVQ0ggQUNUSU9OKFMpLCBBQ0NFUFRJTkcgQU5EIEFHUkVFSU5HIFRPIEJFIEJPVU5EIEJZIEFMTCBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIExJQ0VOU0UuIElGIFlPVSBETyBOT1QgQUNDRVBUIFRIRU0sIERPIE5PVCBVU0UsIENPUFksIE1PRElGWSwgTk9SIChSRSlESVNUUklCVVRFIFRIRSBTT0ZUV0FSRSwgTk9SIEFOWSBQQVJUKFMpIFRIRVJFT0YuCisKKworSS4gRGVmaW5pdGlvbnMKKworMS4gIlRoaXMgUHJvZHVjdCIgbWVhbnMgdGhlIHdvcmsgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCBzb3VyY2UgY29kZSwgZ3JhcGhpY3MsIHRleHRzLCBhbmQgYWNjb21wYW55aW5nIGZpbGVzKSBtYWRlIGF2YWlsYWJsZSB1bmRlciBhbmQgZ292ZXJuZWQgYnkgdGhpcyB2ZXJzaW9uIG9mIHRoaXMgbGljZW5zZSAoIkxpY2Vuc2UiKSwgYXMgbWF5IGJlIGluZGljYXRlZCBieSwgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBjb3B5cmlnaHQgbm90aWNlKHMpIGF0dGFjaGVkIHRvIG9yIGluY2x1ZGVkIGluIHRoZSB3b3JrLgorCisyLiAiWW91IiBtZWFucyAoYW5kICJZb3VyIiByZWZlcnMgdG8pIGFuIGluZGl2aWR1YWwgb3IgYSBsZWdhbCBlbnRpdHkgKGUuZy4sIGEgbm9uLXByb2ZpdCBvcmdhbml6YXRpb24sIGNvbW1lcmNpYWwgb3JnYW5pemF0aW9uLCBnb3Zlcm5tZW50IGFnZW5jeSwgZXRjLikgZXhlcmNpc2luZyBwZXJtaXNzaW9ucyBncmFudGVkIGJ5IHRoaXMgTGljZW5zZS4KKworMy4gIk1vZGlmaWNhdGlvbiIgbWVhbnMgKGFuZCAibW9kaWZ5IiByZWZlcnMgdG8pIGFueSBhbHRlcmF0aW9uIG9mIFRoaXMgUHJvZHVjdCwgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIGFkZGl0aW9uIHRvIG9yIGRlbGV0aW9uIGZyb20gdGhlIHN1YnN0YW5jZSBvciBzdHJ1Y3R1cmUgb2YgVGhpcyBQcm9kdWN0LCB0cmFuc2xhdGlvbiBpbnRvIGFub3RoZXIgbGFuZ3VhZ2UsIHJlcGFja2FnaW5nLCBhbHRlcmF0aW9uIG9yIHJlbW92YWwgb2YgYW55IGZpbGUgaW5jbHVkZWQgd2l0aCBUaGlzIFByb2R1Y3QsIGFuZCBhZGRpdGlvbiBvZiBhbnkgbmV3IGZpbGVzIHRvIFRoaXMgUHJvZHVjdC4KKworNC4gIllvdXIgUHJvZHVjdCIgbWVhbnMgVGhpcyBQcm9kdWN0IG1vZGlmaWVkIGJ5IFlvdSwgb3IgYW55IHdvcmsgWW91IGRlcml2ZSBmcm9tIChvciBiYXNlIG9uKSBhbnkgcGFydCBvZiBUaGlzIFByb2R1Y3QuIEluIGFkZGl0aW9uLCAiWW91ciBQcm9kdWN0IiBtZWFucyBhbnkgd29yayBpbiB3aGljaCBZb3UgaW5jbHVkZSBhbnkgKG1vZGlmaWVkIG9yIHVubW9kaWZpZWQpIHBvcnRpb24gb2YgVGhpcyBQcm9kdWN0LiBIb3dldmVyLCBpZiB0aGUgd29yayBpbiB3aGljaCB5b3UgaW5jbHVkZSBpdCBpcyBhbiBhZ2dyZWdhdGUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIChzdWNoIGFzIGFuIG9wZXJhdGluZyBzeXN0ZW0gZGlzdHJpYnV0aW9uIG9yIGEgY292ZXIgQ0QtUk9NIG9mIGEgbWFnYXppbmUpIGNvbnRhaW5pbmcgbXVsdGlwbGUgc2VwYXJhdGUgcHJvZHVjdHMsIHRoZW4gdGhlIHRlcm0gIllvdXIgUHJvZHVjdCIgaW5jbHVkZXMgb25seSB0aG9zZSBwcm9kdWN0cyAoaW4gdGhlIGFnZ3JlZ2F0ZSBzb2Z0d2FyZSBkaXN0cmlidXRpb24pIHRoYXQgdXNlLCBpbmNsdWRlLCBvciBkZXBlbmQgb24gYSBtb2RpZmllZCBvciB1bm1vZGlmaWVkIHZlcnNpb24gb2YgVGhpcyBQcm9kdWN0IChhbmQgdGhlIHRlcm0gIllvdXIgUHJvZHVjdCIgZG9lcyBub3QgaW5jbHVkZSB0aGUgd2hvbGUgYWdncmVnYXRlIHNvZnR3YXJlIGRpc3RyaWJ1dGlvbikuIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBMaWNlbnNlLCBhIHByb2R1Y3Qgc3VpdGUgY29uc2lzdGluZyBvZiB0d28gb3IgbW9yZSBwcm9kdWN0cyBpcyBjb25zaWRlcmVkIGEgc2luZ2xlIHByb2R1Y3QgKG9wZXJhdGluZyBzeXN0ZW0gZGlzdHJpYnV0aW9ucyBhbmQgY292ZXIgbWVkaWEgb2YgbWFnYXppbmVzIGFyZSBub3QgY29uc2lkZXJlZCBwcm9kdWN0IHN1aXRlcykuCisKKzUuICJEaXN0cmlidXRpb24iIG1lYW5zIChhbmQgImRpc3RyaWJ1dGUiIHJlZmVycyB0byksIHJlZ2FyZGxlc3Mgb2YgbWVhbnMgb3IgbWV0aG9kcywgY29udmV5YW5jZSwgdHJhbnNmZXIsIHByb3ZpZGluZywgb3IgbWFraW5nIGF2YWlsYWJsZSBvZiBUaGlzL1lvdXIgUHJvZHVjdCBvciBwb3J0aW9ucyB0aGVyZW9mIHRvIHRoaXJkIHBhcnRpZXMgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCBtYWtpbmcgVGhpcy9Zb3VyIFByb2R1Y3QsIG9yIHBvcnRpb25zIHRoZXJlb2YsIGF2YWlsYWJsZSBmb3IgZG93bmxvYWQgdG8gdGhpcmQgcGFydGllcywgd2hldGhlciBvciBub3QgYW55IHRoaXJkIHBhcnR5IGhhcyBkb3dubG9hZGVkIHRoZSBwcm9kdWN0LCBvciBhbnkgcG9ydGlvbiB0aGVyZW9mLCBtYWRlIGF2YWlsYWJsZSBmb3IgZG93bmxvYWQpLgorCisKKworSUkuIFVzZSwgQ29weWluZywgYW5kIERpc3RyaWJ1dGlvbiBvZiBUaGlzIFByb2R1Y3QKKworMS4gUHJvdmlkZWQgdGhhdCBZb3UgY29tcGx5IHdpdGggYWxsIGFwcGxpY2FibGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCBZb3UgbWF5IG1ha2UgY29waWVzIG9mIFRoaXMgUHJvZHVjdCAodW5tb2RpZmllZCkgYW5kIGRpc3RyaWJ1dGUgY29waWVzIG9mIFRoaXMgUHJvZHVjdCAodW5tb2RpZmllZCkgdGhhdCBhcmUgbm90IGluY2x1ZGVkIGluIGFub3RoZXIgcHJvZHVjdCBmb3JtaW5nIFlvdXIgUHJvZHVjdCAoZXhjZXB0IGFzIHBlcm1pdHRlZCB1bmRlciBDaGFwdGVyIElJSSkuIE5vdGU6IEZvciB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZyBhbmQgZGlzdHJpYnV0aW9uIG9mIG1vZGlmaWVkIHZlcnNpb25zIG9mIFRoaXMgUHJvZHVjdCwgc2VlIENoYXB0ZXIgSUlJLgorCisyLiBQcm92aWRlZCB0aGF0IFlvdSBjb21wbHkgd2l0aCBhbGwgYXBwbGljYWJsZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIFlvdSBtYXkgdXNlIFRoaXMgUHJvZHVjdCBmcmVlbHkgKHNlZSBhbHNvIENoYXB0ZXIgSUlJKSBvbiBhbnkgbnVtYmVyIG9mIGNvbXB1dGVycy9zeXN0ZW1zIGZvciBub24tY29tbWVyY2lhbCBhbmQvb3IgY29tbWVyY2lhbCBwdXJwb3Nlcy4KKworCisKK0lJSS4gTW9kaWZpY2F0aW9uLCBEZXJpdmF0aW9uLCBhbmQgSW5jbHVzaW9uIGluIE90aGVyIFByb2R1Y3RzCisKKzEuIElmIGFsbCBjb25kaXRpb25zIHNwZWNpZmllZCBpbiB0aGUgZm9sbG93aW5nIHBhcmFncmFwaHMgaW4gdGhpcyBDaGFwdGVyIChJSUkpIGFyZSBtZXQgKGZvciBleGNlcHRpb25zLCBzZWUgU2VjdGlvbiBJSUkuMikgYW5kIGlmIFlvdSBjb21wbHkgd2l0aCBhbGwgb3RoZXIgYXBwbGljYWJsZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIFlvdSBtYXkgbW9kaWZ5IFRoaXMgUHJvZHVjdCAodGh1cyBmb3JtaW5nIFlvdXIgUHJvZHVjdCksIGRlcml2ZSBuZXcgd29ya3MgZnJvbSBUaGlzIFByb2R1Y3Qgb3IgcG9ydGlvbnMgdGhlcmVvZiAodGh1cyBmb3JtaW5nIFlvdXIgUHJvZHVjdCksIGluY2x1ZGUgVGhpcyBQcm9kdWN0IG9yIHBvcnRpb25zIHRoZXJlb2YgaW4gYW5vdGhlciBwcm9kdWN0ICh0aHVzIGZvcm1pbmcgWW91ciBQcm9kdWN0LCB1bmxlc3MgZGVmaW5lZCBvdGhlcndpc2UgaW4gQ2hhcHRlciBJKSwgYW5kIFlvdSBtYXkgdXNlIChmb3Igbm9uLWNvbW1lcmNpYWwgYW5kL29yIGNvbW1lcmNpYWwgcHVycG9zZXMpLCBjb3B5LCBhbmQvb3IgZGlzdHJpYnV0ZSBZb3VyIFByb2R1Y3QuCisKKyAgIDEuIFRoZSBuYW1lIG9mIFlvdXIgUHJvZHVjdCAob3Igb2YgWW91ciBtb2RpZmllZCB2ZXJzaW9uIG9mIFRoaXMgUHJvZHVjdCkgbXVzdCBub3QgY29udGFpbiB0aGUgbmFtZSBUcnVlQ3J5cHQgKGZvciBleGFtcGxlLCB0aGUgZm9sbG93aW5nIG5hbWVzIGFyZSBub3QgYWxsb3dlZDogVHJ1ZUNyeXB0LCBUcnVlQ3J5cHQrLCBUcnVlQ3J5cHQgUHJvZmVzc2lvbmFsLCBpVHJ1ZUNyeXB0LCBldGMuKSBub3IgYW55IG90aGVyIG5hbWVzIGNvbmZ1c2luZ2x5IHNpbWlsYXIgdG8gdGhlIG5hbWUgVHJ1ZUNyeXB0IChlLmcuLCBUcnVlLUNyeXB0LCBUcnVlIENyeXB0LCBUcnVLcnlwdCwgZXRjLikKKworICAgICAgTm90ZTogVHJ1ZUNyeXB0IGFuZCB0aGUgVHJ1ZUNyeXB0IGxvZ28gYXJlIHJlZ2lzdGVyZWQgdHJhZGVtYXJrcy4gVGhlIGdvYWwgaXMgbm90IHRvIG1vbmV0aXplIHRoZSBuYW1lIG9yIHRoZSBwcm9kdWN0LCBidXQgdG8gcHJvdGVjdCB0aGUgcmVwdXRhdGlvbiBvZiBUcnVlQ3J5cHQsIGFuZCB0byBwcmV2ZW50IHN1cHBvcnQgaXNzdWVzIGFuZCBvdGhlciBraW5kcyBvZiBpc3N1ZXMgdGhhdCBtaWdodCBhcmlzZSBmcm9tIHRoZSBleGlzdGVuY2Ugb2Ygc2ltaWxhciBwcm9kdWN0cyB3aXRoIHRoZSBzYW1lIG9yIHNpbWlsYXIgbmFtZS4gRXZlbiB0aG91Z2ggVHJ1ZUNyeXB0IGFuZCB0aGUgVHJ1ZUNyeXB0IGxvZ28gYXJlIHRyYWRlbWFya3MsIFRydWVDcnlwdCBpcyBhbmQgd2lsbCByZW1haW4gb3Blbi1zb3VyY2UgYW5kIGZyZWUgc29mdHdhcmUuCisKKyAgICAgIEFsbCBvY2N1cnJlbmNlcyBvZiB0aGUgbmFtZSBUcnVlQ3J5cHQgdGhhdCBjb3VsZCByZWFzb25hYmx5IGJlIGNvbnNpZGVyZWQgdG8gaWRlbnRpZnkgWW91ciBQcm9kdWN0IG11c3QgYmUgcmVtb3ZlZCBmcm9tIFlvdXIgUHJvZHVjdCBhbmQgZnJvbSBhbnkgYXNzb2NpYXRlZCBtYXRlcmlhbHMuIExvZ28ocykgaW5jbHVkZWQgaW4gKG9yIGF0dGFjaGVkIHRvKSBZb3VyIFByb2R1Y3QgKGFuZCBpbi90byBhc3NvY2lhdGVkIG1hdGVyaWFscykgbXVzdCBub3QgaW5jb3Jwb3JhdGUgYW5kIG11c3Qgbm90IGJlIGNvbmZ1c2luZ2x5IHNpbWlsYXIgdG8gYW55IG9mIHRoZSBUcnVlQ3J5cHQgbG9nb3MgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCB0aGUgbm9uLXRleHR1YWwgbG9nbyBjb25zaXN0aW5nIHByaW1hcmlseSBvZiBhIGtleSBpbiBzdHlsaXplZCBmb3JtKSBvciBwb3J0aW9uKHMpIHRoZXJlb2YuIEFsbCBncmFwaGljcyBjb250YWluZWQgaW4gVGhpcyBQcm9kdWN0IChsb2dvcywgaWNvbnMsIGV0Yy4pIG11c3QgYmUgcmVtb3ZlZCBmcm9tIFlvdXIgUHJvZHVjdCAob3IgZnJvbSBZb3VyIG1vZGlmaWVkIHZlcnNpb24gb2YgVGhpcyBQcm9kdWN0KSBhbmQgZnJvbSBhbnkgYXNzb2NpYXRlZCBtYXRlcmlhbHMuCisKKyAgIDIuIFRoZSBmb2xsb3dpbmcgcGhyYXNlcyBtdXN0IGJlIHJlbW92ZWQgZnJvbSBZb3VyIFByb2R1Y3QgYW5kIGZyb20gYW55IGFzc29jaWF0ZWQgbWF0ZXJpYWxzLCBleGNlcHQgdGhlIHRleHQgb2YgdGhpcyBMaWNlbnNlOiAiQSBUcnVlQ3J5cHQgRm91bmRhdGlvbiBSZWxlYXNlIiwgIlJlbGVhc2VkIGJ5IFRydWVDcnlwdCBGb3VuZGF0aW9uIiwgIlRoaXMgaXMgYSBUcnVlQ3J5cHQgRm91bmRhdGlvbiByZWxlYXNlLiIKKworICAgMy4gUGhyYXNlICJCYXNlZCBvbiBUcnVlQ3J5cHQsIGZyZWVseSBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy50cnVlY3J5cHQub3JnLyIgbXVzdCBiZSBkaXNwbGF5ZWQgYnkgWW91ciBQcm9kdWN0IChpZiB0ZWNobmljYWxseSBmZWFzaWJsZSkgYW5kIGNvbnRhaW5lZCBpbiBpdHMgZG9jdW1lbnRhdGlvbi4gQWx0ZXJuYXRpdmVseSwgaWYgVGhpcyBQcm9kdWN0IG9yIGl0cyBwb3J0aW9uIFlvdSBpbmNsdWRlZCBpbiBZb3VyIFByb2R1Y3QgY29uc3RpdHV0ZXMgb25seSBhIG1pbm9yIHBvcnRpb24gb2YgWW91ciBQcm9kdWN0LCBwaHJhc2UgIlBvcnRpb25zIG9mIHRoaXMgcHJvZHVjdCBhcmUgYmFzZWQgaW4gcGFydCBvbiBUcnVlQ3J5cHQsIGZyZWVseSBhdmFpbGFibGUgYXQgaHR0cDovL3d3dy50cnVlY3J5cHQub3JnLyIgbWF5IGJlIGRpc3BsYXllZCBpbnN0ZWFkLiBJbiBlYWNoIG9mIHRoZSBjYXNlcyBtZW50aW9uZWQgYWJvdmUgaW4gdGhpcyBwYXJhZ3JhcGgsICJodHRwOi8vd3d3LnRydWVjcnlwdC5vcmcvIiBtdXN0IGJlIGEgaHlwZXJsaW5rIChpZiB0ZWNobmljYWxseSBmZWFzaWJsZSkgcG9pbnRpbmcgdG8gaHR0cDovL3d3dy50cnVlY3J5cHQub3JnLyBhbmQgWW91IG1heSBmcmVlbHkgY2hvb3NlIHRoZSBsb2NhdGlvbiB3aXRoaW4gdGhlIHVzZXIgaW50ZXJmYWNlIChpZiB0aGVyZSBpcyBhbnkpIG9mIFlvdXIgUHJvZHVjdCAoZS5nLiwgYW4gIkFib3V0IiB3aW5kb3csIGV0Yy4pIGFuZCB0aGUgd2F5IGluIHdoaWNoIFlvdXIgUHJvZHVjdCB3aWxsIGRpc3BsYXkgdGhlIHJlc3BlY3RpdmUgcGhyYXNlLgorCisgICAgICBZb3VyIFByb2R1Y3QgKGFuZCBhbnkgYXNzb2NpYXRlZCBtYXRlcmlhbHMsIGUuZy4sIHRoZSBkb2N1bWVudGF0aW9uLCB0aGUgY29udGVudCBvZiB0aGUgb2ZmaWNpYWwgd2ViIHNpdGUgb2YgWW91ciBQcm9kdWN0LCBldGMuKSBtdXN0IG5vdCBwcmVzZW50IGFueSBJbnRlcm5ldCBhZGRyZXNzIGNvbnRhaW5pbmcgdGhlIGRvbWFpbiBuYW1lIHRydWVjcnlwdC5vcmcgKG9yIGFueSBkb21haW4gbmFtZSB0aGF0IGZvcndhcmRzIHRvIHRoZSBkb21haW4gbmFtZSB0cnVlY3J5cHQub3JnKSBpbiBhIG1hbm5lciB0aGF0IG1pZ2h0IHN1Z2dlc3QgdGhhdCBpdCBpcyB3aGVyZSBpbmZvcm1hdGlvbiBhYm91dCBZb3VyIFByb2R1Y3QgbWF5IGJlIG9idGFpbmVkIG9yIHdoZXJlIGJ1Z3MgZm91bmQgaW4gWW91ciBQcm9kdWN0IG1heSBiZSByZXBvcnRlZCBvciB3aGVyZSBzdXBwb3J0IGZvciBZb3VyIFByb2R1Y3QgbWF5IGJlIGF2YWlsYWJsZSBvciBvdGhlcndpc2UgYXR0ZW1wdCB0byBpbmRpY2F0ZSB0aGF0IHRoZSBkb21haW4gbmFtZSB0cnVlY3J5cHQub3JnIGlzIGFzc29jaWF0ZWQgd2l0aCBZb3VyIFByb2R1Y3QuCisKKyAgIDQuIFRoZSBjb21wbGV0ZSBzb3VyY2UgY29kZSBvZiBZb3VyIFByb2R1Y3QgbXVzdCBiZSBmcmVlbHkgYW5kIHB1YmxpY2x5IGF2YWlsYWJsZSAoZm9yIGV4Y2VwdGlvbnMsIHNlZSBTZWN0aW9uIElJSS4yKSBhdCBsZWFzdCB1bnRpbCBZb3UgY2Vhc2UgdG8gZGlzdHJpYnV0ZSBZb3VyIFByb2R1Y3QuIFRoaXMgY29uZGl0aW9uIGNhbiBiZSBtZXQgaW4gb25lIG9yIGJvdGggb2YgdGhlIGZvbGxvd2luZyB3YXlzOiAoaSkgWW91IGluY2x1ZGUgdGhlIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG9mIFlvdXIgUHJvZHVjdCB3aXRoIGV2ZXJ5IGNvcHkgb2YgWW91ciBQcm9kdWN0IHRoYXQgWW91IG1ha2UgYW5kIGRpc3RyaWJ1dGUgYW5kIFlvdSBtYWtlIGFsbCBzdWNoIGNvcGllcyBvZiBZb3VyIFByb2R1Y3QgYXZhaWxhYmxlIHRvIHRoZSBnZW5lcmFsIHB1YmxpYyBmcmVlIG9mIGNoYXJnZSwgYW5kL29yIChpaSkgWW91IGluY2x1ZGUgaW5mb3JtYXRpb24gKHZhbGlkIGFuZCBjb3JyZWN0IGF0IGxlYXN0IHVudGlsIFlvdSBjZWFzZSB0byBkaXN0cmlidXRlIFlvdXIgUHJvZHVjdCkgYWJvdXQgd2hlcmUgdGhlIGNvbXBsZXRlIHNvdXJjZSBjb2RlIG9mIFlvdXIgUHJvZHVjdCBjYW4gYmUgb2J0YWluZWQgZnJlZSBvZiBjaGFyZ2UgKGUuZy4sIGFuIEludGVybmV0IGFkZHJlc3MpIG9yIGZvciBhIHJlYXNvbmFibGUgcmVwcm9kdWN0aW9uIGZlZSB3aXRoIGV2ZXJ5IGNvcHkgb2YgWW91ciBQcm9kdWN0IHRoYXQgWW91IG1ha2UgYW5kIGRpc3RyaWJ1dGUgYW5kLCBpZiB0aGVyZSBpcyBhIHdlYiBzaXRlIG9mZmljaWFsbHkgYXNzb2NpYXRlZCB3aXRoIFlvdXIgUHJvZHVjdCwgWW91IGluY2x1ZGUgdGhlIGFmb3JlbWVudGlvbmVkIGluZm9ybWF0aW9uIGFib3V0IHRoZSBzb3VyY2UgY29kZSBvbiBhIGZyZWVseSBhbmQgcHVibGljbHkgYWNjZXNzaWJsZSB3ZWIgcGFnZSB0byB3aGljaCBzdWNoIHdlYiBzaXRlIGxpbmtzIHZpYSBhbiBlYXNpbHkgdmlld2FibGUgaHlwZXJsaW5rIChhdCBsZWFzdCB1bnRpbCBZb3UgY2Vhc2UgdG8gZGlzdHJpYnV0ZSBZb3VyIFByb2R1Y3QpLgorCisgICAgICBUaGUgc291cmNlIGNvZGUgb2YgWW91ciBQcm9kdWN0IG11c3Qgbm90IGJlIGRlbGliZXJhdGVseSBvYmZ1c2NhdGVkIGFuZCBpdCBtdXN0IG5vdCBiZSBpbiBhbiBpbnRlcm1lZGlhdGUgZm9ybSAoZS5nLiwgdGhlIG91dHB1dCBvZiBhIHByZXByb2Nlc3NvcikuIFNvdXJjZSBjb2RlIG1lYW5zIHRoZSBwcmVmZXJyZWQgZm9ybSBpbiB3aGljaCBhIHByb2dyYW1tZXIgd291bGQgdXN1YWxseSBtb2RpZnkgdGhlIHByb2dyYW0uCisKKyAgICAgIFBvcnRpb25zIG9mIHRoZSBzb3VyY2UgY29kZSBvZiBZb3VyIFByb2R1Y3Qgbm90IGNvbnRhaW5lZCBpbiBUaGlzIFByb2R1Y3QgKGUuZy4sIHBvcnRpb25zIGFkZGVkIGJ5IFlvdSBpbiBjcmVhdGluZyBZb3VyIFByb2R1Y3QsIHdoZXRoZXIgY3JlYXRlZCBieSBZb3Ugb3IgYnkgdGhpcmQgcGFydGllcykgbXVzdCBiZSBhdmFpbGFibGUgdW5kZXIgbGljZW5zZShzKSB0aGF0IChob3dldmVyLCBzZWUgYWxzbyBTdWJzZWN0aW9uIElJSS4xLmUpIGFsbG93KHMpIGFueW9uZSB0byBtb2RpZnkgYW5kIGRlcml2ZSBuZXcgd29ya3MgZnJvbSB0aGUgcG9ydGlvbnMgb2YgdGhlIHNvdXJjZSBjb2RlIHRoYXQgYXJlIG5vdCBjb250YWluZWQgaW4gVGhpcyBQcm9kdWN0IGFuZCB0byB1c2UsIGNvcHksIGFuZCByZWRpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIGFuZC9vciBkZXJpdmF0aXZlIHdvcmtzLiBUaGUgbGljZW5zZShzKSBtdXN0IGJlIHBlcnBldHVhbCwgbm9uLWV4Y2x1c2l2ZSwgcm95YWx0eS1mcmVlLCBuby1jaGFyZ2UsIGFuZCB3b3JsZHdpZGUsIGFuZCBtdXN0IG5vdCBpbnZhbGlkYXRlLCB3ZWFrZW4sIHJlc3RyaWN0LCBpbnRlcnByZXQsIGFtZW5kLCBtb2RpZnksIGludGVyZmVyZSB3aXRoIG9yIG90aGVyd2lzZSBhZmZlY3QgYW55IHBhcnQsIHRlcm0sIHByb3Zpc2lvbiwgb3IgY2xhdXNlIG9mIHRoaXMgTGljZW5zZS4gVGhlIHRleHQocykgb2YgdGhlIGxpY2Vuc2UocykgbXVzdCBiZSBpbmNsdWRlZCB3aXRoIGV2ZXJ5IGNvcHkgb2YgWW91ciBQcm9kdWN0IHRoYXQgWW91IG1ha2UgYW5kIGRpc3RyaWJ1dGUuCisKKyAgICAgIE5vdGU6IElmIHlvdSBjYW5ub3QgY29tcGx5IHdpdGggdGhlIGFib3ZlIHJlcXVpcmVtZW50cywgeW91IG1heSBjb250YWN0IGxpY2Vuc2luZ0B0cnVlY3J5cHQub3JnLgorCisgICA1LiBZb3UgbXVzdCBub3QgY2hhbmdlIHRoZSBsaWNlbnNlIHRlcm1zIG9mIFRoaXMgUHJvZHVjdCBpbiBhbnkgd2F5IChhZGRpbmcgYW55IG5ldyB0ZXJtcyBpcyBjb25zaWRlcmVkIGNoYW5naW5nIHRoZSBsaWNlbnNlIHRlcm1zIGV2ZW4gaWYgdGhlIG9yaWdpbmFsIHRlcm1zIGFyZSByZXRhaW5lZCksIHdoaWNoIG1lYW5zLCBlLmcuLCB0aGF0IG5vIHBhcnQgb2YgVGhpcyBQcm9kdWN0IG1heSBiZSBwdXQgdW5kZXIgYW5vdGhlciBsaWNlbnNlLiBZb3UgbXVzdCBrZWVwIGludGFjdCBhbGwgdGhlIGxlZ2FsIG5vdGljZXMgY29udGFpbmVkIGluIHRoZSBzb3VyY2UgY29kZSBmaWxlcy4gWW91IG11c3QgaW5jbHVkZSB0aGUgZm9sbG93aW5nIGl0ZW1zIHdpdGggZXZlcnkgY29weSBvZiBZb3VyIFByb2R1Y3QgdGhhdCBZb3UgbWFrZSBhbmQgZGlzdHJpYnV0ZTogYSBjbGVhciBhbmQgY29uc3BpY3VvdXMgbm90aWNlIHN0YXRpbmcgdGhhdCBZb3VyIFByb2R1Y3Qgb3IgcG9ydGlvbihzKSB0aGVyZW9mIGlzL2FyZSBnb3Zlcm5lZCBieSB0aGlzIHZlcnNpb24gb2YgdGhlIFRydWVDcnlwdCBMaWNlbnNlLCBhIHZlcmJhdGltIGNvcHkgb2YgdGhpcyB2ZXJzaW9uIG9mIHRoZSBUcnVlQ3J5cHQgTGljZW5zZSAoYXMgY29udGFpbmVkIGhlcmVpbiksIGEgY2xlYXIgYW5kIGNvbnNwaWN1b3VzIG5vdGljZSBjb250YWluaW5nIGluZm9ybWF0aW9uIGFib3V0IHdoZXJlIHRoZSBpbmNsdWRlZCBjb3B5IG9mIHRoZSBMaWNlbnNlIGNhbiBiZSBmb3VuZCwgYW5kIGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UuCisKKworMi4gWW91IGFyZSBub3Qgb2JsaWdhdGVkIHRvIGNvbXBseSB3aXRoIFN1YnNlY3Rpb24gSUlJLjEuZCBpZiBZb3VyIFByb2R1Y3QgaXMgbm90IGRpc3RyaWJ1dGVkIChpLmUuLCBZb3VyIFByb2R1Y3QgaXMgYXZhaWxhYmxlIG9ubHkgdG8gWW91KS4KKworTm90ZTogSWYgeW91IGNhbm5vdCBjb21wbHkgd2l0aCBTdWJzZWN0aW9uIElJSS4xLmQsIHlvdSBtYXkgY29udGFjdCBsaWNlbnNpbmdAdHJ1ZWNyeXB0Lm9yZy4KKworCisKK0lWLiBEaXNjbGFpbWVyIG9mIExpYWJpbGl0eSwgRGlzY2xhaW1lciBvZiBXYXJyYW50eSwgSW5kZW1uaWZpY2F0aW9uCisKK1lvdSBleHByZXNzbHkgYWNrbm93bGVkZ2UgYW5kIGFncmVlIHRvIHRoZSBmb2xsb3dpbmc6CisKKzEuIElOIE5PIEVWRU5UIFdJTEwgQU5ZIChDTylBVVRIT1IgT0YgVEhJUyBQUk9EVUNULCBPUiBBTlkgQVBQTElDQUJMRSBDT1BZUklHSFQvVFJBREVNQVJLIE9XTkVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBDT1BZIEFORC9PUiAoUkUpRElTVFJJQlVURSBUSElTIFBST0RVQ1QgT1IgUE9SVElPTlMgVEhFUkVPRiwgQVMgTUFZIEJFIFBFUk1JVFRFRCBIRVJFSU4sIEJFIExJQUJMRSBUTyBZT1UgT1IgVE8gQU5ZIE9USEVSIFBBUlRZIEZPUiBBTlkgREFNQUdFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIEFOWSBESVJFQ1QsIElORElSRUNULCBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMLCBQVU5JVElWRSwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBDT1JSVVBUSU9OIE9SIExPU1MgT0YgREFUQSwgQU5ZIExPU1NFUyBTVVNUQUlORUQgQlkgWU9VIE9SIFRISVJEIFBBUlRJRVMsIEEgRkFJTFVSRSBPRiBUSElTIFBST0RVQ1QgVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBQUk9EVUNULCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTLCBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBUT1JUIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgTkVHTElHRU5DRSkgT1IgT1RIRVJXSVNFLCBBUklTSU5HIE9VVCBPRiBUSEUgVVNFLCBDT1BZSU5HLCBNT0RJRklDQVRJT04sIE9SIChSRSlESVNUUklCVVRJT04gT0YgVEhJUyBQUk9EVUNUIChPUiBBIFBPUlRJT04gVEhFUkVPRikgT1IgT0YgWU9VUiBQUk9EVUNUIChPUiBBIFBPUlRJT04gVEhFUkVPRiksIE9SIElOQUJJTElUWSBUTyBVU0UgVEhJUyBQUk9EVUNUIChPUiBBIFBPUlRJT04gVEhFUkVPRiksIEVWRU4gSUYgU1VDSCBEQU1BR0VTIChPUiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTKSBBUkUvV0VSRSBQUkVESUNUQUJMRSBPUiBLTk9XTiBUTyBBTlkgKENPKUFVVEhPUiwgQ09QWVJJR0hUL1RSQURFTUFSSyBPV05FUiwgT1IgQU5ZIE9USEVSIFBBUlRZLgorCisyLiBUSElTIFBST0RVQ1QgSVMgUFJPVklERUQgIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBXSEVUSEVSIEVYUFJFU1MsIElNUExJRUQsIE9SIFNUQVRVVE9SWSwgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIEFORCBOT04tSU5GUklOR0VNRU5ULiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRISVMgUFJPRFVDVCBJUyBXSVRIIFlPVS4gU0hPVUxEIFRISVMgUFJPRFVDVCBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiwgT1IgQ09SUkVDVElPTi4KKworMy4gVEhJUyBQUk9EVUNUIE1BWSBJTkNPUlBPUkFURSBJTVBMRU1FTlRBVElPTlMgT0YgQ1JZUFRPR1JBUEhJQyBBTEdPUklUSE1TIFRIQVQgQVJFIFJFR1VMQVRFRCAoRS5HLiwgU1VCSkVDVCBUTyBFWFBPUlQvSU1QT1JUIENPTlRST0wgUkVHVUxBVElPTlMpIE9SIElMTEVHQUwgSU4gU09NRSBDT1VOVFJJRVMuIElUIElTIFNPTEVMWSBZT1VSIFJFU1BPTlNJQklMSVRZIFRPIFZFUklGWSBUSEFUIElUIElTIExFR0FMIFRPIElNUE9SVCBBTkQvT1IgKFJFKUVYUE9SVCBBTkQvT1IgVVNFIFRISVMgUFJPRFVDVCAoT1IgUE9SVElPTlMgVEhFUkVPRikgSU4gQ09VTlRSSUVTIFdIRVJFIFlPVSBJTlRFTkQgVE8gVVNFIElUIEFORC9PUiBUTyBXSElDSCBZT1UgSU5URU5EIFRPIElNUE9SVCBJVCBBTkQvT1IgRlJPTSBXSElDSCBZT1UgSU5URU5EIFRPIEVYUE9SVCBJVCwgQU5EIElUIElTIFNPTEVMWSBZT1VSIFJFU1BPTlNJQklMSVRZIFRPIENPTVBMWSBXSVRIIEFOWSBBUFBMSUNBQkxFIFJFR1VMQVRJT05TLCBSRVNUUklDVElPTlMsIEFORCBMQVdTLgorCis0LiBZT1UgU0hBTEwgSU5ERU1OSUZZLCBERUZFTkQgQU5EIEhPTEQgQUxMIChDTylBVVRIT1JTIE9GIFRISVMgUFJPRFVDVCwgQU5EIEFQUExJQ0FCTEUgQ09QWVJJR0hUL1RSQURFTUFSSyBPV05FUlMsIEhBUk1MRVNTIEZST00gQU5EIEFHQUlOU1QgQU5ZIEFORCBBTEwgTElBQklMSVRZLCBEQU1BR0VTLCBMT1NTRVMsIFNFVFRMRU1FTlRTLCBQRU5BTFRJRVMsIEZJTkVTLCBDT1NUUywgRVhQRU5TRVMgKElOQ0xVRElORyBSRUFTT05BQkxFIEFUVE9STkVZUycgRkVFUyksIERFTUFORFMsIENBVVNFUyBPRiBBQ1RJT04sIENMQUlNUywgQUNUSU9OUywgUFJPQ0VFRElOR1MsIEFORCBTVUlUUywgRElSRUNUTFkgUkVMQVRFRCBUTyBPUiBBUklTSU5HIE9VVCBPRiBZT1VSIFVTRSwgSU5BQklMSVRZIFRPIFVTRSwgQ09QWUlORywgKFJFKURJU1RSSUJVVElPTiwgSU1QT1JUIEFORC9PUiAoUkUpRVhQT1JUIE9GIFRISVMgUFJPRFVDVCAoT1IgUE9SVElPTlMgVEhFUkVPRikgQU5EL09SIFlPVVIgQlJFQUNIIE9GIEFOWSBURVJNIE9GIFRISVMgTElDRU5TRS4KKworCisKK1YuIFRyYWRlbWFya3MKKworVGhpcyBMaWNlbnNlIGRvZXMgbm90IGdyYW50IHBlcm1pc3Npb24gdG8gdXNlIHRyYWRlbWFya3MgYXNzb2NpYXRlZCB3aXRoIChvciBhcHBseWluZyB0bykgVGhpcyBQcm9kdWN0LCBleGNlcHQgZm9yIGZhaXIgdXNlIGFzIGRlZmluZWQgYnkgYXBwbGljYWJsZSBsYXcgYW5kIGV4Y2VwdCBmb3IgdXNlIGV4cHJlc3NseSBwZXJtaXR0ZWQgb3IgcmVxdWlyZWQgYnkgdGhpcyBMaWNlbnNlLiBBbnkgYXR0ZW1wdCBvdGhlcndpc2UgdG8gdXNlIHRyYWRlbWFya3MgYXNzb2NpYXRlZCB3aXRoIChvciBhcHBseWluZyB0bykgVGhpcyBQcm9kdWN0IGF1dG9tYXRpY2FsbHkgYW5kIGltbWVkaWF0ZWx5IHRlcm1pbmF0ZXMgWW91ciByaWdodHMgdW5kZXIgVGhpcyBMaWNlbnNlIGFuZCBtYXkgY29uc3RpdHV0ZSB0cmFkZW1hcmsgaW5mcmluZ2VtZW50ICh3aGljaCBtYXkgYmUgcHJvc2VjdXRlZCkuCisKK1RydWVDcnlwdCBpcyBhIHRyYWRlbWFyayByZWdpc3RlcmVkIHdpdGggdGhlIFdvcmxkIEludGVsbGVjdHVhbCBQcm9wZXJ0eSBPcmdhbml6YXRpb24sIGFuIGFnZW5jeSBvZiB0aGUgVW5pdGVkIE5hdGlvbnMsIChpbnRlcm5hdGlvbmFsIHRyYWRlbWFyayByZWdpc3RyYXRpb24pLCBpbiB0aGUgVS5TLiBQYXRlbnQgYW5kIFRyYWRlbWFyayBPZmZpY2UsIGFuZCBpbiB0aGUgdHJhZGVtYXJrIG9mZmljZXMgb2Ygb3RoZXIgY291bnRyaWVzLiBBbGwgVHJ1ZUNyeXB0IGxvZ29zIGFyZSB0cmFkZW1hcmtzIGFuZCB0aGUgbm9uLXRleHR1YWwgVHJ1ZUNyeXB0IGxvZ28gY29uc2lzdGluZyBwcmltYXJpbHkgb2YgYSBrZXkgaW4gc3R5bGl6ZWQgZm9ybSBpcyBhIHRyYWRlbWFyayByZWdpc3RlcmVkIGluIHRoZSBVLlMuIFBhdGVudCBhbmQgVHJhZGVtYXJrIE9mZmljZS4KKworTm90ZTogVGhlIGdvYWwgaXMgbm90IHRvIG1vbmV0aXplIHRoZSBuYW1lIG9yIHRoZSBwcm9kdWN0LCBidXQgdG8gcHJvdGVjdCB0aGUgcmVwdXRhdGlvbiBvZiBUcnVlQ3J5cHQuIFRydWVDcnlwdCBpcyBhbmQgd2lsbCByZW1haW4gb3Blbi1zb3VyY2UgYW5kIGZyZWUgc29mdHdhcmUuCisKKworCitWSS4gR2VuZXJhbCBUZXJtcyBhbmQgQ29uZGl0aW9ucywgTWlzY2VsbGFuZW91cyBQcm92aXNpb25zCisKKzEuIEFOWU9ORSBXSE8gVVNFUyBBTkQvT1IgQ09QSUVTIEFORC9PUiBNT0RJRklFUyBBTkQvT1IgQ1JFQVRFUyBERVJJVkFUSVZFIFdPUktTIE9GIEFORC9PUiAoUkUpRElTVFJJQlVURVMgVEhJUyBQUk9EVUNULCBPUiBBTlkgUE9SVElPTihTKSBUSEVSRU9GLCBJUywgQlkgU1VDSCBBQ1RJT04oUyksIEFHUkVFSU5HIFRPIEJFIEJPVU5EIEJZIEFORCBBQ0NFUFRJTkcgQUxMIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgTElDRU5TRSAoQU5EIFRIRSBSRVNQT05TSUJJTElUSUVTIEFORCBPQkxJR0FUSU9OUyBDT05UQUlORUQgSU4gVEhJUyBMSUNFTlNFKS4gSUYgWU9VIERPIE5PVCBBQ0NFUFQgKEFORCBBR1JFRSBUTyBCRSBCT1VORCBCWSkgQUxMIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgTElDRU5TRSwgRE8gTk9UIFVTRSwgQ09QWSwgTU9ESUZZLCBDUkVBVEUgREVSSVZBVElWRSBXT1JLUyBPRiwgTk9SIChSRSlESVNUUklCVVRFIFRISVMgUFJPRFVDVCwgTk9SIEFOWSBQT1JUSU9OKFMpIFRIRVJFT0YuCisKKzIuIFlPVSBNQVkgTk9UIFVTRSwgTU9ESUZZLCBDT1BZLCBDUkVBVEUgREVSSVZBVElWRSBXT1JLUyBPRiwgKFJFKURJU1RSSUJVVEUsIE9SIFNVQkxJQ0VOU0UgVEhJUyBQUk9EVUNULCBPUiBQT1JUSU9OKFMpIFRIRVJFT0YsIEVYQ0VQVCBBUyBFWFBSRVNTTFkgUFJPVklERUQgSU4gVEhJUyBMSUNFTlNFIChFVkVOIElGIEFQUExJQ0FCTEUgTEFXIEdJVkVTIFlPVSBNT1JFIFJJR0hUUykuIEFOWSBBVFRFTVBUIChFVkVOIElGIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVykgT1RIRVJXSVNFIFRPIFVTRSwgTU9ESUZZLCBDT1BZLCBDUkVBVEUgREVSSVZBVElWRSBXT1JLUyBPRiwgKFJFKURJU1RSSUJVVEUsIE9SIFNVQkxJQ0VOU0UgVEhJUyBQUk9EVUNULCBPUiBQT1JUSU9OKFMpIFRIRVJFT0YsIEFVVE9NQVRJQ0FMTFkgQU5EIElNTUVESUFURUxZIFRFUk1JTkFURVMgWU9VUiBSSUdIVFMgVU5ERVIgVEhJUyBMSUNFTlNFIEFORCBDQU4gQ09OU1RJVFVURSBDT1BZUklHSFQgSU5GUklOR0VNRU5UIChXSElDSCBNQVkgQkUgUFJPU0VDVVRFRCkuIEFOWSBDT05ESVRJT05TIEFORCBSRVNUUklDVElPTlMgQ09OVEFJTkVEIElOIFRISVMgTElDRU5TRSBBUkUgQUxTTyBMSU1JVEFUSU9OUyBPTiBUSEUgU0NPUEUgT0YgVEhJUyBMSUNFTlNFIEFORCBBTFNPIERFRklORSBUSEUgU0NPUEUgT0YgWU9VUiBSSUdIVFMgVU5ERVIgVEhJUyBMSUNFTlNFLiBZT1VSIEZBSUxVUkUgVE8gQ09NUExZIFdJVEggVEhFIFRFUk1TIEFORCBDT05ESVRJT05TIE9GIFRISVMgTElDRU5TRSBPUiBGQUlMVVJFIFRPIFBFUkZPUk0gQU5ZIEFQUExJQ0FCTEUgT0JMSUdBVElPTiBJTVBPU0VEIEJZIFRISVMgTElDRU5TRSBBVVRPTUFUSUNBTExZIEFORCBJTU1FRElBVEVMWSBURVJNSU5BVEVTIFlPVVIgUklHSFRTIFVOREVSIFRISVMgTElDRU5TRSBBTkQgQ0FOIENBVVNFIE9SIEJFIENPTlNJREVSRUQgQ09QWVJJR0hUIElORlJJTkdFTUVOVCAoV0hJQ0ggTUFZIEJFIFBST1NFQ1VURUQpLiBOT1RISU5HIElOIFRISVMgTElDRU5TRSBTSEFMTCBJTVBMWSBPUiBCRSBDT05TVFJVRUQgQVMgQSBQUk9NSVNFLCBPQkxJR0FUSU9OLCBPUiBDT1ZFTkFOVCBOT1QgVE8gU1VFIEZPUiBDT1BZUklHSFQgT1IgVFJBREVNQVJLIElORlJJTkdFTUVOVCBJRiBZT1UgRE8gTk9UIENPTVBMWSBXSVRIIFRIRSBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIExJQ0VOU0UuCisKKzMuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCBjb25zdGl0dXRlIG9yIGltcGx5IGEgd2FpdmVyIG9mIGFueSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGV4Y2VwdCBhcyBtYXkgYmUgb3RoZXJ3aXNlIGV4cHJlc3NseSBwcm92aWRlZCBpbiB0aGlzIExpY2Vuc2UuIFRoaXMgTGljZW5zZSBkb2VzIG5vdCB0cmFuc2ZlciwgYXNzaWduLCBvciBjb252ZXkgYW55IGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKGUuZy4sIGl0IGRvZXMgbm90IHRyYW5zZmVyIG93bmVyc2hpcCBvZiBjb3B5cmlnaHRzIG9yIHRyYWRlbWFya3MpLgorCis0LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIFlvdSBtYXkgYWxsb3cgYSB0aGlyZCBwYXJ0eSB0byB1c2UgWW91ciBjb3B5IG9mIFRoaXMgUHJvZHVjdCAob3IgYSBjb3B5IHRoYXQgWW91IG1ha2UgYW5kIGRpc3RyaWJ1dGUsIG9yIFlvdXIgUHJvZHVjdCkgcHJvdmlkZWQgdGhhdCB0aGUgdGhpcmQgcGFydHkgZXhwbGljaXRseSBhY2NlcHRzIGFuZCBhZ3JlZXMgdG8gYmUgYm91bmQgYnkgYWxsIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSBhbmQgdGhlIHRoaXJkIHBhcnR5IGlzIG5vdCBwcm9oaWJpdGVkIGZyb20gdXNpbmcgVGhpcyBQcm9kdWN0IChvciBwb3J0aW9ucyB0aGVyZW9mKSBieSB0aGlzIExpY2Vuc2UgKHNlZSwgZS5nLiwgU2VjdGlvbiBWSS43KSBvciBieSBhcHBsaWNhYmxlIGxhdy4gSG93ZXZlciwgWW91IGFyZSBub3Qgb2JsaWdhdGVkIHRvIGVuc3VyZSB0aGF0IHRoZSB0aGlyZCBwYXJ0eSBhY2NlcHRzIChhbmQgYWdyZWVzIHRvIGJlIGJvdW5kIGJ5IGFsbCB0ZXJtcyBvZikgdGhpcyBMaWNlbnNlIGlmIFlvdSBkaXN0cmlidXRlIG9ubHkgdGhlIHNlbGYtZXh0cmFjdGluZyBwYWNrYWdlIChjb250YWluaW5nIFRoaXMgUHJvZHVjdCkgdGhhdCBkb2VzIG5vdCBhbGxvdyB0aGUgdXNlciB0byBpbnN0YWxsIChub3IgZXh0cmFjdCkgdGhlIGZpbGVzIGNvbnRhaW5lZCBpbiB0aGUgcGFja2FnZSB1bnRpbCBoZSBvciBzaGUgYWNjZXB0cyBhbmQgYWdyZWVzIHRvIGJlIGJvdW5kIGJ5IGFsbCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UuCisKKzUuIFdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uIGZyb20gdGhlIGF1dGhvcnMgb2YgVGhpcyBQcm9kdWN0IChvciBmcm9tIHRoZWlyIGNvbW1vbiByZXByZXNlbnRhdGl2ZSksIFlvdSBtdXN0IG5vdCB1c2UgdGhlIG5hbWUgb2YgVGhpcyBQcm9kdWN0LCB0aGUgbmFtZXMgb2YgdGhlIGF1dGhvcnMgb2YgVGhpcyBQcm9kdWN0LCBvciB0aGUgbmFtZXMgb2YgdGhlIGxlZ2FsIGVudGl0aWVzIChvciBpbmZvcm1hbCBncm91cHMpIG9mIHdoaWNoIHRoZSBhdXRob3JzIHdlcmUvYXJlIG1lbWJlcnMvZW1wbG95ZWVzLCB0byBlbmRvcnNlIG9yIHByb21vdGUgWW91ciBQcm9kdWN0IG9yIGFueSB3b3JrIGluIHdoaWNoIFlvdSBpbmNsdWRlIGEgbW9kaWZpZWQgb3IgdW5tb2RpZmllZCB2ZXJzaW9uIG9mIFRoaXMgUHJvZHVjdCwgb3IgdG8gZW5kb3JzZSBvciBwcm9tb3RlIFlvdSBvciBZb3VyIGFmZmlsaWF0ZXMsIG9yIGluIGEgd2F5IHRoYXQgbWlnaHQgc3VnZ2VzdCB0aGF0IFlvdXIgUHJvZHVjdCAob3IgYW55IHdvcmsgaW4gd2hpY2ggWW91IGluY2x1ZGUgYSBtb2RpZmllZCBvciB1bm1vZGlmaWVkIHZlcnNpb24gb2YgVGhpcyBQcm9kdWN0KSwgWW91LCBvciBZb3VyIGFmZmlsaWF0ZXMgaXMvYXJlIGVuZG9yc2VkIGJ5IG9uZSBvciBtb3JlIGF1dGhvcnMgb2YgVGhpcyBQcm9kdWN0LCBvciBpbiBhIHdheSB0aGF0IG1pZ2h0IHN1Z2dlc3QgdGhhdCBvbmUgb3IgbW9yZSBhdXRob3JzIG9mIFRoaXMgUHJvZHVjdCBpcy9hcmUgYWZmaWxpYXRlZCB3aXRoIFlvdSAob3IgWW91ciBhZmZpbGlhdGVzKSBvciBkaXJlY3RseSBwYXJ0aWNpcGF0ZWQgaW4gdGhlIGNyZWF0aW9uIG9mIFlvdXIgUHJvZHVjdCBvciBvZiBhbnkgd29yayBpbiB3aGljaCBZb3UgaW5jbHVkZSBhIG1vZGlmaWVkIG9yIHVubW9kaWZpZWQgdmVyc2lvbiBvZiBUaGlzIFByb2R1Y3QuCisKKzYuIElGIFlPVSBBUkUgTk9UIFNVUkUgV0hFVEhFUiBZT1UgVU5ERVJTVEFORCBBTEwgUEFSVFMgT0YgVEhJUyBMSUNFTlNFIE9SIElGIFlPVSBBUkUgTk9UIFNVUkUgV0hFVEhFUiBZT1UgQ0FOIENPTVBMWSBXSVRIIEFMTCBURVJNUyBBTkQgQ09ORElUSU9OUyBPRiBUSElTIExJQ0VOU0UsIFlPVSBNVVNUIE5PVCBVU0UsIENPUFksIE1PRElGWSwgQ1JFQVRFIERFUklWQVRJVkUgV09SS1MgT0YsIE5PUiAoUkUpRElTVFJJQlVURSBUSElTIFBST0RVQ1QsIE5PUiBBTlkgUE9SVElPTihTKSBPRiBJVC4gWU9VIFNIT1VMRCBDT05TVUxUIFdJVEggQSBMQVdZRVIuCisKKzcuIElGIChJTiBSRUxFVkFOVCBDT05URVhUKSBBTlkgUFJPVklTSU9OIE9GIENIQVBURVIgSVYgT0YgVEhJUyBMSUNFTlNFIElTIFVORU5GT1JDRUFCTEUsIElOVkFMSUQsIE9SIFBST0hJQklURUQgVU5ERVIgQVBQTElDQUJMRSBMQVcgSU4gWU9VUiBKVVJJU0RJQ1RJT04sIFlPVSBIQVZFIE5PIFJJR0hUUyBVTkRFUiBUSElTIExJQ0VOU0UgQU5EIFlPVSBNVVNUIE5PVCBVU0UsIENPUFksIE1PRElGWSwgQ1JFQVRFIERFUklWQVRJVkUgV09SS1MgT0YsIE5PUiAoUkUpRElTVFJJQlVURSBUSElTIFBST0RVQ1QsIE5PUiBBTlkgUE9SVElPTihTKSBUSEVSRU9GLgorCis4LiBFeGNlcHQgYXMgb3RoZXJ3aXNlIHByb3ZpZGVkIGluIHRoaXMgTGljZW5zZSwgaWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UsIG9yIGEgcG9ydGlvbiB0aGVyZW9mLCBpcyBmb3VuZCB0byBiZSBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYXBwbGljYWJsZSBsYXcsIGl0IHNoYWxsIG5vdCBhZmZlY3QgdGhlIHZhbGlkaXR5IG9yIGVuZm9yY2VhYmlsaXR5IG9mIHRoZSByZW1haW5kZXIgb2YgdGhpcyBMaWNlbnNlLCBhbmQgc3VjaCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgcHJvdmlzaW9uIHNoYWxsIGJlIGNvbnN0cnVlZCB0byByZWZsZWN0IHRoZSBvcmlnaW5hbCBpbnRlbnQgb2YgdGhlIHByb3Zpc2lvbiBhbmQgc2hhbGwgYmUgZW5mb3JjZWQgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBlcm1pdHRlZCBieSBhcHBsaWNhYmxlIGxhdyBzbyBhcyB0byBlZmZlY3QgdGhlIG9yaWdpbmFsIGludGVudCBvZiB0aGUgcHJvdmlzaW9uIGFzIGNsb3NlbHkgYXMgcG9zc2libGUuCisKKworVGhpcmQtUGFydHkgTGljZW5zZXMKKworVGhpcyBQcm9kdWN0IGNvbnRhaW5zIGNvbXBvbmVudHMgdGhhdCB3ZXJlIGNyZWF0ZWQgYnkgdGhpcmQgcGFydGllcyBhbmQgdGhhdCBhcmUgZ292ZXJuZWQgYnkgdGhpcmQtcGFydHkgbGljZW5zZXMsIHdoaWNoIGFyZSBjb250YWluZWQgaGVyZWluYWZ0ZXIgKHNlcGFyYXRlZCBieSBsaW5lcyBjb25zaXN0aW5nIG9mIHVuZGVyc2NvcmVzKS4gRWFjaCBvZiB0aGUgdGhpcmQtcGFydHkgbGljZW5zZXMgYXBwbGllcyBvbmx5IHRvIChwb3J0aW9ucyBvZikgdGhlIHNvdXJjZSBjb2RlIGZpbGUocykgaW4gd2hpY2ggdGhlIHRoaXJkLXBhcnR5IGxpY2Vuc2UgaXMgY29udGFpbmVkIG9yIGluIHdoaWNoIGl0IGlzIGV4cGxpY2l0bHkgcmVmZXJlbmNlZCwgYW5kIHRvIGNvbXBpbGVkIG9yIG90aGVyd2lzZSBwcm9jZXNzZWQgZm9ybXMgb2Ygc3VjaCBzb3VyY2UgY29kZS4gTm9uZSBvZiB0aGUgdGhpcmQtcGFydHkgbGljZW5zZXMgYXBwbGllcyB0byBUaGlzIFByb2R1Y3QgYXMgYSB3aG9sZSwgZXZlbiB3aGVuIGl0IHVzZXMgdGVybXMgc3VjaCBhcyAicHJvZHVjdCIsICJwcm9ncmFtIiwgb3IgYW55IG90aGVyIGVxdWl2YWxlbnQgdGVybXMvcGhyYXNlcy4gVGhpcyBQcm9kdWN0IGFzIGEgd2hvbGUgaXMgZ292ZXJuZWQgYnkgdGhlIFRydWVDcnlwdCBMaWNlbnNlIChzZWUgYWJvdmUpLiBTb21lIG9mIHRoZSB0aGlyZC1wYXJ0eSBjb21wb25lbnRzIGhhdmUgYmVlbiBtb2RpZmllZCBieSB0aGUgYXV0aG9ycyBvZiBUaGlzIFByb2R1Y3QuIFVubGVzcyBvdGhlcndpc2Ugc3RhdGVkLCBzdWNoIG1vZGlmaWNhdGlvbnMgYW5kIGFkZGl0aW9ucyBhcmUgZ292ZXJuZWQgYnkgdGhlIFRydWVDcnlwdCBMaWNlbnNlIChzZWUgYWJvdmUpLiBOb3RlOiBVbmxlc3Mgb3RoZXJ3aXNlIHN0YXRlZCwgZ3JhcGhpY3MgYW5kIGZpbGVzIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIHRoZSBzb3VyY2UgY29kZSBhcmUgZ292ZXJuZWQgYnkgdGhlIFRydWVDcnlwdCBMaWNlbnNlLgorCisKK0xpY2Vuc2UgYWdyZWVtZW50IGZvciBFbmNyeXB0aW9uIGZvciB0aGUgTWFzc2VzLgorCitDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMCBQYXVsIExlIFJvdXguIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisKK1RoaXMgcHJvZHVjdCBjYW4gYmUgY29waWVkIGFuZCBkaXN0cmlidXRlZCBmcmVlIG9mIGNoYXJnZSwgaW5jbHVkaW5nIHNvdXJjZSBjb2RlLgorCitZb3UgbWF5IG1vZGlmeSB0aGlzIHByb2R1Y3QgYW5kIHNvdXJjZSBjb2RlLCBhbmQgZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMsIGFuZCB5b3UgbWF5IGRlcml2ZSBuZXcgd29ya3MgYmFzZWQgb24gdGhpcyBwcm9kdWN0LCBwcm92aWRlZCB0aGF0OgorCisxLiBBbnkgcHJvZHVjdCB3aGljaCBpcyBzaW1wbHkgZGVyaXZlZCBmcm9tIHRoaXMgcHJvZHVjdCBjYW5ub3QgYmUgY2FsbGVkIEU0TSwgb3IgRW5jcnlwdGlvbiBmb3IgdGhlIE1hc3Nlcy4KKworMi4gSWYgeW91IHVzZSBhbnkgb2YgdGhlIHNvdXJjZSBjb2RlIGluIHlvdXIgcHJvZHVjdCwgYW5kIHlvdXIgcHJvZHVjdCBpcyBkaXN0cmlidXRlZCB3aXRoIHNvdXJjZSBjb2RlLCB5b3UgbXVzdCBpbmNsdWRlIHRoaXMgbm90aWNlIHdpdGggdGhvc2UgcG9ydGlvbnMgb2YgdGhpcyBzb3VyY2UgY29kZSB0aGF0IHlvdSB1c2UuCisKK09yLAorCitJZiB5b3VyIHByb2R1Y3QgaXMgZGlzdHJpYnV0ZWQgaW4gYmluYXJ5IGZvcm0gb25seSwgeW91IG11c3QgZGlzcGxheSBvbiBhbnkgcGFja2FnaW5nLCBhbmQgbWFya2V0aW5nIG1hdGVyaWFscyB3aGljaCByZWZlcmVuY2UgeW91ciBwcm9kdWN0LCBhIG5vdGljZSB3aGljaCBzdGF0ZXM6CisKKyJUaGlzIHByb2R1Y3QgdXNlcyBjb21wb25lbnRzIHdyaXR0ZW4gYnkgUGF1bCBMZSBSb3V4IDxwbGVyb3V4QHN3cHJvZmVzc2lvbmFscy5jb20+IgorCiszLiBJZiB5b3UgdXNlIGFueSBvZiB0aGUgc291cmNlIGNvZGUgb3JpZ2luYWxseSBieSBFcmljIFlvdW5nLCB5b3UgbXVzdCBpbiBhZGRpdGlvbiBmb2xsb3cgaGlzIHRlcm1zIGFuZCBjb25kaXRpb25zLgorCis0LiBOb3RoaW5nIHJlcXVpcmVzIHRoYXQgeW91IGFjY2VwdCB0aGlzIExpY2Vuc2UsIGFzIHlvdSBoYXZlIG5vdCBzaWduZWQgaXQuIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yIGRpc3RyaWJ1dGUgdGhlIHByb2R1Y3Qgb3IgaXRzIGRlcml2YXRpdmUgd29ya3MuCisKK1RoZXNlIGFjdGlvbnMgYXJlIHByb2hpYml0ZWQgYnkgbGF3IGlmIHlvdSBkbyBub3QgYWNjZXB0IHRoaXMgTGljZW5zZS4KKworNS4gSWYgYW55IG9mIHRoZXNlIGxpY2Vuc2UgdGVybXMgaXMgZm91bmQgdG8gYmUgdG8gYnJvYWQgaW4gc2NvcGUsIGFuZCBkZWNsYXJlZCBpbnZhbGlkIGJ5IGFueSBjb3VydCBvciBsZWdhbCBwcm9jZXNzLCB5b3UgYWdyZWUgdGhhdCBhbGwgb3RoZXIgdGVybXMgc2hhbGwgbm90IGJlIHNvIGFmZmVjdGVkLCBhbmQgc2hhbGwgcmVtYWluIHZhbGlkIGFuZCBlbmZvcmNlYWJsZS4KKworNi4gVEhJUyBQUk9HUkFNIElTIERJU1RSSUJVVEVEIEZSRUUgT0YgQ0hBUkdFLCBUSEVSRUZPUkUgVEhFUkUgSVMgTk8gV0FSUkFOVFkgRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gVU5MRVNTIE9USEVSV0lTRSBTVEFURUQgVEhFIFBST0dSQU0gSVMgUFJPVklERUQgIkFTIElTIiBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFRIRSBFTlRJUkUgUklTSyBBUyBUTyBUSEUgUVVBTElUWSBBTkQgUEVSRk9STUFOQ0UgT0YgVEhFIFBST0dSQU0gSVMgV0lUSCBZT1UuIFNIT1VMRCBUSEUgUFJPR1JBTSBQUk9WRSBERUZFQ1RJVkUsIFlPVSBBU1NVTUUgVEhFIENPU1QgT0YgQUxMIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLgorCis3LiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcgV0lMTCBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUiBSRURJU1RSSUJVVEUgVEhFIFBST0dSQU0gQVMgUEVSTUlUVEVEIEFCT1ZFLCBCRSBMSUFCTEUgVE8gWU9VIEZPUiBEQU1BR0VTLCBJTkNMVURJTkcgQU5ZIEdFTkVSQUwsIFNQRUNJQUwsIElOQ0lERU5UQUwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIEFSSVNJTkcgT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSBUSEUgUFJPR1JBTSwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBMT1NTIE9GIERBVEEgT1IgREFUQSBCRUlORyBSRU5ERVJFRCBJTkFDQ1VSQVRFIE9SIExPU1NFUyBTVVNUQUlORUQgQlkgWU9VIE9SIFRISVJEIFBBUlRJRVMgT1IgQSBGQUlMVVJFIE9GIFRIRSBQUk9HUkFNIFRPIE9QRVJBVEUgV0lUSCBBTlkgT1RIRVIgUFJPR1JBTVMsIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFEIFBSRVZJT1VTTFkgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKK0NvcHlyaWdodCAoYykgMTk5OC0yMDA4LCBCcmlhbiBHbGFkbWFuLCBXb3JjZXN0ZXIsIFVLLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitMSUNFTlNFIFRFUk1TCisKK1RoZSBmcmVlIGRpc3RyaWJ1dGlvbiBhbmQgdXNlIG9mIHRoaXMgc29mdHdhcmUgaXMgYWxsb3dlZCAod2l0aCBvciB3aXRob3V0IGNoYW5nZXMpIHByb3ZpZGVkIHRoYXQ6CisKKyAgIDEuIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGlvbnMgaW5jbHVkZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lcjsKKyAgIDIuIGJpbmFyeSBkaXN0cmlidXRpb25zIGluY2x1ZGUgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlaXIgZG9jdW1lbnRhdGlvbjsKKyAgIDMuIHRoZSBuYW1lIG9mIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGlzIG5vdCB1c2VkIHRvIGVuZG9yc2UgcHJvZHVjdHMgYnVpbHQgdXNpbmcgdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHdyaXR0ZW4gcGVybWlzc2lvbi4KKworRElTQ0xBSU1FUgorCitUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcyBpcycgd2l0aCBubyBleHBsaWNpdCBvciBpbXBsaWVkIHdhcnJhbnRpZXMgaW4gcmVzcGVjdCBvZiBpdHMgcHJvcGVydGllcywgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIGNvcnJlY3RuZXNzIGFuZC9vciBmaXRuZXNzIGZvciBwdXJwb3NlLgorCitDb3B5cmlnaHQgKEMpIDIwMDItMjAwNCBNYXJrIEFkbGVyLCBhbGwgcmlnaHRzIHJlc2VydmVkCit2ZXJzaW9uIDEuOCwgOSBKYW4gMjAwNAorCitUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkICdhcy1pcycsIHdpdGhvdXQgYW55IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4gSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9yIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcyBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55b25lIHRvIHVzZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkgcHVycG9zZSwgaW5jbHVkaW5nIGNvbW1lcmNpYWwgYXBwbGljYXRpb25zLCBhbmQgdG8gYWx0ZXIgaXQgYW5kIHJlZGlzdHJpYnV0ZSBpdCBmcmVlbHksIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnM6CisKKyAgIDEuIFRoZSBvcmlnaW4gb2YgdGhpcyBzb2Z0d2FyZSBtdXN0IG5vdCBiZSBtaXNyZXByZXNlbnRlZDsgeW91IG11c3Qgbm90IGNsYWltIHRoYXQgeW91IHdyb3RlIHRoZSBvcmlnaW5hbCBzb2Z0d2FyZS4gSWYgeW91IHVzZSB0aGlzIHNvZnR3YXJlIGluIGEgcHJvZHVjdCwgYW4gYWNrbm93bGVkZ21lbnQgaW4gdGhlIHByb2R1Y3QgZG9jdW1lbnRhdGlvbiB3b3VsZCBiZSBhcHByZWNpYXRlZCBidXQgaXMgbm90IHJlcXVpcmVkLgorICAgMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLgorICAgMy4gVGhpcyBub3RpY2UgbWF5IG5vdCBiZSByZW1vdmVkIG9yIGFsdGVyZWQgZnJvbSBhbnkgc291cmNlIGRpc3RyaWJ1dGlvbi4KKworCisKKworCmRpZmYgLS1naXQgYS9saWNlbnNlcy90c20gYi9saWNlbnNlcy90c20KbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOGVjZGM0OQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL3RzbQpAQCAtMCwwICsxLDgwMiBAQAorSW50ZXJuYXRpb25hbCBQcm9ncmFtIExpY2Vuc2UgQWdyZWVtZW50CisKK1BhcnQgMSAtIEdlbmVyYWwgVGVybXMKKworQlkgRE9XTkxPQURJTkcsIElOU1RBTExJTkcsIENPUFlJTkcsIEFDQ0VTU0lORywgQ0xJQ0tJTkcgT04gQU4gIkFDQ0VQVCIgQlVUVE9OLCBPUiBPVEhFUldJU0UgVVNJTkcgVEhFIFBST0dSQU0sIExJQ0VOU0VFIEFHUkVFUyBUTyBUSEUgVEVSTVMgT0YgVEhJUyBBR1JFRU1FTlQuIElGIFlPVSBBUkUgQUNDRVBUSU5HIFRIRVNFIFRFUk1TIE9OIEJFSEFMRiBPRiBMSUNFTlNFRSwgWU9VIFJFUFJFU0VOVCBBTkQgV0FSUkFOVCBUSEFUIFlPVSBIQVZFIEZVTEwgQVVUSE9SSVRZIFRPIEJJTkQgTElDRU5TRUUgVE8gVEhFU0UgVEVSTVMuIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFU0UgVEVSTVMsCisKKy0gRE8gTk9UIERPV05MT0FELCBJTlNUQUxMLCBDT1BZLCBBQ0NFU1MsIENMSUNLIE9OIEFOICJBQ0NFUFQiIEJVVFRPTiwgT1IgVVNFIFRIRSBQUk9HUkFNOyBBTkQKKworLSBQUk9NUFRMWSBSRVRVUk4gVEhFIFVOVVNFRCBNRURJQSwgRE9DVU1FTlRBVElPTiwgQU5EIFBST09GIE9GIEVOVElUTEVNRU5UIFRPIFRIRSBQQVJUWSBGUk9NIFdIT00gSVQgV0FTIE9CVEFJTkVEIEZPUiBBIFJFRlVORCBPRiBUSEUgQU1PVU5UIFBBSUQuIElGIFRIRSBQUk9HUkFNIFdBUyBET1dOTE9BREVELCBERVNUUk9ZIEFMTCBDT1BJRVMgT0YgVEhFIFBST0dSQU0uCisKKzEuIERlZmluaXRpb25zCisKKyJBdXRob3JpemVkIFVzZSIgLSB0aGUgc3BlY2lmaWVkIGxldmVsIGF0IHdoaWNoIExpY2Vuc2VlIGlzIGF1dGhvcml6ZWQgdG8gZXhlY3V0ZSBvciBydW4gdGhlIFByb2dyYW0uIFRoYXQgbGV2ZWwgbWF5IGJlIG1lYXN1cmVkIGJ5IG51bWJlciBvZiB1c2VycywgbWlsbGlvbnMgb2Ygc2VydmljZSB1bml0cyAoIk1TVXMiKSwgUHJvY2Vzc29yIFZhbHVlIFVuaXRzICgiUFZVcyIpLCBvciBvdGhlciBsZXZlbCBvZiB1c2Ugc3BlY2lmaWVkIGJ5IElCTS4KKworIklCTSIgLSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIG9yIG9uZSBvZiBpdHMgc3Vic2lkaWFyaWVzLgorCisiTGljZW5zZSBJbmZvcm1hdGlvbiIgKCJMSSIpIC0gYSBkb2N1bWVudCB0aGF0IHByb3ZpZGVzIGluZm9ybWF0aW9uIGFuZCBhbnkgYWRkaXRpb25hbCB0ZXJtcyBzcGVjaWZpYyB0byBhIFByb2dyYW0uIFRoZSBQcm9ncmFtJ3MgTEkgaXMgYXZhaWxhYmxlIGF0IHd3dy5pYm0uY29tL3NvZnR3YXJlL3NsYS4gVGhlIExJIGNhbiBhbHNvIGJlIGZvdW5kIGluIHRoZSBQcm9ncmFtJ3MgZGlyZWN0b3J5LCBieSB0aGUgdXNlIG9mIGEgc3lzdGVtIGNvbW1hbmQsIG9yIGFzIGEgYm9va2xldCBpbmNsdWRlZCB3aXRoIHRoZSBQcm9ncmFtLgorCisiUHJvZ3JhbSIgLSB0aGUgZm9sbG93aW5nLCBpbmNsdWRpbmcgdGhlIG9yaWdpbmFsIGFuZCBhbGwgd2hvbGUgb3IgcGFydGlhbCBjb3BpZXM6IDEpIG1hY2hpbmUtcmVhZGFibGUgaW5zdHJ1Y3Rpb25zIGFuZCBkYXRhLCAyKSBjb21wb25lbnRzLCBmaWxlcywgYW5kIG1vZHVsZXMsIDMpIGF1ZGlvLXZpc3VhbCBjb250ZW50IChzdWNoIGFzIGltYWdlcywgdGV4dCwgcmVjb3JkaW5ncywgb3IgcGljdHVyZXMpLCBhbmQgNCkgcmVsYXRlZCBsaWNlbnNlZCBtYXRlcmlhbHMgKHN1Y2ggYXMga2V5cyBhbmQgZG9jdW1lbnRhdGlvbikuCisKKyJQcm9vZiBvZiBFbnRpdGxlbWVudCIgKCJQb0UiKSAtIGV2aWRlbmNlIG9mIExpY2Vuc2VlJ3MgQXV0aG9yaXplZCBVc2UuIFRoZSBQb0UgaXMgYWxzbyBldmlkZW5jZSBvZiBMaWNlbnNlZSdzIGVsaWdpYmlsaXR5IGZvciB3YXJyYW50eSwgZnV0dXJlIHVwZGF0ZSBwcmljZXMsIGlmIGFueSwgYW5kIHBvdGVudGlhbCBzcGVjaWFsIG9yIHByb21vdGlvbmFsIG9wcG9ydHVuaXRpZXMuIElmIElCTSBkb2VzIG5vdCBwcm92aWRlIExpY2Vuc2VlIHdpdGggYSBQb0UsIHRoZW4gSUJNIG1heSBhY2NlcHQgYXMgdGhlIFBvRSB0aGUgb3JpZ2luYWwgcGFpZCBzYWxlcyByZWNlaXB0IG9yIG90aGVyIHNhbGVzIHJlY29yZCBmcm9tIHRoZSBwYXJ0eSAoZWl0aGVyIElCTSBvciBpdHMgcmVzZWxsZXIpIGZyb20gd2hvbSBMaWNlbnNlZSBvYnRhaW5lZCB0aGUgUHJvZ3JhbSwgcHJvdmlkZWQgdGhhdCBpdCBzcGVjaWZpZXMgdGhlIFByb2dyYW0gbmFtZSBhbmQgQXV0aG9yaXplZCBVc2Ugb2J0YWluZWQuCisKKyJXYXJyYW50eSBQZXJpb2QiIC0gb25lIHllYXIsIHN0YXJ0aW5nIG9uIHRoZSBkYXRlIHRoZSBvcmlnaW5hbCBMaWNlbnNlZSBpcyBncmFudGVkIHRoZSBsaWNlbnNlLgorCisyLiBBZ3JlZW1lbnQgU3RydWN0dXJlCisKK1RoaXMgQWdyZWVtZW50IGluY2x1ZGVzIFBhcnQgMSAtIEdlbmVyYWwgVGVybXMsIFBhcnQgMiAtIENvdW50cnktdW5pcXVlIFRlcm1zIChpZiBhbnkpLCB0aGUgTEksIGFuZCB0aGUgUG9FIGFuZCBpcyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGJldHdlZW4gTGljZW5zZWUgYW5kIElCTSByZWdhcmRpbmcgdGhlIHVzZSBvZiB0aGUgUHJvZ3JhbS4gSXQgcmVwbGFjZXMgYW55IHByaW9yIG9yYWwgb3Igd3JpdHRlbiBjb21tdW5pY2F0aW9ucyBiZXR3ZWVuIExpY2Vuc2VlIGFuZCBJQk0gY29uY2VybmluZyBMaWNlbnNlZSdzIHVzZSBvZiB0aGUgUHJvZ3JhbS4gVGhlIHRlcm1zIG9mIFBhcnQgMiBtYXkgcmVwbGFjZSBvciBtb2RpZnkgdGhvc2Ugb2YgUGFydCAxLiBUbyB0aGUgZXh0ZW50IG9mIGFueSBjb25mbGljdCwgdGhlIExJIHByZXZhaWxzIG92ZXIgYm90aCBQYXJ0cy4KKworMy4gTGljZW5zZSBHcmFudAorCitUaGUgUHJvZ3JhbSBpcyBvd25lZCBieSBJQk0gb3IgYW4gSUJNIHN1cHBsaWVyLCBhbmQgaXMgY29weXJpZ2h0ZWQgYW5kIGxpY2Vuc2VkLCBub3Qgc29sZC4KKworSUJNIGdyYW50cyBMaWNlbnNlZSBhIG5vbmV4Y2x1c2l2ZSBsaWNlbnNlIHRvIDEpIHVzZSB0aGUgUHJvZ3JhbSB1cCB0byB0aGUgQXV0aG9yaXplZCBVc2Ugc3BlY2lmaWVkIGluIHRoZSBQb0UsIDIpIG1ha2UgYW5kIGluc3RhbGwgY29waWVzIHRvIHN1cHBvcnQgc3VjaCBBdXRob3JpemVkIFVzZSwgYW5kIDMpIG1ha2UgYSBiYWNrdXAgY29weSwgYWxsIHByb3ZpZGVkIHRoYXQKKworYS4gTGljZW5zZWUgaGFzIGxhd2Z1bGx5IG9idGFpbmVkIHRoZSBQcm9ncmFtIGFuZCBjb21wbGllcyB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudDsKKworYi4gdGhlIGJhY2t1cCBjb3B5IGRvZXMgbm90IGV4ZWN1dGUgdW5sZXNzIHRoZSBiYWNrZWQtdXAgUHJvZ3JhbSBjYW5ub3QgZXhlY3V0ZTsKKworYy4gTGljZW5zZWUgcmVwcm9kdWNlcyBhbGwgY29weXJpZ2h0IG5vdGljZXMgYW5kIG90aGVyIGxlZ2VuZHMgb2Ygb3duZXJzaGlwIG9uIGVhY2ggY29weSwgb3IgcGFydGlhbCBjb3B5LCBvZiB0aGUgUHJvZ3JhbTsKKworZC4gTGljZW5zZWUgZW5zdXJlcyB0aGF0IGFueW9uZSB3aG8gdXNlcyB0aGUgUHJvZ3JhbSAoYWNjZXNzZWQgZWl0aGVyIGxvY2FsbHkgb3IgcmVtb3RlbHkpIDEpIGRvZXMgc28gb25seSBvbiBMaWNlbnNlZSdzIGJlaGFsZiBhbmQgMikgY29tcGxpZXMgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQ7CisKK2UuIExpY2Vuc2VlIGRvZXMgbm90IDEpIHVzZSwgY29weSwgbW9kaWZ5LCBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIGV4Y2VwdCBhcyBleHByZXNzbHkgcGVybWl0dGVkIGluIHRoaXMgQWdyZWVtZW50OyAyKSByZXZlcnNlIGFzc2VtYmxlLCByZXZlcnNlIGNvbXBpbGUsIG90aGVyd2lzZSB0cmFuc2xhdGUsIG9yIHJldmVyc2UgZW5naW5lZXIgdGhlIFByb2dyYW0sIGV4Y2VwdCBhcyBleHByZXNzbHkgcGVybWl0dGVkIGJ5IGxhdyB3aXRob3V0IHRoZSBwb3NzaWJpbGl0eSBvZiBjb250cmFjdHVhbCB3YWl2ZXI7IDMpIHVzZSBhbnkgb2YgdGhlIFByb2dyYW0ncyBjb21wb25lbnRzLCBmaWxlcywgbW9kdWxlcywgYXVkaW8tdmlzdWFsIGNvbnRlbnQsIG9yIHJlbGF0ZWQgbGljZW5zZWQgbWF0ZXJpYWxzIHNlcGFyYXRlbHkgZnJvbSB0aGF0IFByb2dyYW07IG9yIDQpIHN1YmxpY2Vuc2UsIHJlbnQsIG9yIGxlYXNlIHRoZSBQcm9ncmFtOyBhbmQKKworZi4gaWYgTGljZW5zZWUgb2J0YWlucyB0aGlzIFByb2dyYW0gYXMgYSBTdXBwb3J0aW5nIFByb2dyYW0sIExpY2Vuc2VlIHVzZXMgdGhpcyBQcm9ncmFtIG9ubHkgdG8gc3VwcG9ydCB0aGUgUHJpbmNpcGFsIFByb2dyYW0gYW5kIHN1YmplY3QgdG8gYW55IGxpbWl0YXRpb25zIGluIHRoZSBsaWNlbnNlIHRvIHRoZSBQcmluY2lwYWwgUHJvZ3JhbSwgb3IsIGlmIExpY2Vuc2VlIG9idGFpbnMgdGhpcyBQcm9ncmFtIGFzIGEgUHJpbmNpcGFsIFByb2dyYW0sIExpY2Vuc2VlIHVzZXMgYWxsIFN1cHBvcnRpbmcgUHJvZ3JhbXMgb25seSB0byBzdXBwb3J0IHRoaXMgUHJvZ3JhbSwgYW5kIHN1YmplY3QgdG8gYW55IGxpbWl0YXRpb25zIGluIHRoaXMgQWdyZWVtZW50LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBJdGVtICJmLCIgYSAiU3VwcG9ydGluZyBQcm9ncmFtIiBpcyBhIFByb2dyYW0gdGhhdCBpcyBwYXJ0IG9mIGFub3RoZXIgSUJNIFByb2dyYW0gKCJQcmluY2lwYWwgUHJvZ3JhbSIpIGFuZCBpZGVudGlmaWVkIGFzIGEgU3VwcG9ydGluZyBQcm9ncmFtIGluIHRoZSBQcmluY2lwYWwgUHJvZ3JhbSdzIExJLiAoVG8gb2J0YWluIGEgc2VwYXJhdGUgbGljZW5zZSB0byBhIFN1cHBvcnRpbmcgUHJvZ3JhbSB3aXRob3V0IHRoZXNlIHJlc3RyaWN0aW9ucywgTGljZW5zZWUgc2hvdWxkIGNvbnRhY3QgdGhlIHBhcnR5IGZyb20gd2hvbSBMaWNlbnNlZSBvYnRhaW5lZCB0aGUgU3VwcG9ydGluZyBQcm9ncmFtLikKKworVGhpcyBsaWNlbnNlIGFwcGxpZXMgdG8gZWFjaCBjb3B5IG9mIHRoZSBQcm9ncmFtIHRoYXQgTGljZW5zZWUgbWFrZXMuCisKKzMuMSBUcmFkZS11cHMsIFVwZGF0ZXMsIEZpeGVzLCBhbmQgUGF0Y2hlcworCiszLjEuMSBUcmFkZS11cHMKKworSWYgdGhlIFByb2dyYW0gaXMgcmVwbGFjZWQgYnkgYSB0cmFkZS11cCBQcm9ncmFtLCB0aGUgcmVwbGFjZWQgUHJvZ3JhbSdzIGxpY2Vuc2UgaXMgcHJvbXB0bHkgdGVybWluYXRlZC4KKworMy4xLjIgVXBkYXRlcywgRml4ZXMsIGFuZCBQYXRjaGVzCisKK1doZW4gTGljZW5zZWUgcmVjZWl2ZXMgYW4gdXBkYXRlLCBmaXgsIG9yIHBhdGNoIHRvIGEgUHJvZ3JhbSwgTGljZW5zZWUgYWNjZXB0cyBhbnkgYWRkaXRpb25hbCBvciBkaWZmZXJlbnQgdGVybXMgdGhhdCBhcmUgYXBwbGljYWJsZSB0byBzdWNoIHVwZGF0ZSwgZml4LCBvciBwYXRjaCB0aGF0IGFyZSBzcGVjaWZpZWQgaW4gaXRzIExJLiBJZiBubyBhZGRpdGlvbmFsIG9yIGRpZmZlcmVudCB0ZXJtcyBhcmUgcHJvdmlkZWQsIHRoZW4gdGhlIHVwZGF0ZSwgZml4LCBvciBwYXRjaCBpcyBzdWJqZWN0IHNvbGVseSB0byB0aGlzIEFncmVlbWVudC4gSWYgdGhlIFByb2dyYW0gaXMgcmVwbGFjZWQgYnkgYW4gdXBkYXRlLCBMaWNlbnNlZSBhZ3JlZXMgdG8gcHJvbXB0bHkgZGlzY29udGludWUgdXNlIG9mIHRoZSByZXBsYWNlZCBQcm9ncmFtLgorCiszLjIgRml4ZWQgVGVybSBMaWNlbnNlcworCitJZiBJQk0gbGljZW5zZXMgdGhlIFByb2dyYW0gZm9yIGEgZml4ZWQgdGVybSwgTGljZW5zZWUncyBsaWNlbnNlIGlzIHRlcm1pbmF0ZWQgYXQgdGhlIGVuZCBvZiB0aGUgZml4ZWQgdGVybSwgdW5sZXNzIExpY2Vuc2VlIGFuZCBJQk0gYWdyZWUgdG8gcmVuZXcgaXQuCisKKzMuMyBUZXJtIGFuZCBUZXJtaW5hdGlvbgorCitUaGlzIEFncmVlbWVudCBpcyBlZmZlY3RpdmUgdW50aWwgdGVybWluYXRlZC4KKworSUJNIG1heSB0ZXJtaW5hdGUgTGljZW5zZWUncyBsaWNlbnNlIGlmIExpY2Vuc2VlIGZhaWxzIHRvIGNvbXBseSB3aXRoIHRoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudC4KKworSWYgdGhlIGxpY2Vuc2UgaXMgdGVybWluYXRlZCBmb3IgYW55IHJlYXNvbiBieSBlaXRoZXIgcGFydHksIExpY2Vuc2VlIGFncmVlcyB0byBwcm9tcHRseSBkaXNjb250aW51ZSB1c2Ugb2YgYW5kIGRlc3Ryb3kgYWxsIG9mIExpY2Vuc2VlJ3MgY29waWVzIG9mIHRoZSBQcm9ncmFtLiBBbnkgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQgdGhhdCBieSB0aGVpciBuYXR1cmUgZXh0ZW5kIGJleW9uZCB0ZXJtaW5hdGlvbiBvZiB0aGlzIEFncmVlbWVudCByZW1haW4gaW4gZWZmZWN0IHVudGlsIGZ1bGZpbGxlZCwgYW5kIGFwcGx5IHRvIGJvdGggcGFydGllcycgcmVzcGVjdGl2ZSBzdWNjZXNzb3JzIGFuZCBhc3NpZ25lZXMuCisKKzQuIENoYXJnZXMKKworQ2hhcmdlcyBhcmUgYmFzZWQgb24gQXV0aG9yaXplZCBVc2Ugb2J0YWluZWQsIHdoaWNoIGlzIHNwZWNpZmllZCBpbiB0aGUgUG9FLiBJQk0gZG9lcyBub3QgZ2l2ZSBjcmVkaXRzIG9yIHJlZnVuZHMgZm9yIGNoYXJnZXMgYWxyZWFkeSBkdWUgb3IgcGFpZCwgZXhjZXB0IGFzIHNwZWNpZmllZCBlbHNld2hlcmUgaW4gdGhpcyBBZ3JlZW1lbnQuCisKK0lmIExpY2Vuc2VlIHdpc2hlcyB0byBpbmNyZWFzZSBpdHMgQXV0aG9yaXplZCBVc2UsIExpY2Vuc2VlIG11c3Qgbm90aWZ5IElCTSBvciBhbiBhdXRob3JpemVkIElCTSByZXNlbGxlciBpbiBhZHZhbmNlIGFuZCBwYXkgYW55IGFwcGxpY2FibGUgY2hhcmdlcy4KKworNS4gVGF4ZXMKKworSWYgYW55IGF1dGhvcml0eSBpbXBvc2VzIG9uIHRoZSBQcm9ncmFtIGEgZHV0eSwgdGF4LCBsZXZ5LCBvciBmZWUsIGV4Y2x1ZGluZyB0aG9zZSBiYXNlZCBvbiBJQk0ncyBuZXQgaW5jb21lLCB0aGVuIExpY2Vuc2VlIGFncmVlcyB0byBwYXkgdGhhdCBhbW91bnQsIGFzIHNwZWNpZmllZCBpbiBhbiBpbnZvaWNlLCBvciBzdXBwbHkgZXhlbXB0aW9uIGRvY3VtZW50YXRpb24uIExpY2Vuc2VlIGlzIHJlc3BvbnNpYmxlIGZvciBhbnkgcGVyc29uYWwgcHJvcGVydHkgdGF4ZXMgZm9yIHRoZSBQcm9ncmFtIGZyb20gdGhlIGRhdGUgdGhhdCBMaWNlbnNlZSBvYnRhaW5zIGl0LiBJZiBhbnkgYXV0aG9yaXR5IGltcG9zZXMgYSBjdXN0b21zIGR1dHksIHRheCwgbGV2eSwgb3IgZmVlIGZvciB0aGUgaW1wb3J0IGludG8gb3IgdGhlIGV4cG9ydCwgdHJhbnNmZXIsIGFjY2Vzcywgb3IgdXNlIG9mIHRoZSBQcm9ncmFtIG91dHNpZGUgdGhlIGNvdW50cnkgaW4gd2hpY2ggdGhlIG9yaWdpbmFsIExpY2Vuc2VlIHdhcyBncmFudGVkIHRoZSBsaWNlbnNlLCB0aGVuIExpY2Vuc2VlIGFncmVlcyB0aGF0IGl0IGlzIHJlc3BvbnNpYmxlIGZvciwgYW5kIHdpbGwgcGF5LCBhbnkgYW1vdW50IGltcG9zZWQuCisKKzYuIE1vbmV5LWJhY2sgR3VhcmFudGVlCisKK0lmIExpY2Vuc2VlIGlzIGRpc3NhdGlzZmllZCB3aXRoIHRoZSBQcm9ncmFtIGZvciBhbnkgcmVhc29uIGFuZCBpcyB0aGUgb3JpZ2luYWwgTGljZW5zZWUsIExpY2Vuc2VlIG1heSB0ZXJtaW5hdGUgdGhlIGxpY2Vuc2UgYW5kIG9idGFpbiBhIHJlZnVuZCBvZiB0aGUgYW1vdW50IExpY2Vuc2VlIHBhaWQgZm9yIHRoZSBQcm9ncmFtLCBwcm92aWRlZCB0aGF0IExpY2Vuc2VlIHJldHVybnMgdGhlIFByb2dyYW0gYW5kIFBvRSB0byB0aGUgcGFydHkgZnJvbSB3aG9tIExpY2Vuc2VlIG9idGFpbmVkIGl0IHdpdGhpbiAzMCBkYXlzIG9mIHRoZSBkYXRlIHRoZSBQb0Ugd2FzIGlzc3VlZCB0byBMaWNlbnNlZS4gSWYgdGhlIGxpY2Vuc2UgaXMgZm9yIGEgZml4ZWQgdGVybSB0aGF0IGlzIHN1YmplY3QgdG8gcmVuZXdhbCwgdGhlbiBMaWNlbnNlZSBtYXkgb2J0YWluIGEgcmVmdW5kIG9ubHkgaWYgdGhlIFByb2dyYW0gYW5kIGl0cyBQb0UgYXJlIHJldHVybmVkIHdpdGhpbiB0aGUgZmlyc3QgMzAgZGF5cyBvZiB0aGUgaW5pdGlhbCB0ZXJtLiBJZiBMaWNlbnNlZSBkb3dubG9hZGVkIHRoZSBQcm9ncmFtLCBMaWNlbnNlZSBzaG91bGQgY29udGFjdCB0aGUgcGFydHkgZnJvbSB3aG9tIExpY2Vuc2VlIG9idGFpbmVkIGl0IGZvciBpbnN0cnVjdGlvbnMgb24gaG93IHRvIG9idGFpbiB0aGUgcmVmdW5kLgorCis3LiBQcm9ncmFtIFRyYW5zZmVyCisKK0xpY2Vuc2VlIG1heSB0cmFuc2ZlciB0aGUgUHJvZ3JhbSBhbmQgYWxsIG9mIExpY2Vuc2VlJ3MgbGljZW5zZSByaWdodHMgYW5kIG9ibGlnYXRpb25zIHRvIGFub3RoZXIgcGFydHkgb25seSBpZiB0aGF0IHBhcnR5IGFncmVlcyB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQuIElmIHRoZSBsaWNlbnNlIGlzIHRlcm1pbmF0ZWQgZm9yIGFueSByZWFzb24gYnkgZWl0aGVyIHBhcnR5LCBMaWNlbnNlZSBpcyBwcm9oaWJpdGVkIGZyb20gdHJhbnNmZXJyaW5nIHRoZSBQcm9ncmFtIHRvIGFub3RoZXIgcGFydHkuIExpY2Vuc2VlIG1heSBub3QgdHJhbnNmZXIgYSBwb3J0aW9uIG9mIDEpIHRoZSBQcm9ncmFtIG9yIDIpIHRoZSBQcm9ncmFtJ3MgQXV0aG9yaXplZCBVc2UuIFdoZW4gTGljZW5zZWUgdHJhbnNmZXJzIHRoZSBQcm9ncmFtLCBMaWNlbnNlZSBtdXN0IGFsc28gdHJhbnNmZXIgYSBoYXJkIGNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyB0aGUgTEkgYW5kIFBvRS4gSW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIHRyYW5zZmVyLCBMaWNlbnNlZSdzIGxpY2Vuc2UgdGVybWluYXRlcy4KKworOC4gV2FycmFudHkgYW5kIEV4Y2x1c2lvbnMKKworOC4xIExpbWl0ZWQgV2FycmFudHkKKworSUJNIHdhcnJhbnRzIHRoYXQgdGhlIFByb2dyYW0sIHdoZW4gdXNlZCBpbiBpdHMgc3BlY2lmaWVkIG9wZXJhdGluZyBlbnZpcm9ubWVudCwgd2lsbCBjb25mb3JtIHRvIGl0cyBzcGVjaWZpY2F0aW9ucy4gVGhlIFByb2dyYW0ncyBzcGVjaWZpY2F0aW9ucywgYW5kIHNwZWNpZmllZCBvcGVyYXRpbmcgZW52aXJvbm1lbnQgaW5mb3JtYXRpb24sIGNhbiBiZSBmb3VuZCBpbiBkb2N1bWVudGF0aW9uIGFjY29tcGFueWluZyB0aGUgUHJvZ3JhbSAoc3VjaCBhcyBhIHJlYWQtbWUgZmlsZSkgb3Igb3RoZXIgaW5mb3JtYXRpb24gcHVibGlzaGVkIGJ5IElCTSAoc3VjaCBhcyBhbiBhbm5vdW5jZW1lbnQgbGV0dGVyKS4gTGljZW5zZWUgYWdyZWVzIHRoYXQgc3VjaCBkb2N1bWVudGF0aW9uIGFuZCBvdGhlciBQcm9ncmFtIGNvbnRlbnQgbWF5IGJlIHN1cHBsaWVkIG9ubHkgaW4gdGhlIEVuZ2xpc2ggbGFuZ3VhZ2UsIHVubGVzcyBvdGhlcndpc2UgcmVxdWlyZWQgYnkgbG9jYWwgbGF3IHdpdGhvdXQgdGhlIHBvc3NpYmlsaXR5IG9mIGNvbnRyYWN0dWFsIHdhaXZlciBvciBsaW1pdGF0aW9uLgorCitUaGUgd2FycmFudHkgYXBwbGllcyBvbmx5IHRvIHRoZSB1bm1vZGlmaWVkIHBvcnRpb24gb2YgdGhlIFByb2dyYW0uIElCTSBkb2VzIG5vdCB3YXJyYW50IHVuaW50ZXJydXB0ZWQgb3IgZXJyb3ItZnJlZSBvcGVyYXRpb24gb2YgdGhlIFByb2dyYW0sIG9yIHRoYXQgSUJNIHdpbGwgY29ycmVjdCBhbGwgUHJvZ3JhbSBkZWZlY3RzLiBMaWNlbnNlZSBpcyByZXNwb25zaWJsZSBmb3IgdGhlIHJlc3VsdHMgb2J0YWluZWQgZnJvbSB0aGUgdXNlIG9mIHRoZSBQcm9ncmFtLgorCitEdXJpbmcgdGhlIFdhcnJhbnR5IFBlcmlvZCwgSUJNIHByb3ZpZGVzIExpY2Vuc2VlIHdpdGggYWNjZXNzIHRvIElCTSBkYXRhYmFzZXMgY29udGFpbmluZyBpbmZvcm1hdGlvbiBvbiBrbm93biBQcm9ncmFtIGRlZmVjdHMsIGRlZmVjdCBjb3JyZWN0aW9ucywgcmVzdHJpY3Rpb25zLCBhbmQgYnlwYXNzZXMgYXQgbm8gYWRkaXRpb25hbCBjaGFyZ2UuIENvbnN1bHQgdGhlIElCTSBTb2Z0d2FyZSBTdXBwb3J0IEhhbmRib29rIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9uIGF0IHd3dy5pYm0uY29tL3NvZnR3YXJlL3N1cHBvcnQuCisKK0lmIHRoZSBQcm9ncmFtIGRvZXMgbm90IGZ1bmN0aW9uIGFzIHdhcnJhbnRlZCBkdXJpbmcgdGhlIFdhcnJhbnR5IFBlcmlvZCBhbmQgdGhlIHByb2JsZW0gY2Fubm90IGJlIHJlc29sdmVkIHdpdGggaW5mb3JtYXRpb24gYXZhaWxhYmxlIGluIHRoZSBJQk0gZGF0YWJhc2VzLCBMaWNlbnNlZSBtYXkgcmV0dXJuIHRoZSBQcm9ncmFtIGFuZCBpdHMgUG9FIHRvIHRoZSBwYXJ0eSAoZWl0aGVyIElCTSBvciBpdHMgcmVzZWxsZXIpIGZyb20gd2hvbSBMaWNlbnNlZSBvYnRhaW5lZCBpdCBhbmQgcmVjZWl2ZSBhIHJlZnVuZCBvZiB0aGUgYW1vdW50IExpY2Vuc2VlIHBhaWQuIEFmdGVyIHJldHVybmluZyB0aGUgUHJvZ3JhbSwgTGljZW5zZWUncyBsaWNlbnNlIHRlcm1pbmF0ZXMuIElmIExpY2Vuc2VlIGRvd25sb2FkZWQgdGhlIFByb2dyYW0sIExpY2Vuc2VlIHNob3VsZCBjb250YWN0IHRoZSBwYXJ0eSBmcm9tIHdob20gTGljZW5zZWUgb2J0YWluZWQgaXQgZm9yIGluc3RydWN0aW9ucyBvbiBob3cgdG8gb2J0YWluIHRoZSByZWZ1bmQuCisKKzguMiBFeGNsdXNpb25zCisKK1RIRVNFIFdBUlJBTlRJRVMgQVJFIExJQ0VOU0VFJ1MgRVhDTFVTSVZFIFdBUlJBTlRJRVMgQU5EIFJFUExBQ0UgQUxMIE9USEVSIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUywgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgQU5ZIElNUExJRUQgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSwgU0FUSVNGQUNUT1JZIFFVQUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBUSVRMRSwgQU5EIEFOWSBXQVJSQU5UWSBPUiBDT05ESVRJT04gT0YgTk9OLUlORlJJTkdFTUVOVC4gU09NRSBTVEFURVMgT1IgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgVEhFIEVYQ0xVU0lPTiBPRiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgU08gVEhFIEFCT1ZFIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZIFRPIExJQ0VOU0VFLiBJTiBUSEFUIEVWRU5ULCBTVUNIIFdBUlJBTlRJRVMgQVJFIExJTUlURUQgSU4gRFVSQVRJT04gVE8gVEhFIFdBUlJBTlRZIFBFUklPRC4gTk8gV0FSUkFOVElFUyBBUFBMWSBBRlRFUiBUSEFUIFBFUklPRC4gU09NRSBTVEFURVMgT1IgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgTElNSVRBVElPTlMgT04gSE9XIExPTkcgQU4gSU1QTElFRCBXQVJSQU5UWSBMQVNUUywgU08gVEhFIEFCT1ZFIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBMSUNFTlNFRS4KKworVEhFU0UgV0FSUkFOVElFUyBHSVZFIExJQ0VOU0VFIFNQRUNJRklDIExFR0FMIFJJR0hUUy4gTElDRU5TRUUgTUFZIEFMU08gSEFWRSBPVEhFUiBSSUdIVFMgVEhBVCBWQVJZIEZST00gU1RBVEUgVE8gU1RBVEUgT1IgSlVSSVNESUNUSU9OIFRPIEpVUklTRElDVElPTi4KKworVEhFIFdBUlJBTlRJRVMgSU4gVEhJUyBTRUNUSU9OIDggKFdBUlJBTlRZIEFORCBFWENMVVNJT05TKSBBUkUgUFJPVklERUQgU09MRUxZIEJZIElCTS4gVEhFIERJU0NMQUlNRVJTIElOIFRISVMgU1VCU0VDVElPTiA4LjIgKEVYQ0xVU0lPTlMpLCBIT1dFVkVSLCBBTFNPIEFQUExZIFRPIElCTSdTIFNVUFBMSUVSUyBPRiBUSElSRCBQQVJUWSBDT0RFLiBUSE9TRSBTVVBQTElFUlMgUFJPVklERSBTVUNIIENPREUgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTiBPRiBBTlkgS0lORC4gVEhJUyBQQVJBR1JBUEggRE9FUyBOT1QgTlVMTElGWSBJQk0nUyBXQVJSQU5UWSBPQkxJR0FUSU9OUyBVTkRFUiBUSElTIEFHUkVFTUVOVC4KKworOS4gTGljZW5zZWUgRGF0YSBhbmQgRGF0YWJhc2VzCisKK1RvIGFzc2lzdCBMaWNlbnNlZSBpbiBpc29sYXRpbmcgdGhlIGNhdXNlIG9mIGEgcHJvYmxlbSB3aXRoIHRoZSBQcm9ncmFtLCBJQk0gbWF5IHJlcXVlc3QgdGhhdCBMaWNlbnNlZSAxKSBhbGxvdyBJQk0gdG8gcmVtb3RlbHkgYWNjZXNzIExpY2Vuc2VlJ3Mgc3lzdGVtIG9yIDIpIHNlbmQgTGljZW5zZWUgaW5mb3JtYXRpb24gb3Igc3lzdGVtIGRhdGEgdG8gSUJNLiBIb3dldmVyLCBJQk0gaXMgbm90IG9ibGlnYXRlZCB0byBwcm92aWRlIHN1Y2ggYXNzaXN0YW5jZSB1bmxlc3MgSUJNIGFuZCBMaWNlbnNlZSBlbnRlciBhIHNlcGFyYXRlIHdyaXR0ZW4gYWdyZWVtZW50IHVuZGVyIHdoaWNoIElCTSBhZ3JlZXMgdG8gcHJvdmlkZSB0byBMaWNlbnNlZSB0aGF0IHR5cGUgb2YgdGVjaG5pY2FsIHN1cHBvcnQsIHdoaWNoIGlzIGJleW9uZCBJQk0ncyB3YXJyYW50eSBvYmxpZ2F0aW9ucyBpbiB0aGlzIEFncmVlbWVudC4gSW4gYW55IGV2ZW50LCBJQk0gdXNlcyBpbmZvcm1hdGlvbiBhYm91dCBlcnJvcnMgYW5kIHByb2JsZW1zIHRvIGltcHJvdmUgaXRzIHByb2R1Y3RzIGFuZCBzZXJ2aWNlcywgYW5kIGFzc2lzdCB3aXRoIGl0cyBwcm92aXNpb24gb2YgcmVsYXRlZCBzdXBwb3J0IG9mZmVyaW5ncy4gRm9yIHRoZXNlIHB1cnBvc2VzLCBJQk0gbWF5IHVzZSBJQk0gZW50aXRpZXMgYW5kIHN1YmNvbnRyYWN0b3JzIChpbmNsdWRpbmcgaW4gb25lIG9yIG1vcmUgY291bnRyaWVzIG90aGVyIHRoYW4gdGhlIG9uZSBpbiB3aGljaCBMaWNlbnNlZSBpcyBsb2NhdGVkKSwgYW5kIExpY2Vuc2VlIGF1dGhvcml6ZXMgSUJNIHRvIGRvIHNvLgorCitMaWNlbnNlZSByZW1haW5zIHJlc3BvbnNpYmxlIGZvciAxKSBhbnkgZGF0YSBhbmQgdGhlIGNvbnRlbnQgb2YgYW55IGRhdGFiYXNlIExpY2Vuc2VlIG1ha2VzIGF2YWlsYWJsZSB0byBJQk0sIDIpIHRoZSBzZWxlY3Rpb24gYW5kIGltcGxlbWVudGF0aW9uIG9mIHByb2NlZHVyZXMgYW5kIGNvbnRyb2xzIHJlZ2FyZGluZyBhY2Nlc3MsIHNlY3VyaXR5LCBlbmNyeXB0aW9uLCB1c2UsIGFuZCB0cmFuc21pc3Npb24gb2YgZGF0YSAoaW5jbHVkaW5nIGFueSBwZXJzb25hbGx5LWlkZW50aWZpYWJsZSBkYXRhKSwgYW5kIDMpIGJhY2t1cCBhbmQgcmVjb3Zlcnkgb2YgYW55IGRhdGFiYXNlIGFuZCBhbnkgc3RvcmVkIGRhdGEuIExpY2Vuc2VlIHdpbGwgbm90IHNlbmQgb3IgcHJvdmlkZSBJQk0gYWNjZXNzIHRvIGFueSBwZXJzb25hbGx5LWlkZW50aWZpYWJsZSBpbmZvcm1hdGlvbiwgd2hldGhlciBpbiBkYXRhIG9yIGFueSBvdGhlciBmb3JtLCBhbmQgd2lsbCBiZSByZXNwb25zaWJsZSBmb3IgcmVhc29uYWJsZSBjb3N0cyBhbmQgb3RoZXIgYW1vdW50cyB0aGF0IElCTSBtYXkgaW5jdXIgcmVsYXRpbmcgdG8gYW55IHN1Y2ggaW5mb3JtYXRpb24gbWlzdGFrZW5seSBwcm92aWRlZCB0byBJQk0gb3IgdGhlIGxvc3Mgb3IgZGlzY2xvc3VyZSBvZiBzdWNoIGluZm9ybWF0aW9uIGJ5IElCTSwgaW5jbHVkaW5nIHRob3NlIGFyaXNpbmcgb3V0IG9mIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMuCisKKzEwLiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eQorCitUaGUgbGltaXRhdGlvbnMgYW5kIGV4Y2x1c2lvbnMgaW4gdGhpcyBTZWN0aW9uIDEwIChMaW1pdGF0aW9uIG9mIExpYWJpbGl0eSkgYXBwbHkgdG8gdGhlIGZ1bGwgZXh0ZW50IHRoZXkgYXJlIG5vdCBwcm9oaWJpdGVkIGJ5IGFwcGxpY2FibGUgbGF3IHdpdGhvdXQgdGhlIHBvc3NpYmlsaXR5IG9mIGNvbnRyYWN0dWFsIHdhaXZlci4KKworMTAuMSBJdGVtcyBmb3IgV2hpY2ggSUJNIE1heSBCZSBMaWFibGUKKworQ2lyY3Vtc3RhbmNlcyBtYXkgYXJpc2Ugd2hlcmUsIGJlY2F1c2Ugb2YgYSBkZWZhdWx0IG9uIElCTSdzIHBhcnQgb3Igb3RoZXIgbGlhYmlsaXR5LCBMaWNlbnNlZSBpcyBlbnRpdGxlZCB0byByZWNvdmVyIGRhbWFnZXMgZnJvbSBJQk0uIFJlZ2FyZGxlc3Mgb2YgdGhlIGJhc2lzIG9uIHdoaWNoIExpY2Vuc2VlIGlzIGVudGl0bGVkIHRvIGNsYWltIGRhbWFnZXMgZnJvbSBJQk0gKGluY2x1ZGluZyBmdW5kYW1lbnRhbCBicmVhY2gsIG5lZ2xpZ2VuY2UsIG1pc3JlcHJlc2VudGF0aW9uLCBvciBvdGhlciBjb250cmFjdCBvciB0b3J0IGNsYWltKSwgSUJNJ3MgZW50aXJlIGxpYWJpbGl0eSBmb3IgYWxsIGNsYWltcyBpbiB0aGUgYWdncmVnYXRlIGFyaXNpbmcgZnJvbSBvciByZWxhdGVkIHRvIGVhY2ggUHJvZ3JhbSBvciBvdGhlcndpc2UgYXJpc2luZyB1bmRlciB0aGlzIEFncmVlbWVudCB3aWxsIG5vdCBleGNlZWQgdGhlIGFtb3VudCBvZiBhbnkgMSkgZGFtYWdlcyBmb3IgYm9kaWx5IGluanVyeSAoaW5jbHVkaW5nIGRlYXRoKSBhbmQgZGFtYWdlIHRvIHJlYWwgcHJvcGVydHkgYW5kIHRhbmdpYmxlIHBlcnNvbmFsIHByb3BlcnR5IGFuZCAyKSBvdGhlciBhY3R1YWwgZGlyZWN0IGRhbWFnZXMgdXAgdG8gdGhlIGNoYXJnZXMgKGlmIHRoZSBQcm9ncmFtIGlzIHN1YmplY3QgdG8gZml4ZWQgdGVybSBjaGFyZ2VzLCB1cCB0byB0d2VsdmUgbW9udGhzJyBjaGFyZ2VzKSBMaWNlbnNlZSBwYWlkIGZvciB0aGUgUHJvZ3JhbSB0aGF0IGlzIHRoZSBzdWJqZWN0IG9mIHRoZSBjbGFpbS4KKworVGhpcyBsaW1pdCBhbHNvIGFwcGxpZXMgdG8gYW55IG9mIElCTSdzIFByb2dyYW0gZGV2ZWxvcGVycyBhbmQgc3VwcGxpZXJzLiBJdCBpcyB0aGUgbWF4aW11bSBmb3Igd2hpY2ggSUJNIGFuZCBpdHMgUHJvZ3JhbSBkZXZlbG9wZXJzIGFuZCBzdXBwbGllcnMgYXJlIGNvbGxlY3RpdmVseSByZXNwb25zaWJsZS4KKworMTAuMiBJdGVtcyBmb3IgV2hpY2ggSUJNIElzIE5vdCBMaWFibGUKKworVU5ERVIgTk8gQ0lSQ1VNU1RBTkNFUyBJUyBJQk0sIElUUyBQUk9HUkFNIERFVkVMT1BFUlMgT1IgU1VQUExJRVJTIExJQUJMRSBGT1IgQU5ZIE9GIFRIRSBGT0xMT1dJTkcsIEVWRU4gSUYgSU5GT1JNRUQgT0YgVEhFSVIgUE9TU0lCSUxJVFk6CisKK2EuIExPU1MgT0YsIE9SIERBTUFHRSBUTywgREFUQTsKKworYi4gU1BFQ0lBTCwgSU5DSURFTlRBTCwgRVhFTVBMQVJZLCBPUiBJTkRJUkVDVCBEQU1BR0VTLCBPUiBGT1IgQU5ZIEVDT05PTUlDIENPTlNFUVVFTlRJQUwgREFNQUdFUzsgT1IKKworYy4gTE9TVCBQUk9GSVRTLCBCVVNJTkVTUywgUkVWRU5VRSwgR09PRFdJTEwsIE9SIEFOVElDSVBBVEVEIFNBVklOR1MuCisKKzExLiBDb21wbGlhbmNlIFZlcmlmaWNhdGlvbgorCitGb3IgcHVycG9zZXMgb2YgdGhpcyBTZWN0aW9uIDExIChDb21wbGlhbmNlIFZlcmlmaWNhdGlvbiksICJJUExBIFByb2dyYW0gVGVybXMiIG1lYW5zIDEpIHRoaXMgQWdyZWVtZW50IGFuZCBhcHBsaWNhYmxlIGFtZW5kbWVudHMgYW5kIHRyYW5zYWN0aW9uIGRvY3VtZW50cyBwcm92aWRlZCBieSBJQk0sIGFuZCAyKSBJQk0gc29mdHdhcmUgcG9saWNpZXMgdGhhdCBtYXkgYmUgZm91bmQgYXQgdGhlIElCTSBTb2Z0d2FyZSBQb2xpY3kgd2Vic2l0ZSAod3d3LmlibS5jb20vc29mdHdhcmVwb2xpY2llcyksIGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gdGhvc2UgcG9saWNpZXMgY29uY2VybmluZyBiYWNrdXAsIHN1Yi1jYXBhY2l0eSBwcmljaW5nLCBhbmQgbWlncmF0aW9uLgorCitUaGUgcmlnaHRzIGFuZCBvYmxpZ2F0aW9ucyBzZXQgZm9ydGggaW4gdGhpcyBTZWN0aW9uIDExIHJlbWFpbiBpbiBlZmZlY3QgZHVyaW5nIHRoZSBwZXJpb2QgdGhlIFByb2dyYW0gaXMgbGljZW5zZWQgdG8gTGljZW5zZWUsIGFuZCBmb3IgdHdvIHllYXJzIHRoZXJlYWZ0ZXIuCisKKzExLjEgVmVyaWZpY2F0aW9uIFByb2Nlc3MKKworTGljZW5zZWUgYWdyZWVzIHRvIGNyZWF0ZSwgcmV0YWluLCBhbmQgcHJvdmlkZSB0byBJQk0gYW5kIGl0cyBhdWRpdG9ycyBhY2N1cmF0ZSB3cml0dGVuIHJlY29yZHMsIHN5c3RlbSB0b29sIG91dHB1dHMsIGFuZCBvdGhlciBzeXN0ZW0gaW5mb3JtYXRpb24gc3VmZmljaWVudCB0byBwcm92aWRlIGF1ZGl0YWJsZSB2ZXJpZmljYXRpb24gdGhhdCBMaWNlbnNlZSdzIHVzZSBvZiBhbGwgUHJvZ3JhbXMgaXMgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBJUExBIFByb2dyYW0gVGVybXMsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBhbGwgb2YgSUJNJ3MgYXBwbGljYWJsZSBsaWNlbnNpbmcgYW5kIHByaWNpbmcgcXVhbGlmaWNhdGlvbiB0ZXJtcy4gTGljZW5zZWUgaXMgcmVzcG9uc2libGUgZm9yIDEpIGVuc3VyaW5nIHRoYXQgaXQgZG9lcyBub3QgZXhjZWVkIGl0cyBBdXRob3JpemVkIFVzZSwgYW5kIDIpIHJlbWFpbmluZyBpbiBjb21wbGlhbmNlIHdpdGggSVBMQSBQcm9ncmFtIFRlcm1zLgorCitVcG9uIHJlYXNvbmFibGUgbm90aWNlLCBJQk0gbWF5IHZlcmlmeSBMaWNlbnNlZSdzIGNvbXBsaWFuY2Ugd2l0aCBJUExBIFByb2dyYW0gVGVybXMgYXQgYWxsIHNpdGVzIGFuZCBmb3IgYWxsIGVudmlyb25tZW50cyBpbiB3aGljaCBMaWNlbnNlZSB1c2VzIChmb3IgYW55IHB1cnBvc2UpIFByb2dyYW1zIHN1YmplY3QgdG8gSVBMQSBQcm9ncmFtIFRlcm1zLiBTdWNoIHZlcmlmaWNhdGlvbiB3aWxsIGJlIGNvbmR1Y3RlZCBpbiBhIG1hbm5lciB0aGF0IG1pbmltaXplcyBkaXNydXB0aW9uIHRvIExpY2Vuc2VlJ3MgYnVzaW5lc3MsIGFuZCBtYXkgYmUgY29uZHVjdGVkIG9uIExpY2Vuc2VlJ3MgcHJlbWlzZXMsIGR1cmluZyBub3JtYWwgYnVzaW5lc3MgaG91cnMuIElCTSBtYXkgdXNlIGFuIGluZGVwZW5kZW50IGF1ZGl0b3IgdG8gYXNzaXN0IHdpdGggc3VjaCB2ZXJpZmljYXRpb24sIHByb3ZpZGVkIElCTSBoYXMgYSB3cml0dGVuIGNvbmZpZGVudGlhbGl0eSBhZ3JlZW1lbnQgaW4gcGxhY2Ugd2l0aCBzdWNoIGF1ZGl0b3IuCisKKzExLjIgUmVzb2x1dGlvbgorCitJQk0gd2lsbCBub3RpZnkgTGljZW5zZWUgaW4gd3JpdGluZyBpZiBhbnkgc3VjaCB2ZXJpZmljYXRpb24gaW5kaWNhdGVzIHRoYXQgTGljZW5zZWUgaGFzIHVzZWQgYW55IFByb2dyYW0gaW4gZXhjZXNzIG9mIGl0cyBBdXRob3JpemVkIFVzZSBvciBpcyBvdGhlcndpc2Ugbm90IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgSVBMQSBQcm9ncmFtIFRlcm1zLiBMaWNlbnNlZSBhZ3JlZXMgdG8gcHJvbXB0bHkgcGF5IGRpcmVjdGx5IHRvIElCTSB0aGUgY2hhcmdlcyB0aGF0IElCTSBzcGVjaWZpZXMgaW4gYW4gaW52b2ljZSBmb3IgMSkgYW55IHN1Y2ggZXhjZXNzIHVzZSwgMikgc3VwcG9ydCBmb3Igc3VjaCBleGNlc3MgdXNlIGZvciB0aGUgbGVzc2VyIG9mIHRoZSBkdXJhdGlvbiBvZiBzdWNoIGV4Y2VzcyB1c2Ugb3IgdHdvIHllYXJzLCBhbmQgMykgYW55IGFkZGl0aW9uYWwgY2hhcmdlcyBhbmQgb3RoZXIgbGlhYmlsaXRpZXMgZGV0ZXJtaW5lZCBhcyBhIHJlc3VsdCBvZiBzdWNoIHZlcmlmaWNhdGlvbi4KKworMTIuIFRoaXJkIFBhcnR5IE5vdGljZXMKKworVGhlIFByb2dyYW0gbWF5IGluY2x1ZGUgdGhpcmQgcGFydHkgY29kZSB0aGF0IElCTSwgbm90IHRoZSB0aGlyZCBwYXJ0eSwgbGljZW5zZXMgdG8gTGljZW5zZWUgdW5kZXIgdGhpcyBBZ3JlZW1lbnQuIE5vdGljZXMsIGlmIGFueSwgZm9yIHRoZSB0aGlyZCBwYXJ0eSBjb2RlICgiVGhpcmQgUGFydHkgTm90aWNlcyIpIGFyZSBpbmNsdWRlZCBmb3IgTGljZW5zZWUncyBpbmZvcm1hdGlvbiBvbmx5LiBUaGVzZSBub3RpY2VzIGNhbiBiZSBmb3VuZCBpbiB0aGUgUHJvZ3JhbSdzIE5PVElDRVMgZmlsZShzKS4gSW5mb3JtYXRpb24gb24gaG93IHRvIG9idGFpbiBzb3VyY2UgY29kZSBmb3IgY2VydGFpbiB0aGlyZCBwYXJ0eSBjb2RlIGNhbiBiZSBmb3VuZCBpbiB0aGUgVGhpcmQgUGFydHkgTm90aWNlcy4gSWYgaW4gdGhlIFRoaXJkIFBhcnR5IE5vdGljZXMgSUJNIGlkZW50aWZpZXMgdGhpcmQgcGFydHkgY29kZSBhcyAiTW9kaWZpYWJsZSBUaGlyZCBQYXJ0eSBDb2RlLCIgSUJNIGF1dGhvcml6ZXMgTGljZW5zZWUgdG8gMSkgbW9kaWZ5IHRoZSBNb2RpZmlhYmxlIFRoaXJkIFBhcnR5IENvZGUgYW5kIDIpIHJldmVyc2UgZW5naW5lZXIgdGhlIFByb2dyYW0gbW9kdWxlcyB0aGF0IGRpcmVjdGx5IGludGVyZmFjZSB3aXRoIHRoZSBNb2RpZmlhYmxlIFRoaXJkIFBhcnR5IENvZGUgcHJvdmlkZWQgdGhhdCBpdCBpcyBvbmx5IGZvciB0aGUgcHVycG9zZSBvZiBkZWJ1Z2dpbmcgTGljZW5zZWUncyBtb2RpZmljYXRpb25zIHRvIHN1Y2ggdGhpcmQgcGFydHkgY29kZS4gSUJNJ3Mgc2VydmljZSBhbmQgc3VwcG9ydCBvYmxpZ2F0aW9ucywgaWYgYW55LCBhcHBseSBvbmx5IHRvIHRoZSB1bm1vZGlmaWVkIFByb2dyYW0uCisKKzEzLiBHZW5lcmFsCisKK2EuIE5vdGhpbmcgaW4gdGhpcyBBZ3JlZW1lbnQgYWZmZWN0cyBhbnkgc3RhdHV0b3J5IHJpZ2h0cyBvZiBjb25zdW1lcnMgdGhhdCBjYW5ub3QgYmUgd2FpdmVkIG9yIGxpbWl0ZWQgYnkgY29udHJhY3QuCisKK2IuIEZvciBQcm9ncmFtcyBJQk0gcHJvdmlkZXMgdG8gTGljZW5zZWUgaW4gdGFuZ2libGUgZm9ybSwgSUJNIGZ1bGZpbGxzIGl0cyBzaGlwcGluZyBhbmQgZGVsaXZlcnkgb2JsaWdhdGlvbnMgdXBvbiB0aGUgZGVsaXZlcnkgb2Ygc3VjaCBQcm9ncmFtcyB0byB0aGUgSUJNLWRlc2lnbmF0ZWQgY2FycmllciwgdW5sZXNzIG90aGVyd2lzZSBhZ3JlZWQgdG8gaW4gd3JpdGluZyBieSBMaWNlbnNlZSBhbmQgSUJNLgorCitjLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGhlbGQgdG8gYmUgaW52YWxpZCBvciB1bmVuZm9yY2VhYmxlLCB0aGUgcmVtYWluaW5nIHByb3Zpc2lvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgcmVtYWluIGluIGZ1bGwgZm9yY2UgYW5kIGVmZmVjdC4KKworZC4gTGljZW5zZWUgYWdyZWVzIHRvIGNvbXBseSB3aXRoIGFsbCBhcHBsaWNhYmxlIGV4cG9ydCBhbmQgaW1wb3J0IGxhd3MgYW5kIHJlZ3VsYXRpb25zLCBpbmNsdWRpbmcgVS5TLiBlbWJhcmdvIGFuZCBzYW5jdGlvbnMgcmVndWxhdGlvbnMgYW5kIHByb2hpYml0aW9ucyBvbiBleHBvcnQgZm9yIGNlcnRhaW4gZW5kIHVzZXMgb3IgdG8gY2VydGFpbiB1c2Vycy4KKworZS4gTGljZW5zZWUgYXV0aG9yaXplcyBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIGFuZCBpdHMgc3Vic2lkaWFyaWVzIChhbmQgdGhlaXIgc3VjY2Vzc29ycyBhbmQgYXNzaWducywgY29udHJhY3RvcnMgYW5kIElCTSBCdXNpbmVzcyBQYXJ0bmVycykgdG8gc3RvcmUgYW5kIHVzZSBMaWNlbnNlZSdzIGJ1c2luZXNzIGNvbnRhY3QgaW5mb3JtYXRpb24gd2hlcmV2ZXIgdGhleSBkbyBidXNpbmVzcywgaW4gY29ubmVjdGlvbiB3aXRoIElCTSBwcm9kdWN0cyBhbmQgc2VydmljZXMsIG9yIGluIGZ1cnRoZXJhbmNlIG9mIElCTSdzIGJ1c2luZXNzIHJlbGF0aW9uc2hpcCB3aXRoIExpY2Vuc2VlLgorCitmLiBFYWNoIHBhcnR5IHdpbGwgYWxsb3cgdGhlIG90aGVyIHJlYXNvbmFibGUgb3Bwb3J0dW5pdHkgdG8gY29tcGx5IGJlZm9yZSBpdCBjbGFpbXMgdGhhdCB0aGUgb3RoZXIgaGFzIG5vdCBtZXQgaXRzIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgQWdyZWVtZW50LiBUaGUgcGFydGllcyB3aWxsIGF0dGVtcHQgaW4gZ29vZCBmYWl0aCB0byByZXNvbHZlIGFsbCBkaXNwdXRlcywgZGlzYWdyZWVtZW50cywgb3IgY2xhaW1zIGJldHdlZW4gdGhlIHBhcnRpZXMgcmVsYXRpbmcgdG8gdGhpcyBBZ3JlZW1lbnQuCisKK2cuIFVubGVzcyBvdGhlcndpc2UgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgd2l0aG91dCB0aGUgcG9zc2liaWxpdHkgb2YgY29udHJhY3R1YWwgd2FpdmVyIG9yIGxpbWl0YXRpb246IDEpIG5laXRoZXIgcGFydHkgd2lsbCBicmluZyBhIGxlZ2FsIGFjdGlvbiwgcmVnYXJkbGVzcyBvZiBmb3JtLCBmb3IgYW55IGNsYWltIGFyaXNpbmcgb3V0IG9mIG9yIHJlbGF0ZWQgdG8gdGhpcyBBZ3JlZW1lbnQgbW9yZSB0aGFuIHR3byB5ZWFycyBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlOyBhbmQgMikgdXBvbiB0aGUgZXhwaXJhdGlvbiBvZiBzdWNoIHRpbWUgbGltaXQsIGFueSBzdWNoIGNsYWltIGFuZCBhbGwgcmVzcGVjdGl2ZSByaWdodHMgcmVsYXRlZCB0byB0aGUgY2xhaW0gbGFwc2UuCisKK2guIE5laXRoZXIgTGljZW5zZWUgbm9yIElCTSBpcyByZXNwb25zaWJsZSBmb3IgZmFpbHVyZSB0byBmdWxmaWxsIGFueSBvYmxpZ2F0aW9ucyBkdWUgdG8gY2F1c2VzIGJleW9uZCBpdHMgY29udHJvbC4KKworaS4gTm8gcmlnaHQgb3IgY2F1c2Ugb2YgYWN0aW9uIGZvciBhbnkgdGhpcmQgcGFydHkgaXMgY3JlYXRlZCBieSB0aGlzIEFncmVlbWVudCwgbm9yIGlzIElCTSByZXNwb25zaWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IExpY2Vuc2VlLCBleGNlcHQgYXMgcGVybWl0dGVkIGluIFN1YnNlY3Rpb24gMTAuMSAoSXRlbXMgZm9yIFdoaWNoIElCTSBNYXkgQmUgTGlhYmxlKSBhYm92ZSBmb3IgYm9kaWx5IGluanVyeSAoaW5jbHVkaW5nIGRlYXRoKSBvciBkYW1hZ2UgdG8gcmVhbCBvciB0YW5naWJsZSBwZXJzb25hbCBwcm9wZXJ0eSBmb3Igd2hpY2ggSUJNIGlzIGxlZ2FsbHkgbGlhYmxlIHRvIHRoYXQgdGhpcmQgcGFydHkuCisKK2ouIEluIGVudGVyaW5nIGludG8gdGhpcyBBZ3JlZW1lbnQsIG5laXRoZXIgcGFydHkgaXMgcmVseWluZyBvbiBhbnkgcmVwcmVzZW50YXRpb24gbm90IHNwZWNpZmllZCBpbiB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0byBhbnkgcmVwcmVzZW50YXRpb24gY29uY2VybmluZzogMSkgdGhlIHBlcmZvcm1hbmNlIG9yIGZ1bmN0aW9uIG9mIHRoZSBQcm9ncmFtLCBvdGhlciB0aGFuIGFzIGV4cHJlc3NseSB3YXJyYW50ZWQgaW4gU2VjdGlvbiA4IChXYXJyYW50eSBhbmQgRXhjbHVzaW9ucykgYWJvdmU7IDIpIHRoZSBleHBlcmllbmNlcyBvciByZWNvbW1lbmRhdGlvbnMgb2Ygb3RoZXIgcGFydGllczsgb3IgMykgYW55IHJlc3VsdHMgb3Igc2F2aW5ncyB0aGF0IExpY2Vuc2VlIG1heSBhY2hpZXZlLgorCitrLiBJQk0gaGFzIHNpZ25lZCBhZ3JlZW1lbnRzIHdpdGggY2VydGFpbiBvcmdhbml6YXRpb25zIChjYWxsZWQgIklCTSBCdXNpbmVzcyBQYXJ0bmVycyIpIHRvIHByb21vdGUsIG1hcmtldCwgYW5kIHN1cHBvcnQgY2VydGFpbiBQcm9ncmFtcy4gSUJNIEJ1c2luZXNzIFBhcnRuZXJzIHJlbWFpbiBpbmRlcGVuZGVudCBhbmQgc2VwYXJhdGUgZnJvbSBJQk0uIElCTSBpcyBub3QgcmVzcG9uc2libGUgZm9yIHRoZSBhY3Rpb25zIG9yIHN0YXRlbWVudHMgb2YgSUJNIEJ1c2luZXNzIFBhcnRuZXJzIG9yIG9ibGlnYXRpb25zIHRoZXkgaGF2ZSB0byBMaWNlbnNlZS4KKworbC4gVGhlIGxpY2Vuc2UgYW5kIGludGVsbGVjdHVhbCBwcm9wZXJ0eSBpbmRlbW5pZmljYXRpb24gdGVybXMgb2YgTGljZW5zZWUncyBvdGhlciBhZ3JlZW1lbnRzIHdpdGggSUJNIChzdWNoIGFzIHRoZSBJQk0gQ3VzdG9tZXIgQWdyZWVtZW50KSBkbyBub3QgYXBwbHkgdG8gUHJvZ3JhbSBsaWNlbnNlcyBncmFudGVkIHVuZGVyIHRoaXMgQWdyZWVtZW50LgorCisxNC4gR2VvZ3JhcGhpYyBTY29wZSBhbmQgR292ZXJuaW5nIExhdworCisxNC4xIEdvdmVybmluZyBMYXcKKworQm90aCBwYXJ0aWVzIGFncmVlIHRvIHRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgbGF3cyBvZiB0aGUgY291bnRyeSBpbiB3aGljaCBMaWNlbnNlZSBvYnRhaW5lZCB0aGUgUHJvZ3JhbSBsaWNlbnNlIHRvIGdvdmVybiwgaW50ZXJwcmV0LCBhbmQgZW5mb3JjZSBhbGwgb2YgTGljZW5zZWUncyBhbmQgSUJNJ3MgcmVzcGVjdGl2ZSByaWdodHMsIGR1dGllcywgYW5kIG9ibGlnYXRpb25zIGFyaXNpbmcgZnJvbSwgb3IgcmVsYXRpbmcgaW4gYW55IG1hbm5lciB0bywgdGhlIHN1YmplY3QgbWF0dGVyIG9mIHRoaXMgQWdyZWVtZW50LCB3aXRob3V0IHJlZ2FyZCB0byBjb25mbGljdCBvZiBsYXcgcHJpbmNpcGxlcy4KKworVGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGRvZXMgbm90IGFwcGx5LgorCisxNC4yIEp1cmlzZGljdGlvbgorCitBbGwgcmlnaHRzLCBkdXRpZXMsIGFuZCBvYmxpZ2F0aW9ucyBhcmUgc3ViamVjdCB0byB0aGUgY291cnRzIG9mIHRoZSBjb3VudHJ5IGluIHdoaWNoIExpY2Vuc2VlIG9idGFpbmVkIHRoZSBQcm9ncmFtIGxpY2Vuc2UuCisKK1BhcnQgMiAtIENvdW50cnktdW5pcXVlIFRlcm1zCisKK0ZvciBsaWNlbnNlcyBncmFudGVkIGluIHRoZSBjb3VudHJpZXMgc3BlY2lmaWVkIGJlbG93LCB0aGUgZm9sbG93aW5nIHRlcm1zIHJlcGxhY2Ugb3IgbW9kaWZ5IHRoZSByZWZlcmVuY2VkIHRlcm1zIGluIFBhcnQgMS4gQWxsIHRlcm1zIGluIFBhcnQgMSB0aGF0IGFyZSBub3QgY2hhbmdlZCBieSB0aGVzZSBhbWVuZG1lbnRzIHJlbWFpbiB1bmNoYW5nZWQgYW5kIGluIGVmZmVjdC4gVGhpcyBQYXJ0IDIgaXMgb3JnYW5pemVkIGFzIGZvbGxvd3M6CisKKy0gTXVsdGlwbGUgY291bnRyeSBhbWVuZG1lbnRzIHRvIFBhcnQgMSwgU2VjdGlvbiAxNCAoR292ZXJuaW5nIExhdyBhbmQgSnVyaXNkaWN0aW9uKTsKKworLSBBbWVyaWNhcyBjb3VudHJ5IGFtZW5kbWVudHMgdG8gb3RoZXIgQWdyZWVtZW50IHRlcm1zOworCistIEFzaWEgUGFjaWZpYyBjb3VudHJ5IGFtZW5kbWVudHMgdG8gb3RoZXIgQWdyZWVtZW50IHRlcm1zOyBhbmQKKworLSBFdXJvcGUsIE1pZGRsZSBFYXN0LCBhbmQgQWZyaWNhIGNvdW50cnkgYW1lbmRtZW50cyB0byBvdGhlciBBZ3JlZW1lbnQgdGVybXMuCisKK011bHRpcGxlIGNvdW50cnkgYW1lbmRtZW50cyB0byBQYXJ0IDEsIFNlY3Rpb24gMTQgKEdvdmVybmluZyBMYXcgYW5kIEp1cmlzZGljdGlvbikKKworMTQuMSBHb3Zlcm5pbmcgTGF3CisKK1RoZSBwaHJhc2UgInRoZSBsYXdzIG9mIHRoZSBjb3VudHJ5IGluIHdoaWNoIExpY2Vuc2VlIG9idGFpbmVkIHRoZSBQcm9ncmFtIGxpY2Vuc2UiIGluIHRoZSBmaXJzdCBwYXJhZ3JhcGggb2YgMTQuMSBHb3Zlcm5pbmcgTGF3IGlzIHJlcGxhY2VkIGJ5IHRoZSBmb2xsb3dpbmcgcGhyYXNlcyBpbiB0aGUgY291bnRyaWVzIGJlbG93OgorCitBTUVSSUNBUworCisoMSkgaW4gQ2FuYWRhOiB0aGUgbGF3cyBpbiB0aGUgUHJvdmluY2Ugb2YgT250YXJpbzsKKworKDIpIGluIE1leGljbzogdGhlIGZlZGVyYWwgbGF3cyBvZiB0aGUgUmVwdWJsaWMgb2YgTWV4aWNvOworCisoMykgaW4gdGhlIFVuaXRlZCBTdGF0ZXMsIEFuZ3VpbGxhLCBBbnRpZ3VhL0JhcmJ1ZGEsIEFydWJhLCBCcml0aXNoIFZpcmdpbiBJc2xhbmRzLCBDYXltYW4gSXNsYW5kcywgRG9taW5pY2EsIEdyZW5hZGEsIEd1eWFuYSwgU2FpbnQgS2l0dHMgYW5kIE5ldmlzLCBTYWludCBMdWNpYSwgU2FpbnQgTWFhcnRlbiwgYW5kIFNhaW50IFZpbmNlbnQgYW5kIHRoZSBHcmVuYWRpbmVzOiB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgTmV3IFlvcmssIFVuaXRlZCBTdGF0ZXM7CisKKyg0KSBpbiBWZW5lenVlbGE6IHRoZSBsYXdzIG9mIHRoZSBCb2xpdmFyaWFuIFJlcHVibGljIG9mIFZlbmV6dWVsYTsKKworQVNJQSBQQUNJRklDCisKKyg1KSBpbiBDYW1ib2RpYSBhbmQgTGFvczogdGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIE5ldyBZb3JrLCBVbml0ZWQgU3RhdGVzOworCisoNikgaW4gQXVzdHJhbGlhOiB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb3IgVGVycml0b3J5IGluIHdoaWNoIHRoZSB0cmFuc2FjdGlvbiBpcyBwZXJmb3JtZWQ7CisKKyg3KSBpbiBIb25nIEtvbmcgU0FSIGFuZCBNYWNhdSBTQVI6IHRoZSBsYXdzIG9mIEhvbmcgS29uZyBTcGVjaWFsIEFkbWluaXN0cmF0aXZlIFJlZ2lvbiAoIlNBUiIpOworCisoOCkgaW4gVGFpd2FuOiB0aGUgbGF3cyBvZiBUYWl3YW4KKworRVVST1BFLCBNSURETEUgRUFTVCwgQU5EIEFGUklDQQorCisoOSkgaW4gQWxiYW5pYSwgQXJtZW5pYSwgQXplcmJhaWphbiwgQmVsYXJ1cywgQm9zbmlhLUhlcnplZ292aW5hLCBCdWxnYXJpYSwgQ3JvYXRpYSwgRm9ybWVyIFl1Z29zbGF2IFJlcHVibGljIG9mIE1hY2Vkb25pYSwgR2VvcmdpYSwgSHVuZ2FyeSwgS2F6YWtoc3RhbiwgS3lyZ3l6c3RhbiwgTW9sZG92YSwgTW9udGVuZWdybywgUG9sYW5kLCBSb21hbmlhLCBSdXNzaWEsIFNlcmJpYSwgU2xvdmFraWEsIFRhamlraXN0YW4sIFR1cmttZW5pc3RhbiwgVWtyYWluZSwgYW5kIFV6YmVraXN0YW46IHRoZSBsYXdzIG9mIEF1c3RyaWE7CisKKygxMCkgaW4gQWxnZXJpYSwgQW5kb3JyYSwgQmVuaW4sIEJ1cmtpbmEgRmFzbywgQ2FtZXJvb24sIENhcGUgVmVyZGUsIENlbnRyYWwgQWZyaWNhbiBSZXB1YmxpYywgQ2hhZCwgQ29tb3JvcywgQ29uZ28gUmVwdWJsaWMsIERqaWJvdXRpLCBEZW1vY3JhdGljIFJlcHVibGljIG9mIENvbmdvLCBFcXVhdG9yaWFsIEd1aW5lYSwgRnJlbmNoIEd1aWFuYSwgRnJlbmNoIFBvbHluZXNpYSwgR2Fib24sIEdhbWJpYSwgR3VpbmVhLCBHdWluZWEtQmlzc2F1LCBJdm9yeSBDb2FzdCwgTGViYW5vbiwgTWFkYWdhc2NhciwgTWFsaSwgTWF1cml0YW5pYSwgTWF1cml0aXVzLCBNYXlvdHRlLCBNb3JvY2NvLCBOZXcgQ2FsZWRvbmlhLCBOaWdlciwgUmV1bmlvbiwgU2VuZWdhbCwgU2V5Y2hlbGxlcywgVG9nbywgVHVuaXNpYSwgVmFudWF0dSwgYW5kIFdhbGxpcyBhbmQgRnV0dW5hOiB0aGUgbGF3cyBvZiBGcmFuY2U7CisKKygxMSkgaW4gRXN0b25pYSwgTGF0dmlhLCBhbmQgTGl0aHVhbmlhOiB0aGUgbGF3cyBvZiBGaW5sYW5kOworCisoMTIpIGluIEFuZ29sYSwgQmFocmFpbiwgQm90c3dhbmEsIEJ1cnVuZGksIEVneXB0LCBFcml0cmVhLCBFdGhpb3BpYSwgR2hhbmEsIEpvcmRhbiwgS2VueWEsIEt1d2FpdCwgTGliZXJpYSwgTWFsYXdpLCBNYWx0YSwgTW96YW1iaXF1ZSwgTmlnZXJpYSwgT21hbiwgUGFraXN0YW4sIFFhdGFyLCBSd2FuZGEsIFNhbyBUb21lIGFuZCBQcmluY2lwZSwgU2F1ZGkgQXJhYmlhLCBTaWVycmEgTGVvbmUsIFNvbWFsaWEsIFRhbnphbmlhLCBVZ2FuZGEsIFVuaXRlZCBBcmFiIEVtaXJhdGVzLCB0aGUgVW5pdGVkIEtpbmdkb20sIFdlc3QgQmFuay9HYXphLCBZZW1lbiwgWmFtYmlhLCBhbmQgWmltYmFid2U6IHRoZSBsYXdzIG9mIEVuZ2xhbmQ7IGFuZAorCisoMTMpIGluIFNvdXRoIEFmcmljYSwgTmFtaWJpYSwgTGVzb3RobywgYW5kIFN3YXppbGFuZDogdGhlIGxhd3Mgb2YgdGhlIFJlcHVibGljIG9mIFNvdXRoIEFmcmljYS4KKworMTQuMiBKdXJpc2RpY3Rpb24KKworVGhlIGZvbGxvd2luZyBwYXJhZ3JhcGggcGVydGFpbnMgdG8ganVyaXNkaWN0aW9uIGFuZCByZXBsYWNlcyBTdWJzZWN0aW9uIDE0LjIgKEp1cmlzZGljdGlvbikgYXMgaXQgYXBwbGllcyBmb3IgdGhvc2UgY291bnRyaWVzIGlkZW50aWZpZWQgaW4gYm9sZCBiZWxvdzoKKworQWxsIHJpZ2h0cywgZHV0aWVzLCBhbmQgb2JsaWdhdGlvbnMgYXJlIHN1YmplY3QgdG8gdGhlIGNvdXJ0cyBvZiB0aGUgY291bnRyeSBpbiB3aGljaCBMaWNlbnNlZSBvYnRhaW5lZCB0aGUgUHJvZ3JhbSBsaWNlbnNlIGV4Y2VwdCB0aGF0IGluIHRoZSBjb3VudHJpZXMgaWRlbnRpZmllZCBiZWxvdyBhbGwgZGlzcHV0ZXMgYXJpc2luZyBvdXQgb2Ygb3IgcmVsYXRlZCB0byB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nIHN1bW1hcnkgcHJvY2VlZGluZ3MsIHdpbGwgYmUgYnJvdWdodCBiZWZvcmUgYW5kIHN1YmplY3QgdG8gdGhlIGV4Y2x1c2l2ZSBqdXJpc2RpY3Rpb24gb2YgdGhlIGZvbGxvd2luZyBjb3VydHMgb2YgY29tcGV0ZW50IGp1cmlzZGljdGlvbjoKKworQU1FUklDQVMKKworKDEpIGluIEFyZ2VudGluYTogdGhlIE9yZGluYXJ5IENvbW1lcmNpYWwgQ291cnQgb2YgdGhlIGNpdHkgb2YgQnVlbm9zIEFpcmVzLAorCisoMikgaW4gQnJhemlsOiB0aGUgY291cnQgb2YgUmlvIGRlIEphbmVpcm8sIFJKOworCisoMykgaW4gQ2hpbGU6IHRoZSBDaXZpbCBDb3VydHMgb2YgSnVzdGljZSBvZiBTYW50aWFnbzsKKworKDQpIGluIEVjdWFkb3I6IHRoZSBjaXZpbCBqdWRnZXMgb2YgUXVpdG8gZm9yIGV4ZWN1dG9yeSBvciBzdW1tYXJ5IHByb2NlZWRpbmdzIChhcyBhcHBsaWNhYmxlKTsKKworKDUpIGluIE1leGljbzogdGhlIGNvdXJ0cyBsb2NhdGVkIGluIE1leGljbyBDaXR5LCBGZWRlcmFsIERpc3RyaWN0OworCisoNikgaW4gUGVydTogdGhlIGp1ZGdlcyBhbmQgdHJpYnVuYWxzIG9mIHRoZSBqdWRpY2lhbCBkaXN0cmljdCBvZiBMaW1hLCBDZXJjYWRvOworCisoNykgaW4gVXJ1Z3VheTogdGhlIGNvdXJ0cyBvZiB0aGUgY2l0eSBvZiBNb250ZXZpZGVvOworCisoOCkgaW4gVmVuZXp1ZWxhOiB0aGUgY291cnRzIG9mIHRoZSBtZXRyb3BvbGl0YW4gYXJlYSBvZiB0aGUgY2l0eSBvZiBDYXJhY2FzOworCitFVVJPUEUsIE1JRERMRSBFQVNULCBBTkQgQUZSSUNBCisKKyg5KSBpbiBBdXN0cmlhOiB0aGUgY291cnQgb2YgbGF3IGluIFZpZW5uYSwgQXVzdHJpYSAoSW5uZXItQ2l0eSk7CisKKygxMCkgaW4gQWxnZXJpYSwgQW5kb3JyYSwgQmVuaW4sIEJ1cmtpbmEgRmFzbywgQ2FtZXJvb24sIENhcGUgVmVyZGUsIENlbnRyYWwgQWZyaWNhbiBSZXB1YmxpYywgQ2hhZCwgQ29tb3JvcywgQ29uZ28gUmVwdWJsaWMsIERqaWJvdXRpLCBEZW1vY3JhdGljIFJlcHVibGljIG9mIENvbmdvLCBFcXVhdG9yaWFsIEd1aW5lYSwgRnJhbmNlLCBGcmVuY2ggR3VpYW5hLCBGcmVuY2ggUG9seW5lc2lhLCBHYWJvbiwgR2FtYmlhLCBHdWluZWEsIEd1aW5lYS1CaXNzYXUsIEl2b3J5IENvYXN0LCBMZWJhbm9uLCBNYWRhZ2FzY2FyLCBNYWxpLCBNYXVyaXRhbmlhLCBNYXVyaXRpdXMsIE1heW90dGUsIE1vbmFjbywgTW9yb2NjbywgTmV3IENhbGVkb25pYSwgTmlnZXIsIFJldW5pb24sIFNlbmVnYWwsIFNleWNoZWxsZXMsIFRvZ28sIFR1bmlzaWEsIFZhbnVhdHUsIGFuZCBXYWxsaXMgYW5kIEZ1dHVuYTogdGhlIENvbW1lcmNpYWwgQ291cnQgb2YgUGFyaXM7CisKKygxMSkgaW4gQW5nb2xhLCBCYWhyYWluLCBCb3Rzd2FuYSwgQnVydW5kaSwgRWd5cHQsIEVyaXRyZWEsIEV0aGlvcGlhLCBHaGFuYSwgSm9yZGFuLCBLZW55YSwgS3V3YWl0LCBMaWJlcmlhLCBNYWxhd2ksIE1hbHRhLCBNb3phbWJpcXVlLCBOaWdlcmlhLCBPbWFuLCBQYWtpc3RhbiwgUWF0YXIsIFJ3YW5kYSwgU2FvIFRvbWUgYW5kIFByaW5jaXBlLCBTYXVkaSBBcmFiaWEsIFNpZXJyYSBMZW9uZSwgU29tYWxpYSwgVGFuemFuaWEsIFVnYW5kYSwgVW5pdGVkIEFyYWIgRW1pcmF0ZXMsIHRoZSBVbml0ZWQgS2luZ2RvbSwgV2VzdCBCYW5rL0dhemEsIFllbWVuLCBaYW1iaWEsIGFuZCBaaW1iYWJ3ZTogdGhlIEVuZ2xpc2ggY291cnRzOworCisoMTIpIGluIFNvdXRoIEFmcmljYSwgTmFtaWJpYSwgTGVzb3RobywgYW5kIFN3YXppbGFuZDogdGhlIEhpZ2ggQ291cnQgaW4gSm9oYW5uZXNidXJnOworCisoMTMpIGluIEdyZWVjZTogdGhlIGNvbXBldGVudCBjb3VydCBvZiBBdGhlbnM7CisKKygxNCkgaW4gSXNyYWVsOiB0aGUgY291cnRzIG9mIFRlbCBBdml2LUphZmZhOworCisoMTUpIGluIEl0YWx5OiB0aGUgY291cnRzIG9mIE1pbGFuOworCisoMTYpIGluIFBvcnR1Z2FsOiB0aGUgY291cnRzIG9mIExpc2JvbjsKKworKDE3KSBpbiBTcGFpbjogdGhlIGNvdXJ0cyBvZiBNYWRyaWQ7IGFuZAorCisoMTgpIGluIFR1cmtleTogdGhlIElzdGFuYnVsIENlbnRyYWwgQ291cnRzIGFuZCBFeGVjdXRpb24gRGlyZWN0b3JhdGVzIG9mIElzdGFuYnVsLCB0aGUgUmVwdWJsaWMgb2YgVHVya2V5LgorCisxNC4zIEFyYml0cmF0aW9uCisKK1RoZSBmb2xsb3dpbmcgcGFyYWdyYXBoIGlzIGFkZGVkIGFzIGEgbmV3IFN1YnNlY3Rpb24gMTQuMyAoQXJiaXRyYXRpb24pIGFzIGl0IGFwcGxpZXMgZm9yIHRob3NlIGNvdW50cmllcyBpZGVudGlmaWVkIGluIGJvbGQgYmVsb3cuIFRoZSBwcm92aXNpb25zIG9mIHRoaXMgU3Vic2VjdGlvbiAxNC4zIHByZXZhaWwgb3ZlciB0aG9zZSBvZiBTdWJzZWN0aW9uIDE0LjIgKEp1cmlzZGljdGlvbikgdG8gdGhlIGV4dGVudCBwZXJtaXR0ZWQgYnkgdGhlIGFwcGxpY2FibGUgZ292ZXJuaW5nIGxhdyBhbmQgcnVsZXMgb2YgcHJvY2VkdXJlOgorCitBU0lBIFBBQ0lGSUMKKworKDEpIEluIENhbWJvZGlhLCBJbmRpYSwgSW5kb25lc2lhLCBMYW9zLCBQaGlsaXBwaW5lcywgYW5kIFZpZXRuYW06CisKK0Rpc3B1dGVzIGFyaXNpbmcgb3V0IG9mIG9yIGluIGNvbm5lY3Rpb24gd2l0aCB0aGlzIEFncmVlbWVudCB3aWxsIGJlIGZpbmFsbHkgc2V0dGxlZCBieSBhcmJpdHJhdGlvbiB3aGljaCB3aWxsIGJlIGhlbGQgaW4gU2luZ2Fwb3JlIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgQXJiaXRyYXRpb24gUnVsZXMgb2YgU2luZ2Fwb3JlIEludGVybmF0aW9uYWwgQXJiaXRyYXRpb24gQ2VudGVyICgiU0lBQyBSdWxlcyIpIHRoZW4gaW4gZWZmZWN0LiBUaGUgYXJiaXRyYXRpb24gYXdhcmQgd2lsbCBiZSBmaW5hbCBhbmQgYmluZGluZyBmb3IgdGhlIHBhcnRpZXMgd2l0aG91dCBhcHBlYWwgYW5kIHdpbGwgYmUgaW4gd3JpdGluZyBhbmQgc2V0IGZvcnRoIHRoZSBmaW5kaW5ncyBvZiBmYWN0IGFuZCB0aGUgY29uY2x1c2lvbnMgb2YgbGF3LgorCitUaGUgbnVtYmVyIG9mIGFyYml0cmF0b3JzIHdpbGwgYmUgdGhyZWUsIHdpdGggZWFjaCBzaWRlIHRvIHRoZSBkaXNwdXRlIGJlaW5nIGVudGl0bGVkIHRvIGFwcG9pbnQgb25lIGFyYml0cmF0b3IuIFRoZSB0d28gYXJiaXRyYXRvcnMgYXBwb2ludGVkIGJ5IHRoZSBwYXJ0aWVzIHdpbGwgYXBwb2ludCBhIHRoaXJkIGFyYml0cmF0b3Igd2hvIHdpbGwgYWN0IGFzIGNoYWlybWFuIG9mIHRoZSBwcm9jZWVkaW5ncy4gVmFjYW5jaWVzIGluIHRoZSBwb3N0IG9mIGNoYWlybWFuIHdpbGwgYmUgZmlsbGVkIGJ5IHRoZSBwcmVzaWRlbnQgb2YgdGhlIFNJQUMuIE90aGVyIHZhY2FuY2llcyB3aWxsIGJlIGZpbGxlZCBieSB0aGUgcmVzcGVjdGl2ZSBub21pbmF0aW5nIHBhcnR5LiBQcm9jZWVkaW5ncyB3aWxsIGNvbnRpbnVlIGZyb20gdGhlIHN0YWdlIHRoZXkgd2VyZSBhdCB3aGVuIHRoZSB2YWNhbmN5IG9jY3VycmVkLgorCitJZiBvbmUgb2YgdGhlIHBhcnRpZXMgcmVmdXNlcyBvciBvdGhlcndpc2UgZmFpbHMgdG8gYXBwb2ludCBhbiBhcmJpdHJhdG9yIHdpdGhpbiAzMCBkYXlzIG9mIHRoZSBkYXRlIHRoZSBvdGhlciBwYXJ0eSBhcHBvaW50cyBpdHMsIHRoZSBmaXJzdCBhcHBvaW50ZWQgYXJiaXRyYXRvciB3aWxsIGJlIHRoZSBzb2xlIGFyYml0cmF0b3IsIHByb3ZpZGVkIHRoYXQgdGhlIGFyYml0cmF0b3Igd2FzIHZhbGlkbHkgYW5kIHByb3Blcmx5IGFwcG9pbnRlZC4gQWxsIHByb2NlZWRpbmdzIHdpbGwgYmUgY29uZHVjdGVkLCBpbmNsdWRpbmcgYWxsIGRvY3VtZW50cyBwcmVzZW50ZWQgaW4gc3VjaCBwcm9jZWVkaW5ncywgaW4gdGhlIEVuZ2xpc2ggbGFuZ3VhZ2UuIFRoZSBFbmdsaXNoIGxhbmd1YWdlIHZlcnNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgcHJldmFpbHMgb3ZlciBhbnkgb3RoZXIgbGFuZ3VhZ2UgdmVyc2lvbi4KKworKDIpIEluIHRoZSBQZW9wbGUncyBSZXB1YmxpYyBvZiBDaGluYToKKworSW4gY2FzZSBubyBzZXR0bGVtZW50IGNhbiBiZSByZWFjaGVkLCB0aGUgZGlzcHV0ZXMgd2lsbCBiZSBzdWJtaXR0ZWQgdG8gQ2hpbmEgSW50ZXJuYXRpb25hbCBFY29ub21pYyBhbmQgVHJhZGUgQXJiaXRyYXRpb24gQ29tbWlzc2lvbiBmb3IgYXJiaXRyYXRpb24gYWNjb3JkaW5nIHRvIHRoZSB0aGVuIGVmZmVjdGl2ZSBydWxlcyBvZiB0aGUgc2FpZCBBcmJpdHJhdGlvbiBDb21taXNzaW9uLiBUaGUgYXJiaXRyYXRpb24gd2lsbCB0YWtlIHBsYWNlIGluIEJlaWppbmcgYW5kIGJlIGNvbmR1Y3RlZCBpbiBDaGluZXNlLiBUaGUgYXJiaXRyYXRpb24gYXdhcmQgd2lsbCBiZSBmaW5hbCBhbmQgYmluZGluZyBvbiBib3RoIHBhcnRpZXMuIER1cmluZyB0aGUgY291cnNlIG9mIGFyYml0cmF0aW9uLCB0aGlzIGFncmVlbWVudCB3aWxsIGNvbnRpbnVlIHRvIGJlIHBlcmZvcm1lZCBleGNlcHQgZm9yIHRoZSBwYXJ0IHdoaWNoIHRoZSBwYXJ0aWVzIGFyZSBkaXNwdXRpbmcgYW5kIHdoaWNoIGlzIHVuZGVyZ29pbmcgYXJiaXRyYXRpb24uCisKK0VVUk9QRSwgTUlERExFIEVBU1QsIEFORCBBRlJJQ0EKKworKDMpIEluIEFsYmFuaWEsIEFybWVuaWEsIEF6ZXJiYWlqYW4sIEJlbGFydXMsIEJvc25pYS1IZXJ6ZWdvdmluYSwgQnVsZ2FyaWEsIENyb2F0aWEsIEZvcm1lciBZdWdvc2xhdiBSZXB1YmxpYyBvZiBNYWNlZG9uaWEsIEdlb3JnaWEsIEh1bmdhcnksIEthemFraHN0YW4sIEt5cmd5enN0YW4sIE1vbGRvdmEsIE1vbnRlbmVncm8sIFBvbGFuZCwgUm9tYW5pYSwgUnVzc2lhLCBTZXJiaWEsIFNsb3Zha2lhLCBUYWppa2lzdGFuLCBUdXJrbWVuaXN0YW4sIFVrcmFpbmUsIGFuZCBVemJla2lzdGFuOgorCitBbGwgZGlzcHV0ZXMgYXJpc2luZyBvdXQgb2YgdGhpcyBBZ3JlZW1lbnQgb3IgcmVsYXRlZCB0byBpdHMgdmlvbGF0aW9uLCB0ZXJtaW5hdGlvbiBvciBudWxsaXR5IHdpbGwgYmUgZmluYWxseSBzZXR0bGVkIHVuZGVyIHRoZSBSdWxlcyBvZiBBcmJpdHJhdGlvbiBhbmQgQ29uY2lsaWF0aW9uIG9mIHRoZSBJbnRlcm5hdGlvbmFsIEFyYml0cmFsIENlbnRlciBvZiB0aGUgRmVkZXJhbCBFY29ub21pYyBDaGFtYmVyIGluIFZpZW5uYSAoVmllbm5hIFJ1bGVzKSBieSB0aHJlZSBhcmJpdHJhdG9ycyBhcHBvaW50ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZXNlIHJ1bGVzLiBUaGUgYXJiaXRyYXRpb24gd2lsbCBiZSBoZWxkIGluIFZpZW5uYSwgQXVzdHJpYSwgYW5kIHRoZSBvZmZpY2lhbCBsYW5ndWFnZSBvZiB0aGUgcHJvY2VlZGluZ3Mgd2lsbCBiZSBFbmdsaXNoLiBUaGUgZGVjaXNpb24gb2YgdGhlIGFyYml0cmF0b3JzIHdpbGwgYmUgZmluYWwgYW5kIGJpbmRpbmcgdXBvbiBib3RoIHBhcnRpZXMuIFRoZXJlZm9yZSwgcHVyc3VhbnQgdG8gcGFyYWdyYXBoIDU5OCAoMikgb2YgdGhlIEF1c3RyaWFuIENvZGUgb2YgQ2l2aWwgUHJvY2VkdXJlLCB0aGUgcGFydGllcyBleHByZXNzbHkgd2FpdmUgdGhlIGFwcGxpY2F0aW9uIG9mIHBhcmFncmFwaCA1OTUgKDEpIGZpZ3VyZSA3IG9mIHRoZSBDb2RlLiBJQk0gbWF5LCBob3dldmVyLCBpbnN0aXR1dGUgcHJvY2VlZGluZ3MgaW4gYSBjb21wZXRlbnQgY291cnQgaW4gdGhlIGNvdW50cnkgb2YgaW5zdGFsbGF0aW9uLgorCisoNCkgSW4gRXN0b25pYSwgTGF0dmlhLCBhbmQgTGl0aHVhbmlhOgorCitBbGwgZGlzcHV0ZXMgYXJpc2luZyBpbiBjb25uZWN0aW9uIHdpdGggdGhpcyBBZ3JlZW1lbnQgd2lsbCBiZSBmaW5hbGx5IHNldHRsZWQgaW4gYXJiaXRyYXRpb24gdGhhdCB3aWxsIGJlIGhlbGQgaW4gSGVsc2lua2ksIEZpbmxhbmQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBhcmJpdHJhdGlvbiBsYXdzIG9mIEZpbmxhbmQgdGhlbiBpbiBlZmZlY3QuIEVhY2ggcGFydHkgd2lsbCBhcHBvaW50IG9uZSBhcmJpdHJhdG9yLiBUaGUgYXJiaXRyYXRvcnMgd2lsbCB0aGVuIGpvaW50bHkgYXBwb2ludCB0aGUgY2hhaXJtYW4uIElmIGFyYml0cmF0b3JzIGNhbm5vdCBhZ3JlZSBvbiB0aGUgY2hhaXJtYW4sIHRoZW4gdGhlIENlbnRyYWwgQ2hhbWJlciBvZiBDb21tZXJjZSBpbiBIZWxzaW5raSB3aWxsIGFwcG9pbnQgdGhlIGNoYWlybWFuLgorCitBTUVSSUNBUyBDT1VOVFJZIEFNRU5ETUVOVFMKKworQ0FOQURBCisKKzEwLjEgSXRlbXMgZm9yIFdoaWNoIElCTSBNYXkgYmUgTGlhYmxlCisKK1RoZSBmb2xsb3dpbmcgcmVwbGFjZXMgSXRlbSAxIGluIHRoZSBmaXJzdCBwYXJhZ3JhcGggb2YgdGhpcyBTdWJzZWN0aW9uIDEwLjEgKEl0ZW1zIGZvciBXaGljaCBJQk0gTWF5IGJlIExpYWJsZSk6CisKKzEpIGRhbWFnZXMgZm9yIGJvZGlseSBpbmp1cnkgKGluY2x1ZGluZyBkZWF0aCkgYW5kIHBoeXNpY2FsIGhhcm0gdG8gcmVhbCBwcm9wZXJ0eSBhbmQgdGFuZ2libGUgcGVyc29uYWwgcHJvcGVydHkgY2F1c2VkIGJ5IElCTSdzIG5lZ2xpZ2VuY2U7IGFuZAorCisxMy4gR2VuZXJhbAorCitUaGUgZm9sbG93aW5nIHJlcGxhY2VzIEl0ZW0gMTMuZDoKKworZC4gTGljZW5zZWUgYWdyZWVzIHRvIGNvbXBseSB3aXRoIGFsbCBhcHBsaWNhYmxlIGV4cG9ydCBhbmQgaW1wb3J0IGxhd3MgYW5kIHJlZ3VsYXRpb25zLCBpbmNsdWRpbmcgdGhvc2Ugb2YgdGhhdCBhcHBseSB0byBnb29kcyBvZiBVbml0ZWQgU3RhdGVzIG9yaWdpbiBhbmQgdGhhdCBwcm9oaWJpdCBvciBsaW1pdCBleHBvcnQgZm9yIGNlcnRhaW4gdXNlcyBvciB0byBjZXJ0YWluIHVzZXJzLgorCitUaGUgZm9sbG93aW5nIHJlcGxhY2VzIEl0ZW0gMTMuaToKKworaS4gTm8gcmlnaHQgb3IgY2F1c2Ugb2YgYWN0aW9uIGZvciBhbnkgdGhpcmQgcGFydHkgaXMgY3JlYXRlZCBieSB0aGlzIEFncmVlbWVudCBvciBhbnkgdHJhbnNhY3Rpb24gdW5kZXIgaXQsIG5vciBpcyBJQk0gcmVzcG9uc2libGUgZm9yIGFueSB0aGlyZCBwYXJ0eSBjbGFpbXMgYWdhaW5zdCBMaWNlbnNlZSBleGNlcHQgYXMgcGVybWl0dGVkIGJ5IHRoZSBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eSBzZWN0aW9uIGFib3ZlIGZvciBib2RpbHkgaW5qdXJ5IChpbmNsdWRpbmcgZGVhdGgpIG9yIHBoeXNpY2FsIGhhcm0gdG8gcmVhbCBvciB0YW5naWJsZSBwZXJzb25hbCBwcm9wZXJ0eSBjYXVzZWQgYnkgSUJNJ3MgbmVnbGlnZW5jZSBmb3Igd2hpY2ggSUJNIGlzIGxlZ2FsbHkgbGlhYmxlIHRvIHRoYXQgdGhpcmQgcGFydHkuCisKK1RoZSBmb2xsb3dpbmcgaXMgYWRkZWQgYXMgSXRlbSAxMy5tOgorCittLiBGb3IgcHVycG9zZXMgb2YgdGhpcyBJdGVtIDEzLm0sICJQZXJzb25hbCBEYXRhIiByZWZlcnMgdG8gaW5mb3JtYXRpb24gcmVsYXRpbmcgdG8gYW4gaWRlbnRpZmllZCBvciBpZGVudGlmaWFibGUgaW5kaXZpZHVhbCBtYWRlIGF2YWlsYWJsZSBieSBvbmUgb2YgdGhlIHBhcnRpZXMsIGl0cyBwZXJzb25uZWwgb3IgYW55IG90aGVyIGluZGl2aWR1YWwgdG8gdGhlIG90aGVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGlzIEFncmVlbWVudC4gVGhlIGZvbGxvd2luZyBwcm92aXNpb25zIGFwcGx5IGluIHRoZSBldmVudCB0aGF0IG9uZSBwYXJ0eSBtYWtlcyBQZXJzb25hbCBEYXRhIGF2YWlsYWJsZSB0byB0aGUgb3RoZXI6CisKKygxKSBHZW5lcmFsCisKKyhhKSBFYWNoIHBhcnR5IGlzIHJlc3BvbnNpYmxlIGZvciBjb21wbHlpbmcgd2l0aCBhbnkgb2JsaWdhdGlvbnMgYXBwbHlpbmcgdG8gaXQgdW5kZXIgYXBwbGljYWJsZSBDYW5hZGlhbiBkYXRhIHByaXZhY3kgbGF3cyBhbmQgcmVndWxhdGlvbnMgKCJMYXdzIikuCisKKyhiKSBOZWl0aGVyIHBhcnR5IHdpbGwgcmVxdWVzdCBQZXJzb25hbCBEYXRhIGJleW9uZCB3aGF0IGlzIG5lY2Vzc2FyeSB0byBmdWxmaWxsIHRoZSBwdXJwb3NlKHMpIGZvciB3aGljaCBpdCBpcyByZXF1ZXN0ZWQuIFRoZSBwdXJwb3NlKHMpIGZvciByZXF1ZXN0aW5nIFBlcnNvbmFsIERhdGEgbXVzdCBiZSByZWFzb25hYmxlLiBFYWNoIHBhcnR5IHdpbGwgYWdyZWUgaW4gYWR2YW5jZSBhcyB0byB0aGUgdHlwZSBvZiBQZXJzb25hbCBEYXRhIHRoYXQgaXMgcmVxdWlyZWQgdG8gYmUgbWFkZSBhdmFpbGFibGUuCisKKygyKSBTZWN1cml0eSBTYWZlZ3VhcmRzCisKKyhhKSBFYWNoIHBhcnR5IGFja25vd2xlZGdlcyB0aGF0IGl0IGlzIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgYW5kIGNvbW11bmljYXRpbmcgdG8gdGhlIG90aGVyIHRoZSBhcHByb3ByaWF0ZSB0ZWNobm9sb2dpY2FsLCBwaHlzaWNhbCBhbmQgb3JnYW5pemF0aW9uYWwgc2VjdXJpdHkgbWVhc3VyZXMgcmVxdWlyZWQgdG8gcHJvdGVjdCBQZXJzb25hbCBEYXRhLgorCisoYikgRWFjaCBwYXJ0eSB3aWxsIGVuc3VyZSB0aGF0IFBlcnNvbmFsIERhdGEgaXMgcHJvdGVjdGVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgc2VjdXJpdHkgc2FmZWd1YXJkcyBjb21tdW5pY2F0ZWQgYW5kIGFncmVlZCB0byBieSB0aGUgb3RoZXIuCisKKyhjKSBFYWNoIHBhcnR5IHdpbGwgZW5zdXJlIHRoYXQgYW55IHRoaXJkIHBhcnR5IHRvIHdob20gUGVyc29uYWwgRGF0YSBpcyB0cmFuc2ZlcnJlZCBpcyBib3VuZCBieSB0aGUgYXBwbGljYWJsZSB0ZXJtcyBvZiB0aGlzIHNlY3Rpb24uCisKKyhkKSBBZGRpdGlvbmFsIG9yIGRpZmZlcmVudCBzZXJ2aWNlcyByZXF1aXJlZCB0byBjb21wbHkgd2l0aCB0aGUgTGF3cyB3aWxsIGJlIGRlZW1lZCBhIHJlcXVlc3QgZm9yIG5ldyBzZXJ2aWNlcy4KKworKDMpIFVzZQorCitFYWNoIHBhcnR5IGFncmVlcyB0aGF0IFBlcnNvbmFsIERhdGEgd2lsbCBvbmx5IGJlIHVzZWQsIGFjY2Vzc2VkLCBtYW5hZ2VkLCB0cmFuc2ZlcnJlZCwgZGlzY2xvc2VkIHRvIHRoaXJkIHBhcnRpZXMgb3Igb3RoZXJ3aXNlIHByb2Nlc3NlZCB0byBmdWxmaWxsIHRoZSBwdXJwb3NlKHMpIGZvciB3aGljaCBpdCB3YXMgbWFkZSBhdmFpbGFibGUuCisKKyg0KSBBY2Nlc3MgUmVxdWVzdHMKKworKGEpIEVhY2ggcGFydHkgYWdyZWVzIHRvIHJlYXNvbmFibHkgY29vcGVyYXRlIHdpdGggdGhlIG90aGVyIGluIGNvbm5lY3Rpb24gd2l0aCByZXF1ZXN0cyB0byBhY2Nlc3Mgb3IgYW1lbmQgUGVyc29uYWwgRGF0YS4KKworKGIpIEVhY2ggcGFydHkgYWdyZWVzIHRvIHJlaW1idXJzZSB0aGUgb3RoZXIgZm9yIGFueSByZWFzb25hYmxlIGNoYXJnZXMgaW5jdXJyZWQgaW4gcHJvdmlkaW5nIGVhY2ggb3RoZXIgYXNzaXN0YW5jZS4KKworKGMpIEVhY2ggcGFydHkgYWdyZWVzIHRvIGFtZW5kIFBlcnNvbmFsIERhdGEgb25seSB1cG9uIHJlY2VpdmluZyBpbnN0cnVjdGlvbnMgdG8gZG8gc28gZnJvbSB0aGUgb3RoZXIgcGFydHkgb3IgaXRzIHBlcnNvbm5lbC4KKworKDUpIFJldGVudGlvbgorCitFYWNoIHBhcnR5IHdpbGwgcHJvbXB0bHkgcmV0dXJuIHRvIHRoZSBvdGhlciBvciBkZXN0cm95IGFsbCBQZXJzb25hbCBEYXRhIHRoYXQgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeSB0byBmdWxmaWxsIHRoZSBwdXJwb3NlKHMpIGZvciB3aGljaCBpdCB3YXMgbWFkZSBhdmFpbGFibGUsIHVubGVzcyBvdGhlcndpc2UgaW5zdHJ1Y3RlZCBieSB0aGUgb3RoZXIgb3IgaXRzIHBlcnNvbm5lbCBvciByZXF1aXJlZCBieSBsYXcuCisKKyg2KSBQdWJsaWMgQm9kaWVzIFdobyBBcmUgU3ViamVjdCB0byBQdWJsaWMgU2VjdG9yIFByaXZhY3kgTGVnaXNsYXRpb24KKworRm9yIEN1c3RvbWVycyB3aG8gYXJlIHB1YmxpYyBib2RpZXMgc3ViamVjdCB0byBwdWJsaWMgc2VjdG9yIHByaXZhY3kgbGVnaXNsYXRpb24sIHRoaXMgSXRlbSAxMy5tIGFwcGxpZXMgb25seSB0byBQZXJzb25hbCBEYXRhIG1hZGUgYXZhaWxhYmxlIHRvIEN1c3RvbWVyIGluIGNvbm5lY3Rpb24gd2l0aCB0aGlzIEFncmVlbWVudCwgYW5kIHRoZSBvYmxpZ2F0aW9ucyBpbiB0aGlzIHNlY3Rpb24gYXBwbHkgb25seSB0byBDdXN0b21lciwgZXhjZXB0IHRoYXQ6IDEpIHNlY3Rpb24gKDIpKGEpIGFwcGxpZXMgb25seSB0byBJQk07IDIpIHNlY3Rpb25zICgxKShhKSBhbmQgKDQpKGEpIGFwcGx5IHRvIGJvdGggcGFydGllczsgYW5kIDMpIHNlY3Rpb24gKDQpKGIpIGFuZCB0aGUgbGFzdCBzZW50ZW5jZSBpbiAoMSkoYikgZG8gbm90IGFwcGx5LgorCitQRVJVCisKKzEwLiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eQorCitUaGUgZm9sbG93aW5nIGlzIGFkZGVkIHRvIHRoZSBlbmQgb2YgdGhpcyBTZWN0aW9uIDEwIChMaW1pdGF0aW9uIG9mIExpYWJpbGl0eSk6CisKK0V4Y2VwdCBhcyBleHByZXNzbHkgcmVxdWlyZWQgYnkgbGF3IHdpdGhvdXQgdGhlIHBvc3NpYmlsaXR5IG9mIGNvbnRyYWN0dWFsIHdhaXZlciwgTGljZW5zZWUgYW5kIElCTSBpbnRlbmQgdGhhdCB0aGUgbGltaXRhdGlvbiBvZiBsaWFiaWxpdHkgaW4gdGhpcyBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eSBzZWN0aW9uIGFwcGxpZXMgdG8gZGFtYWdlcyBjYXVzZWQgYnkgYWxsIHR5cGVzIG9mIGNsYWltcyBhbmQgY2F1c2VzIG9mIGFjdGlvbi4gSWYgYW55IGxpbWl0YXRpb24gb24gb3IgZXhjbHVzaW9uIGZyb20gbGlhYmlsaXR5IGluIHRoaXMgc2VjdGlvbiBpcyBoZWxkIGJ5IGEgY291cnQgb2YgY29tcGV0ZW50IGp1cmlzZGljdGlvbiB0byBiZSB1bmVuZm9yY2VhYmxlIHdpdGggcmVzcGVjdCB0byBhIHBhcnRpY3VsYXIgY2xhaW0gb3IgY2F1c2Ugb2YgYWN0aW9uLCB0aGUgcGFydGllcyBpbnRlbmQgdGhhdCBpdCBub25ldGhlbGVzcyBhcHBseSB0byB0aGUgbWF4aW11bSBleHRlbnQgcGVybWl0dGVkIGJ5IGFwcGxpY2FibGUgbGF3IHRvIGFsbCBvdGhlciBjbGFpbXMgYW5kIGNhdXNlcyBvZiBhY3Rpb24uCisKKzEwLjEgSXRlbXMgZm9yIFdoaWNoIElCTSBNYXkgYmUgTGlhYmxlCisKK1RoZSBmb2xsb3dpbmcgaXMgYWRkZWQgYXQgdGhlIGVuZCBvZiB0aGlzIFN1YnNlY3Rpb24gMTAuMToKKworSW4gYWNjb3JkYW5jZSB3aXRoIEFydGljbGUgMTMyOCBvZiB0aGUgUGVydXZpYW4gQ2l2aWwgQ29kZSwgdGhlIGxpbWl0YXRpb25zIGFuZCBleGNsdXNpb25zIHNwZWNpZmllZCBpbiB0aGlzIHNlY3Rpb24gd2lsbCBub3QgYXBwbHkgdG8gZGFtYWdlcyBjYXVzZWQgYnkgSUJNJ3Mgd2lsbGZ1bCBtaXNjb25kdWN0ICgiZG9sbyIpIG9yIGdyb3NzIG5lZ2xpZ2VuY2UgKCJjdWxwYSBpbmV4Y3VzYWJsZSIpLgorCitVTklURUQgU1RBVEVTIE9GIEFNRVJJQ0E6CisKKzUuIFRheGVzCisKK1RoZSBmb2xsb3dpbmcgaXMgYWRkZWQgYXQgdGhlIGVuZCBvZiB0aGlzIFNlY3Rpb24gNSAoVGF4ZXMpCisKK0ZvciBQcm9ncmFtcyBkZWxpdmVyZWQgZWxlY3Ryb25pY2FsbHkgaW4gdGhlIFVuaXRlZCBTdGF0ZXMgZm9yIHdoaWNoIExpY2Vuc2VlIGNsYWltcyBhIHN0YXRlIHNhbGVzIGFuZCB1c2UgdGF4IGV4ZW1wdGlvbiwgTGljZW5zZWUgYWdyZWVzIG5vdCB0byByZWNlaXZlIGFueSB0YW5naWJsZSBwZXJzb25hbCBwcm9wZXJ0eSAoZS5nLiwgbWVkaWEgYW5kIHB1YmxpY2F0aW9ucykgYXNzb2NpYXRlZCB3aXRoIHRoZSBlbGVjdHJvbmljIHByb2dyYW0uCisKK0xpY2Vuc2VlIGFncmVlcyB0byBiZSByZXNwb25zaWJsZSBmb3IgYW55IHNhbGVzIGFuZCB1c2UgdGF4IGxpYWJpbGl0aWVzIHRoYXQgbWF5IGFyaXNlIGFzIGEgcmVzdWx0IG9mIExpY2Vuc2VlJ3Mgc3Vic2VxdWVudCByZWRpc3RyaWJ1dGlvbiBvZiBQcm9ncmFtcyBhZnRlciBkZWxpdmVyeSBieSBJQk0uCisKKzEzLiBHZW5lcmFsCisKK1RoZSBmb2xsb3dpbmcgaXMgYWRkZWQgdG8gU2VjdGlvbiAxMyBhcyBJdGVtIDEzLm06CisKK1UuUy4gR292ZXJubWVudCBVc2VycyBSZXN0cmljdGVkIFJpZ2h0cyAtIFVzZSwgZHVwbGljYXRpb24gb3IgZGlzY2xvc3VyZSBpcyByZXN0cmljdGVkIGJ5IHRoZSBHU0EgSVQgU2NoZWR1bGUgNzAgQ29udHJhY3Qgd2l0aCB0aGUgSUJNIENvcnBvcmF0aW9uLgorCitUaGUgZm9sbG93aW5nIGlzIGFkZGVkIHRvIEl0ZW0gMTMuZjoKKworRWFjaCBwYXJ0eSB3YWl2ZXMgYW55IHJpZ2h0IHRvIGEganVyeSB0cmlhbCBpbiBhbnkgcHJvY2VlZGluZyBhcmlzaW5nIG91dCBvZiBvciByZWxhdGVkIHRvIHRoaXMgQWdyZWVtZW50LgorCitBU0lBIFBBQ0lGSUMgQ09VTlRSWSBBTUVORE1FTlRTCisKK0FVU1RSQUxJQToKKworNS4gVGF4ZXMKKworVGhlIGZvbGxvd2luZyBzZW50ZW5jZXMgcmVwbGFjZSB0aGUgZmlyc3QgdHdvIHNlbnRlbmNlcyBvZiBTZWN0aW9uIDUgKFRheGVzKToKKworSWYgYW55IGdvdmVybm1lbnQgb3IgYXV0aG9yaXR5IGltcG9zZXMgYSBkdXR5LCB0YXggKG90aGVyIHRoYW4gaW5jb21lIHRheCksIGxldnksIG9yIGZlZSwgb24gdGhpcyBBZ3JlZW1lbnQgb3Igb24gdGhlIFByb2dyYW0gaXRzZWxmLCB0aGF0IGlzIG5vdCBvdGhlcndpc2UgcHJvdmlkZWQgZm9yIGluIHRoZSBhbW91bnQgcGF5YWJsZSwgTGljZW5zZWUgYWdyZWVzIHRvIHBheSBpdCB3aGVuIElCTSBpbnZvaWNlcyBMaWNlbnNlZS4gSWYgdGhlIHJhdGUgb2YgR1NUIGNoYW5nZXMsIElCTSBtYXkgYWRqdXN0IHRoZSBjaGFyZ2Ugb3Igb3RoZXIgYW1vdW50IHBheWFibGUgdG8gdGFrZSBpbnRvIGFjY291bnQgdGhhdCBjaGFuZ2UgZnJvbSB0aGUgZGF0ZSB0aGUgY2hhbmdlIGJlY29tZXMgZWZmZWN0aXZlLgorCis4LjEgTGltaXRlZCBXYXJyYW50eQorCitUaGUgZm9sbG93aW5nIGlzIGFkZGVkIFN1YnNlY3Rpb24gOC4xIChMaW1pdGVkIFdhcnJhbnR5KToKKworVGhlIHdhcnJhbnRpZXMgc3BlY2lmaWVkIHRoaXMgU2VjdGlvbiBhcmUgaW4gYWRkaXRpb24gdG8gYW55IHJpZ2h0cyBMaWNlbnNlZSBtYXkgaGF2ZSB1bmRlciB0aGUgVHJhZGUgUHJhY3RpY2VzIEFjdCAxOTc0IG9yIG90aGVyIGxlZ2lzbGF0aW9uIGFuZCBhcmUgb25seSBsaW1pdGVkIHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGJ5IHRoZSBhcHBsaWNhYmxlIGxlZ2lzbGF0aW9uLgorCisxMC4xIEl0ZW1zIGZvciBXaGljaCBJQk0gTWF5IGJlIExpYWJsZQorCitUaGUgZm9sbG93aW5nIGlzIGFkZGVkIHRvIFN1YnNlY3Rpb24gMTAuMSAoSXRlbXMgZm9yIFdoaWNoIElCTSBNYXliZSBMaWFibGUpOgorCitXaGVyZSBJQk0gaXMgaW4gYnJlYWNoIG9mIGEgY29uZGl0aW9uIG9yIHdhcnJhbnR5IGltcGxpZWQgYnkgdGhlIFRyYWRlIFByYWN0aWNlcyBBY3QgMTk3NCwgSUJNJ3MgbGlhYmlsaXR5IGlzIGxpbWl0ZWQgdG8gdGhlIHJlcGFpciBvciByZXBsYWNlbWVudCBvZiB0aGUgZ29vZHMsIG9yIHRoZSBzdXBwbHkgb2YgZXF1aXZhbGVudCBnb29kcy4gV2hlcmUgdGhhdCBjb25kaXRpb24gb3Igd2FycmFudHkgcmVsYXRlcyB0byByaWdodCB0byBzZWxsLCBxdWlldCBwb3NzZXNzaW9uIG9yIGNsZWFyIHRpdGxlLCBvciB0aGUgZ29vZHMgYXJlIG9mIGEga2luZCBvcmRpbmFyaWx5IG9idGFpbmVkIGZvciBwZXJzb25hbCwgZG9tZXN0aWMgb3IgaG91c2Vob2xkIHVzZSBvciBjb25zdW1wdGlvbiwgdGhlbiBub25lIG9mIHRoZSBsaW1pdGF0aW9ucyBpbiB0aGlzIHBhcmFncmFwaCBhcHBseS4KKworSE9ORyBLT05HIFNBUiwgTUFDQVUgU0FSLCBBTkQgVEFJV0FOCisKK0FzIGFwcGxpZXMgdG8gbGljZW5zZXMgb2J0YWluZWQgaW4gVGFpd2FuIGFuZCB0aGUgc3BlY2lhbCBhZG1pbmlzdHJhdGl2ZSByZWdpb25zLCBwaHJhc2VzIHRocm91Z2hvdXQgdGhpcyBBZ3JlZW1lbnQgY29udGFpbmluZyB0aGUgd29yZCAiY291bnRyeSIgKGZvciBleGFtcGxlLCAidGhlIGNvdW50cnkgaW4gd2hpY2ggdGhlIG9yaWdpbmFsIExpY2Vuc2VlIHdhcyBncmFudGVkIHRoZSBsaWNlbnNlIiBhbmQgInRoZSBjb3VudHJ5IGluIHdoaWNoIExpY2Vuc2VlIG9idGFpbmVkIHRoZSBQcm9ncmFtIGxpY2Vuc2UiKSBhcmUgcmVwbGFjZWQgd2l0aCB0aGUgZm9sbG93aW5nOgorCisoMSkgSW4gSG9uZyBLb25nIFNBUjogIkhvbmcgS29uZyBTQVIiCisKKygyKSBJbiBNYWNhdSBTQVI6ICJNYWNhdSBTQVIiIGV4Y2VwdCBpbiB0aGUgR292ZXJuaW5nIExhdyBjbGF1c2UgKFNlY3Rpb24gMTQuMSkKKworKDMpIEluIFRhaXdhbjogIlRhaXdhbi4iCisKK0lORElBCisKKzEwLjEgSXRlbXMgZm9yIFdoaWNoIElCTSBNYXkgYmUgTGlhYmxlCisKK1RoZSBmb2xsb3dpbmcgcmVwbGFjZXMgdGhlIHRlcm1zIG9mIEl0ZW1zIDEgYW5kIDIgb2YgdGhlIGZpcnN0IHBhcmFncmFwaDoKKworMSkgbGlhYmlsaXR5IGZvciBib2RpbHkgaW5qdXJ5IChpbmNsdWRpbmcgZGVhdGgpIG9yIGRhbWFnZSB0byByZWFsIHByb3BlcnR5IGFuZCB0YW5naWJsZSBwZXJzb25hbCBwcm9wZXJ0eSB3aWxsIGJlIGxpbWl0ZWQgdG8gdGhhdCBjYXVzZWQgYnkgSUJNJ3MgbmVnbGlnZW5jZTsgYW5kIDIpIGFzIHRvIGFueSBvdGhlciBhY3R1YWwgZGFtYWdlIGFyaXNpbmcgaW4gYW55IHNpdHVhdGlvbiBpbnZvbHZpbmcgbm9ucGVyZm9ybWFuY2UgYnkgSUJNIHB1cnN1YW50IHRvLCBvciBpbiBhbnkgd2F5IHJlbGF0ZWQgdG8gdGhlIHN1YmplY3Qgb2YgdGhpcyBBZ3JlZW1lbnQsIElCTSdzIGxpYWJpbGl0eSB3aWxsIGJlIGxpbWl0ZWQgdG8gdGhlIGNoYXJnZSBwYWlkIGJ5IExpY2Vuc2VlIGZvciB0aGUgaW5kaXZpZHVhbCBQcm9ncmFtIHRoYXQgaXMgdGhlIHN1YmplY3Qgb2YgdGhlIGNsYWltLgorCisxMy4gR2VuZXJhbAorCitUaGUgZm9sbG93aW5nIHJlcGxhY2VzIHRoZSB0ZXJtcyBvZiBJdGVtIDEzLmc6CisKK0lmIG5vIHN1aXQgb3Igb3RoZXIgbGVnYWwgYWN0aW9uIGlzIGJyb3VnaHQsIHdpdGhpbiB0aHJlZSB5ZWFycyBhZnRlciB0aGUgY2F1c2Ugb2YgYWN0aW9uIGFyb3NlLCBpbiByZXNwZWN0IG9mIGFueSBjbGFpbSB0aGF0IGVpdGhlciBwYXJ0eSBtYXkgaGF2ZSBhZ2FpbnN0IHRoZSBvdGhlciwgdGhlIHJpZ2h0cyBvZiB0aGUgY29uY2VybmVkIHBhcnR5IGluIHJlc3BlY3Qgb2Ygc3VjaCBjbGFpbSB3aWxsIGJlIGZvcmZlaXRlZCBhbmQgdGhlIG90aGVyIHBhcnR5IHdpbGwgc3RhbmQgcmVsZWFzZWQgZnJvbSBpdHMgb2JsaWdhdGlvbnMgaW4gcmVzcGVjdCBvZiBzdWNoIGNsYWltLgorCitJTkRPTkVTSUEKKworMy4zIFRlcm0gYW5kIFRlcm1pbmF0aW9uCisKK1RoZSBmb2xsb3dpbmcgaXMgYWRkZWQgdG8gdGhlIGxhc3QgcGFyYWdyYXBoOgorCitCb3RoIHBhcnRpZXMgd2FpdmUgdGhlIHByb3Zpc2lvbiBvZiBhcnRpY2xlIDEyNjYgb2YgdGhlIEluZG9uZXNpYW4gQ2l2aWwgQ29kZSwgdG8gdGhlIGV4dGVudCB0aGUgYXJ0aWNsZSBwcm92aXNpb24gcmVxdWlyZXMgc3VjaCBjb3VydCBkZWNyZWUgZm9yIHRoZSB0ZXJtaW5hdGlvbiBvZiBhbiBhZ3JlZW1lbnQgY3JlYXRpbmcgbXV0dWFsIG9ibGlnYXRpb25zLgorCitKQVBBTgorCisxMy4gR2VuZXJhbAorCitUaGUgZm9sbG93aW5nIGlzIGluc2VydGVkIGFmdGVyIEl0ZW0gMTMuZjoKKworQW55IGRvdWJ0cyBjb25jZXJuaW5nIHRoaXMgQWdyZWVtZW50IHdpbGwgYmUgaW5pdGlhbGx5IHJlc29sdmVkIGJldHdlZW4gdXMgaW4gZ29vZCBmYWl0aCBhbmQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBwcmluY2lwbGUgb2YgbXV0dWFsIHRydXN0LgorCitNQUxBWVNJQQorCisxMC4yIEl0ZW1zIGZvciBXaGljaCBJQk0gSXMgbm90IExpYWJsZQorCitUaGUgd29yZCAiU1BFQ0lBTCIgaW4gSXRlbSAxMC4yYiBpcyBkZWxldGVkLgorCitORVcgWkVBTEFORAorCis4LjEgTGltaXRlZCBXYXJyYW50eQorCitUaGUgZm9sbG93aW5nIGlzIGFkZGVkOgorCitUaGUgd2FycmFudGllcyBzcGVjaWZpZWQgaW4gdGhpcyBTZWN0aW9uIGFyZSBpbiBhZGRpdGlvbiB0byBhbnkgcmlnaHRzIExpY2Vuc2VlIG1heSBoYXZlIHVuZGVyIHRoZSBDb25zdW1lciBHdWFyYW50ZWVzIEFjdCAxOTkzIG9yIG90aGVyIGxlZ2lzbGF0aW9uIHdoaWNoIGNhbm5vdCBiZSBleGNsdWRlZCBvciBsaW1pdGVkLiBUaGUgQ29uc3VtZXIgR3VhcmFudGVlcyBBY3QgMTk5MyB3aWxsIG5vdCBhcHBseSBpbiByZXNwZWN0IG9mIGFueSBnb29kcyB3aGljaCBJQk0gcHJvdmlkZXMsIGlmIExpY2Vuc2VlIHJlcXVpcmVzIHRoZSBnb29kcyBmb3IgdGhlIHB1cnBvc2VzIG9mIGEgYnVzaW5lc3MgYXMgZGVmaW5lZCBpbiB0aGF0IEFjdC4KKworMTAuIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5CisKK1RoZSBmb2xsb3dpbmcgaXMgYWRkZWQ6CisKK1doZXJlIFByb2dyYW1zIGFyZSBub3Qgb2J0YWluZWQgZm9yIHRoZSBwdXJwb3NlcyBvZiBhIGJ1c2luZXNzIGFzIGRlZmluZWQgaW4gdGhlIENvbnN1bWVyIEd1YXJhbnRlZXMgQWN0IDE5OTMsIHRoZSBsaW1pdGF0aW9ucyBpbiB0aGlzIFNlY3Rpb24gYXJlIHN1YmplY3QgdG8gdGhlIGxpbWl0YXRpb25zIGluIHRoYXQgQWN0LgorCitQRU9QTEUnUyBSRVBVQkxJQyBPRiBDSElOQQorCis0LiBDaGFyZ2VzCisKK1RoZSBmb2xsb3dpbmcgaXMgYWRkZWQ6CisKK0FsbCBiYW5raW5nIGNoYXJnZXMgaW5jdXJyZWQgaW4gdGhlIFBlb3BsZSdzIFJlcHVibGljIG9mIENoaW5hIHdpbGwgYmUgYm9ybmUgYnkgTGljZW5zZWUgYW5kIHRob3NlIGluY3VycmVkIG91dHNpZGUgdGhlIFBlb3BsZSdzIFJlcHVibGljIG9mIENoaW5hIHdpbGwgYmUgYm9ybmUgYnkgSUJNLgorCitQSElMSVBQSU5FUworCisxMC4yIEl0ZW1zIGZvciBXaGljaCBJQk0gSXMgbm90IExpYWJsZQorCitUaGUgZm9sbG93aW5nIHJlcGxhY2VzIHRoZSB0ZXJtcyBvZiBJdGVtIDEwLjJiOgorCitiLiBzcGVjaWFsIChpbmNsdWRpbmcgbm9taW5hbCBhbmQgZXhlbXBsYXJ5IGRhbWFnZXMpLCBtb3JhbCwgaW5jaWRlbnRhbCwgb3IgaW5kaXJlY3QgZGFtYWdlcyBvciBmb3IgYW55IGVjb25vbWljIGNvbnNlcXVlbnRpYWwgZGFtYWdlczsgb3IKKworU0lOR0FQT1JFCisKKzEwLjIgSXRlbXMgZm9yIFdoaWNoIElCTSBJcyBub3QgTGlhYmxlCisKK1RoZSB3b3JkcyAiU1BFQ0lBTCIgYW5kICJFQ09OT01JQyIgYXJlIGRlbGV0ZWQgZnJvbSBJdGVtIDEwLjJiLgorCisxMy4gR2VuZXJhbAorCitUaGUgZm9sbG93aW5nIHJlcGxhY2VzIHRoZSB0ZXJtcyBvZiBJdGVtIDEzLmk6CisKK1N1YmplY3QgdG8gdGhlIHJpZ2h0cyBwcm92aWRlZCB0byBJQk0ncyBzdXBwbGllcnMgYW5kIFByb2dyYW0gZGV2ZWxvcGVycyBhcyBwcm92aWRlZCBpbiBTZWN0aW9uIDEwIGFib3ZlIChMaW1pdGF0aW9uIG9mIExpYWJpbGl0eSksIGEgcGVyc29uIHdobyBpcyBub3QgYSBwYXJ0eSB0byB0aGlzIEFncmVlbWVudCB3aWxsIGhhdmUgbm8gcmlnaHQgdW5kZXIgdGhlIENvbnRyYWN0cyAoUmlnaHQgb2YgVGhpcmQgUGFydGllcykgQWN0IHRvIGVuZm9yY2UgYW55IG9mIGl0cyB0ZXJtcy4KKworVEFJV0FOCisKKzguMSBMaW1pdGVkIFdhcnJhbnR5CisKK1RoZSBsYXN0IHBhcmFncmFwaCBpcyBkZWxldGVkLgorCisxMC4xIEl0ZW1zIGZvciBXaGljaCBJQk0gTWF5IEJlIExpYWJsZQorCitUaGUgZm9sbG93aW5nIHNlbnRlbmNlcyBhcmUgZGVsZXRlZAorCitUaGlzIGxpbWl0IGFsc28gYXBwbGllcyB0byBhbnkgb2YgSUJNJ3Mgc3ViY29udHJhY3RvcnMgYW5kIFByb2dyYW0gZGV2ZWxvcGVycy4gSXQgaXMgdGhlIG1heGltdW0gZm9yIHdoaWNoIElCTSBhbmQgaXRzIHN1YmNvbnRyYWN0b3JzIGFuZCBQcm9ncmFtIGRldmVsb3BlcnMgYXJlIGNvbGxlY3RpdmVseSByZXNwb25zaWJsZS4KKworRVVST1BFLCBNSURETEUgRUFTVCwgQUZSSUNBIChFTUVBKSBDT1VOVFJZIEFNRU5ETUVOVFMKKworRVVST1BFQU4gVU5JT04gTUVNQkVSIFNUQVRFUworCis4LiBXYXJyYW50eSBhbmQgRXhjbHVzaW9ucworCitUaGUgZm9sbG93aW5nIGlzIGFkZGVkIHRvIFNlY3Rpb24gOCAoV2FycmFudHkgYW5kIEV4Y2x1c2lvbik6CisKK0luIHRoZSBFdXJvcGVhbiBVbmlvbiAoIkVVIiksIGNvbnN1bWVycyBoYXZlIGxlZ2FsIHJpZ2h0cyB1bmRlciBhcHBsaWNhYmxlIG5hdGlvbmFsIGxlZ2lzbGF0aW9uIGdvdmVybmluZyB0aGUgc2FsZSBvZiBjb25zdW1lciBnb29kcy4gU3VjaCByaWdodHMgYXJlIG5vdCBhZmZlY3RlZCBieSB0aGUgcHJvdmlzaW9ucyBzZXQgb3V0IGluIHRoaXMgU2VjdGlvbiA4IFdhcnJhbnR5IGFuZCBFeGNsdXNpb25zLiBUaGUgdGVycml0b3JpYWwgc2NvcGUgb2YgdGhlIExpbWl0ZWQgV2FycmFudHkgaXMgd29ybGR3aWRlLgorCitFVSBNRU1CRVIgU1RBVEVTIEFORCBUSEUgQ09VTlRSSUVTIElERU5USUZJRUQgQkVMT1cKKworSWNlbGFuZCwgTGllY2h0ZW5zdGVpbiwgTm9yd2F5LCBTd2l0emVybGFuZCwgVHVya2V5LCBhbmQgYW55IG90aGVyIEV1cm9wZWFuIGNvdW50cnkgdGhhdCBoYXMgZW5hY3RlZCBsb2NhbCBkYXRhIHByaXZhY3kgb3IgcHJvdGVjdGlvbiBsZWdpc2xhdGlvbiBzaW1pbGFyIHRvIHRoZSBFVSBtb2RlbC4KKworMTMuIEdlbmVyYWwKKworVGhlIGZvbGxvd2luZyByZXBsYWNlcyBJdGVtIDEzLmU6CisKKygxKSBEZWZpbml0aW9ucyAtIEZvciB0aGUgcHVycG9zZXMgb2YgdGhpcyBJdGVtIDEzLmUsIHRoZSBmb2xsb3dpbmcgYWRkaXRpb25hbCBkZWZpbml0aW9ucyBhcHBseToKKworKGEpIEJ1c2luZXNzIENvbnRhY3QgSW5mb3JtYXRpb24gLSBidXNpbmVzcy1yZWxhdGVkIGNvbnRhY3QgaW5mb3JtYXRpb24gZGlzY2xvc2VkIGJ5IExpY2Vuc2VlIHRvIElCTSwgaW5jbHVkaW5nIG5hbWVzLCBqb2IgdGl0bGVzLCBidXNpbmVzcyBhZGRyZXNzZXMsIHRlbGVwaG9uZSBudW1iZXJzIGFuZCBlbWFpbCBhZGRyZXNzZXMgb2YgTGljZW5zZWUncyBlbXBsb3llZXMgYW5kIGNvbnRyYWN0b3JzLiBGb3IgQXVzdHJpYSwgSXRhbHkgYW5kIFN3aXR6ZXJsYW5kLCBCdXNpbmVzcyBDb250YWN0IEluZm9ybWF0aW9uIGFsc28gaW5jbHVkZXMgaW5mb3JtYXRpb24gYWJvdXQgQ3VzdG9tZXIgYW5kIGl0cyBjb250cmFjdG9ycyBhcyBsZWdhbCBlbnRpdGllcyAoZm9yIGV4YW1wbGUsIEN1c3RvbWVyJ3MgcmV2ZW51ZSBkYXRhIGFuZCBvdGhlciB0cmFuc2FjdGlvbmFsIGluZm9ybWF0aW9uKQorCisoYikgQnVzaW5lc3MgQ29udGFjdCBQZXJzb25uZWwgLSBMaWNlbnNlZSBlbXBsb3llZXMgYW5kIGNvbnRyYWN0b3JzIHRvIHdob20gdGhlIEJ1c2luZXNzIENvbnRhY3QgSW5mb3JtYXRpb24gcmVsYXRlcy4KKworKGMpIERhdGEgUHJvdGVjdGlvbiBBdXRob3JpdHkgLSB0aGUgYXV0aG9yaXR5IGVzdGFibGlzaGVkIGJ5IHRoZSBEYXRhIFByb3RlY3Rpb24gYW5kIEVsZWN0cm9uaWMgQ29tbXVuaWNhdGlvbnMgTGVnaXNsYXRpb24gaW4gdGhlIGFwcGxpY2FibGUgY291bnRyeSBvciwgZm9yIG5vbi1FVSBjb3VudHJpZXMsIHRoZSBhdXRob3JpdHkgcmVzcG9uc2libGUgZm9yIHN1cGVydmlzaW5nIHRoZSBwcm90ZWN0aW9uIG9mIHBlcnNvbmFsIGRhdGEgaW4gdGhhdCBjb3VudHJ5LCBvciAoZm9yIGFueSBvZiB0aGUgZm9yZWdvaW5nKSBhbnkgZHVseSBhcHBvaW50ZWQgc3VjY2Vzc29yIGVudGl0eSB0aGVyZXRvLgorCisoZCkgRGF0YSBQcm90ZWN0aW9uICYgRWxlY3Ryb25pYyBDb21tdW5pY2F0aW9ucyBMZWdpc2xhdGlvbiAtIChpKSB0aGUgYXBwbGljYWJsZSBsb2NhbCBsZWdpc2xhdGlvbiBhbmQgcmVndWxhdGlvbnMgaW4gZm9yY2UgaW1wbGVtZW50aW5nIHRoZSByZXF1aXJlbWVudHMgb2YgRVUgRGlyZWN0aXZlIDk1LzQ2L0VDIChvbiB0aGUgcHJvdGVjdGlvbiBvZiBpbmRpdmlkdWFscyB3aXRoIHJlZ2FyZCB0byB0aGUgcHJvY2Vzc2luZyBvZiBwZXJzb25hbCBkYXRhIGFuZCBvbiB0aGUgZnJlZSBtb3ZlbWVudCBvZiBzdWNoIGRhdGEpIGFuZCBvZiBFVSBEaXJlY3RpdmUgMjAwMi81OC9FQyAoY29uY2VybmluZyB0aGUgcHJvY2Vzc2luZyBvZiBwZXJzb25hbCBkYXRhIGFuZCB0aGUgcHJvdGVjdGlvbiBvZiBwcml2YWN5IGluIHRoZSBlbGVjdHJvbmljIGNvbW11bmljYXRpb25zIHNlY3Rvcik7IG9yIChpaSkgZm9yIG5vbi1FVSBjb3VudHJpZXMsIHRoZSBsZWdpc2xhdGlvbiBhbmQvb3IgcmVndWxhdGlvbnMgcGFzc2VkIGluIHRoZSBhcHBsaWNhYmxlIGNvdW50cnkgcmVsYXRpbmcgdG8gdGhlIHByb3RlY3Rpb24gb2YgcGVyc29uYWwgZGF0YSBhbmQgdGhlIHJlZ3VsYXRpb24gb2YgZWxlY3Ryb25pYyBjb21tdW5pY2F0aW9ucyBpbnZvbHZpbmcgcGVyc29uYWwgZGF0YSwgaW5jbHVkaW5nIChmb3IgYW55IG9mIHRoZSBmb3JlZ29pbmcpIGFueSBzdGF0dXRvcnkgcmVwbGFjZW1lbnQgb3IgbW9kaWZpY2F0aW9uIHRoZXJlb2YuCisKKyhlKSBJQk0gR3JvdXAgLSBJbnRlcm5hdGlvbmFsIEJ1c2luZXNzIE1hY2hpbmVzIENvcnBvcmF0aW9uIG9mIEFybW9uaywgTmV3IFlvcmssIFVTQSwgaXRzIHN1YnNpZGlhcmllcywgYW5kIHRoZWlyIHJlc3BlY3RpdmUgQnVzaW5lc3MgUGFydG5lcnMgYW5kIHN1YmNvbnRyYWN0b3JzLgorCisoMikgTGljZW5zZWUgYXV0aG9yaXNlcyBJQk06CisKKyhhKSB0byBwcm9jZXNzIGFuZCB1c2UgQnVzaW5lc3MgQ29udGFjdCBJbmZvcm1hdGlvbiB3aXRoaW4gSUJNIEdyb3VwIGluIHN1cHBvcnQgb2YgTGljZW5zZWUgaW5jbHVkaW5nIHRoZSBwcm92aXNpb24gb2Ygc3VwcG9ydCBzZXJ2aWNlcywgYW5kIGZvciB0aGUgcHVycG9zZSBvZiBmdXJ0aGVyaW5nIHRoZSBidXNpbmVzcyByZWxhdGlvbnNoaXAgYmV0d2VlbiBMaWNlbnNlZSBhbmQgSUJNIEdyb3VwLCBpbmNsdWRpbmcsIHdpdGhvdXQgbGltaXRhdGlvbiwgY29udGFjdGluZyBCdXNpbmVzcyBDb250YWN0IFBlcnNvbm5lbCAoYnkgZW1haWwgb3Igb3RoZXJ3aXNlKSBhbmQgbWFya2V0aW5nIElCTSBHcm91cCBwcm9kdWN0cyBhbmQgc2VydmljZXMgKHRoZSAiU3BlY2lmaWVkIFB1cnBvc2UiKTsgYW5kCisKKyhiKSB0byBkaXNjbG9zZSBCdXNpbmVzcyBDb250YWN0IEluZm9ybWF0aW9uIHRvIG90aGVyIG1lbWJlcnMgb2YgSUJNIEdyb3VwIGluIHB1cnN1aXQgb2YgdGhlIFNwZWNpZmllZCBQdXJwb3NlIG9ubHkuCisKKygzKSBJQk0gYWdyZWVzIHRoYXQgYWxsIEJ1c2luZXNzIENvbnRhY3QgSW5mb3JtYXRpb24gd2lsbCBiZSBwcm9jZXNzZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBEYXRhIFByb3RlY3Rpb24gJiBFbGVjdHJvbmljIENvbW11bmljYXRpb25zIExlZ2lzbGF0aW9uIGFuZCB3aWxsIGJlIHVzZWQgb25seSBmb3IgdGhlIFNwZWNpZmllZCBQdXJwb3NlLgorCisoNCkgVG8gdGhlIGV4dGVudCByZXF1aXJlZCBieSB0aGUgRGF0YSBQcm90ZWN0aW9uICYgRWxlY3Ryb25pYyBDb21tdW5pY2F0aW9ucyBMZWdpc2xhdGlvbiwgTGljZW5zZWUgcmVwcmVzZW50cyB0aGF0IChhKSBpdCBoYXMgb2J0YWluZWQgKG9yIHdpbGwgb2J0YWluKSBhbnkgY29uc2VudHMgZnJvbSAoYW5kIGhhcyBpc3N1ZWQgKG9yIHdpbGwgaXNzdWUpIGFueSBub3RpY2VzIHRvKSB0aGUgQnVzaW5lc3MgQ29udGFjdCBQZXJzb25uZWwgYXMgYXJlIG5lY2Vzc2FyeSBpbiBvcmRlciB0byBlbmFibGUgSUJNIEdyb3VwIHRvIHByb2Nlc3MgYW5kIHVzZSB0aGUgQnVzaW5lc3MgQ29udGFjdCBJbmZvcm1hdGlvbiBmb3IgdGhlIFNwZWNpZmllZCBQdXJwb3NlLgorCisoNSkgTGljZW5zZWUgYXV0aG9yaXNlcyBJQk0gdG8gdHJhbnNmZXIgQnVzaW5lc3MgQ29udGFjdCBJbmZvcm1hdGlvbiBvdXRzaWRlIHRoZSBFdXJvcGVhbiBFY29ub21pYyBBcmVhLCBwcm92aWRlZCB0aGF0IHRoZSB0cmFuc2ZlciBpcyBtYWRlIG9uIGNvbnRyYWN0dWFsIHRlcm1zIGFwcHJvdmVkIGJ5IHRoZSBEYXRhIFByb3RlY3Rpb24gQXV0aG9yaXR5IG9yIHRoZSB0cmFuc2ZlciBpcyBvdGhlcndpc2UgcGVybWl0dGVkIHVuZGVyIHRoZSBEYXRhIFByb3RlY3Rpb24gJiBFbGVjdHJvbmljIENvbW11bmljYXRpb25zIExlZ2lzbGF0aW9uLgorCitBVVNUUklBCisKKzguMiBFeGNsdXNpb25zCisKK1RoZSBmb2xsb3dpbmcgaXMgZGVsZXRlZCBmcm9tIHRoZSBmaXJzdCBwYXJhZ3JhcGg6CisKK01FUkNIQU5UQUJJTElUWSwgU0FUSVNGQUNUT1JZIFFVQUxJVFkKKworMTAuIExpbWl0YXRpb24gb2YgTGlhYmlsaXR5CisKK1RoZSBmb2xsb3dpbmcgaXMgYWRkZWQ6CisKK1RoZSBmb2xsb3dpbmcgbGltaXRhdGlvbnMgYW5kIGV4Y2x1c2lvbnMgb2YgSUJNJ3MgbGlhYmlsaXR5IGRvIG5vdCBhcHBseSBmb3IgZGFtYWdlcyBjYXVzZWQgYnkgZ3Jvc3MgbmVnbGlnZW5jZSBvciB3aWxsZnVsIG1pc2NvbmR1Y3QuCisKKzEwLjEgSXRlbXMgZm9yIFdoaWNoIElCTSBNYXkgQmUgTGlhYmxlCisKK1RoZSBmb2xsb3dpbmcgcmVwbGFjZXMgdGhlIGZpcnN0IHNlbnRlbmNlIGluIHRoZSBmaXJzdCBwYXJhZ3JhcGg6CisKK0NpcmN1bXN0YW5jZXMgbWF5IGFyaXNlIHdoZXJlLCBiZWNhdXNlIG9mIGEgZGVmYXVsdCBieSBJQk0gaW4gdGhlIHBlcmZvcm1hbmNlIG9mIGl0cyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBvciBvdGhlciBsaWFiaWxpdHksIExpY2Vuc2VlIGlzIGVudGl0bGVkIHRvIHJlY292ZXIgZGFtYWdlcyBmcm9tIElCTS4KKworSW4gdGhlIHNlY29uZCBzZW50ZW5jZSBvZiB0aGUgZmlyc3QgcGFyYWdyYXBoLCBkZWxldGUgZW50aXJlbHkgdGhlIHBhcmVudGhldGljYWwgcGhyYXNlOgorCisiKGluY2x1ZGluZyBmdW5kYW1lbnRhbCBicmVhY2gsIG5lZ2xpZ2VuY2UsIG1pc3JlcHJlc2VudGF0aW9uLCBvciBvdGhlciBjb250cmFjdCBvciB0b3J0IGNsYWltKSIuCisKKzEwLjIgSXRlbXMgZm9yIFdoaWNoIElCTSBJcyBOb3QgTGlhYmxlCisKK1RoZSBmb2xsb3dpbmcgcmVwbGFjZXMgSXRlbSAxMC4yYjoKKworYi4gaW5kaXJlY3QgZGFtYWdlcyBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXM7IG9yCisKK0JFTEdJVU0sIEZSQU5DRSwgSVRBTFksIEFORCBMVVhFTUJPVVJHCisKKzEwLiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eQorCitUaGUgZm9sbG93aW5nIHJlcGxhY2VzIHRoZSB0ZXJtcyBvZiBTZWN0aW9uIDEwIChMaW1pdGF0aW9uIG9mIExpYWJpbGl0eSkgaW4gaXRzIGVudGlyZXR5OgorCitFeGNlcHQgYXMgb3RoZXJ3aXNlIHByb3ZpZGVkIGJ5IG1hbmRhdG9yeSBsYXc6CisKKzEwLjEgSXRlbXMgZm9yIFdoaWNoIElCTSBNYXkgQmUgTGlhYmxlCisKK0lCTSdzIGVudGlyZSBsaWFiaWxpdHkgZm9yIGFsbCBjbGFpbXMgaW4gdGhlIGFnZ3JlZ2F0ZSBmb3IgYW55IGRhbWFnZXMgYW5kIGxvc3NlcyB0aGF0IG1heSBhcmlzZSBhcyBhIGNvbnNlcXVlbmNlIG9mIHRoZSBmdWxmaWxsbWVudCBvZiBpdHMgb2JsaWdhdGlvbnMgdW5kZXIgb3IgaW4gY29ubmVjdGlvbiB3aXRoIHRoaXMgQWdyZWVtZW50IG9yIGR1ZSB0byBhbnkgb3RoZXIgY2F1c2UgcmVsYXRlZCB0byB0aGlzIEFncmVlbWVudCBpcyBsaW1pdGVkIHRvIHRoZSBjb21wZW5zYXRpb24gb2Ygb25seSB0aG9zZSBkYW1hZ2VzIGFuZCBsb3NzZXMgcHJvdmVkIGFuZCBhY3R1YWxseSBhcmlzaW5nIGFzIGFuIGltbWVkaWF0ZSBhbmQgZGlyZWN0IGNvbnNlcXVlbmNlIG9mIHRoZSBub24tZnVsZmlsbG1lbnQgb2Ygc3VjaCBvYmxpZ2F0aW9ucyAoaWYgSUJNIGlzIGF0IGZhdWx0KSBvciBvZiBzdWNoIGNhdXNlLCBmb3IgYSBtYXhpbXVtIGFtb3VudCBlcXVhbCB0byB0aGUgY2hhcmdlcyAoaWYgdGhlIFByb2dyYW0gaXMgc3ViamVjdCB0byBmaXhlZCB0ZXJtIGNoYXJnZXMsIHVwIHRvIHR3ZWx2ZSBtb250aHMnIGNoYXJnZXMpIExpY2Vuc2VlIHBhaWQgZm9yIHRoZSBQcm9ncmFtIHRoYXQgaGFzIGNhdXNlZCB0aGUgZGFtYWdlcy4KKworVGhlIGFib3ZlIGxpbWl0YXRpb24gd2lsbCBub3QgYXBwbHkgdG8gZGFtYWdlcyBmb3IgYm9kaWx5IGluanVyaWVzIChpbmNsdWRpbmcgZGVhdGgpIGFuZCBkYW1hZ2VzIHRvIHJlYWwgcHJvcGVydHkgYW5kIHRhbmdpYmxlIHBlcnNvbmFsIHByb3BlcnR5IGZvciB3aGljaCBJQk0gaXMgbGVnYWxseSBsaWFibGUuCisKKzEwLjIgSXRlbXMgZm9yIFdoaWNoIElCTSBJcyBOb3QgTGlhYmxlCisKK1VOREVSIE5PIENJUkNVTVNUQU5DRVMgSVMgSUJNIE9SIEFOWSBPRiBJVFMgUFJPR1JBTSBERVZFTE9QRVJTIExJQUJMRSBGT1IgQU5ZIE9GIFRIRSBGT0xMT1dJTkcsIEVWRU4gSUYgSU5GT1JNRUQgT0YgVEhFSVIgUE9TU0lCSUxJVFk6IDEpIExPU1MgT0YsIE9SIERBTUFHRSBUTywgREFUQTsgMikgSU5DSURFTlRBTCwgRVhFTVBMQVJZIE9SIElORElSRUNUIERBTUFHRVMsIE9SIEZPUiBBTlkgRUNPTk9NSUMgQ09OU0VRVUVOVElBTCBEQU1BR0VTOyBBTkQgLyBPUiAzKSBMT1NUIFBST0ZJVFMsIEJVU0lORVNTLCBSRVZFTlVFLCBHT09EV0lMTCwgT1IgQU5USUNJUEFURUQgU0FWSU5HUywgRVZFTiBJRiBUSEVZIEFSSVNFIEFTIEFOIElNTUVESUFURSBDT05TRVFVRU5DRSBPRiBUSEUgRVZFTlQgVEhBVCBHRU5FUkFURUQgVEhFIERBTUFHRVMuCisKKzEwLjMgU3VwcGxpZXJzIGFuZCBQcm9ncmFtIERldmVsb3BlcnMKKworVGhlIGxpbWl0YXRpb24gYW5kIGV4Y2x1c2lvbiBvZiBsaWFiaWxpdHkgaGVyZWluIGFncmVlZCBhcHBsaWVzIG5vdCBvbmx5IHRvIHRoZSBhY3Rpdml0aWVzIHBlcmZvcm1lZCBieSBJQk0gYnV0IGFsc28gdG8gdGhlIGFjdGl2aXRpZXMgcGVyZm9ybWVkIGJ5IGl0cyBzdXBwbGllcnMgYW5kIFByb2dyYW0gZGV2ZWxvcGVycywgYW5kIHJlcHJlc2VudHMgdGhlIG1heGltdW0gYW1vdW50IGZvciB3aGljaCBJQk0gYXMgd2VsbCBhcyBpdHMgc3VwcGxpZXJzIGFuZCBQcm9ncmFtIGRldmVsb3BlcnMgYXJlIGNvbGxlY3RpdmVseSByZXNwb25zaWJsZS4KKworR0VSTUFOWQorCis4LjEgTGltaXRlZCBXYXJyYW50eQorCitUaGUgZm9sbG93aW5nIGlzIGluc2VydGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgU2VjdGlvbiA4LjE6CisKK1RoZSBXYXJyYW50eSBQZXJpb2QgaXMgdHdlbHZlIG1vbnRocyBmcm9tIHRoZSBkYXRlIG9mIGRlbGl2ZXJ5IG9mIHRoZSBQcm9ncmFtIHRvIHRoZSBvcmlnaW5hbCBMaWNlbnNlZS4KKworOC4yIEV4Y2x1c2lvbnMKKworU2VjdGlvbiA4LjIgaXMgZGVsZXRlZCBpbiBpdHMgZW50aXJldHkgYW5kIHJlcGxhY2VkIHdpdGggdGhlIGZvbGxvd2luZzoKKworU2VjdGlvbiA4LjEgZGVmaW5lcyBJQk0ncyBlbnRpcmUgd2FycmFudHkgb2JsaWdhdGlvbnMgdG8gTGljZW5zZWUgZXhjZXB0IGFzIG90aGVyd2lzZSByZXF1aXJlZCBieSBhcHBsaWNhYmxlIHN0YXR1dG9yeSBsYXcuCisKKzEwLiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eQorCitUaGUgZm9sbG93aW5nIHJlcGxhY2VzIHRoZSBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eSBzZWN0aW9uIGluIGl0cyBlbnRpcmV0eToKKworYS4gSUJNIHdpbGwgYmUgbGlhYmxlIHdpdGhvdXQgbGltaXQgZm9yIDEpIGxvc3Mgb3IgZGFtYWdlIGNhdXNlZCBieSBhIGJyZWFjaCBvZiBhbiBleHByZXNzIGd1YXJhbnRlZTsgMikgZGFtYWdlcyBvciBsb3NzZXMgcmVzdWx0aW5nIGluIGJvZGlseSBpbmp1cnkgKGluY2x1ZGluZyBkZWF0aCk7IGFuZCAzKSBkYW1hZ2VzIGNhdXNlZCBpbnRlbnRpb25hbGx5IG9yIGJ5IGdyb3NzIG5lZ2xpZ2VuY2UuCisKK2IuIEluIHRoZSBldmVudCBvZiBsb3NzLCBkYW1hZ2UgYW5kIGZydXN0cmF0ZWQgZXhwZW5kaXR1cmVzIGNhdXNlZCBieSBzbGlnaHQgbmVnbGlnZW5jZSBvciBpbiBicmVhY2ggb2YgZXNzZW50aWFsIGNvbnRyYWN0dWFsIG9ibGlnYXRpb25zLCBJQk0gd2lsbCBiZSBsaWFibGUsIHJlZ2FyZGxlc3Mgb2YgdGhlIGJhc2lzIG9uIHdoaWNoIExpY2Vuc2VlIGlzIGVudGl0bGVkIHRvIGNsYWltIGRhbWFnZXMgZnJvbSBJQk0gKGluY2x1ZGluZyBmdW5kYW1lbnRhbCBicmVhY2gsIG5lZ2xpZ2VuY2UsIG1pc3JlcHJlc2VudGF0aW9uLCBvciBvdGhlciBjb250cmFjdCBvciB0b3J0IGNsYWltKSwgcGVyIGNsYWltIG9ubHkgdXAgdG8gdGhlIGdyZWF0ZXIgb2YgNTAwLDAwMCBldXJvIG9yIHRoZSBjaGFyZ2VzIChpZiB0aGUgUHJvZ3JhbSBpcyBzdWJqZWN0IHRvIGZpeGVkIHRlcm0gY2hhcmdlcywgdXAgdG8gMTIgbW9udGhzJyBjaGFyZ2VzKSBMaWNlbnNlZSBwYWlkIGZvciB0aGUgUHJvZ3JhbSB0aGF0IGNhdXNlZCB0aGUgbG9zcyBvciBkYW1hZ2UuIEEgbnVtYmVyIG9mIGRlZmF1bHRzIHdoaWNoIHRvZ2V0aGVyIHJlc3VsdCBpbiwgb3IgY29udHJpYnV0ZSB0bywgc3Vic3RhbnRpYWxseSB0aGUgc2FtZSBsb3NzIG9yIGRhbWFnZSB3aWxsIGJlIHRyZWF0ZWQgYXMgb25lIGRlZmF1bHQuCisKK2MuIEluIHRoZSBldmVudCBvZiBsb3NzLCBkYW1hZ2UgYW5kIGZydXN0cmF0ZWQgZXhwZW5kaXR1cmVzIGNhdXNlZCBieSBzbGlnaHQgbmVnbGlnZW5jZSwgSUJNIHdpbGwgbm90IGJlIGxpYWJsZSBmb3IgaW5kaXJlY3Qgb3IgY29uc2VxdWVudGlhbCBkYW1hZ2VzLCBldmVuIGlmIElCTSB3YXMgaW5mb3JtZWQgYWJvdXQgdGhlIHBvc3NpYmlsaXR5IG9mIHN1Y2ggbG9zcyBvciBkYW1hZ2UuCisKK2QuIEluIGNhc2Ugb2YgZGVsYXkgb24gSUJNJ3MgcGFydDogMSkgSUJNIHdpbGwgcGF5IHRvIExpY2Vuc2VlIGFuIGFtb3VudCBub3QgZXhjZWVkaW5nIHRoZSBsb3NzIG9yIGRhbWFnZSBjYXVzZWQgYnkgSUJNJ3MgZGVsYXkgYW5kIDIpIElCTSB3aWxsIGJlIGxpYWJsZSBvbmx5IGluIHJlc3BlY3Qgb2YgdGhlIHJlc3VsdGluZyBkYW1hZ2VzIHRoYXQgTGljZW5zZWUgc3VmZmVycywgc3ViamVjdCB0byB0aGUgcHJvdmlzaW9ucyBvZiBJdGVtcyBhIGFuZCBiIGFib3ZlLgorCisxMy4gR2VuZXJhbAorCitUaGUgZm9sbG93aW5nIHJlcGxhY2VzIHRoZSBwcm92aXNpb25zIG9mIDEzLmc6CisKK0FueSBjbGFpbXMgcmVzdWx0aW5nIGZyb20gdGhpcyBBZ3JlZW1lbnQgYXJlIHN1YmplY3QgdG8gYSBsaW1pdGF0aW9uIHBlcmlvZCBvZiB0aHJlZSB5ZWFycywgZXhjZXB0IGFzIHN0YXRlZCBpbiBTZWN0aW9uIDguMSAoTGltaXRlZCBXYXJyYW50eSkgb2YgdGhpcyBBZ3JlZW1lbnQuCisKK1RoZSBmb2xsb3dpbmcgcmVwbGFjZXMgdGhlIHByb3Zpc2lvbnMgb2YgMTMuaToKKworTm8gcmlnaHQgb3IgY2F1c2Ugb2YgYWN0aW9uIGZvciBhbnkgdGhpcmQgcGFydHkgaXMgY3JlYXRlZCBieSB0aGlzIEFncmVlbWVudCwgbm9yIGlzIElCTSByZXNwb25zaWJsZSBmb3IgYW55IHRoaXJkIHBhcnR5IGNsYWltcyBhZ2FpbnN0IExpY2Vuc2VlLCBleGNlcHQgKHRvIHRoZSBleHRlbnQgcGVybWl0dGVkIGluIFNlY3Rpb24gMTAgKExpbWl0YXRpb24gb2YgTGlhYmlsaXR5KSkgZm9yOiBpKSBib2RpbHkgaW5qdXJ5IChpbmNsdWRpbmcgZGVhdGgpOyBvciBpaSkgZGFtYWdlIHRvIHJlYWwgb3IgdGFuZ2libGUgcGVyc29uYWwgcHJvcGVydHkgZm9yIHdoaWNoIChpbiBlaXRoZXIgY2FzZSkgSUJNIGlzIGxlZ2FsbHkgbGlhYmxlIHRvIHRoYXQgdGhpcmQgcGFydHkuCisKK0lSRUxBTkQKKworOC4yIEV4Y2x1c2lvbnMKKworVGhlIGZvbGxvd2luZyBwYXJhZ3JhcGggaXMgYWRkZWQ6CisKK0V4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgaW4gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMsIG9yIFNlY3Rpb24gMTIgb2YgdGhlIFNhbGUgb2YgR29vZHMgQWN0IDE4OTMgYXMgYW1lbmRlZCBieSB0aGUgU2FsZSBvZiBHb29kcyBhbmQgU3VwcGx5IG9mIFNlcnZpY2VzIEFjdCwgMTk4MCAodGhlICIxOTgwIEFjdCIpLCBhbGwgY29uZGl0aW9ucyBvciB3YXJyYW50aWVzIChleHByZXNzIG9yIGltcGxpZWQsIHN0YXR1dG9yeSBvciBvdGhlcndpc2UpIGFyZSBoZXJlYnkgZXhjbHVkZWQgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIGFueSB3YXJyYW50aWVzIGltcGxpZWQgYnkgdGhlIFNhbGUgb2YgR29vZHMgQWN0IDE4OTMgYXMgYW1lbmRlZCBieSB0aGUgMTk4MCBBY3QgKGluY2x1ZGluZywgZm9yIHRoZSBhdm9pZGFuY2Ugb2YgZG91YnQsIFNlY3Rpb24gMzkgb2YgdGhlIDE5ODAgQWN0KS4KKworSVJFTEFORCBBTkQgVU5JVEVEIEtJTkdET00KKworMi4gQWdyZWVtZW50IFN0cnVjdHVyZQorCitUaGUgZm9sbG93aW5nIHNlbnRlbmNlIGlzIGFkZGVkOgorCitOb3RoaW5nIGluIHRoaXMgcGFyYWdyYXBoIHNoYWxsIGhhdmUgdGhlIGVmZmVjdCBvZiBleGNsdWRpbmcgb3IgbGltaXRpbmcgbGlhYmlsaXR5IGZvciBmcmF1ZC4KKworMTAuMSBJdGVtcyBmb3IgV2hpY2ggSUJNIE1heSBCZSBMaWFibGUKKworVGhlIGZvbGxvd2luZyByZXBsYWNlcyB0aGUgZmlyc3QgcGFyYWdyYXBoIG9mIHRoZSBTdWJzZWN0aW9uOgorCitGb3IgdGhlIHB1cnBvc2VzIG9mIHRoaXMgc2VjdGlvbiwgYSAiRGVmYXVsdCIgbWVhbnMgYW55IGFjdCwgc3RhdGVtZW50LCBvbWlzc2lvbiBvciBuZWdsaWdlbmNlIG9uIHRoZSBwYXJ0IG9mIElCTSBpbiBjb25uZWN0aW9uIHdpdGgsIG9yIGluIHJlbGF0aW9uIHRvLCB0aGUgc3ViamVjdCBtYXR0ZXIgb2YgYW4gQWdyZWVtZW50IGluIHJlc3BlY3Qgb2Ygd2hpY2ggSUJNIGlzIGxlZ2FsbHkgbGlhYmxlIHRvIExpY2Vuc2VlLCB3aGV0aGVyIGluIGNvbnRyYWN0IG9yIGluIHRvcnQuIEEgbnVtYmVyIG9mIERlZmF1bHRzIHdoaWNoIHRvZ2V0aGVyIHJlc3VsdCBpbiwgb3IgY29udHJpYnV0ZSB0bywgc3Vic3RhbnRpYWxseSB0aGUgc2FtZSBsb3NzIG9yIGRhbWFnZSB3aWxsIGJlIHRyZWF0ZWQgYXMgb25lIERlZmF1bHQuCisKK0NpcmN1bXN0YW5jZXMgbWF5IGFyaXNlIHdoZXJlLCBiZWNhdXNlIG9mIGEgRGVmYXVsdCBieSBJQk0gaW4gdGhlIHBlcmZvcm1hbmNlIG9mIGl0cyBvYmxpZ2F0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBvciBvdGhlciBsaWFiaWxpdHksIExpY2Vuc2VlIGlzIGVudGl0bGVkIHRvIHJlY292ZXIgZGFtYWdlcyBmcm9tIElCTS4gUmVnYXJkbGVzcyBvZiB0aGUgYmFzaXMgb24gd2hpY2ggTGljZW5zZWUgaXMgZW50aXRsZWQgdG8gY2xhaW0gZGFtYWdlcyBmcm9tIElCTSBhbmQgZXhjZXB0IGFzIGV4cHJlc3NseSByZXF1aXJlZCBieSBsYXcgd2l0aG91dCB0aGUgcG9zc2liaWxpdHkgb2YgY29udHJhY3R1YWwgd2FpdmVyLCBJQk0ncyBlbnRpcmUgbGlhYmlsaXR5IGZvciBhbnkgb25lIERlZmF1bHQgd2lsbCBub3QgZXhjZWVkIHRoZSBhbW91bnQgb2YgYW55IGRpcmVjdCBkYW1hZ2VzLCB0byB0aGUgZXh0ZW50IGFjdHVhbGx5IHN1ZmZlcmVkIGJ5IExpY2Vuc2VlIGFzIGFuIGltbWVkaWF0ZSBhbmQgZGlyZWN0IGNvbnNlcXVlbmNlIG9mIHRoZSBkZWZhdWx0LCB1cCB0byB0aGUgZ3JlYXRlciBvZiAoMSkgNTAwLDAwMCBldXJvIChvciB0aGUgZXF1aXZhbGVudCBpbiBsb2NhbCBjdXJyZW5jeSkgb3IgKDIpIDEyNSUgb2YgdGhlIGNoYXJnZXMgKGlmIHRoZSBQcm9ncmFtIGlzIHN1YmplY3QgdG8gZml4ZWQgdGVybSBjaGFyZ2VzLCB1cCB0byAxMiBtb250aHMnIGNoYXJnZXMpIGZvciB0aGUgUHJvZ3JhbSB0aGF0IGlzIHRoZSBzdWJqZWN0IG9mIHRoZSBjbGFpbS4gTm90d2l0aHN0YW5kaW5nIHRoZSBmb3JlZ29pbmcsIHRoZSBhbW91bnQgb2YgYW55IGRhbWFnZXMgZm9yIGJvZGlseSBpbmp1cnkgKGluY2x1ZGluZyBkZWF0aCkgYW5kIGRhbWFnZSB0byByZWFsIHByb3BlcnR5IGFuZCB0YW5naWJsZSBwZXJzb25hbCBwcm9wZXJ0eSBmb3Igd2hpY2ggSUJNIGlzIGxlZ2FsbHkgbGlhYmxlIGlzIG5vdCBzdWJqZWN0IHRvIHN1Y2ggbGltaXRhdGlvbi4KKworMTAuMiBJdGVtcyBmb3IgV2hpY2ggSUJNIGlzIE5vdCBMaWFibGUKKworVGhlIGZvbGxvd2luZyByZXBsYWNlcyBJdGVtcyAxMC4yYiBhbmQgMTAuMmM6CisKK2IuIHNwZWNpYWwsIGluY2lkZW50YWwsIGV4ZW1wbGFyeSwgb3IgaW5kaXJlY3QgZGFtYWdlcyBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXM7IG9yCisKK2MuIHdhc3RlZCBtYW5hZ2VtZW50IHRpbWUgb3IgbG9zdCBwcm9maXRzLCBidXNpbmVzcywgcmV2ZW51ZSwgZ29vZHdpbGwsIG9yIGFudGljaXBhdGVkIHNhdmluZ3MuCisKK1oxMjUtMzMwMS0xMyAoMDUvMjAwOSkKKworCitMSUNFTlNFIElORk9STUFUSU9OCisKK1RoZSBQcm9ncmFtcyBsaXN0ZWQgYmVsb3cgYXJlIGxpY2Vuc2VkIHVuZGVyIHRoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMgaW4gYWRkaXRpb24gdG8gdGhvc2Ugb2YgdGhlIEludGVybmF0aW9uYWwgUHJvZ3JhbSBMaWNlbnNlIEFncmVlbWVudC4KKworUHJvZ3JhbSBOYW1lOiBJQk0gVGl2b2xpIFN0b3JhZ2UgTWFuYWdlciBWNi4zCitQcm9ncmFtIE51bWJlcjogNTYwOC1FMDEKKworU3VwcG9ydGluZyBQcm9ncmFtcworCitUaGUgUHJvZ3JhbSBpcyBsaWNlbnNlZCBhcyBhIG11bHRpLXByb2R1Y3QgcGFja2FnZSBhbmQgaW5jbHVkZXMgdGhlIFN1cHBvcnRpbmcgUHJvZ3JhbXMgaWRlbnRpZmllZCBiZWxvdy4gTGljZW5zZWUgaXMgYXV0aG9yaXplZCB0byBpbnN0YWxsIGFuZCB1c2Ugc3VjaCBTdXBwb3J0aW5nIFByb2dyYW1zIG9ubHkgdG8gc3VwcG9ydCBMaWNlbnNlZSdzIHVzZSBvZiB0aGUgUHJpbmNpcGFsIFByb2dyYW0gdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYW5kIHdpdGhpbiB0aGUgbGltaXRzIG9mIHRoZSBQcm9vZnMgb2YgRW50aXRsZW1lbnQgZm9yIHRoZSBQcm9ncmFtICh1bmxlc3MgYnJvYWRlciByaWdodHMgYXJlIHByb3ZpZGVkIGVsc2V3aGVyZSBpbiB0aGlzIExpY2Vuc2UgSW5mb3JtYXRpb24gZG9jdW1lbnQpLiBUaGUgcGhyYXNlICJ0byBzdXBwb3J0IExpY2Vuc2VlJ3MgdXNlIiB3b3VsZCBpbmNsdWRlIG9ubHkgdGhvc2UgdXNlcyB0aGF0IGFyZSBuZWNlc3Nhcnkgb3Igb3RoZXJ3aXNlIGRpcmVjdGx5IHJlbGF0ZWQgdG8gYSBsaWNlbnNlZCB1c2Ugb2YgdGhlIFByaW5jaXBhbCBQcm9ncmFtIG9yIGFub3RoZXIgU3VwcG9ydGluZyBQcm9ncmFtLiBUaGUgU3VwcG9ydGluZyBQcm9ncmFtcyBtYXkgbm90IGJlIHVzZWQgZm9yIGFueSBvdGhlciBwdXJwb3NlLiBMaWNlbnNlZSBpcyBub3QgYXV0aG9yaXplZCB0byB0cmFuc2ZlciBvciByZW1hcmtldCB0aGUgU3VwcG9ydGluZyBQcm9ncmFtcyBzZXBhcmF0ZSBmcm9tIHRoZSBQcmluY2lwYWwgUHJvZ3JhbS4gVGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50IG1heSByZXBsYWNlIG9yIG1vZGlmeSB0aGUgbGljZW5zZSB0ZXJtcyBmb3IgdGhlIFN1cHBvcnRpbmcgUHJvZ3JhbXMuIEluIHRoZSBldmVudCBvZiBjb25mbGljdCwgdGhlc2UgdGVybXMgc3VwZXJzZWRlIHRoZSB0ZXJtcyBvZiB0aGUgbGljZW5zZSBhZ3JlZW1lbnQgd2hpY2ggYWNjb21wYW5pZXMgdGhlIFN1cHBvcnRpbmcgUHJvZ3JhbXMuIFdoZW4gTGljZW5zZWUncyByaWdodCB0byB1c2UgdGhlIFByb2dyYW0gZXhwaXJlcyBvciB0ZXJtaW5hdGVzLCBMaWNlbnNlZSBtdXN0IGRpc2NvbnRpbnVlIHVzZSwgZGVzdHJveSBvciBwcm9tcHRseSByZXR1cm4gYWxsIGNvcGllcyBvZiB0aGUgU3VwcG9ydGluZyBQcm9ncmFtcyB0byB0aGUgcGFydHkgZnJvbSB3aG9tIExpY2Vuc2VlIGFjcXVpcmVkIHRoZSBQcm9ncmFtLiBJZiBMaWNlbnNlZSBkb3dubG9hZGVkIHRoZSBTdXBwb3J0aW5nIFByb2dyYW1zLCBMaWNlbnNlZSBzaG91bGQgY29udGFjdCB0aGUgcGFydHkgZnJvbSB3aG9tIExpY2Vuc2VlIGFjcXVpcmVkIHRoZSBQcm9ncmFtLiBJZiBMaWNlbnNlZSB3aXNoZXMgdG8gbGljZW5zZSB0aGUgU3VwcG9ydGluZyBQcm9ncmFtcyBmb3IgYW55IHVzZSBiZXlvbmQgdGhlIGxpbWl0cyBzZXQgZm9ydGggYWJvdmUsIHBsZWFzZSBjb250YWN0IGFuIElCTSBTYWxlcyBSZXByZXNlbnRhdGl2ZSBvciB0aGUgcGFydHkgZnJvbSB3aG9tIExpY2Vuc2VlIGFjcXVpcmVkIHRoZSBQcm9ncmFtIHRvIG9idGFpbiB0aGUgYXBwcm9wcmlhdGUgbGljZW5zZS4KKworVGhlIGZvbGxvd2luZyBhcmUgU3VwcG9ydGluZyBQcm9ncmFtcyBsaWNlbnNlZCB3aXRoIHRoZSBQcm9ncmFtOgorSUJNIERCMiBFbnRlcnByaXNlIFNlcnZlciBFZGl0aW9uIFY5LjcgZm9yIExpbnV4LCBVTklYLCBhbmQgV2luZG93cworZVdBUyAtIGVtYmVkZGVkIHZlcnNpb24gb2YgSUJNIFdlYlNwaGVyZSBBcHBsaWNhdGlvbiBTZXJ2ZXIgKCJlbWJlZGRlZCBXZWJTcGhlcmUgQXBwbGljYXRpb24gU2VydmVyIikuIFt2ZXJzaW9uIDcuMC4wLnhdCitJQk0gVGl2b2xpIENvbW1vbiBSZXBvcnRpbmcgdjIuMQorSUJNIFRpdm9saSBNb25pdG9yaW5nLCBWZXJzaW9uIDYKKworCitQcm9oaWJpdGVkIENvbXBvbmVudHMKKworTm90d2l0aHN0YW5kaW5nIGFueSBwcm92aXNpb24gaW4gdGhlIEFncmVlbWVudCwgTGljZW5zZWUgaXMgbm90IGF1dGhvcml6ZWQgdG8gdXNlIGFueSBvZiB0aGUgZm9sbG93aW5nIGNvbXBvbmVudHMgb3IgZnVuY3Rpb25zIG9mIHRoZSBQcm9ncmFtOgorU0VUIEFSQ0hJVkVSRVRFTlRJT05QUk9URUNUSU9OIGNvbW1hbmQKK0Rpc2FzdGVyIFJlY292ZXJ5IE1hbmFnZXIKK05ldHdvcmsgRGF0YSBNYW5hZ2VtZW50IFByb3RvY29sIChORE1QKSBCYWNrdXAKK05vZGUgcmVwbGljYXRpb24gKGFuZCB1c2Ugb2YgdGhlIFJFUExJQ0FURSBOT0RFIGNvbW1hbmQgYXMgYSB0YXJnZXQgc2VydmVyKQorR2VvZGV0aWMgRGF0YSBNYW5hZ2VtZW50IEZlYXR1cmUgKG9mIElCTSBEQjIpCitIb21vZ2VuZW91cyBSZXBsaWNhdGlvbiBGZWF0dXJlIChvZiBJQk0gREIyKQorQWR2YW5jZWQgQWNjZXNzIENvbnRyb2wgRmVhdHVyZSAob2YgSUJNIERCMikKK1BlcmZvcm1hbmNlIE9wdGltaXphdGlvbiBGZWF0dXJlIChvZiBJQk0gREIyKQorCitTZXBhcmF0ZWx5IExpY2Vuc2VkIENvZGUKKworVGhlIHByb3Zpc2lvbnMgb2YgdGhpcyBwYXJhZ3JhcGggZG8gbm90IGFwcGx5IHRvIHRoZSBleHRlbnQgdGhleSBhcmUgaGVsZCB0byBiZSBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgdGhlIGxhdyB0aGF0IGdvdmVybnMgdGhpcyBsaWNlbnNlLiBFYWNoIG9mIHRoZSBjb21wb25lbnRzIGxpc3RlZCBiZWxvdyBpcyBjb25zaWRlcmVkICJTZXBhcmF0ZWx5IExpY2Vuc2VkIENvZGUiLiBJQk0gU2VwYXJhdGVseSBMaWNlbnNlZCBDb2RlIGlzIGxpY2Vuc2VkIHRvIExpY2Vuc2VlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgYXBwbGljYWJsZSB0aGlyZCBwYXJ0eSBsaWNlbnNlIGFncmVlbWVudChzKSBzZXQgZm9ydGggaW4gdGhlIE5PTl9JQk1fTElDRU5TRSBmaWxlKHMpIHRoYXQgYWNjb21wYW5pZXMgdGhlIFByb2dyYW0uIE5vdHdpdGhzdGFuZGluZyBhbnkgb2YgdGhlIHRlcm1zIGluIHRoZSBBZ3JlZW1lbnQsIG9yIGFueSBvdGhlciBhZ3JlZW1lbnQgTGljZW5zZWUgbWF5IGhhdmUgd2l0aCBJQk0sIHRoZSB0ZXJtcyBvZiBzdWNoIHRoaXJkIHBhcnR5IGxpY2Vuc2UgYWdyZWVtZW50KHMpIGdvdmVybnMgTGljZW5zZWUncyB1c2Ugb2YgYWxsIFNlcGFyYXRlbHkgTGljZW5zZWQgQ29kZSB1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkIGJlbG93LgorCitGdXR1cmUgUHJvZ3JhbSB1cGRhdGVzIG9yIGZpeGVzIG1heSBjb250YWluIGFkZGl0aW9uYWwgU2VwYXJhdGVseSBMaWNlbnNlZCBDb2RlLiBTdWNoIGFkZGl0aW9uYWwgU2VwYXJhdGVseSBMaWNlbnNlZCBDb2RlIGFuZCByZWxhdGVkIGxpY2Vuc2VzIGFyZSBsaXN0ZWQgaW4gYW5vdGhlciBOT05fSUJNX0xJQ0VOU0UgZmlsZSB0aGF0IGFjY29tcGFuaWVzIHRoZSBQcm9ncmFtIHVwZGF0ZSBvciBmaXguIExpY2Vuc2VlIGFja25vd2xlZGdlcyB0aGF0IExpY2Vuc2VlIGhhcyByZWFkIGFuZCBhZ3JlZXMgdG8gdGhlIGxpY2Vuc2UgYWdyZWVtZW50cyBjb250YWluZWQgaW4gdGhlIE5PTl9JQk1fTElDRU5TRSBmaWxlKHMpLiBJZiBMaWNlbnNlZSBkb2VzIG5vdCBhZ3JlZSB0byB0aGUgdGVybXMgb2YgdGhlc2UgdGhpcmQgcGFydHkgbGljZW5zZSBhZ3JlZW1lbnRzLCBMaWNlbnNlZSBtYXkgbm90IHVzZSB0aGUgU2VwYXJhdGVseSBMaWNlbnNlZCBDb2RlLgorCitGb3IgUHJvZ3JhbXMgYWNxdWlyZWQgdW5kZXIgdGhlIEludGVybmF0aW9uYWwgUHJvZ3JhbSBMaWNlbnNlIEFncmVlbWVudCAoIklQTEEiKSBvciBJbnRlcm5hdGlvbmFsIFByb2dyYW0gTGljZW5zZSBBZ3JlZW1lbnQgZm9yIE5vbiBXYXJyYW50ZWQgUHJvZ3JhbSAoIklMQU4iKSBhbmQgTGljZW5zZWUgaXMgdGhlIG9yaWdpbmFsIGxpY2Vuc2VlIG9mIHRoZSBQcm9ncmFtLCBpZiBMaWNlbnNlZSBkb2VzIG5vdCBhZ3JlZSB3aXRoIHRoZSB0aGlyZCBwYXJ0eSBsaWNlbnNlIGFncmVlbWVudHMsIExpY2Vuc2VlIG1heSByZXR1cm4gdGhlIFByb2dyYW0gaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBvZiwgYW5kIHdpdGhpbiB0aGUgc3BlY2lmaWVkIHRpbWUgZnJhbWVzIHN0YXRlZCBpbiwgdGhlICJNb25leS1iYWNrIEd1YXJhbnRlZSIgc2VjdGlvbiBvZiB0aGUgSVBMQSBvciBJTEFOIElCTSBBZ3JlZW1lbnQuCisKK05vdGU6IE5vdHdpdGhzdGFuZGluZyBhbnkgb2YgdGhlIHRlcm1zIGluIHRoZSB0aGlyZCBwYXJ0eSBsaWNlbnNlIGFncmVlbWVudCwgdGhlIEFncmVlbWVudCwgb3IgYW55IG90aGVyIGFncmVlbWVudCBMaWNlbnNlZSBtYXkgaGF2ZSB3aXRoIElCTToKKyhhKSBJQk0gcHJvdmlkZXMgdGhpcyBTZXBhcmF0ZWx5IExpY2Vuc2VkIENvZGUgdG8gTGljZW5zZWUgV0lUSE9VVCBXQVJSQU5USUVTIE9GIEFOWSBLSU5EOworKGIpIElCTSBESVNDTEFJTVMgQU5ZIEFORCBBTEwgRVhQUkVTUyBBTkQgSU1QTElFRCBXQVJSQU5USUVTIEFORCBDT05ESVRJT05TIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgV0FSUkFOVFkgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQgT1IgSU5URVJGRVJFTkNFIEFORCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIEFORCBDT05ESVRJT05TIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFdJVEggUkVTUEVDVCBUTyBUSEUgU0VQQVJBVEVMWSBMSUNFTlNFRCBDT0RFOworKGMpIElCTSBpcyBub3QgbGlhYmxlIHRvIExpY2Vuc2VlLCBhbmQgd2lsbCBub3QgZGVmZW5kLCBpbmRlbW5pZnksIG9yIGhvbGQgTGljZW5zZWUgaGFybWxlc3MgZm9yIGFueSBjbGFpbXMgYXJpc2luZyBmcm9tIG9yIHJlbGF0ZWQgdG8gdGhlIFNlcGFyYXRlbHkgTGljZW5zZWQgQ29kZTsgYW5kCisoZCkgSUJNIGlzIG5vdCBsaWFibGUgZm9yIGFueSBkaXJlY3QsIGluZGlyZWN0LCBpbmNpZGVudGFsLCBzcGVjaWFsLCBleGVtcGxhcnksIHB1bml0aXZlIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bywgbG9zdCBkYXRhLCBsb3N0IHNhdmluZ3MsIGFuZCBsb3N0IHByb2ZpdHMsIHdpdGggcmVzcGVjdCB0byB0aGUgU2VwYXJhdGVseSBMaWNlbnNlZCBDb2RlLgorCitOb3R3aXRoc3RhbmRpbmcgdGhlc2UgZXhjbHVzaW9ucywgaW4gR2VybWFueSBhbmQgQXVzdHJpYSwgSUJNJ3Mgd2FycmFudHkgYW5kIGxpYWJpbGl0eSBmb3IgdGhlIFNlcGFyYXRlbHkgTGljZW5zZWQgQ29kZSBpcyBnb3Zlcm5lZCBvbmx5IGJ5IHRoZSByZXNwZWN0aXZlIHRlcm1zIGFwcGxpY2FibGUgZm9yIEdlcm1hbnkgYW5kIEF1c3RyaWEgaW4gSUJNIGxpY2Vuc2UgYWdyZWVtZW50cy4KKworTm90ZTogSUJNIG1heSBwcm92aWRlIGxpbWl0ZWQgc3VwcG9ydCBmb3Igc29tZSBTZXBhcmF0ZWx5IExpY2Vuc2VkIENvZGUuIElmIHN1Y2ggc3VwcG9ydCBpcyBhdmFpbGFibGUsIHRoZSBkZXRhaWxzIGFuZCBhbnkgYWRkaXRpb25hbCB0ZXJtcyByZWxhdGVkIHRvIHN1Y2ggc3VwcG9ydCB3aWxsIGJlIHNldCBmb3J0aCBpbiB0aGUgTGljZW5zZSBJbmZvcm1hdGlvbiBkb2N1bWVudC4KKworVGhlIGZvbGxvd2luZyBhcmUgU2VwYXJhdGVseSBMaWNlbnNlZCBDb2RlOgorTGludXggRmlsZXBhdGggMS4wLjAKKworU291cmNlIENvbXBvbmVudHMgYW5kIFNhbXBsZSBNYXRlcmlhbHMKKworVGhlIFByb2dyYW0gbWF5IGluY2x1ZGUgc29tZSBjb21wb25lbnRzIGluIHNvdXJjZSBjb2RlIGZvcm0gKCJTb3VyY2UgQ29tcG9uZW50cyIpIGFuZCBvdGhlciBtYXRlcmlhbHMgaWRlbnRpZmllZCBhcyBTYW1wbGUgTWF0ZXJpYWxzLiBMaWNlbnNlZSBtYXkgY29weSBhbmQgbW9kaWZ5IFNvdXJjZSBDb21wb25lbnRzIGFuZCBTYW1wbGUgTWF0ZXJpYWxzIGZvciBpbnRlcm5hbCB1c2Ugb25seSBwcm92aWRlZCBzdWNoIHVzZSBpcyB3aXRoaW4gdGhlIGxpbWl0cyBvZiB0aGUgbGljZW5zZSByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQsIHByb3ZpZGVkIGhvd2V2ZXIgdGhhdCBMaWNlbnNlZSBtYXkgbm90IGFsdGVyIG9yIGRlbGV0ZSBhbnkgY29weXJpZ2h0IGluZm9ybWF0aW9uIG9yIG5vdGljZXMgY29udGFpbmVkIGluIHRoZSBTb3VyY2UgQ29tcG9uZW50cyBvciBTYW1wbGUgTWF0ZXJpYWxzLiBJQk0gcHJvdmlkZXMgdGhlIFNvdXJjZSBDb21wb25lbnRzIGFuZCBTYW1wbGUgTWF0ZXJpYWxzIHdpdGhvdXQgb2JsaWdhdGlvbiBvZiBzdXBwb3J0IGFuZCAiQVMgSVMiLCBXSVRIIE5PIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgVEhFIFdBUlJBTlRZIE9GIFRJVExFLCBOT04tSU5GUklOR0VNRU5UIE9SIE5PTi1JTlRFUkZFUkVOQ0UgQU5EIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgQU5EIENPTkRJVElPTlMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKworRXhwb3J0IGFuZCBJbXBvcnQgUmVzdHJpY3Rpb25zCisKK1RoaXMgUHJvZ3JhbSBtYXkgY29udGFpbiBjcnlwdG9ncmFwaHkuIFRyYW5zZmVyIHRvLCBvciB1c2UgYnksIHVzZXJzIG9mIHRoZSBQcm9ncmFtIG1heSBiZSBwcm9oaWJpdGVkIG9yIHN1YmplY3QgdG8gZXhwb3J0IG9yIGltcG9ydCBsYXdzLCByZWd1bGF0aW9ucyBvciBwb2xpY2llcywgaW5jbHVkaW5nIHRob3NlIG9mIHRoZSBVbml0ZWQgU3RhdGVzIEV4cG9ydCBBZG1pbmlzdHJhdGlvbiBSZWd1bGF0aW9ucy4gTGljZW5zZWUgYXNzdW1lcyBhbGwgcmVzcG9uc2liaWxpdHkgZm9yIGNvbXBseWluZyB3aXRoIGFsbCBhcHBsaWNhYmxlIGxhd3MsIHJlZ3VsYXRpb25zLCBhbmQgcG9saWNpZXMgcmVnYXJkaW5nIHRoZSBleHBvcnQsIGltcG9ydCwgb3IgdXNlIG9mIHRoaXMgUHJvZ3JhbSwgaW5jbHVkaW5nIGJ1dCBub3QgbGltaXRlZCB0bywgVS5TLiByZXN0cmljdGlvbnMgb24gZXhwb3J0cyBvciByZWV4cG9ydHMuIFRvIG9idGFpbiB0aGUgZXhwb3J0IGNsYXNzaWZpY2F0aW9uIG9mIHRoaXMgUHJvZ3JhbSByZWZlciB0bzogaHR0cHM6Ly93d3cuaWJtLmNvbS9wcm9kdWN0cy9leHBvcnRpbmcvLgorCitDbGllbnQgRGV2aWNlCisKK0NsaWVudCBEZXZpY2UgaXMgYSB1bml0IG9mIG1lYXN1cmUgYnkgd2hpY2ggdGhlIFByb2dyYW0gY2FuIGJlIGxpY2Vuc2VkLiBBIENsaWVudCBEZXZpY2UgaXMgYSBzaW5nbGUgdXNlciBjb21wdXRpbmcgZGV2aWNlIG9yIHNwZWNpYWwgcHVycG9zZSBzZW5zb3Igb3IgdGVsZW1ldHJ5IGRldmljZSB0aGF0IHJlcXVlc3RzIHRoZSBleGVjdXRpb24gb2Ygb3IgcmVjZWl2ZXMgZm9yIGV4ZWN1dGlvbiBhIHNldCBvZiBjb21tYW5kcywgcHJvY2VkdXJlcywgb3IgYXBwbGljYXRpb25zIGZyb20gb3IgcHJvdmlkZXMgZGF0YSB0byBhbm90aGVyIGNvbXB1dGVyIHN5c3RlbSB0aGF0IGlzIHR5cGljYWxseSByZWZlcnJlZCB0byBhcyBhIHNlcnZlciBvciBpcyBvdGhlcndpc2UgbWFuYWdlZCBieSB0aGUgc2VydmVyLiBNdWx0aXBsZSBDbGllbnQgRGV2aWNlcyBtYXkgc2hhcmUgYWNjZXNzIHRvIGEgY29tbW9uIHNlcnZlci4gQSBDbGllbnQgRGV2aWNlIG1heSBoYXZlIHNvbWUgcHJvY2Vzc2luZyBjYXBhYmlsaXR5IG9yIGJlIHByb2dyYW1tYWJsZSB0byBhbGxvdyBhIHVzZXIgdG8gZG8gd29yay4gRXhhbXBsZXMgaW5jbHVkZSwgYnV0IGFyZSBub3QgbGltaXRlZCB0byBhY3R1YXRvcnMsIGFwcGxpYW5jZXMsIGF1dG9tYXRlZCB0ZWxsZXIgbWFjaGluZXMsIGF1dG9tYXRpYyBtZXRlciByZWFkZXJzLCBjYXNoIHJlZ2lzdGVycywgZGlzayBkcml2ZXMsIGRlc2t0b3AgY29tcHV0ZXJzLCBraW9za3MsIG5vdGVib29rIGNvbXB1dGVycywgcGVyc29uYWwgZGlnaXRhbCBhc3Npc3RhbnQsIHBvaW50LW9mLXNhbGUgdGVybWluYWxzLCBzZW5zb3JzLCBzbWFydCBtZXRlcnMsIHRhcGUgZHJpdmVzLCBhbmQgdGVjaG5pY2FsIHdvcmtzdGF0aW9ucy4gTGljZW5zZWUgbXVzdCBvYnRhaW4gZW50aXRsZW1lbnRzIGZvciBldmVyeSBDbGllbnQgRGV2aWNlIHdoaWNoIHJ1bnMsIHByb3ZpZGVzIGRhdGEgdG8sIHVzZXMgc2VydmljZXMgcHJvdmlkZWQgYnksIG9yIG90aGVyd2lzZSBhY2Nlc3NlcyB0aGUgUHJvZ3JhbSBhbmQgZm9yIGV2ZXJ5IG90aGVyIGNvbXB1dGVyIG9yIHNlcnZlciBvbiB3aGljaCB0aGUgUHJvZ3JhbSBpcyBpbnN0YWxsZWQuCisKK1Byb2Nlc3NvciBWYWx1ZSBVbml0IChQVlUpCisKK1Byb2Nlc3NvciBWYWx1ZSBVbml0IChQVlUpIGlzIGEgdW5pdCBvZiBtZWFzdXJlIGJ5IHdoaWNoIHRoZSBQcm9ncmFtIGNhbiBiZSBsaWNlbnNlZC4gVGhlIG51bWJlciBvZiBQVlUgZW50aXRsZW1lbnRzIHJlcXVpcmVkIGlzIGJhc2VkIG9uIHRoZSBwcm9jZXNzb3IgdGVjaG5vbG9neSAoZGVmaW5lZCB3aXRoaW4gdGhlIFBWVSBUYWJsZSBieSBQcm9jZXNzb3IgVmVuZG9yLCBCcmFuZCwgVHlwZSBhbmQgTW9kZWwgTnVtYmVyIGF0IGh0dHA6Ly93d3cuaWJtLmNvbS9zb2Z0d2FyZS9sb3R1cy9wYXNzcG9ydGFkdmFudGFnZS9wdnVfbGljZW5zaW5nX2Zvcl9jdXN0b21lcnMuaHRtbCkgYW5kIHRoZSBudW1iZXIgb2YgcHJvY2Vzc29ycyBtYWRlIGF2YWlsYWJsZSB0byB0aGUgUHJvZ3JhbS4gSUJNIGNvbnRpbnVlcyB0byBkZWZpbmUgYSBwcm9jZXNzb3IsIGZvciB0aGUgcHVycG9zZSBvZiBQVlUtYmFzZWQgbGljZW5zaW5nLCB0byBiZSBlYWNoIHByb2Nlc3NvciBjb3JlIG9uIGEgY2hpcC4gQSBkdWFsLWNvcmUgcHJvY2Vzc29yIGNoaXAsIGZvciBleGFtcGxlLCBoYXMgdHdvIHByb2Nlc3NvciBjb3Jlcy4KKworTGljZW5zZWUgY2FuIGRlcGxveSB0aGUgUHJvZ3JhbSB1c2luZyBlaXRoZXIgRnVsbCBDYXBhY2l0eSBsaWNlbnNpbmcgb3IgVmlydHVhbGl6YXRpb24gQ2FwYWNpdHkgKFN1Yi1DYXBhY2l0eSkgbGljZW5zaW5nIGFjY29yZGluZyB0byB0aGUgUGFzc3BvcnQgQWR2YW50YWdlIFN1Yi1DYXBhY2l0eSBMaWNlbnNpbmcgVGVybXMgKHNlZSB3ZWJwYWdlIGJlbG93KS4gSWYgdXNpbmcgRnVsbCBDYXBhY2l0eSBsaWNlbnNpbmcsIExpY2Vuc2VlIG11c3Qgb2J0YWluIFBWVSBlbnRpdGxlbWVudHMgc3VmZmljaWVudCB0byBjb3ZlciBhbGwgYWN0aXZhdGVkIHByb2Nlc3NvciBjb3JlcyogaW4gdGhlIHBoeXNpY2FsIGhhcmR3YXJlIGVudmlyb25tZW50IG1hZGUgYXZhaWxhYmxlIHRvIG9yIG1hbmFnZWQgYnkgdGhlIFByb2dyYW0sIGV4Y2VwdCBmb3IgdGhvc2Ugc2VydmVycyBmcm9tIHdoaWNoIHRoZSBQcm9ncmFtIGhhcyBiZWVuIHBlcm1hbmVudGx5IHJlbW92ZWQuIElmIHVzaW5nIFZpcnR1YWxpemF0aW9uIENhcGFjaXR5IGxpY2Vuc2luZywgTGljZW5zZWUgbXVzdCBvYnRhaW4gZW50aXRsZW1lbnRzIHN1ZmZpY2llbnQgdG8gY292ZXIgYWxsIGFjdGl2YXRlZCBwcm9jZXNzb3IgY29yZXMgbWFkZSBhdmFpbGFibGUgdG8gb3IgbWFuYWdlZCBieSB0aGUgUHJvZ3JhbSwgYXMgZGVmaW5lZCBhY2NvcmRpbmcgdG8gdGhlIFZpcnR1YWxpemF0aW9uIENhcGFjaXR5IExpY2Vuc2UgQ291bnRpbmcgUnVsZXMgYXQgaHR0cDovL3d3dy5pYm0uY29tL3NvZnR3YXJlL2xvdHVzL3Bhc3Nwb3J0YWR2YW50YWdlL0NvdW50aW5nX1NvZnR3YXJlX2xpY2Vuc2VzX3VzaW5nX3NwZWNpZmljX3ZpcnR1YWxpemF0aW9uX3RlY2hub2xvZ2llcy5odG1sLgorCisqIEFuIEFjdGl2YXRlZCBwcm9jZXNzb3IgY29yZSBpcyBhIHByb2Nlc3NvciBjb3JlIHRoYXQgaXMgYXZhaWxhYmxlIGZvciB1c2UgaW4gYSBwaHlzaWNhbCBvciB2aXJ0dWFsIHNlcnZlciwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHRoZSBjYXBhY2l0eSBvZiB0aGUgcHJvY2Vzc29yIGNvcmUgY2FuIGJlIG9yIGlzIGxpbWl0ZWQgdGhyb3VnaCB2aXJ0dWFsaXphdGlvbiB0ZWNobm9sb2dpZXMsIG9wZXJhdGluZyBzeXN0ZW0gY29tbWFuZHMsIEJJT1Mgc2V0dGluZ3MsIG9yIHNpbWlsYXIgcmVzdHJpY3Rpb25zLgorCitJbiBhZGRpdGlvbiB0byB0aGUgZW50aXRsZW1lbnRzIHJlcXVpcmVkIGZvciB0aGUgUHJvZ3JhbSBkaXJlY3RseSwgTGljZW5zZWUgbXVzdCBvYnRhaW4gUFZVIGVudGl0bGVtZW50cyBmb3IgdGhpcyBQcm9ncmFtIHN1ZmZpY2llbnQgdG8gY292ZXIgdGhlIHByb2Nlc3NvciBjb3JlcyBmb3IgdGhlIHN5c3RlbXMgb24gd2hpY2ggdGhlIHJlc291cmNlcyBtYW5hZ2VkIG9yIHByb2Nlc3NlZCBieSB0aGUgUHJvZ3JhbSByZXNpZGUuCisKK1Byb2dyYW0tdW5pcXVlIFRlcm1zCisKK0xpY2Vuc2VlIGlzIG5vdCBwZXJtaXR0ZWQgdG8gdXNlIHRoZSBQcm9ncmFtIHRvIHN1cHBvcnQgdGFwZSBsaWJyYXJpZXMgKGluY2x1ZGluZyBWaXJ0dWFsIFRhcGUgTGlicmFyaWVzKSB3aXRoIG1vcmUgdGhhbiBmb3VyIGRyaXZlcyBvciBtb3JlIHRoYW4gNDggc2xvdHMuCisKK1N1cHBvcnRpbmcgUHJvZ3JhbSBEZXRhaWxzIC0gSUJNIERCMgorCitUaGUgZm9sbG93aW5nIGFwcGxpZXMgdG8gdXNlIG9mIHRoZSBJQk0gREIyIGVkaXRpb24ocykgc3BlY2lmaWVkIGluIHRoZSBTdXBwb3J0aW5nIFByb2dyYW1zIHNlY3Rpb24gb2YgdGhpcyBMaWNlbnNlIEluZm9ybWF0aW9uOgorCistIEVudGl0bGVtZW50OiBSYXRpbyAxLzEKKy0gVXNlIExpbWl0YXRpb25zOiBVc2UgYnkgUHJpbmNpcGFsIFByb2dyYW0KKworIlJhdGlvIG4vbSIgbWVhbnMgdGhhdCBMaWNlbnNlZSByZWNlaXZlcyBzb21lIG51bWJlciAoJ24nKSBlbnRpdGxlbWVudHMgZm9yIHRoZSBTdXBwb3J0aW5nIFByb2dyYW0gZm9yIGV2ZXJ5IHNwZWNpZmllZCBudW1iZXIgKCdtJykgZW50aXRsZW1lbnRzIG9mIHRoZSBQcmluY2lwYWwgUHJvZ3JhbSBhcyBhIHdob2xlLiBVbmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCwgdGhlIG51bWJlciBvZiBlbnRpdGxlbWVudHMgZm9yIHRoZSBTdXBwb3J0aW5nIFByb2dyYW0gaXMgcm91bmRlZCB1cCB0byBhIG11bHRpcGxlIG9mICduJy4gRm9yIGV4YW1wbGUsIGlmIGEgUHJvZ3JhbSBpbmNsdWRlcyAxMDAgUFZVcyBmb3IgYSBTdXBwb3J0aW5nIFByb2dyYW0gZm9yIGV2ZXJ5IDUwMCBQVlVzIG9idGFpbmVkIG9mIHRoZSBQcmluY2lwYWwgUHJvZ3JhbSBhbmQgTGljZW5zZWUgYWNxdWlyZXMgMSwyMDAgUFZVcyBvZiB0aGUgUHJvZ3JhbSwgTGljZW5zZWUgbWF5IGluc3RhbGwgdGhlIFN1cHBvcnRpbmcgUHJvZ3JhbSBhbmQgaGF2ZSBwcm9jZXNzb3IgY29yZXMgYXZhaWxhYmxlIHRvIG9yIG1hbmFnZWQgYnkgaXQgb2YgdXAgdG8gMzAwIFBWVXMuIFRob3NlIFBWVXMgd291bGQgbm90IG5lZWQgdG8gYmUgY291bnRlZCBhcyBwYXJ0IG9mIHRoZSB0b3RhbCBQVlUgcmVxdWlyZW1lbnQgZm9yIExpY2Vuc2VlJ3MgaW5zdGFsbGF0aW9uIG9mIHRoZSBQcm9ncmFtIG9uIGFjY291bnQgb2YgdGhlIGluc3RhbGxhdGlvbiBvZiB0aGUgU3VwcG9ydGluZyBQcm9ncmFtIChhbHRob3VnaCB0aG9zZSBQVlVzIG1pZ2h0IG5lZWQgdG8gYmUgY291bnRlZCBmb3Igb3RoZXIgcmVhc29ucywgc3VjaCBhcyB0aGUgcHJvY2Vzc29yIGNvcmVzIGJlaW5nIG1hZGUgYXZhaWxhYmxlIHRvIHRoZSBQcmluY2lwYWwgUHJvZ3JhbSwgYXMgd2VsbCkuCisKKyJVc2UgYnkgUHJpbmNpcGFsIFByb2dyYW0iIG1lYW5zIHRoYXQgdGhlIFN1cHBvcnRpbmcgUHJvZ3JhbSBpcyBwcm92aWRlZCBleGNsdXNpdmVseSBmb3IgdXNlIGJ5IHRoZSBQcmluY2lwYWwgUHJvZ3JhbS4gTmVpdGhlciBMaWNlbnNlZSBub3IgYW55IGFwcGxpY2F0aW9uLCBwcm9ncmFtIG9yIGRldmljZSBpcyBhdXRob3JpemVkIHRvIGRpcmVjdGx5IHVzZSBvciBhY2Nlc3MgdGhlIHNlcnZpY2VzIG9mIHRoZSBTdXBwb3J0aW5nIFByb2dyYW0gZXhjZXB0IExpY2Vuc2VlIG1heSBhY2Nlc3MgdGhlIFN1cHBvcnRpbmcgUHJvZ3JhbSB0byBwZXJmb3JtIGFkbWluaXN0cmF0aXZlIGZ1bmN0aW9ucyBmb3IgdGhlIFN1cHBvcnRpbmcgUHJvZ3JhbSBzdWNoIGFzIGJhY2t1cCwgcmVjb3ZlcnkgYW5kIGF1dGhvcml6ZWQgY29uZmlndXJhdGlvbiAKKworVGhlIFByb2dyYW0gaXMgYWNjb21wYW5pZWQgYnkgYW4gZW1iZWRkZWQgdmVyc2lvbiBvZiBJQk0gV2ViU3BoZXJlIEFwcGxpY2F0aW9uIFNlcnZlciAoImVtYmVkZGVkIFdBUyIpLiAKKworRGlzYWJsaW5nIERldmljZQorIAorVGhlIGVtYmVkZGVkIFByb2dyYW0gbWF5IGluY2x1ZGUgYSBkaXNhYmxpbmcgZGV2aWNlIHRoYXQgd2lsbCBwcmV2ZW50IGNlcnRhaW4gZmVhdHVyZXMgZnJvbSBiZWluZyB1c2VkLiBMaWNlbnNlZSB3aWxsIG5vdCB0YW1wZXIgd2l0aCBzdWNoIGRpc2FibGluZyBkZXZpY2Ugb3Igb3RoZXJ3aXNlIGNoYW5nZSB0aGUgZW1iZWRkZWQgUHJvZ3JhbS4KKworVW5saW1pdGVkIENvcHkgQ29tcG9uZW50cyAKKworTGljZW5zZWUgaXMgYXV0aG9yaXplZCB0byBpbnN0YWxsIGFuZCB1c2UgYW4gdW5saW1pdGVkIG51bWJlciBvZiBjb3BpZXMgb2YgdGhlIEFkbWluaXN0cmF0aXZlIFNjcmlwdGluZyBQcm9ncmFtIGNvbXBvbmVudCBvbiBhbnkgTGljZW5zZWUgbWFjaGluZXMgdG8gc3VwcG9ydCB5b3VyIGF1dGhvcml6ZWQgdXNlIG9mIHRoZSBvdGhlciBjb21wb25lbnRzIG9mIHRoZSBlbWJlZGRlZCBQcm9ncmFtLgorCitTb3VyY2UgQ29kZQorCitTb21lIG9mIHRoZSBjb21wb25lbnRzIG9mIHRoZSBQcm9ncmFtIG1heSBiZSBwcm92aWRlZCBpbiBzb3VyY2UgY29kZSBmb3JtLiBOb3R3aXRoc3RhbmRpbmcgYW55dGhpbmcgdG8gdGhlIGNvbnRyYXJ5IGluIHRoaXMgQWdyZWVtZW50LCBzdXBwb3J0IGlzIG9ubHkgcHJvdmlkZWQgZm9yIHRoZSB1bm1vZGlmaWVkLCBiaW5hcnkgY29kZSB2ZXJzaW9ucyBvZiB0aGVzZSBjb21wb25lbnRzIGluY2x1ZGVkIGluIHRoZSBQcm9ncmFtIHBhY2thZ2luZywgYW5kIG5vdCBmb3IgdGhlIHNvdXJjZSBjb2RlIGZvciB0aGVzZSBjb21wb25lbnRzIG9yIGZvciBhbnkgbW9kaWZpY2F0aW9ucyBvZiBzdWNoIGNvbXBvbmVudHMgTGljZW5zZWUgbWF5IGNyZWF0ZS4KKworCitEL046ICBMLUJFQlktOERXU0M3CitQL046ICBMLUJFQlktOERXU0M3IApcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL3R0ZjJwdDEgYi9saWNlbnNlcy90dGYycHQxCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyZmFjNmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy90dGYycHQxCkBAIC0wLDAgKzEsODcgQEAKK1RoZSBmb2xsb3dpbmcgY29weXJpZ2h0IG5vdGljZSBhcHBsaWVzIHRvIGFsbCB0aGUgZmlsZXMgcHJvdmlkZWQKK2luIHRoaXMgZGlzdHJpYnV0aW9uIHVubGVzcyBleHBsaWNpdGx5IG5vdGVkIG90aGVyd2lzZQorKHRoZSBtb3N0IG5vdGFibGUgZXhjZXB0aW9uIGJlaW5nIHQxYXNtLmMpLgorCisgIENvcHlyaWdodCAoYykgMTk5Ny0yMDAxIGJ5IHRoZSBBVVRIT1JTOgorICAgQW5kcmV3IFdlZWtzIDxjY3Nhd0BiYXRoLmFjLnVrPiAKKyAgIEZyYW5rIE0uIFNpZWdlcnQgPGZtc0B0aGlzLm5ldD4gCisgICBNYXJrIEhlYXRoIDxtaGVhdGhAbmV0c3BhY2UubmV0LmF1PiAKKyAgIFRob21hcyBIZW5saWNoIDx0aGVubGljaEByY3MudXJ6LnR1LWRyZXNkZW4uZGU+CisgICBTZXJnZXkgQmFia2luIDxiYWJraW5AdXNlcnMuc291cmNlZm9yZ2UubmV0PiwgPHNhYjEyM0Bob3RtYWlsLmNvbT4KKyAgIFR1cmd1dCBVeWFyIDx1eWFyQGNzLml0dS5lZHUudHI+CisgICBSaWhhcmRhcyBIZXBhcyA8cmNoQFdyaXRlTWUuQ29tPgorICAgU3phbGF5IFRhbWFzIDx0b21la0BlbGVuZGVyLmh1PgorICAgSm9oYW4gVnJvbWFucyA8anZyb21hbnNAc3F1aXJyZWwubmw+CisgICBQZXRyIFRpdGVyYSA8UC5UaXRlcmFAc2guY3Z1dC5jej4KKyAgIExlaSBXYW5nIDxsd2FuZ0BhbWF0aDguYW10LmFjLmNuPgorICAgQ2hlbiBYaWFuZ3lhbmcgPGNoZW54eUBzdW4uaWhlcC5hYy5jbj4KKyAgIFp2ZXpkYW4gUGV0a292aWMgPHoucGV0a292aWNAY29tcHV0ZXIub3JnPgorICAgUmlnZWwgPHJpZ2VsODYzQHlhaG9vLmNvbT4KKyAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAKKyAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICBhcmUgbWV0OgorICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAgMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAgICAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBUVEYyUFQxIFByb2plY3QKKyAgICAgICBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKyAKKyAgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUlMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgIFNVQ0ggREFNQUdFLgorCitGb3IgdGhlIGFwcHJveGltYXRlIGxpc3Qgb2YgdGhlIEFVVEhPUlMnIHJlc3BvbnNpYmlsaXRpZXMgc2VlIHRoZQorcHJvamVjdCBoaXN0b3J5LgorCitPdGhlciBjb250cmlidXRpb25zIHRvIHRoZSBwcm9qZWN0IGFyZToKKworVHVyZ3V0IFV5YXIgPHV5YXJAY3MuaXR1LmVkdS50cj4KKyBUaGUgVW5pY29kZSB0cmFuc2xhdGlvbiB0YWJsZSBmb3IgdGhlIFR1cmtpc2ggbGFuZ3VhZ2UuCisKK1JpaGFyZGFzIEhlcGFzIDxyY2hAV3JpdGVNZS5Db20+CisgVGhlIFVuaWNvZGUgdHJhbnNsYXRpb24gdGFibGUgZm9yIHRoZSBCYWx0aWMgbGFuZ3VhZ2VzLgorCitTemFsYXkgVGFtYXMgPHRvbWVrQGVsZW5kZXIuaHU+CisgVGhlIFVuaWNvZGUgdHJhbnNsYXRpb24gdGFibGUgZm9yIHRoZSBDZW50cmFsIEV1cm9wZWFuIGxhbmd1YWdlcy4KKyAKK0pvaGFuIFZyb21hbnMgPGp2cm9tYW5zQHNxdWlycmVsLm5sPgorIFRoZSBSUE0gZmlsZS4KKworUGV0ciBUaXRlcmEgPFAuVGl0ZXJhQHNoLmN2dXQuY3o+CisgVGhlIFVuaWNvZGUgbWFwIGZvcm1hdCB3aXRoIG5hbWVzLCB0aGUgZm9yY2VkIFVuaWNvZGUgb3B0aW9uLgorCitGcmFuayBNLiBTaWVnZXJ0IDxmcmFua0B0aGlzLm5ldD4KKyBQb3J0IHRvIFdpbmRvd3MKKworTGVpIFdhbmcgPGx3YW5nQGFtYXRoOC5hbXQuYWMuY24+CitDaGVuIFhpYW5neWFuZyA8Y2hlbnh5QHN1bi5paGVwLmFjLmNuPgorIFRyYW5zbGF0aW9uIG1hcHMgZm9yIENoaW5lc2UgZm9udHMuCisKK1p2ZXpkYW4gUGV0a292aWMgPHoucGV0a292aWNAY29tcHV0ZXIub3JnPgorIFRoZSBVbmljb2RlIHRyYW5zbGF0aW9uIHRhYmxlcyBmb3IgdGhlIEN5cmlsbGljIGFscGhhYmV0LgorCitSaWdlbCA8cmlnZWw4NjNAeWFob28uY29tPgorIEdlbmVyYXRpb24gb2YgdGhlIGR2aXBzIGVuY29kaW5nIGZpbGVzLCBtb2RpZmljYXRpb24gdG8gdGhlIENoaW5lc2UgbWFwcy4KKworSS4gTGVlIEhldGhlcmluZ3RvbiA8aWxoQGxjcy5taXQuZWR1PgorIFRoZSBUeXBlMSBhc3NlbWJsZXIgKGZyb20gdGhlIHBhY2thZ2UgJ3QxdXRpbHMnKSwgaXRzIGZ1bGwgY29weXJpZ2h0Cisgbm90aWNlOgorICBDb3B5cmlnaHQgKGMpIDE5OTIgYnkgSS4gTGVlIEhldGhlcmluZ3RvbiwgYWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAgUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCB0byB1c2UsIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBwcm9ncmFtCisgIGZvciBhbnkgcHVycG9zZSBwcm92aWRlZCB0aGlzIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoZSBvbmUgYmVsb3cgcmVtYWluCisgIGludGFjdC4KKyAKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL3VuUkFSIGIvbGljZW5zZXMvdW5SQVIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgxMTI3NgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL3VuUkFSCkBAIC0wLDAgKzEsNDIgQEAKKyAqKioqKiogICAgKioqKiogICAqKioqKiogICBVblJBUiAtIGZyZWUgdXRpbGl0eSBmb3IgUkFSIGFyY2hpdmVzCisgKiogICAqKiAgKiogICAqKiAgKiogICAqKiAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICoqKioqKiAgICoqKioqKiogICoqKioqKiAgICBMaWNlbnNlIGZvciB1c2UgYW5kIGRpc3RyaWJ1dGlvbiBvZgorICoqICAgKiogICoqICAgKiogICoqICAgKiogICB+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fgorICoqICAgKiogICoqICAgKiogICoqICAgKiogICAgICAgICBGUkVFIHBvcnRhYmxlIHZlcnNpb24KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfn5+fn5+fn5+fn5+fn5+fn5+fn5+CisKKyAgICAgIFRoZSBzb3VyY2UgY29kZSBvZiBVblJBUiB1dGlsaXR5IGlzIGZyZWV3YXJlLiBUaGlzIG1lYW5zOgorCisgICAxLiBBbGwgY29weXJpZ2h0cyB0byBSQVIgYW5kIHRoZSB1dGlsaXR5IFVuUkFSIGFyZSBleGNsdXNpdmVseQorICAgICAgb3duZWQgYnkgdGhlIGF1dGhvciAtIEFsZXhhbmRlciBSb3NoYWwuCisKKyAgIDIuIFVuUkFSIHNvdXJjZSBjb2RlIG1heSBiZSB1c2VkIGluIGFueSBzb2Z0d2FyZSB0byBoYW5kbGUKKyAgICAgIFJBUiBhcmNoaXZlcyB3aXRob3V0IGxpbWl0YXRpb25zIGZyZWUgb2YgY2hhcmdlLCBidXQgY2Fubm90IGJlCisgICAgICB1c2VkIHRvIGRldmVsb3AgUkFSIChXaW5SQVIpIGNvbXBhdGlibGUgYXJjaGl2ZXIgYW5kIHRvCisgICAgICByZS1jcmVhdGUgUkFSIGNvbXByZXNzaW9uIGFsZ29yaXRobSwgd2hpY2ggaXMgcHJvcHJpZXRhcnkuCisgICAgICBEaXN0cmlidXRpb24gb2YgbW9kaWZpZWQgVW5SQVIgc291cmNlIGNvZGUgaW4gc2VwYXJhdGUgZm9ybQorICAgICAgb3IgYXMgYSBwYXJ0IG9mIG90aGVyIHNvZnR3YXJlIGlzIHBlcm1pdHRlZCwgcHJvdmlkZWQgdGhhdAorICAgICAgZnVsbCB0ZXh0IG9mIHRoaXMgcGFyYWdyYXBoLCBzdGFydGluZyBmcm9tICJVblJBUiBzb3VyY2UgY29kZSIKKyAgICAgIHdvcmRzLCBpcyBpbmNsdWRlZCBpbiBsaWNlbnNlLCBvciBpbiBkb2N1bWVudGF0aW9uIGlmIGxpY2Vuc2UKKyAgICAgIGlzIG5vdCBhdmFpbGFibGUsIGFuZCBpbiBzb3VyY2UgY29kZSBjb21tZW50cyBvZiByZXN1bHRpbmcgcGFja2FnZS4KKworICAgMy4gVGhlIFVuUkFSIHV0aWxpdHkgbWF5IGJlIGZyZWVseSBkaXN0cmlidXRlZC4gSXQgaXMgYWxsb3dlZAorICAgICAgdG8gZGlzdHJpYnV0ZSBVblJBUiBpbnNpZGUgb2Ygb3RoZXIgc29mdHdhcmUgcGFja2FnZXMuCisKKyAgIDQuIFRIRSBSQVIgQVJDSElWRVIgQU5EIFRIRSBVblJBUiBVVElMSVRZIEFSRSBESVNUUklCVVRFRCAiQVMgSVMiLgorICAgICAgTk8gV0FSUkFOVFkgT0YgQU5ZIEtJTkQgSVMgRVhQUkVTU0VEIE9SIElNUExJRUQuICBZT1UgVVNFIEFUIAorICAgICAgWU9VUiBPV04gUklTSy4gVEhFIEFVVEhPUiBXSUxMIE5PVCBCRSBMSUFCTEUgRk9SIERBVEEgTE9TUywgCisgICAgICBEQU1BR0VTLCBMT1NTIE9GIFBST0ZJVFMgT1IgQU5ZIE9USEVSIEtJTkQgT0YgTE9TUyBXSElMRSBVU0lORworICAgICAgT1IgTUlTVVNJTkcgVEhJUyBTT0ZUV0FSRS4KKworICAgNS4gSW5zdGFsbGluZyBhbmQgdXNpbmcgdGhlIFVuUkFSIHV0aWxpdHkgc2lnbmlmaWVzIGFjY2VwdGFuY2Ugb2YKKyAgICAgIHRoZXNlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBsaWNlbnNlLgorCisgICA2LiBJZiB5b3UgZG9uJ3QgYWdyZWUgd2l0aCB0ZXJtcyBvZiB0aGUgbGljZW5zZSB5b3UgbXVzdCByZW1vdmUKKyAgICAgIFVuUkFSIGZpbGVzIGZyb20geW91ciBzdG9yYWdlIGRldmljZXMgYW5kIGNlYXNlIHRvIHVzZSB0aGUKKyAgICAgIHV0aWxpdHkuCisKKyAgICAgIFRoYW5rIHlvdSBmb3IgeW91ciBpbnRlcmVzdCBpbiBSQVIgYW5kIFVuUkFSLgorCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWxleGFuZGVyIEwuIFJvc2hhbApkaWZmIC0tZ2l0IGEvbGljZW5zZXMvdW5hZm9sZCBiL2xpY2Vuc2VzL3VuYWZvbGQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWFkMjI5ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL3VuYWZvbGQKQEAgLTAsMCArMSw3NCBAQAorVU5BRm9sZCAzLnggQUNBREVNSUMgTk9OLUNPTU1FUkNJQUwgVVNFIExJQ0VOU0UgQUdSRUVNRU5UCisKKzEuIFVOQUZvbGQgMy54IGlzIHRoZSB3b3JrIG9mIERycy4gTmljaG9sYXMgUi4gTWFya2hhbSBhbmQgTWljaGFlbCBadWtlci4gIFRoZQorICAgY29weXJpZ2h0IGluIFVOQUZvbGQgMy54IGlzIG93bmVkIGJ5IFJFTlNTRUxBRVIgUE9MWVRFQ0hOSUMgSU5TVElUVVRFLgorCisyLiBUaGlzIGlzIGEgbGVnYWwgYWdyZWVtZW50IGJldHdlZW4geW91LCBSRUNJUElFTlQsIGFuZCBSRU5TU0VMQUVSIFBPTFlURUNITklDCisgICBJTlNUSVRVVEUuICBCeSBhY2NlcHRpbmcsIHJlY2VpdmluZywgYW5kIHVzaW5nIFVOQUZvbGQgMy54LCB5b3UgYWdyZWUgdG8gYmUKKyAgIGJvdW5kIGJ5IGFsbCBvZiBpdHMgdGVybXMuICBJZiB5b3UgZG8gbm90IGFncmVlIHRvIGFsbCBvZiB0aGUgdGVybXMgb2YgdGhpcworICAgQWdyZWVtZW50LCBwbGVhc2UgRE8gTk9UIGRvd25sb2FkIHRoZSBzb2Z0d2FyZTsgb3IsIGlmIHlvdSBoYXZlIGFscmVhZHkgZG9uZQorICAgc28sIHBsZWFzZSBkZWxldGUgYWxsIG9mIHRoZSBzb3VyY2UgY29kZSwgZG9jdW1lbnRhdGlvbiBhbmQgY29tcGlsZWQgcHJvZ3JhbXMKKyAgIGFzc29jaWF0ZWQgd2l0aCBVTkFGb2xkIDMueC4KKworMy4gVU5BRm9sZCAzLnggaXMgcHJvdmlkZWQgdG8gUkVDSVBJRU5UIGFzIHNvdXJjZSBjb2RlLiAgUkVOU1NFTEFFUiBQT0xZVEVDSE5JQworICAgSU5TVElUVVRFIGdyYW50cyB0byBSRUNJUElFTlQgYSByb3lhbHR5IGZyZWUsIG5vbi1leGNsdXNpdmUsIGFuZCBub24tCisgICB0cmFuc2ZlcmFibGUgbGljZW5zZSB0byBjb21waWxlLCBpbnN0YWxsLCB1c2UgVU5BRm9sZCBmb3IgaW50ZXJuYWwgcmVzZWFyY2gKKyAgIG9ubHkuICBSRUNJUElFTlQgYWNrbm93bGVkZ2VzIHRoYXQgVU5BRm9sZCAzLnggaXMgYSByZXNlYXJjaCB0b29sIHRoYXQgaXMKKyAgIHByb3ZpZGVkIGZyZWUgb2YgY2hhcmdlIGFuZCBvbmx5IHByb3ZpZGVkICJhcyBpcy4iIFJFTlNTRUxBRVIgUE9MWVRFQ0hOSUMKKyAgIElOU1RJVFVURSwgaXRzIGZhY3VsdHksIGVtcGxveWVlcywgb3Igc3R1ZGVudHMsIG9yIGZvcm1lciBlbXBsb3llZXMgd2hvIGhhdmUKKyAgIGRldmVsb3BlZCBVTkFGb2xkIDMueCwgaGF2ZSBubyBvYmxpZ2F0aW9uIHRvIGFzc2lzdCBSRUNJUElFTlQgaW4gaXRzIHVzZSwKKyAgIGNvcnJlY3Rpb24sIG1vZGlmaWNhdGlvbiwgb3IgZW5oYW5jZW1lbnQgYW5kIGFyZSB3aXRob3V0IGFueSBvYmxpZ2F0aW9uIHRvCisgICBwcm92aWRlIGFueSB1cGRhdGVzLiAgUkVDSVBJRU5UIG1heSBhbHNvIG9mZmVyIFVOQUZvbGQgMy54IHRvIHRoZSBwdWJsaWMgb3ZlcgorICAgYSB3ZWIgc2VydmVyIHByb3ZpZGVkIHRoZSBwcm9ncmFtIHJlc2lkZXMgb24gYSBzZXJ2ZXIgYXQgUkVDSVBJRU5UJ3MKKyAgIGluc3RpdHV0aW9uIGFuZCB1c2VycyBhcmUgbm90IGFibGUgdG8gZG93bmxvYWQgb3IgbW9kaWZ5IHRoZSBwcm9ncmFtLgorCis0LiBUaGUgdGl0bGUgYW5kIGNvcHlyaWdodCB0byBVTkFGb2xkIDMueCBhbmQgYW55IGFzc29jaWF0ZWQgcHJvZ3JhbXMgYW5kCisgICBkb2N1bWVudGF0aW9uIHNoYWxsIHJlbWFpbiB3aXRoIFJFTlNTRUxBRVIgUE9MWVRFQ0hOSUMgSU5TVElUVVRFLiAgUkVDSVBJRU5UCisgICBhZ3JlZXMgdG8gcHJlc2VydmUgc2FtZS4gIFJFQ0lQSUVOVCBhZ3JlZXMgbm90IHRvIG1ha2UgYW55IGNvcGllcyBvZiBVTkFGb2xkCisgICBleGNlcHQgZm9yIHVzZSBpbiBSRUNJUElFTlQncyBsYWJvcmF0b3J5IHdpdGhvdXQgUkVOU1NFTEFFUiBQT0xZVEVDSE5JQworICAgSU5TVElUVVRFJ3MgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAgV3JpdHRlbiBwZXJtaXNzaW9uIGNhbiBiZSBvYnRhaW5lZCBieQorICAgY29udGFjdGluZyBSZW5zc2VsYWVyIFBvbHl0ZWNobmljIEluc3RpdHV0ZSdzIE9mZmljZSBvZiBUZWNobm9sb2d5CisgICBDb21tZXJjaWFsaXphdGlvbiBieSBlLW1haWwgYXQgYnVydG9rMkBycGkuZWR1LCBvciBieSB0ZWxlcGhvbmUgYXQgNTE4LTI3Ni0KKyAgIDM2NzUuICBSRUNJUElFTlQgYWdyZWVzIHRvIHBsYWNlIHRoZSBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIG9uIGFueSBzdWNoCisgICBjb3BpZXMuCisKKzUuIFJFQ0lQSUVOVCBtYXkgbm90IG1vZGlmeSBVTkFGb2xkIDMueCwgZXhjZXB0IHRvIGZpeCBtaW5vciBlcnJvcnMsIG9yIGNyZWF0ZQorICAgZGVyaXZhdGl2ZSB3b3JrcyB3aXRob3V0IFJFTlNTRUxBRVIgUE9MWVRFQ0hOSUMgSU5TVElUVVRFJ3MgcGVybWlzc2lvbi4KKyAgIFBsZWFzZSBzZW5kIGFsbCByZXF1ZXN0cyBmb3IgbW9kaWZpY2F0aW9uIHRvIG1hcmtobkBycGkuZWR1IGFuZAorICAgenVrZXJtQHJwaS5lZHUuICBFcnJvcnMgYW5kIGJ1Z3MgdGhhdCBhcmUgZm91bmQgc2hvdWxkIGJlIHJlcG9ydGVkIHRvIE5pY2sKKyAgIE1hcmtoYW0gYW5kIE1pY2hhZWwgWnVrZXIsIHdoZXRoZXIgb3Igbm90IHRoZXkgYXJlIGNvcnJlY3RlZC4KKworNi4gUkVDSVBJRU5UIHNoYWxsIG5vdCBkaXN0cmlidXRlIFVOQUZvbGQgMy54IHRvIG90aGVyIGxhYm9yYXRvcmllcyB3aXRoaW4KKyAgIFJFQ0lQSUVOVCdzIGluc3RpdHV0aW9uLiAgUkVDSVBJRU5UIHNoYWxsIG5vdCB0cmFuc2ZlciBVTkFGb2xkIDMueCB0byBhbm90aGVyCisgICBsb2NhdGlvbiBvciBwZXJzb24gb3V0c2lkZSBvZiBSRUNJUElFTlQncyBpbnN0aXR1dGlvbiB3aXRob3V0IFJFTlNTRUxBRVIKKyAgIFBPTFlURUNITklDIElOU1RJVFVURSdzIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gIFBsZWFzZSBzZW5kIGFsbCByZXF1ZXN0cworICAgZm9yIGRpc3RyaWJ1dGlvbiB0byBtYXJraG5AcnBpLmVkdSBhbmQgenVrZXJtQHJwaS5lZHUuCisKKzcuIElmIFJFTlNTRUxBRVIgUE9MWVRFQ0hOSUMgSU5TVElUVVRFIGdyYW50cyBSRUNJUElFTlQgcGVybWlzc2lvbiB0byBkaXN0cmlidXRlCisgICBVTkFGb2xkIDMueCwgdW5kZXIgUGFyYWdyYXBoIDYsIFJFQ0lQSUVOVCBzaGFsbCBvbmx5IGV4cG9ydCBVTkFGb2xkIDMueCBvcgorICAgYW55IHBhcnQgdGhlcmVvZiwgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgdG8gYW55IGNvdW50cnkgd2hlcmUgc3VjaCBleHBvcnQgb3IKKyAgIHJlZXhwb3J0IGlzIGF1dGhvcml6ZWQgaW4gZnVsbCBjb21wbGlhbmNlIHdpdGggdGhlIGxhd3Mgb2YgdGhlIFVuaXRlZCBTdGF0ZXMKKyAgIG9mIEFtZXJpY2EuCisKKzguIFJFQ0lQRU5UIHNoYWxsIGNpdGUgdGhlIGZvbGxvd2luZyBwdWJsaWNhdGlvbnMgaW4gYW55IGFic3RyYWN0LCBwYXBlciwgb3IKKyAgIHByZXNlbnRhdGlvbiByZWZlcmVuY2luZyBVTkFGb2xkOgorCithLiBOLiBNYXJraGFtICYgTS4gWnVrZXIuICgyMDAzKSBESU5BTWVsdCB3ZWIgc2VydmVyIGZvciBudWNsZWljIGFjaWQgbWVsdGluZworICAgcHJlZGljdGlvbi4gIE51Y2xlaWMgQWNpZHMgUmVzLiAzMzpXNTc3LVc1ODEuCisKKzkuIFJFQ0lQSUVOVCBhY2tub3dsZWRnZXMgdGhhdCBhcyBVTkFGb2xkIDMueCBpcyBhIHJlc2VhcmNoIHRvb2wgYW5kIHByb3ZpZGVkCisgICBmcmVlIG9mIGNoYXJnZSwgaXQgaXMgb25seSBwcm92aWRlZCAiYXMgaXMuIiAgUkVOU1NFTEFFUiBQT0xZVEVDSE5JQworICAgSU5TVElUVVRFLCBpdHMgZmFjdWx0eSwgZW1wbG95ZWVzLCBvciBzdHVkZW50cywgaGF2ZSBubyBvYmxpZ2F0aW9uIHRvIGFzc2lzdAorICAgUkVDSVBJRU5UIGluIGl0cyB1c2UsIGNvcnJlY3Rpb24sIG1vZGlmaWNhdGlvbiwgb3IgZW5oYW5jZW1lbnQgYW5kIGFyZQorICAgd2l0aG91dCBhbnkgb2JsaWdhdGlvbiB0byBwcm92aWRlIGFueSB1cGRhdGVzLgorCisxMC4gUkVOU1NFTEFFUiBQT0xZVEVDSE5JQyBJTlNUSVRVVEUgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIEFORCBFWFRFTkRTIE5PCisgICAgV0FSUkFOVElFUyBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRC4gVEhFUkUgQVJFIE5PIEVYUFJFU1MgT1IKKyAgICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgT0YgVU5BRm9sZCAzLnggRk9SIEEKKyAgICBQQVJUSUNVTEFSIFBVUlBPU0UsIE9SIFRIQVQgVEhFIFVTRSBPRiBVTkFGb2xkIDMueCBXSUxMIE5PVCBJTkZSSU5HRSBBTlkKKyAgICBQQVRFTlQsIENPUFlSSUdIVCwgVFJBREVNQVJLLCBUUkFERSBTRUNSRVQsIE9SIE9USEVSIElOVEVMTEVDVFVBTCBQUk9QRVJUWQorICAgIFJJR0hUUyBPRiBBTk9USEVSIFBBUlRZLCBPUiBBTlkgT1RIRVIgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMuCisgICAgUkVOU1NFTEFFUiBQT0xZVEVDSE5JQyBJTlNUSVRVVEUgV0lMTCBOT1QgQkUgTElBQkxFIFRPIFJFQ0lQSUVOVCBGT1IgQU5ZCisgICAgQ0xBSU1TIE9SIERBTUFHRVMgQVJJU0lORyBGUk9NIFlPVVIgUkVDSVBJRU5UJ1MgT0YgVU5BRm9sZCAzLngsIEFOWSBDTEFJTQorICAgIEZPUiBBTlkgTE9TUyBPUiBJTlRFUlJVUFRJT04gT0YgQlVTSU5FU1MsIE9SIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIE9SCisgICAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9GIEFOWSBLSU5ELgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvdW5pY29kZSBiL2xpY2Vuc2VzL3VuaWNvZGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk2YzFjZQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL3VuaWNvZGUKQEAgLTAsMCArMSwyMjkgQEAKKyAgIFsxXVtVbmljb2RlXSAgIFsyXVRlcm1zIG9mIFVzZSBbM11Ib21lIHwgWzRdU2l0ZSBNYXAgfCBbNV1TZWFyY2gKKworICAgQ29udGVudHMKKyAgIFs2XVVuaWNvZGUgQ29weXJpZ2h0CisgICBbN11SZXN0cmljdGVkIFJpZ2h0cyBMZWdlbmQKKyAgIFs4XVdhcnJhbnRpZXMgJiBEaXNjbGFpbWVycworICAgWzldV2FpdmVyIG9mIERhbWFnZXMKKyAgIFsxMF1UcmFkZW1hcmtzCisgICBbMTFdTWlzY2VsbGFuZW91cworICAgWzEyXURhdGEgRmlsZXMgYW5kIFNvZnR3YXJlIExpY2Vuc2UgQWdyZWVtZW50IChFeGhpYml0IDEpCisKKyAgIFJlbGF0ZWQgTGlua3MKKyAgIFsxM11UaGUgVW5pY29kZcKuIENvbnNvcnRpdW0gVHJhZGVtYXJrcyBhbmQgTG9nbyBQb2xpY3kKKyAgIFsxNF1Vbmljb2RlIFBvbGljaWVzCisKK1VuaWNvZGUgVGVybXMgb2YgVXNlCisKKyAgICAgRm9yIHRoZSBnZW5lcmFsIHByaXZhY3kgcG9saWN5IGdvdmVybmluZyBhY2Nlc3MgdG8gdGhpcyBzaXRlLCBzZWUKKyAgICAgdGhlICBbMTVdVW5pY29kZSBQcml2YWN5IFBvbGljeS4gRm9yIHRyYWRlbWFyayB1c2FnZSwgc2VlIFsxNl10aGUKKyAgICAgVW5pY29kZSBDb25zb3J0aXVtwq4gVHJhZGVtYXJrcyBhbmQgTG9nbyBQb2xpY3kuCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTm90aWNlIHRvIEVuZCBVc2VyOiBUZXJtcyBvZiBVc2UKKyAgICAgICAgQ2FyZWZ1bGx5IHJlYWQgdGhlIGZvbGxvd2luZyBsZWdhbCBhZ3JlZW1lbnQgKCJBZ3JlZW1lbnQiKS4gVXNlIG9yCisgICAgY29weWluZyBvZiB0aGUgc29mdHdhcmUgYW5kL29yIGNvZGVzIHByb3ZpZGVkIHdpdGggdGhpcyBhZ3JlZW1lbnQgKFRoZQorICAgICAgICAgICAgICAgICAgICAiU29mdHdhcmUiKSBjb25zdGl0dXRlcyB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhlc2UgdGVybXMKKworICAgIEEuIFVuaWNvZGUgQ29weXJpZ2h0LgorICAgICAgICAgMS4gQ29weXJpZ2h0IMKpIDE5OTEtMjAwOCBVbmljb2RlLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgICAgICAgICAyLiBDZXJ0YWluIGRvY3VtZW50cyBhbmQgZmlsZXMgb24gdGhpcyB3ZWJzaXRlIGNvbnRhaW4gYSBsZWdlbmQKKyAgICAgICAgICAgIGluZGljYXRpbmcgdGhhdCAiTW9kaWZpY2F0aW9uIGlzIHBlcm1pdHRlZC4iIEFueSBwZXJzb24gaXMKKyAgICAgICAgICAgIGhlcmVieSBhdXRob3JpemVkLCB3aXRob3V0IGZlZSwgdG8gbW9kaWZ5IHN1Y2ggZG9jdW1lbnRzIGFuZAorICAgICAgICAgICAgZmlsZXMgdG8gY3JlYXRlIGRlcml2YXRpdmUgd29ya3MgY29uZm9ybWluZyB0byB0aGUgVW5pY29kZcKuCisgICAgICAgICAgICBTdGFuZGFyZCwgc3ViamVjdCB0byBUZXJtcyBhbmQgQ29uZGl0aW9ucyBoZXJlaW4uCisgICAgICAgICAzLiBBbnkgcGVyc29uIGlzIGhlcmVieSBhdXRob3JpemVkLCB3aXRob3V0IGZlZSwgdG8gdmlldywgdXNlLAorICAgICAgICAgICAgcmVwcm9kdWNlLCBhbmQgZGlzdHJpYnV0ZSBhbGwgZG9jdW1lbnRzIGFuZCBmaWxlcyBzb2xlbHkgZm9yCisgICAgICAgICAgICBpbmZvcm1hdGlvbmFsIHB1cnBvc2VzIGluIHRoZSBjcmVhdGlvbiBvZiBwcm9kdWN0cyBzdXBwb3J0aW5nCisgICAgICAgICAgICB0aGUgVW5pY29kZSBTdGFuZGFyZCwgc3ViamVjdCB0byB0aGUgVGVybXMgYW5kIENvbmRpdGlvbnMKKyAgICAgICAgICAgIGhlcmVpbi4KKyAgICAgICAgIDQuIEZ1cnRoZXIgc3BlY2lmaWNhdGlvbnMgb2YgcmlnaHRzIGFuZCByZXN0cmljdGlvbnMgcGVydGFpbmluZworICAgICAgICAgICAgdG8gdGhlIHVzZSBvZiB0aGUgcGFydGljdWxhciBzZXQgb2YgZGF0YSBmaWxlcyBrbm93biBhcyB0aGUKKyAgICAgICAgICAgICJVbmljb2RlIENoYXJhY3RlciBEYXRhYmFzZSIgY2FuIGJlIGZvdW5kIGluIFsxN11FeGhpYml0IDEuCisgICAgICAgICA1LiBFYWNoIHZlcnNpb24gb2YgdGhlIFVuaWNvZGUgU3RhbmRhcmQgaGFzIGZ1cnRoZXIKKyAgICAgICAgICAgIHNwZWNpZmljYXRpb25zIG9mIHJpZ2h0cyBhbmQgcmVzdHJpY3Rpb25zIG9mIHVzZS4gRm9yIHRoZSBib29rCisgICAgICAgICAgICBlZGl0aW9ucywgdGhlc2UgYXJlIGZvdW5kIG9uIHRoZSBiYWNrIG9mIHRoZSBbMThddGl0bGUgcGFnZS4KKyAgICAgICAgICAgIEZvciB0aGUgb25saW5lIGVkaXRpb24sIGNlcnRhaW4gZmlsZXMgKHN1Y2ggYXMgdGhlIFBERiBmaWxlcworICAgICAgICAgICAgZm9yIGJvb2sgY2hhcHRlcnMgYW5kIGNvZGUgY2hhcnRzKSBjYXJyeSBzcGVjaWZpYworICAgICAgICAgICAgcmVzdHJpY3Rpb25zLiBBbGwgb3RoZXIgZmlsZXMgYXJlIGNvdmVyZWQgdW5kZXIgdGhlc2UgZ2VuZXJhbAorICAgICAgICAgICAgVGVybXMgb2YgVXNlLiAgVG8gcmVxdWVzdCBhIHBlcm1pc3Npb24gdG8gcmVwcm9kdWNlIGFueSBwYXJ0CisgICAgICAgICAgICBvZiB0aGUgVW5pY29kZSBTdGFuZGFyZCwgcGxlYXNlIFsxOV1jb250YWN0IHRoZSBVbmljb2RlCisgICAgICAgICAgICBDb25zb3J0aXVtLgorICAgICAgICAgNi4gTm8gbGljZW5zZSBpcyBncmFudGVkIHRvICJtaXJyb3IiIHRoZSBVbmljb2RlIHdlYnNpdGUgd2hlcmUgYQorICAgICAgICAgICAgZmVlIGlzIGNoYXJnZWQgZm9yIGFjY2VzcyB0byB0aGUgIm1pcnJvciIgc2l0ZS4KKyAgICAgICAgIDcuIE1vZGlmaWNhdGlvbiBpcyBub3QgcGVybWl0dGVkIHdpdGggcmVzcGVjdCB0byB0aGlzIGRvY3VtZW50LgorICAgICAgICAgICAgQWxsIGNvcGllcyBvZiB0aGlzIGRvY3VtZW50IG11c3QgYmUgdmVyYmF0aW0uCisgICAgQi4gUmVzdHJpY3RlZCBSaWdodHMgTGVnZW5kLiBBbnkgdGVjaG5pY2FsIGRhdGEgb3Igc29mdHdhcmUgd2hpY2ggaXMKKyAgICAgICBsaWNlbnNlZCB0byB0aGUgVW5pdGVkIFN0YXRlcyBvZiBBbWVyaWNhLCBpdHMgYWdlbmNpZXMgYW5kL29yCisgICAgICAgaW5zdHJ1bWVudGFsaXRpZXMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgaXMgY29tbWVyY2lhbCB0ZWNobmljYWwgZGF0YQorICAgICAgIG9yIGNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUgZGV2ZWxvcGVkIGV4Y2x1c2l2ZWx5IGF0IHByaXZhdGUKKyAgICAgICBleHBlbnNlIGFzIGRlZmluZWQgaW4gRkFSIDIuMTAxLCBvciBERkFSUyAyNTIuMjI3LTcwMTQgKEp1bmUgMTk5NSksCisgICAgICAgYXMgYXBwbGljYWJsZS4gRm9yIHRlY2huaWNhbCBkYXRhLCB1c2UsIGR1cGxpY2F0aW9uLCBvciBkaXNjbG9zdXJlCisgICAgICAgYnkgdGhlIEdvdmVybm1lbnQgaXMgc3ViamVjdCB0byByZXN0cmljdGlvbnMgYXMgc2V0IGZvcnRoIGluIERGQVJTCisgICAgICAgMjAyLjIyNy03MDE1IFRlY2huaWNhbCBEYXRhLCBDb21tZXJjaWFsIGFuZCBJdGVtcyAoTm92IDE5OTUpIGFuZAorICAgICAgIHRoaXMgQWdyZWVtZW50LiBGb3IgU29mdHdhcmUsIGluIGFjY29yZGFuY2Ugd2l0aCBGQVIgMTItMjEyIG9yCisgICAgICAgREZBUlMgMjI3LTcyMDIsIGFzIGFwcGxpY2FibGUsIHVzZSwgZHVwbGljYXRpb24gb3IgZGlzY2xvc3VyZSBieQorICAgICAgIHRoZSBHb3Zlcm5tZW50IGlzIHN1YmplY3QgdG8gdGhlIHJlc3RyaWN0aW9ucyBzZXQgZm9ydGggaW4gdGhpcworICAgICAgIEFncmVlbWVudC4KKyAgICBDLiBXYXJyYW50aWVzIGFuZCBEaXNjbGFpbWVycy4KKyAgICAgICAgIDEuIFRoaXMgcHVibGljYXRpb24gYW5kL29yIHdlYnNpdGUgbWF5IGluY2x1ZGUgdGVjaG5pY2FsIG9yCisgICAgICAgICAgICB0eXBvZ3JhcGhpY2FsIGVycm9ycyBvciBvdGhlciBpbmFjY3VyYWNpZXMgLiBDaGFuZ2VzIGFyZQorICAgICAgICAgICAgcGVyaW9kaWNhbGx5IGFkZGVkIHRvIHRoZSBpbmZvcm1hdGlvbiBoZXJlaW47IHRoZXNlIGNoYW5nZXMKKyAgICAgICAgICAgIHdpbGwgYmUgaW5jb3Jwb3JhdGVkIGluIG5ldyBlZGl0aW9ucyBvZiB0aGUgcHVibGljYXRpb24gYW5kL29yCisgICAgICAgICAgICB3ZWJzaXRlLiBVbmljb2RlIG1heSBtYWtlIGltcHJvdmVtZW50cyBhbmQvb3IgY2hhbmdlcyBpbiB0aGUKKyAgICAgICAgICAgIHByb2R1Y3QocykgYW5kL29yIHByb2dyYW0ocykgZGVzY3JpYmVkIGluIHRoaXMgcHVibGljYXRpb24KKyAgICAgICAgICAgIGFuZC9vciB3ZWJzaXRlIGF0IGFueSB0aW1lLgorICAgICAgICAgMi4gSWYgdGhpcyBmaWxlIGhhcyBiZWVuIHB1cmNoYXNlZCBvbiBtYWduZXRpYyBvciBvcHRpY2FsIG1lZGlhCisgICAgICAgICAgICBmcm9tIFVuaWNvZGUsIEluYy4gdGhlIHNvbGUgYW5kIGV4Y2x1c2l2ZSByZW1lZHkgZm9yIGFueSBjbGFpbQorICAgICAgICAgICAgd2lsbCBiZSBleGNoYW5nZSBvZiB0aGUgZGVmZWN0aXZlIG1lZGlhIHdpdGhpbiBuaW5ldHkgKDkwKQorICAgICAgICAgICAgZGF5cyBvZiBvcmlnaW5hbCBwdXJjaGFzZS4KKyAgICAgICAgIDMuIEVYQ0VQVCBBUyBQUk9WSURFRCBJTiBTRUNUSU9OIEMuMiwgVEhJUyBQVUJMSUNBVElPTiBBTkQvT1IKKyAgICAgICAgICAgIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORAorICAgICAgICAgICAgRUlUSEVSIEVYUFJFU1MsIElNUExJRUQsIE9SIFNUQVRVVE9SWSwgSU5DTFVESU5HLCBCVVQgTk9UCisgICAgICAgICAgICBMSU1JVEVEIFRPLCBBTlkgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEKKyAgICAgICAgICAgIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgTk9OLUlORlJJTkdFTUVOVC4gVU5JQ09ERSBBTkQgSVRTCisgICAgICAgICAgICBMSUNFTlNPUlMgQVNTVU1FIE5PIFJFU1BPTlNJQklMSVRZIEZPUiBFUlJPUlMgT1IgT01JU1NJT05TIElOCisgICAgICAgICAgICBUSElTIFBVQkxJQ0FUSU9OIEFORC9PUiBTT0ZUV0FSRSBPUiBPVEhFUiBET0NVTUVOVFMgV0hJQ0ggQVJFCisgICAgICAgICAgICBSRUZFUkVOQ0VEIEJZIE9SIExJTktFRCBUTyBUSElTIFBVQkxJQ0FUSU9OIE9SIFRIRSBVTklDT0RFCisgICAgICAgICAgICBXRUJTSVRFLgorICAgIEQuIFdhaXZlciBvZiBEYW1hZ2VzLiBJbiBubyBldmVudCBzaGFsbCBVbmljb2RlIG9yIGl0cyBsaWNlbnNvcnMgYmUKKyAgICAgICBsaWFibGUgZm9yIGFueSBzcGVjaWFsLCBpbmNpZGVudGFsLCBpbmRpcmVjdCBvciBjb25zZXF1ZW50aWFsCisgICAgICAgZGFtYWdlcyBvZiBhbnkga2luZCwgb3IgYW55IGRhbWFnZXMgd2hhdHNvZXZlciwgd2hldGhlciBvciBub3QKKyAgICAgICBVbmljb2RlIHdhcyBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiB0aGUgZGFtYWdlLCBpbmNsdWRpbmcsCisgICAgICAgd2l0aG91dCBsaW1pdGF0aW9uLCB0aG9zZSByZXN1bHRpbmcgZnJvbSB0aGUgZm9sbG93aW5nOiBsb3NzIG9mCisgICAgICAgdXNlLCBkYXRhIG9yIHByb2ZpdHMsIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgdXNlLCBtb2RpZmljYXRpb24gb3IKKyAgICAgICBkaXN0cmlidXRpb24gb2YgdGhpcyBpbmZvcm1hdGlvbiBvciBpdHMgZGVyaXZhdGl2ZXMuCisgICAgRS4gVHJhZGVtYXJrcy4KKyAgICAgICAgIDEuIFVuaWNvZGUgYW5kIHRoZSBVbmljb2RlIGxvZ28gYXJlIHJlZ2lzdGVyZWQgdHJhZGVtYXJrcyBvZgorICAgICAgICAgICAgVW5pY29kZSwgSW5jLgorICAgICAgICAgMi4gVGhpcyBzaXRlIGNvbnRhaW5zIHByb2R1Y3QgbmFtZXMgYW5kIGNvcnBvcmF0ZSBuYW1lcyBvZiBvdGhlcgorICAgICAgICAgICAgY29tcGFuaWVzLiBBbGwgcHJvZHVjdCBuYW1lcyBhbmQgY29tcGFueSBuYW1lcyBhbmQgbG9nb3MKKyAgICAgICAgICAgIG1lbnRpb25lZCBoZXJlaW4gYXJlIHRoZSB0cmFkZW1hcmtzIG9yIHJlZ2lzdGVyZWQgdHJhZGVtYXJrcworICAgICAgICAgICAgb2YgdGhlaXIgcmVzcGVjdGl2ZSBvd25lcnMuIE90aGVyIHByb2R1Y3RzIGFuZCBjb3Jwb3JhdGUgbmFtZXMKKyAgICAgICAgICAgIG1lbnRpb25lZCBoZXJlaW4gd2hpY2ggYXJlIHRyYWRlbWFya3Mgb2YgYSB0aGlyZCBwYXJ0eSBhcmUKKyAgICAgICAgICAgIHVzZWQgb25seSBmb3IgZXhwbGFuYXRpb24gYW5kIGZvciB0aGUgb3duZXJzJyBiZW5lZml0IGFuZCB3aXRoCisgICAgICAgICAgICBubyBpbnRlbnQgdG8gaW5mcmluZ2UuCisgICAgICAgICAzLiBVc2Ugb2YgdGhpcmQgcGFydHkgcHJvZHVjdHMgb3IgaW5mb3JtYXRpb24gcmVmZXJyZWQgdG8gaGVyZWluCisgICAgICAgICAgICBpcyBhdCB0aGUgdXNlcidzIHJpc2suCisgICAgRi4gTWlzY2VsbGFuZW91cy4KKyAgICAgICAgIDEuIEp1cmlzZGljdGlvbiBhbmQgVmVudWUuIFRoaXMgc2VydmVyIGlzIG9wZXJhdGVkIGZyb20gYQorICAgICAgICAgICAgbG9jYXRpb24gaW4gdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEsIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYS4KKyAgICAgICAgICAgIFVuaWNvZGUgbWFrZXMgbm8gcmVwcmVzZW50YXRpb24gdGhhdCB0aGUgbWF0ZXJpYWxzIGFyZQorICAgICAgICAgICAgYXBwcm9wcmlhdGUgZm9yIHVzZSBpbiBvdGhlciBsb2NhdGlvbnMuIElmIHlvdSBhY2Nlc3MgdGhpcworICAgICAgICAgICAgc2VydmVyIGZyb20gb3RoZXIgbG9jYXRpb25zLCB5b3UgYXJlIHJlc3BvbnNpYmxlIGZvcgorICAgICAgICAgICAgY29tcGxpYW5jZSB3aXRoIGxvY2FsIGxhd3MuIFRoaXMgQWdyZWVtZW50LCBhbGwgdXNlIG9mIHRoaXMKKyAgICAgICAgICAgIHNpdGUgYW5kIGFueSBjbGFpbXMgYW5kIGRhbWFnZXMgcmVzdWx0aW5nIGZyb20gdXNlIG9mIHRoaXMKKyAgICAgICAgICAgIHNpdGUgYXJlIGdvdmVybmVkIHNvbGVseSBieSB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YKKyAgICAgICAgICAgIENhbGlmb3JuaWEgd2l0aG91dCByZWdhcmQgdG8gYW55IHByaW5jaXBsZXMgd2hpY2ggd291bGQgYXBwbHkKKyAgICAgICAgICAgIHRoZSBsYXdzIG9mIGEgZGlmZmVyZW50IGp1cmlzZGljdGlvbi4gVGhlIHVzZXIgYWdyZWVzIHRoYXQgYW55CisgICAgICAgICAgICBkaXNwdXRlcyByZWdhcmRpbmcgdGhpcyBzaXRlIHNoYWxsIGJlIHJlc29sdmVkIHNvbGVseSBpbiB0aGUKKyAgICAgICAgICAgIGNvdXJ0cyBsb2NhdGVkIGluIFNhbnRhIENsYXJhIENvdW50eSwgQ2FsaWZvcm5pYS4gVGhlIHVzZXIKKyAgICAgICAgICAgIGFncmVlcyBzYWlkIGNvdXJ0cyBoYXZlIHBlcnNvbmFsIGp1cmlzZGljdGlvbiBhbmQgYWdyZWUgdG8KKyAgICAgICAgICAgIHdhaXZlIGFueSByaWdodCB0byB0cmFuc2ZlciB0aGUgZGlzcHV0ZSB0byBhbnkgb3RoZXIgZm9ydW0uCisgICAgICAgICAyLiBNb2RpZmljYXRpb24gYnkgVW5pY29kZSBVbmljb2RlIHNoYWxsIGhhdmUgdGhlIHJpZ2h0IHRvIG1vZGlmeQorICAgICAgICAgICAgdGhpcyBBZ3JlZW1lbnQgYXQgYW55IHRpbWUgYnkgcG9zdGluZyBpdCB0byB0aGlzIHNpdGUuIFRoZQorICAgICAgICAgICAgdXNlciBtYXkgbm90IGFzc2lnbiBhbnkgcGFydCBvZiB0aGlzIEFncmVlbWVudCB3aXRob3V0CisgICAgICAgICAgICBVbmljb2RlJ3MgcHJpb3Igd3JpdHRlbiBjb25zZW50LgorICAgICAgICAgMy4gVGF4ZXMuIFRoZSB1c2VyIGFncmVlcyB0byBwYXkgYW55IHRheGVzIGFyaXNpbmcgZnJvbSBhY2Nlc3MgdG8KKyAgICAgICAgICAgIHRoaXMgd2Vic2l0ZSBvciB1c2Ugb2YgdGhlIGluZm9ybWF0aW9uIGhlcmVpbiwgZXhjZXB0IGZvcgorICAgICAgICAgICAgdGhvc2UgYmFzZWQgb24gVW5pY29kZSdzIG5ldCBpbmNvbWUuCisgICAgICAgICA0LiBTZXZlcmFiaWxpdHkuICBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGRlY2xhcmVkCisgICAgICAgICAgICBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUsIHRoZSByZW1haW5pbmcgcHJvdmlzaW9ucyBvZiB0aGlzCisgICAgICAgICAgICBBZ3JlZW1lbnQgc2hhbGwgcmVtYWluIGluIGVmZmVjdC4KKyAgICAgICAgIDUuIEVudGlyZSBBZ3JlZW1lbnQuIFRoaXMgQWdyZWVtZW50IGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUKKyAgICAgICAgICAgIGFncmVlbWVudCBiZXR3ZWVuIHRoZSBwYXJ0aWVzLgorICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWEhJQklUIDEKKyAgICAgICAgICBVTklDT0RFLCBJTkMuIExJQ0VOU0UgQUdSRUVNRU5UIC0gREFUQSBGSUxFUyBBTkQgU09GVFdBUkUKKworICAgICBVbmljb2RlIERhdGEgRmlsZXMgaW5jbHVkZSBhbGwgZGF0YSBmaWxlcyB1bmRlciB0aGUgZGlyZWN0b3JpZXMKKyAgICAgWzIwXWh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLywKKyAgICAgWzIxXWh0dHA6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy8sIGFuZAorICAgICBbMjJdaHR0cDovL3d3dy51bmljb2RlLm9yZy9jbGRyL2RhdGEvIC4gVW5pY29kZSBTb2Z0d2FyZSBpbmNsdWRlcworICAgICBhbnkgc291cmNlIGNvZGUgcHVibGlzaGVkIGluIHRoZSBVbmljb2RlIFN0YW5kYXJkIG9yIHVuZGVyIHRoZQorICAgICBkaXJlY3RvcmllcyBbMjNdaHR0cDovL3d3dy51bmljb2RlLm9yZy9QdWJsaWMvLAorICAgICBbMjRdaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzLywgYW5kCisgICAgIFsyNV1odHRwOi8vd3d3LnVuaWNvZGUub3JnL2NsZHIvZGF0YS8uCisKKyAgICAgTk9USUNFIFRPIFVTRVI6IENhcmVmdWxseSByZWFkIHRoZSBmb2xsb3dpbmcgbGVnYWwgYWdyZWVtZW50LiBCWQorICAgICBET1dOTE9BRElORywgSU5TVEFMTElORywgQ09QWUlORyBPUiBPVEhFUldJU0UgVVNJTkcgVU5JQ09ERSBJTkMuJ1MKKyAgICAgREFUQSBGSUxFUyAoIkRBVEEgRklMRVMiKSwgQU5EL09SIFNPRlRXQVJFICgiU09GVFdBUkUiKSwgWU9VCisgICAgIFVORVFVSVZPQ0FMTFkgQUNDRVBULCBBTkQgQUdSRUUgVE8gQkUgQk9VTkQgQlksIEFMTCBPRiBUSEUgVEVSTVMgQU5ECisgICAgIENPTkRJVElPTlMgT0YgVEhJUyBBR1JFRU1FTlQuIElGIFlPVSBETyBOT1QgQUdSRUUsIERPIE5PVCBET1dOTE9BRCwKKyAgICAgSU5TVEFMTCwgQ09QWSwgRElTVFJJQlVURSBPUiBVU0UgVEhFIERBVEEgRklMRVMgT1IgU09GVFdBUkUuCisKKyAgICAgQ09QWVJJR0hUIEFORCBQRVJNSVNTSU9OIE5PVElDRQorCisgICAgIENvcHlyaWdodCDCqSAxOTkxLTIwMDcgVW5pY29kZSwgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLiBEaXN0cmlidXRlZAorICAgICB1bmRlciB0aGUgVGVybXMgb2YgVXNlIGluIFsyNl1odHRwOi8vd3d3LnVuaWNvZGUub3JnL2NvcHlyaWdodC5odG1sLgorCisgICAgIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uCisgICAgIG9idGFpbmluZyBhIGNvcHkgb2YgdGhlIFVuaWNvZGUgZGF0YSBmaWxlcyBhbmQgYW55IGFzc29jaWF0ZWQKKyAgICAgZG9jdW1lbnRhdGlvbiAodGhlICJEYXRhIEZpbGVzIikgb3IgVW5pY29kZSBzb2Z0d2FyZSBhbmQgYW55CisgICAgIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiAodGhlICJTb2Z0d2FyZSIpIHRvIGRlYWwgaW4gdGhlIERhdGEgRmlsZXMKKyAgICAgb3IgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiB0aGUKKyAgICAgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgYW5kL29yIHNlbGwKKyAgICAgY29waWVzIG9mIHRoZSBEYXRhIEZpbGVzIG9yIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbQorICAgICB0aGUgRGF0YSBGaWxlcyBvciBTb2Z0d2FyZSBhcmUgZnVybmlzaGVkIHRvIGRvIHNvLCBwcm92aWRlZCB0aGF0IChhKQorICAgICB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZShzKSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgd2l0aAorICAgICBhbGwgY29waWVzIG9mIHRoZSBEYXRhIEZpbGVzIG9yIFNvZnR3YXJlLCAoYikgYm90aCB0aGUgYWJvdmUKKyAgICAgY29weXJpZ2h0IG5vdGljZShzKSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYXNzb2NpYXRlZAorICAgICBkb2N1bWVudGF0aW9uLCBhbmQgKGMpIHRoZXJlIGlzIGNsZWFyIG5vdGljZSBpbiBlYWNoIG1vZGlmaWVkIERhdGEKKyAgICAgRmlsZSBvciBpbiB0aGUgU29mdHdhcmUgYXMgd2VsbCBhcyBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhc3NvY2lhdGVkCisgICAgIHdpdGggdGhlIERhdGEgRmlsZShzKSBvciBTb2Z0d2FyZSB0aGF0IHRoZSBkYXRhIG9yIHNvZnR3YXJlIGhhcyBiZWVuCisgICAgIG1vZGlmaWVkLgorCisgICAgIFRIRSBEQVRBIEZJTEVTIEFORCBTT0ZUV0FSRSBBUkUgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWQorICAgICBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRQorICAgICBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5ECisgICAgIE5PTklORlJJTkdFTUVOVCBPRiBUSElSRCBQQVJUWSBSSUdIVFMuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICAgICBDT1BZUklHSFQgSE9MREVSIE9SIEhPTERFUlMgSU5DTFVERUQgSU4gVEhJUyBOT1RJQ0UgQkUgTElBQkxFIEZPUgorICAgICBBTlkgQ0xBSU0sIE9SIEFOWSBTUEVDSUFMIElORElSRUNUIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgT1IgQU5ZCisgICAgIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLAorICAgICBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUworICAgICBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFCisgICAgIE9GIFRIRSBEQVRBIEZJTEVTIE9SIFNPRlRXQVJFLgorCisgICAgIEV4Y2VwdCBhcyBjb250YWluZWQgaW4gdGhpcyBub3RpY2UsIHRoZSBuYW1lIG9mIGEgY29weXJpZ2h0IGhvbGRlcgorICAgICBzaGFsbCBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvciBvdGhlcndpc2UgdG8gcHJvbW90ZSB0aGUgc2FsZSwKKyAgICAgdXNlIG9yIG90aGVyIGRlYWxpbmdzIGluIHRoZXNlIERhdGEgRmlsZXMgb3IgU29mdHdhcmUgd2l0aG91dCBwcmlvcgorICAgICB3cml0dGVuIGF1dGhvcml6YXRpb24gb2YgdGhlIGNvcHlyaWdodCBob2xkZXIuCisgICAgICAgICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKworICAgICBVbmljb2RlIGFuZCB0aGUgVW5pY29kZSBsb2dvIGFyZSB0cmFkZW1hcmtzIG9mIFVuaWNvZGUsIEluYy4sIGFuZAorICAgICBtYXkgYmUgcmVnaXN0ZXJlZCBpbiBzb21lIGp1cmlzZGljdGlvbnMuIEFsbCBvdGhlciB0cmFkZW1hcmtzIGFuZAorICAgICByZWdpc3RlcmVkIHRyYWRlbWFya3MgbWVudGlvbmVkIGhlcmVpbiBhcmUgdGhlIHByb3BlcnR5IG9mIHRoZWlyCisgICAgIHJlc3BlY3RpdmUgb3duZXJzLgorICAgICAgICAgICAgICAgICAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKworICAgICAgICAgICAgICAgICAgWzI3XUFjY2VzcyB0byBDb3B5cmlnaHQgYW5kIHRlcm1zIG9mIHVzZQorCitSZWZlcmVuY2VzCisKKyAgIDEuIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvCisgICAyLiBodHRwOi8vd3d3LnVuaWNvZGUub3JnL2NvcHlyaWdodC5odG1sCisgICAzLiBodHRwOi8vd3d3LnVuaWNvZGUub3JnLworICAgNC4gaHR0cDovL3d3dy51bmljb2RlLm9yZy9zaXRlbWFwLworICAgNS4gaHR0cDovL3d3dy51bmljb2RlLm9yZy9zZWFyY2gKKyAgIDYuIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvY29weXJpZ2h0Lmh0bWwjMQorICAgNy4gaHR0cDovL3d3dy51bmljb2RlLm9yZy9jb3B5cmlnaHQuaHRtbCMyCisgICA4LiBodHRwOi8vd3d3LnVuaWNvZGUub3JnL2NvcHlyaWdodC5odG1sIzMKKyAgIDkuIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvY29weXJpZ2h0Lmh0bWwjNAorICAxMC4gaHR0cDovL3d3dy51bmljb2RlLm9yZy9jb3B5cmlnaHQuaHRtbCM1CisgIDExLiBodHRwOi8vd3d3LnVuaWNvZGUub3JnL2NvcHlyaWdodC5odG1sIzcKKyAgMTIuIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvY29weXJpZ2h0Lmh0bWwjRXhoaWJpdDEKKyAgMTMuIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvcG9saWNpZXMvbG9nb19wb2xpY3kuaHRtbAorICAxNC4gaHR0cDovL3d3dy51bmljb2RlLm9yZy9wb2xpY2llcy9wb2xpY2llcy5odG1sCisgIDE1LiBodHRwOi8vd3d3LnVuaWNvZGUub3JnL3BvbGljaWVzL3ByaXZhY3lfcG9saWN5Lmh0bWwKKyAgMTYuIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvcG9saWNpZXMvbG9nb19wb2xpY3kuaHRtbAorICAxNy4gaHR0cDovL3d3dy51bmljb2RlLm9yZy9jb3B5cmlnaHQuaHRtbCNFeGhpYml0MQorICAxOC4gaHR0cDovL3d3dy51bmljb2RlLm9yZy92ZXJzaW9ucy9Vbmljb2RlNS4wLjAvVGl0bGUucGRmCisgIDE5LiBodHRwOi8vd3d3LnVuaWNvZGUub3JnL2NvbnRhY3RzLmh0bWwKKyAgMjAuIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvUHVibGljLworICAyMS4gaHR0cDovL3d3dy51bmljb2RlLm9yZy9yZXBvcnRzLworICAyMi4gaHR0cDovL3d3dy51bmljb2RlLm9yZy9jbGRyL2RhdGEvCisgIDIzLiBodHRwOi8vd3d3LnVuaWNvZGUub3JnL1B1YmxpYy8KKyAgMjQuIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvcmVwb3J0cy8KKyAgMjUuIGh0dHA6Ly93d3cudW5pY29kZS5vcmcvY2xkci9kYXRhLworICAyNi4gaHR0cDovL3d3dy51bmljb2RlLm9yZy9jb3B5cmlnaHQuaHRtbAorICAyNy4gaHR0cDovL3d3dy51bmljb2RlLm9yZy9jb3B5cmlnaHQuaHRtbApkaWZmIC0tZ2l0IGEvbGljZW5zZXMvdXQyMDAzIGIvbGljZW5zZXMvdXQyMDAzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlNWY1NDcKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy91dDIwMDMKQEAgLTAsMCArMSwxMjcgQEAKK0VORC1VU0VSIExJQ0VOU0UgQUdSRUVNRU5UCisgCisgUExFQVNFIFJFQUQgQ0FSRUZVTExZLiAgQlkgVVNJTkcgT1IgSU5TVEFMTElORyBUSElTIFNPRlRXQVJFLAorIE9SIEJZIFBMQUNJTkcgT1IgQ09QWUlORyBUSElTIFNPRlRXQVJFIE9OIFlPVVIgQ09NUFVURVIKKyBIQVJEV0FSRSwgQ09NUFVURVIgUkFNIE9SIE9USEVSIFNUT1JBR0UgTUVESVVNLCBZT1UgQVJFCisgQUdSRUVJTkcgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GIFRISVMgTElDRU5TRS4KKyBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVNFIFRFUk1TLCBQUk9NUFRMWSBESVNDT05USU5VRSBUSEUKKyBJTlNUQUxMQVRJT04gUFJPQ0VTUyBBTkQgQ0VBU0UgQUxMIFVTRSBPRiBUSElTIFNPRlRXQVJFLgorIAorIDEuICBUaGFua3MuICBDb25ncmF0dWxhdGlvbnMgYW5kIHRoYW5rIHlvdSBmb3IgbGljZW5zaW5nIG91ciAKKyBzb2Z0d2FyZS4gIFdlJ3JlIHNvcnJ5IHRvIGNyYW1wIHlvdXIgc3R5bGUsIGJ1dCBvdXQgbGF3eWVycyB0ZWxsIAorIHVzIHRoYXQgaWYgd2Ugd2FudCB0byBrZWVwIGNvbnRyb2wgYW5kIG93bmVyc2hpcCBvZiB0aGUgY29vbCAKKyBzdHVmZiB3ZSdyZSBkZXZlbG9waW5nLCB3ZSBoYXZlIHRvIG1ha2Ugc3VyZSB5b3UgdW5kZXJzdGFuZCBhbmQgCisgYWdyZWUgdGhhdCB5b3UgYXJlIGp1c3QgZ2V0dGluZyBhIHJpZ2h0IHRvIHVzZSBpdCBhbmQgdGhhdCB0aGF0IAorIHJpZ2h0IGlzIGxpbWl0ZWQgaW4gY2VydGFpbiB3YXlzLiAgU28gaGVyZSdzIHdoYXQgZm9sbG93cyBpcyB3aGF0IAorIHlvdSBuZWVkIHRvIGtub3cgYW5kIGFncmVlIHRvLiAgCisgCisgMi4gIExpY2Vuc2UuICBUaGUgc2VydmVyLW9ubHkgdmVyc2lvbiBvZiB0aGUgc29mdHdhcmUgYWNjb21wYW55aW5nIAorIHRoaXMgbGljZW5zZSBhbmQgdGhlIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbiAodGhlICJTZXJ2ZXItT25seSAKKyBTb2Z0d2FyZSIpIGFyZSBsaWNlbnNlZCBmb3IgeW91ciB1c2UgYW5kIGdhbWluZyBlbmpveW1lbnQsIAorIHN1YmplY3QgdG8gdGVybXMgYW5kIGxpbWl0YXRpb25zIGluIHRoaXMgbGljZW5zZSBhZ3JlZW1lbnQuICBUaGlzIAorIGlzIG5vdCBhIGZ1bGwgZmxlZGdlZCB2ZXJzaW9uIG9mIHRoZSBzb2Z0d2FyZTsgaXQgaXMgYSBTZXJ2ZXItCisgT25seSB2ZXJzaW9uLgkgICAgCisgCisgMy4gIFVzZSBSZXN0cmljdGlvbnMuCVdlIHdhbnQgeW91IHRvIGVuam95IG91ciBwcm9kdWN0cyBmb3IgeWVhcnMgdG8gCisgY29tZSwgYW5kIHdlIHdhbnQgdG8gYmUgYWJsZSB0byBjb250aW51ZSB0byBzZW5kIHlvdSBhd2Vzb21lIAorIGdhbWVzLCBzbyB5b3UgbmVlZCB0byBiZSBhd2FyZSB0aGF0IHRoZXJlIGFyZSBzb21lIHRoaW5ncyB5b3UgCisgY2Fubm90IGRvIHdpdGggdGhlIFNlcnZlci1Pbmx5IFNvZnR3YXJlLiAgVGhlIFNlcnZlci1Pbmx5IAorIFNvZnR3YXJlIGNvbnRhaW5zIGNvcHlyaWdodGVkIG1hdGVyaWFsLCB0cmFkZSBzZWNyZXRzIGFuZCBvdGhlciAKKyBwcm9wcmlldGFyeSBtYXRlcmlhbC4JWW91IG1heSBub3QgZGVjb21waWxlLCBtb2RpZnksIHJldmVyc2UgCisgZW5naW5lZXIsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgU2VydmVyLU9ubHkgCisgU29mdHdhcmUsIG9yIGRpc2Fzc2VtYmxlIHRoZSBTZXJ2ZXItT25seSBTb2Z0d2FyZS4gIFlvdSBtYXkgbm90IAorIHJlbnQsIHNlbGwsIGxlYXNlLCBiYXJ0ZXIsIG9yIHN1YmxpY2Vuc2UgdGhlIFNlcnZlci1Pbmx5IAorIFNvZnR3YXJlLiAgWW91IG1heSBub3QgZGVsZXRlIHRoZSBjb3B5cmlnaHQgbm90aWNlcyBvciBhbnkgb3RoZXIgCisgcHJvcHJpZXRhcnkgbGVnZW5kcyBvbiB0aGUgb3JpZ2luYWwgY29weSBvZiB0aGUgU2VydmVyLU9ubHkgCisgU29mdHdhcmUuICBZb3UgbWF5IG5vdCBvZmZlciB0aGUgU2VydmVyLU9ubHkgU29mdHdhcmUgb24gYSAKKyBwYXktcGVyLXBsYXkgYmFzaXMgb3Igb3RoZXJ3aXNlIGNvbW1lcmNpYWxseSBleHBsb2l0IHRoZSBTZXJ2ZXItCisgT25seSBTb2Z0d2FyZSBvciB1c2UgdGhlIFNlcnZlci1Pbmx5IFNvZnR3YXJlIGZvciBhbnkgY29tbWVyY2lhbCAKKyBwdXJwb3NlLiAgWW91IG1heSwgaG93ZXZlciwgZXhjaGFuZ2UgdGhlIFNlcnZlci1Pbmx5IFNvZnR3YXJlIGF0IAorIG5vIGNoYXJnZSBhbW9uZyBvdGhlciBlbmQtdXNlcnMgYW5kIGRpc3RyaWJ1dGUgdGhlbSB0byBvdGhlcnMgCisgb3ZlciB0aGUgSW50ZXJuZXQsIG9uIG1hZ2F6aW5lIGNvdmVyIGRpc2tzLCBvciBvdGhlcndpc2UgZm9yIAorIGZyZWUuCVlvdSBtYXkgbm90IHNoaXAgb3IgZXhwb3J0IHRoZSBTZXJ2ZXItT25seSBTb2Z0d2FyZSB0byBhbnkgCisgY291bnRyeSBvdGhlciB0aGFuIHdoZXJlIHlvdSBib3VnaHQgaXQsIGluIHZpb2xhdGlvbiBvZiB0aGUgVS5TLiAKKyBFeHBvcnQgQWRtaW5pc3RyYXRpb24gQWN0IChvciBhbnkgb3RoZXIgbGF3IGdvdmVybmluZyBzdWNoIAorIG1hdHRlcnMpIGFuZCB5b3Ugd2lsbCBub3QgdXRpbGl6ZSBhbmQgd2lsbCBub3QgYXV0aG9yaXplIGFueW9uZSAKKyB0byB1dGlsaXplIHRoZSBTZXJ2ZXItT25seSBTb2Z0d2FyZSBpbiB2aW9sYXRpb24gb2YgYW55IAorIGFwcGxpY2FibGUgbGF3LiAgVGhlIFNlcnZlci1Pbmx5IFNvZnR3YXJlIG1heSBub3QgYmUgZG93bmxvYWRlZCAKKyBvciBvdGhlcndpc2UgZXhwb3J0ZWQgaW50byAob3IgdG8gYSBuYXRpb25hbCBvciByZXNpZGVudCBvZikgYW55IAorIGNvdW50cnkgdG8gd2hpY2ggdGhlIFUuUy4gaGFzIGVtYmFyZ29lZCBnb29kcyBvciB0byBhbnlvbmUgb3IgCisgaW50byBhbnkgY291bnRyeSB3aG8vd2hpY2ggYXJlIHByb2hpYml0ZWQgYnkgYXBwbGljYWJsZSBsYXcsIGZyb20gCisgcmVjZWl2aW5nIGl0LgorIAorIDQuICBUZXJtaW5hdGlvbi4gIFRoaXMgbGljZW5zZSBpcyBlZmZlY3RpdmUgdW50aWwgb25lIG9mIHVzIHRlcm1pbmF0ZSAKKyBpdC4gIFlvdSBtYXkgdGVybWluYXRlIHRoaXMgbGljZW5zZSBhdCBhbnkgdGltZSBieSBkZXN0cm95aW5nIHRoZSAKKyBTZXJ2ZXItT25seSBTb2Z0d2FyZSBhbmQgcmVsYXRlZCBkb2N1bWVudGF0aW9uLiAgSW4gdGhlIHVubGlrZWx5IAorIGV2ZW50IHRoYXQgeW91IGFyZSBuYXVnaHR5IGFuZCBmYWlsIHRvIGNvbXBseSB3aXRoIGFueSBwcm92aXNpb24gCisgb2YgdGhpcyBsaWNlbnNlLCB0aGlzIGxpY2Vuc2Ugd2lsbCB0ZXJtaW5hdGUgaW1tZWRpYXRlbHkgd2l0aG91dCAKKyBub3RpY2UgZnJvbSB1cy4gIFVwb24gdGVybWluYXRpb24sIHlvdSBtdXN0IGRlc3Ryb3kgdGhlIFNlcnZlci0KKyBPbmx5IFNvZnR3YXJlIGFuZCByZWxhdGVkIGRvY3VtZW50YXRpb24uICBQbGVhc2UgZG9uJ3Qgd2FpdCBmb3IgCisgdXMgdG8gY29tZSBhZnRlciB5b3U7IGl0IHdvdWxkIG5vdCBiZSBwbGVhc2FudCBmb3IgZWl0aGVyIG9mIHVzLiAgCisgSWYgd2UgZG8gaGF2ZSB0byBjb21lIGFmdGVyIHlvdSwgd2UncmUgZ29pbmcgdG8gZXhwZWN0IHlvdSB0byBwYXkgCisgdXMgZm9yIG91ciB0cm91YmxlcywgaW5jbHVkaW5nIHRoZSBjb3N0IG9mIG91ciBsYXd5ZXJzLgorIAorIDUuICBEaXNjbGFpbWVyIG9mIFdhcnJhbnR5IG9uIFNvZnR3YXJlLiAgWW91IGFyZSBhd2FyZSBhbmQgYWdyZWUgdGhhdCAKKyB1c2Ugb2YgdGhlIFNlcnZlci1Pbmx5IFNvZnR3YXJlIGFuZCB0aGUgbWVkaWEgb24gd2hpY2ggaXQgaXMgCisgcmVjb3JkZWQgYXQgeW91ciBzb2xlIHJpc2suICBUaGUgU2VydmVyLU9ubHkgU29mdHdhcmUsIHJlbGF0ZWQgCisgZG9jdW1lbnRhdGlvbiBhbmQgdGhlIG1lZGlhIGFyZSBwcm92aWRlZCAiQVMgSVMiLiAgSU5GT0dSQU1FUyAKKyAoT1VSIFBVQkxJU0hFUikgQU5EIEVQSUMgR0FNRVMsIElOQy4gKCJFUElDIikgRVhQUkVTU0xZIERJU0NMQUlNIAorIEFMTCBPVEhFUiBXQVJSQU5USUVTLiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIAorIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIAorIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFdFIERPIE5PVCBXQVJSQU5UIFRIQVQgVEhFIEZVTkNUSU9OUyAKKyBDT05UQUlORUQgSU4gVEhFIFNFUlZFUi1PTkxZIFNPRlRXQVJFIFdJTEwgTUVFVCBZT1VSIAorIFJFUVVJUkVNRU5UUy4JTk8gT1JBTCBPUiBXUklUVEVOIElORk9STUFUSU9OIE9SIEFEVklDRSBHSVZFTiBCWSAKKyBVUyBPUiBBTlkgT0YgT1VSIEFVVEhPUklaRUQgUkVQUkVTRU5UQVRJVkVTIFNIQUxMIENSRUFURSBBIAorIFdBUlJBTlRZIE9SIElOIEFOWSBXQVkgSU5DUkVBU0UgVEhFIFNDT1BFIE9GIFRISVMgV0FSUkFOVFkuICBTT01FIAorIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT0YgSU1QTElFRCBXQVJSQU5USUVTLCAKKyBTMCBUSEUgQUJPVkUgRVhDTFVTSU9OUyBNQVkgTk9UIEFQUExZIFRPIFlPVS4KKyAKKyA2LiAgTGltaXRhdGlvbiBvZiBMaWFiaWxpdHkuICBVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTLCBJTkNMVURJTkcgCisgV0lUSE9VVCBMSU1JVEFUSU9OLCBORUdMSUdFTkNFLCBTSEFMTCBJTkZPR1JBTUVTLCBFUElDIE9SIEFOWSBPRiAKKyBUSEVJUiBSRVNQRUNUSVZFIE9GRklDRVJTLCBFTVBMT1lFRVMsIERJUkVDVE9SUywgQUdFTlRTLCAKKyBMSUNFTlNFRVMsIFNVQkxJQ0VOU0VFIE9SIEFTU0lHTlMgQkUgTElBQkxFIEZPUiBBTlkgSU5DSURFTlRBTCwgCisgU1BFQ0lBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgVEhBVCBSRVNVTFQgRlJPTSBUSEUgVVNFIE9SIAorIElOQUJJTElUWSBUTyBVU0UgVEhFIFNFUlZFUi1PTkxZIFNPRlRXQVJFIE9SIFJFTEFURUQgCisgRE9DVU1FTlRBVElPTiwgRVZFTiBJRiBTVUNIIFBBUlRJRVMgSEFWRSBCRUVOIEFEVklTRUQgT0YgVEhFIAorIFBPU1NJQklMSVRZIE9GIFRIT1NFIERBTUFHRVMuCVNPTUUgSlVSSVNESUNUSU9OUyBETyBOT1QgQUxMT1cgCisgVEhFIExJTUlUQVRJT04gT1IgRVhDTFVTSU9OIE9GIExJQUJJTElUWSBGT1IgSU5DSURFTlRBTCBPUiAKKyBDT05TRVFVRU5USUFMIERBTUFHRVMgU08gVEhFIEFCT1ZFIExJTUlUQVRJT04gT1IgRVhDTFVTSU9OIE1BWSAKKyBOT1QgQVBQTFkgVE8gWU9VLiAgSW4gbm8gZXZlbnQgc2hhbGwgb3VyIHRvdGFsIGxpYWJpbGl0eSB0byB5b3UgCisgZm9yIGFsbCBkYW1hZ2VzLCBsb3NzZXMsIGFuZCBjYXVzZXMgb2YgYWN0aW9uICh3aGV0aGVyIGluIAorIGNvbnRyYWN0LCB0b3J0IG9yIG90aGVyd2lzZSkgZXhjZWVkIHRoZSBhbW91bnQgcGFpZCBieSB5b3UgZm9yIAorIHRoZSBTb2Z0d2FyZS4KKyAKKyA3LiAgQ29udHJvbGxpbmcgTGF3IGFuZCBTZXZlcmFiaWxpdHkuCVRoaXMgbGljZW5zZSBpcyBnb3Zlcm5lZCBieSAKKyBhbmQgY29uc3RydWVkIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgTm9ydGggCisgQ2Fyb2xpbmEsIFVTQS4gIEV4Y2x1c2l2ZSB2ZW51ZSBmb3IgYWxsIGxpdGlnYXRpb24gc2hhbGwgYmUgaW4gCisgV2FrZSBDb3VudHksIE5vcnRoIENhcm9saW5hLiAgSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIGxpY2Vuc2UgaXMgCisgdW5lbmZvcmNlYWJsZSwgdGhlIHJlc3Qgb2YgaXQgc2hhbGwgcmVtYWluIGluIGVmZmVjdC4KKyAKKyA4LiAgQ29tcGxldGUgQWdyZWVtZW50LiAgVGhpcyBsaWNlbnNlIGNvbnN0aXR1dGVzIHRoZSBlbnRpcmUgCisgYWdyZWVtZW50IGJldHdlZW4gdGhlIHBhcnRpZXMgd2l0aCByZXNwZWN0IHRvIHRoZSB1c2Ugb2YgdGhlIAorIFNlcnZlci1Pbmx5IFNvZnR3YXJlIGFuZCB0aGUgcmVsYXRlZCBkb2N1bWVudGF0aW9uLiAgSG93ZXZlciwgCisgSW5mb2dyYW1lcyBhbmQgRXBpYyByZXNlcnZlIHRoZSByaWdodCB0byBtb2RpZnkgdGhlIHRlcm1zIG9mIHRoaXMgCisgbGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZSBhbmQgd2lsbCBwb3N0IG5vdGljZSBvZiBtYXRlcmlhbCAKKyBjaGFuZ2VzIHNvbWV3aGVyZSB3aXRoaW4gd3d3LmVwaWNnYW1lcy5jb20uICAKKyAKKyA5LiAgQ29weXJpZ2h0LiAgVGhlIFNlcnZlci1Pbmx5IFNvZnR3YXJlIGFuZCBhbGwgY29weXJpZ2h0cywgCisgdHJhZGVtYXJrcyBhbmQgYWxsIG90aGVyIGNvbmNlaXZhYmxlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgCisgcmVsYXRlZCB0byB0aGUgU2VydmVyLU9ubHkgU29mdHdhcmUgYXJlIG93bmVkIGJ5IEluZm9ncmFtZXMsIEVwaWMgCisgb3Igc3VjaCBwYXJ0aWVzJyBsaWNlbnNvcnMgYW5kIGFyZSBwcm90ZWN0ZWQgYnkgVW5pdGVkIFN0YXRlcyAKKyBjb3B5cmlnaHRzIGxhd3MsIGludGVybmF0aW9uYWwgdHJlYXR5IHByb3Zpc2lvbnMsIGFuIGFybXkgb2YgCisgY2xvbmVzLCBhbmQgYWxsIGFwcGxpY2FibGUgbGF3LCBzdWNoIGFzIHRoZSBMYW5oYW0gQWN0LiAgWW91IG11c3QgCisgdHJlYXQgdGhlIFNlcnZlci1Pbmx5IFNvZnR3YXJlIGxpa2UgYW55IG90aGVyIGNvcHlyaWdodGVkIAorIG1hdGVyaWFsLCBhcyByZXF1aXJlZCBieSAxNyBVLlMuQy4gc2VjdGlvbiAxMDEgZXQgc2VxLiBhbmQgb3RoZXIgCisgYXBwbGljYWJsZSBsYXcuICBUaGlzIHByb2dyYW0geW91J3ZlIGxpY2Vuc2VkIHdhcyBwcm9kdWNlZCAKKyB0aHJvdWdoIHRoZSBlZmZvcnRzIG9mIG1hbnkgcGVvcGxlIHdobyBlYXJuIHRoZWlyIGxpdmVsaWhvb2QgZnJvbSAKKyBpdHMgbGF3ZnVsIHVzZS4gIAorIAorIDEwLiAgRW5qb3ltZW50IFJlcXVpcmVtZW50cy4gIFdlIGFyZSBhd2FyZSB0aGF0IHRoZXJlIGFyZSBydW1ibGluZ3MgCisgYW5kIGdydW1ibGluZ3Mgd2l0aGluIHRoZSBnYW1pbmcgY29tbXVuaXR5IGFib3V0IGhlYXZ5IGhhbmRlZCwgCisgbGVnYWxseSBvbmVyb3VzIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFlvdSBoYXZlIG91ciB3b3JkIHRoYXQgdGhpcyAKKyBvbmUgaXMgYXMgZmFpciBhbmQgZXZlbiBoYW5kZWQgYXMgaXQgZ2V0cyBhbmQsIGFzIHlvdSBoYXZlIHJlYWQgCisgdGhpcyBmYXIsIHlvdSBrbm93IGl0IHRvIGJlIHRydWUuICBOb3csIGJlIGdvbmUgZnJvbSB0aGlzIHNjcmVlbiAKKyBhbmQgZW5qb3kgdGhlIFNlcnZlci1Pbmx5IFNvZnR3YXJlLCBhbmQgaWYgeW91IGxpa2UgaXQsIGJlIHN1cmUgCisgdG8gdGVsbCBhbGwgeW91ciBmcmllbmRzIGhvdyBncmVhdCBpdCBpcyBhbmQgbWFrZSBzdXJlIHRoZXkgdHJ5IAorIGl0LCB0b28hCisKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL3V0MjAwMy1kZW1vIGIvbGljZW5zZXMvdXQyMDAzLWRlbW8KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjllYmYxMgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL3V0MjAwMy1kZW1vCkBAIC0wLDAgKzEsMTE3IEBACitFTkQtVVNFUiBMSUNFTlNFIEFHUkVFTUVOVAorIAorIFBMRUFTRSBSRUFEIENBUkVGVUxMWS4gIEJZIFVTSU5HIE9SIElOU1RBTExJTkcgVEhJUyBTT0ZUV0FSRSwgT1IgQlkKK1BMQUNJTkcgT1IgQ09QWUlORyBUSElTIFNPRlRXQVJFIE9OIFlPVVIgQ09NUFVURVIgSEFSRFdBUkUsIENPTVBVVEVSIFJBTQorT1IgT1RIRVIgU1RPUkFHRSBNRURJVU0sIFlPVSBBUkUgQUdSRUVJTkcgVE8gQkUgQk9VTkQgQlkgVEhFIFRFUk1TIE9GCitUSElTIExJQ0VOU0UuICBJRiBZT1UgRE8gTk9UIEFHUkVFIFRPIFRIRVNFIFRFUk1TLCBQUk9NUFRMWSBESVNDT05USU5VRQorVEhFIElOU1RBTExBVElPTiBQUk9DRVNTIEFORCBDRUFTRSBBTEwgVVNFIE9GIFRISVMgU09GVFdBUkUuCisgCisgMS4gVGhhbmtzLiAgQ29uZ3JhdHVsYXRpb25zIGFuZCB0aGFuayB5b3UgZm9yIGxpY2Vuc2luZyBvdXIgc29mdHdhcmUuIAorV2UncmUgc29ycnkgdG8gY3JhbXAgeW91ciBzdHlsZSwgYnV0IG91ciBsYXd5ZXJzIHRlbGwgdXMgdGhhdCBpZiB3ZSB3YW50Cit0byBrZWVwIGNvbnRyb2wgYW5kIG93bmVyc2hpcCBvZiB0aGUgY29vbCBzdHVmZiB3ZSdyZSBkZXZlbG9waW5nLCB3ZQoraGF2ZSB0byBtYWtlIHN1cmUgeW91IHVuZGVyc3RhbmQgYW5kIGFncmVlIHRoYXQgeW91IGFyZSBqdXN0IGdldHRpbmcgYQorcmlnaHQgdG8gdXNlIGl0IGFuZCB0aGF0IHRoYXQgcmlnaHQgaXMgbGltaXRlZCBpbiBjZXJ0YWluIHdheXMuICBTbworaGVyZSdzIHdoYXQgZm9sbG93cyBpcyB3aGF0IHlvdSBuZWVkIHRvIGtub3cgYW5kIGFncmVlIHRvLiAgCisgCisgMi4gTGljZW5zZS4gIFRoZSBkZW1vbnN0cmF0aW9uIHZlcnNpb24gb2YgdGhlIHNvZnR3YXJlIGFjY29tcGFueWluZwordGhpcyBsaWNlbnNlIGFuZCB0aGUgcmVsYXRlZCBkb2N1bWVudGF0aW9uICh0aGUgIkRlbW8gU29mdHdhcmUiKSBhcmUKK2xpY2Vuc2VkIGZvciB5b3VyIHVzZSBhbmQgZ2FtaW5nIGVuam95bWVudCwgc3ViamVjdCB0byB0ZXJtcyBhbmQKK2xpbWl0YXRpb25zIGluIHRoaXMgbGljZW5zZSBhZ3JlZW1lbnQuCVRoaXMgaXMgbm90IGEgZnVsbCBmbGVkZ2VkCit2ZXJzaW9uIG9mIHRoZSBzb2Z0d2FyZTsgaXQgaXMgYSBkZW1vbnN0cmF0aW9uIHZlcnNpb24uICAgICAgCisgCisgMy4gVXNlIFJlc3RyaWN0aW9ucy4gIFdlIHdhbnQgeW91IHRvIGVuam95IG91ciBwcm9kdWN0cyBmb3IgeWVhcnMgdG8KK2NvbWUsIGFuZCB3ZSB3YW50IHRvIGJlIGFibGUgdG8gY29udGludWUgdG8gc2VuZCB5b3UgYXdlc29tZSBnYW1lcywgc28KK3lvdSBuZWVkIHRvIGJlIGF3YXJlIHRoYXQgdGhlcmUgYXJlIHNvbWUgdGhpbmdzIHlvdSBjYW5ub3QgZG8gd2l0aCB0aGUKK0RlbW8gU29mdHdhcmUuCVRoZSBEZW1vIFNvZnR3YXJlIGNvbnRhaW5zIGNvcHlyaWdodGVkIG1hdGVyaWFsLCB0cmFkZQorc2VjcmV0cyBhbmQgb3RoZXIgcHJvcHJpZXRhcnkgbWF0ZXJpYWwuICBZb3UgbWF5IG5vdCBkZWNvbXBpbGUsIG1vZGlmeSwKK3JldmVyc2UgZW5naW5lZXIsIHByZXBhcmUgZGVyaXZhdGl2ZSB3b3JrcyBiYXNlZCBvbiB0aGUgRGVtbyBTb2Z0d2FyZSwKK29yIGRpc2Fzc2VtYmxlIHRoZSBEZW1vIFNvZnR3YXJlLiAgWW91IG1heSBub3QgcmVudCwgc2VsbCwgbGVhc2UsCitiYXJ0ZXIsIG9yIHN1YmxpY2Vuc2UgdGhlIERlbW8gU29mdHdhcmUuICBZb3UgbWF5IG5vdCBkZWxldGUgdGhlCitjb3B5cmlnaHQgbm90aWNlcyBvciBhbnkgb3RoZXIgcHJvcHJpZXRhcnkgbGVnZW5kcyBvbiB0aGUgb3JpZ2luYWwgY29weQorb2YgdGhlIERlbW8gU29mdHdhcmUuICBZb3UgbWF5IG5vdCBvZmZlciB0aGUgRGVtbyBTb2Z0d2FyZSBvbiBhCitwYXktcGVyLXBsYXkgYmFzaXMgb3Igb3RoZXJ3aXNlIGNvbW1lcmNpYWxseSBleHBsb2l0IHRoZSBEZW1vIFNvZnR3YXJlCitvciB1c2UgdGhlIERlbW8gU29mdHdhcmUgZm9yIGFueSBjb21tZXJjaWFsIHB1cnBvc2UuICBZb3UgbWF5LCBob3dldmVyLAorZXhjaGFuZ2UgdGhlIERlbW8gU29mdHdhcmUgYXQgbm8gY2hhcmdlIGFtb25nIG90aGVyIGVuZC11c2VycyBhbmQKK2Rpc3RyaWJ1dGUgdGhlbSB0byBvdGhlcnMgb3ZlciB0aGUgSW50ZXJuZXQsIG9uIG1hZ2F6aW5lIGNvdmVyIGRpc2tzLCBvcgorb3RoZXJ3aXNlIGZvciBmcmVlLiAgWW91IG1heSBub3Qgc2hpcCBvciBleHBvcnQgdGhlIERlbW8gU29mdHdhcmUgdG8gYW55Citjb3VudHJ5IG90aGVyIHRoYW4gd2hlcmUgeW91IGJvdWdodCBpdCwgaW4gdmlvbGF0aW9uIG9mIHRoZSBVLlMuIEV4cG9ydAorQWRtaW5pc3RyYXRpb24gQWN0IChvciBhbnkgb3RoZXIgbGF3IGdvdmVybmluZyBzdWNoIG1hdHRlcnMpIGFuZCB5b3UKK3dpbGwgbm90IHV0aWxpemUgYW5kIHdpbGwgbm90IGF1dGhvcml6ZSBhbnlvbmUgdG8gdXRpbGl6ZSB0aGUgRGVtbworU29mdHdhcmUgaW4gdmlvbGF0aW9uIG9mIGFueSBhcHBsaWNhYmxlIGxhdy4gIFRoZSBEZW1vIFNvZnR3YXJlIG1heSBub3QKK2JlIGRvd25sb2FkZWQgb3Igb3RoZXJ3aXNlIGV4cG9ydGVkIGludG8gKG9yIHRvIGEgbmF0aW9uYWwgb3IgcmVzaWRlbnQKK29mKSBhbnkgY291bnRyeSB0byB3aGljaCB0aGUgVS5TLiBoYXMgZW1iYXJnb2VkIGdvb2RzIG9yIHRvIGFueW9uZSBvcgoraW50byBhbnkgY291bnRyeSB3aG8vd2hpY2ggYXJlIHByb2hpYml0ZWQgYnkgYXBwbGljYWJsZSBsYXcsIGZyb20KK3JlY2VpdmluZyBpdC4KKyAKKyA0LiBUZXJtaW5hdGlvbi4gIFRoaXMgbGljZW5zZSBpcyBlZmZlY3RpdmUgdW50aWwgb25lIG9mIHVzIHRlcm1pbmF0ZQoraXQuICBZb3UgbWF5IHRlcm1pbmF0ZSB0aGlzIGxpY2Vuc2UgYXQgYW55IHRpbWUgYnkgZGVzdHJveWluZyB0aGUgRGVtbworU29mdHdhcmUgYW5kIHJlbGF0ZWQgZG9jdW1lbnRhdGlvbi4gIEluIHRoZSB1bmxpa2VseSBldmVudCB0aGF0IHlvdSBhcmUKK25hdWdodHkgYW5kIGZhaWwgdG8gY29tcGx5IHdpdGggYW55IHByb3Zpc2lvbiBvZiB0aGlzIGxpY2Vuc2UsIHRoaXMKK2xpY2Vuc2Ugd2lsbCB0ZXJtaW5hdGUgaW1tZWRpYXRlbHkgd2l0aG91dCBub3RpY2UgZnJvbSB1cy4gIFVwb24KK3Rlcm1pbmF0aW9uLCB5b3UgbXVzdCBkZXN0cm95IHRoZSBEZW1vIFNvZnR3YXJlIGFuZCByZWxhdGVkCitkb2N1bWVudGF0aW9uLglQbGVhc2UgZG9uJ3Qgd2FpdCBmb3IgdXMgdG8gY29tZSBhZnRlciB5b3U7IGl0IHdvdWxkIG5vdAorYmUgcGxlYXNhbnQgZm9yIGVpdGhlciBvZiB1cy4gIElmIHdlIGRvIGhhdmUgdG8gY29tZSBhZnRlciB5b3UsIHdlJ3JlCitnb2luZyB0byBleHBlY3QgeW91IHRvIHBheSB1cyBmb3Igb3VyIHRyb3VibGVzLCBpbmNsdWRpbmcgdGhlIGNvc3Qgb2YKK291ciBsYXd5ZXJzLgorIAorIDUuIERpc2NsYWltZXIgb2YgV2FycmFudHkgb24gU29mdHdhcmUuICBZb3UgYXJlIGF3YXJlIGFuZCBhZ3JlZSB0aGF0Cit1c2Ugb2YgdGhlIERlbW8gU29mdHdhcmUgYW5kIHRoZSBtZWRpYSBvbiB3aGljaCBpdCBpcyByZWNvcmRlZCBhdCB5b3VyCitzb2xlIHJpc2suICBUaGUgRGVtbyBTb2Z0d2FyZSwgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGFuZCB0aGUgbWVkaWEgYXJlCitwcm92aWRlZCAiQVMgSVMiLiAgSU5GT0dSQU1FUyAoT1VSIFBVQkxJU0hFUikgQU5EIEVQSUMgR0FNRVMsIElOQy4KKygiRVBJQyIpIEVYUFJFU1NMWSBESVNDTEFJTSBBTEwgT1RIRVIgV0FSUkFOVElFUy4gRVhQUkVTUyBPUiBJTVBMSUVELAorSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkKK0FORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFdFIERPIE5PVCBXQVJSQU5UIFRIQVQgVEhFCitGVU5DVElPTlMgQ09OVEFJTkVEIElOIFRIRSBERU1PIFNPRlRXQVJFIFdJTEwgTUVFVCBZT1VSIFJFUVVJUkVNRU5UUy4gCitOTyBPUkFMIE9SIFdSSVRURU4gSU5GT1JNQVRJT04gT1IgQURWSUNFIEdJVkVOIEJZIFVTIE9SIEFOWSBPRiBPVVIKK0FVVEhPUklaRUQgUkVQUkVTRU5UQVRJVkVTIFNIQUxMIENSRUFURSBBIFdBUlJBTlRZIE9SIElOIEFOWSBXQVkKK0lOQ1JFQVNFIFRIRSBTQ09QRSBPRiBUSElTIFdBUlJBTlRZLiAgU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVworVEhFIEVYQ0xVU0lPTiBPRiBJTVBMSUVEIFdBUlJBTlRJRVMsIFMwIFRIRSBBQk9WRSBFWENMVVNJT05TIE1BWSBOT1QKK0FQUExZIFRPIFlPVS4KKyAKKyA2LiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4gIFVOREVSIE5PIENJUkNVTVNUQU5DRVMsIElOQ0xVRElORyBXSVRIT1VUCitMSU1JVEFUSU9OLCBORUdMSUdFTkNFLCBTSEFMTCBJTkZPR1JBTUVTLCBFUElDIE9SIEFOWSBPRiBUSEVJUgorUkVTUEVDVElWRSBPRkZJQ0VSUywgRU1QTE9ZRUVTLCBESVJFQ1RPUlMsIEFHRU5UUywgTElDRU5TRUVTLAorU1VCTElDRU5TRUUgT1IgQVNTSUdOUyBCRSBMSUFCTEUgRk9SIEFOWSBJTkNJREVOVEFMLCBTUEVDSUFMIE9SCitDT05TRVFVRU5USUFMIERBTUFHRVMgVEhBVCBSRVNVTFQgRlJPTSBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFCitERU1PIFNPRlRXQVJFIE9SIFJFTEFURUQgRE9DVU1FTlRBVElPTiwgRVZFTiBJRiBTVUNIIFBBUlRJRVMgSEFWRSBCRUVOCitBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBUSE9TRSBEQU1BR0VTLiAgU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVAorQUxMT1cgVEhFIExJTUlUQVRJT04gT1IgRVhDTFVTSU9OIE9GIExJQUJJTElUWSBGT1IgSU5DSURFTlRBTCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIFNPIFRIRSBBQk9WRSBMSU1JVEFUSU9OIE9SIEVYQ0xVU0lPTiBNQVkgTk9UIEFQUExZCitUTyBZT1UuICBJbiBubyBldmVudCBzaGFsbCBvdXIgdG90YWwgbGlhYmlsaXR5IHRvIHlvdSBmb3IgYWxsIGRhbWFnZXMsCitsb3NzZXMsIGFuZCBjYXVzZXMgb2YgYWN0aW9uICh3aGV0aGVyIGluIGNvbnRyYWN0LCB0b3J0IG9yIG90aGVyd2lzZSkKK2V4Y2VlZCB0aGUgYW1vdW50IHBhaWQgYnkgeW91IGZvciB0aGUgU29mdHdhcmUuCisgCisgNy4gQ29udHJvbGxpbmcgTGF3IGFuZCBTZXZlcmFiaWxpdHkuICBUaGlzIGxpY2Vuc2UgaXMgZ292ZXJuZWQgYnkgYW5kCitjb25zdHJ1ZWQgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBOb3J0aCBDYXJvbGluYSwKK1VTQS4gIEV4Y2x1c2l2ZSB2ZW51ZSBmb3IgYWxsIGxpdGlnYXRpb24gc2hhbGwgYmUgaW4gV2FrZSBDb3VudHksIE5vcnRoCitDYXJvbGluYS4gIElmIGFueSBwcm92aXNpb24gb2YgdGhpcyBsaWNlbnNlIGlzIHVuZW5mb3JjZWFibGUsIHRoZSByZXN0CitvZiBpdCBzaGFsbCByZW1haW4gaW4gZWZmZWN0LgorIAorIDguIENvbXBsZXRlIEFncmVlbWVudC4gIFRoaXMgbGljZW5zZSBjb25zdGl0dXRlcyB0aGUgZW50aXJlIGFncmVlbWVudAorYmV0d2VlbiB0aGUgcGFydGllcyB3aXRoIHJlc3BlY3QgdG8gdGhlIHVzZSBvZiB0aGUgRGVtbyBTb2Z0d2FyZSBhbmQgdGhlCityZWxhdGVkIGRvY3VtZW50YXRpb24uCUhvd2V2ZXIsIEluZm9ncmFtZXMgYW5kIEVwaWMgcmVzZXJ2ZSB0aGUgcmlnaHQKK3RvIG1vZGlmeSB0aGUgdGVybXMgb2YgdGhpcyBsaWNlbnNlIGZyb20gdGltZSB0byB0aW1lIGFuZCB3aWxsIHBvc3QKK25vdGljZSBvZiBtYXRlcmlhbCBjaGFuZ2VzIHNvbWV3aGVyZSB3aXRoaW4gd3d3LmVwaWNnYW1lcy5jb20uCQorIAorIDkuIENvcHlyaWdodC4JVGhlIERlbW8gU29mdHdhcmUgYW5kIGFsbCBjb3B5cmlnaHRzLCB0cmFkZW1hcmtzIGFuZCBhbGwKK290aGVyIGNvbmNlaXZhYmxlIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgcmVsYXRlZCB0byB0aGUgRGVtbworU29mdHdhcmUgYXJlIG93bmVkIGJ5IEluZm9ncmFtZXMsIEVwaWMgb3Igc3VjaCBwYXJ0aWVzJyBsaWNlbnNvcnMgYW5kCithcmUgcHJvdGVjdGVkIGJ5IFVuaXRlZCBTdGF0ZXMgY29weXJpZ2h0cyBsYXdzLCBpbnRlcm5hdGlvbmFsIHRyZWF0eQorcHJvdmlzaW9ucywgYW4gYXJteSBvZiBjbG9uZXMsIGFuZCBhbGwgYXBwbGljYWJsZSBsYXcsIHN1Y2ggYXMgdGhlCitMYW5oYW0gQWN0LiAgWW91IG11c3QgdHJlYXQgdGhlIERlbW8gU29mdHdhcmUgbGlrZSBhbnkgb3RoZXIgY29weXJpZ2h0ZWQKK21hdGVyaWFsLCBhcyByZXF1aXJlZCBieSAxNyBVLlMuQy4gc2VjdGlvbiAxMDEgZXQgc2VxLiBhbmQgb3RoZXIKK2FwcGxpY2FibGUgbGF3LiAgVGhpcyBwcm9ncmFtIHlvdSd2ZSBsaWNlbnNlZCB3YXMgcHJvZHVjZWQgdGhyb3VnaCB0aGUKK2VmZm9ydHMgb2YgbWFueSBwZW9wbGUgd2hvIGVhcm4gdGhlaXIgbGl2ZWxpaG9vZCBmcm9tIGl0cyBsYXdmdWwgdXNlLiAKK1RoZXNlIHBlb3BsZSBsaWtlIHRvIGVhdCwgc28gcGxlYXNlIGZlZWwgZnJlZSB0byBtYWtlIGFzIG1hbnkgY29waWVzIG9mCitvbmx5IHRoaXMgRGVtbyBTb2Z0d2FyZSBmb3IgeW91ciBmcmllbmRzIGFuZCBhY3F1YWludGFuY2VzIHRvIGVuam95IGl0CithcyB3ZWxsLi4uLi4uLi4uLi4uYW5kIG1heWJlIHRoZXknbGwgbGljZW5zZSBmdWxsIHZlcnNpb25zIGxpa2Ugd2Uga25vdworeW91IHdpbGwuCisgCisgMTAuIEVuam95bWVudCBSZXF1aXJlbWVudHMuICBXZSBhcmUgYXdhcmUgdGhhdCB0aGVyZSBhcmUgcnVtYmxpbmdzIGFuZAorZ3J1bWJsaW5ncyB3aXRoaW4gdGhlIGdhbWluZyBjb21tdW5pdHkgYWJvdXQgaGVhdnkgaGFuZGVkLCBsZWdhbGx5CitvbmVyb3VzIGxpY2Vuc2UgYWdyZWVtZW50cy4gIFlvdSBoYXZlIG91ciB3b3JkIHRoYXQgdGhpcyBvbmUgaXMgYXMgZmFpcgorYW5kIGV2ZW4gaGFuZGVkIGFzIGl0IGdldHMgYW5kLCBhcyB5b3UgaGF2ZSByZWFkIHRoaXMgZmFyLCB5b3Uga25vdyBpdAordG8gYmUgdHJ1ZS4gIE5vdywgYmUgZ29uZSBmcm9tIHRoaXMgc2NyZWVuIGFuZCBlbmpveSB0aGUgRGVtbyBTb2Z0d2FyZSwKK2FuZCBpZiB5b3UgbGlrZSBpdCwgYmUgc3VyZSB0byB0ZWxsIGFsbCB5b3VyIGZyaWVuZHMgaG93IGdyZWF0IGl0IGlzIGFuZAorbWFrZSBzdXJlIHRoZXkgdHJ5IGl0LCB0b28hCisgCmRpZmYgLS1naXQgYS9saWNlbnNlcy92ZW50cmlsbyBiL2xpY2Vuc2VzL3ZlbnRyaWxvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NDI2NzEKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy92ZW50cmlsbwpAQCAtMCwwICsxLDEyOCBAQAorICAgICAgICAgICAgICAgQ29tcHV0ZXIgU29mdHdhcmUgTGljZW5zZSBBZ3JlZW1lbnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIEZsYWdzaGlwIEluZHVzdHJpZXMsIEluYy4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgUC5PLiBCb3ggMTk4CisgICAgICAgICAgICAgICAgICAgIE1hcnl2aWxsZSwgSWxsaW5vaXMgNjIwNjIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCitUaGlzIGlzIGEgY29tcHV0ZXIgc29mdHdhcmUgbGljZW5zZSBhZ3JlZW1lbnQgZW50ZXJlZCBpbnRvCitiZXR3ZWVuIEZsYWdzaGlwIEluZHVzdHJpZXMsIEluYy4gKCJGbGFnc2hpcCIpIGFuZAorX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18gKCJVc2VyIikgZm9yIHRoZSB1c2Ugb2YgVmVudHJpbG8KKzIuMCBTb2Z0d2FyZSwgYW4gaW50ZXJuZXQtYmFzZWQgY29tbXVuaWNhdGlvbiBzb2Z0d2FyZS4gIEZsYWdzaGlwCitoZXJlYnkgZ3JhbnRzIHRvIHRoZSBVc2VyIGEgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlIHRvIHVzZSB0aGUKK3NvZnR3YXJlIGluIGFjY29yZGFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBhZ3JlZW1lbnQuICBBcworY29uc2lkZXJhdGlvbiBmb3Igc2FpZCBsaWNlbnNlLCB0aGUgVXNlciBhZ3JlZXMgYXMgZm9sbG93czoKKworMS4gICBSZXNlcnZhdGlvbiBvZiByaWdodHMuICBBbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCB0bwordGhlIFVzZXIgYnkgdGhpcyBMaWNlbnNlIEFncmVlbWVudCBhcmUgcmVzZXJ2ZWQgYnkgRmxhZ3NoaXAuCisKKzIuICAgRGlzYXNzZW1ibHkuICBUaGUgVXNlciB1bmRlcnN0YW5kcyBhbmQgYWdyZWVzIHRoYXQgaXQgc2hhbGwKK25vdCBjb3B5IHRoZSBwcm9ncmFtIGludG8gYW55IG1hY2hpbmUtcmVhZGFibGUgb3IgcHJpbnRlZCBmb3JtLAorZXhjZXB0IGZvciBhcmNoaXZhbCBvciBmb3IgYmFjay11cCBwdXJwb3NlZCBpbiBhY2NvcmRhbmNlIHdpdGgKK3RoZSB0ZXJtcyBvZiB0aGlzIEFncmVlbWVudC4gIFRoZSBVc2VyIHdpbGwgbm90IHJldmVyc2UgZW5naW5lZXIsCitkZWNvbXBpbGUsIGRpc2Fzc2VtYmxlLCB0cmFuc2xhdGUsIG1lcmdlIGludG8gYW5vdGhlciBjb21wdXRlcgorcHJvZ3JhbSBvciBvdGhlcndpc2UgbW9kaWZ5IHRoZSBzb2Z0d2FyZS4KKworMy4gICBUcmFuc2ZlciBvZiBzb2Z0d2FyZS4gIFRoZSBVc2VyIHdpbGwgbm90IHN1YmxpY2Vuc2UsIGFzc2lnbiwKK29yIHRyYW5zZmVyIHRoZSBsaWNlbnNlLCB0aGUgc29mdHdhcmUsIG9yIGFueSByaWdodHMgdW5kZXIgdGhpcworQWdyZWVtZW50IHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBGbGFnc2hpcC4KKworNC4gICBOb24tZGlzY2xvc3VyZS4gIFRoZSBVc2VyLCBpdHMgZW1wbG95ZWVzIGFuZCBhZ2VudHMgd2lsbAoraG9sZCB0aGUgc29mdHdhcmUgaW4gdHJ1c3QgYW5kIGNvbmZpZGVuY2UgYW5kIHNoYWxsIG5vdCBkaXNjbG9zZQordGhlIHNvdXJjZSBjb2RlIG9yIG90aGVyIGNvbmZpZGVudGlhbCBpbmZvcm1hdGlvbiByZWNlaXZlZAordGhyb3VnaCB1c2Ugb2YgdGhlIHNvZnR3YXJlLgorCis1LiAgIEZlZXMuICBBIGNvcnBvcmF0aW9uIG9yIGhvbWUgdXNlciBtYXkgdXNlIHRoZSBzb2Z0d2FyZSB0bworaG9zdCBpdHMgb3duIHNlcnZlciwgd2l0aG91dCBhIGZlZSwgcHJvdmlkZWQgaXQgZG9lcyBub3QgY2hhcmdlCitmb3IgaXRzIHVzZSBkaXJlY3RseSBvciBpbmRpcmVjdGx5LiAgQW55IGhvbWUgc2VydmVyLCBidXNpbmVzcywKK29yIGNvcnBvcmF0aW9uIHRoYXQgY2hhcmdlcyBmb3IgdXNlIG9mIGl0cyBzZXJ2ZXIsIGRpcmVjdGx5IG9yCitpbmRpcmVjdGx5LCBzaGFsbCBiZSBzdWJqZWN0IHRvIGxpY2Vuc2luZyBmZWVzLiAgSW5jbHVzaW9uIG9mIGEKK1ZlbnRyaWxvIHNlcnZlciBhcyBwYXJ0IG9mIGFueSByZW50YWwgb3IgbWVtYmVyc2hpcCBwYWNrYWdlIHNoYWxsCitiZSBzdWJqZWN0IHRvIGEgbGljZW5zaW5nIGZlZSB3aGljaCBpcyBjYWxjdWxhdGVkIGZvciBzZXJ2ZXJzCit3aGljaCBhcmUgY29uZmlndXJlZCB0byBoYW5kbGUgYSBtYXhpbXVtIG51bWJlciBvZiBjbGllbnRzIGF0IGFueQorb25lIHRpbWUgKCJNYXhjbGllbnRzIikgYXMgVVMkMC4xMCBtdWx0aXBsaWVkIGJ5IHRoZSBudW1iZXIgb2YKK3NlcnZlcnMgbXVsdGlwbGllZCBieSB0aGUgbnVtYmVyIG9mIE1heGNsaWVudHMgcGVyIHNlcnZlcgordXRpbGl6aW5nIHRoZSBWZW50cmlsbyBzb2Z0d2FyZS4KKworQXMgb2YgdGhlIGRhdGUgb2Ygc2lnbmluZyB0aGlzIEFncmVlbWVudCBVc2VyIGhhcyBfX19fXyBzZXJ2ZXJzCitlYWNoIGNvbmZpZ3VyZWQgZm9yIF9fX19fX19fX19fX18gTWF4Y2xpZW50cywgcmVzdWx0aW5nIGluIGFuCitpbml0aWFsIGxpY2Vuc2luZyBmZWUgb2YgVVMkX19fX19fX19fX19fX19fX19fLiAgVXNlciBzaGFsbAoraW1tZWRpYXRlbHkgcmVwb3J0IHRvIEZsYWdzaGlwIGFueSBjaGFuZ2UgaW4gdGhlIG51bWJlciBvZgorc2VydmVycyBvciBNYXhjbGllbnRzIGluIGl0cyBzeXN0ZW0gYW5kIGl0cyBNT05USExZIGZlZSBzaGFsbCBiZQorYWRqdXN0ZWQgYWNjb3JkaW5nbHkgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbmV4dCBtb250aC4KKworNi4gICBVcGRhdGVzIGFuZCBuZXcgdmVyc2lvbnMuICBJbiB0aGUgZXZlbnQgdGhhdCB1cGRhdGVzIG9yIG5ldwordmVyc2lvbnMgb2YgdGhlIHNvZnR3YXJlIGFyZSBkZXZlbG9wZWQsIExpY2Vuc29yIG1heSBhdCBpdHMKK2Rpc2NyZXRpb24sIG1ha2UgdXBkYXRlcyBhbmQgbmV3IHZlcnNpb25zIGF2YWlsYWJsZSB0byB0aGUgVXNlcgordXBvbiBwYXltZW50IG9mIGEgZmVlLiAgRmxhZ3NoaXAgbWF5IHJlcXVpcmUgdGhlIHJldHVybiBvZiB0aGUKK29yaWdpbmFsIHNvZnR3YXJlIHRvIEZsYWdzaGlwLCBvciByZXF1aXJlIHRoYXQgdGhlIFVzZXIKK2Rpc2NvbnRpbnVlIHVzZSBvZiBvbGRlciB2ZXJzaW9ucyBvZiB0aGUgc29mdHdhcmUuICBJZiBzb2Z0d2FyZQoraXMgdXBkYXRlZCBhbmQgbWFkZSBhdmFpbGFibGUgdG8gdGhlIFVzZXIsIHRoZSBVc2VyIG1heSB1c2UgdGhlCit1cGRhdGUgb25seSBpbiBhY2NvcmRhbmNlIHdpdGggdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMKK0FncmVlbWVudC4KKworNy4gICBUaGlzIEFncmVlbWVudCBpcyBlZmZlY3RpdmUgdXBvbiBvcGVuaW5nIG9mIHRoZSBzb2Z0d2FyZQorcGFja2FnZSwgb3IgaXRzIGluaXRpYWwgdXNlIGlmIGRvd25sb2FkZWQsIGFuZCBzaGFsbCBjb250aW51ZSwKK3VubGVzcyB0ZXJtaW5hdGVkIGVhcmxpZXIgaW4gYWNjb3JkYW5jZSB3aXRoIHRoZSB0ZXJtcyBoZXJlaW4uCitUaGUgVXNlciBtYXkgdGVybWluYXRlIHRoaXMgQWdyZWVtZW50IGF0IGFueSB0aW1lIGJ5IHJldHVybmluZwordGhlIHNvZnR3YXJlIGFuZCBhbGwgY29waWVzIGFuZCBleHRyYWN0cyB0aGVyZWZyb20gdG8gRmxhZ3NoaXAuCisKKzguICAgTGltaXRlZCBXYXJyYW50eTsgTGltaXRhdGlvbiBvZiBsaWFiaWxpdHkuICBGbGFnc2hpcAord2FycmFudHMgb25seSB0aGF0IHRoZSBzb2Z0d2FyZSBzaGFsbCBwZXJmb3JtIHN1YnN0YW50aWFsbHkgaW4KK2FjY29yZGFuY2Ugd2l0aCBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiB1bmRlciBub3JtYWwgdXNlIGZvcgordGhlIHBlcmlvZCB0aGUgbGljZW5zZSBpcyB2YWxpZC4gIFRoZSBlbnRpcmUgYW5kIGV4Y2x1c2l2ZQorbGlhYmlsaXR5IGFuZCByZW1lZHkgZm9yIGJyZWFjaCBvZiB0aGlzIExpbWl0ZWQgV2FycmFudHkgc2hhbGwKK2JlLCBhdCBGbGFnc2hpcCdzIGRpc2NyZXRpb24sIGVpdGhlciAoMSkgcmVmdW5kIHRoZSB1c2VkIHBvcnRpb24KK29mIGFueSBwcmVwYWlkIGZlZSBhZnRlciBub3RpZnlpbmcgRmxhZ3NoaXAgb2YgYSBtYXRlcmlhbCBkZWZlY3QKK29yICgyKSBlbGVjdHJvbmljYWxseSB1cGRhdGUgZGVmZWN0aXZlIHNvZnR3YXJlIHdpdGggY29ycmVjdGVkCitzb2Z0d2FyZSB0byBlbGltaW5hdGUgYSBkZWZlY3QuICBUaGUgVXNlciBzaGFsbCBhc3N1bWUKK3Jlc3BvbnNpYmlsaXR5IGZvciB0aGUgc2VsZWN0aW9uIG9mIHRoZSBzb2Z0d2FyZSBhbmQgZm9yIHRoZQoraW5zdGFsbGF0aW9uLCB1c2UsIGFuZCByZXN1bHRzIG9idGFpbmVkIGZyb20gdGhlIHNvZnR3YXJlLiAgVGhlCitlbnRpcmUgcmlzayBhcyB0byB0aGUgcXVhbGl0eSBhbmQgcGVyZm9ybWFuY2Ugb2YgdGhlIHNvZnR3YXJlIGlzCitib3JuZSBieSB0aGUgVXNlci4KK0ZMQUdTSElQIEVYUFJFU1NMWSBESVNDTEFJTVMgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBUSVRMRSwgTk9OLQorSU5GUklOR0VNRU5ULCBNRVJDSEFOVEFCSUxJVFksIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKK1BVUlBPU0UuICBUSEVSRSBJUyBOTyBXQVJSQU5UWSBPUiBHVUFSQU5URUUgVEhBVCBUSEUgT1BFUkFUSU9OIE9GCitUSEUgU09GVFdBUkUgV0lMTCBCRSBVTklOVEVSUlVQVEVELCBFUlJPUi1GUkVFLCBPUiBWSVJVUy1GUkVFLCBPUgorVEhBVCBUSEUgU09GVFdBUkUgV0lMTCBNRUVUIEFOWSBQQVJUSUNVTEFSIENSSVRFUklBIE9GCitQRVJGT1JNQU5DRSBPUiBRVUFMSVRZIEVYQ0VQVCBBUyBFWFBSRVNTTFkgUFJPVklERUQgSU4gVEhFCitMSU1JVEVEIFdBUlJBTlRZLgorCitObyBhY3Rpb24gZm9yIHRoZSBhYm92ZSBMaW1pdGVkIFdhcnJhbnR5IG1heSBiZSBjb21tZW5jZWQgYWZ0ZXIKK29uZSAoMSkgeWVhciBmb2xsb3dpbmcgdGhlIGV4cGlyYXRpb24gZGF0ZSBvZiB0aGUgd2FycmFudHkuICBJRgorSU1QTElFRCBXQVJSQU5USUVTIE1BWSBOT1QgQkUgRElTQ0xBSU1FRCBVTkRFUiBBUFBMSUNBQkxFIExBWSwKK1RIRU4gQU5ZIElNUExJRUQgV0FSUkFOVElFUyBBUkUgTElNSVRFRCBJTiBEVVJBVElPTiBUTyBOSU5FVFkKKyg5MCkgREFZUyBGUk9NIFRIRSBEQVRFIFRIRSBTT0ZUV0FSRSBJTiBRVUVTVElPTiBXQVMgRklSU1QKK1NVUFBMSUVEIFRPIENVU1RPTUVSLiAgSWYgYSBsaW1pdGF0aW9uIGlzIG5vdCBhbGxvd2VkLCB0aGUgYWJvdmUKK2xpbWl0YXRpb24gbWF5IG5vdCBhcHBseSB0byB0aGUgVXNlci4KKworOS4gICBKdXJpc2RpY3Rpb24gYW5kIFZlbnVlLiAgVGhpcyBBZ3JlZW1lbnQgYW5kIHRoZSB0ZXJtcyBoZXJlaW4KK3NoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBzdGF0ZSBvZiBJbGxpbm9pcy4gIEFsbAorZGlzcHV0ZXMgaGVyZXVuZGVyIHNoYWxsIGJlIHJlc29sdmVkIGluIE1hZGlzb24gQ291bnR5LCBJbGxpbm9pcy4KKworMTAuICBNaXNjZWxsYW5lb3VzLiAgVGhpcyBBZ3JlZW1lbnQgY29uc3RpdHV0ZXMgdGhlIGVudGlyZQordW5kZXJzdGFuZGluZyBvZiB0aGUgcGFydGllcywgYW5kIG1lcmdlcyBhbGwgcHJpb3IKK2NvbW11bmljYXRpb25zLCByZXByZXNlbnRhdGlvbnMsIGFuZCBhZ3JlZW1lbnRzLiAgVGhpcyBBZ3JlZW1lbnQKK21heSBiZSBtb2RpZmllZCBvbmx5IGJ5IGEgd3JpdHRlbiBhZ3JlZW1lbnQgc2lnbmVkIGJ5IGJvdGgKK3BhcnRpZXMuICBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgQWdyZWVtZW50IGlzIGhlbGQgaW52YWxpZCBvcgordW5lbmZvcmNlYWJsZSBmb3IgYW55IHJlYXNvbiwgc3VjaCBpbnZhbGlkaXR5IG9mIHVuZW5mb3JjZWFiaWxpdHkKK3NoYWxsIG5vdCBhZmZlY3QgYW55IG9mIHRoZSByZW1haW5pbmcgcHJvdmlzaW9ucyBvZiB0aGlzCitBZ3JlZW1lbnQuCisKK0FncmVlZCB0aGlzIF9fX19fIGRheSBvZiBfX19fX19fX19fX19fX19fX18sIDIwX19fXy4KKworRkxBR1NISVAgSU5EVVNUUklFUywgSU5DLiAgICAgICAgICAgICAgIFVTRVIKKworCitCeTogX19fX19fX19fX19fX19fX19fX19fX19fX18gICAgICAgICAgICAgICBCeTpfX19fX19fX19fX19fX19fX19fX19fX19fXworICAgICAgQnJpYW4gS25hcHAsIFByZXNpZGVudAorCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX19fX19fX19fX19fX19fX19fX19fX19fCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoUHJpbnQgTmFtZSkKKworCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fXworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFkZHJlc3MpCisKKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19fX19fX19fX19fX19fX19fX19fX19fX18KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL3ZpZW5uYS1ybmEgYi9saWNlbnNlcy92aWVubmEtcm5hCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3N2VhMmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy92aWVubmEtcm5hCkBAIC0wLDAgKzEsMTkgQEAKKwkJCSBEaXNjbGFpbWVyIGFuZCBDb3B5cmlnaHQKKworVGhlIHByb2dyYW1zLCBsaWJyYXJ5IGFuZCBzb3VyY2UgY29kZSBvZiB0aGUgVmllbm5hIFJOQSBQYWNrYWdlIGFyZSBmcmVlCitzb2Z0d2FyZS4gVGhleSBhcmUgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCB0aGV5IHdpbGwgYmUgdXNlZnVsCitidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgZm9yIHJlc2VhcmNoLCBlZHVjYXRpb25hbCwgYW5kIGNvbW1lcmNpYWwgdXNlCithbmQgbW9kaWZpY2F0aW9uIHNvIGxvbmcgYXMgMSkgdGhlIHBhY2thZ2UgYW5kIGFueSBkZXJpdmVkIHdvcmtzIGFyZSBub3QKK3JlZGlzdHJpYnV0ZWQgZm9yIGFueSBmZWUsIG90aGVyIHRoYW4gbWVkaWEgY29zdHMsIDIpIHByb3BlciBjcmVkaXQgaXMKK2dpdmVuIHRvIHRoZSBhdXRob3JzIGFuZCB0aGUgSW5zdGl0dXRlIGZvciBUaGVvcmV0aWNhbCBDaGVtaXN0cnkgb2YgdGhlCitVbml2ZXJzaXR5IG9mIFZpZW5uYS4KKworSWYgeW91IHdhbnQgdG8gaW5jbHVkZSB0aGlzIHNvZnR3YXJlIGluIGEgY29tbWVyY2lhbCBwcm9kdWN0LCBwbGVhc2UgY29udGFjdAordGhlIGF1dGhvcnMuCisKK05vdGUgdGhhdCB0aGUgZmlsZSAuL2xpYi9uYXZpZXcuYyBoYXMgaXRzIG93biBjb3B5cmlnaHQgYXR0YWNoZWQuCitUaGUgLi9SZWFkc2VxLyBkaXJlY3RvcnkgY29udGFpbnMgYSBtb2RpZmllZCB2ZXJzaW9uIG9mIERvbiBHaWxiZXJ0J3MKK3B1YmxpYyBkb21haW4gcmVhZHNlcSBwcm9ncmFtLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvdmltIGIvbGljZW5zZXMvdmltCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwZjc2OWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy92aW0KQEAgLTAsMCArMSwyODkgQEAKK0xpY2Vuc2UgZGV0YWlscyBmb3IgVklNIEVkaXRvcjoKKworKnVnYW5kYS50eHQqICAgIEZvciBWaW0gdmVyc2lvbiA3LjIuICBMYXN0IGNoYW5nZTogMjAwOCBKdW4gMjEKKworCisJCSAgVklNIFJFRkVSRU5DRSBNQU5VQUwgICAgYnkgQnJhbSBNb29sZW5hYXIKKworCisJCQkqdWdhbmRhKiAqVWdhbmRhKiAqY29weWluZyogKmNvcHlyaWdodCogKmxpY2Vuc2UqCitTVU1NQVJZCisJCQkJCQkJCSppY2NmKiAqSUNDRioKK1ZpbSBpcyBDaGFyaXR5d2FyZS4gIFlvdSBjYW4gdXNlIGFuZCBjb3B5IGl0IGFzIG11Y2ggYXMgeW91IGxpa2UsIGJ1dCB5b3UgYXJlCitlbmNvdXJhZ2VkIHRvIG1ha2UgYSBkb25hdGlvbiBmb3IgbmVlZHkgY2hpbGRyZW4gaW4gVWdhbmRhLiAgUGxlYXNlIHNlZSB8a2NjfAorYmVsb3cgb3IgdmlzaXQgdGhlIElDQ0Ygd2ViIHNpdGUsIGF2YWlsYWJsZSBhdCB0aGVzZSBVUkxzOgorCisJaHR0cDovL2ljY2YtaG9sbGFuZC5vcmcvCisJaHR0cDovL3d3dy52aW0ub3JnL2ljY2YvCisJaHR0cDovL3d3dy5pY2NmLm5sLworCitZb3UgY2FuIGFsc28gc3BvbnNvciB0aGUgZGV2ZWxvcG1lbnQgb2YgVmltLiAgVmltIHNwb25zb3JzIGNhbiB2b3RlIGZvcgorZmVhdHVyZXMuICBTZWUgfHNwb25zb3J8LiAgVGhlIG1vbmV5IGdvZXMgdG8gVWdhbmRhIGFueXdheS4KKworVGhlIE9wZW4gUHVibGljYXRpb24gTGljZW5zZSBhcHBsaWVzIHRvIHRoZSBWaW0gZG9jdW1lbnRhdGlvbiwgc2VlCit8bWFudWFsLWNvcHlyaWdodHwuCisKKz09PSBiZWdpbiBvZiBsaWNlbnNlID09PQorCitWSU0gTElDRU5TRQorCitJKSAgVGhlcmUgYXJlIG5vIHJlc3RyaWN0aW9ucyBvbiBkaXN0cmlidXRpbmcgdW5tb2RpZmllZCBjb3BpZXMgb2YgVmltIGV4Y2VwdAorICAgIHRoYXQgdGhleSBtdXN0IGluY2x1ZGUgdGhpcyBsaWNlbnNlIHRleHQuICBZb3UgY2FuIGFsc28gZGlzdHJpYnV0ZQorICAgIHVubW9kaWZpZWQgcGFydHMgb2YgVmltLCBsaWtld2lzZSB1bnJlc3RyaWN0ZWQgZXhjZXB0IHRoYXQgdGhleSBtdXN0CisgICAgaW5jbHVkZSB0aGlzIGxpY2Vuc2UgdGV4dC4gIFlvdSBhcmUgYWxzbyBhbGxvd2VkIHRvIGluY2x1ZGUgZXhlY3V0YWJsZXMKKyAgICB0aGF0IHlvdSBtYWRlIGZyb20gdGhlIHVubW9kaWZpZWQgVmltIHNvdXJjZXMsIHBsdXMgeW91ciBvd24gdXNhZ2UKKyAgICBleGFtcGxlcyBhbmQgVmltIHNjcmlwdHMuCisKK0lJKSBJdCBpcyBhbGxvd2VkIHRvIGRpc3RyaWJ1dGUgYSBtb2RpZmllZCAob3IgZXh0ZW5kZWQpIHZlcnNpb24gb2YgVmltLAorICAgIGluY2x1ZGluZyBleGVjdXRhYmxlcyBhbmQvb3Igc291cmNlIGNvZGUsIHdoZW4gdGhlIGZvbGxvd2luZyBmb3VyCisgICAgY29uZGl0aW9ucyBhcmUgbWV0OgorICAgIDEpIFRoaXMgbGljZW5zZSB0ZXh0IG11c3QgYmUgaW5jbHVkZWQgdW5tb2RpZmllZC4KKyAgICAyKSBUaGUgbW9kaWZpZWQgVmltIG11c3QgYmUgZGlzdHJpYnV0ZWQgaW4gb25lIG9mIHRoZSBmb2xsb3dpbmcgZml2ZSB3YXlzOgorICAgICAgIGEpIElmIHlvdSBtYWtlIGNoYW5nZXMgdG8gVmltIHlvdXJzZWxmLCB5b3UgbXVzdCBjbGVhcmx5IGRlc2NyaWJlIGluCisJICB0aGUgZGlzdHJpYnV0aW9uIGhvdyB0byBjb250YWN0IHlvdS4gIFdoZW4gdGhlIG1haW50YWluZXIgYXNrcyB5b3UKKwkgIChpbiBhbnkgd2F5KSBmb3IgYSBjb3B5IG9mIHRoZSBtb2RpZmllZCBWaW0geW91IGRpc3RyaWJ1dGVkLCB5b3UKKwkgIG11c3QgbWFrZSB5b3VyIGNoYW5nZXMsIGluY2x1ZGluZyBzb3VyY2UgY29kZSwgYXZhaWxhYmxlIHRvIHRoZQorCSAgbWFpbnRhaW5lciB3aXRob3V0IGZlZS4gIFRoZSBtYWludGFpbmVyIHJlc2VydmVzIHRoZSByaWdodCB0bworCSAgaW5jbHVkZSB5b3VyIGNoYW5nZXMgaW4gdGhlIG9mZmljaWFsIHZlcnNpb24gb2YgVmltLiAgV2hhdCB0aGUKKwkgIG1haW50YWluZXIgd2lsbCBkbyB3aXRoIHlvdXIgY2hhbmdlcyBhbmQgdW5kZXIgd2hhdCBsaWNlbnNlIHRoZXkKKwkgIHdpbGwgYmUgZGlzdHJpYnV0ZWQgaXMgbmVnb3RpYWJsZS4gIElmIHRoZXJlIGhhcyBiZWVuIG5vIG5lZ290aWF0aW9uCisJICB0aGVuIHRoaXMgbGljZW5zZSwgb3IgYSBsYXRlciB2ZXJzaW9uLCBhbHNvIGFwcGxpZXMgdG8geW91ciBjaGFuZ2VzLgorCSAgVGhlIGN1cnJlbnQgbWFpbnRhaW5lciBpcyBCcmFtIE1vb2xlbmFhciA8QnJhbUB2aW0ub3JnPi4gIElmIHRoaXMKKwkgIGNoYW5nZXMgaXQgd2lsbCBiZSBhbm5vdW5jZWQgaW4gYXBwcm9wcmlhdGUgcGxhY2VzIChtb3N0IGxpa2VseQorCSAgdmltLnNmLm5ldCwgd3d3LnZpbS5vcmcgYW5kL29yIGNvbXAuZWRpdG9ycykuICBXaGVuIGl0IGlzIGNvbXBsZXRlbHkKKwkgIGltcG9zc2libGUgdG8gY29udGFjdCB0aGUgbWFpbnRhaW5lciwgdGhlIG9ibGlnYXRpb24gdG8gc2VuZCBoaW0KKwkgIHlvdXIgY2hhbmdlcyBjZWFzZXMuICBPbmNlIHRoZSBtYWludGFpbmVyIGhhcyBjb25maXJtZWQgdGhhdCBoZSBoYXMKKwkgIHJlY2VpdmVkIHlvdXIgY2hhbmdlcyB0aGV5IHdpbGwgbm90IGhhdmUgdG8gYmUgc2VudCBhZ2Fpbi4KKyAgICAgICBiKSBJZiB5b3UgaGF2ZSByZWNlaXZlZCBhIG1vZGlmaWVkIFZpbSB0aGF0IHdhcyBkaXN0cmlidXRlZCBhcworCSAgbWVudGlvbmVkIHVuZGVyIGEpIHlvdSBhcmUgYWxsb3dlZCB0byBmdXJ0aGVyIGRpc3RyaWJ1dGUgaXQKKwkgIHVubW9kaWZpZWQsIGFzIG1lbnRpb25lZCBhdCBJKS4gIElmIHlvdSBtYWtlIGFkZGl0aW9uYWwgY2hhbmdlcyB0aGUKKwkgIHRleHQgdW5kZXIgYSkgYXBwbGllcyB0byB0aG9zZSBjaGFuZ2VzLgorICAgICAgIGMpIFByb3ZpZGUgYWxsIHRoZSBjaGFuZ2VzLCBpbmNsdWRpbmcgc291cmNlIGNvZGUsIHdpdGggZXZlcnkgY29weSBvZgorCSAgdGhlIG1vZGlmaWVkIFZpbSB5b3UgZGlzdHJpYnV0ZS4gIFRoaXMgbWF5IGJlIGRvbmUgaW4gdGhlIGZvcm0gb2YgYQorCSAgY29udGV4dCBkaWZmLiAgWW91IGNhbiBjaG9vc2Ugd2hhdCBsaWNlbnNlIHRvIHVzZSBmb3IgbmV3IGNvZGUgeW91CisJICBhZGQuICBUaGUgY2hhbmdlcyBhbmQgdGhlaXIgbGljZW5zZSBtdXN0IG5vdCByZXN0cmljdCBvdGhlcnMgZnJvbQorCSAgbWFraW5nIHRoZWlyIG93biBjaGFuZ2VzIHRvIHRoZSBvZmZpY2lhbCB2ZXJzaW9uIG9mIFZpbS4KKyAgICAgICBkKSBXaGVuIHlvdSBoYXZlIGEgbW9kaWZpZWQgVmltIHdoaWNoIGluY2x1ZGVzIGNoYW5nZXMgYXMgbWVudGlvbmVkCisJICB1bmRlciBjKSwgeW91IGNhbiBkaXN0cmlidXRlIGl0IHdpdGhvdXQgdGhlIHNvdXJjZSBjb2RlIGZvciB0aGUKKwkgIGNoYW5nZXMgaWYgdGhlIGZvbGxvd2luZyB0aHJlZSBjb25kaXRpb25zIGFyZSBtZXQ6CisJICAtIFRoZSBsaWNlbnNlIHRoYXQgYXBwbGllcyB0byB0aGUgY2hhbmdlcyBwZXJtaXRzIHlvdSB0byBkaXN0cmlidXRlCisJICAgIHRoZSBjaGFuZ2VzIHRvIHRoZSBWaW0gbWFpbnRhaW5lciB3aXRob3V0IGZlZSBvciByZXN0cmljdGlvbiwgYW5kCisJICAgIHBlcm1pdHMgdGhlIFZpbSBtYWludGFpbmVyIHRvIGluY2x1ZGUgdGhlIGNoYW5nZXMgaW4gdGhlIG9mZmljaWFsCisJICAgIHZlcnNpb24gb2YgVmltIHdpdGhvdXQgZmVlIG9yIHJlc3RyaWN0aW9uLgorCSAgLSBZb3Uga2VlcCB0aGUgY2hhbmdlcyBmb3IgYXQgbGVhc3QgdGhyZWUgeWVhcnMgYWZ0ZXIgbGFzdAorCSAgICBkaXN0cmlidXRpbmcgdGhlIGNvcnJlc3BvbmRpbmcgbW9kaWZpZWQgVmltLiAgV2hlbiB0aGUgbWFpbnRhaW5lcgorCSAgICBvciBzb21lb25lIHdobyB5b3UgZGlzdHJpYnV0ZWQgdGhlIG1vZGlmaWVkIFZpbSB0byBhc2tzIHlvdSAoaW4KKwkgICAgYW55IHdheSkgZm9yIHRoZSBjaGFuZ2VzIHdpdGhpbiB0aGlzIHBlcmlvZCwgeW91IG11c3QgbWFrZSB0aGVtCisJICAgIGF2YWlsYWJsZSB0byBoaW0uCisJICAtIFlvdSBjbGVhcmx5IGRlc2NyaWJlIGluIHRoZSBkaXN0cmlidXRpb24gaG93IHRvIGNvbnRhY3QgeW91LiAgVGhpcworCSAgICBjb250YWN0IGluZm9ybWF0aW9uIG11c3QgcmVtYWluIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZSB5ZWFycworCSAgICBhZnRlciBsYXN0IGRpc3RyaWJ1dGluZyB0aGUgY29ycmVzcG9uZGluZyBtb2RpZmllZCBWaW0sIG9yIGFzIGxvbmcKKwkgICAgYXMgcG9zc2libGUuCisgICAgICAgZSkgV2hlbiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgKEdQTCkgYXBwbGllcyB0byB0aGUgY2hhbmdlcywKKwkgIHlvdSBjYW4gZGlzdHJpYnV0ZSB0aGUgbW9kaWZpZWQgVmltIHVuZGVyIHRoZSBHTlUgR1BMIHZlcnNpb24gMiBvcgorCSAgYW55IGxhdGVyIHZlcnNpb24uCisgICAgMykgQSBtZXNzYWdlIG11c3QgYmUgYWRkZWQsIGF0IGxlYXN0IGluIHRoZSBvdXRwdXQgb2YgdGhlICI6dmVyc2lvbiIKKyAgICAgICBjb21tYW5kIGFuZCBpbiB0aGUgaW50cm8gc2NyZWVuLCBzdWNoIHRoYXQgdGhlIHVzZXIgb2YgdGhlIG1vZGlmaWVkIFZpbQorICAgICAgIGlzIGFibGUgdG8gc2VlIHRoYXQgaXQgd2FzIG1vZGlmaWVkLiAgV2hlbiBkaXN0cmlidXRpbmcgYXMgbWVudGlvbmVkCisgICAgICAgdW5kZXIgMillKSBhZGRpbmcgdGhlIG1lc3NhZ2UgaXMgb25seSByZXF1aXJlZCBmb3IgYXMgZmFyIGFzIHRoaXMgZG9lcworICAgICAgIG5vdCBjb25mbGljdCB3aXRoIHRoZSBsaWNlbnNlIHVzZWQgZm9yIHRoZSBjaGFuZ2VzLgorICAgIDQpIFRoZSBjb250YWN0IGluZm9ybWF0aW9uIGFzIHJlcXVpcmVkIHVuZGVyIDIpYSkgYW5kIDIpZCkgbXVzdCBub3QgYmUKKyAgICAgICByZW1vdmVkIG9yIGNoYW5nZWQsIGV4Y2VwdCB0aGF0IHRoZSBwZXJzb24gaGltc2VsZiBjYW4gbWFrZQorICAgICAgIGNvcnJlY3Rpb25zLgorCitJSUkpIElmIHlvdSBkaXN0cmlidXRlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiBWaW0sIHlvdSBhcmUgZW5jb3VyYWdlZCB0byB1c2UKKyAgICAgdGhlIFZpbSBsaWNlbnNlIGZvciB5b3VyIGNoYW5nZXMgYW5kIG1ha2UgdGhlbSBhdmFpbGFibGUgdG8gdGhlCisgICAgIG1haW50YWluZXIsIGluY2x1ZGluZyB0aGUgc291cmNlIGNvZGUuICBUaGUgcHJlZmVycmVkIHdheSB0byBkbyB0aGlzIGlzCisgICAgIGJ5IGUtbWFpbCBvciBieSB1cGxvYWRpbmcgdGhlIGZpbGVzIHRvIGEgc2VydmVyIGFuZCBlLW1haWxpbmcgdGhlIFVSTC4KKyAgICAgSWYgdGhlIG51bWJlciBvZiBjaGFuZ2VzIGlzIHNtYWxsIChlLmcuLCBhIG1vZGlmaWVkIE1ha2VmaWxlKSBlLW1haWxpbmcgYQorICAgICBjb250ZXh0IGRpZmYgd2lsbCBkby4gIFRoZSBlLW1haWwgYWRkcmVzcyB0byBiZSB1c2VkIGlzCisgICAgIDxtYWludGFpbmVyQHZpbS5vcmc+CisKK0lWKSAgSXQgaXMgbm90IGFsbG93ZWQgdG8gcmVtb3ZlIHRoaXMgbGljZW5zZSBmcm9tIHRoZSBkaXN0cmlidXRpb24gb2YgdGhlIFZpbQorICAgICBzb3VyY2VzLCBwYXJ0cyBvZiBpdCBvciBmcm9tIGEgbW9kaWZpZWQgdmVyc2lvbi4gIFlvdSBtYXkgdXNlIHRoaXMKKyAgICAgbGljZW5zZSBmb3IgcHJldmlvdXMgVmltIHJlbGVhc2VzIGluc3RlYWQgb2YgdGhlIGxpY2Vuc2UgdGhhdCB0aGV5IGNhbWUKKyAgICAgd2l0aCwgYXQgeW91ciBvcHRpb24uCisKKz09PSBlbmQgb2YgbGljZW5zZSA9PT0KKworTm90ZToKKworLSBJZiB5b3UgYXJlIGhhcHB5IHdpdGggVmltLCBwbGVhc2UgZXhwcmVzcyB0aGF0IGJ5IHJlYWRpbmcgdGhlIHJlc3Qgb2YgdGhpcworICBmaWxlIGFuZCBjb25zaWRlciBoZWxwaW5nIG5lZWR5IGNoaWxkcmVuIGluIFVnYW5kYS4KKworLSBJZiB5b3Ugd2FudCB0byBzdXBwb3J0IGZ1cnRoZXIgVmltIGRldmVsb3BtZW50IGNvbnNpZGVyIGJlY29taW5nIGEKKyAgfHNwb25zb3J8LiAgVGhlIG1vbmV5IGdvZXMgdG8gVWdhbmRhIGFueXdheS4KKworLSBBY2NvcmRpbmcgdG8gUmljaGFyZCBTdGFsbG1hbiB0aGUgVmltIGxpY2Vuc2UgaXMgR05VIEdQTCBjb21wYXRpYmxlLgorICBBIGZldyBtaW5vciBjaGFuZ2VzIGhhdmUgYmVlbiBtYWRlIHNpbmNlIGhlIGNoZWNrZWQgaXQsIGJ1dCB0aGF0IHNob3VsZCBub3QKKyAgbWFrZSBhIGRpZmZlcmVuY2UuCisKKy0gSWYgeW91IGxpbmsgVmltIHdpdGggYSBsaWJyYXJ5IHRoYXQgZ29lcyB1bmRlciB0aGUgR05VIEdQTCwgdGhpcyBsaW1pdHMKKyAgZnVydGhlciBkaXN0cmlidXRpb24gdG8gdGhlIEdOVSBHUEwuICBBbHNvIHdoZW4geW91IGRpZG4ndCBhY3R1YWxseSBjaGFuZ2UKKyAgYW55dGhpbmcgaW4gVmltLgorCistIE9uY2UgYSBjaGFuZ2UgaXMgaW5jbHVkZWQgdGhhdCBnb2VzIHVuZGVyIHRoZSBHTlUgR1BMLCB0aGlzIGZvcmNlcyBhbGwKKyAgZnVydGhlciBjaGFuZ2VzIHRvIGFsc28gYmUgbWFkZSB1bmRlciB0aGUgR05VIEdQTCBvciBhIGNvbXBhdGlibGUgbGljZW5zZS4KKworLSBJZiB5b3UgZGlzdHJpYnV0ZSBhIG1vZGlmaWVkIHZlcnNpb24gb2YgVmltLCB5b3UgY2FuIGluY2x1ZGUgeW91ciBuYW1lIGFuZAorICBjb250YWN0IGluZm9ybWF0aW9uIHdpdGggdGhlICItLXdpdGgtbW9kaWZpZWQtYnkiIGNvbmZpZ3VyZSBhcmd1bWVudCBvciB0aGUKKyAgTU9ESUZJRURfQlkgZGVmaW5lLgorCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KK0tpYmFhbGUgQ2hpbGRyZW4ncyBDZW50cmUJCSprY2MqICpLaWJhYWxlKiAgKmNoYXJpdHkqCisKK0tpYmFhbGUgQ2hpbGRyZW4ncyBDZW50cmUgKEtDQykgaXMgbG9jYXRlZCBpbiBLaWJhYWxlLCBhIHNtYWxsIHRvd24gaW4gdGhlCitzb3V0aCBvZiBVZ2FuZGEsIG5lYXIgVGFuemFuaWEsIGluIEVhc3QgQWZyaWNhLiAgVGhlIGFyZWEgaXMga25vd24gYXMgUmFrYWkKK0Rpc3RyaWN0LiAgVGhlIHBvcHVsYXRpb24gaXMgbW9zdGx5IGZhcm1lcnMuICBBbHRob3VnaCBwZW9wbGUgYXJlIHBvb3IsIHRoZXJlCitpcyBlbm91Z2ggZm9vZC4gIEJ1dCB0aGlzIGRpc3RyaWN0IGlzIHN1ZmZlcmluZyBmcm9tIEFJRFMgbW9yZSB0aGFuIGFueSBvdGhlcgorcGFydCBvZiB0aGUgd29ybGQuICBTb21lIHNheSB0aGF0IGl0IHN0YXJ0ZWQgdGhlcmUuICBFc3RpbWF0aW9ucyBhcmUgdGhhdCAxMAordG8gMzAlIG9mIHRoZSBVZ2FuZGFucyBhcmUgaW5mZWN0ZWQgd2l0aCBISVYuICBCZWNhdXNlIHBhcmVudHMgZGllLCB0aGVyZSBhcmUKK21hbnkgb3JwaGFucy4gIEluIHRoaXMgZGlzdHJpY3QgYWJvdXQgNjAsMDAwIGNoaWxkcmVuIGhhdmUgbG9zdCBvbmUgb3IgYm90aAorcGFyZW50cywgb3V0IG9mIGEgcG9wdWxhdGlvbiBvZiAzNTAsMDAwLiAgQW5kIHRoaXMgaXMgc3RpbGwgY29udGludWluZy4KKworVGhlIGNoaWxkcmVuIG5lZWQgYSBsb3Qgb2YgaGVscC4gIFRoZSBLQ0MgaXMgd29ya2luZyBoYXJkIHRvIHByb3ZpZGUgdGhlIG5lZWR5Cit3aXRoIGZvb2QsIG1lZGljYWwgY2FyZSBhbmQgZWR1Y2F0aW9uLiAgRm9vZCBhbmQgbWVkaWNhbCBjYXJlIHRvIGtlZXAgdGhlbQoraGVhbHRoeSBub3csIGFuZCBlZHVjYXRpb24gc28gdGhhdCB0aGV5IGNhbiB0YWtlIGNhcmUgb2YgdGhlbXNlbHZlcyBpbiB0aGUKK2Z1dHVyZS4gIEtDQyB3b3JrcyBvbiBhIENocmlzdGlhbiBiYXNlLCBidXQgaGVscCBpcyBnaXZlbiB0byBjaGlsZHJlbiBvZiBhbnkKK3JlbGlnaW9uLgorCitUaGUga2V5IHRvIHNvbHZpbmcgdGhlIHByb2JsZW1zIGluIHRoaXMgYXJlYSBpcyBlZHVjYXRpb24uICBUaGlzIGhhcyBiZWVuCituZWdsZWN0ZWQgaW4gdGhlIHBhc3QgeWVhcnMgd2l0aCBwcmVzaWRlbnQgSWRpIEFtaW4gYW5kIHRoZSBmb2xsb3dpbmcgY2l2aWwKK3dhcnMuICBOb3cgdGhhdCB0aGUgZ292ZXJubWVudCBpcyBzdGFibGUgYWdhaW4sIHRoZSBjaGlsZHJlbiBhbmQgcGFyZW50cyBoYXZlCit0byBsZWFybiBob3cgdG8gdGFrZSBjYXJlIG9mIHRoZW1zZWx2ZXMgYW5kIGhvdyB0byBhdm9pZCBpbmZlY3Rpb25zLiAgVGhlcmUgaXMKK2Fsc28gaGVscCBmb3IgcGVvcGxlIHdobyBhcmUgaWxsIGFuZCBodW5ncnksIGJ1dCB0aGUgcHJpbWFyeSBnb2FsIGlzIHRvCitwcmV2ZW50IHBlb3BsZSBmcm9tIGdldHRpbmcgaWxsIGFuZCB0byB0ZWFjaCB0aGVtIGhvdyB0byBncm93IGhlYWx0aHkgZm9vZC4KKworTW9zdCBvZiB0aGUgb3JwaGFucyBhcmUgbGl2aW5nIGluIGFuIGV4dGVuZGVkIGZhbWlseS4gIEFuIHVuY2xlIG9yIG9sZGVyCitzaXN0ZXIgaXMgdGFraW5nIGNhcmUgb2YgdGhlbS4gIEJlY2F1c2UgdGhlc2UgZmFtaWxpZXMgYXJlIGJpZyBhbmQgdGhlIGluY29tZQorKGlmIGFueSkgaXMgbG93LCBhIGNoaWxkIGlzIGx1Y2t5IGlmIGl0IGdldHMgaGVhbHRoeSBmb29kLiAgQ2xvdGhlcywgbWVkaWNhbAorY2FyZSBhbmQgc2Nob29saW5nIGlzIGJleW9uZCBpdHMgcmVhY2guICBUbyBoZWxwIHRoZXNlIG5lZWR5IGNoaWxkcmVuLCBhCitzcG9uc29yc2hpcCBwcm9ncmFtIHdhcyBwdXQgaW50byBwbGFjZS4gIEEgY2hpbGQgY2FuIGJlIGZpbmFuY2lhbGx5IGFkb3B0ZWQuCitGb3IgYSBmZXcgZG9sbGFycyBhIG1vbnRoIEtDQyBzZWVzIHRvIGl0IHRoYXQgdGhlIGNoaWxkIGdldHMgaW5kaXNwZW5zYWJsZQoraXRlbXMsIGlzIGhlYWx0aHksIGdvZXMgdG8gc2Nob29sIGFuZCBLQ0MgdGFrZXMgY2FyZSBvZiBhbnl0aGluZyBlbHNlIHRoYXQKK25lZWRzIHRvIGJlIGRvbmUgZm9yIHRoZSBjaGlsZCBhbmQgdGhlIGZhbWlseSB0aGF0IHN1cHBvcnRzIGl0LgorCitCZXNpZGVzIGhlbHBpbmcgdGhlIGNoaWxkIGRpcmVjdGx5LCB0aGUgZW52aXJvbm1lbnQgd2hlcmUgdGhlIGNoaWxkIGdyb3dzIHVwCituZWVkcyB0byBiZSBpbXByb3ZlZC4gIEtDQyBoZWxwcyBzY2hvb2xzIHRvIGltcHJvdmUgdGhlaXIgdGVhY2hpbmcgbWV0aG9kcy4KK1RoZXJlIGlzIGEgZGVtb25zdHJhdGlvbiBzY2hvb2wgYXQgdGhlIGNlbnRyZSBhbmQgdGVhY2hlciB0cmFpbmluZ3MgYXJlIGdpdmVuLgorSGVhbHRoIHdvcmtlcnMgYXJlIGJlaW5nIHRyYWluZWQsIGh5Z2llbmUgZWR1Y2F0aW9uIGlzIGNhcnJpZWQgb3V0IGFuZAoraG91c2Vob2xkcyBhcmUgc3RpbXVsYXRlZCB0byBidWlsZCBhIHByb3BlciBsYXRyaW5lLiAgSSBoZWxwZWQgc2V0dGluZyB1cCBhCitwcm9kdWN0aW9uIHNpdGUgZm9yIGNlbWVudCBzbGFicy4gIFRoZXNlIGFyZSB1c2VkIHRvIGJ1aWxkIGEgZ29vZCBsYXRyaW5lLgorVGhleSBhcmUgc29sZCBiZWxvdyBjb3N0IHByaWNlLgorCitUaGVyZSBpcyBhIHNtYWxsIGNsaW5pYyBhdCB0aGUgcHJvamVjdCwgd2hpY2ggcHJvdmlkZXMgY2hpbGRyZW4gYW5kIHRoZWlyCitmYW1pbHkgd2l0aCBtZWRpY2FsIGhlbHAuICBXaGVuIG5lZWRlZCwgdHJhbnNwb3J0IHRvIGEgaG9zcGl0YWwgaXMgb2ZmZXJlZC4KK0ltbXVuaXphdGlvbiBwcm9ncmFtcyBhcmUgY2FycmllZCBvdXQgYW5kIGhlbHAgaXMgcHJvdmlkZWQgd2hlbiBhbiBlcGlkZW1pYyBpcworYnJlYWtpbmcgb3V0IChtZWFzbGVzIGFuZCBjaG9sZXJhIGhhdmUgYmVlbiBhIHByb2JsZW0pLgorCQkJCQkJCSpkb25hdGUqCitTdW1tZXIgMTk5NCB0byBzdW1tZXIgMTk5NSBJIHNwZW50IGEgd2hvbGUgeWVhciBhdCB0aGUgY2VudHJlLCB3b3JraW5nIGFzIGEKK3ZvbHVudGVlci4gIEkgaGF2ZSBoZWxwZWQgdG8gZXhwYW5kIHRoZSBjZW50cmUgYW5kIHdvcmtlZCBpbiB0aGUgYXJlYSBvZiB3YXRlcgorYW5kIHNhbml0YXRpb24uICBJIGxlYXJuZWQgdGhhdCB0aGUgaGVscCB0aGF0IHRoZSBLQ0MgcHJvdmlkZXMgcmVhbGx5IGhlbHBzLgorV2hlbiBJIGNhbWUgYmFjayB0byBIb2xsYW5kLCBJIHdhbnRlZCB0byBjb250aW51ZSBzdXBwb3J0aW5nIEtDQy4gIFRvIGRvIHRoaXMKK0knbSByYWlzaW5nIGZ1bmRzIGFuZCBvcmdhbml6aW5nIHRoZSBzcG9uc29yc2hpcCBwcm9ncmFtLiAgUGxlYXNlIGNvbnNpZGVyIG9uZQorb2YgdGhlc2UgcG9zc2liaWxpdGllczoKKworMS4gIFNwb25zb3IgYSBjaGlsZCBpbiBwcmltYXJ5IHNjaG9vbDogMTcgZXVybyBhIG1vbnRoIChvciBtb3JlKS4KKzIuICBTcG9uc29yIGEgY2hpbGQgaW4gc2Vjb25kYXJ5IHNjaG9vbDogMjUgZXVybyBhIG1vbnRoIChvciBtb3JlKS4KKzMuICBTcG9uc29yIHRoZSBjbGluaWM6IEFueSBhbW91bnQgYSBtb250aCBvciBxdWFydGVyCis0LiAgQSBvbmUtdGltZSBkb25hdGlvbgorCitDb21wYXJlZCB3aXRoIG90aGVyIG9yZ2FuaXphdGlvbnMgdGhhdCBkbyBjaGlsZCBzcG9uc29yc2hpcCB0aGUgYW1vdW50cyBhcmUKK3ZlcnkgbG93LiAgVGhpcyBpcyBiZWNhdXNlIHRoZSBtb25leSBnb2VzIGRpcmVjdGx5IHRvIHRoZSBjZW50cmUuICBMZXNzIHRoYW4KKzUlIGlzIHVzZWQgZm9yIGFkbWluaXN0cmF0aW9uLiAgVGhpcyBpcyBwb3NzaWJsZSBiZWNhdXNlIHRoaXMgaXMgYSBzbWFsbAorb3JnYW5pemF0aW9uIHRoYXQgd29ya3Mgd2l0aCB2b2x1bnRlZXJzLiAgSWYgeW91IHdvdWxkIGxpa2UgdG8gc3BvbnNvciBhCitjaGlsZCwgeW91IHNob3VsZCBoYXZlIHRoZSBpbnRlbnRpb24gdG8gZG8gdGhpcyBmb3IgYXQgbGVhc3Qgb25lIHllYXIuCisKK0hvdyBkbyB5b3Uga25vdyB0aGF0IHRoZSBtb25leSB3aWxsIGJlIHNwZW50IHJpZ2h0PyAgRmlyc3Qgb2YgYWxsIHlvdSBoYXZlIG15CitwZXJzb25hbCBndWFyYW50ZWUgYXMgdGhlIGF1dGhvciBvZiBWaW0uICBJIHRydXN0IHRoZSBwZW9wbGUgdGhhdCBhcmUgd29ya2luZworYXQgdGhlIGNlbnRyZSwgSSBrbm93IHRoZW0gcGVyc29uYWxseS4gIEZ1cnRoZXIgbW9yZSwgdGhlIGNlbnRyZSBpcworY28tc3BvbnNvcmVkIGFuZCBpbnNwZWN0ZWQgYnkgV29ybGQgVmlzaW9uLCBTYXZlIHRoZSBDaGlsZHJlbiBGdW5kIGFuZAorSW50ZXJuYXRpb25hbCBDaGlsZCBDYXJlIEZ1bmQuICBUaGUgY2VudHJlIGlzIHZpc2l0ZWQgYWJvdXQgb25jZSBhIHllYXIgdG8KK2NoZWNrIHRoZSBwcm9ncmVzcyAoYXQgb3VyIG93biBjb3N0KS4gIEkgaGF2ZSB2aXNpdGVkIHRoZSBjZW50cmUgbXlzZWxmIGluCisxOTk2LCAxOTk4LCAyMDAwLCAyMDAxIGFuZCAyMDAzLiAgVGhlIHZpc2l0IHJlcG9ydHMgYXJlIG9uIHRoZSBJQ0NGIHdlYiBzaXRlLgorCitJZiB5b3UgaGF2ZSBhbnkgZnVydGhlciBxdWVzdGlvbnMsIHNlbmQgbWUgZS1tYWlsOiA8QnJhbUB2aW0ub3JnPi4KKworVGhlIGFkZHJlc3Mgb2YgdGhlIGNlbnRyZSBpczoKKwkJCUtpYmFhbGUgQ2hpbGRyZW4ncyBDZW50cmUKKwkJCXAuby4gYm94IDE2NTgKKwkJCU1hc2FrYSwgVWdhbmRhLCBFYXN0IEFmcmljYQorCitTZW5kaW5nIG1vbmV5OgkJCQkJCSppY2NmLWRvbmF0aW9ucyoKKworQ2hlY2sgdGhlIElDQ0Ygd2ViIHNpdGUgZm9yIHRoZSBsYXRlc3QgaW5mb3JtYXRpb24hICBTZWUgfGljY2Z8IGZvciB0aGUgVVJMLgorCisKK1VTQToJCVRoZSBtZXRob2RzIG1lbnRpb25lZCBiZWxvdyBjYW4gYmUgdXNlZC4KKwkJU2VuZGluZyBhIGNoZWNrIHRvIHRoZSBOZWhlbWlhaCBHcm91cCBPdXRyZWFjaCBTb2NpZXR5IChOR09TKQorCQlpcyBubyBsb25nZXIgcG9zc2libGUsIHVuZm9ydHVuYXRlbHkuIFdlIGFyZSBsb29raW5nIGZvcgorCQlhbm90aGVyIHdheSB0byBnZXQgeW91IGFuIElSUyB0YXggcmVjZWlwdC4gCisJCUZvciBzcG9uc29yaW5nIGEgY2hpbGQgY29udGFjdCBLQ0YgaW4gQ2FuYWRhIChzZWUgYmVsb3cpLiBVUworCQljaGVja3MgY2FuIGJlIHNlbnQgdG8gdGhlbSB0byBsb3dlciBiYW5raW5nIGNvc3RzLgorCitDYW5hZGE6CQlDb250YWN0IEtpYmFhbGUgQ2hpbGRyZW4ncyBGdW5kIChLQ0YpIGluIFN1cnJleSwgQ2FuYWRhLiAgVGhleQorCQl0YWtlIGNhcmUgb2YgdGhlIENhbmFkaWFuIHNwb25zb3JzIGZvciB0aGUgY2hpbGRyZW4gaW4KKwkJS2liYWFsZS4gIEtDRiBmb3J3YXJkcyAxMDAlIG9mIHRoZSBtb25leSB0byB0aGUgcHJvamVjdCBpbgorCQlVZ2FuZGEuICBZb3UgY2FuIHNlbmQgdGhlbSBhIG9uZSB0aW1lIGRvbmF0aW9uIGRpcmVjdGx5LgorCQlQbGVhc2Ugc2VuZCBtZSBhIG5vdGUgc28gdGhhdCBJIGtub3cgd2hhdCBoYXMgYmVlbiBkb25hdGVkCisJCWJlY2F1c2Ugb2YgVmltLiAgQXNrIEtDRiBmb3IgaW5mb3JtYXRpb24gYWJvdXQgc3BvbnNvcnNoaXAuCisJCQlLaWJhYWxlIENoaWxkcmVuJ3MgRnVuZCBjL28gUGFjaWZpYyBBY2FkZW15CisJCQkxMDIzOC0xNjggU3RyZWV0CisJCQlTdXJyZXksIEIuQy4gVjROIDFaNAorCQkJQ2FuYWRhCisJCQlQaG9uZTogNjA0LTU4MS01MzUzCisJCUlmIHlvdSBtYWtlIGEgZG9uYXRpb24gdG8gS2liYWFsZSBDaGlsZHJlbidzIEZ1bmQgKEtDRikgeW91CisJCXdpbGwgcmVjZWl2ZSBhIHRheCByZWNlaXB0IHdoaWNoIGNhbiBiZSBzdWJtaXR0ZWQgd2l0aCB5b3VyCisJCXRheCByZXR1cm4uCisKK0hvbGxhbmQ6CVRyYW5zZmVyIHRvIHRoZSBhY2NvdW50IG9mICJTdGljaHRpbmcgSUNDRiBIb2xsYW5kIiBpbiBWZW5sby4KKwkJVGhpcyB3aWxsIGFsbG93IGZvciB0YXggZGVkdWN0aW9uIGlmIHlvdSBsaXZlIGluIEhvbGxhbmQuCisJCQlQb3N0YmFuaywgbnIuIDQ1NDg3NzQKKworR2VybWFueToJSXQgaXMgcG9zc2libGUgdG8gbWFrZSBkb25hdGlvbnMgdGhhdCBhbGxvdyBmb3IgYSB0YXggcmV0dXJuLgorCQlDaGVjayB0aGUgSUNDRiB3ZWIgc2l0ZSBmb3IgdGhlIGxhdGVzdCBpbmZvcm1hdGlvbjoKKwkJCWh0dHA6Ly9pY2NmLWhvbGxhbmQub3JnL2dlcm1hbnkuaHRtbAorCitXb3JsZDoJCVVzZSBhIHBvc3RhbCBtb25leSBvcmRlci4gIFRoYXQgc2hvdWxkIGJlIHBvc3NpYmxlIGZyb20gYW55CisJCWNvdW50cnksIG1vc3RseSBmcm9tIHRoZSBwb3N0IG9mZmljZS4gIFVzZSB0aGlzIG5hbWUgKHdoaWNoIGlzCisJCWluIG15IHBhc3Nwb3J0KTogIkFicmFoYW0gTW9vbGVuYWFyIi4gIFVzZSBFdXJvIGZvciB0aGUKKwkJY3VycmVuY3kgaWYgcG9zc2libGUuCisKK0V1cm9wZToJCVVzZSBhIGJhbmsgdHJhbnNmZXIgaWYgcG9zc2libGUuICBZb3VyIGJhbmsgc2hvdWxkIGhhdmUgYSBmb3JtCisJCXRoYXQgeW91IGNhbiB1c2UgZm9yIHRoaXMuICBTZWUgIk90aGVycyIgYmVsb3cgZm9yIHRoZSBzd2lmdAorCQljb2RlIGFuZCBJQkFOIG51bWJlci4KKwkJQW55IG90aGVyIG1ldGhvZCBzaG91bGQgd29yay4gIEFzayBmb3IgaW5mb3JtYXRpb24gYWJvdXQKKwkJc3BvbnNvcnNoaXAuCisKK0NyZWRpdCBDYXJkOglZb3UgY2FuIHVzZSBQYXlQYWwgdG8gc2VuZCBtb25leSB3aXRoIGEgQ3JlZGl0IGNhcmQuICBUaGlzIGlzCisJCXRoZSBtb3N0IHdpZGVseSB1c2VkIEludGVybmV0IGJhc2VkIHBheW1lbnQgc3lzdGVtLiAgSXQncworCQlyZWFsbHkgc2ltcGxlIHRvIHVzZS4gIFVzZSB0aGlzIGxpbmsgdG8gZmluZCBtb3JlIGluZm86CisJCSAgICBodHRwczovL3d3dy5wYXlwYWwuY29tL2VuX1VTL21yYi9wYWw9WEFDNjJQTUwzR0Y4UQorCQlUaGUgZS1tYWlsIGFkZHJlc3MgZm9yIHNlbmRpbmcgdGhlIG1vbmV5IHRvIGlzOgorCQkgICAgQnJhbUBpY2NmLWhvbGxhbmQub3JnCisJCUZvciBhbW91bnRzIGFib3ZlIDQwMCBFdXJvICgkNTAwKSBzZW5kaW5nIGEgY2hlY2sgaXMKKwkJcHJlZmVycmVkLgorCitPdGhlcnM6CQlUcmFuc2ZlciB0byBvbmUgb2YgdGhlc2UgYWNjb3VudHMgaWYgcG9zc2libGU6CisJCSAgICBQb3N0YmFuaywgYWNjb3VudCA0NTQ4Nzc0CisJCQkJU3dpZnQgY29kZTogSU5HQiBOTCAyQQorCQkJCUlCQU46IE5MNDcgUFNUQiAwMDA0IDU0ODcgNzQKKwkJCXVuZGVyIHRoZSBuYW1lICJzdGljaHRpbmcgSUNDRiBIb2xsYW5kIiwgVmVubG8KKwkJICAgIElmIHRoYXQgZG9lc24ndCB3b3JrOgorCQkgICAgUmFib2JhbmsgVmVubG8sIGFjY291bnQgMzc2NS4wNS4xMTcKKwkJCQlTd2lmdCBjb2RlOiBSQUJPIE5MIDJVCisJCQl1bmRlciB0aGUgbmFtZSAiQnJhbSBNb29sZW5hYXIiLCBWZW5sbworCQlPdGhlcndpc2UsIHNlbmQgYSBjaGVjayBpbiBldXJvIG9yIFVTIGRvbGxhcnMgdG8gdGhlIGFkZHJlc3MKKwkJYmVsb3cuICBNaW5pbWFsIGFtb3VudDogJDcwIChteSBiYW5rIGRvZXMgbm90IGFjY2VwdCBzbWFsbGVyCisJCWFtb3VudHMgZm9yIGZvcmVpZ24gY2hlY2ssIHNvcnJ5KQorCitBZGRyZXNzIHRvIHNlbmQgY2hlY2tzIHRvOgorCQkJc3RpY2h0aW5nIElDQ0YgSG9sbGFuZAorCQkJQnJhbSBNb29sZW5hYXIKKwkJCUZpbnN0ZXJydWV0aWhvZiAxCisJCQk4MTM0IEFkbGlzd2lsCisJCQlTd2l0emVybGFuZAorCitUaGlzIGFkZHJlc3MgaXMgZXhwZWN0ZWQgdG8gYmUgdmFsaWQgZm9yIGEgbG9uZyB0aW1lLgorCisgdmltOnR3PTc4OnRzPTg6ZnQ9aGVscDpub3JsOgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvdmltLm9yZyBiL2xpY2Vuc2VzL3ZpbS5vcmcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzczMjRjYgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL3ZpbS5vcmcKQEAgLTAsMCArMSw2IEBACitHZW50b28gbGljZW5zZSBub3RlOgorCitUaGUgZXhhY3QgbGljZW5zaW5nIHRlcm1zIG9mIHRoaXMgcGFja2FnZSBhcmUgbm90IGtub3duLiBTaW5jZSBpdCBoYXMKK2JlZW4gcG9zdGVkIGF0IHZpbS5vcmcsIHdlIGFzc3VtZSBpbiBnb29kIGZhaXRoIHRoYXQgYXQgbGVhc3QgdXNlIGFuZAorZGlzdHJpYnV0aW9uIGFyZSBwZXJtaXR0ZWQuIEFsbCBjb3B5cmlnaHQgb2YgdGhpcyBwYWNrYWdlIGlzIG93bmVkIGJ5CitpdHMgYXV0aG9yLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvdmxnb3RoaWMgYi9saWNlbnNlcy92bGdvdGhpYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYmFlMTNjCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvdmxnb3RoaWMKQEAgLTAsMCArMSw0NSBAQAorTGljZW5zZSBmb3IgVkxHb3RoaWMgRm9udCBGYW1pbHkKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoaXMgZm9udCBpbmNsdWRlcyBnbHlwaHMgZGVyaXZlZCBmcm9tIE0rIEZPTlRTIHdoaWNoIGlzIGNyZWF0ZWQgYnkKK00rIEZPTlRTIFBST0pFQ1QuIExpY2Vuc2UgZm9yIE0rIEZPTlRTIHBhcnQgaXMgZGVzY3JpYmVkIGluIE0rIEZPTlRTCitQUk9KRUNUJ3MgbGljZW5zZS4gU2VlIGF0dGFjaGVkICdMSUNFTlNFX0UubXBsdXMnLgorCitUaGlzIGZvbnQgYWxzbyBpbmNsdWRlcyBnbHlwaHMgZGVyaXZlZCBmcm9tIFNhemFuYW1pIEdvdGhpYyBmb250IHdoaWNoCitpcyBjcmVhdGVkIGJ5IEVsZWN0cm9uaWMgRm9udCBPcGVuIExhYm9yYXRvcnkgKC9lZm9udC8pLiBMaWNlbnNlcyBmb3IKK1NhemFuYW1pIEdvdGhpYyBwYXJ0IGlzIGRlc2NyaWJlZCBpbiBpdCdzIGxpY2Vuc2UuIFNlZSBhdHRhY2hlZAorJ1JFQURNRS5zYXphbmFtaScgZm9yIG9yaWdpbmFsIFNhemFuYW1pIEdvdGhpYyBmb250IGxpY2Vuc2UuCisKK1RoZXJlIGlzIG5vIGxpbWl0YXRpb24gYW5kIHRoZSBiZWxvdyBkZXNjcmlwdGlvbiBpcyBub3QgYXBwbGllZAorYXMgZm9yIGluIG9yZGVyIG5vdCB0byByZXVzZSBhcyBmb250IChleDogZm9udCBpcyBlbWJlZGVkIHRvIGRvY3VtZW50cykuCisKK0NvcHlyaWdodCAoYykgMTk5MC0yMDAzIFdhZGEgTGFib3JhdG9yeSwgdGhlIFVuaXZlcnNpdHkgb2YgVG9reW8uCitDb3B5cmlnaHQgKGMpIDIwMDMtMjAwNCBFbGVjdHJvbmljIEZvbnQgT3BlbiBMYWJvcmF0b3J5ICgvZWZvbnQvKS4KK0NvcHlyaWdodCAoQykgMjAwMy0yMDA2IE0rIEZPTlRTIFBST0pFQ1QKK0NvcHlyaWdodCAoQykgMjAwNiBEYWlzdWtlIFNVWlVLSSA8ZGFpc3VrZUB2aW5lbGludXgub3JnPi4KK0NvcHlyaWdodCAoQykgMjAwNiBQcm9qZWN0IFZpbmUgPFZpbmVAdmluZWxpbnV4Lm9yZz4uCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uCisgICBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFdhZGEgTGFib3JhdG9yeSwgdGhlIFVuaXZlcnNpdHkgb2YgVG9reW8gbm9yCisgICB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFdBREEgTEFCT1JBVE9SWSwgVEhFIFVOSVZFUlNJVFkgT0YgVE9LWU8gQU5ECitDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUCitOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEKK1BBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBMQUJPUkFUT1JZIE9SCitDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKK0VYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKK1BST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOworT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCitXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgorT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCmRpZmYgLS1naXQgYS9saWNlbnNlcy92bWQgYi9saWNlbnNlcy92bWQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzYyZjQ3MgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL3ZtZApAQCAtMCwwICsxLDEzNSBAQAorVU5JVkVSU0lUWSBPRiBJTExJTk9JUworVklTVUFMIE1PTEVDVUxBUiBEWU5BTUlDUyBTT0ZUV0FSRSBMSUNFTlNFIEFHUkVFTUVOVAorCitVcG9uIGV4ZWN1dGlvbiBvZiB0aGlzIEFncmVlbWVudCBieSB0aGUgcGFydHkgaWRlbnRpZmllZCBiZWxvdyAoIkxpY2Vuc2VlIiksIAorVGhlIEJvYXJkIG9mIFRydXN0ZWVzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIElsbGlub2lzICAoIklsbGlub2lzIiksIG9uIGJlaGFsZiAKK29mIFRoZSBUaGVvcmV0aWNhbCBhbmQgQ29tcHV0YXRpb25hbCBCaW9waHlzaWNzIEdyb3VwICgiVENCRyIpIGluIHRoZSBCZWNrbWFuIAorSW5zdGl0dXRlLCB3aWxsIHByb3ZpZGUgdGhlIFZpc3VhbCBNb2xlY3VsYXIgRHluYW1pY3MgKCJWTUQiKSBzb2Z0d2FyZSBpbiAKK0V4ZWN1dGFibGVDb2RlIGFuZC9vciBTb3VyY2UgQ29kZSBmb3JtICgiU29mdHdhcmUiKSB0byBMaWNlbnNlZSwgc3ViamVjdCB0byAKK3RoZSBmb2xsb3dpbmcgdGVybXMgYW5kIGNvbmRpdGlvbnMuIEZvciBwdXJwb3NlcyBvZiB0aGlzIEFncmVlbWVudCwgCitFeGVjdXRhYmxlIENvZGUgaXMgdGhlIGNvbXBpbGVkIGNvZGUsIHdoaWNoIGlzIHJlYWR5IHRvIHJ1biBvbiBMaWNlbnNlZSdzCitjb21wdXRlci4gU291cmNlIGNvZGUgY29uc2lzdHMgb2YgYSBzZXQgb2YgZmlsZXMgd2hpY2ggY29udGFpbiB0aGUgYWN0dWFsIAorcHJvZ3JhbSBjb21tYW5kcyB0aGF0IGFyZSBjb21waWxlZCB0byBmb3JtIHRoZSBFeGVjdXRhYmxlIENvZGUuCisKKzEuIFRoZSBTb2Z0d2FyZSBpcyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb3duZWQgYnkgSWxsaW5vaXMsIGFuZCBhbGwgcmlnaHQsIAordGl0bGUgYW5kIGludGVyZXN0LCBpbmNsdWRpbmcgY29weXJpZ2h0LCByZW1haW4gd2l0aCBJbGxpbm9pcy4gIElsbGlub2lzIAorZ3JhbnRzLCBhbmQgTGljZW5zZWUgaGVyZWJ5IGFjY2VwdHMsIGEgcmVzdHJpY3RlZCwgbm9uLWV4Y2x1c2l2ZSwgCitub24tdHJhbnNmZXJhYmxlIGxpY2Vuc2UgdG8gdXNlIHRoZSBTb2Z0d2FyZSBmb3IgYWNhZGVtaWMsIHJlc2VhcmNoIGFuZCAKK2ludGVybmFsIGJ1c2luZXNzIHB1cnBvc2VzIG9ubHksIGUuZy4gbm90IGZvciBjb21tZXJjaWFsIHVzZSAoc2VlIENsYXVzZSA3IAorYmVsb3cpLCB3aXRob3V0IGEgZmVlLgorCisyLiBMaWNlbnNlZSBtYXksIGF0IGl0cyBvd24gZXhwZW5zZSwgY3JlYXRlIGFuZCBmcmVlbHkgZGlzdHJpYnV0ZSAKK2NvbXBsaW1lbnRhcnkgd29ya3MgdGhhdCBpbnRlcm9wZXJhdGUgd2l0aCB0aGUgU29mdHdhcmUsIGRpcmVjdGluZyBvdGhlcnMgdG8gCit0aGUgVENCRyBzZXJ2ZXIgdG8gbGljZW5zZSBhbmQgb2J0YWluIHRoZSBTb2Z0d2FyZSBpdHNlbGYuIExpY2Vuc2VlIG1heSwgYXQgCitpdHMgb3duIGV4cGVuc2UsIG1vZGlmeSB0aGUgU29mdHdhcmUgdG8gbWFrZSBkZXJpdmF0aXZlIHdvcmtzLiAgRXhjZXB0IGFzIAorZXhwbGljaXRseSBwcm92aWRlZCBiZWxvdywgdGhpcyBMaWNlbnNlIHNoYWxsIGFwcGx5IHRvIGFueSBkZXJpdmF0aXZlIHdvcmsgCithcyBpdCBkb2VzIHRvIHRoZSBvcmlnaW5hbCBTb2Z0d2FyZSBkaXN0cmlidXRlZCBieSBJbGxpbm9pcy4gIEFueSBkZXJpdmF0aXZlIAord29yayBzaG91bGQgYmUgY2xlYXJseSBtYXJrZWQgYW5kIHJlbmFtZWQgdG8gbm90aWZ5IHVzZXJzIHRoYXQgaXQgaXMgYSAKK21vZGlmaWVkIHZlcnNpb24gYW5kIG5vdCB0aGUgb3JpZ2luYWwgU29mdHdhcmUgZGlzdHJpYnV0ZWQgYnkgSWxsaW5vaXMuICAKK0xpY2Vuc2VlIGFncmVlcyB0byByZXByb2R1Y2UgdGhlIGNvcHlyaWdodCBub3RpY2UgYW5kIG90aGVyIHByb3ByaWV0YXJ5IAorbWFya2luZ3Mgb24gYW55IGRlcml2YXRpdmUgd29yayBhbmQgdG8gaW5jbHVkZSBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvZiBzdWNoIAord29yayB0aGUgYWNrbm93bGVkZ2VtZW50OgorCisgIlRoaXMgc29mdHdhcmUgaW5jbHVkZXMgY29kZSBkZXZlbG9wZWQgYnkgdGhlIFRoZW9yZXRpY2FsIGFuZCBDb21wdXRhdGlvbmFsIAorICBCaW9waHlzaWNzIEdyb3VwIGluIHRoZSBCZWNrbWFuIEluc3RpdHV0ZSBmb3IgQWR2YW5jZWQgU2NpZW5jZSBhbmQgCisgIFRlY2hub2xvZ3kgYXQgdGhlIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMgYXQgVXJiYW5hLUNoYW1wYWlnbi4iCisKK0xpY2Vuc2VlIG1heSByZWRpc3RyaWJ1dGUgd2l0aG91dCByZXN0cmljdGlvbiB3b3JrcyB3aXRoIHVwIHRvIDEvMiBvZiB0aGVpciAKK25vbi1jb21tZW50IHNvdXJjZSBjb2RlIGRlcml2ZWQgZnJvbSBhdCBtb3N0IDEvMTAgb2YgdGhlIG5vbi1jb21tZW50IHNvdXJjZSAKK2NvZGUgZGV2ZWxvcGVkIGJ5IElsbGlub2lzIGFuZCBjb250YWluZWQgaW4gdGhlIFNvZnR3YXJlLCBwcm92aWRlZCB0aGF0IHRoZSAKK2Fib3ZlIGRpcmVjdGlvbnMgZm9yIG5vdGljZSBhbmQgYWNrbm93bGVkZ2VtZW50IGFyZSBvYnNlcnZlZC4gIEFueSBvdGhlciAKK2Rpc3RyaWJ1dGlvbiBvZiB0aGUgU29mdHdhcmUgb3IgYW55IGRlcml2YXRpdmUgd29yayByZXF1aXJlcyBhIHNlcGFyYXRlIAorbGljZW5zZSB3aXRoIElsbGlub2lzLiAgTGljZW5zZWUgbWF5IGNvbnRhY3QgSWxsaW5vaXMgKHZtZEBrcy51aXVjLmVkdSkgdG8gCituZWdvdGlhdGUgYW4gYXBwcm9wcmlhdGUgbGljZW5zZSBmb3Igc3VjaCBkaXN0cmlidXRpb24uCisKKzMuIEV4Y2VwdCBhcyBleHByZXNzbHkgc2V0IGZvcnRoIGluIHRoaXMgQWdyZWVtZW50LCBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIAorIkFTIElTIiBBTkQgSUxMSU5PSVMgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIEFORCBFWFRFTkRTIE5PIFdBUlJBTlRJRVMgT0YgCitBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBXQVJSQU5USUVTIAorT1IgTUVSQ0hBTlRBQklMSVRZIE9SIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBPUiBUSEFUIFRIRSBVU0UgT0YgCitUSEUgU09GVFdBUkUgV0lMTCBOT1QgSU5GUklOR0UgQU5ZIFBBVEVOVCwgVFJBREVNQVJLLCBPUiBPVEhFUiBSSUdIVFMuIAorTElDRU5TRUUgQVNTVU1FUyBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFJFU1VMVFMgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSAKK1NPRlRXQVJFIEFORC9PUiBBU1NPQ0lBVEVEIE1BVEVSSUFMUy4gIExJQ0VOU0VFIEFHUkVFUyBUSEFUIFVOSVZFUlNJVFkgU0hBTEwgCitOT1QgQkUgSEVMRCBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsSU5ESVJFQ1QsIENPTlNFUVVFTlRJQUwsIE9SIElOQ0lERU5UQUwgCitEQU1BR0VTIFdJVEggUkVTUEVDVCBUTyBBTlkgQ0xBSU0gQlkgTElDRU5TRUUgT1IgQU5ZIFRISVJEIFBBUlRZIE9OIEFDQ09VTlQgCitPRiBPUiBBUklTSU5HIEZST00gVEhJUyBBR1JFRU1FTlQgT1IgVVNFIE9GIFRIRSBTT0ZUV0FSRSBBTkQvT1IgQVNTT0NJQVRFRCAKK01BVEVSSUFMUy4KKworNC4gTGljZW5zZWUgdW5kZXJzdGFuZHMgdGhlIFNvZnR3YXJlIGlzIHByb3ByaWV0YXJ5IHRvIElsbGlub2lzLiBMaWNlbnNlZSAgCithZ3JlZXMgdG8gdGFrZSBhbGwgcmVhc29uYWJsZSBzdGVwcyB0byBpbnN1cmUgdGhhdCB0aGUgU29mdHdhcmVpcyAgCitwcm90ZWN0ZWQgYW5kIHNlY3VyZWQgZnJvbSB1bmF1dGhvcml6ZWQgZGlzY2xvc3VyZSwgdXNlLCBvciByZWxlYXNlIGFuZCAgCit3aWxsIHRyZWF0IGl0IHdpdGggYXQgbGVhc3QgdGhlIHNhbWUgbGV2ZWwgb2YgY2FyZSBhcyBMaWNlbnNlZSB3b3VsZCB1c2UgdG8gIAorcHJvdGVjdCBhbmQgc2VjdXJlIGl0cyBvd24gcHJvcHJpZXRhcnkgY29tcHV0ZXIgcHJvZ3JhbXMgYW5kL29yIGluZm9ybWF0aW9uLCAKK2J1dCB1c2luZyBubyBsZXNzIHRoYW4gYSByZWFzb25hYmxlIHN0YW5kYXJkIG9mIGNhcmUuICBMaWNlbnNlZSBhZ3JlZXMgdG8gCitwcm92aWRlIHRoZSBTb2Z0d2FyZSBvbmx5IHRvIGFueSBvdGhlciBwZXJzb24gb3IgZW50aXR5IHdobyBoYXMgcmVnaXN0ZXJlZCAKK3dpdGggSWxsaW5vaXMuIElmIGxpY2Vuc2VlIGlzIG5vdCByZWdpc3RlcmluZyBhcyBhbiBpbmRpdmlkdWFsIGJ1dCBhcyBhbiAKK2luc3RpdHV0aW9uIG9yIGNvcnBvcmF0aW9uIGVhY2ggbWVtYmVyIG9mIHRoZSBpbnN0aXR1dGlvbiBvciBjb3Jwb3JhdGlvbiAKK3dobyBoYXMgYWNjZXNzIHRvIG9yIHVzZXMgU29mdHdhcmUgbXVzdCBhZ3JlZSB0byBhbmQgYWJpZGUgYnkgdGhlIHRlcm1zIAorb2YgdGhpcyBsaWNlbnNlLiBJZiBMaWNlbnNlZSBiZWNvbWVzIGF3YXJlIG9mIGFueSB1bmF1dGhvcml6ZWQgbGljZW5zaW5nLCAKK2NvcHlpbmcgb3IgdXNlIG9mIHRoZSBTb2Z0d2FyZSwgTGljZW5zZWUgc2hhbGwgcHJvbXB0bHkgbm90aWZ5IElsbGlub2lzIAoraW4gd3JpdGluZy4gTGljZW5zZWUgZXhwcmVzc2x5IGFncmVlcyB0byB1c2UgdGhlIFNvZnR3YXJlIG9ubHkgaW4gdGhlIAorbWFubmVyIGFuZCBmb3IgdGhlIHNwZWNpZmljIHVzZXMgYXV0aG9yaXplZCBpbiB0aGlzIEFncmVlbWVudC4KKworNS4gQnkgdXNpbmcgb3IgY29weWluZyB0aGlzIFNvZnR3YXJlLCBMaWNlbnNlZSBhZ3JlZXMgdG8gYWJpZGUgYnkgdGhlICAKK2NvcHlyaWdodCBsYXcgYW5kIGFsbCBvdGhlciBhcHBsaWNhYmxlIGxhd3Mgb2YgdGhlIFUuUy4gaW5jbHVkaW5nLCBidXQgbm90ICAKK2xpbWl0ZWQgdG8sIGV4cG9ydCBjb250cm9sIGxhd3MgYW5kIHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UuIElsbGlub2lzICAKK3NoYWxsIGhhdmUgdGhlIHJpZ2h0IHRvIHRlcm1pbmF0ZSB0aGlzIGxpY2Vuc2UgaW1tZWRpYXRlbHkgYnkgd3JpdHRlbiAgCitub3RpY2UgdXBvbiBMaWNlbnNlZSdzIGJyZWFjaCBvZiwgb3Igbm9uLWNvbXBsaWFuY2Ugd2l0aCwgYW55Cit0ZXJtcyBvZiB0aGUgbGljZW5zZS4gTGljZW5zZWUgbWF5IGJlIGhlbGQgbGVnYWxseSByZXNwb25zaWJsZSBmb3IgYW55ICAKK2NvcHlyaWdodCBpbmZyaW5nZW1lbnQgdGhhdCBpcyBjYXVzZWQgb3IgZW5jb3VyYWdlZCBieSBpdHMgZmFpbHVyZSB0byAgCithYmlkZWJ5IHRoZSB0ZXJtcyBvZiB0aGlzIGxpY2Vuc2UuIFVwb24gdGVybWluYXRpb24sIExpY2Vuc2VlIGFncmVlcyB0byAgCitkZXN0cm95YWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUgaW4gaXRzIHBvc3Nlc3Npb24gYW5kIHRvIHZlcmlmeSBzdWNoICAKK2Rlc3RydWN0aW9uIGluIHdyaXRpbmcuCisKKzYuIFRoZSB1c2VyIGFncmVlcyB0aGF0IGFueSByZXBvcnRzIG9yIHB1Ymxpc2hlZCByZXN1bHRzIG9idGFpbmVkIHdpdGggIAordGhlIFNvZnR3YXJlIHdpbGwgYWNrbm93bGVkZ2UgaXRzIHVzZSBieSB0aGUgYXBwcm9wcmlhdGUgY2l0YXRpb24gYXMgIAorZm9sbG93czoKKworIlZNRCB3YXMgZGV2ZWxvcGVkIGJ5IHRoZSBUaGVvcmV0aWNhbCBhbmQgQ29tcHV0YXRpb25hbCBCaW9waHlzaWNzIEdyb3VwIAorIGluIHRoZSBCZWNrbWFuIEluc3RpdHV0ZSBmb3IgQWR2YW5jZWQgU2NpZW5jZSBhbmQgVGVjaG5vbG9neSBhdCB0aGUgCisgVW5pdmVyc2l0eSBvZiBJbGxpbm9pcyBhdCBVcmJhbmEtQ2hhbXBhaWduLiIKKworQW55IHB1Ymxpc2hlZCB3b3JrIHdoaWNoIHV0aWxpemVzIFZNRCBzaGFsbCBpbmNsdWRlIHRoZSBmb2xsb3dpbmcgcmVmZXJlbmNlOgorIkh1bXBocmV5LCBXLiwgRGFsa2UsIEEuIGFuZCBTY2h1bHRlbiwgSy4sIGBWTUQgLVZpc3VhbCBNb2xlY3VsYXIgICAKK0R5bmFtaWNzJywgSi4gTW9sZWN1bGFyIEdyYXBoaWNzLCAxOTk2LCB2b2wuIDE0LCBwcC4gMzMtMzguIgorCitFbGVjdHJvbmljIGRvY3VtZW50cyB3aWxsIGluY2x1ZGUgYSBkaXJlY3QgbGluayB0byB0aGUgb2ZmaWNpYWwgVk1EIHBhZ2UgIAorYXQgIGh0dHA6Ly93d3cua3MudWl1Yy5lZHUvUmVzZWFyY2gvdm1kLworCis3LiBDb21tZXJjaWFsIHVzZSBvZiB0aGUgU29mdHdhcmUsIG9yIGRlcml2YXRpdmUgd29ya3MgYmFzZWQgdGhlcmVvbiwgIAorUkVRVUlSRVMgQSBDT01NRVJDSUFMIExJQ0VOU0UuICBTaG91bGQgTGljZW5zZWUgd2lzaCB0byBtYWtlIGNvbW1lcmNpYWwgCit1c2Ugb2YgdGhlIFNvZnR3YXJlLCBMaWNlbnNlZSB3aWxsIGNvbnRhY3QgSWxsaW5vaXMgKHZtZEBrcy51aXVjLmVkdSkgdG8gCituZWdvdGlhdGUgYW4gYXBwcm9wcmlhdGUgbGljZW5zZSBmb3Igc3VjaCB1c2UuIENvbW1lcmNpYWwgdXNlIGluY2x1ZGVzOiAKKygxKSBpbnRlZ3JhdGlvbiBvZiBhbGwgb3IgcGFydCBvZiB0aGUgU29mdHdhcmUgaW50byBhIHByb2R1Y3QgZm9yIHNhbGUsIAorbGVhc2Ugb3IgbGljZW5zZSBieSBvciBvbiBiZWhhbGYgb2YgTGljZW5zZWUgdG8gdGhpcmQgcGFydGllcywgb3IgCisoMikgZGlzdHJpYnV0aW9uIG9mIHRoZSBTb2Z0d2FyZSB0byB0aGlyZCBwYXJ0aWVzIHRoYXQgbmVlZCBpdCB0byAKK2NvbW1lcmNpYWxpemUgcHJvZHVjdCBzb2xkIG9yIGxpY2Vuc2VkIGJ5IG9yIG9uIGJlaGFsZiBvZiBMaWNlbnNlZS4KKworOC4gR292ZXJubWVudCBSaWdodHMuIEJlY2F1c2Ugc3Vic3RhbnRpYWwgZ292ZXJubWVudGFsIGZ1bmRzIGhhdmUgYmVlbiAgCit1c2VkIGluIHRoZSBkZXZlbG9wbWVudCBvZiBWTUQsIGFueSBwb3NzZXNzaW9uLCB1c2Ugb3Igc3VibGljZW5zZSBvZiB0aGUgIAorU29mdHdhcmUgYnkgb3IgdG8gdGhlIFVuaXRlZCBTdGF0ZXMgZ292ZXJubWVudCBzaGFsbCBiZSBzdWJqZWN0IHRvIHN1Y2ggIAorcmVxdWlyZWQgcmVzdHJpY3Rpb25zLgorCis5LiBWTUQgaXMgYmVpbmcgZGlzdHJpYnV0ZWQgYXMgYSByZXNlYXJjaCBhbmQgdGVhY2hpbmcgdG9vbCBhbmQgYXMgIAorc3VjaCwgVENCRyBlbmNvdXJhZ2VzIGNvbnRyaWJ1dGlvbnMgZnJvbSB1c2VycyBvZiB0aGUgY29kZSB0aGF0IG1pZ2h0LCBhdCAgCitJbGxpbm9pcycgc29sZSBkaXNjcmV0aW9uLCBiZSB1c2VkIG9yIGluY29ycG9yYXRlZCB0byBtYWtlIHRoZSBiYXNpYyAgCitvcGVyYXRpbmcgZnJhbWV3b3JrIG9mIHRoZSBTb2Z0d2FyZSBhIG1vcmUgc3RhYmxlLCBmbGV4aWJsZSwgYW5kL29yIHVzZWZ1bCAgCitwcm9kdWN0LiAgTGljZW5zZWVzIHdobyBjb250cmlidXRlIHRoZWlyIGNvZGUgdG8gYmVjb21lIGFuIGludGVybmFsICAKK3BvcnRpb24gb2YgdGhlIFNvZnR3YXJlIGFncmVlIHRoYXQgc3VjaCBjb2RlIG1heSBiZSBkaXN0cmlidXRlZCBieSAgCitJbGxpbm9pcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCBtYXkgYmUgcmVxdWlyZWQgdG8gc2lnbiBhbiAgCisiQWdyZWVtZW50IFJlZ2FyZGluZyBDb250cmlidXRvcnkgQ29kZSBmb3IgVk1EIFNvZnR3YXJlIiBiZWZvcmUgSWxsaW5vaXMgIAorY2FuIGFjY2VwdCBpdCAoY29udGFjdCB2bWRAa3MudWl1Yy5lZHUgZm9yIGEgY29weSkuCisKK1VOREVSU1RPT0QgQU5EIEFHUkVFRC4KKworCitDb250YWN0IEluZm9ybWF0aW9uOgorCitUaGUgYmVzdCBjb250YWN0IHBhdGggZm9yIGxpY2Vuc2luZyBpc3N1ZXMgaXMgYnkgZS1tYWlsIHRvICAKK3ZtZEBrcy51aXVjLmVkdSBvciBzZW5kIGNvcnJlc3BvbmRlbmNlIHRvOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWTUQgVGVhbQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUaGVvcmV0aWNhbCBhbmQgQ29tcHV0YXRpb25hbCBCaW9waHlzaWNzIEdyb3VwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJlY2ttYW4gSW5zdGl0dXRlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVuaXZlcnNpdHkgb2YgSWxsaW5vaXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNDA1IE5vcnRoIE1hdGhld3MgTUMtMjUxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVyYmFuYSwgSWxsaW5vaXMgNjE4MDEgVVNBCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZBWDogKDIxNykgMjQ0LTYwNzgKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL3Ztd2FyZSBiL2xpY2Vuc2VzL3Ztd2FyZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGRhYTA3Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvdm13YXJlCkBAIC0wLDAgKzEsMjIxIEBACisgICAgICAgICAgICAgICAgICAgRU5EIFVTRVIgTElDRU5TRSBBR1JFRU1FTlQKKyAgICAgICAgICAgICBGT1IgVk1XQVJFKFRNKSBERVNLVE9QIFNPRlRXQVJFIFBST0RVQ1QKKworCitWTVdBUkUsIElOQy4gTElDRU5TRVMgVEhJUyBERVNLVE9QIFNPRlRXQVJFIFBST0RVQ1QgVE8gWU9VIFNVQkpFQ1QgVE8KK1lPVVIgQUNDRVBUQU5DRSBPRiBBTEwgT0YgVEhFIFRFUk1TIENPTlRBSU5FRCBJTiBUSElTIEVORCBVU0VSIExJQ0VOU0UKK0FHUkVFTUVOVCAoIkVVTEEiKS4gIFJFQUQgVEhFIFRFUk1TIE9GIFRISVMgRVVMQSBDQVJFRlVMTFkuICBJRiBZT1UgRE8KK05PVCBBQ0NFUFQgVEhJUyBBR1JFRU1FTlQgQU5EIFlPVSBIQVZFIFBST09GIE9GIFBBWU1FTlQsIFlPVSBNQVkgUkVUVVJOCitUSEUgVU5PUEVORUQgU09GVFdBUkUgVE8gVEhFIExPQ0FUSU9OIEFUIFdISUNIIFlPVSBBQ1FVSVJFRCBJVCBXSVRISU4KK1RISVJUWSAgKDMwKSBEQVlTIEZPUiBBIFJFRlVORCBPRiBUSEUgTElDRU5TRSBGRUUuICBJRiBZT1UgQVJFIFZJRVdJTkcKK1RISVMgRVVMQSBFTEVDVFJPTklDQUxMWSwgU0VMRUNUIFRIRSAiWUVTIiBCVVRUT04gQVQgVEhFIEJPVFRPTSBPRiBUSElTCitQQUdFIFRPIElORElDQVRFIFlPVVIgQUdSRUVNRU5UIFRPIFRIRSBURVJNUyBPRiBUSElTIEVVTEEuICBJRiBZT1UgQVJFIE5PVAorV0lMTElORyBUTyBCRSBCT1VORCBCWSBJVFMgVEVSTVMsIFNFTEVDVCBUSEUgIk5PIiBCVVRUT04gQVQgVEhFIEJPVFRPTSBPRgorVEhJUyBQQUdFIEFORCBUSEUgUkVHSVNUUkFUSU9OIE9SIElOU1RBTExBVElPTiBQUk9DRVNTIFdJTEwgTk9UIENPTlRJTlVFLgorCitOT1RJQ0UgVE8gQ1VTVE9NRVIKK0lmIHlvdSBkbyBub3QgYWdyZWUgdG8gdGhlIHRlcm1zIG9mIHRoaXMgRVVMQSwgZG8gbm90IGluc3RhbGwsIGFjdGl2YXRlLAorb3IgdXNlIHRoaXMgc29mdHdhcmUuICBUaGlzIEVVTEEgaXMgYSBjb250cmFjdCBiZXR3ZWVuIHlvdSAoZWl0aGVyIGFuCitpbmRpdmlkdWFsIG9yIGFuIGVudGl0eSkgYW5kIFZNd2FyZSwgSW5jLiAoIlZNd2FyZSIpLCB3aGljaCBnb3Zlcm5zCit5b3VyIHVzZSBvZiB0aGUgVk13YXJlIHNvZnR3YXJlIHByb2R1Y3QgdGhhdCBhY2NvbXBhbmllcyB0aGlzIEVVTEEKK2FuZCByZWxhdGVkIHNvZnR3YXJlIGNvbXBvbmVudHMsIHdoaWNoIG1heSBpbmNsdWRlIGFzc29jaWF0ZWQgbWVkaWEsCitwcmludGVkIG1hdGVyaWFscywgYW5kIG9ubGluZSBvciBlbGVjdHJvbmljIGRvY3VtZW50YXRpb24uCisKK0RFRklOSVRJT05TCitJbiB0aGlzIEVVTEEsIHRoZSBEZXNrdG9wIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIG1lZGlhLCBwcmludGVkCittYXRlcmlhbHMsIGFuZCBvbmxpbmUgb3IgZWxlY3Ryb25pYyBkb2N1bWVudGF0aW9uIGFyZSBjb2xsZWN0aXZlbHkKK3JlZmVycmVkIHRvIGFzIHRoZSAiU29mdHdhcmUuIiAgV2hlbiBpbnN0YWxsZWQsIHRoZSBTb2Z0d2FyZSBlbmFibGVzCit5b3UgdG8gcnVuIG9uZSBvciBtb3JlIGluc3RhbmNlcyBvZiB0aGlyZC1wYXJ0eSBvcGVyYXRpbmcgc3lzdGVtcworKCJHdWVzdCBPcGVyYXRpbmcgU3lzdGVtcyIpIGFuZCBhcHBsaWNhdGlvbnMgb24gYSBzaW5nbGUgY29tcHV0ZXIgc3lzdGVtLgorQSBzb2Z0d2FyZSBhY3RpdmF0aW9uIGZpbGUgYW5kIGEgc2VyaWFsIG51bWJlciAoIlNvZnR3YXJlIExpY2Vuc2UgS2V5IikKK2lzc3VlZCB0byB5b3UgYnkgVk13YXJlIGFyZSByZXF1aXJlZCB0byB1c2UgdGhlIFNvZnR3YXJlLiAgVGhlIHRlcm0KKyJOdW1iZXIgb2YgTGljZW5zZWQgVXNlcnMiIG1lYW5zIHRoZSBudW1iZXIgb25lICgxKSwgdW5sZXNzIHlvdSByZWNlaXZlZAorYSBWTXdhcmUgTGljZW5zZSBDZXJ0aWZpY2F0ZSB3aXRoIHRoaXMgc29mdHdhcmUgcHJvZHVjdCwgaW4gd2hpY2ggY2FzZQordGhlIHRlcm0gIk51bWJlciBvZiBMaWNlbnNlZCBVc2VycyIgbWVhbnMgdGhlIE51bWJlciBvZiBMaWNlbnNlZCBVc2Vycworc2V0IGZvcnRoIG9uIHRoZSBWTXdhcmUgTGljZW5zZSBDZXJ0aWZpY2F0ZS4KKworV0FSTklORyBGT1IgRVZBTFVBVElPTiBMSUNFTlNFRVMKK1RoZSBTb2Z0d2FyZSBjYW4gYmUgYWN0aXZhdGVkIHdpdGggYSBuby1jb3N0IGV2YWx1YXRpb24gU29mdHdhcmUKK0xpY2Vuc2UgS2V5LiAgRXZhbHVhdGlvbiBTb2Z0d2FyZSBMaWNlbnNlIEtleXMgaGF2ZSBhbiBleHBpcmF0aW9uIGRhdGUKKygiRXhwaXJhdGlvbiBEYXRlIikuICBJZiB5b3UgYWN0aXZhdGUgdGhlIFNvZnR3YXJlIHdpdGggYW4gZXZhbHVhdGlvbgorU29mdHdhcmUgTGljZW5zZSBLZXk6IChpKSB5b3UgbWF5IHVzZSB0aGUgU29mdHdhcmUgdW50aWwgdGhlIEV4cGlyYXRpb24KK0RhdGUgb25seSB0byBldmFsdWF0ZSB0aGUgc3VpdGFiaWxpdHkgb2YgdGhlIFNvZnR3YXJlIGZvciBsaWNlbnNpbmcKK29uIGEgZm9yLWZlZSBiYXNpczsgKGlpKSB0aGUgbGltaXRlZCA5MC1kYXkgd2FycmFudHkgYmVsb3cgaXMgbm90CithcHBsaWNhYmxlIHRvIHlvdTsgYW5kIChpaWkpIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCBUTyBZT1UgIkFTIElTIgorV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgV0hFVEhFUiBFWFBSRVNTLCBJTVBMSUVELCBTVEFUVVRPUlksIE9SCitPVEhFUldJU0UuICBWTVdBUkUgQkVBUlMgTk8gTElBQklMSVRZIEZPUiBBTlkgREFNQUdFUyBSRVNVTFRJTkcgRlJPTSBVU0UKKyhPUiBBVFRFTVBURUQgVVNFKSBPRiBUSEUgU09GVFdBUkUgVEhST1VHSCBPUiBBRlRFUiBUSEUgRVhQSVJBVElPTiBEQVRFLAorQU5EIEhBUyBOTyBEVVRZIFRPIFBST1ZJREUgU1VQUE9SVCBUTyBZT1UuCisKK0xJQ0VOU0UKK1RoZSBTb2Z0d2FyZSBpcyBsaWNlbnNlZCwgbm90IHNvbGQuICBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgbGltaXRhdGlvbnMKK29mIHRoaXMgRVVMQSwgVk13YXJlIGhlcmVieSBncmFudHMgeW91IGEgbm9uZXhjbHVzaXZlLCBub250cmFuc2ZlcmFibGUKK2xpY2Vuc2UsIHdpdGhvdXQgcmlnaHRzIHRvIHN1YmxpY2Vuc2UsIHRvIChpKSBtYWtlIGEgbnVtYmVyIG9mIGNvcGllcworb2YgdGhlIFNvZnR3YXJlIGxlc3MgdGhhbiBvciBlcXVhbCB0byB0aGUgTnVtYmVyIG9mIExpY2Vuc2VkIFVzZXJzIGZvcgordGhlIHB1cnBvc2Ugb2YgaW5zdGFsbGluZyBhIHNpbmdsZSBjb3B5IG9mIHRoZSBTb2Z0d2FyZSBvbiBhbiBlcXVpdmFsZW50CitudW1iZXIgb2YgY29tcHV0ZXJzLCBlYWNoIG9mIHdoaWNoIGlzIHJ1bm5pbmcgYSB2YWxpZGx5IGxpY2Vuc2VkIGNvcHkKK29mIHRoZSBvcGVyYXRpbmcgc3lzdGVtIGZvciB3aGljaCB0aGUgU29mdHdhcmUgaXMgZGVzaWduZWQ7IChpaSkgdXNlCit0aGUgU29mdHdhcmUgTGljZW5zZSBLZXkgdG8gYWN0aXZhdGUgZWFjaCBjb3B5IG9mIHRoZSBTb2Z0d2FyZSBtYWRlIGluCithY2NvcmRhbmNlIHdpdGggc3ViLWNsYXVzZSAoaSk7IChpaWkpIGhhdmUgdXAgdG8gdGhlIE51bWJlciBvZiBMaWNlbnNlZAorVXNlcnMgdXNlIHRoZSBTb2Z0d2FyZSAoaW4gb2JqZWN0IGNvZGUgZm9ybSBvbmx5KSBzb2xlbHkgZm9yIHlvdXIKK293biBpbnRlcm5hbCBpbmZvcm1hdGlvbiBwcm9jZXNzaW5nIHNlcnZpY2VzIGFuZCBjb21wdXRpbmcgbmVlZHM7IGFuZAorKGl2KSB1c2UgdGhlIGRvY3VtZW50YXRpb24gYWNjb21wYW55aW5nIHRoZSBTb2Z0d2FyZSBpbiBjb25uZWN0aW9uIHdpdGgKK3Blcm1pdHRlZCB1c2VzIG9mIHRoZSBTb2Z0d2FyZS4gIElmIHlvdSBhcmUgYW4gZW50aXR5LCBlYWNoIGNvcHkgb2YgdGhlCitTb2Z0d2FyZSBtYXkgYmUgdXNlZCBieSBvbmUgZGVzaWduYXRlZCBpbmRpdmlkdWFsIHVzZXIgb25seS4gIFRoZSB0b3RhbAorbnVtYmVyIG9mIGRlc2lnbmF0ZWQgdXNlcnMgbWF5IG5vdCBleGNlZWQgdGhlIE51bWJlciBvZiBMaWNlbnNlZCBVc2Vycy4KK0VhY2ggY29weSBvZiB0aGUgU29mdHdhcmUgbWF5IG5vdCBiZSB1c2VkIGJ5IGFueSBvdGhlciBwZXJzb24sIHdoZXRoZXIgb3IKK25vdCBzdWNoIHBlcnNvbiBpcyBlbXBsb3llZCBieSBvciBvdGhlcndpc2UgYXNzb2NpYXRlZCB3aXRoIHlvdXIgZW50aXR5LgorCitMSU1JVEVEIFNIQVJFRCBVU0UgTElDRU5TRQorRm9yIHNoYXJlZCB1c2UgY29tcHV0aW5nIGxhYm9yYXRvcnkgZW52aXJvbm1lbnRzIHdpdGhpbiBhY2FkZW1pYworaW5zdGl0dXRpb25zLCB0aGUgbGljZW5zZSBncmFudCBhYm92ZSBzaGFsbCBiZSBtb2RpZmllZCB0byBwZXJtaXQgdXNlCitvZiB0aGUgU29mdHdhcmUgb24gYSBzaW5nbGUgY29tcHV0ZXIgc3lzdGVtIHdpdGhvdXQgdGhlIGxpbWl0YXRpb24KK3RoYXQgc3VjaCB1c2UgYmUgbGltaXRlZCB0byB0aGUgZGVzaWduYXRlZCB1c2VyKHMpOyBwcm92aWRlZCB0aGF0IGFueQorc3VjaCB1c2VyKHMpIGFncmVlIHRvIGFuZCBhYmlkZSBieSB0aGUgdGVybXMgb2YgdGhpcyBFVUxBOyBwcm92aWRlZAorZnVydGhlciB0aGF0IHlvdSBtdXN0IGFjcXVpcmUgYW5kIGRlZGljYXRlIGEgU29mdHdhcmUgTGljZW5zZSBLZXkgZm9yCitlYWNoIHNlcGFyYXRlIGNvbXB1dGVyIHN5c3RlbSBvbiB3aGljaCB0aGUgU29mdHdhcmUgaXMgaW5zdGFsbGVkLiBVbmRlcgordGhpcyBzaGFyZWQgY29tcHV0aW5nIGxhYm9yYXRvcnkgdXNlIGxpY2Vuc2UsIGEgY29tcHV0aW5nIGxhYm9yYXRvcnkgYXQKK2FuIGFjYWRlbWljIGluc3RpdHV0aW9uIGhhdmluZyB0ZW4gY29tcHV0ZXJzIGxvYWRlZCB3aXRoIHRoZSBTb2Z0d2FyZQorb24gd2hpY2ggbm8gbW9yZSB0aGFuIGZpdmUgdXNlcnMgd291bGQgY29uY3VycmVudGx5IGFjY2VzcyBhbmQgdXNlIHRoZQorU29mdHdhcmUsIGZvciBleGFtcGxlLCB3b3VsZCByZXF1aXJlIHRlbiBTb2Z0d2FyZSBMaWNlbnNlIEtleXMuIFVubGVzcwordGhlIGNvbXB1dGluZyBsYWJvcmF0b3J5IGlzIG9wZXJhdGVkIGFuZCBtYWludGFpbmVkIGJ5IGFuZCB3aXRoaW4gYW4KK2FjYWRlbWljIGluc3RpdHV0aW9uLCB0aGlzIGxpbWl0ZWQgc2hhcmVkIHVzZSBsaWNlbnNlIGRvZXMgbm90IGFwcGx5LgorCitMSUNFTlNFIExJTUlUQVRJT05TCitZb3UgbWF5IG5vdCBjb3B5IHRoZSBTb2Z0d2FyZSBleGNlcHQgZm9yIGEgcmVhc29uYWJsZSBudW1iZXIgb2YKK21hY2hpbmUtcmVhZGFibGUgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSBmb3IgYmFja3VwIG9yIGFyY2hpdmFsIHB1cnBvc2VzCithbmQgZXhjZXB0IGFzIGV4cHJlc3NseSBwZXJtaXR0ZWQgaW4gdGhlIExpY2Vuc2Ugc2VjdGlvbiBhYm92ZS4gIFlvdSBtYXkKK25vdCBzaGFyZSBvciB1c2UgY29uY3VycmVudGx5IHRoZSBTb2Z0d2FyZSBleGNlcHQgYXMgZXhwcmVzc2x5IHBlcm1pdHRlZAoraW4gdGhlIExpbWl0ZWQgU2hhcmVkIFVzZSBMaWNlbnNlIHNlY3Rpb24gYWJvdmUuICBZb3UgbWF5IG5vdCByZW1vdmUKK2FueSB0aXRsZXMsIHRyYWRlbWFya3Mgb3IgdHJhZGUgbmFtZXMsIGNvcHlyaWdodCBub3RpY2VzLCBsZWdlbmRzLCBvcgorb3RoZXIgcHJvcHJpZXRhcnkgbWFya2luZ3Mgb24gdGhlIFNvZnR3YXJlLiAgWW91IGFyZSBub3QgZ3JhbnRlZCBhbnkKK3JpZ2h0cyB0byBhbnkgdHJhZGVtYXJrcyBvciBzZXJ2aWNlIG1hcmtzIG9mIFZNd2FyZS4gIFZNd2FyZSByZXRhaW5zCithbGwgcmlnaHRzIG5vdCBleHByZXNzbHkgZ3JhbnRlZCB0byB5b3UuCisKK0xJQ0VOU0UgQVMgVVBHUkFERSBPRiBQUkVWSU9VU0xZIExJQ0VOU0VEIFBST0RVQ1QKK0lmIHlvdSBwdXJjaGFzZWQgdGhpcyBEZXNrdG9wIHNvZnR3YXJlIHByb2R1Y3QgYXMgYW4gdXBncmFkZSBhdCB0aGUKK2FwcGxpY2FibGUgdXBncmFkZSBwcmljZSwgdGhlbiB5b3UgbXVzdCBoYXZlIHByZXZpb3VzbHkgcHVyY2hhc2VkIGEKK3ByaW9yIHZlcnNpb24gb2YgdGhpcyBEZXNrdG9wIHNvZnR3YXJlIHByb2R1Y3QgYXQgdGhlIGFwcGxpY2FibGUgcHJvZHVjdAorKG5vdCB1cGdyYWRlKSBwcmljZS4gIElmIHlvdSBoYXZlIG5vdCBwdXJjaGFzZWQgYSBwcmlvciB2ZXJzaW9uIGF0IHRoZQorYXBwbGljYWJsZSBwcm9kdWN0IHByaWNlLCB0aGVuIHBsZWFzZSBjb250YWN0IHRoZSB2ZW5kb3IgZnJvbSB3aG9tIHlvdQorcHVyY2hhc2VkIHRoZSB1cGdyYWRlLCBvciwgaWYgeW91IGFyZSB1bmFibGUgdG8gY29udGFjdCB5b3VyIHZlbmRvciwKK1ZNd2FyZSwgdG8gbWFrZSBwYXltZW50IGZvciB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSB1cGdyYWRlIHByaWNlCithbmQgdGhlIHByb2R1Y3QgcHJpY2Ugd2l0aGluIHRoaXJ0eSAoMzApIGRheXMgb2YgdGhlIGRhdGUgeW91IHB1cmNoYXNlZAordGhlIHVwZ3JhZGUuICBJZiB5b3UgZG8gbm90IG1ha2UgdGhlIGFwcHJvcHJpYXRlIHBheW1lbnQgdG8geW91ciB2ZW5kb3IKK29yIFZNd2FyZSB3aXRoaW4gdGhpcnR5ICgzMCkgZGF5cywgdGhpcyBFVUxBIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUKK2FuZCB5b3UgbXVzdCBjb21wbHkgd2l0aCB0aGUgdGVybWluYXRpb24gcHJvdmlzaW9ucyBiZWxvdy4KKworTElDRU5TRVMgUkVRVUlSRUQgRk9SIFRISVJELVBBUlRZIFNPRlRXQVJFCitUaGUgU29mdHdhcmUgYWxsb3dzIG11bHRpcGxlIEd1ZXN0IE9wZXJhdGluZyBTeXN0ZW1zIGFuZCBhcHBsaWNhdGlvbnMgdG8KK3J1biBvbiBhIHNpbmdsZSBjb21wdXRlciBzeXN0ZW0uIFlvdSBhcmUgcmVzcG9uc2libGUgZm9yIG9idGFpbmluZyBhbnkKK2xpY2Vuc2VzIG5lY2Vzc2FyeSB0byBvcGVyYXRlIGFueSBzdWNoIHRoaXJkLXBhcnR5IHNvZnR3YXJlLCBpbmNsdWRpbmcKK0d1ZXN0IE9wZXJhdGluZyBTeXN0ZW1zLiBJbiB0aGUgZXZlbnQgdGhhdCB0aGUgU29mdHdhcmUgaW5jbHVkZXMgYSB2YWxpZAorbGljZW5zZWQgY29weSBvZiBhIEd1ZXN0IE9wZXJhdGluZyBTeXN0ZW0gZm9yIHByZS1pbnN0YWxsYXRpb24gd2l0aAordGhlIFNvZnR3YXJlLCB0aGUgdXNlIG9mIHN1Y2ggR3Vlc3QgT3BlcmF0aW5nIFN5c3RlbSBzaGFsbCBiZSBkZWZpbmVkCitieSB0aGUgZW5kIHVzZXIgbGljZW5zZSBhZ3JlZW1lbnQgZm9yIHRoYXQgR3Vlc3QgT3BlcmF0aW5nIFN5c3RlbS4KK0J5IGV4cGxpY2l0bHkgYWNjZXB0aW5nIHRoaXMgRVVMQSwgb3IgYnkgaW5zdGFsbGluZywgY29weWluZywgZG93bmxvYWRpbmcsCithY2Nlc3NpbmcsIG9yIG90aGVyd2lzZSB1c2luZyB0aGUgU29mdHdhcmUgYW5kL29yIFNvZnR3YXJlIExpY2Vuc2UgS2V5LAoreW91IGFyZSBhY2tub3dsZWRnaW5nIGFuZCBhZ3JlZWluZyB0byBiZSBib3VuZCBieSB0aGUgdGVybXMgb2YgdGhlIGVuZAordXNlciBsaWNlbnNlIGFncmVlbWVudCBmb3IgdGhlIHByZS1pbnN0YWxsZWQgR3Vlc3QgT3BlcmF0aW5nIFN5c3RlbSwKK3doaWNoIHRlcm1zIGFjY29tcGFueSB0aGUgR3Vlc3QgT3BlcmF0aW5nIFN5c3RlbS4KKworUFJPUFJJRVRBUlkgUklHSFRTIFJFU0VSVkVEIEJZIFZNV0FSRQorVk13YXJlIHJldGFpbnMgYWxsIHJpZ2h0LCB0aXRsZSwgYW5kIGludGVyZXN0IGluIGFuZCB0byB0aGUgU29mdHdhcmUgYW5kCit0aGUgU29mdHdhcmUgTGljZW5zZSBLZXkgYW5kIGluIGFsbCByZWxhdGVkIGNvcHlyaWdodHMsIHRyYWRlIHNlY3JldHMsCitwYXRlbnRzLCB0cmFkZW1hcmtzLCBhbmQgYW55IG90aGVyIGludGVsbGVjdHVhbCBhbmQgaW5kdXN0cmlhbCBwcm9wZXJ0eQorYW5kIHByb3ByaWV0YXJ5IHJpZ2h0cywgaW5jbHVkaW5nIHJlZ2lzdHJhdGlvbnMsIGFwcGxpY2F0aW9ucywgcmVuZXdhbHMsCithbmQgZXh0ZW5zaW9ucyBvZiBzdWNoIHJpZ2h0cy4KKworUkVTVFJJQ1RJT05TCitZb3UgbWF5IG5vdCAoaSkgc2VsbCwgbGVhc2UsIGxpY2Vuc2UsIHN1YmxpY2Vuc2UsIG9yIG90aGVyd2lzZSB0cmFuc2ZlcgoraW4gd2hvbGUgb3IgaW4gcGFydCB0aGUgU29mdHdhcmUgb3IgdGhlIFNvZnR3YXJlIExpY2Vuc2UgS2V5IHRvIGFub3RoZXIKK3BhcnR5OyAoaWkpIHByb3ZpZGUsIGRpc2Nsb3NlLCBkaXZ1bGdlIG9yIG1ha2UgYXZhaWxhYmxlIHRvLCBvciBwZXJtaXQKK3VzZSBvZiB0aGUgU29mdHdhcmUgaW4gd2hvbGUgb3IgaW4gcGFydCBieSwgYW55IHRoaXJkIHBhcnR5LCBpbmNsdWRpbmcKK2NvbnRyYWN0b3JzLCB3aXRob3V0IFZNd2FyZSdzIHByaW9yIHdyaXR0ZW4gY29uc2VudDsgKGlpaSkgZGVjb21waWxlLAorZGlzYXNzZW1ibGUsIHJldmVyc2UgZW5naW5lZXIsIG9yIG90aGVyd2lzZSBhdHRlbXB0IHRvIGRlcml2ZSBzb3VyY2UgY29kZQorZnJvbSB0aGUgU29mdHdhcmUsIGluIHdob2xlIG9yIGluIHBhcnQ7IChpdikgbW9kaWZ5IG9yIGNyZWF0ZSBkZXJpdmF0aXZlCit3b3JrcyBiYXNlZCB1cG9uIHRoZSBTb2Z0d2FyZTsgb3IgKHYpIHVzZSB0aGUgU29mdHdhcmUgdG8gcHJvdmlkZSBuZXR3b3JrLAorYXBwbGljYXRpb24gaG9zdGluZyBvciBvdGhlciBzZXJ2aWNlcyB0byB0aGlyZCBwYXJ0aWVzLCBvciBvdGhlcndpc2UKK3VzZSB0aGUgU29mdHdhcmUgb24gYSBzZXJ2aWNlIGJ1cmVhdSBvciBob3N0aW5nIGJhc2lzIGZvciB5b3VyIGN1c3RvbWVycy4KKworU1VQUE9SVCBTRVJWSUNFUworVk13YXJlIG1heSBwcm92aWRlIGxpbWl0ZWQgd2ViLWJhc2VkIHN1cHBvcnQgc2VydmljZXMgcmVsYXRlZCB0bwordGhlIFNvZnR3YXJlIGZvciBhIHBlcmlvZCBvZiB0aGlydHkgKDMwKSBkYXlzIGFmdGVyIHRoZSBkYXRlIG9mCitwdXJjaGFzZS4gQWRkaXRpb25hbCBzdXBwb3J0IHNlcnZpY2VzIG1heSBiZSBwdXJjaGFzZWQgc2VwYXJhdGVseS4KK0FueSBzdWNoIHN1cHBvcnQgc2VydmljZXMgcHJvdmlkZWQgYnkgVk13YXJlIHdpbGwgYmUgZ292ZXJuZWQgYnkgdGhlCitWTXdhcmUgcG9saWNlcyBhbmQgcHJvZ3JhbXMgZGVzY3JpYmVkIGluIG9ubGluZSBkb2N1bWVudGF0aW9uIGFuZCBvdGhlcgorVk13YXJlIHByb3ZpZGVkIG1hdGVyaWFscy4gIEFueSBzdXBwbGVtZW50YWwgc29mdHdhcmUgY29kZSBvciByZWxhdGVkCittYXRlcmlhbHMgdGhhdCBWTXdhcmUgcHJvdmlkZXMgdG8geW91IGFzIHBhcnQgb2YgYW55IHN1cHBvcnQgc2VydmljZXMgYXJlCit0byBiZSBjb25zaWRlcmVkIHBhcnQgb2YgdGhlIFNvZnR3YXJlIGFuZCBhcmUgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kCitjb25kaXRpb25zIG9mIHRoaXMgRVVMQS4gIFZNd2FyZSBtYXkgdXNlIGFueSB0ZWNobmljYWwgaW5mb3JtYXRpb24geW91Citwcm92aWRlIHRvIFZNd2FyZSBmb3IgYW55IFZNd2FyZSBidXNpbmVzcyBwdXJwb3NlcyB3aXRob3V0IHJlc3RyaWN0aW9uLAoraW5jbHVkaW5nIGZvciBwcm9kdWN0IHN1cHBvcnQgYW5kIGRldmVsb3BtZW50LiBWTXdhcmUgd2lsbCBub3QgdXNlCitpbmZvcm1hdGlvbiBpbiBhIGZvcm0gdGhhdCBwZXJzb25hbGx5IGlkZW50aWZpZXMgeW91LgorCitVUERBVEVTIEFORCBVUEdSQURFUyBOT1QgSU5DTFVERUQKK1RoaXMgRVVMQSBkb2VzIG5vdCBnaXZlIHlvdSBhbnkgcmlnaHRzIHRvIGFueSB1cGRhdGVzIG9yIHVwZ3JhZGVzIHRvIHRoZQorU29mdHdhcmUgb3IgdG8gYW55IGV4dGVuc2lvbnMgb3IgZW5oYW5jZW1lbnRzIHRvIHRoZSBTb2Z0d2FyZSBkZXZlbG9wZWQKK2J5IFZNd2FyZSBhdCBhbnkgdGltZSBpbiB0aGUgZnV0dXJlLiAgUmlnaHRzIHRvIGFueSBmdXR1cmUgZGV2ZWxvcG1lbnRzCit3aWxsIGJlIGdvdmVybmVkIGJ5IGEgc2VwYXJhdGUgc3Vic2NyaXB0aW9uIGNvbnRyYWN0IHRoYXQgeW91IG1heSBzaWduCit3aXRoIFZNd2FyZSBvciBieSB0aGUgZW5kIHVzZXIgbGljZW5zZSBhZ3JlZW1lbnQgcmVsYXRpbmcgdG8gdGhvc2UKK2RldmVsb3BtZW50cywgaW4gZWFjaCBjYXNlIGFzIGRlc2NyaWJlZCBpbiB0aGUgb25saW5lIGRvY3VtZW50YXRpb24gb3IKK290aGVyIFZNd2FyZSBwcm92aWRlZCBtYXRlcmlhbHMuCisKK1RFUk1JTkFUSU9OCitWTXdhcmUgbWF5IHRlcm1pbmF0ZSB0aGlzIEVVTEEgaWYgeW91IGZhaWwgdG8gY29tcGx5IHdpdGggYW55IHRlcm0gb2YKK3RoaXMgRVVMQS4gIEluIHRoZSBldmVudCBvZiB0ZXJtaW5hdGlvbiwgeW91IG11c3QgZGVzdHJveSBhbGwgY29waWVzIG9mCit0aGUgU29mdHdhcmUgYW5kIFNvZnR3YXJlIExpY2Vuc2UgS2V5LiAgSW4gYWRkaXRpb24geW91IG11c3QgcmVtb3ZlIGFsbAorY29waWVzIG9mIHRoZSBTb2Z0d2FyZSBmcm9tIHRoZSBjb21wdXRlcihzKSBvbiB3aGljaCBpdCBpcyBpbnN0YWxsZWQuCisKK0dPVkVSTk1FTlQgUkVTVFJJQ1RJT05TCitZb3UgbWF5IG5vdCBleHBvcnQgb3IgcmUtZXhwb3J0IHRoZSBTb2Z0d2FyZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoCit0aGUgVW5pdGVkIFN0YXRlcyBFeHBvcnQgQWRtaW5pc3RyYXRpb24gQWN0IGFuZCB0aGUgcmVsYXRlZCBydWxlcyBhbmQKK3JlZ3VsYXRpb25zIGFuZCBzaW1pbGFyIG5vbi1VLlMuIGdvdmVybm1lbnQgcmVzdHJpY3Rpb25zLCBpZiBhcHBsaWNhYmxlLgorVGhlIFNvZnR3YXJlIGFuZCBhY2NvbXBhbnlpbmcgZG9jdW1lbnRhdGlvbiBhcmUgZGVlbWVkIHRvIGJlICJjb21tZXJjaWFsCitjb21wdXRlciBzb2Z0d2FyZSIgYW5kICJjb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIGRvY3VtZW50YXRpb24sIgorcmVzcGVjdGl2ZWx5LCBwdXJzdWFudCB0byBERkFSIFNlY3Rpb24gMjI3LjcyMDIgYW5kIEZBUiBTZWN0aW9uIDEyLjIxMihiKSwKK2FzIGFwcGxpY2FibGUuICBBbnkgdXNlLCBtb2RpZmljYXRpb24sIHJlcHJvZHVjdGlvbiwgcmVsZWFzZSwgcGVyZm9ybWluZywKK2Rpc3BsYXlpbmcsIG9yIGRpc2Nsb3Npbmcgb2YgdGhlIFNvZnR3YXJlIGJ5IHRoZSBVLlMuIEdvdmVybm1lbnQgc2hhbGwKK2JlIGdvdmVybmVkIHNvbGVseSBieSB0aGUgdGVybXMgb2YgdGhpcyBFVUxBLgorCitMSU1JVEVEIFdBUlJBTlRZCitWTXdhcmUgd2FycmFudHMgdGhhdCB0aGUgbWVkaWEsIGlmIGFueSwgb24gd2hpY2ggdGhlIFNvZnR3YXJlIGlzIGRlbGl2ZXJlZAord2lsbCBiZSBmcmVlIG9mIGRlZmVjdHMgYW5kIHRoYXQgdGhlIFNvZnR3YXJlIHdpbGwgc3Vic3RhbnRpYWxseSBjb25mb3JtCit0byB0aGUgZGVzY3JpcHRpb24gY29udGFpbmVkIGluIHRoZSBhcHBsaWNhYmxlIGRvY3VtZW50YXRpb24sIGluIGVhY2gKK2Nhc2UgZm9yIGEgcGVyaW9kIG9mIDkwIGRheXMgYWZ0ZXIgdGhlIGRhdGUgb2YgZGVsaXZlcnkgb2YgdGhlIFNvZnR3YXJlCitMaWNlbnNlIEtleS4gIEVYQ0VQVCBGT1IgVEhFIFBSRUNFRElORyBFWFBSRVNTIExJTUlURUQgV0FSUkFOVFksIFZNV0FSRQorTUFLRVMgQU5EIFlPVSBSRUNFSVZFIE5PIFdBUlJBTlRJRVMgIE9OIFRIRSBTT0ZUV0FSRSwgRVhQUkVTUywgSU1QTElFRCwKK1NUQVRVVE9SWSwgT1IgSU4gQU5ZIE9USEVSIFBST1ZJU0lPTiBPRiBUSElTIEVVTEEgT1IgQ09NTVVOSUNBVElPTgorV0lUSCBZT1UsIEFORCBWTVdBUkUgU1BFQ0lGSUNBTExZIERJU0NMQUlNUyBBTlkgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLCBBTkQgTk9OLUlORlJJTkdFTUVOVC4KKworTElNSVRBVElPTiBPRiBMSUFCSUxJVFkKK0lOIE5PIEVWRU5UIFdJTEwgVk1XQVJFIEJFIExJQUJMRSBGT1IgQU5ZIExPU1QgUFJPRklUUyBPUiBCVVNJTkVTUworT1BQT1JUVU5JVElFUywgTE9TUyBPRiBVU0UsIEJVU0lORVNTIElOVEVSUlVQVElPTiwgTE9TUyBPRiBEQVRBLCBPUgorQU5ZIE9USEVSIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKK1VOREVSIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIEJBU0VEIElOIENPTlRSQUNULCBUT1JULAorTkVHTElHRU5DRSwgUFJPRFVDVCBMSUFCSUxJVFksIE9SIE9USEVSV0lTRS4gIFRISVMgTElNSVRBVElPTiBTSEFMTAorQVBQTFkgUkVHQVJETEVTUyBPRiBXSEVUSEVSIFZNV0FSRSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0VTLiBWTVdBUkUnUyBMSUFCSUxJVFkgVU5ERVIgVEhJUyBFVUxBIFdJTEwgTk9ULCBJTiBBTlkgRVZFTlQsCitFWENFRUQgVEhFIExJQ0VOU0UgRkVFUywgSUYgQU5ZLCBQQUlEIEJZIFlPVSBUTyBWTVdBUkUgRk9SIFRIRSBTT0ZUV0FSRQorTElDRU5TRUQgQlkgWU9VIFVOREVSIFRISVMgRVVMQS4KKworR0VORVJBTAorVGhpcyBFVUxBIGlzIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBDYWxpZm9ybmlhLAorVS5TLkEuIHdpdGhvdXQgcmVnYXJkIHRvIGNvbmZsaWN0IG9mIGxhdyBwcmluY2lwbGVzLiBUaGUgVW5pdGVkIE5hdGlvbnMKK0NvbnZlbnRpb24gZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgc2hhbGwgbm90IGFwcGx5LiAgVGhpcyBFVUxBCitpcyB0aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHVzIGFuZCBzdXBlcnNlZGVzIGFueSBvdGhlciBjb21tdW5pY2F0aW9ucworb3IgYWR2ZXJ0aXNpbmcgd2l0aCByZXNwZWN0IHRvIHRoZSBTb2Z0d2FyZS4gIElmIGFueSBwcm92aXNpb24gb2YgdGhpcworRVVMQSBpcyBoZWxkIGludmFsaWQsIHRoZSByZW1haW5kZXIgb2YgdGhpcyBFVUxBIHNoYWxsIGNvbnRpbnVlIGluIGZ1bGwKK2ZvcmNlIGFuZCBlZmZlY3QuICBUaGlzIEVVTEEgbWF5IGJlIG1vZGlmaWVkIG9ubHkgYnkgd3JpdHRlbiBhZ3JlZW1lbnQKK3NpZ25lZCBieSBhdXRob3JpemVkIHJlcHJlc2VudGF0aXZlcyBvZiB5b3UgYW5kIFZNd2FyZS4KKworQ09OVEFDVCBJTkZPUk1BVElPTgorSWYgeW91IGhhdmUgYW55IHF1ZXN0aW9ucyBhYm91dCB0aGlzIEVVTEEsIG9yIGlmIHlvdSB3YW50IHRvIGNvbnRhY3QKK1ZNd2FyZSBmb3IgYW55IHJlYXNvbiwgcGxlYXNlIGRpcmVjdCBhbGwgY29ycmVzcG9uZGVuY2UgdG86IFZNd2FyZSwKK0luYy4sIDMxNDUgUG9ydGVyIERyaXZlLCBCdWlsZGluZyBGLCBQYWxvIEFsdG8sIENBIDk0MzA0LCBVbml0ZWQgU3RhdGVzCitvZiBBbWVyaWNhIG9yIGVtYWlsIGluZm9Adm13YXJlLmNvbS4KKworVk13YXJlIGlzIGEgdHJhZGVtYXJrIG9mIFZNd2FyZSwgSW5jLgorCisKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL3czbSBiL2xpY2Vuc2VzL3czbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGI3MWM3Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvdzNtCkBAIC0wLDAgKzEsMjggQEAKK0NvcHlyaWdodAorCisgIChDKSBDb3B5cmlnaHQgMTk5NC0yMDAyIGJ5IEFraW5vcmkgSXRvLgorCisgIEhhbnMgSi4gQm9laG0sIEFsYW4gSi4gRGVtZXJzLCBYZXJveCBDb3JwLiBhbmQgU2lsaWNvbiBHcmFwaGljcworICBoYXZlIHRoZSBjb3B5cmlnaHQgb2YgdGhlIEdDIGxpYnJhcnkgY29tZXMgd2l0aCB3M20gcGFja2FnZS4KKworTGljZW5zZQorCisgIFVzZSwgbW9kaWZpY2F0aW9uIGFuZCByZWRpc3RyaWJ1dGlvbiBvZiB0aGlzIHNvZnR3YXJlIGlzIGhlcmVieSBncmFudGVkLCAKKyAgcHJvdmlkZWQgdGhhdCB0aGlzIGVudGlyZSBjb3B5cmlnaHQgbm90aWNlIGlzIGluY2x1ZGVkIG9uIGFueSBjb3BpZXMgb2YgCisgIHRoaXMgc29mdHdhcmUgYW5kIGFwcGxpY2F0aW9ucyBhbmQgZGVyaXZhdGlvbnMgdGhlcmVvZi4KKworICBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIG9uIGFuICJhcyBpcyIgYmFzaXMsIHdpdGhvdXQgd2FycmFudHkgb2YgYW55CisgIGtpbmQsIGVpdGhlciBleHByZXNzZWQgb3IgaW1wbGllZCwgYXMgdG8gYW55IG1hdHRlciBpbmNsdWRpbmcsIGJ1dCBub3QKKyAgbGltaXRlZCB0byB3YXJyYW50eSBvZiBmaXRuZXNzIG9mIHB1cnBvc2UsIG9yIG1lcmNoYW50YWJpbGl0eSwgb3IKKyAgcmVzdWx0cyBvYnRhaW5lZCBmcm9tIHVzZSBvZiB0aGlzIHNvZnR3YXJlLgorCisKK0F1dGhvcgorCitGZWVsIGZyZWUgdG8gc2VuZCB5b3VyIG9waW5pb24gdG8gdGhlIGF1dGhvci4KKworICAgICAgICBBa2lub3JpIEl0bworICAgICAgICBGYWN1bHR5IG9mIEVuZ2luZWVyaW5nLCBZYW1hZ2F0YSBVbml2ZXJzaXR5CisgICAgICAgIGFpdG9AZncuaXBzai5vci5qcAorICAgICAgICBodHRwOi8vdzNtLnNvdXJjZWZvcmdlLm5ldC8KKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvd2Fyc293IGIvbGljZW5zZXMvd2Fyc293Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYzg4OWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy93YXJzb3cKQEAgLTAsMCArMSwyNiBAQAorV2Fyc293IENvbnRlbnQgTGljZW5zZQorCitBc3NldHMgdGhhdCBhcmUgcHJvcGVydHkgb2YgQ2hhc3NldXIgZGUgYm90cywgdXNlIHRoZSBmb2xsb3dpbmcgV2Fyc293IENvbnRlbnQgTGljZW5zZS4KKworVEVSTVMgQU5EIENPTkRJVElPTlMgRk9SIFVTQUdFLCBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorCisgICAxLiBUaGlzIExpY2Vuc2UgYXBwbGllcyB0byBhbnkgbWF0ZXJpYWwgb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBXYXJzb3cgQ29udGVudCBMaWNlbnNlLgorCisgICAyLiBUZXJtcyBkZWZpbmVkIGluIHRoaXMgQXJ0aWNsZSwgYW5kIHBhcmVudGhldGljYWxseSBlbHNld2hlcmUsIHNoYWxsIHRocm91Z2hvdXQgdGhpcyBMaWNlbnNlIGhhdmUgdGhlIG1lYW5pbmdzIGhlcmUgYW5kIHRoZXJlIHByb3ZpZGVkLiBEZWZpbmVkIHRlcm1zIG1heSBiZSB1c2VkIGluIHRoZSBzaW5ndWxhciBvciBwbHVyYWwuIERlZmluaXRpb25zOgorCisgICAgICBUaGUgIk1hdGVyaWFsIiwgYmVsb3csIHJlZmVycyB0byBhbnkgc3VjaCBtYXRlcmlhbCBvciB3b3JrLCBhbmQgYSAid29yayBiYXNlZCBvbiB0aGUgTWF0ZXJpYWwiIG1lYW5zIGVpdGhlciB0aGUgTWF0ZXJpYWwgb3IgYW55IERlcml2YXRpdmUgV29yayB1bmRlciBjb3B5cmlnaHQgbGF3LgorCisgICAgICAiRGVyaXZhdGl2ZSBXb3JrIiBzaGFsbCBtZWFuIGEgd29yayBjb250YWluaW5nIHRoZSBNYXRlcmlhbCBvciBhIHBvcnRpb24gb2YgaXQsIHN1Y2ggYXMgYSByZXZpc2lvbiwgbW9kaWZpY2F0aW9uLCBlbmhhbmNlbWVudCwgYWRhcHRhdGlvbiwgdHJhbnNsYXRpb24gKGluY2x1ZGluZyBjb21waWxhdGlvbiBvciByZWNvbXBpbGF0aW9uIGJ5IGNvbXB1dGVyKSwgYWJyaWRnZW1lbnQsIGNvbmRlbnNhdGlvbiwgZXhwYW5zaW9uLCBvciBhbnkgb3RoZXIgZm9ybSBpbiB3aGljaCBzdWNoIHByZWV4aXN0aW5nIHdvcmtzIG1heSBiZSByZWNhc3QsIHRyYW5zZm9ybWVkLCBvciBhZGFwdGVkLCBhbmQgdGhhdCwgaWYgcHJlcGFyZWQgd2l0aG91dCBhdXRob3JpemF0aW9uIG9mIHRoZSBvd25lciBvZiB0aGUgY29weXJpZ2h0IGluIHN1Y2ggcHJlZXhpc3Rpbmcgd29yaywgd291bGQgY29uc3RpdHV0ZSBhIGNvcHlyaWdodCBpbmZyaW5nZW1lbnQuCisKKyAgICAgIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCisgICAzLiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHB1Ymxpc2gsIHRyYW5zbWl0LCBzZWxsLCBwYXJ0aWNpcGF0ZSBpbiB0aGUgdHJhbnNmZXIgb3Igc2FsZSBvciByZXByb2R1Y2UsIGNyZWF0ZSBEZXJpdmF0aXZlIFdvcmtzIGZyb20sIGRpc3RyaWJ1dGUsIHBlcmZvcm0sIGRpc3BsYXkgb3IgaW4gYW55IHdheSBleHBsb2l0IGFueSBvZiB0aGUgTWF0ZXJpYWwgcmVsZWFzZWQgdW5kZXIgdGhpcyBMaWNlbnNlIHVubGVzcyBleHByZXNzbHkgcGVybWl0dGVkIGJ5IHRoZSBDaGFzc2V1ciBkZSBib3RzIHRlYW0uCisKKyAgIDQuIFlvdSBtYXkgZnJlZWx5IGRpc3RyaWJ1dGUgdGhlIFdhcnNvdyBhcmNoaXZlL2luc3RhbGxlciB1bm1vZGlmaWVkIG9uIGFueSBtZWRpYS4gWW91IG1heSByZS1jb21wcmVzcyB1c2luZyBkaWZmZXJlbnQgYXJjaGl2YWwgZm9ybWF0cyBzdWl0YWJsZSBmb3IgeW91ciBPUyAoaS5lLiB6aXAvdGd6L3JwbS9kZWIvZG1nKSwgYW55IGNoYW5nZXMgYmV5b25kIHRoYXQgcmVxdWlyZSBleHBsaWNpdCBwZXJtaXNzaW9uIG9mIHRoZSBDaGFzc2V1ciBkZSBib3RzIGFzc29jaWF0aW9uLgorCisgICA1LiBUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgVEhFIE1BVEVSSUFMIFBST1ZJREVELCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gVEhFIE1BVEVSSUFMIElTIFBST1ZJREVEICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBNQVRFUklBTCBJUyBXSVRIIFlPVS4KKworICAgNi4gSU4gTk8gRVZFTlQgU0hBTEwgQ2hhc3NldXIgZGUgYm90cyBCRSBMSUFCTEUgRk9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIsIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBNQVRFUklBTC4KKworCitFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL3dlcmtlbi54cGF0aCBiL2xpY2Vuc2VzL3dlcmtlbi54cGF0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDFlMzBiCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvd2Vya2VuLnhwYXRoCkBAIC0wLDAgKzEsNDggQEAKKy8qLS0gCisKKyBDb3B5cmlnaHQgKEMpIDIwMDAgYm9iIG1jd2hpcnRlciBhbmQgVGhlIFdlcmtlbiAmIFNvbnMgQ29tcGFueQorIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgCisgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgYXJlIG1ldDoKKyAKKyAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMsIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgCisgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zLCBhbmQgdGhlIGRpc2NsYWltZXIgdGhhdCBmb2xsb3dzIAorICAgIHRoZXNlIGNvbmRpdGlvbnMgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyAKKyAgICBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKyAzLiBUaGUgbmFtZSAid2Vya2VuLnhwYXRoIiBtdXN0IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSAKKyAgICBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4gIAorICAgIEZvciB3cml0dGVuIHBlcm1pc3Npb24sIHBsZWFzZSBjb250YWN0IGJvYkB3ZXJrZW4uY29tCisgCisgNC4gUHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgbWF5IG5vdCBiZSBjYWxsZWQgIndlcmtlbi54cGF0aCIsIAorICAgIG5vciBtYXkgIndlcmtlbi54cGF0aCIgYXBwZWFyIGluIHRoZWlyIG5hbWUsIHdpdGhvdXQgcHJpb3Igd3JpdHRlbiAKKyAgICBwZXJtaXNzaW9uIGZyb20gdGhlIFdlcmtlbiAmIFNvbnMgQ29tcGFueSAoYm9iQHdlcmtlbi5jb20pLgorIAorIEluIGFkZGl0aW9uLCB3ZSByZXF1ZXN0IChidXQgZG8gbm90IHJlcXVpcmUpIHRoYXQgeW91IGluY2x1ZGUgaW4gdGhlIAorIGVuZC11c2VyIGRvY3VtZW50YXRpb24gcHJvdmlkZWQgd2l0aCB0aGUgcmVkaXN0cmlidXRpb24gYW5kL29yIGluIHRoZSAKKyBzb2Z0d2FyZSBpdHNlbGYgYW4gYWNrbm93bGVkZ2VtZW50IGVxdWl2YWxlbnQgdG8gdGhlIGZvbGxvd2luZzoKKyAgICAgIlRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgCisgICAgICBUaGUgV2Vya2VuICYgU29ucyBDb21wYW55IChodHRwOi8vd3d3Lndlcmtlbi5jb20vKS4iCisgQWx0ZXJuYXRpdmVseSwgdGhlIGFja25vd2xlZGdtZW50IG1heSBiZSBncmFwaGljYWwgdXNpbmcgdGhlIGxvZ29zIAorIGF2YWlsYWJsZSBhdCBodHRwOi8vd3d3Lndlcmtlbi5jb20vcGl4L3dlcmtlbi1kaWdpdGFsLmdpZgorCisgVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTRUQgT1IgSU1QTElFRAorIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFQQUNIRSBTT0ZUV0FSRSBGT1VOREFUSU9OIE9SCisgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKKyBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GCisgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorIFNVQ0ggREFNQUdFLgorCisgKi8KKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvd2hpdGVoZWFkIGIvbGljZW5zZXMvd2hpdGVoZWFkCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxZWIxYTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy93aGl0ZWhlYWQKQEAgLTAsMCArMSwzNSBAQAorIENvcHlyaWdodCAoYykKKyAgICAgICAgV2hpdGVoZWFkIEluc3RpdHV0ZSBmb3IgQmlvbWVkaWNhbCBSZXNlYXJjaC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDoKKworMS4gICAgICBSZWRpc3RyaWJ1dGlvbnMgbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMKK2xpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSAgZG9jdW1lbnRhdGlvbgorYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uICBSZWRpc3RyaWJ1dGlvbnMgb2YKK3NvdXJjZSBjb2RlIG11c3QgYWxzbyByZXByb2R1Y2UgdGhpcyBpbmZvcm1hdGlvbiBpbiB0aGUgc291cmNlIGNvZGUgaXRzZWxmLgorCisyLiAgICAgIElmIHRoZSBwcm9ncmFtIGlzIG1vZGlmaWVkLCByZWRpc3RyaWJ1dGlvbnMgbXVzdCBpbmNsdWRlIGEgbm90aWNlCisoaW4gdGhlIHNhbWUgcGxhY2VzIGFzIGFib3ZlKSBpbmRpY2F0aW5nIHRoYXQgdGhlIHJlZGlzdHJpYnV0ZWQgcHJvZ3JhbSBpcworbm90IGlkZW50aWNhbCB0byB0aGUgdmVyc2lvbiBkaXN0cmlidXRlZCBieSBXaGl0ZWhlYWQgSW5zdGl0dXRlLgorCiszLiAgICAgIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcworc29mdHdhcmUgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdtZW50OgorICAgICAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZQorICAgICAgICBXaGl0ZWhlYWQgSW5zdGl0dXRlIGZvciBCaW9tZWRpY2FsIFJlc2VhcmNoLgorCis0LiAgICAgIFRoZSBuYW1lIG9mIHRoZSBXaGl0ZWhlYWQgSW5zdGl0dXRlIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yCitwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbgorcGVybWlzc2lvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgV0hJVEVIRUFEIElOU1RJVFVURSBgYEFTIElTJycgQU5EICBBTlkKK0VYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFICBJTVBMSUVECitXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgIEFSRQorRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFdISVRFSEVBRCBJTlNUSVRVVEUgQkUgTElBQkxFICBGT1IgQU5ZCitESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgIERBTUFHRVMKKyhJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyAgT1IKK1NFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSAgSE9XRVZFUgorQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KXCBObyBuZXdsaW5lIGF0IGVuZCBvZiBmaWxlCmRpZmYgLS1naXQgYS9saWNlbnNlcy93b3JsZG9mcGFkbWFuIGIvbGljZW5zZXMvd29ybGRvZnBhZG1hbgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWUzNjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvd29ybGRvZnBhZG1hbgpAQCAtMCwwICsxLDMyIEBACistLS0tLS0tLS0tLS0KK0NvcHlyaWdodAorLS0tLS0tLS0tLS0tCisKKworCitUaGUgV29ybGQgb2YgUGFkbWFuIGlzIHByb3RlY3RlZCBieSBjb3B5cmlnaHQuCisKK1RoZSBjb3B5cmlnaHRzIGJlbG9uZyB0byB0aGUgcmVzcGVjdGl2ZSBhdXRob3JzIG9mIHRoZSBXb1AtVGVhbS4gCitBbGwgY29tbWVyY2lhbCB1c2Ugb2YgdGhlIFdvcmxkIG9mIFBhZG1hbiBhbmQgY29uc2VxdWVudGx5IHRoZSAKK3NpbmdsZSB3b3JrcyBpcyBwcm9oaWJpdGVkIHVubGVzcyB5b3UgaGF2ZSBleHBsaWNpdCBwZXJtaXNzaW9uIGZyb20gdGhlIFdvUC1UZWFtLgorVGhpcyBpbmNsdWRlcywgYnV0IGlzIG5vdCBsaW1pdGVkIHRvLCBtYXNzIGFyY2hpdmFsIGFzIG9uIGEgY2Qtcm9tIAorYW5kIGluY2x1c2lvbiBpbiBjb21tZXJjaWFsbHkgcHVibGlzaGVkIGNvbXBpbGF0aW9ucyAoYm9va3MgYW5kL29yIG1hZ2F6aW5lcykuCisKK1RoaXMgaW5jbHVkZXMgZnVydGhlciB0aGUgcHJvaGliaXRpb24gb2YgY29weWluZywgY2hhbmdpbmcsIG1pcnJvcmluZyAKK2FuZCBwdWJsaWMgcmVwcm9kdWN0aW9uIGluIHNlbnNlIG9mIGEgY29tbWVyY2lhbCB1c2UgZWxlY3Ryb25pYyBvciBvdGhlcndpc2UuIAorUHJpdmF0ZSBub24tY29tbWVyY2lhbCBjb3B5aW5nLCBtaXJyb3JpbmcgYW5kIGV2ZW4gcHVibGljIHJlcHJvZHVjdGlvbiBpcyBkZXNpcmVkLiA7LSkKKworQ2hhbmdlcyB0byB0aGUgZ2FtZSBhbmQgY29uc2VxdWVudGx5IHRoZSBzaW5nbGUgd29ya3Mgd2hldGhlciBjb21tZXJjaWFsIG9yIG5vdCwgCitpcyBwcm9oaWJpdGVkIHdpdGhvdXQgZXhwbGljaXQgcGVybWlzc2lvbi4KKworU29tZSBwYXJ0cyBvZiB0aGUgZ2FtZSB3ZXJlIGNyZWF0ZWQgd2l0aCBtYXRlcmlhbCwgKGUuZy4gdGV4dHVyZXMsIFNvdW5kcykgCit3aGljaCB3ZSBhY3F1aXJlZCBmcm9tIGRpZmZlcmVudCBzb3VyY2VzOyB0aGV5IGFyZSBmcmVlIG9mIGFueSBvZiB0aGlyZCBwYXJ0eSByaWdodHMgCithcyBmYXIgYXMgd2Uga25vdy4gSWYgYW55b25lIGRpc2NvdmVycyB3ZSd2ZSB1c2VkIGhpcyAvIGhlciB3b3JrIHVubGF3ZnVsbHksIAorY29udGFjdCB1cyBpbW1lZGlhdGVseSBzbyB0aGF0IHdlIGNhbiByZXNwb25kIGFzIHNvb24gYXMgcG9zc2libGUuCisKK1RoZSBzb3VyY2UgY29kZSBpcyBhdmFpbGFibGUgdW5kZXIgdGhlIEdQTCBsaWNlbnNlIGF0CitodHRwOi8vd3d3LnNvdXJjZWZvcmdlLm5ldC9wcm9qZWN0cy93b3AtZW5naW5lCitGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgR1BMIHNlZSBncGwudHh0LgorCitJZiB5b3UgaGF2ZSBhbnkgcXVlc3Rpb25zIGNvbnRhY3QgdGhlIFdvUC1UZWFtIGJ5IEUtTWFpbDoKK2VudGVAd29ybGRvZnBhZG1hbi5jb20gb3IgdGVhbUB3b3JsZG9mcGFkbWFuLmNvbQpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvd3hXaW5GREwtMyBiL2xpY2Vuc2VzL3d4V2luRkRMLTMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjIyOWY0NQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL3d4V2luRkRMLTMKQEAgLTAsMCArMSw2MCBAQAorICAgICAgICAgICAgICAgIHd4V2luZG93cyBGcmVlIERvY3VtZW50YXRpb24gTGljZW5jZSwgVmVyc2lvbiAzCisgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICBDb3B5cmlnaHQgKGMpIDE5OTcgSnVsaWFuIFNtYXJ0LCBSb2JlcnQgUm9lYmxpbmcgWywgLi4uXQorCisgIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworICBvZiB0aGlzIGxpY2VuY2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKyAgIAorICAgICAgICAgICAgICAgICAgIFdYV0lORE9XUyBGUkVFIERPQ1VNRU5UQVRJT04gTElDRU5DRQorICAgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworICAxLiBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gbWFrZSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhpcworICBtYW51YWwgb3IgcGllY2Ugb2YgZG9jdW1lbnRhdGlvbiBwcm92aWRlZCBhbnkgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcworICBwZXJtaXNzaW9uIG5vdGljZSBhcmUgcHJlc2VydmVkIG9uIGFsbCBjb3BpZXMuCisKKyAgMi4gUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIHByb2Nlc3MgdGhpcyBmaWxlIG9yIGRvY3VtZW50IHRocm91Z2ggYQorICBkb2N1bWVudCBwcm9jZXNzaW5nIHN5c3RlbSBhbmQsIGF0IHlvdXIgb3B0aW9uIGFuZCB0aGUgb3B0aW9uIG9mIGFueSB0aGlyZAorICBwYXJ0eSwgcHJpbnQgdGhlIHJlc3VsdHMsIHByb3ZpZGVkIGEgcHJpbnRlZCBkb2N1bWVudCBjYXJyaWVzIGEgY29weWluZworICBwZXJtaXNzaW9uIG5vdGljZSBpZGVudGljYWwgdG8gdGhpcyBvbmUuCisKKyAgMy4gUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhpcworICBtYW51YWwgb3IgcGllY2Ugb2YgZG9jdW1lbnRhdGlvbiB1bmRlciB0aGUgY29uZGl0aW9ucyBmb3IgdmVyYmF0aW0KKyAgY29weWluZywgcHJvdmlkZWQgYWxzbyB0aGF0IGFueSBzZWN0aW9ucyBkZXNjcmliaW5nIGxpY2Vuc2luZyBjb25kaXRpb25zCisgIGZvciB0aGlzIG1hbnVhbCwgc3VjaCBhcywgaW4gcGFydGljdWxhciwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlLAorICB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5jZSwgYW5kIGFueSB3eFdpbmRvd3MgTGljZW5jZSBhcmUKKyAgaW5jbHVkZWQgZXhhY3RseSBhcyBpbiB0aGUgb3JpZ2luYWwsIGFuZCBwcm92aWRlZCB0aGF0IHRoZSBlbnRpcmUKKyAgcmVzdWx0aW5nIGRlcml2ZWQgd29yayBpcyBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgYSBwZXJtaXNzaW9uCisgIG5vdGljZSBpZGVudGljYWwgdG8gdGhpcyBvbmUuCisKKyAgNC4gUGVybWlzc2lvbiBpcyBncmFudGVkIHRvIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdHJhbnNsYXRpb25zIG9mIHRoaXMKKyAgbWFudWFsIG9yIHBpZWNlIG9mIGRvY3VtZW50YXRpb24gaW50byBhbm90aGVyIGxhbmd1YWdlLCB1bmRlciB0aGUgYWJvdmUKKyAgY29uZGl0aW9ucyBmb3IgbW9kaWZpZWQgdmVyc2lvbnMsIGV4Y2VwdCB0aGF0IHNlY3Rpb25zIHJlbGF0ZWQgdG8KKyAgbGljZW5zaW5nLCBpbmNsdWRpbmcgdGhpcyBwYXJhZ3JhcGgsIG1heSBhbHNvIGJlIGluY2x1ZGVkIGluIHRyYW5zbGF0aW9ucworICBhcHByb3ZlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlcnMgb2YgdGhlIHJlc3BlY3RpdmUgbGljZW5jZSBkb2N1bWVudHMgaW4KKyAgYWRkaXRpb24gdG8gdGhlIG9yaWdpbmFsIEVuZ2xpc2guCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBXQVJSQU5UWSBESVNDTEFJTUVSCisKKyAgNS4gQkVDQVVTRSBUSElTIE1BTlVBTCBPUiBQSUVDRSBPRiBET0NVTUVOVEFUSU9OIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLAorICBUSEVSRSBJUyBOTyBXQVJSQU5UWSBGT1IgSVQsIFRPIFRIRSBFWFRFTlQgUEVSTUlUVEVEIEJZIEFQUExJQ0FCTEUgTEFXLiAKKyAgRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIKKyAgUEFSVElFUyBQUk9WSURFIFRISVMgTUFOVUFMIE9SIFBJRUNFIE9GIERPQ1VNRU5UQVRJT04gIkFTIElTIiBXSVRIT1VUCisgIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTU0VEIE9SIElNUExJRUQsIElOQ0xVRElORywgQlVUIE5PVAorICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQorICBQQVJUSUNVTEFSIFBVUlBPU0UuICBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GCisgIFRIRSBNQU5VQUwgT1IgUElFQ0UgT0YgRE9DVU1FTlRBVElPTiBJUyBXSVRIIFlPVS4gIFNIT1VMRCBUSEUgTUFOVUFMIE9SCisgIFBJRUNFIE9GIERPQ1VNRU5UQVRJT04gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTAorICBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KKworICA2LiBJTiBOTyBFVkVOVCBVTkxFU1MgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcgT1IgQUdSRUVEIFRPIElOIFdSSVRJTkcgV0lMTAorICBBTlkgQ09QWVJJR0hUIEhPTERFUiwgT1IgQU5ZIE9USEVSIFBBUlRZIFdITyBNQVkgTU9ESUZZIEFORC9PUgorICBSRURJU1RSSUJVVEUgVEhFIE1BTlVBTCBPUiBQSUVDRSBPRiBET0NVTUVOVEFUSU9OIEFTIFBFUk1JVFRFRCBBQk9WRSwgQkUKKyAgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBHRU5FUkFMLCBTUEVDSUFMLCBJTkNJREVOVEFMIE9SCisgIENPTlNFUVVFTlRJQUwgREFNQUdFUyBBUklTSU5HIE9VVCBPRiBUSEUgVVNFIE9SIElOQUJJTElUWSBUTyBVU0UgVEhFCisgIE1BTlVBTCBPUiBQSUVDRSBPRiBET0NVTUVOVEFUSU9OIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YKKyAgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQKKyAgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgQSBQUk9HUkFNIEJBU0VEIE9OIFRIRSBNQU5VQUwgT1IgUElFQ0UgT0YKKyAgRE9DVU1FTlRBVElPTiBUTyBPUEVSQVRFIFdJVEggQU5ZIE9USEVSIFBST0dSQU1TKSwgRVZFTiBJRiBTVUNIIEhPTERFUiBPUgorICBPVEhFUiBQQVJUWSBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisKZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL3d4V2luTEwtMyBiL2xpY2Vuc2VzL3d4V2luTEwtMwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTFkZWVkCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvd3hXaW5MTC0zCkBAIC0wLDAgKzEsNTMgQEAKKyAgICAgICAgICAgICAgICB3eFdpbmRvd3MgTGlicmFyeSBMaWNlbmNlLCBWZXJzaW9uIDMKKyAgICAgICAgICAgICAgICA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICBDb3B5cmlnaHQgKGMpIDE5OTggSnVsaWFuIFNtYXJ0LCBSb2JlcnQgUm9lYmxpbmcgZXQgYWwKKworICBFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMKKyAgb2YgdGhpcyBsaWNlbmNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKKyAgICAgICAgICAgICAgICAgICAgICAgV1hXSU5ET1dTIExJQlJBUlkgTElDRU5DRQorICAgICBURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKyAgCisgIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5jZSBhcyBwdWJsaXNoZWQgYnkKKyAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5jZSwgb3IgKGF0CisgIHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAgCisgIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLCBidXQKKyAgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVSBMaWJyYXJ5CisgIEdlbmVyYWwgUHVibGljIExpY2VuY2UgZm9yIG1vcmUgZGV0YWlscy4KKworICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlCisgIGFsb25nIHdpdGggdGhpcyBzb2Z0d2FyZSwgdXN1YWxseSBpbiBhIGZpbGUgbmFtZWQgQ09QWUlORy5MSUIuICBJZiBub3QsCisgIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLAorICBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBLgorCisgIEVYQ0VQVElPTiBOT1RJQ0UKKworICAxLiBBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgY29weXJpZ2h0IGhvbGRlcnMgb2YgdGhpcyBsaWJyYXJ5IGdpdmUKKyAgcGVybWlzc2lvbiBmb3IgYWRkaXRpb25hbCB1c2VzIG9mIHRoZSB0ZXh0IGNvbnRhaW5lZCBpbiB0aGlzIHJlbGVhc2Ugb2YKKyAgdGhlIGxpYnJhcnkgYXMgbGljZW5jZWQgdW5kZXIgdGhlIHd4V2luZG93cyBMaWJyYXJ5IExpY2VuY2UsIGFwcGx5aW5nCisgIGVpdGhlciB2ZXJzaW9uIDMgb2YgdGhlIExpY2VuY2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24gb2YKKyAgdGhlIExpY2VuY2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBjb3B5cmlnaHQgaG9sZGVycyBvZiB2ZXJzaW9uIDMgb2YgdGhlCisgIExpY2VuY2UgZG9jdW1lbnQuCisKKyAgMi4gVGhlIGV4Y2VwdGlvbiBpcyB0aGF0IHlvdSBtYXkgdXNlLCBjb3B5LCBsaW5rLCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUKKyAgdW5kZXIgdGhlIHVzZXIncyBvd24gdGVybXMsIGJpbmFyeSBvYmplY3QgY29kZSB2ZXJzaW9ucyBvZiB3b3JrcyBiYXNlZAorICBvbiB0aGUgTGlicmFyeS4KKworICAzLiBJZiB5b3UgY29weSBjb2RlIGZyb20gZmlsZXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAgR2VuZXJhbCBQdWJsaWMgTGljZW5jZSBvciB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5jZSBpbnRvIGEKKyAgY29weSBvZiB0aGlzIGxpYnJhcnksIGFzIHRoaXMgbGljZW5jZSBwZXJtaXRzLCB0aGUgZXhjZXB0aW9uIGRvZXMgbm90CisgIGFwcGx5IHRvIHRoZSBjb2RlIHRoYXQgeW91IGFkZCBpbiB0aGlzIHdheS4gIFRvIGF2b2lkIG1pc2xlYWRpbmcgYW55b25lIGFzCisgIHRvIHRoZSBzdGF0dXMgb2Ygc3VjaCBtb2RpZmllZCBmaWxlcywgeW91IG11c3QgZGVsZXRlIHRoaXMgZXhjZXB0aW9uCisgIG5vdGljZSBmcm9tIHN1Y2ggY29kZSBhbmQvb3IgYWRqdXN0IHRoZSBsaWNlbnNpbmcgY29uZGl0aW9ucyBub3RpY2UKKyAgYWNjb3JkaW5nbHkuCisKKyAgNC4gSWYgeW91IHdyaXRlIG1vZGlmaWNhdGlvbnMgb2YgeW91ciBvd24gZm9yIHRoaXMgbGlicmFyeSwgaXQgaXMgeW91cgorICBjaG9pY2Ugd2hldGhlciB0byBwZXJtaXQgdGhpcyBleGNlcHRpb24gdG8gYXBwbHkgdG8geW91ciBtb2RpZmljYXRpb25zLiAKKyAgSWYgeW91IGRvIG5vdCB3aXNoIHRoYXQsIHlvdSBtdXN0IGRlbGV0ZSB0aGUgZXhjZXB0aW9uIG5vdGljZSBmcm9tIHN1Y2gKKyAgY29kZSBhbmQvb3IgYWRqdXN0IHRoZSBsaWNlbnNpbmcgY29uZGl0aW9ucyBub3RpY2UgYWNjb3JkaW5nbHkuCisKKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvd3hXaW5MTC0zLjEgYi9saWNlbnNlcy93eFdpbkxMLTMuMQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDVmOTE1Ci0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMvd3hXaW5MTC0zLjEKQEAgLTAsMCArMSw1NCBAQAorICAgICAgICAgICAgICAgIHd4V2luZG93cyBMaWJyYXJ5IExpY2VuY2UsIFZlcnNpb24gMy4xCisgICAgICAgICAgICAgICAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworICBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwNSBKdWxpYW4gU21hcnQsIFJvYmVydCBSb2VibGluZyBldCBhbAorCisgIEV2ZXJ5b25lIGlzIHBlcm1pdHRlZCB0byBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcworICBvZiB0aGlzIGxpY2VuY2UgZG9jdW1lbnQsIGJ1dCBjaGFuZ2luZyBpdCBpcyBub3QgYWxsb3dlZC4KKworICAgICAgICAgICAgICAgICAgICAgICBXWFdJTkRPV1MgTElCUkFSWSBMSUNFTkNFCisgICAgIFRFUk1TIEFORCBDT05ESVRJT05TIEZPUiBDT1BZSU5HLCBESVNUUklCVVRJT04gQU5EIE1PRElGSUNBVElPTgorICAKKyAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbmNlIGFzIHB1Ymxpc2hlZCBieQorICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbmNlLCBvciAoYXQKKyAgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICAKKyAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsIGJ1dAorICBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIExpYnJhcnkKKyAgR2VuZXJhbCBQdWJsaWMgTGljZW5jZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2VuY2UKKyAgYWxvbmcgd2l0aCB0aGlzIHNvZnR3YXJlLCB1c3VhbGx5IGluIGEgZmlsZSBuYW1lZCBDT1BZSU5HLkxJQi4gIElmIG5vdCwKKyAgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsCisgIEJvc3RvbiwgTUEgMDIxMTEtMTMwNyBVU0EuCisKKyAgRVhDRVBUSU9OIE5PVElDRQorCisgIDEuIEFzIGEgc3BlY2lhbCBleGNlcHRpb24sIHRoZSBjb3B5cmlnaHQgaG9sZGVycyBvZiB0aGlzIGxpYnJhcnkgZ2l2ZQorICBwZXJtaXNzaW9uIGZvciBhZGRpdGlvbmFsIHVzZXMgb2YgdGhlIHRleHQgY29udGFpbmVkIGluIHRoaXMgcmVsZWFzZSBvZgorICB0aGUgbGlicmFyeSBhcyBsaWNlbmNlZCB1bmRlciB0aGUgd3hXaW5kb3dzIExpYnJhcnkgTGljZW5jZSwgYXBwbHlpbmcKKyAgZWl0aGVyIHZlcnNpb24gMy4xIG9mIHRoZSBMaWNlbmNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uIG9mCisgIHRoZSBMaWNlbmNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgY29weXJpZ2h0IGhvbGRlcnMgb2YgdmVyc2lvbgorICAzLjEgb2YgdGhlIExpY2VuY2UgZG9jdW1lbnQuCisKKyAgMi4gVGhlIGV4Y2VwdGlvbiBpcyB0aGF0IHlvdSBtYXkgdXNlLCBjb3B5LCBsaW5rLCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUKKyAgdW5kZXIgeW91ciBvd24gdGVybXMsIGJpbmFyeSBvYmplY3QgY29kZSB2ZXJzaW9ucyBvZiB3b3JrcyBiYXNlZAorICBvbiB0aGUgTGlicmFyeS4KKworICAzLiBJZiB5b3UgY29weSBjb2RlIGZyb20gZmlsZXMgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUKKyAgR2VuZXJhbCBQdWJsaWMgTGljZW5jZSBvciB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5jZSBpbnRvIGEKKyAgY29weSBvZiB0aGlzIGxpYnJhcnksIGFzIHRoaXMgbGljZW5jZSBwZXJtaXRzLCB0aGUgZXhjZXB0aW9uIGRvZXMgbm90CisgIGFwcGx5IHRvIHRoZSBjb2RlIHRoYXQgeW91IGFkZCBpbiB0aGlzIHdheS4gIFRvIGF2b2lkIG1pc2xlYWRpbmcgYW55b25lIGFzCisgIHRvIHRoZSBzdGF0dXMgb2Ygc3VjaCBtb2RpZmllZCBmaWxlcywgeW91IG11c3QgZGVsZXRlIHRoaXMgZXhjZXB0aW9uCisgIG5vdGljZSBmcm9tIHN1Y2ggY29kZSBhbmQvb3IgYWRqdXN0IHRoZSBsaWNlbnNpbmcgY29uZGl0aW9ucyBub3RpY2UKKyAgYWNjb3JkaW5nbHkuCisKKyAgNC4gSWYgeW91IHdyaXRlIG1vZGlmaWNhdGlvbnMgb2YgeW91ciBvd24gZm9yIHRoaXMgbGlicmFyeSwgaXQgaXMgeW91cgorICBjaG9pY2Ugd2hldGhlciB0byBwZXJtaXQgdGhpcyBleGNlcHRpb24gdG8gYXBwbHkgdG8geW91ciBtb2RpZmljYXRpb25zLiAKKyAgSWYgeW91IGRvIG5vdCB3aXNoIHRoYXQsIHlvdSBtdXN0IGRlbGV0ZSB0aGUgZXhjZXB0aW9uIG5vdGljZSBmcm9tIHN1Y2gKKyAgY29kZSBhbmQvb3IgYWRqdXN0IHRoZSBsaWNlbnNpbmcgY29uZGl0aW9ucyBub3RpY2UgYWNjb3JkaW5nbHkuCisKKworCmRpZmYgLS1naXQgYS9saWNlbnNlcy94YmF0dGxlIGIvbGljZW5zZXMveGJhdHRsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMGYyMjhkCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMveGJhdHRsZQpAQCAtMCwwICsxLDg0IEBACisKKyAgICAgICAgICAgICAgICAgICAgQ09QWVJJR0hUOiBDT1BZSU5HIFBPTElDSUVTCisKKzEuICBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHhiYXR0bGUgc291cmNlCitjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5CithbmQgYXBwcm9wcmlhdGVseSBwdWJsaXNoIG9uIGVhY2ggY29weSBhIHZhbGlkIGNvcHlyaWdodCBub3RpY2UKKyJDb3B5cmlnaHQgKEMpIDE5OTUgU3RldmUgTGVoYXIgYW5kIEdyZWcgTGVzaGVyIiAob3Igd2l0aCB3aGF0ZXZlciB5ZWFyCitpcyBhcHByb3ByaWF0ZSk7IGtlZXAgaW50YWN0IHRoZSBub3RpY2VzIG9uIGFsbCBmaWxlcyB0aGF0IHJlZmVyIHRvIHRoaXMKK0xpY2Vuc2UgQWdyZWVtZW50IGFuZCB0byB0aGUgYWJzZW5jZSBvZiBhbnkgd2FycmFudHk7IGFuZCBnaXZlIGFueQorb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgeGJhdHRsZSBwcm9ncmFtIGEgY29weSBvZiB0aGlzIExpY2Vuc2UKK0FncmVlbWVudCBhbG9uZyB3aXRoIHRoZSBwcm9ncmFtLiAgWW91IG1heSBjaGFyZ2UgYSBkaXN0cmlidXRpb24gZmVlCitmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZiB0cmFuc2ZlcnJpbmcgYSBjb3B5LgorCisyLiAgWW91IG1heSBtb2RpZnkgeW91ciBjb3B5IG9yIGNvcGllcyBvZiB4YmF0dGxlIHNvdXJjZSBjb2RlIG9yIGFueQorcG9ydGlvbiBvZiBpdCwgYW5kIGNvcHkgYW5kIGRpc3RyaWJ1dGUgc3VjaCBtb2RpZmljYXRpb25zIHVuZGVyIHRoZQordGVybXMgb2YgUGFyYWdyYXBoIDEgYWJvdmUsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gZG8gdGhlIGZvbGxvd2luZzoKKworICAgIGEpIGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nCisgICAgdGhhdCB5b3UgY2hhbmdlZCB0aGUgZmlsZXMgYW5kIHRoZSBkYXRlIG9mIGFueSBjaGFuZ2U7IGFuZAorCisgICAgYikgY2F1c2UgdGhlIHdob2xlIG9mIGFueSB3b3JrIHRoYXQgeW91IGRpc3RyaWJ1dGUgb3IgcHVibGlzaCwKKyAgICB0aGF0IGluIHdob2xlIG9yIGluIHBhcnQgY29udGFpbnMgb3IgaXMgYSBkZXJpdmF0aXZlIG9mIHhiYXR0bGUKKyAgICBvciBhbnkgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkCisgICAgcGFydGllcyBvbiB0ZXJtcyBpZGVudGljYWwgdG8gdGhvc2UgY29udGFpbmVkIGluIHRoaXMgTGljZW5zZQorICAgIEFncmVlbWVudCAoZXhjZXB0IHRoYXQgeW91IG1heSBjaG9vc2UgdG8gZ3JhbnQgbW9yZSBleHRlbnNpdmUKKyAgICB3YXJyYW50eSBwcm90ZWN0aW9uIHRvIHNvbWUgb3IgYWxsIHRoaXJkIHBhcnRpZXMsIGF0IHlvdXIgb3B0aW9uKS4KKworICAgIGMpIFlvdSBtYXkgY2hhcmdlIGEgZGlzdHJpYnV0aW9uIGZlZSBmb3IgdGhlIHBoeXNpY2FsIGFjdCBvZgorICAgIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5CisgICAgcHJvdGVjdGlvbiBpbiBleGNoYW5nZSBmb3IgYSBmZWUuCisKK01lcmUgYWdncmVnYXRpb24gb2YgYW5vdGhlciB1bnJlbGF0ZWQgcHJvZ3JhbSB3aXRoIHRoaXMgcHJvZ3JhbSAob3IgaXRzCitkZXJpdmF0aXZlKSBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZwordGhlIG90aGVyIHByb2dyYW0gdW5kZXIgdGhlIHNjb3BlIG9mIHRoZXNlIHRlcm1zLgorCiszLiAgWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHhiYXR0bGUgKG9yIGEgcG9ydGlvbiBvciBkZXJpdmF0aXZlIG9mIGl0LAordW5kZXIgUGFyYWdyYXBoIDIpIGluIG9iamVjdCBjb2RlIG9yIGV4ZWN1dGFibGUgZm9ybSB1bmRlciB0aGUgdGVybXMgb2YKK1BhcmFncmFwaHMgMSBhbmQgMiBhYm92ZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgorCisgICAgYSkgYWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZQorICAgIHNvdXJjZSBjb2RlLCB3aGljaCBtdXN0IGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZgorICAgIFBhcmFncmFwaHMgMSBhbmQgMiBhYm92ZTsgb3IsCisKKyAgICBiKSBhY2NvbXBhbnkgaXQgd2l0aCBhIHdyaXR0ZW4gb2ZmZXIsIHZhbGlkIGZvciBhdCBsZWFzdCB0aHJlZQorICAgIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSBmcmVlIChleGNlcHQgZm9yIGEgbm9taW5hbAorICAgIHNoaXBwaW5nIGNoYXJnZSkgYSBjb21wbGV0ZSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlCisgICAgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSwgdG8gYmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIHRlcm1zIG9mCisgICAgUGFyYWdyYXBocyAxIGFuZCAyIGFib3ZlOyBvciwKKworICAgIGMpIGFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gd2hlcmUgdGhlCisgICAgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZSBtYXkgYmUgb2J0YWluZWQuIChUaGlzIGFsdGVybmF0aXZlIGlzCisgICAgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UKKyAgICByZWNlaXZlZCB0aGUgcHJvZ3JhbSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gYWxvbmUuKQorCitGb3IgYW4gZXhlY3V0YWJsZSBmaWxlLCBjb21wbGV0ZSBzb3VyY2UgY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvcgorYWxsIG1vZHVsZXMgaXQgY29udGFpbnM7IGJ1dCwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgaXQgbmVlZCBub3QgaW5jbHVkZQorc291cmNlIGNvZGUgZm9yIG1vZHVsZXMgd2hpY2ggYXJlIHN0YW5kYXJkIGxpYnJhcmllcyB0aGF0IGFjY29tcGFueSB0aGUKK29wZXJhdGluZyBzeXN0ZW0gb24gd2hpY2ggdGhlIGV4ZWN1dGFibGUgZmlsZSBydW5zLgorCis0LiAgWW91IG1heSBub3QgY29weSwgc3VibGljZW5zZSwgZGlzdHJpYnV0ZSBvciB0cmFuc2ZlciB4YmF0dGxlCitleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZSBBZ3JlZW1lbnQuIEFueSBhdHRlbXB0CitvdGhlcndpc2UgdG8gY29weSwgc3VibGljZW5zZSwgZGlzdHJpYnV0ZSBvciB0cmFuc2ZlciB4YmF0dGxlIGlzIHZvaWQgYW5kCit5b3VyIHJpZ2h0cyB0byB1c2UgeGJhdHRsZSB1bmRlciB0aGlzIExpY2Vuc2UgYWdyZWVtZW50IHNoYWxsIGJlCithdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZWQuIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29tcHV0ZXIKK3NvZnR3YXJlIHByb2dyYW1zIGZyb20geW91IHdpdGggdGhpcyBMaWNlbnNlIEFncmVlbWVudCB3aWxsIG5vdCBoYXZlCit0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaCBwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuCisKKwkJCSAgTk8gV0FSUkFOVFkKKworQkVDQVVTRSBYQkFUVExFIElTIExJQ0VOU0VEIEZSRUUgT0YgQ0hBUkdFLCBXRSBQUk9WSURFIEFCU09MVVRFTFkgTk8KK1dBUlJBTlRZLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIFNUQVRFIExBVy4gIFRIRSBFTlRJUkUKK1JJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLgorU0hPVUxEIFRIRSBYQkFUVExFIFBST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTAorTkVDRVNTQVJZIFNFUlZJQ0lORywgUkVQQUlSIE9SIENPUlJFQ1RJT04uCisKK0lOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBXSUxMIFNURVZFIExFSEFSLCBHUkVHCitMRVNIRVIsIE9SIEFOWSBPVEhFUiBQQVJUWSBXSE8gTUFZIE1PRElGWSBBTkQgUkVESVNUUklCVVRFIFhCQVRUTEUgQVMKK1BFUk1JVFRFRCBBQk9WRSwgQkUgTElBQkxFIFRPIFlPVSBGT1IgREFNQUdFUywgSU5DTFVESU5HIEFOWSBMT1NUIFBST0ZJVFMsCitMT1NUIE1PTklFUywgT1IgT1RIRVIgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORworT1VUIE9GIFRIRSBVU0UgT1IgSU5BQklMSVRZIFRPIFVTRSAoSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBMT1NTIE9GCitEQVRBIE9SIERBVEEgQkVJTkcgUkVOREVSRUQgSU5BQ0NVUkFURSBPUiBMT1NTRVMgU1VTVEFJTkVEIEJZIFRISVJEIFBBUlRJRVMKK09SIEEgRkFJTFVSRSBPRiBUSEUgUFJPR1JBTSBUTyBPUEVSQVRFIFdJVEggUFJPR1JBTVMgTk9UIERJU1RSSUJVVEVEIEJZIFNURVZFCitMRUhBUiBPUiBHUkVHIExFU0hFUikgVEhFIFBST0dSQU0sIEVWRU4gSUYgWU9VIEhBVkUgQkVFTiBBRFZJU0VEIE9GIFRIRQorUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLCBPUiBGT1IgQU5ZIENMQUlNIEJZIEFOWSBPVEhFUiBQQVJUWS4KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL3hib2luZyBiL2xpY2Vuc2VzL3hib2luZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NmFmYmZjCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMveGJvaW5nCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBYQm9pbmcgLSBBbiBYMTEgYmxvY2tvdXQgc3R5bGUgY29tcHV0ZXIgZ2FtZQorICoKKyAqIChjKSBDb3B5cmlnaHQgMTk5My0xOTk3LCBKdXN0aW4gQy4gS2liZWxsLCBBbGwgUmlnaHRzIFJlc2VydmVkCisgKgorICogVGhlIFggQ29uc29ydGl1bSwgYW5kIGFueSBwYXJ0eSBvYnRhaW5pbmcgYSBjb3B5IG9mIHRoZXNlIGZpbGVzIGZyb20KKyAqIHRoZSBYIENvbnNvcnRpdW0sIGRpcmVjdGx5IG9yIGluZGlyZWN0bHksIGlzIGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCBhCisgKiBmdWxsIGFuZCB1bnJlc3RyaWN0ZWQgaXJyZXZvY2FibGUsIHdvcmxkLXdpZGUsIHBhaWQgdXAsIHJveWFsdHktZnJlZSwKKyAqIG5vbmV4Y2x1c2l2ZSByaWdodCBhbmQgbGljZW5zZSB0byBkZWFsIGluIHRoaXMgc29mdHdhcmUgYW5kCisgKiBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlCisgKiByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHdobyByZWNlaXZlCisgKiBjb3BpZXMgZnJvbSBhbnkgc3VjaCBwYXJ0eSB0byBkbyBzby4gIFRoaXMgbGljZW5zZSBpbmNsdWRlcyB3aXRob3V0CisgKiBsaW1pdGF0aW9uIGEgbGljZW5zZSB0byBkbyB0aGUgZm9yZWdvaW5nIGFjdGlvbnMgdW5kZXIgYW55IHBhdGVudHMgb2YKKyAqIHRoZSBwYXJ0eSBzdXBwbHlpbmcgdGhpcyBzb2Z0d2FyZSB0byB0aGUgWCBDb25zb3J0aXVtLgorICoKKyAqIEluIG5vIGV2ZW50IHNoYWxsIHRoZSBhdXRob3IgYmUgbGlhYmxlIHRvIGFueSBwYXJ0eSBmb3IgZGlyZWN0LCBpbmRpcmVjdCwKKyAqIHNwZWNpYWwsIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyBhcmlzaW5nIG91dCBvZiB0aGUgdXNlIG9mCisgKiB0aGlzIHNvZnR3YXJlIGFuZCBpdHMgZG9jdW1lbnRhdGlvbiwgZXZlbiBpZiB0aGUgYXV0aG9yIGhhcyBiZWVuIGFkdmlzZWQKKyAqIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoIGRhbWFnZS4KKyAqCisgKiBUaGUgYXV0aG9yIHNwZWNpZmljYWxseSBkaXNjbGFpbXMgYW55IHdhcnJhbnRpZXMsIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkCisgKiB0bywgdGhlIGltcGxpZWQgd2FycmFudGllcyBvZiBtZXJjaGFudGFiaWxpdHkgYW5kIGZpdG5lc3MgZm9yIGEgcGFydGljdWxhcgorICogcHVycG9zZS4gIFRoZSBzb2Z0d2FyZSBwcm92aWRlZCBoZXJldW5kZXIgaXMgb24gYW4gIkFTIElTIiBiYXNpcywgYW5kIHRoZQorICogYXV0aG9yIGhhcyBubyBvYmxpZ2F0aW9uIHRvIHByb3ZpZGUgbWFpbnRlbmFuY2UsIHN1cHBvcnQsIHVwZGF0ZXMsCisgKiBlbmhhbmNlbWVudHMsIG9yIG1vZGlmaWNhdGlvbnMuCisgKgorICogIEF1dGhvcjogSnVzdGluIENocmlzdG9waGVyIEtpYmVsbCAgCisgKiAgIGVtYWlsOiBqY2tAY2F0dC5ybWl0LmVkdS5hdSAKKyAqICAgcGhvbmU6IDYxIDM5MjgyIDI0NTYgYi9oCisgKiBBZGRyZXNzOiBQTyBCT1ggMjYwLCBFbHRoYW0sIFZpY3RvcmlhLCBBdXN0cmFsaWEsIDMwOTUuCisgKi8KZGlmZiAtLWdpdCBhL2xpY2Vuc2VzL3hlYXJ0aCBiL2xpY2Vuc2VzL3hlYXJ0aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjMyYmJjCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMveGVhcnRoCkBAIC0wLDAgKzEsNDAgQEAKK0xFR0FMIFNUVUZGCisKKyAgICBDb3B5cmlnaHQgKEMpIDE5ODksIDE5OTAsIDE5OTMtMTk5NSwgMTk5OSBLaXJrIExhdXJpdHogSm9obnNvbgorCisgICAgUGFydHMgb2YgdGhlIHNvdXJjZSBjb2RlIChhcyBtYXJrZWQpIGFyZToKKyAgICAgIENvcHlyaWdodCAoQykgMTk4OSwgMTk5MCwgMTk5MSBieSBKaW0gRnJvc3QKKyAgICAgIENvcHlyaWdodCAoQykgMTk5MiBieSBKYW1pZSBaYXdpbnNraSA8and6QGx1Y2lkLmNvbT4KKworICAgIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnkgYW5kIGZyZWVseSBkaXN0cmlidXRlIHhlYXJ0aCBmb3IKKyAgICBub24tY29tbWVyY2lhbCBhbmQgbm90LWZvci1wcm9maXQgcHVycG9zZXMgaXMgaGVyZWJ5IGdyYW50ZWQKKyAgICB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCBib3RoIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZAorICAgIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kIGluIHN1cHBvcnRpbmcKKyAgICBkb2N1bWVudGF0aW9uLgorCisgICAgVW5pc3lzIENvcnBvcmF0aW9uIGhvbGRzIHdvcmxkd2lkZSBwYXRlbnQgcmlnaHRzIG9uIHRoZSBMZW1wZWwgWmV2CisgICAgV2VsY2ggKExaVykgY29tcHJlc3Npb24gdGVjaG5pcXVlIGVtcGxveWVkIGluIHRoZSBDb21wdVNlcnZlIEdJRgorICAgIGltYWdlIGZpbGUgZm9ybWF0IGFzIHdlbGwgYXMgaW4gb3RoZXIgZm9ybWF0cy4gVW5pc3lzIGhhcyBtYWRlIGl0CisgICAgY2xlYXIsIGhvd2V2ZXIsIHRoYXQgaXQgZG9lcyBub3QgcmVxdWlyZSBsaWNlbnNpbmcgb3IgZmVlcyB0byBiZQorICAgIHBhaWQgZm9yIGZyZWVseSBkaXN0cmlidXRlZCwgbm9uLWNvbW1lcmNpYWwgYXBwbGljYXRpb25zIChzdWNoIGFzCisgICAgeGVhcnRoKSB0aGF0IGVtcGxveSBMWlcvR0lGIHRlY2hub2xvZ3kuIFRob3NlIHdpc2hpbmcgZnVydGhlcgorICAgIGluZm9ybWF0aW9uIGFib3V0IGxpY2Vuc2luZyB0aGUgTFpXIHBhdGVudCBzaG91bGQgY29udGFjdCBVbmlzeXMKKyAgICBkaXJlY3RseSBhdCAobHp3X2luZm9AdW5pc3lzLmNvbSkgb3IgYnkgd3JpdGluZyB0bworCisgICAgICBVbmlzeXMgQ29ycG9yYXRpb24KKyAgICAgIFdlbGNoIExpY2Vuc2luZyBEZXBhcnRtZW50CisgICAgICBNL1MtQzFTVzE5CisgICAgICBQLk8uIEJveCA1MDAKKyAgICAgIEJsdWUgQmVsbCwgUEEgMTk0MjQKKworICAgIFRoZSBhdXRob3IgbWFrZXMgbm8gcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzCisgICAgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLiBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcworICAgIG9yIGltcGxpZWQgd2FycmFudHkuCisKKyAgICBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLAorICAgIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUywKKyAgICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIElORElSRUNUCisgICAgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00KKyAgICBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwKKyAgICBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4KKyAgICBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMveG1sZm9ybWF0IGIvbGljZW5zZXMveG1sZm9ybWF0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4NDI5YTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy94bWxmb3JtYXQKQEAgLTAsMCArMSw5MyBAQAoreG1sZm9ybWF0IGlzIGRpc3RyaWJ1dGVkIHVuZGVyIGEgQlNELXN0eWxlIGxpY2Vuc2UuICBUaGlzIGxpY2Vuc2UKK2FwcGxpZXMgdG8gdGhlIGVudGlyZSB4bWxmb3JtYXQgZGlzdHJpYnV0aW9uLCB3aXRoIHRoZSBleGNlcHRpb24gb2YKK3RoZSBSRVggcGFyc2VyIChkZXNjcmliZWQgYmVsb3cpLgorCitDb3B5cmlnaHQgKGMpIDIwMDQsIEtpdGViaXJkLCBMTEMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKworMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKworMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisKKzMuIE5laXRoZXIgdGhlIG5hbWUgb2YgS2l0ZWJpcmQgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heQorICAgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIKK0FORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUKK0xJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKK0NPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCitTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKK0lOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCitDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKK1BPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitUaGUgUkVYIHBhcnNlcgorCit4bWxmb3JtYXQgY29udGFpbnMgY29kZSBiYXNlZCBvbiB0aGUgUkVYIHBhcnNlciwgd2hpY2ggaXMgQ29weXJpZ2h0IChjKSAxOTk4LAorUm9iZXJ0IEQuIENhbWVyb24uICBSRVggaXMgZGVzY3JpYmVkIGluIHRoaXMgZG9jdW1lbnQ6CisKKwlodHRwOi8vd3d3LmNzLnNmdS5jYS9+Y2FtZXJvbi9SRVguaHRtbAorCitUaGUgZG9jdW1lbnQgY29udGFpbnMgYSBQZXJsIGltcGxlbWVudGF0aW9uIG9mIFJFWDoKKworLS0tIGJlZ2luIFJFWCBjb2RlIC0tLQorIyBSRVgvUGVybCAxLjAgCisjIFJvYmVydCBELiBDYW1lcm9uICJSRVg6IFhNTCBTaGFsbG93IFBhcnNpbmcgd2l0aCBSZWd1bGFyIEV4cHJlc3Npb25zIiwKKyMgVGVjaG5pY2FsIFJlcG9ydCBUUiAxOTk4LTE3LCBTY2hvb2wgb2YgQ29tcHV0aW5nIFNjaWVuY2UsIFNpbW9uIEZyYXNlciAKKyMgVW5pdmVyc2l0eSwgTm92ZW1iZXIsIDE5OTguCisjIENvcHlyaWdodCAoYykgMTk5OCwgUm9iZXJ0IEQuIENhbWVyb24uIAorIyBUaGUgZm9sbG93aW5nIGNvZGUgbWF5IGJlIGZyZWVseSB1c2VkIGFuZCBkaXN0cmlidXRlZCBwcm92aWRlZCB0aGF0CisjIHRoaXMgY29weXJpZ2h0IGFuZCBjaXRhdGlvbiBub3RpY2UgcmVtYWlucyBpbnRhY3QgYW5kIHRoYXQgbW9kaWZpY2F0aW9ucworIyBvciBhZGRpdGlvbnMgYXJlIGNsZWFybHkgaWRlbnRpZmllZC4KKworJFRleHRTRSA9ICJbXjxdKyI7CiskVW50aWxIeXBoZW4gPSAiW14tXSotIjsKKyRVbnRpbDJIeXBoZW5zID0gIiRVbnRpbEh5cGhlbig/OlteLV0kVW50aWxIeXBoZW4pKi0iOworJENvbW1lbnRDRSA9ICIkVW50aWwySHlwaGVucz4/IjsKKyRVbnRpbFJTQnMgPSAiW15cXF1dKl0oPzpbXlxcXV0rXSkqXSsiOworJENEQVRBX0NFID0gIiRVbnRpbFJTQnMoPzpbXlxcXT5dJFVudGlsUlNCcykqPiI7CiskUyA9ICJbIFxcblxcdFxccl0rIjsKKyROYW1lU3RydCA9ICJbQS1aYS16XzpdfFteXFx4MDAtXFx4N0ZdIjsKKyROYW1lQ2hhciA9ICJbQS1aYS16MC05XzouLV18W15cXHgwMC1cXHg3Rl0iOworJE5hbWUgPSAiKD86JE5hbWVTdHJ0KSg/OiROYW1lQ2hhcikqIjsKKyRRdW90ZVNFID0gIlwiW15cIl0qXCJ8J1teJ10qJyI7CiskRFRfSWRlbnRTRSA9ICIkUyROYW1lKD86JFMoPzokTmFtZXwkUXVvdGVTRSkpKiI7CiskTWFya3VwRGVjbENFID0gIig/OlteXFxdXCInPjxdK3wkUXVvdGVTRSkqPiI7CiskUzEgPSAiW1xcblxcclxcdCBdIjsKKyRVbnRpbFFNcyA9ICJbXj9dKlxcPysiOworJFBJX1RhaWwgPSAiXFw/PnwkUzEkVW50aWxRTXMoPzpbXj4/XSRVbnRpbFFNcykqPiI7CiskRFRfSXRlbVNFID0KKyI8KD86ISg/Oi0tJFVudGlsMkh5cGhlbnM+fFteLV0kTWFya3VwRGVjbENFKXxcXD8kTmFtZSg/OiRQSV9UYWlsKSl8JSROYW1lO3wkUyI7CiskRG9jVHlwZUNFID0gIiREVF9JZGVudFNFKD86JFMpPyg/OlxcWyg/OiREVF9JdGVtU0UpKl0oPzokUyk/KT8+PyI7CiskRGVjbENFID0KKyItLSg/OiRDb21tZW50Q0UpP3xcXFtDREFUQVxcWyg/OiRDREFUQV9DRSk/fERPQ1RZUEUoPzokRG9jVHlwZUNFKT8iOworJFBJX0NFID0gIiROYW1lKD86JFBJX1RhaWwpPyI7CiskRW5kVGFnQ0UgPSAiJE5hbWUoPzokUyk/Pj8iOworJEF0dFZhbFNFID0gIlwiW148XCJdKlwifCdbXjwnXSonIjsKKyRFbGVtVGFnQ0UgPSAiJE5hbWUoPzokUyROYW1lKD86JFMpPz0oPzokUyk/KD86JEF0dFZhbFNFKSkqKD86JFMpPy8/Pj8iOworJE1hcmt1cFNQRSA9CisiPCg/OiEoPzokRGVjbENFKT98XFw/KD86JFBJX0NFKT98Lyg/OiRFbmRUYWdDRSk/fCg/OiRFbGVtVGFnQ0UpPykiOworJFhNTF9TUEUgPSAiJFRleHRTRXwkTWFya3VwU1BFIjsKKworCitzdWIgU2hhbGxvd1BhcnNlIHsgCisgIG15KCRYTUxfZG9jdW1lbnQpID0gQF87CisgIHJldHVybiAkWE1MX2RvY3VtZW50ID1+IC8kWE1MX1NQRS9nOworfQorLS0tIGVuZCBSRVggY29kZSAtLS0KKworVGhlIFBlcmwgYW5kIFJ1YnkgaW1wbGVtZW50YXRpb25zIG9mIHhtbGZvcm1hdCBjb250YWluIHBhcnNlcnMgdGhhdAorYXJlIGJhc2VkIG9uIHRoZSBwcmVjZWRpbmcgY29kZSBhbmQgYXJlIGVzc2VudGlhbGx5IHRoZSBzYW1lLCB3aXRoIHRoZQorZXhjZXB0aW9uIG9mIGNoYW5nZXMgdG8gdmFyaWFibGUgYW5kIGZ1bmN0aW9uIG5hbWVzLgorCmRpZmYgLS1naXQgYS9saWNlbnNlcy94cmVmLmxpc3AgYi9saWNlbnNlcy94cmVmLmxpc3AKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRlZTAwYwotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL3hyZWYubGlzcApAQCAtMCwwICsxLDQ3IEBACisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCitHZW5lcmFsIExpY2Vuc2UgQWdyZWVtZW50IGFuZCBMYWNrIG9mIFdhcnJhbnR5ICoqKioqKioqKioqKioqKioqCisqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisKK1RoaXMgc29mdHdhcmUgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCAoYm90aAoraW4gYW5kIG9mIGl0c2VsZiBhbmQgYXMgYW4gZXhhbXBsZSBvZiBsaXNwIHByb2dyYW1taW5nKSwgYnV0IFdJVEhPVVQKK0FOWSBXQVJSQU5UWS4gVGhlIGF1dGhvcihzKSBkbyBub3QgYWNjZXB0IHJlc3BvbnNpYmlsaXR5IHRvIGFueW9uZSBmb3IKK3RoZSBjb25zZXF1ZW5jZXMgb2YgdXNpbmcgaXQgb3IgZm9yIHdoZXRoZXIgaXQgc2VydmVzIGFueSBwYXJ0aWN1bGFyCitwdXJwb3NlIG9yIHdvcmtzIGF0IGFsbC4gTm8gd2FycmFudHkgaXMgbWFkZSBhYm91dCB0aGUgc29mdHdhcmUgb3IgaXRzCitwZXJmb3JtYW5jZS4KKworVXNlIGFuZCBjb3B5aW5nIG9mIHRoaXMgc29mdHdhcmUgYW5kIHRoZSBwcmVwYXJhdGlvbiBvZiBkZXJpdmF0aXZlCit3b3JrcyBiYXNlZCBvbiB0aGlzIHNvZnR3YXJlIGFyZSBwZXJtaXR0ZWQsIHNvIGxvbmcgYXMgdGhlIGZvbGxvd2luZworY29uZGl0aW9ucyBhcmUgbWV0OgorCW8gIFRoZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIGVudGlyZSBub3RpY2UgYXJlIGluY2x1ZGVkIGludGFjdAorCSAgIGFuZCBwcm9taW5lbnRseSBjYXJyaWVkIG9uIGFsbCBjb3BpZXMgYW5kIHN1cHBvcnRpbmcgZG9jdW1lbnRhdGlvbi4KKwlvICBObyBmZWVzIG9yIGNvbXBlbnNhdGlvbiBhcmUgY2hhcmdlZCBmb3IgdXNlLCBjb3BpZXMsIG9yCisJICAgYWNjZXNzIHRvIHRoaXMgc29mdHdhcmUuIFlvdSBtYXkgY2hhcmdlIGEgbm9taW5hbAorCSAgIGRpc3RyaWJ1dGlvbiBmZWUgZm9yIHRoZSBwaHlzaWNhbCBhY3Qgb2YgdHJhbnNmZXJyaW5nIGEKKwkgICBjb3B5LCBidXQgeW91IG1heSBub3QgY2hhcmdlIGZvciB0aGUgcHJvZ3JhbSBpdHNlbGYuCisJbyAgSWYgeW91IG1vZGlmeSB0aGlzIHNvZnR3YXJlLCB5b3UgbXVzdCBjYXVzZSB0aGUgbW9kaWZpZWQKKwkgICBmaWxlKHMpIHRvIGNhcnJ5IHByb21pbmVudCBub3RpY2VzIChhIENoYW5nZSBMb2cpCisJICAgZGVzY3JpYmluZyB0aGUgY2hhbmdlcywgd2hvIG1hZGUgdGhlIGNoYW5nZXMsIGFuZCB0aGUgZGF0ZQorCSAgIG9mIHRob3NlIGNoYW5nZXMuCisJbyAgQW55IHdvcmsgZGlzdHJpYnV0ZWQgb3IgcHVibGlzaGVkIHRoYXQgaW4gd2hvbGUgb3IgaW4gcGFydAorCSAgIGNvbnRhaW5zIG9yIGlzIGEgZGVyaXZhdGl2ZSBvZiB0aGlzIHNvZnR3YXJlIG9yIGFueSBwYXJ0CisJICAgdGhlcmVvZiBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBvZiB0aGlzIGFncmVlbWVudC4gVGhlCisJICAgYWdncmVnYXRpb24gb2YgYW5vdGhlciB1bnJlbGF0ZWQgcHJvZ3JhbSB3aXRoIHRoaXMgc29mdHdhcmUKKwkgICBvciBpdHMgZGVyaXZhdGl2ZSBvbiBhIHZvbHVtZSBvZiBzdG9yYWdlIG9yIGRpc3RyaWJ1dGlvbgorCSAgIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgcHJvZ3JhbSB1bmRlciB0aGUgc2NvcGUKKwkgICBvZiB0aGVzZSB0ZXJtcy4KKwlvICBQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gbWFudWZhY3R1cmVycyBhbmQgZGlzdHJpYnV0b3JzIG9mCisJICAgbGlzcCBjb21waWxlcnMgYW5kIGludGVycHJldGVycyB0byBpbmNsdWRlIHRoaXMgc29mdHdhcmUKKwkgICB3aXRoIHRoZWlyIGRpc3RyaWJ1dGlvbi4KKworVGhpcyBzb2Z0d2FyZSBpcyBtYWRlIGF2YWlsYWJsZSBBUyBJUywgYW5kIGlzIGRpc3RyaWJ1dGVkIHdpdGhvdXQKK3dhcnJhbnR5IG9mIGFueSBraW5kLCBlaXRoZXIgZXhwcmVzc2VkIG9yIGltcGxpZWQuCisKK0luIG5vIGV2ZW50IHdpbGwgdGhlIGF1dGhvcihzKSBvciB0aGVpciBpbnN0aXR1dGlvbnMgYmUgbGlhYmxlIHRvIHlvdQorZm9yIGRhbWFnZXMsIGluY2x1ZGluZyBsb3N0IHByb2ZpdHMsIGxvc3QgbW9uaWVzLCBvciBvdGhlciBzcGVjaWFsLAoraW5jaWRlbnRhbCBvciBjb25zZXF1ZW50aWFsIGRhbWFnZXMgYXJpc2luZyBvdXQgb2Ygb3IgaW4gY29ubmVjdGlvbgord2l0aCB0aGUgdXNlIG9yIGluYWJpbGl0eSB0byB1c2UgKGluY2x1ZGluZyBidXQgbm90IGxpbWl0ZWQgdG8gbG9zcyBvZgorZGF0YSBvciBkYXRhIGJlaW5nIHJlbmRlcmVkIGluYWNjdXJhdGUgb3IgbG9zc2VzIHN1c3RhaW5lZCBieSB0aGlyZAorcGFydGllcyBvciBhIGZhaWx1cmUgb2YgdGhlIHByb2dyYW0gdG8gb3BlcmF0ZSBhcyBkb2N1bWVudGVkKSB0aGUKK3Byb2dyYW0sIGV2ZW4gaWYgeW91IGhhdmUgYmVlbiBhZHZpc2VkIG9mIHRoZSBwb3NzaWJpbGl0eSBvZiBzdWNoCitkYW1hbmdlcywgb3IgZm9yIGFueSBjbGFpbSBieSBhbnkgb3RoZXIgcGFydHksIHdoZXRoZXIgaW4gYW4gYWN0aW9uIG9mCitjb250cmFjdCwgbmVnbGlnZW5jZSwgb3Igb3RoZXIgdG9ydGlvdXMgYWN0aW9uLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMveHRycyBiL2xpY2Vuc2VzL3h0cnMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTVlNmQzYQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL3h0cnMKQEAgLTAsMCArMSwyMiBAQAorQ29weXJpZ2h0IChDKSAxOTkyIENsYXJlbmRvbiBIaWxsIFNvZnR3YXJlLgorCitQZXJtaXNzaW9uIGlzIGdyYW50ZWQgdG8gYW55IGluZGl2aWR1YWwgb3IgaW5zdGl0dXRpb24gdG8gdXNlLCBjb3B5LAorb3IgcmVkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUsIHByb3ZpZGVkIHRoaXMgY29weXJpZ2h0IG5vdGljZSBpcyByZXRhaW5lZC4gCisKK1RoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGFueSBleHByZXNzZWQgb3IgaW1wbGllZAord2FycmFudHkuICBJZiB0aGlzIHNvZnR3YXJlIGJyaW5ncyBvbiBhbnkgc29ydCBvZiBkYW1hZ2UgLS0gcGh5c2ljYWwsCittb25ldGFyeSwgZW1vdGlvbmFsLCBvciBicmFpbiAtLSB0b28gYmFkLiAgWW91J3ZlIGdvdCBubyBvbmUgdG8gYmxhbWUKK2J1dCB5b3Vyc2VsZi4gCisKK1RoZSBzb2Z0d2FyZSBtYXkgYmUgbW9kaWZpZWQgZm9yIHlvdXIgb3duIHB1cnBvc2VzLCBidXQgbW9kaWZpZWQgdmVyc2lvbnMKK211c3QgcmV0YWluIHRoaXMgbm90aWNlLgorCisKK0NvcHlyaWdodCAoYykgMTk5Ni0xOTk4LCAyMDAwLCBUaW1vdGh5IE1hbm4KK0NvcHlyaWdodCAoYykgMTk5OCBVbHJpY2ggTXVlbGxlcgorQ29weXJpZ2h0IDE5OTksIFBldGVyIFcuIENlcnZhc2lvCisKK1RoaXMgc29mdHdhcmUgbWF5IGJlIGNvcGllZCwgbW9kaWZpZWQsIGFuZCB1c2VkIGZvciBhbnkgcHVycG9zZQord2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQgKDEpIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGlzCityZXRhaW5lZCwgYW5kICgyKSBtb2RpZmllZCB2ZXJzaW9ucyBhcmUgY2xlYXJseSBtYXJrZWQgYXMgaGF2aW5nCitiZWVuIG1vZGlmaWVkLCB3aXRoIHRoZSBtb2RpZmllcidzIG5hbWUgYW5kIHRoZSBkYXRlIGluY2x1ZGVkLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMveHYgYi9saWNlbnNlcy94dgpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOGRmNTAwCi0tLSAvZGV2L251bGwKKysrIGIvbGljZW5zZXMveHYKQEAgLTAsMCArMSwxNjAgQEAKKyhOb3RlOiBUaGlzIGhhcyBiZWVuIGNoYW5nZWQsIGFuZCBob3BlZnVsbHkgY2xhcmlmaWVkLCBmcm9tIHRoZSAzLjAwCit2ZXJzaW9uIG9mIHRoaXMgaW5mby4gIFBsZWFzZSByZWFkIGl0LikKKworVGhhbmsgeW91IGZvciBhY3F1aXJpbmcgYSBjb3B5IG9mIFhWLCBhIHByZXR0eSBuaWZ0eSBYIHByb2dyYW0uCitJIGhvcGUgeW91IGVuam95IHVzaW5nIGl0LCBhcyBJJ3ZlIGVuam95ZWQgd3JpdGluZyBpdC4KKworVGhlIGxhdGVzdCB2ZXJzaW9uIG9mIFhWIChvciBhdCBsZWFzdCBhIHBvaW50ZXIgdG8gaXQpIGlzIGF2YWlsYWJsZQordmlhIGFub255bW91cyBmdHAgb24gZnRwLmNpcy51cGVubi5lZHUsIGluIHRoZSBkaXJlY3RvcnkgcHViL3h2LiAgSWYKK3lvdSdyZSBub3Qgc3VyZSBpZiB5b3UgaGF2ZSB0aGUgbGF0ZXN0IHZlcnNpb24sIG9yIHlvdSBhcmUgbWlzc2luZyB0aGUKK3NvdXJjZSBvciBkb2N1bWVudGF0aW9uIGZvciBYViwgUExFQVNFIHBpY2sgdXAgdGhlIGxhdGVzdCB2ZXJzaW9uIG9mCit0aGUgeHYgZGlzdHJpYnV0aW9uLiAgRG8gKm5vdCogc2VuZCBtYWlsIHVubGVzcyBhYnNvbHV0ZWx5IG5lY2Vzc2FyeQorKGllLCB5b3UgZG9uJ3QgaGF2ZSBmdHAgY2FwYWJpbGl0eSkuCisKK05vdGU6ICBUaGUgZG9jdW1lbnRhdGlvbiAoJ3h2ZG9jcy5wcycpIG1heSBiZSBpbnN0YWxsZWQgaW4gJy91c3IvbG9jYWwnLgorCitJZiB5b3UncmUgdmlld2luZyB0aGlzIGluZm9ybWF0aW9uIHZpYSB0aGUgJ0Fib3V0IFhWJyBjb21tYW5kLCBhbmQKK3lvdSdkIGxpa2UgdG8gcHJpbnQgaXQgb3V0LCBhIGNvcHkgb2YgdGhpcyBpbmZvIGNhbiBiZSBmb3VuZCBpbiB0aGUKK1JFQURNRSBmaWxlIGluIHRoZSB0b3AtbGV2ZWwgWFYgc291cmNlIGRpcmVjdG9yeS4gIFByaW50IHRoYXQuICBJZiB5b3UKK2Rvbid0IGhhdmUgaXQsIHNlZSB0aGUgcHJldmlvdXMgcGFyYWdyYXBoLgorCisKK1hWIExpY2Vuc2luZyBJbmZvcm1hdGlvbgorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitYViBJUyBTSEFSRVdBUkUgRk9SIFBFUlNPTkFMIFVTRSBPTkxZLiAgCisKK1lvdSBtYXkgdXNlIFhWIGZvciB5b3VyIG93biBhbXVzZW1lbnQsIGFuZCBpZiB5b3UgZmluZCBpdCBuaWZ0eSwKK3VzZWZ1bCwgZ2VuZXJhbGx5IGNvb2wsIG9yIG9mIHNvbWUgdmFsdWUgdG8geW91LCB5b3VyIHJlZ2lzdHJhdGlvbiBmZWUKK3dvdWxkIGJlIGdyZWF0bHkgYXBwcmVjaWF0ZWQuICAkMjUgaXMgdGhlIHN0YW5kYXJkIHJlZ2lzdHJhdGlvbiBmZWUsCit0aG91Z2ggb2YgY291cnNlLCBsYXJnZXIgYW1vdW50cyBhcmUgcXVpdGUgd2VsY29tZS4gIEZvbGtzIHdobyBkb25hdGUKKyQ0MCBvciBtb3JlIGNhbiByZWNlaXZlIGEgcHJpbnRlZCwgYm91bmQgY29weSBvZiB0aGUgWFYgbWFudWFsIGZvciBubworZXh0cmEgY2hhcmdlLiAgSWYgeW91IHdhbnQgb25lLCBqdXN0IGFzay4gIEJFIFNVUkUgVE8gU1BFQ0lGWSBUSEUKK1ZFUlNJT04gT0YgWFYgVEhBVCBZT1UgQVJFIFVTSU5HIQorCitDT01NRVJDSUFMLCBHT1ZFUk5NRU5ULCBBTkQgSU5TVElUVVRJT05BTCBVU0VSUyBNVVNUIFJFR0lTVEVSIFRIRUlSCitDT1BJRVMgT0YgWFYuCisKK1RoaXMgZG9lcyAqbm90KiBtZWFuIHRoYXQgeW91IGFyZSByZXF1aXJlZCB0byByZWdpc3RlciBYViBqdXN0IGJlY2F1c2UKK3lvdSBwbGF5IHdpdGggaXQgb24gdGhlIHdvcmtzdGF0aW9uIGluIHlvdXIgb2ZmaWNlLiAgVGhpcyBmYWxscyB1bmRlcgordGhlIGhlYWRpbmcgb2YgJ3BlcnNvbmFsIHVzZScuICBJZiB5b3UgYXJlIGEgc3lzYWRtaW4sIHlvdSBjYW4gcHV0IFhWCit1cCBpbiBhIHB1YmxpYyBkaXJlY3RvcnkgZm9yIHlvdXIgdXNlcnMgYW11c2VtZW50LiAgQWdhaW4sICdwZXJzb25hbAordXNlJywgYWxiZWl0IHBsdXJhbC4KKworT24gdGhlIG90aGVyIGhhbmQsIGlmIHlvdSB1c2UgWFYgaW4gdGhlIGNvdXJzZSBvZiBkb2luZyB5b3VyIHdvcmssCit3aGF0ZXZlciB5b3VyICd3b3JrJyBtYXkgaGFwcGVuIHRvIGJlLCB5b3UgKm11c3QqIHJlZ2lzdGVyIHlvdXIKK2NvcHkgb2YgWFYuICAoTm90ZTogIElmIHlvdSBhcmUgYSBzdHVkZW50LCBhbmQgeW91IHVzZSBYViB0byBkbyAKK2NsYXNzd29yayBvciByZXNlYXJjaCwgeW91IHNob3VsZCBnZXQgeW91ciBwcm9mZXNzb3IvdGVhY2hlci9hZHZpc29yCit0byBwdXJjaGFzZSBhbiBhcHByb3ByaWF0ZSBudW1iZXIgb2YgY29waWVzLikKKworWFYgbGljZW5zZXMgYXJlICQyNSBlYWNoLiAgWW91IHNob3VsZCBwdXJjaGFzZSBvbmUgbGljZW5zZSBwZXIKK3dvcmtzdGF0aW9uLCBvciBvbmUgcGVyIFhWIHVzZXIsIHdoaWNoZXZlciBpcyB0aGUgc21hbGxlciBudW1iZXIuICBYVgoraXMgKm5vdCogc29sZCBvbiBhICdudW1iZXIgb2YgY29uY3VycmVudCB1c2VycycgYmFzaXMuICBJZiBYViB3YXMgc29tZQorJDEwMDAgcHJvZ3JhbSwgeWVzLCB0aGF0IHdvdWxkIGJlIGEgcmVhc29uYWJsZSByZXF1ZXN0LCBidXQgYXQgJDI1LAoraXQncyBub3QuICBBbHNvLCBnaXZlbiB0aGF0IFhWIGlzIGNvbXBsZXRlbHkgdW5sb2NrZWQsIHRoZXJlIGlzIG5vIHdheQordG8gZW5mb3JjZSBhbnkgJ251bWJlciBvZiBjb25jdXJyZW50IHVzZXJzJyBsaW1pdHMsIHNvIGl0IGlzbid0IHNvbGQKK3RoYXQgd2F5LgorCitQcmludGVkIGFuZCBib3VuZCBjb3BpZXMgb2YgdGhlIDEwMC1vZGQgcGFnZSBYViBtYW51YWwgYXJlIGF2YWlsYWJsZQorZm9yICQxNSBlYWNoLiAgTm90ZSB0aGF0IG1hbnVhbHMgYXJlICpvbmx5KiBzb2xkIHdpdGgsIGF0IG1pbmltdW0sIGFuCitlcXVhbCBudW1iZXIgb2YgbGljZW5zZXMuICAoZS5nLiAgaWYgeW91IHB1cmNoYXNlIDUgbGljZW5zZXMsIHlvdSBjYW4KK2Fsc28gcHVyY2hhc2UgKnVwIHRvKiA1IGNvcGllcyBvZiB0aGUgbWFudWFsKQorCitUaGUgc291cmNlIGNvZGUgdG8gdGhlIHByb2dyYW0gY2FuIGJlIGhhZCAoYXMgYSBjb21wcmVzc2VkICd0YXInIGZpbGUKK3NwbGl0IG92ZXIgYSBjb3VwbGUgMy41IiBNUy1ET1MgZm9ybWF0dGVkIGZsb3BwaWVzKSBmb3IgJDE1LCBmb3IgdGhvc2UKK3dobyBkb24ndCBoYXZlIGZ0cCBjYXBhYmlsaXRpZXMuCisKK09yZGVycyBvdXRzaWRlIHRoZSBVUyBhbmQgQ2FuYWRhIG11c3QgYWRkIGFuIGFkZGl0aW9uYWwgJDUgcGVyIG1hbnVhbAorb3JkZXJlZCB0byBjb3ZlciB0aGUgYWRkaXRpb25hbCBzaGlwcGluZyBjaGFyZ2VzLgorCitDaGVja3MsIG1vbmV5IG9yZGVycywgYW5kIHB1cmNoYXNlIG9yZGVycyBhcmUgYWNjZXB0ZWQuICBDcmVkaXQgY2FyZHMKK2FyZSBub3QuICBBbGwgZm9ybXMgb2YgcGF5bWVudCBtdXN0IGJlIHBheWFibGUgaW4gVVMgRnVuZHMuICBDaGVja3MKK211c3QgYmUgcGF5YWJsZSB0aHJvdWdoIGEgVVMgYmFuayAob3IgYSBVUyBicmFuY2ggb2YgYSBub24tVVMgYmFuaykuCitQdXJjaGFzZSBvcmRlcnMgZm9yIGxlc3MgdGhhbiAkNTAsIHdoaWxlIHN0aWxsIGFjY2VwdGVkLCBhcmUgbm90CitlbmNvdXJhZ2VkLiAKKworQWxsIHBheW1lbnRzIHNob3VsZCBiZSBwYXlhYmxlIHRvICdKb2huIEJyYWRsZXknLCBhbmQgbWFpbGVkIHRvOgorICAgICAgICBKb2huIEJyYWRsZXkKKyAgICAgICAgMTA1MyBGbG95ZCBUZXJyYWNlCisgICAgICAgIEJyeW4gTWF3ciwgUEEgIDE5MDEwCisgICAgICAgIFVTQQorCisKK1NpdGUgTGljZW5zZXMKKy0tLS0tLS0tLS0tLS0KK0lmIHlvdSBhcmUgcGxhbm5pbmcgdG8gcHVyY2hhc2UgMTAgb3IgbW9yZSBsaWNlbnNlcywgc2l0ZSBsaWNlbnNlcyBhcmUKK2F2YWlsYWJsZSwgYXQgYSBzdWJzdGFudGlhbCBkaXNjb3VudC4gIFNpdGUgbGljZW5zZXMgbGV0IHlvdSBydW4gWFYgb24KK2FueSBhbmQgYWxsIGNvbXB1dGluZyBlcXVpcG1lbnQgYXQgdGhlIHNpdGUsIGZvciBhbnkgcHVycG9zZQord2hhdHNvZXZlci4gIFRoZSBzaXRlIGxpY2Vuc2UgY292ZXJzIHRoZSBjdXJyZW50IHZlcnNpb24gb2YgWFYsIGFuZAorYW55IHZlcnNpb25zIHJlbGVhc2VkIHdpdGhpbiBvbmUgeWVhciBvZiB0aGUgbGljZW5zaW5nIGRhdGUuICBZb3UgYXJlCithbHNvIGFsbG93ZWQgdG8gZHVwbGljYXRlIGFuZCBkaXN0cmlidXRlIGFuIHVubGltaXRlZCBudW1iZXIgb2YgY29waWVzCitvZiB0aGUgWFYgbWFudWFsLCBidXQgb25seSBmb3IgdXNlIHdpdGhpbiB0aGUgc2l0ZS4gIENvdmVyZWQgdmVyc2lvbnMKK29mIHRoZSBzb2Z0d2FyZSBtYXkgYmUgcnVuIGluIHBlcnBldHVpdHkuCisKK0Fsc28sIGl0IHNob3VsZCBiZSBub3RlZCB0aGF0IGEgJ3NpdGUnIGNhbiBiZSBkZWZpbmVkIGFzIGFueXRoaW5nCit5b3UnZCBsaWtlLiAgSXQgY2FuIGJlIGEgcGh5c2ljYWwgbG9jYXRpb24gKGEgcm9vbSwgYnVpbGRpbmcsCitsb2NhdGlvbiwgZXRjLiksIGFuIG9yZ2FuaXphdGlvbmFsIGdyb3VwaW5nIChhIHdvcmtncm91cCwgZGVwYXJ0bWVudCwKK2RpdmlzaW9uLCBldGMuKSBvciBhbnkgb3RoZXIgbG9naWNhbCBncm91cGluZyAoInRoZSBzZXZlbnRlZW4KK3RlY2huaWNhbCB3cml0ZXJzIHNjYXR0ZXJlZCBhYm91dCBvdXIgY29tcGFueSIsIGV0Yy4pLgorCitUaGUgc2l0ZSBsaWNlbnNlIGNvc3Qgd2lsbCBiZSBiYXNlZCBvbiB5b3VyIGVzdGltYXRlIG9mIHRoZSBudW1iZXIgb2YKK1hWIHVzZXJzIG9yIHdvcmtzdGF0aW9ucyBhdCB5b3VyIHNpdGUsIHdoaWNoZXZlciBpcyB0aGUgc21hbGxlcgorbnVtYmVyLgorCitJZiB5b3UgYXJlIGludGVyZXN0ZWQgaW4gb2J0YWluaW5nIGEgc2l0ZSBsaWNlbnNlLCBwbGVhc2UgY29udGFjdCB0aGUKK2F1dGhvciB2aWEgZWxlY3Ryb25pYyBtYWlsIG9yIEZBWCAoc2VlIGJlbG93IGZvciBkZXRhaWxzKS4gIFNlbmQKK2luZm9ybWF0aW9uIHJlZ2FyZGluZyB5b3VyIHNpdGUgKHRoZSBuYW1lIG9yIGRlZmluaXRpb24gb2YgdGhlICdzaXRlJywKK2EgcGh5c2ljYWwgYWRkcmVzcywgYSBmYXggbnVtYmVyLCBhbmQgYW4gZXN0aW1hdGUgb2YgdGhlIG51bWJlciBvZgordXNlcnMgb3Igd29ya3N0YXRpb25zKSwgYW5kIHdlJ2xsIGdldCBhIHNpdGUgbGljZW5zZSBvdXQgdG8geW91IGZvcgoreW91ciBleGFtaW5hdGlvbi4KKworCitDb3B5cmlnaHQgTm90aWNlCistLS0tLS0tLS0tLS0tLS0tCitYViBpcyBDb3B5cmlnaHQgMTk4OSwgMTk5NCBieSBKb2huIEJyYWRsZXkKKworUGVybWlzc2lvbiB0byBjb3B5IGFuZCBkaXN0cmlidXRlIFhWIGluIGl0cyBlbnRpcmV0eSwgZm9yCitub24tY29tbWVyY2lhbCBwdXJwb3NlcywgaXMgaGVyZWJ5IGdyYW50ZWQgd2l0aG91dCBmZWUsIHByb3ZpZGVkIHRoYXQKK3RoaXMgbGljZW5zZSBpbmZvcm1hdGlvbiBhbmQgY29weXJpZ2h0IG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKworSWYgeW91IHJlZGlzdHJpYnV0ZSBYViwgdGhlICplbnRpcmUqIGNvbnRlbnRzIG9mIHRoaXMgZGlzdHJpYnV0aW9uCittdXN0IGJlIGRpc3RyaWJ1dGVkLCBpbmNsdWRpbmcgdGhlIFJFQURNRSwgYW5kIElOU1RBTEwgZmlsZXMsIHRoZQorc291cmNlcywgYW5kIHRoZSBjb21wbGV0ZSBjb250ZW50cyBvZiB0aGUgJ2RvY3MnIGRpcmVjdG9yeS4KKworTm90ZSB0aGF0IGRpc3RyaWJ1dGluZyBYViAnYnVuZGxlZCcgaW4gd2l0aCBhbnkgcHJvZHVjdCBpcyBjb25zaWRlcmVkCit0byBiZSBhICdjb21tZXJjaWFsIHB1cnBvc2UnLgorCitBbHNvIG5vdGUgdGhhdCBhbnkgY29waWVzIG9mIFhWIHRoYXQgYXJlIGRpc3RyaWJ1dGVkIE1VU1QgYmUgYnVpbHQKK2FuZC9vciBjb25maWd1cmVkIHRvIGJlIGluIHRoZWlyICd1bnJlZ2lzdGVyZWQgY29weScgbW9kZSwgc28gdGhhdCBpdAoraXMgbWFkZSBvYnZpb3VzIHRvIHRoZSB1c2VyIHRoYXQgWFYgaXMgc2hhcmV3YXJlLCBhbmQgdGhhdCB0aGV5IHNob3VsZAorY29uc2lkZXIgcmVnaXN0ZXJpbmcsIG9yIGF0IGxlYXN0IHJlYWRpbmcgdGhpcyBpbmZvcm1hdGlvbi4KKworVGhlIHNvZnR3YXJlIG1heSBiZSBtb2RpZmllZCBmb3IgeW91ciBvd24gcHVycG9zZXMsIGJ1dCBtb2RpZmllZAordmVyc2lvbnMgbWF5IG5vdCBiZSBkaXN0cmlidXRlZCB3aXRob3V0IHByaW9yIGNvbnNlbnQgb2YgdGhlIGF1dGhvci4KKworVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCAnYXMtaXMnLCB3aXRob3V0IGFueSBleHByZXNzIG9yIGltcGxpZWQKK3dhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9yIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcworYXJpc2luZyBmcm9tIHRoZSB1c2Ugb2YgdGhpcyBzb2Z0d2FyZS4KKworSWYgeW91IHdvdWxkIGxpa2UgdG8gZG8gc29tZXRoaW5nIHdpdGggWFYgdGhhdCB0aGlzIGNvcHlyaWdodAorcHJvaGliaXRzIChzdWNoIGFzIGRpc3RyaWJ1dGluZyBpdCB3aXRoIGEgY29tbWVyY2lhbCBwcm9kdWN0LCB1c2luZworcG9ydGlvbnMgb2YgdGhlIHNvdXJjZSBpbiBzb21lIG90aGVyIHByb2dyYW0sIGRpc3RyaWJ1dGluZyByZWdpc3RlcmVkCitjb3BpZXMsIGV0Yy4pLCBwbGVhc2UgY29udGFjdCB0aGUgYXV0aG9yIChwcmVmZXJhYmx5IHZpYSBlbWFpbCkuCitBcnJhbmdlbWVudHMgY2FuIHByb2JhYmx5IGJlIHdvcmtlZCBvdXQuCisKKworVGhlIGF1dGhvciBtYXkgYmUgY29udGFjdGVkIHZpYToKKyAgICBVUyBNYWlsOiAgSm9obiBCcmFkbGV5CisgICAgICAgICAgICAgIDEwNTMgRmxveWQgVGVycmFjZQorICAgICAgICAgICAgICBCcnluIE1hd3IsIFBBICAxOTAxMAorCisgICAgRkFYOiAgICAgKDYxMCkgNTIwLTIwNDIKKworRWxlY3Ryb25pYyBNYWlsIHJlZ2FyZGluZyBYViBzaG91bGQgYmUgc2VudCB0byBvbmUgb2YgdGhlc2UgdGhyZWUgYWRkcmVzc2VzOgorICAgICB4dkBkZXZvLmRjY3MudXBlbm4uZWR1ICAgICAgICAgICAgICAgLSBnZW5lcmFsIFhWIHF1ZXN0aW9ucworICAgICB4dmJpekBkZXZvLmRjY3MudXBlbm4uZWR1ICAgICAgICAgICAgLSBhbGwgWFYgbGljZW5zaW5nIHF1ZXN0aW9ucworICAgICB4dnRlY2hAZGV2by5kY2NzLnVwZW5uLmVkdSAgICAgICAgICAgLSBidWcgcmVwb3J0cywgdGVjaG5pY2FsIHF1ZXN0aW9ucworCitQbGVhc2UgZG8gKm5vdCogc2VuZCBlbGVjdHJvbmljIG1haWwgZGlyZWN0bHkgdG8gdGhlIGF1dGhvciwgYXMgaGUKK2dldHMgbW9yZSB0aGFuIGVub3VnaCBhcyBpdCBpcy4KKworCmRpZmYgLS1naXQgYS9saWNlbnNlcy95YWhvby1wYXRlbnQtbGljZW5zZS0xLjIgYi9saWNlbnNlcy95YWhvby1wYXRlbnQtbGljZW5zZS0xLjIKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTQ0MjU3YQotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL3lhaG9vLXBhdGVudC1saWNlbnNlLTEuMgpAQCAtMCwwICsxLDE2NyBAQAorWWFob28hIERvbWFpbktleXMgUGF0ZW50IExpY2Vuc2UgQWdyZWVtZW50IHYxLjIKKworQ29weXJpZ2h0IChjKSAyMDA2LCBZYWhvbyEgSW5jLgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworVGhpcyBZYWhvbyEgRG9tYWluS2V5cyBQYXRlbnQgTGljZW5zZSBBZ3JlZW1lbnQgKHRoaXMgIkFncmVlbWVudCIpIGlzCitiZXR3ZWVuIFlhaG9vISBJbmMuICgiWWFob28hIikgYW5kIHlvdSAoIkxpY2Vuc2VlIikuIEJ5IGF0dGVtcHRpbmcgdG8KK2V4ZXJjaXNlIGFueSByaWdodHMgZ3JhbnRlZCB1bmRlciB0aGlzIEFncmVlbWVudCwgTGljZW5zZWUgYWdyZWVzIHRvIGJlCitib3VuZCBieSBhbGwgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIHNldCBmb3J0aCBiZWxvdywgYW5kIHN1YmplY3QgdG8gdGhvc2UKK3Rlcm1zIGFuZCBjb25kaXRpb25zLCBMaWNlbnNlZSBtYXkgdXNlIHRoZSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgZGVzY3JpYmVkCitiZWxvdy4KKworMS4gTElDRU5TRSBHUkFOVC4KKworMS4xLiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCwgTGljZW5zb3IgaGVyZWJ5CitncmFudHMgWW91IGEgcm95YWx0eS1mcmVlLCBwZXJwZXR1YWwsIHdvcmxkd2lkZSwgc3VibGljZW5zYWJsZSwKK25vbi1leGNsdXNpdmUgbGljZW5zZSB1bmRlciBpdHMgcmlnaHRzIHRvIHRoZSBZYWhvbyEgUGF0ZW50IENsYWltcyB0byBtYWtlLAordXNlLCBzZWxsLCBvZmZlciBmb3Igc2FsZSwgYW5kL29yIGltcG9ydCBJbXBsZW1lbnRhdGlvbnMuCisKKzIuIERFRklOSVRJT05TLgorCisyLjEuICJEb21haW5LZXlzIERldmVsb3BlcihzKSIgbWVhbnMgWWFob28sIEluYy4gKCJZYWhvbyEiKSwgTGljZW5zb3IsCithbmQvb3IgYW55IG90aGVyIGluZGl2aWR1YWwgb3IgZW50aXR5IHdobyBkaXN0cmlidXRlcyBJbXBsZW1lbnRhdGlvbnMgdW5kZXIKK3RoaXMgQWdyZWVtZW50LgorCisyLjIuICJJbXBsZW1lbnRhdGlvbnMiIG1lYW5zIHRoZSBzcGVjaWZpYyBwb3J0aW9ucyBvZiBhIGhhcmR3YXJlIG9yCitzb2Z0d2FyZSBpbXBsZW1lbnRhdGlvbiBleHByZXNzbHkgcmVxdWlyZWQgdG8gYmUgY29tcGxpYW50IHdpdGggdGhlCitTcGVjaWZpY2F0aW9ucyBmb3IgdGhlIHNvbGUgcHVycG9zZSBvZiBhIHNlbmRlciB2ZXJpZmljYXRpb24gc29sdXRpb24gaW4KK2Nvbm5lY3Rpb24gd2l0aCBlLW1haWwuCisKKzIuMy4gIkxpY2Vuc29yIiBtZWFucyBZYWhvbyEgb3IgYW55IG90aGVyIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgZWxlY3RzCit0byB1c2UgdGhpcyBBZ3JlZW1lbnQgdG8gbGljZW5zZSBZYWhvbyEgUGF0ZW50IENsYWltcyB0byBhbnkgbGljZW5zZWUuCisKKzIuNC4gIlNwZWNpZmljYXRpb25zIiBtZWFucyB0aGUgc3BlY2lmaWNhdGlvbiBoYXZpbmcgc3VibWlzc2lvbiBJRAorImRyYWZ0LWRlbGFueS1kb21haW5rZXlzLWJhc2UtMDEudHh0IiBkYXRlZCBBdWcgMjAwNCBwdWJsaXNoZWQgdGhyb3VnaCB0aGUKK0lFVEYgKEludGVybmV0IEVuZ2luZWVyaW5nIFRhc2sgRm9yY2UpLiBUaGUgU3BlY2lmaWNhdGlvbnMgbWF5IGJlIGZvdW5kIGF0Cit0aGUgZm9sbG93aW5nIGxpbms6CitodHRwOi8vYW50aXNwYW0ueWFob28uY29tL2RvbWFpbmtleXMvZHJhZnQtZGVsYW55LWRvbWFpbmtleXMtYmFzZS0wMS50eHQKKworMi41LiAiWWFob28hIFBhdGVudCBDbGFpbXMiIHNoYWxsIG1lYW4gdGhvc2UgY2xhaW1zIG9mIGFsbCBZYWhvbyEgZm9yZWlnbgorYW5kIGRvbWVzdGljIHBhdGVudHMgYW5kIHBhdGVudCBhcHBsaWNhdGlvbnMgdGhhdCBiYXNlIHRoZWlyIHByaW9yaXR5IG9uCitVLlMuIFByb3Zpc2lvbmFsIFBhdGVudCBBcHBsaWNhdGlvbiBTZXIuIE5vcy4gNjAvNDk3LDc5NCwgZmlsZWQgQXVnLiAyNiwKKzIwMDMsIG9yIDYwLzU1MywzMDAsIGZpbGVkIE1hci4gMTUsIDIwMDQsIG9yIFUuUy4gUGF0ZW50IEFwcGxpY2F0aW9uIFNlci4KK05vcy4gMTAvNjcxLDMxOSwgZmlsZWQgU2VwLiAyNCwgMjAwMywgb3IgMTAvODA1LDE4MSwgZmlsZWQgTWFyLiAxOSwgMjAwNC4KKworMi42LiAiWW91IiBvciAiWW91ciIgbWVhbnMgYW4gaW5kaXZpZHVhbCwgY29tcGFueSwgb3Igb3RoZXIgbGVnYWwgZW50aXR5CitleGVyY2lzaW5nIGFueSByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQuIEFueSBpbmRpdmlkdWFsIHdobyBhY2NlcHRzIHRoZQordGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgb24gYmVoYWxmIG9mIGEgY29tcGFueSBvciBvdGhlcgorbGVnYWwgZW50aXR5IHJlcHJlc2VudHMgYW5kIHdhcnJhbnRzIHRoYXQgdGhlIGluZGl2aWR1YWwgaGFzIHRoZSBhdXRob3JpdHkKK3RvIGVudGVyIGludG8gdGhpcyBBZ3JlZW1lbnQgb24gYmVoYWxmIG9mIHRoZSBjb21wYW55IG9yIG90aGVyIGxlZ2FsCitlbnRpdHkuCisKKzMuIFRFUk1TLgorCiszLjEuIFlvdSBhZ3JlZSBub3QgdG8gYXNzZXJ0IGFnYWluc3QgWWFob28hLCBhbnkgb3RoZXIgRG9tYWluS2V5cyBEZXZlbG9wZXIKK29yIGFueSBvZiB0aGVpciByZXNwZWN0aXZlIGxpY2Vuc2VlcyB1bmRlciBTZWN0aW9uIDMuNCwgYSBwYXRlbnQKK2luZnJpbmdlbWVudCBjbGFpbSBiYXNlZCBvbiB0aGUgbWFudWZhY3R1cmUsIHVzZSwgc2FsZSwgb2ZmZXIgZm9yIHNhbGUKK2FuZC9vciBpbXBvcnRhdGlvbiBvZiBhbnkgSW1wbGVtZW50YXRpb25zICgiSW1wbGVtZW50YXRpb24gSVAgQ2xhaW0iKS4KKworMy4yLiBUbyBpbmRpY2F0ZSB5b3VyIGFzc2VudCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQKK2FuZCBpbiBvcmRlciB0byBvYnRhaW4gYSBsaWNlbnNlIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGFuZC9vcgoraW1wb3J0IEltcGxlbWVudGF0aW9ucywgWW91IG11c3QgaW5jbHVkZSwgYXR0YWNoIG9yIHByZXNlcnZlIHRoZSBmb2xsb3dpbmcKK3Byb21pbmVudGx5IGRpc3BsYXllZCBzdGF0ZW1lbnQgaW4gdGhlIHNvdXJjZSBjb2RlIGFuZCBvYmplY3QgY29kZSBvZiBhbnkKK3N1Y2ggSW1wbGVtZW50YXRpb25zOiAiVGhpcyBjb2RlIGluY29ycG9yYXRlcyBpbnRlbGxlY3R1YWwgcHJvcGVydHkgb3duZWQKK2J5IFlhaG9vISBhbmQgbGljZW5zZWQgcHVyc3VhbnQgdG8gdGhlIFlhaG9vISBEb21haW5LZXlzIFBhdGVudCBMaWNlbnNlCitBZ3JlZW1lbnQuIi4KKworMy4zLiBZb3Ugd2lsbCBub3QgdXNlIHRoZSBuYW1lIG9mIFlhaG9vISB0byBlbmRvcnNlIG9yIHByb21vdGUgYW55Citwcm9kdWN0cywgc2VydmljZXMsIG9yIEltcGxlbWVudGF0aW9ucyB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4KK3Blcm1pc3Npb24gb2YgWWFob28hLiAiRG9tYWluS2V5cyIgaXMgYSB0cmFkZW1hcmsgb2YgWWFob28hLiBIb3dldmVyLCBZb3UKK21heSBzdGF0ZSBZb3VyIEltcGxlbWVudGF0aW9ucyBhcmUgIkRvbWFpbktleXMgY29tcGxpYW50IiwgInN1cHBvcnRzCitEb21haW5LZXlzIiwgb3IgaXMgIkRvbWFpbktleXMtZW5hYmxlZCIsIHdpdGhvdXQgY2l0YXRpb24gdG8gWWFob28hLiBZb3UKK211c3QgY3JlYXRlIFlvdXIgb3duIHByb2R1Y3Qgb3Igc2VydmljZSBuYW1lcyBvciB0cmFkZW1hcmtzIGZvciBZb3VyCitJbXBsZW1lbnRhdGlvbnMgYW5kIFlvdSBhZ3JlZSBub3QgdG8gdXNlIHRoZSB0ZXJtICJEb21haW5LZXlzIiBpbiBvciBhcworcGFydCBvZiBhIG5hbWUgb3IgdHJhZGVtYXJrIGZvciBZb3VyIEltcGxlbWVudGF0aW9ucy4KKworMy40LiBZb3UgbWF5IGNob29zZSB0byBkaXN0cmlidXRlIEltcGxlbWVudGF0aW9ucyB1bmRlciB0aGlzIEFncmVlbWVudCBvciBhCitkaWZmZXJlbnQgYWdyZWVtZW50LCBwcm92aWRlZCB0aGF0OgorCisgIChhKSBhIGNvcHkgb2YgdGhpcyBBZ3JlZW1lbnQgb3IgdGhlIGRpZmZlcmVudCBhZ3JlZW1lbnQgaXMgaW5jbHVkZWQgd2l0aAorICBlYWNoIEltcGxlbWVudGF0aW9uIGFsb25nIHdpdGggdGhlIGZvbGxvd2luZyBwcm9taW5lbnRseSBkaXNwbGF5ZWQKKyAgc3RhdGVtZW50OiAiQnkgbWFraW5nLCB1c2luZywgc2VsbGluZywgb2ZmZXJpbmcgZm9yIHNhbGUsIGltcG9ydGluZywKKyAgYW5kL29yIHN1YmxpY2Vuc2luZyBJbXBsZW1lbnRhdGlvbnMgYXMgcGVybWl0dGVkLCB5b3UgYWdyZWUgdG8gdGhlIHRlcm1zCisgIGFuZCBjb25kaXRpb25zIG9mIHRoZSBZYWhvbyEgRG9tYWluS2V5cyBQYXRlbnQgTGljZW5zZSBBZ3JlZW1lbnQgb3IKKyAgb3RoZXIgYWdyZWVtZW50IGNvbnRhaW5lZCBoZXJlaW4uIjsgYW5kCisKKyAgKGIpIGlmIGRpc3RyaWJ1dGVkIHVuZGVyIGEgZGlmZmVyZW50IGFncmVlbWVudCwgc3VjaCBkaWZmZXJlbnQgYWdyZWVtZW50CisgIGNvbnRhaW5zIHRlcm1zIGFuZCBjb25kaXRpb25zIHRoYXQgKGkpIHByb3ZpZGUgbm8gZmV3ZXIgcmlnaHRzLAorICBwcml2aWxlZ2VzIGFuZCBpbW11bml0aWVzIHRvIERvbWFpbktleXMgRGV2ZWxvcGVycyB0aGFuIHRoZSB0ZXJtcyBhbmQKKyAgY29uZGl0aW9ucyBvZiB0aGlzIEFncmVlbWVudCwgaW5jbHVkaW5nLCB3aXRob3V0IGxpbWl0YXRpb24sIFNlY3Rpb25zCisgIDEuMSwgMy4xLCAzLjQsIDMuNywgNC4xLCA0LjIsIGFuZCA0LjMuCisKKzMuNS4gWW91IGFja25vd2xlZGdlIHRoYXQgaW1wbGVtZW50YXRpb25zIG9mIHRoZSBTcGVjaWZpY2F0aW9ucyBtYXkgYmUKK3N1YmplY3QgdG8gVS5TLiBleHBvcnQgcmVzdHJpY3Rpb24gYW5kIG90aGVyIGFwcGxpY2FibGUgbmF0aW9uYWwgYW5kCitpbnRlcm5hdGlvbmFsIGxhd3MuIFlvdSBhZ3JlZSB0byBjb21wbHkgd2l0aCBhbGwgZXhwb3J0LCByZS1leHBvcnQsIG9yCitpbXBvcnQgcmVzdHJpY3Rpb25zLCBsYXdzLCBvciByZWd1bGF0aW9ucy4KKworMy42LiBZYWhvbyEsIGFuZCBvbmx5IFlhaG9vISwgbWF5LCBmcm9tIHRpbWUgdG8gdGltZSBhbmQgYXQgaXRzIHNvbGUKK2Rpc2NyZXRpb24sIHVwZGF0ZSBvciBtb2RpZnkgdGhlIHRlcm1zIG9mIHRoaXMgQWdyZWVtZW50LiBJZiBZYWhvbyEgbWFrZXMKK2FueSBzdWNoIG1vZGlmaWNhdGlvbnMsIFlvdSBtYXkgY29udGludWUgdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mCit0aGlzIEFncmVlbWVudCBvciBhZ3JlZSB0byB0aGUgdXBkYXRlZCBvciBtb2RpZmllZCB0ZXJtcyBhbmQgY29uZGl0aW9ucy4KK0ZvciB0aGUgbW9zdCByZWNlbnQgdmVyc2lvbiBvZiB0aGlzIEFncmVlbWVudCBwbGVhc2UgY29udGFjdCBZYWhvbyEuCisKKzMuNy4gVGhpcyBBZ3JlZW1lbnQgYW5kIHRoZSByaWdodHMgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlOgorCisgIChhKSBhdXRvbWF0aWNhbGx5IHdpdGhvdXQgbm90aWNlIGZyb20gWWFob28hLCBpZiBZb3UgYXQgYW55IHRpbWUgZHVyaW5nCisgIHRoZSB0ZXJtIG9mIHRoaXMgQWdyZWVtZW50IGFzc2VydCBhbnkgSW1wbGVtZW50YXRpb24gSVAgQ2xhaW0gYWdhaW5zdAorICBZYWhvbyE7CisKKyAgKGIpIHVwb24gd3JpdHRlbiBub3RpY2UgZnJvbSBZYWhvbyEsIGlmIFlvdSBhdCBhbnkgdGltZSBkdXJpbmcgdGhlIHRlcm0KKyAgb2YgdGhpcyBBZ3JlZW1lbnQgYXNzZXJ0IGFueSBJbXBsZW1lbnRhdGlvbiBJUCBDbGFpbSBhZ2FpbnN0IGFueQorICBEb21haW5LZXlzIERldmVsb3BlciAob3RoZXIgdGhhbiBZYWhvbyEpIG9yIGFueSBsaWNlbnNlZXMgb2YgYW55CisgIERvbWFpbktleXMgRGV2ZWxvcGVyOyBvcgorCisgIChjKSB3aGVyZSAoYSkgb3IgKGIpIGRvIG5vdCBhcHBseSwgYXV0b21hdGljYWxseSB3aXRob3V0IG5vdGljZSBmcm9tCisgIFlhaG9vISwgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggYW55IHRlcm0ocykgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kCisgIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gMzAgZGF5cyBvZiBZb3UgYmVjb21pbmcgYXdhcmUgb2Ygc3VjaAorICBicmVhY2guCisKKzMuOC4gVGhpcyBBZ3JlZW1lbnQgY29uc3RpdHV0ZXMgdGhlIGVudGlyZSBhZ3JlZW1lbnQgYmV0d2VlbiB0aGUgcGFydGllcword2l0aCByZXNwZWN0IHRvIHRoZSBzdWJqZWN0IG1hdHRlciBoZXJlb2YuIFRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIGdvdmVybmVkCitieSBhbmQgY29uc3RydWVkIHVuZGVyIHRoZSBsYXdzIG9mIHRoZSBVbml0ZWQgU3RhdGVzIGFuZCB0aGUgU3RhdGUgb2YKK0NhbGlmb3JuaWEgd2l0aG91dCBnaXZpbmcgZWZmZWN0IHRvIENhbGlmb3JuaWEgY29uZmxpY3Qgb2YgbGF3IHByb3Zpc2lvbnMKK29yIHRvIGNvbnN0cnVjdGlvbiBwcm92aXNpb25zIGZhdm9yaW5nIGVpdGhlciBwYXJ0eS4gQWxsIGFjdGlvbnMgYXJpc2luZworb3V0IG9mIG9yIHJlbGF0aW5nIHRvIHRoaXMgQWdyZWVtZW50IHRoYXQgaW52b2x2ZSBZYWhvbyEgYXMgYSBwYXJ0eSB3aWxsIGJlCithZGp1ZGljYXRlZCBleGNsdXNpdmVseSBieSB0aGUgU3VwZXJpb3IgQ291cnQgb2YgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEKK2ZvciB0aGUgQ291bnR5IG9mIFNhbnRhIENsYXJhIG9yIHRoZSBVbml0ZWQgU3RhdGVzIERpc3RyaWN0IENvdXJ0IGZvciB0aGUKK05vcnRoZXJuIERpc3RyaWN0IG9mIENhbGlmb3JuaWEuCisKKzMuOS4gSW4gdGhlIGV2ZW50IHRoYXQgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBkZWVtZWQgdG8gYmUKK2ludmFsaWQsIHN1Y2ggaW52YWxpZGl0eSBzaGFsbCBub3QgYWZmZWN0IHRoZSByZW1haW5kZXIgb2YgdGhpcyBBZ3JlZW1lbnQuCisKKzQuIExFR0FMIERJU0NMQUlNRVJTLgorCis0LjEuIFRIRSBZQUhPTyEgUEFURU5UIENMQUlNUywgVEhJUyBBR1JFRU1FTlQsIFRIRSBET01BSU5LRVlTIFRSQURFTUFSSywKK0FORCBUSEUgU1BFQ0lGSUNBVElPTlMgQVJFIFBST1ZJREVEIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQKK1JFUFJFU0VOVEFUSU9OUywgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIEFOWSBLSU5ELCBFSVRIRVIgRVhQUkVTUyBPUgorSU1QTElFRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIEFOWSBSRVBSRVNFTlRBVElPTlMsIFdBUlJBTlRJRVMgT1IKK0NPTkRJVElPTlMgT0YgVElUTEUsIE5PTi1JTkZSSU5HRU1FTlQsIE1FUkNIQU5UQUJJTElUWSwgT1IgRklUTkVTUyBGT1IgQQorUEFSVElDVUxBUiBQVVJQT1NFLiBZb3UgYXJlIHNvbGVseSByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcgdGhlCithcHByb3ByaWF0ZW5lc3Mgb2YgZXhlcmNpc2luZyBhbnkgcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFuZCB1c2luZyB0aGUKK1NwZWNpZmljYXRpb25zIGFuZCB0aGUgRG9tYWluS2V5cyB0cmFkZW1hcmsgYW5kIGFzc3VtZSBhbGwgcmlza3MgYXNzb2NpYXRlZAoraW4gY29ubmVjdGlvbiB0aGVyZXdpdGgsIGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvLCB0aGUgcmlza3MgYW5kIGNvc3RzCitvZiBwcm9ncmFtIGVycm9ycywgY29tcGxpYW5jZSB3aXRoIGFwcGxpY2FibGUgbGF3cywgZGFtYWdlIHRvIG9yIGxvc3Mgb2YKK2RhdGEsIHByb2dyYW1zIG9yIGVxdWlwbWVudCwgYW5kIHVuYXZhaWxhYmlsaXR5IG9yIGludGVycnVwdGlvbiBvZgorb3BlcmF0aW9ucy4KKworNC4yLiBZb3UgZXhwcmVzc2x5IGFja25vd2xlZGdlIGFuZCBhZ3JlZSB0aGF0IG5vIGFzc3VyYW5jZXMgYXJlIHByb3ZpZGVkIGJ5CitEb21haW5LZXlzIERldmVsb3BlcnMgd2l0aCByZXNwZWN0IHRvIHRoZSB2YWxpZGl0eSBvZiB0aGUgWWFob28hIFBhdGVudAorQ2xhaW1zIG9yIHRoYXQgdGhlIFNwZWNpZmljYXRpb25zLCB0aGUgRG9tYWluS2V5cyB0cmFkZW1hcmsgb3IgYW55CitpbXBsZW1lbnRhdGlvbnMgcmVsYXRlZCB0byB0aGUgU3BlY2lmaWNhdGlvbnMgb3IgdGhlIERvbWFpbktleXMgdHJhZGVtYXJrCitkbyBub3QgaW5mcmluZ2Ugb3IgbWlzYXBwcm9wcmlhdGUgdGhlIHBhdGVudCwgdHJhZGVtYXJrIG9yIG90aGVyCitpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIG9mIGFueSBvdGhlciBlbnRpdHkuIERvbWFpbktleXMgRGV2ZWxvcGVycworZGlzY2xhaW0gYW55IGxpYWJpbGl0eSB0byBZb3UgZm9yIGNsYWltcyBicm91Z2h0IGJ5IGFueSBvdGhlciBwZXJzb24gb3IKK2VudGl0eSBiYXNlZCBvbiBpbmZyaW5nZW1lbnQgb3IgbWlzYXBwcm9wcmlhdGlvbiBvZiBpbnRlbGxlY3R1YWwgcHJvcGVydHkKK3JpZ2h0cyBvciBvdGhlcndpc2UuIEFzIGEgY29uZGl0aW9uIHRvIGV4ZXJjaXNpbmcgdGhlIHJpZ2h0cyBhbmQgbGljZW5zZXMKK2dyYW50ZWQgaGVyZXVuZGVyLCBZb3UgaGVyZWJ5IGFzc3VtZSBzb2xlIHJlc3BvbnNpYmlsaXR5IHRvIHNlY3VyZSBhbnkKK290aGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgbmVlZGVkLgorCis0LjMuIERPTUFJTktFWVMgREVWRUxPUEVSUyBTSEFMTCBOT1QgSEFWRSBBTlkgTElBQklMSVRZIEZPUiBBTlkgRElSRUNULAorSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisoSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBMT1NUIFBST0ZJVFMpLCBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCitUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBFWEVSQ0lTRQorT0YgQU5ZIFJJR0hUUyBVTkRFUiBUSElTIEFHUkVFTUVOVCwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0VTLCBBTkQgRVZFTiBJRiBUSEUgUkVNRURJRVMgUFJPVklERUQgRk9SIElOIFRISVMgQUdSRUVNRU5UIEZBSUwKK09GIFRIRUlSIEVTU0VOVElBTCBQVVJQT1NFLgpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvemNoYWZmIGIvbGljZW5zZXMvemNoYWZmCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmYTY3ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWNlbnNlcy96Y2hhZmYKQEAgLTAsMCArMSwzMiBAQAorIENvcHlyaWdodCAyMDAwLTIwMDEsIFByaW5jZXRvbiBVbml2ZXJzaXR5LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4gCisgQnkgdXNpbmcgdGhpcyBzb2Z0d2FyZSB0aGUgVVNFUiBpbmRpY2F0ZXMgdGhhdCBoZSBvciBzaGUgaGFzIHJlYWQsIAorIHVuZGVyc3Rvb2QgYW5kIHdpbGwgY29tcGx5IHdpdGggdGhlIGZvbGxvd2luZzoKKworIC0tLSBQcmluY2V0b24gVW5pdmVyc2l0eSBoZXJlYnkgZ3JhbnRzIFVTRVIgbm9uZXhjbHVzaXZlIHBlcm1pc3Npb24gCisgdG8gdXNlLCBjb3B5IGFuZC9vciBtb2RpZnkgdGhpcyBzb2Z0d2FyZSBmb3IgaW50ZXJuYWwsIG5vbmNvbW1lcmNpYWwsCisgcmVzZWFyY2ggcHVycG9zZXMgb25seS4gQW55IGRpc3RyaWJ1dGlvbiwgaW5jbHVkaW5nIGNvbW1lcmNpYWwgc2FsZSAKKyBvciBsaWNlbnNlLCBvZiB0aGlzIHNvZnR3YXJlLCBjb3BpZXMgb2YgdGhlIHNvZnR3YXJlLCBpdHMgYXNzb2NpYXRlZCAKKyBkb2N1bWVudGF0aW9uIGFuZC9vciBtb2RpZmljYXRpb25zIG9mIGVpdGhlciBpcyBzdHJpY3RseSBwcm9oaWJpdGVkIAorIHdpdGhvdXQgdGhlIHByaW9yIGNvbnNlbnQgb2YgUHJpbmNldG9uIFVuaXZlcnNpdHkuICBUaXRsZSB0byBjb3B5cmlnaHQKKyB0byB0aGlzIHNvZnR3YXJlIGFuZCBpdHMgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIHNoYWxsIGF0IGFsbCB0aW1lcyAKKyByZW1haW4gd2l0aCBQcmluY2V0b24gVW5pdmVyc2l0eS4gIEFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2Ugc2hhbGwgCisgYmUgcGxhY2VkIG9uIGFsbCBzb2Z0d2FyZSBjb3BpZXMsIGFuZCBhIGNvbXBsZXRlIGNvcHkgb2YgdGhpcyBub3RpY2UgCisgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvZiB0aGUgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uLiAgCisgTm8gcmlnaHQgaXMgIGdyYW50ZWQgdG8gdXNlIGluIGFkdmVydGlzaW5nLCBwdWJsaWNpdHkgb3Igb3RoZXJ3aXNlIAorIGFueSB0cmFkZW1hcmssIHNlcnZpY2UgbWFyaywgb3IgdGhlIG5hbWUgb2YgUHJpbmNldG9uIFVuaXZlcnNpdHkuIAorCisKKyAtLS0gVGhpcyBzb2Z0d2FyZSBhbmQgYW55IGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBpcyBwcm92aWRlZCAiYXMgaXMiIAorCisgUFJJTkNFVE9OIFVOSVZFUlNJVFkgTUFLRVMgTk8gUkVQUkVTRU5UQVRJT05TIE9SIFdBUlJBTlRJRVMsIEVYUFJFU1MgCisgT1IgSU1QTElFRCwgSU5DTFVESU5HIFRIT1NFIE9GIE1FUkNIQU5UQUJJTElUWSBPUiBGSVRORVNTIEZPUiBBIAorIFBBUlRJQ1VMQVIgUFVSUE9TRSwgT1IgVEhBVCAgVVNFIE9GIFRIRSBTT0ZUV0FSRSwgTU9ESUZJQ0FUSU9OUywgT1IgCisgQVNTT0NJQVRFRCBET0NVTUVOVEFUSU9OIFdJTEwgTk9UIElORlJJTkdFIEFOWSBQQVRFTlRTLCBDT1BZUklHSFRTLCAKKyBUUkFERU1BUktTIE9SIE9USEVSIElOVEVMTEVDVFVBTCBQUk9QRVJUWSBSSUdIVFMgT0YgQSBUSElSRCBQQVJUWS4gIAorCisgUHJpbmNldG9uIFVuaXZlcnNpdHkgc2hhbGwgbm90IGJlIGxpYWJsZSB1bmRlciBhbnkgY2lyY3Vtc3RhbmNlcyBmb3IgCisgYW55IGRpcmVjdCwgaW5kaXJlY3QsIHNwZWNpYWwsIGluY2lkZW50YWwsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcyAKKyB3aXRoIHJlc3BlY3QgdG8gYW55IGNsYWltIGJ5IFVTRVIgb3IgYW55IHRoaXJkIHBhcnR5IG9uIGFjY291bnQgb2YgCisgb3IgYXJpc2luZyBmcm9tIHRoZSB1c2UsIG9yIGluYWJpbGl0eSB0byB1c2UsIHRoaXMgc29mdHdhcmUgb3IgaXRzIAorIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiwgZXZlbiBpZiBQcmluY2V0b24gVW5pdmVyc2l0eSBoYXMgYmVlbiBhZHZpc2VkCisgb2YgdGhlIHBvc3NpYmlsaXR5IG9mIHRob3NlIGRhbWFnZXMuCmRpZmYgLS1naXQgYS9saWNlbnNlcy96b28gYi9saWNlbnNlcy96b28KbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjlkNjZlMgotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL3pvbwpAQCAtMCwwICsxLDUxIEBACisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ09QWVJJR0hUCisKKworQ2VydGFpbiBydWxlcyBhcHBseSB0byB0aGUgZGlzdHJpYnV0aW9uIG9mIHRoZSBab28gYXJjaGl2ZXIuCisKK1RoZSBmb2xsb3dpbmcgcnVsZXMgYXBwbHkgb25seSB0byB0aGUgem9vIGFyY2hpdmVyIGl0c2VsZi4KK0N1cnJlbnRseSwgYWxsIGV4dHJhY3Qtb25seSBwcm9ncmFtcywgYW5kIGFsbCBzdXBwb3J0aW5nIHV0aWxpLQordGllcywgYXJlIGZ1bGx5IGluIHRoZSBwdWJsaWMgZG9tYWluIGFuZCBhcmUgZXhwZWN0ZWQgdG8gcmVtYWluIHNvCitmb3IgdGhlIGZvcnNlZWFibGUgZnV0dXJlLgorCisiVGhpcyBwcm9ncmFtIiByZWZlcnMgdG8gdmVyc2lvbiAxLjUwIGFuZCBzZXBhcmF0ZWx5IHRvIGVhY2ggc3ViLQorc2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBab28gYXJjaGl2ZXIgYW5kIHRvIGFsbCBkZXJpdmF0aXZlIHdvcmtzCit0aGVyZW9mLiAgIkRpc3RyaWJ1dGlvbiByaWdodCIgcmVmZXJzIHRvIGFueSBjb3B5cmlnaHQsIGNvbXBpbGEtCit0aW9uIGNvcHlyaWdodCwgbGljZW5zZSwgb3Igb3RoZXIgcmlnaHQgdG8gY29udHJvbCBkaXN0cmlidXRpb24gb3IKK2NvcHlpbmcuICAiQ29tcGlsZWQgY29kZSIgcmVmZXJzIHRvIHNvZnR3YXJlIHRoYXQgY2FuIGJlIGV4ZWN1dGVkCitieSBhIGNvbXB1dGVyIHN5c3RlbS4KKworVGhpcyBwcm9ncmFtIGlzIGNvcHlyaWdodGVkIGJ1dCBpdHMgZGlzdHJpYnV0aW9uIGZvciBub25jb21tZXJjaWFsCitwdXJwb3NlcyBpcyBwZXJtaXR0ZWQsIHdpdGggdGhlIGZvbGxvd2luZyByZXN0cmljdGlvbnMuCisKKyAgIC0gWW91IGFyZSBwcm9oaWJpdGVkIGZyb20gZGlzdHJpYnV0aW5nIHRoaXMgcHJvZ3JhbSBhcyBwYXJ0IG9mCisgICAgIGFueSBwYWNrYWdlIG92ZXIgd2hpY2ggeW91IGNsYWltIGEgZGlzdHJpYnV0aW9uIHJpZ2h0LiAgVGhpcworICAgICByZXN0cmljdGlvbiBkb2VzIG5vdCBhcHBseSBpZiBhbnkgZGlzdHJpYnV0aW9uIHJpZ2h0IGlzCisgICAgIGNsYWltZWQgb25seSBvdmVyIGluZGl2aWR1YWwgaXRlbXMgdGhhdCB5b3Ugb3duIG9yIGZvciB3aGljaAorICAgICB0aGUgZGlzdHJpYnV0aW9uIHJpZ2h0IGhhcyBiZWVuIGV4cGxpY2l0bHkgYXNzaWduZWQgdG8geW91LAorICAgICBhbmQgbm90IG92ZXIgdGhlIHBhY2thZ2UgYXMgYSBjb2xsZWN0aW9uLgorCisgICAtIFlvdSBhcmUgcHJvaGliaXRlZCBmcm9tIG1ha2luZyB0aGlzIHByb2dyYW0gYXZhaWxhYmxlIGZvcgorICAgICBkb3dubG9hZGluZyB2aWEgdGVsZWNvbW11bmljYXRpb25zIGlmIHlvdSBjaGFyZ2UgYSB0b3RhbCBvZgorICAgICBtb3JlIHRoYW4gJDcuMDAgcGVyIGhvdXIgYXQgMTIwMCBicHMuCisKKyAgIC0gWW91IGFyZSBwcm9oaWJpdGVkIGZyb20gZGlzdHJpYnV0aW5nIHRoaXMgcHJvZ3JhbSBhcyBjb21waWxlZAorICAgICBjb2RlIHVubGVzcyB5b3UgYWxzbyBkaXN0cmlidXRlIHRoZSBzb3VyY2UgY29kZSBmcm9tIHdoaWNoCisgICAgIHRoZSBjb21waWxlZCBjb2RlIHdhcyBkZXJpdmVkLiAgVGhpcyByZXN0cmljdGlvbiBkb2VzIG5vdAorICAgICBhcHBseSBpZiB0aGUgY29tcGlsZWQgY29kZSB3YXMgY3JlYXRlZCBieSBtZS4KKworICAgLSBZb3UgYXJlIHByb2hpYml0ZWQgZnJvbSBjcmVhdGluZywgZnJvbSB0aGlzIHByb2dyYW0sIGFueQorICAgICBkZXJpdmF0aXZlIHdvcmsgb3ZlciB3aGljaCB5b3UgY2xhaW0gYSBkaXN0cmlidXRpb24gcmlnaHQuCisKK1RoZSBhYm92ZSByZXN0cmljdGlvbnMgbWF5IGJlIHJlbGF4ZWQgYnkgc3BlY2lhbCBhZ3JlZW1lbnQ7CitwbGVhc2UgY29udGFjdCBtZSBmb3IgZGV0YWlscy4KKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0gUmFodWwgRGhlc2kgMTk4Ny8wNy8xMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVVVDUDogICAgaXV2YXghYnN1LWNzIWRoZXNpIG9yCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXItZWUhYnN1LWNzIWRoZXNpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHRW5pZTogICBESEVTSQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUGxpbms6ICAgT0xTODA2CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQaG9uZTogICArMSAzMTcgMjg1IDg2NDEgZGF5dGltZSBFU1QKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVTIG1haWw6IDcyMCBXLiBDZW50ZW5uaWFsIEF2ZSAjMTUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNdW5jaWUsIEluZGlhbmEgNDczMDMKKwpkaWZmIC0tZ2l0IGEvbGljZW5zZXMvenBhcSBiL2xpY2Vuc2VzL3pwYXEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjAwYzAyNAotLS0gL2Rldi9udWxsCisrKyBiL2xpY2Vuc2VzL3pwYXEKQEAgLTAsMCArMSw5IEBACitDb3B5cmlnaHQgKEMpIDIwMTEsIERlbGwgSW5jLiBXcml0dGVuIGJ5IE1hdHQgTWFob25leS4KKworUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEgY29weQorb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKK2luIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uIHRoZSByaWdodHMKK3RvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwgYW5kL29yIHNlbGwKK2NvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworZnVybmlzaGVkIHRvIGRvIHNvIHdpdGhvdXQgcmVzdHJpY3Rpb24uCitUaGlzIFNvZnR3YXJlIGlzIHByb3ZpZGVkICJhcyBpcyIgd2l0aG91dCB3YXJyYW50eS4KZGlmZiAtLWdpdCBhL3Byb2ZpbGVzL2xpY2Vuc2VfZ3JvdXBzIGIvcHJvZmlsZXMvbGljZW5zZV9ncm91cHMKaW5kZXggZjEzYjZjYi4uODUwNzkzYSAxMDA2NDQKLS0tIGEvcHJvZmlsZXMvbGljZW5zZV9ncm91cHMKKysrIGIvcHJvZmlsZXMvbGljZW5zZV9ncm91cHMKQEAgLTEsNiArMSw2IEBACi0jIENvcHlyaWdodCAyMDA3LTIwMTAgR2VudG9vIEZvdW5kYXRpb24KKyMgQ29weXJpZ2h0IDE5OTktMjAxMiBHZW50b28gRm91bmRhdGlvbgogIyBEaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHYyCi0jICRIZWFkZXI6IC92YXIvY3Zzcm9vdC9nZW50b28teDg2L3Byb2ZpbGVzL2xpY2Vuc2VfZ3JvdXBzLHYgMS4zOSAyMDEwLzAyLzI2IDExOjE2OjU0IHVsbSBFeHAgJAorIyAkSGVhZGVyOiAvdmFyL2N2c3Jvb3QvZ2VudG9vLXg4Ni9wcm9maWxlcy9saWNlbnNlX2dyb3Vwcyx2IDEuMTU1IDIwMTIvMTIvMTggMDY6MTU6MDYgdmFwaWVyIEV4cCAkCiAKICMgUGxlYXNlIHJlcG9ydCBidWdzIG9yIG90aGVyIHJlcXVlc3RzIGF0IGJ1Z3MuZ2VudG9vLm9yZyBhbmQgYXNzaWduIHRvCiAjIGxpY2Vuc2VzQGdlbnRvby5vcmcKQEAgLTgsMzYgKzgsNDUgQEAKICMgR0xFUC0wMDIzCiAjIGh0dHA6Ly93d3cuZ2VudG9vLm9yZy9wcm9qL2VuL2dsZXAvZ2xlcC0wMDIzLmh0bWwKIAotIyBodHRwOi8vd3d3LmZzZi5vcmcvbGljZW5zaW5nL2xpY2Vuc2VzLwotR1BMLUNPTVBBVElCTEUgQUdQTC0zIEFwYWNoZS0yLjAgQXJ0aXN0aWMtMiBhcy1pcyBCb29zdC0xLjAgQlNEIEJTRC0yIENlQ0lMTC0yIERCIEZUTCBHUEwtMSBHUEwtMiBHUEwtMi13aXRoLWZvbnQtZXhjZXB0aW9uIEdQTC0yLXdpdGgtTGluZGVuLUxhYi1GTE9TUy1leGNlcHRpb24gR1BMLTItd2l0aC1NeVNRTC1GTE9TUy1leGNlcHRpb24gR1BMLTMgR1BMLTMtd2l0aC1mb250LWV4Y2VwdGlvbiBJU0MgTEdQTC0yIExHUEwtMi4xIExHUEwtMyBNSVQgT1BFTkxEQVAgT3JhY2xlREIgUFNGLTIuMiBQU0YtMi4zIFBTRi0yLjQgcHVibGljLWRvbWFpbiBQWVRIT04gUnVieSBTR0ktQi0yLjAgdW5pY29kZSBVb0ktTkNTQSB2aW0gVzNDIFdURlBMLTIgWkxJQiBaUEwKKyMgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2xpY2Vuc2UtbGlzdC5odG1sCisjIEdQTCBvciBMR1BMIHdpdGggdmFyaW91cyBleGNlcHRpb25zIGFyZSBhbHNvIGluY2x1ZGVkIGhlcmUsIGJlY2F1c2UKKyMgdGhleSBhcmUgbW9yZSBwZXJtaXNzaXZlIHRoYW4gdGhlIGxpY2Vuc2VzIHRoZXkgYXJlIGJhc2VkIG9uLgorR1BMLUNPTVBBVElCTEUgQUdQTC0zIEFwYWNoZS0yLjAgQXJ0aXN0aWMtMiBCb29zdC0xLjAgQlNEIEJTRC0yIENDMC0xLjAtVW5pdmVyc2FsIENlQ0lMTC0yIENsYXJpZmllZC1BcnRpc3RpYyBGVEwgZ2NjLXJ1bnRpbWUtbGlicmFyeS1leGNlcHRpb24tMy4xIEdQTC0xIEdQTC0xKyBHUEwtMiBHUEwtMisgR1BMLTItd2l0aC1leGNlcHRpb25zIEdQTC0yLXdpdGgtZm9udC1leGNlcHRpb24gR1BMLTItd2l0aC1saW5raW5nLWV4Y2VwdGlvbiBHUEwtMi13aXRoLU15U1FMLUZMT1NTLWV4Y2VwdGlvbiBHUEwtMyBHUEwtMysgR1BMLTMtd2l0aC1mb250LWV4Y2VwdGlvbiBJU0MgTEdQTC0yIExHUEwtMisgTEdQTC0yLXdpdGgtbGlua2luZy1leGNlcHRpb24gTEdQTC0yLjEgTEdQTC0yLjErIExHUEwtMi4xLXdpdGgtbGlua2luZy1leGNlcHRpb24gTEdQTC0zIExHUEwtMysgTEdQTC0zLXdpdGgtbGlua2luZy1leGNlcHRpb24gbGliZ2NjIGxpYnN0ZGMrKyBtZXRhcGFja2FnZSBNSVQgTVBMLTIuMCBPUEVOTERBUCBQU0YtMiBQU0YtMi4yIFBTRi0yLjMgUFNGLTIuNCBwdWJsaWMtZG9tYWluIFBZVEhPTiBxd3QgUnVieSBSdWJ5LUJTRCBTR0ktQi0yLjAgU2xlZXB5Y2F0IHRhbnVraS1jb21tdW5pdHkgdW5pY29kZSBVbmxpY2Vuc2UgVW9JLU5DU0EgdmltIFczQyBXVEZQTC0yIFpMSUIgWlBMCiAKLUZTRi1BUFBST1ZFRCBAR1BMLUNPTVBBVElCTEUgQUZMLTIuMCBBRkwtMi4xIEFGTC0zLjAgQXBhY2hlLTEuMSBBUFNMLTIgQml0VG9ycmVudCBCU0QtNCBDRERMIENQTC0xLjAgRVBMLTEuMCBJQk0gTFBQTC0xLjIgTVBMLTEuMCBNUEwtMS4xIE1zLVBMIE5QTC0xLjEgb3BlbnNzbCBPU0wtMS4xIE9TTC0yLjAgT1NMLTIuMSBQSFAtMy4wMSBRUEwgUVBMLTEuMCBTUEwKK0ZTRi1BUFBST1ZFRCBAR1BMLUNPTVBBVElCTEUgQUZMLTIuMSBBRkwtMy4wIEFwYWNoZS0xLjEgQVBTTC0yIEJpdFRvcnJlbnQgQlNELTQgQ0RETCBDTlJJIENQTC0xLjAgRVBMLTEuMCBFVVBMLTEuMSBJQk0gTFBQTC0xLjIgTVBMLTEuMCBNUEwtMS4xIE1zLVBMIE5QTC0xLjEgb3BlbnNzbCBPU0wtMS4xIE9TTC0yLjAgT1NMLTIuMSBQSFAtMy4wMSBRUEwgUVBMLTEuMAogCiAjIGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMKLU9TSS1BUFBST1ZFRCBBRkwtMy4wIEFwYWNoZS0yLjAgQVBMLTEuMCBBcnRpc3RpYyBBcnRpc3RpYy0yIEJvb3N0LTEuMCBCU0QgQlNELTIgQ0RETCBDUEwtMS4wIEVQTCBFUEwtMS4wIEdQTC0yIEdQTC0zIElCTSBJU0MgTEdQTC0yLjEgTEdQTC0zIE1JVCBNUEwtMS4xIE1zLVBMIG5ldGhhY2sgT0dUU0wgUEhQIFBTRi0yLjIgUFNGLTIuMyBQU0YtMi40IFBZVEhPTiBRUEwgU1BMIHd4V2luTEwtMyBaTElCIFpQTAorT1NJLUFQUFJPVkVEIEFGTC0zLjAgQUdQTC0zIEFwYWNoZS0xLjEgQXBhY2hlLTIuMCBBUEwtMS4wIEFQU0wtMiBBcnRpc3RpYyBBcnRpc3RpYy0yIEJvb3N0LTEuMCBCU0QgQlNELTIgQ0RETCBDTlJJIENQQUwtMS4wIENQTC0xLjAgRVBMLTEuMCBFVVBMLTEuMSBHUEwtMSsgR1BMLTIgR1BMLTIrIEdQTC0zIEdQTC0zKyBIUE5EIElCTSBJUEFmb250IElTQyBMR1BMLTIrIExHUEwtMi4xIExHUEwtMi4xKyBMR1BMLTMgTEdQTC0zKyBMUFBMLTEuM2MgTUlUIE1QTC0xLjAgTVBMLTEuMSBNUEwtMi4wIE1zLVBMIG5ldGhhY2sgTk9TQSBPRkwtMS4xIFBIUC0zIFBIUC0zLjAxIFBPU1RHUkVTUUwgUFNGLTIgUVBMIFNsZWVweWNhdCBXM0Mgd3hXaW5MTC0zIHd4V2luTEwtMy4xIFpMSUIgWlBMCiAKICMgTWlzYyBsaWNlbnNlcyB0aGF0IGFyZSBwcm9iYWJseSBmcmVlIHNvZnR3YXJlLCBpLmUuIGZvbGxvdyB0aGUKICMgRnJlZSBTb2Z0d2FyZSBEZWZpbml0aW9uIGF0IGh0dHA6Ly93d3cuZ251Lm9yZy9waGlsb3NvcGh5L2ZyZWUtc3cuaHRtbAogIyBidXQgYXJlIG5vdCBhcHByb3ZlZCBieSBlaXRoZXIgRlNGIG9yIE9TSS4gUHJlZmVyYWJseSBvbiB0aGUgbG9uZwogIyB0ZXJtIHRoZXNlIHNob3VsZCBiZSBjbGVhcmVkIHVwIGFuZCBtb3ZlZCB0byBvdGhlciBzZXRzLgotTUlTQy1GUkVFIEFOVExSIEJFRVItV0FSRSBCWklQMiBDRERMLVNjaGlseSBDTWFrZSBDUkFDS0xJQiBjcnlwdG9wcCBlR2VuaXhQdWJsaWMtMS4xIEVsZW1lbnRUcmVlIEVtYWNzIEZMRVggRkxUSyBGVldNIGdudXBsb3QgR1BMLTItd2l0aC1leGNlcHRpb25zIEdQTC0yLXdpdGgtbGlua2luZy1leGNlcHRpb24gZ3NtIGlBU0wgSURQTCBpbWFnZW1hZ2ljayBJbmZvLVpJUCBKYW1lc0NsYXJrIEpOSUMgTExHUEwtMi4xIExQUEwtMS4zIExQUEwtMS4zYyBsc29mIE1heE1pbmQgTm8tUHJvYmxlbS1CdWdyb2ZmIE9wZW5Tb2Z0d2FyZSBvdHRlciBQQlpJUDIgUERGTGl0ZSBQSFAtMyBQT1NUR1JFU1FMIFByaW5jZXRvbiBweXNxbGl0ZSBSU0EtTUQ0IFJTQS1NRDUgU2NpbnRpbGxhIFNlbmRtYWlsIFNNQUlMIFN1YnZlcnNpb24gdGNwX3dyYXBwZXJzX2xpY2Vuc2UgVGVYIHczbSB3eFdpbkxMLTMgWGRlYnVnIFpTSAorIyBMaWNlbnNlcyBpbiB0aGlzIGxpc3Qgc2hvdWxkIE5PVCBhcHBlYXIgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSBpbiBARlNGLUFQUFJPVkVEIG9yIEBPU0ktQVBQUk9WRUQKKyMgVE9ETzogbWF5YmUgYWRkIGEgY2F0ZWdvcnkgZm9yIEJTRC1hbGlrZSBNSVNDLUZSRUUgbGljZW5zZXMgZm9yIGVhc3kgc2VwZXJhdGlvbj8KKyMgQlNELTQgYWxpa2VzOiBkb200aiBGYXN0Q0dJIGljdSBqYXhlbiBKRE9NIHNheHBhdGgKK01JU0MtRlJFRSBBbGxlZ3JvIEFOVExSIGFzLWlzIGJlYS5yaS5qc3IxNzMgQkVFUi1XQVJFIGJvZWhtLWdjIEJTRC0xIEJTRC13aXRoLWF0dHJpYnV0aW9uIEJaSVAyIENEREwtU2NoaWx5IENlQ0lMTC1DIENNYWtlIENQTC0wLjUgQ1JBQ0tMSUIgY3J5cHRvcHAgY3p5Ym9ycmEgZG9jYm9vayBkb200aiBlR2VuaXhQdWJsaWMtMS4xIEVsZW1lbnRUcmVlIEVtYWNzIEVybFBMLTEuMSBGYXN0Q0dJIEZMRVggRkxUSyBmcmVlbWFya2VyIEZWV00gZ251cGxvdCBnc20gSFRNTC1UaWR5IGh0bWxjIGlBU0wgSUJQUC0xLjEgaWN1IElEUEwgSUpHIGltYWdlbWFnaWNrIEluZm8tWklQIGlwYWRpYyBJc3BlbGwgSmFzUGVyMi4wIGpheGVuIEpET00gSk5JQyBKT1ZFIGxpYm1uZyBsaWJwbmcgbGlidGlmZiBMTEdQTC0yLjEgTFBQTC0xLjMgTFBQTC0xLjNiIGxzb2YgbWF0cGxvdGxpYiBtZDJrNy1hc3lvdXdpc2ggbXBsdXMtZm9udHMgTkNTQS1IREYgbm93ZWIgb3BlbmFmcy1rcmI1LWEgT3BlblNvZnR3YXJlIG90dGVyIHBlcmZvcmNlIFBIUC0yLjAyIFByaW5jZXRvbiBwc3V0aWxzIHB5c3FsaXRlIHJjIHJlZ2V4cC1Vb2ZUIFJTQSBzYXhwYXRoIFNjaW50aWxsYSBTZW5kbWFpbCBza3lwZS00LjAuMC43LXRoaXJkLXBhcnR5X2F0dHJpYnV0aW9ucy50eHQgU01BSUwgU05JQSBTU0xlYXkgU3VidmVyc2lvbiBTVkZMIHRjbHRrIHRjcF93cmFwcGVyc19saWNlbnNlIFRlWCBUZVgtb3RoZXItZnJlZSBVYnVudHVGb250TGljZW5zZS0xLjAgdmxnb3RoaWMgdzNtIHd4V2luTEwtMyBYZGVidWcgeHRycyBZYVRlWCB6cGFxIFpTSAorIyBUaGUgZm9sbG93aW5nIGFyZSBOT1QgdmFsaWQgaW4gQE1JU0MtRlJFRToKKyMgYXJqIC0gdXNhZ2UgcmVzdHJpY3Rpb25zCisjIGZyZWVkaXN0IC0gRG9lc24ndCBncmFudCB0aGUgcmlnaHQgdG8gZG8gbW9kaWZpY2F0aW9ucy4KKyMgbGhhIC0gcmVzdHJpY3Rpb25zIG9uIGRpc3RyaWJ1dGlvbiwgZG9lc24ndCBncmFudCB0aGUgcmlnaHQgdG8gZG8gbW9kaWZpY2F0aW9ucy4KIAogIyBNZXRhc2V0IGZvciBhbGwgZnJlZSBzb2Z0d2FyZQogRlJFRS1TT0ZUV0FSRSBARlNGLUFQUFJPVkVEIEBPU0ktQVBQUk9WRUQgQE1JU0MtRlJFRQogCiAjIEZTRi1hcHByb3ZlZCBsaWNlbnNlcyBmb3IgImZyZWUgZG9jdW1lbnRhdGlvbiIgYW5kICJ3b3JrcyBvZgogIyBwcmFjdGljYWwgdXNlIGJlc2lkZXMgc29mdHdhcmUgYW5kIGRvY3VtZW50YXRpb24iIChpbmNsdWRpbmcgZm9udHMpCi1GU0YtQVBQUk9WRUQtT1RIRVIgQXJwaGljIENDUEwtQXR0cmlidXRpb24tMi4wIENDUEwtQXR0cmlidXRpb24tU2hhcmVBbGlrZS0yLjAgRFNMIEZETC0xLjEgRkRMLTEuMiBGREwtMS4zIEZyZWVBcnQgR1BMLTEgR1BMLTIgR1BMLTMgT0ZMIE9GTC0xLjEgT1BMCitGU0YtQVBQUk9WRUQtT1RIRVIgQXJwaGljIENDUEwtQXR0cmlidXRpb24tMi4wIENDUEwtQXR0cmlidXRpb24tU2hhcmVBbGlrZS0yLjAgRFNMIEZETC0xLjEgRkRMLTEuMSsgRkRMLTEuMiBGREwtMS4yKyBGREwtMS4zIEZETC0xLjMrIEZyZWVBcnQgR1BMLTEgR1BMLTErIEdQTC0yIEdQTC0yKyBHUEwtMyBHUEwtMysgT0ZMIE9GTC0xLjEgT1BMCiAKICMgTGljZW5zZXMgZm9yIGZyZWUgZG9jdW1lbnRzLCBmb2xsb3dpbmcgdGhlIGRlZmluaXRpb24gYXQKICMgaHR0cDovL2ZyZWVkb21kZWZpbmVkLm9yZy8KLUZSRUUtRE9DVU1FTlRTIEBGU0YtQVBQUk9WRUQtT1RIRVIgQml0c3RyZWFtVmVyYSBDQy1QRCBDQ1BMLUF0dHJpYnV0aW9uLTMuMCBDQ1BMLUF0dHJpYnV0aW9uLVNoYXJlQWxpa2UtMi41IENDUEwtQXR0cmlidXRpb24tU2hhcmVBbGlrZS0zLjAgTERQLTEgTERQLTFhIG1hbi1wYWdlcy1wb3NpeCBteXNwZWxsLWVuX0NBLUtldmluQXRraW5zb24KK0ZSRUUtRE9DVU1FTlRTIEBGU0YtQVBQUk9WRUQtT1RIRVIgQml0c3RyZWFtVmVyYSBDQy1QRCBDQ1BMLUF0dHJpYnV0aW9uLTIuNSBDQ1BMLUF0dHJpYnV0aW9uLTMuMCBDQ1BMLUF0dHJpYnV0aW9uLVNoYXJlQWxpa2UtMi41IENDUEwtQXR0cmlidXRpb24tU2hhcmVBbGlrZS0zLjAgQ0NQTC1TaGFyZUFsaWtlLTEuMCBMRFAtMSBMRFAtMWEgbWFuLXBhZ2VzIG1hbi1wYWdlcy1wb3NpeCBNYXhNaW5kMiBteXNwZWxsLWVuX0NBLUtldmluQXRraW5zb24gVGV4aW5mby1tYW51YWwgd3hXaW5GREwtMwogCiAjIENvbGxlY3Rpb24gb2YgYWxsIGxpY2Vuc2VzIHdpdGggdGhlIGZyZWVkb20gdG8gdXNlLCBzaGFyZSwgbW9kaWZ5CiAjIGFuZCBzaGFyZSBtb2RpZmljYXRpb25zCiBGUkVFIEBGUkVFLVNPRlRXQVJFIEBGUkVFLURPQ1VNRU5UUwogCi1FVUxBIEJDUyBCcm9hZGNvbSBjYWRzb2Z0IGRsai0xLjEgRE9PTTMgRVRRVyBJQk0tSjEuNSBJQk0tSjEuNiBJbnRyb3ZlcnNpb24ganJvY2tpdCBMaXZlc3RhdGlvbi1FVUxBIExPS0ktRVVMQSBMUkNURiBNQVJCTEVCTEFTVCBOZXJvLUVVTEEtVVMgUGFuZG8tRVVMQSBQT01QT00gcG9zdGFsMiBQVUVMIFEzQUVVTEEgUVVBS0U0IFJUQ1cgUlRDVy1FVEVVTEEgc2t5cGUtZXVsYSBzdW4tYmNsYS1qYXZhLXZtIHN1bi1wcmVyZWxlYXNlLWpkazYgc3VuLXByZXJlbGVhc2UtamRrNyBUSElOS1RBTktTIHV0MjAwMyB1dDIwMDMtZGVtbworRVVMQSBBZG9iZUZsYXNoLTEwLjMgQkNTIEJyb2FkY29tIGNhZHNvZnQgRE9PTTMgRVRRVyBGcmF1bmhvZmVyRkRLIGdvb2dsZS1jaHJvbWUgZ29vZ2xlZWFydGggR29vZ2xlLVRPUyBJQk0tSjEuNSBJQk0tSjEuNiBJbnRlbC1TRFAgSW50cm92ZXJzaW9uIExpdmVzdGF0aW9uLUVVTEEgTE9LSS1FVUxBIExSQ1RGIE1ha2VNS1YtRVVMQSBNQVJCTEVCTEFTVCBNZW5kZWxleS1FVUxBIE1TamRiY0VVTEE0MCBOZXJvLUFBQy1FVUxBIE5lcm8tRVVMQS1VUyBPcmFjbGUtQkNMQS1KYXZhU0UgUE9NUE9NIHBvc3RhbDIgUFVFTCBRM0FFVUxBIFFVQUtFNCBSVENXIFJUQ1ctRVRFVUxBIFNDTS1NSUNSTyBza3lwZS1ldWxhIHNreXBlLTQuMC4wLjctY29weXJpZ2h0IHNwaW4tY29tbWVyY2lhbCBzcGluLWVkdWNhdGlvbmFsIHN1bi1iY2xhLWphdmEtdm0gVEhJTktUQU5LUyBVUEVLLVNESy1FVUxBIHV0MjAwMyB1dDIwMDMtZGVtbwogCiAjIEFzIHByb3Bvc2VkOiBodHRwOi8vYXJjaGl2ZXMuZ2VudG9vLm9yZy9nZW50b28tZGV2L21zZ182Yzk1MGI0NmM1MGZlNzJlYmM1ZTY1MGJiZjcwZjc3Yy54bWwKICMgRXhjZXJwdCBvZiB0aGUgcnVsZXMgZm9yIHRoaXMgbGljZW5zZSBncm91cDoKQEAgLTQ5LDQgKzU4LDEzIEBACiAjIC0gSUZGIHRoZXJlIGlzIGFuIGV4cGxpY2l0IGluY2x1c2lvbiByZXF1aXJlbWVudCwgVVNFPWJpbmRpc3QKICMgICBNVVNUIGNhdXNlIGEgY29weSBvZiB0aGUgbGljZW5zZSB0byBiZSBpbnN0YWxsZWQgaW4gYSBmaWxlCiAjICAgbG9jYXRpb24gY29tcGxpYW50IHdpdGggdGhlIGxpY2Vuc2UsCi1CSU5BUlktUkVESVNUUklCVVRBQkxFIEBGUkVFIEFkYXB0ZWMgYWRvYmUtcHMgYXRoZXJvcy1oYWwgaW50ZWwtcHNiIGlwdzIxMDAtZncgaXB3MjIwMC1mdyBOVklESUEgcWxvZ2ljLWZpYnJlLWNoYW5uZWwtZmlybXdhcmUgcmFsaW5rLWZpcm13YXJlCitCSU5BUlktUkVESVNUUklCVVRBQkxFIEBGUkVFIGFkb2JlLXBzIGF0aGVyb3MtaGFsIGludGVsLXBzYiBpbnRlbC11Y29kZSBpcHcyMTAwLWZ3IGlwdzIyMDAtZncgaXB3Mzk0NSBsaWJlcnRhcy1mdyBOVklESUEgcWxvZ2ljLWZpYnJlLWNoYW5uZWwtZmlybXdhcmUgcmFkZW9uLXVjb2RlIHJhbGluay1maXJtd2FyZSBTbWFydExhYnMKKworIyBEZXByZWNhdGVkIGxpY2Vuc2UgbGFiZWxzLCB1c2VkIGJ5IHJlcG9tYW4KKyMgYXMtaXM6IHNlZSBub3RlIGluIGxpY2Vuc2VzL2FzLWlzIGFuZCBidWcgNDM2MjE0CitERVBSRUNBVEVEIGFzLWlzCisKKyMgTG9jYWwgVmFyaWFibGVzOgorIyBtb2RlOiBjb25mLXNwYWNlCisjIG1vZGU6IHZpc3VhbC1saW5lCisjIEVuZDoK