IyBjb25maWd1cmUgb3B0aW9ucwolZGVmaW5lIAl3aXRoX3NubXAJMAolZGVmaW5lCQl3aXRoX3Z0eXNoCTEKJWRlZmluZQkJd2l0aF9vc3BmX3RlCTEKJWRlZmluZQkJd2l0aF9uc3NhCTEKJWRlZmluZQkJd2l0aF9vcGFxdWVfbHNhIDEKJWRlZmluZQkJd2l0aF90Y3BfemVicmEJMAolZGVmaW5lCQl3aXRoX3Z0eXNoCTEKJWRlZmluZQkJd2l0aF9wYW0JMQolZGVmaW5lCQl3aXRoX2lwdjYJMQolZGVmaW5lCQl3aXRoX29zcGZjbGllbnQgMQolZGVmaW5lCQl3aXRoX29zcGZhcGkJMQolZGVmaW5lCQl3aXRoX211bHRpcGF0aAk2NAolZGVmaW5lCQlxdWFnZ2FfdXNlcglxdWFnZ2EKJWRlZmluZQkJdnR5X2dyb3VwCXF1YWdnYXZ0eQoKIyBwYXRoIGRlZmluZXMKJWRlZmluZQkJX3N5c2NvbmZkaXIJL2V0Yy9xdWFnZ2EKJWRlZmluZQkJemViX3NyYwkJJXtfYnVpbGRkaXJ9LyV7bmFtZX0tJXt2ZXJzaW9ufQolZGVmaW5lCQl6ZWJfcmhfc3JjCSV7emViX3NyY30vcmVkaGF0CiVkZWZpbmUJCXplYl9kb2NzCSV7emViX3NyY30vZG9jCgojIGRlZmluZXMgZm9yIGNvbmZpZ3VyZQolZGVmaW5lCQlfbGliZXhlY2Rpcgkle19leGVjX3ByZWZpeH0vbGliZXhlYy9xdWFnZ2EKJWRlZmluZQkJX2luY2x1ZGVkaXIJJXtfcHJlZml4fS9pbmNsdWRlL3F1YWdnYQolZGVmaW5lCQlfbGliZGlyCQkle19leGVjX3ByZWZpeH0vJXtfbGlifS9xdWFnZ2EKJWRlZmluZQkJX2xvY2Fsc3RhdGVkaXIJL3Zhci9ydW4vcXVhZ2dhCgpTdW1tYXJ5OiBSb3V0aW5nIGRhZW1vbgpOYW1lOgkJcXVhZ2dhClZlcnNpb246CUBWRVJTSU9OQApSZWxlYXNlOglAQ09ORkRBVEVAMDEKTGljZW5zZToJR1BMCkdyb3VwOiBTeXN0ZW0gRW52aXJvbm1lbnQvRGFlbW9ucwpTb3VyY2UwOglodHRwOi8vd3d3LnF1YWdnYS5uZXQvc25hcHNob3RzL2N2cy8le25hbWV9LSV7dmVyc2lvbn0udGFyLmd6ClVSTDoJCWh0dHA6Ly93d3cucXVhZ2dhLm5ldAolaWYgJXdpdGhfc25tcAojQnVpbGRSZXF1aXJlczoJdWNkLXNubXAtZGV2ZWwKUHJlcmVxOgkJdWNkLXNubXAKJWVuZGlmCiVpZiAld2l0aF92dHlzaApCdWlsZFJlcXVpcmVzOglyZWFkbGluZSByZWFkbGluZS1kZXZlbCBuY3Vyc2VzIG5jdXJzZXMtZGV2ZWwKUHJlcmVxOgkJcmVhZGxpbmUgbmN1cnNlcwolZW5kaWYKQnVpbGRSZXF1aXJlczoJdGV4aW5mbyB0ZXRleCBhdXRvY29uZiBwYW0tZGV2ZWwgcGF0Y2gKIyBJbml0c2NyaXB0cyA+IDUuNjAgaXMgcmVxdWlyZWQgZm9yIElQdjYgc3VwcG9ydApQcmVyZXE6CQlpbml0c2NyaXB0cyA+PSA1LjYwClByZXJlcToJCW5jdXJzZXMgcmVhZGxpbmUgcGFtClByZXJlcToJCS9zYmluL2luc3RhbGwtaW5mbwpQcm92aWRlczoJcm91dGluZ2RhZW1vbgpCdWlsZFJvb3Q6CSV7X3RtcHBhdGh9LyV7bmFtZX0tJXt2ZXJzaW9ufS1yb290Ck9ic29sZXRlczoJYmlyZCBnYXRlZCBtcnQgemVicmEKCiVkZXNjcmlwdGlvbgpRdWFnZ2EgaXMgYSBmcmVlIHNvZnR3YXJlIHRoYXQgbWFuYWdlcyBUQ1AvSVAgYmFzZWQgcm91dGluZwpwcm90b2NvbC4gSXQgdGFrZXMgbXVsdGktc2VydmVyIGFuZCBtdWx0aS10aHJlYWQgYXBwcm9hY2ggdG8gcmVzb2x2ZQp0aGUgY3VycmVudCBjb21wbGV4aXR5IG9mIHRoZSBJbnRlcm5ldC4KClF1YWdnYSBzdXBwb3J0cyBCR1A0LCBCR1A0KywgT1NQRnYyLCBPU1BGdjMsIFJJUHYxLCBSSVB2MiwgYW5kIFJJUG5nLgoKUXVhZ2dhIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgYXMgYSBSb3V0ZSBTZXJ2ZXIgYW5kIGEgUm91dGUgUmVmbGVjdG9yLiBJdCBpcwpub3QgYSB0b29sa2l0LCBpdCBwcm92aWRlcyBmdWxsIHJvdXRpbmcgcG93ZXIgdW5kZXIgYSBuZXcgYXJjaGl0ZWN0dXJlLgpRdWFnZ2EgYnkgZGVzaWduIGhhcyBhIHByb2Nlc3MgZm9yIGVhY2ggcHJvdG9jb2wuCgpRdWFnZ2EgaXMgYSBmb3JrIG9mIEdOVSBaZWJyYS4KCiVwYWNrYWdlIGNvbnRyaWIKU3VtbWFyeTogY29udHJpYiB0b29scyBmb3IgcXVhZ2dhCkdyb3VwOiBTeXN0ZW0gRW52aXJvbm1lbnQvRGFlbW9ucwoKJWRlc2NyaXB0aW9uIGNvbnRyaWIKQ29udHJpYnV0ZWQvM3JkIHBhcnR5IHRvb2xzIHdoaWNoIG1heSBiZSBvZiB1c2Ugd2l0aCBxdWFnZ2EuCgolcGFja2FnZSBkZXZlbApTdW1tYXJ5OiBIZWFkZXIgYW5kIG9iamVjdCBmaWxlcyBmb3IgcXVhZ2dhIGRldmVsb3BtZW50Ckdyb3VwOiBTeXN0ZW0gRW52aXJvbm1lbnQvRGFlbW9ucwoKJWRlc2NyaXB0aW9uIGRldmVsClRoZSBxdWFnZ2EtZGV2ZWwgcGFja2FnZSBjb250YWlucyB0aGUgaGVhZGVyIGFuZCBvYmplY3QgZmlsZXMgbmVjY2Vzc2FyeSBmb3IKZGV2ZWxvcGluZyBPU1BGLUFQSSBhbmQgcXVhZ2dhIGFwcGxpY2F0aW9ucy4KCiVwcmVwCiVzZXR1cCAgLXEKCiVidWlsZAolY29uZmlndXJlIFwKJWlmICV3aXRoX2lwdjYKCS0tZW5hYmxlLWlwdjYgXAolZW5kaWYKJWlmICV3aXRoX3NubXAKCS0tZW5hYmxlLXNubXAgXAolZW5kaWYKJWlmICV3aXRoX211bHRpcGF0aAoJLS1lbmFibGUtbXVsdGlwYXRoPSV3aXRoX211bHRpcGF0aCBcCiVlbmRpZgolaWYgJXdpdGhfdGNwX3plYnJhCgktLWVuYWJsZS10Y3AtemVicmEgXAolZW5kaWYKJWlmICV3aXRoX25zc2EKCS0tZW5hYmxlLW5zc2EgXAolZW5kaWYKJWlmICV3aXRoX29wYXF1ZV9sc2EKCS0tZW5hYmxlLW9wYXF1ZS1sc2EgXAolZW5kaWYKJWlmICV3aXRoX29zcGZfdGUKCS0tZW5hYmxlLW9zcGYtdGUgXAolZW5kaWYKJWlmICV3aXRoX3Z0eXNoCgktLWVuYWJsZS12dHlzaCBcCiVlbmRpZgolaWYgJXdpdGhfb3NwZmNsaWVudCAKCS0tZW5hYmxlLW9zcGZjbGllbnQ9eWVzIFwKJWVsc2UKCS0tZW5hYmxlLW9zcGZjbGllbnQ9bm9cCiVlbmRpZgolaWYgJXdpdGhfb3NwZmFwaQoJLS1lbmFibGUtb3NwZmFwaT15ZXMgXAolZWxzZQoJLS1lbmFibGUtb3NwZmFwaT1ubyBcCiVlbmRpZgolaWYgJXdpdGhfcGFtCgktLXdpdGgtbGlicGFtIFwKJWVuZGlmCiVpZiAlcXVhZ2dhX3VzZXIKCS0tZW5hYmxlLXVzZXI9JXF1YWdnYV91c2VyIFwKCS0tZW5hYmxlLWdyb3VwPSVxdWFnZ2FfdXNlciBcCiVlbmRpZgolaWYgJXZ0eV9ncm91cAoJLS1lbmFibGUtdnR5LWdyb3VwPSV2dHlfZ3JvdXAgXAolZW5kaWYKLS13aXRoLWNmbGFncz0iLU8yIiBcCi0tZW5hYmxlLW5ldGxpbmsKCm1ha2UgJXs/X3NtcF9tZmxhZ3N9IE1BS0VJTkZPPSJtYWtlaW5mbyAtLW5vLXNwbGl0IgoKcHVzaGQgZG9jCnRleGkyaHRtbCBxdWFnZ2EudGV4aQpwb3BkCgolaW5zdGFsbApybSAtcmYgJFJQTV9CVUlMRF9ST09UCgppbnN0YWxsIC1kICRSUE1fQlVJTERfUk9PVC9ldGMve3JjLmQvaW5pdC5kLHN5c2NvbmZpZyxsb2dyb3RhdGUuZCxwYW0uZH0gXAoJJFJQTV9CVUlMRF9ST09UL3Zhci9sb2cvcXVhZ2dhICRSUE1fQlVJTERfUk9PVCV7X2luZm9kaXJ9CgptYWtlIGluc3RhbGwgXAoJREVTVERJUj0kUlBNX0JVSUxEX1JPT1QKCiMgUmVtb3ZlIHRoaXMgZmlsZSwgYXMgaXQgaXMgdW5pbnN0YWxsZWQgYW5kIGNhdXNlcyBlcnJvcnMgd2hlbiBidWlsZGluZyBvbiBSSDkKcm0gLXJmICRSUE1fQlVJTERfUk9PVC91c3Ivc2hhcmUvaW5mby9kaXIKCmluc3RhbGwgJXt6ZWJfcmhfc3JjfS96ZWJyYS5pbml0ICRSUE1fQlVJTERfUk9PVC9ldGMvcmMuZC9pbml0LmQvemVicmEKaW5zdGFsbCAle3plYl9yaF9zcmN9L2JncGQuaW5pdCAkUlBNX0JVSUxEX1JPT1QvZXRjL3JjLmQvaW5pdC5kL2JncGQKJWlmICV3aXRoX2lwdjYKaW5zdGFsbCAle3plYl9yaF9zcmN9L29zcGY2ZC5pbml0ICRSUE1fQlVJTERfUk9PVC9ldGMvcmMuZC9pbml0LmQvb3NwZjZkCmluc3RhbGwgJXt6ZWJfcmhfc3JjfS9yaXBuZ2QuaW5pdCAkUlBNX0JVSUxEX1JPT1QvZXRjL3JjLmQvaW5pdC5kL3JpcG5nZAolZW5kaWYKaW5zdGFsbCAle3plYl9yaF9zcmN9L29zcGZkLmluaXQgJFJQTV9CVUlMRF9ST09UL2V0Yy9yYy5kL2luaXQuZC9vc3BmZAppbnN0YWxsICV7emViX3JoX3NyY30vcmlwZC5pbml0ICRSUE1fQlVJTERfUk9PVC9ldGMvcmMuZC9pbml0LmQvcmlwZAppbnN0YWxsIC1tNjQ0ICV7emViX3JoX3NyY30vcXVhZ2dhLnBhbSAkUlBNX0JVSUxEX1JPT1QvZXRjL3BhbS5kL3F1YWdnYQppbnN0YWxsIC1tNjQ0ICV7emViX3JoX3NyY30vcXVhZ2dhLmxvZ3JvdGF0ZSAkUlBNX0JVSUxEX1JPT1QvZXRjL2xvZ3JvdGF0ZS5kL3F1YWdnYQppbnN0YWxsIC1kIC1tNzUwICAkUlBNX0JVSUxEX1JPT1QvdmFyL3J1bi9xdWFnZ2EKCiVwcmUKIyBhZGQgdnR5X2dyb3VwCiVpZiAldnR5X2dyb3VwCmdyb3VwYWRkIC1yICV2dHlfZ3JvdXAgMj4gL2Rldi9udWxsIHx8IDoKJWVuZGlmCiMgYWRkIHF1YWdnYSB1c2VyIGFuZCBncm91cAolaWYgJXF1YWdnYV91c2VyCi91c3Ivc2Jpbi91c2VyYWRkIC1NIC1yIC1zIC9iaW4vZmFsc2UgLWMgIlF1YWdnYSByb3V0aW5nIHN1aXRlIiBcCiAtZCAlX2xvY2Fsc3RhdGVkaXIgJXF1YWdnYV91c2VyIDI+IC9kZXYvbnVsbCB8fCA6CiVlbmRpZgoKJXBvc3QKIyB6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIDxzZXJ2aWNlIG5hbWU+IDxwb3J0L3Byb3RvPiA8Y29tbWVudD4KIyBlLmcuIHplYnJhX3NwZWNfYWRkX3NlcnZpY2UgemVicmFzcnYgMjYwMC90Y3AgInplYnJhIHNlcnZpY2UiCgp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlICgpCnsKICAjIEFkZCBwb3J0IC9ldGMvc2VydmljZXMgZW50cnkgaWYgaXQgaXNuJ3QgYWxyZWFkeSB0aGVyZSAKICBpZiBbIC1mIC9ldGMvc2VydmljZXMgXSAmJiAhIGdyZXAgLXEgIl4kMVteYS16QS1aMC05XSIgL2V0Yy9zZXJ2aWNlcyA7IHRoZW4KICAgIGVjaG8gIiQxCQkkMgkJCSMgJDMiICA+PiAvZXRjL3NlcnZpY2VzCiAgZmkKfQoKemVicmFfc3BlY19hZGRfc2VydmljZSB6ZWJyYXNydiAyNjAwL3RjcCAiemVicmEgc2VydmljZSIKemVicmFfc3BlY19hZGRfc2VydmljZSB6ZWJyYSAgICAyNjAxL3RjcCAiemVicmEgdnR5Igp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIHJpcGQgICAgIDI2MDIvdGNwICJSSVBkIHZ0eSIKJWlmICV3aXRoX2lwdjYKemVicmFfc3BlY19hZGRfc2VydmljZSByaXBuZ2QgICAyNjAzL3RjcCAiUklQbmdkIHZ0eSIKJWVuZGlmCnplYnJhX3NwZWNfYWRkX3NlcnZpY2Ugb3NwZmQgICAgMjYwNC90Y3AgIk9TUEZkIHZ0eSIKemVicmFfc3BlY19hZGRfc2VydmljZSBiZ3BkICAgICAyNjA1L3RjcCAiQkdQZCB2dHkiCiVpZiAld2l0aF9pcHY2CnplYnJhX3NwZWNfYWRkX3NlcnZpY2Ugb3NwZjZkICAgMjYwNi90Y3AgIk9TUEY2ZCB2dHkiCiVlbmRpZgolaWYgJXdpdGhfb3NwZmFwaQp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIG9zcGZhcGkgIDI2MDcvdGNwICJPU1BGLUFQSSIKJWVuZGlmCgovc2Jpbi9jaGtjb25maWcgLS1hZGQgemVicmEgCi9zYmluL2Noa2NvbmZpZyAtLWFkZCByaXBkCiVpZiAld2l0aF9pcHY2Ci9zYmluL2Noa2NvbmZpZyAtLWFkZCByaXBuZ2QKL3NiaW4vY2hrY29uZmlnIC0tYWRkIG9zcGY2ZAolZW5kaWYKL3NiaW4vY2hrY29uZmlnIC0tYWRkIG9zcGZkCi9zYmluL2Noa2NvbmZpZyAtLWFkZCBiZ3BkCgovc2Jpbi9pbnN0YWxsLWluZm8gJXtfaW5mb2Rpcn0vcXVhZ2dhLmluZm8uZ3ogJXtfaW5mb2Rpcn0vZGlyCgojIENyZWF0ZSBkdW1teSBmaWxlcyBpZiB0aGV5IGRvbid0IGV4aXN0IHNvIGJhc2ljIGZ1bmN0aW9ucyBjYW4gYmUgdXNlZC4KaWYgWyAhIC1lICV7X3N5c2NvbmZkaXJ9L3plYnJhLmNvbmYgXTsgdGhlbgoJZWNobyAiaG9zdG5hbWUgYGhvc3RuYW1lYCIgPiAle19zeXNjb25mZGlyfS96ZWJyYS5jb25mCgljaG1vZCA2NDAgJXtfc3lzY29uZmRpcn0vemVicmEuY29uZgpmaQppZiBbICEgLWUgJXtfc3lzY29uZmRpcn0vdnR5c2guY29uZiBdOyB0aGVuCgl0b3VjaCAle19zeXNjb25mZGlyfS92dHlzaC5jb25mCgljaG1vZCA2NDAgJXtfc3lzY29uZmRpcn0vdnR5c2guY29uZgpmaQoKJXBvc3R1bgppZiBbICIkMSIgLWdlICAiMSIgXTsgdGhlbgoJL2V0Yy9yYy5kL2luaXQuZC96ZWJyYSAgY29uZHJlc3RhcnQgPi9kZXYvbnVsbCAyPiYxCgkvZXRjL3JjLmQvaW5pdC5kL3JpcGQgICBjb25kcmVzdGFydCA+L2Rldi9udWxsIDI+JjEKJWlmICV3aXRoX2lwdjYKCS9ldGMvcmMuZC9pbml0LmQvcmlwbmdkIGNvbmRyZXN0YXJ0ID4vZGV2L251bGwgMj4mMQolZW5kaWYKCS9ldGMvcmMuZC9pbml0LmQvb3NwZmQgIGNvbmRyZXN0YXJ0ID4vZGV2L251bGwgMj4mMQolaWYgJXdpdGhfaXB2NgoJL2V0Yy9yYy5kL2luaXQuZC9vc3BmNmQgY29uZHJlc3RhcnQgPi9kZXYvbnVsbCAyPiYxCiVlbmRpZgoJL2V0Yy9yYy5kL2luaXQuZC9iZ3BkICAgY29uZHJlc3RhcnQgPi9kZXYvbnVsbCAyPiYxCmZpCi9zYmluL2luc3RhbGwtaW5mbyAtLWRlbGV0ZSAle19pbmZvZGlyfS9xdWFnZ2EuaW5mby5neiAle19pbmZvZGlyfS9kaXIKCiVwcmV1bgppZiBbICIkMSIgPSAiMCIgXTsgdGhlbgogICAgICAgIC9zYmluL2Noa2NvbmZpZyAtLWRlbCB6ZWJyYQoJL3NiaW4vY2hrY29uZmlnIC0tZGVsIHJpcGQKJWlmICV3aXRoX2lwdjYKCS9zYmluL2Noa2NvbmZpZyAtLWRlbCByaXBuZ2QKJWVuZGlmCgkvc2Jpbi9jaGtjb25maWcgLS1kZWwgb3NwZmQKJWlmICV3aXRoX2lwdjYKCS9zYmluL2Noa2NvbmZpZyAtLWRlbCBvc3BmNmQKJWVuZGlmCgkvc2Jpbi9jaGtjb25maWcgLS1kZWwgYmdwZApmaQoKJWNsZWFuCiNybSAtcmYgJFJQTV9CVUlMRF9ST09UCgolZmlsZXMKJWRlZmF0dHIoLSxyb290LHJvb3QpCiVkb2MgKi8qLnNhbXBsZSogQVVUSE9SUyBDT1BZSU5HCiVkb2MgZG9jL3F1YWdnYS5odG1sCiVkb2MgZG9jL21wbHMKJWRvYyBDaGFuZ2VMb2cgSU5TVEFMTCBORVdTIFJFQURNRSBSRVBPUlRJTkctQlVHUyBTRVJWSUNFUyBUT0RPCiVpZiAlcXVhZ2dhX3VzZXIKJWRpciAlYXR0cig3NTEsJXF1YWdnYV91c2VyLCVxdWFnZ2FfdXNlcikgJXtfc3lzY29uZmRpcn0KJWRpciAlYXR0cig3NTAsJXF1YWdnYV91c2VyLCVxdWFnZ2FfdXNlcikgL3Zhci9sb2cvcXVhZ2dhIAolZGlyICVhdHRyKDc1MSwlcXVhZ2dhX3VzZXIsJXF1YWdnYV91c2VyKSAvdmFyL3J1bi9xdWFnZ2EKJWVsc2UKJWRpciAlYXR0cig3NTAscm9vdCxyb290KSAle19zeXNjb25mZGlyfQolZGlyICVhdHRyKDc1MCxyb290LHJvb3QpIC92YXIvbG9nL3F1YWdnYQolZGlyICVhdHRyKDc1NSxyb290LHJvb3QpIC91c3Ivc2hhcmUvaW5mbwolZGlyICVhdHRyKDc1MCxyb290LHJvb3QpIC92YXIvcnVuL3F1YWdnYQolZW5kaWYKJWlmICV2dHlfZ3JvdXAKJWF0dHIoNzUwLCVxdWFnZ2FfdXNlciwldnR5X2dyb3VwKSAle19zeXNjb25mZGlyfS92dHlzaC5jb25mLnNhbXBsZQolZW5kaWYKJXtfaW5mb2Rpcn0vKmluZm8qCiV7X21hbmRpcn0vbWFuKi8qCiV7X3NiaW5kaXJ9LyoKJWlmICV3aXRoX3Z0eXNoCiV7X2JpbmRpcn0vKgolZW5kaWYKJWNvbmZpZyAvZXRjL3F1YWdnYS9bIXZdKgolY29uZmlnIC9ldGMvcmMuZC9pbml0LmQvKgolY29uZmlnKG5vcmVwbGFjZSkgL2V0Yy9wYW0uZC9xdWFnZ2EKJWNvbmZpZyhub3JlcGxhY2UpICVhdHRyKDY0MCxyb290LHJvb3QpIC9ldGMvbG9ncm90YXRlLmQvKgoKJWZpbGVzIGNvbnRyaWIKJWRlZmF0dHIoLSxyb290LHJvb3QpCiVkb2MgdG9vbHMKCiVmaWxlcyBkZXZlbAolZGVmYXR0cigtLHJvb3Qscm9vdCkKJWRpciAle19saWJkaXJ9LyoKJWRpciAle19pbmNsdWRlZGlyfS9vc3BmZC8qCiVpZiAld2l0aF9vc3BmYXBpCiVkaXIgJXtfaW5jbHVkZWRpcn0vb3NwZmFwaS8qCiVlbmRpZgoKJWNoYW5nZWxvZwoqIFR1ZSBBdWcgMTIgMjAwMyBQYXVsIEpha21hIDxwYXVsQGRpc2hvbmUuc3Q+Ci0gUmVuYW1lZCB0byBRdWFnZ2EKLSBTeW5jIHRvIFF1YWdnYSByZWxlYXNlIDAuOTYKCiogVHVlIE1hciAyMCAyMDAzIFBhdWwgSmFrbWEgPHBhdWxAZGlzaG9uZS5zdD4KLSB6ZWJyYSBwcml2aWxlZ2VzIHN1cHBvcnQKCiogTW9uIE1hciAxOCAyMDAzIFBhdWwgSmFrbWEgPHBhdWxAZGlzaG9uZS5zdD4KLSBGaXggbWVtIGxlYWsgaW4gJ3Nob3cgdGhyZWFkIGNwdScKLSBSYWxwaCBLZWxsZXIncyBPU1BGLUFQSQotIEFtaXI6IEZpeCBjb25maWd1cmUuYWMgZm9yIG5ldC1zbm1wCgoqIFNhdCBNYXIgMSAyMDAzIFBhdWwgSmFrbWEgPHBhdWxAZGlzaG9uZS5zdD4KLSBvc3BmZCBJT1MgcHJlZml4IHRvIGludGVyZmFjZSBtYXRjaGluZyBmb3IgJ25ldHdvcmsnIHN0YXRlbWVudAotIHRlbXBvcmFyeSBmaXggZm9yIFB0UCBhbmQgSVB2NgotIHN5bmMgdG8gemVicmEub3JnIENWUwoKKiBNb24gSmFuIDIwIDIwMDMgUGF1bCBKYWttYSA8cGF1bEBkaXNob25lLnN0PgotIHVwZGF0ZSB0byBsYXRlc3QgY3ZzCi0gWW9uJ3MgInNob3cgdGhyZWFkIGNwdSIgcGF0Y2ggLSAxNzIxNwotIHdhbGsgdXAgdHJlZSAtIDE3MjE4Ci0gb3NwZmQgTlNTQSBmaXhlcyAtIDE2NjgxCi0gb3NwZmQgbnNtIGZpeGVzIC0gMTY4MjQKLSBvc3BmZCBPTFNBIGZpeGVzIGFuZCBuZXcgZmVhdHVyZSAtIDE2ODIzIAotIEtBTUUgYW5kIGlmaW5kZXggZml4ZXMgLSAxNjUyNQotIHNwZWMgZmlsZSBjaGFuZ2VzIHRvIGFsbG93IHJlZGhhdCBmaWxlcyB0byBiZSBpbiB0cmVlCgoqIFNhdCBEZWMgMjggMjAwMiBBbGV4YW5kZXIgSG9vZ2VyaHVpcyA8YWxleGhAaWhhdGVudC5jb20+Ci0gQWRkZWQgY29uZGl0aW9uYWxzIGZvciBidWlsZGluZyB3aXRoKG91dCkgSVB2NiwgdnR5c2gsIFJJUCwgQkdQCi0gRml4ZWQgdXAgc29tZSBidWlsZCByZXF1aXJlbWVudHMgKHBhdGNoKQotIEFkZGVkIGNvbmRpdGlvbmFsIGJ1aWxkIHJlcXVpcmVtZW50cyBmb3IgdnR5c2ggLyBzbm1wCi0gQWRkZWQgY29uZGl0aW9uYWwgdG8gJWZpbGVzIGZvciAlX2JpbmRpciBkZXBlbmRpbmcgb24gdnR5c2gKCiogTW9uIE5vdiAxMSAyMDAyIFBhdWwgSmFrbWEgPHBhdWxqQGFscGh5cmEuaWU+Ci0gdXBkYXRlIHRvIGxhdGVzdCBDVlMKLSBhZGQgR3JlZyBUcm94ZWwncyBtZDUgYnVmZmVyIGNvcHkvZHVwIGZpeAotIGFkZCBSSVB2MSBmaXgKLSBhZGQgRnJhbmsncyBtdWx0aWNhc3QgZmxhZyBmaXgKCiogV2VkIE9jdCAwOSAyMDAyIFBhdWwgSmFrbWEgPHBhdWxqQGFscGh5cmEuaWU+Ci0gdXBkYXRlIHRvIGxhdGVzdCBDVlMKLSB0aW1lc3RhbXBlZCBjcnlwdF9zZXFudW0gcGF0Y2gKLSBvaS0+b25fd3JpdGVfcSBmaXgKCiogTW9uIFNlcCAzMCAyMDAyIFBhdWwgSmFrbWEgPHBhdWxqQGFscGh5cmEuaWU+Ci0gdXBkYXRlIHRvIGxhdGVzdCBDVlMKLSBhZGQgdnR5c2ggJ3dyaXRlLWNvbmZpZyAoaW50ZWdyYXRlZHxkYWVtb24pJyBwYXRjaAotIGFsd2F5cyAnbWFrZSByZWJ1aWxkJyBpbiB2dHlzaC8gdG8gY2F0Y2ggbmV3IGNvbW1hbmRzCgoqIEZyaSBTZXAgMTMgMjAwMiBQYXVsIEpha21hIDxwYXVsakBhbHBoeXJhLmllPgotIHVwZGF0ZSB0byAwLjkzYgoKKiBXZWQgU2VwIDExIDIwMDIgUGF1bCBKYWttYSA8cGF1bGpAYWxwaHlyYS5pZT4KLSB1cGRhdGUgdG8gbGF0ZXN0IENWUwotIGFkZCAiL3NiaW4vaXAgcm91dGUgZmx1c2ggcHJvdG8gemVicmEiIHRvIHplYnJhIFJIIGluaXQgb24gc3RhcnR1cAoKKiBTYXQgQXVnIDI0IDIwMDIgUGF1bCBKYWttYSA8cGF1bGpAYWxwaHlyYS5pZT4KLSB1cGRhdGUgdG8gY3VycmVudCBDVlMKLSBhZGQgT1NQRiBwb2ludCB0byBtdWx0aXBvaW50IHBhdGNoCi0gYWRkIE9TUEYgYnVnZml4ZXMKLSBhZGQgQkdQIGhhc2ggb3B0aW1pc2F0aW9uIHBhdGNoCgoqIEZyaSBKdW4gMTQgMjAwMiBQYXVsIEpha21hIDxwYXVsakBhbHBoeXJhLmllPgotIHVwZGF0ZSB0byAwLjkzLXByZTEgLyBDVlMKLSBhZGQgbGluayBzdGF0ZSBkZXRlY3Rpb24gc3VwcG9ydAotIGFkZCBnZW5lcmljIFB0UCBhbmQgUkZDMzAyMSBzdXBwb3J0Ci0gdmFyaW91cyBidWcgZml4ZXMKCiogVGh1IEF1ZyAwOSAyMDAxIEVsbGlvdCBMZWUgPHNvcHdpdGhAcmVkaGF0LmNvbT4gMC45MWEtNgotIEZpeCBidWcgIzUxMzM2CgoqIFdlZCBBdWcgIDEgMjAwMSBUcm9uZCBFaXZpbmQgR2xvbXNy+GQgPHRlZ0ByZWRoYXQuY29tPiAwLjkxYS01Ci0gVXNlIGdlbmVyaWMgaW5pdHNjcmlwdCBzdHJpbmdzIGluc3RlYWQgb2YgaW5pdHNjcmlwdCBzcGVjaWZpYwogICggIlN0YXJ0aW5nIGZvbzogIiAtPiAiU3RhcnRpbmcgJHByb2c6IiApCgoqIEZyaSBKdWwgMjcgMjAwMSBFbGxpb3QgTGVlIDxzb3B3aXRoQHJlZGhhdC5jb20+IDAuOTFhLTQKLSBCdW1wIHRoZSByZWxlYXNlIHdoZW4gcmVidWlsZGluZyBpbnRvIHRoZSBkaXN0LgoKKiBUdWUgRmViICA2IDIwMDEgVGltIFBvd2VycyA8dGltcEByZWRoYXQuY29tPgotIGJ1aWx0IGZvciBQb3dlcnRvb2xzCgoqIFN1biBGZWIgIDQgMjAwMSBQZWtrYSBTYXZvbGEgPHBla2thc0BuZXRjb3JlLmZpPiAKLSBIYWNrZWQgdXAgZnJvbSBQTEQgTGludXggMC45MC0xLCBNYW5kcmFrZSAwLjkwLTFtZGsgYW5kIG9uZSBmcm9tIHplYnJhLm9yZy4KLSBVcGRhdGUgdG8gMC45MWEKLSBWZXJ5IGhlYXZ5IG1vZGlmaWNhdGlvbnMgdG8gaW5pdC5kLyosIC5zcGVjLCBwYW0sIGkxOG4sIGxvZ3JvdGF0ZSwgZXRjLgotIFNob3VsZCBiZSBxdWl0ZSBSZWQgSGF0J2lzcXVlIG5vdy4K