ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8gICBfIF9fX18gIF8gICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX198IHwgfCB8ICBfIFx8IHwgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyBfX3wgfCB8IHwgfF8pIHwgfCAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgKF9ffCB8X3wgfCAgXyA8fCB8X19fIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxfX198XF9fXy98X3wgXF9cX19fX198CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSGlzdG9yeSBvZiBDaGFuZ2VzCgpEYW5pZWwgKDE0IEFwcmlsIDIwMDIpCi0gRGlyayBNYW5za2UgYnJvdWdodCBhIGZpeCB0aGF0IG1ha2VzIGxpYmN1cmwgc3RyaXAgb2ZmIHdoaXRlIHNwYWNlcyBmcm9tIHRoZQogIGJlZ2lubmluZyBvZiBjb29raWUgY29udGVudHMuCgotIEhhZCB0byBwYXRjaCBpbmNsdWRlL2N1cmwvY3VybC5oIHNpbmNlIE1TVkMgZG9lc24ndCBzZXQgdGhlIF9fU1REQ19fIGRlZmluZS4KICBNb29uZXNhbXkgcG9pbnRlZCBvdXQgdGhlIHByb2JsZW0sIEJqb3JuIFJlZXNlIHRoZSBzb2x1dGlvbi4KClZlcnNpb24gNy45LjYtcHJlNQoKRGFuaWVsICgxMiBBcHJpbCAyMDAyKQotIEZpeGVkIHRoZSBUSU1FUl9DT05ORUNUIHRvIGJlIG1vcmUgYWNjdXJhdGUgZm9yIEZUUCB0cmFuc2ZlcnMuIFByZXZpb3VzbHkKICBGVFAgdHJhbnNmZXJzIGdvdCB0aGUgImNvbm5lY3QgZG9uZSIgdGltZSBzZXQgYWZ0ZXIgdGhlIGluaXRpYWwgRlRQIGNvbW1hbmRzCiAgYW5kIG5vdCBkaXJlY3RseSBhZnRlciB0aGUgVENQL0lQIGNvbm5lY3QgYXMgaXQgc2hvdWxkLgoKICBJIGFsc28gbWFkZSB0aGUgdGltZSBzdGFtcCBnZXQgc2V0IGV2ZW4gaWYgdGhlIGNvbm5lY3QgaXRzZWxmIGZhaWxzLCB3aGljaAogIGl0IGRpZG4ndCBkbyBwcmV2aW91c2x5LgoKLSBKZWFuLVBoaWxpcHBlIEJhcnJldHRlLUxhUGllcnJlIHByb3ZpZGVkIGhpcyBwYXRjaCB0aGF0IGludHJvZHVjZXMKICBDVVJMT1BUX0RFQlVHRlVOQ1RJT04gYW5kIENVUkxPUFRfREVCVUdEQVRBLiBUaGV5IGFsbG93IGEgcHJvZ3JhbSB0byBhIHNldCBhCiAgY2FsbGJhY2sgdG8gcmVjZWl2ZSBkZWJ1Zy9pbmZvcm1hdGlvbiBkYXRhLiBUaGF0IGluY2x1ZGVzIGhlYWRlcnMgYW5kIGRhdGEKICB0aGF0IGlzIHJlY2VpdmVkIGFuZCBzZW50LiBDVVJMT1BUX1ZFUkJPU0Ugc3RpbGwgY29udHJvbHMgaXQuCgogIEJ5IGRlZmF1bHQsIHRoZXJlIGlzIGFuIGludGVybmFsIGRlYnVnZnVuY3Rpb24gdGhhdCB3aWxsIG1ha2UgdGhpbmdzIGxvb2sKICBhbmQgd29yayBhcyBiZWZvcmUgaWYgbm90IGNoYW5nZWQuCgpEYW5pZWwgKDEwIEFwcmlsIDIwMDIpCi0gU2ViYXN0aWVuIFdpbGxlbWlqbnMgZm91bmQgb3V0IHRoYXQgLXggZGlkbid0IHVzZSB0aGUgZGVmYXVsdCBwb3J0IG51bWJlciBhcwogIGlzIGRvY3VtZW50ZWQuIEl0IGRvZXMgbm93LgoKLSBsaWJjdXJsLWVycm9ycy4zIGlzIGEgbmV3IG1hbiBwYWdlIGF0dGVtcHRpbmcgdG8gZG9jdW1lbnQgYWxsIGxpYmN1cmwgZXJyb3IKICBjb2RlcwoKLSBBZGRlZCB0d28gbmV3IGVycm9yIGNvZGVzIGFuZCBjaGFuZ2VkIHRoZSBiZWhhdmlvdXIgb2YgdHdvIG9sZCBvbmVzCiAgc2xpZ2h0bHk6CgogIENVUkxFX1dSSVRFX0VSUk9SCiAgIFRoaXMgZXJyb3Igd2FzIHJldHVybmVkICpib3RoKiBmb3IgZXJyb3JzIHRoYXQgb2NjdXJlZCB3aGVuIHdyaXRpbmcKICAgcmVjZWl2ZWQgZGF0YSB0byBhIGxvY2FsIGZpbGUsIGFzIHdlbGwgYXMgd2hlbiB3ZSBnZXQgcHJvYmxlbXMgd3JpdGluZyBkYXRhCiAgIHRvIGEgcmVtb3RlIHNlcnZlci4gQ1VSTEVfU0VORF9FUlJPUiBoYXMgbm93IGJlZW4gYWRkZWQgZm9yIHRoZSBsYXR0ZXIKICAgZXJyb3IuCgogIENVUkxFX1JFQURfRVJST1IKICAgVGhpcyBlcnJvciB3YXMgc2ltaWxhcmx5IHJldHVybmVkICpib3RoKiBmb3IgZXJyb3JzIHdoZW4gcmVhZGluZyBhIGxvY2FsCiAgIGZpbGUsIGFzIHdlbGwgYXMgd2hlbiBnZXR0aW5nIHByb2JsZW1zIHdoZW4gcmVhZGluZyBuZXR3b3JrIGRhdGEuCiAgIENVUkxFX1JFQ1ZfRVJST1IgaGFzIG5vdyBiZWVuIGFkZGVkIGZvciB0aGUgbGF0dGVyIGVycm9yLgoKIChUd28gdGVzdCBjYXNlcyB3ZXJlIGFkanVzdGVkIGFjY29yZGluZ2x5LikKCkRhbmllbCAoOSBBcHJpbCAyMDAyKQotIHJ1bnRlc3RzLnBsIG5vdyBzZXRzIHRoZSBIT01FIHZhcmlhYmxlIGJlZm9yZSBydW5uaW5nIGN1cmwsIHRvIHByZXZlbnQgYW55CiAgYWN0dWFsIH4vLmN1cmxyYyBmaWxlIHRvIGZvb2wgdGhlIHRlc3RzIQoKVmVyc2lvbiA3LjkuNi1wcmU0CgpEYW5pZWwgKDggQXByaWwgMjAwMikKLSBNaWNoYWVsIEN1cnRpcyBwcm92aWRlZCBuZXcgZnVuY3Rpb25hbGl0eSBmb3IgY3VybCBvbiBzb21lIHBsYXRmb3Jtcy4gVXNpbmcKICB0aGUgLS1lbnZpcm9ubWVudCBvcHRpb24sIGN1cmwgd2lsbCAqc2V0KiBhIGJ1bmNoIG9mIGVudmlyb25tZW50IHZhcmlhYmxlcwogIHRvIHZhbHVlcy4gVGhlIG5hbWVzIGFyZSB0aGUgc2FtZSBvbmVzIGFzIGZvciB0aGUgLXcvLS13cml0ZW91dCBvcHRpb24uCgogIEZvciBub3csIHRoaXMgb25seSB3b3JrcyBvbiB0aGUgUklTQyBPUyB2ZXJzaW9uLCBhcyB0aGlzIGZlYXR1cmUgcmVsaWVzIG9uCiAgYm90aCBPUyBzdXBwb3J0IGFuZCB0aGF0IGl0IG1hdGNoZXMgT1MgcGFyYWRpZ21zLgoKLSBKYWNreSBMYW0gcHJvdmlkZWQgYSBmaXggZm9yIGdldHRpbmcgaGVhZGVycy1vbmx5IHdoZW4gdGhlIHJlcGx5IGlzIEhUVFAvMS4wCiAgYW5kIDMwNCwgSSBlZGl0ZWQgaXQgc2xpZ2h0bHkuCgpEYW5pZWwgKDUgQXByaWwgMjAwMikKLSBBcyByZXF1ZXN0ZWQgYnkgSmF5IEdyYXZlcywgdGhlICcuY3VybHJjJyBmaWxlIChvciBfY3VybHJjIGFzIGl0IGlzIGNhbGxlZAogIHdoZW4gdXNlZCBpbiB3aW5kb3dzKSwgaXMgbm93IGxvYWRlZCBmcm9tIHRoZSBjdXJyZW50IGRpcmVjdG9yeSBpZiB0aGUgSE9NRQogIGVudmlyb25tZW50IHZhcmlhYmxlIGlzbid0IHNldCAob3IgaWYgaXQgaXMgdG9vIGxvbmcpLiBJIGFsc28gZW5sYXJnZWQgdGhlCiAgYXJyYXkgdXNlZCB0byBzdG9yZSB0aGUgZnVsbCBmaWxlIHBhdGggaW4sIHRvIDUxMiBieXRlcy4KCi0gS2V2aW4gUm90aCBwb2ludGVkIG91dCB0byBtZSB3aHkgdGhlICIxOSBNYXJjaCIgY2hhbmdlIHJlZ2FyZGluZyAtRyBhbmQgLUkKICB3YXMgc3R1cGlkIGFuZCB0aGUgY2hhbmdlIHdhcyByZXZlcnRlZC4gQWRkZWQgdGVzdCBjYXNlIDQ4IHRvIHZlcmlmeSB0aGUKICBmdW5jdGlvbmFsaXR5LgoKVmVyc2lvbiA3LjkuNi1wcmUzCgpEYW5pZWwgKDQgQXByaWwgMjAwMikKLSBKb25hdGFuIExhbmRlciBicm91Z2h0IGEgcGF0Y2ggdGhhdCBtYWtlcyBjdXJsL2N1cmwuaCBjb21waWxlIG5pY2VseSBvbgogIHByZS1JU08gY29tcGlsZXJzLCBsaWtlIHdoZW4gdXNpbmcgZ2NjIC10cmFkaXRpb25hbC4KCkRhbmllbCAoMyBBcHJpbCAyMDAyKQotIEphY2t5IExhbSBpZGVudGlmaWVkIGEgZ2xpdGNoIHdoZW4gZ2V0dGluZyBoZWFkZXJzLW9ubHksIHdoZXJlIGxpYmN1cmwgd291bGQKICAiaGFuZyIgMSBzZWNvbmQgaW4gdmFpbiBpbiB0aGUgc2VsZWN0KCkgbG9vcCBiZWZvcmUgcmV0dXJuaW5nIGJhY2suCgotIFRvciBBcm50c2VuIGJyb3VnaHQgYSBwYXRjaCBmb3IgbXVsdGlwYXJ0IGZvcm1wb3N0cy4gSXQgdHVybmVkIG91dCB0aGF0IHRoZQogICJDR0lfTGl0ZSBQZXJsIHBhY2thZ2UiIG1ha2VzIHNvbWUgYmFkIGFzc3VtcHRpb25zIG9uIHdoYXQgbGV0dGVycyB0aGF0IG1heQogIGJlIHVzZWQgaW4gYm91bmRhcnkgc3RyaW5ncyBhbmQgdGh1cyBjdXJsIGNvdWxkIGNvbmZ1c2UgaXQgYnkgaW5jbHVkaW5nICcrJwogIGFuZCAnLycuIFdoaWxlIHRoaXMgaXMgc3RhbmRhcmRzLWNvbXBsaWFudCwgd2UgY2hhbmdlIHRoZSBiZWhhdmlvciB0byB3b3JrCiAgc21vb3RobHkgd2l0aCBleGlzdGluZyBzb2Z0d2FyZSBiYXNlZCBvbiB0aGF0IHBhY2thZ2UuCgpEYW5pZWwgKDIgQXByaWwgMjAwMikKLSBHZXJoYXJkIEhlcnJlIGZpbGVkIGJ1ZyByZXBvcnQgIzUzNjIzOCB3aGVyZSBoZSBwb2ludGVkIG91dCBhIGNyYXNoIGluCiAgdmVyYm9zZSBGVFAgcGFzc2l2ZSB0cmFuc2ZlcnMgZm9yIEFJWC4KCi0gQ2xhcmVuY2UgR2FyZG5lciBwb2ludGVkIG91dCBhIG1pbm9yIGZsYXcgaW4gaG93IGxpYmN1cmwgZGlkbid0IHByb3Blcmx5CiAgdGFrZSBjYXJlIG9mIGFsbCBlcnJvcnMgdGhhdCBTU0xfcmVhZCgpIGNvdWxkIHJldHVybi4KCi0gSmFja3kgTGFtIGZpeGVkIGEgTUFMTE9DREVCVUcgcHJvYmxlbSBpbiBsaWIvZ2V0aW5mby5jCgpEYW5pZWwgKDI3IE1hcmNoIDIwMDIpCi0gVC4gQmhhcmF0aCBwb2ludGVkIG91dCBhIGZsYXcgaW4gdGhlIGNvbm5lY3Rpb24gcmUtdXNlIGZ1bmN0aW9uIHRoYXQgZGlkbid0CiAgY2hlY2sgcHJveHkgY29ubmVjdGlvbnMgcHJvcGVybHkgZm9yICJkZWFkbmVzcyIgYmVmb3JlIHRoZXkgd2VyZSByZS11c2VkLgoKLSBQZWRybyBOZXZlcyBmb3VuZCBvdXQgdGhhdCBIVFRQIFBPU1Rpbmcgd2l0aCAtLWRhdGEtYmluYXJ5IGRpZCBub3QgcHJvcGVybHkKICB3b3JrIHVuZGVyIFdpbmRvd3MgYXMgdGhlIGZpbGUgc3BlY2lmaWVkIHdhc24ndCByZWFkIGZ1bGx5IGJpbmFyeSEKCkRhbmllbCAoMjUgTWFyY2ggMjAwMikKLSBKYWNreSBMYW0gYnJvdWdodCBhIGZpeCB0aGF0IGltcHJvdmVzIHRyZWF0bWVudCBvZiBjb29raWVzIHVzaW5nIGlkZW50aWNhbAogIGRvbWFpbnMgYnV0IHdpdGggbGVhZGluZyBkb3RzIHByb3Blcmx5LgoKRGFuaWVsICgyMiBNYXJjaCAyMDAyKQotIE1pa2xvcyBOZW1ldGggdXBkYXRlZCB0aGUgd2luZG93cyBzZWN0aW9uIG9mIHRoZSBkb2NzL0lOU1RBTEwgZmlsZSBhbmQgdGhlCiAgd2luZG93cyBtYWtlZmlsZXMuCgotIEpvbiBEaWxsb24gcHJvdmlkZWQgdXMgd2l0aCBzZXZlcmFsIGdvb2QtbG9va2luZyBjdXJsIGltYWdlcyBmb3IKICBwcm9tb3Rpb24uIFZpZXcgdGhlbSBoZXJlIGh0dHA6Ly9jdXJsLmhheHguc2UvaWNvbnMuaHRtbAoKRGFuaWVsICgyMCBNYXJjaCAyMDAyKQotIFBldGVyIFZlcmhhcyBmb3VuZCBvdXQgdGhhdCBDUkxGIHJlcGxhY2VtZW50IGluIHVwbG9hZHMgd2FzIG5vdCB3b3JraW5nLiBJCiAgZml4ZWQgaXQsIGFuZCBhZGRlZCB0ZXN0IGNhc2UgMTI4IHRoYXQgdmVyaWZpZXMgdGhlIGZ1bmN0aW9uYWxpdHkuCgotIFRoZSBsaXN0IGZvcm1lcmx5IGtub3duIGFzIGN1cmwtbWFpbiBpcyBub3cgbmFtZWQgY3VybC11c2VycyBhbmQgaXMgaG9zdGVkCiAgYnkgc291cmNlZm9yZ2UuIFN1c2JjcmliZSB0byB0aGUgbmV3IGxpc3QsIGdldCBvZmYgdGhlIG9sZCBvbmUuCgpWZXJzaW9uIDcuOS42LXByZTIKCkRhbmllbCAoMTkgTWFyY2ggMjAwMikKLSBNYWRlIC1HIGFuZCAtSSBvbiB0aGUgc2FtZSBjb21tYW5kIGxpbmUgY2F1c2UgYW4gZXJyb3IuCgotIE1vdmVkIHRoZSBtdWx0aS5oIGZpbGUgdG8gdGhlICJwdWJsaWMiIGluY2x1ZGUgZGlyZWN0b3J5IGFuZCBtYWRlIGl0IGdldAogIGluY2x1ZGVkIGJ5IGN1cmwuaCBzbyB0aGF0IG5vIGV4dHJhIGluY2x1ZGUgZmlsZXMgd2lsbCBiZSBuZWNlc3NhcnkgdG8gdXNlCiAgaXQuCgogIEFkZGVkIGRvY3MgYW5kIG1hbiBwYWdlcyBmb3IgdGhlIG11bHRpIGludGVyZmFjZSB0byB0aGUgcmVsZWFzZSBhcmNoaXZlLgogIEFkZGVkIHRoZSB0aHJlZSBleGFtcGxlIHNvdXJjZSBjb2RlcyB0b28uCgogIE5lY2Vzc2FyeSBzdGVwcyBpbiBteSBjYW1wYWlnbiB0byBzbmVhayBpbiB0aGUgbXVsdGkgaW50ZXJmYWNlLi4uIDstKQoKLSBVcGRhdGVkIHRoZSB5ZWFyIGluIGFsbCBjb3B5cmlnaHQgbm90aWNlcyBpbiBhbGwgQyBhbmQgSCBmaWxlcy4KCkRhbmllbCAoMTggTWFyY2ggMjAwMikKLSBUb21hcyBTemVwZSBmb3VuZCBvdXQgdGhhdCAtZCBhbmQgLUcgZGlkbid0IG1peCBhcyB0aGV5IHNob3VsZC4gSSBicm9rZSB0aGlzCiAgaW4gNy45LjUuLi4gQWRkZWQgdGVzdCBjYXNlIDMyIGZvciB0aGlzLgoKVmVyc2lvbiA3LjkuNi1wcmUxCgpEYW5pZWwgKDE2IE1hcmNoIDIwMDIpCi0gUGV0ZXIgVmVyaGFzIHBvaW50ZWQgb3V0IHRoYXQgdGhlIGN1cmxfZXNjYXBlIGFuZCBjdXJsX3Vuc2NhcGUgbWFuIHBhZ2VzCiAgY29udGFpbmVkIGZhY3R1YWwgZXJyb3JzLgoKLSBBbGJlcnQgQ2hveSBmb3VuZCBhbmQgY29ycmVjdGVkIGEgcHJvYmxlbSB3aXRoIHRoZSB2ZXJib3NlIG91dHB1dCB3aGVuIGRvaW5nCiAgUEFTViBmdHAgdHJhbnNmZXJzLiBJdCBjb3VsZCBtYWtlIGxpYmN1cmwgY3Jhc2guCgogIERldGFpbHMgaW4gYnVnIHJlcG9ydCAjNTMwNTYyOgogIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvdHJhY2tlci8/ZnVuYz1kZXRhaWwmYXRpZD0xMDA5NzYmYWlkPTUzMDU2MiZncm91cF9pZD05NzYKCkRhbmllbCAoMTUgTWFyY2ggMjAwMikKLSBKdW4taWNoaXJvIGl0b2p1biBIYWdpbm8gZmlsZWQgYnVnIHJlcG9ydCAjNTMwMjA0IHRoYXQgY2xlYXJseSBwb2ludGVkIG91dAogIHRoZSBQRl9JTkVUIGZpeCBmcm9tIEZlYnJ1YXJ5IDE5IGFzIGEgbm90LXZlcnktZ29vZCBmaXggYXMgaXQgYnJva2UgSVB2NgogIGNhcGFiaWxpdHkhIFRoYXQgcGF0Y2ggaXMgbm93IHJldmVydGVkLgoKICBUaGUgcHJvYmxlbSB3aXRoIHNsb3cgbmFtZSBsb29rdXBzIHdpdGggZ2V0YWRkcmluZm8oKSBvbiBub24tSVB2NiBlbmFibGVkCiAgaG9zdHMgYXJlIGluc3RlYWQgbWFkZSBieSBmaXJzdCBjaGVja2luZyBpZiB0aGUgc3RhY2sgaXMgSVB2Ni1lbmFibGVkIGFuZCBpZgogIG5vdCwgdGhlIFBGX0lORVQgaXMgdXNlZCBhbmQgb3RoZXJ3aXNlIHdlIGdvIHdpdGggdGhlIGZ1bGwgUEZfVU5TUEVDLgoKLSBULiBCaGFyYXRoIHBvaW50ZWQgb3V0IHRoYXQgd2hlbiB3ZSByZXR1cm4gYW4gImVycm9yIiBmcm9tIGEgV1JJVEVGVU5DVElPTgogIGFzIGRlc2NyaWJlZCBpbiB0aGUgbWFuIHBhZ2UsIGxpYmN1cmwgZGlkIG5vdCByZXR1cm4gdGhlIGRvY3VtZW50ZWQgZXJyb3IKICBjb2RlIChDVVJMRV9XUklURV9FUlJPUikgYnV0IHdvdWxkIGluc3RlYWQgcmV0dXJuIENVUkxFX1JFQURfRVJST1IuIFRoaXMgaXMKICBub3cgY29ycmVjdGVkLgoKRGFuaWVsICgxNCBNYXJjaCAyMDAyKQotIFNldHRpbmcgQ1VSTE9QVF9QT1NUIHdpdGhvdXQgc2V0dGluZyBDVVJMT1BUX1BPU1RGSUVMRFMgbm93IHJlYWQgdGhlIFBPU1QtCiAgZGF0YSBmcm9tIHRoZSBjYWxsYmFjay4KCi0gVGhlIEdPUEhFUiBzdXBwb3J0IHNlZW1zIHRvIGJlIGJyb2tlbi4gSSBkb24ndCB0aGluayBJJ2xsIGV2ZW4gc3RhcnQgZml4aW5nCiAgaXQgdW50aWwgc29tZW9uZSBlbHNlIGZpbmRzIG91dC4uLiA6LSkKCkRhbmllbCAoMTMgTWFyY2ggMjAwMikKLSBUcnlpbmcgJ2N1cmwgLUkgZnRwLnN1bmV0LnNlJyBvciBzaW1pbGFyIGRpZCBhIFNJWkUgb24gYSBzaWxseSAiKG5pbCkiCiAgc3RyaW5nLiBJZiBzdWNoIGEgZmlsZSB3b3VsZCBiZSBwcmVzZW50LCBjdXJsIHJldHVybmVkIHRoZSBzaXplIG9mIGl0ISBOb3cKICB3ZSBwcmV2ZW50IHRoaXMuCgotIEN1cmxfc2VuZGYoKSB3YXMgZml4ZWQgdG8gZGVhbCB3aXRoIHNpdHVhdGlvbiB3aGVyZSBDdXJsX3dyaXRlKCkgd291bGQndmUKICBibG9ja2VkIGFuZCB0aHVzIHJldHVybiAtMS4KCi0gU2V0dGluZyBDVVJMT1BUX1BST0dSRVNTRlVOQ1RJT04gdG8gTlVMTCBub3cgcmVzdG9yZXMgdGhlIGludGVybmFsIGZ1bmN0aW9uLgoKLSBBbGwgQ1VSTEZPUk1fKiBvcHRpb25zIGNhbiBub3cgYmUgdXNlZCBpbiBhIENVUkxGT1JNX0FSUkFZIGV4Y2VwdCB0aGUKICBDVVJMRk9STV9BUlJBWSBpdHNlbGYuIFRoaXMgd2FzIG5lY2Vzc2FyeSBzaW5jZSB3ZSBjb3VsZG4ndCBleHBhbmQgdGhlCiAgQ1VSTEZPUk1fKiBsaXN0IHByb3ByZWx5IGFuZCB1bnJlc3RyaWN0ZWQgdW50aWwgdGhpcyB3YXMgdGhlIGNhc2UuIEl0IHdhcwogIGFsc28gYSBiaXQgcGVjdWxpYXIgdG8gdXNlcnMgd2h5IHNvbWUgb3B0aW9ucyBjb3VsZCBiZSB1c2VkIGluIGFuIGFycmF5CiAgd2hpbGUgb3RoZXJzIGNvdWxkbid0LgoKLSBSZW1vdmVkIHNvbWUgc2lsbHkgQ1JMRiBsaW5lcyB0aGF0IGhhZCBhY2NpZGVudGFsbHkgc2xpcHBlZCBpbnRvIHNyYy9tYWluLmMKICBOaWNvIEJhZ2d1cyBwb2ludGVkIHRoZW0gb3V0IHRvIG1lLgoKRGFuaWVsICgxMSBNYXJjaCAyMDAyKQotIENVUkxGT1JNX0ZJTEVOQU1FIHdhcyBhZGRlZC4gVGhpcyBjYW4gYmUgc2V0IHdoZW4gY3JlYXRpbmcgYSBmaWxlIHVwbG9hZAogIHBhcnQsIHRvIHNldCB0aGUgJ2ZpbGVuYW1lJyBmaWVsZCB0byBhIGN1c3RvbSB2YWx1ZS4gSWYgdGhpcyBpc24ndCB1c2VkLAogIHRoZSBhY3R1YWxseSB1c2VkIGZpbGVuYW1lIHdpbGwgYmUgaW5jbHVkZWQgaW5zdGVhZCAoYXMgbGliY3VybCBhbHdheXMgaGFzCiAgZG9uZSkuIGN1cmwgd2FzIGFkanVzdGVkIGFjY29yZGluZ2x5LCBhbmQgbm93IC1GIGFjY2VwdHMgYSAnZmlsZW5hbWU9JyBmaWVsZAogIHRvbywgYW5kIGFsbG93cyBjb25zdHJ1Y3RzIHN1Y2ggYXM6CgogICAgLUYgJ25hbWU9QGZpbGVuYW1lO2ZpbGVuYW1lPS9kZXYvbnVsbCcKCiAgYW5kIHRoaXMgY2FuIGJlIGNvbWJpbmVkIHdpdGggdHlwZT0gdG9vLCBpbiBhIG1hbm5lciBzaW1pbGFyIHRvOgoKICAgLUYgImZpbGU9QGxvZy90ZXN0MzkudHh0O2ZpbGVuYW1lPWZha2VyZmlsZTt0eXBlPW1vby9mb29iYXIiCgogIFRlc3QgY2FzZSAzOSB3YXMgYWRkZWQgdG8gdmVyaWZ5IHRoaXMgZnVuY3Rpb25hbGl0eS4KCi0gVGhlIHN0cnVjdCBmb3JtZXJseSBrbm93biBhcyBIdHRwUG9zdCBpcyBub3cgbmFtZWQgY3VybF9odHRwcG9zdCB0byBwcm9wZXJseQogIHVzZSB0aGUgY3VybCBuYW1lIHNwYWNlLiBJIGFkZGVkIGEgI2RlZmluZSBmb3IgdGhlIG9sZCBuYW1lIHRvIG1ha2UgZXhpc3RpbmcKICBwcm9ncmFtcyBjb21waWxlIGV2ZW4gd2hlbiB0aGlzIG5ldyBpbmNsdWRlIGZpbGUgaXMgdXNlZC4KCkRhbmllbCAoOCBNYXJjaCAyMDAyKQotIENsaWZmb3JkIGFsc28gZGlzY292ZXJlZCB0aGF0IGlmIHRoZSBjbGllbnQgY29kZSBmYWlsZWQgZWFybHksIGFzIHdoZW4gZG9pbmcKICAiY3VybCAtTyIgb25seSwgaXQgd291bGQgZG8gZmNsb3NlKE5VTEwpIHdoaWNoIGNhdXNlZCBhIHNlZ21lbnRhdGlvbiBmYXVsdAogIG9uIHNvbWUgc3lzdGVtcy4KCi0gQ2xpZmZvcmQgV29sZiBwcm92aWRlZCBhIHBhdGNoIHRoYXQgbWFkZSAtLXByb2dyZXNzLWJhciB3b3JrIGFnYWluLgoKLSBJIGNsb3NlZCBidWcgcmVwb3J0ICM1MjcwMzIgYnkgbWFraW5nIHN1cmUgdGhhdCB3ZSBhZGQgYSBuZXdsaW5lIGFmdGVyIGEKICB0cmFuc2ZlciB3aGVuIC0tcHJvZ3Jlc3MtYmFyIGhhcyBiZWVuIHVzZWQuIEJlZm9yZSwgd2l0aG91dCB0aGUgbmV3bGluZSwgaXQKICBtYWRlIHRoZSBzdWJzZXF1ZW50IHRleHQgY29tZSBvdXQgd3JvbmcuCgpWZXJzaW9uIDcuOS41CgpEYW5pZWwgKDcgTWFyY2ggMjAwMikKLSBBZGRlZCBkb2NzL0tOT1dOX0JVR1MgdG8gdGhlIHJlbGVhc2UgYXJjaGl2ZS4KCkRhbmllbCAoNiBNYXJjaCAyMDAyKQotIEtldmluIFJvdGggY29ycmVjdGVkIGEgZmxhdyBpbiB0aGUgY3VybCBjbGllbnQgZ2xvYmJpbmcgY29kZSB0aGF0IG1hZGUgaXQKICBtZXNzIHVwIGJhY2tzbGFzaGVzLiBUaGlzIHdhcyBtb3N0IG5vdGFibGUgb24gd2luZG93cyAoY3lnd2luKSBtYWNoaW5lcyB3aGVuCiAgdXNpbmcgZmlsZTovLy4KCi0gQnJhZCBwcm92aWRlZCBhbm90aGVyIGZpeCBmb3IgYnVpbGRpbmcgb3V0c2lkZSB0aGUgc291cmNlLXRyZWUuCgotIFJhbHBoIE1pdGNoZWxsIHBhdGNoZWQgYXdheSBhIGZldyBjb21waWxlciB3YXJuaW5ncyBpbiB0ZXN0cy9zZXJ2ZXIvc3dzLmMKCkRhbmllbCAoNSBNYXJjaCAyMDAyKQotIEkgbm90aWNlZCB0aGF0IHRoZSB0eXBlZGVmIGluIGN1cmwuaCBmb3IgdGhlIHByb2dyZXNzIGNhbGxiYWNrIHByb3RvdHlwZSB3YXMKICB3cm9uZyBhbmQgdGh1cyBhcHBsaWNhdGlvbnMgdGhhdCB1c2VkIGl0IHdvdWxkIG5vdCBnZXQgdGhlIHByb3BlciBpbnB1dAogIGRhdGEuIEl0IHVzZWQgc2l6ZV90IHdoZXJlIHRoZSBpbXBsZW1lbnRhdGlvbiBhY3R1YWxseSB1c2VzIGRvdWJsZXMhCgogIEkgd2lzaCBJIGNvdWxkIGJsYW1lIHNvbWVvbmUgZWxzZSwgYnV0IHRoaXMgd2FzIG15IGZhdWx0LiBBZ2Fpbi4KClZlcnNpb24gNy45LjUtcHJlNgoKRGFuaWVsICg0IE1hcmNoIDIwMDIpCi0gQ3V0IG9mZiB0aGUgY2hhbmdlcyBkb25lIGR1cmluZyAyMDAxIGZyb20gdGhpcyBjaGFuZ2Vsb2cgZmlsZSBhbmQgcHV0IHRoZW0KICBpbiBhIHNlcGFyYXRlIGZpbGUgKENIQU5HRVMuMjAwMSksIGF2YWlsYWJsZSBmcm9tIENWUyBvZiBjb3Vyc2UuCgotIEkgcmVtb3ZlZCB0aGUgbXVsdGkgZGlyZWN0b3J5LiBUaGUgZXhhbXBsZSBzb3VyY2VzIHdlcmUgbW92ZWQgdG8gdGhlCiAgZG9jcy9leGFtcGxlcyBkaXJlY3Rvcnkgd2hlcmUgdGhleSBiZWxvbmcuCgotIFdyb3RlIDcgbmV3IG1hbiBwYWdlcyBmb3IgdGhlIGN1cnJlbnQgZnVuY3Rpb25zIGluIHRoZSBuZXcgbXVsdGkgaW50ZXJmYWNlLgogIFRoZXkncmUgYWxsIHN0aWxsIHByZXR0eSBiYXNpYywgYnV0IHdlIGNhbiB1c2UgdGhlbSBhcyBhIHN0YXJ0IGFuZCBhZGQgbW9yZQogIGNvbnRlbnRzIHRvIHRoZW0gd2hlbiB3ZSBmaWd1cmUgb3V0IHdoYXQgdG8gd3JpdGUuIFRoZSBsYXJnZSBhbW91bnQgb2YgbWFuCiAgcGFnZXMgZm9yIGxpYmN1cmwgbm93IHByZXNlbnQgbWFkZSBtZSBkZWNpZGUgdG8gcHV0IHRoZW0gaW4gYSBuZXcgc2VwYXJhdGUKICBzdWJkaXJlY3RvcnkgaW4gdGhlIGRvY3MgZGlyZWN0b3J5LiBOYW1lZCBsaWJjdXJsLgoKLSBHaXVzZXBwZSBDb3JiZWxsaSBwcm92aWRlZCBhIHRlbXBsYXRlIGZpbGUgZm9yIHRoZSBFUE0gcGFja2FnZSBtYW5hZ2VyLCBpdAogIGdldHMgZ2VuZXJhdGVkIG5pY2VseSBieSB0aGUgY29uZmlndXJlIHNjcmlwdCBub3cuCgpWZXJzaW9uIDcuOS41LXByZTUKCkRhbmllbCAoMSBNYXJjaCAyMDAyKQotIE1vdmVkIHRoZSBtZW1hbmFseXplLnBsIHNjcmlwdCBpbnRvIHRoZSB0ZXN0cy8gZGlyIGFuZCBhZGRlZCBpdCB0byB0aGUKICByZWxlYXNlIGFyY2hpdmVzLiBJdCB3YXMgcHJldmlvdXNseSBvbmx5IHByZXNlbnQgaW4gdGhlIENWUyB0cmVlLgoKLSBNb2RpZmllZCB0aGUgRmVicnVhcnkgMTd0aCBIb3N0OiBmaXgsIGFzIGJ1ZyByZXBvcnQgIzUyMzcxOCBwb2ludGVkIG91dCB0aGF0CiAgaXQgY2F1c2VkIGNyYXNoZXMhCgotIE5pY28gQmFnZ3VzIGFkZGVkIG1vcmUgZXJyb3IgY29kZXMgdG8gdGhlIFZNUyBzdHVmZi4KCi0gV2VzbGV5IExheHRvbiBicm91Z2h0IHRoZSBjb2RlIHRoYXQgaW50cm9kdWNlZCB0aGUgbmV3IENVUkxPUFRfUFJFUVVPVEUKICBvcHRpb24uIEl0IGlzIGp1c3QgYW5vdGhlciBGVFAgcXVvdGUgb3B0aW9uIHRoYXQgYWxsb3dzIHRoZSB1c2VyIHRvIHNwZWNpZnkKICBhIGxpc3Qgb2YgRlRQIGNvbW1hbmRzIHRvIGlzc3VlICpqdXN0IGJlZm9yZSogdGhlIHRyYW5zZmVyIGNvbW1hbmQgKFJFVFIgb3IKICBTVE9SIGV0YykuIEl0IGhhcyB0dXJuZWQgdXAgYSBmZXcgc3lzdGVtcyB0aGF0IHJlYWxseSBuZWVkIHRoaXMuCgogIFRoZSBjdXJsIGNvbW1hbmQgbGluZSB0b29sIGNhbiBhbHNvIHRha2UgYWR2YW50YWdlIG9mIHRoaXMgYnkgcHJlZml4aW5nIHRoZQogIHF1b3RlIGNvbW1hbmRzIHdpdGggYSBwbHVzICgrKSBpbiBzaW1pbGFyIHN0eWxlIHRoYXQgcG9zdCB0cmFuc2ZlciBxdW90ZQogIGNvbW1hbmRzIGFyZSBzcGVjaWZpZWQuCgogIFRoaXMgaXMgbm90IHlldCBkb2N1bWVudGVkLiBUaGVyZSBpcyBubyB0ZXN0IGNhc2UgZm9yIHRoaXMgeWV0LgoKRGFuaWVsICgyOCBGZWJydWFyeSAyMDAyKQotIFJhbHBoIE1pdGNoZWxsIG1hZGUgc29tZSBzZXJpb3VzIGVmZm9ydHMgYW5kIHB1dCBhIGxvdCBvZiBzd2VhdCBpbiBzZXR0aW5nCiAgdXAgc2NyaXB0cyBhbmQgdGhpbmdzIGZvciBtZSB0byBiZSBhYmxlIHRvIHJlcGVhdCBoaXMgcHJvYmxlbXMsIGFuZCBJCiAgZmluYWxseSBjb3VsZC4gIEkgZm91bmQgYSBwcm9ibGVtIHdpdGggdGhlIGhlYWRlciBieXRlIGNvdW50ZXIgdGhhdCB3YXNuJ3QKICBpbmNyZWFzZWQgcHJvcGVybHkgYW5kIHRodXMgd2UgY291bGQgcmV0dXJuIENVUkxFX0dPVF9OT1RISU5HIHdoZW4gd2UgaW4KICBmYWN0IGhhZCByZWNlaXZlZCBkYXRhLgoKRGFuaWVsICgyNyBGZWJydWFyeSAyMDAyKQotIEkgaGFkIHRvIHJldmVydCB0aGUgbm9uLXNwYWNlIHBhcnNpbmcgY29va2llIGZpeCBJIHBvc3RlZCB0byB0aGUgbWFpbGluZwogIGxpc3QuIEV4cGlyZSBkYXRlcyBkbyBoYXZlIHNwYWNlcyBhbmQgc3RpbGwgbmVlZCB0byBnZXQgcGFyc2VkIHByb3Blcmx5IQogIEluc3RlYWQgd2UganVzdCBpZ25vcmUgdHJhaWxpbmcgd2hpdGUgc3BhY2UgYW5kIGl0IHNlZW1zIHRvIHdvcmsuLi4KCkRhbmllbCAoMjYgRmVicnVhcnkgMjAwMikKLSBNYWRlIHRoZSBjb29raWUgcHJvcGVydHkgJ01heC1BZ2UnIHdvcmssIGp1c3Qgc2luY2Ugd2UgYWxyZWFkeSB0cmllZCB0bwogIHN1cHBvcnQgaXQsIGl0IGlzIGJldHRlciB0byBkbyBpdCByaWdodC4gTm8gb25lIHVzZXMgdGhpcyBhbnl3YXkuCgotIFRoZSBjb29raWUgcGFyc2VyIGNvdWxkIGNyYXNoIGlmIGEgcmVhbGx5IHdlaXJkIChpbGxlZ2FsKSBjb29raWUgbGluZSB3YXMKICByZWNlaXZlZC4gSSBhbHNvIG1hZGUgaXQgYmV0dGVyIGRpc2NhcmQgcmVhbGx5IG9kZGx5IGZvcm1hdHRlZCBsaW5lcyBiZXR0ZXIuCgogIE1hZGUgdGhlIGNvb2tpZSBqYXIgc3RvcmUgdGhlIHNlY29uZCBmaWVsZCBmcm9tIHRoZSBsZWZ0IHVzaW5nIHRoZSBzeW50YXgKICB0aGF0IE5ldHNjYXBlIGFuZCBNb3ppbGxhIHByb2JhYmx5IGxpa2UuIEN1cmwgaXRzZWxmIGlnbm9yZXMgaXQuCgogIEFkZGVkIHRlc3QgY2FzZSAzMSBmb3IgdGhlc2UgY2FzZXMuCgogIENsYXkgTG92ZWxlc3MnIGVtYWlsIHJlZ2FyZGluZyBzb21lIGNvb2tpZSBpc3N1ZXMgc3RhcnRlZCBteSBjbGVhbnVwLgoKLSBLZXZpbiBSb3RoIHBvaW50ZWQgb3V0IHRoYXQgbXkgYXV0b21ha2UgZmlkZGxlcyBicm9rZSB0aGUgYWJpbGl0eSB0byBidWlsZAogIG91dHNpZGUgdGhlIHNvdXJjZS10cmVlIGFuZCBJIHBvc3RlZCBhIHBhdGNoIHRvIHRoZSBtYWlsaW5nIGxpc3QgdGhhdCBicmluZ3MKICB0aGlzIGFiaWxpdHkgYmFjay4KClZlcnNpb24gNy45LjUtcHJlNAoKRGFuaWVsICgyNSBGZWJydWFyeSAyMDAyKQotIEZpZGRsZWQgd2l0aCB0aGUgYXV0b21ha2UgZmlsZXMgdG8gbWFrZSBhbGwgc291cmNlIGZpbGVzIGluIHRoZSBsaWIKICBkaXJlY3Rvcnkgbm90IGhhdmUgLi4vc3JjIGluIHRoZSBpbmNsdWRlIHBhdGgsIGFuZCB0aGUgc3JjIHNvdXJjZXMgc2hvdWxkbid0CiAgaGF2ZSAuLi9saWIhCgotIEFsbCA3OSB0ZXN0IGNhc2VzIHJhbiBPSyB1bmRlciBMaW51eCBhbmQgU29sYXJpcyB1c2luZyB0aGUgbmV3IEhUVFAgc2VydmVyCiAgaW4gdGhlIHRlc3Qgc3VpdGUuIFRoZSBuZXcgSFRUUCBzZXJ2ZXIgd2FzIGZpcnN0IGRvbmF0ZWQgYnkgR2VvcmcgSG9ybiBhbmQKICBzdWJzZXF1ZW50bHkgbW9kaWZpZWQgdG8gd29yayB3aXRoIHRoZSB0ZXN0IHN1aXRlLiBJdCBpcyBjdXJyZW50bHkgc3RpbGwgbm90CiAgcG9ydGFibGUgZW5vdWdoIHRvIHJ1biBvbiAiYWxsIG92ZXIiIGJ1dCB0aGlzIGlzIGEgc3RhcnQgYW5kIEkgY2FuIHJ1biBhbGwKICBjdXJsIHRlc3RzIG9uIG15IG1hY2hpbmVzLiBUaGlzIGlzIGFuIGltcG9ydGFudCByZXF1aXJlbWVudCBmb3IgdGhlIHVwY29taW5nCiAgcHVibGljIHJlbGVhc2UuCgotIFVzaW5nIC1kIGFuZCAtSSBvbiB0aGUgc2FtZSBjb21tYW5kIGxpbmUgbm93IHJlcG9ydHMgYW4gZXJyb3IsIGFzIGl0IGltcGxpZXMKICB0d28gZGlmZmVyZW50IEhUVFAgcmVxdWVzdHMgdGhhdCBjYW4ndCBiZSBtaXhlZC4KCi0gSmVmZnJleSBQb2hsbWV5ZXIgcHJvdmlkZWQgYSBwYXRjaCB0aGF0IG1hZGUgdGhlIC13Ly0td3JpdGUtb3V0IG9wdGlvbgogIHN1cHBvcnQgJXtjb250ZW50X3R5cGV9IHRvIGdldCB0aGUgY29udGVudCB0eXBlIG9mIHRoZSByZWNlbnQgZG93bmxvYWQuCgotIEtldmluIFJvdGggcmVwb3J0ZWQgdGhhdCBwcmUyIGFuZCBwcmUzIGRpZG4ndCBjb21waWxlIHByb3Blcmx5IG9uIGN5Z3dpbiwKICBhbmQgdGhpcyB3YXMgYmVjYXVzZSBJIHVzZWQgI2lmZGVmIEhBVkVfV0lOU09DS19IIGluIGxpYi9tdWx0aS5oIHRvIGZpZ3VyZQogIG91dCBpZiB3ZSBjb3VsZCBpbmNsdWRlIHdpbnNvY2suaCB3aGljaCB0dXJucyBvdXQgbm90IHRvIGJlIGEgd2lzZSBjaG9pY2UgdG8KICBkbyBvbiBjeWd3aW4gc2luY2UgaXQgaGFzIHRoZSBmaWxlIGJ1dCBjYW4ndCBpbmNsdWRlIGl0IQoKRGFuaWVsICgyMiBGZWJydWFyeSAyMDAyKQotIEFkZGVkIHNyYy9jb25maWctdm1zLmggdG8gdGhlIHJlbGVhc2UgYXJjaGl2ZS4KCi0gRml4ZWQgdGhlIGNvbm5lY3Rpb24gdGltZW91dCB2YWx1ZSBhZ2FpbiwgdGhlIGNoYW5nZSBmcm9tIEZlYnJ1YXJ5IDE4IHdhc24ndAogIGNvbXBsZXRlLgoKVmVyc2lvbiA3LjkuNS1wcmUzCgpEYW5pZWwgKDIxIEZlYnJ1YXJ5IDIwMDIpCi0gS2V2aW4gUm90aCBhbmQgQW5kculzIEdhcmPtYSBib3RoIGZvdW5kIG91dCB0aGF0IGxpYi9jb25maWcuaC5pbiB3YXMgbWlzc2luZwogIGluIHRoZSBwcmUtcmVsZWFzZSBhcmNoaXZlIGFuZCB0aHVzIHRoZSBjb25maWd1cmUgc2NyaXB0IGZhaWxlZC4KClZlcnNpb24gNy45LjUtcHJlMgoKRGFuaWVsICgyMCBGZWJydWFyeSAyMDAyKQotIEFuZHLpcyBHYXJj7WEgcHJvdmlkZWQgYSBzb2x1dGlvbiB0byBidWcgcmVwb3J0ICM1MTUyMjguIHRoZSB0b3RhbCB0aW1lCiAgY291bnRlciB3YXMgbm90IHNldCBjb3JyZWN0bHkgd2hlbiAtSSB3YXMgdXNlZCBkdXJpbmcgc29tZSBjb25kaXRpb25zIChhbGwKICBoZWFkZXJzIHdlcmUgcmVhZCBpbiBvbmUgc2luZ2xlIHJlYWQpLgoKLSBOaWNvIEJhZ2d1cyBwcm92aWRlZCBhIGh1Z2UgcGF0Y2ggd2l0aCBtaW5vciB0d2Vha3MgYWxsIG92ZXIgdG8gbWFrZSBjdXJsCiAgY29tcGlsZSBuaWNlbHkgb24gVk1TLgoKRGFuaWVsICgxOSBGZWJydWFyeSAyMDAyKQotIFJpY2sgUmljaGFyZHNvbiBmb3VuZCBvdXQgdGhhdCBieSByZXBsYWNpbmcgUEZfVU5TUEVDIHdpdGggUEZfSU5FVCBpbiB0aGUKICBnZXRhZGRyaW5mbygpIGNhbGxzLCBoZSBjb3VsZCBzcGVlZCB1cCBzb21lIG5hbWUgcmVzb2x2aW5nIGNhbGxzIHdpdGggYW4KICBvcmRlciBvZiBtYWduaXR1ZGVzIG9uIGhpcyBSZWRoYXQgTGludXggNy4yLgoKLSBQaGlsaXAgR2xhZHN0b25lIGZvdW5kIGEgc2Vjb25kIElOQUREUl9OT05FIHByb2JsZW0gd2hlcmUgd2UgdXNlZCBsb25nCiAgaW50ZWFkIG9mIGluX2FkZHJfdCB3aGljaCBjYXVzZWQgNjRiaXQgcHJvYmxlbW9zLiBXZSByZWFsbHkgc2hvdWxkbid0IGRlZmluZQogIHRoYXQgb24gdHdvIGRpZmZlcmVudCBwbGFjZXMuCgpEYW5pZWwgKDE4IEZlYnJ1YXJ5IDIwMDIpCi0gUGhpbGlwIEdsYWRzdG9uZSBmb3VuZCBhIHByb2JsZW0gaW4gaG93IEhUVFAgcmVxdWVzdHMgd2VyZSBzZW50IGlmIHRoZQogIHJlcXVlc3QgY291bGRuJ3QgYmUgc2VudCBhbGwgYXQgb25jZS4KCi0gRW1pbCBmb3VuZCBhbmQgY29ycmVjdGVkIGEgYmFkIGNvbm5lY3Rpb24gdGltZW91dCBjb21wYXJpc29uIHRoYXQgbWFkZSBjdXJsCiAgdXNlIHRoZSBsb25nZXN0IG9mIGNvbm5lY3QtdGltZW91dCBhbmQgdGltb3V0IGFzIGEgdGltZW91dCB2YWx1ZSwgaW5zdGVhZCBvZgogIHRoZSBzaG9ydGVzdCBhcyBpdCB3YXMgc3VwcG9zZWQgdG8hCgotIEFyb24gUm9iZXJ0cyBwcm92aWRlZCB1cGRhdGVkIGluZm9ybWF0aW9uIGFib3V0IExEQVAgVVJMIHN5bnRheCB0byBnbyBpbnRvCiAgdGhlIG1hbnVhbCBhcyBhIHJlcGxhY2VtZW50IGZvciB0aGUgb2xkIHJlZmVyZW5jZXMuCgpEYW5pZWwgKDE3IEZlYnJ1YXJ5IDIwMDIpCi0gUGhpbGlwIEdsYWRzdG9uZSBwb2ludGVkIG91dCB0d28gbWlzc2luZyBpbmNsdWRlIGZpbGVzIHRoYXQgbWFkZSBjdXJsIGNvcmUKICBkdW1wIG9uIDY0Yml0IGFyY2hpdGVjdHVyZXMuIFdlIG5lZWQgdG8gcGF5IG1vcmUgYXR0ZW50aW9uIG9uIHRoZXNlIGRldGFpbHMuCiAgSXQgaXMgKmxldGhhbCogdG8gZm9yIGV4YW1wbGUgZm9yZ2V0IHRoZSBtYWxsb2MoKSBwcm90b3R5cGUsIGFzICdpbnQnIGlzCiAgMzJiaXQgYW5kIG1hbGxvYygpIG11c3QgcmV0dXJuIGEgNjRiaXQgcG9pbnRlciBvbiB0aGVzZSBwbGF0Zm9ybXMuCgotIEdpYXNsYXMgR2Vvcmdpb3MgZml4ZWQgYSBwcm9ibGVtIHdpdGggSG9zdDogaGVhZGVycyBvbiByZXBlYXRlZCByZXF1ZXN0cyBvbgogIHRoZSBzYW1lIGhhbmRsZSB1c2luZyBhIHByb3h5LgoKRGFuaWVsICg4IEZlYnJ1YXJ5IDIwMDIpCi0gSGFubm8gTC4gS3Jhbnpob2ZmIGFjY3VyYXRlbHkgZm91bmQgb3V0IHRoYXQgZGlzYWJsaW5nIHRoZSBFeHBlY3Q6IGhlYWRlcgogIHdoZW4gZG9pbmcgbXVsdGlwYXJ0IGZvcm1wb3N0cyBkaWRuJ3Qgd29yayB2ZXJ5IHdlbGwuIEl0IGRpc2FibGVkIG90aGVyCiAgcGFydHMgb2YgdGhlIHJlcXVlc3QgaGVhZGVyIHRvbywgcmVzdWx0aW5nIGluIGEgYnJva2VuIGhlYWRlci4gV2hlbiBJIGZpeGVkCiAgdGhpcywgSSBhbHNvIG5vdGljZWQgdGhhdCB0aGUgQ29udGVudC1UeXBlIHdhc24ndCBwb3NzaWJsZSB0byBkaXNhYmxlLiBJdCBpcwogIG5vdywgZXZlbiB0aG91Z2ggaXQgcHJvYmFibHkgaXMgcmVhbGx5IHN0dXBpZCB0byB0cnkgdG8gZG8gdGhpcyAoYmVjYXVzZSBvZgogIHRoZSBib3VuZGFyeSBzdHJpbmcgdGhhdCBpcyBpbmNsdWRlZCBpbiB0aGUgaW50ZXJuYWxseSBnZW5lcmF0ZWQgaGVhZGVyLAogIHVzZWQgYXMgZm9ybSBwYXJ0IHNlcGFyYXRvci4pCgpEYW5pZWwgKDcgRmVicnVhcnkgMjAwMikKLSBJIG1vdmVkIHRoZSBjb25maWcqLmggZmlsZXMgZnJvbSB0aGUgcm9vdCBkaXJlY3RvcnkgdG8gdGhlIGxpYi8gZGlyZWN0b3J5LgoKLSBJJ3ZlIGFkZGVkIHRoZSBuZXcgdGVzdCBzdWl0ZSBIVFRQIHNlcnZlciB0byB0aGUgQ1ZTIHJlcG9zaXRvcnksIEl0IHNlZW1zIHRvCiAgd29yayBwcmV0dHkgZ29vZCBub3csIGJ1dCB3ZSBtdXN0IG1ha2UgaXQgZ2V0IHVzZWQgYnkgdGhlIHRlc3Qgc2NyaXB0cwogIHByb3Blcmx5IGFuZCB0aGVuIHdlIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgaXQgY29tcGlsZXMsIGJ1aWxkcyBhbmQgcnVucyBvbgogIG1vc3Qgb3BlcmF0aW5nIHN5c3RlbXMuCgpWZXJzaW9uIDcuOS41LXByZTEKCkRhbmllbCAoNiBGZWJydWFyeSAyMDAyKQotIE1pa2xvcyBOZW1ldGggcHJvdmlkZWQgdXBkYXRlZCB3aW5kb3dzIG1ha2VmaWxlcyBhbmQgSU5TVEFMTCBkb2NzLgoKLSBNciBMYXJyeSBGYWhub2UgZm91bmQgYSBwcm9ibGVtIHdpdGggZm9ybXBvc3RzIGFuZCBJIG1hbmFnZWQgdG8gdHJhY2sgZG93bgogIGFuZCBwYXRjaCB0aGlzIGJ1Zy4gVGhpcyB3YXMgYWN0dWFsbHkgdHdvIGJ1Z3MsIGFzIHRoZSBwb3N0ZWQgc2l6ZSB3YXMgYWxzbwogIHNhaWQgdG8gYmUgdHdvIGJ5dGVzIHRvbyBsYXJnZS4KCi0gQnJlbnQgQmVhcmRzbGV5IGZvdW5kIG91dCBhbmQgYnJvdWdodCBhIGNvcnJlY3Rpb24gZm9yIHRoZQogIENVUkxJTkZPX0NPTlRFTlRfVFlQRSBwYXJzZXIgdGhhdCB3YXMgb2ZmIG9uZSBieXRlLiBUaGlzIHdhcyBteSBmYXVsdCwgSQogIGFjY2lkZW50YWx5IGJyb2tlIEdpYXNsYXMgR2Vvcmdpb3MnIHBhdGNoLgoKRGFuaWVsICg1IEZlYnJ1YXJ5IDIwMDIpCi0gS2V2aW4gUm90aCBmb3VuZCB5ZXQgYW5vdGhlciBTU0wgZG93bmxvYWQgcHJvYmxlbS4KClZlcnNpb24gNy45LjQKCi0gbm8gY2hhbmdlcyBzaW5jZSBwcmUtcmVsZWFzZQoKVmVyc2lvbiA3LjkuNC1wcmUyCgpEYW5pZWwgKDMgRmVicnVhcnkgMjAwMikKLSBFcmljIE1lbHZpbGxlIHByb3ZpZGVkIGEgZmV3IHNwZWxsaW5nIGNvcnJlY3Rpb25zIGluIHRoZSBjdXJsIG1hbiBwYWdlLgoKRGFuaWVsICgxIEZlYnJ1YXJ5IDIwMDIpCi0gQW5kcmVhcyBEYW1tIGNvcnJlY3RlZCB0aGUgdW5jb25kaXRpb25hbCB1c2Ugb2YgZ210aW1lKCkgaW4gZ2V0ZGF0ZSwgaXQgbm93CiAgdXNlcyBnbXRpbWVfcigpIG9uIGFsbCBob3N0cyB0aGF0IGhhdmUgaXQuCgpEYW5pZWwgKDMxIEphbnVhcnkgMjAwMikKLSBBbiBhbm9ueW1vdXMgYnVnIHJlcG9ydCBpZGVudGlmaWVkIGEgcHJvYmxlbSBpbiB0aGUgRE5TIGNhY2hpbmcgd2hpY2ggbWFkZSBpdAogIHNvbWV0aW1lcyBhbGxvY2F0ZSBvbmUgYnl0ZSB0b28gbGl0dGxlIHRvIHN0b3JlIHRoZSBjYWNoZSBlbnRyeSBpbi4gVGhpcwogIGhhcHBlbmVkIHdoZW4gdGhlIHBvcnQgbnVtYmVyIHN0YXJ0ZWQgd2l0aCAxIQoKLSBBbGJlcnQgQ2hpbiBwcm92aWRlZCBhIHBhdGNoIHRoYXQgaW1wcm92ZXMgdGhlIGdldGhvc3RieW5hbWVfcigpIGNvbmZpZ3VyZQogIGNoZWNrIG9uIEhQLVVYIDExLjAwLgoKVmVyc2lvbiA3LjkuNC1wcmUxCgpEYW5pZWwgKDMwIEphbnVhcnkgMjAwMikKLSBHZW9yZyBIb3JuIGZvdW5kIGFub3RoZXIgd2F5IHRoZSBTU0wgcmVhZGluZyBmYWlsZWQgZHVlIHRvIHRoZSBub24tYmxvY2tpbmcKICBzdGF0ZSBvZiB0aGUgc29ja2V0cyEgSSBmaXhlZC4KCkRhbmllbCAoMjkgSmFudWFyeSAyMDAyKQotIE11bHRpcGFydCBmb3JtcG9zdHMgbm93IHNlbmQgdGhlIGZ1bGwgcmVxdWVzdCBwcm9wZXJseSwgaW5jbHVkaW5nIHRoZSBDUkxGLgogIFRoZXkgd2VyZSBwcmV2aW91c2x5IHRyZWF0ZWQgYXMgcGFydCBvZiB0aGUgcG9zdCBkYXRhLgoKLSBUaGUgdXBsb2FkIGJ5dGUgY291bnRlciBidWdnZWQuCgotIFQuIEJoYXJhdGggcG9pbnRlZCBvdXQgdGhhdCB3ZSBzZWVkIFNTTCBvbiBldmVyeSBjb25uZWN0LCB3aGljaCBpcyBhIHRpbWUtCiAgY29uc3VtaW5nIG9wZXJhdGlvbiB0aGF0IHNob3VsZCBvbmx5IGJlIG5lZWRlZCB0byBkbyBvbmNlLiBXZSBwYXRjaGVkCiAgbGliY3VybCB0byBub3cgb25seSBzZWVkIG9uIHRoZSBmaXJzdCBjb25uZWN0IHdoZW4gdW5zZWVkZWQuIFRoZSBzZWVkZWQKICBzdGF0dXMgaXMgZ2xvYmFsIHNvIGl0J2xsIG5vdyBvbmx5IGhhcHBlbiBvbmNlIGR1cmluZyBhIHByb2dyYW0ncyBsaWZlIHRpbWUuCgogIElmIHRoZSByYW5kb21fZmlsZSBvciBlZ2Rzb2NrZXQgaXMgc2V0LCB0aGUgc2VlZCB3aWxsIGJlIHJlLW1hZGUgdGhvdWdoLgoKLSBHaWFzbGFzIEdlb3JnaW9zIGludHJvZHVjZWQgQ1VSTElORk9fQ09OVEVOVF9UWVBFIHRoYXQgbGV0cwogIGN1cmxfZWFzeV9nZXRpbmZvKCkgcmVhZCB0aGUgY29udGVudC10eXBlIGZyb20gdGhlIHByZXZpb3VzIHJlcXVlc3QuCgpEYW5pZWwgKDI4IEphbnVhcnkgMjAwMikKLSBLamV0aWwgSmFjb2JzZW4gZm91bmQgYSB3YXkgdG8gY3Jhc2ggY3VybCBhbmQgYWZ0ZXIgbXVjaCBkZWJ1Z2dpbmcsIGl0CiAgdHVybmVkIG91dCBpdCB3YXMgYSBJUHY0LWxpbnV4IG9ubHkgcHJvYmxlbSBpbnRyb2R1Y2VkIGluIDcuOS4zIHJlbGF0ZWQgdG8KICBuYW1lIHJlc29sdmluZy4KCi0gQW5kcmVhcyBEYW1tIHBvc3RlZCBhIGh1Z2UgcGF0Y2ggdGhhdCBtYWRlIHRoZSBjdXJsX2dldGRhdGUoKSBmdW5jdGlvbiBmdWxseQogIHJlZW50cmFudCEKCi0gU3RldmUgTWFyeCBwb2ludGVkIG91dCB0aGF0IHlvdSBjb3VsZG4ndCBtaXggQ1VSTE9QVF9DVVNUT01SRVFVRVNUIHdpdGgKICBDVVJMT1BUX1BPU1RGSUVMRFMuIFlvdSBjYW4gbm93IQoKRGFuaWVsICgyNSBKYW51YXJ5IDIwMDIpCi0gS3Jpc2huZW5kdSBNYWp1bWRhciBwb2ludGVkIG91dCB0aGF0IHRoZSBoZWFkZXIgbGVuZ3RoIGNvdW50ZXIgd2FzIG5vdCByZXNldAogIGJldHdlZW4gbXVsdGlwbGUgcmVxdWVzdHMgb24gdGhlIHNhbWUgaGFuZGxlLgoKLSBQZWRybyBOZXZlcyByaWdodGZ1bGx5IHF1ZXN0aW9uZWQgd2h5IGN1cmwgYWx3YXlzIGFwcGVuZCBcclxuIHRvIHRoZSBkYXRhCiAgdGhhdCBpcyBzZW50IGluIEhUVFAgUE9TVCByZXF1ZXN0cy4gVW5mb3J0dW5hdGVseSwgdGhpcyBicm9rZSB0aGUgdGVzdCBzdWl0ZQogIGFzIHRoZSB0ZXN0IEhUVFAgc2VydmVyIGlzIGxhbWUgZW5vdWdoIG5vdCB0byBkZWFsIHdpdGggdGhpcy4uLiA6LU8KCi0gRm9sbG93aW5nIExvY2F0aW9uOiBoZWFkZXJzIHdoZW4gdGhlIGNvbm5lY3Rpb24gZGlkbid0IGNsb3NlIGRpZG4ndCB3b3JrIGFzCiAgbGliY3VybCBkaWRuJ3QgcHJvcGVybHkgc3RvcCByZWFkaW5nLiBUaGlzIHByb2JsZW0gd2FzIGFkZGVkIGluIDcuOS4zIGR1ZSB0bwogIHRoZSByZXN0cnVjdHVyZWQgaW50ZXJuYWxzLiAnRnJhbmsnIHBvc3RlZCBhIGJ1ZyByZXBvcnQgYWJvdXQgdGhpcy4KCkRhbmllbCAoMjQgSmFudWFyeSAyMDAyKQotIEtldmluIFJvdGggdmVyeSBxdWlja2x5IHNwb3R0ZWQgdGhhdCB3ZSB3cm9uZ2x5IGluc3RhbGxlZCB0aGUgZXhhbXBsZQogIHByb2dyYW1zIHRoYXQgd2VyZSBidWlsdCBpbiB0aGUgbXVsdGkgZGlyZWN0b3J5LCB3aGVuICdtYWtlIGluc3RhbGwnIHdhcwogIHVzZWQuIDotLwoKVmVyc2lvbiA3LjkuMwoKRGFuaWVsICgyMyBKYW51YXJ5IDIwMDIpCi0gQW5kculzIEdhcmPtYSBmb3VuZCBhIHBlcnNpc3RhbmN5IHByb2JsZW0gd2hlbiBkb2luZyBIVFRQIEhFQUQsIHRoYXQgbWFkZQogIGN1cmwgImhhbmciIHVudGlsIHRoZSBjb25uZWN0aW9uIHdhcyBjbG9zZWQgYnkgdGhlIHNlcnZlci4gVGhpcyBwcm9ibGVtIGhhcwogIGJlZW4gaW50cm9kdWNlZCBpbiA3LjkuMyBkdWUgdG8gaW50ZXJuYWwgcmV3cml0ZXMsIHRoaXMgd2FzIG5vdCBwcmVzZW50IGluCiAgNy45LjIuCgpWZXJzaW9uIDcuOS4zLXByZTQKCkRhbmllbCAoMTkgSmFudWFyeSAyMDAyKQotIEFudG9uaW8gZmlsZWQgYnVnIHJlcG9ydCAjNTA1NTE0IGFuZCBwcm92aWRlZCBhIGZpeCEgV2hlbiBkb2luZyBtdWx0aXBhcnQKICBmb3JtcG9zdHMsIGxpYmN1cmwgd291bGQgaW5jbHVkZSBhbiBlcnJvciB0ZXh0IGluIHRoZSBhY3R1YWwgcG9zdCBpZiBhCiAgc3BlY2lmaWVkIGZpbGUgd2Fzbid0IGZvdW5kLiBUaGlzIGlzIG5vdCBsaWJjdXJsJ3Mgam9iLiBJbnN0ZWFkIHdlIGFkZCBhbgogIGVtcHR5IHBhcnQuCgpEYW5pZWwgKDE4IEphbnVhcnkgMjAwMikKLSBQbGF5ZWQgYXJvdW5kIHdpdGggc3RyaWN0ZXIgY29tcGlsZXIgd2FybmluZ3MgZm9yIGdjYyAod2hlbiAuL2NvbmZpZ3VyZQogIC0tZW5hYmxlLWRlYnVnIGlzIHVzZWQpIGFuZCBjaGFuZ2VkIHNvbWUgbWlub3IgdGhpbmdzIHRvIHN0b3AgdGhlIHdhcm5pbmdzLgoKLSBDb21tZW50ZWQgb3V0IHRoZSAnbG9uZyBsb25nJyBhbmQgJ2xvbmcgZG91YmxlJyBjaGVja3MgaW4gY29uZmlndXJlLmluLCBhcwogIHdlIGRvbid0IGN1cnJlbnRseSB1c2UgdGhlbSBhbnl3YXkgYW5kIHRoZSBjb2RlIGluIGxpYi9tcHJpbnRmLmMgdGhhdCB1c2UKICB0aGVtIGNhdXNlcyB3YXJuaW5ncy4KCi0gU2F1bCBHb29kIGFuZCBqb25hdGFuIHBvaW50ZWQgb3V0IE1hYyBPUyBYIGJ1aWxkIHByb2JsZW1zIHdpdGggcHJlMyBhbmQgaG93CiAgdG8gY29ycmVjdCB0aGVtLiBUd28gY29tcGlsZXIgd2FybmluZ3Mgd2VyZSByZW1vdmVkIGFzIHdlbGwuCgotIEFuZHLpcyBHYXJj7WEgZml4ZWQgdHdvIG1pbm9yIG1pbmd3MzIgYnVpbGRpbmcgcHJvYmxlbXMuCgpWZXJzaW9uIDcuOS4zLXByZTMKCkRhbmllbCAoMTcgSmFudWFyeSAyMDAyKQotIGRvY3MvbGliY3VybC10aGUtZ3VpZGUgaXMgYSBuZXcgdHV0b3JpYWwgZm9yIG91ciBsaWJjdXJsIHByb2dyYW1taW5nCiAgZnJpZW5kcy4KCi0gUmljaGFyZCBBcmNoZXIgYnJvdWdodCBiYWNrIHRoZSBhYmlsaXR5IHRvIGNvbXBpbGUgYW5kIGJ1aWxkIHdpdGggT3BlblNTTAogIHZlcnNpb25zIGJlZm9yZSAwLjkuNS4KICBbaHR0cDovL3NvdXJjZWZvcmdlLm5ldC90cmFja2VyLz9mdW5jPWRldGFpbCZhdGlkPTEwMDk3NiZhaWQ9NTA0MTYzJmdyb3VwX2lkPTk3Nl0KCi0gVGhlIEROUyBjYWNoZSBjb2RlIGRpZG4ndCB0YWtlIHRoZSBwb3J0IG51bWJlciBpbnRvIGFjY291bnQsIHdoaWNoIG1hZGUgaXQKICB3b3JrIHJhdGhlciBiYWQgb24gSVB2Ni1lbmFibGVkIGhvc3RzIChlc3BlY2lhbGx5IHdoZW4gZG9pbmcgcGFzc2l2ZQogIEZUUCkuIFN0ZXJsaW5nIGZpeGVkIGl0LgoKRGFuaWVsICgxNiBKYW51YXJ5IDIwMDIpCi0gR2VvcmcgSG9ybiBjb3VsZCBtYWtlIGEgdHJhbnNmZXIgdGltZS1vdXQgd2l0aG91dCBlcnJvciB0ZXh0LiBJIGZvdW5kIGl0IGFuZAogIGNvcnJlY3RlZCBpdC4KCi0gU1NMIHdyaXRlcyBkaWRuJ3Qgd29yaywgdGhleSByZXR1cm4gYW4gdW5pbml0aWFsaXplZCB2YWx1ZSB0aGF0IGNhdXNlZAogIGhhdm9jIGFsbCBvdmVyLiBHZW9yZyBIb3JuIGV4cGVyaWVuY2VkIHRoaXMuCgotIEtldmluIFJvdGggcGF0Y2hlZCB0aGUgY3VybF92ZXJzaW9uKCkgZnVuY3Rpb24gdG8gdXNlIHRoZSBwcm9wZXIgT3BlblNTTAogIGZ1bmN0aW9uIGZvciB2ZXJzaW9uIGluZm9ybWF0aW9uLiBUaGlzIHdheSwgY3VybCB3aWxsIHJlcG9ydCB0aGUgdmVyc2lvbiBvZgogIHRoZSBTU0wgbGlicmFyeSBhY3R1YWxseSBydW5uaW5nIHJpZ2h0IG5vdywgbm90IHRoZSBvbmUgdGhhdCBoYWQgaXRzIGhlYWRlcnMKICBpbnN0YWxsZWQgd2hlbiBsaWJjdXJsIHdhcyBidWlsdC4gTWFpbmx5IGludGVyc3Rpbmcgd2hlbiBydW5uaW5nIHdpdGggc2hhcmVkCiAgT3BlblNTTCBsaWJyYXJpZXMuICAKClZlcnNpb24gNy45LjMtcHJlMgoKRGFuaWVsICgxNiBKYW51YXJ5IDIwMDIpCi0gTW9maWVkIHRoZSBtYWluIHRyYW5zZmVyIGxvb3AgYW5kIHJlbGF0ZWQgc3R1ZmYgdG8gZGVhbCB3aXRoIG5vbi1ibG9ja2luZwogIHNvY2tldHMgaW4gdGhlIHVwbG9hZCBzZWN0aW9uLiBXaGlsZSBkb2luZyB0aGlzLCBJJ3ZlIG5vdyBzZXBhcmF0ZWQgdGhlCiAgY29ubmVjdGlvbiBvcmllbnRlZCBidWZmZXJzIHRvIGhhdmUgb25lIGZvciBkb3dubG9hZHMgYW5kIG9uZSBmb3IgdXBsb2FkcwogIChhcyB0d28gY2FuIGhhcHBlbiBzaW11bHRhbmVvdXNseSkuIEkgYWxzbyBzaHJ1bmsgdGhlIGJ1ZmZlcnMgdG8gMjBLCiAgZWFjaC4gQXMgd2UgaGF2ZSBhIHNjcmF0Y2ggYnVmZmVyIHR3aWNlIHRoZSBzaXplIG9mIHRoZSB1cGxvYWQgYnVmZmVyLCB3ZQogIGFycml2ZWQgYXQgODBLIGZvciBidWZmZXJzIGNvbXBhcmVkIHdpdGggdGhlIHByZXZpb3VzIDE1MEsuCgotIEFkZGVkIHRoZSAtLWNjIG9wdGlvbiB0byBjdXJsLWNvbmZpZyBjb21tYW5kIGFzIGl0IGVuYWJsZXMgc28gdmVyeSBjb29sCiAgb25lLWxpbmVycy4gSGF2ZSBhIGdvIGEgdGhpcyBvbmUsIGJ1aWxkaW5nIHRoZSBzaW1wbGUuYyBleGFtcGxlOgoKICAgICAgICAkIGBjdXJsLWNvbmZpZyAtLWNjIC0tY2ZsYWdzIC0tbGlic2AgLW8gZXhhbXBsZSBzaW1wbGUuYwoKRGFuaWVsICgxNCBKYW51YXJ5IDIwMDIpCi0gSSBtYWRlIGFsbCBzb2NrZXQgcmVhZHMgKHJlY3YpIGhhbmRsZSBFV09VTERCTE9DSy4gSSBob3BlIG5pY2VseS4gTm93IHdlCiAgb25seSBuZWVkIHRvIGFkZHJlc3MgYWxsIHdyaXRlcyAoc2VuZCkgdG9vIGFuZCB0aGVuIEknbSByZWFkeSBmb3IgYW5vdGhlcgogIHByZS1yZWxlYXNlLi4uCgotIFN0b25lZCBFbGlwb3QgcGF0Y2hlZCB0aGUgaW5fYWRkcl90IGNvbmZpZ3VyZSB0ZXN0IHRvIG1ha2UgaXQgd29yayBiZXR0ZXIgb24KICBtb3JlIHBsYXRmb3Jtcy4KCkRhbmllbCAoOSBKYW51YXJ5IDIwMDIpCi0gQ3JpcyBCYWlsaWZmIGZvdW5kIG91dCB0aGF0IGZpbGxpbmcgdXAgY3VybCdzIFNTTCBzZXNzaW9uIGNhY2hlIGNhdXNlZCBhCiAgY3Jhc2ghCgotIFBvc3RlZCB0aGUgY3VybCBxdWVzdGlvbm5haXJlIG9uIHRoZSB3ZWIgc2l0ZS4gSWYgeW91IGhhdmVuJ3QgcG9zdGVkIHlvdXIKICBvcGluaW9ucyB0aGVyZSB5ZXQsIGdvIHRoZXJlIGFuZCBkbyBpdCBub3cgd2hpbGUgaXQgaXMgc3RpbGwgdGhlcmU6CgogICAgICAgIGh0dHA6Ly9jdXJsLmhheHguc2UvcS8KCi0gR2VvcmcgSG9ybiBxdWlja2x5IGZvdW5kIG91dCB0aGF0IHRoZSBTU0wgcmVhZGluZyBubyBsb25nZXIgd29ya2VkIGFzCiAgc3VwcG9zZWQgc2luY2UgdGhlIHN3aXRjaCB0byBub24tYmxvY2tpbmcgc29ja2V0cy4gSSd2ZSBtYWRlIGEgcXVpY2sgcGF0Y2gKICAoZm9yIHJlYWRpbmcgb25seSkgYnV0IHdlIHNob3VsZCBpbXByb3ZlIGl0IGV2ZW4gZnVydGhlci4KClZlcnNpb24gNy45LjMtcHJlMQoKRGFuaWVsICg3IEphbnVhcnkgMjAwMikKLSBJIG1hZGUgdGhlICdib29sJyB0eXBlZGVmIHVzZSBhbiAidW5zaWduZWQgY2hhciIuIEl0IG1ha2VzIGl0IHRoZSBzYW1lIG9uCiAgYWxsIHBsYXRmb3Jtcywgbm8gbWF0dGVyIHdoYXQgdGhlIHBsYXRmb3JtIHRoaW5rcyB0aGUgZGVmYXVsdCBmb3JtYXQgZm9yCiAgY2hhciBpcy4gVGhpcyB3YXMgbm90aWNlZCBzaW5jZSB3ZSBtYWRlIGEgc2lsbHkgY29tcGFyaXNvbiBpbnZvbHZpbmcgc3VjaCBhCiAgYm9vbCB2YXJpYWJsZSwgYW5kIG9ubHkgb25lIGNvbXBpbGVyL3BsYXRmb3JtIGNvbWJpbmF0aW9uIChvbiBEZWJpYW4gTGludXgpCiAgY29tcGxhaW5lZCBhYm91dCBpdCAodGhhdCBoYXBwZW5lZCB0byBoYXZlIGl0cyBjaGFyIHVuc2lnbmVkIGJ5IGRlZmF1bHQpLgoKLSBCdWcgcmVwb3J0ICM0OTUyOTAgaWRlbnRpZmllZCBhIGNvb2tpZSBwYXJzaW5nIHByb2JsZW0gdGhhdCB3YXMgY29ycmVjdGVkLgogIFdoZW4gYSBTZXQtQ29va2llOiBsaW5lIGlzIHJlY2VpdmVkIHdpdGhvdXQgYSB0cmFpbGluZyBzZW1pY29sb24sIGxpYmN1cmwKICBkaWRuJ3QgcmVhZCB0aGUgbGFzdCAibmFtZT12YWx1ZSIgcGFpciBvZiB0aGUgbGluZSwgbGVhZGluZyB0byBjb25mdXNpb25zLi4uCgotIFN0ZXJsaW5nIGNvbW1pdHRlZCBoaXMgdXBkYXRlZCBETlMgY2FjaGUgY29kZS4KCi0gSSB3b3JrZWQgd2l0aCBHZW9yZyBIb3JuIGFuZCBjb21tZW50cyBmcm9tIEf2dHogQmFiaW4tRWJlbGwgYW5kIHN3aXRjaGVkCiAgY3VybCdzIHNvY2tldCBvcGVyYXRpb25zIGNvbXBsZXRlbHkgb3ZlciB0byBub24tYmxvY2tpbmcgZm9yIHRoZSBlbnRpcmUKICBvcGVyYXRpb24gKHByZXZpb3VzbHkgd2UgdXNlZCBub24tYmxvY2tpbmcgb25seSBmb3IgdGhlIGNvbm5lY3Rpb24gcGhhc2UpLgogIFdlIGhhZCB0byBkbyB0aGlzIHRvIG1ha2UgdGhlIFNTTCBjb25uZWN0aW9uIHBoYXNlIHRpbWVvdXQgcHJvcGVybHkgd2l0aG91dAogIHRoZSB1c2Ugb2Ygc2lnbmFscy4gQSBsaXR0bGUgZXh0cmEgY29kZSB0byBkZWFsIHdpdGggdGhpcyB3YXMgYWRkZWQuCgotIFQuIEJoYXJhdGggcG9pbnRlZCBvdXQgYSBzbGlnaHRseSBvYnNjdXJlIGNvb2tpZSBlbmdpbmUgZmxhdy4KCi0gUGV0ZSBTdSBwb2ludGVkIG91dCB0aGF0IGxpYmN1cmwgZGlkbid0IHRyZWF0IEhUVFAgY29kZSAyMDQgYXMgaXQgc2hvdWxkLgogIDIwNC1yZXBsaWVzIG5ldmVyIHByb3ZpZGVzIGEgcmVzcG9uc2UtYm9keS4gVGhpcyByZXN1bHRlZCBpbiBiYWQgcGVyc2lzdGFudAogIGJlaGF2aW9yIHdoZW4gMjA0IHdhcyByZWNlaXZlZC4KCkRhbmllbCAoNSBKYW51YXJ5IDIwMDIpCi0gU00gdXBkYXRlZCB0aGUgVkMrKyBsaWJyYXJ5IE1ha2VmaWxlcyBmb3IgdGhlIG5ldyBzb3VyY2UgZmlsZXMuCgpEYW5pZWwgKDQgSmFudWFyeSAyMDAyKQotIEkgZGlzY292ZXJlZCB0aGF0IHdlIHdyb25nbHkgdXNlZCBpbmV0X250b2EoKSAoaW5zdGVhZCBvZiBpbmV0X250b2FfcigpIGluCiAgdHdvIHBsYWNlcyBpbiB0aGUgc291cmNlIGNvZGUpLiBPbmUgaGFwcGVuZWQgd2l0aCBWRVJCT1NFIHNldCBvbiBjb25uZWN0cywKICBhbmQgdGhlIG90aGVyIHdoZW4gVkVSQk9TRSB3YXMgb24gYW5kIGtyYjQgb3ZlciBuYXQgd2FzIHVzZWQuLi4gSSBob25lc3RseQogIGRvbid0IHRoaW5rIGFueW9uZSBoYXMgc3VmZmVyZWQgZnJvbSB0aGVzZSBtaXN0YWtlcy4KCi0gSSByZXBsYWNlZCBhIGxvdCBvZiBzaWxseSBvY2N1cmFuY2VzIG9mIHByaW50ZigpIHRvIGluc3RlYWQgdXNlIHRoZSBtb3JlCiAgYXBwcm9wcmlhdGUgQ3VybF9pbmZvZigpIG9yIEN1cmxfZmFpbGYoKS4gVGhlIGtyYjQgYW5kIHRlbG5ldCBjb2RlIHdlcmUKICBhZmZlY3RlZC4KCi0gUGhpbGlwIEdsYWRzdG9uZSBmb3VuZCBhIGZldyBtb3JlIHByb2JsZW1zIHdpdGggNjQtYml0IGFyY2hzICh0aGUgNjQtYml0CiAgc3BhcmMgb24gc29sYXJpcyA4KS4KCi0gQWZ0ZXIgZGlzY3Vzc2lvbnMgb24gdGhlIGxpYmN1cmwgbGlzdCB3aXRoIFJhb3VsIENyaWRsaWcsIEkganVzdCBtYWRlIEZUUAogIHJlc3BvbnNlIGxpbmVzIGdldCBwYXNzZWQgdG8gdGhlIGhlYWRlciBjYWxsYmFjayBpZiBzdWNoIGEgb25lIGlzCiAgcmVnaXN0ZXJlZC4gSXQnbGwgbWFrZSBpdCBwb3NzaWJsZSBmb3IgYW55IGFwcGxpY2F0aW9uIHRvIGdldCBhbGwgdGhlCiAgcmVzcG9uc2VzIGFuIEZUUCBzZXJ2ZXIgc2VuZHMgdG8gbGliY3VybC4KCkRhbmllbCAoMyBKYW51YXJ5IDIwMDIpCi0gU3RlcmxpbmcgSHVnaGVzIGJyb3VnaHQgYSBmZXcgYnVja2V0cyBvZiBjb2RlLiBOb3csIGxpYmN1cmwgd2lsbAogIGF1dG9tYXRpY2FsbHkgY2FjaGUgRE5TIGxvb2t1cHMgYW5kIHJlLXVzZSB0aGUgcHJldmlvdXMgcmVzdWx0cyBmaXJzdCBpZiBhbnkKICBzdWNoIGlzIGF2YWlsYWJsZS4gSXQgZ3JlYXRseSBpbXByb3ZlcyBzcGVlZCB3aGVuIGRvaW5nIG1hbnkgcmVwZWF0ZWQKICBvcGVyYXRpb25zIHRvIHRoZSBzYW1lIGhvc3QuCgotIEFzIHRoZSB0ZXN0IGNhc2UgdXNlcyAtLWluY2x1ZGUgYW5kIHRoZW4gLS1oZWFkLCBJIGhhZCB0byBtb2RpZnkgc3JjL21haW4uYwogIHRvIGRlYWwgd2l0aCB0aGlzIHNpdHVhdGlvbiBzbGlnaHRseSBiZXR0ZXIgdGhhbiBwcmV2aW91c2x5LiBXaGVuIGRvbmUsIHdlCiAgaGF2ZSAxMDAlIGdvb2QgdGVzdHMgYWdhaW4gaW4gdGhlIG1haW4gYnJhbmNoLgoKRGFuaWVsICgyIEphbnVhcnkgMjAwMikKLSBNYWRlIHRlc3QgY2FzZSAyNSBydW4gYWdhaW4gaW4gdGhlIG11bHRpLWRldiBicmFuY2guIEJ1dCBpdCBzZWVtcyB0aGF0IHRoZQogIGNoYW5nZXMgZG9uZSBvbiBkZWMtMjAgbWFkZSB0ZXN0IGNhc2UgMTA0IGNlYXNlIHRvIHdvcmsgKGluIGJvdGggYnJhbmNoZXMpLgoKLSBQaGlsaXAgR2xhZHN0b25lIHBvaW50ZWQgb3V0IGEgZmV3IHBvcnRhYmlsaXR5IHByb2JsZW1zIGluIHRoZSBzb3VyY2UgY29kZQogIHRoYXQgZGlkbid0IGNvbXBpbGUgb24gNjQtYml0IHNwYXJjcyB1c2luZyBTdW4ncyBuYXRpdmUg