TGludXgqIEJhc2UgRHJpdmVyIGZvciBJbnRlbChSKSBFdGhlcm5ldCBOZXR3b3JrIENvbm5lY3Rpb24KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkphbnVhcnkgNSwgMjAxMgoKQ29udGVudHMKPT09PT09PT0KCi0gSW4gVGhpcyBSZWxlYXNlCi0gSWRlbnRpZnlpbmcgWW91ciBBZGFwdGVyCi0gVXBncmFkaW5nCi0gQnVpbGRpbmcgYW5kIEluc3RhbGxhdGlvbgotIENvbW1hbmQgTGluZSBQYXJhbWV0ZXJzCi0gQWRkaXRpb25hbCBDb25maWd1cmF0aW9ucwotIEtub3duIElzc3Vlcy9Ucm91Ymxlc2hvb3RpbmcKLSBTdXBwb3J0CgpJbiBUaGlzIFJlbGVhc2UKPT09PT09PT09PT09PT09CgpUaGlzIGZpbGUgZGVzY3JpYmVzIHRoZSBlMTAwMGUgTGludXgqIEJhc2UgRHJpdmVyIGZvciBJbnRlbCBFdGhlcm5ldCBOZXR3b3JrCkNvbm5lY3Rpb24uICBUaGlzIGRyaXZlciBzdXBwb3J0cyBrZXJuZWwgdmVyc2lvbnMgMi40LnggYW5kIDIuNi54LiAgVGhpcyAKZHJpdmVyIGluY2x1ZGVzIHN1cHBvcnQgZm9yIEl0YW5pdW0oUikyLWJhc2VkIHN5c3RlbXMuCgpOT1RFOiBUaGUgODI1NDZHQiBwYXJ0IHJlcXVpcmVzIHRoZSBlMTAwMCBkcml2ZXIsIG5vdCB0aGUgZTEwMDBlIGRyaXZlci4KIApUaGlzIGRyaXZlciBpcyBvbmx5IHN1cHBvcnRlZCBhcyBhIGxvYWRhYmxlIG1vZHVsZSBhdCB0aGlzIHRpbWUuICBJbnRlbCBpcwpub3Qgc3VwcGx5aW5nIHBhdGNoZXMgYWdhaW5zdCB0aGUga2VybmVsIHNvdXJjZSB0byBhbGxvdyBmb3Igc3RhdGljIGxpbmtpbmcKb2YgdGhlIGRyaXZlci4gIEZvciBxdWVzdGlvbnMgcmVsYXRlZCB0byBoYXJkd2FyZSByZXF1aXJlbWVudHMsIHJlZmVyIHRvIHRoZQpkb2N1bWVudGF0aW9uIHN1cHBsaWVkIHdpdGggeW91ciBJbnRlbCBHaWdhYml0IGFkYXB0ZXIuICBBbGwgaGFyZHdhcmUKcmVxdWlyZW1lbnRzIGxpc3RlZCBhcHBseSB0byB1c2Ugd2l0aCBMaW51eC4KClRoZSBmb2xsb3dpbmcgZmVhdHVyZXMgYXJlIG5vdyBhdmFpbGFibGUgaW4gc3VwcG9ydGVkIGtlcm5lbHM6CiAtIE5hdGl2ZSBWTEFOcwogLSBDaGFubmVsIEJvbmRpbmcgKHRlYW1pbmcpCiAtIFNOTVAKCkNoYW5uZWwgQm9uZGluZyBkb2N1bWVudGF0aW9uIGNhbiBiZSBmb3VuZCBpbiB0aGUgTGludXgga2VybmVsIHNvdXJjZToKL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9ib25kaW5nLnR4dAoKVGhlIGRyaXZlciBpbmZvcm1hdGlvbiBwcmV2aW91c2x5IGRpc3BsYXllZCBpbiB0aGUgL3Byb2MgZmlsZXN5c3RlbSBpcyBub3QKc3VwcG9ydGVkIGluIHRoaXMgcmVsZWFzZS4gIEFsdGVybmF0aXZlbHksIHlvdSBjYW4gdXNlIGV0aHRvb2wgKHZlcnNpb24gMS42Cm9yIGxhdGVyKSwgbHNwY2ksIGFuZCBpZmNvbmZpZyB0byBvYnRhaW4gdGhlIHNhbWUgaW5mb3JtYXRpb24uCgpJbnN0cnVjdGlvbnMgb24gdXBkYXRpbmcgZXRodG9vbCBjYW4gYmUgZm91bmQgaW4gdGhlIHNlY3Rpb24gIkFkZGl0aW9uYWwKQ29uZmlndXJhdGlvbnMiIGxhdGVyIGluIHRoaXMgZG9jdW1lbnQuCgpOT1RFOiBUaGUgSW50ZWwoUikgODI1NjJ2IDEwLzEwMCBOZXR3b3JrIENvbm5lY3Rpb24gb25seSBwcm92aWRlcyAxMC8xMDAKc3VwcG9ydC4KCklkZW50aWZ5aW5nIFlvdXIgQWRhcHRlcgo9PT09PT09PT09PT09PT09PT09PT09PT0KCkZvciBtb3JlIGluZm9ybWF0aW9uIG9uIGhvdyB0byBpZGVudGlmeSB5b3VyIGFkYXB0ZXIsIGdvIHRvIHRoZSBBZGFwdGVyICYKRHJpdmVyIElEIEd1aWRlIGF0OgoKICAgIGh0dHA6Ly9zdXBwb3J0LmludGVsLmNvbS9zdXBwb3J0L2dvL25ldHdvcmsvYWRhcHRlci9pZGd1aWRlLmh0bQoKRm9yIHRoZSBsYXRlc3QgSW50ZWwgbmV0d29yayBkcml2ZXJzIGZvciBMaW51eCwgcmVmZXIgdG8gdGhlIGZvbGxvd2luZwp3ZWJzaXRlLiBTZWxlY3QgdGhlIGxpbmsgZm9yIHlvdXIgYWRhcHRlci4KCiAgICBodHRwOi8vc3VwcG9ydC5pbnRlbC5jb20vc3VwcG9ydC9nby9uZXR3b3JrL2FkYXB0ZXIvaG9tZS5odG0KClVwZ3JhZGluZwo9PT09PT09PT0KCklmIHlvdSBjdXJyZW50bHkgaGF2ZSB0aGUgZTEwMDAgZHJpdmVyIGluc3RhbGxlZCBhbmQgbmVlZCB0byBpbnN0YWxsIGUxMDAwZSwKcGVyZm9ybSB0aGUgZm9sbG93aW5nOgoKIC0gSWYgeW91ciB2ZXJzaW9uIG9mIGUxMDAwIGlzIDcuNi4xNS41IG9yIGxlc3MsIHVwZ3JhZGUgdG8gZTEwMDAgdmVyc2lvbiA4LngsCiAgIHVzaW5nIHRoZSBpbnN0cnVjdGlvbnMgaW4gdGhlIGUxMDAwIFJFQURNRS4gCiAtIEluc3RhbGwgdGhlIGUxMDAwZSBkcml2ZXIgdXNpbmcgdGhlIGluc3RydWN0aW9ucyBpbiB0aGUgQnVpbGRpbmcgYW5kIAogICBJbnN0YWxsYXRpb24gc2VjdGlvbiBiZWxvdy4KIC0gTW9kaWZ5IC9ldGMvbW9kcHJvYmUuY29uZiB0byBwb2ludCB5b3VyIFBDSWUgZGV2aWNlcyB0byB1c2UgdGhlIG5ldyBlMTAwMGUgCiAgIGRyaXZlciB1c2luZyBhbGlhcyBldGhYIGUxMDAwZSwgb3IgdXNlIHlvdXIgZGlzdHJpYnV0aW9uJ3Mgc3BlY2lmaWMgbWV0aG9kIAogICBmb3IgY29uZmlndXJpbmcgbmV0d29yayBhZGFwdGVycyBsaWtlIFJlZEhhdCdzIHNldHVwL3N5c3RlbS1jb25maWctbmV0d29yawogICBvciBTdVNFJ3MgeWFzdDIuCgpCdWlsZGluZyBhbmQgSW5zdGFsbGF0aW9uCj09PT09PT09PT09PT09PT09PT09PT09PT0KClRvIGJ1aWxkIGEgYmluYXJ5IFJQTSogcGFja2FnZSBvZiB0aGlzIGRyaXZlciwgcnVuICdycG1idWlsZCAtdGIKPGZpbGVuYW1lLnRhci5nej4nLiAgUmVwbGFjZSA8ZmlsZW5hbWUudGFyLmd6PiB3aXRoIHRoZSBzcGVjaWZpYyBmaWxlbmFtZQpvZiB0aGUgZHJpdmVyLgoKTk9URTogRm9yIHRoZSBidWlsZCB0byB3b3JrIHByb3Blcmx5LCB0aGUgY3VycmVudGx5IHJ1bm5pbmcga2VybmVsIE1VU1QKICAgICAgbWF0Y2ggdGhlIHZlcnNpb24gYW5kIGNvbmZpZ3VyYXRpb24gb2YgdGhlIGluc3RhbGxlZCBrZXJuZWwgc291cmNlcy4KICAgICAgSWYgeW91IGhhdmUganVzdCByZWNvbXBpbGVkIHRoZSBrZXJuZWwgcmVib290IHRoZSBzeXN0ZW0gbm93LgoKICAgICAgUlBNIGZ1bmN0aW9uYWxpdHkgaGFzIG9ubHkgYmVlbiB0ZXN0ZWQgaW4gUmVkIEhhdCBkaXN0cmlidXRpb25zLgoKMS4gTW92ZSB0aGUgYmFzZSBkcml2ZXIgdGFyIGZpbGUgdG8gdGhlIGRpcmVjdG9yeSBvZiB5b3VyIGNob2ljZS4gIEZvcgogICBleGFtcGxlLCB1c2UgL2hvbWUvdXNlcm5hbWUvZTEwMDBlIG9yIC91c3IvbG9jYWwvc3JjL2UxMDAwZS4KCjIuIFVudGFyL3VuemlwIGFyY2hpdmU6CgogICAgIHRhciB6eGYgZTEwMDBlLXgueC54LnRhci5negoKMy4gQ2hhbmdlIHRvIHRoZSBkcml2ZXIgc3JjIGRpcmVjdG9yeToKCiAgICAgY2QgZTEwMDBlLXgueC54L3NyYy8KCjQuIENvbXBpbGUgdGhlIGRyaXZlciBtb2R1bGU6CgogICAgICMgbWFrZSBpbnN0YWxsCgogICBUaGUgYmluYXJ5IHdpbGwgYmUgaW5zdGFsbGVkIGFzOgoKICAgICAvbGliL21vZHVsZXMvPEtFUk5FTCBWRVJTSU9OPi9rZXJuZWwvZHJpdmVycy9uZXQvZTEwMDBlL2UxMDAwZS5ba11vCgogICBUaGUgaW5zdGFsbCBsb2NhdGlvbnMgbGlzdGVkIGFib3ZlIGFyZSB0aGUgZGVmYXVsdCBsb2NhdGlvbnMuICBUaGV5CiAgIG1pZ2h0IG5vdCBiZSBjb3JyZWN0IGZvciBjZXJ0YWluIExpbnV4IGRpc3RyaWJ1dGlvbnMuIAoKNS4gTG9hZCB0aGUgbW9kdWxlIHVzaW5nIGVpdGhlciB0aGUgaW5zbW9kIG9yIG1vZHByb2JlIGNvbW1hbmQ6CgogICAgIG1vZHByb2JlIGUxMDAwZQoKICAgICBpbnNtb2QgZTEwMDBlCgogICBOb3RlIHRoYXQgZm9yIDIuNiBrZXJuZWxzIHRoZSBpbnNtb2QgY29tbWFuZCBjYW4gYmUgdXNlZCBpZiB0aGUgZnVsbAogICBwYXRoIHRvIHRoZSBkcml2ZXIgbW9kdWxlIGlzIHNwZWNpZmllZC4gIEZvciBleGFtcGxlOgoKICAgICBpbnNtb2QgL2xpYi9tb2R1bGVzLzxLRVJORUwgVkVSU0lPTj4va2VybmVsL2RyaXZlcnMvbmV0L2UxMDAwZS9lMTAwMGUua28KCiAgIFdpdGggMi42IGJhc2VkIGtlcm5lbHMgYWxzbyBtYWtlIHN1cmUgdGhhdCBvbGRlciBlMTAwMGUgZHJpdmVycyBhcmUgCiAgIHJlbW92ZWQgZnJvbSB0aGUga2VybmVsLCBiZWZvcmUgbG9hZGluZyB0aGUgbmV3IG1vZHVsZToKCiAgICAgcm1tb2QgZTEwMDBlOyBtb2Rwcm9iZSBlMTAwMGUKCjYuIEFzc2lnbiBhbiBJUCBhZGRyZXNzIHRvIHRoZSBpbnRlcmZhY2UgYnkgZW50ZXJpbmcgdGhlIGZvbGxvd2luZywgd2hlcmUKICAgeCBpcyB0aGUgaW50ZXJmYWNlIG51bWJlcjoKCiAgICAgaWZjb25maWcgZXRoeCA8SVBfYWRkcmVzcz4KCjcuIFZlcmlmeSB0aGF0IHRoZSBpbnRlcmZhY2Ugd29ya3MuICBFbnRlciB0aGUgZm9sbG93aW5nLCB3aGVyZSA8SVBfYWRkcmVzcz4KICAgaXMgdGhlIElQIGFkZHJlc3MgZm9yIGFub3RoZXIgbWFjaGluZSBvbiB0aGUgc2FtZSBzdWJuZXQgYXMgdGhlCiAgIGludGVyZmFjZSB0aGF0IGlzIGJlaW5nIHRlc3RlZDoKCiAgICAgcGluZyAgPElQX2FkZHJlc3M+CgpUUk9VQkxFU0hPT1RJTkc6IFNvbWUgc3lzdGVtcyBoYXZlIHRyb3VibGUgc3VwcG9ydGluZyBNU0kgYW5kL29yIE1TSS1YIAppbnRlcnJ1cHRzLiAgSWYgeW91IGJlbGlldmUgeW91ciBzeXN0ZW0gbmVlZHMgdG8gZGlzYWJsZSB0aGlzIHN0eWxlIG9mIAppbnRlcnJ1cHQsIHRoZSBkcml2ZXIgY2FuIGJlIGJ1aWx0IGFuZCBpbnN0YWxsZWQgd2l0aCB0aGUgY29tbWFuZDoKCiAgICAgIyBtYWtlIENGTEFHU19FWFRSQT0tRERJU0FCTEVfUENJX01TSSBpbnN0YWxsCgpOb3JtYWxseSB0aGUgZHJpdmVyIHdpbGwgZ2VuZXJhdGUgYW4gaW50ZXJydXB0IGV2ZXJ5IHR3byBzZWNvbmRzLCBzbyBpZgp5b3UgY2FuIHNlZSB0aGF0IHlvdSdyZSBubyBsb25nZXIgZ2V0dGluZyBpbnRlcnJ1cHRzIGluCmNhdCAvcHJvYy9pbnRlcnJ1cHRzIGZvciB0aGUgZXRoWCBlMTAwMGUgZGV2aWNlLCB0aGVuIHRoaXMgd29ya2Fyb3VuZAptYXkgYmUgbmVjZXNzYXJ5LgoKQ29tbWFuZCBMaW5lIFBhcmFtZXRlcnMKPT09PT09PT09PT09PT09PT09PT09PT0KCklmIHRoZSBkcml2ZXIgaXMgYnVpbHQgYXMgYSBtb2R1bGUsIHRoZSAgZm9sbG93aW5nIG9wdGlvbmFsIHBhcmFtZXRlcnMKYXJlIHVzZWQgYnkgZW50ZXJpbmcgdGhlbSBvbiB0aGUgY29tbWFuZCBsaW5lIHdpdGggdGhlIG1vZHByb2JlIGNvbW1hbmQKdXNpbmcgdGhpcyBzeW50YXg6CgogICAgIG1vZHByb2JlIGUxMDAwZSBbPG9wdGlvbj49PFZBTDE+LDxWQUwyPiwuLi5dCgpUaGUgZGVmYXVsdCB2YWx1ZSBmb3IgZWFjaCBwYXJhbWV0ZXIgaXMgZ2VuZXJhbGx5IHRoZSByZWNvbW1lbmRlZCBzZXR0aW5nLAp1bmxlc3Mgb3RoZXJ3aXNlIG5vdGVkLgoKTk9URVM6ICBGb3IgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgSW50ZXJydXB0VGhyb3R0bGVSYXRlLAogICAgICAgIFJ4SW50RGVsYXksIFR4SW50RGVsYXksIFJ4QWJzSW50RGVsYXksIGFuZCBUeEFic0ludERlbGF5CiAgICAgICAgcGFyYW1ldGVycywgc2VlIHRoZSBhcHBsaWNhdGlvbiBub3RlIGF0OgogICAgICAgIGh0dHA6Ly93d3cuaW50ZWwuY29tL2Rlc2lnbi9uZXR3b3JrL2FwcGxub3RzL2FwNDUwLmh0bQoKICAgICAgICBBIGRlc2NyaXB0b3IgZGVzY3JpYmVzIGEgZGF0YSBidWZmZXIgYW5kIGF0dHJpYnV0ZXMgcmVsYXRlZCB0bwogICAgICAgIHRoZSBkYXRhIGJ1ZmZlci4gIFRoaXMgaW5mb3JtYXRpb24gaXMgYWNjZXNzZWQgYnkgdGhlIGhhcmR3YXJlLgoKSW50ZXJydXB0VGhyb3R0bGVSYXRlCi0tLS0tLS0tLS0tLS0tLS0tLS0tLQpWYWxpZCBSYW5nZTogICAwLDEsMyw0LCAxMDAtMTAwMDAwICgwPW9mZiwgMT1keW5hbWljLCAzPWR5bmFtaWMgY29uc2VydmF0aXZlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA0PXNpbXBsaWZpZWQgYmFsYW5jaW5nKQpEZWZhdWx0IFZhbHVlOiAzCgpUaGUgZHJpdmVyIGNhbiBsaW1pdCB0aGUgYW1vdW50IG9mIGludGVycnVwdHMgcGVyIHNlY29uZCB0aGF0IHRoZSBhZGFwdGVyCndpbGwgZ2VuZXJhdGUgZm9yIGluY29taW5nIHBhY2tldHMuIEl0IGRvZXMgdGhpcyBieSB3cml0aW5nIGEgdmFsdWUgdG8gdGhlIAphZGFwdGVyIHRoYXQgaXMgYmFzZWQgb24gdGhlIG1heGltdW0gYW1vdW50IG9mIGludGVycnVwdHMgdGhhdCB0aGUgYWRhcHRlciAKd2lsbCBnZW5lcmF0ZSBwZXIgc2Vjb25kLgoKU2V0dGluZyBJbnRlcnJ1cHRUaHJvdHRsZVJhdGUgdG8gYSB2YWx1ZSBncmVhdGVyIG9yIGVxdWFsIHRvIDEwMAp3aWxsIHByb2dyYW0gdGhlIGFkYXB0ZXIgdG8gc2VuZCBvdXQgYSBtYXhpbXVtIG9mIHRoYXQgbWFueSBpbnRlcnJ1cHRzCnBlciBzZWNvbmQsIGV2ZW4gaWYgbW9yZSBwYWNrZXRzIGhhdmUgY29tZSBpbi4gVGhpcyByZWR1Y2VzIGludGVycnVwdApsb2FkIG9uIHRoZSBzeXN0ZW0gYW5kIGNhbiBsb3dlciBDUFUgdXRpbGl6YXRpb24gdW5kZXIgaGVhdnkgbG9hZCwKYnV0IHdpbGwgaW5jcmVhc2UgbGF0ZW5jeSBhcyBwYWNrZXRzIGFyZSBub3QgcHJvY2Vzc2VkIGFzIHF1aWNrbHkuCgpUaGUgZGVmYXVsdCBiZWhhdmlvdXIgb2YgdGhlIGRyaXZlciBwcmV2aW91c2x5IGFzc3VtZWQgYSBzdGF0aWMgCkludGVycnVwdFRocm90dGxlUmF0ZSB2YWx1ZSBvZiA4MDAwLCBwcm92aWRpbmcgYSBnb29kIGZhbGxiYWNrIHZhbHVlIGZvciAKYWxsIHRyYWZmaWMgdHlwZXMsIGJ1dCBsYWNraW5nIGluIHNtYWxsIHBhY2tldCBwZXJmb3JtYW5jZSBhbmQgbGF0ZW5jeS4gCgpUaGUgZHJpdmVyIGhhcyB0d28gYWRhcHRpdmUgbW9kZXMgKHNldHRpbmcgMSBvciAzKSBpbiB3aGljaAppdCBkeW5hbWljYWxseSBhZGp1c3RzIHRoZSBJbnRlcnJ1cHRUaHJvdHRsZVJhdGUgdmFsdWUgYmFzZWQgb24gdGhlIHRyYWZmaWMgCnRoYXQgaXQgcmVjZWl2ZXMuIEFmdGVyIGRldGVybWluaW5nIHRoZSB0eXBlIG9mIGluY29taW5nIHRyYWZmaWMgaW4gdGhlIGxhc3QKdGltZWZyYW1lLCBpdCB3aWxsIGFkanVzdCB0aGUgSW50ZXJydXB0VGhyb3R0bGVSYXRlIHRvIGFuIGFwcHJvcHJpYXRlIHZhbHVlIApmb3IgdGhhdCB0cmFmZmljLgoKVGhlIGFsZ29yaXRobSBjbGFzc2lmaWVzIHRoZSBpbmNvbWluZyB0cmFmZmljIGV2ZXJ5IGludGVydmFsIGludG8KY2xhc3Nlcy4gIE9uY2UgdGhlIGNsYXNzIGlzIGRldGVybWluZWQsIHRoZSBJbnRlcnJ1cHRUaHJvdHRsZVJhdGUgdmFsdWUgaXMgCmFkanVzdGVkIHRvIHN1aXQgdGhhdCB0cmFmZmljIHR5cGUgdGhlIGJlc3QuIFRoZXJlIGFyZSB0aHJlZSBjbGFzc2VzIGRlZmluZWQ6IAoiQnVsayB0cmFmZmljIiwgZm9yIGxhcmdlIGFtb3VudHMgb2YgcGFja2V0cyBvZiBub3JtYWwgc2l6ZTsgIkxvdyBsYXRlbmN5IiwKZm9yIHNtYWxsIGFtb3VudHMgb2YgdHJhZmZpYyBhbmQvb3IgYSBzaWduaWZpY2FudCBwZXJjZW50YWdlIG9mIHNtYWxsCnBhY2tldHM7IGFuZCAiTG93ZXN0IGxhdGVuY3kiLCBmb3IgYWxtb3N0IGNvbXBsZXRlbHkgc21hbGwgcGFja2V0cyBvciAKbWluaW1hbCB0cmFmZmljLgoKSW4gZHluYW1pYyBjb25zZXJ2YXRpdmUgbW9kZSwgdGhlIEludGVycnVwdFRocm90dGxlUmF0ZSB2YWx1ZSBpcyBzZXQgdG8gNDAwMCAKZm9yIHRyYWZmaWMgdGhhdCBmYWxscyBpbiBjbGFzcyAiQnVsayB0cmFmZmljIi4gSWYgdHJhZmZpYyBmYWxscyBpbiB0aGUgIkxvdyAKbGF0ZW5jeSIgb3IgIkxvd2VzdCBsYXRlbmN5IiBjbGFzcywgdGhlIEludGVycnVwdFRocm90dGxlUmF0ZSBpcyBpbmNyZWFzZWQgCnN0ZXB3aXNlIHRvIDIwMDAwLiBUaGlzIGRlZmF1bHQgbW9kZSBpcyBzdWl0YWJsZSBmb3IgbW9zdCBhcHBsaWNhdGlvbnMuCgpGb3Igc2l0dWF0aW9ucyB3aGVyZSBsb3cgbGF0ZW5jeSBpcyB2aXRhbCBzdWNoIGFzIGNsdXN0ZXIgb3IKZ3JpZCBjb21wdXRpbmcsIHRoZSBhbGdvcml0aG0gY2FuIHJlZHVjZSBsYXRlbmN5IGV2ZW4gbW9yZSB3aGVuCkludGVycnVwdFRocm90dGxlUmF0ZSBpcyBzZXQgdG8gbW9kZSAxLiBJbiB0aGlzIG1vZGUsIHdoaWNoIG9wZXJhdGVzCnRoZSBzYW1lIGFzIG1vZGUgMywgdGhlIEludGVycnVwdFRocm90dGxlUmF0ZSB3aWxsIGJlIGluY3JlYXNlZCBzdGVwd2lzZSB0byAKNzAwMDAgZm9yIHRyYWZmaWMgaW4gY2xhc3MgIkxvd2VzdCBsYXRlbmN5Ii4KCkluIHNpbXBsaWZpZWQgbW9kZSB0aGUgaW50ZXJydXB0IHJhdGUgaXMgYmFzZWQgb24gdGhlIHJhdGlvIG9mIHR4IGFuZApyeCB0cmFmZmljLiAgSWYgdGhlIGJ5dGVzIHBlciBzZWNvbmQgcmF0ZSBpcyBhcHByb3hpbWF0ZWx5IGVxdWFsLCB0aGUKaW50ZXJydXB0IHJhdGUgd2lsbCBkcm9wIGFzIGxvdyBhcyAyMDAwIGludGVycnVwdHMgcGVyIHNlY29uZC4gIElmIHRoZQp0cmFmZmljIGlzIG1vc3RseSB0cmFuc21pdCBvciBtb3N0bHkgcmVjZWl2ZSwgdGhlIGludGVycnVwdCByYXRlIGNvdWxkCmJlIGFzIGhpZ2ggYXMgODAwMC4KClNldHRpbmcgSW50ZXJydXB0VGhyb3R0bGVSYXRlIHRvIDAgdHVybnMgb2ZmIGFueSBpbnRlcnJ1cHQgbW9kZXJhdGlvbgphbmQgbWF5IGltcHJvdmUgc21hbGwgcGFja2V0IGxhdGVuY3ksIGJ1dCBpcyBnZW5lcmFsbHkgbm90IHN1aXRhYmxlCmZvciBidWxrIHRocm91Z2hwdXQgdHJhZmZpYy4KCk5PVEU6ICBJbnRlcnJ1cHRUaHJvdHRsZVJhdGUgdGFrZXMgcHJlY2VkZW5jZSBvdmVyIHRoZSBUeEFic0ludERlbGF5IGFuZAogICAgICAgUnhBYnNJbnREZWxheSBwYXJhbWV0ZXJzLiAgSW4gb3RoZXIgd29yZHMsIG1pbmltaXppbmcgdGhlIHJlY2VpdmUKICAgICAgIGFuZC9vciB0cmFuc21pdCBhYnNvbHV0ZSBkZWxheXMgZG9lcyBub3QgZm9yY2UgdGhlIGNvbnRyb2xsZXIgdG8KICAgICAgIGdlbmVyYXRlIG1vcmUgaW50ZXJydXB0cyB0aGFuIHdoYXQgdGhlIEludGVycnVwdCBUaHJvdHRsZSBSYXRlCiAgICAgICBhbGxvd3MuCgpOT1RFOiAgV2hlbiBlMTAwMGUgaXMgbG9hZGVkIHdpdGggZGVmYXVsdCBzZXR0aW5ncyBhbmQgbXVsdGlwbGUgYWRhcHRlcnMKICAgICAgIGFyZSBpbiB1c2Ugc2ltdWx0YW5lb3VzbHksIHRoZSBDUFUgdXRpbGl6YXRpb24gbWF5IGluY3JlYXNlIG5vbi0KICAgICAgIGxpbmVhcmx5LiAgSW4gb3JkZXIgdG8gbGltaXQgdGhlIENQVSB1dGlsaXphdGlvbiB3aXRob3V0IGltcGFjdGluZwogICAgICAgdGhlIG92ZXJhbGwgdGhyb3VnaHB1dCwgd2UgcmVjb21tZW5kIHRoYXQgeW91IGxvYWQgdGhlIGRyaXZlciBhcwogICAgICAgZm9sbG93czoKCiAgICAgICAgICAgbW9kcHJvYmUgZTEwMDBlIEludGVycnVwdFRocm90dGxlUmF0ZT0zMDAwLDMwMDAsMzAwMAoKICAgICAgIFRoaXMgc2V0cyB0aGUgSW50ZXJydXB0VGhyb3R0bGVSYXRlIHRvIDMwMDAgaW50ZXJydXB0cy9zZWMgZm9yCiAgICAgICB0aGUgZmlyc3QsIHNlY29uZCwgYW5kIHRoaXJkIGluc3RhbmNlcyBvZiB0aGUgZHJpdmVyLiAgVGhlIHJhbmdlCiAgICAgICBvZiAyMDAwIHRvIDMwMDAgaW50ZXJydXB0cyBwZXIgc2Vjb25kIHdvcmtzIG9uIGEgbWFqb3JpdHkgb2YKICAgICAgIHN5c3RlbXMgYW5kIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYnV0IHRoZSBvcHRpbWFsIHZhbHVlIHdpbGwKICAgICAgIGJlIHBsYXRmb3JtLXNwZWNpZmljLiAgSWYgQ1BVIHV0aWxpemF0aW9uIGlzIG5vdCBhIGNvbmNlcm4sIHVzZQogICAgICAgUlhfUE9MTElORyAoTkFQSSkgYW5kIGRlZmF1bHQgZHJpdmVyIHNldHRpbmdzLgoKUnhJbnREZWxheQotLS0tLS0tLS0tClZhbGlkIFJhbmdlOiAgIDAtNjU1MzUgKDA9b2ZmKQpEZWZhdWx0IFZhbHVlOiAwCgpUaGlzIHZhbHVlIGRlbGF5cyB0aGUgZ2VuZXJhdGlvbiBvZiByZWNlaXZlIGludGVycnVwdHMgaW4gdW5pdHMgb2YgMS4wMjQKbWljcm9zZWNvbmRzLiAgUmVjZWl2ZSBpbnRlcnJ1cHQgcmVkdWN0aW9uIGNhbiBpbXByb3ZlIENQVSBlZmZpY2llbmN5IGlmCnByb3Blcmx5IHR1bmVkIGZvciBzcGVjaWZpYyBuZXR3b3JrIHRyYWZmaWMuICBJbmNyZWFzaW5nIHRoaXMgdmFsdWUgYWRkcwpleHRyYSBsYXRlbmN5IHRvIGZyYW1lIHJlY2VwdGlvbiBhbmQgY2FuIGVuZCB1cCBkZWNyZWFzaW5nIHRoZSB0aHJvdWdocHV0Cm9mIFRDUCB0cmFmZmljLiAgSWYgdGhlIHN5c3RlbSBpcyByZXBvcnRpbmcgZHJvcHBlZCByZWNlaXZlcywgdGhpcyB2YWx1ZQptYXkgYmUgc2V0IHRvbyBoaWdoLCBjYXVzaW5nIHRoZSBkcml2ZXIgdG8gcnVuIG91dCBvZiBhdmFpbGFibGUgcmVjZWl2ZQpkZXNjcmlwdG9ycy4KCkNBVVRJT046ICBXaGVuIHNldHRpbmcgUnhJbnREZWxheSB0byBhIHZhbHVlIG90aGVyIHRoYW4gMCwgYWRhcHRlcnMgbWF5CiAgICAgICAgICBoYW5nIChzdG9wIHRyYW5zbWl0dGluZykgdW5kZXIgY2VydGFpbiBuZXR3b3JrIGNvbmRpdGlvbnMuICBJZgogICAgICAgICAgdGhpcyBvY2N1cnMgYSBORVRERVYgV0FUQ0hET0cgbWVzc2FnZSBpcyBsb2dnZWQgaW4gdGhlIHN5c3RlbQogICAgICAgICAgZXZlbnQgbG9nLiAgSW4gYWRkaXRpb24sIHRoZSBjb250cm9sbGVyIGlzIGF1dG9tYXRpY2FsbHkgcmVzZXQsCiAgICAgICAgICByZXN0b3JpbmcgdGhlIG5ldHdvcmsgY29ubmVjdGlvbi4gIFRvIGVsaW1pbmF0ZSB0aGUgcG90ZW50aWFsCiAgICAgICAgICBmb3IgdGhlIGhhbmcgZW5zdXJlIHRoYXQgUnhJbnREZWxheSBpcyBzZXQgdG8gMC4KClJ4QWJzSW50RGVsYXkKLS0tLS0tLS0tLS0tLQpWYWxpZCBSYW5nZTogICAwLTY1NTM1ICgwPW9mZikKRGVmYXVsdCBWYWx1ZTogOAoKVGhpcyB2YWx1ZSwgaW4gdW5pdHMgb2YgMS4wMjQgbWljcm9zZWNvbmRzLCBsaW1pdHMgdGhlIGRlbGF5IGluIHdoaWNoIGEKcmVjZWl2ZSBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkLiAgVXNlZnVsIG9ubHkgaWYgUnhJbnREZWxheSBpcyBub24temVybywKdGhpcyB2YWx1ZSBlbnN1cmVzIHRoYXQgYW4gaW50ZXJydXB0IGlzIGdlbmVyYXRlZCBhZnRlciB0aGUgaW5pdGlhbApwYWNrZXQgaXMgcmVjZWl2ZWQgd2l0aGluIHRoZSBzZXQgYW1vdW50IG9mIHRpbWUuICBQcm9wZXIgdHVuaW5nLAphbG9uZyB3aXRoIFJ4SW50RGVsYXksIG1heSBpbXByb3ZlIHRyYWZmaWMgdGhyb3VnaHB1dCBpbiBzcGVjaWZpYyBuZXR3b3JrCmNvbmRpdGlvbnMuCgpUeEludERlbGF5Ci0tLS0tLS0tLS0KVmFsaWQgUmFuZ2U6ICAgMC02NTUzNSAoMD1vZmYpCkRlZmF1bHQgVmFsdWU6IDgKClRoaXMgdmFsdWUgZGVsYXlzIHRoZSBnZW5lcmF0aW9uIG9mIHRyYW5zbWl0IGludGVycnVwdHMgaW4gdW5pdHMgb2YKMS4wMjQgbWljcm9zZWNvbmRzLiAgVHJhbnNtaXQgaW50ZXJydXB0IHJlZHVjdGlvbiBjYW4gaW1wcm92ZSBDUFUKZWZmaWNpZW5jeSBpZiBwcm9wZXJseSB0dW5lZCBmb3Igc3BlY2lmaWMgbmV0d29yayB0cmFmZmljLiAgSWYgdGhlCnN5c3RlbSBpcyByZXBvcnRpbmcgZHJvcHBlZCB0cmFuc21pdHMsIHRoaXMgdmFsdWUgbWF5IGJlIHNldCB0b28gaGlnaApjYXVzaW5nIHRoZSBkcml2ZXIgdG8gcnVuIG91dCBvZiBhdmFpbGFibGUgdHJhbnNtaXQgZGVzY3JpcHRvcnMuCgpUeEFic0ludERlbGF5Ci0tLS0tLS0tLS0tLS0KVmFsaWQgUmFuZ2U6ICAgMC02NTUzNSAoMD1vZmYpCkRlZmF1bHQgVmFsdWU6IDMyCgpUaGlzIHZhbHVlLCBpbiB1bml0cyBvZiAxLjAyNCBtaWNyb3NlY29uZHMsIGxpbWl0cyB0aGUgZGVsYXkgaW4gd2hpY2ggYQp0cmFuc21pdCBpbnRlcnJ1cHQgaXMgZ2VuZXJhdGVkLiAgVXNlZnVsIG9ubHkgaWYgVHhJbnREZWxheSBpcyBub24temVybywKdGhpcyB2YWx1ZSBlbnN1cmVzIHRoYXQgYW4gaW50ZXJydXB0IGlzIGdlbmVyYXRlZCBhZnRlciB0aGUgaW5pdGlhbApwYWNrZXQgaXMgc2VudCBvbiB0aGUgd2lyZSB3aXRoaW4gdGhlIHNldCBhbW91bnQgb2YgdGltZS4gIFByb3BlciB0dW5pbmcsCmFsb25nIHdpdGggVHhJbnREZWxheSwgbWF5IGltcHJvdmUgdHJhZmZpYyB0aHJvdWdocHV0IGluIHNwZWNpZmljCm5ldHdvcmsgY29uZGl0aW9ucy4KCmNvcHlicmVhawotLS0tLS0tLS0KVmFsaWQgUmFuZ2U6ICAgMC14eHh4eHh4ICgwPW9mZikKRGVmYXVsdCBWYWx1ZTogMjU2ClVzYWdlOiBpbnNtb2QgZTEwMDBlLmtvIGNvcHlicmVhaz0xMjgKCkRyaXZlciBjb3BpZXMgYWxsIHBhY2tldHMgYmVsb3cgb3IgZXF1YWxpbmcgdGhpcyBzaXplIHRvIGEgZnJlc2ggcngKYnVmZmVyIGJlZm9yZSBoYW5kaW5nIGl0IHVwIHRoZSBzdGFjay4KClRoaXMgcGFyYW1ldGVyIGlzIGRpZmZlcmVudCB0aGFuIG90aGVyIHBhcmFtZXRlcnMsIGluIHRoYXQgaXQgaXMgYQpzaW5nbGUgKG5vdCAxLDEsMSBldGMuKSBwYXJhbWV0ZXIgYXBwbGllZCB0byBhbGwgZHJpdmVyIGluc3RhbmNlcyBhbmQKaXQgaXMgYWxzbyBhdmFpbGFibGUgZHVyaW5nIHJ1bnRpbWUgYXQgCi9zeXMvbW9kdWxlL2UxMDAwZS9wYXJhbWV0ZXJzL2NvcHlicmVhawoKU21hcnRQb3dlckRvd25FbmFibGUKLS0tLS0tLS0tLS0tLS0tLS0tLS0KVmFsaWQgUmFuZ2U6IDAtMQpEZWZhdWx0IFZhbHVlOiAgMCAoZGlzYWJsZWQpCgpBbGxvd3MgUGh5IHRvIHR1cm4gb2ZmIGluIGxvd2VyIHBvd2VyIHN0YXRlcy4gVGhlIHVzZXIgY2FuIHR1cm4gb2ZmCnRoaXMgcGFyYW1ldGVyIGluIHN1cHBvcnRlZCBjaGlwc2V0cy4KCkt1bWVyYW5Mb2NrTG9zcwotLS0tLS0tLS0tLS0tLS0KVmFsaWQgUmFuZ2U6IDAtMQpEZWZhdWx0IFZhbHVlOiAxIChlbmFibGVkKQoKVGhpcyB3b3JrYXJvdW5kIHNraXBzIHJlc2V0dGluZyB0aGUgUGh5IGF0IHNodXRkb3duIGZvciB0aGUgaW5pdGlhbApzaWxpY29uIHJlbGVhc2VzIG9mIElDSDggc3lzdGVtcy4KCkludE1vZGUKLS0tLS0tLQpWYWxpZCBSYW5nZTogMC0yICgwPWxlZ2FjeSwgMT1NU0ksIDI9TVNJLVgpCkRlZmF1bHQgVmFsdWU6IDIgCgpBbGxvd3MgY2hhbmdpbmcgdGhlIGludGVycnVwdCBtb2RlIGF0IG1vZHVsZSBsb2FkIHRpbWUsIHdpdGhvdXQgcmVxdWlyaW5nIGEKcmVjb21waWxlLiBJZiB0aGUgZHJpdmVyIGxvYWQgZmFpbHMgdG8gZW5hYmxlIGEgc3BlY2lmaWMgaW50ZXJydXB0IG1vZGUsIHRoZQpkcml2ZXIgd2lsbCB0cnkgb3RoZXIgaW50ZXJydXB0IG1vZGVzLCBmcm9tIGxlYXN0IHRvIG1vc3QgY29tcGF0aWJsZS4gIFRoZSAKaW50ZXJydXB0IG9yZGVyIGlzIE1TSS1YLCBNU0ksIExlZ2FjeS4gIElmIHNwZWNpZnlpbmcgTVNJIChJbnRNb2RlPTEpIAppbnRlcnJ1cHRzLCBvbmx5IE1TSSBhbmQgTGVnYWN5IHdpbGwgYmUgYXR0ZW1wdGVkLgoKQ3JjU3RyaXBwaW5nCi0tLS0tLS0tLS0tLQpWYWxpZCBSYW5nZTogMC0xCkRlZmF1bHQgVmFsdWU6IDEgKGVuYWJsZWQpCgpTdHJpcCB0aGUgQ1JDIGZyb20gcmVjZWl2ZWQgcGFja2V0cyBiZWZvcmUgc2VuZGluZyB1cCB0aGUgbmV0d29yayBzdGFjay4gIElmIAp5b3UgaGF2ZSBhIG1hY2hpbmUgd2l0aCBhIEJNQyBlbmFibGVkIGJ1dCBjYW5ub3QgcmVjZWl2ZSBJUE1JIHRyYWZmaWMgYWZ0ZXIKbG9hZGluZyBvciBlbmFibGluZyB0aGUgZHJpdmVyLCB0cnkgZGlzYWJsaW5nIHRoaXMgZmVhdHVyZS4KCkVFRQotLS0KVmFsaWQgUmFuZ2U6ICAgIDAtMQpEZWZhdWx0IFZhbHVlOiAgICAxIChlbmFibGVkIGZvciBwYXJ0cyBzdXBwb3J0aW5nIEVFRSkKIApUaGlzIG9wdGlvbiBhbGxvd3MgZm9yIHRoZSBhYmlsaXR5IG9mIElFRUU4MDIuM2F6IChhLmsuYS4gRW5lcmd5IEVmZmljaWVudCAKRXRoZXJuZXQgb3IgRUVFKSB0byBiZSBhZHZlcnRpc2VkIHRvIHRoZSBsaW5rIHBhcnRuZXIgb24gcGFydHMgc3VwcG9ydGluZyBFRUUuCkVFRSBzYXZlcyBlbmVyZ3kgYnkgcHV0dGluZyB0aGUgZGV2aWNlIGludG8gYSBsb3ctcG93ZXIgc3RhdGUgd2hlbiB0aGUgbGluayBpcwppZGxlLCBidXQgb25seSB3aGVuIHRoZSBsaW5rIHBhcnRuZXIgYWxzbyBzdXBwb3J0cyBFRUUgYW5kIGFmdGVyIHRoZSBmZWF0dXJlIApoYXMgYmVlbiBlbmFibGVkIGR1cmluZyBsaW5rIG5lZ290aWF0aW9uLiAgSXQgaXMgbm90IG5lY2Vzc2FyeSB0byBkaXNhYmxlIHRoZSAKYWR2ZXJ0aXNlbWVudCBvZiBFRUUgd2hlbiBjb25uZWN0ZWQgd2l0aCBhIGxpbmsgcGFydG5lciB0aGF0IGRvZXMgbm90IHN1cHBvcnQgRUVFLgoKTm9kZQotLS0tClZhbGlkIFJhbmdlOiAgMC1uCkRlZmF1bHQgVmFsdWU6ICAtMSAob2ZmKQowIC0gbjogd2hlcmUgbiBpcyB0aGUgbnVtYmVyIG9mIHRoZSBOVU1BIG5vZGUgdGhhdCBzaG91bGQgYmUgdXNlZCB0byBhbGxvY2F0ZSAKICAgICAgIG1lbW9yeSBmb3IgdGhpcyBhZGFwdGVyIHBvcnQuCi0xOiB1c2VzIHRoZSBkcml2ZXIgZGVmYXVsdCBvZiBhbGxvY2F0aW5nIG1lbW9yeSBvbiB3aGljaGV2ZXIgcHJvY2Vzc29yIGlzIAogICAgcnVubmluZyBpbnNtb2QvbW9kcHJvYmUuClRoZSBOb2RlIHBhcmFtZXRlciB3aWxsIGFsbG93IHlvdSB0byBwaWNrIHdoaWNoIE5VTUEgbm9kZSB5b3Ugd2FudCB0byBoYXZlICAKdGhlIGFkYXB0ZXIgYWxsb2NhdGUgbWVtb3J5IGZyb20uICBBbGwgZHJpdmVyIHN0cnVjdHVyZXMsIGluLW1lbW9yeSBxdWV1ZXMsIAphbmQgcmVjZWl2ZSBidWZmZXJzIHdpbGwgYmUgYWxsb2NhdGVkIG9uIHRoZSBub2RlIHNwZWNpZmllZC4gIFRoaXMgcGFyYW1ldGVyCmlzIG9ubHkgdXNlZnVsIHdoZW4gaW50ZXJydXB0IGFmZmluaXR5IGlzIHNwZWNpZmllZCwgb3RoZXJ3aXNlIHNvbWUgcG9ydGlvbiAKb2YgdGhlIHRpbWUgdGhlIGludGVycnVwdCBjb3VsZCBydW4gb24gYSBkaWZmZXJlbnQgY29yZSB0aGFuIHRoZSBtZW1vcnkgaXMgCmFsbG9jYXRlZCBvbiwgY2F1c2luZyBzbG93ZXIgbWVtb3J5IGFjY2VzcyBhbmQgaW1wYWN0aW5nIHRocm91Z2hwdXQsIENQVSwgb3IKYm90aC6gCiAKCkFkZGl0aW9uYWwgQ29uZmlndXJhdGlvbnMKPT09PT09PT09PT09PT09PT09PT09PT09PQoKICBDb25maWd1cmluZyB0aGUgRHJpdmVyIG9uIERpZmZlcmVudCBEaXN0cmlidXRpb25zCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIENvbmZpZ3VyaW5nIGEgbmV0d29yayBkcml2ZXIgdG8gbG9hZCBwcm9wZXJseSB3aGVuIHRoZSBzeXN0ZW0gaXMgc3RhcnRlZAogIGlzIGRpc3RyaWJ1dGlvbiBkZXBlbmRlbnQuICBUeXBpY2FsbHksIHRoZSBjb25maWd1cmF0aW9uIHByb2Nlc3MgaW52b2x2ZXMKICBhZGRpbmcgYW4gYWxpYXMgbGluZSB0byAvZXRjL21vZHVsZXMuY29uZiBvciAvZXRjL21vZHByb2JlLmNvbmYgYXMgd2VsbAogIGFzIGVkaXRpbmcgb3RoZXIgc3lzdGVtIHN0YXJ0dXAgc2NyaXB0cyBhbmQvb3IgY29uZmlndXJhdGlvbiBmaWxlcy4gIE1hbnkKICBwb3B1bGFyIExpbnV4IGRpc3RyaWJ1dGlvbnMgc2hpcCB3aXRoIHRvb2xzIHRvIG1ha2UgdGhlc2UgY2hhbmdlcyBmb3IgeW91LgogIFRvIGxlYXJuIHRoZSBwcm9wZXIgd2F5IHRvIGNvbmZpZ3VyZSBhIG5ldHdvcmsgZGV2aWNlIGZvciB5b3VyIHN5c3RlbSwKICByZWZlciB0byB5b3VyIGRpc3RyaWJ1dGlvbiBkb2N1bWVudGF0aW9uLiAgSWYgZHVyaW5nIHRoaXMgcHJvY2VzcyB5b3UgYXJlCiAgYXNrZWQgZm9yIHRoZSBkcml2ZXIgb3IgbW9kdWxlIG5hbWUsIHRoZSBuYW1lIGZvciB0aGUgTGludXggQmFzZSBEcml2ZXIKICBmb3IgdGhlIEdpZ2FiaXQgRmFtaWx5IG9mIEFkYXB0ZXJzIGlzIGUxMDAwZS4KCiAgQXMgYW4gZXhhbXBsZSwgaWYgeW91IGluc3RhbGwgdGhlIGUxMDAwZSBkcml2ZXIgZm9yIHR3byBHaWdhYml0IGFkYXB0ZXJzIAogIChldGgwIGFuZCBldGgxKSBhbmQgd2FudCB0byBzZXQgdGhlIGludGVycnVwdCBtb2RlIHRvIE1TSS1YIGFuZCBNU0kgCiAgcmVzcGVjdGl2ZWx5LCBhZGQgdGhlIGZvbGxvd2luZyB0byBtb2R1bGVzLmNvbmYgb3IgL2V0Yy9tb2Rwcm9iZS5jb25mOgoKICAgICAgIGFsaWFzIGV0aDAgZTEwMDBlCiAgICAgICBhbGlhcyBldGgxIGUxMDAwZQogICAgICAgb3B0aW9ucyBlMTAwMGUgSW50TW9kZT0yLDEKCiAgVmlld2luZyBMaW5rIE1lc3NhZ2VzCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgTGluayBtZXNzYWdlcyB3aWxsIG5vdCBiZSBkaXNwbGF5ZWQgdG8gdGhlIGNvbnNvbGUgaWYgdGhlIGRpc3RyaWJ1dGlvbiBpcwogIHJlc3RyaWN0aW5nIHN5c3RlbSBtZXNzYWdlcy4gIEluIG9yZGVyIHRvIHNlZSBuZXR3b3JrIGRyaXZlciBsaW5rIG1lc3NhZ2VzCiAgb24geW91ciBjb25zb2xlLCBzZXQgZG1lc2cgdG8gZWlnaHQgYnkgZW50ZXJpbmcgdGhlIGZvbGxvd2luZzoKCiAgICAgICBkbWVzZyAtbiA4CgogIE5PVEU6IFRoaXMgc2V0dGluZyBpcyBub3Qgc2F2ZWQgYWNyb3NzIHJlYm9vdHMuCgogIEp1bWJvIEZyYW1lcwogIC0tLS0tLS0tLS0tLQogIEp1bWJvIEZyYW1lcyBzdXBwb3J0IGlzIGVuYWJsZWQgYnkgY2hhbmdpbmcgdGhlIE1UVSB0byBhIHZhbHVlIGxhcmdlciB0aGFuCiAgdGhlIGRlZmF1bHQgb2YgMTUwMC4gIFVzZSB0aGUgaWZjb25maWcgY29tbWFuZCB0byBpbmNyZWFzZSB0aGUgTVRVIHNpemUuCiAgRm9yIGV4YW1wbGU6CgogICAgICAgaWZjb25maWcgZXRoPHg+IG10dSA5MDAwIHVwCgogIFRoaXMgc2V0dGluZyBpcyBub3Qgc2F2ZWQgYWNyb3NzIHJlYm9vdHMuICBJdCBjYW4gYmUgbWFkZSBwZXJtYW5lbnQgaWYKICB5b3UgYWRkOgoKICAgICAgIE1UVT05MDAwCgogICB0byB0aGUgZmlsZSAvZXRjL3N5c2NvbmZpZy9uZXR3b3JrLXNjcmlwdHMvaWZjZmctZXRoPHg+LiAgVGhpcyBleGFtcGxlCiAgIGFwcGxpZXMgdG8gdGhlIFJlZCBIYXQgZGlzdHJpYnV0aW9uczsgb3RoZXIgZGlzdHJpYnV0aW9ucyBtYXkgc3RvcmUgdGhpcwogICBzZXR0aW5nIGluIGEgZGlmZmVyZW50IGxvY2F0aW9uLgoKICBOb3RlczoKCiAgLSBUbyBlbmFibGUgSnVtYm8gRnJhbWVzLCBpbmNyZWFzZSB0aGUgTVRVIHNpemUgb24gdGhlIGludGVyZmFjZSBiZXlvbmQKICAgIDE1MDAuCgogIC0gVGhlIG1heGltdW0gTVRVIHNldHRpbmcgZm9yIEp1bWJvIEZyYW1lcyBpcyA5MjE2LiAgVGhpcyB2YWx1ZSBjb2luY2lkZXMKICAgIHdpdGggdGhlIG1heGltdW0gSnVtYm8gRnJhbWVzIHNpemUgb2YgOTIzNCBieXRlcy4gCgogIC0gVXNpbmcgSnVtYm8gZnJhbWVzIGF0IDEwIG9yIDEwMCBNYnBzIGlzIG5vdCBzdXBwb3J0ZWQgYW5kIG1heSByZXN1bHQgaW4gCiAgICBwb29yIHBlcmZvcm1hbmNlIG9yIGxvc3Mgb2YgbGluay4KICAgIAogIC0gVGhlIGZvbGxvd2luZyBhZGFwdGVycyBsaW1pdCBKdW1ibyBGcmFtZXMgc2l6ZWQgcGFja2V0cyB0byBhIG1heGltdW0gb2YKICAgIDQwODggYnl0ZXM6CiAgICAgSW50ZWwoUikgODI1NzhETSBHaWdhYml0IE5ldHdvcmsgQ29ubmVjdGlvbgogICAgIEludGVsKFIpIDgyNTc3TE0gR2lnYWJpdCBOZXR3b3JrIENvbm5lY3Rpb24gCgogIC0gVGhlIGZvbGxvd2luZyBhZGFwdGVycyBkbyBub3Qgc3VwcG9ydCBKdW1ibyBGcmFtZXM6CiAgICAgSW50ZWwoUikgUFJPLzEwMDAgR2lnYWJpdCBTZXJ2ZXIgQWRhcHRlcgogICAgIEludGVsKFIpIFBSTy8xMDAwIFBNIE5ldHdvcmsgQ29ubmVjdGlvbgogICAgIEludGVsKFIpIDgyNTYyViAxMC8xMDAgTmV0d29yayBDb25uZWN0aW9uCiAgICAgSW50ZWwoUikgODI1NjZETSBHaWdhYml0IE5ldHdvcmsgQ29ubmVjdGlvbgogICAgIEludGVsKFIpIDgyNTY2REMgR2lnYWJpdCBOZXR3b3JrIENvbm5lY3Rpb24KICAgICBJbnRlbChSKSA4MjU2Nk1NIEdpZ2FiaXQgTmV0d29yayBDb25uZWN0aW9uCiAgICAgSW50ZWwoUikgODI1NjZNQyBHaWdhYml0IE5ldHdvcmsgQ29ubmVjdGlvbgogICAgIEludGVsKFIpIDgyNTYyR1QgMTAvMTAwIE5ldHdvcmsgQ29ubmVjdGlvbgogICAgIEludGVsKFIpIDgyNTYyRyAxMC8xMDAgTmV0d29yayBDb25uZWN0aW9uCiAgICAgSW50ZWwocikgODI1NjZEQy0yIEdpZ2FiaXQgTmV0d29yayBDb25uZWN0aW9uCiAgICAgSW50ZWwoUikgODI1NjJWLTIgMTAvMTAwIE5ldHdvcmsgQ29ubmVjdGlvbgogICAgIEludGVsKFIpIDgyNTYyRy0yIDEwLzEwMCBOZXR3b3JrIENvbm5lY3Rpb24KICAgICBJbnRlbChSKSA4MjU2MkdULTIgMTAvMTAwIE5ldHdvcmsgQ29ubmVjdGlvbgogICAgIEludGVsKFIpIDgyNTc4REMgR2lnYWJpdCBOZXR3b3JrIENvbm5lY3Rpb24KICAgICBJbnRlbChSKSA4MjU2N1YtMyBHaWdhYml0IE5ldHdvcmsgQ29ubmVjdGlvbgoKICAtIEp1bWJvIEZyYW1lcyBjYW5ub3QgYmUgY29uZmlndXJlZCBvbiBhbiA4MjU3OS1iYXNlZCBOZXR3b3JrIGRldmljZSwgaWYgCiAgICBNQUNTZWMgaXMgZW5hYmxlZCBvbiB0aGUgc3lzdGVtLgoKICBldGh0b29sCiAgLS0tLS0tLQogIFRoZSBkcml2ZXIgdXRpbGl6ZXMgdGhlIGV0aHRvb2wgaW50ZXJmYWNlIGZvciBkcml2ZXIgY29uZmlndXJhdGlvbiBhbmQKICBkaWFnbm9zdGljcywgYXMgd2VsbCBhcyBkaXNwbGF5aW5nIHN0YXRpc3RpY2FsIGluZm9ybWF0aW9uLiAgZXRodG9vbAogIHZlcnNpb24gMyBvciBsYXRlciBpcyByZXF1aXJlZCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5LCBhbHRob3VnaCB3ZSAKICBzdHJvbmdseSByZWNvbW1lbmQgZG93bmxvYWRpbmcgdGhlIGxhdGVzdCB2ZXJzaW9uIGF0OgoKICBodHRwOi8vZnRwLmtlcm5lbC5vcmcvcHViL3NvZnR3YXJlL25ldHdvcmsvZXRodG9vbC8uCgogIE5PVEU6IFdoZW4gdmFsaWRhdGluZyBlbmFibGUvZGlzYWJsZSB0ZXN0cyBvbiBzb21lIHBhcnRzICg4MjU3OCwgZm9yIGV4YW1wbGUpCiAgeW91IG5lZWQgdG8gYWRkIGEgZmV3IHNlY29uZHMgYmV0d2VlbiB0ZXN0cyB3aGVuIHdvcmtpbmcgd2l0aCBldGh0b29sLgoKICBTcGVlZCBhbmQgRHVwbGV4CiAgLS0tLS0tLS0tLS0tLS0tLQogIFNwZWVkIGFuZCBEdXBsZXggYXJlIGNvbmZpZ3VyZWQgdGhyb3VnaCB0aGUgZXRodG9vbCogdXRpbGl0eS4gIGV0aHRvb2wgaXMgCiAgaW5jbHVkZWQgd2l0aCBhbGwgdmVyc2lvbnMgb2YgUmVkIEhhdCBhZnRlciBSZWQgSGF0IDcuMi4gIEZvciBvdGhlciBMaW51eCAKICBkaXN0cmlidXRpb25zLCBkb3dubG9hZCBhbmQgaW5zdGFsbCBldGh0b29sIGZyb20gdGhlIGZvbGxvd2luZyB3ZWJzaXRlOgogIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvZ2tlcm5lbC4KCiAgRW5hYmxpbmcgV2FrZSBvbiBMQU4qIChXb0wpCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgV29MIGlzIGNvbmZpZ3VyZWQgdGhyb3VnaCB0aGUgZXRodG9vbCogdXRpbGl0eS4gIGV0aHRvb2wgaXMgaW5jbHVkZWQgd2l0aAogIGFsbCB2ZXJzaW9ucyBvZiBSZWQgSGF0IGFmdGVyIFJlZCBIYXQgNy4yLiAgRm9yIG90aGVyIExpbnV4IGRpc3RyaWJ1dGlvbnMsCiAgZG93bmxvYWQgYW5kIGluc3RhbGwgZXRodG9vbCBmcm9tIHRoZSBmb2xsb3dpbmcgd2Vic2l0ZToKICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2drZXJuZWwuCgogIEZvciBpbnN0cnVjdGlvbnMgb24gZW5hYmxpbmcgV29MIHdpdGggZXRodG9vbCwgcmVmZXIgdG8gdGhlIHdlYnNpdGUgbGlzdGVkCiAgYWJvdmUuCgogIFdvTCB3aWxsIGJlIGVuYWJsZWQgb24gdGhlIHN5c3RlbSBkdXJpbmcgdGhlIG5leHQgc2h1dCBkb3duIG9yIHJlYm9vdC4KICBGb3IgdGhpcyBkcml2ZXIgdmVyc2lvbiwgaW4gb3JkZXIgdG8gZW5hYmxlIFdvTCwgdGhlIGUxMDAwZSBkcml2ZXIgbXVzdCBiZQogIGxvYWRlZCB3aGVuIHNodXR0aW5nIGRvd24gb3IgcmVib290aW5nIHRoZSBzeXN0ZW0uCgogIFdha2UgT24gTEFOIGlzIG9ubHkgc3VwcG9ydGVkIG9uIHBvcnQgQSBmb3IgdGhlIGZvbGxvd2luZyBkZXZpY2VzOgogIEludGVsKFIpIFBSTy8xMDAwIFBUIER1YWwgUG9ydCBOZXR3b3JrIENvbm5lY3Rpb24KICBJbnRlbChSKSBQUk8vMTAwMCBQVCBEdWFsIFBvcnQgU2VydmVyIENvbm5lY3Rpb24KICBJbnRlbChSKSBQUk8vMTAwMCBQVCBEdWFsIFBvcnQgU2VydmVyIEFkYXB0ZXIKICBJbnRlbChSKSBQUk8vMTAwMCBQRiBEdWFsIFBvcnQgU2VydmVyIEFkYXB0ZXIKICBJbnRlbChSKSBQUk8vMTAwMCBQVCBRdWFkIFBvcnQgU2VydmVyIEFkYXB0ZXIKICBJbnRlbChSKSBHaWdhYml0IFBUIFF1YWQgUG9ydCBTZXJ2ZXIgRXhwcmVzc01vZHVsZSAKCiAgTkFQSQogIC0tLS0KICBOQVBJIChSeCBwb2xsaW5nIG1vZGUpIGlzIHN1cHBvcnRlZCBpbiB0aGUgZTEwMDBlIGRyaXZlci4gIE5BUEkgaXMgZW5hYmxlZAogIGJ5IGRlZmF1bHQuCgogIFRvIGRpc2FibGUgTkFQSSwgY29tcGlsZSB0aGUgZHJpdmVyIG1vZHVsZSwgcGFzc2luZyBpbiBhIGNvbmZpZ3VyYXRpb24gb3B0aW9uOgoKICAgICAgICMgbWFrZSBDRkxBR1NfRVhUUkE9LURFMTAwMEVfTk9fTkFQSSBpbnN0YWxsCgogIFNlZSBmdHA6Ly9yb2J1ci5zbHUuc2UvcHViL0xpbnV4L25ldC1kZXZlbG9wbWVudC9OQVBJL3VzZW5peC1wYXBlci50Z3ogZm9yIAogIG1vcmUgaW5mb3JtYXRpb24gb24gTkFQSS4KCgpLbm93biBJc3N1ZXMvVHJvdWJsZXNob290aW5nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT0KCkhhcmR3YXJlIElzc3VlczoKLS0tLS0tLS0tLS0tLS0tLQpGb3Iga25vd24gaGFyZHdhcmUgYW5kIHRyb3VibGVzaG9vdGluZyBpc3N1ZXMsIGVpdGhlciByZWZlciB0byB0aGUgIlJlbGVhc2UgCk5vdGVzIiBpbiB5b3VyIFVzZXIgR3VpZGUsIG9yIGZvciBtb3JlIGRldGFpbGVkIGluZm9ybWF0aW9uLCBnbyB0byB0aGUKZm9sbG93aW5nIHdlYnNpdGU6CgogICAgaHR0cDovL3d3dy5pbnRlbC5jb20KCkluIHRoZSBzZWFyY2ggYm94IGVudGVyIHlvdXIgZGV2aWNlcyBjb250cm9sbGVyIElEIGZvbGxvd2VkIGJ5ICJzcGVjIHVwZGF0ZSIgCihpLmUuLCA4MjU5OSBzcGVjIHVwZGF0ZSkuIFRoZSBzcGVjIHVwZGF0ZSBmaWxlIGhhcyBjb21wbGV0ZSBpbmZvcm1hdGlvbiBvbgprbm93biBoYXJkd2FyZSBpc3N1ZXMuCgpTb2Z0d2FyZSBJc3N1ZXM6Ci0tLS0tLS0tLS0tLS0tLS0KCiAgTk9URTogQWZ0ZXIgaW5zdGFsbGluZyB0aGUgZHJpdmVyLCBpZiB5b3VyIEludGVsIEV0aGVybmV0IE5ldHdvcmsgQ29ubmVjdGlvbgogIGlzIG5vdCB3b3JraW5nLCB2ZXJpZnkgdGhhdCB5b3UgaGF2ZSBpbnN0YWxsZWQgdGhlIGNvcnJlY3QgZHJpdmVyLgoKICBJbnRlbChSKSBBY3RpdmUgTWFuYWdlbWVudCBUZWNobm9sb2d5IDIuMCwgMi4xLCAyLjUgbm90IHN1cHBvcnRlZCBpbiAKICBjb25qdW5jdGlvbiB3aXRoIExpbnV4IGRyaXZlcgogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKICBEZXRlY3RlZCBUeCBVbml0IEhhbmcgaW4gUXVhZCBQb3J0IEFkYXB0ZXJzCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIEluIHNvbWUgY2FzZXMgcG9ydHMgMyBhbmQgNCBkb24ndCBwYXNzIHRyYWZmaWMgYW5kIHJlcG9ydCAnRGV0ZWN0ZWQgVHggVW5pdAogIEhhbmcnIGZvbGxvd2VkIGJ5ICdORVRERVYgV0FUQ0hET0c6IGV0aFg6IHRyYW5zbWl0IHRpbWVkIG91dCcgZXJyb3JzLiBQb3J0cyAKICAxIGFuZCAyIGRvbid0IHNob3cgYW55IGVycm9ycyBhbmQgd2lsbCBwYXNzIHRyYWZmaWMuCgogIFRoaXMgaXNzdWUgTUFZIGJlIHJlc29sdmVkIGJ5IHVwZGF0aW5nIHRvIHRoZSBsYXRlc3Qga2VybmVsIGFuZCBCSU9TLiBUaGUgCiAgdXNlciBpcyBlbmNvdXJhZ2VkIHRvIHJ1biBhbiBPUyB0aGF0IGZ1bGx5IHN1cHBvcnRzIE1TSSBpbnRlcnJ1cHRzLiBZb3UgY2FuIAogIGNoZWNrIHlvdXIgc3lzdGVtJ3MgQklPUyBieSBkb3dubG9hZGluZyB0aGUgTGludXggRmlybXdhcmUgRGV2ZWxvcGVyIEtpdCAKICB0aGF0IGNhbiBiZSBvYnRhaW5lZCBhdCBodHRwOi8vd3d3LmxpbnV4ZmlybXdhcmVraXQub3JnLwoKICBBZGFwdGVycyB3aXRoIDQgcG9ydHMgYmVoaW5kIGEgUENJZSBicmlkZ2UgCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgQWRhcHRlcnMgdGhhdCBoYXZlIDQgcG9ydHMgYmVoaW5kIGEgUENJZSBicmlkZ2UgbWF5IGJlIGluY29tcGF0aWJsZSB3aXRoIAogIHNvbWUgc3lzdGVtcy4gVGhlIHVzZXIgc2hvdWxkIHJ1biB0aGUgTGludXggZmlybXdhcmUga2l0IGZyb20gMjY4NjQzNAogIGh0dHA6Ly93d3cubGludXhmaXJtd2FyZWtpdC5vcmcgdG8gdGVzdCB0aGVpciBCSU9TLCBpZiB0aGV5IGhhdmUgaW50ZXJydXB0IG9yIAogICJtaXNzaW5nIGludGVyZmFjZSIgcHJvYmxlbXMsIGVzcGVjaWFsbHkgd2l0aCBvbGRlciBrZXJuZWxzLgoKICA4MjU3MyhWL0wvRSkgVFggVW5pdCBIYW5nIE1lc3NhZ2VzCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIFNldmVyYWwgYWRhcHRlcnMgd2l0aCB0aGUgODI1NzMgY2hpcHNldCBkaXNwbGF5ICJUWCB1bml0IGhhbmciIG1lc3NhZ2VzIAogIGR1cmluZyBub3JtYWwgb3BlcmF0aW9uIHdpdGggdGhlIGUxMDAwZSBkcml2ZXIuIFRoZSBpc3N1ZSBhcHBlYXJzIGJvdGggd2l0aCAKICBUU08gZW5hYmxlZCBhbmQgZGlzYWJsZWQsIGFuZCBpcyBjYXVzZWQgYnkgYSBwb3dlciBtYW5hZ2VtZW50IGZ1bmN0aW9uIHRoYXQgCiAgaXMgZW5hYmxlZCBpbiB0aGUgRUVQUk9NLiBFYXJseSByZWxlYXNlcyBvZiB0aGUgY2hpcHNldHMgdG8gdmVuZG9ycyBoYWQgdGhlIAogIEVFUFJPTSBiaXQgdGhhdCBlbmFibGVkIHRoZSBmZWF0dXJlLiBBZnRlciB0aGUgaXNzdWUgd2FzIGRpc2NvdmVyZWQgbmV3ZXIgCiAgYWRhcHRlcnMgd2VyZSByZWxlYXNlZCB3aXRoIHRoZSBmZWF0dXJlIGRpc2FibGVkIGluIHRoZSBFRVBST00uIAoKICBJZiB5b3UgZW5jb3VudGVyIHRoZSBwcm9ibGVtIGluIGFuIGFkYXB0ZXIsIGFuZCB0aGUgY2hpcHNldCBpcyBhbiA4MjU3My1iYXNlZAogIG9uZSwgeW91IGNhbiB2ZXJpZnkgdGhhdCB5b3VyIGFkYXB0ZXIgbmVlZHMgdGhlIGZpeCBieSB1c2luZyBldGh0b29sOiAKCiAgIyBldGh0b29sIC1lIGV0aDAKICBPZmZzZXQgICAgICAgICAgVmFsdWVzCiAgLS0tLS0tICAgICAgICAgIC0tLS0tLQogIDB4MDAwMCAgICAgICAgICAwMCAxMiAzNCA1NiBmZSBkYyAzMCAwZCA0NiBmNyBmNCAwMCBmZiBmZiBmZiBmZgogIDB4MDAxMCAgICAgICAgICBmZiBmZiBmZiBmZiA2YiAwMiA4YyAxMCBkOSAxNSA4YyAxMCA4NiA4MCBkZSA4MwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eCiAgVGhlIHZhbHVlIGF0IG9mZnNldCAweDAwMWUgKGRlKSBoYXMgYml0IDAgdW5zZXQuIFRoaXMgZW5hYmxlcyB0aGUgcHJvYmxlbWF0aWMgCiAgcG93ZXIgc2F2aW5nIGZlYXR1cmUuIEluIHRoaXMgY2FzZSwgdGhlIEVFUFJPTSBuZWVkcyB0byByZWFkICJkZiIgYXQgb2Zmc2V0IAogIDB4MDAxZS4gCgogIEEgb25lLXRpbWUgRUVQUk9NIGZpeCBpcyBhdmFpbGFibGUgYXMgYSBzaGVsbCBzY3JpcHQuIFRoaXMgc2NyaXB0IHdpbGwgdmVyaWZ5IAogIHRoYXQgdGhlIGFkYXB0ZXIgaXMgYXBwbGljYWJsZSB0byB0aGUgZml4IGFuZCBpZiB0aGUgZml4IGlzIG5lZWRlZCBvciBub3QuIElmIAogIHRoZSBmaXggaXMgcmVxdWlyZWQsIGl0IGFwcGxpZXMgdGhlIGNoYW5nZSB0byB0aGUgRUVQUk9NIGFuZCB1cGRhdGVzIHRoZSAKICBjaGVja3N1bS4gVGhlIHVzZXIgbXVzdCByZWJvb3QgdGhlIHN5c3RlbSBhZnRlciBhcHBseWluZyB0aGUgZml4IGlmIGNoYW5nZXMgCiAgd2VyZSBtYWRlIHRvIHRoZSBFRVBST00uIAoKICBFeGFtcGxlIG91dHB1dCBvZiB0aGUgc2NyaXB0OiAKCiAgIyBiYXNoIGZpeGVlcC04MjU3My1kc3BkLnNoIGV0aDAKICBldGgwOiBpcyBhICI4MjU3M0UgR2lnYWJpdCBFdGhlcm5ldCBDb250cm9sbGVyIgogIFRoaXMgZml4dXAgaXMgYXBwbGljYWJsZSB0byB5b3VyIGhhcmR3YXJlCiAgZXhlY3V0aW5nIGNvbW1hbmQ6IGV0aHRvb2wgLUUgZXRoMCBtYWdpYyAweDEwOWE4MDg2IG9mZnNldCAweDFlIHZhbHVlIDB4ZGYKICBDaGFuZ2UgbWFkZS4gWW91ICpNVVNUKiByZWJvb3QgeW91ciBtYWNoaW5lIGJlZm9yZSBjaGFuZ2VzIHRha2UgZWZmZWN0IQoKICBUaGUgc2NyaXB0IGNhbiBiZSBkb3dubG9hZGVkIGF0IAogIGh0dHA6Ly9lMTAwMC5zb3VyY2Vmb3JnZS5uZXQvZmlsZXMvZml4ZWVwLTgyNTczLWRzcGQuc2gKCiAgRHJvcHBlZCBSZWNlaXZlIFBhY2tldHMgb24gSGFsZi1kdXBsZXggMTAvMTAwIE5ldHdvcmtzCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgSWYgeW91IGhhdmUgYW4gSW50ZWwgUENJIEV4cHJlc3MgYWRhcHRlciBydW5uaW5nIGF0IDEwbWJwcyBvciAxMDBtYnBzLCBoYWxmLQogIGR1cGxleCwgeW91IG1heSBvYnNlcnZlIG9jY2FzaW9uYWwgZHJvcHBlZCByZWNlaXZlIHBhY2tldHMuICBUaGVyZSBhcmUgbm8KICB3b3JrYXJvdW5kcyBmb3IgdGhpcyBwcm9ibGVtIGluIHRoaXMgbmV0d29yayBjb25maWd1cmF0aW9uLiAgVGhlIG5ldHdvcmsgbXVzdAogIGJlIHVwZGF0ZWQgdG8gb3BlcmF0ZSBpbiBmdWxsLWR1cGxleCwgYW5kL29yIDEwMDBtYnBzIG9ubHkuCgogIERyaXZlciBDb21waWxhdGlvbgogIC0tLS0tLS0tLS0tLS0tLS0tLQogIFdoZW4gdHJ5aW5nIHRvIGNvbXBpbGUgdGhlIGRyaXZlciBieSBydW5uaW5nIG1ha2UgaW5zdGFsbCwgdGhlIGZvbGxvd2luZwogIGVycm9yIG1heSBvY2N1cjoKCiAgICAiTGludXgga2VybmVsIHNvdXJjZSBub3QgY29uZmlndXJlZCAtIG1pc3NpbmcgdmVyc2lvbi5oIgoKICBUbyBzb2x2ZSB0aGlzIGlzc3VlLCBjcmVhdGUgdGhlIHZlcnNpb24uaCBmaWxlIGJ5IGdvaW5nIHRvIHRoZSBMaW51eCBzb3VyY2UKICB0cmVlIGFuZCBlbnRlcmluZzoKCiAgICAjIG1ha2UgaW5jbHVkZS9saW51eC92ZXJzaW9uLmguCgogIFBlcmZvcm1hbmNlIERlZ3JhZGF0aW9uIHdpdGggSnVtYm8gRnJhbWVzCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBEZWdyYWRhdGlvbiBpbiB0aHJvdWdocHV0IHBlcmZvcm1hbmNlIG1heSBiZSBvYnNlcnZlZCBpbiBzb21lIEp1bWJvIGZyYW1lcwogIGVudmlyb25tZW50cy4gIElmIHRoaXMgaXMgb2JzZXJ2ZWQsIGluY3JlYXNpbmcgdGhlIGFwcGxpY2F0aW9uJ3Mgc29ja2V0CiAgYnVmZmVyIHNpemUgYW5kL29yIGluY3JlYXNpbmcgdGhlIC9wcm9jL3N5cy9uZXQvaXB2NC90Y3BfKm1lbSBlbnRyeSB2YWx1ZXMKICBtYXkgaGVscC4gIFNlZSB0aGUgc3BlY2lmaWMgYXBwbGljYXRpb24gbWFudWFsIGFuZAogIC91c3Ivc3JjL2xpbnV4Ki9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvaXAtc3lzY3RsLnR4dCBmb3IgbW9yZSBkZXRhaWxzLgoKICBKdW1ibyBGcmFtZXMgb24gRm91bmRyeSBCaWdJcm9uIDgwMDAgc3dpdGNoCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIFRoZXJlIGlzIGEga25vd24gaXNzdWUgdXNpbmcgSnVtYm8gZnJhbWVzIHdoZW4gY29ubmVjdGVkIHRvIGEgRm91bmRyeQogIEJpZ0lyb24gODAwMCBzd2l0Y2guICBUaGlzIGlzIGEgM3JkIHBhcnR5IGxpbWl0YXRpb24uICBJZiB5b3UgZXhwZXJpZW5jZQogIGxvc3Mgb2YgcGFja2V0cywgbG93ZXIgdGhlIE1UVSBzaXplLgoKICBBbGxvY2F0aW5nIFJ4IEJ1ZmZlcnMgd2hlbiBVc2luZyBKdW1ibyBGcmFtZXMgCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgQWxsb2NhdGluZyBSeCBidWZmZXJzIHdoZW4gdXNpbmcgSnVtYm8gRnJhbWVzIG9uIDIuNi54IGtlcm5lbHMgbWF5IGZhaWwgaWYgCiAgdGhlIGF2YWlsYWJsZSBtZW1vcnkgaXMgaGVhdmlseSBmcmFnbWVudGVkLiBUaGlzIGlzc3VlIG1heSBiZSBzZWVuIHdpdGggUENJLVggCiAgYWRhcHRlcnMgb3Igd2l0aCBwYWNrZXQgc3BsaXQgZGlzYWJsZWQuIFRoaXMgY2FuIGJlIHJlZHVjZWQgb3IgZWxpbWluYXRlZCAKICBieSBjaGFuZ2luZyB0aGUgYW1vdW50IG9mIGF2YWlsYWJsZSBtZW1vcnkgZm9yIHJlY2VpdmUgYnVmZmVyIGFsbG9jYXRpb24sIGJ5CiAgaW5jcmVhc2luZyAvcHJvYy9zeXMvdm0vbWluX2ZyZWVfa2J5dGVzLiAKCiAgTXVsdGlwbGUgSW50ZXJmYWNlcyBvbiBTYW1lIEV0aGVybmV0IEJyb2FkY2FzdCBOZXR3b3JrCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgRHVlIHRvIHRoZSBkZWZhdWx0IEFSUCBiZWhhdmlvciBvbiBMaW51eCwgaXQgaXMgbm90IHBvc3NpYmxlIHRvIGhhdmUKICBvbmUgc3lzdGVtIG9uIHR3byBJUCBuZXR3b3JrcyBpbiB0aGUgc2FtZSBFdGhlcm5ldCBicm9hZGNhc3QgZG9tYWluCiAgKG5vbi1wYXJ0aXRpb25lZCBzd2l0Y2gpIGJlaGF2ZSBhcyBleHBlY3RlZC4gIEFsbCBFdGhlcm5ldCBpbnRlcmZhY2VzCiAgd2lsbCByZXNwb25kIHRvIElQIHRyYWZmaWMgZm9yIGFueSBJUCBhZGRyZXNzIGFzc2lnbmVkIHRvIHRoZSBzeXN0ZW0uCiAgVGhpcyByZXN1bHRzIGluIHVuYmFsYW5jZWQgcmVjZWl2ZSB0cmFmZmljLgoKICBJZiB5b3UgaGF2ZSBtdWx0aXBsZSBpbnRlcmZhY2VzIGluIGEgc2VydmVyLCBlaXRoZXIgdHVybiBvbiBBUlAKICBmaWx0ZXJpbmcgYnkgZW50ZXJpbmc6CgogICAgZWNobyAxID4gL3Byb2Mvc3lzL25ldC9pcHY0L2NvbmYvYWxsL2FycF9maWx0ZXIKICAodGhpcyBvbmx5IHdvcmtzIGlmIHlvdXIga2VybmVsJ3MgdmVyc2lvbiBpcyBoaWdoZXIgdGhhbiAyLjQuNSksCgogIE5PVEU6IFRoaXMgc2V0dGluZyBpcyBub3Qgc2F2ZWQgYWNyb3NzIHJlYm9vdHMuICBUaGUgY29uZmlndXJhdGlvbgogIGNoYW5nZSBjYW4gYmUgbWFkZSBwZXJtYW5lbnQgYnkgYWRkaW5nIHRoZSBsaW5lOgogICAgbmV0LmlwdjQuY29uZi5hbGwuYXJwX2ZpbHRlciA9IDEKICB0byB0aGUgZmlsZSAvZXRjL3N5c2N0bC5jb25mCgogICAgICBvciwKCiAgaW5zdGFsbCB0aGUgaW50ZXJmYWNlcyBpbiBzZXBhcmF0ZSBicm9hZGNhc3QgZG9tYWlucyAoZWl0aGVyIGluCiAgZGlmZmVyZW50IHN3aXRjaGVzIG9yIGluIGEgc3dpdGNoIHBhcnRpdGlvbmVkIHRvIFZMQU5zKS4KCiAgRGlzYWJsZSByeCBmbG93IGNvbnRyb2wgd2l0aCBldGh0b29sCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgSW4gb3JkZXIgdG8gZGlzYWJsZSByZWNlaXZlIGZsb3cgY29udHJvbCB1c2luZyBldGh0b29sLCB5b3UgbXVzdCB0dXJuCiAgb2ZmIGF1dG8tbmVnb3RpYXRpb24gb24gdGhlIHNhbWUgY29tbWFuZCBsaW5lLgoKICBGb3IgZXhhbXBsZToKCiAgIGV0aHRvb2wgLUEgZXRoPyBhdXRvbmVnIG9mZiByeCBvZmYKCiAgVW5wbHVnZ2luZyBuZXR3b3JrIGNhYmxlIHdoaWxlIGV0aHRvb2wgLXAgaXMgcnVubmluZwogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBJbiBrZXJuZWwgdmVyc2lvbnMgMi41LjUwIGFuZCBsYXRlciAoaW5jbHVkaW5nIDIuNiBrZXJuZWwpLCB1bnBsdWdnaW5nIAogIHRoZSBuZXR3b3JrIGNhYmxlIHdoaWxlIGV0aHRvb2wgLXAgaXMgcnVubmluZyB3aWxsIGNhdXNlIHRoZSBzeXN0ZW0gdG8gCiAgYmVjb21lIHVucmVzcG9uc2l2ZSB0byBrZXlib2FyZCBjb21tYW5kcywgZXhjZXB0IGZvciBjb250cm9sLWFsdC1kZWxldGUuICAKICBSZXN0YXJ0aW5nIHRoZSBzeXN0ZW0gYXBwZWFycyB0byBiZSB0aGUgb25seSByZW1lZHkuCgogIE1TSS1YIElzc3VlcyB3aXRoIEtlcm5lbHMgYmV0d2VlbiAyLjYuMTkgLSAyLjYuMjEgKGluY2x1c2l2ZSkKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgS2VybmVsIHBhbmljcyBhbmQgaW5zdGFiaWxpdHkgbWF5IGJlIG9ic2VydmVkIG9uIGFueSBNU0ktWCBoYXJkd2FyZSBpZiB5b3UgCiAgdXNlIGlycWJhbGFuY2Ugd2l0aCBrZXJuZWxzIGJldHdlZW4gMi42LjE5IGFuZCAyLjYuMjEuIElmIHN1Y2ggcHJvYmxlbXMgYXJlIAogIGVuY291bnRlcmVkLCB5b3UgbWF5IGRpc2FibGUgdGhlIGlycWJhbGFuY2UgZGFlbW9uIG9yIHVwZ3JhZGUgdG8gYSBuZXdlciAKICBrZXJuZWwuCgogIFJ4IFBhZ2UgQWxsb2NhdGlvbiBFcnJvcnMKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgUGFnZSBhbGxvY2F0aW9uIGZhaWx1cmUuIG9yZGVyOjAgZXJyb3JzIG1heSBvY2N1ciB1bmRlciBzdHJlc3Mgd2l0aCBrZXJuZWxzIAogIDIuNi4yNSBhbmQgYWJvdmUuIFRoaXMgaXMgY2F1c2VkIGJ5IHRoZSB3YXkgdGhlIExpbnV4IGtlcm5lbCByZXBvcnRzIHRoaXMgCiAgc3RyZXNzZWQgY29uZGl0aW9uLgogIAogIE5ldHdvcmsgdGhyb3VnaHB1dCBkZWdyYWRhdGlvbiBvYnNlcnZlZCB3aXRoIE9uYm9hcmQgdmlkZW8gdmVyc3VzIGFkZC1pbiAKICBWaWRlbyBDYXJkIG9uICA4MjU3OUxNIEdpZ2FiaXQgTmV0d29yayBDb25uZWN0aW9uIHdoZW4gdXNlZCB3aXRoIHNvbWUgb2xkZXIKICBrZXJuZWxzLgogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIFRoaXMgaXNzdWUgY2FuIGJlIHdvcmtlZCBhcm91bmQgYnkgc3BlY2lmeWluZyAicGNpPW5vbW1jb25mIiBpbiB0aGUga2VybmVsCiAgYm9vdCBwYXJhbWV0ZXIgb3IgYnkgdXNpbmcgYW5vdGhlciBrZXJuZWwgYm9vdCBwYXJhbWV0ZXIgCiAgIm1lbW1hcD0xMjhNJDB4MTAwMDAwMDAwIiB3aGljaCBtYXJrcyAxMjggTUIgcmVnaW9uIGF0IDRHQiBhcyByZXNlcnZlZCBhbmQKICB0aGVyZWZvcmUgT1Mgd29uJ3QgdXNlIHRoZXNlIFJBTSBwYWdlcy4KCiAgVGhpcyBpc3N1ZSBpcyBmaXhlZCBpbiBrZXJuZWwgdmVyc2lvbiAyLjYuMjEsIHdoZXJlIHRoZSBrZXJuZWwgdHJpZXMgdG8gCiAgZHluYW1pY2FsbHkgZmluZCBvdXQgdGhlIG1tY29uZmlnIHNpemUgYnkgbG9va2luZyBhdCB0aGUgbnVtYmVyIG9mIGJ1c2VzIAogIHRoYXQgdGhlIG1tY29uZmlnIHNlZ21lbnQgbWFwcyB0by4KCiAgVGhpcyBpc3N1ZSB3b24ndCBiZSBzZWVuIG9uIDMyYml0IHZlcnNpb24gb2YgRUw1LCBhcyBpbiB0aGF0IGNhc2UsIHRoZSBrZXJuZWwgCiAgc2VlcyB0aGF0IFJBTSBpcyBsb2NhdGVkIGFyb3VuZCB0aGUgMjU2TUIgd2luZG93IGFuZCBhdm9pZHMgdXNpbmcgdGhlIAogIG1tY29uZmlnIHNwYWNlLgoKICBBY3Rpdml0eSBMRUQgYmxpbmtzIHVuZXhwZWN0ZWRseQogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgSWYgYSBzeXN0ZW0gYmFzZWQgb24gdGhlIDgyNTc3LCA4MjU3OCwgb3IgODI1NzkgY29udHJvbGxlciBpcyBjb25uZWN0ZWQKICB0byBhIGh1YiwgdGhlIEFjdGl2aXR5IExFRCB3aWxsIGJsaW5rIGZvciBhbGwgbmV0d29yayB0cmFmZmljIHByZXNlbnQgb24KICB0aGUgaHViLiBDb25uZWN0aW5nIHRoZSBzeXN0ZW0gdG8gYSBzd2l0Y2ggb3Igcm91dGVyIHdpbGwgZmlsdGVyIG91dCBtb3N0CiAgdHJhZmZpYyBub3QgYWRkcmVzc2VkIHRvIHRoZSBsb2NhbCBwb3J0LgoKICBMaW5rIG1heSB0YWtlIGxvbmdlciB0aGFuIGV4cGVjdGVkCiAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBXaXRoIHNvbWUgUGh5IGFuZCBzd2l0Y2ggY29tYmluYXRpb25zLCBsaW5rIGNhbiB0YWtlIGxvbmdlciB0aGFuIGV4cGVjdGVkLiAgCiAgVGhpcyBjYW4gYmUgYW4gaXNzdWUgb24gTGludXggZGlzdHJpYnV0aW9ucyB0aGF0IHRpbWVvdXQgd2hlbiBjaGVja2luZyBmb3IgCiAgbGluayBwcmlvciB0byBhY3F1aXJpbmcgYSBESENQIGFkZHJlc3M7IGhvd2V2ZXIgdGhlcmUgaXMgdXN1YWxseSBhIHdheSB0byAKICB3b3JrIGFyb3VuZCB0aGlzIChlLmcuIHNldCBMSU5LREVMQVkgaW4gdGhlIGludGVyZmFjZSBjb25maWd1cmF0aW9uIG9uIFJIRUwpLgoKICBUeCBmbG93IGNvbnRyb2wgaXMgZGlzYWJsZWQgYnkgZGVmYXVsdCBvbiA4MjU3NyBhbmQgODI1NzgtYmFzZWQgYWRhcHRlcnMKICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KCiAgUG9zc2libGUgcGVyZm9ybWFuY2UgZGVncmFkYXRpb24gb24gY2VydGFpbiA4MjU2NiBhbmQgODI1NzcgZGV2aWNlcwogIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gCiAgSW50ZXJuYWwgc3RyZXNzIHRlc3Rpbmcgd2l0aCBqdW1ibyBmcmFtZXMgc2hvd3MgdGhlIHJlbGlhYmlsaXR5IG9uIHNvbWUKICA4MjU2NiBhbmQgODI1NjcgZGV2aWNlcyBpcyBpbXByb3ZlZCBpbiBjZXJ0YWluIGNvcm5lciBjYXNlcyBieSBkaXNhYmxpbmcgdGhlCiAgRWFybHkgUmVjZWl2ZSBmZWF0dXJlLiBEb2luZyBzbyBjYW4gaW1wYWN0IFR4IHBlcmZvcm1hbmNlLiBUbyByZWR1Y2UgdGhlCiAgaW1wYWN0LCB0aGUgcGFja2V0IGJ1ZmZlciBzaXplcyBhbmQgcmVsZXZhbnQgZmxvdyBjb250cm9sIHNldHRpbmdzIGFyZQogIG1vZGlmaWVkIGFjY29yZGluZ2x5LgoKU3VwcG9ydAo9PT09PT09CgpGb3IgZ2VuZXJhbCBpbmZvcm1hdGlvbiwgZ28gdG8gdGhlIEludGVsIHN1cHBvcnQgd2Vic2l0ZSBhdDoKCiAgICB3d3cuaW50ZWwuY29tL3N1cHBvcnQvCgpvciB0aGUgSW50ZWwgV2lyZWQgTmV0d29ya2luZyBwcm9qZWN0IGhvc3RlZCBieSBTb3VyY2Vmb3JnZSBhdDoKCiAgICBodHRwOi8vc291cmNlZm9yZ2UubmV0L3Byb2plY3RzL2UxMDAwCgpJZiBhbiBpc3N1ZSBpcyBpZGVudGlmaWVkIHdpdGggdGhlIHJlbGVhc2VkIHNvdXJjZSBjb2RlIG9uIHRoZSBzdXBwb3J0ZWQKa2VybmVsIHdpdGggYSBzdXBwb3J0ZWQgYWRhcHRlciwgZW1haWwgdGhlIHNwZWNpZmljIGluZm9ybWF0aW9uIHJlbGF0ZWQKdG8gdGhlIGlzc3VlIHRvIGUxMDAwLWRldmVsQGxpc3RzLnNmLm5ldAoKTGljZW5zZQo9PT09PT09CgpJbnRlbCBHaWdhYml0IExpbnV4IGRyaXZlci4KQ29weXJpZ2h0KGMpIDE5OTkgLSAyMDEyIEludGVsIENvcnBvcmF0aW9uLgoKVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKdW5kZXIgdGhlIHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSwKdmVyc2lvbiAyLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KClRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSBpdCB3aWxsIGJlIHVzZWZ1bCwgYnV0IFdJVEhPVVQKQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yCkZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IKbW9yZSBkZXRhaWxzLgoKWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYWxvbmcgd2l0aAp0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwKNTEgRnJhbmtsaW4gU3QgLSBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQS4KClRoZSBmdWxsIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGlzIGluY2x1ZGVkIGluIHRoaXMgZGlzdHJpYnV0aW9uIGluCnRoZSBmaWxlIGNhbGxlZCAiQ09QWUlORyIuCgpUcmFkZW1hcmtzCj09PT09PT09PT0KCkludGVsLCBJdGFuaXVtLCBhbmQgUGVudGl1bSBhcmUgdHJhZGVtYXJrcyBvciByZWdpc3RlcmVkIHRyYWRlbWFya3Mgb2YKSW50ZWwgQ29ycG9yYXRpb24gb3IgaXRzIHN1YnNpZGlhcmllcyBpbiB0aGUgVW5pdGVkIFN0YXRlcyBhbmQgb3RoZXIKY291bnRyaWVzLgoKKiBPdGhlciBuYW1lcyBhbmQgYnJhbmRzIG1heSBiZSBjbGFpbWVkIGFzIHRoZSBwcm9wZXJ0eSBvZiBvdGhlcnMuCg==