KnNwZWxsLnR4dCoJRm9yIFZpbSB2ZXJzaW9uIDguMC4gIExhc3QgY2hhbmdlOiAyMDE2IEphbiAwOAoKCgkJICBWSU0gUkVGRVJFTkNFIE1BTlVBTAkgIGJ5IEJyYW0gTW9vbGVuYWFyCgoKU3BlbGwgY2hlY2tpbmcJCQkJCQkqc3BlbGwqCgoxLiBRdWljayBzdGFydAkJCXxzcGVsbC1xdWlja3N0YXJ0fAoyLiBSZW1hcmtzIG9uIHNwZWxsIGNoZWNraW5nCXxzcGVsbC1yZW1hcmtzfAozLiBHZW5lcmF0aW5nIGEgc3BlbGwgZmlsZQl8c3BlbGwtbWtzcGVsbHwKNC4gU3BlbGwgZmlsZSBmb3JtYXQJCXxzcGVsbC1maWxlLWZvcm1hdHwKCntWaSBkb2VzIG5vdCBoYXZlIGFueSBvZiB0aGVzZSBjb21tYW5kc30KClNwZWxsIGNoZWNraW5nIGlzIG5vdCBhdmFpbGFibGUgd2hlbiB0aGUgfCtzeW50YXh8IGZlYXR1cmUgaGFzIGJlZW4gZGlzYWJsZWQKYXQgY29tcGlsZSB0aW1lLgoKTm90ZTogVGhlcmUgYWxzbyBpcyBhIHZpbXNwZWxsIHBsdWdpbi4gIElmIHlvdSBoYXZlIGl0IHlvdSBjYW4gZG8gIjpoZWxwCnZpbXNwZWxsIiB0byBmaW5kIGFib3V0IGl0LiAgQnV0IHlvdSB3aWxsIHByb2JhYmx5IHdhbnQgdG8gZ2V0IHJpZCBvZiB0aGUKcGx1Z2luIGFuZCB1c2UgdGhlICdzcGVsbCcgb3B0aW9uIGluc3RlYWQsIGl0IHdvcmtzIGJldHRlci4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBRdWljayBzdGFydAkJCQkJKnNwZWxsLXF1aWNrc3RhcnQqICpFNzU2KgoKVGhpcyBjb21tYW5kIHN3aXRjaGVzIG9uIHNwZWxsIGNoZWNraW5nOiA+CgoJOnNldGxvY2FsIHNwZWxsIHNwZWxsbGFuZz1lbl91cwoKVGhpcyBzd2l0Y2hlcyBvbiB0aGUgJ3NwZWxsJyBvcHRpb24gYW5kIHNwZWNpZmllcyB0byBjaGVjayBmb3IgVVMgRW5nbGlzaC4KClRoZSB3b3JkcyB0aGF0IGFyZSBub3QgcmVjb2duaXplZCBhcmUgaGlnaGxpZ2h0ZWQgd2l0aCBvbmUgb2YgdGhlc2U6CglTcGVsbEJhZAl3b3JkIG5vdCByZWNvZ25pemVkCQkJfGhsLVNwZWxsQmFkfAoJU3BlbGxDYXAJd29yZCBub3QgY2FwaXRhbGlzZWQJCQl8aGwtU3BlbGxDYXB8CglTcGVsbFJhcmUJcmFyZSB3b3JkCQkJCXxobC1TcGVsbFJhcmV8CglTcGVsbExvY2FsCXdyb25nIHNwZWxsaW5nIGZvciBzZWxlY3RlZCByZWdpb24JfGhsLVNwZWxsTG9jYWx8CgpWaW0gb25seSBjaGVja3Mgd29yZHMgZm9yIHNwZWxsaW5nLCB0aGVyZSBpcyBubyBncmFtbWFyIGNoZWNrLgoKSWYgdGhlICdtb3VzZW1vZGVsJyBvcHRpb24gaXMgc2V0IHRvICJwb3B1cCIgYW5kIHRoZSBjdXJzb3IgaXMgb24gYSBiYWRseQpzcGVsbGVkIHdvcmQgb3IgaXQgaXMgInBvcHVwX3NldHBvcyIgYW5kIHRoZSBtb3VzZSBwb2ludGVyIGlzIG9uIGEgYmFkbHkKc3BlbGxlZCB3b3JkLCB0aGVuIHRoZSBwb3B1cCBtZW51IHdpbGwgY29udGFpbiBhIHN1Ym1lbnUgdG8gcmVwbGFjZSB0aGUgYmFkCndvcmQuICBOb3RlOiB0aGlzIHNsb3dzIGRvd24gdGhlIGFwcGVhcmFuY2Ugb2YgdGhlIHBvcHVwIG1lbnUuICBOb3RlIGZvciBHVEs6CmRvbid0IHJlbGVhc2UgdGhlIHJpZ2h0IG1vdXNlIGJ1dHRvbiB1bnRpbCB0aGUgbWVudSBhcHBlYXJzLCBvdGhlcndpc2UgaXQKd29uJ3Qgd29yay4KClRvIHNlYXJjaCBmb3IgdGhlIG5leHQgbWlzc3BlbGxlZCB3b3JkOgoKCQkJCQkJCSpdcyoKXXMJCQlNb3ZlIHRvIG5leHQgbWlzc3BlbGxlZCB3b3JkIGFmdGVyIHRoZSBjdXJzb3IuCgkJCUEgY291bnQgYmVmb3JlIHRoZSBjb21tYW5kIGNhbiBiZSB1c2VkIHRvIHJlcGVhdC4KCQkJJ3dyYXBzY2FuJyBhcHBsaWVzLgoKCQkJCQkJCSpbcyoKW3MJCQlMaWtlICJdcyIgYnV0IHNlYXJjaCBiYWNrd2FyZHMsIGZpbmQgdGhlIG1pc3NwZWxsZWQKCQkJd29yZCBiZWZvcmUgdGhlIGN1cnNvci4gIERvZXNuJ3QgcmVjb2duaXplIHdvcmRzCgkJCXNwbGl0IG92ZXIgdHdvIGxpbmVzLCB0aHVzIG1heSBzdG9wIGF0IHdvcmRzIHRoYXQgYXJlCgkJCW5vdCBoaWdobGlnaHRlZCBhcyBiYWQuICBEb2VzIG5vdCBzdG9wIGF0IHdvcmQgd2l0aAoJCQltaXNzaW5nIGNhcGl0YWwgYXQgdGhlIHN0YXJ0IG9mIGEgbGluZS4KCgkJCQkJCQkqXVMqCl1TCQkJTGlrZSAiXXMiIGJ1dCBvbmx5IHN0b3AgYXQgYmFkIHdvcmRzLCBub3QgYXQgcmFyZQoJCQl3b3JkcyBvciB3b3JkcyBmb3IgYW5vdGhlciByZWdpb24uCgoJCQkJCQkJKltTKgpbUwkJCUxpa2UgIl1TIiBidXQgc2VhcmNoIGJhY2t3YXJkcy4KCgpUbyBhZGQgd29yZHMgdG8geW91ciBvd24gd29yZCBsaXN0OgoKCQkJCQkJCSp6ZyoKemcJCQlBZGQgd29yZCB1bmRlciB0aGUgY3Vyc29yIGFzIGEgZ29vZCB3b3JkIHRvIHRoZSBmaXJzdAoJCQluYW1lIGluICdzcGVsbGZpbGUnLiAgQSBjb3VudCBtYXkgcHJlY2VkZSB0aGUgY29tbWFuZAoJCQl0byBpbmRpY2F0ZSB0aGUgZW50cnkgaW4gJ3NwZWxsZmlsZScgdG8gYmUgdXNlZC4gIEEKCQkJY291bnQgb2YgdHdvIHVzZXMgdGhlIHNlY29uZCBlbnRyeS4KCgkJCUluIFZpc3VhbCBtb2RlIHRoZSBzZWxlY3RlZCBjaGFyYWN0ZXJzIGFyZSBhZGRlZCBhcyBhCgkJCXdvcmQgKGluY2x1ZGluZyB3aGl0ZSBzcGFjZSEpLgoJCQlXaGVuIHRoZSBjdXJzb3IgaXMgb24gdGV4dCB0aGF0IGlzIG1hcmtlZCBhcyBiYWRseQoJCQlzcGVsbGVkIHRoZW4gdGhlIG1hcmtlZCB0ZXh0IGlzIHVzZWQuCgkJCU90aGVyd2lzZSB0aGUgd29yZCB1bmRlciB0aGUgY3Vyc29yLCBzZXBhcmF0ZWQgYnkKCQkJbm9uLXdvcmQgY2hhcmFjdGVycywgaXMgdXNlZC4KCgkJCUlmIHRoZSB3b3JkIGlzIGV4cGxpY2l0bHkgbWFya2VkIGFzIGJhZCB3b3JkIGluCgkJCWFub3RoZXIgc3BlbGwgZmlsZSB0aGUgcmVzdWx0IGlzIHVucHJlZGljdGFibGUuCgoJCQkJCQkJKnpHKgp6RwkJCUxpa2UgInpnIiBidXQgYWRkIHRoZSB3b3JkIHRvIHRoZSBpbnRlcm5hbCB3b3JkIGxpc3QKCQkJfGludGVybmFsLXdvcmRsaXN0fC4KCgkJCQkJCQkqencqCnp3CQkJTGlrZSAiemciIGJ1dCBtYXJrIHRoZSB3b3JkIGFzIGEgd3JvbmcgKGJhZCkgd29yZC4KCQkJSWYgdGhlIHdvcmQgYWxyZWFkeSBhcHBlYXJzIGluICdzcGVsbGZpbGUnIGl0IGlzCgkJCXR1cm5lZCBpbnRvIGEgY29tbWVudCBsaW5lLiAgU2VlIHxzcGVsbGZpbGUtY2xlYW51cHwKCQkJZm9yIGdldHRpbmcgcmlkIG9mIHRob3NlLgoKCQkJCQkJCSp6VyoKelcJCQlMaWtlICJ6dyIgYnV0IGFkZCB0aGUgd29yZCB0byB0aGUgaW50ZXJuYWwgd29yZCBsaXN0CgkJCXxpbnRlcm5hbC13b3JkbGlzdHwuCgp6dXcJCQkJCQkJKnp1ZyogKnp1dyoKenVnCQkJVW5kbyB8end8IGFuZCB8emd8LCByZW1vdmUgdGhlIHdvcmQgZnJvbSB0aGUgZW50cnkgaW4KCQkJJ3NwZWxsZmlsZScuICBDb3VudCB1c2VkIGFzIHdpdGggfHpnfC4KCnp1VwkJCQkJCQkqenVHKiAqenVXKgp6dUcJCQlVbmRvIHx6V3wgYW5kIHx6R3wsIHJlbW92ZSB0aGUgd29yZCBmcm9tIHRoZSBpbnRlcm5hbAoJCQl3b3JkIGxpc3QuICBDb3VudCB1c2VkIGFzIHdpdGggfHpnfC4KCgkJCQkJCQkqOnNwZSogKjpzcGVsbGdvb2QqCjpbY291bnRdc3BlW2xsZ29vZF0ge3dvcmR9CgkJCUFkZCB7d29yZH0gYXMgYSBnb29kIHdvcmQgdG8gJ3NwZWxsZmlsZScsIGxpa2Ugd2l0aAoJCQl8emd8LiAgV2l0aG91dCBjb3VudCB0aGUgZmlyc3QgbmFtZSBpcyB1c2VkLCB3aXRoIGEKCQkJY291bnQgb2YgdHdvIHRoZSBzZWNvbmQgZW50cnksIGV0Yy4KCjpzcGVbbGxnb29kXSEge3dvcmR9CUFkZCB7d29yZH0gYXMgYSBnb29kIHdvcmQgdG8gdGhlIGludGVybmFsIHdvcmQgbGlzdCwKCQkJbGlrZSB3aXRoIHx6R3wuCgoJCQkJCQkJKjpzcGVsbHcqICo6c3BlbGx3cm9uZyoKOltjb3VudF1zcGVsbHdbcm9uZ10ge3dvcmR9CgkJCUFkZCB7d29yZH0gYXMgYSB3cm9uZyAoYmFkKSB3b3JkIHRvICdzcGVsbGZpbGUnLCBhcwoJCQl3aXRoIHx6d3wuICBXaXRob3V0IGNvdW50IHRoZSBmaXJzdCBuYW1lIGlzIHVzZWQsIHdpdGgKCQkJYSBjb3VudCBvZiB0d28gdGhlIHNlY29uZCBlbnRyeSwgZXRjLgoKOnNwZWxsd1tyb25nXSEge3dvcmR9CUFkZCB7d29yZH0gYXMgYSB3cm9uZyAoYmFkKSB3b3JkIHRvIHRoZSBpbnRlcm5hbCB3b3JkCgkJCWxpc3QsIGxpa2Ugd2l0aCB8eld8LgoKOltjb3VudF1zcGVsbHVbbmRvXSB7d29yZH0JCQkJKjpzcGVsbHUqICo6c3BlbGx1bmRvKgoJCQlMaWtlIHx6dXd8LiAgW2NvdW50XSB1c2VkIGFzIHdpdGggfDpzcGVsbGdvb2R8LgoKOnNwZWxsdVtuZG9dISB7d29yZH0JTGlrZSB8enVXfC4gIFtjb3VudF0gdXNlZCBhcyB3aXRoIHw6c3BlbGxnb29kfC4KCgpBZnRlciBhZGRpbmcgYSB3b3JkIHRvICdzcGVsbGZpbGUnIHdpdGggdGhlIGFib3ZlIGNvbW1hbmRzIGl0cyBhc3NvY2lhdGVkCiIuc3BsIiBmaWxlIHdpbGwgYXV0b21hdGljYWxseSBiZSB1cGRhdGVkIGFuZCByZWxvYWRlZC4gIElmIHlvdSBjaGFuZ2UKJ3NwZWxsZmlsZScgbWFudWFsbHkgeW91IG5lZWQgdG8gdXNlIHRoZSB8Om1rc3BlbGx8IGNvbW1hbmQuICBUaGlzIHNlcXVlbmNlIG9mCmNvbW1hbmRzIG1vc3RseSB3b3JrcyB3ZWxsOiA+Cgk6ZWRpdCA8ZmlsZSBpbiAnc3BlbGxmaWxlJz4KPAkobWFrZSBjaGFuZ2VzIHRvIHRoZSBzcGVsbCBmaWxlKSA+Cgk6bWtzcGVsbCEgJQoKTW9yZSBkZXRhaWxzIGFib3V0IHRoZSAnc3BlbGxmaWxlJyBmb3JtYXQgYmVsb3cgfHNwZWxsLXdvcmRsaXN0LWZvcm1hdHwuCgoJCQkJCQkJKmludGVybmFsLXdvcmRsaXN0KgpUaGUgaW50ZXJuYWwgd29yZCBsaXN0IGlzIHVzZWQgZm9yIGFsbCBidWZmZXJzIHdoZXJlICdzcGVsbCcgaXMgc2V0LiAgSXQgaXMKbm90IHN0b3JlZCwgaXQgaXMgbG9zdCB3aGVuIHlvdSBleGl0IFZpbS4gIEl0IGlzIGFsc28gY2xlYXJlZCB3aGVuICdlbmNvZGluZycKaXMgc2V0LgoKCkZpbmRpbmcgc3VnZ2VzdGlvbnMgZm9yIGJhZCB3b3JkczoKCQkJCQkJCSp6PSoKej0JCQlGb3IgdGhlIHdvcmQgdW5kZXIvYWZ0ZXIgdGhlIGN1cnNvciBzdWdnZXN0IGNvcnJlY3RseQoJCQlzcGVsbGVkIHdvcmRzLiAgVGhpcyBhbHNvIHdvcmtzIHRvIGZpbmQgYWx0ZXJuYXRpdmVzCgkJCWZvciBhIHdvcmQgdGhhdCBpcyBub3QgaGlnaGxpZ2h0ZWQgYXMgYSBiYWQgd29yZCwKCQkJZS5nLiwgd2hlbiB0aGUgd29yZCBhZnRlciBpdCBpcyBiYWQuCgkJCUluIFZpc3VhbCBtb2RlIHRoZSBoaWdobGlnaHRlZCB0ZXh0IGlzIHRha2VuIGFzIHRoZQoJCQl3b3JkIHRvIGJlIHJlcGxhY2VkLgoJCQlUaGUgcmVzdWx0cyBhcmUgc29ydGVkIG9uIHNpbWlsYXJpdHkgdG8gdGhlIHdvcmQgYmVpbmcKCQkJcmVwbGFjZWQuCgkJCVRoaXMgbWF5IHRha2UgYSBsb25nIHRpbWUuICBIaXQgQ1RSTC1DIHdoZW4geW91IGdldAoJCQlib3JlZC4KCgkJCUlmIHRoZSBjb21tYW5kIGlzIHVzZWQgd2l0aG91dCBhIGNvdW50IHRoZQoJCQlhbHRlcm5hdGl2ZXMgYXJlIGxpc3RlZCBhbmQgeW91IGNhbiBlbnRlciB0aGUgbnVtYmVyCgkJCW9mIHlvdXIgY2hvaWNlIG9yIHByZXNzIDxFbnRlcj4gaWYgeW91IGRvbid0IHdhbnQgdG8KCQkJcmVwbGFjZS4gIFlvdSBjYW4gYWxzbyB1c2UgdGhlIG1vdXNlIHRvIGNsaWNrIG9uIHlvdXIKCQkJY2hvaWNlIChvbmx5IHdvcmtzIGlmIHRoZSBtb3VzZSBjYW4gYmUgdXNlZCBpbiBOb3JtYWwKCQkJbW9kZSBhbmQgd2hlbiB0aGVyZSBhcmUgbm8gbGluZSB3cmFwcykuICBDbGljayBvbiB0aGUKCQkJZmlyc3QgbGluZSAodGhlIGhlYWRlcikgdG8gY2FuY2VsLgoKCQkJVGhlIHN1Z2dlc3Rpb25zIGxpc3RlZCBub3JtYWxseSByZXBsYWNlIGEgaGlnaGxpZ2h0ZWQKCQkJYmFkIHdvcmQuICBTb21ldGltZXMgdGhleSBpbmNsdWRlIG90aGVyIHRleHQsIGluIHRoYXQKCQkJY2FzZSB0aGUgcmVwbGFjZWQgdGV4dCBpcyBhbHNvIGxpc3RlZCBhZnRlciBhICI8Ii4KCgkJCUlmIGEgY291bnQgaXMgdXNlZCB0aGF0IHN1Z2dlc3Rpb24gaXMgdXNlZCwgd2l0aG91dAoJCQlwcm9tcHRpbmcuICBGb3IgZXhhbXBsZSwgIjF6PSIgYWx3YXlzIHRha2VzIHRoZSBmaXJzdAoJCQlzdWdnZXN0aW9uLgoKCQkJSWYgJ3ZlcmJvc2UnIGlzIG5vbi16ZXJvIGEgc2NvcmUgd2lsbCBiZSBkaXNwbGF5ZWQKCQkJd2l0aCB0aGUgc3VnZ2VzdGlvbnMgdG8gaW5kaWNhdGUgdGhlIGxpa2VsaW5lc3MgdG8gdGhlCgkJCWJhZGx5IHNwZWxsZWQgd29yZCAodGhlIGhpZ2hlciB0aGUgc2NvcmUgdGhlIG1vcmUKCQkJZGlmZmVyZW50KS4KCQkJV2hlbiBhIHdvcmQgd2FzIHJlcGxhY2VkIHRoZSByZWRvIGNvbW1hbmQgIi4iIHdpbGwKCQkJcmVwZWF0IHRoZSB3b3JkIHJlcGxhY2VtZW50LiAgVGhpcyB3b3JrcyBsaWtlICJjaXciLAoJCQl0aGUgZ29vZCB3b3JkIGFuZCA8RXNjPi4gIFRoaXMgZG9lcyBOT1Qgd29yayBmb3IgVGhhaQoJCQlhbmQgb3RoZXIgbGFuZ3VhZ2VzIHdpdGhvdXQgc3BhY2VzIGJldHdlZW4gd29yZHMuCgoJCQkJCSo6c3BlbGxyKiAqOnNwZWxscmVwYWxsKiAqRTc1MiogKkU3NTMqCjpzcGVsbHJbZXBhbGxdCQlSZXBlYXQgdGhlIHJlcGxhY2VtZW50IGRvbmUgYnkgfHo9fCBmb3IgYWxsIG1hdGNoZXMKCQkJd2l0aCB0aGUgcmVwbGFjZWQgd29yZCBpbiB0aGUgY3VycmVudCB3aW5kb3cuCgpJbiBJbnNlcnQgbW9kZSwgd2hlbiB0aGUgY3Vyc29yIGlzIGFmdGVyIGEgYmFkbHkgc3BlbGxlZCB3b3JkLCB5b3UgY2FuIHVzZQpDVFJMLVggcyB0byBmaW5kIHN1Z2dlc3Rpb25zLiAgVGhpcyB3b3JrcyBsaWtlIEluc2VydCBtb2RlIGNvbXBsZXRpb24uICBVc2UKQ1RSTC1OIHRvIHVzZSB0aGUgbmV4dCBzdWdnZXN0aW9uLCBDVFJMLVAgdG8gZ28gYmFjay4gfGlfQ1RSTC1YX3N8CgpUaGUgJ3NwZWxsc3VnZ2VzdCcgb3B0aW9uIGluZmx1ZW5jZXMgaG93IHRoZSBsaXN0IG9mIHN1Z2dlc3Rpb25zIGlzIGdlbmVyYXRlZAphbmQgc29ydGVkLiAgU2VlIHwnc3BlbGxzdWdnZXN0J3wuCgpUaGUgJ3NwZWxsY2FwY2hlY2snIG9wdGlvbiBpcyB1c2VkIHRvIGNoZWNrIHRoZSBmaXJzdCB3b3JkIG9mIGEgc2VudGVuY2UKc3RhcnRzIHdpdGggYSBjYXBpdGFsLiAgVGhpcyBkb2Vzbid0IHdvcmsgZm9yIHRoZSBmaXJzdCB3b3JkIGluIHRoZSBmaWxlLgpXaGVuIHRoZXJlIGlzIGEgbGluZSBicmVhayByaWdodCBhZnRlciBhIHNlbnRlbmNlIHRoZSBoaWdobGlnaHRpbmcgb2YgdGhlIG5leHQKbGluZSBtYXkgYmUgcG9zdHBvbmVkLiAgVXNlIHxDVFJMLUx8IHdoZW4gbmVlZGVkLiAgQWxzbyBzZWUgfHNldC1zcGMtYXV0b3wgZm9yCmhvdyBpdCBjYW4gYmUgc2V0IGF1dG9tYXRpY2FsbHkgd2hlbiAnc3BlbGxsYW5nJyBpcyBzZXQuCgpWaW0gY291bnRzIHRoZSBudW1iZXIgb2YgdGltZXMgYSBnb29kIHdvcmQgaXMgZW5jb3VudGVyZWQuICBUaGlzIGlzIHVzZWQgdG8Kc29ydCB0aGUgc3VnZ2VzdGlvbnM6IHdvcmRzIHRoYXQgaGF2ZSBiZWVuIHNlZW4gYmVmb3JlIGdldCBhIHNtYWxsIGJvbnVzLAp3b3JkcyB0aGF0IGhhdmUgYmVlbiBzZWVuIG9mdGVuIGdldCBhIGJpZ2dlciBib251cy4gIFRoZSBDT01NT04gaXRlbSBpbiB0aGUKYWZmaXggZmlsZSBjYW4gYmUgdXNlZCB0byBkZWZpbmUgY29tbW9uIHdvcmRzLCBzbyB0aGF0IHRoaXMgbWVjaGFuaXNtIGFsc28Kd29ya3MgaW4gYSBuZXcgb3Igc2hvcnQgZmlsZSB8c3BlbGwtQ09NTU9OfC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBSZW1hcmtzIG9uIHNwZWxsIGNoZWNraW5nCQkJCSpzcGVsbC1yZW1hcmtzKgoKUEVSRk9STUFOQ0UKClZpbSBkb2VzIG9uLXRoZS1mbHkgc3BlbGwgY2hlY2tpbmcuICBUbyBtYWtlIHRoaXMgd29yayBmYXN0IHRoZSB3b3JkIGxpc3QgaXMKbG9hZGVkIGluIG1lbW9yeS4gIFRodXMgdGhpcyB1c2VzIGEgbG90IG9mIG1lbW9yeSAoMSBNYnl0ZSBvciBtb3JlKS4gIFRoZXJlCm1pZ2h0IGFsc28gYmUgYSBub3RpY2VhYmxlIGRlbGF5IHdoZW4gdGhlIHdvcmQgbGlzdCBpcyBsb2FkZWQsIHdoaWNoIGhhcHBlbnMKd2hlbiAnc3BlbGwnIGlzIHNldCBhbmQgd2hlbiAnc3BlbGxsYW5nJyBpcyBzZXQgd2hpbGUgJ3NwZWxsJyB3YXMgYWxyZWFkeSBzZXQuClRvIG1pbmltaXplIHRoZSBkZWxheSBlYWNoIHdvcmQgbGlzdCBpcyBvbmx5IGxvYWRlZCBvbmNlLCBpdCBpcyBub3QgZGVsZXRlZAp3aGVuICdzcGVsbGxhbmcnIGlzIG1hZGUgZW1wdHkgb3IgJ3NwZWxsJyBpcyByZXNldC4gIFdoZW4gJ2VuY29kaW5nJyBpcyBzZXQKYWxsIHRoZSB3b3JkIGxpc3RzIGFyZSByZWxvYWRlZCwgdGh1cyB5b3UgbWF5IG5vdGljZSBhIGRlbGF5IHRoZW4gdG9vLgoKClJFR0lPTlMKCkEgd29yZCBtYXkgYmUgc3BlbGxlZCBkaWZmZXJlbnRseSBpbiB2YXJpb3VzIHJlZ2lvbnMuICBGb3IgZXhhbXBsZSwgRW5nbGlzaApjb21lcyBpbiAoYXQgbGVhc3QpIHRoZXNlIHZhcmlhbnRzOgoKCWVuCQlhbGwgcmVnaW9ucwoJZW5fYXUJCUF1c3RyYWxpYQoJZW5fY2EJCUNhbmFkYQoJZW5fZ2IJCUdyZWF0IEJyaXRhaW4KCWVuX256CQlOZXcgWmVhbGFuZAoJZW5fdXMJCVVTQQoKV29yZHMgdGhhdCBhcmUgbm90IHVzZWQgaW4gb25lIHJlZ2lvbiBidXQgYXJlIHVzZWQgaW4gYW5vdGhlciByZWdpb24gYXJlCmhpZ2hsaWdodGVkIHdpdGggU3BlbGxMb2NhbCB8aGwtU3BlbGxMb2NhbHwuCgpBbHdheXMgdXNlIGxvd2VyY2FzZSBsZXR0ZXJzIGZvciB0aGUgbGFuZ3VhZ2UgYW5kIHJlZ2lvbiBuYW1lcy4KCldoZW4gYWRkaW5nIGEgd29yZCB3aXRoIHx6Z3wgb3IgYW5vdGhlciBjb21tYW5kIGl0J3MgYWx3YXlzIGFkZGVkIGZvciBhbGwKcmVnaW9ucy4gIFlvdSBjYW4gY2hhbmdlIHRoYXQgYnkgbWFudWFsbHkgZWRpdGluZyB0aGUgJ3NwZWxsZmlsZScuICBTZWUKfHNwZWxsLXdvcmRsaXN0LWZvcm1hdHwuICBOb3RlIHRoYXQgdGhlIHJlZ2lvbnMgYXMgc3BlY2lmaWVkIGluIHRoZSBmaWxlcyBpbgonc3BlbGxmaWxlJyBhcmUgb25seSB1c2VkIHdoZW4gYWxsIGVudHJpZXMgaW4gJ3NwZWxsbGFuZycgc3BlY2lmeSB0aGUgc2FtZQpyZWdpb24gKG5vdCBjb3VudGluZyBmaWxlcyBzcGVjaWZpZWQgYnkgdGhlaXIgLnNwbCBuYW1lKS4KCgkJCQkJCQkqc3BlbGwtZ2VybWFuKgpTcGVjaWZpYyBleGNlcHRpb246IEZvciBHZXJtYW4gdGhlc2Ugc3BlY2lhbCByZWdpb25zIGFyZSB1c2VkOgoJZGUJCWFsbCBHZXJtYW4gd29yZHMgYWNjZXB0ZWQKCWRlX2RlCQlvbGQgYW5kIG5ldyBzcGVsbGluZwoJZGVfMTkJCW9sZCBzcGVsbGluZwoJZGVfMjAJCW5ldyBzcGVsbGluZwoJZGVfYXQJCUF1c3RyaWEKCWRlX2NoCQlTd2l0emVybGFuZAoKCQkJCQkJCSpzcGVsbC1ydXNzaWFuKgpTcGVjaWZpYyBleGNlcHRpb246IEZvciBSdXNzaWFuIHRoZXNlIHNwZWNpYWwgcmVnaW9ucyBhcmUgdXNlZDoKCXJ1CQlhbGwgUnVzc2lhbiB3b3JkcyBhY2NlcHRlZAoJcnVfcnUJCSJJRSIgbGV0dGVyIHNwZWxsaW5nCglydV95bwkJIllPIiBsZXR0ZXIgc3BlbGxpbmcKCgkJCQkJCQkqc3BlbGwteWlkZGlzaCoKWWlkZGlzaCByZXF1aXJlcyB1c2luZyAidXRmLTgiIGVuY29kaW5nLCBiZWNhdXNlIG9mIHRoZSBzcGVjaWFsIGNoYXJhY3RlcnMKdXNlZC4gIElmIHlvdSBhcmUgdXNpbmcgbGF0aW4xIFZpbSB3aWxsIHVzZSB0cmFuc2xpdGVyYXRlZCAocm9tYW5pemVkKSBZaWRkaXNoCmluc3RlYWQuICBJZiB5b3Ugd2FudCB0byB1c2UgdHJhbnNsaXRlcmF0ZWQgWWlkZGlzaCB3aXRoIHV0Zi04IHVzZSAieWktdHIiLgpJbiBhIHRhYmxlOgoJJ2VuY29kaW5nJwknc3BlbGxsYW5nJwoJdXRmLTgJCXlpCQlZaWRkaXNoCglsYXRpbjEJCXlpCQl0cmFuc2xpdGVyYXRlZCBZaWRkaXNoCgl1dGYtOAkJeWktdHIJCXRyYW5zbGl0ZXJhdGVkIFlpZGRpc2gKCgkJCQkJCQkqc3BlbGwtY2prKgpDaGluZXNlLCBKYXBhbmVzZSBhbmQgb3RoZXIgRWFzdCBBc2lhbiBjaGFyYWN0ZXJzIGFyZSBub3JtYWxseSBtYXJrZWQgYXMKZXJyb3JzLCBiZWNhdXNlIHNwZWxsIGNoZWNraW5nIG9mIHRoZXNlIGNoYXJhY3RlcnMgaXMgbm90IHN1cHBvcnRlZC4gSWYKJ3NwZWxsbGFuZycgaW5jbHVkZXMgImNqayIsIHRoZXNlIGNoYXJhY3RlcnMgYXJlIG5vdCBtYXJrZWQgYXMgZXJyb3JzLiAgVGhpcwppcyB1c2VmdWwgd2hlbiBlZGl0aW5nIHRleHQgd2l0aCBzcGVsbCBjaGVja2luZyB3aGlsZSBzb21lIEFzaWFuIHdvcmRzIGFyZQpwcmVzZW50LgoKClNQRUxMIEZJTEVTCQkJCQkJKnNwZWxsLWxvYWQqCgpWaW0gc2VhcmNoZXMgZm9yIHNwZWxsIGZpbGVzIGluIHRoZSAic3BlbGwiIHN1YmRpcmVjdG9yeSBvZiB0aGUgZGlyZWN0b3JpZXMgaW4KJ3J1bnRpbWVwYXRoJy4gIFRoZSBuYW1lIGlzOiBMTC5FRUUuc3BsLCB3aGVyZToKCUxMCXRoZSBsYW5ndWFnZSBuYW1lCglFRUUJdGhlIHZhbHVlIG9mICdlbmNvZGluZycKClRoZSB2YWx1ZSBmb3IgIkxMIiBjb21lcyBmcm9tICdzcGVsbGxhbmcnLCBidXQgZXhjbHVkZXMgdGhlIHJlZ2lvbiBuYW1lLgpFeGFtcGxlczoKCSdzcGVsbGxhbmcnCUxMIH4KCWVuX3VzCQllbgoJZW4tcmFyZQkJZW4tcmFyZQoJbWVkaWNhbF9jYQltZWRpY2FsCgpPbmx5IHRoZSBmaXJzdCBmaWxlIGlzIGxvYWRlZCwgdGhlIG9uZSB0aGF0IGlzIGZpcnN0IGluICdydW50aW1lcGF0aCcuICBJZgp0aGlzIHN1Y2NlZWRzIHRoZW4gYWRkaXRpb25hbGx5IGZpbGVzIHdpdGggdGhlIG5hbWUgTEwuRUVFLmFkZC5zcGwgYXJlIGxvYWRlZC4KQWxsIHRoZSBvbmVzIHRoYXQgYXJlIGZvdW5kIGFyZSB1c2VkLgoKSWYgbm8gc3BlbGwgZmlsZSBpcyBmb3VuZCB0aGUgfFNwZWxsRmlsZU1pc3Npbmd8IGF1dG9jb21tYW5kIGV2ZW50IGlzCnRyaWdnZXJlZC4gIFRoaXMgbWF5IHRyaWdnZXIgdGhlIHxzcGVsbGZpbGUudmltfCBwbHVnaW4gdG8gb2ZmZXIgeW91CmRvd25sb2FkaW5nIHRoZSBzcGVsbCBmaWxlLgoKQWRkaXRpb25hbGx5LCB0aGUgZmlsZXMgcmVsYXRlZCB0byB0aGUgbmFtZXMgaW4gJ3NwZWxsZmlsZScgYXJlIGxvYWRlZC4gIFRoZXNlCmFyZSB0aGUgZmlsZXMgdGhhdCB8emd8IGFuZCB8end8IGFkZCBnb29kIGFuZCB3cm9uZyB3b3JkcyB0by4KCkV4Y2VwdGlvbnM6Ci0gVmltIHVzZXMgImxhdGluMSIgd2hlbiAnZW5jb2RpbmcnIGlzICJpc28tODg1OS0xNSIuICBUaGUgZXVybyBzaWduIGRvZXNuJ3QKICBtYXR0ZXIgZm9yIHNwZWxsaW5nLgotIFdoZW4gbm8gc3BlbGwgZmlsZSBmb3IgJ2VuY29kaW5nJyBpcyBmb3VuZCAiYXNjaWkiIGlzIHRyaWVkLiAgVGhpcyBvbmx5CiAgd29ya3MgZm9yIGxhbmd1YWdlcyB3aGVyZSBuZWFybHkgYWxsIHdvcmRzIGFyZSBBU0NJSSwgc3VjaCBhcyBFbmdsaXNoLiAgSXQKICBoZWxwcyB3aGVuICdlbmNvZGluZycgaXMgbm90ICJsYXRpbjEiLCBzdWNoIGFzIGlzby04ODU5LTIsIGFuZCBFbmdsaXNoIHRleHQKICBpcyBiZWluZyBlZGl0ZWQuICBGb3IgdGhlICIuYWRkIiBmaWxlcyB0aGUgc2FtZSBuYW1lIGFzIHRoZSBmb3VuZCBtYWluCiAgc3BlbGwgZmlsZSBpcyB1c2VkLgoKRm9yIGV4YW1wbGUsIHdpdGggdGhlc2UgdmFsdWVzOgoJJ3J1bnRpbWVwYXRoJyBpcyAifi8udmltLC91c3Ivc2hhcmUvdmltNzAsfi8udmltL2FmdGVyIgoJJ2VuY29kaW5nJyAgICBpcyAiaXNvLTg4NTktMiIKCSdzcGVsbGxhbmcnICAgaXMgInBsIgoKVmltIHdpbGwgbG9vayBmb3I6CjEuIH4vLnZpbS9zcGVsbC9wbC5pc28tODg1OS0yLnNwbAoyLiAvdXNyL3NoYXJlL3ZpbTcwL3NwZWxsL3BsLmlzby04ODU5LTIuc3BsCjMuIH4vLnZpbS9zcGVsbC9wbC5pc28tODg1OS0yLmFkZC5zcGwKNC4gL3Vzci9zaGFyZS92aW03MC9zcGVsbC9wbC5pc28tODg1OS0yLmFkZC5zcGwKNS4gfi8udmltL2FmdGVyL3NwZWxsL3BsLmlzby04ODU5LTIuYWRkLnNwbAoKVGhpcyBhc3N1bWVzIDEuIGlzIG5vdCBmb3VuZCBhbmQgMi4gaXMgZm91bmQuCgpJZiAnZW5jb2RpbmcnIGlzICJsYXRpbjEiIFZpbSB3aWxsIGxvb2sgZm9yOgoxLiB+Ly52aW0vc3BlbGwvcGwubGF0aW4xLnNwbAoyLiAvdXNyL3NoYXJlL3ZpbTcwL3NwZWxsL3BsLmxhdGluMS5zcGwKMy4gfi8udmltL2FmdGVyL3NwZWxsL3BsLmxhdGluMS5zcGwKNC4gfi8udmltL3NwZWxsL3BsLmFzY2lpLnNwbAo1LiAvdXNyL3NoYXJlL3ZpbTcwL3NwZWxsL3BsLmFzY2lpLnNwbAo2LiB+Ly52aW0vYWZ0ZXIvc3BlbGwvcGwuYXNjaWkuc3BsCgpUaGlzIGFzc3VtZXMgbm9uZSBvZiB0aGVtIGFyZSBmb3VuZCAoUG9saXNoIGRvZXNuJ3QgbWFrZSBzZW5zZSB3aGVuIGxlYXZpbmcKb3V0IHRoZSBub24tQVNDSUkgY2hhcmFjdGVycykuCgpTcGVsbGluZyBmb3IgRUJDRElDIGlzIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkLgoKQSBzcGVsbCBmaWxlIG1pZ2h0IG5vdCBiZSBhdmFpbGFibGUgaW4gdGhlIGN1cnJlbnQgJ2VuY29kaW5nJy4gIFNlZQp8c3BlbGwtbWtzcGVsbHwgYWJvdXQgaG93IHRvIGNyZWF0ZSBhIHNwZWxsIGZpbGUuICBDb252ZXJ0aW5nIGEgc3BlbGwgZmlsZQp3aXRoICJpY29udiIgd2lsbCBOT1Qgd29yayEKCk5vdGU6IG9uIFZNUyAiLntlbmN9LnNwbCIgaXMgY2hhbmdlZCB0byAiX3tlbmN9LnNwbCIgdG8gYXZvaWQgdHJvdWJsZSB3aXRoCmZpbGVuYW1lcy4KCgkJCQkJCSAgICAqc3BlbGwtc3VnLWZpbGUqICpFNzgxKgpJZiB0aGVyZSBpcyBhIGZpbGUgd2l0aCBleGFjdGx5IHRoZSBzYW1lIG5hbWUgYXMgdGhlICIuc3BsIiBmaWxlIGJ1dCBlbmRpbmcgaW4KIi5zdWciLCB0aGF0IGZpbGUgd2lsbCBiZSB1c2VkIGZvciBnaXZpbmcgYmV0dGVyIHN1Z2dlc3Rpb25zLiAgSXQgaXNuJ3QgbG9hZGVkCmJlZm9yZSBzdWdnZXN0aW9ucyBhcmUgbWFkZSB0byByZWR1Y2UgbWVtb3J5IHVzZS4KCgkJCQkgICAgKkU3NTgqICpFNzU5KiAqRTc3OCogKkU3NzkqICpFNzgwKiAqRTc4MioKV2hlbiBsb2FkaW5nIGEgc3BlbGwgZmlsZSBWaW0gY2hlY2tzIHRoYXQgaXQgaXMgcHJvcGVybHkgZm9ybWF0dGVkLiAgSWYgeW91CmdldCBhbiBlcnJvciB0aGUgZmlsZSBtYXkgYmUgdHJ1bmNhdGVkLCBtb2RpZmllZCBvciBpbnRlbmRlZCBmb3IgYW5vdGhlciBWaW0KdmVyc2lvbi4KCgpTUEVMTEZJTEUgQ0xFQU5VUAkJCQkJKnNwZWxsZmlsZS1jbGVhbnVwKgoKVGhlIHx6d3wgY29tbWFuZCB0dXJucyBleGlzdGluZyBlbnRyaWVzIGluICdzcGVsbGZpbGUnIGludG8gY29tbWVudCBsaW5lcy4KVGhpcyBhdm9pZHMgaGF2aW5nIHRvIHdyaXRlIGEgbmV3IGZpbGUgZXZlcnkgdGltZSwgYnV0IHJlc3VsdHMgaW4gdGhlIGZpbGUKb25seSBnZXR0aW5nIGxvbmdlciwgbmV2ZXIgc2hvcnRlci4gIFRvIGNsZWFuIHVwIHRoZSBjb21tZW50IGxpbmVzIGluIGFsbAoiLmFkZCIgc3BlbGwgZmlsZXMgZG8gdGhpczogPgoJOnJ1bnRpbWUgc3BlbGwvY2xlYW5hZGQudmltCgpUaGlzIGRlbGV0ZXMgYWxsIGNvbW1lbnQgbGluZXMsIGV4Y2VwdCB0aGUgb25lcyB0aGF0IHN0YXJ0IHdpdGggIiMjIi4gIFVzZQoiIyMiIGxpbmVzIHRvIGFkZCBjb21tZW50cyB0aGF0IHlvdSB3YW50IHRvIGtlZXAuCgpZb3UgY2FuIGludm9rZSB0aGlzIHNjcmlwdCBhcyBvZnRlbiBhcyB5b3UgbGlrZS4gIEEgdmFyaWFibGUgaXMgcHJvdmlkZWQgdG8Kc2tpcCB1cGRhdGluZyBmaWxlcyB0aGF0IGhhdmUgYmVlbiBjaGFuZ2VkIHJlY2VudGx5LiAgU2V0IGl0IHRvIHRoZSBudW1iZXIgb2YKc2Vjb25kcyB0aGF0IGhhcyBwYXNzZWQgc2luY2UgYSBmaWxlIHdhcyBjaGFuZ2VkIGJlZm9yZSBpdCB3aWxsIGJlIGNsZWFuZWQuCkZvciBleGFtcGxlLCB0byBjbGVhbiBvbmx5IGZpbGVzIHRoYXQgd2VyZSBub3QgY2hhbmdlZCBpbiB0aGUgbGFzdCBob3VyOiA+CiAgICAgIGxldCBnOnNwZWxsX2NsZWFuX2xpbWl0ID0gNjAgKiA2MApUaGUgZGVmYXVsdCBpcyBvbmUgc2Vjb25kLgoKCldPUkRTCgpWaW0gdXNlcyBhIGZpeGVkIG1ldGhvZCB0byByZWNvZ25pemUgYSB3b3JkLiAgVGhpcyBpcyBpbmRlcGVuZGVudCBvZgonaXNrZXl3b3JkJywgc28gdGhhdCBpdCBhbHNvIHdvcmtzIGluIGhlbHAgZmlsZXMgYW5kIGZvciBsYW5ndWFnZXMgdGhhdAppbmNsdWRlIGNoYXJhY3RlcnMgbGlrZSAnLScgaW4gJ2lza2V5d29yZCcuICBUaGUgd29yZCBjaGFyYWN0ZXJzIGRvIGRlcGVuZCBvbgonZW5jb2RpbmcnLgoKVGhlIHRhYmxlIHdpdGggd29yZCBjaGFyYWN0ZXJzIGlzIHN0b3JlZCBpbiB0aGUgbWFpbiAuc3BsIGZpbGUuICBUaGVyZWZvcmUgaXQKbWF0dGVycyB3aGF0IHRoZSBjdXJyZW50IGxvY2FsZSBpcyB3aGVuIGdlbmVyYXRpbmcgaXQhICBBIC5hZGQuc3BsIGZpbGUgZG9lcwpub3QgY29udGFpbiBhIHdvcmQgdGFibGUgdGhvdWdoLgoKRm9yIGEgd29yZCB0aGF0IHN0YXJ0cyB3aXRoIGEgZGlnaXQgdGhlIGRpZ2l0IGlzIGlnbm9yZWQsIHVubGVzcyB0aGUgd29yZCBhcyBhCndob2xlIGlzIHJlY29nbml6ZWQuICBUaHVzIGlmICIzRCIgaXMgYSB3b3JkIGFuZCAiRCIgaXMgbm90IHRoZW4gIjNEIiBpcwpyZWNvZ25pemVkIGFzIGEgd29yZCwgYnV0IGlmICIzRCIgaXMgbm90IGEgd29yZCB0aGVuIG9ubHkgdGhlICJEIiBpcyBtYXJrZWQgYXMKYmFkLiAgSGV4IG51bWJlcnMgaW4gdGhlIGZvcm0gMHgxMmFiIGFuZCAwWDEyQUIgYXJlIHJlY29nbml6ZWQuCgoKV09SRCBDT01CSU5BVElPTlMKCkl0IGlzIHBvc3NpYmxlIHRvIHNwZWxsLWNoZWNrIHdvcmRzIHRoYXQgaW5jbHVkZSBhIHNwYWNlLiAgVGhpcyBpcyB1c2VkIHRvCnJlY29nbml6ZSB3b3JkcyB0aGF0IGFyZSBpbnZhbGlkIHdoZW4gdXNlZCBieSB0aGVtc2VsdmVzLCBlLmcuIGZvciAiZXQgYWwuIi4KSXQgY2FuIGFsc28gYmUgdXNlZCB0byByZWNvZ25pemUgInRoZSB0aGUiIGFuZCBoaWdobGlnaHQgaXQuCgpUaGUgbnVtYmVyIG9mIHNwYWNlcyBpcyBpcnJlbGV2YW50LiAgSW4gbW9zdCBjYXNlcyBhIGxpbmUgYnJlYWsgbWF5IGFsc28KYXBwZWFyLiAgSG93ZXZlciwgdGhpcyBtYWtlcyBpdCBkaWZmaWN1bHQgdG8gZmluZCBvdXQgd2hlcmUgdG8gc3RhcnQgY2hlY2tpbmcKZm9yIHNwZWxsaW5nIG1pc3Rha2VzLiAgV2hlbiB5b3UgbWFrZSBhIGNoYW5nZSB0byBvbmUgbGluZSBhbmQgb25seSB0aGF0IGxpbmUKaXMgcmVkcmF3biBWaW0gd29uJ3QgbG9vayBpbiB0aGUgcHJldmlvdXMgbGluZSwgdGh1cyB3aGVuICJldCIgaXMgYXQgdGhlIGVuZApvZiB0aGUgcHJldmlvdXMgbGluZSAiYWwuIiB3aWxsIGJlIGZsYWdnZWQgYXMgYW4gZXJyb3IuICBBbmQgd2hlbiB5b3UgdHlwZQoidGhlPENSPnRoZSIgdGhlIGhpZ2hsaWdodGluZyBkb2Vzbid0IGFwcGVhciB1bnRpbCB0aGUgZmlyc3QgbGluZSBpcyByZWRyYXduLgpVc2UgfENUUkwtTHwgdG8gcmVkcmF3IHJpZ2h0IGF3YXkuICAiW3MiIHdpbGwgYWxzbyBzdG9wIGF0IGEgd29yZCBjb21iaW5hdGlvbgp3aXRoIGEgbGluZSBicmVhay4KCldoZW4gZW5jb3VudGVyaW5nIGEgbGluZSBicmVhayBWaW0gc2tpcHMgY2hhcmFjdGVycyBzdWNoIGFzICcqJywgJz4nIGFuZCAnIicsCnNvIHRoYXQgY29tbWVudHMgaW4gQywgc2hlbGwgYW5kIFZpbSBjb2RlIGNhbiBiZSBzcGVsbCBjaGVja2VkLgoKClNZTlRBWCBISUdITElHSFRJTkcJCQkJCSpzcGVsbC1zeW50YXgqCgpGaWxlcyB0aGF0IHVzZSBzeW50YXggaGlnaGxpZ2h0aW5nIGNhbiBzcGVjaWZ5IHdoZXJlIHNwZWxsIGNoZWNraW5nIHNob3VsZCBiZQpkb25lOgoKMS4gIGV2ZXJ5d2hlcmUJCQkgICBkZWZhdWx0CjIuICBpbiBzcGVjaWZpYyBpdGVtcwkJICAgdXNlICJjb250YWlucz1AU3BlbGwiCjMuICBldmVyeXdoZXJlIGJ1dCBzcGVjaWZpYyBpdGVtcyAgdXNlICJjb250YWlucz1ATm9TcGVsbCIKCkZvciB0aGUgc2Vjb25kIG1ldGhvZCBhZGRpbmcgdGhlIEBOb1NwZWxsIGNsdXN0ZXIgd2lsbCBkaXNhYmxlIHNwZWxsIGNoZWNraW5nCmFnYWluLiAgVGhpcyBjYW4gYmUgdXNlZCwgZm9yIGV4YW1wbGUsIHRvIGFkZCBAU3BlbGwgdG8gdGhlIGNvbW1lbnRzIG9mIGEKcHJvZ3JhbSwgYW5kIGFkZCBATm9TcGVsbCBmb3IgaXRlbXMgdGhhdCBzaG91bGRuJ3QgYmUgY2hlY2tlZC4KQWxzbyBzZWUgfDpzeW4tc3BlbGx8IGZvciB0ZXh0IHRoYXQgaXMgbm90IGluIGEgc3ludGF4IGl0ZW0uCgoKVklNIFNDUklQVFMKCklmIHlvdSB3YW50IHRvIHdyaXRlIGEgVmltIHNjcmlwdCB0aGF0IGRvZXMgc29tZXRoaW5nIHdpdGggc3BlbGxpbmcsIHlvdSBtYXkKZmluZCB0aGVzZSBmdW5jdGlvbnMgdXNlZnVsOgoKICAgIHNwZWxsYmFkd29yZCgpCWZpbmQgYmFkbHkgc3BlbGxlZCB3b3JkIGF0IHRoZSBjdXJzb3IKICAgIHNwZWxsc3VnZ2VzdCgpCWdldCBsaXN0IG9mIHNwZWxsaW5nIHN1Z2dlc3Rpb25zCiAgICBzb3VuZGZvbGQoKQkJZ2V0IHRoZSBzb3VuZC1hLWxpa2UgdmVyc2lvbiBvZiBhIHdvcmQKCgpTRVRUSU5HICdzcGVsbGNhcGNoZWNrJyBBVVRPTUFUSUNBTExZCQkJKnNldC1zcGMtYXV0byoKCkFmdGVyIHRoZSAnc3BlbGxsYW5nJyBvcHRpb24gaGFzIGJlZW4gc2V0IHN1Y2Nlc3NmdWxseSwgVmltIHdpbGwgc291cmNlIHRoZQpmaWxlcyAic3BlbGwvTEFORy52aW0iIGluICdydW50aW1lcGF0aCcuICAiTEFORyIgaXMgdGhlIHZhbHVlIG9mICdzcGVsbGxhbmcnCnVwIHRvIHRoZSBmaXJzdCBjb21tYSwgZG90IG9yIHVuZGVyc2NvcmUuICBUaGlzIGNhbiBiZSB1c2VkIHRvIHNldCBvcHRpb25zCnNwZWNpZmljYWxseSBmb3IgdGhlIGxhbmd1YWdlLCBlc3BlY2lhbGx5ICdzcGVsbGNhcGNoZWNrJy4KClRoZSBkaXN0cmlidXRpb24gaW5jbHVkZXMgYSBmZXcgb2YgdGhlc2UgZmlsZXMuICBVc2UgdGhpcyBjb21tYW5kIHRvIHNlZSB3aGF0CnRoZXkgZG86ID4KCTpuZXh0ICRWSU1SVU5USU1FL3NwZWxsLyoudmltCgpOb3RlIHRoYXQgdGhlIGRlZmF1bHQgc2NyaXB0cyBkb24ndCBzZXQgJ3NwZWxsY2FwY2hlY2snIGlmIGl0IHdhcyBjaGFuZ2VkIGZyb20KdGhlIGRlZmF1bHQgdmFsdWUuICBUaGlzIGFzc3VtZXMgdGhlIHVzZXIgcHJlZmVycyBhbm90aGVyIHZhbHVlIHRoZW4uCgoKRE9VQkxFIFNDT1JJTkcJCQkJCQkqc3BlbGwtZG91YmxlLXNjb3JpbmcqCgpUaGUgJ3NwZWxsc3VnZ2VzdCcgb3B0aW9uIGNhbiBiZSB1c2VkIHRvIHNlbGVjdCAiZG91YmxlIiBzY29yaW5nLiAgVGhpcwptZWNoYW5pc20gaXMgYmFzZWQgb24gdGhlIHByaW5jaXBsZSB0aGF0IHRoZXJlIGFyZSB0d28ga2luZHMgb2Ygc3BlbGxpbmcKbWlzdGFrZXM6CgoxLiBZb3Uga25vdyBob3cgdG8gc3BlbGwgdGhlIHdvcmQsIGJ1dCBtaXN0eXBlIHNvbWV0aGluZy4gIFRoaXMgcmVzdWx0cyBpbiBhCiAgIHNtYWxsIGVkaXRpbmcgZGlzdGFuY2UgKGNoYXJhY3RlciBzd2FwcGVkL29taXR0ZWQvaW5zZXJ0ZWQpIGFuZCBwb3NzaWJseSBhCiAgIHdvcmQgdGhhdCBzb3VuZHMgY29tcGxldGVseSBkaWZmZXJlbnQuCgoyLiBZb3UgZG9uJ3Qga25vdyBob3cgdG8gc3BlbGwgdGhlIHdvcmQgYW5kIHR5cGUgc29tZXRoaW5nIHRoYXQgc291bmRzIHJpZ2h0LgogICBUaGUgZWRpdCBkaXN0YW5jZSBjYW4gYmUgYmlnIGJ1dCB0aGUgd29yZCBpcyBzaW1pbGFyIGFmdGVyIHNvdW5kLWZvbGRpbmcuCgpTaW5jZSBzY29yZXMgZm9yIHRoZXNlIHR3byBtaXN0YWtlcyB3aWxsIGJlIHZlcnkgZGlmZmVyZW50IHdlIHVzZSBhIGxpc3QKZm9yIGVhY2ggYW5kIG1peCB0aGVtLgoKVGhlIHNvdW5kLWZvbGRpbmcgaXMgc2xvdyBhbmQgcGVvcGxlIHRoYXQga25vdyB0aGUgbGFuZ3VhZ2Ugd29uJ3QgbWFrZSB0aGUKc2Vjb25kIGtpbmQgb2YgbWlzdGFrZXMuICBUaGVyZWZvcmUgJ3NwZWxsc3VnZ2VzdCcgY2FuIGJlIHNldCB0byBzZWxlY3QgdGhlCnByZWZlcnJlZCBtZXRob2QgZm9yIHNjb3JpbmcgdGhlIHN1Z2dlc3Rpb25zLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIEdlbmVyYXRpbmcgYSBzcGVsbCBmaWxlCQkJCSpzcGVsbC1ta3NwZWxsKgoKVmltIHVzZXMgYSBiaW5hcnkgZmlsZSBmb3JtYXQgZm9yIHNwZWxsaW5nLiAgVGhpcyBncmVhdGx5IHNwZWVkcyB1cCBsb2FkaW5nCnRoZSB3b3JkIGxpc3QgYW5kIGtlZXBzIGl0IHNtYWxsLgoJCQkJCQkgICAgKi5hZmYqICouZGljKiAqTXlzcGVsbCoKWW91IGNhbiBjcmVhdGUgYSBWaW0gc3BlbGwgZmlsZSBmcm9tIHRoZSAuYWZmIGFuZCAuZGljIGZpbGVzIHRoYXQgTXlzcGVsbAp1c2VzLiAgTXlzcGVsbCBpcyB1c2VkIGJ5IE9wZW5PZmZpY2Uub3JnIGFuZCBNb3ppbGxhLiBUaGUgT3Blbk9mZmljZSAub3h0IApmaWxlcyBhcmUgemlwIGZpbGVzIHdoaWNoIGNvbnRhaW4gdGhlIC5hZmYgYW5kIC5kaWMgZmlsZXMuIFlvdSBzaG91bGQgYmUgYWJsZQp0byBmaW5kIHRoZW0gaGVyZToKCWh0dHA6Ly9leHRlbnNpb25zLnNlcnZpY2VzLm9wZW5vZmZpY2Uub3JnL2RpY3Rpb25hcnkKVGhlIG9sZGVyLCBPcGVuT2ZmaWNlIDIgZmlsZXMgbWF5IGJlIHVzZWQgaWYgdGhpcyBkb2Vzbid0IHdvcms6CglodHRwOi8vd2lraS5zZXJ2aWNlcy5vcGVub2ZmaWNlLm9yZy93aWtpL0RpY3Rpb25hcmllcwpZb3UgY2FuIGFsc28gdXNlIGEgcGxhaW4gd29yZCBsaXN0LiAgVGhlIHJlc3VsdHMgYXJlIHRoZSBzYW1lLCB0aGUgY2hvaWNlCmRlcGVuZHMgb24gd2hhdCB3b3JkIGxpc3RzIHlvdSBjYW4gZmluZC4KCklmIHlvdSBpbnN0YWxsIEFhcCAoZnJvbSB3d3cuYS1hLXAub3JnKSB5b3UgY2FuIHVzZSB0aGUgcmVjaXBlcyBpbiB0aGUKcnVudGltZS9zcGVsbC8/Py8gZGlyZWN0b3JpZXMuICBBYXAgd2lsbCB0YWtlIGNhcmUgb2YgZG93bmxvYWRpbmcgdGhlIGZpbGVzLAphcHBseSBwYXRjaGVzIG5lZWRlZCBmb3IgVmltIGFuZCBidWlsZCB0aGUgLnNwbCBmaWxlLgoKTWFrZSBzdXJlIHlvdXIgY3VycmVudCBsb2NhbGUgaXMgc2V0IHByb3Blcmx5LCBvdGhlcndpc2UgVmltIGRvZXNuJ3Qga25vdyB3aGF0CmNoYXJhY3RlcnMgYXJlIHVwcGVyL2xvd2VyIGNhc2UgbGV0dGVycy4gIElmIHRoZSBsb2NhbGUgaXNuJ3QgYXZhaWxhYmxlIChlLmcuLAp3aGVuIHVzaW5nIGFuIE1TLVdpbmRvd3MgY29kZXBhZ2Ugb24gVW5peCkgYWRkIHRhYmxlcyB0byB0aGUgLmFmZiBmaWxlCnxzcGVsbC1hZmZpeC1jaGFyc3wuICBJZiB0aGUgLmFmZiBmaWxlIGRvZXNuJ3QgZGVmaW5lIGEgdGFibGUgdGhlbiB0aGUgd29yZAp0YWJsZSBvZiB0aGUgY3VycmVudGx5IGFjdGl2ZSBzcGVsbGluZyBpcyB1c2VkLiAgSWYgc3BlbGxpbmcgaXMgbm90IGFjdGl2ZQp0aGVuIFZpbSB3aWxsIHRyeSB0byBndWVzcy4KCgkJCQkJCQkqOm1rc3AqICo6bWtzcGVsbCoKOm1rc3BbZWxsXVshXSBbLWFzY2lpXSB7b3V0bmFtZX0ge2lubmFtZX0gLi4uCgkJCUdlbmVyYXRlIGEgVmltIHNwZWxsIGZpbGUgZnJvbSB3b3JkIGxpc3RzLiAgRXhhbXBsZTogPgoJCTpta3NwZWxsIC90bXAvbmwgbmxfTkwud29yZHMKPAkJCQkJCQkJKkU3NTEqCgkJCVdoZW4ge291dG5hbWV9IGVuZHMgaW4gIi5zcGwiIGl0IGlzIHVzZWQgYXMgdGhlIG91dHB1dAoJCQlmaWxlIG5hbWUuICBPdGhlcndpc2UgaXQgc2hvdWxkIGJlIGEgbGFuZ3VhZ2UgbmFtZSwKCQkJc3VjaCBhcyAiZW4iLCB3aXRob3V0IHRoZSByZWdpb24gbmFtZS4gIFRoZSBmaWxlCgkJCXdyaXR0ZW4gd2lsbCBiZSAie291dG5hbWV9LntlbmNvZGluZ30uc3BsIiwgd2hlcmUKCQkJe2VuY29kaW5nfSBpcyB0aGUgdmFsdWUgb2YgdGhlICdlbmNvZGluZycgb3B0aW9uLgoKCQkJV2hlbiB0aGUgb3V0cHV0IGZpbGUgYWxyZWFkeSBleGlzdHMgWyFdIG11c3QgYmUgdXNlZAoJCQl0byBvdmVyd3JpdGUgaXQuCgoJCQlXaGVuIHRoZSBbLWFzY2lpXSBhcmd1bWVudCBpcyBwcmVzZW50LCB3b3JkcyB3aXRoCgkJCW5vbi1hc2NpaSBjaGFyYWN0ZXJzIGFyZSBza2lwcGVkLiAgVGhlIHJlc3VsdGluZyBmaWxlCgkJCWVuZHMgaW4gImFzY2lpLnNwbCIuCgoJCQlUaGUgaW5wdXQgY2FuIGJlIHRoZSBNeXNwZWxsIGZvcm1hdCBmaWxlcyB7aW5uYW1lfS5hZmYKCQkJYW5kIHtpbm5hbWV9LmRpYy4gIElmIHtpbm5hbWV9LmFmZiBkb2VzIG5vdCBleGlzdCB0aGVuCgkJCXtpbm5hbWV9IGlzIHVzZWQgYXMgdGhlIGZpbGUgbmFtZSBvZiBhIHBsYWluIHdvcmQKCQkJbGlzdC4KCgkJCU11bHRpcGxlIHtpbm5hbWV9IGFyZ3VtZW50cyBjYW4gYmUgZ2l2ZW4gdG8gY29tYmluZQoJCQlyZWdpb25zIGludG8gb25lIFZpbSBzcGVsbCBmaWxlLiAgRXhhbXBsZTogPgoJCTpta3NwZWxsIH4vLnZpbS9zcGVsbC9lbiAvdG1wL2VuX1VTIC90bXAvZW5fQ0EgL3RtcC9lbl9BVQo8CQkJVGhpcyBjb21iaW5lcyB0aGUgRW5nbGlzaCB3b3JkIGxpc3RzIGZvciBVUywgQ0EgYW5kIEFVCgkJCWludG8gb25lIGVuLnNwbCBmaWxlLgoJCQlVcCB0byBlaWdodCByZWdpb25zIGNhbiBiZSBjb21iaW5lZC4gKkU3NTQqICpFNzU1KgoJCQlUaGUgUkVQIGFuZCBTQUwgaXRlbXMgb2YgdGhlIGZpcnN0IC5hZmYgZmlsZSB3aGVyZQoJCQl0aGV5IGFwcGVhciBhcmUgdXNlZC4gfHNwZWxsLVJFUHwgfHNwZWxsLVNBTHwKCQkJCQkJCQkqRTg0NSoKCQkJVGhpcyBjb21tYW5kIHVzZXMgYSBsb3Qgb2YgbWVtb3J5LCByZXF1aXJlZCB0byBmaW5kCgkJCXRoZSBvcHRpbWFsIHdvcmQgdHJlZSAoUG9saXNoLCBJdGFsaWFuIGFuZCBIdW5nYXJpYW4KCQkJcmVxdWlyZSBzZXZlcmFsIGh1bmRyZWQgTWJ5dGUpLiAgVGhlIGZpbmFsIHJlc3VsdCB3aWxsCgkJCWJlIG11Y2ggc21hbGxlciwgYmVjYXVzZSBjb21wcmVzc2lvbiBpcyB1c2VkLiAgVG8KCQkJYXZvaWQgcnVubmluZyBvdXQgb2YgbWVtb3J5IGNvbXByZXNzaW9uIHdpbGwgYmUgZG9uZQoJCQlub3cgYW5kIHRoZW4uICBUaGlzIGNhbiBiZSB0dW5lZCB3aXRoIHRoZSAnbWtzcGVsbG1lbScKCQkJb3B0aW9uLgoKCQkJQWZ0ZXIgdGhlIHNwZWxsIGZpbGUgd2FzIHdyaXR0ZW4gYW5kIGl0IHdhcyBiZWluZyB1c2VkCgkJCWluIGEgYnVmZmVyIGl0IHdpbGwgYmUgcmVsb2FkZWQgYXV0b21hdGljYWxseS4KCjpta3NwW2VsbF0gWy1hc2NpaV0ge25hbWV9LntlbmN9LmFkZAoJCQlMaWtlICI6bWtzcGVsbCIgYWJvdmUsIHVzaW5nIHtuYW1lfS57ZW5jfS5hZGQgYXMgdGhlCgkJCWlucHV0IGZpbGUgYW5kIHByb2R1Y2luZyBhbiBvdXRwdXQgZmlsZSBpbiB0aGUgc2FtZQoJCQlkaXJlY3RvcnkgdGhhdCBoYXMgIi5zcGwiIGFwcGVuZGVkLgoKOm1rc3BbZWxsXSBbLWFzY2lpXSB7bmFtZX0KCQkJTGlrZSAiOm1rc3BlbGwiIGFib3ZlLCB1c2luZyB7bmFtZX0gYXMgdGhlIGlucHV0IGZpbGUKCQkJYW5kIHByb2R1Y2luZyBhbiBvdXRwdXQgZmlsZSBpbiB0aGUgc2FtZSBkaXJlY3RvcnkKCQkJdGhhdCBoYXMgIi57ZW5jfS5zcGwiIGFwcGVuZGVkLgoKVmltIHdpbGwgcmVwb3J0IHRoZSBudW1iZXIgb2YgZHVwbGljYXRlIHdvcmRzLiAgVGhpcyBtaWdodCBiZSBhIG1pc3Rha2UgaW4gdGhlCmxpc3Qgb2Ygd29yZHMuICBCdXQgc29tZXRpbWVzIGl0IGlzIHVzZWQgdG8gaGF2ZSBkaWZmZXJlbnQgcHJlZml4ZXMgYW5kCnN1ZmZpeGVzIGZvciB0aGUgc2FtZSBiYXNpYyB3b3JkIHRvIGF2b2lkIHRoZW0gY29tYmluaW5nIChlLmcuIEN6ZWNoIHVzZXMKdGhpcykuICBJZiB5b3Ugd2FudCBWaW0gdG8gcmVwb3J0IGFsbCBkdXBsaWNhdGUgd29yZHMgc2V0IHRoZSAndmVyYm9zZScKb3B0aW9uLgoKU2luY2UgeW91IG1pZ2h0IHdhbnQgdG8gY2hhbmdlIGEgTXlzcGVsbCB3b3JkIGxpc3QgZm9yIHVzZSB3aXRoIFZpbSB0aGUKZm9sbG93aW5nIHByb2NlZHVyZSBpcyByZWNvbW1lbmRlZDoKCjEuIE9idGFpbiB0aGUgeHhfWVkuYWZmIGFuZCB4eF9ZWS5kaWMgZmlsZXMgZnJvbSBNeXNwZWxsLgoyLiBNYWtlIGEgY29weSBvZiB0aGVzZSBmaWxlcyB0byB4eF9ZWS5vcmlnLmFmZiBhbmQgeHhfWVkub3JpZy5kaWMuCjMuIENoYW5nZSB0aGUgeHhfWVkuYWZmIGFuZCB4eF9ZWS5kaWMgZmlsZXMgdG8gcmVtb3ZlIGJhZCB3b3JkcywgYWRkIG1pc3NpbmcKICAgd29yZHMsIGRlZmluZSB3b3JkIGNoYXJhY3RlcnMgd2l0aCBGT0wvTE9XL1VQUCwgZXRjLiAgVGhlIGRpc3RyaWJ1dGVkCiAgICIqLmRpZmYiIGZpbGVzIGNhbiBiZSB1c2VkLgo0LiBTdGFydCBWaW0gd2l0aCB0aGUgcmlnaHQgbG9jYWxlIGFuZCB1c2UgfDpta3NwZWxsfCB0byBnZW5lcmF0ZSB0aGUgVmltCiAgIHNwZWxsIGZpbGUuCjUuIFRyeSBvdXQgdGhlIHNwZWxsIGZpbGUgd2l0aCAiOnNldCBzcGVsbCBzcGVsbGxhbmc9eHgiIGlmIHlvdSB3cm90ZSBpdCBpbgogICBhIHNwZWxsIGRpcmVjdG9yeSBpbiAncnVudGltZXBhdGgnLCBvciAiOnNldCBzcGVsbGxhbmc9eHguZW5jLnNwbCIgaWYgeW91CiAgIHdyb3RlIGl0IHNvbWV3aGVyZSBlbHNlLgoKV2hlbiB0aGUgTXlzcGVsbCBmaWxlcyBhcmUgdXBkYXRlZCB5b3UgY2FuIG1lcmdlIHRoZSBkaWZmZXJlbmNlczoKMS4gT2J0YWluIHRoZSBuZXcgTXlzcGVsbCBmaWxlcyBhcyB4eF9ZWS5uZXcuYWZmIGFuZCB4eF9VVS5uZXcuZGljLgoyLiBVc2UgVmltZGlmZiB0byBzZWUgd2hhdCBjaGFuZ2VkOiA+Cgl2aW1kaWZmIHh4X1lZLm9yaWcuZGljIHh4X1lZLm5ldy5kaWMKMy4gVGFrZSBvdmVyIHRoZSBjaGFuZ2VzIHlvdSBsaWtlIGluIHh4X1lZLmRpYy4KICAgWW91IG1heSBhbHNvIG5lZWQgdG8gY2hhbmdlIHh4X1lZLmFmZi4KNC4gUmVuYW1lIHh4X1lZLm5ldy5kaWMgdG8geHhfWVkub3JpZy5kaWMgYW5kIHh4X1lZLm5ldy5hZmYgdG8geHhfWVkubmV3LmFmZi4KCgpTUEVMTCBGSUxFIFZFUlNJT05TCQkJCQkqRTc3MCogKkU3NzEqICpFNzcyKgoKU3BlbGwgY2hlY2tpbmcgaXMgYSByZWxhdGl2ZWx5IG5ldyBmZWF0dXJlIGluIFZpbSwgdGh1cyBpdCdzIHBvc3NpYmxlIHRoYXQgdGhlCi5zcGwgZmlsZSBmb3JtYXQgd2lsbCBiZSBjaGFuZ2VkIHRvIHN1cHBvcnQgbW9yZSBsYW5ndWFnZXMuICBWaW0gd2lsbCBjaGVjawp0aGUgdmFsaWRpdHkgb2YgdGhlIHNwZWxsIGZpbGUgYW5kIHJlcG9ydCBhbnl0aGluZyB3cm9uZy4KCglFNzcxOiBPbGQgc3BlbGwgZmlsZSwgbmVlZHMgdG8gYmUgdXBkYXRlZCB+ClRoaXMgc3BlbGwgZmlsZSBpcyBvbGRlciB0aGFuIHlvdXIgVmltLiAgWW91IG5lZWQgdG8gdXBkYXRlIHRoZSAuc3BsIGZpbGUuCgoJRTc3MjogU3BlbGwgZmlsZSBpcyBmb3IgbmV3ZXIgdmVyc2lvbiBvZiBWaW0gfgpUaGlzIG1lYW5zIHRoZSBzcGVsbCBmaWxlIHdhcyBtYWRlIGZvciBhIGxhdGVyIHZlcnNpb24gb2YgVmltLiAgWW91IG5lZWQgdG8KdXBkYXRlIFZpbS4KCglFNzcwOiBVbnN1cHBvcnRlZCBzZWN0aW9uIGluIHNwZWxsIGZpbGUgfgpUaGlzIG1lYW5zIHRoZSBzcGVsbCBmaWxlIHdhcyBtYWRlIGZvciBhIGxhdGVyIHZlcnNpb24gb2YgVmltIGFuZCBjb250YWlucyBhCnNlY3Rpb24gdGhhdCBpcyByZXF1aXJlZCBmb3IgdGhlIHNwZWxsIGZpbGUgdG8gd29yay4gIEluIHRoaXMgY2FzZSBpdCdzCnByb2JhYmx5IGEgZ29vZCBpZGVhIHRvIHVwZ3JhZGUgeW91ciBWaW0uCgoKU1BFTEwgRklMRSBEVU1QCgpJZiBmb3Igc29tZSByZWFzb24geW91IHdhbnQgdG8gY2hlY2sgd2hhdCB3b3JkcyBhcmUgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50bHkKdXNlZCBzcGVsbGluZyBmaWxlcywgdXNlIHRoaXMgY29tbWFuZDoKCgkJCQkJCQkqOnNwZWxsZHVtcCogKjpzcGVsbGQqCjpzcGVsbGRbdW1wXQkJT3BlbiBhIG5ldyB3aW5kb3cgYW5kIGZpbGwgaXQgd2l0aCBhbGwgY3VycmVudGx5IHZhbGlkCgkJCXdvcmRzLiAgQ29tcG91bmQgd29yZHMgYXJlIG5vdCBpbmNsdWRlZC4KCQkJTm90ZTogRm9yIHNvbWUgbGFuZ3VhZ2VzIHRoZSByZXN1bHQgbWF5IGJlIGVub3Jtb3VzLAoJCQljYXVzaW5nIFZpbSB0byBydW4gb3V0IG9mIG1lbW9yeS4KCjpzcGVsbGRbdW1wXSEJCUxpa2UgIjpzcGVsbGR1bXAiIGFuZCBpbmNsdWRlIHRoZSB3b3JkIGNvdW50LiAgVGhpcyBpcwoJCQl0aGUgbnVtYmVyIG9mIHRpbWVzIHRoZSB3b3JkIHdhcyBmb3VuZCB3aGlsZQoJCQl1cGRhdGluZyB0aGUgc2NyZWVuLiAgV29yZHMgdGhhdCBhcmUgaW4gQ09NTU9OIGl0ZW1zCgkJCWdldCBhIHN0YXJ0aW5nIGNvdW50IG9mIDEwLgoKVGhlIGZvcm1hdCBvZiB0aGUgd29yZCBsaXN0IGlzIHVzZWQgfHNwZWxsLXdvcmRsaXN0LWZvcm1hdHwuICBZb3Ugc2hvdWxkIGJlCmFibGUgdG8gcmVhZCBpdCB3aXRoICI6bWtzcGVsbCIgdG8gZ2VuZXJhdGUgb25lIC5zcGwgZmlsZSB0aGF0IGluY2x1ZGVzIGFsbAp0aGUgd29yZHMuCgpXaGVuIGFsbCBlbnRyaWVzIHRvICdzcGVsbGxhbmcnIHVzZSB0aGUgc2FtZSByZWdpb25zIG9yIG5vIHJlZ2lvbnMgYXQgYWxsIHRoZW4KdGhlIHJlZ2lvbiBpbmZvcm1hdGlvbiBpcyBpbmNsdWRlZCBpbiB0aGUgZHVtcGVkIHdvcmRzLiAgT3RoZXJ3aXNlIG9ubHkgd29yZHMKZm9yIHRoZSBjdXJyZW50IHJlZ2lvbiBhcmUgaW5jbHVkZWQgYW5kIG5vICIvcmVnaW9ucyIgbGluZSBpcyBnZW5lcmF0ZWQuCgpDb21tZW50IGxpbmVzIHdpdGggdGhlIG5hbWUgb2YgdGhlIC5zcGwgZmlsZSBhcmUgdXNlZCBhcyBhIGhlYWRlciBhYm92ZSB0aGUKd29yZHMgdGhhdCB3ZXJlIGdlbmVyYXRlZCBmcm9tIHRoYXQgLnNwbCBmaWxlLgoKClNQRUxMIEZJTEUgTUlTU0lORwkJKnNwZWxsLVNwZWxsRmlsZU1pc3NpbmcqICpzcGVsbGZpbGUudmltKgoKSWYgdGhlIHNwZWxsIGZpbGUgZm9yIHRoZSBsYW5ndWFnZSB5b3UgYXJlIHVzaW5nIGlzIG5vdCBhdmFpbGFibGUsIHlvdSB3aWxsCmdldCBhbiBlcnJvciBtZXNzYWdlLiAgQnV0IGlmIHRoZSAic3BlbGxmaWxlLnZpbSIgcGx1Z2luIGlzIGFjdGl2ZSBpdCB3aWxsCm9mZmVyIHlvdSB0byBkb3dubG9hZCB0aGUgc3BlbGwgZmlsZS4gIEp1c3QgZm9sbG93IHRoZSBpbnN0cnVjdGlvbnMsIGl0IHdpbGwKYXNrIHlvdSB3aGVyZSB0byB3cml0ZSB0aGUgZmlsZSAodGhlcmUgbXVzdCBiZSBhIHdyaXRhYmxlIGRpcmVjdG9yeSBpbgoncnVudGltZXBhdGgnIGZvciB0aGlzKS4KClRoZSBwbHVnaW4gaGFzIGEgZGVmYXVsdCBwbGFjZSB3aGVyZSB0byBsb29rIGZvciBzcGVsbCBmaWxlcywgb24gdGhlIFZpbSBmdHAKc2VydmVyLiAgSWYgeW91IHdhbnQgdG8gdXNlIGFub3RoZXIgbG9jYXRpb24gb3IgYW5vdGhlciBwcm90b2NvbCwgc2V0IHRoZQpnOnNwZWxsZmlsZV9VUkwgdmFyaWFibGUgdG8gdGhlIGRpcmVjdG9yeSB0aGF0IGhvbGRzIHRoZSBzcGVsbCBmaWxlcy4gIFRoZQp8bmV0cnd8IHBsdWdpbiBpcyB1c2VkIGZvciBnZXR0aW5nIHRoZSBmaWxlLCBsb29rIHRoZXJlIGZvciB0aGUgc3BlY2lmaWMKc3ludGF4IG9mIHRoZSBVUkwuICBFeGFtcGxlOiA+CglsZXQgZzpzcGVsbGZpbGVfVVJMID0gJ2h0dHA6Ly9mdHAudmltLm9yZy92aW0vcnVudGltZS9zcGVsbCcKWW91IG1heSBuZWVkIHRvIGVzY2FwZSBzcGVjaWFsIGNoYXJhY3RlcnMuCgpUaGUgcGx1Z2luIHdpbGwgb25seSBhc2sgYWJvdXQgZG93bmxvYWRpbmcgYSBsYW5ndWFnZSBvbmNlLiAgSWYgeW91IHdhbnQgdG8KdHJ5IGFnYWluIGFueXdheSByZXN0YXJ0IFZpbSwgb3Igc2V0IGc6c3BlbGxmaWxlX1VSTCB0byBhbm90aGVyIHZhbHVlIChlLmcuLApwcmVwZW5kIGEgc3BhY2UpLgoKVG8gYXZvaWQgdXNpbmcgdGhlICJzcGVsbGZpbGUudmltIiBwbHVnaW4gZG8gdGhpcyBpbiB5b3VyIHZpbXJjIGZpbGU6ID4KCglsZXQgbG9hZGVkX3NwZWxsZmlsZV9wbHVnaW4gPSAxCgpJbnN0ZWFkIG9mIHVzaW5nIHRoZSBwbHVnaW4geW91IGNhbiBkZWZpbmUgYSB8U3BlbGxGaWxlTWlzc2luZ3wgYXV0b2NvbW1hbmQgdG8KaGFuZGxlIHRoZSBtaXNzaW5nIGZpbGUgeW91cnNlbGYuICBZb3UgY2FuIHVzZSBpdCBsaWtlIHRoaXM6ID4KCgk6YXUgU3BlbGxGaWxlTWlzc2luZyAqIGNhbGwgRG93bmxvYWRfc3BlbGxfZmlsZShleHBhbmQoJzxhbWF0Y2g+JykpCgpUaHVzIHRoZSA8YW1hdGNoPiBpdGVtIGNvbnRhaW5zIHRoZSBuYW1lIG9mIHRoZSBsYW5ndWFnZS4gIEFub3RoZXIgaW1wb3J0YW50CnZhbHVlIGlzICdlbmNvZGluZycsIHNpbmNlIGV2ZXJ5IGVuY29kaW5nIGhhcyBpdHMgb3duIHNwZWxsIGZpbGUuICBXaXRoIHR3bwpleGNlcHRpb25zOgotIEZvciBJU08tODg1OS0xNSAobGF0aW45KSB0aGUgbmFtZSAibGF0aW4xIiBpcyB1c2VkICh0aGUgZW5jb2RpbmdzIG9ubHkKICBkaWZmZXIgaW4gY2hhcmFjdGVycyBub3QgdXNlZCBpbiBkaWN0aW9uYXJ5IHdvcmRzKS4KLSBUaGUgbmFtZSAiYXNjaWkiIG1heSBhbHNvIGJlIHVzZWQgZm9yIHNvbWUgbGFuZ3VhZ2VzIHdoZXJlIHRoZSB3b3JkcyB1c2UKICBvbmx5IEFTQ0lJIGxldHRlcnMgZm9yIG1vc3Qgb2YgdGhlIHdvcmRzLgoKVGhlIGRlZmF1bHQgInNwZWxsZmlsZS52aW0iIHBsdWdpbiB1c2VzIHRoaXMgYXV0b2NvbW1hbmQsIGlmIHlvdSBkZWZpbmUgeW91cgphdXRvY29tbWFuZCBhZnRlcndhcmRzIHlvdSBtYXkgd2FudCB0byB1c2UgIjphdSEgU3BlbGxGaWxlTWlzc2luZyIgdG8gb3ZlcnJ1bGUKaXQuICBJZiB5b3UgZGVmaW5lIHlvdXIgYXV0b2NvbW1hbmQgYmVmb3JlIHRoZSBwbHVnaW4gaXMgbG9hZGVkIGl0IHdpbGwgbm90aWNlCnRoaXMgYW5kIG5vdCBkbyBhbnl0aGluZy4KCQkJCQkJCSpFNzk3KgpOb3RlIHRoYXQgdGhlIFNwZWxsRmlsZU1pc3NpbmcgYXV0b2NvbW1hbmQgbXVzdCBub3QgY2hhbmdlIG9yIGRlc3Ryb3kgdGhlCmJ1ZmZlciB0aGUgdXNlciB3YXMgZWRpdGluZy4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBTcGVsbCBmaWxlIGZvcm1hdAkJCQkJKnNwZWxsLWZpbGUtZm9ybWF0KgoKVGhpcyBpcyB0aGUgZm9ybWF0IG9mIHRoZSBmaWxlcyB0aGF0IGFyZSB1c2VkIGJ5IHRoZSBwZXJzb24gd2hvIGNyZWF0ZXMgYW5kCm1haW50YWlucyBhIHdvcmQgbGlzdC4KCk5vdGUgdGhhdCB3ZSBhdm9pZCB0aGUgd29yZCAiZGljdGlvbmFyeSIgaGVyZS4gIFRoYXQgaXMgYmVjYXVzZSB0aGUgZ29hbCBvZgpzcGVsbCBjaGVja2luZyBkaWZmZXJzIGZyb20gd3JpdGluZyBhIGRpY3Rpb25hcnkgKGFzIGluIHRoZSBib29rKS4gIEZvcgpzcGVsbGluZyB3ZSBuZWVkIGEgbGlzdCBvZiB3b3JkcyB0aGF0IGFyZSBPSywgdGh1cyBzaG91bGQgbm90IGJlIGhpZ2hsaWdodGVkLgpQZXJzb24gYW5kIGNvbXBhbnkgbmFtZXMgd2lsbCBub3QgYXBwZWFyIGluIGEgZGljdGlvbmFyeSwgYnV0IGRvIGFwcGVhciBpbiBhCndvcmQgbGlzdC4gIEFuZCBzb21lIG9sZCB3b3JkcyBhcmUgcmFyZWx5IHVzZWQgd2hpbGUgdGhleSBhcmUgY29tbW9uCm1pc3NwZWxsaW5ncy4gIFRoZXNlIGRvIGFwcGVhciBpbiBhIGRpY3Rpb25hcnkgYnV0IG5vdCBpbiBhIHdvcmQgbGlzdC4KClRoZXJlIGFyZSB0d28gZm9ybWF0czogQSBzdHJhaWdodCBsaXN0IG9mIHdvcmRzIGFuZCBhIGxpc3QgdXNpbmcgYWZmaXgKY29tcHJlc3Npb24uICBUaGUgZmlsZXMgd2l0aCBhZmZpeCBjb21wcmVzc2lvbiBhcmUgdXNlZCBieSBNeXNwZWxsIChNb3ppbGxhCmFuZCBPcGVuT2ZmaWNlLm9yZykuICBUaGlzIHJlcXVpcmVzIHR3byBmaWxlcywgb25lIHdpdGggLmFmZiBhbmQgb25lIHdpdGggLmRpYwpleHRlbnNpb24uCgoKRk9STUFUIE9GIFNUUkFJR0hUIFdPUkQgTElTVAkJCQkqc3BlbGwtd29yZGxpc3QtZm9ybWF0KgoKVGhlIHdvcmRzIG11c3QgYXBwZWFyIG9uZSBwZXIgbGluZS4gIFRoYXQgaXMgYWxsIHRoYXQgaXMgcmVxdWlyZWQuCgpBZGRpdGlvbmFsbHkgdGhlIGZvbGxvd2luZyBpdGVtcyBhcmUgcmVjb2duaXplZDoKCi0gRW1wdHkgYW5kIGJsYW5rIGxpbmVzIGFyZSBpZ25vcmVkLgoKCSMgY29tbWVudCB+Ci0gTGluZXMgc3RhcnRpbmcgd2l0aCBhICMgYXJlIGlnbm9yZWQgKGNvbW1lbnQgbGluZXMpLgoKCS9lbmNvZGluZz11dGYtOCB+Ci0gQSBsaW5lIHN0YXJ0aW5nIHdpdGggIi9lbmNvZGluZz0iLCBiZWZvcmUgYW55IHdvcmQsIHNwZWNpZmllcyB0aGUgZW5jb2RpbmcKICBvZiB0aGUgZmlsZS4gIEFmdGVyIHRoZSBzZWNvbmQgJz0nIGNvbWVzIGFuIGVuY29kaW5nIG5hbWUuICBUaGlzIHRlbGxzIFZpbQogIHRvIHNldHVwIGNvbnZlcnNpb24gZnJvbSB0aGUgc3BlY2lmaWVkIGVuY29kaW5nIHRvICdlbmNvZGluZycuICBUaHVzIHlvdSBjYW4KICB1c2Ugb25lIHdvcmQgbGlzdCBmb3Igc2V2ZXJhbCB0YXJnZXQgZW5jb2RpbmdzLgoKCS9yZWdpb25zPXVzY2EgfgotIEEgbGluZSBzdGFydGluZyB3aXRoICIvcmVnaW9ucz0iIHNwZWNpZmllcyB0aGUgcmVnaW9uIG5hbWVzIHRoYXQgYXJlCiAgc3VwcG9ydGVkLiAgRWFjaCByZWdpb24gbmFtZSBtdXN0IGJlIHR3byBBU0NJSSBsZXR0ZXJzLiAgVGhlIGZpcnN0IG9uZSBpcwogIHJlZ2lvbiAxLiAgVGh1cyAiL3JlZ2lvbnM9dXNjYSIgaGFzIHJlZ2lvbiAxICJ1cyIgYW5kIHJlZ2lvbiAyICJjYSIuCiAgSW4gYW4gYWRkaXRpb24gd29yZCBsaXN0IHRoZSByZWdpb24gbmFtZXMgc2hvdWxkIGJlIGVxdWFsIHRvIHRoZSBtYWluIHdvcmQKICBsaXN0IQoKLSBPdGhlciBsaW5lcyBzdGFydGluZyB3aXRoICcvJyBhcmUgcmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UuICBUaGUgb25lcyB0aGF0CiAgYXJlIG5vdCByZWNvZ25pemVkIGFyZSBpZ25vcmVkLiAgWW91IGRvIGdldCBhIHdhcm5pbmcgbWVzc2FnZSwgc28gdGhhdCB5b3UKICBrbm93IHNvbWV0aGluZyB3b24ndCB3b3JrLgoKLSBBICIvIiBtYXkgZm9sbG93IHRoZSB3b3JkIHdpdGggdGhlIGZvbGxvd2luZyBpdGVtczoKICAgID0JCUNhc2UgbXVzdCBtYXRjaCBleGFjdGx5LgogICAgPwkJUmFyZSB3b3JkLgogICAgIQkJQmFkICh3cm9uZykgd29yZC4KICAgIGRpZ2l0CUEgcmVnaW9uIGluIHdoaWNoIHRoZSB3b3JkIGlzIHZhbGlkLiAgSWYgbm8gcmVnaW9ucyBhcmUKCQlzcGVjaWZpZWQgdGhlIHdvcmQgaXMgdmFsaWQgaW4gYWxsIHJlZ2lvbnMuCgpFeGFtcGxlOgoKCSMgVGhpcyBpcyBhbiBleGFtcGxlIHdvcmQgbGlzdAkJY29tbWVudAoJL2VuY29kaW5nPWxhdGluMQkJCWVuY29kaW5nIG9mIHRoZSBmaWxlCgkvcmVnaW9ucz11c2NhZ2IJCQkJcmVnaW9ucyAidXMiLCAiY2EiIGFuZCAiZ2IiCglleGFtcGxlCQkJCQl3b3JkIGZvciBhbGwgcmVnaW9ucwoJYmxhaC8xMgkJCQkJd29yZCBmb3IgcmVnaW9ucyAidXMiIGFuZCAiY2EiCgl2aW0vIQkJCQkJYmFkIHdvcmQKCUNhbXBiZWxsLz8zCQkJCXJhcmUgd29yZCBpbiByZWdpb24gMyAiZ2IiCgkncyBtb3JuaW5ncy89CQkJCWtlZXAtY2FzZSB3b3JkCgpOb3RlIHRoYXQgd2hlbiAiLz0iIGlzIHVzZWQgdGhlIHNhbWUgd29yZCB3aXRoIGFsbCB1cHBlci1jYXNlIGxldHRlcnMgaXMgbm90CmFjY2VwdGVkLiAgVGhpcyBpcyBkaWZmZXJlbnQgZnJvbSBhIHdvcmQgd2l0aCBtaXhlZCBjYXNlIHRoYXQgaXMgYXV0b21hdGljYWxseQptYXJrZWQgYXMga2VlcC1jYXNlLCB0aG9zZSB3b3JkcyBtYXkgYXBwZWFyIGluIGFsbCB1cHBlci1jYXNlIGxldHRlcnMuCgoKRk9STUFUIFdJVEggLkFGRiBBTkQgLkRJQyBGSUxFUwkJCQkqYWZmLWRpYy1mb3JtYXQqCgpUaGVyZSBhcmUgdHdvIGZpbGVzOiB0aGUgYmFzaWMgd29yZCBsaXN0IGFuZCBhbiBhZmZpeCBmaWxlLiAgVGhlIGFmZml4IGZpbGUKc3BlY2lmaWVzIHNldHRpbmdzIGZvciB0aGUgbGFuZ3VhZ2UgYW5kIGNhbiBjb250YWluIGFmZml4ZXMuICBUaGUgYWZmaXhlcyBhcmUKdXNlZCB0byBtb2RpZnkgdGhlIGJhc2ljIHdvcmRzIHRvIGdldCB0aGUgZnVsbCB3b3JkIGxpc3QuICBUaGlzIHNpZ25pZmljYW50bHkKcmVkdWNlcyB0aGUgbnVtYmVyIG9mIHdvcmRzLCBlc3BlY2lhbGx5IGZvciBhIGxhbmd1YWdlIGxpa2UgUG9saXNoLiAgVGhpcyBpcwpjYWxsZWQgYWZmaXggY29tcHJlc3Npb24uCgpUaGUgYmFzaWMgd29yZCBsaXN0IGFuZCB0aGUgYWZmaXggZmlsZSBhcmUgY29tYmluZWQgd2l0aCB0aGUgIjpta3NwZWxsIgpjb21tYW5kIGFuZCByZXN1bHRzIGluIGEgYmluYXJ5IHNwZWxsIGZpbGUuICBBbGwgdGhlIHByZXByb2Nlc3NpbmcgaGFzIGJlZW4KZG9uZSwgdGh1cyB0aGlzIGZpbGUgbG9hZHMgZmFzdC4gIFRoZSBiaW5hcnkgc3BlbGwgZmlsZSBmb3JtYXQgaXMgZGVzY3JpYmVkIGluCnRoZSBzb3VyY2UgY29kZSAoc3JjL3NwZWxsLmMpLiAgQnV0IG9ubHkgZGV2ZWxvcGVycyBuZWVkIHRvIGtub3cgYWJvdXQgaXQuCgpUaGUgcHJlcHJvY2Vzc2luZyBhbHNvIGFsbG93cyB1cyB0byB0YWtlIHRoZSBNeXNwZWxsIGxhbmd1YWdlIGZpbGVzIGFuZCBtb2RpZnkKdGhlbSBiZWZvcmUgdGhlIFZpbSB3b3JkIGxpc3QgaXMgbWFkZS4gIFRoZSB0b29scyBmb3IgdGhpcyBjYW4gYmUgZm91bmQgaW4gdGhlCiJzcmMvc3BlbGwiIGRpcmVjdG9yeS4KClRoZSBmb3JtYXQgZm9yIHRoZSBhZmZpeCBhbmQgd29yZCBsaXN0IGZpbGVzIGlzIGJhc2VkIG9uIHdoYXQgTXlzcGVsbCB1c2VzCih0aGUgc3BlbGwgY2hlY2tlciBvZiBNb3ppbGxhIGFuZCBPcGVuT2ZmaWNlLm9yZykuICBBIGRlc2NyaXB0aW9uIGNhbiBiZSBmb3VuZApoZXJlOgoJaHR0cDovL2xpbmd1Y29tcG9uZW50Lm9wZW5vZmZpY2Uub3JnL2FmZml4LnJlYWRtZSB+Ck5vdGUgdGhhdCBhZmZpeGVzIGFyZSBjYXNlIHNlbnNpdGl2ZSwgdGhpcyBpc24ndCBvYnZpb3VzIGZyb20gdGhlIGRlc2NyaXB0aW9uLgoKVmltIHN1cHBvcnRzIHF1aXRlIGEgZmV3IGV4dHJhcy4gIFRoZXkgYXJlIGRlc2NyaWJlZCBiZWxvdyB8c3BlbGwtYWZmaXgtdmltfC4KQXR0ZW1wdHMgaGF2ZSBiZWVuIG1hZGUgdG8ga2VlcCB0aGlzIGNvbXBhdGlibGUgd2l0aCBvdGhlciBzcGVsbCBjaGVja2Vycywgc28KdGhhdCB0aGUgc2FtZSBmaWxlcyBjYW4gb2Z0ZW4gYmUgdXNlZC4gIE9uZSBvdGhlciBwcm9qZWN0IHRoYXQgb2ZmZXJzIG1vcmUKdGhhbiBNeXNwZWxsIGlzIEh1bnNwZWxsICggaHR0cDovL2h1bnNwZWxsLnNmLm5ldCApLgoKCldPUkQgTElTVCBGT1JNQVQJCQkJKnNwZWxsLWRpYy1mb3JtYXQqCgpBIHNob3J0IGV4YW1wbGUsIHdpdGggbGluZSBudW1iZXJzOgoKCTEJMTIzNCB+CgkyCWFhbiB+CgkzCUFscyB+Cgk0CUV0dGVuLUxldXIgfgoJNQlldCBhbC4gfgoJNgkncy1HcmF2ZW5oYWdlIH4KCTcJJ3MtR3JhdmVuaGFhZ3MgfgoJOAkjIHdvcmQgdGhhdCBkaWZmZXJzIGJldHdlZW4gcmVnaW9ucyB+Cgk5CWthZG8vMSB+CgkxMAljYWRlYXUvMiB+CgkxMQlUQ1AsSVAgfgoJMTIJL3RoZSBTIGFmZml4IG1heSBhZGQgYSAncycgfgoJMTMJYmVkZWwvUyB+CgpUaGUgZmlyc3QgbGluZSBjb250YWlucyB0aGUgbnVtYmVyIG9mIHdvcmRzLiAgVmltIGlnbm9yZXMgaXQsIGJ1dCB5b3UgZG8gZ2V0CmFuIGVycm9yIG1lc3NhZ2UgaWYgaXQncyBub3QgdGhlcmUuICAqRTc2MCoKCldoYXQgZm9sbG93cyBpcyBvbmUgd29yZCBwZXIgbGluZS4gIFdoaXRlIHNwYWNlIGF0IHRoZSBlbmQgb2YgdGhlIGxpbmUgaXMKaWdub3JlZCwgYWxsIG90aGVyIHdoaXRlIHNwYWNlIG1hdHRlcnMuICBUaGUgZW5jb2RpbmcgaXMgc3BlY2lmaWVkIGluIHRoZQphZmZpeCBmaWxlIHxzcGVsbC1TRVR8LgoKQ29tbWVudCBsaW5lcyBzdGFydCB3aXRoICcjJyBvciAnLycuICBTZWUgdGhlIGV4YW1wbGUgbGluZXMgOCBhbmQgMTIuICBOb3RlCnRoYXQgcHV0dGluZyBhIGNvbW1lbnQgYWZ0ZXIgYSB3b3JkIGlzIE5PVCBhbGxvd2VkOgoKCQlzb21ld29yZCAgICMgY29tbWVudCB0aGF0IGNhdXNlcyBhbiBlcnJvciEgfgoKQWZ0ZXIgdGhlIHdvcmQgdGhlcmUgaXMgYW4gb3B0aW9uYWwgc2xhc2ggYW5kIGZsYWdzLiAgTW9zdCBvZiB0aGVzZSBmbGFncyBhcmUKbGV0dGVycyB0aGF0IGluZGljYXRlIHRoZSBhZmZpeGVzIHRoYXQgY2FuIGJlIHVzZWQgd2l0aCB0aGlzIHdvcmQuICBUaGVzZSBhcmUKc3BlY2lmaWVkIHdpdGggU0ZYIGFuZCBQRlggbGluZXMgaW4gdGhlIC5hZmYgZmlsZSwgc2VlIHxzcGVsbC1TRlh8IGFuZAp8c3BlbGwtUEZYfC4gIFZpbSBhbGxvd3MgdXNpbmcgb3RoZXIgZmxhZyB0eXBlcyB3aXRoIHRoZSBGTEFHIGl0ZW0gaW4gdGhlCmFmZml4IGZpbGUgfHNwZWxsLUZMQUd8LgoKV2hlbiB0aGUgd29yZCBvbmx5IGhhcyBsb3dlci1jYXNlIGxldHRlcnMgaXQgd2lsbCBhbHNvIG1hdGNoIHdpdGggdGhlIHdvcmQKc3RhcnRpbmcgd2l0aCBhbiB1cHBlci1jYXNlIGxldHRlci4KCldoZW4gdGhlIHdvcmQgaW5jbHVkZXMgYW4gdXBwZXItY2FzZSBsZXR0ZXIsIHRoaXMgbWVhbnMgdGhlIHVwcGVyLWNhc2UgbGV0dGVyCmlzIHJlcXVpcmVkIGF0IHRoaXMgcG9zaXRpb24uICBUaGUgc2FtZSB3b3JkIHdpdGggYSBsb3dlci1jYXNlIGxldHRlciBhdCB0aGlzCnBvc2l0aW9uIHdpbGwgbm90IG1hdGNoLiBXaGVuIHNvbWUgb2YgdGhlIG90aGVyIGxldHRlcnMgYXJlIHVwcGVyLWNhc2UgaXQgd2lsbApub3QgbWF0Y2ggZWl0aGVyLgoKVGhlIHdvcmQgd2l0aCBhbGwgdXBwZXItY2FzZSBjaGFyYWN0ZXJzIHdpbGwgYWx3YXlzIGJlIE9LLAoKCXdvcmQgbGlzdAltYXRjaGVzCQkJZG9lcyBub3QgbWF0Y2ggfgoJYWxzCQlhbHMgQWxzIEFMUwkJQUxzIEFsUyBhTHMgYUxTCglBbHMJCUFscyAgQUxTCQlhbHMgQUxzIEFsUyBhTHMgYUxTCglBTFMJCUFMUwkJCWFscyBBbHMgQUxzIEFsUyBhTHMgYUxTCglBbFMJCUFsUyBBTFMJCQlhbHMgQWxzIEFMcyBhTHMgYUxTCgpUaGUgS0VFUENBU0UgYWZmaXggSUQgY2FuIGJlIHVzZWQgdG8gc3BlY2lmaWNhbGx5IG1hdGNoIGEgd29yZCB3aXRoIGlkZW50aWNhbApjYXNlIG9ubHksIHNlZSBiZWxvdyB8c3BlbGwtS0VFUENBU0V8LgoKTm90ZTogaW4gbGluZSA1IHRvIDcgbm9uLXdvcmQgY2hhcmFjdGVycyBhcmUgdXNlZC4gIFlvdSBjYW4gaW5jbHVkZSBhbnkKY2hhcmFjdGVyIGluIGEgd29yZC4gIFdoZW4gY2hlY2tpbmcgdGhlIHRleHQgYSB3b3JkIHN0aWxsIG9ubHkgbWF0Y2hlcyB3aGVuIGl0CmFwcGVhcnMgd2l0aCBhIG5vbi13b3JkIGNoYXJhY3RlciBiZWZvcmUgYW5kIGFmdGVyIGl0LiAgRm9yIE15c3BlbGwgYSB3b3JkCnN0YXJ0aW5nIHdpdGggYSBub24td29yZCBjaGFyYWN0ZXIgcHJvYmFibHkgd29uJ3Qgd29yay4KCkluIGxpbmUgMTIgdGhlIHdvcmQgIlRDUC9JUCIgaXMgZGVmaW5lZC4gIFNpbmNlIHRoZSBzbGFzaCBoYXMgYSBzcGVjaWFsCm1lYW5pbmcgdGhlIGNvbW1hIGlzIHVzZWQgaW5zdGVhZC4gIFRoaXMgaXMgZGVmaW5lZCB3aXRoIHRoZSBTTEFTSCBpdGVtIGluIHRoZQphZmZpeCBmaWxlLCBzZWUgfHNwZWxsLVNMQVNIfC4gIE5vdGUgdGhhdCB3aXRob3V0IHRoaXMgU0xBU0ggaXRlbSB0aGUgd29yZAp3aWxsIGJlICJUQ1AsSVAiLgoKCkFGRklYIEZJTEUgRk9STUFUCQkJKnNwZWxsLWFmZi1mb3JtYXQqICpzcGVsbC1hZmZpeC12aW0qCgoJCQkJCQkJKnNwZWxsLWFmZml4LWNvbW1lbnQqCkNvbW1lbnQgbGluZXMgaW4gdGhlIC5hZmYgZmlsZSBzdGFydCB3aXRoIGEgJyMnOgoKCSMgY29tbWVudCBsaW5lIH4KCkl0ZW1zIHdpdGggYSBmaXhlZCBudW1iZXIgb2YgYXJndW1lbnRzIGNhbiBiZSBmb2xsb3dlZCBieSBhIGNvbW1lbnQuICBCdXQgb25seQppZiBub25lIG9mIHRoZSBhcmd1bWVudHMgY2FuIGNvbnRhaW4gd2hpdGUgc3BhY2UuICBUaGUgY29tbWVudCBtdXN0IHN0YXJ0IHdpdGgKYSAiIyIgY2hhcmFjdGVyLiAgRXhhbXBsZToKCglLRUVQQ0FTRSA9ICAjIGZpeCBjYXNlIGZvciB3b3JkcyB3aXRoIHRoaXMgZmxhZyB+CgoKRU5DT0RJTkcJCQkJCQkJKnNwZWxsLVNFVCoKClRoZSBhZmZpeCBmaWxlIGNhbiBiZSBpbiBhbnkgZW5jb2RpbmcgdGhhdCBpcyBzdXBwb3J0ZWQgYnkgImljb252Ii4gIEhvd2V2ZXIsCmluIHNvbWUgY2FzZXMgdGhlIGN1cnJlbnQgbG9jYWxlIHNob3VsZCBhbHNvIGJlIHNldCBwcm9wZXJseSBhdCB0aGUgdGltZQp8Om1rc3BlbGx8IGlzIGludm9rZWQuICBBZGRpbmcgRk9ML0xPVy9VUFAgbGluZXMgcmVtb3ZlcyB0aGlzIHJlcXVpcmVtZW50CnxzcGVsbC1GT0x8LgoKVGhlIGVuY29kaW5nIHNob3VsZCBiZSBzcGVjaWZpZWQgYmVmb3JlIGFueXRoaW5nIHdoZXJlIHRoZSBlbmNvZGluZyBtYXR0ZXJzLgpUaGUgZW5jb2RpbmcgYXBwbGllcyBib3RoIHRvIHRoZSBhZmZpeCBmaWxlIGFuZCB0aGUgZGljdGlvbmFyeSBmaWxlLiAgSXQgaXMKZG9uZSB3aXRoIGEgU0VUIGxpbmU6CgoJU0VUIHV0Zi04IH4KClRoZSBlbmNvZGluZyBjYW4gYmUgZGlmZmVyZW50IGZyb20gdGhlIHZhbHVlIG9mIHRoZSAnZW5jb2RpbmcnIG9wdGlvbiBhdCB0aGUKdGltZSAiOm1rc3BlbGwiIGlzIHVzZWQuICBWaW0gd2lsbCB0aGVuIGNvbnZlcnQgZXZlcnl0aGluZyB0byAnZW5jb2RpbmcnIGFuZApnZW5lcmF0ZSBhIHNwZWxsIGZpbGUgZm9yICdlbmNvZGluZycuICBJZiBzb21lIG9mIHRoZSB1c2VkIGNoYXJhY3RlcnMgdG8gbm90CmZpdCBpbiAnZW5jb2RpbmcnIHlvdSB3aWxsIGdldCBhbiBlcnJvciBtZXNzYWdlLgoJCQkJCQkJKnNwZWxsLWFmZml4LW1ieXRlKgpXaGVuIHVzaW5nIGEgbXVsdGktYnl0ZSBlbmNvZGluZyBpdCdzIHBvc3NpYmxlIHRvIHVzZSBtb3JlIGRpZmZlcmVudCBhZmZpeApmbGFncy4gIEJ1dCBNeXNwZWxsIGRvZXNuJ3Qgc3VwcG9ydCB0aGF0LCB0aHVzIHlvdSBtYXkgbm90IHdhbnQgdG8gdXNlIGl0CmFueXdheS4gIEZvciBjb21wYXRpYmlsaXR5IHVzZSBhbiA4LWJpdCBlbmNvZGluZy4KCgpJTkZPUk1BVElPTgoKVGhlc2UgZW50cmllcyBpbiB0aGUgYWZmaXggZmlsZSBjYW4gYmUgdXNlZCB0byBhZGQgaW5mb3JtYXRpb24gdG8gdGhlIHNwZWxsCmZpbGUuICBUaGVyZSBhcmUgbm8gcmVzdHJpY3Rpb25zIG9uIHRoZSBmb3JtYXQsIGJ1dCB0aGV5IHNob3VsZCBiZSBpbiB0aGUKcmlnaHQgZW5jb2RpbmcuCgoJCQkJKnNwZWxsLU5BTUUqICpzcGVsbC1WRVJTSU9OKiAqc3BlbGwtSE9NRSoKCQkJCSpzcGVsbC1BVVRIT1IqICpzcGVsbC1FTUFJTCogKnNwZWxsLUNPUFlSSUdIVCoKCU5BTUUJCU5hbWUgb2YgdGhlIGxhbmd1YWdlCglWRVJTSU9OCQkxLjAuMSAgd2l0aCBmaXhlcwoJSE9NRQkJaHR0cDovL3d3dy5teWhvbWUuZXUKCUFVVEhPUgkJSm9obiBEb2UKCUVNQUlMCQlqb2huIEFUIERvZSBET1QgbmV0CglDT1BZUklHSFQJTEdQTAoKVGhlc2UgZmllbGRzIGFyZSBwdXQgaW4gdGhlIC5zcGwgZmlsZSBhcy1pcy4gIFRoZSB8OnNwZWxsaW5mb3wgY29tbWFuZCBjYW4gYmUKdXNlZCB0byB2aWV3IHRoZSBpbmZvLgoKCQkJCQkJCSo6c3BlbGxpbmZvKiAqOnNwZWxsaSoKOnNwZWxsaVtuZm9dCQlEaXNwbGF5IHRoZSBpbmZvcm1hdGlvbiBmb3IgdGhlIHNwZWxsIGZpbGUocykgdXNlZCBmb3IKCQkJdGhlIGN1cnJlbnQgYnVmZmVyLgoKCkNIQVJBQ1RFUiBUQUJMRVMKCQkJCQkJCSpzcGVsbC1hZmZpeC1jaGFycyoKV2hlbiB1c2luZyBhbiA4LWJpdCBlbmNvZGluZyB0aGUgYWZmaXggZmlsZSBzaG91bGQgZGVmaW5lIHdoYXQgY2hhcmFjdGVycyBhcmUKd29yZCBjaGFyYWN0ZXJzLiAgVGhpcyBpcyBiZWNhdXNlIHRoZSBzeXN0ZW0gd2hlcmUgIjpta3NwZWxsIiBpcyB1c2VkIG1heSBub3QKc3VwcG9ydCBhIGxvY2FsZSB3aXRoIHRoaXMgZW5jb2RpbmcgYW5kIGlzYWxwaGEoKSB3b24ndCB3b3JrLiAgRm9yIGV4YW1wbGUKd2hlbiB1c2luZyAiY3AxMjUwIiBvbiBVbml4LgoJCQkJCQkqRTc2MSogKkU3NjIqICpzcGVsbC1GT0wqCgkJCQkJCSpzcGVsbC1MT1cqICpzcGVsbC1VUFAqClRocmVlIGxpbmVzIGluIHRoZSBhZmZpeCBmaWxlIGFyZSBuZWVkZWQuICBTaW1wbGlzdGljIGV4YW1wbGU6CgoJRk9MICDh6/EgfgoJTE9XICDh6/EgfgoJVVBQICDBy9EgfgoKQWxsIHRocmVlIGxpbmVzIG11c3QgaGF2ZSBleGFjdGx5IHRoZSBzYW1lIG51bWJlciBvZiBjaGFyYWN0ZXJzLgoKVGhlICJGT0wiIGxpbmUgc3BlY2lmaWVzIHRoZSBjYXNlLWZvbGRlZCBjaGFyYWN0ZXJzLiAgVGhlc2UgYXJlIHVzZWQgdG8KY29tcGFyZSB3b3JkcyB3aGlsZSBpZ25vcmluZyBjYXNlLiAgRm9yIG1vc3QgZW5jb2RpbmdzIHRoaXMgaXMgaWRlbnRpY2FsIHRvCnRoZSBsb3dlciBjYXNlIGxpbmUuCgpUaGUgIkxPVyIgbGluZSBzcGVjaWZpZXMgdGhlIGNoYXJhY3RlcnMgaW4gbG93ZXItY2FzZS4gIE1vc3RseSBpdCdzIGVxdWFsIHRvCnRoZSAiRk9MIiBsaW5lLgoKVGhlICJVUFAiIGxpbmUgc3BlY2lmaWVzIHRoZSBjaGFyYWN0ZXJzIHdpdGggdXBwZXItY2FzZS4gIFRoYXQgaXMsIGEgY2hhcmFjdGVyCmlzIHVwcGVyLWNhc2Ugd2hlcmUgaXQncyBkaWZmZXJlbnQgZnJvbSB0aGUgY2hhcmFjdGVyIGF0IHRoZSBzYW1lIHBvc2l0aW9uIGluCiJGT0wiLgoKQW4gZXhjZXB0aW9uIGlzIG1hZGUgZm9yIHRoZSBHZXJtYW4gc2hhcnAgcyDfLiAgVGhlIHVwcGVyLWNhc2UgdmVyc2lvbiBpcwoiU1MiLiAgSW4gdGhlIEZPTC9MT1cvVVBQIGxpbmVzIGl0IHNob3VsZCBiZSBpbmNsdWRlZCwgc28gdGhhdCBpdCdzIHJlY29nbml6ZWQKYXMgYSB3b3JkIGNoYXJhY3RlciwgYnV0IHVzZSB0aGUg3yBjaGFyYWN0ZXIgaW4gYWxsIHRocmVlLgoKQVNDSUkgY2hhcmFjdGVycyBzaG91bGQgYmUgb21pdHRlZCwgVmltIGFsd2F5cyBoYW5kbGVzIHRoZXNlIGluIHRoZSBzYW1lIHdheS4KV2hlbiB0aGUgZW5jb2RpbmcgaXMgVVRGLTggbm8gd29yZCBjaGFyYWN0ZXJzIG5lZWQgdG8gYmUgc3BlY2lmaWVkLgoKCQkJCQkJCSpFNzYzKgpWaW0gYWxsb3dzIHlvdSB0byB1c2Ugc3BlbGwgY2hlY2tpbmcgZm9yIHNldmVyYWwgbGFuZ3VhZ2VzIGluIHRoZSBzYW1lIGZpbGUuCllvdSBjYW4gbGlzdCB0aGVtIGluIHRoZSAnc3BlbGxsYW5nJyBvcHRpb24uICBBcyBhIGNvbnNlcXVlbmNlIGFsbCBzcGVsbCBmaWxlcwpmb3IgdGhlIHNhbWUgZW5jb2RpbmcgbXVzdCB1c2UgdGhlIHNhbWUgd29yZCBjaGFyYWN0ZXJzLCBvdGhlcndpc2UgdGhleSBjYW4ndApiZSBjb21iaW5lZCB3aXRob3V0IGVycm9ycy4KCklmIHlvdSBnZXQgYW4gRTc2MyB3YXJuaW5nIHRoYXQgdGhlIHdvcmQgdGFibGVzIGRpZmZlciB5b3UgbmVlZCB0byB1cGRhdGUgeW91cgoiLnNwbCIgc3BlbGwgZmlsZXMuICBJZiB5b3UgZG93bmxvYWRlZCB0aGUgZmlsZXMsIGdldCB0aGUgbGF0ZXN0IHZlcnNpb24gb2YKYWxsIHNwZWxsIGZpbGVzIHlvdSB1c2UuICBJZiB5b3UgYXJlIG9ubHkgdXNpbmcgb25lLCBlLmcuLCBHZXJtYW4sIHRoZW4gYWxzbwpkb3dubG9hZCB0aGUgcmVjZW50IEVuZ2xpc2ggc3BlbGwgZmlsZXMuICBPdGhlcndpc2UgZ2VuZXJhdGUgdGhlIC5zcGwgZmlsZQphZ2FpbiB3aXRoIHw6bWtzcGVsbHwuICBJZiB5b3Ugc3RpbGwgZ2V0IGVycm9ycyBjaGVjayB0aGUgRk9MLCBMT1cgYW5kIFVQUApsaW5lcyBpbiB0aGUgdXNlZCAuYWZmIGZpbGVzLgoKVGhlIFhYLmFzY2lpLnNwbCBzcGVsbCBmaWxlIGdlbmVyYXRlZCB3aXRoIHRoZSAiLWFzY2lpIiBhcmd1bWVudCB3aWxsIG5vdApjb250YWluIHRoZSB0YWJsZSB3aXRoIGNoYXJhY3RlcnMsIHNvIHRoYXQgaXQgY2FuIGJlIGNvbWJpbmUgd2l0aCBzcGVsbCBmaWxlcwpmb3IgYW55IGVuY29kaW5nLiAgVGhlIC5hZGQuc3BsIGZpbGVzIGFsc28gZG8gbm90IGNvbnRhaW4gdGhlIHRhYmxlLgoKCk1JRC1XT1JEIENIQVJBQ1RFUlMKCQkJCQkJCSpzcGVsbC1taWR3b3JkKgpTb21lIGNoYXJhY3RlcnMgYXJlIG9ubHkgdG8gYmUgY29uc2lkZXJlZCB3b3JkIGNoYXJhY3RlcnMgaWYgdGhleSBhcmUgdXNlZCBpbgpiZXR3ZWVuIHR3byBvcmRpbmFyeSB3b3JkIGNoYXJhY3RlcnMuICBBbiBleGFtcGxlIGlzIHRoZSBzaW5nbGUgcXVvdGU6IEl0IGlzCm9mdGVuIHVzZWQgdG8gcHV0IHRleHQgaW4gcXVvdGVzLCB0aHVzIGl0IGNhbid0IGJlIHJlY29nbml6ZWQgYXMgYSB3b3JkCmNoYXJhY3RlciwgYnV0IHdoZW4gaXQgYXBwZWFycyBpbiBiZXR3ZWVuIHdvcmQgY2hhcmFjdGVycyBpdCBtdXN0IGJlIHBhcnQgb2YKdGhlIHdvcmQuICBUaGlzIGlzIG5lZWRlZCB0byBkZXRlY3QgYSBzcGVsbGluZyBlcnJvciBzdWNoIGFzIHRoZXknYXJlLiAgVGhhdApzaG91bGQgYmUgdGhleSdyZSwgYnV0IHNpbmNlICJ0aGV5IiBhbmQgImFyZSIgYXJlIHdvcmRzIHRoZW1zZWx2ZXMgdGhhdCB3b3VsZApnbyB1bm5vdGljZWQuCgpUaGVzZSBjaGFyYWN0ZXJzIGFyZSBkZWZpbmVkIHdpdGggTUlEV09SRCBpbiB0aGUgLmFmZiBmaWxlLiAgRXhhbXBsZToKCglNSURXT1JECSctIH4KCgpGTEFHIFRZUEVTCQkJCQkJKnNwZWxsLUZMQUcqCgpGbGFncyBhcmUgdXNlZCB0byBzcGVjaWZ5IHRoZSBhZmZpeGVzIHRoYXQgY2FuIGJlIHVzZWQgd2l0aCBhIHdvcmQgYW5kIGZvcgpvdGhlciBwcm9wZXJ0aWVzIG9mIHRoZSB3b3JkLiAgTm9ybWFsbHkgc2luZ2xlLWNoYXJhY3RlciBmbGFncyBhcmUgdXNlZC4gIFRoaXMKbGltaXRzIHRoZSBudW1iZXIgb2YgcG9zc2libGUgZmxhZ3MsIGVzcGVjaWFsbHkgZm9yIDgtYml0IGVuY29kaW5ncy4gIFRoZSBGTEFHCml0ZW0gY2FuIGJlIHVzZWQgaWYgbW9yZSBhZmZpeGVzIGFyZSB0byBiZSB1c2VkLiAgUG9zc2libGUgdmFsdWVzOgoKCUZMQUcgbG9uZwl1c2UgdHdvLWNoYXJhY3RlciBmbGFncwoJRkxBRyBudW0JdXNlIG51bWJlcnMsIGZyb20gMSB1cCB0byA2NTAwMAoJRkxBRyBjYXBsb25nCXVzZSBvbmUtY2hhcmFjdGVyIGZsYWdzIHdpdGhvdXQgQS1aIGFuZCB0d28tY2hhcmFjdGVyCgkJCWZsYWdzIHRoYXQgc3RhcnQgd2l0aCBBLVoKCldpdGggIkZMQUcgbnVtIiB0aGUgbnVtYmVycyBpbiBhIGxpc3Qgb2YgYWZmaXhlcyBuZWVkIHRvIGJlIHNlcGFyYXRlZCB3aXRoIGEKY29tbWE6ICIyMzQsMjE0MywxNDM1Ii4gIFRoaXMgbWV0aG9kIGlzIGluZWZmaWNpZW50LCBidXQgdXNlZnVsIGlmIHRoZSBmaWxlIGlzCmdlbmVyYXRlZCB3aXRoIGEgcHJvZ3JhbS4KCldoZW4gdXNpbmcgImNhcGxvbmciIHRoZSB0d28tY2hhcmFjdGVyIGZsYWdzIGFsbCBzdGFydCB3aXRoIGEgY2FwaXRhbDogIkFhIiwKIkIxIiwgIkJCIiwgZXRjLiAgVGhpcyBpcyB1c2VmdWwgdG8gdXNlIG9uZS1jaGFyYWN0ZXIgZmxhZ3MgZm9yIHRoZSBtb3N0CmNvbW1vbiBpdGVtcyBhbmQgdHdvLWNoYXJhY3RlciBmbGFncyBmb3IgdW5jb21tb24gaXRlbXMuCgpOb3RlOiBXaGVuIHVzaW5nIHV0Zi04IG9ubHkgY2hhcmFjdGVycyB1cCB0byA2NTAwMCBtYXkgYmUgdXNlZCBmb3IgZmxhZ3MuCgpOb3RlOiBldmVuIHdoZW4gdXNpbmcgIm51bSIgb3IgImxvbmciIHRoZSBudW1iZXIgb2YgZmxhZ3MgYXZhaWxhYmxlIHRvCmNvbXBvdW5kaW5nIGFuZCBwcmVmaXhlcyBpcyBsaW1pdGVkIHRvIGFib3V0IDI1MC4KCgpBRkZJWEVTCgkJCQkJICAgICpzcGVsbC1QRlgqICpzcGVsbC1TRlgqClRoZSB1c3VhbCBQRlggKHByZWZpeCkgYW5kIFNGWCAoc3VmZml4KSBsaW5lcyBhcmUgc3VwcG9ydGVkIChzZWUgdGhlIE15c3BlbGwKZG9jdW1lbnRhdGlvbiBvciB0aGUgQXNwZWxsIG1hbnVhbDoKaHR0cDovL2FzcGVsbC5uZXQvbWFuLWh0bWwvQWZmaXgtQ29tcHJlc3Npb24uaHRtbCkuCgpTdW1tYXJ5OgoJU0ZYIEwgWSAyIH4KCVNGWCBMIDAgcmUgW154XSB+CglTRlggTCAwIHJvIHggfgoKVGhlIGZpcnN0IGxpbmUgaXMgYSBoZWFkZXIgYW5kIGhhcyBmb3VyIGZpZWxkczoKCVNGWCB7ZmxhZ30ge2NvbWJpbmV9IHtjb3VudH0KCntmbGFnfQkJVGhlIG5hbWUgdXNlZCBmb3IgdGhlIHN1ZmZpeC4gIE1vc3RseSBpdCdzIGEgc2luZ2xlIGxldHRlciwKCQlidXQgb3RoZXIgY2hhcmFjdGVycyBjYW4gYmUgdXNlZCwgc2VlIHxzcGVsbC1GTEFHfC4KCntjb21iaW5lfQlDYW4gYmUgJ1knIG9yICdOJy4gIFdoZW4gJ1knIHRoZW4gdGhlIHdvcmQgcGx1cyBzdWZmaXggY2FuCgkJYWxzbyBoYXZlIGEgcHJlZml4LiAgV2hlbiAnTicgdGhlbiBhIHByZWZpeCBpcyBub3QgYWxsb3dlZC4KCntjb3VudH0JCVRoZSBudW1iZXIgb2YgbGluZXMgZm9sbG93aW5nLiAgSWYgdGhpcyBpcyB3cm9uZyB5b3Ugd2lsbCBnZXQKCQlhbiBlcnJvciBtZXNzYWdlLgoKRm9yIFBGWCB0aGUgZmllbGRzIGFyZSBleGFjdGx5IHRoZSBzYW1lLgoKVGhlIGJhc2ljIGZvcm1hdCBmb3IgdGhlIGZvbGxvd2luZyBsaW5lcyBpczoKCVNGWCB7ZmxhZ30ge3N0cmlwfSB7YWRkfSB7Y29uZGl0aW9ufSB7ZXh0cmF9Cgp7ZmxhZ30JCU11c3QgYmUgdGhlIHNhbWUgYXMgdGhlIHtmbGFnfSB1c2VkIGluIHRoZSBmaXJzdCBsaW5lLgoKe3N0cmlwfQkJQ2hhcmFjdGVycyByZW1vdmVkIGZyb20gdGhlIGJhc2ljIHdvcmQuICBUaGVyZSBpcyBubyBjaGVjayBpZgoJCXRoZSBjaGFyYWN0ZXJzIGFyZSBhY3R1YWxseSB0aGVyZSwgb25seSB0aGUgbGVuZ3RoIGlzIHVzZWQgKGluCgkJYnl0ZXMpLiAgVGhpcyBiZXR0ZXIgbWF0Y2ggdGhlIHtjb25kaXRpb259LCBvdGhlcndpc2Ugc3RyYW5nZQoJCXRoaW5ncyBtYXkgaGFwcGVuLiAgSWYgdGhlIHtzdHJpcH0gbGVuZ3RoIGlzIGVxdWFsIHRvIG9yCgkJbG9uZ2VyIHRoYW4gdGhlIGJhc2ljIHdvcmQgdGhlIHN1ZmZpeCB3b24ndCBiZSB1c2VkLgoJCVdoZW4ge3N0cmlwfSBpcyAwICh6ZXJvKSB0aGVuIG5vdGhpbmcgaXMgc3RyaXBwZWQuCgp7YWRkfQkJQ2hhcmFjdGVycyBhZGRlZCB0byB0aGUgYmFzaWMgd29yZCwgYWZ0ZXIgcmVtb3Zpbmcge3N0cmlwfS4KCQlPcHRpb25hbGx5IHRoZXJlIGlzIGEgJy8nIGZvbGxvd2VkIGJ5IGZsYWdzLiAgVGhlIGZsYWdzIGFwcGx5CgkJdG8gdGhlIHdvcmQgcGx1cyBhZmZpeC4gIFNlZSB8c3BlbGwtYWZmaXgtZmxhZ3N8Cgp7Y29uZGl0aW9ufQlBIHNpbXBsaXN0aWMgcGF0dGVybi4gIE9ubHkgd2hlbiB0aGlzIG1hdGNoZXMgd2l0aCBhIGJhc2ljCgkJd29yZCB3aWxsIHRoZSBzdWZmaXggYmUgdXNlZCBmb3IgdGhhdCB3b3JkLiAgVGhpcyBpcyBub3JtYWxseQoJCWZvciB1c2luZyBvbmUgc3VmZml4IGxldHRlciB3aXRoIGRpZmZlcmVudCB7YWRkfSBhbmQge3N0cmlwfQoJCWZpZWxkcyBmb3Igd29yZHMgd2l0aCBkaWZmZXJlbnQgZW5kaW5ncy4KCQlXaGVuIHtjb25kaXRpb259IGlzIGEgLiAoZG90KSB0aGVyZSBpcyBubyBjb25kaXRpb24uCgkJVGhlIHBhdHRlcm4gbWF5IGNvbnRhaW46CgkJLSBMaXRlcmFsIGNoYXJhY3RlcnMuCgkJLSBBIHNldCBvZiBjaGFyYWN0ZXJzIGluIFtdLiBbYWJjXSBtYXRjaGVzIGEsIGIgYW5kIGMuCgkJICBBIGRhc2ggaXMgYWxsb3dlZCBmb3IgYSByYW5nZSBbYS1jXSwgYnV0IHRoaXMgaXMKCQkgIFZpbS1zcGVjaWZpYy4KCQktIEEgc2V0IG9mIGNoYXJhY3RlcnMgdGhhdCBzdGFydHMgd2l0aCBhIF4sIG1lYW5pbmcgdGhlCgkJICBjb21wbGVtZW50IG9mIHRoZSBzcGVjaWZpZWQgY2hhcmFjdGVycy4gW15hYmNdIG1hdGNoZXMgYW55CgkJICBjaGFyYWN0ZXIgYnV0IGEsIGIgYW5kIGMuCgp7ZXh0cmF9CQlPcHRpb25hbCBleHRyYSB0ZXh0OgoJCSAgICAjIGNvbW1lbnQJCUNvbW1lbnQgaXMgaWdub3JlZAoJCSAgICAtCQkJSHVuc3BlbGwgdXNlcyB0aGlzLCBpZ25vcmVkCgpGb3IgUEZYIHRoZSBmaWVsZHMgYXJlIHRoZSBzYW1lLCBidXQgdGhlIHtzdHJpcH0sIHthZGR9IGFuZCB7Y29uZGl0aW9ufSBhcHBseQp0byB0aGUgc3RhcnQgb2YgdGhlIHdvcmQuCgpOb3RlOiBNeXNwZWxsIGlnbm9yZXMgYW55IGV4dHJhIHRleHQgYWZ0ZXIgdGhlIHJlbGV2YW50IGluZm8uICBWaW0gcmVxdWlyZXMKdGhpcyB0ZXh0IHRvIHN0YXJ0IHdpdGggYSAiIyIgc28gdGhhdCBtaXN0YWtlcyBkb24ndCBnbyB1bm5vdGljZWQuICBFeGFtcGxlOgoKCVNGWCBGIDAgaW4gICBbXmldbiAgICAgICMgU3Bpb24gPiBTcGlvbmluICB+CglTRlggRiAwIG5lbiAgaW4JCSMgQmF1ZXJpbiA+IEJhdWVyaW5uZW4gfgoKSG93ZXZlciwgdG8gYXZvaWQgbG90cyBvZiBlcnJvcnMgaW4gYWZmaXggZmlsZXMgd3JpdHRlbiBmb3IgTXlzcGVsbCwgeW91IGNhbgphZGQgdGhlIElHTk9SRUVYVFJBIGZsYWcuCgpBcHBhcmVudGx5IE15c3BlbGwgYWxsb3dzIGFuIGFmZml4IG5hbWUgdG8gYXBwZWFyIG1vcmUgdGhhbiBvbmNlLiAgU2luY2UgdGhpcwptaWdodCBhbHNvIGJlIGEgbWlzdGFrZSwgVmltIGNoZWNrcyBmb3IgYW4gZXh0cmEgIlMiLiAgVGhlIGFmZml4IGZpbGVzIGZvcgpNeXNwZWxsIHRoYXQgdXNlIHRoaXMgZmVhdHVyZSBhcHBhcmVudGx5IGhhdmUgdGhpcyBmbGFnLiAgRXhhbXBsZToKCglTRlggYSBZIDEgUyB+CglTRlggYSAwIGFuIC4gfgoKCVNGWCBhIFkgMiBTIH4KCVNGWCBhIDAgZW4gLiB+CglTRlggYSAwIG9uIC4gfgoKCkFGRklYIEZMQUdTCQkJCQkJKnNwZWxsLWFmZml4LWZsYWdzKgoKVGhpcyBpcyBhIGZlYXR1cmUgdGhhdCBjb21lcyBmcm9tIEh1bnNwZWxsOiBUaGUgYWZmaXggbWF5IHNwZWNpZnkgZmxhZ3MuICBUaGlzCndvcmtzIHNpbWlsYXIgdG8gZmxhZ3Mgc3BlY2lmaWVkIG9uIGEgYmFzaWMgd29yZC4gIFRoZSBmbGFncyBhcHBseSB0byB0aGUKYmFzaWMgd29yZCBwbHVzIHRoZSBhZmZpeCAoYnV0IHRoZXJlIGFyZSByZXN0cmljdGlvbnMpLiAgRXhhbXBsZToKCglTRlggUyBZIDEgfgoJU0ZYIFMgMCBzIC4gfgoKCVNGWCBBIFkgMSB+CglTRlggQSAwIGFibGUvUyAuIH4KCldoZW4gdGhlIGRpY3Rpb25hcnkgZmlsZSBjb250YWlucyAiZHJpbmsvQVMiIHRoZW4gdGhlc2Ugd29yZHMgYXJlIHBvc3NpYmxlOgoKCWRyaW5rCglkcmlua3MJCXVzZXMgUyBzdWZmaXgKCWRyaW5rYWJsZQl1c2VzIEEgc3VmZml4Cglkcmlua2FibGVzCXVzZXMgQSBzdWZmaXggYW5kIHRoZW4gUyBzdWZmaXgKCkdlbmVyYWxseSB0aGUgZmxhZ3Mgb2YgdGhlIHN1ZmZpeCBhcmUgYWRkZWQgdG8gdGhlIGZsYWdzIG9mIHRoZSBiYXNpYyB3b3JkLApib3RoIGFyZSB1c2VkIGZvciB0aGUgd29yZCBwbHVzIHN1ZmZpeC4gIEJ1dCB0aGUgZmxhZ3Mgb2YgdGhlIGJhc2ljIHdvcmQgYXJlCm9ubHkgdXNlZCBvbmNlIGZvciBhZmZpeGVzLCBleGNlcHQgdGhhdCBib3RoIG9uZSBwcmVmaXggYW5kIG9uZSBzdWZmaXggY2FuIGJlCnVzZWQgd2hlbiBib3RoIHN1cHBvcnQgY29tYmluaW5nLgoKU3BlY2lmaWNhbGx5LCB0aGUgYWZmaXggZmxhZ3MgY2FuIGJlIHVzZWQgZm9yOgotIFN1ZmZpeGVzIG9uIHN1ZmZpeGVzLCBhcyBpbiB0aGUgZXhhbXBsZSBhYm92ZS4gIFRoaXMgd29ya3Mgb25jZSwgdGh1cyB5b3UKICBjYW4gaGF2ZSB0d28gc3VmZml4ZXMgb24gYSB3b3JkIChwbHVzIG9uZSBwcmVmaXgpLgotIE1ha2luZyB0aGUgd29yZCB3aXRoIHRoZSBhZmZpeCByYXJlLCBieSB1c2luZyB0aGUgfHNwZWxsLVJBUkV8IGZsYWcuCi0gRXhjbHVkZSB0aGUgd29yZCB3aXRoIHRoZSBhZmZpeCBmcm9tIGNvbXBvdW5kaW5nLCBieSB1c2luZyB0aGUKICB8c3BlbGwtQ09NUE9VTkRGT1JCSURGTEFHfCBmbGFnLgotIEFsbG93IHRoZSB3b3JkIHdpdGggdGhlIGFmZml4IHRvIGJlIHBhcnQgb2YgYSBjb21wb3VuZCB3b3JkIG9uIHRoZSBzaWRlIG9mCiAgdGhlIGFmZml4IHdpdGggdGhlIHxzcGVsbC1DT01QT1VORFBFUk1JVEZMQUd8LgotIFVzZSB0aGUgTkVFRENPTVBPVU5EIGZsYWc6IHdvcmQgcGx1cyBhZmZpeCBjYW4gb25seSBiZSB1c2VkIGFzIHBhcnQgb2YgYQogIGNvbXBvdW5kIHdvcmQuIHxzcGVsbC1ORUVEQ09NUE9VTkR8Ci0gQ29tcG91bmQgZmxhZ3M6IHdvcmQgcGx1cyBhZmZpeCBjYW4gYmUgcGFydCBvZiBhIGNvbXBvdW5kIHdvcmQgYXQgdGhlIGVuZCwKICBtaWRkbGUsIHN0YXJ0LCBldGMuICBUaGUgZmxhZ3MgYXJlIGNvbWJpbmVkIHdpdGggdGhlIGZsYWdzIG9mIHRoZSBiYXNpYwogIHdvcmQuICB8c3BlbGwtY29tcG91bmR8Ci0gTkVFREFGRklYOiBhbm90aGVyIGFmZml4IGlzIG5lZWRlZCB0byBtYWtlIGEgdmFsaWQgd29yZC4KLSBDSVJDVU1GSVgsIGFzIGV4cGxhaW5lZCBqdXN0IGJlbG93LgoKCklHTk9SRUVYVFJBCQkJCQkJKnNwZWxsLUlHTk9SRUVYVFJBKgoKTm9ybWFsbHkgVmltIGdpdmVzIGFuIGVycm9yIGZvciBhbiBleHRyYSBmaWVsZCB0aGF0IGRvZXMgbm90IHN0YXJ0IHdpdGggJyMnLgpUaGlzIGF2b2lkcyBlcnJvcnMgZ29pbmcgdW5ub3RpY2VkLiAgSG93ZXZlciwgc29tZSBmaWxlcyBjcmVhdGVkIGZvciBNeXNwZWxsCm9yIEh1bnNwZWxsIG1heSBjb250YWluIG1hbnkgZW50cmllcyB3aXRoIGFuIGV4dHJhIGZpZWxkLiAgVXNlIHRoZSBJR05PUkVFWFRSQQpmbGFnIHRvIGF2b2lkIGxvdHMgb2YgZXJyb3JzLgoKCkNJUkNVTUZJWAkJCQkJCSpzcGVsbC1DSVJDVU1GSVgqCgpUaGUgQ0lSQ1VNRklYIGZsYWcgbWVhbnMgYSBwcmVmaXggYW5kIHN1ZmZpeCBtdXN0IGJlIGFkZGVkIGF0IHRoZSBzYW1lIHRpbWUuCklmIGEgcHJlZml4IGhhcyB0aGUgQ0lSQ1VNRklYIGZsYWcgdGhhbiBvbmx5IHN1ZmZpeGVzIHdpdGggdGhlIENJUkNVTUZJWCBmbGFnCmNhbiBiZSBhZGRlZCwgYW5kIHRoZSBvdGhlciB3YXkgYXJvdW5kLgpBbiBhbHRlcm5hdGl2ZSBpcyB0byBvbmx5IHNwZWNpZnkgdGhlIHN1ZmZpeCwgYW5kIGdpdmUgdGhlIHRoYXQgc3VmZml4IHR3bwpmbGFnczogVGhlIHJlcXVpcmVkIHByZWZpeCBhbmQgdGhlIE5FRURBRkZJWCBmbGFnLiAgfHNwZWxsLU5FRURBRkZJWHwKCgpQRlhQT1NUUE9ORQkJCQkJCSpzcGVsbC1QRlhQT1NUUE9ORSoKCldoZW4gYW4gYWZmaXggZmlsZSBoYXMgdmVyeSBtYW55IHByZWZpeGVzIHRoYXQgYXBwbHkgdG8gbWFueSB3b3JkcyBpdCdzIG5vdApwb3NzaWJsZSB0byBidWlsZCB0aGUgd2hvbGUgd29yZCBsaXN0IGluIG1lbW9yeS4gIFRoaXMgYXBwbGllcyB0byBIZWJyZXcgKGEKbGlzdCB3aXRoIGFsbCB3b3JkcyBpcyBvdmVyIGEgR2J5dGUpLiAgSW4gdGhhdCBjYXNlIGFwcGx5aW5nIHByZWZpeGVzIG11c3QgYmUKcG9zdHBvbmVkLiAgVGhpcyBtYWtlcyBzcGVsbCBjaGVja2luZyBzbG93ZXIuICBJdCBpcyBpbmRpY2F0ZWQgYnkgdGhpcyBrZXl3b3JkCmluIHRoZSAuYWZmIGZpbGU6CgoJUEZYUE9TVFBPTkUgfgoKT25seSBwcmVmaXhlcyB3aXRob3V0IGEgY2hvcCBzdHJpbmcgYW5kIHdpdGhvdXQgZmxhZ3MgY2FuIGJlIHBvc3Rwb25lZC4KUHJlZml4ZXMgd2l0aCBhIGNob3Agc3RyaW5nIG9yIHdpdGggZmxhZ3Mgd2lsbCBzdGlsbCBiZSBpbmNsdWRlZCBpbiB0aGUgd29yZApsaXN0LiAgQW4gZXhjZXB0aW9uIGlmIHRoZSBjaG9wIHN0cmluZyBpcyBvbmUgY2hhcmFjdGVyIGFuZCBlcXVhbCB0byB0aGUgbGFzdApjaGFyYWN0ZXIgb2YgdGhlIGFkZGVkIHN0cmluZywgYnV0IGluIGxvd2VyIGNhc2UuICBUaHVzIHdoZW4gdGhlIGNob3Agc3RyaW5nCmlzIHVzZWQgdG8gYWxsb3cgdGhlIGZvbGxvd2luZyB3b3JkIHRvIHN0YXJ0IHdpdGggYW4gdXBwZXIgY2FzZSBsZXR0ZXIuCgoKV09SRFMgV0lUSCBBIFNMQVNICQkJCQkqc3BlbGwtU0xBU0gqCgpUaGUgc2xhc2ggaXMgdXNlZCBpbiB0aGUgLmRpYyBmaWxlIHRvIHNlcGFyYXRlIHRoZSBiYXNpYyB3b3JkIGZyb20gdGhlIGFmZml4CmxldHRlcnMgYW5kIG90aGVyIGZsYWdzLiAgVW5mb3J0dW5hdGVseSwgdGhpcyBtZWFucyB5b3UgY2Fubm90IHVzZSBhIHNsYXNoIGluCmEgd29yZC4gIFRodXMgIlRDUC9JUCIgaXMgbm90IGEgd29yZCBidXQgIlRDUCIgd2l0aCB0aGUgZmxhZ3MgIklQIi4gIFRvIGluY2x1ZGUKYSBzbGFzaCBpbiB0aGUgd29yZCBwdXQgYSBiYWNrc2xhc2ggYmVmb3JlIGl0OiAiVENQXC9JUCIuICBJbiB0aGUgcmFyZSBjYXNlCnlvdSB3YW50IHRvIHVzZSBhIGJhY2tzbGFzaCBpbnNpZGUgYSB3b3JkIHlvdSBuZWVkIHRvIHVzZSB0d28gYmFja3NsYXNoZXMuCkFueSBvdGhlciB1c2Ugb2YgdGhlIGJhY2tzbGFzaCBpcyByZXNlcnZlZCBmb3IgZnV0dXJlIGV4cGFuc2lvbi4KCgpLRUVQLUNBU0UgV09SRFMJCQkJCQkqc3BlbGwtS0VFUENBU0UqCgpJbiB0aGUgYWZmaXggZmlsZSBhIEtFRVBDQVNFIGxpbmUgY2FuIGJlIHVzZWQgdG8gZGVmaW5lIHRoZSBhZmZpeCBuYW1lIHVzZWQKZm9yIGtlZXAtY2FzZSB3b3Jkcy4gIEV4YW1wbGU6CgoJS0VFUENBU0UgPSB+CgpUaGlzIGZsYWcgaXMgbm90IHN1cHBvcnRlZCBieSBNeXNwZWxsLiAgSXQgaGFzIHRoZSBtZWFuaW5nIHRoYXQgY2FzZSBtYXR0ZXJzLgpUaGlzIGNhbiBiZSB1c2VkIGlmIHRoZSB3b3JkIGRvZXMgbm90IGhhdmUgdGhlIGZpcnN0IGxldHRlciBpbiB1cHBlciBjYXNlIGF0CnRoZSBzdGFydCBvZiBhIHNlbnRlbmNlLiAgRXhhbXBsZToKCiAgICB3b3JkIGxpc3QJICAgIG1hdGNoZXMJCSAgICBkb2VzIG5vdCBtYXRjaCB+CiAgICAncyBtb3JnZW5zLz0gICAgJ3MgbW9yZ2VucwkJICAgICdTIG1vcmdlbnMgJ3MgTW9yZ2VucyAnUyBNT1JHRU5TCiAgICAncyBNb3JnZW5zCSAgICAncyBNb3JnZW5zICdTIE1PUkdFTlMgICAnUyBtb3JnZW5zICdzIG1vcmdlbnMKClRoZSBmbGFnIGNhbiBhbHNvIGJlIHVzZWQgdG8gYXZvaWQgdGhhdCB0aGUgd29yZCBtYXRjaGVzIHdoZW4gaXQgaXMgaW4gYWxsCnVwcGVyLWNhc2UgbGV0dGVycy4KCgpSQVJFIFdPUkRTCQkJCQkJKnNwZWxsLVJBUkUqCgpJbiB0aGUgYWZmaXggZmlsZSBhIFJBUkUgbGluZSBjYW4gYmUgdXNlZCB0byBkZWZpbmUgdGhlIGFmZml4IG5hbWUgdXNlZCBmb3IKcmFyZSB3b3Jkcy4gIEV4YW1wbGU6CgoJUkFSRSA/IH4KClJhcmUgd29yZHMgYXJlIGhpZ2hsaWdodGVkIGRpZmZlcmVudGx5IGZyb20gYmFkIHdvcmRzLiAgVGhpcyBpcyB0byBiZSB1c2VkIGZvcgp3b3JkcyB0aGF0IGFyZSBjb3JyZWN0IGZvciB0aGUgbGFuZ3VhZ2UsIGJ1dCBhcmUgaGFyZGx5IGV2ZXIgdXNlZCBhbmQgY291bGQgYmUKYSB0eXBpbmcgbWlzdGFrZSBhbnl3YXkuICBXaGVuIHRoZSBzYW1lIHdvcmQgaXMgZm91bmQgYXMgZ29vZCBpdCB3b24ndCBiZQpoaWdobGlnaHRlZCBhcyByYXJlLgoKVGhpcyBmbGFnIGNhbiBhbHNvIGJlIHVzZWQgb24gYW4gYWZmaXgsIHNvIHRoYXQgYSBiYXNpYyB3b3JkIGlzIG5vdCByYXJlIGJ1dAp0aGUgYmFzaWMgd29yZCBwbHVzIGFmZml4IGlzIHJhcmUgfHNwZWxsLWFmZml4LWZsYWdzfC4gIEhvd2V2ZXIsIGlmIHRoZSB3b3JkCmFsc28gYXBwZWFycyBhcyBhIGdvb2Qgd29yZCBpbiBhbm90aGVyIHdheSAoZS5nLiwgaW4gYW5vdGhlciByZWdpb24pIGl0IHdvbid0CmJlIG1hcmtlZCBhcyByYXJlLgoKCkJBRCBXT1JEUwkJCQkJCSpzcGVsbC1CQUQqCgpJbiB0aGUgYWZmaXggZmlsZSBhIEJBRCBsaW5lIGNhbiBiZSB1c2VkIHRvIGRlZmluZSB0aGUgYWZmaXggbmFtZSB1c2VkIGZvcgpiYWQgd29yZHMuICBFeGFtcGxlOgoKCUJBRCAhIH4KClRoaXMgY2FuIGJlIHVzZWQgdG8gZXhjbHVkZSB3b3JkcyB0aGF0IHdvdWxkIG90aGVyd2lzZSBiZSBnb29kLiAgRm9yIGV4YW1wbGUKInRoZSB0aGUiIGluIHRoZSAuZGljIGZpbGU6CgoJdGhlIHRoZS8hIH4KCk9uY2UgYSB3b3JkIGhhcyBiZWVuIG1hcmtlZCBhcyBiYWQgaXQgd29uJ3QgYmUgdW5kb25lIGJ5IGVuY291bnRlcmluZyB0aGUgc2FtZQp3b3JkIGFzIGdvb2QuCgpUaGUgZmxhZyBhbHNvIGFwcGxpZXMgdG8gdGhlIHdvcmQgd2l0aCBhZmZpeGVzLCB0aHVzIHRoaXMgY2FuIGJlIHVzZWQgdG8gbWFyawphIHdob2xlIGJ1bmNoIG9mIHJlbGF0ZWQgd29yZHMgYXMgYmFkLgoKCQkJCQkJCSpzcGVsbC1GT1JCSURERU5XT1JEKgpGT1JCSURERU5XT1JEIGNhbiBiZSB1c2VkIGp1c3QgbGlrZSBCQUQuICBGb3IgY29tcGF0aWJpbGl0eSB3aXRoIEh1bnNwZWxsLgoKCQkJCQkJCSpzcGVsbC1ORUVEQUZGSVgqClRoZSBORUVEQUZGSVggZmxhZyBpcyB1c2VkIHRvIHJlcXVpcmUgdGhhdCBhIHdvcmQgaXMgdXNlZCB3aXRoIGFuIGFmZml4LiAgVGhlCndvcmQgaXRzZWxmIGlzIG5vdCBhIGdvb2Qgd29yZCAodW5sZXNzIHRoZXJlIGlzIGFuIGVtcHR5IGFmZml4KS4gIEV4YW1wbGU6CgoJTkVFREFGRklYICsgfgoKCkNPTVBPVU5EIFdPUkRTCQkJCQkJKnNwZWxsLWNvbXBvdW5kKgoKQSBjb21wb3VuZCB3b3JkIGlzIGEgbG9uZ2VyIHdvcmQgbWFkZSBieSBjb25jYXRlbmF0aW5nIHdvcmRzIHRoYXQgYXBwZWFyIGluCnRoZSAuZGljIGZpbGUuICBUbyBzcGVjaWZ5IHdoaWNoIHdvcmRzIG1heSBiZSBjb25jYXRlbmF0ZWQgYSBjaGFyYWN0ZXIgaXMKdXNlZC4gIFRoaXMgY2hhcmFjdGVyIGlzIHB1dCBpbiB0aGUgbGlzdCBvZiBhZmZpeGVzIGFmdGVyIHRoZSB3b3JkLiAgV2Ugd2lsbApjYWxsIHRoaXMgY2hhcmFjdGVyIGEgZmxhZyBoZXJlLiAgT2J2aW91c2x5IHRoZXNlIGZsYWdzIG11c3QgYmUgZGlmZmVyZW50IGZyb20KYW55IGFmZml4IElEcyB1c2VkLgoKCQkJCQkJCSpzcGVsbC1DT01QT1VOREZMQUcqClRoZSBNeXNwZWxsIGNvbXBhdGlibGUgbWV0aG9kIHVzZXMgb25lIGZsYWcsIHNwZWNpZmllZCB3aXRoIENPTVBPVU5ERkxBRy4gIEFsbAp3b3JkcyB3aXRoIHRoaXMgZmxhZyBjb21iaW5lIGluIGFueSBvcmRlci4gIFRoaXMgbWVhbnMgdGhlcmUgaXMgbm8gY29udHJvbApvdmVyIHdoaWNoIHdvcmQgY29tZXMgZmlyc3QuICBFeGFtcGxlOgoJQ09NUE9VTkRGTEFHIGMgfgoKCQkJCQkJCSpzcGVsbC1DT01QT1VORFJVTEUqCkEgbW9yZSBhZHZhbmNlZCBtZXRob2QgdG8gc3BlY2lmeSBob3cgY29tcG91bmQgd29yZHMgY2FuIGJlIGZvcm1lZCB1c2VzCm11bHRpcGxlIGl0ZW1zIHdpdGggbXVsdGlwbGUgZmxhZ3MuICBUaGlzIGlzIG5vdCBjb21wYXRpYmxlIHdpdGggTXlzcGVsbCAzLjAuCkxldCdzIHN0YXJ0IHdpdGggYW4gZXhhbXBsZToKCUNPTVBPVU5EUlVMRSBjKyB+CglDT01QT1VORFJVTEUgc2UgfgoKVGhlIGZpcnN0IGxpbmUgZGVmaW5lcyB0aGF0IHdvcmRzIHdpdGggdGhlICJjIiBmbGFnIGNhbiBiZSBjb25jYXRlbmF0ZWQgaW4gYW55Cm9yZGVyLiAgVGhlIHNlY29uZCBsaW5lIGRlZmluZXMgY29tcG91bmQgd29yZHMgdGhhdCBhcmUgbWFkZSBvZiBvbmUgd29yZCB3aXRoCnRoZSAicyIgZmxhZyBhbmQgb25lIHdvcmQgd2l0aCB0aGUgImUiIGZsYWcuICBXaXRoIHRoaXMgZGljdGlvbmFyeToKCWJvcmsvYyB+Cglvbmlvbi9zIH4KCXNvdXAvZSB+CgpZb3UgY2FuIG1ha2UgdGhlc2Ugd29yZHM6Cglib3JrCglib3JrYm9yawoJYm9ya2Jvcmtib3JrCgkoZXRjLikKCW9uaW9uCglzb3VwCglvbmlvbnNvdXAKClRoZSBDT01QT1VORFJVTEUgaXRlbSBtYXkgYXBwZWFyIG11bHRpcGxlIHRpbWVzLiAgVGhlIGFyZ3VtZW50IGlzIG1hZGUgb3V0IG9mCm9uZSBvciBtb3JlIGdyb3Vwcywgd2hlcmUgZWFjaCBncm91cCBjYW4gYmU6CglvbmUgZmxhZwkJCWUuZy4sIGMKCWFsdGVybmF0ZSBmbGFncyBpbnNpZGUgW10JZS5nLiwgW2FiY10KT3B0aW9uYWxseSB0aGlzIG1heSBiZSBmb2xsb3dlZCBieToKCSoJdGhlIGdyb3VwIGFwcGVhcnMgemVybyBvciBtb3JlIHRpbWVzLCBlLmcuLCBzbSplCgkrCXRoZSBncm91cCBhcHBlYXJzIG9uZSBvciBtb3JlIHRpbWVzLCBlLmcuLCBjKwoJPwl0aGUgZ3JvdXAgYXBwZWFycyB6ZXJvIHRpbWVzIG9yIG9uY2UsIGUuZy4sIHg/CgpUaGlzIGlzIHNpbWlsYXIgdG8gdGhlIHJlZ2V4cCBwYXR0ZXJuIHN5bnRheCAoYnV0IG5vdCB0aGUgc2FtZSEpLiAgQSBmZXcKZXhhbXBsZXMgd2l0aCB0aGUgc2VxdWVuY2Ugb2Ygd29yZCBmbGFncyB0aGV5IHJlcXVpcmU6CiAgICBDT01QT1VORFJVTEUgeCsJICAgIHggeHggeHh4IGV0Yy4KICAgIENPTVBPVU5EUlVMRSB5egkgICAgeXoKICAgIENPTVBPVU5EUlVMRSB4K3oJICAgIHh6IHh4eiB4eHh6IGV0Yy4KICAgIENPTVBPVU5EUlVMRSB5eCsJICAgIHl4IHl4eCB5eHh4IGV0Yy4KICAgIENPTVBPVU5EUlVMRSB4eT96CSAgICB4eiB4eXoKCiAgICBDT01QT1VORFJVTEUgW2FiY116ICAgIGF6IGJ6IGN6CiAgICBDT01QT1VORFJVTEUgW2FiY10reiAgIGF6IGFheiBhYmF6IGJ6IGJheiBiY2J6IGN6IGNheiBjYmF6IGV0Yy4KICAgIENPTVBPVU5EUlVMRSBhW3h5el0rICAgYXggYXh4IGF4eXogYXkgYXl4IGF5enogYXogYXp5IGF6eHkgZXRjLgogICAgQ09NUE9VTkRSVUxFIHNtKmUJICAgIHNlIHNtZSBzbW1lIHNtbW1lIGV0Yy4KICAgIENPTVBPVU5EUlVMRSBzW3h5el0qZSAgc2Ugc3hlIHN4eWUgc3h5eGUgc3llIHN5emUgc3plIHN6eWUgc3p5eGUgIGV0Yy4KCkEgc3BlY2lmaWMgZXhhbXBsZTogQWxsb3cgYSBjb21wb3VuZCB0byBiZSBtYWRlIG9mIHR3byB3b3JkcyBhbmQgYSBkYXNoOgoJSW4gdGhlIC5hZmYgZmlsZToKCSAgICBDT01QT1VORFJVTEUgc2RlIH4KCSAgICBORUVEQUZGSVggeCB+CgkgICAgQ09NUE9VTkRXT1JETUFYIDMgfgoJICAgIENPTVBPVU5ETUlOIDEgfgoJSW4gdGhlIC5kaWMgZmlsZToKCSAgICBzdGFydC9zIH4KCSAgICBlbmQvZSB+CgkgICAgLS94ZCB+CgpUaGlzIGFsbG93cyBmb3IgdGhlIHdvcmQgInN0YXJ0LWVuZCIsIGJ1dCBub3QgInN0YXJ0ZW5kIi4KCkFuIGFkZGl0aW9uYWwgaW1wbGllZCBydWxlIGlzIHRoYXQsIHdpdGhvdXQgZnVydGhlciBmbGFncywgYSB3b3JkIHdpdGggYQpwcmVmaXggY2Fubm90IGJlIGNvbXBvdW5kZWQgYWZ0ZXIgYW5vdGhlciB3b3JkLCBhbmQgYSB3b3JkIHdpdGggYSBzdWZmaXgKY2Fubm90IGJlIGNvbXBvdW5kZWQgd2l0aCBhIGZvbGxvd2luZyB3b3JkLiAgVGh1cyB0aGUgYWZmaXggY2Fubm90IGFwcGVhcgpvbiB0aGUgaW5zaWRlIG9mIGEgY29tcG91bmQgd29yZC4gIFRoaXMgY2FuIGJlIGNoYW5nZWQgd2l0aCB0aGUKfHNwZWxsLUNPTVBPVU5EUEVSTUlURkxBR3wuCgoJCQkJCQkJKnNwZWxsLU5FRURDT01QT1VORCoKVGhlIE5FRURDT01QT1VORCBmbGFnIGlzIHVzZWQgdG8gcmVxdWlyZSB0aGF0IGEgd29yZCBpcyB1c2VkIGFzIHBhcnQgb2YgYQpjb21wb3VuZCB3b3JkLiAgVGhlIHdvcmQgaXRzZWxmIGlzIG5vdCBhIGdvb2Qgd29yZC4gIEV4YW1wbGU6CgoJTkVFRENPTVBPVU5EICYgfgoKCQkJCQkJCSpzcGVsbC1PTkxZSU5DT01QT1VORCoKVGhlIE9OTFlJTkNPTVBPVU5EIGRvZXMgZXhhY3RseSB0aGUgc2FtZSBhcyBORUVEQ09NUE9VTkQuICBTdXBwb3J0ZWQgZm9yCmNvbXBhdGliaWxpdHkgd2l0aCBIdW5zcGVsbC4KCgkJCQkJCQkqc3BlbGwtQ09NUE9VTkRNSU4qClRoZSBtaW5pbWFsIGNoYXJhY3RlciBsZW5ndGggb2YgYSB3b3JkIHVzZWQgZm9yIGNvbXBvdW5kaW5nIGlzIHNwZWNpZmllZCB3aXRoCkNPTVBPVU5ETUlOLiAgRXhhbXBsZToKCUNPTVBPVU5ETUlOIDUgfgoKV2hlbiBvbWl0dGVkIHRoZXJlIGlzIG5vIG1pbmltYWwgbGVuZ3RoLiAgT2J2aW91c2x5IHlvdSBjb3VsZCBqdXN0IGxlYXZlIG91dAp0aGUgY29tcG91bmQgZmxhZyBmcm9tIHNob3J0IHdvcmRzIGluc3RlYWQsIHRoaXMgZmVhdHVyZSBpcyBwcmVzZW50IGZvcgpjb21wYXRpYmlsaXR5IHdpdGggTXlzcGVsbC4KCgkJCQkJCQkqc3BlbGwtQ09NUE9VTkRXT1JETUFYKgpUaGUgbWF4aW11bSBudW1iZXIgb2Ygd29yZHMgdGhhdCBjYW4gYmUgY29uY2F0ZW5hdGVkIGludG8gYSBjb21wb3VuZCB3b3JkIGlzCnNwZWNpZmllZCB3aXRoIENPTVBPVU5EV09SRE1BWC4gIEV4YW1wbGU6CglDT01QT1VORFdPUkRNQVggMyB+CgpXaGVuIG9taXR0ZWQgdGhlcmUgaXMgbm8gbWF4aW11bS4gIEl0IGFwcGxpZXMgdG8gYWxsIGNvbXBvdW5kIHdvcmRzLgoKVG8gc2V0IGEgbGltaXQgZm9yIHdvcmRzIHdpdGggc3BlY2lmaWMgZmxhZ3MgbWFrZSBzdXJlIHRoZSBpdGVtcyBpbgpDT01QT1VORFJVTEUgd2hlcmUgdGhleSBhcHBlYXIgZG9uJ3QgYWxsb3cgdG9vIG1hbnkgd29yZHMuCgoJCQkJCQkJKnNwZWxsLUNPTVBPVU5EU1lMTUFYKgpUaGUgbWF4aW11bSBudW1iZXIgb2Ygc3lsbGFibGVzIHRoYXQgYSBjb21wb3VuZCB3b3JkIG1heSBjb250YWluIGlzIHNwZWNpZmllZAp3aXRoIENPTVBPVU5EU1lMTUFYLiAgRXhhbXBsZToKCUNPTVBPVU5EU1lMTUFYIDYgfgoKVGhpcyBoYXMgbm8gZWZmZWN0IGlmIHRoZXJlIGlzIG5vIFNZTExBQkxFIGl0ZW0uICBXaXRob3V0IENPTVBPVU5EU1lMTUFYIHRoZXJlCmlzIG5vIGxpbWl0IG9uIHRoZSBudW1iZXIgb2Ygc3lsbGFibGVzLgoKSWYgYm90aCBDT01QT1VORFdPUkRNQVggYW5kIENPTVBPVU5EU1lMTUFYIGFyZSBkZWZpbmVkLCBhIGNvbXBvdW5kIHdvcmQgaXMKYWNjZXB0ZWQgaWYgaXQgZml0cyBvbmUgb2YgdGhlIGNyaXRlcmlhLCB0aHVzIGlzIGVpdGhlciBtYWRlIGZyb20gdXAgdG8KQ09NUE9VTkRXT1JETUFYIHdvcmRzIG9yIGNvbnRhaW5zIHVwIHRvIENPTVBPVU5EU1lMTUFYIHN5bGxhYmxlcy4KCgkJCQkJCSAgICAqc3BlbGwtQ09NUE9VTkRGT1JCSURGTEFHKgpUaGUgQ09NUE9VTkRGT1JCSURGTEFHIHNwZWNpZmllcyBhIGZsYWcgdGhhdCBjYW4gYmUgdXNlZCBvbiBhbiBhZmZpeC4gIEl0Cm1lYW5zIHRoYXQgdGhlIHdvcmQgcGx1cyBhZmZpeCBjYW5ub3QgYmUgdXNlZCBpbiBhIGNvbXBvdW5kIHdvcmQuICBFeGFtcGxlOgoJYWZmaXggZmlsZToKCQlDT01QT1VOREZMQUcgYyB+CgkJQ09NUE9VTkRGT1JCSURGTEFHIHggfgoJCVNGWCBhIFkgMiB+CgkJU0ZYIGEgMCBzICAgLiB+CgkJU0ZYIGEgMCBpemUveCAuIH4KCWRpY3Rpb25hcnk6CgkJd29yZC9jIH4KCQl1dGlsL2FjIH4KClRoaXMgYWxsb3dzIGZvciAid29yZHV0aWwiIGFuZCAid29yZHV0aWxzIiBidXQgbm90ICJ3b3JkdXRpbGl6ZSIuCk5vdGU6IHRoaXMgZG9lc24ndCB3b3JrIGZvciBwb3N0cG9uZWQgcHJlZml4ZXMgeWV0LgoKCQkJCQkJICAgICpzcGVsbC1DT01QT1VORFBFUk1JVEZMQUcqClRoZSBDT01QT1VORFBFUk1JVEZMQUcgc3BlY2lmaWVzIGEgZmxhZyB0aGF0IGNhbiBiZSB1c2VkIG9uIGFuIGFmZml4LiAgSXQKbWVhbnMgdGhhdCB0aGUgd29yZCBwbHVzIGFmZml4IGNhbiBhbHNvIGJlIHVzZWQgaW4gYSBjb21wb3VuZCB3b3JkIGluIGEgd2F5CndoZXJlIHRoZSBhZmZpeCBlbmRzIHVwIGhhbGZ3YXkgdGhlIHdvcmQuICBXaXRob3V0IHRoaXMgZmxhZyB0aGF0IGlzIG5vdAphbGxvd2VkLgpOb3RlOiB0aGlzIGRvZXNuJ3Qgd29yayBmb3IgcG9zdHBvbmVkIHByZWZpeGVzIHlldC4KCgkJCQkJCSAgICAqc3BlbGwtQ09NUE9VTkRST09UKgpUaGUgQ09NUE9VTkRST09UIGZsYWcgaXMgdXNlZCBmb3Igd29yZHMgaW4gdGhlIGRpY3Rpb25hcnkgdGhhdCBhcmUgYWxyZWFkeSBhCmNvbXBvdW5kLiAgVGhpcyBtZWFucyBpdCBjb3VudHMgZm9yIHR3byB3b3JkcyB3aGVuIGNoZWNraW5nIHRoZSBjb21wb3VuZGluZwpydWxlcy4gIENhbiBhbHNvIGJlIHVzZWQgZm9yIGFuIGFmZml4IHRvIGNvdW50IHRoZSBhZmZpeCBhcyBhIGNvbXBvdW5kaW5nCndvcmQuCgoJCQkJCQkqc3BlbGwtQ0hFQ0tDT01QT1VORFBBVFRFUk4qCkNIRUNLQ09NUE9VTkRQQVRURVJOIGlzIHVzZWQgdG8gZGVmaW5lIHBhdHRlcm5zIHRoYXQsIHdoZW4gbWF0Y2hpbmcgYXQgdGhlCnBvc2l0aW9uIHdoZXJlIHR3byB3b3JkcyBhcmUgY29tcG91bmRlZCB0b2dldGhlciBmb3JiaWRzIHRoZSBjb21wb3VuZC4KRm9yIGV4YW1wbGU6CglDSEVDS0NPTVBPVU5EUEFUVEVSTiBvIGUgfgoKVGhpcyBmb3JiaWRzIGNvbXBvdW5kaW5nIGlmIHRoZSBmaXJzdCB3b3JkIGVuZHMgaW4gIm8iIGFuZCB0aGUgc2Vjb25kIHdvcmQKc3RhcnRzIHdpdGggImUiLgoKVGhlIGFyZ3VtZW50cyBtdXN0IGJlIHBsYWluIHRleHQsIG5vIHBhdHRlcm5zIGFyZSBhY3R1YWxseSBzdXBwb3J0ZWQsIGRlc3BpdGUKdGhlIGl0ZW0gbmFtZS4gIENhc2UgaXMgYWx3YXlzIGlnbm9yZWQuCgpUaGUgSHVuc3BlbGwgZmVhdHVyZSB0byB1c2UgdGhyZWUgYXJndW1lbnRzIGFuZCBmbGFncyBpcyBub3Qgc3VwcG9ydGVkLgoKCQkJCQkJCSpzcGVsbC1OT0NPTVBPVU5EU1VHUyoKVGhpcyBpdGVtIGluZGljYXRlcyB0aGF0IHVzaW5nIGNvbXBvdW5kaW5nIHRvIG1ha2Ugc3VnZ2VzdGlvbnMgaXMgbm90IGEgZ29vZAppZGVhLiAgVXNlIHRoaXMgd2hlbiBjb21wb3VuZGluZyBpcyB1c2VkIHdpdGggdmVyeSBzaG9ydCBvciBvbmUtY2hhcmFjdGVyCndvcmRzLiAgRS5nLiB0byBtYWtlIG51bWJlcnMgb3V0IG9mIGRpZ2l0cy4gIFdpdGhvdXQgdGhpcyBmbGFnIGNyZWF0aW5nCnN1Z2dlc3Rpb25zIHdvdWxkIHNwZW5kIG1vc3QgdGltZSB0cnlpbmcgYWxsIGtpbmQgb2Ygd2VpcmQgY29tcG91bmQgd29yZHMuCgoJTk9DT01QT1VORFNVR1MgfgoKCQkJCQkJCSpzcGVsbC1TWUxMQUJMRSoKVGhlIFNZTExBQkxFIGl0ZW0gZGVmaW5lcyBjaGFyYWN0ZXJzIG9yIGNoYXJhY3RlciBzZXF1ZW5jZXMgdGhhdCBhcmUgdXNlZCB0bwpjb3VudCB0aGUgbnVtYmVyIG9mIHN5bGxhYmxlcyBpbiBhIHdvcmQuICBFeGFtcGxlOgoJU1lMTEFCTEUgYeFl6Wntb/P29XX6/Pt5L2FhL2F1L2VhL2VlL2VpL2llL29hL29lL29vL291L3V1L3VpIH4KCkJlZm9yZSB0aGUgZmlyc3Qgc2xhc2ggaXMgdGhlIHNldCBvZiBjaGFyYWN0ZXJzIHRoYXQgYXJlIGNvdW50ZWQgZm9yIG9uZQpzeWxsYWJsZSwgYWxzbyB3aGVuIHJlcGVhdGVkIGFuZCBtaXhlZCwgdW50aWwgdGhlIG5leHQgY2hhcmFjdGVyIHRoYXQgaXMgbm90CmluIHRoaXMgc2V0LiAgQWZ0ZXIgdGhlIHNsYXNoIGNvbWUgc2VxdWVuY2VzIG9mIGNoYXJhY3RlcnMgdGhhdCBhcmUgY291bnRlZApmb3Igb25lIHN5bGxhYmxlLiAgVGhlc2UgYXJlIHByZWZlcnJlZCBvdmVyIHVzaW5nIGNoYXJhY3RlcnMgZnJvbSB0aGUgc2V0LgpXaXRoIHRoZSBleGFtcGxlICJpZGVlZW4iIGhhcyB0aHJlZSBzeWxsYWJsZXMsIGNvdW50ZWQgYnkgImkiLCAiZWUiIGFuZCAiZSIuCgpPbmx5IGNhc2UtZm9sZGVkIGxldHRlcnMgbmVlZCB0byBiZSBpbmNsdWRlZC4KCkFub3RoZXIgd2F5IHRvIHJlc3RyaWN0IGNvbXBvdW5kaW5nIHdhcyBtZW50aW9uZWQgYWJvdmU6IEFkZGluZyB0aGUKfHNwZWxsLUNPTVBPVU5ERk9SQklERkxBR3wgZmxhZyB0byBhbiBhZmZpeCBjYXVzZXMgYWxsIHdvcmRzIHRoYXQgYXJlIG1hZGUKd2l0aCB0aGF0IGFmZml4IHRvIG5vdCBiZSB1c2VkIGZvciBjb21wb3VuZGluZy4KCgpVTkxJTUlURUQgQ09NUE9VTkRJTkcJCQkJCSpzcGVsbC1OT0JSRUFLKgoKRm9yIHNvbWUgbGFuZ3VhZ2VzLCBzdWNoIGFzIFRoYWksIHRoZXJlIGlzIG5vIHNwYWNlIGluIGJldHdlZW4gd29yZHMuICBUaGlzCmxvb2tzIGxpa2UgYWxsIHdvcmRzIGFyZSBjb21wb3VuZGVkLiAgVG8gc3BlY2lmeSB0aGlzIHVzZSB0aGUgTk9CUkVBSyBpdGVtIGluCnRoZSBhZmZpeCBmaWxlLCB3aXRob3V0IGFyZ3VtZW50czoKCU5PQlJFQUsgfgoKVmltIHdpbGwgdHJ5IHRvIGZpZ3VyZSBvdXQgd2hlcmUgb25lIHdvcmQgZW5kcyBhbmQgYSBuZXh0IHN0YXJ0cy4gIFdoZW4gdGhlcmUKYXJlIHNwZWxsaW5nIG1pc3Rha2VzIHRoaXMgbWF5IG5vdCBiZSBxdWl0ZSByaWdodC4KCgoJCQkJCQkJKnNwZWxsLUNPTU1PTioKQ29tbW9uIHdvcmRzIGNhbiBiZSBzcGVjaWZpZWQgd2l0aCB0aGUgQ09NTU9OIGl0ZW0uICBUaGlzIHdpbGwgZ2l2ZSBiZXR0ZXIKc3VnZ2VzdGlvbnMgd2hlbiBlZGl0aW5nIGEgc2hvcnQgZmlsZS4gIEV4YW1wbGU6CgoJQ09NTU9OICB0aGUgb2YgdG8gYW5kIGEgaW4gaXMgaXQgeW91IHRoYXQgaGUgd2FzIGZvciBvbiBhcmUgfgoKVGhlIHdvcmRzIG11c3QgYmUgc2VwYXJhdGVkIGJ5IHdoaXRlIHNwYWNlLCB1cCB0byAyNSBwZXIgbGluZS4KV2hlbiBtdWx0aXBsZSByZWdpb25zIGFyZSBzcGVjaWZpZWQgaW4gYSAiOm1rc3BlbGwiIGNvbW1hbmQgdGhlIGNvbW1vbiB3b3Jkcwpmb3IgYWxsIHJlZ2lvbnMgYXJlIGNvbWJpbmVkIGFuZCB1c2VkIGZvciBhbGwgcmVnaW9ucy4KCgkJCQkJCQkqc3BlbGwtTk9TUExJVFNVR1MqClRoaXMgaXRlbSBpbmRpY2F0ZXMgdGhhdCBzcGxpdHRpbmcgYSB3b3JkIHRvIG1ha2Ugc3VnZ2VzdGlvbnMgaXMgbm90IGEgZ29vZAppZGVhLiAgU3BsaXQtd29yZCBzdWdnZXN0aW9ucyB3aWxsIGFwcGVhciBvbmx5IHdoZW4gdGhlcmUgYXJlIGZldyBzaW1pbGFyCndvcmRzLgoKCU5PU1BMSVRTVUdTIH4KCgkJCQkJCQkqc3BlbGwtTk9TVUdHRVNUKgpUaGUgZmxhZyBzcGVjaWZpZWQgd2l0aCBOT1NVR0dFU1QgY2FuIGJlIHVzZWQgZm9yIHdvcmRzIHRoYXQgd2lsbCBub3QgYmUKc3VnZ2VzdGVkLiAgQ2FuIGJlIHVzZWQgZm9yIG9ic2NlbmUgd29yZHMuCgoJTk9TVUdHRVNUICUgfgoKClJFUExBQ0VNRU5UUwkJCQkJCSpzcGVsbC1SRVAqCgpJbiB0aGUgYWZmaXggZmlsZSBSRVAgaXRlbXMgY2FuIGJlIHVzZWQgdG8gZGVmaW5lIGNvbW1vbiBtaXN0YWtlcy4gIFRoaXMgaXMKdXNlZCB0byBtYWtlIHNwZWxsaW5nIHN1Z2dlc3Rpb25zLiAgVGhlIGl0ZW1zIGRlZmluZSB0aGUgImZyb20iIHRleHQgYW5kIHRoZQoidG8iIHJlcGxhY2VtZW50LiAgRXhhbXBsZToKCglSRVAgNCB+CglSRVAgZiBwaCB+CglSRVAgcGggZiB+CglSRVAgayBjaCB+CglSRVAgY2ggayB+CgpUaGUgZmlyc3QgbGluZSBzcGVjaWZpZXMgdGhlIG51bWJlciBvZiBSRVAgbGluZXMgZm9sbG93aW5nLiAgVmltIGlnbm9yZXMgdGhlCm51bWJlciwgYnV0IGl0IG11c3QgYmUgdGhlcmUgKGZvciBjb21wYXRpYmlsaXR5IHdpdGggTXlzcGVsbCkuCgpEb24ndCBpbmNsdWRlIHNpbXBsZSBvbmUtY2hhcmFjdGVyIHJlcGxhY2VtZW50cyBvciBzd2Fwcy4gIFZpbSB3aWxsIHRyeSB0aGVzZQphbnl3YXkuICBZb3UgY2FuIGluY2x1ZGUgd2hvbGUgd29yZHMgaWYgeW91IHdhbnQgdG8sIGJ1dCB5b3UgbWlnaHQgd2FudCB0byB1c2UKdGhlICJmaWxlOiIgaXRlbSBpbiAnc3BlbGxzdWdnZXN0JyBpbnN0ZWFkLgoKWW91IGNhbiBpbmNsdWRlIGEgc3BhY2UgYnkgdXNpbmcgYW4gdW5kZXJzY29yZToKCglSRVAgdGhlX3RoZSB0aGUgfgoKClNJTUlMQVIgQ0hBUkFDVEVSUwkJCQkJKnNwZWxsLU1BUCogKkU3ODMqCgpJbiB0aGUgYWZmaXggZmlsZSBNQVAgaXRlbXMgY2FuIGJlIHVzZWQgdG8gZGVmaW5lIGxldHRlcnMgdGhhdCBhcmUgdmVyeSBtdWNoCmFsaWtlLiAgVGhpcyBpcyBtb3N0bHkgdXNlZCBmb3IgYSBsZXR0ZXIgd2l0aCBkaWZmZXJlbnQgYWNjZW50cy4gIFRoaXMgaXMgdXNlZAp0byBwcmVmZXIgc3VnZ2VzdGlvbnMgd2l0aCB0aGVzZSBsZXR0ZXJzIHN1YnN0aXR1dGVkLiAgRXhhbXBsZToKCglNQVAgMiB+CglNQVAgZenr6uggfgoJTUFQIHX8+fr7IH4KClRoZSBmaXJzdCBsaW5lIHNwZWNpZmllcyB0aGUgbnVtYmVyIG9mIE1BUCBsaW5lcyBmb2xsb3dpbmcuICBWaW0gaWdub3JlcyB0aGUKbnVtYmVyLCBidXQgdGhlIGxpbmUgbXVzdCBiZSB0aGVyZS4KCkVhY2ggbGV0dGVyIG11c3QgYXBwZWFyIGluIG9ubHkgb25lIG9mIHRoZSBNQVAgaXRlbXMuICBJdCdzIGEgYml0IG1vcmUKZWZmaWNpZW50IGlmIHRoZSBmaXJzdCBsZXR0ZXIgaXMgQVNDSUkgb3IgYXQgbGVhc3Qgb25lIHdpdGhvdXQgYWNjZW50cy4KCgouU1VHIEZJTEUJCQkJCQkqc3BlbGwtTk9TVUdGSUxFKgoKV2hlbiBzb3VuZGZvbGRpbmcgaXMgc3BlY2lmaWVkIGluIHRoZSBhZmZpeCBmaWxlIHRoZW4gIjpta3NwZWxsIiB3aWxsIG5vcm1hbGx5CnByb2R1Y2UgYSAuc3VnIGZpbGUgbmV4dCB0byB0aGUgLnNwbCBmaWxlLiAgVGhpcyBmaWxlIGlzIHVzZWQgdG8gZmluZApzdWdnZXN0aW9ucyBieSB0aGVpciBzb3VuZC1hLWxpa2UgZm9ybSBxdWlja2x5LiAgQXQgdGhlIGNvc3Qgb2YgYSBsb3Qgb2YKbWVtb3J5ICh0aGUgYW1vdW50IGRlcGVuZHMgb24gdGhlIG51bWJlciBvZiB3b3JkcywgfDpta3NwZWxsfCB3aWxsIGRpc3BsYXkgYW4KZXN0aW1hdGUgd2hlbiBpdCdzIGRvbmUpLgoKVG8gYXZvaWQgcHJvZHVjaW5nIGEgLnN1ZyBmaWxlIHVzZSB0aGlzIGl0ZW0gaW4gdGhlIGFmZml4IGZpbGU6CgoJTk9TVUdGSUxFIH4KClVzZXJzIGNhbiBzaW1wbHkgb21pdCB0aGUgLnN1ZyBmaWxlIGlmIHRoZXkgZG9uJ3Qgd2FudCB0byB1c2UgaXQuCgoKU09VTkQtQS1MSUtFCQkJCQkJKnNwZWxsLVNBTCoKCkluIHRoZSBhZmZpeCBmaWxlIFNBTCBpdGVtcyBjYW4gYmUgdXNlZCB0byBkZWZpbmUgdGhlIHNvdW5kcy1hLWxpa2UgbWVjaGFuaXNtCnRvIGJlIHVzZWQuICBUaGUgbWFpbiBpdGVtcyBkZWZpbmUgdGhlICJmcm9tIiB0ZXh0IGFuZCB0aGUgInRvIiByZXBsYWNlbWVudC4KU2ltcGxpc3RpYyBleGFtcGxlOgoKCVNBTCBDSUEJCQkgWCB+CglTQUwgQ0gJCQkgWCB+CglTQUwgQwkJCSBLIH4KCVNBTCBLCQkJIEsgfgoKVGhlcmUgYXJlIGEgZmV3IHJ1bGVzIGFuZCB0aGlzIGNhbiBiZWNvbWUgcXVpdGUgY29tcGxpY2F0ZWQuICBBbiBleHBsYW5hdGlvbgpob3cgaXQgd29ya3MgY2FuIGJlIGZvdW5kIGluIHRoZSBBc3BlbGwgbWFudWFsOgpodHRwOi8vYXNwZWxsLm5ldC9tYW4taHRtbC9QaG9uZXRpYy1Db2RlLmh0bWwuCgpUaGVyZSBhcmUgYSBmZXcgc3BlY2lhbCBpdGVtczoKCglTQUwgZm9sbG93dXAJCXRydWUgfgoJU0FMIGNvbGxhcHNlX3Jlc3VsdAl0cnVlIH4KCVNBTCByZW1vdmVfYWNjZW50cwl0cnVlIH4KCiIxIiBoYXMgdGhlIHNhbWUgbWVhbmluZyBhcyAidHJ1ZSIuICBBbnkgb3RoZXIgdmFsdWUgbWVhbnMgImZhbHNlIi4KCgpTSU1QTEUgU09VTkRGT0xESU5HCQkJCSpzcGVsbC1TT0ZPRlJPTSogKnNwZWxsLVNPRk9UTyoKClRoZSBTQUwgbWVjaGFuaXNtIGlzIGNvbXBsZXggYW5kIHNsb3cuICBBIHNpbXBsZXIgbWVjaGFuaXNtIGlzIG1hcHBpbmcgYWxsCmNoYXJhY3RlcnMgdG8gYW5vdGhlciBjaGFyYWN0ZXIsIG1hcHBpbmcgc2ltaWxhciBzb3VuZGluZyBjaGFyYWN0ZXJzIHRvIHRoZQpzYW1lIGNoYXJhY3Rlci4gIEF0IHRoZSBzYW1lIHRpbWUgdGhpcyBkb2VzIGNhc2UgZm9sZGluZy4gIFlvdSBjYW4gbm90IGhhdmUKYm90aCBTQUwgaXRlbXMgYW5kIHNpbXBsZSBzb3VuZGZvbGRpbmcuCgpUaGVyZSBhcmUgdHdvIGl0ZW1zIHJlcXVpcmVkOiBvbmUgdG8gc3BlY2lmeSB0aGUgY2hhcmFjdGVycyB0aGF0IGFyZSBtYXBwZWQKYW5kIG9uZSB0aGF0IHNwZWNpZmllcyB0aGUgY2hhcmFjdGVycyB0aGV5IGFyZSBtYXBwZWQgdG8uICBUaGV5IG11c3QgaGF2ZQpleGFjdGx5IHRoZSBzYW1lIG51bWJlciBvZiBjaGFyYWN0ZXJzLiAgRXhhbXBsZToKCiAgICBTT0ZPRlJPTSBhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIH4KICAgIFNPRk9UTyAgIGViY3RlZmdoZWprbG5uZXBrcnN0ZXZ2a2VzZWJjdGVmZ2hlamtsbm5lcGtyc3RldnZrZXMgfgoKSW4gdGhlIGV4YW1wbGUgYWxsIHZvd2VscyBhcmUgbWFwcGVkIHRvIHRoZSBzYW1lIGNoYXJhY3RlciAnZScuICBBbm90aGVyCm1ldGhvZCB3b3VsZCBiZSB0byBsZWF2ZSBvdXQgYWxsIHZvd2Vscy4gIFNvbWUgY2hhcmFjdGVycyB0aGF0IHNvdW5kIG5lYXJseQp0aGUgc2FtZSBhbmQgYXJlIG9mdGVuIG1peGVkIHVwLCBzdWNoIGFzICdtJyBhbmQgJ24nLCBhcmUgbWFwcGVkIHRvIHRoZSBzYW1lCmNoYXJhY3Rlci4gIERvbid0IGRvIHRoaXMgdG9vIG11Y2gsIGFsbCB3b3JkcyB3aWxsIHN0YXJ0IGxvb2tpbmcgYWxpa2UuCgpDaGFyYWN0ZXJzIHRoYXQgZG8gbm90IGFwcGVhciBpbiBTT0ZPRlJPTSB3aWxsIGJlIGxlZnQgb3V0LCBleGNlcHQgdGhhdCBhbGwKd2hpdGUgc3BhY2UgaXMgcmVwbGFjZWQgYnkgb25lIHNwYWNlLiAgU2VxdWVuY2VzIG9mIHRoZSBzYW1lIGNoYXJhY3RlciBpbgpTT0ZPRlJPTSBhcmUgcmVwbGFjZWQgYnkgb25lLgoKWW91IGNhbiB1c2UgdGhlIHxzb3VuZGZvbGQoKXwgZnVuY3Rpb24gdG8gdHJ5IG91dCB0aGUgcmVzdWx0cy4gIE9yIHNldCB0aGUKJ3ZlcmJvc2UnIG9wdGlvbiB0byBzZWUgdGhlIHNjb3JlIGluIHRoZSBvdXRwdXQgb2YgdGhlIHx6PXwgY29tbWFuZC4KCgpVTlNVUFBPUlRFRCBJVEVNUwkJCQkqc3BlbGwtYWZmaXgtbm90LXN1cHBvcnRlZCoKClRoZXNlIGl0ZW1zIGFwcGVhciBpbiB0aGUgYWZmaXggZmlsZSBvZiBvdGhlciBzcGVsbCBjaGVja2Vycy4gIEluIFZpbSB0aGV5IGFyZQppZ25vcmVkLCBub3Qgc3VwcG9ydGVkIG9yIGRlZmluZWQgaW4gYW5vdGhlciB3YXkuCgpBQ0NFTlQJCShIdW5zcGVsbCkJCQkJKnNwZWxsLUFDQ0VOVCoKCQlVc2UgTUFQIGluc3RlYWQuIHxzcGVsbC1NQVB8CgpCUkVBSwkJKEh1bnNwZWxsKQkJCQkqc3BlbGwtQlJFQUsqCgkJRGVmaW5lIGJyZWFrIHBvaW50cy4gIFVuY2xlYXIgaG93IGl0IHdvcmtzIGV4YWN0bHkuCgkJTm90IHN1cHBvcnRlZC4KCkNIRUNLQ09NUE9VTkRDQVNFICAoSHVuc3BlbGwpCQkJKnNwZWxsLUNIRUNLQ09NUE9VTkRDQVNFKgoJCURpc2FsbG93IHVwcGVyY2FzZSBsZXR0ZXJzIGF0IGNvbXBvdW5kIHdvcmQgYm91bmRhcmllcy4KCQlOb3Qgc3VwcG9ydGVkLgoKQ0hFQ0tDT01QT1VORERVUCAgKEh1bnNwZWxsKQkJCSpzcGVsbC1DSEVDS0NPTVBPVU5ERFVQKgoJCURpc2FsbG93IHVzaW5nIHRoZSBzYW1lIHdvcmQgdHdpY2UgaW4gYSBjb21wb3VuZC4gIE5vdAoJCXN1cHBvcnRlZC4KCkNIRUNLQ09NUE9VTkRSRVAgIChIdW5zcGVsbCkJCQkqc3BlbGwtQ0hFQ0tDT01QT1VORFJFUCoKCQlTb21ldGhpbmcgYWJvdXQgdXNpbmcgUkVQIGl0ZW1zIGFuZCBjb21wb3VuZCB3b3Jkcy4gIE5vdAoJCXN1cHBvcnRlZC4KCkNIRUNLQ09NUE9VTkRUUklQTEUgIChIdW5zcGVsbCkJCQkqc3BlbGwtQ0hFQ0tDT01QT1VORFRSSVBMRSoKCQlGb3JiaWQgdGhyZWUgaWRlbnRpY2FsIGNoYXJhY3RlcnMgd2hlbiBjb21wb3VuZGluZy4gIE5vdAoJCXN1cHBvcnRlZC4KCkNPTVBMRVhQUkVGSVhFUyAgKEh1bnNwZWxsKQkJCQkqc3BlbGwtQ09NUExFWFBSRUZJWEVTKgoJCUVuYWJsZXMgdXNpbmcgdHdvIHByZWZpeGVzLiAgTm90IHN1cHBvcnRlZC4KCkNPTVBPVU5ECShIdW5zcGVsbCkJCQkJKnNwZWxsLUNPTVBPVU5EKgoJCVRoaXMgaXMgb25lIGxpbmUgd2l0aCB0aGUgY291bnQgb2YgQ09NUE9VTkQgaXRlbXMsIGZvbGxvd2VkIGJ5CgkJdGhhdCBtYW55IENPTVBPVU5EIGxpbmVzIHdpdGggYSBwYXR0ZXJuLgoJCVJlbW92ZSB0aGUgZmlyc3QgbGluZSB3aXRoIHRoZSBjb3VudCBhbmQgcmVuYW1lIHRoZSBvdGhlcgoJCWl0ZW1zIHRvIENPTVBPVU5EUlVMRSB8c3BlbGwtQ09NUE9VTkRSVUxFfAoKQ09NUE9VTkRGSVJTVAkoSHVuc3BlbGwpCQkJCSpzcGVsbC1DT01QT1VOREZJUlNUKgoJCVVzZSBDT01QT1VORFJVTEUgaW5zdGVhZC4gfHNwZWxsLUNPTVBPVU5EUlVMRXwKCkNPTVBPVU5EQkVHSU4JKEh1bnNwZWxsKQkJCQkqc3BlbGwtQ09NUE9VTkRCRUdJTioKCQlVc2UgQ09NUE9VTkRSVUxFIGluc3RlYWQuIHxzcGVsbC1DT01QT1VORFJVTEV8CgpDT01QT1VOREVORAkoSHVuc3BlbGwpCQkJCSpzcGVsbC1DT01QT1VOREVORCoKCQlVc2UgQ09NUE9VTkRSVUxFIGluc3RlYWQuIHxzcGVsbC1DT01QT1VORFJVTEV8CgpDT01QT1VORE1JRERMRQkoSHVuc3BlbGwpCQkJCSpzcGVsbC1DT01QT1VORE1JRERMRSoKCQlVc2UgQ09NUE9VTkRSVUxFIGluc3RlYWQuIHxzcGVsbC1DT01QT1VORFJVTEV8CgpDT01QT1VORFJVTEVTCShIdW5zcGVsbCkJCQkJKnNwZWxsLUNPTVBPVU5EUlVMRVMqCgkJTnVtYmVyIG9mIENPTVBPVU5EUlVMRSBsaW5lcyBmb2xsb3dpbmcuICBJZ25vcmVkLCBidXQgdGhlCgkJYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlci4KCkNPTVBPVU5EU1lMTEFCTEUgIChIdW5zcGVsbCkJCQkqc3BlbGwtQ09NUE9VTkRTWUxMQUJMRSoKCQlVc2UgU1lMTEFCTEUgYW5kIENPTVBPVU5EU1lMTUFYIGluc3RlYWQuIHxzcGVsbC1TWUxMQUJMRXwKCQl8c3BlbGwtQ09NUE9VTkRTWUxNQVh8CgpLRVkJCShIdW5zcGVsbCkJCQkJKnNwZWxsLUtFWSoKCQlEZWZpbmUgY2hhcmFjdGVycyB0aGF0IGFyZSBjbG9zZSB0b2dldGhlciBvbiB0aGUga2V5Ym9hcmQuCgkJVXNlZCB0byBnaXZlIGJldHRlciBzdWdnZXN0aW9ucy4gIE5vdCBzdXBwb3J0ZWQuCgkJCkxBTkcJCShIdW5zcGVsbCkJCQkJKnNwZWxsLUxBTkcqCgkJVGhpcyBzcGVjaWZpZXMgbGFuZ3VhZ2Utc3BlY2lmaWMgYmVoYXZpb3IuICBUaGlzIGFjdHVhbGx5CgkJbW92ZXMgcGFydCBvZiB0aGUgbGFuZ3VhZ2Uga25vd2xlZGdlIGludG8gdGhlIHByb2dyYW0sCgkJdGhlcmVmb3JlIFZpbSBkb2VzIG5vdCBzdXBwb3J0IGl0LiAgRWFjaCBsYW5ndWFnZSBwcm9wZXJ0eQoJCW11c3QgYmUgc3BlY2lmaWVkIHNlcGFyYXRlbHkuCgpMRU1NQV9QUkVTRU5UCShIdW5zcGVsbCkJCQkJKnNwZWxsLUxFTU1BX1BSRVNFTlQqCgkJT25seSBuZWVkZWQgZm9yIG1vcnBob2xvZ2ljYWwgYW5hbHlzaXMuCgpNQVhOR1JBTVNVR1MJKEh1bnNwZWxsKQkJCQkqc3BlbGwtTUFYTkdSQU1TVUdTKgoJCVNldCBudW1iZXIgb2Ygbi1ncmFtIHN1Z2dlc3Rpb25zLiAgTm90IHN1cHBvcnRlZC4KClBTRVVET1JPT1QJKEh1bnNwZWxsKQkJCQkqc3BlbGwtUFNFVURPUk9PVCoKCQlVc2UgTkVFREFGRklYIGluc3RlYWQuIHxzcGVsbC1ORUVEQUZGSVh8CgpTVUdTV0lUSERPVFMJKEh1bnNwZWxsKQkJCQkqc3BlbGwtU1VHU1dJVEhET1RTKgoJCUFkZHMgZG90cyB0byBzdWdnZXN0aW9ucy4gIFZpbSBkb2Vzbid0IG5lZWQgdGhpcy4KClNZTExBQkxFTlVNCShIdW5zcGVsbCkJCQkJKnNwZWxsLVNZTExBQkxFTlVNKgoJCU5vdCBzdXBwb3J0ZWQuCgpUUlkJCShNeXNwZWxsLCBIdW5zcGVsbCwgb3RoZXJzKQkJKnNwZWxsLVRSWSoKCQlWaW0gZG9lcyBub3QgdXNlIHRoZSBUUlkgaXRlbSwgaXQgaXMgaWdub3JlZC4gIEZvciBtYWtpbmcKCQlzdWdnZXN0aW9ucyB0aGUgYWN0dWFsIGNoYXJhY3RlcnMgaW4gdGhlIHdvcmRzIGFyZSB1c2VkLCB0aGF0CgkJaXMgbXVjaCBtb3JlIGVmZmljaWVudC4KCldPUkRDSEFSUwkoSHVuc3BlbGwpCQkJCSpzcGVsbC1XT1JEQ0hBUlMqCgkJVXNlZCB0byByZWNvZ25pemUgd29yZHMuICBWaW0gZG9lc24ndCBuZWVkIGl0LCBiZWNhdXNlIHRoZXJlCgkJaXMgbm8gbmVlZCB0byBzZXBhcmF0ZSB3b3JkcyBiZWZvcmUgY2hlY2tpbmcgdGhlbSAodXNpbmcgYQoJCXRyaWUgaW5zdGVhZCBvZiBhIGhhc2h0YWJsZSkuCgogdmltOnR3PTc4OnN3PTQ6dHM9ODpmdD1oZWxwOm5vcmw6Cg==