RGFuaWVsICgyOCBEZWNlbWJlciAxOTk5KToKIC0gVGltIFZlcmhvZXZlbiBjb3JyZWN0bHkgaWRlbnRpZmllZCB0aGF0IGN1cmwKICAgZG9lc24ndCBzdXBwb3J0IFVSTCBmb3JtYXR0ZWQgZmlsZSBuYW1lcyB3aGVuIGdldHRpbmcgZnRwLiBOb3csIHRoZXJlJ3MgYQogICBwcm9ibGVtIHdpdGggZ2V0dGluZyB2ZXJ5IHdlaXJkIGZpbGUgbmFtZXMgb2ZmIEZUUCBzZXJ2ZXJzLiBSRkMgOTU5IGRlZmluZXMKICAgdGhhdCB0aGUgZmlsZSBuYW1lIHN5bnRheCB0byB1c2Ugc2hvdWxkIGJlIHRoZSBzYW1lIGFzIGluIHRoZSBuYXRpdmUgT1Mgb2YKICAgdGhlIHNlcnZlci4gU2luY2Ugd2UgZG9uJ3Qga25vdyB0aGUgcGVlciBzZXJ2ZXIgc3lzdGVtIHdlIGN1cnJlbnRseSBqdXN0CiAgIHRyYW5zbGF0ZSB0aGUgVVJMIHN5bnRheCBpbnRvIHBsYWluIGxldHRlcnMuIEl0IGlzIHN0aWxsIGJldHRlciBhbmQgd2l0aAogICB0aGUgc29sYXJpcyAyLjYtc3VwcGxpZWQgZnRwIHNlcnZlciBpdCB3b3JrcyB3aXRoIHNwYWNlcyBpbiB0aGUgZmlsZSBuYW1lcy4KCkRhbmllbCAoMjcgRGVjZW1iZXIgMTk5OSk6CiAtIFdoZW4gY3VybCBwYXJzZWQgY29va2llcyBzdHJhaWdodCBvZmYgYSByZW1vdGUgc2l0ZSwgaXQgY29ycnVwdGVkIHRoZSBpbnB1dAogICBkYXRhLCB3aGljaCwgaWYgdGhlIGRvd25sb2FkZWQgaGVhZGVycyB3ZXJlIHN0b3JlZCBtYWRlIHZlcnkgb2RkIGNoYXJhY3RlcnMKICAgaW4gdGhlIHNhdmVkIGRhdGEuIENvcnJlY3RseSBpZGVudGlmaWVkIGFuZCByZXBvcnRlZCBieSBQYXVsIEhhcnJpbmd0b24uCgpEYW5pZWwgKDEzIERlY2VtYmVyIDE5OTkpOgogLSBHZW5lcmFsIGNsZWFudXBzIGluIHRoZSBsaWJyYXJ5IGludGVyZmFjZS4gVGhlcmUgaGFkIGJlZW4gc29tZSBiYWQga2x1ZGdlcwogICBhZGRlZCBkdXJpbmcgdGltZXMgb2Ygc3RyZXNzIGFuZCBJIGRpZCBteSBiZXN0IHRvIGNsZWFuIHRoZW0gb2ZmLiBJdCB3YXMKICAgYm90aCByZWdhcmRpbmcgdGhlIGxpYiBBUEkgYXMgd2VsbCBhcyBpbmNsdWRlIGZpbGUgY29uZnVzaW9ucy4KCkRhbmllbCAoMyBEZWNlbWJlciAxOTk5KToKIC0gQSBzbWFsbCAtLXN0ZGVyciBidWcgd2FzIHJlcG9ydGVkIGJ5IEVldHUgT2phbmVuLi4uCgogLSB3aG8gYWxzbyBicm91Z2h0IHRoZSBzdWdnZXN0aW9uIG9mIGV4dGVuZGluZyB0aGUgLVggZmxhZyB0byBmdHAgbGlzdCBhcwogICB3ZWxsLiBTbywgbm93IGl0IGlzIGFuZCB0aGUgbG9uZyBvcHRpb24gaXMgbm93IC0tcmVxdWVzdCBpbnN0ZWFkLiBJdCBpcwogICBvbmx5IGZvciBmdHAgbGlzdCBmb3Igbm93IChhbmQgdGhlIGZvcm1lciBodHRwIHN0dWZmIHRvbyBvZiBjb3Vyc2UpLgoKTGFycyBKLiBBYXMgKDI0IE5vdmVtYmVyIDE5OTkpOgogLSBQYXRjaGVkIGN1cmwgdG8gY29tcGlsZSBhbmQgYnVpbGQgdW5kZXIgQmVPUy4gRG9lc24ndCB3b3JrIHlldCB0aG91Z2ghCgogLSBDb3JyZWN0ZWQgdGhlIE1ha2VmaWxlLmFtIGZpbGVzIHRvIGFsbG93IHB1dHRpbmcgb2JqZWN0IGZpbGVzIGluCiAgIGRpZmZlcmVudCBkaXJlY3RvcmllcyB0aGFuIHRoZSBzb3VyY2VzLgoKVmVyc2lvbiA2LjMuMQoKRGFuaWVsICgyMyBOb3ZlbWJlciAxOTk5KToKIC0gSSd2ZSBoYWQgdGhpcyBtYWpvciBkaXNrIGNyYXNoLiBNeSBnb29kIG9sZCB0cnVzdC13b3J0aHkgc291cmNlIGRpc2sgZGllZAogICBhbG9uZyB3aXRoIHRoZSBtYWNoaW5lIHRoYXQgaG9zdGVkIGl0LiBUaGFuayBnb29kbmVzcyBtb3N0IG9mIGFsbCB0aGUKICAgdGhpbmdzIEkndmUgZG9uZSBhcmUgZWl0aGVyIGJhY2tlZCB1cCBlbHNld2hlcmUgb3Igc3RvcmVkIGluIHRoaXMgQ1ZTCiAgIHNlcnZlciEKCiAtIE1pY2hhZWwgUy4gU3RldWVyIHBvaW50ZWQgb3V0IGEgYnVnIGluIHRoZSAtRiBoYW5kbGluZwogICB0aGF0IG1hZGUgY3VybCBoYW5nIGlmIHlvdSBwb3N0ZWQgYW4gZW1wdHkgdmFyaWFibGUgc3VjaCBhcyAnLUYgbmFtZT0nLiBJdAogICB3YXMgb25lIG9mIHRob3NlIG9sZCBidWdzIHRoYXQgbmV2ZXIgaGF2ZSB3b3JrZWQgcHJvcGVybHkuLi4KCiAtIEphc29uIEJhaWV0dG8gcG9pbnRlZCBvdXQgYSBnZW5lcmFsIGZsYXcgaW4gdGhlIEhUVFAKICAgZG93bmxvYWQuIEN1cmwgZGlkbid0IGNvbXBsYWluIGlmIGl0IHdhcyBwcmVtYXR1cmVseSBhYm9ydGVkIGJlZm9yZSB0aGUKICAgZW50aXJlIGRvd25sb2FkIHdhcyBjb21wbGV0ZWQuIEl0IGRvZXMgbm93LgoKRGFuaWVsICgxOSBOb3ZlbWJlciAxOTk5KToKIC0gQ2hyaXMgTWFsdGJ5IHZlcnkgYWNjdXJhdGVseSBjcml0aWNpemVkIHRoZSBsYWNrIG9mCiAgIHJldHVybiBjb2RlIGNoZWNrcyBvbiB0aGUgZndyaXRlKCkgY2FsbHMuIEkgZGlkIGEgdGhvcm91Z2ggY2hlY2sgZm9yIGFsbAogICBvY2N1cnJlbmNlcyBhbmQgY29ycmVjdGVkIHRoaXMuCgpEYW5pZWwgKDE3IE5vdmVtYmVyIDE5OTkpOgogLSBQYXVsIEhhcnJpbmd0b24gcG9pbnRlZCBvdXQgdGhhdCB0aGUgLW0vLS1tYXgtdGltZSBvcHRpb24KICAgZG9lc24ndCB3b3JrIGZvciB0aGUgc2xvdyBzeXN0ZW0gY2FsbHMgbGlrZSBnZXRob3N0YnluYW1lKCkuLi4gSSBkb24ndCBoYXZlCiAgIGFueSBnb29kIGZpeCB5ZXQsIGp1c3QgYSBzbGlnaHRseSBsZXNzIGJhZCBvbmUgdGhhdCBtYWtlcyBjdXJsIGV4aXQgaGFyZAogICB3aGVuIHRoZSB0aW1lb3V0IGlzIHJlYWNoZWQuCgogLSBCam9ybiBSZWVzZSBoZWxwZWQgbWUgcG9pbnQgb3V0IGEgcG9zc2libGUgcHJvYmxlbSB0aGF0IG1pZ2h0IGJlIHRoZSByZWFzb24KICAgd2h5IFRob21hcyBIdXJzdCBleHBlcmllbmNlIHByb2JsZW1zIGluIGhpcyBBbWlnYSB2ZXJzaW9uLgoKIERhbmllbCAoMTIgTm92ZW1iZXIgMTk5OSk6CiAtIEkgZm91bmQgYSBjcmFzaCBpbiB0aGUgbmV3IGNvb2tpZSBmaWxlIHBhcnNlci4gSXQgY3Jhc2hlZCB3aGVuIHlvdSBnYXZlCiAgIGEgcGxhaW4gaHR0cCBoZWFkZXIgZmlsZSBhcyBpbnB1dC4uLgoKVmVyc2lvbiA2LjMKCiBEYW5pZWwgKDEwIE5vdmVtYmVyIDE5OTkpOgogLSBJIGtpbmQgb2YgZm91bmQgb3V0IHRoYXQgdGhlIEhUVFAgdGltZS1jb25kaXRpb25hbCBHRVRzICgteikgYXJlbid0IGFsd2F5cwogICByZXNwZWN0ZWQgYnkgdGhlIHdlYiBzZXJ2ZXIgYW5kIHRoZSBkb2N1bWVudCBpcyB0aGVyZWZvcmUgc2VudCBpbiB3aG9sZQogICBhZ2FpbiwgZXZlbiB0aG91Z2ggaXQgZG9lc24ndCBtYXRjaCB0aGUgcmVxdWVzdGVkIGNvbmRpdGlvbi4gQWZ0ZXIgcmVhZGluZwogICBzZWN0aW9uIDEzLjMuNCBvZiBSRkMgMjYxNiwgSSB0aGluayBJJ20gZG9pbmcgdGhlIHJpZ2h0IHRoaW5nIG5vdyB3aGVuIEkgZG8KICAgbXkgb3duIGNoZWNrIGFzIHdlbGwuIElmIGN1cmwgdGhpbmtzIHRoZSBjb25kaXRpb24gaXNuJ3QgbWV0LCB0aGUgdHJhbnNmZXIKICAgaXMgYWJvcnRlZCBwcmVtYXR1cmVseSAoYWZ0ZXIgYWxsIHRoZSBoZWFkZXJzIGhhdmUgYmVlbiByZWNlaXZlZCkuCgogLSBBZnRlciBjb21tZW50cyBmcm9tIFJvYmVydCBMaW5kZW4gSSBhbHNvIHJld3JvdGUgc29tZSBwYXJ0cyBvZiB0aGUgbWFuIHBhZ2UKICAgdG8gYmV0dGVyIGRlc2NyaWJlIGhvdyB0aGUgLUYgd29ya3MuCgogLSBNaWNoYWVsIEFudGkgcHV0IHVwIGEgbmV3IGN1cmwgZG93bmxvYWQgbWlycm9yIGluCiAgIENoaW5hOiAgaHR0cDovL3d3dy5wc2hvd2luZy5jb20vY3VybC8KCiAtIEkgYWRkZWQgdGhlIGxpc3Qgb2YgZG93bmxvYWQgbWlycm9ycyB0byB0aGUgUkVBRE1FIGZpbGUKCiAtIEkgZGlkIGFkZCBtb3JlIGV4cGxhbmF0aW9ucyB0byB0aGUgbWFuIHBhZ2UKCiBEYW5pZWwgKDggTm92ZW1iZXIgMTk5OSk6CiAtIEkgbWFkZSB0aGUgLWIvLS1jb29raWUgb3B0aW9uIGNhcGFibGUgb2YgcmVhZGluZyBuZXRzY2FwZSBmb3JtYXR0ZWQgY29va2llCiAgIGZpbGVzIGFzIHdlbGwgYXMgbm9ybWFsIGh0dHAtaGVhZGVyIGZpbGVzLiBJdCBzaG91bGQgYmUgYWJsZSB0bwogICB0cmFuc3BhcmVudGx5IGZpZ3VyZSBvdXQgd2hhdCBraW5kIG9mIGZpbGUgaXQgZ290IGFzIGlucHV0LgoKIERhbmllbCAoMjkgT2N0b2JlciAxOTk5KToKIC0gQW5vdGhlciBvbmUgb2YgU2ViYXN0aWFhbiB2YW4gRXJrJ3MgaWRlYXMgKHRoYXQgaGFzIGJlZW4gcmVxdWVzdGVkIGJlZm9yZQogICBidXQgSSBzZWVtIHRvIGhhdmUgZm9yZ290dGVuIHdobyBpdCB3YXMpLCBpcyB0byBhZGQgc3VwcG9ydCBmb3IgcmFuZ2VzIGluCiAgIEZUUCBkb3dubG9hZHMuIEFzIHVzdWFsLCBvbmUgcmVxdWVzdCBpcyBqdXN0IGEgcmVxdWVzdCwgd2hlbiB0aGV5J3JlIHR3bwogICBpdCBpcyBhIGRlbWFuZC4gSSd2ZSBhZGRlZCBzaW1wbGUgc3VwcG9ydCBmb3IgWC1ZIHN0eWxlIGZldGNoZXMuIFggaGFzIHRvCiAgIGJlIHRoZSBsb3dlciBudW1iZXIsIHRob3VnaCB5b3UgbWF5IG9taXQgb25lIG9mIHRoZSBudW1iZXJzLiBVc2UgdGhlIC1yLwogICAtLXJhbmdlIHN3aXRjaCAocHJldmlvdXNseSBIVFRQLW9ubHkpLgoKIC0gU2ViYXN0aWFhbiB2YW4gRXJrIHN1Z2dlc3RlZCB0aGF0IGN1cmwgc2hvdWxkIGJlCiAgIGFibGUgdG8gc2hvdyB0aGUgZmlsZSBzaXplIG9mIGEgc3BlY2lmaWVkIGZpbGUuIEkgdGhpbmsgdGhpcyBpcyBhIHNwbGVuZGlkCiAgIGlkZWEgYW5kIHRoZSAtSSBmbGFnIGlzIG5vdyB3b3JraW5nIGZvciBGVFAuIEl0IGRpc3BsYXlzIHRoZSBmaWxlIHNpemUgaW4KICAgdGhpcyBtYW5uZXI6CiAgICAgICAgQ29udGVudC1MZW5ndGg6IFhYWFgKICAgQXMgaXQgcmVzZW1ibGVzIG5vcm1hbCBoZWFkZXJzLCBhbmQgbGVhdmVzIHVzIHRoZSBvcHBvcnR1bml0eSB0byBhZGQgbW9yZQogICBpbmZvIGluIHRoYXQgZGlzcGxheSBpZiB3ZSBjYW4gY29tZSB1cCB3aXRoIG1vcmUgaW4gdGhlIGZ1dHVyZSEgSXQgYWxzbwogICBtYWtlcyBzZW5zZSBzaW5jZSBpZiB5b3UgYWNjZXNzIGZ0cCB0aHJvdWdoIGEgSFRUUCBwcm94eSwgeW91J2QgZ2V0IHRoZQogICBmaWxlIHNpemUgdGhlIHNhbWUgd2F5LgoKICAgSSBjaGFuZ2VkIHRoZSBvcmRlciBvZiB0aGUgUVVPVEUgY29tbWFuZCBleGVjdXRpb25zLiBUaGV5J3JlIG5vdyBleGVjdXRlZAogICBqdXN0IGFmdGVyIHRoZSBsb2dpbiBhbmQgYmVmb3JlIGFueSBvdGhlciBjb21tYW5kLiBJIG1hZGUgdGhpcyB0byBlbmFibGUKICAgcXVvdGUgY29tbWFuZHMgdG8gcnVuIGJlZm9yZSB0aGUgLUkgc3R1ZmYgaXMgZG9uZSB0b28uCgogLSBJIGZvdW5kIG91dCB0aGF0IC1ELy0tZHVtcC1oZWFkZXIgYW5kIC1WLy0tdmVyc2lvbiB3ZXJlbid0IGRvY3VtZW50ZWQgaW4KICAgdGhlIG1hbiBwYWdlLgoKIC0gTWFueSBIVFRQLzEuMSBzZXJ2ZXJzIGRvIG5vdCBzdXBwb3J0IHJhbmdlcy4gRG9uJ3QgYXNrIG1lIHdoeS4gSSBkaWQgYWRkCiAgIHNvbWUgdGV4dCBhYm91dCB0aGlzIGluIHRoZSBtYW4gcGFnZSBmb3IgdGhlIHJhbmdlIG9wdGlvbi4gVGhlIHRocmVhZCBpbgogICB0aGUgbWFpbGluZyBsaXN0IHRoYXQgc3RhcnRlZCB0aGlzIHdhcyBpbml0aWF0ZWQgYnkgTWljaGFlbCBBbnRpLgoKIC0gSSBnZXQgcmVwb3J0cyBhYm91dCBucm9mZiBjcmFzaGVzIG9uIHNvbGFyaXMgMi42KyB3aGVuIGRpc3BsYXlpbmcgdGhlIGN1cmwKICAgbWFuIHBhZ2UuIFN3aXRjaCB0byBnbnJvZmYgaW5zdGVhZCwgaXQgaXMgcmVwb3J0ZWQgdG8gd29yayghKS4gQWRhbSBCYXJjbGF5CiAgIHJlcG9ydGVkIGFuZCBicm91Z2h0IHRoZSBzdWdnZXN0aW9uLgoKIC0gSW4gYSBkaWFsb2d1ZSB3aXRoIEpvaGFubmVzIEcuIEtyaXN0aW5zc29uIHdlIGNhbWUKICAgdXAgd2l0aCB0aGUgaWRlYSB0byBsZXQgLUgvLS1oZWFkZXIgc3BlY2lmaWVkIGhlYWRlcnMgcmVwbGFjZSB0aGUKICAgaW50ZXJuYWxseSBnZW5lcmF0ZWQgaGVhZGVycywgaWYgeW91IGhhcHBlbmVkIHRvIHNlbGVjdCB0byBhZGQgYSBoZWFkZXIKICAgdGhhdCBjdXJsIG5vcm1hbGx5IHVzZXMgYnkgaXRzZWxmLiBUaGUgYWR2YW50YWdlIHdpdGggdGhpcyBpcyBub3QgZW50aXJlbHkKICAgb2J2aW91cywgYnV0IGluIEpvaGFubmVzJyBjYXNlIGl0IG1lYW5zIHRoYXQgaGUgY2FuIHVzZSBhbm90aGVyIEhvc3Q6IHRoYW4KICAgdGhlIG9uZSBjdXJsIHdvdWxkIHNldC4KCiBEYW5pZWwgKDI3IE9jdG9iZXIgMTk5OSk6CiAtIEpvbmdraSBTdXdhbmRpIGJyb3VnaHQgYSBuaWNlIHBhdGNoIGZvciAoeWV0IGFub3RoZXIpIGNyYXNoIHdoZW4gZm9sbG93aW5nCiAgIGEgbG9jYXRpb246LiBUaGlzIHRpbWUgeW91IGhhZCB0byBmb2xsb3cgYSBodHRwczovLyBzZXJ2ZXIncyByZWRpcmVjdCB0bwogICBnZXQgdGhlIGNvcmUuCgpWZXJzaW9uIDYuMgoKIERhbmllbCAoMjEgT2N0b2JlciAxOTk5KToKIC0gSSB0aGluayBJIG1hbmFnZWQgdG8gcmVtb3ZlIHRoZSBzdXNwaWNpb3VzIChuaWwpIHRoYXQgaGFzIGJlZW4gc2VlbiBqdXN0CiAgIGJlZm9yZSB0aGUgIkhvc3Q6IiBpbiBIVFRQIHJlcXVlc3RzIHdoZW4gLXYgd2FzIHVzZWQuCiAtIEkgZm91bmQgb3V0IHRoYXQgaWYgeW91IGZvbGxvd2VkIGEgbG9jYXRpb246IHdoZW4gdXNpbmcgYSBwcm94eSwgd2l0aG91dAogICBoYXZpbmcgc3BlY2lmaWVkIGh0dHA6Ly8gaW4gdGhlIFVSTCwgdGhlIHByb3RvY29sIHBhcnQgd2FzIGFkZGVkIG9uY2UgYWdhaW4KICAgd2hlbiBtb3ZpbmcgdG8gdGhlIG5leHQgVVJMISAoVGhlIHByb3RvY29sIHBhcnQgaGFzIHRvIGJlIGFkZGVkIHRvIHRoZQogICBVUkwgd2hlbiBnb2luZyB0aHJvdWdoIGEgcHJveHkgc2luY2UgaXQgaGFzIG5vIHByb3RvY29sLWd1ZXNzaW5nIHN5c3RlbQogICBzdWNoIGFzIGN1cmwgaGFzLikKIC0gQmVuamFtaW4gUml0Y2V5IHJlcG9ydGVkIGEgY29yZSBkdW1wIHVuZGVyIHNvbGFyaXMgMi42CiAgIHdpdGggT3BlblNTTCAwLjkuNC4gSXQgdHVybmVkIG91dCB0aGlzIHdhcyBkdWUgdG8gYSBiYWQgZnJlZSgpIGluIG1haW4uYwogICB0aGF0IG9jY3VycmVkIGFmdGVyIHRoZSBkb3dubG9hZCB3YXMgZG9uZSBhbmQgY29tcGxldGVkLgogLSBCZW5qYW1pbiBmb3VuZCBmdHAgZG93bmxvYWRzIHRvIHNob3cgdGhlIGZpcnN0IGxpbmUgb2YgdGhlIGRvd25sb2FkIG1ldGVyCiAgIHRvIGdldCB3cml0dGVuIHR3aWNlLCBhbmQgSSByZW1vdmVkIHRoYXQgcHJvYmxlbS4gSXQgd2FzIGludHJvZHVjZWQgd2l0aAogICB0aGUgbXVsdGlwbGUgVVJMIHN1cHBvcnQuCiAtIERhbiBaaXR0ZXIgY29ycmVjdGx5IHBvaW50ZWQgb3V0IHRoYXQgY3VybCA2LjEgYW5kIGVhcmxpZXIgdmVyc2lvbnMgZGlkbid0CiAgIGhvbm9yIFJGQyAyNjE2IGNoYXB0ZXIgNCBzZWN0aW9uIDIsICJNZXNzYWdlIEhlYWRlcnMiOiAiLi4uRmllbGQgbmFtZXMgYXJlCiAgIGNhc2UtaW5zZW5zaXRpdmUuLi4iICBIVFRQIGhlYWRlciBwYXJzaW5nIGFzc3VtZWQgYSBjZXJ0YWluIGNhc2luZy4gRGFuCiAgIGFsc28gcHJvdmlkZWQgbWUgd2l0aCBhIHBhdGNoIHRoYXQgY29ycmVjdGVkIHRoaXMsIHdoaWNoIEkgdG9vayB0aGUgbGliZXJ0eQogICBvZiBlZGl0aW5nIHNsaWdodGx5LgogLSBEYW4gWml0dGVyIGFsc28gcHJvdmlkZWQgYSBuaWNlIHBhdGNoIGZvciBjb25maWcuZ3Vlc3MgdG8gYmV0dGVyIHJlY29nbml6ZQogICB0aGUgTWFjIE9TIFgKIC0gRGFuIGFsc28gY29ycmVjdGVkIGEgbWlub3IgcHJvYmxlbSBpbiB0aGUgbGliL01ha2VmaWxlIHRoYXQgY2F1c2VkIGxpbmtpbmcKICAgdG8gZmFpbCBvbiBPUyBYLgoKIERhbmllbCAoMTkgT2N0b2JlciAxOTk5KToKIC0gTGVuIE1hcmluYWNjaW8gY2FtZSB1cCB3aXRoIHNvbWUgcHJvYmxlbXMgd2l0aCBjdXJsLiAgU2luY2UgV2luZG93cyBoYXMgYQogICBjcmlwcGxlZCBzaGVsbCwgaXQgY2FuJ3QgcmVkaXJlY3Qgc3RkZXJyIGFuZCB0aGF0IGNhdXNlcyB0cm91YmxlLiBJIGFkZGVkCiAgIC0tc3RkZXJyIHRvZGF5IHdoaWNoIGFsbG93cyB0aGUgdXNlciB0byByZWRpcmVjdCB0aGUgc3RkZXJyIHN0cmVhbSB0byBhCiAgIGZpbGUgb3Igc3Rkb3V0LgoKIERhbmllbCAoMTggT2N0b2JlciAxOTk5KToKIC0gVGhlIGNvbmZpZ3VyZSBzY3JpcHQgbm93IHVuZGVyc3RhbmRzIHRoZSAnLS13aXRob3V0LXNzbCcgZmxhZywgd2hpY2ggbm93CiAgIHRvdGFsbHkgZGlzYWJsZSBTU0wvaHR0cHMgc3VwcG9ydC4gUHJldmlvdXNseSBpdCB3YXNuJ3QgcG9zc2libGUgdG8gZm9yY2UKICAgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgdG8gbGVhdmUgU1NMIGFsb25lLiBUaGUgcHJldmlvdXMgZnVuY3Rpb25hbGl0eSBoYXMKICAgYmVlbiByZXRhaW5lZC4gVHJveSBFbmdlbCBoZWxwZWQgdGVzdCB0aGlzIG5ldyBvbmUuCgpWZXJzaW9uIDYuMQoKIERhbmllbCAoMTcgT2N0b2JlciAxOTk5KToKIC0gSSBpZmRlZidlZCBvciBjb21tZW50ZWQgYWxsIHRoZSB6bGliIHN0dWZmIGluIHRoZSBzb3VyY2VzIGFuZCBjb25maWd1cmUKICAgc2NyaXB0LiBJdCB0dXJuZWQgb3V0IHdlIG5lZWRlZCB0byBtb2NrIG1vcmUgd2l0aCB6bGliIHRoYW4gSSBpbml0aWFsbHkKICAgdGhvdWdodCwgdG8gbWFrZSBpdCBjYXBhYmxlIG9mIGRvd25sb2FkaW5nIGNvbXByZXNzZWQgSFRUUCBkb2N1bWVudHMgYW5kCiAgIHVuY29tcHJlc3MgdGhlbSBvbiB0aGUgZmx5LiBJIGRpZG4ndCBtZWFuIHRoZSB6bGliIHBhcnRzIG9mIGN1cmwgdG8gYmVjb21lCiAgIG1vcmUgdGhhbiBtaW5vciBzbyB0aGlzIG1lYW5zIEkgaGFsdCB0aGUgemxpYiBleHBlZGl0aW9uIGZvciBub3cgYW5kIHdhaXQKICAgdW50aWwgc29tZW9uZSBlaXRoZXIgd3JpdGVzIHRoZSBjb2RlIG9yIHpsaWIgZ2V0cyB1cGRhdGVkIGFuZCBiZXR0ZXIKICAgYWRqdXN0ZWQgZm9yIHRoaXMga2luZCBvZiB1c2FnZS4gIEkgd29uJ3QgZ2V0IGludG8gZGV0YWlscyBoZXJlLCBidXQgYQogICBzaG9ydCBhIHN1bW1hcnkgaXMgc3VpdGFibGU6CiAgIC0gemxpYiBjYW4ndCBhdXRvbWF0aWNhbGx5IGRldGVjdCB3aGV0aGVyIHRvIHVzZSB6bGliIG9yIGd6aXAKICAgICBkZWNvbXByZXNzaW9uIG1ldGhvZHMuCiAgIC0gemxpYiBpcyB2ZXJ5IG5lYXQgZm9yIHJlYWRpbmcgZ3ppcHBlZCBmaWxlcyBmcm9tIGEgZmlsZSBkZXNjcmlwdG9yLAogICAgIGFsdGhvdWdoIG5vdCBhcyBuaWNlIGZvciByZWFkaW5nIGJ1ZmZlci1iYXNlZCBkYXRhIHN1Y2ggYXMgd2Ugd291bGQKICAgICB3YW50IGl0LgogICAtIHRoZXJlIGFyZSBzdGlsbCBzb21lIHByb2JsZW1zIHdpdGggdGhlIHdpbjMyIHZlcnNpb24gd2hlbiByZWFkaW5nIGZyb20KICAgICBhIGZpbGUgZGVzY3JpcHRvciBpZiB0aGF0IGlzIGEgc29ja2V0CgogRGFuaWVsICgxNCBPY3RvYmVyIDE5OTkpOgogLSBNb3ZlZCB0aGUgKGV4dGVybmFsKSBpbmNsdWRlIGZpbGVzIGZvciBsaWJjdXJsIGludG8gYSBzdWJkaXJlY3RvcnkgbmFtZWQKICAgY3VybCBhbmQgYWRqdXN0ZWQgYWxsICNpbmNsdWRlIGxpbmVzIHRvIHVzZSA8Y3VybC9YWFhYPiB0byBtYWludGFpbiBhCiAgIGJldHRlciBuYW1lIHNwYWNlIGFuZCBjb250cm9sIG9mIHRoZSBoZWFkZXJzLiBUaGlzIGhhcyBiZWVuIHJlcXVlc3RlZC4KCiBEYW5pZWwgKDEyIE9jdG9iZXIgMTk5OSk6CiAtIEkgbW9kaWZpZWQgdGhlICdtYWtldGd6JyBzY3JpcHQgdG8gcGVyZm9ybSBhICdtYWtlJyB0b28gYmVmb3JlIGEgcmVsZWFzZQogICBhcmNoaXZlIGlzIHB1dCB0b2dldGhlciBpbiBhbiBhdHRlbXB0IHRvIG1ha2UgdGhlIHRpbWUgc3RhbXBzIGJldHRlciBhbmQKICAgaG9wZWZ1bGx5IGF2b2lkIHRoZSBkb3VibGUgY29uZmlndXJlLXJ1bm5pbmcgdGhhdCB1c2UgdG8gb2NjdXIuCgogRGFuaWVsICgxMSBPY3RvYmVyIDE5OTkpOgogLSBBcHBsaWVkIEr2cm4ncyBwYXRjaGVzIHRoYXQgZml4ZXMgemxpYiBmb3IgbWluZ3czMiBjb21waWxlcyBhcyB3ZWxsIGFzCiAgIHNvbWUgb3RoZXIgbWlzc2luZyB6bGliICNpZmRlZiBhbmQgbW9yZSB0ZXh0IG9uIHRoZSBtdWx0aXBsZSBVUkwgZG9jcyBpbgogICB0aGUgbWFuIHBhZ2UuCgpWZXJzaW9uIDYuMWJldGEKCiBEYW5pZWwgKDYgT2N0b2JlciAxOTk5KToKIC0gRG91Z2xhcyBFLiBXZWdzY2hlaWQgc2VudCBtZSBhIHBhdGNoIHRoYXQgbWFkZSB0aGUgZXhhY3Qgc2FtZSB0aGluZyBhcyBJCiAgIGp1c3QgbWFkZTogdGhlIC1kIHN3aXRjaCBpcyBub3cgY2FwYWJsZSBvZiByZWFkaW5nIHBvc3QgZGF0YSBmcm9tIGEgbmFtZWQKICAgZmlsZSBvciBzdGRpbi4gIFVzZSBpdCBzaW1pbGFybHkgdG8gdGhlIC1GLiBUbyByZWFkIHRoZSBwb3N0IGRhdGEgZnJvbSBhCiAgIGdpdmVuIGZpbGU6CgogICAgICAgIGN1cmwgLWQgQHBhdGgvdG8vZmlsZW5hbWUgd3d3LnBvc3RzaXRlLmNvbQoKICAgb3IgbGV0IGN1cmwgcmVhZCBpdCBvdXQgZnJvbSBzdGRpbjoKCiAgICAgICAgY3VybCAtZCBALSB3d3cucG9zdGl0LmNvbQoKIEr2cm4gSGFydHJvdGggKDMgT2N0b2JlciAxOTk5KToKIC0gQnJvdWdodCBzb21lIG1vcmUgcGF0Y2hlcyBmb3IgbXVsdGlwbGUgVVJMIGZ1bmN0aW9uYWxpdHkuIFRoZSBNSU1FCiAgIHNlcGFyYXRpb24gaWRlYXMgYXJlIGFsbW9zdCBzY3JhcHBlZCBub3csIGFuZCBhIGN1c3RvbSBzZXBhcmF0b3IgaXMgYmVpbmcKICAgdXNlZCBpbnN0ZWFkLiBUaGlzIGlzIHN0aWxsIGNvbXBpbGUtdGltZSAiZmxhZ2dlZCIuCgogRGFuaWVsCiAtIFVwZGF0ZWQgY3VybC4xIHdpdGggbXVsdGlwbGUgVVJMIGluZm8uCgogRGFuaWVsICgzMCBTZXB0ZW1iZXIgMTk5OSk6CiAtIEZlbGl4IHZvbiBMZWl0bmVyIGJyb3VnaHQgb3BlbnNzbC1jaGVjayBmaXhlcyBmb3IgY29uZmlndXJlLmluIHRvIHdvcmsKICAgb3V0LW9mLXRoZS1ib3ggd2hlbiB0aGUgb3BlbnNzbCBmaWxlcyBhcmUgaW5zdGFsbGVkIGluIHRoZSBzeXN0ZW0gZGVmYXVsdAogICBkaXJzLgoKIERhbmllbCAoMjggU2VwdGVtYmVyIDE5OTkpCiAtIEFkZGVkIGxpYnogZnVuY3Rpb25hbGl0eS4gVGhpcyBzaG91bGQgZW5hYmxlIGRlY29tcHJlc3NpbmcgZ3ppcCwgY29tcHJlc3MKICAgb3IgZGVmbGF0ZSBlbmNvZGluZyBIVFRQIGRvY3VtZW50cy4gSXQgYWxzbyBtYWtlcyBjdXJsIHNlbmQgYW4gYWNjZXB0IHRoYXQKICAgaXQgYWNjZXB0cyB0aGF0IGtpbmQgb2YgZW5jb2RpbmcuIENvbXByZXNzZWQgY29udGVudHMgdXN1YWxseSBzaG9ydGVucwogICBkb3dubG9hZCB0aW1lLiBJICpuZWVkKiBzb21lb25lIHRvIHRlbGwgbWUgYSBzaXRlIHRoYXQgdXNlcyBjb21wcmVzc2VkIEhUVFAKICAgZG9jdW1lbnRzIHNvIHRoYXQgSSBjYW4gdGVzdCB0aGlzIG91dCBwcm9wZXJseS4KCiAtIEFzIGEgcmVzdWx0IG9mIHRoZSBhZGRpbmcgb2YgemxpYiBhd2FyZW5lc3MsIEkgY2hhbmdlZCB0aGUgdmVyc2lvbiBzdHJpbmcKICAgYSBsaXR0bGUuIEkgcGxhbiB0byBhZGQgb3BlbmxkYXAgdmVyc2lvbiByZXBvcnRpbmcgaW4gdGhlcmUgdG9vLgoKIERhbmllbCAoMTcgU2VwdGVtYmVyIDE5OTkpCiAtIE1hZGUgdGhlIC1GIG9wdGlvbiBhbGxvdyBzdGRpbiB3aGVuIHNwZWNpZnlpbmcgZmlsZXMuIEJ5IHVzaW5nICctJyBpbnN0ZWFkCiAgIG9mIGZpbGUgbmFtZSwgdGhlIGRhdGEgd2lsbCBiZSByZWFkIGZyb20gc3RkaW4uCgpWZXJzaW9uIDYuMAoKIERhbmllbCAoMTMgU2VwdGVtYmVyIDE5OTkpCiAtIEFkZGVkIC1YLy0taHR0cC1yZXF1ZXN0IDxyZXF1ZXN0PiB0byBlbmFibGUgYW55IEhUVFAgY29tbWFuZCB0byBiZSBzZW50LgogICBEbyBub3QgdGhhdCB5b3VyIHNlcnZlciBoYXMgdG8gc3VwcG9ydCB0aGUgZXhhY3Qgc3RyaW5nIHlvdSBlbnRlci4gVGhpcwogICBzaG91bGQgcG9zc2libHkgYSBzdHJpbmcgbGlrZSBERUxFVEUgb3IgVFJBQ0UuCgogLSBBcHBsaWVkIERvdWdsYXMnIG1pbmd3MzItZml4ZXMgZm9yIHRoZSBtYWtlZmlsZXMuCgogRGFuaWVsICgxMCBTZXB0ZW1iZXIgMTk5OSkKIC0gRG91Z2xhcyBFLiBXZWdzY2hlaWQgcG9pbnRlZCBvdXQgYSBwcm9ibGVtLiBDdXJsIGRpZG4ndCBjaGVjayB0aGUgRlRQCiAgIHNlcnZlcnMgcmV0dXJuIGNvZGUgcHJvcGVybHkgYWZ0ZXIgdGhlIC0tcXVvdGUgY29tbWFuZHMgd2VyZSBpc3N1ZWQuIEl0CiAgIHRvb2sgYW55dGhpbmcgbm9uIDIwMCBhcyBhbiBlcnJvciwgd2hlbiBhbGwgMlhYIGNvZGVzIHNob3VsZCBiZSBhY2NlcHRlZCBhcwogICBPSy4KCiAtIFNlbmRpbmcgY29va2llcyB0byB0aGUgc2FtZSBzaXRlIGluIG11bHRpcGxlIGxpbmVzIGxpa2UgY3VybCB1c2VkIHRvIGRvCiAgIHR1cm5lZCBvdXQgdG8gYmUgYmFkIGFuZCBicmVha2luZyB0aGUgY29va2llIHNwZWNzLiBDdXJsIG5vdyBzZW5kcyBhbGwKICAgY29va2llcyBvbiBhIHNpbmdsZSBDb29raWU6IGxpbmUuIEN1cmwgaXMgbm90IHlldCBSRkMgMjEwOSBjb21wbGlhbnQsIGJ1dCBJCiAgIGRvdWJ0IHRoYXQgbWFueSBzZXJ2ZXJzIGRvIHVzZSB0aGF0IHN5bnRheCAoeWV0KS4KCiBEYW5pZWwgKDggU2VwdGVtYmVyIDE5OTkpCiAtIEr2cm4gaGVscGVkIG1lIG1ha2Ugc3VyZSBpdCBzdGlsbCBjb21waWxlcyBuaWNlbHkgd2l0aCBtaW5ndzMyIHVuZGVyIHdpbjMyLgoKIERhbmllbCAoNyBTZXB0ZW1iZXIgMTk5OSkKIC0gRlRQIHVwbG9hZCB0aHJvdWdoIHByb3h5IGlzIG5vdyB0dXJuZWQgaW50byBhIEhUVFAgUFVULiBSZXF1ZXN0ZWQgYnkKICAgU3RlZmFuIEthbnRoYWsuCgogLSBBZGRlZCB0aGUgbGRhcCBmaWxlcyB0byB0aGUgLm0zMiBtYWtlZmlsZS4KCiBEYW5pZWwgKDMgU2VwdGVtYmVyIDE5OTkpCiAtIE1hZGUgY29va2llIG1hdGNoaW5nIHdvcmsgd2hpbGUgdXNpbmcgSFRUUCBwcm94eS4KCiBCam9ybiBSZWVzZSAoMzEgQXVndXN0IDE5OTkpCiAtIFBhc3NlZCBoaXMgbGRhcDovLyBwYXRjaC4gTm90ZSB0aGF0IHRoaXMgcmVxdWlyZXMgdGhlIG9wZW5sZGFwIHNoYXJlZAogICBsaWJyYXJ5IHRvIGJlIGluc3RhbGxlZCBhbmQgdGhhdCBMRF9MSUJSQVJZX1BBVEggcG9pbnRzIHRvIHRoZQogICBkaXJlY3Rvcnkgd2hlcmUgdGhlIGxpYiB3aWxsIGJlIGZvdW5kIHdoZW4gY3VybCBpcyBydW4gd2l0aCBhCiAgIGxkYXA6Ly8gVVJMLgoKIEr2cm4gSGFydHJvdGggKDMxIEF1Z3VzdCAxOTk5KQogLSBNYWRlIHRoZSBNaW5ndzMyIG1ha2VmaWxlcyBpbnRvIHNpbmdsZSBmaWxlcy4KIC0gTWFkZSBmaWxlOi8vIHdvcmsgZm9yIFdpbjMyLiBUaGUgc2FtZSBjb2RlIGlzIG5vdyB1c2VkIGZvciB1bml4IGFzIHdlbGwgZm9yCiAgIHBlcmZvcm1hbmNlIHJlYXNvbnMuCgogRG91Z2xhcyBFLiBXZWdzY2hlaWQgKDMwIEF1Z3VzdCAxOTk5KQogLSBQYXRjaGVkIHRoZSBNaW5ndzMyIG1ha2VmaWxlcyBmb3IgU1NMIGJ1aWxkcy4KCiBNYXR0aGV3IENsYXJrZSAoMzAgQXVndXN0IDE5OTkpCiAtIE1hZGUgYSBjb29sIHBhdGNoIGZvciBjb25maWd1cmUuaW4gdG8gYWxsb3cgLS13aXRoLXNzbCB0byBzcGVjaWZ5IHRoZQogICByb290IGRpciBvZiB0aGUgb3BlbnNzbCBpbnN0YWxsYXRpb24sIGFzIGluCgogICAgICAgIC4vY29uZmlndXJlIC0td2l0aC1zc2w9L3Vzci9zc2xfaGVyZQoKIC0gQ29ycmVjdGVkIHRoZSAncmVjb25mJyBzY3JpcHQgdG8gd29yayBiZXR0ZXIgd2l0aCBzb21lIHNoZWxscy4KCiBK9nJuIEhhcnRyb3RoICgyNiBBdWd1c3QgMTk5OSkKIC0gRml4ZWQgdGhlIE1pbmd3MzIgbWFrZWZpbGVzIGluIGxpYi8gYW5kIGNvcnJlY3RlZCB0aGUgZmlsZS5jIGZvciB3aW4zMgogICBjb21waWxlcy4KClZlcnNpb24gNS4xMQoKIERhbmllbCAoMjUgQXVndXN0IDE5OTkpCiAtIEpvaG4gV2Vpc21pbGxlciBwb2ludGVkIG91dCBhIGJ1ZyBpbiB0aGUgaGVhZGVyLWxpbmUKICAgcmVhbGxvYygpIHN5c3RlbSBpbiBkb3dubG9hZC5jLgoKIC0gSSBhZGRlZCBsaWIvZmlsZS5bY2hdIHRvIG9mZmVyIGEgZmlyc3QsIHNpbXBsZSwgZmlsZTovLyBzdXBwb3J0LiBJdAogICBwcm9iYWJseSB3b24ndCBkbyBtdWNoIGdvb2Qgb24gd2luMzIgc3lzdGVtIGF0IHRoaXMgcG9pbnQsIGJ1dCBJIHNlZSBpdAogICBhcyBhIHN0YXJ0LgoKIC0gTWFkZSB0aGUgcmVsZWFzZSBhcmNoaXZlcyBnZXQgYSBNYWtlZmlsZSBpbiB0aGUgcm9vdCBkaXIsIHdoaWNoIGNhbiBiZQogICB1c2VkIHRvIHN0YXJ0IHRoZSBjb21waWxpbmcvYnVpbGRpbmcgcHJvY2VzcyBlYXNpZXIuIEkgaGF2ZW4ndCByZWFsbHkKICAgY2hhbmdlZCBhbnkgSU5TVEFMTCB0ZXh0IHlldCwgSSB3YW50ZWQgdG8gZ2V0IHNvbWUgZmVlZC1iYWNrIG9uIHRoaXMKICAgZmlyc3QuCgogRGFuaWVsICgxNyBBdWd1c3QgMTk5OSkKIC0gQW5vdGhlciBMb2NhdGlvbjogYnVnLiBDdXJsIGRpZG4ndCBkbyBwcm9wZXIgcmVsYXRpdmUgbG9jYXRpb25zIGlmIHRoZQogICBvcmlnaW5hbCBVUkwgaGFkIGNnaS1wYXJhbWV0ZXJzIHRoYXQgY29udGFpbmVkIGEgc2xhc2guIE51c3UncyBwYWdlCiAgIGFnYWluLgoKIC0gQ29ycmVjdGVkIHRoZSBOT19QUk9YWSB1c2FnZS4gSXQgaXMgYSBsaXN0IG9mIHN1YnN0cmluZ3MgdGhhdCBpZiBvbmUgb2YKICAgdGhlbSBtYXRjaGVzIHRoZSB0YWlsIG9mIHRoZSBob3N0IG5hbWUgaXQgc2hvdWxkIGNvbm5lY3QgdG8sIGN1cmwgc2hvdWxkCiAgIG5vdCB1c2UgYSBwcm94eSB0byBjb25uZWN0IHRoZXJlLiBQb2ludGVkIG91dCB0byBtZSBieSBEb3VnbGFzCiAgIEUuIFdlZ3NjaGVpZC4gIEkgYWxzbyBjaGFuZ2VkIHRoZSBSRUFETUUgdGV4dCBhIGxpdHRsZSByZWdhcmRpbmcgdGhpcy4KCiBEYW5pZWwgKDE2IEF1Z3VzdCAxOTk5KQogLSBGaXhlZCBhIG1lbW9yeSBidWcgd2l0aCBodHRwLXNlcnZlcnMgdGhhdCBzZW50IExvY2F0aW9uOiB0byBhIExvY2F0aW9uOgogICBwYWdlLiBOdXN1J3MgcGFnZSBzaG93ZWQgdGhpcyB0b28uCgogLSBNYWRlIGNvb2tpZXMgd29yayBhIGxvdCBiZXR0ZXIuIFNldHRpbmcgdGhlIHNhbWUgY29va2llIG5hbWUgc2V2ZXJhbCB0aW1lcwogICB1c2VkIHRvIGFkZCBtb3JlIGNvb2tpZXMgaW5zdGVhZCBvZiByZXBsYWNpbmcgdGhlIGZvcm1lciBvbmUgd2hpY2ggaXQKICAgc2hvdWxkJ3ZlLiBOdXN1IDxudXMgYXQgaW50ZXJnb3JqLnJvPiBicm91Z2h0IG1lIGFuIFVSTCB0aGF0IG1hZGUgdGhpcwogICBwYWluZnVsbHkgdmlzaWJsZS4uLgoKIFRyb3kgKDE1IEF1Z3VzdCAxOTk5KQogLSBCcm91Z2h0IG5ldyAuc3BlYyBmaWxlcyBhcyB3ZWxsIGFzIGEgcGF0Y2ggZm9yIGNvbmZpZ3VyZS5pbiB0aGF0IGxldHMgdGhlCiAgIGNvbmZpZ3VyZSBzY3JpcHQgZmluZCB0aGUgb3BlbnNzbCBmaWxlcyBiZXR0ZXIsIGV2ZW4gd2hlbiB0aGUgaW5jbHVkZQogICBmaWxlcyBhcmUgaW4gL3Vzci9pbmNsdWRlL29wZW5zc2wKClZlcnNpb24gNS4xMAoKIERhbmllbCAoMTMgQXVndXN0IDE5OTkpCiAtIFNTTF9DVFhfc2V0X2RlZmF1bHRfcGFzc3dkX2NiKCkgaGFzIGJlZW4gbW9kaWZpZWQgaW4gdGhlIDAuOS40IHZlcnNpb24gb2YKICAgT3BlblNTTC4gTm93IHdoeSBjb3VsZG4ndCB0aGV5IHNpbXBseSBhZGQgYSAqbmV3KiBmdW5jdGlvbiBpbnN0ZWFkIG9mCiAgIG1vZGlmeWluZyB0aGUgcGFyYW1ldGVycyBvZiBhbiBhbHJlYWR5IGV4aXN0aW5nIGZ1bmN0aW9uPyBUaGlzIHdheSwgd2UgZ2V0CiAgIGEgY29tcGlsZXIgd2FybmluZyBpZiBjb21waWxpbmcgd2l0aCAwLjkuNCBidXQgbm90IHdpdGggZWFybGllci4gU28sIEkgaGFkCiAgIHRvIGNvbWUgdXAgd2l0aCBhICNpZiBjb25zdHJ1Y3Rpb24gdGhhdCBkZWFscyB3aXRoIHRoaXMuLi4KCiAtIE1hZGUgY3VybCBvdXRwdXQgdGhlIFNTTCB2ZXJzaW9uIG51bWJlciBnZXQgZGlzcGxheWVkIHByb3Blcmx5IHdpdGggMC45LjQuCgogVHJveSAoMTIgQXVndXN0IDE5OTkpCiAtIEFkZGVkIE1pbmdXMzIgKEdDQy0yLjk1KSBzdXBwb3J0IHVuZGVyIFdpbjMyLiBUaGUgSU5TVEFMTCBmaWxlIHdhcyBhbHNvCiAgIGEgYml0IHJlYXJyYW5nZWQuCiAKIERhbmllbCAoMTIgQXVndXN0IDE5OTkpCiAtIEkgaGFkIHRvIGNvcHkgYSBnb29kIDxhcnBhL3RlbG5ldC5oPiBpbmNsdWRlIGZpbGUgaW50byB0aGUgY3VybCBzb3VyY2UKICAgdHJlZSB0byBlbmFibGUgdGhlIHNpbGx5IHdpbjMyIHN5c3RlbXMgdG8gY29tcGlsZS4gVGhlIGRpc3RyaWJ1dGlvbiByaWdodHMKICAgYWxsb3dzIHVzIHRvIGRvIHRoYXQgYXMgbG9uZyBhcyB0aGUgZmlsZSByZW1haW5zIHVubW9kaWZpZWQuCgogLSBJIGNvcnJlY3RlZCBhIGZldyBtaW5vciB0aGluZ3MgdGhhdCBtYWRlIHRoZSBjb21waWxlciBjb21wbGFpbiB3aGVuCiAgIC1XYWxsIC1wZWRhbnRpYyB3YXMgdXNlZC4KCiAtIEknbSBtb3ZpbmcgdGhlIG9mZmljaWFsIGN1cmwgd2ViIHBhZ2UgdG8gaHR0cDovL2N1cmwuaGF4eC5udS4gSSB0aGluayBpdAogICB3aWxsIG1ha2UgaXQgZWFzaWVyIHRvIHJlbWVtYmVyIGFzIGl0IGlzIGEgbG90IHNob3J0ZXIgYW5kIGxlc3MgY3J5cHRpYy4KICAgVGhlIG9sZCBvbmUgc3RpbGwgd29ya3MgYW5kIHNob3dzIHRoZSBzYW1lIGluZm8uCgogRGFuaWVsICgxMSBBdWd1c3QgMTk5OSkKIC0gQWxiZXJ0IENoaW4tQS1Zb3VuZyBtYWlsZWQgbWUgYW5vdGhlciBjb3JyZWN0aW9uIGZvciBOUk9GRiBpbiB0aGUKICAgY29uZmlndXJlLmluIHRoYXQgaXMgc3VwcG9zZWQgdG8gYmUgYmV0dGVyIGZvciBJUklYIHVzZXJzLgoKIERhbmllbCAoMTAgQXVndXN0IDE5OTkpCiAtIEFsYmVydCBDaGluLUEtWW91bmcgaGVscGVkIG1lIHdpdGggc29tZSBzdHVwaWQgTWFrZWZpbGUgdGhpbmdzLCBhcyB3ZWxsIGFzCiAgIHNvbWUgZmlkZGxpbmcgd2l0aCB0aGUgZ2V0ZGF0ZS5jIHN0dWZmIHRoYXQgaGUgaGFkIHByb2JsZW1zIHdpdGggdW5kZXIKICAgSFAtVVggdjEwLiBnZXRkYXRlLnkgd2lsbCBub3cgYmUgY29tcGlsZWQgaW50byBnZXRkYXRlLmMgaWYgdGhlIGFwcHJvcHJpYXRlCiAgIHlhY2Mgb3IgYmlzb24gaXMgZm91bmQgYnkgdGhlIGNvbmZpZ3VyZSBzY3JpcHQuIFNpbmNlIHRoaXMgaXMgc2xpZ2h0bHkgbmV3LAogICB3ZSBuZWVkIHRvIHRlc3QgdGhlIG91dHB1dCBnZXRkYXRlLmMgd2l0aCB3aW4zMiBzeXN0ZW1zIHRvIG1ha2Ugc3VyZSBpdAogICBzdGlsbCBjb21waWxlcyB0aGVyZS4KCiBEYW5pZWwgKDUgQXVndXN0IDE5OTkpCiAtIEkndmUganVzdCBzZXR1cCBhIG5ldyBtYWlsaW5nIGxpc3Qgd2l0aCB0aGUgaW50ZW50aW9uIHRvIGtlZXAgZGlzY3Vzc2lvbnMKICAgYXJvdW5kIGxpYmN1cmwgZGV2ZWxvcG1lbnQgaW4gaXQuIEkgbWFpbmx5IGV4cGVjdCBpdCB0byBiZSBmb3IgdGhvdWdodHMgYW5kCiAgIGJyYWluc3Rvcm1pbmcgYXJvdW5kIGEgIm5leHQgZ2VuZXJhdGlvbiIgbGlicmFyeSwgcmF0aGVyIHRoYW4gbml0cGlja2luZwogICBhYm91dCB0aGUgY3VycmVudCBpbXBsZW1lbnRhdGlvbiBvciBkZXRhaWxzIGluIHRoZSBjdXJyZW50IGxpYmN1cmwuCgogICBUbyBqb2luIG91ciBoYXBweSBidW5jaCBvZiBmdXR1cmUtbG9va2luZyBnZWVrcywgZW50ZXIgJ3N1YnNjcmliZQogICA8YWRkcmVzcz4nIGluIHRoZSBib2R5IG9mIGEgbWFpbCBhbmQgc2VuZCBpdCB0bwogICBsaWJjdXJsLXJlcXVlc3RAbGlzdHNlcnYuZnRzLmZyb250ZWMuc2UuICBDdXJsIGJ1ZyByZXBvcnRzLCB0aGUgdXN1YWwgY3VybAogICB0YWxrIGFuZCBldmVyeXRoaW5nIGVsc2Ugc2hvdWxkIHN0aWxsIGJlIGtlcHQgaW4gdGhpcyBtYWlsaW5nIGxpc3QuIEkndmUKICAgc3RhcnRlZCB0byBhcmNoaXZlIHRoaXMgbWFpbGluZyBsaXN0IGFuZCBoYXZlIHB1dCB0aGUgbGliY3VybCB3ZWIgcGFnZSBhdAogICB3d3cuZnRzLmZyb250ZWMuc2UvfmRhc3QvbGliY3VybC8uCgogLSBTdGVmYW4gS2FudGhhayBjb250YWN0ZWQgbWUgcmVnYXJkaW5nIGEgZmV3IHByb2JsZW1zIGluIHRoZSBjb25maWd1cmUKICAgc2NyaXB0IHdoaWNoIGhlIGRpc2NvdmVyZWQgd2hlbiB0cnlpbmcgdG8gbWFrZSBjdXJsIGNvbXBpbGUgYW5kIGJ1aWxkIHVuZGVyCiAgIFNpZW1lbnMgU0lOSVgtWiBWNS40MkIyMDA0IQoKIC0gTWFyY3VzIEtsZWluIHZlcnkgYWNjdXJhdGVseSBpbmZvcm1lZCBtZSB0aGF0IHNyYy92ZXJzaW9uLmggd2FzIG5vdCBwcmVzZW50CiAgIGluIHRoZSBDVlMgcmVwb3NpdG9yeS4gT2gsIGhvdyBzaWxseS4uLgoKIC0gTGludXMgTmllbHNlbiByZXdyb3RlIHRoZSB0ZWxuZXQ6Ly8gcGFydCBhbmQgbm93IGN1cmwgb2ZmZXJzIGxpbWl0ZWQgdGVsbmV0CiAgIHN1cHBvcnQuIElmIHlvdSBydW4gY3VybCBsaWtlICdjdXJsIHRlbG5ldDovL2hvc3QnIHlvdSdsbCBnZXQgYWxsIG91dHB1dCBvbgogICB0aGUgc2NyZWVuIGFuZCBjdXJsIHdpbGwgcmVhZCBpbnB1dCBmcm9tIHN0ZGluLiBZb3UnbGwgYmUgYWJsZSB0byBsb2dpbiBhbmQKICAgcnVuIGNvbW1hbmRzIGV0YywgYnV0IHNpbmNlIHRoZSBvdXRwdXQgaXMgYnVmZmVyZWQsIGV4cGVjdCB0byBnZXQgYSBsaXR0bGUKICAgd2VpcmQgb3V0cHV0LgoKICAgVGhpcyBpcyBzdGlsbCBpbiBpdHMgaW5mYW5jeSBhbmQgaXQgbWlnaHQgZ2V0IGNoYW5nZWQuIFdlIG5lZWQgeW91cgogICBmZWVkLWJhY2sgYW5kIGlucHV0IGluIGhvdyB0aGlzIGlzIGJlc3QgZG9uZS4KCiAgIFdJTjMyIE5PVEU6IEkgYmV0IHdlJ2xsIGdldCBwcm9ibGVtcyB3aGVuIHRyeWluZyB0byBjb21waWxlIHRoZSBjdXJyZW50CiAgIGxpYi90ZWxuZXQuYyBvbiB3aW4zMiwgYnV0IEkgdGhpbmsgd2UgY2FuIHNvcnQgdGhlbSBvdXQgaW4gdGltZS4KCiAtIERhdmlkIFNhbmRlcnNvbiByZXBvcnRlZCB0aGF0IEZPUkNFX0FMTE9DQV9IIG9yIEhBVkVfQUxMT0NBX0ggbXVzdCBiZQogICBkZWZpbmVkIGZvciBnZXRkYXRlLmMgdG8gY29tcGlsZSBwcm9wZXJseSBvbiBIUC1VWCAxMS4wLiBJIHVwZGF0ZWQgdGhlCiAgIGNvbmZpZ3VyZSBzY3JpcHQgdG8gY2hlY2sgZm9yIGFsbG9jYS5oIHdoaWNoIHNob3VsZCBtYWtlIGl0LgoKIERhbmllbCAoNCBBdWd1c3QgMTk5OSkKIC0gSSBmaW5hbGx5IGdvdCB0byB1bmRlcnN0YW5kIE1hcmN1cyBLbGVpbidzIGZ0cCBkb3dubG9hZCByZXN1bWUgcHJvYmxlbSwKICAgd2hpY2ggdHVybnMgb3V0IHRvIGJlIGR1ZSB0byBkaWZmZXJlbnQgb3V0cHV0cyBmcm9tIGRpZmZlcmVudCBmdHAKICAgc2VydmVycy4gSXQgbWFrZXMgZnRwIGRvd25sb2FkIHJlc3VtaW5nIGEgbGl0dGxlIHRyaWNraWVyLCBidXQgSSd2ZSBtYWRlCiAgIHNvbWUgbW9kaWZpY2F0aW9ucyBJIHJlYWxseSBiZWxpZXZlIHdpbGwgd29yayBmb3IgbW9zdCBmdHAgc2VydmVycyBhbmQgSSBkbwogICBob3BlIHlvdSByZXBvcnQgaWYgeW91IGhhdmUgcHJvYmxlbXMgd2l0aCB0aGlzIQoKIC0gQWRkZWQgdGV4dCBhYm91dCBmaWxlIHRyYW5zZmVyIHJlc3VtaW5nIHRvIFJFQURNRS5jdXJsLgoKIERhbmllbCAoMiBBdWd1c3QgMTk5OSkKIC0gQXBwbGllZCBhIHByb2dyZXNzLWJhciBwYXRjaCBmcm9tIExhcnMgSi4gQWFzLiBJdCBvZmZlcnMKICAgYSBuZXcgc3R5bGVkIHByb2dyZXNzIGJhciBlbmFibGVkIHdpdGggLSMvLS1wcm9ncmVzcy1iYXIuIAoKIFQuIFlhbWFkYSA8dGFpIGF0IGltYXN5Lm9yLmpwPiAoMzAgSnVseSAxOTk5KQogLSBJdCBicmVha3Mgd2l0aCBzZWdmYXVsdCB3aGVuIDEpIGN1cmwgaXMgdXNpbmcgLm5ldHJjIHRvIG9idGFpbgogICB1c2VybmFtZS9wYXNzd29yZCAob3B0aW9uICctbicpLCBhbmQgMikgaXMgYXV0b21hdGljYWxseSByZWRpcmVjdGVkIHRvCiAgIGFub3RoZXIgbG9jYXRpb24gKG9wdGlvbiAnLUwnKS4KCiAgIFRoZXJlIGlzIGEgc21hbGwgYnVnIGluIGxpYi91cmwuYyAoYmxvY2sgc3RhcnRpbmcgZnJvbSBsaW5lIDY0MSksIHdoaWNoCiAgIHRyaWVzIHRvIHRha2Ugb3V0IHVzZXJuYW1lL3Bhc3N3b3JkIGZyb20gdXNlci0gc3VwcGxpZWQgY29tbWFuZC1saW5lCiAgIGFyZ3VtZW50ICgnLXUnIG9wdGlvbikuIFRoaXMgYmxvY2sgaXMgbmV2ZXIgZXhlY3V0ZWQgb24gZmlyc3QgYXR0ZW1wdCBzaW5jZQogICBDT05GX1VTRVJQV0QgYml0IGlzbid0IHNldCBhdCBmaXJzdCwgYnV0IGN1cmwgbGF0ZXIgdHVybnMgaXQgb24gd2hlbiBpdAogICBjaGVja3MgZm9yIENPTkZfTkVUUkMgYml0LiBTbyB3aGVuIGN1cmwgdHJpZXMgdG8gcmVkbyBldmVyeXRoaW5nIGR1ZSB0bwogICByZWRpcmVjdGlvbiwgaXQgc2VnZmF1bHRzIHRyeWluZyB0byBhY2Nlc3MgKmRhdGEtPnVzZXJwd2QuCgpWZXJzaW9uIDUuOS4xCgogRGFuaWVsICgzMCBKdWx5IDE5OTkpCiAtIFN0ZXZlIFdhbGNoIHBvaW50ZWQgb3V0IHRoYXQgdGhlcmUgaXMgYSBtZW1vcnkgbGVhayBpbiB0aGUgZm9ybWRhdGEKICAgZnVuY3Rpb25zLiBJIGFkZGVkIGEgRm9ybUZyZWUoKSBmdW5jdGlvbiB0aGF0IGlzIG5vdyB1c2VkIGFuZCBzdXBwb3NlZCB0bwogICBjb3JyZWN0IHRoaXMgZmxhdy4KCiAtIE1hcmsgV290dG9uIHJlcG9ydGVkOgogICAnY3VybCAtTCBodHRwczovL3d3dy5jd2EuY29tLmF1LycgY29yZSBkdW1wcy4gIEkgbWFuYWdlZCB0byBjdXJlIHRoaXMgYnkKICAgY29ycmVjdGluZyB0aGUgY2xlYW51cCBwcm9jZWR1cmUuIFRoZSBidWcgc2VlbXMgdG8gYmUgZ29uZSB3aXRoIG15IE9wZW5TU0wKICAgMC45LjJiLCBhbHRob3VnaCBzdGlsbCBvY2N1cnMgd2hlbiBJIHJ1biB0aGUgfjEwMCB5ZWFycyBvbGQgU1NMZWF5IDAuOC4wLiBJCiAgIGRvbid0IGtub3cgd2hldGhlciBpdCBpcyBjdXJsIG9yIFNTTGVheSB0aGF0IGlzIHRvIGJsYW1lIGZvciB0aGF0LgoKIC0gTWFyY3VzIEtsZWluOgogICBSZXBvcnRlZCBhbiBGVFAgdXBsb2FkIHJlc3VtZSBidWcgdGhhdCBJIHJlYWxseSBjYW4ndCByZXBlYXQgbm9yIHVuZGVyc3RhbmQuCiAgIEkgbGVhdmUgaXQgaGVyZSBzbyB0aGF0IGl0IHdvbid0IGJlIGZvcmdvdHRlbi4KCiBEYW5pZWwgKDI5IEp1bHkgMTk5OSkKIC0gQ29zdHlhIFNodWx5dXBpbiBzdWdnZXN0ZWQgc3VwcG9ydCBmb3IgbG9uZ2VyIFVSTHMgd2hlbiBmb2xsb3dpbmcgTG9jYXRpb246CiAgIGFuZCBJIGNvdWxkIG9ubHkgYWdyZWUgYW5kIGZpeCBpdCEKCiAtIExlaWdoIFB1cmRpZSBmb3VuZCBhIHByb2JsZW0gaW4gdGhlIHVwbG9hZC9QT1NUIGRlcGFydG1lbnQuIEl0IHR1cm5lZCBvdXQKICAgdGhhdCBodHRwLmMgYWNjaWRlbnRhbHkgY2xlYXJlZCB0aGUgcG9pbnRlciBpbnN0ZWFkIG9mIHRoZSBieXRlIGNvdW50ZXIKICAgd2hlbiBzdXBwb3NlZCB0by4KCiAtIENvc3R5YSBTaHVseXVwaW4gcG9pbnRlZCBvdXQgYSBwcm9ibGVtIHdpdGggcG9ydCBudW1iZXJzIGFuZCBMb2NhdGlvbjouIElmCiAgIHlvdSBoYWQgYSBzZXJ2ZXIgYXQgYSBub24tc3RhbmRhcmQgcG9ydCB0aGF0IHJlZGlyZWN0ZWQgdG8gYW4gVVJMIHVzaW5nIGEKICAgc3RhbmRhcmQgcG9ydCBudW1iZXIsIGN1cmwgc3RpbGwgdXNlZCB0aGF0IGZpcnN0IHBvcnQgbnVtYmVyLgoKIC0gUmFscGggQmVja21hbm4gcG9pbnRlZCBvdXQgYSBwcm9ibGVtIHdoZW4gdXNpbmcgYm90aCBDT05GX0ZPTExPV0xPQ0FUSU9OCiAgIGFuZCBDT05GX0ZBSUxPTkVSUk9SIHNpbXVsdGFuZW91c2x5LiBTaW5jZSB0aGUgQ09ORl9GQUlMT05FUlJPUiBleGl0cyBvbgogICB0aGUgMzAyLWNvZGUgdGhhdCB0aGUgZm9sbG93IGxvY2F0aW9uIGhlYWRlciBvdXRwdXRzIGl0IHdpbGwgbmV2ZXIgc2hvdyBhbnkKICAgaHRtbCBvbiBsb2NhdGlvbjogcGFnZXMuIEkgaGF2ZSBub3cgbWFkZSBpdCBsb29rIGZvciA+PTQwMCBjb2RlcyBpZgogICBDT05GX0ZPTExPV0xPQ0FUSU9OIGlzIHNldC4KCiAtICdzdHJ1Y3Qgc2xpc3QnIGlzIG5vdyByZW5hbWVkIHRvICdzdHJ1Y3QgY3VybF9zbGlzdCcgKGFzIHN1Z2dlc3RlZCBieSBSYWxwaAogICBCZWNrbWFubikuCgogLSBKb3NodWEgU3dpbmsgYW5kIFJpY2sgV2VseWtvY2h5IHdlcmUgdGhlIGZpcnN0IHRvIHBvaW50IG91dCB0byBtZSB0aGF0IHRoZQogICBsYXRlc3QgT3BlblNTTCBwYWNrYWdlIG5vdyBoYXZlIG1vdmVkIHRoZSBzdGFuZGFyZCBpbmNsdWRlIHBhdGguIEl0IGlzIG5vdwogICBpbiAvdXNyL2xvY2FsL3NzbC9pbmNsdWRlL29wZW5zc2wgYW5kIEkgaGF2ZSBub3cgbW9kaWZpZWQgdGhlIC0tZW5hYmxlLXNzbAogICBvcHRpb24gZm9yIHRoZSBjb25maWd1cmUgc2NyaXB0IHRvIHVzZSB0aGF0IGFzIHRoZSBwcmltYXJ5IHBhdGgsIGFuZCBJCiAgIGxlYXZlIHRoZSBmb3JtZXIgcGF0aCB0b28gdG8gd29yayB3aXRoIG9sZGVyIHBhY2thZ2VzIG9mIE9wZW5TU0wgdG9vLgoKIERhbmllbCAoOSBKdW5lIDE5OTkpCiAtIEkgZmluYWxseSB1bmRlcnN0b29kIHRoZSBJUklYIHByb2JsZW0gYW5kIG5vdyBpdCBzZWVtIHRvIGNvbXBpbGUgb24gaXQhCiAgIEkgYW0gZ29ubmEgcmVtb3ZlIHRob3NlICNkZWZpbmUgc3RyY2FzZWNtcCgpIHRoaW5ncyBvbmNlIGFuZCBmb3IgYWxsIG5vdy4KCiBEYW5pZWwgKDQgSnVuZSAxOTk5KQogLSBJIGFkanVzdGVkIHRoZSBGVFAgcmVwbHkgMjI3IHBhcnNlciB0byBtYWtlIHRoZSBQQVNWIGNvbW1hbmQgd29yayBiZXR0ZXIKICAgd2l0aCBtb3JlIGZ0cCBzZXJ2ZXJzLiBBcHBlYXJhbnRseSB0aGUgUm94ZW4gQ2hhbGxhbmdlciBzZXJ2ZXIgcmVwbGllZAogICBzb21ldGhpbmcgY3VybCA1LjkgY291bGQgZGVhbCB3aXRoISA6LSggUmVwb3J0ZWQgYnkgQXNobGV5IFJlaWQtTW9udGFuYXJvCiAgIGFuZCBNYXJrIEJ1dGxlciBicm91Z2h0IGEgc29sdXRpb24gZm9yIGl0LgoKIERhbmllbCAoMjYgTWF5IDE5OTkpCiAtIFJlYXJyYW5nZWQuIFJFQURNRSBpcyBuZXcsIHRoZSBvbGQgb25lIGlzIG5vdyBSRUFETUUuY3VybCBhbmQgSSBhZGRlZCBhCiAgIFJFQURNRS5saWJjdXJsIHdpdGggdGV4dCBJIGdvdCBmcm9tIFJhbHBoIEJlY2ttYW5uLgoKIC0gSSBhbHNvIHVwZGF0ZWQgdGhlIElOU1RBTEwgdGV4dC4KCiBEYW5pZWwgKDI1IE1heSAxOTk5KQogLSBEYXZpZCBKb25hdGhhbiBMb3dza3kgY29ycmVjdGx5IHBvaW50ZWQgb3V0IHRoYXQgY3VybCBkaWRuJ3QgcHJvcGVybHkgZGVhbAogICB3aXRoIGZvcm0gcG9zdGluZyB3aGVyZSB0aGUgdmFyaWFibGUgc2hvdWxkbid0IGhhdmUgYW55IGNvbnRlbnQsIGFzIGluIGN1cmwKICAgLUYgImZvcm09IiB3d3cuc2l0ZS5jb20uIEl0IHdhcyBub3cgZml4ZWQuCgpWZXJzaW9uIDUuOQoKIERhbmllbCAoMjIgTWF5IDE5OTkpCiAtIEkndmUgZ290IGEgYnVnIHJlcG9ydCBmcm9tIEFhcm9uIFNjYXJpc2JyaWNrIGluIHdoaWNoIGhlIHN0YXRlcyBoZSBoYXMgc29tZQogICBwcm9ibGVtcyB3aXRoIC1MIHVuZGVyIEZyZWVCU0QgMy4wLiBJIGhhdmUgcHJldmlvdXNseSBnb3QgYW5vdGhlciBidWcKICAgcmVwb3J0IGZyb20gU3RlZmFuIEdyZXRoZXIgd2hpY2ggcG9pbnRzIGF0IGFuIGVycm9yIHdpdGggc2ltaWxhciBzeW1wdGhvbXMKICAgd2hlbiB1c2luZyB3aW4zMi4gSSBtYWRlIHRoZSBhbGxvY2F0aW9uIG9mIHRoZSBuZXcgdXJsIHN0cmluZyBhIGJpdCBmYXN0ZXIKICAgYW5kIGRpZmZlcmVudCwgZG9uJ3Qga25vdyBpZiBpdCBhY3R1YWxseSBpbXByb3ZlcyBhbnl0aGluZyB0aG91Z2guLi4KCiBEYW5pZWwgKDIwIE1heSAxOTk5KQogLSBNYWRlIHRoZSBjb29raWUgcGFyc2VyIGRlYWwgd2l0aCBDUkxGIG5ld2xpbmVzIHRvby4KCiBEYW5pZWwgKDE5IE1heSAxOTk5KQogLSBEb3dubG9hZCgpIGRpZG4ndCBwcm9wZXJseSBkZWFsIHdpdGggZmFpbGluZyByZXR1cm4gY29kZXMgZnJvbSB0aGUgc3JlYWQoKQogICBmdW5jdGlvbi4gQWRhbSBDb3luZSBmb3VuZCB0aGUgcHJvYmxlbSBpbiB0aGUgd2luMzIgdmVyc2lvbiwgYW5kIFRyb3kgRW5nZWwKICAgaGVscGVkIG1lIG91dCBpc29sYXRpbmcgaXQuCgogRGFuaWVsICgxNiBNYXkgMTk5OSkKIC0gUmljaGFyZCBBZGFtcyBwb2ludGVkIG91dCBhIGJ1ZyBJIGludHJvZHVjZWQgaW4gNS44LiAtLWR1bXAtaGVhZGVyIGRvZXNuJ3QKICAgd29yayBhbnltb3JlISA6LS8gSSBmaXhlZCBpdCBub3cuCgogLSBBZnRlciBhIHN1Z2dlc3Rpb24gYnkgSm9zaHVhIFN3aW5rIEkgYWRkZWQgLVMgLyAtLXNob3ctZXJyb3IgdG8gZm9yY2UgY3VybAogICB0byBkaXNwbGF5IHRoZSBlcnJvciBtZXNzYWdlIGluIGNhc2Ugb2YgYW4gZXJyb3IsIGV2ZW4gaWYgLXMvLS1zaWxlbnQgd2FzCiAgIHVzZWQuCgogRGFuaWVsICgxMCBNYXkgMTk5OSkKIC0gSSBtb3ZlZCB0aGUgc3R1ZmYgY29uY2VybmluZyBIVFRQLCBESUNUIGFuZCBURUxORVQgaXQgdGhlaXIgb3duIHNvdXJjZQogICBmaWxlcyBub3cuIEl0IGlzIGEgYmVnaW5uaW5nIG9uIG15IGNsZWFuLXVwIG9mIHRoZSBzb3VyY2VzIHRvIG1ha2UgdGhlbQogICBsYXllciBhbGwgdGhvc2UgcHJvdG9jb2xzIGJldHRlciB0byBlbmFibGUgbW9yZSB0byBiZSBhZGRlZCBlYXNpZXIgaW4gdGhlCiAgIGZ1dHVyZSEKCiAtIExlb24gQnJlZWR0IHNlbnQgbWUgc29tZSBmaWxlcyBJJ3ZlIG5vdCBwdXQgaW50byB0aGUgbWFpbiBjdXJsCiAgIGFyY2hpdmUuIFRoZXkncmUgZm9yIGNyZWF0aW5nIHRoZSBEZWJpYW4gcGFja2FnZSB0aGluZ2llLiBIZSBhbHNvIHNlbnQgbWUgYQogICBkZWJpYW4gcGFja2FnZSB0aGF0IEkndmUgbWFkZSBhdmFpbGFibGUgZm9yIGRvd25sb2FkIGF0IHRoZSB3ZWIgcGFnZQoKIERhbmllbCAoOSBNYXkgMTk5OSkKIC0gTWFkZSBpdCBjb21waWxlIG9uIGN5Z3dpbiB0b28uCgogVHJveSBFbmdlbCAoNyBNYXkgMTk5OSkKIC0gQnJvdWdodCBhIHNlcmllcyBvZiBwYXRjaGVzIHRvIGFsbG93IGN1cmwgdG8gY29tcGlsZSBzbW9vdGhseSBvbiBNU1ZDKysgNgogICBhZ2FpbiEKCiBEYW5pZWwgKDYgTWF5IDE5OTkpCiAtIEkgY2hhbmdlZCB0aGUgI2lmZGVmIEhBVkVfU1RSRlRJTUUgcGxhY2VtZW50IGZvciB0aGUgLXogY29kZSBzbyB0aGF0IGl0CiAgIHdpbGwgYmUgZWFzaWVyIHRvIGRpc2NvdmVyIHN5c3RlbXMgdGhhdCBkb24ndCBoYXZlIHRoYXQgZnVuY3Rpb24gYW5kIHRodXMKICAgY2FuJ3QgdXNlIC16IHN1Y2Nlc3NmdWxseS4gTWFkZSB0aGUgc3RyZnRpbWUoKSBnZXQgdXNlZCBpZiBXSU4zMiBpcyBkZWZpbmVkCiAgIHRvby4KClZlcnNpb24gNS44CgogRGFuaWVsICg1IE1heSAxOTk5KQogLSBJJ3ZlIGhhZCBpdCB3aXRoIHRoaXMgYXV0b2NvbmYvYXV0b21ha2UgbWVzcy4gSXQgc2VlbXMgdG8gd29yayBhbGxyaWdodAogICBmb3IgbW9zdCBwZW9wbGUgd2hvIGRvbid0IGhhdmUgYXV0b21ha2UgaW5zdGFsbGVkLCBidXQgZm9yIHRob3NlIHdobyBoYXZlCiAgIHRoZXJlIGFyZSBwcm9ibGVtcyBhbGwgb3Zlci4KCiAgIEkndmUgZ290IGxpa2UgZml2ZSBkaWZmZXJlbnQgYnVnIHJlcG9ydHMgb24gdGhpcyBvbmx5IHRoZSBsYXN0CiAgIHdlZWsuLi4gQ2xhdWRpbyBOZXZlcyBhbmQgRmVkZXJpY28gQmlhbmNoaSBhbmQgcm9vdCA8ZHVnZ2VyajAwMSBhdAogICBoYXdhaWkucnIuY29tPiBhcmUgc29tZSBvZiB0aGVtIHJlcG9ydGluZyB0aGlzLgoKICAgQ3VycmVudGx5LCBJIGhhdmUgbm8gcmVhbGx5IGdvb2QgZml4IHNpbmNlIEkgd2FudCB0byB1c2UgYXV0b21ha2UgbXlzZWxmIHRvCiAgIGdlbmVyYXRlIHRoZSBNYWtlZmlsZS5pbiBmaWxlcy4gSSd2ZSBmb3VuZCBvdXQgdGhhdCB0aGUgQFNIRUxMQC1wcm9ibGVtcwogICBjYW4gb2Z0ZW4gYmUgZml4ZWQgYnkgbWFudWFsbHkgaW52b2tpbmcgJ2F1dG9tYWtlJyBpbiB0aGUgYXJjaGl2ZSByb290CiAgIGJlZm9yZSB5b3UgcnVuIC4vY29uZmlndXJlLi4uIEkndmUgaGFja2VkIG15IG1ha2V0Z3ogc2NyaXB0IG5vdyB0byBmaWRkbGUKICAgYSBiaXQgd2l0aCB0aGlzIGFuZCBteSB0ZXN0cyBzZWVtIHRvIHdvcmsgYmV0dGVyIHRoYW4gYmVmb3JlIGF0IGxlYXN0IQoKIERhbmllbCAoNCBNYXkgMTk5OSkKIC0gbWtoZWxwLnBsIGhhcyBiZWVuIGRvaW5nIGJhZGx5IGxhdGVseS4gSSBjb3JyZWN0ZWQgYSBjYXNlIHByb2JsZW0gaW4KICAgdGhlIHJlZ2V4ZXMuCgogLSBJJ3ZlIG5vdyByZW1hZGUgdGhlIC1vIG9wdGlvbiB0byBub3QgdG91Y2ggdGhlIGZpbGUgdW5sZXNzIGl0IG5lZWRzIHRvLgogICBJIGhhZCB0byBkbyB0aGlzIHRvIG1ha2UgLXogb3B0aW9uIHJlYWxseSBmaW5lLCBzaW5jZSBub3cgeW91IGNhbiBtYWtlIGEKICAgY3VybCBmZXRjaCBhbmQgdXNlIGEgbG9jYWwgY29weSdzIHRpbWUgd2hlbiBkb3dubG9hZGluZyB0byB0aGF0IGZpbGUsIGFzCiAgIGluOgoKICAgICAgICBjdXJsIC16IGR1bXAgLW8gZHVtcCByZW1vdGUuc2l0ZS5jb20vZmlsZS5odG1sCgogICBUaGlzIHdpbGwgb25seSBnZXQgdGhlIGZpbGUgaWYgdGhlIHJlbW90ZSBvbmUgaXMgbmV3ZXIgdGhhbiB0aGUgbG9jYWwuCiAgIEknbSBhd2FyZSB0aGF0IHRoaXMgYWx0ZXJzIHByZXZpb3VzIGJlaGF2aW91ciBhIGxpdHRsZS4gU29tZSBzY3JpcHRzIG91dAogICB0aGVyZSBtYXkgZGVwZW5kIG9uIHRoYXQgdGhlIGZpbGUgaXMgYWx3YXlzIHRvdWNoZWQuLi4KCiAtIENvcnJlY3RlZCBhIGJ1ZyBpbiB0aGUgU1NMdjIvdjMgc2VsZWN0aW9uLgoKIC0gRmVsaXggdm9uIExlaXRuZXIgcmVxdWVzdGVkIHRoYXQgY3VybCBzaG91bGQgYmUgYWJsZSB0byBzZW5kCiAgICJJZi1Nb2RpZmllZC1TaW5jZSIgaGVhZGVycywgd2hpY2ggaW5kZWVkIGlzIGEgZmFpciBpZGVhLiAgSSBpbXBsZW1lbnRlZCBpdAogICByaWdodCBhd2F5ISBUcnkgLXogPGV4cHJlc3Npb24+IHdoZXJlIGV4cHJlc3Npb24gaXMgYSBmdWxsIEdOVSBkYXRlCiAgIGV4cHJlc3Npb24gb3IgYSBmaWxlIG5hbWUgdG8gZ2V0IHRoZSBkYXRlIGZyb20hCgogU3RlcGhhbiBMYWdlcmhvbG0gKDMwIEFwciAxOTk5KQogLSBQb2ludGVkIG91dCBhIHByb2JsZW0gd2l0aCB0aGUgc3JjL01ha2VmaWxlIGZvciBGcmVlQlNELiBUaGUgUk0gdmFyaWFibGUKICAgaXNuJ3Qgc2V0IGFuZCBjYXVzZXMgdGhlIG1ha2UgdG8gZmFpbC4KCiBEYW5pZWwgKDI2IEFwcmlsIDE5OTkpCiAtIEFtIEkgc2lsbHkgb3Igd2hhdD8gSXJ2aW5nIFdvbGZlIHBvaW50ZWQgb3V0IHRvIG1lIHRoYXQgdGhlIGN1cmwgdmVyc2lvbgogICBudW1iZXIgd2FzIG5vdCBzZXQgcHJvcGVybHkuIEhhc24ndCBiZWVuIHNpbmNlIDUuNi4gVGhpcyB3YXMgZHVlIHRvIGEgYnVnCiAgIGluIG15IG1ha2V0Z3ogc2NyaXB0IQoKIERhdmlkIEVyaWtzc29uICgyNSBBcHIgMTk5OSkKIC0gRm91bmQgYSBidWcgaW4gY29va2llcy5jIHRoYXQgbWFkZSBpdCBjcmFzaCBhdCB0aW1lcy4KClZlcnNpb24gNS43LjEKCiBEb3VnIEthdWZtYW4gKDIzIEFwciAxOTk5KQogLSBCcm91Z2h0IHR3byBzdW5vcyA0IGZpeGVzLiBPbmUgb2YgdGhlbSBiZWluZyB0aGUgaG9zdGlwLmMgZml4IG1lbnRpb25lZAogICBiZWxvdyBhbmQgdGhlIG90aGVyIG9uZSBhIGNvcnJlY3Rpb24gaW4gaW5jbHVkZS9zdGRjaGVhZGVycy5oCgogLSBBZGRlZCBhIHBhcmFncmFwaCBhYm91dCBjb21waWxpbmcgd2l0aCB0aGUgVVMtdmVyc2lvbiBvZiBvcGVuc3NsIHRvIHRoZQogICBJTlNUQUxMIGZpbGUuCgogRGFuaWVsCiAtIE5ldyBtYWlsaW5nIGxpc3QgYWRkcmVzcy4gSW5mbyB1cGRhdGVkIG9uIHRoZSB3ZWIgcGFnZSBhcyB3ZWxsIGFzIGluIHRoZQogICBSRUFETUUgZmlsZQoKIEdyZWcgT251ZmVyICgyMCBBcHIgMTk5OSkKIC0gaG9zdGlwLmMgZGlkbid0IGNvbXBpbGUgcHJvcGVybHkgb24gU3VuT1MgNS41LjEuCiAgIEl0IG5lZWRzIGFuICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KClZlcnNpb24gNS43CgogRGFuaWVsIChBcHIgMjAgMTk5OSkKIC0gRGVjaWRlZCB0byB1cGxvYWQgYSBub24tYmV0YSB2ZXJzaW9uIHJpZ2h0IG5vdyEKCiAtIE1hZGUgY3VybCBzdXBwb3J0IGFueS1sZW5ndGggSFRUUCBoZWFkZXJzLiBUaGUgZGVzdGluYXRpb24gYnVmZmVyIGlzIG5vdwogICBzaW1wbHkgZW5sYXJnZWQgZXZlcnkgdGltZSBpdCB0dXJucyBvdXQgdG8gYmUgdG9vIHNtYWxsIQoKIC0gQWRkZWQgdGhlIEZBUSBmaWxlIHRvIHRoZSBhcmNoaXZlLiBTdGlsbCBhIGJpdCBzbWFsbGlzaCwgYnV0IGl0IGlzIGEKICAgc3RhcnQuCgogRXJpYyBUaGVsaW4gKDE1IEFwciAxOTk5KQogLSBNYWRlIC1EIGFjY2VwdCAnLScgaW5zdGVhZCBvZiBmaWxlbmFtZSB0byB3cml0ZSB0byBzdGRvdXQuCgpWZXJzaW9uIDUuNi4zYmV0YQoKIERhbmllbCAoQXByIDEyIDE5OTkpCgogLSBDaGFuZ2VkIHR3byAjaWZkZWYgV0lOMzIgdG8gYmV0dGVyICNpZmRlZiA8ZXJyb3Jjb2RlPiB3aGVuIGNvbm5lY3QoKWluZwogICBpbiB1cmwuYyBhbmQgZnRwLmMuIE1ha2VzIGN5Z3dpbjMyIGRlYWwgd2l0aCB0aGVtIGJldHRlciB0b28uIFdlIHNob3VsZAogICB0cnkgdG8gZ2V0IHNvbWUgZGVjZW50IHdpbjMyLXJlcGxhY2VtZW50IHRoZXJlLiBBbnlvbmU/CgogLSBUaGUgb2xkIC0zLy0tY3JsZiBvcHRpb24gaXMgbm93IE9OTFkgLS1jcmxmIQoKIC0gSSBjaGFuZ2VkIHRoZSAiU1NMIGZpeCIgdG8gYSBtb3JlIGxhbWUgb25lLCBidXQgdGhhdCBkb2Vzbid0IHJlbW92ZSBhcwogICBtdWNoIGZ1bmN0aW9uYWxpdHkuIE5vdyBJJ3ZlIGVuYWJsZWQgdGhlIGxpYiB0byBzZWxlY3Qgd2hhdCBTU0wgdmVyc2lvbiBpdAogICBzaG91bGQgdHJ5IGZpcnN0LiBBcHBlYXJhbnRseSBzb21lIG9sZGVyIFNTTC1zZXJ2ZXJzIGRvbid0IGxpa2Ugd2hlbiB5b3UKICAgdGFsayB2MyB3aXRoIHRoZW0gc28geW91IG5lZWQgdG8gYmUgYWJsZSB0byBmb3JjZSBjdXJsIHRvIHRhbGsgdjIgZnJvbSB0aGUKICAgc3RhcnQuIFRoZSBmaXggZGF0ZWQgQXByaWwgNiBhbmQgcG9zdGVkIG9uIHRoZSBtYWlsaW5nIGxpc3QgZm9yY2VkIGN1cmwgdG8KICAgdXNlIHYyIGF0IGFsbCB0aW1lcyB1c2luZyBhIG1vZGVybiBPcGVuU1NMIHZlcnNpb24sIGJ1dCB3ZSBkb24ndCByZWFsbHkKICAgd2FudCBzdWNoIGEgY3JpcHBsZWQgc29sdXRpb24uCiAKIC0gTWFyYyBCb3VjaGVyIHNlbnQgbWUgYSBwYXRjaCB0aGF0IGNvcnJlY3RlZCBhIG1hdGggZXJyb3IgZm9yIHRoZQogICAiQ3Vyci5TcGVlZCIgcHJvZ3Jlc3MgbWV0ZXIuCgogLSBFcmljIFRoZWxpbiBzZW50IG1lIGEgcGF0Y2ggdGhhdCBlbmFibGVzICctSyAtJyB0byByZWFkIGEgY29uZmlnIGZpbGUgZnJvbQogICBzdGRpbi4KCiAtIEkgZm91bmQgb3V0IHdlIGRpZG4ndCBjbG9zZSB0aGUgZmlsZSBwcm9wZXJseSBiZWZvcmUgc28gSSBhZGRlZCBpdCEKCiBEYW5pZWwgKEFwciA5IDE5OTkpCiAtIFl1IFhpbiBwb2ludGVkIG91dCBhIHByb2JsZW0gd2l0aCBmdHAgZG93bmxvYWQgcmVzdW1lLiAgSXQgZGlkbid0IHdvcmsgYXQKICAgYWxsISA7LU8KCiBEYW5pZWwgKEFwciA2IDE5OTkpCiAtIENvcnJlY3RlZCB0aGUgdmVyc2lvbiBzdHJpbmcgcGFydCBnZW5lcmF0ZWQgZm9yIHRoZSBTU0wgdmVyc2lvbi4KCiAtIEkgZm91bmQgYSB3YXkgdG8gbWFrZSBzb21lIG90aGVyIFNTTCBwYWdlIHdvcmsgd2l0aCBvcGVuc3NsIDAuOS4xKyB0aGF0CiAgIHByZXZpb3VzbHkgZGlkbid0IChzc2xlYXkgMC44LjAgd29ya3Mgd2l0aCBpdCB0aG91Z2ghKS4gVHJ5aW5nIHRvIGdldAogICBzb21lIHJlYWwgaW5mbyBmcm9tIHRoZSBPcGVuU1NMIGd1eXMgdG8gc2VlIGhvdyBJIHNob3VsZCBkbyB0byBiZWhhdmUgdGhlCiAgIGJlc3Qgd2F5LiBTU0xlYXkgMC44LjAgc2hvdWxkbid0IGJlIHRoYXQgbXVjaCBpbiB1c2UgYW55d2F5IHRoZXNlIGRheXMhCgpWZXJzaW9uIDUuNi4yYmV0YQoKIERhbmllbCAoQXByIDQgMTk5OSkKIC0gRmluYWxseSBoYXZlIGN1cmwgbW9yZSBjb29raWUgImF3YXJlIi4gTm93IHJlYWQgY2FyZWZ1bGx5LiBUaGlzIGlzIGhvdwogICBpdCB3b3Jrcy4KICAgVG8gbWFrZSBjdXJsIHJlYWQgY29va2llcyBmcm9tIGFuIGFscmVhZHkgZXhpc3RpbmcgZmlsZSwgaW4gcGxhaW4gaGVhZGVyLQogICBmb3JtYXQgKGxpa2UgZnJvbSB0aGUgaGVhZGVycyBvZiBhIHByZXZpb3VzIGZldGNoKSBpbnZva2UgY3VybCB3aXRoIHRoZQogICAtYiBmbGFnIGxpa2U6CgogICAgICAgIGN1cmwgLWIgZmlsZSBodHRwOi8vc2l0ZS9mb28uaHRtbAoKICAgQ3VybCB3aWxsIHRoZW4gdXNlIGFsbCBjb29raWVzIGl0IGZpbmRzIG1hdGNoaW5nLiBUaGUgb2xkIHN0eWxlIHRoYXQgc2V0cwogICBhIHNpbmdsZSBjb29raWUgd2l0aCAtYiBpcyBzdGlsbCBzdXBwb3J0ZWQgYW5kIGlzIHVzZWQgaWYgdGhlIHN0cmluZwogICBmb2xsb3dpbmcgLWIgaW5jbHVkZXMgYSAnPScgbGV0dGVyLCBhcyBpbiAiLWIgbmFtZT1kYW5pZWwiLgoKICAgVG8gbWFrZSBjdXJsIHJlYWQgdGhlIGNvb2tpZXMgc2VudCBpbiBjb21iaW5hdGlvbiB3aXRoIGEgbG9jYXRpb246ICh3aGljaAogICBzaXRlcyBvZnRlbiBkbykgcG9pbnQgY3VybCB0byByZWFkIGEgbm9uLWV4aXN0aW5nIGZpbGUgYXQgZmlyc3QgKGkuZQogICB0byBzdGFydCB3aXRoIG5vIGV4aXN0aW5nIGNvb2tpZXMpLCBsaWtlOgoKICAgICAgICBjdXJsIC1iIG5vd2hlcmUgaHR0cDovL3NpdGUvc2V0Y29va2llYW5kcmVsb2NhdGUuaHRtbAoKIC0gQWRkZWQgYSBwYXJhZ3JhcGggaW4gdGhlIFRPRE8gZmlsZSBhYm91dCB0aGUgU1NMIHByb2JsZW1zIHJlY2VudGx5CiAgIHJlcG9ydGVkLiBFdmlkZW50bHksIHNvbWUga2luZCBvZiBTU0wtcHJvYmxlbSBjdXJsIG1heSBuZWVkIHRvIGFkZHJlc3MuCgogLSBCZXR0ZXIgIkxvY2F0aW9uOiIgZm9sbG93aW5nLgoKIERvdWdsYXMgRS4gV2Vnc2NoZWlkIChUdWUsIDMwIE1hciAxOTk5KQogLSBBIHN1YnNlY29uZCBkaXNwbGF5IHBhdGNoLgoKIERhbmllbCAoTWFyIDE0IDE5OTkpCiAtIEkndmUgc2VwYXJhdGVkIHRoZSB2ZXJzaW9uIG51bWJlciBvZiBsaWJjdXJsIGFuZCBjdXJsIG5vdy4gVG8gbWFrZQogICB0aGluZ3MgYSBsaXR0bGUgZWFzaWVyLCBJIGRlY2lkZWQgdG8gc3RhcnQgdGhlIGN1cmwgbnVtYmVyaW5nIGZyb20KICAgNS42IGFuZCB0aGUgZm9ybWVyIHZlcnNpb24gbnVtYmVyIGtub3duIGFzICJjdXJsIiBpcyBub3cgdGhlIG9uZQogICBzZXQgZm9yIGxpYmN1cmwuCgogLSBSZW1vdmVkIHRoZSAnZW5hYmxlLW5vLXBhc3MnIGZyb20gY29uZmlndXJlLCBJIGRvdWJ0IGFueW9uZSB3YW50ZWQKICAgdGhhdC4KCiAtIE1hZGUgbG90cyBvZiB0aW55IGFkanVzdG1lbnRzIHRvIGNvbXBpbGUgc21vb3RobHkgd2l0aCBjeWd3aW4gdW5kZXIKICAgd2luMzIuIEl0J3MgYSBraWxsZXIgZm9yIHBvcnRpbmcgdGhpcyB0byB3aW4zMiwgYnllIGJ5ZSBWQysrISA7LSkKICAgQ29tcGlsZXMgYW5kIGJ1aWxkcyBvdXQtb2YtdGhlLWJveCBub3cuIFNlZSB0aGUgbmV3IHdvcmRpbmdzIGluCiAgIElOU1RBTEwgZm9yIGRldGFpbHMuCgogLSBCZWdpbm5pbmcgZXhwZXJpbWVudHMgd2l0aCBkb3dubG9hZGluZyBtdWx0aXBsZSBkb2N1bWVudCBmcm9tIGEgaHR0cAogICBzZXJ2ZXIgd2hpbGUgcmVtYWluaW5nIGNvbm5lY3RlZC4KClZlcnNpb24gNS42YmV0YQoKIERhbmllbCAoTWFyIDEzIDE5OTkpCiAtIFNpbmNlIEkndmUgY2hhbmdlZCBzbyBtdWNoLCBJIHRob3VnaHQgSSdkIGp1c3QgZ28gYWhlYWQgYW5kIGltcGxlbWVudCB0aGUKICAgc3VnZ2VzdGlvbiBmcm9tIERvdWdsYXMgRS4gV2Vnc2NoZWlkLiAtRCBvciAtLWR1bXAtaGVhZGVyIGlzIG5vdyBzdG9yaW5nCiAgIEhUVFAgaGVhZGVycyBzZXBhcmF0ZWx5IGluIHRoZSBzcGVjaWZpZWQgZmlsZS4KCiAtIEFkZGVkIG5ldyB0ZXh0IHRvIElOU1RBTEwgb24gd2hhdCB0byBkbyB0byBidWlsZCB0aGlzIG9uIHdpbjMyIG5vdy4KCiAtIEFhYXJnaC4gSSBoYWQgdG8gdGFrZSBhIHN0ZXAgYmFjayBhbmQgcHJlZml4IHRoZSBzaGFyZWQgI2luY2x1ZGUgZmlsZXMKICAgaW4gdGhlIHNvdXJjZXMgd2l0aCAiLi4vaW5jbHVkZS8iIHRvIHBsZWFzZSBWQysrLi4uCgogRGFuaWVsIChNYXIgMTIgMTk5OSkKIC0gU3BsaXQgdGhlIHVybC5jIHNvdXJjZSBpbnRvIG1hbnkgdGlueSBzb3VyY2VzIGZvciBiZXR0ZXIgcmVhZGFiaWxpdHkKICAgYW5kIHNtYWxsZXIgc2l6ZS4KCiBEYW5pZWwgKE1hciAxMSAxOTk5KQogLSBTdGFydGVkIHRvIGNoYW5nZSBzdHVmZiBmb3IgYSBtb3ZlIHRvIG1ha2UgbGliY3VybCBhbmQgYSBtb3JlIHNlcGFyYXRlCiAgIGN1cmwgYXBwbGljYXRpb24gdGhhdCB1c2VzIHRoZSBsaWJjdXJsLiBNYWRlIHRoZSBsaWJjdXJsIHNvdXJjZXMgaW50bwogICB0aGUgbmV3IGxpYiBkaXJlY3Rvcnkgd2hpbGUgdGhlIGN1cmwgYXBwbGljYXRpb24gd2lsbCByZW1haW4gaW4gc3JjIGFzCiAgIGJlZm9yZS4gTmV3IG1ha2VmaWxlcywgYWRqdXN0ZWQgY29uZmlndXJlIHNjcmlwdCBhbmQgc28uCgogICBsaWJjdXJsLmEgYnVpbHQgcXVpY2tseSBhbmQgZWFzaWx5LiBJIGJldHRlciBtYWtlIGEgYmV0dGVyIGludGVyZmFjZSB0bwogICB0aGUgbGliIGZ1bmN0aW9ucyB0aG91Z2guCgogICBUaGUgbmV3IHJvb3QgZGlyIGluY2x1ZGUvIGlzIHN1cHBvc2VkIHRvIGNvbnRhaW4gdGhlIHB1YmxpYyBpbmZvcm1hdGlvbgogICBhYm91dCB0aGUgbmV3IGxpYmN1cmwuIEl0IGlzIGEgbGl0dGxlIHVnbHkgc28gZmFyIDotKQoKCiBEYW5pZWwgKE1hciAxIDE5OTkpCiAtIFRvZGQgS2F1Zm1hbm4gc2VudCBtZSBhIGdvb2QgbGluayB0byBOZXRzY2FwZSdzIGNvb2tpZSBzcGVjIGFzIHdlbGwgYXMgdGhlCiAgIGluZm8gdGhhdCBSRkMgMjEwOSBzcGVjaWZpZXMgaG93IHRvIHVzZSB0aGVtLiAgVGhlIGxpbmsgaXMgbm93IGluIHRoZQogICBSRUFETUUgYW5kIHRoZSBSRkMgaW4gdGhlIFJFU09VUkNFUy4KCiBEYW5pZWwgKEZlYiAyMyAxOTk5KQogLSBGaW5hbGx5IG1hZGUgY29uZmlndXJlIGFjY2VwdCAtLXdpdGgtc3NsIHRvIGxvb2sgZm9yIFNTTCBsaWJzIGFuZCBpbmNsdWRlcwogICBpbiB0aGUgInN0YW5kYXJkIiBwbGFjZSAvdXNyL2xvY2FsL3NzbC4uLgoKIERhbmllbCAoRmViIDIyIDE5OTkpCiAtIFZlcmlmaWVkIHRoYXQgY3VybCBsaW5rZWQgZmluZSB3aXRoIE9wZW5TU0wgMC45LjFjIHdoaWNoIHNlZW1zIHRvIGJlCiAgIHRoZSBtb3N0IHJlY2VudC4KCiBIZW5yaSBHb21leiAoRnJpIEZlYiAgNSAxOTk5KQogLSBTZW50IGluIGFuIHVwZGF0ZWQgY3VybC1zc2wuc3BlYy4gSSBzdGlsbCBtaXNzIHRoZSBzY3JpcHQgdGhhdCBidWlsZHMgYW4KICAgUlBNIGF1dG9tYXRpY2FsbHkuLi4KClZlcnNpb24gNS41LjEKCiBNYXJrIEJ1dGxlciAoMjcgSmFuIDE5OTkpCiAtIENvcnJlY3RlZCBwcm9ibGVtcyBpbiBEb3dubG9hZCgpLgoKIERhbml0ZWwgU3RlbmJlcmcgKDI1IEphbiAxOTk5KQogLSBKZXJlbWllIFBldGl0IHBvaW50ZWQgb3V0IGEgZmV3IGZsYXdzIGluIHRoZSBzb3VyY2UgdGhhdCBwcmV2ZW50ZWQgaXQgZnJvbQogICBjb21waWxlIHdhcm5pbmcgZnJlZSB3aXRoIHRoZSBuYXRpdmUgY29tcGlsZXIgdW5kZXIgRGlnaXRhbCBVbml4IHY0LjBkLgoKVmVyc2lvbiA1LjUKCiBEYW5pZWwgU3RlbmJlcmcgKDE1IEphbiAxOTk5KQogLSBBZGRlZCBCam9ybnMgc21hbGwgdGV4dCB0byB0aGUgUkVBRE1FIGFib3V0IHRoZSBESUNUIHByb3RvY29sLgoKIERhbmllbCBTdGVuYmVyZyAoMTEgSmFuIDE5OTkpCiAtIDxqc3dpbmsgYXQgc29mdGNvbS5uZXQ+IHJlcG9ydGVkIGFib3V0IHRoZSB3aW4zMi12ZXJzaW9pbjogIkRvZXNuJ3QgdXNlCiAgIEFMTF9QUk9YWSBlbnZpcm9ubWVudCB2YXJpYWJsZSIuIFR1cm5lZCBvdXQgdG8gYmUgYmVjYXVzZSBvZiB0aGUgc3RhdGljLQogICBidWZmZXIgbmF0dXJlIG9mIHRoZSB3aW4zMiBlbnZpcm9ubWVudCB2YXJpYWJsZSBjYWxscyEKCiBCam9ybiBSZWVzZSAoMTAgSmFuIDE5OTkpCiAtIEkgaGF2ZSBhdHRhY2hlZCBhIHNpbXBsZSBhZGRpdGlvbiBmb3IgdGhlIERJQ1QgcHJvdG9jb2wgKFJGQyAyMjI5KS4KICAgSXQgcGVyZm9ybXMgZGljdGlvbmFyeSBsb29rdXBzLiBUaGUgb3V0cHV0IHN0aWxsIG5lZWRzIHRvIGJlIGJldHRlcgogICBmb3JtYXR0ZWQuCgogICBUbyB0ZXN0IGl0IHRyeSAodGhlIGV4YWN0IGZvcm1hdCwgYW5kIG1vcmUgZXhhbXBsZXMgYXJlIGRlc2NyaWJlZCBpbgogICB0aGUgUkZDKQoKICAgICAgICBkaWN0Oi8vZGljdC5vcmcvbTpoZWxsbwogICAgICAgIGRpY3Q6Ly9kaWN0Lm9yZy9tOmhlbGxvOjpzb3VuZGV4CgoKIFZpY2VudGUgR2FyY2lhICgxMCBKYW4gMTk5OSkKIC0gQ29ycmVjdGVkIHRoZSBwcm9ncmVzcyBtZXRlciBmb3IgZmlsZXMgbGFyZ2VyIHRoYW4gMjBNQi4KCiBEYW5pZWwgU3RlbmJlcmcgKDcgSmFuIDE5OTkpCiAtIENvcnJlY3RlZCB0aGUgLXQgYW5kIC1UIGhlbHAgdGV4dHMuIFRoZXkgY2xhaW1lZCB0byBiZSBGVFAgb25seS4KClZlcnNpb24gNS40CgogRGFuaWVsIFN0ZW5iZXJnCiAoNyBKYW4gMTk5OSkKIC0gSXJ2aW5nIFdvbGZlIHJlcG9ydGVkIHRoYXQgY3VybCAtcyBkaWRuJ3QgYWx3YXlzIHN1cHJlc3MgdGhlIHByb2dyZXNzCiAgIHJlcG9ydGluZy4gSXQgd2FzIHRoZSBmb3JtIHBvc3QgdGhhdCBhdXRvYW10aWNhbGx5IGFsd2F5cyBzd2l0Y2hlZCBpdCBvbgogICBhZ2Fpbi4gVGhpcyBpcyBub3cgY29ycmVjdGVkIQoKICg0IEphbiAxOTk5KQogLSBBbmRyZWFzIEtvc3R5cmthIHN1Z2dlc3RlZCBJJ2QgYWRkIFBVVCBhbmQgaGUgaGVscGVkIG1lIG91dCB0byB0ZXN0IGl0LiBJZgogICB5b3UgdXNlIC10IG9yIC1UIG5vdyBvbiBhIGh0dHAgb3IgaHR0cHMgc2VydmVyLCBQVVQgd2lsbCBiZSB1c2VkIGZvciBmaWxlCiAgIHVwbG9hZC4KCiAgIEkgcmVtb3ZlZCB0aGUgZm9ybWVyIHVzZSBvZiAtVCB3aXRoIEhUVFAuIEkgZG91YnQgYW55b25lIGV2ZXIgcmVhbGx5IHVzZWQKICAgdGhhdC4KCiAoNCBKYW4gMTk5OSkKIC0gRXJpayBKYWNvYnNlbiBmb3VuZCBhIHdpZHRoIGJ1ZyBpbiB0aGUgbXByaW50ZigpIGZ1bmN0aW9uLiAgSSBjb3JyZWN0ZWQgaXQKICAgbm93LgoKICg0IEphbiAxOTk5KQogLSBBcyBKb2huIFYuIENob3cgcG9pbnRlZCBvdXQgdG8gbWUsIGN1cmwgYWNjZXB0ZWQgdmVyeSBsaW1pdGVkIFVSTCBzaXplcy4gSXQKICAgc2hvdWxkIG5vdyBhY2NlcHQgcGF0aCBwYXJ0cyB0aGF0IGFyZSB1cCB0byBhdCBsZWFzdCA0MDk2IGJ5dGVzLgoKIC0gU29tZWhvdyBJIHNjcmV3ZWQgdXAgd2hlbiBhcHBseWluZyB0aGUgQUlYIGZpeCBmcm9tIEdpbGJlcnQgUmFtaXJleiwgc28KICAgSSByZWRpZCB0aGF0IG5vdy4KCg==