VGhpcyBmaWxlIGRlc2NyaWJlcyB3aGVyZSB0byBzdGFydCBkZWJ1Z2dpbmcgV2luZSBhbmQgaG93IHRvIHdyaXRlCnVzZWZ1bCBidWcgcmVwb3J0cy4KCkNyYXNoZXMKPT09PT09PQoKICBUaGVzZSB1c3VhbGx5IHNob3cgdXAgbGlrZSB0aGlzOgoKfFVuZXhwZWN0ZWQgV2luZG93cyBwcm9ncmFtIHNlZ2ZhdWx0IC0gb3Bjb2RlID0gOGIKfFNlZ21lbnRhdGlvbiBmYXVsdCBpbiBXaW5kb3dzIHByb2dyYW0gMWI3OmM0MS4KfExvYWRpbmcgc3ltYm9scyBmcm9tIEVMRiBmaWxlIC9yb290L3dpbmUvd2luZS4uLgp8Li4uLm1vcmUgTG9hZGluZyBzeW1ib2xzIGZyb20gLi4uCnxJbiAxNiBiaXQgbW9kZS4KfFJlZ2lzdGVyIGR1bXA6CnwgQ1M6MDFiNyBTUzowMTZmIERTOjAyODcgRVM6MDAwMAp8IElQOjBjNDEgU1A6ODc4YSBCUDo4Nzk2IEZMQUdTOjAyNDYKfCBBWDo4MTFlIEJYOjAwMDAgQ1g6MDAwMCBEWDowMDAwIFNJOjAwMDEgREk6ZmZmZgp8U3RhY2sgZHVtcDoKfDB4MDE2ZjoweDg3OGE6ICAwMDAxIDAxNmYgZmZlZCAwMDAwIDAwMDAgMDI4NyA4OTBiIDFlNWIKfDB4MDE2ZjoweDg3OWE6ICAwMWI3IDAwMDEgMDAwZCAxMDUwIDA4YjcgMDE2ZiAwMDAxIDAwMGQKfDB4MDE2ZjoweDg3YWE6ICAwMDBhIDAwMDMgMDAwNCAwMDAwIDAwMDcgMDAwNyAwMTkwIDAwMDAKfDB4MDE2ZjoweDg3YmE6CnwKfDAwNTA6IHNlbD0wMjg3IGJhc2U9NDAyMTFkMzAgbGltaXQ9MGI5M2YgKGJ5dGVzKSAxNi1iaXQgcnctCnxCYWNrdHJhY2U6CnwwIDB4MDFiNzoweDBjNDEgKFBYU1JWX0ZPTkdFVEZBQ0VOQU1FKzB4N2MpCnwxIDB4MDFiNzoweDFlNWIgKFBYU1JWX0ZPTlBVVENBVEZPTlQrMHgyY2QpCnwyIDB4MDFhNzoweDA1YWEKfDMgMHgwMWI3OjB4MDc2OCAoUFhTUlZfRk9OSU5JVEZPTlRTKzB4ODEpCnw0IDB4MDE0ZjoweDAzZWQgKFBET1hXSU5fQFNRTENVUkNCJFE2Q0JUWVBFVUxOOENCU0NUWVBFKzB4MWIxKQp8NSAweDAxM2Y6MHgwMGFjCnwKfDB4MDFiNzoweDBjNDEgKFBYU1JWX0ZPTkdFVEZBQ0VOQU1FKzB4N2MpOiAgbW92dyAgICAgICAgJWVzOjB4MzgoJWJ4KSwlZHgKClN0ZXBzIHRvIGRlYnVnIGEgY3Jhc2guIFlvdSBtYXkgc3RvcCBhdCBhbnkgc3RlcCwgYnV0IHBsZWFzZSByZXBvcnQgdGhlIGJ1ZwphbmQgcHJvdmlkZSBhcyBtdWNoIG9mIHRoZSBpbmZvcm1hdGlvbiBnYXRoZXJlZCB0byB0aGUgbmV3c2dyb3VwIG9yIHRoZQpyZWxldmFudCBkZXZlbG9wZXIgYXMgZmVhc29uYWJsZS4KICAKIDEuIEdldCB0aGUgcmVhc29uIGZvciB0aGUgY3Jhc2guIFRoaXMgaXMgdXN1YWxseSBhbiBhY2Nlc3MgdG8gYW4gaW52YWxpZAogICAgc2VsZWN0b3IsIGFuIGFjY2VzcyB0byBhbiBvdXQgb2YgcmFuZ2UgYWRkcmVzcyBpbiBhIHZhbGlkIHNlbGVjdG9yLAogICAgcG9wcGluZyBhIHNlZ21lbnRyZWdpc3RlciBmcm9tIHRoZSBzdGFjayBvciB0aGUgbGlrZS4gV2hlbiByZXBvcnRpbmcgYQogICAgY3Jhc2gsIHJlcG9ydCB0aGlzIFdIT0xFIGNyYXNoZHVtcCBldmVuIGlmIGl0IGRvZXNuJ3QgbWFrZSBzZW5zZSB0byB5b3UuCgogICAgKEluIHRoaXMgY2FzZSBpdCBpcyBhY2Nlc3MgdG8gYW4gaW52YWxpZCBzZWxlY3RvciwgZm9yICVlcyBpcyAwMDAwLCBhcwogICAgc2VlbiBpbiB0aGUgcmVnaXN0ZXIgZHVtcCkuCiAgICAKIDIuIERldGVybWluZSB3aGVyZSB0aGUgcmVhc29uIGNhbWUgZnJvbS4KICAgIFNpbmNlIHRoaXMgaXMgdXN1YWxseSBhIHByaW1hcnkvc2Vjb25kYXJ5IHJlYWN0aW9uIHRvIGEgZmFpbGVkIG9yCiAgICBtaXNiZWhhdmluZyBXaW5lIGZ1bmN0aW9uLCByZXJ1biBXaW5lIHdpdGggIi1kZWJ1Z21zZyArcmVsYXkiICh3aXRob3V0ICIpCiAgICBhZGRlZCB0byB0aGUgY29tbWFuZGxpbmUuIFRoaXMgd2lsbCBnZXQgcmF0aGVyIG11Y2ggb3V0cHV0LCBidXQgdXN1YWxseQogICAgdGhlIHJlYXNvbiBpcyBsb2NhdGVkIGluIHRoZSBsYXN0IGNhbGwocykuICBUaG9zZSBsaW5lcyB1c3VhbGx5IGxvb2sgbGlrZQogICAgdGhpczoKCnxDYWxsIEtFUk5FTC45MDogTFNUUkxFTigwMjI3OjA2OTIgInRleHQiKSByZXQ9MDFlNzoyY2U3IGRzPTAyMjcKICAgICAgXl5eXl5eXl5eICBeICAgICAgIF5eXl5eXl5eXiBeXl5eXl4gICAgICBeXl5eXl5eXl4gICAgXl5eXgogICAgICB8ICAgICAgICAgIHwgICAgICAgfCAgICAgICAgIHwgICAgICAgICAgIHwgICAgICAgICAgICB8RGF0YXNlZ21lbnQKICAgICAgfCAgICAgICAgICB8ICAgICAgIHwgICAgICAgICB8ICAgICAgICAgICB8UmV0dXJuIGFkZHJlc3MKICAgICAgfCAgICAgICAgICB8ICAgICAgIHwgICAgICAgICB8dGV4dHVhbCBwYXJhbWV0ZXIKICAgICAgfCAgICAgICAgICB8ICAgICAgIHwKICAgICAgfCAgICAgICAgICB8ICAgICAgIHxBcmd1bWVudChzKS4gVGhpcyBvbmUgaXMgYSB3aW4xNiBzZWdtZW50ZWQgcG9pbnRlci4KICAgICAgfCAgICAgICAgICB8RnVuY3Rpb24gY2FsbGVkLgogICAgICB8VGhlIG1vZHVsZSwgdGhlIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbi4gSW4gdGhpcyBjYXNlIGl0IGlzIEtFUk5FTC4KCQkgICAgICAgIAp8UmV0ICBLRVJORUwuOTA6IExTVFJMRU4oKSByZXR2YWw9MHgwMDA0IHJldD0wMWU3OjJjZTcgZHM9MDIyNwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eCgkJCQkgIHxSZXR1cm52YWx1ZSBpcyAxNiBiaXQgYW5kIGhhcyB0aGUgdmFsdWUgNC4KCgogMy4gSWYgeW91IGhhdmUgZm91bmQgYSBtaXNiZWhhdmluZyBmdW5jdGlvbiwgdHJ5IHRvIGZpbmQgb3V0IHdoeSBpdAogICAgbWlzYmVoYXZlcy4gRmluZCB0aGUgZnVuY3Rpb24gaW4gdGhlIHNvdXJjZSBjb2RlLiBUcnkgdG8gbWFrZSBzZW5zZSBvZgogICAgdGhlIGFyZ3VtZW50cyBwYXNzZWQuIFVzdWFsbHkgdGhlcmUgaXMgYQogICAgImRwcmludGZfeHl6KHN0ZGRlYiwiRnVuY3Rpb24oLi4uKSIuLi4pOyIgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUKICAgIGZ1bmN0aW9uLiBSZXJ1biB3aW5lIHdpdGggIi1kZWJ1Z21zZyAreHl6LCtyZWxheSIgYWRkZWQgdG8gdGhlCiAgICBjb21tYW5kbGluZS4KCiA0LiBBZGRpdGlvbmFsIGluZm9ybWF0aW9uIG9uIGhvdyB0byBkZWJ1ZyB1c2luZyB0aGUgaW50ZXJuYWwgZGVidWdnZXIgY2FuIGJlIAogICAgZm91bmQgaW4gZGVidWdnZXIvUkVBRE1FLgoKIDUuIElmIHRob3NlIGluZm9ybWF0aW9uIGlzbid0IGNsZWFyIGVub3VnaCBvciBpZiB5b3Ugd2FudCB0byBrbm93IG1vcmUgYWJvdXQKICAgIHdoYXQncyBoYXBwZW5pbmcgaW4gdGhlIGZ1bmN0aW9uIGl0c2VsZiwgdHJ5IHJ1bm5pbmcgd2luZSB3aXRoICItZGVidWdtc2cKICAgICthbGwiLCB3aGljaCBkdW1wcyBBTEwgaW5jbHVkZWQgZGVidWcgaW5mb3JtYXRpb24gaW4gd2luZS4KCiA2LiBJZiB0aGF0IGlzbid0IGVub3VnaCBhZGQgbW9yZSBkZWJ1ZyBvdXRwdXQgZm9yIHlvdXJzZWxmIGludG8gdGhlCiAgICBmdW5jdGlvbnMgeW91IGZpbmQgcmVsZXZhbnQuCiAgICBZb3UgbWlnaHQgYWxzbyB0cnkgdG8gcnVuIHRoZSBwcm9ncmFtIGluIGdkYiBpbnN0ZWFkIG9mIHVzaW5nIHRoZQogICAgV0lORS1kZWJ1Z2dlci4gSWYgeW91IGRvbid0IHVzZSB0aGUgIi1kZXNrdG9wIiBvciAiLW1hbmFnZWQiIG9wdGlvbiwKICAgIHN0YXJ0IHRoZSBXSU5FIHByb2Nlc3Mgd2l0aCAiLXN5bmMiLCBvciBjaGFuY2VzIGFyZSBnb29kIHRvIGdldCBYIGludG8KICAgIGFuIHVudXNhYmxlIHN0YXRlLgogIAogNy4gWW91IGNhbiBhbHNvIHNldCBhIGJyZWFrcG9pbnQgZm9yIHRoYXQgZnVuY3Rpb24uIFN0YXJ0IHdpbmUgd2l0aCB0aGUKICAgICItZGVidWciIG9wdGlvbiBhZGRlZCB0byB0aGUgY29tbWFuZGxpbmUuIEFmdGVyIGxvYWRpbmcgdGhlIGV4ZWN1dGFibGUKICAgIHdpbmUgd2lsbCBlbnRlciB0aGUgaW50ZXJuYWwgZGVidWdnZXIuIFVzZSAiYnJlYWsgS0VSTkVMX0xTVFJMRU4iCiAgICAocmVwbGFjZSBieSBmdW5jdGlvbiB5b3Ugd2FudCB0byBkZWJ1ZywgQ0FTRSBJUyBSRUxFVkFOVC4pIHRvIHNldCBhCiAgICBicmVha3BvaW50LiAgVGhlbiB1c2UgImNvbnRpbnVlIiB0byBzdGFydCBub3JtYWwgcHJvZ3JhbS1leGVjdXRpb24uIFdpbmUKICAgIHdpbGwgc3RvcCBpZiBpdCByZWFjaGVzIHRoZSBicmVha3BvaW50LiBJZiB0aGUgcHJvZ3JhbSBpc24ndCB5ZXQgYXQgdGhlCiAgICBjcmFzaGluZyBjYWxsIG9mIHRoYXQgZnVuY3Rpb24sIHVzZSAiY29udGludWUiIGFnYWluIHVudGlsIHlvdSBhcmUgYWJvdXQKICAgIHRvIGVudGVyIHRoYXQgZnVuY3Rpb24uIFlvdSBtYXkgbm93IHByb2NlZWQgd2l0aCBzaW5nbGUtc3RlcHBpbmcgdGhlCiAgICBmdW5jdGlvbiB1bnRpbCB5b3UgcmVhY2ggdGhlIHBvaW50IG9mIGNyYXNoLiBVc2UgdGhlIG90aGVyIGRlYnVnZ2VyCiAgICBjb21tYW5kcyB0byBwcmludCByZWdpc3RlcnMgYW5kIHRoZSBsaWtlLgoKClByb2dyYW0gaGFuZ3MsIG5vdGhpbmcgaGFwcGVucwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgU3dpdGNoIHRvIFVOSVggc2hlbGwsIGdldCB0aGUgcHJvY2Vzcy1JRCB1c2luZyAicHMgLWF8Z3JlcCB3aW5lIiwgYW5kIGRvIGEKICAia2lsbCAtSFVQIDxwaWQ+IiAod2l0aG91dCAiIGFuZCA8PikuIFdpbmUgd2lsbCB0aGVuIGVudGVyIGl0cyBpbnRlcm5hbAogIGRlYnVnZ2VyIGFuZCB5b3UgY2FuIHByb2NlZWQgYXMgZXhwbGFpbmVkIGFib3ZlLiBBbHNvLCB5b3UgY2FuIHVzZSAtZGVidWcKICBzd2l0Y2ggYW5kIHRoZW4geW91IGNhbiBnZXQgaW50byBpbnRlcm5hbCBkZWJ1Z2dlciBieSBwcmVzc2luZyBDdHJsLUMgaW4gCiAgdGhlIHRlcm1pbmFsIHdoZXJlIHlvdSBydW4gV2luZS4KClByb2dyYW0gcmVwb3J0cyBhbiBlcnJvciB3aXRoIGEgTWVzc2FnZWJveAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCiAgU29tZXRpbWVzIHByb2dyYW1zIGFyZSByZXBvcnRpbmcgZmFpbHVyZSB1c2luZyBhIG1vcmUgb3IgbGVzcyBub25kZXNjcmlwdAogIG1lc3NhZ2Vib3hlcy4gV2UgY2FuIGRlYnVnIHRoaXMgdXNpbmcgdGhlIHNhbWUgbWV0aG9kIGFzIENyYXNoZXMsIGJ1dCB0aGVyZQogIGlzIG9uZSBwcm9ibGVtLi4uIEZvciBzZXR0aW5nIHVwIGEgbWVzc2FnZSBib3ggdGhlIHByb2dyYW0gYWxzbyBjYWxscyBXaW5lCiAgcHJvZHVjaW5nIGh1Z2UgY2h1bmtzIG9mIGRlYnVnIGNvZGUuCgogIFNpbmNlIHRoZSBmYWlsdXJlIGhhcHBlbnMgdXN1YWxseSBkaXJlY3RseSBiZWZvcmUgc2V0dGluZyB1cCB0aGUgTWVzc2FnZWJveAogIHlvdSBjYW4gc3RhcnQgd2luZSB3aXRoICItZGVidWciIGFkZGVkIHRvIHRoZSBjb21tYW5kbGluZSwgc2V0IGEgYnJlYWtwb2ludAogIGF0ICJNZXNzYWdlQm94MzJBIiAoY2FsbGVkIGJ5IHdpbjE2IGFuZCB3aW4zMiBwcm9ncmFtcykgYW5kIHByb2NlZWQgd2l0aAogICJjb250aW51ZSIuIFdpdGggIi1kZWJ1Z21zZyArYWxsIiBXaW5lIHdpbGwgbm93IHN0b3AgZGlyZWN0bHkgYmVmb3JlIAogIHNldHRpbmcgdXAgdGhlIE1lc3NhZ2Vib3guICBQcm9jZWVkIGFzIGV4cGxhaW5lZCBhYm92ZS4KCiAgWW91IGNhbiBhbHNvIHJ1biB3aW5lIHVzaW5nICJ3aW5lIC1kZWJ1Z21zZyArcmVsYXkgcHJvZ3JhbS5leGUgMj4mMXxsZXNzIC1pIgogIGFuZCBpbiBsZXNzIHNlYXJjaCBmb3IgbWVzc2FnZWJveC4KCkRpc2Fzc2VtYmxpbmcgcHJvZ3JhbXM6Cj09PT09PT09PT09PT09PT09PT09PT09CiAgWW91IG1heSBhbHNvIHRyeSB0byBkaXNhc3NlbWJsZSB0aGUgb2ZmZW5kaW5nIHByb2dyYW0gdG8gY2hlY2sgZm9yIAogIHVuZG9jdW1lbnRlZCBmZWF0dXJlcyBhbmQvb3IgdXNlIG9mIHRoZW0uCgogIFRoZSBiZXN0LCBmcmVlbHkgYXZhaWxhYmxlLCBkaXNhc3NlbWJsZXIgZm9yIFdpbjE2IHByb2dyYW1zIGlzCiAgV2luZG93cyBDb2RlYmFjaywgYXJjaGl2ZW5hbWUgd2NieHh4LnppcCwgd2hpY2ggdXN1YWxseSBjYW4gYmUgZm91bmQKICBpbiB0aGUgQ2ljYS1NaXJyb3Igc3ViZGlyZWN0b3J5IG9uIHRoZSBXSU5FIGZ0cHNpdGVzLiAoU2VlIEFOTk9VTkNFKS4KICBEaXNhc3NlbWJsaW5nIHdpbjMyIHByb2dyYW1zIGlzIHBvc3NpYmxlIHVzaW5nIHRoZSBXaW5kb3dzIERpc2Fzc2VtYmxlciAzMiwKICBhcmNoaXZlbmFtZSBzb21ldGhpbmcgbGlrZSB3MzJkYXNtLnppcCBvbiBmdHAud2luc2l0ZS5jb20gYW5kIG1pcnJvcnMuCiAgVGhlIHNoYXJld2FyZSB2ZXJzaW9uIGRvZXMgbm90IGFsbG93IHNhdmluZyBvZiBkaXNhc3NlbWJseSBsaXN0aW5ncy4KCiAgW0l0IGFsc28gaGFzIGEgYnVnLCBpdCBkaXNhc3NlbWJsZXMgdGhlIGRsbCBhbmQgaW1tZWRpYXRlbHkgYWZ0ZXIgdGhhdAogICBjcmFzaGVzLCBsZWF2aW5nIGEgdmVyeSBsYXJnZSBmaWxlIGNhbGVkICd3aW5zeXMnIGluIHRoZSBkaXJlY3Rvcnkgb2YgdGhlCiAgIGRpc2Fzc2VtYmxlZCBmaWxlLiBUaGlzIGZpbGUgY29udGFpbnMgbm90aGluZyBvZiB2YWx1ZSAoanVzdCB0aGUgZGlzYXNzZW1ibHkpCiAgIGFuZCBjYW4gYmUgc2FmZWx5IGRlbGV0ZWQuXQoKICBVbmRlcnN0YW5kaW5nIGRpc2Fzc2VtYmxlZCBjb2RlIGlzIGp1c3QgYSBxdWVzdGlvbiBvZiBleGVyY2lzZS4KCiAgTW9zdCBjb2RlIG91dCB0aGVyZSB1c2VzIHN0YW5kYXJkIEMgZnVuY3Rpb24gZW50cmllcyAoZm9yIGl0IGlzIHVzdWFsbHkgCiAgd3JpdHRlbiBpbiBDKS4gV2luMTYgZnVuY3Rpb24gZW50cmllcyB1c3VhbGx5IGxvb2sgbGlrZSB0aGF0Ogp8ICAJcHVzaCBicAp8CW1vdiBicCwgc3AKfAkuLi4gZnVuY3Rpb24gY29kZSAuLgp8CXJldGYgWFhYWCAJPC0tLS0tLS0tLSBYWFhYIGlzIG51bWJlciBvZiBieXRlcyBvZiBhcmd1bWVudHMKCiAgVGhpcyBpcyBhIEZBUiBmdW5jdGlvbiB3aXRoIG5vIGxvY2FsIHN0b3JhZ2UuIFRoZSBhcmd1bWVudHMgdXN1YWxseSBzdGFydAogIGF0IFticCs2XSB3aXRoIGluY3JlYXNpbmcgb2Zmc2V0cy4gTm90ZSwgdGhhdCBbYnArNl0gYmVsb25ncyB0byB0aGUgUklHSFRNT1NUIAogIGFyZ3VtZW50LCBmb3IgZXhwb3J0ZWQgd2luMTYgZnVuY3Rpb25zIHVzZSB0aGUgUEFTQ0FMIGNhbGxpbmcgY29udmVudGlvbi4KICBTbywgaWYgd2UgdXNlIHN0cmNtcChhLGIpIHdpdGggYSBhbmQgYiBib3RoIDMyIGJpdCB2YXJpYWJsZXMgYiB3b3VsZCBiZSBhdAogIFticCs2XSBhbmQgYSBhdCBbYnArMTBdLgogIE1vc3QgZnVuY3Rpb25zIG1ha2UgYWxzbyB1c2Ugb2YgbG9jYWwgc3RvcmFnZSBpbiB0aGUgc3RhY2tmcmFtZToKfAllbnRlciAwMDg2LCAwMAp8CS4uLiBmdW5jdGlvbiBjb2RlIC4uLgp8CWxlYXZlCnwJcmV0ZiBYWFhYCiAgVGhpcyBkb2VzIG1vc3RseSB0aGUgc2FtZSBhcyBhYm92ZSwgYnV0IGFsc28gYWRkcyAweDg2IGJ5dGVzIG9mCiAgc3RhY2tzdG9yYWdlLCB3aGljaCBpcyBhY2Nlc3NlZCB1c2luZyBbYnAteHhdLgogIEJlZm9yZSBjYWxsaW5nIGEgZnVuY3Rpb24sIGFyZ3VtZW50cyBhcmUgcHVzaGVkIG9uIHRoZSBzdGFjayB1c2luZyBzb21ldGhpbmcKICBsaWtlIHRoaXM6CnwJcHVzaCB3b3JkIHB0ciBbYnAtMDJdCTwtIHdpbGwgYmUgYXQgW2JwKzhdCnwJcHVzaCBkaQkJCTwtIHdpbGwgYmUgYXQgW2JwKzZdCnwJY2FsbCBLRVJORUwuTFNUUkxFTgogIEhlcmUgZmlyc3QgdGhlIHNlbGVjdG9yIGFuZCB0aGVuIHRoZSBvZmZzZXQgdG8gdGhlIHBhc3NlZCBzdHJpbmcgYXJlIHB1c2hlZC4KClNhbXBsZSBkZWJ1Z2dpbmcgc2Vzc2lvbjoKPT09PT09PT09PT09PT09PT09PT09PT09PQoKICBMZXQncyBkZWJ1ZyB0aGUgaW5mYW1vdXMgV29yZCBTSEFSRS5FWEUgbWVzc2FnZWJveDogCgp8bWFyY3VzQGpldCAkIHdpbmUgd2lud29yZC5leGUKfCAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCnwgICAgICAgICAgICB8ICEgIFlvdSBtdXN0IGxlYXZlIFdpbmRvd3MgYW5kIGxvYWQgU0hBUkUuRVhFfAp8ICAgICAgICAgICAgfCAgICBiZWZvcmUgc3RhcnRpbmcgV29yZC4gICAgICAgICAgICAgICAgICAgIHwKfCAgICAgICAgICAgICstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0rCgoKfG1hcmN1c0BqZXQgJCB3aW5lIHdpbndvcmQuZXhlIC1kZWJ1Z21zZyArcmVsYXkgLWRlYnVnCnxDYWxsVG8zMih3bmRwcm9jPTB4NDAwNjViYzAsaHduZD0wMDAwMDFhYyxtc2c9MDAwMDAwODEsd3A9MDAwMDAwMDAsbHA9MDAwMDAwMDApCnxXaW4xNiB0YXNrICd3aW53b3JkJzogQnJlYWtwb2ludCAxIGF0IDB4MDFkNzoweDAwMWEKfENhbGxUbzE2KGZ1bmM9MDEyNzowMDcwLGRzPTA5MjcpCnxDYWxsIFdQUk9DUy4yNDogVEFTS19SRVNDSEVEVUxFKCkgcmV0PTAwYjc6MTQ1NiBkcz0wOTI3CnxSZXQgIFdQUk9DUy4yNDogVEFTS19SRVNDSEVEVUxFKCkgcmV0dmFsPTB4ODY3MiByZXQ9MDBiNzoxNDU2IGRzPTA5MjcKfENhbGxUbzE2KGZ1bmM9MDFkNzowMDFhLGRzPTA5MjcpCnwgICAgIEFYPTAwMDAgQlg9M2NiNCBDWD0xZjQwIERYPTAwMDAgU0k9MDAwMCBEST0wOTI3IEJQPTAwMDAgRVM9MTFmNwp8TG9hZGluZyBzeW1ib2xzOiAvaG9tZS9tYXJjdXMvd2luZS93aW5lLi4uCnxTdG9wcGVkIG9uIGJyZWFrcG9pbnQgMSBhdCAweDAxZDc6MHgwMDFhCnxJbiAxNiBiaXQgbW9kZS4KfFdpbmUtZGJnPmJyZWFrIE1lc3NhZ2VCb3gzMkEgICAgICAgICAgICAgICAgICAgICAgICAgIDwtLS0tIFNldCBCcmVha3BvaW50CnxCcmVha3BvaW50IDIgYXQgMHg0MDE4OTEwMCAoTWVzc2FnZUJveDMyQSBbbXNnYm94LmM6MTkwXSkKfFdpbmUtZGJnPmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwtLS0tIENvbnRpbnVlCnxDYWxsIEtFUk5FTC45MTogSU5JVFRBU0soKSByZXQ9MDE1NzowMDIyIGRzPTA4YTcKfCAgICAgQVg9MDAwMCBCWD0zY2I0IENYPTFmNDAgRFg9MDAwMCBTST0wMDAwIERJPTA4YTcgRVM9MTFkNyBFRkw9MDAwMDAyODYKfENhbGxUbzE2KGZ1bmM9MDkwZjowODVjLGRzPTBkY2YsMHgwMDAwLDB4MDAwMCwweDAwMDAsMHgwMDAwLDB4MDgwMCwweDAwMDAsMHgwMDAwLDB4MGRjZikKfC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwtLS0tLSBNdWNoIGRlYnVnb3V0cHV0CnxDYWxsIEtFUk5FTC4xMzY6IEdFVERSSVZFVFlQRSgweDAwMDApIHJldD0wNjBmOjA5N2IgZHM9MDkyNwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eIERyaXZlIDAgKEE6KQp8UmV0ICBLRVJORUwuMTM2OiBHRVREUklWRVRZUEUoKSByZXR2YWw9MHgwMDAyIHJldD0wNjBmOjA5N2IgZHM9MDkyNwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eICBEUklWRV9SRU1PVkVBQkxFCgkJCQkJCShJdCBpcyBhIGZsb3BweSBkaXNrZHJpdmUuKQoKfENhbGwgS0VSTkVMLjEzNjogR0VURFJJVkVUWVBFKDB4MDAwMSkgcmV0PTA2MGY6MDk3YiBkcz0wOTI3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4gRHJpdmUgMSAoQjopCnxSZXQgIEtFUk5FTC4xMzY6IEdFVERSSVZFVFlQRSgpIHJldHZhbD0weDAwMDAgcmV0PTA2MGY6MDk3YiBkcz0wOTI3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl4gIERSSVZFX0NBTk5PVERFVEVSTUlORQoJCQkJCQkoSSBkb24ndCBoYXZlIGRyaXZlIEI6IGFzc2lnbmVkKQoKfENhbGwgS0VSTkVMLjEzNjogR0VURFJJVkVUWVBFKDB4MDAwMikgcmV0PTA2MGY6MDk3YiBkcz0wOTI3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl5eIERyaXZlIDIgKEM6KQp8UmV0ICBLRVJORUwuMTM2OiBHRVREUklWRVRZUEUoKSByZXR2YWw9MHgwMDAzIHJldD0wNjBmOjA5N2IgZHM9MDkyNwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eIERSSVZFX0ZJWEVECiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHNwZWNpZmllZCBhcyBhIGhhcmRkaXNrKQoKfENhbGwgS0VSTkVMLjk3OiBHRVRURU1QRklMRU5BTUUoMHgwMGMzLDB4MDkyNzgzNjQiZG9jIiwweDAwMDAsMDkyNzo4MjQ4KSByZXQ9MDYwZjowOWIxIGRzPTA5MjcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eICAgICAgICAgICBeXl5eXiAgICAgICAgXl5eXl5eXl5eCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfCAgICAgICAgICAgIHxidWZmZXIgZm9yIGZuYW1lCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgICAgfHRlbXBvcmFyeSBuYW1lIH5kb2NYWFhYLnRtcAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Rm9yY2UgdXNlIG9mIERyaXZlIEM6LgoKfFdhcm5pbmc6IEdldFRlbXBGaWxlTmFtZSByZXR1cm5zICdDOn5kb2M5MjgxLnRtcCcsIHdoaWNoIGRvZXNuJ3Qgc2VlbSB0byBiZSB3cml0ZWFibGUuCnxQbGVhc2UgY2hlY2sgeW91ciBjb25maWd1cmF0aW9uIGZpbGUgaWYgdGhpcyBnZW5lcmF0ZXMgYSBmYWlsdXJlLgoKV2hvb3BzLCBpdCBldmVuIGRldGVjdHMgdGhhdCBzb21ldGhpbmcgaXMgd3JvbmchCgp8UmV0ICBLRVJORUwuOTc6IEdFVFRFTVBGSUxFTkFNRSgpIHJldHZhbD0weDkyODEgcmV0PTA2MGY6MDliMSBkcz0wOTI3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXiBUZW1wb3Jhcnkgc3RvcmFnZSBJRAoKfENhbGwgS0VSTkVMLjc0OiBPUEVORklMRSgweDA5Mjc4MjQ4IkM6fmRvYzkyODEudG1wIiwwOTI3OjgyZGEsMHgxMDEyKSByZXQ9MDYwZjowOWQ4IGRzPTA5MjcKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eXl5eXl5eXl5eXiBeXl5eXl5eXl4gXl5eXl5eXgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ZmlsZW5hbWUgICAgICAgIHxPRlNUUlVDVCB8b3BlbiBtb2RlOgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT0ZfQ1JFQVRFfE9GX1NIQVJFX0VYQ0xVU0lWRXxPRl9SRUFEV1JJVEUKClRoaXMgZmFpbHMsIHNpbmNlIG15IEM6IGRyaXZlIGlzIGluIHRoaXMgY2FzZSBtb3VudGVkIHJlYWRvbmx5LgoKfFJldCAgS0VSTkVMLjc0OiBPUEVORklMRSgpIHJldHZhbD0weGZmZmYgcmV0PTA2MGY6MDlkOCBkcz0wOTI3CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXl5eXl5eIEhGSUxFX0VSUk9SMTYsIHllcywgaXQgZmFpbGVkLgoKfENhbGwgVVNFUi4xOiBNRVNTQUdFQk9YKDB4MDAwMCwweDA5Mjc4Mzc2IlNpZSBt/HNzZW4gV2luZG93cyB2ZXJsYXNzZW4gdW5kIFNIQVJFLkVYRSBsYWRlbiBiZXZvciBTaWUgV29yZCBzdGFydGVuLiIsMHgwMDAwMDAwMCwweDEwMzApIHJldD0wNjBmOjA4NGYgZHM9MDkyNwogICAgICAgICAgIApBbmQgTWVzc2FnZUJveCdlZC4KCnxTdG9wcGVkIG9uIGJyZWFrcG9pbnQgMiBhdCAweDQwMTg5MTAwIChNZXNzYWdlQm94MzJBIFttc2dib3guYzoxOTBdKQp8MTkwICAgICB7CQk8LSB0aGUgc291cmNlbGluZQpJbiAzMiBiaXQgbW9kZS4KV2luZS1kYmc+CgoJVGhlIGNvZGUgc2VlbXMgdG8gZmluZCBhIHdyaXRlYWJsZSBoYXJkZGlzayBhbmQgdHJpZXMgdG8gY3JlYXRlIGEgZmlsZQoJdGhlcmUuIFRvIHdvcmsgYXJvdW5kIHRoaXMgYnVnLCB5b3UgY2FuIGRlZmluZSBDOiBhcyBhIG5ldHdvcmtkcml2ZSwKCXdoaWNoIGlzIGlnbm9yZWQgYnkgdGhlIGNvZGUgYWJvdmUuCgpXcml0dGVuIGJ5IE1hcmN1cyBNZWlzc25lciA8bXNtZWlzc25AY2lwLmluZm9ybWF0aWsudW5pLWVybGFuZ2VuLmRlPiwKYWRkaXRpb25zIHdlbGNvbWUuCg==