ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8gICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfCAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGlzdG9yeSBvZiBDaGFuZ2VzCgoKVmVyc2lvbiA3LjkuNQoKRGFuaWVsICg3IE1hcmNoIDIwMDIpCi0gQWRkZWQgZG9jcy9LTk9XTl9CVUdTIHRvIHRoZSByZWxlYXNlIGFyY2hpdmUuCgpEYW5pZWwgKDYgTWFyY2ggMjAwMikKLSBLZXZpbiBSb3RoIGNvcnJlY3RlZCBhIGZsYXcgaW4gdGhlIGN1cmwgY2xpZW50IGdsb2JiaW5nIGNvZGUgdGhhdCBtYWRlIGl0CiAgbWVzcyB1cCBiYWNrc2xhc2hlcy4gVGhpcyB3YXMgbW9zdCBub3RhYmxlIG9uIHdpbmRvd3MgKGN5Z3dpbikgbWFjaGluZXMgd2hlbgogIHVzaW5nIGZpbGU6Ly8uCgotIEJyYWQgcHJvdmlkZWQgYW5vdGhlciBmaXggZm9yIGJ1aWxkaW5nIG91dHNpZGUgdGhlIHNvdXJjZS10cmVlLgoKLSBSYWxwaCBNaXRjaGVsbCBwYXRjaGVkIGF3YXkgYSBmZXcgY29tcGlsZXIgd2FybmluZ3MgaW4gdGVzdHMvc2VydmVyL3N3cy5jCgpEYW5pZWwgKDUgTWFyY2ggMjAwMikKLSBJIG5vdGljZWQgdGhhdCB0aGUgdHlwZWRlZiBpbiBjdXJsLmggZm9yIHRoZSBwcm9ncmVzcyBjYWxsYmFjayBwcm90b3R5cGUgd2FzCiAgd3JvbmcgYW5kIHRodXMgYXBwbGljYXRpb25zIHRoYXQgdXNlZCBpdCB3b3VsZCBub3QgZ2V0IHRoZSBwcm9wZXIgaW5wdXQKICBkYXRhLiBJdCB1c2VkIHNpemVfdCB3aGVyZSB0aGUgaW1wbGVtZW50YXRpb24gYWN0dWFsbHkgdXNlcyBkb3VibGVzIQoKICBJIHdpc2ggSSBjb3VsZCBibGFtZSBzb21lb25lIGVsc2UsIGJ1dCB0aGlzIHdhcyBteSBmYXVsdC4gQWdhaW4uCgpWZXJzaW9uIDcuOS41LXByZTYKCkRhbmllbCAoNCBNYXJjaCAyMDAyKQotIEN1dCBvZmYgdGhlIGNoYW5nZXMgZG9uZSBkdXJpbmcgMjAwMSBmcm9tIHRoaXMgY2hhbmdlbG9nIGZpbGUgYW5kIHB1dCB0aGVtCiAgaW4gYSBzZXBhcmF0ZSBmaWxlIChDSEFOR0VTLjIwMDEpLCBhdmFpbGFibGUgZnJvbSBDVlMgb2YgY291cnNlLgoKLSBJIHJlbW92ZWQgdGhlIG11bHRpIGRpcmVjdG9yeS4gVGhlIGV4YW1wbGUgc291cmNlcyB3ZXJlIG1vdmVkIHRvIHRoZQogIGRvY3MvZXhhbXBsZXMgZGlyZWN0b3J5IHdoZXJlIHRoZXkgYmVsb25nLgoKLSBXcm90ZSA3IG5ldyBtYW4gcGFnZXMgZm9yIHRoZSBjdXJyZW50IGZ1bmN0aW9ucyBpbiB0aGUgbmV3IG11bHRpIGludGVyZmFjZS4KICBUaGV5J3JlIGFsbCBzdGlsbCBwcmV0dHkgYmFzaWMsIGJ1dCB3ZSBjYW4gdXNlIHRoZW0gYXMgYSBzdGFydCBhbmQgYWRkIG1vcmUKICBjb250ZW50cyB0byB0aGVtIHdoZW4gd2UgZmlndXJlIG91dCB3aGF0IHRvIHdyaXRlLiBUaGUgbGFyZ2UgYW1vdW50IG9mIG1hbgogIHBhZ2VzIGZvciBsaWJjdXJsIG5vdyBwcmVzZW50IG1hZGUgbWUgZGVjaWRlIHRvIHB1dCB0aGVtIGluIGEgbmV3IHNlcGFyYXRlCiAgc3ViZGlyZWN0b3J5IGluIHRoZSBkb2NzIGRpcmVjdG9yeS4gTmFtZWQgbGliY3VybC4KCi0gR2l1c2VwcGUgQ29yYmVsbGkgcHJvdmlkZWQgYSB0ZW1wbGF0ZSBmaWxlIGZvciB0aGUgRVBNIHBhY2thZ2UgbWFuYWdlciwgaXQKICBnZXRzIGdlbmVyYXRlZCBuaWNlbHkgYnkgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgbm93LgoKVmVyc2lvbiA3LjkuNS1wcmU1CgpEYW5pZWwgKDEgTWFyY2ggMjAwMikKLSBNb3ZlZCB0aGUgbWVtYW5hbHl6ZS5wbCBzY3JpcHQgaW50byB0aGUgdGVzdHMvIGRpciBhbmQgYWRkZWQgaXQgdG8gdGhlCiAgcmVsZWFzZSBhcmNoaXZlcy4gSXQgd2FzIHByZXZpb3VzbHkgb25seSBwcmVzZW50IGluIHRoZSBDVlMgdHJlZS4KCi0gTW9kaWZpZWQgdGhlIEZlYnJ1YXJ5IDE3dGggSG9zdDogZml4LCBhcyBidWcgcmVwb3J0ICM1MjM3MTggcG9pbnRlZCBvdXQgdGhhdAogIGl0IGNhdXNlZCBjcmFzaGVzIQoKLSBOaWNvIEJhZ2d1cyBhZGRlZCBtb3JlIGVycm9yIGNvZGVzIHRvIHRoZSBWTVMgc3R1ZmYuCgotIFdlc2xleSBMYXh0b24gYnJvdWdodCB0aGUgY29kZSB0aGF0IGludHJvZHVjZWQgdGhlIG5ldyBDVVJMT1BUX1BSRVFVT1RFCiAgb3B0aW9uLiBJdCBpcyBqdXN0IGFub3RoZXIgRlRQIHF1b3RlIG9wdGlvbiB0aGF0IGFsbG93cyB0aGUgdXNlciB0byBzcGVjaWZ5CiAgYSBsaXN0IG9mIEZUUCBjb21tYW5kcyB0byBpc3N1ZSAqanVzdCBiZWZvcmUqIHRoZSB0cmFuc2ZlciBjb21tYW5kIChSRVRSIG9yCiAgU1RPUiBldGMpLiBJdCBoYXMgdHVybmVkIHVwIGEgZmV3IHN5c3RlbXMgdGhhdCByZWFsbHkgbmVlZCB0aGlzLgoKICBUaGUgY3VybCBjb21tYW5kIGxpbmUgdG9vbCBjYW4gYWxzbyB0YWtlIGFkdmFudGFnZSBvZiB0aGlzIGJ5IHByZWZpeGluZyB0aGUKICBxdW90ZSBjb21tYW5kcyB3aXRoIGEgcGx1cyAoKykgaW4gc2ltaWxhciBzdHlsZSB0aGF0IHBvc3QgdHJhbnNmZXIgcXVvdGUKICBjb21tYW5kcyBhcmUgc3BlY2lmaWVkLgoKICBUaGlzIGlzIG5vdCB5ZXQgZG9jdW1lbnRlZC4gVGhlcmUgaXMgbm8gdGVzdCBjYXNlIGZvciB0aGlzIHlldC4KCkRhbmllbCAoMjggRmVicnVhcnkgMjAwMikKLSBSYWxwaCBNaXRjaGVsbCBtYWRlIHNvbWUgc2VyaW91cyBlZmZvcnRzIGFuZCBwdXQgYSBsb3Qgb2Ygc3dlYXQgaW4gc2V0dGluZwogIHVwIHNjcmlwdHMgYW5kIHRoaW5ncyBmb3IgbWUgdG8gYmUgYWJsZSB0byByZXBlYXQgaGlzIHByb2JsZW1zLCBhbmQgSQogIGZpbmFsbHkgY291bGQuICBJIGZvdW5kIGEgcHJvYmxlbSB3aXRoIHRoZSBoZWFkZXIgYnl0ZSBjb3VudGVyIHRoYXQgd2Fzbid0CiAgaW5jcmVhc2VkIHByb3Blcmx5IGFuZCB0aHVzIHdlIGNvdWxkIHJldHVybiBDVVJMRV9HT1RfTk9USElORyB3aGVuIHdlIGluCiAgZmFjdCBoYWQgcmVjZWl2ZWQgZGF0YS4KCkRhbmllbCAoMjcgRmVicnVhcnkgMjAwMikKLSBJIGhhZCB0byByZXZlcnQgdGhlIG5vbi1zcGFjZSBwYXJzaW5nIGNvb2tpZSBmaXggSSBwb3N0ZWQgdG8gdGhlIG1haWxpbmcKICBsaXN0LiBFeHBpcmUgZGF0ZXMgZG8gaGF2ZSBzcGFjZXMgYW5kIHN0aWxsIG5lZWQgdG8gZ2V0IHBhcnNlZCBwcm9wZXJseSEKICBJbnN0ZWFkIHdlIGp1c3QgaWdub3JlIHRyYWlsaW5nIHdoaXRlIHNwYWNlIGFuZCBpdCBzZWVtcyB0byB3b3JrLi4uCgpEYW5pZWwgKDI2IEZlYnJ1YXJ5IDIwMDIpCi0gTWFkZSB0aGUgY29va2llIHByb3BlcnR5ICdNYXgtQWdlJyB3b3JrLCBqdXN0IHNpbmNlIHdlIGFscmVhZHkgdHJpZWQgdG8KICBzdXBwb3J0IGl0LCBpdCBpcyBiZXR0ZXIgdG8gZG8gaXQgcmlnaHQuIE5vIG9uZSB1c2VzIHRoaXMgYW55d2F5LgoKLSBUaGUgY29va2llIHBhcnNlciBjb3VsZCBjcmFzaCBpZiBhIHJlYWxseSB3ZWlyZCAoaWxsZWdhbCkgY29va2llIGxpbmUgd2FzCiAgcmVjZWl2ZWQuIEkgYWxzbyBtYWRlIGl0IGJldHRlciBkaXNjYXJkIHJlYWxseSBvZGRseSBmb3JtYXR0ZWQgbGluZXMgYmV0dGVyLgoKICBNYWRlIHRoZSBjb29raWUgamFyIHN0b3JlIHRoZSBzZWNvbmQgZmllbGQgZnJvbSB0aGUgbGVmdCB1c2luZyB0aGUgc3ludGF4CiAgdGhhdCBOZXRzY2FwZSBhbmQgTW96aWxsYSBwcm9iYWJseSBsaWtlLiBDdXJsIGl0c2VsZiBpZ25vcmVzIGl0LgoKICBBZGRlZCB0ZXN0IGNhc2UgMzEgZm9yIHRoZXNlIGNhc2VzLgoKICBDbGF5IExvdmVsZXNzJyBlbWFpbCByZWdhcmRpbmcgc29tZSBjb29raWUgaXNzdWVzIHN0YXJ0ZWQgbXkgY2xlYW51cC4KCi0gS2V2aW4gUm90aCBwb2ludGVkIG91dCB0aGF0IG15IGF1dG9tYWtlIGZpZGRsZXMgYnJva2UgdGhlIGFiaWxpdHkgdG8gYnVpbGQKICBvdXRzaWRlIHRoZSBzb3VyY2UtdHJlZSBhbmQgSSBwb3N0ZWQgYSBwYXRjaCB0byB0aGUgbWFpbGluZyBsaXN0IHRoYXQgYnJpbmdzCiAgdGhpcyBhYmlsaXR5IGJhY2suCgpWZXJzaW9uIDcuOS41LXByZTQKCkRhbmllbCAoMjUgRmVicnVhcnkgMjAwMikKLSBGaWRkbGVkIHdpdGggdGhlIGF1dG9tYWtlIGZpbGVzIHRvIG1ha2UgYWxsIHNvdXJjZSBmaWxlcyBpbiB0aGUgbGliCiAgZGlyZWN0b3J5IG5vdCBoYXZlIC4uL3NyYyBpbiB0aGUgaW5jbHVkZSBwYXRoLCBhbmQgdGhlIHNyYyBzb3VyY2VzIHNob3VsZG4ndAogIGhhdmUgLi4vbGliIQoKLSBBbGwgNzkgdGVzdCBjYXNlcyByYW4gT0sgdW5kZXIgTGludXggYW5kIFNvbGFyaXMgdXNpbmcgdGhlIG5ldyBIVFRQIHNlcnZlcgogIGluIHRoZSB0ZXN0IHN1aXRlLiBUaGUgbmV3IEhUVFAgc2VydmVyIHdhcyBmaXJzdCBkb25hdGVkIGJ5IEdlb3JnIEhvcm4gYW5kCiAgc3Vic2VxdWVudGx5IG1vZGlmaWVkIHRvIHdvcmsgd2l0aCB0aGUgdGVzdCBzdWl0ZS4gSXQgaXMgY3VycmVudGx5IHN0aWxsIG5vdAogIHBvcnRhYmxlIGVub3VnaCB0byBydW4gb24gImFsbCBvdmVyIiBidXQgdGhpcyBpcyBhIHN0YXJ0IGFuZCBJIGNhbiBydW4gYWxsCiAgY3VybCB0ZXN0cyBvbiBteSBtYWNoaW5lcy4gVGhpcyBpcyBhbiBpbXBvcnRhbnQgcmVxdWlyZW1lbnQgZm9yIHRoZSB1cGNvbWluZwogIHB1YmxpYyByZWxlYXNlLgoKLSBVc2luZyAtZCBhbmQgLUkgb24gdGhlIHNhbWUgY29tbWFuZCBsaW5lIG5vdyByZXBvcnRzIGFuIGVycm9yLCBhcyBpdCBpbXBsaWVzCiAgdHdvIGRpZmZlcmVudCBIVFRQIHJlcXVlc3RzIHRoYXQgY2FuJ3QgYmUgbWl4ZWQuCgotIEplZmZyZXkgUG9obG1leWVyIHByb3ZpZGVkIGEgcGF0Y2ggdGhhdCBtYWRlIHRoZSAtdy8tLXdyaXRlLW91dCBvcHRpb24KICBzdXBwb3J0ICV7Y29udGVudF90eXBlfSB0byBnZXQgdGhlIGNvbnRlbnQgdHlwZSBvZiB0aGUgcmVjZW50IGRvd25sb2FkLgoKLSBLZXZpbiBSb3RoIHJlcG9ydGVkIHRoYXQgcHJlMiBhbmQgcHJlMyBkaWRuJ3QgY29tcGlsZSBwcm9wZXJseSBvbiBjeWd3aW4sCiAgYW5kIHRoaXMgd2FzIGJlY2F1c2UgSSB1c2VkICNpZmRlZiBIQVZFX1dJTlNPQ0tfSCBpbiBsaWIvbXVsdGkuaCB0byBmaWd1cmUKICBvdXQgaWYgd2UgY291bGQgaW5jbHVkZSB3aW5zb2NrLmggd2hpY2ggdHVybnMgb3V0IG5vdCB0byBiZSBhIHdpc2UgY2hvaWNlIHRvCiAgZG8gb24gY3lnd2luIHNpbmNlIGl0IGhhcyB0aGUgZmlsZSBidXQgY2FuJ3QgaW5jbHVkZSBpdCEKCkRhbmllbCAoMjIgRmVicnVhcnkgMjAwMikKLSBBZGRlZCBzcmMvY29uZmlnLXZtcy5oIHRvIHRoZSByZWxlYXNlIGFyY2hpdmUuCgotIEZpeGVkIHRoZSBjb25uZWN0aW9uIHRpbWVvdXQgdmFsdWUgYWdhaW4sIHRoZSBjaGFuZ2UgZnJvbSBGZWJydWFyeSAxOCB3YXNuJ3QKICBjb21wbGV0ZS4KClZlcnNpb24gNy45LjUtcHJlMwoKRGFuaWVsICgyMSBGZWJydWFyeSAyMDAyKQotIEtldmluIFJvdGggYW5kIEFuZHLpcyBHYXJj7WEgYm90aCBmb3VuZCBvdXQgdGhhdCBsaWIvY29uZmlnLmguaW4gd2FzIG1pc3NpbmcKICBpbiB0aGUgcHJlLXJlbGVhc2UgYXJjaGl2ZSBhbmQgdGh1cyB0aGUgY29uZmlndXJlIHNjcmlwdCBmYWlsZWQuCgpWZXJzaW9uIDcuOS41LXByZTIKCkRhbmllbCAoMjAgRmVicnVhcnkgMjAwMikKLSBBbmRy6XMgR2FyY+1hIHByb3ZpZGVkIGEgc29sdXRpb24gdG8gYnVnIHJlcG9ydCAjNTE1MjI4LiB0aGUgdG90YWwgdGltZQogIGNvdW50ZXIgd2FzIG5vdCBzZXQgY29ycmVjdGx5IHdoZW4gLUkgd2FzIHVzZWQgZHVyaW5nIHNvbWUgY29uZGl0aW9ucyAoYWxsCiAgaGVhZGVycyB3ZXJlIHJlYWQgaW4gb25lIHNpbmdsZSByZWFkKS4KCi0gTmljbyBCYWdndXMgcHJvdmlkZWQgYSBodWdlIHBhdGNoIHdpdGggbWlub3IgdHdlYWtzIGFsbCBvdmVyIHRvIG1ha2UgY3VybAogIGNvbXBpbGUgbmljZWx5IG9uIFZNUy4KCkRhbmllbCAoMTkgRmVicnVhcnkgMjAwMikKLSBSaWNrIFJpY2hhcmRzb24gZm91bmQgb3V0IHRoYXQgYnkgcmVwbGFjaW5nIFBGX1VOU1BFQyB3aXRoIFBGX0lORVQgaW4gdGhlCiAgZ2V0YWRkcmluZm8oKSBjYWxscywgaGUgY291bGQgc3BlZWQgdXAgc29tZSBuYW1lIHJlc29sdmluZyBjYWxscyB3aXRoIGFuCiAgb3JkZXIgb2YgbWFnbml0dWRlcyBvbiBoaXMgUmVkaGF0IExpbnV4IDcuMi4KCi0gUGhpbGlwIEdsYWRzdG9uZSBmb3VuZCBhIHNlY29uZCBJTkFERFJfTk9ORSBwcm9ibGVtIHdoZXJlIHdlIHVzZWQgbG9uZwogIGludGVhZCBvZiBpbl9hZGRyX3Qgd2hpY2ggY2F1c2VkIDY0Yml0IHByb2JsZW1vcy4gV2UgcmVhbGx5IHNob3VsZG4ndCBkZWZpbmUKICB0aGF0IG9uIHR3byBkaWZmZXJlbnQgcGxhY2VzLgoKRGFuaWVsICgxOCBGZWJydWFyeSAyMDAyKQotIFBoaWxpcCBHbGFkc3RvbmUgZm91bmQgYSBwcm9ibGVtIGluIGhvdyBIVFRQIHJlcXVlc3RzIHdlcmUgc2VudCBpZiB0aGUKICByZXF1ZXN0IGNvdWxkbid0IGJlIHNlbnQgYWxsIGF0IG9uY2UuCgotIEVtaWwgZm91bmQgYW5kIGNvcnJlY3RlZCBhIGJhZCBjb25uZWN0aW9uIHRpbWVvdXQgY29tcGFyaXNvbiB0aGF0IG1hZGUgY3VybAogIHVzZSB0aGUgbG9uZ2VzdCBvZiBjb25uZWN0LXRpbWVvdXQgYW5kIHRpbW91dCBhcyBhIHRpbWVvdXQgdmFsdWUsIGluc3RlYWQgb2YKICB0aGUgc2hvcnRlc3QgYXMgaXQgd2FzIHN1cHBvc2VkIHRvIQoKLSBBcm9uIFJvYmVydHMgcHJvdmlkZWQgdXBkYXRlZCBpbmZvcm1hdGlvbiBhYm91dCBMREFQIFVSTCBzeW50YXggdG8gZ28gaW50bwogIHRoZSBtYW51YWwgYXMgYSByZXBsYWNlbWVudCBmb3IgdGhlIG9sZCByZWZlcmVuY2VzLgoKRGFuaWVsICgxNyBGZWJydWFyeSAyMDAyKQotIFBoaWxpcCBHbGFkc3RvbmUgcG9pbnRlZCBvdXQgdHdvIG1pc3NpbmcgaW5jbHVkZSBmaWxlcyB0aGF0IG1hZGUgY3VybCBjb3JlCiAgZHVtcCBvbiA2NGJpdCBhcmNoaXRlY3R1cmVzLiBXZSBuZWVkIHRvIHBheSBtb3JlIGF0dGVudGlvbiBvbiB0aGVzZSBkZXRhaWxzLgogIEl0IGlzICpsZXRoYWwqIHRvIGZvciBleGFtcGxlIGZvcmdldCB0aGUgbWFsbG9jKCkgcHJvdG90eXBlLCBhcyAnaW50JyBpcwogIDMyYml0IGFuZCBtYWxsb2MoKSBtdXN0IHJldHVybiBhIDY0Yml0IHBvaW50ZXIgb24gdGhlc2UgcGxhdGZvcm1zLgoKLSBHaWFzbGFzIEdlb3JnaW9zIGZpeGVkIGEgcHJvYmxlbSB3aXRoIEhvc3Q6IGhlYWRlcnMgb24gcmVwZWF0ZWQgcmVxdWVzdHMgb24KICB0aGUgc2FtZSBoYW5kbGUgdXNpbmcgYSBwcm94eS4KCkRhbmllbCAoOCBGZWJydWFyeSAyMDAyKQotIEhhbm5vIEwuIEtyYW56aG9mZiBhY2N1cmF0ZWx5IGZvdW5kIG91dCB0aGF0IGRpc2FibGluZyB0aGUgRXhwZWN0OiBoZWFkZXIKICB3aGVuIGRvaW5nIG11bHRpcGFydCBmb3JtcG9zdHMgZGlkbid0IHdvcmsgdmVyeSB3ZWxsLiBJdCBkaXNhYmxlZCBvdGhlcgogIHBhcnRzIG9mIHRoZSByZXF1ZXN0IGhlYWRlciB0b28sIHJlc3VsdGluZyBpbiBhIGJyb2tlbiBoZWFkZXIuIFdoZW4gSSBmaXhlZAogIHRoaXMsIEkgYWxzbyBub3RpY2VkIHRoYXQgdGhlIENvbnRlbnQtVHlwZSB3YXNuJ3QgcG9zc2libGUgdG8gZGlzYWJsZS4gSXQgaXMKICBub3csIGV2ZW4gdGhvdWdoIGl0IHByb2JhYmx5IGlzIHJlYWxseSBzdHVwaWQgdG8gdHJ5IHRvIGRvIHRoaXMgKGJlY2F1c2Ugb2YKICB0aGUgYm91bmRhcnkgc3RyaW5nIHRoYXQgaXMgaW5jbHVkZWQgaW4gdGhlIGludGVybmFsbHkgZ2VuZXJhdGVkIGhlYWRlciwKICB1c2VkIGFzIGZvcm0gcGFydCBzZXBhcmF0b3IuKQoKRGFuaWVsICg3IEZlYnJ1YXJ5IDIwMDIpCi0gSSBtb3ZlZCB0aGUgY29uZmlnKi5oIGZpbGVzIGZyb20gdGhlIHJvb3QgZGlyZWN0b3J5IHRvIHRoZSBsaWIvIGRpcmVjdG9yeS4KCi0gSSd2ZSBhZGRlZCB0aGUgbmV3IHRlc3Qgc3VpdGUgSFRUUCBzZXJ2ZXIgdG8gdGhlIENWUyByZXBvc2l0b3J5LCBJdCBzZWVtcyB0bwogIHdvcmsgcHJldHR5IGdvb2Qgbm93LCBidXQgd2UgbXVzdCBtYWtlIGl0IGdldCB1c2VkIGJ5IHRoZSB0ZXN0IHNjcmlwdHMKICBwcm9wZXJseSBhbmQgdGhlbiB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGl0IGNvbXBpbGVzLCBidWlsZHMgYW5kIHJ1bnMgb24KICBtb3N0IG9wZXJhdGluZyBzeXN0ZW1zLgoKVmVyc2lvbiA3LjkuNS1wcmUxCgpEYW5pZWwgKDYgRmVicnVhcnkgMjAwMikKLSBNaWtsb3MgTmVtZXRoIHByb3ZpZGVkIHVwZGF0ZWQgd2luZG93cyBtYWtlZmlsZXMgYW5kIElOU1RBTEwgZG9jcy4KCi0gTXIgTGFycnkgRmFobm9lIGZvdW5kIGEgcHJvYmxlbSB3aXRoIGZvcm1wb3N0cyBhbmQgSSBtYW5hZ2VkIHRvIHRyYWNrIGRvd24KICBhbmQgcGF0Y2ggdGhpcyBidWcuIFRoaXMgd2FzIGFjdHVhbGx5IHR3byBidWdzLCBhcyB0aGUgcG9zdGVkIHNpemUgd2FzIGFsc28KICBzYWlkIHRvIGJlIHR3byBieXRlcyB0b28gbGFyZ2UuCgotIEJyZW50IEJlYXJkc2xleSBmb3VuZCBvdXQgYW5kIGJyb3VnaHQgYSBjb3JyZWN0aW9uIGZvciB0aGUKICBDVVJMSU5GT19DT05URU5UX1RZUEUgcGFyc2VyIHRoYXQgd2FzIG9mZiBvbmUgYnl0ZS4gVGhpcyB3YXMgbXkgZmF1bHQsIEkKICBhY2NpZGVudGFseSBicm9rZSBHaWFzbGFzIEdlb3JnaW9zJyBwYXRjaC4KCkRhbmllbCAoNSBGZWJydWFyeSAyMDAyKQotIEtldmluIFJvdGggZm91bmQgeWV0IGFub3RoZXIgU1NMIGRvd25sb2FkIHByb2JsZW0uCgpWZXJzaW9uIDcuOS40CgotIG5vIGNoYW5nZXMgc2luY2UgcHJlLXJlbGVhc2UKClZlcnNpb24gNy45LjQtcHJlMgoKRGFuaWVsICgzIEZlYnJ1YXJ5IDIwMDIpCi0gRXJpYyBNZWx2aWxsZSBwcm92aWRlZCBhIGZldyBzcGVsbGluZyBjb3JyZWN0aW9ucyBpbiB0aGUgY3VybCBtYW4gcGFnZS4KCkRhbmllbCAoMSBGZWJydWFyeSAyMDAyKQotIEFuZHJlYXMgRGFtbSBjb3JyZWN0ZWQgdGhlIHVuY29uZGl0aW9uYWwgdXNlIG9mIGdtdGltZSgpIGluIGdldGRhdGUsIGl0IG5vdwogIHVzZXMgZ210aW1lX3IoKSBvbiBhbGwgaG9zdHMgdGhhdCBoYXZlIGl0LgoKRGFuaWVsICgzMSBKYW51YXJ5IDIwMDIpCi0gQW4gYW5vbnltb3VzIGJ1ZyByZXBvcnQgaWRlbnRpZmllZCBhIHByb2JsZW0gaW4gdGhlIEROUyBjYWNoaW5nIHdoaWNoIG1hZGUgaXQKICBzb21ldGltZXMgYWxsb2NhdGUgb25lIGJ5dGUgdG9vIGxpdHRsZSB0byBzdG9yZSB0aGUgY2FjaGUgZW50cnkgaW4uIFRoaXMKICBoYXBwZW5lZCB3aGVuIHRoZSBwb3J0IG51bWJlciBzdGFydGVkIHdpdGggMSEKCi0gQWxiZXJ0IENoaW4gcHJvdmlkZWQgYSBwYXRjaCB0aGF0IGltcHJvdmVzIHRoZSBnZXRob3N0YnluYW1lX3IoKSBjb25maWd1cmUKICBjaGVjayBvbiBIUC1VWCAxMS4wMC4KClZlcnNpb24gNy45LjQtcHJlMQoKRGFuaWVsICgzMCBKYW51YXJ5IDIwMDIpCi0gR2VvcmcgSG9ybiBmb3VuZCBhbm90aGVyIHdheSB0aGUgU1NMIHJlYWRpbmcgZmFpbGVkIGR1ZSB0byB0aGUgbm9uLWJsb2NraW5nCiAgc3RhdGUgb2YgdGhlIHNvY2tldHMhIEkgZml4ZWQuCgpEYW5pZWwgKDI5IEphbnVhcnkgMjAwMikKLSBNdWx0aXBhcnQgZm9ybXBvc3RzIG5vdyBzZW5kIHRoZSBmdWxsIHJlcXVlc3QgcHJvcGVybHksIGluY2x1ZGluZyB0aGUgQ1JMRi4KICBUaGV5IHdlcmUgcHJldmlvdXNseSB0cmVhdGVkIGFzIHBhcnQgb2YgdGhlIHBvc3QgZGF0YS4KCi0gVGhlIHVwbG9hZCBieXRlIGNvdW50ZXIgYnVnZ2VkLgoKLSBULiBCaGFyYXRoIHBvaW50ZWQgb3V0IHRoYXQgd2Ugc2VlZCBTU0wgb24gZXZlcnkgY29ubmVjdCwgd2hpY2ggaXMgYSB0aW1lLQogIGNvbnN1bWluZyBvcGVyYXRpb24gdGhhdCBzaG91bGQgb25seSBiZSBuZWVkZWQgdG8gZG8gb25jZS4gV2UgcGF0Y2hlZAogIGxpYmN1cmwgdG8gbm93IG9ubHkgc2VlZCBvbiB0aGUgZmlyc3QgY29ubmVjdCB3aGVuIHVuc2VlZGVkLiBUaGUgc2VlZGVkCiAgc3RhdHVzIGlzIGdsb2JhbCBzbyBpdCdsbCBub3cgb25seSBoYXBwZW4gb25jZSBkdXJpbmcgYSBwcm9ncmFtJ3MgbGlmZSB0aW1lLgoKICBJZiB0aGUgcmFuZG9tX2ZpbGUgb3IgZWdkc29ja2V0IGlzIHNldCwgdGhlIHNlZWQgd2lsbCBiZSByZS1tYWRlIHRob3VnaC4KCi0gR2lhc2xhcyBHZW9yZ2lvcyBpbnRyb2R1Y2VkIENVUkxJTkZPX0NPTlRFTlRfVFlQRSB0aGF0IGxldHMKICBjdXJsX2Vhc3lfZ2V0aW5mbygpIHJlYWQgdGhlIGNvbnRlbnQtdHlwZSBmcm9tIHRoZSBwcmV2aW91cyByZXF1ZXN0LgoKRGFuaWVsICgyOCBKYW51YXJ5IDIwMDIpCi0gS2pldGlsIEphY29ic2VuIGZvdW5kIGEgd2F5IHRvIGNyYXNoIGN1cmwgYW5kIGFmdGVyIG11Y2ggZGVidWdnaW5nLCBpdAogIHR1cm5lZCBvdXQgaXQgd2FzIGEgSVB2NC1saW51eCBvbmx5IHByb2JsZW0gaW50cm9kdWNlZCBpbiA3LjkuMyByZWxhdGVkIHRvCiAgbmFtZSByZXNvbHZpbmcuCgotIEFuZHJlYXMgRGFtbSBwb3N0ZWQgYSBodWdlIHBhdGNoIHRoYXQgbWFkZSB0aGUgY3VybF9nZXRkYXRlKCkgZnVuY3Rpb24gZnVsbHkKICByZWVudHJhbnQhCgotIFN0ZXZlIE1hcnggcG9pbnRlZCBvdXQgdGhhdCB5b3UgY291bGRuJ3QgbWl4IENVUkxPUFRfQ1VTVE9NUkVRVUVTVCB3aXRoCiAgQ1VSTE9QVF9QT1NURklFTERTLiBZb3UgY2FuIG5vdyEKCkRhbmllbCAoMjUgSmFudWFyeSAyMDAyKQotIEtyaXNobmVuZHUgTWFqdW1kYXIgcG9pbnRlZCBvdXQgdGhhdCB0aGUgaGVhZGVyIGxlbmd0aCBjb3VudGVyIHdhcyBub3QgcmVzZXQKICBiZXR3ZWVuIG11bHRpcGxlIHJlcXVlc3RzIG9uIHRoZSBzYW1lIGhhbmRsZS4KCi0gUGVkcm8gTmV2ZXMgcmlnaHRmdWxseSBxdWVzdGlvbmVkIHdoeSBjdXJsIGFsd2F5cyBhcHBlbmQgXHJcbiB0byB0aGUgZGF0YQogIHRoYXQgaXMgc2VudCBpbiBIVFRQIFBPU1QgcmVxdWVzdHMuIFVuZm9ydHVuYXRlbHksIHRoaXMgYnJva2UgdGhlIHRlc3Qgc3VpdGUKICBhcyB0aGUgdGVzdCBIVFRQIHNlcnZlciBpcyBsYW1lIGVub3VnaCBub3QgdG8gZGVhbCB3aXRoIHRoaXMuLi4gOi1PCgotIEZvbGxvd2luZyBMb2NhdGlvbjogaGVhZGVycyB3aGVuIHRoZSBjb25uZWN0aW9uIGRpZG4ndCBjbG9zZSBkaWRuJ3Qgd29yayBhcwogIGxpYmN1cmwgZGlkbid0IHByb3Blcmx5IHN0b3AgcmVhZGluZy4gVGhpcyBwcm9ibGVtIHdhcyBhZGRlZCBpbiA3LjkuMyBkdWUgdG8KICB0aGUgcmVzdHJ1Y3R1cmVkIGludGVybmFscy4gJ0ZyYW5rJyBwb3N0ZWQgYSBidWcgcmVwb3J0IGFib3V0IHRoaXMuCgpEYW5pZWwgKDI0IEphbnVhcnkgMjAwMikKLSBLZXZpbiBSb3RoIHZlcnkgcXVpY2tseSBzcG90dGVkIHRoYXQgd2Ugd3JvbmdseSBpbnN0YWxsZWQgdGhlIGV4YW1wbGUKICBwcm9ncmFtcyB0aGF0IHdlcmUgYnVpbHQgaW4gdGhlIG11bHRpIGRpcmVjdG9yeSwgd2hlbiAnbWFrZSBpbnN0YWxsJyB3YXMKICB1c2VkLiA6LS8KClZlcnNpb24gNy45LjMKCkRhbmllbCAoMjMgSmFudWFyeSAyMDAyKQotIEFuZHLpcyBHYXJj7WEgZm91bmQgYSBwZXJzaXN0YW5jeSBwcm9ibGVtIHdoZW4gZG9pbmcgSFRUUCBIRUFELCB0aGF0IG1hZGUKICBjdXJsICJoYW5nIiB1bnRpbCB0aGUgY29ubmVjdGlvbiB3YXMgY2xvc2VkIGJ5IHRoZSBzZXJ2ZXIuIFRoaXMgcHJvYmxlbSBoYXMKICBiZWVuIGludHJvZHVjZWQgaW4gNy45LjMgZHVlIHRvIGludGVybmFsIHJld3JpdGVzLCB0aGlzIHdhcyBub3QgcHJlc2VudCBpbgogIDcuOS4yLgoKVmVyc2lvbiA3LjkuMy1wcmU0CgpEYW5pZWwgKDE5IEphbnVhcnkgMjAwMikKLSBBbnRvbmlvIGZpbGVkIGJ1ZyByZXBvcnQgIzUwNTUxNCBhbmQgcHJvdmlkZWQgYSBmaXghIFdoZW4gZG9pbmcgbXVsdGlwYXJ0CiAgZm9ybXBvc3RzLCBsaWJjdXJsIHdvdWxkIGluY2x1ZGUgYW4gZXJyb3IgdGV4dCBpbiB0aGUgYWN0dWFsIHBvc3QgaWYgYQogIHNwZWNpZmllZCBmaWxlIHdhc24ndCBmb3VuZC4gVGhpcyBpcyBub3QgbGliY3VybCdzIGpvYi4gSW5zdGVhZCB3ZSBhZGQgYW4KICBlbXB0eSBwYXJ0LgoKRGFuaWVsICgxOCBKYW51YXJ5IDIwMDIpCi0gUGxheWVkIGFyb3VuZCB3aXRoIHN0cmljdGVyIGNvbXBpbGVyIHdhcm5pbmdzIGZvciBnY2MgKHdoZW4gLi9jb25maWd1cmUKICAtLWVuYWJsZS1kZWJ1ZyBpcyB1c2VkKSBhbmQgY2hhbmdlZCBzb21lIG1pbm9yIHRoaW5ncyB0byBzdG9wIHRoZSB3YXJuaW5ncy4KCi0gQ29tbWVudGVkIG91dCB0aGUgJ2xvbmcgbG9uZycgYW5kICdsb25nIGRvdWJsZScgY2hlY2tzIGluIGNvbmZpZ3VyZS5pbiwgYXMKICB3ZSBkb24ndCBjdXJyZW50bHkgdXNlIHRoZW0gYW55d2F5IGFuZCB0aGUgY29kZSBpbiBsaWIvbXByaW50Zi5jIHRoYXQgdXNlCiAgdGhlbSBjYXVzZXMgd2FybmluZ3MuCgotIFNhdWwgR29vZCBhbmQgam9uYXRhbiBwb2ludGVkIG91dCBNYWMgT1MgWCBidWlsZCBwcm9ibGVtcyB3aXRoIHByZTMgYW5kIGhvdwogIHRvIGNvcnJlY3QgdGhlbS4gVHdvIGNvbXBpbGVyIHdhcm5pbmdzIHdlcmUgcmVtb3ZlZCBhcyB3ZWxsLgoKLSBBbmRy6XMgR2FyY+1hIGZpeGVkIHR3byBtaW5vciBtaW5ndzMyIGJ1aWxkaW5nIHByb2JsZW1zLgoKVmVyc2lvbiA3LjkuMy1wcmUzCgpEYW5pZWwgKDE3IEphbnVhcnkgMjAwMikKLSBkb2NzL2xpYmN1cmwtdGhlLWd1aWRlIGlzIGEgbmV3IHR1dG9yaWFsIGZvciBvdXIgbGliY3VybCBwcm9ncmFtbWluZwogIGZyaWVuZHMuCgotIFJpY2hhcmQgQXJjaGVyIGJyb3VnaHQgYmFjayB0aGUgYWJpbGl0eSB0byBjb21waWxlIGFuZCBidWlsZCB3aXRoIE9wZW5TU0wKICB2ZXJzaW9ucyBiZWZvcmUgMC45LjUuCiAgW2h0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci8/ZnVuYz1kZXRhaWwmYXRpZD0xMDA5NzYmYWlkPTUwNDE2MyZncm91cF9pZD05NzZdCgotIFRoZSBETlMgY2FjaGUgY29kZSBkaWRuJ3QgdGFrZSB0aGUgcG9ydCBudW1iZXIgaW50byBhY2NvdW50LCB3aGljaCBtYWRlIGl0CiAgd29yayByYXRoZXIgYmFkIG9uIElQdjYtZW5hYmxlZCBob3N0cyAoZXNwZWNpYWxseSB3aGVuIGRvaW5nIHBhc3NpdmUKICBGVFApLiBTdGVybGluZyBmaXhlZCBpdC4KCkRhbmllbCAoMTYgSmFudWFyeSAyMDAyKQotIEdlb3JnIEhvcm4gY291bGQgbWFrZSBhIHRyYW5zZmVyIHRpbWUtb3V0IHdpdGhvdXQgZXJyb3IgdGV4dC4gSSBmb3VuZCBpdCBhbmQKICBjb3JyZWN0ZWQgaXQuCgotIFNTTCB3cml0ZXMgZGlkbid0IHdvcmssIHRoZXkgcmV0dXJuIGFuIHVuaW5pdGlhbGl6ZWQgdmFsdWUgdGhhdCBjYXVzZWQKICBoYXZvYyBhbGwgb3Zlci4gR2VvcmcgSG9ybiBleHBlcmllbmNlZCB0aGlzLgoKLSBLZXZpbiBSb3RoIHBhdGNoZWQgdGhlIGN1cmxfdmVyc2lvbigpIGZ1bmN0aW9uIHRvIHVzZSB0aGUgcHJvcGVyIE9wZW5TU0wKICBmdW5jdGlvbiBmb3IgdmVyc2lvbiBpbmZvcm1hdGlvbi4gVGhpcyB3YXksIGN1cmwgd2lsbCByZXBvcnQgdGhlIHZlcnNpb24gb2YKICB0aGUgU1NMIGxpYnJhcnkgYWN0dWFsbHkgcnVubmluZyByaWdodCBub3csIG5vdCB0aGUgb25lIHRoYXQgaGFkIGl0cyBoZWFkZXJzCiAgaW5zdGFsbGVkIHdoZW4gbGliY3VybCB3YXMgYnVpbHQuIE1haW5seSBpbnRlcnN0aW5nIHdoZW4gcnVubmluZyB3aXRoIHNoYXJlZAogIE9wZW5TU0wgbGlicmFyaWVzLiAgCgpWZXJzaW9uIDcuOS4zLXByZTIKCkRhbmllbCAoMTYgSmFudWFyeSAyMDAyKQotIE1vZmllZCB0aGUgbWFpbiB0cmFuc2ZlciBsb29wIGFuZCByZWxhdGVkIHN0dWZmIHRvIGRlYWwgd2l0aCBub24tYmxvY2tpbmcKICBzb2NrZXRzIGluIHRoZSB1cGxvYWQgc2VjdGlvbi4gV2hpbGUgZG9pbmcgdGhpcywgSSd2ZSBub3cgc2VwYXJhdGVkIHRoZQogIGNvbm5lY3Rpb24gb3JpZW50ZWQgYnVmZmVycyB0byBoYXZlIG9uZSBmb3IgZG93bmxvYWRzIGFuZCBvbmUgZm9yIHVwbG9hZHMKICAoYXMgdHdvIGNhbiBoYXBwZW4gc2ltdWx0YW5lb3VzbHkpLiBJIGFsc28gc2hydW5rIHRoZSBidWZmZXJzIHRvIDIwSwogIGVhY2guIEFzIHdlIGhhdmUgYSBzY3JhdGNoIGJ1ZmZlciB0d2ljZSB0aGUgc2l6ZSBvZiB0aGUgdXBsb2FkIGJ1ZmZlciwgd2UKICBhcnJpdmVkIGF0IDgwSyBmb3IgYnVmZmVycyBjb21wYXJlZCB3aXRoIHRoZSBwcmV2aW91cyAxNTBLLgoKLSBBZGRlZCB0aGUgLS1jYyBvcHRpb24gdG8gY3VybC1jb25maWcgY29tbWFuZCBhcyBpdCBlbmFibGVzIHNvIHZlcnkgY29vbAogIG9uZS1saW5lcnMuIEhhdmUgYSBnbyBhIHRoaXMgb25lLCBidWlsZGluZyB0aGUgc2ltcGxlLmMgZXhhbXBsZToKCiAgICAgICAgJCBgY3VybC1jb25maWcgLS1jYyAtLWNmbGFncyAtLWxpYnNgIC1vIGV4YW1wbGUgc2ltcGxlLmMKCkRhbmllbCAoMTQgSmFudWFyeSAyMDAyKQotIEkgbWFkZSBhbGwgc29ja2V0IHJlYWRzIChyZWN2KSBoYW5kbGUgRVdPVUxEQkxPQ0suIEkgaG9wZSBuaWNlbHkuIE5vdyB3ZQogIG9ubHkgbmVlZCB0byBhZGRyZXNzIGFsbCB3cml0ZXMgKHNlbmQpIHRvbyBhbmQgdGhlbiBJJ20gcmVhZHkgZm9yIGFub3RoZXIKICBwcmUtcmVsZWFzZS4uLgoKLSBTdG9uZWQgRWxpcG90IHBhdGNoZWQgdGhlIGluX2FkZHJfdCBjb25maWd1cmUgdGVzdCB0byBtYWtlIGl0IHdvcmsgYmV0dGVyIG9uCiAgbW9yZSBwbGF0Zm9ybXMuCgpEYW5pZWwgKDkgSmFudWFyeSAyMDAyKQotIENyaXMgQmFpbGlmZiBmb3VuZCBvdXQgdGhhdCBmaWxsaW5nIHVwIGN1cmwncyBTU0wgc2Vzc2lvbiBjYWNoZSBjYXVzZWQgYQogIGNyYXNoIQoKLSBQb3N0ZWQgdGhlIGN1cmwgcXVlc3Rpb25uYWlyZSBvbiB0aGUgd2ViIHNpdGUuIElmIHlvdSBoYXZlbid0IHBvc3RlZCB5b3VyCiAgb3BpbmlvbnMgdGhlcmUgeWV0LCBnbyB0aGVyZSBhbmQgZG8gaXQgbm93IHdoaWxlIGl0IGlzIHN0aWxsIHRoZXJlOgoKICAgICAgICBodHRwOi8vY3VybC5oYXh4LnNlL3EvCgotIEdlb3JnIEhvcm4gcXVpY2tseSBmb3VuZCBvdXQgdGhhdCB0aGUgU1NMIHJlYWRpbmcgbm8gbG9uZ2VyIHdvcmtlZCBhcwogIHN1cHBvc2VkIHNpbmNlIHRoZSBzd2l0Y2ggdG8gbm9uLWJsb2NraW5nIHNvY2tldHMuIEkndmUgbWFkZSBhIHF1aWNrIHBhdGNoCiAgKGZvciByZWFkaW5nIG9ubHkpIGJ1dCB3ZSBzaG91bGQgaW1wcm92ZSBpdCBldmVuIGZ1cnRoZXIuCgpWZXJzaW9uIDcuOS4zLXByZTEKCkRhbmllbCAoNyBKYW51YXJ5IDIwMDIpCi0gSSBtYWRlIHRoZSAnYm9vbCcgdHlwZWRlZiB1c2UgYW4gInVuc2lnbmVkIGNoYXIiLiBJdCBtYWtlcyBpdCB0aGUgc2FtZSBvbgogIGFsbCBwbGF0Zm9ybXMsIG5vIG1hdHRlciB3aGF0IHRoZSBwbGF0Zm9ybSB0aGlua3MgdGhlIGRlZmF1bHQgZm9ybWF0IGZvcgogIGNoYXIgaXMuIFRoaXMgd2FzIG5vdGljZWQgc2luY2Ugd2UgbWFkZSBhIHNpbGx5IGNvbXBhcmlzb24gaW52b2x2aW5nIHN1Y2ggYQogIGJvb2wgdmFyaWFibGUsIGFuZCBvbmx5IG9uZSBjb21waWxlci9wbGF0Zm9ybSBjb21iaW5hdGlvbiAob24gRGViaWFuIExpbnV4KQogIGNvbXBsYWluZWQgYWJvdXQgaXQgKHRoYXQgaGFwcGVuZWQgdG8gaGF2ZSBpdHMgY2hhciB1bnNpZ25lZCBieSBkZWZhdWx0KS4KCi0gQnVnIHJlcG9ydCAjNDk1MjkwIGlkZW50aWZpZWQgYSBjb29raWUgcGFyc2luZyBwcm9ibGVtIHRoYXQgd2FzIGNvcnJlY3RlZC4KICBXaGVuIGEgU2V0LUNvb2tpZTogbGluZSBpcyByZWNlaXZlZCB3aXRob3V0IGEgdHJhaWxpbmcgc2VtaWNvbG9uLCBsaWJjdXJsCiAgZGlkbid0IHJlYWQgdGhlIGxhc3QgIm5hbWU9dmFsdWUiIHBhaXIgb2YgdGhlIGxpbmUsIGxlYWRpbmcgdG8gY29uZnVzaW9ucy4uLgoKLSBTdGVybGluZyBjb21taXR0ZWQgaGlzIHVwZGF0ZWQgRE5TIGNhY2hlIGNvZGUuCgotIEkgd29ya2VkIHdpdGggR2VvcmcgSG9ybiBhbmQgY29tbWVudHMgZnJvbSBH9nR6IEJhYmluLUViZWxsIGFuZCBzd2l0Y2hlZAogIGN1cmwncyBzb2NrZXQgb3BlcmF0aW9ucyBjb21wbGV0ZWx5IG92ZXIgdG8gbm9uLWJsb2NraW5nIGZvciB0aGUgZW50aXJlCiAgb3BlcmF0aW9uIChwcmV2aW91c2x5IHdlIHVzZWQgbm9uLWJsb2NraW5nIG9ubHkgZm9yIHRoZSBjb25uZWN0aW9uIHBoYXNlKS4KICBXZSBoYWQgdG8gZG8gdGhpcyB0byBtYWtlIHRoZSBTU0wgY29ubmVjdGlvbiBwaGFzZSB0aW1lb3V0IHByb3Blcmx5IHdpdGhvdXQKICB0aGUgdXNlIG9mIHNpZ25hbHMuIEEgbGl0dGxlIGV4dHJhIGNvZGUgdG8gZGVhbCB3aXRoIHRoaXMgd2FzIGFkZGVkLgoKLSBULiBCaGFyYXRoIHBvaW50ZWQgb3V0IGEgc2xpZ2h0bHkgb2JzY3VyZSBjb29raWUgZW5naW5lIGZsYXcuCgotIFBldGUgU3UgcG9pbnRlZCBvdXQgdGhhdCBsaWJjdXJsIGRpZG4ndCB0cmVhdCBIVFRQIGNvZGUgMjA0IGFzIGl0IHNob3VsZC4KICAyMDQtcmVwbGllcyBuZXZlciBwcm92aWRlcyBhIHJlc3BvbnNlLWJvZHkuIFRoaXMgcmVzdWx0ZWQgaW4gYmFkIHBlcnNpc3RhbnQKICBiZWhhdmlvciB3aGVuIDIwNCB3YXMgcmVjZWl2ZWQuCgpEYW5pZWwgKDUgSmFudWFyeSAyMDAyKQotIFNNIHVwZGF0ZWQgdGhlIFZDKysgbGlicmFyeSBNYWtlZmlsZXMgZm9yIHRoZSBuZXcgc291cmNlIGZpbGVzLgoKRGFuaWVsICg0IEphbnVhcnkgMjAwMikKLSBJIGRpc2NvdmVyZWQgdGhhdCB3ZSB3cm9uZ2x5IHVzZWQgaW5ldF9udG9hKCkgKGluc3RlYWQgb2YgaW5ldF9udG9hX3IoKSBpbgogIHR3byBwbGFjZXMgaW4gdGhlIHNvdXJjZSBjb2RlKS4gT25lIGhhcHBlbmVkIHdpdGggVkVSQk9TRSBzZXQgb24gY29ubmVjdHMsCiAgYW5kIHRoZSBvdGhlciB3aGVuIFZFUkJPU0Ugd2FzIG9uIGFuZCBrcmI0IG92ZXIgbmF0IHdhcyB1c2VkLi4uIEkgaG9uZXN0bHkKICBkb24ndCB0aGluayBhbnlvbmUgaGFzIHN1ZmZlcmVkIGZyb20gdGhlc2UgbWlzdGFrZXMuCgotIEkgcmVwbGFjZWQgYSBsb3Qgb2Ygc2lsbHkgb2NjdXJhbmNlcyBvZiBwcmludGYoKSB0byBpbnN0ZWFkIHVzZSB0aGUgbW9yZQogIGFwcHJvcHJpYXRlIEN1cmxfaW5mb2YoKSBvciBDdXJsX2ZhaWxmKCkuIFRoZSBrcmI0IGFuZCB0ZWxuZXQgY29kZSB3ZXJlCiAgYWZmZWN0ZWQuCgotIFBoaWxpcCBHbGFkc3RvbmUgZm91bmQgYSBmZXcgbW9yZSBwcm9ibGVtcyB3aXRoIDY0LWJpdCBhcmNocyAodGhlIDY0LWJpdAogIHNwYXJjIG9uIHNvbGFyaXMgOCkuCgotIEFmdGVyIGRpc2N1c3Npb25zIG9uIHRoZSBsaWJjdXJsIGxpc3Qgd2l0aCBSYW91bCBDcmlkbGlnLCBJIGp1c3QgbWFkZSBGVFAKICByZXNwb25zZSBsaW5lcyBnZXQgcGFzc2VkIHRvIHRoZSBoZWFkZXIgY2FsbGJhY2sgaWYgc3VjaCBhIG9uZSBpcwogIHJlZ2lzdGVyZWQuIEl0J2xsIG1ha2UgaXQgcG9zc2libGUgZm9yIGFueSBhcHBsaWNhdGlvbiB0byBnZXQgYWxsIHRoZQogIHJlc3BvbnNlcyBhbiBGVFAgc2VydmVyIHNlbmRzIHRvIGxpYmN1cmwuCgpEYW5pZWwgKDMgSmFudWFyeSAyMDAyKQotIFN0ZXJsaW5nIEh1Z2hlcyBicm91Z2h0IGEgZmV3IGJ1Y2tldHMgb2YgY29kZS4gTm93LCBsaWJjdXJsIHdpbGwKICBhdXRvbWF0aWNhbGx5IGNhY2hlIEROUyBsb29rdXBzIGFuZCByZS11c2UgdGhlIHByZXZpb3VzIHJlc3VsdHMgZmlyc3QgaWYgYW55CiAgc3VjaCBpcyBhdmFpbGFibGUuIEl0IGdyZWF0bHkgaW1wcm92ZXMgc3BlZWQgd2hlbiBkb2luZyBtYW55IHJlcGVhdGVkCiAgb3BlcmF0aW9ucyB0byB0aGUgc2FtZSBob3N0LgoKLSBBcyB0aGUgdGVzdCBjYXNlIHVzZXMgLS1pbmNsdWRlIGFuZCB0aGVuIC0taGVhZCwgSSBoYWQgdG8gbW9kaWZ5IHNyYy9tYWluLmMKICB0byBkZWFsIHdpdGggdGhpcyBzaXR1YXRpb24gc2xpZ2h0bHkgYmV0dGVyIHRoYW4gcHJldmlvdXNseS4gV2hlbiBkb25lLCB3ZQogIGhhdmUgMTAwJSBnb29kIHRlc3RzIGFnYWluIGluIHRoZSBtYWluIGJyYW5jaC4KCkRhbmllbCAoMiBKYW51YXJ5IDIwMDIpCi0gTWFkZSB0ZXN0IGNhc2UgMjUgcnVuIGFnYWluIGluIHRoZSBtdWx0aS1kZXYgYnJhbmNoLiBCdXQgaXQgc2VlbXMgdGhhdCB0aGUKICBjaGFuZ2VzIGRvbmUgb24gZGVjLTIwIG1hZGUgdGVzdCBjYXNlIDEwNCBjZWFzZSB0byB3b3JrIChpbiBib3RoIGJyYW5jaGVzKS4KCi0gUGhpbGlwIEdsYWRzdG9uZSBwb2ludGVkIG91dCBhIGZldyBwb3J0YWJpbGl0eSBwcm9ibGVtcyBpbiB0aGUgc291cmNlIGNvZGUKICB0aGF0IGRpZG4ndCBjb21waWxlIG9uIDY0LWJpdCBzcGFyY3MgdXNpbmcgU3VuJ3MgbmF0aXZlIA==