VGhpcyBpcyB0aGUgVk1TIHZlcnNpb24gb2YgR05VIE1ha2UsIHVwZGF0ZWQgYnkgSGFydG11dCBCZWNrZXIKCkNoYW5nZXMgYXJlIGJhc2VkIG9uIEdOVSBtYWtlIDMuODIuCgpUaGlzIHZlcnNpb24gd2FzIGJ1aWx0IGFuZCB0ZXN0ZWQgb24gT3BlblZNUyBWNy4zIChWQVgpLCBWNy4zLTIgKEFscGhhKSBhbmQKVjguMy0xSDEgKEk2NCkuCgpCdWlsZCBpbnN0cnVjdGlvbnMKTWFrZSBhIDFzdCB2ZXJzaW9uCiAgICAgICAkIEBtYWtlZmlsZS5jb20gICEgaWdub3JlIGFueSBjb21waWxlciBhbmQvb3IgbGlua2VyIHdhcm5pbmcKICAgICAgICQgcmVuYSBtYWtlLmV4ZSAxc3QtbWFrZS5leGUKVXNlIHRoZSAxc3QgdmVyc2lvbiB0byBnZW5lcmF0ZSBhIDJuZCB2ZXJzaW9uCiAgICAgICAkIG1jIHN5cyRkaXNrOltdMXN0LW1ha2UgY2xlYW4KICAgICAgICQgbWMgc3lzJGRpc2s6W10xc3QtbWFrZQpWZXJpZnkgeW91ciAybmQgdmVyc2lvbgogICAgICAgJCByZW5hIG1ha2UuZXhlIDJuZC1tYWtlLmV4ZQogICAgICAgJCBtYyBzeXMkZGlzazpbXTJuZC1tYWtlIGNsZWFuCiAgICAgICAkIG1jIHN5cyRkaXNrOltdMm5kLW1ha2UKCkNoYW5nZXMgKDMuODEuOTApCgpNaWNoYWVsIEdlaHJlIChhdCBWSVNURUMtU0VNSSBkb3QgQ09NKSBzdXBwbGllZCBhIGZpeCBmb3IgYSBwcm9ibGVtIHdpdGgKdGltZXN0YW1wcyBvZiBvYmplY3QgbW9kdWxlcyBpbiBPTEJzLiBUaGUgdGltZXN0YW1wcyB3ZXJlIG5vdCBjb3JyZWN0bHkKYWRqdXN0ZWQgdG8gR01UIGJhc2VkIHRpbWUsIGlmIHRoZSBsb2NhbCBWTVMgdGltZSB3YXMgdXNpbmcgYSBkYXlsaWdodCBzYXZpbmcKYWxnb3JpdGhtIGFuZCBpZiBkYXlsaWdodCBzYXZpbmcgd2FzIHN3aXRjaGVkIG9mZi4KCkpvaG4gRWlzZW5icmF1biAoYXQgSFAgZG90IENPTSkgc3VwcGxpZWQgZml4ZXMgYW5kIGFuZCBhbiBlbmhhbmNlbWVudCB0byBhcHBlbmQKb3V0cHV0IHJlZGlyZWN0aW9uIGluIGFjdGlvbiBsaW5lcy4KClJld29yayBvZiBjdHJsK2MgYW5kIGN0cmwreSBoYW5kbGluZy4KCkZpeCBhIHByb2JsZW0gd2l0aCBjYWNoZWQgc3RyaW5ncywgd2hpY2ggc2hvd2VkIG9uIGNhc2UtaW5zZW5zaXRpdmUgZmlsZQpzeXN0ZW1zLgoKQnVpbGQgZml4ZXMgZm9yIGNvbnN0LWlmaWVkIGNvZGUgaW4gVk1TIHNwZWNpZmljIHNvdXJjZXMuCgpCdWlsZCBub3RlczoKLSBUcnkgdG8gYXZvaWQgSFAgQyBWNy4yLTAwMSwgd2hpY2ggaGFzIGFuIGluY29tcGF0aWJsZSBjaGFuZ2UKaG93IF9fU1REQ19fIGlzIGRlZmluZWQuIFRoaXMgcmVzdWx0cyBhdCBsZWFzdCBpbiBjb21waWxlIHRpbWUgd2FybmluZ3MuCgotIE9uIFY4LjMtMUgxLCBpZiB5b3UgcHJlc3MgQ3RybCtDIHlvdSBtYXkgc2VlIGEgdHJhY2ViYWNrLCBzdGFydGluZyB3aXRoCiVTWVNURU0tRi1DT05UUk9MQywgb3BlcmF0aW9uIGNvbXBsZXRlZCB1bmRlciBDVFJML0MKJVRSQUNFLUYtVFJBQ0VCQUNLLCBzeW1ib2xpYyBzdGFjayBkdW1wIGZvbGxvd3MKaW1hZ2UgICAgIG1vZHVsZSAgICByb3V0aW5lICAgICAgICAgICAgICAgbGluZSAgICAgIHJlbCBQQyAgICAgICAgICAgYWJzIFBDCgpERUNDJFNIUiAgQyRTSUdOQUwgIGdzaWduYWwgICAgICAgICAgICAgIDI3OTkxIDAwMDAwMDAwMDAwMDExODAKRkZGRkZGRkY4NEFCMkRBMApERUNDJFNIUiAgQyRTSUdOQUwgIHJhaXNlICAgICAgICAgICAgICAgIDI4MDQ4IDAwMDAwMDAwMDAwMDEyODAKRkZGRkZGRkY4NEFCMkVBMApERUNDJFNIUiAgQyRTSUdQRU5ESU5HICBkZWNjJCRkZWxpdmVyX3NpZ25hbHMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMjQ3NSAwMDAwMDAwMDAwMDAwODkwCkZGRkZGRkZGODRDMTM2OTAKLi4uClRoaXMgbG9va3MgbGlrZSBhbiBpbmNvbXBhdGliaWxpdHkgdG8gdGhlIEFscGhhIGFuZCBWQVggYmVoYXZpb3IsIHNvIGl0IGxvb2tzCmxpa2UgYSBwcm9ibGVtIGluIEk2NCBWTVMgdmVyc2lvbihzKS4KCi0gVGhlcmUgaXMgbm8gY2xlYW4gYnVpbGQgb24gVkFYLiBJbiB0aGUgZW52aXJvbm1lbnQgSSB0ZXN0ZWQsIEkgaGFkIHRvIHVzZSBHTlUKbWFrZSdzIGFsbG9jYSB3aGljaCBwcm9kdWNlZCBhIGNvdXBsZSBvZiBjb21waWxlIHRpbWUgd2FybmluZ3MuIEl0IHNlZW1zIHRvbwptdWNoIGVmZm9ydCB0byB3b3JrIG9uIGEgY2xlYW4gYnVpbGQgb24gVkFYLgoKQSBub3RlIG9uIGFwcGVuZGluZyB0aGUgcmVkaXJlY3RlZCBvdXRwdXQuIFdpdGggdGhpcyBjaGFuZ2UsIGEgc2ltcGxlIG1lY2hhbmlzbQppcyBpbXBsZW1lbnRlZCB0byBtYWtlICI+PiIgd29yayBpbiBhY3Rpb24gbGluZXMuIEluIFZNUyB0aGVyZSBpcyBubyBzaW1wbGUKZmVhdHVyZSBsaWtlICI+PiIgdG8gaGF2ZSBEQ0wgY29tbWFuZCBvciBwcm9ncmFtIG91dHB1dCByZWRpcmVjdGVkIGFuZCBhcHBlbmRlZAp0byBhIGZpbGUuIEdOVSBtYWtlIGZvciBWTVMgYWxyZWFkeSBpbXBsZW1lbnRzIHRoZSByZWRpcmVjdGlvbiBvZiBvdXRwdXQuIElmCnN1Y2ggYSByZWRpcmVjdGlvbiBpcyBkZXRlY3RlZCwgYW4gIj4iIG9uIHRoZSBhY3Rpb24gbGluZSwgR05VIG1ha2UgY3JlYXRlcyBhCkRDTCBjb21tYW5kIHByb2NlZHVyZSB0byBleGVjdXRlIHRoZSBhY3Rpb24gYW5kIHRvIHJlZGlyZWN0IGl0cyBvdXRwdXQuIEJhc2VkCm9uIHRoYXQsIG5vdyAiPj4iIGlzIGFsc28gcmVjb2duaXplZCBhbmQgYSBzaW1pbGFyIGJ1dCBkaWZmZXJlbnQgY29tbWFuZApwcm9jZWR1cmUgaXMgY3JlYXRlZCB0byBpbXBsZW1lbnQgdGhlIGFwcGVuZC4gVGhlIG1haW4gaWRlYSBoZXJlIGlzIHRvIGNyZWF0ZSBhCnRlbXBvcmFyeSBmaWxlIHdoaWNoIGNvbGxlY3RzIHRoZSBvdXRwdXQgYW5kIHdoaWNoIGlzIGFwcGVuZGVkIHRvIHRoZSB3YW50ZWQKb3V0cHV0IGZpbGUuIFRoZW4gdGhlIHRlbXBvcmFyeSBmaWxlIGlzIGRlbGV0ZWQuIFRoaXMgaXMgYWxsIGRvbmUgaW4gdGhlCmNvbW1hbmQgcHJvY2VkdXJlIHRvIGtlZXAgY2hhbmdlcyBpbiBtYWtlIHNtYWxsIGFuZCBzaW1wbGUuIFRoaXMgb2J2aW91c2x5IGhhcwpzb21lIGxpbWl0YXRpb25zIGJ1dCBpdCBzZWVtcyBnb29kIGVub3VnaCBjb21wYXJlZCB3aXRoIHRoZSBjdXJyZW50ICI+IgppbXBsZW1lbnRhdGlvbi4gKEFuZCBpbiBteSBvcGluaW9uLCByZWRpcmVjdGlvbiBpcyBub3QgcmVhbGx5IHdoYXQgR05VIG1ha2UgaGFzCnRvIGRvLikgV2l0aCB0aGlzIGFwcHJvYWNoLCBpdCBtYXkgaGFwcGVuIHRoYXQgdGhlIHRlbXBvcmFyeSBmaWxlIGlzIG5vdCB5ZXQKYXBwZW5kZWQgYW5kIGlzIGxlZnQgaW4gU1lTJFNDUkFUQ0guIFRoZSB0ZW1wb3JhcnkgZmlsZSBuYW1lcyBsb29rIGxpa2UKIkNNRHh4eHh4LiIuIEFueSB0aW1lIHRoZSBjcmVhdGVkIGNvbW1hbmQgcHJvY2VkdXJlIGNhbiBub3QgY29tcGxldGUsIHRoaXMKaGFwcGVucy4gUHJlc3NpbmcgQ3RybCtZIHRvIGFib3J0IG1ha2UgaXMgb25lIGNhc2UuIEluIGNhc2Ugb2YgQ3RybCtZIHRoZQphc3NvY2lhdGVkIGNvbW1hbmQgcHJvY2VkdXJlIGlzIGxlZnQgaW4gU1lTJFNDUkFUQ0ggYXMgd2VsbC4gSXRzIG5hbWUgaXMKQ01EeHh4eHguQ09NLgoKQ2hhbmdlIGluIHRoZSBDdHJsK1kgaGFuZGxpbmcKCkN0cmwrWSB3YXM6IFRoZSBDdHJsWSBoYW5kbGVyIGNhbGxlZCAkZm9yY2V4IGZvciB0aGUgY3VycmVudCBjaGlsZC4KCkN0cmwrWSBjaGFuZ2VkOiBUaGUgQ3RybFkgaGFuZGxlciB1c2VzICRkZWxwcmMgdG8gZGVsZXRlIGFsbCBjaGlsZHJlbi4gVGhpcyB3YXkKYWxzbyBhY3Rpb25zIHdpdGggRENMIGNvbW1hbmRzIHdpbGwgYmUgc3RvcHBlZC4gQXMgYmVmb3JlIEN0cmwrWSB0aGVuIHNlbmRzClNJR1FVSVQgdG8gaXRzZWxmLCB3aGljaCBpcyBoYW5kbGVkIGluIGNvbW1vbiBjb2RlLgoKQ2hhbmdlIGluIGRlbGV0ZWluZyB0ZW1wb3JhcnkgY29tbWFuZCBmaWxlcwoKVGVtcG9yYXJ5IGNvbW1hbmQgZmlsZXMgd2VyZSBkZWxldGVkIGluIHRoZSBtYWluIGxpbmUsIGFmdGVyIHJldHVybmluZyBmcm9tIHRoZQp2bXMgY2hpbGQgdGVybWluYXRpb24gaGFuZGxlci4gSWYgQ3RybCtDIHdhcyBwcmVzc2VkLCB0aGUgaGFuZGxlciBpcyBjYWxsZWQgYnV0CmRpZCBub3QgcmV0dXJuIHRvIG1haW4gbGluZS4KCk5vdywgdGVtcG9yYXJ5IGNvbW1hbmQgZmlsZXMgYXJlIGRlbGV0ZWQgaW4gdGhlIHZtcyBjaGlsZCB0ZXJtaW5hdGlvbgpoYW5kbGVyLiBUaGF0IGRlbGV0ZXMgdGhlIHRoZW0gZXZlbiBpZiBhIEN0cmwrQyB3YXMgcHJlc3NlZC4KClRoZSBiZWhhdmlvciBvZiBwcmVzc2luZyBDdHJsK0MgaXMgbm90IGNoYW5nZWQuIEl0IHN0aWxsIGhhcyBvbmx5IGFuIGVmZmVjdCwKYWZ0ZXIgdGhlIGN1cnJlbnQgYWN0aW9uIGlzIHRlcm1pbmF0ZWQuIElmIHRoYXQgZG9lc24ndCBoYXBwZW4gb3IgdGFrZXMgdG9vCmxvbmcsIEN0cmwrWSBzaG91bGQgYmUgdXNlZCBpbnN0ZWFkLgoMCkNoYW5nZXMgKDMuODApCgouIEluIGRlZmF1bHQuYyBkZWZpbmUgdmFyaWFibGUgQVJDSCBhcyBJQTY0IGZvciBWTVMgb24gSXRhbml1bSBzeXN0ZW1zLgoKLiBJbiBtYWtlZmlsZS52bXMgYXZvaWQgbmFtZSBjb2xsaXNpb24gZm9yIGdsb2IgYW5kIGdsb2JmcmVlLgoKSW4gbmV3ZXIgdmVyc2lvbiBvZiB0aGUgVk1TIENSVEwgdGhlcmUgYXJlIGdsb2IgYW5kIGdsb2JmcmVlIGltcGxlbWVudGVkLgpDb21waWxpbmcgYW5kIGxpbmtpbmcgbWF5IHJlc3VsdCBpbgoKICAlSUxJTkstVy1NVUxERUZMTktHLCBzeW1ib2wgREVDQyRHTE9CRlJFRSBoYXMgc3Vic2VxdWVudCBsaW5rYWdlIGRlZmluaXRpb24KICAgICAgIGluIG1vZHVsZSBERUNDJFNIUiBmaWxlIFNZUyRDT01NT046W1NZU0xJQl1ERUNDJFNIUi5FWEU7MQogICVJTElOSy1XLU1VTERFRiwgc3ltYm9sIERFQ0MkR0xPQkZSRUUgbXVsdGlwbHkgZGVmaW5lZAogICAgICAgaW4gbW9kdWxlIERFQ0MkU0hSIGZpbGUgU1lTJENPTU1PTjpbU1lTTElCXURFQ0MkU0hSLkVYRTsxCgpsaW5rZXIgbWVzc2FnZXMgKGFuZCBzaW1pbGFyIGZvciBERUNDJEdMT0IpLiBUaGUgbWVzc2FnZXMganVzdCBzYXksIHRoYXQKZ2xvYmZyZWUgaXMgYSBrbm93biBDUlRMIHdob3NlIG5hbWUgd2FzIG1hcHBlZCBieSB0aGUgY29tcGlsZXIgdG8KREVDQyRHTE9CRlJFRS4gIFRoaXMgaXMgZG9uZSBpbiBnbG9iLmMgYXMgd2VsbCwgc28gdGhpcyBuYW1lIGlzIGRlZmluZWQKdHdpY2UuIE9uZSBwb3NzaWJsZSBzb2x1dGlvbiBpcyB0byB1c2UgdGhlIFZNUyB2ZXJzaW9ucyBvZiBnbG9iIGFuZApnbG9iZnJlZS4gSG93ZXZlciwgdGhlbiB0aGUgYnVpbGQgZW52aXJvbm1lbnQgbmVlZHMgdG8gZmlndXJlIG91dCBpZgp0aGVyZSBpcyBhIG5ldyBDUlRMIHN1cHBvcnRpbmcgdGhlc2Ugb3Igbm90LiBUaGlzIGFkZHMgY29tcGxleGl0eS4gRXZlbgptb3JlLCB0aGVzZSBmdW5jdGlvbnMgcmV0dXJuIFZNUyBmaWxlIHNwZWNpZmljYXRpb25zLCB3aGljaCBpcyBub3QKZXhwZWN0ZWQgYnkgdGhlIG90aGVyIG1ha2Ugc291cmNlcy4gVGhlcmUgaXMgYSBzd2l0Y2ggYXQgcnVuIHRpbWUgKGEgVk1TCmxvZ2ljYWwgREVDQyRHTE9CX1VOSVhfU1RZTEUpLCB3aGljaCBjYW4gYmUgc2V0IHRvIGdldCBVbml4IHN0eWxlCm5hbWVzLiBUaGlzIG1heSBjb25mbGljdCB3aXRoIG90aGVyIHNvZnR3YXJlLiBUaGUgcmVjb21tZW5kZWQgc29sdXRpb24KZm9yIHRoaXMgaXMgdG8gc2V0IHRoaXMgc3dpdGNoIGp1c3QgcHJpb3IgdG8gY2FsbGluZyBtYWluOiBpbiBhbgppbml0aWFsaXphdGlvbiByb3V0aW5lLiBUaGlzIGFkZHMgbW9yZSBjb21wbGV4aXR5IGFuZCBtb3JlIFZNUyBzcGVjaWZpYwpjb2RlLiBJdCBpcyBlYXNpZXIgdG8gdGVsbCB0aGUgY29tcGlsZXIgTk9UIHRvIG1hcCB0aGUgcm91dGluZSBuYW1lcwp3aXRoIGEgc2ltcGxlIGNoYW5nZSBpbiBtYWtlZmlsZS52bXMuCgpTb21lIG5vdGVzIG9uIGNhc2Ugc2Vuc2l0aXZlIG5hbWVzIGluIHJ1bGVzIGFuZCBvbiB0aGUgZGlzay4gSW4gdGhlIFZNUwp0ZW1wbGF0ZSBmb3IgQ09ORklHLkggY2FzZSBzZW5zaXRpdmUgcnVsZXMgY2FuIGJlIGVuYWJsZWQgd2l0aCBkZWZpbmluZwpXQU5UX0NBU0VfU0VOU0lUSVZFX1RBUkdFVFMuIEZvciByZWNlbnQgdmVyc2lvbiBvZiBWTVMgdGhlcmUgaXMgYSBjYXNlCnNlbnNpdGl2ZSBmaWxlIHN5c3RlbTogT0RTNS4gVG8gbWFrZSB1c2Ugb2YgdGhhdCwgYWRkaXRpb25hbGx5IHVuLWRlZmluaW5nCnRoZSBIQVZFX0NBU0VfSU5TRU5TSVRJVkVfRlMgaXMgcmVxdWlyZWQuIEFzIHRoZXNlIGFyZSBDIG1hY3JvcywgZGlmZmVyZW50CnZlcnNpb25zIG9mIG1ha2UgbmVlZCB0byBiZSBidWlsdCB0byBoYXZlIGFueSBjYXNlIHNlbnNpdGl2aXR5IGZvciBWTVMKd29ya2luZy4gVW5mb3J0dW5hdGVseSwgZm9yIE9EUzUgZGlza3MgdGhhdCdzIG5vdCBhbGwuCgotIFVzdWFsbHkgRENMIHVwY2FzZXMgY29tbWFuZCBsaW5lIHRva2VucyAoZXhjZXB0IHN0cmluZ3MpIGFuZCB1c3VhbGx5IHRoZQogIGZpbGUgc3lzdGVtIGlzIGNhc2UgYmxpbmQgKHNpbWlsYXIgdG8gaG93IFdpbmRvd3Mgc3lzdGVtcyB3b3JrKQoJJCBzZXQgcHJvYy9wYXJzZT1leHRlbmRlZC9jYXNlPXNlbnNpdGl2ZQogIHByZXNlcnZlcyBsb3dlciBhbmQgVVBQRVIgb24gdGhlIGNvbW1hbmQgbGluZSBhbmQgKGZvciB0aGlzIHByb2Nlc3MgYW5kIGFsbAogIHN1Yi1wcm9jZXNzZXMpIGVuYWJsZXMgY2FzZSBzZW5zaXRpdml0eSBpbiB0aGUgZmlsZSBzeXN0ZW0KCi0gVXN1YWxseSB0aGUgQ1JUTCB0cmllcyB0byByZXZlcnNlIHdoYXQgRENMIGRpZCB3aXRoIGNvbW1hbmQgbGluZSB0b2tlbnMsIGl0CiAgbG93ZXJjYXNlcyBhbGwgdG9rZW5zIChleGNlcHQgc3RyaW5ncykKCSQgZGVmaW5lIERFQ0MkQVJHVl9QQVJTRV9TVFlMRSBlbmFibGUKICBwYXNzZXMgKHRoZSBub3cgcHJlc2VydmVkKSBsb3dlciBhbmQgVVBQRVIgZnJvbSB0aGUgY29tbWFuZCBsaW5lIHRvIG1haW4oKQoKLSBVc3VhbGx5IHRoZSBDUlRMIHVwY2FzZXMgdGhlIGFyZ3VtZW50cyB0byBvcGVuKCkgYW5kIGZyaWVuZHMKCSQgZGVmaW5lIERFQ0MkRUZTX0NBU0VfUFJFU0VSVkUgZW5hYmxlCiAgcHJlc2VydmVzIHRoZSBuYW1lcyBhcyBpcy4KCkl0IGlzIGltcG9ydGFudCB0byBrbm93IHRoYXQgbm90IGFsbCBWTVMgdG9vbHMgYXJlIHJlYWR5IGZvciBjYXNlIHNlbnNpdGl2aXR5LgpXaXRoIHRoaXMgc2V0dXAgc29tZSB0b29scyBtYXkgbm90IHdvcmsgYXMgZXhwZWN0ZWQuIFRoZSBzZXR1cCBzaG91bGQgbm90CmJsaW5kbHkgYmUgYXBwbGllZCBmb3IgYWxsIHVzZXJzIGluIGRlZmF1bHQgbG9naW4gcHJvY2VkdXJlcy4KCkV4YW1wbGU/IFRoZSBwb29yIGNvZGluZyBnaXZlcyBhIGNvbXBpbGVyIG1lc3NhZ2UsIHNob3dpbmcgdGhhdCB0aGVyZSBhcmUKZGlmZmVyZW50IGZpbGVzOgoKJCBkaXIKCkRpcmVjdG9yeSBPRFM1RElTS1tIQl0KCkEuYzsxICAgICAgICAgICAgICAgQi5jOzEgICAgICAgICAgICAgICBjLmM7MSAgICAgICAgICAgICAgIFguYzsxCnguYzsxCgpUb3RhbCBvZiA1IGZpbGVzLgokIG9kczVtYWtlIHgub2JqCmNjICAgIC9vYmo9eC5vYmogeC5jCgpmb28oKXtsb3dlcmNhc2VfeCgpO30KLi4uLi4uXgolQ0MtSS1JTVBMSUNJVEZVTkMsIEluIHRoaXMgc3RhdGVtZW50LCB0aGUgaWRlbnRpZmllciAibG93ZXJjYXNlX3giIGlzIGltcGxpY2l0bHkgZGVjbGFyZWQgYXMgYSBmdW5jdGlvbi4KYXQgbGluZSBudW1iZXIgMSBpbiBmaWxlIE9EUzVESVNLW0hCXXguYzsxCiQgbWMgU1lTJFNZU0RFVklDRTpbSEFSVE1VVC5NQUtFXzNfODBQXW9kczVtYWtlIFgub2JqCmNjICAgIC9vYmo9WC5vYmogWC5jCgpmb28oKSB7VVBQRVJDQVNFX1goKTt9Ci4uLi4uLi5eCiVDQy1JLUlNUExJQ0lURlVOQywgSW4gdGhpcyBzdGF0ZW1lbnQsIHRoZSBpZGVudGlmaWVyICJVUFBFUkNBU0VfWCIgaXMgaW1wbGljaXRseSBkZWNsYXJlZCBhcyBhIGZ1bmN0aW9uLgphdCBsaW5lIG51bWJlciAxIGluIGZpbGUgT0RTNURJU0tbSEJdWC5jOzEKJCBkaXIKCkRpcmVjdG9yeSBPRFM1RElTS1tIQl0KCkEuYzsxICAgICAgICAgICAgICAgQi5jOzEgICAgICAgICAgICAgICBjLmM7MSAgICAgICAgICAgICAgIFguYzsxCnguYzsxICAgICAgICAgICAgICAgWC5vYmo7MSAgICAgICAgICAgICB4Lm9iajsxCgpUb3RhbCBvZiA3IGZpbGVzLgokCgwKVGhpcyBpcyB0aGUgVk1TIHBvcnQgb2YgR05VIE1ha2UgZG9uZSBieSBIYXJ0bXV0LkJlY2tlckBjb21wYXEuY29tLgoKSXQgaXMgYmFzZWQgb24gdGhlIHNwZWNpZmljIHZlcnNpb24gMy43N2sgYW5kIG9uIDMuNzguMS4gMy43N2sgd2FzIGRvbmUKYnkgS2xhdXMgS+RtcGYgPGtrYWVtcGZAcm1pLmRlPiwgdGhlIGNvZGUgd2FzIGJhc2VkIG9uIHRoZSBWTVMgcG9ydCBvZgpHTlUgTWFrZSAzLjYwIGJ5IE1pa2UgTW9yZXR0aS4KCkl0IHdhcyBwb3J0ZWQgb24gT3BlblZNUy9BbHBoYSBWNy4xLCBERUNDIFY1LjctMDA2LiBJdCB3YXMgcmUtYnVpbGQgYW5kCnRlc3RlZCBvbiBPcGVuVk1TL0FscGhhIFY3LjIsIE9wZW5WTVMvVkFYIDcuMSBhbmQgNS41LTIuIERpZmZlcmVudAp2ZXJzaW9ucyBvZiBERUNDIHdlcmUgdXNlZC4gVkFYQyB3YXMgdHJpZWQ6IGl0IGZhaWxzOyBidXQgaXQgZG9lc24ndApzZWVtIHdvcnRoIHRvIGdldCBpdCB3b3JraW5nLiBUaGVyZSBhcmUgc3RpbGwgc29tZSBQVFJNSVNNQVRDSCB3YXJuaW5ncwpkdXJpbmcgdGhlIGNvbXBpbGUuIEFsdGhvdWdoIHBlcmwgaXMgd29ya2luZyBvbiBWTVMgdGhlIHRlc3Qgc2NyaXB0cwpkb24ndCB3b3JrLiBUaGUgZnVuY3Rpb24gJHNoZWxsIGlzIHN0aWxsIG1pc3NpbmcuCgpUaGVyZSBpcyBhIGtub3duIGJ1ZyBpbiBzb21lIG9mIHRoZSBWTVMgQ1JUTHMuIEl0IGlzIGluIHRoZSBzaGlwcGVkCnZlcnNpb25zIG9mIFZNUyBWNy4yIGFuZCBWNy4yLTEgYW5kIGluIHRoZSBjdXJyZW50bHkgKE9jdG9iZXIgMTk5OSkKYXZhaWxhYmxlIEVDT3MgZm9yIFZNUyBWNy4xIGFuZCBuZXdlciB2ZXJzaW9ucy4gSXQgaXMgZml4ZWQgaW4gdmVyc2lvbnMKc2hpcHBlZCB3aXRoIG5ld2VyIFZNUyB2ZXJzaW9ucyBhbmQgYWxsIEVDTyBraXRzIGFmdGVyIE9jdG9iZXIgMTk5OS4gSXQKb25seSBzaG93cyB1cCBkdXJpbmcgdGhlIGRheWxpZ2h0IHNhdmluZyB0aW1lIHBlcmlvZCAoRFNUKTogc3RhdCgpCnJldHVybnMgYSBtb2RpZmljYXRpb24gdGltZSAxIGhvdXIgYWhlYWQuIFRoaXMgcmVzdWx0cyBpbiBHTlUgbWFrZQp3YXJuaW5nIG1lc3NhZ2VzLiBGb3IgYSBqdXN0IGNyZWF0ZWQgc291cmNlIHlvdSB3aWxsIHNlZToKCiAkIGdtYWtlIHguZXhlCiBnbWFrZS5leGU7MTogKioqIFdhcm5pbmc6IEZpbGUgYHguYycgaGFzIG1vZGlmaWNhdGlvbiB0aW1lIGluIHRoZSBmdXR1cmUgKDk0MDU4Mjg2MyA+IDk0MDU3OTI2OSkKIGNjICAgIC9vYmo9eC5vYmogeC5jCiBsaW5rICB4Lm9iaiAgICAvZXhlPXguZXhlCiBnbWFrZS5leGU7MTogKioqIFdhcm5pbmc6ICBDbG9jayBza2V3IGRldGVjdGVkLiAgWW91ciBidWlsZCBtYXkgYmUgaW5jb21wbGV0ZS4KCgpOZXcgaW4gMy43OC4xOgoKRml4IGEgcHJvYmxlbSB3aXRoIGF1dG9tYXRpY2FsbHkgcmVtYWtpbmcgbWFrZWZpbGVzLiBHTlUgbWFrZSB1c2VzIGFuCmV4ZWN2ZSB0byByZXN0YXJ0IGl0c2VsZiBhZnRlciBhIHN1Y2Nlc3NmdWwgcmVtYWtlIG9mIHRoZSBtYWtlZmlsZS4gT24KVU5JWCBzeXN0ZW1zIGV4ZWN2ZSByZXBsYWNlcyB0aGUgcnVubmluZyBwcm9ncmFtIHdpdGggYSBuZXcgb25lIGFuZApyZXNldHMgYWxsIHNpZ25hbCBoYW5kbGluZyB0byB0aGUgZGVmYXVsdC4gT24gVk1TIGV4ZWN2ZSBjcmVhdGVzIGEgY2hpbGQKcHJvY2Vzcywgc2lnbmFsIGFuZCBleGl0IGhhbmRsZXJzIG9mIHRoZSBwYXJlbnQgYXJlIHN0aWxsIGFjdGl2ZSwgYW5kLAp1bmZvcnR1bmF0ZWx5LCBjb3JydXB0IHRoZSBleGl0IGNvZGUgZnJvbSB0aGUgY2hpbGQuIEZpeCBpbiBqb2IuYzoKaWdub3JlIFNJR0NITEQuCgpBZGRlZCBzb21lIHN3aXRjaGVzIHRvIHJlZmxlY3QgbGF0ZXN0IGZlYXR1cmVzIG9mIERFQ0MuIE1vZGlmaWNhdGlvbnMgaW4KbWFrZWZpbGUudm1zLgoKU2V0IHNvbWUgZGVmaW5pdGlvbnMgdG8gcmVmbGVjdCBsYXRlc3QgZmVhdHVyZXMgb2YgREVDQy4gTW9kaWZpY2F0aW9ucyBpbgpjb25maWcuaC12bXMgKHdoaWNoIGlzIGNvcGllZCB0byBjb25maWcuaCkuCgpBZGRlZCBleHRlcm4gc3RyY21waSBkZWNsYXJhdGlvbiB0byBhdm9pZCAnaW1wbGljaXRseSBkZWNsYXJlZCcgbWVzc2FnZXMuCk1vZGlmaWNhdGlvbiBpbiBtYWtlLmguCgpEZWZhdWx0IHJ1bGUgZm9yIEMrKywgY29uZGl0aW9uYWxzIGZvciBnY2MgKEdDQ19JU19OQVRJVkUpIG9yIERFQy9EaWdpdGFsLwpDb21wYXEgYy9jKysgY29tcGlsZXJzLiBNb2RpZmljYXRpb25zIGluIGRlZmF1bHQuYy4KClVzYWdlIG9mIG9wZW5kaXIoKSBhbmQgZnJpZW5kcywgc3VwcHJlc3MgZmlsZSB2ZXJzaW9uLiBNb2RpZmljYXRpb25zIGluIGRpci5jLgoKQWRkZWQgVk1TIHNwZWNpZmljIGNvZGUgdG8gaGFuZGxlIGN0cmwrYyBhbmQgY3RybCt5IHRvIGFib3J0IG1ha2UuCk1vZGlmaWNhdGlvbnMgaW4gam9iLmMuCgpBZGRlZCBzdXBwb3J0IHRvIGhhdmUgY2FzZSBzZW5zaXRpdmUgdGFyZ2V0cyBhbmQgZGVwZW5kZW5jaWVzIGJ1dCB0bwpzdGlsbCB1c2UgY2FzZSBibGluZCBmaWxlIG5hbWVzLiBUaGlzIGlzIGVzcGVjaWFsbHkgdXNlZnVsIGZvciBKYXZhCm1ha2VmaWxlcyBvbiBWTVM6CgoJLlNVRkZJWEVTIDoKCS5TVUZGSVhFUyA6CS5jbGFzcyAuamF2YQoJLmphdmEuY2xhc3MgOgoJCWphdmFjICIkPAoJSGVsbG9Xb3JsZC5jbGFzcyA6ICAgICAgSGVsbG9Xb3JsZC5qYXZhCgpBIG5ldyBtYWNybyBXQU5UX0NBU0VfU0VOU0lUSVZFX1RBUkdFVFMgaW4gY29uZmlnLmgtdm1zIHdhcyBpbnRyb2R1Y2VkLgpJdCBuZWVkcyB0byBiZSBlbmFibGVkIHRvIGdldCB0aGlzIGZlYXR1cmU7IGRlZmF1bHQgaXMgZGlzYWJsZWQuICBUaGUKbWFjcm8gSEFWRV9DQVNFX0lOU0VOU0lUSVZFX0ZTIG11c3Qgbm90IGJlIHRvdWNoZWQ6IGl0IGlzIHN0aWxsIGVuYWJsZWQuCk1vZGlmaWNhdGlvbnMgaW4gZmlsZS5jIGFuZCBjb25maWcuaC12bXMuCgpCb290c3RyYXAgbWFrZSB0byBzdGFydCBidWlsZGluZyBtYWtlIGlzIHN0aWxsIG1ha2VmaWxlLmNvbSwgYnV0IG1ha2UKbmVlZHMgdG8gYmUgcmUtbWFkZSB3aXRoIGEgbWFrZSB0byBtYWtlIGEgY29ycmVjdCB2ZXJzaW9uOiBpZ25vcmUgYWxsCnBvc3NpYmxlIHdhcm5pbmdzLCBkZWxldGUgYWxsIG9iamVjdHMsIHJlbmFtZSBtYWtlLmV4ZSB0byBhIGRpZmZlcmVudApuYW1lIGFuZCBydW4gaXQuCgpNYWRlIHNvbWUgbWlub3IgbW9kaWZpY2F0aW9ucyB0byB0aGUgYm9vdHN0cmFwIGJ1aWxkIG1ha2VmaWxlLmNvbS4KDApUaGlzIGlzIHRoZSBWTVMgcG9ydCBvZiBHTlUgTWFrZS4KCkl0IGlzIGJhc2VkIG9uIHRoZSBWTVMgcG9ydCBvZiBHTlUgTWFrZSAzLjYwIGJ5IE1pa2UgTW9yZXR0aS4KClRoaXMgcG9ydCB3YXMgZG9uZSBieSBLbGF1cyBL5G1wZiA8a2thZW1wZkBybWkuZGU+CgpUaGVyZSBpcyBmaXJzdC1sZXZlbCBzdXBwb3J0IGF2YWlsYWJsZSBmcm9tIHByb0dJUyBTb2Z0d2FyZSwgR2VybWFueS4KVmlzaXQgdGhlaXIgd2ViLXNpdGUgYXQgaHR0cDovL3d3dy5wcm9naXMuZGUgdG8gZ2V0IGluZm9ybWF0aW9uCmFib3V0IG90aGVyIHZtcyBzb2Z0d2FyZSBhbmQgZm9ydGhjb21pbmcgdXBkYXRlcyB0byBnbnUgbWFrZS4KCk5ldyBmb3IgMy43NzoKCi9iaW4vc2ggc3R5bGUgSS9PIHJlZGlyZWN0aW9uIGlzIHN1cHBvcnRlZC4gWW91IGNhbiBub3cgd3JpdGUgbGluZXMgbGlrZQoJbWNyIHN5cyRkaXNrOltdcHJvZ3JhbS5leGUgPCBpbnB1dC50eHQgPiBvdXRwdXQudHh0ICY+IGVycm9yLnR4dAoKTWFrZWZpbGUgdmFyaWFibGVzIGFyZSBsb29rZWQgdXAgaW4gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQuIFlvdSBjYW4gc2V0CnN5bWJvbHMgb3IgbG9naWNhbHMgaW4gRENMIGFuZCBldmFsdWF0ZSB0aGVtIGluIHRoZSBNYWtlZmlsZSB2aWEKJCg8bmFtZS1vZi1zeW1ib2wtb3ItbG9naWNhbD4pLiAgVmFyaWFibGVzIGRlZmluZWQgaW4gdGhlIE1ha2VmaWxlCm92ZXJyaWRlIFZNUyBzeW1ib2xzL2xvZ2ljYWxzICEKCkZ1bmN0aW9ucyBmb3IgZmlsZSBuYW1lcyBhcmUgd29ya2luZyBub3cuIFNlZSB0aGUgR05VIE1ha2UgbWFudWFsIGZvcgokKGRpciAuLi4pICBhbmQgJCh3aWxkY2FyZCAuLi4pLiAgVW5peC1zdHlsZSBhbmQgVk1TLXN0eWxlIG5hbWVzIGFyZQpzdXBwb3J0ZWQgYXMgYXJndW1lbnRzLgoKVGhlIGRlZmF1bHQgcnVsZXMgYXJlIHNldCB1cCBmb3IgR05VIEMuIEJ1aWxkaW5nIGFuIGV4ZWN1dGFibGUgZnJvbSBhCnNpbmdsZSBzb3VyY2UgZmlsZSBpcyBhcyBlYXN5IGFzICdtYWtlIGZpbGUuZXhlJy4KClRoZSB2YXJpYWJsZSAkKEFSQ0gpIGlzIHByZWRlZmluZWQgYXMgQUxQSEEgb3IgVkFYIHJlc3AuIE1ha2VmaWxlcyBmb3IKZGlmZmVyZW50IFZNUyBzeXN0ZW1zIGNhbiBub3cgYmUgd3JpdHRlbiBieSBjaGVja2luZyAkKEFSQ0gpIGFzIGluCiAgaWZlcSAoJChBUkNIKSxBTFBIQSkKICAgICQoRUNITykgIk9uIHRoZSBBbHBoYSIKICBlbHNlCiAgICAkKEVDSE8pICJPbiB0aGUgVkFYIgogIGVuZGlmCgpDb21tYW5kIGxpbmVzIG9mIGV4Y2Vzc2l2ZSBsZW5ndGggYXJlIGNvcnJlY3RseSBicm9rZW4gYW5kIHdyaXR0ZW4gdG8gYQpiYXRjaCBmaWxlIGluIHN5cyRzY3JhdGNoIGZvciBsYXRlciBleGVjdXRpb24uIFRoZXJlJ3Mgbm8gbGltaXQgdG8gdGhlCmxlbmd0aHMgb2YgY29tbWFuZHMgKGFuZCBubyBuZWVkIGZvciAub3B0IGZpbGVzIDotKSBhbnkgbW9yZS4KCkVtcHR5IGNvbW1hbmRzIGFyZSBoYW5kbGVkIGNvcnJlY3RseSBhbmQgZG9uJ3QgZW5kIGluIGEgbmV3IERDTCBwcm9jZXNzLgoKCk5ldyBmb3IgMy43NjoKCkpvaG4gVy4gRWF0b24gaGFzIHVwZGF0ZWQgdGhlIFZNUyBwb3J0IHRvIHN1cHBvcnQgbGlicmFyaWVzIGFuZCBWUEFUSC4KCgpUbyBidWlsZCBNYWtlLCBzaW1wbHkgdHlwZSBAbWFrZWZpbGUuICBUaGlzIHNob3VsZCBjb21waWxlIGFsbCB0aGUKbmVjZXNzYXJ5IGZpbGVzIGFuZCBsaW5rIE1ha2UuICBUaGVyZSBpcyBhbHNvIGEgZmlsZSBjYWxsZWQKbWFrZWZpbGUudm1zLiAgSWYgeW91IGFscmVhZHkgaGF2ZSBHTlUgTWFrZSBidWlsdCB5b3UgY2FuIGp1c3QgdXNlCk1ha2Ugd2l0aCB0aGlzIG1ha2VmaWxlIHRvIHJlYnVpbGQuCgpIZXJlIGFyZSBzb21lIG5vdGVzIGFib3V0IEdOVSBNYWtlIGZvciBWTVM6CgpUaGUgY2QgY29tbWFuZCBpcyBzdXBwb3J0ZWQgaWYgaXQncyBjYWxsZWQgYXMgJChDRCkuIFRoaXMgaW52b2tlcwp0aGUgJ2J1aWx0aW5fY2QnIGNvbW1hbmQgd2hpY2ggY2hhbmdlcyB0aGUgZGlyZWN0b3J5LgpDYWxsaW5nICdzZXQgZGVmJyBkb2Vzbid0IGRvIHRoZSB0cmljaywgc2luY2UgYSBzdWItc2hlbGwgaXMKc3Bhd25lZCBmb3IgdGhpcyBjb21tYW5kLCB0aGUgZGlyZWN0b3J5IGlzIGNoYW5nZWQgKmluIHRoaXMgc3ViLXNoZWxsKgphbmQgdGhlIHN1Yi1zaGVsbCBlbmRzLgoKTGlicmFyaWVzIGFyZSBub3Qgc3VwcG9ydGVkLiBUaGV5IHdlcmUgaW4gR05VIE1ha2UgMy42MCBidXQgc29tZWhvdyBJCmRpZG4ndCBjYXJlIHBvcnRpbmcgdGhlIGNvZGUuIElmIHRoZXJlIGlzIGVub3VnaCBpbnRlcmVzdCwgSSdsbCBkbyBpdCBhdApzb21lIGxhdGVyIHRpbWUuCgpUaGUgdmFyaWFibGUgJF4gc2VwYXJhdGVzIGZpbGVzIHdpdGggY29tbWFzIGluc3RlYWQgb2Ygc3BhY2VzIChJdCdzIHRoZQpuYXR1cmFsIHRoaW5nIHRvIGRvIGZvciBWTVMpLgoKU2VlIGRlZmF1bHRzLmMgZm9yIFZNUyBkZWZhdWx0IHN1ZmZpeGVzIGFuZCBteSBkZWZpbml0aW9ucyBmb3IgZGVmYXVsdApydWxlcyBhbmQgdmFyaWFibGVzLgoKVGhlIHNoZWxsIGZ1bmN0aW9uIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXQuCgpMb2FkIGF2ZXJhZ2Ugcm91dGluZXMgaGF2ZW4ndCBiZWVuIGltcGxlbWVudGVkIGZvciBWTVMgeWV0LgoKVGhlIGRlZmF1bHQgaW5jbHVkZSBkaXJlY3RvcnkgZm9yIGluY2x1ZGluZyBvdGhlciBtYWtlZmlsZXMgaXMKU1lTJFNZU1JPT1Q6W1NZU0xJQl0gKEkgZG9uJ3QgcmVtZW1iZXIgd2h5IEkgZGlkbid0IGp1c3QgdXNlClNZUyRMSUJSQVJZOiBpbnN0ZWFkOyBtYXliZSBpdCB3b3VsZG4ndCB3b3JrIHRoYXQgd2F5KS4KClRoZSBkZWZhdWx0IG1ha2VmaWxlcyBtYWtlIGxvb2tzIGZvciBhcmU6IG1ha2VmaWxlLnZtcywgZ251bWFrZWZpbGUsCm1ha2VmaWxlLiwgYW5kIGdudW1ha2VmaWxlLiAuCgpUaGUgc3RhdCgpIGZ1bmN0aW9uIGFuZCBoYW5kbGluZyBvZiB0aW1lIHN0YW1wcyBpbiBWTVMgaXMgYnJva2VuLCBzbyBJCnJlcGxhY2VkIGl0IHdpdGggYSBoYWNrIGluIHZtc2Z1bmN0aW9ucy5jLiBJIHdpbGwgcHJvdmlkZSBhIGZ1bGwgcmV3cml0ZQpzb21ld2hlcmUgaW4gdGhlIGZ1dHVyZS4gQmUgd2FybmVkLCB0aGUgdGltZSByZXNvbHV0aW9uIGluc2lkZSBtYWtlIGlzCmxlc3MgdGhhbiB3aGF0IHZtcyBwcm92aWRlcy4gVGhpcyBtaWdodCBiZSBhIHByb2JsZW0gb24gdGhlIGZhc3RlciBBbHBoYXMuCgpZb3UgY2FuIHVzZSBhIDogaW4gYSBmaWxlbmFtZSBvbmx5IGlmIHlvdSBwcmVjZWVkIGl0IHdpdGggYSBiYWNrc2xhc2ggKCdcJykuCkUuZy4tIGhvYmJlc1w6W2JvZ2FzLmZpbGVzXQoKTWFrZSBpZ25vcmVzIHN1Y2Nlc3MsIGluZm9ybWF0aW9uYWwsIG9yIHdhcm5pbmcgZXJyb3JzICgtUy0sIC1JLSwgb3IKLVctKS4gIEJ1dCBpdCB3aWxsIHN0b3Agb24gLUUtIGFuZCAtRi0gZXJyb3JzLiAodW5sZXNzIHlvdSBkbyBzb21ldGhpbmcKdG8gb3ZlcnJpZGUgdGhpcyBpbiB5b3VyIG1ha2VmaWxlLCBvciB3aGF0ZXZlcikuCgpSZW1vdGUgc3R1ZmYgaXNuJ3QgaW1wbGVtZW50ZWQgeWV0LgoKTXVsdGlwbGUgbGluZSBEQ0wgY29tbWFuZHMsIHN1Y2ggYXMgImlmIiBzdGF0ZW1lbnRzLCBtdXN0IGJlIHB1dCBpbnNpZGUKY29tbWFuZCBmaWxlcy4gIFlvdSBjYW4gcnVuIGEgY29tbWFuZCBmaWxlIGJ5IHVzaW5nIFxALgoKClZNUyBjaGFuZ2VzIG1hZGUgZm9yIDMuNzQuMwoKTG90cyBvZiBkZWZhdWx0IHNldHRpbmdzIGFyZSBhZGFwdGVkIGZvciBWTVMuIFNlZSBkZWZhdWx0LmMuCgpMb25nIGNvbW1hbmQgbGluZXMgYXJlIG5vdyBjb252ZXJ0ZWQgdG8gY29tbWFuZCBmaWxlcy4KCkNvbW1hICgnLCcpIGFzIGEgc2VwYXJhdG9yIGlzIG5vdyBhbGxvd2VkLiBTZWUgbWFrZWZpbGUudm1zIGZvciBhbiBleGFtcGxlLgoKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpDb3B5cmlnaHQgKEMpIDE5OTYsIDE5OTcsIDE5OTgsIDE5OTksIDIwMDAsIDIwMDEsIDIwMDIsIDIwMDMsIDIwMDQsIDIwMDUsCjIwMDYsIDIwMDcsIDIwMDgsIDIwMDksIDIwMTAgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuClRoaXMgZmlsZSBpcyBwYXJ0IG9mIEdOVSBNYWtlLgoKR05VIE1ha2UgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeSBpdCB1bmRlciB0aGUKdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZQpGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAzIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlcgp2ZXJzaW9uLgoKR05VIE1ha2UgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQgQU5ZCldBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SCkEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgoKWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAp0aGlzIHByb2dyYW0uICBJZiBub3QsIHNlZSA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uCg==