CgoKRG93bmxvYWQgU2NoZW1hcyAKClRyYW5YTUyuIE9wZW4gU291cmNlIExpY2Vuc2UgQWdyZWVtZW50IAoKUFVSUE9TRQoKClRoZSBwdXJwb3NlIG9mIHRoaXMgVHJhblhNTK4gT3BlbiBTb3VyY2UgTGljZW5zZSBBZ3JlZW1lbnQgKHRoZSCTTGljZW5zZZQpIGlzIHRvIHNldCBmb3J0aCB0aGUgdGVybXMgYW5kIGNvbmRpdGlvbnMgZm9yIHRoZSB1c2Ugb2YgdGhlIENvdmVyZWQgV29yaywgYXMgZGVmaW5lZCBiZWxvdy4gVGhpcyBMaWNlbnNlIGFwcGxpZXMgdG8gdGhlIE9yaWdpbmFsIFdvcmssIGFuZCB0byBhbnkgTW9kaWZpY2F0aW9ucywgd2hpY2ggaXMgY29sbGVjdGl2ZWx5IHJlZmVycmVkIHRvIGFzIHRoZSCTQ292ZXJlZCBXb3JrlCBhcyBzdWNoIHRlcm1zIGFyZSBkZWZpbmVkIGluIHRoaXMgTGljZW5zZS4gVGhlIENvdmVyZWQgV29yayBpcyBkaXN0cmlidXRlZCBmb3IgZnJlZS4gVGhpcyBMaWNlbnNlIGlzIGRlc2lnbmVkIHRvIGVuc3VyZSB0aGF0IHlvdSBoYXZlIHRoZSByaWdodCB0byBvYnRhaW4gdGhlIENvdmVyZWQgV29yaywgZGlzdHJpYnV0ZSBjb3BpZXMgb2YgdGhlIENvdmVyZWQgV29yaywgbWFrZSBNb2RpZmljYXRpb25zIHRvIHRoZSBDb3ZlcmVkIFdvcmssIG9yIG90aGVyd2lzZSB1c2UgcG9ydGlvbnMgb2YgdGhlIENvdmVyZWQgV29yayBpbiBuZXcgZnJlZSBjb2RlLiBDb25zaXN0ZW50IHdpdGggdGhlIGZvcmVnb2luZywgaG93ZXZlciwgeW91IGhhdmUgc3BlY2lmaWMgcmVzcG9uc2liaWxpdGllcyByZWdhcmRpbmcgdGhlIENvdmVyZWQgV29yayBhbmQgYW55IE1vZGlmaWNhdGlvbnMuIFRoZXNlIHJlc3RyaWN0aW9ucyBhcmUgZGVzaWduZWQgdG8gZW5zdXJlIHRoYXQgb3RoZXJzIGNhbm5vdCBkZW55IHlvdSB0aGUgcmlnaHRzIGdyYW50ZWQgaW4gdGhpcyBMaWNlbnNlLCBvciByZXF1aXJlIHlvdSB0byBzdXJyZW5kZXIgdGhlc2UgcmlnaHRzLiBBY3Rpdml0aWVzIG90aGVyIHRoYW4gY29weWluZywgZGlzdHJpYnV0aW9uIGFuZCBtb2RpZmljYXRpb24gYXJlIG5vdCBjb3ZlcmVkIGJ5IHRoaXMgTGljZW5zZTsgdGhleSBhcmUgb3V0c2lkZSBpdHMgc2NvcGUuIFRoZSBhY3Qgb2YgcnVubmluZyB0aGUgQ292ZXJlZCBXb3JrIGlzIG5vdCByZXN0cmljdGVkLCBhbmQgdGhlIG91dHB1dCBmcm9tIHRoZSBDb3ZlcmVkIFdvcmsgaXMgY292ZXJlZCBvbmx5IGlmIGl0cyBjb250ZW50cyBjb25zdGl0dXRlIGEgTW9kaWZpY2F0aW9uIChpbmRlcGVuZGVudCBvZiBoYXZpbmcgYmVlbiBtYWRlIGJ5IHJ1bm5pbmcgdGhlIENvdmVyZWQgV29yaykuCgpQTEVBU0UgUkVBRCBUSEUgVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgVEhJUyBMSUNFTlNFIENBUkVGVUxMWSCWIElGIFlPVSBETyBOT1QgQUdSRUUgVE8gVEhFU0UgVEVSTVMgQU5EIENPTkRJVElPTlMsIFlPVSBBUkUgTk9UIEdJVkVOIEFOWSBSSUdIVFMgVE8gVEhFIENPVkVSRUQgV09SSyBIRVJFVU5ERVIuIFdIRVJFIENPVkVSRUQgV09SSyBJUyBCRUlORyBET1dOTE9BREVELCBJRiBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLCBDTElDSyBPTiBUSEUgQk9YIExBQkVMRUQgIkkgQUNDRVBUIiBBTkQgVEhFIENPVkVSRUQgV09SSyBXSUxMIEJFIERPV05MT0FERUQgVE8gWU9VUiBDT01QVVRFUi4gSUYgWU9VIERPIE5PVCBBR1JFRSBUTyBCRSBCT1VORCBCWSBUSEUgVEVSTVMgT0YgVEhJUyBMSUNFTlNFLCBDTElDSyBPTiBUSEUgQk9YIExBQkVMRUQgIkkgRE8gTk9UIEFDQ0VQVCIsIEFUIFdISUNIIFBPSU5UIFlPVSBXSUxMIFJFVFVSTiBUTyBUSEUgQVBQUk9QUklBVEUgSE9NRSBQQUdFIFdJVEhPVVQgVEhFIENPVkVSRUQgV09SSyBCRUlORyBET1dOTE9BREVELgoKREVGSU5JVElPTlMKCpNPcmlnaW5hbCBXb3JrlCBtZWFucyB0aGUgb3JpZ2luYWwgVHJhblhNTK4gbWFya3VwIGxhbmd1YWdlIGRlc2NyaWJlZCBpbiB0aGUgbm90aWNlIHJlcXVpcmVkIGJ5IEV4aGliaXQgQSBhbmQgd2hpY2gsIGF0IHRoZSB0aW1lIG9mIGl0cyByZWxlYXNlIHVuZGVyIHRoaXMgTGljZW5zZSwgaXMgbm90IGFscmVhZHkgQ292ZXJlZCBXb3JrIGdvdmVybmVkIGJ5IHRoaXMgTGljZW5zZS4KCpNDb3ZlcmVkIFdvcmuUIG1lYW5zIHRoZSBPcmlnaW5hbCBXb3JrLCBNb2RpZmljYXRpb25zLCBvciB0aGUgY29tYmluYXRpb24gb2YgdGhlIE9yaWdpbmFsIFdvcmsgYW5kIE1vZGlmaWNhdGlvbnMsIGluIGVhY2ggY2FzZSBpbmNsdWRpbmcgcG9ydGlvbnMgdGhlcmVvZi4KCpNNb2RpZmljYXRpb24ocymUIG1lYW5zIGFueSB3b3JrIHRoYXQgaW4gd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIENvdmVyZWQgV29yayBvciBhbnkgcGFydCB0aGVyZW9mLgoKk0xhcmdlciBXb3JrlCBtZWFucyBhIHdvcmsgd2hpY2ggY29tYmluZXMgQ292ZXJlZCBXb3JrLCBvciBwb3J0aW9ucyB0aGVyZW9mLCB3aXRoIGNvZGUgbm90IGNvdmVyZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4KCpNJbml0aWFsIERldmVsb3BlcpQgbWVhbnMgVHJhbnNlbnRyaWMsIGEgZGl2aXNpb24gb2YgVW5pb24gUGFjaWZpYyBDb3Jwb3JhdGlvbi4KCpNDb250cmlidXRvcpQgbWVhbnMgYW55IGluZGl2aWR1YWwgb3IgZW50aXR5IHRoYXQgY3JlYXRlcyBvciBjb250cmlidXRlcyB0byB0aGUgY3JlYXRpb24gb2YgTW9kaWZpY2F0aW9ucy4gVG8gdGhlIGV4dGVudCB5b3UgY3JlYXRlIE1vZGlmaWNhdGlvbnMsIHlvdSBzaGFsbCBhbHNvIGJlIGNvbnNpZGVyZWQgYSCTQ29udHJpYnV0b3KUIGZvciB0aGUgcHVycG9zZSBvZiB0aGlzIExpY2Vuc2UuCgqTQ29udHJpYnV0b3IgVmVyc2lvbpQgbWVhbnMgdGhlIGNvbWJpbmF0aW9uIG9mIHRoZSBPcmlnaW5hbCBXb3JrLCBwcmlvciBNb2RpZmljYXRpb25zIHVzZWQgYnkgdGhlIENvbnRyaWJ1dG9yLCBhbmQgdGhlIE1vZGlmaWNhdGlvbnMgbWFkZSBieSB0aGF0IHBhcnRpY3VsYXIgQ29udHJpYnV0b3IuCgqTWW91lCBtZWFucyBhbiBpbmRpdmlkdWFsIG9yIGEgbGVnYWwgZW50aXR5IGV4ZXJjaXNpbmcgcmlnaHRzIHVuZGVyLCBhbmQgY29tcGx5aW5nIHdpdGggYWxsIG9mIHRoZSB0ZXJtcyBvZiwgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlLiBGb3IgbGVnYWwgZW50aXRpZXMsICJZb3UiIGluY2x1ZGVzIGFueSBlbnRpdHkgd2hpY2ggY29udHJvbHMsIGlzIGNvbnRyb2xsZWQgYnksIG9yIGlzIHVuZGVyIGNvbW1vbiBjb250cm9sIHdpdGggWW91LiBGb3IgcHVycG9zZXMgb2YgdGhpcyBkZWZpbml0aW9uLCAiY29udHJvbCIgbWVhbnMgKGEpIHRoZSBwb3dlciwgZGlyZWN0IG9yIGluZGlyZWN0LCB0byBjYXVzZSB0aGUgZGlyZWN0aW9uIG9yIG1hbmFnZW1lbnQgb2Ygc3VjaCBlbnRpdHksIHdoZXRoZXIgYnkgY29udHJhY3Qgb3Igb3RoZXJ3aXNlLCBvciAoYikgb3duZXJzaGlwIG9mIGZpZnR5IHBlcmNlbnQgKDUwJSkgb3IgbW9yZSBvZiB0aGUgb3V0c3RhbmRpbmcgc2hhcmVzIG9yIGJlbmVmaWNpYWwgb3duZXJzaGlwIG9mIHN1Y2ggZW50aXR5LgoKk1NvdXJjZSBDb2RllCBtZWFucyB0aGUgcHJlZmVycmVkIGZvcm0gb2YgdGhlIENvdmVyZWQgV29yayBmb3IgbWFraW5nIE1vZGlmaWNhdGlvbnMuCgqTRXhlY3V0YWJsZShzKZQgbWVhbnMgQ292ZXJlZCBXb3JrIGluIGFueSBmb3JtIG90aGVyIHRoYW4gU291cmNlIENvZGUuCgpHUkFOVCBPRiBMSUNFTlNFCgpUaGUgSW5pdGlhbCBEZXZlbG9wZXIgR3JhbnQuIFN1YmplY3QgdG8gdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoaXMgTGljZW5zZSwgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGhlcmVieSBncmFudHMgWW91IGEgd29ybGQtd2lkZSwgcm95YWx0eS1mcmVlLCBub24tZXhjbHVzaXZlIGxpY2Vuc2UsIHN1YmplY3QgdG8gdGhpcmQgcGFydHkgaW50ZWxsZWN0dWFsIHByb3BlcnR5IGNsYWltczoKCnRvIHVzZSwgcmVwcm9kdWNlLCBtb2RpZnksIGRpc3BsYXksIHBlcmZvcm0sIHN1YmxpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIE9yaWdpbmFsIFdvcmsgKG9yIHBvcnRpb25zIHRoZXJlb2YpIHdpdGggb3Igd2l0aG91dCBNb2RpZmljYXRpb25zLCBvciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZCAKdW5kZXIgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgSW5pdGlhbCBEZXZlbG9wZXIsIHRvIG1ha2UsIGhhdmUgbWFkZSwgdXNlIGFuZCBzZWxsICgiVXRpbGl6ZSIpIHRoZSBPcmlnaW5hbCBXb3JrIChvciBwb3J0aW9ucyB0aGVyZW9mKSwgYnV0IHNvbGVseSB0byB0aGUgZXh0ZW50IHRoYXQgYW55IHN1Y2ggcGF0ZW50IGlzIHJlYXNvbmFibHkgbmVjZXNzYXJ5IHRvIGVuYWJsZSBZb3UgdG8gVXRpbGl6ZSB0aGUgT3JpZ2luYWwgV29yayAob3IgcG9ydGlvbnMgdGhlcmVvZikgYW5kIG5vdCB0byBhbnkgZ3JlYXRlciBleHRlbnQgdGhhbiBtYXkgYmUgbmVjZXNzYXJ5IHRvIFV0aWxpemUgZnVydGhlciBNb2RpZmljYXRpb25zIG9yIGNvbWJpbmF0aW9ucy4gCkNvbnRyaWJ1dG9yIEdyYW50LiBTdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UsIGVhY2ggQ29udHJpYnV0b3IgaGVyZWJ5IGdyYW50cyBZb3UgYSB3b3JsZC13aWRlLCByb3lhbHR5LWZyZWUsIG5vbi1leGNsdXNpdmUgbGljZW5zZSwgc3ViamVjdCB0byB0aGlyZCBwYXJ0eSBpbnRlbGxlY3R1YWwgcHJvcGVydHkgY2xhaW1zOgoKdG8gdXNlLCByZXByb2R1Y2UsIG1vZGlmeSwgZGlzcGxheSwgcGVyZm9ybSwgc3VibGljZW5zZSBhbmQgZGlzdHJpYnV0ZSB0aGUgTW9kaWZpY2F0aW9ucyBjcmVhdGVkIGJ5IHN1Y2ggQ29udHJpYnV0b3IgKG9yIHBvcnRpb25zIHRoZXJlb2YpIGVpdGhlciBvbiBhbiB1bm1vZGlmaWVkIGJhc2lzLCB3aXRoIG90aGVyIE1vZGlmaWNhdGlvbnMsIGFzIENvdmVyZWQgV29yayBvciBhcyBwYXJ0IG9mIGEgTGFyZ2VyIFdvcms7IGFuZCAKdW5kZXIgcGF0ZW50cyBub3cgb3IgaGVyZWFmdGVyIG93bmVkIG9yIGNvbnRyb2xsZWQgYnkgQ29udHJpYnV0b3IsIHRvIFV0aWxpemUgdGhlIENvbnRyaWJ1dG9yIFZlcnNpb24gKG9yIHBvcnRpb25zIHRoZXJlb2YpLCBidXQgc29sZWx5IHRvIHRoZSBleHRlbnQgdGhhdCBhbnkgc3VjaCBwYXRlbnQgaXMgcmVhc29uYWJseSBuZWNlc3NhcnkgdG8gZW5hYmxlIFlvdSB0byBVdGlsaXplIHRoZSBDb250cmlidXRvciBWZXJzaW9uIChvciBwb3J0aW9ucyB0aGVyZW9mKSwgYW5kIG5vdCB0byBhbnkgZ3JlYXRlciBleHRlbnQgdGhhbiBtYXkgYmUgbmVjZXNzYXJ5IHRvIFV0aWxpemUgZnVydGhlciBNb2RpZmljYXRpb25zIG9yIGNvbWJpbmF0aW9ucy4gClRyYWRlbWFyayBHcmFudC4gVGhlIEluaXRpYWwgRGV2ZWxvcGVyIG93bnMgb3IgaGFzIHRoZSByaWdodHMgdG8gdGhlIGZvbGxvd2luZyB0cmFkZW1hcms6IJNUcmFuWE1MrpQgKHRoZSCTTGljZW5zZWQgVHJhZGVtYXJrlCkuIFRoZSBJbml0aWFsIERldmVsb3BlciBoZXJlYnkgZ3JhbnRzIHlvdSBhIG5vbmV4Y2x1c2l2ZSwgbm9udHJhbnNmZXJhYmxlIGxpY2Vuc2UgdG8gdXNlIGl0cyBMaWNlbnNlZCBUcmFkZW1hcmsgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKClVzZSBvZiB0aGUgTGljZW5zZWQgVHJhZGVtYXJrIHNoYWxsIGJlIHBlcm1pdHRlZCBvbmx5IGZvciB0aGUgbGltaXRlZCBwdXJwb3NlIG9mIGluZGljYXRpbmcgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFzIHRoZSBjb3B5cmlnaHQgaG9sZGVyIGluIGFuZCB0byB0aGUgT3JpZ2luYWwgV29yazsgClRoZSBMaWNlbnNlZCBUcmFkZW1hcmtzIHNoYWxsIGJlIHBsYWNlZCBwcm9taW5lbnRseSBpbiBhbGwgcGFja2FnaW5nLCBhZHZlcnRpc2luZyBhbmQgcHJvbW90aW9uYWwgbWF0ZXJpYWxzIHVzZWQgYnkgeW91IGluIGRpc3RyaWJ1dGluZyB0aGUgQ292ZXJlZCBXb3JrIGluIGEgbWFubmVyIGNvbnNpc3RlbnQgd2l0aCB0aGUgSW5pdGlhbCBEZXZlbG9wZXKScyB1c2Ugb2YgdGhlIExpY2Vuc2VkIFRyYWRlbWFyaywgb3IgYXMgb3RoZXJ3aXNlIHJlYXNvbmFibHkgZGlyZWN0ZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyOyAKWW91IGFja25vd2xlZGdlcyB0aGF0IGFsbCByaWdodCwgdGl0bGUgYW5kIGludGVyZXN0IGluIGFuZCB0byB0aGUgTGljZW5zZWQgVHJhZGVtYXJrIGlzIGFuZCBzaGFsbCByZW1haW4gd2l0aCB0aGUgSW5pdGlhbCBEZXZlbG9wZXI7IApZb3UgYWdyZWUgdGhhdCB5b3Ugd2lsbCBkbyBub3RoaW5nIGluY29uc2lzdGVudCB3aXRoIHN1Y2ggb3duZXJzaGlwIGFuZCB0aGF0IGFsbCB1c2Ugb2YgdGhlIExpY2Vuc2VkIFRyYWRlbWFyayBzaGFsbCBpbnVyZSB0byB0aGUgYmVuZWZpdCBvZiBhbmQgb24gYmVoYWxmIG9mIHRoZSBJbml0aWFsIERldmVsb3BlcjsgCk5vdGhpbmcgaW4gdGhpcyBMaWNlbnNlIHNoYWxsIGdpdmUgeW91IGFueSByaWdodCwgdGl0bGUgb3IgaW50ZXJlc3QgaW4gdGhlIExpY2Vuc2VkIFRyYWRlbWFyayBvdGhlciB0aGFuIHRoZSByaWdodCB0byB1c2UgdGhlIExpY2Vuc2VkIFRyYWRlbWFyayBpbiBhY2NvcmRhbmNlIHdpdGggdGhpcyBMaWNlbnNlOyAKWW91IGZ1cnRoZXIgYWdyZWUgdGhhdCB5b3Ugc2hhbGwgbWFrZSBubyBjbGFpbSB0byBvciBhZ2FpbnN0IHRoZSBJbml0aWFsIERldmVsb3BlcpJzIHRpdGxlIHRvIHRoZSBMaWNlbnNlZCBUcmFkZW1hcmssIG9yIHJlZ2lzdGVyIHRoZSBzYW1lIG9yIGFueSBtYXJrIGNvbmZ1c2luZ2x5IHNpbWlsYXIgdG8gdGhlIExpY2Vuc2VkIFRyYWRlbWFya3M7IApFeGNlcHQgYXMgcmVxdWlyZWQgaW4gYW55IGNvcHlyaWdodCBub3RpY2Ugc2V0IGZvcnRoIGluIHRoaXMgTGljZW5zZSwgbm90aGluZyBpbiB0aGlzIExpY2Vuc2Ugc2hhbGwgZ2l2ZSB5b3UgdGhlIHJpZ2h0IHRvIHVzZSB0aGUgbmFtZSBvciB0cmFkZW1hcmtzIG9mIGFueSBDb250cmlidXRvcnMgd2l0aG91dCB0aGVpciBzcGVjaWZpYywgd3JpdHRlbiBwZXJtaXNzaW9uOyAKVEVSTVMgQU5EIENPTkRJVElPTlMgT0YgTElDRU5TRQoKT3JpZ2luYWwgV29yay4gWW91IG1heSB1c2UsIGNvcHkgYW5kIGRpc3RyaWJ1dGUgdmVyYmF0aW0gY29waWVzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGFzIHlvdSByZWNlaXZlIGl0LCBpbiBhbnkgbWVkaXVtLCBwcm92aWRlZCB0aGF0IHlvdTogCmNvbnNwaWN1b3VzbHkgYW5kIGFwcHJvcHJpYXRlbHkgcHVibGlzaCBvbiBlYWNoIGNvcHkgdGhlIGFwcHJvcHJpYXRlIGF0dHJpYnV0aW9uIGFuZCBkaXNjbGFpbWVyIG9mIHdhcnJhbnR5IGFzIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2U7IAprZWVwIGludGFjdCBhbGwgdGhlIG5vdGljZXMgdGhhdCByZWZlciB0byB0aGlzIExpY2Vuc2UgYW5kIHRvIHRoZSBhYnNlbmNlIG9mIGFueSB3YXJyYW50eTsgYW5kIApnaXZlIGFueSBvdGhlciByZWNpcGllbnRzIG9mIHRoZSBPcmlnaW5hbCBXb3JrIGEgY29weSBvZiB0aGlzIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGUgT3JpZ2luYWwgV29yay4gCllvdSBtYXkgY2hhcmdlIGEgZmVlIGZvciB0aGUgcGh5c2ljYWwgYWN0IG9mIHRyYW5zZmVycmluZyBhIGNvcHkgb2YgdGhlIE9yaWdpbmFsIFdvcmssIGFuZCB5b3UgbWF5IGF0IHlvdXIgb3B0aW9uIG9mZmVyIHdhcnJhbnR5IHByb3RlY3Rpb24gaW4gZXhjaGFuZ2UgZm9yIGEgZmVlLCBhbGwgYXQgeW91ciBvd24gcmlzayBhcyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlLgoKTW9kaWZpY2F0aW9ucyB0byBDb3ZlcmVkIFdvcmsuIFlvdSBtYXkgbW9kaWZ5IHlvdXIgY29weSBvciBjb3BpZXMgb2YgdGhlIENvdmVyZWQgV29yayBvciBhbnkgcG9ydGlvbiBvZiBpdCwgdGh1cyBmb3JtaW5nIGEgTW9kaWZpY2F0aW9uLCBhbmQgY29weSBhbmQgZGlzdHJpYnV0ZSBzdWNoIE1vZGlmaWNhdGlvbnMgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgdGhhdCB5b3UgYWxzbyBtZWV0IGFsbCBvZiB0aGVzZSBjb25kaXRpb25zOgoKWW91IG1lZXQgdGhlIGF0dHJpYnV0aW9uIG9ibGlnYXRpb25zIHNldCBmb3J0aCBpbiB0aGlzIExpY2Vuc2U7IApZb3UgbXVzdCBjYXVzZSBhbnkgd29yayB0aGF0IHlvdSBkaXN0cmlidXRlIG9yIHB1Ymxpc2gsIHRoYXQgaW4gd2hvbGUgb3IgaW4gcGFydCBjb250YWlucyBvciBpcyBkZXJpdmVkIGZyb20gdGhlIENvdmVyZWQgV29yayBvciBhbnkgcGFydCB0aGVyZW9mLCB0byBiZSBsaWNlbnNlZCBhcyBhIHdob2xlIGF0IG5vIGNoYXJnZSB0byBhbGwgdGhpcmQgcGFydGllcyB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlOyBhbmQgCklmIHRoZSBNb2RpZmljYXRpb24gbm9ybWFsbHkgcmVhZHMgY29tbWFuZHMgaW50ZXJhY3RpdmVseSB3aGVuIHJ1biwgeW91IG11c3QgY2F1c2UgaXQsIHdoZW4gc3RhcnRlZCBydW5uaW5nIGZvciBzdWNoIGludGVyYWN0aXZlIHVzZSBpbiB0aGUgbW9zdCBvcmRpbmFyeSB3YXksIHRvIHByaW50IG9yIGRpc3BsYXkgYW4gYW5ub3VuY2VtZW50IGluY2x1ZGluZyBhbiBhcHByb3ByaWF0ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCBhIG5vdGljZSBkaXNjbGFpbWluZyBhbnkgd2FycmFudHkgKG9yIGVsc2UsIHNheWluZyB0aGF0IHlvdSBwcm92aWRlIGEgd2FycmFudHkpIGFuZCB0aGF0IHVzZXJzIG1heSByZWRpc3RyaWJ1dGUgdGhlIE1vZGlmaWNhdGlvbnMgdW5kZXIgdGhlc2UgY29uZGl0aW9ucywgYW5kIHRlbGxpbmcgdGhlIHVzZXIgaG93IHRvIHZpZXcgYSBjb3B5IG9mIHRoaXMgTGljZW5zZS4gWW91ciBNb2RpZmljYXRpb24gaXMgbm90IHJlcXVpcmVkIHRvIHByaW50IGFuIGFubm91bmNlbWVudCBpZiB0aGUgTW9kaWZpY2F0aW9uIGl0c2VsZiBpcyBpbnRlcmFjdGl2ZSBidXQgZG9lcyBub3Qgbm9ybWFsbHkgcHJpbnQgc3VjaCBhbiBhbm5vdW5jZW1lbnQuIApSZXF1aXJlZCBOb3RpY2VzLiBZb3UgbXVzdCBjYXVzZSBhbGwgQ292ZXJlZCBXb3JrIHRvIHdoaWNoIHlvdSBjb250cmlidXRlIHRvIGNvbnRhaW4gYSBmaWxlIGRvY3VtZW50aW5nIHRoZSBjaGFuZ2VzIHlvdSBtYWRlIHRvIGNyZWF0ZSB0aGF0IENvdmVyZWQgV29yayBhbmQgdGhlIGRhdGUgb2YgYW55IGNoYW5nZS4gWW91IG11c3QgZHVwbGljYXRlIHRoZSBub3RpY2UgaW4gRXhoaWJpdCBBIGluIGVhY2ggZmlsZSBvZiB0aGUgQ292ZXJlZCBXb3JrLCBhbmQgdGhpcyBMaWNlbnNlIGluIGFueSBkb2N1bWVudGF0aW9uIGZvciB0aGUgQ292ZXJlZCBXb3JrLCB3aGVyZSB5b3UgZGVzY3JpYmUgcmVjaXBpZW50cycgcmlnaHRzIHJlbGF0aW5nIHRvIENvdmVyZWQgV29yay4gVGhpcyBub3RpY2UgaW5jbHVkZXMgdGhlIG5hbWUgb2YgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBhbnkgQ29udHJpYnV0b3IsIGFuZCBtdXN0IGJlIGNvbnNwaWN1b3VzbHkgcGxhY2VkIGluIChhKSB0aGUgU291cmNlIENvZGUsIGFuZCAoYikgaW4gYW55IEV4ZWN1dGFibGUgb3IgcmVsYXRlZCBkb2N1bWVudGF0aW9uIGluIHdoaWNoIHlvdSBkZXNjcmliZSB0aGUgb3JpZ2luIG9yIG93bmVyc2hpcCBvZiB0aGUgQ292ZXJlZCBXb3JrLiBJZiBZb3UgY3JlYXRlZCBvbmUgb3IgbW9yZSBNb2RpZmljYXRpb24ocyksIFlvdSBtYXkgYWRkIHlvdXIgbmFtZSBhcyBhIENvbnRyaWJ1dG9yIHRvIHRoZSBub3RpY2UgZGVzY3JpYmVkIGluIEV4aGliaXQgQS4gSWYgaXQgaXMgbm90IHBvc3NpYmxlIHRvIHB1dCBzdWNoIG5vdGljZSBpbiBhIHBhcnRpY3VsYXIgc291cmNlIGNvZGUgZmlsZSBkdWUgdG8gaXRzIHN0cnVjdHVyZSwgdGhlbiB5b3UgbXVzdCBpbmNsdWRlIHN1Y2ggbm90aWNlIGluIGEgbG9jYXRpb24gKHN1Y2ggYXMgYSByZWxldmFudCBkaXJlY3RvcnkgZmlsZSkgd2hlcmUgYSB1c2VyIHdvdWxkIGJlIGxpa2VseSB0byBsb29rIGZvciBzdWNoIGEgbm90aWNlLiBZb3UgbWF5IGNob29zZSB0byBvZmZlciwgYW5kIHRvIGNoYXJnZSBhIGZlZSBmb3IsIHdhcnJhbnR5LCBzdXBwb3J0LCBpbmRlbW5pdHkgb3IgbGlhYmlsaXR5IG9ibGlnYXRpb25zIHRvIG9uZSBvciBtb3JlIHJlY2lwaWVudHMgb2YgQ292ZXJlZCBXb3JrLiBIb3dldmVyLCB5b3UgbWF5IGRvIHNvIG9ubHkgb24geW91ciBvd24gYmVoYWxmLCBhbmQgbm90IG9uIGJlaGFsZiBvZiB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3IgYW55IENvbnRyaWJ1dG9yLiBZb3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhbiBhbnkgc3VjaCB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSBvYmxpZ2F0aW9uIGlzIG9mZmVyZWQgYnkgeW91IGFsb25lLCBhbmQgeW91IGhlcmVieSBhZ3JlZSB0byBpbmRlbW5pZnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIGFuZCBldmVyeSBDb250cmlidXRvciBmb3IgYW55IGxpYWJpbGl0eSBpbmN1cnJlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIgb3Igc3VjaCBDb250cmlidXRvciBhcyBhIHJlc3VsdCBvZiB3YXJyYW50eSwgc3VwcG9ydCwgaW5kZW1uaXR5IG9yIGxpYWJpbGl0eSB0ZXJtcyB5b3Ugb2ZmZXIuIFlvdSBtYXkgY3JlYXRlIGEgTGFyZ2VyIFdvcmsgYnkgY29tYmluaW5nIENvdmVyZWQgV29yayB3aXRoIG90aGVyIGNvZGUgbm90IGdvdmVybmVkIGJ5IHRoZSB0ZXJtcyBvZiB0aGlzIExpY2Vuc2UgYW5kIGRpc3RyaWJ1dGUgdGhlIExhcmdlciBXb3JrIGFzIGEgc2luZ2xlIHByb2R1Y3QuIEluIHN1Y2ggYSBjYXNlLCB5b3UgbXVzdCBtYWtlIHN1cmUgdGhlIHJlcXVpcmVtZW50cyBvZiB0aGlzIExpY2Vuc2UgYXJlIGZ1bGZpbGxlZCBmb3IgdGhlIENvdmVyZWQgV29yay4KCkRpc3RyaWJ1dGlvbiBvZiBDb3ZlcmVkIFdvcmsuIFlvdSBtYXkgY29weSBhbmQgZGlzdHJpYnV0ZSB0aGUgQ292ZXJlZCBXb3JrIGFzIGFuIEV4ZWN1dGFibGUgdW5kZXIgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZSBwcm92aWRlZCB0aGF0IHlvdSBhbHNvIGRvIG9uZSBvZiB0aGUgZm9sbG93aW5nOgoKQWNjb21wYW55IGl0IHdpdGggdGhlIGNvbXBsZXRlIGNvcnJlc3BvbmRpbmcgbWFjaGluZS1yZWFkYWJsZSBTb3VyY2UgQ29kZSwgd2hpY2ggbXVzdCBiZSBkaXN0cmlidXRlZCBhcyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciwgCkFjY29tcGFueSBpdCB3aXRoIGEgd3JpdHRlbiBvZmZlciwgdmFsaWQgZm9yIGF0IGxlYXN0IHRocmVlIHllYXJzLCB0byBnaXZlIGFueSB0aGlyZCBwYXJ0eSwgZm9yIGEgY2hhcmdlIG5vIG1vcmUgdGhhbiB5b3VyIGNvc3Qgb2YgcGh5c2ljYWxseSBwZXJmb3JtaW5nIHNvdXJjZSBkaXN0cmlidXRpb24sIGEgY29tcGxldGUgbWFjaGluZS1yZWFkYWJsZSBjb3B5IG9mIHRoZSBjb3JyZXNwb25kaW5nIFNvdXJjZSBDb2RlLCB0byBiZSBkaXN0cmlidXRlZCBhcyBzZXQgZm9ydGggaW4gdGhpcyBMaWNlbnNlIG9uIGEgbWVkaXVtIGN1c3RvbWFyaWx5IHVzZWQgZm9yIHNvZnR3YXJlIGludGVyY2hhbmdlOyBvciAKQWNjb21wYW55IGl0IHdpdGggdGhlIGluZm9ybWF0aW9uIHlvdSByZWNlaXZlZCBhcyB0byB0aGUgb2ZmZXIgdG8gZGlzdHJpYnV0ZSBjb3JyZXNwb25kaW5nIFNvdXJjZSBDb2RlLiAoVGhpcyBhbHRlcm5hdGl2ZSBpcyBhbGxvd2VkIG9ubHkgZm9yIG5vbmNvbW1lcmNpYWwgZGlzdHJpYnV0aW9uIGFuZCBvbmx5IGlmIHlvdSByZWNlaXZlZCB0aGUgcHJvZ3JhbSBhcyBhbiBFeGVjdXRhYmxlIHdpdGggc3VjaCBhbiBvZmZlciwgaW4gYWNjb3JkIHdpdGggdGhlIGFib3ZlLikgCkZvciBhbiBFeGVjdXRhYmxlIHdvcmssIFNvdXJjZSBDb2RlIG11c3QgaW5jbHVkZSBhbGwgdGhlIFNvdXJjZSBDb2RlIGZvciBhbGwgbW9kdWxlcyB0aGUgRXhlY3V0YWJsZSBjb250YWlucywgcGx1cyBhbnkgYXNzb2NpYXRlZCBpbnRlcmZhY2UgZGVmaW5pdGlvbiBmaWxlcywgcGx1cyB0aGUgc2NyaXB0cyB1c2VkIHRvIGNvbnRyb2wgY29tcGlsYXRpb24gYW5kIGluc3RhbGxhdGlvbiBvZiB0aGUgZXhlY3V0YWJsZS4gSG93ZXZlciwgYXMgYSBzcGVjaWFsIGV4Y2VwdGlvbiwgdGhlIFNvdXJjZSBDb2RlIGRpc3RyaWJ1dGVkIG5lZWQgbm90IGluY2x1ZGUgYW55dGhpbmcgdGhhdCBpcyBub3JtYWxseSBkaXN0cmlidXRlZCAoaW4gZWl0aGVyIHNvdXJjZSBvciBiaW5hcnkgZm9ybSkgd2l0aCB0aGUgbWFqb3IgY29tcG9uZW50cyAoY29tcGlsZXIsIGtlcm5lbCwgYW5kIHNvIG9uKSBvZiB0aGUgb3BlcmF0aW5nIHN5c3RlbSBvbiB3aGljaCB0aGUgRXhlY3V0YWJsZSBydW5zLCB1bmxlc3MgdGhhdCBjb21wb25lbnQgaXRzZWxmIGFjY29tcGFuaWVzIHRoZSBFeGVjdXRhYmxlLiBJZiBkaXN0cmlidXRpb24gb2YgYW4gRXhlY3V0YWJsZSBpcyBtYWRlIGJ5IG9mZmVyaW5nIGFjY2VzcyB0byBjb3B5IGZyb20gYSBkZXNpZ25hdGVkIHBsYWNlLCB0aGVuIG9mZmVyaW5nIGVxdWl2YWxlbnQgYWNjZXNzIHRvIGNvcHkgdGhlIFNvdXJjZSBDb2RlIGZyb20gdGhlIHNhbWUgcGxhY2UgY291bnRzIGFzIGRpc3RyaWJ1dGlvbiBvZiB0aGUgU291cmNlIENvZGUsIGV2ZW4gdGhvdWdoIHRoaXJkIHBhcnRpZXMgYXJlIG5vdCBjb21wZWxsZWQgdG8gY29weSB0aGUgU291cmNlIENvZGUgYWxvbmcgd2l0aCB0aGUgRXhlY3V0YWJsZS4gCk90aGVyIERpc3RyaWJ1dGlvbiBPYmxpZ2F0aW9ucy4gVGhlIE1vZGlmaWNhdGlvbnMgd2hpY2ggWW91IGNyZWF0ZSBvciB0byB3aGljaCBZb3UgY29udHJpYnV0ZSBhcmUgZ292ZXJuZWQgYnkgdGhlIHRlcm1zIG9mIHRoaXMgTGljZW5zZS4gVGhlIFNvdXJjZSBDb2RlIHZlcnNpb24gb2YgdGhlIENvdmVyZWQgV29yayBtYXkgYmUgZGlzdHJpYnV0ZWQgb25seSB1bmRlciB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIG9yIGEgZnV0dXJlIHZlcnNpb24gb2YgdGhpcyBMaWNlbnNlLCBhbmQgeW91IG11c3QgaW5jbHVkZSBhIGNvcHkgb2YgdGhpcyBMaWNlbnNlIHdpdGggZXZlcnkgY29weSBvZiB0aGUgQ292ZXJlZCBXb3JrIHlvdSBkaXN0cmlidXRlLiBZb3UgbWF5IG5vdCBvZmZlciBvciBpbXBvc2UgYW55IHRlcm1zIG9uIGFueSBDb3ZlcmVkIFdvcmsgdmVyc2lvbiB0aGF0IGFsdGVycyBvciByZXN0cmljdHMgdGhlIGFwcGxpY2FibGUgdmVyc2lvbiBvZiB0aGlzIExpY2Vuc2Ugb3IgdGhlIHJlY2lwaWVudHMnIHJpZ2h0cyBoZXJldW5kZXIuIFRoZXNlIHJlcXVpcmVtZW50cyBhcHBseSB0byB0aGUgTW9kaWZpY2F0aW9uIGFzIGEgd2hvbGUuIElmIGlkZW50aWZpYWJsZSBzZWN0aW9ucyBvZiB0aGF0IHdvcmsgYXJlIG5vdCBkZXJpdmVkIGZyb20gdGhlIENvdmVyZWQgV29yaywgYW5kIGNhbiBiZSByZWFzb25hYmx5IGNvbnNpZGVyZWQgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmtzIGluIHRoZW1zZWx2ZXMsIHRoZW4gdGhpcyBMaWNlbnNlLCBhbmQgaXRzIHRlcm1zLCBkbyBub3QgYXBwbHkgdG8gdGhvc2Ugc2VjdGlvbnMgd2hlbiB5b3UgZGlzdHJpYnV0ZSB0aGVtIGFzIHNlcGFyYXRlIHdvcmtzLiBXaGVuIHlvdSBkaXN0cmlidXRlIHRoZSBzYW1lIHNlY3Rpb25zIGFzIHBhcnQgb2YgYSBMYXJnZXIgV29yaywgdGhlIGRpc3RyaWJ1dGlvbiBvZiB0aGUgTGFyZ2VyIFdvcmsgbXVzdCBiZSBvbiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlLCB3aG9zZSBwZXJtaXNzaW9ucyBmb3Igb3RoZXIgbGljZW5zZWVzIGV4dGVuZCB0byB0aGUgTGFyZ2VyIFdvcmssIGFuZCB0aHVzIHRvIGVhY2ggYW5kIGV2ZXJ5IHBhcnQgcmVnYXJkbGVzcyBvZiB3aG8gd3JvdGUgaXQuIEl0IGlzIG5vdCB0aGUgaW50ZW50IG9mIHRoaXMgc2VjdGlvbiB0byBjbGFpbSByaWdodHMgb3IgY29udGVzdCB5b3VyIHJpZ2h0cyB0byB3b3JrIHdyaXR0ZW4gZW50aXJlbHkgYnkgeW91OyByYXRoZXIsIHRoZSBpbnRlbnQgaXMgdG8gZXhlcmNpc2UgdGhlIHJpZ2h0IHRvIGNvbnRyb2wgdGhlIGRpc3RyaWJ1dGlvbiBvZiBkZXJpdmF0aXZlIG9yIGNvbGxlY3RpdmUgd29ya3MgYmFzZWQgb24gdGhlIENvdmVyZWQgV29yay4gSW4gYWRkaXRpb24sIG1lcmUgYWdncmVnYXRpb24gb2YgaW5kZXBlbmRlbnQgYW5kIHNlcGFyYXRlIHdvcmsocykgd2l0aCB0aGUgQ292ZXJlZCBXb3JrIG9uIGEgdm9sdW1lIG9mIGEgc3RvcmFnZSBvciBkaXN0cmlidXRpb24gbWVkaXVtIGRvZXMgbm90IGJyaW5nIHRoZSBvdGhlciB3b3JrIHVuZGVyIHRoZSBzY29wZSBvZiB0aGlzIExpY2Vuc2UuIFlvdSBtYXkgZGlzdHJpYnV0ZSB0aGUgRXhlY3V0YWJsZSB2ZXJzaW9uIG9mIENvdmVyZWQgV29yayB1bmRlciBhIGxpY2Vuc2Ugb2YgeW91ciBjaG9pY2UsIHdoaWNoIG1heSBjb250YWluIHRlcm1zIGRpZmZlcmVudCBmcm9tIHRoaXMgTGljZW5zZSwgcHJvdmlkZWQgdGhhdCBZb3UgYXJlIGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIGFuZCB0aGF0IHRoZSBsaWNlbnNlIGZvciB0aGUgZXhlY3V0YWJsZSB2ZXJzaW9uIGRvZXMgbm90IGF0dGVtcHQgdG8gbGltaXQgb3IgYWx0ZXIgdGhlIHJlY2lwaWVudCdzIHJpZ2h0cyBpbiB0aGUgc291cmNlIGNvZGUgdmVyc2lvbiBmcm9tIHRoZSByaWdodHMgc2V0IGZvcnRoIGluIHRoaXMgTGljZW5zZS4gSWYgeW91IGRpc3RyaWJ1dGUgdGhlIGV4ZWN1dGFibGUgdmVyc2lvbiB1bmRlciBhIGRpZmZlcmVudCBsaWNlbnNlLCB5b3UgbXVzdCBtYWtlIGl0IGFic29sdXRlbHkgY2xlYXIgdGhhdCBhbnkgdGVybXMgd2hpY2ggZGlmZmVyIGZyb20gdGhpcyBMaWNlbnNlIGFyZSBvZmZlcmVkIGJ5IFlvdSBhbG9uZSwgbm90IGJ5IHRoZSBJbml0aWFsIERldmVsb3BlciBvciBhbnkgQ29udHJpYnV0b3IuIFlvdSBoZXJlYnkgYWdyZWUgdG8gaW5kZW1uaWZ5IHRoZSBJbml0aWFsIERldmVsb3BlciBhbmQgZXZlcnkgQ29udHJpYnV0b3IgZm9yIGFueSBsaWFiaWxpdHkgaW5jdXJyZWQgYnkgdGhlIEluaXRpYWwgRGV2ZWxvcGVyIG9yIHN1Y2ggQ29udHJpYnV0b3IgYXMgYSByZXN1bHQgb2YgYW55IHN1Y2ggdGVybXMgeW91IG9mZmVyLgoKUkVTVFJJQ1RJT05TCgpZb3UgbWF5IG5vdCBjb3B5LCBtb2RpZnksIHN1YmxpY2Vuc2UsIG9yIGRpc3RyaWJ1dGUgdGhlIENvdmVyZWQgV29yayBleGNlcHQgYXMgZXhwcmVzc2x5IHByb3ZpZGVkIHVuZGVyIHRoaXMgTGljZW5zZS4gQW55IGF0dGVtcHQgb3RoZXJ3aXNlIHRvIGNvcHksIG1vZGlmeSwgc3VibGljZW5zZSBvciBkaXN0cmlidXRlIHRoZSBDb3ZlcmVkIFdvcmsgaXMgdm9pZCwgYW5kIHdpbGwgYXV0b21hdGljYWxseSB0ZXJtaW5hdGUgeW91ciByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLiBIb3dldmVyLCBwYXJ0aWVzIHdobyBoYXZlIHJlY2VpdmVkIGNvcGllcywgb3IgcmlnaHRzLCBmcm9tIHlvdSB1bmRlciB0aGlzIExpY2Vuc2Ugd2lsbCBub3QgaGF2ZSB0aGVpciBsaWNlbnNlcyB0ZXJtaW5hdGVkIHNvIGxvbmcgYXMgc3VjaCBwYXJ0aWVzIHJlbWFpbiBpbiBmdWxsIGNvbXBsaWFuY2UuIFlvdSBhcmUgbm90IHJlcXVpcmVkIHRvIGFjY2VwdCB0aGlzIExpY2Vuc2UsIHNpbmNlIHlvdSBoYXZlIG5vdCBzaWduZWQgaXQuIEhvd2V2ZXIsIG5vdGhpbmcgZWxzZSBncmFudHMgeW91IHBlcm1pc3Npb24gdG8gbW9kaWZ5IG9yIGRpc3RyaWJ1dGUgdGhlIENvdmVyZWQgV29yayBvciBpdHMgTW9kaWZpY2F0aW9ucy4gVGhlc2UgYWN0aW9ucyBhcmUgcHJvaGliaXRlZCBieSBsYXcgaWYgeW91IGRvIG5vdCBhY2NlcHQgdGhpcyBMaWNlbnNlLiBUaGVyZWZvcmUsIGJ5IG1vZGlmeWluZyBvciBkaXN0cmlidXRpbmcgdGhlIENvdmVyZWQgV29yayAob3IgYW55IHdvcmsgYmFzZWQgb24gdGhlIENvdmVyZWQgV29yayksIHlvdSBpbmRpY2F0ZSB5b3VyIGFjY2VwdGFuY2Ugb2YgdGhpcyBMaWNlbnNlIHRvIGRvIHNvLCBhbmQgYWxsIGl0cyB0ZXJtcyBhbmQgY29uZGl0aW9ucyBmb3IgY29weWluZywgZGlzdHJpYnV0aW5nIG9yIG1vZGlmeWluZyB0aGUgQ292ZXJlZCBXb3JrIG9yIHdvcmtzIGJhc2VkIG9uIGl0LgoKSWYgaXQgaXMgaW1wb3NzaWJsZSBmb3IgWW91IHRvIGNvbXBseSB3aXRoIGFueSBvZiB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHdpdGggcmVzcGVjdCB0byBzb21lIG9yIGFsbCBvZiB0aGUgQ292ZXJlZCBXb3JrIGR1ZSB0byBzdGF0dXRlIG9yIHJlZ3VsYXRpb24sIHRoZW4gWW91IG11c3Q6IChhKSBjb21wbHkgd2l0aCB0aGUgdGVybXMgb2YgdGhpcyBMaWNlbnNlIHRvIHRoZSBtYXhpbXVtIGV4dGVudCBwb3NzaWJsZTsgYW5kIChiKSBkZXNjcmliZSB0aGUgbGltaXRhdGlvbnMgYW5kIHRoZSBjb2RlIHRoZXkgYWZmZWN0LiBTdWNoIGRlc2NyaXB0aW9uIG11c3QgYmUgaW5jbHVkZWQgd2l0aCBhbGwgZGlzdHJpYnV0aW9ucyBvZiB0aGUgQ292ZXJlZCBXb3JrLiBFeGNlcHQgdG8gdGhlIGV4dGVudCBwcm9oaWJpdGVkIGJ5IHN0YXR1dGUgb3IgcmVndWxhdGlvbiwgc3VjaCBkZXNjcmlwdGlvbiBtdXN0IGJlIHN1ZmZpY2llbnRseSBkZXRhaWxlZCBmb3IgYSByZWNpcGllbnQgb2Ygb3JkaW5hcnkgc2tpbGwgdG8gYmUgYWJsZSB0byB1bmRlcnN0YW5kIGl0LiBJZiB5b3UgY2Fubm90IGRpc3RyaWJ1dGUgc28gYXMgdG8gc2F0aXNmeSBzaW11bHRhbmVvdXNseSB5b3VyIG9ibGlnYXRpb25zIHVuZGVyIHRoaXMgTGljZW5zZSBhbmQgYW55IG90aGVyIHBlcnRpbmVudCBvYmxpZ2F0aW9ucyAod2hldGhlciBieSBjb3VydCBvcmRlciwgYWdyZWVtZW50IG9yIG90aGVyd2lzZSksIHRoZW4gYXMgYSBjb25zZXF1ZW5jZSB5b3UgbWF5IG5vdCBkaXN0cmlidXRlIHRoZSBDb3ZlcmVkIFdvcmsgYXQgYWxsLiBGb3IgZXhhbXBsZSwgaWYgYSBwYXRlbnQgbGljZW5zZSB3b3VsZCBub3QgcGVybWl0IHJveWFsdHktZnJlZSByZWRpc3RyaWJ1dGlvbiBvZiB0aGUgQ292ZXJlZCBXb3JrIGJ5IGFsbCB0aG9zZSB3aG8gcmVjZWl2ZSBjb3BpZXMgZGlyZWN0bHkgb3IgaW5kaXJlY3RseSB0aHJvdWdoIHlvdSwgdGhlbiB0aGUgb25seSB3YXkgeW91IGNvdWxkIHNhdGlzZnkgYm90aCB0aGUgY291cnQgb3JkZXIgYW5kIHRoaXMgTGljZW5zZSB3b3VsZCBiZSB0byByZWZyYWluIGVudGlyZWx5IGZyb20gZGlzdHJpYnV0aW9uIG9mIHRoZSBDb3ZlcmVkIFdvcmsuIFRoZSBwdXJwb3NlIG9mIHRoaXMgcmVzdHJpY3Rpb24gaXMgdG8gZW5zdXJlIHRoZSBpbnRlZ3JpdHkgb2YgdGhlIGZyZWUgZGlzdHJpYnV0aW9uIG9mIHRoZSBDb3ZlcmVkIFdvcmsuCgpESVNDTEFJTUVSIE9GIFdBUlJBTlRZCgpDT1ZFUkVEIFdPUksgSVMgUFJPVklERUQgVU5ERVIgVEhJUyBMSUNFTlNFIE9OIEFOICJBUyBJUyIgQkFTSVMsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVJVEhFUiBFWFBSRVNTRUQgT1IgSU1QTElFRCwgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFdBUlJBTlRJRVMgVEhBVCBUSEUgQ09WRVJFRCBXT1JLIElTIEZSRUUgT0YgREVGRUNUUywgTUVSQ0hBTlRBQkxFLCBGSVQgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIE9SIE5PTi1JTkZSSU5HSU5HLiBUSEUgRU5USVJFIFJJU0sgQVMgVE8gVEhFIFFVQUxJVFkgQU5EIFBFUkZPUk1BTkNFIE9GIFRIRSBDT1ZFUkVEIFdPUksgSVMgV0lUSCBZT1UsIEFORCBORUlUSEVSIFRIRSBJTlRJQUwgREVWRUxPUEVSIE5PUiBBTlkgQ09OVFJJQlVUT1IgSVMgVU5ERVIgQU5ZIE1BSU5URU5BTkNFIE9SIEVORk9SQ0VNRU5UIE9CTElHQVRJT04gQ09OQ0VSTklORyBUSEUgQ09WRVJFRCBXT1JLIEFORCBUSElTIExJQ0VOU0UuIFNIT1VMRCBBTlkgQ09WRVJFRCBXT1JLIFBST1ZFIERFRkVDVElWRSBJTiBBTlkgUkVTUEVDVCwgWU9VIChOT1QgVEhFIElOSVRJQUwgREVWRUxPUEVSIE9SIEFOWSBPVEhFUiBDT05UUklCVVRPUikgQVNTVU1FIFRIRSBDT1NUIE9GIEFOWSBORUNFU1NBUlkgU0VSVklDSU5HLCBSRVBBSVIgT1IgQ09SUkVDVElPTi4gVEhJUyBESVNDTEFJTUVSIE9GIFdBUlJBTlRZIENPTlNUSVRVVEVTIEFOIEVTU0VOVElBTCBQQVJUIE9GIFRISVMgTElDRU5TRS4gTk8gVVNFIE9GIEFOWSBDT1ZFUkVEIFdPUksgSVMgQVVUSE9SSVpFRCBIRVJFVU5ERVIgRVhDRVBUIFVOREVSIFRISVMgRElTQ0xBSU1FUi4KClRFUk1JTkFUSU9OCgpUaGlzIExpY2Vuc2UgYW5kIHRoZSByaWdodHMgZ3JhbnRlZCBoZXJldW5kZXIgd2lsbCB0ZXJtaW5hdGUgYXV0b21hdGljYWxseSBpZiB5b3UgZmFpbCB0byBjb21wbHkgd2l0aCB0ZXJtcyBoZXJlaW4gYW5kIGZhaWwgdG8gY3VyZSBzdWNoIGJyZWFjaCB3aXRoaW4gMzAgZGF5cyBvZiBiZWNvbWluZyBhd2FyZSBvZiB0aGUgYnJlYWNoLiBBbGwgc3VibGljZW5zZXMgdG8gdGhlIENvdmVyZWQgV29yayB3aGljaCBhcmUgcHJvcGVybHkgZ3JhbnRlZCBzaGFsbCBzdXJ2aXZlIGFueSB0ZXJtaW5hdGlvbiBvZiB0aGlzIExpY2Vuc2UuIFByb3Zpc2lvbnMgd2hpY2gsIGJ5IHRoZWlyIG5hdHVyZSwgbXVzdCByZW1haW4gaW4gZWZmZWN0IGJleW9uZCB0aGUgdGVybWluYXRpb24gb2YgdGhpcyBMaWNlbnNlIHNoYWxsIHN1cnZpdmUuIExJTUlUQVRJT04gT0YgTElBQklMSVRZLiBVTkRFUiBOTyBDSVJDVU1TVEFOQ0VTIEFORCBVTkRFUiBOTyBMRUdBTCBUSEVPUlksIFdIRVRIRVIgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UpLCBDT05UUkFDVCwgT1IgT1RIRVJXSVNFLCBTSEFMTCBUSEUgSU5JVElBTCBERVZFTE9QRVIsIEFOWSBPVEhFUiBDT05UUklCVVRPUiwgT1IgQU5ZIERJU1RSSUJVVE9SIE9GIENPVkVSRUQgV09SSywgT1IgQU5ZIFNVUFBMSUVSIE9GIEFOWSBPRiBTVUNIIFBBUlRJRVMsIEJFIExJQUJMRSBUTyBZT1UgT1IgQU5ZIE9USEVSIFBFUlNPTiBGT1IgQU5ZIElORElSRUNULCBTUEVDSUFMLCBJTkNJREVOVEFMLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT0YgQU5ZIENIQVJBQ1RFUiBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgREFNQUdFUyBGT1IgTE9TUyBPRiBHT09EV0lMTCwgV09SSyBTVE9QUEFHRSwgQ09NUFVURVIgRkFJTFVSRSBPUiBNQUxGVU5DVElPTiwgT1IgQU5ZIEFORCBBTEwgT1RIRVIgQ09NTUVSQ0lBTCBEQU1BR0VTIE9SIExPU1NFUywgRVZFTiBJRiBTVUNIIFBBUlRZIFNIQUxMIEhBVkUgQkVFTiBJTkZPUk1FRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTIEFORCBFVkVOIElGIFNVQ0ggQ09WRVJFRCBXT1JLIEZBSUxTIEZPUiBJVFMgRVNTRU5USUFMIFBVUlBPU0UuIFRISVMgTElNSVRBVElPTiBPRiBMSUFCSUxJVFkgU0hBTEwgTk9UIEFQUExZIFRPIExJQUJJTElUWSBGT1IgREVBVEggT1IgUEVSU09OQUwgSU5KVVJZIFJFU1VMVElORyBGUk9NIFNVQ0ggUEFSVFknUyBORUdMSUdFTkNFIFRPIFRIRSBFWFRFTlQgQVBQTElDQUJMRSBMQVcgUFJPSElCSVRTIFNVQ0ggTElNSVRBVElPTi4gU09NRSBKVVJJU0RJQ1RJT05TIERPIE5PVCBBTExPVyBUSEUgRVhDTFVTSU9OIE9SIExJTUlUQVRJT04gT0YgSU5DSURFTlRBTCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMsIFNPIFRIQVQgRVhDTFVTSU9OIEFORCBMSU1JVEFUSU9OIE1BWSBOT1QgQVBQTFkgVE8gWU9VLgoKVS5TLiBHT1ZFUk5NRU5UIEVORCBVU0VSUwoKVGhlIENvdmVyZWQgV29yayBpcyBhICJjb21tZXJjaWFsIGl0ZW0sIiBhcyB0aGF0IHRlcm0gaXMgZGVmaW5lZCBpbiA0OCBDLkYuUi4gMi4xMDEgKE9jdC4gMTk5NSksIGNvbnNpc3Rpbmcgb2YgImNvbW1lcmNpYWwgY29tcHV0ZXIgc29mdHdhcmUiIGFuZCAiY29tbWVyY2lhbCBjb21wdXRlciBzb2Z0d2FyZSBkb2N1bWVudGF0aW9uLCIgYXMgc3VjaCB0ZXJtcyBhcmUgdXNlZCBpbiA0OCBDLkYuUi4gMTIuMjEyIChTZXB0LiAxOTk1KS4gQ29uc2lzdGVudCB3aXRoIDQ4IEMuRi5SLiAxMi4yMTIgYW5kIDQ4IEMuRi5SLiAyMjcuNzIwMi0xIHRocm91Z2ggMjI3LjcyMDItNCAoSnVuZSAxOTk1KSwgYWxsIFUuUy4gR292ZXJubWVudCBFbmQgVXNlcnMgYWNxdWlyZSBDb3ZlcmVkIFdvcmsgd2l0aCBvbmx5IHRob3NlIHJpZ2h0cyBzZXQgZm9ydGggaGVyZWluLgoKTUlTQ0VMTEFORU9VUwoKVGhpcyBMaWNlbnNlIHJlcHJlc2VudHMgdGhlIGNvbXBsZXRlIGFncmVlbWVudCBjb25jZXJuaW5nIHN1YmplY3QgbWF0dGVyIGhlcmVvZi4gSWYgYW55IHByb3Zpc2lvbiBvZiB0aGlzIExpY2Vuc2UgaXMgaGVsZCB0byBiZSB1bmVuZm9yY2VhYmxlLCBzdWNoIHByb3Zpc2lvbiBzaGFsbCBiZSByZWZvcm1lZCBvbmx5IHRvIHRoZSBleHRlbnQgbmVjZXNzYXJ5IHRvIG1ha2UgaXQgZW5mb3JjZWFibGUuIFRoaXMgTGljZW5zZSBzaGFsbCBiZSBnb3Zlcm5lZCBieSB0aGUgbGF3cyBvZiB0aGUgU3RhdGUgb2YgTWlzc291cmksIHdpdGhvdXQgcmVnYXJkIHRvIGl0cyBjaG9pY2Ugb2YgbGF3IHJ1bGVzIGFzIHRob3VnaCBhbGwgYWN0cyBhbmQgb21pc3Npb25zIHJlbGF0ZWQgdG8gdGhpcyBBZ3JlZW1lbnQgb2NjdXJyZWQgaW4gdGhhdCBTdGF0ZS4gV2l0aCByZXNwZWN0IHRvIGRpc3B1dGVzIGluIHdoaWNoIGF0IGxlYXN0IG9uZSBwYXJ0eSBpcyBhIGNpdGl6ZW4gb2YsIG9yIGFuIGVudGl0eSBjaGFydGVyZWQgb3IgcmVnaXN0ZXJlZCB0byBkbyBidXNpbmVzcyBpbiwgdGhlIFVuaXRlZCBTdGF0ZXMgb2YgQW1lcmljYTogW0lGIEFSQklUUkFUSU9OIFNPVUdIVDogKGEpIHVubGVzcyBvdGhlcndpc2UgYWdyZWVkIGluIHdyaXRpbmcsIGFsbCBkaXNwdXRlcyByZWxhdGluZyB0byB0aGlzIExpY2Vuc2UgKGV4Y2VwdGluZyBhbnkgZGlzcHV0ZSByZWxhdGluZyB0byBpbnRlbGxlY3R1YWwgcHJvcGVydHkgcmlnaHRzKSBzaGFsbCBiZSBzdWJqZWN0IHRvIGZpbmFsIGFuZCBiaW5kaW5nIGFyYml0cmF0aW9uLCB3aXRoIHRoZSBsb3NpbmcgcGFydHkgcGF5aW5nIGFsbCBjb3N0cyBvZiBhcmJpdHJhdGlvbjsgKGIpIGFueSBhcmJpdHJhdGlvbiByZWxhdGluZyB0byB0aGlzIEFncmVlbWVudCBzaGFsbCBiZSBoZWxkIGluIFN0LiBMb3VpcywgTWlzc291cmksIHVuZGVyIHRoZSBhdXNwaWNlcyBvZiB0aGUgQW1lcmljYW4gQXJiaXRyYXRpb24gQXNzb2NpYXRpb247IGFuZCAoYyldIGFueSBsaXRpZ2F0aW9uIHJlbGF0aW5nIHRvIHRoaXMgQWdyZWVtZW50IHNoYWxsIGJlIHN1YmplY3QgdG8gdGhlIGp1cmlzZGljdGlvbiBvZiB0aGUgc3RhdGUgYW5kIGZlZGVyYWwgY291cnRzIG9mIE1pc3NvdXJpLCB3aXRoIHRoZSBsb3NpbmcgcGFydHkgcmVzcG9uc2libGUgZm9yIGNvc3RzLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uLCBjb3VydCBjb3N0cyBhbmQgcmVhc29uYWJsZSBhdHRvcm5leXMgZmVlcyBhbmQgZXhwZW5zZXMuIFRoZSBhcHBsaWNhdGlvbiBvZiB0aGUgVW5pdGVkIE5hdGlvbnMgQ29udmVudGlvbiBvbiBDb250cmFjdHMgZm9yIHRoZSBJbnRlcm5hdGlvbmFsIFNhbGUgb2YgR29vZHMgaXMgZXhwcmVzc2x5IGV4Y2x1ZGVkLiBBbnkgbGF3IG9yIHJlZ3VsYXRpb24gd2hpY2ggcHJvdmlkZXMgdGhhdCB0aGUgbGFuZ3VhZ2Ugb2YgYSBjb250cmFjdCBzaGFsbCBiZSBjb25zdHJ1ZWQgYWdhaW5zdCB0aGUgZHJhZnRlciBzaGFsbCBub3QgYXBwbHkgdG8gdGhpcyBMaWNlbnNlLgoKUkVTUE9OU0lCSUxJVFkgRk9SIENMQUlNUwoKWW91IGFyZSByZXNwb25zaWJsZSBmb3IgZGFtYWdlcyBhcmlzaW5nLCBkaXJlY3RseSBvciBpbmRpcmVjdGx5LCBvdXQgb2YgeW91ciB1dGlsaXphdGlvbiBvZiByaWdodHMgdW5kZXIgdGhpcyBMaWNlbnNlLCBiYXNlZCBvbiB0aGUgbnVtYmVyIG9mIGNvcGllcyBvZiBDb3ZlcmVkIFdvcmsgeW91IG1hZGUgYXZhaWxhYmxlLCB0aGUgcmV2ZW51ZXMgeW91IHJlY2VpdmVkIGZyb20gdXRpbGl6aW5nIHN1Y2ggcmlnaHRzLCBhbmQgb3RoZXIgcmVsZXZhbnQgZmFjdG9ycy4gWW91IGFncmVlIHRvIHdvcmsgd2l0aCBhZmZlY3RlZCBwYXJ0aWVzIHRvIGRpc3RyaWJ1dGUgcmVzcG9uc2liaWxpdHkgb24gYW4gZXF1aXRhYmxlIGJhc2lzLgoKVkVSU0lPTlMgT0YgTElDRU5TRSAKClRoZSBJbml0aWFsIERldmVsb3BlciBtYXkgcHVibGlzaCByZXZpc2VkIGFuZC9vciBuZXcgdmVyc2lvbnMgb2YgdGhlIExpY2Vuc2UgZnJvbSB0aW1lIHRvIHRpbWUuIEVhY2ggdmVyc2lvbiB3aWxsIGJlIGdpdmVuIGEgZGlzdGluZ3Vpc2hpbmcgdmVyc2lvbiBudW1iZXIuIE9uY2UgQ292ZXJlZCBXb3JrIGhhcyBiZWVuIHB1Ymxpc2hlZCB1bmRlciBhIHBhcnRpY3VsYXIgdmVyc2lvbiBvZiB0aGUgTGljZW5zZSwgeW91IG1heSBhbHdheXMgY29udGludWUgdG8gdXNlIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGF0IHZlcnNpb24uIFlvdSBtYXkgYWxzbyBjaG9vc2UgdG8gdXNlIHN1Y2ggQ292ZXJlZCBDb2RlIHVuZGVyIHRoZSB0ZXJtcyBvZiBhbnkgc3Vic2VxdWVudCB2ZXJzaW9uIG9mIHRoZSBMaWNlbnNlIHB1Ymxpc2hlZCBieSB0aGUgSW5pdGlhbCBEZXZlbG9wZXIuIE5vIG9uZSBvdGhlciB0aGFuIHRoZSBJbml0aWFsIERldmVsb3BlciBoYXMgdGhlIHJpZ2h0IHRvIG1vZGlmeSB0aGUgdGVybXMgYXBwbGljYWJsZSB0byBDb3ZlcmVkIFdvcmsgY3JlYXRlZCB1bmRlciB0aGlzIExpY2Vuc2UuCgpYTUwgU1RBVEVNRU5UCgpJdCBpcyB0aGUgSW5pdGlhbCBEZXZlbG9wZXKScyBpbnRlbnQgdGhhdCBzb2Z0d2FyZSB3aGljaCBpcyBmcmVlIG9mIGFueSBjbGFpbXMgYmV5b25kIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGlzIExpY2Vuc2UgYmUgY29tcGF0aWJsZSB3aXRoIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSAok0dQTJQpIFtodHRwOi8vd3d3LmdudS5vcmcvY29weWxlZnQvZ3BsLmh0bWxdIGFuZCBXb3JsZFdpZGUgV2ViIENvbnNvcnRpdW0gUmVjb21tZW5kYXRpb24gRXh0ZW5zaWJsZSBNYXJrdXAgTGFuZ3VhZ2UgU3BlY2lmaWNhdGlvbiBbaHR0cDovL3d3dy53My5vcmcvQ29uc29ydGl1bS9MZWdhbF0KCkVYSElCSVQgQQoKIlRoZSBjb250ZW50cyBvZiB0aGlzIGZpbGUgYXJlIHN1YmplY3QgdG8gdGhlIFRyYW5YTUyuIFB1YmxpYyBMaWNlbnNlIFZlcnNpb24gMS4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlIExpY2Vuc2UgYXQgaHR0cDovL3d3dy50cmFueG1sLm9yZy4gU29mdHdhcmUgZGlzdHJpYnV0ZWQgdW5kZXIgdGhlIExpY2Vuc2UgaXMgZGlzdHJpYnV0ZWQgb24gYW4gIkFTIElTIiBiYXNpcywgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgZWl0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4gU2VlIHRoZSBMaWNlbnNlIGZvciB0aGUgc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHJpZ2h0cyBhbmQgbGltaXRhdGlvbnMgdW5kZXIgdGhlIExpY2Vuc2UuIFRoZSBJbml0aWFsIERldmVsb3BlciBvZiB0aGUgT3JpZ2luYWwgQ29kZSBpcyBUcmFuc2VudHJpYywgYSBkaXZpc2lvbiBvZiBVbmlvbiBQYWNpZmljIENvcnBvcmF0aW9uLiBDb3B5cmlnaHQgqSAyMDAwLTIwMDEuIFBvcnRpb25zIGNyZWF0ZWQgYnkgQ29udHJpYnV0b3IgYXJlIENvcHlyaWdodCCpIDIwMDEuIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCgpDb250cmlidXRvcihzKToKS3lsZSBNaWxsZXIsIEdyZWdnIERpZWNraGF1cywgSm9obiBMdXR6LCBSYW5keSBNb3JpbiwgRnJlZCBEb21rZQo=