dHJlZSA1MThjYWQ2NjhjOGI3MjM5ZDc3YzUzNTQ2MDNhMzgxZmRjMjE0OTZjCnBhcmVudCA3ZjMxZmVjODk2MWUyNTEyYjBlYWNhNTg1NWEzNjc0YTVlZTI0NWRlCmF1dGhvciBXaWxseSBUYXJyZWF1IDx3QDF3dC5ldT4gMTYzNTg2OTI5NSArMDEwMApjb21taXR0ZXIgV2lsbHkgVGFycmVhdSA8d0Axd3QuZXU+IDE2MzU4NzA1MjMgKzAxMDAKZW5jb2RpbmcgbGF0aW4xCgpNRURJVU06IHZhcnM6IG1ha2UgdGhlIHZhcigpIHNhbXBsZSBmZXRjaCBmdW5jdGlvbiByZWFsbHkgcmV0dXJuIHR5cGUgQU5ZCgpBIGxvbmctc3RhbmRpbmcgaXNzdWUgd2FzIHJlcG9ydGVkIGluIGlzc3VlICMxMjE1LgoKSW4gc2hvcnQsIHZhcigpIHdhcyBpbml0aWFsbHkgaW50ZXJuYWxseSBkZWNsYXJlZCBhcyByZXR1cm5pbmcgYSBzdHJpbmcKYmVjYXVzZSBpdCB3YXMgbm90IHBvc3NpYmxlIGJ5IHRoZW4gdG8gcmV0dXJuICJhbnkgdHlwZSIuIEFzIHN1Y2gsIHVzZXJzCnJlZ3VsYXJseSBnZXQgdHJhcHBlZCB0aGlua2luZyB0aGF0IHdoZW4gdGhleSdyZSBzdG9yaW5nIGFuIGludGVnZXIgdGhlcmUsCnRoZW4gdGhlIGludGVnZXIgbWF0Y2hpbmcgbWV0aG9kIGF1dG9tYXRpY2FsbHkgYXBwbGllcy4gRXhjZXB0IHRoYXQgdGhpcwppcyBub3QgcG9zc2libGUgc2luY2UgdGhpcyBpcyByZWxhdGVkIHRvIHRoZSBjb25maWcgcGFyc2VyIGFuZCBpcyBkZWNpZGVkCmF0IGJvb3QgdGltZSB3aGVyZSB0aGUgdmFyaWFibGUncyB0eXBlIGlzIG5vdCBrbm93biB5ZXQuCgpBcyBzdWNoLCB3aGF0IGlzIGRvbmUgaXMgdGhhdCB0aGUgb3V0cHV0IGJlaW5nIGRlY2xhcmVkIGFzIHR5cGUgc3RyaW5nLAp0aGUgc3RyaW5nIG1hdGNoIHdpbGwgYXV0b21hdGljYWxseSBhcHBseSwgYW5kIGFueSB2YWx1ZSB3aWxsIGZpcnN0IGJlCmNvbnZlcnRlZCB0byBhIHN0cmluZy4gVGhpcyByZXN1bHRzIGluIHNldmVyYWwgaXNzdWVzIGxpa2U6CgogICAgaHR0cC1yZXF1ZXN0IHNldC12YXIodHhuLmZvbykgaW50KC0xKQogICAgaHR0cC1yZXF1ZXN0IGRlbnkgaWYgeyB2YXIodHhuLmZvbykgbHQgMCB9Cgpub3Qgd29ya2luZy4gVGhpcyBpcyBiZWNhdXNlIHRoZSBzdHJpbmcgbWF0Y2ggb24gdGhlIHNlY29uZCBsaW5lIHdpbGwgaW4KZmFjdCBjb21wYXJlIHRoZSBzdHJpbmcgcmVwcmVzZW50YXRpb24gb2YgdGhlIHZhcmlhYmxlIGFnYWluc3Qgc3RyaW5ncwoibHQiIGFuZCAiMCIsIG5vbmUgb2Ygd2hpY2ggbWF0Y2hlcy4KClRoZSBkb2Mgc2F5cyB0aGF0IHRoZSBtYXRjaGluZyBtZXRob2QgaXMgbWFuZGF0b3J5LCB0aG91Z2ggdGhhdCdzIG5vdAp0aGUgY2FzZSBpbiB0aGUgY29kZSBkdWUgdG8gdGhhdCBkZWZhdWx0IHN0cmluZyB0eXBlIGJlaW5nIHBlcm1pc3NpdmUuClRoZXJlJ3Mgbm90IGV2ZW4gYSB3YXJuaW5nIHdoZW4gbm8gZXhwbGljaXQgbWF0Y2ggaXMgcGxhY2VkLCBiZWNhdXNlCnRoaXMgaGFwcGVucyB2ZXJ5IGRlZXAgaW4gdGhlIGV4cHJlc3Npb24gZXZhbHVhdG9yIGFuZCBtYWtpbmcgYSBzcGVjaWFsCmNhc2UganVzdCBmb3IgInZhciIgY2FuIHJldmVhbCB2ZXJ5IGNvbXBsaWNhdGVkLgoKVGhlIHNldC12YXIoKSBjb252ZXJ0ZXIgYWxyZWFkeSBtYW5kYXRlcyBhIG1hdGNoaW5nIG1ldGhvZCwgYXMgdGhlCmZvbGxvd2luZyB3aWxsIGJlIHJlamVjdGVkOgoKICAgIC4uLiBpZiB7IGludCgxMiksc2V0LXZhcih0eG4udHJ1YykgMTIgfQoKICB3aGlsZSB0aGlzIG9uZSB3aWxsIHdvcms6CgogICAgLi4uIGlmIHsgaW50KDEyKSxzZXQtdmFyKHR4bi50cnVjKSAtbSBpbnQgMTIgfQoKQXMgc3VjaCwgdGhpcyBwYXRjaCB0aGlzIG1vZGlmaWVzIHZhcigpIHRvIG1hdGNoIHRoZSBkb2MsIHJldHVybmluZyB0aGUKdHlwZSAiYW55IiwgYW5kIG1hbmRhdGluZyB0aGUgbWF0Y2hpbmcgbWV0aG9kLCBpbXBseWluZyB0aGF0IHRoaXMgYm9ndXMKY29uZmlnIHdoaWNoIGRvZXMgbm90IHdvcms6CgogICAgaHR0cC1yZXF1ZXN0IHNldC12YXIodHhuLmZvbykgaW50KC0xKQogICAgaHR0cC1yZXF1ZXN0IGRlbnkgaWYgeyB2YXIodHhuLmZvbykgbHQgMCB9CgogIHdpbGwgbmVlZCB0byBiZSB3cml0dGVuIGxpa2UgdGhpczoKCiAgICBodHRwLXJlcXVlc3Qgc2V0LXZhcih0eG4uZm9vKSBpbnQoLTEpCiAgICBodHRwLXJlcXVlc3QgZGVueSBpZiB7IHZhcih0eG4uZm9vKSAtbSBpbnQgbHQgMCB9CgpUaGlzICp3aWxsKiBicmVhayBzb21lIGNvbmZpZ3MgKGFuZCBldmVuIDMgb2Ygb3VyIHJlZ3Rlc3RzIHJlbGllZCBvbgp0aGlzKSwgYnV0IGV4Y2VwdCB0aG9zZSB3aGljaCBhbHJlYWR5IG1hdGNoIHN0cmluZyBleGNsdXNpdmVseSwgYWxsCm90aGVyIG9uZXMgYXJlIGFscmVhZHkgYnJva2VuIGFuZCBzaWxlbnRseSBmYWlsIChhbmQgb25lIG9mIHRoZSAzCnJlZ3Rlc3RzLCB0aGUgb25lIG9uIEZJWCwgd2FzIGJvZ3VzIHJlZ2FyZGluZyB0aGlzKS4KCkluIG9yZGVyIHRvIGZpeCBleGlzdGluZyBjb25maWdzLCBvbmUgY2FuIHNpbXBseSBhcHBlbmQgIi1tIHN0ciIKYWZ0ZXIgYSAidmFyKCkiIGluIGFuIEFDTCBvciAiaWYiIGV4cHJlc3Npb246CgogICAgaHR0cC1yZXF1ZXN0IGRlbnkgdW5sZXNzIHsgdmFyKHR4bi5qd3RfYWxnKSAiRVMiIH0KCiAgbXVzdCBiZWNvbWU6CgogICAgaHR0cC1yZXF1ZXN0IGRlbnkgdW5sZXNzIHsgdmFyKHR4bi5qd3RfYWxnKSAtbSBzdHIgIkVTIiB9CgpNb3N0IGNvbW1vbmx5LCBwYXR0ZXJucyBzdWNoIGFzICJsZSIsICJsdCIsICJnZSIsICJndCIsICJlcSIsICJuZSIgaW4KZnJvbnQgb2YgYSBudW1iZXIgaW5kaWNhdGUgdGhhdCB0aGUgaW50ZW50IHdhcyB0byBtYXRjaCBhbiBpbnRlZ2VyLAphbmQgaW4gdGhpcyBjYXNlICItbSBpbnQiIHdvdWxkIGJlIGRlc2lyZWQ6CgogICAgdGNwLXJlc3BvbnNlIGNvbnRlbnQgcmVqZWN0IGlmICEgeyB2YXIocmVzLnNpemUpIGd0IDM4MDAgfQoKICBvdWdodCB0byBiZWNvbWU6CgogICAgdGNwLXJlc3BvbnNlIGNvbnRlbnQgcmVqZWN0IGlmICEgeyB2YXIocmVzLnNpemUpIC1tIGludCBndCAzODAwIH0KClRoaXMgbXVzdCBub3QgYmUgYmFja3BvcnRlZCwgYnV0IGlmIGEgc29sdXRpb24gaXMgZm91bmQgdG8gYXQgbGVhc3QKZGV0ZWN0IHRoaXMgZXhhY3QgY29uZGl0aW9uIGluIHRoZSBnZW5lcmljIGV4cHJlc3Npb24gcGFyc2VyIGFuZAplbWl0IGEgd2FybmluZywgdGhpcyBjb3VsZCBwcm9iYWJseSBoZWxwIHNwb3QgY29uZmlndXJhdGlvbiBidWdzLgoKTGluazogaHR0cHM6Ly93d3cubWFpbC1hcmNoaXZlLmNvbS9oYXByb3h5QGZvcm1pbHV4Lm9yZy9tc2c0MTM0MS5odG1sCkNjOiBDaHJpc3RvcGhlciBGYXVsZXQgPGNmYXVsZXRAaGFwcm94eS5jb20+CkNjOiBUaW0gRPxzdGVyaHVzIDx0aW1AYmFzdGVsc3R1LmJlPgo=