IyBjb25maWd1cmUgb3B0aW9ucwolZGVmaW5lIAl3aXRoX3NubXAJMQolZGVmaW5lCQl3aXRoX3Z0eXNoCTEKJWRlZmluZQkJd2l0aF9vc3BmX3RlCTEKJWRlZmluZQkJd2l0aF9uc3NhCTEKJWRlZmluZQkJd2l0aF9vcGFxdWVfbHNhIDEKJWRlZmluZQkJd2l0aF90Y3BfemVicmEJMAolZGVmaW5lCQl3aXRoX3Z0eXNoCTEKJWRlZmluZQkJd2l0aF9wYW0JMQolZGVmaW5lCQl3aXRoX2lwdjYJMQolZGVmaW5lCQl3aXRoX29zcGZjbGllbnQgMQolZGVmaW5lCQl3aXRoX29zcGZhcGkJMQolZGVmaW5lCQl3aXRoX2lyZHAJMQolZGVmaW5lCQl3aXRoX2lzaXNkCTAKJWRlZmluZQkJd2l0aF9zaGFyZWQJMQolZGVmaW5lCQl3aXRoX211bHRpcGF0aAk2NAolZGVmaW5lCQlxdWFnZ2FfdXNlcglxdWFnZ2EKJWRlZmluZQkJdnR5X2dyb3VwCXF1YWdnYXZ0eQoKIyBwYXRoIGRlZmluZXMKJWRlZmluZQkJX3N5c2NvbmZkaXIJL2V0Yy9xdWFnZ2EKJWRlZmluZQkJemViX3NyYwkJJXtfYnVpbGRkaXJ9LyV7bmFtZX0tJXt2ZXJzaW9ufQolZGVmaW5lCQl6ZWJfcmhfc3JjCSV7emViX3NyY30vcmVkaGF0CiVkZWZpbmUJCXplYl9kb2NzCSV7emViX3NyY30vZG9jCgojIGRlZmluZXMgZm9yIGNvbmZpZ3VyZQolZGVmaW5lCQlfbGliZXhlY2Rpcgkle19leGVjX3ByZWZpeH0vbGliZXhlYy9xdWFnZ2EKJWRlZmluZQkJX2xpYmRpcgkJJXtfZXhlY19wcmVmaXh9LyV7X2xpYn0vcXVhZ2dhCiVkZWZpbmUJCV9pbmNsdWRlZGlyCSV7X3ByZWZpeH0vaW5jbHVkZQolZGVmaW5lCQlfbG9jYWxzdGF0ZWRpcgkvdmFyL3J1bi9xdWFnZ2EKCiMgbWlzYyBpbnRlcm5hbCBkZWZpbmVzCiVkZWZpbmUgICAgICAgICBxdWFnZ2FfdWlkICAgICAgOTIKJWRlZmluZSAgICAgICAgIHF1YWdnYV9naWQgICAgICA5MgolZGVmaW5lCQlkYWVtb25fbGlzdAl6ZWJyYSByaXBkIG9zcGZkIGJncGQKJWlmICV7d2l0aF9pcHY2fQolZGVmaW5lCQlkYWVtb252Nl9saXN0CSV7ZGFlbW9uX2xpc3R9IHJpcG5nZCBvc3BmNmQKJWVuZGlmCiVpZiAle3dpdGhfaXNpc2R9CiVkZWZpbmUJCWRhZW1vbl9vdGhlcglpc2lzZAolZWxzZQolZGVmaW5lCQlkYWVtb25fb3RoZXIJIiIKJWVuZGlmCgojIGFsbG93IGJ1aWxkIGRpciB0byBiZSBrZXB0CiVkZWZpbmUJCWtlZXBfYnVpbGQJMAoKU3VtbWFyeTogUm91dGluZyBkYWVtb24KTmFtZToJCXF1YWdnYQpWZXJzaW9uOglAVkVSU0lPTkAKUmVsZWFzZToJQENPTkZEQVRFQDAxCkxpY2Vuc2U6CUdQTApHcm91cDogU3lzdGVtIEVudmlyb25tZW50L0RhZW1vbnMKU291cmNlMDoJaHR0cDovL3d3dy5xdWFnZ2EubmV0L3NuYXBzaG90cy9jdnMvJXtuYW1lfS0le3ZlcnNpb259LnRhci5negpVUkw6CQlodHRwOi8vd3d3LnF1YWdnYS5uZXQKJWlmICV7d2l0aF9zbm1wfQpCdWlsZFJlcXVpcmVzOgluZXQtc25tcC1kZXZlbApQcmVyZXE6CQluZXQtc25tcAolZW5kaWYKJWlmICV7d2l0aF92dHlzaH0KQnVpbGRSZXF1aXJlczoJcmVhZGxpbmUgcmVhZGxpbmUtZGV2ZWwgbmN1cnNlcyBuY3Vyc2VzLWRldmVsClByZXJlcToJCXJlYWRsaW5lIG5jdXJzZXMKJWVuZGlmCkJ1aWxkUmVxdWlyZXM6CXRleGluZm8gdGV0ZXggYXV0b2NvbmYgcGFtLWRldmVsIHBhdGNoIGxpYmNhcC1kZXZlbAojIEluaXRzY3JpcHRzID4gNS42MCBpcyByZXF1aXJlZCBmb3IgSVB2NiBzdXBwb3J0ClByZXJlcToJCWluaXRzY3JpcHRzID49IDUuNjAKUHJlcmVxOgkJbmN1cnNlcyByZWFkbGluZSBwYW0KUHJlcmVxOgkJL3NiaW4vaW5zdGFsbC1pbmZvClByb3ZpZGVzOglyb3V0aW5nZGFlbW9uCkJ1aWxkUm9vdDoJJXtfdG1wcGF0aH0vJXtuYW1lfS0le3ZlcnNpb259LXJvb3QKT2Jzb2xldGVzOgliaXJkIGdhdGVkIG1ydCB6ZWJyYQoKJWRlc2NyaXB0aW9uClF1YWdnYSBpcyBhIGZyZWUgc29mdHdhcmUgdGhhdCBtYW5hZ2VzIFRDUC9JUCBiYXNlZCByb3V0aW5nCnByb3RvY29sLiBJdCB0YWtlcyBtdWx0aS1zZXJ2ZXIgYW5kIG11bHRpLXRocmVhZCBhcHByb2FjaCB0byByZXNvbHZlCnRoZSBjdXJyZW50IGNvbXBsZXhpdHkgb2YgdGhlIEludGVybmV0LgoKUXVhZ2dhIHN1cHBvcnRzIEJHUDQsIEJHUDQrLCBPU1BGdjIsIE9TUEZ2MywgUklQdjEsIFJJUHYyLCBhbmQgUklQbmcuCgpRdWFnZ2EgaXMgaW50ZW5kZWQgdG8gYmUgdXNlZCBhcyBhIFJvdXRlIFNlcnZlciBhbmQgYSBSb3V0ZSBSZWZsZWN0b3IuIEl0IGlzCm5vdCBhIHRvb2xraXQsIGl0IHByb3ZpZGVzIGZ1bGwgcm91dGluZyBwb3dlciB1bmRlciBhIG5ldyBhcmNoaXRlY3R1cmUuClF1YWdnYSBieSBkZXNpZ24gaGFzIGEgcHJvY2VzcyBmb3IgZWFjaCBwcm90b2NvbC4KClF1YWdnYSBpcyBhIGZvcmsgb2YgR05VIFplYnJhLgoKJXBhY2thZ2UgY29udHJpYgpTdW1tYXJ5OiBjb250cmliIHRvb2xzIGZvciBxdWFnZ2EKR3JvdXA6IFN5c3RlbSBFbnZpcm9ubWVudC9EYWVtb25zCgolZGVzY3JpcHRpb24gY29udHJpYgpDb250cmlidXRlZC8zcmQgcGFydHkgdG9vbHMgd2hpY2ggbWF5IGJlIG9mIHVzZSB3aXRoIHF1YWdnYS4KCiVwYWNrYWdlIGRldmVsClN1bW1hcnk6IEhlYWRlciBhbmQgb2JqZWN0IGZpbGVzIGZvciBxdWFnZ2EgZGV2ZWxvcG1lbnQKR3JvdXA6IFN5c3RlbSBFbnZpcm9ubWVudC9EYWVtb25zCgolZGVzY3JpcHRpb24gZGV2ZWwKVGhlIHF1YWdnYS1kZXZlbCBwYWNrYWdlIGNvbnRhaW5zIHRoZSBoZWFkZXIgYW5kIG9iamVjdCBmaWxlcyBuZWNjZXNzYXJ5IGZvcgpkZXZlbG9waW5nIE9TUEYtQVBJIGFuZCBxdWFnZ2EgYXBwbGljYXRpb25zLgoKJXByZXAKJXNldHVwICAtcQoKJWJ1aWxkCiVjb25maWd1cmUgXAolaWYgISV7d2l0aF9zaGFyZWR9CgktLWRpc2FibGUtc2hhcmVkIFwKJWVuZGlmCiVpZiAle3dpdGhfaXB2Nn0KCS0tZW5hYmxlLWlwdjYgXAolZW5kaWYKJWlmICV7d2l0aF9zbm1wfQoJLS1lbmFibGUtc25tcCBcCiVlbmRpZgolaWYgJXt3aXRoX211bHRpcGF0aH0KCS0tZW5hYmxlLW11bHRpcGF0aD0le3dpdGhfbXVsdGlwYXRofSBcCiVlbmRpZgolaWYgJXt3aXRoX3RjcF96ZWJyYX0KCS0tZW5hYmxlLXRjcC16ZWJyYSBcCiVlbmRpZgolaWYgJXt3aXRoX25zc2F9CgktLWVuYWJsZS1uc3NhIFwKJWVuZGlmCiVpZiAle3dpdGhfb3BhcXVlX2xzYX0KCS0tZW5hYmxlLW9wYXF1ZS1sc2EgXAolZW5kaWYKJWlmICV7d2l0aF9vc3BmX3RlfQoJLS1lbmFibGUtb3NwZi10ZSBcCiVlbmRpZgolaWYgJXt3aXRoX3Z0eXNofQoJLS1lbmFibGUtdnR5c2ggXAolZW5kaWYKJWlmICV7d2l0aF9vc3BmY2xpZW50fQoJLS1lbmFibGUtb3NwZmNsaWVudD15ZXMgXAolZWxzZQoJLS1lbmFibGUtb3NwZmNsaWVudD1ub1wKJWVuZGlmCiVpZiAle3dpdGhfb3NwZmFwaX0KCS0tZW5hYmxlLW9zcGZhcGk9eWVzIFwKJWVsc2UKCS0tZW5hYmxlLW9zcGZhcGk9bm8gXAolZW5kaWYKJWlmICV7d2l0aF9pcmRwfQoJLS1lbmFibGUtaXJkcD15ZXMgXAolZWxzZQoJLS1lbmFibGUtaXJkcD1ubyBcCiVlbmRpZgolaWYgJXt3aXRoX2lzaXNkfQoJLS1lbmFibGUtaXNpc2QgXAolZWxzZQoJLS1kaXNhYmxlLWlzaXNkIFwKJWVuZGlmCiVpZiAle3dpdGhfcGFtfQoJLS13aXRoLWxpYnBhbSBcCiVlbmRpZgolaWYgJXF1YWdnYV91c2VyCgktLWVuYWJsZS11c2VyPSVxdWFnZ2FfdXNlciBcCgktLWVuYWJsZS1ncm91cD0lcXVhZ2dhX3VzZXIgXAolZW5kaWYKJWlmICV2dHlfZ3JvdXAKCS0tZW5hYmxlLXZ0eS1ncm91cD0ldnR5X2dyb3VwIFwKJWVuZGlmCi0tZW5hYmxlLW5ldGxpbmsKCm1ha2UgJXs/X3NtcF9tZmxhZ3N9IE1BS0VJTkZPPSJtYWtlaW5mbyAtLW5vLXNwbGl0IgoKcHVzaGQgZG9jCnRleGkyaHRtbCBxdWFnZ2EudGV4aQpwb3BkCgolaW5zdGFsbApybSAtcmYgJFJQTV9CVUlMRF9ST09UCgppbnN0YWxsIC1kICRSUE1fQlVJTERfUk9PVC9ldGMve3JjLmQvaW5pdC5kLHN5c2NvbmZpZyxsb2dyb3RhdGUuZCxwYW0uZH0gXAoJJFJQTV9CVUlMRF9ST09UL3Zhci9sb2cvcXVhZ2dhICRSUE1fQlVJTERfUk9PVCV7X2luZm9kaXJ9CgptYWtlIGluc3RhbGwgXAoJREVTVERJUj0kUlBNX0JVSUxEX1JPT1QKCiMgUmVtb3ZlIHRoaXMgZmlsZSwgYXMgaXQgaXMgdW5pbnN0YWxsZWQgYW5kIGNhdXNlcyBlcnJvcnMgd2hlbiBidWlsZGluZyBvbiBSSDkKcm0gLXJmICRSUE1fQlVJTERfUk9PVC91c3Ivc2hhcmUvaW5mby9kaXIKCiMgaW5zdGFsbCBldGMgc291cmNlcwpmb3IgZGFlbW9uIGluICV7ZGFlbW9uX2xpc3R9ICV7ZGFlbW9udjZfbGlzdH0gJXtkYWVtb25fb3RoZXJ9IDsgZG8KCWluc3RhbGwgJXt6ZWJfcmhfc3JjfS8ke2RhZW1vbn0uaW5pdCBcCgkJJFJQTV9CVUlMRF9ST09UL2V0Yy9yYy5kL2luaXQuZC8ke2RhZW1vbn0KZG9uZQppbnN0YWxsIC1tNjQ0ICV7emViX3JoX3NyY30vcXVhZ2dhLnBhbSBcCgkkUlBNX0JVSUxEX1JPT1QvZXRjL3BhbS5kL3F1YWdnYQppbnN0YWxsIC1tNjQ0ICV7emViX3JoX3NyY30vcXVhZ2dhLmxvZ3JvdGF0ZSBcCgkkUlBNX0JVSUxEX1JPT1QvZXRjL2xvZ3JvdGF0ZS5kL3F1YWdnYQppbnN0YWxsIC1tNjQ0ICV7emViX3JoX3NyY30vcXVhZ2dhLnN5c2NvbmZpZyBcCgkkUlBNX0JVSUxEX1JPT1QvZXRjL3N5c2NvbmZpZy9xdWFnZ2EKaW5zdGFsbCAtZCAtbTc1MCAgJFJQTV9CVUlMRF9ST09UL3Zhci9ydW4vcXVhZ2dhCgolcHJlCiMgYWRkIHZ0eV9ncm91cAolaWYgJXZ0eV9ncm91cApncm91cGFkZCAtciAldnR5X2dyb3VwIDI+IC9kZXYvbnVsbCB8fCA6CiVlbmRpZgojIGFkZCBxdWFnZ2EgdXNlciBhbmQgZ3JvdXAKJWlmICVxdWFnZ2FfdXNlcgovdXNyL3NiaW4vZ3JvdXBhZGQgLWcgJXF1YWdnYV9naWQgcXVhZ2dhIDI+IC9kZXYvbnVsbCB8fCA6Ci91c3Ivc2Jpbi91c2VyYWRkICAtdSAlcXVhZ2dhX3VpZCAtZyAlcXVhZ2dhX2dpZCBcCiAtTSAtciAtcyAvc2Jpbi9ub2xvZ2luIC1jICJRdWFnZ2Egcm91dGluZyBzdWl0ZSIgXAogLWQgJV9sb2NhbHN0YXRlZGlyICVxdWFnZ2FfdXNlciAyPiAvZGV2L251bGwgfHwgOgolZW5kaWYKCiVwb3N0CiMgemVicmFfc3BlY19hZGRfc2VydmljZSA8c2VydmljZSBuYW1lPiA8cG9ydC9wcm90bz4gPGNvbW1lbnQ+CiMgZS5nLiB6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIHplYnJhc3J2IDI2MDAvdGNwICJ6ZWJyYSBzZXJ2aWNlIgoKemVicmFfc3BlY19hZGRfc2VydmljZSAoKQp7CiAgIyBBZGQgcG9ydCAvZXRjL3NlcnZpY2VzIGVudHJ5IGlmIGl0IGlzbid0IGFscmVhZHkgdGhlcmUgCiAgaWYgWyAtZiAvZXRjL3NlcnZpY2VzIF0gJiYgISBncmVwIC1xICJeJDFbXmEtekEtWjAtOV0iIC9ldGMvc2VydmljZXMgOyB0aGVuCiAgICBlY2hvICIkMQkJJDIJCQkjICQzIiAgPj4gL2V0Yy9zZXJ2aWNlcwogIGZpCn0KCnplYnJhX3NwZWNfYWRkX3NlcnZpY2UgemVicmFzcnYgMjYwMC90Y3AgInplYnJhIHNlcnZpY2UiCnplYnJhX3NwZWNfYWRkX3NlcnZpY2UgemVicmEgICAgMjYwMS90Y3AgInplYnJhIHZ0eSIKemVicmFfc3BlY19hZGRfc2VydmljZSByaXBkICAgICAyNjAyL3RjcCAiUklQZCB2dHkiCiVpZiAle3dpdGhfaXB2Nn0KemVicmFfc3BlY19hZGRfc2VydmljZSByaXBuZ2QgICAyNjAzL3RjcCAiUklQbmdkIHZ0eSIKJWVuZGlmCnplYnJhX3NwZWNfYWRkX3NlcnZpY2Ugb3NwZmQgICAgMjYwNC90Y3AgIk9TUEZkIHZ0eSIKemVicmFfc3BlY19hZGRfc2VydmljZSBiZ3BkICAgICAyNjA1L3RjcCAiQkdQZCB2dHkiCiVpZiAle3dpdGhfaXB2Nn0KemVicmFfc3BlY19hZGRfc2VydmljZSBvc3BmNmQgICAyNjA2L3RjcCAiT1NQRjZkIHZ0eSIKJWVuZGlmCiVpZiAle3dpdGhfb3NwZmFwaX0KemVicmFfc3BlY19hZGRfc2VydmljZSBvc3BmYXBpICAyNjA3L3RjcCAiT1NQRi1BUEkiCiVlbmRpZgolaWYgJXt3aXRoX2lzaXNkfQp6ZWJyYV9zcGVjX2FkZF9zZXJ2aWNlIGlzaXNkICAgIDI2MDgvdGNwICJJU0lTZCB2dHkiCiVlbmRpZgoKZm9yIGRhZW1vbiBpbiAlZGFlbW9uX2xpc3QgOyBkbwoJL3NiaW4vY2hrY29uZmlnIC0tYWRkICR7ZGFlbW9ufQpkb25lCgovc2Jpbi9pbnN0YWxsLWluZm8gJXtfaW5mb2Rpcn0vcXVhZ2dhLmluZm8uZ3ogJXtfaW5mb2Rpcn0vZGlyCgojIENyZWF0ZSBkdW1teSBmaWxlcyBpZiB0aGV5IGRvbid0IGV4aXN0IHNvIGJhc2ljIGZ1bmN0aW9ucyBjYW4gYmUgdXNlZC4KaWYgWyAhIC1lICV7X3N5c2NvbmZkaXJ9L3plYnJhLmNvbmYgXTsgdGhlbgoJZWNobyAiaG9zdG5hbWUgYGhvc3RuYW1lYCIgPiAle19zeXNjb25mZGlyfS96ZWJyYS5jb25mCgljaG1vZCA2NDAgJXtfc3lzY29uZmRpcn0vemVicmEuY29uZgpmaQppZiBbICEgLWUgJXtfc3lzY29uZmRpcn0vdnR5c2guY29uZiBdOyB0aGVuCgl0b3VjaCAle19zeXNjb25mZGlyfS92dHlzaC5jb25mCgljaG1vZCA2NDAgJXtfc3lzY29uZmRpcn0vdnR5c2guY29uZgpmaQoKJXBvc3R1bgppZiBbICIkMSIgLWdlICAiMSIgXTsgdGhlbgoJZm9yIGRhZW1vbiBpbiAlZGFlbW9uX2xpc3QgOyBkbwoJCS9ldGMvcmMuZC9pbml0LmQvJHtkYWVtb259IGNvbmRyZXN0YXJ0ID4vZGV2L251bGwgMj4mMQoJZG9uZQpmaQoKJXByZXVuCmlmIFsgIiQxIiA9ICIwIiBdOyB0aGVuCglmb3IgZGFlbW9uIGluICVkYWVtb25fbGlzdCA7IGRvCgkJL2V0Yy9yYy5kL2luaXQuZC8ke2RhZW1vbn0gc3RvcCAgPi9kZXYvbnVsbCAyPiYxCgkJL3NiaW4vY2hrY29uZmlnIC0tZGVsICR7ZGFlbW9ufQoJZG9uZQoJL3NiaW4vaW5zdGFsbC1pbmZvIC0tZGVsZXRlICV7X2luZm9kaXJ9L3F1YWdnYS5pbmZvLmd6ICV7X2luZm9kaXJ9L2RpcgpmaQoKJWNsZWFuCiVpZiAhJXtrZWVwX2J1aWxkfQpybSAtcmYgJFJQTV9CVUlMRF9ST09UCiVlbmRpZgoKJWZpbGVzCiVkZWZhdHRyKC0scm9vdCxyb290KQolZG9jICovKi5zYW1wbGUqIEFVVEhPUlMgQ09QWUlORwolZG9jIGRvYy9xdWFnZ2EuaHRtbAolZG9jIGRvYy9tcGxzCiVkb2MgQ2hhbmdlTG9nIElOU1RBTEwgTkVXUyBSRUFETUUgUkVQT1JUSU5HLUJVR1MgU0VSVklDRVMgVE9ETwolaWYgJXtxdWFnZ2FfdXNlcn0KJWRpciAlYXR0cig3NTEsJXF1YWdnYV91c2VyLCVxdWFnZ2FfdXNlcikgJXtfc3lzY29uZmRpcn0KJWRpciAlYXR0cig3NTAsJXF1YWdnYV91c2VyLCVxdWFnZ2FfdXNlcikgL3Zhci9sb2cvcXVhZ2dhIAolZGlyICVhdHRyKDc1MSwlcXVhZ2dhX3VzZXIsJXF1YWdnYV91c2VyKSAvdmFyL3J1bi9xdWFnZ2EKJWVsc2UKJWRpciAlYXR0cig3NTAscm9vdCxyb290KSAle19zeXNjb25mZGlyfQolZGlyICVhdHRyKDc1MCxyb290LHJvb3QpIC92YXIvbG9nL3F1YWdnYQolZGlyICVhdHRyKDc1NSxyb290LHJvb3QpIC91c3Ivc2hhcmUvaW5mbwolZGlyICVhdHRyKDc1MCxyb290LHJvb3QpIC92YXIvcnVuL3F1YWdnYQolZW5kaWYKJWlmICV7dnR5X2dyb3VwfQolYXR0cig3NTAsJXF1YWdnYV91c2VyLCV2dHlfZ3JvdXApICV7X3N5c2NvbmZkaXJ9L3Z0eXNoLmNvbmYuc2FtcGxlCiVlbmRpZgole19pbmZvZGlyfS8qaW5mbyoKJXtfbWFuZGlyfS9tYW4qLyoKJXtfc2JpbmRpcn0vemVicmEKJXtfc2JpbmRpcn0vb3NwZmQKJXtfc2JpbmRpcn0vcmlwZAole19zYmluZGlyfS9iZ3BkCiVpZiAle3dpdGhfaXB2Nn0KJXtfc2JpbmRpcn0vcmlwbmdkCiV7X3NiaW5kaXJ9L29zcGY2ZAolZW5kaWYKJWlmICV7d2l0aF9pc2lzZH0KJXtfc2JpbmRpcn0vaXNpc2QKJWVuZGlmCiVpZiAle3dpdGhfc2hhcmVkfQole19saWJkaXJ9L2xpYiouc28KJXtfbGliZGlyfS9saWIqLnNvLioKJWVuZGlmCiVpZiAle3dpdGhfdnR5c2h9CiV7X2JpbmRpcn0vKgolZW5kaWYKJWNvbmZpZyAvZXRjL3F1YWdnYS9bIXZdKgolY29uZmlnIC9ldGMvcmMuZC9pbml0LmQvKgolY29uZmlnKG5vcmVwbGFjZSkgL2V0Yy9zeXNjb25maWcvcXVhZ2dhCiVjb25maWcobm9yZXBsYWNlKSAvZXRjL3BhbS5kL3F1YWdnYQolY29uZmlnKG5vcmVwbGFjZSkgJWF0dHIoNjQwLHJvb3Qscm9vdCkgL2V0Yy9sb2dyb3RhdGUuZC8qCgolZmlsZXMgY29udHJpYgolZGVmYXR0cigtLHJvb3Qscm9vdCkKJWRvYyB0b29scwoKJWZpbGVzIGRldmVsCiVkZWZhdHRyKC0scm9vdCxyb290KQolZGlyICV7X2xpYmRpcn0vKi5hCiVkaXIgJXtfbGliZGlyfS8qLmxhCiVkaXIgJXtfaW5jbHVkZWRpcn0vJW5hbWUvKi5oCiVkaXIgJXtfaW5jbHVkZWRpcn0vJW5hbWUvb3NwZmQvKi5oCiVpZiAle3dpdGhfb3NwZmFwaX0KJWRpciAle19pbmNsdWRlZGlyfS8lbmFtZS9vc3BmYXBpLyouaAolZW5kaWYKCiVjaGFuZ2Vsb2cKJWNoYW5nZWxvZwoqIFdlZCBTZXAgMTUgMjAwNCBQYXVsIEpha21hIDxwYXVsQGRpc2hvbmUuc3Q+Ci0gYnVpbGQgc25tcCBzdXBwb3J0IGJ5IGRlZmF1bHQKLSBidWlsZCBpcmRwIHN1cHBvcnQKLSBidWlsZCB3aXRoIHNoYXJlZCBsaWJzCi0gZGV2ZWwgc3VicGFja2FnZSBmb3IgYXJjaGl2ZXMgYW5kIGhlYWRlcnMKCiogVGh1IEphbiAwOCAyMDA0IFBhdWwgSmFrbWEgPHBhdWxAZGlzaG9uZS5zdD4KLSB1cGRhdGVkIHN5c2NvbmZpZyBmaWxlcyB0byBzcGVjaWZ5IGxvY2FsIGRpcgotIGFkZGVkIG9zcGZfZHVtcC5jIGNyYXNoIHF1aWNrIGZpeCBwYXRjaAotIGFkZGVkIG9zcGZkIHBlcnNpc3RlbnQgaW50ZXJmYWNlIGNvbmZpZ3VyYXRpb24gcGF0Y2gKCiogVHVlIERlYyAzMCAyMDAzIFBhdWwgSmFrbWEgPHBhdWxAZGlzaG9uZS5zdD4KLSBzeW5jIHRvIENWUwotIGludGVncmF0ZSBSSCBzeXNjb25maWcgcGF0Y2ggdG8gc3BlY2lmeSBkYWVtb24gb3B0aW9ucyAoUkgpCi0gZGVmYXVsdCB0byBoYXZlIHZ0eSBsaXN0ZW4gb25seSB0byAxMjcuMSAoUkgpCi0gYWRkIHVzZXIgd2l0aCBmaXhlZCBVSUQvR0lEIChSSCkKLSBjcmVhdGUgdXNlciB3aXRoIHNoZWxsIC9zYmluL25vbG9naW4gcmF0aGVyIHRoYW4gL2Jpbi9mYWxzZSAoUkgpCi0gc3RvcCBkYWVtb25zIG9uIHVuaW5zdGFsbCAoUkgpCi0gZGVsZXRlIGluZm8gZmlsZSBvbiAlcHJldW4sIG5vdCAlcG9zdHVuIHRvIGF2b2lkIGRlbGV0aW9uIG9uIHVwZ3JhZGUuIChSSCkKLSBpc2lzZCBhZGRlZAotIGNsZWFudXAgdGFza3MgY2FycmllZCBvdXQgZm9yIGV2ZXJ5IGRhZW1vbgoKKiBTdW4gTm92IDIgMjAwMyBQYXVsIEpha21hIDxwYXVsQGRpc2hvbmUuc3Q+Ci0gRml4IC1kZXZlbCBwYWNrYWdlIHRvIGluY2x1ZGUgYWxsIGZpbGVzCi0gU3luYyB0byAwLjk2LjQKCiogVHVlIEF1ZyAxMiAyMDAzIFBhdWwgSmFrbWEgPHBhdWxAZGlzaG9uZS5zdD4KLSBSZW5hbWVkIHRvIFF1YWdnYQotIFN5bmMgdG8gUXVhZ2dhIHJlbGVhc2UgMC45NgoKKiBUdWUgTWFyIDIwIDIwMDMgUGF1bCBKYWttYSA8cGF1bEBkaXNob25lLnN0PgotIHplYnJhIHByaXZpbGVnZXMgc3VwcG9ydAoKKiBNb24gTWFyIDE4IDIwMDMgUGF1bCBKYWttYSA8cGF1bEBkaXNob25lLnN0PgotIEZpeCBtZW0gbGVhayBpbiAnc2hvdyB0aHJlYWQgY3B1JwotIFJhbHBoIEtlbGxlcidzIE9TUEYtQVBJCi0gQW1pcjogRml4IGNvbmZpZ3VyZS5hYyBmb3IgbmV0LXNubXAKCiogU2F0IE1hciAxIDIwMDMgUGF1bCBKYWttYSA8cGF1bEBkaXNob25lLnN0PgotIG9zcGZkIElPUyBwcmVmaXggdG8gaW50ZXJmYWNlIG1hdGNoaW5nIGZvciAnbmV0d29yaycgc3RhdGVtZW50Ci0gdGVtcG9yYXJ5IGZpeCBmb3IgUHRQIGFuZCBJUHY2Ci0gc3luYyB0byB6ZWJyYS5vcmcgQ1ZTCgoqIE1vbiBKYW4gMjAgMjAwMyBQYXVsIEpha21hIDxwYXVsQGRpc2hvbmUuc3Q+Ci0gdXBkYXRlIHRvIGxhdGVzdCBjdnMKLSBZb24ncyAic2hvdyB0aHJlYWQgY3B1IiBwYXRjaCAtIDE3MjE3Ci0gd2FsayB1cCB0cmVlIC0gMTcyMTgKLSBvc3BmZCBOU1NBIGZpeGVzIC0gMTY2ODEKLSBvc3BmZCBuc20gZml4ZXMgLSAxNjgyNAotIG9zcGZkIE9MU0EgZml4ZXMgYW5kIG5ldyBmZWF0dXJlIC0gMTY4MjMgCi0gS0FNRSBhbmQgaWZpbmRleCBmaXhlcyAtIDE2NTI1Ci0gc3BlYyBmaWxlIGNoYW5nZXMgdG8gYWxsb3cgcmVkaGF0IGZpbGVzIHRvIGJlIGluIHRyZWUKCiogU2F0IERlYyAyOCAyMDAyIEFsZXhhbmRlciBIb29nZXJodWlzIDxhbGV4aEBpaGF0ZW50LmNvbT4KLSBBZGRlZCBjb25kaXRpb25hbHMgZm9yIGJ1aWxkaW5nIHdpdGgob3V0KSBJUHY2LCB2dHlzaCwgUklQLCBCR1AKLSBGaXhlZCB1cCBzb21lIGJ1aWxkIHJlcXVpcmVtZW50cyAocGF0Y2gpCi0gQWRkZWQgY29uZGl0aW9uYWwgYnVpbGQgcmVxdWlyZW1lbnRzIGZvciB2dHlzaCAvIHNubXAKLSBBZGRlZCBjb25kaXRpb25hbCB0byAlZmlsZXMgZm9yICVfYmluZGlyIGRlcGVuZGluZyBvbiB2dHlzaAoKKiBNb24gTm92IDExIDIwMDIgUGF1bCBKYWttYSA8cGF1bGpAYWxwaHlyYS5pZT4KLSB1cGRhdGUgdG8gbGF0ZXN0IENWUwotIGFkZCBHcmVnIFRyb3hlbCdzIG1kNSBidWZmZXIgY29weS9kdXAgZml4Ci0gYWRkIFJJUHYxIGZpeAotIGFkZCBGcmFuaydzIG11bHRpY2FzdCBmbGFnIGZpeAoKKiBXZWQgT2N0IDA5IDIwMDIgUGF1bCBKYWttYSA8cGF1bGpAYWxwaHlyYS5pZT4KLSB1cGRhdGUgdG8gbGF0ZXN0IENWUwotIHRpbWVzdGFtcGVkIGNyeXB0X3NlcW51bSBwYXRjaAotIG9pLT5vbl93cml0ZV9xIGZpeAoKKiBNb24gU2VwIDMwIDIwMDIgUGF1bCBKYWttYSA8cGF1bGpAYWxwaHlyYS5pZT4KLSB1cGRhdGUgdG8gbGF0ZXN0IENWUwotIGFkZCB2dHlzaCAnd3JpdGUtY29uZmlnIChpbnRlZ3JhdGVkfGRhZW1vbiknIHBhdGNoCi0gYWx3YXlzICdtYWtlIHJlYnVpbGQnIGluIHZ0eXNoLyB0byBjYXRjaCBuZXcgY29tbWFuZHMKCiogRnJpIFNlcCAxMyAyMDAyIFBhdWwgSmFrbWEgPHBhdWxqQGFscGh5cmEuaWU+Ci0gdXBkYXRlIHRvIDAuOTNiCgoqIFdlZCBTZXAgMTEgMjAwMiBQYXVsIEpha21hIDxwYXVsakBhbHBoeXJhLmllPgotIHVwZGF0ZSB0byBsYXRlc3QgQ1ZTCi0gYWRkICIvc2Jpbi9pcCByb3V0ZSBmbHVzaCBwcm90byB6ZWJyYSIgdG8gemVicmEgUkggaW5pdCBvbiBzdGFydHVwCgoqIFNhdCBBdWcgMjQgMjAwMiBQYXVsIEpha21hIDxwYXVsakBhbHBoeXJhLmllPgotIHVwZGF0ZSB0byBjdXJyZW50IENWUwotIGFkZCBPU1BGIHBvaW50IHRvIG11bHRpcG9pbnQgcGF0Y2gKLSBhZGQgT1NQRiBidWdmaXhlcwotIGFkZCBCR1AgaGFzaCBvcHRpbWlzYXRpb24gcGF0Y2gKCiogRnJpIEp1biAxNCAyMDAyIFBhdWwgSmFrbWEgPHBhdWxqQGFscGh5cmEuaWU+Ci0gdXBkYXRlIHRvIDAuOTMtcHJlMSAvIENWUwotIGFkZCBsaW5rIHN0YXRlIGRldGVjdGlvbiBzdXBwb3J0Ci0gYWRkIGdlbmVyaWMgUHRQIGFuZCBSRkMzMDIxIHN1cHBvcnQKLSB2YXJpb3VzIGJ1ZyBmaXhlcwoKKiBUaHUgQXVnIDA5IDIwMDEgRWxsaW90IExlZSA8c29wd2l0aEByZWRoYXQuY29tPiAwLjkxYS02Ci0gRml4IGJ1ZyAjNTEzMzYKCiogV2VkIEF1ZyAgMSAyMDAxIFRyb25kIEVpdmluZCBHbG9tc3L4ZCA8dGVnQHJlZGhhdC5jb20+IDAuOTFhLTUKLSBVc2UgZ2VuZXJpYyBpbml0c2NyaXB0IHN0cmluZ3MgaW5zdGVhZCBvZiBpbml0c2NyaXB0IHNwZWNpZmljCiAgKCAiU3RhcnRpbmcgZm9vOiAiIC0+ICJTdGFydGluZyAkcHJvZzoiICkKCiogRnJpIEp1bCAyNyAyMDAxIEVsbGlvdCBMZWUgPHNvcHdpdGhAcmVkaGF0LmNvbT4gMC45MWEtNAotIEJ1bXAgdGhlIHJlbGVhc2Ugd2hlbiByZWJ1aWxkaW5nIGludG8gdGhlIGRpc3QuCgoqIFR1ZSBGZWIgIDYgMjAwMSBUaW0gUG93ZXJzIDx0aW1wQHJlZGhhdC5jb20+Ci0gYnVpbHQgZm9yIFBvd2VydG9vbHMKCiogU3VuIEZlYiAgNCAyMDAxIFBla2thIFNhdm9sYSA8cGVra2FzQG5ldGNvcmUuZmk+IAotIEhhY2tlZCB1cCBmcm9tIFBMRCBMaW51eCAwLjkwLTEsIE1hbmRyYWtlIDAuOTAtMW1kayBhbmQgb25lIGZyb20gemVicmEub3JnLgotIFVwZGF0ZSB0byAwLjkxYQotIFZlcnkgaGVhdnkgbW9kaWZpY2F0aW9ucyB0byBpbml0LmQvKiwgLnNwZWMsIHBhbSwgaTE4biwgbG9ncm90YXRlLCBldGMuCi0gU2hvdWxkIGJlIHF1aXRlIFJlZCBIYXQnaXNxdWUgbm93Lgo=