ICAgQ09ERVNPVVJDRVJZLCBJTkMuICgiQ09ERVNPVVJDRVJZIikgSVMgV0lMTElORyBUTyBMSUNFTlNFIFRIRQogICBTT0ZUV0FSRSBPTkxZIFVQT04gVEhFIENPTkRJVElPTiBUSEFUIFlPVSBBQ0NFUFQgQUxMIE9GIFRIRQogICBURVJNUyBDT05UQUlORUQgSU4gVEhJUyBTT0ZUV0FSRSBMSUNFTlNFIEFHUkVFTUVOVC4gUExFQVNFCiAgIFJFQUQgVEhFIFRFUk1TIENBUkVGVUxMWS4gQlkgQ0xJQ0tJTkcgT04gIkkgYWNjZXB0IHRoZSB0ZXJtcwogICBvZiB0aGUgTGljZW5zZSBBZ3JlZW1lbnQiLCBZT1UgV0lMTCBJTkRJQ0FURSBZT1VSIEFHUkVFTUVOVAogICBXSVRIIFRIRU0uIElGIFlPVSBBUkUgRU5URVJJTkcgSU5UTyBUSElTIEFHUkVFTUVOVCBPTiBCRUhBTEYKICAgT0YgQSBDT01QQU5ZIE9SIE9USEVSIExFR0FMIEVOVElUWSwgWU9VUiBBQ0NFUFRBTkNFCiAgIFJFUFJFU0VOVFMgVEhBVCBZT1UgSEFWRSBUSEUgQVVUSE9SSVRZIFRPIEJJTkQgU1VDSCBFTlRJVFkgVE8KICAgVEhFU0UgVEVSTVMsIElOIFdISUNIIENBU0UgIllPVSIgT1IgIllPVVIiIFNIQUxMIFJFRkVSIFRPCiAgIFlPVVIgRU5USVRZLiBJRiBZT1UgRE8gTk9UIEFHUkVFIFdJVEggVEhFU0UgVEVSTVMsIE9SIElGIFlPVQogICBETyBOT1QgSEFWRSBUSEUgQVVUSE9SSVRZIFRPIEJJTkQgWU9VUiBFTlRJVFksIFRIRU4KICAgQ09ERVNPVVJDRVJZIElTIFVOV0lMTElORyBUTyBMSUNFTlNFIFRIRSBTT0ZUV0FSRS4KICAgU291cmNlcnkgRysrIFNvZnR3YXJlIExpY2Vuc2UgQWdyZWVtZW50CiAgICAxLiBQYXJ0aWVzLgogICAgICAgVGhlIHBhcnRpZXMgdG8gdGhpcyBBZ3JlZW1lbnQgYXJlIHlvdSwgdGhlIGxpY2Vuc2VlIChZb3UKICAgICAgIG9yIExpY2Vuc2VlKSBhbmQgQ29kZVNvdXJjZXJ5LiBJZiBZb3UgYXJlIG5vdCBhY3Rpbmcgb24KICAgICAgIGJlaGFsZiBvZiBZb3Vyc2VsZiBhcyBhbiBpbmRpdmlkdWFsLCB0aGVuIFlvdSBtZWFucyBZb3VyCiAgICAgICBjb21wYW55IG9yIG9yZ2FuaXphdGlvbi4KICAgIDIuIFRoZSBTb2Z0d2FyZQogICAgICAgVGhlIFNvZnR3YXJlIGxpY2Vuc2VkIHVuZGVyIHRoaXMgQWdyZWVtZW50IGNvbnNpc3RzIG9mCiAgICAgICBjb21wdXRlciBwcm9ncmFtcyBhbmQgZG9jdW1lbnRhdGlvbiByZWZlcnJlZCB0byBhcwogICAgICAgU291cmNlcnkgRysrIExpdGUgRWRpdGlvbiAodGhlIFNvZnR3YXJlKS4KICAgIDMuIERlZmluaXRpb25zLgogICAgICAgICAxLiBDb2RlU291cmNlcnkgUHJvcHJpZXRhcnkgQ29tcG9uZW50cy4KICAgICAgICAgICAgVGhlIGNvbXBvbmVudHMgb2YgdGhlIFNvZnR3YXJlIHRoYXQgYXJlIG93bmVkIGFuZC9vcgogICAgICAgICAgICBsaWNlbnNlZCBieSBDb2RlU291cmNlcnkgYW5kIGFyZSBub3Qgc3ViamVjdCB0byBhCiAgICAgICAgICAgIGZyZWUgc29mdHdhcmUgb3Igb3BlbiBzb3VyY2UgbGljZW5zZSwgc3VjaCBhcyB0aGUKICAgICAgICAgICAgR05VIFB1YmxpYyBMaWNlbnNlLiBUaGUgQ29kZVNvdXJjZXJ5IFByb3ByaWV0YXJ5CiAgICAgICAgICAgIENvbXBvbmVudHMgb2YgdGhlIFNvZnR3YXJlIGluY2x1ZGUsIHdpdGhvdXQKICAgICAgICAgICAgbGltaXRhdGlvbiwgdGhlIFNvdXJjZXJ5IEcrKyBJbnN0YWxsZXIsIGFueSBTb3VyY2VyeQogICAgICAgICAgICBHKysgRWNsaXBzZSBwbHVnLWlucywgdGhlIENvZGVTb3VyY2VyeSBDIExpYnJhcnkKICAgICAgICAgICAgKENTTElCQyksIGFuZCBhbnkgU291cmNlcnkgRysrIERlYnVnIFNwcml0ZS4gRm9yIGEKICAgICAgICAgICAgY29tcGxldGUgbGlzdCwgcmVmZXIgdG8gdGhlIEdldHRpbmcgU3RhcnRlZCBHdWlkZQogICAgICAgICAgICBpbmNsdWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgICAgICAgIDIuIE9wZW4gU291cmNlIFNvZnR3YXJlIENvbXBvbmVudHMuCiAgICAgICAgICAgIFRoZSBjb21wb25lbnRzIG9mIHRoZSBTb2Z0d2FyZSB0aGF0IGFyZSBzdWJqZWN0IHRvIGEKICAgICAgICAgICAgZnJlZSBzb2Z0d2FyZSBvciBvcGVuIHNvdXJjZSBsaWNlbnNlLCBzdWNoIGFzIHRoZQogICAgICAgICAgICBHTlUgUHVibGljIExpY2Vuc2UuCiAgICAgICAgIDMuIFByb3ByaWV0YXJ5IFJpZ2h0cy4KICAgICAgICAgICAgQWxsIHJpZ2h0cyBpbiBhbmQgdG8gY29weXJpZ2h0cywgcmlnaHRzIHRvIHJlZ2lzdGVyCiAgICAgICAgICAgIGNvcHlyaWdodHMsIHRyYWRlIHNlY3JldHMsIGludmVudGlvbnMsIHBhdGVudHMsCiAgICAgICAgICAgIHBhdGVudCByaWdodHMsIHRyYWRlbWFya3MsIHRyYWRlbWFyayByaWdodHMsCiAgICAgICAgICAgIGNvbmZpZGVudGlhbCBhbmQgcHJvcHJpZXRhcnkgaW5mb3JtYXRpb24gcHJvdGVjdGVkCiAgICAgICAgICAgIHVuZGVyIGNvbnRyYWN0IG9yIG90aGVyd2lzZSB1bmRlciBsYXcsIGFuZCBvdGhlcgogICAgICAgICAgICBzaW1pbGFyIHJpZ2h0cyBvciBpbnRlcmVzdHMgaW4gaW50ZWxsZWN0dWFsIG9yCiAgICAgICAgICAgIGluZHVzdHJpYWwgcHJvcGVydHkuCiAgICAgICAgIDQuIFJlZGlzdHJpYnV0YWJsZSBDb21wb25lbnRzLgogICAgICAgICAgICBUaGUgQ29kZVNvdXJjZXJ5IFByb3ByaWV0YXJ5IENvbXBvbmVudHMgdGhhdCBhcmUKICAgICAgICAgICAgaW50ZW5kZWQgdG8gYmUgaW5jb3Jwb3JhdGVkIG9yIGxpbmtlZCBpbnRvIExpY2Vuc2VlCiAgICAgICAgICAgIG9iamVjdCBjb2RlIGRldmVsb3BlZCB3aXRoIHRoZSBTb2Z0d2FyZS4gVGhlCiAgICAgICAgICAgIFJlZGlzdHJpYnV0YWJsZSBDb21wb25lbnRzIG9mIHRoZSBTb2Z0d2FyZSBpbmNsdWRlLAogICAgICAgICAgICB3aXRob3V0IGxpbWl0YXRpb24sIENTTElCQyBhbmQgdGhlIENvZGVTb3VyY2VyeQogICAgICAgICAgICBDb21tb24gU3RhcnR1cCBDb2RlIFNlcXVlbmNlIChDUzMpLiBGb3IgYSBjb21wbGV0ZQogICAgICAgICAgICBsaXN0LCByZWZlciB0byB0aGUgR2V0dGluZyBTdGFydGVkIEd1aWRlIGluY2x1ZGVkCiAgICAgICAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KICAgIDQuIExpY2Vuc2UgR3JhbnQgdG8gUHJvcHJpZXRhcnkgQ29tcG9uZW50cyBvZiB0aGUgU29mdHdhcmUuCiAgICAgICBZb3UgYXJlIGdyYW50ZWQgYSBub24tZXhjbHVzaXZlLCByb3lhbHR5LWZyZWUgbGljZW5zZSAoYSkKICAgICAgIHRvIGluc3RhbGwgYW5kIHVzZSB0aGUgQ29kZVNvdXJjZXJ5IFByb3ByaWV0YXJ5CiAgICAgICBDb21wb25lbnRzIG9mIHRoZSBTb2Z0d2FyZSwgKGIpIHRvIHRyYW5zbWl0IHRoZQogICAgICAgQ29kZVNvdXJjZXJ5IFByb3ByaWV0YXJ5IENvbXBvbmVudHMgb3ZlciBhbiBpbnRlcm5hbAogICAgICAgY29tcHV0ZXIgbmV0d29yaywgKGMpIHRvIGNvcHkgdGhlIENvZGVTb3VyY2VyeQogICAgICAgUHJvcHJpZXRhcnkgQ29tcG9uZW50cyBmb3IgWW91ciBpbnRlcm5hbCB1c2Ugb25seSwgYW5kCiAgICAgICAoZCkgdG8gZGlzdHJpYnV0ZSB0aGUgUmVkaXN0cmlidXRhYmxlIENvbXBvbmVudChzKSBpbgogICAgICAgYmluYXJ5IGZvcm0gb25seSBhbmQgb25seSBhcyBwYXJ0IG9mIExpY2Vuc2VlIG9iamVjdCBjb2RlCiAgICAgICBkZXZlbG9wZWQgd2l0aCB0aGUgU29mdHdhcmUgdGhhdCBwcm92aWRlcyBzdWJzdGFudGlhbGx5CiAgICAgICBkaWZmZXJlbnQgZnVuY3Rpb25hbGl0eSB0aGFuIHRoZSBSZWRpc3RyaWJ1dGFibGUKICAgICAgIENvbXBvbmVudChzKS4KICAgIDUuIFJlc3RyaWN0aW9ucy4KICAgICAgIFlvdSBtYXkgbm90OiAoaSkgY29weSBvciBwZXJtaXQgb3RoZXJzIHRvIHVzZSB0aGUKICAgICAgIENvZGVTb3VyY2VyeSBQcm9wcmlldGFyeSBDb21wb25lbnRzIG9mIHRoZSBTb2Z0d2FyZSwKICAgICAgIGV4Y2VwdCBhcyBleHByZXNzbHkgcHJvdmlkZWQgYWJvdmU7IChpaSkgZGlzdHJpYnV0ZSB0aGUKICAgICAgIENvZGVTb3VyY2VyeSBQcm9wcmlldGFyeSBDb21wb25lbnRzIG9mIHRoZSBTb2Z0d2FyZSB0bwogICAgICAgYW55IHRoaXJkIHBhcnR5LCBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIGFib3ZlOyBvcgogICAgICAgKGlpaSkgcmV2ZXJzZSBlbmdpbmVlciwgZGVjb21waWxlLCBvciBkaXNhc3NlbWJsZSB0aGUKICAgICAgIENvZGVTb3VyY2VyeSBQcm9wcmlldGFyeSBDb21wb25lbnRzIG9mIHRoZSBTb2Z0d2FyZSwKICAgICAgIGV4Y2VwdCB0byB0aGUgZXh0ZW50IHRoaXMgcmVzdHJpY3Rpb24gaXMgZXhwcmVzc2x5CiAgICAgICBwcm9oaWJpdGVkIGJ5IGFwcGxpY2FibGUgbGF3LgogICAgICAgICAxLiBBUk0gS2VpbCBVTElOSzIgRHJpdmVycy4KICAgICAgICAgICAgU291cmNlcnkgRysrIG1heSBpbmNsdWRlIFVMSU5LMiBkcml2ZXJzIGZyb20KICAgICAgICAgICAgQVJNLCBMdGQuIElmIHRoZXNlIGRyaXZlcnMgYXJlIGluY2x1ZGVkLCB0aGUKICAgICAgICAgICAgZm9sbG93aW5nIGFkZGl0aW9uYWwgdGVybXMgYW5kIGNvbmRpdGlvbnMgYXBwbHk6CiAgICAgICAgICAgICAgMS4gWW91IG1heSB1c2UgdGhlIFVMSU5LMiBkcml2ZXJzIG9ubHkgaW4KICAgICAgICAgICAgICAgICBjb25qdW5jdGlvbiB3aXRoIGEgY29tcGF0aWJsZSBBUk0gS2VpbCBVTElOSzIKICAgICAgICAgICAgICAgICBoYXJkd2FyZSB1bml0IG1hbnVmYWN0dXJlZCBieSBvciB1bmRlciBsaWNlbnNlCiAgICAgICAgICAgICAgICAgZnJvbSBBUk0gYW5kIHB1cmNoYXNlZCBmcm9tIENvZGVTb3VyY2VyeSwgQVJNLAogICAgICAgICAgICAgICAgIG9yIGEgZGlzdHJpYnV0b3IgYXV0aG9yaXplZCBieSBBUk0uCiAgICAgICAgICAgICAgMi4gWW91IG1heSB1c2UgdGhlIFVMSU5LMiBkcml2ZXJzIG9ubHkgdG8gY29ubmVjdAogICAgICAgICAgICAgICAgIHRvIHRoZSBHTlUgRGVidWdnZXIgaW5jbHVkZWQgaW4gU291cmNlcnkgRysrLgogICAgICAgICAgICAgIDMuIFRoZSBVTElOSzIgZHJpdmVycyBhcmUgbm90IHN1cHBvcnRlZCBieSBBUk0sCiAgICAgICAgICAgICAgICAgTHRkLjsgWW91IHNob3VsZCBjb250YWN0IENvZGVTb3VyY2VyeSBmb3IgYW55CiAgICAgICAgICAgICAgICAgc3VwcG9ydCByZWdhcmRpbmcgdGhlIFVMSU5LMiBkcml2ZXJzLgogICAgICAgICAgICAgIDQuIFlvdSBtYXkgbm90IHJlZGlzdHJpYnV0ZSBvciB0cmFuc2ZlciB0aGUgVUxJTksyCiAgICAgICAgICAgICAgICAgZHJpdmVycy4KICAgICAgICAgICAgICA1LiBZb3UgbWF5IG5vdCB0cmFuc2xhdGUsIGFkYXB0LCBhcnJhbmdlIG9yCiAgICAgICAgICAgICAgICAgb3RoZXJ3aXNlIGFsdGVyIHRoZSBvYmplY3QgY29kZSBvZiB0aGUgVUxJTksyCiAgICAgICAgICAgICAgICAgZHJpdmVycyAoaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbiBjb3B5aW5nLAogICAgICAgICAgICAgICAgIGFkYXB0aW5nIG9yIHJldmVyc2UgY29tcGlsaW5nIHRoZSBvYmplY3QgY29kZQogICAgICAgICAgICAgICAgIG9mIHRoZSBVTElOSzIgZHJpdmVycyBmb3IgdGhlIHB1cnBvc2Ugb2YgZXJyb3IKICAgICAgICAgICAgICAgICBjb3JyZWN0aW9uKSBleGNlcHQgYXMgYWxsb3dlZCBieSBhcHBsaWNhYmxlCiAgICAgICAgICAgICAgICAgbGF3LgogICAgICAgICAgICAgIDYuIFlvdSBtYXkgbm90IHJlbW92ZSBvciBvYnN0cnVjdCBhbnkgbm90aWNlIG9yCiAgICAgICAgICAgICAgICAgbWFya2VyIGluY29ycG9yYXRlZCBpbnRvIHRoZSBVTElOSzIgZHJpdmVycyB0bwogICAgICAgICAgICAgICAgIHByb3RlY3QgQVJNJ3Mgb3IgdGhpcmQgcGFydGllcycgaW50ZWxsZWN0dWFsCiAgICAgICAgICAgICAgICAgcHJvcGVydHkgb3IgUHJvcHJpZXRhcnkgUmlnaHRzLgogICAgICAgICAgICAgIDcuIFRoZSBVTElOSzIgZHJpdmVycyBhcmUgbGljZW5zZWQsIG5vdCBzb2xkOyBhbGwKICAgICAgICAgICAgICAgICByaWdodCwgdGl0bGUgYW5kIGludGVyZXN0IHRoZXJlaW4gaXMgcmVzZXJ2ZWQKICAgICAgICAgICAgICAgICB0byBDb2RlU291cmNlcnkgb3IgaXRzIGxpY2Vuc29ycywgYW5kIFlvdQogICAgICAgICAgICAgICAgIGFjcXVpcmUgbm8gcmlnaHQsIHRpdGxlIG9yIGludGVyZXN0IHRoZXJlaW4uCiAgICAgICAgIDIuIFNFR0dFUiBKLUxpbmsgRGV2aWNlcy4KICAgICAgICAgICAgU291cmNlcnkgRysrIExpdGUgaW5jbHVkZXMgcHJvcHJpZXRhcnkgc29mdHdhcmUgZnJvbQogICAgICAgICAgICBTRUdHRVIgTWljcm9jb250cm9sbGVyIEdtYkggJiBDby5LRyB0aGF0IGFsbG93cyB0aGUKICAgICAgICAgICAgdXNlIG9mIFNFR0dFUiBKLUxpbmsgZGVidWcgZGV2aWNlcyB3aXRoIHRoZSBTb3VyY2VyeQogICAgICAgICAgICBHKysgTGl0ZSBEZWJ1ZyBTcHJpdGUuIFlvdSBtYXkgdXNlIHNvZnR3YXJlIGZyb20KICAgICAgICAgICAgU0VHR0VSIG9ubHkgdW5kZXIgdGhlIFNFR0dFUiBKLUxpbmsgc29mdHdhcmUgdGVybXMKICAgICAgICAgICAgb2YgdXNlIGFuZCBsaWNlbnNlIGFncmVlbWVudC4KICAgICAgICAgMy4gU291cmNlcnkgRysrIERlYnVnIFNwcml0ZSB3aXRoIEFSTSBTV0QuCiAgICAgICAgICAgIFRoZSBTb3VyY2VyeSBHKysgRGVidWcgU3ByaXRlIGZvciBBUk0gYW5kIFN0ZWxsYXJpcwogICAgICAgICAgICBwcm9jZXNzb3JzIGluY2x1ZGVzIHNvZnR3YXJlIGZvciBBUk0gU1dEIHN1cHBvcnQKICAgICAgICAgICAgZnJvbSBBUk0sIEx0ZC4gWW91IG1heSB1c2UgdGhlIEFSTSBTV0Qgc29mdHdhcmUgb25seQogICAgICAgICAgICBpbiBjb25qdW5jdGlvbiB3aXRoIGEgQ29ydGV4LU0xIG9yIENvcnRleC1NMwogICAgICAgICAgICBtaWNyb3Byb2Nlc3NvciBtYW51ZmFjdHVyZWQgdW5kZXIgbGljZW5zZSBmcm9tIEFSTS4KICAgICAgICAgNC4gU291cmNlcnkgRysrIERlYnVnIFNwcml0ZSBmb3IgUCZFIERldmljZXMuCiAgICAgICAgICAgIFlvdSBtYXkgdXNlIHRoZSBTb3VyY2VyeSBHKysgRGVidWcgU3ByaXRlIGZvciBQJkUKICAgICAgICAgICAgb25seSBpbiBjb25qdW5jdGlvbiB3aXRoIENvbGRGaXJlIG1pY3JvcHJvY2Vzc29ycwogICAgICAgICAgICBhbmQgd2l0aCBkZWJ1Z2dpbmcgZGV2aWNlcyBwcm9kdWNlZCBieSBQJkUKICAgICAgICAgICAgTWljcm9jb21wdXRlciBTeXN0ZW1zLgogICAgICAgICAgICBTb3VyY2VyeSBHKysgRGVidWcgU3ByaXRlIGZvciBQJkUgRGV2aWNlcy4KICAgICAgICAgICAgVGhpcyBzb2Z0d2FyZSBhcHBsaWNhdGlvbiBtYXkgaW5jbHVkZSBQJkUgTkdTCiAgICAgICAgICAgIERyaXZlcnMgdmVyc2lvbiAxMjAyMTAgdGhpcmQtcGFydHkgc29mdHdhcmUsIHdoaWNoCiAgICAgICAgICAgIGlzIGRpc3RyaWJ1dGVkIG9uIGFuICJBUyBJUyIgYmFzaXMsIFdJVEhPVVQgV0FSUkFOVFkKICAgICAgICAgICAgT0YgQU5ZIEtJTkQsIGVpdGhlciBleHByZXNzIG9yIGltcGxpZWQuIFAmRSBOR1MKICAgICAgICAgICAgRHJpdmVycyB2ZXJzaW9uIDEyMDIxMCBtYXkgYmUgc3ViamVjdCB0byB0aGUKICAgICAgICAgICAgZm9sbG93aW5nIGNvcHlyaWdodHM6IKkgMTk5OS0yMDAzLCBMdWthcyBHZWJhdWVyIEFsbAogICAgICAgICAgICByaWdodHMgcmVzZXJ2ZWQuIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlCiAgICAgICAgICAgIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZQogICAgICAgICAgICBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCiAgICAgICAgICAgIG1ldDoKICAgICAgICAgNS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZQogICAgICAgICAgICBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlCiAgICAgICAgICAgIGZvbGxvd2luZyBkaXNjbGFpbWVyLgogICAgICAgICA2LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlCiAgICAgICAgICAgIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZAogICAgICAgICAgICB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24gYW5kL29yCiAgICAgICAgICAgIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiAgICAgICAgIDcuIE5laXRoZXIgdGhlIG5hbWUgb2YgTHVrYXMgR2ViYXVlciBub3IgdGhlIG5hbWVzIG9mCiAgICAgICAgICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlCiAgICAgICAgICAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMKICAgICAgICAgICAgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgogICAgICAgICA4LiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUwogICAgICAgICAgICBBTkQgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKICAgICAgICAgICAgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQogICAgICAgICAgICBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCiAgICAgICAgICAgIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQKICAgICAgICAgICAgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCiAgICAgICAgICAgIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKICAgICAgICAgICAgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAogICAgICAgICAgICBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKICAgICAgICAgICAgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCiAgICAgICAgICAgIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YKICAgICAgICAgICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUgogICAgICAgICAgICBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4KICAgICAgICAgICAgQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGCiAgICAgICAgICAgIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICAgNi4gRnJlZSBTb2Z0d2FyZSBvciBPcGVuIFNvdXJjZSBMaWNlbnNlIHRvIENlcnRhaW4KICAgICAgIENvbXBvbmVudHMgb2YgdGhlIFNvZnR3YXJlCiAgICAgICBUaGlzIEFncmVlbWVudCBkb2VzIG5vdCBsaW1pdCBZb3VyIHJpZ2h0cyB1bmRlciwgb3IgZ3JhbnQKICAgICAgIFlvdSByaWdodHMgdGhhdCBzdXBlcnNlZGUsIHRoZSBsaWNlbnNlIHRlcm1zIG9mIGFueSBPcGVuCiAgICAgICBTb3VyY2UgU29mdHdhcmUgQ29tcG9uZW50IGRlbGl2ZXJlZCB0byBZb3UgYnkKICAgICAgIENvZGVTb3VyY2VyeS4gU291cmNlcnkgRysrIGluY2x1ZGVzIGNvbXBvbmVudHMgcHJvdmlkZWQKICAgICAgIHVuZGVyIHZhcmlvdXMgZGlmZmVyZW50IGxpY2Vuc2VzLiBUaGUgR2V0dGluZyBTdGFydGVkCiAgICAgICBHdWlkZSBwcm92aWRlcyBhbiBvdmVydmlldyBvZiB3aGljaCBsaWNlbnNlIGFwcGxpZXMgdG8KICAgICAgIGRpZmZlcmVudCBjb21wb25lbnRzLCBhbmQsIGZvciBjb21wb25lbnRzIHN1YmplY3QgdG8gdGhlCiAgICAgICBFY2xpcHNlIFB1YmxpYyBMaWNlbnNlLCBjb250YWlucyBpbmZvcm1hdGlvbiBvbiBob3cgdG8KICAgICAgIG9idGFpbiB0aGUgc291cmNlIGNvZGUuIERlZmluaXRpdmUgbGljZW5zaW5nIGluZm9ybWF0aW9uCiAgICAgICBmb3IgZWFjaCBmcmVlIHNvZnR3YXJlIG9yIG9wZW4gc291cmNlIGNvbXBvbmVudCBpcwogICAgICAgYXZhaWxhYmxlIGluIHRoZSByZWxldmFudCBzb3VyY2UgZmlsZS4KICAgIDcuIENvZGVTb3VyY2VyeSBUcmFkZW1hcmtzLgogICAgICAgTm90d2l0aHN0YW5kaW5nIGFueSBwcm92aXNpb24gaW4gYSBmcmVlIHNvZnR3YXJlIG9yIG9wZW4KICAgICAgIHNvdXJjZSBsaWNlbnNlIGFncmVlbWVudCBhcHBsaWNhYmxlIHRvIGEgY29tcG9uZW50IG9mIHRoZQogICAgICAgU29mdHdhcmUgdGhhdCBwZXJtaXRzIFlvdSB0byBkaXN0cmlidXRlIHN1Y2ggY29tcG9uZW50IHRvCiAgICAgICBhIHRoaXJkIHBhcnR5IGluIHNvdXJjZSBvciBiaW5hcnkgZm9ybSwgWW91IG1heSBub3QgdXNlCiAgICAgICBhbnkgQ29kZVNvdXJjZXJ5IHRyYWRlbWFyaywgd2hldGhlciByZWdpc3RlcmVkIG9yCiAgICAgICB1bnJlZ2lzdGVyZWQsIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24sIENvZGVTb3VyY2VyeSwKICAgICAgIFNvdXJjZXJ5IEcrKywgdGhlIENvZGVTb3VyY2VyeSBjcnlzdGFsIGJhbGwgbG9nbywgb3IgdGhlCiAgICAgICBTb3VyY2VyeSBHKysgc3BsYXNoIHNjcmVlbiwgb3IgYW55IGNvbmZ1c2luZ2x5IHNpbWlsYXIKICAgICAgIG1hcmssIGluIGNvbm5lY3Rpb24gd2l0aCBzdWNoIGRpc3RyaWJ1dGlvbiwgYW5kIFlvdSBtYXkKICAgICAgIG5vdCByZWNvbXBpbGUgdGhlIE9wZW4gU291cmNlIFNvZnR3YXJlIENvbXBvbmVudHMgd2l0aAogICAgICAgdGhlIC0td2l0aC1wa2d2ZXJzaW9uIG9yIC0td2l0aC1idWd1cmwgY29uZmlndXJhdGlvbgogICAgICAgb3B0aW9ucyB0aGF0IGVtYmVkIENvZGVTb3VyY2VyeSB0cmFkZW1hcmtzIGluIHRoZQogICAgICAgcmVzdWx0aW5nIGJpbmFyeS4KICAgIDguIFRlcm0gYW5kIFRlcm1pbmF0aW9uLgogICAgICAgVGhpcyBBZ3JlZW1lbnQgc2hhbGwgcmVtYWluIGluIGVmZmVjdCB1bmxlc3MgdGVybWluYXRlZAogICAgICAgcHVyc3VhbnQgdG8gdGhpcyBwcm92aXNpb24uIENvZGVTb3VyY2VyeSBtYXkgdGVybWluYXRlCiAgICAgICB0aGlzIEFncmVlbWVudCB1cG9uIHNldmVuICg3KSBkYXlzIHdyaXR0ZW4gbm90aWNlIG9mIGEKICAgICAgIG1hdGVyaWFsIGJyZWFjaCBvZiB0aGlzIEFncmVlbWVudCBpZiBzdWNoIGJyZWFjaCBpcyBub3QKICAgICAgIGN1cmVkOyBwcm92aWRlZCB0aGF0IHRoZSB1bmF1dGhvcml6ZWQgdXNlLCBjb3B5aW5nLCBvcgogICAgICAgZGlzdHJpYnV0aW9uIG9mIHRoZSBDb2RlU291cmNlcnkgUHJvcHJpZXRhcnkgQ29tcG9uZW50cwogICAgICAgb2YgdGhlIFNvZnR3YXJlIHdpbGwgYmUgZGVlbWVkIGEgbWF0ZXJpYWwgYnJlYWNoIHRoYXQKICAgICAgIGNhbm5vdCBiZSBjdXJlZC4KICAgIDkuIFRyYW5zZmVycy4KICAgICAgIFlvdSBtYXkgbm90IHRyYW5zZmVyIGFueSByaWdodHMgdW5kZXIgdGhpcyBBZ3JlZW1lbnQKICAgICAgIHdpdGhvdXQgdGhlIHByaW9yIHdyaXR0ZW4gY29uc2VudCBvZiBDb2RlU291cmNlcnksIHdoaWNoCiAgICAgICBjb25zZW50IHNoYWxsIG5vdCBiZSB1bnJlYXNvbmFibHkgd2l0aGhlbGQuIEEgY29uZGl0aW9uCiAgICAgICB0byBhbnkgdHJhbnNmZXIgb3IgYXNzaWdubWVudCBzaGFsbCBiZSB0aGF0IHRoZSByZWNpcGllbnQKICAgICAgIGFncmVlcyB0byB0aGUgdGVybXMgb2YgdGhpcyBBZ3JlZW1lbnQuIEFueSBhdHRlbXB0ZWQKICAgICAgIHRyYW5zZmVyIG9yIGFzc2lnbm1lbnQgaW4gdmlvbGF0aW9uIG9mIHRoaXMgcHJvdmlzaW9uCiAgICAgICBzaGFsbCBiZSBudWxsIGFuZCB2b2lkLgogICAxMC4gT3duZXJzaGlwLgogICAgICAgQ29kZVNvdXJjZXJ5IG93bnMgYW5kL29yIGhhcyBsaWNlbnNlZCB0aGUgQ29kZVNvdXJjZXJ5CiAgICAgICBQcm9wcmlldGFyeSBDb21wb25lbnRzIG9mIHRoZSBTb2Z0d2FyZSBhbmQgYWxsCiAgICAgICBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzIGVtYm9kaWVkIHRoZXJlaW4sIGluY2x1ZGluZwogICAgICAgY29weXJpZ2h0cyBhbmQgdmFsdWFibGUgdHJhZGUgc2VjcmV0cyBlbWJvZGllZCBpbiBpdHMKICAgICAgIGRlc2lnbiBhbmQgY29kaW5nIG1ldGhvZG9sb2d5LiBUaGUgQ29kZVNvdXJjZXJ5CiAgICAgICBQcm9wcmlldGFyeSBDb21wb25lbnRzIG9mIHRoZSBTb2Z0d2FyZSBhcmUgcHJvdGVjdGVkIGJ5CiAgICAgICBVbml0ZWQgU3RhdGVzIGNvcHlyaWdodCBsYXdzIGFuZCBpbnRlcm5hdGlvbmFsIHRyZWF0eQogICAgICAgcHJvdmlzaW9ucy4gQ29kZVNvdXJjZXJ5IGFsc28gb3ducyBhbGwgcmlnaHRzLCB0aXRsZSBhbmQKICAgICAgIGludGVyZXN0IGluIGFuZCB3aXRoIHJlc3BlY3QgdG8gaXRzIHRyYWRlIG5hbWVzLCBkb21haW4KICAgICAgIG5hbWVzLCB0cmFkZSBkcmVzcywgbG9nb3MsIHRyYWRlbWFya3MsIHNlcnZpY2UgbWFya3MsIGFuZAogICAgICAgb3RoZXIgc2ltaWxhciByaWdodHMgb3IgaW50ZXJlc3RzIGluIGludGVsbGVjdHVhbAogICAgICAgcHJvcGVydHkuIFRoaXMgQWdyZWVtZW50IHByb3ZpZGVzIFlvdSBvbmx5IGEgbGltaXRlZCB1c2UKICAgICAgIGxpY2Vuc2UsIGFuZCBubyBvd25lcnNoaXAgb2YgYW55IGludGVsbGVjdHVhbCBwcm9wZXJ0eS4KICAgMTEuIFdhcnJhbnR5IERpc2NsYWltZXI7IExpbWl0YXRpb24gb2YgTGlhYmlsaXR5LgogICAgICAgQ09ERVNPVVJDRVJZIEFORCBJVFMgTElDRU5TT1JTIFBST1ZJREUgVEhFIFNPRlRXQVJFIEFTLUlTCiAgICAgICBBTkQgUFJPVklERUQgV0lUSCBBTEwgRkFVTFRTLiBDT0RFU09VUkNFUlkgRE9FUyBOT1QgTUFLRQogICAgICAgQU5ZIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SIElNUExJRUQuCiAgICAgICBDT0RFU09VUkNFUlkgU1BFQ0lGSUNBTExZIERJU0NMQUlNUyBUSEUgSU1QTElFRAogICAgICAgV0FSUkFOVElFUyBPRiBUSVRMRSwgTk9OLUlORlJJTkdFTUVOVCwgTUVSQ0hBTlRBQklMSVRZLAogICAgICAgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UsIFNZU1RFTSBJTlRFR1JBVElPTiwgQU5ECiAgICAgICBEQVRBIEFDQ1VSQUNZLiBUSEVSRSBJUyBOTyBXQVJSQU5UWSBPUiBHVUFSQU5URUUgVEhBVCBUSEUKICAgICAgIE9QRVJBVElPTiBPRiBUSEUgU09GVFdBUkUgV0lMTCBCRSBVTklOVEVSUlVQVEVELAogICAgICAgRVJST1ItRlJFRSwgT1IgVklSVVMtRlJFRSwgT1IgVEhBVCBUSEUgU09GVFdBUkUgV0lMTCBNRUVUCiAgICAgICBBTlkgUEFSVElDVUxBUiBDUklURVJJQSBPRiBQRVJGT1JNQU5DRSwgUVVBTElUWSwKICAgICAgIEFDQ1VSQUNZLCBQVVJQT1NFLCBPUiBORUVELiBZT1UgQVNTVU1FIFRIRSBFTlRJUkUgUklTSyBPRgogICAgICAgU0VMRUNUSU9OLCBJTlNUQUxMQVRJT04sIEFORCBVU0UgT0YgVEhFIFNPRlRXQVJFLiBUSElTCiAgICAgICBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GCiAgICAgICBUSElTIEFHUkVFTUVOVC4gTk8gVVNFIE9GIFRIRSBTT0ZUV0FSRSBJUyBBVVRIT1JJWkVECiAgICAgICBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi4KICAgMTIuIExvY2FsIExhdy4KICAgICAgIElmIGltcGxpZWQgd2FycmFudGllcyBtYXkgbm90IGJlIGRpc2NsYWltZWQgdW5kZXIKICAgICAgIGFwcGxpY2FibGUgbGF3LCB0aGVuIEFOWSBJTVBMSUVEIFdBUlJBTlRJRVMgQVJFIExJTUlURUQKICAgICAgIElOIERVUkFUSU9OIFRPIFRIRSBQRVJJT0QgUkVRVUlSRUQgQlkgQVBQTElDQUJMRSBMQVcuCiAgIDEzLiBMaW1pdGF0aW9uIG9mIExpYWJpbGl0eS4KICAgICAgIElOREVQRU5ERU5UIE9GIFRIRSBGT1JHT0lORyBQUk9WSVNJT05TLCBJTiBOTyBFVkVOVCBBTkQKICAgICAgIFVOREVSIE5PIExFR0FMIFRIRU9SWSwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwKICAgICAgIFRPUlQsIENPTlRSQUNULCBPUiBTVFJJQ1QgUFJPRFVDVFMgTElBQklMSVRZLCBTSEFMTAogICAgICAgQ09ERVNPVVJDRVJZIEJFIExJQUJMRSBUTyBZT1UgT1IgQU5ZIE9USEVSIFBFUlNPTiBGT1IgQU5ZCiAgICAgICBJTkRJUkVDVCwgU1BFQ0lBTCwgSU5DSURFTlRBTCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCiAgICAgICBPRiBBTlkgS0lORCwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IKICAgICAgIExPU1MgT0YgR09PRFdJTEwsIFdPUksgU1RPUFBBR0UsIENPTVBVVEVSIE1BTEZVTkNUSU9OLCBPUgogICAgICAgQU5ZIE9USEVSIEtJTkQgT0YgQ09NTUVSQ0lBTCBEQU1BR0UsIEVWRU4gSUYgQ09ERVNPVVJDRVJZCiAgICAgICBIQVMgQkVFTiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuIFRISVMKICAgICAgIExJTUlUQVRJT04gU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IKICAgICAgIFBFUlNPTkFMIElOSlVSWSBUTyBUSEUgRVhURU5UIFBST0hJQklURUQgQlkgQVBQTElDQUJMRQogICAgICAgTEFXLiBJTiBOTyBFVkVOVCBTSEFMTCBDT0RFU09VUkNFUlknUyBMSUFCSUxJVFkgRk9SCiAgICAgICBBQ1RVQUwgREFNQUdFUyBGT1IgQU5ZIENBVVNFIFdIQVRTT0VWRVIsIEFORCBSRUdBUkRMRVNTCiAgICAgICBPRiBUSEUgRk9STSBPRiBBQ1RJT04sIEVYQ0VFRCBUSEUgQU1PVU5UIFBBSUQgQlkgWU9VIElOCiAgICAgICBGRUVTIFVOREVSIFRISVMgQUdSRUVNRU5UIERVUklORyBUSEUgUFJFVklPVVMgT05FIFlFQVIKICAgICAgIFBFUklPRC4KICAgMTQuIEV4cG9ydCBDb250cm9scy4KICAgICAgIFlvdSBhZ3JlZSB0byBjb21wbHkgd2l0aCBhbGwgZXhwb3J0IGxhd3MgYW5kIHJlc3RyaWN0aW9ucwogICAgICAgYW5kIHJlZ3VsYXRpb25zIG9mIHRoZSBVbml0ZWQgU3RhdGVzIG9yIGZvcmVpZ24gYWdlbmNpZXMKICAgICAgIG9yIGF1dGhvcml0aWVzLCBhbmQgbm90IHRvIGV4cG9ydCBvciByZS1leHBvcnQgdGhlCiAgICAgICBTb2Z0d2FyZSBvciBhbnkgZGlyZWN0IHByb2R1Y3QgdGhlcmVvZiBpbiB2aW9sYXRpb24gb2YKICAgICAgIGFueSBzdWNoIHJlc3RyaWN0aW9ucywgbGF3cyBvciByZWd1bGF0aW9ucywgb3Igd2l0aG91dAogICAgICAgYWxsIG5lY2Vzc2FyeSBhcHByb3ZhbHMuIEFzIGFwcGxpY2FibGUsIGVhY2ggcGFydHkgc2hhbGwKICAgICAgIG9idGFpbiBhbmQgYmVhciBhbGwgZXhwZW5zZXMgcmVsYXRpbmcgdG8gYW55IG5lY2Vzc2FyeQogICAgICAgbGljZW5zZXMgYW5kL29yIGV4ZW1wdGlvbnMgd2l0aCByZXNwZWN0IHRvIGl0cyBvd24gZXhwb3J0CiAgICAgICBvZiB0aGUgU29mdHdhcmUgZnJvbSB0aGUgVS5TLiBOZWl0aGVyIHRoZSBTb2Z0d2FyZSBub3IKICAgICAgIHRoZSB1bmRlcmx5aW5nIGluZm9ybWF0aW9uIG9yIHRlY2hub2xvZ3kgbWF5IGJlCiAgICAgICBlbGVjdHJvbmljYWxseSB0cmFuc21pdHRlZCBvciBvdGhlcndpc2UgZXhwb3J0ZWQgb3IKICAgICAgIHJlLWV4cG9ydGVkIChpKSBpbnRvIEN1YmEsIElyYW4sIElyYXEsIExpYnlhLCBOb3J0aAogICAgICAgS29yZWEsIFN1ZGFuLCBTeXJpYSBvciBhbnkgb3RoZXIgY291bnRyeSBzdWJqZWN0IHRvIFUuUy4KICAgICAgIHRyYWRlIHNhbmN0aW9ucyBjb3ZlcmluZyB0aGUgU29mdHdhcmUsIHRvIGluZGl2aWR1YWxzIG9yCiAgICAgICBlbnRpdGllcyBjb250cm9sbGVkIGJ5IHN1Y2ggY291bnRyaWVzLCBvciB0byBuYXRpb25hbHMgb3IKICAgICAgIHJlc2lkZW50cyBvZiBzdWNoIGNvdW50cmllcyBvdGhlciB0aGFuIG5hdGlvbmFscyB3aG8gYXJlCiAgICAgICBsYXdmdWxseSBhZG1pdHRlZCBwZXJtYW5lbnQgcmVzaWRlbnRzIG9mIGNvdW50cmllcyBub3QKICAgICAgIHN1YmplY3QgdG8gc3VjaCBzYW5jdGlvbnM7IG9yIChpaSkgdG8gYW55b25lIG9uIHRoZSBVLlMuCiAgICAgICBUcmVhc3VyeSBEZXBhcnRtZW50J3MgbGlzdCBvZiBTcGVjaWFsbHkgRGVzaWduYXRlZAogICAgICAgTmF0aW9uYWxzIGFuZCBCbG9ja2VkIFBlcnNvbnMgb3IgdGhlIFUuUy4gQ29tbWVyY2UKICAgICAgIERlcGFydG1lbnQncyBUYWJsZSBvZiBEZW5pYWwgT3JkZXJzLiBCeSBkb3dubG9hZGluZyBvcgogICAgICAgdXNpbmcgdGhlIFNvZnR3YXJlLCBMaWNlbnNlZSBhZ3JlZXMgdG8gdGhlIGZvcmVnb2luZyBhbmQKICAgICAgIHJlcHJlc2VudHMgYW5kIHdhcnJhbnRzIHRoYXQgaXQgY29tcGxpZXMgd2l0aCB0aGVzZQogICAgICAgY29uZGl0aW9ucy4KICAgMTUuIFUuUy4gR292ZXJubWVudCBFbmQtVXNlcnMuCiAgICAgICBUaGUgU29mdHdhcmUgaXMgYSBjb21tZXJjaWFsIGl0ZW0sIGFzIHRoYXQgdGVybSBpcwogICAgICAgZGVmaW5lZCBpbiA0OCBDLkYuUi4gMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2YKICAgICAgIGNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUgYW5kIGNvbW1lcmNpYWwgY29tcHV0ZXIKICAgICAgIHNvZnR3YXJlIGRvY3VtZW50YXRpb24sIGFzIHN1Y2ggdGVybXMgYXJlIHVzZWQgaW4gNDgKICAgICAgIEMuRi5SLiAxMi4yMTIgKFNlcHQuIDE5OTUpLiBDb25zaXN0ZW50IHdpdGggNDggQy5GLlIuCiAgICAgICAxMi4yMTIgYW5kIDQ4IEMuRi5SLiAyMjcuNzIwMi0xIHRocm91Z2ggMjI3LjcyMDItNCAoSnVuZQogICAgICAgMTk5NSksIGFsbCBVLlMuIEdvdmVybm1lbnQgRW5kIFVzZXJzIGFjcXVpcmUgdGhlIFNvZnR3YXJlCiAgICAgICB3aXRoIG9ubHkgdGhvc2UgcmlnaHRzIHNldCBmb3J0aCBoZXJlaW4uCiAgIDE2LiBMaWNlbnNlZSBPdXRzaWRlIFRoZSBVLlMuCiAgICAgICBJZiBZb3UgYXJlIGxvY2F0ZWQgb3V0c2lkZSB0aGUgVS5TLiwgdGhlbiB0aGUgZm9sbG93aW5nCiAgICAgICBwcm92aXNpb25zIHNoYWxsIGFwcGx5OiAoaSkgTGVzIHBhcnRpZXMgYXV4IHByZXNlbnRlcwogICAgICAgY29uZmlybWVudCBsZXVyIHZvbG9udGUgcXVlIGNldHRlIGNvbnZlbnRpb24gZGUgbWVtZSBxdWUKICAgICAgIHRvdXMgbGVzIGRvY3VtZW50cyB5IGNvbXByaXMgdG91dCBhdmlzIHF1aSBzaXkgcmF0dGFjaGUsCiAgICAgICBzb2llbnQgcmVkaWdlcyBlbiBsYW5ndWUgYW5nbGFpc2UgKHRyYW5zbGF0aW9uOiBUaGUKICAgICAgIHBhcnRpZXMgY29uZmlybSB0aGF0IHRoaXMgQWdyZWVtZW50IGFuZCBhbGwgcmVsYXRlZAogICAgICAgZG9jdW1lbnRhdGlvbiBpcyBhbmQgd2lsbCBiZSBpbiB0aGUgRW5nbGlzaCBsYW5ndWFnZS4pOwogICAgICAgYW5kIChpaSkgWW91IGFyZSByZXNwb25zaWJsZSBmb3IgY29tcGx5aW5nIHdpdGggYW55IGxvY2FsCiAgICAgICBsYXdzIGluIHlvdXIganVyaXNkaWN0aW9uIHdoaWNoIG1pZ2h0IGltcGFjdCB5b3VyIHJpZ2h0CiAgICAgICB0byBpbXBvcnQsIGV4cG9ydCBvciB1c2UgdGhlIFNvZnR3YXJlLCBhbmQgWW91IHJlcHJlc2VudAogICAgICAgdGhhdCBZb3UgaGF2ZSBjb21wbGllZCB3aXRoIGFueSByZWd1bGF0aW9ucyBvcgogICAgICAgcmVnaXN0cmF0aW9uIHByb2NlZHVyZXMgcmVxdWlyZWQgYnkgYXBwbGljYWJsZSBsYXcgdG8KICAgICAgIG1ha2UgdGhpcyBsaWNlbnNlIGVuZm9yY2VhYmxlLgogICAxNy4gU2V2ZXJhYmlsaXR5LgogICAgICAgSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBkZWNsYXJlZCBpbnZhbGlkIG9yCiAgICAgICB1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSBkZWVtZWQgbW9kaWZpZWQgdG8KICAgICAgIHRoZSBleHRlbnQgbmVjZXNzYXJ5IGFuZCBwb3NzaWJsZSB0byByZW5kZXIgaXQgdmFsaWQgYW5kCiAgICAgICBlbmZvcmNlYWJsZS4gSW4gYW55IGV2ZW50LCB0aGUgdW5lbmZvcmNlYWJpbGl0eSBvcgogICAgICAgaW52YWxpZGl0eSBvZiBhbnkgcHJvdmlzaW9uIHNoYWxsIG5vdCBhZmZlY3QgYW55IG90aGVyCiAgICAgICBwcm92aXNpb24gb2YgdGhpcyBBZ3JlZW1lbnQsIGFuZCB0aGlzIEFncmVlbWVudCBzaGFsbAogICAgICAgY29udGludWUgaW4gZnVsbCBmb3JjZSBhbmQgZWZmZWN0LCBhbmQgYmUgY29uc3RydWVkIGFuZAogICAgICAgZW5mb3JjZWQsIGFzIGlmIHN1Y2ggcHJvdmlzaW9uIGhhZCBub3QgYmVlbiBpbmNsdWRlZCwgb3IKICAgICAgIGhhZCBiZWVuIG1vZGlmaWVkIGFzIGFib3ZlIHByb3ZpZGVkLCBhcyB0aGUgY2FzZSBtYXkgYmUuCiAgIDE4LiBBcmJpdHJhdGlvbi4KICAgICAgIEV4Y2VwdCBmb3IgYWN0aW9ucyB0byBwcm90ZWN0IGludGVsbGVjdHVhbCBwcm9wZXJ0eQogICAgICAgcmlnaHRzIGFuZCB0byBlbmZvcmNlIGFuIGFyYml0cmF0b3IncyBkZWNpc2lvbiBoZXJldW5kZXIsCiAgICAgICBhbGwgZGlzcHV0ZXMsIGNvbnRyb3ZlcnNpZXMsIG9yIGNsYWltcyBhcmlzaW5nIG91dCBvZiBvcgogICAgICAgcmVsYXRpbmcgdG8gdGhpcyBBZ3JlZW1lbnQgb3IgYSBicmVhY2ggdGhlcmVvZiBzaGFsbCBiZQogICAgICAgc3VibWl0dGVkIHRvIGFuZCBmaW5hbGx5IHJlc29sdmVkIGJ5IGFyYml0cmF0aW9uIHVuZGVyCiAgICAgICB0aGUgcnVsZXMgb2YgdGhlIEFtZXJpY2FuIEFyYml0cmF0aW9uIEFzc29jaWF0aW9uIChBQUEpCiAgICAgICB0aGVuIGluIGVmZmVjdC4gVGhlcmUgc2hhbGwgYmUgb25lIGFyYml0cmF0b3IsIGFuZCBzdWNoCiAgICAgICBhcmJpdHJhdG9yIHNoYWxsIGJlIGNob3NlbiBieSBtdXR1YWwgYWdyZWVtZW50IG9mIHRoZQogICAgICAgcGFydGllcyBpbiBhY2NvcmRhbmNlIHdpdGggQUFBIHJ1bGVzLiBUaGUgYXJiaXRyYXRpb24KICAgICAgIHNoYWxsIHRha2UgcGxhY2UgaW4gR3Jhbml0ZSBCYXksIENhbGlmb3JuaWEsIGFuZCBtYXkgYmUKICAgICAgIGNvbmR1Y3RlZCBieSB0ZWxlcGhvbmUgb3Igb25saW5lLiBUaGUgYXJiaXRyYXRvciBzaGFsbAogICAgICAgYXBwbHkgdGhlIGxhd3Mgb2YgdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEsIFVTQSB0byBhbGwKICAgICAgIGlzc3VlcyBpbiBkaXNwdXRlLiBUaGUgY29udHJvdmVyc3kgb3IgY2xhaW0gc2hhbGwgYmUKICAgICAgIGFyYml0cmF0ZWQgb24gYW4gaW5kaXZpZHVhbCBiYXNpcywgYW5kIHNoYWxsIG5vdCBiZQogICAgICAgY29uc29saWRhdGVkIGluIGFueSBhcmJpdHJhdGlvbiB3aXRoIGFueSBjbGFpbSBvcgogICAgICAgY29udHJvdmVyc3kgb2YgYW55IG90aGVyIHBhcnR5LiBUaGUgZmluZGluZ3Mgb2YgdGhlCiAgICAgICBhcmJpdHJhdG9yIHNoYWxsIGJlIGZpbmFsIGFuZCBiaW5kaW5nIG9uIHRoZSBwYXJ0aWVzLCBhbmQKICAgICAgIG1heSBiZSBlbnRlcmVkIGluIGFueSBjb3VydCBvZiBjb21wZXRlbnQganVyaXNkaWN0aW9uIGZvcgogICAgICAgZW5mb3JjZW1lbnQuIEVuZm9yY2VtZW50cyBvZiBhbnkgYXdhcmQgb3IganVkZ21lbnQgc2hhbGwKICAgICAgIGJlIGdvdmVybmVkIGJ5IHRoZSBVbml0ZWQgTmF0aW9ucyBDb252ZW50aW9uIG9uIHRoZQogICAgICAgUmVjb2duaXRpb24gYW5kIEVuZm9yY2VtZW50IG9mIEZvcmVpZ24gQXJiaXRyYWwgQXdhcmRzLgogICAgICAgU2hvdWxkIGVpdGhlciBwYXJ0eSBmaWxlIGFuIGFjdGlvbiBjb250cmFyeSB0byB0aGlzCiAgICAgICBwcm92aXNpb24sIHRoZSBvdGhlciBwYXJ0eSBtYXkgcmVjb3ZlciBhdHRvcm5leSdzIGZlZXMKICAgICAgIGFuZCBjb3N0cyB1cCB0byAkMTAwMC4wMC4KICAgMTkuIEp1cmlzZGljdGlvbiBBbmQgVmVudWUuCiAgICAgICBUaGUgY291cnRzIG9mIFBsYWNlciBDb3VudHkgaW4gdGhlIFN0YXRlIG9mIENhbGlmb3JuaWEsCiAgICAgICBVU0EgYW5kIHRoZSBuZWFyZXN0IFUuUy4gRGlzdHJpY3QgQ291cnQgc2hhbGwgYmUgdGhlCiAgICAgICBleGNsdXNpdmUganVyaXNkaWN0aW9uIGFuZCB2ZW51ZSBmb3IgYWxsIGxlZ2FsCiAgICAgICBwcm9jZWVkaW5ncyB0aGF0IGFyZSBub3QgYXJiaXRyYXRlZCB1bmRlciB0aGlzIEFncmVlbWVudC4KICAgMjAuIEluZGVwZW5kZW50IENvbnRyYWN0b3JzLgogICAgICAgVGhlIHJlbGF0aW9uc2hpcCBvZiB0aGUgcGFydGllcyBpcyB0aGF0IG9mIGluZGVwZW5kZW50CiAgICAgICBjb250cmFjdG9yLCBhbmQgbm90aGluZyBoZXJlaW4gc2hhbGwgYmUgY29uc3RydWVkIHRvCiAgICAgICBjcmVhdGUgYSBwYXJ0bmVyc2hpcCwgam9pbnQgdmVudHVyZSwgZnJhbmNoaXNlLAogICAgICAgZW1wbG95bWVudCwgb3IgYWdlbmN5IHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSBwYXJ0aWVzLgogICAgICAgTGljZW5zZWUgc2hhbGwgaGF2ZSBubyBhdXRob3JpdHkgdG8gZW50ZXIgaW50byBhZ3JlZW1lbnRzCiAgICAgICBvZiBhbnkga2luZCBvbiBiZWhhbGYgb2YgQ29kZVNvdXJjZXJ5IGFuZCBzaGFsbCBub3QgaGF2ZQogICAgICAgdGhlIHBvd2VyIG9yIGF1dGhvcml0eSB0byBiaW5kIG9yIG9ibGlnYXRlIENvZGVTb3VyY2VyeQogICAgICAgaW4gYW55IG1hbm5lciB0byBhbnkgdGhpcmQgcGFydHkuCiAgIDIxLiBGb3JjZSBNYWpldXJlLgogICAgICAgTmVpdGhlciBDb2RlU291cmNlcnkgbm9yIExpY2Vuc2VlIHNoYWxsIGJlIGxpYWJsZSBmb3IKICAgICAgIGRhbWFnZXMgZm9yIGFueSBkZWxheSBvciBmYWlsdXJlIG9mIGRlbGl2ZXJ5IGFyaXNpbmcgb3V0CiAgICAgICBvZiBjYXVzZXMgYmV5b25kIHRoZWlyIHJlYXNvbmFibGUgY29udHJvbCBhbmQgd2l0aG91dAogICAgICAgdGhlaXIgZmF1bHQgb3IgbmVnbGlnZW5jZSwgaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sCiAgICAgICBBY3RzIG9mIEdvZCwgYWN0cyBvZiBjaXZpbCBvciBtaWxpdGFyeSBhdXRob3JpdHksIGZpcmVzLAogICAgICAgcmlvdHMsIHdhcnMsIGVtYmFyZ29lcywgb3IgY29tbXVuaWNhdGlvbnMgZmFpbHVyZS4KICAgMjIuIE1pc2NlbGxhbmVvdXMuCiAgICAgICBUaGlzIEFncmVlbWVudCBjb25zdGl0dXRlcyB0aGUgZW50aXJlIHVuZGVyc3RhbmRpbmcgb2YKICAgICAgIHRoZSBwYXJ0aWVzIHdpdGggcmVzcGVjdCB0byB0aGUgc3ViamVjdCBtYXR0ZXIgb2YgdGhpcwogICAgICAgQWdyZWVtZW50IGFuZCBtZXJnZXMgYWxsIHByaW9yIGNvbW11bmljYXRpb25zLAogICAgICAgcmVwcmVzZW50YXRpb25zLCBhbmQgYWdyZWVtZW50cy4gVGhpcyBBZ3JlZW1lbnQgbWF5IGJlCiAgICAgICBtb2RpZmllZCBvbmx5IGJ5IGEgd3JpdHRlbiBhZ3JlZW1lbnQgc2lnbmVkIGJ5IHRoZQogICAgICAgcGFydGllcy4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIEFncmVlbWVudCBpcyBoZWxkIHRvIGJlCiAgICAgICB1bmVuZm9yY2VhYmxlIGZvciBhbnkgcmVhc29uLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZQogICAgICAgcmVmb3JtZWQgb25seSB0byB0aGUgZXh0ZW50IG5lY2Vzc2FyeSB0byBtYWtlIGl0CiAgICAgICBlbmZvcmNlYWJsZS4gVGhpcyBBZ3JlZW1lbnQgc2hhbGwgYmUgY29uc3RydWVkIHVuZGVyIHRoZQogICAgICAgbGF3cyBvZiB0aGUgU3RhdGUgb2YgQ2FsaWZvcm5pYSwgVVNBLCBleGNsdWRpbmcgcnVsZXMKICAgICAgIHJlZ2FyZGluZyBjb25mbGljdHMgb2YgbGF3LiBUaGUgYXBwbGljYXRpb24gb2YgdGhlIFVuaXRlZAogICAgICAgTmF0aW9ucyBDb252ZW50aW9uIG9mIENvbnRyYWN0cyBmb3IgdGhlIEludGVybmF0aW9uYWwKICAgICAgIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBUaGlzIGxpY2Vuc2UgaXMKICAgICAgIHdyaXR0ZW4gaW4gRW5nbGlzaCwgYW5kIEVuZ2xpc2ggaXMgaXRzIGNvbnRyb2xsaW5nCiAgICAgICBsYW5ndWFnZS4K