V2VkIEp1bCAyMiAxNjo0NzoxNCAxOTk4ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBsaWJnbm9tZS9nbm9tZS1jb25maWcuYyAoX2dub21lX2NvbmZpZ19nZXRfaW50X3dpdGhfZGVmYXVsdCk6CglVc2VkIHdyb25nIHNlbnNlIGluIHByZXZpb3VzIGNoYW5nZS4gIER1aC4KCShfZ25vbWVfY29uZmlnX2dldF9mbG9hdF93aXRoX2RlZmF1bHQpOiBMaWtld2lzZS4KCShfZ25vbWVfY29uZmlnX2dldF9ib29sX3dpdGhfZGVmYXVsdCk6IExpa2V3aXNlLgoKCSogbGliZ25vbWUvZ25vbWUtY29uZmlnLmMgKF9nbm9tZV9jb25maWdfZ2V0X2ludF93aXRoX2RlZmF1bHQpOiBJdAoJaXNuJ3QgYW4gZXJyb3IgaWYgdGhlIGtleSBpcyBub3QgZm91bmQuCgkoX2dub21lX2NvbmZpZ19nZXRfZmxvYXRfd2l0aF9kZWZhdWx0KTogTGlrZXdpc2UuCgkoX2dub21lX2NvbmZpZ19nZXRfYm9vbF93aXRoX2RlZmF1bHQpOiBMaWtld2lzZS4KCShfZ25vbWVfY29uZmlnX2dldF90cmFuc2xhdGVkX3N0cmluZ193aXRoX2RlZmF1bHQpOiBSZW1vdmVkIGxlZ2FjeQoJIkMiIGxvY2FsZSBjb2RlLgoKU2F0IEp1bCAxOCAyMDoxODo1NyAxOTk4ICBKb2huIEVsbGlzICA8am9obmVAYmVsbGF0bGFudGljLm5ldD4KCiAgICAgICAgKiBsaWJnbm9tZS9nbm9tZS1kZW50cnkuW2NoXSAoZ25vbWVfZGVza3RvcF9lbnRyeV9sb2FkX3VuY29uZGl0aW9uYWwpOgogICAgICAgIG5ldyBmdW5jdGlvbiBuZWNlc3NhcnkgZm9yIGxvYWRpbmcvZWRpdGluZyAnYnJva2VuJyAuZGVza3RvcCBlbnRyaWVzLgoKMTk5OC0wNy0xNyAgRmVkZXJpY28gTWVuYSBRdWludGVybyAgPGZlZGVyaWNvQG51Y2xlY3UudW5hbS5teD4KCgkqIGNvbmZpZ3VyZS5pbjogQWRkZWQgZ25vbWUtY2FudmFzLWxpbmUgYW5kIGdub21lLWNhbnZhcy11dGlsIHRvCgl0aGUgc291cmNlcy4KCjE5OTgtMDctMTUgIFJhamEgUiBIYXJpbmF0aCAgPGhhcmluYXRoQGNzLnVtbi5lZHU+CgoJKiBhY2NvbmZpZy5oIChORUVEX0RFQ0xBUkFUSU9OX0dFVEhPU1ROQU1FKTogTmV3IHRhZy4KCgkqIGNvbmZpZ3VyZS5pbiAoanBlZ2xpYi5oKTogVW5kZWYgYSBmZXcgbW9yZSBzeW1ib2xzIHRvIHByZXZlbnQKCXByZXByb2Nlc3NvciBzeW1ib2wgY2xhc2hlcy4gIEluIHRoaXMgY2FzZSwganBlZ2xpYi5oIGRlZmluZXMKCUhBVkVfU1REREVGX0ggYW5kIEhBVkVfU1RETElCX0guCgoxOTk4LTA3LTE0ICBSYWphIFIgSGFyaW5hdGggIDxoYXJpbmF0aEBjcy51bW4uZWR1PgoKCSogY29uZmlndXJlLmluIChBTV9QQVRIX0dMSUIpOiBOZXcgdGVzdC4KCShMSUJHTk9NRV9MSUJTKTogTGlzdCBgLWxnbGliJyB0b28uCglCYXNlZCBvbiBzdWdnZXN0aW9uIGZyb20gCglNYW5pc2ggVmFjaGhhcmFqYW5pIDxtdmFjaGhhckB2Z2VyLnJ1dGdlcnMuZWR1Pi4KCgkqIGdub21lLWNvbmZpZy5pbjogTWFrZSBzdXJlIGxpYnJhcnkgb3JkZXJpbmcgaXMgcHJlc2VydmVkLCB3aGVuCglyZW1vdmluZyBkdXBsaWNhdGVzLgoKCSogTWFrZWZpbGUuYW0gKEFVVE9NQUtFX09QVElPTlMpOiBSZXF1aXJlIGF1dG9tYWtlIDEuMy4KCjE5OTgtMDctMTMgIFJhamEgUiBIYXJpbmF0aCAgPGhhcmluYXRoQGNzLnVtbi5lZHU+CgoJKiBNYWtlZmlsZS5hbSAoYnVpbHRfU1VCRElSUyk6IEFkZCBgdGVzdC1zdWl0ZScuCgoxOTk4LTA3LTEyICBSYWphIFIgSGFyaW5hdGggIDxoYXJpbmF0aEBjcy51bW4uZWR1PgoKCSogY29uZmlndXJlLmluIChkbG9wZW4pOiBUZXN0IGRpcmVjdGx5IGZvciB0aGUgZnVuY3Rpb24uCgkoZGxlcnJvcik6IEluY2x1ZGUgJERMX0xJQiBpbiAkTElCUyBiZWZvcmUgdGVzdGluZy4KCUZyb20gSmFtZXMgTWljaGFlbCBNYXN0cm9zIDxzcGFyZUBqZW5uaWZlci11bml4LmR5bi5tbC5vcmc+LgoKbWFyIGp1bCAgNyAxMDoxMzo0NCBBUlQgMTk5OCAgSG9yYWNpbyBKLiBQZfFhIDxob3JhcGVAY29tcGVuZGl1bS5jb20uYXI+CgoJKiBsaWJnbm9tZXVpL2dub21lLWNsaWVudC5oOiBBZGRlZCBnbm9tZV9jbGllbnRfc2F2ZSAmCgkJZ25vbWVfY2xpZW50X3Jlc3RhcnRfc2Vzc2lvbi4KCSogbGliZ25vbWV1aS9nbm9tZS1jbGllbnQuYzogQWRkZWQgZ25vbWVfY2xpZW50X3NhdmUgJgoJCWdub21lX2NsaWVudF9yZXN0YXJ0X3Nlc3Npb24uCgoxOTk4LTA3LTA2ICBGZWRlcmljbyBNZW5hIFF1aW50ZXJvICA8ZmVkZXJpY29AbnVjbGVjdS51bmFtLm14PgoKCSogY29uZmlndXJlLmluOiBBZGRlZCBnbm9tZS1jYW52YXMtaW1hZ2UgZmlsZXMuCgpUdWUgSnVsICA3IDAwOjAxOjE5IDE5OTggIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGxpYmdub21lL2dub21lLXBhcnNlLmM6IERvbid0IGluY2x1ZGUgPG1hbGxvYy5oPi4KClN1biBKdWwgIDUgMTg6MjE6MzEgMTk5OCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogbGliZ25vbWUvZ25vbWUtZXhlYy5oOiBEZWNsYXJlIGdub21lX2V4ZWN1dGVfYXN5bmNfd2l0aF9lbnYuCgkqIGxpYmdub21lL2dub21lLWV4ZWMuYyAoZ25vbWVfZXhlY3V0ZV9hc3luY193aXRoX2Vudik6IE5ldyBmdW5jdGlvbi4KCShnbm9tZV9leGVjdXRlX2FzeW5jKTogVXNlIGl0LgoKMTk5OC0wNy0wNSAgRmVkZXJpY28gTWVuYSBRdWludGVybyAgPGZlZGVyaWNvQG51Y2xlY3UudW5hbS5teD4KCgkqIGNvbmZpZ3VyZS5pbjogQWRkZWQgZ25vbWUtY2FudmFzLXRleHQuW2NoXS4KCjE5OTgtMDctMDQgIFN0dWFydCBQYXJtZW50ZXIgPHBhdmxvdkBwYXZsb3YubmV0PgoKCSogbGliZ25vbWV1aS9nbm9tZS1tZGkuYwoJICAoY2hpbGRfbGlzdF9tZW51X3JlbW92ZV9pdGVtKTogYWRkZWQgYSBjaGVjawoJICAgIHRvIHNlZSBpZiB0aGUgbWVudSBleGlzdGVkLi4uIHRoaXMgbWF5IG5vdCBiZSBhIGdvb2QgaWRlYSwgYnV0IHNpbmNlCgkgICAgZ25vbWUtbWRpJ3MgZG9jdW1lbnRhdGlvbiBpc24ndCBhbGwgdGhhdCwgaXQgbWFkZSBzZW5zZTopCgkgIChjaGlsZF9saXN0X21lbnVfYWRkX2l0ZW0pOiBzYW1lIHRoaW5nCgoxOTk4LTA3LTAyICBNaWd1ZWwgZGUgSWNhemEgIDxtaWd1ZWxAbnVjbGVjdS51bmFtLm14PgoKCSogbGliZ25vbWUvTWFrZWZpbGUuYW0gKGRuc19oZWxwZXJfTERBREQpOiBDb3NtZXRpYyBjbGVhbnVwcy4KClR1ZSBKdW4gMzAgMTY6MTI6NTUgMTk5OCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogbGliZ25vbWUvZ25vbWUtY29uZmlnLmM6IFJlbW92ZWQgYmFja3dhcmRzLWNvbXBhdGliaWxpdHkgaGFjay4KCShfZ25vbWVfY29uZmlnX2dldF90cmFuc2xhdGVkX3N0cmluZ193aXRoX2RlZmF1bHQpOiBIYW5kbGUKCWxhbmd1YWdlIHNwZWNzIGxpa2UgYHB0X1BUQGZvbycuCgoJKiBsaWJnbm9tZS9nbm9tZS1pMThuLmM6IEluY2x1ZGUgbGliZ25vbWVQLmguCgkqIGxpYmdub21lL2dub21lLWhlbHAuYzogSW5jbHVkZSBnbm9tZS1pMThuUC5oLCBzeXMvd2FpdC5oLgoJKiBsaWJnbm9tZS9nbm9tZWxpYi1pbml0LmM6IEluY2x1ZGUgZ25vbWUtaTE4blAuaC4KCSogbGliZ25vbWUvZ25vbWUtbWltZS5jOiBJbmNsdWRlIGxpYmdub21lUC5oLgoJKiBsaWJnbm9tZS9nbm9tZS1jb25maWcuYzogSW5jbHVkZSBsaWJnbm9tZVAuaC4KCSogbGliZ25vbWUvTWFrZWZpbGUuYW0gKG5vaW5zdF9IRUFERVJTKTogQWRkZWQgbGliZ25vbWVQLmguCgkqIGxpYmdub21lL2xpYmdub21lUC5oOiBOZXcgZmlsZS4KCjE5OTgtMDYtMjkgIE1pZ3VlbCBkZSBJY2F6YSAgPG1pZ3VlbEBudWNsZWN1LnVuYW0ubXg+CgoJKiBsaWJnbm9tZS9nbm9tZS1jb25maWcuYyAoZ25vbWVfY29uZmlnX3BvcF9wcmVmaXgsCglnbm9tZV9jb25maWdfcmVtb3ZlX3ByZWZpeF9saXN0KTogUmVtb3ZlZC4gIElmIGFueSBhcHBsaWNhdGlvbgoJcmVsaWVkIG9uIHRoaXMgc3R1ZmYgaXQgd2FzIGJyb2tlbi4gIFRoYXQgaXMgd2hhdCBwdXNoL3BvcCBwcmVmaXgKCWFyZSBmb3IuIAoKTW9uIEp1biAyOSAwMDoxODoxMCAxOTk4ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBsaWJnbm9tZS9nbm9tZS1jb25maWcuYyAoX2dub21lX2NvbmZpZ19zZXRfZmxvYXQpOiBVc2UgJS4xN2cKCWZvcm1hdCwgdG8gZW5zdXJlIGZ1bGwgcHJlY2lzaW9uLgoKMTk5OC0wNi0yOCAgUmFqYSBSIEhhcmluYXRoICA8aGFyaW5hdGhAY3MudW1uLmVkdT4KCglOZXcsIGltcHJvdmVkLCBnbm9tZS1jb25maWcgc2NyaXB0LiAoTm90IHJlbGF0ZWQgdG8KCWxpYmdub21lL2dub21lLWNvbmZpZy5bY2hdKS4KCSogTWFrZWZpbGUuYW0gKGdub21lLWNvbmZpZyk6IE1vdmUgZ2VuZXJhdGlvbiB0byAuLi4KCSogY29uZmlndXJlLmluIChBQ19TVUJTVCk6IC4uLiBoZXJlLgoJKEdOT01FX0xJQkRJUixHTk9NRV9JTkNMVURFRElSKTogVXNlICR7Li59LCBub3QgJCguLikgZm9yIHZhcmlhYmxlCglzdWJzdGl0dXRpb24uIAoJKiBnbm9tZS1jb25maWcuaW46IFJlaGF1bC4KCjE5OTgtMDYtMjYgIE51bm8gRmVycmVpcmEgIDxubXJmQHJubC5pc3QudXRsLnB0PgoKCSogY29uZmlndXJlLmluIChBTExfTElOR1VBUyk6IEFkZGVkIFBvcnVndWVzZSB0cmFuc2xhdGlvbi4KClRodSBKdW4gMTggMjM6NTI6MDcgMTk5OCAgR2VvcmdlIExlYmwgIDxqaXJrYUA1ei5jb20+CgoJKiBsaWJnbm9tZS9nbm9tZS1jb25maWcuW2NoXTogbWFkZSBpdCBwb3NzaWJsZSB0byBjYWxsLCBzZXQgYW5kCgkgIHN5bmMgaGFuZGxlcnMsIHRoaXMgaXMgdXNlZnVsbCBmb3IgYXV0b3N5bmNpbmcgdGhhdCBjYW4gYmUKCSAgZG9uZSBpbiBsaWJnbm9tZXVpIC4uIG9yIGFueSB0b29sa2l0IHNwZWNpZmljIGxpYgoKVGh1IEp1biAxOCAwMDoyNDoyMSAxOTk4ICBHZW9yZ2UgTGVibCAgPGppcmthQDV6LmNvbT4KCgkqIGxpYmdub21lL2dub21lLWNvbmZpZy5bY2hdOiBhZGRlZCB0d28gY2FsbHMsIF9yZW1vdmVfcHJlZml4X2xpc3QKCSAgYW5kIF9zZXRfcHJlZml4X2xpc3QsIHRoZXNlIGZ1bmN0aW9ucyBjYW4gYmUgdXNlZCBieSByb3V0aW5lcwoJICB3aGljaCB3YW50IHRvIHNldCBpdCdzIG93biBwcmVmaXggc3RhY2ssIGJ1dCBkb24ndCB3YW5uYSBjb3JydXB0CgkgIHRoZSBwcmVmaXggc3RhY2sgZm9yIHRoZSByZXN0IG9mIHRoZSBhcHBsaWNhdGlvbi4KCgkqIGxpYmdub21lL2dub21lLWkxOG4uYzogYWRkZWQgI2luY2x1ZGUgPHN0cmluZy5oPgoKVHVlIEp1biAxNiAxNToyNDo0NiAxOTk4ICBIYXZvYyBQZW5uaW5ndG9uICA8aHBAcG9ib3guY29tPgoKCSogbGliZ25vbWUvZ25vbWUtdXRpbC5oLCBnbm9tZS11dGlsLmMgKGdub21lX2RpcnJlbGF0aXZlX2ZpbGUpOgoJbWFrZSBjaGFyICogYXJncyBjb25zdC4KCShnbm9tZV9kYXRhZGlyX2ZpbGUsIGdub21lX2xpYmRpcl9maWxlLCBnbm9tZV9waXhtYXBfZmlsZSwKCWdub21lX3VuY29uZGl0aW9uYWxfcGl4bWFwX2ZpbGUsIGdub21lX3VuY29uZGl0aW9uYWxfbGliZGlyX2ZpbGUsIAoJZ25vbWVfdW5jb25kaXRpb25hbF9kYXRhZGlyX2ZpbGUpOiBjb25zdCBjaGFyICoKCShnX2ZpbGVuYW1lX3BvaW50ZXIpOiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBsYXN0IHBhcnQgb2YgYQoJcGF0aC4gTWF5YmUgdGhpcyBzaG91bGQgcmVwbGFjZSBnX2ZpbGVuYW1lX2luZGV4LgoJKGdfZXh0ZW5zaW9uX3BvaW50ZXIpOiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBmaWxlbmFtZSBleHRlbnNpb24uCgkoZ19jb3B5X3ZlY3Rvcik6IENvcHkgY2hhciAqKi4gY29uc3QgaXNuJ3QgcmlnaHQsIG5lZWRzIGZpeGluZy4KCShnX2ZsYXR0ZW5fdmVjdG9yKTogTWFrZSBhIHZlY3RvciBpbnRvIGEgc2luZ2xlIHN0cmluZy4KCShnX2lzX2ltYWdlX2ZpbGVuYW1lKTogRGV0ZXJtaW5lIGlmIGEgZmlsZW5hbWUncyBleHRlbnNpb24KCXN1Z2dlc3RzIGFuIGltYWdlIGZpbGUuCgoJKiBsaWJnbm9tZS9nbm9tZS1kZW50cnkuaCwgZ25vbWUtZGVudHJ5LmMKCShnbm9tZV9pc19wcm9ncmFtX2luX3BhdGgpOiBwdXQgY29uc3Qgb24gdGhlIGNoYXIgKiBhcmcuIFNob3VsZG4ndAoJdGhpcyBmdW5jdGlvbiBnbyBpbiBnbm9tZS11dGlsPwoJKGdub21lX2Rlc2t0b3BfZW50cnlfbG9hZCk6IGNvbnN0IGNoYXIgKgoJKGdub21lX2Rlc2t0b3BfZW50cnlfbG9hZF9mbGFncyk6IGNvbnN0IGNoYXIgKgoJKGdub21lX2Rlc2t0b3BfZW50cnlfY29weSk6IGNvcHkgdGhlIHN0cnVjdC4gSSBndWVzcyBJIGRpZG4ndCBlbmQKCXVwIHVzaW5nIHRoaXMsIGJ1dCBoZXJlIGl0IGlzIGFueXdheS4KCQpTdW4gSnVuIDE0IDE4OjAzOjE0IDE5OTggIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGxpYmdub21lL2dub21lLWV4ZWMuYyAoZ25vbWVfZXhlY3V0ZV9hc3luYyk6IFJlbW92ZWQgcmVkdW5kYW50CglleGl0IChyZXBvcnRfZXJybm8gbmV2ZXIgcmV0dXJucykuICBTZXQgZXJybm8gYWZ0ZXIgd2FpdHBpZCwgbm90CgliZWZvcmUgaXQuCgkoZ25vbWVfZXhlY3V0ZV9zaGVsbCk6IEFkZGVkIGNhc3QgdG8gYXZvaWQgd2FybmluZy4KClN1biBKdW4gMTQgMTk6MTY6MDAgMTk5OCAgTWFuaXNoIFZhY2hoYXJhamFuaSA8bXZhY2hoYXJAdmdlci5ydXRnZXJzLmVkdT4KCgkqIGxpYmdub21lL2dub21lLWV4ZWMuYyBnbm9tZV9leGVjdXRlX2FzeW5jOiBXZSBuZWVkIHRvIGNhbGwKCXdhaXRwaWQsIGV2ZW4gb24gZmFpbHVyZSwgc2luY2UgaWYgdGhlIHNlY29uZCBjaGlsZCBmYWlscyB0byBleGVjLAoJdGhlIGZpcnN0IHdpbGwgYmVjb21lIGEgem9tYmllIHVudGlsIHRoZSBTSUdDSExEIGlzIGhhbmRsZWQgdmlhCgl3YWl0cGlkLiAgQWxzbywgaWYgdGhlIHNlY29uZCBjaGlsZCBmYWlscyB0byBleGVjLCBleGl0LCBkb24ndAoJZmFsbCB0aHJvdWdoLgoKU3VuIEp1biAxNCAxMzozMzo1MCAxOTk4ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBsaWJnbm9tZS9NYWtlZmlsZS5hbSAoSU5DTFVERVMpOiBMb29rIGluIC4uL2ludGwuICBEb24ndCBsb29rIGluCgkuLi9zdXBwb3J0ICh0aGUgbmVlZCBmb3IgdGhpcyBpcyBkaXNjb3ZlcmVkIGJ5IGNvbmZpZ3VyZSkuCgpTdW4gSnVuIDE0IDA5OjM0OjM2IDE5OTggIERpY2sgUG9ydGVyICA8ZGlja0BjeW1ydS5uZXQ+CgoJKiBjb25maWd1cmUuaW4gdHdlYWsgZm9yIGxpYmdpZgoKVGh1IEp1biAxMSAwOTo1NToyNSAxOTk4ICBSYWRlayBEb3VsaWsgIDxnaXNAYWNhZGVteS5jYXMuY3o+CgoJKiBsaWJnbm9tZS9nbm9tZS1oZWxwLmg6IGFkZGVkIEdOT01FX0RFQ0xTCgkqIGxpYmdub21lL2dub21lLXN0cmluZy5oOiBhZGRlZCBHTk9NRV9ERUNMUwoKMTk5OC0wNi0xMSAgUmFqYSBSIEhhcmluYXRoICA8aGFyaW5hdGhAY3MudW1uLmVkdT4KCgkqIGNvbmZpZ3VyZS5pbjogUmVtb3ZlIHN0dWZmIHJlbGF0aW5nIHRvIGBidWlsZF9DQycuIAoKV2VkIEp1biAxMCAxOToyNDowNyBQRFQgMTk5OCBNYW5pc2ggU2luZ2ggPHlvc2hAZ2ltcC5vcmc+CgoJKiBjaGFuZ2VkIHRoaW5ncyB0byB1c2UgR1RLX0hBVkVfQUNDRUxfR1JPVVAgaW5zdGVhZCBvZgoJSEFWRV9ERVZHVEsuLi4gaW5zdGFsbGVkIGhlYWRlcnMgZGVwZW5kaW5nIG9uIGNvbmZpZy5oCglzdHVmZiBpcyBiYWQuCgpXZWQgSnVuIDEwIDE0OjE5OjM5IEVEVCAxOTk4IEdyZWdvcnkgTWNMZWFuIDxncmVnbUBjb21zdGFyLm5ldD4KCgkqIFlFUyEgZ25vbWUtbGlicyBhcyBhIHdob2xlIG5vdyBjb21waWxlcyBhZ2FpbnN0IGd0ayAxLjAueCAob24gbXkKCSAgbWFjaGluZSBhdGxlYXN0KSBOb3cgSSBob3BlIEkgY2FuIGdldCBiYWNrIHRvIHdvcmsuCgpXZWQgSnVuIDEwIDAwOjQ3OjEyIDE5OTggIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGxpYmdub21lL2dub21lLXBhcnNlLmMgKG91cl9vcHRpb25zKTogTmV3IGdsb2JhbC4KCShoZWxwX3BhcnNlcik6IE5ldyBnbG9iYWwuCgkoZ25vbWVfcGFyc2VfYXJndW1lbnRzKTogUmVnaXN0ZXIgaGVscF9wYXJzZXIuCgkoR1JPVVApOiBOZXcgZGVmaW5lLgoKVHVlIEp1biAgOSAyMjo1NToyMCBFRFQgMTk5OCBHcmVnb3J5IE1jTGVhbiA8Z3JlZ21AY29tc3Rhci5uZXQ+CgoJKiBtYWNyb3MvZ25vbWUteC1jaGVja3MubTQ6IHF1aWNrIGFuZCBkaXJ0eSBjaGVjayBmb3IgZGV2ZWwgZ3RrIGFuZAoJICBkZWZpbmUgSEFWRV9ERVZHVEsgaWYgaXRzIGZvdW5kLiBUaGlzIHNob3VsZCBzYXZlIHVzIGEgYnVuY2ggb2YKCSAgd29yayBuZXh0IHRpbWUgd2UgZ28gdG8gZG8gYSByZWxlYXNlIHdlIHdvbid0IGhhdmUgdG8gY2hhc2UKCSAgYXJvdW5kIGNvZGUgdGhhdCBvbmx5IHdvcmtzIG9uIHRoZSBkZXZlbCB2ZXJzaW9uIG9mIGd0ay4KCSogbGliZ25vbWV1aS8qIGJyYWNrZXRlZCBhbGwgY29kZSB0aGF0IHJlcXVpcmVzIHRoZSBkZXZlbCBicmFuY2ggb2YKCSAgZ3RrLi4gSSB0aGluayBJIGdvdCBpdCBhbGwuCgkqIGFjY29uZmlnLmggOiBuZXcgdGFnIEhBVkVfREVWR1RLLCB1c2UgdGhpcyB0byBtYXJrIHlvdXIgY2hhbmdlcyB0aGF0CgkgIHJlcXVpcmUgdGhlIGRldiBicmFuY2ggb2YgZ3RrLgoKMTk5OC0wNi0wOSAgRmVkZXJpY28gTWVuYSBRdWludGVybyAgPGZlZGVyaWNvQG51Y2xlY3UudW5hbS5teD4KCgkqIE1ha2VmaWxlLmFtIChidWlsdF9TVUJESVJTKTogQWRkZWQgdGVzdC1nbm9tZSB0byB0aGUgbGlzdCBvZiBkaXJlY3Rvcmllcy4KClR1ZSBKdW4gIDkgMDI6MzA6MzYgUERUIDE5OTggTWFuaXNoIFNpbmdoIDx5b3NoQGdpbXAub3JnPgoKCSogY29uZmlndXJlLmluOiByZWRpZCBncmFwaGljcyBsaWIgY2hlY2tzCgoxOTk4LTA2LTA4ICBKaW0gUGljayAgPGppbUBqaW1waWNrLmNvbT4KCgkqIEFkZGVkIGRlYmlhbiBwYWNrYWdpbmcgZGlyLgoKTW9uIEp1biAgOCAyMjo0OToyOCAxOTk4ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBsaWJnbm9tZS9nbm9tZS1leGVjLmMgKGdub21lX2V4ZWN1dGVfc2hlbGwpOiBGcmVlIGVsZW1lbnQgb2YKCWFyZ3YuCgpNb24gSnVuICA4IDIwOjQ2OjQwIEVEVCAxOTk4IEdyZWdvcnkgTWNMZWFuIDxncmVnbUBjb21zdGFyLm5ldD4KCgkqIGxpYmdub21ldWkvZ3RrZGlhbC5jOiByZW1vdmVkIHNvbWUgZGVhZCBjb2RlIGJsb2F0IDopCgpNb24gSnVuICA4IDE5OjEzOjUwIDE5OTggIEhhdm9jIFBlbm5pbmd0b24gIDxocEBwb2JveC5jb20+CgoJKiBsaWJnbm9tZS9nbm9tZS11dGlsLmgsIGdub21lLXV0aWwuYyAoZ19maWxlbmFtZV9pbmRleCk6IAoJR2V0IHRoZSBzdGFydGluZyBpbmRleCBvZiB0aGUgbGFzdCBjb21wb25lbnQgb2YgYSBwYXRoLiAKCVNvcnQgb2YgdGhlIHJldmVyc2Ugb2YgZ19jb25jYXRfZGlyX2FuZF9maWxlLgoJCjE5OTgtMDYtMDggIE1hcnRpbiBCYXVsaWcgIDxtYXJ0aW5AaG9tZS1vZi1saW51eC5vcmc+CgoJKiBjb25maWd1cmUuaW46IEFkZGVkIHNvbWUgc3R1ZmYgZm9yIGNyb3NzLWNvbXBpbGluZy4KCgkqIGdub21lQ29uZi5zaC5pbiAobmVlZF9nbm9tZV9zdXBwb3J0KTogTmV3IHRhZy4KCjE5OTgtMDYtMDcgIFN0dWFydCBQYXJtZW50ZXIgPHBhdmxvdkBpbm5lcngubmV0PgoKCSogbGliZ25vbWV1aS9nbm9tZS1kaWFsb2cuW2NoXTogY2hhbmdlcyB0byBtYWtlIGl0IHVzZSBHdGtBY2NlbEdyb3VwCgkgIGZ1bmN0aW9ucywgaS5lLiBtYWtpbmcgaXQgY29tcGlsZSA6KQoJKiBsaWJnbm9tZXVpL2dub21lLXN0b2NrLmM6IHNhbWUgdGhpbmcKCSogbGliZ25vbWV1aS9zdG9jay1kZW1vLmM6IHNhbWUgdGhpbmcKCSogbGliZ25vbWV1aS8qOiBzYW1lIHRoaW5nIDopCgoxOTk4LTA2LTAxICBNaWd1ZWwgZGUgSWNhemEgIDxtaWd1ZWxAbnVjbGVjdS51bmFtLm14PgoKCSogbGliZ25vbWUvZ25vbWUtZGVudHJ5LmMgKGdub21lX2Rlc2t0b3BfZW50cnlfZGVzdHJveSk6IFJlbW92ZQoJcmVmZXJlbmNlcyB0byB0aGUgZ25vbWUtY29uZmlnIGVudHJ5IHdoZW4gZGlzY2FyZGluZyBhCglnbm9tZS1kZW50cnkgYW5kIHJlbGVhc2UgdGhlIG1lbW9yeSBhc3NvY2lhdGVkIHdpdGggdGhlCglHbm9tZURlc2t0b3BFbnRyeS4gCgpNb24gSnVuICAxIDEzOjIzOjI2IDE5OTggIEhhdm9jIFBlbm5pbmd0b24gIDxocEBwb2JveC5jb20+CgoJKiBsaWJnbm9tZS9nbm9tZS1leGVjLmgsIGdub21lLWV4ZWMuYyAoZ25vbWVfZXhlY3V0ZV9hc3luYyk6CiAJIENoYW5nZSBhcmcgMyB0byBjaGFyICogY29uc3QgYXJndltdIHRvIG1hdGNoIGV4ZWN2cAkKCShnbm9tZV9leGVjdXRlX3NoZWxsKTogTmV3IGZ1bmN0aW9uLiBMaWtlIHN5c3RlbSgpLCBidXQKIAliYWNrZ3JvdW5kcyB0aGUgcHJvY2VzcyBhbmQgdXNlcyB0aGUgdXNlcidzIHNoZWxsLgoKMTk5OC0wNS0yNSAgTWFyYyBFd2luZyAgPG1hcmNAZ2VybS5sYWJzLnJlZGhhdC5jb20+CgoJKiBsaWJnbm9tZS9nbm9tZS1oZWxwLmMgKGdub21lX2hlbHBfZ290byk6IG1ha2Ugc3VyZQoJdGhlIGhlbHAgYnJvd3NlciBwcm9jZXNzIGxpdmVzIG9uLgoKU2F0IE1heSAyMyAxMjoyNDozOSAxOTk4ICBHZW9yZ2UgTGVibCAgPGppcmthQDV6LmNvbT4KCgkqIGxpYmdub21lL2dub21lLWRlbnRyeS5jOiBmaXhlZCB0d28gc21hbGwgYnVncyBpbiB0aGUgbGF1bmNoCgkgIHN0dWZmLgoKRnJpIE1heSAyMiAxODoyNDowOSAxOTk4ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBsaWJnbm9tZS9nbm9tZS11dGlsLmMgKGdfZmlsZV9leGlzdHMpOiBgZmlsZW5hbWUnIGFyZ3VtZW50IG5vdwoJY29uc3QuCgoJU29tZSAtV2FsbCBmaXhlczoKCSogbGliZ25vbWUvbGliX2RhdGUuYzogSW5jbHVkZSA8c3RkaW8uaD4gZm9yIHNwcmludGYuCgkqIGxpYmdub21lL2dub21lLXRyaWdnZXJzLmMgKGdub21lX3RyaWdnZXJzX2FkZF90cmlnZ2VyKTogUmVtb3ZlZAoJdW51c2VkIHZhcmlhYmxlLgoJKGdub21lX3RyaWdnZXJzX2RvKTogTGlrZXdpc2UuCgkqIGxpYmdub21lL2dub21lLWRlbnRyeS5jIChnbm9tZV9kZXNrdG9wX2VudHJ5X2xhdW5jaF93aXRoX2FyZ3MpOgoJUmVtb3ZlZCB1bnVzZWQgdmFyaWFibGUuCgkqIGxpYmdub21lL2dub21lLWNvbmZpZy5jOiBEZWNsYXJlIHN0cm5kdXAgaWYgcmVxdWlyZWQuCgoJKiBsaWJnbm9tZS9nbm9tZS1kZW50cnkuYyAoZ25vbWVfZGVza3RvcF9lbnRyeV9sYXVuY2hfd2l0aF9hcmdzKToKCVVzZSBgU0hFTEwgLWMnIHRvIGV4ZWN1dGUgY29tbWFuZC4KCgkqIGxpYmdub21lL2dub21lLXV0aWwuYyAoZ25vbWVfdXRpbF91c2VyX3NoZWxsKTogTmV3IGZ1bmN0aW9uOwoJbW9kaWZpZWQgZnJvbSBnbm9tZS10ZXJtaW5hbC4KCSogbGliZ25vbWUvZ25vbWUtdXRpbC5oOiBEZWNsYXJlIGdub21lX3V0aWxfdXNlcl9zaGVsbC4KCjE5OTgtMDUtMjAgIEZlZGVyaWNvIE1lbmEgUXVpbnRlcm8gIDxmZWRlcmljb0BudWNsZWN1LnVuYW0ubXg+CgoJKiBsaWJnbm9tZS9nbm9tZS1kZW50cnkuaDogQWRkZWQgcHJvdG90eXBlIGZvciBnbm9tZV9kZXNrdG9wX2VudHJ5X2xhdW5jaF93aXRoX2FyZ3MoKS4KCjE5OTgtMDUtMjAgIE1pZ3VlbCBkZSBJY2F6YSAgPG1pZ3VlbEBudWNsZWN1LnVuYW0ubXg+CgoJKiBsaWJnbm9tZS9nbm9tZS1jb25maWcuYyAoZ25vbWVfY29uZmlnX21ha2VfdmVjdG9yLAoJZ25vbWVfY29uZmlnX2Fzc2VtYmxlX3ZlY3Rvcik6IGV4cG9ydCB0aGUgcm91dGluZXMgdGhhdCBtYWtlIGEKCXZlY3RvciBvdXQgZnJvbSBhIHN0cmluZyBhbmQgdGhlIHJvdXRpbmUgdGhhdCBhc3NlbWJsZXMgYSB2ZWN0b3IKCWludG8gYSBzdHJpbmcuICBXZSBuZWVkIHRoZW0gb3V0c2lkZSBhcyB3ZWxsLgoKMTk5OC0wNS0xOSAgTWlndWVsIGRlIEljYXphICA8bWlndWVsQG51Y2xlY3UudW5hbS5teD4KCgkqIGxpYmdub21lL2dub21lLWRlbnRyeS5jIChnbm9tZV9kZXNrdG9wX2VudHJ5X2xhdW5jaF93aXRoX2FyZ3MpOgoJTmV3IGZ1bmN0aW9uLiAgQWxsb3dzIHRvIGxhdW5jaCBhIGRlbnRyeSB3aXRoIG9wdGlvbmFsIGV4dHJhCglhcmd1bWVudHMuICBJbiB0aGUgZnV0dXJlIHdlIHNob3VsZCBwcm9iYWJseSBzY2FuIC0+ZXhlYyB2ZWN0b3IKCWZvciBvY3VycmVuY2VzIG9mICclZicgYW5kIHJlbHBhY2UgdGhhdCB3aXRoIHRoZSBhcmd1bW5ldHMuICBGb3IKCW5vdywgd2UganVzdCBhcHBlbmRtIHRoZW0uCgoJKiBsaWJnbm9tZS9nbm9tZS1jb25maWcuYyAoX2dub21lX2NvbmZpZ19nZXRfdmVjdG9yX3dpdGhfZGVmYXVsdCk6CglTZXQgdGhlIGVudGlyZSBhcmd2cCBhcnJheSB0byBOVUxMLiAgCglDb3VudCBjb3JyZWN0bHkgdGhlIG51bWJlciBvZiBhcmd1bWVudHMuCgoxOTk4LTA1LTE5ICBSYWphIFIgSGFyaW5hdGggIDxoYXJpbmF0aEBjcy51bW4uZWR1PgoKCSogYWNjb25maWcuaCAoSEFWRV9TWVNfRVJSTElTVCk6IE5ldyB0YWcuCgpUdWUgTWF5IDE5IDE0OjQyOjMyIDE5OTggIEdlb3JnZSBMZWJsICA8amlya2FANXouY29tPgoKCSogbGliZ25vbWUvZ25vbWUtY29uZmlnLmM6IChlc2NhcGVfc3RyaW5nX2FuZF9kdXApIGZpeGVkIGEgc2VnZmF1bHQKCjE5OTgtMDUtMTkgIE1pZ3VlbCBkZSBJY2F6YSAgPG1pZ3VlbEBudWNsZWN1LnVuYW0ubXg+CgoJKiBsaWJnbm9tZS9nbm9tZS1kZW50cnkuYyAoZ25vbWVfZGVza3RvcF9lbnRyeV9mcmVlKTogV2Ugd2VyZQoJbGVha2luZyBpdGVtLT5nZW9tZXRyeS4KCgkqIGNvbmZpZ3VyZS5pbiAoR0xJQl9MSUJTKTogdXNlIHRoZSBjb3JyZWN0IGdsaWIgZGVwZW5kaW5nIG9uIHdoYXQKCWlzIGluc3RhbGxlZC4gIEJ1ZyByZXBvcnRlZCBieSBNYXJrIEdhbGFzc2kuICBUaGFua3MgdG8gT3dlbiBmb3IKCXN1Z2dlc3RpbmcgdGhlIHByb3BlciBhcHByb2FjaCB0byB0aGlzLiAKCjE5OTgtMDUtMTggIE1pZ3VlbCBkZSBJY2F6YSAgPG1pZ3VlbEBudWNsZWN1LnVuYW0ubXg+CgoJKiBsaWJnbm9tZS9nbm9tZS1kZW50cnkuYyAoZ25vbWVfZGVza3RvcF9lbnRyeV9mcmVlKTogRG8gbm90IGZyZWUKCWl0ZW0tPmV4ZWMgYXMgdGhlIGdub21lX3N0cmluZ19hcnJ5X2ZyZWUgYWxyZWFkeSBmcmVlZCB0aGF0LgoJCk1vbiBNYXkgMTggMTQ6MTA6NDIgMTk5OCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogbGliZ25vbWUvZ25vbWUtY29uZmlnLmMgKF9nbm9tZV9jb25maWdfc2V0X3ZlY3Rvcik6IEFsc28gcXVvdGUKCWBcJyBjaGFyYWN0ZXJzLgoJKF9nbm9tZV9jb25maWdfZ2V0X3ZlY3Rvcl93aXRoX2RlZmF1bHQpOiBEb24ndCBkdXBsaWNhdGUgcmVzdWx0IG9mCglhY2Nlc3NfY29uZmlnLiAgQWxsb2NhdGUgZWFjaCBlbGVtZW50IG9mIGFycmF5IHNlcGFyYXRlbHkuCgoxOTk4LTA1LTE4ICBNaWd1ZWwgZGUgSWNhemEgIDxtaWd1ZWxAbnVjbGVjdS51bmFtLm14PgoKCSogbGliZ25vbWUvZ25vbWUtY29uZmlnLmMgKF9nbm9tZV9jb25maWdfZ2V0X3ZlY3Rvcl93aXRoX2RlZmF1bHQpOgoJRml4IHRoZSByb3V0aW5lLiAgU2ltcGxpZnkgdGhlIHBhcnNpbmcgY29kZSB3aXRoIGEgc2xpY2tlcgoJcm91dGluZS4gIFRoaXMgc2hvdWxkIGZpeCB0aGUgcGFuZWwgcHJvYmxlbXMsIGF0IGxlYXN0IGl0IHdvcmtzCglmb3IgbWUuCgkKMTk5OC0wNC0zMCAgTWlndWVsIGRlIEljYXphICA8bWlndWVsQG51Y2xlY3UudW5hbS5teD4KCgkqIGxpYmdub21lL2dub21lLXV0aWwuYyAoZ19jb3B5X3N0cmluZ3MpOiBQdXQgYmFjayBvcHRpbWl6ZWQgYW5kCglub24tbGVha2luZyBjb3B5X3N0cmluZ3MuIApTYXQgTWF5IDE2IDAwOjQ0OjIxIDE5OTggIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGxpYmdub21lL2dub21lLXN0cmluZy5jOiBSZW1vdmVkIGRlYWQgY2hlY2sgZm9yIGRlbGltPT1OVUxMLgoKCSogbGliZ25vbWUvZ25vbWUtZGVudHJ5LmMgKGdub21lX2Rlc2t0b3BfZW50cnlfbGF1bmNoKTogTG9vayB1cAoJZGVzaXJlZCB0ZXJtaW5hbCBwcm9ncmFtIGluIGNvbmZpZyBkYXRhYmFzZS4KCgkqIGxpYmdub21lL2dub21lLWkxOG4uYyAoTEFOR0tFWSk6IENoYW5nZWQgdmFsdWUuCgoJKiBsaWJnbm9tZS9nbm9tZS1kZW50cnkuYyAoZ25vbWVfZGVza3RvcF9lbnRyeV9sb2FkX2ZsYWdzKTogVHJlYXQKCSJFeGVjIiBlbnRyeSBhcyBhIHZlY3Rvci4KCShnbm9tZV9kZXNrdG9wX2VudHJ5X3NhdmUpOiBMaWtld2lzZS4KCShnbm9tZV9kZXNrdG9wX2VudHJ5X2ZyZWUpOiBMaWtld2lzZS4KCShnbm9tZV9kZXNrdG9wX2VudHJ5X2xhdW5jaCk6IExpa2V3c2UuICBBbHNvIHVzZQoJZ25vbWVfZXhlY3V0ZV9hc3luYy4KCSogbGliZ25vbWUvZ25vbWUtZGVudHJ5LmggKEdub21lRGVza3RvcEVudHJ5KTogQWRkZWQgYGV4ZWNfbGVuZ3RoJwoJbWVtYmVyLiAgYGV4ZWMnIG1lbWJlciBub3cgYSBgY2hhcioqJy4KCSogbGliZ25vbWUvbGliZ25vbWUuaDogSW5jbHVkZSBnbm9tZS1leGVjLmguCgkqIGxpYmdub21lL01ha2VmaWxlLmFtIChsaWJnbm9tZV9sYV9TT1VSQ0VTKTogQWRkZWQgZ25vbWUtZXhlYy5jLgoJKGxpYmdub21laW5jbHVkZV9IRUFERVJTKTogQWRkZWQgZ25vbWUtZXhlYy5oLgoJKiBsaWJnbm9tZS9nbm9tZS1leGVjLmg6IE5ldyBmaWxlLgoJKiBsaWJnbm9tZS9nbm9tZS1leGVjLmM6IE5ldyBmaWxlLgoKCSogbGliZ25vbWUvZ25vbWUtY29uZmlnLmMgKF9nbm9tZV9jb25maWdfZ2V0X3ZlY3Rvcl93aXRoX2RlZmF1bHQpOgoJSWYgbm8gdmFsdWUgYXZhaWxhYmxlLCBzZXQgKmFyZ3ZwIHRvIE5VTEwuCgoxOTk4LTA1LTE0ICBSYWphIFIgSGFyaW5hdGggIDxoYXJpbmF0aEBjcy51bW4uZWR1PgoKCSogbGliZ25vbWUvZ25vbWUtaTE4bi5jIChnbm9tZV9pMThuX2luaXQpOiBJdCBpcyBub3Qgc2FmZSB0byBwYXNzCglhbiBgYXV0bycgdmFyaWFibGUgdG8gYHB1dGVudicuCgoxOTk4LTA1LTEzICBKYWthIE1vY25payAgPGpha2EubW9jbmlrQGtpc3MudW5pLWxqLnNpPgoKCSogY29uZmlndXJlLmluOiBXaGVuIGNoZWNraW5nIGZvciBsaWJ0aWZmIGxpbmsgY29uZnRlc3QgYWdhaW5zdAoJWl9MSUJTIGFuZCBKUEVHX0xJQlMuIENoZWNrIGZhaWxlZCBmb3IgbWUgb3RoZXJ3aXNlLgoJCldlZCBNYXkgMTMgMTM6MzQ6MTAgMTk5OCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogbGliZ25vbWUvZ25vbWUtaTE4bi5oOiBEZWNsYXJlIG5ldyBmdW5jdGlvbnMuCgkqIGxpYmdub21lL2dub21lLWkxOG4uYyAoTEFOR0tFWSk6IE5ldyBtYWNyby4KCShnbm9tZV9pMThuX3NldF9wcmVmZXJyZWRfbGFuZ3VhZ2UpOiBOZXcgZnVuY3Rpb24uCgkoZ25vbWVfaTE4bl9pbml0KTogTGlrZXdpc2UuCgkoZ25vbWVfaTE4bl9nZXRfcHJlZmVycmVkX2xhbmd1YWdlKTogTGlrZXdpc2UuCgkoZ3Vlc3NfY2F0ZWdvcnlfdmFsdWUpOiBSZXR1cm4gTlVMTCBhcyBkZWZhdWx0IGRvbWFpbi4KCShnbm9tZV9pMThuX2dldF9sYW5ndWFnZV9saXN0KTogSGFuZGxlIE5VTEwgcmV0dXJuIGZyb20KCWd1ZXNzX2NhdGVnb3J5X3ZhbHVlLgoJKiBsaWJnbm9tZS9nbm9tZWxpYi1pbml0LmMgKGdub21lbGliX2luaXQpOiBDYWxsIGdub21lX2kxOG5faW5pdCgpLgoKU2F0IE1heSAgOSAyMDoyNTo0OSAxOTk4ICBTemVrZXJlcyBJc3R24W4gIDxzemVrZXJlc0BjeWJlcnNwYWNlLm1odC5ibWUuaHU+CgoJKiBsaWJnbm9tZS9nbm9tZS1zdHJpbmcuYyAoZ25vbWVfc3RyaW5nX2pvaW4pOgoJUGFzcyB0ZXJtaW5hdG9yIE5VTEwgdG8gZ25vbWVfc3RyaW5nX2pvaW52IHNvIGl0IHdpbGwgbm90IHNpZ3NlZ3YKCgpXZWQgTWF5ICA2IDEzOjE2OjE0IDE5OTggIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogQ2hlY2sgZm9yIHN5cy9zZWxlY3QuaC4KCjE5OTgtMDQtMjkgIEZlZGVyaWNvIE1lbmEgUXVpbnRlcm8gIDxmZWRlcmljb0BudWNsZWN1LnVuYW0ubXg+CgoJKiBsaWJnbm9tZS9nbm9tZS1jb25maWcuYwoJKF9nbm9tZV9jb25maWdfZ2V0X3RyYW5zbGF0ZWRfc3RyaW5nX3dpdGhfZGVmYXVsdCk6IEFkZGVkIGZhbGxiYWNrCgltZWNoYW5pc20gdG8gcmVhZCBvbGQgZmlsZXMgdGhhdCBkaWQgaGF2ZSB0aGUgW0NdIHN1ZmZpeCBvbgoJdHJhbnNsYXRlZCBzdHJpbmdzLgoKCSogbGliZ25vbWUvZ25vbWUtY29uZmlnLmMgKF9nbm9tZV9jb25maWdfc2V0X3RyYW5zbGF0ZWRfc3RyaW5nKToKCUlmIHRoZSBsYW5ndWFnZSBpcyB0aGUgZGVmYXVsdCAiQyIsIHdlIGRvbid0IHdhbnQgdG8gd3JpdGUgdGhlIFtDXQoJc3VmZml4IHRvIHRoZSBmaWxlLiAgVGhpcyBpcyBzbyB0aGF0IHRoaXMgZnVuY3Rpb24gd2lsbCB3b3JrIGluCglwYWlycyB3aXRoIGdub21lX2NvbmZpZ19nZXRfdHJhbnNsYXRlZF9zdHJpbmcoKS4KCjE5OTgtMDQtMjkgIFRyaXN0YW4gVGFycmFudCAgPHR0YXJyYW50QGV0bm90ZWFtLml0PgoKCSogY29uZmlndXJlLmluOiBhZGQgY2hlY2tzIGZvciBmb3JrcHR5CgoxOTk4LTA0LTI3ICBNaWNoYWVsIEZ1bGJyaWdodCAgPG1zZkByZWRoYXQuY29tPgoKICAgICAgICAqIGxpYmdub21lL2dub21lLWhlbHAuYyAoZ25vbWVfaGVscF9maWxlX2ZpbmRfZmlsZSk6CgkgIHN0cmlwIG9mZiBsYXN0ICcjJyBpbiB0aGUgcmVxdWVzdGVkIHBhdGgsIHNpbmNlIG1vc3QgaGVscAoJICByZXF1ZXN0cyBhcmUgZ29pbmcgdG8gYmUgVVJMcy4KCQoJKiBsaWJnbm9tZS9nbm9tZS1oZWxwLmMgKGdub21lX2hlbHBfZGlzcGxheSk6CgkgIHVzZSBnbm9tZV9oZWxwX2ZpbGVfZmluZF9maWxlKCkgZnVuY3Rpb24KCgkqIGxpYmdub21ldWkvZ25vbWUtYXBwLWhlbHBlci5jIChnbm9tZV9hcHBfYWRkX2hlbHBfbWVudV9lbnRyaWVzKToKCSAgdXNlIGdub21lX2hlbHBfZmlsZV9maW5kX2ZpbGUoKSBmdW5jdGlvbiB0byBmaW5kIHRvcGljLmRhdAoKCjE5OTgtMDQtMjcgIENhcnN0ZW4gU2NoYWFyICA8bmhhZGNhc2NAZnMtbWFwaHkudW5pLWhhbm5vdmVyLmRlPgoKCSogbGliZ25vbWUvZ25vbWUtaGVscC5jIChnbm9tZV9oZWxwX2ZpbGVfZmluZF9maWxlKTogQ2hhbmdlZCB0bwoJbG9vayBmb3IgbW9yZSB0aGFuIG9uZSBsYW5ndWFnZS4KCShnbm9tZV9oZWxwX2ZpbGVfcGF0aCk6IENoYW5nZWQgdG8gdXNlCglnbm9tZV9oZWxwX2ZpbGVfZmluZF9maWxlLiBJZiBubyBmaWxlIGlzIGZvdW5kLCB0aGFuIHJldHVybiBhCgl2YWx1ZSBsaWtlIGluIGZvcm1lciB0aW1lcy4KCgkqIGxpYmdub21lL2dub21lLWNvbmZpZy5jCgkoX2dub21lX2NvbmZpZ19nZXRfdHJhbnNsYXRlZF9zdHJpbmdfd2l0aF9kZWZhdWx0KTogQ2hhbmdlZCB0bwoJbG9vayBmb3IgbW9yZSB0aGFuIG9uZSBsYW5ndWFnZS4KCShfZ25vbWVfY29uZmlnX3NldF90cmFuc2xhdGVkX3N0cmluZyk6IENoYW5nZWQgdG8gc3VwcG9ydCBsYW5ndWFnZSAKCWxpc3RzLgoKCSogbGliZ25vbWUvZ25vbWUtaTE4bi5jIChndWVzc19jYXRlZ29yeV92YWx1ZSk6IE5ldyBmdW5jdGlvbi4KCShnbm9tZV9pMThuX2dldF9sYW5ndWFnZV9saXN0KTogTmV3IGZ1bmN0aW9uLgoKCSogbGliZ25vbWUvZ25vbWUtaTE4bi5oOiBBZGRlZCBnbm9tZV9pMThuX2dldF9sYW5ndWFnZV9saXN0LCB0aGF0CglyZXR1cm5zIGEgbGlzdCBvZiBsYW5ndWFnZXMsIGRlcGVuZGluZyBvbiB0aGUgdXNlcnMgZW52aXJvbm1lbnQuCgoJKiBsaWJnbm9tZS9nbm9tZS1pMThuUC5oOiBMaWtld2lzZS4KCjE5OTgtMDQtMjcgIE1pY2hhZWwgRnVsYnJpZ2h0ICA8bXNmQHJlZGhhdC5jb20+CgoJKiBsaWJnbm9tZS9nbm9tZS1oZWxwLmMgKGdub21lX2hlbHBfZmlsZV9maW5kX2ZpbGUpOgoJICBBIG5ldyBmdW5jdGlvbiB3aGljaCBpcyBzaW1pbGFyIHRvIGdub21lX2hlbHBfZmlsZV9wYXRoKCksIGV4Y2VwdAoJICB0aGF0IGlmIHRoZSBkZXNpcmVkIGZpbGUgaXMgbm90IGZvdW5kIGluIHRoZSBkZWZhdWx0IGxvY2FsZSwKCSAgdGhlICdDJyBsb2NhbGUgaXMgYWxzbyBzZWFyY2hlZC4gVGhlIGdub21lX2hlbHBfKgoJICBjb2RlIG1heSBuZWVkIHRvIGJlIHJldGhvdWdodCB3aGVuIGhhbmRsaW5nIGkxOG4gaXNzdWVzLgoKU2F0IEFwciAyNSAyMzoyOTo1NCBDRVNUIDE5OTggIEVja2VoYXJkIEJlcm5zICA8ZWJAYmVybnMucHJpbWEuZGU+CgoJKiBsaWJnbm9tZS9nbm9tZS1jb25maWcuYyAoX2dub21lX2NvbmZpZ19nZXRfdmVjdG9yX3dpdGhfZGVmYXVsdCk6CgkgIGVzY2FwZWQgc3BhY2VzIGhhdmUgdG8gZ2V0IHVuZXNjYXBlZCBhZnRlciByZWFkaW5nLgoKMTk5OC0wNC0yMSAgTWlndWVsIGRlIEljYXphICA8bWlndWVsQG51Y2xlY3UudW5hbS5teD4KCgkqIGxpYmdub21lL2dub21lLWNvbmZpZy5jIChnbm9tZV9jb25maWdfZ2V0X3N0cmluZ193aXRoX2RlZmF1bHQpOgoJQWRkZWQgdWx0cmEtbmFzdHkgYmluYXJ5IGNvbXBhdGliaWxpdHkgaGFjayBmb3IgdGhvc2UgaGFja2VycwoJd2l0aG91dCBkdWFsLXAyIG1hY2hpbmVzIHNvIHRoYXQgdGhleSBkb250IGhhdmUgdG8gcmVjb21waWxlCglldmVyeXRoaW5nLiAgVGhpcyB3aWxsIGJlIGdvbmUgc29vbi4KClRodSBBcHIgMjMgMDE6NTM6NDQgMTk5OCAgR2VvcmdlIExlYmwgIDxqaXJrYUA1ei5jb20+CgoJKiBsaWJnbm9tZS9nbm9tZS1jb25maWcuYzogYWRkZWQgc29tZSBtaXNzaW5nIGNvbXBhdGliaWxpdHkKCSAgZnVuY3Rpb25zLgoKVHVlIEFwciAyMSAxNToyMzo1OCAxOTk4ICBHZW9yZ2UgTGVibCAgPGppcmthQDV6LmNvbT4KCgkqIGxpYmdub21lL2dub21lLWNvbmZpZy5oOiBhZGRlZCBnbm9tZV9jb25maWdfZ2V0X3JlYWxfcGF0aAoJICBhbmQgZ25vbWVfY29uZmlnX3ByaXZhdGVfZ2V0X3JlYWxfcGF0aCBtYWNyb3MsIHRoYXQKCSAgcmV0dXJuIHRoZSByZWFsIHBhdGggb2YgYSBmaWxlIGluIHRoZSBjb25maWcgZGlyCgpUdWUgQXByIDIxIDE0OjMwOjI1IDE5OTggIEdlb3JnZSBMZWJsICA8amlya2FANXouY29tPgoKCSogbGliZ25vbWUvZ25vbWVsaWItaW5pdC5jOiBjcmVhdGUgLmdub21lX3ByaXZhdGUgYW5kCgkgIHNldCBtb2RlIHRvIDA3MDAgb24gZXZlcnkgaW5pdGlhbGl6YXRpb24sIGFkZGVkCgkgIGdub21lX3VzZXJfcHJpdmF0ZV9kaXIgY29uc3RhbnQKCgkqIGxpYmdub21lL2xpYmdub21lLmM6IGFkZCBnbm9tZV91c2VyX3ByaXZhdGVfZGlyIGV4dGVybgoJICBkZWNsYXJhdGlvbgoKCSogbGliZ25vbWUvZ25vbWUtY29uZmlnLltjaF06IG1hZGUgcGFyc2VfcGF0aCB1c2UgZWl0aGVyCgkgIHByaXZhdGUgb3Igbm9ybWFsIHBhdGgsIGFuZCBtYWRlIGRlZmluZXMgZm9yIHNvdXJjZQoJICBjb21wYXRpYmlsaXR5IHRvIG5ldyBmdW5jdGlvbnMgd2hpY2ggaGF2ZSBvbmUgbW9yZQoJICBhcmd1bWVudCB3aGljaCBpcyBnaW50IHByaXYsIGFkZGVkIGdub21lX2NvbmZpZ19wcml2YXRlCgkgIGRlZmluZXMgdG8gdGhlc2UgZnVuY3Rpb25zIHRoYXQgdXNlIHRoZSBwcml2YXRlIGRpcmVjdG9yeQoKTW9uIEFwciAyMCAyMzozODo1NSAxOTk4ICBHZW9yZ2UgTGVibCAgPGppcmthQDV6LmNvbT4KCgkqIGxpYmdub21lL2dub21lLWNvbmZpZy5jOiBtYWRlIGl0IGNoZWNrIGZvciB0aGUgZW50aXJlCgkgIHBhdGggZmlyc3QgYXMgYSBzcGVjaWFsIGNhc2Ugc28gdGhhdCBpdCBkb2Vzbid0IGVuZAoJICB1cCB3YWxraW5nIHRob3VnaCB0aGUgZW50aXJlIHBhdGggaWYgaXQgZXhpc3RzCgpNb24gQXByIDIwIDIyOjQxOjQ0IDE5OTggIEdlb3JnZSBMZWJsICA8amlya2FANXouY29tPgoKCSogbGliZ25vbWUvZ25vbWUtY29uZmlnLmM6IG5ldyBmdW5jdGlvbiBjaGVja19wYXRoCgkgIGNhbGxlZCBiZWZvcmUgYSBmaWxlIGlzIG9wZW5lZCBmb3Igd3JpdGluZywKCSAgaXQgd2lsbCB0cnkgdG8gY2hlY2sgaWYgYSB0aGUgZGlyZWN0b3J5IGV4aXN0cwoJICBhbmQgY3JlYXRlIGl0IGlmIG5lY2Nlc3NhcnkuIG5lZWRzIGEgYml0IG9mCgkgIGEgYml0IG9mIG9wdGltaXphdGlvbiBtYXliZSBhbmQgdXNlcyA3NTUgYnkgZGVmYXVsdAoJICBub3cgd2hpY2ggcHJvYmFibHkgc2hvdWxkIGJlIGVpdGhlciA3MDAgb3Igc3BlY2lmaWVkCgkgIGJ5IHVzZXIuCgoxOTk4LTA0LTE2ICBNaWd1ZWwgZGUgSWNhemEgIDxtaWd1ZWxAbnVjbGVjdS51bmFtLm14PgoKCSogbGliZ25vbWUvZ25vbWUtZGVudHJ5LmMgKGdub21lX2lzX3Byb2dyYW1faW5fcGF0aCk6IFJldHVybiB0aGUKCWZ1bGwgcGF0aG5hbWUgZm9yIHRoZSBwcm9ncmFtIGlmIGl0IGlzIGZvdW5kIG9uIHRoZSBwYXRoLiAKCShnbm9tZV9kZXNrdG9wX2VudHJ5X2xvYWRfZmxhZ3MpOiBGcmVlIHRoZSBwYXRobmFtZSBhY2NvcmRpbmcgdG8KCXRoZSBuZXcgY29udmVudGlvbi4KClN1biBBcHIgMTkgMDk6Mzg6MzYgRURUIDE5OTggR3JlZ29yeSBNY0xlYW4gPGdyZWdtQGNvbXN0YXIubmV0PgoKICAgICAgICAqIHJhc3RlcmFwaS8uY3ZzaWdub3JlOiBhZGRlZCB0byBpZ25vcmUgZ2VuZXJhdGVkIGZpbGVzLgoKTW9uIEFwciAxMyAyMjoxNDoxMSAxOTk4ICBHZW9yZ2UgTGVibCAgPGppcmthQDV6LmNvbT4KCgkqIGNvbmZpZ3VyZS5pbjogbWFrZSBNYWtlZmlsZSBpbiBsaWJnbm9tZXVpL3BpeG1hcHMKCjE5OTgtMDQtMTMgIFJhamEgUiBIYXJpbmF0aCAgPGhhcmluYXRoQGNzLnVtbi5lZHU+CgoJKiBsaWJnbm9tZS9nbm9tZS1oZWxwLmMgKGdub21lX2hlbHBfZmlsZV9wYXRoKTogQmUgbW9yZQoJYGNvbnN0Jy1jb3JyZWN0LiAKCjE5OTgtMDQtMTIgIFJhamEgUiBIYXJpbmF0aCAgPGhhcmluYXRoQGNzLnVtbi5lZHU+CgoJSW50cm9kdWNlIGBnbm9tZXN1cHBvcnQuaCcuCgkqIGNvbmZpZ3VyZS5pbiAoU1VQUE9SVElOQ1MpOiBEZWZpbmUgTkVFRF9HTk9NRVNVUFBPUlRfSCBpZgoJYGxpYmdub21lc3VwcG9ydCcgaXMgYnVpbHQuCgkoR05PTUVfSU5DTFVERURJUik6IExpa2V3aXNlLiAgQWxzbywgdXNlICQocGtnbGliZGlyKS9pbmNsdWRlCglpbnN0ZWFkIG9mICQoaW5jbHVkZWRpcikvbGliZ25vbWVzdXBwb3J0LiAgKFNlZSBzdXBwb3J0L0NoYW5nZUxvZy4pCgoJKiBnbm9tZS5oOiBJbmNsdWRlIGBnbm9tZXN1cHBvcnQuaCcgaWYgTkVFRF9HTk9NRVNVUFBPUlRfSCBpcwoJZGVmaW5lZC4gIFRoaXMgc2hvdWxkIG1ha2UgYGdub21lc3VwcG9ydC5oJyBwcmV0dHkgdHJhbnNwYXJlbnQuCgpNb24gQXByICA2IDAwOjA1OjM0IDE5OTggIEhhdm9jIFBlbm5pbmd0b24gIDxocEBwb2JveC5jb20+CgoJKiBsaWJnbm9tZS9nbm9tZS1pMThuUC5oOiBuZXcgZmlsZQoJKiBsaWJnbm9tZS9nbm9tZS1pMThuLmg6ICN3YXJuaW5nIGlmIHVzZWQgdG9nZXRoZXIgd2l0aAoJZ25vbWUtaTE4blAuaAoJKiBsaWJnbm9tZS9NYWtlZmlsZS5hbTogbm9pbnN0X0hFQURFUlMgPSBnbm9tZS1pMThuUC5oCgpTYXQgQXByIDA0IDEyOjEyOjQ3IDE5OTggIEdlb3JnZSBMZWJsICA8amlya2FANXouY29tPgoKCSogbGliZ25vbWUvZ25vbWUtY29uZmlnLmM6IGRvIGluaXQgb24gZnVuY3Rpb25zIHRoYXQKCSAgcHJldmlvdXNseSBlcnJvcmVkIG91dCB3aXRoICJjYWxsZWQgYmVmb3JlIGluaXQiCgoxOTk4LTAzLTMxICBNaWd1ZWwgZGUgSWNhemEgIDxtaWd1ZWxAbnVjbGVjdS51bmFtLm14PgoKCSogbGliZ25vbWUvbGliX2RhdGUuYywgbGliX2RhdGUuaCwgbGliX2RlZnMuaCwgbGliX2RhdGUuUkVBRE1FOgoJQWRkZWQgdGhlIGxpYl9kYXRlIHJvdXRpbmVzIGZyb20gU3RlZmZlbiBCZXllci4gCgpTYXQgTWFyIDI4IDE5OjI4OjQ4IE1TVCAxOTk4IE5hdGhhbiBTdW1tZXJzIDxyb2NrQGdpbXAub3JnPgoKCSogbGliZ25vbWUvZ25vbWVfZGwuYzogY2hhbmdlZCBsaWJfcGF0aCB0byBsaWJwYXRoIGluIHRoZSBocHV4IGNvZGUKClR1ZSBNYXIgMjQgMDA6Mzk6MzYgMTk5OCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuYW0gKERJU1RDTEVBTkZJTEVTKTogUmVtb3ZlZC4KClRodSBNYXIgMTkgMTg6NTc6MDUgMTk5OCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogbGliZ25vbWUvZ25vbWUtcGFyc2UuaDogQWRkZWQgY29weXJpZ2h0IGluZm8uCgkqIGxpYmdub21lL2dub21lLXBhcnNlLmM6IExpa2V3aXNlLgoKCSogbGliZ25vbWUvZ25vbWUtaGlzdG9yeS5jIChnbm9tZV9oaXN0b3J5X3JlY2VudGx5X3VzZWQpOiBDaGFuZ2VkCglpbnRlcmZhY2UuCglBZGRlZCBjb3B5cmlnaHQgaW5mby4KCSogbGliZ25vbWUvZ25vbWUtaGlzdG9yeS5oOiBBZGRlZCBjb21tZW50cywgdXBkYXRlZAoJZ25vbWVfaGlzdG9yeV9yZWNlbnRseV91c2VkIGRlY2wuCglBZGRlZCBjb3B5cmlnaHQgaW5mby4KCldlZCBNYXIgMTggMjA6MzM6MzAgMTk5OCAgTWlndWVsIGRlIEljYXphICA8bWlndWVsQG51Y2xlY3UudW5hbS5teD4KCgkqIGxpYmdub21lL2dub21lLWRlbnRyeS5jIChnbm9tZV9kZXNrdG9wX2VudHJ5X3NhdmUpOiBTYXZlIHRoZQoJZ2VvbWV0cnkgZmllbGQgb2YgdGhlIGdub21lLWRlbnRyeS4KClR1ZSBNYXIgMTcgMjE6MzQ6MzUgMTk5OCAgR2VvcmdlIExlYmwgIDxqaXJrYUA1ei5jb20+CgoJKiBsaWJnbm9tZXVpL2d0ay17cGx1Zyxzb2NrZXR9LltjaF06IGFkZGVkIE93ZW4ncyBwbHVnc29ja2V0CgkgIGNvZGUgdG8gbGliZ25vbWV1aQoKU3VuIE1hciAxNSAxNToyNDo0MSAxOTk4ICBPd2VuIFRheWxvciAgPG93dDFAY29ybmVsbC5lZHU+CgoJKiBNYWtlZmlsZS5hbSBjb25maWd1cmUuaW4gZ25vbWVDb25mLnNoLmluOiAKCUFkZCBHVEtfQ0ZMQUdTIHRvIEdOT01FX0lOQ0xVREVESVIsIGFuZCBHVEtfTElCUyB0byB0aGUKCWFwcHJvcmlhdGUgKkxJQlMgdmFyaWFibGVzLgoKCSogbGliZ25vbWUvTWFrZWZpbGUuYW0gbGliZ25vbWV1aS9NYWtlZmlsZS5hbTogCglBZGRlZCBHVEtfQ0ZMQUdTIHRvIElOQ0xVREVTCgpUdWUgTWFyIDEwIDExOjU4OjM4IDE5OTggIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGxpYmdub21lL2dub21lLXBhcnNlLmg6IEp1c3QgbG9vayBmb3IgPGFyZ3AuaD4uCgpNb24gTWFyICA5IDIwOjM3OjU2IDE5OTggIE1pZ3VlbCBkZSBJY2F6YSAgPG1pZ3VlbEBudWNsZWN1LnVuYW0ubXg+CgoJKiBsaWJnbm9tZS9nbm9tZS1wYXJzZS5oOiBBZGQgQkVHSU5fR05PTUVfREVDTFMgYW5kCglFTkRfR05PTUVfREVDTFM6IHRoZXkgYXJlICpyZXF1aXJlZCogZm9yIEMrKyBjb21waWxhdGlvbi4KClN1biBNYXIgIDggMTc6MTU6MTcgMTk5OCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogdmVyc2lvbi5oLmluOiBSZW1vdmVkLgoJKiBjb25maWd1cmUuaW46IERvbid0IGNyZWF0ZSB2ZXJzaW9uLmguCgoJKiBsaWJnbm9tZS9NYWtlZmlsZS5hbSAoSU5DTFVERVMpOiBBZGRlZCBAU1VQUE9SVElOQ1NALgoKCSogY29uZmlndXJlLmluIChTVVBQT1JUSU5DUywgTElCU1VQUE9SVCk6IE5ldyBkZWZpbmVzLgoJKEdOT01FX0xJQlMpOiBJbmNsdWRlIC1sZ25vbWVzdXBwb3J0IGlmIHJlcXVpcmVkLgoJKEdOT01FX0lOQ0xVREVESVIpOiBJbmNsdWRlIC1JIGZvciBsaWJnbm9tZXN1cHBvcnQgaWYgcmVxdWlyZWQuCgoJKiBnbm9tZUNvbmYuc2guaW4gKEdOT01FX0lOQ0xVREVESVIsIEdOT01FTElCRElSKTogUXVvdGUgdmFsdWVzLgoKRnJpIE1hciAgNiAyMTo0MjowOSAxOTk4ICBUb20gVHJvbWV5ICA8dHJvbWV5QGN5Z251cy5jb20+CgoJKiBsaWJnbm9tZS9saWJnbm9tZS5oOiBJbmNsdWRlIGdub21lLXBhcnNlLmguCgpGcmkgTWFyIDA2IDIwOjMxOjEzIDE5OTggIEdlb3JnZSBMZWJsICA8amlya2FANXouY29tPgoKCSogbGliZ25vbWUvZ25vbWUtZGVudHJ5LmM6IGZpeGVkIHRoZSBfbG9hZCBmdW5jdGlvbiB0byBhbHdheXMgc2V0CgkgIC0+aWNvbiwgYXQgbGVhc3QgdG8gTlVMTCwgdGhpcyB3YXMgY2F1c2luZyB0aGUgcGFuZWwgdG8gc2VnZmF1bHQKCldlZCBNYXIgIDQgMDE6MDY6NTggMTk5OCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogbGliZ25vbWUvbGliZ25vbWUuaCAoZ25vbWVsaWJfcmVnaXN0ZXJfYXJndW1lbnRzKTogRGVjbGFyZS4KCSogbGliZ25vbWUvZ25vbWVsaWItaW5pdC5jIChnbm9tZWxpYl9yZWdpc3Rlcl9hcmd1bWVudHMpOiBOZXcKCWZ1bmN0aW9uLgoKCSogbGliZ25vbWUvTWFrZWZpbGUuYW0gKGxpYmdub21lX2xhX1NPVVJDRVMpOiBBZGRlZAoJZ25vbWUtcGFyc2UuYy4KCShsaWJnbm9tZWluY2x1ZGVfSEVBREVSUyk6IEFkZGVkIGdub21lLXBhcnNlLmguCgkqIGxpYmdub21lL2dub21lLXBhcnNlLmg6IE5ldyBmaWxlLgoJKiBsaWJnbm9tZS9nbm9tZS1wYXJzZS5jOiBOZXcgZmlsZS4KCgkqIGxpYmdub21lL2dub21lbGliLWluaXQuYyAoZ25vbWVsaWJfaW5pdCk6IFJlbW92ZWQgYXJnYywgYXJndgoJYXJndW1lbnRzLgoJKiBsaWJnbm9tZS9saWJnbm9tZS5oIChnbm9tZWxpYl9pbml0KTogTGlrZXdpc2UuCgoJKiBhY2NvbmZpZy5oIChIQVZFX1BST0dSQU1fSU5WT0NBVElPTl9TSE9SVF9OQU1FLAoJSEFWRV9QUk9HUkFNX0lOVk9DQVRJT05fTkFNRSk6IEFkZGVkLgoKMTk5OC0wMi0yOCAgUmFqYSBSIEhhcmluYXRoICA8aGFyaW5hdGhAY3MudW1uLmVkdT4KCgkqIGxpYmdub21lL2dub21lLWNvbmZpZy5jIChkdW1wX3NlY3Rpb25zKTogRG9uJ3QgY3Jhc2ggaWYKCXAtPnNlY3Rpb25fbmFtZSA9PSBOVUxMLgoJKCopOiBVc2UgYGdfc3RyZHVwJyBhbmQgYGdfZnJlZScgdW5pZm9ybWx5LCB0aHJvdWdob3V0LgoKU2F0IEZlYiAyOCAxNTo0Njo1MSAxOTk4ICBNaWd1ZWwgZGUgSWNhemEgIDxtaWd1ZWxAbnVjbGVjdS51bmFtLm14PgoJCgkqIGxpYmdub21lL2dub21lLWNvbmZpZy5jIChwYXJzZV9wYXRoKTogUmV2ZXJzZSBSYWphIEhhcmluYXRoJ3MKCWNoYW5nZSB0aGF0IHVzZWQgIiIgaW5zdGVhZCBvZiBOVUxMLiAgCgoJSWYgd2UgdXNlIE5VTEwgaGVyZSwgdGhlIGdub21lLWNvbmZpZy1nZXQtc3RyaW5nIHJvdXRpbmVzIGNhbgoJZGlzdGluZ3Vpc2ggYmV0d2VlbjoKCgkJLSBOVUxMIGlmIHRoZXkga2V5IHdhcyBub24tZXhpc3RhbnQuCgkJLSAiIiBpZiB0aGUga2V5IGhhZCBhbiBlbXB0eSB2YWx1ZS4KCQpUaHUgRmViIDI2IDIxOjEyOjI2IDE5OTggIE1pZ3VlbCBkZSBJY2F6YSAgPG1pZ3VlbEBudWNsZWN1LnVuYW0ubXg+CgoJKiBsaWJnbm9tZS9nbm9tZS11dGlsLmMgKGdub21lX2RpcnJlbGF0aXZlX2ZpbGUpOiBDaGVjayBpbnNpZGUgdGhlCgl1c2VyIHJlbGF0aXZlIGhvbWUgZGlyZWN0b3J5IGZvciBtb3JlIGZpbGVzLiAKCjE5OTgtMDItMjYgIE1hcmsgR2FsYXNzaSAgPHJvc2FsaWFAY3lnbnVzLmNvbT4KCgkqIGRldmVsLWRvY3MvbGliZ25vbWV1aS5zZ21sLCBkZXZlbC1kb2NzL2xpYmdub21lLnNnbWw6CglhZGRlZCBQU0dNTCBmaWxlIG9wdGlvbiBjb21tZW50cyB3aXRoIGEgInBhcmVudCBkb2N1bWVudCIuICBUaGlzCgltYWtlcyBpdCBlYXNpZXIgZm9yIGVtYWNzIHRvIGxvYWQgdGhlIHN1YmRvY3VtZW50cy4KCjE5OTgtMDItMjggIENhcnN0ZW4gU2NoYWFyICA8bmhhZGNhc2NAZnMtbWFwaHkudW5pLWhhbm5vdmVyLmRlPgoKCSogbGliZ25vbWUvZ25vbWUtZGVudHJ5LmMgKGdldF90cmFuc2xhdGVkX3N0cmluZyk6IER1ZSB0byB0aGUKIAljaGFuZ2VzIGluIGxpYmdub21lL2dub21lLWNvbmZpZy5jIChwYXJzZV9wYXRoKSwgZW1wdHkgc3RyaW5ncwogCWluc3RlYWQgb2YgdGhlIHVudHJhbnNsYXRlZCBzdHJpbmdzIGhhdmUgYmVlZCByZXR1cm5lZCwgaWYgYQogCXRyYW5zbGF0ZWQgc3RyaW5nIHdhcyBub3QgYXZhaWxhYmxlLiBUaGlzIGlzIGZpeGVkIG5vdy4KClRodSBGZWIgMjYgMTg6MDg6MTUgMTk5OCAgTWlndWVsIGRlIEljYXphICA8bWlndWVsQG51Y2xlY3UudW5hbS5teD4KCgkqIGxpYmdub21lL2dub21lLWRlbnRyeS5jLCBsaWJnbm9tZS9nbm9tZS1kZW50cnkuaDogRHJvcHBlZCB0aGUKCWNvbXB1dGVkIGljb24gZmlsZW5hbWVzLCB0aGluZ3Mgd2lsbCBiZSBzY2FsZWQgbm93IGJ5IHRoZSBwYW5lbC4gCgoJKiBsaWJnbm9tZS9nbm9tZS1kZW50cnkuYyAoZ25vbWVfZGVza3RvcF9lbnRyeV9sb2FkX2ZsYWdzKTogTW9yZQoJZmllbGRzOyBhIG5ldyBwYXJhbWV0ZXIgdGhhdCBhdm9pZHMgZHVtcGluZyB0aGUgbG9hZGVkCglpbmZvcm1hdGlvbi4gCgoxOTk4LTAyLTI1ICBSYWphIFIgSGFyaW5hdGggIDxoYXJpbmF0aEBjcy51bW4uZWR1PgoKCSogbGliZ25vbWUvZ25vbWUtY29uZmlnLmMgKHBhcnNlX3BhdGgpOiBVc2UgIiIgaW5zdGVhZCBvZiBOVUxMLgoKV2VkIEZlYiAyNSAyMDoxNjoxMyAxOTk4ICBNaWd1ZWwgZGUgSWNhemEgIDxtaWd1ZWxAbnVjbGVjdS51bmFtLm14PgoKCSogbGliZ25vbWUvZ25vbWUtZGVudHJ5LmMgKGdub21lX2Rlc2t0b3BfZW50cnlfbG9hZCk6IERyb3Aga25vd24KCWluZm9ybWF0aW9uIG9uIGEgZGVudHJ5IGFmdGVyIGxvYWRpbmcuCgoJQWRkIG1vcmUgZmllbGRzLgoKMTk5OC0wMi0yNSAgUmFqYSBSIEhhcmluYXRoICA8aGFyaW5hdGhAY3MudW1uLmVkdT4KCgkqIGNvbmZpZ3VyZS5pbjogQ2xlYW4gdXAgdGhlIGhhbmRsaW5nIG9mIHtaLFBORyxKUEVHLFRJRkYsR0lGfV9MSUJTLAoJYW5kIHRoZWlyIGludGVyYWN0aW9uIHdpdGgge0dES19JTUxJQixHTk9NRVVJLEdUS1hNSFRNTH1fTElCUy4KCShBQ19TVUJTVCk6IFJlbW92ZSB7WixQTkcsSlBFR31fTElCUy4KClR1ZSBGZWIgMjQgMjA6MDE6NDIgMTk5OCAgTWFjaWVqIFN0YWNob3dpYWsgIDxtc3RhY2hvd0BtaXQuZWR1PgoKCSogY29uZmlndXJlLmluOiBBZGRlZCBjaGVja3MgZm9yIGxpYnJhcmllcyB0aGF0IGdka19pbWxpYiBkZXBlbmRzCiAJb24sIHNpbmNlIGxpYmdub21ldWkgbm93IGRlcGVuZHMgb24gbGliZ2RrX2ltbGliLiBUaGlzIGlzIG5lZWRlZAogCWZvciB0aGUgbGlicmFyaWVzIGFuZCBkZW1vcyAoYW5kIHByb2JhYmx5IG90aGVyIGFwcHMpIHRvIGJ1aWxkCiAJcHJvcGVybHkuCgoxOTk4LTAyLTIzICBGZWRlcmljbyBNZW5hIFF1aW50ZXJvICA8ZmVkZXJpY29AbnVjbGVjdS51bmFtLm14PgoKCSogZ25vbWUuaDogQWRkZWQgI2luY2x1ZGUgPGdka19pbWxpYi5oPiwgYXMgaXQgaXMgbm93IHJlcXVpcmVkIGZvcgoJYWxsIG9mIEdub21lLgoKMTk5OC0wMi0yMyAgTWFyayBHYWxhc3NpICA8cm9zYWxpYUBuaXMubGFubC5nb3Y+CgoJKiBjb25maWd1cmUuaW4gKExJQkdOT01FVUlfTElCUyk6CgkoR05PTUVVSV9MSUJTKTogYWRkZWQgJFpfTElCUyB0byBib3RoIG9mIHRoZXNlLCBzaW5lIGdka19pbWxpYgoJbWlnaHQgcmVxdWlyZSB0aGVtLCBhbmQgZ2RrX2ltbGliIGlzIG5vdyBhbHdheXMgbGlua2VkIGluCglsaWJnbm9tZXVpLgoKMTk5OC0wMi0yMyAgTWFyYyBFd2luZyAgPG1hcmNAcmVkaGF0LmNvbT4KCgkqIGxpYmdub21ldWkvZ25vbWUtYXBwLWhlbHBlci57YyxofTogYWRkZWQgcmFkaW8gYW5kIGNoZWNrL3RvZ2dsZQoJYnV0dG9uIHN1cHBvcnQsIGZvciBib3RoIG1lbnVzIGFuZCB0b29sYmFycy4gIEFsc28gYWRkZWQgdHdvCgluZXcgZmllbGRzIHRvIHRoZSBzdHJ1Y3QgX0dub21lVUlJbmZvOiB1c2VyX2RhdGEgLSBpcyB1c2VkIGFzIHRoZQoJZGF0YSBwYXJhbWV0ZXIgdG8gdGhlIGd0a19zaWduYWxfY29ubmVjdCgpIGNhbGwgZm9yIGVhY2ggaXRlbSwKCWFuZCB1bnNlZF9kYXRhIHdoaWNoIHNob3VsZCBhbHdheXMgYmUgTlVMTC4gIFByZXZpb3VzbHkgdGhlCglkYXRhIHBhcmFtZW50ZXIgdG8gZ3RrX3NpZ25hbF9jb25uZWN0KCkgY2FtZSBmcm9tIHRoZSBkYXRhCglwYXJhbWV0ZXJzIHRvIHRoZSAqX2ludGVycCgpIGFuZCAqX3dpdGhfZGF0YSgpLCB3aGljaCB3YXMgbGVzcwoJdGhhbiBvcHRpbWFsLgoKCSogbGliZ25vbWV1aS9nbm9tZS1mb250LXNlbGVjdG9yLmM6IENoYW5nZXMgdG8gc3VwcG9ydCBhYm92ZS4KCjE5OTgtMDItMjMgIEZlZGVyaWNvIE1lbmEgUXVpbnRlcm8gIDxmZWRlcmljb0BudWNsZWN1LnVuYW0ubXg+CgoJKiBsaWJnbm9tZS9nbm9tZS1kbC5jOiAKCSogbGliZ25vbWUvZ25vbWUtaGVscC5jOiAjaW5jbHVkZSA8c3RyaW5nLmg+CgoJKiBjb25maWd1cmUuaW4gKEFMTF9MSU5HVUFTKTogQWRkZWQgIml0IiB0byBBTExfTElOR1VBUwoKMTk5OC0wMi0xOSAgRmVkZXJpY28gTWVuYSBRdWludGVybyAgPGZlZGVyaWNvQG51Y2xlY3UudW5hbS5teD4KCgkqIGxpYmdub21lL2dub21lLXNjb3JlLmg6IEFkZGVkIG1pc3NpbmcgI2luY2x1ZGUgPGdsaWIuaD4KCjE5OTgtMDItMjAgIENhcnN0ZW4gU2NoYWFyICA8bmhhZGNhc2NAZnMtbWFwaHkudW5pLWhhbm5vdmVyLmRlPgoKCSogbGliZ25vbWUvZ25vbWUtbWltZS5jOiBOb3cgaW5jbHVkZXMgJ2xpYmdub21lLmgnIGFuZCAnZ3RrL2d0ay5oJwogCWluc3RlYWQgb2YgJ2dub21lLmgnLiBUaGlzIHJlbW92ZXMgdGhlIGRlcGVuZGVuY2UgZnJvbQogCSdsaWJnbm9tZXVpLmgnLgoKCSogZGV2ZWwtZG9jcy8uY3ZzaWdub3JlOiBBZGRlZCAnTWFrZWZpbGUnIGFuZCAnTWFrZWZpbGUuaW4nLgoKCSogY29uZmlndXJlLmluIChBTExfTElOR1VBUyk6IEFkZGVkIGdlcm1hbiB0cmFuc2xhdGlvbnMuCgoxOTk4LTAyLTE5ICBGZWRlcmljbyBNZW5hIFF1aW50ZXJvICA8ZmVkZXJpY29AbnVjbGVjdS51bmFtLm14PgoKCSogbGliZ25vbWUvZ25vbWVsaWItaW5pdC5jIChnbm9tZWxpYl9pbml0KTogQWRkZWQgYXBwX2lkIHBhcmFtZXRlcgoJdG8gdGhpcyBmdW5jdGlvbi4gIENoYW5nZXMgdG8gdGhlIHJlc3Qgb2YgR25vbWUgYXJlIGluIHByb2dyZXNzLgoKV2VkIEZlYiAxOCAwOToyNTozOCBBUlQgMTk5OCAgSG9yYWNpbyBKLiBQZfFhICA8aG9yYXBlQGNvbXBlbmRpdW0uY29tLmFyPgoKCSogZGV2ZWwtZG9jcy9NYWtlZmlsZS5hbTogbmV3LgoJKiBkZXZlbC1kb2NzL2xpYmdub21lKi5zZ21sOiBuZXcuCgkqIGRldmVsLWRvY3MvZ2RvYy86IG5ldyBkaXIuCgkqIFJFQURNRTogYWRkZWQgbGljZW5zaW5nIGluZm8gZm9yIGd0ay14bWh0bWwgYW5kIGxpYmd0a3R0eS4KCSogZGV2ZWwtZG9jcy9nbm9tZS1kZXYtaW5mby5zZ21sOiBzcGxpdGVkLiAobm93IHRoZSBsaWJnbm9tZSh1aSk/IAoJICBjaGFwdGVycyBhcmUgaW5kZXBlbmRhbnQgZmlsZXMuCgkqIGxpYmdub21ldWkvZ25vbWUtYWJvdXQuaDogRG9jdW1lbnRlZC4KCSogbGliZ25vbWV1aS97YWxtb3N0X2FsbH0uaDogQWRkZWQgI2luY2x1ZGUgPGxpYmdub21lL2dub21lLWRlZnMuaD4KClR1ZSBGZWIgMTcgMjM6Mzc6NTAgMTk5OCAgTWlndWVsIGRlIEljYXphICA8bWlndWVsQG51Y2xlY3UudW5hbS5teD4KCgkqIGxpYmdub21lL2dub21lLWRlbnRyeS5jIChnbm9tZV9kZXNrdG9wX2VudHJ5X2xvYWQpOiBQcm92aWRlIGEKCWRlZmF1bHQgZm9yIHRoZSBUZXJtaW5hbCBlbnRyeS4gCgpNb24gRmViIDE2IDEzOjEzOjE5IDE5OTggIFRvbSBUcm9tZXkgIDx0cm9tZXlAY3lnbnVzLmNvbT4KCgkqIGxpYmdub21lL2dub21lLWNvbmZpZy5jIChnbm9tZV9jb25maWdfZ2V0X3ZlY3Rvcl93aXRoX2RlZmF1bHQpOgoJRG9uJ3QgaW5jbHVkZSBzcGFjZSBzZXBhcmF0b3IgYXQgc3RhcnQgb2YgYSB2ZWN0b3IgZWxlbWVudC4KClNhdCBGZWIgMTQgMDA6MzU6NTQgMTk5OCAgVG9tIFRyb21leSAgPHRyb21leUBjeWdudXMuY29tPgoKCSogTWFrZWZpbGUuYW0gKGNvbmZleGVjZGlyKTogUmVuYW1lZC4KCShjb25mZXhlY19EQVRBKTogTGlrZXdpc2UuCgoJKiBjb25maWd1cmUuaW4gKEdOT01FX0xJQkRJUiwgR05PTUVfSU5DTFVERURJUik6IERlZmluZSB0byBiZQoJZXhwYW5kZWQgaW4gbWFrZS4KCShBQ19PVVRQVVQpOiBEb24ndCBjcmVhdGUgZ25vbWVDb25mLnNoLgoJKiBNYWtlZmlsZS5hbSAocmVsZWFzZSk6IEZpeGVkIHR5cG8uCgkoZ25vbWVDb25mLnNoKTogTmV3IHRhcmdldC4KCjE5OTgtMDItMTMgIFJhamEgUiBIYXJpbmF0aCAgPGhhcmluYXRoQGNzLnVtbi5lZHU+CgoJKiBjb25maWd1cmUuaW4gKEdOT01FX0lOQ0xVREVESVIpOiBJbmNsdWRlIGAtSScuCgkoR05PTUVfTElCRElSKTogSW5jbHVkZSBgLUwnLgoKCSogYXV0b2dlbi5zaDogTW92ZWQgbW9zdCBvZiB0aGUgc3R1ZmYgdG8gYG1hY3Jvcy9hdXRvZ2VuLnNoJy4KCgkqIE1ha2VmaWxlLmFtIChTVUJESVJTKTogQWRkIG1hY3Jvcy4KCShtYWNyb3MvbWFjcm9zLmRlcCk6IE5ldyBtYWludGFpbmVyIHJ1bGUgZm9yIGhhbmRsaW5nIGF1dG9tYXRpYwoJcmVidWlsZGluZyBvZiBhY2xvY2FsLm00IGlmIGFueSBvZiB0aGUgbWFjcm9zIGluIGBtYWNyb3MvJyBjaGFuZ2UuCgoJKiBjb25maWd1cmUuaW4gKEFDX09VVFBVVCk6IEdlbmVyYXRlIG1hY3Jvcy9NYWtlZmlsZSB0b28uCgoxOTk4LTAyLTEyICBGZWRlcmljbyBNZW5hIFF1aW50ZXJvICA8ZmVkZXJpY29AbnVjbGVjdS51bmFtLm14PgoKCSogbGliZ25vbWV1aS9nbm9tZS1hcHAuYyAoZ25vbWVfYXBwX2NvbmZpZ3VyZV9wb3NpdGlvbnMpOiBGaXhlZAoJYnVnIHdoZXJlIGl0IHdvdWxkIHNpZ3NlZ3YgaWYgdGhlIGFwcCBoYWQgYSB0b29sYmFyIGJ1dCBubyBtZW51YmFyLgoJKGdub21lX2FwcF9uZXcpOiBSZW1vdmVkIHVudXNlZCB2YXJpYWJsZSBwcmVmaXguCglSZW1vdmVkIHVudXNlZCBwcm90b3R5cGUgZm9yIGdub21lX2FwcF9yaWdodGNsaWNrX2V2ZW50LgoJKGdub21lX2FwcF9yaWdodGNsaWNrX21lbnViYXIpOiBSZW1vdmVkIHVudXNlZCB2YXJpYWJsZSBpLgoJKGdub21lX2FwcF9yaWdodGNsaWNrX3Rvb2xiYXIpOiBMaWtld2lzZS4KCShnbm9tZV9hcHBfc2V0X21lbnVzKTogRml4ZWQgdW5pbml0aWFsaXplZCB2YXJpYWJsZSB3YXJuaW5ncy4KCShnbm9tZV9hcHBfcmlnaHRjbGlja19tZW51YmFyKTogZ3RrX21lbnVfcG9wdXAgdGltZSBwYXJhbWV0ZXIgc2V0Cgl0byBldmVudC0+dGltZS4gIFRoaXMgbWFrZXMgdGhlIHBvcHVwIHRpbWVyIHdvcmsgY29ycmVjdGx5LgoJKGdub21lX2FwcF9yaWdodGNsaWNrX3Rvb2xiYXIpOiBMaWtld2lzZS4KCjE5OTgtMDItMTIgIFJhamEgUiBIYXJpbmF0aCAgPGhhcmluYXRoQGNzLnVtbi5lZHU+CgoJKiBjb25maWd1cmUuaW4gKEdOT01FX0xJQkRJUixHTk9NRV9JTkNMVURFRElSKTogTmV3IGNvbmZpZ3VyYXRpb24KCXZhcmlhYmxlcyB1c2VkIGluIGBnbm9tZUNvbmYuc2gnLgoJKiBnbm9tZUNvbmYuc2guaW4gKEdOT01FX0xJQkRJUixHTk9NRV9JTkNMVURFRElSKTogTW92ZWQgaGVyZSBmcm9tCgl0aGUgYGluc3RhbGwtZGF0YS1sb2NhbCcgcnVsZS4KCgkqIE1ha2VmaWxlLmFtIChTVUJESVJTKTogQWRkIGBzdXBwb3J0Jy4KCShpbnN0YWxsLWRhdGEtbG9jYWwpOiBSZW1vdmUuCgoxOTk4LTAyLTEwICBSYWphIFIgSGFyaW5hdGggIDxoYXJpbmF0aEBjcy51bW4uZWR1PgoKCSogSEFDS0lORzogQWRkZWQgYSBub3RlIGFib3V0IGBhY2xvY2FsJyBhbmQgdGhlIGBtYWNyb3MnIHN1YmRpci4gCgoJKiBhdXRvZ2VuLnNoOiBSdW4gYGFjbG9jYWwgLUkgbWFjcm9zJyBpZiBtYWNyb3Mgc3ViZGlyIGV4aXN0cy4KCgkqIGNvbmZpZ3VyZS5pbjogTW92ZWQgQUNfR05PTUVfQ0hFQ0sgYW5kIEFDX0dOT01FX1hfQ0hFQ0tTIHRvCgltYWNyb3Mgc3ViZGlyIChhcyBnbm9tZS5tNCBhbmQgZ25vbWUteC1jaGVja3MubTQgcmVzcC4pLgo=