CkFwYWNoZSBDb21tb25zIElPIApWZXJzaW9uIDIuNQpSZWxlYXNlIE5vdGVzCgpJTlRST0RVQ1RJT046CgpDb21tb25zIElPIGlzIGEgcGFja2FnZSBvZiBKYXZhIHV0aWxpdHkgY2xhc3NlcyBsaWtlIGphdmEuaW8uICAKQ2xhc3NlcyBpbiB0aGlzIHBhY2thZ2UgYXJlIGNvbnNpZGVyZWQgdG8gYmUgc28gc3RhbmRhcmQgYW5kIG9mIHN1Y2ggaGlnaCAKcmV1c2UgYXMgdG8ganVzdGlmeSBleGlzdGVuY2UgaW4gamF2YS5pby4KClRoZSBBcGFjaGUgQ29tbW9ucyBJTyBsaWJyYXJ5IGNvbnRhaW5zIHV0aWxpdHkgY2xhc3Nlcywgc3RyZWFtIGltcGxlbWVudGF0aW9ucywgZmlsZSBmaWx0ZXJzLCAKZmlsZSBjb21wYXJhdG9ycywgZW5kaWFuIHRyYW5zZm9ybWF0aW9uIGNsYXNzZXMsIGFuZCBtdWNoIG1vcmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQXBhY2hlIENvbW1vbnMgSU8gVmVyc2lvbiAyLjUKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ck5ldyBmZWF0dXJlcyBhbmQgYnVnIGZpeGVzLgoKQ2hhbmdlcyBpbiB0aGlzIHZlcnNpb24gaW5jbHVkZToKCk5ldyBmZWF0dXJlczoKbyBJTy00ODc6ICBBZGQgVmFsaWRhdGluZ09iamVjdElucHV0U3RyZWFtIGZvciBjb250cm9sbGVkIGRlc2VyaWFsaXphdGlvbiAKbyBJTy00NzE6ICBTdXBwb3J0IGZvciBhZGRpdGlvbmFsIGVuY29kaW5ncyBpbiBSZXZlcnNlZExpbmVzRmlsZVJlYWRlciBUaGFua3MgdG8gTGVhbmRybyBSZWlzLiAKbyBJTy00MjU6ICBTZXR0ZXIgbWV0aG9kIGZvciB0aHJlc2hvbGQgb24gVGhyZXNob2xkaW5nT3V0cHV0U3RyZWFtIFRoYW5rcyB0byBDcmFpZyBTd2Fuay4gCm8gSU8tNDA2OiAgSW50cm9kdWNlIG5ldyBjbGFzcyBBcHBlbmRhYmxlT3V0cHV0U3RyZWFtIFRoYW5rcyB0byBOaWFsbCBQZW1iZXJ0b24uIApvIElPLTQ1OTogIEFkZCBXaW5kb3dzTGluZUVuZGluZ0lucHV0U3RyZWFtIGFuZCBVbml4TGluZUVuZGluZ0lucHV0U3RyZWFtLiBUaGFua3MgdG8gS3Jpc3RpYW4gUm9zZW52b2xkLiAKbyBJTy00NTc6ICBBZGQgYSBCb3VuZGVkUmVhZGVyLCBhIHdyYXBwZXIgdGhhdCBjYW4gYmUgdXNlZCB0byBjb25zdHJhaW4gYWNjZXNzCiAgICAgICAgdG8gYW4gdW5kZXJseWluZyBzdHJlYW0gd2hlbiB1c2VkIHdpdGggbWFyay9yZXNldCAtCiAgICAgICAgdG8gYXZvaWQgb3ZlcmZsb3dpbmcgdGhlIG1hcmsgbGltaXQgb2YgdGhlIHVuZGVybHlpbmcgYnVmZmVyLiBUaGFua3MgdG8gS3Jpc3RpYW4gUm9zZW52b2xkLiAKbyBJTy00MjY6ICBBZGQgQVBJIElPVXRpbHMuY2xvc2VRdWlldGx5KENsb3NlYWJsZS4uLikgCm8gSU8tNDEwOiAgUmVhZGZ1bGx5KCkgVGhhdCBSZXR1cm5zIEEgQnl0ZSBBcnJheSBUaGFua3MgdG8gQmVsdWdhIEJlaHIuIApvIElPLTM5NTogIE92ZXJsb2FkIElPVXRpbHMgYnVmZmVyIG1ldGhvZHMgdG8gYWNjZXB0IGJ1ZmZlciBzaXplIFRoYW5rcyB0byBCZWx1Z2EgQmVoci4gCm8gSU8tMzgyOiAgQ2h1bmtlZCBJTyBmb3IgbGFyZ2UgYXJyYXlzLgogICAgICAgICBBZGRlZCB3cml0ZUNodW5rZWQoYnl0ZVtdLCBPdXRwdXRTdHJlYW0pIGFuZCB3cml0ZUNodW5rZWQoY2hhcltdIFdyaXRlcikKICAgICAgICAgQWRkZWQgQ2h1bmtlZE91dHB1dFN0cmVhbSwgQ2h1bmtlZFdyaXRlciAKbyBJTy0yMzM6ICBBZGQgTWV0aG9kcyBmb3IgQnVmZmVyaW5nIFN0cmVhbXMvV3JpdGVycyBUbyBJT1V0aWxzCiAgICAgICAgIEFkZGVkIG92ZXJsb2FkZWQgYnVmZmVyKCkgbWV0aG9kcyAtIHNlZSBhbHNvIElPLTMzMCAKbyBJTy0zMzA6ICBJT1V0aWxzI3RvQnVmZmVyZWRPdXRwdXRTdHJlYW0vdG9CdWZmZXJlZFdyaXRlciB0byBjb25kaXRpb25hbGx5IHdyYXAgdGhlIG91dHB1dAogICAgICAgICBBZGRlZCBvdmVybG9hZGVkIGJ1ZmZlcigpIG1ldGhvZHMgLSBzZWUgYWxzbyBJTy0yMzMgCm8gSU8tMzgxOiAgQWRkIEZpbGVVdGlscy5jb3B5SW5wdXRTdHJlYW1Ub0ZpbGUgQVBJIHdpdGggb3B0aW9uIHRvIGxlYXZlIHRoZSBzb3VyY2Ugb3Blbi4KICAgICAgICBTZWUgY29weUlucHV0U3RyZWFtVG9GaWxlKGZpbmFsIElucHV0U3RyZWFtIHNvdXJjZSwgZmluYWwgRmlsZSBkZXN0aW5hdGlvbiwgYm9vbGVhbiBjbG9zZVNvdXJjZSkgCm8gSU8tMzc5OiAgQ2hhclNlcXVlbmNlSW5wdXRTdHJlYW0gLSBhZGQgdGVzdHMgZm9yIGF2YWlsYWJsZSgpCiAgICAgICAgIEZpeCBjb2RlIHNvIGl0IHJlYWxseSBkb2VzIHJlZmxlY3QgYSBtaW5pbXVtIGF2YWlsYWJsZS4gCm8gSU8tMzQ2OiAgQWRkIEJ5dGVBcnJheU91dHB1dFN0cmVhbS50b0lucHV0U3RyZWFtKCkgCm8gSU8tMzQxOiAgQSBjb25zdGFudCBmb3IgaG9sZGluZyB0aGUgQk9NIGNoYXJhY3RlciAoVStGRUZGKSAKbyBJTy0zNjE6ICBBZGQgQVBJIEZpbGVVdGlscy5mb3JjZU1rZGlyc1BhcmVudCgpLiAKbyBJTy0zNjA6ICBBZGQgQVBJIENoYXJzZXRzLnJlcXVpcmVkQ2hhcnNldHMoKS4gCm8gSU8tMzU5OiAgQWRkIElPVXRpbHMuc2tpcCBhbmQgc2tpcEZ1bGx5KFJlYWRhYmxlQnl0ZUNoYW5uZWwsIGxvbmcpLiBUaGFua3MgdG8geXVrb2JhLiAKbyBJTy0zNTg6ICBBZGQgSU9VdGlscy5yZWFkIGFuZCByZWFkRnVsbHkoUmVhZGFibGVCeXRlQ2hhbm5lbCwgQnl0ZUJ1ZmZlciBidWZmZXIpLiBUaGFua3MgdG8geXVrb2JhLiAKbyBJTy0zNTM6ICBBZGQgQVBJIElPVXRpbHMuY29weShJbnB1dFN0cmVhbSwgT3V0cHV0U3RyZWFtLCBpbnQpIFRoYW5rcyB0byBnZ3JlZ29yeS4gCm8gSU8tMzQ5OiAgQWRkIEFQSSB3aXRoIGFycmF5IG9mZnNldCBhbmQgbGVuZ3RoIGFyZ3VtZW50IHRvIEZpbGVVdGlscy53cml0ZUJ5dGVBcnJheVRvRmlsZS4gVGhhbmtzIHRvIHNjb3AuIApvIElPLTM0ODogIE1pc3NpbmcgaW5mb3JtYXRpb24gaW4gSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIHRocm93biBieSBvcmcuYXBhY2hlLmNvbW1vbnMuaW8uRmlsZVV0aWxzI3ZhbGlkYXRlTGlzdEZpbGVzUGFyYW1ldGVycy4gVGhhbmtzIHRvIHBsY3N0cGllcnJlLiAKbyBJTy0zNDU6ICBTdXBwbHkgYSBob29rIG1ldGhvZCBhbGxvd2luZyBUYWlsZXIgYWN0aXZlbHkgZGV0ZXJtaW5pbmcgc3RvcCBjb25kaXRpb24uIFRoYW5rcyB0byBta3Jlc3NlLiAKbyBJTy00Mzc6ICBNYWtlIElPVXRpbHMuRU9GIHB1YmxpYyBhbmQgcmV1c2UgaXQgaW4gdmFyaW91cyBjbGFzc2VzLiAKCkZpeGVkIEJ1Z3M6Cm8gSU8tNDQ2OiAgYWRkcyBhbiBlbmRPZkZpbGVSZWFjaGVkIG1ldGhvZCB0byB0aGUgVGFpbGVyTGlzdGVuZXIgVGhhbmtzIHRvIEplZmZyZXkgQmFycnVzLiAKbyBJTy00ODQ6ICBGaWxlbmFtZVV0aWxzIHNob3VsZCBoYW5kbGUgZW1iZWRkZWQgbnVsbCBieXRlcyBUaGFua3MgdG8gUGhpbGlwcGUgQXJ0ZWF1LiAKbyBJTy00ODE6ICBDaGFuZ2VkL0NvcnJlY3RlZCBhbGdvcml0aG0gZm9yIHdhaXRGb3IgCm8gSU8tNDI4OiAgQk9NSW5wdXRTdHJlYW0uc2tpcCByZXR1cm5zIHdyb25nIGNvdW50IGlmIHN0cmVhbSBjb250YWlucyBubyBCT00gVGhhbmtzIHRvIFN0ZWZhbiBHbWVpbmVyLiAKbyBJTy00ODg6ICBGaWxlVXRpbHMud2FpdEZvciguLi4pIHN3YWxsb3dzIHRocmVhZCBpbnRlcnJ1cHRlZCBzdGF0dXMgVGhhbmtzIHRvIEJq9nJuIEJ1Y2huZXIuIApvIElPLTQ1MjogIFN1cHBvcnQgZm9yIHN5bWxpbmtzIHdpdGggbWlzc2luZyB0YXJnZXQuIEFkZGVkIHN1cHBvcnQgZm9yIEpESzcgc3ltbGluayBmZWF0dXJlcyB3aGVuIHByZXNlbnQgVGhhbmtzIHRvIERhdmlkIFN0YW5kaXNoLiAKbyBJTy00NTM6ICBSZWdyZXNzaW9uIGluIEZpbGVVdGlscy5yZWFkRmlsZVRvU3RyaW5nIGZyb20gMi4wLjEgVGhhbmtzIHRvIFN0ZXZlbiBDaHJpc3RvdS4gCm8gSU8tNDUxOiAgYW50IHRlc3QgZmFpbHMgLSByZXNvdXJjZXMgbWlzc2luZyBmcm9tIHRlc3QgY2xhc3NwYXRoIFRoYW5rcyB0byBEYXZpZCBTdGFuZGlzaC4gCm8gSU8tNDM1OiAgRG9jdW1lbnQgdGhhdCBGaWxlVXRpbHMuZGVsZXRlRGlyZWN0b3J5LCBkaXJlY3RvcnlDb250YWlucyBhbmQgY2xlYW5EaXJlY3RvcnkKICAgICAgICAgbWF5IHRocm93IGFuIElsbGVnYWxBcmd1bWVudEV4Y2VwdGlvbiBpbiBjYXNlIHRoZSBwYXNzZWQgZGlyZWN0b3J5IGRvZXMgbm90CiAgICAgICAgIGV4aXN0IG9yIGlzIG5vdCBhIGRpcmVjdG9yeS4gVGhhbmtzIHRvIERvbWluaWsgU3RhZGxlci4gCm8gSU8tNDI0OiAgSmF2YWRvYyBmaXhlcywgbW9zdGx5IHRvIGFwcGVhc2UgMS44LjAgVGhhbmtzIHRvIFZpbGxlIFNreXR05C4gCm8gSU8tMzg5OiAgRmlsZVV0aWxzLnNpemVPZkRpcmVjdG9yeSBjYW4gdGhyb3cgSWxsZWdhbEFyZ3VtZW50RXhjZXB0aW9uIFRoYW5rcyB0byBBdXN0aW4gRG91cG5pay4gCm8gSU8tMzkwOiAgRmlsZVV0aWxzLnNpemVPZkRpcmVjdG9yeUFzQmlnSW50ZWdlciBjYW4gb3ZlcmZsb3cuCiAgICAgICAgIEVuc3VyZSB0aGF0IHJlY3Vyc2l2ZSBjYWxscyBhbGwgdXNlIEJpZ0ludGVnZXIgCm8gSU8tMzg1OiAgRmlsZVV0aWxzLmRvQ29weUZpbGUgY2FuIHBvdGVudGlhbGx5IGxvb3AgZm9yIGV2ZXIKICAgICAgICAgRXhpdCBsb29wIGlmIG5vIGRhdGEgdG8gY29weSAKbyBJTy0zODM6ICBGaWxlVXRpbHMuZG9Db3B5RmlsZSBjYWNoZXMgdGhlIGZpbGUgc2l6ZTsgbmVlZHMgdG8gYmUgZG9jdW1lbnRlZAogICAgICAgICBBZGRlZCBKYXZhZG9jOyBzaG93IGZpbGUgbGVuZ3RocyBpbiBleGNlcHRpb24gbWVzc2FnZSAKbyBJTy0zODA6ICBGaWxlVXRpbHMuY29weUlucHV0U3RyZWFtVG9GaWxlIHNob3VsZCBkb2N1bWVudCBpdCBjbG9zZXMgdGhlIGlucHV0IHNvdXJjZSBUaGFua3MgdG8gY2xhdWRpb19jaC4gCm8gSU8tMjc5OiAgVGFpbGVyIGVycm9uZW91c2x5IGNvbnNpZGVycyBmaWxlIGFzIG5ldy4KICAgICAgICBGaXggdG8gdXNlIGZpbGUubGFzdE1vZGlmaWVkKCkgcmF0aGVyIHRoYW4gU3lzdGVtLmN1cnJlbnRUaW1lTWlsbGlzKCkgCm8gSU8tMzU2OiAgQ2hhclNlcXVlbmNlSW5wdXRTdHJlYW0jcmVzZXQoKSBiZWhhdmVzIGluY29ycmVjdGx5IGluIGNhc2Ugd2hlbiBidWZmZXIgc2l6ZSBpcyBub3QgZGl2aWRhYmxlIGJ5IGRhdGEgc2l6ZS4KICAgICAgICAgRml4IGNvZGUgc28gc2tpcCByZWxhdGVzIHRvIHRoZSBlbmNvZGVkIGJ5dGVzOyByZXNldCBub3cgcmUtZW5jb2RlcyB0aGUgZGF0YSB1cCB0byB0aGUgcG9pbnQgb2YgdGhlIG1hcmsgCm8gSU8tMzY4OiAgQ2xhc3NMb2FkZXJPYmplY3RJbnB1dFN0cmVhbSBkb2VzIG5vdCBoYW5kbGUgcHJpbWl0aXZlIHR5cGVkIG1lbWJlcnMgCm8gSU8tMzE0OiAgRGVwcmVjYXRlIGFsbCBtZXRob2RzIHRoYXQgdXNlIHRoZSBkZWZhdWx0IGVuY29kaW5nIApvIElPLTMzODogIFdoZW4gYSBmaWxlIGlzIHJvdGF0ZWQsIGZpbmlzaCByZWFkaW5nIHByZXZpb3VzIGZpbGUgcHJpb3IgdG8gc3RhcnRpbmcgbmV3IG9uZSAKbyBJTy0zNTQ6ICBDb21tb25zIElPIFRhaWxlciBkb2VzIG5vdCByZXNwZWN0IFVURi04IENoYXJzZXQuIApvIElPLTMyMzogIFdoYXQgc2hvdWxkIGhhcHBlbiBpbiBGaWxlVXRpbHMuc2l6ZU9mW0RpcmVjdG9yeV0gd2hlbiBhbiBvdmVyZmxvdyB0YWtlcyBwbGFjZT8KICAgICAgICBBZGRlZCBKYXZhZG9jLiAKbyBJTy0zNzI6ICBGaWxlVXRpbHMubW92ZURpcmVjdG9yeSBjYW4gcHJvZHVjZSBtaXNsZWFkaW5nIGVycm9yIG1lc3NhZ2Ugb24gZmFpbGl1cmUgCm8gSU8tMzYyOiAgSU9VdGlscy5jb250ZW50RXF1YWxzKiBtZXRob2RzIHJldHVybnMgZmFsc2UgaWYgaW5wdXQxID09IGlucHV0Miwgc2hvdWxkIHJldHVybiB0cnVlLiBUaGFua3MgdG8gbW1hZHNvbiwgZ2dyZWdvcnkuIApvIElPLTM1NzogIFtUYWlsZXJdIEludGVycnVwdGVkRXhjZXB0aW9uIHdoaWxlIHRoZSB0aHJlYWQgaXMgc2xlZXBpbmcgaXMgc2lsZW50bHkgaWdub3JlZCBUaGFua3MgdG8gbW9ydGVuaC4gCm8gSU8tMzUyOiAgU3BlbGxpbmcgZml4ZXMuIFRoYW5rcyB0byBzY29wLiAKbyBJTy00MzY6ICBJbXByb3BlciBKYXZhRG9jIGNvbW1lbnQgZm9yIEZpbGVuYW1lVXRpbHMuaW5kZXhPZkV4dGVuc2lvbi4gVGhhbmtzIHRvIGNocmlzdG9waC5zY2huZWVnYW5zLiAKCkNoYW5nZXM6Cm8gSU8tNDMzOiAgQ29udmVydGVkIGFsbCB0ZXN0Y2FzZXMgdG8gSlVuaXQgNCAKbyBJTy00NjY6ICBBZGRlZCB0ZXN0Y2FzZSB0byBzaG93IHRoaXMgd2FzIGZpeGVkIHdpdGggSU8tNDIzIApvIElPLTQ3OTogIENvcnJlY3QgZXhjZXB0aW9uIG1lc3NhZ2UgaW4gRmlsZVV0aWxzLmdldEZpbGUoRmlsZSwgU3RyaW5nLi4uKSBUaGFua3MgdG8gWmhvdWNlIENoZW4uIApvIElPLTQ2NTogIFVwZGF0ZSB0byBKVW5pdCA0LjEyIFRoYW5rcyB0byBiYXNlZDIuIApvIElPLTQ2MjogIElPRXhjZXB0aW9uV2l0aENhdXNlIG5vIGxvbmdlciBuZWVkZWQgCm8gSU8tNDIyOiAgRGVwcmVjYXRlIENoYXJzZXRzIENoYXJzZXQgY29uc3RhbnRzIGluIGZhdm9yIG9mIEphdmEgNydzIGphdmEubmlvLmNoYXJzZXQuU3RhbmRhcmRDaGFyc2V0cyAKbyBJTy0yMzk6ICBDb252ZXJ0IElPQ2FzZSB0byBhIEphdmEgMS41KyBFbnVtZXJhdGlvbgogICAgICAgICBbTi5CLiB0aGlzIGlzIGJpbmFyeSBjb21wYXRpYmxlXSAKbyBJTy0zMjg6ICBnZXRQcmVmaXhMZW5ndGggcmV0dXJucyBudWxsIGlmIGZpbGVuYW1lIGhhcyBsZWFkaW5nIHNsYXNoZXMKICAgICAgICBKYXZhZG9jOiBhZGQgZXhhbXBsZXMgdG8gc2hvdyBjb3JyZWN0IGJlaGF2aW91cjsgYWRkIHVuaXQgdGVzdHMgCm8gSU8tMjk5OiAgRmlsZVV0aWxzLmxpc3RGaWxlc0FuZERpcnMgaW5jbHVkZXMgb3JpZ2luYWwgZGlyIGluIHJlc3VsdHMgZXZlbiB3aGVuIGl0IGRvZXNuJ3QgbWF0Y2ggZmlsdGVyCiAgICAgICAgSmF2YWRvYzogY2xhcmlmeSB0aGF0IG9yaWdpbmFsIGRpciBpcyBpbmNsdWRlZCBpbiB0aGUgcmVzdWx0cyAKbyBJTy0zNzU6ICBGaWxlbmFtZVV0aWxzLnNwbGl0T25Ub2tlbnMoU3RyaW5nIHRleHQpIGNoZWNrIGZvciAnKionIGNvdWxkIGJlIHNpbXBsaWZpZWQgCm8gSU8tMzc0OiAgV2lsZGNhcmRGaWxlRmlsdGVyIGN0b3JzIHNob3VsZCBub3QgdXNlIG51bGwgdG8gbWVhbiBJT0Nhc2UuU0VOU0lUSVZFIHdoZW4gZGVsZWdhdGluZyB0byBvdGhlciBjdG9ycyAKCkNvbXBhdGliaWxpdHkgd2l0aCAyLjQ6CkJpbmFyeSBjb21wYXRpYmxlOiBZZXMuClNvdXJjZSBjb21wYXRpYmxlOiBZZXMuClNlbWFudGljIGNvbXBhdGlibGU6IFllcy4KCkNvbXBhdGliaWxpdHkgd2l0aCAyLjIgYW5kIDEuNDoKQmluYXJ5IGNvbXBhdGlibGU6IFllcy4KU291cmNlIGNvbXBhdGlibGU6IE5vLCBzZWUgdGhlIHJhcmUgY2FzZSBpbiBodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0lPLTMxOC4KU2VtYW50aWMgY29tcGF0aWJsZTogTm8sIHNlZSB0aGUgcmFyZSBjYXNlIGluIGh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvSU8tMzE4LgoKQ29tbW9ucyBJTyAyLjUgcmVxdWlyZXMgSkRLIDEuNiBvciBsYXRlci4KQ29tbW9ucyBJTyAyLjQgcmVxdWlyZXMgSkRLIDEuNiBvciBsYXRlci4KQ29tbW9ucyBJTyAyLjMgcmVxdWlyZXMgSkRLIDEuNiBvciBsYXRlci4KQ29tbW9ucyBJTyAyLjIgcmVxdWlyZXMgSkRLIDEuNSBvciBsYXRlci4KQ29tbW9ucyBJTyAxLjQgcmVxdWlyZXMgSkRLIDEuMyBvciBsYXRlci4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpBcGFjaGUgQ29tbW9ucyBJTyBWZXJzaW9uIDIuNAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkNoYW5nZXMgaW4gdGhpcyB2ZXJzaW9uIGluY2x1ZGU6CgpOZXcgZmVhdHVyZXM6Cm8gSU8tMjY5OiAgVGFpbGVyIGxvY2tzIGZpbGUgZnJvbSBkZWxldGlvbi9yZW5hbWUgb24gV2luZG93cy4gVGhhbmtzIHRvCnNlYmIuCm8gSU8tMzMzOiAgRXhwb3J0IE9TR2kgcGFja2FnZXMgYXQgdmVyc2lvbiAxLnggaW4gYWRkaXRpb24gdG8gMi54LiBUaGFua3MKdG8gZm1lc2NoYmUuCm8gSU8tMzIwOiAgQWRkIFhtbFN0cmVhbVJlYWRlciBzdXBwb3J0IGZvciBVVEYtMzIuIFRoYW5rcyB0byBnZ3JlZ29yeS4KbyBJTy0zMzE6ICBCT01JbnB1dFN0cmVhbSB3cm9uZ2x5IGRldGVjdHMgVVRGLTMyTEVfQk9NIGZpbGVzIGFzClVURi0xNkxFX0JPTSBmaWxlcyBpbiBtZXRob2QgZ2V0Qk9NKCkuIFRoYW5rcyB0byBnZ3JlZ29yeS4KbyBJTy0zMjc6ICBBZGQgYnl0ZUNvdW50VG9EaXNwbGF5U2l6ZShCaWdJbnRlZ2VyKS4gVGhhbmtzIHRvIGdncmVnb3J5LgpvIElPLTMyNjogIEFkZCBuZXcgRmlsZVV0aWxzLnNpemVPZltEaXJlY3RvcnldIEFQSXMgdG8gcmV0dXJuIEJpZ0ludGVnZXIuClRoYW5rcyB0byBnZ3JlZ29yeS4KbyBJTy0zMjU6ICBBZGQgSU9VdGlscy50b0J5dGVBcnJheSBtZXRob2RzIHRvIHdvcmsgd2l0aCBVUkwgYW5kIFVSSS4gVGhhbmtzCnRvIHJhdmlwcmFrLgpvIElPLTMyNDogIEFkZCBtaXNzaW5nIENoYXJzZXQgc2lzdGVyIEFQSXMgdG8gbWV0aG9kIHRoYXQgdGFrZSBhIFN0cmluZwpjaGFyc2V0IG5hbWUuIFRoYW5rcyB0byByYXZpcHJhay4KCkZpeGVkIEJ1Z3M6Cm8gSU8tMzM2OiAgWW90dGFieXRlIChZQikgaW5jb3JyZWN0bHkgZGVmaW5lZCBpbiBGaWxlVXRpbHMuIFRoYW5rcyB0bwpybGVhdmVsbGUuCm8gSU8tMjc5OiAgVGFpbGVyIGVycm9uZW91c2x5IGNvbnNpZGVycyBmaWxlIGFzIG5ldy4gVGhhbmtzIHRvIFNlcmdpbwpCb3NzYSwgQ2hyaXMgQmFyb24uCm8gSU8tMzM1OiAgVGFpbGVyI3JlYWRMaW5lcyAtIGluY29ycmVjdCBDUiBoYW5kbGluZy4KbyBJTy0zMzQ6ICBGaWxlVXRpbHMudG9VUkxzIHRocm93cyBOUEUgZm9yIG51bGwgcGFyYW1ldGVyOyBkb2N1bWVudCB0aGUKYmVoYXZpb3IuCm8gSU8tMzMyOiAgSW1wcm92ZSB0YWlsZXIncyByZWFkaW5nIHBlcmZvcm1hbmNlLiBUaGFua3MgdG8gbGlhbmdseS4KbyBJTy0yNzk6ICBJbXByb3ZlIFRhaWxlciBwZXJmb3JtYW5jZSB3aXRoIGJ1ZmZlcmVkIHJlYWRzIChzZWUgSU8tMzMyKS4KbyBJTy0zMjk6ICBGaWxlVXRpbHMud3JpdGVMaW5lcyB1c2VzIHVuYnVmZmVyZWQgSU8uIFRoYW5rcyB0byB0aXZ2LgpvIElPLTMxOTogIEZpbGVVdGlscy5zaXplT2ZEaXJlY3RvcnkgZm9sbG93cyBzeW1ib2xpYyBsaW5rcy4gVGhhbmtzIHRvCnJhdmlwcmFrLgoKCkNvbXBhdGliaWxpdHkgd2l0aCAyLjM6CkJpbmFyeSBjb21wYXRpYmxlOiBZZXMuClNvdXJjZSBjb21wYXRpYmxlOiBZZXMuClNlbWFudGljIGNvbXBhdGlibGU6IFllcy4KCkNvbXBhdGliaWxpdHkgd2l0aCAyLjIgYW5kIDEuNDoKQmluYXJ5IGNvbXBhdGlibGU6IFllcy4KU291cmNlIGNvbXBhdGlibGU6IE5vLCBzZWUgdGhlIHJhcmUgY2FzZSBpbiBodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0lPLTMxOC4KU2VtYW50aWMgY29tcGF0aWJsZTogTm8sIHNlZSB0aGUgcmFyZSBjYXNlIGluIGh0dHBzOi8vaXNzdWVzLmFwYWNoZS5vcmcvamlyYS9icm93c2UvSU8tMzE4LgoKQ29tbW9ucyBJTyAyLjQgcmVxdWlyZXMgSkRLIDEuNiBvciBsYXRlci4KQ29tbW9ucyBJTyAyLjMgcmVxdWlyZXMgSkRLIDEuNiBvciBsYXRlci4KQ29tbW9ucyBJTyAyLjIgcmVxdWlyZXMgSkRLIDEuNSBvciBsYXRlci4KQ29tbW9ucyBJTyAxLjQgcmVxdWlyZXMgSkRLIDEuMyBvciBsYXRlci4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpBcGFjaGUgQ29tbW9ucyBJTyBWZXJzaW9uIDIuMwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkNoYW5nZXMgaW4gdGhpcyB2ZXJzaW9uIGluY2x1ZGU6CgpOZXcgZmVhdHVyZXM6Cm8gSU8tMzIyOiAgQWRkIGFuZCB1c2UgY2xhc3MgQ2hhcnNldHMuIFRoYW5rcyB0byBnZ3JlZ29yeS4gCm8gSU8tMzIxOiAgQnl0ZU9yZGVyTWFyayBVVEZfMzJMRSBpcyBpbmNvcnJlY3QuIFRoYW5rcyB0byBnZ3JlZ29yeS4gCm8gSU8tMzE4OiAgQWRkIENoYXJzZXQgc2lzdGVyIEFQSXMgdG8gbWV0aG9kIHRoYXQgdGFrZSBhIFN0cmluZyBjaGFyc2V0IG5hbWUuIFRoYW5rcyB0byBnZ3JlZ29yeS4gCgpDb21wYXRpYmlsaXR5IHdpdGggMi4yIGFuZCAxLjQ6CkJpbmFyeSBjb21wYXRpYmxlOiBZZXMuClNvdXJjZSBjb21wYXRpYmxlOiBObywgc2VlIHRoZSByYXJlIGNhc2UgaW4gaHR0cHM6Ly9pc3N1ZXMuYXBhY2hlLm9yZy9qaXJhL2Jyb3dzZS9JTy0zMTguClNlbWFudGljIGNvbXBhdGlibGU6IE5vLCBzZWUgdGhlIHJhcmUgY2FzZSBpbiBodHRwczovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0lPLTMxOC4KCkNvbW1vbnMgSU8gMi4zIHJlcXVpcmVzIEpESyAxLjYgb3IgbGF0ZXIuCkNvbW1vbnMgSU8gMi4yIHJlcXVpcmVzIEpESyAxLjUgb3IgbGF0ZXIuCkNvbW1vbnMgSU8gMS40IHJlcXVpcmVzIEpESyAxLjMgb3IgbGF0ZXIuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQXBhY2hlIENvbW1vbnMgSU8gVmVyc2lvbiAyLjIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpDaGFuZ2VzIGluIHRoaXMgdmVyc2lvbiBpbmNsdWRlOgoKTmV3IGZlYXR1cmVzOgpvIEFkZCBJT1VUaWxzLnRvQnVmZmVyZWRSZWFkZXIoUmVhZGVyKSAgSXNzdWU6IElPLTMxMy4gVGhhbmtzIHRvIGdncmVnb3J5LiAKbyBBbGxvdyBhcHBsaWNhdGlvbnMgdG8gcHJvdmlkZSBidWZmZXIgKG9yIHNpemUpIGZvciBjb3B5TGFyZ2UgbWV0aG9kcy4gIElzc3VlOiBJTy0zMDguIFRoYW5rcyB0byBNYW5vaiBNb2thc2hpLiAKbyBOZXcgY29weUxhcmdlKCkgbWV0aG9kIGluIElPVXRpbHMgdGhhdCB0YWtlcyBhZGRpdGlvbmFsIG9mZnNldCwgbGVuZ3RoIGFyZ3VtZW50cyAgSXNzdWU6IElPLTMwNS4gVGhhbmtzIHRvIE1hbm9qIE1va2FzaGkuIApvIFVzZSB0ZXJhYnl0ZSAoVEIpLCBwZXRhYnl0ZSAoUEIpIGFuZCBleGFieXRlIChFQikgaW4gRmlsZVV0aWxzLmJ5dGVDb3VudFRvRGlzcGxheVNpemUobG9uZyBzaXplKSAgSXNzdWU6IElPLTI4Ny4gVGhhbmtzIHRvIFJvbiBLdXJpcywgR2FyeSBHcmVnb3J5LiAKbyBGaWxlVXRpbHMubGlzdEZpbGVzKCkgZG9lc24ndCByZXR1cm4gZGlyZWN0b3JpZXMgIElzc3VlOiBJTy0xNzMuIFRoYW5rcyB0byBNYXJjb3MgVmlu7WNpdXMgZGEgU2lsdmEuIApvIENoYXJTZXF1ZW5jZUlucHV0U3RyZWFtIHRvIGVmZmljaWVudGx5IHN0cmVhbSBjb250ZW50IG9mIGEgQ2hhclNlcXVlbmNlICBJc3N1ZTogSU8tMjk3LiBUaGFua3MgdG8gT2xlZyBLYWxuaWNoZXZza2kuIApvIFRoZSBzZWNvbmQgY29uc3RydWN0b3Igb2YgVGFpbGVyIGNsYXNzIGRvZXMgbm90IHBhc3MgJ2RlbGF5JyB0byB0aGUgdGhpcmQgb25lICBJc3N1ZTogSU8tMzA0LiBUaGFua3MgdG8gbGlhbmdseS4gCm8gVGVlT3V0cHV0U3RyZWFtIGRvZXMgbm90IGNhbGwgYnJhbmNoLmNsb3NlKCkgd2hlbiBtYWluLmNsb3NlKCkgdGhyb3dzIGFuIGV4Y2VwdGlvbiAgSXNzdWU6IElPLTMwMy4gVGhhbmtzIHRvIGZhYmlhbi5iYXJuZXkuIApvIEFycmF5SW5kZXhPdXRPZkJvdW5kc0V4Y2VwdGlvbiBpbiBCT01JbnB1dFN0cmVhbSB3aGVuIHJlYWRpbmcgYSBmaWxlIHdpdGhvdXQgQk9NIG11bHRpcGxlIHRpbWVzICBJc3N1ZTogSU8tMzAyLiBUaGFua3MgdG8ganN0ZXVlcndhbGQsIGRldGluaG8uIApvIEFkZCBJT1V0aWxzLmNsb3NlUXVpZXRseShTZWxlY3RvcikgbmVjZXNzYXJ5ICBJc3N1ZTogSU8tMzAxLiBUaGFua3MgdG8ga2F5a2F5LnVuaXF1ZS4gCm8gSU9VdGlscy5jbG9zZVF1aWV0bHkoKSBzaG91bGQgdGFrZSBhIFNlcnZlclNvY2tldCBhcyBhIHBhcmFtZXRlciAgSXNzdWU6IElPLTI5Mi4gVGhhbmtzIHRvIHNlYmIuIApvIEFkZCByZWFkL3JlYWRGdWxseSBtZXRob2RzIHRvIElPVXRpbHMgIElzc3VlOiBJTy0yOTAuIFRoYW5rcyB0byBzZWJiLiAKbyBTdXBwbHkgYSBSZXZlcnNlZExpbmVzRmlsZVJlYWRlciAgSXNzdWU6IElPLTI4OC4gVGhhbmtzIHRvIEdlb3JnIEhlbnpsZXIuIApvIEFkZCBuZXcgZnVuY3Rpb24gRmlsZVV0aWxzLmRpcmVjdG9yeUNvbnRhaW5zLiAgSXNzdWU6IElPLTI5MS4gVGhhbmtzIHRvIGdncmVnb3J5LiAKbyBGaWxlVXRpbHMuY29udGVudEVxdWFscyBhbmQgSU9VdGlscy5jb250ZW50RXF1YWxzIC0gQWRkIG9wdGlvbiB0byBpZ25vcmUgImxpbmUgZW5kaW5ncyIKICAgICAgICBBZGRlZCBjb250ZW50RXF1YWxzSWdub3JlRU9MIG1ldGhvZHMgdG8gYm90aCBjbGFzc2VzICBJc3N1ZTogSU8tMjc1LiBUaGFua3MgdG8gQ0ogQXNwcm9tZ29zLiAKCkZpeGVkIEJ1Z3M6Cm8gSU9VdGlscy5yZWFkKElucHV0U3RyZWFtL1JlYWRlcikgaWdub3JlcyB0aGUgb2Zmc2V0IHBhcmFtZXRlciAgSXNzdWU6IElPLTMxMS4gVGhhbmtzIHRvIFJvYmVydCBNdWlyLiAKbyBDaGFyU2VxdWVuY2VJbnB1dFN0cmVhbShDaGFyU2VxdWVuY2UgcywgQ2hhcnNldCBjaGFyc2V0LCBpbnQgYnVmZmVyU2l6ZSkgaWdub3JlcyBidWZmZXJTaXplICBJc3N1ZTogSU8tMzEyLiAKbyBGaWxlVXRpbHMubW92ZURpcmVjdG9yeVRvRGlyZWN0b3J5IHJlbW92ZXMgc291cmNlIGRpcmVjdG9yeSBpZiBkZXN0aW5hdGlvbiBpcyBhIHN1YmRpcmVjdG9yeSAgSXNzdWU6IElPLTMwMC4gCm8gUmVhZGVySW5wdXRTdHJlYW0jcmVhZChieXRlW10gYiwgaW50IG9mZiwgaW50IGxlbikgc2hvdWxkIGNoZWNrIGZvciB2YWxpZCBwYXJhbWV0ZXJzICBJc3N1ZTogSU8tMzA3LiAKbyBSZWFkZXJJbnB1dFN0cmVhbSNyZWFkKGJ5dGVbXSBiLCBpbnQgb2ZmLCBpbnQgbGVuKSBzaG91bGQgYWx3YXlzIHJldHVybiAwIGZvciBsZW5ndGggPT0gMCAgSXNzdWU6IElPLTMwNi4gCm8gIkZpbGVVdGlscyNkZWxldGVEaXJlY3RvcnlPbkV4aXQoRmlsZSkiIGRvZXMgbm90IHdvcmsgIElzc3VlOiBJTy0yNzYuIFRoYW5rcyB0byBua2FtaS4gCm8gQm91bmRlZElucHV0U3RyZWFtLnJlYWQoKSB0cmVhdHMgbWF4IGRpZmZlcmVudGx5IGZyb20gQm91bmRlZElucHV0U3RyZWFtLnJlYWQoYnl0ZVtdLi4uKSAgSXNzdWU6IElPLTI3My4gVGhhbmtzIHRvIHNlYmIuIApvIFZhcmlvdXMgbWV0aG9kcyBvZiBjbGFzcyAnb3JnLmFwYWNoZS5jb21tb25zLmlvLkZpbGVVdGlscycgaW5jb3JyZWN0bHkgc3VwcHJlc3MgJ2phdmEuaW8uSU9FeGNlcHRpb24nICBJc3N1ZTogSU8tMjk4LiBUaGFua3MgdG8gQ2hyaXN0aWFuIFNjaHVsdGUuIAoKQ2hhbmdlczoKbyBSZWFkZXJJbnB1dFN0cmVhbSBvcHRpbWl6YXRpb246IG1vcmUgZWZmaWNpZW50IHJlYWRpbmcgb2Ygc21hbGwgY2h1bmtzIG9mIGRhdGEgIElzc3VlOiBJTy0yOTYuIFRoYW5rcyB0byBPbGVnIEthbG5pY2hldnNraS4gCgoKQ29tcGF0aWJpbGl0eSB3aXRoIDIuMSBhbmQgMS40OgpCaW5hcnkgY29tcGF0aWJsZTogWWVzClNvdXJjZSBjb21wYXRpYmxlOiBZZXMKU2VtYW50aWMgY29tcGF0aWJsZTogWWVzLiBDaGVjayB0aGUgYnVnIGZpeGVzIHNlY3Rpb24gZm9yIHNlbWFudGljIGJ1ZyBmaXhlcwoKQ29tbW9ucyBJTyAyLjIgcmVxdWlyZXMgYSBtaW5pbXVtIG9mIEpESyAxLjUuIApDb21tb25zIElPIDEuNCByZXF1aXJlcyBhIG1pbmltdW0gb2YgSkRLIDEuMy4gCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQXBhY2hlIENvbW1vbnMgSU8gVmVyc2lvbiAyLjEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpOZXcgZmVhdHVyZXM6Cm8gVXNlIHN0YW5kYXJkIE1hdmVuIGRpcmVjdG9yeSBsYXlvdXQgIElzc3VlOiBJTy0yODUuIFRoYW5rcyB0byBnZ3JlZ29yeS4gCm8gQWRkIElPVXRpbHMgQVBJIHRvU3RyaW5nIGZvciBVUkwgYW5kIFVSSSB0byBnZXQgY29udGVudHMgIElzc3VlOiBJTy0yODQuIFRoYW5rcyB0byBnZ3JlZ29yeS4gCm8gQWRkIEFQSSBGaWxlVXRpbHMuY29weUZpbGUoRmlsZSBpbnB1dCwgT3V0cHV0U3RyZWFtIG91dHB1dCkgIElzc3VlOiBJTy0yODIuIFRoYW5rcyB0byBnZ3JlZ29yeS4gCm8gRmlsZUFsdGVyYXRpb25PYnNlcnZlciBoYXMgbm8gZ2V0dGVyIGZvciBGaWxlRmlsdGVyICBJc3N1ZTogSU8tMjYyLiAKbyBBZGQgRmlsZVV0aWxzLmdldEZpbGUgQVBJIHdpdGggdmFyYXJncyBwYXJhbWV0ZXIgIElzc3VlOiBJTy0yNjEuIApvIEFkZCBuZXcgQVBQRU5EIHBhcmFtZXRlciBmb3Igd3JpdGluZyBzdHJpbmcgaW50byBmaWxlcyAgSXNzdWU6IElPLTE4Mi4gCm8gQWRkIG5ldyByZWFkIG1ldGhvZCAidG9CeXRlQXJyYXkiIHRvIGhhbmRsZSBJbnB1dFN0cmVhbSB3aXRoIGtub3duIHNpemUuICBJc3N1ZTogSU8tMjUxLiBUaGFua3MgdG8gTWFyY28gQWxiaW5pLiAKCkZpeGVkIEJ1Z3M6Cm8gRHViaW91cyB1c2Ugb2YgbWtkaXJzKCkgcmV0dXJuIGNvZGUgIElzc3VlOiBJTy0yODAuIFRoYW5rcyB0byBzZWJiLiAKbyBSZWFkZXJJbnB1dFN0cmVhbSBlbnRlcnMgaW5maW5pdGUgbG9vcCB3aGVuIGl0IGVuY291bnRlcnMgYW4gdW5tYXBwYWJsZSBjaGFyYWN0ZXIgIElzc3VlOiBJTy0yNzcuIApvIEZpbGVVdGlscy5tb3ZlRmlsZSgpIEphdmFEb2Mgc2hvdWxkIHNwZWNpZnkgRmlsZUV4aXN0c0V4Y2VwdGlvbiB0aHJvd24gIElzc3VlOiBJTy0yNjQuIApvIENsYXNzTG9hZGVyT2JqZWN0SW5wdXRTdHJlYW0gZG9lcyBub3QgaGFuZGxlIFByb3h5IGNsYXNzZXMgIElzc3VlOiBJTy0yNjAuIApvIFRhaWxlciByZXR1cm5pbmcgcGFydGlhbCBsaW5lcyB3aGVuIHJlYWNoaW5nIEVPRiBiZWZvcmUgRU9MICBJc3N1ZTogSU8tMjc0LiBUaGFua3MgdG8gRnJhbmsgR3JpbWVzLiAKbyBGaWxlVXRpbHMuY29weUZpbGUoKSB0aHJvd3MgSU9FeGNlcHRpb24gd2hlbiBjb3B5aW5nIGxhcmdlIGZpbGVzIHRvIGEgc2hhcmVkIGRpcmVjdG9yeSAob24gV2luZG93cykgIElzc3VlOiBJTy0yNjYuIFRoYW5rcyB0byBJZ29yIFNtZXJla2EuIApvIEZpbGVTeXN0ZW1VdGlscy5mcmVlU3BhY2VLYiB0aHJvd3MgZXhjZXB0aW9uIGZvciBXaW5kb3dzIHZvbHVtZXMgd2l0aCBubyB2aXNpYmxlIGZpbGVzLgogICAgICAgIEltcHJvdmUgY292ZXJhZ2UgYnkgYWxzbyBsb29raW5nIGZvciBoaWRkZW4gZmlsZXMuICBJc3N1ZTogSU8tMjYzLiBUaGFua3MgdG8gR2lsIEFkYW0uIAoKQ2hhbmdlczoKbyBGaWxlQWx0ZXJhdGlvbk1vbml0b3Iuc3RvcChib29sZWFuIGFsbG93SW50ZXJ2YWxUb0ZpbmlzaCkgIElzc3VlOiBJTy0yNTkuIAoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkFwYWNoZSBDb21tb25zIElPIFBhY2thZ2UgMi4wLjEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpDb21wYXRpYmlsaXR5IHdpdGggMi4wIGFuZCAxLjQKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkJpbmFyeSBjb21wYXRpYmxlIC0gWWVzCgpTb3VyY2UgY29tcGF0aWJsZSAtIFllcwoKU2VtYW50aWMgY29tcGF0aWJsZSAtIFllcwogIENoZWNrIHRoZSBidWcgZml4ZXMgc2VjdGlvbiBmb3Igc2VtYW50aWMgYnVnIGZpeGVzCgpDb21tb25zIElPIDIuMC4xIHJlcXVpcmVzIGEgbWluaW11bSBvZiBKREsgMS41CiAoQ29tbW9ucyBJTyAxLjQgaGFkIGEgbWluaW11bSBvZiBKREsgMS4zKSAKCkVuaGFuY2VtZW50cyBmcm9tIDIuMAotLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgICogW0lPLTI1Nl0gLSBQcm92aWRlIHRocmVhZCBmYWN0b3J5IGZvciBGaWxlQWx0ZXJuYXRpb25Nb25pdG9yCgpCdWcgZml4ZXMgZnJvbSAyLjAKLS0tLS0tLS0tLS0tLS0tLS0tCgogICAqIFtJTy0yNTddIC0gQk9NSW5wdXRTdHJlYW0ucmVhZChieXRlW10pIGNhbiByZXR1cm4gMCB3aGljaCBpdCBzaG91bGQgbm90CiAgICogW0lPLTI1OF0gLSBYbWxTdHJlYW1SZWFkZXIgY29uc3VtZXMgdGhlIHN0cmVhbSBkdXJpbmcgZW5jb2RpbmcgZGV0ZWN0aW9uCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQXBhY2hlIENvbW1vbnMgSU8gUGFja2FnZSAyLjAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpDb21wYXRpYmlsaXR5IHdpdGggMS40Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQmluYXJ5IGNvbXBhdGlibGUgLSBZZXMKClNvdXJjZSBjb21wYXRpYmxlIC0gWWVzCgpTZW1hbnRpYyBjb21wYXRpYmxlIC0gWWVzCiAgQ2hlY2sgdGhlIGJ1ZyBmaXhlcyBzZWN0aW9uIGZvciBzZW1hbnRpYyBidWcgZml4ZXMKCkNvbW1vbnMgSU8gMi4wIHJlcXVpcmVzIGEgbWluaW11bSBvZiBKREsgMS41CiAoQ29tbW9ucyBJTyAxLjQgaGFkIGEgbWluaW11bSBvZiBKREsgMS4zKSAKCkRlcHJlY2F0aW9ucyBmcm9tIDEuNAotLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi0gSU9VdGlscwogIC0gd3JpdGUoU3RyaW5nQnVmZmVyLCBXcml0ZXIpIGluIGZhdm91ciBvZiB3cml0ZShDaGFyU2VxdWVuY2UsIFdyaXRlcikKICAtIHdyaXRlKFN0cmluZ0J1ZmZlciwgT3V0cHV0U3RyZWFtKSAgaW4gZmF2b3VyIG9mIHdyaXRlKENoYXJTZXF1ZW5jZSwgT3V0cHV0U3RyZWFtKQogIC0gd3JpdGUoU3RyaW5nQnVmZmVyLCBPdXRwdXRTdHJlYW0sIFN0cmluZykgaW4gZmF2b3VyIG9mIHdyaXRlKENoYXJTZXF1ZW5jZSwgT3V0cHV0U3RyZWFtLCBTdHJpbmcpCgotIEZpbGVGaWx0ZXJVdGlscwogIC0gYW5kRmlsZUZpbHRlcihJT0ZpbGVGaWx0ZXIsIElPRmlsZUZpbHRlcikgaW4gZmF2b3VyIG9mIGFuZChJT0ZpbGVGaWx0ZXIuLi4pIAogIC0gb3JGaWxlRmlsdGVyKElPRmlsZUZpbHRlciwgSU9GaWxlRmlsdGVyKSAgaW4gZmF2b3VyIG9mIG9yKElPRmlsZUZpbHRlci4uLikKCkVuaGFuY2VtZW50cyBmcm9tIDEuNAotLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgKiBbSU8tMTQwXSBNb3ZlIG1pbmltdW0gSmF2YSByZXF1aXJlbWVudCBmcm9tIEpESyAxLjMgdG8gSkRLIDEuNQogICAgICAgICAgICAgLSB1c2UgR2VuZXJpY3MKICAgICAgICAgICAgIC0gYWRkIG5ldyBDaGFyU2VxdWVuY2Ugd3JpdGUoKSBmbGF2b3VyIG1ldGhvZHMgdG8gSU9VdGlscyBhbmQgRmlsZVV0aWxzCiAgICAgICAgICAgICAtIHJlcGxhY2UgU3RyaW5nQnVmZmVyIHdpdGggU3RyaW5nQnVpbGRlciwgd2hlcmUgYXBwcm9wcmlhdGUKICAgICAgICAgICAgIC0gYWRkIG5ldyBSZWFkZXIvV3JpdGVyIG1ldGhvZHMgdG8gUHJveHlSZWFkZXIgYW5kIFByb3h5V3JpdGVyCiAgICAgICAgICAgICAtIEFubm90YXRlIHdpdGggQE92ZXJyaWRlIGFuZCBARGVwcmVjYXRlZAoKICAqIFtJTy0xNzhdIE5ldyBCT01JbnB1dFN0cmVhbSBhbmQgQnl0ZU9yZGVyTWFyayBpbXBsZW1lbnRhdGlvbnMgLSB0byBkZXRlY3QgYW5kIG9wdGlvbmFsbHkgZXhjbHVkZSBhbiBpbml0aWFsIEJ5dGUgT3JkZXIgbWFyayAoQk9NKQogICogW0lPLTE5N10gTmV3IEJvdW5kZWRJbnB1dFN0cmVhbSAoY29waWVkIGZyb20gZnJvbSBBcGFjaGUgSmFja1JhYmJpdCkKICAqIFtJTy0xOTNdIE5ldyBCcm9rZW4gSW5wdXQgYW5kIE91dHB1dCBzdHJlYW1zCiAgKiBbSU8tMTMyXSBOZXcgRmlsZSBMaXN0ZW5lci9Nb25pdG9yIGZhY2lsaXR5CiAgKiBbSU8tMTU4XSBOZXcgUmVhZGVySW5wdXRTdHJlYW0gYW5kIFdyaXRlck91dHB1dFN0cmVhbSBpbXBsZW1lbnRhdGlvbnMKICAqIFtJTy0xMzldIE5ldyBTdHJpbmdCdWlsZGVyIFdyaXRlciBpbXBsZW1lbnRhdGlvbgogICogW0lPLTE5Ml0gTmV3IFRhZ2dlZCBJbnB1dCBhbmQgT3V0cHV0IHN0cmVhbXMKICAqIFtJTy0xNzddIE5ldyBUYWlsZXIgY2xhc3MgLSBzaW1wbGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIFVuaXggInRhaWwgLWYiIGZ1bmN0aW9uYWxpdHkKICAqIFtJTy0xNjJdIE5ldyBYTUwgU3RyZWFtIFJlYWRlci9Xcml0ZXIgaW1wbGVtZW50YXRpb25zIChmcm9tIFJPTUUgdmlhIHBsZXh1cy11dGlscykKCiAgKiBbSU8tMTQyXSBDb21wYXJhdG9ycyAtIGFkZCBmYWNpbGl0eSB0byBzb3J0IGZpbGUgbGlzdHMvYXJyYXlzCiAgKiBbSU8tMTg2XSBDb21wYXJhdG9ycyAtIG5ldyBDb21wb3NpdGUgYW5kIERpcmVjdG9yeSBGaWxlIENvbXBhcmF0b3IgaW1wbGVtZW50YXRpb25zCiAgKiBbSU8tMTc2XSBEaXJlY3RvcnlXYWxrZXIgLSBhZGQgZmlsdGVyRGlyZWN0b3J5Q29udGVudHMoKSBjYWxsYmFjayBtZXRob2QgZm9yIGZpbHRlcmluZyBkaXJlY3RvcnkgY29udGVudHMKICAqIFtJTy0yMTBdIEZpbGVGaWx0ZXIgLSBuZXcgTWFnaWMgTnVtYmVyIEZpbGVGaWx0ZXIKICAqIFtJTy0yMjFdIEZpbGVGaWx0ZXJVdGlscyAtIGFkZCBtZXRob2RzIGZvciBzdWZmaXggYW5kIHByZWZpeCBmaWx0ZXJzIHdoaWNoIHRha2UgYW4gSU9DYXNlIG9iamVjdAogICogW0lPLTIzMl0gRmlsZUZpbHRlclV0aWxzIC0gYWRkIG1ldGhvZCBmb3IgbmFtZSBmaWx0ZXJzIHdoaWNoIHRha2UgYW4gSU9DYXNlIG9iamVjdAogICogW0lPLTIyOV0gRmlsZUZpbHRlclV0aWxzIC0gYWRkIHZhcmFyZ3MgYW5kKCkgYW5kIG9yKCkgbWV0aG9kcwogICogW0lPLTE5OF0gRmlsZUZpbHRlclV0aWxzIC0gYWRkIGFiaWxpdHkgdG8gYXBwbHkgZmlsZSBmaWx0ZXJzIHRvIGNvbGxlY3Rpb25zIGFuZCBhcnJheXMKICAqIFtJTy0xNTZdIEZpbGVuYW1lVXRpbHMgLSBhZGQgbm9ybWFsaXplKCkgYW5kIG5vcm1hbGl6ZU5vRW5kU2VwYXJhdG9yKCkgbWV0aG9kcyB3aGljaCBhbGxvdyB0aGUgc2VwYXJhdG9yIGNoYXJhY3RlciB0byBiZSBzcGVjaWZpZWQKICAqIFtJTy0xOTRdIEZpbGVTeXN0ZW1VdGlscyAtIGFkZCBmcmVlU3BhY2VLYigpIG1ldGhvZCB3aXRoIG5vIGlucHV0IGFyZ3VtZW50cwogICogW0lPLTE4NV0gRmlsZVN5c3RlbVV0aWxzIC0gYWRkIGZyZWVTcGFjZUtiKCkgbWV0aG9kcyB0aGF0IHRha2UgYSB0aW1lb3V0IHBhcmFtZXRlciAtIGZpeGVzIGZyZWVTcGFjZVdpbmRvd3MoKSBibG9ja3MKICAqIFtJTy0xNTVdIEZpbGVVdGlscyAtIHVzZSBOSU8gdG8gY29weSBmaWxlcwogICogW0lPLTE2OF0gRmlsZVV0aWxzIC0gYWRkIG5ldyBpc1N5bWxpbmsoKSBtZXRob2QKICAqIFtJTy0yMTldIEZpbGVVdGlscyAtIHRocm93IEZpbGVFeGlzdHNFeGNlcHRpb24gd2hlbiBtb3ZpbmcgYSBmaWxlIG9yIGRpcmVjdG9yeSBpZiB0aGUgZGVzdGluYXRpb24gYWxyZWFkeSBleGlzdHMKICAqIFtJTy0yMzRdIEZpbGVVdGlscyAtIGFkZCBNZXRob2RzIGZvciByZXRyaWV2aW5nIFN5c3RlbSBVc2VyL1RlbXAgZGlyZWN0b3JpZXMvcGF0aHMKICAqIFtJTy0yMDhdIEZpbGVVdGlscyAtIGFkZCB0aW1lb3V0IChjb25uZWN0aW9uIGFuZCByZWFkKSBzdXBwb3J0IGZvciBjb3B5VVJMVG9GaWxlKCkgbWV0aG9kIAogICogW0lPLTIzOF0gRmlsZVV0aWxzIC0gYWRkIHNpemVPZihGaWxlKSBtZXRob2QKICAqIFtJTy0xODFdIExpbmVJdGVyYXRvciBub3cgaW1wbGVtZW50cyBJdGVyYWJsZQogICogW0lPLTIyNF0gSU9VdGlscyAtIGFkZCBjbG9zZVF1aWV0bHkoQ2xvc2VhYmxlKSBhbmQgY2xvc2VRdWlldGx5KFNvY2tldCkgbWV0aG9kcwogICogW0lPLTIwM10gSU9VdGlscyAtIGFkZCBza2lwRnVsbHkoKSBtZXRob2QgZm9yIElucHV0U3RyZWFtcwogICogW0lPLTEzN10gSU9VdGlscyBhbmQgQnl0ZUFycmF5T3V0cHV0U3RyZWFtIC0gYWRkIHRvQnVmZmVyZWRJbnB1dFN0cmVhbSgpIG1ldGhvZCB0byBhdm9pZCB1bm5lY2Vzc2FyeSBhcnJheSBhbGxvY2F0aW9uL2NvcHkKICAqIFtJTy0xOTVdIFByb3h5IHN0cmVhbXMvUmVhZGVyL1dyaXRlciAtIHByb3ZpZGUgZXhjZXB0aW9uIGhhbmRsaW5nIG1ldGhvZHMKICAqIFtJTy0yMTFdIFByb3h5IElucHV0L091dHB1dCBzdHJlYW1zIC0gYWRkIHByZS9wb3N0IHByb2Nlc3Npbmcgc3VwcG9ydAogICogW0lPLTI0Ml0gUHJveHkgUmVhZGVyL1dyaXRlciAtIGFkZCBwcmUvcG9zdCBwcm9jZXNzaW5nIHN1cHBvcnQKCkJ1ZyBmaXhlcyBmcm9tIDEuNAotLS0tLS0tLS0tLS0tLS0tLS0KICAqIFtJTy0yMTRdIEJ5dGVBcnJheU91dHB1dFN0cmVhbSAtIGZpeCBpbmNvbnNpc3RlbnQgc3luY2hyb25pemF0aW9uIG9mIGZpZWxkcwogICogW0lPLTIwMV0gQ291bnRpbmcgSW5wdXQvT3V0cHV0IHN0cmVhbXMgLSBmaXggaW5jb25zaXN0ZW50IHN5bmNocm9uaXphdGlvbgogICogW0lPLTE1OV0gRmlsZUNsZWFuaW5nVHJhY2tlciAtIGZpeCByZW1vdmUoKSBuZXZlciByZXR1cm5zIG51bGwKICAqIFtJTy0yMjBdIEZpbGVDbGVhbmluZ1RyYWNrZXIgLSBmaXggVmVjdG9yIHBlcmZvcm1zIGJhZGx5IHVuZGVyIGxvYWQKICAqIFtJTy0xNjddIEZpbGVuYW1lVXRpbHMgLSBmaXggY2FzZS1pbnNlbnNpdGl2ZSBzdHJpbmcgaGFuZGxpbmcgaW4gRmlsZW5hbWVVdGlscyBhbmQgRmlsZXN5c3RlbVV0aWxzCiAgKiBbSU8tMTc5XSBGaWxlbmFtZVV0aWxzIC0gZml4IFN0cmluZ0luZGV4T3V0T2ZCb3VuZHMgZXhjZXB0aW9uIGluIGdldFBhdGhOb0VuZFNlcGFyYXRvcigpCiAgKiBbSU8tMjQ4XSBGaWxlbmFtZVV0aWxzIC0gZml4IGdldEZ1bGxQYXRoTm9FbmRTZXBhcmF0b3IoKSByZXR1cm5zIGVtcHR5IHdoaWxlIHBhdGggaXMgYSBvbmUgbGV2ZWwgZGlyZWN0b3J5CiAgKiBbSU8tMjQ2XSBGaWxlbmFtZVV0aWxzIC0gZml4IHdpbGRjYXJkTWF0Y2ggZ2l2ZXMgaW5jb3JyZWN0IHJlc3VsdHMgCiAgKiBbSU8tMTg3XSBGaWxlU3lzdGVtVXRpbHMgLSBmaXggZnJlZVNwYWNlS2IoKSBkb2Vzbid0IHdvcmsgd2l0aCByZWxhdGl2ZSBwYXRocyBvbiBMaW51eAogICogW0lPLTE2MF0gRmlsZVN5c3RlbVV0aWxzIC0gZml4IGZyZWVTcGFjZSgpIGZhaWxzIG9uIHNvbGFyaXMKICAqIFtJTy0yMDldIEZpbGVTeXN0ZW1VdGlscyAtIGZpeCBmcmVlU3BhY2VLYigpIGZhaWxzIHRvIHJldHVybiBjb3JyZWN0IHNpemUgZm9yIGEgd2luZG93cyBtb3VudCBwb2ludAogICogW0lPLTE2M10gRmlsZVV0aWxzIC0gZml4IHRvVVJMcygpIHVzaW5nIGRlcHJlY2F0ZWQgbWV0aG9kIG9mIGNvbnZlcnNpb24gdG8gVVJMCiAgKiBbSU8tMTY4XSBGaWxlVXRpbHMgLSBmaXggU3ltYm9saWMgbGlua3MgZm9sbG93ZWQgd2hlbiBkZWxldGluZyBkaXJlY3RvcnkKICAqIFtJTy0yMzFdIEZpbGVVdGlscyAtIGZpeCB3cm9uZyBleGNlcHRpb24gbWVzc2FnZSBnZW5lcmF0ZWQgaW4gaXNGaWxlTmV3ZXIoKSBtZXRob2QKICAqIFtJTy0yMDddIEZpbGVVdGlscyAtIGZpeCByYWNlIGNvbmRpdGlvbiBpbiBmb3JjZU1rZGlyKCkgbWV0aG9kCiAgKiBbSU8tMjE3XSBGaWxlVXRpbHMgLSBmaXggY29weURpcmVjdG9yeVRvRGlyZWN0b3J5KCkgbWFrZXMgaW5maW5pdGUgbG9vcHMKICAqIFtJTy0xNjZdIEZpbGVVdGlscyAtIGZpeCBVUkwgZGVjb2RpbmcgaW4gdG9GaWxlKFVSTCkKICAqIFtJTy0xOTBdIEZpbGVVdGlscyAtIGZpeCBjb3B5RGlyZWN0b3J5IG5vdCBwcmVzZXJ2aW5nIGxhc3Rtb2RpZmllZCBkYXRlIG9uIHN1Yi1kaXJlY3RvcmllcwogICogW0lPLTI0MF0gRmlsZUZpbHRlclV0aWxzIC0gZW5zdXJlIGN2c0ZpbHRlciBhbmQgc3ZuRmlsdGVyIGFyZSBvbmx5IGNyZWF0ZWQgb25jZS4KICAqIFtJTy0xNzVdIElPVXRpbHMgLSBmaXggY29weUZpbGUoKSBpc3N1ZXMgd2l0aCB2ZXJ5IGxhcmdlIGZpbGVzCiAgKiBbSU8tMTkxXSBJbXByb3ZlbWVudHMgZnJvbSBzdGF0aWMgYW5hbHlzaXMKICAqIFtJTy0yMTZdIExvY2thYmxlRmlsZVdyaXRlciAtIGRlbGV0ZSBmaWxlcyBxdWlldGx5IHdoZW4gYW4gZXhjZXB0aW9uIGlzIHRocm93biBkdXJpbmcgaW5pdGlhbGl6YXRpb24KICAqIFtJTy0yNDNdIFN3YXBwZWREYXRhSW5wdXRTdHJlYW0gLSBmaXggcmVhZEJvb2xlYW4gaXMgaW52ZXJ0ZWQKICAqIFtJTy0yMzVdIFRlc3RzIC0gcmVtb3ZlIHVudXNlZCBZZWxsT25GbHVzaEFuZENsb3NlT3V0cHV0U3RyZWFtIGZyb20gQ29weVV0aWxzVGVzdAogICogW0lPLTE2MV0gVGVzdHMgLSBmaXggRmlsZUNsZWFuaW5nVHJhY2tlclRlc3RDYXNlIGhhbmdpbmcKCkRvY3VtZW50YXRpb24gY2hhbmdlcyBmcm9tIDEuNAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIFtJTy0xODMgRmlsZW5hbWVVdGlscy5nZXRFeHRlbnNpb24oKSBtZXRob2QgZG9jdW1lbnRhdGlvbiBpbXByb3ZlbWVudHMKICAqIFtJTy0yMjYgRmlsZVV0aWxzLmJ5dGVDb3VudFRvRGlzcGxheVNpemUoKSBkb2N1bWVudGF0aW9uIGNvcnJlY3Rpb25zCiAgKiBbSU8tMjA1IEZpbGVVdGlscy5mb3JjZU1rZGlyKCkgZG9jdW1lbnRhdGlvbiBpbXByb3ZlbWVudHMKICAqIFtJTy0yMTUgRmlsZVV0aWxzIGNvcHkgZmlsZS9kaXJlY3RvcnkgaW1wcm92ZSBkb2N1bWVudGF0aW9uIHJlZ2FyZGluZyBwcmVzZXJ2aW5nIHRoZSBsYXN0IG1vZGlmaWVkIGRhdGUKICAqIFtJTy0xODkgSGV4RHVtcC5kdW1wKCkgbWV0aG9kIGRvY3VtZW50YXRpb24gaW1wcm92ZW1lbnRzCiAgKiBbSU8tMTcxIElPQ2FzZSBkb2N1bWVudCB0aGF0IGl0IGFzc3VtZXMgdGhlcmUgYXJlIG9ubHkgdHdvIE9TZXM6IFdpbmRvd3MgYW5kIFVuaXgKICAqIFtJTy0yMjMgSU9VdGlscy5jb3B5KCkgZG9jdW1lbnRhdGlvbiBjb3JyZWN0aW9ucwogICogW0lPLTI0NyBJT1V0aWxzLmNsb3NlUXVpZXRseSgpIGltcHJvdmUgZG9jdW1lbnRhdGlvbiB3aXRoIGV4YW1wbGVzCiAgKiBbSU8tMjAyIE5vdEZpbGVGaWx0ZXIgZG9jdW1lbnRhdGlvbiBjb3JyZWN0aW9ucwogICogW0lPLTIwNiBQcm94eUlucHV0U3RyZWFtIC0gZml4IG1pc2xlYWRpbmcgcGFyYW1ldGVyIG5hbWVzCiAgKiBbSU8tMjEyIFByb3h5SW5wdXRTdHJlYW0uc2tpcCgpIGRvY3VtZW50YXRpb24gY29ycmVjdGlvbnMKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpBcGFjaGUgQ29tbW9ucyBJTyBWZXJzaW9uIDEuNAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkNvbXBhdGliaWxpdHkgd2l0aCAxLjMuMgotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQmluYXJ5IGNvbXBhdGlibGUgLSBZZXMKClNvdXJjZSBjb21wYXRpYmxlIC0gWWVzCgpTZW1hbnRpYyBjb21wYXRpYmxlIC0gWWVzCiAgQ2hlY2sgdGhlIGJ1ZyBmaXhlcyBzZWN0aW9uIGZvciBzZW1hbnRpYyBidWcgZml4ZXMKCkNvbW1vbnMgSU8gMS40IGludHJvZHVjZXMgZm91ciBuZXcgaW1wbGVtZW50YXRpb25zIHdoaWNoIGRlcGVuZCBvbiBKREsgMS40IGZlYXR1cmVzCihDaGFyU2VxdWVuY2VSZWFkZXIsIEZpbGVXcml0ZXJXaXRoRW5jb2RpbmcsIElPRXhjZXB0aW9uV2l0aENhdXNlIGFuZCBSZWdleEZpbGVGaWx0ZXIpLgpJdCBoYXMgYmVlbiBidWlsdCB3aXRoIHRoZSBKREsgc291cmNlIGFuZCB0YXJnZXQgb3B0aW9ucyBzZXQgdG8gSkRLIDEuMyBhbmQsIGV4Y2VwdCBmb3IKdGhvc2UgaW1wbGVtZW50YXRpb25zLCBjYW4gYmUgdXNlZCB3aXRoIEpESyAxLjMgKHNlZSBJTyBJTy0xMjcpLgoKRGVwcmVjYXRpb25zIGZyb20gMS4zLjIKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBGaWxlQ2xlYW5lciBkZXByZWNhdGVkIGluIGZhdm91ciBvZiBGaWxlQ2xlYW5pbmdUcmFja2VyIFtzZWUgSU8tMTE2XQoKQnVnIGZpeGVzIGZyb20gMS4zLjIKLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBGaWxlVXRpbHMKICAtIGZvcmNlRGVsZXRlIG9mIG9ycGhhbmVkIFNvZnRsaW5rcyBkb2VzIG5vdCB3b3JrIFtJTy0xNDddCiAgLSBJbmZpbml0ZSBsb29wIG9uIEZpbGVVdGlscy5jb3B5RGlyZWN0b3J5IHdoZW4gdGhlIGRlc3RpbmF0aW9uIGRpcmVjdG9yeSBpcyB3aXRoaW4KICAgIHRoZSBzb3VyY2UgZGlyZWN0b3J5IFtJTy0xNDFdCiAgLSBBZGQgYSBjb3B5RGlyZWN0b3J5KCkgbWV0aG9kIHRoYXQgbWFrZXMgdXNlIG9mIEZpbGVGaWx0ZXIgW0lPLTEwNV0KICAtIEFkZCBtb3ZlRGlyZWN0b3J5KCkgYW5kIG1vdmVGaWxlKCkgbWV0aG9kcyBbSU8tNzddCgotIEhleER1bXAKICAtIEhleER1bXAncyB1c2Ugb2Ygc3RhdGljIFN0cmluZ0J1ZmZlcnMgaXNuJ3QgdGhyZWFkLXNhZmUgW0lPLTEzNl0KCkVuaGFuY2VtZW50cyBmcm9tIDEuMy4yCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gRmlsZVV0aWxzCiAgLSBBZGQgYSBkZWxldGVRdWlldGx5IG1ldGhvZCBbSU8tMTM1XQoKLSBGaWxlbmFtZVV0aWxzCiAgLSBBZGQgZmlsZSBuYW1lIGV4dGVuc2lvbiBzZXBhcmF0b3IgY29uc3RhbnRzW0lPLTE0OV0KCi0gSU9FeGNlcHRpb25XaXRoQ2F1c2UgW0lPLTE0OF0KICAtIEFkZCBhIG5ldyBJT0V4Y2VwdGlvbiBpbXBsZW1lbnRhdGlvbiB3aXRoIGNvbnN0cnVjdG9ycyB3aGljaCB0YWtlIGEgY2F1c2UKCi0gVGVlSW5wdXRTdHJlYW0gW0lPLTEyOV0KICAtIEFkZCBuZXcgVGVlIGlucHV0IHN0cmVhbSBpbXBsZW1lbnRhdGlvbgoKLSBGaWxlV3JpdGVyV2l0aEVuY29kaW5nIFtJTy0xNTNdCiAgLSBBZGQgbmV3IEZpbGUgV3JpdGVyIGltcGxlbWVudGF0aW9uIHRoYXQgYWNjZXB0cyBhbiBlbmNvZGluZwoKLSBDaGFyU2VxdWVuY2VSZWFkZXIgW0lPLTEzOF0KICAtIEFkZCBuZXcgUmVhZGVyIGltcGxlbWVudGF0aW9uIHRoYXQgaGFuZGxlcyBhbnkgQ2hhclNlcXVlbmNlIChTdHJpbmcsCiAgICBTdHJpbmdCdWZmZXIsIFN0cmluZ0J1aWxkZXIgb3IgQ2hhckJ1ZmZlcikgCgotIFRoZXNob2xkaW5nT3VwdXRTdHJlYW0gW0lPLTEyMV0KICAtIEFkZCBhIHJlc2V0KCkgbWV0aG9kIHdoaWNoIHNldHMgdGhlIGNvdW50IG9mIHRoZSBieXRlcyB3cml0dGVuIGJhY2sgdG8gemVyby4KCi0gRGVmZXJyZWRGaWxlT3V0cHV0U3RyZWFtIFtJTy0xMzBdCiAgLSBBZGQgc3VwcG9ydCBmb3IgdGVtcG9yYXJ5IGZpbGVzCgotIEJ5dGVBcnJheU91dHB1dFN0cmVhbQogIC0gQWRkIGEgbmV3IHdyaXRlKElucHV0U3RyZWFtKSBtZXRob2QgW0lPLTE1Ml0KCi0gTmV3IENsb3NlZCBJbnB1dC9PdXRwdXQgc3RyZWFtIGltcGxlbWVudGF0aW9ucyBbSU8tMTIyXQogIC0gQXV0b0Nsb3NlSW5wdXRTdHJlYW0gLSBhdXRvbWF0aWNhbGx5IGNsb3NlcyBhbmQgZGlzY2FyZHMgdGhlIHVuZGVybHlpbmcgaW5wdXQgc3RyZWFtCiAgLSBDbG9zZWRJbnB1dFN0cmVhbSAtIHJldHVybnMgLTEgZm9yIGFueSByZWFkIGF0dGVtcHRzCiAgLSBDbG9zZWRPdXRwdXRTdHJlYW0gLSB0aHJvd3MgYW4gSU9FeGNlcHRpb24gZm9yIGFueSB3cml0ZSBhdHRlbXB0cwogIC0gQ2xvc2VTaGllbGRJbnB1dFN0cmVhbSAtIHByZXZlbnRzIHRoZSB1bmRlcmx5aW5nIGlucHV0IHN0cmVhbSBmcm9tIGJlaW5nIGNsb3NlZC4KICAtIENsb3NlU2hpZWxkT3V0cHV0U3RyZWFtIC0gcHJldmVudHMgdGhlIHVuZGVybHlpbmcgb3V0cHV0IHN0cmVhbSBmcm9tIGJlaW5nIGNsb3NlZC4KCi0gQWRkIFNpbmdsZXRvbiBDb25zdGFudHMgdG8gc2V2ZXJhbCBzdHJlYW0gY2xhc3NlcyBbSU8tMTQzXQoKLSBQcmVmaXhGaWxlRmlsdGVyIFtJTy0xMjZdCiAgLSBBZGQgZmFjaWx0aXkgdG8gc3BlY2lmeSBjYXNlIHNlbnNpdGl2aXR5IG9uIHByZWZpeCBtYXRjaGluZwoKLSBTdWZmaXhGaWxlRmlsdGVyIFtJTy0xMjZdCiAgLSBBZGQgZmFjaWx0aXkgdG8gc3BlY2lmeSBjYXNlIHNlbnNpdGl2aXR5IG9uIHN1ZmZpeCBtYXRjaGluZwoKLSBSZWdleEZpbGVGaWx0ZXIgW0lPLTc0XQogIC0gQWRkIG5ldyByZWd1bGFyIGV4cHJlc3Npb24gZmlsZSBmaWx0ZXIgaW1wbGVtZW50YXRpb24KCi0gTWFrZSBJT0ZpbGVGaWx0ZXIgaW1wbGVtZW50YXRpb25zIFNlcmlhbGl6YWJsZSBbSU8tMTMxXQoKLSBJbXByb3ZlIElPRmlsZUZpbHRlciB0b1N0cmluZygpIG1ldGhvZHMgW0lPLTEyMF0KCi0gTWFrZSBmaWVsZHMgZmluYWwgc28gY2xhc3NlcyBhcmUgaW1tdXRhYmxlL3RocmVhZHNhZmUgW0lPLTEzM10KICAtIGNoYW5nZXMgdG8gQWdlLCBEZWxlZ2F0ZSwgTmFtZSwgTm90LCBQcmVmaXgsIFJlZ2V4LCBTaXplLCBTdWZmaXggYW5kIFdpbGRjYXJkIElPRmlsZUZpbHRlcgogICAgaW1wbGVtZW50YXRpb25zLgoKLSBJT0Nhc2UKICAtIEFkZCBhIGNvbXBhcmUgbWV0aG9kIHRvIElPQ2FzZSBbSU8tMTQ0XQoKLSBBZGQgYSBwYWNrYWdlIG9mIGphdmEudXRpbC5Db21wYXJhdG9yIGltcGxlbWVudGF0aW9ucyBmb3IgZmlsZXMgW0lPLTE0NV0KICAtIERlZmF1bHRGaWxlQ29tcGFyYXRvciAtIGNvbXBhcmUgZmlsZXMgdXNpbmcgdGhlIGRlZmF1bHQgRmlsZS5jb21wYXJlVG8oRmlsZSkgbWV0aG9kLgogIC0gRXh0ZW5zaW9uRmlsZUNvbXBhcmF0b3IgLSBjb21wYXJlcyBmaWxlcyB1c2luZyBmaWxlIG5hbWUgZXh0ZW5zaW9ucy4KICAtIExhc3RNb2RpZmllZEZpbGVDb21wYXJhdG9yIC0gY29tcGFyZXMgZmlsZXMgdXNpbmcgdGhlIGxhc3QgbW9kaWZpZWQgZGF0ZS90aW1lLgogIC0gTmFtZUZpbGVDb21wYXJhdG9yIC0gY29tcGFyZXMgZmlsZXMgdXNpbmcgZmlsZSBuYW1lcy4KICAtIFBhdGhGaWxlQ29tcGFyYXRvciAtIGNvbXBhcmVzIGZpbGVzIHVzaW5nIGZpbGUgcGF0aHMuCiAgLSBTaXplRmlsZUNvbXBhcmF0b3IgLSBjb21wYXJlcyBmaWxlcyB1c2luZyBmaWxlIHNpemVzLgogIAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQXBhY2hlIENvbW1vbnMgSU8gVmVyc2lvbiAxLjMuMgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkNvbXBhdGliaWxpdHkgd2l0aCAxLjMuMQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkJpbmFyeSBjb21wYXRpYmxlIC0gWWVzCgpTb3VyY2UgY29tcGF0aWJsZSAtIFllcwoKU2VtYW50aWMgY29tcGF0aWJsZSAtIFllcwoKQ29tcGF0aWJpbGl0eSB3aXRoIDEuMwotLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkJpbmFyeSBjb21wYXRpYmxlIC0gTm8KICBTZWUgW0lPLTExM10KClNvdXJjZSBjb21wYXRpYmxlIC0gTm8KICBTZWUgW0lPLTExM10KClNlbWFudGljIGNvbXBhdGlibGUgLSBZZXMKCkVuaGFuY2VtZW50cyBzaW5jZSAxLjMuMQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCi0gQ3JlYXRlZCB0aGUgRmlsZUNsZWFuaW5nVHJhY2tlciwgYmFzaWNhbGx5IGEgbm9uLXN0YXRpYyB2ZXJzaW9uIG9mIHRoZQogIEZpbGVDbGVhbmVyLCB3aGljaCBjYW4gYmUgY29udHJvbGxlZCBieSB0aGUgdXNlci4gW0lPLTExNl0KLSBUaGUgRmlsZUNsZWFuZXIgaXMgZGVwcmVjYXRlZC4KCkJ1ZyBmaXhlcyBmcm9tIDEuMy4xCi0tLS0tLS0tLS0tLS0tLS0tLS0tCgotIFNvbWUgdGVzdHMsIHdoaWNoIGFyZSBpbXBsaWNpdGx5IGFzc3VtaW5nIGEgVW5peC1saWtlIGZpbGUgc3lzdGVtLCBhcmUKICBub3cgc2tpcHBlZCBvbiBXaW5kb3dzLiBbSU8tMTE1XQotIEVuZGlhblV0aWxzCiAgLSBCb3RoIHJlYWRTd2FwcGVkVW5zaWduZWRJbnRlZ2VyKC4uLikgbWV0aG9kcyBjb3VsZCByZXR1cm4gbmVnYXRpdmUgCiAgICBudW1iZXJzIGR1ZSB0byBpbnQvbG9uZyBjYXN0aW5nLiBbSU8tMTE3XQoKQnVnIGZpeGVzIGZyb20gMS4zCi0tLS0tLS0tLS0tLS0tLS0tLQoKLSBGaWxlVXRpbHMKICAtIE5QRSBpbiBvcGVuT3V0cHV0U3RyZWFtKEZpbGUpIHdoZW4gZmlsZSBoYXMgbm8gcGFyZW50IGluIHBhdGggW0lPLTExMl0KICAtIHJlYWRGaWxlVG9TdHJpbmcoRmlsZSkgaXMgbm90IHN0YXRpYyBbSU8tMTEzXQoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkFwYWNoZSBDb21tb25zIElPIFZlcnNpb24gMS4zLjEKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpDb21wYXRpYmlsaXR5IHdpdGggMS4zCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQmluYXJ5IGNvbXBhdGlibGUgLSBObwogIFNlZSBbSU8tMTEzXQoKU291cmNlIGNvbXBhdGlibGUgLSBObwogIFNlZSBbSU8tMTEzXQoKU2VtYW50aWMgY29tcGF0aWJsZSAtIFllcwoKQnVnIGZpeGVzIGZyb20gMS4zCi0tLS0tLS0tLS0tLS0tLS0tLQoKLSBGaWxlVXRpbHMKICAtIE5QRSBpbiBvcGVuT3V0cHV0U3RyZWFtKEZpbGUpIHdoZW4gZmlsZSBoYXMgbm8gcGFyZW50IGluIHBhdGggW0lPLTExMl0KICAtIHJlYWRGaWxlVG9TdHJpbmcoRmlsZSkgaXMgbm90IHN0YXRpYyBbSU8tMTEzXQogIAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQXBhY2hlIENvbW1vbnMgSU8gVmVyc2lvbiAxLjMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpDb21wYXRpYmlsaXR5IHdpdGggMS4yCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQmluYXJ5IGNvbXBhdGlibGUgLSBZZXMKClNvdXJjZSBjb21wYXRpYmxlIC0gWWVzCgpTZW1hbnRpYyBjb21wYXRpYmxlIC0gWWVzCiAgQ2hlY2sgdGhlIGJ1ZyBmaXhlcyBzZWN0aW9uIGZvciBzZW1hbnRpYyBidWcgZml4ZXMKCkRlcHJlY2F0aW9ucyBmcm9tIDEuMgotLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBXaWxkY2FyZEZpbHRlciBkZXByZWNhdGVkLCByZXBsYWNlZCBieSBXaWxkY2FyZEZpbGVGaWx0ZXIKICAtIG9sZCBjbGFzcyBvbmx5IGFjY2VwdGVkIGZpbGVzLCB0aHVzIGhhZCBhIGNvbmZ1c2luZyBkdWFsIHB1cnBvc2UKCi0gRmlsZVN5c3RlbVV0aWxzLmZyZWVTcGFjZSBkZXByZWNhdGVkLCByZXBsYWNlZCBieSBmcmVlU3BhY2VLYgogIC0gZnJlZVNwYWNlIHJldHVybnMgYSByZXN1bHQgdGhhdCB2YXJpZXMgYnkgb3BlcmF0aW5nIHN5c3RlbSBhbmQKICAgIHRodXMgaXNuJ3QgdGhhdCB1c2VmdWwKICAtIGZyZWVTcGFjZUtiIHJldHVybnMgbXVjaCBiZXR0ZXIgYW5kIG1vcmUgY29uc2lzdGVudCByZXN1bHRzCiAgLSBmcmVlU3BhY2VLYiBleGlzdGVkIGluIHYxLjIsIHNvIHRoaXMgaXMgYSBnZW50bGUgY3V0b3ZlcgoKQnVnIGZpeGVzIGZyb20gMS4yCi0tLS0tLS0tLS0tLS0tLS0tLQotIExpbmVJdGVyYXRvciBub3cgaW1wbGVtZW50cyBJdGVyYXRvcgogIC0gSXQgd2FzIGFsd2F5cyBzdXBwb3NlZCB0by4uLgoKLSBGaWxlU3lzdGVtVXRpbHMuZnJlZVNwYWNlL2ZyZWVTcGFjZUtiIFtJTy04M10KICAtIFRoZXNlIHNob3VsZCBub3cgd29yayBvbiBBSVggYW5kIEhQLVVYCgotIEZpbGVTeXN0ZW1VdGlscy5mcmVlU3BhY2UvZnJlZVNwYWNlS2IgW0lPLTkwXQogIC0gQXZvaWQgaW5maW5pdGUgbG9vcGluZyBpbiBXaW5kb3dzCiAgLSBDYXRjaCBtb3JlIGVycm9ycyB3aXRoIG5pY2UgbWVzc2FnZXMKCi0gRmlsZVN5c3RlbVV0aWxzLmZyZWVTcGFjZSBbSU8tOTFdCiAgLSBUaGlzIGlzIG5vdyBkb2N1bWVudGVkIG5vdCB0byB3b3JrIG9uIFN1bk9TIDUKCi0gRmlsZVN5c3RlbVV0aWxzIFtJTy05M10KICAtIEZpeGVkIHJlc291cmNlIGxlYWsgbGVhZGluZyB0byAnVG9vIG1hbnkgb3BlbiBmaWxlcycgZXJyb3IKICAtIFByZXZpb3VzbHkgZGlkIG5vdCBkZXN0cm95IFByb2Nlc3MgaW5zdGFuY2VzIChhcyBKREsgSmF2YWRvYyBpcyBzbyBwb29yKQogIC0gaHR0cDovL2J1Z3Muc3VuLmNvbS9idWdkYXRhYmFzZS92aWV3X2J1Zy5kbz9idWdfaWQ9NDgwMTAyNwoKLSBGaWxlVXRpbHMudG91Y2ggW0lPLTEwMF0KICAtIFRoZSB0b3VjaCBtZXRob2QgcHJldmlvdXNseSBnYXZlIG5vIGluZGljYXRpb24gd2hlbiB0aGUgZmlsZSBjb3VsZCBub3QKICAgIGJlIHRvdWNoZWQgc3VjY2Vzc2Z1bGx5IChzdWNoIGFzIGR1ZSB0byBhY2Nlc3MgcmVzdHJpY3Rpb25zKSAtIGl0IG5vdwogICAgdGhyb3dzIGFuIElPRXhjZXB0aW9uIGlmIHRoZSBsYXN0IG1vZGlmaWVkIGRhdGUgY2Fubm90IGJlIGNoYW5nZWQKCi0gRmlsZUNsZWFuZXIKICAtIFRoaXMgbm93IGhhbmRsZXMgdGhlIHNpdHVhdGlvbiB3aGVyZSBhbiBlcnJvciBvY2N1cnMgd2hlbiBkZWxldGluZyB0aGUgZmlsZQoKLSBJT1V0aWxzLmNvcHkgW0lPLTg0XQogIC0gQ29weSBtZXRob2RzIGNvdWxkIHJldHVybiBpbmFjY3VyYXRlIGJ5dGUvY2hhciBjb3VudCBmb3IgbGFyZ2Ugc3RyZWFtcwogIC0gVGhlIGNvcHkoSW5wdXRTdHJlYW0sIE91dHB1dFN0cmVhbSkgbWV0aG9kIG5vdyByZXR1cm5zIC0xIGlmIHRoZSBjb3VudCBpcyBncmVhdGVyIHRoYW4gYW4gaW50CiAgLSBUaGUgY29weShSZWFkZXIsIFdyaXRlcikgbWV0aG9kIG5vdyB0aHJvd3Mgbm93IHJldHVybnMgLTEgaWYgdGhlIGNvdW50IGlzIGdyZWF0ZXIgdGhhbiBhbiBpbnQKICAtIEFkZGVkIGEgbmV3IGNvcHlMYXJnZShJbnB1dFN0cmVhbSwgT3V0cHV0U3RyZWFtKSBtZXRob2QgdGhhdCByZXR1cm5zIGEgbG9uZwogIC0gQWRkZWQgYSBuZXcgY29weUxhcmdlKFJlYWRlciwgV3JpdGVyKSBtZXRob2QgdGhhdCByZXR1cm5zIGEgbG9uZwoKLSBDb3VudGluZ0lucHV0U3RyZWFtL0NvdW50aW5nT3V0cHV0U3RyZWFtIFtJTy04NF0KICAtIE1ldGhvZHMgd2VyZSBkZWNsYXJlZCBhcyBpbnQgdGh1cyB0aGUgY291bnQgd2FzIGlubmFjdXJhdGUgZm9yIGxhcmdlIHN0cmVhbXMKICAtIG5ldyBsb25nIGJhc2VkIG1ldGhvZHMgZ2V0Qnl0ZUNvdW50KCkvcmVzZXRCeXRlQ291bnQoKSBhZGRlZAogIC0gZXhpc3RpbmcgbWV0aG9kcyBjaGFuZ2VkIHRvIHRocm93IGFuIGV4Y2VwdGlvbiBpZiB0aGUgY291bnQgaXMgZ3JlYXRlciB0aGFuIGFuIGludAoKLSBGaWxlQmFzZWRUZXN0Q2FzZQogIC0gRml4ZWQgYnVnIGluIGNvbXBhcmUgY29udGVudCBtZXRob2RzIGlkZW50aWZpZWQgYnkgR05VIGNsYXNzcGF0aAoKLSBFbmRpYW5VdGlscy53cml0ZVN3YXBwZWRMb25nKGJ5dGVbXSwgaW50KSBbSU8tMTAxXQogIC0gQW4gaW50IG92ZXJydW4gaW4gdGhlIGJpdCBzaGlmdGluZyB3aGVuIGl0IHNob3VsZCBoYXZlIGJlZW4gYSBsb25nCgotIEVuZGlhblV0aWxzLndyaXRlU3dhcHBlZExvbmcoSW5wdXRTdHJlYW0pIFtJTy0xMDJdCiAgLSBUaGUgcmV0dXJuIG9mIGlucHV0LnJlYWQoYnl0ZVtdKSB3YXMgbm90IGJlaW5nIGNoZWNrZWQgdG8gZW5zdXJlIGFsbCA4IGJ5dGVzIHdlcmUgcmVhZAoKRW5oYW5jZW1lbnRzIGZyb20gMS4yCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIERpcmVjdG9yeVdhbGtlciBbSU8tODZdCiAgLSBOZXcgY2xhc3MgZGVzaWduZWQgZm9yIHN1YmNsYXNzaW5nIHRvIHdhbGsgdGhyb3VnaCBhIHNldCBvZiBmaWxlcy4KICAgIERpcmVjdG9yeVdhbGtlciBwcm92aWRlcyB0aGUgd2FsayBvZiB0aGUgZGlyZWN0b3JpZXMsIGZpbHRlcmluZyBvZgogICAgZGlyZWN0b3JpZXMgYW5kIGZpbGVzLCBhbmQgY2FuY2VsbGF0aW9uIHN1cHBvcnQuIFRoZSBzdWJjbGFzcyBtdXN0IHByb3ZpZGUKICAgIHRoZSBzcGVjaWZpYyBiZWhhdmlvdXIsIHN1Y2ggYXMgdGV4dCBzZWFyY2hpbmcgb3IgaW1hZ2UgcHJvY2Vzc2luZy4KCi0gSU9DYXNlCiAgLSBOZXcgY2xhc3MvZW51bWVyYXRpb24gZm9yIGNhc2Utc2Vuc2l0aXZpdHkgY29udHJvbAoKLSBGaWxlbmFtZVV0aWxzCiAgLSBOZXcgbWV0aG9kcyB0byBoYW5kbGUgY2FzZS1zZW5zaXRpdml0eQogIC0gd2lsZGNhcmRNYXRjaCAtIG5ldyBtZXRob2QgdGhhdCBoYXMgSU9DYXNlIGFzIGEgcGFyYW1ldGVyCiAgLSBlcXVhbHMgLSBuZXcgbWV0aG9kIHRoYXQgaGFzIElPQ2FzZSBhcyBhIHBhcmFtZXRlcgoKLSBGaWxlVXRpbHMgW0lPLTEwOF0gLSBuZXcgZGVmYXVsdCBlbmNvZGluZyBtZXRob2RzIGZvcjoKICAtIHJlYWRGaWxlVG9TdHJpbmcoRmlsZSkKICAtIHJlYWRMaW5lcyhGaWxlKQogIC0gbGluZUl0ZXJhdG9yKEZpbGUpCiAgLSB3cml0ZVN0cmluZ1RvRmlsZShGaWxlLCBTdHJpbmcpCiAgLSB3cml0ZUxpbmVzKEZpbGUsIENvbGxlY3Rpb24pCiAgLSB3cml0ZUxpbmVzKEZpbGUsIENvbGxlY3Rpb24sIFN0cmluZykKCi0gRmlsZVV0aWxzLm9wZW5PdXRwdXRTdHJlYW0gIFtJTy0xMDddCiAgLSBuZXcgbWV0aG9kIHRvIG9wZW4gYSBGaWxlT3V0cHV0U3RyZWFtLCBjcmVhdGluZyBwYXJlbnQgZGlyZWN0b3JpZXMgaWYgcmVxdWlyZWQKLSBGaWxlVXRpbHMudG91Y2gKLSBGaWxlVXRpbHMuY29weVVSTFRvRmlsZQotIEZpbGVVdGlscy53cml0ZVN0cmluZ1RvRmlsZQotIEZpbGVVdGlscy53cml0ZUJ5dGVBcnJheVRvRmlsZQotIEZpbGVVdGlscy53cml0ZUxpbmVzCiAgLSBlbmhhbmNlZCB0byBjcmVhdGUgcGFyZW50IGRpcmVjdG9yaWVzIGlmIHJlcXVpcmVkCi0gRmlsZVV0aWxzLm9wZW5JbnB1dFN0cmVhbSAgW0lPLTEwN10KICAtIG5ldyBtZXRob2QgdG8gb3BlbiBhIEZpbGVJbnB1dFN0cmVhbSwgcHJvdmlkaW5nIGJldHRlciBlcnJvciBtZXNzYWdlcyB0aGFuIHRoZSBKREsKCi0gRmlsZVV0aWxzLmlzRmlsZU9sZGVyCiAgLSBuZXcgbWV0aG9kcyB0byBjaGVjayBpZiBhIGZpbGUgaXMgb2xkZXIgKGkuZS4gaXNGaWxlT2xkZXIoKSkgLSBjb3VudGVycGFydHMKICAgIHRvIHRoZSBleGlzdGluZyBpc0ZpbGVOZXdlcigpIG1ldGhvZHMuCgotIEZpbGVVdGlscy5jaGVja3N1bSwgRmlsZVV0aWxzLmNoZWNrc3VtQ1JDMzIKICAtIG5ldyBtZXRob2RzIHRvIGNyZWF0ZSBhIGNoZWNrc3VtIG9mIGEgZmlsZQoKLSBGaWxlVXRpbHMuY29weUZpbGVUb0RpcmVjdG9yeSAgW0lPLTEwNF0KICAtIG5ldyB2YXJpYW50IHRoYXQgb3B0aW9uYWxseSByZXRhaW5zIHRoZSBmaWxlIGRhdGUKCi0gRmlsZURlbGV0ZVN0cmF0ZWd5Ci0gRmlsZUNsZWFuZXIgICAgW0lPLTU2LElPLTcwXQogIC0gRmlsZURlbGV0ZVN0cmF0ZWd5IGlzIGEgc3RyYXRlZ3kgZm9yIGhhbmRsaW5nIGZpbGUgZGVsZXRpb24KICAtIFRoaXMgY2FuIGJlIHVzZWQgYXMgYSBjYWxiYWNrIGluIEZpbGVDbGVhbmVyCiAgLSBUb2dldGhlciB0aGVzZSBhbGxvdyBGaWxlQ2xlYW5lciB0byBkbyBhIGZvcmNlRGVsZXRlIHRvIGtpbGwgZGlyZWN0b3JpZXMKCi0gRmlsZUNsZWFuZXIuZXhpdFdoZW5GaW5pc2hlZCBbSU8tOTldCiAgLSBBIG5ldyBtZXRob2QgdGhhdCBhbGxvd3MgdGhlIGludGVybmFsIGNsZWFuZXIgdGhyZWFkIHRvIGJlIGNsZWFubHkgdGVybWluYXRlZAoKLSBXaWxkY2FyZEZpbGVGaWx0ZXIKICAtIFJlcGxhY2VtZW50IGZvciBXaWxkY2FyZEZpbHRlcgogIC0gQWNjZXB0cyBib3RoIGZpbGVzIGFuZCBkaXJlY3RvcmllcwogIC0gQWJpbGl0eSB0byBjb250cm9sIGNhc2Utc2Vuc2l0aXZpdHkKCi0gTmFtZUZpbGVGaWx0ZXIKICAtIEFiaWxpdHkgdG8gY29udHJvbCBjYXNlLXNlbnNpdGl2aXR5CgotIEZpbGVGaWxlRmlsdGVyCiAgLSBOZXcgSU9GaWxlRmlsdGVyIGltcGxlbWVudGF0aW9uCiAgLSBBY2NlcHRzIGZpbGVzIHdoZXJlIEZpbGUuaXNGaWxlKCkgaXMgdHJ1ZQogIC0gSW4gb3RoZXIgd29yZHMgaXQgZmlsdGVycyBvdXQgZGlyZWN0b3JpZXMKICAtIFNpbmdsZXRvbiBpbnN0YW5jZSBwcm92aWRlZCAoRklMRSkKCi0gQ2FuUmVhZEZpbGVGaWx0ZXIKICAtIE5ldyBJT0ZpbGVGaWx0ZXIgaW1wbGVtZW50YXRpb24KICAtIEFjY2VwdHMgZmlsZXMgd2hlcmUgRmlsZS5jYW5SZWFkKCkgaXMgdHJ1ZQogIC0gU2luZ2xldG9uIGluc3RhbmNlcyBwcm92aWRlZCAoQ0FOX1JFQUQvQ0FOTk9UX1JFQUQvUkVBRF9PTkxZKQoKLSBDYW5Xcml0ZUZpbGVGaWx0ZXIKICAtIE5ldyBJT0ZpbGVGaWx0ZXIgaW1wbGVtZW50YXRpb24KICAtIEFjY2VwdHMgZmlsZXMgd2hlcmUgRmlsZS5jYW5Xcml0ZSgpIGlzIHRydWUKICAtIFNpbmdsZXRvbiBpbnN0YW5jZXMgcHJvdmlkZWQgKENBTl9XUklURS9DQU5OT1RfV1JJVEUpCgotIEhpZGRlbkZpbGVGaWx0ZXIKICAtIE5ldyBJT0ZpbGVGaWx0ZXIgaW1wbGVtZW50YXRpb24KICAtIEFjY2VwdHMgZmlsZXMgd2hlcmUgRmlsZS5pc0hpZGRlbigpIGlzIHRydWUKICAtIFNpbmdsZXRvbiBpbnN0YW5jZXMgcHJvdmlkZWQgKEhJRERFTi9WSVNJQkxFKQoKLSBFbXB0eUZpbGVGaWx0ZXIKICAtIE5ldyBJT0ZpbGVGaWx0ZXIgaW1wbGVtZW50YXRpb24KICAtIEFjY2VwdHMgZmlsZXMgb3IgZGlyZWN0b3JpZXMgdGhhdCBhcmUgZW1wdHkKICAtIFNpbmdsZXRvbiBpbnN0YW5jZXMgcHJvdmlkZWQgKEVNUFRZL05PVF9FTVBUWSkKCi0gVHJ1ZUZpbGVGaWx0ZXIvRmFsc2VGaWxlRmlsdGVyL0RpcmVjdG9yeUZpbGVGaWx0ZXIKICAtIE5ldyBzaW5nbGV0b24gaW5zdGFuY2UgY29uc3RhbnRzIChUUlVFL0ZBTFNFL0RJUkVDVE9SWSkKICAtIFRoZSBuZXcgY29uc3RhbnRzIGFyZSBtb3JlIEpESyAxLjUgZnJpZW5kbHkgd2l0aCByZWdhcmRzIHRvIHN0YXRpYyBpbXBvcnRzCiAgICAod2hlcmVhcyBpZiBldmVyeXRoaW5nIHVzZXMgSU5TVEFOQ0UsIHRoZW4gdGhleSBqdXN0IGNsYXNoKQogIC0gVGhlIG9sZCBJTlNUQU5DRSBjb25zdGFudHMgYXJlIHN0aWxsIHByZXNlbnQgYW5kIGhhdmUgbm90IGJlZW4gZGVwcmVjYXRlZAoKLSBGaWxlRmlsdGVyVXRpbHMuc2l6ZVJhbmdlRmlsZUZpbHRlcgogIC0gbmV3IHNpemVSYW5nZUZpbGVGaWx0ZXIobG9uZyBtaW5pbXVtU2l6ZSwgbG9uZyBtYXhpbXVtU2l6ZSkgbWV0aG9kIHdoaWNoIAogICAgY3JlYXRlcyBhIGZpbHRlciB0aGF0IGFjY2VwdHMgZmlsZXMgd2l0aGluIHRoZSBzcGVjaWZpZWQgc2l6ZSByYW5nZS4KCi0gRmlsZUZpbHRlclV0aWxzLm1ha2VEaXJlY3RvcnlPbmx5L21ha2VGaWxlT25seQogIC0gdHdvIG5ldyBtZXRob2RzIHRoYXQgZGVjb3JhdGUgYSBmaWxlIGZpbHRlciB0byBtYWtlIGl0IGFwcGx5IHRvCiAgICBkaXJlY3RvcmllcyBvbmx5IG9yIGZpbGVzIG9ubHkKCi0gTnVsbFdyaXRlcgogIC0gTmV3IHdyaXRlciB0aGF0IGFjdHMgYXMgYSBzaW5rIGZvciBhbGwgZGF0YSwgYXMgcGVyIC9kZXYvbnVsbAoKLSBOdWxsSW5wdXRTdHJlYW0KICAtIE5ldyBpbnB1dCBzdHJlYW0gdGhhdCBlbXVsYXRlcyBhIHN0cmVhbSBvZiBhIHNwZWNpZmllZCBzaXplCgotIE51bGxSZWFkZXIKICAtIE5ldyByZWFkZXIgdGhhdCBlbXVsYXRlcyBhIHJlYWRlciBvZiBhIHNwZWNpZmllZCBzaXplCgotIEJ5dGVBcnJheU91dHB1dFN0cmVhbSAgW0lPLTk3XQogIC0gUGVyZm9ybWFuY2UgZW5oYW5jZW1lbnRzCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQXBhY2hlIENvbW1vbnMgSU8gVmVyc2lvbiAxLjIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgpDb21wYXRpYmlsaXR5IHdpdGggMS4xCi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQmluYXJ5IGNvbXBhdGlibGUgLSBZZXMKClNvdXJjZSBjb21wYXRpYmxlIC0gWWVzCgpTZW1hbnRpYyBjb21wYXRpYmxlIC0gWWVzCgpEZXByZWNhdGlvbnMgZnJvbSAxLjEKLS0tLS0tLS0tLS0tLS0tLS0tLS0tCgpCdWcgZml4ZXMgZnJvbSAxLjEKLS0tLS0tLS0tLS0tLS0tLS0tCi0gRmlsZVN5c3RlbVV0aWxzLmZyZWVTcGFjZShkcml2ZSkKICBGaXggdG8gYWxsb3cgV2luZG93cyBiYXNlZCBjb21tYW5kIHRvIGZ1bmN0aW9uIGluIEZyZW5jaCBsb2NhbGUKCi0gRmlsZVV0aWxzLnJlYWQqCiAgSW5jcmVhc2UgY2VydGFpbnR5IHRoYXQgZmlsZXMgYXJlIGNsb3NlZCBpbiBjYXNlIG9mIGVycm9yCgotIExvY2thYmxlRmlsZVdyaXRlcgogIExvY2tpbmcgbWVjaGFuaXNtIHdhcyBicm9rZW4gYW5kIG9ubHkgcHJvdmlkZWQgbGltaXRlZCBwcm90ZWN0aW9uIFszODk0Ml0KICBGaWxlIGRlbGV0aW9uIGFuZCBsb2NraW5nIGluIGNhc2Ugb2YgY29uc3RydWN0b3IgZXJyb3Igd2FzIGJyb2tlbgoKRW5oYW5jZW1lbnRzIGZyb20gMS4xCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQotIEFnZUZpbGVGaWx0ZXIvU2l6ZUZpbGVGaWx0ZXIKICBOZXcgZmlsZSBmaWx0ZXJzIHRoYXQgY29tcGFyZXMgYWdhaW5zdCB0aGUgYWdlIGFuZCBzaXplIG9mIHRoZSBmaWxlCgotIEZpbGVTeXN0ZW1VdGlscy5mcmVlU3BhY2VLYihkcml2ZSkKICBOZXcgbWV0aG9kIHRoYXQgdW5pZmllcyByZXN1bHQgdG8gYmUgaW4ga2lsb2J5dGVzIFszODU3NF0KCi0gRmlsZVV0aWxzLmNvbnRlbnRFcXVhbHMoRmlsZSxGaWxlKQogIFBlcmZvcm1hbmNlIGltcHJvdmVkIGJ5IGFkZGluZyBsZW5ndGggYW5kIGZpbGUgbG9jYXRpb24gY2hlY2tpbmcKCi0gRmlsZVV0aWxzLml0ZXJhdGVGaWxlcwogIFR3byBuZXcgbWV0aG9kIHRvIHByb3ZpZGUgZGlyZWN0IGFjY2VzcyB0byBpdGVyYXRvcnMgb3ZlciBmaWxlcwoKLSBGaWxlVXRpbHMubGluZUl0ZXJhdG9yCiAgSU9VdGlscy5saW5lSXRlcmF0b3IKICBOZXcgbWV0aG9kcyB0byBwcm92aWRlIGFuIGl0ZXJhdG9yIG92ZXIgdGhlIGxpbmVzIGluIGEgZmlsZSBbMzgwODNdCgotIEZpbGVVdGlscy5jb3B5RGlyZWN0b3J5VG9EaXJlY3RvcnkKICBOZXcgbWV0aG9kIHRvIGNvcHkgYSBkaXJlY3RvcnkgdG8gd2l0aGluIGFub3RoZXIgZGlyZWN0b3J5IFszNjMxNV0KICAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CkFwYWNoZSBDb21tb25zIElPIFZlcnNpb24gMS4xCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKSW5jb21wYXRpYmxlIGNoYW5nZXMgZnJvbSAxLjAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQmluYXJ5IGNvbXBhdGlibGUgLSBZZXMKClNvdXJjZSBjb21wYXRpYmxlIC0gWWVzCgpTZW1hbnRpYyBjb21wYXRpYmxlIC0gWWVzLCBleGNlcHQ6Ci0gRmlsZVV0aWxzLndyaXRlU3RyaW5nVG9GaWxlKCkKICAgIEEgbnVsbCBlbmNvZGluZyBwcmV2aW91c2x5IHVzZWQgJ0lTTy04ODU5LTEnLCBub3cgaXQgdXNlcyB0aGUgcGxhdGZvcm0gZGVmYXVsdAogICAgR2VuZXJhbGx5IHRoaXMgd2lsbCBtYWtlIG5vIGRpZmZlcmVuY2UKCi0gTG9ja2FibGVGaWxlV3JpdGVyCiAgICBJbXByb3ZlZCB2YWxpZGF0aW9uIGFuZCBub3cgY3JlYXRlIGRpcmVjdG9yaWVzIGlmIG5lY2Vzc3NhcnkKCnBsdXMgdGhlc2UgYnVnIGZpeGVzIG1heSBhZmZlY3QgeW91IHNlbWFudGljYWxseToKLSBGaWxlVXRpbHMudG91Y2goKSAgKEJ1ZyBmaXggMjk4MjEpCiAgICBOb3cgY3JlYXRlcyB0aGUgZmlsZSBpZiBpdCBkaWQgbm90IHByZXZpb3VzbHkgZXhpc3QKCi0gRmlsZVV0aWxzLnRvRmlsZShVUkwpIChCdWcgZml4IDMyNTc1KQogICAgTm93IGhhbmRsZXMgZXNjYXBlIHN5bnRheCBzdWNoIGFzICUyMAoKLSBGaWxlVXRpbHMuc2l6ZU9mRGlyZWN0b3J5KCkgIChCdWcgZml4IDM2ODAxKQogICAgTWF5IG5vdyByZXR1cm4gYSBzaXplIG9mIDAgaWYgdGhlIGRpcmVjdG9yeSBpcyBzZWN1cml0eSByZXN0cmljdGVkCgpEZXByZWNhdGlvbnMgZnJvbSAxLjAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tCi0gQ29weVV0aWxzIGhhcyBiZWVuIGRlcHJlY2F0ZWQuCiAgICBJdHMgbWV0aG9kcyBoYXZlIGJlZW4gbW92ZWQgdG8gSU9VdGlscy4KICAgIFRoZSBuZXcgSU9VdGlscyBtZXRob2RzIGhhbmRsZSBudWxscyBiZXR0ZXIsIGFuZCBoYXZlIGNsZWFyZXIgbmFtZXMuCgotIElPVXRpbHMudG9CeXRlQXJyYXkoU3RyaW5nKSAtIFVzZSB7QGxpbmsgU3RyaW5nI2dldEJ5dGVzKCl9Ci0gSU9VdGlscy50b1N0cmluZyhieXRlW10pIC0gVXNlIHtAbGluayBTdHJpbmcjU3RyaW5nKGJ5dGVbXSl9Ci0gSU9VdGlscy50b1N0cmluZyhieXRlW10sU3RyaW5nKSAtIFVzZSB7QGxpbmsgU3RyaW5nI1N0cmluZyhieXRlW10sU3RyaW5nKX0KCkJ1ZyBmaXhlcyBmcm9tIDEuMAotLS0tLS0tLS0tLS0tLS0tLS0KLSBGaWxlVXRpbHMgLSB0b3VjaCgpICBbMjk4MjFdCiAgICBOb3cgY3JlYXRlcyB0aGUgZmlsZSBpZiBpdCBkaWQgbm90IHByZXZpb3VzbHkgZXhpc3QKCi0gRmlsZVV0aWxzIC0gdG9GaWxlKFVSTCkgIFszMjU3NV0KICAgIE5vdyBoYW5kbGVzIGVzY2FwZSBzeW50YXggc3VjaCBhcyAlMjAKCi0gRmlsZUZpbHRlclV0aWxzIC0gbWFrZUNWU0F3YXJlKElPRmlsZUZpbHRlcikgIFszMzAyM10KICAgIEZpeGVkIGJ1ZyB0aGF0IGNhdXNlZCBtZXRob2QgdG8gYmUgY29tcGxldGVseSBicm9rZW4KCi0gQ291bnRpbmdJbnB1dFN0cmVhbSAgWzMzMzM2XQogICAgRml4ZWQgYnVnIHRoYXQgY2F1c2VkIHRoZSBjb3VudCB0byByZWR1Y2UgYnkgb25lIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmVhbQoKLSBDb3VudGluZ0lucHV0U3RyZWFtIC0gc2tpcChsb25nKSAgWzM0MzExXQogICAgQnl0ZXMgZnJvbSBjYWxscyB0byB0aGlzIG1ldGhvZCB3ZXJlIG5vdCBwcmV2aW91c2x5IGNvdW50ZWQKCi0gTnVsbE91dHB1dFN0cmVhbSAgWzMzNDgxXQogICAgUmVtb3ZlIHVubmVjZXNzYXJ5IHN5bmNocm9uaXphdGlvbgoKLSBBYnN0cmFjdEZpbGVGaWx0ZXIgLSBhY2NlcHQoRmlsZSwgU3RyaW5nKSAgWzMwOTkyXQogICAgRml4ZWQgYnJva2VuIGltcGxlbWVudGF0aW9uCgotIEZpbGVVdGlscyAgWzM2ODAxXQogICAgUHJldmlvdXNseSB0aHJldyBOUEUgd2hlbiBsaXN0aW5nIGZpbGVzIGluIGEgc2VjdXJpdHkgcmVzdHJpY3RlZCBkaXJlY3RvcnkKICAgIE5vdyB0aHJvdyBJT0V4Y2VwdGlvbiB3aXRoIGEgYmV0dGVyIG1lc3NhZ2UKCi0gRmlsZVV0aWxzIC0gd3JpdGVTdHJpbmdUb0ZpbGUoKQogICAgTnVsbCBlbmNvZGluZyBub3cgY29ycmVjdGx5IHVzZXMgdGhlIHBsYXRmb3JtIGRlZmF1bHQKCkVuaGFuY2VtZW50cyBmcm9tIDEuMAotLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSBGaWxlbmFtZVV0aWxzIC0gbmV3IGNsYXNzICBbMzMzMDMsMjkzNTFdCiAgICBBIHN0YXRpYyB1dGlsaXR5IGNsYXNzIGZvciB3b3JraW5nIHdpdGggZmlsZW5hbWVzCiAgICBTZWVrcyB0byBlYXNlIHRoZSBwYWluIG9mIGRldmVsb3Bpbmcgb24gV2luZG93cyBhbmQgZGVwbG95aW5nIG9uIFVuaXgKCi0gRmlsZVN5c3RlbVV0aWxzIC0gbmV3IGNsYXNzICBbMzI5ODIsMzYzMjVdCiAgICBBIHN0YXRpYyB1dGlsaXR5IGNsYXNzIGZvciB3b3JraW5nIHdpdGggZmlsZSBzeXN0ZW1zCiAgICBQcm92aWRlcyBvbmUgbWV0aG9kIGF0IHByZXNlbnQsIHRvIGdldCB0aGUgZnJlZSBzcGFjZSBvbiB0aGUgZmlsaW5nIHN5c3RlbQoKLSBJT1V0aWxzIC0gbmV3IHB1YmxpYyBjb25zdGFudHMKICAgIENvbnN0YW50cyBmb3IgZGlyZWN0b3J5IGFuZCBsaW5lIHNlcGFyYXRvcnMgb24gV2luZG93cyBhbmQgVW5peAoKLSBJT1V0aWxzIC0gdG9CeXRlQXJyYXkoUmVhZGVyLGVuY29kaW5nKQogICAgSGFuZGxlcyBlbmNvZGluZ3Mgd2hlbiByZWFkaW5nIHRvIGEgYnl0ZSBhcnJheQoKLSBJT1V0aWxzIC0gdG9DaGFyQXJyYXkoSW5wdXRTdHJlYW0pICBbMjg5NzldCiAgICAgICAgICAtIHRvQ2hhckFycmF5KElucHV0U3RyZWFtLGVuY29kaW5nKQogICAgICAgICAgLSB0b0NoYXJBcnJheShSZWFkZXIpCiAgICBSZWFkcyBhIHN0cmVhbS9yZWFkZXIgaW50byBhIGNoYXJhdGN0ZXIgYXJyYXkKCi0gSU9VdGlscyAtIHJlYWRMaW5lcyhJbnB1dFN0cmVhbSkgIFszNjIxNF0KICAgICAgICAgIC0gcmVhZExpbmVzKElucHV0U3RyZWFtLGVuY29kaW5nKQogICAgICAgICAgLSByZWFkTGluZXMoUmVhZGVyKQogICAgUmVhZHMgYSBzdHJlYW0vcmVhZGVyIGxpbmUgYnkgbGluZSBpbnRvIGEgTGlzdCBvZiBTdHJpbmdzCgotIElPVXRpbHMgLSB0b0lucHV0U3RyZWFtKFN0cmluZykgIFszMjk1OF0KICAgICAgICAgIC0gdG9JbnB1dFN0cmVhbShTdHJpbmcsZW5jb2RpbmcpCiAgICBDcmVhdGVzIGFuIGlucHV0IHN0cmVhbSB0aGF0IHVzZXMgdGhlIHN0cmluZyBhcyBhIHNvdXJjZSBvZiBkYXRhCgotIElPVXRpbHMgLSB3cml0ZUxpbmVzKENvbGxlY3Rpb24sbGluZUVuZGluZyxPdXRwdXRTdHJlYW0pICBbMzYyMTRdCiAgICAgICAgICAtIHdyaXRlTGluZXMoQ29sbGVjdGlvbixsaW5lRW5kaW5nLE91dHB1dFN0cmVhbSxlbmNvZGluZykKICAgICAgICAgIC0gd3JpdGVMaW5lcyhDb2xsZWN0aW9uLGxpbmVFbmRpbmcsV3JpdGVyKQogICAgV3JpdGVzIGEgY29sbGVjdGlvbiB0byBhIHN0cmVhbS93cml0ZXIgbGluZSBieSBsaW5lCgotIElPVXRpbHMgLSB3cml0ZSguLi4pCiAgICBXcml0ZSBkYXRhIHRvIGEgc3RyZWFtL3dyaXRlciAobW92ZWQgZnJvbSBDb3B5VXRpbHMgd2l0aCBiZXR0ZXIgbnVsbCBoYW5kbGluZykKCi0gSU9VdGlscyAtIGNvcHkoLi4uKQogICAgQ29weSBkYXRhIGJldHdlZW4gc3RyZWFtcyAobW92ZWQgZnJvbSBDb3B5VXRpbHMgd2l0aCBiZXR0ZXIgbnVsbCBoYW5kbGluZykKCi0gSU9VdGlscyAtIGNvbnRlbnRFcXVhbHMoUmVhZGVyLFJlYWRlcikKICAgIE1ldGhvZCB0byBjb21wYXJlIHRoZSBjb250ZW50cyBvZiB0d28gcmVhZGVycwoKLSBGaWxlVXRpbHMgLSB0b0ZpbGVzKFVSTFtdKQogICAgQ29udmVydHMgYW4gYXJyYXkgb2YgVVJMcyB0byBhbiBhcnJheSBvZiBGaWxlcwoKLSBGaWxlVXRpbHMgLSBjb3B5RGlyZWN0b3J5KCkgIFszMjk0NF0KICAgIE5ldyBtZXRob2RzIHRvIGNvcHkgYSBkaXJlY3RvcnkKCi0gRmlsZVV0aWxzIC0gcmVhZEZpbGVUb0J5dGVBcnJheShGaWxlKQogICAgUmVhZHMgYW4gZW50aXJlIGZpbGUgaW50byBhIGJ5dGUgYXJyYXkKCi0gRmlsZVV0aWxzIC0gd3JpdGVCeXRlQXJyYXlUb0ZpbGUoRmlsZSxieXRlW10pCiAgICBXcml0ZXMgYSBieXRlIGFycmF5IHRvIGEgZmlsZQoKLSBGaWxlVXRpbHMgLSByZWFkTGluZXMoRmlsZSxlbmNvZGluZykgIFszNjIxNF0KICAgIFJlYWRzIGEgZmlsZSBsaW5lIGJ5IGxpbmUgaW50byBhIExpc3Qgb2YgU3RyaW5ncwoKLSBGaWxlVXRpbHMgLSB3cml0ZUxpbmVzKEZpbGUsZW5jb2RpbmcsTGlzdCkKICAgICAgICAgICAgICB3cml0ZUxpbmVzKEZpbGUsZW5jb2RpbmcsTGlzdCxsaW5lRW5kaW5nKQogICAgV3JpdGVzIGEgY29sbGVjdGlvbiB0byBhIGZpbGUgbGluZSBieSBsaW5lCgotIEZpbGVVdGlscyAtIEVNUFRZX0ZJTEVfQVJSQVkKICAgIENvbnN0YW50IGZvciBhbiBlbXB0eSBhcnJheSBvZiBGaWxlIG9iamVjdHMKCi0gQ29uZGl0aW9uYWxGaWxlRmlsdGVyIC0gbmV3IGludGVyZmFjZSAgWzMwNzA1XQogICAgRGVmaW5lcyB0aGUgYmVoYXZpb3VyIG9mIGxpc3QgYmFzZWQgZmlsdGVycwoKLSBBbmRGaWxlRmlsdGVyLCBPckZpbGVGaWx0ZXIgIFszMDcwNV0KICAgIE5vdyBzdXBwb3J0IGEgbGlzdCBvZiBmaWx0ZXJzIHRvIGFuZC9vcgoKLSBXaWxkY2FyZEZpbHRlciAgWzMxMTE1XQogICAgTmV3IGZpbHRlciB0aGF0IGNhbiBtYXRjaCB1c2luZyB3aWxkY2FyZCBmaWxlIG5hbWVzCgotIEZpbGVGaWx0ZXJVdGlscyAtIG1ha2VTVk5Bd2FyZShJT0ZpbGVGaWx0ZXIpCiAgICBOZXcgbWV0aG9kLCBsaWtlIG1ha2VDVlNBd2FyZSwgdGhhdCBpZ25vcmVzIFN1YnZlcnNpb24gc291cmNlIGNvbnRyb2wgZGlyZWN0b3JpZXMKCi0gQ2xhc3NMb2FkZXJPYmplY3RJbnB1dFN0cmVhbQogICAgQW4gT2JqZWN0SW5wdXRTdHJlYW0gdGhhdCBzdXBwb3J0cyBhIENsYXNzTG9hZGVyCgotIENvdW50aW5nSW5wdXRTdHJlYW0sQ291bnRpbmdPdXRwdXRTdHJlYW0gLSByZXNldENvdW50KCkgIFsyODk3Nl0KICAgIEFkZHMgdGhlIGFiaWxpdHkgdG8gcmVzZXQgdGhlIGNvdW50IHBhcnQgd2F5IHRocm91Z2ggcmVhZGluZy93cml0aW5nIHRoZSBzdHJlYW0KCi0gRGVmZXJyZWRGaWxlT3V0cHV0U3RyZWFtIC0gd3JpdGVUbyhPdXRwdXRTdHJlYW0pICBbMzQxNzNdCiAgICBOZXcgbWV0aG9kIHRvIGFsbG93IGN1cnJlbnQgY29udGVudHMgdG8gYmUgd3JpdHRlbiB0byBhIHN0cmVhbQoKLSBEZWZlcnJlZEZpbGVPdXRwdXRTdHJlYW0gIFszNDE0Ml0KICAgIFBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMgYXZvaWRpbmcgZG91YmxlIGJ1ZmZlcmluZwoKLSBMb2NrYWJsZUZpbGVXcml0ZXIgLSBlbmNvZGluZyBzdXBwb3J0IFszNjgyNV0KICAgIEFkZCBzdXBwb3J0IGZvciBjaGFyYWN0ZXIgZW5jb2RpbmdzIHRvIExvY2thYmxlRmlsZVdyaXRlcgogICAgSW1wcm92ZSB0aGUgdmFsaWRhdGlvbgogICAgQ3JlYXRlIGRpcmVjdG9yaWVzIGlmIG5lY2Vzc3NhcnkKCi0gSU9VdGlscyBhbmQgRW5kaWFuVXRpbHMgYXJlIG5vIGxvbmdlciBmaW5hbCAgWzI4OTc4XQogICAgQWxsb3dzIGRldmVsb3BlcnMgdG8gaGF2ZSBzdWJjbGFzc2VzIGlmIGRlc2lyZWQgICAKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpGZWVkYmFjawo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCk9wZW4gc291cmNlIHdvcmtzIGJlc3Qgd2hlbiB5b3UgZ2l2ZSBmZWVkYmFjazoKaHR0cDovL2NvbW1vbnMuYXBhY2hlLm9yZy9pby8KClBsZWFzZSBkaXJlY3QgYWxsIGJ1ZyByZXBvcnRzIHRvIEpJUkEKaHR0cDovL2lzc3Vlcy5hcGFjaGUub3JnL2ppcmEvYnJvd3NlL0lPCgpPciBzdWJzY3JpYmUgdG8gdGhlIGNvbW1vbnMtdXNlciBtYWlsaW5nIGxpc3QgKHByZWZpeCBlbWFpbHMgYnkgW2lvXSkKaHR0cDovL2NvbW1vbnMuYXBhY2hlLm9yZy9tYWlsLWxpc3RzLmh0bWwKClRoZSBDb21tb25zLUlPIFRlYW0K