ZGlmZiAtLWdpdCBhL3NyYy9zaGFyZS9kb2MvcmVsZWFzZS9MSUNFTlNFLnR4dCBiL3NyYy9zaGFyZS9kb2MvcmVsZWFzZS9MSUNFTlNFLnR4dAppbmRleCBlOTg3NDEyLi40YWVhNTM3IDEwMDY0NAotLS0gYS9zcmMvc2hhcmUvZG9jL3JlbGVhc2UvTElDRU5TRS50eHQKKysrIGIvc3JjL3NoYXJlL2RvYy9yZWxlYXNlL0xJQ0VOU0UudHh0CkBAIC0xLDMwNiArMSwyNjMgQEAKLUEuIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gKCJTdW4iKSBFTlRJVExFTUVOVCBmb3IgU09GVFdBUkUKK0NPTU1PTiBERVZFTE9QTUVOVCBBTkQgRElTVFJJQlVUSU9OIExJQ0VOU0UgKENEREwpIFZlcnNpb24gMS4wCiAKLUxpY2Vuc2VlL0NvbXBhbnk6IEVudGl0eSByZWNlaXZpbmcgU29mdHdhcmUuCisxLiBEZWZpbml0aW9ucy4KIAotRWZmZWN0aXZlIERhdGU6IERhdGUgb2YgZGVsaXZlcnkgb2YgdGhlIFNvZnR3YXJlIHRvIFlvdS4KKyAgIDEuMS4gQ29udHJpYnV0b3IuIG1lYW5zIGVhY2ggaW5kaXZpZHVhbCBvciBlbnRpdHkgdGhhdCBjcmVhdGVzIG9yIGNvbnRyaWJ1dGVzIHRvIHRoZSBjcmVhdGlvbiBvZiBNb2RpZmljYXRpb25zLgogCi1Tb2Z0d2FyZTogSmF2YUJlYW5zIEFjdGl2YXRpb24gRnJhbWV3b3JrIDEuMS4xLgorICAgMS4yLiBDb250cmlidXRvciBWZXJzaW9uLiBtZWFucyB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIFNvZnR3YXJlLCBwcmlvciBNb2RpZmljYXRpb25zIHVzZWQgYnkgYSBDb250cmlidXRvciAoaWYgYW55KSwgYW5kIHRoZSBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBwYXJ0aWN1bGFyIENvbnRyaWJ1dG9yLgogCi1MaWNlbnNlIFRlcm06ICBQZXJwZXR1YWwgKHN1YmplY3QgdG8gdGVybWluYXRpb24gdW5kZXIgdGhlIFNMQSkuCisgICAxLjMuIENvdmVyZWQgU29mdHdhcmUuIG1lYW5zIChhKSB0aGUgT3JpZ2luYWwgU29mdHdhcmUsIG9yIChiKSBNb2RpZmljYXRpb25zLCBvciAoYykgdGhlIGNvbWJpbmF0aW9uIG9mIGZpbGVzIGNvbnRhaW5pbmcgT3JpZ2luYWwgU29mdHdhcmUgd2l0aCBmaWxlcyBjb250YWluaW5nIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZSBpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi4KIAotTGljZW5zZWQgVW5pdDogU29mdHdhcmUgQ29weS4KKyAgIDEuNC4gRXhlY3V0YWJsZS4gbWVhbnMgdGhlIENvdmVyZWQgU29mdHdhcmUgaW4gYW55IGZvcm0gb3RoZXIgdGhhbiBTb3VyY2UgQ29kZS4KIAotTGljZW5zZWQgdW5pdCBDb3VudDogVW5saW1pdGVkLgorICAgMS41LiBJbml0aWFsIERldmVsb3Blci4gbWVhbnMgdGhlIGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgZmlyc3QgbWFrZXMgT3JpZ2luYWwgU29mdHdhcmUgYXZhaWxhYmxlIHVuZGVyIHRoaXMgTGljZW5zZS4KIAotUGVybWl0dGVkIFVzZXM6CisgICAxLjYuIExhcmdlciBXb3JrLiBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBTb2Z0d2FyZSBvciBwb3J0aW9ucyB0aGVyZW9mIHdpdGggY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KIAotMS4gWW91IG1heSByZXByb2R1Y2UgYW5kIHVzZSB0aGUgU29mdHdhcmUgZm9yIEluZGl2aWR1YWwsIENvbW1lcmNpYWwsCi1vciBSZXNlYXJjaCBhbmQgSW5zdHJ1Y3Rpb25hbCBVc2UgZm9yIHRoZSBwdXJwb3NlcyBvZiBkZXNpZ25pbmcsCi1kZXZlbG9waW5nLCB0ZXN0aW5nLCBhbmQgcnVubmluZyBZb3VyIGFwcGxldHMgYW5kCi1hcHBsaWNhdGlvbigiUHJvZ3JhbXMiKS4KKyAgIDEuNy4gTGljZW5zZS4gbWVhbnMgdGhpcyBkb2N1bWVudC4KIAotMi4gU3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgYW5kCi1yZXN0cmljdGlvbnMgYW5kIGV4Y2VwdGlvbnMgc2V0IGZvcnRoIGluIHRoZSBTb2Z0d2FyZSdzIGRvY3VtZW50YXRpb24sCi1Zb3UgbWF5IHJlcHJvZHVjZSBhbmQgZGlzdHJpYnV0ZSBwb3J0aW9ucyBvZiBTb2Z0d2FyZSBpZGVudGlmaWVkIGFzIGEKLXJlZGlzdHJpYnV0YWJsZSBpbiB0aGUgZG9jdW1lbnRhdGlvbiAoIlJlZGlzdHJpYnV0YWJsZSIpLCBwcm92aWRlZAotdGhhdDoKKyAgIDEuOC4gTGljZW5zYWJsZS4gbWVhbnMgaGF2aW5nIHRoZSByaWdodCB0byBncmFudCwgdG8gdGhlIG1heGltdW0gZXh0ZW50IHBvc3NpYmxlLCB3aGV0aGVyIGF0IHRoZSB0aW1lIG9mIHRoZSBpbml0aWFsIGdyYW50IG9yIHN1YnNlcXVlbnRseSBhY3F1aXJlZCwgYW55IGFuZCBhbGwgb2YgdGhlIHJpZ2h0cyBjb252ZXllZCBoZXJlaW4uCiAKLShhKSB5b3UgZGlzdHJpYnV0ZSBSZWRpc3RyaWJ1dGFibGUgY29tcGxldGUgYW5kIHVubW9kaWZpZWQgYW5kIG9ubHkKLWJ1bmRsZWQgYXMgcGFydCBvZiBZb3VyIFByb2dyYW1zLAorICAgMS45LiBNb2RpZmljYXRpb25zLiBtZWFucyB0aGUgU291cmNlIENvZGUgYW5kIEV4ZWN1dGFibGUgZm9ybSBvZiBhbnkgb2YgdGhlIGZvbGxvd2luZzoKIAotKGIpIHlvdXIgUHJvZ3JhbXMgYWRkIHNpZ25pZmljYW50IGFuZCBwcmltYXJ5IGZ1bmN0aW9uYWxpdHkgdG8gdGhlCi1SZWRpc3RyaWJ1dGFibGUsCisgICAgICAgIEEuIEFueSBmaWxlIHRoYXQgcmVzdWx0cyBmcm9tIGFuIGFkZGl0aW9uIHRvLCBkZWxldGlvbiBmcm9tIG9yIG1vZGlmaWNhdGlvbiBvZiB0aGUgY29udGVudHMgb2YgYSBmaWxlIGNvbnRhaW5pbmcgT3JpZ2luYWwgU29mdHdhcmUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9uczsKIAotKGMpIHlvdSBkaXN0cmlidXRlIFJlZGlzdHJpYnV0YWJsZSBmb3IgdGhlIHNvbGUgcHVycG9zZSBvZiBydW5uaW5nIHlvdXIKLVByb2dyYW1zLAorICAgICAgICBCLiBBbnkgbmV3IGZpbGUgdGhhdCBjb250YWlucyBhbnkgcGFydCBvZiB0aGUgT3JpZ2luYWwgU29mdHdhcmUgb3IgcHJldmlvdXMgTW9kaWZpY2F0aW9uOyBvcgogCi0oZCkgeW91IGRvIG5vdCBkaXN0cmlidXRlIGFkZGl0aW9uYWwgc29mdHdhcmUgaW50ZW5kZWQgdG8gcmVwbGFjZSBhbnkKLWNvbXBvbmVudChzKSBvZiB0aGUgUmVkaXN0cmlidXRhYmxlLAorICAgICAgICBDLiBBbnkgbmV3IGZpbGUgdGhhdCBpcyBjb250cmlidXRlZCBvciBvdGhlcndpc2UgbWFkZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KIAotKGUpIHlvdSBkbyBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueSBwcm9wcmlldGFyeSBsZWdlbmRzIG9yIG5vdGljZXMKLWNvbnRhaW5lZCBpbiBvciBvbiB0aGUgUmVkaXN0cmlidXRhYmxlLgorICAgMS4xMC4gT3JpZ2luYWwgU29mdHdhcmUuIG1lYW5zIHRoZSBTb3VyY2UgQ29kZSBhbmQgRXhlY3V0YWJsZSBmb3JtIG9mIGNvbXB1dGVyIHNvZnR3YXJlIGNvZGUgdGhhdCBpcyBvcmlnaW5hbGx5IHJlbGVhc2VkIHVuZGVyIHRoaXMgTGljZW5zZS4KIAotKGYpIHlvdSBvbmx5IGRpc3RyaWJ1dGUgdGhlIFJlZGlzdHJpYnV0YWJsZSBzdWJqZWN0IHRvIGEgbGljZW5zZQotYWdyZWVtZW50IHRoYXQgcHJvdGVjdHMgU3VuJ3MgaW50ZXJlc3RzIGNvbnNpc3RlbnQgd2l0aCB0aGUgdGVybXMKLWNvbnRhaW5lZCBpbiB0aGlzIEFncmVlbWVudCwgYW5kCisgICAxLjExLiBQYXRlbnQgQ2xhaW1zLiBtZWFucyBhbnkgcGF0ZW50IGNsYWltKHMpLCBub3cgb3duZWQgb3IgaGVyZWFmdGVyIGFjcXVpcmVkLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBtZXRob2QsIHByb2Nlc3MsIGFuZCBhcHBhcmF0dXMgY2xhaW1zLCBpbiBhbnkgcGF0ZW50IExpY2Vuc2FibGUgYnkgZ3JhbnRvci4KIAotKGcpIHlvdSBhZ3JlZSB0byBkZWZlbmQgYW5kIGluZGVtbmlmeSBTdW4gYW5kIGl0cyBsaWNlbnNvcnMgZnJvbSBhbmQKLWFnYWluc3QgYW55IGRhbWFnZXMsIGNvc3RzLCBsaWFiaWxpdGllcywgc2V0dGxlbWVudCBhbW91bnRzIGFuZC9vcgotZXhwZW5zZXMgIChpbmNsdWRpbmcgYXR0b3JuZXlzJyBmZWVzKSBpbmN1cnJlZCBpbiBjb25uZWN0aW9uIHdpdGggYW55Ci1jbGFpbSwgbGF3c3VpdCBvciBhY3Rpb24gYnkgYW55IHRoaXJkIHBhcnR5IHRoYXQgYXJpc2VzIG9yIHJlc3VsdHMgZnJvbQotdGhlIHVzZSBvciBkaXN0cmlidXRpb24gb2YgYW55IGFuZCBhbGwgUHJvZ3JhbXMgYW5kL29yCi1SZWRpc3RyaWJ1dGFibGUuCisgICAxLjEyLiBTb3VyY2UgQ29kZS4gbWVhbnMgKGEpIHRoZSBjb21tb24gZm9ybSBvZiBjb21wdXRlciBzb2Z0d2FyZSBjb2RlIGluIHdoaWNoIG1vZGlmaWNhdGlvbnMgYXJlIG1hZGUgYW5kIChiKSBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gaW5jbHVkZWQgaW4gb3Igd2l0aCBzdWNoIGNvZGUuCiAKLTMuIEphdmEgVGVjaG5vbG9neSBSZXN0cmljdGlvbnMuICBZb3UgbWF5IG5vdCBjcmVhdGUsIG1vZGlmeSwgb3IgY2hhbmdlCi10aGUgYmVoYXZpb3Igb2YsIG9yIGF1dGhvcml6ZSB5b3VyIGxpY2Vuc2VlcyB0byBjcmVhdGUsIG1vZGlmeSwgb3IKLWNoYW5nZSB0aGUgYmVoYXZpb3Igb2YsIGNsYXNzZXMsIGludGVyZmFjZXMsIG9yIHN1YnBhY2thZ2VzIHRoYXQgYXJlIGluCi1hbnkgd2F5IGlkZW50aWZpZWQgYXMgImphdmEiLCAiamF2YXgiLCAic3VuIiBvciBzaW1pbGFyIGNvbnZlbnRpb24gYXMKLXNwZWNpZmllZCBieSBTdW4gaW4gYW55IG5hbWluZyBjb252ZW50aW9uIGRlc2lnbmF0aW9uLgorICAgMS4xMy4gWW91LiAob3IgLllvdXIuKSBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsIC5Zb3UuIGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAuY29udHJvbC4gbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIG1vcmUgdGhhbiBmaWZ0eSBwZXJjZW50ICg1MCUpIG9mIHRoZSBvdXRzdGFuZGluZyBzaGFyZXMgb3IgYmVuZWZpY2lhbCBvd25lcnNoaXAgb2Ygc3VjaCBlbnRpdHkuCiAKLUIuIFN1biBNaWNyb3N5c3RlbXMsIEluYy4gKCJTdW4iKQotU09GVFdBUkUgTElDRU5TRSBBR1JFRU1FTlQKKzIuIExpY2Vuc2UgR3JhbnRzLgogCi1SRUFEIFRIRSBURVJNUyBPRiBUSElTIEFHUkVFTUVOVCAoIkFHUkVFTUVOVCIpIENBUkVGVUxMWSBCRUZPUkUgT1BFTklORwotU09GVFdBUkUgTUVESUEgUEFDS0FHRS4gQlkgT1BFTklORyBTT0ZUV0FSRSBNRURJQSBQQUNLQUdFLCBZT1UgQUdSRUUgVE8KLVRIRSBURVJNUyBPRiBUSElTIEFHUkVFTUVOVC4gSUYgWU9VIEFSRSBBQ0NFU1NJTkcgU09GVFdBUkUKLUVMRUNUUk9OSUNBTExZLCBJTkRJQ0FURSBZT1VSIEFDQ0VQVEFOQ0UgT0YgVEhFU0UgVEVSTVMgQlkgU0VMRUNUSU5HCi1USEUgIkFDQ0VQVCIgQlVUVE9OIEFUIFRIRSBFTkQgT0YgVEhJUyBBR1JFRU1FTlQuIElGIFlPVSBETyBOT1QgQUdSRUUKLVRPIEFMTCBPRiBUSEUgVEVSTVMsIFBST01QVExZIFJFVFVSTiBUSEUgVU5VU0VEIFNPRlRXQVJFIFRPIFlPVVIgUExBQ0UKLU9GIFBVUkNIQVNFIEZPUiBBIFJFRlVORCBPUiwgSUYgU09GVFdBUkUgSVMgQUNDRVNTRUQgRUxFQ1RST05JQ0FMTFksCi1TRUxFQ1QgVEhFICJERUNMSU5FIiAoT1IgIkVYSVQiKSBCVVRUT04gQVQgVEhFIEVORCBPRiBUSElTIEFHUkVFTUVOVC4KLUlGIFlPVSBIQVZFIFNFUEFSQVRFTFkgQUdSRUVEIFRPIExJQ0VOU0UgVEVSTVMgKCJNQVNURVIgVEVSTVMiKSBGT1IKLVlPVVIgTElDRU5TRSBUTyBUSElTIFNPRlRXQVJFLCBUSEVOIFNFQ1RJT05TIDEtNSBPRiBUSElTIEFHUkVFTUVOVAotKCJTVVBQTEVNRU5UQUwgTElDRU5TRSBURVJNUyIpIFNIQUxMIFNVUFBMRU1FTlQgQU5EIFNVUEVSU0VERSBUSEUKLU1BU1RFUiBURVJNUyBJTiBSRUxBVElPTiBUTyBUSElTIFNPRlRXQVJFLgorICAgICAgMi4xLiBUaGUgSW5pdGlhbCBEZXZlbG9wZXIgR3JhbnQuCiAKLTEuICAgICAgRGVmaW5pdGlvbnMuCisgICAgICBDb25kaXRpb25lZCB1cG9uIFlvdXIgY29tcGxpYW5jZSB3aXRoIFNlY3Rpb24gMy4xIGJlbG93IGFuZCBzdWJqZWN0IHRvIHRoaXJkIHBhcnR5IGludGVsbGVjdHVhbCBwcm9wZXJ0eSBjbGFpbXMsIHRoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZ3JhbnRzIFlvdSBhIHdvcmxkLXdpZGUsIHJveWFsdHktZnJlZSwgbm9uLWV4Y2x1c2l2ZSBsaWNlbnNlOgogCi0oYSkgICAgICJFbnRpdGxlbWVudCIgbWVhbnMgdGhlIGNvbGxlY3RpdmUgc2V0IG9mIGFwcGxpY2FibGUgZG9jdW1lbnRzCi1hdXRob3JpemVkIGJ5IFN1biBldmlkZW5jaW5nIHlvdXIgb2JsaWdhdGlvbiB0byBwYXkgYXNzb2NpYXRlZCBmZWVzIChpZgotYW55KSBmb3IgdGhlIGxpY2Vuc2UsIGFzc29jaWF0ZWQgU2VydmljZXMsIGFuZCB0aGUgYXV0aG9yaXplZCBzY29wZSBvZgotdXNlIG9mIFNvZnR3YXJlIHVuZGVyIHRoaXMgQWdyZWVtZW50LgorICAgICAgICAgKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBJbml0aWFsIERldmVsb3BlciwgdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgT3JpZ2luYWwgU29mdHdhcmUgKG9yIHBvcnRpb25zIHRoZXJlb2YpLCB3aXRoIG9yIHdpdGhvdXQgTW9kaWZpY2F0aW9ucywgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCiAKLShiKSAgICAgIkxpY2Vuc2VkIFVuaXQiIG1lYW5zIHRoZSB1bml0IG9mIG1lYXN1cmUgYnkgd2hpY2ggeW91ciB1c2Ugb2YKLVNvZnR3YXJlIGFuZC9vciBTZXJ2aWNlIGlzIGxpY2Vuc2VkLCBhcyBkZXNjcmliZWQgaW4geW91ciBFbnRpdGxlbWVudC4KKyAgICAgICAgIChiKSB1bmRlciBQYXRlbnQgQ2xhaW1zIGluZnJpbmdlZCBieSB0aGUgbWFraW5nLCB1c2luZyBvciBzZWxsaW5nIG9mIE9yaWdpbmFsIFNvZnR3YXJlLCB0byBtYWtlLCBoYXZlIG1hZGUsIHVzZSwgcHJhY3RpY2UsIHNlbGwsIGFuZCBvZmZlciBmb3Igc2FsZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSAob3IgcG9ydGlvbnMgdGhlcmVvZikuCiAKLShjKSAgICAgIlBlcm1pdHRlZCBVc2UiIG1lYW5zIHRoZSBsaWNlbnNlZCBTb2Z0d2FyZSB1c2UocykgYXV0aG9yaXplZAotaW4gdGhpcyBBZ3JlZW1lbnQgYXMgc3BlY2lmaWVkIGluIHlvdXIgRW50aXRsZW1lbnQuIFRoZSBQZXJtaXR0ZWQgVXNlCi1mb3IgYW55IGJ1bmRsZWQgU3VuIHNvZnR3YXJlIG5vdCBzcGVjaWZpZWQgaW4geW91ciBFbnRpdGxlbWVudCB3aWxsIGJlCi1ldmFsdWF0aW9uIHVzZSBhcyBwcm92aWRlZCBpbiBTZWN0aW9uIDMuCisgICAgICAgIChjKSBUaGUgbGljZW5zZXMgZ3JhbnRlZCBpbiBTZWN0aW9ucyAyLjEoYSkgYW5kIChiKSBhcmUgZWZmZWN0aXZlIG9uIHRoZSBkYXRlIEluaXRpYWwgRGV2ZWxvcGVyIGZpcnN0IGRpc3RyaWJ1dGVzIG9yIG90aGVyd2lzZSBtYWtlcyB0aGUgT3JpZ2luYWwgU29mdHdhcmUgYXZhaWxhYmxlIHRvIGEgdGhpcmQgcGFydHkgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgICAgICAoZCkgTm90d2l0aHN0YW5kaW5nIFNlY3Rpb24gMi4xKGIpIGFib3ZlLCBubyBwYXRlbnQgbGljZW5zZSBpcyBncmFudGVkOiAoMSkgZm9yIGNvZGUgdGhhdCBZb3UgZGVsZXRlIGZyb20gdGhlIE9yaWdpbmFsIFNvZnR3YXJlLCBvciAoMikgZm9yIGluZnJpbmdlbWVudHMgY2F1c2VkIGJ5OiAoaSkgdGhlIG1vZGlmaWNhdGlvbiBvZiB0aGUgT3JpZ2luYWwgU29mdHdhcmUsIG9yIChpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBTb2Z0d2FyZSB3aXRoIG90aGVyIHNvZnR3YXJlIG9yIGRldmljZXMuCisKKyAgICAyLjIuIENvbnRyaWJ1dG9yIEdyYW50LgorCisgICAgQ29uZGl0aW9uZWQgdXBvbiBZb3VyIGNvbXBsaWFuY2Ugd2l0aCBTZWN0aW9uIDMuMSBiZWxvdyBhbmQgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zLCBlYWNoIENvbnRyaWJ1dG9yIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2U6CisKKyAgICAgICAgKGEpIHVuZGVyIGludGVsbGVjdHVhbCBwcm9wZXJ0eSByaWdodHMgKG90aGVyIHRoYW4gcGF0ZW50IG9yIHRyYWRlbWFyaykgTGljZW5zYWJsZSBieSBDb250cmlidXRvciB0byB1c2UsIHJlcHJvZHVjZSwgbW9kaWZ5LCBkaXNwbGF5LCBwZXJmb3JtLCBzdWJsaWNlbnNlIGFuZCBkaXN0cmlidXRlIHRoZSBNb2RpZmljYXRpb25zIGNyZWF0ZWQgYnkgc3VjaCBDb250cmlidXRvciAob3IgcG9ydGlvbnMgdGhlcmVvZiksIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIGFzIENvdmVyZWQgU29mdHdhcmUgYW5kL29yIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yazsgYW5kCisKKyAgICAgICAgKGIpIHVuZGVyIFBhdGVudCBDbGFpbXMgaW5mcmluZ2VkIGJ5IHRoZSBtYWtpbmcsIHVzaW5nLCBvciBzZWxsaW5nIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIGVpdGhlciBhbG9uZSBhbmQvb3IgaW4gY29tYmluYXRpb24gd2l0aCBpdHMgQ29udHJpYnV0b3IgVmVyc2lvbiAob3IgcG9ydGlvbnMgb2Ygc3VjaCBjb21iaW5hdGlvbiksIHRvIG1ha2UsIHVzZSwgc2VsbCwgb2ZmZXIgZm9yIHNhbGUsIGhhdmUgbWFkZSwgYW5kL29yIG90aGVyd2lzZSBkaXNwb3NlIG9mOiAoMSkgTW9kaWZpY2F0aW9ucyBtYWRlIGJ5IHRoYXQgQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpOyBhbmQgKDIpIHRoZSBjb21iaW5hdGlvbiBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvciB3aXRoIGl0cyBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyBvZiBzdWNoIGNvbWJpbmF0aW9uKS4KKworICAgICAgICAoYykgVGhlIGxpY2Vuc2VzIGdyYW50ZWQgaW4gU2VjdGlvbnMgMi4yKGEpIGFuZCAyLjIoYikgYXJlIGVmZmVjdGl2ZSBvbiB0aGUgZGF0ZSBDb250cmlidXRvciBmaXJzdCBkaXN0cmlidXRlcyBvciBvdGhlcndpc2UgbWFrZXMgdGhlIE1vZGlmaWNhdGlvbnMgYXZhaWxhYmxlIHRvIGEgdGhpcmQgcGFydHkuCisKKyAgICAgICAgKGQpIE5vdHdpdGhzdGFuZGluZyBTZWN0aW9uIDIuMihiKSBhYm92ZSwgbm8gcGF0ZW50IGxpY2Vuc2UgaXMgZ3JhbnRlZDogKDEpIGZvciBhbnkgY29kZSB0aGF0IENvbnRyaWJ1dG9yIGhhcyBkZWxldGVkIGZyb20gdGhlIENvbnRyaWJ1dG9yIFZlcnNpb247ICgyKSBmb3IgaW5mcmluZ2VtZW50cyBjYXVzZWQgYnk6IChpKSB0aGlyZCBwYXJ0eSBtb2RpZmljYXRpb25zIG9mIENvbnRyaWJ1dG9yIFZlcnNpb24sIG9yIChpaSkgdGhlIGNvbWJpbmF0aW9uIG9mIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IENvbnRyaWJ1dG9yIHdpdGggb3RoZXIgc29mdHdhcmUgKGV4Y2VwdCBhcyBwYXJ0IG9mIHRoZSBDb250cmlidXRvciBWZXJzaW9uKSBvciBvdGhlciBkZXZpY2VzOyBvciAoMykgdW5kZXIgUGF0ZW50IENsYWltcyBpbmZyaW5nZWQgYnkgQ292ZXJlZCBTb2Z0d2FyZSBpbiB0aGUgYWJzZW5jZSBvZiBNb2RpZmljYXRpb25zIG1hZGUgYnkgdGhhdCBDb250cmlidXRvci4KKworMy4gRGlzdHJpYnV0aW9uIE9ibGlnYXRpb25zLgorCisgICAgICAzLjEuIEF2YWlsYWJpbGl0eSBvZiBTb3VyY2UgQ29kZS4KKyAgICAgIEFueSBDb3ZlcmVkIFNvZnR3YXJlIHRoYXQgWW91IGRpc3RyaWJ1dGUgb3Igb3RoZXJ3aXNlIG1ha2UgYXZhaWxhYmxlIGluIEV4ZWN1dGFibGUgZm9ybSBtdXN0IGFsc28gYmUgbWFkZSBhdmFpbGFibGUgaW4gU291cmNlIENvZGUgZm9ybSBhbmQgdGhhdCBTb3VyY2UgQ29kZSBmb3JtIG11c3QgYmUgZGlzdHJpYnV0ZWQgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLiBZb3UgbXVzdCBpbmNsdWRlIGEgY29weSBvZiB0aGlzIExpY2Vuc2Ugd2l0aCBldmVyeSBjb3B5IG9mIHRoZSBTb3VyY2UgQ29kZSBmb3JtIG9mIHRoZSBDb3ZlcmVkIFNvZnR3YXJlIFlvdSBkaXN0cmlidXRlIG9yIG90aGVyd2lzZSBtYWtlIGF2YWlsYWJsZS4gWW91IG11c3QgaW5mb3JtIHJlY2lwaWVudHMgb2YgYW55IHN1Y2ggQ292ZXJlZCBTb2Z0d2FyZSBpbiBFeGVjdXRhYmxlIGZvcm0gYXMgdG8gaG93IHRoZXkgY2FuIG9idGFpbiBzdWNoIENvdmVyZWQgU29mdHdhcmUgaW4gU291cmNlIENvZGUgZm9ybSBpbiBhIHJlYXNvbmFibGUgbWFubmVyIG9uIG9yIHRocm91Z2ggYSBtZWRpdW0gY3VzdG9tYXJpbHkgdXNlZCBmb3Igc29mdHdhcmUgZXhjaGFuZ2UuCisKKyAgICAgIDMuMi4gTW9kaWZpY2F0aW9ucy4KKyAgICAgIFRoZSBNb2RpZmljYXRpb25zIHRoYXQgWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gWW91IHJlcHJlc2VudCB0aGF0IFlvdSBiZWxpZXZlIFlvdXIgTW9kaWZpY2F0aW9ucyBhcmUgWW91ciBvcmlnaW5hbCBjcmVhdGlvbihzKSBhbmQvb3IgWW91IGhhdmUgc3VmZmljaWVudCByaWdodHMgdG8gZ3JhbnQgdGhlIHJpZ2h0cyBjb252ZXllZCBieSB0aGlzIExpY2Vuc2UuCisKKyAgICAgIDMuMy4gUmVxdWlyZWQgTm90aWNlcy4KKyAgICAgIFlvdSBtdXN0IGluY2x1ZGUgYSBub3RpY2UgaW4gZWFjaCBvZiBZb3VyIE1vZGlmaWNhdGlvbnMgdGhhdCBpZGVudGlmaWVzIFlvdSBhcyB0aGUgQ29udHJpYnV0b3Igb2YgdGhlIE1vZGlmaWNhdGlvbi4gWW91IG1heSBub3QgcmVtb3ZlIG9yIGFsdGVyIGFueSBjb3B5cmlnaHQsIHBhdGVudCBvciB0cmFkZW1hcmsgbm90aWNlcyBjb250YWluZWQgd2l0aGluIHRoZSBDb3ZlcmVkIFNvZnR3YXJlLCBvciBhbnkgbm90aWNlcyBvZiBsaWNlbnNpbmcgb3IgYW55IGRlc2NyaXB0aXZlIHRleHQgZ2l2aW5nIGF0dHJpYnV0aW9uIHRvIGFueSBDb250cmlidXRvciBvciB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuCisKKyAgICAgIDMuNC4gQXBwbGljYXRpb24gb2YgQWRkaXRpb25hbCBUZXJtcy4KKyAgICAgIFlvdSBtYXkgbm90IG9mZmVyIG9yIGltcG9zZSBhbnkgdGVybXMgb24gYW55IENvdmVyZWQgU29mdHdhcmUgaW4gU291cmNlIENvZGUgZm9ybSB0aGF0IGFsdGVycyBvciByZXN0cmljdHMgdGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHMuIHJpZ2h0cyBoZXJldW5kZXIuIFlvdSBtYXkgY2hvb3NlIHRvIG9mZmVyLCBhbmQgdG8gY2hhcmdlIGEgZmVlIGZvciwgd2FycmFudHksIHN1cHBvcnQsIGluZGVtbml0eSBvciBsaWFiaWxpdHkgb2JsaWdhdGlvbnMgdG8gb25lIG9yIG1vcmUgcmVjaXBpZW50cyBvZiBDb3ZlcmVkIFNvZnR3YXJlLiBIb3dldmVyLCB5b3UgbWF5IGRvIHNvIG9ubHkgb24gWW91ciBvd24gYmVoYWxmLCBhbmQgbm90IG9uIGJlaGFsZiBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzIG9mZmVyZWQgYnkgWW91IGFsb25lLCBhbmQgWW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSB0ZXJtcyBZb3Ugb2ZmZXIuCisKKyAgICAgIDMuNS4gRGlzdHJpYnV0aW9uIG9mIEV4ZWN1dGFibGUgVmVyc2lvbnMuCisgICAgICBZb3UgbWF5IGRpc3RyaWJ1dGUgdGhlIEV4ZWN1dGFibGUgZm9ybSBvZiB0aGUgQ292ZXJlZCBTb2Z0d2FyZSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIHVuZGVyIHRoZSB0ZXJtcyBvZiBhIGxpY2Vuc2Ugb2YgWW91ciBjaG9pY2UsIHdoaWNoIG1heSBjb250YWluIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgdGhhdCBZb3UgYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGF0IHRoZSBsaWNlbnNlIGZvciB0aGUgRXhlY3V0YWJsZSBmb3JtIGRvZXMgbm90IGF0dGVtcHQgdG8gbGltaXQgb3IgYWx0ZXIgdGhlIHJlY2lwaWVudC5zIHJpZ2h0cyBpbiB0aGUgU291cmNlIENvZGUgZm9ybSBmcm9tIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIHRoaXMgTGljZW5zZS4gSWYgWW91IGRpc3RyaWJ1dGUgdGhlIENvdmVyZWQgU29mdHdhcmUgaW4gRXhlY3V0YWJsZSBmb3JtIHVuZGVyIGEgZGlmZmVyZW50IGxpY2Vuc2UsIFlvdSBtdXN0IG1ha2UgaXQgYWJzb2x1dGVseSBjbGVhciB0aGF0IGFueSB0ZXJtcyB3aGljaCBkaWZmZXIgZnJvbSB0aGlzIExpY2Vuc2UgYXJlIG9mZmVyZWQgYnkgWW91IGFsb25lLCBub3QgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIENvbnRyaWJ1dG9yLiBZb3UgaGVyZWJ5IGFncmVlIHRvIGluZGVtbmlmeSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgYW5kIGV2ZXJ5IENvbnRyaWJ1dG9yIGZvciBhbnkgbGlhYmlsaXR5IGluY3VycmVkIGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBzdWNoIENvbnRyaWJ1dG9yIGFzIGEgcmVzdWx0IG9mIGFueSBzdWNoIHRlcm1zIFlvdSBvZmZlci4KKworICAgICAgMy42LiBMYXJnZXIgV29ya3MuCisgICAgICBZb3UgbWF5IGNyZWF0ZSBhIExhcmdlciBXb3JrIGJ5IGNvbWJpbmluZyBDb3ZlcmVkIFNvZnR3YXJlIHdpdGggb3RoZXIgY29kZSBub3QgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTGFyZ2VyIFdvcmsgYXMgYSBzaW5nbGUgcHJvZHVjdC4gSW4gc3VjaCBhIGNhc2UsIFlvdSBtdXN0IG1ha2Ugc3VyZSB0aGUgcmVxdWlyZW1lbnRzIG9mIHRoaXMgTGljZW5zZSBhcmUgZnVsZmlsbGVkIGZvciB0aGUgQ292ZXJlZCBTb2Z0d2FyZS4KKworNC4gVmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UuCisKKyAgICAgIDQuMS4gTmV3IFZlcnNpb25zLgorICAgICAgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBpcyB0aGUgaW5pdGlhbCBsaWNlbnNlIHN0ZXdhcmQgYW5kIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGlzIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIEV4Y2VwdCBhcyBwcm92aWRlZCBpbiBTZWN0aW9uIDQuMywgbm8gb25lIG90aGVyIHRoYW4gdGhlIGxpY2Vuc2Ugc3Rld2FyZCBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGlzIExpY2Vuc2UuCisKKyAgICAgIDQuMi4gRWZmZWN0IG9mIE5ldyBWZXJzaW9ucy4KKyAgICAgIFlvdSBtYXkgYWx3YXlzIGNvbnRpbnVlIHRvIHVzZSwgZGlzdHJpYnV0ZSBvciBvdGhlcndpc2UgbWFrZSB0aGUgQ292ZXJlZCBTb2Z0d2FyZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHVuZGVyIHdoaWNoIFlvdSBvcmlnaW5hbGx5IHJlY2VpdmVkIHRoZSBDb3ZlcmVkIFNvZnR3YXJlLiBJZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaW5jbHVkZXMgYSBub3RpY2UgaW4gdGhlIE9yaWdpbmFsIFNvZnR3YXJlIHByb2hpYml0aW5nIGl0IGZyb20gYmVpbmcgZGlzdHJpYnV0ZWQgb3Igb3RoZXJ3aXNlIG1hZGUgYXZhaWxhYmxlIHVuZGVyIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UsIFlvdSBtdXN0IGRpc3RyaWJ1dGUgYW5kIG1ha2UgdGhlIENvdmVyZWQgU29mdHdhcmUgYXZhaWxhYmxlIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSB1bmRlciB3aGljaCBZb3Ugb3JpZ2luYWxseSByZWNlaXZlZCB0aGUgQ292ZXJlZCBTb2Z0d2FyZS4gT3RoZXJ3aXNlLCBZb3UgbWF5IGFsc28gY2hvb3NlIHRvIHVzZSwgZGlzdHJpYnV0ZSBvciBvdGhlcndpc2UgbWFrZSB0aGUgQ292ZXJlZCBTb2Z0d2FyZSBhdmFpbGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIGFueSBzdWJzZXF1ZW50IHZlcnNpb24gb2YgdGhlIExpY2Vuc2UgcHVibGlzaGVkIGJ5IHRoZSBsaWNlbnNlIHN0ZXdhcmQuCisKKyAgICAgIDQuMy4gTW9kaWZpZWQgVmVyc2lvbnMuCisgICAgICBXaGVuIFlvdSBhcmUgYW4gSW5pdGlhbCBEZXZlbG9wZXIgYW5kIFlvdSB3YW50IHRvIGNyZWF0ZSBhIG5ldyBsaWNlbnNlIGZvciBZb3VyIE9yaWdpbmFsIFNvZnR3YXJlLCBZb3UgbWF5IGNyZWF0ZSBhbmQgdXNlIGEgbW9kaWZpZWQgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2UgaWYgWW91OiAoYSkgcmVuYW1lIHRoZSBsaWNlbnNlIGFuZCByZW1vdmUgYW55IHJlZmVyZW5jZXMgdG8gdGhlIG5hbWUgb2YgdGhlIGxpY2Vuc2Ugc3Rld2FyZCAoZXhjZXB0IHRvIG5vdGUgdGhhdCB0aGUgbGljZW5zZSBkaWZmZXJzIGZyb20gdGhpcyBMaWNlbnNlKTsgYW5kIChiKSBvdGhlcndpc2UgbWFrZSBpdCBjbGVhciB0aGF0IHRoZSBsaWNlbnNlIGNvbnRhaW5zIHRlcm1zIHdoaWNoIGRpZmZlciBmcm9tIHRoaXMgTGljZW5zZS4KKworNS4gRElTQ0xBSU1FUiBPRiBXQVJSQU5UWS4KKworICAgQ09WRVJFRCBTT0ZUV0FSRSBJUyBQUk9WSURFRCBVTkRFUiBUSElTIExJQ0VOU0UgT04gQU4gLkFTIElTLiBCQVNJUywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgV0FSUkFOVElFUyBUSEFUIFRIRSBDT1ZFUkVEIFNPRlRXQVJFIElTIEZSRUUgT0YgREVGRUNUUywgTUVSQ0hBTlRBQkxFLCBGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HSU5HLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBDT1ZFUkVEIFNPRlRXQVJFIElTIFdJVEggWU9VLiBTSE9VTEQgQU5ZIENPVkVSRUQgU09GVFdBUkUgUFJPVkUgREVGRUNUSVZFIElOIEFOWSBSRVNQRUNULCBZT1UgKE5PVCBUSEUgSU5JVElBTCBERVZFTE9QRVIgT1IgQU5ZIE9USEVSIENPTlRSSUJVVE9SKSBBU1NVTUUgVEhFIENPU1QgT0YgQU5ZIE5FQ0VTU0FSWSBTRVJWSUNJTkcsIFJFUEFJUiBPUiBDT1JSRUNUSU9OLiBUSElTIERJU0NMQUlNRVIgT0YgV0FSUkFOVFkgQ09OU1RJVFVURVMgQU4gRVNTRU5USUFMIFBBUlQgT0YgVEhJUyBMSUNFTlNFLiBOTyBVU0UgT0YgQU5ZIENPVkVSRUQgU09GVFdBUkUgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi4KKworNi4gVEVSTUlOQVRJT04uCisKKyAgICAgIDYuMS4gVGhpcyBMaWNlbnNlIGFuZCB0aGUgcmlnaHRzIGdyYW50ZWQgaGVyZXVuZGVyIHdpbGwgdGVybWluYXRlIGF1dG9tYXRpY2FsbHkgaWYgWW91IGZhaWwgdG8gY29tcGx5IHdpdGggdGVybXMgaGVyZWluIGFuZCBmYWlsIHRvIGN1cmUgc3VjaCBicmVhY2ggd2l0aGluIDMwIGRheXMgb2YgYmVjb21pbmcgYXdhcmUgb2YgdGhlIGJyZWFjaC4gUHJvdmlzaW9ucyB3aGljaCwgYnkgdGhlaXIgbmF0dXJlLCBtdXN0IHJlbWFpbiBpbiBlZmZlY3QgYmV5b25kIHRoZSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2Ugc2hhbGwgc3Vydml2ZS4KKworICAgICAgNi4yLiBJZiBZb3UgYXNzZXJ0IGEgcGF0ZW50IGluZnJpbmdlbWVudCBjbGFpbSAoZXhjbHVkaW5nIGRlY2xhcmF0b3J5IGp1ZGdtZW50IGFjdGlvbnMpIGFnYWluc3QgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYSBDb250cmlidXRvciAodGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIENvbnRyaWJ1dG9yIGFnYWluc3Qgd2hvbSBZb3UgYXNzZXJ0IHN1Y2ggY2xhaW0gaXMgcmVmZXJyZWQgdG8gYXMgLlBhcnRpY2lwYW50LikgYWxsZWdpbmcgdGhhdCB0aGUgUGFydGljaXBhbnQgU29mdHdhcmUgKG1lYW5pbmcgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gd2hlcmUgdGhlIFBhcnRpY2lwYW50IGlzIGEgQ29udHJpYnV0b3Igb3IgdGhlIE9yaWdpbmFsIFNvZnR3YXJlIHdoZXJlIHRoZSBQYXJ0aWNpcGFudCBpcyB0aGUgSW5pdGlhbCBEZXZlbG9wZXIpIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgaW5mcmluZ2VzIGFueSBwYXRlbnQsIHRoZW4gYW55IGFuZCBhbGwgcmlnaHRzIGdyYW50ZWQgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0byBZb3UgYnkgc3VjaCBQYXJ0aWNpcGFudCwgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIChpZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgaXMgbm90IHRoZSBQYXJ0aWNpcGFudCkgYW5kIGFsbCBDb250cmlidXRvcnMgdW5kZXIgU2VjdGlvbnMgMi4xIGFuZC9vciAyLjIgb2YgdGhpcyBMaWNlbnNlIHNoYWxsLCB1cG9uIDYwIGRheXMgbm90aWNlIGZyb20gUGFydGljaXBhbnQgdGVybWluYXRlIHByb3NwZWN0aXZlbHkgYW5kIGF1dG9tYXRpY2FsbHkgYXQgdGhlIGV4cGlyYXRpb24gb2Ygc3VjaCA2MCBkYXkgbm90aWNlIHBlcmlvZCwgdW5sZXNzIGlmIHdpdGhpbiBzdWNoIDYwIGRheSBwZXJpb2QgWW91IHdpdGhkcmF3IFlvdXIgY2xhaW0gd2l0aCByZXNwZWN0IHRvIHRoZSBQYXJ0aWNpcGFudCBTb2Z0d2FyZSBhZ2FpbnN0IHN1Y2ggUGFydGljaXBhbnQgZWl0aGVyIHVuaWxhdGVyYWxseSBvciBwdXJzdWFudCB0byBhIHdyaXR0ZW4gYWdyZWVtZW50IHdpdGggUGFydGljaXBhbnQuCisKKyAgICAgIDYuMy4gSW4gdGhlIGV2ZW50IG9mIHRlcm1pbmF0aW9uIHVuZGVyIFNlY3Rpb25zIDYuMSBvciA2LjIgYWJvdmUsIGFsbCBlbmQgdXNlciBsaWNlbnNlcyB0aGF0IGhhdmUgYmVlbiB2YWxpZGx5IGdyYW50ZWQgYnkgWW91IG9yIGFueSBkaXN0cmlidXRvciBoZXJldW5kZXIgcHJpb3IgdG8gdGVybWluYXRpb24gKGV4Y2x1ZGluZyBsaWNlbnNlcyBncmFudGVkIHRvIFlvdSBieSBhbnkgZGlzdHJpYnV0b3IpIHNoYWxsIHN1cnZpdmUgdGVybWluYXRpb24uCisKKzcuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLgorCisgICBVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBZT1UsIFRIRSBJTklUSUFMIERFVkVMT1BFUiwgQU5ZIE9USEVSIENPTlRSSUJVVE9SLCBPUiBBTlkgRElTVFJJQlVUT1IgT0YgQ09WRVJFRCBTT0ZUV0FSRSwgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBBTlkgUEVSU09OIEZPUiBBTlkgSU5ESVJFQ1QsIFNQRUNJQUwsIElOQ0lERU5UQUwsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPRiBBTlkgQ0hBUkFDVEVSIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBEQU1BR0VTIEZPUiBMT1NUIFBST0ZJVFMsIExPU1MgT0YgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSIEZBSUxVUkUgT1IgTUFMRlVOQ1RJT04sIE9SIEFOWSBBTkQgQUxMIE9USEVSIENPTU1FUkNJQUwgREFNQUdFUyBPUiBMT1NTRVMsIEVWRU4gSUYgU1VDSCBQQVJUWSBTSEFMTCBIQVZFIEJFRU4gSU5GT1JNRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gVEhJUyBMSU1JVEFUSU9OIE9GIExJQUJJTElUWSBTSEFMTCBOT1QgQVBQTFkgVE8gTElBQklMSVRZIEZPUiBERUFUSCBPUiBQRVJTT05BTCBJTkpVUlkgUkVTVUxUSU5HIEZST00gU1VDSCBQQVJUWS5TIE5FR0xJR0VOQ0UgVE8gVEhFIEVYVEVOVCBBUFBMSUNBQkxFIExBVyBQUk9ISUJJVFMgU1VDSCBMSU1JVEFUSU9OLiBTT01FIEpVUklTRElDVElPTlMgRE8gTk9UIEFMTE9XIFRIRSBFWENMVVNJT04gT1IgTElNSVRBVElPTiBPRiBJTkNJREVOVEFMIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUywgU08gVEhJUyBFWENMVVNJT04gQU5EIExJTUlUQVRJT04gTUFZIE5PVCBBUFBMWSBUTyBZT1UuCisKKzguIFUuUy4gR09WRVJOTUVOVCBFTkQgVVNFUlMuCisKKyAgIFRoZSBDb3ZlcmVkIFNvZnR3YXJlIGlzIGEgLmNvbW1lcmNpYWwgaXRlbSwuIGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGluIDQ4IEMuRi5SLiAyLjEwMSAoT2N0LiAxOTk1KSwgY29uc2lzdGluZyBvZiAuY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZS4gKGFzIHRoYXQgdGVybSBpcyBkZWZpbmVkIGF0IDQ4IEMuRi5SLiC6IDI1Mi4yMjctNzAxNChhKSgxKSkgYW5kIC5jb21tZXJjaWFsIGNvbXB1dGVyIHNvZnR3YXJlIGRvY3VtZW50YXRpb24uIGFzIHN1Y2ggdGVybXMgYXJlIHVzZWQgaW4gNDggQy5GLlIuIDEyLjIxMiAoU2VwdC4gMTk5NSkuIENvbnNpc3RlbnQgd2l0aCA0OCBDLkYuUi4gMTIuMjEyIGFuZCA0OCBDLkYuUi4gMjI3LjcyMDItMSB0aHJvdWdoIDIyNy43MjAyLTQgKEp1bmUgMTk5NSksIGFsbCBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzIGFjcXVpcmUgQ292ZXJlZCBTb2Z0d2FyZSB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIHNldCBmb3J0aCBoZXJlaW4uIFRoaXMgVS5TLiBHb3Zlcm5tZW50IFJpZ2h0cyBjbGF1c2UgaXMgaW4gbGlldSBvZiwgYW5kIHN1cGVyc2VkZXMsIGFueSBvdGhlciBGQVIsIERGQVIsIG9yIG90aGVyIGNsYXVzZSBvciBwcm92aXNpb24gdGhhdCBhZGRyZXNzZXMgR292ZXJubWVudCByaWdodHMgaW4gY29tcHV0ZXIgc29mdHdhcmUgdW5kZXIgdGhpcyBMaWNlbnNlLgorCis5LiBNSVNDRUxMQU5FT1VTLgorCisgICBUaGlzIExpY2Vuc2UgcmVwcmVzZW50cyB0aGUgY29tcGxldGUgYWdyZWVtZW50IGNvbmNlcm5pbmcgc3ViamVjdCBtYXR0ZXIgaGVyZW9mLiBJZiBhbnkgcHJvdmlzaW9uIG9mIHRoaXMgTGljZW5zZSBpcyBoZWxkIHRvIGJlIHVuZW5mb3JjZWFibGUsIHN1Y2ggcHJvdmlzaW9uIHNoYWxsIGJlIHJlZm9ybWVkIG9ubHkgdG8gdGhlIGV4dGVudCBuZWNlc3NhcnkgdG8gbWFrZSBpdCBlbmZvcmNlYWJsZS4gVGhpcyBMaWNlbnNlIHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXcgb2YgdGhlIGp1cmlzZGljdGlvbiBzcGVjaWZpZWQgaW4gYSBub3RpY2UgY29udGFpbmVkIHdpdGhpbiB0aGUgT3JpZ2luYWwgU29mdHdhcmUgKGV4Y2VwdCB0byB0aGUgZXh0ZW50IGFwcGxpY2FibGUgbGF3LCBpZiBhbnksIHByb3ZpZGVzIG90aGVyd2lzZSksIGV4Y2x1ZGluZyBzdWNoIGp1cmlzZGljdGlvbi5zIGNvbmZsaWN0LW9mLWxhdyBwcm92aXNpb25zLiBBbnkgbGl0aWdhdGlvbiByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBjb3VydHMgbG9jYXRlZCBpbiB0aGUganVyaXNkaWN0aW9uIGFuZCB2ZW51ZSBzcGVjaWZpZWQgaW4gYSBub3RpY2UgY29udGFpbmVkIHdpdGhpbiB0aGUgT3JpZ2luYWwgU29mdHdhcmUsIHdpdGggdGhlIGxvc2luZyBwYXJ0eSByZXNwb25zaWJsZSBmb3IgY29zdHMsIGluY2x1ZGluZywgd2l0aG91dCBsaW1pdGF0aW9uLCBjb3VydCBjb3N0cyBhbmQgcmVhc29uYWJsZSBhdHRvcm5leXMuIGZlZXMgYW5kIGV4cGVuc2VzLiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZCBOYXRpb25zIENvbnZlbnRpb24gb24gQ29udHJhY3RzIGZvciB0aGUgSW50ZXJuYXRpb25hbCBTYWxlIG9mIEdvb2RzIGlzIGV4cHJlc3NseSBleGNsdWRlZC4gQW55IGxhdyBvciByZWd1bGF0aW9uIHdoaWNoIHByb3ZpZGVzIHRoYXQgdGhlIGxhbmd1YWdlIG9mIGEgY29udHJhY3Qgc2hhbGwgYmUgY29uc3RydWVkIGFnYWluc3QgdGhlIGRyYWZ0ZXIgc2hhbGwgbm90IGFwcGx5IHRvIHRoaXMgTGljZW5zZS4gWW91IGFncmVlIHRoYXQgWW91IGFsb25lIGFyZSByZXNwb25zaWJsZSBmb3IgY29tcGxpYW5jZSB3aXRoIHRoZSBVbml0ZWQgU3RhdGVzIGV4cG9ydCBhZG1pbmlzdHJhdGlvbiByZWd1bGF0aW9ucyAoYW5kIHRoZSBleHBvcnQgY29udHJvbCBsYXdzIGFuZCByZWd1bGF0aW9uIG9mIGFueSBvdGhlciBjb3VudHJpZXMpIHdoZW4gWW91IHVzZSwgZGlzdHJpYnV0ZSBvciBvdGhlcndpc2UgbWFrZSBhdmFpbGFibGUgYW55IENvdmVyZWQgU29mdHdhcmUuCisKKzEwLiBSRVNQT05TSUJJTElUWSBGT1IgQ0xBSU1TLgorCisgICBBcyBiZXR3ZWVuIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCB0aGUgQ29udHJpYnV0b3JzLCBlYWNoIHBhcnR5IGlzIHJlc3BvbnNpYmxlIGZvciBjbGFpbXMgYW5kIGRhbWFnZXMgYXJpc2luZywgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSwgb3V0IG9mIGl0cyB1dGlsaXphdGlvbiBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlIGFuZCBZb3UgYWdyZWUgdG8gd29yayB3aXRoIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBDb250cmlidXRvcnMgdG8gZGlzdHJpYnV0ZSBzdWNoIHJlc3BvbnNpYmlsaXR5IG9uIGFuIGVxdWl0YWJsZSBiYXNpcy4gTm90aGluZyBoZXJlaW4gaXMgaW50ZW5kZWQgb3Igc2hhbGwgYmUgZGVlbWVkIHRvIGNvbnN0aXR1dGUgYW55IGFkbWlzc2lvbiBvZiBsaWFiaWxpdHkuCisKKyAgIE5PVElDRSBQVVJTVUFOVCBUTyBTRUNUSU9OIDkgT0YgVEhFIENPTU1PTiBERVZFTE9QTUVOVCBBTkQgRElTVFJJQlVUSU9OIExJQ0VOU0UgKENEREwpCisKKyAgIFRoZSBjb2RlIHJlbGVhc2VkIHVuZGVyIHRoZSBDRERMIHNoYWxsIGJlIGdvdmVybmVkIGJ5IHRoZSBsYXdzIG9mIHRoZSBTdGF0ZSBvZiBDYWxpZm9ybmlhIChleGNsdWRpbmcgY29uZmxpY3Qtb2YtbGF3IHByb3Zpc2lvbnMpLiBBbnkgbGl0aWdhdGlvbiByZWxhdGluZyB0byB0aGlzIExpY2Vuc2Ugc2hhbGwgYmUgc3ViamVjdCB0byB0aGUganVyaXNkaWN0aW9uIG9mIHRoZSBGZWRlcmFsIENvdXJ0cyBvZiB0aGUgTm9ydGhlcm4gRGlzdHJpY3Qgb2YgQ2FsaWZvcm5pYSBhbmQgdGhlIHN0YXRlIGNvdXJ0cyBvZiB0aGUgU3RhdGUgb2YgQ2FsaWZvcm5pYSwgd2l0aCB2ZW51ZSBseWluZyBpbiBTYW50YSBDbGFyYSBDb3VudHksIENhbGlmb3JuaWEuCisKKworVGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIChHUEwpIFZlcnNpb24gMiwgSnVuZSAxOTkxCisKKworQ29weXJpZ2h0IChDKSAxOTg5LCAxOTkxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorCitFdmVyeW9uZSBpcyBwZXJtaXR0ZWQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB2ZXJiYXRpbSBjb3BpZXMgb2YgdGhpcyBsaWNlbnNlIGRvY3VtZW50LCBidXQgY2hhbmdpbmcgaXQgaXMgbm90IGFsbG93ZWQuCisKK1ByZWFtYmxlCisKK1RoZSBsaWNlbnNlcyBmb3IgbW9zdCBzb2Z0d2FyZSBhcmUgZGVzaWduZWQgdG8gdGFrZSBhd2F5IHlvdXIgZnJlZWRvbSB0byBzaGFyZSBhbmQgY2hhbmdlIGl0LiBCeSBjb250cmFzdCwgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGludGVuZGVkIHRvIGd1YXJhbnRlZSB5b3VyIGZyZWVkb20gdG8gc2hhcmUgYW5kIGNoYW5nZSBmcmVlIHNvZnR3YXJlLS10byBtYWtlIHN1cmUgdGhlIHNvZnR3YXJlIGlzIGZyZWUgZm9yIGFsbCBpdHMgdXNlcnMuIFRoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcHBsaWVzIHRvIG1vc3Qgb2YgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbidzIHNvZnR3YXJlIGFuZCB0byBhbnkgb3RoZXIgcHJvZ3JhbSB3aG9zZSBhdXRob3JzIGNvbW1pdCB0byB1c2luZyBpdC4gKFNvbWUgb3RoZXIgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIHNvZnR3YXJlIGlzIGNvdmVyZWQgYnkgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgaW5zdGVhZC4pIFlvdSBjYW4gYXBwbHkgaXQgdG8geW91ciBwcm9ncmFtcywgdG9vLgorCitXaGVuIHdlIHNwZWFrIG9mIGZyZWUgc29mdHdhcmUsIHdlIGFyZSByZWZlcnJpbmcgdG8gZnJlZWRvbSwgbm90IHByaWNlLiBPdXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZXMgYXJlIGRlc2lnbmVkIHRvIG1ha2Ugc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSBmcmVlZG9tIHRvIGRpc3RyaWJ1dGUgY29waWVzIG9mIGZyZWUgc29mdHdhcmUgKGFuZCBjaGFyZ2UgZm9yIHRoaXMgc2VydmljZSBpZiB5b3Ugd2lzaCksIHRoYXQgeW91IHJlY2VpdmUgc291cmNlIGNvZGUgb3IgY2FuIGdldCBpdCBpZiB5b3Ugd2FudCBpdCwgdGhhdCB5b3UgY2FuIGNoYW5nZSB0aGUgc29mdHdhcmUgb3IgdXNlIHBpZWNlcyBvZiBpdCBpbiBuZXcgZnJlZSBwcm9ncmFtczsgYW5kIHRoYXQgeW91IGtub3cgeW91IGNhbiBkbyB0aGVzZSB0aGluZ3MuCisKK1RvIHByb3RlY3QgeW91ciByaWdodHMsIHdlIG5lZWQgdG8gbWFrZSByZXN0cmljdGlvbnMgdGhhdCBmb3JiaWQgYW55b25lIHRvIGRlbnkgeW91IHRoZXNlIHJpZ2h0cyBvciB0byBhc2sgeW91IHRvIHN1cnJlbmRlciB0aGUgcmlnaHRzLiBUaGVzZSByZXN0cmljdGlvbnMgdHJhbnNsYXRlIHRvIGNlcnRhaW4gcmVzcG9uc2liaWxpdGllcyBmb3IgeW91IGlmIHlvdSBkaXN0cmlidXRlIGNvcGllcyBvZiB0aGUgc29mdHdhcmUsIG9yIGlmIHlvdSBtb2RpZnkgaXQuCisKK0ZvciBleGFtcGxlLCBpZiB5b3UgZGlzdHJpYnV0ZSBjb3BpZXMgb2Ygc3VjaCBhIHByb2dyYW0sIHdoZXRoZXIgZ3JhdGlzIG9yIGZvciBhIGZlZSwgeW91IG11c3QgZ2l2ZSB0aGUgcmVjaXBpZW50cyBhbGwgdGhlIHJpZ2h0cyB0aGF0IHlvdSBoYXZlLiBZb3UgbXVzdCBtYWtlIHN1cmUgdGhhdCB0aGV5LCB0b28sIHJlY2VpdmUgb3IgY2FuIGdldCB0aGUgc291cmNlIGNvZGUuIEFuZCB5b3UgbXVzdCBzaG93IHRoZW0gdGhlc2UgdGVybXMgc28gdGhleSBrbm93IHRoZWlyIHJpZ2h0cy4KKworV2UgcHJvdGVjdCB5b3VyIHJpZ2h0cyB3aXRoIHR3byBzdGVwczogKDEpIGNvcHlyaWdodCB0aGUgc29mdHdhcmUsIGFuZCAoMikgb2ZmZXIgeW91IHRoaXMgbGljZW5zZSB3aGljaCBnaXZlcyB5b3UgbGVnYWwgcGVybWlzc2lvbiB0byBjb3B5LCBkaXN0cmlidXRlIGFuZC9vciBtb2RpZnkgdGhlIHNvZnR3YXJlLgorCitBbHNvLCBmb3IgZWFjaCBhdXRob3IncyBwcm90ZWN0aW9uIGFuZCBvdXJzLCB3ZSB3YW50IHRvIG1ha2UgY2VydGFpbiB0aGF0IGV2ZXJ5b25lIHVuZGVyc3RhbmRzIHRoYXQgdGhlcmUgaXMgbm8gd2FycmFudHkgZm9yIHRoaXMgZnJlZSBzb2Z0d2FyZS4gSWYgdGhlIHNvZnR3YXJlIGlzIG1vZGlmaWVkIGJ5IHNvbWVvbmUgZWxzZSBhbmQgcGFzc2VkIG9uLCB3ZSB3YW50IGl0cyByZWNpcGllbnRzIHRvIGtub3cgdGhhdCB3aGF0IHRoZXkgaGF2ZSBpcyBub3QgdGhlIG9yaWdpbmFsLCBzbyB0aGF0IGFueSBwcm9ibGVtcyBpbnRyb2R1Y2VkIGJ5IG90aGVycyB3aWxsIG5vdCByZWZsZWN0IG9uIHRoZSBvcmlnaW5hbCBhdXRob3JzJyByZXB1dGF0aW9ucy4KKworRmluYWxseSwgYW55IGZyZWUgcHJvZ3JhbSBpcyB0aHJlYXRlbmVkIGNvbnN0YW50bHkgYnkgc29mdHdhcmUgcGF0ZW50cy4gV2Ugd2lzaCB0byBhdm9pZCB0aGUgZGFuZ2VyIHRoYXQgcmVkaXN0cmlidXRvcnMgb2YgYSBmcmVlIHByb2dyYW0gd2lsbCBpbmRpdmlkdWFsbHkgb2J0YWluIHBhdGVudCBsaWNlbnNlcywgaW4gZWZmZWN0IG1ha2luZyB0aGUgcHJvZ3JhbSBwcm9wcmlldGFyeS4gVG8gcHJldmVudCB0aGlzLCB3ZSBoYXZlIG1hZGUgaXQgY2xlYXIgdGhhdCBhbnkgcGF0ZW50IG11c3QgYmUgbGljZW5zZWQgZm9yIGV2ZXJ5b25lJ3MgZnJlZSB1c2Ugb3Igbm90IGxpY2Vuc2VkIGF0IGFsbC4KKworVGhlIHByZWNpc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGlvbiBhbmQgbW9kaWZpY2F0aW9uIGZvbGxvdy4KKworCitURVJNUyBBTkQgQ09ORElUSU9OUyBGT1IgQ09QWUlORywgRElTVFJJQlVUSU9OIEFORCBNT0RJRklDQVRJT04KKworMC4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gYW55IHByb2dyYW0gb3Igb3RoZXIgd29yayB3aGljaCBjb250YWlucyBhIG5vdGljZSBwbGFjZWQgYnkgdGhlIGNvcHlyaWdodCBob2xkZXIgc2F5aW5nIGl0IG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBUaGUgIlByb2dyYW0iLCBiZWxvdywgcmVmZXJzIHRvIGFueSBzdWNoIHByb2dyYW0gb3Igd29yaywgYW5kIGEgIndvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0iIG1lYW5zIGVpdGhlciB0aGUgUHJvZ3JhbSBvciBhbnkgZGVyaXZhdGl2ZSB3b3JrIHVuZGVyIGNvcHlyaWdodCBsYXc6IHRoYXQgaXMgdG8gc2F5LCBhIHdvcmsgY29udGFpbmluZyB0aGUgUHJvZ3JhbSBvciBhIHBvcnRpb24gb2YgaXQsIGVpdGhlciB2ZXJiYXRpbSBvciB3aXRoIG1vZGlmaWNhdGlvbnMgYW5kL29yIHRyYW5zbGF0ZWQgaW50byBhbm90aGVyIGxhbmd1YWdlLiAoSGVyZWluYWZ0ZXIsIHRyYW5zbGF0aW9uIGlzIGluY2x1ZGVkIHdpdGhvdXQgbGltaXRhdGlvbiBpbiB0aGUgdGVybSAibW9kaWZpY2F0aW9uIi4pIEVhY2ggbGljZW5zZWUgaXMgYWRkcmVzc2VkIGFzICJ5b3UiLgorCitBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuIFRoZSBhY3Qgb2YgcnVubmluZyB0aGUgUHJvZ3JhbSBpcyBub3QgcmVzdHJpY3RlZCwgYW5kIHRoZSBvdXRwdXQgZnJvbSB0aGUgUHJvZ3JhbSBpcyBjb3ZlcmVkIG9ubHkgaWYgaXRzIGNvbnRlbnRzIGNvbnN0aXR1dGUgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIFByb2dyYW0pLiBXaGV0aGVyIHRoYXQgaXMgdHJ1ZSBkZXBlbmRzIG9uIHdoYXQgdGhlIFByb2dyYW0gZG9lcy4KKworMS4gWW91IG1heSBjb3B5IGFuZCBkaXN0cmlidXRlIHZlcmJhdGltIGNvcGllcyBvZiB0aGUgUHJvZ3JhbSdzIHNvdXJjZSBjb2RlIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdSBjb25zcGljdW91c2x5IGFuZCBhcHByb3ByaWF0ZWx5IHB1Ymxpc2ggb24gZWFjaCBjb3B5IGFuIGFwcHJvcHJpYXRlIGNvcHlyaWdodCBub3RpY2UgYW5kIGRpc2NsYWltZXIgb2Ygd2FycmFudHk7IGtlZXAgaW50YWN0IGFsbCB0aGUgbm90aWNlcyB0aGF0IHJlZmVyIHRvIHRoaXMgTGljZW5zZSBhbmQgdG8gdGhlIGFic2VuY2Ugb2YgYW55IHdhcnJhbnR5OyBhbmQgZ2l2ZSBhbnkgb3RoZXIgcmVjaXBpZW50cyBvZiB0aGUgUHJvZ3JhbSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIGFsb25nIHdpdGggdGhlIFByb2dyYW0uCisKK1lvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHksIGFuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLgorCisyLiBZb3UgbWF5IG1vZGlmeSB5b3VyIGNvcHkgb3IgY29waWVzIG9mIHRoZSBQcm9ncmFtIG9yIGFueSBwb3J0aW9uIG9mIGl0LCB0aHVzIGZvcm1pbmcgYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtLCBhbmQgY29weSBhbmQgZGlzdHJpYnV0ZSBzdWNoIG1vZGlmaWNhdGlvbnMgb3Igd29yayB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbiAxIGFib3ZlLCBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIG1lZXQgYWxsIG9mIHRoZXNlIGNvbmRpdGlvbnM6CisKKyAgIGEpIFlvdSBtdXN0IGNhdXNlIHRoZSBtb2RpZmllZCBmaWxlcyB0byBjYXJyeSBwcm9taW5lbnQgbm90aWNlcyBzdGF0aW5nIHRoYXQgeW91IGNoYW5nZWQgdGhlIGZpbGVzIGFuZCB0aGUgZGF0ZSBvZiBhbnkgY2hhbmdlLgorCisgICBiKSBZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4gd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0gb3IgYW55IHBhcnQgdGhlcmVvZiwgdG8gYmUgbGljZW5zZWQgYXMgYSB3aG9sZSBhdCBubyBjaGFyZ2UgdG8gYWxsIHRoaXJkIHBhcnRpZXMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KKworICAgYykgSWYgdGhlIG1vZGlmaWVkIHByb2dyYW0gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseSB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4gYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhIG5vdGljZSB0aGF0IHRoZXJlIGlzIG5vIHdhcnJhbnR5IChvciBlbHNlLCBzYXlpbmcgdGhhdCB5b3UgcHJvdmlkZSBhIHdhcnJhbnR5KSBhbmQgdGhhdCB1c2VycyBtYXkgcmVkaXN0cmlidXRlIHRoZSBwcm9ncmFtIHVuZGVyIHRoZXNlIGNvbmRpdGlvbnMsIGFuZCB0ZWxsaW5nIHRoZSB1c2VyIGhvdyB0byB2aWV3IGEgY29weSBvZiB0aGlzIExpY2Vuc2UuIChFeGNlcHRpb246IGlmIHRoZSBQcm9ncmFtIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQsIHlvdXIgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSBpcyBub3QgcmVxdWlyZWQgdG8gcHJpbnQgYW4gYW5ub3VuY2VtZW50LikKKworVGhlc2UgcmVxdWlyZW1lbnRzIGFwcGx5IHRvIHRoZSBtb2RpZmllZCB3b3JrIGFzIGEgd2hvbGUuIElmIGlkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIFByb2dyYW0sIGFuZCBjYW4gYmUgcmVhc29uYWJseSBjb25zaWRlcmVkIGluZGVwZW5kZW50IGFuZCBzZXBhcmF0ZSB3b3JrcyBpbiB0aGVtc2VsdmVzLCB0aGVuIHRoaXMgTGljZW5zZSwgYW5kIGl0cyB0ZXJtcywgZG8gbm90IGFwcGx5IHRvIHRob3NlIHNlY3Rpb25zIHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlbSBhcyBzZXBhcmF0ZSB3b3Jrcy4gQnV0IHdoZW4geW91IGRpc3RyaWJ1dGUgdGhlIHNhbWUgc2VjdGlvbnMgYXMgcGFydCBvZiBhIHdob2xlIHdoaWNoIGlzIGEgd29yayBiYXNlZCBvbiB0aGUgUHJvZ3JhbSwgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgd2hvbGUgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUgZW50aXJlIHdob2xlLCBhbmQgdGh1cyB0byBlYWNoIGFuZCBldmVyeSBwYXJ0IHJlZ2FyZGxlc3Mgb2Ygd2hvIHdyb3RlIGl0LgorCitUaHVzLCBpdCBpcyBub3QgdGhlIGludGVudCBvZiB0aGlzIHNlY3Rpb24gdG8gY2xhaW0gcmlnaHRzIG9yIGNvbnRlc3QgeW91ciByaWdodHMgdG8gd29yayB3cml0dGVuIGVudGlyZWx5IGJ5IHlvdTsgcmF0aGVyLCB0aGUgaW50ZW50IGlzIHRvIGV4ZXJjaXNlIHRoZSByaWdodCB0byBjb250cm9sIHRoZSBkaXN0cmlidXRpb24gb2YgZGVyaXZhdGl2ZSBvciBjb2xsZWN0aXZlIHdvcmtzIGJhc2VkIG9uIHRoZSBQcm9ncmFtLgorCitJbiBhZGRpdGlvbiwgbWVyZSBhZ2dyZWdhdGlvbiBvZiBhbm90aGVyIHdvcmsgbm90IGJhc2VkIG9uIHRoZSBQcm9ncmFtIHdpdGggdGhlIFByb2dyYW0gKG9yIHdpdGggYSB3b3JrIGJhc2VkIG9uIHRoZSBQcm9ncmFtKSBvbiBhIHZvbHVtZSBvZiBhIHN0b3JhZ2Ugb3IgZGlzdHJpYnV0aW9uIG1lZGl1bSBkb2VzIG5vdCBicmluZyB0aGUgb3RoZXIgd29yayB1bmRlciB0aGUgc2NvcGUgb2YgdGhpcyBMaWNlbnNlLgorCiszLiBZb3UgbWF5IGNvcHkgYW5kIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gKG9yIGEgd29yayBiYXNlZCBvbiBpdCwgdW5kZXIgU2VjdGlvbiAyKSBpbiBvYmplY3QgY29kZSBvciBleGVjdXRhYmxlIGZvcm0gdW5kZXIgdGhlIHRlcm1zIG9mIFNlY3Rpb25zIDEgYW5kIDIgYWJvdmUgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBkbyBvbmUgb2YgdGhlIGZvbGxvd2luZzoKKworICAgYSkgQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBzb3VyY2UgY29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgU2VjdGlvbnMgMSBhbmQgMiBhYm92ZSBvbiBhIG1lZGl1bSBjdXN0b21hcmlseSB1c2VkIGZvciBzb2Z0d2FyZSBpbnRlcmNoYW5nZTsgb3IsCiAKLShkKSAgICAgIlNlcnZpY2UiIG1lYW5zIHRoZSBzZXJ2aWNlKHMpIHRoYXQgU3VuIG9yIGl0cyBkZWxlZ2F0ZSB3aWxsCi1wcm92aWRlLCBpZiBhbnksIGFzIHNlbGVjdGVkIGluIHlvdXIgRW50aXRsZW1lbnQgYW5kIGFzIGZ1cnRoZXIKLWRlc2NyaWJlZCBpbiB0aGUgYXBwbGljYWJsZSBzZXJ2aWNlIGxpc3RpbmdzIGF0Ci13d3cuc3VuLmNvbS9zZXJ2aWNlL3NlcnZpY2VsaXN0LgorICAgYikgQWNjb21wYW55IGl0IHdpdGggYSB3cml0dGVuIG9mZmVyLCB2YWxpZCBmb3IgYXQgbGVhc3QgdGhyZWUgeWVhcnMsIHRvIGdpdmUgYW55IHRoaXJkIHBhcnR5LCBmb3IgYSBjaGFyZ2Ugbm8gbW9yZSB0aGFuIHlvdXIgY29zdCBvZiBwaHlzaWNhbGx5IHBlcmZvcm1pbmcgc291cmNlIGRpc3RyaWJ1dGlvbiwgYSBjb21wbGV0ZSBtYWNoaW5lLXJlYWRhYmxlIGNvcHkgb2YgdGhlIGNvcnJlc3BvbmRpbmcgc291cmNlIGNvZGUsIHRvIGJlIGRpc3RyaWJ1dGVkIHVuZGVyIHRoZSB0ZXJtcyBvZiBTZWN0aW9ucyAxIGFuZCAyIGFib3ZlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwKIAotKGUpICAgICAiU29mdHdhcmUiIG1lYW5zIHRoZSBTdW4gc29mdHdhcmUgZGVzY3JpYmVkIGluIHlvdXIKLUVudGl0bGVtZW50LiBBbHNvLCBjZXJ0YWluIHNvZnR3YXJlIG1heSBiZSBpbmNsdWRlZCBmb3IgZXZhbHVhdGlvbiB1c2UKLXVuZGVyIFNlY3Rpb24gMy4KKyAgIGMpIEFjY29tcGFueSBpdCB3aXRoIHRoZSBpbmZvcm1hdGlvbiB5b3UgcmVjZWl2ZWQgYXMgdG8gdGhlIG9mZmVyIHRvIGRpc3RyaWJ1dGUgY29ycmVzcG9uZGluZyBzb3VyY2UgY29kZS4gKFRoaXMgYWx0ZXJuYXRpdmUgaXMgYWxsb3dlZCBvbmx5IGZvciBub25jb21tZXJjaWFsIGRpc3RyaWJ1dGlvbiBhbmQgb25seSBpZiB5b3UgcmVjZWl2ZWQgdGhlIHByb2dyYW0gaW4gb2JqZWN0IGNvZGUgb3IgZXhlY3V0YWJsZSBmb3JtIHdpdGggc3VjaCBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggU3Vic2VjdGlvbiBiIGFib3ZlLikKIAotKGYpICAgICAiWW91IiBhbmQgIllvdXIiIG1lYW5zIHRoZSBpbmRpdmlkdWFsIG9yIGxlZ2FsIGVudGl0eSBzcGVjaWZpZWQKLWluIHRoZSBFbnRpdGxlbWVudCwgb3IgZm9yIGV2YWx1YXRpb24gcHVycG9zZXMsIHRoZSBlbnRpdHkgcGVyZm9ybWluZwotdGhlIGV2YWx1YXRpb24uCitUaGUgc291cmNlIGNvZGUgZm9yIGEgd29yayBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIHdvcmsgZm9yIG1ha2luZyBtb2RpZmljYXRpb25zIHRvIGl0LiBGb3IgYW4gZXhlY3V0YWJsZSB3b3JrLCBjb21wbGV0ZSBzb3VyY2UgY29kZSBtZWFucyBhbGwgdGhlIHNvdXJjZSBjb2RlIGZvciBhbGwgbW9kdWxlcyBpdCBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUgYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkgZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgZXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQgaXRzZWxmIGFjY29tcGFuaWVzIHRoZSBleGVjdXRhYmxlLgogCi0yLiAgICAgIExpY2Vuc2UgR3JhbnQgYW5kIEVudGl0bGVtZW50LgorSWYgZGlzdHJpYnV0aW9uIG9mIGV4ZWN1dGFibGUgb3Igb2JqZWN0IGNvZGUgaXMgbWFkZSBieSBvZmZlcmluZyBhY2Nlc3MgdG8gY29weSBmcm9tIGEgZGVzaWduYXRlZCBwbGFjZSwgdGhlbiBvZmZlcmluZyBlcXVpdmFsZW50IGFjY2VzcyB0byBjb3B5IHRoZSBzb3VyY2UgY29kZSBmcm9tIHRoZSBzYW1lIHBsYWNlIGNvdW50cyBhcyBkaXN0cmlidXRpb24gb2YgdGhlIHNvdXJjZSBjb2RlLCBldmVuIHRob3VnaCB0aGlyZCBwYXJ0aWVzIGFyZSBub3QgY29tcGVsbGVkIHRvIGNvcHkgdGhlIHNvdXJjZSBhbG9uZyB3aXRoIHRoZSBvYmplY3QgY29kZS4KIAotU3ViamVjdCB0byB0aGUgdGVybXMgb2YgeW91ciBFbnRpdGxlbWVudCwgU3VuIGdyYW50cyB5b3UgYQotbm9uZXhjbHVzaXZlLCBub250cmFuc2ZlcmFibGUgbGltaXRlZCBsaWNlbnNlIHRvIHVzZSBTb2Z0d2FyZSBmb3IgaXRzCi1QZXJtaXR0ZWQgVXNlIGZvciB0aGUgbGljZW5zZSB0ZXJtLiBZb3VyIEVudGl0bGVtZW50IHdpbGwgc3BlY2lmeSAoYSkKLVNvZnR3YXJlIGxpY2Vuc2VkLCAoYikgdGhlIFBlcm1pdHRlZCBVc2UsIChjKSB0aGUgbGljZW5zZSB0ZXJtLCBhbmQgKGQpCi10aGUgTGljZW5zZWQgVW5pdHMuCis0LiBZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gZXhjZXB0IGFzIGV4cHJlc3NseSBwcm92aWRlZCB1bmRlciB0aGlzIExpY2Vuc2UuIEFueSBhdHRlbXB0IG90aGVyd2lzZSB0byBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2Ugb3IgZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSBpcyB2b2lkLCBhbmQgd2lsbCBhdXRvbWF0aWNhbGx5IHRlcm1pbmF0ZSB5b3VyIHJpZ2h0cyB1bmRlciB0aGlzIExpY2Vuc2UuIEhvd2V2ZXIsIHBhcnRpZXMgd2hvIGhhdmUgcmVjZWl2ZWQgY29waWVzLCBvciByaWdodHMsIGZyb20geW91IHVuZGVyIHRoaXMgTGljZW5zZSB3aWxsIG5vdCBoYXZlIHRoZWlyIGxpY2Vuc2VzIHRlcm1pbmF0ZWQgc28gbG9uZyBhcyBzdWNoIHBhcnRpZXMgcmVtYWluIGluIGZ1bGwgY29tcGxpYW5jZS4KIAotQWRkaXRpb25hbGx5LCBpZiB5b3VyIEVudGl0bGVtZW50IGluY2x1ZGVzIFNlcnZpY2VzLCB0aGVuIGl0IHdpbGwgYWxzbwotc3BlY2lmeSB0aGUgKGUpIFNlcnZpY2UgYW5kIChmKSBzZXJ2aWNlIHRlcm0uCis1LiBZb3UgYXJlIG5vdCByZXF1aXJlZCB0byBhY2NlcHQgdGhpcyBMaWNlbnNlLCBzaW5jZSB5b3UgaGF2ZSBub3Qgc2lnbmVkIGl0LiBIb3dldmVyLCBub3RoaW5nIGVsc2UgZ3JhbnRzIHlvdSBwZXJtaXNzaW9uIHRvIG1vZGlmeSBvciBkaXN0cmlidXRlIHRoZSBQcm9ncmFtIG9yIGl0cyBkZXJpdmF0aXZlIHdvcmtzLiBUaGVzZSBhY3Rpb25zIGFyZSBwcm9oaWJpdGVkIGJ5IGxhdyBpZiB5b3UgZG8gbm90IGFjY2VwdCB0aGlzIExpY2Vuc2UuIFRoZXJlZm9yZSwgYnkgbW9kaWZ5aW5nIG9yIGRpc3RyaWJ1dGluZyB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pLCB5b3UgaW5kaWNhdGUgeW91ciBhY2NlcHRhbmNlIG9mIHRoaXMgTGljZW5zZSB0byBkbyBzbywgYW5kIGFsbCBpdHMgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIGNvcHlpbmcsIGRpc3RyaWJ1dGluZyBvciBtb2RpZnlpbmcgdGhlIFByb2dyYW0gb3Igd29ya3MgYmFzZWQgb24gaXQuCiAKLUlmIHlvdXIgcmlnaHRzIHRvIFNvZnR3YXJlIG9yIFNlcnZpY2VzIGFyZSBsaW1pdGVkIGluIGR1cmF0aW9uIGFuZCB0aGUKLWRhdGUgc3VjaCByaWdodHMgYmVnaW4gaXMgb3RoZXIgdGhhbiB0aGUgcHVyY2hhc2UgZGF0ZSwgeW91cgotRW50aXRsZW1lbnQgd2lsbCBwcm92aWRlIHRoYXQgYmVnaW5uaW5nIGRhdGUocykuCis2LiBFYWNoIHRpbWUgeW91IHJlZGlzdHJpYnV0ZSB0aGUgUHJvZ3JhbSAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlIFByb2dyYW0pLCB0aGUgcmVjaXBpZW50IGF1dG9tYXRpY2FsbHkgcmVjZWl2ZXMgYSBsaWNlbnNlIGZyb20gdGhlIG9yaWdpbmFsIGxpY2Vuc29yIHRvIGNvcHksIGRpc3RyaWJ1dGUgb3IgbW9kaWZ5IHRoZSBQcm9ncmFtIHN1YmplY3QgdG8gdGhlc2UgdGVybXMgYW5kIGNvbmRpdGlvbnMuIFlvdSBtYXkgbm90IGltcG9zZSBhbnkgZnVydGhlciByZXN0cmljdGlvbnMgb24gdGhlIHJlY2lwaWVudHMnIGV4ZXJjaXNlIG9mIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJlaW4uIFlvdSBhcmUgbm90IHJlc3BvbnNpYmxlIGZvciBlbmZvcmNpbmcgY29tcGxpYW5jZSBieSB0aGlyZCBwYXJ0aWVzIHRvIHRoaXMgTGljZW5zZS4KIAotVGhlIEVudGl0bGVtZW50IG1heSBiZSBkZWxpdmVyZWQgdG8geW91IGluIHZhcmlvdXMgd2F5cyBkZXBlbmRpbmcgb24KLXRoZSBtYW5uZXIgaW4gd2hpY2ggeW91IG9idGFpbiBTb2Z0d2FyZSBhbmQgU2VydmljZXMsIGZvciBleGFtcGxlLCB0aGUKLUVudGl0bGVtZW50IG1heSBiZSBwcm92aWRlZCBpbiB5b3VyIHJlY2VpcHQsIGludm9pY2Ugb3IgeW91ciBjb250cmFjdAotd2l0aCBTdW4gb3IgYXV0aG9yaXplZCBTdW4gcmVzZWxsZXIuIEl0IG1heSBhbHNvIGJlIGluIGVsZWN0cm9uaWMKLWZvcm1hdCBpZiB5b3UgZG93bmxvYWQgU29mdHdhcmUuCis3LiBJZiwgYXMgYSBjb25zZXF1ZW5jZSBvZiBhIGNvdXJ0IGp1ZGdtZW50IG9yIGFsbGVnYXRpb24gb2YgcGF0ZW50IGluZnJpbmdlbWVudCBvciBmb3IgYW55IG90aGVyIHJlYXNvbiAobm90IGxpbWl0ZWQgdG8gcGF0ZW50IGlzc3VlcyksIGNvbmRpdGlvbnMgYXJlIGltcG9zZWQgb24geW91ICh3aGV0aGVyIGJ5IGNvdXJ0IG9yZGVyLCBhZ3JlZW1lbnQgb3Igb3RoZXJ3aXNlKSB0aGF0IGNvbnRyYWRpY3QgdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLCB0aGV5IGRvIG5vdCBleGN1c2UgeW91IGZyb20gdGhlIGNvbmRpdGlvbnMgb2YgdGhpcyBMaWNlbnNlLiBJZiB5b3UgY2Fubm90IGRpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucywgdGhlbiBhcyBhIGNvbnNlcXVlbmNlIHlvdSBtYXkgbm90IGRpc3RyaWJ1dGUgdGhlIFByb2dyYW0gYXQgYWxsLiBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQgbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgUHJvZ3JhbSBieSBhbGwgdGhvc2Ugd2hvIHJlY2VpdmUgY29waWVzIGRpcmVjdGx5IG9yIGluZGlyZWN0bHkgdGhyb3VnaCB5b3UsIHRoZW4gdGhlIG9ubHkgd2F5IHlvdSBjb3VsZCBzYXRpc2Z5IGJvdGggaXQgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0byByZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBQcm9ncmFtLgogCi0zLiAgICAgIFBlcm1pdHRlZCBVc2UuCitJZiBhbnkgcG9ydGlvbiBvZiB0aGlzIHNlY3Rpb24gaXMgaGVsZCBpbnZhbGlkIG9yIHVuZW5mb3JjZWFibGUgdW5kZXIgYW55IHBhcnRpY3VsYXIgY2lyY3Vtc3RhbmNlLCB0aGUgYmFsYW5jZSBvZiB0aGUgc2VjdGlvbiBpcyBpbnRlbmRlZCB0byBhcHBseSBhbmQgdGhlIHNlY3Rpb24gYXMgYSB3aG9sZSBpcyBpbnRlbmRlZCB0byBhcHBseSBpbiBvdGhlciBjaXJjdW1zdGFuY2VzLgogCi1BcyBzZWxlY3RlZCBpbiB5b3VyIEVudGl0bGVtZW50LCBvbmUgb3IgbW9yZSBvZiB0aGUgZm9sbG93aW5nIFBlcm1pdHRlZAotVXNlcyB3aWxsIGFwcGx5IHRvIHlvdXIgdXNlIG9mIFNvZnR3YXJlLiBVbmxlc3MgeW91IGhhdmUgYW4gRW50aXRsZW1lbnQKLXRoYXQgZXhwcmVzc2x5IHBlcm1pdHMgaXQsIHlvdSBtYXkgbm90IHVzZSBTb2Z0d2FyZSBmb3IgYW55IG9mIHRoZQotb3RoZXIgUGVybWl0dGVkIFVzZXMuIElmIHlvdSBkb24ndCBoYXZlIGFuIEVudGl0bGVtZW50LCBvciBpZiB5b3VyCi1FbnRpdGxlbWVudCBkb2Vzbid0IGNvdmVyIGFkZGl0aW9uYWwgc29mdHdhcmUgZGVsaXZlcmVkIHRvIHlvdSwgdGhlbgotc3VjaCBzb2Z0d2FyZSBpcyBmb3IgeW91ciBFdmFsdWF0aW9uIFVzZS4KK0l0IGlzIG5vdCB0aGUgcHVycG9zZSBvZiB0aGlzIHNlY3Rpb24gdG8gaW5kdWNlIHlvdSB0byBpbmZyaW5nZSBhbnkgcGF0ZW50cyBvciBvdGhlciBwcm9wZXJ0eSByaWdodCBjbGFpbXMgb3IgdG8gY29udGVzdCB2YWxpZGl0eSBvZiBhbnkgc3VjaCBjbGFpbXM7IHRoaXMgc2VjdGlvbiBoYXMgdGhlIHNvbGUgcHVycG9zZSBvZiBwcm90ZWN0aW5nIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgc29mdHdhcmUgZGlzdHJpYnV0aW9uIHN5c3RlbSwgd2hpY2ggaXMgaW1wbGVtZW50ZWQgYnkgcHVibGljIGxpY2Vuc2UgcHJhY3RpY2VzLiBNYW55IHBlb3BsZSBoYXZlIG1hZGUgZ2VuZXJvdXMgY29udHJpYnV0aW9ucyB0byB0aGUgd2lkZSByYW5nZSBvZiBzb2Z0d2FyZSBkaXN0cmlidXRlZCB0aHJvdWdoIHRoYXQgc3lzdGVtIGluIHJlbGlhbmNlIG9uIGNvbnNpc3RlbnQgYXBwbGljYXRpb24gb2YgdGhhdCBzeXN0ZW07IGl0IGlzIHVwIHRvIHRoZSBhdXRob3IvZG9ub3IgdG8gZGVjaWRlIGlmIGhlIG9yIHNoZSBpcyB3aWxsaW5nIHRvIGRpc3RyaWJ1dGUgc29mdHdhcmUgdGhyb3VnaCBhbnkgb3RoZXIgc3lzdGVtIGFuZCBhIGxpY2Vuc2VlIGNhbm5vdCBpbXBvc2UgdGhhdCBjaG9pY2UuCiAKLShhKSBFdmFsdWF0aW9uIFVzZS4gWW91IG1heSBldmFsdWF0ZSBTb2Z0d2FyZSBpbnRlcm5hbGx5IGZvciBhIHBlcmlvZAotb2YgOTAgZGF5cyBmcm9tIHlvdXIgZmlyc3QgdXNlLgorVGhpcyBzZWN0aW9uIGlzIGludGVuZGVkIHRvIG1ha2UgdGhvcm91Z2hseSBjbGVhciB3aGF0IGlzIGJlbGlldmVkIHRvIGJlIGEgY29uc2VxdWVuY2Ugb2YgdGhlIHJlc3Qgb2YgdGhpcyBMaWNlbnNlLgogCi0oYikgUmVzZWFyY2ggYW5kIEluc3RydWN0aW9uYWwgVXNlLiBZb3UgbWF5IHVzZSBTb2Z0d2FyZSBpbnRlcm5hbGx5IHRvCi1kZXNpZ24sIGRldmVsb3AgYW5kIHRlc3QsIGFuZCBhbHNvIHRvIHByb3ZpZGUgaW5zdHJ1Y3Rpb24gb24gc3VjaAotdXNlcy4KKzguIElmIHRoZSBkaXN0cmlidXRpb24gYW5kL29yIHVzZSBvZiB0aGUgUHJvZ3JhbSBpcyByZXN0cmljdGVkIGluIGNlcnRhaW4gY291bnRyaWVzIGVpdGhlciBieSBwYXRlbnRzIG9yIGJ5IGNvcHlyaWdodGVkIGludGVyZmFjZXMsIHRoZSBvcmlnaW5hbCBjb3B5cmlnaHQgaG9sZGVyIHdobyBwbGFjZXMgdGhlIFByb2dyYW0gdW5kZXIgdGhpcyBMaWNlbnNlIG1heSBhZGQgYW4gZXhwbGljaXQgZ2VvZ3JhcGhpY2FsIGRpc3RyaWJ1dGlvbiBsaW1pdGF0aW9uIGV4Y2x1ZGluZyB0aG9zZSBjb3VudHJpZXMsIHNvIHRoYXQgZGlzdHJpYnV0aW9uIGlzIHBlcm1pdHRlZCBvbmx5IGluIG9yIGFtb25nIGNvdW50cmllcyBub3QgdGh1cyBleGNsdWRlZC4gSW4gc3VjaCBjYXNlLCB0aGlzIExpY2Vuc2UgaW5jb3Jwb3JhdGVzIHRoZSBsaW1pdGF0aW9uIGFzIGlmIHdyaXR0ZW4gaW4gdGhlIGJvZHkgb2YgdGhpcyBMaWNlbnNlLgogCi0oYykgSW5kaXZpZHVhbCBVc2UuIFlvdSBtYXkgdXNlIFNvZnR3YXJlIGludGVybmFsbHkgZm9yIHBlcnNvbmFsLAotaW5kaXZpZHVhbCB1c2UuCis5LiBUaGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uIG1heSBwdWJsaXNoIHJldmlzZWQgYW5kL29yIG5ldyB2ZXJzaW9ucyBvZiB0aGUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmcm9tIHRpbWUgdG8gdGltZS4gU3VjaCBuZXcgdmVyc2lvbnMgd2lsbCBiZSBzaW1pbGFyIGluIHNwaXJpdCB0byB0aGUgcHJlc2VudCB2ZXJzaW9uLCBidXQgbWF5IGRpZmZlciBpbiBkZXRhaWwgdG8gYWRkcmVzcyBuZXcgcHJvYmxlbXMgb3IgY29uY2VybnMuCiAKLShkKSBDb21tZXJjaWFsIFVzZS4gWW91IG1heSB1c2UgU29mdHdhcmUgaW50ZXJuYWxseSBmb3IgeW91ciBvd24KLWNvbW1lcmNpYWwgcHVycG9zZXMuCitFYWNoIHZlcnNpb24gaXMgZ2l2ZW4gYSBkaXN0aW5ndWlzaGluZyB2ZXJzaW9uIG51bWJlci4gSWYgdGhlIFByb2dyYW0gc3BlY2lmaWVzIGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlIHdoaWNoIGFwcGxpZXMgdG8gaXQgYW5kICJhbnkgbGF0ZXIgdmVyc2lvbiIsIHlvdSBoYXZlIHRoZSBvcHRpb24gb2YgZm9sbG93aW5nIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBlaXRoZXIgb2YgdGhhdCB2ZXJzaW9uIG9yIG9mIGFueSBsYXRlciB2ZXJzaW9uIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLiBJZiB0aGUgUHJvZ3JhbSBkb2VzIG5vdCBzcGVjaWZ5IGEgdmVyc2lvbiBudW1iZXIgb2YgdGhpcyBMaWNlbnNlLCB5b3UgbWF5IGNob29zZSBhbnkgdmVyc2lvbiBldmVyIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLgogCi0oZSkgU2VydmljZSBQcm92aWRlciBVc2UuIFlvdSBtYXkgbWFrZSBTb2Z0d2FyZSBmdW5jdGlvbmFsaXR5Ci1hY2Nlc3NpYmxlIChidXQgbm90IGJ5IHByb3ZpZGluZyBTb2Z0d2FyZSBpdHNlbGYgb3IgdGhyb3VnaCBvdXRzb3VyY2luZwotc2VydmljZXMpIHRvIHlvdXIgZW5kIHVzZXJzIGluIGFuIGV4dHJhbmV0IGRlcGxveW1lbnQsIGJ1dCBub3QgdG8geW91cgotYWZmaWxpYXRlZCBjb21wYW5pZXMgb3IgdG8gZ292ZXJubWVudCBhZ2VuY2llcy4KKzEwLiBJZiB5b3Ugd2lzaCB0byBpbmNvcnBvcmF0ZSBwYXJ0cyBvZiB0aGUgUHJvZ3JhbSBpbnRvIG90aGVyIGZyZWUgcHJvZ3JhbXMgd2hvc2UgZGlzdHJpYnV0aW9uIGNvbmRpdGlvbnMgYXJlIGRpZmZlcmVudCwgd3JpdGUgdG8gdGhlIGF1dGhvciB0byBhc2sgZm9yIHBlcm1pc3Npb24uIEZvciBzb2Z0d2FyZSB3aGljaCBpcyBjb3B5cmlnaHRlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyB3ZSBzb21ldGltZXMgbWFrZSBleGNlcHRpb25zIGZvciB0aGlzLiBPdXIgZGVjaXNpb24gd2lsbCBiZSBndWlkZWQgYnkgdGhlIHR3byBnb2FscyBvZiBwcmVzZXJ2aW5nIHRoZSBmcmVlIHN0YXR1cyBvZiBhbGwgZGVyaXZhdGl2ZXMgb2Ygb3VyIGZyZWUgc29mdHdhcmUgYW5kIG9mIHByb21vdGluZyB0aGUgc2hhcmluZyBhbmQgcmV1c2Ugb2Ygc29mdHdhcmUgZ2VuZXJhbGx5LgogCi00LiAgICAgIExpY2Vuc2VkIFVuaXRzLgorTk8gV0FSUkFOVFkKIAotWW91ciBQZXJtaXR0ZWQgVXNlIGlzIGxpbWl0ZWQgdG8gdGhlIG51bWJlciBvZiBMaWNlbnNlZCBVbml0cyBzdGF0ZWQgaW4KLXlvdXIgRW50aXRsZW1lbnQuIElmIHlvdSByZXF1aXJlIGFkZGl0aW9uYWwgTGljZW5zZWQgVW5pdHMsIHlvdSB3aWxsCi1uZWVkIGFkZGl0aW9uYWwgRW50aXRsZW1lbnQocykuCisxMS4gQkVDQVVTRSBUSEUgUFJPR1JBTSBJUyBMSUNFTlNFRCBGUkVFIE9GIENIQVJHRSwgVEhFUkUgSVMgTk8gV0FSUkFOVFkgRk9SIFRIRSBQUk9HUkFNLCBUTyBUSEUgRVhURU5UIFBFUk1JVFRFRCBCWSBBUFBMSUNBQkxFIExBVy4gRVhDRVBUIFdIRU4gT1RIRVJXSVNFIFNUQVRFRCBJTiBXUklUSU5HIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQvT1IgT1RIRVIgUEFSVElFUyBQUk9WSURFIFRIRSBQUk9HUkFNICJBUyBJUyIgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRUlUSEVSIEVYUFJFU1NFRCBPUiBJTVBMSUVELCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBQUk9HUkFNIElTIFdJVEggWU9VLiBTSE9VTEQgVEhFIFBST0dSQU0gUFJPVkUgREVGRUNUSVZFLCBZT1UgQVNTVU1FIFRIRSBDT1NUIE9GIEFMTCBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4KIAotNS4JUmVzdHJpY3Rpb25zLgorMTIuIElOIE5PIEVWRU5UIFVOTEVTUyBSRVFVSVJFRCBCWSBBUFBMSUNBQkxFIExBVyBPUiBBR1JFRUQgVE8gSU4gV1JJVElORyBXSUxMIEFOWSBDT1BZUklHSFQgSE9MREVSLCBPUiBBTlkgT1RIRVIgUEFSVFkgV0hPIE1BWSBNT0RJRlkgQU5EL09SIFJFRElTVFJJQlVURSBUSEUgUFJPR1JBTSBBUyBQRVJNSVRURUQgQUJPVkUsIEJFIExJQUJMRSBUTyBZT1UgRk9SIERBTUFHRVMsIElOQ0xVRElORyBBTlkgR0VORVJBTCwgU1BFQ0lBTCwgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgQVJJU0lORyBPVVQgT0YgVEhFIFVTRSBPUiBJTkFCSUxJVFkgVE8gVVNFIFRIRSBQUk9HUkFNIChJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIExPU1MgT0YgREFUQSBPUiBEQVRBIEJFSU5HIFJFTkRFUkVEIElOQUNDVVJBVEUgT1IgTE9TU0VTIFNVU1RBSU5FRCBCWSBZT1UgT1IgVEhJUkQgUEFSVElFUyBPUiBBIEZBSUxVUkUgT0YgVEhFIFBST0dSQU0gVE8gT1BFUkFURSBXSVRIIEFOWSBPVEhFUiBQUk9HUkFNUyksIEVWRU4gSUYgU1VDSCBIT0xERVIgT1IgT1RIRVIgUEFSVFkgSEFTIEJFRU4gQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgogCi0oYSkgVGhlIGNvcGllcyBvZiBTb2Z0d2FyZSBwcm92aWRlZCB0byB5b3UgdW5kZXIgdGhpcyBBZ3JlZW1lbnQgYXJlCi1saWNlbnNlZCwgbm90IHNvbGQsIHRvIHlvdSBieSBTdW4uIFN1biByZXNlcnZlcyBhbGwgcmlnaHRzIG5vdAotZXhwcmVzc2x5IGdyYW50ZWQuIChiKSBZb3UgbWF5IG1ha2UgYSBzaW5nbGUgYXJjaGl2YWwgY29weSBvZiBTb2Z0d2FyZSwKLWJ1dCBvdGhlcndpc2UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIG9yIGRpc3RyaWJ1dGUgU29mdHdhcmUuIEhvd2V2ZXIgaWYKLXRoZSBTdW4gZG9jdW1lbnRhdGlvbiBhY2NvbXBhbnlpbmcgU29mdHdhcmUgbGlzdHMgc3BlY2lmaWMgcG9ydGlvbnMgb2YKLVNvZnR3YXJlLCBzdWNoIGFzIGhlYWRlciBmaWxlcywgY2xhc3MgbGlicmFyaWVzLCByZWZlcmVuY2Ugc291cmNlIGNvZGUsCi1hbmQvb3IgcmVkaXN0cmlidXRhYmxlIGZpbGVzLCB0aGF0IG1heSBiZSBoYW5kbGVkIGRpZmZlcmVudGx5LCB5b3UgbWF5Ci1kbyBzbyBvbmx5IGFzIHByb3ZpZGVkIGluIHRoZSBTdW4gZG9jdW1lbnRhdGlvbi4gKGMpIFlvdSBtYXkgbm90IHJlbnQsCi1sZWFzZSwgbGVuZCBvciBlbmN1bWJlciBTb2Z0d2FyZS4gKGQpIFVubGVzcyBlbmZvcmNlbWVudCBpcyBwcm9oaWJpdGVkCi1ieSBhcHBsaWNhYmxlIGxhdywgeW91IG1heSBub3QgZGVjb21waWxlLCBvciByZXZlcnNlIGVuZ2luZWVyCi1Tb2Z0d2FyZS4gIChlKSBUaGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdGhpcyBBZ3JlZW1lbnQgd2lsbCBhcHBseSB0bwotYW55IFNvZnR3YXJlIHVwZGF0ZXMsIHByb3ZpZGVkIHRvIHlvdSBhdCBTdW4ncyBkaXNjcmV0aW9uLCB0aGF0IHJlcGxhY2UKLWFuZC9vciBzdXBwbGVtZW50IHRoZSBvcmlnaW5hbCBTb2Z0d2FyZSwgdW5sZXNzIHN1Y2ggdXBkYXRlIGNvbnRhaW5zIGEKLXNlcGFyYXRlIGxpY2Vuc2UuIChmKSBZb3UgbWF5IG5vdCBwdWJsaXNoIG9yIHByb3ZpZGUgdGhlIHJlc3VsdHMgb2YgYW55Ci1iZW5jaG1hcmsgb3IgY29tcGFyaXNvbiB0ZXN0cyBydW4gb24gU29mdHdhcmUgdG8gYW55IHRoaXJkIHBhcnR5Ci13aXRob3V0IHRoZSBwcmlvciB3cml0dGVuIGNvbnNlbnQgb2YgU3VuLiAoZykgU29mdHdhcmUgaXMgY29uZmlkZW50aWFsCi1hbmQgY29weXJpZ2h0ZWQuIChoKSBVbmxlc3Mgb3RoZXJ3aXNlIHNwZWNpZmllZCwgaWYgU29mdHdhcmUgaXMKLWRlbGl2ZXJlZCB3aXRoIGVtYmVkZGVkIG9yIGJ1bmRsZWQgc29mdHdhcmUgdGhhdCBlbmFibGVzIGZ1bmN0aW9uYWxpdHkKLW9mIFNvZnR3YXJlLCB5b3UgbWF5IG5vdCB1c2Ugc3VjaCBzb2Z0d2FyZSBvbiBhIHN0YW5kLWFsb25lIGJhc2lzIG9yCi11c2UgYW55IHBvcnRpb24gb2Ygc3VjaCBzb2Z0d2FyZSB0byBpbnRlcm9wZXJhdGUgd2l0aCBhbnkgcHJvZ3JhbShzKQotb3RoZXIgdGhhbiBTb2Z0d2FyZS4gIChpKSBTb2Z0d2FyZSBtYXkgY29udGFpbiBwcm9ncmFtcyB0aGF0IHBlcmZvcm0KLWF1dG9tYXRlZCBjb2xsZWN0aW9uIG9mIHN5c3RlbSBkYXRhIGFuZC9vciBhdXRvbWF0ZWQgc29mdHdhcmUgdXBkYXRpbmcKLXNlcnZpY2VzLiBTeXN0ZW0gZGF0YSBjb2xsZWN0ZWQgdGhyb3VnaCBzdWNoIHByb2dyYW1zIG1heSBiZSB1c2VkIGJ5Ci1TdW4sIGl0cyBzdWJjb250cmFjdG9ycywgYW5kIGl0cyBzZXJ2aWNlIGRlbGl2ZXJ5IHBhcnRuZXJzIGZvciB0aGUKLXB1cnBvc2Ugb2YgcHJvdmlkaW5nIHlvdSB3aXRoIHJlbW90ZSBzeXN0ZW0gc2VydmljZXMgYW5kL29yIGltcHJvdmluZwotU3VuJ3Mgc29mdHdhcmUgYW5kIHN5c3RlbXMuIChqKSBTb2Z0d2FyZSBpcyBub3QgZGVzaWduZWQsIGxpY2Vuc2VkIG9yCi1pbnRlbmRlZCBmb3IgdXNlIGluIHRoZSBkZXNpZ24sIGNvbnN0cnVjdGlvbiwgb3BlcmF0aW9uIG9yIG1haW50ZW5hbmNlCi1vZiBhbnkgbnVjbGVhciBmYWNpbGl0eSBhbmQgU3VuIGFuZCBpdHMgbGljZW5zb3JzIGRpc2NsYWltIGFueSBleHByZXNzCi1vciBpbXBsaWVkIHdhcnJhbnR5IG9mIGZpdG5lc3MgZm9yIHN1Y2ggdXNlcy4gKGspIE5vIHJpZ2h0LCB0aXRsZSBvcgotaW50ZXJlc3QgaW4gb3IgdG8gYW55IHRyYWRlbWFyaywgc2VydmljZSBtYXJrLCBsb2dvIG9yIHRyYWRlIG5hbWUgb2YKLVN1biBvciBpdHMgbGljZW5zb3JzIGlzIGdyYW50ZWQgdW5kZXIgdGhpcyBBZ3JlZW1lbnQuCitFTkQgT0YgVEVSTVMgQU5EIENPTkRJVElPTlMKIAotNi4JVGVybSBhbmQgVGVybWluYXRpb24uIAogCi1UaGUgbGljZW5zZSBhbmQgc2VydmljZSB0ZXJtIGFyZSBzZXQgZm9ydGggaW4geW91ciBFbnRpdGxlbWVudChzKS4gWW91cgotcmlnaHRzIHVuZGVyIHRoaXMgQWdyZWVtZW50IHdpbGwgdGVybWluYXRlIGltbWVkaWF0ZWx5IHdpdGhvdXQgbm90aWNlCi1mcm9tIFN1biBpZiB5b3UgbWF0ZXJpYWxseSBicmVhY2ggaXQgb3IgdGFrZSBhbnkgYWN0aW9uIGluIGRlcm9nYXRpb24KLW9mIFN1bidzIGFuZC9vciBpdHMgbGljZW5zb3JzJyByaWdodHMgdG8gU29mdHdhcmUuIFN1biBtYXkgdGVybWluYXRlCi10aGlzIEFncmVlbWVudCBzaG91bGQgYW55IFNvZnR3YXJlIGJlY29tZSwgb3IgaW4gU3VuJ3MgcmVhc29uYWJsZQotb3BpbmlvbiBsaWtlbHkgdG8gYmVjb21lLCB0aGUgc3ViamVjdCBvZiBhIGNsYWltIG9mIGludGVsbGVjdHVhbAotcHJvcGVydHkgaW5mcmluZ2VtZW50IG9yIHRyYWRlIHNlY3JldCBtaXNhcHByb3ByaWF0aW9uLiBVcG9uCi10ZXJtaW5hdGlvbiwgeW91IHdpbGwgY2Vhc2UgdXNlIG9mLCBhbmQgZGVzdHJveSwgU29mdHdhcmUgYW5kIGNvbmZpcm0KLWNvbXBsaWFuY2UgaW4gd3JpdGluZyB0byBTdW4uIFNlY3Rpb25zIDEsIDUsIDYsIDcsIGFuZCA5LTE1IHdpbGwKLXN1cnZpdmUgdGVybWluYXRpb24gb2YgdGhlIEFncmVlbWVudC4KK0hvdyB0byBBcHBseSBUaGVzZSBUZXJtcyB0byBZb3VyIE5ldyBQcm9ncmFtcwogCi03LiAgICAgIEphdmEgQ29tcGF0aWJpbGl0eSBhbmQgT3BlbiBTb3VyY2UuCitJZiB5b3UgZGV2ZWxvcCBhIG5ldyBwcm9ncmFtLCBhbmQgeW91IHdhbnQgaXQgdG8gYmUgb2YgdGhlIGdyZWF0ZXN0IHBvc3NpYmxlIHVzZSB0byB0aGUgcHVibGljLCB0aGUgYmVzdCB3YXkgdG8gYWNoaWV2ZSB0aGlzIGlzIHRvIG1ha2UgaXQgZnJlZSBzb2Z0d2FyZSB3aGljaCBldmVyeW9uZSBjYW4gcmVkaXN0cmlidXRlIGFuZCBjaGFuZ2UgdW5kZXIgdGhlc2UgdGVybXMuCiAKLVNvZnR3YXJlIG1heSBjb250YWluIEphdmEgdGVjaG5vbG9neS4gWW91IG1heSBub3QgY3JlYXRlIGFkZGl0aW9uYWwKLWNsYXNzZXMgdG8sIG9yIG1vZGlmaWNhdGlvbnMgb2YsIHRoZSBKYXZhIHRlY2hub2xvZ3ksIGV4Y2VwdCB1bmRlcgotY29tcGF0aWJpbGl0eSByZXF1aXJlbWVudHMgYXZhaWxhYmxlIHVuZGVyIGEgc2VwYXJhdGUgYWdyZWVtZW50Ci1hdmFpbGFibGUgYXQgd3d3LmphdmEubmV0LgorVG8gZG8gc28sIGF0dGFjaCB0aGUgZm9sbG93aW5nIG5vdGljZXMgdG8gdGhlIHByb2dyYW0uIEl0IGlzIHNhZmVzdCB0byBhdHRhY2ggdGhlbSB0byB0aGUgc3RhcnQgb2YgZWFjaCBzb3VyY2UgZmlsZSB0byBtb3N0IGVmZmVjdGl2ZWx5IGNvbnZleSB0aGUgZXhjbHVzaW9uIG9mIHdhcnJhbnR5OyBhbmQgZWFjaCBmaWxlIHNob3VsZCBoYXZlIGF0IGxlYXN0IHRoZSAiY29weXJpZ2h0IiBsaW5lIGFuZCBhIHBvaW50ZXIgdG8gd2hlcmUgdGhlIGZ1bGwgbm90aWNlIGlzIGZvdW5kLgogCi1TdW4gc3VwcG9ydHMgYW5kIGJlbmVmaXRzIGZyb20gdGhlIGdsb2JhbCBjb21tdW5pdHkgb2Ygb3BlbiBzb3VyY2UKLWRldmVsb3BlcnMsIGFuZCB0aGFua3MgdGhlIGNvbW11bml0eSBmb3IgaXRzIGltcG9ydGFudCBjb250cmlidXRpb25zCi1hbmQgb3BlbiBzdGFuZGFyZHMtYmFzZWQgdGVjaG5vbG9neSwgd2hpY2ggU3VuIGhhcyBhZG9wdGVkIGludG8gbWFueSBvZgotaXRzIHByb2R1Y3RzLgorICAgT25lIGxpbmUgdG8gZ2l2ZSB0aGUgcHJvZ3JhbSdzIG5hbWUgYW5kIGEgYnJpZWYgaWRlYSBvZiB3aGF0IGl0IGRvZXMuCiAKLVBsZWFzZSBub3RlIHRoYXQgcG9ydGlvbnMgb2YgU29mdHdhcmUgbWF5IGJlIHByb3ZpZGVkIHdpdGggbm90aWNlcyBhbmQKLW9wZW4gc291cmNlIGxpY2Vuc2VzIGZyb20gc3VjaCBjb21tdW5pdGllcyBhbmQgdGhpcmQgcGFydGllcyB0aGF0Ci1nb3Zlcm4gdGhlIHVzZSBvZiB0aG9zZSBwb3J0aW9ucywgYW5kIGFueSBsaWNlbnNlcyBncmFudGVkIGhlcmV1bmRlciBkbwotbm90IGFsdGVyIGFueSByaWdodHMgYW5kIG9ibGlnYXRpb25zIHlvdSBtYXkgaGF2ZSB1bmRlciBzdWNoIG9wZW4KLXNvdXJjZSBsaWNlbnNlcywgaG93ZXZlciwgdGhlIGRpc2NsYWltZXIgb2Ygd2FycmFudHkgYW5kIGxpbWl0YXRpb24gb2YKLWxpYWJpbGl0eSBwcm92aXNpb25zIGluIHRoaXMgQWdyZWVtZW50IHdpbGwgYXBwbHkgdG8gYWxsIFNvZnR3YXJlIGluCi10aGlzIGRpc3RyaWJ1dGlvbi4KKyAgIENvcHlyaWdodCAoQykKIAotOC4gICAgICBMaW1pdGVkIFdhcnJhbnR5LgorICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KIAotU3VuIHdhcnJhbnRzIHRvIHlvdSB0aGF0IGZvciBhIHBlcmlvZCBvZiA5MCBkYXlzIGZyb20gdGhlIGRhdGUgb2YKLXB1cmNoYXNlLCBhcyBldmlkZW5jZWQgYnkgYSBjb3B5IG9mIHRoZSByZWNlaXB0LCB0aGUgbWVkaWEgb24gd2hpY2gKLVNvZnR3YXJlIGlzIGZ1cm5pc2hlZCAoaWYgYW55KSB3aWxsIGJlIGZyZWUgb2YgZGVmZWN0cyBpbiBtYXRlcmlhbHMgYW5kCi13b3JrbWFuc2hpcCB1bmRlciBub3JtYWwgdXNlLiBFeGNlcHQgZm9yIHRoZSBmb3JlZ29pbmcsIFNvZnR3YXJlIGlzCi1wcm92aWRlZCAiQVMgSVMiLiBZb3VyIGV4Y2x1c2l2ZSByZW1lZHkgYW5kIFN1bidzIGVudGlyZSBsaWFiaWxpdHkKLXVuZGVyIHRoaXMgbGltaXRlZCB3YXJyYW50eSB3aWxsIGJlIGF0IFN1bidzIG9wdGlvbiB0byByZXBsYWNlIFNvZnR3YXJlCi1tZWRpYSBvciByZWZ1bmQgdGhlIGZlZSBwYWlkIGZvciBTb2Z0d2FyZS4gU29tZSBzdGF0ZXMgZG8gbm90IGFsbG93Ci1saW1pdGF0aW9ucyBvbiBjZXJ0YWluIGltcGxpZWQgd2FycmFudGllcywgc28gdGhlIGFib3ZlIG1heSBub3QgYXBwbHkKLXRvIHlvdS4gVGhpcyBsaW1pdGVkIHdhcnJhbnR5IGdpdmVzIHlvdSBzcGVjaWZpYyBsZWdhbCByaWdodHMuIFlvdSBtYXkKLWhhdmUgb3RoZXJzLCB3aGljaCB2YXJ5IGZyb20gc3RhdGUgdG8gc3RhdGUuCisgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiBTZWUgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCiAKLTkuICAgICAgRGlzY2xhaW1lciBvZiBXYXJyYW50eS4KKyAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCiAKLVVOTEVTUyBTUEVDSUZJRUQgSU4gVEhJUyBBR1JFRU1FTlQsIEFMTCBFWFBSRVNTIE9SIElNUExJRUQgQ09ORElUSU9OUywKLVJFUFJFU0VOVEFUSU9OUyBBTkQgV0FSUkFOVElFUywgSU5DTFVESU5HIEFOWSBJTVBMSUVEIFdBUlJBTlRZIE9GCi1NRVJDSEFOVEFCSUxJVFksIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HRU1FTlQKLUFSRSBESVNDTEFJTUVELCBFWENFUFQgVE8gVEhFIEVYVEVOVCBUSEFUIFRIRVNFIERJU0NMQUlNRVJTIEFSRSBIRUxEIFRPCi1CRSBMRUdBTExZIElOVkFMSUQuCitBbHNvIGFkZCBpbmZvcm1hdGlvbiBvbiBob3cgdG8gY29udGFjdCB5b3UgYnkgZWxlY3Ryb25pYyBhbmQgcGFwZXIgbWFpbC4KIAotMTAuICAgICBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4KK0lmIHRoZSBwcm9ncmFtIGlzIGludGVyYWN0aXZlLCBtYWtlIGl0IG91dHB1dCBhIHNob3J0IG5vdGljZSBsaWtlIHRoaXMgd2hlbiBpdCBzdGFydHMgaW4gYW4gaW50ZXJhY3RpdmUgbW9kZToKIAotVE8gVEhFIEVYVEVOVCBOT1QgUFJPSElCSVRFRCBCWSBMQVcsIElOIE5PIEVWRU5UIFdJTEwgU1VOIE9SIElUUwotTElDRU5TT1JTIEJFIExJQUJMRSBGT1IgQU5ZIExPU1QgUkVWRU5VRSwgUFJPRklUIE9SIERBVEEsIE9SIEZPUgotU1BFQ0lBTCwgSU5ESVJFQ1QsIENPTlNFUVVFTlRJQUwsIElOQ0lERU5UQUwgT1IgUFVOSVRJVkUgREFNQUdFUywKLUhPV0VWRVIgQ0FVU0VEIFJFR0FSRExFU1MgT0YgVEhFIFRIRU9SWSBPRiBMSUFCSUxJVFksIEFSSVNJTkcgT1VUIE9GIE9SCi1SRUxBVEVEIFRPIFRIRSBVU0UgT0YgT1IgSU5BQklMSVRZIFRPIFVTRSBTT0ZUV0FSRSwgRVZFTiBJRiBTVU4gSEFTCi1CRUVOIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFUy4gSW4gbm8gZXZlbnQgd2lsbCBTdW4ncwotbGlhYmlsaXR5IHRvIHlvdSwgd2hldGhlciBpbiBjb250cmFjdCwgdG9ydCAoaW5jbHVkaW5nIG5lZ2xpZ2VuY2UpLCBvcgotb3RoZXJ3aXNlLCBleGNlZWQgdGhlIGFtb3VudCBwYWlkIGJ5IHlvdSBmb3IgU29mdHdhcmUgdW5kZXIgdGhpcwotQWdyZWVtZW50LiBUaGUgZm9yZWdvaW5nIGxpbWl0YXRpb25zIHdpbGwgYXBwbHkgZXZlbiBpZiB0aGUgYWJvdmUKLXN0YXRlZCB3YXJyYW50eSBmYWlscyBvZiBpdHMgZXNzZW50aWFsIHB1cnBvc2UuIFNvbWUgc3RhdGVzIGRvIG5vdAotYWxsb3cgdGhlIGV4Y2x1c2lvbiBvZiBpbmNpZGVudGFsIG9yIGNvbnNlcXVlbnRpYWwgZGFtYWdlcywgc28gc29tZSBvZgotdGhlIHRlcm1zIGFib3ZlIG1heSBub3QgYmUgYXBwbGljYWJsZSB0byB5b3UuCisgICBHbm9tb3Zpc2lvbiB2ZXJzaW9uIDY5LCBDb3B5cmlnaHQgKEMpIHllYXIgbmFtZSBvZiBhdXRob3IKKyAgIEdub21vdmlzaW9uIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWTsgZm9yIGRldGFpbHMgdHlwZSBgc2hvdyB3Jy4gVGhpcyBpcyBmcmVlIHNvZnR3YXJlLCBhbmQgeW91IGFyZSB3ZWxjb21lIHRvIHJlZGlzdHJpYnV0ZSBpdCB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnM7IHR5cGUgYHNob3cgYycgZm9yIGRldGFpbHMuCiAKLTExLiAgICAgRXhwb3J0IFJlZ3VsYXRpb25zLgorVGhlIGh5cG90aGV0aWNhbCBjb21tYW5kcyBgc2hvdyB3JyBhbmQgYHNob3cgYycgc2hvdWxkIHNob3cgdGhlIGFwcHJvcHJpYXRlIHBhcnRzIG9mIHRoZSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlLiBPZiBjb3Vyc2UsIHRoZSBjb21tYW5kcyB5b3UgdXNlIG1heSBiZSBjYWxsZWQgc29tZXRoaW5nIG90aGVyIHRoYW4gYHNob3cgdycgYW5kIGBzaG93IGMnOyB0aGV5IGNvdWxkIGV2ZW4gYmUgbW91c2UtY2xpY2tzIG9yIG1lbnUgaXRlbXMtLXdoYXRldmVyIHN1aXRzIHlvdXIgcHJvZ3JhbS4KIAotQWxsIFNvZnR3YXJlLCBkb2N1bWVudHMsIHRlY2huaWNhbCBkYXRhLCBhbmQgYW55IG90aGVyIG1hdGVyaWFscwotZGVsaXZlcmVkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGFyZSBzdWJqZWN0IHRvIFUuUy4gZXhwb3J0IGNvbnRyb2wgbGF3cwotYW5kIG1heSBiZSBzdWJqZWN0IHRvIGV4cG9ydCBvciBpbXBvcnQgcmVndWxhdGlvbnMgaW4gb3RoZXIgY291bnRyaWVzLgotWW91IGFncmVlIHRvIGNvbXBseSBzdHJpY3RseSB3aXRoIHRoZXNlIGxhd3MgYW5kIHJlZ3VsYXRpb25zIGFuZAotYWNrbm93bGVkZ2UgdGhhdCB5b3UgaGF2ZSB0aGUgcmVzcG9uc2liaWxpdHkgdG8gb2J0YWluIGFueSBsaWNlbnNlcyB0bwotZXhwb3J0LCByZS1leHBvcnQsIG9yIGltcG9ydCBhcyBtYXkgYmUgcmVxdWlyZWQgYWZ0ZXIgZGVsaXZlcnkgdG8geW91LgorWW91IHNob3VsZCBhbHNvIGdldCB5b3VyIGVtcGxveWVyIChpZiB5b3Ugd29yayBhcyBhIHByb2dyYW1tZXIpIG9yIHlvdXIgc2Nob29sLCBpZiBhbnksIHRvIHNpZ24gYSAiY29weXJpZ2h0IGRpc2NsYWltZXIiIGZvciB0aGUgcHJvZ3JhbSwgaWYgbmVjZXNzYXJ5LiBIZXJlIGlzIGEgc2FtcGxlOyBhbHRlciB0aGUgbmFtZXM6CiAKLTEyLiAgICAgVS5TLiBHb3Zlcm5tZW50IFJlc3RyaWN0ZWQgUmlnaHRzLgorICAgWW95b2R5bmUsIEluYy4sIGhlcmVieSBkaXNjbGFpbXMgYWxsIGNvcHlyaWdodCBpbnRlcmVzdCBpbiB0aGUgcHJvZ3JhbSBgR25vbW92aXNpb24nICh3aGljaCBtYWtlcyBwYXNzZXMgYXQgY29tcGlsZXJzKSB3cml0dGVuIGJ5IEphbWVzIEhhY2tlci4KIAotSWYgU29mdHdhcmUgaXMgYmVpbmcgYWNxdWlyZWQgYnkgb3Igb24gYmVoYWxmIG9mIHRoZSBVLlMuIEdvdmVybm1lbnQgb3IKLWJ5IGEgVS5TLiBHb3Zlcm5tZW50IHByaW1lIGNvbnRyYWN0b3Igb3Igc3ViY29udHJhY3RvciAoYXQgYW55IHRpZXIpLAotdGhlbiB0aGUgR292ZXJubWVudCdzIHJpZ2h0cyBpbiBTb2Z0d2FyZSBhbmQgYWNjb21wYW55aW5nIGRvY3VtZW50YXRpb24KLXdpbGwgYmUgb25seSBhcyBzZXQgZm9ydGggaW4gdGhpcyBBZ3JlZW1lbnQ7IHRoaXMgaXMgaW4gYWNjb3JkYW5jZSB3aXRoCi00OCBDRlIgMjI3LjcyMDEgdGhyb3VnaCAyMjcuNzIwMi00IChmb3IgRGVwYXJ0bWVudCBvZiBEZWZlbnNlIChET0QpCi1hY3F1aXNpdGlvbnMpIGFuZCB3aXRoIDQ4IENGUiAyLjEwMSBhbmQgMTIuMjEyIChmb3Igbm9uLURPRAotYWNxdWlzaXRpb25zKS4KKyAgIHNpZ25hdHVyZSBvZiBUeSBDb29uLCAxIEFwcmlsIDE5ODkKKyAgIFR5IENvb24sIFByZXNpZGVudCBvZiBWaWNlCiAKLTEzLiAgICAgR292ZXJuaW5nIExhdy4KK1RoaXMgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBkb2VzIG5vdCBwZXJtaXQgaW5jb3Jwb3JhdGluZyB5b3VyIHByb2dyYW0gaW50byBwcm9wcmlldGFyeSBwcm9ncmFtcy4gSWYgeW91ciBwcm9ncmFtIGlzIGEgc3Vicm91dGluZSBsaWJyYXJ5LCB5b3UgbWF5IGNvbnNpZGVyIGl0IG1vcmUgdXNlZnVsIHRvIHBlcm1pdCBsaW5raW5nIHByb3ByaWV0YXJ5IGFwcGxpY2F0aW9ucyB3aXRoIHRoZSBsaWJyYXJ5LiBJZiB0aGlzIGlzIHdoYXQgeW91IHdhbnQgdG8gZG8sIHVzZSB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBpbnN0ZWFkIG9mIHRoaXMgTGljZW5zZS4KIAotQW55IGFjdGlvbiByZWxhdGVkIHRvIHRoaXMgQWdyZWVtZW50IHdpbGwgYmUgZ292ZXJuZWQgYnkgQ2FsaWZvcm5pYSBsYXcKLWFuZCBjb250cm9sbGluZyBVLlMuIGZlZGVyYWwgbGF3LiBObyBjaG9pY2Ugb2YgbGF3IHJ1bGVzIG9mIGFueQotanVyaXNkaWN0aW9uIHdpbGwgYXBwbHkuCiAKLTE0LiAgICAgU2V2ZXJhYmlsaXR5LgorIkNMQVNTUEFUSCIgRVhDRVBUSU9OIFRPIFRIRSBHUEwgVkVSU0lPTiAyCiAKLUlmIGFueSBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCB0aGlzCi1BZ3JlZW1lbnQgd2lsbCByZW1haW4gaW4gZWZmZWN0IHdpdGggdGhlIHByb3Zpc2lvbiBvbWl0dGVkLCB1bmxlc3MKLW9taXNzaW9uIHdvdWxkIGZydXN0cmF0ZSB0aGUgaW50ZW50IG9mIHRoZSBwYXJ0aWVzLCBpbiB3aGljaCBjYXNlIHRoaXMKLUFncmVlbWVudCB3aWxsIGltbWVkaWF0ZWx5IHRlcm1pbmF0ZS4KK0NlcnRhaW4gc291cmNlIGZpbGVzIGRpc3RyaWJ1dGVkIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gYXJlIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjbGFyaWZpY2F0aW9uIGFuZCBzcGVjaWFsIGV4Y2VwdGlvbiB0byB0aGUgR1BMIFZlcnNpb24gMiwgYnV0IG9ubHkgd2hlcmUgU3VuIGhhcyBleHByZXNzbHkgaW5jbHVkZWQgaW4gdGhlIHBhcnRpY3VsYXIgc291cmNlIGZpbGUncyBoZWFkZXIgdGhlIHdvcmRzCiAKLTE1LiAgICAgSW50ZWdyYXRpb24uCisiU3VuIGRlc2lnbmF0ZXMgdGhpcyBwYXJ0aWN1bGFyIGZpbGUgYXMgc3ViamVjdCB0byB0aGUgIkNsYXNzcGF0aCIgZXhjZXB0aW9uIGFzIHByb3ZpZGVkIGJ5IFN1biBpbiB0aGUgTGljZW5zZSBmaWxlIHRoYXQgYWNjb21wYW5pZWQgdGhpcyBjb2RlLiIKIAotVGhpcyBBZ3JlZW1lbnQsIGluY2x1ZGluZyBhbnkgdGVybXMgY29udGFpbmVkIGluIHlvdXIgRW50aXRsZW1lbnQsIGlzCi10aGUgZW50aXJlIGFncmVlbWVudCBiZXR3ZWVuIHlvdSBhbmQgU3VuIHJlbGF0aW5nIHRvIGl0cyBzdWJqZWN0Ci1tYXR0ZXIuIEl0IHN1cGVyc2VkZXMgYWxsIHByaW9yIG9yIGNvbnRlbXBvcmFuZW91cyBvcmFsIG9yIHdyaXR0ZW4KLWNvbW11bmljYXRpb25zLCBwcm9wb3NhbHMsIHJlcHJlc2VudGF0aW9ucyBhbmQgd2FycmFudGllcyBhbmQgcHJldmFpbHMKLW92ZXIgYW55IGNvbmZsaWN0aW5nIG9yIGFkZGl0aW9uYWwgdGVybXMgb2YgYW55IHF1b3RlLCBvcmRlciwKLWFja25vd2xlZGdtZW50LCBvciBvdGhlciBjb21tdW5pY2F0aW9uIGJldHdlZW4gdGhlIHBhcnRpZXMgcmVsYXRpbmcgdG8KLWl0cyBzdWJqZWN0IG1hdHRlciBkdXJpbmcgdGhlIHRlcm0gb2YgdGhpcyBBZ3JlZW1lbnQuIE5vIG1vZGlmaWNhdGlvbgotb2YgdGhpcyBBZ3JlZW1lbnQgd2lsbCBiZSBiaW5kaW5nLCB1bmxlc3MgaW4gd3JpdGluZyBhbmQgc2lnbmVkIGJ5IGFuCi1hdXRob3JpemVkIHJlcHJlc2VudGF0aXZlIG9mIGVhY2ggcGFydHkuCitMaW5raW5nIHRoaXMgbGlicmFyeSBzdGF0aWNhbGx5IG9yIGR5bmFtaWNhbGx5IHdpdGggb3RoZXIgbW9kdWxlcyBpcyBtYWtpbmcgYSBjb21iaW5lZCB3b3JrIGJhc2VkIG9uIHRoaXMgbGlicmFyeS4gVGh1cywgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBWZXJzaW9uIDIgY292ZXIgdGhlIHdob2xlIGNvbWJpbmF0aW9uLgogCi1QbGVhc2UgY29udGFjdCBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIDQxNTAgTmV0d29yayBDaXJjbGUsIFNhbnRhIENsYXJhLAotQ2FsaWZvcm5pYSA5NTA1NCBpZiB5b3UgaGF2ZSBxdWVzdGlvbnMuCitBcyBhIHNwZWNpYWwgZXhjZXB0aW9uLCB0aGUgY29weXJpZ2h0IGhvbGRlcnMgb2YgdGhpcyBsaWJyYXJ5IGdpdmUgeW91IHBlcm1pc3Npb24gdG8gbGluayB0aGlzIGxpYnJhcnkgd2l0aCBpbmRlcGVuZGVudCBtb2R1bGVzIHRvIHByb2R1Y2UgYW4gZXhlY3V0YWJsZSwgcmVnYXJkbGVzcyBvZiB0aGUgbGljZW5zZSB0ZXJtcyBvZiB0aGVzZSBpbmRlcGVuZGVudCBtb2R1bGVzLCBhbmQgdG8gY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgcmVzdWx0aW5nIGV4ZWN1dGFibGUgdW5kZXIgdGVybXMgb2YgeW91ciBjaG9pY2UsIHByb3ZpZGVkIHRoYXQgeW91IGFsc28gbWVldCwgZm9yIGVhY2ggbGlua2VkIGluZGVwZW5kZW50IG1vZHVsZSwgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBsaWNlbnNlIG9mIHRoYXQgbW9kdWxlLj8gQW4gaW5kZXBlbmRlbnQgbW9kdWxlIGlzIGEgbW9kdWxlIHdoaWNoIGlzIG5vdCBkZXJpdmVkIGZyb20gb3IgYmFzZWQgb24gdGhpcyBsaWJyYXJ5Lj8gSWYgeW91IG1vZGlmeSB0aGlzIGxpYnJhcnksIHlvdSBtYXkgZXh0ZW5kIHRoaXMgZXhjZXB0aW9uIHRvIHlvdXIgdmVyc2lvbiBvZiB0aGUgbGlicmFyeSwgYnV0IHlvdSBhcmUgbm90IG9ibGlnYXRlZCB0byBkbyBzby4/IElmIHlvdSBkbyBub3Qgd2lzaCB0byBkbyBzbywgZGVsZXRlIHRoaXMgZXhjZXB0aW9uIHN0YXRlbWVudCBmcm9tIHlvdXIgdmVyc2lvbi4K