ICBDaGFuZ2Vsb2cgZm9yIHRoZSBjLWFyZXMgcHJvamVjdAoKKiBTZXB0ZW1iZXIgMjkKCi0gSGVucmlrIFN0b2VybmVyIGZpeDogZ290IGEgcmVwb3J0IHRoYXQgVHJ1NjQgVW5peCAodGhlIHVuaXggZnJvbSBEaWdpdGFsCiAgd2hlbiB0aGV5IG1hZGUgQWxwaGEncykgdXNlcyAvZXRjL3N2Yy5jb25mIGZvciB0aGUgcHVycG9zZSBmaXhlZCBiZWxvdyBmb3IKICBvdGhlciBPU2VzLiBIZSBtYWRlIGMtYXJlcyBjaGVjayBmb3IgYW5kIHVuZGVyc3RhbmQgaXQgaWYgcHJlc2VudC4KCi0gTm93IGMtYXJlcyB3aWxsIHVzZSBsb2NhbCBob3N0IG5hbWUgbG9va3VwIF9iZWZvcmVfIEROUyByZXNvbHZpbmcgYnkgZGVmYXVsdAogIGlmIG5vdGhpbmcgZWxzZSBpcyB0b2xkLgoKKiBTZXB0ZW1iZXIgMjYKCi0gSGVucmlrIFN0b2VybmVyOiBmb3VuZCBvdXQgdGhhdCBjLWFyZXMgZG9lcyBub3QgbG9vayBhdCB0aGUgL2V0Yy9ob3N0LmNvbmYKICBmaWxlIHRvIGRldGVybWluZSB0aGUgc2VxdWVuY2UgaW4gd2hpY2ggdG8gc2VhcmNoIC9ldGMvaG9zdHMgYW5kIEROUy4gIFNvIG9uCiAgc3lzdGVtcyB3aGVyZSB0aGlzIG9yZGVyIGlzIGRlZmluZWQgYnkgL2V0Yy9ob3N0LmNvbmYgaW5zdGVhZCBvZiBhICJsb29rdXAiCiAgZW50cnkgaW4gL2V0Yy9yZXNvbHYuY29uZiwgYy1hcmVzIHdpbGwgYWx3YXlzIGRlZmF1bHQgdG8gbG9va2luZyBpbiBETlMKICBmaXJzdCwgYW5kIC9ldGMvaG9zdHMgc2Vjb25kLgoKICBjLWFyZXMgbm93IGxvb2tzIGF0CgogIDEpIHJlc29sdi5jb25mIChmb3IgdGhlICJsb29rdXAiIGxpbmUpOwogIDIpIG5zc3dpdGNoLmZvbiAoZm9yIHRoZSAiaG9zdHM6IiBsaW5lKTsKICAzKSBob3N0LmNvbmYgKGZvciB0aGUgIm9yZGVyIiBsaW5lKS4KCiAgRmlyc3QgbWF0Y2ggd2lucy4KCi0gRG9taW5pY2sgTWVnbGlvIHBhdGNoZWQ6IEMtYXJlcyBvbiBXaW5kb3dzIGFzc3VtZWQgdGhhdCB0aGUgSE9TVFMgZmlsZSBpcwogIGxvY2F0ZWQgaW4gYSBzdGF0aWMgbG9jYXRpb24uIEl0IGFzc3VtZWQKICBDOlxXaW5kb3dzXFN5c3RlbTMyXERyaXZlcnNcRXRjLiBUaGlzIGlzIGEgcG9vciBhc3N1bXB0aW9uIHRvIG1ha2UuIEluIGZhY3QsCiAgdGhlIGxvY2F0aW9uIG9mIHRoZSBIT1NUUyBmaWxlIGNhbiBiZSBjaGFuZ2VkIHZpYSBhIHJlZ2lzdHJ5IHNldHRpbmcuCgogIFRoZXJlIGlzIGEga2V5IGNhbGxlZCBEYXRhYmFzZVBhdGggd2hpY2ggc3BlY2lmaWVzIHRoZSBwYXRoIHRvIHRoZSBIT1NUUwogIGZpbGU6CiAgaHR0cDovL3d3dy5taWNyb3NvZnQuY29tL3RlY2huZXQvaXRzb2x1dGlvbnMvbmV0d29yay9kZXBsb3kvZGVwb3ZnL3RjcGlwMmsubXNweAoKICBUaGUgcGF0Y2ggd2lsbCBtYWtlIGMtYXJlcyBjb3JyZWN0bHkgY29uc3VsdCB0aGUgcmVnaXN0cnkgZm9yIHRoZSBsb2NhdGlvbgogIG9mIHRoaXMgZmlsZS4KCiogQXVndXN0IDI5CgotIEdpc2xlIFZhbmVtIGZpeGVkIHRoZSBNU1ZDIGJ1aWxkIGZpbGVzLgoKKiBBdWd1c3QgMjAKCi0gR2lzbGUgVmFuZW0gbWFkZSBjLWFyZXMgYnVpbGQgYW5kIHdvcmsgd2l0aCBoaXMgV2F0dC0zMiBUQ1AvSVAgc3RhY2suCgoqIEF1Z3VzdCAxMwoKLSBIYXJzaGFsIFByYWRoYW4gbWFkZSBhIG1pbm9yIHN5bnRheCBjaGFuZ2UgaW4gYXJlc19pbml0LmMgdG8gbWFrZSBpdCBidWlsZAogIGZpbmUgd2l0aCBNU1ZDIDcuMQoKKiBKdWx5IDI0CgotIE1hZGUgdGhlIGxpYiBnZXQgYnVpbHQgc3RhdGljIG9ubHkgaWYgLS1lbmFibGUtZGVidWcgaXMgdXNlZC4KCi0gR2lzbGUgVmFuZW0gZml4ZWQ6CgogIEJhc2ljYWxseSBpbiBsb29wcyBsaWtlIGhhbmRsZV9lcnJvcnMoKSwgJ3F1ZXJ5LT5uZXh0JyB3YXMgYXNzaWduZWQgYSBsb2NhbAogIHZhcmlhYmxlIGFuZCB0aGVuIHF1ZXJ5IHdhcyByZWZlcmVuY2VkIGFmdGVyIHRoZSBtZW1vcnkgd2FzIGZyZWVkIGJ5CiAgbmV4dF9zZXJ2ZXIoKS4gSSd2ZSBjaGFuZ2VkIHRoYXQgc28gbmV4dF9zZXJ2ZXIoKSBhbmQgZW5kX3F1ZXJ5KCkgcmV0dXJucwogIHRoZSBuZXh0IHF1ZXJ5LiBTbyBjYWxsZXJzIHNob3VsZCB1c2UgdGhpcyByZXQtdmFsdWUuCgogIFRoZSBuZXh0IHByb2JsZW0gd2FzIHRoYXQgJ3NlcnZlci0+dGNwX2J1ZmZlcl9wb3MnIGhhZCBhIHJhbmRvbSB2YWx1ZSBhdAogIGVudHJ5IHRvIDFzdCByZWN2KCkgKGx1Y2tpbHkgY2F1c2luZyBXaW5zb2NrIHRvIHJldHVybiBFTk9CVUZTKS4KCiAgSSd2ZSBhbHNvIGFkZGVkIGEgYXJlc193cml0ZXYoKSBmb3IgV2luZG93cyB0byBzdHJlYW1saW5lIHRoZSBjb2RlIGEgYml0CiAgbW9yZS4KCiogSnVseSAyMAotIEZpeGVkIGEgZmV3IHZhcmlhYmxlIHJldHVybiB0eXBlcyBmb3Igc29tZSBzeXN0ZW0gY2FsbHMuIE1hZGUgY29uZmlndXJlCiAgY2hlY2sgZm9yIHNzaXplX3QgdG8gbWFrZSBpdCBwb3NzaWJsZSB0byB1c2UgdGhhdCB3aGVuIHJlY2VpdmluZyB0aGUgc2VuZCgpCiAgZXJyb3IgY29kZS4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gcHJldmVudCBjb21waWxlciB3YXJuaW5ncyBvbiBzb21lIHN5c3RlbXMuCgotIE1hZGUgY29uZmlndXJlIGNyZWF0ZSBjb25maWcuaCwgYW5kIGFsbCBzb3VyY2UgZmlsZXMgbm93IGluY2x1ZGUgc2V0dXAuaCB0aGF0CiAgbWlnaHQgaW5jbHVkZSB0aGUgcHJvcGVyIGNvbmZpZy5oIChvciBhIGhhbmRpY3JhZnRlZCBhbHRlcm5hdGl2ZSkuCgotIFN3aXRjaGVkIHRvICdhcmVzX3NvY2tldF90JyB0eXBlIGZvciBzb2NrZXRzIGluIGFyZXMsIHNpbmNlIFdpbmRvd3MgZG9uJ3QKICB1c2UgJ2ludCcgZm9yIHRoYXQuCgotIGF1dG9tYWtlLWlmaWVkIGFuZCBsaWJvb2wtaWZpZWQgYy1hcmVzLiBOb3cgaXQgYnVpbGRzIGxpYmNhcmVzIGFzIGEgc2hhcmVkCiAgbGliIG9uIG1vc3QgcGxhdGZvcm1zIGlmIHdhbnRlZC4gKFRoaXMgYmxvYXRlZCB0aGUgc2l6ZSBvZiB0aGUgcmVsZWFzZQogIGFyY2hpdmUgd2l0aCBhbm90aGVyIDIwMEshKQoKLSBNYWtlZmlsZS5hbSBub3cgdXNlcyBNYWtlZmlsZS5pbmMgZm9yIHRoZSBjIHNvdXJjZXMsIGggaGVhZGVycyBhbmQgbWFuCiAgcGFnZXMsIHRvIG1ha2UgaXQgZWFzaWVyIGZvciBvdGhlciBtYWtlZmlsZXMgdG8gdXNlIHRoZSBleGFjdCBzYW1lIHNldCBvZgogIGZpbGVzLgoKLSBBZGp1c3RlZCAnbWFrZXRneicgdG8gdXNlIHRoZSBuZXcgYXV0b21ha2UgbWFnaWMgd2hlbiBidWlsZGluZyBkaXN0cmlidXRpb24KICBhcmNoaXZlcy4KCi0gQW55b25lIGRlc2lyZXMgSFRNTCBhbmQvb3IgUERGIHZlcnNpb25zIG9mIHRoZSBtYW4gcGFnZXMgaW4gdGhlIHJlbGVhc2UKICBhcmNoaXZlcz8KCiogSnVseSAzCi0gR/xudGVyIEtuYXVmIG1hZGUgYy1hcmVzIGJ1aWxkIGFuZCBydW4gb24gTm92ZWxsIE5ldHdhcmUuCgoqIEp1bHkgMQotIEdpc2xlIFZhbmVtIHByb3ZpZGVkIE1ha2VmaWxlLmRqIHRvIGJ1aWxkIHdpdGggZGpncHAsIGFkZGVkIGEgZmV3IG1vcmUgZGpncHAKICBmaXhlcyBhbmQgbWFkZSBhcmVzIG5vdCB1c2UgJ2Vycm5vJyB0byBwcm92aWRlIGZ1cnRoZXIgaW5mbyBvbiBXaW5kb3dzLgoKKiBKdW5lIDMwCi0gR2lzbGUgVmFuZW0gbWFkZSBpdCBidWlsZCB3aXRoIGRqZ3BwIGFuZCBydW4gZmluZSB3aXRoIHRoZSBXYXR0LTMyIHN0YWNrLgoKKiBKdW5lIDEwCi0gR2lzbGUgVmFuZW0ncyBpbml0IHBhdGNoIGZvciBXaW5kb3dzOgoKICBUaGUgaW5pdF9ieV9yZXNvbHZfY29uZigpIGZ1bmN0aW9uIGZldGNoZXMgdGhlIEROUy1zZXJ2ZXIocykKICBmcm9tIGEgc2VyaWVzIG9mIHJlZ2lzdHJ5IGJyYW5jaGVzLgoKICBUaGlzIGNhbiBiZSB3cm9uZyBpbiB0aGUgY2FzZSB3aGVyZSBESENQIGhhcyBhc3NpZ25lZCBuYW1lc2VydmVycywgYnV0IHRoZQogIHVzZXIgaGFzIG92ZXJyaWRkZW4gdGhlc2Ugc2VydmVycyB3aXRoIG90aGVyIHByZWZlcmVkIHNldHRpbmdzLiBUaGVuIGl0J3MKICB3cm9uZyB0byB1c2UgdGhlIERIQ1BOQU1FU0VSVkVSIHNldHRpbmcgaW4gcmVnaXN0cnkuCgogIEluIHRoZSBjYXNlIG9mIG5vIGdsb2JhbCBESENQLWFzc2lnbmVkIG9yIGZpeGVkIHNlcnZlcnMsIGJ1dCBETlMgc2VydmVyKHMpCiAgcGVyIGFkYXB0ZXIsIG9uZSBoYXMgdG8gcXVlcnkgdGhlIGFkYXB0ZXIgYnJhbmNoZXMuICBCdXQgaG93IGNhbiBjLWFyZXMga25vdwogIHdoaWNoIGFkYXB0ZXIgaXMgdmFsaWQgZm9yIHVzZT8gQUZBSUNTIGl0IGNhbid0LiBUaGVyZSBjb3VsZCBiZSBvbmUgYWRhcHRlcgogIHRoYXQgaXMgZG93biAoZS5nLiBhIFZQTiBhZGFwdGVyKS4KCiAgU28gaXQncyBiZXR0ZXIgdG8gbGVhdmUgdGhpcyB0byB0aGUgSVAgSGVscGVyIEFQSSAoaXBobGFwaSkgYXZhaWxhYmxlIGluCiAgV2luLTk4LzIwMDAgYW5kIGxhdGVyLiBNeSBwYXRjaCBmYWxscy1iYWNrIHRvIHRoZSBvbGQgd2F5IGlmIG5vdCBhdmFpbGFibGUuCgoqIEp1bmUgOAotIEphbWVzIEJ1cnNhIGZpeGVkIGFuIGluaXQgaXNzdWUgZm9yIFJJU0MgT1MuCgoqIE1heSAxMQotIE5pY28gU3RhcHBlbmJlbHQgcmVwb3J0ZWQgdGhhdCB3aGVuIHByb2Nlc3NpbmcgZG9tYWluIGFuZCBzZWFyY2ggbGluZXMgaW4KICB0aGUgcmVzb2x2LmNvbmYgZmlsZSwgdGhlIGZpcnN0IGVudHJ5IGVuY291bnRlcmVkIGlzIHByb2Nlc3NlZCBhbmQgdXNlZCBhcwogIHRoZSBzZWFyY2ggbGlzdC4gQWNjb3JkaW5nIHRvIHRoZSBtYW51YWwgcGFnZXMgZm9yIGJvdGggTGludXgsIFNvbGFyaXMgYW5kCiAgVHJ1NjQsIHRoZSBsYXN0IGVudHJ5IG9mIGVpdGhlciBhIGRvbWFpbiBvciBhIHNlYXJjaCBmaWVsZCBpcyB1c2VkLgoKICBUaGlzIGlzIG5vdyBhZGp1c3RlZCBpbiB0aGUgY29kZQoKVmVyc2lvbiAxLjIuMCAoQXByaWwgMTMsIDIwMDQpCgoqIEFwcmlsIDIsIDIwMDQKLSBVcGRhdGVkIHZhcmlvdXMgbWFuIHBhZ2VzIHRvIGxvb2sgbmljZXIgd2hlbiBjb252ZXJ0ZWQgdG8gSFRNTCBvbiB0aGUgd2ViCiAgc2l0ZS4KCiogQXByaWwgMSwgMjAwNAotIERpcmsgTWFuc2tlIHByb3ZpZGVkIGEgbmV3IGZ1bmN0aW9uIHRoYXQgaXMgbm93IG5hbWVkIGFyZXNfY2FuY2VsKCkuIEl0IGlzCiAgdXNlZCB0byBjYW5jZWwvY2xlYW51cCBhIHJlc29sdmUvcmVxdWVzdCBtYWRlIHVzaW5nIGFyZXMgZnVuY3Rpb25zIG9uIHRoZQogIGdpdmVuIGFyZXMgY2hhbm5lbC4gSXQgZG9lcyBub3QgZGVzdHJveS9raWxsIHRoZSBhcmVzIGNoYW5uZWwgaXRzZWxmLgoKLSBEb21pbmljayBNZWdsaW8gY2xlYW5lZCB1cCB0aGUgZm9ybWF0dGluZyBpbiBzZXZlcmFsIG1hbiBwYWdlcy4KCiogTWFyY2ggMzAsIDIwMDQKLSBEb21pbmljayBNZWdsaW8ncyBuZXcgYXJlc19leHBhbmRfc3RyaW5nLiBBIGhlbHBlciBmdW5jdGlvbiB3aGVuIGRlY29kaW5nCiAgaW5jb21pbmcgRE5TIHBhY2thZ2VzLgoKLSBEYW5pZWwgU3RlbmJlcmcgbW9kaWZpZWQgdGhlIE1ha2VmaWxlLmluIHRvIHVzZSBhIGZvciBsb29wIGZvciB0aGUgbWFuIHBhZ2UKICBpbnN0YWxsYXRpb24gdG8gaW1wcm92ZSBvdmVydmlldyBhbmQgbWFrZSBpdCBlYXNpZXIgdG8gYWRkIG1hbiBwYWdlcy4KClZlcnNpb24gMS4xLjAgKE1hcmNoIDExLCAyMDA0KQoKKiBNYXJjaCA5LCAyMDA0Ci0gR2lzbGUgVmFuZW0gaW1wcm92ZWQgYnVpbGQgb24gV2luZG93cy4KCiogRmVicnVhcnkgMjUsIDIwMDQKLSBEYW4gRmFuZHJpY2ggZm91bmQgYSBmbGF3IGluIHRoZSBGZWIgMjIgZml4LgoKLSBBZGRlZCBiZXR0ZXIgY29uZmlndXJlIC0tZW5hYmxlLWRlYnVnIGxvZ2ljICh0YWtlbiBmcm9tIHRoZSBjdXJsIGNvbmZpZ3VyZQogIHNjcmlwdCkuIEFkZGVkIGFjaW5jbHVkZS5tNCB0byB0aGUgdGFyYmFsbC4KCiogRmVicnVhcnkgMjMsIDIwMDQKLSBSZW1vdmVkIGFyZXNfZnJlZV9lcnJtZW0oKSwgdGhlIGZ1bmN0aW9uLCB0aGUgZmlsZSBhbmQgdGhlIG1hbiBwYWdlLiBJdCB3YXMKICBub3QgdXNlZCBhbmQgaXQgZGlkIG5vdGhpbmcuCgotIEZpeGVkIGEgbG90IG9mIGNvZGUgdGhhdCB3YXNuJ3QgIjY0Yml0IGNsZWFuIiBhbmQgdGh1cyBjYXVzZWQgYSBsb3Qgb2YKICBjb21waWxlciB3YXJuaW5ncyBvbiBwaWNreSBjb21waWxlcnMuCgoqIEZlYnJ1YXJ5IDIyLCAyMDA0Ci0gRG9taW5pY2sgTWVnbGlvIG1hZGUgYXJlcyBpbml0IHN1cHBvcnQgbXVsdGlwbGUgbmFtZSBzZXJ2ZXJzIGluIHRoZQogIE5hbWVTZXJ2ZXIga2V5IG9uIFdpbmRvd3MuCgoqIEZlYnJ1YXJ5IDE2LCAyMDA0Ci0gTW9kaWZpZWQgYXJlc19wcml2YXRlLmggdG8gaW5jbHVkZSBsaWJjdXJsJ3MgbWVtb3J5IGRlYnVnIGhlYWRlciBpZgogIENVUkxERUJVRyBpcyBzZXQuIFRoaXMgbWFrZXMgYWxsIHRoZSBhcmVzLWZ1bmN0aW9ucyBzdXBlcnZpc2VkIHByb3Blcmx5IGJ5CiAgdGhlIGN1cmwgdGVzdCBzdWl0ZS4gVGhpcyBhbHNvIGZvcmNlZCBtZSB0byBhZGQgaW5jbHVzaW9uIG9mIHRoZQogIGFyZXNfcHJpdmF0ZS5oIGhlYWRlciBpbiBhIGZldyBtb3JlIGZpbGVzIHRoYXQgYXJlIHVzaW5nIHNvbWUga2luZCBvZgogIG1lbW9yeS1yZWxhdGVkIHJlc291cmNlcy4KCi0gTWFkZSB0aGUgbWFrZWZpbGUgb25seSBidWlsZCBhaG9zdCBhbmQgYWRpZyBpZiAnbWFrZSBkZW1vcycgaXMgdXNlZC4KCiogRmVicnVhcnkgMTAsIDIwMDQKLSBEaXJrIE1hbnNrZSBtYWRlIGFyZXNfdmVyc2lvbi5oIGluc3RhbGxlZCB3aXRoICdtYWtlIGluc3RhbGwnCgoqIEZlYnJ1YXJ5IDQsIDIwMDQKLSBhcmVzX2ZyZWVfZXJybWVtKCkgaXMgc3ViamVjdCBmb3IgcmVtb3ZhbCwgaXQgaXMgc2ltcGx5IHByZXNlbnQgZm9yIGZ1dHVyZQogIHB1cnBvc2VzLCBhbmQgc2luY2Ugd2UgcmVtb3ZlZCB0aGUgZXh0cmEgcGFyYW1ldGVyIGluIHN0cmVycm9yKCkgaXQgd29uJ3QKICBiZSB1c2VkIGJ5IGMtYXJlcyEKLSBjb25maWd1cmUgLS1lbmFibGUtZGVidWcgbm93IGVuYWJsZXMgcGlja3kgY29tcGlsZXIgb3B0aW9ucyBpZiBnY2MgaXMgdXNlZAotIGZpeGVkIHNldmVyYWwgY29tcGlsZXIgd2FybmluZ3MgLS1lbmFibGUtZGVidWcgc2hvd2VkIGFuZCBKb2VyZyBNdWVsbGVyLVRvbGsKICByZXBvcnRlZAoKVmVyc2lvbiAxLjAuMCAoRmVicnVhcnkgMywgMjAwNCkKCiogRmVicnVhcnkgMywgMjAwNAotIG5vdyB3ZSBwcm9kdWNlIHRoZSBsaWJjYXJlcy5hIGxpYnJhcnkgaW5zdGVhZCBvZiB0aGUgcHJldmlvdXMgbGliYXJlcy5hCiAgc2luY2Ugd2UgYXJlIG5vIGxvbmdlciBjb21wYXRpYmxlCgoqIEZlYnJ1YXJ5IDIsIDIwMDQKCi0gYXJlc19zdHJlcnJvcigpIGhhcyBvbmUgYXJndW1lbnQgbGVzcy4gVGhpcyBpcyB0aGUgZmlyc3Qgb2ZmaWNpYWwKICBtb2RpZmljYXRpb24gb2YgdGhlIGV4aXN0aW5nIHByb3ZpZGVkIGFyZXMgQVBJLgoKKiBKYW51YXJ5IDI5LCAyMDA0CgotIERpcmsgTWFuc2tlIGZpeGVkIGhvdyB0aGUgc29ja2V0IGlzIHNldCBub24tYmxvY2tpbmcuCgoqIEphbnVhcnkgNCwgMjAwNAoKLSBEb21pbmljayBNZWdsaW8gbWFkZSB0aGUgcHJpdmF0ZSBnZXR0aW1lb2ZkYXkoKSBiZWNvbWUgYXJlc19nZXR0aW1lb2ZkYXkoKQogIGluc3RlYWQgaW4gb3JkZXIgdG8gbm90IHBvbGx1dGUgdGhlIG5hbWUgc3BhY2UgYW5kIHJpc2sgY29sbGlkaW5nIHdpdGgKICBvdGhlciBsaWJyYXJpZXMnIHZlcnNpb25zIG9mIHRoaXMgZnVuY3Rpb24uCgoqIE9jdG9iZXIgMjQsIDIwMDMuIERhbmllbCBTdGVuYmVyZwoKICBBZGRlZCBhcmVzX3ZlcnNpb24oKS4KClZlcnNpb24gMS4wLXByZTEgKDggT2N0b2JlciAyMDAzKQoKLSBKYW1lcyBCdXJzYSBtYWRlIGl0IHJ1biBvbiBSSVNDIE9TCgotIERvbWluaWNrIE1lZ2xpbyBtYWRlIGl0IHJ1biBmaW5lIG9uIE5UNAoKLSBEdW5jYW4gV2lsY294IG1hZGUgaXQgd29yayBmaW5lIG9uIE1hYyBPUyBYCgotIERhbmllbCBTdGVuYmVyZyBhZGp1c3RlZCB0aGUgd2luZG93cyBwb3J0CgotIGxpcmVuIGF0IHZpdmlzaW1vLmNvbSBtYWRlIHRoZSBpbml0aWFsIHdpbmRvd3MgcG9ydAoKKiBJbXBvcnRlZCB0aGUgc291cmNlcyBmcm9tIGFyZXMgMS4xLjEK